<?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>165927</bug_id>
          
          <creation_ts>2016-12-15 16:10:13 -0800</creation_ts>
          <short_desc>Use simctl instead of LayoutTestRelay</short_desc>
          <delta_ts>2017-02-10 13:59:58 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>Other</version>
          <rep_platform>iPhone / iPad</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=166660</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jonathan Bedard">jbedard</reporter>
          <assigned_to name="Jonathan Bedard">jbedard</assigned_to>
          <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>glenn</cc>
    
    <cc>lforschler</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1260328</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-12-15 16:10:13 -0800</bug_when>
    <thetext>Stream-lining automation for iOS Simulators by removing LayoutTestRelay and replacing it with a Python implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260329</commentid>
    <comment_count>1</comment_count>
      <attachid>297242</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-12-15 16:11:25 -0800</bug_when>
    <thetext>Created attachment 297242
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260333</commentid>
    <comment_count>2</comment_count>
      <attachid>297244</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-12-15 16:15:35 -0800</bug_when>
    <thetext>Created attachment 297244
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260362</commentid>
    <comment_count>3</comment_count>
      <attachid>297250</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-12-15 16:32:21 -0800</bug_when>
    <thetext>Created attachment 297250
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260629</commentid>
    <comment_count>4</comment_count>
      <attachid>297325</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-12-16 10:43:04 -0800</bug_when>
    <thetext>Created attachment 297325
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260631</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-16 10:44:10 -0800</bug_when>
    <thetext>Attachment 297325 did not pass style-queue:


ERROR: Tools/WebKitTestRunner/ios/TestControllerIOS.mm:35:  Bad include order. Mixing system and custom headers.  [build/include_order] [4]
Total errors found: 1 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260632</commentid>
    <comment_count>6</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-12-16 10:45:37 -0800</bug_when>
    <thetext>The most recent patch keeps the LayoutTestRelay directory, there is a bug in webkit-patch which prevents these changes from being run through EWS.  https://bugs.webkit.org/show_bug.cgi?id=165953 is tracking this bug, but this patch really needs an EWS check, so for the time being, LayoutTestRelay will remain integrated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260663</commentid>
    <comment_count>7</comment_count>
      <attachid>297333</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-12-16 11:21:47 -0800</bug_when>
    <thetext>Created attachment 297333
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260670</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-16 11:24:58 -0800</bug_when>
    <thetext>Attachment 297333 did not pass style-queue:


ERROR: Tools/WebKitTestRunner/ios/TestControllerIOS.mm:35:  Bad include order. Mixing system and custom headers.  [build/include_order] [4]
Total errors found: 1 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260696</commentid>
    <comment_count>9</comment_count>
      <attachid>297341</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-12-16 12:20:54 -0800</bug_when>
    <thetext>Created attachment 297341
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260697</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-16 12:23:18 -0800</bug_when>
    <thetext>Attachment 297341 did not pass style-queue:


ERROR: Tools/WebKitTestRunner/ios/TestControllerIOS.mm:35:  Bad include order. Mixing system and custom headers.  [build/include_order] [4]
Total errors found: 1 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260740</commentid>
    <comment_count>11</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-12-16 14:05:55 -0800</bug_when>
    <thetext>An additional note: these changes have been fully tested on Windows as well, and do not break server_process on the Windows port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260772</commentid>
    <comment_count>12</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2016-12-16 15:11:37 -0800</bug_when>
    <thetext>Dan Bates and I discussed this patch in person.  Removing the review flag as it will be split into multiple patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264155</commentid>
    <comment_count>13</comment_count>
      <attachid>298112</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-05 10:53:18 -0800</bug_when>
    <thetext>Created attachment 298112
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264156</commentid>
    <comment_count>14</comment_count>
      <attachid>298113</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-05 10:55:18 -0800</bug_when>
    <thetext>Created attachment 298113
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264157</commentid>
    <comment_count>15</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-05 10:57:14 -0800</bug_when>
    <thetext>Attachment 298112 will be used as the final patch, but due to https://bugs.webkit.org/show_bug.cgi?id=165953, EWS cannot be applied to it.  For the time being, attachment 298113 has all of the changes except the actual removal of the Tool/LayoutTestRelay directory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264158</commentid>
    <comment_count>16</comment_count>
      <attachid>298114</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-05 11:00:47 -0800</bug_when>
    <thetext>Created attachment 298114
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1265222</commentid>
    <comment_count>17</comment_count>
      <attachid>298114</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-01-09 17:13:14 -0800</bug_when>
    <thetext>Comment on attachment 298114
Patch

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

I am still reading through the patch. Here are some notes so far.

&gt; Tools/Scripts/webkitpy/port/darwin.py:178
&gt; +    def extractBundleID(self, app):

Nit: The name of this function should use words separated by underscores instead of CamelCase.

&gt; Tools/Scripts/webkitpy/port/darwin.py:179
&gt; +        return self._executive.run_command([&apos;/usr/libexec/PlistBuddy&apos;, &apos;-c&apos;, &apos;Print CFBundleIdentifier&apos;, app + &apos;/Info.plist&apos;]).rstrip()

Take app to be the path to a Mac app bundle, say Safari.app. Then PlistBuddy will return a nonzero exit status because the file &quot;path to Safari.app&quot;/Info.plist does not exit. Either we make this work for all Darwin ports or we should move this function to the iOS Simulator port.

&gt; Tools/Scripts/webkitpy/port/driver.py:618
&gt; +            dump_tool]

Nit: The &apos;]&apos; should be on its own line that is left aligned with the start of the name of the variable the array is assigned to (as was done prior to this change).

&gt; Tools/Scripts/webkitpy/port/ios.py:216
&gt;      def _build_driver(self):
&gt;          built_tool = super(IOSSimulatorPort, self)._build_driver()
&gt; -        built_relay = self._build_relay()
&gt; -        return built_tool and built_relay
&gt; +        return built_tool

Please remove this method as it is functionally equivalent to its base class implementation.

&gt; Tools/Scripts/webkitpy/port/server_process.py:55
&gt; +class ServerProcessBase(object):

We prefer to have one class per file to keep files small and focused. Please move this class to another file, say server_process_base.py.

&gt; Tools/Scripts/webkitpy/port/server_process.py:67
&gt;          self._pid = None

Is it necessary to keep this instance variable?

&gt; Tools/Scripts/webkitpy/port/server_process.py:81
&gt; +    def _grabData(self, deadline):

Can we come up with a better name for this function? I feel the name of this function, including the word &quot;grab&quot;, is more vague that the prefix &quot;_wait_for_data_and_update_buffers&quot; used on the platform-specific functions being replaced by this function. Maybe _platform_wait_for_data_and_update_buffers would be a more descriptive name?

&gt; Tools/Scripts/webkitpy/port/server_process.py:448
&gt; +        if self._stdin:
&gt; +            os.close(self._stdin)
&gt; +        if self._stdout:
&gt; +            os.close(self._stdout)
&gt; +        if self._stderr:
&gt; +            os.close(self._stderr)
&gt; +        self._stdin = None
&gt; +        self._stdout = None
&gt; +        self._stderr = None

I would write this as:

if self._stdin:
    os.close(self._stdin)
    self._stdin = None
if self._stdout:
    os.close(self._stdout)
     self._stdout = None
if self._stderr:
    os.close(self._stderr)
    self._stderr = None

&gt; Tools/Scripts/webkitpy/port/server_process.py:457
&gt; +    def __unlink_make_fifo(self, path):
&gt; +        try:
&gt; +            os.unlink(path)
&gt; +        except OSError as e:
&gt; +            if os.path.exists(path):
&gt; +                raise OSError(&quot;Could not unlink &apos;&quot; + path + &quot;&apos;, the target path is a file not a pipe.&quot;)
&gt; +        os.mkfifo(path, 0666)

I understand the temptation to combine removal of the FIFO and creation of the FIFO into a common function. This has the disadvantage that we do not clean up the FIFO files on process termination. I suggest that we move the os.unlink() logic to SimulatorProcess._reset() and move os.mkfifo() logic to SimulatorProcess._start() so that we always remove the FIFO files on process termination.

On another note, I know that you are using the same umask of 0666 for the FIFOs as LayoutTestRelay used. Is it necessary to be so permissive? We do not need to fix this up now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1265364</commentid>
    <comment_count>18</comment_count>
      <attachid>298114</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-10 08:34:52 -0800</bug_when>
    <thetext>Comment on attachment 298114
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/port/darwin.py:179
&gt;&gt; +        return self._executive.run_command([&apos;/usr/libexec/PlistBuddy&apos;, &apos;-c&apos;, &apos;Print CFBundleIdentifier&apos;, app + &apos;/Info.plist&apos;]).rstrip()
&gt; 
&gt; Take app to be the path to a Mac app bundle, say Safari.app. Then PlistBuddy will return a nonzero exit status because the file &quot;path to Safari.app&quot;/Info.plist does not exit. Either we make this work for all Darwin ports or we should move this function to the iOS Simulator port.

I think we should make this work for all Darwin ports.  It should be pretty trivial anyways.

&gt;&gt; Tools/Scripts/webkitpy/port/server_process.py:67
&gt;&gt;          self._pid = None
&gt; 
&gt; Is it necessary to keep this instance variable?

Yes.  The _pid is different from the _proc and is not unique to ServerProcess.

&gt;&gt; Tools/Scripts/webkitpy/port/server_process.py:457
&gt;&gt; +        os.mkfifo(path, 0666)
&gt; 
&gt; I understand the temptation to combine removal of the FIFO and creation of the FIFO into a common function. This has the disadvantage that we do not clean up the FIFO files on process termination. I suggest that we move the os.unlink() logic to SimulatorProcess._reset() and move os.mkfifo() logic to SimulatorProcess._start() so that we always remove the FIFO files on process termination.
&gt; 
&gt; On another note, I know that you are using the same umask of 0666 for the FIFOs as LayoutTestRelay used. Is it necessary to be so permissive? We do not need to fix this up now.

Thinking about this, no.  At the very least the stdin queue can be 644, and it is possible that (assuming the simulators are the same user as the scripts) that 600 will work.  I&apos;ll try those and update the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1265425</commentid>
    <comment_count>19</comment_count>
      <attachid>298480</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-10 10:45:18 -0800</bug_when>
    <thetext>Created attachment 298480
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1265437</commentid>
    <comment_count>20</comment_count>
      <attachid>298485</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-10 11:02:01 -0800</bug_when>
    <thetext>Created attachment 298485
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266278</commentid>
    <comment_count>21</comment_count>
      <attachid>298485</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-12 14:09:29 -0800</bug_when>
    <thetext>Comment on attachment 298485
Patch

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

Discussed in person with Dan Bates.  Will be noting some of the high-level comments here.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:35
&gt; +

Give SimulatorProcess a _proc which resembles the _proc used by server_process and moved function involving _proc which are sufficiently similar to server_process_base

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:639
&gt; +

Move these function to the device class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266286</commentid>
    <comment_count>22</comment_count>
      <attachid>298485</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-01-12 14:24:00 -0800</bug_when>
    <thetext>Comment on attachment 298485
Patch

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

&gt; Tools/Scripts/webkitpy/port/darwin.py:178
&gt; +    def extract_bundle_ID(self, app):

Maybe a better name for this method would be app_identifier_from_bundle? This would match the name of the analogous Perl function we have in webkitdirs.pm.

&gt; Tools/Scripts/webkitpy/port/driver.py:625
&gt; -# FIXME: this should be abstracted out via the Port subclass somehow.
&gt;  class IOSSimulatorDriver(Driver):
&gt;      def cmd_line(self, pixel_tests, per_test_args):
&gt;          cmd = super(IOSSimulatorDriver, self).cmd_line(pixel_tests, per_test_args)
&gt; -        relay_tool = self._port.relay_path
&gt;          dump_tool = cmd[0]
&gt;          dump_tool_args = cmd[1:]
&gt; -        product_dir = self._port._build_path()
&gt;          relay_args = [
&gt; -            &apos;-developerDir&apos;, self._port.developer_dir,
&gt; -            &apos;-udid&apos;, self._port.device_id_for_worker_number(self._worker_number),
&gt; -            &apos;-productDir&apos;, product_dir,
&gt; -            &apos;-app&apos;, dump_tool,
&gt; +            self._port.device_id_for_worker_number(self._worker_number),
&gt; +            dump_tool,
&gt;          ]
&gt; -        return [relay_tool] + relay_args + [&apos;--&apos;] + dump_tool_args
&gt; +        return relay_args + [&apos;--&apos;] + dump_tool_args
&gt;  
&gt;      def _setup_environ_for_driver(self, environment):
&gt;          environment[&apos;DEVELOPER_DIR&apos;] = self._port.developer_dir

This class is not very meaningful anymore. As far as I can tell it only differs from the behavior of its base class in that it sets the environment variable DEVELOPER_DIR to the path to the Xcode developer directory and constructs an invalid command line as a means to pass the UDID of the device to use to the ServerProcess object. I do not believe the former is necessary now that we are moving to use simctl to interact with the Simulator instead of the CoreSimulator APIs and the latter is an abuse of the purpose of the Driver.cmd_line() method to return a valid command line to invoke so as to pass additional data to an instantiated ServerProcess. One way to avoid such an abuse is to modify the ServerProcess constructor to take a worker number (is there a better way?).

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:34
&gt; +class SimulatorProcess(ServerProcessBase):

Towards using more of the ServerProcessBase functionality and avoid the need to duplicate its logic in this derived class I suggest that we define a Popen-like class, say SimulatorPopen, and have SimulatorProcess._start() instantiate an instance of it and store it in ServerProcessBase._proc.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:121
&gt; +    def poll(self):
&gt; +        if not self.is_started():
&gt; +            return None
&gt; +        try:
&gt; +            temp = os.read(self._stderr, 128)
&gt; +            if temp:
&gt; +                self._error += temp
&gt; +            else:
&gt; +                return True
&gt; +        except OSError as e:
&gt; +            pass
&gt; +        except:
&gt; +            return True
&gt; +        return False

We should implement poll() such that it checks that the simulator process actually running as opposed to indirectly checking this condition by trying to read from stderr. We can make use of a kqueue and kqueue events to implement the polling behavior efficiently. See &lt;https://docs.python.org/2/library/select.html&gt; for more details. Assuming we go with the approach of using SimulatorPopen to represent a Popen-like object then such polling logic should be in SimulatorPopen.poll() and we can remove this method and use the base classes ServerProcessBase.poll() as it will call SimulatorPopen.poll() via self._proc.

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:617
&gt; +    def install(self, device, app):

Maybe a better name for this method and the parameter app would be install_app and bundle_identifier, respectively. I suggest that we move this function to class Device since it operates on a device. Then we can remove the device parameter from the function prototype.

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:622
&gt; +    def run(self, device, app_id, args, env=None):

Maybe a better name for this method and the parameter app_id would be launch_app and bundle_identifier, respectively. I suggest that we move this function to class Device since it operates on a device. Then we can remove the device parameter from the function prototype.

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:635
&gt; +    def kill(self, device, app_id):

Maybe a better name for this function and the parameter app_id would be terminate_app/kill_app and bundle_identifier, respectively. I suggest that we move this function to class Device since it operates on a device. Then we can remove the device parameter from the function prototype.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266597</commentid>
    <comment_count>23</comment_count>
      <attachid>298485</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-13 15:04:56 -0800</bug_when>
    <thetext>Comment on attachment 298485
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/port/driver.py:625
&gt;&gt;          environment[&apos;DEVELOPER_DIR&apos;] = self._port.developer_dir
&gt; 
&gt; This class is not very meaningful anymore. As far as I can tell it only differs from the behavior of its base class in that it sets the environment variable DEVELOPER_DIR to the path to the Xcode developer directory and constructs an invalid command line as a means to pass the UDID of the device to use to the ServerProcess object. I do not believe the former is necessary now that we are moving to use simctl to interact with the Simulator instead of the CoreSimulator APIs and the latter is an abuse of the purpose of the Driver.cmd_line() method to return a valid command line to invoke so as to pass additional data to an instantiated ServerProcess. One way to avoid such an abuse is to modify the ServerProcess constructor to take a worker number (is there a better way?).

I agree.  I&apos;m not sure what the best way to remove it is, though.  I think for the time being, I&apos;d like to keep this class around.  I will have a patch later which removes it, I think given the scope of this patch, this change should wait.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266599</commentid>
    <comment_count>24</comment_count>
      <attachid>298790</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-13 15:14:00 -0800</bug_when>
    <thetext>Created attachment 298790
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266600</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-13 15:15:31 -0800</bug_when>
    <thetext>Attachment 298790 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/port/simulator_process.py:122:  [SimulatorProcess._kill] Undefined variable &apos;elf&apos;  [pylint/E0602] [5]
ERROR: Tools/Scripts/webkitpy/port/simulator_process.py:111:  [SimulatorProcess._start] Access to member &apos;_stdin&apos; before its definition line 113  [pylint/E0203] [5]
ERROR: Tools/Scripts/webkitpy/port/server_process_base.py:92:  [ServerProcessBase._reset] Access to member &apos;_proc&apos; before its definition line 102  [pylint/E0203] [5]
ERROR: Tools/Scripts/webkitpy/port/server_process_base.py:93:  [ServerProcessBase._reset] Access to member &apos;_proc&apos; before its definition line 102  [pylint/E0203] [5]
ERROR: Tools/Scripts/webkitpy/port/server_process_base.py:94:  [ServerProcessBase._reset] Access to member &apos;_proc&apos; before its definition line 102  [pylint/E0203] [5]
ERROR: Tools/Scripts/webkitpy/port/server_process_base.py:95:  [ServerProcessBase._reset] Access to member &apos;_proc&apos; before its definition line 102  [pylint/E0203] [5]
ERROR: Tools/Scripts/webkitpy/port/server_process_base.py:96:  [ServerProcessBase._reset] Access to member &apos;_proc&apos; before its definition line 102  [pylint/E0203] [5]
ERROR: Tools/Scripts/webkitpy/port/server_process_base.py:97:  [ServerProcessBase._reset] Access to member &apos;_proc&apos; before its definition line 102  [pylint/E0203] [5]
ERROR: Tools/Scripts/webkitpy/port/server_process_base.py:98:  [ServerProcessBase._reset] Access to member &apos;_proc&apos; before its definition line 102  [pylint/E0203] [5]
ERROR: Tools/Scripts/webkitpy/port/server_process_base.py:99:  [ServerProcessBase._reset] Access to member &apos;_proc&apos; before its definition line 102  [pylint/E0203] [5]
ERROR: Tools/Scripts/webkitpy/port/server_process_base.py:100:  [ServerProcessBase._reset] Access to member &apos;_proc&apos; before its definition line 102  [pylint/E0203] [5]
Total errors found: 11 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266601</commentid>
    <comment_count>26</comment_count>
      <attachid>298791</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-13 15:19:41 -0800</bug_when>
    <thetext>Created attachment 298791
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266603</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-13 15:22:38 -0800</bug_when>
    <thetext>Attachment 298791 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/port/simulator_process.py:111:  [SimulatorProcess._start] Access to member &apos;_stdin&apos; before its definition line 113  [pylint/E0203] [5]
ERROR: Tools/Scripts/webkitpy/port/server_process_base.py:91:  [ServerProcessBase._reset] Access to member &apos;_proc&apos; before its definition line 102  [pylint/E0203] [5]
ERROR: Tools/Scripts/webkitpy/port/server_process_base.py:92:  [ServerProcessBase._reset] Access to member &apos;_proc&apos; before its definition line 102  [pylint/E0203] [5]
ERROR: Tools/Scripts/webkitpy/port/server_process_base.py:93:  [ServerProcessBase._reset] Access to member &apos;_proc&apos; before its definition line 102  [pylint/E0203] [5]
ERROR: Tools/Scripts/webkitpy/port/server_process_base.py:94:  [ServerProcessBase._reset] Access to member &apos;_proc&apos; before its definition line 102  [pylint/E0203] [5]
ERROR: Tools/Scripts/webkitpy/port/server_process_base.py:95:  [ServerProcessBase._reset] Access to member &apos;_proc&apos; before its definition line 102  [pylint/E0203] [5]
ERROR: Tools/Scripts/webkitpy/port/server_process_base.py:96:  [ServerProcessBase._reset] Access to member &apos;_proc&apos; before its definition line 102  [pylint/E0203] [5]
ERROR: Tools/Scripts/webkitpy/port/server_process_base.py:97:  [ServerProcessBase._reset] Access to member &apos;_proc&apos; before its definition line 102  [pylint/E0203] [5]
ERROR: Tools/Scripts/webkitpy/port/server_process_base.py:98:  [ServerProcessBase._reset] Access to member &apos;_proc&apos; before its definition line 102  [pylint/E0203] [5]
ERROR: Tools/Scripts/webkitpy/port/server_process_base.py:99:  [ServerProcessBase._reset] Access to member &apos;_proc&apos; before its definition line 102  [pylint/E0203] [5]
ERROR: Tools/Scripts/webkitpy/port/server_process_base.py:100:  [ServerProcessBase._reset] Access to member &apos;_proc&apos; before its definition line 102  [pylint/E0203] [5]
Total errors found: 11 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266606</commentid>
    <comment_count>28</comment_count>
      <attachid>298792</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-13 15:29:45 -0800</bug_when>
    <thetext>Created attachment 298792
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266609</commentid>
    <comment_count>29</comment_count>
      <attachid>298794</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-13 15:35:52 -0800</bug_when>
    <thetext>Created attachment 298794
Removes layout test relay</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266659</commentid>
    <comment_count>30</comment_count>
      <attachid>298792</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-01-13 16:50:52 -0800</bug_when>
    <thetext>Comment on attachment 298792
Patch

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

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:35
&gt; +class fifoProcess(object):

Can we come up with a better name? Maybe SimulatorProcessPopen?

We should nest this class into SimulatorProcess.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:37
&gt; +    def __init__(self, stdin_handle, stdout_handle, stderr_handle, pid):

These should take the Python File objects instead of file descriptors.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:71
&gt; +        self._bundleID = self._port.app_identifier_from_bundle(self._cmd[1])

This variable name does not conform to PEP-8

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:73
&gt; +        self._device.install_app(self._cmd[1])

We should assert that this does not return None.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:88
&gt; +    def __unlink_check_exists(self, path):
&gt; +        try:
&gt; +            os.unlink(path)
&gt; +        except OSError as e:
&gt; +            if os.path.exists(path):
&gt; +                raise OSError(&quot;Could not unlink &apos;&quot; + path + &quot;&apos;, the target path is a file not a pipe.&quot;)

I do not see the value in the try/except and there is a time of check to time of use bug. I think we should inline the os.unlink() call into the caller and let it throw an exception if it does.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:98
&gt; +    def _start(self):
&gt; +        os.mkfifo(self._in_path, 0600)

I would have expected we do the same check for non-None self._proc and call _reset() here as in the base class.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:106
&gt; +            stdout = os.open(self._out_path, os.O_RDONLY | os.O_NONBLOCK)
&gt; +            stderr = os.open(self._error_path, os.O_RDONLY | os.O_NONBLOCK)

I suggest that we use the higher-level open() call to open these and then have a convenience functions, say set_non_blocking(), that take a Python File object and makes non-blocking.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:112
&gt; +        except OSError as e:
&gt; +            self._crashed = True
&gt; +            if stdout:
&gt; +                os.close(stdout)
&gt; +            if stderr:
&gt; +                os.close(stderr)

This is just to defend against the FIFO being deleted between the time the app launches and now, right?

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:267
&gt; +        if self._host.executive.run_command([&apos;xcrun&apos;, &apos;simctl&apos;, &apos;install&apos;, self.udid, app_path], return_exit_code=True) &gt; 0:
&gt; +            return False
&gt; +        return True

I would write this as:

return !self._host.executive.run_command([&apos;xcrun&apos;, &apos;simctl&apos;, &apos;install&apos;, self.udid, app_path], return_exit_code=True)

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:270
&gt; +        transferedEnvironment = {}

Maybe a better name for this would be environment_to_use?

At least make this name conform to PEP-8 naming conventions.

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:273
&gt; +                if not &quot;SIMCTL_CHILD_&quot; in value:

Take value := &quot;X_SIMCTL_CHILD_Y&quot; then we will not prepend SIMCTL_CHILD_ to value.

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:276
&gt; +        str = self._host.executive.run_command([&apos;xcrun&apos;, &apos;simctl&apos;, &apos;launch&apos;, self.udid, bundle_identifier] + args, env=transferedEnvironment)

Can we come up with a better name for this variable? Maybe output?

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:280
&gt; +        if not bundle_identifier in str:
&gt; +            return None
&gt; +        str = str.rstrip(&apos;\n&apos;).split()[1]
&gt; +        return int(str)

This seems brittle. I suggest that we match against a regular expression.

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:285
&gt; +        if self._host.executive.run_command([&apos;xcrun&apos;, &apos;simctl&apos;, &apos;terminate&apos;, self.udid, bundle_identifier], return_exit_code=True) &gt; 0:
&gt; +            return False
&gt; +        return True

I would write this as:

return !self._host.executive.run_command([&apos;xcrun&apos;, &apos;simctl&apos;, &apos;terminate&apos;, self.udid, bundle_identifier], return_exit_code=True)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266668</commentid>
    <comment_count>31</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-01-13 16:57:51 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; Comment on attachment 298485 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=298485&amp;action=review
&gt; 
&gt; &gt;&gt; Tools/Scripts/webkitpy/port/driver.py:625
&gt; &gt;&gt;          environment[&apos;DEVELOPER_DIR&apos;] = self._port.developer_dir
&gt; &gt; 
&gt; &gt; This class is not very meaningful anymore. As far as I can tell it only differs from the behavior of its base class in that it sets the environment variable DEVELOPER_DIR to the path to the Xcode developer directory and constructs an invalid command line as a means to pass the UDID of the device to use to the ServerProcess object. I do not believe the former is necessary now that we are moving to use simctl to interact with the Simulator instead of the CoreSimulator APIs and the latter is an abuse of the purpose of the Driver.cmd_line() method to return a valid command line to invoke so as to pass additional data to an instantiated ServerProcess. One way to avoid such an abuse is to modify the ServerProcess constructor to take a worker number (is there a better way?).
&gt; 
&gt; I agree.  I&apos;m not sure what the best way to remove it is, though.  

What about the way I describe above to pass the worker number when instantiating the ServerProcess via _test_runner_process_constructor()?

&gt; I think for the time being, I&apos;d like to keep this class around.  I will have a patch
&gt; later which removes it, I think given the scope of this patch, this change
&gt; should wait.

I would prefer to remove this class now as it only exists to pass the UDID of the device associated with the worker number and it seems straightforward to pass the worker number using the above idea (though it may seem a bit ugly).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1267379</commentid>
    <comment_count>32</comment_count>
      <attachid>298792</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-01-17 09:55:57 -0800</bug_when>
    <thetext>Comment on attachment 298792
Patch

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

&gt; Tools/Scripts/webkitpy/port/darwin.py:178
&gt; +    def app_identifier_from_bundle(self, app):

I suggest that we rename the second argument from app to bundle so as to be consistent with the name of the function.

&gt; Tools/Scripts/webkitpy/port/darwin.py:179
&gt; +        plist_path = app + &apos;/Info.plist&apos;

We should be using the FileSystem object (self._filesystem) to do this path join instead of doing it ourselves.

&gt; Tools/Scripts/webkitpy/port/darwin.py:181
&gt; +            plist_path = plist_path = app + &apos;/Contents/Info.plist&apos;

Ditto.

&gt; Tools/Scripts/webkitpy/port/server_process.py:-45
&gt; -    import fcntl

ServerProcess._start() is making use of this module. How is this code working without importing it? I take it we are importing this module through some other import. We may not need to make this change if we keep the original ServerProcess class and do not create a ServerProcessBase class. See my remark below for more details.

&gt; Tools/Scripts/webkitpy/port/server_process.py:45
&gt;  
&gt; -class ServerProcess(object):
&gt; -    &quot;&quot;&quot;This class provides a wrapper around a subprocess that
&gt; -    implements a simple request/response usage model. The primary benefit
&gt; -    is that reading responses takes a deadline, so that we don&apos;t ever block
&gt; -    indefinitely. The class also handles transparently restarting processes
&gt; -    as necessary to keep issuing commands.&quot;&quot;&quot;
&gt; +class ServerProcess(ServerProcessBase):

When I originally suggested to you to extract the common functionality of this class and SimulatorProcess into a shared base class, ServerProcessBase, I envisioned that ServerProcessBase would be platform-independent code and the derived classes would implement the platform-specific code. The proposed change seems to just move code from ServerProcess to ServerProcessBase such that both ServerProcess and ServerProcessBase contain platform-specific code. I do not see the value in such a refactoring. And it may be sufficient for our purposes and time-efficient to keep the original ServerProcess class (with its combined POSIX and Windows implementations) and have class SimulatorProcess extend ServerProcess.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:54
&gt; +        try:
&gt; +            os.kill(self.pid, 0)
&gt; +        except OSError, err:
&gt; +            if err.errno == errno.ESRCH:
&gt; +                return 1
&gt; +            elif err.errno == errno.EPERM:
&gt; +                return None
&gt; +            else:
&gt; +                print -1
&gt; +        else:
&gt; +            return None

This implementation not conform to the description of Popen.poll(). In particular, poll() must &quot;Set and return returncode attribute.&quot; [1]. That is, we need to define an instance variable called returncode and this method needs to set returncode to the appropriate value and then return returncode.

[1] &lt;https://docs.python.org/2/library/subprocess.html#subprocess.Popen.poll&gt;

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:56
&gt; +    # Per subprocess&apos;s documentation, this mimicks it&apos;s behavior

I do not feel that this comment adds value. Please remove it.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:60
&gt; +    def wait(self):
&gt; +        while not self.poll():
&gt; +            time.sleep(.01)
&gt; +        return self.poll()

This implementation does not conform to the description of Popen.wait(). In particular, Popen.wait() must &quot;Set and return returncode attribute.&quot; [2]. Much of this behavior will fallout naturally once we fix Popen.poll(). As an optimization we should return immediately if we have a non-None returncode attribute.

[2] &lt;https://docs.python.org/2/library/subprocess.html#subprocess.Popen.wait&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1268123</commentid>
    <comment_count>33</comment_count>
      <attachid>299251</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-19 10:33:13 -0800</bug_when>
    <thetext>Created attachment 299251
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1268126</commentid>
    <comment_count>34</comment_count>
      <attachid>299251</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-19 10:38:58 -0800</bug_when>
    <thetext>Comment on attachment 299251
Patch

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

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:60
&gt; +            try:
&gt; +                os.kill(self.pid, 0)
&gt; +            except OSError, err:
&gt; +                if err.errno == errno.ESRCH:
&gt; +                    return 1
&gt; +                elif err.errno == errno.EPERM:
&gt; +                    return None
&gt; +                else:
&gt; +                    return -1
&gt; +            else:
&gt; +                return None

Python&apos;s queue isn&apos;t the right choice for this for a few reasons.  First, it requires setup and teardown, the os.kill approach does not.  Second, while the kevent API can accept a pid, Python&apos;s kevent wrapper seems to only expect a file handle and will crash if it cannot access the provided argument as a file handle.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:114
&gt; +        self._proc.stdout = os.fdopen(os.open(self._out_path, os.O_RDONLY | os.O_NONBLOCK), &quot;rb&quot;)
&gt; +        self._proc.stderr = os.fdopen(os.open(self._error_path, os.O_RDONLY | os.O_NONBLOCK), &quot;rb&quot;)

If the opening of the file is not non-blocking, then this code will hang.  stdout and stderr must open before the app starts, otherwise the app won&apos;t be able to attach to the files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1268132</commentid>
    <comment_count>35</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-01-19 11:05:16 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; Comment on attachment 299251 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=299251&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/port/simulator_process.py:60
&gt; &gt; +            try:
&gt; &gt; +                os.kill(self.pid, 0)
&gt; &gt; +            except OSError, err:
&gt; &gt; +                if err.errno == errno.ESRCH:
&gt; &gt; +                    return 1
&gt; &gt; +                elif err.errno == errno.EPERM:
&gt; &gt; +                    return None
&gt; &gt; +                else:
&gt; &gt; +                    return -1
&gt; &gt; +            else:
&gt; &gt; +                return None
&gt; 
&gt; Python&apos;s queue isn&apos;t the right choice for this for a few reasons.  First, it
&gt; requires setup and teardown, the os.kill approach does not.  

OK.

&gt; Second, while the kevent API can accept a pid, Python&apos;s kevent wrapper seems to only
&gt; expect a file handle and will crash if it cannot access the provided
&gt; argument as a file handle.
&gt; 

This explanation is either incorrect or it implies there are bugs in Python&apos;s implementation. Regardless, sending the null signal to determine whether a process is running is sufficient.

&gt; &gt; Tools/Scripts/webkitpy/port/simulator_process.py:114
&gt; &gt; +        self._proc.stdout = os.fdopen(os.open(self._out_path, os.O_RDONLY | os.O_NONBLOCK), &quot;rb&quot;)
&gt; &gt; +        self._proc.stderr = os.fdopen(os.open(self._error_path, os.O_RDONLY | os.O_NONBLOCK), &quot;rb&quot;)
&gt; 
&gt; If the opening of the file is not non-blocking, then this code will hang. 
&gt; stdout and stderr must open before the app starts, otherwise the app won&apos;t
&gt; be able to attach to the files.

You&apos;re right! We cannot use the built-in open().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1268159</commentid>
    <comment_count>36</comment_count>
      <attachid>299251</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-01-19 12:30:25 -0800</bug_when>
    <thetext>Comment on attachment 299251
Patch

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

&gt; Tools/Scripts/webkitpy/port/driver.py:371
&gt; -        self._server_process = self._port._server_process_constructor(self._port, self._server_name, self.cmd_line(pixel_tests, per_test_args), environment)
&gt; +        self._server_process = self._port._test_runner_process_constructor(self._port, self._server_name, self.cmd_line(pixel_tests, per_test_args), environment, driver=self)

How did you come to the decision to pass the Driver object to the ServerProcess as opposed to passing just the the worker number as I mentioned in comment #22? I mean, we are only passing the Driver object to retrieve the worker number at this time and I am unclear if we should expose the entire interface of Driver to ServerProcess.

&gt; Tools/Scripts/webkitpy/port/server_process.py:106
&gt; +    def _set_file_nonblocking(self, file):

This should be a static method as it does not make use of any instance variables. You can make this a static method be removing the first argument (self) and annotating the method with the function decorator @staticmethod. See &lt;https://docs.python.org/2/library/functions.html#staticmethod&gt; for more details.

&gt; Tools/Scripts/webkitpy/port/server_process.py:154
&gt; +            self._proc.stdin.flush()

Can you elaborate on this change?

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:28
&gt; +import select
&gt; +import subprocess

We are not making use of functionality from these modules.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:31
&gt; +from select import kqueue, kevent

We are not making use of kqueue or event in this file.

&gt;&gt;&gt; Tools/Scripts/webkitpy/port/simulator_process.py:60
&gt;&gt;&gt; +        def poll(self):
&gt;&gt;&gt; +            try:
&gt;&gt;&gt; +                os.kill(self.pid, 0)
&gt;&gt;&gt; +            except OSError, err:
&gt;&gt;&gt; +                if err.errno == errno.ESRCH:
&gt;&gt;&gt; +                    return 1
&gt;&gt;&gt; +                elif err.errno == errno.EPERM:
&gt;&gt;&gt; +                    return None
&gt;&gt;&gt; +                else:
&gt;&gt;&gt; +                    return -1
&gt;&gt;&gt; +            else:
&gt;&gt;&gt; +                return None
&gt;&gt; 
&gt;&gt; Python&apos;s queue isn&apos;t the right choice for this for a few reasons.  First, it requires setup and teardown, the os.kill approach does not.  Second, while the kevent API can accept a pid, Python&apos;s kevent wrapper seems to only expect a file handle and will crash if it cannot access the provided argument as a file handle.
&gt; 
&gt; OK.

The implementation of this function does not conform to the description of Popen.poll(). Please read my remark in comment #32 for more details.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:71
&gt; +        def wait(self, timeout=None):
&gt; +            ret = self.poll()
&gt; +            if timeout:
&gt; +                deadline = time.time() + timeout
&gt; +            while not ret:
&gt; +                time.sleep(.01)
&gt; +                ret = self.poll()
&gt; +                if deadline and deadline &lt; time.time():
&gt; +                    raise IOError(&quot;Timed out waiting for &quot; + str(self.pid) + &quot; to crash&quot;)
&gt; +            return ret

Did you have a chance to read my remark in comment 32? When I wrote the remark in comment 32 the implementation of this function (in attachment 298792) did not conform to the description of Popen.wait() with respect to setting and returning the instance variable returncode. This iteration of the patch gets us farther away from conformance with the introduction of an optional parameter timeout. Moreover, we do not make use of this optional timeout argument in this patch.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:95
&gt; +    def __unlink_check_exists(self, path):
&gt; +        try:
&gt; +            os.unlink(path)
&gt; +        except OSError as e:
&gt; +            if os.path.exists(path):
&gt; +                raise OSError(&quot;Could not unlink &apos;&quot; + path + &quot;&apos;, the target path is a file not a fifo.&quot;)

You did not address my remark about this function in comment #30. Please address it. If it turns out that it is meaningful to have raise a more human-readable exception for the case where the FIFO exists (why?) then is it possible to determine this case by examining the OSError we caught as opposed to calling os.path.exists()?

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:126
&gt; +        deadline = time.time() + 3
&gt; +        while not self._proc.stdin and deadline &gt; time.time():
&gt; +            try:
&gt; +                self._proc.stdin = open(self._in_path, &quot;w&quot;)
&gt; +            except OSError as e:
&gt; +                pass
&gt; +        if not self._proc.stdin:
&gt; +            self._crashed = True

Does this work? I mean, I would have inferred from your remark in comment 34 that using the built-in open() would block when opening a named pipe for writing; =&gt; we would hang regardless of the deadline. If open() blocks then we may be able to take inspiration from &lt;https://docs.python.org/2/library/signal.html#example&gt; and use alarm() to interrupt the the blocking open() call. Alternatively we could switch back to using a non-blocking open() and this polling solution (we&apos;re not polling for a long time :/)

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:268
&gt; +        transfered_environment = {}

As I asked in comment #30, can we come up with a better name for this variable? One suggestion I gave was the name &quot;environment_to_use&quot;. If you have your heart set on the name transferred_environment then please fix the misspelling of &quot;transfered&quot; in its name.

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:270
&gt; +            for value in env:

I would write this as:

for value in (env or {}):

Then we can remove the &quot;if env&quot; conditional above and remove one level of indentation. Alternatively we could define the default value of the env argument to be {} to have the same effect though this could lead to a bug if this function were ever changed to modify env directly. What is the preferred Python way to deal with a function that copies from an optionally specified dictionary?

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:280
&gt; +        if not output.startswith(bundle_identifier + &quot;: &quot;):
&gt; +            return None
&gt; +        output = output.rstrip(&apos;\n&apos;).split(&apos; &apos;)[1]
&gt; +        return int(output)

This still seems brittle. Maybe we should even assert that we get a match instead of returning None to catch a change to the output of the &quot;simctl launch&quot; command? Can you please elaborate on your reason not to use a regular expression to do this parsing as I suggested in comment #30?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1268172</commentid>
    <comment_count>37</comment_count>
      <attachid>299251</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-19 13:32:12 -0800</bug_when>
    <thetext>Comment on attachment 299251
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/port/driver.py:371
&gt;&gt; +        self._server_process = self._port._test_runner_process_constructor(self._port, self._server_name, self.cmd_line(pixel_tests, per_test_args), environment, driver=self)
&gt; 
&gt; How did you come to the decision to pass the Driver object to the ServerProcess as opposed to passing just the the worker number as I mentioned in comment #22? I mean, we are only passing the Driver object to retrieve the worker number at this time and I am unclear if we should expose the entire interface of Driver to ServerProcess.

Originally, I had done this because the driver has more information which I though would be of use.  Looking closer at the driver, though, I think that just passing the worker number will suffice.

&gt;&gt; Tools/Scripts/webkitpy/port/server_process.py:154
&gt;&gt; +            self._proc.stdin.flush()
&gt; 
&gt; Can you elaborate on this change?

The ServerProcess does not know the settings of stdin and how it is buffering.  Previously, stdin was flushing on a newline.  SimulatorProcess does not open stdin such that it flushes on a newline.  Rather than mandating that every stdin flush on a newline (which is basically the intended behavior) I decided to have server_process force the flush, because this will work more generally.

In future expansions of ServerProcess, this approach will be much less error-prone, since the buffering settings of stdin will not matter.

&gt;&gt;&gt;&gt; Tools/Scripts/webkitpy/port/simulator_process.py:60
&gt;&gt;&gt;&gt; +                return None
&gt;&gt;&gt; 
&gt;&gt;&gt; Python&apos;s queue isn&apos;t the right choice for this for a few reasons.  First, it requires setup and teardown, the os.kill approach does not.  Second, while the kevent API can accept a pid, Python&apos;s kevent wrapper seems to only expect a file handle and will crash if it cannot access the provided argument as a file handle.
&gt;&gt; 
&gt;&gt; OK.
&gt; 
&gt; The implementation of this function does not conform to the description of Popen.poll(). Please read my remark in comment #32 for more details.

I will add the public return code and set it here.

I hadn&apos;t realized that returncode was actually a publicly available variable owned by subprocess.

&gt;&gt; Tools/Scripts/webkitpy/port/simulator_process.py:71
&gt;&gt; +            return ret
&gt; 
&gt; Did you have a chance to read my remark in comment 32? When I wrote the remark in comment 32 the implementation of this function (in attachment 298792 [details]) did not conform to the description of Popen.wait() with respect to setting and returning the instance variable returncode. This iteration of the patch gets us farther away from conformance with the introduction of an optional parameter timeout. Moreover, we do not make use of this optional timeout argument in this patch.

The timeout argument is documented in subprocess.wait() (https://docs.python.org/3/library/subprocess.html), which was why I added it.

See poll for discussion on the return code.

&gt;&gt; Tools/Scripts/webkitpy/port/simulator_process.py:95
&gt;&gt; +                raise OSError(&quot;Could not unlink &apos;&quot; + path + &quot;&apos;, the target path is a file not a fifo.&quot;)
&gt; 
&gt; You did not address my remark about this function in comment #30. Please address it. If it turns out that it is meaningful to have raise a more human-readable exception for the case where the FIFO exists (why?) then is it possible to determine this case by examining the OSError we caught as opposed to calling os.path.exists()?

Sorry, forgot to address this concern.

I did attempt to change this.  The problem is, a fifo will not show up with an os.exists(path).  So the following code:

if os.path.exists(path):
    os.unlink(path)

will not actually unlink the fifo.  However, just a pure os.unlink will fail if there is not a fifo at the specified path.  If there isn&apos;t a fifo at the specified path, their is either nothing (which is what we want) or there is another file at this location, which would be an unrecoverable error.

I will look into examining OSError, I&apos;m not sure if it&apos;s worth it, though.  Any other type of error would cause os.mkfifo to fail (and actually, another-file-at-this-location would cause os.mkfifo to fail as well).  If anything, we should just ignore a failure to unlink and assume os.mkfifo will catch any problems.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:116
&gt; +        self._pid = self._device.launch_app(self._bundle_id, self._cmd[1:], env=self._env)

Should assert that this is not None

&gt;&gt; Tools/Scripts/webkitpy/port/simulator_process.py:126
&gt;&gt; +            self._crashed = True
&gt; 
&gt; Does this work? I mean, I would have inferred from your remark in comment 34 that using the built-in open() would block when opening a named pipe for writing; =&gt; we would hang regardless of the deadline. If open() blocks then we may be able to take inspiration from &lt;https://docs.python.org/2/library/signal.html#example&gt; and use alarm() to interrupt the the blocking open() call. Alternatively we could switch back to using a non-blocking open() and this polling solution (we&apos;re not polling for a long time :/)

It does work.  It also shouldn&apos;t be polling for very long.  In short, what is going on here is that a fifo can&apos;t be opened for writing until someone else has opened it for reading.  This is why stdout and stderr need to be opened before the application launches.

I didn&apos;t think about the fact that the built-in open would block when opening, though.  I&apos;m also not totally sure it does block (since in debugging, I had print statements inside the except at one point, and was seeing output) but I will quickly test this.  If it does block, then I think the alarm approach is much more straight forward.

&gt;&gt; Tools/Scripts/webkitpy/xcode/simulator.py:270
&gt;&gt; +            for value in env:
&gt; 
&gt; I would write this as:
&gt; 
&gt; for value in (env or {}):
&gt; 
&gt; Then we can remove the &quot;if env&quot; conditional above and remove one level of indentation. Alternatively we could define the default value of the env argument to be {} to have the same effect though this could lead to a bug if this function were ever changed to modify env directly. What is the preferred Python way to deal with a function that copies from an optionally specified dictionary?

I think your for loop suggestion is the best here.  If this function stood alone, I would say that defining the default value was the better approach.  Unfortunately, everywhere else in our code we pass &apos;None&apos; for an empty environment, instead of an empty dictionary, so it seem like that is the method we should continue with

&gt;&gt; Tools/Scripts/webkitpy/xcode/simulator.py:280
&gt;&gt; +        return int(output)
&gt; 
&gt; This still seems brittle. Maybe we should even assert that we get a match instead of returning None to catch a change to the output of the &quot;simctl launch&quot; command? Can you please elaborate on your reason not to use a regular expression to do this parsing as I suggested in comment #30?

High level point: I don&apos;t think we want to crash if we don&apos;t match this output.  The problem with crashing if the output isn&apos;t matched is that yes, this could be because the output has changed, but, more likely, this is because the launch failed.  It should be up to those using this function to assert that the pid they are receiving is not empty (as should be done in SimulatorProcess, I have made a note)

With that in mind, this solution does have a bug, since int(output) will throw an error if output isn&apos;t actually an int.

To your question as to why I used Python&apos;s string parsing instead of regular expressions: essentially, I think regular expressions are over-kill here.  &apos; &apos; and &apos;\n&apos; are not valid characters in a bundle identifier, and the output should be &quot;&lt;bundle id&gt;: &lt;pid&gt;\n&quot;, this seems like the kind of limited situation where Python&apos;s string parsing functions are ideally suited (also, just looking through Simulator.py, it seems we tend to prefer these kinds of simple Python expressions to regular expressions when given a choice).  If this output is changed in the future, SimulatorProcess will begin triggering it&apos;s assert, and the error should be pretty obvious.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1268247</commentid>
    <comment_count>38</comment_count>
      <attachid>299284</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-19 16:51:03 -0800</bug_when>
    <thetext>Created attachment 299284
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1268255</commentid>
    <comment_count>39</comment_count>
      <attachid>299284</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-19 17:00:20 -0800</bug_when>
    <thetext>Comment on attachment 299284
Patch

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

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:96
&gt; +        # Unlinks are needed on reset in the event that the Python code unexpectedly
&gt; +        # fails between reset and kill.  This can be caused by a sigkill or a crash.
&gt; +        # This ensures that os.mkfifo will not be obstructed by previous fifos.
&gt; +        # Other files will still cause os.mkfifo to fail.
&gt; +        try:
&gt; +            os.unlink(self._in_path)
&gt; +        except:
&gt; +            pass
&gt; +        try:
&gt; +            os.unlink(self._out_path)
&gt; +        except:
&gt; +            pass
&gt; +        try:
&gt; +            os.unlink(self._error_path)
&gt; +        except:
&gt; +            pass

The most notable example of this is launch_app failing.  It is fairly straight-forward for a simulator to be deliberately shutdown or crash between when the app is installed and (during __init__) and when it is launched, especially since _start is called any time a DumpRenderTree/WebKitTestRunner crashes and must be restarted.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:111
&gt; +        assert self._pid

subprocess.Popen will throw an exception if the pipe cannot be created.  Similarly, we crash here if no pid is returned from launch_app.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:119
&gt; +            self._proc.stdin = open(self._in_path, &quot;w&quot;, 0)

subprocess.Popen uses no buffer by default.  We can set a buffer (the reader reads line by line), this is mimicking server_process&apos;s behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1268456</commentid>
    <comment_count>40</comment_count>
      <attachid>299284</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-20 10:12:17 -0800</bug_when>
    <thetext>Comment on attachment 299284
Patch

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

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:82
&gt; +        # fails between reset and kill.  This can be caused by a sigkill or a crash.

This should read: &quot;fails between _start and kill&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1269197</commentid>
    <comment_count>41</comment_count>
      <attachid>299284</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-01-23 14:52:43 -0800</bug_when>
    <thetext>Comment on attachment 299284
Patch

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

&gt; Tools/Scripts/webkitpy/port/server_process.py:108
&gt; +        fl = fcntl.fcntl(file.fileno(), fcntl.F_GETFL)

I know that you moved this code. I do not see the need to abbreviate flags as &quot;fl&quot;. We should take this opportunity to rename this local variable.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:1
&gt; +# Copyright (C) 2016 Apple Inc. All rights reserved.

Nit: 2017

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:45
&gt; +            if not self.pid:
&gt; +                self.returncode = -1

I suggest that we require that SimulatorProcessPopen be instantiated with a pid, stdin, stdout, and stderr handles instead of handling the case of an improperly initialized SimulatorProcessPopen object. Then we can remove this check.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:63
&gt; +        from webkitpy.xcode.simulator import Simulator  # Avoid circular import

Are we still importing here to avoid a circular import?

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:74
&gt; +        file_location = &apos;/tmp/&apos; + env[&apos;IPC_IDENTIFIER&apos;]
&gt; +        self._in_path = file_location + &apos;_IN&apos;
&gt; +        self._out_path = file_location + &apos;_OUT&apos;
&gt; +        self._error_path = file_location + &apos;_ERROR&apos;

We should add a comment here to explain that the location of the FIFOs must match the location of the FIFOs in WebKitTestRunner/DumpRenderTree.

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:270
&gt; +            if not value.startswith(&quot;SIMCTL_CHILD_&quot;):

&quot; =&gt; &apos;

Is it intentional that we do not copy environment variables that are prefixed with SIMCTL_CHILD_?

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:272
&gt; +                environment_to_use[value] = env[value]

Is this intentional?

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:275
&gt; +        def launch_handler(err):
&gt; +            raise RuntimeError(&apos;Failed to launch app&apos;)

How did you come to the decision to use a custom error handler that raises a hardcoded exception as opposed to using the default error handler (executive.default_error_handler)? Notice that when error_handler is not specified for executive.run_comment() and return_exit_code := False (default value) then the default error handler, executive.default_error_handler, is used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1269262</commentid>
    <comment_count>42</comment_count>
      <attachid>299284</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-23 16:27:46 -0800</bug_when>
    <thetext>Comment on attachment 299284
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/port/simulator_process.py:63
&gt;&gt; +        from webkitpy.xcode.simulator import Simulator  # Avoid circular import
&gt; 
&gt; Are we still importing here to avoid a circular import?

No longer needed.  Moved this to the top of the file.

&gt;&gt; Tools/Scripts/webkitpy/xcode/simulator.py:270
&gt;&gt; +            if not value.startswith(&quot;SIMCTL_CHILD_&quot;):
&gt; 
&gt; &quot; =&gt; &apos;
&gt; 
&gt; Is it intentional that we do not copy environment variables that are prefixed with SIMCTL_CHILD_?

Half-intended.  Variables which have SIMCTL_CHILD_ should not have SIMCTL_CHILD_ places in front of them, but they should still be copied.

&gt;&gt; Tools/Scripts/webkitpy/xcode/simulator.py:272
&gt;&gt; +                environment_to_use[value] = env[value]
&gt; 
&gt; Is this intentional?

Partially.  &apos;environment_to_use[value] = env[value]&apos; should not be inside the if statement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1269263</commentid>
    <comment_count>43</comment_count>
      <attachid>299554</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-23 16:28:21 -0800</bug_when>
    <thetext>Created attachment 299554
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1269485</commentid>
    <comment_count>44</comment_count>
      <attachid>299554</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-01-24 12:28:13 -0800</bug_when>
    <thetext>Comment on attachment 299554
Patch

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

&gt; Tools/Scripts/webkitpy/port/server_process.py:109
&gt; +        flag = fcntl.fcntl(file.fileno(), fcntl.F_GETFL)

flags?

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:66
&gt; +        assert self._device.install_app(cmd[0])

Notice that assertions can be disabled at compile time (run Python with option -O). If assertion are disabled then we will never attempt to install the app in the Simulator. On another note &lt;https://wiki.python.org/moin/UsingAssertionsEffectively&gt; suggests that we raise an exception for this failure case, saying &quot;assertions should *not* be used to test for failure cases that can occur because of ... operating system/environment failures.&quot;

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:82
&gt; +        # fails between _start and kill.  This can be caused by a sigkill or a crash.

Nit: _start =&gt; _start()
Nit: kill =&gt; kill()
(These are functions)

Nit: sigkill =&gt; SIGKILL

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:83
&gt; +        # This ensures that os.mkfifo will not be obstructed by previous fifos.

Nit: os.mkfifo =&gt; os.mkfifo()
(This is a function)

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:84
&gt; +        # Other files will still cause os.mkfifo to fail.

Ditto.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:107
&gt; +        stdout = os.fdopen(os.open(self._out_path, os.O_RDONLY | os.O_NONBLOCK), &quot;rb&quot;)
&gt; +        stderr = os.fdopen(os.open(self._error_path, os.O_RDONLY | os.O_NONBLOCK), &quot;rb&quot;)

&quot; =&gt; &apos;

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:110
&gt; +        assert self._pid

The wiki page &lt;https://wiki.python.org/moin/UsingAssertionsEffectively&gt; suggest that it is more appropriate to raise an exception for this case.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:113
&gt; +            raise IOError(&quot;Couldn&apos;t open stdin&quot;)

I suggest that we emphasize in the error description text that we timed out waiting for DumpRenderTree/WebKitTestRunner to open self._in_path. Maybe something like: &apos;Timed out waiting for process to open {}&apos;.format(self._in_path)?

We should assert that signum == signal.SIGALRM.

Nit: &quot; =&gt; &apos;

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:117
&gt; +            stdin = open(self._in_path, &quot;w&quot;, 0)

&quot; =&gt; &apos;

I suggest we add an inline comment to explain that the magic number 0 means we are opening the file with buffering mode unbuffered.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:120
&gt; +        signal.alarm(0)

I suggest that we add an inline comment &quot;# Cancel alarm&quot; to explain that the magic number 0 is used to cancel an already scheduled alarm.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:124
&gt; +        self._proc = SimulatorProcess.SimulatorProcessPopen(self._pid, stdin, stdout, stderr)
&gt; +        if not stdin:
&gt; +            self._crashed = True

Suppose that WebKitTestRunner/DumpRenderTree to do open the named pipe we are using for stdin. How do we detect this case? What code is responsible for terminating the simulator process?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1269486</commentid>
    <comment_count>45</comment_count>
      <attachid>299554</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-01-24 12:33:23 -0800</bug_when>
    <thetext>Comment on attachment 299554
Patch

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

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:171
&gt; +    def __init__(self, name, udid, available, runtime, host=None):

Can we make host non-optional? Also please update the docstring below.

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:284
&gt; +        assert output.startswith(bundle_identifier + &quot;: &quot;)

Assertions can be disabled. Moreover, from reading &lt;https://wiki.python.org/moin/UsingAssertionsEffectively&gt; it it preferred that we raise an exception for such a failure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1269487</commentid>
    <comment_count>46</comment_count>
      <attachid>299554</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-01-24 12:36:12 -0800</bug_when>
    <thetext>Comment on attachment 299554
Patch

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

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:281
&gt; +        try:
&gt; +            output = self._host.executive.run_command(
&gt; +                [&apos;xcrun&apos;, &apos;simctl&apos;, &apos;launch&apos;, self.udid, bundle_identifier] + args,
&gt; +                env=environment_to_use,
&gt; +            )
&gt; +        except ScriptError:
&gt; +            return None

We should let the exception bubble instead of catching it. If we fail to launch the app this is an operating system/environment failure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1269494</commentid>
    <comment_count>47</comment_count>
      <attachid>299619</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-24 12:54:00 -0800</bug_when>
    <thetext>Created attachment 299619
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1269500</commentid>
    <comment_count>48</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-24 12:57:48 -0800</bug_when>
    <thetext>(In reply to comment #46)
&gt; Comment on attachment 299554 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=299554&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/xcode/simulator.py:281
&gt; &gt; +        try:
&gt; &gt; +            output = self._host.executive.run_command(
&gt; &gt; +                [&apos;xcrun&apos;, &apos;simctl&apos;, &apos;launch&apos;, self.udid, bundle_identifier] + args,
&gt; &gt; +                env=environment_to_use,
&gt; &gt; +            )
&gt; &gt; +        except ScriptError:
&gt; &gt; +            return None
&gt; 
&gt; We should let the exception bubble instead of catching it. If we fail to
&gt; launch the app this is an operating system/environment failure.

We had discussed this earlier and agreed to throw an exception in the case where parsing of simctl&apos;s output fails, but allow the caller to manage the error in the event that an app failed to launch for some other reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1270331</commentid>
    <comment_count>49</comment_count>
      <attachid>299846</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-26 13:55:37 -0800</bug_when>
    <thetext>Created attachment 299846
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1270386</commentid>
    <comment_count>50</comment_count>
      <attachid>299846</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-01-26 15:36:02 -0800</bug_when>
    <thetext>Comment on attachment 299846
Patch

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

&gt; Tools/Scripts/webkitpy/port/darwin.py:181
&gt; +            plist_path = self._filesystem.join(app_bundle, &apos;Contents/Info.plist&apos;)

We should split the second argument into two arguments and let FileSystem.join() concatenate the path with the OS-specific directory delimiter.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:103
&gt; +        os.mkfifo(self._in_path, 0600)

Cosmetic: I suggest putting an empty line above this line to separate it from the reset logic and to group the mkfifo() calls.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:116
&gt; +            raise IOError(&quot;Timed out waiting for process to open {}&quot;.format(self._in_path))

Python never dies with this exception as we catch it and silently discard it. What is the point of having a nice description?

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:126
&gt; +        self._proc = SimulatorProcess.SimulatorProcessPopen(self._pid, stdin, stdout, stderr)
&gt; +        if not stdin:

We should differentiate between a crash of the simulator process vs the process not opening stdin vs process did not open stdin before our 3 second timeout.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:127
&gt; +            self.kill()  # Will set self._proc to none

Do we really need to execute everything that self.kill() does? Can we just call _kill() and then self._reset()?

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:171
&gt; +    def __init__(self, name, udid, available, runtime, host=None):

As I asked before (comment #45), can we make this non-optional?

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:180
&gt;          :param runtime: The iOS Simulator runtime that hosts this device
&gt;          :type runtime: Runtime

As I said in comment #45, please update this docstring with a description of the host argument.

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:273
&gt; +            environment_to_use[value] = env[value]

I suggest that we do not keep non-SIMCTL_CHILD_-prefixed environment variable to make this function easy to use correctly and hard to use incorrectly.

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:281
&gt; +        try:
&gt; +            output = self._host.executive.run_command(
&gt; +                [&apos;xcrun&apos;, &apos;simctl&apos;, &apos;launch&apos;, self.udid, bundle_identifier] + args,
&gt; +                env=environment_to_use,
&gt; +            )
&gt; +        except ScriptError:
&gt; +            return None

I suggest we let the exception bubble so that we do not obscure the reason run_command() failed.

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:285
&gt; +            raise RuntimeError(&quot;simctl launch output did not match the expected output, although the command succeeded.&quot;)

I suggest that we include |output| in the exception description to help with debugging/diagnosing a failure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1270422</commentid>
    <comment_count>51</comment_count>
      <attachid>299874</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-26 16:20:23 -0800</bug_when>
    <thetext>Created attachment 299874
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1270763</commentid>
    <comment_count>52</comment_count>
      <attachid>299874</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-01-27 13:59:41 -0800</bug_when>
    <thetext>Comment on attachment 299874
Patch

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

&gt; Tools/ChangeLog:3
&gt; +        Removing LayoutTestRelay

Can we come up with a more descriptive title? Even if we decide to remove LayoutTestRelay in this patch or as a second patch associated with the same bug we should convey that this part (the one represented by this patch) is teaching Python how to interact with simctl.

&gt; Tools/ChangeLog:7
&gt; +

Please explain the purpose of this change.

&gt; Tools/Makefile:-12
&gt;  	endif
&gt; -	ifeq (,$(DO_NOT_BUILD_LAYOUT_TEST_RELAY))
&gt; -		MODULES += LayoutTestRelay
&gt; -	endif

This change should be in the patch that removes LayoutTestRelay. This patch is focused on teaching Python how to use simctl.

&gt; Tools/Scripts/build-webkit:-206
&gt; -
&gt; -        if (willUseIOSSimulatorSDK()) {
&gt; -            (system(&quot;perl&quot;, &quot;Tools/Scripts/build-layouttestrelay&quot;, argumentsForConfiguration()) == 0) or die;
&gt; -        }

Ditto.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:35
&gt; +    class SimulatorProcessPopen(object):

Minor: I do not see the need to prefix this class with the name of its parent. The class hierarchy will make the relationship clear. I suggest that we name this class Popen.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:53
&gt; +                if err.errno == errno.ESRCH:
&gt; +                    self.returncode = 1
&gt; +                elif err.errno != errno.EPERM:
&gt; +                    self.returncode = -1

Would it be too draconian to assert err.errno == errno.ESRCH and then unconditional set self.returncode?

assert err.errno == errno.ESRCH
self.returncode = 1
return self.returncode

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:57
&gt; +            while not self.poll():

Very minor: As a slight optimization we could return early, and avoid a function call, if self.returncode is non None. Not necessary to do this.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:58
&gt; +                time.sleep(.01)

Consider adding an inline comment &quot;# seconds&quot; to explain the meaning of 0.01.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:62
&gt; +        self._simulator_manager = Simulator(port_obj.host)

I would call this self._simulator.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:67
&gt; +            raise RuntimeError(&quot;Failed to install app {} on device {}&quot;.format(cmd[0], self._device.udid))

Nit: &quot; =&gt; &apos;

Maybe it would be clearer to write &quot;simulator device&quot; instead of &quot;device&quot;.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:68
&gt; +        env[&apos;IPC_IDENTIFIER&apos;] = self._bundle_id + &quot;-&quot; + self._device.udid

Ditto.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:101
&gt; +            raise ValueError(&quot;%s already running&quot; % self._name)

Nit: &quot; =&gt; &apos;

I know you copied this code from server_process.py. This patch alternatives between using String.format() and the %-operator. We should pick one style and stick with it.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:106
&gt; +        os.mkfifo(self._in_path, 0600)
&gt; +        os.mkfifo(self._out_path, 0600)
&gt; +        os.mkfifo(self._error_path, 0600)

Are there named constants that we could use to build up a bitmask that is equal to 0600? This would make 0600 less magical. Would it make sense to define a constant local variable and reference it instead of hardcoding the bitmask? If there are no named constants then we should add an comment above this code to explain what 0600 means.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:115
&gt; +            raise Exception(&quot;Timed out waiting for process to open {}&quot;.format(self._in_path))

Ditto.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:117
&gt; +        signal.alarm(3)

We should add an inline comment &quot;# seconds&quot; to explain that meaning of 3.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:125
&gt; +                e = Exception(&quot;Process {} crashed before stdin could be attached&quot;.format(self._pid))

I suggest we also include the name of the app (I think this is basename(cmd[0])).

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:129
&gt; +            self._proc = SimulatorProcess.SimulatorProcessPopen(self._pid, stdin, stdout, stderr)
&gt; +            if self._proc.poll():
&gt; +                e = Exception(&quot;Process {} crashed before stdin could be attached&quot;.format(self._pid))
&gt; +            else:
&gt; +                self._kill()
&gt; +            self._reset()
&gt; +            raise e

Jonathan pointed out that &quot;raise e&quot; would change the stack trace of the original exception to be the stack trace from the &quot;raise e&quot; line. We can avoid this by using the directive raise without an argument. I suggest we write this code as:

# We set self._proc as _reset() and _kill() depend on it.
self._proc = SimulatorProcess.SimulatorProcessPopen(self._pid, stdin, stdout, stderr)
if self._proc.poll() is not None:
    self._reset()
    raise Exception(...)
self._kill()
self._reset()
raise

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:274
&gt; +            if not value.startswith(&apos;SIMCTL_CHILD_&apos;):
&gt; +                environment_to_use[&apos;SIMCTL_CHILD_&apos; + value] = env[value]

Minor: I suggest that we define a local constant for &quot;SIMCTL_CHILD_&quot; instead of duplicating this string twice.

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:285
&gt; +            raise RuntimeError(&quot;simctl launch output did not match the expected output: &apos;&lt;bundle id&gt;: &lt;pid&gt;&apos;.  Received: &apos;{}&apos; instead&quot;.format(output))

Other than to save a some time to perform code archaeology, it is not meaningful to debugging to emit the format &quot;&lt;bundle id&gt;: &lt;pid&gt;&quot; that we expected in the exception. We should emit the app name in the exception message. I also find it unnecessary and or little value to expose the implementation details that we used simctl. I would use a message of the form: &quot;Failed to find process id for {app name}: {output}&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1270785</commentid>
    <comment_count>53</comment_count>
      <attachid>299874</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-27 14:58:47 -0800</bug_when>
    <thetext>Comment on attachment 299874
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/port/simulator_process.py:57
&gt;&gt; +            while not self.poll():
&gt; 
&gt; Very minor: As a slight optimization we could return early, and avoid a function call, if self.returncode is non None. Not necessary to do this.

I believe this optimization would end up costing time, actually.  Keep in mind that it is more likely that the process will be running when this function is called, or at the very least, this object will not yet have recognized that the process it is observing is no longer running.

&gt;&gt; Tools/Scripts/webkitpy/port/simulator_process.py:62
&gt;&gt; +        self._simulator_manager = Simulator(port_obj.host)
&gt; 
&gt; I would call this self._simulator.

This is an unneeded declaration.  There is no reason to keep track of the simulator, we only use it to access the current device.

&gt;&gt; Tools/Scripts/webkitpy/xcode/simulator.py:285
&gt;&gt; +            raise RuntimeError(&quot;simctl launch output did not match the expected output: &apos;&lt;bundle id&gt;: &lt;pid&gt;&apos;.  Received: &apos;{}&apos; instead&quot;.format(output))
&gt; 
&gt; Other than to save a some time to perform code archaeology, it is not meaningful to debugging to emit the format &quot;&lt;bundle id&gt;: &lt;pid&gt;&quot; that we expected in the exception. We should emit the app name in the exception message. I also find it unnecessary and or little value to expose the implementation details that we used simctl. I would use a message of the form: &quot;Failed to find process id for {app name}: {output}&quot;.

Minor note to the changes made here.  launch_app() is not actually aware of the app name, only it&apos;s bundle identifier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1270786</commentid>
    <comment_count>54</comment_count>
      <attachid>299965</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-27 15:00:39 -0800</bug_when>
    <thetext>Created attachment 299965
Python replacement of LayoutTestRelay</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1270790</commentid>
    <comment_count>55</comment_count>
      <attachid>299967</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-27 15:06:53 -0800</bug_when>
    <thetext>Created attachment 299967
Removal of LayoutTestRelay</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1270792</commentid>
    <comment_count>56</comment_count>
      <attachid>299967</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-27 15:08:27 -0800</bug_when>
    <thetext>Comment on attachment 299967
Removal of LayoutTestRelay

Note that without https://bug-165927-attachments.webkit.org/attachment.cgi?id=299965, this patch will fail EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1270855</commentid>
    <comment_count>57</comment_count>
      <attachid>299984</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-27 17:22:34 -0800</bug_when>
    <thetext>Created attachment 299984
Python replacement of LayoutTestRelay</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1270858</commentid>
    <comment_count>58</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-27 17:25:58 -0800</bug_when>
    <thetext>A few note on simctl and old machines:
simctl was introduced in Xcode 6 (So iOS 8).  It doesn&apos;t seem that simctl&apos;s mechanism for starting and stopping the simulators themselves was ever separated from it&apos;s ability to start and stop the simulators.  Since we already use simctl in the current scripts, all our bots will be able to run this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1270878</commentid>
    <comment_count>59</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-01-27 18:40:06 -0800</bug_when>
    <thetext>(In reply to comment #58)
&gt; A few note on simctl and old machines:
&gt; simctl was introduced in Xcode 6 (So iOS 8).  It doesn&apos;t seem that simctl&apos;s
&gt; mechanism for starting and stopping the simulators themselves was ever
&gt; separated from it&apos;s ability to start and stop the simulators.  

Huh?

&gt; Since we already use simctl in the current scripts, all our bots will be able to run
&gt; this.

As I mentioned to you in-person today (01/27), the proposed patch makes use of the simctl subcommands &quot;install&quot;, &quot;terminate&quot; and &quot;launch&quot; and I am unclear what was the first version of the public iOS SDK that supported these subcommands. Some or all of these subcommands were not available in earlier versions of the iOS SDK and hence LayoutTestRelay was born. These subcommands are available in CoreSimulator-303.7, included in the public iOS 10 SDK (14A5339a). So long as the OpenSource buildbots and EWS machines have this version of the iOS SDK or newer then we can safely land the proposed patch. Otherwise we need to update Xcode/iOS SDK on the bots before landing the patch. I am also assuming that we do not need to support building WebKit for iOS Simulator using the iOS 9 SDK (can you even build it?). I do not believe that all of the aforementioned simctl subcommands are available in the iOS 9 SDK..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1270881</commentid>
    <comment_count>60</comment_count>
      <attachid>299984</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-01-27 19:02:58 -0800</bug_when>
    <thetext>Comment on attachment 299984
Python replacement of LayoutTestRelay

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

Thank you Jonathan for iterating on this patch. I noticed some very minor stylistics nits.

r=me

&gt; Tools/ChangeLog:11
&gt; +        LayoutTestRelay uses SPI, since recent versions of the iOS SDK allow for installing apps on # Note iOS version
&gt; +        simulators through simctl, use this functionality instead.

You left in &quot;# Note iOS version&quot;.

&gt; Tools/ChangeLog:29
&gt; +        (IOSSimulatorPort._check_relay): Use base class.

You seem to alternate between using &quot;Deleted&quot; and &quot;Use base class&quot; to describe the derived class functions that were removed. I prefer that we use &quot;Deleted.&quot; or &quot;Deleted. Use base class implementation&quot;. Regardless, we should pick one style and stick with it for describing derived class functions we were able to remove.

&gt; Tools/ChangeLog:33
&gt; +        (IOSSimulatorPort._driver_class): Use base class.

Ditto.

&gt; Tools/ChangeLog:38
&gt; +        (ServerProcess.__init__): Accept worker_number, to match SimulatorProcesssâs constructor.

I would not describer this change as adding the argument worker_number to the ServerProcess constructor because the derived class SimulatorProcess constructor takes this argument. The relationship is the opposite. That is, the base class constructor prototype forces the arguments that must be accepted by the constructor of the derived class. So, I would describe this change simply as: &quot;Added argument worker_number. This class does not make use of it. We will make use of this argument in SimulatorProcess to lookup the associated simulator device.&quot;

&gt; Tools/ChangeLog:41
&gt; +        (MockServerProcess.__init__): Accept worker_number, to match SimulatorProcesssâs constructor.

By a similar argument, I would describer this change as &quot;Added argument worker_number.&quot;

&gt; Tools/ChangeLog:44
&gt; +        (SimulatorProcess): 
&gt; +        (SimulatorProcess.Popen):

Please add the remark &quot;Added.&quot; to these entries so that we can grep ChangeLog/search trac.webkit.org for when these functions were added.

&gt; Tools/ChangeLog:45
&gt; +        (SimulatorProcess.Popen.__init__): Set-up Popen structure with stdin, stdout, stderr and pid.

Set-up =&gt; Setup

Maybe a better word would be &quot;initialize&quot;.

&gt; Tools/ChangeLog:47
&gt; +        (SimulatorProcess.Popen.wait): Wait for target process to close.

I would omit the word &quot;target&quot; here so that the language is consistent with the language used for poll() above.

&gt; Tools/ChangeLog:57
&gt; +        (Simulator._parse_devices): Pass host to device.

device =&gt; Device

(we are talking about the class)

&gt; Tools/Scripts/webkitpy/xcode/simulator.py:283
&gt; +        match = re.match(r&apos;(?P&lt;bundle&gt;[^:]+): (?P&lt;pid&gt;\d+)\n&apos;, output)

We could use String.rstrip() as you did app_identifier_from_bundle() to remove the trailing newline from output and then we do not need to match the \n in the regular expression. If you prefer to have the regular expression match end of line then would it make sense to substitute the regular expression metacharacter $ for \n?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1270882</commentid>
    <comment_count>61</comment_count>
      <attachid>299967</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-01-27 19:03:54 -0800</bug_when>
    <thetext>Comment on attachment 299967
Removal of LayoutTestRelay

We need to make an Apple Internal change before we can land this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271152</commentid>
    <comment_count>62</comment_count>
      <attachid>300076</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-29 16:04:18 -0800</bug_when>
    <thetext>Created attachment 300076
Python replacement of LayoutTestRelay</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271262</commentid>
    <comment_count>63</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-30 08:43:14 -0800</bug_when>
    <thetext>&gt; ...

Here is what I have been able to find.

If any of these commands weren&apos;t supported in earlier versions of the SDK, it would be the install command, as that is the one I can&apos;t find references to in documentation of the earlier SDKs.  Although, I can&apos;t seem to find an explicit &apos;this command was added in version x.x.x.&apos;  What I was able to find is that in early versions of Xcode 7, &apos;simctl install&apos; would hang, which is perhaps the reason for not using simctl install in the recent past.  In the change log, I noted iOS 10 as the point where we know this works, since iOS 9 with some version of Xcode 7 would hang.

In any case, all of our bots use iOS 10, so none of this should be an issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271266</commentid>
    <comment_count>64</comment_count>
      <attachid>300113</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-30 08:55:36 -0800</bug_when>
    <thetext>Created attachment 300113
Replace LayoutTestRelay</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271278</commentid>
    <comment_count>65</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-01-30 09:32:49 -0800</bug_when>
    <thetext>Although the patch is fine to land as-is and is mostly port-specific code, we may want to consider adding unit tests for this code to prevent regressions. This can be done in a follow up bug/patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271279</commentid>
    <comment_count>66</comment_count>
      <attachid>300113</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-30 09:33:10 -0800</bug_when>
    <thetext>Comment on attachment 300113
Replace LayoutTestRelay

Clearing flags on attachment: 300113

Committed r211370: &lt;http://trac.webkit.org/changeset/211370&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271280</commentid>
    <comment_count>67</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-30 09:33:18 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271295</commentid>
    <comment_count>68</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-30 10:05:49 -0800</bug_when>
    <thetext>Reopening, as LayoutTestRelay has been replaced but not removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271342</commentid>
    <comment_count>69</comment_count>
      <attachid>300129</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-30 11:43:00 -0800</bug_when>
    <thetext>Created attachment 300129
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271344</commentid>
    <comment_count>70</comment_count>
      <attachid>300129</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-01-30 11:43:46 -0800</bug_when>
    <thetext>Comment on attachment 300129
Patch

Remove LayoutTestRelay</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1274888</commentid>
    <comment_count>71</comment_count>
      <attachid>301048</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-02-09 09:24:36 -0800</bug_when>
    <thetext>Created attachment 301048
Remove LayoutTestRelay</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1275460</commentid>
    <comment_count>72</comment_count>
      <attachid>301048</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-02-10 12:00:26 -0800</bug_when>
    <thetext>Comment on attachment 301048
Remove LayoutTestRelay

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

Obviously you will need to rebase this patch as it does not apply to trunk according to EWS. Please update or remove the comment(s) in IOSApplication::isDumpRenderTree() (defined in Source/WebCore/platform/RuntimeApplicationChecks.mm [1]) that reference LayoutTestRelay and DumpRenderTree0.

Please coordinate landing this change with the corresponding change to the Apple Internal code to avoid breaking the Apple Internal build.

[1] &lt;http://trac.webkit.org/browser/trunk/Source/WebCore/platform/RuntimeApplicationChecks.mm?rev=212000#L179&gt;

&gt; Tools/ChangeLog:9
&gt; +        LayoutTestRelay uses SPI, since recent versions of the iOS SDK allow for installing apps on simulators through simctl, use this functionality instead.

It is unwritten convention that we wrap ChangeLog lines to approximately 100 characters. Please break this line across two or more lines.

&gt; Tools/ChangeLog:12
&gt; +        (archiveBuiltProduct): No more special case for iOS Simulator products.

I would describe this change as:

Remove archiving of LayoutTestRelay as it is no longer being built. Added a FIXME that we will need to implement similar archiving machinery once we build ImageDiff for Mac when building WebKit for iOS. Currently ImageDiff is built with the iOS SDK.

&gt; Tools/BuildSlaveSupport/built-product-archive:168
&gt; +    # FIXME: ImageDiff should be built with the host SDK &lt;rdar://problem/30266038&gt;

Missing a period at the end of this sentence. I suggest adding a comma after &quot;SDK&quot; to separate the first clause from the the Radar URL. I also suggest that we add a remark to explain that we should take a similar approach for archiving ImageDiff as was done for LayoutTestRelay in &lt;https://trac.webkit.org/changeset/190515&gt;. Once we fix &lt;rdar://problem/30266038&gt; we likely can do a partial revert of this patch (i.e. add the code from &lt;https://trac.webkit.org/changeset/190515&gt; again) and alter it archive ImageDiff instead of LayoutTestRelay and LayoutTestRelay.dSYM.

&gt; Tools/BuildSlaveSupport/kill-old-processes:92
&gt; +        &quot;Simulator&quot;

Please add a comma (,) to the end of this line. The benefit of this approach is that when subsequently appending to this list we will not need to add a comma to the end of this line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1275493</commentid>
    <comment_count>73</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-02-10 12:39:01 -0800</bug_when>
    <thetext>(In reply to comment #72)

Just a few notes on Dan&apos;s comments:

&gt; Obviously you will need to rebase this patch as it does not apply to trunk
&gt; according to EWS.

This patch does apply to trunk, this is another example of https://bugs.webkit.org/show_bug.cgi?id=167906.  I will modify the patch so that it can be accepted through commit queue.

&gt; Please coordinate landing this change with the corresponding change to the
&gt; Apple Internal code to avoid breaking the Apple Internal build.

Changes were committed to the Apple Internal code yesterday, February 9th.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1275542</commentid>
    <comment_count>74</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-02-10 13:59:58 -0800</bug_when>
    <thetext>Committed r212148: &lt;http://trac.webkit.org/changeset/212148&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297242</attachid>
            <date>2016-12-15 16:11:25 -0800</date>
            <delta_ts>2016-12-15 16:15:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165927-20161215161032.patch</filename>
            <type>text/plain</type>
            <size>235557</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIwOTg3OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEzMyBAQAorMjAxNi0xMi0xNSAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5j
b20+CisKKyAgICAgICAgUmVtb3ZpbmcgTGF5b3V0VGVzdFJlbGF5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU5MjcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0R1bXBSZW5k
ZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZGVkIHVuaXhMb2dnaW5nUGlwZXMu
aCBhbmQgLm1tIHRvIER1bXBSZW5kZXJUcmVlLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21h
Yy9EdW1wUmVuZGVyVHJlZS5tbTogQWRkZWQgY2FsbCB0byBzZXR1cFVuaXhMb2dnaW5nUGlwZXMo
KSBhbmQgdGVhcmRvd25Vbml4TG9nZ2luZ1BpcGVzKCkgZm9yIGlPUy4KKyAgICAgICAgKGR1bXBS
ZW5kZXJUcmVlKTogCisgICAgICAgICogTGF5b3V0VGVzdFJlbGF5OiBSZW1vdmVkLgorICAgICAg
ICAqIE1ha2VmaWxlOgorICAgICAgICAqIFNjcmlwdHMvYnVpbGQtbGF5b3V0dGVzdHJlbGF5OiBS
ZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvYnVpbGQtd2Via2l0OiBSZW1vdmVkIHJlZmVyZW5j
ZSB0byBMYXlvdXRUZXN0UmVsYXkuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24v
aXBjX3BpcGUucHk6IEFkZGVkLgorICAgICAgICAoVW5peFBpcGVTZXJ2ZXIpOiBBIHNlcnZlci1z
aWRlIFVuaXggcGlwZSBhYnN0cmFjdGlvbiB1c2VkIHRvIHNlbmQgZGF0YSBvdmVyIGEgQUZfVU5J
WCBzdHJlYW1pbmcgc29ja2V0LgorICAgICAgICAoQWJzdHJhY3RQaXBlKTogQWJzdHJhY3Rpb24g
Zm9yIHJlYWRpbmcgZnJvbS93cml0aW5nIHRvIHN0ZGluLCBzdGRvdXQgYW5kIHN0ZGVyci4KKyAg
ICAgICAgKEFic3RyYWN0UGlwZS5jbGVhbik6IENsZWFycyB0aGUgc3Rkb3V0IGFuZCBzdGRlcnIg
c3RyZWFtcyB0byBwcmVzZXJ2ZSBtZW1vcnkuCisgICAgICAgIChBYnN0cmFjdFBpcGUuX3BhcnNl
TWVzc2FnZSk6IEV4cGVjdGVkIHRvIGJlIG92ZXJyaWRkZW4gYnkgY2hpbGQgY2xhc3Nlcy4gIEFk
ZHMgZGF0YSB0byBzdGRvdXQgYW5kIHN0ZGVyciBzdHJlYW1zLgorICAgICAgICAoQWJzdHJhY3RQ
aXBlLnJlYWRMaW5lKTogUmVhZCB0aGUgbmV4dCBsaW5lLCByZWFkIHN0ZGVyciBiZWZvcmUgc3Rk
b3V0LgorICAgICAgICAoQWJzdHJhY3RQaXBlLnN0ZG91dFJlYWQpOiBSZWFkIGEgbGluZSBmcm9t
IHN0ZG91dCwgY2FsbHMgX3BhcnNlTWVzc2FnZS4KKyAgICAgICAgKEFic3RyYWN0UGlwZS5zdGRl
cnJSZWFkKTogUmVhZCBhIGxpbmUgZnJvbSBzdGRlcnIsIGNhbGxzIF9wYXJzZU1lc3NhZ2UuCisg
ICAgICAgIChBYnN0cmFjdFBpcGUucmVhZEJ1ZmZlclN0ZG91dCk6IFJlYWQgZXZlcnl0aGluZyBp
biB0aGUgc3Rkb3V0IGJ1ZmZlci4KKyAgICAgICAgKEFic3RyYWN0UGlwZS5yZWFkQnVmZmVyU3Rk
ZXJyKTogUmVhZCBldmVyeXRoaW5nIGluIHRoZSBzdGRlcnIgYnVmZmVyLgorICAgICAgICAoQWJz
dHJhY3RQaXBlLnJlYWRCbG9ja1N0ZG91dCk6IFJlYWQgYSBibG9jayBvZiBzaXplIGZyb20gc3Rk
b3V0LCBjYWxscyBfcGFyc2VNZXNzYWdlLgorICAgICAgICAoQWJzdHJhY3RQaXBlLnJlYWRCbG9j
a1N0ZGVycik6IFJlYWQgYSBibG9jayBvZiBzaXplIGZyb20gc3RkZXJyLCBjYWxscyBfcGFyc2VN
ZXNzYWdlLgorICAgICAgICAoVW5peFBpcGUpOiBJbmhlcml0cyBmcm9tIEFic3RyYWN0UGlwZSwg
dXNlcyB0aHJlZSBVbml4IHBpcGVzIGFzIHN0ZGluLCBzdGRvdXQgYW5kIHN0ZGVyci4KKyAgICAg
ICAgKFVuaXhQaXBlLl9faW5pdF9fKTogT3BlbnMgYWxsIDMgVW5peCBwaXBlcyBhbmQgYmVnaW5z
IGxpc3RlbmluZyBmb3IgY29ubmVjdGlvbnMuCisgICAgICAgIChVbml4UGlwZS5jb25uZWN0KTog
V2FpdCBmb3IgY29ubmVjdGlvbnMgb24gYWxsIDMgVW5peCBwaXBlcywgcmV0dXJuIGNvbm5lY3Rp
b24gc3RhdHVzLgorICAgICAgICAoVW5peFBpcGUuY2xvc2UpOiBEaXNjb25uZWN0IGFsbCAzIFVu
aXggcGlwZXMuCisgICAgICAgIChVbml4UGlwZS5zZW5kKTogU2VuZCBtZXNzYWdlIHRocm91Z2gg
c3RkaW4gcGlwZS4KKyAgICAgICAgKFVuaXhQaXBlLl9wYXJzZU1lc3NhZ2UpOiBBdHRlbXB0IHRv
IHJlYWQgZnJvbSBib3RoIHN0ZG91dCBhbmQgc3RkZXJyIFVuaXggcGlwZXMuCisgICAgICAgIChV
bml4UGlwZS5oYW5kbGVfaW50ZXJydXB0KTogTmVlZGVkIGR1cmluZyBjcmFzaGVzLgorICAgICAg
ICAoUHJvY2Vzc1BpcGUpOiAKKyAgICAgICAgKFByb2Nlc3NQaXBlLl9faW5pdF9fKToKKyAgICAg
ICAgKFByb2Nlc3NQaXBlLnBpZCk6CisgICAgICAgIChQcm9jZXNzUGlwZS5pc0Nvbm5lY3RlZCk6
CisgICAgICAgIChQcm9jZXNzUGlwZS5oYW5kbGVfaW50ZXJydXB0KToKKyAgICAgICAgKFByb2Nl
c3NQaXBlLmNsb3NlKToKKyAgICAgICAgKFByb2Nlc3NQaXBlLnNlbmQpOgorICAgICAgICAoUHJv
Y2Vzc1BpcGUuX3VuaXhzdGRCbG9jayk6CisgICAgICAgIChQcm9jZXNzUGlwZS5fdW5peGVyckJs
b2NrKToKKyAgICAgICAgKFByb2Nlc3NQaXBlLl93aW4zMk5vbkJsb2NraW5nUmVhZCk6CisgICAg
ICAgIChQcm9jZXNzUGlwZS5fd2luMzJzdGRCbG9jayk6CisgICAgICAgIChQcm9jZXNzUGlwZS5f
d2luMzJlcnJCbG9jayk6CisgICAgICAgIChQcm9jZXNzUGlwZS5fcGFyc2VNZXNzYWdlKToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9pcGNfcGlwZV90ZXN0Y2FzZS5weTogQWRk
ZWQuCisgICAgICAgIChEdW1teVByb2Nlc3NQaXBlKTogUHJvY2VzcyBwaXBlIHVzZWQgZm9yIHRl
c3RpbmcuCisgICAgICAgIChVbml4UGlwZUNsaWVudCk6IFVuaXggcGlwZSBjbGllbnQgdXNlZCB0
byB0ZXN0IFVuaXhQaXBlU2VydmVyIGFuZCBVbml4UGlwZSBjbGFzc2VzLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvY29tbW9uL2lwY19waXBlX3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAg
ICAgKFVuaXhQaXBlQ2xpZW50VGVzdGluZ1RocmVhZCk6IEZ1bmN0aW9uIHVzZWQgZm9yIHRlc3Rp
bmcgY2xpZW50L3NlcnZlciBhcmNoaXRlY3R1cmVzLgorICAgICAgICAoaXBjUGlwZVRlc3QpOiBV
bml0IHRlc3RzIGZvciBjbGFzc2VzIGluIGlwY19waXBlLnB5LgorICAgICAgICAoaXBjUGlwZVRl
c3QudGVzdF9hYnN0cmFjdHBpcGVfc3Rkb3V0KTogVGVzdCBzdGRvdXQgc3RyZWFtIGluIHRoZSBh
YnN0cmFjdCBwaXBlLgorICAgICAgICAoaXBjUGlwZVRlc3QudGVzdF9hYnN0cmFjdHBpcGVfc3Rk
ZXJyKTogVGVzdCBzdGRlcnIgc3RyZWFtIGluIHRoZSBhYnN0cmFjdCBwaXBlLgorICAgICAgICAo
aXBjUGlwZVRlc3QudGVzdF9hYnN0cmFjdHBpcGVfZHVlbF9zdHJlYW1zKTogRW5zdXJlIHN0ZG91
dCBhbmQgc3RkZXJyIGRvIG5vdCBtaW5nbGUuCisgICAgICAgIChpcGNQaXBlVGVzdC50ZXN0X2Fi
c3RyYWN0cGlwZV9zdGRvdXRibG9jayk6IFRlc3QgcmVhZGluZyBhIGRhdGEgYmxvY2sgZnJvbSBz
dGRvdXQuCisgICAgICAgIChpcGNQaXBlVGVzdC50ZXN0X2Fic3RyYWN0cGlwZV9zdGRlcnJibG9j
ayk6IFRlc3QgcmVhZGluZyBhIGRhdGEgYmxvY2sgZnJvbSBzdGRlcnIuCisgICAgICAgIChpcGNQ
aXBlVGVzdC50ZXN0X3VuaXhQaXBlU2VydmVyKTogVGVzdCB0aGUgVW5peFBpcGVTZXJ2ZXIgd2l0
aCBhIFVuaXhQaXBlQ2xpZW50LgorICAgICAgICAoaXBjUGlwZVRlc3QudGVzdF91bml4UGlwZSk6
IFRlc3QgYWxsIHRocmVlIHN0cmVhbXMgb2YgdGhlIFVuaXhQaXBlIGNsYXNzLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5OgorICAgICAgICAoUG9ydC50by5kZXZpY2VE
ZWZpbmVkKTogRnVuY3Rpb24gdG8gYmUgb3ZlcnJpZGRlbiBieSBpT1MgY2xhc3Nlcy4KKyAgICAg
ICAgKFBvcnQudG8ucnVuT25EZXZpY2UpOiBGdW5jdGlvbiB0byBiZSBvdmVycmlkZGVuIGJ5IGlP
UyBjbGFzc2VzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlX3VuaXR0ZXN0
LnB5OgorICAgICAgICAodGVzdF9kZXZpY2UpOiBUZXN0IHRoYXQsIGluIHRoZSBnZW5lcmFsIGNh
c2UsIGRldmljZXMgYXJlIHVuZGVmaW5lZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvZGFyd2luLnB5OgorICAgICAgICAoRGFyd2luUG9ydC5leHRyYWN0QnVuZGxlSUQpOiBTZWFy
Y2ggYW4gYXBwIGJ1bmRsZSBmb3IgYSBwbGlzdCBhbmQgYnVuZGxlIElELgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW5fdGVzdGNhc2UucHk6CisgICAgICAgIChEYXJ3aW5U
ZXN0LnRlc3RfcGxpc3QpOiBUZXN0IHBsaXN0IGFjY2VzcyBieSBjcmVhdGluZyBhIHRlbXBvcmFy
eSBwbGlzdCB0byByZWFkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIu
cHk6CisgICAgICAgIChEcml2ZXIuX19pbml0X18pOgorICAgICAgICAoRHJpdmVyLnJ1bl90ZXN0
KTogQ2xlYXIgc3RyZWFtcyB3aXRoIGNsZWFuIGJlZm9yZSBydW5uaW5nIGEgdGVzdC4KKyAgICAg
ICAgKERldmljZURyaXZlcik6IENoYW5nZWQgZnJvbSBJT1NTaW11bGF0b3JEcml2ZXIuCisgICAg
ICAgIChEZXZpY2VEcml2ZXIuY21kX2xpbmUpOiBQYXNzICdydW4tb24tZGV2aWNl4oCZLCB3aGlj
aCBpcyByZWNvZ25pemVkIGJ5IHRoZSBzZXJ2ZXJfcHJvY2VzcyBjbGFzcy4KKyAgICAgICAgKERl
dmljZURyaXZlci5fc2V0dXBfZW52aXJvbl9mb3JfZHJpdmVyKTogQ2hhbmdlZCBmcm9tIElPU1Np
bXVsYXRvckRyaXZlci4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5Ogor
ICAgICAgICAoSU9TQmFzZSk6IEJhc2UgY2xhc3MgZm9yIElPU1BvcnQgYW5kIElPU1NpbXVsYXRv
ciBwb3J0LgorICAgICAgICAoSU9TQmFzZS5kcml2ZXJfbmFtZSk6IEFjY2VzcyBjdXJyZW50IGFw
cCBuYW1lLgorICAgICAgICAoSU9TQmFzZS5fZ2V0X2NyYXNoX2xvZyk6IE1vdmVkIGZyb20gSU9T
U2ltdWxhdG9yUG9ydC4KKyAgICAgICAgKElPU0Jhc2UuX3Rlc3RpbmdfZGV2aWNlKTogQWNjZXNz
IGRldmljZXMgYnkgaW5kZXguCisgICAgICAgIChJT1NCYXNlLmRldmljZV9pZF9mb3Jfd29ya2Vy
X251bWJlcik6IE1vdmVkIGZyb20gSU9TU2ltdWxhdG9yUG9ydC4KKyAgICAgICAgKElPU0Jhc2Uu
X2RyaXZlcl9jbGFzcyk6IE1vdmVkIGZyb20gSU9TU2ltdWxhdG9yUG9ydC4KKyAgICAgICAgKElP
U0Jhc2UuZGV2aWNlRGVmaW5lZCk6IFRydWUgZm9yIGFsbCBJT1MgY2xhc3Nlcy4KKyAgICAgICAg
KElPU0Jhc2UuX2RldmljZVBpbmcpOiBGdW5jdGlvbiB0byB0ZXN0IGlmIGEgZGV2aWNlIGlzIG9u
LgorICAgICAgICAoSU9TQmFzZS5fZGV2aWNlSW5zdGFsbCk6IEluc3RhbGwgYXBwIHRvIGRldmlj
ZS4KKyAgICAgICAgKElPU0Jhc2UuX2RldmljZVJ1bik6IFJ1biBhcHAgb24gZGV2aWNlLgorICAg
ICAgICAoSU9TQmFzZS5fZGV2aWNlS2lsbCk6IFNodXRkb3duIGFwcCBvbiBkZXZpY2UuCisgICAg
ICAgIChJT1NCYXNlLnJ1bk9uRGV2aWNlKTogUnVuIGNvbW1hbmQgb24gZGV2aWNlLgorICAgICAg
ICAoSU9TUG9ydCk6IENsYXNzIGRlc2lnbmVkIGZvciBydW5uaW5nIG9uIGRldmljZS4KKyAgICAg
ICAgKElPU1NpbXVsYXRvclBvcnQpOgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fZGV2aWNl
UGluZyk6IENoZWNrIGlmIHRoZSB0YXJnZXRlZCBzaW11bGF0b3IgaXMgYm9vdGVkLgorICAgICAg
ICAoSU9TU2ltdWxhdG9yUG9ydC5fZGV2aWNlSW5zdGFsbCk6IEluc3RhbGwgYXBwIHRvIHNpbXVs
YXRvci4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX2RldmljZVJ1bik6IFJ1biBpbnN0YWxs
ZWQgYXBwIG9uIHRhcmdldGVkIHNpbXVsYXRvci4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQu
X2RldmljZUtpbGwpOiBTaHV0ZG93biBhcHAgb24gdGFyZ2V0ZWQgc2ltdWxhdG9yLgorICAgICAg
ICAoSU9TU2ltdWxhdG9yUG9ydC5yZWxheV9wYXRoKTogUmVtb3ZlZCBMYXlvdXRUZXN0UmVsYXku
CisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9jaGVja19yZWxheSk6IFJlbW92ZWQgTGF5b3V0
VGVzdFJlbGF5LgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IE1v
dmVkIHRvIElPU0Jhc2UuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9idWlsZF9yZWxheSk6
IFJlbW92ZWQgTGF5b3V0VGVzdFJlbGF5LgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fZHJp
dmVyX2NsYXNzKTogTW92ZWQgdG8gSU9TQmFzZS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3BvcnQvaW9zX3VuaXR0ZXN0LnB5OgorICAgICAgICAoSU9TVGVzdCk6IFRlc3RzIGZ1bmN0aW9u
YWxpdHkgdW5pcXVlIHRvIHRoZSBJT1NQb3J0IGNsYXNzLgorICAgICAgICAoSU9TU2ltdWxhdG9y
VGVzdCk6IFRlc3RzIGZ1bmN0aW9uYWxpdHkgdW5pcXVlIHRvIHRoZSBJT1NTaW11bGF0b3IgY2xh
c3MuCisgICAgICAgIChpb3NUZXN0KTogTW92ZWQgdG8gZWl0aGVyIElPU1NpbXVsYXRvclRlc3Qg
b3IgSU9TQmFzZVRlc3QuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc2Jhc2Vf
dGVzdGNhc2UucHk6IEFkZGVkLgorICAgICAgICAoSU9TQmFzZVRlc3QpOiBUZXN0cyBmdW5jdGlv
bmFsaXR5IHNoYXJlZCBiZXR3ZWVuIElPU1BvcnQgYW5kIElPU1NpbXVsYXRvci4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3MucHk6IE5vdGUgdGhhdCBzb21l
IHByZXZpb3VzIGZ1bmN0aW9uYWxpdHkgb2Ygc2VydmVyX3Byb2Nlc3MgaGFzIGJlZW4gbW92ZWQg
dG8gUHJvY2Vzc1BpcGUuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLl9faW5pdF9fKTogVXNlIF9w
aXBlIGluc3RlYWQgb2YgcHJvYy4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MuY2xlYW4pOiBDbGVh
biBwaXBlIChyZXNldHMgc3RyZWFtIGJ1ZmZlcnMuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLl9y
ZXNldCk6IERlc3Ryb3kgcGlwZSwgbm8gcGlkLgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5fc3Rh
cnQpOiBVc2UgVW5peFBpcGUgZm9yIHJ1bm5pbmcgb24tZGV2aWNlIGFuZCBQcm9jZXNzUGlwZSBv
dGhlcndpc2UuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLnBvbGwpOiBVc2UgaXNDb25uZWN0ZWQg
ZnVuY3Rpb24gb2YgcGlwZXMuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLndyaXRlKTogV3JpdGUg
ZGF0YSB0byBwaXBlLgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5fcG9wX3N0ZG91dF9saW5lX2lm
X3JlYWR5KTogUmVhZCBzdGRvdXQgbGluZSBmcm9tIHBpcGUuCisgICAgICAgIChTZXJ2ZXJQcm9j
ZXNzLl9wb3Bfc3RkZXJyX2xpbmVfaWZfcmVhZHkpOiBSZWFkIHN0ZGVyciBsaW5lIGZyb20gcGlw
ZS4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MucG9wX2FsbF9idWZmZXJlZF9zdGRlcnIpOiBSZWFk
IGFsbCBzdGRlcnIgbGluZXMgZnJvbSBwaXBlLgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5yZWFk
X2VpdGhlcl9zdGRvdXRfb3Jfc3RkZXJyX2xpbmUpOiBSZWFkIGEgbGluZSBmcm9tIGVpdGhlciBz
dHJlYW0gZnJvbSB0aGUgcGlwZS4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MucmVhZF9zdGRvdXQp
OiBSZWFkIGZyb20gc3Rkb3V0IG9mIHBpcGUuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLnN0b3Ap
OiBDbGVhciBidWZmZXJzIGFuZCBzaHV0ZG93biBwaXBlLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzc191bml0dGVzdC5weTogVXNlIHBpcGVzIGluc3RlYWQg
b2YgTW9ja1Byb2MuCisgICAgICAgIChNb2NrRmlsZSk6IFJlcGxhY2VkIE1vY2tGaWxlIHdpdGgg
RHVtbXlQcm9jZXNzUGlwZS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNr
ZXJzL3B5dGhvbi5weToKKyAgICAgICAgKFB5bGludGVyLnJ1bik6IEZpeCBmb3Iga25vd24gaXNz
dWUgd2l0aCBQeWxpbnRlciBhbmQgc29ja2V0cy4KKyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVk
L3VuaXhMb2dnaW5nUGlwZXMuaDogQWRkZWQuCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC91
bml4TG9nZ2luZ1BpcGVzLm1tOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6c2V0dXBVbml4TG9nZ2lu
Z1BpcGVzKTogU2V0cyB1cCBVbml4UGlwZXMgZm9yIElPU1NpbXVsYXRvci4KKyAgICAgICAgKFdU
Ujo6dGVhcmRvd25Vbml4TG9nZ2luZ1BpcGVzKTogVGVhcnMtZG93biB1cCBVbml4UGlwZXMgZm9y
IElPU1NpbXVsYXRvci4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5u
ZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6
OnBsYXRmb3JtSW5pdGlhbGl6ZSk6IEFkZGVkIGNhbGwgdG8gc2V0dXBVbml4TG9nZ2luZ1BpcGVz
KCkgZm9yIGlPUy4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtRGVzdHJv
eSk6IEFkZGVkIGNhbGwgdG8gdGVhcmRvd25Vbml4TG9nZ2luZ1BpcGVzKCkgZm9yIGlPUy4KKwog
MjAxNi0xMi0xNSAgQ2xhdWRpbyBTYWF2ZWRyYSAgPGNzYWF2ZWRyYUBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFtHVEtdIEVuc3VyZSBnc3QqIGRvY3MgYXJlIG5vdCBidWlsdCB3aXRoIHVwZGF0ZS13
ZWJraXRndGstbGlicwpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25z
L0Jhc2UueGNjb25maWcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZp
Z3VyYXRpb25zL0Jhc2UueGNjb25maWcJKHJldmlzaW9uIDIwOTc4NCkKKysrIFRvb2xzL0xheW91
dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCShub25leGlzdGVudCkKQEAg
LTEsNjggKzAsMCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotLy8gYXJlIG1ldDoK
LS8vIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0vLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotLy8gICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLS8vIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0vLyBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LS8vIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0vLyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLS8vIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLS8vIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotLy8gUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotLy8gT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNs
dWRlICIuLi8uLi8uLi8uLi9JbnRlcm5hbC9Db25maWd1cmF0aW9ucy9IYXZlSW50ZXJuYWxTREsu
eGNjb25maWciCi0KLVVTRV9JTlRFUk5BTF9TREsgPSAkKFVTRV9JTlRFUk5BTF9TREtfJChDT05G
SUdVUkFUSU9OKSk7Ci1VU0VfSU5URVJOQUxfU0RLX1Byb2R1Y3Rpb24gPSBZRVM7Ci1VU0VfSU5U
RVJOQUxfU0RLX0RlYnVnID0gJChIQVZFX0lOVEVSTkFMX1NESyk7Ci1VU0VfSU5URVJOQUxfU0RL
X1JlbGVhc2UgPSAkKEhBVkVfSU5URVJOQUxfU0RLKTsKLQotQ0xBTkdfQ1hYX0xBTkdVQUdFX1NU
QU5EQVJEID0gZ251KysweDsKLUNMQU5HX0VOQUJMRV9PQkpDX0FSQyA9IFlFUzsKLUNMQU5HX1dB
Uk5fQ1hYMFhfRVhURU5TSU9OUyA9IE5POwotSEVBREVSX1NFQVJDSF9QQVRIUyA9ICQoQlVJTFRf
UFJPRFVDVFNfRElSKS91c3IvbG9jYWwvaW5jbHVkZSAkKFdFQkNPUkVfUFJJVkFURV9IRUFERVJT
X0RJUikvRm9yd2FyZGluZ0hlYWRlcnMgJChTUkNST09UKS8uLi8uLi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaWN1ICQoTkVYVF9ST09UKS91c3IvbG9jYWwvaW5jbHVkZS9XZWJDb3JlVGVzdFN1cHBv
cnQ7Ci1HQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gJChERUJVR19ERUZJTkVTKSBFTkFC
TEVfREFTSEJPQVJEX1NVUFBPUlQ7Ci1ERUJVR19JTkZPUk1BVElPTl9GT1JNQVQgPSBkd2FyZi13
aXRoLWRzeW07Ci1QUkVCSU5ESU5HID0gTk8KLUdDQ19DX0xBTkdVQUdFX1NUQU5EQVJEID0gZ251
OTkKLUdDQ19FTkFCTEVfQ1BQX0VYQ0VQVElPTlMgPSBOTzsKLUdDQ19FTkFCTEVfQ1BQX1JUVEkg
PSBOTzsKLUdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFERVIgPSBZRVMKLUdDQ19UUkVBVF9XQVJO
SU5HU19BU19FUlJPUlMgPSBZRVMKLUdDQ19WRVJTSU9OID0gY29tLmFwcGxlLmNvbXBpbGVycy5s
bHZtLmNsYW5nLjFfMDsKLUdDQ19XQVJOX0FCT1VUX0RFUFJFQ0FURURfRlVOQ1RJT05TID0gTk8K
LUdDQ19XQVJOX1VOVVNFRF9GVU5DVElPTiA9IFlFUwotR0NDX1dBUk5fVU5VU0VEX1ZBUklBQkxF
ID0gWUVTCi1HQ0NfV0FSTl82NF9UT18zMl9CSVRfQ09OVkVSU0lPTlthcmNoPXg4Nl82NF0gPSBO
TzsKLVdBUk5JTkdfQ0ZMQUdTID0gLVdhbGwgLVcgLVduby11bnVzZWQtcGFyYW1ldGVyIC1XdW5k
ZWYKLQotREVCVUdfREVGSU5FU19kZWJ1ZyA9IDsKLURFQlVHX0RFRklORVNfbm9ybWFsID0gTkRF
QlVHOwotREVCVUdfREVGSU5FUyA9ICQoREVCVUdfREVGSU5FU18kKENVUlJFTlRfVkFSSUFOVCkp
OwotCi1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUiA9ICQoVEFSR0VUX01BQ19PU19YX1ZF
UlNJT05fTUFKT1IkKE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVDpzdWZmaXg6aWRlbnRpZmllcikp
OwotVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1JfMTAgPSAxMDEwMDA7Ci1UQVJHRVRfTUFD
X09TX1hfVkVSU0lPTl9NQUpPUl8xMSA9IDEwMTEwMDsKLVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9O
X01BSk9SXzEyID0gMTAxMjAwOwotVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1JfMTMgPSAx
MDEzMDA7Ci0KLVNES1JPT1QgPSBtYWNvc3guaW50ZXJuYWw7Ci0KLVNVUFBPUlRFRF9QTEFURk9S
TVMgPSBtYWNvc3g7Ci0KLVRPT0xDSEFJTlMgPSBkZWZhdWx0OwotCi1PVEhFUl9DRkxBR1MgPSAk
KEFTQU5fT1RIRVJfQ0ZMQUdTKTsKLU9USEVSX0NQTFVTUExVU0ZMQUdTID0gJChBU0FOX09USEVS
X0NQTFVTUExVU0ZMQUdTKTsKLU9USEVSX0xERkxBR1MgPSAkKEFTQU5fT1RIRVJfTERGTEFHUyk7
CkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMvRGVidWdSZWxlYXNl
LnhjY29uZmlnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0
aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25maWcJKHJldmlzaW9uIDIwOTc4NCkKKysrIFRvb2xzL0xh
eW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25maWcJKG5vbmV4
aXN0ZW50KQpAQCAtMSw0MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0v
LyBhcmUgbWV0OgotLy8gMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0vLyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotLy8gRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS8v
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotLy8gUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLS8vIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotLy8gRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotLy8gUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0vLyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0vLyBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotI2luY2x1ZGUgIkJhc2UueGNjb25maWciCi0KLUFSQ0hTID0gJChBUkNIU19TVEFOREFS
RF82NF9CSVQpOwotCi1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUiA9ICQoTUFDX09TX1hf
VkVSU0lPTl9NQUpPUik7Ci0KLU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCA9ICQoTUFDT1NYX0RF
UExPWU1FTlRfVEFSR0VUXyQoVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1IpKQotTUFDT1NY
X0RFUExPWU1FTlRfVEFSR0VUXzEwMTAwMCA9IDEwLjEwOwotTUFDT1NYX0RFUExPWU1FTlRfVEFS
R0VUXzEwMTEwMCA9IDEwLjExOwotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEwMTIwMCA9IDEw
LjEyOwotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEwMTMwMCA9IDEwLjEzOwotCi1GUkFNRVdP
UktfU0VBUkNIX1BBVEhTID0gJChERVZFTE9QRVJfRElSKS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdv
cmtzOwotTERfUlVOUEFUSF9TRUFSQ0hfUEFUSFMgPSAkKERFVkVMT1BFUl9ESVIpL0xpYnJhcnkv
UHJpdmF0ZUZyYW1ld29ya3M7Ci1PVEhFUl9MREZMQUdTID0gLWZyYW1ld29yayBDb3JlU2ltdWxh
dG9yIC1mcmFtZXdvcmsgQXBwS2l0OwotCi1TREtST09UID0gJChTREtST09UX21hY29zeF8kKFVT
RV9JTlRFUk5BTF9TREspKTsKLVNES1JPT1RfbWFjb3N4XyA9IG1hY29zeDsKLVNES1JPT1RfbWFj
b3N4X1lFUyA9IG1hY29zeC5pbnRlcm5hbDsKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9M
YXlvdXRUZXN0UmVsYXkvQ29yZVNpbXVsYXRvclNQSS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xh
eW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvQ29yZVNpbXVsYXRvclNQSS5oCShyZXZpc2lv
biAyMDk3ODQpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0NvcmVT
aW11bGF0b3JTUEkuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWYgX19oYXNfaW5jbHVkZSg8Q29yZVNpbXVsYXRvci9Db3JlU2ltdWxhdG9yLmg+
KQotCi0vKiBGSVhNRTogUmVtb3ZlIHRoZSBiZWxvdyAjZGVmaW5lIG9uY2Ugd2UgcmVxdWlyZSBY
Y29kZSA3LjMgd2l0aCBpT1MgOS4zIFNESyBvciBuZXdlci4gKi8KLSNkZWZpbmUgX19jb3Jlc2lt
X3VuYXZhaWxhYmxlX21zZyhtc2cpCi0jaW1wb3J0IDxDb3JlU2ltdWxhdG9yL0NvcmVTaW11bGF0
b3IuaD4KLQotLyogRklYTUU6IEFsd2F5cyB1c2UgU2ltU2VydmljZUNvbnRleHQgb25jZSB3ZSBy
ZXF1aXJlIFhjb2RlIDcuMyB3aXRoIGlPUyA5LjMgU0RLIG9yIG5ld2VyLiAqLwotI2RlZmluZSBV
U0VfU0lNX1NFUlZJQ0VfQ09OVEVYVCBkZWZpbmVkKENPUkVTSU1fQVBJX01BWF9BTExPV0VEKQot
Ci0jZWxzZQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2RlZmluZSBV
U0VfU0lNX1NFUlZJQ0VfQ09OVEVYVCAxCi0KLSNkZWZpbmUga1NpbURldmljZUxhdW5jaEFwcGxp
Y2F0aW9uQXJndW1lbnRzIEAiYXJndW1lbnRzIgotI2RlZmluZSBrU2ltRGV2aWNlTGF1bmNoQXBw
bGljYXRpb25FbnZpcm9ubWVudCBAImVudmlyb25tZW50IgotCi1AaW50ZXJmYWNlIFNpbURldmlj
ZSA6IE5TT2JqZWN0Ci0tIChCT09MKWluc3RhbGxBcHBsaWNhdGlvbjooTlNVUkwgKilpbnN0YWxs
VVJMIHdpdGhPcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zIGVycm9yOihOU0Vycm9yICog
X19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci0tIChwaWRfdClsYXVuY2hBcHBsaWNhdGlvbldpdGhJ
RDooTlNTdHJpbmcgKilidW5kbGVJRCBvcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zIGVy
cm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci1AZW5kCi0KLUBpbnRlcmZh
Y2UgU2ltRGV2aWNlU2V0IDogTlNPYmplY3QKLUBwcm9wZXJ0eSAocmVhZG9ubHksIGNvcHkpIE5T
RGljdGlvbmFyeSAqZGV2aWNlc0J5VURJRDsKLUBlbmQKLQotQGludGVyZmFjZSBTaW1TZXJ2aWNl
Q29udGV4dCA6IE5TT2JqZWN0Ci0rKFNpbVNlcnZpY2VDb250ZXh0ICopc2hhcmVkU2VydmljZUNv
bnRleHRGb3JEZXZlbG9wZXJEaXI6KE5TU3RyaW5nICopZGV2ZWxvcGVyRGlyIGVycm9yOihOU0Vy
cm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci0tKFNpbURldmljZVNldCAqKWRlZmF1bHRE
ZXZpY2VTZXRXaXRoRXJyb3I6KE5TRXJyb3IgKiBfX2F1dG9yZWxlYXNpbmcgKillcnJvcjsKLUBl
bmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5
L0xUUGlwZVJlbGF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91
dFRlc3RSZWxheS9MVFBpcGVSZWxheS5oCShyZXZpc2lvbiAyMDk3ODQpCisrKyBUb29scy9MYXlv
dXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5LmgJKG5vbmV4aXN0ZW50KQpA
QCAtMSwzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBMVFBpcGVSZWxheV9oCi0jZGVm
aW5lIExUUGlwZVJlbGF5X2gKLQotI2ltcG9ydCAiTFRSZWxheS5oIgotCi1AaW50ZXJmYWNlIExU
UGlwZVJlbGF5IDogTlNPYmplY3QgPExUUmVsYXk+Ci1AcHJvcGVydHkgKHdlYWspIGlkPExUUmVs
YXlEZWxlZ2F0ZT4gcmVsYXlEZWxlZ2F0ZTsKLS0gKGlkKWluaXRXaXRoUHJlZml4OihOU1N0cmlu
ZyAqKXByZWZpeDsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkv
TGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0
VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5tCShyZXZpc2lvbiAyMDk3ODQp
CisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0J
KG5vbmV4aXN0ZW50KQpAQCAtMSwxNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgIkxU
UGlwZVJlbGF5LmgiCi0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotI2luY2x1
ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLUBpbnRlcmZhY2UgTFRQ
aXBlUmVsYXkgKCkKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKmZpZm9Q
cmVmaXg7Ci1AcHJvcGVydHkgKHN0cm9uZykgTlNPdXRwdXRTdHJlYW0gKnN0YW5kYXJkSW5wdXRQ
aXBlOwotQHByb3BlcnR5IChzdHJvbmcpIE5TSW5wdXRTdHJlYW0gKnN0YW5kYXJkT3V0cHV0UGlw
ZTsKLUBwcm9wZXJ0eSAoc3Ryb25nKSBOU0lucHV0U3RyZWFtICpzdGFuZGFyZEVycm9yUGlwZTsK
LQotLSAodm9pZCljcmVhdGVGSUZPczsKLS0gKHZvaWQpZGVzdHJveUZJRk9zOwotQGVuZAotCi1A
aW1wbGVtZW50YXRpb24gTFRQaXBlUmVsYXkKLQotLSAoTlNTdHJpbmcgKilpblBpcGVQYXRoCi17
Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9JTiJd
OwotfQotCi0tIChOU1N0cmluZyAqKW91dFBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1By
ZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9PVVQiXTsKLX0KLQotLSAoTlNTdHJpbmcg
KillcnJvclBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVu
ZGluZ1N0cmluZzpAIl9FUlJPUiJdOwotfQotCi0tIChOU091dHB1dFN0cmVhbSAqKSBvdXRwdXRT
dHJlYW0KLXsKLSAgICByZXR1cm4gX3N0YW5kYXJkSW5wdXRQaXBlOwotfQotCi0tIChpZClpbml0
V2l0aFByZWZpeDooTlNTdHJpbmcgKilwcmVmaXgKLXsKLSAgICBpZiAoKHNlbGYgPSBbc3VwZXIg
aW5pdF0pKSB7Ci0gICAgICAgIF9maWZvUHJlZml4ID0gcHJlZml4OwotICAgICAgICBbc2VsZiBk
ZXN0cm95RklGT3NdOwotICAgIH0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXR1
cAotewotICAgIFtzZWxmIGRlc3Ryb3lGSUZPc107Ci0gICAgW3NlbGYgY3JlYXRlRklGT3NdOwot
fQotCi0tICh2b2lkKXRlYXJEb3duCi17Ci0gICAgW3NlbGYgZGVzdHJveUZJRk9zXTsKLX0KLQot
LSh2b2lkKSBjb25uZWN0Ci17Ci0gICAgX3N0YW5kYXJkSW5wdXRQaXBlID0gW05TT3V0cHV0U3Ry
ZWFtIG91dHB1dFN0cmVhbVRvRmlsZUF0UGF0aDpbc2VsZiBpblBpcGVQYXRoXSBhcHBlbmQ6WUVT
XTsKLSAgICBfc3RhbmRhcmRPdXRwdXRQaXBlID0gW05TSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW1X
aXRoRmlsZUF0UGF0aDpbc2VsZiBvdXRQaXBlUGF0aF1dOwotICAgIF9zdGFuZGFyZEVycm9yUGlw
ZSA9IFtOU0lucHV0U3RyZWFtIGlucHV0U3RyZWFtV2l0aEZpbGVBdFBhdGg6W3NlbGYgZXJyb3JQ
aXBlUGF0aF1dOwotCi0gICAgW1tzZWxmIHN0YW5kYXJkSW5wdXRQaXBlXSBzZXREZWxlZ2F0ZTpz
ZWxmXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRQaXBlXSBzZXREZWxlZ2F0ZTpzZWxmXTsK
LSAgICBbW3NlbGYgc3RhbmRhcmRFcnJvclBpcGVdIHNldERlbGVnYXRlOnNlbGZdOwotCi0gICAg
W1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gc2NoZWR1bGVJblJ1bkxvb3A6W05TUnVuTG9vcCBt
YWluUnVuTG9vcF0gZm9yTW9kZTpOU0RlZmF1bHRSdW5Mb29wTW9kZV07Ci0gICAgW1tzZWxmIHN0
YW5kYXJkRXJyb3JQaXBlXSBzY2hlZHVsZUluUnVuTG9vcDpbTlNSdW5Mb29wIG1haW5SdW5Mb29w
XSBmb3JNb2RlOk5TRGVmYXVsdFJ1bkxvb3BNb2RlXTsKLQotICAgIFtbc2VsZiBzdGFuZGFyZElu
cHV0UGlwZV0gb3Blbl07Ci0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gb3Blbl07Ci0g
ICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JQaXBlXSBvcGVuXTsKLQotICAgIFtbc2VsZiByZWxheURl
bGVnYXRlXSBkaWRDb25uZWN0XTsKLX0KLQotLSAodm9pZClkaXNjb25uZWN0Ci17Ci0gICAgW1tz
ZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gY2xvc2VdOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9y
UGlwZV0gY2xvc2VdOwotICAgIFtbc2VsZiBzdGFuZGFyZElucHV0UGlwZV0gY2xvc2VdOwotICAg
IFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWREaXNjb25uZWN0XTsKLX0KLQotLSAodm9pZCljcmVh
dGVGSUZPcwotewotICAgIG1rZmlmbyhbW3NlbGYgaW5QaXBlUGF0aF0gVVRGOFN0cmluZ10sIDA2
NjYpOwotICAgIG1rZmlmbyhbW3NlbGYgb3V0UGlwZVBhdGhdIFVURjhTdHJpbmddLCAwNjY2KTsK
LSAgICBta2ZpZm8oW1tzZWxmIGVycm9yUGlwZVBhdGhdIFVURjhTdHJpbmddLCAwNjY2KTsKLX0K
LQotLSAodm9pZClkZXN0cm95RklGT3MKLXsKLSAgICB1bmxpbmsoW1tzZWxmIGluUGlwZVBhdGhd
IFVURjhTdHJpbmddKTsKLSAgICB1bmxpbmsoW1tzZWxmIG91dFBpcGVQYXRoXSBVVEY4U3RyaW5n
XSk7Ci0gICAgdW5saW5rKFtbc2VsZiBlcnJvclBpcGVQYXRoXSBVVEY4U3RyaW5nXSk7Ci19Ci0K
LS0gKHZvaWQpIHJlbGF5U3RyZWFtOihOU0lucHV0U3RyZWFtICopc3RyZWFtCi17Ci0gICAgdWlu
dDhfdCBieXRlc1sxMDI0XTsKLSAgICBOU0ludGVnZXIgYnl0ZXNSZWFkID0gW3N0cmVhbSByZWFk
OmJ5dGVzIG1heExlbmd0aDoxMDI0XTsKLSAgICBOU0RhdGEgKmRhdGEgPSBbTlNEYXRhIGRhdGFX
aXRoQnl0ZXM6Ynl0ZXMgbGVuZ3RoOmJ5dGVzUmVhZF07Ci0KLSAgICBpZiAoc3RyZWFtID09IFtz
ZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0pCi0gICAgICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBk
aWRSZWNlaXZlU3Rkb3V0RGF0YTpkYXRhXTsKLSAgICBlbHNlCi0gICAgICAgIFtbc2VsZiByZWxh
eURlbGVnYXRlXSBkaWRSZWNlaXZlU3RkZXJyRGF0YTpkYXRhXTsKLX0KLQotLSAodm9pZClzdHJl
YW06KE5TU3RyZWFtICopYVN0cmVhbSBoYW5kbGVFdmVudDooTlNTdHJlYW1FdmVudClldmVudENv
ZGUKLXsKLSAgICBzd2l0Y2ggKGV2ZW50Q29kZSkgewotICAgIGNhc2UgTlNTdHJlYW1FdmVudE5v
bmU6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlNTdHJlYW1FdmVudEhhc0J5dGVzQXZhaWxh
YmxlOgotICAgICAgICBbc2VsZiByZWxheVN0cmVhbTooTlNJbnB1dFN0cmVhbSAqKWFTdHJlYW1d
OwotICAgIGNhc2UgTlNTdHJlYW1FdmVudEhhc1NwYWNlQXZhaWxhYmxlOgotICAgICAgICBicmVh
azsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnRPcGVuQ29tcGxldGVkOgotICAgICAgICBicmVhazsK
LSAgICBjYXNlIE5TU3RyZWFtRXZlbnRFbmRFbmNvdW50ZXJlZDoKLSAgICAgICAgW1tzZWxmIHJl
bGF5RGVsZWdhdGVdIGRpZENyYXNoV2l0aE1lc3NhZ2U6bmlsXTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBOU1N0cmVhbUV2ZW50RXJyb3JPY2N1cnJlZDoKLSAgICAgICAgW1tzZWxmIHJlbGF5
RGVsZWdhdGVdIGRpZENyYXNoV2l0aE1lc3NhZ2U6W1thU3RyZWFtIHN0cmVhbUVycm9yXSBkZXNj
cmlwdGlvbl1dOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLUBlbmQKSW5kZXg6IFRvb2xz
L0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheS5oCShyZXZpc2lv
biAyMDk3ODQpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVs
YXkuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IExUUmVsYXlfaAotI2RlZmluZSBMVFJlbGF5X2gKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3Vu
ZGF0aW9uLmg+Ci0KLUBwcm90b2NvbCBMVFJlbGF5RGVsZWdhdGUgPE5TT2JqZWN0PgotLSAodm9p
ZClkaWRDb25uZWN0OwotLSAodm9pZClkaWREaXNjb25uZWN0OwotLSAodm9pZClkaWRDcmFzaFdp
dGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2U7Ci0tICh2b2lkKWRpZFJlY2VpdmVTdGRvdXRE
YXRhOihOU0RhdGEgKilkYXRhOwotLSAodm9pZClkaWRSZWNlaXZlU3RkZXJyRGF0YTooTlNEYXRh
ICopZGF0YTsKLUBlbmQKLQotQHByb3RvY29sIExUUmVsYXkgPE5TT2JqZWN0LCBOU1N0cmVhbURl
bGVnYXRlPgotLSAodm9pZClzZXR1cDsKLS0gKHZvaWQpdGVhckRvd247Ci0tICh2b2lkKWNvbm5l
Y3Q7Ci0tICh2b2lkKWRpc2Nvbm5lY3Q7Ci1AcHJvcGVydHkgKHdlYWspIGlkPExUUmVsYXlEZWxl
Z2F0ZT4gcmVsYXlEZWxlZ2F0ZTsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNPdXRw
dXRTdHJlYW0gKm91dHB1dFN0cmVhbTsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlv
dXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJv
bGxlci5oCShyZXZpc2lvbiAyMDk3ODQpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0
VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgTFRSZWxheUNvbnRyb2xsZXJfaAotI2RlZmluZSBMVFJl
bGF5Q29udHJvbGxlcl9oCi0KLSNpbXBvcnQgIkxUUmVsYXkuaCIKLQotI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLUBjbGFzcyBTaW1EZXZpY2U7Ci0KLUBpbnRlcmZhY2UgTFRS
ZWxheUNvbnRyb2xsZXIgOiBOU09iamVjdCA8TFRSZWxheURlbGVnYXRlPgotLSAoaWQpaW5pdFdp
dGhEZXZpY2U6KFNpbURldmljZSAqKWRldmljZSBwcm9kdWN0RGlyOihOU1N0cmluZyAqKXByb2R1
Y3REaXIgYXBwUGF0aDooTlNTdHJpbmcgKilhcHBQYXRoIGRldmljZVVESUQ6KE5TVVVJRCAqKXVk
aWQgZHVtcFRvb2xBcmd1bWVudHM6KE5TQXJyYXkgKilhcmd1bWVudHM7Ci0tICh2b2lkKXN0YXJ0
OwotLSAodm9pZClmaW5pc2g7Ci1AZW5kCi0KLSNlbmRpZgpJbmRleDogVG9vbHMvTGF5b3V0VGVz
dFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIu
bQkocmV2aXNpb24gMjA5Nzg0KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RS
ZWxheS9MVFJlbGF5Q29udHJvbGxlci5tCShub25leGlzdGVudCkKQEAgLTEsMjcyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW1wb3J0ICJMVFJlbGF5Q29udHJvbGxlci5oIgotCi0jaW1wb3J0ICJD
b3JlU2ltdWxhdG9yU1BJLmgiCi0jaW1wb3J0ICJMVFBpcGVSZWxheS5oIgotI2ltcG9ydCA8QXBw
S2l0L0FwcEtpdC5oPgotI2ltcG9ydCA8Y3J0X2V4dGVybnMuaD4KLQotQGludGVyZmFjZSBMVFJl
bGF5Q29udHJvbGxlciAoKQotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBkaXNwYXRjaF9z
b3VyY2VfdCBzdGFuZGFyZElucHV0RGlzcGF0Y2hTb3VyY2U7Ci1AcHJvcGVydHkgKHJlYWRvbmx5
LCBzdHJvbmcpIE5TRmlsZUhhbmRsZSAqc3RhbmRhcmRPdXRwdXQ7Ci1AcHJvcGVydHkgKHJlYWRv
bmx5LCBzdHJvbmcpIE5TRmlsZUhhbmRsZSAqc3RhbmRhcmRFcnJvcjsKLUBwcm9wZXJ0eSAocmVh
ZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKmlwY0lkZW50aWZpZXI7Ci1AcHJvcGVydHkgKHJlYWRv
bmx5LCBzdHJvbmcpIE5TU3RyaW5nICphcHBCdW5kbGVJZGVudGlmaWVyOwotQHByb3BlcnR5IChy
ZWFkb25seSwgc3Ryb25nKSBOU1N0cmluZyAqYXBwUGF0aDsKLUBwcm9wZXJ0eSAocmVhZG9ubHks
IHN0cm9uZykgTlNVVUlEICpkZXZpY2VVRElEOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25n
KSBOU0FycmF5ICpkdW1wVG9vbEFyZ3VtZW50czsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9u
ZykgTlNTdHJpbmcgKnByb2R1Y3REaXI7Ci1AcHJvcGVydHkgKHN0cm9uZykgU2ltRGV2aWNlICpk
ZXZpY2U7Ci1AcHJvcGVydHkgKHN0cm9uZykgaWQ8TFRSZWxheT4gcmVsYXk7Ci1AcHJvcGVydHkg
cGlkX3QgcGlkOwotQHByb3BlcnR5IChzdHJvbmcpIGRpc3BhdGNoX3NvdXJjZV90IGFwcERpc3Bh
dGNoU291cmNlOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gTFRSZWxheUNvbnRyb2xsZXIKLQot
LSAoaWQpaW5pdFdpdGhEZXZpY2U6KFNpbURldmljZSAqKWRldmljZSBwcm9kdWN0RGlyOihOU1N0
cmluZyAqKXByb2R1Y3REaXIgYXBwUGF0aDooTlNTdHJpbmcgKilhcHBQYXRoIGRldmljZVVESUQ6
KE5TVVVJRCAqKXVkaWQgZHVtcFRvb2xBcmd1bWVudHM6KE5TQXJyYXkgKilhcmd1bWVudHMKLXsK
LSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKSB7Ci0gICAgICAgIF9kZXZpY2UgPSBkZXZp
Y2U7Ci0gICAgICAgIF9wcm9kdWN0RGlyID0gcHJvZHVjdERpcjsKLSAgICAgICAgX2FwcFBhdGgg
PSBhcHBQYXRoOwotICAgICAgICBfYXBwQnVuZGxlSWRlbnRpZmllciA9IFtbTlNCdW5kbGUgYnVu
ZGxlV2l0aFBhdGg6YXBwUGF0aF0gYnVuZGxlSWRlbnRpZmllcl07Ci0gICAgICAgIF9kZXZpY2VV
RElEID0gdWRpZDsKLSAgICAgICAgX2R1bXBUb29sQXJndW1lbnRzID0gYXJndW1lbnRzOwotICAg
ICAgICBfc3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNlID0gZGlzcGF0Y2hfc291cmNlX2NyZWF0
ZShESVNQQVRDSF9TT1VSQ0VfVFlQRV9SRUFELCBTVERJTl9GSUxFTk8sIDAsIGRpc3BhdGNoX2dl
dF9tYWluX3F1ZXVlKCkpOwotICAgICAgICBfc3RhbmRhcmRPdXRwdXQgPSBbTlNGaWxlSGFuZGxl
IGZpbGVIYW5kbGVXaXRoU3RhbmRhcmRPdXRwdXRdOwotICAgICAgICBfc3RhbmRhcmRFcnJvciA9
IFtOU0ZpbGVIYW5kbGUgZmlsZUhhbmRsZVdpdGhTdGFuZGFyZEVycm9yXTsKLQotICAgICAgICBk
aXNwYXRjaF9zb3VyY2Vfc2V0X2V2ZW50X2hhbmRsZXIoX3N0YW5kYXJkSW5wdXREaXNwYXRjaFNv
dXJjZSwgXnsKLSAgICAgICAgICAgIHVpbnQ4X3QgYnVmZmVyWzEwMjRdOwotICAgICAgICAgICAg
c3NpemVfdCBsZW4gPSByZWFkKFNURElOX0ZJTEVOTywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7
Ci0gICAgICAgICAgICBpZiAobGVuID4gMCkgewotICAgICAgICAgICAgICAgIEB0cnkgewotICAg
ICAgICAgICAgICAgICAgICBbW1tzZWxmIHJlbGF5XSBvdXRwdXRTdHJlYW1dIHdyaXRlOmJ1ZmZl
ciBtYXhMZW5ndGg6bGVuXTsKLSAgICAgICAgICAgICAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24g
KmUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQnJva2VuIHBpcGUgLSB0aGUgZHVtcCB0b29s
IGNyYXNoZWQuIFRpbWUgdG8gZGllLgotICAgICAgICAgICAgICAgICAgICBbc2VsZiBkaWRDcmFz
aFdpdGhNZXNzYWdlOm5pbF07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAvLyBFT0YgUmVjZWl2ZWQgb24gdGhlIHJlbGF5J3Mgc3RhbmRh
cmQgaW5wdXQuCi0gICAgICAgICAgICAgICAgW3NlbGYgZmluaXNoXTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSk7Ci0KLSAgICAgICAgX3JlbGF5ID0gW1tMVFBpcGVSZWxheSBhbGxvY10gaW5p
dFdpdGhQcmVmaXg6W0AiL3RtcCIgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OnNlbGYu
aXBjSWRlbnRpZmllcl1dOwotICAgICAgICBbX3JlbGF5IHNldFJlbGF5RGVsZWdhdGU6c2VsZl07
Ci0gICAgfQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChOU1N0cmluZyAqKWlwY0lkZW50aWZp
ZXIKLXsKLSAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQC0lQCIsIHNl
bGYuYXBwQnVuZGxlSWRlbnRpZmllciwgc2VsZi5kZXZpY2VVRElELlVVSURTdHJpbmddOwotfQot
Ci0tIChOU1N0cmluZyAqKXByb2Nlc3NOYW1lCi17Ci0gICAgcmV0dXJuIFtzZWxmLmFwcEJ1bmRs
ZUlkZW50aWZpZXIgY29tcG9uZW50c1NlcGFyYXRlZEJ5U3RyaW5nOkAiLiJdLmxhc3RPYmplY3Q7
Ci19Ci0KLS0gKHZvaWQpZGlkUmVjZWl2ZVN0ZG91dERhdGE6KE5TRGF0YSAqKWRhdGEKLXsKLSAg
ICBAdHJ5IHsKLSAgICAgICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0XSB3cml0ZURhdGE6ZGF0YV07
Ci0gICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRpb24pIHsKLSAgICAgICAgLy8gTlNG
aWxlSGFuZGxlT3BlcmF0aW9uRXhjZXB0aW9uCi0gICAgICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhl
IHRlc3QgaGFybmVzcyBzdG9wcGVkIGxpc3RlbmluZyB0byB1cywKLSAgICAgICAgLy8gcHJvYmFi
bHkgYmVjYXVzZSB3ZSB0aW1lZCBvdXQgb3IgYSBydW4gd2FzIGNhbmNlbGVkLgotICAgICAgICBl
eGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotfQotCi0tICh2b2lkKWRpZFJlY2VpdmVTdGRlcnJE
YXRhOihOU0RhdGEgKilkYXRhCi17Ci0gICAgQHRyeSB7Ci0gICAgICAgIFtbc2VsZiBzdGFuZGFy
ZEVycm9yXSB3cml0ZURhdGE6ZGF0YV07Ci0gICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNl
cHRpb24pIHsKLSAgICAgICAgLy8gTlNGaWxlSGFuZGxlT3BlcmF0aW9uRXhjZXB0aW9uCi0gICAg
ICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhlIHRlc3QgaGFybmVzcyBzdG9wcGVkIGxpc3RlbmluZyB0
byB1cywKLSAgICAgICAgLy8gcHJvYmFibHkgYmVjYXVzZSB3ZSB0aW1lZCBvdXQgb3IgYSBydW4g
d2FzIGNhbmNlbGVkLgotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotfQotCi0t
ICh2b2lkKWRpZERpc2Nvbm5lY3QKLXsKLSAgICBkaXNwYXRjaF9zdXNwZW5kKFtzZWxmIHN0YW5k
YXJkSW5wdXREaXNwYXRjaFNvdXJjZV0pOwotfQotCi0tICh2b2lkKWRpZENvbm5lY3QKLXsKLSAg
ICBkaXNwYXRjaF9yZXN1bWUoW3NlbGYgc3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNlXSk7Ci19
Ci0KLS0gKHZvaWQpZGlkQ3Jhc2hXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0g
ICAgW1tzZWxmIHJlbGF5XSBkaXNjb25uZWN0XTsKLSAgICBOU1N0cmluZyAqY3Jhc2hNZXNzYWdl
ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJcbiNDUkFTSEVEIC0gJUAgKHBpZCAlZClc
biIsIFtzZWxmIHByb2Nlc3NOYW1lXSwgW3NlbGYgcGlkXV07Ci0KLSAgICBpZiAobWVzc2FnZSkK
LSAgICAgICAgY3Jhc2hNZXNzYWdlID0gW2NyYXNoTWVzc2FnZSBzdHJpbmdCeUFwcGVuZGluZ0Zv
cm1hdDpAIiVAXG4iLCBtZXNzYWdlXTsKLQotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSB3cml0
ZURhdGE6W2NyYXNoTWVzc2FnZSBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGlu
Z11dOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSBjbG9zZUZpbGVdOwotICAgIFtbc2VsZiBz
dGFuZGFyZE91dHB1dF0gY2xvc2VGaWxlXTsKLSAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci19Ci0K
LS0gKHZvaWQpaW5zdGFsbEFwcAotewotICAgIE5TRGljdGlvbmFyeSAqaW5zdGFsbE9wdGlvbnMg
PSBAewotICAgICAgICAoTlNTdHJpbmcgKilrQ0ZCdW5kbGVJZGVudGlmaWVyS2V5OiBzZWxmLmFw
cEJ1bmRsZUlkZW50aWZpZXIsCi0gICAgfTsKLQotICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOwot
ICAgIEJPT0wgaW5zdGFsbGVkID0gW3NlbGYuZGV2aWNlIGluc3RhbGxBcHBsaWNhdGlvbjpbTlNV
UkwgZmlsZVVSTFdpdGhQYXRoOnNlbGYuYXBwUGF0aF0gd2l0aE9wdGlvbnM6aW5zdGFsbE9wdGlv
bnMgZXJyb3I6JmVycm9yXTsKLSAgICBpZiAoIWluc3RhbGxlZCkgewotICAgICAgICBOU0xvZyhA
IkNvdWxkbid0IGluc3RhbGwgJUA6ICVAIiwgc2VsZi5hcHBQYXRoLCBlcnJvci5kZXNjcmlwdGlv
bik7Ci0gICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpa2ls
bEFwcAotewotICAgIGRpc3BhdGNoX3NvdXJjZV90IGRpc3BhdGNoID0gW3NlbGYgYXBwRGlzcGF0
Y2hTb3VyY2VdOwotCi0gICAgaWYgKGRpc3BhdGNoKQotICAgICAgICBkaXNwYXRjaF9zb3VyY2Vf
Y2FuY2VsKGRpc3BhdGNoKTsKLQotICAgIGlmIChbc2VsZiBwaWRdID4gMSkgewotICAgICAgICBr
aWxsKHNlbGYucGlkLCBTSUdLSUxMKTsKLSAgICAgICAgW3NlbGYgc2V0UGlkOi0xXTsKLSAgICB9
Ci0gICAgW3NlbGYgc2V0QXBwRGlzcGF0Y2hTb3VyY2U6bmlsXTsKLX0KLQotLSAoTlNEaWN0aW9u
YXJ5ICopX2Vudmlyb25tZW50VmFyaWFibGVzCi17Ci0gICAgc3RhdGljIE5TRGljdGlvbmFyeSAq
ZW52aXJvbm1lbnRWYXJpYWJsZXM7Ci0gICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlOwot
Ci0gICAgZGlzcGF0Y2hfb25jZSgmb25jZSwgXnsKLSAgICAgICAgTlNTdHJpbmcgKnByb2R1Y3RE
aXJlY3RvcnkgPSBbc2VsZiBwcm9kdWN0RGlyXTsKLQotICAgICAgICBOU011dGFibGVEaWN0aW9u
YXJ5ICpkaWN0aW9uYXJ5ID0gW0B7Ci0gICAgICAgICAgICBAIklQQ19JREVOVElGSUVSIjogc2Vs
Zi5pcGNJZGVudGlmaWVyLAotICAgICAgICAgICAgQCJEWUxEX0ZSQU1FV09SS19QQVRIIjogcHJv
ZHVjdERpcmVjdG9yeSwKLSAgICAgICAgICAgIEAiX19YUENfRFlMRF9GUkFNRVdPUktfUEFUSCI6
IHByb2R1Y3REaXJlY3RvcnksCi0gICAgICAgICAgICBAIkRZTERfTElCUkFSWV9QQVRIIjogcHJv
ZHVjdERpcmVjdG9yeSwKLSAgICAgICAgICAgIEAiX19YUENfRFlMRF9MSUJSQVJZX1BBVEgiOiBw
cm9kdWN0RGlyZWN0b3J5LAotICAgICAgICB9IG11dGFibGVDb3B5XTsKLQotICAgICAgICBmb3Ig
KE5TU3RyaW5nICprZXlOYW1lIGluIEBbQCJEWUxEX0lOU0VSVF9MSUJSQVJJRVMiLCBAIk1hbGxv
Y1N0YWNrTG9nZ2luZyIsIEAiTE9DQUxfUkVTT1VSQ0VfUk9PVCIsIEAiRFVNUFJFTkRFUlRSRUVf
VEVNUCJdKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiB2YWx1ZSA9IGdldGVudihba2V5TmFt
ZSBVVEY4U3RyaW5nXSk7Ci0gICAgICAgICAgICBpZiAodmFsdWUgJiYgc3RybGVuKHZhbHVlKSkg
ewotICAgICAgICAgICAgICAgIE5TU3RyaW5nICpuc1ZhbHVlID0gW05TU3RyaW5nIHN0cmluZ1dp
dGhVVEY4U3RyaW5nOnZhbHVlXTsKLSAgICAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmpl
Y3Q6bnNWYWx1ZSBmb3JLZXk6a2V5TmFtZV07Ci0gICAgICAgICAgICAgICAgW2RpY3Rpb25hcnkg
c2V0T2JqZWN0Om5zVmFsdWUgZm9yS2V5OltAIl9fWFBDXyIgc3RyaW5nQnlBcHBlbmRpbmdTdHJp
bmc6a2V5TmFtZV1dOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChj
aGFyKiogZW52cCA9ICpfTlNHZXRFbnZpcm9uKCk7ICplbnZwOyBlbnZwKyspIHsKLSAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIGVudiA9ICplbnZwOwotICAgICAgICAgICAgaWYgKCFzdHJuY21wKCJK
U0NfIiwgZW52LCA0KSB8fCAhc3RybmNtcCgiX19YUENfSlNDXyIsIGVudiwgMTApKSB7Ci0gICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogZXF1YWwgPSBzdHJjaHIoZW52LCAnPScpOwotICAgICAg
ICAgICAgICAgIGlmICghZXF1YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgTlNMb2coQCJNaXNz
aW5nICc9JyBpbiBlbnYgdmFyICclcyciLCBlbnYpOwotICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3Qg
c2l6ZV90IG1heEtleUxlbmd0aCA9IDI1NjsKLSAgICAgICAgICAgICAgICBzaXplX3Qga2V5TGVu
Z3RoID0gZXF1YWwgLSBlbnY7Ci0gICAgICAgICAgICAgICAgaWYgKGtleUxlbmd0aCA+PSBtYXhL
ZXlMZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgTlNMb2coQCJFbnYgdmFyICclcycgaXMg
dG9vIGxvbmciLCBlbnYpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjaGFyIGtleVttYXhLZXlMZW5ndGhdOwotICAg
ICAgICAgICAgICAgIHN0cm5jcHkoa2V5LCBlbnYsIGtleUxlbmd0aCk7Ci0gICAgICAgICAgICAg
ICAga2V5W2tleUxlbmd0aF0gPSAnXDAnOwotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZh
bHVlID0gZXF1YWwgKyAxOwotCi0gICAgICAgICAgICAgICAgTlNTdHJpbmcgKm5zS2V5ID0gW05T
U3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmtleV07Ci0gICAgICAgICAgICAgICAgTlNTdHJp
bmcgKm5zVmFsdWUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6dmFsdWVdOwotICAg
ICAgICAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpuc1ZhbHVlIGZvcktleTpuc0tleV07
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBlbnZpcm9ubWVudFZhcmlhYmxl
cyA9IFtkaWN0aW9uYXJ5IGNvcHldOwotICAgIH0pOwotCi0gICAgcmV0dXJuIGVudmlyb25tZW50
VmFyaWFibGVzOwotfQotCi0tICh2b2lkKWxhdW5jaEFwcAotewotICAgIE5TRGljdGlvbmFyeSAq
bGF1bmNoT3B0aW9ucyA9IEB7Ci0gICAgICAgIGtTaW1EZXZpY2VMYXVuY2hBcHBsaWNhdGlvbkVu
dmlyb25tZW50OiBbc2VsZiBfZW52aXJvbm1lbnRWYXJpYWJsZXNdLAotICAgICAgICBrU2ltRGV2
aWNlTGF1bmNoQXBwbGljYXRpb25Bcmd1bWVudHM6IFtzZWxmIGR1bXBUb29sQXJndW1lbnRzXSwK
LSAgICB9OwotCi0gICAgTlNFcnJvciAqZXJyb3I7Ci0gICAgcGlkX3QgcGlkID0gW3NlbGYuZGV2
aWNlIGxhdW5jaEFwcGxpY2F0aW9uV2l0aElEOnNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciBvcHRp
b25zOmxhdW5jaE9wdGlvbnMgZXJyb3I6JmVycm9yXTsKLQotICAgIGlmIChwaWQgPCAwKSB7Ci0g
ICAgICAgIE5TTG9nKEAiQ291bGRuJ3QgbGF1bmNoICVAOiAlQCIsIHNlbGYuYXBwQnVuZGxlSWRl
bnRpZmllciwgZXJyb3IuZGVzY3JpcHRpb24pOwotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7
Ci0gICAgfQotCi0gICAgW3NlbGYgc2V0UGlkOnBpZF07Ci0KLSAgICBkaXNwYXRjaF9xdWV1ZV90
IHF1ZXVlID0gZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKTsKLSAgICBkaXNwYXRjaF9zb3VyY2Vf
dCBzaW11bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3VyY2UgPSBkaXNwYXRjaF9zb3VyY2VfY3JlYXRl
KERJU1BBVENIX1NPVVJDRV9UWVBFX1BST0MsIFtzZWxmIHBpZF0sIERJU1BBVENIX1BST0NfRVhJ
VCwgcXVldWUpOwotICAgIFtzZWxmIHNldEFwcERpc3BhdGNoU291cmNlOnNpbXVsYXRvckFwcEV4
aXREaXNwYXRjaFNvdXJjZV07Ci0gICAgZGlzcGF0Y2hfc291cmNlX3NldF9ldmVudF9oYW5kbGVy
KHNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSwgXnsKLSAgICAgICAgZGlzcGF0Y2hfc291
cmNlX2NhbmNlbChzaW11bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3VyY2UpOwotICAgICAgICBbc2Vs
ZiBkaWRDcmFzaFdpdGhNZXNzYWdlOm5pbF07Ci0gICAgfSk7Ci0gICAgZGlzcGF0Y2hfcmVzdW1l
KHNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSk7Ci19Ci0KLS0gKHZvaWQpc3RhcnQKLXsK
LSAgICBbc2VsZiBpbnN0YWxsQXBwXTsKLSAgICBbW3NlbGYgcmVsYXldIHNldHVwXTsKLSAgICBb
c2VsZiBsYXVuY2hBcHBdOwotICAgIFtbc2VsZiByZWxheV0gY29ubmVjdF07Ci19Ci0KLS0gKHZv
aWQpZmluaXNoCi17Ci0gICAgW1tzZWxmIHJlbGF5XSBkaXNjb25uZWN0XTsKLSAgICBbc2VsZiBr
aWxsQXBwXTsKLSAgICBleGl0KEVYSVRfU1VDQ0VTUyk7Ci19Ci0KLUBlbmQKSW5kZXg6IFRvb2xz
L0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvbWFpbi5tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvbWFpbi5tCShyZXZpc2lvbiAyMDk3
ODQpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L21haW4ubQkobm9u
ZXhpc3RlbnQpCkBAIC0xLDEzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAi
Q29yZVNpbXVsYXRvclNQSS5oIgotI2ltcG9ydCAiTFRSZWxheUNvbnRyb2xsZXIuaCIKLSNpbXBv
cnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi1zdGF0aWMgTFRSZWxheUNvbnRyb2xsZXIg
KnJlbGF5Q29udHJvbGxlcjsKLQotdm9pZCB1c2FnZSgpCi17Ci0gICAgTlNTdHJpbmcgKmhlbHBU
ZXh0ID0gQCJMYXlvdXRUZXN0UmVsYXk6IHJ1biBhIGR1bXAgdG9vbCBpbiB0aGUgc2ltdWxhdG9y
LiBOb3QgZm9yIGRpcmVjdCBjb25zdW1wdGlvbi5cbiIKLSAgICAgICAgIlVzYWdlOiBMYXlvdXRU
ZXN0UmVsYXkgWy1oXSBbb3B0aW9uc10gLS0gW2R1bXAgdG9vbCBhcmd1bWVudHNdXG4iCi0gICAg
ICAgICJSZXF1aXJlZCBvcHRpb25zOlxuIgotICAgICAgICAiICAgIC11ZGlkIDxpZGVudGlmaWVy
PiAgICAgICBTaW11bGF0b3IgZGV2aWNlIGlkZW50aWZpZXJcbiIKLSAgICAgICAgIiAgICAtYXBw
IDxhcHBfcGF0aD4gICAgICAgICAgUGF0aCB0byB0aGUgYnVpbHQgaU9TIC5hcHAgYnVuZGxlIGRp
cmVjdG9yeS5cbiIKLSAgICAgICAgIiAgICAtcHJvZHVjdERpciA8ZGlyPiAgICAgICAgL3BhdGgv
dG8vV2ViS2l0QnVpbGQve2NvbmZpZ3VyYXRpb259LXtzaG9ydCBwbGF0Zm9ybX0uXG4iOwotCi0g
ICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgW2hlbHBUZXh0IFVURjhTdHJpbmddKTsKLX0KLQot
TlNTdHJpbmcgKmdldFJlcXVpcmVkU3RyaW5nQXJndW1lbnQoTlNTdHJpbmcgKnBhcmFtZXRlcikK
LXsKLSAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRh
cmRVc2VyRGVmYXVsdHNdOwotICAgIE5TU3RyaW5nICphcmd1bWVudCA9IFtkZWZhdWx0cyBzdHJp
bmdGb3JLZXk6cGFyYW1ldGVyXTsKLQotICAgIGlmICghYXJndW1lbnQpIHsKLSAgICAgICAgTlNM
b2coQCItJUAgaXMgcmVxdWlyZWQuIiwgcGFyYW1ldGVyKTsKLSAgICAgICAgdXNhZ2UoKTsKLSAg
ICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0KLSAgICByZXR1cm4gYXJndW1lbnQ7Ci19
Ci0KLU5TQXJyYXkgKmdldER1bXBUb29sQXJndW1lbnRzKCkKLXsKLSAgICBOU011dGFibGVBcnJh
eSAqZHVtcFRvb2xBcmd1bWVudHMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKLSAg
ICBOU0FycmF5ICpwcm9jZXNzQXJncyA9IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gYXJn
dW1lbnRzXTsKLSAgICBCT09MIGFwcGVuZGluZyA9IE5POwotICAgIGZvciAoTlNTdHJpbmcgKmFy
ZyBpbiBwcm9jZXNzQXJncykgewotICAgICAgICBpZiAoW2FyZyBpc0VxdWFsVG9TdHJpbmc6QCIt
LSJdKSB7Ci0gICAgICAgICAgICBhcHBlbmRpbmcgPSBZRVM7Ci0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoYXBwZW5kaW5nKQotICAgICAgICAgICAgW2R1bXBU
b29sQXJndW1lbnRzIGFkZE9iamVjdDphcmddOwotICAgIH0KLSAgICByZXR1cm4gZHVtcFRvb2xB
cmd1bWVudHM7Ci19Ci0KLXZvaWQgZmluaXNoKCkKLXsKLSAgICBbcmVsYXlDb250cm9sbGVyIGZp
bmlzaF07Ci19Ci0KLXZvaWQgcmVjZWl2ZWRTaWduYWwoaW50IHNpZ25hbCkKLXsKLSAgICBleGl0
KEVYSVRfU1VDQ0VTUyk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICogYXJn
dltdKQotewotICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBOU0FycmF5ICpoZWxwQXJn
dW1lbnRzID0gQFtAIi1oIiwgQCItLWhlbHAiXTsKLSAgICAgICAgZm9yIChOU1N0cmluZyAqaGVs
cEFyZ3VtZW50IGluIGhlbHBBcmd1bWVudHMpIHsKLSAgICAgICAgICAgIGlmIChbW1tOU1Byb2Nl
c3NJbmZvIHByb2Nlc3NJbmZvXSBhcmd1bWVudHNdIGluZGV4T2ZPYmplY3Q6aGVscEFyZ3VtZW50
XSAhPSBOU05vdEZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgdXNhZ2UoKTsKLSAgICAgICAgICAg
ICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotI2lm
IFVTRV9TSU1fU0VSVklDRV9DT05URVhUCi0gICAgICAgIE5TU3RyaW5nICpkZXZlbG9wZXJEaXJl
Y3RvcnkgPSBnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAiZGV2ZWxvcGVyRGlyIik7Ci0jZW5k
aWYKLSAgICAgICAgTlNVVUlEICp1ZGlkID0gW1tOU1VVSUQgYWxsb2NdIGluaXRXaXRoVVVJRFN0
cmluZzpnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAidWRpZCIpXTsKLSAgICAgICAgTlNTdHJp
bmcgKmFwcFBhdGggPSBnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAiYXBwIik7Ci0gICAgICAg
IE5TU3RyaW5nICpwcm9kdWN0RGlyZWN0b3J5ID0gZ2V0UmVxdWlyZWRTdHJpbmdBcmd1bWVudChA
InByb2R1Y3REaXIiKTsKLSAgICAgICAgTlNBcnJheSAqZHVtcFRvb2xBcmd1bWVudHMgPSBnZXRE
dW1wVG9vbEFyZ3VtZW50cygpOwotCi0jaWYgVVNFX1NJTV9TRVJWSUNFX0NPTlRFWFQKLSAgICAg
ICAgTlNFcnJvciAqZXJyb3I7Ci0gICAgICAgIFNpbVNlcnZpY2VDb250ZXh0ICpzZXJ2aWNlQ29u
dGV4dCA9IFtTaW1TZXJ2aWNlQ29udGV4dCBzaGFyZWRTZXJ2aWNlQ29udGV4dEZvckRldmVsb3Bl
ckRpcjpkZXZlbG9wZXJEaXJlY3RvcnkgZXJyb3I6JmVycm9yXTsKLSAgICAgICAgaWYgKCFzZXJ2
aWNlQ29udGV4dCkgewotICAgICAgICAgICAgTlNMb2coQCJEZXZpY2UgY29udGV4dCBjb3VsZG4n
dCBiZSBmb3VuZDogJUAiLCBlcnJvcik7Ci0gICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7
Ci0gICAgICAgIH0KLSAgICAgICAgU2ltRGV2aWNlU2V0ICpkZXZpY2VTZXQgPSBbc2VydmljZUNv
bnRleHQgZGVmYXVsdERldmljZVNldFdpdGhFcnJvcjpuaWxdOwotICAgICAgICBpZiAoIWRldmlj
ZVNldCkgewotICAgICAgICAgICAgTlNMb2coQCJEZWZhdWx0IGRldmljZSBzZXQgY291bGRuJ3Qg
YmUgZm91bmQ6ICVAIiwgZXJyb3IpOwotICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwot
ICAgICAgICB9Ci0gICAgICAgIFNpbURldmljZSAqZGV2aWNlID0gW2RldmljZVNldC5kZXZpY2Vz
QnlVRElEIG9iamVjdEZvcktleTp1ZGlkXTsKLSNlbHNlCi0gICAgICAgIFNpbURldmljZSAqZGV2
aWNlID0gW1NpbURldmljZVNldC5kZWZhdWx0U2V0LmRldmljZXNCeVVESUQgb2JqZWN0Rm9yS2V5
OnVkaWRdOwotI2VuZGlmCi0gICAgICAgIGlmICghZGV2aWNlKSB7Ci0gICAgICAgICAgICBOU0xv
ZyhAIkRldmljZSAlQCBjb3VsZG4ndCBiZSBmb3VuZCIsIHVkaWQpOwotICAgICAgICAgICAgZXhp
dChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVsYXlDb250cm9sbGVyID0g
W1tMVFJlbGF5Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhEZXZpY2U6ZGV2aWNlIHByb2R1Y3RE
aXI6cHJvZHVjdERpcmVjdG9yeSBhcHBQYXRoOmFwcFBhdGggZGV2aWNlVURJRDp1ZGlkIGR1bXBU
b29sQXJndW1lbnRzOmR1bXBUb29sQXJndW1lbnRzXTsKLSAgICAgICAgW3JlbGF5Q29udHJvbGxl
ciBzdGFydF07Ci0KLSAgICAgICAgYXRleGl0KGZpbmlzaCk7Ci0gICAgICAgIHNpZ25hbChTSUdJ
TlQsIHJlY2VpdmVkU2lnbmFsKTsKLSAgICAgICAgc2lnbmFsKFNJR1RFUk0sIHJlY2VpdmVkU2ln
bmFsKTsKLQotICAgICAgICBbW05TUnVuTG9vcCBtYWluUnVuTG9vcF0gcnVuXTsKLSAgICB9Ci0g
ICAgcmV0dXJuIDA7Ci19CkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJl
bGF5Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0
VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAyMDk3ODQpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMDIgKzAsMCBAQAot
Ly8gISQqVVRGOCokIQotewotCWFyY2hpdmVWZXJzaW9uID0gMTsKLQljbGFzc2VzID0gewotCX07
Ci0Jb2JqZWN0VmVyc2lvbiA9IDQ2OwotCW9iamVjdHMgPSB7Ci0KLS8qIEJlZ2luIFBCWEJ1aWxk
RmlsZSBzZWN0aW9uICovCi0JCTJFOEQzRUY4MTk4ODFENDMwMDRGNkNDMiAvKiBtYWluLm0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRThEM0VGNzE5ODgx
RDQzMDA0RjZDQzIgLyogbWFpbi5tICovOyB9OwotCQkyRThEM0YwMjE5ODgxRkQwMDA0RjZDQzIg
LyogTFRQaXBlUmVsYXkubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJFOEQzRjAxMTk4ODFGRDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5tICovOyB9Owot
CQkyRThEM0YwNjE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIubSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOEQzRjA1MTk4ODI0MDYw
MDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5tICovOyB9OwotLyogRW5kIFBCWEJ1aWxkRmls
ZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWENvcHlGaWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAq
LwotCQkyRThEM0VGMjE5ODgxRDQzMDA0RjZDQzIgLyogQ29weUZpbGVzICovID0gewotCQkJaXNh
ID0gUEJYQ29weUZpbGVzQnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2
NDc7Ci0JCQlkc3RQYXRoID0gL3Vzci9zaGFyZS9tYW4vbWFuMS87Ci0JCQlkc3RTdWJmb2xkZXJT
cGVjID0gMDsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAxOwotCQl9OwotLyogRW5kIFBCWENvcHlGaWxlc0J1aWxkUGhhc2Ugc2Vj
dGlvbiAqLwotCi0vKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KLQkJMkU4RDNF
RjQxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxl
IjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gTGF5b3V0VGVzdFJlbGF5OyBzb3VyY2VUcmVl
ID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQkyRThEM0VGNzE5ODgxRDQzMDA0RjZDQzIgLyog
bWFpbi5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLm9iamM7IHBhdGggPSBtYWluLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lnhj
Y29uZmlnOyBuYW1lID0gRGVidWdSZWxlYXNlLnhjY29uZmlnOyBwYXRoID0gQ29uZmlndXJhdGlv
bnMvRGVidWdSZWxlYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQky
RThEM0VGRjE5ODgxRTI1MDA0RjZDQzIgLyogQmFzZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IG5hbWUgPSBC
YXNlLnhjY29uZmlnOyBwYXRoID0gQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZzsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDAxOTg4MUYyOTAwNEY2Q0MyIC8qIExUUmVs
YXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTFRSZWxheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkyRThEM0YwMTE5ODgxRkQwMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkubSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gTFRQaXBlUmVsYXkubTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDMxOTg4MUZFMjAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExUUGlwZVJlbGF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTJFOEQzRjA0MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMVFJlbGF5Q29udHJvbGxlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0YwNTE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxh
eUNvbnRyb2xsZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gTFRSZWxh
eUNvbnRyb2xsZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0UxRkJDMTUxQjI5
MEU3OTAwMDEzNkY1IC8qIENvcmVTaW11bGF0b3JTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29yZVNpbXVsYXRvclNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhGcmFt
ZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0JCTJFOEQzRUYxMTk4ODFENDMwMDRGNkNDMiAv
KiBGcmFtZXdvcmtzICovID0gewotCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7Ci0J
CQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07Ci0vKiBFbmQgUEJY
RnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhHcm91cCBzZWN0
aW9uICovCi0JCTJFOEQzRUVCMTk4ODFENDMwMDRGNkNDMiA9IHsKLQkJCWlzYSA9IFBCWEdyb3Vw
OwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMkU4RDNFRkYxOTg4MUUyNTAwNEY2Q0MyIC8qIEJhc2Uu
eGNjb25maWcgKi8sCi0JCQkJMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFz
ZS54Y2NvbmZpZyAqLywKLQkJCQkyRThEM0VGNjE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVz
dFJlbGF5ICovLAotCQkJCTJFOEQzRUY1MTk4ODFENDMwMDRGNkNDMiAvKiBQcm9kdWN0cyAqLywK
LQkJCSk7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQkyRThEM0VGNTE5ODgx
RDQzMDA0RjZDQzIgLyogUHJvZHVjdHMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNo
aWxkcmVuID0gKAotCQkJCTJFOEQzRUY0MTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVs
YXkgKi8sCi0JCQkpOwotCQkJbmFtZSA9IFByb2R1Y3RzOwotCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKLQkJfTsKLQkJMkU4RDNFRjYxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxh
eSAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMkU4RDNF
RjcxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSAqLywKLQkJCQlDRTFGQkMxNTFCMjkwRTc5MDAw
MTM2RjUgLyogQ29yZVNpbXVsYXRvclNQSS5oICovLAotCQkJCTJFOEQzRjAwMTk4ODFGMjkwMDRG
NkNDMiAvKiBMVFJlbGF5LmggKi8sCi0JCQkJMkU4RDNGMDExOTg4MUZEMDAwNEY2Q0MyIC8qIExU
UGlwZVJlbGF5Lm0gKi8sCi0JCQkJMkU4RDNGMDMxOTg4MUZFMjAwNEY2Q0MyIC8qIExUUGlwZVJl
bGF5LmggKi8sCi0JCQkJMkU4RDNGMDQxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9s
bGVyLmggKi8sCi0JCQkJMkU4RDNGMDUxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9s
bGVyLm0gKi8sCi0JCQkpOwotCQkJcGF0aCA9IExheW91dFRlc3RSZWxheTsKLQkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0vKiBFbmQgUEJYR3JvdXAgc2VjdGlvbiAqLwotCi0vKiBC
ZWdpbiBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLwotCQkyRThEM0VGMzE5ODgxRDQzMDA0RjZD
QzIgLyogTGF5b3V0VGVzdFJlbGF5ICovID0gewotCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0Owot
CQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDJFOEQzRUZCMTk4ODFENDMwMDRGNkNDMiAvKiBC
dWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiTGF5b3V0VGVzdFJl
bGF5IiAqLzsKLQkJCWJ1aWxkUGhhc2VzID0gKAotCQkJCTJFOEQzRUYwMTk4ODFENDMwMDRGNkND
MiAvKiBTb3VyY2VzICovLAotCQkJCTJFOEQzRUYxMTk4ODFENDMwMDRGNkNDMiAvKiBGcmFtZXdv
cmtzICovLAotCQkJCTJFOEQzRUYyMTk4ODFENDMwMDRGNkNDMiAvKiBDb3B5RmlsZXMgKi8sCi0J
CQkpOwotCQkJYnVpbGRSdWxlcyA9ICgKLQkJCSk7Ci0JCQlkZXBlbmRlbmNpZXMgPSAoCi0JCQkp
OwotCQkJbmFtZSA9IExheW91dFRlc3RSZWxheTsKLQkJCXByb2R1Y3ROYW1lID0gTGF5b3V0VGVz
dFJlbGF5OwotCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDJFOEQzRUY0MTk4ODFENDMwMDRGNkNDMiAv
KiBMYXlvdXRUZXN0UmVsYXkgKi87Ci0JCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVj
dC10eXBlLnRvb2wiOwotCQl9OwotLyogRW5kIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCi0K
LS8qIEJlZ2luIFBCWFByb2plY3Qgc2VjdGlvbiAqLwotCQkyRThEM0VFQzE5ODgxRDQzMDA0RjZD
QzIgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7Ci0JCQlpc2EgPSBQQlhQcm9qZWN0OwotCQkJYXR0
cmlidXRlcyA9IHsKLQkJCQlMYXN0VXBncmFkZUNoZWNrID0gMDYwMDsKLQkJCQlPUkdBTklaQVRJ
T05OQU1FID0gIkFwcGxlLCBJbmMuIjsKLQkJCQlUYXJnZXRBdHRyaWJ1dGVzID0gewotCQkJCQky
RThEM0VGMzE5ODgxRDQzMDA0RjZDQzIgPSB7Ci0JCQkJCQlDcmVhdGVkT25Ub29sc1ZlcnNpb24g
PSA2LjA7Ci0JCQkJCX07Ci0JCQkJfTsKLQkJCX07Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0
ID0gMkU4RDNFRUYxOTg4MUQ0MzAwNEY2Q0MyIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBm
b3IgUEJYUHJvamVjdCAiTGF5b3V0VGVzdFJlbGF5IiAqLzsKLQkJCWNvbXBhdGliaWxpdHlWZXJz
aW9uID0gIlhjb2RlIDMuMiI7Ci0JCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7Ci0JCQlo
YXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMDsKLQkJCWtub3duUmVnaW9ucyA9ICgKLQkJCQllbiwK
LQkJCSk7Ci0JCQltYWluR3JvdXAgPSAyRThEM0VFQjE5ODgxRDQzMDA0RjZDQzI7Ci0JCQlwcm9k
dWN0UmVmR3JvdXAgPSAyRThEM0VGNTE5ODgxRDQzMDA0RjZDQzIgLyogUHJvZHVjdHMgKi87Ci0J
CQlwcm9qZWN0RGlyUGF0aCA9ICIiOwotCQkJcHJvamVjdFJvb3QgPSAiIjsKLQkJCXRhcmdldHMg
PSAoCi0JCQkJMkU4RDNFRjMxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLywK
LQkJCSk7Ci0JCX07Ci0vKiBFbmQgUEJYUHJvamVjdCBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBC
WFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjAxOTg4MUQ0MzAwNEY2Q0My
IC8qIFNvdXJjZXMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKLQkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCQkyRThEM0YwNjE5
ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIubSBpbiBTb3VyY2VzICovLAotCQkJ
CTJFOEQzRUY4MTk4ODFENDMwMDRGNkNDMiAvKiBtYWluLm0gaW4gU291cmNlcyAqLywKLQkJCQky
RThEM0YwMjE5ODgxRkQwMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkubSBpbiBTb3VyY2VzICovLAot
CQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9Owot
LyogRW5kIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gWENCdWls
ZENvbmZpZ3VyYXRpb24gc2VjdGlvbiAqLwotCQkyRThEM0VGOTE5ODgxRDQzMDA0RjZDQzIgLyog
RGVidWcgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25m
aWd1cmF0aW9uUmVmZXJlbmNlID0gMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVs
ZWFzZS54Y2NvbmZpZyAqLzsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQl9OwotCQkJbmFtZSA9
IERlYnVnOwotCQl9OwotCQkyRThEM0VGQTE5ODgxRDQzMDA0RjZDQzIgLyogUmVsZWFzZSAqLyA9
IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25S
ZWZlcmVuY2UgPSAyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29u
ZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsK
LQkJfTsKLQkJMkU4RDNFRkMxOTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICovID0gewotCQkJaXNh
ID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9
IDJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi87Ci0J
CQlidWlsZFNldHRpbmdzID0gewotCQkJCVBST0RVQ1RfTkFNRSA9ICIkKFRBUkdFVF9OQU1FKSI7
Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVnOwotCQl9OwotCQkyRThEM0VGRDE5ODgxRDQzMDA0RjZD
QzIgLyogUmVsZWFzZSAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJ
YmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyog
RGVidWdSZWxlYXNlLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlQUk9E
VUNUX05BTUUgPSAiJChUQVJHRVRfTkFNRSkiOwotCQkJfTsKLQkJCW5hbWUgPSBSZWxlYXNlOwot
CQl9OwotLyogRW5kIFhDQnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24gKi8KLQotLyogQmVnaW4g
WENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCi0JCTJFOEQzRUVGMTk4ODFENDMwMDRGNkND
MiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIkxheW91dFRlc3RS
ZWxheSIgKi8gPSB7Ci0JCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVpbGRDb25m
aWd1cmF0aW9ucyA9ICgKLQkJCQkyRThEM0VGOTE5ODgxRDQzMDA0RjZDQzIgLyogRGVidWcgKi8s
Ci0JCQkJMkU4RDNFRkExOTg4MUQ0MzAwNEY2Q0MyIC8qIFJlbGVhc2UgKi8sCi0JCQkpOwotCQkJ
ZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRp
b25OYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJMkU4RDNFRkIxOTg4MUQ0MzAwNEY2Q0MyIC8qIEJ1
aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJMYXlvdXRUZXN0UmVs
YXkiICovID0gewotCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKLQkJCWJ1aWxkQ29uZmln
dXJhdGlvbnMgPSAoCi0JCQkJMkU4RDNFRkMxOTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICovLAot
CQkJCTJFOEQzRUZEMTk4ODFENDMwMDRGNkNDMiAvKiBSZWxlYXNlICovLAotCQkJKTsKLQkJCWRl
ZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9u
TmFtZSA9IFJlbGVhc2U7Ci0JCX07Ci0vKiBFbmQgWENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9u
ICovCi0JfTsKLQlyb290T2JqZWN0ID0gMkU4RDNFRUMxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2pl
Y3Qgb2JqZWN0ICovOwotfQpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RS
ZWxheS54Y29kZXByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91
dFRlc3RSZWxheS54Y29kZXByb2oJKHJldmlzaW9uIDIwOTc4NCkKKysrIFRvb2xzL0xheW91dFRl
c3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVwcm9qCShub25leGlzdGVudCkKClByb3BlcnR5
IGNoYW5nZXMgb246IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVw
cm9qCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmlnbm9yZQojIyAtMSwyICswLDAgIyMKLXByb2pl
Y3QueGN3b3Jrc3BhY2UKLXhjdXNlcmRhdGEKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9N
YWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvTWFrZWZpbGUJKHJl
dmlzaW9uIDIwOTc4NCkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9NYWtlZmlsZQkobm9uZXhp
c3RlbnQpCkBAIC0xLDYgKzAsMCBAQAotU0NSSVBUU19QQVRIID0gLi4vU2NyaXB0cwotCi1PVkVS
UklERV9BUkNIUyA9IGRlZmF1bHQKLU9WRVJSSURFX1NES1JPT1QgPSBkZWZhdWx0Ci0KLWluY2x1
ZGUgLi4vLi4vTWFrZWZpbGUuc2hhcmVkCkluZGV4OiBUb29scy9NYWtlZmlsZQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9NYWtlZmlsZQkocmV2aXNpb24gMjA5Nzg0KQorKysgVG9vbHMvTWFrZWZpbGUJ
KHdvcmtpbmcgY29weSkKQEAgLTcsOSArNyw2IEBAIGlmbmVxICgsJChTREtST09UKSkKIAlpZm5l
cSAoLCQoZmluZHN0cmluZyBpcGhvbmUsJChTREtST09UKSkpCiAJCU1PRFVMRVMgKz0gTW9iaWxl
TWluaUJyb3dzZXIKIAllbmRpZgotCWlmZXEgKCwkKERPX05PVF9CVUlMRF9MQVlPVVRfVEVTVF9S
RUxBWSkpCi0JCU1PRFVMRVMgKz0gTGF5b3V0VGVzdFJlbGF5Ci0JZW5kaWYKIGVuZGlmCiAKIGFs
bDoKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJl
bmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA5Nzg0KQorKysg
VG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksNyBAQAogCQkyQ0U4OEZBMjE3MTI0RDhD
MDA3MzRGQzAgLyogSmF2YVNjcmlwdFRocmVhZGluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQ0U4OEZBMTE3MTI0Q0VFMDA3MzRGQzAgLyogSmF2
YVNjcmlwdFRocmVhZGluZy5jcHAgKi87IH07CiAJCTJENDAzRjFCMTUwODcyMDkwMDUzNThEMiAv
KiBMYXlvdXRUZXN0SGVscGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRDQwM0VBMjE1MDg3MTQyMDA1MzU4RDIgLyogTGF5b3V0VGVzdEhlbHBlci5t
ICovOyB9OwogCQkzMTExN0IzRDE1RDlBNTZBMDAxNjNCQzggLyogTW9ja1dlYk5vdGlmaWNhdGlv
blByb3ZpZGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzExMTdCM0IxNUQ5QTU2QTAwMTYzQkM4IC8qIE1vY2tXZWJOb3RpZmljYXRpb25Qcm92aWRl
ci5tbSAqLzsgfTsKKwkJMzFCMDlDQzgxRTAzMzVGMTAwNkY0RTREIC8qIHVuaXhMb2dnaW5nUGlw
ZXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUIw
OUNDNzFFMDMzNUVCMDA2RjRFNEQgLyogdW5peExvZ2dpbmdQaXBlcy5tbSAqLzsgfTsKIAkJNDQw
NTkwNzExMjY4NDUzODAwQ0ZENDhEIC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9ydE1hYy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MDU5MDcwMTI2ODQ1
MzgwMENGRDQ4RCAvKiBXZWJBcmNoaXZlRHVtcFN1cHBvcnRNYWMubW0gKi87IH07CiAJCTQ0Mzc3
MzBFMTI1Q0JDMzYwMEFBRTAyQyAvKiBXZWJBcmNoaXZlRHVtcFN1cHBvcnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDRBOTk3ODMwRkNERTg2NDAw
NTgwRjEwIC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9ydC5jcHAgKi87IH07CiAJCTQ0NjRDQUJFMUMy
MEEwOEIwMEU1QkI1NSAvKiBEdW1wUmVuZGVyVHJlZUFwcE1haW4ubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDY0Q0FCRDFDMjBBMDcwMDBFNUJCNTUg
LyogRHVtcFJlbmRlclRyZWVBcHBNYWluLm1tICovOyB9OwpAQCAtMjkzLDYgKzI5NCw4IEBACiAJ
CTJENDAzRjE5MTUwODcxRjkwMDUzNThEMiAvKiBMYXlvdXRUZXN0SGVscGVyICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4
ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBMYXlvdXRUZXN0SGVscGVyOyBz
b3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQkzMTExN0IzQTE1RDlBNTZBMDAx
NjNCQzggLyogTW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IE1vY2tXZWJOb3RpZmljYXRpb25Qcm92aWRlci5oOyBwYXRoID0gbWFj
L01vY2tXZWJOb3RpZmljYXRpb25Qcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzMTExN0IzQjE1RDlBNTZBMDAxNjNCQzggLyogTW9ja1dlYk5vdGlmaWNhdGlvblByb3Zp
ZGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gTW9ja1dlYk5v
dGlmaWNhdGlvblByb3ZpZGVyLm1tOyBwYXRoID0gbWFjL01vY2tXZWJOb3RpZmljYXRpb25Qcm92
aWRlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzFCMDlDQzYxRTAzMzVFQjAw
NkY0RTREIC8qIHVuaXhMb2dnaW5nUGlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gdW5peExvZ2dpbmdQaXBlcy5oOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJlZC91bml4
TG9nZ2luZ1BpcGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxQjA5Q0M3MUUw
MzM1RUIwMDZGNEU0RCAvKiB1bml4TG9nZ2luZ1BpcGVzLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBuYW1lID0gdW5peExvZ2dpbmdQaXBlcy5tbTsgcGF0aCA9IC4uL1Rlc3RS
dW5uZXJTaGFyZWQvdW5peExvZ2dpbmdQaXBlcy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMzJBNzBBQUIwMzcwNUUxRjAwQzkxNzgzIC8qIER1bXBSZW5kZXJUcmVlUHJlZml4Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IER1bXBSZW5kZXJUcmVlUHJlZml4Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NUYwOTcxMERBQzNDQjYwMEM4QjRFNSAv
KiBXZWJLaXRXZWlnaHRXYXRjaGVyMTAwLnR0ZiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IG5hbWUgPSBXZWJLaXRXZWlnaHRXYXRjaGVyMTAw
LnR0ZjsgcGF0aCA9IGZvbnRzL1dlYktpdFdlaWdodFdhdGNoZXIxMDAudHRmOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzNzVGMDk3MjBEQUMzQ0I2MDBDOEI0RTUgLyogV2ViS2l0V2Vp
Z2h0V2F0Y2hlcjIwMC50dGYgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBmaWxlOyBuYW1lID0gV2ViS2l0V2VpZ2h0V2F0Y2hlcjIwMC50dGY7IHBhdGgg
PSBmb250cy9XZWJLaXRXZWlnaHRXYXRjaGVyMjAwLnR0Zjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTQ3Myw2ICs0NzYsNyBAQAogCQkwOEZCNzc5NEZFODQxNTVEQzAyQUFDMDcgLyog
RHVtcFJlbmRlclRyZWUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAorCQkJCTMxQjA5Q0M1MUUwMzM1RDAwMDZGNEU0RCAvKiBUZXN0UnVubmVyU2hhcmVkICovLAog
CQkJCTBGMThFNkYxMUQ2QjlDNjQwMDI3RTU0NyAvKiBEZXJpdmVkU291cmNlcy5tYWtlICovLAog
CQkJCTBGMThFNkU3MUQ2QjlCRjUwMDI3RTU0NyAvKiBVSVNjcmlwdENvbnRleHQgKi8sCiAJCQkJ
QTExNThENkExODkyN0NFMTAwODhDMTdCIC8qIGlvcyAqLywKQEAgLTcwMCw2ICs3MDQsMTUgQEAK
IAkJCW5hbWUgPSBMYXlvdXRUZXN0SGVscGVyOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
IAkJfTsKKwkJMzFCMDlDQzUxRTAzMzVEMDAwNkY0RTREIC8qIFRlc3RSdW5uZXJTaGFyZWQgKi8g
PSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTMxQjA5Q0M2MUUw
MzM1RUIwMDZGNEU0RCAvKiB1bml4TG9nZ2luZ1BpcGVzLmggKi8sCisJCQkJMzFCMDlDQzcxRTAz
MzVFQjAwNkY0RTREIC8qIHVuaXhMb2dnaW5nUGlwZXMubW0gKi8sCisJCQkpOworCQkJbmFtZSA9
IFRlc3RSdW5uZXJTaGFyZWQ7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk0
MTdEQTkxODEzNzM2NzREMDA3QzU3RkIgLyogV2ViQ29yZVRlc3RTdXBwb3J0ICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTExNTgsNiArMTE3MSw3IEBACiAJ
CQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCiAJCQkJNDQ2NENB
QkUxQzIwQTA4QjAwRTVCQjU1IC8qIER1bXBSZW5kZXJUcmVlQXBwTWFpbi5tbSBpbiBTb3VyY2Vz
ICovLAorCQkJCTMxQjA5Q0M4MUUwMzM1RjEwMDZGNEU0RCAvKiB1bml4TG9nZ2luZ1BpcGVzLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRl
clRyZWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5k
ZXJUcmVlLm1tCShyZXZpc2lvbiAyMDk3ODQpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
RHVtcFJlbmRlclRyZWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwMyw2ICsxMDMsNyBAQAogI2lm
IFBMQVRGT1JNKElPUykKICNpbXBvcnQgIkR1bXBSZW5kZXJUcmVlQnJvd3NlclZpZXcuaCIKICNp
bXBvcnQgIlVJS2l0U1BJLmgiCisjaW1wb3J0ICJ1bml4TG9nZ2luZ1BpcGVzLmgiCiAjaW1wb3J0
IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ29yZUdyYXBoaWNz
U1BJLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0FLV2luZG93Lmg+CkBAIC0xMjcyLDE3ICsxMjczLDcg
QEAgdm9pZCB3cml0ZUNyYXNoZWRNZXNzYWdlT25GYXRhbEVycm9yKGludAogdm9pZCBkdW1wUmVu
ZGVyVHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdKQogewogI2lmIFBMQVRGT1JNKElP
UykKLSAgICBjb25zdCBjaGFyKiBpZGVudGlmaWVyID0gZ2V0ZW52KCJJUENfSURFTlRJRklFUiIp
OwotICAgIGNvbnN0IGNoYXIgKnN0ZGluUGF0aCA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAIi90bXAvJXNfSU4iLCBpZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsKLSAgICBjb25zdCBjaGFy
ICpzdGRvdXRQYXRoID0gW1tOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiL3RtcC8lc19PVVQi
LCBpZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsKLSAgICBjb25zdCBjaGFyICpzdGRlcnJQYXRoID0g
W1tOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiL3RtcC8lc19FUlJPUiIsIGlkZW50aWZpZXJd
IFVURjhTdHJpbmddOwotCi0gICAgaW50IGluZmQgPSBvcGVuKHN0ZGluUGF0aCwgT19SRFdSKTsK
LSAgICBkdXAyKGluZmQsIFNURElOX0ZJTEVOTyk7Ci0gICAgaW50IG91dGZkID0gb3BlbihzdGRv
dXRQYXRoLCBPX1JEV1IpOwotICAgIGR1cDIob3V0ZmQsIFNURE9VVF9GSUxFTk8pOwotICAgIGlu
dCBlcnJmZCA9IG9wZW4oc3RkZXJyUGF0aCwgT19SRFdSIHwgT19OT05CTE9DSyk7Ci0gICAgZHVw
MihlcnJmZCwgU1RERVJSX0ZJTEVOTyk7CisgICAgV1RSOjpzZXR1cFVuaXhMb2dnaW5nUGlwZXMo
KTsKICNlbmRpZgogCiAgICAgc2lnbmFsKFNJR0lMTCwgJndyaXRlQ3Jhc2hlZE1lc3NhZ2VPbkZh
dGFsRXJyb3IpOwpAQCAtMTM0Myw5ICsxMzM0LDcgQEAgdm9pZCBkdW1wUmVuZGVyVHJlZShpbnQg
YXJnYywgY29uc3QgY2hhcgogICAgIH0KIAogI2lmIFBMQVRGT1JNKElPUykKLSAgICBjbG9zZShp
bmZkKTsKLSAgICBjbG9zZShvdXRmZCk7Ci0gICAgY2xvc2UoZXJyZmQpOworICAgIFdUUjo6dGVh
cmRvd25Vbml4TG9nZ2luZ1BpcGVzKCk7CiAjZW5kaWYKIH0KIApJbmRleDogVG9vbHMvTGF5b3V0
VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcJKHJldmlzaW9u
IDIwOTc4NCkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9CYXNlLnhj
Y29uZmlnCShub25leGlzdGVudCkKQEAgLTEsNjggKzAsMCBAQAotLy8gQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vCi0vLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotLy8gYXJlIG1ldDoKLS8vIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotLy8gICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS8vCi0vLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLS8v
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0vLyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLS8vIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0vLyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLS8vIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLS8vIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotLy8gUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotLy8gT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlICIuLi8uLi8uLi8uLi9JbnRlcm5hbC9Db25maWd1
cmF0aW9ucy9IYXZlSW50ZXJuYWxTREsueGNjb25maWciCi0KLVVTRV9JTlRFUk5BTF9TREsgPSAk
KFVTRV9JTlRFUk5BTF9TREtfJChDT05GSUdVUkFUSU9OKSk7Ci1VU0VfSU5URVJOQUxfU0RLX1By
b2R1Y3Rpb24gPSBZRVM7Ci1VU0VfSU5URVJOQUxfU0RLX0RlYnVnID0gJChIQVZFX0lOVEVSTkFM
X1NESyk7Ci1VU0VfSU5URVJOQUxfU0RLX1JlbGVhc2UgPSAkKEhBVkVfSU5URVJOQUxfU0RLKTsK
LQotQ0xBTkdfQ1hYX0xBTkdVQUdFX1NUQU5EQVJEID0gZ251KysweDsKLUNMQU5HX0VOQUJMRV9P
QkpDX0FSQyA9IFlFUzsKLUNMQU5HX1dBUk5fQ1hYMFhfRVhURU5TSU9OUyA9IE5POwotSEVBREVS
X1NFQVJDSF9QQVRIUyA9ICQoQlVJTFRfUFJPRFVDVFNfRElSKS91c3IvbG9jYWwvaW5jbHVkZSAk
KFdFQkNPUkVfUFJJVkFURV9IRUFERVJTX0RJUikvRm9yd2FyZGluZ0hlYWRlcnMgJChTUkNST09U
KS8uLi8uLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1ICQoTkVYVF9ST09UKS91c3IvbG9jYWwv
aW5jbHVkZS9XZWJDb3JlVGVzdFN1cHBvcnQ7Ci1HQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05T
ID0gJChERUJVR19ERUZJTkVTKSBFTkFCTEVfREFTSEJPQVJEX1NVUFBPUlQ7Ci1ERUJVR19JTkZP
Uk1BVElPTl9GT1JNQVQgPSBkd2FyZi13aXRoLWRzeW07Ci1QUkVCSU5ESU5HID0gTk8KLUdDQ19D
X0xBTkdVQUdFX1NUQU5EQVJEID0gZ251OTkKLUdDQ19FTkFCTEVfQ1BQX0VYQ0VQVElPTlMgPSBO
TzsKLUdDQ19FTkFCTEVfQ1BQX1JUVEkgPSBOTzsKLUdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFE
RVIgPSBZRVMKLUdDQ19UUkVBVF9XQVJOSU5HU19BU19FUlJPUlMgPSBZRVMKLUdDQ19WRVJTSU9O
ID0gY29tLmFwcGxlLmNvbXBpbGVycy5sbHZtLmNsYW5nLjFfMDsKLUdDQ19XQVJOX0FCT1VUX0RF
UFJFQ0FURURfRlVOQ1RJT05TID0gTk8KLUdDQ19XQVJOX1VOVVNFRF9GVU5DVElPTiA9IFlFUwot
R0NDX1dBUk5fVU5VU0VEX1ZBUklBQkxFID0gWUVTCi1HQ0NfV0FSTl82NF9UT18zMl9CSVRfQ09O
VkVSU0lPTlthcmNoPXg4Nl82NF0gPSBOTzsKLVdBUk5JTkdfQ0ZMQUdTID0gLVdhbGwgLVcgLVdu
by11bnVzZWQtcGFyYW1ldGVyIC1XdW5kZWYKLQotREVCVUdfREVGSU5FU19kZWJ1ZyA9IDsKLURF
QlVHX0RFRklORVNfbm9ybWFsID0gTkRFQlVHOwotREVCVUdfREVGSU5FUyA9ICQoREVCVUdfREVG
SU5FU18kKENVUlJFTlRfVkFSSUFOVCkpOwotCi1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpP
UiA9ICQoVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1IkKE1BQ09TWF9ERVBMT1lNRU5UX1RB
UkdFVDpzdWZmaXg6aWRlbnRpZmllcikpOwotVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1Jf
MTAgPSAxMDEwMDA7Ci1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUl8xMSA9IDEwMTEwMDsK
LVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SXzEyID0gMTAxMjAwOwotVEFSR0VUX01BQ19P
U19YX1ZFUlNJT05fTUFKT1JfMTMgPSAxMDEzMDA7Ci0KLVNES1JPT1QgPSBtYWNvc3guaW50ZXJu
YWw7Ci0KLVNVUFBPUlRFRF9QTEFURk9STVMgPSBtYWNvc3g7Ci0KLVRPT0xDSEFJTlMgPSBkZWZh
dWx0OwotCi1PVEhFUl9DRkxBR1MgPSAkKEFTQU5fT1RIRVJfQ0ZMQUdTKTsKLU9USEVSX0NQTFVT
UExVU0ZMQUdTID0gJChBU0FOX09USEVSX0NQTFVTUExVU0ZMQUdTKTsKLU9USEVSX0xERkxBR1Mg
PSAkKEFTQU5fT1RIRVJfTERGTEFHUyk7CkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29u
ZmlndXJhdGlvbnMvRGVidWdSZWxlYXNlLnhjY29uZmlnCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xh
eW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25maWcJKHJldmlz
aW9uIDIwOTc4NCkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9EZWJ1
Z1JlbGVhc2UueGNjb25maWcJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MiArMCwwIEBACi0vLyBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0vLyBhcmUgbWV0OgotLy8gMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLS8vIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0vLyAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
Ly8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotLy8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLS8vIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotLy8gUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLS8vIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
Ly8gRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotLy8gUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0vLyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0vLyBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgIkJhc2UueGNjb25maWciCi0K
LUFSQ0hTID0gJChBUkNIU19TVEFOREFSRF82NF9CSVQpOwotCi1UQVJHRVRfTUFDX09TX1hfVkVS
U0lPTl9NQUpPUiA9ICQoTUFDX09TX1hfVkVSU0lPTl9NQUpPUik7Ci0KLU1BQ09TWF9ERVBMT1lN
RU5UX1RBUkdFVCA9ICQoTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXyQoVEFSR0VUX01BQ19PU19Y
X1ZFUlNJT05fTUFKT1IpKQotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEwMTAwMCA9IDEwLjEw
OwotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEwMTEwMCA9IDEwLjExOwotTUFDT1NYX0RFUExP
WU1FTlRfVEFSR0VUXzEwMTIwMCA9IDEwLjEyOwotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEw
MTMwMCA9IDEwLjEzOwotCi1GUkFNRVdPUktfU0VBUkNIX1BBVEhTID0gJChERVZFTE9QRVJfRElS
KS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzOwotTERfUlVOUEFUSF9TRUFSQ0hfUEFUSFMgPSAk
KERFVkVMT1BFUl9ESVIpL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3M7Ci1PVEhFUl9MREZMQUdT
ID0gLWZyYW1ld29yayBDb3JlU2ltdWxhdG9yIC1mcmFtZXdvcmsgQXBwS2l0OwotCi1TREtST09U
ID0gJChTREtST09UX21hY29zeF8kKFVTRV9JTlRFUk5BTF9TREspKTsKLVNES1JPT1RfbWFjb3N4
XyA9IG1hY29zeDsKLVNES1JPT1RfbWFjb3N4X1lFUyA9IG1hY29zeC5pbnRlcm5hbDsKSW5kZXg6
IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvQ29yZVNpbXVsYXRvclNQSS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvQ29y
ZVNpbXVsYXRvclNQSS5oCShyZXZpc2lvbiAyMDk3ODQpCisrKyBUb29scy9MYXlvdXRUZXN0UmVs
YXkvTGF5b3V0VGVzdFJlbGF5L0NvcmVTaW11bGF0b3JTUEkuaAkobm9uZXhpc3RlbnQpCkBAIC0x
LDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgX19oYXNfaW5jbHVkZSg8Q29yZVNp
bXVsYXRvci9Db3JlU2ltdWxhdG9yLmg+KQotCi0vKiBGSVhNRTogUmVtb3ZlIHRoZSBiZWxvdyAj
ZGVmaW5lIG9uY2Ugd2UgcmVxdWlyZSBYY29kZSA3LjMgd2l0aCBpT1MgOS4zIFNESyBvciBuZXdl
ci4gKi8KLSNkZWZpbmUgX19jb3Jlc2ltX3VuYXZhaWxhYmxlX21zZyhtc2cpCi0jaW1wb3J0IDxD
b3JlU2ltdWxhdG9yL0NvcmVTaW11bGF0b3IuaD4KLQotLyogRklYTUU6IEFsd2F5cyB1c2UgU2lt
U2VydmljZUNvbnRleHQgb25jZSB3ZSByZXF1aXJlIFhjb2RlIDcuMyB3aXRoIGlPUyA5LjMgU0RL
IG9yIG5ld2VyLiAqLwotI2RlZmluZSBVU0VfU0lNX1NFUlZJQ0VfQ09OVEVYVCBkZWZpbmVkKENP
UkVTSU1fQVBJX01BWF9BTExPV0VEKQotCi0jZWxzZQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0Zv
dW5kYXRpb24uaD4KLQotI2RlZmluZSBVU0VfU0lNX1NFUlZJQ0VfQ09OVEVYVCAxCi0KLSNkZWZp
bmUga1NpbURldmljZUxhdW5jaEFwcGxpY2F0aW9uQXJndW1lbnRzIEAiYXJndW1lbnRzIgotI2Rl
ZmluZSBrU2ltRGV2aWNlTGF1bmNoQXBwbGljYXRpb25FbnZpcm9ubWVudCBAImVudmlyb25tZW50
IgotCi1AaW50ZXJmYWNlIFNpbURldmljZSA6IE5TT2JqZWN0Ci0tIChCT09MKWluc3RhbGxBcHBs
aWNhdGlvbjooTlNVUkwgKilpbnN0YWxsVVJMIHdpdGhPcHRpb25zOihOU0RpY3Rpb25hcnkgKilv
cHRpb25zIGVycm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci0tIChwaWRf
dClsYXVuY2hBcHBsaWNhdGlvbldpdGhJRDooTlNTdHJpbmcgKilidW5kbGVJRCBvcHRpb25zOihO
U0RpY3Rpb25hcnkgKilvcHRpb25zIGVycm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICop
ZXJyb3I7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgU2ltRGV2aWNlU2V0IDogTlNPYmplY3QKLUBwcm9w
ZXJ0eSAocmVhZG9ubHksIGNvcHkpIE5TRGljdGlvbmFyeSAqZGV2aWNlc0J5VURJRDsKLUBlbmQK
LQotQGludGVyZmFjZSBTaW1TZXJ2aWNlQ29udGV4dCA6IE5TT2JqZWN0Ci0rKFNpbVNlcnZpY2VD
b250ZXh0ICopc2hhcmVkU2VydmljZUNvbnRleHRGb3JEZXZlbG9wZXJEaXI6KE5TU3RyaW5nICop
ZGV2ZWxvcGVyRGlyIGVycm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci0t
KFNpbURldmljZVNldCAqKWRlZmF1bHREZXZpY2VTZXRXaXRoRXJyb3I6KE5TRXJyb3IgKiBfX2F1
dG9yZWxlYXNpbmcgKillcnJvcjsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRU
ZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5oCShyZXZpc2lv
biAyMDk3ODQpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlw
ZVJlbGF5LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBMVFBpcGVSZWxheV9oCi0jZGVmaW5lIExUUGlwZVJlbGF5X2gKLQotI2ltcG9ydCAiTFRS
ZWxheS5oIgotCi1AaW50ZXJmYWNlIExUUGlwZVJlbGF5IDogTlNPYmplY3QgPExUUmVsYXk+Ci1A
cHJvcGVydHkgKHdlYWspIGlkPExUUmVsYXlEZWxlZ2F0ZT4gcmVsYXlEZWxlZ2F0ZTsKLS0gKGlk
KWluaXRXaXRoUHJlZml4OihOU1N0cmluZyAqKXByZWZpeDsKLUBlbmQKLQotI2VuZGlmCkluZGV4
OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVS
ZWxheS5tCShyZXZpc2lvbiAyMDk3ODQpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0
VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0JKG5vbmV4aXN0ZW50KQpAQCAtMSwxNTggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbXBvcnQgIkxUUGlwZVJlbGF5LmgiCi0KLSNpbXBvcnQgPEZvdW5kYXRp
b24vRm91bmRhdGlvbi5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3lzL3R5
cGVzLmg+Ci0KLUBpbnRlcmZhY2UgTFRQaXBlUmVsYXkgKCkKLUBwcm9wZXJ0eSAocmVhZG9ubHks
IHN0cm9uZykgTlNTdHJpbmcgKmZpZm9QcmVmaXg7Ci1AcHJvcGVydHkgKHN0cm9uZykgTlNPdXRw
dXRTdHJlYW0gKnN0YW5kYXJkSW5wdXRQaXBlOwotQHByb3BlcnR5IChzdHJvbmcpIE5TSW5wdXRT
dHJlYW0gKnN0YW5kYXJkT3V0cHV0UGlwZTsKLUBwcm9wZXJ0eSAoc3Ryb25nKSBOU0lucHV0U3Ry
ZWFtICpzdGFuZGFyZEVycm9yUGlwZTsKLQotLSAodm9pZCljcmVhdGVGSUZPczsKLS0gKHZvaWQp
ZGVzdHJveUZJRk9zOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gTFRQaXBlUmVsYXkKLQotLSAo
TlNTdHJpbmcgKilpblBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdC
eUFwcGVuZGluZ1N0cmluZzpAIl9JTiJdOwotfQotCi0tIChOU1N0cmluZyAqKW91dFBpcGVQYXRo
Ci17Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9P
VVQiXTsKLX0KLQotLSAoTlNTdHJpbmcgKillcnJvclBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtf
Zmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9FUlJPUiJdOwotfQotCi0tIChO
U091dHB1dFN0cmVhbSAqKSBvdXRwdXRTdHJlYW0KLXsKLSAgICByZXR1cm4gX3N0YW5kYXJkSW5w
dXRQaXBlOwotfQotCi0tIChpZClpbml0V2l0aFByZWZpeDooTlNTdHJpbmcgKilwcmVmaXgKLXsK
LSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKSB7Ci0gICAgICAgIF9maWZvUHJlZml4ID0g
cHJlZml4OwotICAgICAgICBbc2VsZiBkZXN0cm95RklGT3NdOwotICAgIH0KLSAgICByZXR1cm4g
c2VsZjsKLX0KLQotLSAodm9pZClzZXR1cAotewotICAgIFtzZWxmIGRlc3Ryb3lGSUZPc107Ci0g
ICAgW3NlbGYgY3JlYXRlRklGT3NdOwotfQotCi0tICh2b2lkKXRlYXJEb3duCi17Ci0gICAgW3Nl
bGYgZGVzdHJveUZJRk9zXTsKLX0KLQotLSh2b2lkKSBjb25uZWN0Ci17Ci0gICAgX3N0YW5kYXJk
SW5wdXRQaXBlID0gW05TT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbVRvRmlsZUF0UGF0aDpbc2Vs
ZiBpblBpcGVQYXRoXSBhcHBlbmQ6WUVTXTsKLSAgICBfc3RhbmRhcmRPdXRwdXRQaXBlID0gW05T
SW5wdXRTdHJlYW0gaW5wdXRTdHJlYW1XaXRoRmlsZUF0UGF0aDpbc2VsZiBvdXRQaXBlUGF0aF1d
OwotICAgIF9zdGFuZGFyZEVycm9yUGlwZSA9IFtOU0lucHV0U3RyZWFtIGlucHV0U3RyZWFtV2l0
aEZpbGVBdFBhdGg6W3NlbGYgZXJyb3JQaXBlUGF0aF1dOwotCi0gICAgW1tzZWxmIHN0YW5kYXJk
SW5wdXRQaXBlXSBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRQ
aXBlXSBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRFcnJvclBpcGVdIHNl
dERlbGVnYXRlOnNlbGZdOwotCi0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gc2NoZWR1
bGVJblJ1bkxvb3A6W05TUnVuTG9vcCBtYWluUnVuTG9vcF0gZm9yTW9kZTpOU0RlZmF1bHRSdW5M
b29wTW9kZV07Ci0gICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JQaXBlXSBzY2hlZHVsZUluUnVuTG9v
cDpbTlNSdW5Mb29wIG1haW5SdW5Mb29wXSBmb3JNb2RlOk5TRGVmYXVsdFJ1bkxvb3BNb2RlXTsK
LQotICAgIFtbc2VsZiBzdGFuZGFyZElucHV0UGlwZV0gb3Blbl07Ci0gICAgW1tzZWxmIHN0YW5k
YXJkT3V0cHV0UGlwZV0gb3Blbl07Ci0gICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JQaXBlXSBvcGVu
XTsKLQotICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRDb25uZWN0XTsKLX0KLQotLSAodm9p
ZClkaXNjb25uZWN0Ci17Ci0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gY2xvc2VdOwot
ICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yUGlwZV0gY2xvc2VdOwotICAgIFtbc2VsZiBzdGFuZGFy
ZElucHV0UGlwZV0gY2xvc2VdOwotICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWREaXNjb25u
ZWN0XTsKLX0KLQotLSAodm9pZCljcmVhdGVGSUZPcwotewotICAgIG1rZmlmbyhbW3NlbGYgaW5Q
aXBlUGF0aF0gVVRGOFN0cmluZ10sIDA2NjYpOwotICAgIG1rZmlmbyhbW3NlbGYgb3V0UGlwZVBh
dGhdIFVURjhTdHJpbmddLCAwNjY2KTsKLSAgICBta2ZpZm8oW1tzZWxmIGVycm9yUGlwZVBhdGhd
IFVURjhTdHJpbmddLCAwNjY2KTsKLX0KLQotLSAodm9pZClkZXN0cm95RklGT3MKLXsKLSAgICB1
bmxpbmsoW1tzZWxmIGluUGlwZVBhdGhdIFVURjhTdHJpbmddKTsKLSAgICB1bmxpbmsoW1tzZWxm
IG91dFBpcGVQYXRoXSBVVEY4U3RyaW5nXSk7Ci0gICAgdW5saW5rKFtbc2VsZiBlcnJvclBpcGVQ
YXRoXSBVVEY4U3RyaW5nXSk7Ci19Ci0KLS0gKHZvaWQpIHJlbGF5U3RyZWFtOihOU0lucHV0U3Ry
ZWFtICopc3RyZWFtCi17Ci0gICAgdWludDhfdCBieXRlc1sxMDI0XTsKLSAgICBOU0ludGVnZXIg
Ynl0ZXNSZWFkID0gW3N0cmVhbSByZWFkOmJ5dGVzIG1heExlbmd0aDoxMDI0XTsKLSAgICBOU0Rh
dGEgKmRhdGEgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6Ynl0ZXMgbGVuZ3RoOmJ5dGVzUmVhZF07
Ci0KLSAgICBpZiAoc3RyZWFtID09IFtzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0pCi0gICAgICAg
IFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRSZWNlaXZlU3Rkb3V0RGF0YTpkYXRhXTsKLSAgICBl
bHNlCi0gICAgICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRSZWNlaXZlU3RkZXJyRGF0YTpk
YXRhXTsKLX0KLQotLSAodm9pZClzdHJlYW06KE5TU3RyZWFtICopYVN0cmVhbSBoYW5kbGVFdmVu
dDooTlNTdHJlYW1FdmVudClldmVudENvZGUKLXsKLSAgICBzd2l0Y2ggKGV2ZW50Q29kZSkgewot
ICAgIGNhc2UgTlNTdHJlYW1FdmVudE5vbmU6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlNT
dHJlYW1FdmVudEhhc0J5dGVzQXZhaWxhYmxlOgotICAgICAgICBbc2VsZiByZWxheVN0cmVhbToo
TlNJbnB1dFN0cmVhbSAqKWFTdHJlYW1dOwotICAgIGNhc2UgTlNTdHJlYW1FdmVudEhhc1NwYWNl
QXZhaWxhYmxlOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnRPcGVuQ29t
cGxldGVkOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnRFbmRFbmNvdW50
ZXJlZDoKLSAgICAgICAgW1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZENyYXNoV2l0aE1lc3NhZ2U6
bmlsXTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOU1N0cmVhbUV2ZW50RXJyb3JPY2N1cnJl
ZDoKLSAgICAgICAgW1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZENyYXNoV2l0aE1lc3NhZ2U6W1th
U3RyZWFtIHN0cmVhbUVycm9yXSBkZXNjcmlwdGlvbl1dOwotICAgICAgICBicmVhazsKLSAgICB9
Ci19Ci0KLUBlbmQKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkv
TFRSZWxheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0
UmVsYXkvTFRSZWxheS5oCShyZXZpc2lvbiAyMDk3ODQpCisrKyBUb29scy9MYXlvdXRUZXN0UmVs
YXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXkuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQ4ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIExUUmVsYXlfaAotI2RlZmluZSBMVFJlbGF5X2gKLQot
I2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLUBwcm90b2NvbCBMVFJlbGF5RGVs
ZWdhdGUgPE5TT2JqZWN0PgotLSAodm9pZClkaWRDb25uZWN0OwotLSAodm9pZClkaWREaXNjb25u
ZWN0OwotLSAodm9pZClkaWRDcmFzaFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2U7Ci0t
ICh2b2lkKWRpZFJlY2VpdmVTdGRvdXREYXRhOihOU0RhdGEgKilkYXRhOwotLSAodm9pZClkaWRS
ZWNlaXZlU3RkZXJyRGF0YTooTlNEYXRhICopZGF0YTsKLUBlbmQKLQotQHByb3RvY29sIExUUmVs
YXkgPE5TT2JqZWN0LCBOU1N0cmVhbURlbGVnYXRlPgotLSAodm9pZClzZXR1cDsKLS0gKHZvaWQp
dGVhckRvd247Ci0tICh2b2lkKWNvbm5lY3Q7Ci0tICh2b2lkKWRpc2Nvbm5lY3Q7Ci1AcHJvcGVy
dHkgKHdlYWspIGlkPExUUmVsYXlEZWxlZ2F0ZT4gcmVsYXlEZWxlZ2F0ZTsKLUBwcm9wZXJ0eSAo
cmVhZG9ubHksIHN0cm9uZykgTlNPdXRwdXRTdHJlYW0gKm91dHB1dFN0cmVhbTsKLUBlbmQKLQot
I2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVs
YXlDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91
dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAyMDk3ODQpCisrKyBUb29s
cy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLmgJKG5v
bmV4aXN0ZW50KQpAQCAtMSw0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgTFRSZWxheUNv
bnRyb2xsZXJfaAotI2RlZmluZSBMVFJlbGF5Q29udHJvbGxlcl9oCi0KLSNpbXBvcnQgIkxUUmVs
YXkuaCIKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLUBjbGFzcyBTaW1E
ZXZpY2U7Ci0KLUBpbnRlcmZhY2UgTFRSZWxheUNvbnRyb2xsZXIgOiBOU09iamVjdCA8TFRSZWxh
eURlbGVnYXRlPgotLSAoaWQpaW5pdFdpdGhEZXZpY2U6KFNpbURldmljZSAqKWRldmljZSBwcm9k
dWN0RGlyOihOU1N0cmluZyAqKXByb2R1Y3REaXIgYXBwUGF0aDooTlNTdHJpbmcgKilhcHBQYXRo
IGRldmljZVVESUQ6KE5TVVVJRCAqKXVkaWQgZHVtcFRvb2xBcmd1bWVudHM6KE5TQXJyYXkgKilh
cmd1bWVudHM7Ci0tICh2b2lkKXN0YXJ0OwotLSAodm9pZClmaW5pc2g7Ci1AZW5kCi0KLSNlbmRp
ZgpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29u
dHJvbGxlci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0
UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIubQkocmV2aXNpb24gMjA5Nzg0KQorKysgVG9vbHMvTGF5
b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5tCShub25leGlz
dGVudCkKQEAgLTEsMjcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJMVFJlbGF5Q29u
dHJvbGxlci5oIgotCi0jaW1wb3J0ICJDb3JlU2ltdWxhdG9yU1BJLmgiCi0jaW1wb3J0ICJMVFBp
cGVSZWxheS5oIgotI2ltcG9ydCA8QXBwS2l0L0FwcEtpdC5oPgotI2ltcG9ydCA8Y3J0X2V4dGVy
bnMuaD4KLQotQGludGVyZmFjZSBMVFJlbGF5Q29udHJvbGxlciAoKQotQHByb3BlcnR5IChyZWFk
b25seSwgc3Ryb25nKSBkaXNwYXRjaF9zb3VyY2VfdCBzdGFuZGFyZElucHV0RGlzcGF0Y2hTb3Vy
Y2U7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TRmlsZUhhbmRsZSAqc3RhbmRhcmRP
dXRwdXQ7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TRmlsZUhhbmRsZSAqc3RhbmRh
cmRFcnJvcjsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKmlwY0lkZW50
aWZpZXI7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TU3RyaW5nICphcHBCdW5kbGVJ
ZGVudGlmaWVyOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU1N0cmluZyAqYXBwUGF0
aDsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNVVUlEICpkZXZpY2VVRElEOwotQHBy
b3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU0FycmF5ICpkdW1wVG9vbEFyZ3VtZW50czsKLUBw
cm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKnByb2R1Y3REaXI7Ci1AcHJvcGVy
dHkgKHN0cm9uZykgU2ltRGV2aWNlICpkZXZpY2U7Ci1AcHJvcGVydHkgKHN0cm9uZykgaWQ8TFRS
ZWxheT4gcmVsYXk7Ci1AcHJvcGVydHkgcGlkX3QgcGlkOwotQHByb3BlcnR5IChzdHJvbmcpIGRp
c3BhdGNoX3NvdXJjZV90IGFwcERpc3BhdGNoU291cmNlOwotQGVuZAotCi1AaW1wbGVtZW50YXRp
b24gTFRSZWxheUNvbnRyb2xsZXIKLQotLSAoaWQpaW5pdFdpdGhEZXZpY2U6KFNpbURldmljZSAq
KWRldmljZSBwcm9kdWN0RGlyOihOU1N0cmluZyAqKXByb2R1Y3REaXIgYXBwUGF0aDooTlNTdHJp
bmcgKilhcHBQYXRoIGRldmljZVVESUQ6KE5TVVVJRCAqKXVkaWQgZHVtcFRvb2xBcmd1bWVudHM6
KE5TQXJyYXkgKilhcmd1bWVudHMKLXsKLSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKSB7
Ci0gICAgICAgIF9kZXZpY2UgPSBkZXZpY2U7Ci0gICAgICAgIF9wcm9kdWN0RGlyID0gcHJvZHVj
dERpcjsKLSAgICAgICAgX2FwcFBhdGggPSBhcHBQYXRoOwotICAgICAgICBfYXBwQnVuZGxlSWRl
bnRpZmllciA9IFtbTlNCdW5kbGUgYnVuZGxlV2l0aFBhdGg6YXBwUGF0aF0gYnVuZGxlSWRlbnRp
Zmllcl07Ci0gICAgICAgIF9kZXZpY2VVRElEID0gdWRpZDsKLSAgICAgICAgX2R1bXBUb29sQXJn
dW1lbnRzID0gYXJndW1lbnRzOwotICAgICAgICBfc3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNl
ID0gZGlzcGF0Y2hfc291cmNlX2NyZWF0ZShESVNQQVRDSF9TT1VSQ0VfVFlQRV9SRUFELCBTVERJ
Tl9GSUxFTk8sIDAsIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCkpOwotICAgICAgICBfc3RhbmRh
cmRPdXRwdXQgPSBbTlNGaWxlSGFuZGxlIGZpbGVIYW5kbGVXaXRoU3RhbmRhcmRPdXRwdXRdOwot
ICAgICAgICBfc3RhbmRhcmRFcnJvciA9IFtOU0ZpbGVIYW5kbGUgZmlsZUhhbmRsZVdpdGhTdGFu
ZGFyZEVycm9yXTsKLQotICAgICAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2V2ZW50X2hhbmRsZXIo
X3N0YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJjZSwgXnsKLSAgICAgICAgICAgIHVpbnQ4X3QgYnVm
ZmVyWzEwMjRdOwotICAgICAgICAgICAgc3NpemVfdCBsZW4gPSByZWFkKFNURElOX0ZJTEVOTywg
YnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7Ci0gICAgICAgICAgICBpZiAobGVuID4gMCkgewotICAg
ICAgICAgICAgICAgIEB0cnkgewotICAgICAgICAgICAgICAgICAgICBbW1tzZWxmIHJlbGF5XSBv
dXRwdXRTdHJlYW1dIHdyaXRlOmJ1ZmZlciBtYXhMZW5ndGg6bGVuXTsKLSAgICAgICAgICAgICAg
ICB9IEBjYXRjaCAoTlNFeGNlcHRpb24gKmUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQnJv
a2VuIHBpcGUgLSB0aGUgZHVtcCB0b29sIGNyYXNoZWQuIFRpbWUgdG8gZGllLgotICAgICAgICAg
ICAgICAgICAgICBbc2VsZiBkaWRDcmFzaFdpdGhNZXNzYWdlOm5pbF07Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBFT0YgUmVjZWl2
ZWQgb24gdGhlIHJlbGF5J3Mgc3RhbmRhcmQgaW5wdXQuCi0gICAgICAgICAgICAgICAgW3NlbGYg
ZmluaXNoXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgX3JlbGF5ID0g
W1tMVFBpcGVSZWxheSBhbGxvY10gaW5pdFdpdGhQcmVmaXg6W0AiL3RtcCIgc3RyaW5nQnlBcHBl
bmRpbmdQYXRoQ29tcG9uZW50OnNlbGYuaXBjSWRlbnRpZmllcl1dOwotICAgICAgICBbX3JlbGF5
IHNldFJlbGF5RGVsZWdhdGU6c2VsZl07Ci0gICAgfQotICAgIHJldHVybiBzZWxmOwotfQotCi0t
IChOU1N0cmluZyAqKWlwY0lkZW50aWZpZXIKLXsKLSAgICByZXR1cm4gW05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6QCIlQC0lQCIsIHNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciwgc2VsZi5kZXZp
Y2VVRElELlVVSURTdHJpbmddOwotfQotCi0tIChOU1N0cmluZyAqKXByb2Nlc3NOYW1lCi17Ci0g
ICAgcmV0dXJuIFtzZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIgY29tcG9uZW50c1NlcGFyYXRlZEJ5
U3RyaW5nOkAiLiJdLmxhc3RPYmplY3Q7Ci19Ci0KLS0gKHZvaWQpZGlkUmVjZWl2ZVN0ZG91dERh
dGE6KE5TRGF0YSAqKWRhdGEKLXsKLSAgICBAdHJ5IHsKLSAgICAgICAgW1tzZWxmIHN0YW5kYXJk
T3V0cHV0XSB3cml0ZURhdGE6ZGF0YV07Ci0gICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNl
cHRpb24pIHsKLSAgICAgICAgLy8gTlNGaWxlSGFuZGxlT3BlcmF0aW9uRXhjZXB0aW9uCi0gICAg
ICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhlIHRlc3QgaGFybmVzcyBzdG9wcGVkIGxpc3RlbmluZyB0
byB1cywKLSAgICAgICAgLy8gcHJvYmFibHkgYmVjYXVzZSB3ZSB0aW1lZCBvdXQgb3IgYSBydW4g
d2FzIGNhbmNlbGVkLgotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotfQotCi0t
ICh2b2lkKWRpZFJlY2VpdmVTdGRlcnJEYXRhOihOU0RhdGEgKilkYXRhCi17Ci0gICAgQHRyeSB7
Ci0gICAgICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSB3cml0ZURhdGE6ZGF0YV07Ci0gICAgfSBA
Y2F0Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRpb24pIHsKLSAgICAgICAgLy8gTlNGaWxlSGFuZGxl
T3BlcmF0aW9uRXhjZXB0aW9uCi0gICAgICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhlIHRlc3QgaGFy
bmVzcyBzdG9wcGVkIGxpc3RlbmluZyB0byB1cywKLSAgICAgICAgLy8gcHJvYmFibHkgYmVjYXVz
ZSB3ZSB0aW1lZCBvdXQgb3IgYSBydW4gd2FzIGNhbmNlbGVkLgotICAgICAgICBleGl0KEVYSVRf
RkFJTFVSRSk7Ci0gICAgfQotfQotCi0tICh2b2lkKWRpZERpc2Nvbm5lY3QKLXsKLSAgICBkaXNw
YXRjaF9zdXNwZW5kKFtzZWxmIHN0YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJjZV0pOwotfQotCi0t
ICh2b2lkKWRpZENvbm5lY3QKLXsKLSAgICBkaXNwYXRjaF9yZXN1bWUoW3NlbGYgc3RhbmRhcmRJ
bnB1dERpc3BhdGNoU291cmNlXSk7Ci19Ci0KLS0gKHZvaWQpZGlkQ3Jhc2hXaXRoTWVzc2FnZToo
TlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgW1tzZWxmIHJlbGF5XSBkaXNjb25uZWN0XTsKLSAg
ICBOU1N0cmluZyAqY3Jhc2hNZXNzYWdlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJc
biNDUkFTSEVEIC0gJUAgKHBpZCAlZClcbiIsIFtzZWxmIHByb2Nlc3NOYW1lXSwgW3NlbGYgcGlk
XV07Ci0KLSAgICBpZiAobWVzc2FnZSkKLSAgICAgICAgY3Jhc2hNZXNzYWdlID0gW2NyYXNoTWVz
c2FnZSBzdHJpbmdCeUFwcGVuZGluZ0Zvcm1hdDpAIiVAXG4iLCBtZXNzYWdlXTsKLQotICAgIFtb
c2VsZiBzdGFuZGFyZEVycm9yXSB3cml0ZURhdGE6W2NyYXNoTWVzc2FnZSBkYXRhVXNpbmdFbmNv
ZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ11dOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSBj
bG9zZUZpbGVdOwotICAgIFtbc2VsZiBzdGFuZGFyZE91dHB1dF0gY2xvc2VGaWxlXTsKLSAgICBl
eGl0KEVYSVRfRkFJTFVSRSk7Ci19Ci0KLS0gKHZvaWQpaW5zdGFsbEFwcAotewotICAgIE5TRGlj
dGlvbmFyeSAqaW5zdGFsbE9wdGlvbnMgPSBAewotICAgICAgICAoTlNTdHJpbmcgKilrQ0ZCdW5k
bGVJZGVudGlmaWVyS2V5OiBzZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIsCi0gICAgfTsKLQotICAg
IE5TRXJyb3IgKmVycm9yID0gbmlsOwotICAgIEJPT0wgaW5zdGFsbGVkID0gW3NlbGYuZGV2aWNl
IGluc3RhbGxBcHBsaWNhdGlvbjpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnNlbGYuYXBwUGF0aF0g
d2l0aE9wdGlvbnM6aW5zdGFsbE9wdGlvbnMgZXJyb3I6JmVycm9yXTsKLSAgICBpZiAoIWluc3Rh
bGxlZCkgewotICAgICAgICBOU0xvZyhAIkNvdWxkbid0IGluc3RhbGwgJUA6ICVAIiwgc2VsZi5h
cHBQYXRoLCBlcnJvci5kZXNjcmlwdGlvbik7Ci0gICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsK
LSAgICB9Ci19Ci0KLS0gKHZvaWQpa2lsbEFwcAotewotICAgIGRpc3BhdGNoX3NvdXJjZV90IGRp
c3BhdGNoID0gW3NlbGYgYXBwRGlzcGF0Y2hTb3VyY2VdOwotCi0gICAgaWYgKGRpc3BhdGNoKQot
ICAgICAgICBkaXNwYXRjaF9zb3VyY2VfY2FuY2VsKGRpc3BhdGNoKTsKLQotICAgIGlmIChbc2Vs
ZiBwaWRdID4gMSkgewotICAgICAgICBraWxsKHNlbGYucGlkLCBTSUdLSUxMKTsKLSAgICAgICAg
W3NlbGYgc2V0UGlkOi0xXTsKLSAgICB9Ci0gICAgW3NlbGYgc2V0QXBwRGlzcGF0Y2hTb3VyY2U6
bmlsXTsKLX0KLQotLSAoTlNEaWN0aW9uYXJ5ICopX2Vudmlyb25tZW50VmFyaWFibGVzCi17Ci0g
ICAgc3RhdGljIE5TRGljdGlvbmFyeSAqZW52aXJvbm1lbnRWYXJpYWJsZXM7Ci0gICAgc3RhdGlj
IGRpc3BhdGNoX29uY2VfdCBvbmNlOwotCi0gICAgZGlzcGF0Y2hfb25jZSgmb25jZSwgXnsKLSAg
ICAgICAgTlNTdHJpbmcgKnByb2R1Y3REaXJlY3RvcnkgPSBbc2VsZiBwcm9kdWN0RGlyXTsKLQot
ICAgICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gW0B7Ci0gICAgICAgICAg
ICBAIklQQ19JREVOVElGSUVSIjogc2VsZi5pcGNJZGVudGlmaWVyLAotICAgICAgICAgICAgQCJE
WUxEX0ZSQU1FV09SS19QQVRIIjogcHJvZHVjdERpcmVjdG9yeSwKLSAgICAgICAgICAgIEAiX19Y
UENfRFlMRF9GUkFNRVdPUktfUEFUSCI6IHByb2R1Y3REaXJlY3RvcnksCi0gICAgICAgICAgICBA
IkRZTERfTElCUkFSWV9QQVRIIjogcHJvZHVjdERpcmVjdG9yeSwKLSAgICAgICAgICAgIEAiX19Y
UENfRFlMRF9MSUJSQVJZX1BBVEgiOiBwcm9kdWN0RGlyZWN0b3J5LAotICAgICAgICB9IG11dGFi
bGVDb3B5XTsKLQotICAgICAgICBmb3IgKE5TU3RyaW5nICprZXlOYW1lIGluIEBbQCJEWUxEX0lO
U0VSVF9MSUJSQVJJRVMiLCBAIk1hbGxvY1N0YWNrTG9nZ2luZyIsIEAiTE9DQUxfUkVTT1VSQ0Vf
Uk9PVCIsIEAiRFVNUFJFTkRFUlRSRUVfVEVNUCJdKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFy
KiB2YWx1ZSA9IGdldGVudihba2V5TmFtZSBVVEY4U3RyaW5nXSk7Ci0gICAgICAgICAgICBpZiAo
dmFsdWUgJiYgc3RybGVuKHZhbHVlKSkgewotICAgICAgICAgICAgICAgIE5TU3RyaW5nICpuc1Zh
bHVlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnZhbHVlXTsKLSAgICAgICAgICAg
ICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6bnNWYWx1ZSBmb3JLZXk6a2V5TmFtZV07Ci0gICAg
ICAgICAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0Om5zVmFsdWUgZm9yS2V5OltAIl9fWFBD
XyIgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6a2V5TmFtZV1dOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgZm9yIChjaGFyKiogZW52cCA9ICpfTlNHZXRFbnZpcm9uKCk7ICpl
bnZwOyBlbnZwKyspIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVudiA9ICplbnZwOwotICAg
ICAgICAgICAgaWYgKCFzdHJuY21wKCJKU0NfIiwgZW52LCA0KSB8fCAhc3RybmNtcCgiX19YUENf
SlNDXyIsIGVudiwgMTApKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXF1YWwgPSBz
dHJjaHIoZW52LCAnPScpOwotICAgICAgICAgICAgICAgIGlmICghZXF1YWwpIHsKLSAgICAgICAg
ICAgICAgICAgICAgTlNMb2coQCJNaXNzaW5nICc9JyBpbiBlbnYgdmFyICclcyciLCBlbnYpOwot
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heEtleUxlbmd0aCA9IDI1NjsKLSAgICAg
ICAgICAgICAgICBzaXplX3Qga2V5TGVuZ3RoID0gZXF1YWwgLSBlbnY7Ci0gICAgICAgICAgICAg
ICAgaWYgKGtleUxlbmd0aCA+PSBtYXhLZXlMZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAg
TlNMb2coQCJFbnYgdmFyICclcycgaXMgdG9vIGxvbmciLCBlbnYpOwotICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjaGFy
IGtleVttYXhLZXlMZW5ndGhdOwotICAgICAgICAgICAgICAgIHN0cm5jcHkoa2V5LCBlbnYsIGtl
eUxlbmd0aCk7Ci0gICAgICAgICAgICAgICAga2V5W2tleUxlbmd0aF0gPSAnXDAnOwotICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIHZhbHVlID0gZXF1YWwgKyAxOwotCi0gICAgICAgICAgICAg
ICAgTlNTdHJpbmcgKm5zS2V5ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmtleV07
Ci0gICAgICAgICAgICAgICAgTlNTdHJpbmcgKm5zVmFsdWUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0
aFVURjhTdHJpbmc6dmFsdWVdOwotICAgICAgICAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVj
dDpuc1ZhbHVlIGZvcktleTpuc0tleV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBlbnZpcm9ubWVudFZhcmlhYmxlcyA9IFtkaWN0aW9uYXJ5IGNvcHldOwotICAgIH0pOwot
Ci0gICAgcmV0dXJuIGVudmlyb25tZW50VmFyaWFibGVzOwotfQotCi0tICh2b2lkKWxhdW5jaEFw
cAotewotICAgIE5TRGljdGlvbmFyeSAqbGF1bmNoT3B0aW9ucyA9IEB7Ci0gICAgICAgIGtTaW1E
ZXZpY2VMYXVuY2hBcHBsaWNhdGlvbkVudmlyb25tZW50OiBbc2VsZiBfZW52aXJvbm1lbnRWYXJp
YWJsZXNdLAotICAgICAgICBrU2ltRGV2aWNlTGF1bmNoQXBwbGljYXRpb25Bcmd1bWVudHM6IFtz
ZWxmIGR1bXBUb29sQXJndW1lbnRzXSwKLSAgICB9OwotCi0gICAgTlNFcnJvciAqZXJyb3I7Ci0g
ICAgcGlkX3QgcGlkID0gW3NlbGYuZGV2aWNlIGxhdW5jaEFwcGxpY2F0aW9uV2l0aElEOnNlbGYu
YXBwQnVuZGxlSWRlbnRpZmllciBvcHRpb25zOmxhdW5jaE9wdGlvbnMgZXJyb3I6JmVycm9yXTsK
LQotICAgIGlmIChwaWQgPCAwKSB7Ci0gICAgICAgIE5TTG9nKEAiQ291bGRuJ3QgbGF1bmNoICVA
OiAlQCIsIHNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciwgZXJyb3IuZGVzY3JpcHRpb24pOwotICAg
ICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotCi0gICAgW3NlbGYgc2V0UGlkOnBpZF07
Ci0KLSAgICBkaXNwYXRjaF9xdWV1ZV90IHF1ZXVlID0gZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUo
KTsKLSAgICBkaXNwYXRjaF9zb3VyY2VfdCBzaW11bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3VyY2Ug
PSBkaXNwYXRjaF9zb3VyY2VfY3JlYXRlKERJU1BBVENIX1NPVVJDRV9UWVBFX1BST0MsIFtzZWxm
IHBpZF0sIERJU1BBVENIX1BST0NfRVhJVCwgcXVldWUpOwotICAgIFtzZWxmIHNldEFwcERpc3Bh
dGNoU291cmNlOnNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZV07Ci0gICAgZGlzcGF0Y2hf
c291cmNlX3NldF9ldmVudF9oYW5kbGVyKHNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSwg
XnsKLSAgICAgICAgZGlzcGF0Y2hfc291cmNlX2NhbmNlbChzaW11bGF0b3JBcHBFeGl0RGlzcGF0
Y2hTb3VyY2UpOwotICAgICAgICBbc2VsZiBkaWRDcmFzaFdpdGhNZXNzYWdlOm5pbF07Ci0gICAg
fSk7Ci0gICAgZGlzcGF0Y2hfcmVzdW1lKHNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSk7
Ci19Ci0KLS0gKHZvaWQpc3RhcnQKLXsKLSAgICBbc2VsZiBpbnN0YWxsQXBwXTsKLSAgICBbW3Nl
bGYgcmVsYXldIHNldHVwXTsKLSAgICBbc2VsZiBsYXVuY2hBcHBdOwotICAgIFtbc2VsZiByZWxh
eV0gY29ubmVjdF07Ci19Ci0KLS0gKHZvaWQpZmluaXNoCi17Ci0gICAgW1tzZWxmIHJlbGF5XSBk
aXNjb25uZWN0XTsKLSAgICBbc2VsZiBraWxsQXBwXTsKLSAgICBleGl0KEVYSVRfU1VDQ0VTUyk7
Ci19Ci0KLUBlbmQKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkv
bWFpbi5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVs
YXkvbWFpbi5tCShyZXZpc2lvbiAyMDk3ODQpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5
b3V0VGVzdFJlbGF5L21haW4ubQkobm9uZXhpc3RlbnQpCkBAIC0xLDEzMyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiQ29yZVNpbXVsYXRvclNQSS5oIgotI2ltcG9ydCAiTFRS
ZWxheUNvbnRyb2xsZXIuaCIKLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi1z
dGF0aWMgTFRSZWxheUNvbnRyb2xsZXIgKnJlbGF5Q29udHJvbGxlcjsKLQotdm9pZCB1c2FnZSgp
Ci17Ci0gICAgTlNTdHJpbmcgKmhlbHBUZXh0ID0gQCJMYXlvdXRUZXN0UmVsYXk6IHJ1biBhIGR1
bXAgdG9vbCBpbiB0aGUgc2ltdWxhdG9yLiBOb3QgZm9yIGRpcmVjdCBjb25zdW1wdGlvbi5cbiIK
LSAgICAgICAgIlVzYWdlOiBMYXlvdXRUZXN0UmVsYXkgWy1oXSBbb3B0aW9uc10gLS0gW2R1bXAg
dG9vbCBhcmd1bWVudHNdXG4iCi0gICAgICAgICJSZXF1aXJlZCBvcHRpb25zOlxuIgotICAgICAg
ICAiICAgIC11ZGlkIDxpZGVudGlmaWVyPiAgICAgICBTaW11bGF0b3IgZGV2aWNlIGlkZW50aWZp
ZXJcbiIKLSAgICAgICAgIiAgICAtYXBwIDxhcHBfcGF0aD4gICAgICAgICAgUGF0aCB0byB0aGUg
YnVpbHQgaU9TIC5hcHAgYnVuZGxlIGRpcmVjdG9yeS5cbiIKLSAgICAgICAgIiAgICAtcHJvZHVj
dERpciA8ZGlyPiAgICAgICAgL3BhdGgvdG8vV2ViS2l0QnVpbGQve2NvbmZpZ3VyYXRpb259LXtz
aG9ydCBwbGF0Zm9ybX0uXG4iOwotCi0gICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgW2hlbHBU
ZXh0IFVURjhTdHJpbmddKTsKLX0KLQotTlNTdHJpbmcgKmdldFJlcXVpcmVkU3RyaW5nQXJndW1l
bnQoTlNTdHJpbmcgKnBhcmFtZXRlcikKLXsKLSAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMg
PSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdOwotICAgIE5TU3RyaW5nICph
cmd1bWVudCA9IFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6cGFyYW1ldGVyXTsKLQotICAgIGlmICgh
YXJndW1lbnQpIHsKLSAgICAgICAgTlNMb2coQCItJUAgaXMgcmVxdWlyZWQuIiwgcGFyYW1ldGVy
KTsKLSAgICAgICAgdXNhZ2UoKTsKLSAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0K
LSAgICByZXR1cm4gYXJndW1lbnQ7Ci19Ci0KLU5TQXJyYXkgKmdldER1bXBUb29sQXJndW1lbnRz
KCkKLXsKLSAgICBOU011dGFibGVBcnJheSAqZHVtcFRvb2xBcmd1bWVudHMgPSBbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0XTsKLSAgICBOU0FycmF5ICpwcm9jZXNzQXJncyA9IFtbTlNQcm9j
ZXNzSW5mbyBwcm9jZXNzSW5mb10gYXJndW1lbnRzXTsKLSAgICBCT09MIGFwcGVuZGluZyA9IE5P
OwotICAgIGZvciAoTlNTdHJpbmcgKmFyZyBpbiBwcm9jZXNzQXJncykgewotICAgICAgICBpZiAo
W2FyZyBpc0VxdWFsVG9TdHJpbmc6QCItLSJdKSB7Ci0gICAgICAgICAgICBhcHBlbmRpbmcgPSBZ
RVM7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoYXBwZW5k
aW5nKQotICAgICAgICAgICAgW2R1bXBUb29sQXJndW1lbnRzIGFkZE9iamVjdDphcmddOwotICAg
IH0KLSAgICByZXR1cm4gZHVtcFRvb2xBcmd1bWVudHM7Ci19Ci0KLXZvaWQgZmluaXNoKCkKLXsK
LSAgICBbcmVsYXlDb250cm9sbGVyIGZpbmlzaF07Ci19Ci0KLXZvaWQgcmVjZWl2ZWRTaWduYWwo
aW50IHNpZ25hbCkKLXsKLSAgICBleGl0KEVYSVRfU1VDQ0VTUyk7Ci19Ci0KLWludCBtYWluKGlu
dCBhcmdjLCBjb25zdCBjaGFyICogYXJndltdKQotewotICAgIEBhdXRvcmVsZWFzZXBvb2wgewot
ICAgICAgICBOU0FycmF5ICpoZWxwQXJndW1lbnRzID0gQFtAIi1oIiwgQCItLWhlbHAiXTsKLSAg
ICAgICAgZm9yIChOU1N0cmluZyAqaGVscEFyZ3VtZW50IGluIGhlbHBBcmd1bWVudHMpIHsKLSAg
ICAgICAgICAgIGlmIChbW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBhcmd1bWVudHNdIGlu
ZGV4T2ZPYmplY3Q6aGVscEFyZ3VtZW50XSAhPSBOU05vdEZvdW5kKSB7Ci0gICAgICAgICAgICAg
ICAgdXNhZ2UoKTsKLSAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotI2lmIFVTRV9TSU1fU0VSVklDRV9DT05URVhUCi0gICAgICAg
IE5TU3RyaW5nICpkZXZlbG9wZXJEaXJlY3RvcnkgPSBnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50
KEAiZGV2ZWxvcGVyRGlyIik7Ci0jZW5kaWYKLSAgICAgICAgTlNVVUlEICp1ZGlkID0gW1tOU1VV
SUQgYWxsb2NdIGluaXRXaXRoVVVJRFN0cmluZzpnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAi
dWRpZCIpXTsKLSAgICAgICAgTlNTdHJpbmcgKmFwcFBhdGggPSBnZXRSZXF1aXJlZFN0cmluZ0Fy
Z3VtZW50KEAiYXBwIik7Ci0gICAgICAgIE5TU3RyaW5nICpwcm9kdWN0RGlyZWN0b3J5ID0gZ2V0
UmVxdWlyZWRTdHJpbmdBcmd1bWVudChAInByb2R1Y3REaXIiKTsKLSAgICAgICAgTlNBcnJheSAq
ZHVtcFRvb2xBcmd1bWVudHMgPSBnZXREdW1wVG9vbEFyZ3VtZW50cygpOwotCi0jaWYgVVNFX1NJ
TV9TRVJWSUNFX0NPTlRFWFQKLSAgICAgICAgTlNFcnJvciAqZXJyb3I7Ci0gICAgICAgIFNpbVNl
cnZpY2VDb250ZXh0ICpzZXJ2aWNlQ29udGV4dCA9IFtTaW1TZXJ2aWNlQ29udGV4dCBzaGFyZWRT
ZXJ2aWNlQ29udGV4dEZvckRldmVsb3BlckRpcjpkZXZlbG9wZXJEaXJlY3RvcnkgZXJyb3I6JmVy
cm9yXTsKLSAgICAgICAgaWYgKCFzZXJ2aWNlQ29udGV4dCkgewotICAgICAgICAgICAgTlNMb2co
QCJEZXZpY2UgY29udGV4dCBjb3VsZG4ndCBiZSBmb3VuZDogJUAiLCBlcnJvcik7Ci0gICAgICAg
ICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgIH0KLSAgICAgICAgU2ltRGV2aWNlU2V0
ICpkZXZpY2VTZXQgPSBbc2VydmljZUNvbnRleHQgZGVmYXVsdERldmljZVNldFdpdGhFcnJvcjpu
aWxdOwotICAgICAgICBpZiAoIWRldmljZVNldCkgewotICAgICAgICAgICAgTlNMb2coQCJEZWZh
dWx0IGRldmljZSBzZXQgY291bGRuJ3QgYmUgZm91bmQ6ICVAIiwgZXJyb3IpOwotICAgICAgICAg
ICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0gICAgICAgIFNpbURldmljZSAqZGV2
aWNlID0gW2RldmljZVNldC5kZXZpY2VzQnlVRElEIG9iamVjdEZvcktleTp1ZGlkXTsKLSNlbHNl
Ci0gICAgICAgIFNpbURldmljZSAqZGV2aWNlID0gW1NpbURldmljZVNldC5kZWZhdWx0U2V0LmRl
dmljZXNCeVVESUQgb2JqZWN0Rm9yS2V5OnVkaWRdOwotI2VuZGlmCi0gICAgICAgIGlmICghZGV2
aWNlKSB7Ci0gICAgICAgICAgICBOU0xvZyhAIkRldmljZSAlQCBjb3VsZG4ndCBiZSBmb3VuZCIs
IHVkaWQpOwotICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmVsYXlDb250cm9sbGVyID0gW1tMVFJlbGF5Q29udHJvbGxlciBhbGxvY10gaW5pdFdp
dGhEZXZpY2U6ZGV2aWNlIHByb2R1Y3REaXI6cHJvZHVjdERpcmVjdG9yeSBhcHBQYXRoOmFwcFBh
dGggZGV2aWNlVURJRDp1ZGlkIGR1bXBUb29sQXJndW1lbnRzOmR1bXBUb29sQXJndW1lbnRzXTsK
LSAgICAgICAgW3JlbGF5Q29udHJvbGxlciBzdGFydF07Ci0KLSAgICAgICAgYXRleGl0KGZpbmlz
aCk7Ci0gICAgICAgIHNpZ25hbChTSUdJTlQsIHJlY2VpdmVkU2lnbmFsKTsKLSAgICAgICAgc2ln
bmFsKFNJR1RFUk0sIHJlY2VpdmVkU2lnbmFsKTsKLQotICAgICAgICBbW05TUnVuTG9vcCBtYWlu
UnVuTG9vcF0gcnVuXTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19CkluZGV4OiBUb29scy9MYXlv
dXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDk3ODQpCisrKyBUb29scy9MYXlvdXRUZXN0
UmVsYXkvTGF5b3V0VGVzdFJlbGF5Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKG5vbmV4aXN0
ZW50KQpAQCAtMSwyMDIgKzAsMCBAQAotLy8gISQqVVRGOCokIQotewotCWFyY2hpdmVWZXJzaW9u
ID0gMTsKLQljbGFzc2VzID0gewotCX07Ci0Jb2JqZWN0VmVyc2lvbiA9IDQ2OwotCW9iamVjdHMg
PSB7Ci0KLS8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCi0JCTJFOEQzRUY4MTk4ODFE
NDMwMDRGNkNDMiAvKiBtYWluLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRThEM0VGNzE5ODgxRDQzMDA0RjZDQzIgLyogbWFpbi5tICovOyB9OwotCQky
RThEM0YwMjE5ODgxRkQwMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkubSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOEQzRjAxMTk4ODFGRDAwMDRGNkNDMiAv
KiBMVFBpcGVSZWxheS5tICovOyB9OwotCQkyRThEM0YwNjE5ODgyNDA2MDA0RjZDQzIgLyogTFRS
ZWxheUNvbnRyb2xsZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJFOEQzRjA1MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5tICov
OyB9OwotLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWENvcHlG
aWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCQkyRThEM0VGMjE5ODgxRDQzMDA0RjZDQzIgLyog
Q29weUZpbGVzICovID0gewotCQkJaXNhID0gUEJYQ29weUZpbGVzQnVpbGRQaGFzZTsKLQkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlkc3RQYXRoID0gL3Vzci9zaGFyZS9tYW4v
bWFuMS87Ci0JCQlkc3RTdWJmb2xkZXJTcGVjID0gMDsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAxOwotCQl9OwotLyogRW5kIFBC
WENvcHlGaWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhGaWxlUmVmZXJl
bmNlIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjQxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RS
ZWxheSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNv
bXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gTGF5
b3V0VGVzdFJlbGF5OyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQkyRThE
M0VGNzE5ODgxRDQzMDA0RjZDQzIgLyogbWFpbi5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBtYWluLm07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAv
KiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBuYW1lID0gRGVidWdSZWxlYXNlLnhjY29u
ZmlnOyBwYXRoID0gQ29uZmlndXJhdGlvbnMvRGVidWdSZWxlYXNlLnhjY29uZmlnOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0VGRjE5ODgxRTI1MDA0RjZDQzIgLyogQmFzZS54
Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQueGNjb25maWc7IG5hbWUgPSBCYXNlLnhjY29uZmlnOyBwYXRoID0gQ29uZmlndXJhdGlv
bnMvQmFzZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDAx
OTg4MUYyOTAwNEY2Q0MyIC8qIExUUmVsYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTFRSZWxheS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0YwMTE5ODgxRkQwMDA0RjZDQzIgLyog
TFRQaXBlUmVsYXkubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gTFRQaXBl
UmVsYXkubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDMxOTg4MUZFMjAw
NEY2Q0MyIC8qIExUUGlwZVJlbGF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExUUGlwZVJlbGF5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOEQzRjA0MTk4ODI0MDYwMDRGNkNDMiAvKiBM
VFJlbGF5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMVFJl
bGF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0YwNTE5
ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5vYmpjOyBwYXRoID0gTFRSZWxheUNvbnRyb2xsZXIubTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQ0UxRkJDMTUxQjI5MEU3OTAwMDEzNkY1IC8qIENvcmVTaW11bGF0b3JTUEku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29yZVNpbXVsYXRvclNQSS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlv
biAqLwotCi0vKiBCZWdpbiBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0JCTJF
OEQzRUYxMTk4ODFENDMwMDRGNkNDMiAvKiBGcmFtZXdvcmtzICovID0gewotCQkJaXNhID0gUEJY
RnJhbWV3b3Jrc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3Owot
CQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7Ci0JCX07Ci0vKiBFbmQgUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwot
Ci0vKiBCZWdpbiBQQlhHcm91cCBzZWN0aW9uICovCi0JCTJFOEQzRUVCMTk4ODFENDMwMDRGNkND
MiA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMkU4RDNFRkYx
OTg4MUUyNTAwNEY2Q0MyIC8qIEJhc2UueGNjb25maWcgKi8sCi0JCQkJMkU4RDNFRkUxOTg4MUUx
MzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLywKLQkJCQkyRThEM0VGNjE5ODgx
RDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovLAotCQkJCTJFOEQzRUY1MTk4ODFENDMw
MDRGNkNDMiAvKiBQcm9kdWN0cyAqLywKLQkJCSk7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwotCQl9OwotCQkyRThEM0VGNTE5ODgxRDQzMDA0RjZDQzIgLyogUHJvZHVjdHMgKi8gPSB7Ci0J
CQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTJFOEQzRUY0MTk4ODFENDMw
MDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8sCi0JCQkpOwotCQkJbmFtZSA9IFByb2R1Y3Rz
OwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJMkU4RDNFRjYxOTg4MUQ0MzAw
NEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJ
Y2hpbGRyZW4gPSAoCi0JCQkJMkU4RDNFRjcxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSAqLywK
LQkJCQlDRTFGQkMxNTFCMjkwRTc5MDAwMTM2RjUgLyogQ29yZVNpbXVsYXRvclNQSS5oICovLAot
CQkJCTJFOEQzRjAwMTk4ODFGMjkwMDRGNkNDMiAvKiBMVFJlbGF5LmggKi8sCi0JCQkJMkU4RDNG
MDExOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lm0gKi8sCi0JCQkJMkU4RDNGMDMxOTg4
MUZFMjAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5LmggKi8sCi0JCQkJMkU4RDNGMDQxOTg4MjQwNjAw
NEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLmggKi8sCi0JCQkJMkU4RDNGMDUxOTg4MjQwNjAw
NEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLm0gKi8sCi0JCQkpOwotCQkJcGF0aCA9IExheW91
dFRlc3RSZWxheTsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0vKiBFbmQgUEJY
R3JvdXAgc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLwot
CQkyRThEM0VGMzE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovID0gewotCQkJ
aXNhID0gUEJYTmF0aXZlVGFyZ2V0OwotCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDJFOEQz
RUZCMTk4ODFENDMwMDRGNkNDMiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5h
dGl2ZVRhcmdldCAiTGF5b3V0VGVzdFJlbGF5IiAqLzsKLQkJCWJ1aWxkUGhhc2VzID0gKAotCQkJ
CTJFOEQzRUYwMTk4ODFENDMwMDRGNkNDMiAvKiBTb3VyY2VzICovLAotCQkJCTJFOEQzRUYxMTk4
ODFENDMwMDRGNkNDMiAvKiBGcmFtZXdvcmtzICovLAotCQkJCTJFOEQzRUYyMTk4ODFENDMwMDRG
NkNDMiAvKiBDb3B5RmlsZXMgKi8sCi0JCQkpOwotCQkJYnVpbGRSdWxlcyA9ICgKLQkJCSk7Ci0J
CQlkZXBlbmRlbmNpZXMgPSAoCi0JCQkpOwotCQkJbmFtZSA9IExheW91dFRlc3RSZWxheTsKLQkJ
CXByb2R1Y3ROYW1lID0gTGF5b3V0VGVzdFJlbGF5OwotCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDJF
OEQzRUY0MTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi87Ci0JCQlwcm9kdWN0
VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLnRvb2wiOwotCQl9OwotLyogRW5kIFBCWE5h
dGl2ZVRhcmdldCBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWFByb2plY3Qgc2VjdGlvbiAqLwot
CQkyRThEM0VFQzE5ODgxRDQzMDA0RjZDQzIgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7Ci0JCQlp
c2EgPSBQQlhQcm9qZWN0OwotCQkJYXR0cmlidXRlcyA9IHsKLQkJCQlMYXN0VXBncmFkZUNoZWNr
ID0gMDYwMDsKLQkJCQlPUkdBTklaQVRJT05OQU1FID0gIkFwcGxlLCBJbmMuIjsKLQkJCQlUYXJn
ZXRBdHRyaWJ1dGVzID0gewotCQkJCQkyRThEM0VGMzE5ODgxRDQzMDA0RjZDQzIgPSB7Ci0JCQkJ
CQlDcmVhdGVkT25Ub29sc1ZlcnNpb24gPSA2LjA7Ci0JCQkJCX07Ci0JCQkJfTsKLQkJCX07Ci0J
CQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMkU4RDNFRUYxOTg4MUQ0MzAwNEY2Q0MyIC8qIEJ1
aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiTGF5b3V0VGVzdFJlbGF5IiAq
LzsKLQkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDMuMiI7Ci0JCQlkZXZlbG9wbWVu
dFJlZ2lvbiA9IEVuZ2xpc2g7Ci0JCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMDsKLQkJCWtu
b3duUmVnaW9ucyA9ICgKLQkJCQllbiwKLQkJCSk7Ci0JCQltYWluR3JvdXAgPSAyRThEM0VFQjE5
ODgxRDQzMDA0RjZDQzI7Ci0JCQlwcm9kdWN0UmVmR3JvdXAgPSAyRThEM0VGNTE5ODgxRDQzMDA0
RjZDQzIgLyogUHJvZHVjdHMgKi87Ci0JCQlwcm9qZWN0RGlyUGF0aCA9ICIiOwotCQkJcHJvamVj
dFJvb3QgPSAiIjsKLQkJCXRhcmdldHMgPSAoCi0JCQkJMkU4RDNFRjMxOTg4MUQ0MzAwNEY2Q0My
IC8qIExheW91dFRlc3RSZWxheSAqLywKLQkJCSk7Ci0JCX07Ci0vKiBFbmQgUEJYUHJvamVjdCBz
ZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQkJ
MkU4RDNFRjAxOTg4MUQ0MzAwNEY2Q0MyIC8qIFNvdXJjZXMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhT
b3VyY2VzQnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlm
aWxlcyA9ICgKLQkJCQkyRThEM0YwNjE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xs
ZXIubSBpbiBTb3VyY2VzICovLAotCQkJCTJFOEQzRUY4MTk4ODFENDMwMDRGNkNDMiAvKiBtYWlu
Lm0gaW4gU291cmNlcyAqLywKLQkJCQkyRThEM0YwMjE5ODgxRkQwMDA0RjZDQzIgLyogTFRQaXBl
UmVsYXkubSBpbiBTb3VyY2VzICovLAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwotCQl9OwotLyogRW5kIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rp
b24gKi8KLQotLyogQmVnaW4gWENCdWlsZENvbmZpZ3VyYXRpb24gc2VjdGlvbiAqLwotCQkyRThE
M0VGOTE5ODgxRDQzMDA0RjZDQzIgLyogRGVidWcgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29u
ZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gMkU4RDNFRkUxOTg4
MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLzsKLQkJCWJ1aWxkU2V0dGlu
Z3MgPSB7Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVnOwotCQl9OwotCQkyRThEM0VGQTE5ODgxRDQz
MDA0RjZDQzIgLyogUmVsZWFzZSAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9u
OwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAyRThEM0VGRTE5ODgxRTEzMDA0RjZD
QzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJ
CX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJMkU4RDNFRkMxOTg4MUQ0MzAwNEY2Q0My
IC8qIERlYnVnICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNl
Q29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1
Z1JlbGVhc2UueGNjb25maWcgKi87Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJCVBST0RVQ1Rf
TkFNRSA9ICIkKFRBUkdFVF9OQU1FKSI7Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVnOwotCQl9Owot
CQkyRThEM0VGRDE5ODgxRDQzMDA0RjZDQzIgLyogUmVsZWFzZSAqLyA9IHsKLQkJCWlzYSA9IFhD
QnVpbGRDb25maWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAyRThE
M0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovOwotCQkJYnVp
bGRTZXR0aW5ncyA9IHsKLQkJCQlQUk9EVUNUX05BTUUgPSAiJChUQVJHRVRfTkFNRSkiOwotCQkJ
fTsKLQkJCW5hbWUgPSBSZWxlYXNlOwotCQl9OwotLyogRW5kIFhDQnVpbGRDb25maWd1cmF0aW9u
IHNlY3Rpb24gKi8KLQotLyogQmVnaW4gWENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCi0J
CTJFOEQzRUVGMTk4ODFENDMwMDRGNkNDMiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9y
IFBCWFByb2plY3QgIkxheW91dFRlc3RSZWxheSIgKi8gPSB7Ci0JCQlpc2EgPSBYQ0NvbmZpZ3Vy
YXRpb25MaXN0OwotCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKLQkJCQkyRThEM0VGOTE5ODgx
RDQzMDA0RjZDQzIgLyogRGVidWcgKi8sCi0JCQkJMkU4RDNFRkExOTg4MUQ0MzAwNEY2Q0MyIC8q
IFJlbGVhc2UgKi8sCi0JCQkpOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAw
OwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJMkU4RDNF
RkIxOTg4MUQ0MzAwNEY2Q0MyIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0
aXZlVGFyZ2V0ICJMYXlvdXRUZXN0UmVsYXkiICovID0gewotCQkJaXNhID0gWENDb25maWd1cmF0
aW9uTGlzdDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCi0JCQkJMkU4RDNFRkMxOTg4MUQ0
MzAwNEY2Q0MyIC8qIERlYnVnICovLAotCQkJCTJFOEQzRUZEMTk4ODFENDMwMDRGNkNDMiAvKiBS
ZWxlYXNlICovLAotCQkJKTsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsK
LQkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJlbGVhc2U7Ci0JCX07Ci0vKiBFbmQgWEND
b25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCi0JfTsKLQlyb290T2JqZWN0ID0gMkU4RDNFRUMx
OTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2plY3Qgb2JqZWN0ICovOwotfQpJbmRleDogVG9vbHMvTGF5
b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2oJKHJldmlzaW9uIDIw
OTc4NCkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVwcm9q
CShub25leGlzdGVudCkKClByb3BlcnR5IGNoYW5nZXMgb246IFRvb2xzL0xheW91dFRlc3RSZWxh
eS9MYXlvdXRUZXN0UmVsYXkueGNvZGVwcm9qCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmlnbm9y
ZQojIyAtMSwyICswLDAgIyMKLXByb2plY3QueGN3b3Jrc3BhY2UKLXhjdXNlcmRhdGEKSW5kZXg6
IFRvb2xzL0xheW91dFRlc3RSZWxheS9NYWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlv
dXRUZXN0UmVsYXkvTWFrZWZpbGUJKHJldmlzaW9uIDIwOTc4NCkKKysrIFRvb2xzL0xheW91dFRl
c3RSZWxheS9NYWtlZmlsZQkobm9uZXhpc3RlbnQpCkBAIC0xLDYgKzAsMCBAQAotU0NSSVBUU19Q
QVRIID0gLi4vU2NyaXB0cwotCi1PVkVSUklERV9BUkNIUyA9IGRlZmF1bHQKLU9WRVJSSURFX1NE
S1JPT1QgPSBkZWZhdWx0Ci0KLWluY2x1ZGUgLi4vLi4vTWFrZWZpbGUuc2hhcmVkCkluZGV4OiBU
b29scy9MYXlvdXRUZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZp
ZwkocmV2aXNpb24gMjA5Nzg0KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRp
b25zL0Jhc2UueGNjb25maWcJKG5vbmV4aXN0ZW50KQpAQCAtMSw2OCArMCwwIEBACi0vLyBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0vLyBhcmUgbWV0OgotLy8gMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLS8vIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0vLyAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
Ly8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotLy8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLS8vIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotLy8gUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLS8vIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
Ly8gRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotLy8gUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0vLyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0vLyBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgIi4uLy4uLy4uLy4uL0ludGVy
bmFsL0NvbmZpZ3VyYXRpb25zL0hhdmVJbnRlcm5hbFNESy54Y2NvbmZpZyIKLQotVVNFX0lOVEVS
TkFMX1NESyA9ICQoVVNFX0lOVEVSTkFMX1NES18kKENPTkZJR1VSQVRJT04pKTsKLVVTRV9JTlRF
Uk5BTF9TREtfUHJvZHVjdGlvbiA9IFlFUzsKLVVTRV9JTlRFUk5BTF9TREtfRGVidWcgPSAkKEhB
VkVfSU5URVJOQUxfU0RLKTsKLVVTRV9JTlRFUk5BTF9TREtfUmVsZWFzZSA9ICQoSEFWRV9JTlRF
Uk5BTF9TREspOwotCi1DTEFOR19DWFhfTEFOR1VBR0VfU1RBTkRBUkQgPSBnbnUrKzB4OwotQ0xB
TkdfRU5BQkxFX09CSkNfQVJDID0gWUVTOwotQ0xBTkdfV0FSTl9DWFgwWF9FWFRFTlNJT05TID0g
Tk87Ci1IRUFERVJfU0VBUkNIX1BBVEhTID0gJChCVUlMVF9QUk9EVUNUU19ESVIpL3Vzci9sb2Nh
bC9pbmNsdWRlICQoV0VCQ09SRV9QUklWQVRFX0hFQURFUlNfRElSKS9Gb3J3YXJkaW5nSGVhZGVy
cyAkKFNSQ1JPT1QpLy4uLy4uL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UgJChORVhUX1JPT1Qp
L3Vzci9sb2NhbC9pbmNsdWRlL1dlYkNvcmVUZXN0U3VwcG9ydDsKLUdDQ19QUkVQUk9DRVNTT1Jf
REVGSU5JVElPTlMgPSAkKERFQlVHX0RFRklORVMpIEVOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVDsK
LURFQlVHX0lORk9STUFUSU9OX0ZPUk1BVCA9IGR3YXJmLXdpdGgtZHN5bTsKLVBSRUJJTkRJTkcg
PSBOTwotR0NDX0NfTEFOR1VBR0VfU1RBTkRBUkQgPSBnbnU5OQotR0NDX0VOQUJMRV9DUFBfRVhD
RVBUSU9OUyA9IE5POwotR0NDX0VOQUJMRV9DUFBfUlRUSSA9IE5POwotR0NDX1BSRUNPTVBJTEVf
UFJFRklYX0hFQURFUiA9IFlFUwotR0NDX1RSRUFUX1dBUk5JTkdTX0FTX0VSUk9SUyA9IFlFUwot
R0NDX1ZFUlNJT04gPSBjb20uYXBwbGUuY29tcGlsZXJzLmxsdm0uY2xhbmcuMV8wOwotR0NDX1dB
Uk5fQUJPVVRfREVQUkVDQVRFRF9GVU5DVElPTlMgPSBOTwotR0NDX1dBUk5fVU5VU0VEX0ZVTkNU
SU9OID0gWUVTCi1HQ0NfV0FSTl9VTlVTRURfVkFSSUFCTEUgPSBZRVMKLUdDQ19XQVJOXzY0X1RP
XzMyX0JJVF9DT05WRVJTSU9OW2FyY2g9eDg2XzY0XSA9IE5POwotV0FSTklOR19DRkxBR1MgPSAt
V2FsbCAtVyAtV25vLXVudXNlZC1wYXJhbWV0ZXIgLVd1bmRlZgotCi1ERUJVR19ERUZJTkVTX2Rl
YnVnID0gOwotREVCVUdfREVGSU5FU19ub3JtYWwgPSBOREVCVUc7Ci1ERUJVR19ERUZJTkVTID0g
JChERUJVR19ERUZJTkVTXyQoQ1VSUkVOVF9WQVJJQU5UKSk7Ci0KLVRBUkdFVF9NQUNfT1NfWF9W
RVJTSU9OX01BSk9SID0gJChUQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUiQoTUFDT1NYX0RF
UExPWU1FTlRfVEFSR0VUOnN1ZmZpeDppZGVudGlmaWVyKSk7Ci1UQVJHRVRfTUFDX09TX1hfVkVS
U0lPTl9NQUpPUl8xMCA9IDEwMTAwMDsKLVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SXzEx
ID0gMTAxMTAwOwotVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1JfMTIgPSAxMDEyMDA7Ci1U
QVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUl8xMyA9IDEwMTMwMDsKLQotU0RLUk9PVCA9IG1h
Y29zeC5pbnRlcm5hbDsKLQotU1VQUE9SVEVEX1BMQVRGT1JNUyA9IG1hY29zeDsKLQotVE9PTENI
QUlOUyA9IGRlZmF1bHQ7Ci0KLU9USEVSX0NGTEFHUyA9ICQoQVNBTl9PVEhFUl9DRkxBR1MpOwot
T1RIRVJfQ1BMVVNQTFVTRkxBR1MgPSAkKEFTQU5fT1RIRVJfQ1BMVVNQTFVTRkxBR1MpOwotT1RI
RVJfTERGTEFHUyA9ICQoQVNBTl9PVEhFUl9MREZMQUdTKTsKSW5kZXg6IFRvb2xzL0xheW91dFRl
c3RSZWxheS9Db25maWd1cmF0aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25maWcKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0RlYnVnUmVsZWFzZS54Y2Nv
bmZpZwkocmV2aXNpb24gMjA5Nzg0KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3Vy
YXRpb25zL0RlYnVnUmVsZWFzZS54Y2NvbmZpZwkobm9uZXhpc3RlbnQpCkBAIC0xLDQyICswLDAg
QEAKLS8vIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLS8vIGFyZSBtZXQ6Ci0vLyAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotLy8gMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLS8vICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0vLyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotLy8gSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0vLyBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotLy8gQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0vLyBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0vLyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLS8vIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLS8v
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSAiQmFzZS54
Y2NvbmZpZyIKLQotQVJDSFMgPSAkKEFSQ0hTX1NUQU5EQVJEXzY0X0JJVCk7Ci0KLVRBUkdFVF9N
QUNfT1NfWF9WRVJTSU9OX01BSk9SID0gJChNQUNfT1NfWF9WRVJTSU9OX01BSk9SKTsKLQotTUFD
T1NYX0RFUExPWU1FTlRfVEFSR0VUID0gJChNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfJChUQVJH
RVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUikpCi1NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfMTAx
MDAwID0gMTAuMTA7Ci1NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfMTAxMTAwID0gMTAuMTE7Ci1N
QUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfMTAxMjAwID0gMTAuMTI7Ci1NQUNPU1hfREVQTE9ZTUVO
VF9UQVJHRVRfMTAxMzAwID0gMTAuMTM7Ci0KLUZSQU1FV09SS19TRUFSQ0hfUEFUSFMgPSAkKERF
VkVMT1BFUl9ESVIpL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3M7Ci1MRF9SVU5QQVRIX1NFQVJD
SF9QQVRIUyA9ICQoREVWRUxPUEVSX0RJUikvTGlicmFyeS9Qcml2YXRlRnJhbWV3b3JrczsKLU9U
SEVSX0xERkxBR1MgPSAtZnJhbWV3b3JrIENvcmVTaW11bGF0b3IgLWZyYW1ld29yayBBcHBLaXQ7
Ci0KLVNES1JPT1QgPSAkKFNES1JPT1RfbWFjb3N4XyQoVVNFX0lOVEVSTkFMX1NESykpOwotU0RL
Uk9PVF9tYWNvc3hfID0gbWFjb3N4OwotU0RLUk9PVF9tYWNvc3hfWUVTID0gbWFjb3N4LmludGVy
bmFsOwpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9M
YXlvdXRUZXN0UmVsYXkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA5Nzg0
KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShub25leGlzdGVudCkKQEAgLTEsMjAyICswLDAgQEAKLS8vICEkKlVURjgq
JCEKLXsKLQlhcmNoaXZlVmVyc2lvbiA9IDE7Ci0JY2xhc3NlcyA9IHsKLQl9OwotCW9iamVjdFZl
cnNpb24gPSA0NjsKLQlvYmplY3RzID0gewotCi0vKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlv
biAqLwotCQkyRThEM0VGODE5ODgxRDQzMDA0RjZDQzIgLyogbWFpbi5tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU4RDNFRjcxOTg4MUQ0MzAwNEY2Q0My
IC8qIG1haW4ubSAqLzsgfTsKLQkJMkU4RDNGMDIxOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJl
bGF5Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRThE
M0YwMTE5ODgxRkQwMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkubSAqLzsgfTsKLQkJMkU4RDNGMDYx
OTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLm0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRThEM0YwNTE5ODgyNDA2MDA0RjZDQzIgLyog
TFRSZWxheUNvbnRyb2xsZXIubSAqLzsgfTsKLS8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAq
LwotCi0vKiBCZWdpbiBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQkJMkU4RDNF
RjIxOTg4MUQ0MzAwNEY2Q0MyIC8qIENvcHlGaWxlcyAqLyA9IHsKLQkJCWlzYSA9IFBCWENvcHlG
aWxlc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZHN0
UGF0aCA9IC91c3Ivc2hhcmUvbWFuL21hbjEvOwotCQkJZHN0U3ViZm9sZGVyU3BlYyA9IDA7Ci0J
CQlmaWxlcyA9ICgKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMTsKLQkJfTsKLS8qIEVuZCBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQot
LyogQmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCi0JCTJFOEQzRUY0MTk4ODFENDMw
MDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJ
bkluZGV4ID0gMDsgcGF0aCA9IExheW91dFRlc3RSZWxheTsgc291cmNlVHJlZSA9IEJVSUxUX1BS
T0RVQ1RTX0RJUjsgfTsKLQkJMkU4RDNFRjcxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5vYmpjOyBwYXRoID0gbWFpbi5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThE
M0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgbmFt
ZSA9IERlYnVnUmVsZWFzZS54Y2NvbmZpZzsgcGF0aCA9IENvbmZpZ3VyYXRpb25zL0RlYnVnUmVs
ZWFzZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNFRkYxOTg4
MUUyNTAwNEY2Q0MyIC8qIEJhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBuYW1lID0gQmFzZS54Y2NvbmZp
ZzsgcGF0aCA9IENvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTJFOEQzRjAwMTk4ODFGMjkwMDRGNkNDMiAvKiBMVFJlbGF5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IExUUmVsYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNG
MDExOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMub2JqYzsgcGF0aCA9IExUUGlwZVJlbGF5Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTJFOEQzRjAzMTk4ODFGRTIwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBMVFBpcGVSZWxheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0Yw
NDE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTFRSZWxheUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMkU4RDNGMDUxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVy
Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IExUUmVsYXlDb250cm9sbGVy
Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNFMUZCQzE1MUIyOTBFNzkwMDAxMzZG
NSAvKiBDb3JlU2ltdWxhdG9yU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENvcmVTaW11bGF0b3JTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLS8qIEVuZCBQ
QlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxk
UGhhc2Ugc2VjdGlvbiAqLwotCQkyRThEM0VGMTE5ODgxRDQzMDA0RjZDQzIgLyogRnJhbWV3b3Jr
cyAqLyA9IHsKLQkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rp
b25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9OwotLyogRW5kIFBCWEZyYW1ld29ya3NC
dWlsZFBoYXNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYR3JvdXAgc2VjdGlvbiAqLwotCQky
RThEM0VFQjE5ODgxRDQzMDA0RjZDQzIgPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxk
cmVuID0gKAotCQkJCTJFOEQzRUZGMTk4ODFFMjUwMDRGNkNDMiAvKiBCYXNlLnhjY29uZmlnICov
LAotCQkJCTJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcg
Ki8sCi0JCQkJMkU4RDNFRjYxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLywK
LQkJCQkyRThEM0VGNTE5ODgxRDQzMDA0RjZDQzIgLyogUHJvZHVjdHMgKi8sCi0JCQkpOwotCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJMkU4RDNFRjUxOTg4MUQ0MzAwNEY2Q0My
IC8qIFByb2R1Y3RzICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgK
LQkJCQkyRThEM0VGNDE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovLAotCQkJ
KTsKLQkJCW5hbWUgPSBQcm9kdWN0czsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07
Ci0JCTJFOEQzRUY2MTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8gPSB7Ci0J
CQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTJFOEQzRUY3MTk4ODFENDMw
MDRGNkNDMiAvKiBtYWluLm0gKi8sCi0JCQkJQ0UxRkJDMTUxQjI5MEU3OTAwMDEzNkY1IC8qIENv
cmVTaW11bGF0b3JTUEkuaCAqLywKLQkJCQkyRThEM0YwMDE5ODgxRjI5MDA0RjZDQzIgLyogTFRS
ZWxheS5oICovLAotCQkJCTJFOEQzRjAxMTk4ODFGRDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5t
ICovLAotCQkJCTJFOEQzRjAzMTk4ODFGRTIwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5oICovLAot
CQkJCTJFOEQzRjA0MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5oICovLAot
CQkJCTJFOEQzRjA1MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5tICovLAot
CQkJKTsKLQkJCXBhdGggPSBMYXlvdXRUZXN0UmVsYXk7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOwotCQl9OwotLyogRW5kIFBCWEdyb3VwIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYTmF0
aXZlVGFyZ2V0IHNlY3Rpb24gKi8KLQkJMkU4RDNFRjMxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91
dFRlc3RSZWxheSAqLyA9IHsKLQkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKLQkJCWJ1aWxkQ29u
ZmlndXJhdGlvbkxpc3QgPSAyRThEM0VGQjE5ODgxRDQzMDA0RjZDQzIgLyogQnVpbGQgY29uZmln
dXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIkxheW91dFRlc3RSZWxheSIgKi87Ci0J
CQlidWlsZFBoYXNlcyA9ICgKLQkJCQkyRThEM0VGMDE5ODgxRDQzMDA0RjZDQzIgLyogU291cmNl
cyAqLywKLQkJCQkyRThEM0VGMTE5ODgxRDQzMDA0RjZDQzIgLyogRnJhbWV3b3JrcyAqLywKLQkJ
CQkyRThEM0VGMjE5ODgxRDQzMDA0RjZDQzIgLyogQ29weUZpbGVzICovLAotCQkJKTsKLQkJCWJ1
aWxkUnVsZXMgPSAoCi0JCQkpOwotCQkJZGVwZW5kZW5jaWVzID0gKAotCQkJKTsKLQkJCW5hbWUg
PSBMYXlvdXRUZXN0UmVsYXk7Ci0JCQlwcm9kdWN0TmFtZSA9IExheW91dFRlc3RSZWxheTsKLQkJ
CXByb2R1Y3RSZWZlcmVuY2UgPSAyRThEM0VGNDE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVz
dFJlbGF5ICovOwotCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS50b29s
IjsKLQkJfTsKLS8qIEVuZCBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQ
QlhQcm9qZWN0IHNlY3Rpb24gKi8KLQkJMkU4RDNFRUMxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2pl
Y3Qgb2JqZWN0ICovID0gewotCQkJaXNhID0gUEJYUHJvamVjdDsKLQkJCWF0dHJpYnV0ZXMgPSB7
Ci0JCQkJTGFzdFVwZ3JhZGVDaGVjayA9IDA2MDA7Ci0JCQkJT1JHQU5JWkFUSU9OTkFNRSA9ICJB
cHBsZSwgSW5jLiI7Ci0JCQkJVGFyZ2V0QXR0cmlidXRlcyA9IHsKLQkJCQkJMkU4RDNFRjMxOTg4
MUQ0MzAwNEY2Q0MyID0gewotCQkJCQkJQ3JlYXRlZE9uVG9vbHNWZXJzaW9uID0gNi4wOwotCQkJ
CQl9OwotCQkJCX07Ci0JCQl9OwotCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDJFOEQzRUVG
MTk4ODFENDMwMDRGNkNDMiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2pl
Y3QgIkxheW91dFRlc3RSZWxheSIgKi87Ci0JCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29k
ZSAzLjIiOwotCQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBFbmdsaXNoOwotCQkJaGFzU2Nhbm5lZEZv
ckVuY29kaW5ncyA9IDA7Ci0JCQlrbm93blJlZ2lvbnMgPSAoCi0JCQkJZW4sCi0JCQkpOwotCQkJ
bWFpbkdyb3VwID0gMkU4RDNFRUIxOTg4MUQ0MzAwNEY2Q0MyOwotCQkJcHJvZHVjdFJlZkdyb3Vw
ID0gMkU4RDNFRjUxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2R1Y3RzICovOwotCQkJcHJvamVjdERp
clBhdGggPSAiIjsKLQkJCXByb2plY3RSb290ID0gIiI7Ci0JCQl0YXJnZXRzID0gKAotCQkJCTJF
OEQzRUYzMTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8sCi0JCQkpOwotCQl9
OwotLyogRW5kIFBCWFByb2plY3Qgc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhTb3VyY2VzQnVp
bGRQaGFzZSBzZWN0aW9uICovCi0JCTJFOEQzRUYwMTk4ODFENDMwMDRGNkNDMiAvKiBTb3VyY2Vz
ICovID0gewotCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1h
c2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkJMkU4RDNGMDYxOTg4MjQwNjAwNEY2
Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLm0gaW4gU291cmNlcyAqLywKLQkJCQkyRThEM0VGODE5
ODgxRDQzMDA0RjZDQzIgLyogbWFpbi5tIGluIFNvdXJjZXMgKi8sCi0JCQkJMkU4RDNGMDIxOTg4
MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lm0gaW4gU291cmNlcyAqLywKLQkJCSk7Ci0JCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKLS8qIEVuZCBQQlhT
b3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFhDQnVpbGRDb25maWd1cmF0
aW9uIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjkxOTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICovID0g
ewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJhdGlvblJl
ZmVyZW5jZSA9IDJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25m
aWcgKi87Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJfTsKLQkJCW5hbWUgPSBEZWJ1ZzsKLQkJ
fTsKLQkJMkU4RDNFRkExOTg4MUQ0MzAwNEY2Q0MyIC8qIFJlbGVhc2UgKi8gPSB7Ci0JCQlpc2Eg
PSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0g
MkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLzsKLQkJ
CWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQl9OwotCQkJbmFtZSA9IFJlbGVhc2U7Ci0JCX07Ci0JCTJF
OEQzRUZDMTk4ODFENDMwMDRGNkNDMiAvKiBEZWJ1ZyAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRD
b25maWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAyRThEM0VGRTE5
ODgxRTEzMDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0
aW5ncyA9IHsKLQkJCQlQUk9EVUNUX05BTUUgPSAiJChUQVJHRVRfTkFNRSkiOwotCQkJfTsKLQkJ
CW5hbWUgPSBEZWJ1ZzsKLQkJfTsKLQkJMkU4RDNFRkQxOTg4MUQ0MzAwNEY2Q0MyIC8qIFJlbGVh
c2UgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1
cmF0aW9uUmVmZXJlbmNlID0gMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFz
ZS54Y2NvbmZpZyAqLzsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJUFJPRFVDVF9OQU1FID0g
IiQoVEFSR0VUX05BTUUpIjsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLS8qIEVu
ZCBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFhDQ29uZmlndXJh
dGlvbkxpc3Qgc2VjdGlvbiAqLwotCQkyRThEM0VFRjE5ODgxRDQzMDA0RjZDQzIgLyogQnVpbGQg
Y29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJMYXlvdXRUZXN0UmVsYXkiICovID0g
ewotCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbnMg
PSAoCi0JCQkJMkU4RDNFRjkxOTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICovLAotCQkJCTJFOEQz
RUZBMTk4ODFENDMwMDRGNkNDMiAvKiBSZWxlYXNlICovLAotCQkJKTsKLQkJCWRlZmF1bHRDb25m
aWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJl
bGVhc2U7Ci0JCX07Ci0JCTJFOEQzRUZCMTk4ODFENDMwMDRGNkNDMiAvKiBCdWlsZCBjb25maWd1
cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiTGF5b3V0VGVzdFJlbGF5IiAqLyA9IHsK
LQkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25zID0g
KAotCQkJCTJFOEQzRUZDMTk4ODFENDMwMDRGNkNDMiAvKiBEZWJ1ZyAqLywKLQkJCQkyRThEM0VG
RDE5ODgxRDQzMDA0RjZDQzIgLyogUmVsZWFzZSAqLywKLQkJCSk7Ci0JCQlkZWZhdWx0Q29uZmln
dXJhdGlvbklzVmlzaWJsZSA9IDA7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxl
YXNlOwotCQl9OwotLyogRW5kIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLwotCX07Ci0J
cm9vdE9iamVjdCA9IDJFOEQzRUVDMTk4ODFENDMwMDRGNkNDMiAvKiBQcm9qZWN0IG9iamVjdCAq
LzsKLX0KSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvQ29yZVNp
bXVsYXRvclNQSS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRU
ZXN0UmVsYXkvQ29yZVNpbXVsYXRvclNQSS5oCShyZXZpc2lvbiAyMDk3ODQpCisrKyBUb29scy9M
YXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0NvcmVTaW11bGF0b3JTUEkuaAkobm9uZXhp
c3RlbnQpCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgX19oYXNfaW5j
bHVkZSg8Q29yZVNpbXVsYXRvci9Db3JlU2ltdWxhdG9yLmg+KQotCi0vKiBGSVhNRTogUmVtb3Zl
IHRoZSBiZWxvdyAjZGVmaW5lIG9uY2Ugd2UgcmVxdWlyZSBYY29kZSA3LjMgd2l0aCBpT1MgOS4z
IFNESyBvciBuZXdlci4gKi8KLSNkZWZpbmUgX19jb3Jlc2ltX3VuYXZhaWxhYmxlX21zZyhtc2cp
Ci0jaW1wb3J0IDxDb3JlU2ltdWxhdG9yL0NvcmVTaW11bGF0b3IuaD4KLQotLyogRklYTUU6IEFs
d2F5cyB1c2UgU2ltU2VydmljZUNvbnRleHQgb25jZSB3ZSByZXF1aXJlIFhjb2RlIDcuMyB3aXRo
IGlPUyA5LjMgU0RLIG9yIG5ld2VyLiAqLwotI2RlZmluZSBVU0VfU0lNX1NFUlZJQ0VfQ09OVEVY
VCBkZWZpbmVkKENPUkVTSU1fQVBJX01BWF9BTExPV0VEKQotCi0jZWxzZQotCi0jaW1wb3J0IDxG
b3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2RlZmluZSBVU0VfU0lNX1NFUlZJQ0VfQ09OVEVY
VCAxCi0KLSNkZWZpbmUga1NpbURldmljZUxhdW5jaEFwcGxpY2F0aW9uQXJndW1lbnRzIEAiYXJn
dW1lbnRzIgotI2RlZmluZSBrU2ltRGV2aWNlTGF1bmNoQXBwbGljYXRpb25FbnZpcm9ubWVudCBA
ImVudmlyb25tZW50IgotCi1AaW50ZXJmYWNlIFNpbURldmljZSA6IE5TT2JqZWN0Ci0tIChCT09M
KWluc3RhbGxBcHBsaWNhdGlvbjooTlNVUkwgKilpbnN0YWxsVVJMIHdpdGhPcHRpb25zOihOU0Rp
Y3Rpb25hcnkgKilvcHRpb25zIGVycm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICopZXJy
b3I7Ci0tIChwaWRfdClsYXVuY2hBcHBsaWNhdGlvbldpdGhJRDooTlNTdHJpbmcgKilidW5kbGVJ
RCBvcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zIGVycm9yOihOU0Vycm9yICogX19hdXRv
cmVsZWFzaW5nICopZXJyb3I7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgU2ltRGV2aWNlU2V0IDogTlNP
YmplY3QKLUBwcm9wZXJ0eSAocmVhZG9ubHksIGNvcHkpIE5TRGljdGlvbmFyeSAqZGV2aWNlc0J5
VURJRDsKLUBlbmQKLQotQGludGVyZmFjZSBTaW1TZXJ2aWNlQ29udGV4dCA6IE5TT2JqZWN0Ci0r
KFNpbVNlcnZpY2VDb250ZXh0ICopc2hhcmVkU2VydmljZUNvbnRleHRGb3JEZXZlbG9wZXJEaXI6
KE5TU3RyaW5nICopZGV2ZWxvcGVyRGlyIGVycm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5n
ICopZXJyb3I7Ci0tKFNpbURldmljZVNldCAqKWRlZmF1bHREZXZpY2VTZXRXaXRoRXJyb3I6KE5T
RXJyb3IgKiBfX2F1dG9yZWxlYXNpbmcgKillcnJvcjsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBU
b29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxh
eS5oCShyZXZpc2lvbiAyMDk3ODQpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVz
dFJlbGF5L0xUUGlwZVJlbGF5LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwzNiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBMVFBpcGVSZWxheV9oCi0jZGVmaW5lIExUUGlwZVJlbGF5X2gKLQot
I2ltcG9ydCAiTFRSZWxheS5oIgotCi1AaW50ZXJmYWNlIExUUGlwZVJlbGF5IDogTlNPYmplY3Qg
PExUUmVsYXk+Ci1AcHJvcGVydHkgKHdlYWspIGlkPExUUmVsYXlEZWxlZ2F0ZT4gcmVsYXlEZWxl
Z2F0ZTsKLS0gKGlkKWluaXRXaXRoUHJlZml4OihOU1N0cmluZyAqKXByZWZpeDsKLUBlbmQKLQot
I2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlw
ZVJlbGF5Lm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RS
ZWxheS9MVFBpcGVSZWxheS5tCShyZXZpc2lvbiAyMDk3ODQpCisrKyBUb29scy9MYXlvdXRUZXN0
UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0JKG5vbmV4aXN0ZW50KQpAQCAtMSwx
NTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgIkxUUGlwZVJlbGF5LmgiCi0KLSNpbXBv
cnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5j
bHVkZSA8c3lzL3R5cGVzLmg+Ci0KLUBpbnRlcmZhY2UgTFRQaXBlUmVsYXkgKCkKLUBwcm9wZXJ0
eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKmZpZm9QcmVmaXg7Ci1AcHJvcGVydHkgKHN0
cm9uZykgTlNPdXRwdXRTdHJlYW0gKnN0YW5kYXJkSW5wdXRQaXBlOwotQHByb3BlcnR5IChzdHJv
bmcpIE5TSW5wdXRTdHJlYW0gKnN0YW5kYXJkT3V0cHV0UGlwZTsKLUBwcm9wZXJ0eSAoc3Ryb25n
KSBOU0lucHV0U3RyZWFtICpzdGFuZGFyZEVycm9yUGlwZTsKLQotLSAodm9pZCljcmVhdGVGSUZP
czsKLS0gKHZvaWQpZGVzdHJveUZJRk9zOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gTFRQaXBl
UmVsYXkKLQotLSAoTlNTdHJpbmcgKilpblBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1By
ZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9JTiJdOwotfQotCi0tIChOU1N0cmluZyAq
KW91dFBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGlu
Z1N0cmluZzpAIl9PVVQiXTsKLX0KLQotLSAoTlNTdHJpbmcgKillcnJvclBpcGVQYXRoCi17Ci0g
ICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9FUlJPUiJd
OwotfQotCi0tIChOU091dHB1dFN0cmVhbSAqKSBvdXRwdXRTdHJlYW0KLXsKLSAgICByZXR1cm4g
X3N0YW5kYXJkSW5wdXRQaXBlOwotfQotCi0tIChpZClpbml0V2l0aFByZWZpeDooTlNTdHJpbmcg
KilwcmVmaXgKLXsKLSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKSB7Ci0gICAgICAgIF9m
aWZvUHJlZml4ID0gcHJlZml4OwotICAgICAgICBbc2VsZiBkZXN0cm95RklGT3NdOwotICAgIH0K
LSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXR1cAotewotICAgIFtzZWxmIGRlc3Ry
b3lGSUZPc107Ci0gICAgW3NlbGYgY3JlYXRlRklGT3NdOwotfQotCi0tICh2b2lkKXRlYXJEb3du
Ci17Ci0gICAgW3NlbGYgZGVzdHJveUZJRk9zXTsKLX0KLQotLSh2b2lkKSBjb25uZWN0Ci17Ci0g
ICAgX3N0YW5kYXJkSW5wdXRQaXBlID0gW05TT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbVRvRmls
ZUF0UGF0aDpbc2VsZiBpblBpcGVQYXRoXSBhcHBlbmQ6WUVTXTsKLSAgICBfc3RhbmRhcmRPdXRw
dXRQaXBlID0gW05TSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW1XaXRoRmlsZUF0UGF0aDpbc2VsZiBv
dXRQaXBlUGF0aF1dOwotICAgIF9zdGFuZGFyZEVycm9yUGlwZSA9IFtOU0lucHV0U3RyZWFtIGlu
cHV0U3RyZWFtV2l0aEZpbGVBdFBhdGg6W3NlbGYgZXJyb3JQaXBlUGF0aF1dOwotCi0gICAgW1tz
ZWxmIHN0YW5kYXJkSW5wdXRQaXBlXSBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICBbW3NlbGYgc3Rh
bmRhcmRPdXRwdXRQaXBlXSBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRF
cnJvclBpcGVdIHNldERlbGVnYXRlOnNlbGZdOwotCi0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0
UGlwZV0gc2NoZWR1bGVJblJ1bkxvb3A6W05TUnVuTG9vcCBtYWluUnVuTG9vcF0gZm9yTW9kZTpO
U0RlZmF1bHRSdW5Mb29wTW9kZV07Ci0gICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JQaXBlXSBzY2hl
ZHVsZUluUnVuTG9vcDpbTlNSdW5Mb29wIG1haW5SdW5Mb29wXSBmb3JNb2RlOk5TRGVmYXVsdFJ1
bkxvb3BNb2RlXTsKLQotICAgIFtbc2VsZiBzdGFuZGFyZElucHV0UGlwZV0gb3Blbl07Ci0gICAg
W1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gb3Blbl07Ci0gICAgW1tzZWxmIHN0YW5kYXJkRXJy
b3JQaXBlXSBvcGVuXTsKLQotICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRDb25uZWN0XTsK
LX0KLQotLSAodm9pZClkaXNjb25uZWN0Ci17Ci0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlw
ZV0gY2xvc2VdOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yUGlwZV0gY2xvc2VdOwotICAgIFtb
c2VsZiBzdGFuZGFyZElucHV0UGlwZV0gY2xvc2VdOwotICAgIFtbc2VsZiByZWxheURlbGVnYXRl
XSBkaWREaXNjb25uZWN0XTsKLX0KLQotLSAodm9pZCljcmVhdGVGSUZPcwotewotICAgIG1rZmlm
byhbW3NlbGYgaW5QaXBlUGF0aF0gVVRGOFN0cmluZ10sIDA2NjYpOwotICAgIG1rZmlmbyhbW3Nl
bGYgb3V0UGlwZVBhdGhdIFVURjhTdHJpbmddLCAwNjY2KTsKLSAgICBta2ZpZm8oW1tzZWxmIGVy
cm9yUGlwZVBhdGhdIFVURjhTdHJpbmddLCAwNjY2KTsKLX0KLQotLSAodm9pZClkZXN0cm95RklG
T3MKLXsKLSAgICB1bmxpbmsoW1tzZWxmIGluUGlwZVBhdGhdIFVURjhTdHJpbmddKTsKLSAgICB1
bmxpbmsoW1tzZWxmIG91dFBpcGVQYXRoXSBVVEY4U3RyaW5nXSk7Ci0gICAgdW5saW5rKFtbc2Vs
ZiBlcnJvclBpcGVQYXRoXSBVVEY4U3RyaW5nXSk7Ci19Ci0KLS0gKHZvaWQpIHJlbGF5U3RyZWFt
OihOU0lucHV0U3RyZWFtICopc3RyZWFtCi17Ci0gICAgdWludDhfdCBieXRlc1sxMDI0XTsKLSAg
ICBOU0ludGVnZXIgYnl0ZXNSZWFkID0gW3N0cmVhbSByZWFkOmJ5dGVzIG1heExlbmd0aDoxMDI0
XTsKLSAgICBOU0RhdGEgKmRhdGEgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6Ynl0ZXMgbGVuZ3Ro
OmJ5dGVzUmVhZF07Ci0KLSAgICBpZiAoc3RyZWFtID09IFtzZWxmIHN0YW5kYXJkT3V0cHV0UGlw
ZV0pCi0gICAgICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRSZWNlaXZlU3Rkb3V0RGF0YTpk
YXRhXTsKLSAgICBlbHNlCi0gICAgICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRSZWNlaXZl
U3RkZXJyRGF0YTpkYXRhXTsKLX0KLQotLSAodm9pZClzdHJlYW06KE5TU3RyZWFtICopYVN0cmVh
bSBoYW5kbGVFdmVudDooTlNTdHJlYW1FdmVudClldmVudENvZGUKLXsKLSAgICBzd2l0Y2ggKGV2
ZW50Q29kZSkgewotICAgIGNhc2UgTlNTdHJlYW1FdmVudE5vbmU6Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgTlNTdHJlYW1FdmVudEhhc0J5dGVzQXZhaWxhYmxlOgotICAgICAgICBbc2VsZiBy
ZWxheVN0cmVhbTooTlNJbnB1dFN0cmVhbSAqKWFTdHJlYW1dOwotICAgIGNhc2UgTlNTdHJlYW1F
dmVudEhhc1NwYWNlQXZhaWxhYmxlOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5TU3RyZWFt
RXZlbnRPcGVuQ29tcGxldGVkOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5TU3RyZWFtRXZl
bnRFbmRFbmNvdW50ZXJlZDoKLSAgICAgICAgW1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZENyYXNo
V2l0aE1lc3NhZ2U6bmlsXTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOU1N0cmVhbUV2ZW50
RXJyb3JPY2N1cnJlZDoKLSAgICAgICAgW1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZENyYXNoV2l0
aE1lc3NhZ2U6W1thU3RyZWFtIHN0cmVhbUVycm9yXSBkZXNjcmlwdGlvbl1dOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci19Ci0KLUBlbmQKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlv
dXRUZXN0UmVsYXkvTFRSZWxheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxh
eS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheS5oCShyZXZpc2lvbiAyMDk3ODQpCisrKyBUb29scy9M
YXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXkuaAkobm9uZXhpc3RlbnQpCkBA
IC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIExUUmVsYXlfaAotI2RlZmluZSBM
VFJlbGF5X2gKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLUBwcm90b2Nv
bCBMVFJlbGF5RGVsZWdhdGUgPE5TT2JqZWN0PgotLSAodm9pZClkaWRDb25uZWN0OwotLSAodm9p
ZClkaWREaXNjb25uZWN0OwotLSAodm9pZClkaWRDcmFzaFdpdGhNZXNzYWdlOihOU1N0cmluZyAq
KW1lc3NhZ2U7Ci0tICh2b2lkKWRpZFJlY2VpdmVTdGRvdXREYXRhOihOU0RhdGEgKilkYXRhOwot
LSAodm9pZClkaWRSZWNlaXZlU3RkZXJyRGF0YTooTlNEYXRhICopZGF0YTsKLUBlbmQKLQotQHBy
b3RvY29sIExUUmVsYXkgPE5TT2JqZWN0LCBOU1N0cmVhbURlbGVnYXRlPgotLSAodm9pZClzZXR1
cDsKLS0gKHZvaWQpdGVhckRvd247Ci0tICh2b2lkKWNvbm5lY3Q7Ci0tICh2b2lkKWRpc2Nvbm5l
Y3Q7Ci1AcHJvcGVydHkgKHdlYWspIGlkPExUUmVsYXlEZWxlZ2F0ZT4gcmVsYXlEZWxlZ2F0ZTsK
LUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNPdXRwdXRTdHJlYW0gKm91dHB1dFN0cmVh
bTsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVz
dFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVz
dFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAyMDk3
ODQpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250
cm9sbGVyLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5k
ZWYgTFRSZWxheUNvbnRyb2xsZXJfaAotI2RlZmluZSBMVFJlbGF5Q29udHJvbGxlcl9oCi0KLSNp
bXBvcnQgIkxUUmVsYXkuaCIKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0K
LUBjbGFzcyBTaW1EZXZpY2U7Ci0KLUBpbnRlcmZhY2UgTFRSZWxheUNvbnRyb2xsZXIgOiBOU09i
amVjdCA8TFRSZWxheURlbGVnYXRlPgotLSAoaWQpaW5pdFdpdGhEZXZpY2U6KFNpbURldmljZSAq
KWRldmljZSBwcm9kdWN0RGlyOihOU1N0cmluZyAqKXByb2R1Y3REaXIgYXBwUGF0aDooTlNTdHJp
bmcgKilhcHBQYXRoIGRldmljZVVESUQ6KE5TVVVJRCAqKXVkaWQgZHVtcFRvb2xBcmd1bWVudHM6
KE5TQXJyYXkgKilhcmd1bWVudHM7Ci0tICh2b2lkKXN0YXJ0OwotLSAodm9pZClmaW5pc2g7Ci1A
ZW5kCi0KLSNlbmRpZgpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxh
eS9MVFJlbGF5Q29udHJvbGxlci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxh
eS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIubQkocmV2aXNpb24gMjA5Nzg0KQor
KysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxl
ci5tCShub25leGlzdGVudCkKQEAgLTEsMjcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0
ICJMVFJlbGF5Q29udHJvbGxlci5oIgotCi0jaW1wb3J0ICJDb3JlU2ltdWxhdG9yU1BJLmgiCi0j
aW1wb3J0ICJMVFBpcGVSZWxheS5oIgotI2ltcG9ydCA8QXBwS2l0L0FwcEtpdC5oPgotI2ltcG9y
dCA8Y3J0X2V4dGVybnMuaD4KLQotQGludGVyZmFjZSBMVFJlbGF5Q29udHJvbGxlciAoKQotQHBy
b3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBkaXNwYXRjaF9zb3VyY2VfdCBzdGFuZGFyZElucHV0
RGlzcGF0Y2hTb3VyY2U7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TRmlsZUhhbmRs
ZSAqc3RhbmRhcmRPdXRwdXQ7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TRmlsZUhh
bmRsZSAqc3RhbmRhcmRFcnJvcjsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJp
bmcgKmlwY0lkZW50aWZpZXI7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TU3RyaW5n
ICphcHBCdW5kbGVJZGVudGlmaWVyOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU1N0
cmluZyAqYXBwUGF0aDsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNVVUlEICpkZXZp
Y2VVRElEOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU0FycmF5ICpkdW1wVG9vbEFy
Z3VtZW50czsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKnByb2R1Y3RE
aXI7Ci1AcHJvcGVydHkgKHN0cm9uZykgU2ltRGV2aWNlICpkZXZpY2U7Ci1AcHJvcGVydHkgKHN0
cm9uZykgaWQ8TFRSZWxheT4gcmVsYXk7Ci1AcHJvcGVydHkgcGlkX3QgcGlkOwotQHByb3BlcnR5
IChzdHJvbmcpIGRpc3BhdGNoX3NvdXJjZV90IGFwcERpc3BhdGNoU291cmNlOwotQGVuZAotCi1A
aW1wbGVtZW50YXRpb24gTFRSZWxheUNvbnRyb2xsZXIKLQotLSAoaWQpaW5pdFdpdGhEZXZpY2U6
KFNpbURldmljZSAqKWRldmljZSBwcm9kdWN0RGlyOihOU1N0cmluZyAqKXByb2R1Y3REaXIgYXBw
UGF0aDooTlNTdHJpbmcgKilhcHBQYXRoIGRldmljZVVESUQ6KE5TVVVJRCAqKXVkaWQgZHVtcFRv
b2xBcmd1bWVudHM6KE5TQXJyYXkgKilhcmd1bWVudHMKLXsKLSAgICBpZiAoKHNlbGYgPSBbc3Vw
ZXIgaW5pdF0pKSB7Ci0gICAgICAgIF9kZXZpY2UgPSBkZXZpY2U7Ci0gICAgICAgIF9wcm9kdWN0
RGlyID0gcHJvZHVjdERpcjsKLSAgICAgICAgX2FwcFBhdGggPSBhcHBQYXRoOwotICAgICAgICBf
YXBwQnVuZGxlSWRlbnRpZmllciA9IFtbTlNCdW5kbGUgYnVuZGxlV2l0aFBhdGg6YXBwUGF0aF0g
YnVuZGxlSWRlbnRpZmllcl07Ci0gICAgICAgIF9kZXZpY2VVRElEID0gdWRpZDsKLSAgICAgICAg
X2R1bXBUb29sQXJndW1lbnRzID0gYXJndW1lbnRzOwotICAgICAgICBfc3RhbmRhcmRJbnB1dERp
c3BhdGNoU291cmNlID0gZGlzcGF0Y2hfc291cmNlX2NyZWF0ZShESVNQQVRDSF9TT1VSQ0VfVFlQ
RV9SRUFELCBTVERJTl9GSUxFTk8sIDAsIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCkpOwotICAg
ICAgICBfc3RhbmRhcmRPdXRwdXQgPSBbTlNGaWxlSGFuZGxlIGZpbGVIYW5kbGVXaXRoU3RhbmRh
cmRPdXRwdXRdOwotICAgICAgICBfc3RhbmRhcmRFcnJvciA9IFtOU0ZpbGVIYW5kbGUgZmlsZUhh
bmRsZVdpdGhTdGFuZGFyZEVycm9yXTsKLQotICAgICAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2V2
ZW50X2hhbmRsZXIoX3N0YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJjZSwgXnsKLSAgICAgICAgICAg
IHVpbnQ4X3QgYnVmZmVyWzEwMjRdOwotICAgICAgICAgICAgc3NpemVfdCBsZW4gPSByZWFkKFNU
RElOX0ZJTEVOTywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7Ci0gICAgICAgICAgICBpZiAobGVu
ID4gMCkgewotICAgICAgICAgICAgICAgIEB0cnkgewotICAgICAgICAgICAgICAgICAgICBbW1tz
ZWxmIHJlbGF5XSBvdXRwdXRTdHJlYW1dIHdyaXRlOmJ1ZmZlciBtYXhMZW5ndGg6bGVuXTsKLSAg
ICAgICAgICAgICAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24gKmUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gQnJva2VuIHBpcGUgLSB0aGUgZHVtcCB0b29sIGNyYXNoZWQuIFRpbWUgdG8gZGll
LgotICAgICAgICAgICAgICAgICAgICBbc2VsZiBkaWRDcmFzaFdpdGhNZXNzYWdlOm5pbF07Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAv
LyBFT0YgUmVjZWl2ZWQgb24gdGhlIHJlbGF5J3Mgc3RhbmRhcmQgaW5wdXQuCi0gICAgICAgICAg
ICAgICAgW3NlbGYgZmluaXNoXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAg
ICAgX3JlbGF5ID0gW1tMVFBpcGVSZWxheSBhbGxvY10gaW5pdFdpdGhQcmVmaXg6W0AiL3RtcCIg
c3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OnNlbGYuaXBjSWRlbnRpZmllcl1dOwotICAg
ICAgICBbX3JlbGF5IHNldFJlbGF5RGVsZWdhdGU6c2VsZl07Ci0gICAgfQotICAgIHJldHVybiBz
ZWxmOwotfQotCi0tIChOU1N0cmluZyAqKWlwY0lkZW50aWZpZXIKLXsKLSAgICByZXR1cm4gW05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQC0lQCIsIHNlbGYuYXBwQnVuZGxlSWRlbnRpZmll
ciwgc2VsZi5kZXZpY2VVRElELlVVSURTdHJpbmddOwotfQotCi0tIChOU1N0cmluZyAqKXByb2Nl
c3NOYW1lCi17Ci0gICAgcmV0dXJuIFtzZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIgY29tcG9uZW50
c1NlcGFyYXRlZEJ5U3RyaW5nOkAiLiJdLmxhc3RPYmplY3Q7Ci19Ci0KLS0gKHZvaWQpZGlkUmVj
ZWl2ZVN0ZG91dERhdGE6KE5TRGF0YSAqKWRhdGEKLXsKLSAgICBAdHJ5IHsKLSAgICAgICAgW1tz
ZWxmIHN0YW5kYXJkT3V0cHV0XSB3cml0ZURhdGE6ZGF0YV07Ci0gICAgfSBAY2F0Y2ggKE5TRXhj
ZXB0aW9uICpleGNlcHRpb24pIHsKLSAgICAgICAgLy8gTlNGaWxlSGFuZGxlT3BlcmF0aW9uRXhj
ZXB0aW9uCi0gICAgICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhlIHRlc3QgaGFybmVzcyBzdG9wcGVk
IGxpc3RlbmluZyB0byB1cywKLSAgICAgICAgLy8gcHJvYmFibHkgYmVjYXVzZSB3ZSB0aW1lZCBv
dXQgb3IgYSBydW4gd2FzIGNhbmNlbGVkLgotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0g
ICAgfQotfQotCi0tICh2b2lkKWRpZFJlY2VpdmVTdGRlcnJEYXRhOihOU0RhdGEgKilkYXRhCi17
Ci0gICAgQHRyeSB7Ci0gICAgICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSB3cml0ZURhdGE6ZGF0
YV07Ci0gICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRpb24pIHsKLSAgICAgICAgLy8g
TlNGaWxlSGFuZGxlT3BlcmF0aW9uRXhjZXB0aW9uCi0gICAgICAgIC8vIEJyb2tlbiBwaXBlIC0g
dGhlIHRlc3QgaGFybmVzcyBzdG9wcGVkIGxpc3RlbmluZyB0byB1cywKLSAgICAgICAgLy8gcHJv
YmFibHkgYmVjYXVzZSB3ZSB0aW1lZCBvdXQgb3IgYSBydW4gd2FzIGNhbmNlbGVkLgotICAgICAg
ICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotfQotCi0tICh2b2lkKWRpZERpc2Nvbm5lY3QK
LXsKLSAgICBkaXNwYXRjaF9zdXNwZW5kKFtzZWxmIHN0YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJj
ZV0pOwotfQotCi0tICh2b2lkKWRpZENvbm5lY3QKLXsKLSAgICBkaXNwYXRjaF9yZXN1bWUoW3Nl
bGYgc3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNlXSk7Ci19Ci0KLS0gKHZvaWQpZGlkQ3Jhc2hX
aXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgW1tzZWxmIHJlbGF5XSBkaXNj
b25uZWN0XTsKLSAgICBOU1N0cmluZyAqY3Jhc2hNZXNzYWdlID0gW05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCJcbiNDUkFTSEVEIC0gJUAgKHBpZCAlZClcbiIsIFtzZWxmIHByb2Nlc3NOYW1l
XSwgW3NlbGYgcGlkXV07Ci0KLSAgICBpZiAobWVzc2FnZSkKLSAgICAgICAgY3Jhc2hNZXNzYWdl
ID0gW2NyYXNoTWVzc2FnZSBzdHJpbmdCeUFwcGVuZGluZ0Zvcm1hdDpAIiVAXG4iLCBtZXNzYWdl
XTsKLQotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSB3cml0ZURhdGE6W2NyYXNoTWVzc2FnZSBk
YXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ11dOwotICAgIFtbc2VsZiBzdGFu
ZGFyZEVycm9yXSBjbG9zZUZpbGVdOwotICAgIFtbc2VsZiBzdGFuZGFyZE91dHB1dF0gY2xvc2VG
aWxlXTsKLSAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci19Ci0KLS0gKHZvaWQpaW5zdGFsbEFwcAot
ewotICAgIE5TRGljdGlvbmFyeSAqaW5zdGFsbE9wdGlvbnMgPSBAewotICAgICAgICAoTlNTdHJp
bmcgKilrQ0ZCdW5kbGVJZGVudGlmaWVyS2V5OiBzZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIsCi0g
ICAgfTsKLQotICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOwotICAgIEJPT0wgaW5zdGFsbGVkID0g
W3NlbGYuZGV2aWNlIGluc3RhbGxBcHBsaWNhdGlvbjpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnNl
bGYuYXBwUGF0aF0gd2l0aE9wdGlvbnM6aW5zdGFsbE9wdGlvbnMgZXJyb3I6JmVycm9yXTsKLSAg
ICBpZiAoIWluc3RhbGxlZCkgewotICAgICAgICBOU0xvZyhAIkNvdWxkbid0IGluc3RhbGwgJUA6
ICVAIiwgc2VsZi5hcHBQYXRoLCBlcnJvci5kZXNjcmlwdGlvbik7Ci0gICAgICAgIGV4aXQoRVhJ
VF9GQUlMVVJFKTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpa2lsbEFwcAotewotICAgIGRpc3BhdGNo
X3NvdXJjZV90IGRpc3BhdGNoID0gW3NlbGYgYXBwRGlzcGF0Y2hTb3VyY2VdOwotCi0gICAgaWYg
KGRpc3BhdGNoKQotICAgICAgICBkaXNwYXRjaF9zb3VyY2VfY2FuY2VsKGRpc3BhdGNoKTsKLQot
ICAgIGlmIChbc2VsZiBwaWRdID4gMSkgewotICAgICAgICBraWxsKHNlbGYucGlkLCBTSUdLSUxM
KTsKLSAgICAgICAgW3NlbGYgc2V0UGlkOi0xXTsKLSAgICB9Ci0gICAgW3NlbGYgc2V0QXBwRGlz
cGF0Y2hTb3VyY2U6bmlsXTsKLX0KLQotLSAoTlNEaWN0aW9uYXJ5ICopX2Vudmlyb25tZW50VmFy
aWFibGVzCi17Ci0gICAgc3RhdGljIE5TRGljdGlvbmFyeSAqZW52aXJvbm1lbnRWYXJpYWJsZXM7
Ci0gICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlOwotCi0gICAgZGlzcGF0Y2hfb25jZSgm
b25jZSwgXnsKLSAgICAgICAgTlNTdHJpbmcgKnByb2R1Y3REaXJlY3RvcnkgPSBbc2VsZiBwcm9k
dWN0RGlyXTsKLQotICAgICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gW0B7
Ci0gICAgICAgICAgICBAIklQQ19JREVOVElGSUVSIjogc2VsZi5pcGNJZGVudGlmaWVyLAotICAg
ICAgICAgICAgQCJEWUxEX0ZSQU1FV09SS19QQVRIIjogcHJvZHVjdERpcmVjdG9yeSwKLSAgICAg
ICAgICAgIEAiX19YUENfRFlMRF9GUkFNRVdPUktfUEFUSCI6IHByb2R1Y3REaXJlY3RvcnksCi0g
ICAgICAgICAgICBAIkRZTERfTElCUkFSWV9QQVRIIjogcHJvZHVjdERpcmVjdG9yeSwKLSAgICAg
ICAgICAgIEAiX19YUENfRFlMRF9MSUJSQVJZX1BBVEgiOiBwcm9kdWN0RGlyZWN0b3J5LAotICAg
ICAgICB9IG11dGFibGVDb3B5XTsKLQotICAgICAgICBmb3IgKE5TU3RyaW5nICprZXlOYW1lIGlu
IEBbQCJEWUxEX0lOU0VSVF9MSUJSQVJJRVMiLCBAIk1hbGxvY1N0YWNrTG9nZ2luZyIsIEAiTE9D
QUxfUkVTT1VSQ0VfUk9PVCIsIEAiRFVNUFJFTkRFUlRSRUVfVEVNUCJdKSB7Ci0gICAgICAgICAg
ICBjb25zdCBjaGFyKiB2YWx1ZSA9IGdldGVudihba2V5TmFtZSBVVEY4U3RyaW5nXSk7Ci0gICAg
ICAgICAgICBpZiAodmFsdWUgJiYgc3RybGVuKHZhbHVlKSkgewotICAgICAgICAgICAgICAgIE5T
U3RyaW5nICpuc1ZhbHVlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnZhbHVlXTsK
LSAgICAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6bnNWYWx1ZSBmb3JLZXk6a2V5
TmFtZV07Ci0gICAgICAgICAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0Om5zVmFsdWUgZm9y
S2V5OltAIl9fWFBDXyIgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6a2V5TmFtZV1dOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChjaGFyKiogZW52cCA9ICpfTlNHZXRF
bnZpcm9uKCk7ICplbnZwOyBlbnZwKyspIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVudiA9
ICplbnZwOwotICAgICAgICAgICAgaWYgKCFzdHJuY21wKCJKU0NfIiwgZW52LCA0KSB8fCAhc3Ry
bmNtcCgiX19YUENfSlNDXyIsIGVudiwgMTApKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hh
ciogZXF1YWwgPSBzdHJjaHIoZW52LCAnPScpOwotICAgICAgICAgICAgICAgIGlmICghZXF1YWwp
IHsKLSAgICAgICAgICAgICAgICAgICAgTlNMb2coQCJNaXNzaW5nICc9JyBpbiBlbnYgdmFyICcl
cyciLCBlbnYpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heEtleUxlbmd0aCA9
IDI1NjsKLSAgICAgICAgICAgICAgICBzaXplX3Qga2V5TGVuZ3RoID0gZXF1YWwgLSBlbnY7Ci0g
ICAgICAgICAgICAgICAgaWYgKGtleUxlbmd0aCA+PSBtYXhLZXlMZW5ndGgpIHsKLSAgICAgICAg
ICAgICAgICAgICAgTlNMb2coQCJFbnYgdmFyICclcycgaXMgdG9vIGxvbmciLCBlbnYpOwotICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICBjaGFyIGtleVttYXhLZXlMZW5ndGhdOwotICAgICAgICAgICAgICAgIHN0cm5jcHko
a2V5LCBlbnYsIGtleUxlbmd0aCk7Ci0gICAgICAgICAgICAgICAga2V5W2tleUxlbmd0aF0gPSAn
XDAnOwotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhbHVlID0gZXF1YWwgKyAxOwotCi0g
ICAgICAgICAgICAgICAgTlNTdHJpbmcgKm5zS2V5ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4
U3RyaW5nOmtleV07Ci0gICAgICAgICAgICAgICAgTlNTdHJpbmcgKm5zVmFsdWUgPSBbTlNTdHJp
bmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6dmFsdWVdOwotICAgICAgICAgICAgICAgIFtkaWN0aW9u
YXJ5IHNldE9iamVjdDpuc1ZhbHVlIGZvcktleTpuc0tleV07Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICBlbnZpcm9ubWVudFZhcmlhYmxlcyA9IFtkaWN0aW9uYXJ5IGNvcHld
OwotICAgIH0pOwotCi0gICAgcmV0dXJuIGVudmlyb25tZW50VmFyaWFibGVzOwotfQotCi0tICh2
b2lkKWxhdW5jaEFwcAotewotICAgIE5TRGljdGlvbmFyeSAqbGF1bmNoT3B0aW9ucyA9IEB7Ci0g
ICAgICAgIGtTaW1EZXZpY2VMYXVuY2hBcHBsaWNhdGlvbkVudmlyb25tZW50OiBbc2VsZiBfZW52
aXJvbm1lbnRWYXJpYWJsZXNdLAotICAgICAgICBrU2ltRGV2aWNlTGF1bmNoQXBwbGljYXRpb25B
cmd1bWVudHM6IFtzZWxmIGR1bXBUb29sQXJndW1lbnRzXSwKLSAgICB9OwotCi0gICAgTlNFcnJv
ciAqZXJyb3I7Ci0gICAgcGlkX3QgcGlkID0gW3NlbGYuZGV2aWNlIGxhdW5jaEFwcGxpY2F0aW9u
V2l0aElEOnNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciBvcHRpb25zOmxhdW5jaE9wdGlvbnMgZXJy
b3I6JmVycm9yXTsKLQotICAgIGlmIChwaWQgPCAwKSB7Ci0gICAgICAgIE5TTG9nKEAiQ291bGRu
J3QgbGF1bmNoICVAOiAlQCIsIHNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciwgZXJyb3IuZGVzY3Jp
cHRpb24pOwotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotCi0gICAgW3NlbGYg
c2V0UGlkOnBpZF07Ci0KLSAgICBkaXNwYXRjaF9xdWV1ZV90IHF1ZXVlID0gZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKTsKLSAgICBkaXNwYXRjaF9zb3VyY2VfdCBzaW11bGF0b3JBcHBFeGl0RGlz
cGF0Y2hTb3VyY2UgPSBkaXNwYXRjaF9zb3VyY2VfY3JlYXRlKERJU1BBVENIX1NPVVJDRV9UWVBF
X1BST0MsIFtzZWxmIHBpZF0sIERJU1BBVENIX1BST0NfRVhJVCwgcXVldWUpOwotICAgIFtzZWxm
IHNldEFwcERpc3BhdGNoU291cmNlOnNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZV07Ci0g
ICAgZGlzcGF0Y2hfc291cmNlX3NldF9ldmVudF9oYW5kbGVyKHNpbXVsYXRvckFwcEV4aXREaXNw
YXRjaFNvdXJjZSwgXnsKLSAgICAgICAgZGlzcGF0Y2hfc291cmNlX2NhbmNlbChzaW11bGF0b3JB
cHBFeGl0RGlzcGF0Y2hTb3VyY2UpOwotICAgICAgICBbc2VsZiBkaWRDcmFzaFdpdGhNZXNzYWdl
Om5pbF07Ci0gICAgfSk7Ci0gICAgZGlzcGF0Y2hfcmVzdW1lKHNpbXVsYXRvckFwcEV4aXREaXNw
YXRjaFNvdXJjZSk7Ci19Ci0KLS0gKHZvaWQpc3RhcnQKLXsKLSAgICBbc2VsZiBpbnN0YWxsQXBw
XTsKLSAgICBbW3NlbGYgcmVsYXldIHNldHVwXTsKLSAgICBbc2VsZiBsYXVuY2hBcHBdOwotICAg
IFtbc2VsZiByZWxheV0gY29ubmVjdF07Ci19Ci0KLS0gKHZvaWQpZmluaXNoCi17Ci0gICAgW1tz
ZWxmIHJlbGF5XSBkaXNjb25uZWN0XTsKLSAgICBbc2VsZiBraWxsQXBwXTsKLSAgICBleGl0KEVY
SVRfU1VDQ0VTUyk7Ci19Ci0KLUBlbmQKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlv
dXRUZXN0UmVsYXkvbWFpbi5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9M
YXlvdXRUZXN0UmVsYXkvbWFpbi5tCShyZXZpc2lvbiAyMDk3ODQpCisrKyBUb29scy9MYXlvdXRU
ZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L21haW4ubQkobm9uZXhpc3RlbnQpCkBAIC0xLDEzMyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiQ29yZVNpbXVsYXRvclNQSS5oIgot
I2ltcG9ydCAiTFRSZWxheUNvbnRyb2xsZXIuaCIKLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRh
dGlvbi5oPgotCi1zdGF0aWMgTFRSZWxheUNvbnRyb2xsZXIgKnJlbGF5Q29udHJvbGxlcjsKLQot
dm9pZCB1c2FnZSgpCi17Ci0gICAgTlNTdHJpbmcgKmhlbHBUZXh0ID0gQCJMYXlvdXRUZXN0UmVs
YXk6IHJ1biBhIGR1bXAgdG9vbCBpbiB0aGUgc2ltdWxhdG9yLiBOb3QgZm9yIGRpcmVjdCBjb25z
dW1wdGlvbi5cbiIKLSAgICAgICAgIlVzYWdlOiBMYXlvdXRUZXN0UmVsYXkgWy1oXSBbb3B0aW9u
c10gLS0gW2R1bXAgdG9vbCBhcmd1bWVudHNdXG4iCi0gICAgICAgICJSZXF1aXJlZCBvcHRpb25z
OlxuIgotICAgICAgICAiICAgIC11ZGlkIDxpZGVudGlmaWVyPiAgICAgICBTaW11bGF0b3IgZGV2
aWNlIGlkZW50aWZpZXJcbiIKLSAgICAgICAgIiAgICAtYXBwIDxhcHBfcGF0aD4gICAgICAgICAg
UGF0aCB0byB0aGUgYnVpbHQgaU9TIC5hcHAgYnVuZGxlIGRpcmVjdG9yeS5cbiIKLSAgICAgICAg
IiAgICAtcHJvZHVjdERpciA8ZGlyPiAgICAgICAgL3BhdGgvdG8vV2ViS2l0QnVpbGQve2NvbmZp
Z3VyYXRpb259LXtzaG9ydCBwbGF0Zm9ybX0uXG4iOwotCi0gICAgZnByaW50ZihzdGRlcnIsICIl
c1xuIiwgW2hlbHBUZXh0IFVURjhTdHJpbmddKTsKLX0KLQotTlNTdHJpbmcgKmdldFJlcXVpcmVk
U3RyaW5nQXJndW1lbnQoTlNTdHJpbmcgKnBhcmFtZXRlcikKLXsKLSAgICBOU1VzZXJEZWZhdWx0
cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdOwotICAg
IE5TU3RyaW5nICphcmd1bWVudCA9IFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6cGFyYW1ldGVyXTsK
LQotICAgIGlmICghYXJndW1lbnQpIHsKLSAgICAgICAgTlNMb2coQCItJUAgaXMgcmVxdWlyZWQu
IiwgcGFyYW1ldGVyKTsKLSAgICAgICAgdXNhZ2UoKTsKLSAgICAgICAgZXhpdChFWElUX0ZBSUxV
UkUpOwotICAgIH0KLSAgICByZXR1cm4gYXJndW1lbnQ7Ci19Ci0KLU5TQXJyYXkgKmdldER1bXBU
b29sQXJndW1lbnRzKCkKLXsKLSAgICBOU011dGFibGVBcnJheSAqZHVtcFRvb2xBcmd1bWVudHMg
PSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKLSAgICBOU0FycmF5ICpwcm9jZXNzQXJn
cyA9IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gYXJndW1lbnRzXTsKLSAgICBCT09MIGFw
cGVuZGluZyA9IE5POwotICAgIGZvciAoTlNTdHJpbmcgKmFyZyBpbiBwcm9jZXNzQXJncykgewot
ICAgICAgICBpZiAoW2FyZyBpc0VxdWFsVG9TdHJpbmc6QCItLSJdKSB7Ci0gICAgICAgICAgICBh
cHBlbmRpbmcgPSBZRVM7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoYXBwZW5kaW5nKQotICAgICAgICAgICAgW2R1bXBUb29sQXJndW1lbnRzIGFkZE9iamVj
dDphcmddOwotICAgIH0KLSAgICByZXR1cm4gZHVtcFRvb2xBcmd1bWVudHM7Ci19Ci0KLXZvaWQg
ZmluaXNoKCkKLXsKLSAgICBbcmVsYXlDb250cm9sbGVyIGZpbmlzaF07Ci19Ci0KLXZvaWQgcmVj
ZWl2ZWRTaWduYWwoaW50IHNpZ25hbCkKLXsKLSAgICBleGl0KEVYSVRfU1VDQ0VTUyk7Ci19Ci0K
LWludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICogYXJndltdKQotewotICAgIEBhdXRvcmVs
ZWFzZXBvb2wgewotICAgICAgICBOU0FycmF5ICpoZWxwQXJndW1lbnRzID0gQFtAIi1oIiwgQCIt
LWhlbHAiXTsKLSAgICAgICAgZm9yIChOU1N0cmluZyAqaGVscEFyZ3VtZW50IGluIGhlbHBBcmd1
bWVudHMpIHsKLSAgICAgICAgICAgIGlmIChbW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBh
cmd1bWVudHNdIGluZGV4T2ZPYmplY3Q6aGVscEFyZ3VtZW50XSAhPSBOU05vdEZvdW5kKSB7Ci0g
ICAgICAgICAgICAgICAgdXNhZ2UoKTsKLSAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVS
RSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotI2lmIFVTRV9TSU1fU0VSVklDRV9DT05U
RVhUCi0gICAgICAgIE5TU3RyaW5nICpkZXZlbG9wZXJEaXJlY3RvcnkgPSBnZXRSZXF1aXJlZFN0
cmluZ0FyZ3VtZW50KEAiZGV2ZWxvcGVyRGlyIik7Ci0jZW5kaWYKLSAgICAgICAgTlNVVUlEICp1
ZGlkID0gW1tOU1VVSUQgYWxsb2NdIGluaXRXaXRoVVVJRFN0cmluZzpnZXRSZXF1aXJlZFN0cmlu
Z0FyZ3VtZW50KEAidWRpZCIpXTsKLSAgICAgICAgTlNTdHJpbmcgKmFwcFBhdGggPSBnZXRSZXF1
aXJlZFN0cmluZ0FyZ3VtZW50KEAiYXBwIik7Ci0gICAgICAgIE5TU3RyaW5nICpwcm9kdWN0RGly
ZWN0b3J5ID0gZ2V0UmVxdWlyZWRTdHJpbmdBcmd1bWVudChAInByb2R1Y3REaXIiKTsKLSAgICAg
ICAgTlNBcnJheSAqZHVtcFRvb2xBcmd1bWVudHMgPSBnZXREdW1wVG9vbEFyZ3VtZW50cygpOwot
Ci0jaWYgVVNFX1NJTV9TRVJWSUNFX0NPTlRFWFQKLSAgICAgICAgTlNFcnJvciAqZXJyb3I7Ci0g
ICAgICAgIFNpbVNlcnZpY2VDb250ZXh0ICpzZXJ2aWNlQ29udGV4dCA9IFtTaW1TZXJ2aWNlQ29u
dGV4dCBzaGFyZWRTZXJ2aWNlQ29udGV4dEZvckRldmVsb3BlckRpcjpkZXZlbG9wZXJEaXJlY3Rv
cnkgZXJyb3I6JmVycm9yXTsKLSAgICAgICAgaWYgKCFzZXJ2aWNlQ29udGV4dCkgewotICAgICAg
ICAgICAgTlNMb2coQCJEZXZpY2UgY29udGV4dCBjb3VsZG4ndCBiZSBmb3VuZDogJUAiLCBlcnJv
cik7Ci0gICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgIH0KLSAgICAgICAg
U2ltRGV2aWNlU2V0ICpkZXZpY2VTZXQgPSBbc2VydmljZUNvbnRleHQgZGVmYXVsdERldmljZVNl
dFdpdGhFcnJvcjpuaWxdOwotICAgICAgICBpZiAoIWRldmljZVNldCkgewotICAgICAgICAgICAg
TlNMb2coQCJEZWZhdWx0IGRldmljZSBzZXQgY291bGRuJ3QgYmUgZm91bmQ6ICVAIiwgZXJyb3Ip
OwotICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0gICAgICAgIFNp
bURldmljZSAqZGV2aWNlID0gW2RldmljZVNldC5kZXZpY2VzQnlVRElEIG9iamVjdEZvcktleTp1
ZGlkXTsKLSNlbHNlCi0gICAgICAgIFNpbURldmljZSAqZGV2aWNlID0gW1NpbURldmljZVNldC5k
ZWZhdWx0U2V0LmRldmljZXNCeVVESUQgb2JqZWN0Rm9yS2V5OnVkaWRdOwotI2VuZGlmCi0gICAg
ICAgIGlmICghZGV2aWNlKSB7Ci0gICAgICAgICAgICBOU0xvZyhAIkRldmljZSAlQCBjb3VsZG4n
dCBiZSBmb3VuZCIsIHVkaWQpOwotICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcmVsYXlDb250cm9sbGVyID0gW1tMVFJlbGF5Q29udHJvbGxlciBh
bGxvY10gaW5pdFdpdGhEZXZpY2U6ZGV2aWNlIHByb2R1Y3REaXI6cHJvZHVjdERpcmVjdG9yeSBh
cHBQYXRoOmFwcFBhdGggZGV2aWNlVURJRDp1ZGlkIGR1bXBUb29sQXJndW1lbnRzOmR1bXBUb29s
QXJndW1lbnRzXTsKLSAgICAgICAgW3JlbGF5Q29udHJvbGxlciBzdGFydF07Ci0KLSAgICAgICAg
YXRleGl0KGZpbmlzaCk7Ci0gICAgICAgIHNpZ25hbChTSUdJTlQsIHJlY2VpdmVkU2lnbmFsKTsK
LSAgICAgICAgc2lnbmFsKFNJR1RFUk0sIHJlY2VpdmVkU2lnbmFsKTsKLQotICAgICAgICBbW05T
UnVuTG9vcCBtYWluUnVuTG9vcF0gcnVuXTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19CkluZGV4
OiBUb29scy9TY3JpcHRzL2J1aWxkLWxheW91dHRlc3RyZWxheQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL2J1aWxkLWxheW91dHRlc3RyZWxheQkocmV2aXNpb24gMjA5Nzg0KQorKysgVG9v
bHMvU2NyaXB0cy9idWlsZC1sYXlvdXR0ZXN0cmVsYXkJKG5vbmV4aXN0ZW50KQpAQCAtMSw3MCAr
MCwwIEBACi0jIS91c3IvYmluL3BlcmwgLXcKLQotIyBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSMgYXJlIG1ldDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSMgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0jIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0jIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi11c2Ugc3RyaWN0OwotdXNlIEZpbGU6OkJhc2VuYW1lOwotdXNlIEZp
bmRCaW47Ci11c2UgR2V0b3B0OjpMb25nIHF3KDpjb25maWcgcGFzc190aHJvdWdoKTsKLXVzZSBs
aWIgJEZpbmRCaW46OkJpbjsKLXVzZSB3ZWJraXRkaXJzOwotCi1teSAkc2hvd0hlbHAgPSAwOwot
bXkgJGNsZWFuID0gMDsKLQotbXkgJHByb2dyYW1OYW1lID0gYmFzZW5hbWUoJDApOwotbXkgJHVz
YWdlID0gPDxFT0Y7Ci1Vc2FnZTogJHByb2dyYW1OYW1lIFtvcHRpb25zXSBbb3B0aW9ucyB0byBw
YXNzIHRvIGJ1aWxkIHN5c3RlbV0KLSAgLS1oZWxwICAgICAgICBTaG93IHRoaXMgaGVscCBtZXNz
YWdlCi0gIC0tY2xlYW4gICAgICAgQ2xlYW4gdXAgdGhlIGJ1aWxkIGRpcmVjdG9yeQotRU9GCi0K
LW15ICRyZXN1bHQgPSBHZXRPcHRpb25zKAotICAgICdoZWxwJyA9PiBcJHNob3dIZWxwLAotICAg
ICdjbGVhbicgPT4gXCRjbGVhbiwKLSk7Ci0KLWlmICgkc2hvd0hlbHAgb3Igbm90ICRyZXN1bHQp
IHsKLSAgIHByaW50IFNUREVSUiAkdXNhZ2U7Ci0gICBleGl0IDE7Ci19Ci0KLWNoZWNrUmVxdWly
ZWRTeXN0ZW1Db25maWcoKTsKLXNldENvbmZpZ3VyYXRpb24oKTsKLWNoZGlyV2ViS2l0KCk7Ci0K
LWNoZGlyICJUb29scy9MYXlvdXRUZXN0UmVsYXkiIG9yIGRpZTsKLQotIyBGSVhNRTogVGhpcyB0
b29sIGlzIG9ubHkgdXNlZnVsIHdoZW4gYnVpbGRpbmcgV2ViS2l0IGZvciBpT1MgU2ltdWxhdG9y
LiBGb3Igbm93LAotIyAgICAgICAgdG8gYXZvaWQgYnJlYWtpbmcgc29tZSBBcHBsZSBJbnRlcm5h
bCB0b29scyB3ZSBzdXBwb3J0IGNhbGxpbmcgdGhpcyBzY3JpcHQKLSMgICAgICAgIHdpdGhvdXQg
LS1pb3Mtc2ltdWxhdG9yIHNvIGxvbmcgYXMgd2UgYXJlIGJ1aWxkaW5nIG9uIGEgTWFjLgotaWYg
KGlzQXBwbGVNYWNXZWJLaXQoKSAmJiAhd2lsbFVzZUlPU0RldmljZVNESygpKSB7Ci0gICAgIyBG
SVhNRTogQ2hhbmdpbmcgU0RLIGF0IHRoaXMgcG9pbnQgcmVzdWx0cyBpbiBhbiBpbmNvbnNpc3Rl
bnQgd2Via2l0ZGlycyBzdGF0ZS4KLSAgICAjIFdlIHNob3VsZCBtYWtlIGl0IHNvIHRoYXQgd2Vi
a2l0ZGlycyBmdW5jdGlvbnMgbmV2ZXIgc2VlIHRoZSB3cm9uZyBTREsuCi0gICAgc2V0WGNvZGVT
REsodW5kZWYpOyAjIEZvcmNlIHVzZSBvZiBNYWMgU0RLIGlmIC0taW9zLXNpbXVsYXRvciB3YXMg
cGFzc2VkCi0gICAgZXhpdCBleGl0U3RhdHVzKGJ1aWxkWENvZGVQcm9qZWN0KCJMYXlvdXRUZXN0
UmVsYXkiLCAkY2xlYW4sIFhjb2RlT3B0aW9ucygpLCBAQVJHVikpOwotfQotCi1wcmludCBTVERF
UlIgIkxheW91dFRlc3RSZWxheSBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgaU9TIFNpbXVsYXRvci5c
biI7Ci1leGl0IDE7CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBUb29scy9TY3JpcHRzL2J1aWxkLWxh
eW91dHRlc3RyZWxheQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0xICsw
LDAgIyMKLSoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogVG9vbHMvU2Ny
aXB0cy9idWlsZC13ZWJraXQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJr
aXQJKHJldmlzaW9uIDIwOTc4NCkKKysrIFRvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDAsMTAgKzIwMCw2IEBAIGlmIChpc0FwcGxlTWFjV2ViS2l0KCkpIHsK
ICAgICAgICAgcHVzaCBAY29weUxpYnJhcmllc0FyZ3MsIHByb2R1Y3REaXIoKTsKICAgICAgICAg
cHJpbnQoam9pbigiICIsIEBjb3B5TGlicmFyaWVzQXJncykgLiAiXG4iKTsKICAgICAgICAgKHN5
c3RlbShAY29weUxpYnJhcmllc0FyZ3MpID09IDApIG9yIGRpZTsKLQotICAgICAgICBpZiAod2ls
bFVzZUlPU1NpbXVsYXRvclNESygpKSB7Ci0gICAgICAgICAgICAoc3lzdGVtKCJwZXJsIiwgIlRv
b2xzL1NjcmlwdHMvYnVpbGQtbGF5b3V0dGVzdHJlbGF5IiwgYXJndW1lbnRzRm9yQ29uZmlndXJh
dGlvbigpKSA9PSAwKSBvciBkaWU7Ci0gICAgICAgIH0KICAgICB9CiAKICAgICAjIEJ1aWxkIFRv
b2xzIG5lZWRlZCBmb3IgQXBwbGUgcG9ydHMKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL2lwY19waXBlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL2lwY19waXBlLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL2lwY19waXBlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIxIEBACisj
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgZXJybm8KK2ltcG9y
dCBpbworaW1wb3J0IG9zCitpbXBvcnQgUXVldWUKK2ltcG9ydCBzZWxlY3QKK2ltcG9ydCBzaWdu
YWwKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCisKK2lmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRo
KCd3aW4nKToKKyAgICBpbXBvcnQgbXN2Y3J0CisgICAgaW1wb3J0IHdpbjMycGlwZQorICAgIGlt
cG9ydCB3aW4zMmZpbGUKK2Vsc2U6CisgICAgaW1wb3J0IGZjbnRsCisgICAgaW1wb3J0IHNvY2tl
dAorCisKK2NsYXNzIFVuaXhQaXBlU2VydmVyKG9iamVjdCk6CisKKyAgICBCVUZGRVIgPSA0MDk2
CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCk6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9y
bS5zdGFydHN3aXRoKCd3aW4nKToKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ1VuaXhQaXBl
U2VydmVyIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtJykKKyAgICAgICAgc2VsZi5f
cGF0aCA9IHBhdGgKKyAgICAgICAgc2VsZi5fY29ubmVjdGVkID0gRmFsc2UKKworICAgICAgICB0
cnk6CisgICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5fcGF0aCkKKyAgICAgICAgZXhjZXB0IE9T
RXJyb3I6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLl9wYXRoKToKKyAgICAg
ICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJDb3VsZCBub3QgdW5saW5rICciICsgc2VsZi5fcGF0
aCArICInLCB0aGUgdGFyZ2V0IHBhdGggaXMgYSBmaWxlIG5vdCBhIHBpcGUuIikKKworICAgICAg
ICBzZWxmLl9zb2NrZXQgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYLCBzb2NrZXQuU09D
S19TVFJFQU0pCisgICAgICAgIHNlbGYuX3NvY2tldC5zZXR0aW1lb3V0KDE1KQorICAgICAgICBz
ZWxmLl9zb2NrZXQuYmluZChzZWxmLl9wYXRoKQorICAgICAgICBzZWxmLl9zb2NrZXQubGlzdGVu
KDApCisKKyAgICBkZWYgY29ubmVjdChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fY29ubmVjdGVk
OgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2Vs
Zi5fY29ubmVjdGlvbiwgc2VsZi5fYWRkcmVzcyA9IHNlbGYuX3NvY2tldC5hY2NlcHQoKQorICAg
ICAgICAgICAgc2VsZi5fY29ubmVjdGlvbi5zZXRibG9ja2luZygwKQorICAgICAgICAgICAgc2Vs
Zi5fY29ubmVjdGVkID0gVHJ1ZQorICAgICAgICBleGNlcHQgc29ja2V0LnRpbWVvdXQ6CisgICAg
ICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBkaXNj
b25uZWN0KHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fY29ubmVjdGVkOgorICAgICAgICAg
ICAgcmV0dXJuCisgICAgICAgIHNlbGYuX3NvY2tldC5jbG9zZSgpCisgICAgICAgIHNlbGYuX2Nv
bm5lY3RlZCA9IEZhbHNlCisKKyAgICBkZWYgcmVhZChzZWxmKToKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgZGF0YSA9IHNlbGYuX2Nvbm5lY3Rpb24ucmVjdihzZWxmLkJVRkZFUikKKyAgICAg
ICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEKKyAgICAgICAgZXhj
ZXB0IHNvY2tldC5lcnJvciwgZToKKyAgICAgICAgICAgIGVyciA9IGUuYXJnc1swXQorICAgICAg
ICAgICAgaWYgZXJyID09IGVycm5vLkVBR0FJTiBvciBlcnIgPT0gZXJybm8uRVdPVUxEQkxPQ0s6
CisgICAgICAgICAgICAgICAgcmV0dXJuIFtdCisgICAgICAgIHNlbGYuZGlzY29ubmVjdCgpCisg
ICAgICAgIHJldHVybiBbXQorCisgICAgZGVmIHNlbmQoc2VsZiwgZGF0YSk6CisgICAgICAgIGlm
IG5vdCBzZWxmLl9jb25uZWN0ZWQ6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAg
c2VsZi5fY29ubmVjdGlvbi5zZW5kKGRhdGEpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBk
ZWYgcGF0aChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BhdGgKKworICAgIGRlZiBpc0Nv
bm5lY3RlZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Nvbm5lY3RlZAorCisKK2NsYXNz
IEFic3RyYWN0UGlwZShvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAg
ICBzZWxmLmNsZWFuKCkKKworICAgIGRlZiBjb25uZWN0KHNlbGYpOgorICAgICAgICByZXR1cm4g
c2VsZi5pc0Nvbm5lY3RlZCgpCisKKyAgICBkZWYgY2xlYW4oc2VsZik6CisgICAgICAgIHNlbGYu
X3N0ZG91dFN0cmVhbSA9IGlvLkJ5dGVzSU8oKQorICAgICAgICBzZWxmLl9zdGRlcnJTdHJlYW0g
PSBpby5CeXRlc0lPKCkKKyAgICAgICAgc2VsZi5fc3Rkb3V0VHJjID0gMAorICAgICAgICBzZWxm
Ll9zdGRlcnJUcmMgPSAwCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHJldHVybiBu
b3Qgc2VsZi5pc0Nvbm5lY3RlZCgpCisKKyAgICBkZWYgc2VuZChzZWxmLCBkYXRhKToKKyAgICAg
ICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgaXNDb25uZWN0ZWQoc2VsZik6CisgICAgICAgIHJl
dHVybiBGYWxzZQorCisgICAgZGVmIF9wYXJzZU1lc3NhZ2Uoc2VsZiwgaXNCbG9ja2luZz1GYWxz
ZSk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHJlYWRMaW5lKHNlbGYsIGlzQmxv
Y2tpbmc9RmFsc2UpOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgZXJyID0gc2Vs
Zi5zdGRlcnJSZWFkKCkKKyAgICAgICAgICAgIGlmIGVycjoKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyCisgICAgICAgICAgICBvdXQgPSBzZWxmLnN0ZG91dFJlYWQoKQorICAgICAgICAgICAg
aWYgb3V0OgorICAgICAgICAgICAgICAgIHJldHVybiBvdXQKKyAgICAgICAgICAgIHNlbGYuX3Bh
cnNlTWVzc2FnZShpc0Jsb2NraW5nKQorICAgICAgICAgICAgaWYgbm90IGlzQmxvY2tpbmc6Cisg
ICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBzdGRv
dXRSZWFkKHNlbGYsIGlzQmxvY2tpbmc9RmFsc2UpOgorICAgICAgICB0cmllZE9uY2UgPSBGYWxz
ZQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgc2VsZi5fc3Rkb3V0U3RyZWFtLnNl
ZWsoc2VsZi5fc3Rkb3V0VHJjLCBpby5TRUVLX1NFVCkKKyAgICAgICAgICAgIGRhdGEgPSBzZWxm
Ll9zdGRvdXRTdHJlYW0ucmVhZGxpbmUoKQorICAgICAgICAgICAgaWYgZGF0YSBhbmQgZGF0YVst
MV0gPT0gJ1xuJzoKKyAgICAgICAgICAgICAgICBzZWxmLl9zdGRvdXRUcmMgPSBzZWxmLl9zdGRv
dXRUcmMgKyBsZW4oZGF0YSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZGF0YQorICAgICAgICAg
ICAgc2VsZi5fcGFyc2VNZXNzYWdlKGlzQmxvY2tpbmcpCisgICAgICAgICAgICBpZiBub3QgaXNC
bG9ja2luZyBhbmQgdHJpZWRPbmNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAg
ICB0cmllZE9uY2UgPSBUcnVlCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgc3RkZXJy
UmVhZChzZWxmLCBpc0Jsb2NraW5nPUZhbHNlKToKKyAgICAgICAgdHJpZWRPbmNlID0gRmFsc2UK
KyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHNlbGYuX3N0ZGVyclN0cmVhbS5zZWVr
KHNlbGYuX3N0ZGVyclRyYywgaW8uU0VFS19TRVQpCisgICAgICAgICAgICBkYXRhID0gc2VsZi5f
c3RkZXJyU3RyZWFtLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGlmIGRhdGEgYW5kIGRhdGFbLTFd
ID09ICdcbic6CisgICAgICAgICAgICAgICAgc2VsZi5fc3RkZXJyVHJjID0gc2VsZi5fc3RkZXJy
VHJjICsgbGVuKGRhdGEpCisgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEKKyAgICAgICAgICAg
IHNlbGYuX3BhcnNlTWVzc2FnZShpc0Jsb2NraW5nKQorICAgICAgICAgICAgaWYgbm90IGlzQmxv
Y2tpbmcgYW5kIHRyaWVkT25jZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAg
dHJpZWRPbmNlID0gVHJ1ZQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHJlYWRCdWZm
ZXJTdGRvdXQoc2VsZik6CisgICAgICAgIHNlbGYuX3N0ZG91dFN0cmVhbS5zZWVrKDAsIGlvLlNF
RUtfRU5EKQorICAgICAgICBlbmRWYWwgPSBzZWxmLl9zdGRvdXRTdHJlYW0udGVsbCgpCisgICAg
ICAgIGlmIGVuZFZhbCA8PSBzZWxmLl9zdGRvdXRUcmM6CisgICAgICAgICAgICByZXR1cm4gJycK
KyAgICAgICAgc2VsZi5fc3Rkb3V0U3RyZWFtLnNlZWsoc2VsZi5fc3Rkb3V0VHJjLCBpby5TRUVL
X1NFVCkKKyAgICAgICAgc2l6ZSA9IGVuZFZhbCAtIHNlbGYuX3N0ZG91dFRyYworICAgICAgICBz
ZWxmLl9zdGRvdXRUcmMgPSBlbmRWYWwKKyAgICAgICAgcmV0dXJuIHNlbGYuX3N0ZG91dFN0cmVh
bS5yZWFkKHNpemUpCisKKyAgICBkZWYgcmVhZEJ1ZmZlclN0ZGVycihzZWxmKToKKyAgICAgICAg
c2VsZi5fc3RkZXJyU3RyZWFtLnNlZWsoMCwgaW8uU0VFS19FTkQpCisgICAgICAgIGVuZFZhbCA9
IHNlbGYuX3N0ZGVyclN0cmVhbS50ZWxsKCkKKyAgICAgICAgaWYgZW5kVmFsIDw9IHNlbGYuX3N0
ZGVyclRyYzoKKyAgICAgICAgICAgIHJldHVybiAnJworICAgICAgICBzZWxmLl9zdGRlcnJTdHJl
YW0uc2VlayhzZWxmLl9zdGRlcnJUcmMsIGlvLlNFRUtfU0VUKQorICAgICAgICBzaXplID0gZW5k
VmFsIC0gc2VsZi5fc3RkZXJyVHJjCisgICAgICAgIHNlbGYuX3N0ZGVyclRyYyA9IGVuZFZhbAor
ICAgICAgICByZXR1cm4gc2VsZi5fc3RkZXJyU3RyZWFtLnJlYWQoc2l6ZSkKKworICAgIGRlZiBy
ZWFkQmxvY2tTdGRvdXQoc2VsZiwgc2l6ZSwgaXNCbG9ja2luZz1GYWxzZSk6CisgICAgICAgIHRy
aWVkT25jZSA9IEZhbHNlCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBzZWxmLl9z
dGRvdXRTdHJlYW0uc2VlaygwLCBpby5TRUVLX0VORCkKKyAgICAgICAgICAgIGlmIHNlbGYuX3N0
ZG91dFN0cmVhbS50ZWxsKCkgLSBzZWxmLl9zdGRvdXRUcmMgPj0gc2l6ZToKKyAgICAgICAgICAg
ICAgICBzZWxmLl9zdGRvdXRTdHJlYW0uc2VlayhzZWxmLl9zdGRvdXRUcmMsIGlvLlNFRUtfU0VU
KQorICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9zdGRvdXRTdHJlYW0ucmVhZChzaXplKQor
ICAgICAgICAgICAgICAgIHNlbGYuX3N0ZG91dFRyYyA9IHNlbGYuX3N0ZG91dFRyYyArIHNpemUK
KyAgICAgICAgICAgICAgICByZXR1cm4gZGF0YQorICAgICAgICAgICAgc2VsZi5fcGFyc2VNZXNz
YWdlKGlzQmxvY2tpbmcpCisgICAgICAgICAgICBpZiBub3QgaXNCbG9ja2luZyBhbmQgdHJpZWRP
bmNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICB0cmllZE9uY2UgPSBUcnVl
CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgcmVhZEJsb2NrU3RkZXJyKHNlbGYsIHNp
emUsIGlzQmxvY2tpbmc9RmFsc2UpOgorICAgICAgICB0cmllZE9uY2UgPSBGYWxzZQorICAgICAg
ICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgc2VsZi5fc3RkZXJyU3RyZWFtLnNlZWsoMCwgaW8u
U0VFS19FTkQpCisgICAgICAgICAgICBpZiBzZWxmLl9zdGRlcnJTdHJlYW0udGVsbCgpIC0gc2Vs
Zi5fc3RkZXJyVHJjID49IHNpemU6CisgICAgICAgICAgICAgICAgc2VsZi5fc3RkZXJyU3RyZWFt
LnNlZWsoc2VsZi5fc3RkZXJyVHJjLCBpby5TRUVLX1NFVCkKKyAgICAgICAgICAgICAgICBkYXRh
ID0gc2VsZi5fc3RkZXJyU3RyZWFtLnJlYWQoc2l6ZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9z
dGRlcnJUcmMgPSBzZWxmLl9zdGRlcnJUcmMgKyBzaXplCisgICAgICAgICAgICAgICAgcmV0dXJu
IGRhdGEKKyAgICAgICAgICAgIHNlbGYuX3BhcnNlTWVzc2FnZShpc0Jsb2NraW5nKQorICAgICAg
ICAgICAgaWYgbm90IGlzQmxvY2tpbmcgYW5kIHRyaWVkT25jZToKKyAgICAgICAgICAgICAgICBi
cmVhaworICAgICAgICAgICAgdHJpZWRPbmNlID0gVHJ1ZQorICAgICAgICByZXR1cm4gTm9uZQor
CisKK2NsYXNzIFVuaXhQaXBlKEFic3RyYWN0UGlwZSk6CisKKyAgICBTVERJTl9JTkRFWCA9IDAK
KyAgICBTVERPVVRfSU5ERVggPSAxCisgICAgU1RERVJSX0lOREVYID0gMgorCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVycik6CisgICAgICAgIEFic3RyYWN0UGlw
ZS5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLnN0ZG91dEZpbGUgPSBzdGRvdXQKKyAgICAg
ICAgc2VsZi5zdGRlcnJGaWxlID0gc3RkZXJyCisKKyAgICAgICAgcGF0aHMgPSBbc3RkaW4sIHN0
ZG91dCwgc3RkZXJyXQorICAgICAgICBzZWxmLl9zb2NrZXRzID0gW10KKyAgICAgICAgZm9yIGkg
aW4gcmFuZ2UoMCwgMyk6CisgICAgICAgICAgICBzZWxmLl9zb2NrZXRzLmFwcGVuZChVbml4UGlw
ZVNlcnZlcihwYXRoc1tpXSkpCisKKyAgICAgICAgc2VsZi5jbGVhbigpCisKKyAgICBkZWYgY29u
bmVjdChzZWxmKToKKyAgICAgICAgZm9yIHNvY2sgaW4gc2VsZi5fc29ja2V0czoKKyAgICAgICAg
ICAgIHNvY2suY29ubmVjdCgpCisgICAgICAgIHJldHVybiBzZWxmLmlzQ29ubmVjdGVkKCkKKwor
ICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgZm9yIHNvY2sgaW4gc2VsZi5fc29ja2V0czoK
KyAgICAgICAgICAgIHNvY2suZGlzY29ubmVjdCgpCisKKyAgICBkZWYgc2VuZChzZWxmLCBkYXRh
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NvY2tldHNbVW5peFBpcGUuU1RESU5fSU5ERVhdLnNl
bmQoZGF0YSkKKworICAgIGRlZiBpc0Nvbm5lY3RlZChzZWxmKToKKyAgICAgICAgZm9yIHNvY2sg
aW4gc2VsZi5fc29ja2V0czoKKyAgICAgICAgICAgIGlmIG5vdCBzb2NrLmlzQ29ubmVjdGVkKCk6
CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAg
ICBkZWYgX3BhcnNlTWVzc2FnZShzZWxmLCBpc0Jsb2NraW5nPUZhbHNlKToKKyAgICAgICAgd2hp
bGUgVHJ1ZToKKyAgICAgICAgICAgIHN0ZEVyckRhdGEgPSBbXQorICAgICAgICAgICAgc3RkRXJy
RGF0YSA9IHNlbGYuX3NvY2tldHNbVW5peFBpcGUuU1RERVJSX0lOREVYXS5yZWFkKCkKKyAgICAg
ICAgICAgIGlmIHN0ZEVyckRhdGE6CisgICAgICAgICAgICAgICAgc2VsZi5fc3RkZXJyU3RyZWFt
LnNlZWsoMCwgaW8uU0VFS19FTkQpCisgICAgICAgICAgICAgICAgc2VsZi5fc3RkZXJyU3RyZWFt
LndyaXRlKHN0ZEVyckRhdGEpCisgICAgICAgICAgICBzdGRPdXREYXRhID0gW10KKyAgICAgICAg
ICAgIHN0ZE91dERhdGEgPSBzZWxmLl9zb2NrZXRzW1VuaXhQaXBlLlNURE9VVF9JTkRFWF0ucmVh
ZCgpCisgICAgICAgICAgICBpZiBzdGRPdXREYXRhOgorICAgICAgICAgICAgICAgIHNlbGYuX3N0
ZG91dFN0cmVhbS5zZWVrKDAsIGlvLlNFRUtfRU5EKQorICAgICAgICAgICAgICAgIHNlbGYuX3N0
ZG91dFN0cmVhbS53cml0ZShzdGRPdXREYXRhKQorICAgICAgICAgICAgaWYgc3RkRXJyRGF0YSBv
ciBzdGRPdXREYXRhOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBp
ZiBub3QgaXNCbG9ja2luZzoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICByZXR1cm4g
RmFsc2UKKworICAgIGRlZiBoYW5kbGVfaW50ZXJydXB0KHNlbGYpOgorICAgICAgICBpZiBub3Qg
c2VsZi5pc0Nvbm5lY3RlZCgpOgorICAgICAgICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQK
KworCitjbGFzcyBQcm9jZXNzUGlwZShBYnN0cmFjdFBpcGUpOgorCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHBvcnQsIGNtZCwgZW52aXJvPU5vbmUsIHVuaV9uZXdsaW5lcz1GYWxzZSk6CisKKyAg
ICAgICAgQWJzdHJhY3RQaXBlLl9faW5pdF9fKHNlbGYpCisKKyAgICAgICAgc2VsZi5fcG9ydCA9
IHBvcnQKKyAgICAgICAgc2VsZi5faG9zdCA9IHNlbGYuX3BvcnQuaG9zdAorCisgICAgICAgIHNl
bGYuX3Byb2MgPSBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5wb3BlbihjbWQsIHN0ZGluPXNlbGYuX2hv
c3QuZXhlY3V0aXZlLlBJUEUsCisgICAgICAgICAgICBzdGRvdXQ9c2VsZi5faG9zdC5leGVjdXRp
dmUuUElQRSwKKyAgICAgICAgICAgIHN0ZGVycj1zZWxmLl9ob3N0LmV4ZWN1dGl2ZS5QSVBFLAor
ICAgICAgICAgICAgY2xvc2VfZmRzPW5vdCBzZWxmLl9ob3N0LnBsYXRmb3JtLmlzX3dpbigpLAor
ICAgICAgICAgICAgZW52PWVudmlybywKKyAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz11
bmlfbmV3bGluZXMpCisKKyAgICAgICAgc2VsZi5fdXNlX3dpbjMyX2FwaXMgPSBzeXMucGxhdGZv
cm0uc3RhcnRzd2l0aCgnd2luJykKKyAgICAgICAgaWYgbm90IHNlbGYuX3VzZV93aW4zMl9hcGlz
OgorICAgICAgICAgICAgZmQgPSBzZWxmLl9wcm9jLnN0ZG91dC5maWxlbm8oKQorICAgICAgICAg
ICAgZmwgPSBmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGTCkKKyAgICAgICAgICAgIGZjbnRs
LmZjbnRsKGZkLCBmY250bC5GX1NFVEZMLCBmbCB8IG9zLk9fTk9OQkxPQ0spCisgICAgICAgICAg
ICBmZCA9IHNlbGYuX3Byb2Muc3RkZXJyLmZpbGVubygpCisgICAgICAgICAgICBmbCA9IGZjbnRs
LmZjbnRsKGZkLCBmY250bC5GX0dFVEZMKQorICAgICAgICAgICAgZmNudGwuZmNudGwoZmQsIGZj
bnRsLkZfU0VURkwsIGZsIHwgb3MuT19OT05CTE9DSykKKworICAgIGRlZiBwaWQoc2VsZik6Cisg
ICAgICAgIHJldHVybiBzZWxmLl9wcm9jLnBpZAorCisgICAgZGVmIGlzQ29ubmVjdGVkKHNlbGYp
OgorICAgICAgICByZXR1cm4gbm90IHNlbGYuX3Byb2MucG9sbCgpCisKKyAgICBkZWYgaGFuZGxl
X2ludGVycnVwdChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fcHJvYy5yZXR1cm5jb2RlIGluICgt
MTA3Mzc0MTUxMCwgLXNpZ25hbC5TSUdJTlQpOgorICAgICAgICAgICAgcmFpc2UgS2V5Ym9hcmRJ
bnRlcnJ1cHQKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fcHJvYy5w
b2xsKCk6CisgICAgICAgICAgICBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5raWxsX3Byb2Nlc3Moc2Vs
Zi5fcHJvYy5waWQpCisgICAgICAgIGlmIHNlbGYuX3Byb2MucG9sbCgpIGlzIG5vdCBOb25lOgor
ICAgICAgICAgICAgc2VsZi5fcHJvYy53YWl0KCkKKworICAgICAgICBpZiBzZWxmLl9wcm9jLnN0
ZGluOgorICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRpbi5jbG9zZSgpCisgICAgICAgIGlmIHNl
bGYuX3Byb2Muc3Rkb3V0OgorICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRvdXQuY2xvc2UoKQor
ICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZGVycjoKKyAgICAgICAgICAgIHNlbGYuX3Byb2Muc3Rk
ZXJyLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLmlzQ29ubmVjdGVkKCkKKworICAg
IGRlZiBzZW5kKHNlbGYsIGJ5dGVzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5f
cHJvYy5zdGRpbi53cml0ZShieXRlcykKKyAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6CisgICAg
ICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfdW5p
eHN0ZEJsb2NrKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZG91dC5jbG9zZWQ6Cisg
ICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBzZWxlY3RfZmRzID0gW10KKyAgICAgICAg
c2VsZWN0X2Zkcy5hcHBlbmQoc2VsZi5fcHJvYy5zdGRvdXQuZmlsZW5vKCkpCisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIHJlYWRfZmRzLCBfLCBfID0gc2VsZWN0LnNlbGVjdChzZWxlY3RfZmRz
LCBbXSwgc2VsZWN0X2ZkcywgMCkKKyAgICAgICAgZXhjZXB0IHNlbGVjdC5lcnJvciwgZToKKyAg
ICAgICAgICAgIGlmIGUuYXJnc1swXSA9PSBlcnJuby5FSU5WQUw6CisgICAgICAgICAgICAgICAg
cmV0dXJuIE5vbmUKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgaWYgc2VsZi5fcHJvYy5zdGRvdXQuZmlsZW5vKCkgaW4gcmVhZF9mZHM6CisgICAgICAgICAg
ICAgICAgZGF0YSA9IHNlbGYuX3Byb2Muc3Rkb3V0LnJlYWQoKQorICAgICAgICAgICAgICAgIHJl
dHVybiBkYXRhCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgorICAgICAgICAgICAgcGFzcwor
CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX3VuaXhlcnJCbG9jayhzZWxmKToKKyAg
ICAgICAgaWYgc2VsZi5fcHJvYy5zdGRlcnIuY2xvc2VkOgorICAgICAgICAgICAgcmV0dXJuIE5v
bmUKKyAgICAgICAgc2VsZWN0X2ZkcyA9IFtdCisgICAgICAgIHNlbGVjdF9mZHMuYXBwZW5kKHNl
bGYuX3Byb2Muc3RkZXJyLmZpbGVubygpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZWFk
X2ZkcywgXywgXyA9IHNlbGVjdC5zZWxlY3Qoc2VsZWN0X2ZkcywgW10sIHNlbGVjdF9mZHMsIDAp
CisgICAgICAgIGV4Y2VwdCBzZWxlY3QuZXJyb3IsIGU6CisgICAgICAgICAgICBpZiBlLmFyZ3Nb
MF0gPT0gZXJybm8uRUlOVkFMOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAg
ICAgICByYWlzZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNlbGYuX3Byb2Muc3Rk
ZXJyLmZpbGVubygpIGluIHJlYWRfZmRzOgorICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9w
cm9jLnN0ZGVyci5yZWFkKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZGF0YQorICAgICAgICBl
eGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICByZXR1cm4gTm9u
ZQorCisgICAgZGVmIF93aW4zMk5vbkJsb2NraW5nUmVhZChzZWxmLCBoYW5kbGUpOgorICAgICAg
ICB0cnk6CisgICAgICAgICAgICBfLCBhdmFpbCwgXyA9IHdpbjMycGlwZS5QZWVrTmFtZWRQaXBl
KGhhbmRsZSwgMCkKKyAgICAgICAgICAgIGlmIGF2YWlsID4gMDoKKyAgICAgICAgICAgICAgICBf
LCBidWYgPSB3aW4zMmZpbGUuUmVhZEZpbGUoaGFuZGxlLCBhdmFpbCwgTm9uZSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gYnVmCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAg
ICAgICBpZiBlWzBdIG5vdCBpbiAoMTA5LCBlcnJuby5FU0hVVERPV04pOiAgIyAxMDkgPT0gd2lu
MzIgRVJST1JfQlJPS0VOX1BJUEUKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICByZXR1
cm4gTm9uZQorCisgICAgZGVmIF93aW4zMnN0ZEJsb2NrKHNlbGYpOgorICAgICAgICBvdXRfZmgg
PSBtc3ZjcnQuZ2V0X29zZmhhbmRsZShzZWxmLl9wcm9jLnN0ZG91dC5maWxlbm8oKSkKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX3dpbjMyTm9uQmxvY2tpbmdSZWFkKG91dF9maCkKKworICAgIGRlZiBf
d2luMzJlcnJCbG9jayhzZWxmKToKKyAgICAgICAgZXJyX2ZoID0gbXN2Y3J0LmdldF9vc2ZoYW5k
bGUoc2VsZi5fcHJvYy5zdGRlcnIuZmlsZW5vKCkpCisgICAgICAgIHJldHVybiBzZWxmLl93aW4z
Mk5vbkJsb2NraW5nUmVhZChlcnJfZmgpCisKKyAgICBkZWYgX3BhcnNlTWVzc2FnZShzZWxmLCBp
c0Jsb2NraW5nPUZhbHNlKToKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHN0ZEVy
ckRhdGEgPSBbXQorICAgICAgICAgICAgaWYgc2VsZi5fdXNlX3dpbjMyX2FwaXM6CisgICAgICAg
ICAgICAgICAgc3RkRXJyRGF0YSA9IHNlbGYuX3dpbjMyZXJyQmxvY2soKQorICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICBzdGRFcnJEYXRhID0gc2VsZi5fdW5peGVyckJsb2NrKCkK
KyAgICAgICAgICAgIGlmIHN0ZEVyckRhdGE6CisgICAgICAgICAgICAgICAgc2VsZi5fc3RkZXJy
U3RyZWFtLnNlZWsoMCwgaW8uU0VFS19FTkQpCisgICAgICAgICAgICAgICAgc2VsZi5fc3RkZXJy
U3RyZWFtLndyaXRlKHN0ZEVyckRhdGEpCisgICAgICAgICAgICBzdGRPdXREYXRhID0gW10KKyAg
ICAgICAgICAgIGlmIHNlbGYuX3VzZV93aW4zMl9hcGlzOgorICAgICAgICAgICAgICAgIHN0ZE91
dERhdGEgPSBzZWxmLl93aW4zMnN0ZEJsb2NrKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgc3RkT3V0RGF0YSA9IHNlbGYuX3VuaXhzdGRCbG9jaygpCisgICAgICAgICAgICBp
ZiBzdGRPdXREYXRhOgorICAgICAgICAgICAgICAgIHNlbGYuX3N0ZG91dFN0cmVhbS5zZWVrKDAs
IGlvLlNFRUtfRU5EKQorICAgICAgICAgICAgICAgIHNlbGYuX3N0ZG91dFN0cmVhbS53cml0ZShz
dGRPdXREYXRhKQorICAgICAgICAgICAgaWYgc3RkRXJyRGF0YSBvciBzdGRPdXREYXRhOgorICAg
ICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBpZiBub3QgaXNCbG9ja2luZzoK
KyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICByZXR1cm4gRmFsc2UKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2lwY19waXBlX3Rlc3RjYXNlLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2lwY19waXBlX3Rlc3RjYXNlLnB5CShu
b25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2lwY19waXBlX3Rl
c3RjYXNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMxIEBACisjIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisj
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgZXJybm8KK2ltcG9ydCBpbworaW1wb3J0
IHNvY2tldAoraW1wb3J0IHRpbWUKKworZnJvbSB3ZWJraXRweS5jb21tb24uaXBjX3BpcGUgaW1w
b3J0IEFic3RyYWN0UGlwZQorCisKK2NsYXNzIER1bW15UHJvY2Vzc1BpcGUoQWJzdHJhY3RQaXBl
KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0PU5vbmUsIGNtZD1Ob25lLCBlbnZpcm89
Tm9uZSwgdW5pX25ld2xpbmVzPUZhbHNlKToKKyAgICAgICAgQWJzdHJhY3RQaXBlLl9faW5pdF9f
KHNlbGYpCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIGlmIHNlbGYuX3BvcnQ6
CisgICAgICAgICAgICBzZWxmLl9ob3N0ID0gc2VsZi5fcG9ydC5ob3N0CisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICBzZWxmLl9ob3N0ID0gTm9uZQorICAgICAgICBzZWxmLmNvbm5lY3RlZEZv
clRlc3RpbmcgPSBUcnVlCisKKyAgICBkZWYgcGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gMQor
CisgICAgZGVmIGlzQ29ubmVjdGVkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0
ZWRGb3JUZXN0aW5nCisKKyAgICBkZWYgc2VuZChzZWxmLCBieXRlcyk6CisgICAgICAgIHJldHVy
biBzZWxmLmNvbm5lY3RlZEZvclRlc3RpbmcKKworICAgIGRlZiBfcGFyc2VNZXNzYWdlKHNlbGYs
IGlzQmxvY2tpbmc9RmFsc2UpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBwdXNo
RGF0YUZvclRlc3Rpbmcoc2VsZiwgZGF0YSwgc3RkZXJyPUZhbHNlLCBzdGRvdXQ9VHJ1ZSk6Cisg
ICAgICAgIGlmIHN0ZGVycjoKKyAgICAgICAgICAgIHNlbGYuX3N0ZGVyclN0cmVhbS5zZWVrKDAs
IGlvLlNFRUtfRU5EKQorICAgICAgICAgICAgc2VsZi5fc3RkZXJyU3RyZWFtLndyaXRlKGRhdGEp
CisgICAgICAgIGVsaWYgc3Rkb3V0OgorICAgICAgICAgICAgc2VsZi5fc3Rkb3V0U3RyZWFtLnNl
ZWsoMCwgaW8uU0VFS19FTkQpCisgICAgICAgICAgICBzZWxmLl9zdGRvdXRTdHJlYW0ud3JpdGUo
ZGF0YSkKKworCitjbGFzcyBVbml4UGlwZUNsaWVudChvYmplY3QpOgorCisgICAgQlVGRkVSID0g
NDA5NgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgorICAgICAgICBzZWxmLl9wYXRo
ID0gcGF0aAorICAgICAgICBzZWxmLl9jb25uZWN0ZWQgPSBGYWxzZQorICAgICAgICBzZWxmLl9j
b25uZWN0aW9uID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RS
RUFNKQorICAgICAgICBzZWxmLl9zdHJlYW0gPSBpby5CeXRlc0lPKCkKKyAgICAgICAgc2VsZi5f
c3RyZWFtVHJjID0gMAorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHNlbGYuZGlz
Y29ubmVjdCgpCisKKyAgICBkZWYgY29ubmVjdChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fY29u
bmVjdGVkOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgc2VsZi5fY29ubmVjdGlvbi5jb25uZWN0KHNlbGYuX3BhdGgpCisgICAgICAgICAgICBzZWxm
Ll9jb25uZWN0ZWQgPSBUcnVlCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHJldHVybiBG
YWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGRpc2Nvbm5lY3Qoc2VsZik6Cisg
ICAgICAgIGlmIG5vdCBzZWxmLl9jb25uZWN0ZWQ6CisgICAgICAgICAgICByZXR1cm4KKyAgICAg
ICAgc2VsZi5fY29ubmVjdGlvbi5jbG9zZSgpCisgICAgICAgIHNlbGYuX2Nvbm5lY3RlZCA9IEZh
bHNlCisKKyAgICBkZWYgcmVhZGxpbmUoc2VsZiwgaXNCbG9ja2luZz1GYWxzZSk6CisgICAgICAg
IHdoaWxlIFRydWU6CisgICAgICAgICAgICBzZWxmLl9zdHJlYW0uc2VlayhzZWxmLl9zdHJlYW1U
cmMsIGlvLlNFRUtfU0VUKQorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX3N0cmVhbS5yZWFkbGlu
ZSgpCisgICAgICAgICAgICBpZiBkYXRhIGFuZCBkYXRhWy0xXSA9PSAnXG4nOgorICAgICAgICAg
ICAgICAgIHNlbGYuX3N0cmVhbVRyYyA9IHNlbGYuX3N0cmVhbVRyYyArIGxlbihkYXRhKQorICAg
ICAgICAgICAgICAgIHJldHVybiBkYXRhCisgICAgICAgICAgICBibG9jayA9IHNlbGYucmVhZCgp
CisgICAgICAgICAgICBpZiBibG9jazoKKyAgICAgICAgICAgICAgICBzZWxmLl9zdHJlYW0uc2Vl
aygwLCBpby5TRUVLX0VORCkKKyAgICAgICAgICAgICAgICBzZWxmLl9zdHJlYW0ud3JpdGUoYmxv
Y2spCisgICAgICAgICAgICBpZiBub3QgaXNCbG9ja2luZzoKKyAgICAgICAgICAgICAgICBicmVh
aworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHJlYWQoc2VsZik6CisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9jb25uZWN0aW9uLnJlY3Yoc2VsZi5CVUZGRVIp
CisgICAgICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgICAgIHJldHVybiBkYXRhCisgICAg
ICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIGU6CisgICAgICAgICAgICBlcnIgPSBlLmFyZ3NbMF0K
KyAgICAgICAgICAgIGlmIGVyciA9PSBlcnJuby5FQUdBSU4gb3IgZXJyID09IGVycm5vLkVXT1VM
REJMT0NLOgorICAgICAgICAgICAgICAgIHJldHVybiBbXQorICAgICAgICBzZWxmLmRpc2Nvbm5l
Y3QoKQorICAgICAgICByZXR1cm4gW10KKworICAgIGRlZiBzZW5kKHNlbGYsIGRhdGEpOgorICAg
ICAgICBpZiBub3Qgc2VsZi5fY29ubmVjdGVkOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisg
ICAgICAgIHNlbGYuX2Nvbm5lY3Rpb24uc2VuZChkYXRhKQorICAgICAgICByZXR1cm4gVHJ1ZQor
CisgICAgZGVmIHBvcnQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wYXRoCisKKyAgICBk
ZWYgaXNDb25uZWN0ZWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jb25uZWN0ZWQKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2lwY19waXBlX3VuaXR0ZXN0LnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2lwY19waXBlX3VuaXR0
ZXN0LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2lw
Y19waXBlX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU3IEBACisjIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMK
K2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB3
ZWJraXRweS5jb21tb24uaXBjX3BpcGUgaW1wb3J0IFVuaXhQaXBlU2VydmVyLCBVbml4UGlwZQor
ZnJvbSB3ZWJraXRweS5jb21tb24uaXBjX3BpcGVfdGVzdGNhc2UgaW1wb3J0IER1bW15UHJvY2Vz
c1BpcGUsIFVuaXhQaXBlQ2xpZW50CisKKworZGVmIFVuaXhQaXBlQ2xpZW50VGVzdGluZ1RocmVh
ZChzb3VyY2UsIHBhdGgsIGFyZ3VtZW50cyk6CisgICAgc291cmNlLmNsaWVudFJlc3VsdHMgPSBb
XQorICAgIGNsaWVudCA9IFVuaXhQaXBlQ2xpZW50KHBhdGgpCisKKyAgICBkZWFkbGluZSA9IHRp
bWUudGltZSgpICsgMS4wCisgICAgd2hpbGUgdGltZS50aW1lKCkgPCBkZWFkbGluZSBhbmQgbm90
IGNsaWVudC5pc0Nvbm5lY3RlZCgpOgorICAgICAgICBjbGllbnQuY29ubmVjdCgpCisgICAgaWYg
bm90IGNsaWVudC5pc0Nvbm5lY3RlZCgpOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIHJlYWRp
bmdtb2RlID0gRmFsc2UKKyAgICBmb3IgZWxtIGluIGFyZ3VtZW50czoKKyAgICAgICAgaWYgZWxt
ID09ICctLXJlYWQnOgorICAgICAgICAgICAgZGF0YSA9IGNsaWVudC5yZWFkbGluZShUcnVlKQor
ICAgICAgICAgICAgc291cmNlLmNsaWVudFJlc3VsdHMuYXBwZW5kKGRhdGEpCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICBjbGllbnQuc2VuZChlbG0pCisgICAgY2xpZW50LmRpc2Nvbm5lY3Qo
KQorICAgIHJldHVybiBzb3VyY2UuY2xpZW50UmVzdWx0cworCisKK2NsYXNzIGlwY1BpcGVUZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKipr
d2FyZ3MpOgorICAgICAgICBzdXBlcihpcGNQaXBlVGVzdCwgc2VsZikuX19pbml0X18oKmFyZ3Ms
ICoqa3dhcmdzKQorICAgICAgICBzZWxmLmNsaWVudFJlc3VsdHMgPSBbXQorCisgICAgZGVmIHRl
c3RfYWJzdHJhY3RwaXBlX3N0ZG91dChzZWxmKToKKyAgICAgICAgcGlwZSA9IER1bW15UHJvY2Vz
c1BpcGUoKQorCisgICAgICAgIHBpcGUucHVzaERhdGFGb3JUZXN0aW5nKCdjb21pbmcgZnJvbSBz
dGRvdXRcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlwZS5zdGRvdXRSZWFkKCksICdj
b21pbmcgZnJvbSBzdGRvdXRcbicpCisKKyAgICAgICAgcGlwZS5wdXNoRGF0YUZvclRlc3Rpbmco
J2NvbWluZyBmcm9tIHN0ZGVyclxuJywgc3RkZXJyPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwocGlwZS5zdGRvdXRSZWFkKCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9hYnN0cmFjdHBp
cGVfc3RkZXJyKHNlbGYpOgorICAgICAgICBwaXBlID0gRHVtbXlQcm9jZXNzUGlwZSgpCisKKyAg
ICAgICAgcGlwZS5wdXNoRGF0YUZvclRlc3RpbmcoJ2NvbWluZyBmcm9tIHN0ZG91dFxuJykKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBlLnN0ZGVyclJlYWQoKSwgTm9uZSkKKworICAgICAg
ICBwaXBlLnB1c2hEYXRhRm9yVGVzdGluZygnY29taW5nIGZyb20gc3RkZXJyXG4nLCBzdGRlcnI9
VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBlLnN0ZGVyclJlYWQoKSwgJ2NvbWlu
ZyBmcm9tIHN0ZGVyclxuJykKKworICAgIGRlZiB0ZXN0X2Fic3RyYWN0cGlwZV9kdWVsX3N0cmVh
bXMoc2VsZik6CisgICAgICAgIHBpcGUgPSBEdW1teVByb2Nlc3NQaXBlKCkKKworICAgICAgICBw
aXBlLnB1c2hEYXRhRm9yVGVzdGluZygnY29taW5nIGZyb20gc3Rkb3V0XG4nKQorICAgICAgICBw
aXBlLnB1c2hEYXRhRm9yVGVzdGluZygnY29taW5nIGZyb20gc3RkZXJyXG4nLCBzdGRlcnI9VHJ1
ZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBpcGUucmVhZExpbmUoKSwgJ2NvbWluZyBm
cm9tIHN0ZGVyclxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBlLnJlYWRMaW5lKCks
ICdjb21pbmcgZnJvbSBzdGRvdXRcbicpCisKKyAgICBkZWYgdGVzdF9hYnN0cmFjdHBpcGVfc3Rk
b3V0YmxvY2soc2VsZik6CisgICAgICAgIHBpcGUgPSBEdW1teVByb2Nlc3NQaXBlKCkKKworICAg
ICAgICBwaXBlLnB1c2hEYXRhRm9yVGVzdGluZygnc3Rkb3V0IGxpbmVcbicpCisgICAgICAgIHBp
cGUucHVzaERhdGFGb3JUZXN0aW5nKCdzdGRvdXQgYmxvY2snKQorCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwocGlwZS5yZWFkQnVmZmVyU3Rkb3V0KCksICdzdGRvdXQgbGluZVxuc3Rkb3V0IGJs
b2NrJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBlLnJlYWRCdWZmZXJTdGRlcnIoKSwg
JycpCisKKyAgICBkZWYgdGVzdF9hYnN0cmFjdHBpcGVfc3RkZXJyYmxvY2soc2VsZik6CisgICAg
ICAgIHBpcGUgPSBEdW1teVByb2Nlc3NQaXBlKCkKKworICAgICAgICBwaXBlLnB1c2hEYXRhRm9y
VGVzdGluZygnc3RkZXJyIGxpbmVcbicsIHN0ZGVycj1UcnVlKQorICAgICAgICBwaXBlLnB1c2hE
YXRhRm9yVGVzdGluZygnc3RkZXJyIGJsb2NrJywgc3RkZXJyPVRydWUpCisKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChwaXBlLnJlYWRCdWZmZXJTdGRvdXQoKSwgJycpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwocGlwZS5yZWFkQnVmZmVyU3RkZXJyKCksICdzdGRlcnIgbGluZVxuc3RkZXJy
IGJsb2NrJykKKworICAgIGRlZiB0ZXN0X3VuaXhQaXBlU2VydmVyKHNlbGYpOgorICAgICAgICB0
cnk6CisgICAgICAgICAgICBzZXJ2ID0gVW5peFBpcGVTZXJ2ZXIoJy90bXAvdW5peFBpcGUucGlw
ZScpCisgICAgICAgICAgICB0aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1Vbml4UGlw
ZUNsaWVudFRlc3RpbmdUaHJlYWQsIGFyZ3M9KHNlbGYsIHNlcnYucGF0aCgpLCBbJy0tcmVhZCcs
ICdMaW5lIDFcbicsICdMaW5lIDJcbicsICctLXJlYWQnXSkpCisgICAgICAgICAgICB0aHJlYWQu
c3RhcnQoKQorICAgICAgICAgICAgc2Vydi5jb25uZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZShzZXJ2LmlzQ29ubmVjdGVkKCkpCisKKyAgICAgICAgICAgIHNlcnYuc2VuZCgnU2Vy
dmVyIHNlbmQgMVxuJykKKyAgICAgICAgICAgIHNlcnYuc2VuZCgnU2VydmVyIHNlbmQgMlxuJykK
KworICAgICAgICAgICAgdGhyZWFkLmpvaW4oKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChzZXJ2LnJlYWQoKSwgJ0xpbmUgMVxuTGluZSAyXG4nKQorICAgICAgICAgICAgc2Vydi5kaXNj
b25uZWN0KCkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnU2VydmVyIHNlbmQgMVxu
Jywgc2VsZi5jbGllbnRSZXN1bHRzWzBdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgn
U2VydmVyIHNlbmQgMlxuJywgc2VsZi5jbGllbnRSZXN1bHRzWzFdKQorICAgICAgICBleGNlcHQg
T1NFcnJvciwgZToKKyAgICAgICAgICAgIGlmIG5vdCBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgn
d2luJykgb3Igc3RyKGUpICE9ICdVbml4UGlwZVNlcnZlciBub3QgaW1wbGVtZW50ZWQgb24gdGhp
cyBwbGF0Zm9ybSc6CisgICAgICAgICAgICAgICAgcmFpc2UgZQorCisgICAgZGVmIHRlc3RfdW5p
eFBpcGUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBpcGUgPSBVbml4UGlwZSgn
L3RtcC90ZXN0c3RkaW4ucGlwZScsICcvdG1wL3Rlc3RzdGRvdXQucGlwZScsICcvdG1wL3Rlc3Rz
dGRlcnIucGlwZScpCisgICAgICAgICAgICBzdGRpblRocmVhZCA9IHRocmVhZGluZy5UaHJlYWQo
dGFyZ2V0PVVuaXhQaXBlQ2xpZW50VGVzdGluZ1RocmVhZCwgYXJncz0oc2VsZiwgJy90bXAvdGVz
dHN0ZGluLnBpcGUnLCBbJy0tcmVhZCcsICctLXJlYWQnXSkpCisgICAgICAgICAgICBzdGRvdXRU
aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1Vbml4UGlwZUNsaWVudFRlc3RpbmdUaHJl
YWQsIGFyZ3M9KHNlbGYsICcvdG1wL3Rlc3RzdGRvdXQucGlwZScsIFsnc3Rkb3V0IGxpbmUgMVxu
JywgJ3N0ZG91dCBsaW5lIDJcbiddKSkKKyAgICAgICAgICAgIHN0ZGVyclRocmVhZCA9IHRocmVh
ZGluZy5UaHJlYWQodGFyZ2V0PVVuaXhQaXBlQ2xpZW50VGVzdGluZ1RocmVhZCwgYXJncz0oc2Vs
ZiwgJy90bXAvdGVzdHN0ZGVyci5waXBlJywgWydzdGRlcnIgbGluZSAxXG4nLCAnc3RkZXJyIGxp
bmUgMlxuJ10pKQorICAgICAgICAgICAgc3RkaW5UaHJlYWQuc3RhcnQoKQorICAgICAgICAgICAg
c3Rkb3V0VGhyZWFkLnN0YXJ0KCkKKyAgICAgICAgICAgIHN0ZGVyclRocmVhZC5zdGFydCgpCisg
ICAgICAgICAgICBwaXBlLmNvbm5lY3QoKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUo
cGlwZS5pc0Nvbm5lY3RlZCgpKQorCisgICAgICAgICAgICBwaXBlLnNlbmQoJ1NlcnZlciBzZW5k
IDFcbicpCisgICAgICAgICAgICBwaXBlLnNlbmQoJ1NlcnZlciBzZW5kIDJcbicpCisKKyAgICAg
ICAgICAgIHN0ZGluVGhyZWFkLmpvaW4oKQorICAgICAgICAgICAgc3Rkb3V0VGhyZWFkLmpvaW4o
KQorICAgICAgICAgICAgc3RkZXJyVGhyZWFkLmpvaW4oKQorCisgICAgICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHBpcGUuc3Rkb3V0UmVhZCgpLCAnc3Rkb3V0IGxpbmUgMVxuJykKKyAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlwZS5zdGRvdXRSZWFkKCksICdzdGRvdXQgbGluZSAyXG4n
KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBlLnN0ZGVyclJlYWQoKSwgJ3N0ZGVy
ciBsaW5lIDFcbicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBpcGUuc3RkZXJyUmVh
ZCgpLCAnc3RkZXJyIGxpbmUgMlxuJykKKworICAgICAgICAgICAgcGlwZS5jbG9zZSgpCisKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1NlcnZlciBzZW5kIDFcbicsIHNlbGYuY2xpZW50
UmVzdWx0c1swXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1NlcnZlciBzZW5kIDJc
bicsIHNlbGYuY2xpZW50UmVzdWx0c1sxXSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6Cisg
ICAgICAgICAgICBpZiBub3Qgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpIG9yIHN0cihl
KSAhPSAnVW5peFBpcGVTZXJ2ZXIgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0nOgor
ICAgICAgICAgICAgICAgIHJhaXNlIGUKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9iYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNl
LnB5CShyZXZpc2lvbiAyMDk3ODQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFz
ZS5weQkod29ya2luZyBjb3B5KQpAQCAtODk3LDYgKzg5NywxMiBAQCBjbGFzcyBQb3J0KG9iamVj
dCk6CiAKICAgICAgICAgcmV0dXJuIGNsZWFuX2VudgogCisgICAgZGVmIGRldmljZURlZmluZWQo
c2VsZik6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHJ1bk9uRGV2aWNlKHNlbGYs
IGNtZCwgZW52aT1Ob25lKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKwogICAgIGRlZiBfY2xlYXJf
Z2xvYmFsX2NhY2hlc19hbmRfdGVtcG9yYXJ5X2ZpbGVzKHNlbGYpOgogICAgICAgICBwYXNzCiAK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlX3VuaXR0ZXN0LnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlX3VuaXR0ZXN0LnB5CShy
ZXZpc2lvbiAyMDk3ODQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZV91bml0
dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMzk1LDYgKzM5NSwxMiBAQCBjbGFzcyBQb3J0VGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3J0LmlzX3cz
Y19yZXNvdXJjZV9maWxlKHBvcnQuaG9zdC5maWxlc3lzdGVtLCBwb3J0LmxheW91dF90ZXN0c19k
aXIoKSArICIvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRwUmVxdWVzdCIs
ICJ4bWxodHRwcmVxdWVzdC1zeW5jLWJsb2NrLWRlZmVyLXNjcmlwdHMtc3ViZnJhbWUuaHRtbCIp
KQogICAgICAgICBzZWxmLmFzc2VydFRydWUocG9ydC5pc193M2NfcmVzb3VyY2VfZmlsZShwb3J0
Lmhvc3QuZmlsZXN5c3RlbSwgcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkgKyAiL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvZG9tL25vZGVzL0RvY3VtZW50LWNyZWF0ZUVsZW1lbnQtbmFt
ZXNwYWNlLXRlc3RzIiwgInRlc3QuaHRtbCIpKQogCisgICAgZGVmIHRlc3RfZGV2aWNlKHNlbGYp
OgorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEZh
bHNlKHBvcnQuZGV2aWNlRGVmaW5lZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwb3J0
LnJ1bk9uRGV2aWNlKFsncGluZycsICc8bm8taWQ+J10pKQorCisKIGNsYXNzIE5hdHVyYWxDb21w
YXJlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAg
ICBzZWxmLl9wb3J0ID0gVGVzdFBvcnQoTW9ja1N5c3RlbUhvc3QoKSkKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weQkocmV2aXNpb24gMjA5Nzg0KQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weQkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEs
MTAgQEAKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KIAogaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBtdWx0aXByb2Nl
c3NpbmcKIGltcG9ydCBvcworaW1wb3J0IHBsaXN0bGliCitpbXBvcnQgc2h1dGlsCiBpbXBvcnQg
dGltZQogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uY3Jhc2hsb2dzIGltcG9ydCBDcmFz
aExvZ3MKQEAgLTE3NCwzICsxNzcsMjQgQEAgY2xhc3MgRGFyd2luUG9ydChBcHBsZVBvcnQpOgog
ICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3I6CiAgICAgICAgICAgICBfbG9nLndhcm4oInhjcnVu
IGZhaWxlZDsgZmFsbGluZyBiYWNrIHRvICclcycuIiAlIGZhbGxiYWNrKQogICAgICAgICAgICAg
cmV0dXJuIGZhbGxiYWNrCisKKyAgICBkZWYgZXh0cmFjdEJ1bmRsZUlEKHNlbGYsIGFwcCk6Cisg
ICAgICAgIHBpZCA9IHN0cihtdWx0aXByb2Nlc3NpbmcuY3VycmVudF9wcm9jZXNzKCkubmFtZSku
cmVwbGFjZSgnLycsICctJykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzaHV0aWwuY29w
eWZpbGUoYXBwICsgIi9JbmZvLnBsaXN0IiwgIi90bXAvIiArIHBpZCArICJJbmZvLnBsaXN0IikK
KyAgICAgICAgICAgIGlmIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ2NwJywgYXBwICsg
Jy9JbmZvLnBsaXN0JywgJy90bXAvJyArIHBpZCArICdJbmZvLnBsaXN0J10sIHJldHVybl9leGl0
X2NvZGU9VHJ1ZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIGlm
IHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ3BsdXRpbCcsICctY29udmVydCcsICd4bWwx
JywgJy90bXAvJyArIHBpZCArICdJbmZvLnBsaXN0J10sIHJldHVybl9leGl0X2NvZGU9VHJ1ZSk6
CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIHBsID0gcGxpc3RsaWIu
cmVhZFBsaXN0KCIvdG1wLyIgKyBwaWQgKyAiSW5mby5wbGlzdCIpCisgICAgICAgIGV4Y2VwdCBF
eGNlcHRpb24sIGVycjoKKyAgICAgICAgICAgIHBsID0gTm9uZQorCisgICAgICAgIHRyeToKKyAg
ICAgICAgICAgIG9zLnJlbW92ZSgiL3RtcC8iICsgcGlkICsgIkluZm8ucGxpc3QiKQorICAgICAg
ICAgICAgaWYgcGw6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBsWyJDRkJ1bmRsZUlkZW50aWZp
ZXIiXQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHJldHVybiBO
b25lCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luX3Rlc3RjYXNlLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW5fdGVzdGNh
c2UucHkJKHJldmlzaW9uIDIwOTc4NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9k
YXJ3aW5fdGVzdGNhc2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTIwLDYgKzIwLDkgQEAKICMgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAoraW1wb3J0IG9zCitpbXBvcnQgcGxp
c3RsaWIKKwogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBwb3J0X3Rlc3RjYXNlCiBmcm9tIHdl
YmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZXN5c3RlbV9tb2NrIGltcG9ydCBNb2NrRmlsZVN5c3Rl
bQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1
dENhcHR1cmUKQEAgLTExOSwzICsxMjIsMTAgQEAgY2xhc3MgRGFyd2luVGVzdChwb3J0X3Rlc3Rj
YXNlLlBvcnRUZXN0QwogICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQogICAgICAgICBw
b3J0Ll9leGVjdXRpdmUgPSBNb2NrRXhlY3V0aXZlMihydW5fY29tbWFuZF9mbj10aHJvd2luZ19y
dW5fY29tbWFuZCkKICAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYs
IHBvcnQuc2FtcGxlX3Byb2Nlc3MsIGFyZ3M9Wyd0ZXN0JywgNDJdKQorCisgICAgZGVmIHRlc3Rf
cGxpc3Qoc2VsZik6CisgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCisgICAgICAgIHBs
ID0gZGljdChDRkJ1bmRsZUlkZW50aWZpZXI9Im9yZy53ZWJraXQuZGVtbyIpCisgICAgICAgIHBs
aXN0bGliLndyaXRlUGxpc3QocGwsICIvdG1wL0luZm8ucGxpc3QiKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHBvcnQuZXh0cmFjdEJ1bmRsZUlEKCIvdG1wIiksIE5vbmUpCisgICAgICAgIG9z
LnJlbW92ZSgiL3RtcC9JbmZvLnBsaXN0IikKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC9kcml2ZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2RyaXZlci5weQkocmV2aXNpb24gMjA5Nzg0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L2RyaXZlci5weQkod29ya2luZyBjb3B5KQpAQCAtMTM5LDcgKzEzOSw3IEBAIGNsYXNzIERy
aXZlcihvYmplY3QpOgogICAgICAgICBzZWxmLl9kcml2ZXJfdXNlcl9kaXJlY3Rvcnlfc3VmZml4
ID0gTm9uZQogICAgICAgICBzZWxmLl9kcml2ZXJfdXNlcl9jYWNoZV9kaXJlY3RvcnkgPSBOb25l
CiAKLSAgICAgICAgIyBXZWJLaXRUZXN0UnVubmVyL0xheW91dFRlc3RSZWxheSBjYW4gcmVwb3J0
IGJhY2sgc3VicHJvY2VzcyBjcmFzaGVzIGJ5IHByaW50aW5nCisgICAgICAgICMgV2ViS2l0VGVz
dFJ1bm5lciBjYW4gcmVwb3J0IGJhY2sgc3VicHJvY2VzcyBjcmFzaGVzIGJ5IHByaW50aW5nCiAg
ICAgICAgICMgIiNDUkFTSEVEIC0gUFJPQ0VTU05BTUUiLiAgU2luY2UgdGhvc2UgY2FuIGhhcHBl
biBhdCBhbnkgdGltZSBhbmQgU2VydmVyUHJvY2VzcwogICAgICAgICAjIHdvbid0IGJlIGF3YXJl
IG9mIHRoZW0gKHNpbmNlIHRoZSBhY3R1YWwgdG9vbCBkaWRuJ3QgY3Jhc2gsIGp1c3QgYSBzdWJw
cm9jZXNzKQogICAgICAgICAjIHdlIHJlY29yZCB0aGUgY3Jhc2hlZCBzdWJwcm9jZXNzIG5hbWUg
aGVyZS4KQEAgLTE4Myw2ICsxODMsNyBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAgICAgICAg
IiIiCiAgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQogICAgICAgICBzZWxmLnN0YXJ0
KGRyaXZlcl9pbnB1dC5zaG91bGRfcnVuX3BpeGVsX3Rlc3QsIGRyaXZlcl9pbnB1dC5hcmdzKQor
ICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5jbGVhbigpCiAgICAgICAgIHRlc3RfYmVnaW5f
dGltZSA9IHRpbWUudGltZSgpCiAgICAgICAgIHNlbGYuX2RyaXZlcl90aW1lZF9vdXQgPSBGYWxz
ZQogICAgICAgICBzZWxmLl9jcmFzaF9yZXBvcnRfZnJvbV9kcml2ZXIgPSBOb25lCkBAIC0zMjgs
NyArMzI5LDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAKICAgICBkZWYgX3NldHVwX2Vudmly
b25fZm9yX2RyaXZlcihzZWxmLCBlbnZpcm9ubWVudCk6CiAgICAgICAgIGJ1aWxkX3Jvb3RfcGF0
aCA9IHN0cihzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCkpCi0gICAgICAgICMgRklYTUU6IERZTERf
KiB2YXJpYWJsZXMgc2hvdWxkIGJlIE1hYy1vbmx5LiBFdmVuIGlPUyBTaW11bGF0b3IgZG9lc24n
dCBuZWVkIHRoZW0sIGFzIExheW91dFRlc3RSZWxheSBpcyBhIGhvc3QgYmluYXJ5LgorICAgICAg
ICAjIEZJWE1FOiBEWUxEXyogdmFyaWFibGVzIHNob3VsZCBiZSBNYWMtb25seS4gaU9TIHNpbXVs
YXRvcnMgc2hvdWxkIGluY2x1ZGUgdGhlbSBpbiBpdCdzIGFwcCBidW5kbGUuCiAgICAgICAgIHNl
bGYuX2FwcGVuZF9lbnZpcm9ubWVudF92YXJpYWJsZV9wYXRoKGVudmlyb25tZW50LCAnRFlMRF9M
SUJSQVJZX1BBVEgnLCBidWlsZF9yb290X3BhdGgpCiAgICAgICAgIHNlbGYuX2FwcGVuZF9lbnZp
cm9ubWVudF92YXJpYWJsZV9wYXRoKGVudmlyb25tZW50LCAnX19YUENfRFlMRF9MSUJSQVJZX1BB
VEgnLCBidWlsZF9yb290X3BhdGgpCiAgICAgICAgIHNlbGYuX2FwcGVuZF9lbnZpcm9ubWVudF92
YXJpYWJsZV9wYXRoKGVudmlyb25tZW50LCAnRFlMRF9GUkFNRVdPUktfUEFUSCcsIGJ1aWxkX3Jv
b3RfcGF0aCkKQEAgLTYwOSwyNCArNjEwLDIwIEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogCiAK
ICMgRklYTUU6IHRoaXMgc2hvdWxkIGJlIGFic3RyYWN0ZWQgb3V0IHZpYSB0aGUgUG9ydCBzdWJj
bGFzcyBzb21laG93LgotY2xhc3MgSU9TU2ltdWxhdG9yRHJpdmVyKERyaXZlcik6CitjbGFzcyBE
ZXZpY2VEcml2ZXIoRHJpdmVyKToKICAgICBkZWYgY21kX2xpbmUoc2VsZiwgcGl4ZWxfdGVzdHMs
IHBlcl90ZXN0X2FyZ3MpOgotICAgICAgICBjbWQgPSBzdXBlcihJT1NTaW11bGF0b3JEcml2ZXIs
IHNlbGYpLmNtZF9saW5lKHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKQotICAgICAgICByZWxh
eV90b29sID0gc2VsZi5fcG9ydC5yZWxheV9wYXRoCisgICAgICAgIGNtZCA9IHN1cGVyKERldmlj
ZURyaXZlciwgc2VsZikuY21kX2xpbmUocGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpCisgICAg
ICAgIHJlbGF5X3Rvb2wgPSAncnVuLW9uLWRldmljZScKICAgICAgICAgZHVtcF90b29sID0gY21k
WzBdCiAgICAgICAgIGR1bXBfdG9vbF9hcmdzID0gY21kWzE6XQogICAgICAgICBwcm9kdWN0X2Rp
ciA9IHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoKQotICAgICAgICByZWxheV9hcmdzID0gWwotICAg
ICAgICAgICAgJy1kZXZlbG9wZXJEaXInLCBzZWxmLl9wb3J0LmRldmVsb3Blcl9kaXIsCi0gICAg
ICAgICAgICAnLXVkaWQnLCBzZWxmLl9wb3J0LmRldmljZV9pZF9mb3Jfd29ya2VyX251bWJlcihz
ZWxmLl93b3JrZXJfbnVtYmVyKSwKLSAgICAgICAgICAgICctcHJvZHVjdERpcicsIHByb2R1Y3Rf
ZGlyLAotICAgICAgICAgICAgJy1hcHAnLCBkdW1wX3Rvb2wsCi0gICAgICAgIF0KLSAgICAgICAg
cmV0dXJuIFtyZWxheV90b29sXSArIHJlbGF5X2FyZ3MgKyBbJy0tJ10gKyBkdW1wX3Rvb2xfYXJn
cworCisgICAgICAgIHJlbGF5X2FyZ3MgPSBbc2VsZi5fcG9ydC5kZXZpY2VfaWRfZm9yX3dvcmtl
cl9udW1iZXIoc2VsZi5fd29ya2VyX251bWJlciksIGR1bXBfdG9vbF0KKyAgICAgICAgcmV0dXJu
IFtyZWxheV90b29sXSArIHJlbGF5X2FyZ3MgKyBkdW1wX3Rvb2xfYXJncwogCiAgICAgZGVmIF9z
ZXR1cF9lbnZpcm9uX2Zvcl9kcml2ZXIoc2VsZiwgZW52aXJvbm1lbnQpOgogICAgICAgICBlbnZp
cm9ubWVudFsnREVWRUxPUEVSX0RJUiddID0gc2VsZi5fcG9ydC5kZXZlbG9wZXJfZGlyCi0gICAg
ICAgIHJldHVybiBzdXBlcihJT1NTaW11bGF0b3JEcml2ZXIsIHNlbGYpLl9zZXR1cF9lbnZpcm9u
X2Zvcl9kcml2ZXIoZW52aXJvbm1lbnQpCisgICAgICAgIHJldHVybiBzdXBlcihEZXZpY2VEcml2
ZXIsIHNlbGYpLl9zZXR1cF9lbnZpcm9uX2Zvcl9kcml2ZXIoZW52aXJvbm1lbnQpCiAKIAogY2xh
c3MgQ29udGVudEJsb2NrKG9iamVjdCk6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvaW9zLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Mu
cHkJKHJldmlzaW9uIDIwOTc4NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Mu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTM0LDE0ICszNCwxMDggQEAgZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMubW9kZWxzLnRlc3RfYwogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBjb25maWcg
YXMgcG9ydF9jb25maWcKIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgZHJpdmVyLCBpbWFnZV9k
aWZmCiBmcm9tIHdlYmtpdHB5LnBvcnQuZGFyd2luIGltcG9ydCBEYXJ3aW5Qb3J0Ci1mcm9tIHdl
YmtpdHB5Lnhjb2RlLnNpbXVsYXRvciBpbXBvcnQgU2ltdWxhdG9yLCBSdW50aW1lLCBEZXZpY2VU
eXBlCitmcm9tIHdlYmtpdHB5Lnhjb2RlLnNpbXVsYXRvciBpbXBvcnQgU2ltdWxhdG9yLCBSdW50
aW1lLCBEZXZpY2VUeXBlLCBEZXZpY2UKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5jcmFz
aGxvZ3MgaW1wb3J0IENyYXNoTG9ncwogCi0KIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25h
bWVfXykKIAogCi1jbGFzcyBJT1NQb3J0KERhcndpblBvcnQpOgorY2xhc3MgSU9TQmFzZShEYXJ3
aW5Qb3J0KToKKworICAgIFNVQlBST0NFU1NfQ1JBU0hfUkVHRVggPSByZS5jb21waWxlKCcjQ1JB
U0hFRCAtICg/UDxzdWJwcm9jZXNzX25hbWU+XFMrKSBcKHBpZCAoP1A8c3VicHJvY2Vzc19waWQ+
XGQrKVwpJykKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0X25hbWUsICoqa3dh
cmdzKToKKyAgICAgICAgRGFyd2luUG9ydC5fX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0X25hbWUs
ICoqa3dhcmdzKQorICAgICAgICBzZWxmLl9wcmludGluZ19jbWRfbGluZSA9IEZhbHNlCisKKyAg
ICBkZWYgZHJpdmVyX25hbWUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignZHJp
dmVyX25hbWUnKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9vcHRpb24oJ2RyaXZlcl9u
YW1lJykKKyAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd3ZWJraXRfdGVzdF9ydW5uZXInKToK
KyAgICAgICAgICAgIHJldHVybiAnV2ViS2l0VGVzdFJ1bm5lckFwcC5hcHAnCisgICAgICAgIHJl
dHVybiAnRHVtcFJlbmRlclRyZWUuYXBwJworCisgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYs
IG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49dGltZS50aW1l
LCBzbGVlcF9mbj10aW1lLnNsZWVwLCB3YWl0X2Zvcl9sb2c9VHJ1ZSk6CisgICAgICAgIHRpbWVf
Zm4gPSB0aW1lX2ZuIG9yIHRpbWUudGltZQorICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9y
IHRpbWUuc2xlZXAKKworICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgY29sbGVjdCB0aGUgYWN0
dWFsIGNyYXNoIGxvZyBmb3IgRHVtcFJlbmRlclRyZWUuYXBwIGJlY2F1c2UgaXQgaW5jbHVkZXMg
bW9yZQorICAgICAgICAjIGluZm9ybWF0aW9uIChlLmcuIGV4Y2VwdGlvbiBjb2RlcykgdGhhbiBp
cyBhdmFpbGFibGUgaW4gdGhlIHN0YWNrIHRyYWNlIHdyaXR0ZW4gdG8gc3RhbmRhcmQgZXJyb3Iu
CisgICAgICAgIHN0ZGVycl9saW5lcyA9IFtdCisgICAgICAgIGNyYXNoZWRfc3VicHJvY2Vzc19u
YW1lX2FuZF9waWQgPSBOb25lICAjIGUuZy4gKCdEdW1wUmVuZGVyVHJlZS5hcHAnLCAxMjM0KQor
ICAgICAgICBmb3IgbGluZSBpbiAoc3RkZXJyIG9yICcnKS5zcGxpdGxpbmVzKCk6CisgICAgICAg
ICAgICBpZiBub3QgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZDoKKyAgICAgICAgICAg
ICAgICBtYXRjaCA9IHNlbGYuU1VCUFJPQ0VTU19DUkFTSF9SRUdFWC5tYXRjaChsaW5lKQorICAg
ICAgICAgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgICAgICAgICBjcmFzaGVkX3N1YnBy
b2Nlc3NfbmFtZV9hbmRfcGlkID0gKG1hdGNoLmdyb3VwKCdzdWJwcm9jZXNzX25hbWUnKSwgaW50
KG1hdGNoLmdyb3VwKCdzdWJwcm9jZXNzX3BpZCcpKSkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWUKKyAgICAgICAgICAgIHN0ZGVycl9saW5lcy5hcHBlbmQobGluZSkKKworICAgICAgICBp
ZiBjcmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlkOgorICAgICAgICAgICAgcmV0dXJuIHNl
bGYuX2dldF9jcmFzaF9sb2coY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZFswXSwgY3Jh
c2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZFsxXSwgc3Rkb3V0LAorICAgICAgICAgICAgICAg
ICdcbicuam9pbihzdGRlcnJfbGluZXMpLCBuZXdlcl90aGFuLCB0aW1lX2ZuLCBzbGVlcF9mbiwg
d2FpdF9mb3JfbG9nKQorCisgICAgICAgIF9sb2cuZGVidWcoJ2xvb2tpbmcgZm9yIGNyYXNoIGxv
ZyBmb3IgJXM6JXMnICUgKG5hbWUsIHN0cihwaWQpKSkKKyAgICAgICAgY3Jhc2hfbG9nID0gJycK
KyAgICAgICAgY3Jhc2hfbG9ncyA9IENyYXNoTG9ncyhzZWxmLmhvc3QpCisgICAgICAgIG5vdyA9
IHRpbWVfZm4oKQorICAgICAgICBkZWFkbGluZSA9IG5vdyArIDUgKiBpbnQoc2VsZi5nZXRfb3B0
aW9uKCdjaGlsZF9wcm9jZXNzZXMnLCAxKSkKKyAgICAgICAgd2hpbGUgbm90IGNyYXNoX2xvZyBh
bmQgbm93IDw9IGRlYWRsaW5lOgorICAgICAgICAgICAgY3Jhc2hfbG9nID0gY3Jhc2hfbG9ncy5m
aW5kX25ld2VzdF9sb2cobmFtZSwgcGlkLCBpbmNsdWRlX2Vycm9ycz1UcnVlLCBuZXdlcl90aGFu
PW5ld2VyX3RoYW4pCisgICAgICAgICAgICBpZiBub3Qgd2FpdF9mb3JfbG9nOgorICAgICAgICAg
ICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBub3QgY3Jhc2hfbG9nIG9yIG5vdCBbbGluZSBm
b3IgbGluZSBpbiBjcmFzaF9sb2cuc3BsaXRsaW5lcygpIGlmIG5vdCBsaW5lLnN0YXJ0c3dpdGgo
J0VSUk9SJyldOgorICAgICAgICAgICAgICAgIHNsZWVwX2ZuKDAuMSkKKyAgICAgICAgICAgICAg
ICBub3cgPSB0aW1lX2ZuKCkKKworICAgICAgICBpZiBub3QgY3Jhc2hfbG9nOgorICAgICAgICAg
ICAgcmV0dXJuIHN0ZGVyciwgTm9uZQorICAgICAgICByZXR1cm4gc3RkZXJyLCBjcmFzaF9sb2cK
KworICAgIGRlZiBfdGVzdGluZ19kZXZpY2Uoc2VsZiwgbnVtYmVyKToKKyAgICAgICAgcmV0dXJu
IE5vbmUKKworICAgIGRlZiBkZXZpY2VfaWRfZm9yX3dvcmtlcl9udW1iZXIoc2VsZiwgbnVtYmVy
KToKKyAgICAgICAgaWYgc2VsZi5fcHJpbnRpbmdfY21kX2xpbmUgb3Igbm90IHNlbGYuX3Rlc3Rp
bmdfZGV2aWNlKG51bWJlcik6CisgICAgICAgICAgICByZXR1cm4gJzxkdW1teSBpZD4nCisgICAg
ICAgIHJldHVybiBzZWxmLl90ZXN0aW5nX2RldmljZShudW1iZXIpLnVkaWQKKworICAgIGRlZiBf
ZHJpdmVyX2NsYXNzKHNlbGYpOgorICAgICAgICByZXR1cm4gZHJpdmVyLkRldmljZURyaXZlcgor
CisgICAgZGVmIGRldmljZURlZmluZWQoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAg
ICBkZWYgX2RldmljZVBpbmcoc2VsZiwgZGV2aWNlKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisK
KyAgICBkZWYgX2RldmljZUluc3RhbGwoc2VsZiwgZGV2aWNlLCBhcHApOgorICAgICAgICByZXR1
cm4gRmFsc2UKKworICAgIGRlZiBfZGV2aWNlUnVuKHNlbGYsIGNtZCwgZW52aT1Ob25lKToKKyAg
ICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBfZGV2aWNlS2lsbChzZWxmLCBkZXZpY2UsIGFw
cCk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHJ1bk9uRGV2aWNlKHNlbGYsIGNt
ZCwgZW52aT1Ob25lKToKKyAgICAgICAgaWYgbm90IGNtZDoKKyAgICAgICAgICAgIHJldHVybiBO
b25lCisgICAgICAgIGlmIGNtZFswXSA9PSAncGluZyc6CisgICAgICAgICAgICBpZiBsZW4oY21k
KSA+PSAyOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9kZXZpY2VQaW5nKGNtZFsxXSkK
KyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2RldmljZVBp
bmcoTm9uZSkKKyAgICAgICAgZWxpZiBjbWRbMF0gPT0gJ3J1bic6CisgICAgICAgICAgICByZXR1
cm4gc2VsZi5fZGV2aWNlUnVuKGNtZFsxOl0sIGVudmkpCisgICAgICAgIGVsaWYgY21kWzBdID09
ICdpbnN0YWxsJzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9kZXZpY2VJbnN0YWxsKGNtZFsx
XSwgY21kWzJdKQorICAgICAgICBlbGlmIGNtZFswXSA9PSAna2lsbCc6CisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fZGV2aWNlS2lsbChjbWRbMV0sIGNtZFsyXSkKKyAgICAgICAgcmV0dXJuIE5v
bmUKKworCitjbGFzcyBJT1NQb3J0KElPU0Jhc2UpOgogICAgIHBvcnRfbmFtZSA9ICJpb3MiCiAK
ICAgICBBUkNISVRFQ1RVUkVTID0gWydhcm12NycsICdhcm12N3MnLCAnYXJtNjQnXQpAQCAtNjYs
NyArMTYwLDcgQEAgY2xhc3MgSU9TUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgcmV0dXJuICdp
b3MnCiAKIAotY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKK2NsYXNzIElPU1Np
bXVsYXRvclBvcnQoSU9TQmFzZSk6CiAgICAgcG9ydF9uYW1lID0gImlvcy1zaW11bGF0b3IiCiAK
ICAgICBGVVRVUkVfVkVSU0lPTiA9ICdmdXR1cmUnCkBAIC03OCw3ICsxNzIsNiBAQCBjbGFzcyBJ
T1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgIFNESyA9ICdpcGhvbmVzaW11bGF0b3In
CiAKICAgICBTSU1VTEFUT1JfQlVORExFX0lEID0gJ2NvbS5hcHBsZS5pcGhvbmVzaW11bGF0b3In
Ci0gICAgcmVsYXlfbmFtZSA9ICdMYXlvdXRUZXN0UmVsYXknCiAgICAgU0lNVUxBVE9SX0RJUkVD
VE9SWSA9ICIvdG1wL1dlYktpdFRlc3RpbmdTaW11bGF0b3JzLyIKICAgICBMU1JFR0lTVEVSX1BB
VEggPSAiL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29yZVNlcnZpY2VzLmZyYW1ld29yay9G
cmFtZXdvcmtzL0xhdW5jaFNlcnZpY2VzLmZyYW1ld29yay9WZXJzaW9ucy9DdXJyZW50L1N1cHBv
cnQvbHNyZWdpc3RlciIKICAgICBQUk9DRVNTX0NPVU5UX0VTVElNQVRFX1BFUl9TSU1VTEFUT1Jf
SU5TVEFOQ0UgPSAxMDAKQEAgLTk2LDEwICsxODksOSBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0
KERhcndpblBvcnQpOgogICAgIH0KIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0
X25hbWUsICoqa3dhcmdzKToKLSAgICAgICAgRGFyd2luUG9ydC5fX2luaXRfXyhzZWxmLCBob3N0
LCBwb3J0X25hbWUsICoqa3dhcmdzKQorICAgICAgICBJT1NCYXNlLl9faW5pdF9fKHNlbGYsIGhv
c3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpCiAKICAgICAgICAgb3B0aW9uYWxfZGV2aWNlX2NsYXNz
ID0gc2VsZi5nZXRfb3B0aW9uKCdkZXZpY2VfY2xhc3MnKQotICAgICAgICBzZWxmLl9wcmludGlu
Z19jbWRfbGluZSA9IEZhbHNlCiAgICAgICAgIHNlbGYuX2RldmljZV9jbGFzcyA9IG9wdGlvbmFs
X2RldmljZV9jbGFzcyBpZiBvcHRpb25hbF9kZXZpY2VfY2xhc3MgZWxzZSBzZWxmLkRFRkFVTFRf
REVWSUNFX0NMQVNTCiAgICAgICAgIF9sb2cuZGVidWcoJ0lPU1NpbXVsYXRvclBvcnQgX2Rldmlj
ZV9jbGFzcyBpcyAlcycsIHNlbGYuX2RldmljZV9jbGFzcykKIApAQCAtMTQ4LDE2ICsyNDAsNiBA
QCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgICAgICAgICAgZGV2aWNl
X3R5cGUgPSBEZXZpY2VUeXBlLmZyb21fbmFtZShkZXZpY2VfbmFtZSkKICAgICAgICAgcmV0dXJu
IGRldmljZV90eXBlCiAKLSAgICBAcHJvcGVydHkKLSAgICBAbWVtb2l6ZWQKLSAgICBkZWYgcmVs
YXlfcGF0aChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fcm9vdF93YXNfc2V0OgotICAgICAgICAg
ICAgcGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0uYWJzcGF0aChzZWxmLmdldF9vcHRpb24oJ3Jvb3Qn
KSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1hY19jb25maWcgPSBwb3J0X2NvbmZpZy5D
b25maWcoc2VsZi5fZXhlY3V0aXZlLCBzZWxmLl9maWxlc3lzdGVtLCAnbWFjJykKLSAgICAgICAg
ICAgIHBhdGggPSBtYWNfY29uZmlnLmJ1aWxkX2RpcmVjdG9yeShzZWxmLmdldF9vcHRpb24oJ2Nv
bmZpZ3VyYXRpb24nKSkKLSAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihwYXRo
LCBzZWxmLnJlbGF5X25hbWUpCi0KICAgICBAbWVtb2l6ZWQKICAgICBkZWYgY2hpbGRfcHJvY2Vz
c2VzKHNlbGYpOgogICAgICAgICByZXR1cm4gaW50KHNlbGYuZ2V0X29wdGlvbignY2hpbGRfcHJv
Y2Vzc2VzJykpCkBAIC0xODIsNzUgKzI2NCwxMiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERh
cndpblBvcnQpOgogCiAgICAgICAgIHJldHVybiBtaW4obWF4aW11bV9zaW11bGF0b3JfY291bnRf
b25fdGhpc19zeXN0ZW0sIGJlc3RfY2hpbGRfcHJvY2Vzc19jb3VudF9mb3JfY3B1KQogCi0gICAg
ZGVmIF9jaGVja19yZWxheShzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0ZW0u
ZXhpc3RzKHNlbGYucmVsYXlfcGF0aCk6Ci0gICAgICAgICAgICBfbG9nLmVycm9yKCIlcyB3YXMg
bm90IGZvdW5kIGF0ICVzIiAlIChzZWxmLnJlbGF5X25hbWUsIHNlbGYucmVsYXlfcGF0aCkpCi0g
ICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRydWUKLQogICAgIGRlZiBf
Y2hlY2tfcG9ydF9idWlsZChzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuX3Jvb3Rfd2FzX3Nl
dCBhbmQgc2VsZi5nZXRfb3B0aW9uKCdidWlsZCcpIGFuZCBub3Qgc2VsZi5fYnVpbGRfcmVsYXko
KToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBpZiBub3Qgc2VsZi5fY2hlY2tf
cmVsYXkoKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1ZQot
Ci0gICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIs
IG5ld2VyX3RoYW4sIHRpbWVfZm49dGltZS50aW1lLCBzbGVlcF9mbj10aW1lLnNsZWVwLCB3YWl0
X2Zvcl9sb2c9VHJ1ZSk6Ci0gICAgICAgIHRpbWVfZm4gPSB0aW1lX2ZuIG9yIHRpbWUudGltZQot
ICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9yIHRpbWUuc2xlZXAKLQotICAgICAgICAjIEZJ
WE1FOiBXZSBzaG91bGQgY29sbGVjdCB0aGUgYWN0dWFsIGNyYXNoIGxvZyBmb3IgRHVtcFJlbmRl
clRyZWUuYXBwIGJlY2F1c2UgaXQgaW5jbHVkZXMgbW9yZQotICAgICAgICAjIGluZm9ybWF0aW9u
IChlLmcuIGV4Y2VwdGlvbiBjb2RlcykgdGhhbiBpcyBhdmFpbGFibGUgaW4gdGhlIHN0YWNrIHRy
YWNlIHdyaXR0ZW4gdG8gc3RhbmRhcmQgZXJyb3IuCi0gICAgICAgIHN0ZGVycl9saW5lcyA9IFtd
Ci0gICAgICAgIGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9waWQgPSBOb25lICAjIGUuZy4g
KCdEdW1wUmVuZGVyVHJlZS5hcHAnLCAxMjM0KQotICAgICAgICBmb3IgbGluZSBpbiAoc3RkZXJy
IG9yICcnKS5zcGxpdGxpbmVzKCk6Ci0gICAgICAgICAgICBpZiBub3QgY3Jhc2hlZF9zdWJwcm9j
ZXNzX25hbWVfYW5kX3BpZDoKLSAgICAgICAgICAgICAgICBtYXRjaCA9IHNlbGYuU1VCUFJPQ0VT
U19DUkFTSF9SRUdFWC5tYXRjaChsaW5lKQotICAgICAgICAgICAgICAgIGlmIG1hdGNoOgotICAg
ICAgICAgICAgICAgICAgICBjcmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlkID0gKG1hdGNo
Lmdyb3VwKCdzdWJwcm9jZXNzX25hbWUnKSwgaW50KG1hdGNoLmdyb3VwKCdzdWJwcm9jZXNzX3Bp
ZCcpKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIHN0ZGVycl9s
aW5lcy5hcHBlbmQobGluZSkKLQotICAgICAgICBpZiBjcmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9h
bmRfcGlkOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9jcmFzaF9sb2coY3Jhc2hlZF9z
dWJwcm9jZXNzX25hbWVfYW5kX3BpZFswXSwgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3Bp
ZFsxXSwgc3Rkb3V0LAotICAgICAgICAgICAgICAgICdcbicuam9pbihzdGRlcnJfbGluZXMpLCBu
ZXdlcl90aGFuLCB0aW1lX2ZuLCBzbGVlcF9mbiwgd2FpdF9mb3JfbG9nKQotCi0gICAgICAgICMg
TGF5b3V0VGVzdFJlbGF5IGNyYXNoZWQKLSAgICAgICAgX2xvZy5kZWJ1ZygnbG9va2luZyBmb3Ig
Y3Jhc2ggbG9nIGZvciAlczolcycgJSAobmFtZSwgc3RyKHBpZCkpKQotICAgICAgICBjcmFzaF9s
b2cgPSAnJwotICAgICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hMb2dzKHNlbGYuaG9zdCkKLSAgICAg
ICAgbm93ID0gdGltZV9mbigpCi0gICAgICAgIGRlYWRsaW5lID0gbm93ICsgNSAqIGludChzZWxm
LmdldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpKQotICAgICAgICB3aGlsZSBub3QgY3Jh
c2hfbG9nIGFuZCBub3cgPD0gZGVhZGxpbmU6Ci0gICAgICAgICAgICBjcmFzaF9sb2cgPSBjcmFz
aF9sb2dzLmZpbmRfbmV3ZXN0X2xvZyhuYW1lLCBwaWQsIGluY2x1ZGVfZXJyb3JzPVRydWUsIG5l
d2VyX3RoYW49bmV3ZXJfdGhhbikKLSAgICAgICAgICAgIGlmIG5vdCB3YWl0X2Zvcl9sb2c6Ci0g
ICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGlmIG5vdCBjcmFzaF9sb2cgb3Igbm90
IFtsaW5lIGZvciBsaW5lIGluIGNyYXNoX2xvZy5zcGxpdGxpbmVzKCkgaWYgbm90IGxpbmUuc3Rh
cnRzd2l0aCgnRVJST1InKV06Ci0gICAgICAgICAgICAgICAgc2xlZXBfZm4oMC4xKQotICAgICAg
ICAgICAgICAgIG5vdyA9IHRpbWVfZm4oKQotCi0gICAgICAgIGlmIG5vdCBjcmFzaF9sb2c6Ci0g
ICAgICAgICAgICByZXR1cm4gc3RkZXJyLCBOb25lCi0gICAgICAgIHJldHVybiBzdGRlcnIsIGNy
YXNoX2xvZwotCi0gICAgZGVmIF9idWlsZF9yZWxheShzZWxmKToKLSAgICAgICAgZW52aXJvbm1l
bnQgPSBzZWxmLmhvc3QuY29weV9jdXJyZW50X2Vudmlyb25tZW50KCkKLSAgICAgICAgZW52aXJv
bm1lbnQuZGlzYWJsZV9nY2Nfc21hcnRxdW90ZXMoKQotICAgICAgICBlbnYgPSBlbnZpcm9ubWVu
dC50b19kaWN0aW9uYXJ5KCkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIEZJWE1FOiBX
ZSBzaG91bGQgYmUgcGFzc2luZyBfYXJndW1lbnRzX2Zvcl9jb25maWd1cmF0aW9uKCksIHdoaWNo
IHJlc3BlY3RzIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIHBvcnQsCi0gICAgICAgICAgICAjIGlu
c3RlYWQgb2YgaGFyZGNvZGluZyAtLWlvcy1zaW11bGF0b3IuCi0gICAgICAgICAgICBzZWxmLl9y
dW5fc2NyaXB0KCJidWlsZC1sYXlvdXR0ZXN0cmVsYXkiLCBhcmdzPVsiLS1pb3Mtc2ltdWxhdG9y
Il0sIGVudj1lbnYpCi0gICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvciwgZToKLSAgICAgICAgICAg
IF9sb2cuZXJyb3IoZS5tZXNzYWdlX3dpdGhfb3V0cHV0KG91dHB1dF9saW1pdD1Ob25lKSkKLSAg
ICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgZGVmIF9i
dWlsZF9kcml2ZXIoc2VsZik6CiAgICAgICAgIGJ1aWx0X3Rvb2wgPSBzdXBlcihJT1NTaW11bGF0
b3JQb3J0LCBzZWxmKS5fYnVpbGRfZHJpdmVyKCkKLSAgICAgICAgYnVpbHRfcmVsYXkgPSBzZWxm
Ll9idWlsZF9yZWxheSgpCi0gICAgICAgIHJldHVybiBidWlsdF90b29sIGFuZCBidWlsdF9yZWxh
eQorICAgICAgICByZXR1cm4gYnVpbHRfdG9vbAogCiAgICAgZGVmIF9idWlsZF9kcml2ZXJfZmxh
Z3Moc2VsZik6CiAgICAgICAgIGFyY2hzID0gWydBUkNIUz1pMzg2J10gaWYgc2VsZi5hcmNoaXRl
Y3R1cmUoKSA9PSAneDg2JyBlbHNlIFtdCkBAIC0yNjQsOSArMjgzLDYgQEAgY2xhc3MgSU9TU2lt
dWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucy5h
cHBlbmQoVGVzdENvbmZpZ3VyYXRpb24odmVyc2lvbj1zZWxmLl92ZXJzaW9uLCBhcmNoaXRlY3R1
cmU9YXJjaGl0ZWN0dXJlLCBidWlsZF90eXBlPWJ1aWxkX3R5cGUpKQogICAgICAgICByZXR1cm4g
Y29uZmlndXJhdGlvbnMKIAotICAgIGRlZiBfZHJpdmVyX2NsYXNzKHNlbGYpOgotICAgICAgICBy
ZXR1cm4gZHJpdmVyLklPU1NpbXVsYXRvckRyaXZlcgotCiAgICAgZGVmIGRlZmF1bHRfYmFzZWxp
bmVfc2VhcmNoX3BhdGgoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignd2Via2l0
X3Rlc3RfcnVubmVyJyk6CiAgICAgICAgICAgICBmYWxsYmFja19uYW1lcyA9IFtzZWxmLl93azJf
cG9ydF9uYW1lKCldICsgW3NlbGYucG9ydF9uYW1lXSArIFsnd2syJ10KQEAgLTM5OSw4ICs0MTUs
NiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCiAgICAgICAgIHJldHVybiBzdXBlcihJT1NTaW11bGF0b3JQb3J0LCBzZWxmKS5j
aGVja19zeXNfZGVwcyhuZWVkc19odHRwKQogCi0gICAgU1VCUFJPQ0VTU19DUkFTSF9SRUdFWCA9
IHJlLmNvbXBpbGUoJyNDUkFTSEVEIC0gKD9QPHN1YnByb2Nlc3NfbmFtZT5cUyspIFwocGlkICg/
UDxzdWJwcm9jZXNzX3BpZD5cZCspXCknKQotCiAgICAgZGVmIF91c2luZ19kZWRpY2F0ZWRfc2lt
dWxhdG9ycyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X29wdGlvbignZGVkaWNhdGVk
X3NpbXVsYXRvcnMnKQogCkBAIC00NzUsMyArNDg5LDU3IEBAIGNsYXNzIElPU1NpbXVsYXRvclBv
cnQoRGFyd2luUG9ydCk6CiAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsiaW5zdGFs
bF9uYW1lX3Rvb2wiLCAiLWFkZF9ycGF0aCIsIHNlbGYuZGV2ZWxvcGVyX2RpciArICIvLi4vRnJh
bWV3b3Jrcy8iLCBkZXN0aW5hdGlvbiArICIvQ29udGVudHMvTWFjT1MvU2ltdWxhdG9yIl0pCiAg
ICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsiY29kZXNpZ24iLCAiLWZzIiwgIi0iLCBk
ZXN0aW5hdGlvbl0pCiAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFtzZWxmLkxTUkVH
SVNURVJfUEFUSCwgIi1mIiwgZGVzdGluYXRpb25dKQorCisgICAgZGVmIF9kZXZpY2VQaW5nKHNl
bGYsIGRldmljZSk6CisgICAgICAgIGRhdGEgPSBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQo
Wyd4Y3J1bicsICdzaW1jdGwnLCAnbGlzdCddKQorICAgICAgICBpZiBkZXZpY2UgYW5kIGRldmlj
ZSArICcpIChCb290ZWQpJyBpbiBkYXRhOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAg
ICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX2RldmljZUluc3RhbGwoc2VsZiwgZGV2aWNlLCBh
cHApOgorICAgICAgICBpZiBub3Qgc2VsZi5fZGV2aWNlUGluZyhkZXZpY2UpOgorICAgICAgICAg
ICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBub3Qgc2VsZi5fZXhlY3V0aXZlLnJ1bl9j
b21tYW5kKFsKKyAgICAgICAgICAgICd4Y3J1bicsCisgICAgICAgICAgICAnc2ltY3RsJywKKyAg
ICAgICAgICAgICdpbnN0YWxsJywKKyAgICAgICAgICAgIGRldmljZSwKKyAgICAgICAgICAgIGFw
cCwKKyAgICAgICAgXSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKQorCisgICAgZGVmIF9kZXZpY2VS
dW4oc2VsZiwgY21kLCBlbnZpPU5vbmUpOgorICAgICAgICBpZiBub3Qgc2VsZi5fZGV2aWNlUGlu
ZyhjbWRbMF0pOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGFwcGlkID0gc2Vs
Zi5leHRyYWN0QnVuZGxlSUQoY21kWzFdKQorICAgICAgICBpZiBub3QgYXBwaWQ6CisgICAgICAg
ICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgc2VsZi5fZGV2aWNlS2lsbChjbWRbMF0sIGNtZFsx
XSkKKworICAgICAgICB0cmFuc2ZlcmVkRW52aXJvbm1lbnQgPSB7fQorICAgICAgICBmb3IgdmFs
dWUgaW4gZW52aToKKyAgICAgICAgICAgIGlmIG5vdCAiU0lNQ1RMX0NISUxEXyIgaW4gdmFsdWU6
CisgICAgICAgICAgICAgICAgdHJhbnNmZXJlZEVudmlyb25tZW50WydTSU1DVExfQ0hJTERfJyAr
IHZhbHVlXSA9IGVudmlbdmFsdWVdCisgICAgICAgICAgICB0cmFuc2ZlcmVkRW52aXJvbm1lbnRb
dmFsdWVdID0gZW52aVt2YWx1ZV0KKworICAgICAgICByZXR1cm4gbm90IHNlbGYuX2V4ZWN1dGl2
ZS5ydW5fY29tbWFuZChbCisgICAgICAgICAgICAneGNydW4nLAorICAgICAgICAgICAgJ3NpbWN0
bCcsCisgICAgICAgICAgICAnbGF1bmNoJywKKyAgICAgICAgICAgIGNtZFswXSwKKyAgICAgICAg
ICAgIGFwcGlkLAorICAgICAgICBdICsgY21kWzI6XSwKKyAgICAgICAgZW52PXRyYW5zZmVyZWRF
bnZpcm9ubWVudCwKKyAgICAgICAgcmV0dXJuX2V4aXRfY29kZT1UcnVlKQorICAgICAgICByZXR1
cm4gVHJ1ZQorCisgICAgZGVmIF9kZXZpY2VLaWxsKHNlbGYsIGRldmljZSwgYXBwKToKKyAgICAg
ICAgYWRkaWQgPSBzZWxmLmV4dHJhY3RCdW5kbGVJRChhcHApCisgICAgICAgIGlmIG5vdCBhZGRp
ZDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gbm90IHNlbGYuX2V4
ZWN1dGl2ZS5ydW5fY29tbWFuZChbCisgICAgICAgICAgICAneGNydW4nLAorICAgICAgICAgICAg
J3NpbWN0bCcsCisgICAgICAgICAgICAndGVybWluYXRlJywKKyAgICAgICAgICAgIGRldmljZSwK
KyAgICAgICAgICAgIGFkZGlkLAorICAgICAgICBdLCByZXR1cm5fZXhpdF9jb2RlPVRydWUpCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0LnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3QucHkJKHJldmlz
aW9uIDIwOTc4NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3Qu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDkgQEAKIAogaW1wb3J0IHRpbWUKIAorZnJv
bSB3ZWJraXRweS5wb3J0LmlvcyBpbXBvcnQgSU9TUG9ydAogZnJvbSB3ZWJraXRweS5wb3J0Lmlv
cyBpbXBvcnQgSU9TU2ltdWxhdG9yUG9ydAotZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBkYXJ3
aW5fdGVzdGNhc2UKK2Zyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgaW9zYmFzZV90ZXN0Y2FzZQog
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW1fbW9jayBpbXBvcnQgTW9ja0Zp
bGVTeXN0ZW0KIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5vdXRwdXRjYXB0dXJlIGltcG9y
dCBPdXRwdXRDYXB0dXJlCiBmcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1vY2tP
cHRpb25zCkBAIC0zMSw3ICszMiwyMCBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhl
Y3V0aXZlX21vCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdF9tb2NrIGlt
cG9ydCBNb2NrU3lzdGVtSG9zdAogCiAKLWNsYXNzIGlvc1Rlc3QoZGFyd2luX3Rlc3RjYXNlLkRh
cndpblRlc3QpOgorY2xhc3MgSU9TVGVzdChpb3NiYXNlX3Rlc3RjYXNlLklPU0Jhc2VUZXN0KToK
KyAgICBvc19uYW1lID0gJ2lvcycKKyAgICBvc192ZXJzaW9uID0gJycKKyAgICBwb3J0X25hbWUg
PSAnaW9zJworICAgIHBvcnRfbWFrZXIgPSBJT1NQb3J0CisgICAgaXNfc2ltdWxhdG9yID0gRmFs
c2UKKworICAgIGRlZiBtYWtlX3BvcnQoc2VsZiwgaG9zdD1Ob25lLCBwb3J0X25hbWU9Tm9uZSwg
b3B0aW9ucz1Ob25lLCBvc19uYW1lPU5vbmUsIG9zX3ZlcnNpb249Tm9uZSwgKiprd2FyZ3MpOgor
ICAgICAgICBwb3J0ID0gc3VwZXIoSU9TVGVzdCwgc2VsZikubWFrZV9wb3J0KGhvc3Q9aG9zdCwg
cG9ydF9uYW1lPXBvcnRfbmFtZSwgb3B0aW9ucz1vcHRpb25zLCBvc19uYW1lPW9zX25hbWUsIHNf
dmVyc2lvbj1vc192ZXJzaW9uLCBrd2FyZ3M9a3dhcmdzKQorICAgICAgICBwb3J0LnNldF9vcHRp
b24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpCisgICAgICAgIHJldHVybiBwb3J0CisKKworY2xhc3Mg
SU9TU2ltdWxhdG9yVGVzdChpb3NiYXNlX3Rlc3RjYXNlLklPU0Jhc2VUZXN0KToKICAgICBvc19u
YW1lID0gJ2lvcy1zaW11bGF0b3InCiAgICAgb3NfdmVyc2lvbiA9ICcnCiAgICAgcG9ydF9uYW1l
ID0gJ2lvcy1zaW11bGF0b3InCkBAIC0zOSw3ICs1Myw3IEBAIGNsYXNzIGlvc1Rlc3QoZGFyd2lu
X3Rlc3RjYXNlLkRhcndpblRlc3QKICAgICBpc19zaW11bGF0b3IgPSBUcnVlCiAKICAgICBkZWYg
bWFrZV9wb3J0KHNlbGYsIGhvc3Q9Tm9uZSwgcG9ydF9uYW1lPU5vbmUsIG9wdGlvbnM9Tm9uZSwg
b3NfbmFtZT1Ob25lLCBvc192ZXJzaW9uPU5vbmUsICoqa3dhcmdzKToKLSAgICAgICAgcG9ydCA9
IHN1cGVyKGlvc1Rlc3QsIHNlbGYpLm1ha2VfcG9ydChob3N0PWhvc3QsIHBvcnRfbmFtZT1wb3J0
X25hbWUsIG9wdGlvbnM9b3B0aW9ucywgb3NfbmFtZT1vc19uYW1lLCBzX3ZlcnNpb249b3NfdmVy
c2lvbiwga3dhcmdzPWt3YXJncykKKyAgICAgICAgcG9ydCA9IHN1cGVyKElPU1NpbXVsYXRvclRl
c3QsIHNlbGYpLm1ha2VfcG9ydChob3N0PWhvc3QsIHBvcnRfbmFtZT1wb3J0X25hbWUsIG9wdGlv
bnM9b3B0aW9ucywgb3NfbmFtZT1vc19uYW1lLCBzX3ZlcnNpb249b3NfdmVyc2lvbiwga3dhcmdz
PWt3YXJncykKICAgICAgICAgcG9ydC5zZXRfb3B0aW9uKCdjaGlsZF9wcm9jZXNzZXMnLCAxKQog
ICAgICAgICByZXR1cm4gcG9ydAogCkBAIC01MywxNCArNjcsNiBAQCBjbGFzcyBpb3NUZXN0KGRh
cndpbl90ZXN0Y2FzZS5EYXJ3aW5UZXN0CiAgICAgZGVmIHRlc3Rfb3BlcmF0aW5nX3N5c3RlbShz
ZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaW9zLXNpbXVsYXRvcicsIHNlbGYubWFr
ZV9wb3J0KCkub3BlcmF0aW5nX3N5c3RlbSgpKQogCi0gICAgZGVmIHRlc3RfZ2V0X2NyYXNoX2xv
ZyhzZWxmKToKLSAgICAgICAgIyBNYWMgY3Jhc2ggbG9ncyBhcmUgdGVzdGVkIGVsc2V3aGVyZSwg
c28gaGVyZSB3ZSBqdXN0IG1ha2Ugc3VyZSB3ZSBkb24ndCBjcmFzaC4KLSAgICAgICAgZGVmIGZh
a2VfdGltZV9jYigpOgotICAgICAgICAgICAgdGltZXMgPSBbMCwgMjAsIDQwXQotICAgICAgICAg
ICAgcmV0dXJuIGxhbWJkYTogdGltZXMucG9wKDApCi0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2Vf
cG9ydChwb3J0X25hbWU9J2lvcy1zaW11bGF0b3InKQotICAgICAgICBwb3J0Ll9nZXRfY3Jhc2hf
bG9nKCdEdW1wUmVuZGVyVHJlZScsIDEyMzQsIE5vbmUsIE5vbmUsIHRpbWUudGltZSgpLCB3YWl0
X2Zvcl9sb2c9RmFsc2UpCi0KICAgICBkZWYgdGVzdF8zMmJpdChzZWxmKToKICAgICAgICAgcG9y
dCA9IHNlbGYubWFrZV9wb3J0KG9wdGlvbnM9TW9ja09wdGlvbnMoYXJjaGl0ZWN0dXJlPSd4ODYn
KSkKIApAQCAtNzAsNyArNzYsNyBAQCBjbGFzcyBpb3NUZXN0KGRhcndpbl90ZXN0Y2FzZS5EYXJ3
aW5UZXN0CiAgICAgICAgIHBvcnQuX3J1bl9zY3JpcHQgPSBydW5fc2NyaXB0CiAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwocG9ydC5hcmNoaXRlY3R1cmUoKSwgJ3g4NicpCiAgICAgICAgIHBvcnQu
X2J1aWxkX2RyaXZlcigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hcmdzLCBbJy0t
aW9zLXNpbXVsYXRvciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYXJncywgWydB
UkNIUz1pMzg2JywgJy0tc2RrJywgJ2lwaG9uZXNpbXVsYXRvciddKQogCiAgICAgZGVmIHRlc3Rf
NjRiaXQoc2VsZik6CiAgICAgICAgICMgQXBwbGUgTWFjIHBvcnQgaXMgNjQtYml0IGJ5IGRlZmF1
bHQKQEAgLTgyLDcgKzg4LDcgQEAgY2xhc3MgaW9zVGVzdChkYXJ3aW5fdGVzdGNhc2UuRGFyd2lu
VGVzdAogCiAgICAgICAgIHBvcnQuX3J1bl9zY3JpcHQgPSBydW5fc2NyaXB0CiAgICAgICAgIHBv
cnQuX2J1aWxkX2RyaXZlcigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hcmdzLCBb
Jy0taW9zLXNpbXVsYXRvciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYXJncywg
WyctLXNkaycsICdpcGhvbmVzaW11bGF0b3InXSkKIAogICAgIGRlZiB0ZXN0X3Nka19uYW1lKHNl
bGYpOgogICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQpAQCAtOTcsMyArMTAzLDcgQEAg
Y2xhc3MgaW9zVGVzdChkYXJ3aW5fdGVzdGNhc2UuRGFyd2luVGVzdAogICAgICAgICBwb3J0Ll9l
eGVjdXRpdmUgPSBNb2NrRXhlY3V0aXZlMihydW5fY29tbWFuZF9mbj10aHJvd2luZ19ydW5fY29t
bWFuZCkKICAgICAgICAgZXhwZWN0ZWRfc3Rkb3V0ID0gIlsneGNydW4nLCAnLS1zZGsnLCAnaXBo
b25lc2ltdWxhdG9yJywgJy1maW5kJywgJ3Rlc3QnXVxuIgogICAgICAgICBPdXRwdXRDYXB0dXJl
KCkuYXNzZXJ0X291dHB1dHMoc2VsZiwgcG9ydC54Y3J1bl9maW5kLCBhcmdzPVsndGVzdCcsICdm
YWxsaW5nJ10sIGV4cGVjdGVkX3N0ZG91dD1leHBlY3RlZF9zdGRvdXQpCisKKyAgICBkZWYgdGVz
dF9waW5nKHNlbGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQorICAgICAgICBz
ZWxmLmFzc2VydEZhbHNlKHBvcnQucnVuT25EZXZpY2UoWydwaW5nJywgJzxkZXZpZD4nXSkpCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zYmFzZV90ZXN0Y2FzZS5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zYmFzZV90ZXN0Y2FzZS5w
eQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zYmFzZV90
ZXN0Y2FzZS5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisjIENvcHlyaWdodCAo
QykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHRpbWUKKworZnJvbSB3ZWJr
aXRweS5wb3J0IGltcG9ydCBkYXJ3aW5fdGVzdGNhc2UKKworCitjbGFzcyBJT1NCYXNlVGVzdChk
YXJ3aW5fdGVzdGNhc2UuRGFyd2luVGVzdCk6CisKKyAgICBkZWYgdGVzdF9kZXZpY2VGbGFnKHNl
bGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQorICAgICAgICBzZWxmLmFzc2Vy
dFRydWUocG9ydC5kZXZpY2VEZWZpbmVkKCkpCisKKyAgICBkZWYgdGVzdF9nZXRfY3Jhc2hfbG9n
KHNlbGYpOgorICAgICAgICAjIE1hYyBjcmFzaCBsb2dzIGFyZSB0ZXN0ZWQgZWxzZXdoZXJlLCBz
byBoZXJlIHdlIGp1c3QgbWFrZSBzdXJlIHdlIGRvbid0IGNyYXNoLgorICAgICAgICBkZWYgZmFr
ZV90aW1lX2NiKCk6CisgICAgICAgICAgICB0aW1lcyA9IFswLCAyMCwgNDBdCisgICAgICAgICAg
ICByZXR1cm4gbGFtYmRhOiB0aW1lcy5wb3AoMCkKKyAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9w
b3J0KHBvcnRfbmFtZT0naW9zLXNpbXVsYXRvcicpCisgICAgICAgIHBvcnQuX2dldF9jcmFzaF9s
b2coJ0R1bXBSZW5kZXJUcmVlJywgMTIzNCwgTm9uZSwgTm9uZSwgdGltZS50aW1lKCksIHdhaXRf
Zm9yX2xvZz1GYWxzZSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJf
cHJvY2Vzcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2Vy
dmVyX3Byb2Nlc3MucHkJKHJldmlzaW9uIDIwOTc4NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQgQEAK
KyMgQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMg
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtMzAsMTAgKzMxLDEzIEBACiAKIGltcG9ydCBlcnJubwogaW1wb3J0IGxv
Z2dpbmcKK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcKIGltcG9ydCBzaWduYWwKIGltcG9ydCBzeXMK
IGltcG9ydCB0aW1lCiAKK2Zyb20gd2Via2l0cHkuY29tbW9uLmlwY19waXBlIGltcG9ydCBQcm9j
ZXNzUGlwZSwgVW5peFBpcGUKKwogIyBOb3RlIHRoYXQgYWx0aG91Z2ggd2luMzIgcHl0aG9uIGRv
ZXMgcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBvZgogIyB0aGUgd2luMzIgc2VsZWN0IEFQSSwg
aXQgb25seSB3b3JrcyBvbiBzb2NrZXRzLCBhbmQgbm90IG9uIHRoZSBuYW1lZCBwaXBlcwogIyB1
c2VkIGJ5IHN1YnByb2Nlc3MsIHNvIHdlIGhhdmUgdG8gdXNlIHRoZSBuYXRpdmUgQVBJcyBkaXJl
Y3RseS4KQEAgLTcxLDMyICs3NSwyNSBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6CiAg
ICAgICAgIHNlbGYuX2hvc3QgPSBzZWxmLl9wb3J0Lmhvc3QKICAgICAgICAgc2VsZi5fcGlkID0g
Tm9uZQogICAgICAgICBzZWxmLl9yZXNldCgpCi0KLSAgICAgICAgIyBTZWUgY29tbWVudCBpbiBp
bXBvcnRzIGZvciB3aHkgd2UgbmVlZCB0aGUgd2luMzIgQVBJcyBhbmQgY2FuJ3QganVzdCB1c2Ug
c2VsZWN0LgotICAgICAgICAjIEZJWE1FOiB0aGVyZSBzaG91bGQgYmUgYSB3YXkgdG8gZ2V0IHdp
bjMyIHZzLiBjeWd3aW4gZnJvbSBwbGF0Zm9ybWluZm8uCisgICAgICAgIHNlbGYuX3BpcGUgPSBO
b25lCiAgICAgICAgIHNlbGYuX3VzZV93aW4zMl9hcGlzID0gc3lzLnBsYXRmb3JtLnN0YXJ0c3dp
dGgoJ3dpbicpCiAKKyAgICAgICAgaWYgInJ1bi1vbi1kZXZpY2UiID09IHNlbGYuX2NtZFswXToK
KyAgICAgICAgICAgIHNlbGYuX3BvcnQucnVuT25EZXZpY2UoWydpbnN0YWxsJywgc2VsZi5fY21k
WzFdLCBzZWxmLl9jbWRbMl1dKQorCiAgICAgZGVmIG5hbWUoc2VsZik6CiAgICAgICAgIHJldHVy
biBzZWxmLl9uYW1lCiAKICAgICBkZWYgcGlkKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5f
cGlkCiAKKyAgICBkZWYgY2xlYW4oc2VsZik6CisgICAgICAgIHNlbGYuX3BpcGUuY2xlYW4oKQor
CiAgICAgZGVmIF9yZXNldChzZWxmKToKLSAgICAgICAgaWYgZ2V0YXR0cihzZWxmLCAnX3Byb2Mn
LCBOb25lKToKLSAgICAgICAgICAgIGlmIHNlbGYuX3Byb2Muc3RkaW46Ci0gICAgICAgICAgICAg
ICAgc2VsZi5fcHJvYy5zdGRpbi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgc2VsZi5fcHJvYy5z
dGRpbiA9IE5vbmUKLSAgICAgICAgICAgIGlmIHNlbGYuX3Byb2Muc3Rkb3V0OgotICAgICAgICAg
ICAgICAgIHNlbGYuX3Byb2Muc3Rkb3V0LmNsb3NlKCkKLSAgICAgICAgICAgICAgICBzZWxmLl9w
cm9jLnN0ZG91dCA9IE5vbmUKLSAgICAgICAgICAgIGlmIHNlbGYuX3Byb2Muc3RkZXJyOgotICAg
ICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkZXJyLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBz
ZWxmLl9wcm9jLnN0ZGVyciA9IE5vbmUKLQotICAgICAgICBzZWxmLl9wcm9jID0gTm9uZQotICAg
ICAgICBzZWxmLl9vdXRwdXQgPSBzdHIoKSAgIyBieXRlc2FycmF5KCkgb25jZSB3ZSByZXF1aXJl
IFB5dGhvbiAyLjYKLSAgICAgICAgc2VsZi5fZXJyb3IgPSBzdHIoKSAgIyBieXRlc2FycmF5KCkg
b25jZSB3ZSByZXF1aXJlIFB5dGhvbiAyLjYKKyAgICAgICAgc2VsZi5fcGlwZSA9IE5vbmUKKyAg
ICAgICAgc2VsZi5fcGlkID0gTm9uZQorCiAgICAgICAgIHNlbGYuX2NyYXNoZWQgPSBGYWxzZQog
ICAgICAgICBzZWxmLnRpbWVkX291dCA9IEZhbHNlCiAKQEAgLTEwNCw3NSArMTAxLDg1IEBAIGNs
YXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToKICAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKIAog
ICAgIGRlZiBfc3RhcnQoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX3Byb2M6CisgICAgICAgIHNl
bGYuX3BpZCA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5fcGlwZToKICAgICAgICAgICAgIHJhaXNl
IFZhbHVlRXJyb3IoIiVzIGFscmVhZHkgcnVubmluZyIgJSBzZWxmLl9uYW1lKQogICAgICAgICBz
ZWxmLl9yZXNldCgpCi0gICAgICAgICMgY2xvc2VfZmRzIGlzIGEgd29ya2Fyb3VuZCBmb3IgaHR0
cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIzMjAKLSAgICAgICAgY2xvc2VfZmRzID0gbm90IHNl
bGYuX2hvc3QucGxhdGZvcm0uaXNfd2luKCkKLSAgICAgICAgc2VsZi5fcHJvYyA9IHNlbGYuX2hv
c3QuZXhlY3V0aXZlLnBvcGVuKHNlbGYuX2NtZCwgc3RkaW49c2VsZi5faG9zdC5leGVjdXRpdmUu
UElQRSwKLSAgICAgICAgICAgIHN0ZG91dD1zZWxmLl9ob3N0LmV4ZWN1dGl2ZS5QSVBFLAotICAg
ICAgICAgICAgc3RkZXJyPXNlbGYuX2hvc3QuZXhlY3V0aXZlLlBJUEUsCi0gICAgICAgICAgICBj
bG9zZV9mZHM9Y2xvc2VfZmRzLAotICAgICAgICAgICAgZW52PXNlbGYuX2VudiwKLSAgICAgICAg
ICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1zZWxmLl91bml2ZXJzYWxfbmV3bGluZXMpCi0gICAgICAg
IHNlbGYuX3BpZCA9IHNlbGYuX3Byb2MucGlkCi0gICAgICAgIHNlbGYuX3BvcnQuZmluZF9zeXN0
ZW1fcGlkKHNlbGYubmFtZSgpLCBzZWxmLl9waWQpCi0gICAgICAgIGZkID0gc2VsZi5fcHJvYy5z
dGRvdXQuZmlsZW5vKCkKLSAgICAgICAgaWYgbm90IHNlbGYuX3VzZV93aW4zMl9hcGlzOgotICAg
ICAgICAgICAgZmwgPSBmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGTCkKLSAgICAgICAgICAg
IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX1NFVEZMLCBmbCB8IG9zLk9fTk9OQkxPQ0spCi0gICAg
ICAgICAgICBmZCA9IHNlbGYuX3Byb2Muc3RkZXJyLmZpbGVubygpCi0gICAgICAgICAgICBmbCA9
IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZMKQotICAgICAgICAgICAgZmNudGwuZmNudGwo
ZmQsIGZjbnRsLkZfU0VURkwsIGZsIHwgb3MuT19OT05CTE9DSykKLQotICAgIGRlZiBfaGFuZGxl
X3Bvc3NpYmxlX2ludGVycnVwdChzZWxmKToKLSAgICAgICAgIiIiVGhpcyByb3V0aW5lIGNoZWNr
cyB0byBzZWUgaWYgdGhlIHByb2Nlc3MgY3Jhc2hlZCBvciBleGl0ZWQKLSAgICAgICAgYmVjYXVz
ZSBvZiBhIGtleWJvYXJkIGludGVycnVwdCBhbmQgcmFpc2VzIEtleWJvYXJkSW50ZXJydXB0Ci0g
ICAgICAgIGFjY29yZGluZ2x5LiIiIgotICAgICAgICAjIEZJWE1FOiBMaW51eCBhbmQgTWFjIHNl
dCB0aGUgcmV0dXJuY29kZSB0byAtc2lnbmFsLlNJR0lOVCBpZiBhCi0gICAgICAgICMgc3VicHJv
Y2VzcyBpcyBraWxsZWQgd2l0aCBhIGN0cmxeQy4gIFByZXZpb3VzIGNvbW1lbnRzIGluIHRoaXMK
LSAgICAgICAgIyByb3V0aW5lIHNhaWQgdGhhdCBzdXBwb3NlZGx5IFdpbmRvd3MgcmV0dXJucyAw
eGMwMDAwMDFkLCBidXQgdGhhdCdzIG5vdCB3aGF0Ci0gICAgICAgICMgLTEwNzM3NDE1MTAgZXZh
bHVhdGVzIHRvLiBGaWd1cmUgb3V0IHdoYXQgdGhlIHJpZ2h0IHZhbHVlIGlzCi0gICAgICAgICMg
Zm9yIHdpbjMyIGFuZCBjeWd3aW4gaGVyZSAuLi4KLSAgICAgICAgaWYgc2VsZi5fcHJvYy5yZXR1
cm5jb2RlIGluICgtMTA3Mzc0MTUxMCwgLXNpZ25hbC5TSUdJTlQpOgotICAgICAgICAgICAgcmFp
c2UgS2V5Ym9hcmRJbnRlcnJ1cHQKKworICAgICAgICBpZiAicnVuLW9uLWRldmljZSIgPT0gc2Vs
Zi5fY21kWzBdOgorICAgICAgICAgICAgc2VsZi5fZW52WydJUENfSURFTlRJRklFUiddID0gc2Vs
Zi5fcG9ydC5leHRyYWN0QnVuZGxlSUQoc2VsZi5fY21kWzJdKSArICItIiArIHNlbGYuX2NtZFsx
XQorICAgICAgICAgICAgZmlsZV9sb2NhdGlvbiA9ICcvdG1wLycgKyBzZWxmLl9lbnZbJ0lQQ19J
REVOVElGSUVSJ10KKyAgICAgICAgICAgIHNlbGYuX3BpcGUgPSBVbml4UGlwZShmaWxlX2xvY2F0
aW9uICsgJ19JTicsIGZpbGVfbG9jYXRpb24gKyAnX09VVCcsIGZpbGVfbG9jYXRpb24gKyAnX0VS
Uk9SJykKKyAgICAgICAgICAgIHNlbGYuX3BvcnQucnVuT25EZXZpY2UoWydydW4nXSArIHNlbGYu
X2NtZFsxOl0sIHNlbGYuX2VudikKKyAgICAgICAgICAgIHNlbGYuX3BpcGUuY29ubmVjdCgpCisg
ICAgICAgICAgICBpZiBzZWxmLl9waXBlLmlzQ29ubmVjdGVkKCk6CisgICAgICAgICAgICAgICAg
cGlkID0gc2VsZi5yZWFkX3N0ZGVycl9saW5lKHRpbWUudGltZSgpICsgMS4wKQorICAgICAgICAg
ICAgICAgIGlmIHBpZDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGlkID0gaW50KHBpZFs2
Oi0xXSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBfbG9nLmRl
YnVnKCdObyBwaWQgcmVjZWl2ZWQgZnJvbSBVbml4LXBpcGUgYmFzZWQgY2xpZW50JykKKyAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygnRmFpbGVkIHRvIGNvbm5lY3QgdG8gbGF1bmNoaW5n
IGFwcCcpCisgICAgICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUKKworICAgICAgICBl
bHNlOgorICAgICAgICAgICAgc2VsZi5fcGlwZSA9IFByb2Nlc3NQaXBlKHNlbGYuX3BvcnQsIHNl
bGYuX2NtZCwgc2VsZi5fZW52LCBzZWxmLl91bml2ZXJzYWxfbmV3bGluZXMpCisgICAgICAgICAg
ICBzZWxmLl9waWQgPSBzZWxmLl9waXBlLnBpZCgpCisKKyAgICAgICAgaWYgbm90IHNlbGYucG9s
bCgpOgorICAgICAgICAgICAgc2VsZi5fcG9ydC5maW5kX3N5c3RlbV9waWQoc2VsZi5uYW1lKCks
IHNlbGYucGlkKCkpCiAKICAgICBkZWYgcG9sbChzZWxmKToKICAgICAgICAgIiIiQ2hlY2sgdG8g
c2VlIGlmIHRoZSB1bmRlcmx5aW5nIHByb2Nlc3MgaXMgcnVubmluZzsgcmV0dXJucyBOb25lCiAg
ICAgICAgIGlmIGl0IHN0aWxsIGlzICh3cmFwcGVyIGFyb3VuZCBzdWJwcm9jZXNzLnBvbGwpLiIi
IgotICAgICAgICBpZiBzZWxmLl9wcm9jOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2Mu
cG9sbCgpCi0gICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGlmIHNlbGYuX3BpcGUgYW5kIHNl
bGYuX3BpcGUuaXNDb25uZWN0ZWQoKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAg
IHJldHVybiBUcnVlCiAKICAgICBkZWYgd3JpdGUoc2VsZiwgYnl0ZXMsIGlnbm9yZV9jcmFzaD1G
YWxzZSk6CisKICAgICAgICAgIiIiV3JpdGUgYSByZXF1ZXN0IHRvIHRoZSBzdWJwcm9jZXNzLiBU
aGUgc3VicHJvY2VzcyBpcyAocmUtKXN0YXJ0KCknZWQKICAgICAgICAgaWYgaXMgbm90IGFscmVh
ZHkgcnVubmluZy4iIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX3Byb2M6CisgICAgICAgIGlmIG5v
dCBzZWxmLl9waXBlOgogICAgICAgICAgICAgc2VsZi5fc3RhcnQoKQotICAgICAgICB0cnk6Ci0g
ICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGluLndyaXRlKGJ5dGVzKQotICAgICAgICBleGNlcHQg
SU9FcnJvciwgZToKLSAgICAgICAgICAgIHNlbGYuc3RvcCgwLjApCi0gICAgICAgICAgICAjIHN0
b3AoKSBjYWxscyBfcmVzZXQoKSwgc28gd2UgaGF2ZSB0byBzZXQgY3Jhc2hlZCB0byBUcnVlIGFm
dGVyIGNhbGxpbmcgc3RvcCgpCi0gICAgICAgICAgICAjIHVubGVzcyB3ZSBhbHJlYWR5IGtub3cg
dGhhdCB0aGlzIGlzIGEgdGltZW91dC4KKyAgICAgICAgc3VjY2VzcyA9IEZhbHNlCisgICAgICAg
IGlmIHNlbGYuX3BpcGU6CisgICAgICAgICAgICBzdWNjZXNzID0gc2VsZi5fcGlwZS5zZW5kKGJ5
dGVzKQorCisgICAgICAgIGlmIG5vdCBzdWNjZXNzOgorICAgICAgICAgICAgc2VsZi5zdG9wKCkK
ICAgICAgICAgICAgIGlmIG5vdCBpZ25vcmVfY3Jhc2g6CiAgICAgICAgICAgICAgICAgX2xvZy5k
ZWJ1ZygnVGhpcyB0ZXN0IG1hcmtlZCBhcyBhIGNyYXNoIGJlY2F1c2Ugb2YgYSBicm9rZW4gcGlw
ZSB3aGVuIHdyaXRpbmcgdG8gc3RkaW4gb2YgdGhlIHNlcnZlciBwcm9jZXNzLicpCiAgICAgICAg
ICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUKIAogICAgIGRlZiBfcG9wX3N0ZG91dF9saW5l
X2lmX3JlYWR5KHNlbGYpOgotICAgICAgICBpbmRleF9hZnRlcl9uZXdsaW5lID0gc2VsZi5fb3V0
cHV0LmZpbmQoJ1xuJykgKyAxCi0gICAgICAgIGlmIGluZGV4X2FmdGVyX25ld2xpbmUgPiAwOgot
ICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BvcF9vdXRwdXRfYnl0ZXMoaW5kZXhfYWZ0ZXJfbmV3
bGluZSkKKyAgICAgICAgZGF0YSA9IFtdCisgICAgICAgIGlmIHNlbGYuX3BpcGU6CisgICAgICAg
ICAgICBkYXRhID0gc2VsZi5fcGlwZS5zdGRvdXRSZWFkKCkKKworICAgICAgICBpZiBkYXRhOgor
ICAgICAgICAgICAgcmV0dXJuIGRhdGEKICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGRlZiBf
cG9wX3N0ZGVycl9saW5lX2lmX3JlYWR5KHNlbGYpOgotICAgICAgICBpbmRleF9hZnRlcl9uZXds
aW5lID0gc2VsZi5fZXJyb3IuZmluZCgnXG4nKSArIDEKLSAgICAgICAgaWYgaW5kZXhfYWZ0ZXJf
bmV3bGluZSA+IDA6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcG9wX2Vycm9yX2J5dGVzKGlu
ZGV4X2FmdGVyX25ld2xpbmUpCisgICAgICAgIGRhdGEgPSBbXQorICAgICAgICBpZiBzZWxmLl9w
aXBlOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX3BpcGUuc3RkZXJyUmVhZCgpCisgICAgICAg
IGlmIGRhdGE6CisgICAgICAgICAgICByZXR1cm4gZGF0YQogICAgICAgICByZXR1cm4gTm9uZQog
CiAgICAgZGVmIHBvcF9hbGxfYnVmZmVyZWRfc3RkZXJyKHNlbGYpOgotICAgICAgICByZXR1cm4g
c2VsZi5fcG9wX2Vycm9yX2J5dGVzKGxlbihzZWxmLl9lcnJvcikpCisgICAgICAgIF9lcnJvciA9
ICIiCisgICAgICAgIF9jdXJyZW50X2Vycm9yID0gW10KKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAg
ICAgICAgICAgIGlmIHNlbGYuX3BpcGU6CisgICAgICAgICAgICAgICAgX2N1cnJlbnRfZXJyb3Ig
PSBzZWxmLl9waXBlLnN0ZGVyclJlYWQoKQorICAgICAgICAgICAgaWYgbm90IF9jdXJyZW50X2Vy
cm9yOgorICAgICAgICAgICAgICAgIHJldHVybiBfZXJyb3IKKyAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgX2Vycm9yID0gX2Vycm9yICsgX2N1cnJlbnRfZXJyb3IgKyAnXG4nCiAK
ICAgICBkZWYgcmVhZF9zdGRvdXRfbGluZShzZWxmLCBkZWFkbGluZSk6CiAgICAgICAgIHJldHVy
biBzZWxmLl9yZWFkKGRlYWRsaW5lLCBzZWxmLl9wb3Bfc3Rkb3V0X2xpbmVfaWZfcmVhZHkpCkBA
IC0xOTEsNyArMTk4LDYgQEAgY2xhc3MgU2VydmVyUHJvY2VzcyhvYmplY3QpOgogICAgICAgICAg
ICAgcmV0dXJuIE5vbmUgICMgSW5zdHJ1Y3RzIHRoZSBjYWxsZXIgdG8ga2VlcCB3YWl0aW5nLgog
CiAgICAgICAgIHJldHVybl92YWx1ZSA9IHNlbGYuX3JlYWQoZGVhZGxpbmUsIHJldHJpZXZlX2J5
dGVzX2Zyb21fYnVmZmVycykKLSAgICAgICAgIyBGSVhNRTogVGhpcyBpcyBhIGJpdCBvZiBhIGhh
Y2sgYXJvdW5kIHRoZSBmYWN0IHRoYXQgX3JlYWQgbm9ybWFsbHkgb25seSByZXR1cm5zIG9uZSB2
YWx1ZSwgYnV0IHRoaXMgY2FsbGVyIHdhbnRzIGl0IHRvIHJldHVybiB0d28uCiAgICAgICAgIGlm
IHJldHVybl92YWx1ZSBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKICAg
ICAgICAgcmV0dXJuIHJldHVybl92YWx1ZQpAQCAtMjAxLDExNyArMjA3LDI1IEBAIGNsYXNzIFNl
cnZlclByb2Nlc3Mob2JqZWN0KToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1NlcnZl
clByb2Nlc3MucmVhZCgpIGNhbGxlZCB3aXRoIGEgbm9uLXBvc2l0aXZlIHNpemU6ICVkICcgJSBz
aXplKQogCiAgICAgICAgIGRlZiByZXRyaWV2ZV9ieXRlc19mcm9tX3N0ZG91dF9idWZmZXIoKToK
LSAgICAgICAgICAgIGlmIGxlbihzZWxmLl9vdXRwdXQpID49IHNpemU6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHNlbGYuX3BvcF9vdXRwdXRfYnl0ZXMoc2l6ZSkKKyAgICAgICAgICAgIGlmIHNl
bGYuX3BpcGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BpcGUucmVhZEJsb2NrU3Rk
b3V0KHNpemUpCiAgICAgICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgICAgIHJldHVybiBzZWxm
Ll9yZWFkKGRlYWRsaW5lLCByZXRyaWV2ZV9ieXRlc19mcm9tX3N0ZG91dF9idWZmZXIpCiAKLSAg
ICBkZWYgX2xvZyhzZWxmLCBtZXNzYWdlKToKLSAgICAgICAgIyBUaGlzIGlzIGEgYml0IG9mIGEg
aGFjaywgYnV0IHdlIGZpcnN0IGxvZyBhIGJsYW5rIGxpbmUgdG8gYXZvaWQKLSAgICAgICAgIyBt
ZXNzaW5nIHVwIHRoZSBtYXN0ZXIgcHJvY2VzcydzIG91dHB1dC4KLSAgICAgICAgX2xvZy5pbmZv
KCcnKQotICAgICAgICBfbG9nLmluZm8obWVzc2FnZSkKLQogICAgIGRlZiBfaGFuZGxlX3RpbWVv
dXQoc2VsZik6CiAgICAgICAgIHNlbGYudGltZWRfb3V0ID0gVHJ1ZQogICAgICAgICBpZiBzZWxm
Ll9wb3J0LmdldF9vcHRpb24oInNhbXBsZV9vbl90aW1lb3V0Iik6CiAgICAgICAgICAgICBzZWxm
Ll9wb3J0LnNhbXBsZV9wcm9jZXNzKHNlbGYuX25hbWUsIHNlbGYuX3Byb2MucGlkKQogCi0gICAg
ZGVmIF9zcGxpdF9zdHJpbmdfYWZ0ZXJfaW5kZXgoc2VsZiwgc3RyaW5nLCBpbmRleCk6Ci0gICAg
ICAgIHJldHVybiBzdHJpbmdbOmluZGV4XSwgc3RyaW5nW2luZGV4Ol0KLQotICAgIGRlZiBfcG9w
X291dHB1dF9ieXRlcyhzZWxmLCBieXRlc19jb3VudCk6Ci0gICAgICAgIG91dHB1dCwgc2VsZi5f
b3V0cHV0ID0gc2VsZi5fc3BsaXRfc3RyaW5nX2FmdGVyX2luZGV4KHNlbGYuX291dHB1dCwgYnl0
ZXNfY291bnQpCi0gICAgICAgIHJldHVybiBvdXRwdXQKLQotICAgIGRlZiBfcG9wX2Vycm9yX2J5
dGVzKHNlbGYsIGJ5dGVzX2NvdW50KToKLSAgICAgICAgb3V0cHV0LCBzZWxmLl9lcnJvciA9IHNl
bGYuX3NwbGl0X3N0cmluZ19hZnRlcl9pbmRleChzZWxmLl9lcnJvciwgYnl0ZXNfY291bnQpCi0g
ICAgICAgIHJldHVybiBvdXRwdXQKLQotICAgIGRlZiBfd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRl
X2J1ZmZlcnNfdXNpbmdfc2VsZWN0KHNlbGYsIGRlYWRsaW5lLCBzdG9wcGluZz1GYWxzZSk6Ci0g
ICAgICAgIGlmIHNlbGYuX3Byb2Muc3Rkb3V0LmNsb3NlZCBvciBzZWxmLl9wcm9jLnN0ZGVyci5j
bG9zZWQ6Ci0gICAgICAgICAgICAjIElmIHRoZSBwcm9jZXNzIGNyYXNoZWQgYW5kIGlzIHVzaW5n
IEZJRk9zLCBsaWtlIENocm9taXVtIEFuZHJvaWQsIHRoZQotICAgICAgICAgICAgIyBzdGRvdXQg
YW5kIHN0ZGVyciBwaXBlcyB3aWxsIGJlIGNsb3NlZC4KLSAgICAgICAgICAgIHJldHVybgotCi0g
ICAgICAgIG91dF9mZCA9IHNlbGYuX3Byb2Muc3Rkb3V0LmZpbGVubygpCi0gICAgICAgIGVycl9m
ZCA9IHNlbGYuX3Byb2Muc3RkZXJyLmZpbGVubygpCi0gICAgICAgIHNlbGVjdF9mZHMgPSAob3V0
X2ZkLCBlcnJfZmQpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJlYWRfZmRzLCBfLCBfID0g
c2VsZWN0LnNlbGVjdChzZWxlY3RfZmRzLCBbXSwgc2VsZWN0X2ZkcywgbWF4KGRlYWRsaW5lIC0g
dGltZS50aW1lKCksIDApKQotICAgICAgICBleGNlcHQgc2VsZWN0LmVycm9yLCBlOgotICAgICAg
ICAgICAgIyBXZSBjYW4gaWdub3JlIEVJTlZBTCBzaW5jZSBpdCdzIGxpa2VseSB0aGUgcHJvY2Vz
cyBqdXN0IGNyYXNoZWQgYW5kIHdlJ2xsCi0gICAgICAgICAgICAjIGZpZ3VyZSB0aGF0IG91dCB0
aGUgbmV4dCB0aW1lIHRocm91Z2ggdGhlIGxvb3AgaW4gX3JlYWQoKS4KLSAgICAgICAgICAgIGlm
IGUuYXJnc1swXSA9PSBlcnJuby5FSU5WQUw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAg
ICAgICAgICByYWlzZQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgTm90ZSB0aGF0IHdl
IG1heSBnZXQgbm8gZGF0YSBkdXJpbmcgcmVhZCgpIGV2ZW4gdGhvdWdoCi0gICAgICAgICAgICAj
IHNlbGVjdCBzYXlzIHdlIGdvdCBzb21ldGhpbmc7IHNlZSB0aGUgc2VsZWN0KCkgbWFuIHBhZ2UK
LSAgICAgICAgICAgICMgb24gbGludXguIEkgZG9uJ3Qga25vdyBpZiB0aGlzIGhhcHBlbnMgb24g
TWFjIE9TIGFuZAotICAgICAgICAgICAgIyBvdGhlciBVbml4ZW4gYXMgd2VsbCwgYnV0IHdlIGRv
bid0IGJvdGhlciBzcGVjaWFsLWNhc2luZwotICAgICAgICAgICAgIyBMaW51eCBiZWNhdXNlIGl0
J3MgcmVsYXRpdmVseSBoYXJtbGVzcyBlaXRoZXIgd2F5LgotICAgICAgICAgICAgaWYgb3V0X2Zk
IGluIHJlYWRfZmRzOgotICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9wcm9jLnN0ZG91dC5y
ZWFkKCkKLSAgICAgICAgICAgICAgICBpZiBub3QgZGF0YSBhbmQgbm90IHN0b3BwaW5nIGFuZCAo
c2VsZi5fdHJlYXRfbm9fZGF0YV9hc19jcmFzaCBvciBzZWxmLl9wcm9jLnBvbGwoKSk6Ci0gICAg
ICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJ1RoaXMgdGVzdCBtYXJrZWQgYXMgYSBjcmFzaCBi
ZWNhdXNlIG9mIG5vIGRhdGEgd2hpbGUgcmVhZGluZyBzdGRvdXQgZm9yIHRoZSBzZXJ2ZXIgcHJv
Y2Vzcy4nKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQotICAgICAg
ICAgICAgICAgIHNlbGYuX291dHB1dCArPSBkYXRhCi0KLSAgICAgICAgICAgIGlmIGVycl9mZCBp
biByZWFkX2ZkczoKLSAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fcHJvYy5zdGRlcnIucmVh
ZCgpCi0gICAgICAgICAgICAgICAgaWYgbm90IGRhdGEgYW5kIG5vdCBzdG9wcGluZyBhbmQgKHNl
bGYuX3RyZWF0X25vX2RhdGFfYXNfY3Jhc2ggb3Igc2VsZi5fcHJvYy5wb2xsKCkpOgotICAgICAg
ICAgICAgICAgICAgICBfbG9nLmRlYnVnKCdUaGlzIHRlc3QgbWFya2VkIGFzIGEgY3Jhc2ggYmVj
YXVzZSBvZiBubyBkYXRhIHdoaWxlIHJlYWRpbmcgc3Rkb3V0IGZvciB0aGUgc2VydmVyIHByb2Nl
c3MuJykKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUKLSAgICAgICAg
ICAgICAgICBzZWxmLl9lcnJvciArPSBkYXRhCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgot
ICAgICAgICAgICAgIyBXZSBjYW4gaWdub3JlIHRoZSBJT0Vycm9ycyBiZWNhdXNlIHdlIHdpbGwg
ZGV0ZWN0IGlmIHRoZSBzdWJwb3JjZXNzIGNyYXNoZWQKLSAgICAgICAgICAgICMgdGhlIG5leHQg
dGltZSB0aHJvdWdoIHRoZSBsb29wIGluIF9yZWFkKCkKLSAgICAgICAgICAgIHBhc3MKLQotICAg
IGRlZiBfd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnNfdXNpbmdfd2luMzJfYXBpcyhz
ZWxmLCBkZWFkbGluZSk6Ci0gICAgICAgICMgU2VlIGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNv
bS9yZWNpcGVzLzQ0MDU1NC1tb2R1bGUtdG8tYWxsb3ctYXN5bmNocm9ub3VzLXN1YnByb2Nlc3Mt
dXNlLW9uLXdpbi8KLSAgICAgICAgIyBhbmQgaHR0cDovL2RvY3MuYWN0aXZlc3RhdGUuY29tL2Fj
dGl2ZXB5dGhvbi8yLjYvcHl3aW4zMi9tb2R1bGVzLmh0bWwKLSAgICAgICAgIyBmb3IgZG9jdW1l
bnRhdGlvbiBvbiBhbGwgb2YgdGhlc2Ugd2luMzItc3BlY2lmaWMgbW9kdWxlcy4KLSAgICAgICAg
bm93ID0gdGltZS50aW1lKCkKLSAgICAgICAgb3V0X2ZoID0gbXN2Y3J0LmdldF9vc2ZoYW5kbGUo
c2VsZi5fcHJvYy5zdGRvdXQuZmlsZW5vKCkpCi0gICAgICAgIGVycl9maCA9IG1zdmNydC5nZXRf
b3NmaGFuZGxlKHNlbGYuX3Byb2Muc3RkZXJyLmZpbGVubygpKQotICAgICAgICB3aGlsZSAoc2Vs
Zi5fcHJvYy5wb2xsKCkgaXMgTm9uZSkgYW5kIChub3cgPCBkZWFkbGluZSk6Ci0gICAgICAgICAg
ICBvdXRwdXQgPSBzZWxmLl9ub25fYmxvY2tpbmdfcmVhZF93aW4zMihvdXRfZmgpCi0gICAgICAg
ICAgICBlcnJvciA9IHNlbGYuX25vbl9ibG9ja2luZ19yZWFkX3dpbjMyKGVycl9maCkKLSAgICAg
ICAgICAgIGlmIG91dHB1dCBvciBlcnJvcjoKLSAgICAgICAgICAgICAgICBpZiBvdXRwdXQ6Ci0g
ICAgICAgICAgICAgICAgICAgIHNlbGYuX291dHB1dCArPSBvdXRwdXQKLSAgICAgICAgICAgICAg
ICBpZiBlcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXJyb3IgKz0gZXJyb3IKLSAg
ICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKLSAgICAg
ICAgICAgIG5vdyA9IHRpbWUudGltZSgpCi0gICAgICAgIHJldHVybgotCi0gICAgZGVmIF9ub25f
YmxvY2tpbmdfcmVhZF93aW4zMihzZWxmLCBoYW5kbGUpOgotICAgICAgICB0cnk6Ci0gICAgICAg
ICAgICBfLCBhdmFpbCwgXyA9IHdpbjMycGlwZS5QZWVrTmFtZWRQaXBlKGhhbmRsZSwgMCkKLSAg
ICAgICAgICAgIGlmIGF2YWlsID4gMDoKLSAgICAgICAgICAgICAgICBfLCBidWYgPSB3aW4zMmZp
bGUuUmVhZEZpbGUoaGFuZGxlLCBhdmFpbCwgTm9uZSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
YnVmCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6Ci0gICAgICAgICAgICBpZiBlWzBdIG5v
dCBpbiAoMTA5LCBlcnJuby5FU0hVVERPV04pOiAgIyAxMDkgPT0gd2luMzIgRVJST1JfQlJPS0VO
X1BJUEUKLSAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICByZXR1cm4gTm9uZQotCiAgICAg
ZGVmIGhhc19jcmFzaGVkKHNlbGYpOgogICAgICAgICBpZiBub3Qgc2VsZi5fY3Jhc2hlZCBhbmQg
c2VsZi5wb2xsKCk6CiAgICAgICAgICAgICBfbG9nLmRlYnVnKCdUaGlzIHRlc3QgbWFya2VkIGFz
IGEgY3Jhc2ggYmVjYXVzZSBvZiBmYWlsdXJlIHRvIHBvbGwgdGhlIHNlcnZlciBwcm9jZXNzLicp
CiAgICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQotICAgICAgICAgICAgc2VsZi5faGFu
ZGxlX3Bvc3NpYmxlX2ludGVycnVwdCgpCisgICAgICAgICAgICBpZiBzZWxmLl9waXBlOgorICAg
ICAgICAgICAgICAgIHNlbGYuX3BpcGUuaGFuZGxlX2ludGVycnVwdCgpCiAgICAgICAgIHJldHVy
biBzZWxmLl9jcmFzaGVkCiAKLSAgICAjIFRoaXMgcmVhZCBmdW5jdGlvbiBpcyBhIGJpdCBvZGRs
eS1kZXNpZ25lZCwgYXMgaXQgcG9sbHMgYm90aCBzdGRvdXQgYW5kIHN0ZGVyciwgeWV0Ci0gICAg
IyBvbmx5IHJlYWRzL3JldHVybnMgZnJvbSBvbmUgb2YgdGhlbSAoYnVmZmVyaW5nIGJvdGggaW4g
bG9jYWwgc2VsZi5fb3V0cHV0L3NlbGYuX2Vycm9yKS4KLSAgICAjIEl0IG1pZ2h0IGJlIGNsZWFu
ZXIgdG8gcGFzcyBpbiB0aGUgZmlsZSBkZXNjcmlwdG9yIHRvIHBvbGwgaW5zdGVhZC4KICAgICBk
ZWYgX3JlYWQoc2VsZiwgZGVhZGxpbmUsIGZldGNoX2J5dGVzX2Zyb21fYnVmZmVyc19jYWxsYmFj
ayk6CiAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICBpZiBzZWxmLmhhc19jcmFzaGVk
KCk6CkBAIC0zMjUsNjMgKzIzOSwzNiBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6CiAg
ICAgICAgICAgICBpZiBieXRlcyBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICByZXR1cm4g
Ynl0ZXMKIAotICAgICAgICAgICAgaWYgc2VsZi5fdXNlX3dpbjMyX2FwaXM6Ci0gICAgICAgICAg
ICAgICAgc2VsZi5fd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnNfdXNpbmdfd2luMzJf
YXBpcyhkZWFkbGluZSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5f
d2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnNfdXNpbmdfc2VsZWN0KGRlYWRsaW5lKQot
CiAgICAgZGVmIHN0YXJ0KHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5fcHJvYzoKKyAgICAg
ICAgaWYgbm90IHNlbGYuX3BpcGU6CiAgICAgICAgICAgICBzZWxmLl9zdGFydCgpCiAKICAgICBk
ZWYgc3RvcChzZWxmLCB0aW1lb3V0X3NlY3M9My4wKToKLSAgICAgICAgaWYgbm90IHNlbGYuX3By
b2M6Ci0gICAgICAgICAgICByZXR1cm4gKE5vbmUsIE5vbmUpCisgICAgICAgIGRlYWRsaW5lID0g
dGltZS50aW1lKCkgKyB0aW1lb3V0X3NlY3MKIAotICAgICAgICAjIE9ubHkgYm90aGVyIHRvIGNo
ZWNrIGZvciBsZWFrcyBvciBzdGRlcnIgaWYgdGhlIHByb2Nlc3MgaXMgc3RpbGwgcnVubmluZy4K
LSAgICAgICAgaWYgc2VsZi5wb2xsKCkgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX3BvcnQu
Y2hlY2tfZm9yX2xlYWtzKHNlbGYubmFtZSgpLCBzZWxmLnBpZCgpKQotCi0gICAgICAgIG5vdyA9
IHRpbWUudGltZSgpCi0gICAgICAgIGlmIHNlbGYuX3Byb2Muc3RkaW46Ci0gICAgICAgICAgICBz
ZWxmLl9wcm9jLnN0ZGluLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4gPSBO
b25lCi0gICAgICAgIGtpbGxlZCA9IEZhbHNlCi0gICAgICAgIGlmIHRpbWVvdXRfc2VjczoKLSAg
ICAgICAgICAgIGRlYWRsaW5lID0gbm93ICsgdGltZW91dF9zZWNzCi0gICAgICAgICAgICB3aGls
ZSBzZWxmLl9wcm9jLnBvbGwoKSBpcyBOb25lIGFuZCB0aW1lLnRpbWUoKSA8IGRlYWRsaW5lOgot
ICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKLSAgICAgICAgICAgIGlmIHNlbGYuX3By
b2MucG9sbCgpIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgX2xvZy53YXJuaW5nKCdzdG9wcGlu
ZyAlcyhwaWQgJWQpIHRpbWVkIG91dCwga2lsbGluZyBpdCcgJSAoc2VsZi5fbmFtZSwgc2VsZi5f
cHJvYy5waWQpKQotCi0gICAgICAgIGlmIHNlbGYuX3Byb2MucG9sbCgpIGlzIE5vbmU6Ci0gICAg
ICAgICAgICBzZWxmLl9raWxsKCkKLSAgICAgICAgICAgIGtpbGxlZCA9IFRydWUKLSAgICAgICAg
ICAgIF9sb2cuZGVidWcoJ2tpbGxlZCBwaWQgJWQnICUgc2VsZi5fcHJvYy5waWQpCi0KLSAgICAg
ICAgIyByZWFkIGFueSByZW1haW5pbmcgZGF0YSBvbiB0aGUgcGlwZXMgYW5kIHJldHVybiBpdC4K
LSAgICAgICAgaWYgbm90IGtpbGxlZDoKLSAgICAgICAgICAgIGlmIHNlbGYuX3VzZV93aW4zMl9h
cGlzOgotICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRfZm9yX2RhdGFfYW5kX3VwZGF0ZV9idWZm
ZXJzX3VzaW5nX3dpbjMyX2FwaXMobm93KQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAg
ICAgICBzZWxmLl93YWl0X2Zvcl9kYXRhX2FuZF91cGRhdGVfYnVmZmVyc191c2luZ19zZWxlY3Qo
bm93LCBzdG9wcGluZz1UcnVlKQotICAgICAgICBvdXQsIGVyciA9IHNlbGYuX291dHB1dCwgc2Vs
Zi5fZXJyb3IKKyAgICAgICAgb3V0ID0gW10KKyAgICAgICAgZXJyID0gW10KKworICAgICAgICBp
ZiBzZWxmLl9waXBlID09IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gKG91dCwgZXJyKQorICAg
ICAgICBpZiBub3Qgc2VsZi5fcGlwZS5pc0Nvbm5lY3RlZCgpOgorICAgICAgICAgICAgc2VsZi5f
cGlwZS5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9yZXNldCgpCisgICAgICAgICAgICByZXR1
cm4gKG91dCwgZXJyKQorCisgICAgICAgIG91dCA9IHNlbGYuX3BpcGUucmVhZEJ1ZmZlclN0ZG91
dCgpCisgICAgICAgIGVyciA9IHNlbGYuX3BpcGUucmVhZEJ1ZmZlclN0ZGVycigpCisKKyAgICAg
ICAgd2hpbGUgc2VsZi5fcGlwZS5pc0Nvbm5lY3RlZCgpIGFuZCBkZWFkbGluZSA+IHRpbWUudGlt
ZSgpOgorICAgICAgICAgICAgb3V0ID0gb3V0ICsgc2VsZi5fcGlwZS5yZWFkQnVmZmVyU3Rkb3V0
KCkKKyAgICAgICAgICAgIGVyciA9IGVyciArIHNlbGYuX3BpcGUucmVhZEJ1ZmZlclN0ZGVycigp
CisKKyAgICAgICAgaWYgInJ1bi1vbi1kZXZpY2UiID09IHNlbGYuX2NtZFswXToKKyAgICAgICAg
ICAgIHNlbGYuX3BvcnQucnVuT25EZXZpY2UoWydraWxsJywgc2VsZi5fY21kWzFdLCBzZWxmLl9j
bWRbMl1dKQorICAgICAgICBzZWxmLl9waXBlLmNsb3NlKCkKICAgICAgICAgc2VsZi5fcmVzZXQo
KQogICAgICAgICByZXR1cm4gKG91dCwgZXJyKQogCiAgICAgZGVmIGtpbGwoc2VsZik6CiAgICAg
ICAgIHNlbGYuc3RvcCgwLjApCiAKLSAgICBkZWYgX2tpbGwoc2VsZik6Ci0gICAgICAgIHNlbGYu
X2hvc3QuZXhlY3V0aXZlLmtpbGxfcHJvY2VzcyhzZWxmLl9wcm9jLnBpZCkKLSAgICAgICAgaWYg
c2VsZi5fcHJvYy5wb2xsKCkgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl9wcm9jLndh
aXQoKQotCi0gICAgZGVmIHJlcGxhY2Vfb3V0cHV0cyhzZWxmLCBzdGRvdXQsIHN0ZGVycik6Ci0g
ICAgICAgIGFzc2VydCBzZWxmLl9wcm9jCi0gICAgICAgIGlmIHN0ZG91dDoKLSAgICAgICAgICAg
IHNlbGYuX3Byb2Muc3Rkb3V0LmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuX3Byb2Muc3Rkb3V0
ID0gc3Rkb3V0Ci0gICAgICAgIGlmIHN0ZGVycjoKLSAgICAgICAgICAgIHNlbGYuX3Byb2Muc3Rk
ZXJyLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkZXJyID0gc3RkZXJyCkluZGV4
OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3NfdW5pdHRlc3QucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNz
X3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyMDk3ODQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvc2VydmVyX3Byb2Nlc3NfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSw0IEBACisjIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAjIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMyLDYgKzMzLDcgQEAgaW1wb3J0IHVuaXR0ZXN0CiAKIGZy
b20gd2Via2l0cHkucG9ydC5mYWN0b3J5IGltcG9ydCBQb3J0RmFjdG9yeQogZnJvbSB3ZWJraXRw
eS5wb3J0IGltcG9ydCBzZXJ2ZXJfcHJvY2VzcworZnJvbSB3ZWJraXRweS5jb21tb24uaXBjX3Bp
cGVfdGVzdGNhc2UgaW1wb3J0IER1bW15UHJvY2Vzc1BpcGUKIGZyb20gd2Via2l0cHkuY29tbW9u
LnN5c3RlbS5zeXN0ZW1ob3N0IGltcG9ydCBTeXN0ZW1Ib3N0CiBmcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0uc3lzdGVtaG9zdF9tb2NrIGltcG9ydCBNb2NrU3lzdGVtSG9zdAogZnJvbSB3ZWJr
aXRweS5jb21tb24uc3lzdGVtLm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKQEAg
LTUzLDQ4ICs1NSwxMSBAQCBjbGFzcyBUcml2aWFsTW9ja1BvcnQob2JqZWN0KToKICAgICAgICAg
cmV0dXJuIDEKIAogCi1jbGFzcyBNb2NrRmlsZShvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBzZXJ2ZXJfcHJvY2Vzcyk6Ci0gICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzID0gc2Vy
dmVyX3Byb2Nlc3MKLSAgICAgICAgc2VsZi5jbG9zZWQgPSBGYWxzZQotCi0gICAgZGVmIGZpbGVu
byhzZWxmKToKLSAgICAgICAgcmV0dXJuIDEKLQotICAgIGRlZiB3cml0ZShzZWxmLCBsaW5lKToK
LSAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3MuYnJva2VuX3BpcGVzLmFwcGVuZChzZWxmKQot
ICAgICAgICByYWlzZSBJT0Vycm9yCi0KLSAgICBkZWYgcmVhZChzZWxmLCBzaXplPTApOgotICAg
ICAgICAjIFRoaXMgbWVhbnMgZW5kIG9mIGZpbGUKLSAgICAgICAgcmV0dXJuICcnCi0KLSAgICBk
ZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuY2xvc2VkID0gVHJ1ZQotCi0KLWNsYXNzIE1v
Y2tQcm9jKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcnZlcl9wcm9jZXNzKToK
LSAgICAgICAgc2VsZi5zdGRpbiA9IE1vY2tGaWxlKHNlcnZlcl9wcm9jZXNzKQotICAgICAgICBz
ZWxmLnN0ZG91dCA9IE1vY2tGaWxlKHNlcnZlcl9wcm9jZXNzKQotICAgICAgICBzZWxmLnN0ZGVy
ciA9IE1vY2tGaWxlKHNlcnZlcl9wcm9jZXNzKQotICAgICAgICBzZWxmLnBpZCA9IDEKLQotICAg
IGRlZiBwb2xsKHNlbGYpOgotICAgICAgICByZXR1cm4gMQotCi0gICAgZGVmIHdhaXQoc2VsZik6
Ci0gICAgICAgIHJldHVybiAwCi0KLQogY2xhc3MgRmFrZVNlcnZlclByb2Nlc3Moc2VydmVyX3By
b2Nlc3MuU2VydmVyUHJvY2Vzcyk6CiAgICAgZGVmIF9zdGFydChzZWxmKToKLSAgICAgICAgc2Vs
Zi5fcHJvYyA9IE1vY2tQcm9jKHNlbGYpCi0gICAgICAgIHNlbGYuc3RkaW4gPSBzZWxmLl9wcm9j
LnN0ZGluCi0gICAgICAgIHNlbGYuc3Rkb3V0ID0gc2VsZi5fcHJvYy5zdGRvdXQKLSAgICAgICAg
c2VsZi5zdGRlcnIgPSBzZWxmLl9wcm9jLnN0ZGVycgotICAgICAgICBzZWxmLl9waWQgPSBzZWxm
Ll9wcm9jLnBpZAotICAgICAgICBzZWxmLmJyb2tlbl9waXBlcyA9IFtdCisgICAgICAgIHNlbGYu
X3BpcGUgPSBEdW1teVByb2Nlc3NQaXBlKHNlbGYuX3BvcnQsIHNlbGYuX2NtZCwgc2VsZi5fZW52
LCBzZWxmLl91bml2ZXJzYWxfbmV3bGluZXMpCisgICAgICAgIHNlbGYuX3BpZCA9IHNlbGYuX3Bp
cGUucGlkKCkKKyAgICAgICAgc2VsZi5fcGlwZS5jb25uZWN0ZWRGb3JUZXN0aW5nID0gRmFsc2UK
IAogCiBjbGFzcyBUZXN0U2VydmVyUHJvY2Vzcyh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xMzUs
OSArMTAwLDcgQEAgY2xhc3MgVGVzdFNlcnZlclByb2Nlc3ModW5pdHRlc3QuVGVzdENhcwogICAg
ICAgICBzZXJ2ZXJfcHJvY2VzcyA9IEZha2VTZXJ2ZXJQcm9jZXNzKHBvcnRfb2JqPXBvcnRfb2Jq
LCBuYW1lPSJ0ZXN0IiwgY21kPVsidGVzdCJdKQogICAgICAgICBzZXJ2ZXJfcHJvY2Vzcy5fc3Rh
cnQoKQogICAgICAgICBzZXJ2ZXJfcHJvY2Vzcy5zdG9wKCkKLSAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKHNlcnZlcl9wcm9jZXNzLnN0ZGluLmNsb3NlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KHNlcnZlcl9wcm9jZXNzLnN0ZG91dC5jbG9zZWQpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShz
ZXJ2ZXJfcHJvY2Vzcy5zdGRlcnIuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShz
ZXJ2ZXJfcHJvY2Vzcy5fcGlwZSkKIAogICAgIGRlZiB0ZXN0X2Jyb2tlbl9waXBlKHNlbGYpOgog
ICAgICAgICBwb3J0X29iaiA9IFRyaXZpYWxNb2NrUG9ydCgpCkBAIC0xNDYsMTMgKzEwOSwxMiBA
QCBjbGFzcyBUZXN0U2VydmVyUHJvY2Vzcyh1bml0dGVzdC5UZXN0Q2FzCiAgICAgICAgIHNlcnZl
cl9wcm9jZXNzID0gRmFrZVNlcnZlclByb2Nlc3MocG9ydF9vYmo9cG9ydF9vYmosIG5hbWU9InRl
c3QiLCBjbWQ9WyJ0ZXN0Il0pCiAgICAgICAgIHNlcnZlcl9wcm9jZXNzLndyaXRlKCJzaG91bGQg
YnJlYWsiKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VydmVyX3Byb2Nlc3MuaGFzX2NyYXNo
ZWQoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoc2VydmVyX3Byb2Nlc3MucGlkKCkp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlcnZlcl9wcm9jZXNzLl9wcm9jKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHNlcnZlcl9wcm9jZXNzLmJyb2tlbl9waXBlcywgW3NlcnZlcl9w
cm9jZXNzLnN0ZGluXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VydmVyX3Byb2Nlc3Mu
X3BpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlcnZlcl9wcm9jZXNzLnBpZCgpKQog
CiAgICAgICAgIHBvcnRfb2JqLmhvc3QucGxhdGZvcm0ub3NfbmFtZSA9ICdtYWMnCiAgICAgICAg
IHNlcnZlcl9wcm9jZXNzID0gRmFrZVNlcnZlclByb2Nlc3MocG9ydF9vYmo9cG9ydF9vYmosIG5h
bWU9InRlc3QiLCBjbWQ9WyJ0ZXN0Il0pCiAgICAgICAgIHNlcnZlcl9wcm9jZXNzLndyaXRlKCJz
aG91bGQgYnJlYWsiKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VydmVyX3Byb2Nlc3MuaGFz
X2NyYXNoZWQoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VydmVyX3Byb2Nlc3MuX3By
b2MpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VydmVyX3Byb2Nlc3MuYnJva2VuX3BpcGVz
LCBbc2VydmVyX3Byb2Nlc3Muc3RkaW5dKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZXJ2
ZXJfcHJvY2Vzcy5fcGlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VydmVyX3Byb2Nl
c3MucGlkKCkpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL3B5
dGhvbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNr
ZXJzL3B5dGhvbi5weQkocmV2aXNpb24gMjA5Nzg0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9zdHlsZS9jaGVja2Vycy9weXRob24ucHkJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw3ICsxMDMs
NyBAQCBjbGFzcyBQeWxpbnRlcihvYmplY3QpOgogCiAgICAgZGVmIHJ1bihzZWxmLCBhcmd2KToK
ICAgICAgICAgb3V0cHV0ID0gX0ZpbHRlcmVkU3RyaW5nSU8oc2VsZi5GQUxTRV9QT1NJVElWRVMp
Ci0gICAgICAgIGxpbnQuUnVuKFsnLS1yY2ZpbGUnLCBzZWxmLl9weWxpbnRyY10gKyBhcmd2LCBy
ZXBvcnRlcj1QYXJzZWFibGVUZXh0UmVwb3J0ZXIob3V0cHV0PW91dHB1dCksIGV4aXQ9RmFsc2Up
CisgICAgICAgIGxpbnQuUnVuKFsnLS1pZ25vcmVkLWNsYXNzZXM9X3NvY2tldG9iamVjdCcsICct
LXJjZmlsZScsIHNlbGYuX3B5bGludHJjXSArIGFyZ3YsIHJlcG9ydGVyPVBhcnNlYWJsZVRleHRS
ZXBvcnRlcihvdXRwdXQ9b3V0cHV0KSwgZXhpdD1GYWxzZSkKICAgICAgICAgcmV0dXJuIG91dHB1
dAogCiAKSW5kZXg6IFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvdW5peExvZ2dpbmdQaXBlcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvdW5peExvZ2dpbmdQaXBlcy5oCShu
b25leGlzdGVudCkKKysrIFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvdW5peExvZ2dpbmdQaXBlcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisg
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
ICAgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBX
VFIgeworCit2b2lkIHNldHVwVW5peExvZ2dpbmdQaXBlcygpOwordm9pZCB0ZWFyZG93blVuaXhM
b2dnaW5nUGlwZXMoKTsKKworfQpJbmRleDogVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC91bml4TG9n
Z2luZ1BpcGVzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvdW5peExv
Z2dpbmdQaXBlcy5tbQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9UZXN0UnVubmVyU2hhcmVkL3Vu
aXhMb2dnaW5nUGlwZXMubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAK
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25m
aWcuaCIKKyNpbXBvcnQgInVuaXhMb2dnaW5nUGlwZXMuaCIKKworI2ltcG9ydCA8bmV0ZGIuaD4K
KyNpbXBvcnQgPHN5cy91bi5oPgorCituYW1lc3BhY2UgV1RSIHsKKworc3RhdGljIGNvbnN0IGlu
dCBTVERJTl9JTkRFWCA9IDA7CitzdGF0aWMgY29uc3QgaW50IFNURE9VVF9JTkRFWCA9IDE7Citz
dGF0aWMgY29uc3QgaW50IFNUREVSUl9JTkRFWCA9IDI7CitzdGF0aWMgY29uc3QgaW50IE5VTV9T
T0NLRVRTID0gMzsKKyAgICAKK3N0YXRpYyBpbnQgc29ja2V0c1tOVU1fU09DS0VUU107CitzdGF0
aWMgc3RydWN0IHNvY2thZGRyX3VuIGFkZHJlc3NbTlVNX1NPQ0tFVFNdOworc3RhdGljIEZJTEUq
IG9sZEZpbGVzW05VTV9TT0NLRVRTXTsKK3N0YXRpYyBGSUxFKiogZmlsZXNbTlVNX1NPQ0tFVFNd
OworCit2b2lkIHNldHVwVW5peExvZ2dpbmdQaXBlcygpCit7CisgICAgY29uc3QgY2hhciogaWRl
bnRpZmllciA9IGdldGVudigiSVBDX0lERU5USUZJRVIiKTsKKyAgICBjb25zdCBjaGFyICpzb2Nr
ZXRQYXRoc1szXTsKKyAgICBzb2NrZXRQYXRoc1tTVERJTl9JTkRFWF0gPSBbW05TU3RyaW5nIHN0
cmluZ1dpdGhGb3JtYXQ6QCIvdG1wLyVzX0lOIiwgaWRlbnRpZmllcl0gVVRGOFN0cmluZ107Cisg
ICAgc29ja2V0UGF0aHNbU1RET1VUX0lOREVYXSA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAIi90bXAvJXNfT1VUIiwgaWRlbnRpZmllcl0gVVRGOFN0cmluZ107CisgICAgc29ja2V0UGF0
aHNbU1RERVJSX0lOREVYXSA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIi90bXAvJXNf
RVJST1IiLCBpZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsKKworICAgIGZpbGVzW1NURElOX0lOREVY
XSA9ICZzdGRpbjsKKyAgICBmaWxlc1tTVERPVVRfSU5ERVhdID0gJnN0ZG91dDsKKyAgICBmaWxl
c1tTVERFUlJfSU5ERVhdID0gJnN0ZGVycjsKKyAgICAKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IE5VTV9TT0NLRVRTOyArK2kpIHsKKyAgICAgICAgc29ja2V0c1tpXSA9IHNvY2tldChBRl9VTklY
LCBTT0NLX1NUUkVBTSwgMCk7CisgICAgICAgIG1lbXNldCgoY2hhciopICZhZGRyZXNzW2ldLCAw
LCBzaXplb2YoYWRkcmVzc1tpXSkpOworICAgICAgICBhZGRyZXNzW2ldLnN1bl9mYW1pbHkgPSBB
Rl9VTklYOworICAgICAgICBzdHJuY3B5KGFkZHJlc3NbaV0uc3VuX3BhdGgsIHNvY2tldFBhdGhz
W2ldLCBzaXplb2YoYWRkcmVzc1tpXS5zdW5fcGF0aCkpOworICAgICAgICAKKyAgICAgICAgaWYg
KDo6Y29ubmVjdChzb2NrZXRzW2ldLCAoc3RydWN0IHNvY2thZGRyKikgJmFkZHJlc3NbaV0sIHNp
emVvZihhZGRyZXNzW2ldKSkgPCAwKQorICAgICAgICAgICAgYWJvcnQoKTsKKyAgICAgICAgb2xk
RmlsZXNbaV0gPSAqZmlsZXNbaV07CisgICAgICAgIGZmbHVzaChvbGRGaWxlc1tpXSk7CisgICAg
ICAgIGlmIChpID09IFNURElOX0lOREVYKQorICAgICAgICAgICAgKmZpbGVzW2ldID0gZmRvcGVu
KHNvY2tldHNbaV0sICJyYiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqZmlsZXNbaV0g
PSBmZG9wZW4oc29ja2V0c1tpXSwgIndiIik7CisgICAgICAgIHNldGxpbmVidWYoKmZpbGVzW2ld
KTsKKyAgICB9CisgICAgZnByaW50ZihzdGRlcnIsICIjUElEOiAlZFxuIiwgZ2V0cGlkKCkpOwor
fQorCit2b2lkIHRlYXJkb3duVW5peExvZ2dpbmdQaXBlcygpCit7CisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBOVU1fU09DS0VUUzsgKytpKSB7CisgICAgICAgIGZmbHVzaCgqZmlsZXNbaV0pOwor
ICAgICAgICBmY2xvc2UoKmZpbGVzW2ldKTsKKyAgICAgICAgCisgICAgICAgIHNodXRkb3duKHNv
Y2tldHNbaV0sIFNIVVRfUkRXUik7CisgICAgICAgIDo6Y2xvc2Uoc29ja2V0c1tpXSk7CisgICAg
ICAgICpmaWxlc1tpXSA9IG9sZEZpbGVzW2ldOworICAgIH0KK30KKworfQpJbmRleDogVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwOTc4NCkKKysrIFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw3IEBACiAJCTJFNjNFREExMTg5MUIyOTEwMDJB
N0FGQyAvKiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU2M0VENzgxODkxQUNFOTAwMkE3QUZDIC8qIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0gKi87IH07CiAJCTJFNjNFREE2MTg5MUJEQzAwMDJB
N0FGQyAvKiBUZXN0UnVubmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDQzk5ODE3MTFEM0Y1MUUwMDE3QkNBMiAvKiBUZXN0UnVubmVyLmNwcCAq
LzsgfTsKIAkJMkU3NDlCRjIxODkxRUJGQTAwN0ZDMTc1IC8qIEV2ZW50U2VuZGVyUHJveHlJT1Mu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTYzRUQ3
QTE4OTFBQ0U5MDAyQTdBRkMgLyogRXZlbnRTZW5kZXJQcm94eUlPUy5tbSAqLzsgfTsKKwkJMzFC
MDlDQzQxRTAzMzUzMDAwNkY0RTREIC8qIHVuaXhMb2dnaW5nUGlwZXMubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUIwOUNDMzFFMDMzNDQwMDA2RjRF
NEQgLyogdW5peExvZ2dpbmdQaXBlcy5tbSAqLzsgfTsKIAkJNTEwNThBRDUxRDY3ODgyMDAwOUE1
MzhDIC8qIGxpYldlYkNvcmVUZXN0U3VwcG9ydC5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMjMwRTE2MTM4Qzc4QkYwMEJDQ0ZDQSAvKiBs
aWJXZWJDb3JlVGVzdFN1cHBvcnQuZHlsaWIgKi87IH07CiAJCTUxMDU4QUQ2MUQ2Nzg4MjUwMDlB
NTM4QyAvKiBXZWJLaXQuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY1MTY5Q0ExNDQ1MjIyRDAwRTBBOUQ3IC8qIFdlYktpdC5mcmFt
ZXdvcmsgKi87IH07CiAJCTU2NDFFMkQwMTQzMzVFOTUwMDgzMDdFNSAvKiBKU1RleHRJbnB1dENv
bnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTY0MUUyQ0UxNDMzNUU5NTAwODMwN0U1IC8qIEpTVGV4dElucHV0Q29udHJvbGxlci5jcHAg
Ki87IH07CkBAIC0yNTYsNiArMjU3LDggQEAKIAkJMkVFNTJEMTYxODkwQTlGQjAwMTBFRDIxIC8q
IG1haW5JT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBtYWlu
SU9TLm1tOyBwYXRoID0gLi4vaW9zL21haW5JT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTMxMTBCRTBGMTVCQTAxMTQwMEQyMTZBQyAvKiBXZWJOb3RpZmljYXRpb25Qcm92aWRl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJOb3RpZmljYXRpb25Qcm92aWRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzMTY0QzhFRjE1RDFBREExMDBFRjFGRTAgLyogV2ViTm90aWZp
Y2F0aW9uUHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkzMUIwOUNDMjFFMDMzNDQwMDA2RjRFNEQgLyogdW5peExvZ2dpbmdQaXBlcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSB1bml4TG9nZ2luZ1BpcGVzLmg7IHBhdGggPSAuLi9U
ZXN0UnVubmVyU2hhcmVkL3VuaXhMb2dnaW5nUGlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMzFCMDlDQzMxRTAzMzQ0MDAwNkY0RTREIC8qIHVuaXhMb2dnaW5nUGlwZXMubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSB1bml4TG9nZ2luZ1BpcGVz
Lm1tOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJlZC91bml4TG9nZ2luZ1BpcGVzLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzhENDQyMjEzMzQ2RDAwMDA2QTc3N0IgLyogY29u
ZmlnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNvbmZpZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0MTIzMEUxNjEzOEM3OEJGMDBCQ0NGQ0EgLyogbGliV2ViQ29yZVRlc3RTdXBwb3J0LmR5
bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gImNv
bXBpbGVkLm1hY2gtby5keWxpYiI7IHBhdGggPSBsaWJXZWJDb3JlVGVzdFN1cHBvcnQuZHlsaWI7
IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTQxODE3MzFCMTM4QUQzOUQw
MDU3QUFBNCAvKiBXZWJDb3JlVGVzdFN1cHBvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gV2ViQ29yZVRlc3RTdXBwb3J0Lmg7IHBhdGggPSBXZWJDb3JlVGVzdFN1cHBvcnQv
V2ViQ29yZVRlc3RTdXBwb3J0Lmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07
CkBAIC00NTYsNiArNDU5LDggQEAKIAkJMEYxOEU3MUExRDZCQzRCQzAwMjdFNTQ3IC8qIFRlc3RS
dW5uZXJTaGFyZWQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAor
CQkJCTMxQjA5Q0MyMUUwMzM0NDAwMDZGNEU0RCAvKiB1bml4TG9nZ2luZ1BpcGVzLmggKi8sCisJ
CQkJMzFCMDlDQzMxRTAzMzQ0MDAwNkY0RTREIC8qIHVuaXhMb2dnaW5nUGlwZXMubW0gKi8sCiAJ
CQkJMEYxOEU3MUIxRDZCQzRFNjAwMjdFNTQ3IC8qIEJpbmRpbmdzICovLAogCQkJCTBGNzNCNTQ3
MUJBNzgyRkUwMDRCM0VGNCAvKiBVSVNjcmlwdENvbnRleHQgKi8sCiAJCQkpOwpAQCAtOTUzLDYg
Kzk1OCw3IEBACiAJCQkJMkU3NDlCRjIxODkxRUJGQTAwN0ZDMTc1IC8qIEV2ZW50U2VuZGVyUHJv
eHlJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQkwRkVCRjg1QTFCQjYxREYyMDAyODcyMkQgLyog
SElERXZlbnRHZW5lcmF0b3IubW0gaW4gU291cmNlcyAqLywKIAkJCQkyRTYzRUQ5NDE4OTFBREFE
MDAyQTdBRkMgLyogbWFpbklPUy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTMxQjA5Q0M0MUUwMzM1
MzAwMDZGNEU0RCAvKiB1bml4TG9nZ2luZ1BpcGVzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkU2
M0VEOTExODkxQURBRDAwMkE3QUZDIC8qIFBsYXRmb3JtV2ViVmlld0lPUy5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTJFNjNFRDkyMTg5MUFEQUQwMDJBN0FGQyAvKiBUZXN0Q29udHJvbGxlcklPUy5t
bSBpbiBTb3VyY2VzICovLAogCQkJKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9z
L1Rlc3RDb250cm9sbGVySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tCShyZXZpc2lvbiAyMDk3ODQpCisrKyBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMjYsMTEgKzI2LDEzIEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIlRlc3RDb250
cm9sbGVyLmgiCiAKKwogI2ltcG9ydCAiUGxhdGZvcm1XZWJWaWV3LmgiCiAjaW1wb3J0ICJUZXN0
SW52b2NhdGlvbi5oIgogI2ltcG9ydCAiVGVzdFJ1bm5lcldLV2ViVmlldy5oIgogI2ltcG9ydCA8
Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxVSUtpdC9VSUtpdC5oPgorI2ltcG9y
dCAidW5peExvZ2dpbmdQaXBlcy5oIgogI2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5jZXNSZWZQ
cml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBv
cnQgPFdlYktpdC9XS1N0cmluZ0NGLmg+CkBAIC00NywyMSArNDksMTIgQEAgdm9pZCBUZXN0Q29u
dHJvbGxlcjo6bm90aWZ5RG9uZSgpCiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtSW5p
dGlhbGl6ZSgpCiB7Ci0gICAgY29uc3QgY2hhciogaWRlbnRpZmllciA9IGdldGVudigiSVBDX0lE
RU5USUZJRVIiKTsKLSAgICBjb25zdCBjaGFyICpzdGRpblBhdGggPSBbW05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6QCIvdG1wLyVzX0lOIiwgaWRlbnRpZmllcl0gVVRGOFN0cmluZ107Ci0gICAg
Y29uc3QgY2hhciAqc3Rkb3V0UGF0aCA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIi90
bXAvJXNfT1VUIiwgaWRlbnRpZmllcl0gVVRGOFN0cmluZ107Ci0gICAgY29uc3QgY2hhciAqc3Rk
ZXJyUGF0aCA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIi90bXAvJXNfRVJST1IiLCBp
ZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsKLQotICAgIGludCBpbmZkID0gb3BlbihzdGRpblBhdGgs
IE9fUkRXUik7Ci0gICAgZHVwMihpbmZkLCBTVERJTl9GSUxFTk8pOwotICAgIGludCBvdXRmZCA9
IG9wZW4oc3Rkb3V0UGF0aCwgT19SRFdSKTsKLSAgICBkdXAyKG91dGZkLCBTVERPVVRfRklMRU5P
KTsKLSAgICBpbnQgZXJyZmQgPSBvcGVuKHN0ZGVyclBhdGgsIE9fUkRXUiB8IE9fTk9OQkxPQ0sp
OwotICAgIGR1cDIoZXJyZmQsIFNUREVSUl9GSUxFTk8pOworICAgIHNldHVwVW5peExvZ2dpbmdQ
aXBlcygpOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybURlc3Ryb3koKQogewor
ICAgIHRlYXJkb3duVW5peExvZ2dpbmdQaXBlcygpOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVy
Ojppbml0aWFsaXplSW5qZWN0ZWRCdW5kbGVQYXRoKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297244</attachid>
            <date>2016-12-15 16:15:35 -0800</date>
            <delta_ts>2016-12-15 16:32:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165927-20161215161442.patch</filename>
            <type>text/plain</type>
            <size>235557</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIwOTg4NikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEzMyBAQAorMjAxNi0xMi0xNSAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5j
b20+CisKKyAgICAgICAgUmVtb3ZpbmcgTGF5b3V0VGVzdFJlbGF5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU5MjcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0R1bXBSZW5k
ZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZGVkIHVuaXhMb2dnaW5nUGlwZXMu
aCBhbmQgLm1tIHRvIER1bXBSZW5kZXJUcmVlLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21h
Yy9EdW1wUmVuZGVyVHJlZS5tbTogQWRkZWQgY2FsbCB0byBzZXR1cFVuaXhMb2dnaW5nUGlwZXMo
KSBhbmQgdGVhcmRvd25Vbml4TG9nZ2luZ1BpcGVzKCkgZm9yIGlPUy4KKyAgICAgICAgKGR1bXBS
ZW5kZXJUcmVlKTogCisgICAgICAgICogTGF5b3V0VGVzdFJlbGF5OiBSZW1vdmVkLgorICAgICAg
ICAqIE1ha2VmaWxlOgorICAgICAgICAqIFNjcmlwdHMvYnVpbGQtbGF5b3V0dGVzdHJlbGF5OiBS
ZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvYnVpbGQtd2Via2l0OiBSZW1vdmVkIHJlZmVyZW5j
ZSB0byBMYXlvdXRUZXN0UmVsYXkuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24v
aXBjX3BpcGUucHk6IEFkZGVkLgorICAgICAgICAoVW5peFBpcGVTZXJ2ZXIpOiBBIHNlcnZlci1z
aWRlIFVuaXggcGlwZSBhYnN0cmFjdGlvbiB1c2VkIHRvIHNlbmQgZGF0YSBvdmVyIGEgQUZfVU5J
WCBzdHJlYW1pbmcgc29ja2V0LgorICAgICAgICAoQWJzdHJhY3RQaXBlKTogQWJzdHJhY3Rpb24g
Zm9yIHJlYWRpbmcgZnJvbS93cml0aW5nIHRvIHN0ZGluLCBzdGRvdXQgYW5kIHN0ZGVyci4KKyAg
ICAgICAgKEFic3RyYWN0UGlwZS5jbGVhbik6IENsZWFycyB0aGUgc3Rkb3V0IGFuZCBzdGRlcnIg
c3RyZWFtcyB0byBwcmVzZXJ2ZSBtZW1vcnkuCisgICAgICAgIChBYnN0cmFjdFBpcGUuX3BhcnNl
TWVzc2FnZSk6IEV4cGVjdGVkIHRvIGJlIG92ZXJyaWRkZW4gYnkgY2hpbGQgY2xhc3Nlcy4gIEFk
ZHMgZGF0YSB0byBzdGRvdXQgYW5kIHN0ZGVyciBzdHJlYW1zLgorICAgICAgICAoQWJzdHJhY3RQ
aXBlLnJlYWRMaW5lKTogUmVhZCB0aGUgbmV4dCBsaW5lLCByZWFkIHN0ZGVyciBiZWZvcmUgc3Rk
b3V0LgorICAgICAgICAoQWJzdHJhY3RQaXBlLnN0ZG91dFJlYWQpOiBSZWFkIGEgbGluZSBmcm9t
IHN0ZG91dCwgY2FsbHMgX3BhcnNlTWVzc2FnZS4KKyAgICAgICAgKEFic3RyYWN0UGlwZS5zdGRl
cnJSZWFkKTogUmVhZCBhIGxpbmUgZnJvbSBzdGRlcnIsIGNhbGxzIF9wYXJzZU1lc3NhZ2UuCisg
ICAgICAgIChBYnN0cmFjdFBpcGUucmVhZEJ1ZmZlclN0ZG91dCk6IFJlYWQgZXZlcnl0aGluZyBp
biB0aGUgc3Rkb3V0IGJ1ZmZlci4KKyAgICAgICAgKEFic3RyYWN0UGlwZS5yZWFkQnVmZmVyU3Rk
ZXJyKTogUmVhZCBldmVyeXRoaW5nIGluIHRoZSBzdGRlcnIgYnVmZmVyLgorICAgICAgICAoQWJz
dHJhY3RQaXBlLnJlYWRCbG9ja1N0ZG91dCk6IFJlYWQgYSBibG9jayBvZiBzaXplIGZyb20gc3Rk
b3V0LCBjYWxscyBfcGFyc2VNZXNzYWdlLgorICAgICAgICAoQWJzdHJhY3RQaXBlLnJlYWRCbG9j
a1N0ZGVycik6IFJlYWQgYSBibG9jayBvZiBzaXplIGZyb20gc3RkZXJyLCBjYWxscyBfcGFyc2VN
ZXNzYWdlLgorICAgICAgICAoVW5peFBpcGUpOiBJbmhlcml0cyBmcm9tIEFic3RyYWN0UGlwZSwg
dXNlcyB0aHJlZSBVbml4IHBpcGVzIGFzIHN0ZGluLCBzdGRvdXQgYW5kIHN0ZGVyci4KKyAgICAg
ICAgKFVuaXhQaXBlLl9faW5pdF9fKTogT3BlbnMgYWxsIDMgVW5peCBwaXBlcyBhbmQgYmVnaW5z
IGxpc3RlbmluZyBmb3IgY29ubmVjdGlvbnMuCisgICAgICAgIChVbml4UGlwZS5jb25uZWN0KTog
V2FpdCBmb3IgY29ubmVjdGlvbnMgb24gYWxsIDMgVW5peCBwaXBlcywgcmV0dXJuIGNvbm5lY3Rp
b24gc3RhdHVzLgorICAgICAgICAoVW5peFBpcGUuY2xvc2UpOiBEaXNjb25uZWN0IGFsbCAzIFVu
aXggcGlwZXMuCisgICAgICAgIChVbml4UGlwZS5zZW5kKTogU2VuZCBtZXNzYWdlIHRocm91Z2gg
c3RkaW4gcGlwZS4KKyAgICAgICAgKFVuaXhQaXBlLl9wYXJzZU1lc3NhZ2UpOiBBdHRlbXB0IHRv
IHJlYWQgZnJvbSBib3RoIHN0ZG91dCBhbmQgc3RkZXJyIFVuaXggcGlwZXMuCisgICAgICAgIChV
bml4UGlwZS5oYW5kbGVfaW50ZXJydXB0KTogTmVlZGVkIGR1cmluZyBjcmFzaGVzLgorICAgICAg
ICAoUHJvY2Vzc1BpcGUpOiAKKyAgICAgICAgKFByb2Nlc3NQaXBlLl9faW5pdF9fKToKKyAgICAg
ICAgKFByb2Nlc3NQaXBlLnBpZCk6CisgICAgICAgIChQcm9jZXNzUGlwZS5pc0Nvbm5lY3RlZCk6
CisgICAgICAgIChQcm9jZXNzUGlwZS5oYW5kbGVfaW50ZXJydXB0KToKKyAgICAgICAgKFByb2Nl
c3NQaXBlLmNsb3NlKToKKyAgICAgICAgKFByb2Nlc3NQaXBlLnNlbmQpOgorICAgICAgICAoUHJv
Y2Vzc1BpcGUuX3VuaXhzdGRCbG9jayk6CisgICAgICAgIChQcm9jZXNzUGlwZS5fdW5peGVyckJs
b2NrKToKKyAgICAgICAgKFByb2Nlc3NQaXBlLl93aW4zMk5vbkJsb2NraW5nUmVhZCk6CisgICAg
ICAgIChQcm9jZXNzUGlwZS5fd2luMzJzdGRCbG9jayk6CisgICAgICAgIChQcm9jZXNzUGlwZS5f
d2luMzJlcnJCbG9jayk6CisgICAgICAgIChQcm9jZXNzUGlwZS5fcGFyc2VNZXNzYWdlKToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9pcGNfcGlwZV90ZXN0Y2FzZS5weTogQWRk
ZWQuCisgICAgICAgIChEdW1teVByb2Nlc3NQaXBlKTogUHJvY2VzcyBwaXBlIHVzZWQgZm9yIHRl
c3RpbmcuCisgICAgICAgIChVbml4UGlwZUNsaWVudCk6IFVuaXggcGlwZSBjbGllbnQgdXNlZCB0
byB0ZXN0IFVuaXhQaXBlU2VydmVyIGFuZCBVbml4UGlwZSBjbGFzc2VzLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvY29tbW9uL2lwY19waXBlX3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAg
ICAgKFVuaXhQaXBlQ2xpZW50VGVzdGluZ1RocmVhZCk6IEZ1bmN0aW9uIHVzZWQgZm9yIHRlc3Rp
bmcgY2xpZW50L3NlcnZlciBhcmNoaXRlY3R1cmVzLgorICAgICAgICAoaXBjUGlwZVRlc3QpOiBV
bml0IHRlc3RzIGZvciBjbGFzc2VzIGluIGlwY19waXBlLnB5LgorICAgICAgICAoaXBjUGlwZVRl
c3QudGVzdF9hYnN0cmFjdHBpcGVfc3Rkb3V0KTogVGVzdCBzdGRvdXQgc3RyZWFtIGluIHRoZSBh
YnN0cmFjdCBwaXBlLgorICAgICAgICAoaXBjUGlwZVRlc3QudGVzdF9hYnN0cmFjdHBpcGVfc3Rk
ZXJyKTogVGVzdCBzdGRlcnIgc3RyZWFtIGluIHRoZSBhYnN0cmFjdCBwaXBlLgorICAgICAgICAo
aXBjUGlwZVRlc3QudGVzdF9hYnN0cmFjdHBpcGVfZHVlbF9zdHJlYW1zKTogRW5zdXJlIHN0ZG91
dCBhbmQgc3RkZXJyIGRvIG5vdCBtaW5nbGUuCisgICAgICAgIChpcGNQaXBlVGVzdC50ZXN0X2Fi
c3RyYWN0cGlwZV9zdGRvdXRibG9jayk6IFRlc3QgcmVhZGluZyBhIGRhdGEgYmxvY2sgZnJvbSBz
dGRvdXQuCisgICAgICAgIChpcGNQaXBlVGVzdC50ZXN0X2Fic3RyYWN0cGlwZV9zdGRlcnJibG9j
ayk6IFRlc3QgcmVhZGluZyBhIGRhdGEgYmxvY2sgZnJvbSBzdGRlcnIuCisgICAgICAgIChpcGNQ
aXBlVGVzdC50ZXN0X3VuaXhQaXBlU2VydmVyKTogVGVzdCB0aGUgVW5peFBpcGVTZXJ2ZXIgd2l0
aCBhIFVuaXhQaXBlQ2xpZW50LgorICAgICAgICAoaXBjUGlwZVRlc3QudGVzdF91bml4UGlwZSk6
IFRlc3QgYWxsIHRocmVlIHN0cmVhbXMgb2YgdGhlIFVuaXhQaXBlIGNsYXNzLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5OgorICAgICAgICAoUG9ydC50by5kZXZpY2VE
ZWZpbmVkKTogRnVuY3Rpb24gdG8gYmUgb3ZlcnJpZGRlbiBieSBpT1MgY2xhc3Nlcy4KKyAgICAg
ICAgKFBvcnQudG8ucnVuT25EZXZpY2UpOiBGdW5jdGlvbiB0byBiZSBvdmVycmlkZGVuIGJ5IGlP
UyBjbGFzc2VzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlX3VuaXR0ZXN0
LnB5OgorICAgICAgICAodGVzdF9kZXZpY2UpOiBUZXN0IHRoYXQsIGluIHRoZSBnZW5lcmFsIGNh
c2UsIGRldmljZXMgYXJlIHVuZGVmaW5lZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvZGFyd2luLnB5OgorICAgICAgICAoRGFyd2luUG9ydC5leHRyYWN0QnVuZGxlSUQpOiBTZWFy
Y2ggYW4gYXBwIGJ1bmRsZSBmb3IgYSBwbGlzdCBhbmQgYnVuZGxlIElELgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW5fdGVzdGNhc2UucHk6CisgICAgICAgIChEYXJ3aW5U
ZXN0LnRlc3RfcGxpc3QpOiBUZXN0IHBsaXN0IGFjY2VzcyBieSBjcmVhdGluZyBhIHRlbXBvcmFy
eSBwbGlzdCB0byByZWFkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIu
cHk6CisgICAgICAgIChEcml2ZXIuX19pbml0X18pOgorICAgICAgICAoRHJpdmVyLnJ1bl90ZXN0
KTogQ2xlYXIgc3RyZWFtcyB3aXRoIGNsZWFuIGJlZm9yZSBydW5uaW5nIGEgdGVzdC4KKyAgICAg
ICAgKERldmljZURyaXZlcik6IENoYW5nZWQgZnJvbSBJT1NTaW11bGF0b3JEcml2ZXIuCisgICAg
ICAgIChEZXZpY2VEcml2ZXIuY21kX2xpbmUpOiBQYXNzICdydW4tb24tZGV2aWNl4oCZLCB3aGlj
aCBpcyByZWNvZ25pemVkIGJ5IHRoZSBzZXJ2ZXJfcHJvY2VzcyBjbGFzcy4KKyAgICAgICAgKERl
dmljZURyaXZlci5fc2V0dXBfZW52aXJvbl9mb3JfZHJpdmVyKTogQ2hhbmdlZCBmcm9tIElPU1Np
bXVsYXRvckRyaXZlci4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5Ogor
ICAgICAgICAoSU9TQmFzZSk6IEJhc2UgY2xhc3MgZm9yIElPU1BvcnQgYW5kIElPU1NpbXVsYXRv
ciBwb3J0LgorICAgICAgICAoSU9TQmFzZS5kcml2ZXJfbmFtZSk6IEFjY2VzcyBjdXJyZW50IGFw
cCBuYW1lLgorICAgICAgICAoSU9TQmFzZS5fZ2V0X2NyYXNoX2xvZyk6IE1vdmVkIGZyb20gSU9T
U2ltdWxhdG9yUG9ydC4KKyAgICAgICAgKElPU0Jhc2UuX3Rlc3RpbmdfZGV2aWNlKTogQWNjZXNz
IGRldmljZXMgYnkgaW5kZXguCisgICAgICAgIChJT1NCYXNlLmRldmljZV9pZF9mb3Jfd29ya2Vy
X251bWJlcik6IE1vdmVkIGZyb20gSU9TU2ltdWxhdG9yUG9ydC4KKyAgICAgICAgKElPU0Jhc2Uu
X2RyaXZlcl9jbGFzcyk6IE1vdmVkIGZyb20gSU9TU2ltdWxhdG9yUG9ydC4KKyAgICAgICAgKElP
U0Jhc2UuZGV2aWNlRGVmaW5lZCk6IFRydWUgZm9yIGFsbCBJT1MgY2xhc3Nlcy4KKyAgICAgICAg
KElPU0Jhc2UuX2RldmljZVBpbmcpOiBGdW5jdGlvbiB0byB0ZXN0IGlmIGEgZGV2aWNlIGlzIG9u
LgorICAgICAgICAoSU9TQmFzZS5fZGV2aWNlSW5zdGFsbCk6IEluc3RhbGwgYXBwIHRvIGRldmlj
ZS4KKyAgICAgICAgKElPU0Jhc2UuX2RldmljZVJ1bik6IFJ1biBhcHAgb24gZGV2aWNlLgorICAg
ICAgICAoSU9TQmFzZS5fZGV2aWNlS2lsbCk6IFNodXRkb3duIGFwcCBvbiBkZXZpY2UuCisgICAg
ICAgIChJT1NCYXNlLnJ1bk9uRGV2aWNlKTogUnVuIGNvbW1hbmQgb24gZGV2aWNlLgorICAgICAg
ICAoSU9TUG9ydCk6IENsYXNzIGRlc2lnbmVkIGZvciBydW5uaW5nIG9uIGRldmljZS4KKyAgICAg
ICAgKElPU1NpbXVsYXRvclBvcnQpOgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fZGV2aWNl
UGluZyk6IENoZWNrIGlmIHRoZSB0YXJnZXRlZCBzaW11bGF0b3IgaXMgYm9vdGVkLgorICAgICAg
ICAoSU9TU2ltdWxhdG9yUG9ydC5fZGV2aWNlSW5zdGFsbCk6IEluc3RhbGwgYXBwIHRvIHNpbXVs
YXRvci4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX2RldmljZVJ1bik6IFJ1biBpbnN0YWxs
ZWQgYXBwIG9uIHRhcmdldGVkIHNpbXVsYXRvci4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQu
X2RldmljZUtpbGwpOiBTaHV0ZG93biBhcHAgb24gdGFyZ2V0ZWQgc2ltdWxhdG9yLgorICAgICAg
ICAoSU9TU2ltdWxhdG9yUG9ydC5yZWxheV9wYXRoKTogUmVtb3ZlZCBMYXlvdXRUZXN0UmVsYXku
CisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9jaGVja19yZWxheSk6IFJlbW92ZWQgTGF5b3V0
VGVzdFJlbGF5LgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IE1v
dmVkIHRvIElPU0Jhc2UuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9idWlsZF9yZWxheSk6
IFJlbW92ZWQgTGF5b3V0VGVzdFJlbGF5LgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fZHJp
dmVyX2NsYXNzKTogTW92ZWQgdG8gSU9TQmFzZS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3BvcnQvaW9zX3VuaXR0ZXN0LnB5OgorICAgICAgICAoSU9TVGVzdCk6IFRlc3RzIGZ1bmN0aW9u
YWxpdHkgdW5pcXVlIHRvIHRoZSBJT1NQb3J0IGNsYXNzLgorICAgICAgICAoSU9TU2ltdWxhdG9y
VGVzdCk6IFRlc3RzIGZ1bmN0aW9uYWxpdHkgdW5pcXVlIHRvIHRoZSBJT1NTaW11bGF0b3IgY2xh
c3MuCisgICAgICAgIChpb3NUZXN0KTogTW92ZWQgdG8gZWl0aGVyIElPU1NpbXVsYXRvclRlc3Qg
b3IgSU9TQmFzZVRlc3QuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc2Jhc2Vf
dGVzdGNhc2UucHk6IEFkZGVkLgorICAgICAgICAoSU9TQmFzZVRlc3QpOiBUZXN0cyBmdW5jdGlv
bmFsaXR5IHNoYXJlZCBiZXR3ZWVuIElPU1BvcnQgYW5kIElPU1NpbXVsYXRvci4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3MucHk6IE5vdGUgdGhhdCBzb21l
IHByZXZpb3VzIGZ1bmN0aW9uYWxpdHkgb2Ygc2VydmVyX3Byb2Nlc3MgaGFzIGJlZW4gbW92ZWQg
dG8gUHJvY2Vzc1BpcGUuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLl9faW5pdF9fKTogVXNlIF9w
aXBlIGluc3RlYWQgb2YgcHJvYy4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MuY2xlYW4pOiBDbGVh
biBwaXBlIChyZXNldHMgc3RyZWFtIGJ1ZmZlcnMuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLl9y
ZXNldCk6IERlc3Ryb3kgcGlwZSwgbm8gcGlkLgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5fc3Rh
cnQpOiBVc2UgVW5peFBpcGUgZm9yIHJ1bm5pbmcgb24tZGV2aWNlIGFuZCBQcm9jZXNzUGlwZSBv
dGhlcndpc2UuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLnBvbGwpOiBVc2UgaXNDb25uZWN0ZWQg
ZnVuY3Rpb24gb2YgcGlwZXMuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLndyaXRlKTogV3JpdGUg
ZGF0YSB0byBwaXBlLgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5fcG9wX3N0ZG91dF9saW5lX2lm
X3JlYWR5KTogUmVhZCBzdGRvdXQgbGluZSBmcm9tIHBpcGUuCisgICAgICAgIChTZXJ2ZXJQcm9j
ZXNzLl9wb3Bfc3RkZXJyX2xpbmVfaWZfcmVhZHkpOiBSZWFkIHN0ZGVyciBsaW5lIGZyb20gcGlw
ZS4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MucG9wX2FsbF9idWZmZXJlZF9zdGRlcnIpOiBSZWFk
IGFsbCBzdGRlcnIgbGluZXMgZnJvbSBwaXBlLgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5yZWFk
X2VpdGhlcl9zdGRvdXRfb3Jfc3RkZXJyX2xpbmUpOiBSZWFkIGEgbGluZSBmcm9tIGVpdGhlciBz
dHJlYW0gZnJvbSB0aGUgcGlwZS4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MucmVhZF9zdGRvdXQp
OiBSZWFkIGZyb20gc3Rkb3V0IG9mIHBpcGUuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLnN0b3Ap
OiBDbGVhciBidWZmZXJzIGFuZCBzaHV0ZG93biBwaXBlLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzc191bml0dGVzdC5weTogVXNlIHBpcGVzIGluc3RlYWQg
b2YgTW9ja1Byb2MuCisgICAgICAgIChNb2NrRmlsZSk6IFJlcGxhY2VkIE1vY2tGaWxlIHdpdGgg
RHVtbXlQcm9jZXNzUGlwZS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNr
ZXJzL3B5dGhvbi5weToKKyAgICAgICAgKFB5bGludGVyLnJ1bik6IEZpeCBmb3Iga25vd24gaXNz
dWUgd2l0aCBQeWxpbnRlciBhbmQgc29ja2V0cy4KKyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVk
L3VuaXhMb2dnaW5nUGlwZXMuaDogQWRkZWQuCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC91
bml4TG9nZ2luZ1BpcGVzLm1tOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6c2V0dXBVbml4TG9nZ2lu
Z1BpcGVzKTogU2V0cyB1cCBVbml4UGlwZXMgZm9yIElPU1NpbXVsYXRvci4KKyAgICAgICAgKFdU
Ujo6dGVhcmRvd25Vbml4TG9nZ2luZ1BpcGVzKTogVGVhcnMtZG93biB1cCBVbml4UGlwZXMgZm9y
IElPU1NpbXVsYXRvci4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5u
ZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6
OnBsYXRmb3JtSW5pdGlhbGl6ZSk6IEFkZGVkIGNhbGwgdG8gc2V0dXBVbml4TG9nZ2luZ1BpcGVz
KCkgZm9yIGlPUy4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtRGVzdHJv
eSk6IEFkZGVkIGNhbGwgdG8gdGVhcmRvd25Vbml4TG9nZ2luZ1BpcGVzKCkgZm9yIGlPUy4KKwog
MjAxNi0xMi0xNSAgQ2xhdWRpbyBTYWF2ZWRyYSAgPGNzYWF2ZWRyYUBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFtHVEtdIEVuc3VyZSBnc3QqIGRvY3MgYXJlIG5vdCBidWlsdCB3aXRoIHVwZGF0ZS13
ZWJraXRndGstbGlicwpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25z
L0Jhc2UueGNjb25maWcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZp
Z3VyYXRpb25zL0Jhc2UueGNjb25maWcJKHJldmlzaW9uIDIwOTg4NikKKysrIFRvb2xzL0xheW91
dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCShub25leGlzdGVudCkKQEAg
LTEsNjggKzAsMCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotLy8gYXJlIG1ldDoK
LS8vIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0vLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotLy8gICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLS8vIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0vLyBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LS8vIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0vLyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLS8vIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLS8vIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotLy8gUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotLy8gT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNs
dWRlICIuLi8uLi8uLi8uLi9JbnRlcm5hbC9Db25maWd1cmF0aW9ucy9IYXZlSW50ZXJuYWxTREsu
eGNjb25maWciCi0KLVVTRV9JTlRFUk5BTF9TREsgPSAkKFVTRV9JTlRFUk5BTF9TREtfJChDT05G
SUdVUkFUSU9OKSk7Ci1VU0VfSU5URVJOQUxfU0RLX1Byb2R1Y3Rpb24gPSBZRVM7Ci1VU0VfSU5U
RVJOQUxfU0RLX0RlYnVnID0gJChIQVZFX0lOVEVSTkFMX1NESyk7Ci1VU0VfSU5URVJOQUxfU0RL
X1JlbGVhc2UgPSAkKEhBVkVfSU5URVJOQUxfU0RLKTsKLQotQ0xBTkdfQ1hYX0xBTkdVQUdFX1NU
QU5EQVJEID0gZ251KysweDsKLUNMQU5HX0VOQUJMRV9PQkpDX0FSQyA9IFlFUzsKLUNMQU5HX1dB
Uk5fQ1hYMFhfRVhURU5TSU9OUyA9IE5POwotSEVBREVSX1NFQVJDSF9QQVRIUyA9ICQoQlVJTFRf
UFJPRFVDVFNfRElSKS91c3IvbG9jYWwvaW5jbHVkZSAkKFdFQkNPUkVfUFJJVkFURV9IRUFERVJT
X0RJUikvRm9yd2FyZGluZ0hlYWRlcnMgJChTUkNST09UKS8uLi8uLi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaWN1ICQoTkVYVF9ST09UKS91c3IvbG9jYWwvaW5jbHVkZS9XZWJDb3JlVGVzdFN1cHBv
cnQ7Ci1HQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gJChERUJVR19ERUZJTkVTKSBFTkFC
TEVfREFTSEJPQVJEX1NVUFBPUlQ7Ci1ERUJVR19JTkZPUk1BVElPTl9GT1JNQVQgPSBkd2FyZi13
aXRoLWRzeW07Ci1QUkVCSU5ESU5HID0gTk8KLUdDQ19DX0xBTkdVQUdFX1NUQU5EQVJEID0gZ251
OTkKLUdDQ19FTkFCTEVfQ1BQX0VYQ0VQVElPTlMgPSBOTzsKLUdDQ19FTkFCTEVfQ1BQX1JUVEkg
PSBOTzsKLUdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFERVIgPSBZRVMKLUdDQ19UUkVBVF9XQVJO
SU5HU19BU19FUlJPUlMgPSBZRVMKLUdDQ19WRVJTSU9OID0gY29tLmFwcGxlLmNvbXBpbGVycy5s
bHZtLmNsYW5nLjFfMDsKLUdDQ19XQVJOX0FCT1VUX0RFUFJFQ0FURURfRlVOQ1RJT05TID0gTk8K
LUdDQ19XQVJOX1VOVVNFRF9GVU5DVElPTiA9IFlFUwotR0NDX1dBUk5fVU5VU0VEX1ZBUklBQkxF
ID0gWUVTCi1HQ0NfV0FSTl82NF9UT18zMl9CSVRfQ09OVkVSU0lPTlthcmNoPXg4Nl82NF0gPSBO
TzsKLVdBUk5JTkdfQ0ZMQUdTID0gLVdhbGwgLVcgLVduby11bnVzZWQtcGFyYW1ldGVyIC1XdW5k
ZWYKLQotREVCVUdfREVGSU5FU19kZWJ1ZyA9IDsKLURFQlVHX0RFRklORVNfbm9ybWFsID0gTkRF
QlVHOwotREVCVUdfREVGSU5FUyA9ICQoREVCVUdfREVGSU5FU18kKENVUlJFTlRfVkFSSUFOVCkp
OwotCi1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUiA9ICQoVEFSR0VUX01BQ19PU19YX1ZF
UlNJT05fTUFKT1IkKE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVDpzdWZmaXg6aWRlbnRpZmllcikp
OwotVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1JfMTAgPSAxMDEwMDA7Ci1UQVJHRVRfTUFD
X09TX1hfVkVSU0lPTl9NQUpPUl8xMSA9IDEwMTEwMDsKLVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9O
X01BSk9SXzEyID0gMTAxMjAwOwotVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1JfMTMgPSAx
MDEzMDA7Ci0KLVNES1JPT1QgPSBtYWNvc3guaW50ZXJuYWw7Ci0KLVNVUFBPUlRFRF9QTEFURk9S
TVMgPSBtYWNvc3g7Ci0KLVRPT0xDSEFJTlMgPSBkZWZhdWx0OwotCi1PVEhFUl9DRkxBR1MgPSAk
KEFTQU5fT1RIRVJfQ0ZMQUdTKTsKLU9USEVSX0NQTFVTUExVU0ZMQUdTID0gJChBU0FOX09USEVS
X0NQTFVTUExVU0ZMQUdTKTsKLU9USEVSX0xERkxBR1MgPSAkKEFTQU5fT1RIRVJfTERGTEFHUyk7
CkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMvRGVidWdSZWxlYXNl
LnhjY29uZmlnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0
aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25maWcJKHJldmlzaW9uIDIwOTg4NikKKysrIFRvb2xzL0xh
eW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25maWcJKG5vbmV4
aXN0ZW50KQpAQCAtMSw0MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0v
LyBhcmUgbWV0OgotLy8gMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0vLyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotLy8gRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS8v
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotLy8gUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLS8vIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotLy8gRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotLy8gUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0vLyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0vLyBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotI2luY2x1ZGUgIkJhc2UueGNjb25maWciCi0KLUFSQ0hTID0gJChBUkNIU19TVEFOREFS
RF82NF9CSVQpOwotCi1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUiA9ICQoTUFDX09TX1hf
VkVSU0lPTl9NQUpPUik7Ci0KLU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCA9ICQoTUFDT1NYX0RF
UExPWU1FTlRfVEFSR0VUXyQoVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1IpKQotTUFDT1NY
X0RFUExPWU1FTlRfVEFSR0VUXzEwMTAwMCA9IDEwLjEwOwotTUFDT1NYX0RFUExPWU1FTlRfVEFS
R0VUXzEwMTEwMCA9IDEwLjExOwotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEwMTIwMCA9IDEw
LjEyOwotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEwMTMwMCA9IDEwLjEzOwotCi1GUkFNRVdP
UktfU0VBUkNIX1BBVEhTID0gJChERVZFTE9QRVJfRElSKS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdv
cmtzOwotTERfUlVOUEFUSF9TRUFSQ0hfUEFUSFMgPSAkKERFVkVMT1BFUl9ESVIpL0xpYnJhcnkv
UHJpdmF0ZUZyYW1ld29ya3M7Ci1PVEhFUl9MREZMQUdTID0gLWZyYW1ld29yayBDb3JlU2ltdWxh
dG9yIC1mcmFtZXdvcmsgQXBwS2l0OwotCi1TREtST09UID0gJChTREtST09UX21hY29zeF8kKFVT
RV9JTlRFUk5BTF9TREspKTsKLVNES1JPT1RfbWFjb3N4XyA9IG1hY29zeDsKLVNES1JPT1RfbWFj
b3N4X1lFUyA9IG1hY29zeC5pbnRlcm5hbDsKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9M
YXlvdXRUZXN0UmVsYXkvQ29yZVNpbXVsYXRvclNQSS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xh
eW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvQ29yZVNpbXVsYXRvclNQSS5oCShyZXZpc2lv
biAyMDk4ODYpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0NvcmVT
aW11bGF0b3JTUEkuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWYgX19oYXNfaW5jbHVkZSg8Q29yZVNpbXVsYXRvci9Db3JlU2ltdWxhdG9yLmg+
KQotCi0vKiBGSVhNRTogUmVtb3ZlIHRoZSBiZWxvdyAjZGVmaW5lIG9uY2Ugd2UgcmVxdWlyZSBY
Y29kZSA3LjMgd2l0aCBpT1MgOS4zIFNESyBvciBuZXdlci4gKi8KLSNkZWZpbmUgX19jb3Jlc2lt
X3VuYXZhaWxhYmxlX21zZyhtc2cpCi0jaW1wb3J0IDxDb3JlU2ltdWxhdG9yL0NvcmVTaW11bGF0
b3IuaD4KLQotLyogRklYTUU6IEFsd2F5cyB1c2UgU2ltU2VydmljZUNvbnRleHQgb25jZSB3ZSBy
ZXF1aXJlIFhjb2RlIDcuMyB3aXRoIGlPUyA5LjMgU0RLIG9yIG5ld2VyLiAqLwotI2RlZmluZSBV
U0VfU0lNX1NFUlZJQ0VfQ09OVEVYVCBkZWZpbmVkKENPUkVTSU1fQVBJX01BWF9BTExPV0VEKQot
Ci0jZWxzZQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2RlZmluZSBV
U0VfU0lNX1NFUlZJQ0VfQ09OVEVYVCAxCi0KLSNkZWZpbmUga1NpbURldmljZUxhdW5jaEFwcGxp
Y2F0aW9uQXJndW1lbnRzIEAiYXJndW1lbnRzIgotI2RlZmluZSBrU2ltRGV2aWNlTGF1bmNoQXBw
bGljYXRpb25FbnZpcm9ubWVudCBAImVudmlyb25tZW50IgotCi1AaW50ZXJmYWNlIFNpbURldmlj
ZSA6IE5TT2JqZWN0Ci0tIChCT09MKWluc3RhbGxBcHBsaWNhdGlvbjooTlNVUkwgKilpbnN0YWxs
VVJMIHdpdGhPcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zIGVycm9yOihOU0Vycm9yICog
X19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci0tIChwaWRfdClsYXVuY2hBcHBsaWNhdGlvbldpdGhJ
RDooTlNTdHJpbmcgKilidW5kbGVJRCBvcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zIGVy
cm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci1AZW5kCi0KLUBpbnRlcmZh
Y2UgU2ltRGV2aWNlU2V0IDogTlNPYmplY3QKLUBwcm9wZXJ0eSAocmVhZG9ubHksIGNvcHkpIE5T
RGljdGlvbmFyeSAqZGV2aWNlc0J5VURJRDsKLUBlbmQKLQotQGludGVyZmFjZSBTaW1TZXJ2aWNl
Q29udGV4dCA6IE5TT2JqZWN0Ci0rKFNpbVNlcnZpY2VDb250ZXh0ICopc2hhcmVkU2VydmljZUNv
bnRleHRGb3JEZXZlbG9wZXJEaXI6KE5TU3RyaW5nICopZGV2ZWxvcGVyRGlyIGVycm9yOihOU0Vy
cm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci0tKFNpbURldmljZVNldCAqKWRlZmF1bHRE
ZXZpY2VTZXRXaXRoRXJyb3I6KE5TRXJyb3IgKiBfX2F1dG9yZWxlYXNpbmcgKillcnJvcjsKLUBl
bmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5
L0xUUGlwZVJlbGF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91
dFRlc3RSZWxheS9MVFBpcGVSZWxheS5oCShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29scy9MYXlv
dXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5LmgJKG5vbmV4aXN0ZW50KQpA
QCAtMSwzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBMVFBpcGVSZWxheV9oCi0jZGVm
aW5lIExUUGlwZVJlbGF5X2gKLQotI2ltcG9ydCAiTFRSZWxheS5oIgotCi1AaW50ZXJmYWNlIExU
UGlwZVJlbGF5IDogTlNPYmplY3QgPExUUmVsYXk+Ci1AcHJvcGVydHkgKHdlYWspIGlkPExUUmVs
YXlEZWxlZ2F0ZT4gcmVsYXlEZWxlZ2F0ZTsKLS0gKGlkKWluaXRXaXRoUHJlZml4OihOU1N0cmlu
ZyAqKXByZWZpeDsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkv
TGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0
VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5tCShyZXZpc2lvbiAyMDk4ODYp
CisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0J
KG5vbmV4aXN0ZW50KQpAQCAtMSwxNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgIkxU
UGlwZVJlbGF5LmgiCi0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotI2luY2x1
ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLUBpbnRlcmZhY2UgTFRQ
aXBlUmVsYXkgKCkKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKmZpZm9Q
cmVmaXg7Ci1AcHJvcGVydHkgKHN0cm9uZykgTlNPdXRwdXRTdHJlYW0gKnN0YW5kYXJkSW5wdXRQ
aXBlOwotQHByb3BlcnR5IChzdHJvbmcpIE5TSW5wdXRTdHJlYW0gKnN0YW5kYXJkT3V0cHV0UGlw
ZTsKLUBwcm9wZXJ0eSAoc3Ryb25nKSBOU0lucHV0U3RyZWFtICpzdGFuZGFyZEVycm9yUGlwZTsK
LQotLSAodm9pZCljcmVhdGVGSUZPczsKLS0gKHZvaWQpZGVzdHJveUZJRk9zOwotQGVuZAotCi1A
aW1wbGVtZW50YXRpb24gTFRQaXBlUmVsYXkKLQotLSAoTlNTdHJpbmcgKilpblBpcGVQYXRoCi17
Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9JTiJd
OwotfQotCi0tIChOU1N0cmluZyAqKW91dFBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1By
ZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9PVVQiXTsKLX0KLQotLSAoTlNTdHJpbmcg
KillcnJvclBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVu
ZGluZ1N0cmluZzpAIl9FUlJPUiJdOwotfQotCi0tIChOU091dHB1dFN0cmVhbSAqKSBvdXRwdXRT
dHJlYW0KLXsKLSAgICByZXR1cm4gX3N0YW5kYXJkSW5wdXRQaXBlOwotfQotCi0tIChpZClpbml0
V2l0aFByZWZpeDooTlNTdHJpbmcgKilwcmVmaXgKLXsKLSAgICBpZiAoKHNlbGYgPSBbc3VwZXIg
aW5pdF0pKSB7Ci0gICAgICAgIF9maWZvUHJlZml4ID0gcHJlZml4OwotICAgICAgICBbc2VsZiBk
ZXN0cm95RklGT3NdOwotICAgIH0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXR1
cAotewotICAgIFtzZWxmIGRlc3Ryb3lGSUZPc107Ci0gICAgW3NlbGYgY3JlYXRlRklGT3NdOwot
fQotCi0tICh2b2lkKXRlYXJEb3duCi17Ci0gICAgW3NlbGYgZGVzdHJveUZJRk9zXTsKLX0KLQot
LSh2b2lkKSBjb25uZWN0Ci17Ci0gICAgX3N0YW5kYXJkSW5wdXRQaXBlID0gW05TT3V0cHV0U3Ry
ZWFtIG91dHB1dFN0cmVhbVRvRmlsZUF0UGF0aDpbc2VsZiBpblBpcGVQYXRoXSBhcHBlbmQ6WUVT
XTsKLSAgICBfc3RhbmRhcmRPdXRwdXRQaXBlID0gW05TSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW1X
aXRoRmlsZUF0UGF0aDpbc2VsZiBvdXRQaXBlUGF0aF1dOwotICAgIF9zdGFuZGFyZEVycm9yUGlw
ZSA9IFtOU0lucHV0U3RyZWFtIGlucHV0U3RyZWFtV2l0aEZpbGVBdFBhdGg6W3NlbGYgZXJyb3JQ
aXBlUGF0aF1dOwotCi0gICAgW1tzZWxmIHN0YW5kYXJkSW5wdXRQaXBlXSBzZXREZWxlZ2F0ZTpz
ZWxmXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRQaXBlXSBzZXREZWxlZ2F0ZTpzZWxmXTsK
LSAgICBbW3NlbGYgc3RhbmRhcmRFcnJvclBpcGVdIHNldERlbGVnYXRlOnNlbGZdOwotCi0gICAg
W1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gc2NoZWR1bGVJblJ1bkxvb3A6W05TUnVuTG9vcCBt
YWluUnVuTG9vcF0gZm9yTW9kZTpOU0RlZmF1bHRSdW5Mb29wTW9kZV07Ci0gICAgW1tzZWxmIHN0
YW5kYXJkRXJyb3JQaXBlXSBzY2hlZHVsZUluUnVuTG9vcDpbTlNSdW5Mb29wIG1haW5SdW5Mb29w
XSBmb3JNb2RlOk5TRGVmYXVsdFJ1bkxvb3BNb2RlXTsKLQotICAgIFtbc2VsZiBzdGFuZGFyZElu
cHV0UGlwZV0gb3Blbl07Ci0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gb3Blbl07Ci0g
ICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JQaXBlXSBvcGVuXTsKLQotICAgIFtbc2VsZiByZWxheURl
bGVnYXRlXSBkaWRDb25uZWN0XTsKLX0KLQotLSAodm9pZClkaXNjb25uZWN0Ci17Ci0gICAgW1tz
ZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gY2xvc2VdOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9y
UGlwZV0gY2xvc2VdOwotICAgIFtbc2VsZiBzdGFuZGFyZElucHV0UGlwZV0gY2xvc2VdOwotICAg
IFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWREaXNjb25uZWN0XTsKLX0KLQotLSAodm9pZCljcmVh
dGVGSUZPcwotewotICAgIG1rZmlmbyhbW3NlbGYgaW5QaXBlUGF0aF0gVVRGOFN0cmluZ10sIDA2
NjYpOwotICAgIG1rZmlmbyhbW3NlbGYgb3V0UGlwZVBhdGhdIFVURjhTdHJpbmddLCAwNjY2KTsK
LSAgICBta2ZpZm8oW1tzZWxmIGVycm9yUGlwZVBhdGhdIFVURjhTdHJpbmddLCAwNjY2KTsKLX0K
LQotLSAodm9pZClkZXN0cm95RklGT3MKLXsKLSAgICB1bmxpbmsoW1tzZWxmIGluUGlwZVBhdGhd
IFVURjhTdHJpbmddKTsKLSAgICB1bmxpbmsoW1tzZWxmIG91dFBpcGVQYXRoXSBVVEY4U3RyaW5n
XSk7Ci0gICAgdW5saW5rKFtbc2VsZiBlcnJvclBpcGVQYXRoXSBVVEY4U3RyaW5nXSk7Ci19Ci0K
LS0gKHZvaWQpIHJlbGF5U3RyZWFtOihOU0lucHV0U3RyZWFtICopc3RyZWFtCi17Ci0gICAgdWlu
dDhfdCBieXRlc1sxMDI0XTsKLSAgICBOU0ludGVnZXIgYnl0ZXNSZWFkID0gW3N0cmVhbSByZWFk
OmJ5dGVzIG1heExlbmd0aDoxMDI0XTsKLSAgICBOU0RhdGEgKmRhdGEgPSBbTlNEYXRhIGRhdGFX
aXRoQnl0ZXM6Ynl0ZXMgbGVuZ3RoOmJ5dGVzUmVhZF07Ci0KLSAgICBpZiAoc3RyZWFtID09IFtz
ZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0pCi0gICAgICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBk
aWRSZWNlaXZlU3Rkb3V0RGF0YTpkYXRhXTsKLSAgICBlbHNlCi0gICAgICAgIFtbc2VsZiByZWxh
eURlbGVnYXRlXSBkaWRSZWNlaXZlU3RkZXJyRGF0YTpkYXRhXTsKLX0KLQotLSAodm9pZClzdHJl
YW06KE5TU3RyZWFtICopYVN0cmVhbSBoYW5kbGVFdmVudDooTlNTdHJlYW1FdmVudClldmVudENv
ZGUKLXsKLSAgICBzd2l0Y2ggKGV2ZW50Q29kZSkgewotICAgIGNhc2UgTlNTdHJlYW1FdmVudE5v
bmU6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlNTdHJlYW1FdmVudEhhc0J5dGVzQXZhaWxh
YmxlOgotICAgICAgICBbc2VsZiByZWxheVN0cmVhbTooTlNJbnB1dFN0cmVhbSAqKWFTdHJlYW1d
OwotICAgIGNhc2UgTlNTdHJlYW1FdmVudEhhc1NwYWNlQXZhaWxhYmxlOgotICAgICAgICBicmVh
azsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnRPcGVuQ29tcGxldGVkOgotICAgICAgICBicmVhazsK
LSAgICBjYXNlIE5TU3RyZWFtRXZlbnRFbmRFbmNvdW50ZXJlZDoKLSAgICAgICAgW1tzZWxmIHJl
bGF5RGVsZWdhdGVdIGRpZENyYXNoV2l0aE1lc3NhZ2U6bmlsXTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBOU1N0cmVhbUV2ZW50RXJyb3JPY2N1cnJlZDoKLSAgICAgICAgW1tzZWxmIHJlbGF5
RGVsZWdhdGVdIGRpZENyYXNoV2l0aE1lc3NhZ2U6W1thU3RyZWFtIHN0cmVhbUVycm9yXSBkZXNj
cmlwdGlvbl1dOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLUBlbmQKSW5kZXg6IFRvb2xz
L0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheS5oCShyZXZpc2lv
biAyMDk4ODYpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVs
YXkuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IExUUmVsYXlfaAotI2RlZmluZSBMVFJlbGF5X2gKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3Vu
ZGF0aW9uLmg+Ci0KLUBwcm90b2NvbCBMVFJlbGF5RGVsZWdhdGUgPE5TT2JqZWN0PgotLSAodm9p
ZClkaWRDb25uZWN0OwotLSAodm9pZClkaWREaXNjb25uZWN0OwotLSAodm9pZClkaWRDcmFzaFdp
dGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2U7Ci0tICh2b2lkKWRpZFJlY2VpdmVTdGRvdXRE
YXRhOihOU0RhdGEgKilkYXRhOwotLSAodm9pZClkaWRSZWNlaXZlU3RkZXJyRGF0YTooTlNEYXRh
ICopZGF0YTsKLUBlbmQKLQotQHByb3RvY29sIExUUmVsYXkgPE5TT2JqZWN0LCBOU1N0cmVhbURl
bGVnYXRlPgotLSAodm9pZClzZXR1cDsKLS0gKHZvaWQpdGVhckRvd247Ci0tICh2b2lkKWNvbm5l
Y3Q7Ci0tICh2b2lkKWRpc2Nvbm5lY3Q7Ci1AcHJvcGVydHkgKHdlYWspIGlkPExUUmVsYXlEZWxl
Z2F0ZT4gcmVsYXlEZWxlZ2F0ZTsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNPdXRw
dXRTdHJlYW0gKm91dHB1dFN0cmVhbTsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlv
dXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJv
bGxlci5oCShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0
VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgTFRSZWxheUNvbnRyb2xsZXJfaAotI2RlZmluZSBMVFJl
bGF5Q29udHJvbGxlcl9oCi0KLSNpbXBvcnQgIkxUUmVsYXkuaCIKLQotI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLUBjbGFzcyBTaW1EZXZpY2U7Ci0KLUBpbnRlcmZhY2UgTFRS
ZWxheUNvbnRyb2xsZXIgOiBOU09iamVjdCA8TFRSZWxheURlbGVnYXRlPgotLSAoaWQpaW5pdFdp
dGhEZXZpY2U6KFNpbURldmljZSAqKWRldmljZSBwcm9kdWN0RGlyOihOU1N0cmluZyAqKXByb2R1
Y3REaXIgYXBwUGF0aDooTlNTdHJpbmcgKilhcHBQYXRoIGRldmljZVVESUQ6KE5TVVVJRCAqKXVk
aWQgZHVtcFRvb2xBcmd1bWVudHM6KE5TQXJyYXkgKilhcmd1bWVudHM7Ci0tICh2b2lkKXN0YXJ0
OwotLSAodm9pZClmaW5pc2g7Ci1AZW5kCi0KLSNlbmRpZgpJbmRleDogVG9vbHMvTGF5b3V0VGVz
dFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIu
bQkocmV2aXNpb24gMjA5ODg2KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RS
ZWxheS9MVFJlbGF5Q29udHJvbGxlci5tCShub25leGlzdGVudCkKQEAgLTEsMjcyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW1wb3J0ICJMVFJlbGF5Q29udHJvbGxlci5oIgotCi0jaW1wb3J0ICJD
b3JlU2ltdWxhdG9yU1BJLmgiCi0jaW1wb3J0ICJMVFBpcGVSZWxheS5oIgotI2ltcG9ydCA8QXBw
S2l0L0FwcEtpdC5oPgotI2ltcG9ydCA8Y3J0X2V4dGVybnMuaD4KLQotQGludGVyZmFjZSBMVFJl
bGF5Q29udHJvbGxlciAoKQotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBkaXNwYXRjaF9z
b3VyY2VfdCBzdGFuZGFyZElucHV0RGlzcGF0Y2hTb3VyY2U7Ci1AcHJvcGVydHkgKHJlYWRvbmx5
LCBzdHJvbmcpIE5TRmlsZUhhbmRsZSAqc3RhbmRhcmRPdXRwdXQ7Ci1AcHJvcGVydHkgKHJlYWRv
bmx5LCBzdHJvbmcpIE5TRmlsZUhhbmRsZSAqc3RhbmRhcmRFcnJvcjsKLUBwcm9wZXJ0eSAocmVh
ZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKmlwY0lkZW50aWZpZXI7Ci1AcHJvcGVydHkgKHJlYWRv
bmx5LCBzdHJvbmcpIE5TU3RyaW5nICphcHBCdW5kbGVJZGVudGlmaWVyOwotQHByb3BlcnR5IChy
ZWFkb25seSwgc3Ryb25nKSBOU1N0cmluZyAqYXBwUGF0aDsKLUBwcm9wZXJ0eSAocmVhZG9ubHks
IHN0cm9uZykgTlNVVUlEICpkZXZpY2VVRElEOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25n
KSBOU0FycmF5ICpkdW1wVG9vbEFyZ3VtZW50czsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9u
ZykgTlNTdHJpbmcgKnByb2R1Y3REaXI7Ci1AcHJvcGVydHkgKHN0cm9uZykgU2ltRGV2aWNlICpk
ZXZpY2U7Ci1AcHJvcGVydHkgKHN0cm9uZykgaWQ8TFRSZWxheT4gcmVsYXk7Ci1AcHJvcGVydHkg
cGlkX3QgcGlkOwotQHByb3BlcnR5IChzdHJvbmcpIGRpc3BhdGNoX3NvdXJjZV90IGFwcERpc3Bh
dGNoU291cmNlOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gTFRSZWxheUNvbnRyb2xsZXIKLQot
LSAoaWQpaW5pdFdpdGhEZXZpY2U6KFNpbURldmljZSAqKWRldmljZSBwcm9kdWN0RGlyOihOU1N0
cmluZyAqKXByb2R1Y3REaXIgYXBwUGF0aDooTlNTdHJpbmcgKilhcHBQYXRoIGRldmljZVVESUQ6
KE5TVVVJRCAqKXVkaWQgZHVtcFRvb2xBcmd1bWVudHM6KE5TQXJyYXkgKilhcmd1bWVudHMKLXsK
LSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKSB7Ci0gICAgICAgIF9kZXZpY2UgPSBkZXZp
Y2U7Ci0gICAgICAgIF9wcm9kdWN0RGlyID0gcHJvZHVjdERpcjsKLSAgICAgICAgX2FwcFBhdGgg
PSBhcHBQYXRoOwotICAgICAgICBfYXBwQnVuZGxlSWRlbnRpZmllciA9IFtbTlNCdW5kbGUgYnVu
ZGxlV2l0aFBhdGg6YXBwUGF0aF0gYnVuZGxlSWRlbnRpZmllcl07Ci0gICAgICAgIF9kZXZpY2VV
RElEID0gdWRpZDsKLSAgICAgICAgX2R1bXBUb29sQXJndW1lbnRzID0gYXJndW1lbnRzOwotICAg
ICAgICBfc3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNlID0gZGlzcGF0Y2hfc291cmNlX2NyZWF0
ZShESVNQQVRDSF9TT1VSQ0VfVFlQRV9SRUFELCBTVERJTl9GSUxFTk8sIDAsIGRpc3BhdGNoX2dl
dF9tYWluX3F1ZXVlKCkpOwotICAgICAgICBfc3RhbmRhcmRPdXRwdXQgPSBbTlNGaWxlSGFuZGxl
IGZpbGVIYW5kbGVXaXRoU3RhbmRhcmRPdXRwdXRdOwotICAgICAgICBfc3RhbmRhcmRFcnJvciA9
IFtOU0ZpbGVIYW5kbGUgZmlsZUhhbmRsZVdpdGhTdGFuZGFyZEVycm9yXTsKLQotICAgICAgICBk
aXNwYXRjaF9zb3VyY2Vfc2V0X2V2ZW50X2hhbmRsZXIoX3N0YW5kYXJkSW5wdXREaXNwYXRjaFNv
dXJjZSwgXnsKLSAgICAgICAgICAgIHVpbnQ4X3QgYnVmZmVyWzEwMjRdOwotICAgICAgICAgICAg
c3NpemVfdCBsZW4gPSByZWFkKFNURElOX0ZJTEVOTywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7
Ci0gICAgICAgICAgICBpZiAobGVuID4gMCkgewotICAgICAgICAgICAgICAgIEB0cnkgewotICAg
ICAgICAgICAgICAgICAgICBbW1tzZWxmIHJlbGF5XSBvdXRwdXRTdHJlYW1dIHdyaXRlOmJ1ZmZl
ciBtYXhMZW5ndGg6bGVuXTsKLSAgICAgICAgICAgICAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24g
KmUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQnJva2VuIHBpcGUgLSB0aGUgZHVtcCB0b29s
IGNyYXNoZWQuIFRpbWUgdG8gZGllLgotICAgICAgICAgICAgICAgICAgICBbc2VsZiBkaWRDcmFz
aFdpdGhNZXNzYWdlOm5pbF07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAvLyBFT0YgUmVjZWl2ZWQgb24gdGhlIHJlbGF5J3Mgc3RhbmRh
cmQgaW5wdXQuCi0gICAgICAgICAgICAgICAgW3NlbGYgZmluaXNoXTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSk7Ci0KLSAgICAgICAgX3JlbGF5ID0gW1tMVFBpcGVSZWxheSBhbGxvY10gaW5p
dFdpdGhQcmVmaXg6W0AiL3RtcCIgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OnNlbGYu
aXBjSWRlbnRpZmllcl1dOwotICAgICAgICBbX3JlbGF5IHNldFJlbGF5RGVsZWdhdGU6c2VsZl07
Ci0gICAgfQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChOU1N0cmluZyAqKWlwY0lkZW50aWZp
ZXIKLXsKLSAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQC0lQCIsIHNl
bGYuYXBwQnVuZGxlSWRlbnRpZmllciwgc2VsZi5kZXZpY2VVRElELlVVSURTdHJpbmddOwotfQot
Ci0tIChOU1N0cmluZyAqKXByb2Nlc3NOYW1lCi17Ci0gICAgcmV0dXJuIFtzZWxmLmFwcEJ1bmRs
ZUlkZW50aWZpZXIgY29tcG9uZW50c1NlcGFyYXRlZEJ5U3RyaW5nOkAiLiJdLmxhc3RPYmplY3Q7
Ci19Ci0KLS0gKHZvaWQpZGlkUmVjZWl2ZVN0ZG91dERhdGE6KE5TRGF0YSAqKWRhdGEKLXsKLSAg
ICBAdHJ5IHsKLSAgICAgICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0XSB3cml0ZURhdGE6ZGF0YV07
Ci0gICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRpb24pIHsKLSAgICAgICAgLy8gTlNG
aWxlSGFuZGxlT3BlcmF0aW9uRXhjZXB0aW9uCi0gICAgICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhl
IHRlc3QgaGFybmVzcyBzdG9wcGVkIGxpc3RlbmluZyB0byB1cywKLSAgICAgICAgLy8gcHJvYmFi
bHkgYmVjYXVzZSB3ZSB0aW1lZCBvdXQgb3IgYSBydW4gd2FzIGNhbmNlbGVkLgotICAgICAgICBl
eGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotfQotCi0tICh2b2lkKWRpZFJlY2VpdmVTdGRlcnJE
YXRhOihOU0RhdGEgKilkYXRhCi17Ci0gICAgQHRyeSB7Ci0gICAgICAgIFtbc2VsZiBzdGFuZGFy
ZEVycm9yXSB3cml0ZURhdGE6ZGF0YV07Ci0gICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNl
cHRpb24pIHsKLSAgICAgICAgLy8gTlNGaWxlSGFuZGxlT3BlcmF0aW9uRXhjZXB0aW9uCi0gICAg
ICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhlIHRlc3QgaGFybmVzcyBzdG9wcGVkIGxpc3RlbmluZyB0
byB1cywKLSAgICAgICAgLy8gcHJvYmFibHkgYmVjYXVzZSB3ZSB0aW1lZCBvdXQgb3IgYSBydW4g
d2FzIGNhbmNlbGVkLgotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotfQotCi0t
ICh2b2lkKWRpZERpc2Nvbm5lY3QKLXsKLSAgICBkaXNwYXRjaF9zdXNwZW5kKFtzZWxmIHN0YW5k
YXJkSW5wdXREaXNwYXRjaFNvdXJjZV0pOwotfQotCi0tICh2b2lkKWRpZENvbm5lY3QKLXsKLSAg
ICBkaXNwYXRjaF9yZXN1bWUoW3NlbGYgc3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNlXSk7Ci19
Ci0KLS0gKHZvaWQpZGlkQ3Jhc2hXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0g
ICAgW1tzZWxmIHJlbGF5XSBkaXNjb25uZWN0XTsKLSAgICBOU1N0cmluZyAqY3Jhc2hNZXNzYWdl
ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJcbiNDUkFTSEVEIC0gJUAgKHBpZCAlZClc
biIsIFtzZWxmIHByb2Nlc3NOYW1lXSwgW3NlbGYgcGlkXV07Ci0KLSAgICBpZiAobWVzc2FnZSkK
LSAgICAgICAgY3Jhc2hNZXNzYWdlID0gW2NyYXNoTWVzc2FnZSBzdHJpbmdCeUFwcGVuZGluZ0Zv
cm1hdDpAIiVAXG4iLCBtZXNzYWdlXTsKLQotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSB3cml0
ZURhdGE6W2NyYXNoTWVzc2FnZSBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGlu
Z11dOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSBjbG9zZUZpbGVdOwotICAgIFtbc2VsZiBz
dGFuZGFyZE91dHB1dF0gY2xvc2VGaWxlXTsKLSAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci19Ci0K
LS0gKHZvaWQpaW5zdGFsbEFwcAotewotICAgIE5TRGljdGlvbmFyeSAqaW5zdGFsbE9wdGlvbnMg
PSBAewotICAgICAgICAoTlNTdHJpbmcgKilrQ0ZCdW5kbGVJZGVudGlmaWVyS2V5OiBzZWxmLmFw
cEJ1bmRsZUlkZW50aWZpZXIsCi0gICAgfTsKLQotICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOwot
ICAgIEJPT0wgaW5zdGFsbGVkID0gW3NlbGYuZGV2aWNlIGluc3RhbGxBcHBsaWNhdGlvbjpbTlNV
UkwgZmlsZVVSTFdpdGhQYXRoOnNlbGYuYXBwUGF0aF0gd2l0aE9wdGlvbnM6aW5zdGFsbE9wdGlv
bnMgZXJyb3I6JmVycm9yXTsKLSAgICBpZiAoIWluc3RhbGxlZCkgewotICAgICAgICBOU0xvZyhA
IkNvdWxkbid0IGluc3RhbGwgJUA6ICVAIiwgc2VsZi5hcHBQYXRoLCBlcnJvci5kZXNjcmlwdGlv
bik7Ci0gICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpa2ls
bEFwcAotewotICAgIGRpc3BhdGNoX3NvdXJjZV90IGRpc3BhdGNoID0gW3NlbGYgYXBwRGlzcGF0
Y2hTb3VyY2VdOwotCi0gICAgaWYgKGRpc3BhdGNoKQotICAgICAgICBkaXNwYXRjaF9zb3VyY2Vf
Y2FuY2VsKGRpc3BhdGNoKTsKLQotICAgIGlmIChbc2VsZiBwaWRdID4gMSkgewotICAgICAgICBr
aWxsKHNlbGYucGlkLCBTSUdLSUxMKTsKLSAgICAgICAgW3NlbGYgc2V0UGlkOi0xXTsKLSAgICB9
Ci0gICAgW3NlbGYgc2V0QXBwRGlzcGF0Y2hTb3VyY2U6bmlsXTsKLX0KLQotLSAoTlNEaWN0aW9u
YXJ5ICopX2Vudmlyb25tZW50VmFyaWFibGVzCi17Ci0gICAgc3RhdGljIE5TRGljdGlvbmFyeSAq
ZW52aXJvbm1lbnRWYXJpYWJsZXM7Ci0gICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlOwot
Ci0gICAgZGlzcGF0Y2hfb25jZSgmb25jZSwgXnsKLSAgICAgICAgTlNTdHJpbmcgKnByb2R1Y3RE
aXJlY3RvcnkgPSBbc2VsZiBwcm9kdWN0RGlyXTsKLQotICAgICAgICBOU011dGFibGVEaWN0aW9u
YXJ5ICpkaWN0aW9uYXJ5ID0gW0B7Ci0gICAgICAgICAgICBAIklQQ19JREVOVElGSUVSIjogc2Vs
Zi5pcGNJZGVudGlmaWVyLAotICAgICAgICAgICAgQCJEWUxEX0ZSQU1FV09SS19QQVRIIjogcHJv
ZHVjdERpcmVjdG9yeSwKLSAgICAgICAgICAgIEAiX19YUENfRFlMRF9GUkFNRVdPUktfUEFUSCI6
IHByb2R1Y3REaXJlY3RvcnksCi0gICAgICAgICAgICBAIkRZTERfTElCUkFSWV9QQVRIIjogcHJv
ZHVjdERpcmVjdG9yeSwKLSAgICAgICAgICAgIEAiX19YUENfRFlMRF9MSUJSQVJZX1BBVEgiOiBw
cm9kdWN0RGlyZWN0b3J5LAotICAgICAgICB9IG11dGFibGVDb3B5XTsKLQotICAgICAgICBmb3Ig
KE5TU3RyaW5nICprZXlOYW1lIGluIEBbQCJEWUxEX0lOU0VSVF9MSUJSQVJJRVMiLCBAIk1hbGxv
Y1N0YWNrTG9nZ2luZyIsIEAiTE9DQUxfUkVTT1VSQ0VfUk9PVCIsIEAiRFVNUFJFTkRFUlRSRUVf
VEVNUCJdKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiB2YWx1ZSA9IGdldGVudihba2V5TmFt
ZSBVVEY4U3RyaW5nXSk7Ci0gICAgICAgICAgICBpZiAodmFsdWUgJiYgc3RybGVuKHZhbHVlKSkg
ewotICAgICAgICAgICAgICAgIE5TU3RyaW5nICpuc1ZhbHVlID0gW05TU3RyaW5nIHN0cmluZ1dp
dGhVVEY4U3RyaW5nOnZhbHVlXTsKLSAgICAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmpl
Y3Q6bnNWYWx1ZSBmb3JLZXk6a2V5TmFtZV07Ci0gICAgICAgICAgICAgICAgW2RpY3Rpb25hcnkg
c2V0T2JqZWN0Om5zVmFsdWUgZm9yS2V5OltAIl9fWFBDXyIgc3RyaW5nQnlBcHBlbmRpbmdTdHJp
bmc6a2V5TmFtZV1dOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChj
aGFyKiogZW52cCA9ICpfTlNHZXRFbnZpcm9uKCk7ICplbnZwOyBlbnZwKyspIHsKLSAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIGVudiA9ICplbnZwOwotICAgICAgICAgICAgaWYgKCFzdHJuY21wKCJK
U0NfIiwgZW52LCA0KSB8fCAhc3RybmNtcCgiX19YUENfSlNDXyIsIGVudiwgMTApKSB7Ci0gICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogZXF1YWwgPSBzdHJjaHIoZW52LCAnPScpOwotICAgICAg
ICAgICAgICAgIGlmICghZXF1YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgTlNMb2coQCJNaXNz
aW5nICc9JyBpbiBlbnYgdmFyICclcyciLCBlbnYpOwotICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3Qg
c2l6ZV90IG1heEtleUxlbmd0aCA9IDI1NjsKLSAgICAgICAgICAgICAgICBzaXplX3Qga2V5TGVu
Z3RoID0gZXF1YWwgLSBlbnY7Ci0gICAgICAgICAgICAgICAgaWYgKGtleUxlbmd0aCA+PSBtYXhL
ZXlMZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgTlNMb2coQCJFbnYgdmFyICclcycgaXMg
dG9vIGxvbmciLCBlbnYpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjaGFyIGtleVttYXhLZXlMZW5ndGhdOwotICAg
ICAgICAgICAgICAgIHN0cm5jcHkoa2V5LCBlbnYsIGtleUxlbmd0aCk7Ci0gICAgICAgICAgICAg
ICAga2V5W2tleUxlbmd0aF0gPSAnXDAnOwotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZh
bHVlID0gZXF1YWwgKyAxOwotCi0gICAgICAgICAgICAgICAgTlNTdHJpbmcgKm5zS2V5ID0gW05T
U3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmtleV07Ci0gICAgICAgICAgICAgICAgTlNTdHJp
bmcgKm5zVmFsdWUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6dmFsdWVdOwotICAg
ICAgICAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpuc1ZhbHVlIGZvcktleTpuc0tleV07
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBlbnZpcm9ubWVudFZhcmlhYmxl
cyA9IFtkaWN0aW9uYXJ5IGNvcHldOwotICAgIH0pOwotCi0gICAgcmV0dXJuIGVudmlyb25tZW50
VmFyaWFibGVzOwotfQotCi0tICh2b2lkKWxhdW5jaEFwcAotewotICAgIE5TRGljdGlvbmFyeSAq
bGF1bmNoT3B0aW9ucyA9IEB7Ci0gICAgICAgIGtTaW1EZXZpY2VMYXVuY2hBcHBsaWNhdGlvbkVu
dmlyb25tZW50OiBbc2VsZiBfZW52aXJvbm1lbnRWYXJpYWJsZXNdLAotICAgICAgICBrU2ltRGV2
aWNlTGF1bmNoQXBwbGljYXRpb25Bcmd1bWVudHM6IFtzZWxmIGR1bXBUb29sQXJndW1lbnRzXSwK
LSAgICB9OwotCi0gICAgTlNFcnJvciAqZXJyb3I7Ci0gICAgcGlkX3QgcGlkID0gW3NlbGYuZGV2
aWNlIGxhdW5jaEFwcGxpY2F0aW9uV2l0aElEOnNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciBvcHRp
b25zOmxhdW5jaE9wdGlvbnMgZXJyb3I6JmVycm9yXTsKLQotICAgIGlmIChwaWQgPCAwKSB7Ci0g
ICAgICAgIE5TTG9nKEAiQ291bGRuJ3QgbGF1bmNoICVAOiAlQCIsIHNlbGYuYXBwQnVuZGxlSWRl
bnRpZmllciwgZXJyb3IuZGVzY3JpcHRpb24pOwotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7
Ci0gICAgfQotCi0gICAgW3NlbGYgc2V0UGlkOnBpZF07Ci0KLSAgICBkaXNwYXRjaF9xdWV1ZV90
IHF1ZXVlID0gZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKTsKLSAgICBkaXNwYXRjaF9zb3VyY2Vf
dCBzaW11bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3VyY2UgPSBkaXNwYXRjaF9zb3VyY2VfY3JlYXRl
KERJU1BBVENIX1NPVVJDRV9UWVBFX1BST0MsIFtzZWxmIHBpZF0sIERJU1BBVENIX1BST0NfRVhJ
VCwgcXVldWUpOwotICAgIFtzZWxmIHNldEFwcERpc3BhdGNoU291cmNlOnNpbXVsYXRvckFwcEV4
aXREaXNwYXRjaFNvdXJjZV07Ci0gICAgZGlzcGF0Y2hfc291cmNlX3NldF9ldmVudF9oYW5kbGVy
KHNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSwgXnsKLSAgICAgICAgZGlzcGF0Y2hfc291
cmNlX2NhbmNlbChzaW11bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3VyY2UpOwotICAgICAgICBbc2Vs
ZiBkaWRDcmFzaFdpdGhNZXNzYWdlOm5pbF07Ci0gICAgfSk7Ci0gICAgZGlzcGF0Y2hfcmVzdW1l
KHNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSk7Ci19Ci0KLS0gKHZvaWQpc3RhcnQKLXsK
LSAgICBbc2VsZiBpbnN0YWxsQXBwXTsKLSAgICBbW3NlbGYgcmVsYXldIHNldHVwXTsKLSAgICBb
c2VsZiBsYXVuY2hBcHBdOwotICAgIFtbc2VsZiByZWxheV0gY29ubmVjdF07Ci19Ci0KLS0gKHZv
aWQpZmluaXNoCi17Ci0gICAgW1tzZWxmIHJlbGF5XSBkaXNjb25uZWN0XTsKLSAgICBbc2VsZiBr
aWxsQXBwXTsKLSAgICBleGl0KEVYSVRfU1VDQ0VTUyk7Ci19Ci0KLUBlbmQKSW5kZXg6IFRvb2xz
L0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvbWFpbi5tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvbWFpbi5tCShyZXZpc2lvbiAyMDk4
ODYpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L21haW4ubQkobm9u
ZXhpc3RlbnQpCkBAIC0xLDEzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAi
Q29yZVNpbXVsYXRvclNQSS5oIgotI2ltcG9ydCAiTFRSZWxheUNvbnRyb2xsZXIuaCIKLSNpbXBv
cnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi1zdGF0aWMgTFRSZWxheUNvbnRyb2xsZXIg
KnJlbGF5Q29udHJvbGxlcjsKLQotdm9pZCB1c2FnZSgpCi17Ci0gICAgTlNTdHJpbmcgKmhlbHBU
ZXh0ID0gQCJMYXlvdXRUZXN0UmVsYXk6IHJ1biBhIGR1bXAgdG9vbCBpbiB0aGUgc2ltdWxhdG9y
LiBOb3QgZm9yIGRpcmVjdCBjb25zdW1wdGlvbi5cbiIKLSAgICAgICAgIlVzYWdlOiBMYXlvdXRU
ZXN0UmVsYXkgWy1oXSBbb3B0aW9uc10gLS0gW2R1bXAgdG9vbCBhcmd1bWVudHNdXG4iCi0gICAg
ICAgICJSZXF1aXJlZCBvcHRpb25zOlxuIgotICAgICAgICAiICAgIC11ZGlkIDxpZGVudGlmaWVy
PiAgICAgICBTaW11bGF0b3IgZGV2aWNlIGlkZW50aWZpZXJcbiIKLSAgICAgICAgIiAgICAtYXBw
IDxhcHBfcGF0aD4gICAgICAgICAgUGF0aCB0byB0aGUgYnVpbHQgaU9TIC5hcHAgYnVuZGxlIGRp
cmVjdG9yeS5cbiIKLSAgICAgICAgIiAgICAtcHJvZHVjdERpciA8ZGlyPiAgICAgICAgL3BhdGgv
dG8vV2ViS2l0QnVpbGQve2NvbmZpZ3VyYXRpb259LXtzaG9ydCBwbGF0Zm9ybX0uXG4iOwotCi0g
ICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgW2hlbHBUZXh0IFVURjhTdHJpbmddKTsKLX0KLQot
TlNTdHJpbmcgKmdldFJlcXVpcmVkU3RyaW5nQXJndW1lbnQoTlNTdHJpbmcgKnBhcmFtZXRlcikK
LXsKLSAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRh
cmRVc2VyRGVmYXVsdHNdOwotICAgIE5TU3RyaW5nICphcmd1bWVudCA9IFtkZWZhdWx0cyBzdHJp
bmdGb3JLZXk6cGFyYW1ldGVyXTsKLQotICAgIGlmICghYXJndW1lbnQpIHsKLSAgICAgICAgTlNM
b2coQCItJUAgaXMgcmVxdWlyZWQuIiwgcGFyYW1ldGVyKTsKLSAgICAgICAgdXNhZ2UoKTsKLSAg
ICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0KLSAgICByZXR1cm4gYXJndW1lbnQ7Ci19
Ci0KLU5TQXJyYXkgKmdldER1bXBUb29sQXJndW1lbnRzKCkKLXsKLSAgICBOU011dGFibGVBcnJh
eSAqZHVtcFRvb2xBcmd1bWVudHMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKLSAg
ICBOU0FycmF5ICpwcm9jZXNzQXJncyA9IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gYXJn
dW1lbnRzXTsKLSAgICBCT09MIGFwcGVuZGluZyA9IE5POwotICAgIGZvciAoTlNTdHJpbmcgKmFy
ZyBpbiBwcm9jZXNzQXJncykgewotICAgICAgICBpZiAoW2FyZyBpc0VxdWFsVG9TdHJpbmc6QCIt
LSJdKSB7Ci0gICAgICAgICAgICBhcHBlbmRpbmcgPSBZRVM7Ci0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoYXBwZW5kaW5nKQotICAgICAgICAgICAgW2R1bXBU
b29sQXJndW1lbnRzIGFkZE9iamVjdDphcmddOwotICAgIH0KLSAgICByZXR1cm4gZHVtcFRvb2xB
cmd1bWVudHM7Ci19Ci0KLXZvaWQgZmluaXNoKCkKLXsKLSAgICBbcmVsYXlDb250cm9sbGVyIGZp
bmlzaF07Ci19Ci0KLXZvaWQgcmVjZWl2ZWRTaWduYWwoaW50IHNpZ25hbCkKLXsKLSAgICBleGl0
KEVYSVRfU1VDQ0VTUyk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICogYXJn
dltdKQotewotICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBOU0FycmF5ICpoZWxwQXJn
dW1lbnRzID0gQFtAIi1oIiwgQCItLWhlbHAiXTsKLSAgICAgICAgZm9yIChOU1N0cmluZyAqaGVs
cEFyZ3VtZW50IGluIGhlbHBBcmd1bWVudHMpIHsKLSAgICAgICAgICAgIGlmIChbW1tOU1Byb2Nl
c3NJbmZvIHByb2Nlc3NJbmZvXSBhcmd1bWVudHNdIGluZGV4T2ZPYmplY3Q6aGVscEFyZ3VtZW50
XSAhPSBOU05vdEZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgdXNhZ2UoKTsKLSAgICAgICAgICAg
ICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotI2lm
IFVTRV9TSU1fU0VSVklDRV9DT05URVhUCi0gICAgICAgIE5TU3RyaW5nICpkZXZlbG9wZXJEaXJl
Y3RvcnkgPSBnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAiZGV2ZWxvcGVyRGlyIik7Ci0jZW5k
aWYKLSAgICAgICAgTlNVVUlEICp1ZGlkID0gW1tOU1VVSUQgYWxsb2NdIGluaXRXaXRoVVVJRFN0
cmluZzpnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAidWRpZCIpXTsKLSAgICAgICAgTlNTdHJp
bmcgKmFwcFBhdGggPSBnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAiYXBwIik7Ci0gICAgICAg
IE5TU3RyaW5nICpwcm9kdWN0RGlyZWN0b3J5ID0gZ2V0UmVxdWlyZWRTdHJpbmdBcmd1bWVudChA
InByb2R1Y3REaXIiKTsKLSAgICAgICAgTlNBcnJheSAqZHVtcFRvb2xBcmd1bWVudHMgPSBnZXRE
dW1wVG9vbEFyZ3VtZW50cygpOwotCi0jaWYgVVNFX1NJTV9TRVJWSUNFX0NPTlRFWFQKLSAgICAg
ICAgTlNFcnJvciAqZXJyb3I7Ci0gICAgICAgIFNpbVNlcnZpY2VDb250ZXh0ICpzZXJ2aWNlQ29u
dGV4dCA9IFtTaW1TZXJ2aWNlQ29udGV4dCBzaGFyZWRTZXJ2aWNlQ29udGV4dEZvckRldmVsb3Bl
ckRpcjpkZXZlbG9wZXJEaXJlY3RvcnkgZXJyb3I6JmVycm9yXTsKLSAgICAgICAgaWYgKCFzZXJ2
aWNlQ29udGV4dCkgewotICAgICAgICAgICAgTlNMb2coQCJEZXZpY2UgY29udGV4dCBjb3VsZG4n
dCBiZSBmb3VuZDogJUAiLCBlcnJvcik7Ci0gICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7
Ci0gICAgICAgIH0KLSAgICAgICAgU2ltRGV2aWNlU2V0ICpkZXZpY2VTZXQgPSBbc2VydmljZUNv
bnRleHQgZGVmYXVsdERldmljZVNldFdpdGhFcnJvcjpuaWxdOwotICAgICAgICBpZiAoIWRldmlj
ZVNldCkgewotICAgICAgICAgICAgTlNMb2coQCJEZWZhdWx0IGRldmljZSBzZXQgY291bGRuJ3Qg
YmUgZm91bmQ6ICVAIiwgZXJyb3IpOwotICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwot
ICAgICAgICB9Ci0gICAgICAgIFNpbURldmljZSAqZGV2aWNlID0gW2RldmljZVNldC5kZXZpY2Vz
QnlVRElEIG9iamVjdEZvcktleTp1ZGlkXTsKLSNlbHNlCi0gICAgICAgIFNpbURldmljZSAqZGV2
aWNlID0gW1NpbURldmljZVNldC5kZWZhdWx0U2V0LmRldmljZXNCeVVESUQgb2JqZWN0Rm9yS2V5
OnVkaWRdOwotI2VuZGlmCi0gICAgICAgIGlmICghZGV2aWNlKSB7Ci0gICAgICAgICAgICBOU0xv
ZyhAIkRldmljZSAlQCBjb3VsZG4ndCBiZSBmb3VuZCIsIHVkaWQpOwotICAgICAgICAgICAgZXhp
dChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVsYXlDb250cm9sbGVyID0g
W1tMVFJlbGF5Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhEZXZpY2U6ZGV2aWNlIHByb2R1Y3RE
aXI6cHJvZHVjdERpcmVjdG9yeSBhcHBQYXRoOmFwcFBhdGggZGV2aWNlVURJRDp1ZGlkIGR1bXBU
b29sQXJndW1lbnRzOmR1bXBUb29sQXJndW1lbnRzXTsKLSAgICAgICAgW3JlbGF5Q29udHJvbGxl
ciBzdGFydF07Ci0KLSAgICAgICAgYXRleGl0KGZpbmlzaCk7Ci0gICAgICAgIHNpZ25hbChTSUdJ
TlQsIHJlY2VpdmVkU2lnbmFsKTsKLSAgICAgICAgc2lnbmFsKFNJR1RFUk0sIHJlY2VpdmVkU2ln
bmFsKTsKLQotICAgICAgICBbW05TUnVuTG9vcCBtYWluUnVuTG9vcF0gcnVuXTsKLSAgICB9Ci0g
ICAgcmV0dXJuIDA7Ci19CkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJl
bGF5Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0
VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAyMDk4ODYpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMDIgKzAsMCBAQAot
Ly8gISQqVVRGOCokIQotewotCWFyY2hpdmVWZXJzaW9uID0gMTsKLQljbGFzc2VzID0gewotCX07
Ci0Jb2JqZWN0VmVyc2lvbiA9IDQ2OwotCW9iamVjdHMgPSB7Ci0KLS8qIEJlZ2luIFBCWEJ1aWxk
RmlsZSBzZWN0aW9uICovCi0JCTJFOEQzRUY4MTk4ODFENDMwMDRGNkNDMiAvKiBtYWluLm0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRThEM0VGNzE5ODgx
RDQzMDA0RjZDQzIgLyogbWFpbi5tICovOyB9OwotCQkyRThEM0YwMjE5ODgxRkQwMDA0RjZDQzIg
LyogTFRQaXBlUmVsYXkubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJFOEQzRjAxMTk4ODFGRDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5tICovOyB9Owot
CQkyRThEM0YwNjE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIubSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOEQzRjA1MTk4ODI0MDYw
MDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5tICovOyB9OwotLyogRW5kIFBCWEJ1aWxkRmls
ZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWENvcHlGaWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAq
LwotCQkyRThEM0VGMjE5ODgxRDQzMDA0RjZDQzIgLyogQ29weUZpbGVzICovID0gewotCQkJaXNh
ID0gUEJYQ29weUZpbGVzQnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2
NDc7Ci0JCQlkc3RQYXRoID0gL3Vzci9zaGFyZS9tYW4vbWFuMS87Ci0JCQlkc3RTdWJmb2xkZXJT
cGVjID0gMDsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAxOwotCQl9OwotLyogRW5kIFBCWENvcHlGaWxlc0J1aWxkUGhhc2Ugc2Vj
dGlvbiAqLwotCi0vKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KLQkJMkU4RDNF
RjQxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxl
IjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gTGF5b3V0VGVzdFJlbGF5OyBzb3VyY2VUcmVl
ID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQkyRThEM0VGNzE5ODgxRDQzMDA0RjZDQzIgLyog
bWFpbi5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLm9iamM7IHBhdGggPSBtYWluLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lnhj
Y29uZmlnOyBuYW1lID0gRGVidWdSZWxlYXNlLnhjY29uZmlnOyBwYXRoID0gQ29uZmlndXJhdGlv
bnMvRGVidWdSZWxlYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQky
RThEM0VGRjE5ODgxRTI1MDA0RjZDQzIgLyogQmFzZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IG5hbWUgPSBC
YXNlLnhjY29uZmlnOyBwYXRoID0gQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZzsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDAxOTg4MUYyOTAwNEY2Q0MyIC8qIExUUmVs
YXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTFRSZWxheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkyRThEM0YwMTE5ODgxRkQwMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkubSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gTFRQaXBlUmVsYXkubTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDMxOTg4MUZFMjAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExUUGlwZVJlbGF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTJFOEQzRjA0MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMVFJlbGF5Q29udHJvbGxlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0YwNTE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxh
eUNvbnRyb2xsZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gTFRSZWxh
eUNvbnRyb2xsZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0UxRkJDMTUxQjI5
MEU3OTAwMDEzNkY1IC8qIENvcmVTaW11bGF0b3JTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29yZVNpbXVsYXRvclNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhGcmFt
ZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0JCTJFOEQzRUYxMTk4ODFENDMwMDRGNkNDMiAv
KiBGcmFtZXdvcmtzICovID0gewotCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7Ci0J
CQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07Ci0vKiBFbmQgUEJY
RnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhHcm91cCBzZWN0
aW9uICovCi0JCTJFOEQzRUVCMTk4ODFENDMwMDRGNkNDMiA9IHsKLQkJCWlzYSA9IFBCWEdyb3Vw
OwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMkU4RDNFRkYxOTg4MUUyNTAwNEY2Q0MyIC8qIEJhc2Uu
eGNjb25maWcgKi8sCi0JCQkJMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFz
ZS54Y2NvbmZpZyAqLywKLQkJCQkyRThEM0VGNjE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVz
dFJlbGF5ICovLAotCQkJCTJFOEQzRUY1MTk4ODFENDMwMDRGNkNDMiAvKiBQcm9kdWN0cyAqLywK
LQkJCSk7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQkyRThEM0VGNTE5ODgx
RDQzMDA0RjZDQzIgLyogUHJvZHVjdHMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNo
aWxkcmVuID0gKAotCQkJCTJFOEQzRUY0MTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVs
YXkgKi8sCi0JCQkpOwotCQkJbmFtZSA9IFByb2R1Y3RzOwotCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKLQkJfTsKLQkJMkU4RDNFRjYxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxh
eSAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMkU4RDNF
RjcxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSAqLywKLQkJCQlDRTFGQkMxNTFCMjkwRTc5MDAw
MTM2RjUgLyogQ29yZVNpbXVsYXRvclNQSS5oICovLAotCQkJCTJFOEQzRjAwMTk4ODFGMjkwMDRG
NkNDMiAvKiBMVFJlbGF5LmggKi8sCi0JCQkJMkU4RDNGMDExOTg4MUZEMDAwNEY2Q0MyIC8qIExU
UGlwZVJlbGF5Lm0gKi8sCi0JCQkJMkU4RDNGMDMxOTg4MUZFMjAwNEY2Q0MyIC8qIExUUGlwZVJl
bGF5LmggKi8sCi0JCQkJMkU4RDNGMDQxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9s
bGVyLmggKi8sCi0JCQkJMkU4RDNGMDUxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9s
bGVyLm0gKi8sCi0JCQkpOwotCQkJcGF0aCA9IExheW91dFRlc3RSZWxheTsKLQkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0vKiBFbmQgUEJYR3JvdXAgc2VjdGlvbiAqLwotCi0vKiBC
ZWdpbiBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLwotCQkyRThEM0VGMzE5ODgxRDQzMDA0RjZD
QzIgLyogTGF5b3V0VGVzdFJlbGF5ICovID0gewotCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0Owot
CQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDJFOEQzRUZCMTk4ODFENDMwMDRGNkNDMiAvKiBC
dWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiTGF5b3V0VGVzdFJl
bGF5IiAqLzsKLQkJCWJ1aWxkUGhhc2VzID0gKAotCQkJCTJFOEQzRUYwMTk4ODFENDMwMDRGNkND
MiAvKiBTb3VyY2VzICovLAotCQkJCTJFOEQzRUYxMTk4ODFENDMwMDRGNkNDMiAvKiBGcmFtZXdv
cmtzICovLAotCQkJCTJFOEQzRUYyMTk4ODFENDMwMDRGNkNDMiAvKiBDb3B5RmlsZXMgKi8sCi0J
CQkpOwotCQkJYnVpbGRSdWxlcyA9ICgKLQkJCSk7Ci0JCQlkZXBlbmRlbmNpZXMgPSAoCi0JCQkp
OwotCQkJbmFtZSA9IExheW91dFRlc3RSZWxheTsKLQkJCXByb2R1Y3ROYW1lID0gTGF5b3V0VGVz
dFJlbGF5OwotCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDJFOEQzRUY0MTk4ODFENDMwMDRGNkNDMiAv
KiBMYXlvdXRUZXN0UmVsYXkgKi87Ci0JCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVj
dC10eXBlLnRvb2wiOwotCQl9OwotLyogRW5kIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCi0K
LS8qIEJlZ2luIFBCWFByb2plY3Qgc2VjdGlvbiAqLwotCQkyRThEM0VFQzE5ODgxRDQzMDA0RjZD
QzIgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7Ci0JCQlpc2EgPSBQQlhQcm9qZWN0OwotCQkJYXR0
cmlidXRlcyA9IHsKLQkJCQlMYXN0VXBncmFkZUNoZWNrID0gMDYwMDsKLQkJCQlPUkdBTklaQVRJ
T05OQU1FID0gIkFwcGxlLCBJbmMuIjsKLQkJCQlUYXJnZXRBdHRyaWJ1dGVzID0gewotCQkJCQky
RThEM0VGMzE5ODgxRDQzMDA0RjZDQzIgPSB7Ci0JCQkJCQlDcmVhdGVkT25Ub29sc1ZlcnNpb24g
PSA2LjA7Ci0JCQkJCX07Ci0JCQkJfTsKLQkJCX07Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0
ID0gMkU4RDNFRUYxOTg4MUQ0MzAwNEY2Q0MyIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBm
b3IgUEJYUHJvamVjdCAiTGF5b3V0VGVzdFJlbGF5IiAqLzsKLQkJCWNvbXBhdGliaWxpdHlWZXJz
aW9uID0gIlhjb2RlIDMuMiI7Ci0JCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7Ci0JCQlo
YXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMDsKLQkJCWtub3duUmVnaW9ucyA9ICgKLQkJCQllbiwK
LQkJCSk7Ci0JCQltYWluR3JvdXAgPSAyRThEM0VFQjE5ODgxRDQzMDA0RjZDQzI7Ci0JCQlwcm9k
dWN0UmVmR3JvdXAgPSAyRThEM0VGNTE5ODgxRDQzMDA0RjZDQzIgLyogUHJvZHVjdHMgKi87Ci0J
CQlwcm9qZWN0RGlyUGF0aCA9ICIiOwotCQkJcHJvamVjdFJvb3QgPSAiIjsKLQkJCXRhcmdldHMg
PSAoCi0JCQkJMkU4RDNFRjMxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLywK
LQkJCSk7Ci0JCX07Ci0vKiBFbmQgUEJYUHJvamVjdCBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBC
WFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjAxOTg4MUQ0MzAwNEY2Q0My
IC8qIFNvdXJjZXMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKLQkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCQkyRThEM0YwNjE5
ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIubSBpbiBTb3VyY2VzICovLAotCQkJ
CTJFOEQzRUY4MTk4ODFENDMwMDRGNkNDMiAvKiBtYWluLm0gaW4gU291cmNlcyAqLywKLQkJCQky
RThEM0YwMjE5ODgxRkQwMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkubSBpbiBTb3VyY2VzICovLAot
CQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9Owot
LyogRW5kIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gWENCdWls
ZENvbmZpZ3VyYXRpb24gc2VjdGlvbiAqLwotCQkyRThEM0VGOTE5ODgxRDQzMDA0RjZDQzIgLyog
RGVidWcgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25m
aWd1cmF0aW9uUmVmZXJlbmNlID0gMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVs
ZWFzZS54Y2NvbmZpZyAqLzsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQl9OwotCQkJbmFtZSA9
IERlYnVnOwotCQl9OwotCQkyRThEM0VGQTE5ODgxRDQzMDA0RjZDQzIgLyogUmVsZWFzZSAqLyA9
IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25S
ZWZlcmVuY2UgPSAyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29u
ZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsK
LQkJfTsKLQkJMkU4RDNFRkMxOTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICovID0gewotCQkJaXNh
ID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9
IDJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi87Ci0J
CQlidWlsZFNldHRpbmdzID0gewotCQkJCVBST0RVQ1RfTkFNRSA9ICIkKFRBUkdFVF9OQU1FKSI7
Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVnOwotCQl9OwotCQkyRThEM0VGRDE5ODgxRDQzMDA0RjZD
QzIgLyogUmVsZWFzZSAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJ
YmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyog
RGVidWdSZWxlYXNlLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlQUk9E
VUNUX05BTUUgPSAiJChUQVJHRVRfTkFNRSkiOwotCQkJfTsKLQkJCW5hbWUgPSBSZWxlYXNlOwot
CQl9OwotLyogRW5kIFhDQnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24gKi8KLQotLyogQmVnaW4g
WENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCi0JCTJFOEQzRUVGMTk4ODFENDMwMDRGNkND
MiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIkxheW91dFRlc3RS
ZWxheSIgKi8gPSB7Ci0JCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVpbGRDb25m
aWd1cmF0aW9ucyA9ICgKLQkJCQkyRThEM0VGOTE5ODgxRDQzMDA0RjZDQzIgLyogRGVidWcgKi8s
Ci0JCQkJMkU4RDNFRkExOTg4MUQ0MzAwNEY2Q0MyIC8qIFJlbGVhc2UgKi8sCi0JCQkpOwotCQkJ
ZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRp
b25OYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJMkU4RDNFRkIxOTg4MUQ0MzAwNEY2Q0MyIC8qIEJ1
aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJMYXlvdXRUZXN0UmVs
YXkiICovID0gewotCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKLQkJCWJ1aWxkQ29uZmln
dXJhdGlvbnMgPSAoCi0JCQkJMkU4RDNFRkMxOTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICovLAot
CQkJCTJFOEQzRUZEMTk4ODFENDMwMDRGNkNDMiAvKiBSZWxlYXNlICovLAotCQkJKTsKLQkJCWRl
ZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9u
TmFtZSA9IFJlbGVhc2U7Ci0JCX07Ci0vKiBFbmQgWENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9u
ICovCi0JfTsKLQlyb290T2JqZWN0ID0gMkU4RDNFRUMxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2pl
Y3Qgb2JqZWN0ICovOwotfQpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RS
ZWxheS54Y29kZXByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91
dFRlc3RSZWxheS54Y29kZXByb2oJKHJldmlzaW9uIDIwOTg4NikKKysrIFRvb2xzL0xheW91dFRl
c3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVwcm9qCShub25leGlzdGVudCkKClByb3BlcnR5
IGNoYW5nZXMgb246IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVw
cm9qCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmlnbm9yZQojIyAtMSwyICswLDAgIyMKLXByb2pl
Y3QueGN3b3Jrc3BhY2UKLXhjdXNlcmRhdGEKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9N
YWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvTWFrZWZpbGUJKHJl
dmlzaW9uIDIwOTg4NikKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9NYWtlZmlsZQkobm9uZXhp
c3RlbnQpCkBAIC0xLDYgKzAsMCBAQAotU0NSSVBUU19QQVRIID0gLi4vU2NyaXB0cwotCi1PVkVS
UklERV9BUkNIUyA9IGRlZmF1bHQKLU9WRVJSSURFX1NES1JPT1QgPSBkZWZhdWx0Ci0KLWluY2x1
ZGUgLi4vLi4vTWFrZWZpbGUuc2hhcmVkCkluZGV4OiBUb29scy9NYWtlZmlsZQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9NYWtlZmlsZQkocmV2aXNpb24gMjA5ODg2KQorKysgVG9vbHMvTWFrZWZpbGUJ
KHdvcmtpbmcgY29weSkKQEAgLTcsOSArNyw2IEBAIGlmbmVxICgsJChTREtST09UKSkKIAlpZm5l
cSAoLCQoZmluZHN0cmluZyBpcGhvbmUsJChTREtST09UKSkpCiAJCU1PRFVMRVMgKz0gTW9iaWxl
TWluaUJyb3dzZXIKIAllbmRpZgotCWlmZXEgKCwkKERPX05PVF9CVUlMRF9MQVlPVVRfVEVTVF9S
RUxBWSkpCi0JCU1PRFVMRVMgKz0gTGF5b3V0VGVzdFJlbGF5Ci0JZW5kaWYKIGVuZGlmCiAKIGFs
bDoKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJl
bmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA5ODg2KQorKysg
VG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksNyBAQAogCQkyQ0U4OEZBMjE3MTI0RDhD
MDA3MzRGQzAgLyogSmF2YVNjcmlwdFRocmVhZGluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQ0U4OEZBMTE3MTI0Q0VFMDA3MzRGQzAgLyogSmF2
YVNjcmlwdFRocmVhZGluZy5jcHAgKi87IH07CiAJCTJENDAzRjFCMTUwODcyMDkwMDUzNThEMiAv
KiBMYXlvdXRUZXN0SGVscGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRDQwM0VBMjE1MDg3MTQyMDA1MzU4RDIgLyogTGF5b3V0VGVzdEhlbHBlci5t
ICovOyB9OwogCQkzMTExN0IzRDE1RDlBNTZBMDAxNjNCQzggLyogTW9ja1dlYk5vdGlmaWNhdGlv
blByb3ZpZGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzExMTdCM0IxNUQ5QTU2QTAwMTYzQkM4IC8qIE1vY2tXZWJOb3RpZmljYXRpb25Qcm92aWRl
ci5tbSAqLzsgfTsKKwkJMzFCMDlDQzgxRTAzMzVGMTAwNkY0RTREIC8qIHVuaXhMb2dnaW5nUGlw
ZXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUIw
OUNDNzFFMDMzNUVCMDA2RjRFNEQgLyogdW5peExvZ2dpbmdQaXBlcy5tbSAqLzsgfTsKIAkJNDQw
NTkwNzExMjY4NDUzODAwQ0ZENDhEIC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9ydE1hYy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MDU5MDcwMTI2ODQ1
MzgwMENGRDQ4RCAvKiBXZWJBcmNoaXZlRHVtcFN1cHBvcnRNYWMubW0gKi87IH07CiAJCTQ0Mzc3
MzBFMTI1Q0JDMzYwMEFBRTAyQyAvKiBXZWJBcmNoaXZlRHVtcFN1cHBvcnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDRBOTk3ODMwRkNERTg2NDAw
NTgwRjEwIC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9ydC5jcHAgKi87IH07CiAJCTQ0NjRDQUJFMUMy
MEEwOEIwMEU1QkI1NSAvKiBEdW1wUmVuZGVyVHJlZUFwcE1haW4ubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDY0Q0FCRDFDMjBBMDcwMDBFNUJCNTUg
LyogRHVtcFJlbmRlclRyZWVBcHBNYWluLm1tICovOyB9OwpAQCAtMjkzLDYgKzI5NCw4IEBACiAJ
CTJENDAzRjE5MTUwODcxRjkwMDUzNThEMiAvKiBMYXlvdXRUZXN0SGVscGVyICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4
ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBMYXlvdXRUZXN0SGVscGVyOyBz
b3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQkzMTExN0IzQTE1RDlBNTZBMDAx
NjNCQzggLyogTW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IE1vY2tXZWJOb3RpZmljYXRpb25Qcm92aWRlci5oOyBwYXRoID0gbWFj
L01vY2tXZWJOb3RpZmljYXRpb25Qcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzMTExN0IzQjE1RDlBNTZBMDAxNjNCQzggLyogTW9ja1dlYk5vdGlmaWNhdGlvblByb3Zp
ZGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gTW9ja1dlYk5v
dGlmaWNhdGlvblByb3ZpZGVyLm1tOyBwYXRoID0gbWFjL01vY2tXZWJOb3RpZmljYXRpb25Qcm92
aWRlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzFCMDlDQzYxRTAzMzVFQjAw
NkY0RTREIC8qIHVuaXhMb2dnaW5nUGlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gdW5peExvZ2dpbmdQaXBlcy5oOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJlZC91bml4
TG9nZ2luZ1BpcGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxQjA5Q0M3MUUw
MzM1RUIwMDZGNEU0RCAvKiB1bml4TG9nZ2luZ1BpcGVzLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBuYW1lID0gdW5peExvZ2dpbmdQaXBlcy5tbTsgcGF0aCA9IC4uL1Rlc3RS
dW5uZXJTaGFyZWQvdW5peExvZ2dpbmdQaXBlcy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMzJBNzBBQUIwMzcwNUUxRjAwQzkxNzgzIC8qIER1bXBSZW5kZXJUcmVlUHJlZml4Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IER1bXBSZW5kZXJUcmVlUHJlZml4Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NUYwOTcxMERBQzNDQjYwMEM4QjRFNSAv
KiBXZWJLaXRXZWlnaHRXYXRjaGVyMTAwLnR0ZiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IG5hbWUgPSBXZWJLaXRXZWlnaHRXYXRjaGVyMTAw
LnR0ZjsgcGF0aCA9IGZvbnRzL1dlYktpdFdlaWdodFdhdGNoZXIxMDAudHRmOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzNzVGMDk3MjBEQUMzQ0I2MDBDOEI0RTUgLyogV2ViS2l0V2Vp
Z2h0V2F0Y2hlcjIwMC50dGYgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBmaWxlOyBuYW1lID0gV2ViS2l0V2VpZ2h0V2F0Y2hlcjIwMC50dGY7IHBhdGgg
PSBmb250cy9XZWJLaXRXZWlnaHRXYXRjaGVyMjAwLnR0Zjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTQ3Myw2ICs0NzYsNyBAQAogCQkwOEZCNzc5NEZFODQxNTVEQzAyQUFDMDcgLyog
RHVtcFJlbmRlclRyZWUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAorCQkJCTMxQjA5Q0M1MUUwMzM1RDAwMDZGNEU0RCAvKiBUZXN0UnVubmVyU2hhcmVkICovLAog
CQkJCTBGMThFNkYxMUQ2QjlDNjQwMDI3RTU0NyAvKiBEZXJpdmVkU291cmNlcy5tYWtlICovLAog
CQkJCTBGMThFNkU3MUQ2QjlCRjUwMDI3RTU0NyAvKiBVSVNjcmlwdENvbnRleHQgKi8sCiAJCQkJ
QTExNThENkExODkyN0NFMTAwODhDMTdCIC8qIGlvcyAqLywKQEAgLTcwMCw2ICs3MDQsMTUgQEAK
IAkJCW5hbWUgPSBMYXlvdXRUZXN0SGVscGVyOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
IAkJfTsKKwkJMzFCMDlDQzUxRTAzMzVEMDAwNkY0RTREIC8qIFRlc3RSdW5uZXJTaGFyZWQgKi8g
PSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTMxQjA5Q0M2MUUw
MzM1RUIwMDZGNEU0RCAvKiB1bml4TG9nZ2luZ1BpcGVzLmggKi8sCisJCQkJMzFCMDlDQzcxRTAz
MzVFQjAwNkY0RTREIC8qIHVuaXhMb2dnaW5nUGlwZXMubW0gKi8sCisJCQkpOworCQkJbmFtZSA9
IFRlc3RSdW5uZXJTaGFyZWQ7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk0
MTdEQTkxODEzNzM2NzREMDA3QzU3RkIgLyogV2ViQ29yZVRlc3RTdXBwb3J0ICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTExNTgsNiArMTE3MSw3IEBACiAJ
CQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCiAJCQkJNDQ2NENB
QkUxQzIwQTA4QjAwRTVCQjU1IC8qIER1bXBSZW5kZXJUcmVlQXBwTWFpbi5tbSBpbiBTb3VyY2Vz
ICovLAorCQkJCTMxQjA5Q0M4MUUwMzM1RjEwMDZGNEU0RCAvKiB1bml4TG9nZ2luZ1BpcGVzLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRl
clRyZWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5k
ZXJUcmVlLm1tCShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
RHVtcFJlbmRlclRyZWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwMyw2ICsxMDMsNyBAQAogI2lm
IFBMQVRGT1JNKElPUykKICNpbXBvcnQgIkR1bXBSZW5kZXJUcmVlQnJvd3NlclZpZXcuaCIKICNp
bXBvcnQgIlVJS2l0U1BJLmgiCisjaW1wb3J0ICJ1bml4TG9nZ2luZ1BpcGVzLmgiCiAjaW1wb3J0
IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ29yZUdyYXBoaWNz
U1BJLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0FLV2luZG93Lmg+CkBAIC0xMjcyLDE3ICsxMjczLDcg
QEAgdm9pZCB3cml0ZUNyYXNoZWRNZXNzYWdlT25GYXRhbEVycm9yKGludAogdm9pZCBkdW1wUmVu
ZGVyVHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdKQogewogI2lmIFBMQVRGT1JNKElP
UykKLSAgICBjb25zdCBjaGFyKiBpZGVudGlmaWVyID0gZ2V0ZW52KCJJUENfSURFTlRJRklFUiIp
OwotICAgIGNvbnN0IGNoYXIgKnN0ZGluUGF0aCA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAIi90bXAvJXNfSU4iLCBpZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsKLSAgICBjb25zdCBjaGFy
ICpzdGRvdXRQYXRoID0gW1tOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiL3RtcC8lc19PVVQi
LCBpZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsKLSAgICBjb25zdCBjaGFyICpzdGRlcnJQYXRoID0g
W1tOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiL3RtcC8lc19FUlJPUiIsIGlkZW50aWZpZXJd
IFVURjhTdHJpbmddOwotCi0gICAgaW50IGluZmQgPSBvcGVuKHN0ZGluUGF0aCwgT19SRFdSKTsK
LSAgICBkdXAyKGluZmQsIFNURElOX0ZJTEVOTyk7Ci0gICAgaW50IG91dGZkID0gb3BlbihzdGRv
dXRQYXRoLCBPX1JEV1IpOwotICAgIGR1cDIob3V0ZmQsIFNURE9VVF9GSUxFTk8pOwotICAgIGlu
dCBlcnJmZCA9IG9wZW4oc3RkZXJyUGF0aCwgT19SRFdSIHwgT19OT05CTE9DSyk7Ci0gICAgZHVw
MihlcnJmZCwgU1RERVJSX0ZJTEVOTyk7CisgICAgV1RSOjpzZXR1cFVuaXhMb2dnaW5nUGlwZXMo
KTsKICNlbmRpZgogCiAgICAgc2lnbmFsKFNJR0lMTCwgJndyaXRlQ3Jhc2hlZE1lc3NhZ2VPbkZh
dGFsRXJyb3IpOwpAQCAtMTM0Myw5ICsxMzM0LDcgQEAgdm9pZCBkdW1wUmVuZGVyVHJlZShpbnQg
YXJnYywgY29uc3QgY2hhcgogICAgIH0KIAogI2lmIFBMQVRGT1JNKElPUykKLSAgICBjbG9zZShp
bmZkKTsKLSAgICBjbG9zZShvdXRmZCk7Ci0gICAgY2xvc2UoZXJyZmQpOworICAgIFdUUjo6dGVh
cmRvd25Vbml4TG9nZ2luZ1BpcGVzKCk7CiAjZW5kaWYKIH0KIApJbmRleDogVG9vbHMvTGF5b3V0
VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcJKHJldmlzaW9u
IDIwOTg4NikKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9CYXNlLnhj
Y29uZmlnCShub25leGlzdGVudCkKQEAgLTEsNjggKzAsMCBAQAotLy8gQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vCi0vLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotLy8gYXJlIG1ldDoKLS8vIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotLy8gICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS8vCi0vLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLS8v
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0vLyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLS8vIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0vLyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLS8vIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLS8vIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotLy8gUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotLy8gT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlICIuLi8uLi8uLi8uLi9JbnRlcm5hbC9Db25maWd1
cmF0aW9ucy9IYXZlSW50ZXJuYWxTREsueGNjb25maWciCi0KLVVTRV9JTlRFUk5BTF9TREsgPSAk
KFVTRV9JTlRFUk5BTF9TREtfJChDT05GSUdVUkFUSU9OKSk7Ci1VU0VfSU5URVJOQUxfU0RLX1By
b2R1Y3Rpb24gPSBZRVM7Ci1VU0VfSU5URVJOQUxfU0RLX0RlYnVnID0gJChIQVZFX0lOVEVSTkFM
X1NESyk7Ci1VU0VfSU5URVJOQUxfU0RLX1JlbGVhc2UgPSAkKEhBVkVfSU5URVJOQUxfU0RLKTsK
LQotQ0xBTkdfQ1hYX0xBTkdVQUdFX1NUQU5EQVJEID0gZ251KysweDsKLUNMQU5HX0VOQUJMRV9P
QkpDX0FSQyA9IFlFUzsKLUNMQU5HX1dBUk5fQ1hYMFhfRVhURU5TSU9OUyA9IE5POwotSEVBREVS
X1NFQVJDSF9QQVRIUyA9ICQoQlVJTFRfUFJPRFVDVFNfRElSKS91c3IvbG9jYWwvaW5jbHVkZSAk
KFdFQkNPUkVfUFJJVkFURV9IRUFERVJTX0RJUikvRm9yd2FyZGluZ0hlYWRlcnMgJChTUkNST09U
KS8uLi8uLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1ICQoTkVYVF9ST09UKS91c3IvbG9jYWwv
aW5jbHVkZS9XZWJDb3JlVGVzdFN1cHBvcnQ7Ci1HQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05T
ID0gJChERUJVR19ERUZJTkVTKSBFTkFCTEVfREFTSEJPQVJEX1NVUFBPUlQ7Ci1ERUJVR19JTkZP
Uk1BVElPTl9GT1JNQVQgPSBkd2FyZi13aXRoLWRzeW07Ci1QUkVCSU5ESU5HID0gTk8KLUdDQ19D
X0xBTkdVQUdFX1NUQU5EQVJEID0gZ251OTkKLUdDQ19FTkFCTEVfQ1BQX0VYQ0VQVElPTlMgPSBO
TzsKLUdDQ19FTkFCTEVfQ1BQX1JUVEkgPSBOTzsKLUdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFE
RVIgPSBZRVMKLUdDQ19UUkVBVF9XQVJOSU5HU19BU19FUlJPUlMgPSBZRVMKLUdDQ19WRVJTSU9O
ID0gY29tLmFwcGxlLmNvbXBpbGVycy5sbHZtLmNsYW5nLjFfMDsKLUdDQ19XQVJOX0FCT1VUX0RF
UFJFQ0FURURfRlVOQ1RJT05TID0gTk8KLUdDQ19XQVJOX1VOVVNFRF9GVU5DVElPTiA9IFlFUwot
R0NDX1dBUk5fVU5VU0VEX1ZBUklBQkxFID0gWUVTCi1HQ0NfV0FSTl82NF9UT18zMl9CSVRfQ09O
VkVSU0lPTlthcmNoPXg4Nl82NF0gPSBOTzsKLVdBUk5JTkdfQ0ZMQUdTID0gLVdhbGwgLVcgLVdu
by11bnVzZWQtcGFyYW1ldGVyIC1XdW5kZWYKLQotREVCVUdfREVGSU5FU19kZWJ1ZyA9IDsKLURF
QlVHX0RFRklORVNfbm9ybWFsID0gTkRFQlVHOwotREVCVUdfREVGSU5FUyA9ICQoREVCVUdfREVG
SU5FU18kKENVUlJFTlRfVkFSSUFOVCkpOwotCi1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpP
UiA9ICQoVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1IkKE1BQ09TWF9ERVBMT1lNRU5UX1RB
UkdFVDpzdWZmaXg6aWRlbnRpZmllcikpOwotVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1Jf
MTAgPSAxMDEwMDA7Ci1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUl8xMSA9IDEwMTEwMDsK
LVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SXzEyID0gMTAxMjAwOwotVEFSR0VUX01BQ19P
U19YX1ZFUlNJT05fTUFKT1JfMTMgPSAxMDEzMDA7Ci0KLVNES1JPT1QgPSBtYWNvc3guaW50ZXJu
YWw7Ci0KLVNVUFBPUlRFRF9QTEFURk9STVMgPSBtYWNvc3g7Ci0KLVRPT0xDSEFJTlMgPSBkZWZh
dWx0OwotCi1PVEhFUl9DRkxBR1MgPSAkKEFTQU5fT1RIRVJfQ0ZMQUdTKTsKLU9USEVSX0NQTFVT
UExVU0ZMQUdTID0gJChBU0FOX09USEVSX0NQTFVTUExVU0ZMQUdTKTsKLU9USEVSX0xERkxBR1Mg
PSAkKEFTQU5fT1RIRVJfTERGTEFHUyk7CkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29u
ZmlndXJhdGlvbnMvRGVidWdSZWxlYXNlLnhjY29uZmlnCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xh
eW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25maWcJKHJldmlz
aW9uIDIwOTg4NikKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9EZWJ1
Z1JlbGVhc2UueGNjb25maWcJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MiArMCwwIEBACi0vLyBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0vLyBhcmUgbWV0OgotLy8gMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLS8vIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0vLyAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
Ly8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotLy8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLS8vIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotLy8gUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLS8vIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
Ly8gRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotLy8gUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0vLyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0vLyBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgIkJhc2UueGNjb25maWciCi0K
LUFSQ0hTID0gJChBUkNIU19TVEFOREFSRF82NF9CSVQpOwotCi1UQVJHRVRfTUFDX09TX1hfVkVS
U0lPTl9NQUpPUiA9ICQoTUFDX09TX1hfVkVSU0lPTl9NQUpPUik7Ci0KLU1BQ09TWF9ERVBMT1lN
RU5UX1RBUkdFVCA9ICQoTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXyQoVEFSR0VUX01BQ19PU19Y
X1ZFUlNJT05fTUFKT1IpKQotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEwMTAwMCA9IDEwLjEw
OwotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEwMTEwMCA9IDEwLjExOwotTUFDT1NYX0RFUExP
WU1FTlRfVEFSR0VUXzEwMTIwMCA9IDEwLjEyOwotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEw
MTMwMCA9IDEwLjEzOwotCi1GUkFNRVdPUktfU0VBUkNIX1BBVEhTID0gJChERVZFTE9QRVJfRElS
KS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzOwotTERfUlVOUEFUSF9TRUFSQ0hfUEFUSFMgPSAk
KERFVkVMT1BFUl9ESVIpL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3M7Ci1PVEhFUl9MREZMQUdT
ID0gLWZyYW1ld29yayBDb3JlU2ltdWxhdG9yIC1mcmFtZXdvcmsgQXBwS2l0OwotCi1TREtST09U
ID0gJChTREtST09UX21hY29zeF8kKFVTRV9JTlRFUk5BTF9TREspKTsKLVNES1JPT1RfbWFjb3N4
XyA9IG1hY29zeDsKLVNES1JPT1RfbWFjb3N4X1lFUyA9IG1hY29zeC5pbnRlcm5hbDsKSW5kZXg6
IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvQ29yZVNpbXVsYXRvclNQSS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvQ29y
ZVNpbXVsYXRvclNQSS5oCShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29scy9MYXlvdXRUZXN0UmVs
YXkvTGF5b3V0VGVzdFJlbGF5L0NvcmVTaW11bGF0b3JTUEkuaAkobm9uZXhpc3RlbnQpCkBAIC0x
LDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgX19oYXNfaW5jbHVkZSg8Q29yZVNp
bXVsYXRvci9Db3JlU2ltdWxhdG9yLmg+KQotCi0vKiBGSVhNRTogUmVtb3ZlIHRoZSBiZWxvdyAj
ZGVmaW5lIG9uY2Ugd2UgcmVxdWlyZSBYY29kZSA3LjMgd2l0aCBpT1MgOS4zIFNESyBvciBuZXdl
ci4gKi8KLSNkZWZpbmUgX19jb3Jlc2ltX3VuYXZhaWxhYmxlX21zZyhtc2cpCi0jaW1wb3J0IDxD
b3JlU2ltdWxhdG9yL0NvcmVTaW11bGF0b3IuaD4KLQotLyogRklYTUU6IEFsd2F5cyB1c2UgU2lt
U2VydmljZUNvbnRleHQgb25jZSB3ZSByZXF1aXJlIFhjb2RlIDcuMyB3aXRoIGlPUyA5LjMgU0RL
IG9yIG5ld2VyLiAqLwotI2RlZmluZSBVU0VfU0lNX1NFUlZJQ0VfQ09OVEVYVCBkZWZpbmVkKENP
UkVTSU1fQVBJX01BWF9BTExPV0VEKQotCi0jZWxzZQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0Zv
dW5kYXRpb24uaD4KLQotI2RlZmluZSBVU0VfU0lNX1NFUlZJQ0VfQ09OVEVYVCAxCi0KLSNkZWZp
bmUga1NpbURldmljZUxhdW5jaEFwcGxpY2F0aW9uQXJndW1lbnRzIEAiYXJndW1lbnRzIgotI2Rl
ZmluZSBrU2ltRGV2aWNlTGF1bmNoQXBwbGljYXRpb25FbnZpcm9ubWVudCBAImVudmlyb25tZW50
IgotCi1AaW50ZXJmYWNlIFNpbURldmljZSA6IE5TT2JqZWN0Ci0tIChCT09MKWluc3RhbGxBcHBs
aWNhdGlvbjooTlNVUkwgKilpbnN0YWxsVVJMIHdpdGhPcHRpb25zOihOU0RpY3Rpb25hcnkgKilv
cHRpb25zIGVycm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci0tIChwaWRf
dClsYXVuY2hBcHBsaWNhdGlvbldpdGhJRDooTlNTdHJpbmcgKilidW5kbGVJRCBvcHRpb25zOihO
U0RpY3Rpb25hcnkgKilvcHRpb25zIGVycm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICop
ZXJyb3I7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgU2ltRGV2aWNlU2V0IDogTlNPYmplY3QKLUBwcm9w
ZXJ0eSAocmVhZG9ubHksIGNvcHkpIE5TRGljdGlvbmFyeSAqZGV2aWNlc0J5VURJRDsKLUBlbmQK
LQotQGludGVyZmFjZSBTaW1TZXJ2aWNlQ29udGV4dCA6IE5TT2JqZWN0Ci0rKFNpbVNlcnZpY2VD
b250ZXh0ICopc2hhcmVkU2VydmljZUNvbnRleHRGb3JEZXZlbG9wZXJEaXI6KE5TU3RyaW5nICop
ZGV2ZWxvcGVyRGlyIGVycm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci0t
KFNpbURldmljZVNldCAqKWRlZmF1bHREZXZpY2VTZXRXaXRoRXJyb3I6KE5TRXJyb3IgKiBfX2F1
dG9yZWxlYXNpbmcgKillcnJvcjsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRU
ZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5oCShyZXZpc2lv
biAyMDk4ODYpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlw
ZVJlbGF5LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBMVFBpcGVSZWxheV9oCi0jZGVmaW5lIExUUGlwZVJlbGF5X2gKLQotI2ltcG9ydCAiTFRS
ZWxheS5oIgotCi1AaW50ZXJmYWNlIExUUGlwZVJlbGF5IDogTlNPYmplY3QgPExUUmVsYXk+Ci1A
cHJvcGVydHkgKHdlYWspIGlkPExUUmVsYXlEZWxlZ2F0ZT4gcmVsYXlEZWxlZ2F0ZTsKLS0gKGlk
KWluaXRXaXRoUHJlZml4OihOU1N0cmluZyAqKXByZWZpeDsKLUBlbmQKLQotI2VuZGlmCkluZGV4
OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVS
ZWxheS5tCShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0
VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0JKG5vbmV4aXN0ZW50KQpAQCAtMSwxNTggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbXBvcnQgIkxUUGlwZVJlbGF5LmgiCi0KLSNpbXBvcnQgPEZvdW5kYXRp
b24vRm91bmRhdGlvbi5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3lzL3R5
cGVzLmg+Ci0KLUBpbnRlcmZhY2UgTFRQaXBlUmVsYXkgKCkKLUBwcm9wZXJ0eSAocmVhZG9ubHks
IHN0cm9uZykgTlNTdHJpbmcgKmZpZm9QcmVmaXg7Ci1AcHJvcGVydHkgKHN0cm9uZykgTlNPdXRw
dXRTdHJlYW0gKnN0YW5kYXJkSW5wdXRQaXBlOwotQHByb3BlcnR5IChzdHJvbmcpIE5TSW5wdXRT
dHJlYW0gKnN0YW5kYXJkT3V0cHV0UGlwZTsKLUBwcm9wZXJ0eSAoc3Ryb25nKSBOU0lucHV0U3Ry
ZWFtICpzdGFuZGFyZEVycm9yUGlwZTsKLQotLSAodm9pZCljcmVhdGVGSUZPczsKLS0gKHZvaWQp
ZGVzdHJveUZJRk9zOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gTFRQaXBlUmVsYXkKLQotLSAo
TlNTdHJpbmcgKilpblBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdC
eUFwcGVuZGluZ1N0cmluZzpAIl9JTiJdOwotfQotCi0tIChOU1N0cmluZyAqKW91dFBpcGVQYXRo
Ci17Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9P
VVQiXTsKLX0KLQotLSAoTlNTdHJpbmcgKillcnJvclBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtf
Zmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9FUlJPUiJdOwotfQotCi0tIChO
U091dHB1dFN0cmVhbSAqKSBvdXRwdXRTdHJlYW0KLXsKLSAgICByZXR1cm4gX3N0YW5kYXJkSW5w
dXRQaXBlOwotfQotCi0tIChpZClpbml0V2l0aFByZWZpeDooTlNTdHJpbmcgKilwcmVmaXgKLXsK
LSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKSB7Ci0gICAgICAgIF9maWZvUHJlZml4ID0g
cHJlZml4OwotICAgICAgICBbc2VsZiBkZXN0cm95RklGT3NdOwotICAgIH0KLSAgICByZXR1cm4g
c2VsZjsKLX0KLQotLSAodm9pZClzZXR1cAotewotICAgIFtzZWxmIGRlc3Ryb3lGSUZPc107Ci0g
ICAgW3NlbGYgY3JlYXRlRklGT3NdOwotfQotCi0tICh2b2lkKXRlYXJEb3duCi17Ci0gICAgW3Nl
bGYgZGVzdHJveUZJRk9zXTsKLX0KLQotLSh2b2lkKSBjb25uZWN0Ci17Ci0gICAgX3N0YW5kYXJk
SW5wdXRQaXBlID0gW05TT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbVRvRmlsZUF0UGF0aDpbc2Vs
ZiBpblBpcGVQYXRoXSBhcHBlbmQ6WUVTXTsKLSAgICBfc3RhbmRhcmRPdXRwdXRQaXBlID0gW05T
SW5wdXRTdHJlYW0gaW5wdXRTdHJlYW1XaXRoRmlsZUF0UGF0aDpbc2VsZiBvdXRQaXBlUGF0aF1d
OwotICAgIF9zdGFuZGFyZEVycm9yUGlwZSA9IFtOU0lucHV0U3RyZWFtIGlucHV0U3RyZWFtV2l0
aEZpbGVBdFBhdGg6W3NlbGYgZXJyb3JQaXBlUGF0aF1dOwotCi0gICAgW1tzZWxmIHN0YW5kYXJk
SW5wdXRQaXBlXSBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRQ
aXBlXSBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRFcnJvclBpcGVdIHNl
dERlbGVnYXRlOnNlbGZdOwotCi0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gc2NoZWR1
bGVJblJ1bkxvb3A6W05TUnVuTG9vcCBtYWluUnVuTG9vcF0gZm9yTW9kZTpOU0RlZmF1bHRSdW5M
b29wTW9kZV07Ci0gICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JQaXBlXSBzY2hlZHVsZUluUnVuTG9v
cDpbTlNSdW5Mb29wIG1haW5SdW5Mb29wXSBmb3JNb2RlOk5TRGVmYXVsdFJ1bkxvb3BNb2RlXTsK
LQotICAgIFtbc2VsZiBzdGFuZGFyZElucHV0UGlwZV0gb3Blbl07Ci0gICAgW1tzZWxmIHN0YW5k
YXJkT3V0cHV0UGlwZV0gb3Blbl07Ci0gICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JQaXBlXSBvcGVu
XTsKLQotICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRDb25uZWN0XTsKLX0KLQotLSAodm9p
ZClkaXNjb25uZWN0Ci17Ci0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gY2xvc2VdOwot
ICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yUGlwZV0gY2xvc2VdOwotICAgIFtbc2VsZiBzdGFuZGFy
ZElucHV0UGlwZV0gY2xvc2VdOwotICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWREaXNjb25u
ZWN0XTsKLX0KLQotLSAodm9pZCljcmVhdGVGSUZPcwotewotICAgIG1rZmlmbyhbW3NlbGYgaW5Q
aXBlUGF0aF0gVVRGOFN0cmluZ10sIDA2NjYpOwotICAgIG1rZmlmbyhbW3NlbGYgb3V0UGlwZVBh
dGhdIFVURjhTdHJpbmddLCAwNjY2KTsKLSAgICBta2ZpZm8oW1tzZWxmIGVycm9yUGlwZVBhdGhd
IFVURjhTdHJpbmddLCAwNjY2KTsKLX0KLQotLSAodm9pZClkZXN0cm95RklGT3MKLXsKLSAgICB1
bmxpbmsoW1tzZWxmIGluUGlwZVBhdGhdIFVURjhTdHJpbmddKTsKLSAgICB1bmxpbmsoW1tzZWxm
IG91dFBpcGVQYXRoXSBVVEY4U3RyaW5nXSk7Ci0gICAgdW5saW5rKFtbc2VsZiBlcnJvclBpcGVQ
YXRoXSBVVEY4U3RyaW5nXSk7Ci19Ci0KLS0gKHZvaWQpIHJlbGF5U3RyZWFtOihOU0lucHV0U3Ry
ZWFtICopc3RyZWFtCi17Ci0gICAgdWludDhfdCBieXRlc1sxMDI0XTsKLSAgICBOU0ludGVnZXIg
Ynl0ZXNSZWFkID0gW3N0cmVhbSByZWFkOmJ5dGVzIG1heExlbmd0aDoxMDI0XTsKLSAgICBOU0Rh
dGEgKmRhdGEgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6Ynl0ZXMgbGVuZ3RoOmJ5dGVzUmVhZF07
Ci0KLSAgICBpZiAoc3RyZWFtID09IFtzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0pCi0gICAgICAg
IFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRSZWNlaXZlU3Rkb3V0RGF0YTpkYXRhXTsKLSAgICBl
bHNlCi0gICAgICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRSZWNlaXZlU3RkZXJyRGF0YTpk
YXRhXTsKLX0KLQotLSAodm9pZClzdHJlYW06KE5TU3RyZWFtICopYVN0cmVhbSBoYW5kbGVFdmVu
dDooTlNTdHJlYW1FdmVudClldmVudENvZGUKLXsKLSAgICBzd2l0Y2ggKGV2ZW50Q29kZSkgewot
ICAgIGNhc2UgTlNTdHJlYW1FdmVudE5vbmU6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlNT
dHJlYW1FdmVudEhhc0J5dGVzQXZhaWxhYmxlOgotICAgICAgICBbc2VsZiByZWxheVN0cmVhbToo
TlNJbnB1dFN0cmVhbSAqKWFTdHJlYW1dOwotICAgIGNhc2UgTlNTdHJlYW1FdmVudEhhc1NwYWNl
QXZhaWxhYmxlOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnRPcGVuQ29t
cGxldGVkOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnRFbmRFbmNvdW50
ZXJlZDoKLSAgICAgICAgW1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZENyYXNoV2l0aE1lc3NhZ2U6
bmlsXTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOU1N0cmVhbUV2ZW50RXJyb3JPY2N1cnJl
ZDoKLSAgICAgICAgW1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZENyYXNoV2l0aE1lc3NhZ2U6W1th
U3RyZWFtIHN0cmVhbUVycm9yXSBkZXNjcmlwdGlvbl1dOwotICAgICAgICBicmVhazsKLSAgICB9
Ci19Ci0KLUBlbmQKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkv
TFRSZWxheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0
UmVsYXkvTFRSZWxheS5oCShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29scy9MYXlvdXRUZXN0UmVs
YXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXkuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQ4ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIExUUmVsYXlfaAotI2RlZmluZSBMVFJlbGF5X2gKLQot
I2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLUBwcm90b2NvbCBMVFJlbGF5RGVs
ZWdhdGUgPE5TT2JqZWN0PgotLSAodm9pZClkaWRDb25uZWN0OwotLSAodm9pZClkaWREaXNjb25u
ZWN0OwotLSAodm9pZClkaWRDcmFzaFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2U7Ci0t
ICh2b2lkKWRpZFJlY2VpdmVTdGRvdXREYXRhOihOU0RhdGEgKilkYXRhOwotLSAodm9pZClkaWRS
ZWNlaXZlU3RkZXJyRGF0YTooTlNEYXRhICopZGF0YTsKLUBlbmQKLQotQHByb3RvY29sIExUUmVs
YXkgPE5TT2JqZWN0LCBOU1N0cmVhbURlbGVnYXRlPgotLSAodm9pZClzZXR1cDsKLS0gKHZvaWQp
dGVhckRvd247Ci0tICh2b2lkKWNvbm5lY3Q7Ci0tICh2b2lkKWRpc2Nvbm5lY3Q7Ci1AcHJvcGVy
dHkgKHdlYWspIGlkPExUUmVsYXlEZWxlZ2F0ZT4gcmVsYXlEZWxlZ2F0ZTsKLUBwcm9wZXJ0eSAo
cmVhZG9ubHksIHN0cm9uZykgTlNPdXRwdXRTdHJlYW0gKm91dHB1dFN0cmVhbTsKLUBlbmQKLQot
I2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVs
YXlDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91
dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29s
cy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLmgJKG5v
bmV4aXN0ZW50KQpAQCAtMSw0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgTFRSZWxheUNv
bnRyb2xsZXJfaAotI2RlZmluZSBMVFJlbGF5Q29udHJvbGxlcl9oCi0KLSNpbXBvcnQgIkxUUmVs
YXkuaCIKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLUBjbGFzcyBTaW1E
ZXZpY2U7Ci0KLUBpbnRlcmZhY2UgTFRSZWxheUNvbnRyb2xsZXIgOiBOU09iamVjdCA8TFRSZWxh
eURlbGVnYXRlPgotLSAoaWQpaW5pdFdpdGhEZXZpY2U6KFNpbURldmljZSAqKWRldmljZSBwcm9k
dWN0RGlyOihOU1N0cmluZyAqKXByb2R1Y3REaXIgYXBwUGF0aDooTlNTdHJpbmcgKilhcHBQYXRo
IGRldmljZVVESUQ6KE5TVVVJRCAqKXVkaWQgZHVtcFRvb2xBcmd1bWVudHM6KE5TQXJyYXkgKilh
cmd1bWVudHM7Ci0tICh2b2lkKXN0YXJ0OwotLSAodm9pZClmaW5pc2g7Ci1AZW5kCi0KLSNlbmRp
ZgpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29u
dHJvbGxlci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0
UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIubQkocmV2aXNpb24gMjA5ODg2KQorKysgVG9vbHMvTGF5
b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5tCShub25leGlz
dGVudCkKQEAgLTEsMjcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJMVFJlbGF5Q29u
dHJvbGxlci5oIgotCi0jaW1wb3J0ICJDb3JlU2ltdWxhdG9yU1BJLmgiCi0jaW1wb3J0ICJMVFBp
cGVSZWxheS5oIgotI2ltcG9ydCA8QXBwS2l0L0FwcEtpdC5oPgotI2ltcG9ydCA8Y3J0X2V4dGVy
bnMuaD4KLQotQGludGVyZmFjZSBMVFJlbGF5Q29udHJvbGxlciAoKQotQHByb3BlcnR5IChyZWFk
b25seSwgc3Ryb25nKSBkaXNwYXRjaF9zb3VyY2VfdCBzdGFuZGFyZElucHV0RGlzcGF0Y2hTb3Vy
Y2U7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TRmlsZUhhbmRsZSAqc3RhbmRhcmRP
dXRwdXQ7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TRmlsZUhhbmRsZSAqc3RhbmRh
cmRFcnJvcjsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKmlwY0lkZW50
aWZpZXI7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TU3RyaW5nICphcHBCdW5kbGVJ
ZGVudGlmaWVyOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU1N0cmluZyAqYXBwUGF0
aDsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNVVUlEICpkZXZpY2VVRElEOwotQHBy
b3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU0FycmF5ICpkdW1wVG9vbEFyZ3VtZW50czsKLUBw
cm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKnByb2R1Y3REaXI7Ci1AcHJvcGVy
dHkgKHN0cm9uZykgU2ltRGV2aWNlICpkZXZpY2U7Ci1AcHJvcGVydHkgKHN0cm9uZykgaWQ8TFRS
ZWxheT4gcmVsYXk7Ci1AcHJvcGVydHkgcGlkX3QgcGlkOwotQHByb3BlcnR5IChzdHJvbmcpIGRp
c3BhdGNoX3NvdXJjZV90IGFwcERpc3BhdGNoU291cmNlOwotQGVuZAotCi1AaW1wbGVtZW50YXRp
b24gTFRSZWxheUNvbnRyb2xsZXIKLQotLSAoaWQpaW5pdFdpdGhEZXZpY2U6KFNpbURldmljZSAq
KWRldmljZSBwcm9kdWN0RGlyOihOU1N0cmluZyAqKXByb2R1Y3REaXIgYXBwUGF0aDooTlNTdHJp
bmcgKilhcHBQYXRoIGRldmljZVVESUQ6KE5TVVVJRCAqKXVkaWQgZHVtcFRvb2xBcmd1bWVudHM6
KE5TQXJyYXkgKilhcmd1bWVudHMKLXsKLSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKSB7
Ci0gICAgICAgIF9kZXZpY2UgPSBkZXZpY2U7Ci0gICAgICAgIF9wcm9kdWN0RGlyID0gcHJvZHVj
dERpcjsKLSAgICAgICAgX2FwcFBhdGggPSBhcHBQYXRoOwotICAgICAgICBfYXBwQnVuZGxlSWRl
bnRpZmllciA9IFtbTlNCdW5kbGUgYnVuZGxlV2l0aFBhdGg6YXBwUGF0aF0gYnVuZGxlSWRlbnRp
Zmllcl07Ci0gICAgICAgIF9kZXZpY2VVRElEID0gdWRpZDsKLSAgICAgICAgX2R1bXBUb29sQXJn
dW1lbnRzID0gYXJndW1lbnRzOwotICAgICAgICBfc3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNl
ID0gZGlzcGF0Y2hfc291cmNlX2NyZWF0ZShESVNQQVRDSF9TT1VSQ0VfVFlQRV9SRUFELCBTVERJ
Tl9GSUxFTk8sIDAsIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCkpOwotICAgICAgICBfc3RhbmRh
cmRPdXRwdXQgPSBbTlNGaWxlSGFuZGxlIGZpbGVIYW5kbGVXaXRoU3RhbmRhcmRPdXRwdXRdOwot
ICAgICAgICBfc3RhbmRhcmRFcnJvciA9IFtOU0ZpbGVIYW5kbGUgZmlsZUhhbmRsZVdpdGhTdGFu
ZGFyZEVycm9yXTsKLQotICAgICAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2V2ZW50X2hhbmRsZXIo
X3N0YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJjZSwgXnsKLSAgICAgICAgICAgIHVpbnQ4X3QgYnVm
ZmVyWzEwMjRdOwotICAgICAgICAgICAgc3NpemVfdCBsZW4gPSByZWFkKFNURElOX0ZJTEVOTywg
YnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7Ci0gICAgICAgICAgICBpZiAobGVuID4gMCkgewotICAg
ICAgICAgICAgICAgIEB0cnkgewotICAgICAgICAgICAgICAgICAgICBbW1tzZWxmIHJlbGF5XSBv
dXRwdXRTdHJlYW1dIHdyaXRlOmJ1ZmZlciBtYXhMZW5ndGg6bGVuXTsKLSAgICAgICAgICAgICAg
ICB9IEBjYXRjaCAoTlNFeGNlcHRpb24gKmUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQnJv
a2VuIHBpcGUgLSB0aGUgZHVtcCB0b29sIGNyYXNoZWQuIFRpbWUgdG8gZGllLgotICAgICAgICAg
ICAgICAgICAgICBbc2VsZiBkaWRDcmFzaFdpdGhNZXNzYWdlOm5pbF07Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBFT0YgUmVjZWl2
ZWQgb24gdGhlIHJlbGF5J3Mgc3RhbmRhcmQgaW5wdXQuCi0gICAgICAgICAgICAgICAgW3NlbGYg
ZmluaXNoXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgX3JlbGF5ID0g
W1tMVFBpcGVSZWxheSBhbGxvY10gaW5pdFdpdGhQcmVmaXg6W0AiL3RtcCIgc3RyaW5nQnlBcHBl
bmRpbmdQYXRoQ29tcG9uZW50OnNlbGYuaXBjSWRlbnRpZmllcl1dOwotICAgICAgICBbX3JlbGF5
IHNldFJlbGF5RGVsZWdhdGU6c2VsZl07Ci0gICAgfQotICAgIHJldHVybiBzZWxmOwotfQotCi0t
IChOU1N0cmluZyAqKWlwY0lkZW50aWZpZXIKLXsKLSAgICByZXR1cm4gW05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6QCIlQC0lQCIsIHNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciwgc2VsZi5kZXZp
Y2VVRElELlVVSURTdHJpbmddOwotfQotCi0tIChOU1N0cmluZyAqKXByb2Nlc3NOYW1lCi17Ci0g
ICAgcmV0dXJuIFtzZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIgY29tcG9uZW50c1NlcGFyYXRlZEJ5
U3RyaW5nOkAiLiJdLmxhc3RPYmplY3Q7Ci19Ci0KLS0gKHZvaWQpZGlkUmVjZWl2ZVN0ZG91dERh
dGE6KE5TRGF0YSAqKWRhdGEKLXsKLSAgICBAdHJ5IHsKLSAgICAgICAgW1tzZWxmIHN0YW5kYXJk
T3V0cHV0XSB3cml0ZURhdGE6ZGF0YV07Ci0gICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNl
cHRpb24pIHsKLSAgICAgICAgLy8gTlNGaWxlSGFuZGxlT3BlcmF0aW9uRXhjZXB0aW9uCi0gICAg
ICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhlIHRlc3QgaGFybmVzcyBzdG9wcGVkIGxpc3RlbmluZyB0
byB1cywKLSAgICAgICAgLy8gcHJvYmFibHkgYmVjYXVzZSB3ZSB0aW1lZCBvdXQgb3IgYSBydW4g
d2FzIGNhbmNlbGVkLgotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotfQotCi0t
ICh2b2lkKWRpZFJlY2VpdmVTdGRlcnJEYXRhOihOU0RhdGEgKilkYXRhCi17Ci0gICAgQHRyeSB7
Ci0gICAgICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSB3cml0ZURhdGE6ZGF0YV07Ci0gICAgfSBA
Y2F0Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRpb24pIHsKLSAgICAgICAgLy8gTlNGaWxlSGFuZGxl
T3BlcmF0aW9uRXhjZXB0aW9uCi0gICAgICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhlIHRlc3QgaGFy
bmVzcyBzdG9wcGVkIGxpc3RlbmluZyB0byB1cywKLSAgICAgICAgLy8gcHJvYmFibHkgYmVjYXVz
ZSB3ZSB0aW1lZCBvdXQgb3IgYSBydW4gd2FzIGNhbmNlbGVkLgotICAgICAgICBleGl0KEVYSVRf
RkFJTFVSRSk7Ci0gICAgfQotfQotCi0tICh2b2lkKWRpZERpc2Nvbm5lY3QKLXsKLSAgICBkaXNw
YXRjaF9zdXNwZW5kKFtzZWxmIHN0YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJjZV0pOwotfQotCi0t
ICh2b2lkKWRpZENvbm5lY3QKLXsKLSAgICBkaXNwYXRjaF9yZXN1bWUoW3NlbGYgc3RhbmRhcmRJ
bnB1dERpc3BhdGNoU291cmNlXSk7Ci19Ci0KLS0gKHZvaWQpZGlkQ3Jhc2hXaXRoTWVzc2FnZToo
TlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgW1tzZWxmIHJlbGF5XSBkaXNjb25uZWN0XTsKLSAg
ICBOU1N0cmluZyAqY3Jhc2hNZXNzYWdlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJc
biNDUkFTSEVEIC0gJUAgKHBpZCAlZClcbiIsIFtzZWxmIHByb2Nlc3NOYW1lXSwgW3NlbGYgcGlk
XV07Ci0KLSAgICBpZiAobWVzc2FnZSkKLSAgICAgICAgY3Jhc2hNZXNzYWdlID0gW2NyYXNoTWVz
c2FnZSBzdHJpbmdCeUFwcGVuZGluZ0Zvcm1hdDpAIiVAXG4iLCBtZXNzYWdlXTsKLQotICAgIFtb
c2VsZiBzdGFuZGFyZEVycm9yXSB3cml0ZURhdGE6W2NyYXNoTWVzc2FnZSBkYXRhVXNpbmdFbmNv
ZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ11dOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSBj
bG9zZUZpbGVdOwotICAgIFtbc2VsZiBzdGFuZGFyZE91dHB1dF0gY2xvc2VGaWxlXTsKLSAgICBl
eGl0KEVYSVRfRkFJTFVSRSk7Ci19Ci0KLS0gKHZvaWQpaW5zdGFsbEFwcAotewotICAgIE5TRGlj
dGlvbmFyeSAqaW5zdGFsbE9wdGlvbnMgPSBAewotICAgICAgICAoTlNTdHJpbmcgKilrQ0ZCdW5k
bGVJZGVudGlmaWVyS2V5OiBzZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIsCi0gICAgfTsKLQotICAg
IE5TRXJyb3IgKmVycm9yID0gbmlsOwotICAgIEJPT0wgaW5zdGFsbGVkID0gW3NlbGYuZGV2aWNl
IGluc3RhbGxBcHBsaWNhdGlvbjpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnNlbGYuYXBwUGF0aF0g
d2l0aE9wdGlvbnM6aW5zdGFsbE9wdGlvbnMgZXJyb3I6JmVycm9yXTsKLSAgICBpZiAoIWluc3Rh
bGxlZCkgewotICAgICAgICBOU0xvZyhAIkNvdWxkbid0IGluc3RhbGwgJUA6ICVAIiwgc2VsZi5h
cHBQYXRoLCBlcnJvci5kZXNjcmlwdGlvbik7Ci0gICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsK
LSAgICB9Ci19Ci0KLS0gKHZvaWQpa2lsbEFwcAotewotICAgIGRpc3BhdGNoX3NvdXJjZV90IGRp
c3BhdGNoID0gW3NlbGYgYXBwRGlzcGF0Y2hTb3VyY2VdOwotCi0gICAgaWYgKGRpc3BhdGNoKQot
ICAgICAgICBkaXNwYXRjaF9zb3VyY2VfY2FuY2VsKGRpc3BhdGNoKTsKLQotICAgIGlmIChbc2Vs
ZiBwaWRdID4gMSkgewotICAgICAgICBraWxsKHNlbGYucGlkLCBTSUdLSUxMKTsKLSAgICAgICAg
W3NlbGYgc2V0UGlkOi0xXTsKLSAgICB9Ci0gICAgW3NlbGYgc2V0QXBwRGlzcGF0Y2hTb3VyY2U6
bmlsXTsKLX0KLQotLSAoTlNEaWN0aW9uYXJ5ICopX2Vudmlyb25tZW50VmFyaWFibGVzCi17Ci0g
ICAgc3RhdGljIE5TRGljdGlvbmFyeSAqZW52aXJvbm1lbnRWYXJpYWJsZXM7Ci0gICAgc3RhdGlj
IGRpc3BhdGNoX29uY2VfdCBvbmNlOwotCi0gICAgZGlzcGF0Y2hfb25jZSgmb25jZSwgXnsKLSAg
ICAgICAgTlNTdHJpbmcgKnByb2R1Y3REaXJlY3RvcnkgPSBbc2VsZiBwcm9kdWN0RGlyXTsKLQot
ICAgICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gW0B7Ci0gICAgICAgICAg
ICBAIklQQ19JREVOVElGSUVSIjogc2VsZi5pcGNJZGVudGlmaWVyLAotICAgICAgICAgICAgQCJE
WUxEX0ZSQU1FV09SS19QQVRIIjogcHJvZHVjdERpcmVjdG9yeSwKLSAgICAgICAgICAgIEAiX19Y
UENfRFlMRF9GUkFNRVdPUktfUEFUSCI6IHByb2R1Y3REaXJlY3RvcnksCi0gICAgICAgICAgICBA
IkRZTERfTElCUkFSWV9QQVRIIjogcHJvZHVjdERpcmVjdG9yeSwKLSAgICAgICAgICAgIEAiX19Y
UENfRFlMRF9MSUJSQVJZX1BBVEgiOiBwcm9kdWN0RGlyZWN0b3J5LAotICAgICAgICB9IG11dGFi
bGVDb3B5XTsKLQotICAgICAgICBmb3IgKE5TU3RyaW5nICprZXlOYW1lIGluIEBbQCJEWUxEX0lO
U0VSVF9MSUJSQVJJRVMiLCBAIk1hbGxvY1N0YWNrTG9nZ2luZyIsIEAiTE9DQUxfUkVTT1VSQ0Vf
Uk9PVCIsIEAiRFVNUFJFTkRFUlRSRUVfVEVNUCJdKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFy
KiB2YWx1ZSA9IGdldGVudihba2V5TmFtZSBVVEY4U3RyaW5nXSk7Ci0gICAgICAgICAgICBpZiAo
dmFsdWUgJiYgc3RybGVuKHZhbHVlKSkgewotICAgICAgICAgICAgICAgIE5TU3RyaW5nICpuc1Zh
bHVlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnZhbHVlXTsKLSAgICAgICAgICAg
ICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6bnNWYWx1ZSBmb3JLZXk6a2V5TmFtZV07Ci0gICAg
ICAgICAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0Om5zVmFsdWUgZm9yS2V5OltAIl9fWFBD
XyIgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6a2V5TmFtZV1dOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgZm9yIChjaGFyKiogZW52cCA9ICpfTlNHZXRFbnZpcm9uKCk7ICpl
bnZwOyBlbnZwKyspIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVudiA9ICplbnZwOwotICAg
ICAgICAgICAgaWYgKCFzdHJuY21wKCJKU0NfIiwgZW52LCA0KSB8fCAhc3RybmNtcCgiX19YUENf
SlNDXyIsIGVudiwgMTApKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXF1YWwgPSBz
dHJjaHIoZW52LCAnPScpOwotICAgICAgICAgICAgICAgIGlmICghZXF1YWwpIHsKLSAgICAgICAg
ICAgICAgICAgICAgTlNMb2coQCJNaXNzaW5nICc9JyBpbiBlbnYgdmFyICclcyciLCBlbnYpOwot
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heEtleUxlbmd0aCA9IDI1NjsKLSAgICAg
ICAgICAgICAgICBzaXplX3Qga2V5TGVuZ3RoID0gZXF1YWwgLSBlbnY7Ci0gICAgICAgICAgICAg
ICAgaWYgKGtleUxlbmd0aCA+PSBtYXhLZXlMZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAg
TlNMb2coQCJFbnYgdmFyICclcycgaXMgdG9vIGxvbmciLCBlbnYpOwotICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjaGFy
IGtleVttYXhLZXlMZW5ndGhdOwotICAgICAgICAgICAgICAgIHN0cm5jcHkoa2V5LCBlbnYsIGtl
eUxlbmd0aCk7Ci0gICAgICAgICAgICAgICAga2V5W2tleUxlbmd0aF0gPSAnXDAnOwotICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIHZhbHVlID0gZXF1YWwgKyAxOwotCi0gICAgICAgICAgICAg
ICAgTlNTdHJpbmcgKm5zS2V5ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmtleV07
Ci0gICAgICAgICAgICAgICAgTlNTdHJpbmcgKm5zVmFsdWUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0
aFVURjhTdHJpbmc6dmFsdWVdOwotICAgICAgICAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVj
dDpuc1ZhbHVlIGZvcktleTpuc0tleV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBlbnZpcm9ubWVudFZhcmlhYmxlcyA9IFtkaWN0aW9uYXJ5IGNvcHldOwotICAgIH0pOwot
Ci0gICAgcmV0dXJuIGVudmlyb25tZW50VmFyaWFibGVzOwotfQotCi0tICh2b2lkKWxhdW5jaEFw
cAotewotICAgIE5TRGljdGlvbmFyeSAqbGF1bmNoT3B0aW9ucyA9IEB7Ci0gICAgICAgIGtTaW1E
ZXZpY2VMYXVuY2hBcHBsaWNhdGlvbkVudmlyb25tZW50OiBbc2VsZiBfZW52aXJvbm1lbnRWYXJp
YWJsZXNdLAotICAgICAgICBrU2ltRGV2aWNlTGF1bmNoQXBwbGljYXRpb25Bcmd1bWVudHM6IFtz
ZWxmIGR1bXBUb29sQXJndW1lbnRzXSwKLSAgICB9OwotCi0gICAgTlNFcnJvciAqZXJyb3I7Ci0g
ICAgcGlkX3QgcGlkID0gW3NlbGYuZGV2aWNlIGxhdW5jaEFwcGxpY2F0aW9uV2l0aElEOnNlbGYu
YXBwQnVuZGxlSWRlbnRpZmllciBvcHRpb25zOmxhdW5jaE9wdGlvbnMgZXJyb3I6JmVycm9yXTsK
LQotICAgIGlmIChwaWQgPCAwKSB7Ci0gICAgICAgIE5TTG9nKEAiQ291bGRuJ3QgbGF1bmNoICVA
OiAlQCIsIHNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciwgZXJyb3IuZGVzY3JpcHRpb24pOwotICAg
ICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotCi0gICAgW3NlbGYgc2V0UGlkOnBpZF07
Ci0KLSAgICBkaXNwYXRjaF9xdWV1ZV90IHF1ZXVlID0gZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUo
KTsKLSAgICBkaXNwYXRjaF9zb3VyY2VfdCBzaW11bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3VyY2Ug
PSBkaXNwYXRjaF9zb3VyY2VfY3JlYXRlKERJU1BBVENIX1NPVVJDRV9UWVBFX1BST0MsIFtzZWxm
IHBpZF0sIERJU1BBVENIX1BST0NfRVhJVCwgcXVldWUpOwotICAgIFtzZWxmIHNldEFwcERpc3Bh
dGNoU291cmNlOnNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZV07Ci0gICAgZGlzcGF0Y2hf
c291cmNlX3NldF9ldmVudF9oYW5kbGVyKHNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSwg
XnsKLSAgICAgICAgZGlzcGF0Y2hfc291cmNlX2NhbmNlbChzaW11bGF0b3JBcHBFeGl0RGlzcGF0
Y2hTb3VyY2UpOwotICAgICAgICBbc2VsZiBkaWRDcmFzaFdpdGhNZXNzYWdlOm5pbF07Ci0gICAg
fSk7Ci0gICAgZGlzcGF0Y2hfcmVzdW1lKHNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSk7
Ci19Ci0KLS0gKHZvaWQpc3RhcnQKLXsKLSAgICBbc2VsZiBpbnN0YWxsQXBwXTsKLSAgICBbW3Nl
bGYgcmVsYXldIHNldHVwXTsKLSAgICBbc2VsZiBsYXVuY2hBcHBdOwotICAgIFtbc2VsZiByZWxh
eV0gY29ubmVjdF07Ci19Ci0KLS0gKHZvaWQpZmluaXNoCi17Ci0gICAgW1tzZWxmIHJlbGF5XSBk
aXNjb25uZWN0XTsKLSAgICBbc2VsZiBraWxsQXBwXTsKLSAgICBleGl0KEVYSVRfU1VDQ0VTUyk7
Ci19Ci0KLUBlbmQKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkv
bWFpbi5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVs
YXkvbWFpbi5tCShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5
b3V0VGVzdFJlbGF5L21haW4ubQkobm9uZXhpc3RlbnQpCkBAIC0xLDEzMyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiQ29yZVNpbXVsYXRvclNQSS5oIgotI2ltcG9ydCAiTFRS
ZWxheUNvbnRyb2xsZXIuaCIKLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi1z
dGF0aWMgTFRSZWxheUNvbnRyb2xsZXIgKnJlbGF5Q29udHJvbGxlcjsKLQotdm9pZCB1c2FnZSgp
Ci17Ci0gICAgTlNTdHJpbmcgKmhlbHBUZXh0ID0gQCJMYXlvdXRUZXN0UmVsYXk6IHJ1biBhIGR1
bXAgdG9vbCBpbiB0aGUgc2ltdWxhdG9yLiBOb3QgZm9yIGRpcmVjdCBjb25zdW1wdGlvbi5cbiIK
LSAgICAgICAgIlVzYWdlOiBMYXlvdXRUZXN0UmVsYXkgWy1oXSBbb3B0aW9uc10gLS0gW2R1bXAg
dG9vbCBhcmd1bWVudHNdXG4iCi0gICAgICAgICJSZXF1aXJlZCBvcHRpb25zOlxuIgotICAgICAg
ICAiICAgIC11ZGlkIDxpZGVudGlmaWVyPiAgICAgICBTaW11bGF0b3IgZGV2aWNlIGlkZW50aWZp
ZXJcbiIKLSAgICAgICAgIiAgICAtYXBwIDxhcHBfcGF0aD4gICAgICAgICAgUGF0aCB0byB0aGUg
YnVpbHQgaU9TIC5hcHAgYnVuZGxlIGRpcmVjdG9yeS5cbiIKLSAgICAgICAgIiAgICAtcHJvZHVj
dERpciA8ZGlyPiAgICAgICAgL3BhdGgvdG8vV2ViS2l0QnVpbGQve2NvbmZpZ3VyYXRpb259LXtz
aG9ydCBwbGF0Zm9ybX0uXG4iOwotCi0gICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgW2hlbHBU
ZXh0IFVURjhTdHJpbmddKTsKLX0KLQotTlNTdHJpbmcgKmdldFJlcXVpcmVkU3RyaW5nQXJndW1l
bnQoTlNTdHJpbmcgKnBhcmFtZXRlcikKLXsKLSAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMg
PSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdOwotICAgIE5TU3RyaW5nICph
cmd1bWVudCA9IFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6cGFyYW1ldGVyXTsKLQotICAgIGlmICgh
YXJndW1lbnQpIHsKLSAgICAgICAgTlNMb2coQCItJUAgaXMgcmVxdWlyZWQuIiwgcGFyYW1ldGVy
KTsKLSAgICAgICAgdXNhZ2UoKTsKLSAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0K
LSAgICByZXR1cm4gYXJndW1lbnQ7Ci19Ci0KLU5TQXJyYXkgKmdldER1bXBUb29sQXJndW1lbnRz
KCkKLXsKLSAgICBOU011dGFibGVBcnJheSAqZHVtcFRvb2xBcmd1bWVudHMgPSBbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0XTsKLSAgICBOU0FycmF5ICpwcm9jZXNzQXJncyA9IFtbTlNQcm9j
ZXNzSW5mbyBwcm9jZXNzSW5mb10gYXJndW1lbnRzXTsKLSAgICBCT09MIGFwcGVuZGluZyA9IE5P
OwotICAgIGZvciAoTlNTdHJpbmcgKmFyZyBpbiBwcm9jZXNzQXJncykgewotICAgICAgICBpZiAo
W2FyZyBpc0VxdWFsVG9TdHJpbmc6QCItLSJdKSB7Ci0gICAgICAgICAgICBhcHBlbmRpbmcgPSBZ
RVM7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoYXBwZW5k
aW5nKQotICAgICAgICAgICAgW2R1bXBUb29sQXJndW1lbnRzIGFkZE9iamVjdDphcmddOwotICAg
IH0KLSAgICByZXR1cm4gZHVtcFRvb2xBcmd1bWVudHM7Ci19Ci0KLXZvaWQgZmluaXNoKCkKLXsK
LSAgICBbcmVsYXlDb250cm9sbGVyIGZpbmlzaF07Ci19Ci0KLXZvaWQgcmVjZWl2ZWRTaWduYWwo
aW50IHNpZ25hbCkKLXsKLSAgICBleGl0KEVYSVRfU1VDQ0VTUyk7Ci19Ci0KLWludCBtYWluKGlu
dCBhcmdjLCBjb25zdCBjaGFyICogYXJndltdKQotewotICAgIEBhdXRvcmVsZWFzZXBvb2wgewot
ICAgICAgICBOU0FycmF5ICpoZWxwQXJndW1lbnRzID0gQFtAIi1oIiwgQCItLWhlbHAiXTsKLSAg
ICAgICAgZm9yIChOU1N0cmluZyAqaGVscEFyZ3VtZW50IGluIGhlbHBBcmd1bWVudHMpIHsKLSAg
ICAgICAgICAgIGlmIChbW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBhcmd1bWVudHNdIGlu
ZGV4T2ZPYmplY3Q6aGVscEFyZ3VtZW50XSAhPSBOU05vdEZvdW5kKSB7Ci0gICAgICAgICAgICAg
ICAgdXNhZ2UoKTsKLSAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotI2lmIFVTRV9TSU1fU0VSVklDRV9DT05URVhUCi0gICAgICAg
IE5TU3RyaW5nICpkZXZlbG9wZXJEaXJlY3RvcnkgPSBnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50
KEAiZGV2ZWxvcGVyRGlyIik7Ci0jZW5kaWYKLSAgICAgICAgTlNVVUlEICp1ZGlkID0gW1tOU1VV
SUQgYWxsb2NdIGluaXRXaXRoVVVJRFN0cmluZzpnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAi
dWRpZCIpXTsKLSAgICAgICAgTlNTdHJpbmcgKmFwcFBhdGggPSBnZXRSZXF1aXJlZFN0cmluZ0Fy
Z3VtZW50KEAiYXBwIik7Ci0gICAgICAgIE5TU3RyaW5nICpwcm9kdWN0RGlyZWN0b3J5ID0gZ2V0
UmVxdWlyZWRTdHJpbmdBcmd1bWVudChAInByb2R1Y3REaXIiKTsKLSAgICAgICAgTlNBcnJheSAq
ZHVtcFRvb2xBcmd1bWVudHMgPSBnZXREdW1wVG9vbEFyZ3VtZW50cygpOwotCi0jaWYgVVNFX1NJ
TV9TRVJWSUNFX0NPTlRFWFQKLSAgICAgICAgTlNFcnJvciAqZXJyb3I7Ci0gICAgICAgIFNpbVNl
cnZpY2VDb250ZXh0ICpzZXJ2aWNlQ29udGV4dCA9IFtTaW1TZXJ2aWNlQ29udGV4dCBzaGFyZWRT
ZXJ2aWNlQ29udGV4dEZvckRldmVsb3BlckRpcjpkZXZlbG9wZXJEaXJlY3RvcnkgZXJyb3I6JmVy
cm9yXTsKLSAgICAgICAgaWYgKCFzZXJ2aWNlQ29udGV4dCkgewotICAgICAgICAgICAgTlNMb2co
QCJEZXZpY2UgY29udGV4dCBjb3VsZG4ndCBiZSBmb3VuZDogJUAiLCBlcnJvcik7Ci0gICAgICAg
ICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgIH0KLSAgICAgICAgU2ltRGV2aWNlU2V0
ICpkZXZpY2VTZXQgPSBbc2VydmljZUNvbnRleHQgZGVmYXVsdERldmljZVNldFdpdGhFcnJvcjpu
aWxdOwotICAgICAgICBpZiAoIWRldmljZVNldCkgewotICAgICAgICAgICAgTlNMb2coQCJEZWZh
dWx0IGRldmljZSBzZXQgY291bGRuJ3QgYmUgZm91bmQ6ICVAIiwgZXJyb3IpOwotICAgICAgICAg
ICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0gICAgICAgIFNpbURldmljZSAqZGV2
aWNlID0gW2RldmljZVNldC5kZXZpY2VzQnlVRElEIG9iamVjdEZvcktleTp1ZGlkXTsKLSNlbHNl
Ci0gICAgICAgIFNpbURldmljZSAqZGV2aWNlID0gW1NpbURldmljZVNldC5kZWZhdWx0U2V0LmRl
dmljZXNCeVVESUQgb2JqZWN0Rm9yS2V5OnVkaWRdOwotI2VuZGlmCi0gICAgICAgIGlmICghZGV2
aWNlKSB7Ci0gICAgICAgICAgICBOU0xvZyhAIkRldmljZSAlQCBjb3VsZG4ndCBiZSBmb3VuZCIs
IHVkaWQpOwotICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmVsYXlDb250cm9sbGVyID0gW1tMVFJlbGF5Q29udHJvbGxlciBhbGxvY10gaW5pdFdp
dGhEZXZpY2U6ZGV2aWNlIHByb2R1Y3REaXI6cHJvZHVjdERpcmVjdG9yeSBhcHBQYXRoOmFwcFBh
dGggZGV2aWNlVURJRDp1ZGlkIGR1bXBUb29sQXJndW1lbnRzOmR1bXBUb29sQXJndW1lbnRzXTsK
LSAgICAgICAgW3JlbGF5Q29udHJvbGxlciBzdGFydF07Ci0KLSAgICAgICAgYXRleGl0KGZpbmlz
aCk7Ci0gICAgICAgIHNpZ25hbChTSUdJTlQsIHJlY2VpdmVkU2lnbmFsKTsKLSAgICAgICAgc2ln
bmFsKFNJR1RFUk0sIHJlY2VpdmVkU2lnbmFsKTsKLQotICAgICAgICBbW05TUnVuTG9vcCBtYWlu
UnVuTG9vcF0gcnVuXTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19CkluZGV4OiBUb29scy9MYXlv
dXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29scy9MYXlvdXRUZXN0
UmVsYXkvTGF5b3V0VGVzdFJlbGF5Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKG5vbmV4aXN0
ZW50KQpAQCAtMSwyMDIgKzAsMCBAQAotLy8gISQqVVRGOCokIQotewotCWFyY2hpdmVWZXJzaW9u
ID0gMTsKLQljbGFzc2VzID0gewotCX07Ci0Jb2JqZWN0VmVyc2lvbiA9IDQ2OwotCW9iamVjdHMg
PSB7Ci0KLS8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCi0JCTJFOEQzRUY4MTk4ODFE
NDMwMDRGNkNDMiAvKiBtYWluLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRThEM0VGNzE5ODgxRDQzMDA0RjZDQzIgLyogbWFpbi5tICovOyB9OwotCQky
RThEM0YwMjE5ODgxRkQwMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkubSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOEQzRjAxMTk4ODFGRDAwMDRGNkNDMiAv
KiBMVFBpcGVSZWxheS5tICovOyB9OwotCQkyRThEM0YwNjE5ODgyNDA2MDA0RjZDQzIgLyogTFRS
ZWxheUNvbnRyb2xsZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJFOEQzRjA1MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5tICov
OyB9OwotLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWENvcHlG
aWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCQkyRThEM0VGMjE5ODgxRDQzMDA0RjZDQzIgLyog
Q29weUZpbGVzICovID0gewotCQkJaXNhID0gUEJYQ29weUZpbGVzQnVpbGRQaGFzZTsKLQkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlkc3RQYXRoID0gL3Vzci9zaGFyZS9tYW4v
bWFuMS87Ci0JCQlkc3RTdWJmb2xkZXJTcGVjID0gMDsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAxOwotCQl9OwotLyogRW5kIFBC
WENvcHlGaWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhGaWxlUmVmZXJl
bmNlIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjQxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RS
ZWxheSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNv
bXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gTGF5
b3V0VGVzdFJlbGF5OyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQkyRThE
M0VGNzE5ODgxRDQzMDA0RjZDQzIgLyogbWFpbi5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBtYWluLm07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAv
KiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBuYW1lID0gRGVidWdSZWxlYXNlLnhjY29u
ZmlnOyBwYXRoID0gQ29uZmlndXJhdGlvbnMvRGVidWdSZWxlYXNlLnhjY29uZmlnOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0VGRjE5ODgxRTI1MDA0RjZDQzIgLyogQmFzZS54
Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQueGNjb25maWc7IG5hbWUgPSBCYXNlLnhjY29uZmlnOyBwYXRoID0gQ29uZmlndXJhdGlv
bnMvQmFzZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDAx
OTg4MUYyOTAwNEY2Q0MyIC8qIExUUmVsYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTFRSZWxheS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0YwMTE5ODgxRkQwMDA0RjZDQzIgLyog
TFRQaXBlUmVsYXkubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gTFRQaXBl
UmVsYXkubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDMxOTg4MUZFMjAw
NEY2Q0MyIC8qIExUUGlwZVJlbGF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExUUGlwZVJlbGF5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOEQzRjA0MTk4ODI0MDYwMDRGNkNDMiAvKiBM
VFJlbGF5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMVFJl
bGF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0YwNTE5
ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5vYmpjOyBwYXRoID0gTFRSZWxheUNvbnRyb2xsZXIubTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQ0UxRkJDMTUxQjI5MEU3OTAwMDEzNkY1IC8qIENvcmVTaW11bGF0b3JTUEku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29yZVNpbXVsYXRvclNQSS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlv
biAqLwotCi0vKiBCZWdpbiBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0JCTJF
OEQzRUYxMTk4ODFENDMwMDRGNkNDMiAvKiBGcmFtZXdvcmtzICovID0gewotCQkJaXNhID0gUEJY
RnJhbWV3b3Jrc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3Owot
CQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7Ci0JCX07Ci0vKiBFbmQgUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwot
Ci0vKiBCZWdpbiBQQlhHcm91cCBzZWN0aW9uICovCi0JCTJFOEQzRUVCMTk4ODFENDMwMDRGNkND
MiA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMkU4RDNFRkYx
OTg4MUUyNTAwNEY2Q0MyIC8qIEJhc2UueGNjb25maWcgKi8sCi0JCQkJMkU4RDNFRkUxOTg4MUUx
MzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLywKLQkJCQkyRThEM0VGNjE5ODgx
RDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovLAotCQkJCTJFOEQzRUY1MTk4ODFENDMw
MDRGNkNDMiAvKiBQcm9kdWN0cyAqLywKLQkJCSk7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwotCQl9OwotCQkyRThEM0VGNTE5ODgxRDQzMDA0RjZDQzIgLyogUHJvZHVjdHMgKi8gPSB7Ci0J
CQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTJFOEQzRUY0MTk4ODFENDMw
MDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8sCi0JCQkpOwotCQkJbmFtZSA9IFByb2R1Y3Rz
OwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJMkU4RDNFRjYxOTg4MUQ0MzAw
NEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJ
Y2hpbGRyZW4gPSAoCi0JCQkJMkU4RDNFRjcxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSAqLywK
LQkJCQlDRTFGQkMxNTFCMjkwRTc5MDAwMTM2RjUgLyogQ29yZVNpbXVsYXRvclNQSS5oICovLAot
CQkJCTJFOEQzRjAwMTk4ODFGMjkwMDRGNkNDMiAvKiBMVFJlbGF5LmggKi8sCi0JCQkJMkU4RDNG
MDExOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lm0gKi8sCi0JCQkJMkU4RDNGMDMxOTg4
MUZFMjAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5LmggKi8sCi0JCQkJMkU4RDNGMDQxOTg4MjQwNjAw
NEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLmggKi8sCi0JCQkJMkU4RDNGMDUxOTg4MjQwNjAw
NEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLm0gKi8sCi0JCQkpOwotCQkJcGF0aCA9IExheW91
dFRlc3RSZWxheTsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0vKiBFbmQgUEJY
R3JvdXAgc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLwot
CQkyRThEM0VGMzE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovID0gewotCQkJ
aXNhID0gUEJYTmF0aXZlVGFyZ2V0OwotCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDJFOEQz
RUZCMTk4ODFENDMwMDRGNkNDMiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5h
dGl2ZVRhcmdldCAiTGF5b3V0VGVzdFJlbGF5IiAqLzsKLQkJCWJ1aWxkUGhhc2VzID0gKAotCQkJ
CTJFOEQzRUYwMTk4ODFENDMwMDRGNkNDMiAvKiBTb3VyY2VzICovLAotCQkJCTJFOEQzRUYxMTk4
ODFENDMwMDRGNkNDMiAvKiBGcmFtZXdvcmtzICovLAotCQkJCTJFOEQzRUYyMTk4ODFENDMwMDRG
NkNDMiAvKiBDb3B5RmlsZXMgKi8sCi0JCQkpOwotCQkJYnVpbGRSdWxlcyA9ICgKLQkJCSk7Ci0J
CQlkZXBlbmRlbmNpZXMgPSAoCi0JCQkpOwotCQkJbmFtZSA9IExheW91dFRlc3RSZWxheTsKLQkJ
CXByb2R1Y3ROYW1lID0gTGF5b3V0VGVzdFJlbGF5OwotCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDJF
OEQzRUY0MTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi87Ci0JCQlwcm9kdWN0
VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLnRvb2wiOwotCQl9OwotLyogRW5kIFBCWE5h
dGl2ZVRhcmdldCBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWFByb2plY3Qgc2VjdGlvbiAqLwot
CQkyRThEM0VFQzE5ODgxRDQzMDA0RjZDQzIgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7Ci0JCQlp
c2EgPSBQQlhQcm9qZWN0OwotCQkJYXR0cmlidXRlcyA9IHsKLQkJCQlMYXN0VXBncmFkZUNoZWNr
ID0gMDYwMDsKLQkJCQlPUkdBTklaQVRJT05OQU1FID0gIkFwcGxlLCBJbmMuIjsKLQkJCQlUYXJn
ZXRBdHRyaWJ1dGVzID0gewotCQkJCQkyRThEM0VGMzE5ODgxRDQzMDA0RjZDQzIgPSB7Ci0JCQkJ
CQlDcmVhdGVkT25Ub29sc1ZlcnNpb24gPSA2LjA7Ci0JCQkJCX07Ci0JCQkJfTsKLQkJCX07Ci0J
CQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMkU4RDNFRUYxOTg4MUQ0MzAwNEY2Q0MyIC8qIEJ1
aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiTGF5b3V0VGVzdFJlbGF5IiAq
LzsKLQkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDMuMiI7Ci0JCQlkZXZlbG9wbWVu
dFJlZ2lvbiA9IEVuZ2xpc2g7Ci0JCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMDsKLQkJCWtu
b3duUmVnaW9ucyA9ICgKLQkJCQllbiwKLQkJCSk7Ci0JCQltYWluR3JvdXAgPSAyRThEM0VFQjE5
ODgxRDQzMDA0RjZDQzI7Ci0JCQlwcm9kdWN0UmVmR3JvdXAgPSAyRThEM0VGNTE5ODgxRDQzMDA0
RjZDQzIgLyogUHJvZHVjdHMgKi87Ci0JCQlwcm9qZWN0RGlyUGF0aCA9ICIiOwotCQkJcHJvamVj
dFJvb3QgPSAiIjsKLQkJCXRhcmdldHMgPSAoCi0JCQkJMkU4RDNFRjMxOTg4MUQ0MzAwNEY2Q0My
IC8qIExheW91dFRlc3RSZWxheSAqLywKLQkJCSk7Ci0JCX07Ci0vKiBFbmQgUEJYUHJvamVjdCBz
ZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQkJ
MkU4RDNFRjAxOTg4MUQ0MzAwNEY2Q0MyIC8qIFNvdXJjZXMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhT
b3VyY2VzQnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlm
aWxlcyA9ICgKLQkJCQkyRThEM0YwNjE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xs
ZXIubSBpbiBTb3VyY2VzICovLAotCQkJCTJFOEQzRUY4MTk4ODFENDMwMDRGNkNDMiAvKiBtYWlu
Lm0gaW4gU291cmNlcyAqLywKLQkJCQkyRThEM0YwMjE5ODgxRkQwMDA0RjZDQzIgLyogTFRQaXBl
UmVsYXkubSBpbiBTb3VyY2VzICovLAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwotCQl9OwotLyogRW5kIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rp
b24gKi8KLQotLyogQmVnaW4gWENCdWlsZENvbmZpZ3VyYXRpb24gc2VjdGlvbiAqLwotCQkyRThE
M0VGOTE5ODgxRDQzMDA0RjZDQzIgLyogRGVidWcgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29u
ZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gMkU4RDNFRkUxOTg4
MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLzsKLQkJCWJ1aWxkU2V0dGlu
Z3MgPSB7Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVnOwotCQl9OwotCQkyRThEM0VGQTE5ODgxRDQz
MDA0RjZDQzIgLyogUmVsZWFzZSAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9u
OwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAyRThEM0VGRTE5ODgxRTEzMDA0RjZD
QzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJ
CX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJMkU4RDNFRkMxOTg4MUQ0MzAwNEY2Q0My
IC8qIERlYnVnICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNl
Q29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1
Z1JlbGVhc2UueGNjb25maWcgKi87Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJCVBST0RVQ1Rf
TkFNRSA9ICIkKFRBUkdFVF9OQU1FKSI7Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVnOwotCQl9Owot
CQkyRThEM0VGRDE5ODgxRDQzMDA0RjZDQzIgLyogUmVsZWFzZSAqLyA9IHsKLQkJCWlzYSA9IFhD
QnVpbGRDb25maWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAyRThE
M0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovOwotCQkJYnVp
bGRTZXR0aW5ncyA9IHsKLQkJCQlQUk9EVUNUX05BTUUgPSAiJChUQVJHRVRfTkFNRSkiOwotCQkJ
fTsKLQkJCW5hbWUgPSBSZWxlYXNlOwotCQl9OwotLyogRW5kIFhDQnVpbGRDb25maWd1cmF0aW9u
IHNlY3Rpb24gKi8KLQotLyogQmVnaW4gWENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCi0J
CTJFOEQzRUVGMTk4ODFENDMwMDRGNkNDMiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9y
IFBCWFByb2plY3QgIkxheW91dFRlc3RSZWxheSIgKi8gPSB7Ci0JCQlpc2EgPSBYQ0NvbmZpZ3Vy
YXRpb25MaXN0OwotCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKLQkJCQkyRThEM0VGOTE5ODgx
RDQzMDA0RjZDQzIgLyogRGVidWcgKi8sCi0JCQkJMkU4RDNFRkExOTg4MUQ0MzAwNEY2Q0MyIC8q
IFJlbGVhc2UgKi8sCi0JCQkpOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAw
OwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJMkU4RDNF
RkIxOTg4MUQ0MzAwNEY2Q0MyIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0
aXZlVGFyZ2V0ICJMYXlvdXRUZXN0UmVsYXkiICovID0gewotCQkJaXNhID0gWENDb25maWd1cmF0
aW9uTGlzdDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCi0JCQkJMkU4RDNFRkMxOTg4MUQ0
MzAwNEY2Q0MyIC8qIERlYnVnICovLAotCQkJCTJFOEQzRUZEMTk4ODFENDMwMDRGNkNDMiAvKiBS
ZWxlYXNlICovLAotCQkJKTsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsK
LQkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJlbGVhc2U7Ci0JCX07Ci0vKiBFbmQgWEND
b25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCi0JfTsKLQlyb290T2JqZWN0ID0gMkU4RDNFRUMx
OTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2plY3Qgb2JqZWN0ICovOwotfQpJbmRleDogVG9vbHMvTGF5
b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2oJKHJldmlzaW9uIDIw
OTg4NikKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVwcm9q
CShub25leGlzdGVudCkKClByb3BlcnR5IGNoYW5nZXMgb246IFRvb2xzL0xheW91dFRlc3RSZWxh
eS9MYXlvdXRUZXN0UmVsYXkueGNvZGVwcm9qCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmlnbm9y
ZQojIyAtMSwyICswLDAgIyMKLXByb2plY3QueGN3b3Jrc3BhY2UKLXhjdXNlcmRhdGEKSW5kZXg6
IFRvb2xzL0xheW91dFRlc3RSZWxheS9NYWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlv
dXRUZXN0UmVsYXkvTWFrZWZpbGUJKHJldmlzaW9uIDIwOTg4NikKKysrIFRvb2xzL0xheW91dFRl
c3RSZWxheS9NYWtlZmlsZQkobm9uZXhpc3RlbnQpCkBAIC0xLDYgKzAsMCBAQAotU0NSSVBUU19Q
QVRIID0gLi4vU2NyaXB0cwotCi1PVkVSUklERV9BUkNIUyA9IGRlZmF1bHQKLU9WRVJSSURFX1NE
S1JPT1QgPSBkZWZhdWx0Ci0KLWluY2x1ZGUgLi4vLi4vTWFrZWZpbGUuc2hhcmVkCkluZGV4OiBU
b29scy9MYXlvdXRUZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZp
ZwkocmV2aXNpb24gMjA5ODg2KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRp
b25zL0Jhc2UueGNjb25maWcJKG5vbmV4aXN0ZW50KQpAQCAtMSw2OCArMCwwIEBACi0vLyBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0vLyBhcmUgbWV0OgotLy8gMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLS8vIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0vLyAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
Ly8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotLy8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLS8vIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotLy8gUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLS8vIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
Ly8gRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotLy8gUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0vLyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0vLyBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgIi4uLy4uLy4uLy4uL0ludGVy
bmFsL0NvbmZpZ3VyYXRpb25zL0hhdmVJbnRlcm5hbFNESy54Y2NvbmZpZyIKLQotVVNFX0lOVEVS
TkFMX1NESyA9ICQoVVNFX0lOVEVSTkFMX1NES18kKENPTkZJR1VSQVRJT04pKTsKLVVTRV9JTlRF
Uk5BTF9TREtfUHJvZHVjdGlvbiA9IFlFUzsKLVVTRV9JTlRFUk5BTF9TREtfRGVidWcgPSAkKEhB
VkVfSU5URVJOQUxfU0RLKTsKLVVTRV9JTlRFUk5BTF9TREtfUmVsZWFzZSA9ICQoSEFWRV9JTlRF
Uk5BTF9TREspOwotCi1DTEFOR19DWFhfTEFOR1VBR0VfU1RBTkRBUkQgPSBnbnUrKzB4OwotQ0xB
TkdfRU5BQkxFX09CSkNfQVJDID0gWUVTOwotQ0xBTkdfV0FSTl9DWFgwWF9FWFRFTlNJT05TID0g
Tk87Ci1IRUFERVJfU0VBUkNIX1BBVEhTID0gJChCVUlMVF9QUk9EVUNUU19ESVIpL3Vzci9sb2Nh
bC9pbmNsdWRlICQoV0VCQ09SRV9QUklWQVRFX0hFQURFUlNfRElSKS9Gb3J3YXJkaW5nSGVhZGVy
cyAkKFNSQ1JPT1QpLy4uLy4uL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UgJChORVhUX1JPT1Qp
L3Vzci9sb2NhbC9pbmNsdWRlL1dlYkNvcmVUZXN0U3VwcG9ydDsKLUdDQ19QUkVQUk9DRVNTT1Jf
REVGSU5JVElPTlMgPSAkKERFQlVHX0RFRklORVMpIEVOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVDsK
LURFQlVHX0lORk9STUFUSU9OX0ZPUk1BVCA9IGR3YXJmLXdpdGgtZHN5bTsKLVBSRUJJTkRJTkcg
PSBOTwotR0NDX0NfTEFOR1VBR0VfU1RBTkRBUkQgPSBnbnU5OQotR0NDX0VOQUJMRV9DUFBfRVhD
RVBUSU9OUyA9IE5POwotR0NDX0VOQUJMRV9DUFBfUlRUSSA9IE5POwotR0NDX1BSRUNPTVBJTEVf
UFJFRklYX0hFQURFUiA9IFlFUwotR0NDX1RSRUFUX1dBUk5JTkdTX0FTX0VSUk9SUyA9IFlFUwot
R0NDX1ZFUlNJT04gPSBjb20uYXBwbGUuY29tcGlsZXJzLmxsdm0uY2xhbmcuMV8wOwotR0NDX1dB
Uk5fQUJPVVRfREVQUkVDQVRFRF9GVU5DVElPTlMgPSBOTwotR0NDX1dBUk5fVU5VU0VEX0ZVTkNU
SU9OID0gWUVTCi1HQ0NfV0FSTl9VTlVTRURfVkFSSUFCTEUgPSBZRVMKLUdDQ19XQVJOXzY0X1RP
XzMyX0JJVF9DT05WRVJTSU9OW2FyY2g9eDg2XzY0XSA9IE5POwotV0FSTklOR19DRkxBR1MgPSAt
V2FsbCAtVyAtV25vLXVudXNlZC1wYXJhbWV0ZXIgLVd1bmRlZgotCi1ERUJVR19ERUZJTkVTX2Rl
YnVnID0gOwotREVCVUdfREVGSU5FU19ub3JtYWwgPSBOREVCVUc7Ci1ERUJVR19ERUZJTkVTID0g
JChERUJVR19ERUZJTkVTXyQoQ1VSUkVOVF9WQVJJQU5UKSk7Ci0KLVRBUkdFVF9NQUNfT1NfWF9W
RVJTSU9OX01BSk9SID0gJChUQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUiQoTUFDT1NYX0RF
UExPWU1FTlRfVEFSR0VUOnN1ZmZpeDppZGVudGlmaWVyKSk7Ci1UQVJHRVRfTUFDX09TX1hfVkVS
U0lPTl9NQUpPUl8xMCA9IDEwMTAwMDsKLVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SXzEx
ID0gMTAxMTAwOwotVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1JfMTIgPSAxMDEyMDA7Ci1U
QVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUl8xMyA9IDEwMTMwMDsKLQotU0RLUk9PVCA9IG1h
Y29zeC5pbnRlcm5hbDsKLQotU1VQUE9SVEVEX1BMQVRGT1JNUyA9IG1hY29zeDsKLQotVE9PTENI
QUlOUyA9IGRlZmF1bHQ7Ci0KLU9USEVSX0NGTEFHUyA9ICQoQVNBTl9PVEhFUl9DRkxBR1MpOwot
T1RIRVJfQ1BMVVNQTFVTRkxBR1MgPSAkKEFTQU5fT1RIRVJfQ1BMVVNQTFVTRkxBR1MpOwotT1RI
RVJfTERGTEFHUyA9ICQoQVNBTl9PVEhFUl9MREZMQUdTKTsKSW5kZXg6IFRvb2xzL0xheW91dFRl
c3RSZWxheS9Db25maWd1cmF0aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25maWcKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0RlYnVnUmVsZWFzZS54Y2Nv
bmZpZwkocmV2aXNpb24gMjA5ODg2KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3Vy
YXRpb25zL0RlYnVnUmVsZWFzZS54Y2NvbmZpZwkobm9uZXhpc3RlbnQpCkBAIC0xLDQyICswLDAg
QEAKLS8vIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLS8vIGFyZSBtZXQ6Ci0vLyAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotLy8gMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLS8vICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0vLyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotLy8gSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0vLyBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotLy8gQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0vLyBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0vLyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLS8vIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLS8v
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSAiQmFzZS54
Y2NvbmZpZyIKLQotQVJDSFMgPSAkKEFSQ0hTX1NUQU5EQVJEXzY0X0JJVCk7Ci0KLVRBUkdFVF9N
QUNfT1NfWF9WRVJTSU9OX01BSk9SID0gJChNQUNfT1NfWF9WRVJTSU9OX01BSk9SKTsKLQotTUFD
T1NYX0RFUExPWU1FTlRfVEFSR0VUID0gJChNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfJChUQVJH
RVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUikpCi1NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfMTAx
MDAwID0gMTAuMTA7Ci1NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfMTAxMTAwID0gMTAuMTE7Ci1N
QUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfMTAxMjAwID0gMTAuMTI7Ci1NQUNPU1hfREVQTE9ZTUVO
VF9UQVJHRVRfMTAxMzAwID0gMTAuMTM7Ci0KLUZSQU1FV09SS19TRUFSQ0hfUEFUSFMgPSAkKERF
VkVMT1BFUl9ESVIpL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3M7Ci1MRF9SVU5QQVRIX1NFQVJD
SF9QQVRIUyA9ICQoREVWRUxPUEVSX0RJUikvTGlicmFyeS9Qcml2YXRlRnJhbWV3b3JrczsKLU9U
SEVSX0xERkxBR1MgPSAtZnJhbWV3b3JrIENvcmVTaW11bGF0b3IgLWZyYW1ld29yayBBcHBLaXQ7
Ci0KLVNES1JPT1QgPSAkKFNES1JPT1RfbWFjb3N4XyQoVVNFX0lOVEVSTkFMX1NESykpOwotU0RL
Uk9PVF9tYWNvc3hfID0gbWFjb3N4OwotU0RLUk9PVF9tYWNvc3hfWUVTID0gbWFjb3N4LmludGVy
bmFsOwpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9M
YXlvdXRUZXN0UmVsYXkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA5ODg2
KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShub25leGlzdGVudCkKQEAgLTEsMjAyICswLDAgQEAKLS8vICEkKlVURjgq
JCEKLXsKLQlhcmNoaXZlVmVyc2lvbiA9IDE7Ci0JY2xhc3NlcyA9IHsKLQl9OwotCW9iamVjdFZl
cnNpb24gPSA0NjsKLQlvYmplY3RzID0gewotCi0vKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlv
biAqLwotCQkyRThEM0VGODE5ODgxRDQzMDA0RjZDQzIgLyogbWFpbi5tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU4RDNFRjcxOTg4MUQ0MzAwNEY2Q0My
IC8qIG1haW4ubSAqLzsgfTsKLQkJMkU4RDNGMDIxOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJl
bGF5Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRThE
M0YwMTE5ODgxRkQwMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkubSAqLzsgfTsKLQkJMkU4RDNGMDYx
OTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLm0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRThEM0YwNTE5ODgyNDA2MDA0RjZDQzIgLyog
TFRSZWxheUNvbnRyb2xsZXIubSAqLzsgfTsKLS8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAq
LwotCi0vKiBCZWdpbiBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQkJMkU4RDNF
RjIxOTg4MUQ0MzAwNEY2Q0MyIC8qIENvcHlGaWxlcyAqLyA9IHsKLQkJCWlzYSA9IFBCWENvcHlG
aWxlc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZHN0
UGF0aCA9IC91c3Ivc2hhcmUvbWFuL21hbjEvOwotCQkJZHN0U3ViZm9sZGVyU3BlYyA9IDA7Ci0J
CQlmaWxlcyA9ICgKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMTsKLQkJfTsKLS8qIEVuZCBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQot
LyogQmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCi0JCTJFOEQzRUY0MTk4ODFENDMw
MDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJ
bkluZGV4ID0gMDsgcGF0aCA9IExheW91dFRlc3RSZWxheTsgc291cmNlVHJlZSA9IEJVSUxUX1BS
T0RVQ1RTX0RJUjsgfTsKLQkJMkU4RDNFRjcxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5vYmpjOyBwYXRoID0gbWFpbi5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThE
M0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgbmFt
ZSA9IERlYnVnUmVsZWFzZS54Y2NvbmZpZzsgcGF0aCA9IENvbmZpZ3VyYXRpb25zL0RlYnVnUmVs
ZWFzZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNFRkYxOTg4
MUUyNTAwNEY2Q0MyIC8qIEJhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBuYW1lID0gQmFzZS54Y2NvbmZp
ZzsgcGF0aCA9IENvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTJFOEQzRjAwMTk4ODFGMjkwMDRGNkNDMiAvKiBMVFJlbGF5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IExUUmVsYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNG
MDExOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMub2JqYzsgcGF0aCA9IExUUGlwZVJlbGF5Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTJFOEQzRjAzMTk4ODFGRTIwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBMVFBpcGVSZWxheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0Yw
NDE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTFRSZWxheUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMkU4RDNGMDUxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVy
Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IExUUmVsYXlDb250cm9sbGVy
Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNFMUZCQzE1MUIyOTBFNzkwMDAxMzZG
NSAvKiBDb3JlU2ltdWxhdG9yU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENvcmVTaW11bGF0b3JTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLS8qIEVuZCBQ
QlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxk
UGhhc2Ugc2VjdGlvbiAqLwotCQkyRThEM0VGMTE5ODgxRDQzMDA0RjZDQzIgLyogRnJhbWV3b3Jr
cyAqLyA9IHsKLQkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rp
b25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9OwotLyogRW5kIFBCWEZyYW1ld29ya3NC
dWlsZFBoYXNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYR3JvdXAgc2VjdGlvbiAqLwotCQky
RThEM0VFQjE5ODgxRDQzMDA0RjZDQzIgPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxk
cmVuID0gKAotCQkJCTJFOEQzRUZGMTk4ODFFMjUwMDRGNkNDMiAvKiBCYXNlLnhjY29uZmlnICov
LAotCQkJCTJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcg
Ki8sCi0JCQkJMkU4RDNFRjYxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLywK
LQkJCQkyRThEM0VGNTE5ODgxRDQzMDA0RjZDQzIgLyogUHJvZHVjdHMgKi8sCi0JCQkpOwotCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJMkU4RDNFRjUxOTg4MUQ0MzAwNEY2Q0My
IC8qIFByb2R1Y3RzICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgK
LQkJCQkyRThEM0VGNDE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovLAotCQkJ
KTsKLQkJCW5hbWUgPSBQcm9kdWN0czsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07
Ci0JCTJFOEQzRUY2MTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8gPSB7Ci0J
CQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTJFOEQzRUY3MTk4ODFENDMw
MDRGNkNDMiAvKiBtYWluLm0gKi8sCi0JCQkJQ0UxRkJDMTUxQjI5MEU3OTAwMDEzNkY1IC8qIENv
cmVTaW11bGF0b3JTUEkuaCAqLywKLQkJCQkyRThEM0YwMDE5ODgxRjI5MDA0RjZDQzIgLyogTFRS
ZWxheS5oICovLAotCQkJCTJFOEQzRjAxMTk4ODFGRDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5t
ICovLAotCQkJCTJFOEQzRjAzMTk4ODFGRTIwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5oICovLAot
CQkJCTJFOEQzRjA0MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5oICovLAot
CQkJCTJFOEQzRjA1MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5tICovLAot
CQkJKTsKLQkJCXBhdGggPSBMYXlvdXRUZXN0UmVsYXk7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOwotCQl9OwotLyogRW5kIFBCWEdyb3VwIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYTmF0
aXZlVGFyZ2V0IHNlY3Rpb24gKi8KLQkJMkU4RDNFRjMxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91
dFRlc3RSZWxheSAqLyA9IHsKLQkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKLQkJCWJ1aWxkQ29u
ZmlndXJhdGlvbkxpc3QgPSAyRThEM0VGQjE5ODgxRDQzMDA0RjZDQzIgLyogQnVpbGQgY29uZmln
dXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIkxheW91dFRlc3RSZWxheSIgKi87Ci0J
CQlidWlsZFBoYXNlcyA9ICgKLQkJCQkyRThEM0VGMDE5ODgxRDQzMDA0RjZDQzIgLyogU291cmNl
cyAqLywKLQkJCQkyRThEM0VGMTE5ODgxRDQzMDA0RjZDQzIgLyogRnJhbWV3b3JrcyAqLywKLQkJ
CQkyRThEM0VGMjE5ODgxRDQzMDA0RjZDQzIgLyogQ29weUZpbGVzICovLAotCQkJKTsKLQkJCWJ1
aWxkUnVsZXMgPSAoCi0JCQkpOwotCQkJZGVwZW5kZW5jaWVzID0gKAotCQkJKTsKLQkJCW5hbWUg
PSBMYXlvdXRUZXN0UmVsYXk7Ci0JCQlwcm9kdWN0TmFtZSA9IExheW91dFRlc3RSZWxheTsKLQkJ
CXByb2R1Y3RSZWZlcmVuY2UgPSAyRThEM0VGNDE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVz
dFJlbGF5ICovOwotCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS50b29s
IjsKLQkJfTsKLS8qIEVuZCBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQ
QlhQcm9qZWN0IHNlY3Rpb24gKi8KLQkJMkU4RDNFRUMxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2pl
Y3Qgb2JqZWN0ICovID0gewotCQkJaXNhID0gUEJYUHJvamVjdDsKLQkJCWF0dHJpYnV0ZXMgPSB7
Ci0JCQkJTGFzdFVwZ3JhZGVDaGVjayA9IDA2MDA7Ci0JCQkJT1JHQU5JWkFUSU9OTkFNRSA9ICJB
cHBsZSwgSW5jLiI7Ci0JCQkJVGFyZ2V0QXR0cmlidXRlcyA9IHsKLQkJCQkJMkU4RDNFRjMxOTg4
MUQ0MzAwNEY2Q0MyID0gewotCQkJCQkJQ3JlYXRlZE9uVG9vbHNWZXJzaW9uID0gNi4wOwotCQkJ
CQl9OwotCQkJCX07Ci0JCQl9OwotCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDJFOEQzRUVG
MTk4ODFENDMwMDRGNkNDMiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2pl
Y3QgIkxheW91dFRlc3RSZWxheSIgKi87Ci0JCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29k
ZSAzLjIiOwotCQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBFbmdsaXNoOwotCQkJaGFzU2Nhbm5lZEZv
ckVuY29kaW5ncyA9IDA7Ci0JCQlrbm93blJlZ2lvbnMgPSAoCi0JCQkJZW4sCi0JCQkpOwotCQkJ
bWFpbkdyb3VwID0gMkU4RDNFRUIxOTg4MUQ0MzAwNEY2Q0MyOwotCQkJcHJvZHVjdFJlZkdyb3Vw
ID0gMkU4RDNFRjUxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2R1Y3RzICovOwotCQkJcHJvamVjdERp
clBhdGggPSAiIjsKLQkJCXByb2plY3RSb290ID0gIiI7Ci0JCQl0YXJnZXRzID0gKAotCQkJCTJF
OEQzRUYzMTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8sCi0JCQkpOwotCQl9
OwotLyogRW5kIFBCWFByb2plY3Qgc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhTb3VyY2VzQnVp
bGRQaGFzZSBzZWN0aW9uICovCi0JCTJFOEQzRUYwMTk4ODFENDMwMDRGNkNDMiAvKiBTb3VyY2Vz
ICovID0gewotCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1h
c2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkJMkU4RDNGMDYxOTg4MjQwNjAwNEY2
Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLm0gaW4gU291cmNlcyAqLywKLQkJCQkyRThEM0VGODE5
ODgxRDQzMDA0RjZDQzIgLyogbWFpbi5tIGluIFNvdXJjZXMgKi8sCi0JCQkJMkU4RDNGMDIxOTg4
MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lm0gaW4gU291cmNlcyAqLywKLQkJCSk7Ci0JCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKLS8qIEVuZCBQQlhT
b3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFhDQnVpbGRDb25maWd1cmF0
aW9uIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjkxOTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICovID0g
ewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJhdGlvblJl
ZmVyZW5jZSA9IDJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25m
aWcgKi87Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJfTsKLQkJCW5hbWUgPSBEZWJ1ZzsKLQkJ
fTsKLQkJMkU4RDNFRkExOTg4MUQ0MzAwNEY2Q0MyIC8qIFJlbGVhc2UgKi8gPSB7Ci0JCQlpc2Eg
PSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0g
MkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLzsKLQkJ
CWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQl9OwotCQkJbmFtZSA9IFJlbGVhc2U7Ci0JCX07Ci0JCTJF
OEQzRUZDMTk4ODFENDMwMDRGNkNDMiAvKiBEZWJ1ZyAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRD
b25maWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAyRThEM0VGRTE5
ODgxRTEzMDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0
aW5ncyA9IHsKLQkJCQlQUk9EVUNUX05BTUUgPSAiJChUQVJHRVRfTkFNRSkiOwotCQkJfTsKLQkJ
CW5hbWUgPSBEZWJ1ZzsKLQkJfTsKLQkJMkU4RDNFRkQxOTg4MUQ0MzAwNEY2Q0MyIC8qIFJlbGVh
c2UgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1
cmF0aW9uUmVmZXJlbmNlID0gMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFz
ZS54Y2NvbmZpZyAqLzsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJUFJPRFVDVF9OQU1FID0g
IiQoVEFSR0VUX05BTUUpIjsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLS8qIEVu
ZCBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFhDQ29uZmlndXJh
dGlvbkxpc3Qgc2VjdGlvbiAqLwotCQkyRThEM0VFRjE5ODgxRDQzMDA0RjZDQzIgLyogQnVpbGQg
Y29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJMYXlvdXRUZXN0UmVsYXkiICovID0g
ewotCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbnMg
PSAoCi0JCQkJMkU4RDNFRjkxOTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICovLAotCQkJCTJFOEQz
RUZBMTk4ODFENDMwMDRGNkNDMiAvKiBSZWxlYXNlICovLAotCQkJKTsKLQkJCWRlZmF1bHRDb25m
aWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJl
bGVhc2U7Ci0JCX07Ci0JCTJFOEQzRUZCMTk4ODFENDMwMDRGNkNDMiAvKiBCdWlsZCBjb25maWd1
cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiTGF5b3V0VGVzdFJlbGF5IiAqLyA9IHsK
LQkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25zID0g
KAotCQkJCTJFOEQzRUZDMTk4ODFENDMwMDRGNkNDMiAvKiBEZWJ1ZyAqLywKLQkJCQkyRThEM0VG
RDE5ODgxRDQzMDA0RjZDQzIgLyogUmVsZWFzZSAqLywKLQkJCSk7Ci0JCQlkZWZhdWx0Q29uZmln
dXJhdGlvbklzVmlzaWJsZSA9IDA7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxl
YXNlOwotCQl9OwotLyogRW5kIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLwotCX07Ci0J
cm9vdE9iamVjdCA9IDJFOEQzRUVDMTk4ODFENDMwMDRGNkNDMiAvKiBQcm9qZWN0IG9iamVjdCAq
LzsKLX0KSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvQ29yZVNp
bXVsYXRvclNQSS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRU
ZXN0UmVsYXkvQ29yZVNpbXVsYXRvclNQSS5oCShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29scy9M
YXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0NvcmVTaW11bGF0b3JTUEkuaAkobm9uZXhp
c3RlbnQpCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgX19oYXNfaW5j
bHVkZSg8Q29yZVNpbXVsYXRvci9Db3JlU2ltdWxhdG9yLmg+KQotCi0vKiBGSVhNRTogUmVtb3Zl
IHRoZSBiZWxvdyAjZGVmaW5lIG9uY2Ugd2UgcmVxdWlyZSBYY29kZSA3LjMgd2l0aCBpT1MgOS4z
IFNESyBvciBuZXdlci4gKi8KLSNkZWZpbmUgX19jb3Jlc2ltX3VuYXZhaWxhYmxlX21zZyhtc2cp
Ci0jaW1wb3J0IDxDb3JlU2ltdWxhdG9yL0NvcmVTaW11bGF0b3IuaD4KLQotLyogRklYTUU6IEFs
d2F5cyB1c2UgU2ltU2VydmljZUNvbnRleHQgb25jZSB3ZSByZXF1aXJlIFhjb2RlIDcuMyB3aXRo
IGlPUyA5LjMgU0RLIG9yIG5ld2VyLiAqLwotI2RlZmluZSBVU0VfU0lNX1NFUlZJQ0VfQ09OVEVY
VCBkZWZpbmVkKENPUkVTSU1fQVBJX01BWF9BTExPV0VEKQotCi0jZWxzZQotCi0jaW1wb3J0IDxG
b3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2RlZmluZSBVU0VfU0lNX1NFUlZJQ0VfQ09OVEVY
VCAxCi0KLSNkZWZpbmUga1NpbURldmljZUxhdW5jaEFwcGxpY2F0aW9uQXJndW1lbnRzIEAiYXJn
dW1lbnRzIgotI2RlZmluZSBrU2ltRGV2aWNlTGF1bmNoQXBwbGljYXRpb25FbnZpcm9ubWVudCBA
ImVudmlyb25tZW50IgotCi1AaW50ZXJmYWNlIFNpbURldmljZSA6IE5TT2JqZWN0Ci0tIChCT09M
KWluc3RhbGxBcHBsaWNhdGlvbjooTlNVUkwgKilpbnN0YWxsVVJMIHdpdGhPcHRpb25zOihOU0Rp
Y3Rpb25hcnkgKilvcHRpb25zIGVycm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICopZXJy
b3I7Ci0tIChwaWRfdClsYXVuY2hBcHBsaWNhdGlvbldpdGhJRDooTlNTdHJpbmcgKilidW5kbGVJ
RCBvcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zIGVycm9yOihOU0Vycm9yICogX19hdXRv
cmVsZWFzaW5nICopZXJyb3I7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgU2ltRGV2aWNlU2V0IDogTlNP
YmplY3QKLUBwcm9wZXJ0eSAocmVhZG9ubHksIGNvcHkpIE5TRGljdGlvbmFyeSAqZGV2aWNlc0J5
VURJRDsKLUBlbmQKLQotQGludGVyZmFjZSBTaW1TZXJ2aWNlQ29udGV4dCA6IE5TT2JqZWN0Ci0r
KFNpbVNlcnZpY2VDb250ZXh0ICopc2hhcmVkU2VydmljZUNvbnRleHRGb3JEZXZlbG9wZXJEaXI6
KE5TU3RyaW5nICopZGV2ZWxvcGVyRGlyIGVycm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5n
ICopZXJyb3I7Ci0tKFNpbURldmljZVNldCAqKWRlZmF1bHREZXZpY2VTZXRXaXRoRXJyb3I6KE5T
RXJyb3IgKiBfX2F1dG9yZWxlYXNpbmcgKillcnJvcjsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBU
b29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxh
eS5oCShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVz
dFJlbGF5L0xUUGlwZVJlbGF5LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwzNiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBMVFBpcGVSZWxheV9oCi0jZGVmaW5lIExUUGlwZVJlbGF5X2gKLQot
I2ltcG9ydCAiTFRSZWxheS5oIgotCi1AaW50ZXJmYWNlIExUUGlwZVJlbGF5IDogTlNPYmplY3Qg
PExUUmVsYXk+Ci1AcHJvcGVydHkgKHdlYWspIGlkPExUUmVsYXlEZWxlZ2F0ZT4gcmVsYXlEZWxl
Z2F0ZTsKLS0gKGlkKWluaXRXaXRoUHJlZml4OihOU1N0cmluZyAqKXByZWZpeDsKLUBlbmQKLQot
I2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlw
ZVJlbGF5Lm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RS
ZWxheS9MVFBpcGVSZWxheS5tCShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29scy9MYXlvdXRUZXN0
UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0JKG5vbmV4aXN0ZW50KQpAQCAtMSwx
NTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgIkxUUGlwZVJlbGF5LmgiCi0KLSNpbXBv
cnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5j
bHVkZSA8c3lzL3R5cGVzLmg+Ci0KLUBpbnRlcmZhY2UgTFRQaXBlUmVsYXkgKCkKLUBwcm9wZXJ0
eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKmZpZm9QcmVmaXg7Ci1AcHJvcGVydHkgKHN0
cm9uZykgTlNPdXRwdXRTdHJlYW0gKnN0YW5kYXJkSW5wdXRQaXBlOwotQHByb3BlcnR5IChzdHJv
bmcpIE5TSW5wdXRTdHJlYW0gKnN0YW5kYXJkT3V0cHV0UGlwZTsKLUBwcm9wZXJ0eSAoc3Ryb25n
KSBOU0lucHV0U3RyZWFtICpzdGFuZGFyZEVycm9yUGlwZTsKLQotLSAodm9pZCljcmVhdGVGSUZP
czsKLS0gKHZvaWQpZGVzdHJveUZJRk9zOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gTFRQaXBl
UmVsYXkKLQotLSAoTlNTdHJpbmcgKilpblBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1By
ZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9JTiJdOwotfQotCi0tIChOU1N0cmluZyAq
KW91dFBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGlu
Z1N0cmluZzpAIl9PVVQiXTsKLX0KLQotLSAoTlNTdHJpbmcgKillcnJvclBpcGVQYXRoCi17Ci0g
ICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9FUlJPUiJd
OwotfQotCi0tIChOU091dHB1dFN0cmVhbSAqKSBvdXRwdXRTdHJlYW0KLXsKLSAgICByZXR1cm4g
X3N0YW5kYXJkSW5wdXRQaXBlOwotfQotCi0tIChpZClpbml0V2l0aFByZWZpeDooTlNTdHJpbmcg
KilwcmVmaXgKLXsKLSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKSB7Ci0gICAgICAgIF9m
aWZvUHJlZml4ID0gcHJlZml4OwotICAgICAgICBbc2VsZiBkZXN0cm95RklGT3NdOwotICAgIH0K
LSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXR1cAotewotICAgIFtzZWxmIGRlc3Ry
b3lGSUZPc107Ci0gICAgW3NlbGYgY3JlYXRlRklGT3NdOwotfQotCi0tICh2b2lkKXRlYXJEb3du
Ci17Ci0gICAgW3NlbGYgZGVzdHJveUZJRk9zXTsKLX0KLQotLSh2b2lkKSBjb25uZWN0Ci17Ci0g
ICAgX3N0YW5kYXJkSW5wdXRQaXBlID0gW05TT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbVRvRmls
ZUF0UGF0aDpbc2VsZiBpblBpcGVQYXRoXSBhcHBlbmQ6WUVTXTsKLSAgICBfc3RhbmRhcmRPdXRw
dXRQaXBlID0gW05TSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW1XaXRoRmlsZUF0UGF0aDpbc2VsZiBv
dXRQaXBlUGF0aF1dOwotICAgIF9zdGFuZGFyZEVycm9yUGlwZSA9IFtOU0lucHV0U3RyZWFtIGlu
cHV0U3RyZWFtV2l0aEZpbGVBdFBhdGg6W3NlbGYgZXJyb3JQaXBlUGF0aF1dOwotCi0gICAgW1tz
ZWxmIHN0YW5kYXJkSW5wdXRQaXBlXSBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICBbW3NlbGYgc3Rh
bmRhcmRPdXRwdXRQaXBlXSBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRF
cnJvclBpcGVdIHNldERlbGVnYXRlOnNlbGZdOwotCi0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0
UGlwZV0gc2NoZWR1bGVJblJ1bkxvb3A6W05TUnVuTG9vcCBtYWluUnVuTG9vcF0gZm9yTW9kZTpO
U0RlZmF1bHRSdW5Mb29wTW9kZV07Ci0gICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JQaXBlXSBzY2hl
ZHVsZUluUnVuTG9vcDpbTlNSdW5Mb29wIG1haW5SdW5Mb29wXSBmb3JNb2RlOk5TRGVmYXVsdFJ1
bkxvb3BNb2RlXTsKLQotICAgIFtbc2VsZiBzdGFuZGFyZElucHV0UGlwZV0gb3Blbl07Ci0gICAg
W1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gb3Blbl07Ci0gICAgW1tzZWxmIHN0YW5kYXJkRXJy
b3JQaXBlXSBvcGVuXTsKLQotICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRDb25uZWN0XTsK
LX0KLQotLSAodm9pZClkaXNjb25uZWN0Ci17Ci0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlw
ZV0gY2xvc2VdOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yUGlwZV0gY2xvc2VdOwotICAgIFtb
c2VsZiBzdGFuZGFyZElucHV0UGlwZV0gY2xvc2VdOwotICAgIFtbc2VsZiByZWxheURlbGVnYXRl
XSBkaWREaXNjb25uZWN0XTsKLX0KLQotLSAodm9pZCljcmVhdGVGSUZPcwotewotICAgIG1rZmlm
byhbW3NlbGYgaW5QaXBlUGF0aF0gVVRGOFN0cmluZ10sIDA2NjYpOwotICAgIG1rZmlmbyhbW3Nl
bGYgb3V0UGlwZVBhdGhdIFVURjhTdHJpbmddLCAwNjY2KTsKLSAgICBta2ZpZm8oW1tzZWxmIGVy
cm9yUGlwZVBhdGhdIFVURjhTdHJpbmddLCAwNjY2KTsKLX0KLQotLSAodm9pZClkZXN0cm95RklG
T3MKLXsKLSAgICB1bmxpbmsoW1tzZWxmIGluUGlwZVBhdGhdIFVURjhTdHJpbmddKTsKLSAgICB1
bmxpbmsoW1tzZWxmIG91dFBpcGVQYXRoXSBVVEY4U3RyaW5nXSk7Ci0gICAgdW5saW5rKFtbc2Vs
ZiBlcnJvclBpcGVQYXRoXSBVVEY4U3RyaW5nXSk7Ci19Ci0KLS0gKHZvaWQpIHJlbGF5U3RyZWFt
OihOU0lucHV0U3RyZWFtICopc3RyZWFtCi17Ci0gICAgdWludDhfdCBieXRlc1sxMDI0XTsKLSAg
ICBOU0ludGVnZXIgYnl0ZXNSZWFkID0gW3N0cmVhbSByZWFkOmJ5dGVzIG1heExlbmd0aDoxMDI0
XTsKLSAgICBOU0RhdGEgKmRhdGEgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6Ynl0ZXMgbGVuZ3Ro
OmJ5dGVzUmVhZF07Ci0KLSAgICBpZiAoc3RyZWFtID09IFtzZWxmIHN0YW5kYXJkT3V0cHV0UGlw
ZV0pCi0gICAgICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRSZWNlaXZlU3Rkb3V0RGF0YTpk
YXRhXTsKLSAgICBlbHNlCi0gICAgICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRSZWNlaXZl
U3RkZXJyRGF0YTpkYXRhXTsKLX0KLQotLSAodm9pZClzdHJlYW06KE5TU3RyZWFtICopYVN0cmVh
bSBoYW5kbGVFdmVudDooTlNTdHJlYW1FdmVudClldmVudENvZGUKLXsKLSAgICBzd2l0Y2ggKGV2
ZW50Q29kZSkgewotICAgIGNhc2UgTlNTdHJlYW1FdmVudE5vbmU6Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgTlNTdHJlYW1FdmVudEhhc0J5dGVzQXZhaWxhYmxlOgotICAgICAgICBbc2VsZiBy
ZWxheVN0cmVhbTooTlNJbnB1dFN0cmVhbSAqKWFTdHJlYW1dOwotICAgIGNhc2UgTlNTdHJlYW1F
dmVudEhhc1NwYWNlQXZhaWxhYmxlOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5TU3RyZWFt
RXZlbnRPcGVuQ29tcGxldGVkOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5TU3RyZWFtRXZl
bnRFbmRFbmNvdW50ZXJlZDoKLSAgICAgICAgW1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZENyYXNo
V2l0aE1lc3NhZ2U6bmlsXTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOU1N0cmVhbUV2ZW50
RXJyb3JPY2N1cnJlZDoKLSAgICAgICAgW1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZENyYXNoV2l0
aE1lc3NhZ2U6W1thU3RyZWFtIHN0cmVhbUVycm9yXSBkZXNjcmlwdGlvbl1dOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci19Ci0KLUBlbmQKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlv
dXRUZXN0UmVsYXkvTFRSZWxheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxh
eS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheS5oCShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29scy9M
YXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXkuaAkobm9uZXhpc3RlbnQpCkBA
IC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIExUUmVsYXlfaAotI2RlZmluZSBM
VFJlbGF5X2gKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLUBwcm90b2Nv
bCBMVFJlbGF5RGVsZWdhdGUgPE5TT2JqZWN0PgotLSAodm9pZClkaWRDb25uZWN0OwotLSAodm9p
ZClkaWREaXNjb25uZWN0OwotLSAodm9pZClkaWRDcmFzaFdpdGhNZXNzYWdlOihOU1N0cmluZyAq
KW1lc3NhZ2U7Ci0tICh2b2lkKWRpZFJlY2VpdmVTdGRvdXREYXRhOihOU0RhdGEgKilkYXRhOwot
LSAodm9pZClkaWRSZWNlaXZlU3RkZXJyRGF0YTooTlNEYXRhICopZGF0YTsKLUBlbmQKLQotQHBy
b3RvY29sIExUUmVsYXkgPE5TT2JqZWN0LCBOU1N0cmVhbURlbGVnYXRlPgotLSAodm9pZClzZXR1
cDsKLS0gKHZvaWQpdGVhckRvd247Ci0tICh2b2lkKWNvbm5lY3Q7Ci0tICh2b2lkKWRpc2Nvbm5l
Y3Q7Ci1AcHJvcGVydHkgKHdlYWspIGlkPExUUmVsYXlEZWxlZ2F0ZT4gcmVsYXlEZWxlZ2F0ZTsK
LUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNPdXRwdXRTdHJlYW0gKm91dHB1dFN0cmVh
bTsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVz
dFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVz
dFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAyMDk4
ODYpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250
cm9sbGVyLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5k
ZWYgTFRSZWxheUNvbnRyb2xsZXJfaAotI2RlZmluZSBMVFJlbGF5Q29udHJvbGxlcl9oCi0KLSNp
bXBvcnQgIkxUUmVsYXkuaCIKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0K
LUBjbGFzcyBTaW1EZXZpY2U7Ci0KLUBpbnRlcmZhY2UgTFRSZWxheUNvbnRyb2xsZXIgOiBOU09i
amVjdCA8TFRSZWxheURlbGVnYXRlPgotLSAoaWQpaW5pdFdpdGhEZXZpY2U6KFNpbURldmljZSAq
KWRldmljZSBwcm9kdWN0RGlyOihOU1N0cmluZyAqKXByb2R1Y3REaXIgYXBwUGF0aDooTlNTdHJp
bmcgKilhcHBQYXRoIGRldmljZVVESUQ6KE5TVVVJRCAqKXVkaWQgZHVtcFRvb2xBcmd1bWVudHM6
KE5TQXJyYXkgKilhcmd1bWVudHM7Ci0tICh2b2lkKXN0YXJ0OwotLSAodm9pZClmaW5pc2g7Ci1A
ZW5kCi0KLSNlbmRpZgpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxh
eS9MVFJlbGF5Q29udHJvbGxlci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxh
eS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIubQkocmV2aXNpb24gMjA5ODg2KQor
KysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxl
ci5tCShub25leGlzdGVudCkKQEAgLTEsMjcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0
ICJMVFJlbGF5Q29udHJvbGxlci5oIgotCi0jaW1wb3J0ICJDb3JlU2ltdWxhdG9yU1BJLmgiCi0j
aW1wb3J0ICJMVFBpcGVSZWxheS5oIgotI2ltcG9ydCA8QXBwS2l0L0FwcEtpdC5oPgotI2ltcG9y
dCA8Y3J0X2V4dGVybnMuaD4KLQotQGludGVyZmFjZSBMVFJlbGF5Q29udHJvbGxlciAoKQotQHBy
b3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBkaXNwYXRjaF9zb3VyY2VfdCBzdGFuZGFyZElucHV0
RGlzcGF0Y2hTb3VyY2U7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TRmlsZUhhbmRs
ZSAqc3RhbmRhcmRPdXRwdXQ7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TRmlsZUhh
bmRsZSAqc3RhbmRhcmRFcnJvcjsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJp
bmcgKmlwY0lkZW50aWZpZXI7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TU3RyaW5n
ICphcHBCdW5kbGVJZGVudGlmaWVyOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU1N0
cmluZyAqYXBwUGF0aDsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNVVUlEICpkZXZp
Y2VVRElEOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU0FycmF5ICpkdW1wVG9vbEFy
Z3VtZW50czsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKnByb2R1Y3RE
aXI7Ci1AcHJvcGVydHkgKHN0cm9uZykgU2ltRGV2aWNlICpkZXZpY2U7Ci1AcHJvcGVydHkgKHN0
cm9uZykgaWQ8TFRSZWxheT4gcmVsYXk7Ci1AcHJvcGVydHkgcGlkX3QgcGlkOwotQHByb3BlcnR5
IChzdHJvbmcpIGRpc3BhdGNoX3NvdXJjZV90IGFwcERpc3BhdGNoU291cmNlOwotQGVuZAotCi1A
aW1wbGVtZW50YXRpb24gTFRSZWxheUNvbnRyb2xsZXIKLQotLSAoaWQpaW5pdFdpdGhEZXZpY2U6
KFNpbURldmljZSAqKWRldmljZSBwcm9kdWN0RGlyOihOU1N0cmluZyAqKXByb2R1Y3REaXIgYXBw
UGF0aDooTlNTdHJpbmcgKilhcHBQYXRoIGRldmljZVVESUQ6KE5TVVVJRCAqKXVkaWQgZHVtcFRv
b2xBcmd1bWVudHM6KE5TQXJyYXkgKilhcmd1bWVudHMKLXsKLSAgICBpZiAoKHNlbGYgPSBbc3Vw
ZXIgaW5pdF0pKSB7Ci0gICAgICAgIF9kZXZpY2UgPSBkZXZpY2U7Ci0gICAgICAgIF9wcm9kdWN0
RGlyID0gcHJvZHVjdERpcjsKLSAgICAgICAgX2FwcFBhdGggPSBhcHBQYXRoOwotICAgICAgICBf
YXBwQnVuZGxlSWRlbnRpZmllciA9IFtbTlNCdW5kbGUgYnVuZGxlV2l0aFBhdGg6YXBwUGF0aF0g
YnVuZGxlSWRlbnRpZmllcl07Ci0gICAgICAgIF9kZXZpY2VVRElEID0gdWRpZDsKLSAgICAgICAg
X2R1bXBUb29sQXJndW1lbnRzID0gYXJndW1lbnRzOwotICAgICAgICBfc3RhbmRhcmRJbnB1dERp
c3BhdGNoU291cmNlID0gZGlzcGF0Y2hfc291cmNlX2NyZWF0ZShESVNQQVRDSF9TT1VSQ0VfVFlQ
RV9SRUFELCBTVERJTl9GSUxFTk8sIDAsIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCkpOwotICAg
ICAgICBfc3RhbmRhcmRPdXRwdXQgPSBbTlNGaWxlSGFuZGxlIGZpbGVIYW5kbGVXaXRoU3RhbmRh
cmRPdXRwdXRdOwotICAgICAgICBfc3RhbmRhcmRFcnJvciA9IFtOU0ZpbGVIYW5kbGUgZmlsZUhh
bmRsZVdpdGhTdGFuZGFyZEVycm9yXTsKLQotICAgICAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2V2
ZW50X2hhbmRsZXIoX3N0YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJjZSwgXnsKLSAgICAgICAgICAg
IHVpbnQ4X3QgYnVmZmVyWzEwMjRdOwotICAgICAgICAgICAgc3NpemVfdCBsZW4gPSByZWFkKFNU
RElOX0ZJTEVOTywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7Ci0gICAgICAgICAgICBpZiAobGVu
ID4gMCkgewotICAgICAgICAgICAgICAgIEB0cnkgewotICAgICAgICAgICAgICAgICAgICBbW1tz
ZWxmIHJlbGF5XSBvdXRwdXRTdHJlYW1dIHdyaXRlOmJ1ZmZlciBtYXhMZW5ndGg6bGVuXTsKLSAg
ICAgICAgICAgICAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24gKmUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gQnJva2VuIHBpcGUgLSB0aGUgZHVtcCB0b29sIGNyYXNoZWQuIFRpbWUgdG8gZGll
LgotICAgICAgICAgICAgICAgICAgICBbc2VsZiBkaWRDcmFzaFdpdGhNZXNzYWdlOm5pbF07Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAv
LyBFT0YgUmVjZWl2ZWQgb24gdGhlIHJlbGF5J3Mgc3RhbmRhcmQgaW5wdXQuCi0gICAgICAgICAg
ICAgICAgW3NlbGYgZmluaXNoXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAg
ICAgX3JlbGF5ID0gW1tMVFBpcGVSZWxheSBhbGxvY10gaW5pdFdpdGhQcmVmaXg6W0AiL3RtcCIg
c3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OnNlbGYuaXBjSWRlbnRpZmllcl1dOwotICAg
ICAgICBbX3JlbGF5IHNldFJlbGF5RGVsZWdhdGU6c2VsZl07Ci0gICAgfQotICAgIHJldHVybiBz
ZWxmOwotfQotCi0tIChOU1N0cmluZyAqKWlwY0lkZW50aWZpZXIKLXsKLSAgICByZXR1cm4gW05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQC0lQCIsIHNlbGYuYXBwQnVuZGxlSWRlbnRpZmll
ciwgc2VsZi5kZXZpY2VVRElELlVVSURTdHJpbmddOwotfQotCi0tIChOU1N0cmluZyAqKXByb2Nl
c3NOYW1lCi17Ci0gICAgcmV0dXJuIFtzZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIgY29tcG9uZW50
c1NlcGFyYXRlZEJ5U3RyaW5nOkAiLiJdLmxhc3RPYmplY3Q7Ci19Ci0KLS0gKHZvaWQpZGlkUmVj
ZWl2ZVN0ZG91dERhdGE6KE5TRGF0YSAqKWRhdGEKLXsKLSAgICBAdHJ5IHsKLSAgICAgICAgW1tz
ZWxmIHN0YW5kYXJkT3V0cHV0XSB3cml0ZURhdGE6ZGF0YV07Ci0gICAgfSBAY2F0Y2ggKE5TRXhj
ZXB0aW9uICpleGNlcHRpb24pIHsKLSAgICAgICAgLy8gTlNGaWxlSGFuZGxlT3BlcmF0aW9uRXhj
ZXB0aW9uCi0gICAgICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhlIHRlc3QgaGFybmVzcyBzdG9wcGVk
IGxpc3RlbmluZyB0byB1cywKLSAgICAgICAgLy8gcHJvYmFibHkgYmVjYXVzZSB3ZSB0aW1lZCBv
dXQgb3IgYSBydW4gd2FzIGNhbmNlbGVkLgotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0g
ICAgfQotfQotCi0tICh2b2lkKWRpZFJlY2VpdmVTdGRlcnJEYXRhOihOU0RhdGEgKilkYXRhCi17
Ci0gICAgQHRyeSB7Ci0gICAgICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSB3cml0ZURhdGE6ZGF0
YV07Ci0gICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRpb24pIHsKLSAgICAgICAgLy8g
TlNGaWxlSGFuZGxlT3BlcmF0aW9uRXhjZXB0aW9uCi0gICAgICAgIC8vIEJyb2tlbiBwaXBlIC0g
dGhlIHRlc3QgaGFybmVzcyBzdG9wcGVkIGxpc3RlbmluZyB0byB1cywKLSAgICAgICAgLy8gcHJv
YmFibHkgYmVjYXVzZSB3ZSB0aW1lZCBvdXQgb3IgYSBydW4gd2FzIGNhbmNlbGVkLgotICAgICAg
ICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotfQotCi0tICh2b2lkKWRpZERpc2Nvbm5lY3QK
LXsKLSAgICBkaXNwYXRjaF9zdXNwZW5kKFtzZWxmIHN0YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJj
ZV0pOwotfQotCi0tICh2b2lkKWRpZENvbm5lY3QKLXsKLSAgICBkaXNwYXRjaF9yZXN1bWUoW3Nl
bGYgc3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNlXSk7Ci19Ci0KLS0gKHZvaWQpZGlkQ3Jhc2hX
aXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgW1tzZWxmIHJlbGF5XSBkaXNj
b25uZWN0XTsKLSAgICBOU1N0cmluZyAqY3Jhc2hNZXNzYWdlID0gW05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCJcbiNDUkFTSEVEIC0gJUAgKHBpZCAlZClcbiIsIFtzZWxmIHByb2Nlc3NOYW1l
XSwgW3NlbGYgcGlkXV07Ci0KLSAgICBpZiAobWVzc2FnZSkKLSAgICAgICAgY3Jhc2hNZXNzYWdl
ID0gW2NyYXNoTWVzc2FnZSBzdHJpbmdCeUFwcGVuZGluZ0Zvcm1hdDpAIiVAXG4iLCBtZXNzYWdl
XTsKLQotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSB3cml0ZURhdGE6W2NyYXNoTWVzc2FnZSBk
YXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ11dOwotICAgIFtbc2VsZiBzdGFu
ZGFyZEVycm9yXSBjbG9zZUZpbGVdOwotICAgIFtbc2VsZiBzdGFuZGFyZE91dHB1dF0gY2xvc2VG
aWxlXTsKLSAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci19Ci0KLS0gKHZvaWQpaW5zdGFsbEFwcAot
ewotICAgIE5TRGljdGlvbmFyeSAqaW5zdGFsbE9wdGlvbnMgPSBAewotICAgICAgICAoTlNTdHJp
bmcgKilrQ0ZCdW5kbGVJZGVudGlmaWVyS2V5OiBzZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIsCi0g
ICAgfTsKLQotICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOwotICAgIEJPT0wgaW5zdGFsbGVkID0g
W3NlbGYuZGV2aWNlIGluc3RhbGxBcHBsaWNhdGlvbjpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnNl
bGYuYXBwUGF0aF0gd2l0aE9wdGlvbnM6aW5zdGFsbE9wdGlvbnMgZXJyb3I6JmVycm9yXTsKLSAg
ICBpZiAoIWluc3RhbGxlZCkgewotICAgICAgICBOU0xvZyhAIkNvdWxkbid0IGluc3RhbGwgJUA6
ICVAIiwgc2VsZi5hcHBQYXRoLCBlcnJvci5kZXNjcmlwdGlvbik7Ci0gICAgICAgIGV4aXQoRVhJ
VF9GQUlMVVJFKTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpa2lsbEFwcAotewotICAgIGRpc3BhdGNo
X3NvdXJjZV90IGRpc3BhdGNoID0gW3NlbGYgYXBwRGlzcGF0Y2hTb3VyY2VdOwotCi0gICAgaWYg
KGRpc3BhdGNoKQotICAgICAgICBkaXNwYXRjaF9zb3VyY2VfY2FuY2VsKGRpc3BhdGNoKTsKLQot
ICAgIGlmIChbc2VsZiBwaWRdID4gMSkgewotICAgICAgICBraWxsKHNlbGYucGlkLCBTSUdLSUxM
KTsKLSAgICAgICAgW3NlbGYgc2V0UGlkOi0xXTsKLSAgICB9Ci0gICAgW3NlbGYgc2V0QXBwRGlz
cGF0Y2hTb3VyY2U6bmlsXTsKLX0KLQotLSAoTlNEaWN0aW9uYXJ5ICopX2Vudmlyb25tZW50VmFy
aWFibGVzCi17Ci0gICAgc3RhdGljIE5TRGljdGlvbmFyeSAqZW52aXJvbm1lbnRWYXJpYWJsZXM7
Ci0gICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlOwotCi0gICAgZGlzcGF0Y2hfb25jZSgm
b25jZSwgXnsKLSAgICAgICAgTlNTdHJpbmcgKnByb2R1Y3REaXJlY3RvcnkgPSBbc2VsZiBwcm9k
dWN0RGlyXTsKLQotICAgICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gW0B7
Ci0gICAgICAgICAgICBAIklQQ19JREVOVElGSUVSIjogc2VsZi5pcGNJZGVudGlmaWVyLAotICAg
ICAgICAgICAgQCJEWUxEX0ZSQU1FV09SS19QQVRIIjogcHJvZHVjdERpcmVjdG9yeSwKLSAgICAg
ICAgICAgIEAiX19YUENfRFlMRF9GUkFNRVdPUktfUEFUSCI6IHByb2R1Y3REaXJlY3RvcnksCi0g
ICAgICAgICAgICBAIkRZTERfTElCUkFSWV9QQVRIIjogcHJvZHVjdERpcmVjdG9yeSwKLSAgICAg
ICAgICAgIEAiX19YUENfRFlMRF9MSUJSQVJZX1BBVEgiOiBwcm9kdWN0RGlyZWN0b3J5LAotICAg
ICAgICB9IG11dGFibGVDb3B5XTsKLQotICAgICAgICBmb3IgKE5TU3RyaW5nICprZXlOYW1lIGlu
IEBbQCJEWUxEX0lOU0VSVF9MSUJSQVJJRVMiLCBAIk1hbGxvY1N0YWNrTG9nZ2luZyIsIEAiTE9D
QUxfUkVTT1VSQ0VfUk9PVCIsIEAiRFVNUFJFTkRFUlRSRUVfVEVNUCJdKSB7Ci0gICAgICAgICAg
ICBjb25zdCBjaGFyKiB2YWx1ZSA9IGdldGVudihba2V5TmFtZSBVVEY4U3RyaW5nXSk7Ci0gICAg
ICAgICAgICBpZiAodmFsdWUgJiYgc3RybGVuKHZhbHVlKSkgewotICAgICAgICAgICAgICAgIE5T
U3RyaW5nICpuc1ZhbHVlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnZhbHVlXTsK
LSAgICAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6bnNWYWx1ZSBmb3JLZXk6a2V5
TmFtZV07Ci0gICAgICAgICAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0Om5zVmFsdWUgZm9y
S2V5OltAIl9fWFBDXyIgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6a2V5TmFtZV1dOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChjaGFyKiogZW52cCA9ICpfTlNHZXRF
bnZpcm9uKCk7ICplbnZwOyBlbnZwKyspIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVudiA9
ICplbnZwOwotICAgICAgICAgICAgaWYgKCFzdHJuY21wKCJKU0NfIiwgZW52LCA0KSB8fCAhc3Ry
bmNtcCgiX19YUENfSlNDXyIsIGVudiwgMTApKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hh
ciogZXF1YWwgPSBzdHJjaHIoZW52LCAnPScpOwotICAgICAgICAgICAgICAgIGlmICghZXF1YWwp
IHsKLSAgICAgICAgICAgICAgICAgICAgTlNMb2coQCJNaXNzaW5nICc9JyBpbiBlbnYgdmFyICcl
cyciLCBlbnYpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heEtleUxlbmd0aCA9
IDI1NjsKLSAgICAgICAgICAgICAgICBzaXplX3Qga2V5TGVuZ3RoID0gZXF1YWwgLSBlbnY7Ci0g
ICAgICAgICAgICAgICAgaWYgKGtleUxlbmd0aCA+PSBtYXhLZXlMZW5ndGgpIHsKLSAgICAgICAg
ICAgICAgICAgICAgTlNMb2coQCJFbnYgdmFyICclcycgaXMgdG9vIGxvbmciLCBlbnYpOwotICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICBjaGFyIGtleVttYXhLZXlMZW5ndGhdOwotICAgICAgICAgICAgICAgIHN0cm5jcHko
a2V5LCBlbnYsIGtleUxlbmd0aCk7Ci0gICAgICAgICAgICAgICAga2V5W2tleUxlbmd0aF0gPSAn
XDAnOwotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhbHVlID0gZXF1YWwgKyAxOwotCi0g
ICAgICAgICAgICAgICAgTlNTdHJpbmcgKm5zS2V5ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4
U3RyaW5nOmtleV07Ci0gICAgICAgICAgICAgICAgTlNTdHJpbmcgKm5zVmFsdWUgPSBbTlNTdHJp
bmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6dmFsdWVdOwotICAgICAgICAgICAgICAgIFtkaWN0aW9u
YXJ5IHNldE9iamVjdDpuc1ZhbHVlIGZvcktleTpuc0tleV07Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICBlbnZpcm9ubWVudFZhcmlhYmxlcyA9IFtkaWN0aW9uYXJ5IGNvcHld
OwotICAgIH0pOwotCi0gICAgcmV0dXJuIGVudmlyb25tZW50VmFyaWFibGVzOwotfQotCi0tICh2
b2lkKWxhdW5jaEFwcAotewotICAgIE5TRGljdGlvbmFyeSAqbGF1bmNoT3B0aW9ucyA9IEB7Ci0g
ICAgICAgIGtTaW1EZXZpY2VMYXVuY2hBcHBsaWNhdGlvbkVudmlyb25tZW50OiBbc2VsZiBfZW52
aXJvbm1lbnRWYXJpYWJsZXNdLAotICAgICAgICBrU2ltRGV2aWNlTGF1bmNoQXBwbGljYXRpb25B
cmd1bWVudHM6IFtzZWxmIGR1bXBUb29sQXJndW1lbnRzXSwKLSAgICB9OwotCi0gICAgTlNFcnJv
ciAqZXJyb3I7Ci0gICAgcGlkX3QgcGlkID0gW3NlbGYuZGV2aWNlIGxhdW5jaEFwcGxpY2F0aW9u
V2l0aElEOnNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciBvcHRpb25zOmxhdW5jaE9wdGlvbnMgZXJy
b3I6JmVycm9yXTsKLQotICAgIGlmIChwaWQgPCAwKSB7Ci0gICAgICAgIE5TTG9nKEAiQ291bGRu
J3QgbGF1bmNoICVAOiAlQCIsIHNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciwgZXJyb3IuZGVzY3Jp
cHRpb24pOwotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotCi0gICAgW3NlbGYg
c2V0UGlkOnBpZF07Ci0KLSAgICBkaXNwYXRjaF9xdWV1ZV90IHF1ZXVlID0gZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKTsKLSAgICBkaXNwYXRjaF9zb3VyY2VfdCBzaW11bGF0b3JBcHBFeGl0RGlz
cGF0Y2hTb3VyY2UgPSBkaXNwYXRjaF9zb3VyY2VfY3JlYXRlKERJU1BBVENIX1NPVVJDRV9UWVBF
X1BST0MsIFtzZWxmIHBpZF0sIERJU1BBVENIX1BST0NfRVhJVCwgcXVldWUpOwotICAgIFtzZWxm
IHNldEFwcERpc3BhdGNoU291cmNlOnNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZV07Ci0g
ICAgZGlzcGF0Y2hfc291cmNlX3NldF9ldmVudF9oYW5kbGVyKHNpbXVsYXRvckFwcEV4aXREaXNw
YXRjaFNvdXJjZSwgXnsKLSAgICAgICAgZGlzcGF0Y2hfc291cmNlX2NhbmNlbChzaW11bGF0b3JB
cHBFeGl0RGlzcGF0Y2hTb3VyY2UpOwotICAgICAgICBbc2VsZiBkaWRDcmFzaFdpdGhNZXNzYWdl
Om5pbF07Ci0gICAgfSk7Ci0gICAgZGlzcGF0Y2hfcmVzdW1lKHNpbXVsYXRvckFwcEV4aXREaXNw
YXRjaFNvdXJjZSk7Ci19Ci0KLS0gKHZvaWQpc3RhcnQKLXsKLSAgICBbc2VsZiBpbnN0YWxsQXBw
XTsKLSAgICBbW3NlbGYgcmVsYXldIHNldHVwXTsKLSAgICBbc2VsZiBsYXVuY2hBcHBdOwotICAg
IFtbc2VsZiByZWxheV0gY29ubmVjdF07Ci19Ci0KLS0gKHZvaWQpZmluaXNoCi17Ci0gICAgW1tz
ZWxmIHJlbGF5XSBkaXNjb25uZWN0XTsKLSAgICBbc2VsZiBraWxsQXBwXTsKLSAgICBleGl0KEVY
SVRfU1VDQ0VTUyk7Ci19Ci0KLUBlbmQKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlv
dXRUZXN0UmVsYXkvbWFpbi5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9M
YXlvdXRUZXN0UmVsYXkvbWFpbi5tCShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29scy9MYXlvdXRU
ZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L21haW4ubQkobm9uZXhpc3RlbnQpCkBAIC0xLDEzMyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiQ29yZVNpbXVsYXRvclNQSS5oIgot
I2ltcG9ydCAiTFRSZWxheUNvbnRyb2xsZXIuaCIKLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRh
dGlvbi5oPgotCi1zdGF0aWMgTFRSZWxheUNvbnRyb2xsZXIgKnJlbGF5Q29udHJvbGxlcjsKLQot
dm9pZCB1c2FnZSgpCi17Ci0gICAgTlNTdHJpbmcgKmhlbHBUZXh0ID0gQCJMYXlvdXRUZXN0UmVs
YXk6IHJ1biBhIGR1bXAgdG9vbCBpbiB0aGUgc2ltdWxhdG9yLiBOb3QgZm9yIGRpcmVjdCBjb25z
dW1wdGlvbi5cbiIKLSAgICAgICAgIlVzYWdlOiBMYXlvdXRUZXN0UmVsYXkgWy1oXSBbb3B0aW9u
c10gLS0gW2R1bXAgdG9vbCBhcmd1bWVudHNdXG4iCi0gICAgICAgICJSZXF1aXJlZCBvcHRpb25z
OlxuIgotICAgICAgICAiICAgIC11ZGlkIDxpZGVudGlmaWVyPiAgICAgICBTaW11bGF0b3IgZGV2
aWNlIGlkZW50aWZpZXJcbiIKLSAgICAgICAgIiAgICAtYXBwIDxhcHBfcGF0aD4gICAgICAgICAg
UGF0aCB0byB0aGUgYnVpbHQgaU9TIC5hcHAgYnVuZGxlIGRpcmVjdG9yeS5cbiIKLSAgICAgICAg
IiAgICAtcHJvZHVjdERpciA8ZGlyPiAgICAgICAgL3BhdGgvdG8vV2ViS2l0QnVpbGQve2NvbmZp
Z3VyYXRpb259LXtzaG9ydCBwbGF0Zm9ybX0uXG4iOwotCi0gICAgZnByaW50ZihzdGRlcnIsICIl
c1xuIiwgW2hlbHBUZXh0IFVURjhTdHJpbmddKTsKLX0KLQotTlNTdHJpbmcgKmdldFJlcXVpcmVk
U3RyaW5nQXJndW1lbnQoTlNTdHJpbmcgKnBhcmFtZXRlcikKLXsKLSAgICBOU1VzZXJEZWZhdWx0
cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdOwotICAg
IE5TU3RyaW5nICphcmd1bWVudCA9IFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6cGFyYW1ldGVyXTsK
LQotICAgIGlmICghYXJndW1lbnQpIHsKLSAgICAgICAgTlNMb2coQCItJUAgaXMgcmVxdWlyZWQu
IiwgcGFyYW1ldGVyKTsKLSAgICAgICAgdXNhZ2UoKTsKLSAgICAgICAgZXhpdChFWElUX0ZBSUxV
UkUpOwotICAgIH0KLSAgICByZXR1cm4gYXJndW1lbnQ7Ci19Ci0KLU5TQXJyYXkgKmdldER1bXBU
b29sQXJndW1lbnRzKCkKLXsKLSAgICBOU011dGFibGVBcnJheSAqZHVtcFRvb2xBcmd1bWVudHMg
PSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKLSAgICBOU0FycmF5ICpwcm9jZXNzQXJn
cyA9IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gYXJndW1lbnRzXTsKLSAgICBCT09MIGFw
cGVuZGluZyA9IE5POwotICAgIGZvciAoTlNTdHJpbmcgKmFyZyBpbiBwcm9jZXNzQXJncykgewot
ICAgICAgICBpZiAoW2FyZyBpc0VxdWFsVG9TdHJpbmc6QCItLSJdKSB7Ci0gICAgICAgICAgICBh
cHBlbmRpbmcgPSBZRVM7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoYXBwZW5kaW5nKQotICAgICAgICAgICAgW2R1bXBUb29sQXJndW1lbnRzIGFkZE9iamVj
dDphcmddOwotICAgIH0KLSAgICByZXR1cm4gZHVtcFRvb2xBcmd1bWVudHM7Ci19Ci0KLXZvaWQg
ZmluaXNoKCkKLXsKLSAgICBbcmVsYXlDb250cm9sbGVyIGZpbmlzaF07Ci19Ci0KLXZvaWQgcmVj
ZWl2ZWRTaWduYWwoaW50IHNpZ25hbCkKLXsKLSAgICBleGl0KEVYSVRfU1VDQ0VTUyk7Ci19Ci0K
LWludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICogYXJndltdKQotewotICAgIEBhdXRvcmVs
ZWFzZXBvb2wgewotICAgICAgICBOU0FycmF5ICpoZWxwQXJndW1lbnRzID0gQFtAIi1oIiwgQCIt
LWhlbHAiXTsKLSAgICAgICAgZm9yIChOU1N0cmluZyAqaGVscEFyZ3VtZW50IGluIGhlbHBBcmd1
bWVudHMpIHsKLSAgICAgICAgICAgIGlmIChbW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBh
cmd1bWVudHNdIGluZGV4T2ZPYmplY3Q6aGVscEFyZ3VtZW50XSAhPSBOU05vdEZvdW5kKSB7Ci0g
ICAgICAgICAgICAgICAgdXNhZ2UoKTsKLSAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVS
RSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotI2lmIFVTRV9TSU1fU0VSVklDRV9DT05U
RVhUCi0gICAgICAgIE5TU3RyaW5nICpkZXZlbG9wZXJEaXJlY3RvcnkgPSBnZXRSZXF1aXJlZFN0
cmluZ0FyZ3VtZW50KEAiZGV2ZWxvcGVyRGlyIik7Ci0jZW5kaWYKLSAgICAgICAgTlNVVUlEICp1
ZGlkID0gW1tOU1VVSUQgYWxsb2NdIGluaXRXaXRoVVVJRFN0cmluZzpnZXRSZXF1aXJlZFN0cmlu
Z0FyZ3VtZW50KEAidWRpZCIpXTsKLSAgICAgICAgTlNTdHJpbmcgKmFwcFBhdGggPSBnZXRSZXF1
aXJlZFN0cmluZ0FyZ3VtZW50KEAiYXBwIik7Ci0gICAgICAgIE5TU3RyaW5nICpwcm9kdWN0RGly
ZWN0b3J5ID0gZ2V0UmVxdWlyZWRTdHJpbmdBcmd1bWVudChAInByb2R1Y3REaXIiKTsKLSAgICAg
ICAgTlNBcnJheSAqZHVtcFRvb2xBcmd1bWVudHMgPSBnZXREdW1wVG9vbEFyZ3VtZW50cygpOwot
Ci0jaWYgVVNFX1NJTV9TRVJWSUNFX0NPTlRFWFQKLSAgICAgICAgTlNFcnJvciAqZXJyb3I7Ci0g
ICAgICAgIFNpbVNlcnZpY2VDb250ZXh0ICpzZXJ2aWNlQ29udGV4dCA9IFtTaW1TZXJ2aWNlQ29u
dGV4dCBzaGFyZWRTZXJ2aWNlQ29udGV4dEZvckRldmVsb3BlckRpcjpkZXZlbG9wZXJEaXJlY3Rv
cnkgZXJyb3I6JmVycm9yXTsKLSAgICAgICAgaWYgKCFzZXJ2aWNlQ29udGV4dCkgewotICAgICAg
ICAgICAgTlNMb2coQCJEZXZpY2UgY29udGV4dCBjb3VsZG4ndCBiZSBmb3VuZDogJUAiLCBlcnJv
cik7Ci0gICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgIH0KLSAgICAgICAg
U2ltRGV2aWNlU2V0ICpkZXZpY2VTZXQgPSBbc2VydmljZUNvbnRleHQgZGVmYXVsdERldmljZVNl
dFdpdGhFcnJvcjpuaWxdOwotICAgICAgICBpZiAoIWRldmljZVNldCkgewotICAgICAgICAgICAg
TlNMb2coQCJEZWZhdWx0IGRldmljZSBzZXQgY291bGRuJ3QgYmUgZm91bmQ6ICVAIiwgZXJyb3Ip
OwotICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0gICAgICAgIFNp
bURldmljZSAqZGV2aWNlID0gW2RldmljZVNldC5kZXZpY2VzQnlVRElEIG9iamVjdEZvcktleTp1
ZGlkXTsKLSNlbHNlCi0gICAgICAgIFNpbURldmljZSAqZGV2aWNlID0gW1NpbURldmljZVNldC5k
ZWZhdWx0U2V0LmRldmljZXNCeVVESUQgb2JqZWN0Rm9yS2V5OnVkaWRdOwotI2VuZGlmCi0gICAg
ICAgIGlmICghZGV2aWNlKSB7Ci0gICAgICAgICAgICBOU0xvZyhAIkRldmljZSAlQCBjb3VsZG4n
dCBiZSBmb3VuZCIsIHVkaWQpOwotICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcmVsYXlDb250cm9sbGVyID0gW1tMVFJlbGF5Q29udHJvbGxlciBh
bGxvY10gaW5pdFdpdGhEZXZpY2U6ZGV2aWNlIHByb2R1Y3REaXI6cHJvZHVjdERpcmVjdG9yeSBh
cHBQYXRoOmFwcFBhdGggZGV2aWNlVURJRDp1ZGlkIGR1bXBUb29sQXJndW1lbnRzOmR1bXBUb29s
QXJndW1lbnRzXTsKLSAgICAgICAgW3JlbGF5Q29udHJvbGxlciBzdGFydF07Ci0KLSAgICAgICAg
YXRleGl0KGZpbmlzaCk7Ci0gICAgICAgIHNpZ25hbChTSUdJTlQsIHJlY2VpdmVkU2lnbmFsKTsK
LSAgICAgICAgc2lnbmFsKFNJR1RFUk0sIHJlY2VpdmVkU2lnbmFsKTsKLQotICAgICAgICBbW05T
UnVuTG9vcCBtYWluUnVuTG9vcF0gcnVuXTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19CkluZGV4
OiBUb29scy9TY3JpcHRzL2J1aWxkLWxheW91dHRlc3RyZWxheQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL2J1aWxkLWxheW91dHRlc3RyZWxheQkocmV2aXNpb24gMjA5ODg2KQorKysgVG9v
bHMvU2NyaXB0cy9idWlsZC1sYXlvdXR0ZXN0cmVsYXkJKG5vbmV4aXN0ZW50KQpAQCAtMSw3MCAr
MCwwIEBACi0jIS91c3IvYmluL3BlcmwgLXcKLQotIyBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSMgYXJlIG1ldDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSMgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0jIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0jIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi11c2Ugc3RyaWN0OwotdXNlIEZpbGU6OkJhc2VuYW1lOwotdXNlIEZp
bmRCaW47Ci11c2UgR2V0b3B0OjpMb25nIHF3KDpjb25maWcgcGFzc190aHJvdWdoKTsKLXVzZSBs
aWIgJEZpbmRCaW46OkJpbjsKLXVzZSB3ZWJraXRkaXJzOwotCi1teSAkc2hvd0hlbHAgPSAwOwot
bXkgJGNsZWFuID0gMDsKLQotbXkgJHByb2dyYW1OYW1lID0gYmFzZW5hbWUoJDApOwotbXkgJHVz
YWdlID0gPDxFT0Y7Ci1Vc2FnZTogJHByb2dyYW1OYW1lIFtvcHRpb25zXSBbb3B0aW9ucyB0byBw
YXNzIHRvIGJ1aWxkIHN5c3RlbV0KLSAgLS1oZWxwICAgICAgICBTaG93IHRoaXMgaGVscCBtZXNz
YWdlCi0gIC0tY2xlYW4gICAgICAgQ2xlYW4gdXAgdGhlIGJ1aWxkIGRpcmVjdG9yeQotRU9GCi0K
LW15ICRyZXN1bHQgPSBHZXRPcHRpb25zKAotICAgICdoZWxwJyA9PiBcJHNob3dIZWxwLAotICAg
ICdjbGVhbicgPT4gXCRjbGVhbiwKLSk7Ci0KLWlmICgkc2hvd0hlbHAgb3Igbm90ICRyZXN1bHQp
IHsKLSAgIHByaW50IFNUREVSUiAkdXNhZ2U7Ci0gICBleGl0IDE7Ci19Ci0KLWNoZWNrUmVxdWly
ZWRTeXN0ZW1Db25maWcoKTsKLXNldENvbmZpZ3VyYXRpb24oKTsKLWNoZGlyV2ViS2l0KCk7Ci0K
LWNoZGlyICJUb29scy9MYXlvdXRUZXN0UmVsYXkiIG9yIGRpZTsKLQotIyBGSVhNRTogVGhpcyB0
b29sIGlzIG9ubHkgdXNlZnVsIHdoZW4gYnVpbGRpbmcgV2ViS2l0IGZvciBpT1MgU2ltdWxhdG9y
LiBGb3Igbm93LAotIyAgICAgICAgdG8gYXZvaWQgYnJlYWtpbmcgc29tZSBBcHBsZSBJbnRlcm5h
bCB0b29scyB3ZSBzdXBwb3J0IGNhbGxpbmcgdGhpcyBzY3JpcHQKLSMgICAgICAgIHdpdGhvdXQg
LS1pb3Mtc2ltdWxhdG9yIHNvIGxvbmcgYXMgd2UgYXJlIGJ1aWxkaW5nIG9uIGEgTWFjLgotaWYg
KGlzQXBwbGVNYWNXZWJLaXQoKSAmJiAhd2lsbFVzZUlPU0RldmljZVNESygpKSB7Ci0gICAgIyBG
SVhNRTogQ2hhbmdpbmcgU0RLIGF0IHRoaXMgcG9pbnQgcmVzdWx0cyBpbiBhbiBpbmNvbnNpc3Rl
bnQgd2Via2l0ZGlycyBzdGF0ZS4KLSAgICAjIFdlIHNob3VsZCBtYWtlIGl0IHNvIHRoYXQgd2Vi
a2l0ZGlycyBmdW5jdGlvbnMgbmV2ZXIgc2VlIHRoZSB3cm9uZyBTREsuCi0gICAgc2V0WGNvZGVT
REsodW5kZWYpOyAjIEZvcmNlIHVzZSBvZiBNYWMgU0RLIGlmIC0taW9zLXNpbXVsYXRvciB3YXMg
cGFzc2VkCi0gICAgZXhpdCBleGl0U3RhdHVzKGJ1aWxkWENvZGVQcm9qZWN0KCJMYXlvdXRUZXN0
UmVsYXkiLCAkY2xlYW4sIFhjb2RlT3B0aW9ucygpLCBAQVJHVikpOwotfQotCi1wcmludCBTVERF
UlIgIkxheW91dFRlc3RSZWxheSBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgaU9TIFNpbXVsYXRvci5c
biI7Ci1leGl0IDE7CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBUb29scy9TY3JpcHRzL2J1aWxkLWxh
eW91dHRlc3RyZWxheQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0xICsw
LDAgIyMKLSoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogVG9vbHMvU2Ny
aXB0cy9idWlsZC13ZWJraXQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJr
aXQJKHJldmlzaW9uIDIwOTg4NikKKysrIFRvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDAsMTAgKzIwMCw2IEBAIGlmIChpc0FwcGxlTWFjV2ViS2l0KCkpIHsK
ICAgICAgICAgcHVzaCBAY29weUxpYnJhcmllc0FyZ3MsIHByb2R1Y3REaXIoKTsKICAgICAgICAg
cHJpbnQoam9pbigiICIsIEBjb3B5TGlicmFyaWVzQXJncykgLiAiXG4iKTsKICAgICAgICAgKHN5
c3RlbShAY29weUxpYnJhcmllc0FyZ3MpID09IDApIG9yIGRpZTsKLQotICAgICAgICBpZiAod2ls
bFVzZUlPU1NpbXVsYXRvclNESygpKSB7Ci0gICAgICAgICAgICAoc3lzdGVtKCJwZXJsIiwgIlRv
b2xzL1NjcmlwdHMvYnVpbGQtbGF5b3V0dGVzdHJlbGF5IiwgYXJndW1lbnRzRm9yQ29uZmlndXJh
dGlvbigpKSA9PSAwKSBvciBkaWU7Ci0gICAgICAgIH0KICAgICB9CiAKICAgICAjIEJ1aWxkIFRv
b2xzIG5lZWRlZCBmb3IgQXBwbGUgcG9ydHMKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL2lwY19waXBlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL2lwY19waXBlLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL2lwY19waXBlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIxIEBACisj
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgZXJybm8KK2ltcG9y
dCBpbworaW1wb3J0IG9zCitpbXBvcnQgUXVldWUKK2ltcG9ydCBzZWxlY3QKK2ltcG9ydCBzaWdu
YWwKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCisKK2lmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRo
KCd3aW4nKToKKyAgICBpbXBvcnQgbXN2Y3J0CisgICAgaW1wb3J0IHdpbjMycGlwZQorICAgIGlt
cG9ydCB3aW4zMmZpbGUKK2Vsc2U6CisgICAgaW1wb3J0IGZjbnRsCisgICAgaW1wb3J0IHNvY2tl
dAorCisKK2NsYXNzIFVuaXhQaXBlU2VydmVyKG9iamVjdCk6CisKKyAgICBCVUZGRVIgPSA0MDk2
CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCk6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9y
bS5zdGFydHN3aXRoKCd3aW4nKToKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ1VuaXhQaXBl
U2VydmVyIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtJykKKyAgICAgICAgc2VsZi5f
cGF0aCA9IHBhdGgKKyAgICAgICAgc2VsZi5fY29ubmVjdGVkID0gRmFsc2UKKworICAgICAgICB0
cnk6CisgICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5fcGF0aCkKKyAgICAgICAgZXhjZXB0IE9T
RXJyb3I6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLl9wYXRoKToKKyAgICAg
ICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJDb3VsZCBub3QgdW5saW5rICciICsgc2VsZi5fcGF0
aCArICInLCB0aGUgdGFyZ2V0IHBhdGggaXMgYSBmaWxlIG5vdCBhIHBpcGUuIikKKworICAgICAg
ICBzZWxmLl9zb2NrZXQgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYLCBzb2NrZXQuU09D
S19TVFJFQU0pCisgICAgICAgIHNlbGYuX3NvY2tldC5zZXR0aW1lb3V0KDE1KQorICAgICAgICBz
ZWxmLl9zb2NrZXQuYmluZChzZWxmLl9wYXRoKQorICAgICAgICBzZWxmLl9zb2NrZXQubGlzdGVu
KDApCisKKyAgICBkZWYgY29ubmVjdChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fY29ubmVjdGVk
OgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2Vs
Zi5fY29ubmVjdGlvbiwgc2VsZi5fYWRkcmVzcyA9IHNlbGYuX3NvY2tldC5hY2NlcHQoKQorICAg
ICAgICAgICAgc2VsZi5fY29ubmVjdGlvbi5zZXRibG9ja2luZygwKQorICAgICAgICAgICAgc2Vs
Zi5fY29ubmVjdGVkID0gVHJ1ZQorICAgICAgICBleGNlcHQgc29ja2V0LnRpbWVvdXQ6CisgICAg
ICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBkaXNj
b25uZWN0KHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fY29ubmVjdGVkOgorICAgICAgICAg
ICAgcmV0dXJuCisgICAgICAgIHNlbGYuX3NvY2tldC5jbG9zZSgpCisgICAgICAgIHNlbGYuX2Nv
bm5lY3RlZCA9IEZhbHNlCisKKyAgICBkZWYgcmVhZChzZWxmKToKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgZGF0YSA9IHNlbGYuX2Nvbm5lY3Rpb24ucmVjdihzZWxmLkJVRkZFUikKKyAgICAg
ICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEKKyAgICAgICAgZXhj
ZXB0IHNvY2tldC5lcnJvciwgZToKKyAgICAgICAgICAgIGVyciA9IGUuYXJnc1swXQorICAgICAg
ICAgICAgaWYgZXJyID09IGVycm5vLkVBR0FJTiBvciBlcnIgPT0gZXJybm8uRVdPVUxEQkxPQ0s6
CisgICAgICAgICAgICAgICAgcmV0dXJuIFtdCisgICAgICAgIHNlbGYuZGlzY29ubmVjdCgpCisg
ICAgICAgIHJldHVybiBbXQorCisgICAgZGVmIHNlbmQoc2VsZiwgZGF0YSk6CisgICAgICAgIGlm
IG5vdCBzZWxmLl9jb25uZWN0ZWQ6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAg
c2VsZi5fY29ubmVjdGlvbi5zZW5kKGRhdGEpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBk
ZWYgcGF0aChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BhdGgKKworICAgIGRlZiBpc0Nv
bm5lY3RlZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Nvbm5lY3RlZAorCisKK2NsYXNz
IEFic3RyYWN0UGlwZShvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAg
ICBzZWxmLmNsZWFuKCkKKworICAgIGRlZiBjb25uZWN0KHNlbGYpOgorICAgICAgICByZXR1cm4g
c2VsZi5pc0Nvbm5lY3RlZCgpCisKKyAgICBkZWYgY2xlYW4oc2VsZik6CisgICAgICAgIHNlbGYu
X3N0ZG91dFN0cmVhbSA9IGlvLkJ5dGVzSU8oKQorICAgICAgICBzZWxmLl9zdGRlcnJTdHJlYW0g
PSBpby5CeXRlc0lPKCkKKyAgICAgICAgc2VsZi5fc3Rkb3V0VHJjID0gMAorICAgICAgICBzZWxm
Ll9zdGRlcnJUcmMgPSAwCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHJldHVybiBu
b3Qgc2VsZi5pc0Nvbm5lY3RlZCgpCisKKyAgICBkZWYgc2VuZChzZWxmLCBkYXRhKToKKyAgICAg
ICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgaXNDb25uZWN0ZWQoc2VsZik6CisgICAgICAgIHJl
dHVybiBGYWxzZQorCisgICAgZGVmIF9wYXJzZU1lc3NhZ2Uoc2VsZiwgaXNCbG9ja2luZz1GYWxz
ZSk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHJlYWRMaW5lKHNlbGYsIGlzQmxv
Y2tpbmc9RmFsc2UpOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgZXJyID0gc2Vs
Zi5zdGRlcnJSZWFkKCkKKyAgICAgICAgICAgIGlmIGVycjoKKyAgICAgICAgICAgICAgICByZXR1
cm4gZXJyCisgICAgICAgICAgICBvdXQgPSBzZWxmLnN0ZG91dFJlYWQoKQorICAgICAgICAgICAg
aWYgb3V0OgorICAgICAgICAgICAgICAgIHJldHVybiBvdXQKKyAgICAgICAgICAgIHNlbGYuX3Bh
cnNlTWVzc2FnZShpc0Jsb2NraW5nKQorICAgICAgICAgICAgaWYgbm90IGlzQmxvY2tpbmc6Cisg
ICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBzdGRv
dXRSZWFkKHNlbGYsIGlzQmxvY2tpbmc9RmFsc2UpOgorICAgICAgICB0cmllZE9uY2UgPSBGYWxz
ZQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgc2VsZi5fc3Rkb3V0U3RyZWFtLnNl
ZWsoc2VsZi5fc3Rkb3V0VHJjLCBpby5TRUVLX1NFVCkKKyAgICAgICAgICAgIGRhdGEgPSBzZWxm
Ll9zdGRvdXRTdHJlYW0ucmVhZGxpbmUoKQorICAgICAgICAgICAgaWYgZGF0YSBhbmQgZGF0YVst
MV0gPT0gJ1xuJzoKKyAgICAgICAgICAgICAgICBzZWxmLl9zdGRvdXRUcmMgPSBzZWxmLl9zdGRv
dXRUcmMgKyBsZW4oZGF0YSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZGF0YQorICAgICAgICAg
ICAgc2VsZi5fcGFyc2VNZXNzYWdlKGlzQmxvY2tpbmcpCisgICAgICAgICAgICBpZiBub3QgaXNC
bG9ja2luZyBhbmQgdHJpZWRPbmNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAg
ICB0cmllZE9uY2UgPSBUcnVlCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgc3RkZXJy
UmVhZChzZWxmLCBpc0Jsb2NraW5nPUZhbHNlKToKKyAgICAgICAgdHJpZWRPbmNlID0gRmFsc2UK
KyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHNlbGYuX3N0ZGVyclN0cmVhbS5zZWVr
KHNlbGYuX3N0ZGVyclRyYywgaW8uU0VFS19TRVQpCisgICAgICAgICAgICBkYXRhID0gc2VsZi5f
c3RkZXJyU3RyZWFtLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGlmIGRhdGEgYW5kIGRhdGFbLTFd
ID09ICdcbic6CisgICAgICAgICAgICAgICAgc2VsZi5fc3RkZXJyVHJjID0gc2VsZi5fc3RkZXJy
VHJjICsgbGVuKGRhdGEpCisgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEKKyAgICAgICAgICAg
IHNlbGYuX3BhcnNlTWVzc2FnZShpc0Jsb2NraW5nKQorICAgICAgICAgICAgaWYgbm90IGlzQmxv
Y2tpbmcgYW5kIHRyaWVkT25jZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAg
dHJpZWRPbmNlID0gVHJ1ZQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHJlYWRCdWZm
ZXJTdGRvdXQoc2VsZik6CisgICAgICAgIHNlbGYuX3N0ZG91dFN0cmVhbS5zZWVrKDAsIGlvLlNF
RUtfRU5EKQorICAgICAgICBlbmRWYWwgPSBzZWxmLl9zdGRvdXRTdHJlYW0udGVsbCgpCisgICAg
ICAgIGlmIGVuZFZhbCA8PSBzZWxmLl9zdGRvdXRUcmM6CisgICAgICAgICAgICByZXR1cm4gJycK
KyAgICAgICAgc2VsZi5fc3Rkb3V0U3RyZWFtLnNlZWsoc2VsZi5fc3Rkb3V0VHJjLCBpby5TRUVL
X1NFVCkKKyAgICAgICAgc2l6ZSA9IGVuZFZhbCAtIHNlbGYuX3N0ZG91dFRyYworICAgICAgICBz
ZWxmLl9zdGRvdXRUcmMgPSBlbmRWYWwKKyAgICAgICAgcmV0dXJuIHNlbGYuX3N0ZG91dFN0cmVh
bS5yZWFkKHNpemUpCisKKyAgICBkZWYgcmVhZEJ1ZmZlclN0ZGVycihzZWxmKToKKyAgICAgICAg
c2VsZi5fc3RkZXJyU3RyZWFtLnNlZWsoMCwgaW8uU0VFS19FTkQpCisgICAgICAgIGVuZFZhbCA9
IHNlbGYuX3N0ZGVyclN0cmVhbS50ZWxsKCkKKyAgICAgICAgaWYgZW5kVmFsIDw9IHNlbGYuX3N0
ZGVyclRyYzoKKyAgICAgICAgICAgIHJldHVybiAnJworICAgICAgICBzZWxmLl9zdGRlcnJTdHJl
YW0uc2VlayhzZWxmLl9zdGRlcnJUcmMsIGlvLlNFRUtfU0VUKQorICAgICAgICBzaXplID0gZW5k
VmFsIC0gc2VsZi5fc3RkZXJyVHJjCisgICAgICAgIHNlbGYuX3N0ZGVyclRyYyA9IGVuZFZhbAor
ICAgICAgICByZXR1cm4gc2VsZi5fc3RkZXJyU3RyZWFtLnJlYWQoc2l6ZSkKKworICAgIGRlZiBy
ZWFkQmxvY2tTdGRvdXQoc2VsZiwgc2l6ZSwgaXNCbG9ja2luZz1GYWxzZSk6CisgICAgICAgIHRy
aWVkT25jZSA9IEZhbHNlCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBzZWxmLl9z
dGRvdXRTdHJlYW0uc2VlaygwLCBpby5TRUVLX0VORCkKKyAgICAgICAgICAgIGlmIHNlbGYuX3N0
ZG91dFN0cmVhbS50ZWxsKCkgLSBzZWxmLl9zdGRvdXRUcmMgPj0gc2l6ZToKKyAgICAgICAgICAg
ICAgICBzZWxmLl9zdGRvdXRTdHJlYW0uc2VlayhzZWxmLl9zdGRvdXRUcmMsIGlvLlNFRUtfU0VU
KQorICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9zdGRvdXRTdHJlYW0ucmVhZChzaXplKQor
ICAgICAgICAgICAgICAgIHNlbGYuX3N0ZG91dFRyYyA9IHNlbGYuX3N0ZG91dFRyYyArIHNpemUK
KyAgICAgICAgICAgICAgICByZXR1cm4gZGF0YQorICAgICAgICAgICAgc2VsZi5fcGFyc2VNZXNz
YWdlKGlzQmxvY2tpbmcpCisgICAgICAgICAgICBpZiBub3QgaXNCbG9ja2luZyBhbmQgdHJpZWRP
bmNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICB0cmllZE9uY2UgPSBUcnVl
CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgcmVhZEJsb2NrU3RkZXJyKHNlbGYsIHNp
emUsIGlzQmxvY2tpbmc9RmFsc2UpOgorICAgICAgICB0cmllZE9uY2UgPSBGYWxzZQorICAgICAg
ICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgc2VsZi5fc3RkZXJyU3RyZWFtLnNlZWsoMCwgaW8u
U0VFS19FTkQpCisgICAgICAgICAgICBpZiBzZWxmLl9zdGRlcnJTdHJlYW0udGVsbCgpIC0gc2Vs
Zi5fc3RkZXJyVHJjID49IHNpemU6CisgICAgICAgICAgICAgICAgc2VsZi5fc3RkZXJyU3RyZWFt
LnNlZWsoc2VsZi5fc3RkZXJyVHJjLCBpby5TRUVLX1NFVCkKKyAgICAgICAgICAgICAgICBkYXRh
ID0gc2VsZi5fc3RkZXJyU3RyZWFtLnJlYWQoc2l6ZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9z
dGRlcnJUcmMgPSBzZWxmLl9zdGRlcnJUcmMgKyBzaXplCisgICAgICAgICAgICAgICAgcmV0dXJu
IGRhdGEKKyAgICAgICAgICAgIHNlbGYuX3BhcnNlTWVzc2FnZShpc0Jsb2NraW5nKQorICAgICAg
ICAgICAgaWYgbm90IGlzQmxvY2tpbmcgYW5kIHRyaWVkT25jZToKKyAgICAgICAgICAgICAgICBi
cmVhaworICAgICAgICAgICAgdHJpZWRPbmNlID0gVHJ1ZQorICAgICAgICByZXR1cm4gTm9uZQor
CisKK2NsYXNzIFVuaXhQaXBlKEFic3RyYWN0UGlwZSk6CisKKyAgICBTVERJTl9JTkRFWCA9IDAK
KyAgICBTVERPVVRfSU5ERVggPSAxCisgICAgU1RERVJSX0lOREVYID0gMgorCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVycik6CisgICAgICAgIEFic3RyYWN0UGlw
ZS5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLnN0ZG91dEZpbGUgPSBzdGRvdXQKKyAgICAg
ICAgc2VsZi5zdGRlcnJGaWxlID0gc3RkZXJyCisKKyAgICAgICAgcGF0aHMgPSBbc3RkaW4sIHN0
ZG91dCwgc3RkZXJyXQorICAgICAgICBzZWxmLl9zb2NrZXRzID0gW10KKyAgICAgICAgZm9yIGkg
aW4gcmFuZ2UoMCwgMyk6CisgICAgICAgICAgICBzZWxmLl9zb2NrZXRzLmFwcGVuZChVbml4UGlw
ZVNlcnZlcihwYXRoc1tpXSkpCisKKyAgICAgICAgc2VsZi5jbGVhbigpCisKKyAgICBkZWYgY29u
bmVjdChzZWxmKToKKyAgICAgICAgZm9yIHNvY2sgaW4gc2VsZi5fc29ja2V0czoKKyAgICAgICAg
ICAgIHNvY2suY29ubmVjdCgpCisgICAgICAgIHJldHVybiBzZWxmLmlzQ29ubmVjdGVkKCkKKwor
ICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgZm9yIHNvY2sgaW4gc2VsZi5fc29ja2V0czoK
KyAgICAgICAgICAgIHNvY2suZGlzY29ubmVjdCgpCisKKyAgICBkZWYgc2VuZChzZWxmLCBkYXRh
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NvY2tldHNbVW5peFBpcGUuU1RESU5fSU5ERVhdLnNl
bmQoZGF0YSkKKworICAgIGRlZiBpc0Nvbm5lY3RlZChzZWxmKToKKyAgICAgICAgZm9yIHNvY2sg
aW4gc2VsZi5fc29ja2V0czoKKyAgICAgICAgICAgIGlmIG5vdCBzb2NrLmlzQ29ubmVjdGVkKCk6
CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAg
ICBkZWYgX3BhcnNlTWVzc2FnZShzZWxmLCBpc0Jsb2NraW5nPUZhbHNlKToKKyAgICAgICAgd2hp
bGUgVHJ1ZToKKyAgICAgICAgICAgIHN0ZEVyckRhdGEgPSBbXQorICAgICAgICAgICAgc3RkRXJy
RGF0YSA9IHNlbGYuX3NvY2tldHNbVW5peFBpcGUuU1RERVJSX0lOREVYXS5yZWFkKCkKKyAgICAg
ICAgICAgIGlmIHN0ZEVyckRhdGE6CisgICAgICAgICAgICAgICAgc2VsZi5fc3RkZXJyU3RyZWFt
LnNlZWsoMCwgaW8uU0VFS19FTkQpCisgICAgICAgICAgICAgICAgc2VsZi5fc3RkZXJyU3RyZWFt
LndyaXRlKHN0ZEVyckRhdGEpCisgICAgICAgICAgICBzdGRPdXREYXRhID0gW10KKyAgICAgICAg
ICAgIHN0ZE91dERhdGEgPSBzZWxmLl9zb2NrZXRzW1VuaXhQaXBlLlNURE9VVF9JTkRFWF0ucmVh
ZCgpCisgICAgICAgICAgICBpZiBzdGRPdXREYXRhOgorICAgICAgICAgICAgICAgIHNlbGYuX3N0
ZG91dFN0cmVhbS5zZWVrKDAsIGlvLlNFRUtfRU5EKQorICAgICAgICAgICAgICAgIHNlbGYuX3N0
ZG91dFN0cmVhbS53cml0ZShzdGRPdXREYXRhKQorICAgICAgICAgICAgaWYgc3RkRXJyRGF0YSBv
ciBzdGRPdXREYXRhOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBp
ZiBub3QgaXNCbG9ja2luZzoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICByZXR1cm4g
RmFsc2UKKworICAgIGRlZiBoYW5kbGVfaW50ZXJydXB0KHNlbGYpOgorICAgICAgICBpZiBub3Qg
c2VsZi5pc0Nvbm5lY3RlZCgpOgorICAgICAgICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQK
KworCitjbGFzcyBQcm9jZXNzUGlwZShBYnN0cmFjdFBpcGUpOgorCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHBvcnQsIGNtZCwgZW52aXJvPU5vbmUsIHVuaV9uZXdsaW5lcz1GYWxzZSk6CisKKyAg
ICAgICAgQWJzdHJhY3RQaXBlLl9faW5pdF9fKHNlbGYpCisKKyAgICAgICAgc2VsZi5fcG9ydCA9
IHBvcnQKKyAgICAgICAgc2VsZi5faG9zdCA9IHNlbGYuX3BvcnQuaG9zdAorCisgICAgICAgIHNl
bGYuX3Byb2MgPSBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5wb3BlbihjbWQsIHN0ZGluPXNlbGYuX2hv
c3QuZXhlY3V0aXZlLlBJUEUsCisgICAgICAgICAgICBzdGRvdXQ9c2VsZi5faG9zdC5leGVjdXRp
dmUuUElQRSwKKyAgICAgICAgICAgIHN0ZGVycj1zZWxmLl9ob3N0LmV4ZWN1dGl2ZS5QSVBFLAor
ICAgICAgICAgICAgY2xvc2VfZmRzPW5vdCBzZWxmLl9ob3N0LnBsYXRmb3JtLmlzX3dpbigpLAor
ICAgICAgICAgICAgZW52PWVudmlybywKKyAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz11
bmlfbmV3bGluZXMpCisKKyAgICAgICAgc2VsZi5fdXNlX3dpbjMyX2FwaXMgPSBzeXMucGxhdGZv
cm0uc3RhcnRzd2l0aCgnd2luJykKKyAgICAgICAgaWYgbm90IHNlbGYuX3VzZV93aW4zMl9hcGlz
OgorICAgICAgICAgICAgZmQgPSBzZWxmLl9wcm9jLnN0ZG91dC5maWxlbm8oKQorICAgICAgICAg
ICAgZmwgPSBmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGTCkKKyAgICAgICAgICAgIGZjbnRs
LmZjbnRsKGZkLCBmY250bC5GX1NFVEZMLCBmbCB8IG9zLk9fTk9OQkxPQ0spCisgICAgICAgICAg
ICBmZCA9IHNlbGYuX3Byb2Muc3RkZXJyLmZpbGVubygpCisgICAgICAgICAgICBmbCA9IGZjbnRs
LmZjbnRsKGZkLCBmY250bC5GX0dFVEZMKQorICAgICAgICAgICAgZmNudGwuZmNudGwoZmQsIGZj
bnRsLkZfU0VURkwsIGZsIHwgb3MuT19OT05CTE9DSykKKworICAgIGRlZiBwaWQoc2VsZik6Cisg
ICAgICAgIHJldHVybiBzZWxmLl9wcm9jLnBpZAorCisgICAgZGVmIGlzQ29ubmVjdGVkKHNlbGYp
OgorICAgICAgICByZXR1cm4gbm90IHNlbGYuX3Byb2MucG9sbCgpCisKKyAgICBkZWYgaGFuZGxl
X2ludGVycnVwdChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fcHJvYy5yZXR1cm5jb2RlIGluICgt
MTA3Mzc0MTUxMCwgLXNpZ25hbC5TSUdJTlQpOgorICAgICAgICAgICAgcmFpc2UgS2V5Ym9hcmRJ
bnRlcnJ1cHQKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fcHJvYy5w
b2xsKCk6CisgICAgICAgICAgICBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5raWxsX3Byb2Nlc3Moc2Vs
Zi5fcHJvYy5waWQpCisgICAgICAgIGlmIHNlbGYuX3Byb2MucG9sbCgpIGlzIG5vdCBOb25lOgor
ICAgICAgICAgICAgc2VsZi5fcHJvYy53YWl0KCkKKworICAgICAgICBpZiBzZWxmLl9wcm9jLnN0
ZGluOgorICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRpbi5jbG9zZSgpCisgICAgICAgIGlmIHNl
bGYuX3Byb2Muc3Rkb3V0OgorICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRvdXQuY2xvc2UoKQor
ICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZGVycjoKKyAgICAgICAgICAgIHNlbGYuX3Byb2Muc3Rk
ZXJyLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLmlzQ29ubmVjdGVkKCkKKworICAg
IGRlZiBzZW5kKHNlbGYsIGJ5dGVzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5f
cHJvYy5zdGRpbi53cml0ZShieXRlcykKKyAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6CisgICAg
ICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfdW5p
eHN0ZEJsb2NrKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZG91dC5jbG9zZWQ6Cisg
ICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBzZWxlY3RfZmRzID0gW10KKyAgICAgICAg
c2VsZWN0X2Zkcy5hcHBlbmQoc2VsZi5fcHJvYy5zdGRvdXQuZmlsZW5vKCkpCisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIHJlYWRfZmRzLCBfLCBfID0gc2VsZWN0LnNlbGVjdChzZWxlY3RfZmRz
LCBbXSwgc2VsZWN0X2ZkcywgMCkKKyAgICAgICAgZXhjZXB0IHNlbGVjdC5lcnJvciwgZToKKyAg
ICAgICAgICAgIGlmIGUuYXJnc1swXSA9PSBlcnJuby5FSU5WQUw6CisgICAgICAgICAgICAgICAg
cmV0dXJuIE5vbmUKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgaWYgc2VsZi5fcHJvYy5zdGRvdXQuZmlsZW5vKCkgaW4gcmVhZF9mZHM6CisgICAgICAgICAg
ICAgICAgZGF0YSA9IHNlbGYuX3Byb2Muc3Rkb3V0LnJlYWQoKQorICAgICAgICAgICAgICAgIHJl
dHVybiBkYXRhCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgorICAgICAgICAgICAgcGFzcwor
CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX3VuaXhlcnJCbG9jayhzZWxmKToKKyAg
ICAgICAgaWYgc2VsZi5fcHJvYy5zdGRlcnIuY2xvc2VkOgorICAgICAgICAgICAgcmV0dXJuIE5v
bmUKKyAgICAgICAgc2VsZWN0X2ZkcyA9IFtdCisgICAgICAgIHNlbGVjdF9mZHMuYXBwZW5kKHNl
bGYuX3Byb2Muc3RkZXJyLmZpbGVubygpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZWFk
X2ZkcywgXywgXyA9IHNlbGVjdC5zZWxlY3Qoc2VsZWN0X2ZkcywgW10sIHNlbGVjdF9mZHMsIDAp
CisgICAgICAgIGV4Y2VwdCBzZWxlY3QuZXJyb3IsIGU6CisgICAgICAgICAgICBpZiBlLmFyZ3Nb
MF0gPT0gZXJybm8uRUlOVkFMOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAg
ICAgICByYWlzZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNlbGYuX3Byb2Muc3Rk
ZXJyLmZpbGVubygpIGluIHJlYWRfZmRzOgorICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9w
cm9jLnN0ZGVyci5yZWFkKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZGF0YQorICAgICAgICBl
eGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICByZXR1cm4gTm9u
ZQorCisgICAgZGVmIF93aW4zMk5vbkJsb2NraW5nUmVhZChzZWxmLCBoYW5kbGUpOgorICAgICAg
ICB0cnk6CisgICAgICAgICAgICBfLCBhdmFpbCwgXyA9IHdpbjMycGlwZS5QZWVrTmFtZWRQaXBl
KGhhbmRsZSwgMCkKKyAgICAgICAgICAgIGlmIGF2YWlsID4gMDoKKyAgICAgICAgICAgICAgICBf
LCBidWYgPSB3aW4zMmZpbGUuUmVhZEZpbGUoaGFuZGxlLCBhdmFpbCwgTm9uZSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gYnVmCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAg
ICAgICBpZiBlWzBdIG5vdCBpbiAoMTA5LCBlcnJuby5FU0hVVERPV04pOiAgIyAxMDkgPT0gd2lu
MzIgRVJST1JfQlJPS0VOX1BJUEUKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICByZXR1
cm4gTm9uZQorCisgICAgZGVmIF93aW4zMnN0ZEJsb2NrKHNlbGYpOgorICAgICAgICBvdXRfZmgg
PSBtc3ZjcnQuZ2V0X29zZmhhbmRsZShzZWxmLl9wcm9jLnN0ZG91dC5maWxlbm8oKSkKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX3dpbjMyTm9uQmxvY2tpbmdSZWFkKG91dF9maCkKKworICAgIGRlZiBf
d2luMzJlcnJCbG9jayhzZWxmKToKKyAgICAgICAgZXJyX2ZoID0gbXN2Y3J0LmdldF9vc2ZoYW5k
bGUoc2VsZi5fcHJvYy5zdGRlcnIuZmlsZW5vKCkpCisgICAgICAgIHJldHVybiBzZWxmLl93aW4z
Mk5vbkJsb2NraW5nUmVhZChlcnJfZmgpCisKKyAgICBkZWYgX3BhcnNlTWVzc2FnZShzZWxmLCBp
c0Jsb2NraW5nPUZhbHNlKToKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHN0ZEVy
ckRhdGEgPSBbXQorICAgICAgICAgICAgaWYgc2VsZi5fdXNlX3dpbjMyX2FwaXM6CisgICAgICAg
ICAgICAgICAgc3RkRXJyRGF0YSA9IHNlbGYuX3dpbjMyZXJyQmxvY2soKQorICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICBzdGRFcnJEYXRhID0gc2VsZi5fdW5peGVyckJsb2NrKCkK
KyAgICAgICAgICAgIGlmIHN0ZEVyckRhdGE6CisgICAgICAgICAgICAgICAgc2VsZi5fc3RkZXJy
U3RyZWFtLnNlZWsoMCwgaW8uU0VFS19FTkQpCisgICAgICAgICAgICAgICAgc2VsZi5fc3RkZXJy
U3RyZWFtLndyaXRlKHN0ZEVyckRhdGEpCisgICAgICAgICAgICBzdGRPdXREYXRhID0gW10KKyAg
ICAgICAgICAgIGlmIHNlbGYuX3VzZV93aW4zMl9hcGlzOgorICAgICAgICAgICAgICAgIHN0ZE91
dERhdGEgPSBzZWxmLl93aW4zMnN0ZEJsb2NrKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgc3RkT3V0RGF0YSA9IHNlbGYuX3VuaXhzdGRCbG9jaygpCisgICAgICAgICAgICBp
ZiBzdGRPdXREYXRhOgorICAgICAgICAgICAgICAgIHNlbGYuX3N0ZG91dFN0cmVhbS5zZWVrKDAs
IGlvLlNFRUtfRU5EKQorICAgICAgICAgICAgICAgIHNlbGYuX3N0ZG91dFN0cmVhbS53cml0ZShz
dGRPdXREYXRhKQorICAgICAgICAgICAgaWYgc3RkRXJyRGF0YSBvciBzdGRPdXREYXRhOgorICAg
ICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBpZiBub3QgaXNCbG9ja2luZzoK
KyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICByZXR1cm4gRmFsc2UKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2lwY19waXBlX3Rlc3RjYXNlLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2lwY19waXBlX3Rlc3RjYXNlLnB5CShu
b25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2lwY19waXBlX3Rl
c3RjYXNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMxIEBACisjIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisj
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgZXJybm8KK2ltcG9ydCBpbworaW1wb3J0
IHNvY2tldAoraW1wb3J0IHRpbWUKKworZnJvbSB3ZWJraXRweS5jb21tb24uaXBjX3BpcGUgaW1w
b3J0IEFic3RyYWN0UGlwZQorCisKK2NsYXNzIER1bW15UHJvY2Vzc1BpcGUoQWJzdHJhY3RQaXBl
KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0PU5vbmUsIGNtZD1Ob25lLCBlbnZpcm89
Tm9uZSwgdW5pX25ld2xpbmVzPUZhbHNlKToKKyAgICAgICAgQWJzdHJhY3RQaXBlLl9faW5pdF9f
KHNlbGYpCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIGlmIHNlbGYuX3BvcnQ6
CisgICAgICAgICAgICBzZWxmLl9ob3N0ID0gc2VsZi5fcG9ydC5ob3N0CisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICBzZWxmLl9ob3N0ID0gTm9uZQorICAgICAgICBzZWxmLmNvbm5lY3RlZEZv
clRlc3RpbmcgPSBUcnVlCisKKyAgICBkZWYgcGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gMQor
CisgICAgZGVmIGlzQ29ubmVjdGVkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0
ZWRGb3JUZXN0aW5nCisKKyAgICBkZWYgc2VuZChzZWxmLCBieXRlcyk6CisgICAgICAgIHJldHVy
biBzZWxmLmNvbm5lY3RlZEZvclRlc3RpbmcKKworICAgIGRlZiBfcGFyc2VNZXNzYWdlKHNlbGYs
IGlzQmxvY2tpbmc9RmFsc2UpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBwdXNo
RGF0YUZvclRlc3Rpbmcoc2VsZiwgZGF0YSwgc3RkZXJyPUZhbHNlLCBzdGRvdXQ9VHJ1ZSk6Cisg
ICAgICAgIGlmIHN0ZGVycjoKKyAgICAgICAgICAgIHNlbGYuX3N0ZGVyclN0cmVhbS5zZWVrKDAs
IGlvLlNFRUtfRU5EKQorICAgICAgICAgICAgc2VsZi5fc3RkZXJyU3RyZWFtLndyaXRlKGRhdGEp
CisgICAgICAgIGVsaWYgc3Rkb3V0OgorICAgICAgICAgICAgc2VsZi5fc3Rkb3V0U3RyZWFtLnNl
ZWsoMCwgaW8uU0VFS19FTkQpCisgICAgICAgICAgICBzZWxmLl9zdGRvdXRTdHJlYW0ud3JpdGUo
ZGF0YSkKKworCitjbGFzcyBVbml4UGlwZUNsaWVudChvYmplY3QpOgorCisgICAgQlVGRkVSID0g
NDA5NgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgorICAgICAgICBzZWxmLl9wYXRo
ID0gcGF0aAorICAgICAgICBzZWxmLl9jb25uZWN0ZWQgPSBGYWxzZQorICAgICAgICBzZWxmLl9j
b25uZWN0aW9uID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RS
RUFNKQorICAgICAgICBzZWxmLl9zdHJlYW0gPSBpby5CeXRlc0lPKCkKKyAgICAgICAgc2VsZi5f
c3RyZWFtVHJjID0gMAorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHNlbGYuZGlz
Y29ubmVjdCgpCisKKyAgICBkZWYgY29ubmVjdChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fY29u
bmVjdGVkOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgc2VsZi5fY29ubmVjdGlvbi5jb25uZWN0KHNlbGYuX3BhdGgpCisgICAgICAgICAgICBzZWxm
Ll9jb25uZWN0ZWQgPSBUcnVlCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHJldHVybiBG
YWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGRpc2Nvbm5lY3Qoc2VsZik6Cisg
ICAgICAgIGlmIG5vdCBzZWxmLl9jb25uZWN0ZWQ6CisgICAgICAgICAgICByZXR1cm4KKyAgICAg
ICAgc2VsZi5fY29ubmVjdGlvbi5jbG9zZSgpCisgICAgICAgIHNlbGYuX2Nvbm5lY3RlZCA9IEZh
bHNlCisKKyAgICBkZWYgcmVhZGxpbmUoc2VsZiwgaXNCbG9ja2luZz1GYWxzZSk6CisgICAgICAg
IHdoaWxlIFRydWU6CisgICAgICAgICAgICBzZWxmLl9zdHJlYW0uc2VlayhzZWxmLl9zdHJlYW1U
cmMsIGlvLlNFRUtfU0VUKQorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX3N0cmVhbS5yZWFkbGlu
ZSgpCisgICAgICAgICAgICBpZiBkYXRhIGFuZCBkYXRhWy0xXSA9PSAnXG4nOgorICAgICAgICAg
ICAgICAgIHNlbGYuX3N0cmVhbVRyYyA9IHNlbGYuX3N0cmVhbVRyYyArIGxlbihkYXRhKQorICAg
ICAgICAgICAgICAgIHJldHVybiBkYXRhCisgICAgICAgICAgICBibG9jayA9IHNlbGYucmVhZCgp
CisgICAgICAgICAgICBpZiBibG9jazoKKyAgICAgICAgICAgICAgICBzZWxmLl9zdHJlYW0uc2Vl
aygwLCBpby5TRUVLX0VORCkKKyAgICAgICAgICAgICAgICBzZWxmLl9zdHJlYW0ud3JpdGUoYmxv
Y2spCisgICAgICAgICAgICBpZiBub3QgaXNCbG9ja2luZzoKKyAgICAgICAgICAgICAgICBicmVh
aworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHJlYWQoc2VsZik6CisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9jb25uZWN0aW9uLnJlY3Yoc2VsZi5CVUZGRVIp
CisgICAgICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgICAgIHJldHVybiBkYXRhCisgICAg
ICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIGU6CisgICAgICAgICAgICBlcnIgPSBlLmFyZ3NbMF0K
KyAgICAgICAgICAgIGlmIGVyciA9PSBlcnJuby5FQUdBSU4gb3IgZXJyID09IGVycm5vLkVXT1VM
REJMT0NLOgorICAgICAgICAgICAgICAgIHJldHVybiBbXQorICAgICAgICBzZWxmLmRpc2Nvbm5l
Y3QoKQorICAgICAgICByZXR1cm4gW10KKworICAgIGRlZiBzZW5kKHNlbGYsIGRhdGEpOgorICAg
ICAgICBpZiBub3Qgc2VsZi5fY29ubmVjdGVkOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisg
ICAgICAgIHNlbGYuX2Nvbm5lY3Rpb24uc2VuZChkYXRhKQorICAgICAgICByZXR1cm4gVHJ1ZQor
CisgICAgZGVmIHBvcnQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wYXRoCisKKyAgICBk
ZWYgaXNDb25uZWN0ZWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jb25uZWN0ZWQKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2lwY19waXBlX3VuaXR0ZXN0LnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2lwY19waXBlX3VuaXR0
ZXN0LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2lw
Y19waXBlX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU3IEBACisjIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMK
K2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB3
ZWJraXRweS5jb21tb24uaXBjX3BpcGUgaW1wb3J0IFVuaXhQaXBlU2VydmVyLCBVbml4UGlwZQor
ZnJvbSB3ZWJraXRweS5jb21tb24uaXBjX3BpcGVfdGVzdGNhc2UgaW1wb3J0IER1bW15UHJvY2Vz
c1BpcGUsIFVuaXhQaXBlQ2xpZW50CisKKworZGVmIFVuaXhQaXBlQ2xpZW50VGVzdGluZ1RocmVh
ZChzb3VyY2UsIHBhdGgsIGFyZ3VtZW50cyk6CisgICAgc291cmNlLmNsaWVudFJlc3VsdHMgPSBb
XQorICAgIGNsaWVudCA9IFVuaXhQaXBlQ2xpZW50KHBhdGgpCisKKyAgICBkZWFkbGluZSA9IHRp
bWUudGltZSgpICsgMS4wCisgICAgd2hpbGUgdGltZS50aW1lKCkgPCBkZWFkbGluZSBhbmQgbm90
IGNsaWVudC5pc0Nvbm5lY3RlZCgpOgorICAgICAgICBjbGllbnQuY29ubmVjdCgpCisgICAgaWYg
bm90IGNsaWVudC5pc0Nvbm5lY3RlZCgpOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIHJlYWRp
bmdtb2RlID0gRmFsc2UKKyAgICBmb3IgZWxtIGluIGFyZ3VtZW50czoKKyAgICAgICAgaWYgZWxt
ID09ICctLXJlYWQnOgorICAgICAgICAgICAgZGF0YSA9IGNsaWVudC5yZWFkbGluZShUcnVlKQor
ICAgICAgICAgICAgc291cmNlLmNsaWVudFJlc3VsdHMuYXBwZW5kKGRhdGEpCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICBjbGllbnQuc2VuZChlbG0pCisgICAgY2xpZW50LmRpc2Nvbm5lY3Qo
KQorICAgIHJldHVybiBzb3VyY2UuY2xpZW50UmVzdWx0cworCisKK2NsYXNzIGlwY1BpcGVUZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKipr
d2FyZ3MpOgorICAgICAgICBzdXBlcihpcGNQaXBlVGVzdCwgc2VsZikuX19pbml0X18oKmFyZ3Ms
ICoqa3dhcmdzKQorICAgICAgICBzZWxmLmNsaWVudFJlc3VsdHMgPSBbXQorCisgICAgZGVmIHRl
c3RfYWJzdHJhY3RwaXBlX3N0ZG91dChzZWxmKToKKyAgICAgICAgcGlwZSA9IER1bW15UHJvY2Vz
c1BpcGUoKQorCisgICAgICAgIHBpcGUucHVzaERhdGFGb3JUZXN0aW5nKCdjb21pbmcgZnJvbSBz
dGRvdXRcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlwZS5zdGRvdXRSZWFkKCksICdj
b21pbmcgZnJvbSBzdGRvdXRcbicpCisKKyAgICAgICAgcGlwZS5wdXNoRGF0YUZvclRlc3Rpbmco
J2NvbWluZyBmcm9tIHN0ZGVyclxuJywgc3RkZXJyPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwocGlwZS5zdGRvdXRSZWFkKCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9hYnN0cmFjdHBp
cGVfc3RkZXJyKHNlbGYpOgorICAgICAgICBwaXBlID0gRHVtbXlQcm9jZXNzUGlwZSgpCisKKyAg
ICAgICAgcGlwZS5wdXNoRGF0YUZvclRlc3RpbmcoJ2NvbWluZyBmcm9tIHN0ZG91dFxuJykKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBlLnN0ZGVyclJlYWQoKSwgTm9uZSkKKworICAgICAg
ICBwaXBlLnB1c2hEYXRhRm9yVGVzdGluZygnY29taW5nIGZyb20gc3RkZXJyXG4nLCBzdGRlcnI9
VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBlLnN0ZGVyclJlYWQoKSwgJ2NvbWlu
ZyBmcm9tIHN0ZGVyclxuJykKKworICAgIGRlZiB0ZXN0X2Fic3RyYWN0cGlwZV9kdWVsX3N0cmVh
bXMoc2VsZik6CisgICAgICAgIHBpcGUgPSBEdW1teVByb2Nlc3NQaXBlKCkKKworICAgICAgICBw
aXBlLnB1c2hEYXRhRm9yVGVzdGluZygnY29taW5nIGZyb20gc3Rkb3V0XG4nKQorICAgICAgICBw
aXBlLnB1c2hEYXRhRm9yVGVzdGluZygnY29taW5nIGZyb20gc3RkZXJyXG4nLCBzdGRlcnI9VHJ1
ZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBpcGUucmVhZExpbmUoKSwgJ2NvbWluZyBm
cm9tIHN0ZGVyclxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBlLnJlYWRMaW5lKCks
ICdjb21pbmcgZnJvbSBzdGRvdXRcbicpCisKKyAgICBkZWYgdGVzdF9hYnN0cmFjdHBpcGVfc3Rk
b3V0YmxvY2soc2VsZik6CisgICAgICAgIHBpcGUgPSBEdW1teVByb2Nlc3NQaXBlKCkKKworICAg
ICAgICBwaXBlLnB1c2hEYXRhRm9yVGVzdGluZygnc3Rkb3V0IGxpbmVcbicpCisgICAgICAgIHBp
cGUucHVzaERhdGFGb3JUZXN0aW5nKCdzdGRvdXQgYmxvY2snKQorCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwocGlwZS5yZWFkQnVmZmVyU3Rkb3V0KCksICdzdGRvdXQgbGluZVxuc3Rkb3V0IGJs
b2NrJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBlLnJlYWRCdWZmZXJTdGRlcnIoKSwg
JycpCisKKyAgICBkZWYgdGVzdF9hYnN0cmFjdHBpcGVfc3RkZXJyYmxvY2soc2VsZik6CisgICAg
ICAgIHBpcGUgPSBEdW1teVByb2Nlc3NQaXBlKCkKKworICAgICAgICBwaXBlLnB1c2hEYXRhRm9y
VGVzdGluZygnc3RkZXJyIGxpbmVcbicsIHN0ZGVycj1UcnVlKQorICAgICAgICBwaXBlLnB1c2hE
YXRhRm9yVGVzdGluZygnc3RkZXJyIGJsb2NrJywgc3RkZXJyPVRydWUpCisKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChwaXBlLnJlYWRCdWZmZXJTdGRvdXQoKSwgJycpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwocGlwZS5yZWFkQnVmZmVyU3RkZXJyKCksICdzdGRlcnIgbGluZVxuc3RkZXJy
IGJsb2NrJykKKworICAgIGRlZiB0ZXN0X3VuaXhQaXBlU2VydmVyKHNlbGYpOgorICAgICAgICB0
cnk6CisgICAgICAgICAgICBzZXJ2ID0gVW5peFBpcGVTZXJ2ZXIoJy90bXAvdW5peFBpcGUucGlw
ZScpCisgICAgICAgICAgICB0aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1Vbml4UGlw
ZUNsaWVudFRlc3RpbmdUaHJlYWQsIGFyZ3M9KHNlbGYsIHNlcnYucGF0aCgpLCBbJy0tcmVhZCcs
ICdMaW5lIDFcbicsICdMaW5lIDJcbicsICctLXJlYWQnXSkpCisgICAgICAgICAgICB0aHJlYWQu
c3RhcnQoKQorICAgICAgICAgICAgc2Vydi5jb25uZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZShzZXJ2LmlzQ29ubmVjdGVkKCkpCisKKyAgICAgICAgICAgIHNlcnYuc2VuZCgnU2Vy
dmVyIHNlbmQgMVxuJykKKyAgICAgICAgICAgIHNlcnYuc2VuZCgnU2VydmVyIHNlbmQgMlxuJykK
KworICAgICAgICAgICAgdGhyZWFkLmpvaW4oKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChzZXJ2LnJlYWQoKSwgJ0xpbmUgMVxuTGluZSAyXG4nKQorICAgICAgICAgICAgc2Vydi5kaXNj
b25uZWN0KCkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnU2VydmVyIHNlbmQgMVxu
Jywgc2VsZi5jbGllbnRSZXN1bHRzWzBdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgn
U2VydmVyIHNlbmQgMlxuJywgc2VsZi5jbGllbnRSZXN1bHRzWzFdKQorICAgICAgICBleGNlcHQg
T1NFcnJvciwgZToKKyAgICAgICAgICAgIGlmIG5vdCBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgn
d2luJykgb3Igc3RyKGUpICE9ICdVbml4UGlwZVNlcnZlciBub3QgaW1wbGVtZW50ZWQgb24gdGhp
cyBwbGF0Zm9ybSc6CisgICAgICAgICAgICAgICAgcmFpc2UgZQorCisgICAgZGVmIHRlc3RfdW5p
eFBpcGUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBpcGUgPSBVbml4UGlwZSgn
L3RtcC90ZXN0c3RkaW4ucGlwZScsICcvdG1wL3Rlc3RzdGRvdXQucGlwZScsICcvdG1wL3Rlc3Rz
dGRlcnIucGlwZScpCisgICAgICAgICAgICBzdGRpblRocmVhZCA9IHRocmVhZGluZy5UaHJlYWQo
dGFyZ2V0PVVuaXhQaXBlQ2xpZW50VGVzdGluZ1RocmVhZCwgYXJncz0oc2VsZiwgJy90bXAvdGVz
dHN0ZGluLnBpcGUnLCBbJy0tcmVhZCcsICctLXJlYWQnXSkpCisgICAgICAgICAgICBzdGRvdXRU
aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1Vbml4UGlwZUNsaWVudFRlc3RpbmdUaHJl
YWQsIGFyZ3M9KHNlbGYsICcvdG1wL3Rlc3RzdGRvdXQucGlwZScsIFsnc3Rkb3V0IGxpbmUgMVxu
JywgJ3N0ZG91dCBsaW5lIDJcbiddKSkKKyAgICAgICAgICAgIHN0ZGVyclRocmVhZCA9IHRocmVh
ZGluZy5UaHJlYWQodGFyZ2V0PVVuaXhQaXBlQ2xpZW50VGVzdGluZ1RocmVhZCwgYXJncz0oc2Vs
ZiwgJy90bXAvdGVzdHN0ZGVyci5waXBlJywgWydzdGRlcnIgbGluZSAxXG4nLCAnc3RkZXJyIGxp
bmUgMlxuJ10pKQorICAgICAgICAgICAgc3RkaW5UaHJlYWQuc3RhcnQoKQorICAgICAgICAgICAg
c3Rkb3V0VGhyZWFkLnN0YXJ0KCkKKyAgICAgICAgICAgIHN0ZGVyclRocmVhZC5zdGFydCgpCisg
ICAgICAgICAgICBwaXBlLmNvbm5lY3QoKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUo
cGlwZS5pc0Nvbm5lY3RlZCgpKQorCisgICAgICAgICAgICBwaXBlLnNlbmQoJ1NlcnZlciBzZW5k
IDFcbicpCisgICAgICAgICAgICBwaXBlLnNlbmQoJ1NlcnZlciBzZW5kIDJcbicpCisKKyAgICAg
ICAgICAgIHN0ZGluVGhyZWFkLmpvaW4oKQorICAgICAgICAgICAgc3Rkb3V0VGhyZWFkLmpvaW4o
KQorICAgICAgICAgICAgc3RkZXJyVGhyZWFkLmpvaW4oKQorCisgICAgICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHBpcGUuc3Rkb3V0UmVhZCgpLCAnc3Rkb3V0IGxpbmUgMVxuJykKKyAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlwZS5zdGRvdXRSZWFkKCksICdzdGRvdXQgbGluZSAyXG4n
KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBlLnN0ZGVyclJlYWQoKSwgJ3N0ZGVy
ciBsaW5lIDFcbicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBpcGUuc3RkZXJyUmVh
ZCgpLCAnc3RkZXJyIGxpbmUgMlxuJykKKworICAgICAgICAgICAgcGlwZS5jbG9zZSgpCisKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1NlcnZlciBzZW5kIDFcbicsIHNlbGYuY2xpZW50
UmVzdWx0c1swXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1NlcnZlciBzZW5kIDJc
bicsIHNlbGYuY2xpZW50UmVzdWx0c1sxXSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6Cisg
ICAgICAgICAgICBpZiBub3Qgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpIG9yIHN0cihl
KSAhPSAnVW5peFBpcGVTZXJ2ZXIgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0nOgor
ICAgICAgICAgICAgICAgIHJhaXNlIGUKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9iYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNl
LnB5CShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFz
ZS5weQkod29ya2luZyBjb3B5KQpAQCAtODk3LDYgKzg5NywxMiBAQCBjbGFzcyBQb3J0KG9iamVj
dCk6CiAKICAgICAgICAgcmV0dXJuIGNsZWFuX2VudgogCisgICAgZGVmIGRldmljZURlZmluZWQo
c2VsZik6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHJ1bk9uRGV2aWNlKHNlbGYs
IGNtZCwgZW52aT1Ob25lKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKwogICAgIGRlZiBfY2xlYXJf
Z2xvYmFsX2NhY2hlc19hbmRfdGVtcG9yYXJ5X2ZpbGVzKHNlbGYpOgogICAgICAgICBwYXNzCiAK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlX3VuaXR0ZXN0LnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlX3VuaXR0ZXN0LnB5CShy
ZXZpc2lvbiAyMDk4ODYpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZV91bml0
dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMzk1LDYgKzM5NSwxMiBAQCBjbGFzcyBQb3J0VGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3J0LmlzX3cz
Y19yZXNvdXJjZV9maWxlKHBvcnQuaG9zdC5maWxlc3lzdGVtLCBwb3J0LmxheW91dF90ZXN0c19k
aXIoKSArICIvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRwUmVxdWVzdCIs
ICJ4bWxodHRwcmVxdWVzdC1zeW5jLWJsb2NrLWRlZmVyLXNjcmlwdHMtc3ViZnJhbWUuaHRtbCIp
KQogICAgICAgICBzZWxmLmFzc2VydFRydWUocG9ydC5pc193M2NfcmVzb3VyY2VfZmlsZShwb3J0
Lmhvc3QuZmlsZXN5c3RlbSwgcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkgKyAiL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvZG9tL25vZGVzL0RvY3VtZW50LWNyZWF0ZUVsZW1lbnQtbmFt
ZXNwYWNlLXRlc3RzIiwgInRlc3QuaHRtbCIpKQogCisgICAgZGVmIHRlc3RfZGV2aWNlKHNlbGYp
OgorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEZh
bHNlKHBvcnQuZGV2aWNlRGVmaW5lZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwb3J0
LnJ1bk9uRGV2aWNlKFsncGluZycsICc8bm8taWQ+J10pKQorCisKIGNsYXNzIE5hdHVyYWxDb21w
YXJlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAg
ICBzZWxmLl9wb3J0ID0gVGVzdFBvcnQoTW9ja1N5c3RlbUhvc3QoKSkKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weQkocmV2aXNpb24gMjA5ODg2KQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weQkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEs
MTAgQEAKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KIAogaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBtdWx0aXByb2Nl
c3NpbmcKIGltcG9ydCBvcworaW1wb3J0IHBsaXN0bGliCitpbXBvcnQgc2h1dGlsCiBpbXBvcnQg
dGltZQogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uY3Jhc2hsb2dzIGltcG9ydCBDcmFz
aExvZ3MKQEAgLTE3NCwzICsxNzcsMjQgQEAgY2xhc3MgRGFyd2luUG9ydChBcHBsZVBvcnQpOgog
ICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3I6CiAgICAgICAgICAgICBfbG9nLndhcm4oInhjcnVu
IGZhaWxlZDsgZmFsbGluZyBiYWNrIHRvICclcycuIiAlIGZhbGxiYWNrKQogICAgICAgICAgICAg
cmV0dXJuIGZhbGxiYWNrCisKKyAgICBkZWYgZXh0cmFjdEJ1bmRsZUlEKHNlbGYsIGFwcCk6Cisg
ICAgICAgIHBpZCA9IHN0cihtdWx0aXByb2Nlc3NpbmcuY3VycmVudF9wcm9jZXNzKCkubmFtZSku
cmVwbGFjZSgnLycsICctJykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzaHV0aWwuY29w
eWZpbGUoYXBwICsgIi9JbmZvLnBsaXN0IiwgIi90bXAvIiArIHBpZCArICJJbmZvLnBsaXN0IikK
KyAgICAgICAgICAgIGlmIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ2NwJywgYXBwICsg
Jy9JbmZvLnBsaXN0JywgJy90bXAvJyArIHBpZCArICdJbmZvLnBsaXN0J10sIHJldHVybl9leGl0
X2NvZGU9VHJ1ZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIGlm
IHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ3BsdXRpbCcsICctY29udmVydCcsICd4bWwx
JywgJy90bXAvJyArIHBpZCArICdJbmZvLnBsaXN0J10sIHJldHVybl9leGl0X2NvZGU9VHJ1ZSk6
CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIHBsID0gcGxpc3RsaWIu
cmVhZFBsaXN0KCIvdG1wLyIgKyBwaWQgKyAiSW5mby5wbGlzdCIpCisgICAgICAgIGV4Y2VwdCBF
eGNlcHRpb24sIGVycjoKKyAgICAgICAgICAgIHBsID0gTm9uZQorCisgICAgICAgIHRyeToKKyAg
ICAgICAgICAgIG9zLnJlbW92ZSgiL3RtcC8iICsgcGlkICsgIkluZm8ucGxpc3QiKQorICAgICAg
ICAgICAgaWYgcGw6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBsWyJDRkJ1bmRsZUlkZW50aWZp
ZXIiXQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHJldHVybiBO
b25lCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luX3Rlc3RjYXNlLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW5fdGVzdGNh
c2UucHkJKHJldmlzaW9uIDIwOTg4NikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9k
YXJ3aW5fdGVzdGNhc2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTIwLDYgKzIwLDkgQEAKICMgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAoraW1wb3J0IG9zCitpbXBvcnQgcGxp
c3RsaWIKKwogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBwb3J0X3Rlc3RjYXNlCiBmcm9tIHdl
YmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZXN5c3RlbV9tb2NrIGltcG9ydCBNb2NrRmlsZVN5c3Rl
bQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1
dENhcHR1cmUKQEAgLTExOSwzICsxMjIsMTAgQEAgY2xhc3MgRGFyd2luVGVzdChwb3J0X3Rlc3Rj
YXNlLlBvcnRUZXN0QwogICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQogICAgICAgICBw
b3J0Ll9leGVjdXRpdmUgPSBNb2NrRXhlY3V0aXZlMihydW5fY29tbWFuZF9mbj10aHJvd2luZ19y
dW5fY29tbWFuZCkKICAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYs
IHBvcnQuc2FtcGxlX3Byb2Nlc3MsIGFyZ3M9Wyd0ZXN0JywgNDJdKQorCisgICAgZGVmIHRlc3Rf
cGxpc3Qoc2VsZik6CisgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCisgICAgICAgIHBs
ID0gZGljdChDRkJ1bmRsZUlkZW50aWZpZXI9Im9yZy53ZWJraXQuZGVtbyIpCisgICAgICAgIHBs
aXN0bGliLndyaXRlUGxpc3QocGwsICIvdG1wL0luZm8ucGxpc3QiKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHBvcnQuZXh0cmFjdEJ1bmRsZUlEKCIvdG1wIiksIE5vbmUpCisgICAgICAgIG9z
LnJlbW92ZSgiL3RtcC9JbmZvLnBsaXN0IikKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC9kcml2ZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2RyaXZlci5weQkocmV2aXNpb24gMjA5ODg2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L2RyaXZlci5weQkod29ya2luZyBjb3B5KQpAQCAtMTM4LDcgKzEzOCw3IEBAIGNsYXNzIERy
aXZlcihvYmplY3QpOgogICAgICAgICBzZWxmLl9kcml2ZXJfdXNlcl9kaXJlY3Rvcnlfc3VmZml4
ID0gTm9uZQogICAgICAgICBzZWxmLl9kcml2ZXJfdXNlcl9jYWNoZV9kaXJlY3RvcnkgPSBOb25l
CiAKLSAgICAgICAgIyBXZWJLaXRUZXN0UnVubmVyL0xheW91dFRlc3RSZWxheSBjYW4gcmVwb3J0
IGJhY2sgc3VicHJvY2VzcyBjcmFzaGVzIGJ5IHByaW50aW5nCisgICAgICAgICMgV2ViS2l0VGVz
dFJ1bm5lciBjYW4gcmVwb3J0IGJhY2sgc3VicHJvY2VzcyBjcmFzaGVzIGJ5IHByaW50aW5nCiAg
ICAgICAgICMgIiNDUkFTSEVEIC0gUFJPQ0VTU05BTUUiLiAgU2luY2UgdGhvc2UgY2FuIGhhcHBl
biBhdCBhbnkgdGltZSBhbmQgU2VydmVyUHJvY2VzcwogICAgICAgICAjIHdvbid0IGJlIGF3YXJl
IG9mIHRoZW0gKHNpbmNlIHRoZSBhY3R1YWwgdG9vbCBkaWRuJ3QgY3Jhc2gsIGp1c3QgYSBzdWJw
cm9jZXNzKQogICAgICAgICAjIHdlIHJlY29yZCB0aGUgY3Jhc2hlZCBzdWJwcm9jZXNzIG5hbWUg
aGVyZS4KQEAgLTE4Miw2ICsxODIsNyBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAgICAgICAg
IiIiCiAgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQogICAgICAgICBzZWxmLnN0YXJ0
KGRyaXZlcl9pbnB1dC5zaG91bGRfcnVuX3BpeGVsX3Rlc3QsIGRyaXZlcl9pbnB1dC5hcmdzKQor
ICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5jbGVhbigpCiAgICAgICAgIHRlc3RfYmVnaW5f
dGltZSA9IHRpbWUudGltZSgpCiAgICAgICAgIHNlbGYuX2RyaXZlcl90aW1lZF9vdXQgPSBGYWxz
ZQogICAgICAgICBzZWxmLl9jcmFzaF9yZXBvcnRfZnJvbV9kcml2ZXIgPSBOb25lCkBAIC0zMjcs
NyArMzI4LDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAKICAgICBkZWYgX3NldHVwX2Vudmly
b25fZm9yX2RyaXZlcihzZWxmLCBlbnZpcm9ubWVudCk6CiAgICAgICAgIGJ1aWxkX3Jvb3RfcGF0
aCA9IHN0cihzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCkpCi0gICAgICAgICMgRklYTUU6IERZTERf
KiB2YXJpYWJsZXMgc2hvdWxkIGJlIE1hYy1vbmx5LiBFdmVuIGlPUyBTaW11bGF0b3IgZG9lc24n
dCBuZWVkIHRoZW0sIGFzIExheW91dFRlc3RSZWxheSBpcyBhIGhvc3QgYmluYXJ5LgorICAgICAg
ICAjIEZJWE1FOiBEWUxEXyogdmFyaWFibGVzIHNob3VsZCBiZSBNYWMtb25seS4gaU9TIHNpbXVs
YXRvcnMgc2hvdWxkIGluY2x1ZGUgdGhlbSBpbiBpdCdzIGFwcCBidW5kbGUuCiAgICAgICAgIHNl
bGYuX2FwcGVuZF9lbnZpcm9ubWVudF92YXJpYWJsZV9wYXRoKGVudmlyb25tZW50LCAnRFlMRF9M
SUJSQVJZX1BBVEgnLCBidWlsZF9yb290X3BhdGgpCiAgICAgICAgIHNlbGYuX2FwcGVuZF9lbnZp
cm9ubWVudF92YXJpYWJsZV9wYXRoKGVudmlyb25tZW50LCAnX19YUENfRFlMRF9MSUJSQVJZX1BB
VEgnLCBidWlsZF9yb290X3BhdGgpCiAgICAgICAgIHNlbGYuX2FwcGVuZF9lbnZpcm9ubWVudF92
YXJpYWJsZV9wYXRoKGVudmlyb25tZW50LCAnRFlMRF9GUkFNRVdPUktfUEFUSCcsIGJ1aWxkX3Jv
b3RfcGF0aCkKQEAgLTYxMCwyNCArNjExLDIwIEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogCiAK
ICMgRklYTUU6IHRoaXMgc2hvdWxkIGJlIGFic3RyYWN0ZWQgb3V0IHZpYSB0aGUgUG9ydCBzdWJj
bGFzcyBzb21laG93LgotY2xhc3MgSU9TU2ltdWxhdG9yRHJpdmVyKERyaXZlcik6CitjbGFzcyBE
ZXZpY2VEcml2ZXIoRHJpdmVyKToKICAgICBkZWYgY21kX2xpbmUoc2VsZiwgcGl4ZWxfdGVzdHMs
IHBlcl90ZXN0X2FyZ3MpOgotICAgICAgICBjbWQgPSBzdXBlcihJT1NTaW11bGF0b3JEcml2ZXIs
IHNlbGYpLmNtZF9saW5lKHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKQotICAgICAgICByZWxh
eV90b29sID0gc2VsZi5fcG9ydC5yZWxheV9wYXRoCisgICAgICAgIGNtZCA9IHN1cGVyKERldmlj
ZURyaXZlciwgc2VsZikuY21kX2xpbmUocGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpCisgICAg
ICAgIHJlbGF5X3Rvb2wgPSAncnVuLW9uLWRldmljZScKICAgICAgICAgZHVtcF90b29sID0gY21k
WzBdCiAgICAgICAgIGR1bXBfdG9vbF9hcmdzID0gY21kWzE6XQogICAgICAgICBwcm9kdWN0X2Rp
ciA9IHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoKQotICAgICAgICByZWxheV9hcmdzID0gWwotICAg
ICAgICAgICAgJy1kZXZlbG9wZXJEaXInLCBzZWxmLl9wb3J0LmRldmVsb3Blcl9kaXIsCi0gICAg
ICAgICAgICAnLXVkaWQnLCBzZWxmLl9wb3J0LmRldmljZV9pZF9mb3Jfd29ya2VyX251bWJlcihz
ZWxmLl93b3JrZXJfbnVtYmVyKSwKLSAgICAgICAgICAgICctcHJvZHVjdERpcicsIHByb2R1Y3Rf
ZGlyLAotICAgICAgICAgICAgJy1hcHAnLCBkdW1wX3Rvb2wsCi0gICAgICAgIF0KLSAgICAgICAg
cmV0dXJuIFtyZWxheV90b29sXSArIHJlbGF5X2FyZ3MgKyBbJy0tJ10gKyBkdW1wX3Rvb2xfYXJn
cworCisgICAgICAgIHJlbGF5X2FyZ3MgPSBbc2VsZi5fcG9ydC5kZXZpY2VfaWRfZm9yX3dvcmtl
cl9udW1iZXIoc2VsZi5fd29ya2VyX251bWJlciksIGR1bXBfdG9vbF0KKyAgICAgICAgcmV0dXJu
IFtyZWxheV90b29sXSArIHJlbGF5X2FyZ3MgKyBkdW1wX3Rvb2xfYXJncwogCiAgICAgZGVmIF9z
ZXR1cF9lbnZpcm9uX2Zvcl9kcml2ZXIoc2VsZiwgZW52aXJvbm1lbnQpOgogICAgICAgICBlbnZp
cm9ubWVudFsnREVWRUxPUEVSX0RJUiddID0gc2VsZi5fcG9ydC5kZXZlbG9wZXJfZGlyCi0gICAg
ICAgIHJldHVybiBzdXBlcihJT1NTaW11bGF0b3JEcml2ZXIsIHNlbGYpLl9zZXR1cF9lbnZpcm9u
X2Zvcl9kcml2ZXIoZW52aXJvbm1lbnQpCisgICAgICAgIHJldHVybiBzdXBlcihEZXZpY2VEcml2
ZXIsIHNlbGYpLl9zZXR1cF9lbnZpcm9uX2Zvcl9kcml2ZXIoZW52aXJvbm1lbnQpCiAKIAogY2xh
c3MgQ29udGVudEJsb2NrKG9iamVjdCk6CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvaW9zLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Mu
cHkJKHJldmlzaW9uIDIwOTg4NikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Mu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTM0LDE0ICszNCwxMDggQEAgZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMubW9kZWxzLnRlc3RfYwogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBjb25maWcg
YXMgcG9ydF9jb25maWcKIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgZHJpdmVyLCBpbWFnZV9k
aWZmCiBmcm9tIHdlYmtpdHB5LnBvcnQuZGFyd2luIGltcG9ydCBEYXJ3aW5Qb3J0Ci1mcm9tIHdl
YmtpdHB5Lnhjb2RlLnNpbXVsYXRvciBpbXBvcnQgU2ltdWxhdG9yLCBSdW50aW1lLCBEZXZpY2VU
eXBlCitmcm9tIHdlYmtpdHB5Lnhjb2RlLnNpbXVsYXRvciBpbXBvcnQgU2ltdWxhdG9yLCBSdW50
aW1lLCBEZXZpY2VUeXBlLCBEZXZpY2UKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5jcmFz
aGxvZ3MgaW1wb3J0IENyYXNoTG9ncwogCi0KIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25h
bWVfXykKIAogCi1jbGFzcyBJT1NQb3J0KERhcndpblBvcnQpOgorY2xhc3MgSU9TQmFzZShEYXJ3
aW5Qb3J0KToKKworICAgIFNVQlBST0NFU1NfQ1JBU0hfUkVHRVggPSByZS5jb21waWxlKCcjQ1JB
U0hFRCAtICg/UDxzdWJwcm9jZXNzX25hbWU+XFMrKSBcKHBpZCAoP1A8c3VicHJvY2Vzc19waWQ+
XGQrKVwpJykKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0X25hbWUsICoqa3dh
cmdzKToKKyAgICAgICAgRGFyd2luUG9ydC5fX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0X25hbWUs
ICoqa3dhcmdzKQorICAgICAgICBzZWxmLl9wcmludGluZ19jbWRfbGluZSA9IEZhbHNlCisKKyAg
ICBkZWYgZHJpdmVyX25hbWUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignZHJp
dmVyX25hbWUnKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9vcHRpb24oJ2RyaXZlcl9u
YW1lJykKKyAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd3ZWJraXRfdGVzdF9ydW5uZXInKToK
KyAgICAgICAgICAgIHJldHVybiAnV2ViS2l0VGVzdFJ1bm5lckFwcC5hcHAnCisgICAgICAgIHJl
dHVybiAnRHVtcFJlbmRlclRyZWUuYXBwJworCisgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYs
IG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49dGltZS50aW1l
LCBzbGVlcF9mbj10aW1lLnNsZWVwLCB3YWl0X2Zvcl9sb2c9VHJ1ZSk6CisgICAgICAgIHRpbWVf
Zm4gPSB0aW1lX2ZuIG9yIHRpbWUudGltZQorICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9y
IHRpbWUuc2xlZXAKKworICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgY29sbGVjdCB0aGUgYWN0
dWFsIGNyYXNoIGxvZyBmb3IgRHVtcFJlbmRlclRyZWUuYXBwIGJlY2F1c2UgaXQgaW5jbHVkZXMg
bW9yZQorICAgICAgICAjIGluZm9ybWF0aW9uIChlLmcuIGV4Y2VwdGlvbiBjb2RlcykgdGhhbiBp
cyBhdmFpbGFibGUgaW4gdGhlIHN0YWNrIHRyYWNlIHdyaXR0ZW4gdG8gc3RhbmRhcmQgZXJyb3Iu
CisgICAgICAgIHN0ZGVycl9saW5lcyA9IFtdCisgICAgICAgIGNyYXNoZWRfc3VicHJvY2Vzc19u
YW1lX2FuZF9waWQgPSBOb25lICAjIGUuZy4gKCdEdW1wUmVuZGVyVHJlZS5hcHAnLCAxMjM0KQor
ICAgICAgICBmb3IgbGluZSBpbiAoc3RkZXJyIG9yICcnKS5zcGxpdGxpbmVzKCk6CisgICAgICAg
ICAgICBpZiBub3QgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZDoKKyAgICAgICAgICAg
ICAgICBtYXRjaCA9IHNlbGYuU1VCUFJPQ0VTU19DUkFTSF9SRUdFWC5tYXRjaChsaW5lKQorICAg
ICAgICAgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgICAgICAgICBjcmFzaGVkX3N1YnBy
b2Nlc3NfbmFtZV9hbmRfcGlkID0gKG1hdGNoLmdyb3VwKCdzdWJwcm9jZXNzX25hbWUnKSwgaW50
KG1hdGNoLmdyb3VwKCdzdWJwcm9jZXNzX3BpZCcpKSkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWUKKyAgICAgICAgICAgIHN0ZGVycl9saW5lcy5hcHBlbmQobGluZSkKKworICAgICAgICBp
ZiBjcmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlkOgorICAgICAgICAgICAgcmV0dXJuIHNl
bGYuX2dldF9jcmFzaF9sb2coY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZFswXSwgY3Jh
c2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZFsxXSwgc3Rkb3V0LAorICAgICAgICAgICAgICAg
ICdcbicuam9pbihzdGRlcnJfbGluZXMpLCBuZXdlcl90aGFuLCB0aW1lX2ZuLCBzbGVlcF9mbiwg
d2FpdF9mb3JfbG9nKQorCisgICAgICAgIF9sb2cuZGVidWcoJ2xvb2tpbmcgZm9yIGNyYXNoIGxv
ZyBmb3IgJXM6JXMnICUgKG5hbWUsIHN0cihwaWQpKSkKKyAgICAgICAgY3Jhc2hfbG9nID0gJycK
KyAgICAgICAgY3Jhc2hfbG9ncyA9IENyYXNoTG9ncyhzZWxmLmhvc3QpCisgICAgICAgIG5vdyA9
IHRpbWVfZm4oKQorICAgICAgICBkZWFkbGluZSA9IG5vdyArIDUgKiBpbnQoc2VsZi5nZXRfb3B0
aW9uKCdjaGlsZF9wcm9jZXNzZXMnLCAxKSkKKyAgICAgICAgd2hpbGUgbm90IGNyYXNoX2xvZyBh
bmQgbm93IDw9IGRlYWRsaW5lOgorICAgICAgICAgICAgY3Jhc2hfbG9nID0gY3Jhc2hfbG9ncy5m
aW5kX25ld2VzdF9sb2cobmFtZSwgcGlkLCBpbmNsdWRlX2Vycm9ycz1UcnVlLCBuZXdlcl90aGFu
PW5ld2VyX3RoYW4pCisgICAgICAgICAgICBpZiBub3Qgd2FpdF9mb3JfbG9nOgorICAgICAgICAg
ICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBub3QgY3Jhc2hfbG9nIG9yIG5vdCBbbGluZSBm
b3IgbGluZSBpbiBjcmFzaF9sb2cuc3BsaXRsaW5lcygpIGlmIG5vdCBsaW5lLnN0YXJ0c3dpdGgo
J0VSUk9SJyldOgorICAgICAgICAgICAgICAgIHNsZWVwX2ZuKDAuMSkKKyAgICAgICAgICAgICAg
ICBub3cgPSB0aW1lX2ZuKCkKKworICAgICAgICBpZiBub3QgY3Jhc2hfbG9nOgorICAgICAgICAg
ICAgcmV0dXJuIHN0ZGVyciwgTm9uZQorICAgICAgICByZXR1cm4gc3RkZXJyLCBjcmFzaF9sb2cK
KworICAgIGRlZiBfdGVzdGluZ19kZXZpY2Uoc2VsZiwgbnVtYmVyKToKKyAgICAgICAgcmV0dXJu
IE5vbmUKKworICAgIGRlZiBkZXZpY2VfaWRfZm9yX3dvcmtlcl9udW1iZXIoc2VsZiwgbnVtYmVy
KToKKyAgICAgICAgaWYgc2VsZi5fcHJpbnRpbmdfY21kX2xpbmUgb3Igbm90IHNlbGYuX3Rlc3Rp
bmdfZGV2aWNlKG51bWJlcik6CisgICAgICAgICAgICByZXR1cm4gJzxkdW1teSBpZD4nCisgICAg
ICAgIHJldHVybiBzZWxmLl90ZXN0aW5nX2RldmljZShudW1iZXIpLnVkaWQKKworICAgIGRlZiBf
ZHJpdmVyX2NsYXNzKHNlbGYpOgorICAgICAgICByZXR1cm4gZHJpdmVyLkRldmljZURyaXZlcgor
CisgICAgZGVmIGRldmljZURlZmluZWQoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAg
ICBkZWYgX2RldmljZVBpbmcoc2VsZiwgZGV2aWNlKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisK
KyAgICBkZWYgX2RldmljZUluc3RhbGwoc2VsZiwgZGV2aWNlLCBhcHApOgorICAgICAgICByZXR1
cm4gRmFsc2UKKworICAgIGRlZiBfZGV2aWNlUnVuKHNlbGYsIGNtZCwgZW52aT1Ob25lKToKKyAg
ICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBfZGV2aWNlS2lsbChzZWxmLCBkZXZpY2UsIGFw
cCk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHJ1bk9uRGV2aWNlKHNlbGYsIGNt
ZCwgZW52aT1Ob25lKToKKyAgICAgICAgaWYgbm90IGNtZDoKKyAgICAgICAgICAgIHJldHVybiBO
b25lCisgICAgICAgIGlmIGNtZFswXSA9PSAncGluZyc6CisgICAgICAgICAgICBpZiBsZW4oY21k
KSA+PSAyOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9kZXZpY2VQaW5nKGNtZFsxXSkK
KyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2RldmljZVBp
bmcoTm9uZSkKKyAgICAgICAgZWxpZiBjbWRbMF0gPT0gJ3J1bic6CisgICAgICAgICAgICByZXR1
cm4gc2VsZi5fZGV2aWNlUnVuKGNtZFsxOl0sIGVudmkpCisgICAgICAgIGVsaWYgY21kWzBdID09
ICdpbnN0YWxsJzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9kZXZpY2VJbnN0YWxsKGNtZFsx
XSwgY21kWzJdKQorICAgICAgICBlbGlmIGNtZFswXSA9PSAna2lsbCc6CisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fZGV2aWNlS2lsbChjbWRbMV0sIGNtZFsyXSkKKyAgICAgICAgcmV0dXJuIE5v
bmUKKworCitjbGFzcyBJT1NQb3J0KElPU0Jhc2UpOgogICAgIHBvcnRfbmFtZSA9ICJpb3MiCiAK
ICAgICBBUkNISVRFQ1RVUkVTID0gWydhcm12NycsICdhcm12N3MnLCAnYXJtNjQnXQpAQCAtNjYs
NyArMTYwLDcgQEAgY2xhc3MgSU9TUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgcmV0dXJuICdp
b3MnCiAKIAotY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKK2NsYXNzIElPU1Np
bXVsYXRvclBvcnQoSU9TQmFzZSk6CiAgICAgcG9ydF9uYW1lID0gImlvcy1zaW11bGF0b3IiCiAK
ICAgICBGVVRVUkVfVkVSU0lPTiA9ICdmdXR1cmUnCkBAIC03OCw3ICsxNzIsNiBAQCBjbGFzcyBJ
T1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgIFNESyA9ICdpcGhvbmVzaW11bGF0b3In
CiAKICAgICBTSU1VTEFUT1JfQlVORExFX0lEID0gJ2NvbS5hcHBsZS5pcGhvbmVzaW11bGF0b3In
Ci0gICAgcmVsYXlfbmFtZSA9ICdMYXlvdXRUZXN0UmVsYXknCiAgICAgU0lNVUxBVE9SX0RJUkVD
VE9SWSA9ICIvdG1wL1dlYktpdFRlc3RpbmdTaW11bGF0b3JzLyIKICAgICBMU1JFR0lTVEVSX1BB
VEggPSAiL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29yZVNlcnZpY2VzLmZyYW1ld29yay9G
cmFtZXdvcmtzL0xhdW5jaFNlcnZpY2VzLmZyYW1ld29yay9WZXJzaW9ucy9DdXJyZW50L1N1cHBv
cnQvbHNyZWdpc3RlciIKICAgICBQUk9DRVNTX0NPVU5UX0VTVElNQVRFX1BFUl9TSU1VTEFUT1Jf
SU5TVEFOQ0UgPSAxMDAKQEAgLTk2LDEwICsxODksOSBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0
KERhcndpblBvcnQpOgogICAgIH0KIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0
X25hbWUsICoqa3dhcmdzKToKLSAgICAgICAgRGFyd2luUG9ydC5fX2luaXRfXyhzZWxmLCBob3N0
LCBwb3J0X25hbWUsICoqa3dhcmdzKQorICAgICAgICBJT1NCYXNlLl9faW5pdF9fKHNlbGYsIGhv
c3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpCiAKICAgICAgICAgb3B0aW9uYWxfZGV2aWNlX2NsYXNz
ID0gc2VsZi5nZXRfb3B0aW9uKCdkZXZpY2VfY2xhc3MnKQotICAgICAgICBzZWxmLl9wcmludGlu
Z19jbWRfbGluZSA9IEZhbHNlCiAgICAgICAgIHNlbGYuX2RldmljZV9jbGFzcyA9IG9wdGlvbmFs
X2RldmljZV9jbGFzcyBpZiBvcHRpb25hbF9kZXZpY2VfY2xhc3MgZWxzZSBzZWxmLkRFRkFVTFRf
REVWSUNFX0NMQVNTCiAgICAgICAgIF9sb2cuZGVidWcoJ0lPU1NpbXVsYXRvclBvcnQgX2Rldmlj
ZV9jbGFzcyBpcyAlcycsIHNlbGYuX2RldmljZV9jbGFzcykKIApAQCAtMTQ4LDE2ICsyNDAsNiBA
QCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgICAgICAgICAgZGV2aWNl
X3R5cGUgPSBEZXZpY2VUeXBlLmZyb21fbmFtZShkZXZpY2VfbmFtZSkKICAgICAgICAgcmV0dXJu
IGRldmljZV90eXBlCiAKLSAgICBAcHJvcGVydHkKLSAgICBAbWVtb2l6ZWQKLSAgICBkZWYgcmVs
YXlfcGF0aChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fcm9vdF93YXNfc2V0OgotICAgICAgICAg
ICAgcGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0uYWJzcGF0aChzZWxmLmdldF9vcHRpb24oJ3Jvb3Qn
KSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1hY19jb25maWcgPSBwb3J0X2NvbmZpZy5D
b25maWcoc2VsZi5fZXhlY3V0aXZlLCBzZWxmLl9maWxlc3lzdGVtLCAnbWFjJykKLSAgICAgICAg
ICAgIHBhdGggPSBtYWNfY29uZmlnLmJ1aWxkX2RpcmVjdG9yeShzZWxmLmdldF9vcHRpb24oJ2Nv
bmZpZ3VyYXRpb24nKSkKLSAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihwYXRo
LCBzZWxmLnJlbGF5X25hbWUpCi0KICAgICBAbWVtb2l6ZWQKICAgICBkZWYgY2hpbGRfcHJvY2Vz
c2VzKHNlbGYpOgogICAgICAgICByZXR1cm4gaW50KHNlbGYuZ2V0X29wdGlvbignY2hpbGRfcHJv
Y2Vzc2VzJykpCkBAIC0xODIsNzUgKzI2NCwxMiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERh
cndpblBvcnQpOgogCiAgICAgICAgIHJldHVybiBtaW4obWF4aW11bV9zaW11bGF0b3JfY291bnRf
b25fdGhpc19zeXN0ZW0sIGJlc3RfY2hpbGRfcHJvY2Vzc19jb3VudF9mb3JfY3B1KQogCi0gICAg
ZGVmIF9jaGVja19yZWxheShzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0ZW0u
ZXhpc3RzKHNlbGYucmVsYXlfcGF0aCk6Ci0gICAgICAgICAgICBfbG9nLmVycm9yKCIlcyB3YXMg
bm90IGZvdW5kIGF0ICVzIiAlIChzZWxmLnJlbGF5X25hbWUsIHNlbGYucmVsYXlfcGF0aCkpCi0g
ICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRydWUKLQogICAgIGRlZiBf
Y2hlY2tfcG9ydF9idWlsZChzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuX3Jvb3Rfd2FzX3Nl
dCBhbmQgc2VsZi5nZXRfb3B0aW9uKCdidWlsZCcpIGFuZCBub3Qgc2VsZi5fYnVpbGRfcmVsYXko
KToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBpZiBub3Qgc2VsZi5fY2hlY2tf
cmVsYXkoKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1ZQot
Ci0gICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIs
IG5ld2VyX3RoYW4sIHRpbWVfZm49dGltZS50aW1lLCBzbGVlcF9mbj10aW1lLnNsZWVwLCB3YWl0
X2Zvcl9sb2c9VHJ1ZSk6Ci0gICAgICAgIHRpbWVfZm4gPSB0aW1lX2ZuIG9yIHRpbWUudGltZQot
ICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9yIHRpbWUuc2xlZXAKLQotICAgICAgICAjIEZJ
WE1FOiBXZSBzaG91bGQgY29sbGVjdCB0aGUgYWN0dWFsIGNyYXNoIGxvZyBmb3IgRHVtcFJlbmRl
clRyZWUuYXBwIGJlY2F1c2UgaXQgaW5jbHVkZXMgbW9yZQotICAgICAgICAjIGluZm9ybWF0aW9u
IChlLmcuIGV4Y2VwdGlvbiBjb2RlcykgdGhhbiBpcyBhdmFpbGFibGUgaW4gdGhlIHN0YWNrIHRy
YWNlIHdyaXR0ZW4gdG8gc3RhbmRhcmQgZXJyb3IuCi0gICAgICAgIHN0ZGVycl9saW5lcyA9IFtd
Ci0gICAgICAgIGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9waWQgPSBOb25lICAjIGUuZy4g
KCdEdW1wUmVuZGVyVHJlZS5hcHAnLCAxMjM0KQotICAgICAgICBmb3IgbGluZSBpbiAoc3RkZXJy
IG9yICcnKS5zcGxpdGxpbmVzKCk6Ci0gICAgICAgICAgICBpZiBub3QgY3Jhc2hlZF9zdWJwcm9j
ZXNzX25hbWVfYW5kX3BpZDoKLSAgICAgICAgICAgICAgICBtYXRjaCA9IHNlbGYuU1VCUFJPQ0VT
U19DUkFTSF9SRUdFWC5tYXRjaChsaW5lKQotICAgICAgICAgICAgICAgIGlmIG1hdGNoOgotICAg
ICAgICAgICAgICAgICAgICBjcmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlkID0gKG1hdGNo
Lmdyb3VwKCdzdWJwcm9jZXNzX25hbWUnKSwgaW50KG1hdGNoLmdyb3VwKCdzdWJwcm9jZXNzX3Bp
ZCcpKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIHN0ZGVycl9s
aW5lcy5hcHBlbmQobGluZSkKLQotICAgICAgICBpZiBjcmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9h
bmRfcGlkOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9jcmFzaF9sb2coY3Jhc2hlZF9z
dWJwcm9jZXNzX25hbWVfYW5kX3BpZFswXSwgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3Bp
ZFsxXSwgc3Rkb3V0LAotICAgICAgICAgICAgICAgICdcbicuam9pbihzdGRlcnJfbGluZXMpLCBu
ZXdlcl90aGFuLCB0aW1lX2ZuLCBzbGVlcF9mbiwgd2FpdF9mb3JfbG9nKQotCi0gICAgICAgICMg
TGF5b3V0VGVzdFJlbGF5IGNyYXNoZWQKLSAgICAgICAgX2xvZy5kZWJ1ZygnbG9va2luZyBmb3Ig
Y3Jhc2ggbG9nIGZvciAlczolcycgJSAobmFtZSwgc3RyKHBpZCkpKQotICAgICAgICBjcmFzaF9s
b2cgPSAnJwotICAgICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hMb2dzKHNlbGYuaG9zdCkKLSAgICAg
ICAgbm93ID0gdGltZV9mbigpCi0gICAgICAgIGRlYWRsaW5lID0gbm93ICsgNSAqIGludChzZWxm
LmdldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpKQotICAgICAgICB3aGlsZSBub3QgY3Jh
c2hfbG9nIGFuZCBub3cgPD0gZGVhZGxpbmU6Ci0gICAgICAgICAgICBjcmFzaF9sb2cgPSBjcmFz
aF9sb2dzLmZpbmRfbmV3ZXN0X2xvZyhuYW1lLCBwaWQsIGluY2x1ZGVfZXJyb3JzPVRydWUsIG5l
d2VyX3RoYW49bmV3ZXJfdGhhbikKLSAgICAgICAgICAgIGlmIG5vdCB3YWl0X2Zvcl9sb2c6Ci0g
ICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGlmIG5vdCBjcmFzaF9sb2cgb3Igbm90
IFtsaW5lIGZvciBsaW5lIGluIGNyYXNoX2xvZy5zcGxpdGxpbmVzKCkgaWYgbm90IGxpbmUuc3Rh
cnRzd2l0aCgnRVJST1InKV06Ci0gICAgICAgICAgICAgICAgc2xlZXBfZm4oMC4xKQotICAgICAg
ICAgICAgICAgIG5vdyA9IHRpbWVfZm4oKQotCi0gICAgICAgIGlmIG5vdCBjcmFzaF9sb2c6Ci0g
ICAgICAgICAgICByZXR1cm4gc3RkZXJyLCBOb25lCi0gICAgICAgIHJldHVybiBzdGRlcnIsIGNy
YXNoX2xvZwotCi0gICAgZGVmIF9idWlsZF9yZWxheShzZWxmKToKLSAgICAgICAgZW52aXJvbm1l
bnQgPSBzZWxmLmhvc3QuY29weV9jdXJyZW50X2Vudmlyb25tZW50KCkKLSAgICAgICAgZW52aXJv
bm1lbnQuZGlzYWJsZV9nY2Nfc21hcnRxdW90ZXMoKQotICAgICAgICBlbnYgPSBlbnZpcm9ubWVu
dC50b19kaWN0aW9uYXJ5KCkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIEZJWE1FOiBX
ZSBzaG91bGQgYmUgcGFzc2luZyBfYXJndW1lbnRzX2Zvcl9jb25maWd1cmF0aW9uKCksIHdoaWNo
IHJlc3BlY3RzIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIHBvcnQsCi0gICAgICAgICAgICAjIGlu
c3RlYWQgb2YgaGFyZGNvZGluZyAtLWlvcy1zaW11bGF0b3IuCi0gICAgICAgICAgICBzZWxmLl9y
dW5fc2NyaXB0KCJidWlsZC1sYXlvdXR0ZXN0cmVsYXkiLCBhcmdzPVsiLS1pb3Mtc2ltdWxhdG9y
Il0sIGVudj1lbnYpCi0gICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvciwgZToKLSAgICAgICAgICAg
IF9sb2cuZXJyb3IoZS5tZXNzYWdlX3dpdGhfb3V0cHV0KG91dHB1dF9saW1pdD1Ob25lKSkKLSAg
ICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgZGVmIF9i
dWlsZF9kcml2ZXIoc2VsZik6CiAgICAgICAgIGJ1aWx0X3Rvb2wgPSBzdXBlcihJT1NTaW11bGF0
b3JQb3J0LCBzZWxmKS5fYnVpbGRfZHJpdmVyKCkKLSAgICAgICAgYnVpbHRfcmVsYXkgPSBzZWxm
Ll9idWlsZF9yZWxheSgpCi0gICAgICAgIHJldHVybiBidWlsdF90b29sIGFuZCBidWlsdF9yZWxh
eQorICAgICAgICByZXR1cm4gYnVpbHRfdG9vbAogCiAgICAgZGVmIF9idWlsZF9kcml2ZXJfZmxh
Z3Moc2VsZik6CiAgICAgICAgIGFyY2hzID0gWydBUkNIUz1pMzg2J10gaWYgc2VsZi5hcmNoaXRl
Y3R1cmUoKSA9PSAneDg2JyBlbHNlIFtdCkBAIC0yNjQsOSArMjgzLDYgQEAgY2xhc3MgSU9TU2lt
dWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucy5h
cHBlbmQoVGVzdENvbmZpZ3VyYXRpb24odmVyc2lvbj1zZWxmLl92ZXJzaW9uLCBhcmNoaXRlY3R1
cmU9YXJjaGl0ZWN0dXJlLCBidWlsZF90eXBlPWJ1aWxkX3R5cGUpKQogICAgICAgICByZXR1cm4g
Y29uZmlndXJhdGlvbnMKIAotICAgIGRlZiBfZHJpdmVyX2NsYXNzKHNlbGYpOgotICAgICAgICBy
ZXR1cm4gZHJpdmVyLklPU1NpbXVsYXRvckRyaXZlcgotCiAgICAgZGVmIGRlZmF1bHRfYmFzZWxp
bmVfc2VhcmNoX3BhdGgoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignd2Via2l0
X3Rlc3RfcnVubmVyJyk6CiAgICAgICAgICAgICBmYWxsYmFja19uYW1lcyA9IFtzZWxmLl93azJf
cG9ydF9uYW1lKCldICsgW3NlbGYucG9ydF9uYW1lXSArIFsnd2syJ10KQEAgLTM5OSw4ICs0MTUs
NiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCiAgICAgICAgIHJldHVybiBzdXBlcihJT1NTaW11bGF0b3JQb3J0LCBzZWxmKS5j
aGVja19zeXNfZGVwcyhuZWVkc19odHRwKQogCi0gICAgU1VCUFJPQ0VTU19DUkFTSF9SRUdFWCA9
IHJlLmNvbXBpbGUoJyNDUkFTSEVEIC0gKD9QPHN1YnByb2Nlc3NfbmFtZT5cUyspIFwocGlkICg/
UDxzdWJwcm9jZXNzX3BpZD5cZCspXCknKQotCiAgICAgZGVmIF91c2luZ19kZWRpY2F0ZWRfc2lt
dWxhdG9ycyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X29wdGlvbignZGVkaWNhdGVk
X3NpbXVsYXRvcnMnKQogCkBAIC00NzUsMyArNDg5LDU3IEBAIGNsYXNzIElPU1NpbXVsYXRvclBv
cnQoRGFyd2luUG9ydCk6CiAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsiaW5zdGFs
bF9uYW1lX3Rvb2wiLCAiLWFkZF9ycGF0aCIsIHNlbGYuZGV2ZWxvcGVyX2RpciArICIvLi4vRnJh
bWV3b3Jrcy8iLCBkZXN0aW5hdGlvbiArICIvQ29udGVudHMvTWFjT1MvU2ltdWxhdG9yIl0pCiAg
ICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsiY29kZXNpZ24iLCAiLWZzIiwgIi0iLCBk
ZXN0aW5hdGlvbl0pCiAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFtzZWxmLkxTUkVH
SVNURVJfUEFUSCwgIi1mIiwgZGVzdGluYXRpb25dKQorCisgICAgZGVmIF9kZXZpY2VQaW5nKHNl
bGYsIGRldmljZSk6CisgICAgICAgIGRhdGEgPSBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQo
Wyd4Y3J1bicsICdzaW1jdGwnLCAnbGlzdCddKQorICAgICAgICBpZiBkZXZpY2UgYW5kIGRldmlj
ZSArICcpIChCb290ZWQpJyBpbiBkYXRhOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAg
ICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX2RldmljZUluc3RhbGwoc2VsZiwgZGV2aWNlLCBh
cHApOgorICAgICAgICBpZiBub3Qgc2VsZi5fZGV2aWNlUGluZyhkZXZpY2UpOgorICAgICAgICAg
ICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBub3Qgc2VsZi5fZXhlY3V0aXZlLnJ1bl9j
b21tYW5kKFsKKyAgICAgICAgICAgICd4Y3J1bicsCisgICAgICAgICAgICAnc2ltY3RsJywKKyAg
ICAgICAgICAgICdpbnN0YWxsJywKKyAgICAgICAgICAgIGRldmljZSwKKyAgICAgICAgICAgIGFw
cCwKKyAgICAgICAgXSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKQorCisgICAgZGVmIF9kZXZpY2VS
dW4oc2VsZiwgY21kLCBlbnZpPU5vbmUpOgorICAgICAgICBpZiBub3Qgc2VsZi5fZGV2aWNlUGlu
ZyhjbWRbMF0pOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGFwcGlkID0gc2Vs
Zi5leHRyYWN0QnVuZGxlSUQoY21kWzFdKQorICAgICAgICBpZiBub3QgYXBwaWQ6CisgICAgICAg
ICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgc2VsZi5fZGV2aWNlS2lsbChjbWRbMF0sIGNtZFsx
XSkKKworICAgICAgICB0cmFuc2ZlcmVkRW52aXJvbm1lbnQgPSB7fQorICAgICAgICBmb3IgdmFs
dWUgaW4gZW52aToKKyAgICAgICAgICAgIGlmIG5vdCAiU0lNQ1RMX0NISUxEXyIgaW4gdmFsdWU6
CisgICAgICAgICAgICAgICAgdHJhbnNmZXJlZEVudmlyb25tZW50WydTSU1DVExfQ0hJTERfJyAr
IHZhbHVlXSA9IGVudmlbdmFsdWVdCisgICAgICAgICAgICB0cmFuc2ZlcmVkRW52aXJvbm1lbnRb
dmFsdWVdID0gZW52aVt2YWx1ZV0KKworICAgICAgICByZXR1cm4gbm90IHNlbGYuX2V4ZWN1dGl2
ZS5ydW5fY29tbWFuZChbCisgICAgICAgICAgICAneGNydW4nLAorICAgICAgICAgICAgJ3NpbWN0
bCcsCisgICAgICAgICAgICAnbGF1bmNoJywKKyAgICAgICAgICAgIGNtZFswXSwKKyAgICAgICAg
ICAgIGFwcGlkLAorICAgICAgICBdICsgY21kWzI6XSwKKyAgICAgICAgZW52PXRyYW5zZmVyZWRF
bnZpcm9ubWVudCwKKyAgICAgICAgcmV0dXJuX2V4aXRfY29kZT1UcnVlKQorICAgICAgICByZXR1
cm4gVHJ1ZQorCisgICAgZGVmIF9kZXZpY2VLaWxsKHNlbGYsIGRldmljZSwgYXBwKToKKyAgICAg
ICAgYWRkaWQgPSBzZWxmLmV4dHJhY3RCdW5kbGVJRChhcHApCisgICAgICAgIGlmIG5vdCBhZGRp
ZDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gbm90IHNlbGYuX2V4
ZWN1dGl2ZS5ydW5fY29tbWFuZChbCisgICAgICAgICAgICAneGNydW4nLAorICAgICAgICAgICAg
J3NpbWN0bCcsCisgICAgICAgICAgICAndGVybWluYXRlJywKKyAgICAgICAgICAgIGRldmljZSwK
KyAgICAgICAgICAgIGFkZGlkLAorICAgICAgICBdLCByZXR1cm5fZXhpdF9jb2RlPVRydWUpCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0LnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3QucHkJKHJldmlz
aW9uIDIwOTg4NikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3Qu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDkgQEAKIAogaW1wb3J0IHRpbWUKIAorZnJv
bSB3ZWJraXRweS5wb3J0LmlvcyBpbXBvcnQgSU9TUG9ydAogZnJvbSB3ZWJraXRweS5wb3J0Lmlv
cyBpbXBvcnQgSU9TU2ltdWxhdG9yUG9ydAotZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBkYXJ3
aW5fdGVzdGNhc2UKK2Zyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgaW9zYmFzZV90ZXN0Y2FzZQog
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW1fbW9jayBpbXBvcnQgTW9ja0Zp
bGVTeXN0ZW0KIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5vdXRwdXRjYXB0dXJlIGltcG9y
dCBPdXRwdXRDYXB0dXJlCiBmcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1vY2tP
cHRpb25zCkBAIC0zMSw3ICszMiwyMCBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhl
Y3V0aXZlX21vCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdF9tb2NrIGlt
cG9ydCBNb2NrU3lzdGVtSG9zdAogCiAKLWNsYXNzIGlvc1Rlc3QoZGFyd2luX3Rlc3RjYXNlLkRh
cndpblRlc3QpOgorY2xhc3MgSU9TVGVzdChpb3NiYXNlX3Rlc3RjYXNlLklPU0Jhc2VUZXN0KToK
KyAgICBvc19uYW1lID0gJ2lvcycKKyAgICBvc192ZXJzaW9uID0gJycKKyAgICBwb3J0X25hbWUg
PSAnaW9zJworICAgIHBvcnRfbWFrZXIgPSBJT1NQb3J0CisgICAgaXNfc2ltdWxhdG9yID0gRmFs
c2UKKworICAgIGRlZiBtYWtlX3BvcnQoc2VsZiwgaG9zdD1Ob25lLCBwb3J0X25hbWU9Tm9uZSwg
b3B0aW9ucz1Ob25lLCBvc19uYW1lPU5vbmUsIG9zX3ZlcnNpb249Tm9uZSwgKiprd2FyZ3MpOgor
ICAgICAgICBwb3J0ID0gc3VwZXIoSU9TVGVzdCwgc2VsZikubWFrZV9wb3J0KGhvc3Q9aG9zdCwg
cG9ydF9uYW1lPXBvcnRfbmFtZSwgb3B0aW9ucz1vcHRpb25zLCBvc19uYW1lPW9zX25hbWUsIHNf
dmVyc2lvbj1vc192ZXJzaW9uLCBrd2FyZ3M9a3dhcmdzKQorICAgICAgICBwb3J0LnNldF9vcHRp
b24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpCisgICAgICAgIHJldHVybiBwb3J0CisKKworY2xhc3Mg
SU9TU2ltdWxhdG9yVGVzdChpb3NiYXNlX3Rlc3RjYXNlLklPU0Jhc2VUZXN0KToKICAgICBvc19u
YW1lID0gJ2lvcy1zaW11bGF0b3InCiAgICAgb3NfdmVyc2lvbiA9ICcnCiAgICAgcG9ydF9uYW1l
ID0gJ2lvcy1zaW11bGF0b3InCkBAIC0zOSw3ICs1Myw3IEBAIGNsYXNzIGlvc1Rlc3QoZGFyd2lu
X3Rlc3RjYXNlLkRhcndpblRlc3QKICAgICBpc19zaW11bGF0b3IgPSBUcnVlCiAKICAgICBkZWYg
bWFrZV9wb3J0KHNlbGYsIGhvc3Q9Tm9uZSwgcG9ydF9uYW1lPU5vbmUsIG9wdGlvbnM9Tm9uZSwg
b3NfbmFtZT1Ob25lLCBvc192ZXJzaW9uPU5vbmUsICoqa3dhcmdzKToKLSAgICAgICAgcG9ydCA9
IHN1cGVyKGlvc1Rlc3QsIHNlbGYpLm1ha2VfcG9ydChob3N0PWhvc3QsIHBvcnRfbmFtZT1wb3J0
X25hbWUsIG9wdGlvbnM9b3B0aW9ucywgb3NfbmFtZT1vc19uYW1lLCBzX3ZlcnNpb249b3NfdmVy
c2lvbiwga3dhcmdzPWt3YXJncykKKyAgICAgICAgcG9ydCA9IHN1cGVyKElPU1NpbXVsYXRvclRl
c3QsIHNlbGYpLm1ha2VfcG9ydChob3N0PWhvc3QsIHBvcnRfbmFtZT1wb3J0X25hbWUsIG9wdGlv
bnM9b3B0aW9ucywgb3NfbmFtZT1vc19uYW1lLCBzX3ZlcnNpb249b3NfdmVyc2lvbiwga3dhcmdz
PWt3YXJncykKICAgICAgICAgcG9ydC5zZXRfb3B0aW9uKCdjaGlsZF9wcm9jZXNzZXMnLCAxKQog
ICAgICAgICByZXR1cm4gcG9ydAogCkBAIC01MywxNCArNjcsNiBAQCBjbGFzcyBpb3NUZXN0KGRh
cndpbl90ZXN0Y2FzZS5EYXJ3aW5UZXN0CiAgICAgZGVmIHRlc3Rfb3BlcmF0aW5nX3N5c3RlbShz
ZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaW9zLXNpbXVsYXRvcicsIHNlbGYubWFr
ZV9wb3J0KCkub3BlcmF0aW5nX3N5c3RlbSgpKQogCi0gICAgZGVmIHRlc3RfZ2V0X2NyYXNoX2xv
ZyhzZWxmKToKLSAgICAgICAgIyBNYWMgY3Jhc2ggbG9ncyBhcmUgdGVzdGVkIGVsc2V3aGVyZSwg
c28gaGVyZSB3ZSBqdXN0IG1ha2Ugc3VyZSB3ZSBkb24ndCBjcmFzaC4KLSAgICAgICAgZGVmIGZh
a2VfdGltZV9jYigpOgotICAgICAgICAgICAgdGltZXMgPSBbMCwgMjAsIDQwXQotICAgICAgICAg
ICAgcmV0dXJuIGxhbWJkYTogdGltZXMucG9wKDApCi0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2Vf
cG9ydChwb3J0X25hbWU9J2lvcy1zaW11bGF0b3InKQotICAgICAgICBwb3J0Ll9nZXRfY3Jhc2hf
bG9nKCdEdW1wUmVuZGVyVHJlZScsIDEyMzQsIE5vbmUsIE5vbmUsIHRpbWUudGltZSgpLCB3YWl0
X2Zvcl9sb2c9RmFsc2UpCi0KICAgICBkZWYgdGVzdF8zMmJpdChzZWxmKToKICAgICAgICAgcG9y
dCA9IHNlbGYubWFrZV9wb3J0KG9wdGlvbnM9TW9ja09wdGlvbnMoYXJjaGl0ZWN0dXJlPSd4ODYn
KSkKIApAQCAtNzAsNyArNzYsNyBAQCBjbGFzcyBpb3NUZXN0KGRhcndpbl90ZXN0Y2FzZS5EYXJ3
aW5UZXN0CiAgICAgICAgIHBvcnQuX3J1bl9zY3JpcHQgPSBydW5fc2NyaXB0CiAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwocG9ydC5hcmNoaXRlY3R1cmUoKSwgJ3g4NicpCiAgICAgICAgIHBvcnQu
X2J1aWxkX2RyaXZlcigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hcmdzLCBbJy0t
aW9zLXNpbXVsYXRvciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYXJncywgWydB
UkNIUz1pMzg2JywgJy0tc2RrJywgJ2lwaG9uZXNpbXVsYXRvciddKQogCiAgICAgZGVmIHRlc3Rf
NjRiaXQoc2VsZik6CiAgICAgICAgICMgQXBwbGUgTWFjIHBvcnQgaXMgNjQtYml0IGJ5IGRlZmF1
bHQKQEAgLTgyLDcgKzg4LDcgQEAgY2xhc3MgaW9zVGVzdChkYXJ3aW5fdGVzdGNhc2UuRGFyd2lu
VGVzdAogCiAgICAgICAgIHBvcnQuX3J1bl9zY3JpcHQgPSBydW5fc2NyaXB0CiAgICAgICAgIHBv
cnQuX2J1aWxkX2RyaXZlcigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hcmdzLCBb
Jy0taW9zLXNpbXVsYXRvciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYXJncywg
WyctLXNkaycsICdpcGhvbmVzaW11bGF0b3InXSkKIAogICAgIGRlZiB0ZXN0X3Nka19uYW1lKHNl
bGYpOgogICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQpAQCAtOTcsMyArMTAzLDcgQEAg
Y2xhc3MgaW9zVGVzdChkYXJ3aW5fdGVzdGNhc2UuRGFyd2luVGVzdAogICAgICAgICBwb3J0Ll9l
eGVjdXRpdmUgPSBNb2NrRXhlY3V0aXZlMihydW5fY29tbWFuZF9mbj10aHJvd2luZ19ydW5fY29t
bWFuZCkKICAgICAgICAgZXhwZWN0ZWRfc3Rkb3V0ID0gIlsneGNydW4nLCAnLS1zZGsnLCAnaXBo
b25lc2ltdWxhdG9yJywgJy1maW5kJywgJ3Rlc3QnXVxuIgogICAgICAgICBPdXRwdXRDYXB0dXJl
KCkuYXNzZXJ0X291dHB1dHMoc2VsZiwgcG9ydC54Y3J1bl9maW5kLCBhcmdzPVsndGVzdCcsICdm
YWxsaW5nJ10sIGV4cGVjdGVkX3N0ZG91dD1leHBlY3RlZF9zdGRvdXQpCisKKyAgICBkZWYgdGVz
dF9waW5nKHNlbGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQorICAgICAgICBz
ZWxmLmFzc2VydEZhbHNlKHBvcnQucnVuT25EZXZpY2UoWydwaW5nJywgJzxkZXZpZD4nXSkpCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zYmFzZV90ZXN0Y2FzZS5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zYmFzZV90ZXN0Y2FzZS5w
eQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zYmFzZV90
ZXN0Y2FzZS5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisjIENvcHlyaWdodCAo
QykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHRpbWUKKworZnJvbSB3ZWJr
aXRweS5wb3J0IGltcG9ydCBkYXJ3aW5fdGVzdGNhc2UKKworCitjbGFzcyBJT1NCYXNlVGVzdChk
YXJ3aW5fdGVzdGNhc2UuRGFyd2luVGVzdCk6CisKKyAgICBkZWYgdGVzdF9kZXZpY2VGbGFnKHNl
bGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQorICAgICAgICBzZWxmLmFzc2Vy
dFRydWUocG9ydC5kZXZpY2VEZWZpbmVkKCkpCisKKyAgICBkZWYgdGVzdF9nZXRfY3Jhc2hfbG9n
KHNlbGYpOgorICAgICAgICAjIE1hYyBjcmFzaCBsb2dzIGFyZSB0ZXN0ZWQgZWxzZXdoZXJlLCBz
byBoZXJlIHdlIGp1c3QgbWFrZSBzdXJlIHdlIGRvbid0IGNyYXNoLgorICAgICAgICBkZWYgZmFr
ZV90aW1lX2NiKCk6CisgICAgICAgICAgICB0aW1lcyA9IFswLCAyMCwgNDBdCisgICAgICAgICAg
ICByZXR1cm4gbGFtYmRhOiB0aW1lcy5wb3AoMCkKKyAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9w
b3J0KHBvcnRfbmFtZT0naW9zLXNpbXVsYXRvcicpCisgICAgICAgIHBvcnQuX2dldF9jcmFzaF9s
b2coJ0R1bXBSZW5kZXJUcmVlJywgMTIzNCwgTm9uZSwgTm9uZSwgdGltZS50aW1lKCksIHdhaXRf
Zm9yX2xvZz1GYWxzZSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJf
cHJvY2Vzcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2Vy
dmVyX3Byb2Nlc3MucHkJKHJldmlzaW9uIDIwOTg4NikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQgQEAK
KyMgQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMg
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtMzAsMTAgKzMxLDEzIEBACiAKIGltcG9ydCBlcnJubwogaW1wb3J0IGxv
Z2dpbmcKK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcKIGltcG9ydCBzaWduYWwKIGltcG9ydCBzeXMK
IGltcG9ydCB0aW1lCiAKK2Zyb20gd2Via2l0cHkuY29tbW9uLmlwY19waXBlIGltcG9ydCBQcm9j
ZXNzUGlwZSwgVW5peFBpcGUKKwogIyBOb3RlIHRoYXQgYWx0aG91Z2ggd2luMzIgcHl0aG9uIGRv
ZXMgcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBvZgogIyB0aGUgd2luMzIgc2VsZWN0IEFQSSwg
aXQgb25seSB3b3JrcyBvbiBzb2NrZXRzLCBhbmQgbm90IG9uIHRoZSBuYW1lZCBwaXBlcwogIyB1
c2VkIGJ5IHN1YnByb2Nlc3MsIHNvIHdlIGhhdmUgdG8gdXNlIHRoZSBuYXRpdmUgQVBJcyBkaXJl
Y3RseS4KQEAgLTcxLDMyICs3NSwyNSBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6CiAg
ICAgICAgIHNlbGYuX2hvc3QgPSBzZWxmLl9wb3J0Lmhvc3QKICAgICAgICAgc2VsZi5fcGlkID0g
Tm9uZQogICAgICAgICBzZWxmLl9yZXNldCgpCi0KLSAgICAgICAgIyBTZWUgY29tbWVudCBpbiBp
bXBvcnRzIGZvciB3aHkgd2UgbmVlZCB0aGUgd2luMzIgQVBJcyBhbmQgY2FuJ3QganVzdCB1c2Ug
c2VsZWN0LgotICAgICAgICAjIEZJWE1FOiB0aGVyZSBzaG91bGQgYmUgYSB3YXkgdG8gZ2V0IHdp
bjMyIHZzLiBjeWd3aW4gZnJvbSBwbGF0Zm9ybWluZm8uCisgICAgICAgIHNlbGYuX3BpcGUgPSBO
b25lCiAgICAgICAgIHNlbGYuX3VzZV93aW4zMl9hcGlzID0gc3lzLnBsYXRmb3JtLnN0YXJ0c3dp
dGgoJ3dpbicpCiAKKyAgICAgICAgaWYgInJ1bi1vbi1kZXZpY2UiID09IHNlbGYuX2NtZFswXToK
KyAgICAgICAgICAgIHNlbGYuX3BvcnQucnVuT25EZXZpY2UoWydpbnN0YWxsJywgc2VsZi5fY21k
WzFdLCBzZWxmLl9jbWRbMl1dKQorCiAgICAgZGVmIG5hbWUoc2VsZik6CiAgICAgICAgIHJldHVy
biBzZWxmLl9uYW1lCiAKICAgICBkZWYgcGlkKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5f
cGlkCiAKKyAgICBkZWYgY2xlYW4oc2VsZik6CisgICAgICAgIHNlbGYuX3BpcGUuY2xlYW4oKQor
CiAgICAgZGVmIF9yZXNldChzZWxmKToKLSAgICAgICAgaWYgZ2V0YXR0cihzZWxmLCAnX3Byb2Mn
LCBOb25lKToKLSAgICAgICAgICAgIGlmIHNlbGYuX3Byb2Muc3RkaW46Ci0gICAgICAgICAgICAg
ICAgc2VsZi5fcHJvYy5zdGRpbi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgc2VsZi5fcHJvYy5z
dGRpbiA9IE5vbmUKLSAgICAgICAgICAgIGlmIHNlbGYuX3Byb2Muc3Rkb3V0OgotICAgICAgICAg
ICAgICAgIHNlbGYuX3Byb2Muc3Rkb3V0LmNsb3NlKCkKLSAgICAgICAgICAgICAgICBzZWxmLl9w
cm9jLnN0ZG91dCA9IE5vbmUKLSAgICAgICAgICAgIGlmIHNlbGYuX3Byb2Muc3RkZXJyOgotICAg
ICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkZXJyLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBz
ZWxmLl9wcm9jLnN0ZGVyciA9IE5vbmUKLQotICAgICAgICBzZWxmLl9wcm9jID0gTm9uZQotICAg
ICAgICBzZWxmLl9vdXRwdXQgPSBzdHIoKSAgIyBieXRlc2FycmF5KCkgb25jZSB3ZSByZXF1aXJl
IFB5dGhvbiAyLjYKLSAgICAgICAgc2VsZi5fZXJyb3IgPSBzdHIoKSAgIyBieXRlc2FycmF5KCkg
b25jZSB3ZSByZXF1aXJlIFB5dGhvbiAyLjYKKyAgICAgICAgc2VsZi5fcGlwZSA9IE5vbmUKKyAg
ICAgICAgc2VsZi5fcGlkID0gTm9uZQorCiAgICAgICAgIHNlbGYuX2NyYXNoZWQgPSBGYWxzZQog
ICAgICAgICBzZWxmLnRpbWVkX291dCA9IEZhbHNlCiAKQEAgLTEwNCw3NSArMTAxLDg1IEBAIGNs
YXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToKICAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKIAog
ICAgIGRlZiBfc3RhcnQoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX3Byb2M6CisgICAgICAgIHNl
bGYuX3BpZCA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5fcGlwZToKICAgICAgICAgICAgIHJhaXNl
IFZhbHVlRXJyb3IoIiVzIGFscmVhZHkgcnVubmluZyIgJSBzZWxmLl9uYW1lKQogICAgICAgICBz
ZWxmLl9yZXNldCgpCi0gICAgICAgICMgY2xvc2VfZmRzIGlzIGEgd29ya2Fyb3VuZCBmb3IgaHR0
cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIzMjAKLSAgICAgICAgY2xvc2VfZmRzID0gbm90IHNl
bGYuX2hvc3QucGxhdGZvcm0uaXNfd2luKCkKLSAgICAgICAgc2VsZi5fcHJvYyA9IHNlbGYuX2hv
c3QuZXhlY3V0aXZlLnBvcGVuKHNlbGYuX2NtZCwgc3RkaW49c2VsZi5faG9zdC5leGVjdXRpdmUu
UElQRSwKLSAgICAgICAgICAgIHN0ZG91dD1zZWxmLl9ob3N0LmV4ZWN1dGl2ZS5QSVBFLAotICAg
ICAgICAgICAgc3RkZXJyPXNlbGYuX2hvc3QuZXhlY3V0aXZlLlBJUEUsCi0gICAgICAgICAgICBj
bG9zZV9mZHM9Y2xvc2VfZmRzLAotICAgICAgICAgICAgZW52PXNlbGYuX2VudiwKLSAgICAgICAg
ICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1zZWxmLl91bml2ZXJzYWxfbmV3bGluZXMpCi0gICAgICAg
IHNlbGYuX3BpZCA9IHNlbGYuX3Byb2MucGlkCi0gICAgICAgIHNlbGYuX3BvcnQuZmluZF9zeXN0
ZW1fcGlkKHNlbGYubmFtZSgpLCBzZWxmLl9waWQpCi0gICAgICAgIGZkID0gc2VsZi5fcHJvYy5z
dGRvdXQuZmlsZW5vKCkKLSAgICAgICAgaWYgbm90IHNlbGYuX3VzZV93aW4zMl9hcGlzOgotICAg
ICAgICAgICAgZmwgPSBmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGTCkKLSAgICAgICAgICAg
IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX1NFVEZMLCBmbCB8IG9zLk9fTk9OQkxPQ0spCi0gICAg
ICAgICAgICBmZCA9IHNlbGYuX3Byb2Muc3RkZXJyLmZpbGVubygpCi0gICAgICAgICAgICBmbCA9
IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZMKQotICAgICAgICAgICAgZmNudGwuZmNudGwo
ZmQsIGZjbnRsLkZfU0VURkwsIGZsIHwgb3MuT19OT05CTE9DSykKLQotICAgIGRlZiBfaGFuZGxl
X3Bvc3NpYmxlX2ludGVycnVwdChzZWxmKToKLSAgICAgICAgIiIiVGhpcyByb3V0aW5lIGNoZWNr
cyB0byBzZWUgaWYgdGhlIHByb2Nlc3MgY3Jhc2hlZCBvciBleGl0ZWQKLSAgICAgICAgYmVjYXVz
ZSBvZiBhIGtleWJvYXJkIGludGVycnVwdCBhbmQgcmFpc2VzIEtleWJvYXJkSW50ZXJydXB0Ci0g
ICAgICAgIGFjY29yZGluZ2x5LiIiIgotICAgICAgICAjIEZJWE1FOiBMaW51eCBhbmQgTWFjIHNl
dCB0aGUgcmV0dXJuY29kZSB0byAtc2lnbmFsLlNJR0lOVCBpZiBhCi0gICAgICAgICMgc3VicHJv
Y2VzcyBpcyBraWxsZWQgd2l0aCBhIGN0cmxeQy4gIFByZXZpb3VzIGNvbW1lbnRzIGluIHRoaXMK
LSAgICAgICAgIyByb3V0aW5lIHNhaWQgdGhhdCBzdXBwb3NlZGx5IFdpbmRvd3MgcmV0dXJucyAw
eGMwMDAwMDFkLCBidXQgdGhhdCdzIG5vdCB3aGF0Ci0gICAgICAgICMgLTEwNzM3NDE1MTAgZXZh
bHVhdGVzIHRvLiBGaWd1cmUgb3V0IHdoYXQgdGhlIHJpZ2h0IHZhbHVlIGlzCi0gICAgICAgICMg
Zm9yIHdpbjMyIGFuZCBjeWd3aW4gaGVyZSAuLi4KLSAgICAgICAgaWYgc2VsZi5fcHJvYy5yZXR1
cm5jb2RlIGluICgtMTA3Mzc0MTUxMCwgLXNpZ25hbC5TSUdJTlQpOgotICAgICAgICAgICAgcmFp
c2UgS2V5Ym9hcmRJbnRlcnJ1cHQKKworICAgICAgICBpZiAicnVuLW9uLWRldmljZSIgPT0gc2Vs
Zi5fY21kWzBdOgorICAgICAgICAgICAgc2VsZi5fZW52WydJUENfSURFTlRJRklFUiddID0gc2Vs
Zi5fcG9ydC5leHRyYWN0QnVuZGxlSUQoc2VsZi5fY21kWzJdKSArICItIiArIHNlbGYuX2NtZFsx
XQorICAgICAgICAgICAgZmlsZV9sb2NhdGlvbiA9ICcvdG1wLycgKyBzZWxmLl9lbnZbJ0lQQ19J
REVOVElGSUVSJ10KKyAgICAgICAgICAgIHNlbGYuX3BpcGUgPSBVbml4UGlwZShmaWxlX2xvY2F0
aW9uICsgJ19JTicsIGZpbGVfbG9jYXRpb24gKyAnX09VVCcsIGZpbGVfbG9jYXRpb24gKyAnX0VS
Uk9SJykKKyAgICAgICAgICAgIHNlbGYuX3BvcnQucnVuT25EZXZpY2UoWydydW4nXSArIHNlbGYu
X2NtZFsxOl0sIHNlbGYuX2VudikKKyAgICAgICAgICAgIHNlbGYuX3BpcGUuY29ubmVjdCgpCisg
ICAgICAgICAgICBpZiBzZWxmLl9waXBlLmlzQ29ubmVjdGVkKCk6CisgICAgICAgICAgICAgICAg
cGlkID0gc2VsZi5yZWFkX3N0ZGVycl9saW5lKHRpbWUudGltZSgpICsgMS4wKQorICAgICAgICAg
ICAgICAgIGlmIHBpZDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGlkID0gaW50KHBpZFs2
Oi0xXSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBfbG9nLmRl
YnVnKCdObyBwaWQgcmVjZWl2ZWQgZnJvbSBVbml4LXBpcGUgYmFzZWQgY2xpZW50JykKKyAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygnRmFpbGVkIHRvIGNvbm5lY3QgdG8gbGF1bmNoaW5n
IGFwcCcpCisgICAgICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUKKworICAgICAgICBl
bHNlOgorICAgICAgICAgICAgc2VsZi5fcGlwZSA9IFByb2Nlc3NQaXBlKHNlbGYuX3BvcnQsIHNl
bGYuX2NtZCwgc2VsZi5fZW52LCBzZWxmLl91bml2ZXJzYWxfbmV3bGluZXMpCisgICAgICAgICAg
ICBzZWxmLl9waWQgPSBzZWxmLl9waXBlLnBpZCgpCisKKyAgICAgICAgaWYgbm90IHNlbGYucG9s
bCgpOgorICAgICAgICAgICAgc2VsZi5fcG9ydC5maW5kX3N5c3RlbV9waWQoc2VsZi5uYW1lKCks
IHNlbGYucGlkKCkpCiAKICAgICBkZWYgcG9sbChzZWxmKToKICAgICAgICAgIiIiQ2hlY2sgdG8g
c2VlIGlmIHRoZSB1bmRlcmx5aW5nIHByb2Nlc3MgaXMgcnVubmluZzsgcmV0dXJucyBOb25lCiAg
ICAgICAgIGlmIGl0IHN0aWxsIGlzICh3cmFwcGVyIGFyb3VuZCBzdWJwcm9jZXNzLnBvbGwpLiIi
IgotICAgICAgICBpZiBzZWxmLl9wcm9jOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2Mu
cG9sbCgpCi0gICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGlmIHNlbGYuX3BpcGUgYW5kIHNl
bGYuX3BpcGUuaXNDb25uZWN0ZWQoKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAg
IHJldHVybiBUcnVlCiAKICAgICBkZWYgd3JpdGUoc2VsZiwgYnl0ZXMsIGlnbm9yZV9jcmFzaD1G
YWxzZSk6CisKICAgICAgICAgIiIiV3JpdGUgYSByZXF1ZXN0IHRvIHRoZSBzdWJwcm9jZXNzLiBU
aGUgc3VicHJvY2VzcyBpcyAocmUtKXN0YXJ0KCknZWQKICAgICAgICAgaWYgaXMgbm90IGFscmVh
ZHkgcnVubmluZy4iIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX3Byb2M6CisgICAgICAgIGlmIG5v
dCBzZWxmLl9waXBlOgogICAgICAgICAgICAgc2VsZi5fc3RhcnQoKQotICAgICAgICB0cnk6Ci0g
ICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGluLndyaXRlKGJ5dGVzKQotICAgICAgICBleGNlcHQg
SU9FcnJvciwgZToKLSAgICAgICAgICAgIHNlbGYuc3RvcCgwLjApCi0gICAgICAgICAgICAjIHN0
b3AoKSBjYWxscyBfcmVzZXQoKSwgc28gd2UgaGF2ZSB0byBzZXQgY3Jhc2hlZCB0byBUcnVlIGFm
dGVyIGNhbGxpbmcgc3RvcCgpCi0gICAgICAgICAgICAjIHVubGVzcyB3ZSBhbHJlYWR5IGtub3cg
dGhhdCB0aGlzIGlzIGEgdGltZW91dC4KKyAgICAgICAgc3VjY2VzcyA9IEZhbHNlCisgICAgICAg
IGlmIHNlbGYuX3BpcGU6CisgICAgICAgICAgICBzdWNjZXNzID0gc2VsZi5fcGlwZS5zZW5kKGJ5
dGVzKQorCisgICAgICAgIGlmIG5vdCBzdWNjZXNzOgorICAgICAgICAgICAgc2VsZi5zdG9wKCkK
ICAgICAgICAgICAgIGlmIG5vdCBpZ25vcmVfY3Jhc2g6CiAgICAgICAgICAgICAgICAgX2xvZy5k
ZWJ1ZygnVGhpcyB0ZXN0IG1hcmtlZCBhcyBhIGNyYXNoIGJlY2F1c2Ugb2YgYSBicm9rZW4gcGlw
ZSB3aGVuIHdyaXRpbmcgdG8gc3RkaW4gb2YgdGhlIHNlcnZlciBwcm9jZXNzLicpCiAgICAgICAg
ICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUKIAogICAgIGRlZiBfcG9wX3N0ZG91dF9saW5l
X2lmX3JlYWR5KHNlbGYpOgotICAgICAgICBpbmRleF9hZnRlcl9uZXdsaW5lID0gc2VsZi5fb3V0
cHV0LmZpbmQoJ1xuJykgKyAxCi0gICAgICAgIGlmIGluZGV4X2FmdGVyX25ld2xpbmUgPiAwOgot
ICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BvcF9vdXRwdXRfYnl0ZXMoaW5kZXhfYWZ0ZXJfbmV3
bGluZSkKKyAgICAgICAgZGF0YSA9IFtdCisgICAgICAgIGlmIHNlbGYuX3BpcGU6CisgICAgICAg
ICAgICBkYXRhID0gc2VsZi5fcGlwZS5zdGRvdXRSZWFkKCkKKworICAgICAgICBpZiBkYXRhOgor
ICAgICAgICAgICAgcmV0dXJuIGRhdGEKICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGRlZiBf
cG9wX3N0ZGVycl9saW5lX2lmX3JlYWR5KHNlbGYpOgotICAgICAgICBpbmRleF9hZnRlcl9uZXds
aW5lID0gc2VsZi5fZXJyb3IuZmluZCgnXG4nKSArIDEKLSAgICAgICAgaWYgaW5kZXhfYWZ0ZXJf
bmV3bGluZSA+IDA6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcG9wX2Vycm9yX2J5dGVzKGlu
ZGV4X2FmdGVyX25ld2xpbmUpCisgICAgICAgIGRhdGEgPSBbXQorICAgICAgICBpZiBzZWxmLl9w
aXBlOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX3BpcGUuc3RkZXJyUmVhZCgpCisgICAgICAg
IGlmIGRhdGE6CisgICAgICAgICAgICByZXR1cm4gZGF0YQogICAgICAgICByZXR1cm4gTm9uZQog
CiAgICAgZGVmIHBvcF9hbGxfYnVmZmVyZWRfc3RkZXJyKHNlbGYpOgotICAgICAgICByZXR1cm4g
c2VsZi5fcG9wX2Vycm9yX2J5dGVzKGxlbihzZWxmLl9lcnJvcikpCisgICAgICAgIF9lcnJvciA9
ICIiCisgICAgICAgIF9jdXJyZW50X2Vycm9yID0gW10KKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAg
ICAgICAgICAgIGlmIHNlbGYuX3BpcGU6CisgICAgICAgICAgICAgICAgX2N1cnJlbnRfZXJyb3Ig
PSBzZWxmLl9waXBlLnN0ZGVyclJlYWQoKQorICAgICAgICAgICAgaWYgbm90IF9jdXJyZW50X2Vy
cm9yOgorICAgICAgICAgICAgICAgIHJldHVybiBfZXJyb3IKKyAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgX2Vycm9yID0gX2Vycm9yICsgX2N1cnJlbnRfZXJyb3IgKyAnXG4nCiAK
ICAgICBkZWYgcmVhZF9zdGRvdXRfbGluZShzZWxmLCBkZWFkbGluZSk6CiAgICAgICAgIHJldHVy
biBzZWxmLl9yZWFkKGRlYWRsaW5lLCBzZWxmLl9wb3Bfc3Rkb3V0X2xpbmVfaWZfcmVhZHkpCkBA
IC0xOTEsNyArMTk4LDYgQEAgY2xhc3MgU2VydmVyUHJvY2VzcyhvYmplY3QpOgogICAgICAgICAg
ICAgcmV0dXJuIE5vbmUgICMgSW5zdHJ1Y3RzIHRoZSBjYWxsZXIgdG8ga2VlcCB3YWl0aW5nLgog
CiAgICAgICAgIHJldHVybl92YWx1ZSA9IHNlbGYuX3JlYWQoZGVhZGxpbmUsIHJldHJpZXZlX2J5
dGVzX2Zyb21fYnVmZmVycykKLSAgICAgICAgIyBGSVhNRTogVGhpcyBpcyBhIGJpdCBvZiBhIGhh
Y2sgYXJvdW5kIHRoZSBmYWN0IHRoYXQgX3JlYWQgbm9ybWFsbHkgb25seSByZXR1cm5zIG9uZSB2
YWx1ZSwgYnV0IHRoaXMgY2FsbGVyIHdhbnRzIGl0IHRvIHJldHVybiB0d28uCiAgICAgICAgIGlm
IHJldHVybl92YWx1ZSBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKICAg
ICAgICAgcmV0dXJuIHJldHVybl92YWx1ZQpAQCAtMjAxLDExNyArMjA3LDI1IEBAIGNsYXNzIFNl
cnZlclByb2Nlc3Mob2JqZWN0KToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1NlcnZl
clByb2Nlc3MucmVhZCgpIGNhbGxlZCB3aXRoIGEgbm9uLXBvc2l0aXZlIHNpemU6ICVkICcgJSBz
aXplKQogCiAgICAgICAgIGRlZiByZXRyaWV2ZV9ieXRlc19mcm9tX3N0ZG91dF9idWZmZXIoKToK
LSAgICAgICAgICAgIGlmIGxlbihzZWxmLl9vdXRwdXQpID49IHNpemU6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHNlbGYuX3BvcF9vdXRwdXRfYnl0ZXMoc2l6ZSkKKyAgICAgICAgICAgIGlmIHNl
bGYuX3BpcGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BpcGUucmVhZEJsb2NrU3Rk
b3V0KHNpemUpCiAgICAgICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgICAgIHJldHVybiBzZWxm
Ll9yZWFkKGRlYWRsaW5lLCByZXRyaWV2ZV9ieXRlc19mcm9tX3N0ZG91dF9idWZmZXIpCiAKLSAg
ICBkZWYgX2xvZyhzZWxmLCBtZXNzYWdlKToKLSAgICAgICAgIyBUaGlzIGlzIGEgYml0IG9mIGEg
aGFjaywgYnV0IHdlIGZpcnN0IGxvZyBhIGJsYW5rIGxpbmUgdG8gYXZvaWQKLSAgICAgICAgIyBt
ZXNzaW5nIHVwIHRoZSBtYXN0ZXIgcHJvY2VzcydzIG91dHB1dC4KLSAgICAgICAgX2xvZy5pbmZv
KCcnKQotICAgICAgICBfbG9nLmluZm8obWVzc2FnZSkKLQogICAgIGRlZiBfaGFuZGxlX3RpbWVv
dXQoc2VsZik6CiAgICAgICAgIHNlbGYudGltZWRfb3V0ID0gVHJ1ZQogICAgICAgICBpZiBzZWxm
Ll9wb3J0LmdldF9vcHRpb24oInNhbXBsZV9vbl90aW1lb3V0Iik6CiAgICAgICAgICAgICBzZWxm
Ll9wb3J0LnNhbXBsZV9wcm9jZXNzKHNlbGYuX25hbWUsIHNlbGYuX3Byb2MucGlkKQogCi0gICAg
ZGVmIF9zcGxpdF9zdHJpbmdfYWZ0ZXJfaW5kZXgoc2VsZiwgc3RyaW5nLCBpbmRleCk6Ci0gICAg
ICAgIHJldHVybiBzdHJpbmdbOmluZGV4XSwgc3RyaW5nW2luZGV4Ol0KLQotICAgIGRlZiBfcG9w
X291dHB1dF9ieXRlcyhzZWxmLCBieXRlc19jb3VudCk6Ci0gICAgICAgIG91dHB1dCwgc2VsZi5f
b3V0cHV0ID0gc2VsZi5fc3BsaXRfc3RyaW5nX2FmdGVyX2luZGV4KHNlbGYuX291dHB1dCwgYnl0
ZXNfY291bnQpCi0gICAgICAgIHJldHVybiBvdXRwdXQKLQotICAgIGRlZiBfcG9wX2Vycm9yX2J5
dGVzKHNlbGYsIGJ5dGVzX2NvdW50KToKLSAgICAgICAgb3V0cHV0LCBzZWxmLl9lcnJvciA9IHNl
bGYuX3NwbGl0X3N0cmluZ19hZnRlcl9pbmRleChzZWxmLl9lcnJvciwgYnl0ZXNfY291bnQpCi0g
ICAgICAgIHJldHVybiBvdXRwdXQKLQotICAgIGRlZiBfd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRl
X2J1ZmZlcnNfdXNpbmdfc2VsZWN0KHNlbGYsIGRlYWRsaW5lLCBzdG9wcGluZz1GYWxzZSk6Ci0g
ICAgICAgIGlmIHNlbGYuX3Byb2Muc3Rkb3V0LmNsb3NlZCBvciBzZWxmLl9wcm9jLnN0ZGVyci5j
bG9zZWQ6Ci0gICAgICAgICAgICAjIElmIHRoZSBwcm9jZXNzIGNyYXNoZWQgYW5kIGlzIHVzaW5n
IEZJRk9zLCBsaWtlIENocm9taXVtIEFuZHJvaWQsIHRoZQotICAgICAgICAgICAgIyBzdGRvdXQg
YW5kIHN0ZGVyciBwaXBlcyB3aWxsIGJlIGNsb3NlZC4KLSAgICAgICAgICAgIHJldHVybgotCi0g
ICAgICAgIG91dF9mZCA9IHNlbGYuX3Byb2Muc3Rkb3V0LmZpbGVubygpCi0gICAgICAgIGVycl9m
ZCA9IHNlbGYuX3Byb2Muc3RkZXJyLmZpbGVubygpCi0gICAgICAgIHNlbGVjdF9mZHMgPSAob3V0
X2ZkLCBlcnJfZmQpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJlYWRfZmRzLCBfLCBfID0g
c2VsZWN0LnNlbGVjdChzZWxlY3RfZmRzLCBbXSwgc2VsZWN0X2ZkcywgbWF4KGRlYWRsaW5lIC0g
dGltZS50aW1lKCksIDApKQotICAgICAgICBleGNlcHQgc2VsZWN0LmVycm9yLCBlOgotICAgICAg
ICAgICAgIyBXZSBjYW4gaWdub3JlIEVJTlZBTCBzaW5jZSBpdCdzIGxpa2VseSB0aGUgcHJvY2Vz
cyBqdXN0IGNyYXNoZWQgYW5kIHdlJ2xsCi0gICAgICAgICAgICAjIGZpZ3VyZSB0aGF0IG91dCB0
aGUgbmV4dCB0aW1lIHRocm91Z2ggdGhlIGxvb3AgaW4gX3JlYWQoKS4KLSAgICAgICAgICAgIGlm
IGUuYXJnc1swXSA9PSBlcnJuby5FSU5WQUw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAg
ICAgICAgICByYWlzZQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgTm90ZSB0aGF0IHdl
IG1heSBnZXQgbm8gZGF0YSBkdXJpbmcgcmVhZCgpIGV2ZW4gdGhvdWdoCi0gICAgICAgICAgICAj
IHNlbGVjdCBzYXlzIHdlIGdvdCBzb21ldGhpbmc7IHNlZSB0aGUgc2VsZWN0KCkgbWFuIHBhZ2UK
LSAgICAgICAgICAgICMgb24gbGludXguIEkgZG9uJ3Qga25vdyBpZiB0aGlzIGhhcHBlbnMgb24g
TWFjIE9TIGFuZAotICAgICAgICAgICAgIyBvdGhlciBVbml4ZW4gYXMgd2VsbCwgYnV0IHdlIGRv
bid0IGJvdGhlciBzcGVjaWFsLWNhc2luZwotICAgICAgICAgICAgIyBMaW51eCBiZWNhdXNlIGl0
J3MgcmVsYXRpdmVseSBoYXJtbGVzcyBlaXRoZXIgd2F5LgotICAgICAgICAgICAgaWYgb3V0X2Zk
IGluIHJlYWRfZmRzOgotICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9wcm9jLnN0ZG91dC5y
ZWFkKCkKLSAgICAgICAgICAgICAgICBpZiBub3QgZGF0YSBhbmQgbm90IHN0b3BwaW5nIGFuZCAo
c2VsZi5fdHJlYXRfbm9fZGF0YV9hc19jcmFzaCBvciBzZWxmLl9wcm9jLnBvbGwoKSk6Ci0gICAg
ICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJ1RoaXMgdGVzdCBtYXJrZWQgYXMgYSBjcmFzaCBi
ZWNhdXNlIG9mIG5vIGRhdGEgd2hpbGUgcmVhZGluZyBzdGRvdXQgZm9yIHRoZSBzZXJ2ZXIgcHJv
Y2Vzcy4nKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQotICAgICAg
ICAgICAgICAgIHNlbGYuX291dHB1dCArPSBkYXRhCi0KLSAgICAgICAgICAgIGlmIGVycl9mZCBp
biByZWFkX2ZkczoKLSAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fcHJvYy5zdGRlcnIucmVh
ZCgpCi0gICAgICAgICAgICAgICAgaWYgbm90IGRhdGEgYW5kIG5vdCBzdG9wcGluZyBhbmQgKHNl
bGYuX3RyZWF0X25vX2RhdGFfYXNfY3Jhc2ggb3Igc2VsZi5fcHJvYy5wb2xsKCkpOgotICAgICAg
ICAgICAgICAgICAgICBfbG9nLmRlYnVnKCdUaGlzIHRlc3QgbWFya2VkIGFzIGEgY3Jhc2ggYmVj
YXVzZSBvZiBubyBkYXRhIHdoaWxlIHJlYWRpbmcgc3Rkb3V0IGZvciB0aGUgc2VydmVyIHByb2Nl
c3MuJykKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUKLSAgICAgICAg
ICAgICAgICBzZWxmLl9lcnJvciArPSBkYXRhCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgot
ICAgICAgICAgICAgIyBXZSBjYW4gaWdub3JlIHRoZSBJT0Vycm9ycyBiZWNhdXNlIHdlIHdpbGwg
ZGV0ZWN0IGlmIHRoZSBzdWJwb3JjZXNzIGNyYXNoZWQKLSAgICAgICAgICAgICMgdGhlIG5leHQg
dGltZSB0aHJvdWdoIHRoZSBsb29wIGluIF9yZWFkKCkKLSAgICAgICAgICAgIHBhc3MKLQotICAg
IGRlZiBfd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnNfdXNpbmdfd2luMzJfYXBpcyhz
ZWxmLCBkZWFkbGluZSk6Ci0gICAgICAgICMgU2VlIGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNv
bS9yZWNpcGVzLzQ0MDU1NC1tb2R1bGUtdG8tYWxsb3ctYXN5bmNocm9ub3VzLXN1YnByb2Nlc3Mt
dXNlLW9uLXdpbi8KLSAgICAgICAgIyBhbmQgaHR0cDovL2RvY3MuYWN0aXZlc3RhdGUuY29tL2Fj
dGl2ZXB5dGhvbi8yLjYvcHl3aW4zMi9tb2R1bGVzLmh0bWwKLSAgICAgICAgIyBmb3IgZG9jdW1l
bnRhdGlvbiBvbiBhbGwgb2YgdGhlc2Ugd2luMzItc3BlY2lmaWMgbW9kdWxlcy4KLSAgICAgICAg
bm93ID0gdGltZS50aW1lKCkKLSAgICAgICAgb3V0X2ZoID0gbXN2Y3J0LmdldF9vc2ZoYW5kbGUo
c2VsZi5fcHJvYy5zdGRvdXQuZmlsZW5vKCkpCi0gICAgICAgIGVycl9maCA9IG1zdmNydC5nZXRf
b3NmaGFuZGxlKHNlbGYuX3Byb2Muc3RkZXJyLmZpbGVubygpKQotICAgICAgICB3aGlsZSAoc2Vs
Zi5fcHJvYy5wb2xsKCkgaXMgTm9uZSkgYW5kIChub3cgPCBkZWFkbGluZSk6Ci0gICAgICAgICAg
ICBvdXRwdXQgPSBzZWxmLl9ub25fYmxvY2tpbmdfcmVhZF93aW4zMihvdXRfZmgpCi0gICAgICAg
ICAgICBlcnJvciA9IHNlbGYuX25vbl9ibG9ja2luZ19yZWFkX3dpbjMyKGVycl9maCkKLSAgICAg
ICAgICAgIGlmIG91dHB1dCBvciBlcnJvcjoKLSAgICAgICAgICAgICAgICBpZiBvdXRwdXQ6Ci0g
ICAgICAgICAgICAgICAgICAgIHNlbGYuX291dHB1dCArPSBvdXRwdXQKLSAgICAgICAgICAgICAg
ICBpZiBlcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXJyb3IgKz0gZXJyb3IKLSAg
ICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKLSAgICAg
ICAgICAgIG5vdyA9IHRpbWUudGltZSgpCi0gICAgICAgIHJldHVybgotCi0gICAgZGVmIF9ub25f
YmxvY2tpbmdfcmVhZF93aW4zMihzZWxmLCBoYW5kbGUpOgotICAgICAgICB0cnk6Ci0gICAgICAg
ICAgICBfLCBhdmFpbCwgXyA9IHdpbjMycGlwZS5QZWVrTmFtZWRQaXBlKGhhbmRsZSwgMCkKLSAg
ICAgICAgICAgIGlmIGF2YWlsID4gMDoKLSAgICAgICAgICAgICAgICBfLCBidWYgPSB3aW4zMmZp
bGUuUmVhZEZpbGUoaGFuZGxlLCBhdmFpbCwgTm9uZSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
YnVmCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6Ci0gICAgICAgICAgICBpZiBlWzBdIG5v
dCBpbiAoMTA5LCBlcnJuby5FU0hVVERPV04pOiAgIyAxMDkgPT0gd2luMzIgRVJST1JfQlJPS0VO
X1BJUEUKLSAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICByZXR1cm4gTm9uZQotCiAgICAg
ZGVmIGhhc19jcmFzaGVkKHNlbGYpOgogICAgICAgICBpZiBub3Qgc2VsZi5fY3Jhc2hlZCBhbmQg
c2VsZi5wb2xsKCk6CiAgICAgICAgICAgICBfbG9nLmRlYnVnKCdUaGlzIHRlc3QgbWFya2VkIGFz
IGEgY3Jhc2ggYmVjYXVzZSBvZiBmYWlsdXJlIHRvIHBvbGwgdGhlIHNlcnZlciBwcm9jZXNzLicp
CiAgICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQotICAgICAgICAgICAgc2VsZi5faGFu
ZGxlX3Bvc3NpYmxlX2ludGVycnVwdCgpCisgICAgICAgICAgICBpZiBzZWxmLl9waXBlOgorICAg
ICAgICAgICAgICAgIHNlbGYuX3BpcGUuaGFuZGxlX2ludGVycnVwdCgpCiAgICAgICAgIHJldHVy
biBzZWxmLl9jcmFzaGVkCiAKLSAgICAjIFRoaXMgcmVhZCBmdW5jdGlvbiBpcyBhIGJpdCBvZGRs
eS1kZXNpZ25lZCwgYXMgaXQgcG9sbHMgYm90aCBzdGRvdXQgYW5kIHN0ZGVyciwgeWV0Ci0gICAg
IyBvbmx5IHJlYWRzL3JldHVybnMgZnJvbSBvbmUgb2YgdGhlbSAoYnVmZmVyaW5nIGJvdGggaW4g
bG9jYWwgc2VsZi5fb3V0cHV0L3NlbGYuX2Vycm9yKS4KLSAgICAjIEl0IG1pZ2h0IGJlIGNsZWFu
ZXIgdG8gcGFzcyBpbiB0aGUgZmlsZSBkZXNjcmlwdG9yIHRvIHBvbGwgaW5zdGVhZC4KICAgICBk
ZWYgX3JlYWQoc2VsZiwgZGVhZGxpbmUsIGZldGNoX2J5dGVzX2Zyb21fYnVmZmVyc19jYWxsYmFj
ayk6CiAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICBpZiBzZWxmLmhhc19jcmFzaGVk
KCk6CkBAIC0zMjUsNjMgKzIzOSwzNiBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6CiAg
ICAgICAgICAgICBpZiBieXRlcyBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICByZXR1cm4g
Ynl0ZXMKIAotICAgICAgICAgICAgaWYgc2VsZi5fdXNlX3dpbjMyX2FwaXM6Ci0gICAgICAgICAg
ICAgICAgc2VsZi5fd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnNfdXNpbmdfd2luMzJf
YXBpcyhkZWFkbGluZSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5f
d2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnNfdXNpbmdfc2VsZWN0KGRlYWRsaW5lKQot
CiAgICAgZGVmIHN0YXJ0KHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5fcHJvYzoKKyAgICAg
ICAgaWYgbm90IHNlbGYuX3BpcGU6CiAgICAgICAgICAgICBzZWxmLl9zdGFydCgpCiAKICAgICBk
ZWYgc3RvcChzZWxmLCB0aW1lb3V0X3NlY3M9My4wKToKLSAgICAgICAgaWYgbm90IHNlbGYuX3By
b2M6Ci0gICAgICAgICAgICByZXR1cm4gKE5vbmUsIE5vbmUpCisgICAgICAgIGRlYWRsaW5lID0g
dGltZS50aW1lKCkgKyB0aW1lb3V0X3NlY3MKIAotICAgICAgICAjIE9ubHkgYm90aGVyIHRvIGNo
ZWNrIGZvciBsZWFrcyBvciBzdGRlcnIgaWYgdGhlIHByb2Nlc3MgaXMgc3RpbGwgcnVubmluZy4K
LSAgICAgICAgaWYgc2VsZi5wb2xsKCkgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX3BvcnQu
Y2hlY2tfZm9yX2xlYWtzKHNlbGYubmFtZSgpLCBzZWxmLnBpZCgpKQotCi0gICAgICAgIG5vdyA9
IHRpbWUudGltZSgpCi0gICAgICAgIGlmIHNlbGYuX3Byb2Muc3RkaW46Ci0gICAgICAgICAgICBz
ZWxmLl9wcm9jLnN0ZGluLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4gPSBO
b25lCi0gICAgICAgIGtpbGxlZCA9IEZhbHNlCi0gICAgICAgIGlmIHRpbWVvdXRfc2VjczoKLSAg
ICAgICAgICAgIGRlYWRsaW5lID0gbm93ICsgdGltZW91dF9zZWNzCi0gICAgICAgICAgICB3aGls
ZSBzZWxmLl9wcm9jLnBvbGwoKSBpcyBOb25lIGFuZCB0aW1lLnRpbWUoKSA8IGRlYWRsaW5lOgot
ICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKLSAgICAgICAgICAgIGlmIHNlbGYuX3By
b2MucG9sbCgpIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgX2xvZy53YXJuaW5nKCdzdG9wcGlu
ZyAlcyhwaWQgJWQpIHRpbWVkIG91dCwga2lsbGluZyBpdCcgJSAoc2VsZi5fbmFtZSwgc2VsZi5f
cHJvYy5waWQpKQotCi0gICAgICAgIGlmIHNlbGYuX3Byb2MucG9sbCgpIGlzIE5vbmU6Ci0gICAg
ICAgICAgICBzZWxmLl9raWxsKCkKLSAgICAgICAgICAgIGtpbGxlZCA9IFRydWUKLSAgICAgICAg
ICAgIF9sb2cuZGVidWcoJ2tpbGxlZCBwaWQgJWQnICUgc2VsZi5fcHJvYy5waWQpCi0KLSAgICAg
ICAgIyByZWFkIGFueSByZW1haW5pbmcgZGF0YSBvbiB0aGUgcGlwZXMgYW5kIHJldHVybiBpdC4K
LSAgICAgICAgaWYgbm90IGtpbGxlZDoKLSAgICAgICAgICAgIGlmIHNlbGYuX3VzZV93aW4zMl9h
cGlzOgotICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRfZm9yX2RhdGFfYW5kX3VwZGF0ZV9idWZm
ZXJzX3VzaW5nX3dpbjMyX2FwaXMobm93KQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAg
ICAgICBzZWxmLl93YWl0X2Zvcl9kYXRhX2FuZF91cGRhdGVfYnVmZmVyc191c2luZ19zZWxlY3Qo
bm93LCBzdG9wcGluZz1UcnVlKQotICAgICAgICBvdXQsIGVyciA9IHNlbGYuX291dHB1dCwgc2Vs
Zi5fZXJyb3IKKyAgICAgICAgb3V0ID0gW10KKyAgICAgICAgZXJyID0gW10KKworICAgICAgICBp
ZiBzZWxmLl9waXBlID09IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gKG91dCwgZXJyKQorICAg
ICAgICBpZiBub3Qgc2VsZi5fcGlwZS5pc0Nvbm5lY3RlZCgpOgorICAgICAgICAgICAgc2VsZi5f
cGlwZS5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9yZXNldCgpCisgICAgICAgICAgICByZXR1
cm4gKG91dCwgZXJyKQorCisgICAgICAgIG91dCA9IHNlbGYuX3BpcGUucmVhZEJ1ZmZlclN0ZG91
dCgpCisgICAgICAgIGVyciA9IHNlbGYuX3BpcGUucmVhZEJ1ZmZlclN0ZGVycigpCisKKyAgICAg
ICAgd2hpbGUgc2VsZi5fcGlwZS5pc0Nvbm5lY3RlZCgpIGFuZCBkZWFkbGluZSA+IHRpbWUudGlt
ZSgpOgorICAgICAgICAgICAgb3V0ID0gb3V0ICsgc2VsZi5fcGlwZS5yZWFkQnVmZmVyU3Rkb3V0
KCkKKyAgICAgICAgICAgIGVyciA9IGVyciArIHNlbGYuX3BpcGUucmVhZEJ1ZmZlclN0ZGVycigp
CisKKyAgICAgICAgaWYgInJ1bi1vbi1kZXZpY2UiID09IHNlbGYuX2NtZFswXToKKyAgICAgICAg
ICAgIHNlbGYuX3BvcnQucnVuT25EZXZpY2UoWydraWxsJywgc2VsZi5fY21kWzFdLCBzZWxmLl9j
bWRbMl1dKQorICAgICAgICBzZWxmLl9waXBlLmNsb3NlKCkKICAgICAgICAgc2VsZi5fcmVzZXQo
KQogICAgICAgICByZXR1cm4gKG91dCwgZXJyKQogCiAgICAgZGVmIGtpbGwoc2VsZik6CiAgICAg
ICAgIHNlbGYuc3RvcCgwLjApCiAKLSAgICBkZWYgX2tpbGwoc2VsZik6Ci0gICAgICAgIHNlbGYu
X2hvc3QuZXhlY3V0aXZlLmtpbGxfcHJvY2VzcyhzZWxmLl9wcm9jLnBpZCkKLSAgICAgICAgaWYg
c2VsZi5fcHJvYy5wb2xsKCkgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl9wcm9jLndh
aXQoKQotCi0gICAgZGVmIHJlcGxhY2Vfb3V0cHV0cyhzZWxmLCBzdGRvdXQsIHN0ZGVycik6Ci0g
ICAgICAgIGFzc2VydCBzZWxmLl9wcm9jCi0gICAgICAgIGlmIHN0ZG91dDoKLSAgICAgICAgICAg
IHNlbGYuX3Byb2Muc3Rkb3V0LmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuX3Byb2Muc3Rkb3V0
ID0gc3Rkb3V0Ci0gICAgICAgIGlmIHN0ZGVycjoKLSAgICAgICAgICAgIHNlbGYuX3Byb2Muc3Rk
ZXJyLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkZXJyID0gc3RkZXJyCkluZGV4
OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3NfdW5pdHRlc3QucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNz
X3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvc2VydmVyX3Byb2Nlc3NfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSw0IEBACisjIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAjIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMyLDYgKzMzLDcgQEAgaW1wb3J0IHVuaXR0ZXN0CiAKIGZy
b20gd2Via2l0cHkucG9ydC5mYWN0b3J5IGltcG9ydCBQb3J0RmFjdG9yeQogZnJvbSB3ZWJraXRw
eS5wb3J0IGltcG9ydCBzZXJ2ZXJfcHJvY2VzcworZnJvbSB3ZWJraXRweS5jb21tb24uaXBjX3Bp
cGVfdGVzdGNhc2UgaW1wb3J0IER1bW15UHJvY2Vzc1BpcGUKIGZyb20gd2Via2l0cHkuY29tbW9u
LnN5c3RlbS5zeXN0ZW1ob3N0IGltcG9ydCBTeXN0ZW1Ib3N0CiBmcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0uc3lzdGVtaG9zdF9tb2NrIGltcG9ydCBNb2NrU3lzdGVtSG9zdAogZnJvbSB3ZWJr
aXRweS5jb21tb24uc3lzdGVtLm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKQEAg
LTUzLDQ4ICs1NSwxMSBAQCBjbGFzcyBUcml2aWFsTW9ja1BvcnQob2JqZWN0KToKICAgICAgICAg
cmV0dXJuIDEKIAogCi1jbGFzcyBNb2NrRmlsZShvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBzZXJ2ZXJfcHJvY2Vzcyk6Ci0gICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzID0gc2Vy
dmVyX3Byb2Nlc3MKLSAgICAgICAgc2VsZi5jbG9zZWQgPSBGYWxzZQotCi0gICAgZGVmIGZpbGVu
byhzZWxmKToKLSAgICAgICAgcmV0dXJuIDEKLQotICAgIGRlZiB3cml0ZShzZWxmLCBsaW5lKToK
LSAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3MuYnJva2VuX3BpcGVzLmFwcGVuZChzZWxmKQot
ICAgICAgICByYWlzZSBJT0Vycm9yCi0KLSAgICBkZWYgcmVhZChzZWxmLCBzaXplPTApOgotICAg
ICAgICAjIFRoaXMgbWVhbnMgZW5kIG9mIGZpbGUKLSAgICAgICAgcmV0dXJuICcnCi0KLSAgICBk
ZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuY2xvc2VkID0gVHJ1ZQotCi0KLWNsYXNzIE1v
Y2tQcm9jKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcnZlcl9wcm9jZXNzKToK
LSAgICAgICAgc2VsZi5zdGRpbiA9IE1vY2tGaWxlKHNlcnZlcl9wcm9jZXNzKQotICAgICAgICBz
ZWxmLnN0ZG91dCA9IE1vY2tGaWxlKHNlcnZlcl9wcm9jZXNzKQotICAgICAgICBzZWxmLnN0ZGVy
ciA9IE1vY2tGaWxlKHNlcnZlcl9wcm9jZXNzKQotICAgICAgICBzZWxmLnBpZCA9IDEKLQotICAg
IGRlZiBwb2xsKHNlbGYpOgotICAgICAgICByZXR1cm4gMQotCi0gICAgZGVmIHdhaXQoc2VsZik6
Ci0gICAgICAgIHJldHVybiAwCi0KLQogY2xhc3MgRmFrZVNlcnZlclByb2Nlc3Moc2VydmVyX3By
b2Nlc3MuU2VydmVyUHJvY2Vzcyk6CiAgICAgZGVmIF9zdGFydChzZWxmKToKLSAgICAgICAgc2Vs
Zi5fcHJvYyA9IE1vY2tQcm9jKHNlbGYpCi0gICAgICAgIHNlbGYuc3RkaW4gPSBzZWxmLl9wcm9j
LnN0ZGluCi0gICAgICAgIHNlbGYuc3Rkb3V0ID0gc2VsZi5fcHJvYy5zdGRvdXQKLSAgICAgICAg
c2VsZi5zdGRlcnIgPSBzZWxmLl9wcm9jLnN0ZGVycgotICAgICAgICBzZWxmLl9waWQgPSBzZWxm
Ll9wcm9jLnBpZAotICAgICAgICBzZWxmLmJyb2tlbl9waXBlcyA9IFtdCisgICAgICAgIHNlbGYu
X3BpcGUgPSBEdW1teVByb2Nlc3NQaXBlKHNlbGYuX3BvcnQsIHNlbGYuX2NtZCwgc2VsZi5fZW52
LCBzZWxmLl91bml2ZXJzYWxfbmV3bGluZXMpCisgICAgICAgIHNlbGYuX3BpZCA9IHNlbGYuX3Bp
cGUucGlkKCkKKyAgICAgICAgc2VsZi5fcGlwZS5jb25uZWN0ZWRGb3JUZXN0aW5nID0gRmFsc2UK
IAogCiBjbGFzcyBUZXN0U2VydmVyUHJvY2Vzcyh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xMzUs
OSArMTAwLDcgQEAgY2xhc3MgVGVzdFNlcnZlclByb2Nlc3ModW5pdHRlc3QuVGVzdENhcwogICAg
ICAgICBzZXJ2ZXJfcHJvY2VzcyA9IEZha2VTZXJ2ZXJQcm9jZXNzKHBvcnRfb2JqPXBvcnRfb2Jq
LCBuYW1lPSJ0ZXN0IiwgY21kPVsidGVzdCJdKQogICAgICAgICBzZXJ2ZXJfcHJvY2Vzcy5fc3Rh
cnQoKQogICAgICAgICBzZXJ2ZXJfcHJvY2Vzcy5zdG9wKCkKLSAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKHNlcnZlcl9wcm9jZXNzLnN0ZGluLmNsb3NlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KHNlcnZlcl9wcm9jZXNzLnN0ZG91dC5jbG9zZWQpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShz
ZXJ2ZXJfcHJvY2Vzcy5zdGRlcnIuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShz
ZXJ2ZXJfcHJvY2Vzcy5fcGlwZSkKIAogICAgIGRlZiB0ZXN0X2Jyb2tlbl9waXBlKHNlbGYpOgog
ICAgICAgICBwb3J0X29iaiA9IFRyaXZpYWxNb2NrUG9ydCgpCkBAIC0xNDYsMTMgKzEwOSwxMiBA
QCBjbGFzcyBUZXN0U2VydmVyUHJvY2Vzcyh1bml0dGVzdC5UZXN0Q2FzCiAgICAgICAgIHNlcnZl
cl9wcm9jZXNzID0gRmFrZVNlcnZlclByb2Nlc3MocG9ydF9vYmo9cG9ydF9vYmosIG5hbWU9InRl
c3QiLCBjbWQ9WyJ0ZXN0Il0pCiAgICAgICAgIHNlcnZlcl9wcm9jZXNzLndyaXRlKCJzaG91bGQg
YnJlYWsiKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VydmVyX3Byb2Nlc3MuaGFzX2NyYXNo
ZWQoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoc2VydmVyX3Byb2Nlc3MucGlkKCkp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlcnZlcl9wcm9jZXNzLl9wcm9jKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHNlcnZlcl9wcm9jZXNzLmJyb2tlbl9waXBlcywgW3NlcnZlcl9w
cm9jZXNzLnN0ZGluXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VydmVyX3Byb2Nlc3Mu
X3BpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlcnZlcl9wcm9jZXNzLnBpZCgpKQog
CiAgICAgICAgIHBvcnRfb2JqLmhvc3QucGxhdGZvcm0ub3NfbmFtZSA9ICdtYWMnCiAgICAgICAg
IHNlcnZlcl9wcm9jZXNzID0gRmFrZVNlcnZlclByb2Nlc3MocG9ydF9vYmo9cG9ydF9vYmosIG5h
bWU9InRlc3QiLCBjbWQ9WyJ0ZXN0Il0pCiAgICAgICAgIHNlcnZlcl9wcm9jZXNzLndyaXRlKCJz
aG91bGQgYnJlYWsiKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VydmVyX3Byb2Nlc3MuaGFz
X2NyYXNoZWQoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VydmVyX3Byb2Nlc3MuX3By
b2MpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VydmVyX3Byb2Nlc3MuYnJva2VuX3BpcGVz
LCBbc2VydmVyX3Byb2Nlc3Muc3RkaW5dKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZXJ2
ZXJfcHJvY2Vzcy5fcGlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VydmVyX3Byb2Nl
c3MucGlkKCkpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL3B5
dGhvbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNr
ZXJzL3B5dGhvbi5weQkocmV2aXNpb24gMjA5ODg2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9zdHlsZS9jaGVja2Vycy9weXRob24ucHkJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw3ICsxMDMs
NyBAQCBjbGFzcyBQeWxpbnRlcihvYmplY3QpOgogCiAgICAgZGVmIHJ1bihzZWxmLCBhcmd2KToK
ICAgICAgICAgb3V0cHV0ID0gX0ZpbHRlcmVkU3RyaW5nSU8oc2VsZi5GQUxTRV9QT1NJVElWRVMp
Ci0gICAgICAgIGxpbnQuUnVuKFsnLS1yY2ZpbGUnLCBzZWxmLl9weWxpbnRyY10gKyBhcmd2LCBy
ZXBvcnRlcj1QYXJzZWFibGVUZXh0UmVwb3J0ZXIob3V0cHV0PW91dHB1dCksIGV4aXQ9RmFsc2Up
CisgICAgICAgIGxpbnQuUnVuKFsnLS1pZ25vcmVkLWNsYXNzZXM9X3NvY2tldG9iamVjdCcsICct
LXJjZmlsZScsIHNlbGYuX3B5bGludHJjXSArIGFyZ3YsIHJlcG9ydGVyPVBhcnNlYWJsZVRleHRS
ZXBvcnRlcihvdXRwdXQ9b3V0cHV0KSwgZXhpdD1GYWxzZSkKICAgICAgICAgcmV0dXJuIG91dHB1
dAogCiAKSW5kZXg6IFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvdW5peExvZ2dpbmdQaXBlcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvdW5peExvZ2dpbmdQaXBlcy5oCShu
b25leGlzdGVudCkKKysrIFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvdW5peExvZ2dpbmdQaXBlcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisg
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
ICAgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBX
VFIgeworCit2b2lkIHNldHVwVW5peExvZ2dpbmdQaXBlcygpOwordm9pZCB0ZWFyZG93blVuaXhM
b2dnaW5nUGlwZXMoKTsKKworfQpJbmRleDogVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC91bml4TG9n
Z2luZ1BpcGVzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvdW5peExv
Z2dpbmdQaXBlcy5tbQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9UZXN0UnVubmVyU2hhcmVkL3Vu
aXhMb2dnaW5nUGlwZXMubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAK
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25m
aWcuaCIKKyNpbXBvcnQgInVuaXhMb2dnaW5nUGlwZXMuaCIKKworI2ltcG9ydCA8bmV0ZGIuaD4K
KyNpbXBvcnQgPHN5cy91bi5oPgorCituYW1lc3BhY2UgV1RSIHsKKworc3RhdGljIGNvbnN0IGlu
dCBTVERJTl9JTkRFWCA9IDA7CitzdGF0aWMgY29uc3QgaW50IFNURE9VVF9JTkRFWCA9IDE7Citz
dGF0aWMgY29uc3QgaW50IFNUREVSUl9JTkRFWCA9IDI7CitzdGF0aWMgY29uc3QgaW50IE5VTV9T
T0NLRVRTID0gMzsKKyAgICAKK3N0YXRpYyBpbnQgc29ja2V0c1tOVU1fU09DS0VUU107CitzdGF0
aWMgc3RydWN0IHNvY2thZGRyX3VuIGFkZHJlc3NbTlVNX1NPQ0tFVFNdOworc3RhdGljIEZJTEUq
IG9sZEZpbGVzW05VTV9TT0NLRVRTXTsKK3N0YXRpYyBGSUxFKiogZmlsZXNbTlVNX1NPQ0tFVFNd
OworCit2b2lkIHNldHVwVW5peExvZ2dpbmdQaXBlcygpCit7CisgICAgY29uc3QgY2hhciogaWRl
bnRpZmllciA9IGdldGVudigiSVBDX0lERU5USUZJRVIiKTsKKyAgICBjb25zdCBjaGFyICpzb2Nr
ZXRQYXRoc1szXTsKKyAgICBzb2NrZXRQYXRoc1tTVERJTl9JTkRFWF0gPSBbW05TU3RyaW5nIHN0
cmluZ1dpdGhGb3JtYXQ6QCIvdG1wLyVzX0lOIiwgaWRlbnRpZmllcl0gVVRGOFN0cmluZ107Cisg
ICAgc29ja2V0UGF0aHNbU1RET1VUX0lOREVYXSA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAIi90bXAvJXNfT1VUIiwgaWRlbnRpZmllcl0gVVRGOFN0cmluZ107CisgICAgc29ja2V0UGF0
aHNbU1RERVJSX0lOREVYXSA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIi90bXAvJXNf
RVJST1IiLCBpZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsKKworICAgIGZpbGVzW1NURElOX0lOREVY
XSA9ICZzdGRpbjsKKyAgICBmaWxlc1tTVERPVVRfSU5ERVhdID0gJnN0ZG91dDsKKyAgICBmaWxl
c1tTVERFUlJfSU5ERVhdID0gJnN0ZGVycjsKKyAgICAKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IE5VTV9TT0NLRVRTOyArK2kpIHsKKyAgICAgICAgc29ja2V0c1tpXSA9IHNvY2tldChBRl9VTklY
LCBTT0NLX1NUUkVBTSwgMCk7CisgICAgICAgIG1lbXNldCgoY2hhciopICZhZGRyZXNzW2ldLCAw
LCBzaXplb2YoYWRkcmVzc1tpXSkpOworICAgICAgICBhZGRyZXNzW2ldLnN1bl9mYW1pbHkgPSBB
Rl9VTklYOworICAgICAgICBzdHJuY3B5KGFkZHJlc3NbaV0uc3VuX3BhdGgsIHNvY2tldFBhdGhz
W2ldLCBzaXplb2YoYWRkcmVzc1tpXS5zdW5fcGF0aCkpOworICAgICAgICAKKyAgICAgICAgaWYg
KDo6Y29ubmVjdChzb2NrZXRzW2ldLCAoc3RydWN0IHNvY2thZGRyKikgJmFkZHJlc3NbaV0sIHNp
emVvZihhZGRyZXNzW2ldKSkgPCAwKQorICAgICAgICAgICAgYWJvcnQoKTsKKyAgICAgICAgb2xk
RmlsZXNbaV0gPSAqZmlsZXNbaV07CisgICAgICAgIGZmbHVzaChvbGRGaWxlc1tpXSk7CisgICAg
ICAgIGlmIChpID09IFNURElOX0lOREVYKQorICAgICAgICAgICAgKmZpbGVzW2ldID0gZmRvcGVu
KHNvY2tldHNbaV0sICJyYiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqZmlsZXNbaV0g
PSBmZG9wZW4oc29ja2V0c1tpXSwgIndiIik7CisgICAgICAgIHNldGxpbmVidWYoKmZpbGVzW2ld
KTsKKyAgICB9CisgICAgZnByaW50ZihzdGRlcnIsICIjUElEOiAlZFxuIiwgZ2V0cGlkKCkpOwor
fQorCit2b2lkIHRlYXJkb3duVW5peExvZ2dpbmdQaXBlcygpCit7CisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBOVU1fU09DS0VUUzsgKytpKSB7CisgICAgICAgIGZmbHVzaCgqZmlsZXNbaV0pOwor
ICAgICAgICBmY2xvc2UoKmZpbGVzW2ldKTsKKyAgICAgICAgCisgICAgICAgIHNodXRkb3duKHNv
Y2tldHNbaV0sIFNIVVRfUkRXUik7CisgICAgICAgIDo6Y2xvc2Uoc29ja2V0c1tpXSk7CisgICAg
ICAgICpmaWxlc1tpXSA9IG9sZEZpbGVzW2ldOworICAgIH0KK30KKworfQpJbmRleDogVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwOTg4NikKKysrIFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw3IEBACiAJCTJFNjNFREExMTg5MUIyOTEwMDJB
N0FGQyAvKiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU2M0VENzgxODkxQUNFOTAwMkE3QUZDIC8qIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0gKi87IH07CiAJCTJFNjNFREE2MTg5MUJEQzAwMDJB
N0FGQyAvKiBUZXN0UnVubmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDQzk5ODE3MTFEM0Y1MUUwMDE3QkNBMiAvKiBUZXN0UnVubmVyLmNwcCAq
LzsgfTsKIAkJMkU3NDlCRjIxODkxRUJGQTAwN0ZDMTc1IC8qIEV2ZW50U2VuZGVyUHJveHlJT1Mu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTYzRUQ3
QTE4OTFBQ0U5MDAyQTdBRkMgLyogRXZlbnRTZW5kZXJQcm94eUlPUy5tbSAqLzsgfTsKKwkJMzFC
MDlDQzQxRTAzMzUzMDAwNkY0RTREIC8qIHVuaXhMb2dnaW5nUGlwZXMubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUIwOUNDMzFFMDMzNDQwMDA2RjRF
NEQgLyogdW5peExvZ2dpbmdQaXBlcy5tbSAqLzsgfTsKIAkJNTEwNThBRDUxRDY3ODgyMDAwOUE1
MzhDIC8qIGxpYldlYkNvcmVUZXN0U3VwcG9ydC5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMjMwRTE2MTM4Qzc4QkYwMEJDQ0ZDQSAvKiBs
aWJXZWJDb3JlVGVzdFN1cHBvcnQuZHlsaWIgKi87IH07CiAJCTUxMDU4QUQ2MUQ2Nzg4MjUwMDlB
NTM4QyAvKiBXZWJLaXQuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY1MTY5Q0ExNDQ1MjIyRDAwRTBBOUQ3IC8qIFdlYktpdC5mcmFt
ZXdvcmsgKi87IH07CiAJCTU2NDFFMkQwMTQzMzVFOTUwMDgzMDdFNSAvKiBKU1RleHRJbnB1dENv
bnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTY0MUUyQ0UxNDMzNUU5NTAwODMwN0U1IC8qIEpTVGV4dElucHV0Q29udHJvbGxlci5jcHAg
Ki87IH07CkBAIC0yNTYsNiArMjU3LDggQEAKIAkJMkVFNTJEMTYxODkwQTlGQjAwMTBFRDIxIC8q
IG1haW5JT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBtYWlu
SU9TLm1tOyBwYXRoID0gLi4vaW9zL21haW5JT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTMxMTBCRTBGMTVCQTAxMTQwMEQyMTZBQyAvKiBXZWJOb3RpZmljYXRpb25Qcm92aWRl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJOb3RpZmljYXRpb25Qcm92aWRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzMTY0QzhFRjE1RDFBREExMDBFRjFGRTAgLyogV2ViTm90aWZp
Y2F0aW9uUHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkzMUIwOUNDMjFFMDMzNDQwMDA2RjRFNEQgLyogdW5peExvZ2dpbmdQaXBlcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSB1bml4TG9nZ2luZ1BpcGVzLmg7IHBhdGggPSAuLi9U
ZXN0UnVubmVyU2hhcmVkL3VuaXhMb2dnaW5nUGlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMzFCMDlDQzMxRTAzMzQ0MDAwNkY0RTREIC8qIHVuaXhMb2dnaW5nUGlwZXMubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSB1bml4TG9nZ2luZ1BpcGVz
Lm1tOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJlZC91bml4TG9nZ2luZ1BpcGVzLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzhENDQyMjEzMzQ2RDAwMDA2QTc3N0IgLyogY29u
ZmlnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNvbmZpZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0MTIzMEUxNjEzOEM3OEJGMDBCQ0NGQ0EgLyogbGliV2ViQ29yZVRlc3RTdXBwb3J0LmR5
bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gImNv
bXBpbGVkLm1hY2gtby5keWxpYiI7IHBhdGggPSBsaWJXZWJDb3JlVGVzdFN1cHBvcnQuZHlsaWI7
IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTQxODE3MzFCMTM4QUQzOUQw
MDU3QUFBNCAvKiBXZWJDb3JlVGVzdFN1cHBvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gV2ViQ29yZVRlc3RTdXBwb3J0Lmg7IHBhdGggPSBXZWJDb3JlVGVzdFN1cHBvcnQv
V2ViQ29yZVRlc3RTdXBwb3J0Lmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07
CkBAIC00NTYsNiArNDU5LDggQEAKIAkJMEYxOEU3MUExRDZCQzRCQzAwMjdFNTQ3IC8qIFRlc3RS
dW5uZXJTaGFyZWQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAor
CQkJCTMxQjA5Q0MyMUUwMzM0NDAwMDZGNEU0RCAvKiB1bml4TG9nZ2luZ1BpcGVzLmggKi8sCisJ
CQkJMzFCMDlDQzMxRTAzMzQ0MDAwNkY0RTREIC8qIHVuaXhMb2dnaW5nUGlwZXMubW0gKi8sCiAJ
CQkJMEYxOEU3MUIxRDZCQzRFNjAwMjdFNTQ3IC8qIEJpbmRpbmdzICovLAogCQkJCTBGNzNCNTQ3
MUJBNzgyRkUwMDRCM0VGNCAvKiBVSVNjcmlwdENvbnRleHQgKi8sCiAJCQkpOwpAQCAtOTUzLDYg
Kzk1OCw3IEBACiAJCQkJMkU3NDlCRjIxODkxRUJGQTAwN0ZDMTc1IC8qIEV2ZW50U2VuZGVyUHJv
eHlJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQkwRkVCRjg1QTFCQjYxREYyMDAyODcyMkQgLyog
SElERXZlbnRHZW5lcmF0b3IubW0gaW4gU291cmNlcyAqLywKIAkJCQkyRTYzRUQ5NDE4OTFBREFE
MDAyQTdBRkMgLyogbWFpbklPUy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTMxQjA5Q0M0MUUwMzM1
MzAwMDZGNEU0RCAvKiB1bml4TG9nZ2luZ1BpcGVzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkU2
M0VEOTExODkxQURBRDAwMkE3QUZDIC8qIFBsYXRmb3JtV2ViVmlld0lPUy5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTJFNjNFRDkyMTg5MUFEQUQwMDJBN0FGQyAvKiBUZXN0Q29udHJvbGxlcklPUy5t
bSBpbiBTb3VyY2VzICovLAogCQkJKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9z
L1Rlc3RDb250cm9sbGVySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tCShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMjYsMTEgKzI2LDEzIEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIlRlc3RDb250
cm9sbGVyLmgiCiAKKwogI2ltcG9ydCAiUGxhdGZvcm1XZWJWaWV3LmgiCiAjaW1wb3J0ICJUZXN0
SW52b2NhdGlvbi5oIgogI2ltcG9ydCAiVGVzdFJ1bm5lcldLV2ViVmlldy5oIgogI2ltcG9ydCA8
Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxVSUtpdC9VSUtpdC5oPgorI2ltcG9y
dCAidW5peExvZ2dpbmdQaXBlcy5oIgogI2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5jZXNSZWZQ
cml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBv
cnQgPFdlYktpdC9XS1N0cmluZ0NGLmg+CkBAIC00NywyMSArNDksMTIgQEAgdm9pZCBUZXN0Q29u
dHJvbGxlcjo6bm90aWZ5RG9uZSgpCiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtSW5p
dGlhbGl6ZSgpCiB7Ci0gICAgY29uc3QgY2hhciogaWRlbnRpZmllciA9IGdldGVudigiSVBDX0lE
RU5USUZJRVIiKTsKLSAgICBjb25zdCBjaGFyICpzdGRpblBhdGggPSBbW05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6QCIvdG1wLyVzX0lOIiwgaWRlbnRpZmllcl0gVVRGOFN0cmluZ107Ci0gICAg
Y29uc3QgY2hhciAqc3Rkb3V0UGF0aCA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIi90
bXAvJXNfT1VUIiwgaWRlbnRpZmllcl0gVVRGOFN0cmluZ107Ci0gICAgY29uc3QgY2hhciAqc3Rk
ZXJyUGF0aCA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIi90bXAvJXNfRVJST1IiLCBp
ZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsKLQotICAgIGludCBpbmZkID0gb3BlbihzdGRpblBhdGgs
IE9fUkRXUik7Ci0gICAgZHVwMihpbmZkLCBTVERJTl9GSUxFTk8pOwotICAgIGludCBvdXRmZCA9
IG9wZW4oc3Rkb3V0UGF0aCwgT19SRFdSKTsKLSAgICBkdXAyKG91dGZkLCBTVERPVVRfRklMRU5P
KTsKLSAgICBpbnQgZXJyZmQgPSBvcGVuKHN0ZGVyclBhdGgsIE9fUkRXUiB8IE9fTk9OQkxPQ0sp
OwotICAgIGR1cDIoZXJyZmQsIFNUREVSUl9GSUxFTk8pOworICAgIHNldHVwVW5peExvZ2dpbmdQ
aXBlcygpOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybURlc3Ryb3koKQogewor
ICAgIHRlYXJkb3duVW5peExvZ2dpbmdQaXBlcygpOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVy
Ojppbml0aWFsaXplSW5qZWN0ZWRCdW5kbGVQYXRoKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297250</attachid>
            <date>2016-12-15 16:32:21 -0800</date>
            <delta_ts>2016-12-16 10:43:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165927-20161215163128.patch</filename>
            <type>text/plain</type>
            <size>234146</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIwOTg4NikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEzMyBAQAorMjAxNi0xMi0xNSAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5j
b20+CisKKyAgICAgICAgUmVtb3ZpbmcgTGF5b3V0VGVzdFJlbGF5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU5MjcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0R1bXBSZW5k
ZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZGVkIHVuaXhMb2dnaW5nUGlwZXMu
aCBhbmQgLm1tIHRvIER1bXBSZW5kZXJUcmVlLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21h
Yy9EdW1wUmVuZGVyVHJlZS5tbTogQWRkZWQgY2FsbCB0byBzZXR1cFVuaXhMb2dnaW5nUGlwZXMo
KSBhbmQgdGVhcmRvd25Vbml4TG9nZ2luZ1BpcGVzKCkgZm9yIGlPUy4KKyAgICAgICAgKGR1bXBS
ZW5kZXJUcmVlKTogCisgICAgICAgICogTGF5b3V0VGVzdFJlbGF5OiBSZW1vdmVkLgorICAgICAg
ICAqIE1ha2VmaWxlOgorICAgICAgICAqIFNjcmlwdHMvYnVpbGQtbGF5b3V0dGVzdHJlbGF5OiBS
ZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvYnVpbGQtd2Via2l0OiBSZW1vdmVkIHJlZmVyZW5j
ZSB0byBMYXlvdXRUZXN0UmVsYXkuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24v
aXBjX3BpcGUucHk6IEFkZGVkLgorICAgICAgICAoVW5peFBpcGVTZXJ2ZXIpOiBBIHNlcnZlci1z
aWRlIFVuaXggcGlwZSBhYnN0cmFjdGlvbiB1c2VkIHRvIHNlbmQgZGF0YSBvdmVyIGEgQUZfVU5J
WCBzdHJlYW1pbmcgc29ja2V0LgorICAgICAgICAoQWJzdHJhY3RQaXBlKTogQWJzdHJhY3Rpb24g
Zm9yIHJlYWRpbmcgZnJvbS93cml0aW5nIHRvIHN0ZGluLCBzdGRvdXQgYW5kIHN0ZGVyci4KKyAg
ICAgICAgKEFic3RyYWN0UGlwZS5jbGVhbik6IENsZWFycyB0aGUgc3Rkb3V0IGFuZCBzdGRlcnIg
c3RyZWFtcyB0byBwcmVzZXJ2ZSBtZW1vcnkuCisgICAgICAgIChBYnN0cmFjdFBpcGUuX3BhcnNl
TWVzc2FnZSk6IEV4cGVjdGVkIHRvIGJlIG92ZXJyaWRkZW4gYnkgY2hpbGQgY2xhc3Nlcy4gIEFk
ZHMgZGF0YSB0byBzdGRvdXQgYW5kIHN0ZGVyciBzdHJlYW1zLgorICAgICAgICAoQWJzdHJhY3RQ
aXBlLnJlYWRMaW5lKTogUmVhZCB0aGUgbmV4dCBsaW5lLCByZWFkIHN0ZGVyciBiZWZvcmUgc3Rk
b3V0LgorICAgICAgICAoQWJzdHJhY3RQaXBlLnN0ZG91dFJlYWQpOiBSZWFkIGEgbGluZSBmcm9t
IHN0ZG91dCwgY2FsbHMgX3BhcnNlTWVzc2FnZS4KKyAgICAgICAgKEFic3RyYWN0UGlwZS5zdGRl
cnJSZWFkKTogUmVhZCBhIGxpbmUgZnJvbSBzdGRlcnIsIGNhbGxzIF9wYXJzZU1lc3NhZ2UuCisg
ICAgICAgIChBYnN0cmFjdFBpcGUucmVhZEJ1ZmZlclN0ZG91dCk6IFJlYWQgZXZlcnl0aGluZyBp
biB0aGUgc3Rkb3V0IGJ1ZmZlci4KKyAgICAgICAgKEFic3RyYWN0UGlwZS5yZWFkQnVmZmVyU3Rk
ZXJyKTogUmVhZCBldmVyeXRoaW5nIGluIHRoZSBzdGRlcnIgYnVmZmVyLgorICAgICAgICAoQWJz
dHJhY3RQaXBlLnJlYWRCbG9ja1N0ZG91dCk6IFJlYWQgYSBibG9jayBvZiBzaXplIGZyb20gc3Rk
b3V0LCBjYWxscyBfcGFyc2VNZXNzYWdlLgorICAgICAgICAoQWJzdHJhY3RQaXBlLnJlYWRCbG9j
a1N0ZGVycik6IFJlYWQgYSBibG9jayBvZiBzaXplIGZyb20gc3RkZXJyLCBjYWxscyBfcGFyc2VN
ZXNzYWdlLgorICAgICAgICAoVW5peFBpcGUpOiBJbmhlcml0cyBmcm9tIEFic3RyYWN0UGlwZSwg
dXNlcyB0aHJlZSBVbml4IHBpcGVzIGFzIHN0ZGluLCBzdGRvdXQgYW5kIHN0ZGVyci4KKyAgICAg
ICAgKFVuaXhQaXBlLl9faW5pdF9fKTogT3BlbnMgYWxsIDMgVW5peCBwaXBlcyBhbmQgYmVnaW5z
IGxpc3RlbmluZyBmb3IgY29ubmVjdGlvbnMuCisgICAgICAgIChVbml4UGlwZS5jb25uZWN0KTog
V2FpdCBmb3IgY29ubmVjdGlvbnMgb24gYWxsIDMgVW5peCBwaXBlcywgcmV0dXJuIGNvbm5lY3Rp
b24gc3RhdHVzLgorICAgICAgICAoVW5peFBpcGUuY2xvc2UpOiBEaXNjb25uZWN0IGFsbCAzIFVu
aXggcGlwZXMuCisgICAgICAgIChVbml4UGlwZS5zZW5kKTogU2VuZCBtZXNzYWdlIHRocm91Z2gg
c3RkaW4gcGlwZS4KKyAgICAgICAgKFVuaXhQaXBlLl9wYXJzZU1lc3NhZ2UpOiBBdHRlbXB0IHRv
IHJlYWQgZnJvbSBib3RoIHN0ZG91dCBhbmQgc3RkZXJyIFVuaXggcGlwZXMuCisgICAgICAgIChV
bml4UGlwZS5oYW5kbGVfaW50ZXJydXB0KTogTmVlZGVkIGR1cmluZyBjcmFzaGVzLgorICAgICAg
ICAoUHJvY2Vzc1BpcGUpOiAKKyAgICAgICAgKFByb2Nlc3NQaXBlLl9faW5pdF9fKToKKyAgICAg
ICAgKFByb2Nlc3NQaXBlLnBpZCk6CisgICAgICAgIChQcm9jZXNzUGlwZS5pc0Nvbm5lY3RlZCk6
CisgICAgICAgIChQcm9jZXNzUGlwZS5oYW5kbGVfaW50ZXJydXB0KToKKyAgICAgICAgKFByb2Nl
c3NQaXBlLmNsb3NlKToKKyAgICAgICAgKFByb2Nlc3NQaXBlLnNlbmQpOgorICAgICAgICAoUHJv
Y2Vzc1BpcGUuX3VuaXhzdGRCbG9jayk6CisgICAgICAgIChQcm9jZXNzUGlwZS5fdW5peGVyckJs
b2NrKToKKyAgICAgICAgKFByb2Nlc3NQaXBlLl93aW4zMk5vbkJsb2NraW5nUmVhZCk6CisgICAg
ICAgIChQcm9jZXNzUGlwZS5fd2luMzJzdGRCbG9jayk6CisgICAgICAgIChQcm9jZXNzUGlwZS5f
d2luMzJlcnJCbG9jayk6CisgICAgICAgIChQcm9jZXNzUGlwZS5fcGFyc2VNZXNzYWdlKToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9pcGNfcGlwZV90ZXN0Y2FzZS5weTogQWRk
ZWQuCisgICAgICAgIChEdW1teVByb2Nlc3NQaXBlKTogUHJvY2VzcyBwaXBlIHVzZWQgZm9yIHRl
c3RpbmcuCisgICAgICAgIChVbml4UGlwZUNsaWVudCk6IFVuaXggcGlwZSBjbGllbnQgdXNlZCB0
byB0ZXN0IFVuaXhQaXBlU2VydmVyIGFuZCBVbml4UGlwZSBjbGFzc2VzLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvY29tbW9uL2lwY19waXBlX3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAg
ICAgKFVuaXhQaXBlQ2xpZW50VGVzdGluZ1RocmVhZCk6IEZ1bmN0aW9uIHVzZWQgZm9yIHRlc3Rp
bmcgY2xpZW50L3NlcnZlciBhcmNoaXRlY3R1cmVzLgorICAgICAgICAoaXBjUGlwZVRlc3QpOiBV
bml0IHRlc3RzIGZvciBjbGFzc2VzIGluIGlwY19waXBlLnB5LgorICAgICAgICAoaXBjUGlwZVRl
c3QudGVzdF9hYnN0cmFjdHBpcGVfc3Rkb3V0KTogVGVzdCBzdGRvdXQgc3RyZWFtIGluIHRoZSBh
YnN0cmFjdCBwaXBlLgorICAgICAgICAoaXBjUGlwZVRlc3QudGVzdF9hYnN0cmFjdHBpcGVfc3Rk
ZXJyKTogVGVzdCBzdGRlcnIgc3RyZWFtIGluIHRoZSBhYnN0cmFjdCBwaXBlLgorICAgICAgICAo
aXBjUGlwZVRlc3QudGVzdF9hYnN0cmFjdHBpcGVfZHVlbF9zdHJlYW1zKTogRW5zdXJlIHN0ZG91
dCBhbmQgc3RkZXJyIGRvIG5vdCBtaW5nbGUuCisgICAgICAgIChpcGNQaXBlVGVzdC50ZXN0X2Fi
c3RyYWN0cGlwZV9zdGRvdXRibG9jayk6IFRlc3QgcmVhZGluZyBhIGRhdGEgYmxvY2sgZnJvbSBz
dGRvdXQuCisgICAgICAgIChpcGNQaXBlVGVzdC50ZXN0X2Fic3RyYWN0cGlwZV9zdGRlcnJibG9j
ayk6IFRlc3QgcmVhZGluZyBhIGRhdGEgYmxvY2sgZnJvbSBzdGRlcnIuCisgICAgICAgIChpcGNQ
aXBlVGVzdC50ZXN0X3VuaXhQaXBlU2VydmVyKTogVGVzdCB0aGUgVW5peFBpcGVTZXJ2ZXIgd2l0
aCBhIFVuaXhQaXBlQ2xpZW50LgorICAgICAgICAoaXBjUGlwZVRlc3QudGVzdF91bml4UGlwZSk6
IFRlc3QgYWxsIHRocmVlIHN0cmVhbXMgb2YgdGhlIFVuaXhQaXBlIGNsYXNzLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5OgorICAgICAgICAoUG9ydC50by5kZXZpY2VE
ZWZpbmVkKTogRnVuY3Rpb24gdG8gYmUgb3ZlcnJpZGRlbiBieSBpT1MgY2xhc3Nlcy4KKyAgICAg
ICAgKFBvcnQudG8ucnVuT25EZXZpY2UpOiBGdW5jdGlvbiB0byBiZSBvdmVycmlkZGVuIGJ5IGlP
UyBjbGFzc2VzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlX3VuaXR0ZXN0
LnB5OgorICAgICAgICAodGVzdF9kZXZpY2UpOiBUZXN0IHRoYXQsIGluIHRoZSBnZW5lcmFsIGNh
c2UsIGRldmljZXMgYXJlIHVuZGVmaW5lZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvZGFyd2luLnB5OgorICAgICAgICAoRGFyd2luUG9ydC5leHRyYWN0QnVuZGxlSUQpOiBTZWFy
Y2ggYW4gYXBwIGJ1bmRsZSBmb3IgYSBwbGlzdCBhbmQgYnVuZGxlIElELgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW5fdGVzdGNhc2UucHk6CisgICAgICAgIChEYXJ3aW5U
ZXN0LnRlc3RfcGxpc3QpOiBUZXN0IHBsaXN0IGFjY2VzcyBieSBjcmVhdGluZyBhIHRlbXBvcmFy
eSBwbGlzdCB0byByZWFkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIu
cHk6CisgICAgICAgIChEcml2ZXIuX19pbml0X18pOgorICAgICAgICAoRHJpdmVyLnJ1bl90ZXN0
KTogQ2xlYXIgc3RyZWFtcyB3aXRoIGNsZWFuIGJlZm9yZSBydW5uaW5nIGEgdGVzdC4KKyAgICAg
ICAgKERldmljZURyaXZlcik6IENoYW5nZWQgZnJvbSBJT1NTaW11bGF0b3JEcml2ZXIuCisgICAg
ICAgIChEZXZpY2VEcml2ZXIuY21kX2xpbmUpOiBQYXNzICdydW4tb24tZGV2aWNl4oCZLCB3aGlj
aCBpcyByZWNvZ25pemVkIGJ5IHRoZSBzZXJ2ZXJfcHJvY2VzcyBjbGFzcy4KKyAgICAgICAgKERl
dmljZURyaXZlci5fc2V0dXBfZW52aXJvbl9mb3JfZHJpdmVyKTogQ2hhbmdlZCBmcm9tIElPU1Np
bXVsYXRvckRyaXZlci4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5Ogor
ICAgICAgICAoSU9TQmFzZSk6IEJhc2UgY2xhc3MgZm9yIElPU1BvcnQgYW5kIElPU1NpbXVsYXRv
ciBwb3J0LgorICAgICAgICAoSU9TQmFzZS5kcml2ZXJfbmFtZSk6IEFjY2VzcyBjdXJyZW50IGFw
cCBuYW1lLgorICAgICAgICAoSU9TQmFzZS5fZ2V0X2NyYXNoX2xvZyk6IE1vdmVkIGZyb20gSU9T
U2ltdWxhdG9yUG9ydC4KKyAgICAgICAgKElPU0Jhc2UuX3Rlc3RpbmdfZGV2aWNlKTogQWNjZXNz
IGRldmljZXMgYnkgaW5kZXguCisgICAgICAgIChJT1NCYXNlLmRldmljZV9pZF9mb3Jfd29ya2Vy
X251bWJlcik6IE1vdmVkIGZyb20gSU9TU2ltdWxhdG9yUG9ydC4KKyAgICAgICAgKElPU0Jhc2Uu
X2RyaXZlcl9jbGFzcyk6IE1vdmVkIGZyb20gSU9TU2ltdWxhdG9yUG9ydC4KKyAgICAgICAgKElP
U0Jhc2UuZGV2aWNlRGVmaW5lZCk6IFRydWUgZm9yIGFsbCBJT1MgY2xhc3Nlcy4KKyAgICAgICAg
KElPU0Jhc2UuX2RldmljZVBpbmcpOiBGdW5jdGlvbiB0byB0ZXN0IGlmIGEgZGV2aWNlIGlzIG9u
LgorICAgICAgICAoSU9TQmFzZS5fZGV2aWNlSW5zdGFsbCk6IEluc3RhbGwgYXBwIHRvIGRldmlj
ZS4KKyAgICAgICAgKElPU0Jhc2UuX2RldmljZVJ1bik6IFJ1biBhcHAgb24gZGV2aWNlLgorICAg
ICAgICAoSU9TQmFzZS5fZGV2aWNlS2lsbCk6IFNodXRkb3duIGFwcCBvbiBkZXZpY2UuCisgICAg
ICAgIChJT1NCYXNlLnJ1bk9uRGV2aWNlKTogUnVuIGNvbW1hbmQgb24gZGV2aWNlLgorICAgICAg
ICAoSU9TUG9ydCk6IENsYXNzIGRlc2lnbmVkIGZvciBydW5uaW5nIG9uIGRldmljZS4KKyAgICAg
ICAgKElPU1NpbXVsYXRvclBvcnQpOgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fZGV2aWNl
UGluZyk6IENoZWNrIGlmIHRoZSB0YXJnZXRlZCBzaW11bGF0b3IgaXMgYm9vdGVkLgorICAgICAg
ICAoSU9TU2ltdWxhdG9yUG9ydC5fZGV2aWNlSW5zdGFsbCk6IEluc3RhbGwgYXBwIHRvIHNpbXVs
YXRvci4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX2RldmljZVJ1bik6IFJ1biBpbnN0YWxs
ZWQgYXBwIG9uIHRhcmdldGVkIHNpbXVsYXRvci4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQu
X2RldmljZUtpbGwpOiBTaHV0ZG93biBhcHAgb24gdGFyZ2V0ZWQgc2ltdWxhdG9yLgorICAgICAg
ICAoSU9TU2ltdWxhdG9yUG9ydC5yZWxheV9wYXRoKTogUmVtb3ZlZCBMYXlvdXRUZXN0UmVsYXku
CisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9jaGVja19yZWxheSk6IFJlbW92ZWQgTGF5b3V0
VGVzdFJlbGF5LgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IE1v
dmVkIHRvIElPU0Jhc2UuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9idWlsZF9yZWxheSk6
IFJlbW92ZWQgTGF5b3V0VGVzdFJlbGF5LgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fZHJp
dmVyX2NsYXNzKTogTW92ZWQgdG8gSU9TQmFzZS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3BvcnQvaW9zX3VuaXR0ZXN0LnB5OgorICAgICAgICAoSU9TVGVzdCk6IFRlc3RzIGZ1bmN0aW9u
YWxpdHkgdW5pcXVlIHRvIHRoZSBJT1NQb3J0IGNsYXNzLgorICAgICAgICAoSU9TU2ltdWxhdG9y
VGVzdCk6IFRlc3RzIGZ1bmN0aW9uYWxpdHkgdW5pcXVlIHRvIHRoZSBJT1NTaW11bGF0b3IgY2xh
c3MuCisgICAgICAgIChpb3NUZXN0KTogTW92ZWQgdG8gZWl0aGVyIElPU1NpbXVsYXRvclRlc3Qg
b3IgSU9TQmFzZVRlc3QuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc2Jhc2Vf
dGVzdGNhc2UucHk6IEFkZGVkLgorICAgICAgICAoSU9TQmFzZVRlc3QpOiBUZXN0cyBmdW5jdGlv
bmFsaXR5IHNoYXJlZCBiZXR3ZWVuIElPU1BvcnQgYW5kIElPU1NpbXVsYXRvci4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3MucHk6IE5vdGUgdGhhdCBzb21l
IHByZXZpb3VzIGZ1bmN0aW9uYWxpdHkgb2Ygc2VydmVyX3Byb2Nlc3MgaGFzIGJlZW4gbW92ZWQg
dG8gUHJvY2Vzc1BpcGUuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLl9faW5pdF9fKTogVXNlIF9w
aXBlIGluc3RlYWQgb2YgcHJvYy4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MuY2xlYW4pOiBDbGVh
biBwaXBlIChyZXNldHMgc3RyZWFtIGJ1ZmZlcnMuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLl9y
ZXNldCk6IERlc3Ryb3kgcGlwZSwgbm8gcGlkLgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5fc3Rh
cnQpOiBVc2UgVW5peFBpcGUgZm9yIHJ1bm5pbmcgb24tZGV2aWNlIGFuZCBQcm9jZXNzUGlwZSBv
dGhlcndpc2UuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLnBvbGwpOiBVc2UgaXNDb25uZWN0ZWQg
ZnVuY3Rpb24gb2YgcGlwZXMuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLndyaXRlKTogV3JpdGUg
ZGF0YSB0byBwaXBlLgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5fcG9wX3N0ZG91dF9saW5lX2lm
X3JlYWR5KTogUmVhZCBzdGRvdXQgbGluZSBmcm9tIHBpcGUuCisgICAgICAgIChTZXJ2ZXJQcm9j
ZXNzLl9wb3Bfc3RkZXJyX2xpbmVfaWZfcmVhZHkpOiBSZWFkIHN0ZGVyciBsaW5lIGZyb20gcGlw
ZS4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MucG9wX2FsbF9idWZmZXJlZF9zdGRlcnIpOiBSZWFk
IGFsbCBzdGRlcnIgbGluZXMgZnJvbSBwaXBlLgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5yZWFk
X2VpdGhlcl9zdGRvdXRfb3Jfc3RkZXJyX2xpbmUpOiBSZWFkIGEgbGluZSBmcm9tIGVpdGhlciBz
dHJlYW0gZnJvbSB0aGUgcGlwZS4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MucmVhZF9zdGRvdXQp
OiBSZWFkIGZyb20gc3Rkb3V0IG9mIHBpcGUuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLnN0b3Ap
OiBDbGVhciBidWZmZXJzIGFuZCBzaHV0ZG93biBwaXBlLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzc191bml0dGVzdC5weTogVXNlIHBpcGVzIGluc3RlYWQg
b2YgTW9ja1Byb2MuCisgICAgICAgIChNb2NrRmlsZSk6IFJlcGxhY2VkIE1vY2tGaWxlIHdpdGgg
RHVtbXlQcm9jZXNzUGlwZS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNr
ZXJzL3B5dGhvbi5weToKKyAgICAgICAgKFB5bGludGVyLnJ1bik6IEZpeCBmb3Iga25vd24gaXNz
dWUgd2l0aCBQeWxpbnRlciBhbmQgc29ja2V0cy4KKyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVk
L3VuaXhMb2dnaW5nUGlwZXMuaDogQWRkZWQuCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC91
bml4TG9nZ2luZ1BpcGVzLm1tOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6c2V0dXBVbml4TG9nZ2lu
Z1BpcGVzKTogU2V0cyB1cCBVbml4UGlwZXMgZm9yIElPU1NpbXVsYXRvci4KKyAgICAgICAgKFdU
Ujo6dGVhcmRvd25Vbml4TG9nZ2luZ1BpcGVzKTogVGVhcnMtZG93biB1cCBVbml4UGlwZXMgZm9y
IElPU1NpbXVsYXRvci4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5u
ZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6
OnBsYXRmb3JtSW5pdGlhbGl6ZSk6IEFkZGVkIGNhbGwgdG8gc2V0dXBVbml4TG9nZ2luZ1BpcGVz
KCkgZm9yIGlPUy4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtRGVzdHJv
eSk6IEFkZGVkIGNhbGwgdG8gdGVhcmRvd25Vbml4TG9nZ2luZ1BpcGVzKCkgZm9yIGlPUy4KKwog
MjAxNi0xMi0xNSAgQ2xhdWRpbyBTYWF2ZWRyYSAgPGNzYWF2ZWRyYUBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFtHVEtdIEVuc3VyZSBnc3QqIGRvY3MgYXJlIG5vdCBidWlsdCB3aXRoIHVwZGF0ZS13
ZWJraXRndGstbGlicwpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25z
L0Jhc2UueGNjb25maWcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZp
Z3VyYXRpb25zL0Jhc2UueGNjb25maWcJKHJldmlzaW9uIDIwOTg4NikKKysrIFRvb2xzL0xheW91
dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCShub25leGlzdGVudCkKQEAg
LTEsNjggKzAsMCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotLy8gYXJlIG1ldDoK
LS8vIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0vLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotLy8gICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLS8vIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0vLyBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LS8vIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0vLyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLS8vIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLS8vIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotLy8gUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotLy8gT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNs
dWRlICIuLi8uLi8uLi8uLi9JbnRlcm5hbC9Db25maWd1cmF0aW9ucy9IYXZlSW50ZXJuYWxTREsu
eGNjb25maWciCi0KLVVTRV9JTlRFUk5BTF9TREsgPSAkKFVTRV9JTlRFUk5BTF9TREtfJChDT05G
SUdVUkFUSU9OKSk7Ci1VU0VfSU5URVJOQUxfU0RLX1Byb2R1Y3Rpb24gPSBZRVM7Ci1VU0VfSU5U
RVJOQUxfU0RLX0RlYnVnID0gJChIQVZFX0lOVEVSTkFMX1NESyk7Ci1VU0VfSU5URVJOQUxfU0RL
X1JlbGVhc2UgPSAkKEhBVkVfSU5URVJOQUxfU0RLKTsKLQotQ0xBTkdfQ1hYX0xBTkdVQUdFX1NU
QU5EQVJEID0gZ251KysweDsKLUNMQU5HX0VOQUJMRV9PQkpDX0FSQyA9IFlFUzsKLUNMQU5HX1dB
Uk5fQ1hYMFhfRVhURU5TSU9OUyA9IE5POwotSEVBREVSX1NFQVJDSF9QQVRIUyA9ICQoQlVJTFRf
UFJPRFVDVFNfRElSKS91c3IvbG9jYWwvaW5jbHVkZSAkKFdFQkNPUkVfUFJJVkFURV9IRUFERVJT
X0RJUikvRm9yd2FyZGluZ0hlYWRlcnMgJChTUkNST09UKS8uLi8uLi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaWN1ICQoTkVYVF9ST09UKS91c3IvbG9jYWwvaW5jbHVkZS9XZWJDb3JlVGVzdFN1cHBv
cnQ7Ci1HQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gJChERUJVR19ERUZJTkVTKSBFTkFC
TEVfREFTSEJPQVJEX1NVUFBPUlQ7Ci1ERUJVR19JTkZPUk1BVElPTl9GT1JNQVQgPSBkd2FyZi13
aXRoLWRzeW07Ci1QUkVCSU5ESU5HID0gTk8KLUdDQ19DX0xBTkdVQUdFX1NUQU5EQVJEID0gZ251
OTkKLUdDQ19FTkFCTEVfQ1BQX0VYQ0VQVElPTlMgPSBOTzsKLUdDQ19FTkFCTEVfQ1BQX1JUVEkg
PSBOTzsKLUdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFERVIgPSBZRVMKLUdDQ19UUkVBVF9XQVJO
SU5HU19BU19FUlJPUlMgPSBZRVMKLUdDQ19WRVJTSU9OID0gY29tLmFwcGxlLmNvbXBpbGVycy5s
bHZtLmNsYW5nLjFfMDsKLUdDQ19XQVJOX0FCT1VUX0RFUFJFQ0FURURfRlVOQ1RJT05TID0gTk8K
LUdDQ19XQVJOX1VOVVNFRF9GVU5DVElPTiA9IFlFUwotR0NDX1dBUk5fVU5VU0VEX1ZBUklBQkxF
ID0gWUVTCi1HQ0NfV0FSTl82NF9UT18zMl9CSVRfQ09OVkVSU0lPTlthcmNoPXg4Nl82NF0gPSBO
TzsKLVdBUk5JTkdfQ0ZMQUdTID0gLVdhbGwgLVcgLVduby11bnVzZWQtcGFyYW1ldGVyIC1XdW5k
ZWYKLQotREVCVUdfREVGSU5FU19kZWJ1ZyA9IDsKLURFQlVHX0RFRklORVNfbm9ybWFsID0gTkRF
QlVHOwotREVCVUdfREVGSU5FUyA9ICQoREVCVUdfREVGSU5FU18kKENVUlJFTlRfVkFSSUFOVCkp
OwotCi1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUiA9ICQoVEFSR0VUX01BQ19PU19YX1ZF
UlNJT05fTUFKT1IkKE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVDpzdWZmaXg6aWRlbnRpZmllcikp
OwotVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1JfMTAgPSAxMDEwMDA7Ci1UQVJHRVRfTUFD
X09TX1hfVkVSU0lPTl9NQUpPUl8xMSA9IDEwMTEwMDsKLVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9O
X01BSk9SXzEyID0gMTAxMjAwOwotVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1JfMTMgPSAx
MDEzMDA7Ci0KLVNES1JPT1QgPSBtYWNvc3guaW50ZXJuYWw7Ci0KLVNVUFBPUlRFRF9QTEFURk9S
TVMgPSBtYWNvc3g7Ci0KLVRPT0xDSEFJTlMgPSBkZWZhdWx0OwotCi1PVEhFUl9DRkxBR1MgPSAk
KEFTQU5fT1RIRVJfQ0ZMQUdTKTsKLU9USEVSX0NQTFVTUExVU0ZMQUdTID0gJChBU0FOX09USEVS
X0NQTFVTUExVU0ZMQUdTKTsKLU9USEVSX0xERkxBR1MgPSAkKEFTQU5fT1RIRVJfTERGTEFHUyk7
CkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMvRGVidWdSZWxlYXNl
LnhjY29uZmlnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0
aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25maWcJKHJldmlzaW9uIDIwOTg4NikKKysrIFRvb2xzL0xh
eW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25maWcJKG5vbmV4
aXN0ZW50KQpAQCAtMSw0MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0v
LyBhcmUgbWV0OgotLy8gMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0vLyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotLy8gRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS8v
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotLy8gUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLS8vIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotLy8gRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotLy8gUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0vLyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0vLyBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotI2luY2x1ZGUgIkJhc2UueGNjb25maWciCi0KLUFSQ0hTID0gJChBUkNIU19TVEFOREFS
RF82NF9CSVQpOwotCi1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUiA9ICQoTUFDX09TX1hf
VkVSU0lPTl9NQUpPUik7Ci0KLU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCA9ICQoTUFDT1NYX0RF
UExPWU1FTlRfVEFSR0VUXyQoVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1IpKQotTUFDT1NY
X0RFUExPWU1FTlRfVEFSR0VUXzEwMTAwMCA9IDEwLjEwOwotTUFDT1NYX0RFUExPWU1FTlRfVEFS
R0VUXzEwMTEwMCA9IDEwLjExOwotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEwMTIwMCA9IDEw
LjEyOwotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEwMTMwMCA9IDEwLjEzOwotCi1GUkFNRVdP
UktfU0VBUkNIX1BBVEhTID0gJChERVZFTE9QRVJfRElSKS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdv
cmtzOwotTERfUlVOUEFUSF9TRUFSQ0hfUEFUSFMgPSAkKERFVkVMT1BFUl9ESVIpL0xpYnJhcnkv
UHJpdmF0ZUZyYW1ld29ya3M7Ci1PVEhFUl9MREZMQUdTID0gLWZyYW1ld29yayBDb3JlU2ltdWxh
dG9yIC1mcmFtZXdvcmsgQXBwS2l0OwotCi1TREtST09UID0gJChTREtST09UX21hY29zeF8kKFVT
RV9JTlRFUk5BTF9TREspKTsKLVNES1JPT1RfbWFjb3N4XyA9IG1hY29zeDsKLVNES1JPT1RfbWFj
b3N4X1lFUyA9IG1hY29zeC5pbnRlcm5hbDsKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9M
YXlvdXRUZXN0UmVsYXkvQ29yZVNpbXVsYXRvclNQSS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xh
eW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvQ29yZVNpbXVsYXRvclNQSS5oCShyZXZpc2lv
biAyMDk4ODYpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0NvcmVT
aW11bGF0b3JTUEkuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWYgX19oYXNfaW5jbHVkZSg8Q29yZVNpbXVsYXRvci9Db3JlU2ltdWxhdG9yLmg+
KQotCi0vKiBGSVhNRTogUmVtb3ZlIHRoZSBiZWxvdyAjZGVmaW5lIG9uY2Ugd2UgcmVxdWlyZSBY
Y29kZSA3LjMgd2l0aCBpT1MgOS4zIFNESyBvciBuZXdlci4gKi8KLSNkZWZpbmUgX19jb3Jlc2lt
X3VuYXZhaWxhYmxlX21zZyhtc2cpCi0jaW1wb3J0IDxDb3JlU2ltdWxhdG9yL0NvcmVTaW11bGF0
b3IuaD4KLQotLyogRklYTUU6IEFsd2F5cyB1c2UgU2ltU2VydmljZUNvbnRleHQgb25jZSB3ZSBy
ZXF1aXJlIFhjb2RlIDcuMyB3aXRoIGlPUyA5LjMgU0RLIG9yIG5ld2VyLiAqLwotI2RlZmluZSBV
U0VfU0lNX1NFUlZJQ0VfQ09OVEVYVCBkZWZpbmVkKENPUkVTSU1fQVBJX01BWF9BTExPV0VEKQot
Ci0jZWxzZQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2RlZmluZSBV
U0VfU0lNX1NFUlZJQ0VfQ09OVEVYVCAxCi0KLSNkZWZpbmUga1NpbURldmljZUxhdW5jaEFwcGxp
Y2F0aW9uQXJndW1lbnRzIEAiYXJndW1lbnRzIgotI2RlZmluZSBrU2ltRGV2aWNlTGF1bmNoQXBw
bGljYXRpb25FbnZpcm9ubWVudCBAImVudmlyb25tZW50IgotCi1AaW50ZXJmYWNlIFNpbURldmlj
ZSA6IE5TT2JqZWN0Ci0tIChCT09MKWluc3RhbGxBcHBsaWNhdGlvbjooTlNVUkwgKilpbnN0YWxs
VVJMIHdpdGhPcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zIGVycm9yOihOU0Vycm9yICog
X19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci0tIChwaWRfdClsYXVuY2hBcHBsaWNhdGlvbldpdGhJ
RDooTlNTdHJpbmcgKilidW5kbGVJRCBvcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zIGVy
cm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci1AZW5kCi0KLUBpbnRlcmZh
Y2UgU2ltRGV2aWNlU2V0IDogTlNPYmplY3QKLUBwcm9wZXJ0eSAocmVhZG9ubHksIGNvcHkpIE5T
RGljdGlvbmFyeSAqZGV2aWNlc0J5VURJRDsKLUBlbmQKLQotQGludGVyZmFjZSBTaW1TZXJ2aWNl
Q29udGV4dCA6IE5TT2JqZWN0Ci0rKFNpbVNlcnZpY2VDb250ZXh0ICopc2hhcmVkU2VydmljZUNv
bnRleHRGb3JEZXZlbG9wZXJEaXI6KE5TU3RyaW5nICopZGV2ZWxvcGVyRGlyIGVycm9yOihOU0Vy
cm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci0tKFNpbURldmljZVNldCAqKWRlZmF1bHRE
ZXZpY2VTZXRXaXRoRXJyb3I6KE5TRXJyb3IgKiBfX2F1dG9yZWxlYXNpbmcgKillcnJvcjsKLUBl
bmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5
L0xUUGlwZVJlbGF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91
dFRlc3RSZWxheS9MVFBpcGVSZWxheS5oCShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29scy9MYXlv
dXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5LmgJKG5vbmV4aXN0ZW50KQpA
QCAtMSwzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBMVFBpcGVSZWxheV9oCi0jZGVm
aW5lIExUUGlwZVJlbGF5X2gKLQotI2ltcG9ydCAiTFRSZWxheS5oIgotCi1AaW50ZXJmYWNlIExU
UGlwZVJlbGF5IDogTlNPYmplY3QgPExUUmVsYXk+Ci1AcHJvcGVydHkgKHdlYWspIGlkPExUUmVs
YXlEZWxlZ2F0ZT4gcmVsYXlEZWxlZ2F0ZTsKLS0gKGlkKWluaXRXaXRoUHJlZml4OihOU1N0cmlu
ZyAqKXByZWZpeDsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkv
TGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0
VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5tCShyZXZpc2lvbiAyMDk4ODYp
CisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0J
KG5vbmV4aXN0ZW50KQpAQCAtMSwxNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgIkxU
UGlwZVJlbGF5LmgiCi0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotI2luY2x1
ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLUBpbnRlcmZhY2UgTFRQ
aXBlUmVsYXkgKCkKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKmZpZm9Q
cmVmaXg7Ci1AcHJvcGVydHkgKHN0cm9uZykgTlNPdXRwdXRTdHJlYW0gKnN0YW5kYXJkSW5wdXRQ
aXBlOwotQHByb3BlcnR5IChzdHJvbmcpIE5TSW5wdXRTdHJlYW0gKnN0YW5kYXJkT3V0cHV0UGlw
ZTsKLUBwcm9wZXJ0eSAoc3Ryb25nKSBOU0lucHV0U3RyZWFtICpzdGFuZGFyZEVycm9yUGlwZTsK
LQotLSAodm9pZCljcmVhdGVGSUZPczsKLS0gKHZvaWQpZGVzdHJveUZJRk9zOwotQGVuZAotCi1A
aW1wbGVtZW50YXRpb24gTFRQaXBlUmVsYXkKLQotLSAoTlNTdHJpbmcgKilpblBpcGVQYXRoCi17
Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9JTiJd
OwotfQotCi0tIChOU1N0cmluZyAqKW91dFBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1By
ZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9PVVQiXTsKLX0KLQotLSAoTlNTdHJpbmcg
KillcnJvclBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVu
ZGluZ1N0cmluZzpAIl9FUlJPUiJdOwotfQotCi0tIChOU091dHB1dFN0cmVhbSAqKSBvdXRwdXRT
dHJlYW0KLXsKLSAgICByZXR1cm4gX3N0YW5kYXJkSW5wdXRQaXBlOwotfQotCi0tIChpZClpbml0
V2l0aFByZWZpeDooTlNTdHJpbmcgKilwcmVmaXgKLXsKLSAgICBpZiAoKHNlbGYgPSBbc3VwZXIg
aW5pdF0pKSB7Ci0gICAgICAgIF9maWZvUHJlZml4ID0gcHJlZml4OwotICAgICAgICBbc2VsZiBk
ZXN0cm95RklGT3NdOwotICAgIH0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXR1
cAotewotICAgIFtzZWxmIGRlc3Ryb3lGSUZPc107Ci0gICAgW3NlbGYgY3JlYXRlRklGT3NdOwot
fQotCi0tICh2b2lkKXRlYXJEb3duCi17Ci0gICAgW3NlbGYgZGVzdHJveUZJRk9zXTsKLX0KLQot
LSh2b2lkKSBjb25uZWN0Ci17Ci0gICAgX3N0YW5kYXJkSW5wdXRQaXBlID0gW05TT3V0cHV0U3Ry
ZWFtIG91dHB1dFN0cmVhbVRvRmlsZUF0UGF0aDpbc2VsZiBpblBpcGVQYXRoXSBhcHBlbmQ6WUVT
XTsKLSAgICBfc3RhbmRhcmRPdXRwdXRQaXBlID0gW05TSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW1X
aXRoRmlsZUF0UGF0aDpbc2VsZiBvdXRQaXBlUGF0aF1dOwotICAgIF9zdGFuZGFyZEVycm9yUGlw
ZSA9IFtOU0lucHV0U3RyZWFtIGlucHV0U3RyZWFtV2l0aEZpbGVBdFBhdGg6W3NlbGYgZXJyb3JQ
aXBlUGF0aF1dOwotCi0gICAgW1tzZWxmIHN0YW5kYXJkSW5wdXRQaXBlXSBzZXREZWxlZ2F0ZTpz
ZWxmXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRQaXBlXSBzZXREZWxlZ2F0ZTpzZWxmXTsK
LSAgICBbW3NlbGYgc3RhbmRhcmRFcnJvclBpcGVdIHNldERlbGVnYXRlOnNlbGZdOwotCi0gICAg
W1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gc2NoZWR1bGVJblJ1bkxvb3A6W05TUnVuTG9vcCBt
YWluUnVuTG9vcF0gZm9yTW9kZTpOU0RlZmF1bHRSdW5Mb29wTW9kZV07Ci0gICAgW1tzZWxmIHN0
YW5kYXJkRXJyb3JQaXBlXSBzY2hlZHVsZUluUnVuTG9vcDpbTlNSdW5Mb29wIG1haW5SdW5Mb29w
XSBmb3JNb2RlOk5TRGVmYXVsdFJ1bkxvb3BNb2RlXTsKLQotICAgIFtbc2VsZiBzdGFuZGFyZElu
cHV0UGlwZV0gb3Blbl07Ci0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gb3Blbl07Ci0g
ICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JQaXBlXSBvcGVuXTsKLQotICAgIFtbc2VsZiByZWxheURl
bGVnYXRlXSBkaWRDb25uZWN0XTsKLX0KLQotLSAodm9pZClkaXNjb25uZWN0Ci17Ci0gICAgW1tz
ZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gY2xvc2VdOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9y
UGlwZV0gY2xvc2VdOwotICAgIFtbc2VsZiBzdGFuZGFyZElucHV0UGlwZV0gY2xvc2VdOwotICAg
IFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWREaXNjb25uZWN0XTsKLX0KLQotLSAodm9pZCljcmVh
dGVGSUZPcwotewotICAgIG1rZmlmbyhbW3NlbGYgaW5QaXBlUGF0aF0gVVRGOFN0cmluZ10sIDA2
NjYpOwotICAgIG1rZmlmbyhbW3NlbGYgb3V0UGlwZVBhdGhdIFVURjhTdHJpbmddLCAwNjY2KTsK
LSAgICBta2ZpZm8oW1tzZWxmIGVycm9yUGlwZVBhdGhdIFVURjhTdHJpbmddLCAwNjY2KTsKLX0K
LQotLSAodm9pZClkZXN0cm95RklGT3MKLXsKLSAgICB1bmxpbmsoW1tzZWxmIGluUGlwZVBhdGhd
IFVURjhTdHJpbmddKTsKLSAgICB1bmxpbmsoW1tzZWxmIG91dFBpcGVQYXRoXSBVVEY4U3RyaW5n
XSk7Ci0gICAgdW5saW5rKFtbc2VsZiBlcnJvclBpcGVQYXRoXSBVVEY4U3RyaW5nXSk7Ci19Ci0K
LS0gKHZvaWQpIHJlbGF5U3RyZWFtOihOU0lucHV0U3RyZWFtICopc3RyZWFtCi17Ci0gICAgdWlu
dDhfdCBieXRlc1sxMDI0XTsKLSAgICBOU0ludGVnZXIgYnl0ZXNSZWFkID0gW3N0cmVhbSByZWFk
OmJ5dGVzIG1heExlbmd0aDoxMDI0XTsKLSAgICBOU0RhdGEgKmRhdGEgPSBbTlNEYXRhIGRhdGFX
aXRoQnl0ZXM6Ynl0ZXMgbGVuZ3RoOmJ5dGVzUmVhZF07Ci0KLSAgICBpZiAoc3RyZWFtID09IFtz
ZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0pCi0gICAgICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBk
aWRSZWNlaXZlU3Rkb3V0RGF0YTpkYXRhXTsKLSAgICBlbHNlCi0gICAgICAgIFtbc2VsZiByZWxh
eURlbGVnYXRlXSBkaWRSZWNlaXZlU3RkZXJyRGF0YTpkYXRhXTsKLX0KLQotLSAodm9pZClzdHJl
YW06KE5TU3RyZWFtICopYVN0cmVhbSBoYW5kbGVFdmVudDooTlNTdHJlYW1FdmVudClldmVudENv
ZGUKLXsKLSAgICBzd2l0Y2ggKGV2ZW50Q29kZSkgewotICAgIGNhc2UgTlNTdHJlYW1FdmVudE5v
bmU6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlNTdHJlYW1FdmVudEhhc0J5dGVzQXZhaWxh
YmxlOgotICAgICAgICBbc2VsZiByZWxheVN0cmVhbTooTlNJbnB1dFN0cmVhbSAqKWFTdHJlYW1d
OwotICAgIGNhc2UgTlNTdHJlYW1FdmVudEhhc1NwYWNlQXZhaWxhYmxlOgotICAgICAgICBicmVh
azsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnRPcGVuQ29tcGxldGVkOgotICAgICAgICBicmVhazsK
LSAgICBjYXNlIE5TU3RyZWFtRXZlbnRFbmRFbmNvdW50ZXJlZDoKLSAgICAgICAgW1tzZWxmIHJl
bGF5RGVsZWdhdGVdIGRpZENyYXNoV2l0aE1lc3NhZ2U6bmlsXTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBOU1N0cmVhbUV2ZW50RXJyb3JPY2N1cnJlZDoKLSAgICAgICAgW1tzZWxmIHJlbGF5
RGVsZWdhdGVdIGRpZENyYXNoV2l0aE1lc3NhZ2U6W1thU3RyZWFtIHN0cmVhbUVycm9yXSBkZXNj
cmlwdGlvbl1dOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLUBlbmQKSW5kZXg6IFRvb2xz
L0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheS5oCShyZXZpc2lv
biAyMDk4ODYpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVs
YXkuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IExUUmVsYXlfaAotI2RlZmluZSBMVFJlbGF5X2gKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3Vu
ZGF0aW9uLmg+Ci0KLUBwcm90b2NvbCBMVFJlbGF5RGVsZWdhdGUgPE5TT2JqZWN0PgotLSAodm9p
ZClkaWRDb25uZWN0OwotLSAodm9pZClkaWREaXNjb25uZWN0OwotLSAodm9pZClkaWRDcmFzaFdp
dGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2U7Ci0tICh2b2lkKWRpZFJlY2VpdmVTdGRvdXRE
YXRhOihOU0RhdGEgKilkYXRhOwotLSAodm9pZClkaWRSZWNlaXZlU3RkZXJyRGF0YTooTlNEYXRh
ICopZGF0YTsKLUBlbmQKLQotQHByb3RvY29sIExUUmVsYXkgPE5TT2JqZWN0LCBOU1N0cmVhbURl
bGVnYXRlPgotLSAodm9pZClzZXR1cDsKLS0gKHZvaWQpdGVhckRvd247Ci0tICh2b2lkKWNvbm5l
Y3Q7Ci0tICh2b2lkKWRpc2Nvbm5lY3Q7Ci1AcHJvcGVydHkgKHdlYWspIGlkPExUUmVsYXlEZWxl
Z2F0ZT4gcmVsYXlEZWxlZ2F0ZTsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNPdXRw
dXRTdHJlYW0gKm91dHB1dFN0cmVhbTsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlv
dXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJv
bGxlci5oCShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0
VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgTFRSZWxheUNvbnRyb2xsZXJfaAotI2RlZmluZSBMVFJl
bGF5Q29udHJvbGxlcl9oCi0KLSNpbXBvcnQgIkxUUmVsYXkuaCIKLQotI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLUBjbGFzcyBTaW1EZXZpY2U7Ci0KLUBpbnRlcmZhY2UgTFRS
ZWxheUNvbnRyb2xsZXIgOiBOU09iamVjdCA8TFRSZWxheURlbGVnYXRlPgotLSAoaWQpaW5pdFdp
dGhEZXZpY2U6KFNpbURldmljZSAqKWRldmljZSBwcm9kdWN0RGlyOihOU1N0cmluZyAqKXByb2R1
Y3REaXIgYXBwUGF0aDooTlNTdHJpbmcgKilhcHBQYXRoIGRldmljZVVESUQ6KE5TVVVJRCAqKXVk
aWQgZHVtcFRvb2xBcmd1bWVudHM6KE5TQXJyYXkgKilhcmd1bWVudHM7Ci0tICh2b2lkKXN0YXJ0
OwotLSAodm9pZClmaW5pc2g7Ci1AZW5kCi0KLSNlbmRpZgpJbmRleDogVG9vbHMvTGF5b3V0VGVz
dFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIu
bQkocmV2aXNpb24gMjA5ODg2KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RS
ZWxheS9MVFJlbGF5Q29udHJvbGxlci5tCShub25leGlzdGVudCkKQEAgLTEsMjcyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW1wb3J0ICJMVFJlbGF5Q29udHJvbGxlci5oIgotCi0jaW1wb3J0ICJD
b3JlU2ltdWxhdG9yU1BJLmgiCi0jaW1wb3J0ICJMVFBpcGVSZWxheS5oIgotI2ltcG9ydCA8QXBw
S2l0L0FwcEtpdC5oPgotI2ltcG9ydCA8Y3J0X2V4dGVybnMuaD4KLQotQGludGVyZmFjZSBMVFJl
bGF5Q29udHJvbGxlciAoKQotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBkaXNwYXRjaF9z
b3VyY2VfdCBzdGFuZGFyZElucHV0RGlzcGF0Y2hTb3VyY2U7Ci1AcHJvcGVydHkgKHJlYWRvbmx5
LCBzdHJvbmcpIE5TRmlsZUhhbmRsZSAqc3RhbmRhcmRPdXRwdXQ7Ci1AcHJvcGVydHkgKHJlYWRv
bmx5LCBzdHJvbmcpIE5TRmlsZUhhbmRsZSAqc3RhbmRhcmRFcnJvcjsKLUBwcm9wZXJ0eSAocmVh
ZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKmlwY0lkZW50aWZpZXI7Ci1AcHJvcGVydHkgKHJlYWRv
bmx5LCBzdHJvbmcpIE5TU3RyaW5nICphcHBCdW5kbGVJZGVudGlmaWVyOwotQHByb3BlcnR5IChy
ZWFkb25seSwgc3Ryb25nKSBOU1N0cmluZyAqYXBwUGF0aDsKLUBwcm9wZXJ0eSAocmVhZG9ubHks
IHN0cm9uZykgTlNVVUlEICpkZXZpY2VVRElEOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25n
KSBOU0FycmF5ICpkdW1wVG9vbEFyZ3VtZW50czsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9u
ZykgTlNTdHJpbmcgKnByb2R1Y3REaXI7Ci1AcHJvcGVydHkgKHN0cm9uZykgU2ltRGV2aWNlICpk
ZXZpY2U7Ci1AcHJvcGVydHkgKHN0cm9uZykgaWQ8TFRSZWxheT4gcmVsYXk7Ci1AcHJvcGVydHkg
cGlkX3QgcGlkOwotQHByb3BlcnR5IChzdHJvbmcpIGRpc3BhdGNoX3NvdXJjZV90IGFwcERpc3Bh
dGNoU291cmNlOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gTFRSZWxheUNvbnRyb2xsZXIKLQot
LSAoaWQpaW5pdFdpdGhEZXZpY2U6KFNpbURldmljZSAqKWRldmljZSBwcm9kdWN0RGlyOihOU1N0
cmluZyAqKXByb2R1Y3REaXIgYXBwUGF0aDooTlNTdHJpbmcgKilhcHBQYXRoIGRldmljZVVESUQ6
KE5TVVVJRCAqKXVkaWQgZHVtcFRvb2xBcmd1bWVudHM6KE5TQXJyYXkgKilhcmd1bWVudHMKLXsK
LSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKSB7Ci0gICAgICAgIF9kZXZpY2UgPSBkZXZp
Y2U7Ci0gICAgICAgIF9wcm9kdWN0RGlyID0gcHJvZHVjdERpcjsKLSAgICAgICAgX2FwcFBhdGgg
PSBhcHBQYXRoOwotICAgICAgICBfYXBwQnVuZGxlSWRlbnRpZmllciA9IFtbTlNCdW5kbGUgYnVu
ZGxlV2l0aFBhdGg6YXBwUGF0aF0gYnVuZGxlSWRlbnRpZmllcl07Ci0gICAgICAgIF9kZXZpY2VV
RElEID0gdWRpZDsKLSAgICAgICAgX2R1bXBUb29sQXJndW1lbnRzID0gYXJndW1lbnRzOwotICAg
ICAgICBfc3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNlID0gZGlzcGF0Y2hfc291cmNlX2NyZWF0
ZShESVNQQVRDSF9TT1VSQ0VfVFlQRV9SRUFELCBTVERJTl9GSUxFTk8sIDAsIGRpc3BhdGNoX2dl
dF9tYWluX3F1ZXVlKCkpOwotICAgICAgICBfc3RhbmRhcmRPdXRwdXQgPSBbTlNGaWxlSGFuZGxl
IGZpbGVIYW5kbGVXaXRoU3RhbmRhcmRPdXRwdXRdOwotICAgICAgICBfc3RhbmRhcmRFcnJvciA9
IFtOU0ZpbGVIYW5kbGUgZmlsZUhhbmRsZVdpdGhTdGFuZGFyZEVycm9yXTsKLQotICAgICAgICBk
aXNwYXRjaF9zb3VyY2Vfc2V0X2V2ZW50X2hhbmRsZXIoX3N0YW5kYXJkSW5wdXREaXNwYXRjaFNv
dXJjZSwgXnsKLSAgICAgICAgICAgIHVpbnQ4X3QgYnVmZmVyWzEwMjRdOwotICAgICAgICAgICAg
c3NpemVfdCBsZW4gPSByZWFkKFNURElOX0ZJTEVOTywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7
Ci0gICAgICAgICAgICBpZiAobGVuID4gMCkgewotICAgICAgICAgICAgICAgIEB0cnkgewotICAg
ICAgICAgICAgICAgICAgICBbW1tzZWxmIHJlbGF5XSBvdXRwdXRTdHJlYW1dIHdyaXRlOmJ1ZmZl
ciBtYXhMZW5ndGg6bGVuXTsKLSAgICAgICAgICAgICAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24g
KmUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQnJva2VuIHBpcGUgLSB0aGUgZHVtcCB0b29s
IGNyYXNoZWQuIFRpbWUgdG8gZGllLgotICAgICAgICAgICAgICAgICAgICBbc2VsZiBkaWRDcmFz
aFdpdGhNZXNzYWdlOm5pbF07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAvLyBFT0YgUmVjZWl2ZWQgb24gdGhlIHJlbGF5J3Mgc3RhbmRh
cmQgaW5wdXQuCi0gICAgICAgICAgICAgICAgW3NlbGYgZmluaXNoXTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSk7Ci0KLSAgICAgICAgX3JlbGF5ID0gW1tMVFBpcGVSZWxheSBhbGxvY10gaW5p
dFdpdGhQcmVmaXg6W0AiL3RtcCIgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OnNlbGYu
aXBjSWRlbnRpZmllcl1dOwotICAgICAgICBbX3JlbGF5IHNldFJlbGF5RGVsZWdhdGU6c2VsZl07
Ci0gICAgfQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChOU1N0cmluZyAqKWlwY0lkZW50aWZp
ZXIKLXsKLSAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQC0lQCIsIHNl
bGYuYXBwQnVuZGxlSWRlbnRpZmllciwgc2VsZi5kZXZpY2VVRElELlVVSURTdHJpbmddOwotfQot
Ci0tIChOU1N0cmluZyAqKXByb2Nlc3NOYW1lCi17Ci0gICAgcmV0dXJuIFtzZWxmLmFwcEJ1bmRs
ZUlkZW50aWZpZXIgY29tcG9uZW50c1NlcGFyYXRlZEJ5U3RyaW5nOkAiLiJdLmxhc3RPYmplY3Q7
Ci19Ci0KLS0gKHZvaWQpZGlkUmVjZWl2ZVN0ZG91dERhdGE6KE5TRGF0YSAqKWRhdGEKLXsKLSAg
ICBAdHJ5IHsKLSAgICAgICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0XSB3cml0ZURhdGE6ZGF0YV07
Ci0gICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRpb24pIHsKLSAgICAgICAgLy8gTlNG
aWxlSGFuZGxlT3BlcmF0aW9uRXhjZXB0aW9uCi0gICAgICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhl
IHRlc3QgaGFybmVzcyBzdG9wcGVkIGxpc3RlbmluZyB0byB1cywKLSAgICAgICAgLy8gcHJvYmFi
bHkgYmVjYXVzZSB3ZSB0aW1lZCBvdXQgb3IgYSBydW4gd2FzIGNhbmNlbGVkLgotICAgICAgICBl
eGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotfQotCi0tICh2b2lkKWRpZFJlY2VpdmVTdGRlcnJE
YXRhOihOU0RhdGEgKilkYXRhCi17Ci0gICAgQHRyeSB7Ci0gICAgICAgIFtbc2VsZiBzdGFuZGFy
ZEVycm9yXSB3cml0ZURhdGE6ZGF0YV07Ci0gICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNl
cHRpb24pIHsKLSAgICAgICAgLy8gTlNGaWxlSGFuZGxlT3BlcmF0aW9uRXhjZXB0aW9uCi0gICAg
ICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhlIHRlc3QgaGFybmVzcyBzdG9wcGVkIGxpc3RlbmluZyB0
byB1cywKLSAgICAgICAgLy8gcHJvYmFibHkgYmVjYXVzZSB3ZSB0aW1lZCBvdXQgb3IgYSBydW4g
d2FzIGNhbmNlbGVkLgotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotfQotCi0t
ICh2b2lkKWRpZERpc2Nvbm5lY3QKLXsKLSAgICBkaXNwYXRjaF9zdXNwZW5kKFtzZWxmIHN0YW5k
YXJkSW5wdXREaXNwYXRjaFNvdXJjZV0pOwotfQotCi0tICh2b2lkKWRpZENvbm5lY3QKLXsKLSAg
ICBkaXNwYXRjaF9yZXN1bWUoW3NlbGYgc3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNlXSk7Ci19
Ci0KLS0gKHZvaWQpZGlkQ3Jhc2hXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0g
ICAgW1tzZWxmIHJlbGF5XSBkaXNjb25uZWN0XTsKLSAgICBOU1N0cmluZyAqY3Jhc2hNZXNzYWdl
ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJcbiNDUkFTSEVEIC0gJUAgKHBpZCAlZClc
biIsIFtzZWxmIHByb2Nlc3NOYW1lXSwgW3NlbGYgcGlkXV07Ci0KLSAgICBpZiAobWVzc2FnZSkK
LSAgICAgICAgY3Jhc2hNZXNzYWdlID0gW2NyYXNoTWVzc2FnZSBzdHJpbmdCeUFwcGVuZGluZ0Zv
cm1hdDpAIiVAXG4iLCBtZXNzYWdlXTsKLQotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSB3cml0
ZURhdGE6W2NyYXNoTWVzc2FnZSBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGlu
Z11dOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSBjbG9zZUZpbGVdOwotICAgIFtbc2VsZiBz
dGFuZGFyZE91dHB1dF0gY2xvc2VGaWxlXTsKLSAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci19Ci0K
LS0gKHZvaWQpaW5zdGFsbEFwcAotewotICAgIE5TRGljdGlvbmFyeSAqaW5zdGFsbE9wdGlvbnMg
PSBAewotICAgICAgICAoTlNTdHJpbmcgKilrQ0ZCdW5kbGVJZGVudGlmaWVyS2V5OiBzZWxmLmFw
cEJ1bmRsZUlkZW50aWZpZXIsCi0gICAgfTsKLQotICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOwot
ICAgIEJPT0wgaW5zdGFsbGVkID0gW3NlbGYuZGV2aWNlIGluc3RhbGxBcHBsaWNhdGlvbjpbTlNV
UkwgZmlsZVVSTFdpdGhQYXRoOnNlbGYuYXBwUGF0aF0gd2l0aE9wdGlvbnM6aW5zdGFsbE9wdGlv
bnMgZXJyb3I6JmVycm9yXTsKLSAgICBpZiAoIWluc3RhbGxlZCkgewotICAgICAgICBOU0xvZyhA
IkNvdWxkbid0IGluc3RhbGwgJUA6ICVAIiwgc2VsZi5hcHBQYXRoLCBlcnJvci5kZXNjcmlwdGlv
bik7Ci0gICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpa2ls
bEFwcAotewotICAgIGRpc3BhdGNoX3NvdXJjZV90IGRpc3BhdGNoID0gW3NlbGYgYXBwRGlzcGF0
Y2hTb3VyY2VdOwotCi0gICAgaWYgKGRpc3BhdGNoKQotICAgICAgICBkaXNwYXRjaF9zb3VyY2Vf
Y2FuY2VsKGRpc3BhdGNoKTsKLQotICAgIGlmIChbc2VsZiBwaWRdID4gMSkgewotICAgICAgICBr
aWxsKHNlbGYucGlkLCBTSUdLSUxMKTsKLSAgICAgICAgW3NlbGYgc2V0UGlkOi0xXTsKLSAgICB9
Ci0gICAgW3NlbGYgc2V0QXBwRGlzcGF0Y2hTb3VyY2U6bmlsXTsKLX0KLQotLSAoTlNEaWN0aW9u
YXJ5ICopX2Vudmlyb25tZW50VmFyaWFibGVzCi17Ci0gICAgc3RhdGljIE5TRGljdGlvbmFyeSAq
ZW52aXJvbm1lbnRWYXJpYWJsZXM7Ci0gICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlOwot
Ci0gICAgZGlzcGF0Y2hfb25jZSgmb25jZSwgXnsKLSAgICAgICAgTlNTdHJpbmcgKnByb2R1Y3RE
aXJlY3RvcnkgPSBbc2VsZiBwcm9kdWN0RGlyXTsKLQotICAgICAgICBOU011dGFibGVEaWN0aW9u
YXJ5ICpkaWN0aW9uYXJ5ID0gW0B7Ci0gICAgICAgICAgICBAIklQQ19JREVOVElGSUVSIjogc2Vs
Zi5pcGNJZGVudGlmaWVyLAotICAgICAgICAgICAgQCJEWUxEX0ZSQU1FV09SS19QQVRIIjogcHJv
ZHVjdERpcmVjdG9yeSwKLSAgICAgICAgICAgIEAiX19YUENfRFlMRF9GUkFNRVdPUktfUEFUSCI6
IHByb2R1Y3REaXJlY3RvcnksCi0gICAgICAgICAgICBAIkRZTERfTElCUkFSWV9QQVRIIjogcHJv
ZHVjdERpcmVjdG9yeSwKLSAgICAgICAgICAgIEAiX19YUENfRFlMRF9MSUJSQVJZX1BBVEgiOiBw
cm9kdWN0RGlyZWN0b3J5LAotICAgICAgICB9IG11dGFibGVDb3B5XTsKLQotICAgICAgICBmb3Ig
KE5TU3RyaW5nICprZXlOYW1lIGluIEBbQCJEWUxEX0lOU0VSVF9MSUJSQVJJRVMiLCBAIk1hbGxv
Y1N0YWNrTG9nZ2luZyIsIEAiTE9DQUxfUkVTT1VSQ0VfUk9PVCIsIEAiRFVNUFJFTkRFUlRSRUVf
VEVNUCJdKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiB2YWx1ZSA9IGdldGVudihba2V5TmFt
ZSBVVEY4U3RyaW5nXSk7Ci0gICAgICAgICAgICBpZiAodmFsdWUgJiYgc3RybGVuKHZhbHVlKSkg
ewotICAgICAgICAgICAgICAgIE5TU3RyaW5nICpuc1ZhbHVlID0gW05TU3RyaW5nIHN0cmluZ1dp
dGhVVEY4U3RyaW5nOnZhbHVlXTsKLSAgICAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmpl
Y3Q6bnNWYWx1ZSBmb3JLZXk6a2V5TmFtZV07Ci0gICAgICAgICAgICAgICAgW2RpY3Rpb25hcnkg
c2V0T2JqZWN0Om5zVmFsdWUgZm9yS2V5OltAIl9fWFBDXyIgc3RyaW5nQnlBcHBlbmRpbmdTdHJp
bmc6a2V5TmFtZV1dOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChj
aGFyKiogZW52cCA9ICpfTlNHZXRFbnZpcm9uKCk7ICplbnZwOyBlbnZwKyspIHsKLSAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIGVudiA9ICplbnZwOwotICAgICAgICAgICAgaWYgKCFzdHJuY21wKCJK
U0NfIiwgZW52LCA0KSB8fCAhc3RybmNtcCgiX19YUENfSlNDXyIsIGVudiwgMTApKSB7Ci0gICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogZXF1YWwgPSBzdHJjaHIoZW52LCAnPScpOwotICAgICAg
ICAgICAgICAgIGlmICghZXF1YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgTlNMb2coQCJNaXNz
aW5nICc9JyBpbiBlbnYgdmFyICclcyciLCBlbnYpOwotICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3Qg
c2l6ZV90IG1heEtleUxlbmd0aCA9IDI1NjsKLSAgICAgICAgICAgICAgICBzaXplX3Qga2V5TGVu
Z3RoID0gZXF1YWwgLSBlbnY7Ci0gICAgICAgICAgICAgICAgaWYgKGtleUxlbmd0aCA+PSBtYXhL
ZXlMZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgTlNMb2coQCJFbnYgdmFyICclcycgaXMg
dG9vIGxvbmciLCBlbnYpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjaGFyIGtleVttYXhLZXlMZW5ndGhdOwotICAg
ICAgICAgICAgICAgIHN0cm5jcHkoa2V5LCBlbnYsIGtleUxlbmd0aCk7Ci0gICAgICAgICAgICAg
ICAga2V5W2tleUxlbmd0aF0gPSAnXDAnOwotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZh
bHVlID0gZXF1YWwgKyAxOwotCi0gICAgICAgICAgICAgICAgTlNTdHJpbmcgKm5zS2V5ID0gW05T
U3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmtleV07Ci0gICAgICAgICAgICAgICAgTlNTdHJp
bmcgKm5zVmFsdWUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6dmFsdWVdOwotICAg
ICAgICAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpuc1ZhbHVlIGZvcktleTpuc0tleV07
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBlbnZpcm9ubWVudFZhcmlhYmxl
cyA9IFtkaWN0aW9uYXJ5IGNvcHldOwotICAgIH0pOwotCi0gICAgcmV0dXJuIGVudmlyb25tZW50
VmFyaWFibGVzOwotfQotCi0tICh2b2lkKWxhdW5jaEFwcAotewotICAgIE5TRGljdGlvbmFyeSAq
bGF1bmNoT3B0aW9ucyA9IEB7Ci0gICAgICAgIGtTaW1EZXZpY2VMYXVuY2hBcHBsaWNhdGlvbkVu
dmlyb25tZW50OiBbc2VsZiBfZW52aXJvbm1lbnRWYXJpYWJsZXNdLAotICAgICAgICBrU2ltRGV2
aWNlTGF1bmNoQXBwbGljYXRpb25Bcmd1bWVudHM6IFtzZWxmIGR1bXBUb29sQXJndW1lbnRzXSwK
LSAgICB9OwotCi0gICAgTlNFcnJvciAqZXJyb3I7Ci0gICAgcGlkX3QgcGlkID0gW3NlbGYuZGV2
aWNlIGxhdW5jaEFwcGxpY2F0aW9uV2l0aElEOnNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciBvcHRp
b25zOmxhdW5jaE9wdGlvbnMgZXJyb3I6JmVycm9yXTsKLQotICAgIGlmIChwaWQgPCAwKSB7Ci0g
ICAgICAgIE5TTG9nKEAiQ291bGRuJ3QgbGF1bmNoICVAOiAlQCIsIHNlbGYuYXBwQnVuZGxlSWRl
bnRpZmllciwgZXJyb3IuZGVzY3JpcHRpb24pOwotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7
Ci0gICAgfQotCi0gICAgW3NlbGYgc2V0UGlkOnBpZF07Ci0KLSAgICBkaXNwYXRjaF9xdWV1ZV90
IHF1ZXVlID0gZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKTsKLSAgICBkaXNwYXRjaF9zb3VyY2Vf
dCBzaW11bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3VyY2UgPSBkaXNwYXRjaF9zb3VyY2VfY3JlYXRl
KERJU1BBVENIX1NPVVJDRV9UWVBFX1BST0MsIFtzZWxmIHBpZF0sIERJU1BBVENIX1BST0NfRVhJ
VCwgcXVldWUpOwotICAgIFtzZWxmIHNldEFwcERpc3BhdGNoU291cmNlOnNpbXVsYXRvckFwcEV4
aXREaXNwYXRjaFNvdXJjZV07Ci0gICAgZGlzcGF0Y2hfc291cmNlX3NldF9ldmVudF9oYW5kbGVy
KHNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSwgXnsKLSAgICAgICAgZGlzcGF0Y2hfc291
cmNlX2NhbmNlbChzaW11bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3VyY2UpOwotICAgICAgICBbc2Vs
ZiBkaWRDcmFzaFdpdGhNZXNzYWdlOm5pbF07Ci0gICAgfSk7Ci0gICAgZGlzcGF0Y2hfcmVzdW1l
KHNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSk7Ci19Ci0KLS0gKHZvaWQpc3RhcnQKLXsK
LSAgICBbc2VsZiBpbnN0YWxsQXBwXTsKLSAgICBbW3NlbGYgcmVsYXldIHNldHVwXTsKLSAgICBb
c2VsZiBsYXVuY2hBcHBdOwotICAgIFtbc2VsZiByZWxheV0gY29ubmVjdF07Ci19Ci0KLS0gKHZv
aWQpZmluaXNoCi17Ci0gICAgW1tzZWxmIHJlbGF5XSBkaXNjb25uZWN0XTsKLSAgICBbc2VsZiBr
aWxsQXBwXTsKLSAgICBleGl0KEVYSVRfU1VDQ0VTUyk7Ci19Ci0KLUBlbmQKSW5kZXg6IFRvb2xz
L0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvbWFpbi5tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvbWFpbi5tCShyZXZpc2lvbiAyMDk4
ODYpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L21haW4ubQkobm9u
ZXhpc3RlbnQpCkBAIC0xLDEzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAi
Q29yZVNpbXVsYXRvclNQSS5oIgotI2ltcG9ydCAiTFRSZWxheUNvbnRyb2xsZXIuaCIKLSNpbXBv
cnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi1zdGF0aWMgTFRSZWxheUNvbnRyb2xsZXIg
KnJlbGF5Q29udHJvbGxlcjsKLQotdm9pZCB1c2FnZSgpCi17Ci0gICAgTlNTdHJpbmcgKmhlbHBU
ZXh0ID0gQCJMYXlvdXRUZXN0UmVsYXk6IHJ1biBhIGR1bXAgdG9vbCBpbiB0aGUgc2ltdWxhdG9y
LiBOb3QgZm9yIGRpcmVjdCBjb25zdW1wdGlvbi5cbiIKLSAgICAgICAgIlVzYWdlOiBMYXlvdXRU
ZXN0UmVsYXkgWy1oXSBbb3B0aW9uc10gLS0gW2R1bXAgdG9vbCBhcmd1bWVudHNdXG4iCi0gICAg
ICAgICJSZXF1aXJlZCBvcHRpb25zOlxuIgotICAgICAgICAiICAgIC11ZGlkIDxpZGVudGlmaWVy
PiAgICAgICBTaW11bGF0b3IgZGV2aWNlIGlkZW50aWZpZXJcbiIKLSAgICAgICAgIiAgICAtYXBw
IDxhcHBfcGF0aD4gICAgICAgICAgUGF0aCB0byB0aGUgYnVpbHQgaU9TIC5hcHAgYnVuZGxlIGRp
cmVjdG9yeS5cbiIKLSAgICAgICAgIiAgICAtcHJvZHVjdERpciA8ZGlyPiAgICAgICAgL3BhdGgv
dG8vV2ViS2l0QnVpbGQve2NvbmZpZ3VyYXRpb259LXtzaG9ydCBwbGF0Zm9ybX0uXG4iOwotCi0g
ICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgW2hlbHBUZXh0IFVURjhTdHJpbmddKTsKLX0KLQot
TlNTdHJpbmcgKmdldFJlcXVpcmVkU3RyaW5nQXJndW1lbnQoTlNTdHJpbmcgKnBhcmFtZXRlcikK
LXsKLSAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRh
cmRVc2VyRGVmYXVsdHNdOwotICAgIE5TU3RyaW5nICphcmd1bWVudCA9IFtkZWZhdWx0cyBzdHJp
bmdGb3JLZXk6cGFyYW1ldGVyXTsKLQotICAgIGlmICghYXJndW1lbnQpIHsKLSAgICAgICAgTlNM
b2coQCItJUAgaXMgcmVxdWlyZWQuIiwgcGFyYW1ldGVyKTsKLSAgICAgICAgdXNhZ2UoKTsKLSAg
ICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0KLSAgICByZXR1cm4gYXJndW1lbnQ7Ci19
Ci0KLU5TQXJyYXkgKmdldER1bXBUb29sQXJndW1lbnRzKCkKLXsKLSAgICBOU011dGFibGVBcnJh
eSAqZHVtcFRvb2xBcmd1bWVudHMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKLSAg
ICBOU0FycmF5ICpwcm9jZXNzQXJncyA9IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gYXJn
dW1lbnRzXTsKLSAgICBCT09MIGFwcGVuZGluZyA9IE5POwotICAgIGZvciAoTlNTdHJpbmcgKmFy
ZyBpbiBwcm9jZXNzQXJncykgewotICAgICAgICBpZiAoW2FyZyBpc0VxdWFsVG9TdHJpbmc6QCIt
LSJdKSB7Ci0gICAgICAgICAgICBhcHBlbmRpbmcgPSBZRVM7Ci0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoYXBwZW5kaW5nKQotICAgICAgICAgICAgW2R1bXBU
b29sQXJndW1lbnRzIGFkZE9iamVjdDphcmddOwotICAgIH0KLSAgICByZXR1cm4gZHVtcFRvb2xB
cmd1bWVudHM7Ci19Ci0KLXZvaWQgZmluaXNoKCkKLXsKLSAgICBbcmVsYXlDb250cm9sbGVyIGZp
bmlzaF07Ci19Ci0KLXZvaWQgcmVjZWl2ZWRTaWduYWwoaW50IHNpZ25hbCkKLXsKLSAgICBleGl0
KEVYSVRfU1VDQ0VTUyk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICogYXJn
dltdKQotewotICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBOU0FycmF5ICpoZWxwQXJn
dW1lbnRzID0gQFtAIi1oIiwgQCItLWhlbHAiXTsKLSAgICAgICAgZm9yIChOU1N0cmluZyAqaGVs
cEFyZ3VtZW50IGluIGhlbHBBcmd1bWVudHMpIHsKLSAgICAgICAgICAgIGlmIChbW1tOU1Byb2Nl
c3NJbmZvIHByb2Nlc3NJbmZvXSBhcmd1bWVudHNdIGluZGV4T2ZPYmplY3Q6aGVscEFyZ3VtZW50
XSAhPSBOU05vdEZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgdXNhZ2UoKTsKLSAgICAgICAgICAg
ICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotI2lm
IFVTRV9TSU1fU0VSVklDRV9DT05URVhUCi0gICAgICAgIE5TU3RyaW5nICpkZXZlbG9wZXJEaXJl
Y3RvcnkgPSBnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAiZGV2ZWxvcGVyRGlyIik7Ci0jZW5k
aWYKLSAgICAgICAgTlNVVUlEICp1ZGlkID0gW1tOU1VVSUQgYWxsb2NdIGluaXRXaXRoVVVJRFN0
cmluZzpnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAidWRpZCIpXTsKLSAgICAgICAgTlNTdHJp
bmcgKmFwcFBhdGggPSBnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAiYXBwIik7Ci0gICAgICAg
IE5TU3RyaW5nICpwcm9kdWN0RGlyZWN0b3J5ID0gZ2V0UmVxdWlyZWRTdHJpbmdBcmd1bWVudChA
InByb2R1Y3REaXIiKTsKLSAgICAgICAgTlNBcnJheSAqZHVtcFRvb2xBcmd1bWVudHMgPSBnZXRE
dW1wVG9vbEFyZ3VtZW50cygpOwotCi0jaWYgVVNFX1NJTV9TRVJWSUNFX0NPTlRFWFQKLSAgICAg
ICAgTlNFcnJvciAqZXJyb3I7Ci0gICAgICAgIFNpbVNlcnZpY2VDb250ZXh0ICpzZXJ2aWNlQ29u
dGV4dCA9IFtTaW1TZXJ2aWNlQ29udGV4dCBzaGFyZWRTZXJ2aWNlQ29udGV4dEZvckRldmVsb3Bl
ckRpcjpkZXZlbG9wZXJEaXJlY3RvcnkgZXJyb3I6JmVycm9yXTsKLSAgICAgICAgaWYgKCFzZXJ2
aWNlQ29udGV4dCkgewotICAgICAgICAgICAgTlNMb2coQCJEZXZpY2UgY29udGV4dCBjb3VsZG4n
dCBiZSBmb3VuZDogJUAiLCBlcnJvcik7Ci0gICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7
Ci0gICAgICAgIH0KLSAgICAgICAgU2ltRGV2aWNlU2V0ICpkZXZpY2VTZXQgPSBbc2VydmljZUNv
bnRleHQgZGVmYXVsdERldmljZVNldFdpdGhFcnJvcjpuaWxdOwotICAgICAgICBpZiAoIWRldmlj
ZVNldCkgewotICAgICAgICAgICAgTlNMb2coQCJEZWZhdWx0IGRldmljZSBzZXQgY291bGRuJ3Qg
YmUgZm91bmQ6ICVAIiwgZXJyb3IpOwotICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwot
ICAgICAgICB9Ci0gICAgICAgIFNpbURldmljZSAqZGV2aWNlID0gW2RldmljZVNldC5kZXZpY2Vz
QnlVRElEIG9iamVjdEZvcktleTp1ZGlkXTsKLSNlbHNlCi0gICAgICAgIFNpbURldmljZSAqZGV2
aWNlID0gW1NpbURldmljZVNldC5kZWZhdWx0U2V0LmRldmljZXNCeVVESUQgb2JqZWN0Rm9yS2V5
OnVkaWRdOwotI2VuZGlmCi0gICAgICAgIGlmICghZGV2aWNlKSB7Ci0gICAgICAgICAgICBOU0xv
ZyhAIkRldmljZSAlQCBjb3VsZG4ndCBiZSBmb3VuZCIsIHVkaWQpOwotICAgICAgICAgICAgZXhp
dChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVsYXlDb250cm9sbGVyID0g
W1tMVFJlbGF5Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhEZXZpY2U6ZGV2aWNlIHByb2R1Y3RE
aXI6cHJvZHVjdERpcmVjdG9yeSBhcHBQYXRoOmFwcFBhdGggZGV2aWNlVURJRDp1ZGlkIGR1bXBU
b29sQXJndW1lbnRzOmR1bXBUb29sQXJndW1lbnRzXTsKLSAgICAgICAgW3JlbGF5Q29udHJvbGxl
ciBzdGFydF07Ci0KLSAgICAgICAgYXRleGl0KGZpbmlzaCk7Ci0gICAgICAgIHNpZ25hbChTSUdJ
TlQsIHJlY2VpdmVkU2lnbmFsKTsKLSAgICAgICAgc2lnbmFsKFNJR1RFUk0sIHJlY2VpdmVkU2ln
bmFsKTsKLQotICAgICAgICBbW05TUnVuTG9vcCBtYWluUnVuTG9vcF0gcnVuXTsKLSAgICB9Ci0g
ICAgcmV0dXJuIDA7Ci19CkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJl
bGF5Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0
VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAyMDk4ODYpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMDIgKzAsMCBAQAot
Ly8gISQqVVRGOCokIQotewotCWFyY2hpdmVWZXJzaW9uID0gMTsKLQljbGFzc2VzID0gewotCX07
Ci0Jb2JqZWN0VmVyc2lvbiA9IDQ2OwotCW9iamVjdHMgPSB7Ci0KLS8qIEJlZ2luIFBCWEJ1aWxk
RmlsZSBzZWN0aW9uICovCi0JCTJFOEQzRUY4MTk4ODFENDMwMDRGNkNDMiAvKiBtYWluLm0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRThEM0VGNzE5ODgx
RDQzMDA0RjZDQzIgLyogbWFpbi5tICovOyB9OwotCQkyRThEM0YwMjE5ODgxRkQwMDA0RjZDQzIg
LyogTFRQaXBlUmVsYXkubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJFOEQzRjAxMTk4ODFGRDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5tICovOyB9Owot
CQkyRThEM0YwNjE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIubSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOEQzRjA1MTk4ODI0MDYw
MDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5tICovOyB9OwotLyogRW5kIFBCWEJ1aWxkRmls
ZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWENvcHlGaWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAq
LwotCQkyRThEM0VGMjE5ODgxRDQzMDA0RjZDQzIgLyogQ29weUZpbGVzICovID0gewotCQkJaXNh
ID0gUEJYQ29weUZpbGVzQnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2
NDc7Ci0JCQlkc3RQYXRoID0gL3Vzci9zaGFyZS9tYW4vbWFuMS87Ci0JCQlkc3RTdWJmb2xkZXJT
cGVjID0gMDsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAxOwotCQl9OwotLyogRW5kIFBCWENvcHlGaWxlc0J1aWxkUGhhc2Ugc2Vj
dGlvbiAqLwotCi0vKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KLQkJMkU4RDNF
RjQxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxl
IjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gTGF5b3V0VGVzdFJlbGF5OyBzb3VyY2VUcmVl
ID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQkyRThEM0VGNzE5ODgxRDQzMDA0RjZDQzIgLyog
bWFpbi5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLm9iamM7IHBhdGggPSBtYWluLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lnhj
Y29uZmlnOyBuYW1lID0gRGVidWdSZWxlYXNlLnhjY29uZmlnOyBwYXRoID0gQ29uZmlndXJhdGlv
bnMvRGVidWdSZWxlYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQky
RThEM0VGRjE5ODgxRTI1MDA0RjZDQzIgLyogQmFzZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IG5hbWUgPSBC
YXNlLnhjY29uZmlnOyBwYXRoID0gQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZzsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDAxOTg4MUYyOTAwNEY2Q0MyIC8qIExUUmVs
YXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTFRSZWxheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkyRThEM0YwMTE5ODgxRkQwMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkubSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gTFRQaXBlUmVsYXkubTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDMxOTg4MUZFMjAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExUUGlwZVJlbGF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTJFOEQzRjA0MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMVFJlbGF5Q29udHJvbGxlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0YwNTE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxh
eUNvbnRyb2xsZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gTFRSZWxh
eUNvbnRyb2xsZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0UxRkJDMTUxQjI5
MEU3OTAwMDEzNkY1IC8qIENvcmVTaW11bGF0b3JTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29yZVNpbXVsYXRvclNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhGcmFt
ZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0JCTJFOEQzRUYxMTk4ODFENDMwMDRGNkNDMiAv
KiBGcmFtZXdvcmtzICovID0gewotCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7Ci0J
CQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07Ci0vKiBFbmQgUEJY
RnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhHcm91cCBzZWN0
aW9uICovCi0JCTJFOEQzRUVCMTk4ODFENDMwMDRGNkNDMiA9IHsKLQkJCWlzYSA9IFBCWEdyb3Vw
OwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMkU4RDNFRkYxOTg4MUUyNTAwNEY2Q0MyIC8qIEJhc2Uu
eGNjb25maWcgKi8sCi0JCQkJMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFz
ZS54Y2NvbmZpZyAqLywKLQkJCQkyRThEM0VGNjE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVz
dFJlbGF5ICovLAotCQkJCTJFOEQzRUY1MTk4ODFENDMwMDRGNkNDMiAvKiBQcm9kdWN0cyAqLywK
LQkJCSk7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQkyRThEM0VGNTE5ODgx
RDQzMDA0RjZDQzIgLyogUHJvZHVjdHMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNo
aWxkcmVuID0gKAotCQkJCTJFOEQzRUY0MTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVs
YXkgKi8sCi0JCQkpOwotCQkJbmFtZSA9IFByb2R1Y3RzOwotCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKLQkJfTsKLQkJMkU4RDNFRjYxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxh
eSAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMkU4RDNF
RjcxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSAqLywKLQkJCQlDRTFGQkMxNTFCMjkwRTc5MDAw
MTM2RjUgLyogQ29yZVNpbXVsYXRvclNQSS5oICovLAotCQkJCTJFOEQzRjAwMTk4ODFGMjkwMDRG
NkNDMiAvKiBMVFJlbGF5LmggKi8sCi0JCQkJMkU4RDNGMDExOTg4MUZEMDAwNEY2Q0MyIC8qIExU
UGlwZVJlbGF5Lm0gKi8sCi0JCQkJMkU4RDNGMDMxOTg4MUZFMjAwNEY2Q0MyIC8qIExUUGlwZVJl
bGF5LmggKi8sCi0JCQkJMkU4RDNGMDQxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9s
bGVyLmggKi8sCi0JCQkJMkU4RDNGMDUxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9s
bGVyLm0gKi8sCi0JCQkpOwotCQkJcGF0aCA9IExheW91dFRlc3RSZWxheTsKLQkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0vKiBFbmQgUEJYR3JvdXAgc2VjdGlvbiAqLwotCi0vKiBC
ZWdpbiBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLwotCQkyRThEM0VGMzE5ODgxRDQzMDA0RjZD
QzIgLyogTGF5b3V0VGVzdFJlbGF5ICovID0gewotCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0Owot
CQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDJFOEQzRUZCMTk4ODFENDMwMDRGNkNDMiAvKiBC
dWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiTGF5b3V0VGVzdFJl
bGF5IiAqLzsKLQkJCWJ1aWxkUGhhc2VzID0gKAotCQkJCTJFOEQzRUYwMTk4ODFENDMwMDRGNkND
MiAvKiBTb3VyY2VzICovLAotCQkJCTJFOEQzRUYxMTk4ODFENDMwMDRGNkNDMiAvKiBGcmFtZXdv
cmtzICovLAotCQkJCTJFOEQzRUYyMTk4ODFENDMwMDRGNkNDMiAvKiBDb3B5RmlsZXMgKi8sCi0J
CQkpOwotCQkJYnVpbGRSdWxlcyA9ICgKLQkJCSk7Ci0JCQlkZXBlbmRlbmNpZXMgPSAoCi0JCQkp
OwotCQkJbmFtZSA9IExheW91dFRlc3RSZWxheTsKLQkJCXByb2R1Y3ROYW1lID0gTGF5b3V0VGVz
dFJlbGF5OwotCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDJFOEQzRUY0MTk4ODFENDMwMDRGNkNDMiAv
KiBMYXlvdXRUZXN0UmVsYXkgKi87Ci0JCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVj
dC10eXBlLnRvb2wiOwotCQl9OwotLyogRW5kIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCi0K
LS8qIEJlZ2luIFBCWFByb2plY3Qgc2VjdGlvbiAqLwotCQkyRThEM0VFQzE5ODgxRDQzMDA0RjZD
QzIgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7Ci0JCQlpc2EgPSBQQlhQcm9qZWN0OwotCQkJYXR0
cmlidXRlcyA9IHsKLQkJCQlMYXN0VXBncmFkZUNoZWNrID0gMDYwMDsKLQkJCQlPUkdBTklaQVRJ
T05OQU1FID0gIkFwcGxlLCBJbmMuIjsKLQkJCQlUYXJnZXRBdHRyaWJ1dGVzID0gewotCQkJCQky
RThEM0VGMzE5ODgxRDQzMDA0RjZDQzIgPSB7Ci0JCQkJCQlDcmVhdGVkT25Ub29sc1ZlcnNpb24g
PSA2LjA7Ci0JCQkJCX07Ci0JCQkJfTsKLQkJCX07Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0
ID0gMkU4RDNFRUYxOTg4MUQ0MzAwNEY2Q0MyIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBm
b3IgUEJYUHJvamVjdCAiTGF5b3V0VGVzdFJlbGF5IiAqLzsKLQkJCWNvbXBhdGliaWxpdHlWZXJz
aW9uID0gIlhjb2RlIDMuMiI7Ci0JCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7Ci0JCQlo
YXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMDsKLQkJCWtub3duUmVnaW9ucyA9ICgKLQkJCQllbiwK
LQkJCSk7Ci0JCQltYWluR3JvdXAgPSAyRThEM0VFQjE5ODgxRDQzMDA0RjZDQzI7Ci0JCQlwcm9k
dWN0UmVmR3JvdXAgPSAyRThEM0VGNTE5ODgxRDQzMDA0RjZDQzIgLyogUHJvZHVjdHMgKi87Ci0J
CQlwcm9qZWN0RGlyUGF0aCA9ICIiOwotCQkJcHJvamVjdFJvb3QgPSAiIjsKLQkJCXRhcmdldHMg
PSAoCi0JCQkJMkU4RDNFRjMxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLywK
LQkJCSk7Ci0JCX07Ci0vKiBFbmQgUEJYUHJvamVjdCBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBC
WFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjAxOTg4MUQ0MzAwNEY2Q0My
IC8qIFNvdXJjZXMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKLQkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCQkyRThEM0YwNjE5
ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIubSBpbiBTb3VyY2VzICovLAotCQkJ
CTJFOEQzRUY4MTk4ODFENDMwMDRGNkNDMiAvKiBtYWluLm0gaW4gU291cmNlcyAqLywKLQkJCQky
RThEM0YwMjE5ODgxRkQwMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkubSBpbiBTb3VyY2VzICovLAot
CQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9Owot
LyogRW5kIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gWENCdWls
ZENvbmZpZ3VyYXRpb24gc2VjdGlvbiAqLwotCQkyRThEM0VGOTE5ODgxRDQzMDA0RjZDQzIgLyog
RGVidWcgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25m
aWd1cmF0aW9uUmVmZXJlbmNlID0gMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVs
ZWFzZS54Y2NvbmZpZyAqLzsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQl9OwotCQkJbmFtZSA9
IERlYnVnOwotCQl9OwotCQkyRThEM0VGQTE5ODgxRDQzMDA0RjZDQzIgLyogUmVsZWFzZSAqLyA9
IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25S
ZWZlcmVuY2UgPSAyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29u
ZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsK
LQkJfTsKLQkJMkU4RDNFRkMxOTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICovID0gewotCQkJaXNh
ID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9
IDJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi87Ci0J
CQlidWlsZFNldHRpbmdzID0gewotCQkJCVBST0RVQ1RfTkFNRSA9ICIkKFRBUkdFVF9OQU1FKSI7
Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVnOwotCQl9OwotCQkyRThEM0VGRDE5ODgxRDQzMDA0RjZD
QzIgLyogUmVsZWFzZSAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJ
YmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyog
RGVidWdSZWxlYXNlLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlQUk9E
VUNUX05BTUUgPSAiJChUQVJHRVRfTkFNRSkiOwotCQkJfTsKLQkJCW5hbWUgPSBSZWxlYXNlOwot
CQl9OwotLyogRW5kIFhDQnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24gKi8KLQotLyogQmVnaW4g
WENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCi0JCTJFOEQzRUVGMTk4ODFENDMwMDRGNkND
MiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIkxheW91dFRlc3RS
ZWxheSIgKi8gPSB7Ci0JCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVpbGRDb25m
aWd1cmF0aW9ucyA9ICgKLQkJCQkyRThEM0VGOTE5ODgxRDQzMDA0RjZDQzIgLyogRGVidWcgKi8s
Ci0JCQkJMkU4RDNFRkExOTg4MUQ0MzAwNEY2Q0MyIC8qIFJlbGVhc2UgKi8sCi0JCQkpOwotCQkJ
ZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRp
b25OYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJMkU4RDNFRkIxOTg4MUQ0MzAwNEY2Q0MyIC8qIEJ1
aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJMYXlvdXRUZXN0UmVs
YXkiICovID0gewotCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKLQkJCWJ1aWxkQ29uZmln
dXJhdGlvbnMgPSAoCi0JCQkJMkU4RDNFRkMxOTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICovLAot
CQkJCTJFOEQzRUZEMTk4ODFENDMwMDRGNkNDMiAvKiBSZWxlYXNlICovLAotCQkJKTsKLQkJCWRl
ZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9u
TmFtZSA9IFJlbGVhc2U7Ci0JCX07Ci0vKiBFbmQgWENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9u
ICovCi0JfTsKLQlyb290T2JqZWN0ID0gMkU4RDNFRUMxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2pl
Y3Qgb2JqZWN0ICovOwotfQpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RS
ZWxheS54Y29kZXByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91
dFRlc3RSZWxheS54Y29kZXByb2oJKHJldmlzaW9uIDIwOTg4NikKKysrIFRvb2xzL0xheW91dFRl
c3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVwcm9qCShub25leGlzdGVudCkKClByb3BlcnR5
IGNoYW5nZXMgb246IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVw
cm9qCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmlnbm9yZQojIyAtMSwyICswLDAgIyMKLXByb2pl
Y3QueGN3b3Jrc3BhY2UKLXhjdXNlcmRhdGEKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9N
YWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvTWFrZWZpbGUJKHJl
dmlzaW9uIDIwOTg4NikKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9NYWtlZmlsZQkobm9uZXhp
c3RlbnQpCkBAIC0xLDYgKzAsMCBAQAotU0NSSVBUU19QQVRIID0gLi4vU2NyaXB0cwotCi1PVkVS
UklERV9BUkNIUyA9IGRlZmF1bHQKLU9WRVJSSURFX1NES1JPT1QgPSBkZWZhdWx0Ci0KLWluY2x1
ZGUgLi4vLi4vTWFrZWZpbGUuc2hhcmVkCkluZGV4OiBUb29scy9NYWtlZmlsZQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9NYWtlZmlsZQkocmV2aXNpb24gMjA5ODg2KQorKysgVG9vbHMvTWFrZWZpbGUJ
KHdvcmtpbmcgY29weSkKQEAgLTcsOSArNyw2IEBAIGlmbmVxICgsJChTREtST09UKSkKIAlpZm5l
cSAoLCQoZmluZHN0cmluZyBpcGhvbmUsJChTREtST09UKSkpCiAJCU1PRFVMRVMgKz0gTW9iaWxl
TWluaUJyb3dzZXIKIAllbmRpZgotCWlmZXEgKCwkKERPX05PVF9CVUlMRF9MQVlPVVRfVEVTVF9S
RUxBWSkpCi0JCU1PRFVMRVMgKz0gTGF5b3V0VGVzdFJlbGF5Ci0JZW5kaWYKIGVuZGlmCiAKIGFs
bDoKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJl
bmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA5ODg2KQorKysg
VG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksNyBAQAogCQkyQ0U4OEZBMjE3MTI0RDhD
MDA3MzRGQzAgLyogSmF2YVNjcmlwdFRocmVhZGluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQ0U4OEZBMTE3MTI0Q0VFMDA3MzRGQzAgLyogSmF2
YVNjcmlwdFRocmVhZGluZy5jcHAgKi87IH07CiAJCTJENDAzRjFCMTUwODcyMDkwMDUzNThEMiAv
KiBMYXlvdXRUZXN0SGVscGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRDQwM0VBMjE1MDg3MTQyMDA1MzU4RDIgLyogTGF5b3V0VGVzdEhlbHBlci5t
ICovOyB9OwogCQkzMTExN0IzRDE1RDlBNTZBMDAxNjNCQzggLyogTW9ja1dlYk5vdGlmaWNhdGlv
blByb3ZpZGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzExMTdCM0IxNUQ5QTU2QTAwMTYzQkM4IC8qIE1vY2tXZWJOb3RpZmljYXRpb25Qcm92aWRl
ci5tbSAqLzsgfTsKKwkJMzFCMDlDQzgxRTAzMzVGMTAwNkY0RTREIC8qIHVuaXhMb2dnaW5nUGlw
ZXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUIw
OUNDNzFFMDMzNUVCMDA2RjRFNEQgLyogdW5peExvZ2dpbmdQaXBlcy5tbSAqLzsgfTsKIAkJNDQw
NTkwNzExMjY4NDUzODAwQ0ZENDhEIC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9ydE1hYy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MDU5MDcwMTI2ODQ1
MzgwMENGRDQ4RCAvKiBXZWJBcmNoaXZlRHVtcFN1cHBvcnRNYWMubW0gKi87IH07CiAJCTQ0Mzc3
MzBFMTI1Q0JDMzYwMEFBRTAyQyAvKiBXZWJBcmNoaXZlRHVtcFN1cHBvcnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDRBOTk3ODMwRkNERTg2NDAw
NTgwRjEwIC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9ydC5jcHAgKi87IH07CiAJCTQ0NjRDQUJFMUMy
MEEwOEIwMEU1QkI1NSAvKiBEdW1wUmVuZGVyVHJlZUFwcE1haW4ubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDY0Q0FCRDFDMjBBMDcwMDBFNUJCNTUg
LyogRHVtcFJlbmRlclRyZWVBcHBNYWluLm1tICovOyB9OwpAQCAtMjkzLDYgKzI5NCw4IEBACiAJ
CTJENDAzRjE5MTUwODcxRjkwMDUzNThEMiAvKiBMYXlvdXRUZXN0SGVscGVyICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4
ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBMYXlvdXRUZXN0SGVscGVyOyBz
b3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQkzMTExN0IzQTE1RDlBNTZBMDAx
NjNCQzggLyogTW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IE1vY2tXZWJOb3RpZmljYXRpb25Qcm92aWRlci5oOyBwYXRoID0gbWFj
L01vY2tXZWJOb3RpZmljYXRpb25Qcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzMTExN0IzQjE1RDlBNTZBMDAxNjNCQzggLyogTW9ja1dlYk5vdGlmaWNhdGlvblByb3Zp
ZGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gTW9ja1dlYk5v
dGlmaWNhdGlvblByb3ZpZGVyLm1tOyBwYXRoID0gbWFjL01vY2tXZWJOb3RpZmljYXRpb25Qcm92
aWRlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzFCMDlDQzYxRTAzMzVFQjAw
NkY0RTREIC8qIHVuaXhMb2dnaW5nUGlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gdW5peExvZ2dpbmdQaXBlcy5oOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJlZC91bml4
TG9nZ2luZ1BpcGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxQjA5Q0M3MUUw
MzM1RUIwMDZGNEU0RCAvKiB1bml4TG9nZ2luZ1BpcGVzLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBuYW1lID0gdW5peExvZ2dpbmdQaXBlcy5tbTsgcGF0aCA9IC4uL1Rlc3RS
dW5uZXJTaGFyZWQvdW5peExvZ2dpbmdQaXBlcy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMzJBNzBBQUIwMzcwNUUxRjAwQzkxNzgzIC8qIER1bXBSZW5kZXJUcmVlUHJlZml4Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IER1bXBSZW5kZXJUcmVlUHJlZml4Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NUYwOTcxMERBQzNDQjYwMEM4QjRFNSAv
KiBXZWJLaXRXZWlnaHRXYXRjaGVyMTAwLnR0ZiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IG5hbWUgPSBXZWJLaXRXZWlnaHRXYXRjaGVyMTAw
LnR0ZjsgcGF0aCA9IGZvbnRzL1dlYktpdFdlaWdodFdhdGNoZXIxMDAudHRmOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzNzVGMDk3MjBEQUMzQ0I2MDBDOEI0RTUgLyogV2ViS2l0V2Vp
Z2h0V2F0Y2hlcjIwMC50dGYgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBmaWxlOyBuYW1lID0gV2ViS2l0V2VpZ2h0V2F0Y2hlcjIwMC50dGY7IHBhdGgg
PSBmb250cy9XZWJLaXRXZWlnaHRXYXRjaGVyMjAwLnR0Zjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTQ3Myw2ICs0NzYsNyBAQAogCQkwOEZCNzc5NEZFODQxNTVEQzAyQUFDMDcgLyog
RHVtcFJlbmRlclRyZWUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAorCQkJCTMxQjA5Q0M1MUUwMzM1RDAwMDZGNEU0RCAvKiBUZXN0UnVubmVyU2hhcmVkICovLAog
CQkJCTBGMThFNkYxMUQ2QjlDNjQwMDI3RTU0NyAvKiBEZXJpdmVkU291cmNlcy5tYWtlICovLAog
CQkJCTBGMThFNkU3MUQ2QjlCRjUwMDI3RTU0NyAvKiBVSVNjcmlwdENvbnRleHQgKi8sCiAJCQkJ
QTExNThENkExODkyN0NFMTAwODhDMTdCIC8qIGlvcyAqLywKQEAgLTcwMCw2ICs3MDQsMTUgQEAK
IAkJCW5hbWUgPSBMYXlvdXRUZXN0SGVscGVyOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
IAkJfTsKKwkJMzFCMDlDQzUxRTAzMzVEMDAwNkY0RTREIC8qIFRlc3RSdW5uZXJTaGFyZWQgKi8g
PSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTMxQjA5Q0M2MUUw
MzM1RUIwMDZGNEU0RCAvKiB1bml4TG9nZ2luZ1BpcGVzLmggKi8sCisJCQkJMzFCMDlDQzcxRTAz
MzVFQjAwNkY0RTREIC8qIHVuaXhMb2dnaW5nUGlwZXMubW0gKi8sCisJCQkpOworCQkJbmFtZSA9
IFRlc3RSdW5uZXJTaGFyZWQ7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk0
MTdEQTkxODEzNzM2NzREMDA3QzU3RkIgLyogV2ViQ29yZVRlc3RTdXBwb3J0ICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTExNTgsNiArMTE3MSw3IEBACiAJ
CQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCiAJCQkJNDQ2NENB
QkUxQzIwQTA4QjAwRTVCQjU1IC8qIER1bXBSZW5kZXJUcmVlQXBwTWFpbi5tbSBpbiBTb3VyY2Vz
ICovLAorCQkJCTMxQjA5Q0M4MUUwMzM1RjEwMDZGNEU0RCAvKiB1bml4TG9nZ2luZ1BpcGVzLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRl
clRyZWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5k
ZXJUcmVlLm1tCShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
RHVtcFJlbmRlclRyZWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwMyw2ICsxMDMsNyBAQAogI2lm
IFBMQVRGT1JNKElPUykKICNpbXBvcnQgIkR1bXBSZW5kZXJUcmVlQnJvd3NlclZpZXcuaCIKICNp
bXBvcnQgIlVJS2l0U1BJLmgiCisjaW1wb3J0ICJ1bml4TG9nZ2luZ1BpcGVzLmgiCiAjaW1wb3J0
IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ29yZUdyYXBoaWNz
U1BJLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0FLV2luZG93Lmg+CkBAIC0xMjcyLDE3ICsxMjczLDcg
QEAgdm9pZCB3cml0ZUNyYXNoZWRNZXNzYWdlT25GYXRhbEVycm9yKGludAogdm9pZCBkdW1wUmVu
ZGVyVHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdKQogewogI2lmIFBMQVRGT1JNKElP
UykKLSAgICBjb25zdCBjaGFyKiBpZGVudGlmaWVyID0gZ2V0ZW52KCJJUENfSURFTlRJRklFUiIp
OwotICAgIGNvbnN0IGNoYXIgKnN0ZGluUGF0aCA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAIi90bXAvJXNfSU4iLCBpZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsKLSAgICBjb25zdCBjaGFy
ICpzdGRvdXRQYXRoID0gW1tOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiL3RtcC8lc19PVVQi
LCBpZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsKLSAgICBjb25zdCBjaGFyICpzdGRlcnJQYXRoID0g
W1tOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiL3RtcC8lc19FUlJPUiIsIGlkZW50aWZpZXJd
IFVURjhTdHJpbmddOwotCi0gICAgaW50IGluZmQgPSBvcGVuKHN0ZGluUGF0aCwgT19SRFdSKTsK
LSAgICBkdXAyKGluZmQsIFNURElOX0ZJTEVOTyk7Ci0gICAgaW50IG91dGZkID0gb3BlbihzdGRv
dXRQYXRoLCBPX1JEV1IpOwotICAgIGR1cDIob3V0ZmQsIFNURE9VVF9GSUxFTk8pOwotICAgIGlu
dCBlcnJmZCA9IG9wZW4oc3RkZXJyUGF0aCwgT19SRFdSIHwgT19OT05CTE9DSyk7Ci0gICAgZHVw
MihlcnJmZCwgU1RERVJSX0ZJTEVOTyk7CisgICAgV1RSOjpzZXR1cFVuaXhMb2dnaW5nUGlwZXMo
KTsKICNlbmRpZgogCiAgICAgc2lnbmFsKFNJR0lMTCwgJndyaXRlQ3Jhc2hlZE1lc3NhZ2VPbkZh
dGFsRXJyb3IpOwpAQCAtMTM0Myw5ICsxMzM0LDcgQEAgdm9pZCBkdW1wUmVuZGVyVHJlZShpbnQg
YXJnYywgY29uc3QgY2hhcgogICAgIH0KIAogI2lmIFBMQVRGT1JNKElPUykKLSAgICBjbG9zZShp
bmZkKTsKLSAgICBjbG9zZShvdXRmZCk7Ci0gICAgY2xvc2UoZXJyZmQpOworICAgIFdUUjo6dGVh
cmRvd25Vbml4TG9nZ2luZ1BpcGVzKCk7CiAjZW5kaWYKIH0KIApJbmRleDogVG9vbHMvTGF5b3V0
VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcJKHJldmlzaW9u
IDIwOTg4NikKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9CYXNlLnhj
Y29uZmlnCShub25leGlzdGVudCkKQEAgLTEsNjggKzAsMCBAQAotLy8gQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vCi0vLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotLy8gYXJlIG1ldDoKLS8vIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotLy8gICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS8vCi0vLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLS8v
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0vLyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLS8vIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0vLyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLS8vIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLS8vIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotLy8gUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotLy8gT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlICIuLi8uLi8uLi8uLi9JbnRlcm5hbC9Db25maWd1
cmF0aW9ucy9IYXZlSW50ZXJuYWxTREsueGNjb25maWciCi0KLVVTRV9JTlRFUk5BTF9TREsgPSAk
KFVTRV9JTlRFUk5BTF9TREtfJChDT05GSUdVUkFUSU9OKSk7Ci1VU0VfSU5URVJOQUxfU0RLX1By
b2R1Y3Rpb24gPSBZRVM7Ci1VU0VfSU5URVJOQUxfU0RLX0RlYnVnID0gJChIQVZFX0lOVEVSTkFM
X1NESyk7Ci1VU0VfSU5URVJOQUxfU0RLX1JlbGVhc2UgPSAkKEhBVkVfSU5URVJOQUxfU0RLKTsK
LQotQ0xBTkdfQ1hYX0xBTkdVQUdFX1NUQU5EQVJEID0gZ251KysweDsKLUNMQU5HX0VOQUJMRV9P
QkpDX0FSQyA9IFlFUzsKLUNMQU5HX1dBUk5fQ1hYMFhfRVhURU5TSU9OUyA9IE5POwotSEVBREVS
X1NFQVJDSF9QQVRIUyA9ICQoQlVJTFRfUFJPRFVDVFNfRElSKS91c3IvbG9jYWwvaW5jbHVkZSAk
KFdFQkNPUkVfUFJJVkFURV9IRUFERVJTX0RJUikvRm9yd2FyZGluZ0hlYWRlcnMgJChTUkNST09U
KS8uLi8uLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1ICQoTkVYVF9ST09UKS91c3IvbG9jYWwv
aW5jbHVkZS9XZWJDb3JlVGVzdFN1cHBvcnQ7Ci1HQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05T
ID0gJChERUJVR19ERUZJTkVTKSBFTkFCTEVfREFTSEJPQVJEX1NVUFBPUlQ7Ci1ERUJVR19JTkZP
Uk1BVElPTl9GT1JNQVQgPSBkd2FyZi13aXRoLWRzeW07Ci1QUkVCSU5ESU5HID0gTk8KLUdDQ19D
X0xBTkdVQUdFX1NUQU5EQVJEID0gZ251OTkKLUdDQ19FTkFCTEVfQ1BQX0VYQ0VQVElPTlMgPSBO
TzsKLUdDQ19FTkFCTEVfQ1BQX1JUVEkgPSBOTzsKLUdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFE
RVIgPSBZRVMKLUdDQ19UUkVBVF9XQVJOSU5HU19BU19FUlJPUlMgPSBZRVMKLUdDQ19WRVJTSU9O
ID0gY29tLmFwcGxlLmNvbXBpbGVycy5sbHZtLmNsYW5nLjFfMDsKLUdDQ19XQVJOX0FCT1VUX0RF
UFJFQ0FURURfRlVOQ1RJT05TID0gTk8KLUdDQ19XQVJOX1VOVVNFRF9GVU5DVElPTiA9IFlFUwot
R0NDX1dBUk5fVU5VU0VEX1ZBUklBQkxFID0gWUVTCi1HQ0NfV0FSTl82NF9UT18zMl9CSVRfQ09O
VkVSU0lPTlthcmNoPXg4Nl82NF0gPSBOTzsKLVdBUk5JTkdfQ0ZMQUdTID0gLVdhbGwgLVcgLVdu
by11bnVzZWQtcGFyYW1ldGVyIC1XdW5kZWYKLQotREVCVUdfREVGSU5FU19kZWJ1ZyA9IDsKLURF
QlVHX0RFRklORVNfbm9ybWFsID0gTkRFQlVHOwotREVCVUdfREVGSU5FUyA9ICQoREVCVUdfREVG
SU5FU18kKENVUlJFTlRfVkFSSUFOVCkpOwotCi1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpP
UiA9ICQoVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1IkKE1BQ09TWF9ERVBMT1lNRU5UX1RB
UkdFVDpzdWZmaXg6aWRlbnRpZmllcikpOwotVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1Jf
MTAgPSAxMDEwMDA7Ci1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUl8xMSA9IDEwMTEwMDsK
LVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SXzEyID0gMTAxMjAwOwotVEFSR0VUX01BQ19P
U19YX1ZFUlNJT05fTUFKT1JfMTMgPSAxMDEzMDA7Ci0KLVNES1JPT1QgPSBtYWNvc3guaW50ZXJu
YWw7Ci0KLVNVUFBPUlRFRF9QTEFURk9STVMgPSBtYWNvc3g7Ci0KLVRPT0xDSEFJTlMgPSBkZWZh
dWx0OwotCi1PVEhFUl9DRkxBR1MgPSAkKEFTQU5fT1RIRVJfQ0ZMQUdTKTsKLU9USEVSX0NQTFVT
UExVU0ZMQUdTID0gJChBU0FOX09USEVSX0NQTFVTUExVU0ZMQUdTKTsKLU9USEVSX0xERkxBR1Mg
PSAkKEFTQU5fT1RIRVJfTERGTEFHUyk7CkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29u
ZmlndXJhdGlvbnMvRGVidWdSZWxlYXNlLnhjY29uZmlnCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xh
eW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25maWcJKHJldmlz
aW9uIDIwOTg4NikKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9EZWJ1
Z1JlbGVhc2UueGNjb25maWcJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MiArMCwwIEBACi0vLyBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0vLyBhcmUgbWV0OgotLy8gMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLS8vIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0vLyAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
Ly8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotLy8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLS8vIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotLy8gUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLS8vIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
Ly8gRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotLy8gUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0vLyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0vLyBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgIkJhc2UueGNjb25maWciCi0K
LUFSQ0hTID0gJChBUkNIU19TVEFOREFSRF82NF9CSVQpOwotCi1UQVJHRVRfTUFDX09TX1hfVkVS
U0lPTl9NQUpPUiA9ICQoTUFDX09TX1hfVkVSU0lPTl9NQUpPUik7Ci0KLU1BQ09TWF9ERVBMT1lN
RU5UX1RBUkdFVCA9ICQoTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXyQoVEFSR0VUX01BQ19PU19Y
X1ZFUlNJT05fTUFKT1IpKQotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEwMTAwMCA9IDEwLjEw
OwotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEwMTEwMCA9IDEwLjExOwotTUFDT1NYX0RFUExP
WU1FTlRfVEFSR0VUXzEwMTIwMCA9IDEwLjEyOwotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEw
MTMwMCA9IDEwLjEzOwotCi1GUkFNRVdPUktfU0VBUkNIX1BBVEhTID0gJChERVZFTE9QRVJfRElS
KS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzOwotTERfUlVOUEFUSF9TRUFSQ0hfUEFUSFMgPSAk
KERFVkVMT1BFUl9ESVIpL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3M7Ci1PVEhFUl9MREZMQUdT
ID0gLWZyYW1ld29yayBDb3JlU2ltdWxhdG9yIC1mcmFtZXdvcmsgQXBwS2l0OwotCi1TREtST09U
ID0gJChTREtST09UX21hY29zeF8kKFVTRV9JTlRFUk5BTF9TREspKTsKLVNES1JPT1RfbWFjb3N4
XyA9IG1hY29zeDsKLVNES1JPT1RfbWFjb3N4X1lFUyA9IG1hY29zeC5pbnRlcm5hbDsKSW5kZXg6
IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvQ29yZVNpbXVsYXRvclNQSS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvQ29y
ZVNpbXVsYXRvclNQSS5oCShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29scy9MYXlvdXRUZXN0UmVs
YXkvTGF5b3V0VGVzdFJlbGF5L0NvcmVTaW11bGF0b3JTUEkuaAkobm9uZXhpc3RlbnQpCkBAIC0x
LDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgX19oYXNfaW5jbHVkZSg8Q29yZVNp
bXVsYXRvci9Db3JlU2ltdWxhdG9yLmg+KQotCi0vKiBGSVhNRTogUmVtb3ZlIHRoZSBiZWxvdyAj
ZGVmaW5lIG9uY2Ugd2UgcmVxdWlyZSBYY29kZSA3LjMgd2l0aCBpT1MgOS4zIFNESyBvciBuZXdl
ci4gKi8KLSNkZWZpbmUgX19jb3Jlc2ltX3VuYXZhaWxhYmxlX21zZyhtc2cpCi0jaW1wb3J0IDxD
b3JlU2ltdWxhdG9yL0NvcmVTaW11bGF0b3IuaD4KLQotLyogRklYTUU6IEFsd2F5cyB1c2UgU2lt
U2VydmljZUNvbnRleHQgb25jZSB3ZSByZXF1aXJlIFhjb2RlIDcuMyB3aXRoIGlPUyA5LjMgU0RL
IG9yIG5ld2VyLiAqLwotI2RlZmluZSBVU0VfU0lNX1NFUlZJQ0VfQ09OVEVYVCBkZWZpbmVkKENP
UkVTSU1fQVBJX01BWF9BTExPV0VEKQotCi0jZWxzZQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0Zv
dW5kYXRpb24uaD4KLQotI2RlZmluZSBVU0VfU0lNX1NFUlZJQ0VfQ09OVEVYVCAxCi0KLSNkZWZp
bmUga1NpbURldmljZUxhdW5jaEFwcGxpY2F0aW9uQXJndW1lbnRzIEAiYXJndW1lbnRzIgotI2Rl
ZmluZSBrU2ltRGV2aWNlTGF1bmNoQXBwbGljYXRpb25FbnZpcm9ubWVudCBAImVudmlyb25tZW50
IgotCi1AaW50ZXJmYWNlIFNpbURldmljZSA6IE5TT2JqZWN0Ci0tIChCT09MKWluc3RhbGxBcHBs
aWNhdGlvbjooTlNVUkwgKilpbnN0YWxsVVJMIHdpdGhPcHRpb25zOihOU0RpY3Rpb25hcnkgKilv
cHRpb25zIGVycm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci0tIChwaWRf
dClsYXVuY2hBcHBsaWNhdGlvbldpdGhJRDooTlNTdHJpbmcgKilidW5kbGVJRCBvcHRpb25zOihO
U0RpY3Rpb25hcnkgKilvcHRpb25zIGVycm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICop
ZXJyb3I7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgU2ltRGV2aWNlU2V0IDogTlNPYmplY3QKLUBwcm9w
ZXJ0eSAocmVhZG9ubHksIGNvcHkpIE5TRGljdGlvbmFyeSAqZGV2aWNlc0J5VURJRDsKLUBlbmQK
LQotQGludGVyZmFjZSBTaW1TZXJ2aWNlQ29udGV4dCA6IE5TT2JqZWN0Ci0rKFNpbVNlcnZpY2VD
b250ZXh0ICopc2hhcmVkU2VydmljZUNvbnRleHRGb3JEZXZlbG9wZXJEaXI6KE5TU3RyaW5nICop
ZGV2ZWxvcGVyRGlyIGVycm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci0t
KFNpbURldmljZVNldCAqKWRlZmF1bHREZXZpY2VTZXRXaXRoRXJyb3I6KE5TRXJyb3IgKiBfX2F1
dG9yZWxlYXNpbmcgKillcnJvcjsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRU
ZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5oCShyZXZpc2lv
biAyMDk4ODYpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlw
ZVJlbGF5LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBMVFBpcGVSZWxheV9oCi0jZGVmaW5lIExUUGlwZVJlbGF5X2gKLQotI2ltcG9ydCAiTFRS
ZWxheS5oIgotCi1AaW50ZXJmYWNlIExUUGlwZVJlbGF5IDogTlNPYmplY3QgPExUUmVsYXk+Ci1A
cHJvcGVydHkgKHdlYWspIGlkPExUUmVsYXlEZWxlZ2F0ZT4gcmVsYXlEZWxlZ2F0ZTsKLS0gKGlk
KWluaXRXaXRoUHJlZml4OihOU1N0cmluZyAqKXByZWZpeDsKLUBlbmQKLQotI2VuZGlmCkluZGV4
OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVS
ZWxheS5tCShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0
VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0JKG5vbmV4aXN0ZW50KQpAQCAtMSwxNTggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbXBvcnQgIkxUUGlwZVJlbGF5LmgiCi0KLSNpbXBvcnQgPEZvdW5kYXRp
b24vRm91bmRhdGlvbi5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3lzL3R5
cGVzLmg+Ci0KLUBpbnRlcmZhY2UgTFRQaXBlUmVsYXkgKCkKLUBwcm9wZXJ0eSAocmVhZG9ubHks
IHN0cm9uZykgTlNTdHJpbmcgKmZpZm9QcmVmaXg7Ci1AcHJvcGVydHkgKHN0cm9uZykgTlNPdXRw
dXRTdHJlYW0gKnN0YW5kYXJkSW5wdXRQaXBlOwotQHByb3BlcnR5IChzdHJvbmcpIE5TSW5wdXRT
dHJlYW0gKnN0YW5kYXJkT3V0cHV0UGlwZTsKLUBwcm9wZXJ0eSAoc3Ryb25nKSBOU0lucHV0U3Ry
ZWFtICpzdGFuZGFyZEVycm9yUGlwZTsKLQotLSAodm9pZCljcmVhdGVGSUZPczsKLS0gKHZvaWQp
ZGVzdHJveUZJRk9zOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gTFRQaXBlUmVsYXkKLQotLSAo
TlNTdHJpbmcgKilpblBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdC
eUFwcGVuZGluZ1N0cmluZzpAIl9JTiJdOwotfQotCi0tIChOU1N0cmluZyAqKW91dFBpcGVQYXRo
Ci17Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9P
VVQiXTsKLX0KLQotLSAoTlNTdHJpbmcgKillcnJvclBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtf
Zmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9FUlJPUiJdOwotfQotCi0tIChO
U091dHB1dFN0cmVhbSAqKSBvdXRwdXRTdHJlYW0KLXsKLSAgICByZXR1cm4gX3N0YW5kYXJkSW5w
dXRQaXBlOwotfQotCi0tIChpZClpbml0V2l0aFByZWZpeDooTlNTdHJpbmcgKilwcmVmaXgKLXsK
LSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKSB7Ci0gICAgICAgIF9maWZvUHJlZml4ID0g
cHJlZml4OwotICAgICAgICBbc2VsZiBkZXN0cm95RklGT3NdOwotICAgIH0KLSAgICByZXR1cm4g
c2VsZjsKLX0KLQotLSAodm9pZClzZXR1cAotewotICAgIFtzZWxmIGRlc3Ryb3lGSUZPc107Ci0g
ICAgW3NlbGYgY3JlYXRlRklGT3NdOwotfQotCi0tICh2b2lkKXRlYXJEb3duCi17Ci0gICAgW3Nl
bGYgZGVzdHJveUZJRk9zXTsKLX0KLQotLSh2b2lkKSBjb25uZWN0Ci17Ci0gICAgX3N0YW5kYXJk
SW5wdXRQaXBlID0gW05TT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbVRvRmlsZUF0UGF0aDpbc2Vs
ZiBpblBpcGVQYXRoXSBhcHBlbmQ6WUVTXTsKLSAgICBfc3RhbmRhcmRPdXRwdXRQaXBlID0gW05T
SW5wdXRTdHJlYW0gaW5wdXRTdHJlYW1XaXRoRmlsZUF0UGF0aDpbc2VsZiBvdXRQaXBlUGF0aF1d
OwotICAgIF9zdGFuZGFyZEVycm9yUGlwZSA9IFtOU0lucHV0U3RyZWFtIGlucHV0U3RyZWFtV2l0
aEZpbGVBdFBhdGg6W3NlbGYgZXJyb3JQaXBlUGF0aF1dOwotCi0gICAgW1tzZWxmIHN0YW5kYXJk
SW5wdXRQaXBlXSBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRQ
aXBlXSBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRFcnJvclBpcGVdIHNl
dERlbGVnYXRlOnNlbGZdOwotCi0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gc2NoZWR1
bGVJblJ1bkxvb3A6W05TUnVuTG9vcCBtYWluUnVuTG9vcF0gZm9yTW9kZTpOU0RlZmF1bHRSdW5M
b29wTW9kZV07Ci0gICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JQaXBlXSBzY2hlZHVsZUluUnVuTG9v
cDpbTlNSdW5Mb29wIG1haW5SdW5Mb29wXSBmb3JNb2RlOk5TRGVmYXVsdFJ1bkxvb3BNb2RlXTsK
LQotICAgIFtbc2VsZiBzdGFuZGFyZElucHV0UGlwZV0gb3Blbl07Ci0gICAgW1tzZWxmIHN0YW5k
YXJkT3V0cHV0UGlwZV0gb3Blbl07Ci0gICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JQaXBlXSBvcGVu
XTsKLQotICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRDb25uZWN0XTsKLX0KLQotLSAodm9p
ZClkaXNjb25uZWN0Ci17Ci0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gY2xvc2VdOwot
ICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yUGlwZV0gY2xvc2VdOwotICAgIFtbc2VsZiBzdGFuZGFy
ZElucHV0UGlwZV0gY2xvc2VdOwotICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWREaXNjb25u
ZWN0XTsKLX0KLQotLSAodm9pZCljcmVhdGVGSUZPcwotewotICAgIG1rZmlmbyhbW3NlbGYgaW5Q
aXBlUGF0aF0gVVRGOFN0cmluZ10sIDA2NjYpOwotICAgIG1rZmlmbyhbW3NlbGYgb3V0UGlwZVBh
dGhdIFVURjhTdHJpbmddLCAwNjY2KTsKLSAgICBta2ZpZm8oW1tzZWxmIGVycm9yUGlwZVBhdGhd
IFVURjhTdHJpbmddLCAwNjY2KTsKLX0KLQotLSAodm9pZClkZXN0cm95RklGT3MKLXsKLSAgICB1
bmxpbmsoW1tzZWxmIGluUGlwZVBhdGhdIFVURjhTdHJpbmddKTsKLSAgICB1bmxpbmsoW1tzZWxm
IG91dFBpcGVQYXRoXSBVVEY4U3RyaW5nXSk7Ci0gICAgdW5saW5rKFtbc2VsZiBlcnJvclBpcGVQ
YXRoXSBVVEY4U3RyaW5nXSk7Ci19Ci0KLS0gKHZvaWQpIHJlbGF5U3RyZWFtOihOU0lucHV0U3Ry
ZWFtICopc3RyZWFtCi17Ci0gICAgdWludDhfdCBieXRlc1sxMDI0XTsKLSAgICBOU0ludGVnZXIg
Ynl0ZXNSZWFkID0gW3N0cmVhbSByZWFkOmJ5dGVzIG1heExlbmd0aDoxMDI0XTsKLSAgICBOU0Rh
dGEgKmRhdGEgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6Ynl0ZXMgbGVuZ3RoOmJ5dGVzUmVhZF07
Ci0KLSAgICBpZiAoc3RyZWFtID09IFtzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0pCi0gICAgICAg
IFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRSZWNlaXZlU3Rkb3V0RGF0YTpkYXRhXTsKLSAgICBl
bHNlCi0gICAgICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRSZWNlaXZlU3RkZXJyRGF0YTpk
YXRhXTsKLX0KLQotLSAodm9pZClzdHJlYW06KE5TU3RyZWFtICopYVN0cmVhbSBoYW5kbGVFdmVu
dDooTlNTdHJlYW1FdmVudClldmVudENvZGUKLXsKLSAgICBzd2l0Y2ggKGV2ZW50Q29kZSkgewot
ICAgIGNhc2UgTlNTdHJlYW1FdmVudE5vbmU6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlNT
dHJlYW1FdmVudEhhc0J5dGVzQXZhaWxhYmxlOgotICAgICAgICBbc2VsZiByZWxheVN0cmVhbToo
TlNJbnB1dFN0cmVhbSAqKWFTdHJlYW1dOwotICAgIGNhc2UgTlNTdHJlYW1FdmVudEhhc1NwYWNl
QXZhaWxhYmxlOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnRPcGVuQ29t
cGxldGVkOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnRFbmRFbmNvdW50
ZXJlZDoKLSAgICAgICAgW1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZENyYXNoV2l0aE1lc3NhZ2U6
bmlsXTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOU1N0cmVhbUV2ZW50RXJyb3JPY2N1cnJl
ZDoKLSAgICAgICAgW1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZENyYXNoV2l0aE1lc3NhZ2U6W1th
U3RyZWFtIHN0cmVhbUVycm9yXSBkZXNjcmlwdGlvbl1dOwotICAgICAgICBicmVhazsKLSAgICB9
Ci19Ci0KLUBlbmQKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkv
TFRSZWxheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0
UmVsYXkvTFRSZWxheS5oCShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29scy9MYXlvdXRUZXN0UmVs
YXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXkuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQ4ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIExUUmVsYXlfaAotI2RlZmluZSBMVFJlbGF5X2gKLQot
I2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLUBwcm90b2NvbCBMVFJlbGF5RGVs
ZWdhdGUgPE5TT2JqZWN0PgotLSAodm9pZClkaWRDb25uZWN0OwotLSAodm9pZClkaWREaXNjb25u
ZWN0OwotLSAodm9pZClkaWRDcmFzaFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2U7Ci0t
ICh2b2lkKWRpZFJlY2VpdmVTdGRvdXREYXRhOihOU0RhdGEgKilkYXRhOwotLSAodm9pZClkaWRS
ZWNlaXZlU3RkZXJyRGF0YTooTlNEYXRhICopZGF0YTsKLUBlbmQKLQotQHByb3RvY29sIExUUmVs
YXkgPE5TT2JqZWN0LCBOU1N0cmVhbURlbGVnYXRlPgotLSAodm9pZClzZXR1cDsKLS0gKHZvaWQp
dGVhckRvd247Ci0tICh2b2lkKWNvbm5lY3Q7Ci0tICh2b2lkKWRpc2Nvbm5lY3Q7Ci1AcHJvcGVy
dHkgKHdlYWspIGlkPExUUmVsYXlEZWxlZ2F0ZT4gcmVsYXlEZWxlZ2F0ZTsKLUBwcm9wZXJ0eSAo
cmVhZG9ubHksIHN0cm9uZykgTlNPdXRwdXRTdHJlYW0gKm91dHB1dFN0cmVhbTsKLUBlbmQKLQot
I2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVs
YXlDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91
dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29s
cy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLmgJKG5v
bmV4aXN0ZW50KQpAQCAtMSw0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgTFRSZWxheUNv
bnRyb2xsZXJfaAotI2RlZmluZSBMVFJlbGF5Q29udHJvbGxlcl9oCi0KLSNpbXBvcnQgIkxUUmVs
YXkuaCIKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLUBjbGFzcyBTaW1E
ZXZpY2U7Ci0KLUBpbnRlcmZhY2UgTFRSZWxheUNvbnRyb2xsZXIgOiBOU09iamVjdCA8TFRSZWxh
eURlbGVnYXRlPgotLSAoaWQpaW5pdFdpdGhEZXZpY2U6KFNpbURldmljZSAqKWRldmljZSBwcm9k
dWN0RGlyOihOU1N0cmluZyAqKXByb2R1Y3REaXIgYXBwUGF0aDooTlNTdHJpbmcgKilhcHBQYXRo
IGRldmljZVVESUQ6KE5TVVVJRCAqKXVkaWQgZHVtcFRvb2xBcmd1bWVudHM6KE5TQXJyYXkgKilh
cmd1bWVudHM7Ci0tICh2b2lkKXN0YXJ0OwotLSAodm9pZClmaW5pc2g7Ci1AZW5kCi0KLSNlbmRp
ZgpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29u
dHJvbGxlci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0
UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIubQkocmV2aXNpb24gMjA5ODg2KQorKysgVG9vbHMvTGF5
b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5tCShub25leGlz
dGVudCkKQEAgLTEsMjcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJMVFJlbGF5Q29u
dHJvbGxlci5oIgotCi0jaW1wb3J0ICJDb3JlU2ltdWxhdG9yU1BJLmgiCi0jaW1wb3J0ICJMVFBp
cGVSZWxheS5oIgotI2ltcG9ydCA8QXBwS2l0L0FwcEtpdC5oPgotI2ltcG9ydCA8Y3J0X2V4dGVy
bnMuaD4KLQotQGludGVyZmFjZSBMVFJlbGF5Q29udHJvbGxlciAoKQotQHByb3BlcnR5IChyZWFk
b25seSwgc3Ryb25nKSBkaXNwYXRjaF9zb3VyY2VfdCBzdGFuZGFyZElucHV0RGlzcGF0Y2hTb3Vy
Y2U7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TRmlsZUhhbmRsZSAqc3RhbmRhcmRP
dXRwdXQ7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TRmlsZUhhbmRsZSAqc3RhbmRh
cmRFcnJvcjsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKmlwY0lkZW50
aWZpZXI7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TU3RyaW5nICphcHBCdW5kbGVJ
ZGVudGlmaWVyOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU1N0cmluZyAqYXBwUGF0
aDsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNVVUlEICpkZXZpY2VVRElEOwotQHBy
b3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU0FycmF5ICpkdW1wVG9vbEFyZ3VtZW50czsKLUBw
cm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKnByb2R1Y3REaXI7Ci1AcHJvcGVy
dHkgKHN0cm9uZykgU2ltRGV2aWNlICpkZXZpY2U7Ci1AcHJvcGVydHkgKHN0cm9uZykgaWQ8TFRS
ZWxheT4gcmVsYXk7Ci1AcHJvcGVydHkgcGlkX3QgcGlkOwotQHByb3BlcnR5IChzdHJvbmcpIGRp
c3BhdGNoX3NvdXJjZV90IGFwcERpc3BhdGNoU291cmNlOwotQGVuZAotCi1AaW1wbGVtZW50YXRp
b24gTFRSZWxheUNvbnRyb2xsZXIKLQotLSAoaWQpaW5pdFdpdGhEZXZpY2U6KFNpbURldmljZSAq
KWRldmljZSBwcm9kdWN0RGlyOihOU1N0cmluZyAqKXByb2R1Y3REaXIgYXBwUGF0aDooTlNTdHJp
bmcgKilhcHBQYXRoIGRldmljZVVESUQ6KE5TVVVJRCAqKXVkaWQgZHVtcFRvb2xBcmd1bWVudHM6
KE5TQXJyYXkgKilhcmd1bWVudHMKLXsKLSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKSB7
Ci0gICAgICAgIF9kZXZpY2UgPSBkZXZpY2U7Ci0gICAgICAgIF9wcm9kdWN0RGlyID0gcHJvZHVj
dERpcjsKLSAgICAgICAgX2FwcFBhdGggPSBhcHBQYXRoOwotICAgICAgICBfYXBwQnVuZGxlSWRl
bnRpZmllciA9IFtbTlNCdW5kbGUgYnVuZGxlV2l0aFBhdGg6YXBwUGF0aF0gYnVuZGxlSWRlbnRp
Zmllcl07Ci0gICAgICAgIF9kZXZpY2VVRElEID0gdWRpZDsKLSAgICAgICAgX2R1bXBUb29sQXJn
dW1lbnRzID0gYXJndW1lbnRzOwotICAgICAgICBfc3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNl
ID0gZGlzcGF0Y2hfc291cmNlX2NyZWF0ZShESVNQQVRDSF9TT1VSQ0VfVFlQRV9SRUFELCBTVERJ
Tl9GSUxFTk8sIDAsIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCkpOwotICAgICAgICBfc3RhbmRh
cmRPdXRwdXQgPSBbTlNGaWxlSGFuZGxlIGZpbGVIYW5kbGVXaXRoU3RhbmRhcmRPdXRwdXRdOwot
ICAgICAgICBfc3RhbmRhcmRFcnJvciA9IFtOU0ZpbGVIYW5kbGUgZmlsZUhhbmRsZVdpdGhTdGFu
ZGFyZEVycm9yXTsKLQotICAgICAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2V2ZW50X2hhbmRsZXIo
X3N0YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJjZSwgXnsKLSAgICAgICAgICAgIHVpbnQ4X3QgYnVm
ZmVyWzEwMjRdOwotICAgICAgICAgICAgc3NpemVfdCBsZW4gPSByZWFkKFNURElOX0ZJTEVOTywg
YnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7Ci0gICAgICAgICAgICBpZiAobGVuID4gMCkgewotICAg
ICAgICAgICAgICAgIEB0cnkgewotICAgICAgICAgICAgICAgICAgICBbW1tzZWxmIHJlbGF5XSBv
dXRwdXRTdHJlYW1dIHdyaXRlOmJ1ZmZlciBtYXhMZW5ndGg6bGVuXTsKLSAgICAgICAgICAgICAg
ICB9IEBjYXRjaCAoTlNFeGNlcHRpb24gKmUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQnJv
a2VuIHBpcGUgLSB0aGUgZHVtcCB0b29sIGNyYXNoZWQuIFRpbWUgdG8gZGllLgotICAgICAgICAg
ICAgICAgICAgICBbc2VsZiBkaWRDcmFzaFdpdGhNZXNzYWdlOm5pbF07Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBFT0YgUmVjZWl2
ZWQgb24gdGhlIHJlbGF5J3Mgc3RhbmRhcmQgaW5wdXQuCi0gICAgICAgICAgICAgICAgW3NlbGYg
ZmluaXNoXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgX3JlbGF5ID0g
W1tMVFBpcGVSZWxheSBhbGxvY10gaW5pdFdpdGhQcmVmaXg6W0AiL3RtcCIgc3RyaW5nQnlBcHBl
bmRpbmdQYXRoQ29tcG9uZW50OnNlbGYuaXBjSWRlbnRpZmllcl1dOwotICAgICAgICBbX3JlbGF5
IHNldFJlbGF5RGVsZWdhdGU6c2VsZl07Ci0gICAgfQotICAgIHJldHVybiBzZWxmOwotfQotCi0t
IChOU1N0cmluZyAqKWlwY0lkZW50aWZpZXIKLXsKLSAgICByZXR1cm4gW05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6QCIlQC0lQCIsIHNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciwgc2VsZi5kZXZp
Y2VVRElELlVVSURTdHJpbmddOwotfQotCi0tIChOU1N0cmluZyAqKXByb2Nlc3NOYW1lCi17Ci0g
ICAgcmV0dXJuIFtzZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIgY29tcG9uZW50c1NlcGFyYXRlZEJ5
U3RyaW5nOkAiLiJdLmxhc3RPYmplY3Q7Ci19Ci0KLS0gKHZvaWQpZGlkUmVjZWl2ZVN0ZG91dERh
dGE6KE5TRGF0YSAqKWRhdGEKLXsKLSAgICBAdHJ5IHsKLSAgICAgICAgW1tzZWxmIHN0YW5kYXJk
T3V0cHV0XSB3cml0ZURhdGE6ZGF0YV07Ci0gICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNl
cHRpb24pIHsKLSAgICAgICAgLy8gTlNGaWxlSGFuZGxlT3BlcmF0aW9uRXhjZXB0aW9uCi0gICAg
ICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhlIHRlc3QgaGFybmVzcyBzdG9wcGVkIGxpc3RlbmluZyB0
byB1cywKLSAgICAgICAgLy8gcHJvYmFibHkgYmVjYXVzZSB3ZSB0aW1lZCBvdXQgb3IgYSBydW4g
d2FzIGNhbmNlbGVkLgotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotfQotCi0t
ICh2b2lkKWRpZFJlY2VpdmVTdGRlcnJEYXRhOihOU0RhdGEgKilkYXRhCi17Ci0gICAgQHRyeSB7
Ci0gICAgICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSB3cml0ZURhdGE6ZGF0YV07Ci0gICAgfSBA
Y2F0Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRpb24pIHsKLSAgICAgICAgLy8gTlNGaWxlSGFuZGxl
T3BlcmF0aW9uRXhjZXB0aW9uCi0gICAgICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhlIHRlc3QgaGFy
bmVzcyBzdG9wcGVkIGxpc3RlbmluZyB0byB1cywKLSAgICAgICAgLy8gcHJvYmFibHkgYmVjYXVz
ZSB3ZSB0aW1lZCBvdXQgb3IgYSBydW4gd2FzIGNhbmNlbGVkLgotICAgICAgICBleGl0KEVYSVRf
RkFJTFVSRSk7Ci0gICAgfQotfQotCi0tICh2b2lkKWRpZERpc2Nvbm5lY3QKLXsKLSAgICBkaXNw
YXRjaF9zdXNwZW5kKFtzZWxmIHN0YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJjZV0pOwotfQotCi0t
ICh2b2lkKWRpZENvbm5lY3QKLXsKLSAgICBkaXNwYXRjaF9yZXN1bWUoW3NlbGYgc3RhbmRhcmRJ
bnB1dERpc3BhdGNoU291cmNlXSk7Ci19Ci0KLS0gKHZvaWQpZGlkQ3Jhc2hXaXRoTWVzc2FnZToo
TlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgW1tzZWxmIHJlbGF5XSBkaXNjb25uZWN0XTsKLSAg
ICBOU1N0cmluZyAqY3Jhc2hNZXNzYWdlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJc
biNDUkFTSEVEIC0gJUAgKHBpZCAlZClcbiIsIFtzZWxmIHByb2Nlc3NOYW1lXSwgW3NlbGYgcGlk
XV07Ci0KLSAgICBpZiAobWVzc2FnZSkKLSAgICAgICAgY3Jhc2hNZXNzYWdlID0gW2NyYXNoTWVz
c2FnZSBzdHJpbmdCeUFwcGVuZGluZ0Zvcm1hdDpAIiVAXG4iLCBtZXNzYWdlXTsKLQotICAgIFtb
c2VsZiBzdGFuZGFyZEVycm9yXSB3cml0ZURhdGE6W2NyYXNoTWVzc2FnZSBkYXRhVXNpbmdFbmNv
ZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ11dOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSBj
bG9zZUZpbGVdOwotICAgIFtbc2VsZiBzdGFuZGFyZE91dHB1dF0gY2xvc2VGaWxlXTsKLSAgICBl
eGl0KEVYSVRfRkFJTFVSRSk7Ci19Ci0KLS0gKHZvaWQpaW5zdGFsbEFwcAotewotICAgIE5TRGlj
dGlvbmFyeSAqaW5zdGFsbE9wdGlvbnMgPSBAewotICAgICAgICAoTlNTdHJpbmcgKilrQ0ZCdW5k
bGVJZGVudGlmaWVyS2V5OiBzZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIsCi0gICAgfTsKLQotICAg
IE5TRXJyb3IgKmVycm9yID0gbmlsOwotICAgIEJPT0wgaW5zdGFsbGVkID0gW3NlbGYuZGV2aWNl
IGluc3RhbGxBcHBsaWNhdGlvbjpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnNlbGYuYXBwUGF0aF0g
d2l0aE9wdGlvbnM6aW5zdGFsbE9wdGlvbnMgZXJyb3I6JmVycm9yXTsKLSAgICBpZiAoIWluc3Rh
bGxlZCkgewotICAgICAgICBOU0xvZyhAIkNvdWxkbid0IGluc3RhbGwgJUA6ICVAIiwgc2VsZi5h
cHBQYXRoLCBlcnJvci5kZXNjcmlwdGlvbik7Ci0gICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsK
LSAgICB9Ci19Ci0KLS0gKHZvaWQpa2lsbEFwcAotewotICAgIGRpc3BhdGNoX3NvdXJjZV90IGRp
c3BhdGNoID0gW3NlbGYgYXBwRGlzcGF0Y2hTb3VyY2VdOwotCi0gICAgaWYgKGRpc3BhdGNoKQot
ICAgICAgICBkaXNwYXRjaF9zb3VyY2VfY2FuY2VsKGRpc3BhdGNoKTsKLQotICAgIGlmIChbc2Vs
ZiBwaWRdID4gMSkgewotICAgICAgICBraWxsKHNlbGYucGlkLCBTSUdLSUxMKTsKLSAgICAgICAg
W3NlbGYgc2V0UGlkOi0xXTsKLSAgICB9Ci0gICAgW3NlbGYgc2V0QXBwRGlzcGF0Y2hTb3VyY2U6
bmlsXTsKLX0KLQotLSAoTlNEaWN0aW9uYXJ5ICopX2Vudmlyb25tZW50VmFyaWFibGVzCi17Ci0g
ICAgc3RhdGljIE5TRGljdGlvbmFyeSAqZW52aXJvbm1lbnRWYXJpYWJsZXM7Ci0gICAgc3RhdGlj
IGRpc3BhdGNoX29uY2VfdCBvbmNlOwotCi0gICAgZGlzcGF0Y2hfb25jZSgmb25jZSwgXnsKLSAg
ICAgICAgTlNTdHJpbmcgKnByb2R1Y3REaXJlY3RvcnkgPSBbc2VsZiBwcm9kdWN0RGlyXTsKLQot
ICAgICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gW0B7Ci0gICAgICAgICAg
ICBAIklQQ19JREVOVElGSUVSIjogc2VsZi5pcGNJZGVudGlmaWVyLAotICAgICAgICAgICAgQCJE
WUxEX0ZSQU1FV09SS19QQVRIIjogcHJvZHVjdERpcmVjdG9yeSwKLSAgICAgICAgICAgIEAiX19Y
UENfRFlMRF9GUkFNRVdPUktfUEFUSCI6IHByb2R1Y3REaXJlY3RvcnksCi0gICAgICAgICAgICBA
IkRZTERfTElCUkFSWV9QQVRIIjogcHJvZHVjdERpcmVjdG9yeSwKLSAgICAgICAgICAgIEAiX19Y
UENfRFlMRF9MSUJSQVJZX1BBVEgiOiBwcm9kdWN0RGlyZWN0b3J5LAotICAgICAgICB9IG11dGFi
bGVDb3B5XTsKLQotICAgICAgICBmb3IgKE5TU3RyaW5nICprZXlOYW1lIGluIEBbQCJEWUxEX0lO
U0VSVF9MSUJSQVJJRVMiLCBAIk1hbGxvY1N0YWNrTG9nZ2luZyIsIEAiTE9DQUxfUkVTT1VSQ0Vf
Uk9PVCIsIEAiRFVNUFJFTkRFUlRSRUVfVEVNUCJdKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFy
KiB2YWx1ZSA9IGdldGVudihba2V5TmFtZSBVVEY4U3RyaW5nXSk7Ci0gICAgICAgICAgICBpZiAo
dmFsdWUgJiYgc3RybGVuKHZhbHVlKSkgewotICAgICAgICAgICAgICAgIE5TU3RyaW5nICpuc1Zh
bHVlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnZhbHVlXTsKLSAgICAgICAgICAg
ICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6bnNWYWx1ZSBmb3JLZXk6a2V5TmFtZV07Ci0gICAg
ICAgICAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0Om5zVmFsdWUgZm9yS2V5OltAIl9fWFBD
XyIgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6a2V5TmFtZV1dOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgZm9yIChjaGFyKiogZW52cCA9ICpfTlNHZXRFbnZpcm9uKCk7ICpl
bnZwOyBlbnZwKyspIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVudiA9ICplbnZwOwotICAg
ICAgICAgICAgaWYgKCFzdHJuY21wKCJKU0NfIiwgZW52LCA0KSB8fCAhc3RybmNtcCgiX19YUENf
SlNDXyIsIGVudiwgMTApKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXF1YWwgPSBz
dHJjaHIoZW52LCAnPScpOwotICAgICAgICAgICAgICAgIGlmICghZXF1YWwpIHsKLSAgICAgICAg
ICAgICAgICAgICAgTlNMb2coQCJNaXNzaW5nICc9JyBpbiBlbnYgdmFyICclcyciLCBlbnYpOwot
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heEtleUxlbmd0aCA9IDI1NjsKLSAgICAg
ICAgICAgICAgICBzaXplX3Qga2V5TGVuZ3RoID0gZXF1YWwgLSBlbnY7Ci0gICAgICAgICAgICAg
ICAgaWYgKGtleUxlbmd0aCA+PSBtYXhLZXlMZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAg
TlNMb2coQCJFbnYgdmFyICclcycgaXMgdG9vIGxvbmciLCBlbnYpOwotICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjaGFy
IGtleVttYXhLZXlMZW5ndGhdOwotICAgICAgICAgICAgICAgIHN0cm5jcHkoa2V5LCBlbnYsIGtl
eUxlbmd0aCk7Ci0gICAgICAgICAgICAgICAga2V5W2tleUxlbmd0aF0gPSAnXDAnOwotICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIHZhbHVlID0gZXF1YWwgKyAxOwotCi0gICAgICAgICAgICAg
ICAgTlNTdHJpbmcgKm5zS2V5ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmtleV07
Ci0gICAgICAgICAgICAgICAgTlNTdHJpbmcgKm5zVmFsdWUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0
aFVURjhTdHJpbmc6dmFsdWVdOwotICAgICAgICAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVj
dDpuc1ZhbHVlIGZvcktleTpuc0tleV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBlbnZpcm9ubWVudFZhcmlhYmxlcyA9IFtkaWN0aW9uYXJ5IGNvcHldOwotICAgIH0pOwot
Ci0gICAgcmV0dXJuIGVudmlyb25tZW50VmFyaWFibGVzOwotfQotCi0tICh2b2lkKWxhdW5jaEFw
cAotewotICAgIE5TRGljdGlvbmFyeSAqbGF1bmNoT3B0aW9ucyA9IEB7Ci0gICAgICAgIGtTaW1E
ZXZpY2VMYXVuY2hBcHBsaWNhdGlvbkVudmlyb25tZW50OiBbc2VsZiBfZW52aXJvbm1lbnRWYXJp
YWJsZXNdLAotICAgICAgICBrU2ltRGV2aWNlTGF1bmNoQXBwbGljYXRpb25Bcmd1bWVudHM6IFtz
ZWxmIGR1bXBUb29sQXJndW1lbnRzXSwKLSAgICB9OwotCi0gICAgTlNFcnJvciAqZXJyb3I7Ci0g
ICAgcGlkX3QgcGlkID0gW3NlbGYuZGV2aWNlIGxhdW5jaEFwcGxpY2F0aW9uV2l0aElEOnNlbGYu
YXBwQnVuZGxlSWRlbnRpZmllciBvcHRpb25zOmxhdW5jaE9wdGlvbnMgZXJyb3I6JmVycm9yXTsK
LQotICAgIGlmIChwaWQgPCAwKSB7Ci0gICAgICAgIE5TTG9nKEAiQ291bGRuJ3QgbGF1bmNoICVA
OiAlQCIsIHNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciwgZXJyb3IuZGVzY3JpcHRpb24pOwotICAg
ICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotCi0gICAgW3NlbGYgc2V0UGlkOnBpZF07
Ci0KLSAgICBkaXNwYXRjaF9xdWV1ZV90IHF1ZXVlID0gZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUo
KTsKLSAgICBkaXNwYXRjaF9zb3VyY2VfdCBzaW11bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3VyY2Ug
PSBkaXNwYXRjaF9zb3VyY2VfY3JlYXRlKERJU1BBVENIX1NPVVJDRV9UWVBFX1BST0MsIFtzZWxm
IHBpZF0sIERJU1BBVENIX1BST0NfRVhJVCwgcXVldWUpOwotICAgIFtzZWxmIHNldEFwcERpc3Bh
dGNoU291cmNlOnNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZV07Ci0gICAgZGlzcGF0Y2hf
c291cmNlX3NldF9ldmVudF9oYW5kbGVyKHNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSwg
XnsKLSAgICAgICAgZGlzcGF0Y2hfc291cmNlX2NhbmNlbChzaW11bGF0b3JBcHBFeGl0RGlzcGF0
Y2hTb3VyY2UpOwotICAgICAgICBbc2VsZiBkaWRDcmFzaFdpdGhNZXNzYWdlOm5pbF07Ci0gICAg
fSk7Ci0gICAgZGlzcGF0Y2hfcmVzdW1lKHNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSk7
Ci19Ci0KLS0gKHZvaWQpc3RhcnQKLXsKLSAgICBbc2VsZiBpbnN0YWxsQXBwXTsKLSAgICBbW3Nl
bGYgcmVsYXldIHNldHVwXTsKLSAgICBbc2VsZiBsYXVuY2hBcHBdOwotICAgIFtbc2VsZiByZWxh
eV0gY29ubmVjdF07Ci19Ci0KLS0gKHZvaWQpZmluaXNoCi17Ci0gICAgW1tzZWxmIHJlbGF5XSBk
aXNjb25uZWN0XTsKLSAgICBbc2VsZiBraWxsQXBwXTsKLSAgICBleGl0KEVYSVRfU1VDQ0VTUyk7
Ci19Ci0KLUBlbmQKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkv
bWFpbi5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVs
YXkvbWFpbi5tCShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5
b3V0VGVzdFJlbGF5L21haW4ubQkobm9uZXhpc3RlbnQpCkBAIC0xLDEzMyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiQ29yZVNpbXVsYXRvclNQSS5oIgotI2ltcG9ydCAiTFRS
ZWxheUNvbnRyb2xsZXIuaCIKLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi1z
dGF0aWMgTFRSZWxheUNvbnRyb2xsZXIgKnJlbGF5Q29udHJvbGxlcjsKLQotdm9pZCB1c2FnZSgp
Ci17Ci0gICAgTlNTdHJpbmcgKmhlbHBUZXh0ID0gQCJMYXlvdXRUZXN0UmVsYXk6IHJ1biBhIGR1
bXAgdG9vbCBpbiB0aGUgc2ltdWxhdG9yLiBOb3QgZm9yIGRpcmVjdCBjb25zdW1wdGlvbi5cbiIK
LSAgICAgICAgIlVzYWdlOiBMYXlvdXRUZXN0UmVsYXkgWy1oXSBbb3B0aW9uc10gLS0gW2R1bXAg
dG9vbCBhcmd1bWVudHNdXG4iCi0gICAgICAgICJSZXF1aXJlZCBvcHRpb25zOlxuIgotICAgICAg
ICAiICAgIC11ZGlkIDxpZGVudGlmaWVyPiAgICAgICBTaW11bGF0b3IgZGV2aWNlIGlkZW50aWZp
ZXJcbiIKLSAgICAgICAgIiAgICAtYXBwIDxhcHBfcGF0aD4gICAgICAgICAgUGF0aCB0byB0aGUg
YnVpbHQgaU9TIC5hcHAgYnVuZGxlIGRpcmVjdG9yeS5cbiIKLSAgICAgICAgIiAgICAtcHJvZHVj
dERpciA8ZGlyPiAgICAgICAgL3BhdGgvdG8vV2ViS2l0QnVpbGQve2NvbmZpZ3VyYXRpb259LXtz
aG9ydCBwbGF0Zm9ybX0uXG4iOwotCi0gICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgW2hlbHBU
ZXh0IFVURjhTdHJpbmddKTsKLX0KLQotTlNTdHJpbmcgKmdldFJlcXVpcmVkU3RyaW5nQXJndW1l
bnQoTlNTdHJpbmcgKnBhcmFtZXRlcikKLXsKLSAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMg
PSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdOwotICAgIE5TU3RyaW5nICph
cmd1bWVudCA9IFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6cGFyYW1ldGVyXTsKLQotICAgIGlmICgh
YXJndW1lbnQpIHsKLSAgICAgICAgTlNMb2coQCItJUAgaXMgcmVxdWlyZWQuIiwgcGFyYW1ldGVy
KTsKLSAgICAgICAgdXNhZ2UoKTsKLSAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0K
LSAgICByZXR1cm4gYXJndW1lbnQ7Ci19Ci0KLU5TQXJyYXkgKmdldER1bXBUb29sQXJndW1lbnRz
KCkKLXsKLSAgICBOU011dGFibGVBcnJheSAqZHVtcFRvb2xBcmd1bWVudHMgPSBbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0XTsKLSAgICBOU0FycmF5ICpwcm9jZXNzQXJncyA9IFtbTlNQcm9j
ZXNzSW5mbyBwcm9jZXNzSW5mb10gYXJndW1lbnRzXTsKLSAgICBCT09MIGFwcGVuZGluZyA9IE5P
OwotICAgIGZvciAoTlNTdHJpbmcgKmFyZyBpbiBwcm9jZXNzQXJncykgewotICAgICAgICBpZiAo
W2FyZyBpc0VxdWFsVG9TdHJpbmc6QCItLSJdKSB7Ci0gICAgICAgICAgICBhcHBlbmRpbmcgPSBZ
RVM7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoYXBwZW5k
aW5nKQotICAgICAgICAgICAgW2R1bXBUb29sQXJndW1lbnRzIGFkZE9iamVjdDphcmddOwotICAg
IH0KLSAgICByZXR1cm4gZHVtcFRvb2xBcmd1bWVudHM7Ci19Ci0KLXZvaWQgZmluaXNoKCkKLXsK
LSAgICBbcmVsYXlDb250cm9sbGVyIGZpbmlzaF07Ci19Ci0KLXZvaWQgcmVjZWl2ZWRTaWduYWwo
aW50IHNpZ25hbCkKLXsKLSAgICBleGl0KEVYSVRfU1VDQ0VTUyk7Ci19Ci0KLWludCBtYWluKGlu
dCBhcmdjLCBjb25zdCBjaGFyICogYXJndltdKQotewotICAgIEBhdXRvcmVsZWFzZXBvb2wgewot
ICAgICAgICBOU0FycmF5ICpoZWxwQXJndW1lbnRzID0gQFtAIi1oIiwgQCItLWhlbHAiXTsKLSAg
ICAgICAgZm9yIChOU1N0cmluZyAqaGVscEFyZ3VtZW50IGluIGhlbHBBcmd1bWVudHMpIHsKLSAg
ICAgICAgICAgIGlmIChbW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBhcmd1bWVudHNdIGlu
ZGV4T2ZPYmplY3Q6aGVscEFyZ3VtZW50XSAhPSBOU05vdEZvdW5kKSB7Ci0gICAgICAgICAgICAg
ICAgdXNhZ2UoKTsKLSAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotI2lmIFVTRV9TSU1fU0VSVklDRV9DT05URVhUCi0gICAgICAg
IE5TU3RyaW5nICpkZXZlbG9wZXJEaXJlY3RvcnkgPSBnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50
KEAiZGV2ZWxvcGVyRGlyIik7Ci0jZW5kaWYKLSAgICAgICAgTlNVVUlEICp1ZGlkID0gW1tOU1VV
SUQgYWxsb2NdIGluaXRXaXRoVVVJRFN0cmluZzpnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAi
dWRpZCIpXTsKLSAgICAgICAgTlNTdHJpbmcgKmFwcFBhdGggPSBnZXRSZXF1aXJlZFN0cmluZ0Fy
Z3VtZW50KEAiYXBwIik7Ci0gICAgICAgIE5TU3RyaW5nICpwcm9kdWN0RGlyZWN0b3J5ID0gZ2V0
UmVxdWlyZWRTdHJpbmdBcmd1bWVudChAInByb2R1Y3REaXIiKTsKLSAgICAgICAgTlNBcnJheSAq
ZHVtcFRvb2xBcmd1bWVudHMgPSBnZXREdW1wVG9vbEFyZ3VtZW50cygpOwotCi0jaWYgVVNFX1NJ
TV9TRVJWSUNFX0NPTlRFWFQKLSAgICAgICAgTlNFcnJvciAqZXJyb3I7Ci0gICAgICAgIFNpbVNl
cnZpY2VDb250ZXh0ICpzZXJ2aWNlQ29udGV4dCA9IFtTaW1TZXJ2aWNlQ29udGV4dCBzaGFyZWRT
ZXJ2aWNlQ29udGV4dEZvckRldmVsb3BlckRpcjpkZXZlbG9wZXJEaXJlY3RvcnkgZXJyb3I6JmVy
cm9yXTsKLSAgICAgICAgaWYgKCFzZXJ2aWNlQ29udGV4dCkgewotICAgICAgICAgICAgTlNMb2co
QCJEZXZpY2UgY29udGV4dCBjb3VsZG4ndCBiZSBmb3VuZDogJUAiLCBlcnJvcik7Ci0gICAgICAg
ICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgIH0KLSAgICAgICAgU2ltRGV2aWNlU2V0
ICpkZXZpY2VTZXQgPSBbc2VydmljZUNvbnRleHQgZGVmYXVsdERldmljZVNldFdpdGhFcnJvcjpu
aWxdOwotICAgICAgICBpZiAoIWRldmljZVNldCkgewotICAgICAgICAgICAgTlNMb2coQCJEZWZh
dWx0IGRldmljZSBzZXQgY291bGRuJ3QgYmUgZm91bmQ6ICVAIiwgZXJyb3IpOwotICAgICAgICAg
ICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0gICAgICAgIFNpbURldmljZSAqZGV2
aWNlID0gW2RldmljZVNldC5kZXZpY2VzQnlVRElEIG9iamVjdEZvcktleTp1ZGlkXTsKLSNlbHNl
Ci0gICAgICAgIFNpbURldmljZSAqZGV2aWNlID0gW1NpbURldmljZVNldC5kZWZhdWx0U2V0LmRl
dmljZXNCeVVESUQgb2JqZWN0Rm9yS2V5OnVkaWRdOwotI2VuZGlmCi0gICAgICAgIGlmICghZGV2
aWNlKSB7Ci0gICAgICAgICAgICBOU0xvZyhAIkRldmljZSAlQCBjb3VsZG4ndCBiZSBmb3VuZCIs
IHVkaWQpOwotICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmVsYXlDb250cm9sbGVyID0gW1tMVFJlbGF5Q29udHJvbGxlciBhbGxvY10gaW5pdFdp
dGhEZXZpY2U6ZGV2aWNlIHByb2R1Y3REaXI6cHJvZHVjdERpcmVjdG9yeSBhcHBQYXRoOmFwcFBh
dGggZGV2aWNlVURJRDp1ZGlkIGR1bXBUb29sQXJndW1lbnRzOmR1bXBUb29sQXJndW1lbnRzXTsK
LSAgICAgICAgW3JlbGF5Q29udHJvbGxlciBzdGFydF07Ci0KLSAgICAgICAgYXRleGl0KGZpbmlz
aCk7Ci0gICAgICAgIHNpZ25hbChTSUdJTlQsIHJlY2VpdmVkU2lnbmFsKTsKLSAgICAgICAgc2ln
bmFsKFNJR1RFUk0sIHJlY2VpdmVkU2lnbmFsKTsKLQotICAgICAgICBbW05TUnVuTG9vcCBtYWlu
UnVuTG9vcF0gcnVuXTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19CkluZGV4OiBUb29scy9MYXlv
dXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29scy9MYXlvdXRUZXN0
UmVsYXkvTGF5b3V0VGVzdFJlbGF5Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKG5vbmV4aXN0
ZW50KQpAQCAtMSwyMDIgKzAsMCBAQAotLy8gISQqVVRGOCokIQotewotCWFyY2hpdmVWZXJzaW9u
ID0gMTsKLQljbGFzc2VzID0gewotCX07Ci0Jb2JqZWN0VmVyc2lvbiA9IDQ2OwotCW9iamVjdHMg
PSB7Ci0KLS8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCi0JCTJFOEQzRUY4MTk4ODFE
NDMwMDRGNkNDMiAvKiBtYWluLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRThEM0VGNzE5ODgxRDQzMDA0RjZDQzIgLyogbWFpbi5tICovOyB9OwotCQky
RThEM0YwMjE5ODgxRkQwMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkubSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOEQzRjAxMTk4ODFGRDAwMDRGNkNDMiAv
KiBMVFBpcGVSZWxheS5tICovOyB9OwotCQkyRThEM0YwNjE5ODgyNDA2MDA0RjZDQzIgLyogTFRS
ZWxheUNvbnRyb2xsZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJFOEQzRjA1MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5tICov
OyB9OwotLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWENvcHlG
aWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCQkyRThEM0VGMjE5ODgxRDQzMDA0RjZDQzIgLyog
Q29weUZpbGVzICovID0gewotCQkJaXNhID0gUEJYQ29weUZpbGVzQnVpbGRQaGFzZTsKLQkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlkc3RQYXRoID0gL3Vzci9zaGFyZS9tYW4v
bWFuMS87Ci0JCQlkc3RTdWJmb2xkZXJTcGVjID0gMDsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAxOwotCQl9OwotLyogRW5kIFBC
WENvcHlGaWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhGaWxlUmVmZXJl
bmNlIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjQxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RS
ZWxheSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNv
bXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gTGF5
b3V0VGVzdFJlbGF5OyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQkyRThE
M0VGNzE5ODgxRDQzMDA0RjZDQzIgLyogbWFpbi5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBtYWluLm07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAv
KiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBuYW1lID0gRGVidWdSZWxlYXNlLnhjY29u
ZmlnOyBwYXRoID0gQ29uZmlndXJhdGlvbnMvRGVidWdSZWxlYXNlLnhjY29uZmlnOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0VGRjE5ODgxRTI1MDA0RjZDQzIgLyogQmFzZS54
Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQueGNjb25maWc7IG5hbWUgPSBCYXNlLnhjY29uZmlnOyBwYXRoID0gQ29uZmlndXJhdGlv
bnMvQmFzZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDAx
OTg4MUYyOTAwNEY2Q0MyIC8qIExUUmVsYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTFRSZWxheS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0YwMTE5ODgxRkQwMDA0RjZDQzIgLyog
TFRQaXBlUmVsYXkubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gTFRQaXBl
UmVsYXkubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDMxOTg4MUZFMjAw
NEY2Q0MyIC8qIExUUGlwZVJlbGF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExUUGlwZVJlbGF5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOEQzRjA0MTk4ODI0MDYwMDRGNkNDMiAvKiBM
VFJlbGF5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMVFJl
bGF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0YwNTE5
ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5vYmpjOyBwYXRoID0gTFRSZWxheUNvbnRyb2xsZXIubTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQ0UxRkJDMTUxQjI5MEU3OTAwMDEzNkY1IC8qIENvcmVTaW11bGF0b3JTUEku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29yZVNpbXVsYXRvclNQSS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlv
biAqLwotCi0vKiBCZWdpbiBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0JCTJF
OEQzRUYxMTk4ODFENDMwMDRGNkNDMiAvKiBGcmFtZXdvcmtzICovID0gewotCQkJaXNhID0gUEJY
RnJhbWV3b3Jrc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3Owot
CQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7Ci0JCX07Ci0vKiBFbmQgUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwot
Ci0vKiBCZWdpbiBQQlhHcm91cCBzZWN0aW9uICovCi0JCTJFOEQzRUVCMTk4ODFENDMwMDRGNkND
MiA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMkU4RDNFRkYx
OTg4MUUyNTAwNEY2Q0MyIC8qIEJhc2UueGNjb25maWcgKi8sCi0JCQkJMkU4RDNFRkUxOTg4MUUx
MzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLywKLQkJCQkyRThEM0VGNjE5ODgx
RDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovLAotCQkJCTJFOEQzRUY1MTk4ODFENDMw
MDRGNkNDMiAvKiBQcm9kdWN0cyAqLywKLQkJCSk7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwotCQl9OwotCQkyRThEM0VGNTE5ODgxRDQzMDA0RjZDQzIgLyogUHJvZHVjdHMgKi8gPSB7Ci0J
CQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTJFOEQzRUY0MTk4ODFENDMw
MDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8sCi0JCQkpOwotCQkJbmFtZSA9IFByb2R1Y3Rz
OwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJMkU4RDNFRjYxOTg4MUQ0MzAw
NEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJ
Y2hpbGRyZW4gPSAoCi0JCQkJMkU4RDNFRjcxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSAqLywK
LQkJCQlDRTFGQkMxNTFCMjkwRTc5MDAwMTM2RjUgLyogQ29yZVNpbXVsYXRvclNQSS5oICovLAot
CQkJCTJFOEQzRjAwMTk4ODFGMjkwMDRGNkNDMiAvKiBMVFJlbGF5LmggKi8sCi0JCQkJMkU4RDNG
MDExOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lm0gKi8sCi0JCQkJMkU4RDNGMDMxOTg4
MUZFMjAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5LmggKi8sCi0JCQkJMkU4RDNGMDQxOTg4MjQwNjAw
NEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLmggKi8sCi0JCQkJMkU4RDNGMDUxOTg4MjQwNjAw
NEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLm0gKi8sCi0JCQkpOwotCQkJcGF0aCA9IExheW91
dFRlc3RSZWxheTsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0vKiBFbmQgUEJY
R3JvdXAgc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLwot
CQkyRThEM0VGMzE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovID0gewotCQkJ
aXNhID0gUEJYTmF0aXZlVGFyZ2V0OwotCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDJFOEQz
RUZCMTk4ODFENDMwMDRGNkNDMiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5h
dGl2ZVRhcmdldCAiTGF5b3V0VGVzdFJlbGF5IiAqLzsKLQkJCWJ1aWxkUGhhc2VzID0gKAotCQkJ
CTJFOEQzRUYwMTk4ODFENDMwMDRGNkNDMiAvKiBTb3VyY2VzICovLAotCQkJCTJFOEQzRUYxMTk4
ODFENDMwMDRGNkNDMiAvKiBGcmFtZXdvcmtzICovLAotCQkJCTJFOEQzRUYyMTk4ODFENDMwMDRG
NkNDMiAvKiBDb3B5RmlsZXMgKi8sCi0JCQkpOwotCQkJYnVpbGRSdWxlcyA9ICgKLQkJCSk7Ci0J
CQlkZXBlbmRlbmNpZXMgPSAoCi0JCQkpOwotCQkJbmFtZSA9IExheW91dFRlc3RSZWxheTsKLQkJ
CXByb2R1Y3ROYW1lID0gTGF5b3V0VGVzdFJlbGF5OwotCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDJF
OEQzRUY0MTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi87Ci0JCQlwcm9kdWN0
VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLnRvb2wiOwotCQl9OwotLyogRW5kIFBCWE5h
dGl2ZVRhcmdldCBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWFByb2plY3Qgc2VjdGlvbiAqLwot
CQkyRThEM0VFQzE5ODgxRDQzMDA0RjZDQzIgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7Ci0JCQlp
c2EgPSBQQlhQcm9qZWN0OwotCQkJYXR0cmlidXRlcyA9IHsKLQkJCQlMYXN0VXBncmFkZUNoZWNr
ID0gMDYwMDsKLQkJCQlPUkdBTklaQVRJT05OQU1FID0gIkFwcGxlLCBJbmMuIjsKLQkJCQlUYXJn
ZXRBdHRyaWJ1dGVzID0gewotCQkJCQkyRThEM0VGMzE5ODgxRDQzMDA0RjZDQzIgPSB7Ci0JCQkJ
CQlDcmVhdGVkT25Ub29sc1ZlcnNpb24gPSA2LjA7Ci0JCQkJCX07Ci0JCQkJfTsKLQkJCX07Ci0J
CQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMkU4RDNFRUYxOTg4MUQ0MzAwNEY2Q0MyIC8qIEJ1
aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiTGF5b3V0VGVzdFJlbGF5IiAq
LzsKLQkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDMuMiI7Ci0JCQlkZXZlbG9wbWVu
dFJlZ2lvbiA9IEVuZ2xpc2g7Ci0JCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMDsKLQkJCWtu
b3duUmVnaW9ucyA9ICgKLQkJCQllbiwKLQkJCSk7Ci0JCQltYWluR3JvdXAgPSAyRThEM0VFQjE5
ODgxRDQzMDA0RjZDQzI7Ci0JCQlwcm9kdWN0UmVmR3JvdXAgPSAyRThEM0VGNTE5ODgxRDQzMDA0
RjZDQzIgLyogUHJvZHVjdHMgKi87Ci0JCQlwcm9qZWN0RGlyUGF0aCA9ICIiOwotCQkJcHJvamVj
dFJvb3QgPSAiIjsKLQkJCXRhcmdldHMgPSAoCi0JCQkJMkU4RDNFRjMxOTg4MUQ0MzAwNEY2Q0My
IC8qIExheW91dFRlc3RSZWxheSAqLywKLQkJCSk7Ci0JCX07Ci0vKiBFbmQgUEJYUHJvamVjdCBz
ZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQkJ
MkU4RDNFRjAxOTg4MUQ0MzAwNEY2Q0MyIC8qIFNvdXJjZXMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhT
b3VyY2VzQnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlm
aWxlcyA9ICgKLQkJCQkyRThEM0YwNjE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xs
ZXIubSBpbiBTb3VyY2VzICovLAotCQkJCTJFOEQzRUY4MTk4ODFENDMwMDRGNkNDMiAvKiBtYWlu
Lm0gaW4gU291cmNlcyAqLywKLQkJCQkyRThEM0YwMjE5ODgxRkQwMDA0RjZDQzIgLyogTFRQaXBl
UmVsYXkubSBpbiBTb3VyY2VzICovLAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwotCQl9OwotLyogRW5kIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rp
b24gKi8KLQotLyogQmVnaW4gWENCdWlsZENvbmZpZ3VyYXRpb24gc2VjdGlvbiAqLwotCQkyRThE
M0VGOTE5ODgxRDQzMDA0RjZDQzIgLyogRGVidWcgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29u
ZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gMkU4RDNFRkUxOTg4
MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLzsKLQkJCWJ1aWxkU2V0dGlu
Z3MgPSB7Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVnOwotCQl9OwotCQkyRThEM0VGQTE5ODgxRDQz
MDA0RjZDQzIgLyogUmVsZWFzZSAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9u
OwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAyRThEM0VGRTE5ODgxRTEzMDA0RjZD
QzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJ
CX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJMkU4RDNFRkMxOTg4MUQ0MzAwNEY2Q0My
IC8qIERlYnVnICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNl
Q29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1
Z1JlbGVhc2UueGNjb25maWcgKi87Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJCVBST0RVQ1Rf
TkFNRSA9ICIkKFRBUkdFVF9OQU1FKSI7Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVnOwotCQl9Owot
CQkyRThEM0VGRDE5ODgxRDQzMDA0RjZDQzIgLyogUmVsZWFzZSAqLyA9IHsKLQkJCWlzYSA9IFhD
QnVpbGRDb25maWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAyRThE
M0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovOwotCQkJYnVp
bGRTZXR0aW5ncyA9IHsKLQkJCQlQUk9EVUNUX05BTUUgPSAiJChUQVJHRVRfTkFNRSkiOwotCQkJ
fTsKLQkJCW5hbWUgPSBSZWxlYXNlOwotCQl9OwotLyogRW5kIFhDQnVpbGRDb25maWd1cmF0aW9u
IHNlY3Rpb24gKi8KLQotLyogQmVnaW4gWENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCi0J
CTJFOEQzRUVGMTk4ODFENDMwMDRGNkNDMiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9y
IFBCWFByb2plY3QgIkxheW91dFRlc3RSZWxheSIgKi8gPSB7Ci0JCQlpc2EgPSBYQ0NvbmZpZ3Vy
YXRpb25MaXN0OwotCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKLQkJCQkyRThEM0VGOTE5ODgx
RDQzMDA0RjZDQzIgLyogRGVidWcgKi8sCi0JCQkJMkU4RDNFRkExOTg4MUQ0MzAwNEY2Q0MyIC8q
IFJlbGVhc2UgKi8sCi0JCQkpOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAw
OwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJMkU4RDNF
RkIxOTg4MUQ0MzAwNEY2Q0MyIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0
aXZlVGFyZ2V0ICJMYXlvdXRUZXN0UmVsYXkiICovID0gewotCQkJaXNhID0gWENDb25maWd1cmF0
aW9uTGlzdDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCi0JCQkJMkU4RDNFRkMxOTg4MUQ0
MzAwNEY2Q0MyIC8qIERlYnVnICovLAotCQkJCTJFOEQzRUZEMTk4ODFENDMwMDRGNkNDMiAvKiBS
ZWxlYXNlICovLAotCQkJKTsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsK
LQkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJlbGVhc2U7Ci0JCX07Ci0vKiBFbmQgWEND
b25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCi0JfTsKLQlyb290T2JqZWN0ID0gMkU4RDNFRUMx
OTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2plY3Qgb2JqZWN0ICovOwotfQpJbmRleDogVG9vbHMvTGF5
b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2oJKHJldmlzaW9uIDIw
OTg4NikKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVwcm9q
CShub25leGlzdGVudCkKClByb3BlcnR5IGNoYW5nZXMgb246IFRvb2xzL0xheW91dFRlc3RSZWxh
eS9MYXlvdXRUZXN0UmVsYXkueGNvZGVwcm9qCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmlnbm9y
ZQojIyAtMSwyICswLDAgIyMKLXByb2plY3QueGN3b3Jrc3BhY2UKLXhjdXNlcmRhdGEKSW5kZXg6
IFRvb2xzL0xheW91dFRlc3RSZWxheS9NYWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlv
dXRUZXN0UmVsYXkvTWFrZWZpbGUJKHJldmlzaW9uIDIwOTg4NikKKysrIFRvb2xzL0xheW91dFRl
c3RSZWxheS9NYWtlZmlsZQkobm9uZXhpc3RlbnQpCkBAIC0xLDYgKzAsMCBAQAotU0NSSVBUU19Q
QVRIID0gLi4vU2NyaXB0cwotCi1PVkVSUklERV9BUkNIUyA9IGRlZmF1bHQKLU9WRVJSSURFX1NE
S1JPT1QgPSBkZWZhdWx0Ci0KLWluY2x1ZGUgLi4vLi4vTWFrZWZpbGUuc2hhcmVkCkluZGV4OiBU
b29scy9MYXlvdXRUZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZp
ZwkocmV2aXNpb24gMjA5ODg2KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRp
b25zL0Jhc2UueGNjb25maWcJKG5vbmV4aXN0ZW50KQpAQCAtMSw2OCArMCwwIEBACi0vLyBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0vLyBhcmUgbWV0OgotLy8gMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLS8vIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0vLyAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
Ly8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotLy8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLS8vIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotLy8gUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLS8vIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
Ly8gRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotLy8gUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0vLyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0vLyBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgIi4uLy4uLy4uLy4uL0ludGVy
bmFsL0NvbmZpZ3VyYXRpb25zL0hhdmVJbnRlcm5hbFNESy54Y2NvbmZpZyIKLQotVVNFX0lOVEVS
TkFMX1NESyA9ICQoVVNFX0lOVEVSTkFMX1NES18kKENPTkZJR1VSQVRJT04pKTsKLVVTRV9JTlRF
Uk5BTF9TREtfUHJvZHVjdGlvbiA9IFlFUzsKLVVTRV9JTlRFUk5BTF9TREtfRGVidWcgPSAkKEhB
VkVfSU5URVJOQUxfU0RLKTsKLVVTRV9JTlRFUk5BTF9TREtfUmVsZWFzZSA9ICQoSEFWRV9JTlRF
Uk5BTF9TREspOwotCi1DTEFOR19DWFhfTEFOR1VBR0VfU1RBTkRBUkQgPSBnbnUrKzB4OwotQ0xB
TkdfRU5BQkxFX09CSkNfQVJDID0gWUVTOwotQ0xBTkdfV0FSTl9DWFgwWF9FWFRFTlNJT05TID0g
Tk87Ci1IRUFERVJfU0VBUkNIX1BBVEhTID0gJChCVUlMVF9QUk9EVUNUU19ESVIpL3Vzci9sb2Nh
bC9pbmNsdWRlICQoV0VCQ09SRV9QUklWQVRFX0hFQURFUlNfRElSKS9Gb3J3YXJkaW5nSGVhZGVy
cyAkKFNSQ1JPT1QpLy4uLy4uL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UgJChORVhUX1JPT1Qp
L3Vzci9sb2NhbC9pbmNsdWRlL1dlYkNvcmVUZXN0U3VwcG9ydDsKLUdDQ19QUkVQUk9DRVNTT1Jf
REVGSU5JVElPTlMgPSAkKERFQlVHX0RFRklORVMpIEVOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVDsK
LURFQlVHX0lORk9STUFUSU9OX0ZPUk1BVCA9IGR3YXJmLXdpdGgtZHN5bTsKLVBSRUJJTkRJTkcg
PSBOTwotR0NDX0NfTEFOR1VBR0VfU1RBTkRBUkQgPSBnbnU5OQotR0NDX0VOQUJMRV9DUFBfRVhD
RVBUSU9OUyA9IE5POwotR0NDX0VOQUJMRV9DUFBfUlRUSSA9IE5POwotR0NDX1BSRUNPTVBJTEVf
UFJFRklYX0hFQURFUiA9IFlFUwotR0NDX1RSRUFUX1dBUk5JTkdTX0FTX0VSUk9SUyA9IFlFUwot
R0NDX1ZFUlNJT04gPSBjb20uYXBwbGUuY29tcGlsZXJzLmxsdm0uY2xhbmcuMV8wOwotR0NDX1dB
Uk5fQUJPVVRfREVQUkVDQVRFRF9GVU5DVElPTlMgPSBOTwotR0NDX1dBUk5fVU5VU0VEX0ZVTkNU
SU9OID0gWUVTCi1HQ0NfV0FSTl9VTlVTRURfVkFSSUFCTEUgPSBZRVMKLUdDQ19XQVJOXzY0X1RP
XzMyX0JJVF9DT05WRVJTSU9OW2FyY2g9eDg2XzY0XSA9IE5POwotV0FSTklOR19DRkxBR1MgPSAt
V2FsbCAtVyAtV25vLXVudXNlZC1wYXJhbWV0ZXIgLVd1bmRlZgotCi1ERUJVR19ERUZJTkVTX2Rl
YnVnID0gOwotREVCVUdfREVGSU5FU19ub3JtYWwgPSBOREVCVUc7Ci1ERUJVR19ERUZJTkVTID0g
JChERUJVR19ERUZJTkVTXyQoQ1VSUkVOVF9WQVJJQU5UKSk7Ci0KLVRBUkdFVF9NQUNfT1NfWF9W
RVJTSU9OX01BSk9SID0gJChUQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUiQoTUFDT1NYX0RF
UExPWU1FTlRfVEFSR0VUOnN1ZmZpeDppZGVudGlmaWVyKSk7Ci1UQVJHRVRfTUFDX09TX1hfVkVS
U0lPTl9NQUpPUl8xMCA9IDEwMTAwMDsKLVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SXzEx
ID0gMTAxMTAwOwotVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1JfMTIgPSAxMDEyMDA7Ci1U
QVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUl8xMyA9IDEwMTMwMDsKLQotU0RLUk9PVCA9IG1h
Y29zeC5pbnRlcm5hbDsKLQotU1VQUE9SVEVEX1BMQVRGT1JNUyA9IG1hY29zeDsKLQotVE9PTENI
QUlOUyA9IGRlZmF1bHQ7Ci0KLU9USEVSX0NGTEFHUyA9ICQoQVNBTl9PVEhFUl9DRkxBR1MpOwot
T1RIRVJfQ1BMVVNQTFVTRkxBR1MgPSAkKEFTQU5fT1RIRVJfQ1BMVVNQTFVTRkxBR1MpOwotT1RI
RVJfTERGTEFHUyA9ICQoQVNBTl9PVEhFUl9MREZMQUdTKTsKSW5kZXg6IFRvb2xzL0xheW91dFRl
c3RSZWxheS9Db25maWd1cmF0aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25maWcKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0RlYnVnUmVsZWFzZS54Y2Nv
bmZpZwkocmV2aXNpb24gMjA5ODg2KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3Vy
YXRpb25zL0RlYnVnUmVsZWFzZS54Y2NvbmZpZwkobm9uZXhpc3RlbnQpCkBAIC0xLDQyICswLDAg
QEAKLS8vIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLS8vIGFyZSBtZXQ6Ci0vLyAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotLy8gMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLS8vICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0vLyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotLy8gSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0vLyBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotLy8gQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0vLyBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0vLyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLS8vIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLS8v
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSAiQmFzZS54
Y2NvbmZpZyIKLQotQVJDSFMgPSAkKEFSQ0hTX1NUQU5EQVJEXzY0X0JJVCk7Ci0KLVRBUkdFVF9N
QUNfT1NfWF9WRVJTSU9OX01BSk9SID0gJChNQUNfT1NfWF9WRVJTSU9OX01BSk9SKTsKLQotTUFD
T1NYX0RFUExPWU1FTlRfVEFSR0VUID0gJChNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfJChUQVJH
RVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUikpCi1NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfMTAx
MDAwID0gMTAuMTA7Ci1NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfMTAxMTAwID0gMTAuMTE7Ci1N
QUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfMTAxMjAwID0gMTAuMTI7Ci1NQUNPU1hfREVQTE9ZTUVO
VF9UQVJHRVRfMTAxMzAwID0gMTAuMTM7Ci0KLUZSQU1FV09SS19TRUFSQ0hfUEFUSFMgPSAkKERF
VkVMT1BFUl9ESVIpL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3M7Ci1MRF9SVU5QQVRIX1NFQVJD
SF9QQVRIUyA9ICQoREVWRUxPUEVSX0RJUikvTGlicmFyeS9Qcml2YXRlRnJhbWV3b3JrczsKLU9U
SEVSX0xERkxBR1MgPSAtZnJhbWV3b3JrIENvcmVTaW11bGF0b3IgLWZyYW1ld29yayBBcHBLaXQ7
Ci0KLVNES1JPT1QgPSAkKFNES1JPT1RfbWFjb3N4XyQoVVNFX0lOVEVSTkFMX1NESykpOwotU0RL
Uk9PVF9tYWNvc3hfID0gbWFjb3N4OwotU0RLUk9PVF9tYWNvc3hfWUVTID0gbWFjb3N4LmludGVy
bmFsOwpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9M
YXlvdXRUZXN0UmVsYXkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA5ODg2
KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShub25leGlzdGVudCkKQEAgLTEsMjAyICswLDAgQEAKLS8vICEkKlVURjgq
JCEKLXsKLQlhcmNoaXZlVmVyc2lvbiA9IDE7Ci0JY2xhc3NlcyA9IHsKLQl9OwotCW9iamVjdFZl
cnNpb24gPSA0NjsKLQlvYmplY3RzID0gewotCi0vKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlv
biAqLwotCQkyRThEM0VGODE5ODgxRDQzMDA0RjZDQzIgLyogbWFpbi5tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU4RDNFRjcxOTg4MUQ0MzAwNEY2Q0My
IC8qIG1haW4ubSAqLzsgfTsKLQkJMkU4RDNGMDIxOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJl
bGF5Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRThE
M0YwMTE5ODgxRkQwMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkubSAqLzsgfTsKLQkJMkU4RDNGMDYx
OTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLm0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRThEM0YwNTE5ODgyNDA2MDA0RjZDQzIgLyog
TFRSZWxheUNvbnRyb2xsZXIubSAqLzsgfTsKLS8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAq
LwotCi0vKiBCZWdpbiBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQkJMkU4RDNF
RjIxOTg4MUQ0MzAwNEY2Q0MyIC8qIENvcHlGaWxlcyAqLyA9IHsKLQkJCWlzYSA9IFBCWENvcHlG
aWxlc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZHN0
UGF0aCA9IC91c3Ivc2hhcmUvbWFuL21hbjEvOwotCQkJZHN0U3ViZm9sZGVyU3BlYyA9IDA7Ci0J
CQlmaWxlcyA9ICgKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMTsKLQkJfTsKLS8qIEVuZCBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQot
LyogQmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCi0JCTJFOEQzRUY0MTk4ODFENDMw
MDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJ
bkluZGV4ID0gMDsgcGF0aCA9IExheW91dFRlc3RSZWxheTsgc291cmNlVHJlZSA9IEJVSUxUX1BS
T0RVQ1RTX0RJUjsgfTsKLQkJMkU4RDNFRjcxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5vYmpjOyBwYXRoID0gbWFpbi5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThE
M0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgbmFt
ZSA9IERlYnVnUmVsZWFzZS54Y2NvbmZpZzsgcGF0aCA9IENvbmZpZ3VyYXRpb25zL0RlYnVnUmVs
ZWFzZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNFRkYxOTg4
MUUyNTAwNEY2Q0MyIC8qIEJhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBuYW1lID0gQmFzZS54Y2NvbmZp
ZzsgcGF0aCA9IENvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTJFOEQzRjAwMTk4ODFGMjkwMDRGNkNDMiAvKiBMVFJlbGF5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IExUUmVsYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNG
MDExOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMub2JqYzsgcGF0aCA9IExUUGlwZVJlbGF5Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTJFOEQzRjAzMTk4ODFGRTIwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBMVFBpcGVSZWxheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0Yw
NDE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTFRSZWxheUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMkU4RDNGMDUxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVy
Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IExUUmVsYXlDb250cm9sbGVy
Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNFMUZCQzE1MUIyOTBFNzkwMDAxMzZG
NSAvKiBDb3JlU2ltdWxhdG9yU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENvcmVTaW11bGF0b3JTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLS8qIEVuZCBQ
QlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxk
UGhhc2Ugc2VjdGlvbiAqLwotCQkyRThEM0VGMTE5ODgxRDQzMDA0RjZDQzIgLyogRnJhbWV3b3Jr
cyAqLyA9IHsKLQkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rp
b25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9OwotLyogRW5kIFBCWEZyYW1ld29ya3NC
dWlsZFBoYXNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYR3JvdXAgc2VjdGlvbiAqLwotCQky
RThEM0VFQjE5ODgxRDQzMDA0RjZDQzIgPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxk
cmVuID0gKAotCQkJCTJFOEQzRUZGMTk4ODFFMjUwMDRGNkNDMiAvKiBCYXNlLnhjY29uZmlnICov
LAotCQkJCTJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcg
Ki8sCi0JCQkJMkU4RDNFRjYxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLywK
LQkJCQkyRThEM0VGNTE5ODgxRDQzMDA0RjZDQzIgLyogUHJvZHVjdHMgKi8sCi0JCQkpOwotCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJMkU4RDNFRjUxOTg4MUQ0MzAwNEY2Q0My
IC8qIFByb2R1Y3RzICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgK
LQkJCQkyRThEM0VGNDE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovLAotCQkJ
KTsKLQkJCW5hbWUgPSBQcm9kdWN0czsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07
Ci0JCTJFOEQzRUY2MTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8gPSB7Ci0J
CQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTJFOEQzRUY3MTk4ODFENDMw
MDRGNkNDMiAvKiBtYWluLm0gKi8sCi0JCQkJQ0UxRkJDMTUxQjI5MEU3OTAwMDEzNkY1IC8qIENv
cmVTaW11bGF0b3JTUEkuaCAqLywKLQkJCQkyRThEM0YwMDE5ODgxRjI5MDA0RjZDQzIgLyogTFRS
ZWxheS5oICovLAotCQkJCTJFOEQzRjAxMTk4ODFGRDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5t
ICovLAotCQkJCTJFOEQzRjAzMTk4ODFGRTIwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5oICovLAot
CQkJCTJFOEQzRjA0MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5oICovLAot
CQkJCTJFOEQzRjA1MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5tICovLAot
CQkJKTsKLQkJCXBhdGggPSBMYXlvdXRUZXN0UmVsYXk7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOwotCQl9OwotLyogRW5kIFBCWEdyb3VwIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYTmF0
aXZlVGFyZ2V0IHNlY3Rpb24gKi8KLQkJMkU4RDNFRjMxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91
dFRlc3RSZWxheSAqLyA9IHsKLQkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKLQkJCWJ1aWxkQ29u
ZmlndXJhdGlvbkxpc3QgPSAyRThEM0VGQjE5ODgxRDQzMDA0RjZDQzIgLyogQnVpbGQgY29uZmln
dXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIkxheW91dFRlc3RSZWxheSIgKi87Ci0J
CQlidWlsZFBoYXNlcyA9ICgKLQkJCQkyRThEM0VGMDE5ODgxRDQzMDA0RjZDQzIgLyogU291cmNl
cyAqLywKLQkJCQkyRThEM0VGMTE5ODgxRDQzMDA0RjZDQzIgLyogRnJhbWV3b3JrcyAqLywKLQkJ
CQkyRThEM0VGMjE5ODgxRDQzMDA0RjZDQzIgLyogQ29weUZpbGVzICovLAotCQkJKTsKLQkJCWJ1
aWxkUnVsZXMgPSAoCi0JCQkpOwotCQkJZGVwZW5kZW5jaWVzID0gKAotCQkJKTsKLQkJCW5hbWUg
PSBMYXlvdXRUZXN0UmVsYXk7Ci0JCQlwcm9kdWN0TmFtZSA9IExheW91dFRlc3RSZWxheTsKLQkJ
CXByb2R1Y3RSZWZlcmVuY2UgPSAyRThEM0VGNDE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVz
dFJlbGF5ICovOwotCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS50b29s
IjsKLQkJfTsKLS8qIEVuZCBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQ
QlhQcm9qZWN0IHNlY3Rpb24gKi8KLQkJMkU4RDNFRUMxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2pl
Y3Qgb2JqZWN0ICovID0gewotCQkJaXNhID0gUEJYUHJvamVjdDsKLQkJCWF0dHJpYnV0ZXMgPSB7
Ci0JCQkJTGFzdFVwZ3JhZGVDaGVjayA9IDA2MDA7Ci0JCQkJT1JHQU5JWkFUSU9OTkFNRSA9ICJB
cHBsZSwgSW5jLiI7Ci0JCQkJVGFyZ2V0QXR0cmlidXRlcyA9IHsKLQkJCQkJMkU4RDNFRjMxOTg4
MUQ0MzAwNEY2Q0MyID0gewotCQkJCQkJQ3JlYXRlZE9uVG9vbHNWZXJzaW9uID0gNi4wOwotCQkJ
CQl9OwotCQkJCX07Ci0JCQl9OwotCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDJFOEQzRUVG
MTk4ODFENDMwMDRGNkNDMiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2pl
Y3QgIkxheW91dFRlc3RSZWxheSIgKi87Ci0JCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29k
ZSAzLjIiOwotCQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBFbmdsaXNoOwotCQkJaGFzU2Nhbm5lZEZv
ckVuY29kaW5ncyA9IDA7Ci0JCQlrbm93blJlZ2lvbnMgPSAoCi0JCQkJZW4sCi0JCQkpOwotCQkJ
bWFpbkdyb3VwID0gMkU4RDNFRUIxOTg4MUQ0MzAwNEY2Q0MyOwotCQkJcHJvZHVjdFJlZkdyb3Vw
ID0gMkU4RDNFRjUxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2R1Y3RzICovOwotCQkJcHJvamVjdERp
clBhdGggPSAiIjsKLQkJCXByb2plY3RSb290ID0gIiI7Ci0JCQl0YXJnZXRzID0gKAotCQkJCTJF
OEQzRUYzMTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8sCi0JCQkpOwotCQl9
OwotLyogRW5kIFBCWFByb2plY3Qgc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhTb3VyY2VzQnVp
bGRQaGFzZSBzZWN0aW9uICovCi0JCTJFOEQzRUYwMTk4ODFENDMwMDRGNkNDMiAvKiBTb3VyY2Vz
ICovID0gewotCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1h
c2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkJMkU4RDNGMDYxOTg4MjQwNjAwNEY2
Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLm0gaW4gU291cmNlcyAqLywKLQkJCQkyRThEM0VGODE5
ODgxRDQzMDA0RjZDQzIgLyogbWFpbi5tIGluIFNvdXJjZXMgKi8sCi0JCQkJMkU4RDNGMDIxOTg4
MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lm0gaW4gU291cmNlcyAqLywKLQkJCSk7Ci0JCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKLS8qIEVuZCBQQlhT
b3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFhDQnVpbGRDb25maWd1cmF0
aW9uIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjkxOTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICovID0g
ewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJhdGlvblJl
ZmVyZW5jZSA9IDJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25m
aWcgKi87Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJfTsKLQkJCW5hbWUgPSBEZWJ1ZzsKLQkJ
fTsKLQkJMkU4RDNFRkExOTg4MUQ0MzAwNEY2Q0MyIC8qIFJlbGVhc2UgKi8gPSB7Ci0JCQlpc2Eg
PSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0g
MkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLzsKLQkJ
CWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQl9OwotCQkJbmFtZSA9IFJlbGVhc2U7Ci0JCX07Ci0JCTJF
OEQzRUZDMTk4ODFENDMwMDRGNkNDMiAvKiBEZWJ1ZyAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRD
b25maWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAyRThEM0VGRTE5
ODgxRTEzMDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0
aW5ncyA9IHsKLQkJCQlQUk9EVUNUX05BTUUgPSAiJChUQVJHRVRfTkFNRSkiOwotCQkJfTsKLQkJ
CW5hbWUgPSBEZWJ1ZzsKLQkJfTsKLQkJMkU4RDNFRkQxOTg4MUQ0MzAwNEY2Q0MyIC8qIFJlbGVh
c2UgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1
cmF0aW9uUmVmZXJlbmNlID0gMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFz
ZS54Y2NvbmZpZyAqLzsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJUFJPRFVDVF9OQU1FID0g
IiQoVEFSR0VUX05BTUUpIjsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLS8qIEVu
ZCBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFhDQ29uZmlndXJh
dGlvbkxpc3Qgc2VjdGlvbiAqLwotCQkyRThEM0VFRjE5ODgxRDQzMDA0RjZDQzIgLyogQnVpbGQg
Y29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJMYXlvdXRUZXN0UmVsYXkiICovID0g
ewotCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbnMg
PSAoCi0JCQkJMkU4RDNFRjkxOTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICovLAotCQkJCTJFOEQz
RUZBMTk4ODFENDMwMDRGNkNDMiAvKiBSZWxlYXNlICovLAotCQkJKTsKLQkJCWRlZmF1bHRDb25m
aWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJl
bGVhc2U7Ci0JCX07Ci0JCTJFOEQzRUZCMTk4ODFENDMwMDRGNkNDMiAvKiBCdWlsZCBjb25maWd1
cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiTGF5b3V0VGVzdFJlbGF5IiAqLyA9IHsK
LQkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25zID0g
KAotCQkJCTJFOEQzRUZDMTk4ODFENDMwMDRGNkNDMiAvKiBEZWJ1ZyAqLywKLQkJCQkyRThEM0VG
RDE5ODgxRDQzMDA0RjZDQzIgLyogUmVsZWFzZSAqLywKLQkJCSk7Ci0JCQlkZWZhdWx0Q29uZmln
dXJhdGlvbklzVmlzaWJsZSA9IDA7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxl
YXNlOwotCQl9OwotLyogRW5kIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLwotCX07Ci0J
cm9vdE9iamVjdCA9IDJFOEQzRUVDMTk4ODFENDMwMDRGNkNDMiAvKiBQcm9qZWN0IG9iamVjdCAq
LzsKLX0KSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvQ29yZVNp
bXVsYXRvclNQSS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRU
ZXN0UmVsYXkvQ29yZVNpbXVsYXRvclNQSS5oCShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29scy9M
YXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0NvcmVTaW11bGF0b3JTUEkuaAkobm9uZXhp
c3RlbnQpCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgX19oYXNfaW5j
bHVkZSg8Q29yZVNpbXVsYXRvci9Db3JlU2ltdWxhdG9yLmg+KQotCi0vKiBGSVhNRTogUmVtb3Zl
IHRoZSBiZWxvdyAjZGVmaW5lIG9uY2Ugd2UgcmVxdWlyZSBYY29kZSA3LjMgd2l0aCBpT1MgOS4z
IFNESyBvciBuZXdlci4gKi8KLSNkZWZpbmUgX19jb3Jlc2ltX3VuYXZhaWxhYmxlX21zZyhtc2cp
Ci0jaW1wb3J0IDxDb3JlU2ltdWxhdG9yL0NvcmVTaW11bGF0b3IuaD4KLQotLyogRklYTUU6IEFs
d2F5cyB1c2UgU2ltU2VydmljZUNvbnRleHQgb25jZSB3ZSByZXF1aXJlIFhjb2RlIDcuMyB3aXRo
IGlPUyA5LjMgU0RLIG9yIG5ld2VyLiAqLwotI2RlZmluZSBVU0VfU0lNX1NFUlZJQ0VfQ09OVEVY
VCBkZWZpbmVkKENPUkVTSU1fQVBJX01BWF9BTExPV0VEKQotCi0jZWxzZQotCi0jaW1wb3J0IDxG
b3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2RlZmluZSBVU0VfU0lNX1NFUlZJQ0VfQ09OVEVY
VCAxCi0KLSNkZWZpbmUga1NpbURldmljZUxhdW5jaEFwcGxpY2F0aW9uQXJndW1lbnRzIEAiYXJn
dW1lbnRzIgotI2RlZmluZSBrU2ltRGV2aWNlTGF1bmNoQXBwbGljYXRpb25FbnZpcm9ubWVudCBA
ImVudmlyb25tZW50IgotCi1AaW50ZXJmYWNlIFNpbURldmljZSA6IE5TT2JqZWN0Ci0tIChCT09M
KWluc3RhbGxBcHBsaWNhdGlvbjooTlNVUkwgKilpbnN0YWxsVVJMIHdpdGhPcHRpb25zOihOU0Rp
Y3Rpb25hcnkgKilvcHRpb25zIGVycm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICopZXJy
b3I7Ci0tIChwaWRfdClsYXVuY2hBcHBsaWNhdGlvbldpdGhJRDooTlNTdHJpbmcgKilidW5kbGVJ
RCBvcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zIGVycm9yOihOU0Vycm9yICogX19hdXRv
cmVsZWFzaW5nICopZXJyb3I7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgU2ltRGV2aWNlU2V0IDogTlNP
YmplY3QKLUBwcm9wZXJ0eSAocmVhZG9ubHksIGNvcHkpIE5TRGljdGlvbmFyeSAqZGV2aWNlc0J5
VURJRDsKLUBlbmQKLQotQGludGVyZmFjZSBTaW1TZXJ2aWNlQ29udGV4dCA6IE5TT2JqZWN0Ci0r
KFNpbVNlcnZpY2VDb250ZXh0ICopc2hhcmVkU2VydmljZUNvbnRleHRGb3JEZXZlbG9wZXJEaXI6
KE5TU3RyaW5nICopZGV2ZWxvcGVyRGlyIGVycm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5n
ICopZXJyb3I7Ci0tKFNpbURldmljZVNldCAqKWRlZmF1bHREZXZpY2VTZXRXaXRoRXJyb3I6KE5T
RXJyb3IgKiBfX2F1dG9yZWxlYXNpbmcgKillcnJvcjsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBU
b29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxh
eS5oCShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVz
dFJlbGF5L0xUUGlwZVJlbGF5LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwzNiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBMVFBpcGVSZWxheV9oCi0jZGVmaW5lIExUUGlwZVJlbGF5X2gKLQot
I2ltcG9ydCAiTFRSZWxheS5oIgotCi1AaW50ZXJmYWNlIExUUGlwZVJlbGF5IDogTlNPYmplY3Qg
PExUUmVsYXk+Ci1AcHJvcGVydHkgKHdlYWspIGlkPExUUmVsYXlEZWxlZ2F0ZT4gcmVsYXlEZWxl
Z2F0ZTsKLS0gKGlkKWluaXRXaXRoUHJlZml4OihOU1N0cmluZyAqKXByZWZpeDsKLUBlbmQKLQot
I2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlw
ZVJlbGF5Lm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RS
ZWxheS9MVFBpcGVSZWxheS5tCShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29scy9MYXlvdXRUZXN0
UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0JKG5vbmV4aXN0ZW50KQpAQCAtMSwx
NTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgIkxUUGlwZVJlbGF5LmgiCi0KLSNpbXBv
cnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5j
bHVkZSA8c3lzL3R5cGVzLmg+Ci0KLUBpbnRlcmZhY2UgTFRQaXBlUmVsYXkgKCkKLUBwcm9wZXJ0
eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKmZpZm9QcmVmaXg7Ci1AcHJvcGVydHkgKHN0
cm9uZykgTlNPdXRwdXRTdHJlYW0gKnN0YW5kYXJkSW5wdXRQaXBlOwotQHByb3BlcnR5IChzdHJv
bmcpIE5TSW5wdXRTdHJlYW0gKnN0YW5kYXJkT3V0cHV0UGlwZTsKLUBwcm9wZXJ0eSAoc3Ryb25n
KSBOU0lucHV0U3RyZWFtICpzdGFuZGFyZEVycm9yUGlwZTsKLQotLSAodm9pZCljcmVhdGVGSUZP
czsKLS0gKHZvaWQpZGVzdHJveUZJRk9zOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gTFRQaXBl
UmVsYXkKLQotLSAoTlNTdHJpbmcgKilpblBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1By
ZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9JTiJdOwotfQotCi0tIChOU1N0cmluZyAq
KW91dFBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGlu
Z1N0cmluZzpAIl9PVVQiXTsKLX0KLQotLSAoTlNTdHJpbmcgKillcnJvclBpcGVQYXRoCi17Ci0g
ICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9FUlJPUiJd
OwotfQotCi0tIChOU091dHB1dFN0cmVhbSAqKSBvdXRwdXRTdHJlYW0KLXsKLSAgICByZXR1cm4g
X3N0YW5kYXJkSW5wdXRQaXBlOwotfQotCi0tIChpZClpbml0V2l0aFByZWZpeDooTlNTdHJpbmcg
KilwcmVmaXgKLXsKLSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKSB7Ci0gICAgICAgIF9m
aWZvUHJlZml4ID0gcHJlZml4OwotICAgICAgICBbc2VsZiBkZXN0cm95RklGT3NdOwotICAgIH0K
LSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXR1cAotewotICAgIFtzZWxmIGRlc3Ry
b3lGSUZPc107Ci0gICAgW3NlbGYgY3JlYXRlRklGT3NdOwotfQotCi0tICh2b2lkKXRlYXJEb3du
Ci17Ci0gICAgW3NlbGYgZGVzdHJveUZJRk9zXTsKLX0KLQotLSh2b2lkKSBjb25uZWN0Ci17Ci0g
ICAgX3N0YW5kYXJkSW5wdXRQaXBlID0gW05TT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbVRvRmls
ZUF0UGF0aDpbc2VsZiBpblBpcGVQYXRoXSBhcHBlbmQ6WUVTXTsKLSAgICBfc3RhbmRhcmRPdXRw
dXRQaXBlID0gW05TSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW1XaXRoRmlsZUF0UGF0aDpbc2VsZiBv
dXRQaXBlUGF0aF1dOwotICAgIF9zdGFuZGFyZEVycm9yUGlwZSA9IFtOU0lucHV0U3RyZWFtIGlu
cHV0U3RyZWFtV2l0aEZpbGVBdFBhdGg6W3NlbGYgZXJyb3JQaXBlUGF0aF1dOwotCi0gICAgW1tz
ZWxmIHN0YW5kYXJkSW5wdXRQaXBlXSBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICBbW3NlbGYgc3Rh
bmRhcmRPdXRwdXRQaXBlXSBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRF
cnJvclBpcGVdIHNldERlbGVnYXRlOnNlbGZdOwotCi0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0
UGlwZV0gc2NoZWR1bGVJblJ1bkxvb3A6W05TUnVuTG9vcCBtYWluUnVuTG9vcF0gZm9yTW9kZTpO
U0RlZmF1bHRSdW5Mb29wTW9kZV07Ci0gICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JQaXBlXSBzY2hl
ZHVsZUluUnVuTG9vcDpbTlNSdW5Mb29wIG1haW5SdW5Mb29wXSBmb3JNb2RlOk5TRGVmYXVsdFJ1
bkxvb3BNb2RlXTsKLQotICAgIFtbc2VsZiBzdGFuZGFyZElucHV0UGlwZV0gb3Blbl07Ci0gICAg
W1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gb3Blbl07Ci0gICAgW1tzZWxmIHN0YW5kYXJkRXJy
b3JQaXBlXSBvcGVuXTsKLQotICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRDb25uZWN0XTsK
LX0KLQotLSAodm9pZClkaXNjb25uZWN0Ci17Ci0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlw
ZV0gY2xvc2VdOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yUGlwZV0gY2xvc2VdOwotICAgIFtb
c2VsZiBzdGFuZGFyZElucHV0UGlwZV0gY2xvc2VdOwotICAgIFtbc2VsZiByZWxheURlbGVnYXRl
XSBkaWREaXNjb25uZWN0XTsKLX0KLQotLSAodm9pZCljcmVhdGVGSUZPcwotewotICAgIG1rZmlm
byhbW3NlbGYgaW5QaXBlUGF0aF0gVVRGOFN0cmluZ10sIDA2NjYpOwotICAgIG1rZmlmbyhbW3Nl
bGYgb3V0UGlwZVBhdGhdIFVURjhTdHJpbmddLCAwNjY2KTsKLSAgICBta2ZpZm8oW1tzZWxmIGVy
cm9yUGlwZVBhdGhdIFVURjhTdHJpbmddLCAwNjY2KTsKLX0KLQotLSAodm9pZClkZXN0cm95RklG
T3MKLXsKLSAgICB1bmxpbmsoW1tzZWxmIGluUGlwZVBhdGhdIFVURjhTdHJpbmddKTsKLSAgICB1
bmxpbmsoW1tzZWxmIG91dFBpcGVQYXRoXSBVVEY4U3RyaW5nXSk7Ci0gICAgdW5saW5rKFtbc2Vs
ZiBlcnJvclBpcGVQYXRoXSBVVEY4U3RyaW5nXSk7Ci19Ci0KLS0gKHZvaWQpIHJlbGF5U3RyZWFt
OihOU0lucHV0U3RyZWFtICopc3RyZWFtCi17Ci0gICAgdWludDhfdCBieXRlc1sxMDI0XTsKLSAg
ICBOU0ludGVnZXIgYnl0ZXNSZWFkID0gW3N0cmVhbSByZWFkOmJ5dGVzIG1heExlbmd0aDoxMDI0
XTsKLSAgICBOU0RhdGEgKmRhdGEgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6Ynl0ZXMgbGVuZ3Ro
OmJ5dGVzUmVhZF07Ci0KLSAgICBpZiAoc3RyZWFtID09IFtzZWxmIHN0YW5kYXJkT3V0cHV0UGlw
ZV0pCi0gICAgICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRSZWNlaXZlU3Rkb3V0RGF0YTpk
YXRhXTsKLSAgICBlbHNlCi0gICAgICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRSZWNlaXZl
U3RkZXJyRGF0YTpkYXRhXTsKLX0KLQotLSAodm9pZClzdHJlYW06KE5TU3RyZWFtICopYVN0cmVh
bSBoYW5kbGVFdmVudDooTlNTdHJlYW1FdmVudClldmVudENvZGUKLXsKLSAgICBzd2l0Y2ggKGV2
ZW50Q29kZSkgewotICAgIGNhc2UgTlNTdHJlYW1FdmVudE5vbmU6Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgTlNTdHJlYW1FdmVudEhhc0J5dGVzQXZhaWxhYmxlOgotICAgICAgICBbc2VsZiBy
ZWxheVN0cmVhbTooTlNJbnB1dFN0cmVhbSAqKWFTdHJlYW1dOwotICAgIGNhc2UgTlNTdHJlYW1F
dmVudEhhc1NwYWNlQXZhaWxhYmxlOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5TU3RyZWFt
RXZlbnRPcGVuQ29tcGxldGVkOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5TU3RyZWFtRXZl
bnRFbmRFbmNvdW50ZXJlZDoKLSAgICAgICAgW1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZENyYXNo
V2l0aE1lc3NhZ2U6bmlsXTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOU1N0cmVhbUV2ZW50
RXJyb3JPY2N1cnJlZDoKLSAgICAgICAgW1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZENyYXNoV2l0
aE1lc3NhZ2U6W1thU3RyZWFtIHN0cmVhbUVycm9yXSBkZXNjcmlwdGlvbl1dOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci19Ci0KLUBlbmQKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlv
dXRUZXN0UmVsYXkvTFRSZWxheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxh
eS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheS5oCShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29scy9M
YXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXkuaAkobm9uZXhpc3RlbnQpCkBA
IC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIExUUmVsYXlfaAotI2RlZmluZSBM
VFJlbGF5X2gKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLUBwcm90b2Nv
bCBMVFJlbGF5RGVsZWdhdGUgPE5TT2JqZWN0PgotLSAodm9pZClkaWRDb25uZWN0OwotLSAodm9p
ZClkaWREaXNjb25uZWN0OwotLSAodm9pZClkaWRDcmFzaFdpdGhNZXNzYWdlOihOU1N0cmluZyAq
KW1lc3NhZ2U7Ci0tICh2b2lkKWRpZFJlY2VpdmVTdGRvdXREYXRhOihOU0RhdGEgKilkYXRhOwot
LSAodm9pZClkaWRSZWNlaXZlU3RkZXJyRGF0YTooTlNEYXRhICopZGF0YTsKLUBlbmQKLQotQHBy
b3RvY29sIExUUmVsYXkgPE5TT2JqZWN0LCBOU1N0cmVhbURlbGVnYXRlPgotLSAodm9pZClzZXR1
cDsKLS0gKHZvaWQpdGVhckRvd247Ci0tICh2b2lkKWNvbm5lY3Q7Ci0tICh2b2lkKWRpc2Nvbm5l
Y3Q7Ci1AcHJvcGVydHkgKHdlYWspIGlkPExUUmVsYXlEZWxlZ2F0ZT4gcmVsYXlEZWxlZ2F0ZTsK
LUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNPdXRwdXRTdHJlYW0gKm91dHB1dFN0cmVh
bTsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVz
dFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVz
dFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAyMDk4
ODYpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250
cm9sbGVyLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5k
ZWYgTFRSZWxheUNvbnRyb2xsZXJfaAotI2RlZmluZSBMVFJlbGF5Q29udHJvbGxlcl9oCi0KLSNp
bXBvcnQgIkxUUmVsYXkuaCIKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0K
LUBjbGFzcyBTaW1EZXZpY2U7Ci0KLUBpbnRlcmZhY2UgTFRSZWxheUNvbnRyb2xsZXIgOiBOU09i
amVjdCA8TFRSZWxheURlbGVnYXRlPgotLSAoaWQpaW5pdFdpdGhEZXZpY2U6KFNpbURldmljZSAq
KWRldmljZSBwcm9kdWN0RGlyOihOU1N0cmluZyAqKXByb2R1Y3REaXIgYXBwUGF0aDooTlNTdHJp
bmcgKilhcHBQYXRoIGRldmljZVVESUQ6KE5TVVVJRCAqKXVkaWQgZHVtcFRvb2xBcmd1bWVudHM6
KE5TQXJyYXkgKilhcmd1bWVudHM7Ci0tICh2b2lkKXN0YXJ0OwotLSAodm9pZClmaW5pc2g7Ci1A
ZW5kCi0KLSNlbmRpZgpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxh
eS9MVFJlbGF5Q29udHJvbGxlci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxh
eS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIubQkocmV2aXNpb24gMjA5ODg2KQor
KysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxl
ci5tCShub25leGlzdGVudCkKQEAgLTEsMjcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0
ICJMVFJlbGF5Q29udHJvbGxlci5oIgotCi0jaW1wb3J0ICJDb3JlU2ltdWxhdG9yU1BJLmgiCi0j
aW1wb3J0ICJMVFBpcGVSZWxheS5oIgotI2ltcG9ydCA8QXBwS2l0L0FwcEtpdC5oPgotI2ltcG9y
dCA8Y3J0X2V4dGVybnMuaD4KLQotQGludGVyZmFjZSBMVFJlbGF5Q29udHJvbGxlciAoKQotQHBy
b3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBkaXNwYXRjaF9zb3VyY2VfdCBzdGFuZGFyZElucHV0
RGlzcGF0Y2hTb3VyY2U7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TRmlsZUhhbmRs
ZSAqc3RhbmRhcmRPdXRwdXQ7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TRmlsZUhh
bmRsZSAqc3RhbmRhcmRFcnJvcjsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJp
bmcgKmlwY0lkZW50aWZpZXI7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TU3RyaW5n
ICphcHBCdW5kbGVJZGVudGlmaWVyOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU1N0
cmluZyAqYXBwUGF0aDsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNVVUlEICpkZXZp
Y2VVRElEOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU0FycmF5ICpkdW1wVG9vbEFy
Z3VtZW50czsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKnByb2R1Y3RE
aXI7Ci1AcHJvcGVydHkgKHN0cm9uZykgU2ltRGV2aWNlICpkZXZpY2U7Ci1AcHJvcGVydHkgKHN0
cm9uZykgaWQ8TFRSZWxheT4gcmVsYXk7Ci1AcHJvcGVydHkgcGlkX3QgcGlkOwotQHByb3BlcnR5
IChzdHJvbmcpIGRpc3BhdGNoX3NvdXJjZV90IGFwcERpc3BhdGNoU291cmNlOwotQGVuZAotCi1A
aW1wbGVtZW50YXRpb24gTFRSZWxheUNvbnRyb2xsZXIKLQotLSAoaWQpaW5pdFdpdGhEZXZpY2U6
KFNpbURldmljZSAqKWRldmljZSBwcm9kdWN0RGlyOihOU1N0cmluZyAqKXByb2R1Y3REaXIgYXBw
UGF0aDooTlNTdHJpbmcgKilhcHBQYXRoIGRldmljZVVESUQ6KE5TVVVJRCAqKXVkaWQgZHVtcFRv
b2xBcmd1bWVudHM6KE5TQXJyYXkgKilhcmd1bWVudHMKLXsKLSAgICBpZiAoKHNlbGYgPSBbc3Vw
ZXIgaW5pdF0pKSB7Ci0gICAgICAgIF9kZXZpY2UgPSBkZXZpY2U7Ci0gICAgICAgIF9wcm9kdWN0
RGlyID0gcHJvZHVjdERpcjsKLSAgICAgICAgX2FwcFBhdGggPSBhcHBQYXRoOwotICAgICAgICBf
YXBwQnVuZGxlSWRlbnRpZmllciA9IFtbTlNCdW5kbGUgYnVuZGxlV2l0aFBhdGg6YXBwUGF0aF0g
YnVuZGxlSWRlbnRpZmllcl07Ci0gICAgICAgIF9kZXZpY2VVRElEID0gdWRpZDsKLSAgICAgICAg
X2R1bXBUb29sQXJndW1lbnRzID0gYXJndW1lbnRzOwotICAgICAgICBfc3RhbmRhcmRJbnB1dERp
c3BhdGNoU291cmNlID0gZGlzcGF0Y2hfc291cmNlX2NyZWF0ZShESVNQQVRDSF9TT1VSQ0VfVFlQ
RV9SRUFELCBTVERJTl9GSUxFTk8sIDAsIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCkpOwotICAg
ICAgICBfc3RhbmRhcmRPdXRwdXQgPSBbTlNGaWxlSGFuZGxlIGZpbGVIYW5kbGVXaXRoU3RhbmRh
cmRPdXRwdXRdOwotICAgICAgICBfc3RhbmRhcmRFcnJvciA9IFtOU0ZpbGVIYW5kbGUgZmlsZUhh
bmRsZVdpdGhTdGFuZGFyZEVycm9yXTsKLQotICAgICAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2V2
ZW50X2hhbmRsZXIoX3N0YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJjZSwgXnsKLSAgICAgICAgICAg
IHVpbnQ4X3QgYnVmZmVyWzEwMjRdOwotICAgICAgICAgICAgc3NpemVfdCBsZW4gPSByZWFkKFNU
RElOX0ZJTEVOTywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7Ci0gICAgICAgICAgICBpZiAobGVu
ID4gMCkgewotICAgICAgICAgICAgICAgIEB0cnkgewotICAgICAgICAgICAgICAgICAgICBbW1tz
ZWxmIHJlbGF5XSBvdXRwdXRTdHJlYW1dIHdyaXRlOmJ1ZmZlciBtYXhMZW5ndGg6bGVuXTsKLSAg
ICAgICAgICAgICAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24gKmUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gQnJva2VuIHBpcGUgLSB0aGUgZHVtcCB0b29sIGNyYXNoZWQuIFRpbWUgdG8gZGll
LgotICAgICAgICAgICAgICAgICAgICBbc2VsZiBkaWRDcmFzaFdpdGhNZXNzYWdlOm5pbF07Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAv
LyBFT0YgUmVjZWl2ZWQgb24gdGhlIHJlbGF5J3Mgc3RhbmRhcmQgaW5wdXQuCi0gICAgICAgICAg
ICAgICAgW3NlbGYgZmluaXNoXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAg
ICAgX3JlbGF5ID0gW1tMVFBpcGVSZWxheSBhbGxvY10gaW5pdFdpdGhQcmVmaXg6W0AiL3RtcCIg
c3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OnNlbGYuaXBjSWRlbnRpZmllcl1dOwotICAg
ICAgICBbX3JlbGF5IHNldFJlbGF5RGVsZWdhdGU6c2VsZl07Ci0gICAgfQotICAgIHJldHVybiBz
ZWxmOwotfQotCi0tIChOU1N0cmluZyAqKWlwY0lkZW50aWZpZXIKLXsKLSAgICByZXR1cm4gW05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQC0lQCIsIHNlbGYuYXBwQnVuZGxlSWRlbnRpZmll
ciwgc2VsZi5kZXZpY2VVRElELlVVSURTdHJpbmddOwotfQotCi0tIChOU1N0cmluZyAqKXByb2Nl
c3NOYW1lCi17Ci0gICAgcmV0dXJuIFtzZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIgY29tcG9uZW50
c1NlcGFyYXRlZEJ5U3RyaW5nOkAiLiJdLmxhc3RPYmplY3Q7Ci19Ci0KLS0gKHZvaWQpZGlkUmVj
ZWl2ZVN0ZG91dERhdGE6KE5TRGF0YSAqKWRhdGEKLXsKLSAgICBAdHJ5IHsKLSAgICAgICAgW1tz
ZWxmIHN0YW5kYXJkT3V0cHV0XSB3cml0ZURhdGE6ZGF0YV07Ci0gICAgfSBAY2F0Y2ggKE5TRXhj
ZXB0aW9uICpleGNlcHRpb24pIHsKLSAgICAgICAgLy8gTlNGaWxlSGFuZGxlT3BlcmF0aW9uRXhj
ZXB0aW9uCi0gICAgICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhlIHRlc3QgaGFybmVzcyBzdG9wcGVk
IGxpc3RlbmluZyB0byB1cywKLSAgICAgICAgLy8gcHJvYmFibHkgYmVjYXVzZSB3ZSB0aW1lZCBv
dXQgb3IgYSBydW4gd2FzIGNhbmNlbGVkLgotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0g
ICAgfQotfQotCi0tICh2b2lkKWRpZFJlY2VpdmVTdGRlcnJEYXRhOihOU0RhdGEgKilkYXRhCi17
Ci0gICAgQHRyeSB7Ci0gICAgICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSB3cml0ZURhdGE6ZGF0
YV07Ci0gICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRpb24pIHsKLSAgICAgICAgLy8g
TlNGaWxlSGFuZGxlT3BlcmF0aW9uRXhjZXB0aW9uCi0gICAgICAgIC8vIEJyb2tlbiBwaXBlIC0g
dGhlIHRlc3QgaGFybmVzcyBzdG9wcGVkIGxpc3RlbmluZyB0byB1cywKLSAgICAgICAgLy8gcHJv
YmFibHkgYmVjYXVzZSB3ZSB0aW1lZCBvdXQgb3IgYSBydW4gd2FzIGNhbmNlbGVkLgotICAgICAg
ICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotfQotCi0tICh2b2lkKWRpZERpc2Nvbm5lY3QK
LXsKLSAgICBkaXNwYXRjaF9zdXNwZW5kKFtzZWxmIHN0YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJj
ZV0pOwotfQotCi0tICh2b2lkKWRpZENvbm5lY3QKLXsKLSAgICBkaXNwYXRjaF9yZXN1bWUoW3Nl
bGYgc3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNlXSk7Ci19Ci0KLS0gKHZvaWQpZGlkQ3Jhc2hX
aXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgW1tzZWxmIHJlbGF5XSBkaXNj
b25uZWN0XTsKLSAgICBOU1N0cmluZyAqY3Jhc2hNZXNzYWdlID0gW05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCJcbiNDUkFTSEVEIC0gJUAgKHBpZCAlZClcbiIsIFtzZWxmIHByb2Nlc3NOYW1l
XSwgW3NlbGYgcGlkXV07Ci0KLSAgICBpZiAobWVzc2FnZSkKLSAgICAgICAgY3Jhc2hNZXNzYWdl
ID0gW2NyYXNoTWVzc2FnZSBzdHJpbmdCeUFwcGVuZGluZ0Zvcm1hdDpAIiVAXG4iLCBtZXNzYWdl
XTsKLQotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSB3cml0ZURhdGE6W2NyYXNoTWVzc2FnZSBk
YXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ11dOwotICAgIFtbc2VsZiBzdGFu
ZGFyZEVycm9yXSBjbG9zZUZpbGVdOwotICAgIFtbc2VsZiBzdGFuZGFyZE91dHB1dF0gY2xvc2VG
aWxlXTsKLSAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci19Ci0KLS0gKHZvaWQpaW5zdGFsbEFwcAot
ewotICAgIE5TRGljdGlvbmFyeSAqaW5zdGFsbE9wdGlvbnMgPSBAewotICAgICAgICAoTlNTdHJp
bmcgKilrQ0ZCdW5kbGVJZGVudGlmaWVyS2V5OiBzZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIsCi0g
ICAgfTsKLQotICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOwotICAgIEJPT0wgaW5zdGFsbGVkID0g
W3NlbGYuZGV2aWNlIGluc3RhbGxBcHBsaWNhdGlvbjpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnNl
bGYuYXBwUGF0aF0gd2l0aE9wdGlvbnM6aW5zdGFsbE9wdGlvbnMgZXJyb3I6JmVycm9yXTsKLSAg
ICBpZiAoIWluc3RhbGxlZCkgewotICAgICAgICBOU0xvZyhAIkNvdWxkbid0IGluc3RhbGwgJUA6
ICVAIiwgc2VsZi5hcHBQYXRoLCBlcnJvci5kZXNjcmlwdGlvbik7Ci0gICAgICAgIGV4aXQoRVhJ
VF9GQUlMVVJFKTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpa2lsbEFwcAotewotICAgIGRpc3BhdGNo
X3NvdXJjZV90IGRpc3BhdGNoID0gW3NlbGYgYXBwRGlzcGF0Y2hTb3VyY2VdOwotCi0gICAgaWYg
KGRpc3BhdGNoKQotICAgICAgICBkaXNwYXRjaF9zb3VyY2VfY2FuY2VsKGRpc3BhdGNoKTsKLQot
ICAgIGlmIChbc2VsZiBwaWRdID4gMSkgewotICAgICAgICBraWxsKHNlbGYucGlkLCBTSUdLSUxM
KTsKLSAgICAgICAgW3NlbGYgc2V0UGlkOi0xXTsKLSAgICB9Ci0gICAgW3NlbGYgc2V0QXBwRGlz
cGF0Y2hTb3VyY2U6bmlsXTsKLX0KLQotLSAoTlNEaWN0aW9uYXJ5ICopX2Vudmlyb25tZW50VmFy
aWFibGVzCi17Ci0gICAgc3RhdGljIE5TRGljdGlvbmFyeSAqZW52aXJvbm1lbnRWYXJpYWJsZXM7
Ci0gICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlOwotCi0gICAgZGlzcGF0Y2hfb25jZSgm
b25jZSwgXnsKLSAgICAgICAgTlNTdHJpbmcgKnByb2R1Y3REaXJlY3RvcnkgPSBbc2VsZiBwcm9k
dWN0RGlyXTsKLQotICAgICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gW0B7
Ci0gICAgICAgICAgICBAIklQQ19JREVOVElGSUVSIjogc2VsZi5pcGNJZGVudGlmaWVyLAotICAg
ICAgICAgICAgQCJEWUxEX0ZSQU1FV09SS19QQVRIIjogcHJvZHVjdERpcmVjdG9yeSwKLSAgICAg
ICAgICAgIEAiX19YUENfRFlMRF9GUkFNRVdPUktfUEFUSCI6IHByb2R1Y3REaXJlY3RvcnksCi0g
ICAgICAgICAgICBAIkRZTERfTElCUkFSWV9QQVRIIjogcHJvZHVjdERpcmVjdG9yeSwKLSAgICAg
ICAgICAgIEAiX19YUENfRFlMRF9MSUJSQVJZX1BBVEgiOiBwcm9kdWN0RGlyZWN0b3J5LAotICAg
ICAgICB9IG11dGFibGVDb3B5XTsKLQotICAgICAgICBmb3IgKE5TU3RyaW5nICprZXlOYW1lIGlu
IEBbQCJEWUxEX0lOU0VSVF9MSUJSQVJJRVMiLCBAIk1hbGxvY1N0YWNrTG9nZ2luZyIsIEAiTE9D
QUxfUkVTT1VSQ0VfUk9PVCIsIEAiRFVNUFJFTkRFUlRSRUVfVEVNUCJdKSB7Ci0gICAgICAgICAg
ICBjb25zdCBjaGFyKiB2YWx1ZSA9IGdldGVudihba2V5TmFtZSBVVEY4U3RyaW5nXSk7Ci0gICAg
ICAgICAgICBpZiAodmFsdWUgJiYgc3RybGVuKHZhbHVlKSkgewotICAgICAgICAgICAgICAgIE5T
U3RyaW5nICpuc1ZhbHVlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnZhbHVlXTsK
LSAgICAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6bnNWYWx1ZSBmb3JLZXk6a2V5
TmFtZV07Ci0gICAgICAgICAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0Om5zVmFsdWUgZm9y
S2V5OltAIl9fWFBDXyIgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6a2V5TmFtZV1dOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChjaGFyKiogZW52cCA9ICpfTlNHZXRF
bnZpcm9uKCk7ICplbnZwOyBlbnZwKyspIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVudiA9
ICplbnZwOwotICAgICAgICAgICAgaWYgKCFzdHJuY21wKCJKU0NfIiwgZW52LCA0KSB8fCAhc3Ry
bmNtcCgiX19YUENfSlNDXyIsIGVudiwgMTApKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hh
ciogZXF1YWwgPSBzdHJjaHIoZW52LCAnPScpOwotICAgICAgICAgICAgICAgIGlmICghZXF1YWwp
IHsKLSAgICAgICAgICAgICAgICAgICAgTlNMb2coQCJNaXNzaW5nICc9JyBpbiBlbnYgdmFyICcl
cyciLCBlbnYpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heEtleUxlbmd0aCA9
IDI1NjsKLSAgICAgICAgICAgICAgICBzaXplX3Qga2V5TGVuZ3RoID0gZXF1YWwgLSBlbnY7Ci0g
ICAgICAgICAgICAgICAgaWYgKGtleUxlbmd0aCA+PSBtYXhLZXlMZW5ndGgpIHsKLSAgICAgICAg
ICAgICAgICAgICAgTlNMb2coQCJFbnYgdmFyICclcycgaXMgdG9vIGxvbmciLCBlbnYpOwotICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICBjaGFyIGtleVttYXhLZXlMZW5ndGhdOwotICAgICAgICAgICAgICAgIHN0cm5jcHko
a2V5LCBlbnYsIGtleUxlbmd0aCk7Ci0gICAgICAgICAgICAgICAga2V5W2tleUxlbmd0aF0gPSAn
XDAnOwotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhbHVlID0gZXF1YWwgKyAxOwotCi0g
ICAgICAgICAgICAgICAgTlNTdHJpbmcgKm5zS2V5ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4
U3RyaW5nOmtleV07Ci0gICAgICAgICAgICAgICAgTlNTdHJpbmcgKm5zVmFsdWUgPSBbTlNTdHJp
bmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6dmFsdWVdOwotICAgICAgICAgICAgICAgIFtkaWN0aW9u
YXJ5IHNldE9iamVjdDpuc1ZhbHVlIGZvcktleTpuc0tleV07Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICBlbnZpcm9ubWVudFZhcmlhYmxlcyA9IFtkaWN0aW9uYXJ5IGNvcHld
OwotICAgIH0pOwotCi0gICAgcmV0dXJuIGVudmlyb25tZW50VmFyaWFibGVzOwotfQotCi0tICh2
b2lkKWxhdW5jaEFwcAotewotICAgIE5TRGljdGlvbmFyeSAqbGF1bmNoT3B0aW9ucyA9IEB7Ci0g
ICAgICAgIGtTaW1EZXZpY2VMYXVuY2hBcHBsaWNhdGlvbkVudmlyb25tZW50OiBbc2VsZiBfZW52
aXJvbm1lbnRWYXJpYWJsZXNdLAotICAgICAgICBrU2ltRGV2aWNlTGF1bmNoQXBwbGljYXRpb25B
cmd1bWVudHM6IFtzZWxmIGR1bXBUb29sQXJndW1lbnRzXSwKLSAgICB9OwotCi0gICAgTlNFcnJv
ciAqZXJyb3I7Ci0gICAgcGlkX3QgcGlkID0gW3NlbGYuZGV2aWNlIGxhdW5jaEFwcGxpY2F0aW9u
V2l0aElEOnNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciBvcHRpb25zOmxhdW5jaE9wdGlvbnMgZXJy
b3I6JmVycm9yXTsKLQotICAgIGlmIChwaWQgPCAwKSB7Ci0gICAgICAgIE5TTG9nKEAiQ291bGRu
J3QgbGF1bmNoICVAOiAlQCIsIHNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciwgZXJyb3IuZGVzY3Jp
cHRpb24pOwotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotCi0gICAgW3NlbGYg
c2V0UGlkOnBpZF07Ci0KLSAgICBkaXNwYXRjaF9xdWV1ZV90IHF1ZXVlID0gZGlzcGF0Y2hfZ2V0
X21haW5fcXVldWUoKTsKLSAgICBkaXNwYXRjaF9zb3VyY2VfdCBzaW11bGF0b3JBcHBFeGl0RGlz
cGF0Y2hTb3VyY2UgPSBkaXNwYXRjaF9zb3VyY2VfY3JlYXRlKERJU1BBVENIX1NPVVJDRV9UWVBF
X1BST0MsIFtzZWxmIHBpZF0sIERJU1BBVENIX1BST0NfRVhJVCwgcXVldWUpOwotICAgIFtzZWxm
IHNldEFwcERpc3BhdGNoU291cmNlOnNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZV07Ci0g
ICAgZGlzcGF0Y2hfc291cmNlX3NldF9ldmVudF9oYW5kbGVyKHNpbXVsYXRvckFwcEV4aXREaXNw
YXRjaFNvdXJjZSwgXnsKLSAgICAgICAgZGlzcGF0Y2hfc291cmNlX2NhbmNlbChzaW11bGF0b3JB
cHBFeGl0RGlzcGF0Y2hTb3VyY2UpOwotICAgICAgICBbc2VsZiBkaWRDcmFzaFdpdGhNZXNzYWdl
Om5pbF07Ci0gICAgfSk7Ci0gICAgZGlzcGF0Y2hfcmVzdW1lKHNpbXVsYXRvckFwcEV4aXREaXNw
YXRjaFNvdXJjZSk7Ci19Ci0KLS0gKHZvaWQpc3RhcnQKLXsKLSAgICBbc2VsZiBpbnN0YWxsQXBw
XTsKLSAgICBbW3NlbGYgcmVsYXldIHNldHVwXTsKLSAgICBbc2VsZiBsYXVuY2hBcHBdOwotICAg
IFtbc2VsZiByZWxheV0gY29ubmVjdF07Ci19Ci0KLS0gKHZvaWQpZmluaXNoCi17Ci0gICAgW1tz
ZWxmIHJlbGF5XSBkaXNjb25uZWN0XTsKLSAgICBbc2VsZiBraWxsQXBwXTsKLSAgICBleGl0KEVY
SVRfU1VDQ0VTUyk7Ci19Ci0KLUBlbmQKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlv
dXRUZXN0UmVsYXkvbWFpbi5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9M
YXlvdXRUZXN0UmVsYXkvbWFpbi5tCShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29scy9MYXlvdXRU
ZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L21haW4ubQkobm9uZXhpc3RlbnQpCkBAIC0xLDEzMyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiQ29yZVNpbXVsYXRvclNQSS5oIgot
I2ltcG9ydCAiTFRSZWxheUNvbnRyb2xsZXIuaCIKLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRh
dGlvbi5oPgotCi1zdGF0aWMgTFRSZWxheUNvbnRyb2xsZXIgKnJlbGF5Q29udHJvbGxlcjsKLQot
dm9pZCB1c2FnZSgpCi17Ci0gICAgTlNTdHJpbmcgKmhlbHBUZXh0ID0gQCJMYXlvdXRUZXN0UmVs
YXk6IHJ1biBhIGR1bXAgdG9vbCBpbiB0aGUgc2ltdWxhdG9yLiBOb3QgZm9yIGRpcmVjdCBjb25z
dW1wdGlvbi5cbiIKLSAgICAgICAgIlVzYWdlOiBMYXlvdXRUZXN0UmVsYXkgWy1oXSBbb3B0aW9u
c10gLS0gW2R1bXAgdG9vbCBhcmd1bWVudHNdXG4iCi0gICAgICAgICJSZXF1aXJlZCBvcHRpb25z
OlxuIgotICAgICAgICAiICAgIC11ZGlkIDxpZGVudGlmaWVyPiAgICAgICBTaW11bGF0b3IgZGV2
aWNlIGlkZW50aWZpZXJcbiIKLSAgICAgICAgIiAgICAtYXBwIDxhcHBfcGF0aD4gICAgICAgICAg
UGF0aCB0byB0aGUgYnVpbHQgaU9TIC5hcHAgYnVuZGxlIGRpcmVjdG9yeS5cbiIKLSAgICAgICAg
IiAgICAtcHJvZHVjdERpciA8ZGlyPiAgICAgICAgL3BhdGgvdG8vV2ViS2l0QnVpbGQve2NvbmZp
Z3VyYXRpb259LXtzaG9ydCBwbGF0Zm9ybX0uXG4iOwotCi0gICAgZnByaW50ZihzdGRlcnIsICIl
c1xuIiwgW2hlbHBUZXh0IFVURjhTdHJpbmddKTsKLX0KLQotTlNTdHJpbmcgKmdldFJlcXVpcmVk
U3RyaW5nQXJndW1lbnQoTlNTdHJpbmcgKnBhcmFtZXRlcikKLXsKLSAgICBOU1VzZXJEZWZhdWx0
cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdOwotICAg
IE5TU3RyaW5nICphcmd1bWVudCA9IFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6cGFyYW1ldGVyXTsK
LQotICAgIGlmICghYXJndW1lbnQpIHsKLSAgICAgICAgTlNMb2coQCItJUAgaXMgcmVxdWlyZWQu
IiwgcGFyYW1ldGVyKTsKLSAgICAgICAgdXNhZ2UoKTsKLSAgICAgICAgZXhpdChFWElUX0ZBSUxV
UkUpOwotICAgIH0KLSAgICByZXR1cm4gYXJndW1lbnQ7Ci19Ci0KLU5TQXJyYXkgKmdldER1bXBU
b29sQXJndW1lbnRzKCkKLXsKLSAgICBOU011dGFibGVBcnJheSAqZHVtcFRvb2xBcmd1bWVudHMg
PSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKLSAgICBOU0FycmF5ICpwcm9jZXNzQXJn
cyA9IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gYXJndW1lbnRzXTsKLSAgICBCT09MIGFw
cGVuZGluZyA9IE5POwotICAgIGZvciAoTlNTdHJpbmcgKmFyZyBpbiBwcm9jZXNzQXJncykgewot
ICAgICAgICBpZiAoW2FyZyBpc0VxdWFsVG9TdHJpbmc6QCItLSJdKSB7Ci0gICAgICAgICAgICBh
cHBlbmRpbmcgPSBZRVM7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoYXBwZW5kaW5nKQotICAgICAgICAgICAgW2R1bXBUb29sQXJndW1lbnRzIGFkZE9iamVj
dDphcmddOwotICAgIH0KLSAgICByZXR1cm4gZHVtcFRvb2xBcmd1bWVudHM7Ci19Ci0KLXZvaWQg
ZmluaXNoKCkKLXsKLSAgICBbcmVsYXlDb250cm9sbGVyIGZpbmlzaF07Ci19Ci0KLXZvaWQgcmVj
ZWl2ZWRTaWduYWwoaW50IHNpZ25hbCkKLXsKLSAgICBleGl0KEVYSVRfU1VDQ0VTUyk7Ci19Ci0K
LWludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICogYXJndltdKQotewotICAgIEBhdXRvcmVs
ZWFzZXBvb2wgewotICAgICAgICBOU0FycmF5ICpoZWxwQXJndW1lbnRzID0gQFtAIi1oIiwgQCIt
LWhlbHAiXTsKLSAgICAgICAgZm9yIChOU1N0cmluZyAqaGVscEFyZ3VtZW50IGluIGhlbHBBcmd1
bWVudHMpIHsKLSAgICAgICAgICAgIGlmIChbW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBh
cmd1bWVudHNdIGluZGV4T2ZPYmplY3Q6aGVscEFyZ3VtZW50XSAhPSBOU05vdEZvdW5kKSB7Ci0g
ICAgICAgICAgICAgICAgdXNhZ2UoKTsKLSAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVS
RSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotI2lmIFVTRV9TSU1fU0VSVklDRV9DT05U
RVhUCi0gICAgICAgIE5TU3RyaW5nICpkZXZlbG9wZXJEaXJlY3RvcnkgPSBnZXRSZXF1aXJlZFN0
cmluZ0FyZ3VtZW50KEAiZGV2ZWxvcGVyRGlyIik7Ci0jZW5kaWYKLSAgICAgICAgTlNVVUlEICp1
ZGlkID0gW1tOU1VVSUQgYWxsb2NdIGluaXRXaXRoVVVJRFN0cmluZzpnZXRSZXF1aXJlZFN0cmlu
Z0FyZ3VtZW50KEAidWRpZCIpXTsKLSAgICAgICAgTlNTdHJpbmcgKmFwcFBhdGggPSBnZXRSZXF1
aXJlZFN0cmluZ0FyZ3VtZW50KEAiYXBwIik7Ci0gICAgICAgIE5TU3RyaW5nICpwcm9kdWN0RGly
ZWN0b3J5ID0gZ2V0UmVxdWlyZWRTdHJpbmdBcmd1bWVudChAInByb2R1Y3REaXIiKTsKLSAgICAg
ICAgTlNBcnJheSAqZHVtcFRvb2xBcmd1bWVudHMgPSBnZXREdW1wVG9vbEFyZ3VtZW50cygpOwot
Ci0jaWYgVVNFX1NJTV9TRVJWSUNFX0NPTlRFWFQKLSAgICAgICAgTlNFcnJvciAqZXJyb3I7Ci0g
ICAgICAgIFNpbVNlcnZpY2VDb250ZXh0ICpzZXJ2aWNlQ29udGV4dCA9IFtTaW1TZXJ2aWNlQ29u
dGV4dCBzaGFyZWRTZXJ2aWNlQ29udGV4dEZvckRldmVsb3BlckRpcjpkZXZlbG9wZXJEaXJlY3Rv
cnkgZXJyb3I6JmVycm9yXTsKLSAgICAgICAgaWYgKCFzZXJ2aWNlQ29udGV4dCkgewotICAgICAg
ICAgICAgTlNMb2coQCJEZXZpY2UgY29udGV4dCBjb3VsZG4ndCBiZSBmb3VuZDogJUAiLCBlcnJv
cik7Ci0gICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgIH0KLSAgICAgICAg
U2ltRGV2aWNlU2V0ICpkZXZpY2VTZXQgPSBbc2VydmljZUNvbnRleHQgZGVmYXVsdERldmljZVNl
dFdpdGhFcnJvcjpuaWxdOwotICAgICAgICBpZiAoIWRldmljZVNldCkgewotICAgICAgICAgICAg
TlNMb2coQCJEZWZhdWx0IGRldmljZSBzZXQgY291bGRuJ3QgYmUgZm91bmQ6ICVAIiwgZXJyb3Ip
OwotICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0gICAgICAgIFNp
bURldmljZSAqZGV2aWNlID0gW2RldmljZVNldC5kZXZpY2VzQnlVRElEIG9iamVjdEZvcktleTp1
ZGlkXTsKLSNlbHNlCi0gICAgICAgIFNpbURldmljZSAqZGV2aWNlID0gW1NpbURldmljZVNldC5k
ZWZhdWx0U2V0LmRldmljZXNCeVVESUQgb2JqZWN0Rm9yS2V5OnVkaWRdOwotI2VuZGlmCi0gICAg
ICAgIGlmICghZGV2aWNlKSB7Ci0gICAgICAgICAgICBOU0xvZyhAIkRldmljZSAlQCBjb3VsZG4n
dCBiZSBmb3VuZCIsIHVkaWQpOwotICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcmVsYXlDb250cm9sbGVyID0gW1tMVFJlbGF5Q29udHJvbGxlciBh
bGxvY10gaW5pdFdpdGhEZXZpY2U6ZGV2aWNlIHByb2R1Y3REaXI6cHJvZHVjdERpcmVjdG9yeSBh
cHBQYXRoOmFwcFBhdGggZGV2aWNlVURJRDp1ZGlkIGR1bXBUb29sQXJndW1lbnRzOmR1bXBUb29s
QXJndW1lbnRzXTsKLSAgICAgICAgW3JlbGF5Q29udHJvbGxlciBzdGFydF07Ci0KLSAgICAgICAg
YXRleGl0KGZpbmlzaCk7Ci0gICAgICAgIHNpZ25hbChTSUdJTlQsIHJlY2VpdmVkU2lnbmFsKTsK
LSAgICAgICAgc2lnbmFsKFNJR1RFUk0sIHJlY2VpdmVkU2lnbmFsKTsKLQotICAgICAgICBbW05T
UnVuTG9vcCBtYWluUnVuTG9vcF0gcnVuXTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19CkluZGV4
OiBUb29scy9TY3JpcHRzL2J1aWxkLWxheW91dHRlc3RyZWxheQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL2J1aWxkLWxheW91dHRlc3RyZWxheQkocmV2aXNpb24gMjA5ODg2KQorKysgVG9v
bHMvU2NyaXB0cy9idWlsZC1sYXlvdXR0ZXN0cmVsYXkJKHdvcmtpbmcgY29weSkKQEAgLTIzLDQ4
ICsyMyw2IEBACiAjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKICMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogCi11c2Ugc3RyaWN0OwotdXNlIEZpbGU6OkJhc2VuYW1lOwotdXNlIEZpbmRCaW47Ci11
c2UgR2V0b3B0OjpMb25nIHF3KDpjb25maWcgcGFzc190aHJvdWdoKTsKLXVzZSBsaWIgJEZpbmRC
aW46OkJpbjsKLXVzZSB3ZWJraXRkaXJzOwogCi1teSAkc2hvd0hlbHAgPSAwOwotbXkgJGNsZWFu
ID0gMDsKLQotbXkgJHByb2dyYW1OYW1lID0gYmFzZW5hbWUoJDApOwotbXkgJHVzYWdlID0gPDxF
T0Y7Ci1Vc2FnZTogJHByb2dyYW1OYW1lIFtvcHRpb25zXSBbb3B0aW9ucyB0byBwYXNzIHRvIGJ1
aWxkIHN5c3RlbV0KLSAgLS1oZWxwICAgICAgICBTaG93IHRoaXMgaGVscCBtZXNzYWdlCi0gIC0t
Y2xlYW4gICAgICAgQ2xlYW4gdXAgdGhlIGJ1aWxkIGRpcmVjdG9yeQotRU9GCi0KLW15ICRyZXN1
bHQgPSBHZXRPcHRpb25zKAotICAgICdoZWxwJyA9PiBcJHNob3dIZWxwLAotICAgICdjbGVhbicg
PT4gXCRjbGVhbiwKLSk7Ci0KLWlmICgkc2hvd0hlbHAgb3Igbm90ICRyZXN1bHQpIHsKLSAgIHBy
aW50IFNUREVSUiAkdXNhZ2U7Ci0gICBleGl0IDE7Ci19Ci0KLWNoZWNrUmVxdWlyZWRTeXN0ZW1D
b25maWcoKTsKLXNldENvbmZpZ3VyYXRpb24oKTsKLWNoZGlyV2ViS2l0KCk7Ci0KLWNoZGlyICJU
b29scy9MYXlvdXRUZXN0UmVsYXkiIG9yIGRpZTsKLQotIyBGSVhNRTogVGhpcyB0b29sIGlzIG9u
bHkgdXNlZnVsIHdoZW4gYnVpbGRpbmcgV2ViS2l0IGZvciBpT1MgU2ltdWxhdG9yLiBGb3Igbm93
LAotIyAgICAgICAgdG8gYXZvaWQgYnJlYWtpbmcgc29tZSBBcHBsZSBJbnRlcm5hbCB0b29scyB3
ZSBzdXBwb3J0IGNhbGxpbmcgdGhpcyBzY3JpcHQKLSMgICAgICAgIHdpdGhvdXQgLS1pb3Mtc2lt
dWxhdG9yIHNvIGxvbmcgYXMgd2UgYXJlIGJ1aWxkaW5nIG9uIGEgTWFjLgotaWYgKGlzQXBwbGVN
YWNXZWJLaXQoKSAmJiAhd2lsbFVzZUlPU0RldmljZVNESygpKSB7Ci0gICAgIyBGSVhNRTogQ2hh
bmdpbmcgU0RLIGF0IHRoaXMgcG9pbnQgcmVzdWx0cyBpbiBhbiBpbmNvbnNpc3RlbnQgd2Via2l0
ZGlycyBzdGF0ZS4KLSAgICAjIFdlIHNob3VsZCBtYWtlIGl0IHNvIHRoYXQgd2Via2l0ZGlycyBm
dW5jdGlvbnMgbmV2ZXIgc2VlIHRoZSB3cm9uZyBTREsuCi0gICAgc2V0WGNvZGVTREsodW5kZWYp
OyAjIEZvcmNlIHVzZSBvZiBNYWMgU0RLIGlmIC0taW9zLXNpbXVsYXRvciB3YXMgcGFzc2VkCi0g
ICAgZXhpdCBleGl0U3RhdHVzKGJ1aWxkWENvZGVQcm9qZWN0KCJMYXlvdXRUZXN0UmVsYXkiLCAk
Y2xlYW4sIFhjb2RlT3B0aW9ucygpLCBAQVJHVikpOwotfQotCi1wcmludCBTVERFUlIgIkxheW91
dFRlc3RSZWxheSBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgaU9TIFNpbXVsYXRvci5cbiI7Citwcmlu
dCBTVERFUlIgIkxheW91dFRlc3RSZWxheSBpcyB1bnN1cHBvcnRlZCFcbiI7CiBleGl0IDE7Cklu
ZGV4OiBUb29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL2J1aWxkLXdlYmtpdAkocmV2aXNpb24gMjA5ODg2KQorKysgVG9vbHMvU2NyaXB0cy9idWls
ZC13ZWJraXQJKHdvcmtpbmcgY29weSkKQEAgLTIwMCwxMCArMjAwLDYgQEAgaWYgKGlzQXBwbGVN
YWNXZWJLaXQoKSkgewogICAgICAgICBwdXNoIEBjb3B5TGlicmFyaWVzQXJncywgcHJvZHVjdERp
cigpOwogICAgICAgICBwcmludChqb2luKCIgIiwgQGNvcHlMaWJyYXJpZXNBcmdzKSAuICJcbiIp
OwogICAgICAgICAoc3lzdGVtKEBjb3B5TGlicmFyaWVzQXJncykgPT0gMCkgb3IgZGllOwotCi0g
ICAgICAgIGlmICh3aWxsVXNlSU9TU2ltdWxhdG9yU0RLKCkpIHsKLSAgICAgICAgICAgIChzeXN0
ZW0oInBlcmwiLCAiVG9vbHMvU2NyaXB0cy9idWlsZC1sYXlvdXR0ZXN0cmVsYXkiLCBhcmd1bWVu
dHNGb3JDb25maWd1cmF0aW9uKCkpID09IDApIG9yIGRpZTsKLSAgICAgICAgfQogICAgIH0KIAog
ICAgICMgQnVpbGQgVG9vbHMgbmVlZGVkIGZvciBBcHBsZSBwb3J0cwpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vaXBjX3BpcGUucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vaXBjX3BpcGUucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vaXBjX3BpcGUucHkJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0MjEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
IyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9y
dCBlcnJubworaW1wb3J0IGlvCitpbXBvcnQgb3MKK2ltcG9ydCBRdWV1ZQoraW1wb3J0IHNlbGVj
dAoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHN5cworaW1wb3J0IHRpbWUKKworaWYgc3lzLnBsYXRm
b3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgorICAgIGltcG9ydCBtc3ZjcnQKKyAgICBpbXBvcnQgd2lu
MzJwaXBlCisgICAgaW1wb3J0IHdpbjMyZmlsZQorZWxzZToKKyAgICBpbXBvcnQgZmNudGwKKyAg
ICBpbXBvcnQgc29ja2V0CisKKworY2xhc3MgVW5peFBpcGVTZXJ2ZXIob2JqZWN0KToKKworICAg
IEJVRkZFUiA9IDQwOTYKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoKToKKyAgICAgICAg
aWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgorICAgICAgICAgICAgcmFpc2UgT1NF
cnJvcignVW5peFBpcGVTZXJ2ZXIgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0nKQor
ICAgICAgICBzZWxmLl9wYXRoID0gcGF0aAorICAgICAgICBzZWxmLl9jb25uZWN0ZWQgPSBGYWxz
ZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnVubGluayhzZWxmLl9wYXRoKQorICAg
ICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYu
X3BhdGgpOgorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIkNvdWxkIG5vdCB1bmxpbmsg
JyIgKyBzZWxmLl9wYXRoICsgIicsIHRoZSB0YXJnZXQgcGF0aCBpcyBhIGZpbGUgbm90IGEgcGlw
ZS4iKQorCisgICAgICAgIHNlbGYuX3NvY2tldCA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VO
SVgsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc2VsZi5fc29ja2V0LnNldHRpbWVvdXQo
MTUpCisgICAgICAgIHNlbGYuX3NvY2tldC5iaW5kKHNlbGYuX3BhdGgpCisgICAgICAgIHNlbGYu
X3NvY2tldC5saXN0ZW4oMCkKKworICAgIGRlZiBjb25uZWN0KHNlbGYpOgorICAgICAgICBpZiBz
ZWxmLl9jb25uZWN0ZWQ6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICB0cnk6Cisg
ICAgICAgICAgICBzZWxmLl9jb25uZWN0aW9uLCBzZWxmLl9hZGRyZXNzID0gc2VsZi5fc29ja2V0
LmFjY2VwdCgpCisgICAgICAgICAgICBzZWxmLl9jb25uZWN0aW9uLnNldGJsb2NraW5nKDApCisg
ICAgICAgICAgICBzZWxmLl9jb25uZWN0ZWQgPSBUcnVlCisgICAgICAgIGV4Y2VwdCBzb2NrZXQu
dGltZW91dDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQor
CisgICAgZGVmIGRpc2Nvbm5lY3Qoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9jb25uZWN0
ZWQ6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fc29ja2V0LmNsb3NlKCkKKyAg
ICAgICAgc2VsZi5fY29ubmVjdGVkID0gRmFsc2UKKworICAgIGRlZiByZWFkKHNlbGYpOgorICAg
ICAgICB0cnk6CisgICAgICAgICAgICBkYXRhID0gc2VsZi5fY29ubmVjdGlvbi5yZWN2KHNlbGYu
QlVGRkVSKQorICAgICAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgICAgICByZXR1cm4gZGF0
YQorICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCBlOgorICAgICAgICAgICAgZXJyID0gZS5h
cmdzWzBdCisgICAgICAgICAgICBpZiBlcnIgPT0gZXJybm8uRUFHQUlOIG9yIGVyciA9PSBlcnJu
by5FV09VTERCTE9DSzoKKyAgICAgICAgICAgICAgICByZXR1cm4gW10KKyAgICAgICAgc2VsZi5k
aXNjb25uZWN0KCkKKyAgICAgICAgcmV0dXJuIFtdCisKKyAgICBkZWYgc2VuZChzZWxmLCBkYXRh
KToKKyAgICAgICAgaWYgbm90IHNlbGYuX2Nvbm5lY3RlZDoKKyAgICAgICAgICAgIHJldHVybiBG
YWxzZQorICAgICAgICBzZWxmLl9jb25uZWN0aW9uLnNlbmQoZGF0YSkKKyAgICAgICAgcmV0dXJu
IFRydWUKKworICAgIGRlZiBwYXRoKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcGF0aAor
CisgICAgZGVmIGlzQ29ubmVjdGVkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fY29ubmVj
dGVkCisKKworY2xhc3MgQWJzdHJhY3RQaXBlKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18o
c2VsZik6CisgICAgICAgIHNlbGYuY2xlYW4oKQorCisgICAgZGVmIGNvbm5lY3Qoc2VsZik6Cisg
ICAgICAgIHJldHVybiBzZWxmLmlzQ29ubmVjdGVkKCkKKworICAgIGRlZiBjbGVhbihzZWxmKToK
KyAgICAgICAgc2VsZi5fc3Rkb3V0U3RyZWFtID0gaW8uQnl0ZXNJTygpCisgICAgICAgIHNlbGYu
X3N0ZGVyclN0cmVhbSA9IGlvLkJ5dGVzSU8oKQorICAgICAgICBzZWxmLl9zdGRvdXRUcmMgPSAw
CisgICAgICAgIHNlbGYuX3N0ZGVyclRyYyA9IDAKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAg
ICAgICAgcmV0dXJuIG5vdCBzZWxmLmlzQ29ubmVjdGVkKCkKKworICAgIGRlZiBzZW5kKHNlbGYs
IGRhdGEpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBpc0Nvbm5lY3RlZChzZWxm
KToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX3BhcnNlTWVzc2FnZShzZWxmLCBp
c0Jsb2NraW5nPUZhbHNlKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgcmVhZExp
bmUoc2VsZiwgaXNCbG9ja2luZz1GYWxzZSk6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAg
ICAgICBlcnIgPSBzZWxmLnN0ZGVyclJlYWQoKQorICAgICAgICAgICAgaWYgZXJyOgorICAgICAg
ICAgICAgICAgIHJldHVybiBlcnIKKyAgICAgICAgICAgIG91dCA9IHNlbGYuc3Rkb3V0UmVhZCgp
CisgICAgICAgICAgICBpZiBvdXQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIG91dAorICAgICAg
ICAgICAgc2VsZi5fcGFyc2VNZXNzYWdlKGlzQmxvY2tpbmcpCisgICAgICAgICAgICBpZiBub3Qg
aXNCbG9ja2luZzoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICByZXR1cm4gTm9uZQor
CisgICAgZGVmIHN0ZG91dFJlYWQoc2VsZiwgaXNCbG9ja2luZz1GYWxzZSk6CisgICAgICAgIHRy
aWVkT25jZSA9IEZhbHNlCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBzZWxmLl9z
dGRvdXRTdHJlYW0uc2VlayhzZWxmLl9zdGRvdXRUcmMsIGlvLlNFRUtfU0VUKQorICAgICAgICAg
ICAgZGF0YSA9IHNlbGYuX3N0ZG91dFN0cmVhbS5yZWFkbGluZSgpCisgICAgICAgICAgICBpZiBk
YXRhIGFuZCBkYXRhWy0xXSA9PSAnXG4nOgorICAgICAgICAgICAgICAgIHNlbGYuX3N0ZG91dFRy
YyA9IHNlbGYuX3N0ZG91dFRyYyArIGxlbihkYXRhKQorICAgICAgICAgICAgICAgIHJldHVybiBk
YXRhCisgICAgICAgICAgICBzZWxmLl9wYXJzZU1lc3NhZ2UoaXNCbG9ja2luZykKKyAgICAgICAg
ICAgIGlmIG5vdCBpc0Jsb2NraW5nIGFuZCB0cmllZE9uY2U6CisgICAgICAgICAgICAgICAgYnJl
YWsKKyAgICAgICAgICAgIHRyaWVkT25jZSA9IFRydWUKKyAgICAgICAgcmV0dXJuIE5vbmUKKwor
ICAgIGRlZiBzdGRlcnJSZWFkKHNlbGYsIGlzQmxvY2tpbmc9RmFsc2UpOgorICAgICAgICB0cmll
ZE9uY2UgPSBGYWxzZQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgc2VsZi5fc3Rk
ZXJyU3RyZWFtLnNlZWsoc2VsZi5fc3RkZXJyVHJjLCBpby5TRUVLX1NFVCkKKyAgICAgICAgICAg
IGRhdGEgPSBzZWxmLl9zdGRlcnJTdHJlYW0ucmVhZGxpbmUoKQorICAgICAgICAgICAgaWYgZGF0
YSBhbmQgZGF0YVstMV0gPT0gJ1xuJzoKKyAgICAgICAgICAgICAgICBzZWxmLl9zdGRlcnJUcmMg
PSBzZWxmLl9zdGRlcnJUcmMgKyBsZW4oZGF0YSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZGF0
YQorICAgICAgICAgICAgc2VsZi5fcGFyc2VNZXNzYWdlKGlzQmxvY2tpbmcpCisgICAgICAgICAg
ICBpZiBub3QgaXNCbG9ja2luZyBhbmQgdHJpZWRPbmNlOgorICAgICAgICAgICAgICAgIGJyZWFr
CisgICAgICAgICAgICB0cmllZE9uY2UgPSBUcnVlCisgICAgICAgIHJldHVybiBOb25lCisKKyAg
ICBkZWYgcmVhZEJ1ZmZlclN0ZG91dChzZWxmKToKKyAgICAgICAgc2VsZi5fc3Rkb3V0U3RyZWFt
LnNlZWsoMCwgaW8uU0VFS19FTkQpCisgICAgICAgIGVuZFZhbCA9IHNlbGYuX3N0ZG91dFN0cmVh
bS50ZWxsKCkKKyAgICAgICAgaWYgZW5kVmFsIDw9IHNlbGYuX3N0ZG91dFRyYzoKKyAgICAgICAg
ICAgIHJldHVybiAnJworICAgICAgICBzZWxmLl9zdGRvdXRTdHJlYW0uc2VlayhzZWxmLl9zdGRv
dXRUcmMsIGlvLlNFRUtfU0VUKQorICAgICAgICBzaXplID0gZW5kVmFsIC0gc2VsZi5fc3Rkb3V0
VHJjCisgICAgICAgIHNlbGYuX3N0ZG91dFRyYyA9IGVuZFZhbAorICAgICAgICByZXR1cm4gc2Vs
Zi5fc3Rkb3V0U3RyZWFtLnJlYWQoc2l6ZSkKKworICAgIGRlZiByZWFkQnVmZmVyU3RkZXJyKHNl
bGYpOgorICAgICAgICBzZWxmLl9zdGRlcnJTdHJlYW0uc2VlaygwLCBpby5TRUVLX0VORCkKKyAg
ICAgICAgZW5kVmFsID0gc2VsZi5fc3RkZXJyU3RyZWFtLnRlbGwoKQorICAgICAgICBpZiBlbmRW
YWwgPD0gc2VsZi5fc3RkZXJyVHJjOgorICAgICAgICAgICAgcmV0dXJuICcnCisgICAgICAgIHNl
bGYuX3N0ZGVyclN0cmVhbS5zZWVrKHNlbGYuX3N0ZGVyclRyYywgaW8uU0VFS19TRVQpCisgICAg
ICAgIHNpemUgPSBlbmRWYWwgLSBzZWxmLl9zdGRlcnJUcmMKKyAgICAgICAgc2VsZi5fc3RkZXJy
VHJjID0gZW5kVmFsCisgICAgICAgIHJldHVybiBzZWxmLl9zdGRlcnJTdHJlYW0ucmVhZChzaXpl
KQorCisgICAgZGVmIHJlYWRCbG9ja1N0ZG91dChzZWxmLCBzaXplLCBpc0Jsb2NraW5nPUZhbHNl
KToKKyAgICAgICAgdHJpZWRPbmNlID0gRmFsc2UKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAg
ICAgICAgIHNlbGYuX3N0ZG91dFN0cmVhbS5zZWVrKDAsIGlvLlNFRUtfRU5EKQorICAgICAgICAg
ICAgaWYgc2VsZi5fc3Rkb3V0U3RyZWFtLnRlbGwoKSAtIHNlbGYuX3N0ZG91dFRyYyA+PSBzaXpl
OgorICAgICAgICAgICAgICAgIHNlbGYuX3N0ZG91dFN0cmVhbS5zZWVrKHNlbGYuX3N0ZG91dFRy
YywgaW8uU0VFS19TRVQpCisgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuX3N0ZG91dFN0cmVh
bS5yZWFkKHNpemUpCisgICAgICAgICAgICAgICAgc2VsZi5fc3Rkb3V0VHJjID0gc2VsZi5fc3Rk
b3V0VHJjICsgc2l6ZQorICAgICAgICAgICAgICAgIHJldHVybiBkYXRhCisgICAgICAgICAgICBz
ZWxmLl9wYXJzZU1lc3NhZ2UoaXNCbG9ja2luZykKKyAgICAgICAgICAgIGlmIG5vdCBpc0Jsb2Nr
aW5nIGFuZCB0cmllZE9uY2U6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHRy
aWVkT25jZSA9IFRydWUKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiByZWFkQmxvY2tT
dGRlcnIoc2VsZiwgc2l6ZSwgaXNCbG9ja2luZz1GYWxzZSk6CisgICAgICAgIHRyaWVkT25jZSA9
IEZhbHNlCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBzZWxmLl9zdGRlcnJTdHJl
YW0uc2VlaygwLCBpby5TRUVLX0VORCkKKyAgICAgICAgICAgIGlmIHNlbGYuX3N0ZGVyclN0cmVh
bS50ZWxsKCkgLSBzZWxmLl9zdGRlcnJUcmMgPj0gc2l6ZToKKyAgICAgICAgICAgICAgICBzZWxm
Ll9zdGRlcnJTdHJlYW0uc2VlayhzZWxmLl9zdGRlcnJUcmMsIGlvLlNFRUtfU0VUKQorICAgICAg
ICAgICAgICAgIGRhdGEgPSBzZWxmLl9zdGRlcnJTdHJlYW0ucmVhZChzaXplKQorICAgICAgICAg
ICAgICAgIHNlbGYuX3N0ZGVyclRyYyA9IHNlbGYuX3N0ZGVyclRyYyArIHNpemUKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZGF0YQorICAgICAgICAgICAgc2VsZi5fcGFyc2VNZXNzYWdlKGlzQmxv
Y2tpbmcpCisgICAgICAgICAgICBpZiBub3QgaXNCbG9ja2luZyBhbmQgdHJpZWRPbmNlOgorICAg
ICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICB0cmllZE9uY2UgPSBUcnVlCisgICAgICAg
IHJldHVybiBOb25lCisKKworY2xhc3MgVW5peFBpcGUoQWJzdHJhY3RQaXBlKToKKworICAgIFNU
RElOX0lOREVYID0gMAorICAgIFNURE9VVF9JTkRFWCA9IDEKKyAgICBTVERFUlJfSU5ERVggPSAy
CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyKToKKyAgICAg
ICAgQWJzdHJhY3RQaXBlLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuc3Rkb3V0RmlsZSA9
IHN0ZG91dAorICAgICAgICBzZWxmLnN0ZGVyckZpbGUgPSBzdGRlcnIKKworICAgICAgICBwYXRo
cyA9IFtzdGRpbiwgc3Rkb3V0LCBzdGRlcnJdCisgICAgICAgIHNlbGYuX3NvY2tldHMgPSBbXQor
ICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCAzKToKKyAgICAgICAgICAgIHNlbGYuX3NvY2tldHMu
YXBwZW5kKFVuaXhQaXBlU2VydmVyKHBhdGhzW2ldKSkKKworICAgICAgICBzZWxmLmNsZWFuKCkK
KworICAgIGRlZiBjb25uZWN0KHNlbGYpOgorICAgICAgICBmb3Igc29jayBpbiBzZWxmLl9zb2Nr
ZXRzOgorICAgICAgICAgICAgc29jay5jb25uZWN0KCkKKyAgICAgICAgcmV0dXJuIHNlbGYuaXND
b25uZWN0ZWQoKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBmb3Igc29jayBpbiBz
ZWxmLl9zb2NrZXRzOgorICAgICAgICAgICAgc29jay5kaXNjb25uZWN0KCkKKworICAgIGRlZiBz
ZW5kKHNlbGYsIGRhdGEpOgorICAgICAgICByZXR1cm4gc2VsZi5fc29ja2V0c1tVbml4UGlwZS5T
VERJTl9JTkRFWF0uc2VuZChkYXRhKQorCisgICAgZGVmIGlzQ29ubmVjdGVkKHNlbGYpOgorICAg
ICAgICBmb3Igc29jayBpbiBzZWxmLl9zb2NrZXRzOgorICAgICAgICAgICAgaWYgbm90IHNvY2su
aXNDb25uZWN0ZWQoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0
dXJuIFRydWUKKworICAgIGRlZiBfcGFyc2VNZXNzYWdlKHNlbGYsIGlzQmxvY2tpbmc9RmFsc2Up
OgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgc3RkRXJyRGF0YSA9IFtdCisgICAg
ICAgICAgICBzdGRFcnJEYXRhID0gc2VsZi5fc29ja2V0c1tVbml4UGlwZS5TVERFUlJfSU5ERVhd
LnJlYWQoKQorICAgICAgICAgICAgaWYgc3RkRXJyRGF0YToKKyAgICAgICAgICAgICAgICBzZWxm
Ll9zdGRlcnJTdHJlYW0uc2VlaygwLCBpby5TRUVLX0VORCkKKyAgICAgICAgICAgICAgICBzZWxm
Ll9zdGRlcnJTdHJlYW0ud3JpdGUoc3RkRXJyRGF0YSkKKyAgICAgICAgICAgIHN0ZE91dERhdGEg
PSBbXQorICAgICAgICAgICAgc3RkT3V0RGF0YSA9IHNlbGYuX3NvY2tldHNbVW5peFBpcGUuU1RE
T1VUX0lOREVYXS5yZWFkKCkKKyAgICAgICAgICAgIGlmIHN0ZE91dERhdGE6CisgICAgICAgICAg
ICAgICAgc2VsZi5fc3Rkb3V0U3RyZWFtLnNlZWsoMCwgaW8uU0VFS19FTkQpCisgICAgICAgICAg
ICAgICAgc2VsZi5fc3Rkb3V0U3RyZWFtLndyaXRlKHN0ZE91dERhdGEpCisgICAgICAgICAgICBp
ZiBzdGRFcnJEYXRhIG9yIHN0ZE91dERhdGE6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUK
KyAgICAgICAgICAgIGlmIG5vdCBpc0Jsb2NraW5nOgorICAgICAgICAgICAgICAgIGJyZWFrCisg
ICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGhhbmRsZV9pbnRlcnJ1cHQoc2VsZik6Cisg
ICAgICAgIGlmIG5vdCBzZWxmLmlzQ29ubmVjdGVkKCk6CisgICAgICAgICAgICByYWlzZSBLZXli
b2FyZEludGVycnVwdAorCisKK2NsYXNzIFByb2Nlc3NQaXBlKEFic3RyYWN0UGlwZSk6CisKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgY21kLCBlbnZpcm89Tm9uZSwgdW5pX25ld2xpbmVz
PUZhbHNlKToKKworICAgICAgICBBYnN0cmFjdFBpcGUuX19pbml0X18oc2VsZikKKworICAgICAg
ICBzZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLl9ob3N0ID0gc2VsZi5fcG9ydC5ob3N0
CisKKyAgICAgICAgc2VsZi5fcHJvYyA9IHNlbGYuX2hvc3QuZXhlY3V0aXZlLnBvcGVuKGNtZCwg
c3RkaW49c2VsZi5faG9zdC5leGVjdXRpdmUuUElQRSwKKyAgICAgICAgICAgIHN0ZG91dD1zZWxm
Ll9ob3N0LmV4ZWN1dGl2ZS5QSVBFLAorICAgICAgICAgICAgc3RkZXJyPXNlbGYuX2hvc3QuZXhl
Y3V0aXZlLlBJUEUsCisgICAgICAgICAgICBjbG9zZV9mZHM9bm90IHNlbGYuX2hvc3QucGxhdGZv
cm0uaXNfd2luKCksCisgICAgICAgICAgICBlbnY9ZW52aXJvLAorICAgICAgICAgICAgdW5pdmVy
c2FsX25ld2xpbmVzPXVuaV9uZXdsaW5lcykKKworICAgICAgICBzZWxmLl91c2Vfd2luMzJfYXBp
cyA9IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKQorICAgICAgICBpZiBub3Qgc2VsZi5f
dXNlX3dpbjMyX2FwaXM6CisgICAgICAgICAgICBmZCA9IHNlbGYuX3Byb2Muc3Rkb3V0LmZpbGVu
bygpCisgICAgICAgICAgICBmbCA9IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZMKQorICAg
ICAgICAgICAgZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfU0VURkwsIGZsIHwgb3MuT19OT05CTE9D
SykKKyAgICAgICAgICAgIGZkID0gc2VsZi5fcHJvYy5zdGRlcnIuZmlsZW5vKCkKKyAgICAgICAg
ICAgIGZsID0gZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkwpCisgICAgICAgICAgICBmY250
bC5mY250bChmZCwgZmNudGwuRl9TRVRGTCwgZmwgfCBvcy5PX05PTkJMT0NLKQorCisgICAgZGVm
IHBpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2MucGlkCisKKyAgICBkZWYgaXND
b25uZWN0ZWQoc2VsZik6CisgICAgICAgIHJldHVybiBub3Qgc2VsZi5fcHJvYy5wb2xsKCkKKwor
ICAgIGRlZiBoYW5kbGVfaW50ZXJydXB0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9wcm9jLnJl
dHVybmNvZGUgaW4gKC0xMDczNzQxNTEwLCAtc2lnbmFsLlNJR0lOVCk6CisgICAgICAgICAgICBy
YWlzZSBLZXlib2FyZEludGVycnVwdAorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBp
ZiBzZWxmLl9wcm9jLnBvbGwoKToKKyAgICAgICAgICAgIHNlbGYuX2hvc3QuZXhlY3V0aXZlLmtp
bGxfcHJvY2VzcyhzZWxmLl9wcm9jLnBpZCkKKyAgICAgICAgaWYgc2VsZi5fcHJvYy5wb2xsKCkg
aXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9wcm9jLndhaXQoKQorCisgICAgICAgIGlm
IHNlbGYuX3Byb2Muc3RkaW46CisgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGluLmNsb3NlKCkK
KyAgICAgICAgaWYgc2VsZi5fcHJvYy5zdGRvdXQ6CisgICAgICAgICAgICBzZWxmLl9wcm9jLnN0
ZG91dC5jbG9zZSgpCisgICAgICAgIGlmIHNlbGYuX3Byb2Muc3RkZXJyOgorICAgICAgICAgICAg
c2VsZi5fcHJvYy5zdGRlcnIuY2xvc2UoKQorICAgICAgICByZXR1cm4gbm90IHNlbGYuaXNDb25u
ZWN0ZWQoKQorCisgICAgZGVmIHNlbmQoc2VsZiwgYnl0ZXMpOgorICAgICAgICB0cnk6CisgICAg
ICAgICAgICBzZWxmLl9wcm9jLnN0ZGluLndyaXRlKGJ5dGVzKQorICAgICAgICBleGNlcHQgSU9F
cnJvciwgZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQor
CisgICAgZGVmIF91bml4c3RkQmxvY2soc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3Byb2Muc3Rk
b3V0LmNsb3NlZDoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHNlbGVjdF9mZHMg
PSBbXQorICAgICAgICBzZWxlY3RfZmRzLmFwcGVuZChzZWxmLl9wcm9jLnN0ZG91dC5maWxlbm8o
KSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVhZF9mZHMsIF8sIF8gPSBzZWxlY3Quc2Vs
ZWN0KHNlbGVjdF9mZHMsIFtdLCBzZWxlY3RfZmRzLCAwKQorICAgICAgICBleGNlcHQgc2VsZWN0
LmVycm9yLCBlOgorICAgICAgICAgICAgaWYgZS5hcmdzWzBdID09IGVycm5vLkVJTlZBTDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgcmFpc2UKKworICAgICAgICB0
cnk6CisgICAgICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZG91dC5maWxlbm8oKSBpbiByZWFkX2Zk
czoKKyAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fcHJvYy5zdGRvdXQucmVhZCgpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGRhdGEKKyAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6CisgICAg
ICAgICAgICBwYXNzCisKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBfdW5peGVyckJs
b2NrKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZGVyci5jbG9zZWQ6CisgICAgICAg
ICAgICByZXR1cm4gTm9uZQorICAgICAgICBzZWxlY3RfZmRzID0gW10KKyAgICAgICAgc2VsZWN0
X2Zkcy5hcHBlbmQoc2VsZi5fcHJvYy5zdGRlcnIuZmlsZW5vKCkpCisgICAgICAgIHRyeToKKyAg
ICAgICAgICAgIHJlYWRfZmRzLCBfLCBfID0gc2VsZWN0LnNlbGVjdChzZWxlY3RfZmRzLCBbXSwg
c2VsZWN0X2ZkcywgMCkKKyAgICAgICAgZXhjZXB0IHNlbGVjdC5lcnJvciwgZToKKyAgICAgICAg
ICAgIGlmIGUuYXJnc1swXSA9PSBlcnJuby5FSU5WQUw6CisgICAgICAgICAgICAgICAgcmV0dXJu
IE5vbmUKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYg
c2VsZi5fcHJvYy5zdGRlcnIuZmlsZW5vKCkgaW4gcmVhZF9mZHM6CisgICAgICAgICAgICAgICAg
ZGF0YSA9IHNlbGYuX3Byb2Muc3RkZXJyLnJlYWQoKQorICAgICAgICAgICAgICAgIHJldHVybiBk
YXRhCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgorICAgICAgICAgICAgcGFzcworCisgICAg
ICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX3dpbjMyTm9uQmxvY2tpbmdSZWFkKHNlbGYsIGhh
bmRsZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF8sIGF2YWlsLCBfID0gd2luMzJwaXBl
LlBlZWtOYW1lZFBpcGUoaGFuZGxlLCAwKQorICAgICAgICAgICAgaWYgYXZhaWwgPiAwOgorICAg
ICAgICAgICAgICAgIF8sIGJ1ZiA9IHdpbjMyZmlsZS5SZWFkRmlsZShoYW5kbGUsIGF2YWlsLCBO
b25lKQorICAgICAgICAgICAgICAgIHJldHVybiBidWYKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlv
biwgZToKKyAgICAgICAgICAgIGlmIGVbMF0gbm90IGluICgxMDksIGVycm5vLkVTSFVURE9XTik6
ICAjIDEwOSA9PSB3aW4zMiBFUlJPUl9CUk9LRU5fUElQRQorICAgICAgICAgICAgICAgIHJhaXNl
CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX3dpbjMyc3RkQmxvY2soc2VsZik6Cisg
ICAgICAgIG91dF9maCA9IG1zdmNydC5nZXRfb3NmaGFuZGxlKHNlbGYuX3Byb2Muc3Rkb3V0LmZp
bGVubygpKQorICAgICAgICByZXR1cm4gc2VsZi5fd2luMzJOb25CbG9ja2luZ1JlYWQob3V0X2Zo
KQorCisgICAgZGVmIF93aW4zMmVyckJsb2NrKHNlbGYpOgorICAgICAgICBlcnJfZmggPSBtc3Zj
cnQuZ2V0X29zZmhhbmRsZShzZWxmLl9wcm9jLnN0ZGVyci5maWxlbm8oKSkKKyAgICAgICAgcmV0
dXJuIHNlbGYuX3dpbjMyTm9uQmxvY2tpbmdSZWFkKGVycl9maCkKKworICAgIGRlZiBfcGFyc2VN
ZXNzYWdlKHNlbGYsIGlzQmxvY2tpbmc9RmFsc2UpOgorICAgICAgICB3aGlsZSBUcnVlOgorICAg
ICAgICAgICAgc3RkRXJyRGF0YSA9IFtdCisgICAgICAgICAgICBpZiBzZWxmLl91c2Vfd2luMzJf
YXBpczoKKyAgICAgICAgICAgICAgICBzdGRFcnJEYXRhID0gc2VsZi5fd2luMzJlcnJCbG9jaygp
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN0ZEVyckRhdGEgPSBzZWxmLl91
bml4ZXJyQmxvY2soKQorICAgICAgICAgICAgaWYgc3RkRXJyRGF0YToKKyAgICAgICAgICAgICAg
ICBzZWxmLl9zdGRlcnJTdHJlYW0uc2VlaygwLCBpby5TRUVLX0VORCkKKyAgICAgICAgICAgICAg
ICBzZWxmLl9zdGRlcnJTdHJlYW0ud3JpdGUoc3RkRXJyRGF0YSkKKyAgICAgICAgICAgIHN0ZE91
dERhdGEgPSBbXQorICAgICAgICAgICAgaWYgc2VsZi5fdXNlX3dpbjMyX2FwaXM6CisgICAgICAg
ICAgICAgICAgc3RkT3V0RGF0YSA9IHNlbGYuX3dpbjMyc3RkQmxvY2soKQorICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICBzdGRPdXREYXRhID0gc2VsZi5fdW5peHN0ZEJsb2NrKCkK
KyAgICAgICAgICAgIGlmIHN0ZE91dERhdGE6CisgICAgICAgICAgICAgICAgc2VsZi5fc3Rkb3V0
U3RyZWFtLnNlZWsoMCwgaW8uU0VFS19FTkQpCisgICAgICAgICAgICAgICAgc2VsZi5fc3Rkb3V0
U3RyZWFtLndyaXRlKHN0ZE91dERhdGEpCisgICAgICAgICAgICBpZiBzdGRFcnJEYXRhIG9yIHN0
ZE91dERhdGE6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGlmIG5v
dCBpc0Jsb2NraW5nOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHJldHVybiBGYWxz
ZQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vaXBjX3BpcGVfdGVzdGNhc2Uu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vaXBjX3BpcGVf
dGVzdGNhc2UucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vaXBjX3BpcGVfdGVzdGNhc2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzEgQEAK
KyMgQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBlcnJubworaW1w
b3J0IGlvCitpbXBvcnQgc29ja2V0CitpbXBvcnQgdGltZQorCitmcm9tIHdlYmtpdHB5LmNvbW1v
bi5pcGNfcGlwZSBpbXBvcnQgQWJzdHJhY3RQaXBlCisKKworY2xhc3MgRHVtbXlQcm9jZXNzUGlw
ZShBYnN0cmFjdFBpcGUpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQ9Tm9uZSwgY21k
PU5vbmUsIGVudmlybz1Ob25lLCB1bmlfbmV3bGluZXM9RmFsc2UpOgorICAgICAgICBBYnN0cmFj
dFBpcGUuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAg
aWYgc2VsZi5fcG9ydDoKKyAgICAgICAgICAgIHNlbGYuX2hvc3QgPSBzZWxmLl9wb3J0Lmhvc3QK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2hvc3QgPSBOb25lCisgICAgICAgIHNl
bGYuY29ubmVjdGVkRm9yVGVzdGluZyA9IFRydWUKKworICAgIGRlZiBwaWQoc2VsZik6CisgICAg
ICAgIHJldHVybiAxCisKKyAgICBkZWYgaXNDb25uZWN0ZWQoc2VsZik6CisgICAgICAgIHJldHVy
biBzZWxmLmNvbm5lY3RlZEZvclRlc3RpbmcKKworICAgIGRlZiBzZW5kKHNlbGYsIGJ5dGVzKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuY29ubmVjdGVkRm9yVGVzdGluZworCisgICAgZGVmIF9wYXJz
ZU1lc3NhZ2Uoc2VsZiwgaXNCbG9ja2luZz1GYWxzZSk6CisgICAgICAgIHJldHVybiBGYWxzZQor
CisgICAgZGVmIHB1c2hEYXRhRm9yVGVzdGluZyhzZWxmLCBkYXRhLCBzdGRlcnI9RmFsc2UsIHN0
ZG91dD1UcnVlKToKKyAgICAgICAgaWYgc3RkZXJyOgorICAgICAgICAgICAgc2VsZi5fc3RkZXJy
U3RyZWFtLnNlZWsoMCwgaW8uU0VFS19FTkQpCisgICAgICAgICAgICBzZWxmLl9zdGRlcnJTdHJl
YW0ud3JpdGUoZGF0YSkKKyAgICAgICAgZWxpZiBzdGRvdXQ6CisgICAgICAgICAgICBzZWxmLl9z
dGRvdXRTdHJlYW0uc2VlaygwLCBpby5TRUVLX0VORCkKKyAgICAgICAgICAgIHNlbGYuX3N0ZG91
dFN0cmVhbS53cml0ZShkYXRhKQorCisKK2NsYXNzIFVuaXhQaXBlQ2xpZW50KG9iamVjdCk6CisK
KyAgICBCVUZGRVIgPSA0MDk2CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCk6CisgICAg
ICAgIHNlbGYuX3BhdGggPSBwYXRoCisgICAgICAgIHNlbGYuX2Nvbm5lY3RlZCA9IEZhbHNlCisg
ICAgICAgIHNlbGYuX2Nvbm5lY3Rpb24gPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYLCBz
b2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYuX3N0cmVhbSA9IGlvLkJ5dGVzSU8oKQor
ICAgICAgICBzZWxmLl9zdHJlYW1UcmMgPSAwCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAg
ICAgICAgc2VsZi5kaXNjb25uZWN0KCkKKworICAgIGRlZiBjb25uZWN0KHNlbGYpOgorICAgICAg
ICBpZiBzZWxmLl9jb25uZWN0ZWQ6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICB0
cnk6CisgICAgICAgICAgICBzZWxmLl9jb25uZWN0aW9uLmNvbm5lY3Qoc2VsZi5fcGF0aCkKKyAg
ICAgICAgICAgIHNlbGYuX2Nvbm5lY3RlZCA9IFRydWUKKyAgICAgICAgZXhjZXB0OgorICAgICAg
ICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgZGlzY29u
bmVjdChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX2Nvbm5lY3RlZDoKKyAgICAgICAgICAg
IHJldHVybgorICAgICAgICBzZWxmLl9jb25uZWN0aW9uLmNsb3NlKCkKKyAgICAgICAgc2VsZi5f
Y29ubmVjdGVkID0gRmFsc2UKKworICAgIGRlZiByZWFkbGluZShzZWxmLCBpc0Jsb2NraW5nPUZh
bHNlKToKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHNlbGYuX3N0cmVhbS5zZWVr
KHNlbGYuX3N0cmVhbVRyYywgaW8uU0VFS19TRVQpCisgICAgICAgICAgICBkYXRhID0gc2VsZi5f
c3RyZWFtLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGlmIGRhdGEgYW5kIGRhdGFbLTFdID09ICdc
bic6CisgICAgICAgICAgICAgICAgc2VsZi5fc3RyZWFtVHJjID0gc2VsZi5fc3RyZWFtVHJjICsg
bGVuKGRhdGEpCisgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEKKyAgICAgICAgICAgIGJsb2Nr
ID0gc2VsZi5yZWFkKCkKKyAgICAgICAgICAgIGlmIGJsb2NrOgorICAgICAgICAgICAgICAgIHNl
bGYuX3N0cmVhbS5zZWVrKDAsIGlvLlNFRUtfRU5EKQorICAgICAgICAgICAgICAgIHNlbGYuX3N0
cmVhbS53cml0ZShibG9jaykKKyAgICAgICAgICAgIGlmIG5vdCBpc0Jsb2NraW5nOgorICAgICAg
ICAgICAgICAgIGJyZWFrCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgcmVhZChzZWxm
KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2Nvbm5lY3Rpb24ucmVj
dihzZWxmLkJVRkZFUikKKyAgICAgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGRhdGEKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgZToKKyAgICAgICAgICAgIGVy
ciA9IGUuYXJnc1swXQorICAgICAgICAgICAgaWYgZXJyID09IGVycm5vLkVBR0FJTiBvciBlcnIg
PT0gZXJybm8uRVdPVUxEQkxPQ0s6CisgICAgICAgICAgICAgICAgcmV0dXJuIFtdCisgICAgICAg
IHNlbGYuZGlzY29ubmVjdCgpCisgICAgICAgIHJldHVybiBbXQorCisgICAgZGVmIHNlbmQoc2Vs
ZiwgZGF0YSk6CisgICAgICAgIGlmIG5vdCBzZWxmLl9jb25uZWN0ZWQ6CisgICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKKyAgICAgICAgc2VsZi5fY29ubmVjdGlvbi5zZW5kKGRhdGEpCisgICAgICAg
IHJldHVybiBUcnVlCisKKyAgICBkZWYgcG9ydChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
X3BhdGgKKworICAgIGRlZiBpc0Nvbm5lY3RlZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
X2Nvbm5lY3RlZApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vaXBjX3BpcGVf
dW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
aXBjX3BpcGVfdW5pdHRlc3QucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vaXBjX3BpcGVfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxNTcgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBv
cworaW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0
dGVzdAorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5pcGNfcGlwZSBpbXBvcnQgVW5peFBpcGVTZXJ2
ZXIsIFVuaXhQaXBlCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5pcGNfcGlwZV90ZXN0Y2FzZSBpbXBv
cnQgRHVtbXlQcm9jZXNzUGlwZSwgVW5peFBpcGVDbGllbnQKKworCitkZWYgVW5peFBpcGVDbGll
bnRUZXN0aW5nVGhyZWFkKHNvdXJjZSwgcGF0aCwgYXJndW1lbnRzKToKKyAgICBzb3VyY2UuY2xp
ZW50UmVzdWx0cyA9IFtdCisgICAgY2xpZW50ID0gVW5peFBpcGVDbGllbnQocGF0aCkKKworICAg
IGRlYWRsaW5lID0gdGltZS50aW1lKCkgKyAxLjAKKyAgICB3aGlsZSB0aW1lLnRpbWUoKSA8IGRl
YWRsaW5lIGFuZCBub3QgY2xpZW50LmlzQ29ubmVjdGVkKCk6CisgICAgICAgIGNsaWVudC5jb25u
ZWN0KCkKKyAgICBpZiBub3QgY2xpZW50LmlzQ29ubmVjdGVkKCk6CisgICAgICAgIHJldHVybiBO
b25lCisgICAgcmVhZGluZ21vZGUgPSBGYWxzZQorICAgIGZvciBlbG0gaW4gYXJndW1lbnRzOgor
ICAgICAgICBpZiBlbG0gPT0gJy0tcmVhZCc6CisgICAgICAgICAgICBkYXRhID0gY2xpZW50LnJl
YWRsaW5lKFRydWUpCisgICAgICAgICAgICBzb3VyY2UuY2xpZW50UmVzdWx0cy5hcHBlbmQoZGF0
YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNsaWVudC5zZW5kKGVsbSkKKyAgICBjbGll
bnQuZGlzY29ubmVjdCgpCisgICAgcmV0dXJuIHNvdXJjZS5jbGllbnRSZXN1bHRzCisKKworY2xh
c3MgaXBjUGlwZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIF9faW5pdF9fKHNl
bGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKGlwY1BpcGVUZXN0LCBzZWxmKS5f
X2luaXRfXygqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuY2xpZW50UmVzdWx0cyA9IFtd
CisKKyAgICBkZWYgdGVzdF9hYnN0cmFjdHBpcGVfc3Rkb3V0KHNlbGYpOgorICAgICAgICBwaXBl
ID0gRHVtbXlQcm9jZXNzUGlwZSgpCisKKyAgICAgICAgcGlwZS5wdXNoRGF0YUZvclRlc3Rpbmco
J2NvbWluZyBmcm9tIHN0ZG91dFxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBlLnN0
ZG91dFJlYWQoKSwgJ2NvbWluZyBmcm9tIHN0ZG91dFxuJykKKworICAgICAgICBwaXBlLnB1c2hE
YXRhRm9yVGVzdGluZygnY29taW5nIGZyb20gc3RkZXJyXG4nLCBzdGRlcnI9VHJ1ZSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChwaXBlLnN0ZG91dFJlYWQoKSwgTm9uZSkKKworICAgIGRlZiB0
ZXN0X2Fic3RyYWN0cGlwZV9zdGRlcnIoc2VsZik6CisgICAgICAgIHBpcGUgPSBEdW1teVByb2Nl
c3NQaXBlKCkKKworICAgICAgICBwaXBlLnB1c2hEYXRhRm9yVGVzdGluZygnY29taW5nIGZyb20g
c3Rkb3V0XG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBpcGUuc3RkZXJyUmVhZCgpLCBO
b25lKQorCisgICAgICAgIHBpcGUucHVzaERhdGFGb3JUZXN0aW5nKCdjb21pbmcgZnJvbSBzdGRl
cnJcbicsIHN0ZGVycj1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBpcGUuc3RkZXJy
UmVhZCgpLCAnY29taW5nIGZyb20gc3RkZXJyXG4nKQorCisgICAgZGVmIHRlc3RfYWJzdHJhY3Rw
aXBlX2R1ZWxfc3RyZWFtcyhzZWxmKToKKyAgICAgICAgcGlwZSA9IER1bW15UHJvY2Vzc1BpcGUo
KQorCisgICAgICAgIHBpcGUucHVzaERhdGFGb3JUZXN0aW5nKCdjb21pbmcgZnJvbSBzdGRvdXRc
bicpCisgICAgICAgIHBpcGUucHVzaERhdGFGb3JUZXN0aW5nKCdjb21pbmcgZnJvbSBzdGRlcnJc
bicsIHN0ZGVycj1UcnVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlwZS5yZWFkTGlu
ZSgpLCAnY29taW5nIGZyb20gc3RkZXJyXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBp
cGUucmVhZExpbmUoKSwgJ2NvbWluZyBmcm9tIHN0ZG91dFxuJykKKworICAgIGRlZiB0ZXN0X2Fi
c3RyYWN0cGlwZV9zdGRvdXRibG9jayhzZWxmKToKKyAgICAgICAgcGlwZSA9IER1bW15UHJvY2Vz
c1BpcGUoKQorCisgICAgICAgIHBpcGUucHVzaERhdGFGb3JUZXN0aW5nKCdzdGRvdXQgbGluZVxu
JykKKyAgICAgICAgcGlwZS5wdXNoRGF0YUZvclRlc3RpbmcoJ3N0ZG91dCBibG9jaycpCisKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBlLnJlYWRCdWZmZXJTdGRvdXQoKSwgJ3N0ZG91dCBs
aW5lXG5zdGRvdXQgYmxvY2snKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBpcGUucmVhZEJ1
ZmZlclN0ZGVycigpLCAnJykKKworICAgIGRlZiB0ZXN0X2Fic3RyYWN0cGlwZV9zdGRlcnJibG9j
ayhzZWxmKToKKyAgICAgICAgcGlwZSA9IER1bW15UHJvY2Vzc1BpcGUoKQorCisgICAgICAgIHBp
cGUucHVzaERhdGFGb3JUZXN0aW5nKCdzdGRlcnIgbGluZVxuJywgc3RkZXJyPVRydWUpCisgICAg
ICAgIHBpcGUucHVzaERhdGFGb3JUZXN0aW5nKCdzdGRlcnIgYmxvY2snLCBzdGRlcnI9VHJ1ZSkK
KworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBpcGUucmVhZEJ1ZmZlclN0ZG91dCgpLCAnJykK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBlLnJlYWRCdWZmZXJTdGRlcnIoKSwgJ3N0ZGVy
ciBsaW5lXG5zdGRlcnIgYmxvY2snKQorCisgICAgZGVmIHRlc3RfdW5peFBpcGVTZXJ2ZXIoc2Vs
Zik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlcnYgPSBVbml4UGlwZVNlcnZlcignL3Rt
cC91bml4UGlwZS5waXBlJykKKyAgICAgICAgICAgIHRocmVhZCA9IHRocmVhZGluZy5UaHJlYWQo
dGFyZ2V0PVVuaXhQaXBlQ2xpZW50VGVzdGluZ1RocmVhZCwgYXJncz0oc2VsZiwgc2Vydi5wYXRo
KCksIFsnLS1yZWFkJywgJ0xpbmUgMVxuJywgJ0xpbmUgMlxuJywgJy0tcmVhZCddKSkKKyAgICAg
ICAgICAgIHRocmVhZC5zdGFydCgpCisgICAgICAgICAgICBzZXJ2LmNvbm5lY3QoKQorICAgICAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlcnYuaXNDb25uZWN0ZWQoKSkKKworICAgICAgICAgICAg
c2Vydi5zZW5kKCdTZXJ2ZXIgc2VuZCAxXG4nKQorICAgICAgICAgICAgc2Vydi5zZW5kKCdTZXJ2
ZXIgc2VuZCAyXG4nKQorCisgICAgICAgICAgICB0aHJlYWQuam9pbigpCisgICAgICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHNlcnYucmVhZCgpLCAnTGluZSAxXG5MaW5lIDJcbicpCisgICAgICAg
ICAgICBzZXJ2LmRpc2Nvbm5lY3QoKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdT
ZXJ2ZXIgc2VuZCAxXG4nLCBzZWxmLmNsaWVudFJlc3VsdHNbMF0pCisgICAgICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKCdTZXJ2ZXIgc2VuZCAyXG4nLCBzZWxmLmNsaWVudFJlc3VsdHNbMV0pCisg
ICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgorICAgICAgICAgICAgaWYgbm90IHN5cy5wbGF0Zm9y
bS5zdGFydHN3aXRoKCd3aW4nKSBvciBzdHIoZSkgIT0gJ1VuaXhQaXBlU2VydmVyIG5vdCBpbXBs
ZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtJzoKKyAgICAgICAgICAgICAgICByYWlzZSBlCisKKyAg
ICBkZWYgdGVzdF91bml4UGlwZShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGlw
ZSA9IFVuaXhQaXBlKCcvdG1wL3Rlc3RzdGRpbi5waXBlJywgJy90bXAvdGVzdHN0ZG91dC5waXBl
JywgJy90bXAvdGVzdHN0ZGVyci5waXBlJykKKyAgICAgICAgICAgIHN0ZGluVGhyZWFkID0gdGhy
ZWFkaW5nLlRocmVhZCh0YXJnZXQ9VW5peFBpcGVDbGllbnRUZXN0aW5nVGhyZWFkLCBhcmdzPShz
ZWxmLCAnL3RtcC90ZXN0c3RkaW4ucGlwZScsIFsnLS1yZWFkJywgJy0tcmVhZCddKSkKKyAgICAg
ICAgICAgIHN0ZG91dFRocmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PVVuaXhQaXBlQ2xp
ZW50VGVzdGluZ1RocmVhZCwgYXJncz0oc2VsZiwgJy90bXAvdGVzdHN0ZG91dC5waXBlJywgWydz
dGRvdXQgbGluZSAxXG4nLCAnc3Rkb3V0IGxpbmUgMlxuJ10pKQorICAgICAgICAgICAgc3RkZXJy
VGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9VW5peFBpcGVDbGllbnRUZXN0aW5nVGhy
ZWFkLCBhcmdzPShzZWxmLCAnL3RtcC90ZXN0c3RkZXJyLnBpcGUnLCBbJ3N0ZGVyciBsaW5lIDFc
bicsICdzdGRlcnIgbGluZSAyXG4nXSkpCisgICAgICAgICAgICBzdGRpblRocmVhZC5zdGFydCgp
CisgICAgICAgICAgICBzdGRvdXRUaHJlYWQuc3RhcnQoKQorICAgICAgICAgICAgc3RkZXJyVGhy
ZWFkLnN0YXJ0KCkKKyAgICAgICAgICAgIHBpcGUuY29ubmVjdCgpCisKKyAgICAgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShwaXBlLmlzQ29ubmVjdGVkKCkpCisKKyAgICAgICAgICAgIHBpcGUuc2Vu
ZCgnU2VydmVyIHNlbmQgMVxuJykKKyAgICAgICAgICAgIHBpcGUuc2VuZCgnU2VydmVyIHNlbmQg
MlxuJykKKworICAgICAgICAgICAgc3RkaW5UaHJlYWQuam9pbigpCisgICAgICAgICAgICBzdGRv
dXRUaHJlYWQuam9pbigpCisgICAgICAgICAgICBzdGRlcnJUaHJlYWQuam9pbigpCisKKyAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlwZS5zdGRvdXRSZWFkKCksICdzdGRvdXQgbGluZSAx
XG4nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBlLnN0ZG91dFJlYWQoKSwgJ3N0
ZG91dCBsaW5lIDJcbicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBpcGUuc3RkZXJy
UmVhZCgpLCAnc3RkZXJyIGxpbmUgMVxuJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
cGlwZS5zdGRlcnJSZWFkKCksICdzdGRlcnIgbGluZSAyXG4nKQorCisgICAgICAgICAgICBwaXBl
LmNsb3NlKCkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnU2VydmVyIHNlbmQgMVxu
Jywgc2VsZi5jbGllbnRSZXN1bHRzWzBdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgn
U2VydmVyIHNlbmQgMlxuJywgc2VsZi5jbGllbnRSZXN1bHRzWzFdKQorICAgICAgICBleGNlcHQg
T1NFcnJvciwgZToKKyAgICAgICAgICAgIGlmIG5vdCBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgn
d2luJykgb3Igc3RyKGUpICE9ICdVbml4UGlwZVNlcnZlciBub3QgaW1wbGVtZW50ZWQgb24gdGhp
cyBwbGF0Zm9ybSc6CisgICAgICAgICAgICAgICAgcmFpc2UgZQpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2Jhc2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2Jhc2UucHkJKHJldmlzaW9uIDIwOTg4NikKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9iYXNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC04OTcsNiArODk3LDEyIEBAIGNs
YXNzIFBvcnQob2JqZWN0KToKIAogICAgICAgICByZXR1cm4gY2xlYW5fZW52CiAKKyAgICBkZWYg
ZGV2aWNlRGVmaW5lZChzZWxmKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgcnVu
T25EZXZpY2Uoc2VsZiwgY21kLCBlbnZpPU5vbmUpOgorICAgICAgICByZXR1cm4gTm9uZQorCiAg
ICAgZGVmIF9jbGVhcl9nbG9iYWxfY2FjaGVzX2FuZF90ZW1wb3JhcnlfZmlsZXMoc2VsZik6CiAg
ICAgICAgIHBhc3MKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2VfdW5p
dHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2Vf
dW5pdHRlc3QucHkJKHJldmlzaW9uIDIwOTg4NikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC9iYXNlX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zOTUsNiArMzk1LDEyIEBA
IGNsYXNzIFBvcnRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKHBvcnQuaXNfdzNjX3Jlc291cmNlX2ZpbGUocG9ydC5ob3N0LmZpbGVzeXN0ZW0sIHBvcnQu
bGF5b3V0X3Rlc3RzX2RpcigpICsgIi9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1hN
TEh0dHBSZXF1ZXN0IiwgInhtbGh0dHByZXF1ZXN0LXN5bmMtYmxvY2stZGVmZXItc2NyaXB0cy1z
dWJmcmFtZS5odG1sIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3J0LmlzX3czY19yZXNv
dXJjZV9maWxlKHBvcnQuaG9zdC5maWxlc3lzdGVtLCBwb3J0LmxheW91dF90ZXN0c19kaXIoKSAr
ICIvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9kb20vbm9kZXMvRG9jdW1lbnQtY3Jl
YXRlRWxlbWVudC1uYW1lc3BhY2UtdGVzdHMiLCAidGVzdC5odG1sIikpCiAKKyAgICBkZWYgdGVz
dF9kZXZpY2Uoc2VsZik6CisgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCisgICAgICAg
IHNlbGYuYXNzZXJ0RmFsc2UocG9ydC5kZXZpY2VEZWZpbmVkKCkpCisgICAgICAgIHNlbGYuYXNz
ZXJ0SXNOb25lKHBvcnQucnVuT25EZXZpY2UoWydwaW5nJywgJzxuby1pZD4nXSkpCisKKwogY2xh
c3MgTmF0dXJhbENvbXBhcmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAo
c2VsZik6CiAgICAgICAgIHNlbGYuX3BvcnQgPSBUZXN0UG9ydChNb2NrU3lzdGVtSG9zdCgpKQpJ
bmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luLnB5CShyZXZpc2lvbiAyMDk4ODYp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0yMSw3ICsyMSwxMCBAQAogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiBpbXBvcnQgbG9nZ2luZworaW1w
b3J0IG11bHRpcHJvY2Vzc2luZwogaW1wb3J0IG9zCitpbXBvcnQgcGxpc3RsaWIKK2ltcG9ydCBz
aHV0aWwKIGltcG9ydCB0aW1lCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5jcmFzaGxv
Z3MgaW1wb3J0IENyYXNoTG9ncwpAQCAtMTc0LDMgKzE3NywyNCBAQCBjbGFzcyBEYXJ3aW5Qb3J0
KEFwcGxlUG9ydCk6CiAgICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvcjoKICAgICAgICAgICAgIF9s
b2cud2FybigieGNydW4gZmFpbGVkOyBmYWxsaW5nIGJhY2sgdG8gJyVzJy4iICUgZmFsbGJhY2sp
CiAgICAgICAgICAgICByZXR1cm4gZmFsbGJhY2sKKworICAgIGRlZiBleHRyYWN0QnVuZGxlSUQo
c2VsZiwgYXBwKToKKyAgICAgICAgcGlkID0gc3RyKG11bHRpcHJvY2Vzc2luZy5jdXJyZW50X3By
b2Nlc3MoKS5uYW1lKS5yZXBsYWNlKCcvJywgJy0nKQorCisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIHNodXRpbC5jb3B5ZmlsZShhcHAgKyAiL0luZm8ucGxpc3QiLCAiL3RtcC8iICsgcGlkICsg
IkluZm8ucGxpc3QiKQorICAgICAgICAgICAgaWYgc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5k
KFsnY3AnLCBhcHAgKyAnL0luZm8ucGxpc3QnLCAnL3RtcC8nICsgcGlkICsgJ0luZm8ucGxpc3Qn
XSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQor
ICAgICAgICAgICAgaWYgc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsncGx1dGlsJywgJy1j
b252ZXJ0JywgJ3htbDEnLCAnL3RtcC8nICsgcGlkICsgJ0luZm8ucGxpc3QnXSwgcmV0dXJuX2V4
aXRfY29kZT1UcnVlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAg
cGwgPSBwbGlzdGxpYi5yZWFkUGxpc3QoIi90bXAvIiArIHBpZCArICJJbmZvLnBsaXN0IikKKyAg
ICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJyOgorICAgICAgICAgICAgcGwgPSBOb25lCisKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgb3MucmVtb3ZlKCIvdG1wLyIgKyBwaWQgKyAiSW5mby5w
bGlzdCIpCisgICAgICAgICAgICBpZiBwbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gcGxbIkNG
QnVuZGxlSWRlbnRpZmllciJdCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAg
ICAgICAgcmV0dXJuIE5vbmUKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3
aW5fdGVzdGNhc2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2Rhcndpbl90ZXN0Y2FzZS5weQkocmV2aXNpb24gMjA5ODg2KQorKysgVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2Rhcndpbl90ZXN0Y2FzZS5weQkod29ya2luZyBjb3B5KQpAQCAtMjAsNiAr
MjAsOSBAQAogIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCitpbXBvcnQg
b3MKK2ltcG9ydCBwbGlzdGxpYgorCiBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IHBvcnRfdGVz
dGNhc2UKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5maWxlc3lzdGVtX21vY2sgaW1wb3J0
IE1vY2tGaWxlU3lzdGVtCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3V0cHV0Y2FwdHVy
ZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQpAQCAtMTE5LDMgKzEyMiwxMCBAQCBjbGFzcyBEYXJ3aW5U
ZXN0KHBvcnRfdGVzdGNhc2UuUG9ydFRlc3RDCiAgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9y
dCgpCiAgICAgICAgIHBvcnQuX2V4ZWN1dGl2ZSA9IE1vY2tFeGVjdXRpdmUyKHJ1bl9jb21tYW5k
X2ZuPXRocm93aW5nX3J1bl9jb21tYW5kKQogICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0
X291dHB1dHMoc2VsZiwgcG9ydC5zYW1wbGVfcHJvY2VzcywgYXJncz1bJ3Rlc3QnLCA0Ml0pCisK
KyAgICBkZWYgdGVzdF9wbGlzdChzZWxmKToKKyAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0
KCkKKyAgICAgICAgcGwgPSBkaWN0KENGQnVuZGxlSWRlbnRpZmllcj0ib3JnLndlYmtpdC5kZW1v
IikKKyAgICAgICAgcGxpc3RsaWIud3JpdGVQbGlzdChwbCwgIi90bXAvSW5mby5wbGlzdCIpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5leHRyYWN0QnVuZGxlSUQoIi90bXAiKSwgTm9u
ZSkKKyAgICAgICAgb3MucmVtb3ZlKCIvdG1wL0luZm8ucGxpc3QiKQpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5CShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNyArMTM4
LDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2RyaXZlcl91c2VyX2Rp
cmVjdG9yeV9zdWZmaXggPSBOb25lCiAgICAgICAgIHNlbGYuX2RyaXZlcl91c2VyX2NhY2hlX2Rp
cmVjdG9yeSA9IE5vbmUKIAotICAgICAgICAjIFdlYktpdFRlc3RSdW5uZXIvTGF5b3V0VGVzdFJl
bGF5IGNhbiByZXBvcnQgYmFjayBzdWJwcm9jZXNzIGNyYXNoZXMgYnkgcHJpbnRpbmcKKyAgICAg
ICAgIyBXZWJLaXRUZXN0UnVubmVyIGNhbiByZXBvcnQgYmFjayBzdWJwcm9jZXNzIGNyYXNoZXMg
YnkgcHJpbnRpbmcKICAgICAgICAgIyAiI0NSQVNIRUQgLSBQUk9DRVNTTkFNRSIuICBTaW5jZSB0
aG9zZSBjYW4gaGFwcGVuIGF0IGFueSB0aW1lIGFuZCBTZXJ2ZXJQcm9jZXNzCiAgICAgICAgICMg
d29uJ3QgYmUgYXdhcmUgb2YgdGhlbSAoc2luY2UgdGhlIGFjdHVhbCB0b29sIGRpZG4ndCBjcmFz
aCwganVzdCBhIHN1YnByb2Nlc3MpCiAgICAgICAgICMgd2UgcmVjb3JkIHRoZSBjcmFzaGVkIHN1
YnByb2Nlc3MgbmFtZSBoZXJlLgpAQCAtMTgyLDYgKzE4Miw3IEBAIGNsYXNzIERyaXZlcihvYmpl
Y3QpOgogICAgICAgICAiIiIKICAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCiAgICAg
ICAgIHNlbGYuc3RhcnQoZHJpdmVyX2lucHV0LnNob3VsZF9ydW5fcGl4ZWxfdGVzdCwgZHJpdmVy
X2lucHV0LmFyZ3MpCisgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzLmNsZWFuKCkKICAgICAg
ICAgdGVzdF9iZWdpbl90aW1lID0gdGltZS50aW1lKCkKICAgICAgICAgc2VsZi5fZHJpdmVyX3Rp
bWVkX291dCA9IEZhbHNlCiAgICAgICAgIHNlbGYuX2NyYXNoX3JlcG9ydF9mcm9tX2RyaXZlciA9
IE5vbmUKQEAgLTMyNyw3ICszMjgsNyBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKIAogICAgIGRl
ZiBfc2V0dXBfZW52aXJvbl9mb3JfZHJpdmVyKHNlbGYsIGVudmlyb25tZW50KToKICAgICAgICAg
YnVpbGRfcm9vdF9wYXRoID0gc3RyKHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoKSkKLSAgICAgICAg
IyBGSVhNRTogRFlMRF8qIHZhcmlhYmxlcyBzaG91bGQgYmUgTWFjLW9ubHkuIEV2ZW4gaU9TIFNp
bXVsYXRvciBkb2Vzbid0IG5lZWQgdGhlbSwgYXMgTGF5b3V0VGVzdFJlbGF5IGlzIGEgaG9zdCBi
aW5hcnkuCisgICAgICAgICMgRklYTUU6IERZTERfKiB2YXJpYWJsZXMgc2hvdWxkIGJlIE1hYy1v
bmx5LiBpT1Mgc2ltdWxhdG9ycyBzaG91bGQgaW5jbHVkZSB0aGVtIGluIGl0J3MgYXBwIGJ1bmRs
ZS4KICAgICAgICAgc2VsZi5fYXBwZW5kX2Vudmlyb25tZW50X3ZhcmlhYmxlX3BhdGgoZW52aXJv
bm1lbnQsICdEWUxEX0xJQlJBUllfUEFUSCcsIGJ1aWxkX3Jvb3RfcGF0aCkKICAgICAgICAgc2Vs
Zi5fYXBwZW5kX2Vudmlyb25tZW50X3ZhcmlhYmxlX3BhdGgoZW52aXJvbm1lbnQsICdfX1hQQ19E
WUxEX0xJQlJBUllfUEFUSCcsIGJ1aWxkX3Jvb3RfcGF0aCkKICAgICAgICAgc2VsZi5fYXBwZW5k
X2Vudmlyb25tZW50X3ZhcmlhYmxlX3BhdGgoZW52aXJvbm1lbnQsICdEWUxEX0ZSQU1FV09SS19Q
QVRIJywgYnVpbGRfcm9vdF9wYXRoKQpAQCAtNjEwLDI0ICs2MTEsMjAgQEAgY2xhc3MgRHJpdmVy
KG9iamVjdCk6CiAKIAogIyBGSVhNRTogdGhpcyBzaG91bGQgYmUgYWJzdHJhY3RlZCBvdXQgdmlh
IHRoZSBQb3J0IHN1YmNsYXNzIHNvbWVob3cuCi1jbGFzcyBJT1NTaW11bGF0b3JEcml2ZXIoRHJp
dmVyKToKK2NsYXNzIERldmljZURyaXZlcihEcml2ZXIpOgogICAgIGRlZiBjbWRfbGluZShzZWxm
LCBwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyk6Ci0gICAgICAgIGNtZCA9IHN1cGVyKElPU1Np
bXVsYXRvckRyaXZlciwgc2VsZikuY21kX2xpbmUocGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3Mp
Ci0gICAgICAgIHJlbGF5X3Rvb2wgPSBzZWxmLl9wb3J0LnJlbGF5X3BhdGgKKyAgICAgICAgY21k
ID0gc3VwZXIoRGV2aWNlRHJpdmVyLCBzZWxmKS5jbWRfbGluZShwaXhlbF90ZXN0cywgcGVyX3Rl
c3RfYXJncykKKyAgICAgICAgcmVsYXlfdG9vbCA9ICdydW4tb24tZGV2aWNlJwogICAgICAgICBk
dW1wX3Rvb2wgPSBjbWRbMF0KICAgICAgICAgZHVtcF90b29sX2FyZ3MgPSBjbWRbMTpdCiAgICAg
ICAgIHByb2R1Y3RfZGlyID0gc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgpCi0gICAgICAgIHJlbGF5
X2FyZ3MgPSBbCi0gICAgICAgICAgICAnLWRldmVsb3BlckRpcicsIHNlbGYuX3BvcnQuZGV2ZWxv
cGVyX2RpciwKLSAgICAgICAgICAgICctdWRpZCcsIHNlbGYuX3BvcnQuZGV2aWNlX2lkX2Zvcl93
b3JrZXJfbnVtYmVyKHNlbGYuX3dvcmtlcl9udW1iZXIpLAotICAgICAgICAgICAgJy1wcm9kdWN0
RGlyJywgcHJvZHVjdF9kaXIsCi0gICAgICAgICAgICAnLWFwcCcsIGR1bXBfdG9vbCwKLSAgICAg
ICAgXQotICAgICAgICByZXR1cm4gW3JlbGF5X3Rvb2xdICsgcmVsYXlfYXJncyArIFsnLS0nXSAr
IGR1bXBfdG9vbF9hcmdzCisKKyAgICAgICAgcmVsYXlfYXJncyA9IFtzZWxmLl9wb3J0LmRldmlj
ZV9pZF9mb3Jfd29ya2VyX251bWJlcihzZWxmLl93b3JrZXJfbnVtYmVyKSwgZHVtcF90b29sXQor
ICAgICAgICByZXR1cm4gW3JlbGF5X3Rvb2xdICsgcmVsYXlfYXJncyArIGR1bXBfdG9vbF9hcmdz
CiAKICAgICBkZWYgX3NldHVwX2Vudmlyb25fZm9yX2RyaXZlcihzZWxmLCBlbnZpcm9ubWVudCk6
CiAgICAgICAgIGVudmlyb25tZW50WydERVZFTE9QRVJfRElSJ10gPSBzZWxmLl9wb3J0LmRldmVs
b3Blcl9kaXIKLSAgICAgICAgcmV0dXJuIHN1cGVyKElPU1NpbXVsYXRvckRyaXZlciwgc2VsZiku
X3NldHVwX2Vudmlyb25fZm9yX2RyaXZlcihlbnZpcm9ubWVudCkKKyAgICAgICAgcmV0dXJuIHN1
cGVyKERldmljZURyaXZlciwgc2VsZikuX3NldHVwX2Vudmlyb25fZm9yX2RyaXZlcihlbnZpcm9u
bWVudCkKIAogCiBjbGFzcyBDb250ZW50QmxvY2sob2JqZWN0KToKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9pb3MucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2lvcy5weQkocmV2aXNpb24gMjA5ODg2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2lvcy5weQkod29ya2luZyBjb3B5KQpAQCAtMzQsMTQgKzM0LDEwOCBAQCBmcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMudGVzdF9jCiBmcm9tIHdlYmtpdHB5LnBvcnQg
aW1wb3J0IGNvbmZpZyBhcyBwb3J0X2NvbmZpZwogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBk
cml2ZXIsIGltYWdlX2RpZmYKIGZyb20gd2Via2l0cHkucG9ydC5kYXJ3aW4gaW1wb3J0IERhcndp
blBvcnQKLWZyb20gd2Via2l0cHkueGNvZGUuc2ltdWxhdG9yIGltcG9ydCBTaW11bGF0b3IsIFJ1
bnRpbWUsIERldmljZVR5cGUKK2Zyb20gd2Via2l0cHkueGNvZGUuc2ltdWxhdG9yIGltcG9ydCBT
aW11bGF0b3IsIFJ1bnRpbWUsIERldmljZVR5cGUsIERldmljZQogZnJvbSB3ZWJraXRweS5jb21t
b24uc3lzdGVtLmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCiAKLQogX2xvZyA9IGxvZ2dpbmcu
Z2V0TG9nZ2VyKF9fbmFtZV9fKQogCiAKLWNsYXNzIElPU1BvcnQoRGFyd2luUG9ydCk6CitjbGFz
cyBJT1NCYXNlKERhcndpblBvcnQpOgorCisgICAgU1VCUFJPQ0VTU19DUkFTSF9SRUdFWCA9IHJl
LmNvbXBpbGUoJyNDUkFTSEVEIC0gKD9QPHN1YnByb2Nlc3NfbmFtZT5cUyspIFwocGlkICg/UDxz
dWJwcm9jZXNzX3BpZD5cZCspXCknKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBv
cnRfbmFtZSwgKiprd2FyZ3MpOgorICAgICAgICBEYXJ3aW5Qb3J0Ll9faW5pdF9fKHNlbGYsIGhv
c3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuX3ByaW50aW5nX2NtZF9saW5l
ID0gRmFsc2UKKworICAgIGRlZiBkcml2ZXJfbmFtZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5n
ZXRfb3B0aW9uKCdkcml2ZXJfbmFtZScpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X29w
dGlvbignZHJpdmVyX25hbWUnKQorICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ3dlYmtpdF90
ZXN0X3J1bm5lcicpOgorICAgICAgICAgICAgcmV0dXJuICdXZWJLaXRUZXN0UnVubmVyQXBwLmFw
cCcKKyAgICAgICAgcmV0dXJuICdEdW1wUmVuZGVyVHJlZS5hcHAnCisKKyAgICBkZWYgX2dldF9j
cmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGlt
ZV9mbj10aW1lLnRpbWUsIHNsZWVwX2ZuPXRpbWUuc2xlZXAsIHdhaXRfZm9yX2xvZz1UcnVlKToK
KyAgICAgICAgdGltZV9mbiA9IHRpbWVfZm4gb3IgdGltZS50aW1lCisgICAgICAgIHNsZWVwX2Zu
ID0gc2xlZXBfZm4gb3IgdGltZS5zbGVlcAorCisgICAgICAgICMgRklYTUU6IFdlIHNob3VsZCBj
b2xsZWN0IHRoZSBhY3R1YWwgY3Jhc2ggbG9nIGZvciBEdW1wUmVuZGVyVHJlZS5hcHAgYmVjYXVz
ZSBpdCBpbmNsdWRlcyBtb3JlCisgICAgICAgICMgaW5mb3JtYXRpb24gKGUuZy4gZXhjZXB0aW9u
IGNvZGVzKSB0aGFuIGlzIGF2YWlsYWJsZSBpbiB0aGUgc3RhY2sgdHJhY2Ugd3JpdHRlbiB0byBz
dGFuZGFyZCBlcnJvci4KKyAgICAgICAgc3RkZXJyX2xpbmVzID0gW10KKyAgICAgICAgY3Jhc2hl
ZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZCA9IE5vbmUgICMgZS5nLiAoJ0R1bXBSZW5kZXJUcmVl
LmFwcCcsIDEyMzQpCisgICAgICAgIGZvciBsaW5lIGluIChzdGRlcnIgb3IgJycpLnNwbGl0bGlu
ZXMoKToKKyAgICAgICAgICAgIGlmIG5vdCBjcmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlk
OgorICAgICAgICAgICAgICAgIG1hdGNoID0gc2VsZi5TVUJQUk9DRVNTX0NSQVNIX1JFR0VYLm1h
dGNoKGxpbmUpCisgICAgICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgICAg
IGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9waWQgPSAobWF0Y2guZ3JvdXAoJ3N1YnByb2Nl
c3NfbmFtZScpLCBpbnQobWF0Y2guZ3JvdXAoJ3N1YnByb2Nlc3NfcGlkJykpKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc3RkZXJyX2xpbmVzLmFwcGVuZChsaW5l
KQorCisgICAgICAgIGlmIGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9waWQ6CisgICAgICAg
ICAgICByZXR1cm4gc2VsZi5fZ2V0X2NyYXNoX2xvZyhjcmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9h
bmRfcGlkWzBdLCBjcmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlkWzFdLCBzdGRvdXQsCisg
ICAgICAgICAgICAgICAgJ1xuJy5qb2luKHN0ZGVycl9saW5lcyksIG5ld2VyX3RoYW4sIHRpbWVf
Zm4sIHNsZWVwX2ZuLCB3YWl0X2Zvcl9sb2cpCisKKyAgICAgICAgX2xvZy5kZWJ1ZygnbG9va2lu
ZyBmb3IgY3Jhc2ggbG9nIGZvciAlczolcycgJSAobmFtZSwgc3RyKHBpZCkpKQorICAgICAgICBj
cmFzaF9sb2cgPSAnJworICAgICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hMb2dzKHNlbGYuaG9zdCkK
KyAgICAgICAgbm93ID0gdGltZV9mbigpCisgICAgICAgIGRlYWRsaW5lID0gbm93ICsgNSAqIGlu
dChzZWxmLmdldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpKQorICAgICAgICB3aGlsZSBu
b3QgY3Jhc2hfbG9nIGFuZCBub3cgPD0gZGVhZGxpbmU6CisgICAgICAgICAgICBjcmFzaF9sb2cg
PSBjcmFzaF9sb2dzLmZpbmRfbmV3ZXN0X2xvZyhuYW1lLCBwaWQsIGluY2x1ZGVfZXJyb3JzPVRy
dWUsIG5ld2VyX3RoYW49bmV3ZXJfdGhhbikKKyAgICAgICAgICAgIGlmIG5vdCB3YWl0X2Zvcl9s
b2c6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIG5vdCBjcmFzaF9sb2cg
b3Igbm90IFtsaW5lIGZvciBsaW5lIGluIGNyYXNoX2xvZy5zcGxpdGxpbmVzKCkgaWYgbm90IGxp
bmUuc3RhcnRzd2l0aCgnRVJST1InKV06CisgICAgICAgICAgICAgICAgc2xlZXBfZm4oMC4xKQor
ICAgICAgICAgICAgICAgIG5vdyA9IHRpbWVfZm4oKQorCisgICAgICAgIGlmIG5vdCBjcmFzaF9s
b2c6CisgICAgICAgICAgICByZXR1cm4gc3RkZXJyLCBOb25lCisgICAgICAgIHJldHVybiBzdGRl
cnIsIGNyYXNoX2xvZworCisgICAgZGVmIF90ZXN0aW5nX2RldmljZShzZWxmLCBudW1iZXIpOgor
ICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGRldmljZV9pZF9mb3Jfd29ya2VyX251bWJl
cihzZWxmLCBudW1iZXIpOgorICAgICAgICBpZiBzZWxmLl9wcmludGluZ19jbWRfbGluZSBvciBu
b3Qgc2VsZi5fdGVzdGluZ19kZXZpY2UobnVtYmVyKToKKyAgICAgICAgICAgIHJldHVybiAnPGR1
bW15IGlkPicKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3RpbmdfZGV2aWNlKG51bWJlcikudWRp
ZAorCisgICAgZGVmIF9kcml2ZXJfY2xhc3Moc2VsZik6CisgICAgICAgIHJldHVybiBkcml2ZXIu
RGV2aWNlRHJpdmVyCisKKyAgICBkZWYgZGV2aWNlRGVmaW5lZChzZWxmKToKKyAgICAgICAgcmV0
dXJuIFRydWUKKworICAgIGRlZiBfZGV2aWNlUGluZyhzZWxmLCBkZXZpY2UpOgorICAgICAgICBy
ZXR1cm4gRmFsc2UKKworICAgIGRlZiBfZGV2aWNlSW5zdGFsbChzZWxmLCBkZXZpY2UsIGFwcCk6
CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9kZXZpY2VSdW4oc2VsZiwgY21kLCBl
bnZpPU5vbmUpOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9kZXZpY2VLaWxsKHNl
bGYsIGRldmljZSwgYXBwKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgcnVuT25E
ZXZpY2Uoc2VsZiwgY21kLCBlbnZpPU5vbmUpOgorICAgICAgICBpZiBub3QgY21kOgorICAgICAg
ICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgaWYgY21kWzBdID09ICdwaW5nJzoKKyAgICAgICAg
ICAgIGlmIGxlbihjbWQpID49IDI6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2Rldmlj
ZVBpbmcoY21kWzFdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4g
c2VsZi5fZGV2aWNlUGluZyhOb25lKQorICAgICAgICBlbGlmIGNtZFswXSA9PSAncnVuJzoKKyAg
ICAgICAgICAgIHJldHVybiBzZWxmLl9kZXZpY2VSdW4oY21kWzE6XSwgZW52aSkKKyAgICAgICAg
ZWxpZiBjbWRbMF0gPT0gJ2luc3RhbGwnOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2Rldmlj
ZUluc3RhbGwoY21kWzFdLCBjbWRbMl0pCisgICAgICAgIGVsaWYgY21kWzBdID09ICdraWxsJzoK
KyAgICAgICAgICAgIHJldHVybiBzZWxmLl9kZXZpY2VLaWxsKGNtZFsxXSwgY21kWzJdKQorICAg
ICAgICByZXR1cm4gTm9uZQorCisKK2NsYXNzIElPU1BvcnQoSU9TQmFzZSk6CiAgICAgcG9ydF9u
YW1lID0gImlvcyIKIAogICAgIEFSQ0hJVEVDVFVSRVMgPSBbJ2FybXY3JywgJ2FybXY3cycsICdh
cm02NCddCkBAIC02Niw3ICsxNjAsNyBAQCBjbGFzcyBJT1NQb3J0KERhcndpblBvcnQpOgogICAg
ICAgICByZXR1cm4gJ2lvcycKIAogCi1jbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQp
OgorY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChJT1NCYXNlKToKICAgICBwb3J0X25hbWUgPSAiaW9z
LXNpbXVsYXRvciIKIAogICAgIEZVVFVSRV9WRVJTSU9OID0gJ2Z1dHVyZScKQEAgLTc4LDcgKzE3
Miw2IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAgICAgU0RLID0gJ2lw
aG9uZXNpbXVsYXRvcicKIAogICAgIFNJTVVMQVRPUl9CVU5ETEVfSUQgPSAnY29tLmFwcGxlLmlw
aG9uZXNpbXVsYXRvcicKLSAgICByZWxheV9uYW1lID0gJ0xheW91dFRlc3RSZWxheScKICAgICBT
SU1VTEFUT1JfRElSRUNUT1JZID0gIi90bXAvV2ViS2l0VGVzdGluZ1NpbXVsYXRvcnMvIgogICAg
IExTUkVHSVNURVJfUEFUSCA9ICIvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlU2Vydmlj
ZXMuZnJhbWV3b3JrL0ZyYW1ld29ya3MvTGF1bmNoU2VydmljZXMuZnJhbWV3b3JrL1ZlcnNpb25z
L0N1cnJlbnQvU3VwcG9ydC9sc3JlZ2lzdGVyIgogICAgIFBST0NFU1NfQ09VTlRfRVNUSU1BVEVf
UEVSX1NJTVVMQVRPUl9JTlNUQU5DRSA9IDEwMApAQCAtOTYsMTAgKzE4OSw5IEBAIGNsYXNzIElP
U1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAgICAgfQogCiAgICAgZGVmIF9faW5pdF9fKHNl
bGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpOgotICAgICAgICBEYXJ3aW5Qb3J0Ll9faW5p
dF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpCisgICAgICAgIElPU0Jhc2UuX19p
bml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncykKIAogICAgICAgICBvcHRpb25h
bF9kZXZpY2VfY2xhc3MgPSBzZWxmLmdldF9vcHRpb24oJ2RldmljZV9jbGFzcycpCi0gICAgICAg
IHNlbGYuX3ByaW50aW5nX2NtZF9saW5lID0gRmFsc2UKICAgICAgICAgc2VsZi5fZGV2aWNlX2Ns
YXNzID0gb3B0aW9uYWxfZGV2aWNlX2NsYXNzIGlmIG9wdGlvbmFsX2RldmljZV9jbGFzcyBlbHNl
IHNlbGYuREVGQVVMVF9ERVZJQ0VfQ0xBU1MKICAgICAgICAgX2xvZy5kZWJ1ZygnSU9TU2ltdWxh
dG9yUG9ydCBfZGV2aWNlX2NsYXNzIGlzICVzJywgc2VsZi5fZGV2aWNlX2NsYXNzKQogCkBAIC0x
NDgsMTYgKzI0MCw2IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAgICAg
ICAgICAgICBkZXZpY2VfdHlwZSA9IERldmljZVR5cGUuZnJvbV9uYW1lKGRldmljZV9uYW1lKQog
ICAgICAgICByZXR1cm4gZGV2aWNlX3R5cGUKIAotICAgIEBwcm9wZXJ0eQotICAgIEBtZW1vaXpl
ZAotICAgIGRlZiByZWxheV9wYXRoKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9yb290X3dhc19z
ZXQ6Ci0gICAgICAgICAgICBwYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5hYnNwYXRoKHNlbGYuZ2V0
X29wdGlvbigncm9vdCcpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbWFjX2NvbmZpZyA9
IHBvcnRfY29uZmlnLkNvbmZpZyhzZWxmLl9leGVjdXRpdmUsIHNlbGYuX2ZpbGVzeXN0ZW0sICdt
YWMnKQotICAgICAgICAgICAgcGF0aCA9IG1hY19jb25maWcuYnVpbGRfZGlyZWN0b3J5KHNlbGYu
Z2V0X29wdGlvbignY29uZmlndXJhdGlvbicpKQotICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5
c3RlbS5qb2luKHBhdGgsIHNlbGYucmVsYXlfbmFtZSkKLQogICAgIEBtZW1vaXplZAogICAgIGRl
ZiBjaGlsZF9wcm9jZXNzZXMoc2VsZik6CiAgICAgICAgIHJldHVybiBpbnQoc2VsZi5nZXRfb3B0
aW9uKCdjaGlsZF9wcm9jZXNzZXMnKSkKQEAgLTE4Miw3NSArMjY0LDEyIEBAIGNsYXNzIElPU1Np
bXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAKICAgICAgICAgcmV0dXJuIG1pbihtYXhpbXVtX3Np
bXVsYXRvcl9jb3VudF9vbl90aGlzX3N5c3RlbSwgYmVzdF9jaGlsZF9wcm9jZXNzX2NvdW50X2Zv
cl9jcHUpCiAKLSAgICBkZWYgX2NoZWNrX3JlbGF5KHNlbGYpOgotICAgICAgICBpZiBub3Qgc2Vs
Zi5fZmlsZXN5c3RlbS5leGlzdHMoc2VsZi5yZWxheV9wYXRoKToKLSAgICAgICAgICAgIF9sb2cu
ZXJyb3IoIiVzIHdhcyBub3QgZm91bmQgYXQgJXMiICUgKHNlbGYucmVsYXlfbmFtZSwgc2VsZi5y
ZWxheV9wYXRoKSkKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1
ZQotCiAgICAgZGVmIF9jaGVja19wb3J0X2J1aWxkKHNlbGYpOgotICAgICAgICBpZiBub3Qgc2Vs
Zi5fcm9vdF93YXNfc2V0IGFuZCBzZWxmLmdldF9vcHRpb24oJ2J1aWxkJykgYW5kIG5vdCBzZWxm
Ll9idWlsZF9yZWxheSgpOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIGlmIG5v
dCBzZWxmLl9jaGVja19yZWxheSgpOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAg
IHJldHVybiBUcnVlCi0KLSAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBz
dGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbj10aW1lLnRpbWUsIHNsZWVwX2ZuPXRp
bWUuc2xlZXAsIHdhaXRfZm9yX2xvZz1UcnVlKToKLSAgICAgICAgdGltZV9mbiA9IHRpbWVfZm4g
b3IgdGltZS50aW1lCi0gICAgICAgIHNsZWVwX2ZuID0gc2xlZXBfZm4gb3IgdGltZS5zbGVlcAot
Ci0gICAgICAgICMgRklYTUU6IFdlIHNob3VsZCBjb2xsZWN0IHRoZSBhY3R1YWwgY3Jhc2ggbG9n
IGZvciBEdW1wUmVuZGVyVHJlZS5hcHAgYmVjYXVzZSBpdCBpbmNsdWRlcyBtb3JlCi0gICAgICAg
ICMgaW5mb3JtYXRpb24gKGUuZy4gZXhjZXB0aW9uIGNvZGVzKSB0aGFuIGlzIGF2YWlsYWJsZSBp
biB0aGUgc3RhY2sgdHJhY2Ugd3JpdHRlbiB0byBzdGFuZGFyZCBlcnJvci4KLSAgICAgICAgc3Rk
ZXJyX2xpbmVzID0gW10KLSAgICAgICAgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZCA9
IE5vbmUgICMgZS5nLiAoJ0R1bXBSZW5kZXJUcmVlLmFwcCcsIDEyMzQpCi0gICAgICAgIGZvciBs
aW5lIGluIChzdGRlcnIgb3IgJycpLnNwbGl0bGluZXMoKToKLSAgICAgICAgICAgIGlmIG5vdCBj
cmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlkOgotICAgICAgICAgICAgICAgIG1hdGNoID0g
c2VsZi5TVUJQUk9DRVNTX0NSQVNIX1JFR0VYLm1hdGNoKGxpbmUpCi0gICAgICAgICAgICAgICAg
aWYgbWF0Y2g6Ci0gICAgICAgICAgICAgICAgICAgIGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2Fu
ZF9waWQgPSAobWF0Y2guZ3JvdXAoJ3N1YnByb2Nlc3NfbmFtZScpLCBpbnQobWF0Y2guZ3JvdXAo
J3N1YnByb2Nlc3NfcGlkJykpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAg
ICAgICAgc3RkZXJyX2xpbmVzLmFwcGVuZChsaW5lKQotCi0gICAgICAgIGlmIGNyYXNoZWRfc3Vi
cHJvY2Vzc19uYW1lX2FuZF9waWQ6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X2NyYXNo
X2xvZyhjcmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlkWzBdLCBjcmFzaGVkX3N1YnByb2Nl
c3NfbmFtZV9hbmRfcGlkWzFdLCBzdGRvdXQsCi0gICAgICAgICAgICAgICAgJ1xuJy5qb2luKHN0
ZGVycl9saW5lcyksIG5ld2VyX3RoYW4sIHRpbWVfZm4sIHNsZWVwX2ZuLCB3YWl0X2Zvcl9sb2cp
Ci0KLSAgICAgICAgIyBMYXlvdXRUZXN0UmVsYXkgY3Jhc2hlZAotICAgICAgICBfbG9nLmRlYnVn
KCdsb29raW5nIGZvciBjcmFzaCBsb2cgZm9yICVzOiVzJyAlIChuYW1lLCBzdHIocGlkKSkpCi0g
ICAgICAgIGNyYXNoX2xvZyA9ICcnCi0gICAgICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3Moc2Vs
Zi5ob3N0KQotICAgICAgICBub3cgPSB0aW1lX2ZuKCkKLSAgICAgICAgZGVhZGxpbmUgPSBub3cg
KyA1ICogaW50KHNlbGYuZ2V0X29wdGlvbignY2hpbGRfcHJvY2Vzc2VzJywgMSkpCi0gICAgICAg
IHdoaWxlIG5vdCBjcmFzaF9sb2cgYW5kIG5vdyA8PSBkZWFkbGluZToKLSAgICAgICAgICAgIGNy
YXNoX2xvZyA9IGNyYXNoX2xvZ3MuZmluZF9uZXdlc3RfbG9nKG5hbWUsIHBpZCwgaW5jbHVkZV9l
cnJvcnM9VHJ1ZSwgbmV3ZXJfdGhhbj1uZXdlcl90aGFuKQotICAgICAgICAgICAgaWYgbm90IHdh
aXRfZm9yX2xvZzoKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgaWYgbm90IGNy
YXNoX2xvZyBvciBub3QgW2xpbmUgZm9yIGxpbmUgaW4gY3Jhc2hfbG9nLnNwbGl0bGluZXMoKSBp
ZiBub3QgbGluZS5zdGFydHN3aXRoKCdFUlJPUicpXToKLSAgICAgICAgICAgICAgICBzbGVlcF9m
bigwLjEpCi0gICAgICAgICAgICAgICAgbm93ID0gdGltZV9mbigpCi0KLSAgICAgICAgaWYgbm90
IGNyYXNoX2xvZzoKLSAgICAgICAgICAgIHJldHVybiBzdGRlcnIsIE5vbmUKLSAgICAgICAgcmV0
dXJuIHN0ZGVyciwgY3Jhc2hfbG9nCi0KLSAgICBkZWYgX2J1aWxkX3JlbGF5KHNlbGYpOgotICAg
ICAgICBlbnZpcm9ubWVudCA9IHNlbGYuaG9zdC5jb3B5X2N1cnJlbnRfZW52aXJvbm1lbnQoKQot
ICAgICAgICBlbnZpcm9ubWVudC5kaXNhYmxlX2djY19zbWFydHF1b3RlcygpCi0gICAgICAgIGVu
diA9IGVudmlyb25tZW50LnRvX2RpY3Rpb25hcnkoKQotCi0gICAgICAgIHRyeToKLSAgICAgICAg
ICAgICMgRklYTUU6IFdlIHNob3VsZCBiZSBwYXNzaW5nIF9hcmd1bWVudHNfZm9yX2NvbmZpZ3Vy
YXRpb24oKSwgd2hpY2ggcmVzcGVjdHMgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgcG9ydCwKLSAg
ICAgICAgICAgICMgaW5zdGVhZCBvZiBoYXJkY29kaW5nIC0taW9zLXNpbXVsYXRvci4KLSAgICAg
ICAgICAgIHNlbGYuX3J1bl9zY3JpcHQoImJ1aWxkLWxheW91dHRlc3RyZWxheSIsIGFyZ3M9WyIt
LWlvcy1zaW11bGF0b3IiXSwgZW52PWVudikKLSAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yLCBl
OgotICAgICAgICAgICAgX2xvZy5lcnJvcihlLm1lc3NhZ2Vfd2l0aF9vdXRwdXQob3V0cHV0X2xp
bWl0PU5vbmUpKQotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIHJldHVybiBUcnVl
CiAKICAgICBkZWYgX2J1aWxkX2RyaXZlcihzZWxmKToKICAgICAgICAgYnVpbHRfdG9vbCA9IHN1
cGVyKElPU1NpbXVsYXRvclBvcnQsIHNlbGYpLl9idWlsZF9kcml2ZXIoKQotICAgICAgICBidWls
dF9yZWxheSA9IHNlbGYuX2J1aWxkX3JlbGF5KCkKLSAgICAgICAgcmV0dXJuIGJ1aWx0X3Rvb2wg
YW5kIGJ1aWx0X3JlbGF5CisgICAgICAgIHJldHVybiBidWlsdF90b29sCiAKICAgICBkZWYgX2J1
aWxkX2RyaXZlcl9mbGFncyhzZWxmKToKICAgICAgICAgYXJjaHMgPSBbJ0FSQ0hTPWkzODYnXSBp
ZiBzZWxmLmFyY2hpdGVjdHVyZSgpID09ICd4ODYnIGVsc2UgW10KQEAgLTI2NCw5ICsyODMsNiBA
QCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgICAgICAgICAgICAgIGNv
bmZpZ3VyYXRpb25zLmFwcGVuZChUZXN0Q29uZmlndXJhdGlvbih2ZXJzaW9uPXNlbGYuX3ZlcnNp
b24sIGFyY2hpdGVjdHVyZT1hcmNoaXRlY3R1cmUsIGJ1aWxkX3R5cGU9YnVpbGRfdHlwZSkpCiAg
ICAgICAgIHJldHVybiBjb25maWd1cmF0aW9ucwogCi0gICAgZGVmIF9kcml2ZXJfY2xhc3Moc2Vs
Zik6Ci0gICAgICAgIHJldHVybiBkcml2ZXIuSU9TU2ltdWxhdG9yRHJpdmVyCi0KICAgICBkZWYg
ZGVmYXVsdF9iYXNlbGluZV9zZWFyY2hfcGF0aChzZWxmKToKICAgICAgICAgaWYgc2VsZi5nZXRf
b3B0aW9uKCd3ZWJraXRfdGVzdF9ydW5uZXInKToKICAgICAgICAgICAgIGZhbGxiYWNrX25hbWVz
ID0gW3NlbGYuX3drMl9wb3J0X25hbWUoKV0gKyBbc2VsZi5wb3J0X25hbWVdICsgWyd3azInXQpA
QCAtMzk5LDggKzQxNSw2IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAg
ICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgcmV0dXJuIHN1cGVyKElPU1NpbXVsYXRv
clBvcnQsIHNlbGYpLmNoZWNrX3N5c19kZXBzKG5lZWRzX2h0dHApCiAKLSAgICBTVUJQUk9DRVNT
X0NSQVNIX1JFR0VYID0gcmUuY29tcGlsZSgnI0NSQVNIRUQgLSAoP1A8c3VicHJvY2Vzc19uYW1l
PlxTKykgXChwaWQgKD9QPHN1YnByb2Nlc3NfcGlkPlxkKylcKScpCi0KICAgICBkZWYgX3VzaW5n
X2RlZGljYXRlZF9zaW11bGF0b3JzKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5nZXRfb3B0
aW9uKCdkZWRpY2F0ZWRfc2ltdWxhdG9ycycpCiAKQEAgLTQ3NSwzICs0ODksNTcgQEAgY2xhc3Mg
SU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19v
dXRwdXQoWyJpbnN0YWxsX25hbWVfdG9vbCIsICItYWRkX3JwYXRoIiwgc2VsZi5kZXZlbG9wZXJf
ZGlyICsgIi8uLi9GcmFtZXdvcmtzLyIsIGRlc3RpbmF0aW9uICsgIi9Db250ZW50cy9NYWNPUy9T
aW11bGF0b3IiXSkKICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJjb2Rlc2lnbiIs
ICItZnMiLCAiLSIsIGRlc3RpbmF0aW9uXSkKICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRw
dXQoW3NlbGYuTFNSRUdJU1RFUl9QQVRILCAiLWYiLCBkZXN0aW5hdGlvbl0pCisKKyAgICBkZWYg
X2RldmljZVBpbmcoc2VsZiwgZGV2aWNlKToKKyAgICAgICAgZGF0YSA9IHNlbGYuX2V4ZWN1dGl2
ZS5ydW5fY29tbWFuZChbJ3hjcnVuJywgJ3NpbWN0bCcsICdsaXN0J10pCisgICAgICAgIGlmIGRl
dmljZSBhbmQgZGV2aWNlICsgJykgKEJvb3RlZCknIGluIGRhdGE6CisgICAgICAgICAgICByZXR1
cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBfZGV2aWNlSW5zdGFsbChz
ZWxmLCBkZXZpY2UsIGFwcCk6CisgICAgICAgIGlmIG5vdCBzZWxmLl9kZXZpY2VQaW5nKGRldmlj
ZSk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9l
eGVjdXRpdmUucnVuX2NvbW1hbmQoWworICAgICAgICAgICAgJ3hjcnVuJywKKyAgICAgICAgICAg
ICdzaW1jdGwnLAorICAgICAgICAgICAgJ2luc3RhbGwnLAorICAgICAgICAgICAgZGV2aWNlLAor
ICAgICAgICAgICAgYXBwLAorICAgICAgICBdLCByZXR1cm5fZXhpdF9jb2RlPVRydWUpCisKKyAg
ICBkZWYgX2RldmljZVJ1bihzZWxmLCBjbWQsIGVudmk9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBz
ZWxmLl9kZXZpY2VQaW5nKGNtZFswXSk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAg
ICAgYXBwaWQgPSBzZWxmLmV4dHJhY3RCdW5kbGVJRChjbWRbMV0pCisgICAgICAgIGlmIG5vdCBh
cHBpZDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBzZWxmLl9kZXZpY2VLaWxs
KGNtZFswXSwgY21kWzFdKQorCisgICAgICAgIHRyYW5zZmVyZWRFbnZpcm9ubWVudCA9IHt9Cisg
ICAgICAgIGZvciB2YWx1ZSBpbiBlbnZpOgorICAgICAgICAgICAgaWYgbm90ICJTSU1DVExfQ0hJ
TERfIiBpbiB2YWx1ZToKKyAgICAgICAgICAgICAgICB0cmFuc2ZlcmVkRW52aXJvbm1lbnRbJ1NJ
TUNUTF9DSElMRF8nICsgdmFsdWVdID0gZW52aVt2YWx1ZV0KKyAgICAgICAgICAgIHRyYW5zZmVy
ZWRFbnZpcm9ubWVudFt2YWx1ZV0gPSBlbnZpW3ZhbHVlXQorCisgICAgICAgIHJldHVybiBub3Qg
c2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsKKyAgICAgICAgICAgICd4Y3J1bicsCisgICAg
ICAgICAgICAnc2ltY3RsJywKKyAgICAgICAgICAgICdsYXVuY2gnLAorICAgICAgICAgICAgY21k
WzBdLAorICAgICAgICAgICAgYXBwaWQsCisgICAgICAgIF0gKyBjbWRbMjpdLAorICAgICAgICBl
bnY9dHJhbnNmZXJlZEVudmlyb25tZW50LAorICAgICAgICByZXR1cm5fZXhpdF9jb2RlPVRydWUp
CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX2RldmljZUtpbGwoc2VsZiwgZGV2aWNl
LCBhcHApOgorICAgICAgICBhZGRpZCA9IHNlbGYuZXh0cmFjdEJ1bmRsZUlEKGFwcCkKKyAgICAg
ICAgaWYgbm90IGFkZGlkOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVy
biBub3Qgc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsKKyAgICAgICAgICAgICd4Y3J1bics
CisgICAgICAgICAgICAnc2ltY3RsJywKKyAgICAgICAgICAgICd0ZXJtaW5hdGUnLAorICAgICAg
ICAgICAgZGV2aWNlLAorICAgICAgICAgICAgYWRkaWQsCisgICAgICAgIF0sIHJldHVybl9leGl0
X2NvZGU9VHJ1ZSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRl
c3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc191bml0
dGVzdC5weQkocmV2aXNpb24gMjA5ODg2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2lvc191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsOSBAQAogCiBpbXBv
cnQgdGltZQogCitmcm9tIHdlYmtpdHB5LnBvcnQuaW9zIGltcG9ydCBJT1NQb3J0CiBmcm9tIHdl
YmtpdHB5LnBvcnQuaW9zIGltcG9ydCBJT1NTaW11bGF0b3JQb3J0Ci1mcm9tIHdlYmtpdHB5LnBv
cnQgaW1wb3J0IGRhcndpbl90ZXN0Y2FzZQorZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBpb3Ni
YXNlX3Rlc3RjYXNlCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZXN5c3RlbV9tb2Nr
IGltcG9ydCBNb2NrRmlsZVN5c3RlbQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLm91dHB1
dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKIGZyb20gd2Via2l0cHkudG9vbC5tb2NrdG9v
bCBpbXBvcnQgTW9ja09wdGlvbnMKQEAgLTMxLDcgKzMyLDIwIEBAIGZyb20gd2Via2l0cHkuY29t
bW9uLnN5c3RlbS5leGVjdXRpdmVfbW8KIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0
ZW1ob3N0X21vY2sgaW1wb3J0IE1vY2tTeXN0ZW1Ib3N0CiAKIAotY2xhc3MgaW9zVGVzdChkYXJ3
aW5fdGVzdGNhc2UuRGFyd2luVGVzdCk6CitjbGFzcyBJT1NUZXN0KGlvc2Jhc2VfdGVzdGNhc2Uu
SU9TQmFzZVRlc3QpOgorICAgIG9zX25hbWUgPSAnaW9zJworICAgIG9zX3ZlcnNpb24gPSAnJwor
ICAgIHBvcnRfbmFtZSA9ICdpb3MnCisgICAgcG9ydF9tYWtlciA9IElPU1BvcnQKKyAgICBpc19z
aW11bGF0b3IgPSBGYWxzZQorCisgICAgZGVmIG1ha2VfcG9ydChzZWxmLCBob3N0PU5vbmUsIHBv
cnRfbmFtZT1Ob25lLCBvcHRpb25zPU5vbmUsIG9zX25hbWU9Tm9uZSwgb3NfdmVyc2lvbj1Ob25l
LCAqKmt3YXJncyk6CisgICAgICAgIHBvcnQgPSBzdXBlcihJT1NUZXN0LCBzZWxmKS5tYWtlX3Bv
cnQoaG9zdD1ob3N0LCBwb3J0X25hbWU9cG9ydF9uYW1lLCBvcHRpb25zPW9wdGlvbnMsIG9zX25h
bWU9b3NfbmFtZSwgc192ZXJzaW9uPW9zX3ZlcnNpb24sIGt3YXJncz1rd2FyZ3MpCisgICAgICAg
IHBvcnQuc2V0X29wdGlvbignY2hpbGRfcHJvY2Vzc2VzJywgMSkKKyAgICAgICAgcmV0dXJuIHBv
cnQKKworCitjbGFzcyBJT1NTaW11bGF0b3JUZXN0KGlvc2Jhc2VfdGVzdGNhc2UuSU9TQmFzZVRl
c3QpOgogICAgIG9zX25hbWUgPSAnaW9zLXNpbXVsYXRvcicKICAgICBvc192ZXJzaW9uID0gJycK
ICAgICBwb3J0X25hbWUgPSAnaW9zLXNpbXVsYXRvcicKQEAgLTM5LDcgKzUzLDcgQEAgY2xhc3Mg
aW9zVGVzdChkYXJ3aW5fdGVzdGNhc2UuRGFyd2luVGVzdAogICAgIGlzX3NpbXVsYXRvciA9IFRy
dWUKIAogICAgIGRlZiBtYWtlX3BvcnQoc2VsZiwgaG9zdD1Ob25lLCBwb3J0X25hbWU9Tm9uZSwg
b3B0aW9ucz1Ob25lLCBvc19uYW1lPU5vbmUsIG9zX3ZlcnNpb249Tm9uZSwgKiprd2FyZ3MpOgot
ICAgICAgICBwb3J0ID0gc3VwZXIoaW9zVGVzdCwgc2VsZikubWFrZV9wb3J0KGhvc3Q9aG9zdCwg
cG9ydF9uYW1lPXBvcnRfbmFtZSwgb3B0aW9ucz1vcHRpb25zLCBvc19uYW1lPW9zX25hbWUsIHNf
dmVyc2lvbj1vc192ZXJzaW9uLCBrd2FyZ3M9a3dhcmdzKQorICAgICAgICBwb3J0ID0gc3VwZXIo
SU9TU2ltdWxhdG9yVGVzdCwgc2VsZikubWFrZV9wb3J0KGhvc3Q9aG9zdCwgcG9ydF9uYW1lPXBv
cnRfbmFtZSwgb3B0aW9ucz1vcHRpb25zLCBvc19uYW1lPW9zX25hbWUsIHNfdmVyc2lvbj1vc192
ZXJzaW9uLCBrd2FyZ3M9a3dhcmdzKQogICAgICAgICBwb3J0LnNldF9vcHRpb24oJ2NoaWxkX3By
b2Nlc3NlcycsIDEpCiAgICAgICAgIHJldHVybiBwb3J0CiAKQEAgLTUzLDE0ICs2Nyw2IEBAIGNs
YXNzIGlvc1Rlc3QoZGFyd2luX3Rlc3RjYXNlLkRhcndpblRlc3QKICAgICBkZWYgdGVzdF9vcGVy
YXRpbmdfc3lzdGVtKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdpb3Mtc2ltdWxh
dG9yJywgc2VsZi5tYWtlX3BvcnQoKS5vcGVyYXRpbmdfc3lzdGVtKCkpCiAKLSAgICBkZWYgdGVz
dF9nZXRfY3Jhc2hfbG9nKHNlbGYpOgotICAgICAgICAjIE1hYyBjcmFzaCBsb2dzIGFyZSB0ZXN0
ZWQgZWxzZXdoZXJlLCBzbyBoZXJlIHdlIGp1c3QgbWFrZSBzdXJlIHdlIGRvbid0IGNyYXNoLgot
ICAgICAgICBkZWYgZmFrZV90aW1lX2NiKCk6Ci0gICAgICAgICAgICB0aW1lcyA9IFswLCAyMCwg
NDBdCi0gICAgICAgICAgICByZXR1cm4gbGFtYmRhOiB0aW1lcy5wb3AoMCkKLSAgICAgICAgcG9y
dCA9IHNlbGYubWFrZV9wb3J0KHBvcnRfbmFtZT0naW9zLXNpbXVsYXRvcicpCi0gICAgICAgIHBv
cnQuX2dldF9jcmFzaF9sb2coJ0R1bXBSZW5kZXJUcmVlJywgMTIzNCwgTm9uZSwgTm9uZSwgdGlt
ZS50aW1lKCksIHdhaXRfZm9yX2xvZz1GYWxzZSkKLQogICAgIGRlZiB0ZXN0XzMyYml0KHNlbGYp
OgogICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQob3B0aW9ucz1Nb2NrT3B0aW9ucyhhcmNo
aXRlY3R1cmU9J3g4NicpKQogCkBAIC03MCw3ICs3Niw3IEBAIGNsYXNzIGlvc1Rlc3QoZGFyd2lu
X3Rlc3RjYXNlLkRhcndpblRlc3QKICAgICAgICAgcG9ydC5fcnVuX3NjcmlwdCA9IHJ1bl9zY3Jp
cHQKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LmFyY2hpdGVjdHVyZSgpLCAneDg2JykK
ICAgICAgICAgcG9ydC5fYnVpbGRfZHJpdmVyKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz
ZWxmLmFyZ3MsIFsnLS1pb3Mtc2ltdWxhdG9yJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
c2VsZi5hcmdzLCBbJ0FSQ0hTPWkzODYnLCAnLS1zZGsnLCAnaXBob25lc2ltdWxhdG9yJ10pCiAK
ICAgICBkZWYgdGVzdF82NGJpdChzZWxmKToKICAgICAgICAgIyBBcHBsZSBNYWMgcG9ydCBpcyA2
NC1iaXQgYnkgZGVmYXVsdApAQCAtODIsNyArODgsNyBAQCBjbGFzcyBpb3NUZXN0KGRhcndpbl90
ZXN0Y2FzZS5EYXJ3aW5UZXN0CiAKICAgICAgICAgcG9ydC5fcnVuX3NjcmlwdCA9IHJ1bl9zY3Jp
cHQKICAgICAgICAgcG9ydC5fYnVpbGRfZHJpdmVyKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChzZWxmLmFyZ3MsIFsnLS1pb3Mtc2ltdWxhdG9yJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoc2VsZi5hcmdzLCBbJy0tc2RrJywgJ2lwaG9uZXNpbXVsYXRvciddKQogCiAgICAgZGVmIHRl
c3Rfc2RrX25hbWUoc2VsZik6CiAgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCkBAIC05
NywzICsxMDMsNyBAQCBjbGFzcyBpb3NUZXN0KGRhcndpbl90ZXN0Y2FzZS5EYXJ3aW5UZXN0CiAg
ICAgICAgIHBvcnQuX2V4ZWN1dGl2ZSA9IE1vY2tFeGVjdXRpdmUyKHJ1bl9jb21tYW5kX2ZuPXRo
cm93aW5nX3J1bl9jb21tYW5kKQogICAgICAgICBleHBlY3RlZF9zdGRvdXQgPSAiWyd4Y3J1bics
ICctLXNkaycsICdpcGhvbmVzaW11bGF0b3InLCAnLWZpbmQnLCAndGVzdCddXG4iCiAgICAgICAg
IE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBwb3J0LnhjcnVuX2ZpbmQsIGFy
Z3M9Wyd0ZXN0JywgJ2ZhbGxpbmcnXSwgZXhwZWN0ZWRfc3Rkb3V0PWV4cGVjdGVkX3N0ZG91dCkK
KworICAgIGRlZiB0ZXN0X3Bpbmcoc2VsZik6CisgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9y
dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9ydC5ydW5PbkRldmljZShbJ3BpbmcnLCAn
PGRldmlkPiddKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NiYXNlX3Rl
c3RjYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Ni
YXNlX3Rlc3RjYXNlLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC9pb3NiYXNlX3Rlc3RjYXNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAK
KyMgQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisj
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgdGlt
ZQorCitmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGRhcndpbl90ZXN0Y2FzZQorCisKK2NsYXNz
IElPU0Jhc2VUZXN0KGRhcndpbl90ZXN0Y2FzZS5EYXJ3aW5UZXN0KToKKworICAgIGRlZiB0ZXN0
X2RldmljZUZsYWcoc2VsZik6CisgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3J0LmRldmljZURlZmluZWQoKSkKKworICAgIGRlZiB0ZXN0
X2dldF9jcmFzaF9sb2coc2VsZik6CisgICAgICAgICMgTWFjIGNyYXNoIGxvZ3MgYXJlIHRlc3Rl
ZCBlbHNld2hlcmUsIHNvIGhlcmUgd2UganVzdCBtYWtlIHN1cmUgd2UgZG9uJ3QgY3Jhc2guCisg
ICAgICAgIGRlZiBmYWtlX3RpbWVfY2IoKToKKyAgICAgICAgICAgIHRpbWVzID0gWzAsIDIwLCA0
MF0KKyAgICAgICAgICAgIHJldHVybiBsYW1iZGE6IHRpbWVzLnBvcCgwKQorICAgICAgICBwb3J0
ID0gc2VsZi5tYWtlX3BvcnQocG9ydF9uYW1lPSdpb3Mtc2ltdWxhdG9yJykKKyAgICAgICAgcG9y
dC5fZ2V0X2NyYXNoX2xvZygnRHVtcFJlbmRlclRyZWUnLCAxMjM0LCBOb25lLCBOb25lLCB0aW1l
LnRpbWUoKSwgd2FpdF9mb3JfbG9nPUZhbHNlKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L3NlcnZlcl9wcm9jZXNzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQkocmV2aXNpb24gMjA5ODg2KQorKysgVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMCwxMCArMzEsMTMgQEAKIAogaW1wb3J0IGVy
cm5vCiBpbXBvcnQgbG9nZ2luZworaW1wb3J0IG11bHRpcHJvY2Vzc2luZwogaW1wb3J0IHNpZ25h
bAogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKIAorZnJvbSB3ZWJraXRweS5jb21tb24uaXBjX3Bp
cGUgaW1wb3J0IFByb2Nlc3NQaXBlLCBVbml4UGlwZQorCiAjIE5vdGUgdGhhdCBhbHRob3VnaCB3
aW4zMiBweXRob24gZG9lcyBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIG9mCiAjIHRoZSB3aW4z
MiBzZWxlY3QgQVBJLCBpdCBvbmx5IHdvcmtzIG9uIHNvY2tldHMsIGFuZCBub3Qgb24gdGhlIG5h
bWVkIHBpcGVzCiAjIHVzZWQgYnkgc3VicHJvY2Vzcywgc28gd2UgaGF2ZSB0byB1c2UgdGhlIG5h
dGl2ZSBBUElzIGRpcmVjdGx5LgpAQCAtNzEsMzIgKzc1LDI1IEBAIGNsYXNzIFNlcnZlclByb2Nl
c3Mob2JqZWN0KToKICAgICAgICAgc2VsZi5faG9zdCA9IHNlbGYuX3BvcnQuaG9zdAogICAgICAg
ICBzZWxmLl9waWQgPSBOb25lCiAgICAgICAgIHNlbGYuX3Jlc2V0KCkKLQotICAgICAgICAjIFNl
ZSBjb21tZW50IGluIGltcG9ydHMgZm9yIHdoeSB3ZSBuZWVkIHRoZSB3aW4zMiBBUElzIGFuZCBj
YW4ndCBqdXN0IHVzZSBzZWxlY3QuCi0gICAgICAgICMgRklYTUU6IHRoZXJlIHNob3VsZCBiZSBh
IHdheSB0byBnZXQgd2luMzIgdnMuIGN5Z3dpbiBmcm9tIHBsYXRmb3JtaW5mby4KKyAgICAgICAg
c2VsZi5fcGlwZSA9IE5vbmUKICAgICAgICAgc2VsZi5fdXNlX3dpbjMyX2FwaXMgPSBzeXMucGxh
dGZvcm0uc3RhcnRzd2l0aCgnd2luJykKIAorICAgICAgICBpZiAicnVuLW9uLWRldmljZSIgPT0g
c2VsZi5fY21kWzBdOgorICAgICAgICAgICAgc2VsZi5fcG9ydC5ydW5PbkRldmljZShbJ2luc3Rh
bGwnLCBzZWxmLl9jbWRbMV0sIHNlbGYuX2NtZFsyXV0pCisKICAgICBkZWYgbmFtZShzZWxmKToK
ICAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKIAogICAgIGRlZiBwaWQoc2VsZik6CiAgICAgICAg
IHJldHVybiBzZWxmLl9waWQKIAorICAgIGRlZiBjbGVhbihzZWxmKToKKyAgICAgICAgc2VsZi5f
cGlwZS5jbGVhbigpCisKICAgICBkZWYgX3Jlc2V0KHNlbGYpOgotICAgICAgICBpZiBnZXRhdHRy
KHNlbGYsICdfcHJvYycsIE5vbmUpOgotICAgICAgICAgICAgaWYgc2VsZi5fcHJvYy5zdGRpbjoK
LSAgICAgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGluLmNsb3NlKCkKLSAgICAgICAgICAgICAg
ICBzZWxmLl9wcm9jLnN0ZGluID0gTm9uZQotICAgICAgICAgICAgaWYgc2VsZi5fcHJvYy5zdGRv
dXQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRvdXQuY2xvc2UoKQotICAgICAgICAg
ICAgICAgIHNlbGYuX3Byb2Muc3Rkb3V0ID0gTm9uZQotICAgICAgICAgICAgaWYgc2VsZi5fcHJv
Yy5zdGRlcnI6Ci0gICAgICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRlcnIuY2xvc2UoKQotICAg
ICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkZXJyID0gTm9uZQotCi0gICAgICAgIHNlbGYuX3By
b2MgPSBOb25lCi0gICAgICAgIHNlbGYuX291dHB1dCA9IHN0cigpICAjIGJ5dGVzYXJyYXkoKSBv
bmNlIHdlIHJlcXVpcmUgUHl0aG9uIDIuNgotICAgICAgICBzZWxmLl9lcnJvciA9IHN0cigpICAj
IGJ5dGVzYXJyYXkoKSBvbmNlIHdlIHJlcXVpcmUgUHl0aG9uIDIuNgorICAgICAgICBzZWxmLl9w
aXBlID0gTm9uZQorICAgICAgICBzZWxmLl9waWQgPSBOb25lCisKICAgICAgICAgc2VsZi5fY3Jh
c2hlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYudGltZWRfb3V0ID0gRmFsc2UKIApAQCAtMTA0LDc1
ICsxMDEsODUgQEAgY2xhc3MgU2VydmVyUHJvY2VzcyhvYmplY3QpOgogICAgICAgICByZXR1cm4g
c2VsZi5fbmFtZQogCiAgICAgZGVmIF9zdGFydChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fcHJv
YzoKKyAgICAgICAgc2VsZi5fcGlkID0gTm9uZQorICAgICAgICBpZiBzZWxmLl9waXBlOgogICAg
ICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiJXMgYWxyZWFkeSBydW5uaW5nIiAlIHNlbGYuX25h
bWUpCiAgICAgICAgIHNlbGYuX3Jlc2V0KCkKLSAgICAgICAgIyBjbG9zZV9mZHMgaXMgYSB3b3Jr
YXJvdW5kIGZvciBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjMyMAotICAgICAgICBjbG9z
ZV9mZHMgPSBub3Qgc2VsZi5faG9zdC5wbGF0Zm9ybS5pc193aW4oKQotICAgICAgICBzZWxmLl9w
cm9jID0gc2VsZi5faG9zdC5leGVjdXRpdmUucG9wZW4oc2VsZi5fY21kLCBzdGRpbj1zZWxmLl9o
b3N0LmV4ZWN1dGl2ZS5QSVBFLAotICAgICAgICAgICAgc3Rkb3V0PXNlbGYuX2hvc3QuZXhlY3V0
aXZlLlBJUEUsCi0gICAgICAgICAgICBzdGRlcnI9c2VsZi5faG9zdC5leGVjdXRpdmUuUElQRSwK
LSAgICAgICAgICAgIGNsb3NlX2Zkcz1jbG9zZV9mZHMsCi0gICAgICAgICAgICBlbnY9c2VsZi5f
ZW52LAotICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPXNlbGYuX3VuaXZlcnNhbF9uZXds
aW5lcykKLSAgICAgICAgc2VsZi5fcGlkID0gc2VsZi5fcHJvYy5waWQKLSAgICAgICAgc2VsZi5f
cG9ydC5maW5kX3N5c3RlbV9waWQoc2VsZi5uYW1lKCksIHNlbGYuX3BpZCkKLSAgICAgICAgZmQg
PSBzZWxmLl9wcm9jLnN0ZG91dC5maWxlbm8oKQotICAgICAgICBpZiBub3Qgc2VsZi5fdXNlX3dp
bjMyX2FwaXM6Ci0gICAgICAgICAgICBmbCA9IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZM
KQotICAgICAgICAgICAgZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfU0VURkwsIGZsIHwgb3MuT19O
T05CTE9DSykKLSAgICAgICAgICAgIGZkID0gc2VsZi5fcHJvYy5zdGRlcnIuZmlsZW5vKCkKLSAg
ICAgICAgICAgIGZsID0gZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkwpCi0gICAgICAgICAg
ICBmY250bC5mY250bChmZCwgZmNudGwuRl9TRVRGTCwgZmwgfCBvcy5PX05PTkJMT0NLKQotCi0g
ICAgZGVmIF9oYW5kbGVfcG9zc2libGVfaW50ZXJydXB0KHNlbGYpOgotICAgICAgICAiIiJUaGlz
IHJvdXRpbmUgY2hlY2tzIHRvIHNlZSBpZiB0aGUgcHJvY2VzcyBjcmFzaGVkIG9yIGV4aXRlZAot
ICAgICAgICBiZWNhdXNlIG9mIGEga2V5Ym9hcmQgaW50ZXJydXB0IGFuZCByYWlzZXMgS2V5Ym9h
cmRJbnRlcnJ1cHQKLSAgICAgICAgYWNjb3JkaW5nbHkuIiIiCi0gICAgICAgICMgRklYTUU6IExp
bnV4IGFuZCBNYWMgc2V0IHRoZSByZXR1cm5jb2RlIHRvIC1zaWduYWwuU0lHSU5UIGlmIGEKLSAg
ICAgICAgIyBzdWJwcm9jZXNzIGlzIGtpbGxlZCB3aXRoIGEgY3RybF5DLiAgUHJldmlvdXMgY29t
bWVudHMgaW4gdGhpcwotICAgICAgICAjIHJvdXRpbmUgc2FpZCB0aGF0IHN1cHBvc2VkbHkgV2lu
ZG93cyByZXR1cm5zIDB4YzAwMDAwMWQsIGJ1dCB0aGF0J3Mgbm90IHdoYXQKLSAgICAgICAgIyAt
MTA3Mzc0MTUxMCBldmFsdWF0ZXMgdG8uIEZpZ3VyZSBvdXQgd2hhdCB0aGUgcmlnaHQgdmFsdWUg
aXMKLSAgICAgICAgIyBmb3Igd2luMzIgYW5kIGN5Z3dpbiBoZXJlIC4uLgotICAgICAgICBpZiBz
ZWxmLl9wcm9jLnJldHVybmNvZGUgaW4gKC0xMDczNzQxNTEwLCAtc2lnbmFsLlNJR0lOVCk6Ci0g
ICAgICAgICAgICByYWlzZSBLZXlib2FyZEludGVycnVwdAorCisgICAgICAgIGlmICJydW4tb24t
ZGV2aWNlIiA9PSBzZWxmLl9jbWRbMF06CisgICAgICAgICAgICBzZWxmLl9lbnZbJ0lQQ19JREVO
VElGSUVSJ10gPSBzZWxmLl9wb3J0LmV4dHJhY3RCdW5kbGVJRChzZWxmLl9jbWRbMl0pICsgIi0i
ICsgc2VsZi5fY21kWzFdCisgICAgICAgICAgICBmaWxlX2xvY2F0aW9uID0gJy90bXAvJyArIHNl
bGYuX2VudlsnSVBDX0lERU5USUZJRVInXQorICAgICAgICAgICAgc2VsZi5fcGlwZSA9IFVuaXhQ
aXBlKGZpbGVfbG9jYXRpb24gKyAnX0lOJywgZmlsZV9sb2NhdGlvbiArICdfT1VUJywgZmlsZV9s
b2NhdGlvbiArICdfRVJST1InKQorICAgICAgICAgICAgc2VsZi5fcG9ydC5ydW5PbkRldmljZShb
J3J1biddICsgc2VsZi5fY21kWzE6XSwgc2VsZi5fZW52KQorICAgICAgICAgICAgc2VsZi5fcGlw
ZS5jb25uZWN0KCkKKyAgICAgICAgICAgIGlmIHNlbGYuX3BpcGUuaXNDb25uZWN0ZWQoKToKKyAg
ICAgICAgICAgICAgICBwaWQgPSBzZWxmLnJlYWRfc3RkZXJyX2xpbmUodGltZS50aW1lKCkgKyAx
LjApCisgICAgICAgICAgICAgICAgaWYgcGlkOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9w
aWQgPSBpbnQocGlkWzY6LTFdKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgICAgIF9sb2cuZGVidWcoJ05vIHBpZCByZWNlaXZlZCBmcm9tIFVuaXgtcGlwZSBiYXNlZCBj
bGllbnQnKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCdGYWlsZWQgdG8gY29ubmVj
dCB0byBsYXVuY2hpbmcgYXBwJykKKyAgICAgICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1
ZQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9waXBlID0gUHJvY2Vzc1BpcGUo
c2VsZi5fcG9ydCwgc2VsZi5fY21kLCBzZWxmLl9lbnYsIHNlbGYuX3VuaXZlcnNhbF9uZXdsaW5l
cykKKyAgICAgICAgICAgIHNlbGYuX3BpZCA9IHNlbGYuX3BpcGUucGlkKCkKKworICAgICAgICBp
ZiBub3Qgc2VsZi5wb2xsKCk6CisgICAgICAgICAgICBzZWxmLl9wb3J0LmZpbmRfc3lzdGVtX3Bp
ZChzZWxmLm5hbWUoKSwgc2VsZi5waWQoKSkKIAogICAgIGRlZiBwb2xsKHNlbGYpOgogICAgICAg
ICAiIiJDaGVjayB0byBzZWUgaWYgdGhlIHVuZGVybHlpbmcgcHJvY2VzcyBpcyBydW5uaW5nOyBy
ZXR1cm5zIE5vbmUKICAgICAgICAgaWYgaXQgc3RpbGwgaXMgKHdyYXBwZXIgYXJvdW5kIHN1YnBy
b2Nlc3MucG9sbCkuIiIiCi0gICAgICAgIGlmIHNlbGYuX3Byb2M6Ci0gICAgICAgICAgICByZXR1
cm4gc2VsZi5fcHJvYy5wb2xsKCkKLSAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgaWYgc2Vs
Zi5fcGlwZSBhbmQgc2VsZi5fcGlwZS5pc0Nvbm5lY3RlZCgpOgorICAgICAgICAgICAgcmV0dXJu
IE5vbmUKKyAgICAgICAgcmV0dXJuIFRydWUKIAogICAgIGRlZiB3cml0ZShzZWxmLCBieXRlcywg
aWdub3JlX2NyYXNoPUZhbHNlKToKKwogICAgICAgICAiIiJXcml0ZSBhIHJlcXVlc3QgdG8gdGhl
IHN1YnByb2Nlc3MuIFRoZSBzdWJwcm9jZXNzIGlzIChyZS0pc3RhcnQoKSdlZAogICAgICAgICBp
ZiBpcyBub3QgYWxyZWFkeSBydW5uaW5nLiIiIgotICAgICAgICBpZiBub3Qgc2VsZi5fcHJvYzoK
KyAgICAgICAgaWYgbm90IHNlbGYuX3BpcGU6CiAgICAgICAgICAgICBzZWxmLl9zdGFydCgpCi0g
ICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4ud3JpdGUoYnl0ZXMpCi0g
ICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgotICAgICAgICAgICAgc2VsZi5zdG9wKDAuMCkKLSAg
ICAgICAgICAgICMgc3RvcCgpIGNhbGxzIF9yZXNldCgpLCBzbyB3ZSBoYXZlIHRvIHNldCBjcmFz
aGVkIHRvIFRydWUgYWZ0ZXIgY2FsbGluZyBzdG9wKCkKLSAgICAgICAgICAgICMgdW5sZXNzIHdl
IGFscmVhZHkga25vdyB0aGF0IHRoaXMgaXMgYSB0aW1lb3V0LgorICAgICAgICBzdWNjZXNzID0g
RmFsc2UKKyAgICAgICAgaWYgc2VsZi5fcGlwZToKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBzZWxm
Ll9waXBlLnNlbmQoYnl0ZXMpCisKKyAgICAgICAgaWYgbm90IHN1Y2Nlc3M6CisgICAgICAgICAg
ICBzZWxmLnN0b3AoKQogICAgICAgICAgICAgaWYgbm90IGlnbm9yZV9jcmFzaDoKICAgICAgICAg
ICAgICAgICBfbG9nLmRlYnVnKCdUaGlzIHRlc3QgbWFya2VkIGFzIGEgY3Jhc2ggYmVjYXVzZSBv
ZiBhIGJyb2tlbiBwaXBlIHdoZW4gd3JpdGluZyB0byBzdGRpbiBvZiB0aGUgc2VydmVyIHByb2Nl
c3MuJykKICAgICAgICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQogCiAgICAgZGVmIF9w
b3Bfc3Rkb3V0X2xpbmVfaWZfcmVhZHkoc2VsZik6Ci0gICAgICAgIGluZGV4X2FmdGVyX25ld2xp
bmUgPSBzZWxmLl9vdXRwdXQuZmluZCgnXG4nKSArIDEKLSAgICAgICAgaWYgaW5kZXhfYWZ0ZXJf
bmV3bGluZSA+IDA6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcG9wX291dHB1dF9ieXRlcyhp
bmRleF9hZnRlcl9uZXdsaW5lKQorICAgICAgICBkYXRhID0gW10KKyAgICAgICAgaWYgc2VsZi5f
cGlwZToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9waXBlLnN0ZG91dFJlYWQoKQorCisgICAg
ICAgIGlmIGRhdGE6CisgICAgICAgICAgICByZXR1cm4gZGF0YQogICAgICAgICByZXR1cm4gTm9u
ZQogCiAgICAgZGVmIF9wb3Bfc3RkZXJyX2xpbmVfaWZfcmVhZHkoc2VsZik6Ci0gICAgICAgIGlu
ZGV4X2FmdGVyX25ld2xpbmUgPSBzZWxmLl9lcnJvci5maW5kKCdcbicpICsgMQotICAgICAgICBp
ZiBpbmRleF9hZnRlcl9uZXdsaW5lID4gMDoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9wb3Bf
ZXJyb3JfYnl0ZXMoaW5kZXhfYWZ0ZXJfbmV3bGluZSkKKyAgICAgICAgZGF0YSA9IFtdCisgICAg
ICAgIGlmIHNlbGYuX3BpcGU6CisgICAgICAgICAgICBkYXRhID0gc2VsZi5fcGlwZS5zdGRlcnJS
ZWFkKCkKKyAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgIHJldHVybiBkYXRhCiAgICAgICAg
IHJldHVybiBOb25lCiAKICAgICBkZWYgcG9wX2FsbF9idWZmZXJlZF9zdGRlcnIoc2VsZik6Ci0g
ICAgICAgIHJldHVybiBzZWxmLl9wb3BfZXJyb3JfYnl0ZXMobGVuKHNlbGYuX2Vycm9yKSkKKyAg
ICAgICAgX2Vycm9yID0gIiIKKyAgICAgICAgX2N1cnJlbnRfZXJyb3IgPSBbXQorICAgICAgICB3
aGlsZSBUcnVlOgorICAgICAgICAgICAgaWYgc2VsZi5fcGlwZToKKyAgICAgICAgICAgICAgICBf
Y3VycmVudF9lcnJvciA9IHNlbGYuX3BpcGUuc3RkZXJyUmVhZCgpCisgICAgICAgICAgICBpZiBu
b3QgX2N1cnJlbnRfZXJyb3I6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9lcnJvcgorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfZXJyb3IgPSBfZXJyb3IgKyBfY3VycmVudF9l
cnJvciArICdcbicKIAogICAgIGRlZiByZWFkX3N0ZG91dF9saW5lKHNlbGYsIGRlYWRsaW5lKToK
ICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWQoZGVhZGxpbmUsIHNlbGYuX3BvcF9zdGRvdXRfbGlu
ZV9pZl9yZWFkeSkKQEAgLTE5MSw3ICsxOTgsNiBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVj
dCk6CiAgICAgICAgICAgICByZXR1cm4gTm9uZSAgIyBJbnN0cnVjdHMgdGhlIGNhbGxlciB0byBr
ZWVwIHdhaXRpbmcuCiAKICAgICAgICAgcmV0dXJuX3ZhbHVlID0gc2VsZi5fcmVhZChkZWFkbGlu
ZSwgcmV0cmlldmVfYnl0ZXNfZnJvbV9idWZmZXJzKQotICAgICAgICAjIEZJWE1FOiBUaGlzIGlz
IGEgYml0IG9mIGEgaGFjayBhcm91bmQgdGhlIGZhY3QgdGhhdCBfcmVhZCBub3JtYWxseSBvbmx5
IHJldHVybnMgb25lIHZhbHVlLCBidXQgdGhpcyBjYWxsZXIgd2FudHMgaXQgdG8gcmV0dXJuIHR3
by4KICAgICAgICAgaWYgcmV0dXJuX3ZhbHVlIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4g
Tm9uZSwgTm9uZQogICAgICAgICByZXR1cm4gcmV0dXJuX3ZhbHVlCkBAIC0yMDEsMTE3ICsyMDcs
MjUgQEAgY2xhc3MgU2VydmVyUHJvY2VzcyhvYmplY3QpOgogICAgICAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcignU2VydmVyUHJvY2Vzcy5yZWFkKCkgY2FsbGVkIHdpdGggYSBub24tcG9zaXRpdmUg
c2l6ZTogJWQgJyAlIHNpemUpCiAKICAgICAgICAgZGVmIHJldHJpZXZlX2J5dGVzX2Zyb21fc3Rk
b3V0X2J1ZmZlcigpOgotICAgICAgICAgICAgaWYgbGVuKHNlbGYuX291dHB1dCkgPj0gc2l6ZToK
LSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcG9wX291dHB1dF9ieXRlcyhzaXplKQorICAg
ICAgICAgICAgaWYgc2VsZi5fcGlwZToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcGlw
ZS5yZWFkQmxvY2tTdGRvdXQoc2l6ZSkKICAgICAgICAgICAgIHJldHVybiBOb25lCiAKICAgICAg
ICAgcmV0dXJuIHNlbGYuX3JlYWQoZGVhZGxpbmUsIHJldHJpZXZlX2J5dGVzX2Zyb21fc3Rkb3V0
X2J1ZmZlcikKIAotICAgIGRlZiBfbG9nKHNlbGYsIG1lc3NhZ2UpOgotICAgICAgICAjIFRoaXMg
aXMgYSBiaXQgb2YgYSBoYWNrLCBidXQgd2UgZmlyc3QgbG9nIGEgYmxhbmsgbGluZSB0byBhdm9p
ZAotICAgICAgICAjIG1lc3NpbmcgdXAgdGhlIG1hc3RlciBwcm9jZXNzJ3Mgb3V0cHV0LgotICAg
ICAgICBfbG9nLmluZm8oJycpCi0gICAgICAgIF9sb2cuaW5mbyhtZXNzYWdlKQotCiAgICAgZGVm
IF9oYW5kbGVfdGltZW91dChzZWxmKToKICAgICAgICAgc2VsZi50aW1lZF9vdXQgPSBUcnVlCiAg
ICAgICAgIGlmIHNlbGYuX3BvcnQuZ2V0X29wdGlvbigic2FtcGxlX29uX3RpbWVvdXQiKToKICAg
ICAgICAgICAgIHNlbGYuX3BvcnQuc2FtcGxlX3Byb2Nlc3Moc2VsZi5fbmFtZSwgc2VsZi5fcHJv
Yy5waWQpCiAKLSAgICBkZWYgX3NwbGl0X3N0cmluZ19hZnRlcl9pbmRleChzZWxmLCBzdHJpbmcs
IGluZGV4KToKLSAgICAgICAgcmV0dXJuIHN0cmluZ1s6aW5kZXhdLCBzdHJpbmdbaW5kZXg6XQot
Ci0gICAgZGVmIF9wb3Bfb3V0cHV0X2J5dGVzKHNlbGYsIGJ5dGVzX2NvdW50KToKLSAgICAgICAg
b3V0cHV0LCBzZWxmLl9vdXRwdXQgPSBzZWxmLl9zcGxpdF9zdHJpbmdfYWZ0ZXJfaW5kZXgoc2Vs
Zi5fb3V0cHV0LCBieXRlc19jb3VudCkKLSAgICAgICAgcmV0dXJuIG91dHB1dAotCi0gICAgZGVm
IF9wb3BfZXJyb3JfYnl0ZXMoc2VsZiwgYnl0ZXNfY291bnQpOgotICAgICAgICBvdXRwdXQsIHNl
bGYuX2Vycm9yID0gc2VsZi5fc3BsaXRfc3RyaW5nX2FmdGVyX2luZGV4KHNlbGYuX2Vycm9yLCBi
eXRlc19jb3VudCkKLSAgICAgICAgcmV0dXJuIG91dHB1dAotCi0gICAgZGVmIF93YWl0X2Zvcl9k
YXRhX2FuZF91cGRhdGVfYnVmZmVyc191c2luZ19zZWxlY3Qoc2VsZiwgZGVhZGxpbmUsIHN0b3Bw
aW5nPUZhbHNlKToKLSAgICAgICAgaWYgc2VsZi5fcHJvYy5zdGRvdXQuY2xvc2VkIG9yIHNlbGYu
X3Byb2Muc3RkZXJyLmNsb3NlZDoKLSAgICAgICAgICAgICMgSWYgdGhlIHByb2Nlc3MgY3Jhc2hl
ZCBhbmQgaXMgdXNpbmcgRklGT3MsIGxpa2UgQ2hyb21pdW0gQW5kcm9pZCwgdGhlCi0gICAgICAg
ICAgICAjIHN0ZG91dCBhbmQgc3RkZXJyIHBpcGVzIHdpbGwgYmUgY2xvc2VkLgotICAgICAgICAg
ICAgcmV0dXJuCi0KLSAgICAgICAgb3V0X2ZkID0gc2VsZi5fcHJvYy5zdGRvdXQuZmlsZW5vKCkK
LSAgICAgICAgZXJyX2ZkID0gc2VsZi5fcHJvYy5zdGRlcnIuZmlsZW5vKCkKLSAgICAgICAgc2Vs
ZWN0X2ZkcyA9IChvdXRfZmQsIGVycl9mZCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmVh
ZF9mZHMsIF8sIF8gPSBzZWxlY3Quc2VsZWN0KHNlbGVjdF9mZHMsIFtdLCBzZWxlY3RfZmRzLCBt
YXgoZGVhZGxpbmUgLSB0aW1lLnRpbWUoKSwgMCkpCi0gICAgICAgIGV4Y2VwdCBzZWxlY3QuZXJy
b3IsIGU6Ci0gICAgICAgICAgICAjIFdlIGNhbiBpZ25vcmUgRUlOVkFMIHNpbmNlIGl0J3MgbGlr
ZWx5IHRoZSBwcm9jZXNzIGp1c3QgY3Jhc2hlZCBhbmQgd2UnbGwKLSAgICAgICAgICAgICMgZmln
dXJlIHRoYXQgb3V0IHRoZSBuZXh0IHRpbWUgdGhyb3VnaCB0aGUgbG9vcCBpbiBfcmVhZCgpLgot
ICAgICAgICAgICAgaWYgZS5hcmdzWzBdID09IGVycm5vLkVJTlZBTDoKLSAgICAgICAgICAgICAg
ICByZXR1cm4KLSAgICAgICAgICAgIHJhaXNlCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAg
IyBOb3RlIHRoYXQgd2UgbWF5IGdldCBubyBkYXRhIGR1cmluZyByZWFkKCkgZXZlbiB0aG91Z2gK
LSAgICAgICAgICAgICMgc2VsZWN0IHNheXMgd2UgZ290IHNvbWV0aGluZzsgc2VlIHRoZSBzZWxl
Y3QoKSBtYW4gcGFnZQotICAgICAgICAgICAgIyBvbiBsaW51eC4gSSBkb24ndCBrbm93IGlmIHRo
aXMgaGFwcGVucyBvbiBNYWMgT1MgYW5kCi0gICAgICAgICAgICAjIG90aGVyIFVuaXhlbiBhcyB3
ZWxsLCBidXQgd2UgZG9uJ3QgYm90aGVyIHNwZWNpYWwtY2FzaW5nCi0gICAgICAgICAgICAjIExp
bnV4IGJlY2F1c2UgaXQncyByZWxhdGl2ZWx5IGhhcm1sZXNzIGVpdGhlciB3YXkuCi0gICAgICAg
ICAgICBpZiBvdXRfZmQgaW4gcmVhZF9mZHM6Ci0gICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYu
X3Byb2Muc3Rkb3V0LnJlYWQoKQotICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhIGFuZCBub3Qg
c3RvcHBpbmcgYW5kIChzZWxmLl90cmVhdF9ub19kYXRhX2FzX2NyYXNoIG9yIHNlbGYuX3Byb2Mu
cG9sbCgpKToKLSAgICAgICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygnVGhpcyB0ZXN0IG1hcmtl
ZCBhcyBhIGNyYXNoIGJlY2F1c2Ugb2Ygbm8gZGF0YSB3aGlsZSByZWFkaW5nIHN0ZG91dCBmb3Ig
dGhlIHNlcnZlciBwcm9jZXNzLicpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2NyYXNoZWQg
PSBUcnVlCi0gICAgICAgICAgICAgICAgc2VsZi5fb3V0cHV0ICs9IGRhdGEKLQotICAgICAgICAg
ICAgaWYgZXJyX2ZkIGluIHJlYWRfZmRzOgotICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9w
cm9jLnN0ZGVyci5yZWFkKCkKLSAgICAgICAgICAgICAgICBpZiBub3QgZGF0YSBhbmQgbm90IHN0
b3BwaW5nIGFuZCAoc2VsZi5fdHJlYXRfbm9fZGF0YV9hc19jcmFzaCBvciBzZWxmLl9wcm9jLnBv
bGwoKSk6Ci0gICAgICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJ1RoaXMgdGVzdCBtYXJrZWQg
YXMgYSBjcmFzaCBiZWNhdXNlIG9mIG5vIGRhdGEgd2hpbGUgcmVhZGluZyBzdGRvdXQgZm9yIHRo
ZSBzZXJ2ZXIgcHJvY2Vzcy4nKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0g
VHJ1ZQotICAgICAgICAgICAgICAgIHNlbGYuX2Vycm9yICs9IGRhdGEKLSAgICAgICAgZXhjZXB0
IElPRXJyb3IsIGU6Ci0gICAgICAgICAgICAjIFdlIGNhbiBpZ25vcmUgdGhlIElPRXJyb3JzIGJl
Y2F1c2Ugd2Ugd2lsbCBkZXRlY3QgaWYgdGhlIHN1YnBvcmNlc3MgY3Jhc2hlZAotICAgICAgICAg
ICAgIyB0aGUgbmV4dCB0aW1lIHRocm91Z2ggdGhlIGxvb3AgaW4gX3JlYWQoKQotICAgICAgICAg
ICAgcGFzcwotCi0gICAgZGVmIF93YWl0X2Zvcl9kYXRhX2FuZF91cGRhdGVfYnVmZmVyc191c2lu
Z193aW4zMl9hcGlzKHNlbGYsIGRlYWRsaW5lKToKLSAgICAgICAgIyBTZWUgaHR0cDovL2NvZGUu
YWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvNDQwNTU0LW1vZHVsZS10by1hbGxvdy1hc3luY2hyb25v
dXMtc3VicHJvY2Vzcy11c2Utb24td2luLwotICAgICAgICAjIGFuZCBodHRwOi8vZG9jcy5hY3Rp
dmVzdGF0ZS5jb20vYWN0aXZlcHl0aG9uLzIuNi9weXdpbjMyL21vZHVsZXMuaHRtbAotICAgICAg
ICAjIGZvciBkb2N1bWVudGF0aW9uIG9uIGFsbCBvZiB0aGVzZSB3aW4zMi1zcGVjaWZpYyBtb2R1
bGVzLgotICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQotICAgICAgICBvdXRfZmggPSBtc3ZjcnQu
Z2V0X29zZmhhbmRsZShzZWxmLl9wcm9jLnN0ZG91dC5maWxlbm8oKSkKLSAgICAgICAgZXJyX2Zo
ID0gbXN2Y3J0LmdldF9vc2ZoYW5kbGUoc2VsZi5fcHJvYy5zdGRlcnIuZmlsZW5vKCkpCi0gICAg
ICAgIHdoaWxlIChzZWxmLl9wcm9jLnBvbGwoKSBpcyBOb25lKSBhbmQgKG5vdyA8IGRlYWRsaW5l
KToKLSAgICAgICAgICAgIG91dHB1dCA9IHNlbGYuX25vbl9ibG9ja2luZ19yZWFkX3dpbjMyKG91
dF9maCkKLSAgICAgICAgICAgIGVycm9yID0gc2VsZi5fbm9uX2Jsb2NraW5nX3JlYWRfd2luMzIo
ZXJyX2ZoKQotICAgICAgICAgICAgaWYgb3V0cHV0IG9yIGVycm9yOgotICAgICAgICAgICAgICAg
IGlmIG91dHB1dDoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3V0cHV0ICs9IG91dHB1dAot
ICAgICAgICAgICAgICAgIGlmIGVycm9yOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9lcnJv
ciArPSBlcnJvcgotICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgdGltZS5zbGVl
cCgwLjAxKQotICAgICAgICAgICAgbm93ID0gdGltZS50aW1lKCkKLSAgICAgICAgcmV0dXJuCi0K
LSAgICBkZWYgX25vbl9ibG9ja2luZ19yZWFkX3dpbjMyKHNlbGYsIGhhbmRsZSk6Ci0gICAgICAg
IHRyeToKLSAgICAgICAgICAgIF8sIGF2YWlsLCBfID0gd2luMzJwaXBlLlBlZWtOYW1lZFBpcGUo
aGFuZGxlLCAwKQotICAgICAgICAgICAgaWYgYXZhaWwgPiAwOgotICAgICAgICAgICAgICAgIF8s
IGJ1ZiA9IHdpbjMyZmlsZS5SZWFkRmlsZShoYW5kbGUsIGF2YWlsLCBOb25lKQotICAgICAgICAg
ICAgICAgIHJldHVybiBidWYKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKLSAgICAgICAg
ICAgIGlmIGVbMF0gbm90IGluICgxMDksIGVycm5vLkVTSFVURE9XTik6ICAjIDEwOSA9PSB3aW4z
MiBFUlJPUl9CUk9LRU5fUElQRQotICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIHJldHVy
biBOb25lCi0KICAgICBkZWYgaGFzX2NyYXNoZWQoc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxm
Ll9jcmFzaGVkIGFuZCBzZWxmLnBvbGwoKToKICAgICAgICAgICAgIF9sb2cuZGVidWcoJ1RoaXMg
dGVzdCBtYXJrZWQgYXMgYSBjcmFzaCBiZWNhdXNlIG9mIGZhaWx1cmUgdG8gcG9sbCB0aGUgc2Vy
dmVyIHByb2Nlc3MuJykKICAgICAgICAgICAgIHNlbGYuX2NyYXNoZWQgPSBUcnVlCi0gICAgICAg
ICAgICBzZWxmLl9oYW5kbGVfcG9zc2libGVfaW50ZXJydXB0KCkKKyAgICAgICAgICAgIGlmIHNl
bGYuX3BpcGU6CisgICAgICAgICAgICAgICAgc2VsZi5fcGlwZS5oYW5kbGVfaW50ZXJydXB0KCkK
ICAgICAgICAgcmV0dXJuIHNlbGYuX2NyYXNoZWQKIAotICAgICMgVGhpcyByZWFkIGZ1bmN0aW9u
IGlzIGEgYml0IG9kZGx5LWRlc2lnbmVkLCBhcyBpdCBwb2xscyBib3RoIHN0ZG91dCBhbmQgc3Rk
ZXJyLCB5ZXQKLSAgICAjIG9ubHkgcmVhZHMvcmV0dXJucyBmcm9tIG9uZSBvZiB0aGVtIChidWZm
ZXJpbmcgYm90aCBpbiBsb2NhbCBzZWxmLl9vdXRwdXQvc2VsZi5fZXJyb3IpLgotICAgICMgSXQg
bWlnaHQgYmUgY2xlYW5lciB0byBwYXNzIGluIHRoZSBmaWxlIGRlc2NyaXB0b3IgdG8gcG9sbCBp
bnN0ZWFkLgogICAgIGRlZiBfcmVhZChzZWxmLCBkZWFkbGluZSwgZmV0Y2hfYnl0ZXNfZnJvbV9i
dWZmZXJzX2NhbGxiYWNrKToKICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIGlmIHNl
bGYuaGFzX2NyYXNoZWQoKToKQEAgLTMyNSw2MyArMjM5LDM2IEBAIGNsYXNzIFNlcnZlclByb2Nl
c3Mob2JqZWN0KToKICAgICAgICAgICAgIGlmIGJ5dGVzIGlzIG5vdCBOb25lOgogICAgICAgICAg
ICAgICAgIHJldHVybiBieXRlcwogCi0gICAgICAgICAgICBpZiBzZWxmLl91c2Vfd2luMzJfYXBp
czoKLSAgICAgICAgICAgICAgICBzZWxmLl93YWl0X2Zvcl9kYXRhX2FuZF91cGRhdGVfYnVmZmVy
c191c2luZ193aW4zMl9hcGlzKGRlYWRsaW5lKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAg
ICAgICAgICBzZWxmLl93YWl0X2Zvcl9kYXRhX2FuZF91cGRhdGVfYnVmZmVyc191c2luZ19zZWxl
Y3QoZGVhZGxpbmUpCi0KICAgICBkZWYgc3RhcnQoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxm
Ll9wcm9jOgorICAgICAgICBpZiBub3Qgc2VsZi5fcGlwZToKICAgICAgICAgICAgIHNlbGYuX3N0
YXJ0KCkKIAogICAgIGRlZiBzdG9wKHNlbGYsIHRpbWVvdXRfc2Vjcz0zLjApOgotICAgICAgICBp
ZiBub3Qgc2VsZi5fcHJvYzoKLSAgICAgICAgICAgIHJldHVybiAoTm9uZSwgTm9uZSkKKyAgICAg
ICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIHRpbWVvdXRfc2VjcwogCi0gICAgICAgICMgT25s
eSBib3RoZXIgdG8gY2hlY2sgZm9yIGxlYWtzIG9yIHN0ZGVyciBpZiB0aGUgcHJvY2VzcyBpcyBz
dGlsbCBydW5uaW5nLgotICAgICAgICBpZiBzZWxmLnBvbGwoKSBpcyBOb25lOgotICAgICAgICAg
ICAgc2VsZi5fcG9ydC5jaGVja19mb3JfbGVha3Moc2VsZi5uYW1lKCksIHNlbGYucGlkKCkpCi0K
LSAgICAgICAgbm93ID0gdGltZS50aW1lKCkKLSAgICAgICAgaWYgc2VsZi5fcHJvYy5zdGRpbjoK
LSAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4uY2xvc2UoKQotICAgICAgICAgICAgc2VsZi5f
cHJvYy5zdGRpbiA9IE5vbmUKLSAgICAgICAga2lsbGVkID0gRmFsc2UKLSAgICAgICAgaWYgdGlt
ZW91dF9zZWNzOgotICAgICAgICAgICAgZGVhZGxpbmUgPSBub3cgKyB0aW1lb3V0X3NlY3MKLSAg
ICAgICAgICAgIHdoaWxlIHNlbGYuX3Byb2MucG9sbCgpIGlzIE5vbmUgYW5kIHRpbWUudGltZSgp
IDwgZGVhZGxpbmU6Ci0gICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQotICAgICAgICAg
ICAgaWYgc2VsZi5fcHJvYy5wb2xsKCkgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBfbG9nLndh
cm5pbmcoJ3N0b3BwaW5nICVzKHBpZCAlZCkgdGltZWQgb3V0LCBraWxsaW5nIGl0JyAlIChzZWxm
Ll9uYW1lLCBzZWxmLl9wcm9jLnBpZCkpCi0KLSAgICAgICAgaWYgc2VsZi5fcHJvYy5wb2xsKCkg
aXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX2tpbGwoKQotICAgICAgICAgICAga2lsbGVkID0g
VHJ1ZQotICAgICAgICAgICAgX2xvZy5kZWJ1Zygna2lsbGVkIHBpZCAlZCcgJSBzZWxmLl9wcm9j
LnBpZCkKLQotICAgICAgICAjIHJlYWQgYW55IHJlbWFpbmluZyBkYXRhIG9uIHRoZSBwaXBlcyBh
bmQgcmV0dXJuIGl0LgotICAgICAgICBpZiBub3Qga2lsbGVkOgotICAgICAgICAgICAgaWYgc2Vs
Zi5fdXNlX3dpbjMyX2FwaXM6Ci0gICAgICAgICAgICAgICAgc2VsZi5fd2FpdF9mb3JfZGF0YV9h
bmRfdXBkYXRlX2J1ZmZlcnNfdXNpbmdfd2luMzJfYXBpcyhub3cpCi0gICAgICAgICAgICBlbHNl
OgotICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRfZm9yX2RhdGFfYW5kX3VwZGF0ZV9idWZmZXJz
X3VzaW5nX3NlbGVjdChub3csIHN0b3BwaW5nPVRydWUpCi0gICAgICAgIG91dCwgZXJyID0gc2Vs
Zi5fb3V0cHV0LCBzZWxmLl9lcnJvcgorICAgICAgICBvdXQgPSBbXQorICAgICAgICBlcnIgPSBb
XQorCisgICAgICAgIGlmIHNlbGYuX3BpcGUgPT0gTm9uZToKKyAgICAgICAgICAgIHJldHVybiAo
b3V0LCBlcnIpCisgICAgICAgIGlmIG5vdCBzZWxmLl9waXBlLmlzQ29ubmVjdGVkKCk6CisgICAg
ICAgICAgICBzZWxmLl9waXBlLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3Jlc2V0KCkKKyAg
ICAgICAgICAgIHJldHVybiAob3V0LCBlcnIpCisKKyAgICAgICAgb3V0ID0gc2VsZi5fcGlwZS5y
ZWFkQnVmZmVyU3Rkb3V0KCkKKyAgICAgICAgZXJyID0gc2VsZi5fcGlwZS5yZWFkQnVmZmVyU3Rk
ZXJyKCkKKworICAgICAgICB3aGlsZSBzZWxmLl9waXBlLmlzQ29ubmVjdGVkKCkgYW5kIGRlYWRs
aW5lID4gdGltZS50aW1lKCk6CisgICAgICAgICAgICBvdXQgPSBvdXQgKyBzZWxmLl9waXBlLnJl
YWRCdWZmZXJTdGRvdXQoKQorICAgICAgICAgICAgZXJyID0gZXJyICsgc2VsZi5fcGlwZS5yZWFk
QnVmZmVyU3RkZXJyKCkKKworICAgICAgICBpZiAicnVuLW9uLWRldmljZSIgPT0gc2VsZi5fY21k
WzBdOgorICAgICAgICAgICAgc2VsZi5fcG9ydC5ydW5PbkRldmljZShbJ2tpbGwnLCBzZWxmLl9j
bWRbMV0sIHNlbGYuX2NtZFsyXV0pCisgICAgICAgIHNlbGYuX3BpcGUuY2xvc2UoKQogICAgICAg
ICBzZWxmLl9yZXNldCgpCiAgICAgICAgIHJldHVybiAob3V0LCBlcnIpCiAKICAgICBkZWYga2ls
bChzZWxmKToKICAgICAgICAgc2VsZi5zdG9wKDAuMCkKIAotICAgIGRlZiBfa2lsbChzZWxmKToK
LSAgICAgICAgc2VsZi5faG9zdC5leGVjdXRpdmUua2lsbF9wcm9jZXNzKHNlbGYuX3Byb2MucGlk
KQotICAgICAgICBpZiBzZWxmLl9wcm9jLnBvbGwoKSBpcyBub3QgTm9uZToKLSAgICAgICAgICAg
IHNlbGYuX3Byb2Mud2FpdCgpCi0KLSAgICBkZWYgcmVwbGFjZV9vdXRwdXRzKHNlbGYsIHN0ZG91
dCwgc3RkZXJyKToKLSAgICAgICAgYXNzZXJ0IHNlbGYuX3Byb2MKLSAgICAgICAgaWYgc3Rkb3V0
OgotICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRvdXQuY2xvc2UoKQotICAgICAgICAgICAgc2Vs
Zi5fcHJvYy5zdGRvdXQgPSBzdGRvdXQKLSAgICAgICAgaWYgc3RkZXJyOgotICAgICAgICAgICAg
c2VsZi5fcHJvYy5zdGRlcnIuY2xvc2UoKQotICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRlcnIg
PSBzdGRlcnIKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vz
c191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
c2VydmVyX3Byb2Nlc3NfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIwOTg4NikKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzc191bml0dGVzdC5weQkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzIsNiArMzMsNyBAQCBpbXBvcnQg
dW5pdHRlc3QKIAogZnJvbSB3ZWJraXRweS5wb3J0LmZhY3RvcnkgaW1wb3J0IFBvcnRGYWN0b3J5
CiBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IHNlcnZlcl9wcm9jZXNzCitmcm9tIHdlYmtpdHB5
LmNvbW1vbi5pcGNfcGlwZV90ZXN0Y2FzZSBpbXBvcnQgRHVtbXlQcm9jZXNzUGlwZQogZnJvbSB3
ZWJraXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3QgaW1wb3J0IFN5c3RlbUhvc3QKIGZyb20g
d2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1ob3N0X21vY2sgaW1wb3J0IE1vY2tTeXN0ZW1I
b3N0CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3V0cHV0Y2FwdHVyZSBpbXBvcnQgT3V0
cHV0Q2FwdHVyZQpAQCAtNTMsNDggKzU1LDExIEBAIGNsYXNzIFRyaXZpYWxNb2NrUG9ydChvYmpl
Y3QpOgogICAgICAgICByZXR1cm4gMQogCiAKLWNsYXNzIE1vY2tGaWxlKG9iamVjdCk6Ci0gICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHNlcnZlcl9wcm9jZXNzKToKLSAgICAgICAgc2VsZi5fc2VydmVy
X3Byb2Nlc3MgPSBzZXJ2ZXJfcHJvY2VzcwotICAgICAgICBzZWxmLmNsb3NlZCA9IEZhbHNlCi0K
LSAgICBkZWYgZmlsZW5vKHNlbGYpOgotICAgICAgICByZXR1cm4gMQotCi0gICAgZGVmIHdyaXRl
KHNlbGYsIGxpbmUpOgotICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5icm9rZW5fcGlwZXMu
YXBwZW5kKHNlbGYpCi0gICAgICAgIHJhaXNlIElPRXJyb3IKLQotICAgIGRlZiByZWFkKHNlbGYs
IHNpemU9MCk6Ci0gICAgICAgICMgVGhpcyBtZWFucyBlbmQgb2YgZmlsZQotICAgICAgICByZXR1
cm4gJycKLQotICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgc2VsZi5jbG9zZWQgPSBUcnVl
Ci0KLQotY2xhc3MgTW9ja1Byb2Mob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vy
dmVyX3Byb2Nlc3MpOgotICAgICAgICBzZWxmLnN0ZGluID0gTW9ja0ZpbGUoc2VydmVyX3Byb2Nl
c3MpCi0gICAgICAgIHNlbGYuc3Rkb3V0ID0gTW9ja0ZpbGUoc2VydmVyX3Byb2Nlc3MpCi0gICAg
ICAgIHNlbGYuc3RkZXJyID0gTW9ja0ZpbGUoc2VydmVyX3Byb2Nlc3MpCi0gICAgICAgIHNlbGYu
cGlkID0gMQotCi0gICAgZGVmIHBvbGwoc2VsZik6Ci0gICAgICAgIHJldHVybiAxCi0KLSAgICBk
ZWYgd2FpdChzZWxmKToKLSAgICAgICAgcmV0dXJuIDAKLQotCiBjbGFzcyBGYWtlU2VydmVyUHJv
Y2VzcyhzZXJ2ZXJfcHJvY2Vzcy5TZXJ2ZXJQcm9jZXNzKToKICAgICBkZWYgX3N0YXJ0KHNlbGYp
OgotICAgICAgICBzZWxmLl9wcm9jID0gTW9ja1Byb2Moc2VsZikKLSAgICAgICAgc2VsZi5zdGRp
biA9IHNlbGYuX3Byb2Muc3RkaW4KLSAgICAgICAgc2VsZi5zdGRvdXQgPSBzZWxmLl9wcm9jLnN0
ZG91dAotICAgICAgICBzZWxmLnN0ZGVyciA9IHNlbGYuX3Byb2Muc3RkZXJyCi0gICAgICAgIHNl
bGYuX3BpZCA9IHNlbGYuX3Byb2MucGlkCi0gICAgICAgIHNlbGYuYnJva2VuX3BpcGVzID0gW10K
KyAgICAgICAgc2VsZi5fcGlwZSA9IER1bW15UHJvY2Vzc1BpcGUoc2VsZi5fcG9ydCwgc2VsZi5f
Y21kLCBzZWxmLl9lbnYsIHNlbGYuX3VuaXZlcnNhbF9uZXdsaW5lcykKKyAgICAgICAgc2VsZi5f
cGlkID0gc2VsZi5fcGlwZS5waWQoKQorICAgICAgICBzZWxmLl9waXBlLmNvbm5lY3RlZEZvclRl
c3RpbmcgPSBGYWxzZQogCiAKIGNsYXNzIFRlc3RTZXJ2ZXJQcm9jZXNzKHVuaXR0ZXN0LlRlc3RD
YXNlKToKQEAgLTEzNSw5ICsxMDAsNyBAQCBjbGFzcyBUZXN0U2VydmVyUHJvY2Vzcyh1bml0dGVz
dC5UZXN0Q2FzCiAgICAgICAgIHNlcnZlcl9wcm9jZXNzID0gRmFrZVNlcnZlclByb2Nlc3MocG9y
dF9vYmo9cG9ydF9vYmosIG5hbWU9InRlc3QiLCBjbWQ9WyJ0ZXN0Il0pCiAgICAgICAgIHNlcnZl
cl9wcm9jZXNzLl9zdGFydCgpCiAgICAgICAgIHNlcnZlcl9wcm9jZXNzLnN0b3AoKQotICAgICAg
ICBzZWxmLmFzc2VydFRydWUoc2VydmVyX3Byb2Nlc3Muc3RkaW4uY2xvc2VkKQotICAgICAgICBz
ZWxmLmFzc2VydFRydWUoc2VydmVyX3Byb2Nlc3Muc3Rkb3V0LmNsb3NlZCkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKHNlcnZlcl9wcm9jZXNzLnN0ZGVyci5jbG9zZWQpCisgICAgICAgIHNlbGYu
YXNzZXJ0SXNOb25lKHNlcnZlcl9wcm9jZXNzLl9waXBlKQogCiAgICAgZGVmIHRlc3RfYnJva2Vu
X3BpcGUoc2VsZik6CiAgICAgICAgIHBvcnRfb2JqID0gVHJpdmlhbE1vY2tQb3J0KCkKQEAgLTE0
NiwxMyArMTA5LDEyIEBAIGNsYXNzIFRlc3RTZXJ2ZXJQcm9jZXNzKHVuaXR0ZXN0LlRlc3RDYXMK
ICAgICAgICAgc2VydmVyX3Byb2Nlc3MgPSBGYWtlU2VydmVyUHJvY2Vzcyhwb3J0X29iaj1wb3J0
X29iaiwgbmFtZT0idGVzdCIsIGNtZD1bInRlc3QiXSkKICAgICAgICAgc2VydmVyX3Byb2Nlc3Mu
d3JpdGUoInNob3VsZCBicmVhayIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZXJ2ZXJfcHJv
Y2Vzcy5oYXNfY3Jhc2hlZCgpKQotICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShzZXJ2ZXJf
cHJvY2Vzcy5waWQoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VydmVyX3Byb2Nlc3Mu
X3Byb2MpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VydmVyX3Byb2Nlc3MuYnJva2VuX3Bp
cGVzLCBbc2VydmVyX3Byb2Nlc3Muc3RkaW5dKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShz
ZXJ2ZXJfcHJvY2Vzcy5fcGlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VydmVyX3By
b2Nlc3MucGlkKCkpCiAKICAgICAgICAgcG9ydF9vYmouaG9zdC5wbGF0Zm9ybS5vc19uYW1lID0g
J21hYycKICAgICAgICAgc2VydmVyX3Byb2Nlc3MgPSBGYWtlU2VydmVyUHJvY2Vzcyhwb3J0X29i
aj1wb3J0X29iaiwgbmFtZT0idGVzdCIsIGNtZD1bInRlc3QiXSkKICAgICAgICAgc2VydmVyX3By
b2Nlc3Mud3JpdGUoInNob3VsZCBicmVhayIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZXJ2
ZXJfcHJvY2Vzcy5oYXNfY3Jhc2hlZCgpKQotICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZXJ2
ZXJfcHJvY2Vzcy5fcHJvYykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJ2ZXJfcHJvY2Vz
cy5icm9rZW5fcGlwZXMsIFtzZXJ2ZXJfcHJvY2Vzcy5zdGRpbl0pCisgICAgICAgIHNlbGYuYXNz
ZXJ0SXNOb25lKHNlcnZlcl9wcm9jZXNzLl9waXBlKQorICAgICAgICBzZWxmLmFzc2VydElzTm9u
ZShzZXJ2ZXJfcHJvY2Vzcy5waWQoKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5
bGUvY2hlY2tlcnMvcHl0aG9uLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvc3R5bGUvY2hlY2tlcnMvcHl0aG9uLnB5CShyZXZpc2lvbiAyMDk4ODYpCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL3B5dGhvbi5weQkod29ya2luZyBjb3B5KQpA
QCAtMTAzLDcgKzEwMyw3IEBAIGNsYXNzIFB5bGludGVyKG9iamVjdCk6CiAKICAgICBkZWYgcnVu
KHNlbGYsIGFyZ3YpOgogICAgICAgICBvdXRwdXQgPSBfRmlsdGVyZWRTdHJpbmdJTyhzZWxmLkZB
TFNFX1BPU0lUSVZFUykKLSAgICAgICAgbGludC5SdW4oWyctLXJjZmlsZScsIHNlbGYuX3B5bGlu
dHJjXSArIGFyZ3YsIHJlcG9ydGVyPVBhcnNlYWJsZVRleHRSZXBvcnRlcihvdXRwdXQ9b3V0cHV0
KSwgZXhpdD1GYWxzZSkKKyAgICAgICAgbGludC5SdW4oWyctLWlnbm9yZWQtY2xhc3Nlcz1fc29j
a2V0b2JqZWN0JywgJy0tcmNmaWxlJywgc2VsZi5fcHlsaW50cmNdICsgYXJndiwgcmVwb3J0ZXI9
UGFyc2VhYmxlVGV4dFJlcG9ydGVyKG91dHB1dD1vdXRwdXQpLCBleGl0PUZhbHNlKQogICAgICAg
ICByZXR1cm4gb3V0cHV0CiAKIApJbmRleDogVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC91bml4TG9n
Z2luZ1BpcGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC91bml4TG9n
Z2luZ1BpcGVzLmgJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC91bml4
TG9nZ2luZ1BpcGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAgICAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworbmFtZXNwYWNlIFdUUiB7CisKK3ZvaWQgc2V0dXBVbml4TG9nZ2luZ1BpcGVzKCk7Cit2b2lk
IHRlYXJkb3duVW5peExvZ2dpbmdQaXBlcygpOworCit9CkluZGV4OiBUb29scy9UZXN0UnVubmVy
U2hhcmVkL3VuaXhMb2dnaW5nUGlwZXMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFJ1bm5l
clNoYXJlZC91bml4TG9nZ2luZ1BpcGVzLm1tCShub25leGlzdGVudCkKKysrIFRvb2xzL1Rlc3RS
dW5uZXJTaGFyZWQvdW5peExvZ2dpbmdQaXBlcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAidW5peExvZ2dpbmdQaXBlcy5oIgorCisjaW1w
b3J0IDxuZXRkYi5oPgorI2ltcG9ydCA8c3lzL3VuLmg+CisKK25hbWVzcGFjZSBXVFIgeworCitz
dGF0aWMgY29uc3QgaW50IFNURElOX0lOREVYID0gMDsKK3N0YXRpYyBjb25zdCBpbnQgU1RET1VU
X0lOREVYID0gMTsKK3N0YXRpYyBjb25zdCBpbnQgU1RERVJSX0lOREVYID0gMjsKK3N0YXRpYyBj
b25zdCBpbnQgTlVNX1NPQ0tFVFMgPSAzOworICAgIAorc3RhdGljIGludCBzb2NrZXRzW05VTV9T
T0NLRVRTXTsKK3N0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfdW4gYWRkcmVzc1tOVU1fU09DS0VUU107
CitzdGF0aWMgRklMRSogb2xkRmlsZXNbTlVNX1NPQ0tFVFNdOworc3RhdGljIEZJTEUqKiBmaWxl
c1tOVU1fU09DS0VUU107CisKK3ZvaWQgc2V0dXBVbml4TG9nZ2luZ1BpcGVzKCkKK3sKKyAgICBj
b25zdCBjaGFyKiBpZGVudGlmaWVyID0gZ2V0ZW52KCJJUENfSURFTlRJRklFUiIpOworICAgIGNv
bnN0IGNoYXIgKnNvY2tldFBhdGhzWzNdOworICAgIHNvY2tldFBhdGhzW1NURElOX0lOREVYXSA9
IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIi90bXAvJXNfSU4iLCBpZGVudGlmaWVyXSBV
VEY4U3RyaW5nXTsKKyAgICBzb2NrZXRQYXRoc1tTVERPVVRfSU5ERVhdID0gW1tOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiL3RtcC8lc19PVVQiLCBpZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsK
KyAgICBzb2NrZXRQYXRoc1tTVERFUlJfSU5ERVhdID0gW1tOU1N0cmluZyBzdHJpbmdXaXRoRm9y
bWF0OkAiL3RtcC8lc19FUlJPUiIsIGlkZW50aWZpZXJdIFVURjhTdHJpbmddOworCisgICAgZmls
ZXNbU1RESU5fSU5ERVhdID0gJnN0ZGluOworICAgIGZpbGVzW1NURE9VVF9JTkRFWF0gPSAmc3Rk
b3V0OworICAgIGZpbGVzW1NUREVSUl9JTkRFWF0gPSAmc3RkZXJyOworICAgIAorICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgTlVNX1NPQ0tFVFM7ICsraSkgeworICAgICAgICBzb2NrZXRzW2ldID0g
c29ja2V0KEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwKTsKKyAgICAgICAgbWVtc2V0KChjaGFyKikg
JmFkZHJlc3NbaV0sIDAsIHNpemVvZihhZGRyZXNzW2ldKSk7CisgICAgICAgIGFkZHJlc3NbaV0u
c3VuX2ZhbWlseSA9IEFGX1VOSVg7CisgICAgICAgIHN0cm5jcHkoYWRkcmVzc1tpXS5zdW5fcGF0
aCwgc29ja2V0UGF0aHNbaV0sIHNpemVvZihhZGRyZXNzW2ldLnN1bl9wYXRoKSk7CisgICAgICAg
IAorICAgICAgICBpZiAoOjpjb25uZWN0KHNvY2tldHNbaV0sIChzdHJ1Y3Qgc29ja2FkZHIqKSAm
YWRkcmVzc1tpXSwgc2l6ZW9mKGFkZHJlc3NbaV0pKSA8IDApCisgICAgICAgICAgICBhYm9ydCgp
OworICAgICAgICBvbGRGaWxlc1tpXSA9ICpmaWxlc1tpXTsKKyAgICAgICAgZmZsdXNoKG9sZEZp
bGVzW2ldKTsKKyAgICAgICAgaWYgKGkgPT0gU1RESU5fSU5ERVgpCisgICAgICAgICAgICAqZmls
ZXNbaV0gPSBmZG9wZW4oc29ja2V0c1tpXSwgInJiIik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICpmaWxlc1tpXSA9IGZkb3Blbihzb2NrZXRzW2ldLCAid2IiKTsKKyAgICAgICAgc2V0bGlu
ZWJ1ZigqZmlsZXNbaV0pOworICAgIH0KKyAgICBmcHJpbnRmKHN0ZGVyciwgIiNQSUQ6ICVkXG4i
LCBnZXRwaWQoKSk7Cit9CisKK3ZvaWQgdGVhcmRvd25Vbml4TG9nZ2luZ1BpcGVzKCkKK3sKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9TT0NLRVRTOyArK2kpIHsKKyAgICAgICAgZmZsdXNo
KCpmaWxlc1tpXSk7CisgICAgICAgIGZjbG9zZSgqZmlsZXNbaV0pOworICAgICAgICAKKyAgICAg
ICAgc2h1dGRvd24oc29ja2V0c1tpXSwgU0hVVF9SRFdSKTsKKyAgICAgICAgOjpjbG9zZShzb2Nr
ZXRzW2ldKTsKKyAgICAgICAgKmZpbGVzW2ldID0gb2xkRmlsZXNbaV07CisgICAgfQorfQorCit9
CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1dl
YktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA5ODg2
KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDcgQEAKIAkJMkU2M0VE
QTExODkxQjI5MTAwMkE3QUZDIC8qIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTYzRUQ3ODE4OTFBQ0U5
MDAyQTdBRkMgLyogQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbSAqLzsgfTsKIAkJMkU2M0VE
QTYxODkxQkRDMDAwMkE3QUZDIC8qIFRlc3RSdW5uZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNDOTk4MTcxMUQzRjUxRTAwMTdCQ0EyIC8qIFRl
c3RSdW5uZXIuY3BwICovOyB9OwogCQkyRTc0OUJGMjE4OTFFQkZBMDA3RkMxNzUgLyogRXZlbnRT
ZW5kZXJQcm94eUlPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJFNjNFRDdBMTg5MUFDRTkwMDJBN0FGQyAvKiBFdmVudFNlbmRlclByb3h5SU9TLm1t
ICovOyB9OworCQkzMUIwOUNDNDFFMDMzNTMwMDA2RjRFNEQgLyogdW5peExvZ2dpbmdQaXBlcy5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxQjA5Q0Mz
MUUwMzM0NDAwMDZGNEU0RCAvKiB1bml4TG9nZ2luZ1BpcGVzLm1tICovOyB9OwogCQk1MTA1OEFE
NTFENjc4ODIwMDA5QTUzOEMgLyogbGliV2ViQ29yZVRlc3RTdXBwb3J0LmR5bGliIGluIEZyYW1l
d29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDEyMzBFMTYxMzhDNzhC
RjAwQkNDRkNBIC8qIGxpYldlYkNvcmVUZXN0U3VwcG9ydC5keWxpYiAqLzsgfTsKIAkJNTEwNThB
RDYxRDY3ODgyNTAwOUE1MzhDIC8qIFdlYktpdC5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjUxNjlDQTE0NDUyMjJEMDBFMEE5RDcg
LyogV2ViS2l0LmZyYW1ld29yayAqLzsgfTsKIAkJNTY0MUUyRDAxNDMzNUU5NTAwODMwN0U1IC8q
IEpTVGV4dElucHV0Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1NjQxRTJDRTE0MzM1RTk1MDA4MzA3RTUgLyogSlNUZXh0SW5wdXRD
b250cm9sbGVyLmNwcCAqLzsgfTsKQEAgLTI1Niw2ICsyNTcsOCBAQAogCQkyRUU1MkQxNjE4OTBB
OUZCMDAxMEVEMjEgLyogbWFpbklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgbmFtZSA9IG1haW5JT1MubW07IHBhdGggPSAuLi9pb3MvbWFpbklPUy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzExMEJFMEYxNUJBMDExNDAwRDIxNkFDIC8qIFdlYk5vdGlm
aWNhdGlvblByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYk5vdGlmaWNhdGlvblByb3ZpZGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxNjRDOEVGMTVEMUFEQTEwMEVGMUZF
MCAvKiBXZWJOb3RpZmljYXRpb25Qcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXZWJOb3RpZmljYXRpb25Qcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTMxQjA5Q0MyMUUwMzM0NDAwMDZGNEU0RCAvKiB1bml4TG9nZ2luZ1Bp
cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IHVuaXhMb2dnaW5nUGlwZXMu
aDsgcGF0aCA9IC4uL1Rlc3RSdW5uZXJTaGFyZWQvdW5peExvZ2dpbmdQaXBlcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzMUIwOUNDMzFFMDMzNDQwMDA2RjRFNEQgLyogdW5peExv
Z2dpbmdQaXBlcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IHVu
aXhMb2dnaW5nUGlwZXMubW07IHBhdGggPSAuLi9UZXN0UnVubmVyU2hhcmVkL3VuaXhMb2dnaW5n
UGlwZXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3OEQ0NDIyMTMzNDZEMDAw
MDZBNzc3QiAvKiBjb25maWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY29uZmlnLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQxMjMwRTE2MTM4Qzc4QkYwMEJDQ0ZDQSAvKiBsaWJXZWJDb3Jl
VGVzdFN1cHBvcnQuZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmR5bGliIjsgcGF0aCA9IGxpYldlYkNvcmVUZXN0
U3VwcG9ydC5keWxpYjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNDE4
MTczMUIxMzhBRDM5RDAwNTdBQUE0IC8qIFdlYkNvcmVUZXN0U3VwcG9ydC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJDb3JlVGVzdFN1cHBvcnQuaDsgcGF0aCA9IFdlYkNv
cmVUZXN0U3VwcG9ydC9XZWJDb3JlVGVzdFN1cHBvcnQuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BS
T0RVQ1RTX0RJUjsgfTsKQEAgLTQ1Niw2ICs0NTksOCBAQAogCQkwRjE4RTcxQTFENkJDNEJDMDAy
N0U1NDcgLyogVGVzdFJ1bm5lclNoYXJlZCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCisJCQkJMzFCMDlDQzIxRTAzMzQ0MDAwNkY0RTREIC8qIHVuaXhMb2dnaW5n
UGlwZXMuaCAqLywKKwkJCQkzMUIwOUNDMzFFMDMzNDQwMDA2RjRFNEQgLyogdW5peExvZ2dpbmdQ
aXBlcy5tbSAqLywKIAkJCQkwRjE4RTcxQjFENkJDNEU2MDAyN0U1NDcgLyogQmluZGluZ3MgKi8s
CiAJCQkJMEY3M0I1NDcxQkE3ODJGRTAwNEIzRUY0IC8qIFVJU2NyaXB0Q29udGV4dCAqLywKIAkJ
CSk7CkBAIC05NTMsNiArOTU4LDcgQEAKIAkJCQkyRTc0OUJGMjE4OTFFQkZBMDA3RkMxNzUgLyog
RXZlbnRTZW5kZXJQcm94eUlPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGRUJGODVBMUJCNjFE
RjIwMDI4NzIyRCAvKiBISURFdmVudEdlbmVyYXRvci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJF
NjNFRDk0MTg5MUFEQUQwMDJBN0FGQyAvKiBtYWluSU9TLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJ
MzFCMDlDQzQxRTAzMzUzMDAwNkY0RTREIC8qIHVuaXhMb2dnaW5nUGlwZXMubW0gaW4gU291cmNl
cyAqLywKIAkJCQkyRTYzRUQ5MTE4OTFBREFEMDAyQTdBRkMgLyogUGxhdGZvcm1XZWJWaWV3SU9T
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkU2M0VEOTIxODkxQURBRDAwMkE3QUZDIC8qIFRlc3RD
b250cm9sbGVySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwpJbmRleDogVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0JKHJldmlzaW9uIDIwOTg4
NikKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiwxMSArMjYsMTMgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2lt
cG9ydCAiVGVzdENvbnRyb2xsZXIuaCIKIAorCiAjaW1wb3J0ICJQbGF0Zm9ybVdlYlZpZXcuaCIK
ICNpbXBvcnQgIlRlc3RJbnZvY2F0aW9uLmgiCiAjaW1wb3J0ICJUZXN0UnVubmVyV0tXZWJWaWV3
LmgiCiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPFVJS2l0L1VJ
S2l0Lmg+CisjaW1wb3J0ICJ1bml4TG9nZ2luZ1BpcGVzLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tQ
cmVmZXJlbmNlc1JlZlByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1Byb2Nlc3NQb29sUHJp
dmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLU3RyaW5nQ0YuaD4KQEAgLTQ3LDIxICs0OSwxMiBA
QCB2b2lkIFRlc3RDb250cm9sbGVyOjpub3RpZnlEb25lKCkKIAogdm9pZCBUZXN0Q29udHJvbGxl
cjo6cGxhdGZvcm1Jbml0aWFsaXplKCkKIHsKLSAgICBjb25zdCBjaGFyKiBpZGVudGlmaWVyID0g
Z2V0ZW52KCJJUENfSURFTlRJRklFUiIpOwotICAgIGNvbnN0IGNoYXIgKnN0ZGluUGF0aCA9IFtb
TlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIi90bXAvJXNfSU4iLCBpZGVudGlmaWVyXSBVVEY4
U3RyaW5nXTsKLSAgICBjb25zdCBjaGFyICpzdGRvdXRQYXRoID0gW1tOU1N0cmluZyBzdHJpbmdX
aXRoRm9ybWF0OkAiL3RtcC8lc19PVVQiLCBpZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsKLSAgICBj
b25zdCBjaGFyICpzdGRlcnJQYXRoID0gW1tOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiL3Rt
cC8lc19FUlJPUiIsIGlkZW50aWZpZXJdIFVURjhTdHJpbmddOwotCi0gICAgaW50IGluZmQgPSBv
cGVuKHN0ZGluUGF0aCwgT19SRFdSKTsKLSAgICBkdXAyKGluZmQsIFNURElOX0ZJTEVOTyk7Ci0g
ICAgaW50IG91dGZkID0gb3BlbihzdGRvdXRQYXRoLCBPX1JEV1IpOwotICAgIGR1cDIob3V0ZmQs
IFNURE9VVF9GSUxFTk8pOwotICAgIGludCBlcnJmZCA9IG9wZW4oc3RkZXJyUGF0aCwgT19SRFdS
IHwgT19OT05CTE9DSyk7Ci0gICAgZHVwMihlcnJmZCwgU1RERVJSX0ZJTEVOTyk7CisgICAgc2V0
dXBVbml4TG9nZ2luZ1BpcGVzKCk7CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3Jt
RGVzdHJveSgpCiB7CisgICAgdGVhcmRvd25Vbml4TG9nZ2luZ1BpcGVzKCk7CiB9CiAKIHZvaWQg
VGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemVJbmplY3RlZEJ1bmRsZVBhdGgoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297325</attachid>
            <date>2016-12-16 10:43:04 -0800</date>
            <delta_ts>2016-12-16 11:21:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165927-20161216104210.patch</filename>
            <type>text/plain</type>
            <size>99862</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIwOTkxOCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEzMyBAQAorMjAxNi0xMi0xNSAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5j
b20+CisKKyAgICAgICAgUmVtb3ZpbmcgTGF5b3V0VGVzdFJlbGF5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU5MjcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0R1bXBSZW5k
ZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZGVkIHVuaXhMb2dnaW5nUGlwZXMu
aCBhbmQgLm1tIHRvIER1bXBSZW5kZXJUcmVlLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21h
Yy9EdW1wUmVuZGVyVHJlZS5tbTogQWRkZWQgY2FsbCB0byBzZXR1cFVuaXhMb2dnaW5nUGlwZXMo
KSBhbmQgdGVhcmRvd25Vbml4TG9nZ2luZ1BpcGVzKCkgZm9yIGlPUy4KKyAgICAgICAgKGR1bXBS
ZW5kZXJUcmVlKTogCisgICAgICAgICogTGF5b3V0VGVzdFJlbGF5OiBSZW1vdmVkLgorICAgICAg
ICAqIE1ha2VmaWxlOgorICAgICAgICAqIFNjcmlwdHMvYnVpbGQtbGF5b3V0dGVzdHJlbGF5OiBS
ZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvYnVpbGQtd2Via2l0OiBSZW1vdmVkIHJlZmVyZW5j
ZSB0byBMYXlvdXRUZXN0UmVsYXkuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24v
aXBjX3BpcGUucHk6IEFkZGVkLgorICAgICAgICAoVW5peFBpcGVTZXJ2ZXIpOiBBIHNlcnZlci1z
aWRlIFVuaXggcGlwZSBhYnN0cmFjdGlvbiB1c2VkIHRvIHNlbmQgZGF0YSBvdmVyIGEgQUZfVU5J
WCBzdHJlYW1pbmcgc29ja2V0LgorICAgICAgICAoQWJzdHJhY3RQaXBlKTogQWJzdHJhY3Rpb24g
Zm9yIHJlYWRpbmcgZnJvbS93cml0aW5nIHRvIHN0ZGluLCBzdGRvdXQgYW5kIHN0ZGVyci4KKyAg
ICAgICAgKEFic3RyYWN0UGlwZS5jbGVhbik6IENsZWFycyB0aGUgc3Rkb3V0IGFuZCBzdGRlcnIg
c3RyZWFtcyB0byBwcmVzZXJ2ZSBtZW1vcnkuCisgICAgICAgIChBYnN0cmFjdFBpcGUuX3BhcnNl
TWVzc2FnZSk6IEV4cGVjdGVkIHRvIGJlIG92ZXJyaWRkZW4gYnkgY2hpbGQgY2xhc3Nlcy4gIEFk
ZHMgZGF0YSB0byBzdGRvdXQgYW5kIHN0ZGVyciBzdHJlYW1zLgorICAgICAgICAoQWJzdHJhY3RQ
aXBlLnJlYWRMaW5lKTogUmVhZCB0aGUgbmV4dCBsaW5lLCByZWFkIHN0ZGVyciBiZWZvcmUgc3Rk
b3V0LgorICAgICAgICAoQWJzdHJhY3RQaXBlLnN0ZG91dFJlYWQpOiBSZWFkIGEgbGluZSBmcm9t
IHN0ZG91dCwgY2FsbHMgX3BhcnNlTWVzc2FnZS4KKyAgICAgICAgKEFic3RyYWN0UGlwZS5zdGRl
cnJSZWFkKTogUmVhZCBhIGxpbmUgZnJvbSBzdGRlcnIsIGNhbGxzIF9wYXJzZU1lc3NhZ2UuCisg
ICAgICAgIChBYnN0cmFjdFBpcGUucmVhZEJ1ZmZlclN0ZG91dCk6IFJlYWQgZXZlcnl0aGluZyBp
biB0aGUgc3Rkb3V0IGJ1ZmZlci4KKyAgICAgICAgKEFic3RyYWN0UGlwZS5yZWFkQnVmZmVyU3Rk
ZXJyKTogUmVhZCBldmVyeXRoaW5nIGluIHRoZSBzdGRlcnIgYnVmZmVyLgorICAgICAgICAoQWJz
dHJhY3RQaXBlLnJlYWRCbG9ja1N0ZG91dCk6IFJlYWQgYSBibG9jayBvZiBzaXplIGZyb20gc3Rk
b3V0LCBjYWxscyBfcGFyc2VNZXNzYWdlLgorICAgICAgICAoQWJzdHJhY3RQaXBlLnJlYWRCbG9j
a1N0ZGVycik6IFJlYWQgYSBibG9jayBvZiBzaXplIGZyb20gc3RkZXJyLCBjYWxscyBfcGFyc2VN
ZXNzYWdlLgorICAgICAgICAoVW5peFBpcGUpOiBJbmhlcml0cyBmcm9tIEFic3RyYWN0UGlwZSwg
dXNlcyB0aHJlZSBVbml4IHBpcGVzIGFzIHN0ZGluLCBzdGRvdXQgYW5kIHN0ZGVyci4KKyAgICAg
ICAgKFVuaXhQaXBlLl9faW5pdF9fKTogT3BlbnMgYWxsIDMgVW5peCBwaXBlcyBhbmQgYmVnaW5z
IGxpc3RlbmluZyBmb3IgY29ubmVjdGlvbnMuCisgICAgICAgIChVbml4UGlwZS5jb25uZWN0KTog
V2FpdCBmb3IgY29ubmVjdGlvbnMgb24gYWxsIDMgVW5peCBwaXBlcywgcmV0dXJuIGNvbm5lY3Rp
b24gc3RhdHVzLgorICAgICAgICAoVW5peFBpcGUuY2xvc2UpOiBEaXNjb25uZWN0IGFsbCAzIFVu
aXggcGlwZXMuCisgICAgICAgIChVbml4UGlwZS5zZW5kKTogU2VuZCBtZXNzYWdlIHRocm91Z2gg
c3RkaW4gcGlwZS4KKyAgICAgICAgKFVuaXhQaXBlLl9wYXJzZU1lc3NhZ2UpOiBBdHRlbXB0IHRv
IHJlYWQgZnJvbSBib3RoIHN0ZG91dCBhbmQgc3RkZXJyIFVuaXggcGlwZXMuCisgICAgICAgIChV
bml4UGlwZS5oYW5kbGVfaW50ZXJydXB0KTogTmVlZGVkIGR1cmluZyBjcmFzaGVzLgorICAgICAg
ICAoUHJvY2Vzc1BpcGUpOiAKKyAgICAgICAgKFByb2Nlc3NQaXBlLl9faW5pdF9fKToKKyAgICAg
ICAgKFByb2Nlc3NQaXBlLnBpZCk6CisgICAgICAgIChQcm9jZXNzUGlwZS5pc0Nvbm5lY3RlZCk6
CisgICAgICAgIChQcm9jZXNzUGlwZS5oYW5kbGVfaW50ZXJydXB0KToKKyAgICAgICAgKFByb2Nl
c3NQaXBlLmNsb3NlKToKKyAgICAgICAgKFByb2Nlc3NQaXBlLnNlbmQpOgorICAgICAgICAoUHJv
Y2Vzc1BpcGUuX3VuaXhzdGRCbG9jayk6CisgICAgICAgIChQcm9jZXNzUGlwZS5fdW5peGVyckJs
b2NrKToKKyAgICAgICAgKFByb2Nlc3NQaXBlLl93aW4zMk5vbkJsb2NraW5nUmVhZCk6CisgICAg
ICAgIChQcm9jZXNzUGlwZS5fd2luMzJzdGRCbG9jayk6CisgICAgICAgIChQcm9jZXNzUGlwZS5f
d2luMzJlcnJCbG9jayk6CisgICAgICAgIChQcm9jZXNzUGlwZS5fcGFyc2VNZXNzYWdlKToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9pcGNfcGlwZV90ZXN0Y2FzZS5weTogQWRk
ZWQuCisgICAgICAgIChEdW1teVByb2Nlc3NQaXBlKTogUHJvY2VzcyBwaXBlIHVzZWQgZm9yIHRl
c3RpbmcuCisgICAgICAgIChVbml4UGlwZUNsaWVudCk6IFVuaXggcGlwZSBjbGllbnQgdXNlZCB0
byB0ZXN0IFVuaXhQaXBlU2VydmVyIGFuZCBVbml4UGlwZSBjbGFzc2VzLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvY29tbW9uL2lwY19waXBlX3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAg
ICAgKFVuaXhQaXBlQ2xpZW50VGVzdGluZ1RocmVhZCk6IEZ1bmN0aW9uIHVzZWQgZm9yIHRlc3Rp
bmcgY2xpZW50L3NlcnZlciBhcmNoaXRlY3R1cmVzLgorICAgICAgICAoaXBjUGlwZVRlc3QpOiBV
bml0IHRlc3RzIGZvciBjbGFzc2VzIGluIGlwY19waXBlLnB5LgorICAgICAgICAoaXBjUGlwZVRl
c3QudGVzdF9hYnN0cmFjdHBpcGVfc3Rkb3V0KTogVGVzdCBzdGRvdXQgc3RyZWFtIGluIHRoZSBh
YnN0cmFjdCBwaXBlLgorICAgICAgICAoaXBjUGlwZVRlc3QudGVzdF9hYnN0cmFjdHBpcGVfc3Rk
ZXJyKTogVGVzdCBzdGRlcnIgc3RyZWFtIGluIHRoZSBhYnN0cmFjdCBwaXBlLgorICAgICAgICAo
aXBjUGlwZVRlc3QudGVzdF9hYnN0cmFjdHBpcGVfZHVlbF9zdHJlYW1zKTogRW5zdXJlIHN0ZG91
dCBhbmQgc3RkZXJyIGRvIG5vdCBtaW5nbGUuCisgICAgICAgIChpcGNQaXBlVGVzdC50ZXN0X2Fi
c3RyYWN0cGlwZV9zdGRvdXRibG9jayk6IFRlc3QgcmVhZGluZyBhIGRhdGEgYmxvY2sgZnJvbSBz
dGRvdXQuCisgICAgICAgIChpcGNQaXBlVGVzdC50ZXN0X2Fic3RyYWN0cGlwZV9zdGRlcnJibG9j
ayk6IFRlc3QgcmVhZGluZyBhIGRhdGEgYmxvY2sgZnJvbSBzdGRlcnIuCisgICAgICAgIChpcGNQ
aXBlVGVzdC50ZXN0X3VuaXhQaXBlU2VydmVyKTogVGVzdCB0aGUgVW5peFBpcGVTZXJ2ZXIgd2l0
aCBhIFVuaXhQaXBlQ2xpZW50LgorICAgICAgICAoaXBjUGlwZVRlc3QudGVzdF91bml4UGlwZSk6
IFRlc3QgYWxsIHRocmVlIHN0cmVhbXMgb2YgdGhlIFVuaXhQaXBlIGNsYXNzLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5OgorICAgICAgICAoUG9ydC50by5kZXZpY2VE
ZWZpbmVkKTogRnVuY3Rpb24gdG8gYmUgb3ZlcnJpZGRlbiBieSBpT1MgY2xhc3Nlcy4KKyAgICAg
ICAgKFBvcnQudG8ucnVuT25EZXZpY2UpOiBGdW5jdGlvbiB0byBiZSBvdmVycmlkZGVuIGJ5IGlP
UyBjbGFzc2VzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlX3VuaXR0ZXN0
LnB5OgorICAgICAgICAodGVzdF9kZXZpY2UpOiBUZXN0IHRoYXQsIGluIHRoZSBnZW5lcmFsIGNh
c2UsIGRldmljZXMgYXJlIHVuZGVmaW5lZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvZGFyd2luLnB5OgorICAgICAgICAoRGFyd2luUG9ydC5leHRyYWN0QnVuZGxlSUQpOiBTZWFy
Y2ggYW4gYXBwIGJ1bmRsZSBmb3IgYSBwbGlzdCBhbmQgYnVuZGxlIElELgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW5fdGVzdGNhc2UucHk6CisgICAgICAgIChEYXJ3aW5U
ZXN0LnRlc3RfcGxpc3QpOiBUZXN0IHBsaXN0IGFjY2VzcyBieSBjcmVhdGluZyBhIHRlbXBvcmFy
eSBwbGlzdCB0byByZWFkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIu
cHk6CisgICAgICAgIChEcml2ZXIuX19pbml0X18pOgorICAgICAgICAoRHJpdmVyLnJ1bl90ZXN0
KTogQ2xlYXIgc3RyZWFtcyB3aXRoIGNsZWFuIGJlZm9yZSBydW5uaW5nIGEgdGVzdC4KKyAgICAg
ICAgKERldmljZURyaXZlcik6IENoYW5nZWQgZnJvbSBJT1NTaW11bGF0b3JEcml2ZXIuCisgICAg
ICAgIChEZXZpY2VEcml2ZXIuY21kX2xpbmUpOiBQYXNzICdydW4tb24tZGV2aWNl4oCZLCB3aGlj
aCBpcyByZWNvZ25pemVkIGJ5IHRoZSBzZXJ2ZXJfcHJvY2VzcyBjbGFzcy4KKyAgICAgICAgKERl
dmljZURyaXZlci5fc2V0dXBfZW52aXJvbl9mb3JfZHJpdmVyKTogQ2hhbmdlZCBmcm9tIElPU1Np
bXVsYXRvckRyaXZlci4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5Ogor
ICAgICAgICAoSU9TQmFzZSk6IEJhc2UgY2xhc3MgZm9yIElPU1BvcnQgYW5kIElPU1NpbXVsYXRv
ciBwb3J0LgorICAgICAgICAoSU9TQmFzZS5kcml2ZXJfbmFtZSk6IEFjY2VzcyBjdXJyZW50IGFw
cCBuYW1lLgorICAgICAgICAoSU9TQmFzZS5fZ2V0X2NyYXNoX2xvZyk6IE1vdmVkIGZyb20gSU9T
U2ltdWxhdG9yUG9ydC4KKyAgICAgICAgKElPU0Jhc2UuX3Rlc3RpbmdfZGV2aWNlKTogQWNjZXNz
IGRldmljZXMgYnkgaW5kZXguCisgICAgICAgIChJT1NCYXNlLmRldmljZV9pZF9mb3Jfd29ya2Vy
X251bWJlcik6IE1vdmVkIGZyb20gSU9TU2ltdWxhdG9yUG9ydC4KKyAgICAgICAgKElPU0Jhc2Uu
X2RyaXZlcl9jbGFzcyk6IE1vdmVkIGZyb20gSU9TU2ltdWxhdG9yUG9ydC4KKyAgICAgICAgKElP
U0Jhc2UuZGV2aWNlRGVmaW5lZCk6IFRydWUgZm9yIGFsbCBJT1MgY2xhc3Nlcy4KKyAgICAgICAg
KElPU0Jhc2UuX2RldmljZVBpbmcpOiBGdW5jdGlvbiB0byB0ZXN0IGlmIGEgZGV2aWNlIGlzIG9u
LgorICAgICAgICAoSU9TQmFzZS5fZGV2aWNlSW5zdGFsbCk6IEluc3RhbGwgYXBwIHRvIGRldmlj
ZS4KKyAgICAgICAgKElPU0Jhc2UuX2RldmljZVJ1bik6IFJ1biBhcHAgb24gZGV2aWNlLgorICAg
ICAgICAoSU9TQmFzZS5fZGV2aWNlS2lsbCk6IFNodXRkb3duIGFwcCBvbiBkZXZpY2UuCisgICAg
ICAgIChJT1NCYXNlLnJ1bk9uRGV2aWNlKTogUnVuIGNvbW1hbmQgb24gZGV2aWNlLgorICAgICAg
ICAoSU9TUG9ydCk6IENsYXNzIGRlc2lnbmVkIGZvciBydW5uaW5nIG9uIGRldmljZS4KKyAgICAg
ICAgKElPU1NpbXVsYXRvclBvcnQpOgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fZGV2aWNl
UGluZyk6IENoZWNrIGlmIHRoZSB0YXJnZXRlZCBzaW11bGF0b3IgaXMgYm9vdGVkLgorICAgICAg
ICAoSU9TU2ltdWxhdG9yUG9ydC5fZGV2aWNlSW5zdGFsbCk6IEluc3RhbGwgYXBwIHRvIHNpbXVs
YXRvci4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX2RldmljZVJ1bik6IFJ1biBpbnN0YWxs
ZWQgYXBwIG9uIHRhcmdldGVkIHNpbXVsYXRvci4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQu
X2RldmljZUtpbGwpOiBTaHV0ZG93biBhcHAgb24gdGFyZ2V0ZWQgc2ltdWxhdG9yLgorICAgICAg
ICAoSU9TU2ltdWxhdG9yUG9ydC5yZWxheV9wYXRoKTogUmVtb3ZlZCBMYXlvdXRUZXN0UmVsYXku
CisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9jaGVja19yZWxheSk6IFJlbW92ZWQgTGF5b3V0
VGVzdFJlbGF5LgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IE1v
dmVkIHRvIElPU0Jhc2UuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9idWlsZF9yZWxheSk6
IFJlbW92ZWQgTGF5b3V0VGVzdFJlbGF5LgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fZHJp
dmVyX2NsYXNzKTogTW92ZWQgdG8gSU9TQmFzZS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3BvcnQvaW9zX3VuaXR0ZXN0LnB5OgorICAgICAgICAoSU9TVGVzdCk6IFRlc3RzIGZ1bmN0aW9u
YWxpdHkgdW5pcXVlIHRvIHRoZSBJT1NQb3J0IGNsYXNzLgorICAgICAgICAoSU9TU2ltdWxhdG9y
VGVzdCk6IFRlc3RzIGZ1bmN0aW9uYWxpdHkgdW5pcXVlIHRvIHRoZSBJT1NTaW11bGF0b3IgY2xh
c3MuCisgICAgICAgIChpb3NUZXN0KTogTW92ZWQgdG8gZWl0aGVyIElPU1NpbXVsYXRvclRlc3Qg
b3IgSU9TQmFzZVRlc3QuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc2Jhc2Vf
dGVzdGNhc2UucHk6IEFkZGVkLgorICAgICAgICAoSU9TQmFzZVRlc3QpOiBUZXN0cyBmdW5jdGlv
bmFsaXR5IHNoYXJlZCBiZXR3ZWVuIElPU1BvcnQgYW5kIElPU1NpbXVsYXRvci4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3MucHk6IE5vdGUgdGhhdCBzb21l
IHByZXZpb3VzIGZ1bmN0aW9uYWxpdHkgb2Ygc2VydmVyX3Byb2Nlc3MgaGFzIGJlZW4gbW92ZWQg
dG8gUHJvY2Vzc1BpcGUuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLl9faW5pdF9fKTogVXNlIF9w
aXBlIGluc3RlYWQgb2YgcHJvYy4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MuY2xlYW4pOiBDbGVh
biBwaXBlIChyZXNldHMgc3RyZWFtIGJ1ZmZlcnMuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLl9y
ZXNldCk6IERlc3Ryb3kgcGlwZSwgbm8gcGlkLgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5fc3Rh
cnQpOiBVc2UgVW5peFBpcGUgZm9yIHJ1bm5pbmcgb24tZGV2aWNlIGFuZCBQcm9jZXNzUGlwZSBv
dGhlcndpc2UuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLnBvbGwpOiBVc2UgaXNDb25uZWN0ZWQg
ZnVuY3Rpb24gb2YgcGlwZXMuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLndyaXRlKTogV3JpdGUg
ZGF0YSB0byBwaXBlLgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5fcG9wX3N0ZG91dF9saW5lX2lm
X3JlYWR5KTogUmVhZCBzdGRvdXQgbGluZSBmcm9tIHBpcGUuCisgICAgICAgIChTZXJ2ZXJQcm9j
ZXNzLl9wb3Bfc3RkZXJyX2xpbmVfaWZfcmVhZHkpOiBSZWFkIHN0ZGVyciBsaW5lIGZyb20gcGlw
ZS4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MucG9wX2FsbF9idWZmZXJlZF9zdGRlcnIpOiBSZWFk
IGFsbCBzdGRlcnIgbGluZXMgZnJvbSBwaXBlLgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5yZWFk
X2VpdGhlcl9zdGRvdXRfb3Jfc3RkZXJyX2xpbmUpOiBSZWFkIGEgbGluZSBmcm9tIGVpdGhlciBz
dHJlYW0gZnJvbSB0aGUgcGlwZS4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MucmVhZF9zdGRvdXQp
OiBSZWFkIGZyb20gc3Rkb3V0IG9mIHBpcGUuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLnN0b3Ap
OiBDbGVhciBidWZmZXJzIGFuZCBzaHV0ZG93biBwaXBlLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzc191bml0dGVzdC5weTogVXNlIHBpcGVzIGluc3RlYWQg
b2YgTW9ja1Byb2MuCisgICAgICAgIChNb2NrRmlsZSk6IFJlcGxhY2VkIE1vY2tGaWxlIHdpdGgg
RHVtbXlQcm9jZXNzUGlwZS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNr
ZXJzL3B5dGhvbi5weToKKyAgICAgICAgKFB5bGludGVyLnJ1bik6IEZpeCBmb3Iga25vd24gaXNz
dWUgd2l0aCBQeWxpbnRlciBhbmQgc29ja2V0cy4KKyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVk
L3VuaXhMb2dnaW5nUGlwZXMuaDogQWRkZWQuCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC91
bml4TG9nZ2luZ1BpcGVzLm1tOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6c2V0dXBVbml4TG9nZ2lu
Z1BpcGVzKTogU2V0cyB1cCBVbml4UGlwZXMgZm9yIElPU1NpbXVsYXRvci4KKyAgICAgICAgKFdU
Ujo6dGVhcmRvd25Vbml4TG9nZ2luZ1BpcGVzKTogVGVhcnMtZG93biB1cCBVbml4UGlwZXMgZm9y
IElPU1NpbXVsYXRvci4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5u
ZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6
OnBsYXRmb3JtSW5pdGlhbGl6ZSk6IEFkZGVkIGNhbGwgdG8gc2V0dXBVbml4TG9nZ2luZ1BpcGVz
KCkgZm9yIGlPUy4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtRGVzdHJv
eSk6IEFkZGVkIGNhbGwgdG8gdGVhcmRvd25Vbml4TG9nZ2luZ1BpcGVzKCkgZm9yIGlPUy4KKwog
MjAxNi0xMi0xNiAgSHVuc2VvcCBKZW9uZyAgPGhzODUuamVvbmdAc2Ftc3VuZy5jb20+CiAKICAg
ICAgICAgW0VGTF0gRGlzYWJsZSBub24tc3JjZGlyIGJ1aWxkcyBmb3IgZmFpbGluZyBsaWJyYXJp
ZXMKSW5kZXg6IFRvb2xzL01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL01ha2VmaWxlCShy
ZXZpc2lvbiAyMDk5MTgpCisrKyBUb29scy9NYWtlZmlsZQkod29ya2luZyBjb3B5KQpAQCAtNyw5
ICs3LDYgQEAgaWZuZXEgKCwkKFNES1JPT1QpKQogCWlmbmVxICgsJChmaW5kc3RyaW5nIGlwaG9u
ZSwkKFNES1JPT1QpKSkKIAkJTU9EVUxFUyArPSBNb2JpbGVNaW5pQnJvd3NlcgogCWVuZGlmCi0J
aWZlcSAoLCQoRE9fTk9UX0JVSUxEX0xBWU9VVF9URVNUX1JFTEFZKSkKLQkJTU9EVUxFUyArPSBM
YXlvdXRUZXN0UmVsYXkKLQllbmRpZgogZW5kaWYKIAogYWxsOgpJbmRleDogVG9vbHMvRHVtcFJl
bmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDk5MTgpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9E
dW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC03OSw2ICs3OSw3IEBACiAJCTJDRTg4RkEyMTcxMjREOEMwMDczNEZDMCAvKiBKYXZhU2NyaXB0
VGhyZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJDRTg4RkExMTcxMjRDRUUwMDczNEZDMCAvKiBKYXZhU2NyaXB0VGhyZWFkaW5nLmNwcCAq
LzsgfTsKIAkJMkQ0MDNGMUIxNTA4NzIwOTAwNTM1OEQyIC8qIExheW91dFRlc3RIZWxwZXIubSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENDAzRUEyMTUw
ODcxNDIwMDUzNThEMiAvKiBMYXlvdXRUZXN0SGVscGVyLm0gKi87IH07CiAJCTMxMTE3QjNEMTVE
OUE1NkEwMDE2M0JDOCAvKiBNb2NrV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTExN0IzQjE1RDlBNTZBMDAx
NjNCQzggLyogTW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLm1tICovOyB9OworCQkzMUIwOUNE
NTFFMDQ1NDA3MDA2RjRFNEQgLyogdW5peExvZ2dpbmdQaXBlcy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxQjA5Q0Q0MUUwNDU0MDQwMDZGNEU0RCAv
KiB1bml4TG9nZ2luZ1BpcGVzLm1tICovOyB9OwogCQk0NDA1OTA3MTEyNjg0NTM4MDBDRkQ0OEQg
LyogV2ViQXJjaGl2ZUR1bXBTdXBwb3J0TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDQwNTkwNzAxMjY4NDUzODAwQ0ZENDhEIC8qIFdlYkFyY2hp
dmVEdW1wU3VwcG9ydE1hYy5tbSAqLzsgfTsKIAkJNDQzNzczMEUxMjVDQkMzNjAwQUFFMDJDIC8q
IFdlYkFyY2hpdmVEdW1wU3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0NEE5OTc4MzBGQ0RFODY0MDA1ODBGMTAgLyogV2ViQXJjaGl2ZUR1
bXBTdXBwb3J0LmNwcCAqLzsgfTsKIAkJNDQ2NENBQkUxQzIwQTA4QjAwRTVCQjU1IC8qIER1bXBS
ZW5kZXJUcmVlQXBwTWFpbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ0NjRDQUJEMUMyMEEwNzAwMEU1QkI1NSAvKiBEdW1wUmVuZGVyVHJlZUFwcE1h
aW4ubW0gKi87IH07CkBAIC0yOTMsNiArMjk0LDggQEAKIAkJMkQ0MDNGMTkxNTA4NzFGOTAwNTM1
OEQyIC8qIExheW91dFRlc3RIZWxwZXIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbklu
ZGV4ID0gMDsgcGF0aCA9IExheW91dFRlc3RIZWxwZXI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9E
VUNUU19ESVI7IH07CiAJCTMxMTE3QjNBMTVEOUE1NkEwMDE2M0JDOCAvKiBNb2NrV2ViTm90aWZp
Y2F0aW9uUHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTW9ja1dl
Yk5vdGlmaWNhdGlvblByb3ZpZGVyLmg7IHBhdGggPSBtYWMvTW9ja1dlYk5vdGlmaWNhdGlvblBy
b3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMTE3QjNCMTVEOUE1NkEw
MDE2M0JDOCAvKiBNb2NrV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBNb2NrV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIubW07
IHBhdGggPSBtYWMvTW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkzMUIwOUNEMzFFMDQ1NDA0MDA2RjRFNEQgLyogdW5peExvZ2dpbmdQ
aXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSB1bml4TG9nZ2luZ1BpcGVz
Lmg7IHBhdGggPSAuLi9UZXN0UnVubmVyU2hhcmVkL3VuaXhMb2dnaW5nUGlwZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzFCMDlDRDQxRTA0NTQwNDAwNkY0RTREIC8qIHVuaXhM
b2dnaW5nUGlwZXMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSB1
bml4TG9nZ2luZ1BpcGVzLm1tOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJlZC91bml4TG9nZ2lu
Z1BpcGVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMkE3MEFBQjAzNzA1RTFG
MDBDOTE3ODMgLyogRHVtcFJlbmRlclRyZWVQcmVmaXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRHVtcFJlbmRlclRyZWVQcmVmaXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMzc1RjA5NzEwREFDM0NCNjAwQzhCNEU1IC8qIFdlYktpdFdlaWdodFdhdGNoZXIx
MDAudHRmICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
ZmlsZTsgbmFtZSA9IFdlYktpdFdlaWdodFdhdGNoZXIxMDAudHRmOyBwYXRoID0gZm9udHMvV2Vi
S2l0V2VpZ2h0V2F0Y2hlcjEwMC50dGY7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3
NUYwOTcyMERBQzNDQjYwMEM4QjRFNSAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyMjAwLnR0ZiAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IG5hbWUg
PSBXZWJLaXRXZWlnaHRXYXRjaGVyMjAwLnR0ZjsgcGF0aCA9IGZvbnRzL1dlYktpdFdlaWdodFdh
dGNoZXIyMDAudHRmOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDczLDYgKzQ3Niw3
IEBACiAJCTA4RkI3Nzk0RkU4NDE1NURDMDJBQUMwNyAvKiBEdW1wUmVuZGVyVHJlZSAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMzFCMDlDRDIxRTA0NTNF
OTAwNkY0RTREIC8qIFRlc3RSdW5uZXJTaGFyZWQgKi8sCiAJCQkJMEYxOEU2RjExRDZCOUM2NDAw
MjdFNTQ3IC8qIERlcml2ZWRTb3VyY2VzLm1ha2UgKi8sCiAJCQkJMEYxOEU2RTcxRDZCOUJGNTAw
MjdFNTQ3IC8qIFVJU2NyaXB0Q29udGV4dCAqLywKIAkJCQlBMTE1OEQ2QTE4OTI3Q0UxMDA4OEMx
N0IgLyogaW9zICovLApAQCAtNzAwLDYgKzcwNCwxNSBAQAogCQkJbmFtZSA9IExheW91dFRlc3RI
ZWxwZXI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQkzMUIwOUNEMjFFMDQ1
M0U5MDA2RjRFNEQgLyogVGVzdFJ1bm5lclNoYXJlZCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3Vw
OworCQkJY2hpbGRyZW4gPSAoCisJCQkJMzFCMDlDRDMxRTA0NTQwNDAwNkY0RTREIC8qIHVuaXhM
b2dnaW5nUGlwZXMuaCAqLywKKwkJCQkzMUIwOUNENDFFMDQ1NDA0MDA2RjRFNEQgLyogdW5peExv
Z2dpbmdQaXBlcy5tbSAqLywKKwkJCSk7CisJCQluYW1lID0gVGVzdFJ1bm5lclNoYXJlZDsKKwkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTQxN0RBOTE4MTM3MzY3NEQwMDdDNTdG
QiAvKiBXZWJDb3JlVGVzdFN1cHBvcnQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKApAQCAtMTEwMCw2ICsxMTEzLDcgQEAKIAkJCQlCQ0QwOEI3MTBFMTA1OUQyMDBB
N0QwQzEgLyogQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0gaW4gU291cmNlcyAqLywKIAkJ
CQk4MDA0NUFFRTE0NzcxOEU3MDA4MjkwQTggLyogQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhh
bmRsZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQkyOUNGQkExMTEyMjczNkU2MDBCQzMwQzAgLyog
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzFCMDlDRDUx
RTA0NTQwNzAwNkY0RTREIC8qIHVuaXhMb2dnaW5nUGlwZXMubW0gaW4gU291cmNlcyAqLywKIAkJ
CQlBOUJCN0M1QzFDNTA1Mjc4MDAyQzUyNUIgLyogQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJJT1Mu
bW0gaW4gU291cmNlcyAqLywKIAkJCQkyOUNGQkEyRTEyMjczQTEwMDBCQzMwQzAgLyogQWNjZXNz
aWJpbGl0eVRleHRNYXJrZXJNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzBFMjRFMTBFMkQ5
NDUxMDAxQjZCQzIgLyogQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywK
SW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0JKHJldmlz
aW9uIDIwOTkxOCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5t
bQkod29ya2luZyBjb3B5KQpAQCAtMTAzLDYgKzEwMyw3IEBACiAjaWYgUExBVEZPUk0oSU9TKQog
I2ltcG9ydCAiRHVtcFJlbmRlclRyZWVCcm93c2VyVmlldy5oIgogI2ltcG9ydCAiVUlLaXRTUEku
aCIKKyNpbXBvcnQgInVuaXhMb2dnaW5nUGlwZXMuaCIKICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVh
cnR6Q29yZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Db3JlR3JhcGhpY3NTUEkuaD4KICNpbXBvcnQg
PFdlYktpdC9XQUtXaW5kb3cuaD4KQEAgLTEyNzIsMTcgKzEyNzMsNyBAQCB2b2lkIHdyaXRlQ3Jh
c2hlZE1lc3NhZ2VPbkZhdGFsRXJyb3IoaW50CiB2b2lkIGR1bXBSZW5kZXJUcmVlKGludCBhcmdj
LCBjb25zdCBjaGFyICphcmd2W10pCiB7CiAjaWYgUExBVEZPUk0oSU9TKQotICAgIGNvbnN0IGNo
YXIqIGlkZW50aWZpZXIgPSBnZXRlbnYoIklQQ19JREVOVElGSUVSIik7Ci0gICAgY29uc3QgY2hh
ciAqc3RkaW5QYXRoID0gW1tOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiL3RtcC8lc19JTiIs
IGlkZW50aWZpZXJdIFVURjhTdHJpbmddOwotICAgIGNvbnN0IGNoYXIgKnN0ZG91dFBhdGggPSBb
W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIvdG1wLyVzX09VVCIsIGlkZW50aWZpZXJdIFVU
RjhTdHJpbmddOwotICAgIGNvbnN0IGNoYXIgKnN0ZGVyclBhdGggPSBbW05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6QCIvdG1wLyVzX0VSUk9SIiwgaWRlbnRpZmllcl0gVVRGOFN0cmluZ107Ci0K
LSAgICBpbnQgaW5mZCA9IG9wZW4oc3RkaW5QYXRoLCBPX1JEV1IpOwotICAgIGR1cDIoaW5mZCwg
U1RESU5fRklMRU5PKTsKLSAgICBpbnQgb3V0ZmQgPSBvcGVuKHN0ZG91dFBhdGgsIE9fUkRXUik7
Ci0gICAgZHVwMihvdXRmZCwgU1RET1VUX0ZJTEVOTyk7Ci0gICAgaW50IGVycmZkID0gb3Blbihz
dGRlcnJQYXRoLCBPX1JEV1IgfCBPX05PTkJMT0NLKTsKLSAgICBkdXAyKGVycmZkLCBTVERFUlJf
RklMRU5PKTsKKyAgICBXVFI6OnNldHVwVW5peExvZ2dpbmdQaXBlcygpOwogI2VuZGlmCiAKICAg
ICBzaWduYWwoU0lHSUxMLCAmd3JpdGVDcmFzaGVkTWVzc2FnZU9uRmF0YWxFcnJvcik7CkBAIC0x
MzQzLDkgKzEzMzQsNyBAQCB2b2lkIGR1bXBSZW5kZXJUcmVlKGludCBhcmdjLCBjb25zdCBjaGFy
CiAgICAgfQogCiAjaWYgUExBVEZPUk0oSU9TKQotICAgIGNsb3NlKGluZmQpOwotICAgIGNsb3Nl
KG91dGZkKTsKLSAgICBjbG9zZShlcnJmZCk7CisgICAgV1RSOjp0ZWFyZG93blVuaXhMb2dnaW5n
UGlwZXMoKTsKICNlbmRpZgogfQogCkluZGV4OiBUb29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAkocmV2aXNpb24gMjA5OTE4
KQorKysgVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQJKHdvcmtpbmcgY29weSkKQEAgLTIwMCwx
MCArMjAwLDYgQEAgaWYgKGlzQXBwbGVNYWNXZWJLaXQoKSkgewogICAgICAgICBwdXNoIEBjb3B5
TGlicmFyaWVzQXJncywgcHJvZHVjdERpcigpOwogICAgICAgICBwcmludChqb2luKCIgIiwgQGNv
cHlMaWJyYXJpZXNBcmdzKSAuICJcbiIpOwogICAgICAgICAoc3lzdGVtKEBjb3B5TGlicmFyaWVz
QXJncykgPT0gMCkgb3IgZGllOwotCi0gICAgICAgIGlmICh3aWxsVXNlSU9TU2ltdWxhdG9yU0RL
KCkpIHsKLSAgICAgICAgICAgIChzeXN0ZW0oInBlcmwiLCAiVG9vbHMvU2NyaXB0cy9idWlsZC1s
YXlvdXR0ZXN0cmVsYXkiLCBhcmd1bWVudHNGb3JDb25maWd1cmF0aW9uKCkpID09IDApIG9yIGRp
ZTsKLSAgICAgICAgfQogICAgIH0KIAogICAgICMgQnVpbGQgVG9vbHMgbmVlZGVkIGZvciBBcHBs
ZSBwb3J0cwpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vaXBjX3BpcGUucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vaXBjX3BpcGUucHkJ
KG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vaXBjX3BpcGUu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MjEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBlcnJubworaW1wb3J0IGlvCitpbXBvcnQgb3MKK2lt
cG9ydCBRdWV1ZQoraW1wb3J0IHNlbGVjdAoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHN5cworaW1w
b3J0IHRpbWUKKworaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgorICAgIGltcG9y
dCBtc3ZjcnQKKyAgICBpbXBvcnQgd2luMzJwaXBlCisgICAgaW1wb3J0IHdpbjMyZmlsZQorZWxz
ZToKKyAgICBpbXBvcnQgZmNudGwKKyAgICBpbXBvcnQgc29ja2V0CisKKworY2xhc3MgVW5peFBp
cGVTZXJ2ZXIob2JqZWN0KToKKworICAgIEJVRkZFUiA9IDQwOTYKKworICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBwYXRoKToKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicp
OgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignVW5peFBpcGVTZXJ2ZXIgbm90IGltcGxlbWVu
dGVkIG9uIHRoaXMgcGxhdGZvcm0nKQorICAgICAgICBzZWxmLl9wYXRoID0gcGF0aAorICAgICAg
ICBzZWxmLl9jb25uZWN0ZWQgPSBGYWxzZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9z
LnVubGluayhzZWxmLl9wYXRoKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAg
IGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuX3BhdGgpOgorICAgICAgICAgICAgICAgIHJhaXNlIE9T
RXJyb3IoIkNvdWxkIG5vdCB1bmxpbmsgJyIgKyBzZWxmLl9wYXRoICsgIicsIHRoZSB0YXJnZXQg
cGF0aCBpcyBhIGZpbGUgbm90IGEgcGlwZS4iKQorCisgICAgICAgIHNlbGYuX3NvY2tldCA9IHNv
Y2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAg
c2VsZi5fc29ja2V0LnNldHRpbWVvdXQoMTUpCisgICAgICAgIHNlbGYuX3NvY2tldC5iaW5kKHNl
bGYuX3BhdGgpCisgICAgICAgIHNlbGYuX3NvY2tldC5saXN0ZW4oMCkKKworICAgIGRlZiBjb25u
ZWN0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9jb25uZWN0ZWQ6CisgICAgICAgICAgICByZXR1
cm4gVHJ1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9jb25uZWN0aW9uLCBzZWxm
Ll9hZGRyZXNzID0gc2VsZi5fc29ja2V0LmFjY2VwdCgpCisgICAgICAgICAgICBzZWxmLl9jb25u
ZWN0aW9uLnNldGJsb2NraW5nKDApCisgICAgICAgICAgICBzZWxmLl9jb25uZWN0ZWQgPSBUcnVl
CisgICAgICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dDoKKyAgICAgICAgICAgIHJldHVybiBGYWxz
ZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGRpc2Nvbm5lY3Qoc2VsZik6CisgICAg
ICAgIGlmIG5vdCBzZWxmLl9jb25uZWN0ZWQ6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAg
c2VsZi5fc29ja2V0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5fY29ubmVjdGVkID0gRmFsc2UKKwor
ICAgIGRlZiByZWFkKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkYXRhID0gc2Vs
Zi5fY29ubmVjdGlvbi5yZWN2KHNlbGYuQlVGRkVSKQorICAgICAgICAgICAgaWYgZGF0YToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZGF0YQorICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCBl
OgorICAgICAgICAgICAgZXJyID0gZS5hcmdzWzBdCisgICAgICAgICAgICBpZiBlcnIgPT0gZXJy
bm8uRUFHQUlOIG9yIGVyciA9PSBlcnJuby5FV09VTERCTE9DSzoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gW10KKyAgICAgICAgc2VsZi5kaXNjb25uZWN0KCkKKyAgICAgICAgcmV0dXJuIFtdCisK
KyAgICBkZWYgc2VuZChzZWxmLCBkYXRhKToKKyAgICAgICAgaWYgbm90IHNlbGYuX2Nvbm5lY3Rl
ZDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBzZWxmLl9jb25uZWN0aW9uLnNl
bmQoZGF0YSkKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBwYXRoKHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZi5fcGF0aAorCisgICAgZGVmIGlzQ29ubmVjdGVkKHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZi5fY29ubmVjdGVkCisKKworY2xhc3MgQWJzdHJhY3RQaXBlKG9iamVj
dCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuY2xlYW4oKQorCisg
ICAgZGVmIGNvbm5lY3Qoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmlzQ29ubmVjdGVkKCkK
KworICAgIGRlZiBjbGVhbihzZWxmKToKKyAgICAgICAgc2VsZi5fc3Rkb3V0U3RyZWFtID0gaW8u
Qnl0ZXNJTygpCisgICAgICAgIHNlbGYuX3N0ZGVyclN0cmVhbSA9IGlvLkJ5dGVzSU8oKQorICAg
ICAgICBzZWxmLl9zdGRvdXRUcmMgPSAwCisgICAgICAgIHNlbGYuX3N0ZGVyclRyYyA9IDAKKwor
ICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLmlzQ29ubmVjdGVk
KCkKKworICAgIGRlZiBzZW5kKHNlbGYsIGRhdGEpOgorICAgICAgICByZXR1cm4gRmFsc2UKKwor
ICAgIGRlZiBpc0Nvbm5lY3RlZChzZWxmKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBk
ZWYgX3BhcnNlTWVzc2FnZShzZWxmLCBpc0Jsb2NraW5nPUZhbHNlKToKKyAgICAgICAgcmV0dXJu
IEZhbHNlCisKKyAgICBkZWYgcmVhZExpbmUoc2VsZiwgaXNCbG9ja2luZz1GYWxzZSk6CisgICAg
ICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBlcnIgPSBzZWxmLnN0ZGVyclJlYWQoKQorICAg
ICAgICAgICAgaWYgZXJyOgorICAgICAgICAgICAgICAgIHJldHVybiBlcnIKKyAgICAgICAgICAg
IG91dCA9IHNlbGYuc3Rkb3V0UmVhZCgpCisgICAgICAgICAgICBpZiBvdXQ6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG91dAorICAgICAgICAgICAgc2VsZi5fcGFyc2VNZXNzYWdlKGlzQmxvY2tp
bmcpCisgICAgICAgICAgICBpZiBub3QgaXNCbG9ja2luZzoKKyAgICAgICAgICAgICAgICBicmVh
aworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHN0ZG91dFJlYWQoc2VsZiwgaXNCbG9j
a2luZz1GYWxzZSk6CisgICAgICAgIHRyaWVkT25jZSA9IEZhbHNlCisgICAgICAgIHdoaWxlIFRy
dWU6CisgICAgICAgICAgICBzZWxmLl9zdGRvdXRTdHJlYW0uc2VlayhzZWxmLl9zdGRvdXRUcmMs
IGlvLlNFRUtfU0VUKQorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX3N0ZG91dFN0cmVhbS5yZWFk
bGluZSgpCisgICAgICAgICAgICBpZiBkYXRhIGFuZCBkYXRhWy0xXSA9PSAnXG4nOgorICAgICAg
ICAgICAgICAgIHNlbGYuX3N0ZG91dFRyYyA9IHNlbGYuX3N0ZG91dFRyYyArIGxlbihkYXRhKQor
ICAgICAgICAgICAgICAgIHJldHVybiBkYXRhCisgICAgICAgICAgICBzZWxmLl9wYXJzZU1lc3Nh
Z2UoaXNCbG9ja2luZykKKyAgICAgICAgICAgIGlmIG5vdCBpc0Jsb2NraW5nIGFuZCB0cmllZE9u
Y2U6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHRyaWVkT25jZSA9IFRydWUK
KyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBzdGRlcnJSZWFkKHNlbGYsIGlzQmxvY2tp
bmc9RmFsc2UpOgorICAgICAgICB0cmllZE9uY2UgPSBGYWxzZQorICAgICAgICB3aGlsZSBUcnVl
OgorICAgICAgICAgICAgc2VsZi5fc3RkZXJyU3RyZWFtLnNlZWsoc2VsZi5fc3RkZXJyVHJjLCBp
by5TRUVLX1NFVCkKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9zdGRlcnJTdHJlYW0ucmVhZGxp
bmUoKQorICAgICAgICAgICAgaWYgZGF0YSBhbmQgZGF0YVstMV0gPT0gJ1xuJzoKKyAgICAgICAg
ICAgICAgICBzZWxmLl9zdGRlcnJUcmMgPSBzZWxmLl9zdGRlcnJUcmMgKyBsZW4oZGF0YSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZGF0YQorICAgICAgICAgICAgc2VsZi5fcGFyc2VNZXNzYWdl
KGlzQmxvY2tpbmcpCisgICAgICAgICAgICBpZiBub3QgaXNCbG9ja2luZyBhbmQgdHJpZWRPbmNl
OgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICB0cmllZE9uY2UgPSBUcnVlCisg
ICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgcmVhZEJ1ZmZlclN0ZG91dChzZWxmKToKKyAg
ICAgICAgc2VsZi5fc3Rkb3V0U3RyZWFtLnNlZWsoMCwgaW8uU0VFS19FTkQpCisgICAgICAgIGVu
ZFZhbCA9IHNlbGYuX3N0ZG91dFN0cmVhbS50ZWxsKCkKKyAgICAgICAgaWYgZW5kVmFsIDw9IHNl
bGYuX3N0ZG91dFRyYzoKKyAgICAgICAgICAgIHJldHVybiAnJworICAgICAgICBzZWxmLl9zdGRv
dXRTdHJlYW0uc2VlayhzZWxmLl9zdGRvdXRUcmMsIGlvLlNFRUtfU0VUKQorICAgICAgICBzaXpl
ID0gZW5kVmFsIC0gc2VsZi5fc3Rkb3V0VHJjCisgICAgICAgIHNlbGYuX3N0ZG91dFRyYyA9IGVu
ZFZhbAorICAgICAgICByZXR1cm4gc2VsZi5fc3Rkb3V0U3RyZWFtLnJlYWQoc2l6ZSkKKworICAg
IGRlZiByZWFkQnVmZmVyU3RkZXJyKHNlbGYpOgorICAgICAgICBzZWxmLl9zdGRlcnJTdHJlYW0u
c2VlaygwLCBpby5TRUVLX0VORCkKKyAgICAgICAgZW5kVmFsID0gc2VsZi5fc3RkZXJyU3RyZWFt
LnRlbGwoKQorICAgICAgICBpZiBlbmRWYWwgPD0gc2VsZi5fc3RkZXJyVHJjOgorICAgICAgICAg
ICAgcmV0dXJuICcnCisgICAgICAgIHNlbGYuX3N0ZGVyclN0cmVhbS5zZWVrKHNlbGYuX3N0ZGVy
clRyYywgaW8uU0VFS19TRVQpCisgICAgICAgIHNpemUgPSBlbmRWYWwgLSBzZWxmLl9zdGRlcnJU
cmMKKyAgICAgICAgc2VsZi5fc3RkZXJyVHJjID0gZW5kVmFsCisgICAgICAgIHJldHVybiBzZWxm
Ll9zdGRlcnJTdHJlYW0ucmVhZChzaXplKQorCisgICAgZGVmIHJlYWRCbG9ja1N0ZG91dChzZWxm
LCBzaXplLCBpc0Jsb2NraW5nPUZhbHNlKToKKyAgICAgICAgdHJpZWRPbmNlID0gRmFsc2UKKyAg
ICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHNlbGYuX3N0ZG91dFN0cmVhbS5zZWVrKDAs
IGlvLlNFRUtfRU5EKQorICAgICAgICAgICAgaWYgc2VsZi5fc3Rkb3V0U3RyZWFtLnRlbGwoKSAt
IHNlbGYuX3N0ZG91dFRyYyA+PSBzaXplOgorICAgICAgICAgICAgICAgIHNlbGYuX3N0ZG91dFN0
cmVhbS5zZWVrKHNlbGYuX3N0ZG91dFRyYywgaW8uU0VFS19TRVQpCisgICAgICAgICAgICAgICAg
ZGF0YSA9IHNlbGYuX3N0ZG91dFN0cmVhbS5yZWFkKHNpemUpCisgICAgICAgICAgICAgICAgc2Vs
Zi5fc3Rkb3V0VHJjID0gc2VsZi5fc3Rkb3V0VHJjICsgc2l6ZQorICAgICAgICAgICAgICAgIHJl
dHVybiBkYXRhCisgICAgICAgICAgICBzZWxmLl9wYXJzZU1lc3NhZ2UoaXNCbG9ja2luZykKKyAg
ICAgICAgICAgIGlmIG5vdCBpc0Jsb2NraW5nIGFuZCB0cmllZE9uY2U6CisgICAgICAgICAgICAg
ICAgYnJlYWsKKyAgICAgICAgICAgIHRyaWVkT25jZSA9IFRydWUKKyAgICAgICAgcmV0dXJuIE5v
bmUKKworICAgIGRlZiByZWFkQmxvY2tTdGRlcnIoc2VsZiwgc2l6ZSwgaXNCbG9ja2luZz1GYWxz
ZSk6CisgICAgICAgIHRyaWVkT25jZSA9IEZhbHNlCisgICAgICAgIHdoaWxlIFRydWU6CisgICAg
ICAgICAgICBzZWxmLl9zdGRlcnJTdHJlYW0uc2VlaygwLCBpby5TRUVLX0VORCkKKyAgICAgICAg
ICAgIGlmIHNlbGYuX3N0ZGVyclN0cmVhbS50ZWxsKCkgLSBzZWxmLl9zdGRlcnJUcmMgPj0gc2l6
ZToKKyAgICAgICAgICAgICAgICBzZWxmLl9zdGRlcnJTdHJlYW0uc2VlayhzZWxmLl9zdGRlcnJU
cmMsIGlvLlNFRUtfU0VUKQorICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9zdGRlcnJTdHJl
YW0ucmVhZChzaXplKQorICAgICAgICAgICAgICAgIHNlbGYuX3N0ZGVyclRyYyA9IHNlbGYuX3N0
ZGVyclRyYyArIHNpemUKKyAgICAgICAgICAgICAgICByZXR1cm4gZGF0YQorICAgICAgICAgICAg
c2VsZi5fcGFyc2VNZXNzYWdlKGlzQmxvY2tpbmcpCisgICAgICAgICAgICBpZiBub3QgaXNCbG9j
a2luZyBhbmQgdHJpZWRPbmNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICB0
cmllZE9uY2UgPSBUcnVlCisgICAgICAgIHJldHVybiBOb25lCisKKworY2xhc3MgVW5peFBpcGUo
QWJzdHJhY3RQaXBlKToKKworICAgIFNURElOX0lOREVYID0gMAorICAgIFNURE9VVF9JTkRFWCA9
IDEKKyAgICBTVERFUlJfSU5ERVggPSAyCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RkaW4s
IHN0ZG91dCwgc3RkZXJyKToKKyAgICAgICAgQWJzdHJhY3RQaXBlLl9faW5pdF9fKHNlbGYpCisg
ICAgICAgIHNlbGYuc3Rkb3V0RmlsZSA9IHN0ZG91dAorICAgICAgICBzZWxmLnN0ZGVyckZpbGUg
PSBzdGRlcnIKKworICAgICAgICBwYXRocyA9IFtzdGRpbiwgc3Rkb3V0LCBzdGRlcnJdCisgICAg
ICAgIHNlbGYuX3NvY2tldHMgPSBbXQorICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCAzKToKKyAg
ICAgICAgICAgIHNlbGYuX3NvY2tldHMuYXBwZW5kKFVuaXhQaXBlU2VydmVyKHBhdGhzW2ldKSkK
KworICAgICAgICBzZWxmLmNsZWFuKCkKKworICAgIGRlZiBjb25uZWN0KHNlbGYpOgorICAgICAg
ICBmb3Igc29jayBpbiBzZWxmLl9zb2NrZXRzOgorICAgICAgICAgICAgc29jay5jb25uZWN0KCkK
KyAgICAgICAgcmV0dXJuIHNlbGYuaXNDb25uZWN0ZWQoKQorCisgICAgZGVmIGNsb3NlKHNlbGYp
OgorICAgICAgICBmb3Igc29jayBpbiBzZWxmLl9zb2NrZXRzOgorICAgICAgICAgICAgc29jay5k
aXNjb25uZWN0KCkKKworICAgIGRlZiBzZW5kKHNlbGYsIGRhdGEpOgorICAgICAgICByZXR1cm4g
c2VsZi5fc29ja2V0c1tVbml4UGlwZS5TVERJTl9JTkRFWF0uc2VuZChkYXRhKQorCisgICAgZGVm
IGlzQ29ubmVjdGVkKHNlbGYpOgorICAgICAgICBmb3Igc29jayBpbiBzZWxmLl9zb2NrZXRzOgor
ICAgICAgICAgICAgaWYgbm90IHNvY2suaXNDb25uZWN0ZWQoKToKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfcGFyc2VNZXNzYWdl
KHNlbGYsIGlzQmxvY2tpbmc9RmFsc2UpOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAg
ICAgc3RkRXJyRGF0YSA9IFtdCisgICAgICAgICAgICBzdGRFcnJEYXRhID0gc2VsZi5fc29ja2V0
c1tVbml4UGlwZS5TVERFUlJfSU5ERVhdLnJlYWQoKQorICAgICAgICAgICAgaWYgc3RkRXJyRGF0
YToKKyAgICAgICAgICAgICAgICBzZWxmLl9zdGRlcnJTdHJlYW0uc2VlaygwLCBpby5TRUVLX0VO
RCkKKyAgICAgICAgICAgICAgICBzZWxmLl9zdGRlcnJTdHJlYW0ud3JpdGUoc3RkRXJyRGF0YSkK
KyAgICAgICAgICAgIHN0ZE91dERhdGEgPSBbXQorICAgICAgICAgICAgc3RkT3V0RGF0YSA9IHNl
bGYuX3NvY2tldHNbVW5peFBpcGUuU1RET1VUX0lOREVYXS5yZWFkKCkKKyAgICAgICAgICAgIGlm
IHN0ZE91dERhdGE6CisgICAgICAgICAgICAgICAgc2VsZi5fc3Rkb3V0U3RyZWFtLnNlZWsoMCwg
aW8uU0VFS19FTkQpCisgICAgICAgICAgICAgICAgc2VsZi5fc3Rkb3V0U3RyZWFtLndyaXRlKHN0
ZE91dERhdGEpCisgICAgICAgICAgICBpZiBzdGRFcnJEYXRhIG9yIHN0ZE91dERhdGE6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGlmIG5vdCBpc0Jsb2NraW5nOgor
ICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGhh
bmRsZV9pbnRlcnJ1cHQoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmlzQ29ubmVjdGVkKCk6
CisgICAgICAgICAgICByYWlzZSBLZXlib2FyZEludGVycnVwdAorCisKK2NsYXNzIFByb2Nlc3NQ
aXBlKEFic3RyYWN0UGlwZSk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgY21kLCBl
bnZpcm89Tm9uZSwgdW5pX25ld2xpbmVzPUZhbHNlKToKKworICAgICAgICBBYnN0cmFjdFBpcGUu
X19pbml0X18oc2VsZikKKworICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAorICAgICAgICBzZWxm
Ll9ob3N0ID0gc2VsZi5fcG9ydC5ob3N0CisKKyAgICAgICAgc2VsZi5fcHJvYyA9IHNlbGYuX2hv
c3QuZXhlY3V0aXZlLnBvcGVuKGNtZCwgc3RkaW49c2VsZi5faG9zdC5leGVjdXRpdmUuUElQRSwK
KyAgICAgICAgICAgIHN0ZG91dD1zZWxmLl9ob3N0LmV4ZWN1dGl2ZS5QSVBFLAorICAgICAgICAg
ICAgc3RkZXJyPXNlbGYuX2hvc3QuZXhlY3V0aXZlLlBJUEUsCisgICAgICAgICAgICBjbG9zZV9m
ZHM9bm90IHNlbGYuX2hvc3QucGxhdGZvcm0uaXNfd2luKCksCisgICAgICAgICAgICBlbnY9ZW52
aXJvLAorICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPXVuaV9uZXdsaW5lcykKKworICAg
ICAgICBzZWxmLl91c2Vfd2luMzJfYXBpcyA9IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4n
KQorICAgICAgICBpZiBub3Qgc2VsZi5fdXNlX3dpbjMyX2FwaXM6CisgICAgICAgICAgICBmZCA9
IHNlbGYuX3Byb2Muc3Rkb3V0LmZpbGVubygpCisgICAgICAgICAgICBmbCA9IGZjbnRsLmZjbnRs
KGZkLCBmY250bC5GX0dFVEZMKQorICAgICAgICAgICAgZmNudGwuZmNudGwoZmQsIGZjbnRsLkZf
U0VURkwsIGZsIHwgb3MuT19OT05CTE9DSykKKyAgICAgICAgICAgIGZkID0gc2VsZi5fcHJvYy5z
dGRlcnIuZmlsZW5vKCkKKyAgICAgICAgICAgIGZsID0gZmNudGwuZmNudGwoZmQsIGZjbnRsLkZf
R0VURkwpCisgICAgICAgICAgICBmY250bC5mY250bChmZCwgZmNudGwuRl9TRVRGTCwgZmwgfCBv
cy5PX05PTkJMT0NLKQorCisgICAgZGVmIHBpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
X3Byb2MucGlkCisKKyAgICBkZWYgaXNDb25uZWN0ZWQoc2VsZik6CisgICAgICAgIHJldHVybiBu
b3Qgc2VsZi5fcHJvYy5wb2xsKCkKKworICAgIGRlZiBoYW5kbGVfaW50ZXJydXB0KHNlbGYpOgor
ICAgICAgICBpZiBzZWxmLl9wcm9jLnJldHVybmNvZGUgaW4gKC0xMDczNzQxNTEwLCAtc2lnbmFs
LlNJR0lOVCk6CisgICAgICAgICAgICByYWlzZSBLZXlib2FyZEludGVycnVwdAorCisgICAgZGVm
IGNsb3NlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9wcm9jLnBvbGwoKToKKyAgICAgICAgICAg
IHNlbGYuX2hvc3QuZXhlY3V0aXZlLmtpbGxfcHJvY2VzcyhzZWxmLl9wcm9jLnBpZCkKKyAgICAg
ICAgaWYgc2VsZi5fcHJvYy5wb2xsKCkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9w
cm9jLndhaXQoKQorCisgICAgICAgIGlmIHNlbGYuX3Byb2Muc3RkaW46CisgICAgICAgICAgICBz
ZWxmLl9wcm9jLnN0ZGluLmNsb3NlKCkKKyAgICAgICAgaWYgc2VsZi5fcHJvYy5zdGRvdXQ6Cisg
ICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZG91dC5jbG9zZSgpCisgICAgICAgIGlmIHNlbGYuX3By
b2Muc3RkZXJyOgorICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRlcnIuY2xvc2UoKQorICAgICAg
ICByZXR1cm4gbm90IHNlbGYuaXNDb25uZWN0ZWQoKQorCisgICAgZGVmIHNlbmQoc2VsZiwgYnl0
ZXMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGluLndyaXRlKGJ5
dGVzKQorICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgIHJldHVybiBGYWxz
ZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF91bml4c3RkQmxvY2soc2VsZik6Cisg
ICAgICAgIGlmIHNlbGYuX3Byb2Muc3Rkb3V0LmNsb3NlZDoKKyAgICAgICAgICAgIHJldHVybiBO
b25lCisgICAgICAgIHNlbGVjdF9mZHMgPSBbXQorICAgICAgICBzZWxlY3RfZmRzLmFwcGVuZChz
ZWxmLl9wcm9jLnN0ZG91dC5maWxlbm8oKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVh
ZF9mZHMsIF8sIF8gPSBzZWxlY3Quc2VsZWN0KHNlbGVjdF9mZHMsIFtdLCBzZWxlY3RfZmRzLCAw
KQorICAgICAgICBleGNlcHQgc2VsZWN0LmVycm9yLCBlOgorICAgICAgICAgICAgaWYgZS5hcmdz
WzBdID09IGVycm5vLkVJTlZBTDoKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAg
ICAgICAgcmFpc2UKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBzZWxmLl9wcm9jLnN0
ZG91dC5maWxlbm8oKSBpbiByZWFkX2ZkczoKKyAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5f
cHJvYy5zdGRvdXQucmVhZCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEKKyAgICAgICAg
ZXhjZXB0IElPRXJyb3IsIGU6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmV0dXJuIE5v
bmUKKworICAgIGRlZiBfdW5peGVyckJsb2NrKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9wcm9j
LnN0ZGVyci5jbG9zZWQ6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBzZWxlY3Rf
ZmRzID0gW10KKyAgICAgICAgc2VsZWN0X2Zkcy5hcHBlbmQoc2VsZi5fcHJvYy5zdGRlcnIuZmls
ZW5vKCkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlYWRfZmRzLCBfLCBfID0gc2VsZWN0
LnNlbGVjdChzZWxlY3RfZmRzLCBbXSwgc2VsZWN0X2ZkcywgMCkKKyAgICAgICAgZXhjZXB0IHNl
bGVjdC5lcnJvciwgZToKKyAgICAgICAgICAgIGlmIGUuYXJnc1swXSA9PSBlcnJuby5FSU5WQUw6
CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgaWYgc2VsZi5fcHJvYy5zdGRlcnIuZmlsZW5vKCkgaW4gcmVh
ZF9mZHM6CisgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuX3Byb2Muc3RkZXJyLnJlYWQoKQor
ICAgICAgICAgICAgICAgIHJldHVybiBkYXRhCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgor
ICAgICAgICAgICAgcGFzcworCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX3dpbjMy
Tm9uQmxvY2tpbmdSZWFkKHNlbGYsIGhhbmRsZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IF8sIGF2YWlsLCBfID0gd2luMzJwaXBlLlBlZWtOYW1lZFBpcGUoaGFuZGxlLCAwKQorICAgICAg
ICAgICAgaWYgYXZhaWwgPiAwOgorICAgICAgICAgICAgICAgIF8sIGJ1ZiA9IHdpbjMyZmlsZS5S
ZWFkRmlsZShoYW5kbGUsIGF2YWlsLCBOb25lKQorICAgICAgICAgICAgICAgIHJldHVybiBidWYK
KyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgIGlmIGVbMF0gbm90IGlu
ICgxMDksIGVycm5vLkVTSFVURE9XTik6ICAjIDEwOSA9PSB3aW4zMiBFUlJPUl9CUk9LRU5fUElQ
RQorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYg
X3dpbjMyc3RkQmxvY2soc2VsZik6CisgICAgICAgIG91dF9maCA9IG1zdmNydC5nZXRfb3NmaGFu
ZGxlKHNlbGYuX3Byb2Muc3Rkb3V0LmZpbGVubygpKQorICAgICAgICByZXR1cm4gc2VsZi5fd2lu
MzJOb25CbG9ja2luZ1JlYWQob3V0X2ZoKQorCisgICAgZGVmIF93aW4zMmVyckJsb2NrKHNlbGYp
OgorICAgICAgICBlcnJfZmggPSBtc3ZjcnQuZ2V0X29zZmhhbmRsZShzZWxmLl9wcm9jLnN0ZGVy
ci5maWxlbm8oKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3dpbjMyTm9uQmxvY2tpbmdSZWFkKGVy
cl9maCkKKworICAgIGRlZiBfcGFyc2VNZXNzYWdlKHNlbGYsIGlzQmxvY2tpbmc9RmFsc2UpOgor
ICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgc3RkRXJyRGF0YSA9IFtdCisgICAgICAg
ICAgICBpZiBzZWxmLl91c2Vfd2luMzJfYXBpczoKKyAgICAgICAgICAgICAgICBzdGRFcnJEYXRh
ID0gc2VsZi5fd2luMzJlcnJCbG9jaygpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgIHN0ZEVyckRhdGEgPSBzZWxmLl91bml4ZXJyQmxvY2soKQorICAgICAgICAgICAgaWYgc3Rk
RXJyRGF0YToKKyAgICAgICAgICAgICAgICBzZWxmLl9zdGRlcnJTdHJlYW0uc2VlaygwLCBpby5T
RUVLX0VORCkKKyAgICAgICAgICAgICAgICBzZWxmLl9zdGRlcnJTdHJlYW0ud3JpdGUoc3RkRXJy
RGF0YSkKKyAgICAgICAgICAgIHN0ZE91dERhdGEgPSBbXQorICAgICAgICAgICAgaWYgc2VsZi5f
dXNlX3dpbjMyX2FwaXM6CisgICAgICAgICAgICAgICAgc3RkT3V0RGF0YSA9IHNlbGYuX3dpbjMy
c3RkQmxvY2soKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzdGRPdXREYXRh
ID0gc2VsZi5fdW5peHN0ZEJsb2NrKCkKKyAgICAgICAgICAgIGlmIHN0ZE91dERhdGE6CisgICAg
ICAgICAgICAgICAgc2VsZi5fc3Rkb3V0U3RyZWFtLnNlZWsoMCwgaW8uU0VFS19FTkQpCisgICAg
ICAgICAgICAgICAgc2VsZi5fc3Rkb3V0U3RyZWFtLndyaXRlKHN0ZE91dERhdGEpCisgICAgICAg
ICAgICBpZiBzdGRFcnJEYXRhIG9yIHN0ZE91dERhdGE6CisgICAgICAgICAgICAgICAgcmV0dXJu
IFRydWUKKyAgICAgICAgICAgIGlmIG5vdCBpc0Jsb2NraW5nOgorICAgICAgICAgICAgICAgIGJy
ZWFrCisgICAgICAgIHJldHVybiBGYWxzZQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vaXBjX3BpcGVfdGVzdGNhc2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vaXBjX3BpcGVfdGVzdGNhc2UucHkJKG5vbmV4aXN0ZW50KQorKysgVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vaXBjX3BpcGVfdGVzdGNhc2UucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMzEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUg
bWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKK2ltcG9ydCBlcnJubworaW1wb3J0IGlvCitpbXBvcnQgc29ja2V0CitpbXBvcnQgdGlt
ZQorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5pcGNfcGlwZSBpbXBvcnQgQWJzdHJhY3RQaXBlCisK
KworY2xhc3MgRHVtbXlQcm9jZXNzUGlwZShBYnN0cmFjdFBpcGUpOgorCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHBvcnQ9Tm9uZSwgY21kPU5vbmUsIGVudmlybz1Ob25lLCB1bmlfbmV3bGluZXM9
RmFsc2UpOgorICAgICAgICBBYnN0cmFjdFBpcGUuX19pbml0X18oc2VsZikKKyAgICAgICAgc2Vs
Zi5fcG9ydCA9IHBvcnQKKyAgICAgICAgaWYgc2VsZi5fcG9ydDoKKyAgICAgICAgICAgIHNlbGYu
X2hvc3QgPSBzZWxmLl9wb3J0Lmhvc3QKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYu
X2hvc3QgPSBOb25lCisgICAgICAgIHNlbGYuY29ubmVjdGVkRm9yVGVzdGluZyA9IFRydWUKKwor
ICAgIGRlZiBwaWQoc2VsZik6CisgICAgICAgIHJldHVybiAxCisKKyAgICBkZWYgaXNDb25uZWN0
ZWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3RlZEZvclRlc3RpbmcKKworICAg
IGRlZiBzZW5kKHNlbGYsIGJ5dGVzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY29ubmVjdGVkRm9y
VGVzdGluZworCisgICAgZGVmIF9wYXJzZU1lc3NhZ2Uoc2VsZiwgaXNCbG9ja2luZz1GYWxzZSk6
CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHB1c2hEYXRhRm9yVGVzdGluZyhzZWxm
LCBkYXRhLCBzdGRlcnI9RmFsc2UsIHN0ZG91dD1UcnVlKToKKyAgICAgICAgaWYgc3RkZXJyOgor
ICAgICAgICAgICAgc2VsZi5fc3RkZXJyU3RyZWFtLnNlZWsoMCwgaW8uU0VFS19FTkQpCisgICAg
ICAgICAgICBzZWxmLl9zdGRlcnJTdHJlYW0ud3JpdGUoZGF0YSkKKyAgICAgICAgZWxpZiBzdGRv
dXQ6CisgICAgICAgICAgICBzZWxmLl9zdGRvdXRTdHJlYW0uc2VlaygwLCBpby5TRUVLX0VORCkK
KyAgICAgICAgICAgIHNlbGYuX3N0ZG91dFN0cmVhbS53cml0ZShkYXRhKQorCisKK2NsYXNzIFVu
aXhQaXBlQ2xpZW50KG9iamVjdCk6CisKKyAgICBCVUZGRVIgPSA0MDk2CisKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgcGF0aCk6CisgICAgICAgIHNlbGYuX3BhdGggPSBwYXRoCisgICAgICAgIHNl
bGYuX2Nvbm5lY3RlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX2Nvbm5lY3Rpb24gPSBzb2NrZXQu
c29ja2V0KHNvY2tldC5BRl9VTklYLCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYu
X3N0cmVhbSA9IGlvLkJ5dGVzSU8oKQorICAgICAgICBzZWxmLl9zdHJlYW1UcmMgPSAwCisKKyAg
ICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgc2VsZi5kaXNjb25uZWN0KCkKKworICAgIGRl
ZiBjb25uZWN0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9jb25uZWN0ZWQ6CisgICAgICAgICAg
ICByZXR1cm4gVHJ1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9jb25uZWN0aW9u
LmNvbm5lY3Qoc2VsZi5fcGF0aCkKKyAgICAgICAgICAgIHNlbGYuX2Nvbm5lY3RlZCA9IFRydWUK
KyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVy
biBUcnVlCisKKyAgICBkZWYgZGlzY29ubmVjdChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYu
X2Nvbm5lY3RlZDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9jb25uZWN0aW9u
LmNsb3NlKCkKKyAgICAgICAgc2VsZi5fY29ubmVjdGVkID0gRmFsc2UKKworICAgIGRlZiByZWFk
bGluZShzZWxmLCBpc0Jsb2NraW5nPUZhbHNlKToKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAg
ICAgICAgIHNlbGYuX3N0cmVhbS5zZWVrKHNlbGYuX3N0cmVhbVRyYywgaW8uU0VFS19TRVQpCisg
ICAgICAgICAgICBkYXRhID0gc2VsZi5fc3RyZWFtLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGlm
IGRhdGEgYW5kIGRhdGFbLTFdID09ICdcbic6CisgICAgICAgICAgICAgICAgc2VsZi5fc3RyZWFt
VHJjID0gc2VsZi5fc3RyZWFtVHJjICsgbGVuKGRhdGEpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGRhdGEKKyAgICAgICAgICAgIGJsb2NrID0gc2VsZi5yZWFkKCkKKyAgICAgICAgICAgIGlmIGJs
b2NrOgorICAgICAgICAgICAgICAgIHNlbGYuX3N0cmVhbS5zZWVrKDAsIGlvLlNFRUtfRU5EKQor
ICAgICAgICAgICAgICAgIHNlbGYuX3N0cmVhbS53cml0ZShibG9jaykKKyAgICAgICAgICAgIGlm
IG5vdCBpc0Jsb2NraW5nOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHJldHVybiBO
b25lCisKKyAgICBkZWYgcmVhZChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0
YSA9IHNlbGYuX2Nvbm5lY3Rpb24ucmVjdihzZWxmLkJVRkZFUikKKyAgICAgICAgICAgIGlmIGRh
dGE6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEKKyAgICAgICAgZXhjZXB0IHNvY2tldC5l
cnJvciwgZToKKyAgICAgICAgICAgIGVyciA9IGUuYXJnc1swXQorICAgICAgICAgICAgaWYgZXJy
ID09IGVycm5vLkVBR0FJTiBvciBlcnIgPT0gZXJybm8uRVdPVUxEQkxPQ0s6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIFtdCisgICAgICAgIHNlbGYuZGlzY29ubmVjdCgpCisgICAgICAgIHJldHVy
biBbXQorCisgICAgZGVmIHNlbmQoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIG5vdCBzZWxmLl9j
b25uZWN0ZWQ6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgc2VsZi5fY29ubmVj
dGlvbi5zZW5kKGRhdGEpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgcG9ydChzZWxm
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BhdGgKKworICAgIGRlZiBpc0Nvbm5lY3RlZChzZWxm
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Nvbm5lY3RlZApJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vaXBjX3BpcGVfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vaXBjX3BpcGVfdW5pdHRlc3QucHkJKG5vbmV4aXN0ZW50
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vaXBjX3BpcGVfdW5pdHRlc3QucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTcgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZwor
aW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5pcGNf
cGlwZSBpbXBvcnQgVW5peFBpcGVTZXJ2ZXIsIFVuaXhQaXBlCitmcm9tIHdlYmtpdHB5LmNvbW1v
bi5pcGNfcGlwZV90ZXN0Y2FzZSBpbXBvcnQgRHVtbXlQcm9jZXNzUGlwZSwgVW5peFBpcGVDbGll
bnQKKworCitkZWYgVW5peFBpcGVDbGllbnRUZXN0aW5nVGhyZWFkKHNvdXJjZSwgcGF0aCwgYXJn
dW1lbnRzKToKKyAgICBzb3VyY2UuY2xpZW50UmVzdWx0cyA9IFtdCisgICAgY2xpZW50ID0gVW5p
eFBpcGVDbGllbnQocGF0aCkKKworICAgIGRlYWRsaW5lID0gdGltZS50aW1lKCkgKyAxLjAKKyAg
ICB3aGlsZSB0aW1lLnRpbWUoKSA8IGRlYWRsaW5lIGFuZCBub3QgY2xpZW50LmlzQ29ubmVjdGVk
KCk6CisgICAgICAgIGNsaWVudC5jb25uZWN0KCkKKyAgICBpZiBub3QgY2xpZW50LmlzQ29ubmVj
dGVkKCk6CisgICAgICAgIHJldHVybiBOb25lCisgICAgcmVhZGluZ21vZGUgPSBGYWxzZQorICAg
IGZvciBlbG0gaW4gYXJndW1lbnRzOgorICAgICAgICBpZiBlbG0gPT0gJy0tcmVhZCc6CisgICAg
ICAgICAgICBkYXRhID0gY2xpZW50LnJlYWRsaW5lKFRydWUpCisgICAgICAgICAgICBzb3VyY2Uu
Y2xpZW50UmVzdWx0cy5hcHBlbmQoZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNs
aWVudC5zZW5kKGVsbSkKKyAgICBjbGllbnQuZGlzY29ubmVjdCgpCisgICAgcmV0dXJuIHNvdXJj
ZS5jbGllbnRSZXN1bHRzCisKKworY2xhc3MgaXBjUGlwZVRlc3QodW5pdHRlc3QuVGVzdENhc2Up
OgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1
cGVyKGlwY1BpcGVUZXN0LCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisgICAgICAg
IHNlbGYuY2xpZW50UmVzdWx0cyA9IFtdCisKKyAgICBkZWYgdGVzdF9hYnN0cmFjdHBpcGVfc3Rk
b3V0KHNlbGYpOgorICAgICAgICBwaXBlID0gRHVtbXlQcm9jZXNzUGlwZSgpCisKKyAgICAgICAg
cGlwZS5wdXNoRGF0YUZvclRlc3RpbmcoJ2NvbWluZyBmcm9tIHN0ZG91dFxuJykKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChwaXBlLnN0ZG91dFJlYWQoKSwgJ2NvbWluZyBmcm9tIHN0ZG91dFxu
JykKKworICAgICAgICBwaXBlLnB1c2hEYXRhRm9yVGVzdGluZygnY29taW5nIGZyb20gc3RkZXJy
XG4nLCBzdGRlcnI9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBlLnN0ZG91dFJl
YWQoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2Fic3RyYWN0cGlwZV9zdGRlcnIoc2VsZik6Cisg
ICAgICAgIHBpcGUgPSBEdW1teVByb2Nlc3NQaXBlKCkKKworICAgICAgICBwaXBlLnB1c2hEYXRh
Rm9yVGVzdGluZygnY29taW5nIGZyb20gc3Rkb3V0XG4nKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHBpcGUuc3RkZXJyUmVhZCgpLCBOb25lKQorCisgICAgICAgIHBpcGUucHVzaERhdGFGb3JU
ZXN0aW5nKCdjb21pbmcgZnJvbSBzdGRlcnJcbicsIHN0ZGVycj1UcnVlKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHBpcGUuc3RkZXJyUmVhZCgpLCAnY29taW5nIGZyb20gc3RkZXJyXG4nKQor
CisgICAgZGVmIHRlc3RfYWJzdHJhY3RwaXBlX2R1ZWxfc3RyZWFtcyhzZWxmKToKKyAgICAgICAg
cGlwZSA9IER1bW15UHJvY2Vzc1BpcGUoKQorCisgICAgICAgIHBpcGUucHVzaERhdGFGb3JUZXN0
aW5nKCdjb21pbmcgZnJvbSBzdGRvdXRcbicpCisgICAgICAgIHBpcGUucHVzaERhdGFGb3JUZXN0
aW5nKCdjb21pbmcgZnJvbSBzdGRlcnJcbicsIHN0ZGVycj1UcnVlKQorCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwocGlwZS5yZWFkTGluZSgpLCAnY29taW5nIGZyb20gc3RkZXJyXG4nKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHBpcGUucmVhZExpbmUoKSwgJ2NvbWluZyBmcm9tIHN0ZG91
dFxuJykKKworICAgIGRlZiB0ZXN0X2Fic3RyYWN0cGlwZV9zdGRvdXRibG9jayhzZWxmKToKKyAg
ICAgICAgcGlwZSA9IER1bW15UHJvY2Vzc1BpcGUoKQorCisgICAgICAgIHBpcGUucHVzaERhdGFG
b3JUZXN0aW5nKCdzdGRvdXQgbGluZVxuJykKKyAgICAgICAgcGlwZS5wdXNoRGF0YUZvclRlc3Rp
bmcoJ3N0ZG91dCBibG9jaycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBlLnJlYWRC
dWZmZXJTdGRvdXQoKSwgJ3N0ZG91dCBsaW5lXG5zdGRvdXQgYmxvY2snKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHBpcGUucmVhZEJ1ZmZlclN0ZGVycigpLCAnJykKKworICAgIGRlZiB0ZXN0
X2Fic3RyYWN0cGlwZV9zdGRlcnJibG9jayhzZWxmKToKKyAgICAgICAgcGlwZSA9IER1bW15UHJv
Y2Vzc1BpcGUoKQorCisgICAgICAgIHBpcGUucHVzaERhdGFGb3JUZXN0aW5nKCdzdGRlcnIgbGlu
ZVxuJywgc3RkZXJyPVRydWUpCisgICAgICAgIHBpcGUucHVzaERhdGFGb3JUZXN0aW5nKCdzdGRl
cnIgYmxvY2snLCBzdGRlcnI9VHJ1ZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBpcGUu
cmVhZEJ1ZmZlclN0ZG91dCgpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBlLnJl
YWRCdWZmZXJTdGRlcnIoKSwgJ3N0ZGVyciBsaW5lXG5zdGRlcnIgYmxvY2snKQorCisgICAgZGVm
IHRlc3RfdW5peFBpcGVTZXJ2ZXIoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNl
cnYgPSBVbml4UGlwZVNlcnZlcignL3RtcC91bml4UGlwZS5waXBlJykKKyAgICAgICAgICAgIHRo
cmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PVVuaXhQaXBlQ2xpZW50VGVzdGluZ1RocmVh
ZCwgYXJncz0oc2VsZiwgc2Vydi5wYXRoKCksIFsnLS1yZWFkJywgJ0xpbmUgMVxuJywgJ0xpbmUg
MlxuJywgJy0tcmVhZCddKSkKKyAgICAgICAgICAgIHRocmVhZC5zdGFydCgpCisgICAgICAgICAg
ICBzZXJ2LmNvbm5lY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlcnYuaXNDb25u
ZWN0ZWQoKSkKKworICAgICAgICAgICAgc2Vydi5zZW5kKCdTZXJ2ZXIgc2VuZCAxXG4nKQorICAg
ICAgICAgICAgc2Vydi5zZW5kKCdTZXJ2ZXIgc2VuZCAyXG4nKQorCisgICAgICAgICAgICB0aHJl
YWQuam9pbigpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcnYucmVhZCgpLCAnTGlu
ZSAxXG5MaW5lIDJcbicpCisgICAgICAgICAgICBzZXJ2LmRpc2Nvbm5lY3QoKQorCisgICAgICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCdTZXJ2ZXIgc2VuZCAxXG4nLCBzZWxmLmNsaWVudFJlc3Vs
dHNbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdTZXJ2ZXIgc2VuZCAyXG4nLCBz
ZWxmLmNsaWVudFJlc3VsdHNbMV0pCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgorICAgICAg
ICAgICAgaWYgbm90IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKSBvciBzdHIoZSkgIT0g
J1VuaXhQaXBlU2VydmVyIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtJzoKKyAgICAg
ICAgICAgICAgICByYWlzZSBlCisKKyAgICBkZWYgdGVzdF91bml4UGlwZShzZWxmKToKKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgcGlwZSA9IFVuaXhQaXBlKCcvdG1wL3Rlc3RzdGRpbi5waXBl
JywgJy90bXAvdGVzdHN0ZG91dC5waXBlJywgJy90bXAvdGVzdHN0ZGVyci5waXBlJykKKyAgICAg
ICAgICAgIHN0ZGluVGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9VW5peFBpcGVDbGll
bnRUZXN0aW5nVGhyZWFkLCBhcmdzPShzZWxmLCAnL3RtcC90ZXN0c3RkaW4ucGlwZScsIFsnLS1y
ZWFkJywgJy0tcmVhZCddKSkKKyAgICAgICAgICAgIHN0ZG91dFRocmVhZCA9IHRocmVhZGluZy5U
aHJlYWQodGFyZ2V0PVVuaXhQaXBlQ2xpZW50VGVzdGluZ1RocmVhZCwgYXJncz0oc2VsZiwgJy90
bXAvdGVzdHN0ZG91dC5waXBlJywgWydzdGRvdXQgbGluZSAxXG4nLCAnc3Rkb3V0IGxpbmUgMlxu
J10pKQorICAgICAgICAgICAgc3RkZXJyVGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9
VW5peFBpcGVDbGllbnRUZXN0aW5nVGhyZWFkLCBhcmdzPShzZWxmLCAnL3RtcC90ZXN0c3RkZXJy
LnBpcGUnLCBbJ3N0ZGVyciBsaW5lIDFcbicsICdzdGRlcnIgbGluZSAyXG4nXSkpCisgICAgICAg
ICAgICBzdGRpblRocmVhZC5zdGFydCgpCisgICAgICAgICAgICBzdGRvdXRUaHJlYWQuc3RhcnQo
KQorICAgICAgICAgICAgc3RkZXJyVGhyZWFkLnN0YXJ0KCkKKyAgICAgICAgICAgIHBpcGUuY29u
bmVjdCgpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwaXBlLmlzQ29ubmVjdGVkKCkp
CisKKyAgICAgICAgICAgIHBpcGUuc2VuZCgnU2VydmVyIHNlbmQgMVxuJykKKyAgICAgICAgICAg
IHBpcGUuc2VuZCgnU2VydmVyIHNlbmQgMlxuJykKKworICAgICAgICAgICAgc3RkaW5UaHJlYWQu
am9pbigpCisgICAgICAgICAgICBzdGRvdXRUaHJlYWQuam9pbigpCisgICAgICAgICAgICBzdGRl
cnJUaHJlYWQuam9pbigpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlwZS5zdGRv
dXRSZWFkKCksICdzdGRvdXQgbGluZSAxXG4nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChwaXBlLnN0ZG91dFJlYWQoKSwgJ3N0ZG91dCBsaW5lIDJcbicpCisgICAgICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHBpcGUuc3RkZXJyUmVhZCgpLCAnc3RkZXJyIGxpbmUgMVxuJykKKyAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlwZS5zdGRlcnJSZWFkKCksICdzdGRlcnIgbGluZSAy
XG4nKQorCisgICAgICAgICAgICBwaXBlLmNsb3NlKCkKKworICAgICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgnU2VydmVyIHNlbmQgMVxuJywgc2VsZi5jbGllbnRSZXN1bHRzWzBdKQorICAgICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnU2VydmVyIHNlbmQgMlxuJywgc2VsZi5jbGllbnRSZXN1
bHRzWzFdKQorICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKKyAgICAgICAgICAgIGlmIG5vdCBz
eXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJykgb3Igc3RyKGUpICE9ICdVbml4UGlwZVNlcnZl
ciBub3QgaW1wbGVtZW50ZWQgb24gdGhpcyBwbGF0Zm9ybSc6CisgICAgICAgICAgICAgICAgcmFp
c2UgZQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkJKHJldmlzaW9uIDIwOTkx
OCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC04OTcsNiArODk3LDEyIEBAIGNsYXNzIFBvcnQob2JqZWN0KToKIAogICAgICAgICByZXR1
cm4gY2xlYW5fZW52CiAKKyAgICBkZWYgZGV2aWNlRGVmaW5lZChzZWxmKToKKyAgICAgICAgcmV0
dXJuIEZhbHNlCisKKyAgICBkZWYgcnVuT25EZXZpY2Uoc2VsZiwgY21kLCBlbnZpPU5vbmUpOgor
ICAgICAgICByZXR1cm4gTm9uZQorCiAgICAgZGVmIF9jbGVhcl9nbG9iYWxfY2FjaGVzX2FuZF90
ZW1wb3JhcnlfZmlsZXMoc2VsZik6CiAgICAgICAgIHBhc3MKIApJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2Jhc2VfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2Jhc2VfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIwOTkxOCkKKysr
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0zOTUsNiArMzk1LDEyIEBAIGNsYXNzIFBvcnRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvcnQuaXNfdzNjX3Jlc291cmNlX2ZpbGUocG9y
dC5ob3N0LmZpbGVzeXN0ZW0sIHBvcnQubGF5b3V0X3Rlc3RzX2RpcigpICsgIi9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBSZXF1ZXN0IiwgInhtbGh0dHByZXF1ZXN0LXN5
bmMtYmxvY2stZGVmZXItc2NyaXB0cy1zdWJmcmFtZS5odG1sIikpCiAgICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZShwb3J0LmlzX3czY19yZXNvdXJjZV9maWxlKHBvcnQuaG9zdC5maWxlc3lzdGVtLCBw
b3J0LmxheW91dF90ZXN0c19kaXIoKSArICIvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9kb20vbm9kZXMvRG9jdW1lbnQtY3JlYXRlRWxlbWVudC1uYW1lc3BhY2UtdGVzdHMiLCAidGVz
dC5odG1sIikpCiAKKyAgICBkZWYgdGVzdF9kZXZpY2Uoc2VsZik6CisgICAgICAgIHBvcnQgPSBz
ZWxmLm1ha2VfcG9ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9ydC5kZXZpY2VEZWZp
bmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBvcnQucnVuT25EZXZpY2UoWydwaW5n
JywgJzxuby1pZD4nXSkpCisKKwogY2xhc3MgTmF0dXJhbENvbXBhcmVUZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuX3BvcnQgPSBUZXN0
UG9ydChNb2NrU3lzdGVtSG9zdCgpKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2Rhcndpbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFy
d2luLnB5CShyZXZpc2lvbiAyMDk5MTgpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
ZGFyd2luLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSwxMCBAQAogIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogCiBpbXBvcnQgbG9nZ2luZworaW1wb3J0IG11bHRpcHJvY2Vzc2luZwogaW1wb3J0IG9zCitp
bXBvcnQgcGxpc3RsaWIKK2ltcG9ydCBzaHV0aWwKIGltcG9ydCB0aW1lCiAKIGZyb20gd2Via2l0
cHkuY29tbW9uLnN5c3RlbS5jcmFzaGxvZ3MgaW1wb3J0IENyYXNoTG9ncwpAQCAtMTc0LDMgKzE3
NywyNCBAQCBjbGFzcyBEYXJ3aW5Qb3J0KEFwcGxlUG9ydCk6CiAgICAgICAgIGV4Y2VwdCBTY3Jp
cHRFcnJvcjoKICAgICAgICAgICAgIF9sb2cud2FybigieGNydW4gZmFpbGVkOyBmYWxsaW5nIGJh
Y2sgdG8gJyVzJy4iICUgZmFsbGJhY2spCiAgICAgICAgICAgICByZXR1cm4gZmFsbGJhY2sKKwor
ICAgIGRlZiBleHRyYWN0QnVuZGxlSUQoc2VsZiwgYXBwKToKKyAgICAgICAgcGlkID0gc3RyKG11
bHRpcHJvY2Vzc2luZy5jdXJyZW50X3Byb2Nlc3MoKS5uYW1lKS5yZXBsYWNlKCcvJywgJy0nKQor
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShhcHAgKyAiL0luZm8u
cGxpc3QiLCAiL3RtcC8iICsgcGlkICsgIkluZm8ucGxpc3QiKQorICAgICAgICAgICAgaWYgc2Vs
Zi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsnY3AnLCBhcHAgKyAnL0luZm8ucGxpc3QnLCAnL3Rt
cC8nICsgcGlkICsgJ0luZm8ucGxpc3QnXSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgaWYgc2VsZi5fZXhlY3V0aXZlLnJ1
bl9jb21tYW5kKFsncGx1dGlsJywgJy1jb252ZXJ0JywgJ3htbDEnLCAnL3RtcC8nICsgcGlkICsg
J0luZm8ucGxpc3QnXSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKToKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gTm9uZQorICAgICAgICAgICAgcGwgPSBwbGlzdGxpYi5yZWFkUGxpc3QoIi90bXAvIiAr
IHBpZCArICJJbmZvLnBsaXN0IikKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZXJyOgorICAg
ICAgICAgICAgcGwgPSBOb25lCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MucmVtb3Zl
KCIvdG1wLyIgKyBwaWQgKyAiSW5mby5wbGlzdCIpCisgICAgICAgICAgICBpZiBwbDoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcGxbIkNGQnVuZGxlSWRlbnRpZmllciJdCisgICAgICAgIGV4Y2Vw
dDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJuIE5vbmUKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW5fdGVzdGNhc2UucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbl90ZXN0Y2FzZS5weQkocmV2aXNpb24gMjA5
OTE4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbl90ZXN0Y2FzZS5weQko
d29ya2luZyBjb3B5KQpAQCAtMjAsNiArMjAsOSBAQAogIyBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQog
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogCitpbXBvcnQgb3MKK2ltcG9ydCBwbGlzdGxpYgorCiBmcm9tIHdlYmtp
dHB5LnBvcnQgaW1wb3J0IHBvcnRfdGVzdGNhc2UKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3Rl
bS5maWxlc3lzdGVtX21vY2sgaW1wb3J0IE1vY2tGaWxlU3lzdGVtCiBmcm9tIHdlYmtpdHB5LmNv
bW1vbi5zeXN0ZW0ub3V0cHV0Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQpAQCAtMTE5LDMg
KzEyMiwxMCBAQCBjbGFzcyBEYXJ3aW5UZXN0KHBvcnRfdGVzdGNhc2UuUG9ydFRlc3RDCiAgICAg
ICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCiAgICAgICAgIHBvcnQuX2V4ZWN1dGl2ZSA9IE1v
Y2tFeGVjdXRpdmUyKHJ1bl9jb21tYW5kX2ZuPXRocm93aW5nX3J1bl9jb21tYW5kKQogICAgICAg
ICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1dHMoc2VsZiwgcG9ydC5zYW1wbGVfcHJvY2Vz
cywgYXJncz1bJ3Rlc3QnLCA0Ml0pCisKKyAgICBkZWYgdGVzdF9wbGlzdChzZWxmKToKKyAgICAg
ICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKKyAgICAgICAgcGwgPSBkaWN0KENGQnVuZGxlSWRl
bnRpZmllcj0ib3JnLndlYmtpdC5kZW1vIikKKyAgICAgICAgcGxpc3RsaWIud3JpdGVQbGlzdChw
bCwgIi90bXAvSW5mby5wbGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5leHRy
YWN0QnVuZGxlSUQoIi90bXAiKSwgTm9uZSkKKyAgICAgICAgb3MucmVtb3ZlKCIvdG1wL0luZm8u
cGxpc3QiKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5CShyZXZpc2lv
biAyMDk5MTgpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzgsNyArMTM4LDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAg
ICAgIHNlbGYuX2RyaXZlcl91c2VyX2RpcmVjdG9yeV9zdWZmaXggPSBOb25lCiAgICAgICAgIHNl
bGYuX2RyaXZlcl91c2VyX2NhY2hlX2RpcmVjdG9yeSA9IE5vbmUKIAotICAgICAgICAjIFdlYktp
dFRlc3RSdW5uZXIvTGF5b3V0VGVzdFJlbGF5IGNhbiByZXBvcnQgYmFjayBzdWJwcm9jZXNzIGNy
YXNoZXMgYnkgcHJpbnRpbmcKKyAgICAgICAgIyBXZWJLaXRUZXN0UnVubmVyIGNhbiByZXBvcnQg
YmFjayBzdWJwcm9jZXNzIGNyYXNoZXMgYnkgcHJpbnRpbmcKICAgICAgICAgIyAiI0NSQVNIRUQg
LSBQUk9DRVNTTkFNRSIuICBTaW5jZSB0aG9zZSBjYW4gaGFwcGVuIGF0IGFueSB0aW1lIGFuZCBT
ZXJ2ZXJQcm9jZXNzCiAgICAgICAgICMgd29uJ3QgYmUgYXdhcmUgb2YgdGhlbSAoc2luY2UgdGhl
IGFjdHVhbCB0b29sIGRpZG4ndCBjcmFzaCwganVzdCBhIHN1YnByb2Nlc3MpCiAgICAgICAgICMg
d2UgcmVjb3JkIHRoZSBjcmFzaGVkIHN1YnByb2Nlc3MgbmFtZSBoZXJlLgpAQCAtMTgyLDYgKzE4
Miw3IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogICAgICAgICAiIiIKICAgICAgICAgc3RhcnRf
dGltZSA9IHRpbWUudGltZSgpCiAgICAgICAgIHNlbGYuc3RhcnQoZHJpdmVyX2lucHV0LnNob3Vs
ZF9ydW5fcGl4ZWxfdGVzdCwgZHJpdmVyX2lucHV0LmFyZ3MpCisgICAgICAgIHNlbGYuX3NlcnZl
cl9wcm9jZXNzLmNsZWFuKCkKICAgICAgICAgdGVzdF9iZWdpbl90aW1lID0gdGltZS50aW1lKCkK
ICAgICAgICAgc2VsZi5fZHJpdmVyX3RpbWVkX291dCA9IEZhbHNlCiAgICAgICAgIHNlbGYuX2Ny
YXNoX3JlcG9ydF9mcm9tX2RyaXZlciA9IE5vbmUKQEAgLTMyNyw3ICszMjgsNyBAQCBjbGFzcyBE
cml2ZXIob2JqZWN0KToKIAogICAgIGRlZiBfc2V0dXBfZW52aXJvbl9mb3JfZHJpdmVyKHNlbGYs
IGVudmlyb25tZW50KToKICAgICAgICAgYnVpbGRfcm9vdF9wYXRoID0gc3RyKHNlbGYuX3BvcnQu
X2J1aWxkX3BhdGgoKSkKLSAgICAgICAgIyBGSVhNRTogRFlMRF8qIHZhcmlhYmxlcyBzaG91bGQg
YmUgTWFjLW9ubHkuIEV2ZW4gaU9TIFNpbXVsYXRvciBkb2Vzbid0IG5lZWQgdGhlbSwgYXMgTGF5
b3V0VGVzdFJlbGF5IGlzIGEgaG9zdCBiaW5hcnkuCisgICAgICAgICMgRklYTUU6IERZTERfKiB2
YXJpYWJsZXMgc2hvdWxkIGJlIE1hYy1vbmx5LiBpT1Mgc2ltdWxhdG9ycyBzaG91bGQgaW5jbHVk
ZSB0aGVtIGluIGl0J3MgYXBwIGJ1bmRsZS4KICAgICAgICAgc2VsZi5fYXBwZW5kX2Vudmlyb25t
ZW50X3ZhcmlhYmxlX3BhdGgoZW52aXJvbm1lbnQsICdEWUxEX0xJQlJBUllfUEFUSCcsIGJ1aWxk
X3Jvb3RfcGF0aCkKICAgICAgICAgc2VsZi5fYXBwZW5kX2Vudmlyb25tZW50X3ZhcmlhYmxlX3Bh
dGgoZW52aXJvbm1lbnQsICdfX1hQQ19EWUxEX0xJQlJBUllfUEFUSCcsIGJ1aWxkX3Jvb3RfcGF0
aCkKICAgICAgICAgc2VsZi5fYXBwZW5kX2Vudmlyb25tZW50X3ZhcmlhYmxlX3BhdGgoZW52aXJv
bm1lbnQsICdEWUxEX0ZSQU1FV09SS19QQVRIJywgYnVpbGRfcm9vdF9wYXRoKQpAQCAtNjEwLDI0
ICs2MTEsMjAgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAKIAogIyBGSVhNRTogdGhpcyBzaG91
bGQgYmUgYWJzdHJhY3RlZCBvdXQgdmlhIHRoZSBQb3J0IHN1YmNsYXNzIHNvbWVob3cuCi1jbGFz
cyBJT1NTaW11bGF0b3JEcml2ZXIoRHJpdmVyKToKK2NsYXNzIERldmljZURyaXZlcihEcml2ZXIp
OgogICAgIGRlZiBjbWRfbGluZShzZWxmLCBwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyk6Ci0g
ICAgICAgIGNtZCA9IHN1cGVyKElPU1NpbXVsYXRvckRyaXZlciwgc2VsZikuY21kX2xpbmUocGl4
ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpCi0gICAgICAgIHJlbGF5X3Rvb2wgPSBzZWxmLl9wb3J0
LnJlbGF5X3BhdGgKKyAgICAgICAgY21kID0gc3VwZXIoRGV2aWNlRHJpdmVyLCBzZWxmKS5jbWRf
bGluZShwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncykKKyAgICAgICAgcmVsYXlfdG9vbCA9ICdy
dW4tb24tZGV2aWNlJwogICAgICAgICBkdW1wX3Rvb2wgPSBjbWRbMF0KICAgICAgICAgZHVtcF90
b29sX2FyZ3MgPSBjbWRbMTpdCiAgICAgICAgIHByb2R1Y3RfZGlyID0gc2VsZi5fcG9ydC5fYnVp
bGRfcGF0aCgpCi0gICAgICAgIHJlbGF5X2FyZ3MgPSBbCi0gICAgICAgICAgICAnLWRldmVsb3Bl
ckRpcicsIHNlbGYuX3BvcnQuZGV2ZWxvcGVyX2RpciwKLSAgICAgICAgICAgICctdWRpZCcsIHNl
bGYuX3BvcnQuZGV2aWNlX2lkX2Zvcl93b3JrZXJfbnVtYmVyKHNlbGYuX3dvcmtlcl9udW1iZXIp
LAotICAgICAgICAgICAgJy1wcm9kdWN0RGlyJywgcHJvZHVjdF9kaXIsCi0gICAgICAgICAgICAn
LWFwcCcsIGR1bXBfdG9vbCwKLSAgICAgICAgXQotICAgICAgICByZXR1cm4gW3JlbGF5X3Rvb2xd
ICsgcmVsYXlfYXJncyArIFsnLS0nXSArIGR1bXBfdG9vbF9hcmdzCisKKyAgICAgICAgcmVsYXlf
YXJncyA9IFtzZWxmLl9wb3J0LmRldmljZV9pZF9mb3Jfd29ya2VyX251bWJlcihzZWxmLl93b3Jr
ZXJfbnVtYmVyKSwgZHVtcF90b29sXQorICAgICAgICByZXR1cm4gW3JlbGF5X3Rvb2xdICsgcmVs
YXlfYXJncyArIGR1bXBfdG9vbF9hcmdzCiAKICAgICBkZWYgX3NldHVwX2Vudmlyb25fZm9yX2Ry
aXZlcihzZWxmLCBlbnZpcm9ubWVudCk6CiAgICAgICAgIGVudmlyb25tZW50WydERVZFTE9QRVJf
RElSJ10gPSBzZWxmLl9wb3J0LmRldmVsb3Blcl9kaXIKLSAgICAgICAgcmV0dXJuIHN1cGVyKElP
U1NpbXVsYXRvckRyaXZlciwgc2VsZikuX3NldHVwX2Vudmlyb25fZm9yX2RyaXZlcihlbnZpcm9u
bWVudCkKKyAgICAgICAgcmV0dXJuIHN1cGVyKERldmljZURyaXZlciwgc2VsZikuX3NldHVwX2Vu
dmlyb25fZm9yX2RyaXZlcihlbnZpcm9ubWVudCkKIAogCiBjbGFzcyBDb250ZW50QmxvY2sob2Jq
ZWN0KToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQkocmV2aXNpb24gMjA5OTE4
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQkod29ya2luZyBjb3B5KQpA
QCAtMzQsMTQgKzM0LDEwOCBAQCBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMudGVz
dF9jCiBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGNvbmZpZyBhcyBwb3J0X2NvbmZpZwogZnJv
bSB3ZWJraXRweS5wb3J0IGltcG9ydCBkcml2ZXIsIGltYWdlX2RpZmYKIGZyb20gd2Via2l0cHku
cG9ydC5kYXJ3aW4gaW1wb3J0IERhcndpblBvcnQKLWZyb20gd2Via2l0cHkueGNvZGUuc2ltdWxh
dG9yIGltcG9ydCBTaW11bGF0b3IsIFJ1bnRpbWUsIERldmljZVR5cGUKK2Zyb20gd2Via2l0cHku
eGNvZGUuc2ltdWxhdG9yIGltcG9ydCBTaW11bGF0b3IsIFJ1bnRpbWUsIERldmljZVR5cGUsIERl
dmljZQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hM
b2dzCiAKLQogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCiAKLWNsYXNzIElP
U1BvcnQoRGFyd2luUG9ydCk6CitjbGFzcyBJT1NCYXNlKERhcndpblBvcnQpOgorCisgICAgU1VC
UFJPQ0VTU19DUkFTSF9SRUdFWCA9IHJlLmNvbXBpbGUoJyNDUkFTSEVEIC0gKD9QPHN1YnByb2Nl
c3NfbmFtZT5cUyspIFwocGlkICg/UDxzdWJwcm9jZXNzX3BpZD5cZCspXCknKQorCisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpOgorICAgICAgICBEYXJ3
aW5Qb3J0Ll9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpCisgICAgICAg
IHNlbGYuX3ByaW50aW5nX2NtZF9saW5lID0gRmFsc2UKKworICAgIGRlZiBkcml2ZXJfbmFtZShz
ZWxmKToKKyAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCdkcml2ZXJfbmFtZScpOgorICAgICAg
ICAgICAgcmV0dXJuIHNlbGYuZ2V0X29wdGlvbignZHJpdmVyX25hbWUnKQorICAgICAgICBpZiBz
ZWxmLmdldF9vcHRpb24oJ3dlYmtpdF90ZXN0X3J1bm5lcicpOgorICAgICAgICAgICAgcmV0dXJu
ICdXZWJLaXRUZXN0UnVubmVyQXBwLmFwcCcKKyAgICAgICAgcmV0dXJuICdEdW1wUmVuZGVyVHJl
ZS5hcHAnCisKKyAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQs
IHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbj10aW1lLnRpbWUsIHNsZWVwX2ZuPXRpbWUuc2xl
ZXAsIHdhaXRfZm9yX2xvZz1UcnVlKToKKyAgICAgICAgdGltZV9mbiA9IHRpbWVfZm4gb3IgdGlt
ZS50aW1lCisgICAgICAgIHNsZWVwX2ZuID0gc2xlZXBfZm4gb3IgdGltZS5zbGVlcAorCisgICAg
ICAgICMgRklYTUU6IFdlIHNob3VsZCBjb2xsZWN0IHRoZSBhY3R1YWwgY3Jhc2ggbG9nIGZvciBE
dW1wUmVuZGVyVHJlZS5hcHAgYmVjYXVzZSBpdCBpbmNsdWRlcyBtb3JlCisgICAgICAgICMgaW5m
b3JtYXRpb24gKGUuZy4gZXhjZXB0aW9uIGNvZGVzKSB0aGFuIGlzIGF2YWlsYWJsZSBpbiB0aGUg
c3RhY2sgdHJhY2Ugd3JpdHRlbiB0byBzdGFuZGFyZCBlcnJvci4KKyAgICAgICAgc3RkZXJyX2xp
bmVzID0gW10KKyAgICAgICAgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZCA9IE5vbmUg
ICMgZS5nLiAoJ0R1bXBSZW5kZXJUcmVlLmFwcCcsIDEyMzQpCisgICAgICAgIGZvciBsaW5lIGlu
IChzdGRlcnIgb3IgJycpLnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIGlmIG5vdCBjcmFzaGVk
X3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlkOgorICAgICAgICAgICAgICAgIG1hdGNoID0gc2VsZi5T
VUJQUk9DRVNTX0NSQVNIX1JFR0VYLm1hdGNoKGxpbmUpCisgICAgICAgICAgICAgICAgaWYgbWF0
Y2g6CisgICAgICAgICAgICAgICAgICAgIGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9waWQg
PSAobWF0Y2guZ3JvdXAoJ3N1YnByb2Nlc3NfbmFtZScpLCBpbnQobWF0Y2guZ3JvdXAoJ3N1YnBy
b2Nlc3NfcGlkJykpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAg
c3RkZXJyX2xpbmVzLmFwcGVuZChsaW5lKQorCisgICAgICAgIGlmIGNyYXNoZWRfc3VicHJvY2Vz
c19uYW1lX2FuZF9waWQ6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X2NyYXNoX2xvZyhj
cmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlkWzBdLCBjcmFzaGVkX3N1YnByb2Nlc3NfbmFt
ZV9hbmRfcGlkWzFdLCBzdGRvdXQsCisgICAgICAgICAgICAgICAgJ1xuJy5qb2luKHN0ZGVycl9s
aW5lcyksIG5ld2VyX3RoYW4sIHRpbWVfZm4sIHNsZWVwX2ZuLCB3YWl0X2Zvcl9sb2cpCisKKyAg
ICAgICAgX2xvZy5kZWJ1ZygnbG9va2luZyBmb3IgY3Jhc2ggbG9nIGZvciAlczolcycgJSAobmFt
ZSwgc3RyKHBpZCkpKQorICAgICAgICBjcmFzaF9sb2cgPSAnJworICAgICAgICBjcmFzaF9sb2dz
ID0gQ3Jhc2hMb2dzKHNlbGYuaG9zdCkKKyAgICAgICAgbm93ID0gdGltZV9mbigpCisgICAgICAg
IGRlYWRsaW5lID0gbm93ICsgNSAqIGludChzZWxmLmdldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3Nl
cycsIDEpKQorICAgICAgICB3aGlsZSBub3QgY3Jhc2hfbG9nIGFuZCBub3cgPD0gZGVhZGxpbmU6
CisgICAgICAgICAgICBjcmFzaF9sb2cgPSBjcmFzaF9sb2dzLmZpbmRfbmV3ZXN0X2xvZyhuYW1l
LCBwaWQsIGluY2x1ZGVfZXJyb3JzPVRydWUsIG5ld2VyX3RoYW49bmV3ZXJfdGhhbikKKyAgICAg
ICAgICAgIGlmIG5vdCB3YWl0X2Zvcl9sb2c6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAg
ICAgICAgIGlmIG5vdCBjcmFzaF9sb2cgb3Igbm90IFtsaW5lIGZvciBsaW5lIGluIGNyYXNoX2xv
Zy5zcGxpdGxpbmVzKCkgaWYgbm90IGxpbmUuc3RhcnRzd2l0aCgnRVJST1InKV06CisgICAgICAg
ICAgICAgICAgc2xlZXBfZm4oMC4xKQorICAgICAgICAgICAgICAgIG5vdyA9IHRpbWVfZm4oKQor
CisgICAgICAgIGlmIG5vdCBjcmFzaF9sb2c6CisgICAgICAgICAgICByZXR1cm4gc3RkZXJyLCBO
b25lCisgICAgICAgIHJldHVybiBzdGRlcnIsIGNyYXNoX2xvZworCisgICAgZGVmIF90ZXN0aW5n
X2RldmljZShzZWxmLCBudW1iZXIpOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGRl
dmljZV9pZF9mb3Jfd29ya2VyX251bWJlcihzZWxmLCBudW1iZXIpOgorICAgICAgICBpZiBzZWxm
Ll9wcmludGluZ19jbWRfbGluZSBvciBub3Qgc2VsZi5fdGVzdGluZ19kZXZpY2UobnVtYmVyKToK
KyAgICAgICAgICAgIHJldHVybiAnPGR1bW15IGlkPicKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Rl
c3RpbmdfZGV2aWNlKG51bWJlcikudWRpZAorCisgICAgZGVmIF9kcml2ZXJfY2xhc3Moc2VsZik6
CisgICAgICAgIHJldHVybiBkcml2ZXIuRGV2aWNlRHJpdmVyCisKKyAgICBkZWYgZGV2aWNlRGVm
aW5lZChzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfZGV2aWNlUGluZyhz
ZWxmLCBkZXZpY2UpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBfZGV2aWNlSW5z
dGFsbChzZWxmLCBkZXZpY2UsIGFwcCk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVm
IF9kZXZpY2VSdW4oc2VsZiwgY21kLCBlbnZpPU5vbmUpOgorICAgICAgICByZXR1cm4gTm9uZQor
CisgICAgZGVmIF9kZXZpY2VLaWxsKHNlbGYsIGRldmljZSwgYXBwKToKKyAgICAgICAgcmV0dXJu
IEZhbHNlCisKKyAgICBkZWYgcnVuT25EZXZpY2Uoc2VsZiwgY21kLCBlbnZpPU5vbmUpOgorICAg
ICAgICBpZiBub3QgY21kOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgaWYgY21k
WzBdID09ICdwaW5nJzoKKyAgICAgICAgICAgIGlmIGxlbihjbWQpID49IDI6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHNlbGYuX2RldmljZVBpbmcoY21kWzFdKQorICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZGV2aWNlUGluZyhOb25lKQorICAgICAgICBl
bGlmIGNtZFswXSA9PSAncnVuJzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9kZXZpY2VSdW4o
Y21kWzE6XSwgZW52aSkKKyAgICAgICAgZWxpZiBjbWRbMF0gPT0gJ2luc3RhbGwnOgorICAgICAg
ICAgICAgcmV0dXJuIHNlbGYuX2RldmljZUluc3RhbGwoY21kWzFdLCBjbWRbMl0pCisgICAgICAg
IGVsaWYgY21kWzBdID09ICdraWxsJzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9kZXZpY2VL
aWxsKGNtZFsxXSwgY21kWzJdKQorICAgICAgICByZXR1cm4gTm9uZQorCisKK2NsYXNzIElPU1Bv
cnQoSU9TQmFzZSk6CiAgICAgcG9ydF9uYW1lID0gImlvcyIKIAogICAgIEFSQ0hJVEVDVFVSRVMg
PSBbJ2FybXY3JywgJ2FybXY3cycsICdhcm02NCddCkBAIC02Niw3ICsxNjAsNyBAQCBjbGFzcyBJ
T1NQb3J0KERhcndpblBvcnQpOgogICAgICAgICByZXR1cm4gJ2lvcycKIAogCi1jbGFzcyBJT1NT
aW11bGF0b3JQb3J0KERhcndpblBvcnQpOgorY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChJT1NCYXNl
KToKICAgICBwb3J0X25hbWUgPSAiaW9zLXNpbXVsYXRvciIKIAogICAgIEZVVFVSRV9WRVJTSU9O
ID0gJ2Z1dHVyZScKQEAgLTc4LDcgKzE3Miw2IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFy
d2luUG9ydCk6CiAgICAgU0RLID0gJ2lwaG9uZXNpbXVsYXRvcicKIAogICAgIFNJTVVMQVRPUl9C
VU5ETEVfSUQgPSAnY29tLmFwcGxlLmlwaG9uZXNpbXVsYXRvcicKLSAgICByZWxheV9uYW1lID0g
J0xheW91dFRlc3RSZWxheScKICAgICBTSU1VTEFUT1JfRElSRUNUT1JZID0gIi90bXAvV2ViS2l0
VGVzdGluZ1NpbXVsYXRvcnMvIgogICAgIExTUkVHSVNURVJfUEFUSCA9ICIvU3lzdGVtL0xpYnJh
cnkvRnJhbWV3b3Jrcy9Db3JlU2VydmljZXMuZnJhbWV3b3JrL0ZyYW1ld29ya3MvTGF1bmNoU2Vy
dmljZXMuZnJhbWV3b3JrL1ZlcnNpb25zL0N1cnJlbnQvU3VwcG9ydC9sc3JlZ2lzdGVyIgogICAg
IFBST0NFU1NfQ09VTlRfRVNUSU1BVEVfUEVSX1NJTVVMQVRPUl9JTlNUQU5DRSA9IDEwMApAQCAt
OTYsMTAgKzE4OSw5IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAgICAg
fQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpOgot
ICAgICAgICBEYXJ3aW5Qb3J0Ll9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2Fy
Z3MpCisgICAgICAgIElPU0Jhc2UuX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3
YXJncykKIAogICAgICAgICBvcHRpb25hbF9kZXZpY2VfY2xhc3MgPSBzZWxmLmdldF9vcHRpb24o
J2RldmljZV9jbGFzcycpCi0gICAgICAgIHNlbGYuX3ByaW50aW5nX2NtZF9saW5lID0gRmFsc2UK
ICAgICAgICAgc2VsZi5fZGV2aWNlX2NsYXNzID0gb3B0aW9uYWxfZGV2aWNlX2NsYXNzIGlmIG9w
dGlvbmFsX2RldmljZV9jbGFzcyBlbHNlIHNlbGYuREVGQVVMVF9ERVZJQ0VfQ0xBU1MKICAgICAg
ICAgX2xvZy5kZWJ1ZygnSU9TU2ltdWxhdG9yUG9ydCBfZGV2aWNlX2NsYXNzIGlzICVzJywgc2Vs
Zi5fZGV2aWNlX2NsYXNzKQogCkBAIC0xNDgsMTYgKzI0MCw2IEBAIGNsYXNzIElPU1NpbXVsYXRv
clBvcnQoRGFyd2luUG9ydCk6CiAgICAgICAgICAgICBkZXZpY2VfdHlwZSA9IERldmljZVR5cGUu
ZnJvbV9uYW1lKGRldmljZV9uYW1lKQogICAgICAgICByZXR1cm4gZGV2aWNlX3R5cGUKIAotICAg
IEBwcm9wZXJ0eQotICAgIEBtZW1vaXplZAotICAgIGRlZiByZWxheV9wYXRoKHNlbGYpOgotICAg
ICAgICBpZiBzZWxmLl9yb290X3dhc19zZXQ6Ci0gICAgICAgICAgICBwYXRoID0gc2VsZi5fZmls
ZXN5c3RlbS5hYnNwYXRoKHNlbGYuZ2V0X29wdGlvbigncm9vdCcpKQotICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgbWFjX2NvbmZpZyA9IHBvcnRfY29uZmlnLkNvbmZpZyhzZWxmLl9leGVjdXRp
dmUsIHNlbGYuX2ZpbGVzeXN0ZW0sICdtYWMnKQotICAgICAgICAgICAgcGF0aCA9IG1hY19jb25m
aWcuYnVpbGRfZGlyZWN0b3J5KHNlbGYuZ2V0X29wdGlvbignY29uZmlndXJhdGlvbicpKQotICAg
ICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHBhdGgsIHNlbGYucmVsYXlfbmFtZSkK
LQogICAgIEBtZW1vaXplZAogICAgIGRlZiBjaGlsZF9wcm9jZXNzZXMoc2VsZik6CiAgICAgICAg
IHJldHVybiBpbnQoc2VsZi5nZXRfb3B0aW9uKCdjaGlsZF9wcm9jZXNzZXMnKSkKQEAgLTE4Miw3
NSArMjY0LDEyIEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAKICAgICAg
ICAgcmV0dXJuIG1pbihtYXhpbXVtX3NpbXVsYXRvcl9jb3VudF9vbl90aGlzX3N5c3RlbSwgYmVz
dF9jaGlsZF9wcm9jZXNzX2NvdW50X2Zvcl9jcHUpCiAKLSAgICBkZWYgX2NoZWNrX3JlbGF5KHNl
bGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMoc2VsZi5yZWxheV9w
YXRoKToKLSAgICAgICAgICAgIF9sb2cuZXJyb3IoIiVzIHdhcyBub3QgZm91bmQgYXQgJXMiICUg
KHNlbGYucmVsYXlfbmFtZSwgc2VsZi5yZWxheV9wYXRoKSkKLSAgICAgICAgICAgIHJldHVybiBG
YWxzZQotICAgICAgICByZXR1cm4gVHJ1ZQotCiAgICAgZGVmIF9jaGVja19wb3J0X2J1aWxkKHNl
bGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5fcm9vdF93YXNfc2V0IGFuZCBzZWxmLmdldF9vcHRp
b24oJ2J1aWxkJykgYW5kIG5vdCBzZWxmLl9idWlsZF9yZWxheSgpOgotICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCi0gICAgICAgIGlmIG5vdCBzZWxmLl9jaGVja19yZWxheSgpOgotICAgICAgICAg
ICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYgX2dldF9jcmFz
aF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9m
bj10aW1lLnRpbWUsIHNsZWVwX2ZuPXRpbWUuc2xlZXAsIHdhaXRfZm9yX2xvZz1UcnVlKToKLSAg
ICAgICAgdGltZV9mbiA9IHRpbWVfZm4gb3IgdGltZS50aW1lCi0gICAgICAgIHNsZWVwX2ZuID0g
c2xlZXBfZm4gb3IgdGltZS5zbGVlcAotCi0gICAgICAgICMgRklYTUU6IFdlIHNob3VsZCBjb2xs
ZWN0IHRoZSBhY3R1YWwgY3Jhc2ggbG9nIGZvciBEdW1wUmVuZGVyVHJlZS5hcHAgYmVjYXVzZSBp
dCBpbmNsdWRlcyBtb3JlCi0gICAgICAgICMgaW5mb3JtYXRpb24gKGUuZy4gZXhjZXB0aW9uIGNv
ZGVzKSB0aGFuIGlzIGF2YWlsYWJsZSBpbiB0aGUgc3RhY2sgdHJhY2Ugd3JpdHRlbiB0byBzdGFu
ZGFyZCBlcnJvci4KLSAgICAgICAgc3RkZXJyX2xpbmVzID0gW10KLSAgICAgICAgY3Jhc2hlZF9z
dWJwcm9jZXNzX25hbWVfYW5kX3BpZCA9IE5vbmUgICMgZS5nLiAoJ0R1bXBSZW5kZXJUcmVlLmFw
cCcsIDEyMzQpCi0gICAgICAgIGZvciBsaW5lIGluIChzdGRlcnIgb3IgJycpLnNwbGl0bGluZXMo
KToKLSAgICAgICAgICAgIGlmIG5vdCBjcmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlkOgot
ICAgICAgICAgICAgICAgIG1hdGNoID0gc2VsZi5TVUJQUk9DRVNTX0NSQVNIX1JFR0VYLm1hdGNo
KGxpbmUpCi0gICAgICAgICAgICAgICAgaWYgbWF0Y2g6Ci0gICAgICAgICAgICAgICAgICAgIGNy
YXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9waWQgPSAobWF0Y2guZ3JvdXAoJ3N1YnByb2Nlc3Nf
bmFtZScpLCBpbnQobWF0Y2guZ3JvdXAoJ3N1YnByb2Nlc3NfcGlkJykpKQotICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgc3RkZXJyX2xpbmVzLmFwcGVuZChsaW5lKQot
Ci0gICAgICAgIGlmIGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9waWQ6Ci0gICAgICAgICAg
ICByZXR1cm4gc2VsZi5fZ2V0X2NyYXNoX2xvZyhjcmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRf
cGlkWzBdLCBjcmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlkWzFdLCBzdGRvdXQsCi0gICAg
ICAgICAgICAgICAgJ1xuJy5qb2luKHN0ZGVycl9saW5lcyksIG5ld2VyX3RoYW4sIHRpbWVfZm4s
IHNsZWVwX2ZuLCB3YWl0X2Zvcl9sb2cpCi0KLSAgICAgICAgIyBMYXlvdXRUZXN0UmVsYXkgY3Jh
c2hlZAotICAgICAgICBfbG9nLmRlYnVnKCdsb29raW5nIGZvciBjcmFzaCBsb2cgZm9yICVzOiVz
JyAlIChuYW1lLCBzdHIocGlkKSkpCi0gICAgICAgIGNyYXNoX2xvZyA9ICcnCi0gICAgICAgIGNy
YXNoX2xvZ3MgPSBDcmFzaExvZ3Moc2VsZi5ob3N0KQotICAgICAgICBub3cgPSB0aW1lX2ZuKCkK
LSAgICAgICAgZGVhZGxpbmUgPSBub3cgKyA1ICogaW50KHNlbGYuZ2V0X29wdGlvbignY2hpbGRf
cHJvY2Vzc2VzJywgMSkpCi0gICAgICAgIHdoaWxlIG5vdCBjcmFzaF9sb2cgYW5kIG5vdyA8PSBk
ZWFkbGluZToKLSAgICAgICAgICAgIGNyYXNoX2xvZyA9IGNyYXNoX2xvZ3MuZmluZF9uZXdlc3Rf
bG9nKG5hbWUsIHBpZCwgaW5jbHVkZV9lcnJvcnM9VHJ1ZSwgbmV3ZXJfdGhhbj1uZXdlcl90aGFu
KQotICAgICAgICAgICAgaWYgbm90IHdhaXRfZm9yX2xvZzoKLSAgICAgICAgICAgICAgICBicmVh
awotICAgICAgICAgICAgaWYgbm90IGNyYXNoX2xvZyBvciBub3QgW2xpbmUgZm9yIGxpbmUgaW4g
Y3Jhc2hfbG9nLnNwbGl0bGluZXMoKSBpZiBub3QgbGluZS5zdGFydHN3aXRoKCdFUlJPUicpXToK
LSAgICAgICAgICAgICAgICBzbGVlcF9mbigwLjEpCi0gICAgICAgICAgICAgICAgbm93ID0gdGlt
ZV9mbigpCi0KLSAgICAgICAgaWYgbm90IGNyYXNoX2xvZzoKLSAgICAgICAgICAgIHJldHVybiBz
dGRlcnIsIE5vbmUKLSAgICAgICAgcmV0dXJuIHN0ZGVyciwgY3Jhc2hfbG9nCi0KLSAgICBkZWYg
X2J1aWxkX3JlbGF5KHNlbGYpOgotICAgICAgICBlbnZpcm9ubWVudCA9IHNlbGYuaG9zdC5jb3B5
X2N1cnJlbnRfZW52aXJvbm1lbnQoKQotICAgICAgICBlbnZpcm9ubWVudC5kaXNhYmxlX2djY19z
bWFydHF1b3RlcygpCi0gICAgICAgIGVudiA9IGVudmlyb25tZW50LnRvX2RpY3Rpb25hcnkoKQot
Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgRklYTUU6IFdlIHNob3VsZCBiZSBwYXNzaW5n
IF9hcmd1bWVudHNfZm9yX2NvbmZpZ3VyYXRpb24oKSwgd2hpY2ggcmVzcGVjdHMgYnVpbGQgY29u
ZmlndXJhdGlvbiBhbmQgcG9ydCwKLSAgICAgICAgICAgICMgaW5zdGVhZCBvZiBoYXJkY29kaW5n
IC0taW9zLXNpbXVsYXRvci4KLSAgICAgICAgICAgIHNlbGYuX3J1bl9zY3JpcHQoImJ1aWxkLWxh
eW91dHRlc3RyZWxheSIsIGFyZ3M9WyItLWlvcy1zaW11bGF0b3IiXSwgZW52PWVudikKLSAgICAg
ICAgZXhjZXB0IFNjcmlwdEVycm9yLCBlOgotICAgICAgICAgICAgX2xvZy5lcnJvcihlLm1lc3Nh
Z2Vfd2l0aF9vdXRwdXQob3V0cHV0X2xpbWl0PU5vbmUpKQotICAgICAgICAgICAgcmV0dXJuIEZh
bHNlCiAgICAgICAgIHJldHVybiBUcnVlCiAKICAgICBkZWYgX2J1aWxkX2RyaXZlcihzZWxmKToK
ICAgICAgICAgYnVpbHRfdG9vbCA9IHN1cGVyKElPU1NpbXVsYXRvclBvcnQsIHNlbGYpLl9idWls
ZF9kcml2ZXIoKQotICAgICAgICBidWlsdF9yZWxheSA9IHNlbGYuX2J1aWxkX3JlbGF5KCkKLSAg
ICAgICAgcmV0dXJuIGJ1aWx0X3Rvb2wgYW5kIGJ1aWx0X3JlbGF5CisgICAgICAgIHJldHVybiBi
dWlsdF90b29sCiAKICAgICBkZWYgX2J1aWxkX2RyaXZlcl9mbGFncyhzZWxmKToKICAgICAgICAg
YXJjaHMgPSBbJ0FSQ0hTPWkzODYnXSBpZiBzZWxmLmFyY2hpdGVjdHVyZSgpID09ICd4ODYnIGVs
c2UgW10KQEAgLTI2NCw5ICsyODMsNiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBv
cnQpOgogICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zLmFwcGVuZChUZXN0Q29uZmlndXJh
dGlvbih2ZXJzaW9uPXNlbGYuX3ZlcnNpb24sIGFyY2hpdGVjdHVyZT1hcmNoaXRlY3R1cmUsIGJ1
aWxkX3R5cGU9YnVpbGRfdHlwZSkpCiAgICAgICAgIHJldHVybiBjb25maWd1cmF0aW9ucwogCi0g
ICAgZGVmIF9kcml2ZXJfY2xhc3Moc2VsZik6Ci0gICAgICAgIHJldHVybiBkcml2ZXIuSU9TU2lt
dWxhdG9yRHJpdmVyCi0KICAgICBkZWYgZGVmYXVsdF9iYXNlbGluZV9zZWFyY2hfcGF0aChzZWxm
KToKICAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd3ZWJraXRfdGVzdF9ydW5uZXInKToKICAg
ICAgICAgICAgIGZhbGxiYWNrX25hbWVzID0gW3NlbGYuX3drMl9wb3J0X25hbWUoKV0gKyBbc2Vs
Zi5wb3J0X25hbWVdICsgWyd3azInXQpAQCAtMzk5LDggKzQxNSw2IEBAIGNsYXNzIElPU1NpbXVs
YXRvclBvcnQoRGFyd2luUG9ydCk6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAg
cmV0dXJuIHN1cGVyKElPU1NpbXVsYXRvclBvcnQsIHNlbGYpLmNoZWNrX3N5c19kZXBzKG5lZWRz
X2h0dHApCiAKLSAgICBTVUJQUk9DRVNTX0NSQVNIX1JFR0VYID0gcmUuY29tcGlsZSgnI0NSQVNI
RUQgLSAoP1A8c3VicHJvY2Vzc19uYW1lPlxTKykgXChwaWQgKD9QPHN1YnByb2Nlc3NfcGlkPlxk
KylcKScpCi0KICAgICBkZWYgX3VzaW5nX2RlZGljYXRlZF9zaW11bGF0b3JzKHNlbGYpOgogICAg
ICAgICByZXR1cm4gc2VsZi5nZXRfb3B0aW9uKCdkZWRpY2F0ZWRfc2ltdWxhdG9ycycpCiAKQEAg
LTQ3NSwzICs0ODksNTcgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAg
ICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJpbnN0YWxsX25hbWVfdG9vbCIsICItYWRk
X3JwYXRoIiwgc2VsZi5kZXZlbG9wZXJfZGlyICsgIi8uLi9GcmFtZXdvcmtzLyIsIGRlc3RpbmF0
aW9uICsgIi9Db250ZW50cy9NYWNPUy9TaW11bGF0b3IiXSkKICAgICAgICAgc3VicHJvY2Vzcy5j
aGVja19vdXRwdXQoWyJjb2Rlc2lnbiIsICItZnMiLCAiLSIsIGRlc3RpbmF0aW9uXSkKICAgICAg
ICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoW3NlbGYuTFNSRUdJU1RFUl9QQVRILCAiLWYiLCBk
ZXN0aW5hdGlvbl0pCisKKyAgICBkZWYgX2RldmljZVBpbmcoc2VsZiwgZGV2aWNlKToKKyAgICAg
ICAgZGF0YSA9IHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ3hjcnVuJywgJ3NpbWN0bCcs
ICdsaXN0J10pCisgICAgICAgIGlmIGRldmljZSBhbmQgZGV2aWNlICsgJykgKEJvb3RlZCknIGlu
IGRhdGE6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKwor
ICAgIGRlZiBfZGV2aWNlSW5zdGFsbChzZWxmLCBkZXZpY2UsIGFwcCk6CisgICAgICAgIGlmIG5v
dCBzZWxmLl9kZXZpY2VQaW5nKGRldmljZSk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAg
ICAgICAgcmV0dXJuIG5vdCBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoWworICAgICAgICAg
ICAgJ3hjcnVuJywKKyAgICAgICAgICAgICdzaW1jdGwnLAorICAgICAgICAgICAgJ2luc3RhbGwn
LAorICAgICAgICAgICAgZGV2aWNlLAorICAgICAgICAgICAgYXBwLAorICAgICAgICBdLCByZXR1
cm5fZXhpdF9jb2RlPVRydWUpCisKKyAgICBkZWYgX2RldmljZVJ1bihzZWxmLCBjbWQsIGVudmk9
Tm9uZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLl9kZXZpY2VQaW5nKGNtZFswXSk6CisgICAgICAg
ICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgYXBwaWQgPSBzZWxmLmV4dHJhY3RCdW5kbGVJRChj
bWRbMV0pCisgICAgICAgIGlmIG5vdCBhcHBpZDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQor
ICAgICAgICBzZWxmLl9kZXZpY2VLaWxsKGNtZFswXSwgY21kWzFdKQorCisgICAgICAgIHRyYW5z
ZmVyZWRFbnZpcm9ubWVudCA9IHt9CisgICAgICAgIGZvciB2YWx1ZSBpbiBlbnZpOgorICAgICAg
ICAgICAgaWYgbm90ICJTSU1DVExfQ0hJTERfIiBpbiB2YWx1ZToKKyAgICAgICAgICAgICAgICB0
cmFuc2ZlcmVkRW52aXJvbm1lbnRbJ1NJTUNUTF9DSElMRF8nICsgdmFsdWVdID0gZW52aVt2YWx1
ZV0KKyAgICAgICAgICAgIHRyYW5zZmVyZWRFbnZpcm9ubWVudFt2YWx1ZV0gPSBlbnZpW3ZhbHVl
XQorCisgICAgICAgIHJldHVybiBub3Qgc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsKKyAg
ICAgICAgICAgICd4Y3J1bicsCisgICAgICAgICAgICAnc2ltY3RsJywKKyAgICAgICAgICAgICds
YXVuY2gnLAorICAgICAgICAgICAgY21kWzBdLAorICAgICAgICAgICAgYXBwaWQsCisgICAgICAg
IF0gKyBjbWRbMjpdLAorICAgICAgICBlbnY9dHJhbnNmZXJlZEVudmlyb25tZW50LAorICAgICAg
ICByZXR1cm5fZXhpdF9jb2RlPVRydWUpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYg
X2RldmljZUtpbGwoc2VsZiwgZGV2aWNlLCBhcHApOgorICAgICAgICBhZGRpZCA9IHNlbGYuZXh0
cmFjdEJ1bmRsZUlEKGFwcCkKKyAgICAgICAgaWYgbm90IGFkZGlkOgorICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBub3Qgc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5k
KFsKKyAgICAgICAgICAgICd4Y3J1bicsCisgICAgICAgICAgICAnc2ltY3RsJywKKyAgICAgICAg
ICAgICd0ZXJtaW5hdGUnLAorICAgICAgICAgICAgZGV2aWNlLAorICAgICAgICAgICAgYWRkaWQs
CisgICAgICAgIF0sIHJldHVybl9leGl0X2NvZGU9VHJ1ZSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2lvc191bml0dGVzdC5weQkocmV2aXNpb24gMjA5OTE4KQorKysgVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpA
QCAtMjIsOCArMjIsOSBAQAogCiBpbXBvcnQgdGltZQogCitmcm9tIHdlYmtpdHB5LnBvcnQuaW9z
IGltcG9ydCBJT1NQb3J0CiBmcm9tIHdlYmtpdHB5LnBvcnQuaW9zIGltcG9ydCBJT1NTaW11bGF0
b3JQb3J0Ci1mcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGRhcndpbl90ZXN0Y2FzZQorZnJvbSB3
ZWJraXRweS5wb3J0IGltcG9ydCBpb3NiYXNlX3Rlc3RjYXNlCiBmcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0uZmlsZXN5c3RlbV9tb2NrIGltcG9ydCBNb2NrRmlsZVN5c3RlbQogZnJvbSB3ZWJr
aXRweS5jb21tb24uc3lzdGVtLm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKIGZy
b20gd2Via2l0cHkudG9vbC5tb2NrdG9vbCBpbXBvcnQgTW9ja09wdGlvbnMKQEAgLTMxLDcgKzMy
LDIwIEBAIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmVfbW8KIGZyb20gd2Vi
a2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1ob3N0X21vY2sgaW1wb3J0IE1vY2tTeXN0ZW1Ib3N0
CiAKIAotY2xhc3MgaW9zVGVzdChkYXJ3aW5fdGVzdGNhc2UuRGFyd2luVGVzdCk6CitjbGFzcyBJ
T1NUZXN0KGlvc2Jhc2VfdGVzdGNhc2UuSU9TQmFzZVRlc3QpOgorICAgIG9zX25hbWUgPSAnaW9z
JworICAgIG9zX3ZlcnNpb24gPSAnJworICAgIHBvcnRfbmFtZSA9ICdpb3MnCisgICAgcG9ydF9t
YWtlciA9IElPU1BvcnQKKyAgICBpc19zaW11bGF0b3IgPSBGYWxzZQorCisgICAgZGVmIG1ha2Vf
cG9ydChzZWxmLCBob3N0PU5vbmUsIHBvcnRfbmFtZT1Ob25lLCBvcHRpb25zPU5vbmUsIG9zX25h
bWU9Tm9uZSwgb3NfdmVyc2lvbj1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgIHBvcnQgPSBzdXBl
cihJT1NUZXN0LCBzZWxmKS5tYWtlX3BvcnQoaG9zdD1ob3N0LCBwb3J0X25hbWU9cG9ydF9uYW1l
LCBvcHRpb25zPW9wdGlvbnMsIG9zX25hbWU9b3NfbmFtZSwgc192ZXJzaW9uPW9zX3ZlcnNpb24s
IGt3YXJncz1rd2FyZ3MpCisgICAgICAgIHBvcnQuc2V0X29wdGlvbignY2hpbGRfcHJvY2Vzc2Vz
JywgMSkKKyAgICAgICAgcmV0dXJuIHBvcnQKKworCitjbGFzcyBJT1NTaW11bGF0b3JUZXN0KGlv
c2Jhc2VfdGVzdGNhc2UuSU9TQmFzZVRlc3QpOgogICAgIG9zX25hbWUgPSAnaW9zLXNpbXVsYXRv
cicKICAgICBvc192ZXJzaW9uID0gJycKICAgICBwb3J0X25hbWUgPSAnaW9zLXNpbXVsYXRvcicK
QEAgLTM5LDcgKzUzLDcgQEAgY2xhc3MgaW9zVGVzdChkYXJ3aW5fdGVzdGNhc2UuRGFyd2luVGVz
dAogICAgIGlzX3NpbXVsYXRvciA9IFRydWUKIAogICAgIGRlZiBtYWtlX3BvcnQoc2VsZiwgaG9z
dD1Ob25lLCBwb3J0X25hbWU9Tm9uZSwgb3B0aW9ucz1Ob25lLCBvc19uYW1lPU5vbmUsIG9zX3Zl
cnNpb249Tm9uZSwgKiprd2FyZ3MpOgotICAgICAgICBwb3J0ID0gc3VwZXIoaW9zVGVzdCwgc2Vs
ZikubWFrZV9wb3J0KGhvc3Q9aG9zdCwgcG9ydF9uYW1lPXBvcnRfbmFtZSwgb3B0aW9ucz1vcHRp
b25zLCBvc19uYW1lPW9zX25hbWUsIHNfdmVyc2lvbj1vc192ZXJzaW9uLCBrd2FyZ3M9a3dhcmdz
KQorICAgICAgICBwb3J0ID0gc3VwZXIoSU9TU2ltdWxhdG9yVGVzdCwgc2VsZikubWFrZV9wb3J0
KGhvc3Q9aG9zdCwgcG9ydF9uYW1lPXBvcnRfbmFtZSwgb3B0aW9ucz1vcHRpb25zLCBvc19uYW1l
PW9zX25hbWUsIHNfdmVyc2lvbj1vc192ZXJzaW9uLCBrd2FyZ3M9a3dhcmdzKQogICAgICAgICBw
b3J0LnNldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpCiAgICAgICAgIHJldHVybiBwb3J0
CiAKQEAgLTUzLDE0ICs2Nyw2IEBAIGNsYXNzIGlvc1Rlc3QoZGFyd2luX3Rlc3RjYXNlLkRhcndp
blRlc3QKICAgICBkZWYgdGVzdF9vcGVyYXRpbmdfc3lzdGVtKHNlbGYpOgogICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKCdpb3Mtc2ltdWxhdG9yJywgc2VsZi5tYWtlX3BvcnQoKS5vcGVyYXRpbmdf
c3lzdGVtKCkpCiAKLSAgICBkZWYgdGVzdF9nZXRfY3Jhc2hfbG9nKHNlbGYpOgotICAgICAgICAj
IE1hYyBjcmFzaCBsb2dzIGFyZSB0ZXN0ZWQgZWxzZXdoZXJlLCBzbyBoZXJlIHdlIGp1c3QgbWFr
ZSBzdXJlIHdlIGRvbid0IGNyYXNoLgotICAgICAgICBkZWYgZmFrZV90aW1lX2NiKCk6Ci0gICAg
ICAgICAgICB0aW1lcyA9IFswLCAyMCwgNDBdCi0gICAgICAgICAgICByZXR1cm4gbGFtYmRhOiB0
aW1lcy5wb3AoMCkKLSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KHBvcnRfbmFtZT0naW9z
LXNpbXVsYXRvcicpCi0gICAgICAgIHBvcnQuX2dldF9jcmFzaF9sb2coJ0R1bXBSZW5kZXJUcmVl
JywgMTIzNCwgTm9uZSwgTm9uZSwgdGltZS50aW1lKCksIHdhaXRfZm9yX2xvZz1GYWxzZSkKLQog
ICAgIGRlZiB0ZXN0XzMyYml0KHNlbGYpOgogICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQo
b3B0aW9ucz1Nb2NrT3B0aW9ucyhhcmNoaXRlY3R1cmU9J3g4NicpKQogCkBAIC03MCw3ICs3Niw3
IEBAIGNsYXNzIGlvc1Rlc3QoZGFyd2luX3Rlc3RjYXNlLkRhcndpblRlc3QKICAgICAgICAgcG9y
dC5fcnVuX3NjcmlwdCA9IHJ1bl9zY3JpcHQKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0
LmFyY2hpdGVjdHVyZSgpLCAneDg2JykKICAgICAgICAgcG9ydC5fYnVpbGRfZHJpdmVyKCkKLSAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFyZ3MsIFsnLS1pb3Mtc2ltdWxhdG9yJ10pCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hcmdzLCBbJ0FSQ0hTPWkzODYnLCAnLS1zZGsn
LCAnaXBob25lc2ltdWxhdG9yJ10pCiAKICAgICBkZWYgdGVzdF82NGJpdChzZWxmKToKICAgICAg
ICAgIyBBcHBsZSBNYWMgcG9ydCBpcyA2NC1iaXQgYnkgZGVmYXVsdApAQCAtODIsNyArODgsNyBA
QCBjbGFzcyBpb3NUZXN0KGRhcndpbl90ZXN0Y2FzZS5EYXJ3aW5UZXN0CiAKICAgICAgICAgcG9y
dC5fcnVuX3NjcmlwdCA9IHJ1bl9zY3JpcHQKICAgICAgICAgcG9ydC5fYnVpbGRfZHJpdmVyKCkK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFyZ3MsIFsnLS1pb3Mtc2ltdWxhdG9yJ10p
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hcmdzLCBbJy0tc2RrJywgJ2lwaG9uZXNp
bXVsYXRvciddKQogCiAgICAgZGVmIHRlc3Rfc2RrX25hbWUoc2VsZik6CiAgICAgICAgIHBvcnQg
PSBzZWxmLm1ha2VfcG9ydCgpCkBAIC05NywzICsxMDMsNyBAQCBjbGFzcyBpb3NUZXN0KGRhcndp
bl90ZXN0Y2FzZS5EYXJ3aW5UZXN0CiAgICAgICAgIHBvcnQuX2V4ZWN1dGl2ZSA9IE1vY2tFeGVj
dXRpdmUyKHJ1bl9jb21tYW5kX2ZuPXRocm93aW5nX3J1bl9jb21tYW5kKQogICAgICAgICBleHBl
Y3RlZF9zdGRvdXQgPSAiWyd4Y3J1bicsICctLXNkaycsICdpcGhvbmVzaW11bGF0b3InLCAnLWZp
bmQnLCAndGVzdCddXG4iCiAgICAgICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhz
ZWxmLCBwb3J0LnhjcnVuX2ZpbmQsIGFyZ3M9Wyd0ZXN0JywgJ2ZhbGxpbmcnXSwgZXhwZWN0ZWRf
c3Rkb3V0PWV4cGVjdGVkX3N0ZG91dCkKKworICAgIGRlZiB0ZXN0X3Bpbmcoc2VsZik6CisgICAg
ICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9y
dC5ydW5PbkRldmljZShbJ3BpbmcnLCAnPGRldmlkPiddKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9pb3NiYXNlX3Rlc3RjYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC9pb3NiYXNlX3Rlc3RjYXNlLnB5CShub25leGlzdGVudCkKKysr
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NiYXNlX3Rlc3RjYXNlLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisj
IGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisj
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCitpbXBvcnQgdGltZQorCitmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGRh
cndpbl90ZXN0Y2FzZQorCisKK2NsYXNzIElPU0Jhc2VUZXN0KGRhcndpbl90ZXN0Y2FzZS5EYXJ3
aW5UZXN0KToKKworICAgIGRlZiB0ZXN0X2RldmljZUZsYWcoc2VsZik6CisgICAgICAgIHBvcnQg
PSBzZWxmLm1ha2VfcG9ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3J0LmRldmljZURl
ZmluZWQoKSkKKworICAgIGRlZiB0ZXN0X2dldF9jcmFzaF9sb2coc2VsZik6CisgICAgICAgICMg
TWFjIGNyYXNoIGxvZ3MgYXJlIHRlc3RlZCBlbHNld2hlcmUsIHNvIGhlcmUgd2UganVzdCBtYWtl
IHN1cmUgd2UgZG9uJ3QgY3Jhc2guCisgICAgICAgIGRlZiBmYWtlX3RpbWVfY2IoKToKKyAgICAg
ICAgICAgIHRpbWVzID0gWzAsIDIwLCA0MF0KKyAgICAgICAgICAgIHJldHVybiBsYW1iZGE6IHRp
bWVzLnBvcCgwKQorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQocG9ydF9uYW1lPSdpb3Mt
c2ltdWxhdG9yJykKKyAgICAgICAgcG9ydC5fZ2V0X2NyYXNoX2xvZygnRHVtcFJlbmRlclRyZWUn
LCAxMjM0LCBOb25lLCBOb25lLCB0aW1lLnRpbWUoKSwgd2FpdF9mb3JfbG9nPUZhbHNlKQpJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQkocmV2
aXNpb24gMjA5OTE4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9j
ZXNzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNCBAQAorIyBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMCwx
MCArMzEsMTMgQEAKIAogaW1wb3J0IGVycm5vCiBpbXBvcnQgbG9nZ2luZworaW1wb3J0IG11bHRp
cHJvY2Vzc2luZwogaW1wb3J0IHNpZ25hbAogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKIAorZnJv
bSB3ZWJraXRweS5jb21tb24uaXBjX3BpcGUgaW1wb3J0IFByb2Nlc3NQaXBlLCBVbml4UGlwZQor
CiAjIE5vdGUgdGhhdCBhbHRob3VnaCB3aW4zMiBweXRob24gZG9lcyBwcm92aWRlIGFuIGltcGxl
bWVudGF0aW9uIG9mCiAjIHRoZSB3aW4zMiBzZWxlY3QgQVBJLCBpdCBvbmx5IHdvcmtzIG9uIHNv
Y2tldHMsIGFuZCBub3Qgb24gdGhlIG5hbWVkIHBpcGVzCiAjIHVzZWQgYnkgc3VicHJvY2Vzcywg
c28gd2UgaGF2ZSB0byB1c2UgdGhlIG5hdGl2ZSBBUElzIGRpcmVjdGx5LgpAQCAtNzEsMzIgKzc1
LDI1IEBAIGNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToKICAgICAgICAgc2VsZi5faG9zdCA9
IHNlbGYuX3BvcnQuaG9zdAogICAgICAgICBzZWxmLl9waWQgPSBOb25lCiAgICAgICAgIHNlbGYu
X3Jlc2V0KCkKLQotICAgICAgICAjIFNlZSBjb21tZW50IGluIGltcG9ydHMgZm9yIHdoeSB3ZSBu
ZWVkIHRoZSB3aW4zMiBBUElzIGFuZCBjYW4ndCBqdXN0IHVzZSBzZWxlY3QuCi0gICAgICAgICMg
RklYTUU6IHRoZXJlIHNob3VsZCBiZSBhIHdheSB0byBnZXQgd2luMzIgdnMuIGN5Z3dpbiBmcm9t
IHBsYXRmb3JtaW5mby4KKyAgICAgICAgc2VsZi5fcGlwZSA9IE5vbmUKICAgICAgICAgc2VsZi5f
dXNlX3dpbjMyX2FwaXMgPSBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJykKIAorICAgICAg
ICBpZiAicnVuLW9uLWRldmljZSIgPT0gc2VsZi5fY21kWzBdOgorICAgICAgICAgICAgc2VsZi5f
cG9ydC5ydW5PbkRldmljZShbJ2luc3RhbGwnLCBzZWxmLl9jbWRbMV0sIHNlbGYuX2NtZFsyXV0p
CisKICAgICBkZWYgbmFtZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKIAogICAg
IGRlZiBwaWQoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9waWQKIAorICAgIGRlZiBjbGVh
bihzZWxmKToKKyAgICAgICAgc2VsZi5fcGlwZS5jbGVhbigpCisKICAgICBkZWYgX3Jlc2V0KHNl
bGYpOgotICAgICAgICBpZiBnZXRhdHRyKHNlbGYsICdfcHJvYycsIE5vbmUpOgotICAgICAgICAg
ICAgaWYgc2VsZi5fcHJvYy5zdGRpbjoKLSAgICAgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGlu
LmNsb3NlKCkKLSAgICAgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGluID0gTm9uZQotICAgICAg
ICAgICAgaWYgc2VsZi5fcHJvYy5zdGRvdXQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5fcHJvYy5z
dGRvdXQuY2xvc2UoKQotICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3Rkb3V0ID0gTm9uZQot
ICAgICAgICAgICAgaWYgc2VsZi5fcHJvYy5zdGRlcnI6Ci0gICAgICAgICAgICAgICAgc2VsZi5f
cHJvYy5zdGRlcnIuY2xvc2UoKQotICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkZXJyID0g
Tm9uZQotCi0gICAgICAgIHNlbGYuX3Byb2MgPSBOb25lCi0gICAgICAgIHNlbGYuX291dHB1dCA9
IHN0cigpICAjIGJ5dGVzYXJyYXkoKSBvbmNlIHdlIHJlcXVpcmUgUHl0aG9uIDIuNgotICAgICAg
ICBzZWxmLl9lcnJvciA9IHN0cigpICAjIGJ5dGVzYXJyYXkoKSBvbmNlIHdlIHJlcXVpcmUgUHl0
aG9uIDIuNgorICAgICAgICBzZWxmLl9waXBlID0gTm9uZQorICAgICAgICBzZWxmLl9waWQgPSBO
b25lCisKICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYudGltZWRf
b3V0ID0gRmFsc2UKIApAQCAtMTA0LDc1ICsxMDEsODUgQEAgY2xhc3MgU2VydmVyUHJvY2Vzcyhv
YmplY3QpOgogICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQogCiAgICAgZGVmIF9zdGFydChzZWxm
KToKLSAgICAgICAgaWYgc2VsZi5fcHJvYzoKKyAgICAgICAgc2VsZi5fcGlkID0gTm9uZQorICAg
ICAgICBpZiBzZWxmLl9waXBlOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiJXMgYWxy
ZWFkeSBydW5uaW5nIiAlIHNlbGYuX25hbWUpCiAgICAgICAgIHNlbGYuX3Jlc2V0KCkKLSAgICAg
ICAgIyBjbG9zZV9mZHMgaXMgYSB3b3JrYXJvdW5kIGZvciBodHRwOi8vYnVncy5weXRob24ub3Jn
L2lzc3VlMjMyMAotICAgICAgICBjbG9zZV9mZHMgPSBub3Qgc2VsZi5faG9zdC5wbGF0Zm9ybS5p
c193aW4oKQotICAgICAgICBzZWxmLl9wcm9jID0gc2VsZi5faG9zdC5leGVjdXRpdmUucG9wZW4o
c2VsZi5fY21kLCBzdGRpbj1zZWxmLl9ob3N0LmV4ZWN1dGl2ZS5QSVBFLAotICAgICAgICAgICAg
c3Rkb3V0PXNlbGYuX2hvc3QuZXhlY3V0aXZlLlBJUEUsCi0gICAgICAgICAgICBzdGRlcnI9c2Vs
Zi5faG9zdC5leGVjdXRpdmUuUElQRSwKLSAgICAgICAgICAgIGNsb3NlX2Zkcz1jbG9zZV9mZHMs
Ci0gICAgICAgICAgICBlbnY9c2VsZi5fZW52LAotICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xp
bmVzPXNlbGYuX3VuaXZlcnNhbF9uZXdsaW5lcykKLSAgICAgICAgc2VsZi5fcGlkID0gc2VsZi5f
cHJvYy5waWQKLSAgICAgICAgc2VsZi5fcG9ydC5maW5kX3N5c3RlbV9waWQoc2VsZi5uYW1lKCks
IHNlbGYuX3BpZCkKLSAgICAgICAgZmQgPSBzZWxmLl9wcm9jLnN0ZG91dC5maWxlbm8oKQotICAg
ICAgICBpZiBub3Qgc2VsZi5fdXNlX3dpbjMyX2FwaXM6Ci0gICAgICAgICAgICBmbCA9IGZjbnRs
LmZjbnRsKGZkLCBmY250bC5GX0dFVEZMKQotICAgICAgICAgICAgZmNudGwuZmNudGwoZmQsIGZj
bnRsLkZfU0VURkwsIGZsIHwgb3MuT19OT05CTE9DSykKLSAgICAgICAgICAgIGZkID0gc2VsZi5f
cHJvYy5zdGRlcnIuZmlsZW5vKCkKLSAgICAgICAgICAgIGZsID0gZmNudGwuZmNudGwoZmQsIGZj
bnRsLkZfR0VURkwpCi0gICAgICAgICAgICBmY250bC5mY250bChmZCwgZmNudGwuRl9TRVRGTCwg
ZmwgfCBvcy5PX05PTkJMT0NLKQotCi0gICAgZGVmIF9oYW5kbGVfcG9zc2libGVfaW50ZXJydXB0
KHNlbGYpOgotICAgICAgICAiIiJUaGlzIHJvdXRpbmUgY2hlY2tzIHRvIHNlZSBpZiB0aGUgcHJv
Y2VzcyBjcmFzaGVkIG9yIGV4aXRlZAotICAgICAgICBiZWNhdXNlIG9mIGEga2V5Ym9hcmQgaW50
ZXJydXB0IGFuZCByYWlzZXMgS2V5Ym9hcmRJbnRlcnJ1cHQKLSAgICAgICAgYWNjb3JkaW5nbHku
IiIiCi0gICAgICAgICMgRklYTUU6IExpbnV4IGFuZCBNYWMgc2V0IHRoZSByZXR1cm5jb2RlIHRv
IC1zaWduYWwuU0lHSU5UIGlmIGEKLSAgICAgICAgIyBzdWJwcm9jZXNzIGlzIGtpbGxlZCB3aXRo
IGEgY3RybF5DLiAgUHJldmlvdXMgY29tbWVudHMgaW4gdGhpcwotICAgICAgICAjIHJvdXRpbmUg
c2FpZCB0aGF0IHN1cHBvc2VkbHkgV2luZG93cyByZXR1cm5zIDB4YzAwMDAwMWQsIGJ1dCB0aGF0
J3Mgbm90IHdoYXQKLSAgICAgICAgIyAtMTA3Mzc0MTUxMCBldmFsdWF0ZXMgdG8uIEZpZ3VyZSBv
dXQgd2hhdCB0aGUgcmlnaHQgdmFsdWUgaXMKLSAgICAgICAgIyBmb3Igd2luMzIgYW5kIGN5Z3dp
biBoZXJlIC4uLgotICAgICAgICBpZiBzZWxmLl9wcm9jLnJldHVybmNvZGUgaW4gKC0xMDczNzQx
NTEwLCAtc2lnbmFsLlNJR0lOVCk6Ci0gICAgICAgICAgICByYWlzZSBLZXlib2FyZEludGVycnVw
dAorCisgICAgICAgIGlmICJydW4tb24tZGV2aWNlIiA9PSBzZWxmLl9jbWRbMF06CisgICAgICAg
ICAgICBzZWxmLl9lbnZbJ0lQQ19JREVOVElGSUVSJ10gPSBzZWxmLl9wb3J0LmV4dHJhY3RCdW5k
bGVJRChzZWxmLl9jbWRbMl0pICsgIi0iICsgc2VsZi5fY21kWzFdCisgICAgICAgICAgICBmaWxl
X2xvY2F0aW9uID0gJy90bXAvJyArIHNlbGYuX2VudlsnSVBDX0lERU5USUZJRVInXQorICAgICAg
ICAgICAgc2VsZi5fcGlwZSA9IFVuaXhQaXBlKGZpbGVfbG9jYXRpb24gKyAnX0lOJywgZmlsZV9s
b2NhdGlvbiArICdfT1VUJywgZmlsZV9sb2NhdGlvbiArICdfRVJST1InKQorICAgICAgICAgICAg
c2VsZi5fcG9ydC5ydW5PbkRldmljZShbJ3J1biddICsgc2VsZi5fY21kWzE6XSwgc2VsZi5fZW52
KQorICAgICAgICAgICAgc2VsZi5fcGlwZS5jb25uZWN0KCkKKyAgICAgICAgICAgIGlmIHNlbGYu
X3BpcGUuaXNDb25uZWN0ZWQoKToKKyAgICAgICAgICAgICAgICBwaWQgPSBzZWxmLnJlYWRfc3Rk
ZXJyX2xpbmUodGltZS50aW1lKCkgKyAxLjApCisgICAgICAgICAgICAgICAgaWYgcGlkOgorICAg
ICAgICAgICAgICAgICAgICBzZWxmLl9waWQgPSBpbnQocGlkWzY6LTFdKQorICAgICAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJ05vIHBpZCByZWNlaXZl
ZCBmcm9tIFVuaXgtcGlwZSBiYXNlZCBjbGllbnQnKQorICAgICAgICAgICAgICAgICAgICBzZWxm
Ll9jcmFzaGVkID0gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfbG9n
LmRlYnVnKCdGYWlsZWQgdG8gY29ubmVjdCB0byBsYXVuY2hpbmcgYXBwJykKKyAgICAgICAgICAg
ICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBz
ZWxmLl9waXBlID0gUHJvY2Vzc1BpcGUoc2VsZi5fcG9ydCwgc2VsZi5fY21kLCBzZWxmLl9lbnYs
IHNlbGYuX3VuaXZlcnNhbF9uZXdsaW5lcykKKyAgICAgICAgICAgIHNlbGYuX3BpZCA9IHNlbGYu
X3BpcGUucGlkKCkKKworICAgICAgICBpZiBub3Qgc2VsZi5wb2xsKCk6CisgICAgICAgICAgICBz
ZWxmLl9wb3J0LmZpbmRfc3lzdGVtX3BpZChzZWxmLm5hbWUoKSwgc2VsZi5waWQoKSkKIAogICAg
IGRlZiBwb2xsKHNlbGYpOgogICAgICAgICAiIiJDaGVjayB0byBzZWUgaWYgdGhlIHVuZGVybHlp
bmcgcHJvY2VzcyBpcyBydW5uaW5nOyByZXR1cm5zIE5vbmUKICAgICAgICAgaWYgaXQgc3RpbGwg
aXMgKHdyYXBwZXIgYXJvdW5kIHN1YnByb2Nlc3MucG9sbCkuIiIiCi0gICAgICAgIGlmIHNlbGYu
X3Byb2M6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcHJvYy5wb2xsKCkKLSAgICAgICAgcmV0
dXJuIE5vbmUKKyAgICAgICAgaWYgc2VsZi5fcGlwZSBhbmQgc2VsZi5fcGlwZS5pc0Nvbm5lY3Rl
ZCgpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIFRydWUKIAogICAg
IGRlZiB3cml0ZShzZWxmLCBieXRlcywgaWdub3JlX2NyYXNoPUZhbHNlKToKKwogICAgICAgICAi
IiJXcml0ZSBhIHJlcXVlc3QgdG8gdGhlIHN1YnByb2Nlc3MuIFRoZSBzdWJwcm9jZXNzIGlzIChy
ZS0pc3RhcnQoKSdlZAogICAgICAgICBpZiBpcyBub3QgYWxyZWFkeSBydW5uaW5nLiIiIgotICAg
ICAgICBpZiBub3Qgc2VsZi5fcHJvYzoKKyAgICAgICAgaWYgbm90IHNlbGYuX3BpcGU6CiAgICAg
ICAgICAgICBzZWxmLl9zdGFydCgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuX3By
b2Muc3RkaW4ud3JpdGUoYnl0ZXMpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgotICAgICAg
ICAgICAgc2VsZi5zdG9wKDAuMCkKLSAgICAgICAgICAgICMgc3RvcCgpIGNhbGxzIF9yZXNldCgp
LCBzbyB3ZSBoYXZlIHRvIHNldCBjcmFzaGVkIHRvIFRydWUgYWZ0ZXIgY2FsbGluZyBzdG9wKCkK
LSAgICAgICAgICAgICMgdW5sZXNzIHdlIGFscmVhZHkga25vdyB0aGF0IHRoaXMgaXMgYSB0aW1l
b3V0LgorICAgICAgICBzdWNjZXNzID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5fcGlwZToKKyAg
ICAgICAgICAgIHN1Y2Nlc3MgPSBzZWxmLl9waXBlLnNlbmQoYnl0ZXMpCisKKyAgICAgICAgaWYg
bm90IHN1Y2Nlc3M6CisgICAgICAgICAgICBzZWxmLnN0b3AoKQogICAgICAgICAgICAgaWYgbm90
IGlnbm9yZV9jcmFzaDoKICAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCdUaGlzIHRlc3QgbWFy
a2VkIGFzIGEgY3Jhc2ggYmVjYXVzZSBvZiBhIGJyb2tlbiBwaXBlIHdoZW4gd3JpdGluZyB0byBz
dGRpbiBvZiB0aGUgc2VydmVyIHByb2Nlc3MuJykKICAgICAgICAgICAgICAgICBzZWxmLl9jcmFz
aGVkID0gVHJ1ZQogCiAgICAgZGVmIF9wb3Bfc3Rkb3V0X2xpbmVfaWZfcmVhZHkoc2VsZik6Ci0g
ICAgICAgIGluZGV4X2FmdGVyX25ld2xpbmUgPSBzZWxmLl9vdXRwdXQuZmluZCgnXG4nKSArIDEK
LSAgICAgICAgaWYgaW5kZXhfYWZ0ZXJfbmV3bGluZSA+IDA6Ci0gICAgICAgICAgICByZXR1cm4g
c2VsZi5fcG9wX291dHB1dF9ieXRlcyhpbmRleF9hZnRlcl9uZXdsaW5lKQorICAgICAgICBkYXRh
ID0gW10KKyAgICAgICAgaWYgc2VsZi5fcGlwZToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9w
aXBlLnN0ZG91dFJlYWQoKQorCisgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICByZXR1cm4g
ZGF0YQogICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgZGVmIF9wb3Bfc3RkZXJyX2xpbmVfaWZf
cmVhZHkoc2VsZik6Ci0gICAgICAgIGluZGV4X2FmdGVyX25ld2xpbmUgPSBzZWxmLl9lcnJvci5m
aW5kKCdcbicpICsgMQotICAgICAgICBpZiBpbmRleF9hZnRlcl9uZXdsaW5lID4gMDoKLSAgICAg
ICAgICAgIHJldHVybiBzZWxmLl9wb3BfZXJyb3JfYnl0ZXMoaW5kZXhfYWZ0ZXJfbmV3bGluZSkK
KyAgICAgICAgZGF0YSA9IFtdCisgICAgICAgIGlmIHNlbGYuX3BpcGU6CisgICAgICAgICAgICBk
YXRhID0gc2VsZi5fcGlwZS5zdGRlcnJSZWFkKCkKKyAgICAgICAgaWYgZGF0YToKKyAgICAgICAg
ICAgIHJldHVybiBkYXRhCiAgICAgICAgIHJldHVybiBOb25lCiAKICAgICBkZWYgcG9wX2FsbF9i
dWZmZXJlZF9zdGRlcnIoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9wb3BfZXJyb3JfYnl0
ZXMobGVuKHNlbGYuX2Vycm9yKSkKKyAgICAgICAgX2Vycm9yID0gIiIKKyAgICAgICAgX2N1cnJl
bnRfZXJyb3IgPSBbXQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgaWYgc2VsZi5f
cGlwZToKKyAgICAgICAgICAgICAgICBfY3VycmVudF9lcnJvciA9IHNlbGYuX3BpcGUuc3RkZXJy
UmVhZCgpCisgICAgICAgICAgICBpZiBub3QgX2N1cnJlbnRfZXJyb3I6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIF9lcnJvcgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfZXJy
b3IgPSBfZXJyb3IgKyBfY3VycmVudF9lcnJvciArICdcbicKIAogICAgIGRlZiByZWFkX3N0ZG91
dF9saW5lKHNlbGYsIGRlYWRsaW5lKToKICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWQoZGVhZGxp
bmUsIHNlbGYuX3BvcF9zdGRvdXRfbGluZV9pZl9yZWFkeSkKQEAgLTE5MSw3ICsxOTgsNiBAQCBj
bGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6CiAgICAgICAgICAgICByZXR1cm4gTm9uZSAgIyBJ
bnN0cnVjdHMgdGhlIGNhbGxlciB0byBrZWVwIHdhaXRpbmcuCiAKICAgICAgICAgcmV0dXJuX3Zh
bHVlID0gc2VsZi5fcmVhZChkZWFkbGluZSwgcmV0cmlldmVfYnl0ZXNfZnJvbV9idWZmZXJzKQot
ICAgICAgICAjIEZJWE1FOiBUaGlzIGlzIGEgYml0IG9mIGEgaGFjayBhcm91bmQgdGhlIGZhY3Qg
dGhhdCBfcmVhZCBub3JtYWxseSBvbmx5IHJldHVybnMgb25lIHZhbHVlLCBidXQgdGhpcyBjYWxs
ZXIgd2FudHMgaXQgdG8gcmV0dXJuIHR3by4KICAgICAgICAgaWYgcmV0dXJuX3ZhbHVlIGlzIE5v
bmU6CiAgICAgICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQogICAgICAgICByZXR1cm4gcmV0dXJu
X3ZhbHVlCkBAIC0yMDEsMTE3ICsyMDcsMjUgQEAgY2xhc3MgU2VydmVyUHJvY2VzcyhvYmplY3Qp
OgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignU2VydmVyUHJvY2Vzcy5yZWFkKCkgY2Fs
bGVkIHdpdGggYSBub24tcG9zaXRpdmUgc2l6ZTogJWQgJyAlIHNpemUpCiAKICAgICAgICAgZGVm
IHJldHJpZXZlX2J5dGVzX2Zyb21fc3Rkb3V0X2J1ZmZlcigpOgotICAgICAgICAgICAgaWYgbGVu
KHNlbGYuX291dHB1dCkgPj0gc2l6ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcG9w
X291dHB1dF9ieXRlcyhzaXplKQorICAgICAgICAgICAgaWYgc2VsZi5fcGlwZToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gc2VsZi5fcGlwZS5yZWFkQmxvY2tTdGRvdXQoc2l6ZSkKICAgICAgICAg
ICAgIHJldHVybiBOb25lCiAKICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWQoZGVhZGxpbmUsIHJl
dHJpZXZlX2J5dGVzX2Zyb21fc3Rkb3V0X2J1ZmZlcikKIAotICAgIGRlZiBfbG9nKHNlbGYsIG1l
c3NhZ2UpOgotICAgICAgICAjIFRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrLCBidXQgd2UgZmlyc3Qg
bG9nIGEgYmxhbmsgbGluZSB0byBhdm9pZAotICAgICAgICAjIG1lc3NpbmcgdXAgdGhlIG1hc3Rl
ciBwcm9jZXNzJ3Mgb3V0cHV0LgotICAgICAgICBfbG9nLmluZm8oJycpCi0gICAgICAgIF9sb2cu
aW5mbyhtZXNzYWdlKQotCiAgICAgZGVmIF9oYW5kbGVfdGltZW91dChzZWxmKToKICAgICAgICAg
c2VsZi50aW1lZF9vdXQgPSBUcnVlCiAgICAgICAgIGlmIHNlbGYuX3BvcnQuZ2V0X29wdGlvbigi
c2FtcGxlX29uX3RpbWVvdXQiKToKICAgICAgICAgICAgIHNlbGYuX3BvcnQuc2FtcGxlX3Byb2Nl
c3Moc2VsZi5fbmFtZSwgc2VsZi5fcHJvYy5waWQpCiAKLSAgICBkZWYgX3NwbGl0X3N0cmluZ19h
ZnRlcl9pbmRleChzZWxmLCBzdHJpbmcsIGluZGV4KToKLSAgICAgICAgcmV0dXJuIHN0cmluZ1s6
aW5kZXhdLCBzdHJpbmdbaW5kZXg6XQotCi0gICAgZGVmIF9wb3Bfb3V0cHV0X2J5dGVzKHNlbGYs
IGJ5dGVzX2NvdW50KToKLSAgICAgICAgb3V0cHV0LCBzZWxmLl9vdXRwdXQgPSBzZWxmLl9zcGxp
dF9zdHJpbmdfYWZ0ZXJfaW5kZXgoc2VsZi5fb3V0cHV0LCBieXRlc19jb3VudCkKLSAgICAgICAg
cmV0dXJuIG91dHB1dAotCi0gICAgZGVmIF9wb3BfZXJyb3JfYnl0ZXMoc2VsZiwgYnl0ZXNfY291
bnQpOgotICAgICAgICBvdXRwdXQsIHNlbGYuX2Vycm9yID0gc2VsZi5fc3BsaXRfc3RyaW5nX2Fm
dGVyX2luZGV4KHNlbGYuX2Vycm9yLCBieXRlc19jb3VudCkKLSAgICAgICAgcmV0dXJuIG91dHB1
dAotCi0gICAgZGVmIF93YWl0X2Zvcl9kYXRhX2FuZF91cGRhdGVfYnVmZmVyc191c2luZ19zZWxl
Y3Qoc2VsZiwgZGVhZGxpbmUsIHN0b3BwaW5nPUZhbHNlKToKLSAgICAgICAgaWYgc2VsZi5fcHJv
Yy5zdGRvdXQuY2xvc2VkIG9yIHNlbGYuX3Byb2Muc3RkZXJyLmNsb3NlZDoKLSAgICAgICAgICAg
ICMgSWYgdGhlIHByb2Nlc3MgY3Jhc2hlZCBhbmQgaXMgdXNpbmcgRklGT3MsIGxpa2UgQ2hyb21p
dW0gQW5kcm9pZCwgdGhlCi0gICAgICAgICAgICAjIHN0ZG91dCBhbmQgc3RkZXJyIHBpcGVzIHdp
bGwgYmUgY2xvc2VkLgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgb3V0X2ZkID0gc2Vs
Zi5fcHJvYy5zdGRvdXQuZmlsZW5vKCkKLSAgICAgICAgZXJyX2ZkID0gc2VsZi5fcHJvYy5zdGRl
cnIuZmlsZW5vKCkKLSAgICAgICAgc2VsZWN0X2ZkcyA9IChvdXRfZmQsIGVycl9mZCkKLSAgICAg
ICAgdHJ5OgotICAgICAgICAgICAgcmVhZF9mZHMsIF8sIF8gPSBzZWxlY3Quc2VsZWN0KHNlbGVj
dF9mZHMsIFtdLCBzZWxlY3RfZmRzLCBtYXgoZGVhZGxpbmUgLSB0aW1lLnRpbWUoKSwgMCkpCi0g
ICAgICAgIGV4Y2VwdCBzZWxlY3QuZXJyb3IsIGU6Ci0gICAgICAgICAgICAjIFdlIGNhbiBpZ25v
cmUgRUlOVkFMIHNpbmNlIGl0J3MgbGlrZWx5IHRoZSBwcm9jZXNzIGp1c3QgY3Jhc2hlZCBhbmQg
d2UnbGwKLSAgICAgICAgICAgICMgZmlndXJlIHRoYXQgb3V0IHRoZSBuZXh0IHRpbWUgdGhyb3Vn
aCB0aGUgbG9vcCBpbiBfcmVhZCgpLgotICAgICAgICAgICAgaWYgZS5hcmdzWzBdID09IGVycm5v
LkVJTlZBTDoKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIHJhaXNlCi0KLSAg
ICAgICAgdHJ5OgotICAgICAgICAgICAgIyBOb3RlIHRoYXQgd2UgbWF5IGdldCBubyBkYXRhIGR1
cmluZyByZWFkKCkgZXZlbiB0aG91Z2gKLSAgICAgICAgICAgICMgc2VsZWN0IHNheXMgd2UgZ290
IHNvbWV0aGluZzsgc2VlIHRoZSBzZWxlY3QoKSBtYW4gcGFnZQotICAgICAgICAgICAgIyBvbiBs
aW51eC4gSSBkb24ndCBrbm93IGlmIHRoaXMgaGFwcGVucyBvbiBNYWMgT1MgYW5kCi0gICAgICAg
ICAgICAjIG90aGVyIFVuaXhlbiBhcyB3ZWxsLCBidXQgd2UgZG9uJ3QgYm90aGVyIHNwZWNpYWwt
Y2FzaW5nCi0gICAgICAgICAgICAjIExpbnV4IGJlY2F1c2UgaXQncyByZWxhdGl2ZWx5IGhhcm1s
ZXNzIGVpdGhlciB3YXkuCi0gICAgICAgICAgICBpZiBvdXRfZmQgaW4gcmVhZF9mZHM6Ci0gICAg
ICAgICAgICAgICAgZGF0YSA9IHNlbGYuX3Byb2Muc3Rkb3V0LnJlYWQoKQotICAgICAgICAgICAg
ICAgIGlmIG5vdCBkYXRhIGFuZCBub3Qgc3RvcHBpbmcgYW5kIChzZWxmLl90cmVhdF9ub19kYXRh
X2FzX2NyYXNoIG9yIHNlbGYuX3Byb2MucG9sbCgpKToKLSAgICAgICAgICAgICAgICAgICAgX2xv
Zy5kZWJ1ZygnVGhpcyB0ZXN0IG1hcmtlZCBhcyBhIGNyYXNoIGJlY2F1c2Ugb2Ygbm8gZGF0YSB3
aGlsZSByZWFkaW5nIHN0ZG91dCBmb3IgdGhlIHNlcnZlciBwcm9jZXNzLicpCi0gICAgICAgICAg
ICAgICAgICAgIHNlbGYuX2NyYXNoZWQgPSBUcnVlCi0gICAgICAgICAgICAgICAgc2VsZi5fb3V0
cHV0ICs9IGRhdGEKLQotICAgICAgICAgICAgaWYgZXJyX2ZkIGluIHJlYWRfZmRzOgotICAgICAg
ICAgICAgICAgIGRhdGEgPSBzZWxmLl9wcm9jLnN0ZGVyci5yZWFkKCkKLSAgICAgICAgICAgICAg
ICBpZiBub3QgZGF0YSBhbmQgbm90IHN0b3BwaW5nIGFuZCAoc2VsZi5fdHJlYXRfbm9fZGF0YV9h
c19jcmFzaCBvciBzZWxmLl9wcm9jLnBvbGwoKSk6Ci0gICAgICAgICAgICAgICAgICAgIF9sb2cu
ZGVidWcoJ1RoaXMgdGVzdCBtYXJrZWQgYXMgYSBjcmFzaCBiZWNhdXNlIG9mIG5vIGRhdGEgd2hp
bGUgcmVhZGluZyBzdGRvdXQgZm9yIHRoZSBzZXJ2ZXIgcHJvY2Vzcy4nKQotICAgICAgICAgICAg
ICAgICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQotICAgICAgICAgICAgICAgIHNlbGYuX2Vycm9y
ICs9IGRhdGEKLSAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6Ci0gICAgICAgICAgICAjIFdlIGNh
biBpZ25vcmUgdGhlIElPRXJyb3JzIGJlY2F1c2Ugd2Ugd2lsbCBkZXRlY3QgaWYgdGhlIHN1YnBv
cmNlc3MgY3Jhc2hlZAotICAgICAgICAgICAgIyB0aGUgbmV4dCB0aW1lIHRocm91Z2ggdGhlIGxv
b3AgaW4gX3JlYWQoKQotICAgICAgICAgICAgcGFzcwotCi0gICAgZGVmIF93YWl0X2Zvcl9kYXRh
X2FuZF91cGRhdGVfYnVmZmVyc191c2luZ193aW4zMl9hcGlzKHNlbGYsIGRlYWRsaW5lKToKLSAg
ICAgICAgIyBTZWUgaHR0cDovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvNDQwNTU0LW1v
ZHVsZS10by1hbGxvdy1hc3luY2hyb25vdXMtc3VicHJvY2Vzcy11c2Utb24td2luLwotICAgICAg
ICAjIGFuZCBodHRwOi8vZG9jcy5hY3RpdmVzdGF0ZS5jb20vYWN0aXZlcHl0aG9uLzIuNi9weXdp
bjMyL21vZHVsZXMuaHRtbAotICAgICAgICAjIGZvciBkb2N1bWVudGF0aW9uIG9uIGFsbCBvZiB0
aGVzZSB3aW4zMi1zcGVjaWZpYyBtb2R1bGVzLgotICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQot
ICAgICAgICBvdXRfZmggPSBtc3ZjcnQuZ2V0X29zZmhhbmRsZShzZWxmLl9wcm9jLnN0ZG91dC5m
aWxlbm8oKSkKLSAgICAgICAgZXJyX2ZoID0gbXN2Y3J0LmdldF9vc2ZoYW5kbGUoc2VsZi5fcHJv
Yy5zdGRlcnIuZmlsZW5vKCkpCi0gICAgICAgIHdoaWxlIChzZWxmLl9wcm9jLnBvbGwoKSBpcyBO
b25lKSBhbmQgKG5vdyA8IGRlYWRsaW5lKToKLSAgICAgICAgICAgIG91dHB1dCA9IHNlbGYuX25v
bl9ibG9ja2luZ19yZWFkX3dpbjMyKG91dF9maCkKLSAgICAgICAgICAgIGVycm9yID0gc2VsZi5f
bm9uX2Jsb2NraW5nX3JlYWRfd2luMzIoZXJyX2ZoKQotICAgICAgICAgICAgaWYgb3V0cHV0IG9y
IGVycm9yOgotICAgICAgICAgICAgICAgIGlmIG91dHB1dDoKLSAgICAgICAgICAgICAgICAgICAg
c2VsZi5fb3V0cHV0ICs9IG91dHB1dAotICAgICAgICAgICAgICAgIGlmIGVycm9yOgotICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9lcnJvciArPSBlcnJvcgotICAgICAgICAgICAgICAgIHJldHVy
bgotICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQotICAgICAgICAgICAgbm93ID0gdGltZS50
aW1lKCkKLSAgICAgICAgcmV0dXJuCi0KLSAgICBkZWYgX25vbl9ibG9ja2luZ19yZWFkX3dpbjMy
KHNlbGYsIGhhbmRsZSk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIF8sIGF2YWlsLCBfID0g
d2luMzJwaXBlLlBlZWtOYW1lZFBpcGUoaGFuZGxlLCAwKQotICAgICAgICAgICAgaWYgYXZhaWwg
PiAwOgotICAgICAgICAgICAgICAgIF8sIGJ1ZiA9IHdpbjMyZmlsZS5SZWFkRmlsZShoYW5kbGUs
IGF2YWlsLCBOb25lKQotICAgICAgICAgICAgICAgIHJldHVybiBidWYKLSAgICAgICAgZXhjZXB0
IEV4Y2VwdGlvbiwgZToKLSAgICAgICAgICAgIGlmIGVbMF0gbm90IGluICgxMDksIGVycm5vLkVT
SFVURE9XTik6ICAjIDEwOSA9PSB3aW4zMiBFUlJPUl9CUk9LRU5fUElQRQotICAgICAgICAgICAg
ICAgIHJhaXNlCi0gICAgICAgIHJldHVybiBOb25lCi0KICAgICBkZWYgaGFzX2NyYXNoZWQoc2Vs
Zik6CiAgICAgICAgIGlmIG5vdCBzZWxmLl9jcmFzaGVkIGFuZCBzZWxmLnBvbGwoKToKICAgICAg
ICAgICAgIF9sb2cuZGVidWcoJ1RoaXMgdGVzdCBtYXJrZWQgYXMgYSBjcmFzaCBiZWNhdXNlIG9m
IGZhaWx1cmUgdG8gcG9sbCB0aGUgc2VydmVyIHByb2Nlc3MuJykKICAgICAgICAgICAgIHNlbGYu
X2NyYXNoZWQgPSBUcnVlCi0gICAgICAgICAgICBzZWxmLl9oYW5kbGVfcG9zc2libGVfaW50ZXJy
dXB0KCkKKyAgICAgICAgICAgIGlmIHNlbGYuX3BpcGU6CisgICAgICAgICAgICAgICAgc2VsZi5f
cGlwZS5oYW5kbGVfaW50ZXJydXB0KCkKICAgICAgICAgcmV0dXJuIHNlbGYuX2NyYXNoZWQKIAot
ICAgICMgVGhpcyByZWFkIGZ1bmN0aW9uIGlzIGEgYml0IG9kZGx5LWRlc2lnbmVkLCBhcyBpdCBw
b2xscyBib3RoIHN0ZG91dCBhbmQgc3RkZXJyLCB5ZXQKLSAgICAjIG9ubHkgcmVhZHMvcmV0dXJu
cyBmcm9tIG9uZSBvZiB0aGVtIChidWZmZXJpbmcgYm90aCBpbiBsb2NhbCBzZWxmLl9vdXRwdXQv
c2VsZi5fZXJyb3IpLgotICAgICMgSXQgbWlnaHQgYmUgY2xlYW5lciB0byBwYXNzIGluIHRoZSBm
aWxlIGRlc2NyaXB0b3IgdG8gcG9sbCBpbnN0ZWFkLgogICAgIGRlZiBfcmVhZChzZWxmLCBkZWFk
bGluZSwgZmV0Y2hfYnl0ZXNfZnJvbV9idWZmZXJzX2NhbGxiYWNrKToKICAgICAgICAgd2hpbGUg
VHJ1ZToKICAgICAgICAgICAgIGlmIHNlbGYuaGFzX2NyYXNoZWQoKToKQEAgLTMyNSw2MyArMjM5
LDM2IEBAIGNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToKICAgICAgICAgICAgIGlmIGJ5dGVz
IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIHJldHVybiBieXRlcwogCi0gICAgICAgICAg
ICBpZiBzZWxmLl91c2Vfd2luMzJfYXBpczoKLSAgICAgICAgICAgICAgICBzZWxmLl93YWl0X2Zv
cl9kYXRhX2FuZF91cGRhdGVfYnVmZmVyc191c2luZ193aW4zMl9hcGlzKGRlYWRsaW5lKQotICAg
ICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLl93YWl0X2Zvcl9kYXRhX2FuZF91
cGRhdGVfYnVmZmVyc191c2luZ19zZWxlY3QoZGVhZGxpbmUpCi0KICAgICBkZWYgc3RhcnQoc2Vs
Zik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9wcm9jOgorICAgICAgICBpZiBub3Qgc2VsZi5fcGlw
ZToKICAgICAgICAgICAgIHNlbGYuX3N0YXJ0KCkKIAogICAgIGRlZiBzdG9wKHNlbGYsIHRpbWVv
dXRfc2Vjcz0zLjApOgotICAgICAgICBpZiBub3Qgc2VsZi5fcHJvYzoKLSAgICAgICAgICAgIHJl
dHVybiAoTm9uZSwgTm9uZSkKKyAgICAgICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIHRpbWVv
dXRfc2VjcwogCi0gICAgICAgICMgT25seSBib3RoZXIgdG8gY2hlY2sgZm9yIGxlYWtzIG9yIHN0
ZGVyciBpZiB0aGUgcHJvY2VzcyBpcyBzdGlsbCBydW5uaW5nLgotICAgICAgICBpZiBzZWxmLnBv
bGwoKSBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5fcG9ydC5jaGVja19mb3JfbGVha3Moc2Vs
Zi5uYW1lKCksIHNlbGYucGlkKCkpCi0KLSAgICAgICAgbm93ID0gdGltZS50aW1lKCkKLSAgICAg
ICAgaWYgc2VsZi5fcHJvYy5zdGRpbjoKLSAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4uY2xv
c2UoKQotICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRpbiA9IE5vbmUKLSAgICAgICAga2lsbGVk
ID0gRmFsc2UKLSAgICAgICAgaWYgdGltZW91dF9zZWNzOgotICAgICAgICAgICAgZGVhZGxpbmUg
PSBub3cgKyB0aW1lb3V0X3NlY3MKLSAgICAgICAgICAgIHdoaWxlIHNlbGYuX3Byb2MucG9sbCgp
IGlzIE5vbmUgYW5kIHRpbWUudGltZSgpIDwgZGVhZGxpbmU6Ci0gICAgICAgICAgICAgICAgdGlt
ZS5zbGVlcCgwLjAxKQotICAgICAgICAgICAgaWYgc2VsZi5fcHJvYy5wb2xsKCkgaXMgTm9uZToK
LSAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ3N0b3BwaW5nICVzKHBpZCAlZCkgdGltZWQg
b3V0LCBraWxsaW5nIGl0JyAlIChzZWxmLl9uYW1lLCBzZWxmLl9wcm9jLnBpZCkpCi0KLSAgICAg
ICAgaWYgc2VsZi5fcHJvYy5wb2xsKCkgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX2tpbGwo
KQotICAgICAgICAgICAga2lsbGVkID0gVHJ1ZQotICAgICAgICAgICAgX2xvZy5kZWJ1Zygna2ls
bGVkIHBpZCAlZCcgJSBzZWxmLl9wcm9jLnBpZCkKLQotICAgICAgICAjIHJlYWQgYW55IHJlbWFp
bmluZyBkYXRhIG9uIHRoZSBwaXBlcyBhbmQgcmV0dXJuIGl0LgotICAgICAgICBpZiBub3Qga2ls
bGVkOgotICAgICAgICAgICAgaWYgc2VsZi5fdXNlX3dpbjMyX2FwaXM6Ci0gICAgICAgICAgICAg
ICAgc2VsZi5fd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnNfdXNpbmdfd2luMzJfYXBp
cyhub3cpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRfZm9y
X2RhdGFfYW5kX3VwZGF0ZV9idWZmZXJzX3VzaW5nX3NlbGVjdChub3csIHN0b3BwaW5nPVRydWUp
Ci0gICAgICAgIG91dCwgZXJyID0gc2VsZi5fb3V0cHV0LCBzZWxmLl9lcnJvcgorICAgICAgICBv
dXQgPSBbXQorICAgICAgICBlcnIgPSBbXQorCisgICAgICAgIGlmIHNlbGYuX3BpcGUgPT0gTm9u
ZToKKyAgICAgICAgICAgIHJldHVybiAob3V0LCBlcnIpCisgICAgICAgIGlmIG5vdCBzZWxmLl9w
aXBlLmlzQ29ubmVjdGVkKCk6CisgICAgICAgICAgICBzZWxmLl9waXBlLmNsb3NlKCkKKyAgICAg
ICAgICAgIHNlbGYuX3Jlc2V0KCkKKyAgICAgICAgICAgIHJldHVybiAob3V0LCBlcnIpCisKKyAg
ICAgICAgb3V0ID0gc2VsZi5fcGlwZS5yZWFkQnVmZmVyU3Rkb3V0KCkKKyAgICAgICAgZXJyID0g
c2VsZi5fcGlwZS5yZWFkQnVmZmVyU3RkZXJyKCkKKworICAgICAgICB3aGlsZSBzZWxmLl9waXBl
LmlzQ29ubmVjdGVkKCkgYW5kIGRlYWRsaW5lID4gdGltZS50aW1lKCk6CisgICAgICAgICAgICBv
dXQgPSBvdXQgKyBzZWxmLl9waXBlLnJlYWRCdWZmZXJTdGRvdXQoKQorICAgICAgICAgICAgZXJy
ID0gZXJyICsgc2VsZi5fcGlwZS5yZWFkQnVmZmVyU3RkZXJyKCkKKworICAgICAgICBpZiAicnVu
LW9uLWRldmljZSIgPT0gc2VsZi5fY21kWzBdOgorICAgICAgICAgICAgc2VsZi5fcG9ydC5ydW5P
bkRldmljZShbJ2tpbGwnLCBzZWxmLl9jbWRbMV0sIHNlbGYuX2NtZFsyXV0pCisgICAgICAgIHNl
bGYuX3BpcGUuY2xvc2UoKQogICAgICAgICBzZWxmLl9yZXNldCgpCiAgICAgICAgIHJldHVybiAo
b3V0LCBlcnIpCiAKICAgICBkZWYga2lsbChzZWxmKToKICAgICAgICAgc2VsZi5zdG9wKDAuMCkK
IAotICAgIGRlZiBfa2lsbChzZWxmKToKLSAgICAgICAgc2VsZi5faG9zdC5leGVjdXRpdmUua2ls
bF9wcm9jZXNzKHNlbGYuX3Byb2MucGlkKQotICAgICAgICBpZiBzZWxmLl9wcm9jLnBvbGwoKSBp
cyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX3Byb2Mud2FpdCgpCi0KLSAgICBkZWYgcmVw
bGFjZV9vdXRwdXRzKHNlbGYsIHN0ZG91dCwgc3RkZXJyKToKLSAgICAgICAgYXNzZXJ0IHNlbGYu
X3Byb2MKLSAgICAgICAgaWYgc3Rkb3V0OgotICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRvdXQu
Y2xvc2UoKQotICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRvdXQgPSBzdGRvdXQKLSAgICAgICAg
aWYgc3RkZXJyOgotICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRlcnIuY2xvc2UoKQotICAgICAg
ICAgICAgc2VsZi5fcHJvYy5zdGRlcnIgPSBzdGRlcnIKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzc191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3NfdW5pdHRlc3QucHkJKHJldmlz
aW9uIDIwOTkxOCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vz
c191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQgQEAKKyMgQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApA
QCAtMzIsNiArMzMsNyBAQCBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB3ZWJraXRweS5wb3J0LmZh
Y3RvcnkgaW1wb3J0IFBvcnRGYWN0b3J5CiBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IHNlcnZl
cl9wcm9jZXNzCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5pcGNfcGlwZV90ZXN0Y2FzZSBpbXBvcnQg
RHVtbXlQcm9jZXNzUGlwZQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3Qg
aW1wb3J0IFN5c3RlbUhvc3QKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1ob3N0
X21vY2sgaW1wb3J0IE1vY2tTeXN0ZW1Ib3N0CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0u
b3V0cHV0Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2FwdHVyZQpAQCAtNTMsNDggKzU1LDExIEBAIGNs
YXNzIFRyaXZpYWxNb2NrUG9ydChvYmplY3QpOgogICAgICAgICByZXR1cm4gMQogCiAKLWNsYXNz
IE1vY2tGaWxlKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcnZlcl9wcm9jZXNz
KToKLSAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3MgPSBzZXJ2ZXJfcHJvY2VzcwotICAgICAg
ICBzZWxmLmNsb3NlZCA9IEZhbHNlCi0KLSAgICBkZWYgZmlsZW5vKHNlbGYpOgotICAgICAgICBy
ZXR1cm4gMQotCi0gICAgZGVmIHdyaXRlKHNlbGYsIGxpbmUpOgotICAgICAgICBzZWxmLl9zZXJ2
ZXJfcHJvY2Vzcy5icm9rZW5fcGlwZXMuYXBwZW5kKHNlbGYpCi0gICAgICAgIHJhaXNlIElPRXJy
b3IKLQotICAgIGRlZiByZWFkKHNlbGYsIHNpemU9MCk6Ci0gICAgICAgICMgVGhpcyBtZWFucyBl
bmQgb2YgZmlsZQotICAgICAgICByZXR1cm4gJycKLQotICAgIGRlZiBjbG9zZShzZWxmKToKLSAg
ICAgICAgc2VsZi5jbG9zZWQgPSBUcnVlCi0KLQotY2xhc3MgTW9ja1Byb2Mob2JqZWN0KToKLSAg
ICBkZWYgX19pbml0X18oc2VsZiwgc2VydmVyX3Byb2Nlc3MpOgotICAgICAgICBzZWxmLnN0ZGlu
ID0gTW9ja0ZpbGUoc2VydmVyX3Byb2Nlc3MpCi0gICAgICAgIHNlbGYuc3Rkb3V0ID0gTW9ja0Zp
bGUoc2VydmVyX3Byb2Nlc3MpCi0gICAgICAgIHNlbGYuc3RkZXJyID0gTW9ja0ZpbGUoc2VydmVy
X3Byb2Nlc3MpCi0gICAgICAgIHNlbGYucGlkID0gMQotCi0gICAgZGVmIHBvbGwoc2VsZik6Ci0g
ICAgICAgIHJldHVybiAxCi0KLSAgICBkZWYgd2FpdChzZWxmKToKLSAgICAgICAgcmV0dXJuIDAK
LQotCiBjbGFzcyBGYWtlU2VydmVyUHJvY2VzcyhzZXJ2ZXJfcHJvY2Vzcy5TZXJ2ZXJQcm9jZXNz
KToKICAgICBkZWYgX3N0YXJ0KHNlbGYpOgotICAgICAgICBzZWxmLl9wcm9jID0gTW9ja1Byb2Mo
c2VsZikKLSAgICAgICAgc2VsZi5zdGRpbiA9IHNlbGYuX3Byb2Muc3RkaW4KLSAgICAgICAgc2Vs
Zi5zdGRvdXQgPSBzZWxmLl9wcm9jLnN0ZG91dAotICAgICAgICBzZWxmLnN0ZGVyciA9IHNlbGYu
X3Byb2Muc3RkZXJyCi0gICAgICAgIHNlbGYuX3BpZCA9IHNlbGYuX3Byb2MucGlkCi0gICAgICAg
IHNlbGYuYnJva2VuX3BpcGVzID0gW10KKyAgICAgICAgc2VsZi5fcGlwZSA9IER1bW15UHJvY2Vz
c1BpcGUoc2VsZi5fcG9ydCwgc2VsZi5fY21kLCBzZWxmLl9lbnYsIHNlbGYuX3VuaXZlcnNhbF9u
ZXdsaW5lcykKKyAgICAgICAgc2VsZi5fcGlkID0gc2VsZi5fcGlwZS5waWQoKQorICAgICAgICBz
ZWxmLl9waXBlLmNvbm5lY3RlZEZvclRlc3RpbmcgPSBGYWxzZQogCiAKIGNsYXNzIFRlc3RTZXJ2
ZXJQcm9jZXNzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTEzNSw5ICsxMDAsNyBAQCBjbGFzcyBU
ZXN0U2VydmVyUHJvY2Vzcyh1bml0dGVzdC5UZXN0Q2FzCiAgICAgICAgIHNlcnZlcl9wcm9jZXNz
ID0gRmFrZVNlcnZlclByb2Nlc3MocG9ydF9vYmo9cG9ydF9vYmosIG5hbWU9InRlc3QiLCBjbWQ9
WyJ0ZXN0Il0pCiAgICAgICAgIHNlcnZlcl9wcm9jZXNzLl9zdGFydCgpCiAgICAgICAgIHNlcnZl
cl9wcm9jZXNzLnN0b3AoKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VydmVyX3Byb2Nlc3Mu
c3RkaW4uY2xvc2VkKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VydmVyX3Byb2Nlc3Muc3Rk
b3V0LmNsb3NlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlcnZlcl9wcm9jZXNzLnN0ZGVy
ci5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlcnZlcl9wcm9jZXNzLl9waXBl
KQogCiAgICAgZGVmIHRlc3RfYnJva2VuX3BpcGUoc2VsZik6CiAgICAgICAgIHBvcnRfb2JqID0g
VHJpdmlhbE1vY2tQb3J0KCkKQEAgLTE0NiwxMyArMTA5LDEyIEBAIGNsYXNzIFRlc3RTZXJ2ZXJQ
cm9jZXNzKHVuaXR0ZXN0LlRlc3RDYXMKICAgICAgICAgc2VydmVyX3Byb2Nlc3MgPSBGYWtlU2Vy
dmVyUHJvY2Vzcyhwb3J0X29iaj1wb3J0X29iaiwgbmFtZT0idGVzdCIsIGNtZD1bInRlc3QiXSkK
ICAgICAgICAgc2VydmVyX3Byb2Nlc3Mud3JpdGUoInNob3VsZCBicmVhayIpCiAgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShzZXJ2ZXJfcHJvY2Vzcy5oYXNfY3Jhc2hlZCgpKQotICAgICAgICBzZWxm
LmFzc2VydElzTm90Tm9uZShzZXJ2ZXJfcHJvY2Vzcy5waWQoKSkKLSAgICAgICAgc2VsZi5hc3Nl
cnRJc05vbmUoc2VydmVyX3Byb2Nlc3MuX3Byb2MpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
c2VydmVyX3Byb2Nlc3MuYnJva2VuX3BpcGVzLCBbc2VydmVyX3Byb2Nlc3Muc3RkaW5dKQorICAg
ICAgICBzZWxmLmFzc2VydElzTm9uZShzZXJ2ZXJfcHJvY2Vzcy5fcGlwZSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRJc05vbmUoc2VydmVyX3Byb2Nlc3MucGlkKCkpCiAKICAgICAgICAgcG9ydF9vYmou
aG9zdC5wbGF0Zm9ybS5vc19uYW1lID0gJ21hYycKICAgICAgICAgc2VydmVyX3Byb2Nlc3MgPSBG
YWtlU2VydmVyUHJvY2Vzcyhwb3J0X29iaj1wb3J0X29iaiwgbmFtZT0idGVzdCIsIGNtZD1bInRl
c3QiXSkKICAgICAgICAgc2VydmVyX3Byb2Nlc3Mud3JpdGUoInNob3VsZCBicmVhayIpCiAgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZXJ2ZXJfcHJvY2Vzcy5oYXNfY3Jhc2hlZCgpKQotICAgICAg
ICBzZWxmLmFzc2VydElzTm9uZShzZXJ2ZXJfcHJvY2Vzcy5fcHJvYykKLSAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChzZXJ2ZXJfcHJvY2Vzcy5icm9rZW5fcGlwZXMsIFtzZXJ2ZXJfcHJvY2Vzcy5z
dGRpbl0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlcnZlcl9wcm9jZXNzLl9waXBlKQor
ICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZXJ2ZXJfcHJvY2Vzcy5waWQoKSkKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvcHl0aG9uLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvcHl0aG9uLnB5CShyZXZp
c2lvbiAyMDk5MTgpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL3B5
dGhvbi5weQkod29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBAIGNsYXNzIFB5bGludGVy
KG9iamVjdCk6CiAKICAgICBkZWYgcnVuKHNlbGYsIGFyZ3YpOgogICAgICAgICBvdXRwdXQgPSBf
RmlsdGVyZWRTdHJpbmdJTyhzZWxmLkZBTFNFX1BPU0lUSVZFUykKLSAgICAgICAgbGludC5SdW4o
WyctLXJjZmlsZScsIHNlbGYuX3B5bGludHJjXSArIGFyZ3YsIHJlcG9ydGVyPVBhcnNlYWJsZVRl
eHRSZXBvcnRlcihvdXRwdXQ9b3V0cHV0KSwgZXhpdD1GYWxzZSkKKyAgICAgICAgbGludC5SdW4o
WyctLWlnbm9yZWQtY2xhc3Nlcz1fc29ja2V0b2JqZWN0JywgJy0tcmNmaWxlJywgc2VsZi5fcHls
aW50cmNdICsgYXJndiwgcmVwb3J0ZXI9UGFyc2VhYmxlVGV4dFJlcG9ydGVyKG91dHB1dD1vdXRw
dXQpLCBleGl0PUZhbHNlKQogICAgICAgICByZXR1cm4gb3V0cHV0CiAKIApJbmRleDogVG9vbHMv
VGVzdFJ1bm5lclNoYXJlZC91bml4TG9nZ2luZ1BpcGVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
VGVzdFJ1bm5lclNoYXJlZC91bml4TG9nZ2luZ1BpcGVzLmgJKG5vbmV4aXN0ZW50KQorKysgVG9v
bHMvVGVzdFJ1bm5lclNoYXJlZC91bml4TG9nZ2luZ1BpcGVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAgICAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdUUiB7CisKK3ZvaWQgc2V0dXBV
bml4TG9nZ2luZ1BpcGVzKCk7Cit2b2lkIHRlYXJkb3duVW5peExvZ2dpbmdQaXBlcygpOworCit9
CkluZGV4OiBUb29scy9UZXN0UnVubmVyU2hhcmVkL3VuaXhMb2dnaW5nUGlwZXMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC91bml4TG9nZ2luZ1BpcGVzLm1tCShub25l
eGlzdGVudCkKKysrIFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvdW5peExvZ2dpbmdQaXBlcy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAidW5p
eExvZ2dpbmdQaXBlcy5oIgorCisjaW1wb3J0IDxuZXRkYi5oPgorI2ltcG9ydCA8c3lzL3VuLmg+
CisKK25hbWVzcGFjZSBXVFIgeworCitzdGF0aWMgY29uc3QgaW50IFNURElOX0lOREVYID0gMDsK
K3N0YXRpYyBjb25zdCBpbnQgU1RET1VUX0lOREVYID0gMTsKK3N0YXRpYyBjb25zdCBpbnQgU1RE
RVJSX0lOREVYID0gMjsKK3N0YXRpYyBjb25zdCBpbnQgTlVNX1NPQ0tFVFMgPSAzOworICAgIAor
c3RhdGljIGludCBzb2NrZXRzW05VTV9TT0NLRVRTXTsKK3N0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJf
dW4gYWRkcmVzc1tOVU1fU09DS0VUU107CitzdGF0aWMgRklMRSogb2xkRmlsZXNbTlVNX1NPQ0tF
VFNdOworc3RhdGljIEZJTEUqKiBmaWxlc1tOVU1fU09DS0VUU107CisKK3ZvaWQgc2V0dXBVbml4
TG9nZ2luZ1BpcGVzKCkKK3sKKyAgICBjb25zdCBjaGFyKiBpZGVudGlmaWVyID0gZ2V0ZW52KCJJ
UENfSURFTlRJRklFUiIpOworICAgIGNvbnN0IGNoYXIgKnNvY2tldFBhdGhzWzNdOworICAgIHNv
Y2tldFBhdGhzW1NURElOX0lOREVYXSA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIi90
bXAvJXNfSU4iLCBpZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsKKyAgICBzb2NrZXRQYXRoc1tTVERP
VVRfSU5ERVhdID0gW1tOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiL3RtcC8lc19PVVQiLCBp
ZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsKKyAgICBzb2NrZXRQYXRoc1tTVERFUlJfSU5ERVhdID0g
W1tOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiL3RtcC8lc19FUlJPUiIsIGlkZW50aWZpZXJd
IFVURjhTdHJpbmddOworCisgICAgZmlsZXNbU1RESU5fSU5ERVhdID0gJnN0ZGluOworICAgIGZp
bGVzW1NURE9VVF9JTkRFWF0gPSAmc3Rkb3V0OworICAgIGZpbGVzW1NUREVSUl9JTkRFWF0gPSAm
c3RkZXJyOworICAgIAorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1NPQ0tFVFM7ICsraSkg
eworICAgICAgICBzb2NrZXRzW2ldID0gc29ja2V0KEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwKTsK
KyAgICAgICAgbWVtc2V0KChjaGFyKikgJmFkZHJlc3NbaV0sIDAsIHNpemVvZihhZGRyZXNzW2ld
KSk7CisgICAgICAgIGFkZHJlc3NbaV0uc3VuX2ZhbWlseSA9IEFGX1VOSVg7CisgICAgICAgIHN0
cm5jcHkoYWRkcmVzc1tpXS5zdW5fcGF0aCwgc29ja2V0UGF0aHNbaV0sIHNpemVvZihhZGRyZXNz
W2ldLnN1bl9wYXRoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoOjpjb25uZWN0KHNvY2tldHNb
aV0sIChzdHJ1Y3Qgc29ja2FkZHIqKSAmYWRkcmVzc1tpXSwgc2l6ZW9mKGFkZHJlc3NbaV0pKSA8
IDApCisgICAgICAgICAgICBhYm9ydCgpOworICAgICAgICBvbGRGaWxlc1tpXSA9ICpmaWxlc1tp
XTsKKyAgICAgICAgZmZsdXNoKG9sZEZpbGVzW2ldKTsKKyAgICAgICAgaWYgKGkgPT0gU1RESU5f
SU5ERVgpCisgICAgICAgICAgICAqZmlsZXNbaV0gPSBmZG9wZW4oc29ja2V0c1tpXSwgInJiIik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpmaWxlc1tpXSA9IGZkb3Blbihzb2NrZXRzW2ld
LCAid2IiKTsKKyAgICAgICAgc2V0bGluZWJ1ZigqZmlsZXNbaV0pOworICAgIH0KKyAgICBmcHJp
bnRmKHN0ZGVyciwgIiNQSUQ6ICVkXG4iLCBnZXRwaWQoKSk7Cit9CisKK3ZvaWQgdGVhcmRvd25V
bml4TG9nZ2luZ1BpcGVzKCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9TT0NLRVRT
OyArK2kpIHsKKyAgICAgICAgZmZsdXNoKCpmaWxlc1tpXSk7CisgICAgICAgIGZjbG9zZSgqZmls
ZXNbaV0pOworICAgICAgICAKKyAgICAgICAgc2h1dGRvd24oc29ja2V0c1tpXSwgU0hVVF9SRFdS
KTsKKyAgICAgICAgOjpjbG9zZShzb2NrZXRzW2ldKTsKKyAgICAgICAgKmZpbGVzW2ldID0gb2xk
RmlsZXNbaV07CisgICAgfQorfQorCit9CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1dl
YktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMjA5OTE4KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJL
aXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTc0LDYgKzc0LDggQEAKIAkJMkU2M0VEQTExODkxQjI5MTAwMkE3QUZDIC8qIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnRJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyRTYzRUQ3ODE4OTFBQ0U5MDAyQTdBRkMgLyogQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dElPUy5tbSAqLzsgfTsKIAkJMkU2M0VEQTYxODkxQkRDMDAwMkE3QUZDIC8qIFRlc3RSdW5uZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNDOTk4
MTcxMUQzRjUxRTAwMTdCQ0EyIC8qIFRlc3RSdW5uZXIuY3BwICovOyB9OwogCQkyRTc0OUJGMjE4
OTFFQkZBMDA3RkMxNzUgLyogRXZlbnRTZW5kZXJQcm94eUlPUy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNjNFRDdBMTg5MUFDRTkwMDJBN0FGQyAv
KiBFdmVudFNlbmRlclByb3h5SU9TLm1tICovOyB9OworCQkzMUIwOUNEMDFFMDQ1MzE0MDA2RjRF
NEQgLyogdW5peExvZ2dpbmdQaXBlcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxQjA5Q0NBMUUwNDUxOTcwMDZGNEU0RCAvKiB1bml4TG9nZ2luZ1Bp
cGVzLm1tICovOyB9OworCQkzMUIwOUNEMTFFMDQ1MzJBMDA2RjRFNEQgLyogdW5peExvZ2dpbmdQ
aXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFC
MDlDQzkxRTA0NTE5NzAwNkY0RTREIC8qIHVuaXhMb2dnaW5nUGlwZXMuaCAqLzsgfTsKIAkJNTEw
NThBRDUxRDY3ODgyMDAwOUE1MzhDIC8qIGxpYldlYkNvcmVUZXN0U3VwcG9ydC5keWxpYiBpbiBG
cmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMjMwRTE2MTM4
Qzc4QkYwMEJDQ0ZDQSAvKiBsaWJXZWJDb3JlVGVzdFN1cHBvcnQuZHlsaWIgKi87IH07CiAJCTUx
MDU4QUQ2MUQ2Nzg4MjUwMDlBNTM4QyAvKiBXZWJLaXQuZnJhbWV3b3JrIGluIEZyYW1ld29ya3Mg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1MTY5Q0ExNDQ1MjIyRDAwRTBB
OUQ3IC8qIFdlYktpdC5mcmFtZXdvcmsgKi87IH07CiAJCTU2NDFFMkQwMTQzMzVFOTUwMDgzMDdF
NSAvKiBKU1RleHRJbnB1dENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTY0MUUyQ0UxNDMzNUU5NTAwODMwN0U1IC8qIEpTVGV4dElu
cHV0Q29udHJvbGxlci5jcHAgKi87IH07CkBAIC0yNTYsNiArMjU4LDggQEAKIAkJMkVFNTJEMTYx
ODkwQTlGQjAwMTBFRDIxIC8qIG1haW5JT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IG5hbWUgPSBtYWluSU9TLm1tOyBwYXRoID0gLi4vaW9zL21haW5JT1MubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMTBCRTBGMTVCQTAxMTQwMEQyMTZBQyAvKiBXZWJO
b3RpZmljYXRpb25Qcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJOb3RpZmljYXRpb25Qcm92
aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTY0QzhFRjE1RDFBREExMDBF
RjFGRTAgLyogV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkzMUIwOUNDOTFFMDQ1MTk3MDA2RjRFNEQgLyogdW5peExvZ2dp
bmdQaXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSB1bml4TG9nZ2luZ1Bp
cGVzLmg7IHBhdGggPSAuLi9UZXN0UnVubmVyU2hhcmVkL3VuaXhMb2dnaW5nUGlwZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzFCMDlDQ0ExRTA0NTE5NzAwNkY0RTREIC8qIHVu
aXhMb2dnaW5nUGlwZXMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUg
PSB1bml4TG9nZ2luZ1BpcGVzLm1tOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJlZC91bml4TG9n
Z2luZ1BpcGVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzhENDQyMjEzMzQ2
RDAwMDA2QTc3N0IgLyogY29uZmlnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNvbmZpZy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0MTIzMEUxNjEzOEM3OEJGMDBCQ0NGQ0EgLyogbGliV2Vi
Q29yZVRlc3RTdXBwb3J0LmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IHBhdGggPSBsaWJXZWJDb3Jl
VGVzdFN1cHBvcnQuZHlsaWI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJ
CTQxODE3MzFCMTM4QUQzOUQwMDU3QUFBNCAvKiBXZWJDb3JlVGVzdFN1cHBvcnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQ29yZVRlc3RTdXBwb3J0Lmg7IHBhdGggPSBX
ZWJDb3JlVGVzdFN1cHBvcnQvV2ViQ29yZVRlc3RTdXBwb3J0Lmg7IHNvdXJjZVRyZWUgPSBCVUlM
VF9QUk9EVUNUU19ESVI7IH07CkBAIC00NTYsNiArNDYwLDggQEAKIAkJMEYxOEU3MUExRDZCQzRC
QzAwMjdFNTQ3IC8qIFRlc3RSdW5uZXJTaGFyZWQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAorCQkJCTMxQjA5Q0M5MUUwNDUxOTcwMDZGNEU0RCAvKiB1bml4TG9n
Z2luZ1BpcGVzLmggKi8sCisJCQkJMzFCMDlDQ0ExRTA0NTE5NzAwNkY0RTREIC8qIHVuaXhMb2dn
aW5nUGlwZXMubW0gKi8sCiAJCQkJMEYxOEU3MUIxRDZCQzRFNjAwMjdFNTQ3IC8qIEJpbmRpbmdz
ICovLAogCQkJCTBGNzNCNTQ3MUJBNzgyRkUwMDRCM0VGNCAvKiBVSVNjcmlwdENvbnRleHQgKi8s
CiAJCQkpOwpAQCAtNzc3LDYgKzc4Myw3IEBACiAJCQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFz
ZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQkz
MUIwOUNEMTFFMDQ1MzJBMDA2RjRFNEQgLyogdW5peExvZ2dpbmdQaXBlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY3M0I1NTIxQkE3ODk2ODAwNEIzRUY0IC8qIEpTVUlTY3JpcHRDb250cm9sbGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKQEAgLTk4NCw2ICs5OTEsNyBAQAogCQkJCTBGNzNCNTUxMUJBNzg5NjgwMDRC
M0VGNCAvKiBKU1VJU2NyaXB0Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjE4
RTcxODFENkJDNDU2MDAyN0U1NDcgLyogSlNXcmFwcGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUExODUxMDNDMUI5QUUwRkUwMDc0NEFFQiAvKiBPcHRpb25zLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTMxQjA5Q0QwMUUwNDUzMTQwMDZGNEU0RCAvKiB1bml4TG9nZ2luZ1BpcGVzLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTE4NTEwNDAxQjlBRTEzMTAwNzQ0QUVCIC8qIFBpeGVsRHVtcFN1cHBv
cnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE4NTEwNDExQjlBRTEzODAwNzQ0QUVCIC8qIFRl
c3RDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExODUxMDNCMUI5QUUwRTIwMDc0
NEFFQiAvKiBUZXN0Q29udHJvbGxlckNvY29hLm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbQkocmV2aXNp
b24gMjA5OTE4KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJ
T1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2LDExICsyNiwxMyBAQAogI2ltcG9ydCAiY29uZmln
LmgiCiAjaW1wb3J0ICJUZXN0Q29udHJvbGxlci5oIgogCisKICNpbXBvcnQgIlBsYXRmb3JtV2Vi
Vmlldy5oIgogI2ltcG9ydCAiVGVzdEludm9jYXRpb24uaCIKICNpbXBvcnQgIlRlc3RSdW5uZXJX
S1dlYlZpZXcuaCIKICNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgogI2ltcG9ydCA8
VUlLaXQvVUlLaXQuaD4KKyNpbXBvcnQgInVuaXhMb2dnaW5nUGlwZXMuaCIKICNpbXBvcnQgPFdl
YktpdC9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vz
c1Bvb2xQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tTdHJpbmdDRi5oPgpAQCAtNDcsMjEg
KzQ5LDEyIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6Om5vdGlmeURvbmUoKQogCiB2b2lkIFRlc3RD
b250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemUoKQogewotICAgIGNvbnN0IGNoYXIqIGlkZW50
aWZpZXIgPSBnZXRlbnYoIklQQ19JREVOVElGSUVSIik7Ci0gICAgY29uc3QgY2hhciAqc3RkaW5Q
YXRoID0gW1tOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiL3RtcC8lc19JTiIsIGlkZW50aWZp
ZXJdIFVURjhTdHJpbmddOwotICAgIGNvbnN0IGNoYXIgKnN0ZG91dFBhdGggPSBbW05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCIvdG1wLyVzX09VVCIsIGlkZW50aWZpZXJdIFVURjhTdHJpbmdd
OwotICAgIGNvbnN0IGNoYXIgKnN0ZGVyclBhdGggPSBbW05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCIvdG1wLyVzX0VSUk9SIiwgaWRlbnRpZmllcl0gVVRGOFN0cmluZ107Ci0KLSAgICBpbnQg
aW5mZCA9IG9wZW4oc3RkaW5QYXRoLCBPX1JEV1IpOwotICAgIGR1cDIoaW5mZCwgU1RESU5fRklM
RU5PKTsKLSAgICBpbnQgb3V0ZmQgPSBvcGVuKHN0ZG91dFBhdGgsIE9fUkRXUik7Ci0gICAgZHVw
MihvdXRmZCwgU1RET1VUX0ZJTEVOTyk7Ci0gICAgaW50IGVycmZkID0gb3BlbihzdGRlcnJQYXRo
LCBPX1JEV1IgfCBPX05PTkJMT0NLKTsKLSAgICBkdXAyKGVycmZkLCBTVERFUlJfRklMRU5PKTsK
KyAgICBzZXR1cFVuaXhMb2dnaW5nUGlwZXMoKTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6
cGxhdGZvcm1EZXN0cm95KCkKIHsKKyAgICB0ZWFyZG93blVuaXhMb2dnaW5nUGlwZXMoKTsKIH0K
IAogdm9pZCBUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZUluamVjdGVkQnVuZGxlUGF0aCgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297333</attachid>
            <date>2016-12-16 11:21:47 -0800</date>
            <delta_ts>2016-12-16 12:20:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165927-20161216112053.patch</filename>
            <type>text/plain</type>
            <size>99903</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIwOTkyNykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEzMyBAQAorMjAxNi0xMi0xNSAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5j
b20+CisKKyAgICAgICAgUmVtb3ZpbmcgTGF5b3V0VGVzdFJlbGF5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU5MjcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0R1bXBSZW5k
ZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZGVkIHVuaXhMb2dnaW5nUGlwZXMu
aCBhbmQgLm1tIHRvIER1bXBSZW5kZXJUcmVlLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21h
Yy9EdW1wUmVuZGVyVHJlZS5tbTogQWRkZWQgY2FsbCB0byBzZXR1cFVuaXhMb2dnaW5nUGlwZXMo
KSBhbmQgdGVhcmRvd25Vbml4TG9nZ2luZ1BpcGVzKCkgZm9yIGlPUy4KKyAgICAgICAgKGR1bXBS
ZW5kZXJUcmVlKTogCisgICAgICAgICogTGF5b3V0VGVzdFJlbGF5OiBSZW1vdmVkLgorICAgICAg
ICAqIE1ha2VmaWxlOgorICAgICAgICAqIFNjcmlwdHMvYnVpbGQtbGF5b3V0dGVzdHJlbGF5OiBS
ZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvYnVpbGQtd2Via2l0OiBSZW1vdmVkIHJlZmVyZW5j
ZSB0byBMYXlvdXRUZXN0UmVsYXkuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24v
aXBjX3BpcGUucHk6IEFkZGVkLgorICAgICAgICAoVW5peFBpcGVTZXJ2ZXIpOiBBIHNlcnZlci1z
aWRlIFVuaXggcGlwZSBhYnN0cmFjdGlvbiB1c2VkIHRvIHNlbmQgZGF0YSBvdmVyIGEgQUZfVU5J
WCBzdHJlYW1pbmcgc29ja2V0LgorICAgICAgICAoQWJzdHJhY3RQaXBlKTogQWJzdHJhY3Rpb24g
Zm9yIHJlYWRpbmcgZnJvbS93cml0aW5nIHRvIHN0ZGluLCBzdGRvdXQgYW5kIHN0ZGVyci4KKyAg
ICAgICAgKEFic3RyYWN0UGlwZS5jbGVhbik6IENsZWFycyB0aGUgc3Rkb3V0IGFuZCBzdGRlcnIg
c3RyZWFtcyB0byBwcmVzZXJ2ZSBtZW1vcnkuCisgICAgICAgIChBYnN0cmFjdFBpcGUuX3BhcnNl
TWVzc2FnZSk6IEV4cGVjdGVkIHRvIGJlIG92ZXJyaWRkZW4gYnkgY2hpbGQgY2xhc3Nlcy4gIEFk
ZHMgZGF0YSB0byBzdGRvdXQgYW5kIHN0ZGVyciBzdHJlYW1zLgorICAgICAgICAoQWJzdHJhY3RQ
aXBlLnJlYWRMaW5lKTogUmVhZCB0aGUgbmV4dCBsaW5lLCByZWFkIHN0ZGVyciBiZWZvcmUgc3Rk
b3V0LgorICAgICAgICAoQWJzdHJhY3RQaXBlLnN0ZG91dFJlYWQpOiBSZWFkIGEgbGluZSBmcm9t
IHN0ZG91dCwgY2FsbHMgX3BhcnNlTWVzc2FnZS4KKyAgICAgICAgKEFic3RyYWN0UGlwZS5zdGRl
cnJSZWFkKTogUmVhZCBhIGxpbmUgZnJvbSBzdGRlcnIsIGNhbGxzIF9wYXJzZU1lc3NhZ2UuCisg
ICAgICAgIChBYnN0cmFjdFBpcGUucmVhZEJ1ZmZlclN0ZG91dCk6IFJlYWQgZXZlcnl0aGluZyBp
biB0aGUgc3Rkb3V0IGJ1ZmZlci4KKyAgICAgICAgKEFic3RyYWN0UGlwZS5yZWFkQnVmZmVyU3Rk
ZXJyKTogUmVhZCBldmVyeXRoaW5nIGluIHRoZSBzdGRlcnIgYnVmZmVyLgorICAgICAgICAoQWJz
dHJhY3RQaXBlLnJlYWRCbG9ja1N0ZG91dCk6IFJlYWQgYSBibG9jayBvZiBzaXplIGZyb20gc3Rk
b3V0LCBjYWxscyBfcGFyc2VNZXNzYWdlLgorICAgICAgICAoQWJzdHJhY3RQaXBlLnJlYWRCbG9j
a1N0ZGVycik6IFJlYWQgYSBibG9jayBvZiBzaXplIGZyb20gc3RkZXJyLCBjYWxscyBfcGFyc2VN
ZXNzYWdlLgorICAgICAgICAoVW5peFBpcGUpOiBJbmhlcml0cyBmcm9tIEFic3RyYWN0UGlwZSwg
dXNlcyB0aHJlZSBVbml4IHBpcGVzIGFzIHN0ZGluLCBzdGRvdXQgYW5kIHN0ZGVyci4KKyAgICAg
ICAgKFVuaXhQaXBlLl9faW5pdF9fKTogT3BlbnMgYWxsIDMgVW5peCBwaXBlcyBhbmQgYmVnaW5z
IGxpc3RlbmluZyBmb3IgY29ubmVjdGlvbnMuCisgICAgICAgIChVbml4UGlwZS5jb25uZWN0KTog
V2FpdCBmb3IgY29ubmVjdGlvbnMgb24gYWxsIDMgVW5peCBwaXBlcywgcmV0dXJuIGNvbm5lY3Rp
b24gc3RhdHVzLgorICAgICAgICAoVW5peFBpcGUuY2xvc2UpOiBEaXNjb25uZWN0IGFsbCAzIFVu
aXggcGlwZXMuCisgICAgICAgIChVbml4UGlwZS5zZW5kKTogU2VuZCBtZXNzYWdlIHRocm91Z2gg
c3RkaW4gcGlwZS4KKyAgICAgICAgKFVuaXhQaXBlLl9wYXJzZU1lc3NhZ2UpOiBBdHRlbXB0IHRv
IHJlYWQgZnJvbSBib3RoIHN0ZG91dCBhbmQgc3RkZXJyIFVuaXggcGlwZXMuCisgICAgICAgIChV
bml4UGlwZS5oYW5kbGVfaW50ZXJydXB0KTogTmVlZGVkIGR1cmluZyBjcmFzaGVzLgorICAgICAg
ICAoUHJvY2Vzc1BpcGUpOiAKKyAgICAgICAgKFByb2Nlc3NQaXBlLl9faW5pdF9fKToKKyAgICAg
ICAgKFByb2Nlc3NQaXBlLnBpZCk6CisgICAgICAgIChQcm9jZXNzUGlwZS5pc0Nvbm5lY3RlZCk6
CisgICAgICAgIChQcm9jZXNzUGlwZS5oYW5kbGVfaW50ZXJydXB0KToKKyAgICAgICAgKFByb2Nl
c3NQaXBlLmNsb3NlKToKKyAgICAgICAgKFByb2Nlc3NQaXBlLnNlbmQpOgorICAgICAgICAoUHJv
Y2Vzc1BpcGUuX3VuaXhzdGRCbG9jayk6CisgICAgICAgIChQcm9jZXNzUGlwZS5fdW5peGVyckJs
b2NrKToKKyAgICAgICAgKFByb2Nlc3NQaXBlLl93aW4zMk5vbkJsb2NraW5nUmVhZCk6CisgICAg
ICAgIChQcm9jZXNzUGlwZS5fd2luMzJzdGRCbG9jayk6CisgICAgICAgIChQcm9jZXNzUGlwZS5f
d2luMzJlcnJCbG9jayk6CisgICAgICAgIChQcm9jZXNzUGlwZS5fcGFyc2VNZXNzYWdlKToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9pcGNfcGlwZV90ZXN0Y2FzZS5weTogQWRk
ZWQuCisgICAgICAgIChEdW1teVByb2Nlc3NQaXBlKTogUHJvY2VzcyBwaXBlIHVzZWQgZm9yIHRl
c3RpbmcuCisgICAgICAgIChVbml4UGlwZUNsaWVudCk6IFVuaXggcGlwZSBjbGllbnQgdXNlZCB0
byB0ZXN0IFVuaXhQaXBlU2VydmVyIGFuZCBVbml4UGlwZSBjbGFzc2VzLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvY29tbW9uL2lwY19waXBlX3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAg
ICAgKFVuaXhQaXBlQ2xpZW50VGVzdGluZ1RocmVhZCk6IEZ1bmN0aW9uIHVzZWQgZm9yIHRlc3Rp
bmcgY2xpZW50L3NlcnZlciBhcmNoaXRlY3R1cmVzLgorICAgICAgICAoaXBjUGlwZVRlc3QpOiBV
bml0IHRlc3RzIGZvciBjbGFzc2VzIGluIGlwY19waXBlLnB5LgorICAgICAgICAoaXBjUGlwZVRl
c3QudGVzdF9hYnN0cmFjdHBpcGVfc3Rkb3V0KTogVGVzdCBzdGRvdXQgc3RyZWFtIGluIHRoZSBh
YnN0cmFjdCBwaXBlLgorICAgICAgICAoaXBjUGlwZVRlc3QudGVzdF9hYnN0cmFjdHBpcGVfc3Rk
ZXJyKTogVGVzdCBzdGRlcnIgc3RyZWFtIGluIHRoZSBhYnN0cmFjdCBwaXBlLgorICAgICAgICAo
aXBjUGlwZVRlc3QudGVzdF9hYnN0cmFjdHBpcGVfZHVlbF9zdHJlYW1zKTogRW5zdXJlIHN0ZG91
dCBhbmQgc3RkZXJyIGRvIG5vdCBtaW5nbGUuCisgICAgICAgIChpcGNQaXBlVGVzdC50ZXN0X2Fi
c3RyYWN0cGlwZV9zdGRvdXRibG9jayk6IFRlc3QgcmVhZGluZyBhIGRhdGEgYmxvY2sgZnJvbSBz
dGRvdXQuCisgICAgICAgIChpcGNQaXBlVGVzdC50ZXN0X2Fic3RyYWN0cGlwZV9zdGRlcnJibG9j
ayk6IFRlc3QgcmVhZGluZyBhIGRhdGEgYmxvY2sgZnJvbSBzdGRlcnIuCisgICAgICAgIChpcGNQ
aXBlVGVzdC50ZXN0X3VuaXhQaXBlU2VydmVyKTogVGVzdCB0aGUgVW5peFBpcGVTZXJ2ZXIgd2l0
aCBhIFVuaXhQaXBlQ2xpZW50LgorICAgICAgICAoaXBjUGlwZVRlc3QudGVzdF91bml4UGlwZSk6
IFRlc3QgYWxsIHRocmVlIHN0cmVhbXMgb2YgdGhlIFVuaXhQaXBlIGNsYXNzLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5OgorICAgICAgICAoUG9ydC50by5kZXZpY2VE
ZWZpbmVkKTogRnVuY3Rpb24gdG8gYmUgb3ZlcnJpZGRlbiBieSBpT1MgY2xhc3Nlcy4KKyAgICAg
ICAgKFBvcnQudG8ucnVuT25EZXZpY2UpOiBGdW5jdGlvbiB0byBiZSBvdmVycmlkZGVuIGJ5IGlP
UyBjbGFzc2VzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlX3VuaXR0ZXN0
LnB5OgorICAgICAgICAodGVzdF9kZXZpY2UpOiBUZXN0IHRoYXQsIGluIHRoZSBnZW5lcmFsIGNh
c2UsIGRldmljZXMgYXJlIHVuZGVmaW5lZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvZGFyd2luLnB5OgorICAgICAgICAoRGFyd2luUG9ydC5leHRyYWN0QnVuZGxlSUQpOiBTZWFy
Y2ggYW4gYXBwIGJ1bmRsZSBmb3IgYSBwbGlzdCBhbmQgYnVuZGxlIElELgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW5fdGVzdGNhc2UucHk6CisgICAgICAgIChEYXJ3aW5U
ZXN0LnRlc3RfcGxpc3QpOiBUZXN0IHBsaXN0IGFjY2VzcyBieSBjcmVhdGluZyBhIHRlbXBvcmFy
eSBwbGlzdCB0byByZWFkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIu
cHk6CisgICAgICAgIChEcml2ZXIuX19pbml0X18pOgorICAgICAgICAoRHJpdmVyLnJ1bl90ZXN0
KTogQ2xlYXIgc3RyZWFtcyB3aXRoIGNsZWFuIGJlZm9yZSBydW5uaW5nIGEgdGVzdC4KKyAgICAg
ICAgKERldmljZURyaXZlcik6IENoYW5nZWQgZnJvbSBJT1NTaW11bGF0b3JEcml2ZXIuCisgICAg
ICAgIChEZXZpY2VEcml2ZXIuY21kX2xpbmUpOiBQYXNzICdydW4tb24tZGV2aWNl4oCZLCB3aGlj
aCBpcyByZWNvZ25pemVkIGJ5IHRoZSBzZXJ2ZXJfcHJvY2VzcyBjbGFzcy4KKyAgICAgICAgKERl
dmljZURyaXZlci5fc2V0dXBfZW52aXJvbl9mb3JfZHJpdmVyKTogQ2hhbmdlZCBmcm9tIElPU1Np
bXVsYXRvckRyaXZlci4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5Ogor
ICAgICAgICAoSU9TQmFzZSk6IEJhc2UgY2xhc3MgZm9yIElPU1BvcnQgYW5kIElPU1NpbXVsYXRv
ciBwb3J0LgorICAgICAgICAoSU9TQmFzZS5kcml2ZXJfbmFtZSk6IEFjY2VzcyBjdXJyZW50IGFw
cCBuYW1lLgorICAgICAgICAoSU9TQmFzZS5fZ2V0X2NyYXNoX2xvZyk6IE1vdmVkIGZyb20gSU9T
U2ltdWxhdG9yUG9ydC4KKyAgICAgICAgKElPU0Jhc2UuX3Rlc3RpbmdfZGV2aWNlKTogQWNjZXNz
IGRldmljZXMgYnkgaW5kZXguCisgICAgICAgIChJT1NCYXNlLmRldmljZV9pZF9mb3Jfd29ya2Vy
X251bWJlcik6IE1vdmVkIGZyb20gSU9TU2ltdWxhdG9yUG9ydC4KKyAgICAgICAgKElPU0Jhc2Uu
X2RyaXZlcl9jbGFzcyk6IE1vdmVkIGZyb20gSU9TU2ltdWxhdG9yUG9ydC4KKyAgICAgICAgKElP
U0Jhc2UuZGV2aWNlRGVmaW5lZCk6IFRydWUgZm9yIGFsbCBJT1MgY2xhc3Nlcy4KKyAgICAgICAg
KElPU0Jhc2UuX2RldmljZVBpbmcpOiBGdW5jdGlvbiB0byB0ZXN0IGlmIGEgZGV2aWNlIGlzIG9u
LgorICAgICAgICAoSU9TQmFzZS5fZGV2aWNlSW5zdGFsbCk6IEluc3RhbGwgYXBwIHRvIGRldmlj
ZS4KKyAgICAgICAgKElPU0Jhc2UuX2RldmljZVJ1bik6IFJ1biBhcHAgb24gZGV2aWNlLgorICAg
ICAgICAoSU9TQmFzZS5fZGV2aWNlS2lsbCk6IFNodXRkb3duIGFwcCBvbiBkZXZpY2UuCisgICAg
ICAgIChJT1NCYXNlLnJ1bk9uRGV2aWNlKTogUnVuIGNvbW1hbmQgb24gZGV2aWNlLgorICAgICAg
ICAoSU9TUG9ydCk6IENsYXNzIGRlc2lnbmVkIGZvciBydW5uaW5nIG9uIGRldmljZS4KKyAgICAg
ICAgKElPU1NpbXVsYXRvclBvcnQpOgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fZGV2aWNl
UGluZyk6IENoZWNrIGlmIHRoZSB0YXJnZXRlZCBzaW11bGF0b3IgaXMgYm9vdGVkLgorICAgICAg
ICAoSU9TU2ltdWxhdG9yUG9ydC5fZGV2aWNlSW5zdGFsbCk6IEluc3RhbGwgYXBwIHRvIHNpbXVs
YXRvci4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX2RldmljZVJ1bik6IFJ1biBpbnN0YWxs
ZWQgYXBwIG9uIHRhcmdldGVkIHNpbXVsYXRvci4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQu
X2RldmljZUtpbGwpOiBTaHV0ZG93biBhcHAgb24gdGFyZ2V0ZWQgc2ltdWxhdG9yLgorICAgICAg
ICAoSU9TU2ltdWxhdG9yUG9ydC5yZWxheV9wYXRoKTogUmVtb3ZlZCBMYXlvdXRUZXN0UmVsYXku
CisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9jaGVja19yZWxheSk6IFJlbW92ZWQgTGF5b3V0
VGVzdFJlbGF5LgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IE1v
dmVkIHRvIElPU0Jhc2UuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9idWlsZF9yZWxheSk6
IFJlbW92ZWQgTGF5b3V0VGVzdFJlbGF5LgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fZHJp
dmVyX2NsYXNzKTogTW92ZWQgdG8gSU9TQmFzZS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3BvcnQvaW9zX3VuaXR0ZXN0LnB5OgorICAgICAgICAoSU9TVGVzdCk6IFRlc3RzIGZ1bmN0aW9u
YWxpdHkgdW5pcXVlIHRvIHRoZSBJT1NQb3J0IGNsYXNzLgorICAgICAgICAoSU9TU2ltdWxhdG9y
VGVzdCk6IFRlc3RzIGZ1bmN0aW9uYWxpdHkgdW5pcXVlIHRvIHRoZSBJT1NTaW11bGF0b3IgY2xh
c3MuCisgICAgICAgIChpb3NUZXN0KTogTW92ZWQgdG8gZWl0aGVyIElPU1NpbXVsYXRvclRlc3Qg
b3IgSU9TQmFzZVRlc3QuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc2Jhc2Vf
dGVzdGNhc2UucHk6IEFkZGVkLgorICAgICAgICAoSU9TQmFzZVRlc3QpOiBUZXN0cyBmdW5jdGlv
bmFsaXR5IHNoYXJlZCBiZXR3ZWVuIElPU1BvcnQgYW5kIElPU1NpbXVsYXRvci4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3MucHk6IE5vdGUgdGhhdCBzb21l
IHByZXZpb3VzIGZ1bmN0aW9uYWxpdHkgb2Ygc2VydmVyX3Byb2Nlc3MgaGFzIGJlZW4gbW92ZWQg
dG8gUHJvY2Vzc1BpcGUuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLl9faW5pdF9fKTogVXNlIF9w
aXBlIGluc3RlYWQgb2YgcHJvYy4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MuY2xlYW4pOiBDbGVh
biBwaXBlIChyZXNldHMgc3RyZWFtIGJ1ZmZlcnMuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLl9y
ZXNldCk6IERlc3Ryb3kgcGlwZSwgbm8gcGlkLgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5fc3Rh
cnQpOiBVc2UgVW5peFBpcGUgZm9yIHJ1bm5pbmcgb24tZGV2aWNlIGFuZCBQcm9jZXNzUGlwZSBv
dGhlcndpc2UuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLnBvbGwpOiBVc2UgaXNDb25uZWN0ZWQg
ZnVuY3Rpb24gb2YgcGlwZXMuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLndyaXRlKTogV3JpdGUg
ZGF0YSB0byBwaXBlLgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5fcG9wX3N0ZG91dF9saW5lX2lm
X3JlYWR5KTogUmVhZCBzdGRvdXQgbGluZSBmcm9tIHBpcGUuCisgICAgICAgIChTZXJ2ZXJQcm9j
ZXNzLl9wb3Bfc3RkZXJyX2xpbmVfaWZfcmVhZHkpOiBSZWFkIHN0ZGVyciBsaW5lIGZyb20gcGlw
ZS4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MucG9wX2FsbF9idWZmZXJlZF9zdGRlcnIpOiBSZWFk
IGFsbCBzdGRlcnIgbGluZXMgZnJvbSBwaXBlLgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5yZWFk
X2VpdGhlcl9zdGRvdXRfb3Jfc3RkZXJyX2xpbmUpOiBSZWFkIGEgbGluZSBmcm9tIGVpdGhlciBz
dHJlYW0gZnJvbSB0aGUgcGlwZS4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MucmVhZF9zdGRvdXQp
OiBSZWFkIGZyb20gc3Rkb3V0IG9mIHBpcGUuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLnN0b3Ap
OiBDbGVhciBidWZmZXJzIGFuZCBzaHV0ZG93biBwaXBlLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzc191bml0dGVzdC5weTogVXNlIHBpcGVzIGluc3RlYWQg
b2YgTW9ja1Byb2MuCisgICAgICAgIChNb2NrRmlsZSk6IFJlcGxhY2VkIE1vY2tGaWxlIHdpdGgg
RHVtbXlQcm9jZXNzUGlwZS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNr
ZXJzL3B5dGhvbi5weToKKyAgICAgICAgKFB5bGludGVyLnJ1bik6IEZpeCBmb3Iga25vd24gaXNz
dWUgd2l0aCBQeWxpbnRlciBhbmQgc29ja2V0cy4KKyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVk
L3VuaXhMb2dnaW5nUGlwZXMuaDogQWRkZWQuCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC91
bml4TG9nZ2luZ1BpcGVzLm1tOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6c2V0dXBVbml4TG9nZ2lu
Z1BpcGVzKTogU2V0cyB1cCBVbml4UGlwZXMgZm9yIElPU1NpbXVsYXRvci4KKyAgICAgICAgKFdU
Ujo6dGVhcmRvd25Vbml4TG9nZ2luZ1BpcGVzKTogVGVhcnMtZG93biB1cCBVbml4UGlwZXMgZm9y
IElPU1NpbXVsYXRvci4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5u
ZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6
OnBsYXRmb3JtSW5pdGlhbGl6ZSk6IEFkZGVkIGNhbGwgdG8gc2V0dXBVbml4TG9nZ2luZ1BpcGVz
KCkgZm9yIGlPUy4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtRGVzdHJv
eSk6IEFkZGVkIGNhbGwgdG8gdGVhcmRvd25Vbml4TG9nZ2luZ1BpcGVzKCkgZm9yIGlPUy4KKwog
MjAxNi0xMi0xNSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAg
ICBBcmd1bWVudHMgY2FsbGVkIGluIHdyb25nIG9yZGVyCkluZGV4OiBUb29scy9NYWtlZmlsZQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9NYWtlZmlsZQkocmV2aXNpb24gMjA5OTI3KQorKysgVG9vbHMv
TWFrZWZpbGUJKHdvcmtpbmcgY29weSkKQEAgLTcsOSArNyw2IEBAIGlmbmVxICgsJChTREtST09U
KSkKIAlpZm5lcSAoLCQoZmluZHN0cmluZyBpcGhvbmUsJChTREtST09UKSkpCiAJCU1PRFVMRVMg
Kz0gTW9iaWxlTWluaUJyb3dzZXIKIAllbmRpZgotCWlmZXEgKCwkKERPX05PVF9CVUlMRF9MQVlP
VVRfVEVTVF9SRUxBWSkpCi0JCU1PRFVMRVMgKz0gTGF5b3V0VGVzdFJlbGF5Ci0JZW5kaWYKIGVu
ZGlmCiAKIGFsbDoKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA5
OTI3KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksNyBAQAogCQkyQ0U4OEZB
MjE3MTI0RDhDMDA3MzRGQzAgLyogSmF2YVNjcmlwdFRocmVhZGluZy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQ0U4OEZBMTE3MTI0Q0VFMDA3MzRG
QzAgLyogSmF2YVNjcmlwdFRocmVhZGluZy5jcHAgKi87IH07CiAJCTJENDAzRjFCMTUwODcyMDkw
MDUzNThEMiAvKiBMYXlvdXRUZXN0SGVscGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRDQwM0VBMjE1MDg3MTQyMDA1MzU4RDIgLyogTGF5b3V0VGVz
dEhlbHBlci5tICovOyB9OwogCQkzMTExN0IzRDE1RDlBNTZBMDAxNjNCQzggLyogTW9ja1dlYk5v
dGlmaWNhdGlvblByb3ZpZGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzExMTdCM0IxNUQ5QTU2QTAwMTYzQkM4IC8qIE1vY2tXZWJOb3RpZmljYXRp
b25Qcm92aWRlci5tbSAqLzsgfTsKKwkJMzFCMDlDRDUxRTA0NTQwNzAwNkY0RTREIC8qIHVuaXhM
b2dnaW5nUGlwZXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMUIwOUNENDFFMDQ1NDA0MDA2RjRFNEQgLyogdW5peExvZ2dpbmdQaXBlcy5tbSAqLzsg
fTsKIAkJNDQwNTkwNzExMjY4NDUzODAwQ0ZENDhEIC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9ydE1h
Yy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MDU5
MDcwMTI2ODQ1MzgwMENGRDQ4RCAvKiBXZWJBcmNoaXZlRHVtcFN1cHBvcnRNYWMubW0gKi87IH07
CiAJCTQ0Mzc3MzBFMTI1Q0JDMzYwMEFBRTAyQyAvKiBXZWJBcmNoaXZlRHVtcFN1cHBvcnQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDRBOTk3ODMw
RkNERTg2NDAwNTgwRjEwIC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9ydC5jcHAgKi87IH07CiAJCTQ0
NjRDQUJFMUMyMEEwOEIwMEU1QkI1NSAvKiBEdW1wUmVuZGVyVHJlZUFwcE1haW4ubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDY0Q0FCRDFDMjBBMDcw
MDBFNUJCNTUgLyogRHVtcFJlbmRlclRyZWVBcHBNYWluLm1tICovOyB9OwpAQCAtMjkzLDYgKzI5
NCw4IEBACiAJCTJENDAzRjE5MTUwODcxRjkwMDUzNThEMiAvKiBMYXlvdXRUZXN0SGVscGVyICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQu
bWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBMYXlvdXRUZXN0
SGVscGVyOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQkzMTExN0IzQTE1
RDlBNTZBMDAxNjNCQzggLyogTW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE1vY2tXZWJOb3RpZmljYXRpb25Qcm92aWRlci5oOyBw
YXRoID0gbWFjL01vY2tXZWJOb3RpZmljYXRpb25Qcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkzMTExN0IzQjE1RDlBNTZBMDAxNjNCQzggLyogTW9ja1dlYk5vdGlmaWNh
dGlvblByb3ZpZGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0g
TW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLm1tOyBwYXRoID0gbWFjL01vY2tXZWJOb3RpZmlj
YXRpb25Qcm92aWRlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzFCMDlDRDMx
RTA0NTQwNDAwNkY0RTREIC8qIHVuaXhMb2dnaW5nUGlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gdW5peExvZ2dpbmdQaXBlcy5oOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNo
YXJlZC91bml4TG9nZ2luZ1BpcGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMx
QjA5Q0Q0MUUwNDU0MDQwMDZGNEU0RCAvKiB1bml4TG9nZ2luZ1BpcGVzLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gdW5peExvZ2dpbmdQaXBlcy5tbTsgcGF0aCA9
IC4uL1Rlc3RSdW5uZXJTaGFyZWQvdW5peExvZ2dpbmdQaXBlcy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMzJBNzBBQUIwMzcwNUUxRjAwQzkxNzgzIC8qIER1bXBSZW5kZXJUcmVl
UHJlZml4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IER1bXBSZW5kZXJUcmVl
UHJlZml4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NUYwOTcxMERBQzNDQjYw
MEM4QjRFNSAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyMTAwLnR0ZiAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IG5hbWUgPSBXZWJLaXRXZWlnaHRX
YXRjaGVyMTAwLnR0ZjsgcGF0aCA9IGZvbnRzL1dlYktpdFdlaWdodFdhdGNoZXIxMDAudHRmOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzVGMDk3MjBEQUMzQ0I2MDBDOEI0RTUgLyog
V2ViS2l0V2VpZ2h0V2F0Y2hlcjIwMC50dGYgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBmaWxlOyBuYW1lID0gV2ViS2l0V2VpZ2h0V2F0Y2hlcjIwMC50
dGY7IHBhdGggPSBmb250cy9XZWJLaXRXZWlnaHRXYXRjaGVyMjAwLnR0Zjsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTQ3Myw2ICs0NzYsNyBAQAogCQkwOEZCNzc5NEZFODQxNTVEQzAy
QUFDMDcgLyogRHVtcFJlbmRlclRyZWUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCTMxQjA5Q0QyMUUwNDUzRTkwMDZGNEU0RCAvKiBUZXN0UnVubmVyU2hh
cmVkICovLAogCQkJCTBGMThFNkYxMUQ2QjlDNjQwMDI3RTU0NyAvKiBEZXJpdmVkU291cmNlcy5t
YWtlICovLAogCQkJCTBGMThFNkU3MUQ2QjlCRjUwMDI3RTU0NyAvKiBVSVNjcmlwdENvbnRleHQg
Ki8sCiAJCQkJQTExNThENkExODkyN0NFMTAwODhDMTdCIC8qIGlvcyAqLywKQEAgLTcwMCw2ICs3
MDQsMTUgQEAKIAkJCW5hbWUgPSBMYXlvdXRUZXN0SGVscGVyOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKIAkJfTsKKwkJMzFCMDlDRDIxRTA0NTNFOTAwNkY0RTREIC8qIFRlc3RSdW5uZXJT
aGFyZWQgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTMx
QjA5Q0QzMUUwNDU0MDQwMDZGNEU0RCAvKiB1bml4TG9nZ2luZ1BpcGVzLmggKi8sCisJCQkJMzFC
MDlDRDQxRTA0NTQwNDAwNkY0RTREIC8qIHVuaXhMb2dnaW5nUGlwZXMubW0gKi8sCisJCQkpOwor
CQkJbmFtZSA9IFRlc3RSdW5uZXJTaGFyZWQ7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwor
CQl9OwogCQk0MTdEQTkxODEzNzM2NzREMDA3QzU3RkIgLyogV2ViQ29yZVRlc3RTdXBwb3J0ICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTExMDAsNiArMTEx
Myw3IEBACiAJCQkJQkNEMDhCNzEwRTEwNTlEMjAwQTdEMEMxIC8qIEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODAwNDVBRUUxNDc3MThFNzAwODI5MEE4
IC8qIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMjlDRkJBMTExMjI3MzZFNjAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTMxQjA5Q0Q1MUUwNDU0MDcwMDZGNEU0RCAvKiB1bml4TG9n
Z2luZ1BpcGVzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTlCQjdDNUMxQzUwNTI3ODAwMkM1MjVC
IC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMjlD
RkJBMkUxMjI3M0ExMDAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyTWFjLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkMwRTI0RTEwRTJEOTQ1MTAwMUI2QkMyIC8qIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJl
ZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCShyZXZpc2lvbiAyMDk5MjcpCisrKyBUb29scy9EdW1w
UmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwMyw2
ICsxMDMsNyBAQAogI2lmIFBMQVRGT1JNKElPUykKICNpbXBvcnQgIkR1bXBSZW5kZXJUcmVlQnJv
d3NlclZpZXcuaCIKICNpbXBvcnQgIlVJS2l0U1BJLmgiCisjaW1wb3J0ICJ1bml4TG9nZ2luZ1Bp
cGVzLmgiCiAjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KICNpbXBvcnQgPFdlYkNv
cmUvQ29yZUdyYXBoaWNzU1BJLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0FLV2luZG93Lmg+CkBAIC0x
MjcyLDE3ICsxMjczLDcgQEAgdm9pZCB3cml0ZUNyYXNoZWRNZXNzYWdlT25GYXRhbEVycm9yKGlu
dAogdm9pZCBkdW1wUmVuZGVyVHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdKQogewog
I2lmIFBMQVRGT1JNKElPUykKLSAgICBjb25zdCBjaGFyKiBpZGVudGlmaWVyID0gZ2V0ZW52KCJJ
UENfSURFTlRJRklFUiIpOwotICAgIGNvbnN0IGNoYXIgKnN0ZGluUGF0aCA9IFtbTlNTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpAIi90bXAvJXNfSU4iLCBpZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsK
LSAgICBjb25zdCBjaGFyICpzdGRvdXRQYXRoID0gW1tOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0
OkAiL3RtcC8lc19PVVQiLCBpZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsKLSAgICBjb25zdCBjaGFy
ICpzdGRlcnJQYXRoID0gW1tOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiL3RtcC8lc19FUlJP
UiIsIGlkZW50aWZpZXJdIFVURjhTdHJpbmddOwotCi0gICAgaW50IGluZmQgPSBvcGVuKHN0ZGlu
UGF0aCwgT19SRFdSKTsKLSAgICBkdXAyKGluZmQsIFNURElOX0ZJTEVOTyk7Ci0gICAgaW50IG91
dGZkID0gb3BlbihzdGRvdXRQYXRoLCBPX1JEV1IpOwotICAgIGR1cDIob3V0ZmQsIFNURE9VVF9G
SUxFTk8pOwotICAgIGludCBlcnJmZCA9IG9wZW4oc3RkZXJyUGF0aCwgT19SRFdSIHwgT19OT05C
TE9DSyk7Ci0gICAgZHVwMihlcnJmZCwgU1RERVJSX0ZJTEVOTyk7CisgICAgV1RSOjpzZXR1cFVu
aXhMb2dnaW5nUGlwZXMoKTsKICNlbmRpZgogCiAgICAgc2lnbmFsKFNJR0lMTCwgJndyaXRlQ3Jh
c2hlZE1lc3NhZ2VPbkZhdGFsRXJyb3IpOwpAQCAtMTM0Myw5ICsxMzM0LDcgQEAgdm9pZCBkdW1w
UmVuZGVyVHJlZShpbnQgYXJnYywgY29uc3QgY2hhcgogICAgIH0KIAogI2lmIFBMQVRGT1JNKElP
UykKLSAgICBjbG9zZShpbmZkKTsKLSAgICBjbG9zZShvdXRmZCk7Ci0gICAgY2xvc2UoZXJyZmQp
OworICAgIFdUUjo6dGVhcmRvd25Vbml4TG9nZ2luZ1BpcGVzKCk7CiAjZW5kaWYKIH0KIApJbmRl
eDogVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy9idWlsZC13ZWJraXQJKHJldmlzaW9uIDIwOTkyNykKKysrIFRvb2xzL1NjcmlwdHMvYnVpbGQt
d2Via2l0CSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsMTAgKzIwMCw2IEBAIGlmIChpc0FwcGxlTWFj
V2ViS2l0KCkpIHsKICAgICAgICAgcHVzaCBAY29weUxpYnJhcmllc0FyZ3MsIHByb2R1Y3REaXIo
KTsKICAgICAgICAgcHJpbnQoam9pbigiICIsIEBjb3B5TGlicmFyaWVzQXJncykgLiAiXG4iKTsK
ICAgICAgICAgKHN5c3RlbShAY29weUxpYnJhcmllc0FyZ3MpID09IDApIG9yIGRpZTsKLQotICAg
ICAgICBpZiAod2lsbFVzZUlPU1NpbXVsYXRvclNESygpKSB7Ci0gICAgICAgICAgICAoc3lzdGVt
KCJwZXJsIiwgIlRvb2xzL1NjcmlwdHMvYnVpbGQtbGF5b3V0dGVzdHJlbGF5IiwgYXJndW1lbnRz
Rm9yQ29uZmlndXJhdGlvbigpKSA9PSAwKSBvciBkaWU7Ci0gICAgICAgIH0KICAgICB9CiAKICAg
ICAjIEJ1aWxkIFRvb2xzIG5lZWRlZCBmb3IgQXBwbGUgcG9ydHMKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL2lwY19waXBlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL2lwY19waXBlLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL2lwY19waXBlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDIxIEBACisjIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQg
ZXJybm8KK2ltcG9ydCBpbworaW1wb3J0IG9zCitpbXBvcnQgUXVldWUKK2ltcG9ydCBzZWxlY3QK
K2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCisKK2lmIHN5cy5wbGF0Zm9y
bS5zdGFydHN3aXRoKCd3aW4nKToKKyAgICBpbXBvcnQgbXN2Y3J0CisgICAgaW1wb3J0IHdpbjMy
cGlwZQorICAgIGltcG9ydCB3aW4zMmZpbGUKK2Vsc2U6CisgICAgaW1wb3J0IGZjbnRsCisgICAg
aW1wb3J0IHNvY2tldAorCisKK2NsYXNzIFVuaXhQaXBlU2VydmVyKG9iamVjdCk6CisKKyAgICBC
VUZGRVIgPSA0MDk2CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCk6CisgICAgICAgIGlm
IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKKyAgICAgICAgICAgIHJhaXNlIE9TRXJy
b3IoJ1VuaXhQaXBlU2VydmVyIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtJykKKyAg
ICAgICAgc2VsZi5fcGF0aCA9IHBhdGgKKyAgICAgICAgc2VsZi5fY29ubmVjdGVkID0gRmFsc2UK
KworICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5fcGF0aCkKKyAgICAg
ICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLl9w
YXRoKToKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJDb3VsZCBub3QgdW5saW5rICci
ICsgc2VsZi5fcGF0aCArICInLCB0aGUgdGFyZ2V0IHBhdGggaXMgYSBmaWxlIG5vdCBhIHBpcGUu
IikKKworICAgICAgICBzZWxmLl9zb2NrZXQgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklY
LCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYuX3NvY2tldC5zZXR0aW1lb3V0KDE1
KQorICAgICAgICBzZWxmLl9zb2NrZXQuYmluZChzZWxmLl9wYXRoKQorICAgICAgICBzZWxmLl9z
b2NrZXQubGlzdGVuKDApCisKKyAgICBkZWYgY29ubmVjdChzZWxmKToKKyAgICAgICAgaWYgc2Vs
Zi5fY29ubmVjdGVkOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgc2VsZi5fY29ubmVjdGlvbiwgc2VsZi5fYWRkcmVzcyA9IHNlbGYuX3NvY2tldC5h
Y2NlcHQoKQorICAgICAgICAgICAgc2VsZi5fY29ubmVjdGlvbi5zZXRibG9ja2luZygwKQorICAg
ICAgICAgICAgc2VsZi5fY29ubmVjdGVkID0gVHJ1ZQorICAgICAgICBleGNlcHQgc29ja2V0LnRp
bWVvdXQ6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKwor
ICAgIGRlZiBkaXNjb25uZWN0KHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fY29ubmVjdGVk
OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX3NvY2tldC5jbG9zZSgpCisgICAg
ICAgIHNlbGYuX2Nvbm5lY3RlZCA9IEZhbHNlCisKKyAgICBkZWYgcmVhZChzZWxmKToKKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2Nvbm5lY3Rpb24ucmVjdihzZWxmLkJV
RkZFUikKKyAgICAgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEK
KyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgZToKKyAgICAgICAgICAgIGVyciA9IGUuYXJn
c1swXQorICAgICAgICAgICAgaWYgZXJyID09IGVycm5vLkVBR0FJTiBvciBlcnIgPT0gZXJybm8u
RVdPVUxEQkxPQ0s6CisgICAgICAgICAgICAgICAgcmV0dXJuIFtdCisgICAgICAgIHNlbGYuZGlz
Y29ubmVjdCgpCisgICAgICAgIHJldHVybiBbXQorCisgICAgZGVmIHNlbmQoc2VsZiwgZGF0YSk6
CisgICAgICAgIGlmIG5vdCBzZWxmLl9jb25uZWN0ZWQ6CisgICAgICAgICAgICByZXR1cm4gRmFs
c2UKKyAgICAgICAgc2VsZi5fY29ubmVjdGlvbi5zZW5kKGRhdGEpCisgICAgICAgIHJldHVybiBU
cnVlCisKKyAgICBkZWYgcGF0aChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BhdGgKKwor
ICAgIGRlZiBpc0Nvbm5lY3RlZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Nvbm5lY3Rl
ZAorCisKK2NsYXNzIEFic3RyYWN0UGlwZShvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNl
bGYpOgorICAgICAgICBzZWxmLmNsZWFuKCkKKworICAgIGRlZiBjb25uZWN0KHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZi5pc0Nvbm5lY3RlZCgpCisKKyAgICBkZWYgY2xlYW4oc2VsZik6Cisg
ICAgICAgIHNlbGYuX3N0ZG91dFN0cmVhbSA9IGlvLkJ5dGVzSU8oKQorICAgICAgICBzZWxmLl9z
dGRlcnJTdHJlYW0gPSBpby5CeXRlc0lPKCkKKyAgICAgICAgc2VsZi5fc3Rkb3V0VHJjID0gMAor
ICAgICAgICBzZWxmLl9zdGRlcnJUcmMgPSAwCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAg
ICAgIHJldHVybiBub3Qgc2VsZi5pc0Nvbm5lY3RlZCgpCisKKyAgICBkZWYgc2VuZChzZWxmLCBk
YXRhKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgaXNDb25uZWN0ZWQoc2VsZik6
CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9wYXJzZU1lc3NhZ2Uoc2VsZiwgaXNC
bG9ja2luZz1GYWxzZSk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHJlYWRMaW5l
KHNlbGYsIGlzQmxvY2tpbmc9RmFsc2UpOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAg
ICAgZXJyID0gc2VsZi5zdGRlcnJSZWFkKCkKKyAgICAgICAgICAgIGlmIGVycjoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyCisgICAgICAgICAgICBvdXQgPSBzZWxmLnN0ZG91dFJlYWQoKQor
ICAgICAgICAgICAgaWYgb3V0OgorICAgICAgICAgICAgICAgIHJldHVybiBvdXQKKyAgICAgICAg
ICAgIHNlbGYuX3BhcnNlTWVzc2FnZShpc0Jsb2NraW5nKQorICAgICAgICAgICAgaWYgbm90IGlz
QmxvY2tpbmc6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmV0dXJuIE5vbmUKKwor
ICAgIGRlZiBzdGRvdXRSZWFkKHNlbGYsIGlzQmxvY2tpbmc9RmFsc2UpOgorICAgICAgICB0cmll
ZE9uY2UgPSBGYWxzZQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgc2VsZi5fc3Rk
b3V0U3RyZWFtLnNlZWsoc2VsZi5fc3Rkb3V0VHJjLCBpby5TRUVLX1NFVCkKKyAgICAgICAgICAg
IGRhdGEgPSBzZWxmLl9zdGRvdXRTdHJlYW0ucmVhZGxpbmUoKQorICAgICAgICAgICAgaWYgZGF0
YSBhbmQgZGF0YVstMV0gPT0gJ1xuJzoKKyAgICAgICAgICAgICAgICBzZWxmLl9zdGRvdXRUcmMg
PSBzZWxmLl9zdGRvdXRUcmMgKyBsZW4oZGF0YSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZGF0
YQorICAgICAgICAgICAgc2VsZi5fcGFyc2VNZXNzYWdlKGlzQmxvY2tpbmcpCisgICAgICAgICAg
ICBpZiBub3QgaXNCbG9ja2luZyBhbmQgdHJpZWRPbmNlOgorICAgICAgICAgICAgICAgIGJyZWFr
CisgICAgICAgICAgICB0cmllZE9uY2UgPSBUcnVlCisgICAgICAgIHJldHVybiBOb25lCisKKyAg
ICBkZWYgc3RkZXJyUmVhZChzZWxmLCBpc0Jsb2NraW5nPUZhbHNlKToKKyAgICAgICAgdHJpZWRP
bmNlID0gRmFsc2UKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHNlbGYuX3N0ZGVy
clN0cmVhbS5zZWVrKHNlbGYuX3N0ZGVyclRyYywgaW8uU0VFS19TRVQpCisgICAgICAgICAgICBk
YXRhID0gc2VsZi5fc3RkZXJyU3RyZWFtLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGlmIGRhdGEg
YW5kIGRhdGFbLTFdID09ICdcbic6CisgICAgICAgICAgICAgICAgc2VsZi5fc3RkZXJyVHJjID0g
c2VsZi5fc3RkZXJyVHJjICsgbGVuKGRhdGEpCisgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEK
KyAgICAgICAgICAgIHNlbGYuX3BhcnNlTWVzc2FnZShpc0Jsb2NraW5nKQorICAgICAgICAgICAg
aWYgbm90IGlzQmxvY2tpbmcgYW5kIHRyaWVkT25jZToKKyAgICAgICAgICAgICAgICBicmVhawor
ICAgICAgICAgICAgdHJpZWRPbmNlID0gVHJ1ZQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAg
ZGVmIHJlYWRCdWZmZXJTdGRvdXQoc2VsZik6CisgICAgICAgIHNlbGYuX3N0ZG91dFN0cmVhbS5z
ZWVrKDAsIGlvLlNFRUtfRU5EKQorICAgICAgICBlbmRWYWwgPSBzZWxmLl9zdGRvdXRTdHJlYW0u
dGVsbCgpCisgICAgICAgIGlmIGVuZFZhbCA8PSBzZWxmLl9zdGRvdXRUcmM6CisgICAgICAgICAg
ICByZXR1cm4gJycKKyAgICAgICAgc2VsZi5fc3Rkb3V0U3RyZWFtLnNlZWsoc2VsZi5fc3Rkb3V0
VHJjLCBpby5TRUVLX1NFVCkKKyAgICAgICAgc2l6ZSA9IGVuZFZhbCAtIHNlbGYuX3N0ZG91dFRy
YworICAgICAgICBzZWxmLl9zdGRvdXRUcmMgPSBlbmRWYWwKKyAgICAgICAgcmV0dXJuIHNlbGYu
X3N0ZG91dFN0cmVhbS5yZWFkKHNpemUpCisKKyAgICBkZWYgcmVhZEJ1ZmZlclN0ZGVycihzZWxm
KToKKyAgICAgICAgc2VsZi5fc3RkZXJyU3RyZWFtLnNlZWsoMCwgaW8uU0VFS19FTkQpCisgICAg
ICAgIGVuZFZhbCA9IHNlbGYuX3N0ZGVyclN0cmVhbS50ZWxsKCkKKyAgICAgICAgaWYgZW5kVmFs
IDw9IHNlbGYuX3N0ZGVyclRyYzoKKyAgICAgICAgICAgIHJldHVybiAnJworICAgICAgICBzZWxm
Ll9zdGRlcnJTdHJlYW0uc2VlayhzZWxmLl9zdGRlcnJUcmMsIGlvLlNFRUtfU0VUKQorICAgICAg
ICBzaXplID0gZW5kVmFsIC0gc2VsZi5fc3RkZXJyVHJjCisgICAgICAgIHNlbGYuX3N0ZGVyclRy
YyA9IGVuZFZhbAorICAgICAgICByZXR1cm4gc2VsZi5fc3RkZXJyU3RyZWFtLnJlYWQoc2l6ZSkK
KworICAgIGRlZiByZWFkQmxvY2tTdGRvdXQoc2VsZiwgc2l6ZSwgaXNCbG9ja2luZz1GYWxzZSk6
CisgICAgICAgIHRyaWVkT25jZSA9IEZhbHNlCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAg
ICAgICBzZWxmLl9zdGRvdXRTdHJlYW0uc2VlaygwLCBpby5TRUVLX0VORCkKKyAgICAgICAgICAg
IGlmIHNlbGYuX3N0ZG91dFN0cmVhbS50ZWxsKCkgLSBzZWxmLl9zdGRvdXRUcmMgPj0gc2l6ZToK
KyAgICAgICAgICAgICAgICBzZWxmLl9zdGRvdXRTdHJlYW0uc2VlayhzZWxmLl9zdGRvdXRUcmMs
IGlvLlNFRUtfU0VUKQorICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9zdGRvdXRTdHJlYW0u
cmVhZChzaXplKQorICAgICAgICAgICAgICAgIHNlbGYuX3N0ZG91dFRyYyA9IHNlbGYuX3N0ZG91
dFRyYyArIHNpemUKKyAgICAgICAgICAgICAgICByZXR1cm4gZGF0YQorICAgICAgICAgICAgc2Vs
Zi5fcGFyc2VNZXNzYWdlKGlzQmxvY2tpbmcpCisgICAgICAgICAgICBpZiBub3QgaXNCbG9ja2lu
ZyBhbmQgdHJpZWRPbmNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICB0cmll
ZE9uY2UgPSBUcnVlCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgcmVhZEJsb2NrU3Rk
ZXJyKHNlbGYsIHNpemUsIGlzQmxvY2tpbmc9RmFsc2UpOgorICAgICAgICB0cmllZE9uY2UgPSBG
YWxzZQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgc2VsZi5fc3RkZXJyU3RyZWFt
LnNlZWsoMCwgaW8uU0VFS19FTkQpCisgICAgICAgICAgICBpZiBzZWxmLl9zdGRlcnJTdHJlYW0u
dGVsbCgpIC0gc2VsZi5fc3RkZXJyVHJjID49IHNpemU6CisgICAgICAgICAgICAgICAgc2VsZi5f
c3RkZXJyU3RyZWFtLnNlZWsoc2VsZi5fc3RkZXJyVHJjLCBpby5TRUVLX1NFVCkKKyAgICAgICAg
ICAgICAgICBkYXRhID0gc2VsZi5fc3RkZXJyU3RyZWFtLnJlYWQoc2l6ZSkKKyAgICAgICAgICAg
ICAgICBzZWxmLl9zdGRlcnJUcmMgPSBzZWxmLl9zdGRlcnJUcmMgKyBzaXplCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGRhdGEKKyAgICAgICAgICAgIHNlbGYuX3BhcnNlTWVzc2FnZShpc0Jsb2Nr
aW5nKQorICAgICAgICAgICAgaWYgbm90IGlzQmxvY2tpbmcgYW5kIHRyaWVkT25jZToKKyAgICAg
ICAgICAgICAgICBicmVhaworICAgICAgICAgICAgdHJpZWRPbmNlID0gVHJ1ZQorICAgICAgICBy
ZXR1cm4gTm9uZQorCisKK2NsYXNzIFVuaXhQaXBlKEFic3RyYWN0UGlwZSk6CisKKyAgICBTVERJ
Tl9JTkRFWCA9IDAKKyAgICBTVERPVVRfSU5ERVggPSAxCisgICAgU1RERVJSX0lOREVYID0gMgor
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVycik6CisgICAgICAg
IEFic3RyYWN0UGlwZS5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLnN0ZG91dEZpbGUgPSBz
dGRvdXQKKyAgICAgICAgc2VsZi5zdGRlcnJGaWxlID0gc3RkZXJyCisKKyAgICAgICAgcGF0aHMg
PSBbc3RkaW4sIHN0ZG91dCwgc3RkZXJyXQorICAgICAgICBzZWxmLl9zb2NrZXRzID0gW10KKyAg
ICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgMyk6CisgICAgICAgICAgICBzZWxmLl9zb2NrZXRzLmFw
cGVuZChVbml4UGlwZVNlcnZlcihwYXRoc1tpXSkpCisKKyAgICAgICAgc2VsZi5jbGVhbigpCisK
KyAgICBkZWYgY29ubmVjdChzZWxmKToKKyAgICAgICAgZm9yIHNvY2sgaW4gc2VsZi5fc29ja2V0
czoKKyAgICAgICAgICAgIHNvY2suY29ubmVjdCgpCisgICAgICAgIHJldHVybiBzZWxmLmlzQ29u
bmVjdGVkKCkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgZm9yIHNvY2sgaW4gc2Vs
Zi5fc29ja2V0czoKKyAgICAgICAgICAgIHNvY2suZGlzY29ubmVjdCgpCisKKyAgICBkZWYgc2Vu
ZChzZWxmLCBkYXRhKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NvY2tldHNbVW5peFBpcGUuU1RE
SU5fSU5ERVhdLnNlbmQoZGF0YSkKKworICAgIGRlZiBpc0Nvbm5lY3RlZChzZWxmKToKKyAgICAg
ICAgZm9yIHNvY2sgaW4gc2VsZi5fc29ja2V0czoKKyAgICAgICAgICAgIGlmIG5vdCBzb2NrLmlz
Q29ubmVjdGVkKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVy
biBUcnVlCisKKyAgICBkZWYgX3BhcnNlTWVzc2FnZShzZWxmLCBpc0Jsb2NraW5nPUZhbHNlKToK
KyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHN0ZEVyckRhdGEgPSBbXQorICAgICAg
ICAgICAgc3RkRXJyRGF0YSA9IHNlbGYuX3NvY2tldHNbVW5peFBpcGUuU1RERVJSX0lOREVYXS5y
ZWFkKCkKKyAgICAgICAgICAgIGlmIHN0ZEVyckRhdGE6CisgICAgICAgICAgICAgICAgc2VsZi5f
c3RkZXJyU3RyZWFtLnNlZWsoMCwgaW8uU0VFS19FTkQpCisgICAgICAgICAgICAgICAgc2VsZi5f
c3RkZXJyU3RyZWFtLndyaXRlKHN0ZEVyckRhdGEpCisgICAgICAgICAgICBzdGRPdXREYXRhID0g
W10KKyAgICAgICAgICAgIHN0ZE91dERhdGEgPSBzZWxmLl9zb2NrZXRzW1VuaXhQaXBlLlNURE9V
VF9JTkRFWF0ucmVhZCgpCisgICAgICAgICAgICBpZiBzdGRPdXREYXRhOgorICAgICAgICAgICAg
ICAgIHNlbGYuX3N0ZG91dFN0cmVhbS5zZWVrKDAsIGlvLlNFRUtfRU5EKQorICAgICAgICAgICAg
ICAgIHNlbGYuX3N0ZG91dFN0cmVhbS53cml0ZShzdGRPdXREYXRhKQorICAgICAgICAgICAgaWYg
c3RkRXJyRGF0YSBvciBzdGRPdXREYXRhOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisg
ICAgICAgICAgICBpZiBub3QgaXNCbG9ja2luZzoKKyAgICAgICAgICAgICAgICBicmVhaworICAg
ICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBoYW5kbGVfaW50ZXJydXB0KHNlbGYpOgorICAg
ICAgICBpZiBub3Qgc2VsZi5pc0Nvbm5lY3RlZCgpOgorICAgICAgICAgICAgcmFpc2UgS2V5Ym9h
cmRJbnRlcnJ1cHQKKworCitjbGFzcyBQcm9jZXNzUGlwZShBYnN0cmFjdFBpcGUpOgorCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIGNtZCwgZW52aXJvPU5vbmUsIHVuaV9uZXdsaW5lcz1G
YWxzZSk6CisKKyAgICAgICAgQWJzdHJhY3RQaXBlLl9faW5pdF9fKHNlbGYpCisKKyAgICAgICAg
c2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5faG9zdCA9IHNlbGYuX3BvcnQuaG9zdAor
CisgICAgICAgIHNlbGYuX3Byb2MgPSBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5wb3BlbihjbWQsIHN0
ZGluPXNlbGYuX2hvc3QuZXhlY3V0aXZlLlBJUEUsCisgICAgICAgICAgICBzdGRvdXQ9c2VsZi5f
aG9zdC5leGVjdXRpdmUuUElQRSwKKyAgICAgICAgICAgIHN0ZGVycj1zZWxmLl9ob3N0LmV4ZWN1
dGl2ZS5QSVBFLAorICAgICAgICAgICAgY2xvc2VfZmRzPW5vdCBzZWxmLl9ob3N0LnBsYXRmb3Jt
LmlzX3dpbigpLAorICAgICAgICAgICAgZW52PWVudmlybywKKyAgICAgICAgICAgIHVuaXZlcnNh
bF9uZXdsaW5lcz11bmlfbmV3bGluZXMpCisKKyAgICAgICAgc2VsZi5fdXNlX3dpbjMyX2FwaXMg
PSBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJykKKyAgICAgICAgaWYgbm90IHNlbGYuX3Vz
ZV93aW4zMl9hcGlzOgorICAgICAgICAgICAgZmQgPSBzZWxmLl9wcm9jLnN0ZG91dC5maWxlbm8o
KQorICAgICAgICAgICAgZmwgPSBmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGTCkKKyAgICAg
ICAgICAgIGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX1NFVEZMLCBmbCB8IG9zLk9fTk9OQkxPQ0sp
CisgICAgICAgICAgICBmZCA9IHNlbGYuX3Byb2Muc3RkZXJyLmZpbGVubygpCisgICAgICAgICAg
ICBmbCA9IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZMKQorICAgICAgICAgICAgZmNudGwu
ZmNudGwoZmQsIGZjbnRsLkZfU0VURkwsIGZsIHwgb3MuT19OT05CTE9DSykKKworICAgIGRlZiBw
aWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wcm9jLnBpZAorCisgICAgZGVmIGlzQ29u
bmVjdGVkKHNlbGYpOgorICAgICAgICByZXR1cm4gbm90IHNlbGYuX3Byb2MucG9sbCgpCisKKyAg
ICBkZWYgaGFuZGxlX2ludGVycnVwdChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fcHJvYy5yZXR1
cm5jb2RlIGluICgtMTA3Mzc0MTUxMCwgLXNpZ25hbC5TSUdJTlQpOgorICAgICAgICAgICAgcmFp
c2UgS2V5Ym9hcmRJbnRlcnJ1cHQKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgaWYg
c2VsZi5fcHJvYy5wb2xsKCk6CisgICAgICAgICAgICBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5raWxs
X3Byb2Nlc3Moc2VsZi5fcHJvYy5waWQpCisgICAgICAgIGlmIHNlbGYuX3Byb2MucG9sbCgpIGlz
IG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fcHJvYy53YWl0KCkKKworICAgICAgICBpZiBz
ZWxmLl9wcm9jLnN0ZGluOgorICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRpbi5jbG9zZSgpCisg
ICAgICAgIGlmIHNlbGYuX3Byb2Muc3Rkb3V0OgorICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRv
dXQuY2xvc2UoKQorICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZGVycjoKKyAgICAgICAgICAgIHNl
bGYuX3Byb2Muc3RkZXJyLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLmlzQ29ubmVj
dGVkKCkKKworICAgIGRlZiBzZW5kKHNlbGYsIGJ5dGVzKToKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgc2VsZi5fcHJvYy5zdGRpbi53cml0ZShieXRlcykKKyAgICAgICAgZXhjZXB0IElPRXJy
b3IsIGU6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKwor
ICAgIGRlZiBfdW5peHN0ZEJsb2NrKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZG91
dC5jbG9zZWQ6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBzZWxlY3RfZmRzID0g
W10KKyAgICAgICAgc2VsZWN0X2Zkcy5hcHBlbmQoc2VsZi5fcHJvYy5zdGRvdXQuZmlsZW5vKCkp
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlYWRfZmRzLCBfLCBfID0gc2VsZWN0LnNlbGVj
dChzZWxlY3RfZmRzLCBbXSwgc2VsZWN0X2ZkcywgMCkKKyAgICAgICAgZXhjZXB0IHNlbGVjdC5l
cnJvciwgZToKKyAgICAgICAgICAgIGlmIGUuYXJnc1swXSA9PSBlcnJuby5FSU5WQUw6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgaWYgc2VsZi5fcHJvYy5zdGRvdXQuZmlsZW5vKCkgaW4gcmVhZF9mZHM6
CisgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuX3Byb2Muc3Rkb3V0LnJlYWQoKQorICAgICAg
ICAgICAgICAgIHJldHVybiBkYXRhCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgorICAgICAg
ICAgICAgcGFzcworCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX3VuaXhlcnJCbG9j
ayhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fcHJvYy5zdGRlcnIuY2xvc2VkOgorICAgICAgICAg
ICAgcmV0dXJuIE5vbmUKKyAgICAgICAgc2VsZWN0X2ZkcyA9IFtdCisgICAgICAgIHNlbGVjdF9m
ZHMuYXBwZW5kKHNlbGYuX3Byb2Muc3RkZXJyLmZpbGVubygpKQorICAgICAgICB0cnk6CisgICAg
ICAgICAgICByZWFkX2ZkcywgXywgXyA9IHNlbGVjdC5zZWxlY3Qoc2VsZWN0X2ZkcywgW10sIHNl
bGVjdF9mZHMsIDApCisgICAgICAgIGV4Y2VwdCBzZWxlY3QuZXJyb3IsIGU6CisgICAgICAgICAg
ICBpZiBlLmFyZ3NbMF0gPT0gZXJybm8uRUlOVkFMOgorICAgICAgICAgICAgICAgIHJldHVybiBO
b25lCisgICAgICAgICAgICByYWlzZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNl
bGYuX3Byb2Muc3RkZXJyLmZpbGVubygpIGluIHJlYWRfZmRzOgorICAgICAgICAgICAgICAgIGRh
dGEgPSBzZWxmLl9wcm9jLnN0ZGVyci5yZWFkKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZGF0
YQorICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAg
ICByZXR1cm4gTm9uZQorCisgICAgZGVmIF93aW4zMk5vbkJsb2NraW5nUmVhZChzZWxmLCBoYW5k
bGUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBfLCBhdmFpbCwgXyA9IHdpbjMycGlwZS5Q
ZWVrTmFtZWRQaXBlKGhhbmRsZSwgMCkKKyAgICAgICAgICAgIGlmIGF2YWlsID4gMDoKKyAgICAg
ICAgICAgICAgICBfLCBidWYgPSB3aW4zMmZpbGUuUmVhZEZpbGUoaGFuZGxlLCBhdmFpbCwgTm9u
ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYnVmCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24s
IGU6CisgICAgICAgICAgICBpZiBlWzBdIG5vdCBpbiAoMTA5LCBlcnJuby5FU0hVVERPV04pOiAg
IyAxMDkgPT0gd2luMzIgRVJST1JfQlJPS0VOX1BJUEUKKyAgICAgICAgICAgICAgICByYWlzZQor
ICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF93aW4zMnN0ZEJsb2NrKHNlbGYpOgorICAg
ICAgICBvdXRfZmggPSBtc3ZjcnQuZ2V0X29zZmhhbmRsZShzZWxmLl9wcm9jLnN0ZG91dC5maWxl
bm8oKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3dpbjMyTm9uQmxvY2tpbmdSZWFkKG91dF9maCkK
KworICAgIGRlZiBfd2luMzJlcnJCbG9jayhzZWxmKToKKyAgICAgICAgZXJyX2ZoID0gbXN2Y3J0
LmdldF9vc2ZoYW5kbGUoc2VsZi5fcHJvYy5zdGRlcnIuZmlsZW5vKCkpCisgICAgICAgIHJldHVy
biBzZWxmLl93aW4zMk5vbkJsb2NraW5nUmVhZChlcnJfZmgpCisKKyAgICBkZWYgX3BhcnNlTWVz
c2FnZShzZWxmLCBpc0Jsb2NraW5nPUZhbHNlKToKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAg
ICAgICAgIHN0ZEVyckRhdGEgPSBbXQorICAgICAgICAgICAgaWYgc2VsZi5fdXNlX3dpbjMyX2Fw
aXM6CisgICAgICAgICAgICAgICAgc3RkRXJyRGF0YSA9IHNlbGYuX3dpbjMyZXJyQmxvY2soKQor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzdGRFcnJEYXRhID0gc2VsZi5fdW5p
eGVyckJsb2NrKCkKKyAgICAgICAgICAgIGlmIHN0ZEVyckRhdGE6CisgICAgICAgICAgICAgICAg
c2VsZi5fc3RkZXJyU3RyZWFtLnNlZWsoMCwgaW8uU0VFS19FTkQpCisgICAgICAgICAgICAgICAg
c2VsZi5fc3RkZXJyU3RyZWFtLndyaXRlKHN0ZEVyckRhdGEpCisgICAgICAgICAgICBzdGRPdXRE
YXRhID0gW10KKyAgICAgICAgICAgIGlmIHNlbGYuX3VzZV93aW4zMl9hcGlzOgorICAgICAgICAg
ICAgICAgIHN0ZE91dERhdGEgPSBzZWxmLl93aW4zMnN0ZEJsb2NrKCkKKyAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgc3RkT3V0RGF0YSA9IHNlbGYuX3VuaXhzdGRCbG9jaygpCisg
ICAgICAgICAgICBpZiBzdGRPdXREYXRhOgorICAgICAgICAgICAgICAgIHNlbGYuX3N0ZG91dFN0
cmVhbS5zZWVrKDAsIGlvLlNFRUtfRU5EKQorICAgICAgICAgICAgICAgIHNlbGYuX3N0ZG91dFN0
cmVhbS53cml0ZShzdGRPdXREYXRhKQorICAgICAgICAgICAgaWYgc3RkRXJyRGF0YSBvciBzdGRP
dXREYXRhOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBpZiBub3Qg
aXNCbG9ja2luZzoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICByZXR1cm4gRmFsc2UK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2lwY19waXBlX3Rlc3RjYXNlLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2lwY19waXBlX3Rl
c3RjYXNlLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L2lwY19waXBlX3Rlc3RjYXNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMxIEBACisj
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgZXJybm8KK2ltcG9y
dCBpbworaW1wb3J0IHNvY2tldAoraW1wb3J0IHRpbWUKKworZnJvbSB3ZWJraXRweS5jb21tb24u
aXBjX3BpcGUgaW1wb3J0IEFic3RyYWN0UGlwZQorCisKK2NsYXNzIER1bW15UHJvY2Vzc1BpcGUo
QWJzdHJhY3RQaXBlKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0PU5vbmUsIGNtZD1O
b25lLCBlbnZpcm89Tm9uZSwgdW5pX25ld2xpbmVzPUZhbHNlKToKKyAgICAgICAgQWJzdHJhY3RQ
aXBlLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIGlm
IHNlbGYuX3BvcnQ6CisgICAgICAgICAgICBzZWxmLl9ob3N0ID0gc2VsZi5fcG9ydC5ob3N0Cisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9ob3N0ID0gTm9uZQorICAgICAgICBzZWxm
LmNvbm5lY3RlZEZvclRlc3RpbmcgPSBUcnVlCisKKyAgICBkZWYgcGlkKHNlbGYpOgorICAgICAg
ICByZXR1cm4gMQorCisgICAgZGVmIGlzQ29ubmVjdGVkKHNlbGYpOgorICAgICAgICByZXR1cm4g
c2VsZi5jb25uZWN0ZWRGb3JUZXN0aW5nCisKKyAgICBkZWYgc2VuZChzZWxmLCBieXRlcyk6Cisg
ICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3RlZEZvclRlc3RpbmcKKworICAgIGRlZiBfcGFyc2VN
ZXNzYWdlKHNlbGYsIGlzQmxvY2tpbmc9RmFsc2UpOgorICAgICAgICByZXR1cm4gRmFsc2UKKwor
ICAgIGRlZiBwdXNoRGF0YUZvclRlc3Rpbmcoc2VsZiwgZGF0YSwgc3RkZXJyPUZhbHNlLCBzdGRv
dXQ9VHJ1ZSk6CisgICAgICAgIGlmIHN0ZGVycjoKKyAgICAgICAgICAgIHNlbGYuX3N0ZGVyclN0
cmVhbS5zZWVrKDAsIGlvLlNFRUtfRU5EKQorICAgICAgICAgICAgc2VsZi5fc3RkZXJyU3RyZWFt
LndyaXRlKGRhdGEpCisgICAgICAgIGVsaWYgc3Rkb3V0OgorICAgICAgICAgICAgc2VsZi5fc3Rk
b3V0U3RyZWFtLnNlZWsoMCwgaW8uU0VFS19FTkQpCisgICAgICAgICAgICBzZWxmLl9zdGRvdXRT
dHJlYW0ud3JpdGUoZGF0YSkKKworCitjbGFzcyBVbml4UGlwZUNsaWVudChvYmplY3QpOgorCisg
ICAgQlVGRkVSID0gNDA5NgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgorICAgICAg
ICBzZWxmLl9wYXRoID0gcGF0aAorICAgICAgICBzZWxmLl9jb25uZWN0ZWQgPSBGYWxzZQorICAg
ICAgICBzZWxmLl9jb25uZWN0aW9uID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29j
a2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzZWxmLl9zdHJlYW0gPSBpby5CeXRlc0lPKCkKKyAg
ICAgICAgc2VsZi5fc3RyZWFtVHJjID0gMAorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAg
ICAgIHNlbGYuZGlzY29ubmVjdCgpCisKKyAgICBkZWYgY29ubmVjdChzZWxmKToKKyAgICAgICAg
aWYgc2VsZi5fY29ubmVjdGVkOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgc2VsZi5fY29ubmVjdGlvbi5jb25uZWN0KHNlbGYuX3BhdGgpCisgICAg
ICAgICAgICBzZWxmLl9jb25uZWN0ZWQgPSBUcnVlCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAg
ICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGRpc2Nvbm5l
Y3Qoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9jb25uZWN0ZWQ6CisgICAgICAgICAgICBy
ZXR1cm4KKyAgICAgICAgc2VsZi5fY29ubmVjdGlvbi5jbG9zZSgpCisgICAgICAgIHNlbGYuX2Nv
bm5lY3RlZCA9IEZhbHNlCisKKyAgICBkZWYgcmVhZGxpbmUoc2VsZiwgaXNCbG9ja2luZz1GYWxz
ZSk6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBzZWxmLl9zdHJlYW0uc2Vlayhz
ZWxmLl9zdHJlYW1UcmMsIGlvLlNFRUtfU0VUKQorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX3N0
cmVhbS5yZWFkbGluZSgpCisgICAgICAgICAgICBpZiBkYXRhIGFuZCBkYXRhWy0xXSA9PSAnXG4n
OgorICAgICAgICAgICAgICAgIHNlbGYuX3N0cmVhbVRyYyA9IHNlbGYuX3N0cmVhbVRyYyArIGxl
bihkYXRhKQorICAgICAgICAgICAgICAgIHJldHVybiBkYXRhCisgICAgICAgICAgICBibG9jayA9
IHNlbGYucmVhZCgpCisgICAgICAgICAgICBpZiBibG9jazoKKyAgICAgICAgICAgICAgICBzZWxm
Ll9zdHJlYW0uc2VlaygwLCBpby5TRUVLX0VORCkKKyAgICAgICAgICAgICAgICBzZWxmLl9zdHJl
YW0ud3JpdGUoYmxvY2spCisgICAgICAgICAgICBpZiBub3QgaXNCbG9ja2luZzoKKyAgICAgICAg
ICAgICAgICBicmVhaworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHJlYWQoc2VsZik6
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9jb25uZWN0aW9uLnJlY3Yo
c2VsZi5CVUZGRVIpCisgICAgICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgICAgIHJldHVy
biBkYXRhCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIGU6CisgICAgICAgICAgICBlcnIg
PSBlLmFyZ3NbMF0KKyAgICAgICAgICAgIGlmIGVyciA9PSBlcnJuby5FQUdBSU4gb3IgZXJyID09
IGVycm5vLkVXT1VMREJMT0NLOgorICAgICAgICAgICAgICAgIHJldHVybiBbXQorICAgICAgICBz
ZWxmLmRpc2Nvbm5lY3QoKQorICAgICAgICByZXR1cm4gW10KKworICAgIGRlZiBzZW5kKHNlbGYs
IGRhdGEpOgorICAgICAgICBpZiBub3Qgc2VsZi5fY29ubmVjdGVkOgorICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCisgICAgICAgIHNlbGYuX2Nvbm5lY3Rpb24uc2VuZChkYXRhKQorICAgICAgICBy
ZXR1cm4gVHJ1ZQorCisgICAgZGVmIHBvcnQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9w
YXRoCisKKyAgICBkZWYgaXNDb25uZWN0ZWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9j
b25uZWN0ZWQKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2lwY19waXBlX3Vu
aXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2lw
Y19waXBlX3VuaXR0ZXN0LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL2lwY19waXBlX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTU3IEBACisjIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MK
K2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRl
c3QKKworZnJvbSB3ZWJraXRweS5jb21tb24uaXBjX3BpcGUgaW1wb3J0IFVuaXhQaXBlU2VydmVy
LCBVbml4UGlwZQorZnJvbSB3ZWJraXRweS5jb21tb24uaXBjX3BpcGVfdGVzdGNhc2UgaW1wb3J0
IER1bW15UHJvY2Vzc1BpcGUsIFVuaXhQaXBlQ2xpZW50CisKKworZGVmIFVuaXhQaXBlQ2xpZW50
VGVzdGluZ1RocmVhZChzb3VyY2UsIHBhdGgsIGFyZ3VtZW50cyk6CisgICAgc291cmNlLmNsaWVu
dFJlc3VsdHMgPSBbXQorICAgIGNsaWVudCA9IFVuaXhQaXBlQ2xpZW50KHBhdGgpCisKKyAgICBk
ZWFkbGluZSA9IHRpbWUudGltZSgpICsgMS4wCisgICAgd2hpbGUgdGltZS50aW1lKCkgPCBkZWFk
bGluZSBhbmQgbm90IGNsaWVudC5pc0Nvbm5lY3RlZCgpOgorICAgICAgICBjbGllbnQuY29ubmVj
dCgpCisgICAgaWYgbm90IGNsaWVudC5pc0Nvbm5lY3RlZCgpOgorICAgICAgICByZXR1cm4gTm9u
ZQorICAgIHJlYWRpbmdtb2RlID0gRmFsc2UKKyAgICBmb3IgZWxtIGluIGFyZ3VtZW50czoKKyAg
ICAgICAgaWYgZWxtID09ICctLXJlYWQnOgorICAgICAgICAgICAgZGF0YSA9IGNsaWVudC5yZWFk
bGluZShUcnVlKQorICAgICAgICAgICAgc291cmNlLmNsaWVudFJlc3VsdHMuYXBwZW5kKGRhdGEp
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbGllbnQuc2VuZChlbG0pCisgICAgY2xpZW50
LmRpc2Nvbm5lY3QoKQorICAgIHJldHVybiBzb3VyY2UuY2xpZW50UmVzdWx0cworCisKK2NsYXNz
IGlwY1BpcGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxm
LCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihpcGNQaXBlVGVzdCwgc2VsZikuX19p
bml0X18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmNsaWVudFJlc3VsdHMgPSBbXQor
CisgICAgZGVmIHRlc3RfYWJzdHJhY3RwaXBlX3N0ZG91dChzZWxmKToKKyAgICAgICAgcGlwZSA9
IER1bW15UHJvY2Vzc1BpcGUoKQorCisgICAgICAgIHBpcGUucHVzaERhdGFGb3JUZXN0aW5nKCdj
b21pbmcgZnJvbSBzdGRvdXRcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlwZS5zdGRv
dXRSZWFkKCksICdjb21pbmcgZnJvbSBzdGRvdXRcbicpCisKKyAgICAgICAgcGlwZS5wdXNoRGF0
YUZvclRlc3RpbmcoJ2NvbWluZyBmcm9tIHN0ZGVyclxuJywgc3RkZXJyPVRydWUpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwocGlwZS5zdGRvdXRSZWFkKCksIE5vbmUpCisKKyAgICBkZWYgdGVz
dF9hYnN0cmFjdHBpcGVfc3RkZXJyKHNlbGYpOgorICAgICAgICBwaXBlID0gRHVtbXlQcm9jZXNz
UGlwZSgpCisKKyAgICAgICAgcGlwZS5wdXNoRGF0YUZvclRlc3RpbmcoJ2NvbWluZyBmcm9tIHN0
ZG91dFxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBlLnN0ZGVyclJlYWQoKSwgTm9u
ZSkKKworICAgICAgICBwaXBlLnB1c2hEYXRhRm9yVGVzdGluZygnY29taW5nIGZyb20gc3RkZXJy
XG4nLCBzdGRlcnI9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBlLnN0ZGVyclJl
YWQoKSwgJ2NvbWluZyBmcm9tIHN0ZGVyclxuJykKKworICAgIGRlZiB0ZXN0X2Fic3RyYWN0cGlw
ZV9kdWVsX3N0cmVhbXMoc2VsZik6CisgICAgICAgIHBpcGUgPSBEdW1teVByb2Nlc3NQaXBlKCkK
KworICAgICAgICBwaXBlLnB1c2hEYXRhRm9yVGVzdGluZygnY29taW5nIGZyb20gc3Rkb3V0XG4n
KQorICAgICAgICBwaXBlLnB1c2hEYXRhRm9yVGVzdGluZygnY29taW5nIGZyb20gc3RkZXJyXG4n
LCBzdGRlcnI9VHJ1ZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBpcGUucmVhZExpbmUo
KSwgJ2NvbWluZyBmcm9tIHN0ZGVyclxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBl
LnJlYWRMaW5lKCksICdjb21pbmcgZnJvbSBzdGRvdXRcbicpCisKKyAgICBkZWYgdGVzdF9hYnN0
cmFjdHBpcGVfc3Rkb3V0YmxvY2soc2VsZik6CisgICAgICAgIHBpcGUgPSBEdW1teVByb2Nlc3NQ
aXBlKCkKKworICAgICAgICBwaXBlLnB1c2hEYXRhRm9yVGVzdGluZygnc3Rkb3V0IGxpbmVcbicp
CisgICAgICAgIHBpcGUucHVzaERhdGFGb3JUZXN0aW5nKCdzdGRvdXQgYmxvY2snKQorCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlwZS5yZWFkQnVmZmVyU3Rkb3V0KCksICdzdGRvdXQgbGlu
ZVxuc3Rkb3V0IGJsb2NrJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBlLnJlYWRCdWZm
ZXJTdGRlcnIoKSwgJycpCisKKyAgICBkZWYgdGVzdF9hYnN0cmFjdHBpcGVfc3RkZXJyYmxvY2so
c2VsZik6CisgICAgICAgIHBpcGUgPSBEdW1teVByb2Nlc3NQaXBlKCkKKworICAgICAgICBwaXBl
LnB1c2hEYXRhRm9yVGVzdGluZygnc3RkZXJyIGxpbmVcbicsIHN0ZGVycj1UcnVlKQorICAgICAg
ICBwaXBlLnB1c2hEYXRhRm9yVGVzdGluZygnc3RkZXJyIGJsb2NrJywgc3RkZXJyPVRydWUpCisK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBlLnJlYWRCdWZmZXJTdGRvdXQoKSwgJycpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlwZS5yZWFkQnVmZmVyU3RkZXJyKCksICdzdGRlcnIg
bGluZVxuc3RkZXJyIGJsb2NrJykKKworICAgIGRlZiB0ZXN0X3VuaXhQaXBlU2VydmVyKHNlbGYp
OgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZXJ2ID0gVW5peFBpcGVTZXJ2ZXIoJy90bXAv
dW5peFBpcGUucGlwZScpCisgICAgICAgICAgICB0aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRh
cmdldD1Vbml4UGlwZUNsaWVudFRlc3RpbmdUaHJlYWQsIGFyZ3M9KHNlbGYsIHNlcnYucGF0aCgp
LCBbJy0tcmVhZCcsICdMaW5lIDFcbicsICdMaW5lIDJcbicsICctLXJlYWQnXSkpCisgICAgICAg
ICAgICB0aHJlYWQuc3RhcnQoKQorICAgICAgICAgICAgc2Vydi5jb25uZWN0KCkKKyAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZXJ2LmlzQ29ubmVjdGVkKCkpCisKKyAgICAgICAgICAgIHNl
cnYuc2VuZCgnU2VydmVyIHNlbmQgMVxuJykKKyAgICAgICAgICAgIHNlcnYuc2VuZCgnU2VydmVy
IHNlbmQgMlxuJykKKworICAgICAgICAgICAgdGhyZWFkLmpvaW4oKQorICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChzZXJ2LnJlYWQoKSwgJ0xpbmUgMVxuTGluZSAyXG4nKQorICAgICAgICAg
ICAgc2Vydi5kaXNjb25uZWN0KCkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnU2Vy
dmVyIHNlbmQgMVxuJywgc2VsZi5jbGllbnRSZXN1bHRzWzBdKQorICAgICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgnU2VydmVyIHNlbmQgMlxuJywgc2VsZi5jbGllbnRSZXN1bHRzWzFdKQorICAg
ICAgICBleGNlcHQgT1NFcnJvciwgZToKKyAgICAgICAgICAgIGlmIG5vdCBzeXMucGxhdGZvcm0u
c3RhcnRzd2l0aCgnd2luJykgb3Igc3RyKGUpICE9ICdVbml4UGlwZVNlcnZlciBub3QgaW1wbGVt
ZW50ZWQgb24gdGhpcyBwbGF0Zm9ybSc6CisgICAgICAgICAgICAgICAgcmFpc2UgZQorCisgICAg
ZGVmIHRlc3RfdW5peFBpcGUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBpcGUg
PSBVbml4UGlwZSgnL3RtcC90ZXN0c3RkaW4ucGlwZScsICcvdG1wL3Rlc3RzdGRvdXQucGlwZScs
ICcvdG1wL3Rlc3RzdGRlcnIucGlwZScpCisgICAgICAgICAgICBzdGRpblRocmVhZCA9IHRocmVh
ZGluZy5UaHJlYWQodGFyZ2V0PVVuaXhQaXBlQ2xpZW50VGVzdGluZ1RocmVhZCwgYXJncz0oc2Vs
ZiwgJy90bXAvdGVzdHN0ZGluLnBpcGUnLCBbJy0tcmVhZCcsICctLXJlYWQnXSkpCisgICAgICAg
ICAgICBzdGRvdXRUaHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1Vbml4UGlwZUNsaWVu
dFRlc3RpbmdUaHJlYWQsIGFyZ3M9KHNlbGYsICcvdG1wL3Rlc3RzdGRvdXQucGlwZScsIFsnc3Rk
b3V0IGxpbmUgMVxuJywgJ3N0ZG91dCBsaW5lIDJcbiddKSkKKyAgICAgICAgICAgIHN0ZGVyclRo
cmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PVVuaXhQaXBlQ2xpZW50VGVzdGluZ1RocmVh
ZCwgYXJncz0oc2VsZiwgJy90bXAvdGVzdHN0ZGVyci5waXBlJywgWydzdGRlcnIgbGluZSAxXG4n
LCAnc3RkZXJyIGxpbmUgMlxuJ10pKQorICAgICAgICAgICAgc3RkaW5UaHJlYWQuc3RhcnQoKQor
ICAgICAgICAgICAgc3Rkb3V0VGhyZWFkLnN0YXJ0KCkKKyAgICAgICAgICAgIHN0ZGVyclRocmVh
ZC5zdGFydCgpCisgICAgICAgICAgICBwaXBlLmNvbm5lY3QoKQorCisgICAgICAgICAgICBzZWxm
LmFzc2VydFRydWUocGlwZS5pc0Nvbm5lY3RlZCgpKQorCisgICAgICAgICAgICBwaXBlLnNlbmQo
J1NlcnZlciBzZW5kIDFcbicpCisgICAgICAgICAgICBwaXBlLnNlbmQoJ1NlcnZlciBzZW5kIDJc
bicpCisKKyAgICAgICAgICAgIHN0ZGluVGhyZWFkLmpvaW4oKQorICAgICAgICAgICAgc3Rkb3V0
VGhyZWFkLmpvaW4oKQorICAgICAgICAgICAgc3RkZXJyVGhyZWFkLmpvaW4oKQorCisgICAgICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHBpcGUuc3Rkb3V0UmVhZCgpLCAnc3Rkb3V0IGxpbmUgMVxu
JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlwZS5zdGRvdXRSZWFkKCksICdzdGRv
dXQgbGluZSAyXG4nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBlLnN0ZGVyclJl
YWQoKSwgJ3N0ZGVyciBsaW5lIDFcbicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBp
cGUuc3RkZXJyUmVhZCgpLCAnc3RkZXJyIGxpbmUgMlxuJykKKworICAgICAgICAgICAgcGlwZS5j
bG9zZSgpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1NlcnZlciBzZW5kIDFcbics
IHNlbGYuY2xpZW50UmVzdWx0c1swXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1Nl
cnZlciBzZW5kIDJcbicsIHNlbGYuY2xpZW50UmVzdWx0c1sxXSkKKyAgICAgICAgZXhjZXB0IE9T
RXJyb3IsIGU6CisgICAgICAgICAgICBpZiBub3Qgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dp
bicpIG9yIHN0cihlKSAhPSAnVW5peFBpcGVTZXJ2ZXIgbm90IGltcGxlbWVudGVkIG9uIHRoaXMg
cGxhdGZvcm0nOgorICAgICAgICAgICAgICAgIHJhaXNlIGUKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9iYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9iYXNlLnB5CShyZXZpc2lvbiAyMDk5MjcpCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvYmFzZS5weQkod29ya2luZyBjb3B5KQpAQCAtODk3LDYgKzg5NywxMiBAQCBjbGFz
cyBQb3J0KG9iamVjdCk6CiAKICAgICAgICAgcmV0dXJuIGNsZWFuX2VudgogCisgICAgZGVmIGRl
dmljZURlZmluZWQoc2VsZik6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHJ1bk9u
RGV2aWNlKHNlbGYsIGNtZCwgZW52aT1Ob25lKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKwogICAg
IGRlZiBfY2xlYXJfZ2xvYmFsX2NhY2hlc19hbmRfdGVtcG9yYXJ5X2ZpbGVzKHNlbGYpOgogICAg
ICAgICBwYXNzCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlX3VuaXR0
ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlX3Vu
aXR0ZXN0LnB5CShyZXZpc2lvbiAyMDk5MjcpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvYmFzZV91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMzk1LDYgKzM5NSwxMiBAQCBj
bGFzcyBQb3J0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShwb3J0LmlzX3czY19yZXNvdXJjZV9maWxlKHBvcnQuaG9zdC5maWxlc3lzdGVtLCBwb3J0Lmxh
eW91dF90ZXN0c19kaXIoKSArICIvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9YTUxI
dHRwUmVxdWVzdCIsICJ4bWxodHRwcmVxdWVzdC1zeW5jLWJsb2NrLWRlZmVyLXNjcmlwdHMtc3Vi
ZnJhbWUuaHRtbCIpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocG9ydC5pc193M2NfcmVzb3Vy
Y2VfZmlsZShwb3J0Lmhvc3QuZmlsZXN5c3RlbSwgcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkgKyAi
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZG9tL25vZGVzL0RvY3VtZW50LWNyZWF0
ZUVsZW1lbnQtbmFtZXNwYWNlLXRlc3RzIiwgInRlc3QuaHRtbCIpKQogCisgICAgZGVmIHRlc3Rf
ZGV2aWNlKHNlbGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQorICAgICAgICBz
ZWxmLmFzc2VydEZhbHNlKHBvcnQuZGV2aWNlRGVmaW5lZCgpKQorICAgICAgICBzZWxmLmFzc2Vy
dElzTm9uZShwb3J0LnJ1bk9uRGV2aWNlKFsncGluZycsICc8bm8taWQ+J10pKQorCisKIGNsYXNz
IE5hdHVyYWxDb21wYXJlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNl
bGYpOgogICAgICAgICBzZWxmLl9wb3J0ID0gVGVzdFBvcnQoTW9ja1N5c3RlbUhvc3QoKSkKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW4ucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weQkocmV2aXNpb24gMjA5OTI3KQor
KysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weQkod29ya2luZyBjb3B5KQpA
QCAtMjEsNyArMjEsMTAgQEAKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAogaW1wb3J0IGxvZ2dpbmcKK2ltcG9y
dCBtdWx0aXByb2Nlc3NpbmcKIGltcG9ydCBvcworaW1wb3J0IHBsaXN0bGliCitpbXBvcnQgc2h1
dGlsCiBpbXBvcnQgdGltZQogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uY3Jhc2hsb2dz
IGltcG9ydCBDcmFzaExvZ3MKQEAgLTE3NCwzICsxNzcsMjQgQEAgY2xhc3MgRGFyd2luUG9ydChB
cHBsZVBvcnQpOgogICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3I6CiAgICAgICAgICAgICBfbG9n
Lndhcm4oInhjcnVuIGZhaWxlZDsgZmFsbGluZyBiYWNrIHRvICclcycuIiAlIGZhbGxiYWNrKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbGxiYWNrCisKKyAgICBkZWYgZXh0cmFjdEJ1bmRsZUlEKHNl
bGYsIGFwcCk6CisgICAgICAgIHBpZCA9IHN0cihtdWx0aXByb2Nlc3NpbmcuY3VycmVudF9wcm9j
ZXNzKCkubmFtZSkucmVwbGFjZSgnLycsICctJykKKworICAgICAgICB0cnk6CisgICAgICAgICAg
ICBzaHV0aWwuY29weWZpbGUoYXBwICsgIi9JbmZvLnBsaXN0IiwgIi90bXAvIiArIHBpZCArICJJ
bmZvLnBsaXN0IikKKyAgICAgICAgICAgIGlmIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChb
J2NwJywgYXBwICsgJy9JbmZvLnBsaXN0JywgJy90bXAvJyArIHBpZCArICdJbmZvLnBsaXN0J10s
IHJldHVybl9leGl0X2NvZGU9VHJ1ZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAg
ICAgICAgICAgIGlmIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ3BsdXRpbCcsICctY29u
dmVydCcsICd4bWwxJywgJy90bXAvJyArIHBpZCArICdJbmZvLnBsaXN0J10sIHJldHVybl9leGl0
X2NvZGU9VHJ1ZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIHBs
ID0gcGxpc3RsaWIucmVhZFBsaXN0KCIvdG1wLyIgKyBwaWQgKyAiSW5mby5wbGlzdCIpCisgICAg
ICAgIGV4Y2VwdCBFeGNlcHRpb24sIGVycjoKKyAgICAgICAgICAgIHBsID0gTm9uZQorCisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgIG9zLnJlbW92ZSgiL3RtcC8iICsgcGlkICsgIkluZm8ucGxp
c3QiKQorICAgICAgICAgICAgaWYgcGw6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBsWyJDRkJ1
bmRsZUlkZW50aWZpZXIiXQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisgICAg
ICAgIHJldHVybiBOb25lCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2lu
X3Rlc3RjYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9k
YXJ3aW5fdGVzdGNhc2UucHkJKHJldmlzaW9uIDIwOTkyNykKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9kYXJ3aW5fdGVzdGNhc2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTIwLDYgKzIw
LDkgQEAKICMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAoraW1wb3J0IG9z
CitpbXBvcnQgcGxpc3RsaWIKKwogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBwb3J0X3Rlc3Rj
YXNlCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZXN5c3RlbV9tb2NrIGltcG9ydCBN
b2NrRmlsZVN5c3RlbQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLm91dHB1dGNhcHR1cmUg
aW1wb3J0IE91dHB1dENhcHR1cmUKQEAgLTExOSwzICsxMjIsMTAgQEAgY2xhc3MgRGFyd2luVGVz
dChwb3J0X3Rlc3RjYXNlLlBvcnRUZXN0QwogICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQo
KQogICAgICAgICBwb3J0Ll9leGVjdXRpdmUgPSBNb2NrRXhlY3V0aXZlMihydW5fY29tbWFuZF9m
bj10aHJvd2luZ19ydW5fY29tbWFuZCkKICAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9v
dXRwdXRzKHNlbGYsIHBvcnQuc2FtcGxlX3Byb2Nlc3MsIGFyZ3M9Wyd0ZXN0JywgNDJdKQorCisg
ICAgZGVmIHRlc3RfcGxpc3Qoc2VsZik6CisgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgp
CisgICAgICAgIHBsID0gZGljdChDRkJ1bmRsZUlkZW50aWZpZXI9Im9yZy53ZWJraXQuZGVtbyIp
CisgICAgICAgIHBsaXN0bGliLndyaXRlUGxpc3QocGwsICIvdG1wL0luZm8ucGxpc3QiKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuZXh0cmFjdEJ1bmRsZUlEKCIvdG1wIiksIE5vbmUp
CisgICAgICAgIG9zLnJlbW92ZSgiL3RtcC9JbmZvLnBsaXN0IikKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2RyaXZlci5weQkocmV2aXNpb24gMjA5OTI3KQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQkod29ya2luZyBjb3B5KQpAQCAtMTM4LDcgKzEzOCw3
IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogICAgICAgICBzZWxmLl9kcml2ZXJfdXNlcl9kaXJl
Y3Rvcnlfc3VmZml4ID0gTm9uZQogICAgICAgICBzZWxmLl9kcml2ZXJfdXNlcl9jYWNoZV9kaXJl
Y3RvcnkgPSBOb25lCiAKLSAgICAgICAgIyBXZWJLaXRUZXN0UnVubmVyL0xheW91dFRlc3RSZWxh
eSBjYW4gcmVwb3J0IGJhY2sgc3VicHJvY2VzcyBjcmFzaGVzIGJ5IHByaW50aW5nCisgICAgICAg
ICMgV2ViS2l0VGVzdFJ1bm5lciBjYW4gcmVwb3J0IGJhY2sgc3VicHJvY2VzcyBjcmFzaGVzIGJ5
IHByaW50aW5nCiAgICAgICAgICMgIiNDUkFTSEVEIC0gUFJPQ0VTU05BTUUiLiAgU2luY2UgdGhv
c2UgY2FuIGhhcHBlbiBhdCBhbnkgdGltZSBhbmQgU2VydmVyUHJvY2VzcwogICAgICAgICAjIHdv
bid0IGJlIGF3YXJlIG9mIHRoZW0gKHNpbmNlIHRoZSBhY3R1YWwgdG9vbCBkaWRuJ3QgY3Jhc2gs
IGp1c3QgYSBzdWJwcm9jZXNzKQogICAgICAgICAjIHdlIHJlY29yZCB0aGUgY3Jhc2hlZCBzdWJw
cm9jZXNzIG5hbWUgaGVyZS4KQEAgLTE4Miw2ICsxODIsNyBAQCBjbGFzcyBEcml2ZXIob2JqZWN0
KToKICAgICAgICAgIiIiCiAgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQogICAgICAg
ICBzZWxmLnN0YXJ0KGRyaXZlcl9pbnB1dC5zaG91bGRfcnVuX3BpeGVsX3Rlc3QsIGRyaXZlcl9p
bnB1dC5hcmdzKQorICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5jbGVhbigpCiAgICAgICAg
IHRlc3RfYmVnaW5fdGltZSA9IHRpbWUudGltZSgpCiAgICAgICAgIHNlbGYuX2RyaXZlcl90aW1l
ZF9vdXQgPSBGYWxzZQogICAgICAgICBzZWxmLl9jcmFzaF9yZXBvcnRfZnJvbV9kcml2ZXIgPSBO
b25lCkBAIC0zMjcsNyArMzI4LDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAKICAgICBkZWYg
X3NldHVwX2Vudmlyb25fZm9yX2RyaXZlcihzZWxmLCBlbnZpcm9ubWVudCk6CiAgICAgICAgIGJ1
aWxkX3Jvb3RfcGF0aCA9IHN0cihzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCkpCi0gICAgICAgICMg
RklYTUU6IERZTERfKiB2YXJpYWJsZXMgc2hvdWxkIGJlIE1hYy1vbmx5LiBFdmVuIGlPUyBTaW11
bGF0b3IgZG9lc24ndCBuZWVkIHRoZW0sIGFzIExheW91dFRlc3RSZWxheSBpcyBhIGhvc3QgYmlu
YXJ5LgorICAgICAgICAjIEZJWE1FOiBEWUxEXyogdmFyaWFibGVzIHNob3VsZCBiZSBNYWMtb25s
eS4gaU9TIHNpbXVsYXRvcnMgc2hvdWxkIGluY2x1ZGUgdGhlbSBpbiBpdCdzIGFwcCBidW5kbGUu
CiAgICAgICAgIHNlbGYuX2FwcGVuZF9lbnZpcm9ubWVudF92YXJpYWJsZV9wYXRoKGVudmlyb25t
ZW50LCAnRFlMRF9MSUJSQVJZX1BBVEgnLCBidWlsZF9yb290X3BhdGgpCiAgICAgICAgIHNlbGYu
X2FwcGVuZF9lbnZpcm9ubWVudF92YXJpYWJsZV9wYXRoKGVudmlyb25tZW50LCAnX19YUENfRFlM
RF9MSUJSQVJZX1BBVEgnLCBidWlsZF9yb290X3BhdGgpCiAgICAgICAgIHNlbGYuX2FwcGVuZF9l
bnZpcm9ubWVudF92YXJpYWJsZV9wYXRoKGVudmlyb25tZW50LCAnRFlMRF9GUkFNRVdPUktfUEFU
SCcsIGJ1aWxkX3Jvb3RfcGF0aCkKQEAgLTYxMCwyNCArNjExLDIwIEBAIGNsYXNzIERyaXZlcihv
YmplY3QpOgogCiAKICMgRklYTUU6IHRoaXMgc2hvdWxkIGJlIGFic3RyYWN0ZWQgb3V0IHZpYSB0
aGUgUG9ydCBzdWJjbGFzcyBzb21laG93LgotY2xhc3MgSU9TU2ltdWxhdG9yRHJpdmVyKERyaXZl
cik6CitjbGFzcyBEZXZpY2VEcml2ZXIoRHJpdmVyKToKICAgICBkZWYgY21kX2xpbmUoc2VsZiwg
cGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgotICAgICAgICBjbWQgPSBzdXBlcihJT1NTaW11
bGF0b3JEcml2ZXIsIHNlbGYpLmNtZF9saW5lKHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKQot
ICAgICAgICByZWxheV90b29sID0gc2VsZi5fcG9ydC5yZWxheV9wYXRoCisgICAgICAgIGNtZCA9
IHN1cGVyKERldmljZURyaXZlciwgc2VsZikuY21kX2xpbmUocGl4ZWxfdGVzdHMsIHBlcl90ZXN0
X2FyZ3MpCisgICAgICAgIHJlbGF5X3Rvb2wgPSAncnVuLW9uLWRldmljZScKICAgICAgICAgZHVt
cF90b29sID0gY21kWzBdCiAgICAgICAgIGR1bXBfdG9vbF9hcmdzID0gY21kWzE6XQogICAgICAg
ICBwcm9kdWN0X2RpciA9IHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoKQotICAgICAgICByZWxheV9h
cmdzID0gWwotICAgICAgICAgICAgJy1kZXZlbG9wZXJEaXInLCBzZWxmLl9wb3J0LmRldmVsb3Bl
cl9kaXIsCi0gICAgICAgICAgICAnLXVkaWQnLCBzZWxmLl9wb3J0LmRldmljZV9pZF9mb3Jfd29y
a2VyX251bWJlcihzZWxmLl93b3JrZXJfbnVtYmVyKSwKLSAgICAgICAgICAgICctcHJvZHVjdERp
cicsIHByb2R1Y3RfZGlyLAotICAgICAgICAgICAgJy1hcHAnLCBkdW1wX3Rvb2wsCi0gICAgICAg
IF0KLSAgICAgICAgcmV0dXJuIFtyZWxheV90b29sXSArIHJlbGF5X2FyZ3MgKyBbJy0tJ10gKyBk
dW1wX3Rvb2xfYXJncworCisgICAgICAgIHJlbGF5X2FyZ3MgPSBbc2VsZi5fcG9ydC5kZXZpY2Vf
aWRfZm9yX3dvcmtlcl9udW1iZXIoc2VsZi5fd29ya2VyX251bWJlciksIGR1bXBfdG9vbF0KKyAg
ICAgICAgcmV0dXJuIFtyZWxheV90b29sXSArIHJlbGF5X2FyZ3MgKyBkdW1wX3Rvb2xfYXJncwog
CiAgICAgZGVmIF9zZXR1cF9lbnZpcm9uX2Zvcl9kcml2ZXIoc2VsZiwgZW52aXJvbm1lbnQpOgog
ICAgICAgICBlbnZpcm9ubWVudFsnREVWRUxPUEVSX0RJUiddID0gc2VsZi5fcG9ydC5kZXZlbG9w
ZXJfZGlyCi0gICAgICAgIHJldHVybiBzdXBlcihJT1NTaW11bGF0b3JEcml2ZXIsIHNlbGYpLl9z
ZXR1cF9lbnZpcm9uX2Zvcl9kcml2ZXIoZW52aXJvbm1lbnQpCisgICAgICAgIHJldHVybiBzdXBl
cihEZXZpY2VEcml2ZXIsIHNlbGYpLl9zZXR1cF9lbnZpcm9uX2Zvcl9kcml2ZXIoZW52aXJvbm1l
bnQpCiAKIAogY2xhc3MgQ29udGVudEJsb2NrKG9iamVjdCk6CkluZGV4OiBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvaW9zLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9pb3MucHkJKHJldmlzaW9uIDIwOTkyNykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9pb3MucHkJKHdvcmtpbmcgY29weSkKQEAgLTM0LDE0ICszNCwxMDggQEAgZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzLnRlc3RfYwogZnJvbSB3ZWJraXRweS5wb3J0IGlt
cG9ydCBjb25maWcgYXMgcG9ydF9jb25maWcKIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgZHJp
dmVyLCBpbWFnZV9kaWZmCiBmcm9tIHdlYmtpdHB5LnBvcnQuZGFyd2luIGltcG9ydCBEYXJ3aW5Q
b3J0Ci1mcm9tIHdlYmtpdHB5Lnhjb2RlLnNpbXVsYXRvciBpbXBvcnQgU2ltdWxhdG9yLCBSdW50
aW1lLCBEZXZpY2VUeXBlCitmcm9tIHdlYmtpdHB5Lnhjb2RlLnNpbXVsYXRvciBpbXBvcnQgU2lt
dWxhdG9yLCBSdW50aW1lLCBEZXZpY2VUeXBlLCBEZXZpY2UKIGZyb20gd2Via2l0cHkuY29tbW9u
LnN5c3RlbS5jcmFzaGxvZ3MgaW1wb3J0IENyYXNoTG9ncwogCi0KIF9sb2cgPSBsb2dnaW5nLmdl
dExvZ2dlcihfX25hbWVfXykKIAogCi1jbGFzcyBJT1NQb3J0KERhcndpblBvcnQpOgorY2xhc3Mg
SU9TQmFzZShEYXJ3aW5Qb3J0KToKKworICAgIFNVQlBST0NFU1NfQ1JBU0hfUkVHRVggPSByZS5j
b21waWxlKCcjQ1JBU0hFRCAtICg/UDxzdWJwcm9jZXNzX25hbWU+XFMrKSBcKHBpZCAoP1A8c3Vi
cHJvY2Vzc19waWQ+XGQrKVwpJykKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0
X25hbWUsICoqa3dhcmdzKToKKyAgICAgICAgRGFyd2luUG9ydC5fX2luaXRfXyhzZWxmLCBob3N0
LCBwb3J0X25hbWUsICoqa3dhcmdzKQorICAgICAgICBzZWxmLl9wcmludGluZ19jbWRfbGluZSA9
IEZhbHNlCisKKyAgICBkZWYgZHJpdmVyX25hbWUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZ2V0
X29wdGlvbignZHJpdmVyX25hbWUnKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9vcHRp
b24oJ2RyaXZlcl9uYW1lJykKKyAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd3ZWJraXRfdGVz
dF9ydW5uZXInKToKKyAgICAgICAgICAgIHJldHVybiAnV2ViS2l0VGVzdFJ1bm5lckFwcC5hcHAn
CisgICAgICAgIHJldHVybiAnRHVtcFJlbmRlclRyZWUuYXBwJworCisgICAgZGVmIF9nZXRfY3Jh
c2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVf
Zm49dGltZS50aW1lLCBzbGVlcF9mbj10aW1lLnNsZWVwLCB3YWl0X2Zvcl9sb2c9VHJ1ZSk6Cisg
ICAgICAgIHRpbWVfZm4gPSB0aW1lX2ZuIG9yIHRpbWUudGltZQorICAgICAgICBzbGVlcF9mbiA9
IHNsZWVwX2ZuIG9yIHRpbWUuc2xlZXAKKworICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgY29s
bGVjdCB0aGUgYWN0dWFsIGNyYXNoIGxvZyBmb3IgRHVtcFJlbmRlclRyZWUuYXBwIGJlY2F1c2Ug
aXQgaW5jbHVkZXMgbW9yZQorICAgICAgICAjIGluZm9ybWF0aW9uIChlLmcuIGV4Y2VwdGlvbiBj
b2RlcykgdGhhbiBpcyBhdmFpbGFibGUgaW4gdGhlIHN0YWNrIHRyYWNlIHdyaXR0ZW4gdG8gc3Rh
bmRhcmQgZXJyb3IuCisgICAgICAgIHN0ZGVycl9saW5lcyA9IFtdCisgICAgICAgIGNyYXNoZWRf
c3VicHJvY2Vzc19uYW1lX2FuZF9waWQgPSBOb25lICAjIGUuZy4gKCdEdW1wUmVuZGVyVHJlZS5h
cHAnLCAxMjM0KQorICAgICAgICBmb3IgbGluZSBpbiAoc3RkZXJyIG9yICcnKS5zcGxpdGxpbmVz
KCk6CisgICAgICAgICAgICBpZiBub3QgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZDoK
KyAgICAgICAgICAgICAgICBtYXRjaCA9IHNlbGYuU1VCUFJPQ0VTU19DUkFTSF9SRUdFWC5tYXRj
aChsaW5lKQorICAgICAgICAgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgICAgICAgICBj
cmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlkID0gKG1hdGNoLmdyb3VwKCdzdWJwcm9jZXNz
X25hbWUnKSwgaW50KG1hdGNoLmdyb3VwKCdzdWJwcm9jZXNzX3BpZCcpKSkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHN0ZGVycl9saW5lcy5hcHBlbmQobGluZSkK
KworICAgICAgICBpZiBjcmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlkOgorICAgICAgICAg
ICAgcmV0dXJuIHNlbGYuX2dldF9jcmFzaF9sb2coY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5k
X3BpZFswXSwgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZFsxXSwgc3Rkb3V0LAorICAg
ICAgICAgICAgICAgICdcbicuam9pbihzdGRlcnJfbGluZXMpLCBuZXdlcl90aGFuLCB0aW1lX2Zu
LCBzbGVlcF9mbiwgd2FpdF9mb3JfbG9nKQorCisgICAgICAgIF9sb2cuZGVidWcoJ2xvb2tpbmcg
Zm9yIGNyYXNoIGxvZyBmb3IgJXM6JXMnICUgKG5hbWUsIHN0cihwaWQpKSkKKyAgICAgICAgY3Jh
c2hfbG9nID0gJycKKyAgICAgICAgY3Jhc2hfbG9ncyA9IENyYXNoTG9ncyhzZWxmLmhvc3QpCisg
ICAgICAgIG5vdyA9IHRpbWVfZm4oKQorICAgICAgICBkZWFkbGluZSA9IG5vdyArIDUgKiBpbnQo
c2VsZi5nZXRfb3B0aW9uKCdjaGlsZF9wcm9jZXNzZXMnLCAxKSkKKyAgICAgICAgd2hpbGUgbm90
IGNyYXNoX2xvZyBhbmQgbm93IDw9IGRlYWRsaW5lOgorICAgICAgICAgICAgY3Jhc2hfbG9nID0g
Y3Jhc2hfbG9ncy5maW5kX25ld2VzdF9sb2cobmFtZSwgcGlkLCBpbmNsdWRlX2Vycm9ycz1UcnVl
LCBuZXdlcl90aGFuPW5ld2VyX3RoYW4pCisgICAgICAgICAgICBpZiBub3Qgd2FpdF9mb3JfbG9n
OgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBub3QgY3Jhc2hfbG9nIG9y
IG5vdCBbbGluZSBmb3IgbGluZSBpbiBjcmFzaF9sb2cuc3BsaXRsaW5lcygpIGlmIG5vdCBsaW5l
LnN0YXJ0c3dpdGgoJ0VSUk9SJyldOgorICAgICAgICAgICAgICAgIHNsZWVwX2ZuKDAuMSkKKyAg
ICAgICAgICAgICAgICBub3cgPSB0aW1lX2ZuKCkKKworICAgICAgICBpZiBub3QgY3Jhc2hfbG9n
OgorICAgICAgICAgICAgcmV0dXJuIHN0ZGVyciwgTm9uZQorICAgICAgICByZXR1cm4gc3RkZXJy
LCBjcmFzaF9sb2cKKworICAgIGRlZiBfdGVzdGluZ19kZXZpY2Uoc2VsZiwgbnVtYmVyKToKKyAg
ICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBkZXZpY2VfaWRfZm9yX3dvcmtlcl9udW1iZXIo
c2VsZiwgbnVtYmVyKToKKyAgICAgICAgaWYgc2VsZi5fcHJpbnRpbmdfY21kX2xpbmUgb3Igbm90
IHNlbGYuX3Rlc3RpbmdfZGV2aWNlKG51bWJlcik6CisgICAgICAgICAgICByZXR1cm4gJzxkdW1t
eSBpZD4nCisgICAgICAgIHJldHVybiBzZWxmLl90ZXN0aW5nX2RldmljZShudW1iZXIpLnVkaWQK
KworICAgIGRlZiBfZHJpdmVyX2NsYXNzKHNlbGYpOgorICAgICAgICByZXR1cm4gZHJpdmVyLkRl
dmljZURyaXZlcgorCisgICAgZGVmIGRldmljZURlZmluZWQoc2VsZik6CisgICAgICAgIHJldHVy
biBUcnVlCisKKyAgICBkZWYgX2RldmljZVBpbmcoc2VsZiwgZGV2aWNlKToKKyAgICAgICAgcmV0
dXJuIEZhbHNlCisKKyAgICBkZWYgX2RldmljZUluc3RhbGwoc2VsZiwgZGV2aWNlLCBhcHApOgor
ICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBfZGV2aWNlUnVuKHNlbGYsIGNtZCwgZW52
aT1Ob25lKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBfZGV2aWNlS2lsbChzZWxm
LCBkZXZpY2UsIGFwcCk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHJ1bk9uRGV2
aWNlKHNlbGYsIGNtZCwgZW52aT1Ob25lKToKKyAgICAgICAgaWYgbm90IGNtZDoKKyAgICAgICAg
ICAgIHJldHVybiBOb25lCisgICAgICAgIGlmIGNtZFswXSA9PSAncGluZyc6CisgICAgICAgICAg
ICBpZiBsZW4oY21kKSA+PSAyOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9kZXZpY2VQ
aW5nKGNtZFsxXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNl
bGYuX2RldmljZVBpbmcoTm9uZSkKKyAgICAgICAgZWxpZiBjbWRbMF0gPT0gJ3J1bic6CisgICAg
ICAgICAgICByZXR1cm4gc2VsZi5fZGV2aWNlUnVuKGNtZFsxOl0sIGVudmkpCisgICAgICAgIGVs
aWYgY21kWzBdID09ICdpbnN0YWxsJzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9kZXZpY2VJ
bnN0YWxsKGNtZFsxXSwgY21kWzJdKQorICAgICAgICBlbGlmIGNtZFswXSA9PSAna2lsbCc6Cisg
ICAgICAgICAgICByZXR1cm4gc2VsZi5fZGV2aWNlS2lsbChjbWRbMV0sIGNtZFsyXSkKKyAgICAg
ICAgcmV0dXJuIE5vbmUKKworCitjbGFzcyBJT1NQb3J0KElPU0Jhc2UpOgogICAgIHBvcnRfbmFt
ZSA9ICJpb3MiCiAKICAgICBBUkNISVRFQ1RVUkVTID0gWydhcm12NycsICdhcm12N3MnLCAnYXJt
NjQnXQpAQCAtNjYsNyArMTYwLDcgQEAgY2xhc3MgSU9TUG9ydChEYXJ3aW5Qb3J0KToKICAgICAg
ICAgcmV0dXJuICdpb3MnCiAKIAotY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToK
K2NsYXNzIElPU1NpbXVsYXRvclBvcnQoSU9TQmFzZSk6CiAgICAgcG9ydF9uYW1lID0gImlvcy1z
aW11bGF0b3IiCiAKICAgICBGVVRVUkVfVkVSU0lPTiA9ICdmdXR1cmUnCkBAIC03OCw3ICsxNzIs
NiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgIFNESyA9ICdpcGhv
bmVzaW11bGF0b3InCiAKICAgICBTSU1VTEFUT1JfQlVORExFX0lEID0gJ2NvbS5hcHBsZS5pcGhv
bmVzaW11bGF0b3InCi0gICAgcmVsYXlfbmFtZSA9ICdMYXlvdXRUZXN0UmVsYXknCiAgICAgU0lN
VUxBVE9SX0RJUkVDVE9SWSA9ICIvdG1wL1dlYktpdFRlc3RpbmdTaW11bGF0b3JzLyIKICAgICBM
U1JFR0lTVEVSX1BBVEggPSAiL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29yZVNlcnZpY2Vz
LmZyYW1ld29yay9GcmFtZXdvcmtzL0xhdW5jaFNlcnZpY2VzLmZyYW1ld29yay9WZXJzaW9ucy9D
dXJyZW50L1N1cHBvcnQvbHNyZWdpc3RlciIKICAgICBQUk9DRVNTX0NPVU5UX0VTVElNQVRFX1BF
Ul9TSU1VTEFUT1JfSU5TVEFOQ0UgPSAxMDAKQEAgLTk2LDEwICsxODksOSBAQCBjbGFzcyBJT1NT
aW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgIH0KIAogICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKToKLSAgICAgICAgRGFyd2luUG9ydC5fX2luaXRf
XyhzZWxmLCBob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKQorICAgICAgICBJT1NCYXNlLl9faW5p
dF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpCiAKICAgICAgICAgb3B0aW9uYWxf
ZGV2aWNlX2NsYXNzID0gc2VsZi5nZXRfb3B0aW9uKCdkZXZpY2VfY2xhc3MnKQotICAgICAgICBz
ZWxmLl9wcmludGluZ19jbWRfbGluZSA9IEZhbHNlCiAgICAgICAgIHNlbGYuX2RldmljZV9jbGFz
cyA9IG9wdGlvbmFsX2RldmljZV9jbGFzcyBpZiBvcHRpb25hbF9kZXZpY2VfY2xhc3MgZWxzZSBz
ZWxmLkRFRkFVTFRfREVWSUNFX0NMQVNTCiAgICAgICAgIF9sb2cuZGVidWcoJ0lPU1NpbXVsYXRv
clBvcnQgX2RldmljZV9jbGFzcyBpcyAlcycsIHNlbGYuX2RldmljZV9jbGFzcykKIApAQCAtMTQ4
LDE2ICsyNDAsNiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgICAg
ICAgICAgZGV2aWNlX3R5cGUgPSBEZXZpY2VUeXBlLmZyb21fbmFtZShkZXZpY2VfbmFtZSkKICAg
ICAgICAgcmV0dXJuIGRldmljZV90eXBlCiAKLSAgICBAcHJvcGVydHkKLSAgICBAbWVtb2l6ZWQK
LSAgICBkZWYgcmVsYXlfcGF0aChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fcm9vdF93YXNfc2V0
OgotICAgICAgICAgICAgcGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0uYWJzcGF0aChzZWxmLmdldF9v
cHRpb24oJ3Jvb3QnKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1hY19jb25maWcgPSBw
b3J0X2NvbmZpZy5Db25maWcoc2VsZi5fZXhlY3V0aXZlLCBzZWxmLl9maWxlc3lzdGVtLCAnbWFj
JykKLSAgICAgICAgICAgIHBhdGggPSBtYWNfY29uZmlnLmJ1aWxkX2RpcmVjdG9yeShzZWxmLmdl
dF9vcHRpb24oJ2NvbmZpZ3VyYXRpb24nKSkKLSAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0
ZW0uam9pbihwYXRoLCBzZWxmLnJlbGF5X25hbWUpCi0KICAgICBAbWVtb2l6ZWQKICAgICBkZWYg
Y2hpbGRfcHJvY2Vzc2VzKHNlbGYpOgogICAgICAgICByZXR1cm4gaW50KHNlbGYuZ2V0X29wdGlv
bignY2hpbGRfcHJvY2Vzc2VzJykpCkBAIC0xODIsNzUgKzI2NCwxMiBAQCBjbGFzcyBJT1NTaW11
bGF0b3JQb3J0KERhcndpblBvcnQpOgogCiAgICAgICAgIHJldHVybiBtaW4obWF4aW11bV9zaW11
bGF0b3JfY291bnRfb25fdGhpc19zeXN0ZW0sIGJlc3RfY2hpbGRfcHJvY2Vzc19jb3VudF9mb3Jf
Y3B1KQogCi0gICAgZGVmIF9jaGVja19yZWxheShzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYu
X2ZpbGVzeXN0ZW0uZXhpc3RzKHNlbGYucmVsYXlfcGF0aCk6Ci0gICAgICAgICAgICBfbG9nLmVy
cm9yKCIlcyB3YXMgbm90IGZvdW5kIGF0ICVzIiAlIChzZWxmLnJlbGF5X25hbWUsIHNlbGYucmVs
YXlfcGF0aCkpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRydWUK
LQogICAgIGRlZiBfY2hlY2tfcG9ydF9idWlsZChzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYu
X3Jvb3Rfd2FzX3NldCBhbmQgc2VsZi5nZXRfb3B0aW9uKCdidWlsZCcpIGFuZCBub3Qgc2VsZi5f
YnVpbGRfcmVsYXkoKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBpZiBub3Qg
c2VsZi5fY2hlY2tfcmVsYXkoKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBy
ZXR1cm4gVHJ1ZQotCi0gICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rk
b3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49dGltZS50aW1lLCBzbGVlcF9mbj10aW1l
LnNsZWVwLCB3YWl0X2Zvcl9sb2c9VHJ1ZSk6Ci0gICAgICAgIHRpbWVfZm4gPSB0aW1lX2ZuIG9y
IHRpbWUudGltZQotICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9yIHRpbWUuc2xlZXAKLQot
ICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgY29sbGVjdCB0aGUgYWN0dWFsIGNyYXNoIGxvZyBm
b3IgRHVtcFJlbmRlclRyZWUuYXBwIGJlY2F1c2UgaXQgaW5jbHVkZXMgbW9yZQotICAgICAgICAj
IGluZm9ybWF0aW9uIChlLmcuIGV4Y2VwdGlvbiBjb2RlcykgdGhhbiBpcyBhdmFpbGFibGUgaW4g
dGhlIHN0YWNrIHRyYWNlIHdyaXR0ZW4gdG8gc3RhbmRhcmQgZXJyb3IuCi0gICAgICAgIHN0ZGVy
cl9saW5lcyA9IFtdCi0gICAgICAgIGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9waWQgPSBO
b25lICAjIGUuZy4gKCdEdW1wUmVuZGVyVHJlZS5hcHAnLCAxMjM0KQotICAgICAgICBmb3IgbGlu
ZSBpbiAoc3RkZXJyIG9yICcnKS5zcGxpdGxpbmVzKCk6Ci0gICAgICAgICAgICBpZiBub3QgY3Jh
c2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZDoKLSAgICAgICAgICAgICAgICBtYXRjaCA9IHNl
bGYuU1VCUFJPQ0VTU19DUkFTSF9SRUdFWC5tYXRjaChsaW5lKQotICAgICAgICAgICAgICAgIGlm
IG1hdGNoOgotICAgICAgICAgICAgICAgICAgICBjcmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRf
cGlkID0gKG1hdGNoLmdyb3VwKCdzdWJwcm9jZXNzX25hbWUnKSwgaW50KG1hdGNoLmdyb3VwKCdz
dWJwcm9jZXNzX3BpZCcpKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAg
ICAgIHN0ZGVycl9saW5lcy5hcHBlbmQobGluZSkKLQotICAgICAgICBpZiBjcmFzaGVkX3N1YnBy
b2Nlc3NfbmFtZV9hbmRfcGlkOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9jcmFzaF9s
b2coY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZFswXSwgY3Jhc2hlZF9zdWJwcm9jZXNz
X25hbWVfYW5kX3BpZFsxXSwgc3Rkb3V0LAotICAgICAgICAgICAgICAgICdcbicuam9pbihzdGRl
cnJfbGluZXMpLCBuZXdlcl90aGFuLCB0aW1lX2ZuLCBzbGVlcF9mbiwgd2FpdF9mb3JfbG9nKQot
Ci0gICAgICAgICMgTGF5b3V0VGVzdFJlbGF5IGNyYXNoZWQKLSAgICAgICAgX2xvZy5kZWJ1Zygn
bG9va2luZyBmb3IgY3Jhc2ggbG9nIGZvciAlczolcycgJSAobmFtZSwgc3RyKHBpZCkpKQotICAg
ICAgICBjcmFzaF9sb2cgPSAnJwotICAgICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hMb2dzKHNlbGYu
aG9zdCkKLSAgICAgICAgbm93ID0gdGltZV9mbigpCi0gICAgICAgIGRlYWRsaW5lID0gbm93ICsg
NSAqIGludChzZWxmLmdldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpKQotICAgICAgICB3
aGlsZSBub3QgY3Jhc2hfbG9nIGFuZCBub3cgPD0gZGVhZGxpbmU6Ci0gICAgICAgICAgICBjcmFz
aF9sb2cgPSBjcmFzaF9sb2dzLmZpbmRfbmV3ZXN0X2xvZyhuYW1lLCBwaWQsIGluY2x1ZGVfZXJy
b3JzPVRydWUsIG5ld2VyX3RoYW49bmV3ZXJfdGhhbikKLSAgICAgICAgICAgIGlmIG5vdCB3YWl0
X2Zvcl9sb2c6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGlmIG5vdCBjcmFz
aF9sb2cgb3Igbm90IFtsaW5lIGZvciBsaW5lIGluIGNyYXNoX2xvZy5zcGxpdGxpbmVzKCkgaWYg
bm90IGxpbmUuc3RhcnRzd2l0aCgnRVJST1InKV06Ci0gICAgICAgICAgICAgICAgc2xlZXBfZm4o
MC4xKQotICAgICAgICAgICAgICAgIG5vdyA9IHRpbWVfZm4oKQotCi0gICAgICAgIGlmIG5vdCBj
cmFzaF9sb2c6Ci0gICAgICAgICAgICByZXR1cm4gc3RkZXJyLCBOb25lCi0gICAgICAgIHJldHVy
biBzdGRlcnIsIGNyYXNoX2xvZwotCi0gICAgZGVmIF9idWlsZF9yZWxheShzZWxmKToKLSAgICAg
ICAgZW52aXJvbm1lbnQgPSBzZWxmLmhvc3QuY29weV9jdXJyZW50X2Vudmlyb25tZW50KCkKLSAg
ICAgICAgZW52aXJvbm1lbnQuZGlzYWJsZV9nY2Nfc21hcnRxdW90ZXMoKQotICAgICAgICBlbnYg
PSBlbnZpcm9ubWVudC50b19kaWN0aW9uYXJ5KCkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAg
ICAjIEZJWE1FOiBXZSBzaG91bGQgYmUgcGFzc2luZyBfYXJndW1lbnRzX2Zvcl9jb25maWd1cmF0
aW9uKCksIHdoaWNoIHJlc3BlY3RzIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIHBvcnQsCi0gICAg
ICAgICAgICAjIGluc3RlYWQgb2YgaGFyZGNvZGluZyAtLWlvcy1zaW11bGF0b3IuCi0gICAgICAg
ICAgICBzZWxmLl9ydW5fc2NyaXB0KCJidWlsZC1sYXlvdXR0ZXN0cmVsYXkiLCBhcmdzPVsiLS1p
b3Mtc2ltdWxhdG9yIl0sIGVudj1lbnYpCi0gICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvciwgZToK
LSAgICAgICAgICAgIF9sb2cuZXJyb3IoZS5tZXNzYWdlX3dpdGhfb3V0cHV0KG91dHB1dF9saW1p
dD1Ob25lKSkKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICByZXR1cm4gVHJ1ZQog
CiAgICAgZGVmIF9idWlsZF9kcml2ZXIoc2VsZik6CiAgICAgICAgIGJ1aWx0X3Rvb2wgPSBzdXBl
cihJT1NTaW11bGF0b3JQb3J0LCBzZWxmKS5fYnVpbGRfZHJpdmVyKCkKLSAgICAgICAgYnVpbHRf
cmVsYXkgPSBzZWxmLl9idWlsZF9yZWxheSgpCi0gICAgICAgIHJldHVybiBidWlsdF90b29sIGFu
ZCBidWlsdF9yZWxheQorICAgICAgICByZXR1cm4gYnVpbHRfdG9vbAogCiAgICAgZGVmIF9idWls
ZF9kcml2ZXJfZmxhZ3Moc2VsZik6CiAgICAgICAgIGFyY2hzID0gWydBUkNIUz1pMzg2J10gaWYg
c2VsZi5hcmNoaXRlY3R1cmUoKSA9PSAneDg2JyBlbHNlIFtdCkBAIC0yNjQsOSArMjgzLDYgQEAg
Y2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgICAgICAgICBjb25m
aWd1cmF0aW9ucy5hcHBlbmQoVGVzdENvbmZpZ3VyYXRpb24odmVyc2lvbj1zZWxmLl92ZXJzaW9u
LCBhcmNoaXRlY3R1cmU9YXJjaGl0ZWN0dXJlLCBidWlsZF90eXBlPWJ1aWxkX3R5cGUpKQogICAg
ICAgICByZXR1cm4gY29uZmlndXJhdGlvbnMKIAotICAgIGRlZiBfZHJpdmVyX2NsYXNzKHNlbGYp
OgotICAgICAgICByZXR1cm4gZHJpdmVyLklPU1NpbXVsYXRvckRyaXZlcgotCiAgICAgZGVmIGRl
ZmF1bHRfYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuZ2V0X29w
dGlvbignd2Via2l0X3Rlc3RfcnVubmVyJyk6CiAgICAgICAgICAgICBmYWxsYmFja19uYW1lcyA9
IFtzZWxmLl93azJfcG9ydF9uYW1lKCldICsgW3NlbGYucG9ydF9uYW1lXSArIFsnd2syJ10KQEAg
LTM5OSw4ICs0MTUsNiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAg
ICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIHJldHVybiBzdXBlcihJT1NTaW11bGF0b3JQ
b3J0LCBzZWxmKS5jaGVja19zeXNfZGVwcyhuZWVkc19odHRwKQogCi0gICAgU1VCUFJPQ0VTU19D
UkFTSF9SRUdFWCA9IHJlLmNvbXBpbGUoJyNDUkFTSEVEIC0gKD9QPHN1YnByb2Nlc3NfbmFtZT5c
UyspIFwocGlkICg/UDxzdWJwcm9jZXNzX3BpZD5cZCspXCknKQotCiAgICAgZGVmIF91c2luZ19k
ZWRpY2F0ZWRfc2ltdWxhdG9ycyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X29wdGlv
bignZGVkaWNhdGVkX3NpbXVsYXRvcnMnKQogCkBAIC00NzUsMyArNDg5LDU3IEBAIGNsYXNzIElP
U1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0
cHV0KFsiaW5zdGFsbF9uYW1lX3Rvb2wiLCAiLWFkZF9ycGF0aCIsIHNlbGYuZGV2ZWxvcGVyX2Rp
ciArICIvLi4vRnJhbWV3b3Jrcy8iLCBkZXN0aW5hdGlvbiArICIvQ29udGVudHMvTWFjT1MvU2lt
dWxhdG9yIl0pCiAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsiY29kZXNpZ24iLCAi
LWZzIiwgIi0iLCBkZXN0aW5hdGlvbl0pCiAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0
KFtzZWxmLkxTUkVHSVNURVJfUEFUSCwgIi1mIiwgZGVzdGluYXRpb25dKQorCisgICAgZGVmIF9k
ZXZpY2VQaW5nKHNlbGYsIGRldmljZSk6CisgICAgICAgIGRhdGEgPSBzZWxmLl9leGVjdXRpdmUu
cnVuX2NvbW1hbmQoWyd4Y3J1bicsICdzaW1jdGwnLCAnbGlzdCddKQorICAgICAgICBpZiBkZXZp
Y2UgYW5kIGRldmljZSArICcpIChCb290ZWQpJyBpbiBkYXRhOgorICAgICAgICAgICAgcmV0dXJu
IFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX2RldmljZUluc3RhbGwoc2Vs
ZiwgZGV2aWNlLCBhcHApOgorICAgICAgICBpZiBub3Qgc2VsZi5fZGV2aWNlUGluZyhkZXZpY2Up
OgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBub3Qgc2VsZi5fZXhl
Y3V0aXZlLnJ1bl9jb21tYW5kKFsKKyAgICAgICAgICAgICd4Y3J1bicsCisgICAgICAgICAgICAn
c2ltY3RsJywKKyAgICAgICAgICAgICdpbnN0YWxsJywKKyAgICAgICAgICAgIGRldmljZSwKKyAg
ICAgICAgICAgIGFwcCwKKyAgICAgICAgXSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKQorCisgICAg
ZGVmIF9kZXZpY2VSdW4oc2VsZiwgY21kLCBlbnZpPU5vbmUpOgorICAgICAgICBpZiBub3Qgc2Vs
Zi5fZGV2aWNlUGluZyhjbWRbMF0pOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAg
IGFwcGlkID0gc2VsZi5leHRyYWN0QnVuZGxlSUQoY21kWzFdKQorICAgICAgICBpZiBub3QgYXBw
aWQ6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgc2VsZi5fZGV2aWNlS2lsbChj
bWRbMF0sIGNtZFsxXSkKKworICAgICAgICB0cmFuc2ZlcmVkRW52aXJvbm1lbnQgPSB7fQorICAg
ICAgICBmb3IgdmFsdWUgaW4gZW52aToKKyAgICAgICAgICAgIGlmIG5vdCAiU0lNQ1RMX0NISUxE
XyIgaW4gdmFsdWU6CisgICAgICAgICAgICAgICAgdHJhbnNmZXJlZEVudmlyb25tZW50WydTSU1D
VExfQ0hJTERfJyArIHZhbHVlXSA9IGVudmlbdmFsdWVdCisgICAgICAgICAgICB0cmFuc2ZlcmVk
RW52aXJvbm1lbnRbdmFsdWVdID0gZW52aVt2YWx1ZV0KKworICAgICAgICByZXR1cm4gbm90IHNl
bGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbCisgICAgICAgICAgICAneGNydW4nLAorICAgICAg
ICAgICAgJ3NpbWN0bCcsCisgICAgICAgICAgICAnbGF1bmNoJywKKyAgICAgICAgICAgIGNtZFsw
XSwKKyAgICAgICAgICAgIGFwcGlkLAorICAgICAgICBdICsgY21kWzI6XSwKKyAgICAgICAgZW52
PXRyYW5zZmVyZWRFbnZpcm9ubWVudCwKKyAgICAgICAgcmV0dXJuX2V4aXRfY29kZT1UcnVlKQor
ICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9kZXZpY2VLaWxsKHNlbGYsIGRldmljZSwg
YXBwKToKKyAgICAgICAgYWRkaWQgPSBzZWxmLmV4dHJhY3RCdW5kbGVJRChhcHApCisgICAgICAg
IGlmIG5vdCBhZGRpZDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4g
bm90IHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbCisgICAgICAgICAgICAneGNydW4nLAor
ICAgICAgICAgICAgJ3NpbWN0bCcsCisgICAgICAgICAgICAndGVybWluYXRlJywKKyAgICAgICAg
ICAgIGRldmljZSwKKyAgICAgICAgICAgIGFkZGlkLAorICAgICAgICBdLCByZXR1cm5fZXhpdF9j
b2RlPVRydWUpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRl
c3QucHkJKHJldmlzaW9uIDIwOTkyNykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9p
b3NfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDkgQEAKIAogaW1wb3J0
IHRpbWUKIAorZnJvbSB3ZWJraXRweS5wb3J0LmlvcyBpbXBvcnQgSU9TUG9ydAogZnJvbSB3ZWJr
aXRweS5wb3J0LmlvcyBpbXBvcnQgSU9TU2ltdWxhdG9yUG9ydAotZnJvbSB3ZWJraXRweS5wb3J0
IGltcG9ydCBkYXJ3aW5fdGVzdGNhc2UKK2Zyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgaW9zYmFz
ZV90ZXN0Y2FzZQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW1fbW9jayBp
bXBvcnQgTW9ja0ZpbGVTeXN0ZW0KIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5vdXRwdXRj
YXB0dXJlIGltcG9ydCBPdXRwdXRDYXB0dXJlCiBmcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wg
aW1wb3J0IE1vY2tPcHRpb25zCkBAIC0zMSw3ICszMiwyMCBAQCBmcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0uZXhlY3V0aXZlX21vCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVt
aG9zdF9tb2NrIGltcG9ydCBNb2NrU3lzdGVtSG9zdAogCiAKLWNsYXNzIGlvc1Rlc3QoZGFyd2lu
X3Rlc3RjYXNlLkRhcndpblRlc3QpOgorY2xhc3MgSU9TVGVzdChpb3NiYXNlX3Rlc3RjYXNlLklP
U0Jhc2VUZXN0KToKKyAgICBvc19uYW1lID0gJ2lvcycKKyAgICBvc192ZXJzaW9uID0gJycKKyAg
ICBwb3J0X25hbWUgPSAnaW9zJworICAgIHBvcnRfbWFrZXIgPSBJT1NQb3J0CisgICAgaXNfc2lt
dWxhdG9yID0gRmFsc2UKKworICAgIGRlZiBtYWtlX3BvcnQoc2VsZiwgaG9zdD1Ob25lLCBwb3J0
X25hbWU9Tm9uZSwgb3B0aW9ucz1Ob25lLCBvc19uYW1lPU5vbmUsIG9zX3ZlcnNpb249Tm9uZSwg
Kiprd2FyZ3MpOgorICAgICAgICBwb3J0ID0gc3VwZXIoSU9TVGVzdCwgc2VsZikubWFrZV9wb3J0
KGhvc3Q9aG9zdCwgcG9ydF9uYW1lPXBvcnRfbmFtZSwgb3B0aW9ucz1vcHRpb25zLCBvc19uYW1l
PW9zX25hbWUsIHNfdmVyc2lvbj1vc192ZXJzaW9uLCBrd2FyZ3M9a3dhcmdzKQorICAgICAgICBw
b3J0LnNldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpCisgICAgICAgIHJldHVybiBwb3J0
CisKKworY2xhc3MgSU9TU2ltdWxhdG9yVGVzdChpb3NiYXNlX3Rlc3RjYXNlLklPU0Jhc2VUZXN0
KToKICAgICBvc19uYW1lID0gJ2lvcy1zaW11bGF0b3InCiAgICAgb3NfdmVyc2lvbiA9ICcnCiAg
ICAgcG9ydF9uYW1lID0gJ2lvcy1zaW11bGF0b3InCkBAIC0zOSw3ICs1Myw3IEBAIGNsYXNzIGlv
c1Rlc3QoZGFyd2luX3Rlc3RjYXNlLkRhcndpblRlc3QKICAgICBpc19zaW11bGF0b3IgPSBUcnVl
CiAKICAgICBkZWYgbWFrZV9wb3J0KHNlbGYsIGhvc3Q9Tm9uZSwgcG9ydF9uYW1lPU5vbmUsIG9w
dGlvbnM9Tm9uZSwgb3NfbmFtZT1Ob25lLCBvc192ZXJzaW9uPU5vbmUsICoqa3dhcmdzKToKLSAg
ICAgICAgcG9ydCA9IHN1cGVyKGlvc1Rlc3QsIHNlbGYpLm1ha2VfcG9ydChob3N0PWhvc3QsIHBv
cnRfbmFtZT1wb3J0X25hbWUsIG9wdGlvbnM9b3B0aW9ucywgb3NfbmFtZT1vc19uYW1lLCBzX3Zl
cnNpb249b3NfdmVyc2lvbiwga3dhcmdzPWt3YXJncykKKyAgICAgICAgcG9ydCA9IHN1cGVyKElP
U1NpbXVsYXRvclRlc3QsIHNlbGYpLm1ha2VfcG9ydChob3N0PWhvc3QsIHBvcnRfbmFtZT1wb3J0
X25hbWUsIG9wdGlvbnM9b3B0aW9ucywgb3NfbmFtZT1vc19uYW1lLCBzX3ZlcnNpb249b3NfdmVy
c2lvbiwga3dhcmdzPWt3YXJncykKICAgICAgICAgcG9ydC5zZXRfb3B0aW9uKCdjaGlsZF9wcm9j
ZXNzZXMnLCAxKQogICAgICAgICByZXR1cm4gcG9ydAogCkBAIC01MywxNCArNjcsNiBAQCBjbGFz
cyBpb3NUZXN0KGRhcndpbl90ZXN0Y2FzZS5EYXJ3aW5UZXN0CiAgICAgZGVmIHRlc3Rfb3BlcmF0
aW5nX3N5c3RlbShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaW9zLXNpbXVsYXRv
cicsIHNlbGYubWFrZV9wb3J0KCkub3BlcmF0aW5nX3N5c3RlbSgpKQogCi0gICAgZGVmIHRlc3Rf
Z2V0X2NyYXNoX2xvZyhzZWxmKToKLSAgICAgICAgIyBNYWMgY3Jhc2ggbG9ncyBhcmUgdGVzdGVk
IGVsc2V3aGVyZSwgc28gaGVyZSB3ZSBqdXN0IG1ha2Ugc3VyZSB3ZSBkb24ndCBjcmFzaC4KLSAg
ICAgICAgZGVmIGZha2VfdGltZV9jYigpOgotICAgICAgICAgICAgdGltZXMgPSBbMCwgMjAsIDQw
XQotICAgICAgICAgICAgcmV0dXJuIGxhbWJkYTogdGltZXMucG9wKDApCi0gICAgICAgIHBvcnQg
PSBzZWxmLm1ha2VfcG9ydChwb3J0X25hbWU9J2lvcy1zaW11bGF0b3InKQotICAgICAgICBwb3J0
Ll9nZXRfY3Jhc2hfbG9nKCdEdW1wUmVuZGVyVHJlZScsIDEyMzQsIE5vbmUsIE5vbmUsIHRpbWUu
dGltZSgpLCB3YWl0X2Zvcl9sb2c9RmFsc2UpCi0KICAgICBkZWYgdGVzdF8zMmJpdChzZWxmKToK
ICAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KG9wdGlvbnM9TW9ja09wdGlvbnMoYXJjaGl0
ZWN0dXJlPSd4ODYnKSkKIApAQCAtNzAsNyArNzYsNyBAQCBjbGFzcyBpb3NUZXN0KGRhcndpbl90
ZXN0Y2FzZS5EYXJ3aW5UZXN0CiAgICAgICAgIHBvcnQuX3J1bl9zY3JpcHQgPSBydW5fc2NyaXB0
CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5hcmNoaXRlY3R1cmUoKSwgJ3g4NicpCiAg
ICAgICAgIHBvcnQuX2J1aWxkX2RyaXZlcigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vs
Zi5hcmdzLCBbJy0taW9zLXNpbXVsYXRvciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNl
bGYuYXJncywgWydBUkNIUz1pMzg2JywgJy0tc2RrJywgJ2lwaG9uZXNpbXVsYXRvciddKQogCiAg
ICAgZGVmIHRlc3RfNjRiaXQoc2VsZik6CiAgICAgICAgICMgQXBwbGUgTWFjIHBvcnQgaXMgNjQt
Yml0IGJ5IGRlZmF1bHQKQEAgLTgyLDcgKzg4LDcgQEAgY2xhc3MgaW9zVGVzdChkYXJ3aW5fdGVz
dGNhc2UuRGFyd2luVGVzdAogCiAgICAgICAgIHBvcnQuX3J1bl9zY3JpcHQgPSBydW5fc2NyaXB0
CiAgICAgICAgIHBvcnQuX2J1aWxkX2RyaXZlcigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
c2VsZi5hcmdzLCBbJy0taW9zLXNpbXVsYXRvciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHNlbGYuYXJncywgWyctLXNkaycsICdpcGhvbmVzaW11bGF0b3InXSkKIAogICAgIGRlZiB0ZXN0
X3Nka19uYW1lKHNlbGYpOgogICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQpAQCAtOTcs
MyArMTAzLDcgQEAgY2xhc3MgaW9zVGVzdChkYXJ3aW5fdGVzdGNhc2UuRGFyd2luVGVzdAogICAg
ICAgICBwb3J0Ll9leGVjdXRpdmUgPSBNb2NrRXhlY3V0aXZlMihydW5fY29tbWFuZF9mbj10aHJv
d2luZ19ydW5fY29tbWFuZCkKICAgICAgICAgZXhwZWN0ZWRfc3Rkb3V0ID0gIlsneGNydW4nLCAn
LS1zZGsnLCAnaXBob25lc2ltdWxhdG9yJywgJy1maW5kJywgJ3Rlc3QnXVxuIgogICAgICAgICBP
dXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1dHMoc2VsZiwgcG9ydC54Y3J1bl9maW5kLCBhcmdz
PVsndGVzdCcsICdmYWxsaW5nJ10sIGV4cGVjdGVkX3N0ZG91dD1leHBlY3RlZF9zdGRvdXQpCisK
KyAgICBkZWYgdGVzdF9waW5nKHNlbGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQo
KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBvcnQucnVuT25EZXZpY2UoWydwaW5nJywgJzxk
ZXZpZD4nXSkpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zYmFzZV90ZXN0
Y2FzZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zYmFz
ZV90ZXN0Y2FzZS5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvaW9zYmFzZV90ZXN0Y2FzZS5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisj
IENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHRpbWUK
KworZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBkYXJ3aW5fdGVzdGNhc2UKKworCitjbGFzcyBJ
T1NCYXNlVGVzdChkYXJ3aW5fdGVzdGNhc2UuRGFyd2luVGVzdCk6CisKKyAgICBkZWYgdGVzdF9k
ZXZpY2VGbGFnKHNlbGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQorICAgICAg
ICBzZWxmLmFzc2VydFRydWUocG9ydC5kZXZpY2VEZWZpbmVkKCkpCisKKyAgICBkZWYgdGVzdF9n
ZXRfY3Jhc2hfbG9nKHNlbGYpOgorICAgICAgICAjIE1hYyBjcmFzaCBsb2dzIGFyZSB0ZXN0ZWQg
ZWxzZXdoZXJlLCBzbyBoZXJlIHdlIGp1c3QgbWFrZSBzdXJlIHdlIGRvbid0IGNyYXNoLgorICAg
ICAgICBkZWYgZmFrZV90aW1lX2NiKCk6CisgICAgICAgICAgICB0aW1lcyA9IFswLCAyMCwgNDBd
CisgICAgICAgICAgICByZXR1cm4gbGFtYmRhOiB0aW1lcy5wb3AoMCkKKyAgICAgICAgcG9ydCA9
IHNlbGYubWFrZV9wb3J0KHBvcnRfbmFtZT0naW9zLXNpbXVsYXRvcicpCisgICAgICAgIHBvcnQu
X2dldF9jcmFzaF9sb2coJ0R1bXBSZW5kZXJUcmVlJywgMTIzNCwgTm9uZSwgTm9uZSwgdGltZS50
aW1lKCksIHdhaXRfZm9yX2xvZz1GYWxzZSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvc2VydmVyX3Byb2Nlc3MucHkJKHJldmlzaW9uIDIwOTkyNykKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzAsMTAgKzMxLDEzIEBACiAKIGltcG9ydCBlcnJu
bwogaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcKIGltcG9ydCBzaWduYWwK
IGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCiAKK2Zyb20gd2Via2l0cHkuY29tbW9uLmlwY19waXBl
IGltcG9ydCBQcm9jZXNzUGlwZSwgVW5peFBpcGUKKwogIyBOb3RlIHRoYXQgYWx0aG91Z2ggd2lu
MzIgcHl0aG9uIGRvZXMgcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBvZgogIyB0aGUgd2luMzIg
c2VsZWN0IEFQSSwgaXQgb25seSB3b3JrcyBvbiBzb2NrZXRzLCBhbmQgbm90IG9uIHRoZSBuYW1l
ZCBwaXBlcwogIyB1c2VkIGJ5IHN1YnByb2Nlc3MsIHNvIHdlIGhhdmUgdG8gdXNlIHRoZSBuYXRp
dmUgQVBJcyBkaXJlY3RseS4KQEAgLTcxLDMyICs3NSwyNSBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNz
KG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2hvc3QgPSBzZWxmLl9wb3J0Lmhvc3QKICAgICAgICAg
c2VsZi5fcGlkID0gTm9uZQogICAgICAgICBzZWxmLl9yZXNldCgpCi0KLSAgICAgICAgIyBTZWUg
Y29tbWVudCBpbiBpbXBvcnRzIGZvciB3aHkgd2UgbmVlZCB0aGUgd2luMzIgQVBJcyBhbmQgY2Fu
J3QganVzdCB1c2Ugc2VsZWN0LgotICAgICAgICAjIEZJWE1FOiB0aGVyZSBzaG91bGQgYmUgYSB3
YXkgdG8gZ2V0IHdpbjMyIHZzLiBjeWd3aW4gZnJvbSBwbGF0Zm9ybWluZm8uCisgICAgICAgIHNl
bGYuX3BpcGUgPSBOb25lCiAgICAgICAgIHNlbGYuX3VzZV93aW4zMl9hcGlzID0gc3lzLnBsYXRm
b3JtLnN0YXJ0c3dpdGgoJ3dpbicpCiAKKyAgICAgICAgaWYgInJ1bi1vbi1kZXZpY2UiID09IHNl
bGYuX2NtZFswXToKKyAgICAgICAgICAgIHNlbGYuX3BvcnQucnVuT25EZXZpY2UoWydpbnN0YWxs
Jywgc2VsZi5fY21kWzFdLCBzZWxmLl9jbWRbMl1dKQorCiAgICAgZGVmIG5hbWUoc2VsZik6CiAg
ICAgICAgIHJldHVybiBzZWxmLl9uYW1lCiAKICAgICBkZWYgcGlkKHNlbGYpOgogICAgICAgICBy
ZXR1cm4gc2VsZi5fcGlkCiAKKyAgICBkZWYgY2xlYW4oc2VsZik6CisgICAgICAgIHNlbGYuX3Bp
cGUuY2xlYW4oKQorCiAgICAgZGVmIF9yZXNldChzZWxmKToKLSAgICAgICAgaWYgZ2V0YXR0cihz
ZWxmLCAnX3Byb2MnLCBOb25lKToKLSAgICAgICAgICAgIGlmIHNlbGYuX3Byb2Muc3RkaW46Ci0g
ICAgICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRpbi5jbG9zZSgpCi0gICAgICAgICAgICAgICAg
c2VsZi5fcHJvYy5zdGRpbiA9IE5vbmUKLSAgICAgICAgICAgIGlmIHNlbGYuX3Byb2Muc3Rkb3V0
OgotICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3Rkb3V0LmNsb3NlKCkKLSAgICAgICAgICAg
ICAgICBzZWxmLl9wcm9jLnN0ZG91dCA9IE5vbmUKLSAgICAgICAgICAgIGlmIHNlbGYuX3Byb2Mu
c3RkZXJyOgotICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkZXJyLmNsb3NlKCkKLSAgICAg
ICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGVyciA9IE5vbmUKLQotICAgICAgICBzZWxmLl9wcm9j
ID0gTm9uZQotICAgICAgICBzZWxmLl9vdXRwdXQgPSBzdHIoKSAgIyBieXRlc2FycmF5KCkgb25j
ZSB3ZSByZXF1aXJlIFB5dGhvbiAyLjYKLSAgICAgICAgc2VsZi5fZXJyb3IgPSBzdHIoKSAgIyBi
eXRlc2FycmF5KCkgb25jZSB3ZSByZXF1aXJlIFB5dGhvbiAyLjYKKyAgICAgICAgc2VsZi5fcGlw
ZSA9IE5vbmUKKyAgICAgICAgc2VsZi5fcGlkID0gTm9uZQorCiAgICAgICAgIHNlbGYuX2NyYXNo
ZWQgPSBGYWxzZQogICAgICAgICBzZWxmLnRpbWVkX291dCA9IEZhbHNlCiAKQEAgLTEwNCw3NSAr
MTAxLDg1IEBAIGNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToKICAgICAgICAgcmV0dXJuIHNl
bGYuX25hbWUKIAogICAgIGRlZiBfc3RhcnQoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX3Byb2M6
CisgICAgICAgIHNlbGYuX3BpZCA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5fcGlwZToKICAgICAg
ICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIiVzIGFscmVhZHkgcnVubmluZyIgJSBzZWxmLl9uYW1l
KQogICAgICAgICBzZWxmLl9yZXNldCgpCi0gICAgICAgICMgY2xvc2VfZmRzIGlzIGEgd29ya2Fy
b3VuZCBmb3IgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIzMjAKLSAgICAgICAgY2xvc2Vf
ZmRzID0gbm90IHNlbGYuX2hvc3QucGxhdGZvcm0uaXNfd2luKCkKLSAgICAgICAgc2VsZi5fcHJv
YyA9IHNlbGYuX2hvc3QuZXhlY3V0aXZlLnBvcGVuKHNlbGYuX2NtZCwgc3RkaW49c2VsZi5faG9z
dC5leGVjdXRpdmUuUElQRSwKLSAgICAgICAgICAgIHN0ZG91dD1zZWxmLl9ob3N0LmV4ZWN1dGl2
ZS5QSVBFLAotICAgICAgICAgICAgc3RkZXJyPXNlbGYuX2hvc3QuZXhlY3V0aXZlLlBJUEUsCi0g
ICAgICAgICAgICBjbG9zZV9mZHM9Y2xvc2VfZmRzLAotICAgICAgICAgICAgZW52PXNlbGYuX2Vu
diwKLSAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1zZWxmLl91bml2ZXJzYWxfbmV3bGlu
ZXMpCi0gICAgICAgIHNlbGYuX3BpZCA9IHNlbGYuX3Byb2MucGlkCi0gICAgICAgIHNlbGYuX3Bv
cnQuZmluZF9zeXN0ZW1fcGlkKHNlbGYubmFtZSgpLCBzZWxmLl9waWQpCi0gICAgICAgIGZkID0g
c2VsZi5fcHJvYy5zdGRvdXQuZmlsZW5vKCkKLSAgICAgICAgaWYgbm90IHNlbGYuX3VzZV93aW4z
Ml9hcGlzOgotICAgICAgICAgICAgZmwgPSBmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGTCkK
LSAgICAgICAgICAgIGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX1NFVEZMLCBmbCB8IG9zLk9fTk9O
QkxPQ0spCi0gICAgICAgICAgICBmZCA9IHNlbGYuX3Byb2Muc3RkZXJyLmZpbGVubygpCi0gICAg
ICAgICAgICBmbCA9IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZMKQotICAgICAgICAgICAg
ZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfU0VURkwsIGZsIHwgb3MuT19OT05CTE9DSykKLQotICAg
IGRlZiBfaGFuZGxlX3Bvc3NpYmxlX2ludGVycnVwdChzZWxmKToKLSAgICAgICAgIiIiVGhpcyBy
b3V0aW5lIGNoZWNrcyB0byBzZWUgaWYgdGhlIHByb2Nlc3MgY3Jhc2hlZCBvciBleGl0ZWQKLSAg
ICAgICAgYmVjYXVzZSBvZiBhIGtleWJvYXJkIGludGVycnVwdCBhbmQgcmFpc2VzIEtleWJvYXJk
SW50ZXJydXB0Ci0gICAgICAgIGFjY29yZGluZ2x5LiIiIgotICAgICAgICAjIEZJWE1FOiBMaW51
eCBhbmQgTWFjIHNldCB0aGUgcmV0dXJuY29kZSB0byAtc2lnbmFsLlNJR0lOVCBpZiBhCi0gICAg
ICAgICMgc3VicHJvY2VzcyBpcyBraWxsZWQgd2l0aCBhIGN0cmxeQy4gIFByZXZpb3VzIGNvbW1l
bnRzIGluIHRoaXMKLSAgICAgICAgIyByb3V0aW5lIHNhaWQgdGhhdCBzdXBwb3NlZGx5IFdpbmRv
d3MgcmV0dXJucyAweGMwMDAwMDFkLCBidXQgdGhhdCdzIG5vdCB3aGF0Ci0gICAgICAgICMgLTEw
NzM3NDE1MTAgZXZhbHVhdGVzIHRvLiBGaWd1cmUgb3V0IHdoYXQgdGhlIHJpZ2h0IHZhbHVlIGlz
Ci0gICAgICAgICMgZm9yIHdpbjMyIGFuZCBjeWd3aW4gaGVyZSAuLi4KLSAgICAgICAgaWYgc2Vs
Zi5fcHJvYy5yZXR1cm5jb2RlIGluICgtMTA3Mzc0MTUxMCwgLXNpZ25hbC5TSUdJTlQpOgotICAg
ICAgICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQKKworICAgICAgICBpZiAicnVuLW9uLWRl
dmljZSIgPT0gc2VsZi5fY21kWzBdOgorICAgICAgICAgICAgc2VsZi5fZW52WydJUENfSURFTlRJ
RklFUiddID0gc2VsZi5fcG9ydC5leHRyYWN0QnVuZGxlSUQoc2VsZi5fY21kWzJdKSArICItIiAr
IHNlbGYuX2NtZFsxXQorICAgICAgICAgICAgZmlsZV9sb2NhdGlvbiA9ICcvdG1wLycgKyBzZWxm
Ll9lbnZbJ0lQQ19JREVOVElGSUVSJ10KKyAgICAgICAgICAgIHNlbGYuX3BpcGUgPSBVbml4UGlw
ZShmaWxlX2xvY2F0aW9uICsgJ19JTicsIGZpbGVfbG9jYXRpb24gKyAnX09VVCcsIGZpbGVfbG9j
YXRpb24gKyAnX0VSUk9SJykKKyAgICAgICAgICAgIHNlbGYuX3BvcnQucnVuT25EZXZpY2UoWydy
dW4nXSArIHNlbGYuX2NtZFsxOl0sIHNlbGYuX2VudikKKyAgICAgICAgICAgIHNlbGYuX3BpcGUu
Y29ubmVjdCgpCisgICAgICAgICAgICBpZiBzZWxmLl9waXBlLmlzQ29ubmVjdGVkKCk6CisgICAg
ICAgICAgICAgICAgcGlkID0gc2VsZi5yZWFkX3N0ZGVycl9saW5lKHRpbWUudGltZSgpICsgMS4w
KQorICAgICAgICAgICAgICAgIGlmIHBpZDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGlk
ID0gaW50KHBpZFs2Oi0xXSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
ICAgICBfbG9nLmRlYnVnKCdObyBwaWQgcmVjZWl2ZWQgZnJvbSBVbml4LXBpcGUgYmFzZWQgY2xp
ZW50JykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygnRmFpbGVkIHRvIGNvbm5lY3Qg
dG8gbGF1bmNoaW5nIGFwcCcpCisgICAgICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUK
KworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fcGlwZSA9IFByb2Nlc3NQaXBlKHNl
bGYuX3BvcnQsIHNlbGYuX2NtZCwgc2VsZi5fZW52LCBzZWxmLl91bml2ZXJzYWxfbmV3bGluZXMp
CisgICAgICAgICAgICBzZWxmLl9waWQgPSBzZWxmLl9waXBlLnBpZCgpCisKKyAgICAgICAgaWYg
bm90IHNlbGYucG9sbCgpOgorICAgICAgICAgICAgc2VsZi5fcG9ydC5maW5kX3N5c3RlbV9waWQo
c2VsZi5uYW1lKCksIHNlbGYucGlkKCkpCiAKICAgICBkZWYgcG9sbChzZWxmKToKICAgICAgICAg
IiIiQ2hlY2sgdG8gc2VlIGlmIHRoZSB1bmRlcmx5aW5nIHByb2Nlc3MgaXMgcnVubmluZzsgcmV0
dXJucyBOb25lCiAgICAgICAgIGlmIGl0IHN0aWxsIGlzICh3cmFwcGVyIGFyb3VuZCBzdWJwcm9j
ZXNzLnBvbGwpLiIiIgotICAgICAgICBpZiBzZWxmLl9wcm9jOgotICAgICAgICAgICAgcmV0dXJu
IHNlbGYuX3Byb2MucG9sbCgpCi0gICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGlmIHNlbGYu
X3BpcGUgYW5kIHNlbGYuX3BpcGUuaXNDb25uZWN0ZWQoKToKKyAgICAgICAgICAgIHJldHVybiBO
b25lCisgICAgICAgIHJldHVybiBUcnVlCiAKICAgICBkZWYgd3JpdGUoc2VsZiwgYnl0ZXMsIGln
bm9yZV9jcmFzaD1GYWxzZSk6CisKICAgICAgICAgIiIiV3JpdGUgYSByZXF1ZXN0IHRvIHRoZSBz
dWJwcm9jZXNzLiBUaGUgc3VicHJvY2VzcyBpcyAocmUtKXN0YXJ0KCknZWQKICAgICAgICAgaWYg
aXMgbm90IGFscmVhZHkgcnVubmluZy4iIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX3Byb2M6Cisg
ICAgICAgIGlmIG5vdCBzZWxmLl9waXBlOgogICAgICAgICAgICAgc2VsZi5fc3RhcnQoKQotICAg
ICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGluLndyaXRlKGJ5dGVzKQotICAg
ICAgICBleGNlcHQgSU9FcnJvciwgZToKLSAgICAgICAgICAgIHNlbGYuc3RvcCgwLjApCi0gICAg
ICAgICAgICAjIHN0b3AoKSBjYWxscyBfcmVzZXQoKSwgc28gd2UgaGF2ZSB0byBzZXQgY3Jhc2hl
ZCB0byBUcnVlIGFmdGVyIGNhbGxpbmcgc3RvcCgpCi0gICAgICAgICAgICAjIHVubGVzcyB3ZSBh
bHJlYWR5IGtub3cgdGhhdCB0aGlzIGlzIGEgdGltZW91dC4KKyAgICAgICAgc3VjY2VzcyA9IEZh
bHNlCisgICAgICAgIGlmIHNlbGYuX3BpcGU6CisgICAgICAgICAgICBzdWNjZXNzID0gc2VsZi5f
cGlwZS5zZW5kKGJ5dGVzKQorCisgICAgICAgIGlmIG5vdCBzdWNjZXNzOgorICAgICAgICAgICAg
c2VsZi5zdG9wKCkKICAgICAgICAgICAgIGlmIG5vdCBpZ25vcmVfY3Jhc2g6CiAgICAgICAgICAg
ICAgICAgX2xvZy5kZWJ1ZygnVGhpcyB0ZXN0IG1hcmtlZCBhcyBhIGNyYXNoIGJlY2F1c2Ugb2Yg
YSBicm9rZW4gcGlwZSB3aGVuIHdyaXRpbmcgdG8gc3RkaW4gb2YgdGhlIHNlcnZlciBwcm9jZXNz
LicpCiAgICAgICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUKIAogICAgIGRlZiBfcG9w
X3N0ZG91dF9saW5lX2lmX3JlYWR5KHNlbGYpOgotICAgICAgICBpbmRleF9hZnRlcl9uZXdsaW5l
ID0gc2VsZi5fb3V0cHV0LmZpbmQoJ1xuJykgKyAxCi0gICAgICAgIGlmIGluZGV4X2FmdGVyX25l
d2xpbmUgPiAwOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BvcF9vdXRwdXRfYnl0ZXMoaW5k
ZXhfYWZ0ZXJfbmV3bGluZSkKKyAgICAgICAgZGF0YSA9IFtdCisgICAgICAgIGlmIHNlbGYuX3Bp
cGU6CisgICAgICAgICAgICBkYXRhID0gc2VsZi5fcGlwZS5zdGRvdXRSZWFkKCkKKworICAgICAg
ICBpZiBkYXRhOgorICAgICAgICAgICAgcmV0dXJuIGRhdGEKICAgICAgICAgcmV0dXJuIE5vbmUK
IAogICAgIGRlZiBfcG9wX3N0ZGVycl9saW5lX2lmX3JlYWR5KHNlbGYpOgotICAgICAgICBpbmRl
eF9hZnRlcl9uZXdsaW5lID0gc2VsZi5fZXJyb3IuZmluZCgnXG4nKSArIDEKLSAgICAgICAgaWYg
aW5kZXhfYWZ0ZXJfbmV3bGluZSA+IDA6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcG9wX2Vy
cm9yX2J5dGVzKGluZGV4X2FmdGVyX25ld2xpbmUpCisgICAgICAgIGRhdGEgPSBbXQorICAgICAg
ICBpZiBzZWxmLl9waXBlOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX3BpcGUuc3RkZXJyUmVh
ZCgpCisgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICByZXR1cm4gZGF0YQogICAgICAgICBy
ZXR1cm4gTm9uZQogCiAgICAgZGVmIHBvcF9hbGxfYnVmZmVyZWRfc3RkZXJyKHNlbGYpOgotICAg
ICAgICByZXR1cm4gc2VsZi5fcG9wX2Vycm9yX2J5dGVzKGxlbihzZWxmLl9lcnJvcikpCisgICAg
ICAgIF9lcnJvciA9ICIiCisgICAgICAgIF9jdXJyZW50X2Vycm9yID0gW10KKyAgICAgICAgd2hp
bGUgVHJ1ZToKKyAgICAgICAgICAgIGlmIHNlbGYuX3BpcGU6CisgICAgICAgICAgICAgICAgX2N1
cnJlbnRfZXJyb3IgPSBzZWxmLl9waXBlLnN0ZGVyclJlYWQoKQorICAgICAgICAgICAgaWYgbm90
IF9jdXJyZW50X2Vycm9yOgorICAgICAgICAgICAgICAgIHJldHVybiBfZXJyb3IKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgX2Vycm9yID0gX2Vycm9yICsgX2N1cnJlbnRfZXJy
b3IgKyAnXG4nCiAKICAgICBkZWYgcmVhZF9zdGRvdXRfbGluZShzZWxmLCBkZWFkbGluZSk6CiAg
ICAgICAgIHJldHVybiBzZWxmLl9yZWFkKGRlYWRsaW5lLCBzZWxmLl9wb3Bfc3Rkb3V0X2xpbmVf
aWZfcmVhZHkpCkBAIC0xOTEsNyArMTk4LDYgQEAgY2xhc3MgU2VydmVyUHJvY2VzcyhvYmplY3Qp
OgogICAgICAgICAgICAgcmV0dXJuIE5vbmUgICMgSW5zdHJ1Y3RzIHRoZSBjYWxsZXIgdG8ga2Vl
cCB3YWl0aW5nLgogCiAgICAgICAgIHJldHVybl92YWx1ZSA9IHNlbGYuX3JlYWQoZGVhZGxpbmUs
IHJldHJpZXZlX2J5dGVzX2Zyb21fYnVmZmVycykKLSAgICAgICAgIyBGSVhNRTogVGhpcyBpcyBh
IGJpdCBvZiBhIGhhY2sgYXJvdW5kIHRoZSBmYWN0IHRoYXQgX3JlYWQgbm9ybWFsbHkgb25seSBy
ZXR1cm5zIG9uZSB2YWx1ZSwgYnV0IHRoaXMgY2FsbGVyIHdhbnRzIGl0IHRvIHJldHVybiB0d28u
CiAgICAgICAgIGlmIHJldHVybl92YWx1ZSBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuIE5v
bmUsIE5vbmUKICAgICAgICAgcmV0dXJuIHJldHVybl92YWx1ZQpAQCAtMjAxLDExNyArMjA3LDI1
IEBAIGNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToKICAgICAgICAgICAgIHJhaXNlIFZhbHVl
RXJyb3IoJ1NlcnZlclByb2Nlc3MucmVhZCgpIGNhbGxlZCB3aXRoIGEgbm9uLXBvc2l0aXZlIHNp
emU6ICVkICcgJSBzaXplKQogCiAgICAgICAgIGRlZiByZXRyaWV2ZV9ieXRlc19mcm9tX3N0ZG91
dF9idWZmZXIoKToKLSAgICAgICAgICAgIGlmIGxlbihzZWxmLl9vdXRwdXQpID49IHNpemU6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BvcF9vdXRwdXRfYnl0ZXMoc2l6ZSkKKyAgICAg
ICAgICAgIGlmIHNlbGYuX3BpcGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BpcGUu
cmVhZEJsb2NrU3Rkb3V0KHNpemUpCiAgICAgICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgICAg
IHJldHVybiBzZWxmLl9yZWFkKGRlYWRsaW5lLCByZXRyaWV2ZV9ieXRlc19mcm9tX3N0ZG91dF9i
dWZmZXIpCiAKLSAgICBkZWYgX2xvZyhzZWxmLCBtZXNzYWdlKToKLSAgICAgICAgIyBUaGlzIGlz
IGEgYml0IG9mIGEgaGFjaywgYnV0IHdlIGZpcnN0IGxvZyBhIGJsYW5rIGxpbmUgdG8gYXZvaWQK
LSAgICAgICAgIyBtZXNzaW5nIHVwIHRoZSBtYXN0ZXIgcHJvY2VzcydzIG91dHB1dC4KLSAgICAg
ICAgX2xvZy5pbmZvKCcnKQotICAgICAgICBfbG9nLmluZm8obWVzc2FnZSkKLQogICAgIGRlZiBf
aGFuZGxlX3RpbWVvdXQoc2VsZik6CiAgICAgICAgIHNlbGYudGltZWRfb3V0ID0gVHJ1ZQogICAg
ICAgICBpZiBzZWxmLl9wb3J0LmdldF9vcHRpb24oInNhbXBsZV9vbl90aW1lb3V0Iik6Ci0gICAg
ICAgICAgICBzZWxmLl9wb3J0LnNhbXBsZV9wcm9jZXNzKHNlbGYuX25hbWUsIHNlbGYuX3Byb2Mu
cGlkKQotCi0gICAgZGVmIF9zcGxpdF9zdHJpbmdfYWZ0ZXJfaW5kZXgoc2VsZiwgc3RyaW5nLCBp
bmRleCk6Ci0gICAgICAgIHJldHVybiBzdHJpbmdbOmluZGV4XSwgc3RyaW5nW2luZGV4Ol0KLQot
ICAgIGRlZiBfcG9wX291dHB1dF9ieXRlcyhzZWxmLCBieXRlc19jb3VudCk6Ci0gICAgICAgIG91
dHB1dCwgc2VsZi5fb3V0cHV0ID0gc2VsZi5fc3BsaXRfc3RyaW5nX2FmdGVyX2luZGV4KHNlbGYu
X291dHB1dCwgYnl0ZXNfY291bnQpCi0gICAgICAgIHJldHVybiBvdXRwdXQKLQotICAgIGRlZiBf
cG9wX2Vycm9yX2J5dGVzKHNlbGYsIGJ5dGVzX2NvdW50KToKLSAgICAgICAgb3V0cHV0LCBzZWxm
Ll9lcnJvciA9IHNlbGYuX3NwbGl0X3N0cmluZ19hZnRlcl9pbmRleChzZWxmLl9lcnJvciwgYnl0
ZXNfY291bnQpCi0gICAgICAgIHJldHVybiBvdXRwdXQKLQotICAgIGRlZiBfd2FpdF9mb3JfZGF0
YV9hbmRfdXBkYXRlX2J1ZmZlcnNfdXNpbmdfc2VsZWN0KHNlbGYsIGRlYWRsaW5lLCBzdG9wcGlu
Zz1GYWxzZSk6Ci0gICAgICAgIGlmIHNlbGYuX3Byb2Muc3Rkb3V0LmNsb3NlZCBvciBzZWxmLl9w
cm9jLnN0ZGVyci5jbG9zZWQ6Ci0gICAgICAgICAgICAjIElmIHRoZSBwcm9jZXNzIGNyYXNoZWQg
YW5kIGlzIHVzaW5nIEZJRk9zLCBsaWtlIENocm9taXVtIEFuZHJvaWQsIHRoZQotICAgICAgICAg
ICAgIyBzdGRvdXQgYW5kIHN0ZGVyciBwaXBlcyB3aWxsIGJlIGNsb3NlZC4KLSAgICAgICAgICAg
IHJldHVybgotCi0gICAgICAgIG91dF9mZCA9IHNlbGYuX3Byb2Muc3Rkb3V0LmZpbGVubygpCi0g
ICAgICAgIGVycl9mZCA9IHNlbGYuX3Byb2Muc3RkZXJyLmZpbGVubygpCi0gICAgICAgIHNlbGVj
dF9mZHMgPSAob3V0X2ZkLCBlcnJfZmQpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJlYWRf
ZmRzLCBfLCBfID0gc2VsZWN0LnNlbGVjdChzZWxlY3RfZmRzLCBbXSwgc2VsZWN0X2ZkcywgbWF4
KGRlYWRsaW5lIC0gdGltZS50aW1lKCksIDApKQotICAgICAgICBleGNlcHQgc2VsZWN0LmVycm9y
LCBlOgotICAgICAgICAgICAgIyBXZSBjYW4gaWdub3JlIEVJTlZBTCBzaW5jZSBpdCdzIGxpa2Vs
eSB0aGUgcHJvY2VzcyBqdXN0IGNyYXNoZWQgYW5kIHdlJ2xsCi0gICAgICAgICAgICAjIGZpZ3Vy
ZSB0aGF0IG91dCB0aGUgbmV4dCB0aW1lIHRocm91Z2ggdGhlIGxvb3AgaW4gX3JlYWQoKS4KLSAg
ICAgICAgICAgIGlmIGUuYXJnc1swXSA9PSBlcnJuby5FSU5WQUw6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuCi0gICAgICAgICAgICByYWlzZQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMg
Tm90ZSB0aGF0IHdlIG1heSBnZXQgbm8gZGF0YSBkdXJpbmcgcmVhZCgpIGV2ZW4gdGhvdWdoCi0g
ICAgICAgICAgICAjIHNlbGVjdCBzYXlzIHdlIGdvdCBzb21ldGhpbmc7IHNlZSB0aGUgc2VsZWN0
KCkgbWFuIHBhZ2UKLSAgICAgICAgICAgICMgb24gbGludXguIEkgZG9uJ3Qga25vdyBpZiB0aGlz
IGhhcHBlbnMgb24gTWFjIE9TIGFuZAotICAgICAgICAgICAgIyBvdGhlciBVbml4ZW4gYXMgd2Vs
bCwgYnV0IHdlIGRvbid0IGJvdGhlciBzcGVjaWFsLWNhc2luZwotICAgICAgICAgICAgIyBMaW51
eCBiZWNhdXNlIGl0J3MgcmVsYXRpdmVseSBoYXJtbGVzcyBlaXRoZXIgd2F5LgotICAgICAgICAg
ICAgaWYgb3V0X2ZkIGluIHJlYWRfZmRzOgotICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9w
cm9jLnN0ZG91dC5yZWFkKCkKLSAgICAgICAgICAgICAgICBpZiBub3QgZGF0YSBhbmQgbm90IHN0
b3BwaW5nIGFuZCAoc2VsZi5fdHJlYXRfbm9fZGF0YV9hc19jcmFzaCBvciBzZWxmLl9wcm9jLnBv
bGwoKSk6Ci0gICAgICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJ1RoaXMgdGVzdCBtYXJrZWQg
YXMgYSBjcmFzaCBiZWNhdXNlIG9mIG5vIGRhdGEgd2hpbGUgcmVhZGluZyBzdGRvdXQgZm9yIHRo
ZSBzZXJ2ZXIgcHJvY2Vzcy4nKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0g
VHJ1ZQotICAgICAgICAgICAgICAgIHNlbGYuX291dHB1dCArPSBkYXRhCi0KLSAgICAgICAgICAg
IGlmIGVycl9mZCBpbiByZWFkX2ZkczoKLSAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fcHJv
Yy5zdGRlcnIucmVhZCgpCi0gICAgICAgICAgICAgICAgaWYgbm90IGRhdGEgYW5kIG5vdCBzdG9w
cGluZyBhbmQgKHNlbGYuX3RyZWF0X25vX2RhdGFfYXNfY3Jhc2ggb3Igc2VsZi5fcHJvYy5wb2xs
KCkpOgotICAgICAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCdUaGlzIHRlc3QgbWFya2VkIGFz
IGEgY3Jhc2ggYmVjYXVzZSBvZiBubyBkYXRhIHdoaWxlIHJlYWRpbmcgc3Rkb3V0IGZvciB0aGUg
c2VydmVyIHByb2Nlc3MuJykKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRy
dWUKLSAgICAgICAgICAgICAgICBzZWxmLl9lcnJvciArPSBkYXRhCi0gICAgICAgIGV4Y2VwdCBJ
T0Vycm9yLCBlOgotICAgICAgICAgICAgIyBXZSBjYW4gaWdub3JlIHRoZSBJT0Vycm9ycyBiZWNh
dXNlIHdlIHdpbGwgZGV0ZWN0IGlmIHRoZSBzdWJwb3JjZXNzIGNyYXNoZWQKLSAgICAgICAgICAg
ICMgdGhlIG5leHQgdGltZSB0aHJvdWdoIHRoZSBsb29wIGluIF9yZWFkKCkKLSAgICAgICAgICAg
IHBhc3MKLQotICAgIGRlZiBfd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnNfdXNpbmdf
d2luMzJfYXBpcyhzZWxmLCBkZWFkbGluZSk6Ci0gICAgICAgICMgU2VlIGh0dHA6Ly9jb2RlLmFj
dGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzQ0MDU1NC1tb2R1bGUtdG8tYWxsb3ctYXN5bmNocm9ub3Vz
LXN1YnByb2Nlc3MtdXNlLW9uLXdpbi8KLSAgICAgICAgIyBhbmQgaHR0cDovL2RvY3MuYWN0aXZl
c3RhdGUuY29tL2FjdGl2ZXB5dGhvbi8yLjYvcHl3aW4zMi9tb2R1bGVzLmh0bWwKLSAgICAgICAg
IyBmb3IgZG9jdW1lbnRhdGlvbiBvbiBhbGwgb2YgdGhlc2Ugd2luMzItc3BlY2lmaWMgbW9kdWxl
cy4KLSAgICAgICAgbm93ID0gdGltZS50aW1lKCkKLSAgICAgICAgb3V0X2ZoID0gbXN2Y3J0Lmdl
dF9vc2ZoYW5kbGUoc2VsZi5fcHJvYy5zdGRvdXQuZmlsZW5vKCkpCi0gICAgICAgIGVycl9maCA9
IG1zdmNydC5nZXRfb3NmaGFuZGxlKHNlbGYuX3Byb2Muc3RkZXJyLmZpbGVubygpKQotICAgICAg
ICB3aGlsZSAoc2VsZi5fcHJvYy5wb2xsKCkgaXMgTm9uZSkgYW5kIChub3cgPCBkZWFkbGluZSk6
Ci0gICAgICAgICAgICBvdXRwdXQgPSBzZWxmLl9ub25fYmxvY2tpbmdfcmVhZF93aW4zMihvdXRf
ZmgpCi0gICAgICAgICAgICBlcnJvciA9IHNlbGYuX25vbl9ibG9ja2luZ19yZWFkX3dpbjMyKGVy
cl9maCkKLSAgICAgICAgICAgIGlmIG91dHB1dCBvciBlcnJvcjoKLSAgICAgICAgICAgICAgICBp
ZiBvdXRwdXQ6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX291dHB1dCArPSBvdXRwdXQKLSAg
ICAgICAgICAgICAgICBpZiBlcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXJyb3Ig
Kz0gZXJyb3IKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIHRpbWUuc2xlZXAo
MC4wMSkKLSAgICAgICAgICAgIG5vdyA9IHRpbWUudGltZSgpCi0gICAgICAgIHJldHVybgotCi0g
ICAgZGVmIF9ub25fYmxvY2tpbmdfcmVhZF93aW4zMihzZWxmLCBoYW5kbGUpOgotICAgICAgICB0
cnk6Ci0gICAgICAgICAgICBfLCBhdmFpbCwgXyA9IHdpbjMycGlwZS5QZWVrTmFtZWRQaXBlKGhh
bmRsZSwgMCkKLSAgICAgICAgICAgIGlmIGF2YWlsID4gMDoKLSAgICAgICAgICAgICAgICBfLCBi
dWYgPSB3aW4zMmZpbGUuUmVhZEZpbGUoaGFuZGxlLCBhdmFpbCwgTm9uZSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gYnVmCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6Ci0gICAgICAgICAg
ICBpZiBlWzBdIG5vdCBpbiAoMTA5LCBlcnJuby5FU0hVVERPV04pOiAgIyAxMDkgPT0gd2luMzIg
RVJST1JfQlJPS0VOX1BJUEUKLSAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICByZXR1cm4g
Tm9uZQorICAgICAgICAgICAgc2VsZi5fcG9ydC5zYW1wbGVfcHJvY2VzcyhzZWxmLl9uYW1lLCBz
ZWxmLl9waXBlLnBpZCkKIAogICAgIGRlZiBoYXNfY3Jhc2hlZChzZWxmKToKICAgICAgICAgaWYg
bm90IHNlbGYuX2NyYXNoZWQgYW5kIHNlbGYucG9sbCgpOgogICAgICAgICAgICAgX2xvZy5kZWJ1
ZygnVGhpcyB0ZXN0IG1hcmtlZCBhcyBhIGNyYXNoIGJlY2F1c2Ugb2YgZmFpbHVyZSB0byBwb2xs
IHRoZSBzZXJ2ZXIgcHJvY2Vzcy4nKQogICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUK
LSAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9wb3NzaWJsZV9pbnRlcnJ1cHQoKQorICAgICAgICAg
ICAgaWYgc2VsZi5fcGlwZToKKyAgICAgICAgICAgICAgICBzZWxmLl9waXBlLmhhbmRsZV9pbnRl
cnJ1cHQoKQogICAgICAgICByZXR1cm4gc2VsZi5fY3Jhc2hlZAogCi0gICAgIyBUaGlzIHJlYWQg
ZnVuY3Rpb24gaXMgYSBiaXQgb2RkbHktZGVzaWduZWQsIGFzIGl0IHBvbGxzIGJvdGggc3Rkb3V0
IGFuZCBzdGRlcnIsIHlldAotICAgICMgb25seSByZWFkcy9yZXR1cm5zIGZyb20gb25lIG9mIHRo
ZW0gKGJ1ZmZlcmluZyBib3RoIGluIGxvY2FsIHNlbGYuX291dHB1dC9zZWxmLl9lcnJvcikuCi0g
ICAgIyBJdCBtaWdodCBiZSBjbGVhbmVyIHRvIHBhc3MgaW4gdGhlIGZpbGUgZGVzY3JpcHRvciB0
byBwb2xsIGluc3RlYWQuCiAgICAgZGVmIF9yZWFkKHNlbGYsIGRlYWRsaW5lLCBmZXRjaF9ieXRl
c19mcm9tX2J1ZmZlcnNfY2FsbGJhY2spOgogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAg
ICAgaWYgc2VsZi5oYXNfY3Jhc2hlZCgpOgpAQCAtMzI1LDYzICsyMzksMzYgQEAgY2xhc3MgU2Vy
dmVyUHJvY2VzcyhvYmplY3QpOgogICAgICAgICAgICAgaWYgYnl0ZXMgaXMgbm90IE5vbmU6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGJ5dGVzCiAKLSAgICAgICAgICAgIGlmIHNlbGYuX3VzZV93
aW4zMl9hcGlzOgotICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRfZm9yX2RhdGFfYW5kX3VwZGF0
ZV9idWZmZXJzX3VzaW5nX3dpbjMyX2FwaXMoZGVhZGxpbmUpCi0gICAgICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRfZm9yX2RhdGFfYW5kX3VwZGF0ZV9idWZmZXJzX3Vz
aW5nX3NlbGVjdChkZWFkbGluZSkKLQogICAgIGRlZiBzdGFydChzZWxmKToKLSAgICAgICAgaWYg
bm90IHNlbGYuX3Byb2M6CisgICAgICAgIGlmIG5vdCBzZWxmLl9waXBlOgogICAgICAgICAgICAg
c2VsZi5fc3RhcnQoKQogCiAgICAgZGVmIHN0b3Aoc2VsZiwgdGltZW91dF9zZWNzPTMuMCk6Ci0g
ICAgICAgIGlmIG5vdCBzZWxmLl9wcm9jOgotICAgICAgICAgICAgcmV0dXJuIChOb25lLCBOb25l
KQorICAgICAgICBkZWFkbGluZSA9IHRpbWUudGltZSgpICsgdGltZW91dF9zZWNzCiAKLSAgICAg
ICAgIyBPbmx5IGJvdGhlciB0byBjaGVjayBmb3IgbGVha3Mgb3Igc3RkZXJyIGlmIHRoZSBwcm9j
ZXNzIGlzIHN0aWxsIHJ1bm5pbmcuCi0gICAgICAgIGlmIHNlbGYucG9sbCgpIGlzIE5vbmU6Ci0g
ICAgICAgICAgICBzZWxmLl9wb3J0LmNoZWNrX2Zvcl9sZWFrcyhzZWxmLm5hbWUoKSwgc2VsZi5w
aWQoKSkKLQotICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQotICAgICAgICBpZiBzZWxmLl9wcm9j
LnN0ZGluOgotICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRpbi5jbG9zZSgpCi0gICAgICAgICAg
ICBzZWxmLl9wcm9jLnN0ZGluID0gTm9uZQotICAgICAgICBraWxsZWQgPSBGYWxzZQotICAgICAg
ICBpZiB0aW1lb3V0X3NlY3M6Ci0gICAgICAgICAgICBkZWFkbGluZSA9IG5vdyArIHRpbWVvdXRf
c2VjcwotICAgICAgICAgICAgd2hpbGUgc2VsZi5fcHJvYy5wb2xsKCkgaXMgTm9uZSBhbmQgdGlt
ZS50aW1lKCkgPCBkZWFkbGluZToKLSAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCi0g
ICAgICAgICAgICBpZiBzZWxmLl9wcm9jLnBvbGwoKSBpcyBOb25lOgotICAgICAgICAgICAgICAg
IF9sb2cud2FybmluZygnc3RvcHBpbmcgJXMocGlkICVkKSB0aW1lZCBvdXQsIGtpbGxpbmcgaXQn
ICUgKHNlbGYuX25hbWUsIHNlbGYuX3Byb2MucGlkKSkKLQotICAgICAgICBpZiBzZWxmLl9wcm9j
LnBvbGwoKSBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5fa2lsbCgpCi0gICAgICAgICAgICBr
aWxsZWQgPSBUcnVlCi0gICAgICAgICAgICBfbG9nLmRlYnVnKCdraWxsZWQgcGlkICVkJyAlIHNl
bGYuX3Byb2MucGlkKQotCi0gICAgICAgICMgcmVhZCBhbnkgcmVtYWluaW5nIGRhdGEgb24gdGhl
IHBpcGVzIGFuZCByZXR1cm4gaXQuCi0gICAgICAgIGlmIG5vdCBraWxsZWQ6Ci0gICAgICAgICAg
ICBpZiBzZWxmLl91c2Vfd2luMzJfYXBpczoKLSAgICAgICAgICAgICAgICBzZWxmLl93YWl0X2Zv
cl9kYXRhX2FuZF91cGRhdGVfYnVmZmVyc191c2luZ193aW4zMl9hcGlzKG5vdykKLSAgICAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5fd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRl
X2J1ZmZlcnNfdXNpbmdfc2VsZWN0KG5vdywgc3RvcHBpbmc9VHJ1ZSkKLSAgICAgICAgb3V0LCBl
cnIgPSBzZWxmLl9vdXRwdXQsIHNlbGYuX2Vycm9yCisgICAgICAgIG91dCA9IFtdCisgICAgICAg
IGVyciA9IFtdCisKKyAgICAgICAgaWYgc2VsZi5fcGlwZSA9PSBOb25lOgorICAgICAgICAgICAg
cmV0dXJuIChvdXQsIGVycikKKyAgICAgICAgaWYgbm90IHNlbGYuX3BpcGUuaXNDb25uZWN0ZWQo
KToKKyAgICAgICAgICAgIHNlbGYuX3BpcGUuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fcmVz
ZXQoKQorICAgICAgICAgICAgcmV0dXJuIChvdXQsIGVycikKKworICAgICAgICBvdXQgPSBzZWxm
Ll9waXBlLnJlYWRCdWZmZXJTdGRvdXQoKQorICAgICAgICBlcnIgPSBzZWxmLl9waXBlLnJlYWRC
dWZmZXJTdGRlcnIoKQorCisgICAgICAgIHdoaWxlIHNlbGYuX3BpcGUuaXNDb25uZWN0ZWQoKSBh
bmQgZGVhZGxpbmUgPiB0aW1lLnRpbWUoKToKKyAgICAgICAgICAgIG91dCA9IG91dCArIHNlbGYu
X3BpcGUucmVhZEJ1ZmZlclN0ZG91dCgpCisgICAgICAgICAgICBlcnIgPSBlcnIgKyBzZWxmLl9w
aXBlLnJlYWRCdWZmZXJTdGRlcnIoKQorCisgICAgICAgIGlmICJydW4tb24tZGV2aWNlIiA9PSBz
ZWxmLl9jbWRbMF06CisgICAgICAgICAgICBzZWxmLl9wb3J0LnJ1bk9uRGV2aWNlKFsna2lsbCcs
IHNlbGYuX2NtZFsxXSwgc2VsZi5fY21kWzJdXSkKKyAgICAgICAgc2VsZi5fcGlwZS5jbG9zZSgp
CiAgICAgICAgIHNlbGYuX3Jlc2V0KCkKICAgICAgICAgcmV0dXJuIChvdXQsIGVycikKIAogICAg
IGRlZiBraWxsKHNlbGYpOgogICAgICAgICBzZWxmLnN0b3AoMC4wKQogCi0gICAgZGVmIF9raWxs
KHNlbGYpOgotICAgICAgICBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5raWxsX3Byb2Nlc3Moc2VsZi5f
cHJvYy5waWQpCi0gICAgICAgIGlmIHNlbGYuX3Byb2MucG9sbCgpIGlzIG5vdCBOb25lOgotICAg
ICAgICAgICAgc2VsZi5fcHJvYy53YWl0KCkKLQotICAgIGRlZiByZXBsYWNlX291dHB1dHMoc2Vs
Ziwgc3Rkb3V0LCBzdGRlcnIpOgotICAgICAgICBhc3NlcnQgc2VsZi5fcHJvYwotICAgICAgICBp
ZiBzdGRvdXQ6Ci0gICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZG91dC5jbG9zZSgpCi0gICAgICAg
ICAgICBzZWxmLl9wcm9jLnN0ZG91dCA9IHN0ZG91dAotICAgICAgICBpZiBzdGRlcnI6Ci0gICAg
ICAgICAgICBzZWxmLl9wcm9jLnN0ZGVyci5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLl9wcm9j
LnN0ZGVyciA9IHN0ZGVycgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZl
cl9wcm9jZXNzX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzc191bml0dGVzdC5weQkocmV2aXNpb24gMjA5OTI3KQorKysg
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzX3VuaXR0ZXN0LnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMiw2ICszMyw3IEBA
IGltcG9ydCB1bml0dGVzdAogCiBmcm9tIHdlYmtpdHB5LnBvcnQuZmFjdG9yeSBpbXBvcnQgUG9y
dEZhY3RvcnkKIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgc2VydmVyX3Byb2Nlc3MKK2Zyb20g
d2Via2l0cHkuY29tbW9uLmlwY19waXBlX3Rlc3RjYXNlIGltcG9ydCBEdW1teVByb2Nlc3NQaXBl
CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdCBpbXBvcnQgU3lzdGVtSG9z
dAogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3RfbW9jayBpbXBvcnQgTW9j
a1N5c3RlbUhvc3QKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5vdXRwdXRjYXB0dXJlIGlt
cG9ydCBPdXRwdXRDYXB0dXJlCkBAIC01Myw0OCArNTUsMTEgQEAgY2xhc3MgVHJpdmlhbE1vY2tQ
b3J0KG9iamVjdCk6CiAgICAgICAgIHJldHVybiAxCiAKIAotY2xhc3MgTW9ja0ZpbGUob2JqZWN0
KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc2VydmVyX3Byb2Nlc3MpOgotICAgICAgICBzZWxm
Ll9zZXJ2ZXJfcHJvY2VzcyA9IHNlcnZlcl9wcm9jZXNzCi0gICAgICAgIHNlbGYuY2xvc2VkID0g
RmFsc2UKLQotICAgIGRlZiBmaWxlbm8oc2VsZik6Ci0gICAgICAgIHJldHVybiAxCi0KLSAgICBk
ZWYgd3JpdGUoc2VsZiwgbGluZSk6Ci0gICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzLmJyb2tl
bl9waXBlcy5hcHBlbmQoc2VsZikKLSAgICAgICAgcmFpc2UgSU9FcnJvcgotCi0gICAgZGVmIHJl
YWQoc2VsZiwgc2l6ZT0wKToKLSAgICAgICAgIyBUaGlzIG1lYW5zIGVuZCBvZiBmaWxlCi0gICAg
ICAgIHJldHVybiAnJwotCi0gICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAgICBzZWxmLmNsb3Nl
ZCA9IFRydWUKLQotCi1jbGFzcyBNb2NrUHJvYyhvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBzZXJ2ZXJfcHJvY2Vzcyk6Ci0gICAgICAgIHNlbGYuc3RkaW4gPSBNb2NrRmlsZShzZXJ2
ZXJfcHJvY2VzcykKLSAgICAgICAgc2VsZi5zdGRvdXQgPSBNb2NrRmlsZShzZXJ2ZXJfcHJvY2Vz
cykKLSAgICAgICAgc2VsZi5zdGRlcnIgPSBNb2NrRmlsZShzZXJ2ZXJfcHJvY2VzcykKLSAgICAg
ICAgc2VsZi5waWQgPSAxCi0KLSAgICBkZWYgcG9sbChzZWxmKToKLSAgICAgICAgcmV0dXJuIDEK
LQotICAgIGRlZiB3YWl0KHNlbGYpOgotICAgICAgICByZXR1cm4gMAotCi0KIGNsYXNzIEZha2VT
ZXJ2ZXJQcm9jZXNzKHNlcnZlcl9wcm9jZXNzLlNlcnZlclByb2Nlc3MpOgogICAgIGRlZiBfc3Rh
cnQoc2VsZik6Ci0gICAgICAgIHNlbGYuX3Byb2MgPSBNb2NrUHJvYyhzZWxmKQotICAgICAgICBz
ZWxmLnN0ZGluID0gc2VsZi5fcHJvYy5zdGRpbgotICAgICAgICBzZWxmLnN0ZG91dCA9IHNlbGYu
X3Byb2Muc3Rkb3V0Ci0gICAgICAgIHNlbGYuc3RkZXJyID0gc2VsZi5fcHJvYy5zdGRlcnIKLSAg
ICAgICAgc2VsZi5fcGlkID0gc2VsZi5fcHJvYy5waWQKLSAgICAgICAgc2VsZi5icm9rZW5fcGlw
ZXMgPSBbXQorICAgICAgICBzZWxmLl9waXBlID0gRHVtbXlQcm9jZXNzUGlwZShzZWxmLl9wb3J0
LCBzZWxmLl9jbWQsIHNlbGYuX2Vudiwgc2VsZi5fdW5pdmVyc2FsX25ld2xpbmVzKQorICAgICAg
ICBzZWxmLl9waWQgPSBzZWxmLl9waXBlLnBpZCgpCisgICAgICAgIHNlbGYuX3BpcGUuY29ubmVj
dGVkRm9yVGVzdGluZyA9IEZhbHNlCiAKIAogY2xhc3MgVGVzdFNlcnZlclByb2Nlc3ModW5pdHRl
c3QuVGVzdENhc2UpOgpAQCAtMTM1LDkgKzEwMCw3IEBAIGNsYXNzIFRlc3RTZXJ2ZXJQcm9jZXNz
KHVuaXR0ZXN0LlRlc3RDYXMKICAgICAgICAgc2VydmVyX3Byb2Nlc3MgPSBGYWtlU2VydmVyUHJv
Y2Vzcyhwb3J0X29iaj1wb3J0X29iaiwgbmFtZT0idGVzdCIsIGNtZD1bInRlc3QiXSkKICAgICAg
ICAgc2VydmVyX3Byb2Nlc3MuX3N0YXJ0KCkKICAgICAgICAgc2VydmVyX3Byb2Nlc3Muc3RvcCgp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZXJ2ZXJfcHJvY2Vzcy5zdGRpbi5jbG9zZWQpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZXJ2ZXJfcHJvY2Vzcy5zdGRvdXQuY2xvc2VkKQotICAg
ICAgICBzZWxmLmFzc2VydFRydWUoc2VydmVyX3Byb2Nlc3Muc3RkZXJyLmNsb3NlZCkKKyAgICAg
ICAgc2VsZi5hc3NlcnRJc05vbmUoc2VydmVyX3Byb2Nlc3MuX3BpcGUpCiAKICAgICBkZWYgdGVz
dF9icm9rZW5fcGlwZShzZWxmKToKICAgICAgICAgcG9ydF9vYmogPSBUcml2aWFsTW9ja1BvcnQo
KQpAQCAtMTQ2LDEzICsxMDksMTIgQEAgY2xhc3MgVGVzdFNlcnZlclByb2Nlc3ModW5pdHRlc3Qu
VGVzdENhcwogICAgICAgICBzZXJ2ZXJfcHJvY2VzcyA9IEZha2VTZXJ2ZXJQcm9jZXNzKHBvcnRf
b2JqPXBvcnRfb2JqLCBuYW1lPSJ0ZXN0IiwgY21kPVsidGVzdCJdKQogICAgICAgICBzZXJ2ZXJf
cHJvY2Vzcy53cml0ZSgic2hvdWxkIGJyZWFrIikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNl
cnZlcl9wcm9jZXNzLmhhc19jcmFzaGVkKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25l
KHNlcnZlcl9wcm9jZXNzLnBpZCgpKQotICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZXJ2ZXJf
cHJvY2Vzcy5fcHJvYykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJ2ZXJfcHJvY2Vzcy5i
cm9rZW5fcGlwZXMsIFtzZXJ2ZXJfcHJvY2Vzcy5zdGRpbl0pCisgICAgICAgIHNlbGYuYXNzZXJ0
SXNOb25lKHNlcnZlcl9wcm9jZXNzLl9waXBlKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShz
ZXJ2ZXJfcHJvY2Vzcy5waWQoKSkKIAogICAgICAgICBwb3J0X29iai5ob3N0LnBsYXRmb3JtLm9z
X25hbWUgPSAnbWFjJwogICAgICAgICBzZXJ2ZXJfcHJvY2VzcyA9IEZha2VTZXJ2ZXJQcm9jZXNz
KHBvcnRfb2JqPXBvcnRfb2JqLCBuYW1lPSJ0ZXN0IiwgY21kPVsidGVzdCJdKQogICAgICAgICBz
ZXJ2ZXJfcHJvY2Vzcy53cml0ZSgic2hvdWxkIGJyZWFrIikKICAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKHNlcnZlcl9wcm9jZXNzLmhhc19jcmFzaGVkKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNO
b25lKHNlcnZlcl9wcm9jZXNzLl9wcm9jKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcnZl
cl9wcm9jZXNzLmJyb2tlbl9waXBlcywgW3NlcnZlcl9wcm9jZXNzLnN0ZGluXSkKKyAgICAgICAg
c2VsZi5hc3NlcnRJc05vbmUoc2VydmVyX3Byb2Nlc3MuX3BpcGUpCisgICAgICAgIHNlbGYuYXNz
ZXJ0SXNOb25lKHNlcnZlcl9wcm9jZXNzLnBpZCgpKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9zdHlsZS9jaGVja2Vycy9weXRob24ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9weXRob24ucHkJKHJldmlzaW9uIDIwOTkyNykKKysr
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvcHl0aG9uLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0xMDMsNyArMTAzLDcgQEAgY2xhc3MgUHlsaW50ZXIob2JqZWN0KToKIAogICAg
IGRlZiBydW4oc2VsZiwgYXJndik6CiAgICAgICAgIG91dHB1dCA9IF9GaWx0ZXJlZFN0cmluZ0lP
KHNlbGYuRkFMU0VfUE9TSVRJVkVTKQotICAgICAgICBsaW50LlJ1bihbJy0tcmNmaWxlJywgc2Vs
Zi5fcHlsaW50cmNdICsgYXJndiwgcmVwb3J0ZXI9UGFyc2VhYmxlVGV4dFJlcG9ydGVyKG91dHB1
dD1vdXRwdXQpLCBleGl0PUZhbHNlKQorICAgICAgICBsaW50LlJ1bihbJy0taWdub3JlZC1jbGFz
c2VzPV9zb2NrZXRvYmplY3QnLCAnLS1yY2ZpbGUnLCBzZWxmLl9weWxpbnRyY10gKyBhcmd2LCBy
ZXBvcnRlcj1QYXJzZWFibGVUZXh0UmVwb3J0ZXIob3V0cHV0PW91dHB1dCksIGV4aXQ9RmFsc2Up
CiAgICAgICAgIHJldHVybiBvdXRwdXQKIAogCkluZGV4OiBUb29scy9UZXN0UnVubmVyU2hhcmVk
L3VuaXhMb2dnaW5nUGlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0UnVubmVyU2hhcmVk
L3VuaXhMb2dnaW5nUGlwZXMuaAkobm9uZXhpc3RlbnQpCisrKyBUb29scy9UZXN0UnVubmVyU2hh
cmVkL3VuaXhMb2dnaW5nUGlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICAgICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCituYW1lc3BhY2UgV1RSIHsKKwordm9pZCBzZXR1cFVuaXhMb2dnaW5nUGlwZXMo
KTsKK3ZvaWQgdGVhcmRvd25Vbml4TG9nZ2luZ1BpcGVzKCk7CisKK30KSW5kZXg6IFRvb2xzL1Rl
c3RSdW5uZXJTaGFyZWQvdW5peExvZ2dpbmdQaXBlcy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9U
ZXN0UnVubmVyU2hhcmVkL3VuaXhMb2dnaW5nUGlwZXMubW0JKG5vbmV4aXN0ZW50KQorKysgVG9v
bHMvVGVzdFJ1bm5lclNoYXJlZC91bml4TG9nZ2luZ1BpcGVzLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJ1bml4TG9nZ2luZ1BpcGVzLmgi
CisKKyNpbXBvcnQgPG5ldGRiLmg+CisjaW1wb3J0IDxzeXMvdW4uaD4KKworbmFtZXNwYWNlIFdU
UiB7CisKK3N0YXRpYyBjb25zdCBpbnQgU1RESU5fSU5ERVggPSAwOworc3RhdGljIGNvbnN0IGlu
dCBTVERPVVRfSU5ERVggPSAxOworc3RhdGljIGNvbnN0IGludCBTVERFUlJfSU5ERVggPSAyOwor
c3RhdGljIGNvbnN0IGludCBOVU1fU09DS0VUUyA9IDM7CisgICAgCitzdGF0aWMgaW50IHNvY2tl
dHNbTlVNX1NPQ0tFVFNdOworc3RhdGljIHN0cnVjdCBzb2NrYWRkcl91biBhZGRyZXNzW05VTV9T
T0NLRVRTXTsKK3N0YXRpYyBGSUxFKiBvbGRGaWxlc1tOVU1fU09DS0VUU107CitzdGF0aWMgRklM
RSoqIGZpbGVzW05VTV9TT0NLRVRTXTsKKwordm9pZCBzZXR1cFVuaXhMb2dnaW5nUGlwZXMoKQor
eworICAgIGNvbnN0IGNoYXIqIGlkZW50aWZpZXIgPSBnZXRlbnYoIklQQ19JREVOVElGSUVSIik7
CisgICAgY29uc3QgY2hhciAqc29ja2V0UGF0aHNbM107CisgICAgc29ja2V0UGF0aHNbU1RESU5f
SU5ERVhdID0gW1tOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiL3RtcC8lc19JTiIsIGlkZW50
aWZpZXJdIFVURjhTdHJpbmddOworICAgIHNvY2tldFBhdGhzW1NURE9VVF9JTkRFWF0gPSBbW05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIvdG1wLyVzX09VVCIsIGlkZW50aWZpZXJdIFVURjhT
dHJpbmddOworICAgIHNvY2tldFBhdGhzW1NUREVSUl9JTkRFWF0gPSBbW05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6QCIvdG1wLyVzX0VSUk9SIiwgaWRlbnRpZmllcl0gVVRGOFN0cmluZ107CisK
KyAgICBmaWxlc1tTVERJTl9JTkRFWF0gPSAmc3RkaW47CisgICAgZmlsZXNbU1RET1VUX0lOREVY
XSA9ICZzdGRvdXQ7CisgICAgZmlsZXNbU1RERVJSX0lOREVYXSA9ICZzdGRlcnI7CisgICAgCisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fU09DS0VUUzsgKytpKSB7CisgICAgICAgIHNvY2tl
dHNbaV0gPSBzb2NrZXQoQUZfVU5JWCwgU09DS19TVFJFQU0sIDApOworICAgICAgICBtZW1zZXQo
KGNoYXIqKSAmYWRkcmVzc1tpXSwgMCwgc2l6ZW9mKGFkZHJlc3NbaV0pKTsKKyAgICAgICAgYWRk
cmVzc1tpXS5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKKyAgICAgICAgc3RybmNweShhZGRyZXNzW2ld
LnN1bl9wYXRoLCBzb2NrZXRQYXRoc1tpXSwgc2l6ZW9mKGFkZHJlc3NbaV0uc3VuX3BhdGgpKTsK
KyAgICAgICAgCisgICAgICAgIGlmICg6OmNvbm5lY3Qoc29ja2V0c1tpXSwgKHN0cnVjdCBzb2Nr
YWRkciopICZhZGRyZXNzW2ldLCBzaXplb2YoYWRkcmVzc1tpXSkpIDwgMCkKKyAgICAgICAgICAg
IGFib3J0KCk7CisgICAgICAgIG9sZEZpbGVzW2ldID0gKmZpbGVzW2ldOworICAgICAgICBmZmx1
c2gob2xkRmlsZXNbaV0pOworICAgICAgICBpZiAoaSA9PSBTVERJTl9JTkRFWCkKKyAgICAgICAg
ICAgICpmaWxlc1tpXSA9IGZkb3Blbihzb2NrZXRzW2ldLCAicmIiKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgKmZpbGVzW2ldID0gZmRvcGVuKHNvY2tldHNbaV0sICJ3YiIpOworICAgICAg
ICBzZXRsaW5lYnVmKCpmaWxlc1tpXSk7CisgICAgfQorICAgIGZwcmludGYoc3RkZXJyLCAiI1BJ
RDogJWRcbiIsIGdldHBpZCgpKTsKK30KKwordm9pZCB0ZWFyZG93blVuaXhMb2dnaW5nUGlwZXMo
KQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1NPQ0tFVFM7ICsraSkgeworICAgICAg
ICBmZmx1c2goKmZpbGVzW2ldKTsKKyAgICAgICAgZmNsb3NlKCpmaWxlc1tpXSk7CisgICAgICAg
IAorICAgICAgICBzaHV0ZG93bihzb2NrZXRzW2ldLCBTSFVUX1JEV1IpOworICAgICAgICA6OmNs
b3NlKHNvY2tldHNbaV0pOworICAgICAgICAqZmlsZXNbaV0gPSBvbGRGaWxlc1tpXTsKKyAgICB9
Cit9CisKK30KSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAyMDk5MjcpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsOCBAQAog
CQkyRTYzRURBMTE4OTFCMjkxMDAyQTdBRkMgLyogQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNjNFRDc4
MTg5MUFDRTkwMDJBN0FGQyAvKiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tICovOyB9Owog
CQkyRTYzRURBNjE4OTFCREMwMDAyQTdBRkMgLyogVGVzdFJ1bm5lci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0M5OTgxNzExRDNGNTFFMDAxN0JD
QTIgLyogVGVzdFJ1bm5lci5jcHAgKi87IH07CiAJCTJFNzQ5QkYyMTg5MUVCRkEwMDdGQzE3NSAv
KiBFdmVudFNlbmRlclByb3h5SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkU2M0VEN0ExODkxQUNFOTAwMkE3QUZDIC8qIEV2ZW50U2VuZGVyUHJv
eHlJT1MubW0gKi87IH07CisJCTMxQjA5Q0QwMUUwNDUzMTQwMDZGNEU0RCAvKiB1bml4TG9nZ2lu
Z1BpcGVzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzFCMDlDQ0ExRTA0NTE5NzAwNkY0RTREIC8qIHVuaXhMb2dnaW5nUGlwZXMubW0gKi87IH07CisJ
CTMxQjA5Q0QxMUUwNDUzMkEwMDZGNEU0RCAvKiB1bml4TG9nZ2luZ1BpcGVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUIwOUNDOTFFMDQ1MTk3MDA2
RjRFNEQgLyogdW5peExvZ2dpbmdQaXBlcy5oICovOyB9OwogCQk1MTA1OEFENTFENjc4ODIwMDA5
QTUzOEMgLyogbGliV2ViQ29yZVRlc3RTdXBwb3J0LmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDEyMzBFMTYxMzhDNzhCRjAwQkNDRkNBIC8q
IGxpYldlYkNvcmVUZXN0U3VwcG9ydC5keWxpYiAqLzsgfTsKIAkJNTEwNThBRDYxRDY3ODgyNTAw
OUE1MzhDIC8qIFdlYktpdC5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjUxNjlDQTE0NDUyMjJEMDBFMEE5RDcgLyogV2ViS2l0LmZy
YW1ld29yayAqLzsgfTsKIAkJNTY0MUUyRDAxNDMzNUU5NTAwODMwN0U1IC8qIEpTVGV4dElucHV0
Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1NjQxRTJDRTE0MzM1RTk1MDA4MzA3RTUgLyogSlNUZXh0SW5wdXRDb250cm9sbGVyLmNw
cCAqLzsgfTsKQEAgLTI1Niw2ICsyNTgsOCBAQAogCQkyRUU1MkQxNjE4OTBBOUZCMDAxMEVEMjEg
LyogbWFpbklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IG1h
aW5JT1MubW07IHBhdGggPSAuLi9pb3MvbWFpbklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMzExMEJFMEYxNUJBMDExNDAwRDIxNkFDIC8qIFdlYk5vdGlmaWNhdGlvblByb3Zp
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxNjRDOEVGMTVEMUFEQTEwMEVGMUZFMCAvKiBXZWJOb3Rp
ZmljYXRpb25Qcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXZWJOb3RpZmljYXRpb25Qcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMxQjA5Q0M5MUUwNDUxOTcwMDZGNEU0RCAvKiB1bml4TG9nZ2luZ1BpcGVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IHVuaXhMb2dnaW5nUGlwZXMuaDsgcGF0aCA9IC4u
L1Rlc3RSdW5uZXJTaGFyZWQvdW5peExvZ2dpbmdQaXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkzMUIwOUNDQTFFMDQ1MTk3MDA2RjRFNEQgLyogdW5peExvZ2dpbmdQaXBlcy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IHVuaXhMb2dnaW5nUGlw
ZXMubW07IHBhdGggPSAuLi9UZXN0UnVubmVyU2hhcmVkL3VuaXhMb2dnaW5nUGlwZXMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3OEQ0NDIyMTMzNDZEMDAwMDZBNzc3QiAvKiBj
b25maWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY29uZmlnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQxMjMwRTE2MTM4Qzc4QkYwMEJDQ0ZDQSAvKiBsaWJXZWJDb3JlVGVzdFN1cHBvcnQu
ZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAi
Y29tcGlsZWQubWFjaC1vLmR5bGliIjsgcGF0aCA9IGxpYldlYkNvcmVUZXN0U3VwcG9ydC5keWxp
Yjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNDE4MTczMUIxMzhBRDM5
RDAwNTdBQUE0IC8qIFdlYkNvcmVUZXN0U3VwcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBXZWJDb3JlVGVzdFN1cHBvcnQuaDsgcGF0aCA9IFdlYkNvcmVUZXN0U3VwcG9y
dC9XZWJDb3JlVGVzdFN1cHBvcnQuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKQEAgLTQ1Niw2ICs0NjAsOCBAQAogCQkwRjE4RTcxQTFENkJDNEJDMDAyN0U1NDcgLyogVGVz
dFJ1bm5lclNoYXJlZCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJMzFCMDlDQzkxRTA0NTE5NzAwNkY0RTREIC8qIHVuaXhMb2dnaW5nUGlwZXMuaCAqLywK
KwkJCQkzMUIwOUNDQTFFMDQ1MTk3MDA2RjRFNEQgLyogdW5peExvZ2dpbmdQaXBlcy5tbSAqLywK
IAkJCQkwRjE4RTcxQjFENkJDNEU2MDAyN0U1NDcgLyogQmluZGluZ3MgKi8sCiAJCQkJMEY3M0I1
NDcxQkE3ODJGRTAwNEIzRUY0IC8qIFVJU2NyaXB0Q29udGV4dCAqLywKIAkJCSk7CkBAIC03Nzcs
NiArNzgzLDcgQEAKIAkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rp
b25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTMxQjA5Q0QxMUUwNDUzMkEw
MDZGNEU0RCAvKiB1bml4TG9nZ2luZ1BpcGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjczQjU1
MjFCQTc4OTY4MDA0QjNFRjQgLyogSlNVSVNjcmlwdENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpAQCAt
OTg0LDYgKzk5MSw3IEBACiAJCQkJMEY3M0I1NTExQkE3ODk2ODAwNEIzRUY0IC8qIEpTVUlTY3Jp
cHRDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMThFNzE4MUQ2QkM0NTYwMDI3
RTU0NyAvKiBKU1dyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE4NTEwM0MxQjlBRTBG
RTAwNzQ0QUVCIC8qIE9wdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzFCMDlDRDAxRTA0
NTMxNDAwNkY0RTREIC8qIHVuaXhMb2dnaW5nUGlwZXMubW0gaW4gU291cmNlcyAqLywKIAkJCQlB
MTg1MTA0MDFCOUFFMTMxMDA3NDRBRUIgLyogUGl4ZWxEdW1wU3VwcG9ydC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBMTg1MTA0MTFCOUFFMTM4MDA3NDRBRUIgLyogVGVzdENvbnRyb2xsZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTE4NTEwM0IxQjlBRTBFMjAwNzQ0QUVCIC8qIFRlc3RDb250
cm9sbGVyQ29jb2EubW0gaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tCShyZXZpc2lvbiAyMDk5MjcpCisrKyBU
b29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMjYsMTEgKzI2LDEzIEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIlRl
c3RDb250cm9sbGVyLmgiCiAKKwogI2ltcG9ydCAiUGxhdGZvcm1XZWJWaWV3LmgiCiAjaW1wb3J0
ICJUZXN0SW52b2NhdGlvbi5oIgogI2ltcG9ydCAiVGVzdFJ1bm5lcldLV2ViVmlldy5oIgogI2lt
cG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxVSUtpdC9VSUtpdC5oPgor
I2ltcG9ydCAidW5peExvZ2dpbmdQaXBlcy5oIgogI2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5j
ZXNSZWZQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9XS1N0cmluZ0NGLmg+CkBAIC00NywyMSArNDksMTIgQEAgdm9pZCBU
ZXN0Q29udHJvbGxlcjo6bm90aWZ5RG9uZSgpCiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRm
b3JtSW5pdGlhbGl6ZSgpCiB7Ci0gICAgY29uc3QgY2hhciogaWRlbnRpZmllciA9IGdldGVudigi
SVBDX0lERU5USUZJRVIiKTsKLSAgICBjb25zdCBjaGFyICpzdGRpblBhdGggPSBbW05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCIvdG1wLyVzX0lOIiwgaWRlbnRpZmllcl0gVVRGOFN0cmluZ107
Ci0gICAgY29uc3QgY2hhciAqc3Rkb3V0UGF0aCA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAIi90bXAvJXNfT1VUIiwgaWRlbnRpZmllcl0gVVRGOFN0cmluZ107Ci0gICAgY29uc3QgY2hh
ciAqc3RkZXJyUGF0aCA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIi90bXAvJXNfRVJS
T1IiLCBpZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsKLQotICAgIGludCBpbmZkID0gb3BlbihzdGRp
blBhdGgsIE9fUkRXUik7Ci0gICAgZHVwMihpbmZkLCBTVERJTl9GSUxFTk8pOwotICAgIGludCBv
dXRmZCA9IG9wZW4oc3Rkb3V0UGF0aCwgT19SRFdSKTsKLSAgICBkdXAyKG91dGZkLCBTVERPVVRf
RklMRU5PKTsKLSAgICBpbnQgZXJyZmQgPSBvcGVuKHN0ZGVyclBhdGgsIE9fUkRXUiB8IE9fTk9O
QkxPQ0spOwotICAgIGR1cDIoZXJyZmQsIFNUREVSUl9GSUxFTk8pOworICAgIHNldHVwVW5peExv
Z2dpbmdQaXBlcygpOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybURlc3Ryb3ko
KQogeworICAgIHRlYXJkb3duVW5peExvZ2dpbmdQaXBlcygpOwogfQogCiB2b2lkIFRlc3RDb250
cm9sbGVyOjppbml0aWFsaXplSW5qZWN0ZWRCdW5kbGVQYXRoKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297341</attachid>
            <date>2016-12-16 12:20:54 -0800</date>
            <delta_ts>2017-01-05 10:53:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165927-20161216121959.patch</filename>
            <type>text/plain</type>
            <size>99898</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIwOTkyNykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEzMyBAQAorMjAxNi0xMi0xNSAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5j
b20+CisKKyAgICAgICAgUmVtb3ZpbmcgTGF5b3V0VGVzdFJlbGF5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU5MjcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0R1bXBSZW5k
ZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZGVkIHVuaXhMb2dnaW5nUGlwZXMu
aCBhbmQgLm1tIHRvIER1bXBSZW5kZXJUcmVlLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21h
Yy9EdW1wUmVuZGVyVHJlZS5tbTogQWRkZWQgY2FsbCB0byBzZXR1cFVuaXhMb2dnaW5nUGlwZXMo
KSBhbmQgdGVhcmRvd25Vbml4TG9nZ2luZ1BpcGVzKCkgZm9yIGlPUy4KKyAgICAgICAgKGR1bXBS
ZW5kZXJUcmVlKTogCisgICAgICAgICogTGF5b3V0VGVzdFJlbGF5OiBSZW1vdmVkLgorICAgICAg
ICAqIE1ha2VmaWxlOgorICAgICAgICAqIFNjcmlwdHMvYnVpbGQtbGF5b3V0dGVzdHJlbGF5OiBS
ZW1vdmVkLgorICAgICAgICAqIFNjcmlwdHMvYnVpbGQtd2Via2l0OiBSZW1vdmVkIHJlZmVyZW5j
ZSB0byBMYXlvdXRUZXN0UmVsYXkuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24v
aXBjX3BpcGUucHk6IEFkZGVkLgorICAgICAgICAoVW5peFBpcGVTZXJ2ZXIpOiBBIHNlcnZlci1z
aWRlIFVuaXggcGlwZSBhYnN0cmFjdGlvbiB1c2VkIHRvIHNlbmQgZGF0YSBvdmVyIGEgQUZfVU5J
WCBzdHJlYW1pbmcgc29ja2V0LgorICAgICAgICAoQWJzdHJhY3RQaXBlKTogQWJzdHJhY3Rpb24g
Zm9yIHJlYWRpbmcgZnJvbS93cml0aW5nIHRvIHN0ZGluLCBzdGRvdXQgYW5kIHN0ZGVyci4KKyAg
ICAgICAgKEFic3RyYWN0UGlwZS5jbGVhbik6IENsZWFycyB0aGUgc3Rkb3V0IGFuZCBzdGRlcnIg
c3RyZWFtcyB0byBwcmVzZXJ2ZSBtZW1vcnkuCisgICAgICAgIChBYnN0cmFjdFBpcGUuX3BhcnNl
TWVzc2FnZSk6IEV4cGVjdGVkIHRvIGJlIG92ZXJyaWRkZW4gYnkgY2hpbGQgY2xhc3Nlcy4gIEFk
ZHMgZGF0YSB0byBzdGRvdXQgYW5kIHN0ZGVyciBzdHJlYW1zLgorICAgICAgICAoQWJzdHJhY3RQ
aXBlLnJlYWRMaW5lKTogUmVhZCB0aGUgbmV4dCBsaW5lLCByZWFkIHN0ZGVyciBiZWZvcmUgc3Rk
b3V0LgorICAgICAgICAoQWJzdHJhY3RQaXBlLnN0ZG91dFJlYWQpOiBSZWFkIGEgbGluZSBmcm9t
IHN0ZG91dCwgY2FsbHMgX3BhcnNlTWVzc2FnZS4KKyAgICAgICAgKEFic3RyYWN0UGlwZS5zdGRl
cnJSZWFkKTogUmVhZCBhIGxpbmUgZnJvbSBzdGRlcnIsIGNhbGxzIF9wYXJzZU1lc3NhZ2UuCisg
ICAgICAgIChBYnN0cmFjdFBpcGUucmVhZEJ1ZmZlclN0ZG91dCk6IFJlYWQgZXZlcnl0aGluZyBp
biB0aGUgc3Rkb3V0IGJ1ZmZlci4KKyAgICAgICAgKEFic3RyYWN0UGlwZS5yZWFkQnVmZmVyU3Rk
ZXJyKTogUmVhZCBldmVyeXRoaW5nIGluIHRoZSBzdGRlcnIgYnVmZmVyLgorICAgICAgICAoQWJz
dHJhY3RQaXBlLnJlYWRCbG9ja1N0ZG91dCk6IFJlYWQgYSBibG9jayBvZiBzaXplIGZyb20gc3Rk
b3V0LCBjYWxscyBfcGFyc2VNZXNzYWdlLgorICAgICAgICAoQWJzdHJhY3RQaXBlLnJlYWRCbG9j
a1N0ZGVycik6IFJlYWQgYSBibG9jayBvZiBzaXplIGZyb20gc3RkZXJyLCBjYWxscyBfcGFyc2VN
ZXNzYWdlLgorICAgICAgICAoVW5peFBpcGUpOiBJbmhlcml0cyBmcm9tIEFic3RyYWN0UGlwZSwg
dXNlcyB0aHJlZSBVbml4IHBpcGVzIGFzIHN0ZGluLCBzdGRvdXQgYW5kIHN0ZGVyci4KKyAgICAg
ICAgKFVuaXhQaXBlLl9faW5pdF9fKTogT3BlbnMgYWxsIDMgVW5peCBwaXBlcyBhbmQgYmVnaW5z
IGxpc3RlbmluZyBmb3IgY29ubmVjdGlvbnMuCisgICAgICAgIChVbml4UGlwZS5jb25uZWN0KTog
V2FpdCBmb3IgY29ubmVjdGlvbnMgb24gYWxsIDMgVW5peCBwaXBlcywgcmV0dXJuIGNvbm5lY3Rp
b24gc3RhdHVzLgorICAgICAgICAoVW5peFBpcGUuY2xvc2UpOiBEaXNjb25uZWN0IGFsbCAzIFVu
aXggcGlwZXMuCisgICAgICAgIChVbml4UGlwZS5zZW5kKTogU2VuZCBtZXNzYWdlIHRocm91Z2gg
c3RkaW4gcGlwZS4KKyAgICAgICAgKFVuaXhQaXBlLl9wYXJzZU1lc3NhZ2UpOiBBdHRlbXB0IHRv
IHJlYWQgZnJvbSBib3RoIHN0ZG91dCBhbmQgc3RkZXJyIFVuaXggcGlwZXMuCisgICAgICAgIChV
bml4UGlwZS5oYW5kbGVfaW50ZXJydXB0KTogTmVlZGVkIGR1cmluZyBjcmFzaGVzLgorICAgICAg
ICAoUHJvY2Vzc1BpcGUpOiAKKyAgICAgICAgKFByb2Nlc3NQaXBlLl9faW5pdF9fKToKKyAgICAg
ICAgKFByb2Nlc3NQaXBlLnBpZCk6CisgICAgICAgIChQcm9jZXNzUGlwZS5pc0Nvbm5lY3RlZCk6
CisgICAgICAgIChQcm9jZXNzUGlwZS5oYW5kbGVfaW50ZXJydXB0KToKKyAgICAgICAgKFByb2Nl
c3NQaXBlLmNsb3NlKToKKyAgICAgICAgKFByb2Nlc3NQaXBlLnNlbmQpOgorICAgICAgICAoUHJv
Y2Vzc1BpcGUuX3VuaXhzdGRCbG9jayk6CisgICAgICAgIChQcm9jZXNzUGlwZS5fdW5peGVyckJs
b2NrKToKKyAgICAgICAgKFByb2Nlc3NQaXBlLl93aW4zMk5vbkJsb2NraW5nUmVhZCk6CisgICAg
ICAgIChQcm9jZXNzUGlwZS5fd2luMzJzdGRCbG9jayk6CisgICAgICAgIChQcm9jZXNzUGlwZS5f
d2luMzJlcnJCbG9jayk6CisgICAgICAgIChQcm9jZXNzUGlwZS5fcGFyc2VNZXNzYWdlKToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9pcGNfcGlwZV90ZXN0Y2FzZS5weTogQWRk
ZWQuCisgICAgICAgIChEdW1teVByb2Nlc3NQaXBlKTogUHJvY2VzcyBwaXBlIHVzZWQgZm9yIHRl
c3RpbmcuCisgICAgICAgIChVbml4UGlwZUNsaWVudCk6IFVuaXggcGlwZSBjbGllbnQgdXNlZCB0
byB0ZXN0IFVuaXhQaXBlU2VydmVyIGFuZCBVbml4UGlwZSBjbGFzc2VzLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvY29tbW9uL2lwY19waXBlX3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAg
ICAgKFVuaXhQaXBlQ2xpZW50VGVzdGluZ1RocmVhZCk6IEZ1bmN0aW9uIHVzZWQgZm9yIHRlc3Rp
bmcgY2xpZW50L3NlcnZlciBhcmNoaXRlY3R1cmVzLgorICAgICAgICAoaXBjUGlwZVRlc3QpOiBV
bml0IHRlc3RzIGZvciBjbGFzc2VzIGluIGlwY19waXBlLnB5LgorICAgICAgICAoaXBjUGlwZVRl
c3QudGVzdF9hYnN0cmFjdHBpcGVfc3Rkb3V0KTogVGVzdCBzdGRvdXQgc3RyZWFtIGluIHRoZSBh
YnN0cmFjdCBwaXBlLgorICAgICAgICAoaXBjUGlwZVRlc3QudGVzdF9hYnN0cmFjdHBpcGVfc3Rk
ZXJyKTogVGVzdCBzdGRlcnIgc3RyZWFtIGluIHRoZSBhYnN0cmFjdCBwaXBlLgorICAgICAgICAo
aXBjUGlwZVRlc3QudGVzdF9hYnN0cmFjdHBpcGVfZHVlbF9zdHJlYW1zKTogRW5zdXJlIHN0ZG91
dCBhbmQgc3RkZXJyIGRvIG5vdCBtaW5nbGUuCisgICAgICAgIChpcGNQaXBlVGVzdC50ZXN0X2Fi
c3RyYWN0cGlwZV9zdGRvdXRibG9jayk6IFRlc3QgcmVhZGluZyBhIGRhdGEgYmxvY2sgZnJvbSBz
dGRvdXQuCisgICAgICAgIChpcGNQaXBlVGVzdC50ZXN0X2Fic3RyYWN0cGlwZV9zdGRlcnJibG9j
ayk6IFRlc3QgcmVhZGluZyBhIGRhdGEgYmxvY2sgZnJvbSBzdGRlcnIuCisgICAgICAgIChpcGNQ
aXBlVGVzdC50ZXN0X3VuaXhQaXBlU2VydmVyKTogVGVzdCB0aGUgVW5peFBpcGVTZXJ2ZXIgd2l0
aCBhIFVuaXhQaXBlQ2xpZW50LgorICAgICAgICAoaXBjUGlwZVRlc3QudGVzdF91bml4UGlwZSk6
IFRlc3QgYWxsIHRocmVlIHN0cmVhbXMgb2YgdGhlIFVuaXhQaXBlIGNsYXNzLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5OgorICAgICAgICAoUG9ydC50by5kZXZpY2VE
ZWZpbmVkKTogRnVuY3Rpb24gdG8gYmUgb3ZlcnJpZGRlbiBieSBpT1MgY2xhc3Nlcy4KKyAgICAg
ICAgKFBvcnQudG8ucnVuT25EZXZpY2UpOiBGdW5jdGlvbiB0byBiZSBvdmVycmlkZGVuIGJ5IGlP
UyBjbGFzc2VzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlX3VuaXR0ZXN0
LnB5OgorICAgICAgICAodGVzdF9kZXZpY2UpOiBUZXN0IHRoYXQsIGluIHRoZSBnZW5lcmFsIGNh
c2UsIGRldmljZXMgYXJlIHVuZGVmaW5lZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvZGFyd2luLnB5OgorICAgICAgICAoRGFyd2luUG9ydC5leHRyYWN0QnVuZGxlSUQpOiBTZWFy
Y2ggYW4gYXBwIGJ1bmRsZSBmb3IgYSBwbGlzdCBhbmQgYnVuZGxlIElELgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW5fdGVzdGNhc2UucHk6CisgICAgICAgIChEYXJ3aW5U
ZXN0LnRlc3RfcGxpc3QpOiBUZXN0IHBsaXN0IGFjY2VzcyBieSBjcmVhdGluZyBhIHRlbXBvcmFy
eSBwbGlzdCB0byByZWFkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIu
cHk6CisgICAgICAgIChEcml2ZXIuX19pbml0X18pOgorICAgICAgICAoRHJpdmVyLnJ1bl90ZXN0
KTogQ2xlYXIgc3RyZWFtcyB3aXRoIGNsZWFuIGJlZm9yZSBydW5uaW5nIGEgdGVzdC4KKyAgICAg
ICAgKERldmljZURyaXZlcik6IENoYW5nZWQgZnJvbSBJT1NTaW11bGF0b3JEcml2ZXIuCisgICAg
ICAgIChEZXZpY2VEcml2ZXIuY21kX2xpbmUpOiBQYXNzICdydW4tb24tZGV2aWNl4oCZLCB3aGlj
aCBpcyByZWNvZ25pemVkIGJ5IHRoZSBzZXJ2ZXJfcHJvY2VzcyBjbGFzcy4KKyAgICAgICAgKERl
dmljZURyaXZlci5fc2V0dXBfZW52aXJvbl9mb3JfZHJpdmVyKTogQ2hhbmdlZCBmcm9tIElPU1Np
bXVsYXRvckRyaXZlci4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5Ogor
ICAgICAgICAoSU9TQmFzZSk6IEJhc2UgY2xhc3MgZm9yIElPU1BvcnQgYW5kIElPU1NpbXVsYXRv
ciBwb3J0LgorICAgICAgICAoSU9TQmFzZS5kcml2ZXJfbmFtZSk6IEFjY2VzcyBjdXJyZW50IGFw
cCBuYW1lLgorICAgICAgICAoSU9TQmFzZS5fZ2V0X2NyYXNoX2xvZyk6IE1vdmVkIGZyb20gSU9T
U2ltdWxhdG9yUG9ydC4KKyAgICAgICAgKElPU0Jhc2UuX3Rlc3RpbmdfZGV2aWNlKTogQWNjZXNz
IGRldmljZXMgYnkgaW5kZXguCisgICAgICAgIChJT1NCYXNlLmRldmljZV9pZF9mb3Jfd29ya2Vy
X251bWJlcik6IE1vdmVkIGZyb20gSU9TU2ltdWxhdG9yUG9ydC4KKyAgICAgICAgKElPU0Jhc2Uu
X2RyaXZlcl9jbGFzcyk6IE1vdmVkIGZyb20gSU9TU2ltdWxhdG9yUG9ydC4KKyAgICAgICAgKElP
U0Jhc2UuZGV2aWNlRGVmaW5lZCk6IFRydWUgZm9yIGFsbCBJT1MgY2xhc3Nlcy4KKyAgICAgICAg
KElPU0Jhc2UuX2RldmljZVBpbmcpOiBGdW5jdGlvbiB0byB0ZXN0IGlmIGEgZGV2aWNlIGlzIG9u
LgorICAgICAgICAoSU9TQmFzZS5fZGV2aWNlSW5zdGFsbCk6IEluc3RhbGwgYXBwIHRvIGRldmlj
ZS4KKyAgICAgICAgKElPU0Jhc2UuX2RldmljZVJ1bik6IFJ1biBhcHAgb24gZGV2aWNlLgorICAg
ICAgICAoSU9TQmFzZS5fZGV2aWNlS2lsbCk6IFNodXRkb3duIGFwcCBvbiBkZXZpY2UuCisgICAg
ICAgIChJT1NCYXNlLnJ1bk9uRGV2aWNlKTogUnVuIGNvbW1hbmQgb24gZGV2aWNlLgorICAgICAg
ICAoSU9TUG9ydCk6IENsYXNzIGRlc2lnbmVkIGZvciBydW5uaW5nIG9uIGRldmljZS4KKyAgICAg
ICAgKElPU1NpbXVsYXRvclBvcnQpOgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fZGV2aWNl
UGluZyk6IENoZWNrIGlmIHRoZSB0YXJnZXRlZCBzaW11bGF0b3IgaXMgYm9vdGVkLgorICAgICAg
ICAoSU9TU2ltdWxhdG9yUG9ydC5fZGV2aWNlSW5zdGFsbCk6IEluc3RhbGwgYXBwIHRvIHNpbXVs
YXRvci4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX2RldmljZVJ1bik6IFJ1biBpbnN0YWxs
ZWQgYXBwIG9uIHRhcmdldGVkIHNpbXVsYXRvci4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQu
X2RldmljZUtpbGwpOiBTaHV0ZG93biBhcHAgb24gdGFyZ2V0ZWQgc2ltdWxhdG9yLgorICAgICAg
ICAoSU9TU2ltdWxhdG9yUG9ydC5yZWxheV9wYXRoKTogUmVtb3ZlZCBMYXlvdXRUZXN0UmVsYXku
CisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9jaGVja19yZWxheSk6IFJlbW92ZWQgTGF5b3V0
VGVzdFJlbGF5LgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fZ2V0X2NyYXNoX2xvZyk6IE1v
dmVkIHRvIElPU0Jhc2UuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9idWlsZF9yZWxheSk6
IFJlbW92ZWQgTGF5b3V0VGVzdFJlbGF5LgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fZHJp
dmVyX2NsYXNzKTogTW92ZWQgdG8gSU9TQmFzZS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3BvcnQvaW9zX3VuaXR0ZXN0LnB5OgorICAgICAgICAoSU9TVGVzdCk6IFRlc3RzIGZ1bmN0aW9u
YWxpdHkgdW5pcXVlIHRvIHRoZSBJT1NQb3J0IGNsYXNzLgorICAgICAgICAoSU9TU2ltdWxhdG9y
VGVzdCk6IFRlc3RzIGZ1bmN0aW9uYWxpdHkgdW5pcXVlIHRvIHRoZSBJT1NTaW11bGF0b3IgY2xh
c3MuCisgICAgICAgIChpb3NUZXN0KTogTW92ZWQgdG8gZWl0aGVyIElPU1NpbXVsYXRvclRlc3Qg
b3IgSU9TQmFzZVRlc3QuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc2Jhc2Vf
dGVzdGNhc2UucHk6IEFkZGVkLgorICAgICAgICAoSU9TQmFzZVRlc3QpOiBUZXN0cyBmdW5jdGlv
bmFsaXR5IHNoYXJlZCBiZXR3ZWVuIElPU1BvcnQgYW5kIElPU1NpbXVsYXRvci4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3MucHk6IE5vdGUgdGhhdCBzb21l
IHByZXZpb3VzIGZ1bmN0aW9uYWxpdHkgb2Ygc2VydmVyX3Byb2Nlc3MgaGFzIGJlZW4gbW92ZWQg
dG8gUHJvY2Vzc1BpcGUuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLl9faW5pdF9fKTogVXNlIF9w
aXBlIGluc3RlYWQgb2YgcHJvYy4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MuY2xlYW4pOiBDbGVh
biBwaXBlIChyZXNldHMgc3RyZWFtIGJ1ZmZlcnMuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLl9y
ZXNldCk6IERlc3Ryb3kgcGlwZSwgbm8gcGlkLgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5fc3Rh
cnQpOiBVc2UgVW5peFBpcGUgZm9yIHJ1bm5pbmcgb24tZGV2aWNlIGFuZCBQcm9jZXNzUGlwZSBv
dGhlcndpc2UuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLnBvbGwpOiBVc2UgaXNDb25uZWN0ZWQg
ZnVuY3Rpb24gb2YgcGlwZXMuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLndyaXRlKTogV3JpdGUg
ZGF0YSB0byBwaXBlLgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5fcG9wX3N0ZG91dF9saW5lX2lm
X3JlYWR5KTogUmVhZCBzdGRvdXQgbGluZSBmcm9tIHBpcGUuCisgICAgICAgIChTZXJ2ZXJQcm9j
ZXNzLl9wb3Bfc3RkZXJyX2xpbmVfaWZfcmVhZHkpOiBSZWFkIHN0ZGVyciBsaW5lIGZyb20gcGlw
ZS4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MucG9wX2FsbF9idWZmZXJlZF9zdGRlcnIpOiBSZWFk
IGFsbCBzdGRlcnIgbGluZXMgZnJvbSBwaXBlLgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5yZWFk
X2VpdGhlcl9zdGRvdXRfb3Jfc3RkZXJyX2xpbmUpOiBSZWFkIGEgbGluZSBmcm9tIGVpdGhlciBz
dHJlYW0gZnJvbSB0aGUgcGlwZS4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MucmVhZF9zdGRvdXQp
OiBSZWFkIGZyb20gc3Rkb3V0IG9mIHBpcGUuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLnN0b3Ap
OiBDbGVhciBidWZmZXJzIGFuZCBzaHV0ZG93biBwaXBlLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzc191bml0dGVzdC5weTogVXNlIHBpcGVzIGluc3RlYWQg
b2YgTW9ja1Byb2MuCisgICAgICAgIChNb2NrRmlsZSk6IFJlcGxhY2VkIE1vY2tGaWxlIHdpdGgg
RHVtbXlQcm9jZXNzUGlwZS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNr
ZXJzL3B5dGhvbi5weToKKyAgICAgICAgKFB5bGludGVyLnJ1bik6IEZpeCBmb3Iga25vd24gaXNz
dWUgd2l0aCBQeWxpbnRlciBhbmQgc29ja2V0cy4KKyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVk
L3VuaXhMb2dnaW5nUGlwZXMuaDogQWRkZWQuCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC91
bml4TG9nZ2luZ1BpcGVzLm1tOiBBZGRlZC4KKyAgICAgICAgKFdUUjo6c2V0dXBVbml4TG9nZ2lu
Z1BpcGVzKTogU2V0cyB1cCBVbml4UGlwZXMgZm9yIElPU1NpbXVsYXRvci4KKyAgICAgICAgKFdU
Ujo6dGVhcmRvd25Vbml4TG9nZ2luZ1BpcGVzKTogVGVhcnMtZG93biB1cCBVbml4UGlwZXMgZm9y
IElPU1NpbXVsYXRvci4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5u
ZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6
OnBsYXRmb3JtSW5pdGlhbGl6ZSk6IEFkZGVkIGNhbGwgdG8gc2V0dXBVbml4TG9nZ2luZ1BpcGVz
KCkgZm9yIGlPUy4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtRGVzdHJv
eSk6IEFkZGVkIGNhbGwgdG8gdGVhcmRvd25Vbml4TG9nZ2luZ1BpcGVzKCkgZm9yIGlPUy4KKwog
MjAxNi0xMi0xNSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAg
ICBBcmd1bWVudHMgY2FsbGVkIGluIHdyb25nIG9yZGVyCkluZGV4OiBUb29scy9NYWtlZmlsZQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9NYWtlZmlsZQkocmV2aXNpb24gMjA5OTI3KQorKysgVG9vbHMv
TWFrZWZpbGUJKHdvcmtpbmcgY29weSkKQEAgLTcsOSArNyw2IEBAIGlmbmVxICgsJChTREtST09U
KSkKIAlpZm5lcSAoLCQoZmluZHN0cmluZyBpcGhvbmUsJChTREtST09UKSkpCiAJCU1PRFVMRVMg
Kz0gTW9iaWxlTWluaUJyb3dzZXIKIAllbmRpZgotCWlmZXEgKCwkKERPX05PVF9CVUlMRF9MQVlP
VVRfVEVTVF9SRUxBWSkpCi0JCU1PRFVMRVMgKz0gTGF5b3V0VGVzdFJlbGF5Ci0JZW5kaWYKIGVu
ZGlmCiAKIGFsbDoKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA5
OTI3KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksNyBAQAogCQkyQ0U4OEZB
MjE3MTI0RDhDMDA3MzRGQzAgLyogSmF2YVNjcmlwdFRocmVhZGluZy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQ0U4OEZBMTE3MTI0Q0VFMDA3MzRG
QzAgLyogSmF2YVNjcmlwdFRocmVhZGluZy5jcHAgKi87IH07CiAJCTJENDAzRjFCMTUwODcyMDkw
MDUzNThEMiAvKiBMYXlvdXRUZXN0SGVscGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRDQwM0VBMjE1MDg3MTQyMDA1MzU4RDIgLyogTGF5b3V0VGVz
dEhlbHBlci5tICovOyB9OwogCQkzMTExN0IzRDE1RDlBNTZBMDAxNjNCQzggLyogTW9ja1dlYk5v
dGlmaWNhdGlvblByb3ZpZGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzExMTdCM0IxNUQ5QTU2QTAwMTYzQkM4IC8qIE1vY2tXZWJOb3RpZmljYXRp
b25Qcm92aWRlci5tbSAqLzsgfTsKKwkJMzFCMDlDRDUxRTA0NTQwNzAwNkY0RTREIC8qIHVuaXhM
b2dnaW5nUGlwZXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMUIwOUNENDFFMDQ1NDA0MDA2RjRFNEQgLyogdW5peExvZ2dpbmdQaXBlcy5tbSAqLzsg
fTsKIAkJNDQwNTkwNzExMjY4NDUzODAwQ0ZENDhEIC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9ydE1h
Yy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MDU5
MDcwMTI2ODQ1MzgwMENGRDQ4RCAvKiBXZWJBcmNoaXZlRHVtcFN1cHBvcnRNYWMubW0gKi87IH07
CiAJCTQ0Mzc3MzBFMTI1Q0JDMzYwMEFBRTAyQyAvKiBXZWJBcmNoaXZlRHVtcFN1cHBvcnQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDRBOTk3ODMw
RkNERTg2NDAwNTgwRjEwIC8qIFdlYkFyY2hpdmVEdW1wU3VwcG9ydC5jcHAgKi87IH07CiAJCTQ0
NjRDQUJFMUMyMEEwOEIwMEU1QkI1NSAvKiBEdW1wUmVuZGVyVHJlZUFwcE1haW4ubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDY0Q0FCRDFDMjBBMDcw
MDBFNUJCNTUgLyogRHVtcFJlbmRlclRyZWVBcHBNYWluLm1tICovOyB9OwpAQCAtMjkzLDYgKzI5
NCw4IEBACiAJCTJENDAzRjE5MTUwODcxRjkwMDUzNThEMiAvKiBMYXlvdXRUZXN0SGVscGVyICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQu
bWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBMYXlvdXRUZXN0
SGVscGVyOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQkzMTExN0IzQTE1
RDlBNTZBMDAxNjNCQzggLyogTW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE1vY2tXZWJOb3RpZmljYXRpb25Qcm92aWRlci5oOyBw
YXRoID0gbWFjL01vY2tXZWJOb3RpZmljYXRpb25Qcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkzMTExN0IzQjE1RDlBNTZBMDAxNjNCQzggLyogTW9ja1dlYk5vdGlmaWNh
dGlvblByb3ZpZGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0g
TW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLm1tOyBwYXRoID0gbWFjL01vY2tXZWJOb3RpZmlj
YXRpb25Qcm92aWRlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzFCMDlDRDMx
RTA0NTQwNDAwNkY0RTREIC8qIHVuaXhMb2dnaW5nUGlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gdW5peExvZ2dpbmdQaXBlcy5oOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNo
YXJlZC91bml4TG9nZ2luZ1BpcGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMx
QjA5Q0Q0MUUwNDU0MDQwMDZGNEU0RCAvKiB1bml4TG9nZ2luZ1BpcGVzLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gdW5peExvZ2dpbmdQaXBlcy5tbTsgcGF0aCA9
IC4uL1Rlc3RSdW5uZXJTaGFyZWQvdW5peExvZ2dpbmdQaXBlcy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMzJBNzBBQUIwMzcwNUUxRjAwQzkxNzgzIC8qIER1bXBSZW5kZXJUcmVl
UHJlZml4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IER1bXBSZW5kZXJUcmVl
UHJlZml4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NUYwOTcxMERBQzNDQjYw
MEM4QjRFNSAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyMTAwLnR0ZiAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IG5hbWUgPSBXZWJLaXRXZWlnaHRX
YXRjaGVyMTAwLnR0ZjsgcGF0aCA9IGZvbnRzL1dlYktpdFdlaWdodFdhdGNoZXIxMDAudHRmOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzVGMDk3MjBEQUMzQ0I2MDBDOEI0RTUgLyog
V2ViS2l0V2VpZ2h0V2F0Y2hlcjIwMC50dGYgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBmaWxlOyBuYW1lID0gV2ViS2l0V2VpZ2h0V2F0Y2hlcjIwMC50
dGY7IHBhdGggPSBmb250cy9XZWJLaXRXZWlnaHRXYXRjaGVyMjAwLnR0Zjsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTQ3Myw2ICs0NzYsNyBAQAogCQkwOEZCNzc5NEZFODQxNTVEQzAy
QUFDMDcgLyogRHVtcFJlbmRlclRyZWUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCTMxQjA5Q0QyMUUwNDUzRTkwMDZGNEU0RCAvKiBUZXN0UnVubmVyU2hh
cmVkICovLAogCQkJCTBGMThFNkYxMUQ2QjlDNjQwMDI3RTU0NyAvKiBEZXJpdmVkU291cmNlcy5t
YWtlICovLAogCQkJCTBGMThFNkU3MUQ2QjlCRjUwMDI3RTU0NyAvKiBVSVNjcmlwdENvbnRleHQg
Ki8sCiAJCQkJQTExNThENkExODkyN0NFMTAwODhDMTdCIC8qIGlvcyAqLywKQEAgLTcwMCw2ICs3
MDQsMTUgQEAKIAkJCW5hbWUgPSBMYXlvdXRUZXN0SGVscGVyOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKIAkJfTsKKwkJMzFCMDlDRDIxRTA0NTNFOTAwNkY0RTREIC8qIFRlc3RSdW5uZXJT
aGFyZWQgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTMx
QjA5Q0QzMUUwNDU0MDQwMDZGNEU0RCAvKiB1bml4TG9nZ2luZ1BpcGVzLmggKi8sCisJCQkJMzFC
MDlDRDQxRTA0NTQwNDAwNkY0RTREIC8qIHVuaXhMb2dnaW5nUGlwZXMubW0gKi8sCisJCQkpOwor
CQkJbmFtZSA9IFRlc3RSdW5uZXJTaGFyZWQ7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwor
CQl9OwogCQk0MTdEQTkxODEzNzM2NzREMDA3QzU3RkIgLyogV2ViQ29yZVRlc3RTdXBwb3J0ICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTExMDAsNiArMTEx
Myw3IEBACiAJCQkJQkNEMDhCNzEwRTEwNTlEMjAwQTdEMEMxIC8qIEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODAwNDVBRUUxNDc3MThFNzAwODI5MEE4
IC8qIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMjlDRkJBMTExMjI3MzZFNjAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTMxQjA5Q0Q1MUUwNDU0MDcwMDZGNEU0RCAvKiB1bml4TG9n
Z2luZ1BpcGVzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTlCQjdDNUMxQzUwNTI3ODAwMkM1MjVC
IC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMjlD
RkJBMkUxMjI3M0ExMDAwQkMzMEMwIC8qIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyTWFjLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkMwRTI0RTEwRTJEOTQ1MTAwMUI2QkMyIC8qIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJl
ZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCShyZXZpc2lvbiAyMDk5MjcpCisrKyBUb29scy9EdW1w
UmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwMyw2
ICsxMDMsNyBAQAogI2lmIFBMQVRGT1JNKElPUykKICNpbXBvcnQgIkR1bXBSZW5kZXJUcmVlQnJv
d3NlclZpZXcuaCIKICNpbXBvcnQgIlVJS2l0U1BJLmgiCisjaW1wb3J0ICJ1bml4TG9nZ2luZ1Bp
cGVzLmgiCiAjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KICNpbXBvcnQgPFdlYkNv
cmUvQ29yZUdyYXBoaWNzU1BJLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0FLV2luZG93Lmg+CkBAIC0x
MjcyLDE3ICsxMjczLDcgQEAgdm9pZCB3cml0ZUNyYXNoZWRNZXNzYWdlT25GYXRhbEVycm9yKGlu
dAogdm9pZCBkdW1wUmVuZGVyVHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdKQogewog
I2lmIFBMQVRGT1JNKElPUykKLSAgICBjb25zdCBjaGFyKiBpZGVudGlmaWVyID0gZ2V0ZW52KCJJ
UENfSURFTlRJRklFUiIpOwotICAgIGNvbnN0IGNoYXIgKnN0ZGluUGF0aCA9IFtbTlNTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpAIi90bXAvJXNfSU4iLCBpZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsK
LSAgICBjb25zdCBjaGFyICpzdGRvdXRQYXRoID0gW1tOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0
OkAiL3RtcC8lc19PVVQiLCBpZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsKLSAgICBjb25zdCBjaGFy
ICpzdGRlcnJQYXRoID0gW1tOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiL3RtcC8lc19FUlJP
UiIsIGlkZW50aWZpZXJdIFVURjhTdHJpbmddOwotCi0gICAgaW50IGluZmQgPSBvcGVuKHN0ZGlu
UGF0aCwgT19SRFdSKTsKLSAgICBkdXAyKGluZmQsIFNURElOX0ZJTEVOTyk7Ci0gICAgaW50IG91
dGZkID0gb3BlbihzdGRvdXRQYXRoLCBPX1JEV1IpOwotICAgIGR1cDIob3V0ZmQsIFNURE9VVF9G
SUxFTk8pOwotICAgIGludCBlcnJmZCA9IG9wZW4oc3RkZXJyUGF0aCwgT19SRFdSIHwgT19OT05C
TE9DSyk7Ci0gICAgZHVwMihlcnJmZCwgU1RERVJSX0ZJTEVOTyk7CisgICAgV1RSOjpzZXR1cFVu
aXhMb2dnaW5nUGlwZXMoKTsKICNlbmRpZgogCiAgICAgc2lnbmFsKFNJR0lMTCwgJndyaXRlQ3Jh
c2hlZE1lc3NhZ2VPbkZhdGFsRXJyb3IpOwpAQCAtMTM0Myw5ICsxMzM0LDcgQEAgdm9pZCBkdW1w
UmVuZGVyVHJlZShpbnQgYXJnYywgY29uc3QgY2hhcgogICAgIH0KIAogI2lmIFBMQVRGT1JNKElP
UykKLSAgICBjbG9zZShpbmZkKTsKLSAgICBjbG9zZShvdXRmZCk7Ci0gICAgY2xvc2UoZXJyZmQp
OworICAgIFdUUjo6dGVhcmRvd25Vbml4TG9nZ2luZ1BpcGVzKCk7CiAjZW5kaWYKIH0KIApJbmRl
eDogVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy9idWlsZC13ZWJraXQJKHJldmlzaW9uIDIwOTkyNykKKysrIFRvb2xzL1NjcmlwdHMvYnVpbGQt
d2Via2l0CSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsMTAgKzIwMCw2IEBAIGlmIChpc0FwcGxlTWFj
V2ViS2l0KCkpIHsKICAgICAgICAgcHVzaCBAY29weUxpYnJhcmllc0FyZ3MsIHByb2R1Y3REaXIo
KTsKICAgICAgICAgcHJpbnQoam9pbigiICIsIEBjb3B5TGlicmFyaWVzQXJncykgLiAiXG4iKTsK
ICAgICAgICAgKHN5c3RlbShAY29weUxpYnJhcmllc0FyZ3MpID09IDApIG9yIGRpZTsKLQotICAg
ICAgICBpZiAod2lsbFVzZUlPU1NpbXVsYXRvclNESygpKSB7Ci0gICAgICAgICAgICAoc3lzdGVt
KCJwZXJsIiwgIlRvb2xzL1NjcmlwdHMvYnVpbGQtbGF5b3V0dGVzdHJlbGF5IiwgYXJndW1lbnRz
Rm9yQ29uZmlndXJhdGlvbigpKSA9PSAwKSBvciBkaWU7Ci0gICAgICAgIH0KICAgICB9CiAKICAg
ICAjIEJ1aWxkIFRvb2xzIG5lZWRlZCBmb3IgQXBwbGUgcG9ydHMKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL2lwY19waXBlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL2lwY19waXBlLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL2lwY19waXBlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDIxIEBACisjIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQg
ZXJybm8KK2ltcG9ydCBpbworaW1wb3J0IG9zCitpbXBvcnQgUXVldWUKK2ltcG9ydCBzZWxlY3QK
K2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCisKK2lmIHN5cy5wbGF0Zm9y
bS5zdGFydHN3aXRoKCd3aW4nKToKKyAgICBpbXBvcnQgbXN2Y3J0CisgICAgaW1wb3J0IHdpbjMy
cGlwZQorICAgIGltcG9ydCB3aW4zMmZpbGUKK2Vsc2U6CisgICAgaW1wb3J0IGZjbnRsCisgICAg
aW1wb3J0IHNvY2tldAorCisKK2NsYXNzIFVuaXhQaXBlU2VydmVyKG9iamVjdCk6CisKKyAgICBC
VUZGRVIgPSA0MDk2CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCk6CisgICAgICAgIGlm
IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKKyAgICAgICAgICAgIHJhaXNlIE9TRXJy
b3IoJ1VuaXhQaXBlU2VydmVyIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtJykKKyAg
ICAgICAgc2VsZi5fcGF0aCA9IHBhdGgKKyAgICAgICAgc2VsZi5fY29ubmVjdGVkID0gRmFsc2UK
KworICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5fcGF0aCkKKyAgICAg
ICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLl9w
YXRoKToKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJDb3VsZCBub3QgdW5saW5rICci
ICsgc2VsZi5fcGF0aCArICInLCB0aGUgdGFyZ2V0IHBhdGggaXMgYSBmaWxlIG5vdCBhIHBpcGUu
IikKKworICAgICAgICBzZWxmLl9zb2NrZXQgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklY
LCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYuX3NvY2tldC5zZXR0aW1lb3V0KDE1
KQorICAgICAgICBzZWxmLl9zb2NrZXQuYmluZChzZWxmLl9wYXRoKQorICAgICAgICBzZWxmLl9z
b2NrZXQubGlzdGVuKDApCisKKyAgICBkZWYgY29ubmVjdChzZWxmKToKKyAgICAgICAgaWYgc2Vs
Zi5fY29ubmVjdGVkOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgc2VsZi5fY29ubmVjdGlvbiwgc2VsZi5fYWRkcmVzcyA9IHNlbGYuX3NvY2tldC5h
Y2NlcHQoKQorICAgICAgICAgICAgc2VsZi5fY29ubmVjdGlvbi5zZXRibG9ja2luZygwKQorICAg
ICAgICAgICAgc2VsZi5fY29ubmVjdGVkID0gVHJ1ZQorICAgICAgICBleGNlcHQgc29ja2V0LnRp
bWVvdXQ6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKwor
ICAgIGRlZiBkaXNjb25uZWN0KHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fY29ubmVjdGVk
OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX3NvY2tldC5jbG9zZSgpCisgICAg
ICAgIHNlbGYuX2Nvbm5lY3RlZCA9IEZhbHNlCisKKyAgICBkZWYgcmVhZChzZWxmKToKKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2Nvbm5lY3Rpb24ucmVjdihzZWxmLkJV
RkZFUikKKyAgICAgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEK
KyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgZToKKyAgICAgICAgICAgIGVyciA9IGUuYXJn
c1swXQorICAgICAgICAgICAgaWYgZXJyID09IGVycm5vLkVBR0FJTiBvciBlcnIgPT0gZXJybm8u
RVdPVUxEQkxPQ0s6CisgICAgICAgICAgICAgICAgcmV0dXJuIFtdCisgICAgICAgIHNlbGYuZGlz
Y29ubmVjdCgpCisgICAgICAgIHJldHVybiBbXQorCisgICAgZGVmIHNlbmQoc2VsZiwgZGF0YSk6
CisgICAgICAgIGlmIG5vdCBzZWxmLl9jb25uZWN0ZWQ6CisgICAgICAgICAgICByZXR1cm4gRmFs
c2UKKyAgICAgICAgc2VsZi5fY29ubmVjdGlvbi5zZW5kKGRhdGEpCisgICAgICAgIHJldHVybiBU
cnVlCisKKyAgICBkZWYgcGF0aChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BhdGgKKwor
ICAgIGRlZiBpc0Nvbm5lY3RlZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Nvbm5lY3Rl
ZAorCisKK2NsYXNzIEFic3RyYWN0UGlwZShvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNl
bGYpOgorICAgICAgICBzZWxmLmNsZWFuKCkKKworICAgIGRlZiBjb25uZWN0KHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZi5pc0Nvbm5lY3RlZCgpCisKKyAgICBkZWYgY2xlYW4oc2VsZik6Cisg
ICAgICAgIHNlbGYuX3N0ZG91dFN0cmVhbSA9IGlvLkJ5dGVzSU8oKQorICAgICAgICBzZWxmLl9z
dGRlcnJTdHJlYW0gPSBpby5CeXRlc0lPKCkKKyAgICAgICAgc2VsZi5fc3Rkb3V0VHJjID0gMAor
ICAgICAgICBzZWxmLl9zdGRlcnJUcmMgPSAwCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAg
ICAgIHJldHVybiBub3Qgc2VsZi5pc0Nvbm5lY3RlZCgpCisKKyAgICBkZWYgc2VuZChzZWxmLCBk
YXRhKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgaXNDb25uZWN0ZWQoc2VsZik6
CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9wYXJzZU1lc3NhZ2Uoc2VsZiwgaXNC
bG9ja2luZz1GYWxzZSk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHJlYWRMaW5l
KHNlbGYsIGlzQmxvY2tpbmc9RmFsc2UpOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAg
ICAgZXJyID0gc2VsZi5zdGRlcnJSZWFkKCkKKyAgICAgICAgICAgIGlmIGVycjoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyCisgICAgICAgICAgICBvdXQgPSBzZWxmLnN0ZG91dFJlYWQoKQor
ICAgICAgICAgICAgaWYgb3V0OgorICAgICAgICAgICAgICAgIHJldHVybiBvdXQKKyAgICAgICAg
ICAgIHNlbGYuX3BhcnNlTWVzc2FnZShpc0Jsb2NraW5nKQorICAgICAgICAgICAgaWYgbm90IGlz
QmxvY2tpbmc6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmV0dXJuIE5vbmUKKwor
ICAgIGRlZiBzdGRvdXRSZWFkKHNlbGYsIGlzQmxvY2tpbmc9RmFsc2UpOgorICAgICAgICB0cmll
ZE9uY2UgPSBGYWxzZQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgc2VsZi5fc3Rk
b3V0U3RyZWFtLnNlZWsoc2VsZi5fc3Rkb3V0VHJjLCBpby5TRUVLX1NFVCkKKyAgICAgICAgICAg
IGRhdGEgPSBzZWxmLl9zdGRvdXRTdHJlYW0ucmVhZGxpbmUoKQorICAgICAgICAgICAgaWYgZGF0
YSBhbmQgZGF0YVstMV0gPT0gJ1xuJzoKKyAgICAgICAgICAgICAgICBzZWxmLl9zdGRvdXRUcmMg
PSBzZWxmLl9zdGRvdXRUcmMgKyBsZW4oZGF0YSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZGF0
YQorICAgICAgICAgICAgc2VsZi5fcGFyc2VNZXNzYWdlKGlzQmxvY2tpbmcpCisgICAgICAgICAg
ICBpZiBub3QgaXNCbG9ja2luZyBhbmQgdHJpZWRPbmNlOgorICAgICAgICAgICAgICAgIGJyZWFr
CisgICAgICAgICAgICB0cmllZE9uY2UgPSBUcnVlCisgICAgICAgIHJldHVybiBOb25lCisKKyAg
ICBkZWYgc3RkZXJyUmVhZChzZWxmLCBpc0Jsb2NraW5nPUZhbHNlKToKKyAgICAgICAgdHJpZWRP
bmNlID0gRmFsc2UKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHNlbGYuX3N0ZGVy
clN0cmVhbS5zZWVrKHNlbGYuX3N0ZGVyclRyYywgaW8uU0VFS19TRVQpCisgICAgICAgICAgICBk
YXRhID0gc2VsZi5fc3RkZXJyU3RyZWFtLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGlmIGRhdGEg
YW5kIGRhdGFbLTFdID09ICdcbic6CisgICAgICAgICAgICAgICAgc2VsZi5fc3RkZXJyVHJjID0g
c2VsZi5fc3RkZXJyVHJjICsgbGVuKGRhdGEpCisgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEK
KyAgICAgICAgICAgIHNlbGYuX3BhcnNlTWVzc2FnZShpc0Jsb2NraW5nKQorICAgICAgICAgICAg
aWYgbm90IGlzQmxvY2tpbmcgYW5kIHRyaWVkT25jZToKKyAgICAgICAgICAgICAgICBicmVhawor
ICAgICAgICAgICAgdHJpZWRPbmNlID0gVHJ1ZQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAg
ZGVmIHJlYWRCdWZmZXJTdGRvdXQoc2VsZik6CisgICAgICAgIHNlbGYuX3N0ZG91dFN0cmVhbS5z
ZWVrKDAsIGlvLlNFRUtfRU5EKQorICAgICAgICBlbmRWYWwgPSBzZWxmLl9zdGRvdXRTdHJlYW0u
dGVsbCgpCisgICAgICAgIGlmIGVuZFZhbCA8PSBzZWxmLl9zdGRvdXRUcmM6CisgICAgICAgICAg
ICByZXR1cm4gJycKKyAgICAgICAgc2VsZi5fc3Rkb3V0U3RyZWFtLnNlZWsoc2VsZi5fc3Rkb3V0
VHJjLCBpby5TRUVLX1NFVCkKKyAgICAgICAgc2l6ZSA9IGVuZFZhbCAtIHNlbGYuX3N0ZG91dFRy
YworICAgICAgICBzZWxmLl9zdGRvdXRUcmMgPSBlbmRWYWwKKyAgICAgICAgcmV0dXJuIHNlbGYu
X3N0ZG91dFN0cmVhbS5yZWFkKHNpemUpCisKKyAgICBkZWYgcmVhZEJ1ZmZlclN0ZGVycihzZWxm
KToKKyAgICAgICAgc2VsZi5fc3RkZXJyU3RyZWFtLnNlZWsoMCwgaW8uU0VFS19FTkQpCisgICAg
ICAgIGVuZFZhbCA9IHNlbGYuX3N0ZGVyclN0cmVhbS50ZWxsKCkKKyAgICAgICAgaWYgZW5kVmFs
IDw9IHNlbGYuX3N0ZGVyclRyYzoKKyAgICAgICAgICAgIHJldHVybiAnJworICAgICAgICBzZWxm
Ll9zdGRlcnJTdHJlYW0uc2VlayhzZWxmLl9zdGRlcnJUcmMsIGlvLlNFRUtfU0VUKQorICAgICAg
ICBzaXplID0gZW5kVmFsIC0gc2VsZi5fc3RkZXJyVHJjCisgICAgICAgIHNlbGYuX3N0ZGVyclRy
YyA9IGVuZFZhbAorICAgICAgICByZXR1cm4gc2VsZi5fc3RkZXJyU3RyZWFtLnJlYWQoc2l6ZSkK
KworICAgIGRlZiByZWFkQmxvY2tTdGRvdXQoc2VsZiwgc2l6ZSwgaXNCbG9ja2luZz1GYWxzZSk6
CisgICAgICAgIHRyaWVkT25jZSA9IEZhbHNlCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAg
ICAgICBzZWxmLl9zdGRvdXRTdHJlYW0uc2VlaygwLCBpby5TRUVLX0VORCkKKyAgICAgICAgICAg
IGlmIHNlbGYuX3N0ZG91dFN0cmVhbS50ZWxsKCkgLSBzZWxmLl9zdGRvdXRUcmMgPj0gc2l6ZToK
KyAgICAgICAgICAgICAgICBzZWxmLl9zdGRvdXRTdHJlYW0uc2VlayhzZWxmLl9zdGRvdXRUcmMs
IGlvLlNFRUtfU0VUKQorICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9zdGRvdXRTdHJlYW0u
cmVhZChzaXplKQorICAgICAgICAgICAgICAgIHNlbGYuX3N0ZG91dFRyYyA9IHNlbGYuX3N0ZG91
dFRyYyArIHNpemUKKyAgICAgICAgICAgICAgICByZXR1cm4gZGF0YQorICAgICAgICAgICAgc2Vs
Zi5fcGFyc2VNZXNzYWdlKGlzQmxvY2tpbmcpCisgICAgICAgICAgICBpZiBub3QgaXNCbG9ja2lu
ZyBhbmQgdHJpZWRPbmNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICB0cmll
ZE9uY2UgPSBUcnVlCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgcmVhZEJsb2NrU3Rk
ZXJyKHNlbGYsIHNpemUsIGlzQmxvY2tpbmc9RmFsc2UpOgorICAgICAgICB0cmllZE9uY2UgPSBG
YWxzZQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgc2VsZi5fc3RkZXJyU3RyZWFt
LnNlZWsoMCwgaW8uU0VFS19FTkQpCisgICAgICAgICAgICBpZiBzZWxmLl9zdGRlcnJTdHJlYW0u
dGVsbCgpIC0gc2VsZi5fc3RkZXJyVHJjID49IHNpemU6CisgICAgICAgICAgICAgICAgc2VsZi5f
c3RkZXJyU3RyZWFtLnNlZWsoc2VsZi5fc3RkZXJyVHJjLCBpby5TRUVLX1NFVCkKKyAgICAgICAg
ICAgICAgICBkYXRhID0gc2VsZi5fc3RkZXJyU3RyZWFtLnJlYWQoc2l6ZSkKKyAgICAgICAgICAg
ICAgICBzZWxmLl9zdGRlcnJUcmMgPSBzZWxmLl9zdGRlcnJUcmMgKyBzaXplCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGRhdGEKKyAgICAgICAgICAgIHNlbGYuX3BhcnNlTWVzc2FnZShpc0Jsb2Nr
aW5nKQorICAgICAgICAgICAgaWYgbm90IGlzQmxvY2tpbmcgYW5kIHRyaWVkT25jZToKKyAgICAg
ICAgICAgICAgICBicmVhaworICAgICAgICAgICAgdHJpZWRPbmNlID0gVHJ1ZQorICAgICAgICBy
ZXR1cm4gTm9uZQorCisKK2NsYXNzIFVuaXhQaXBlKEFic3RyYWN0UGlwZSk6CisKKyAgICBTVERJ
Tl9JTkRFWCA9IDAKKyAgICBTVERPVVRfSU5ERVggPSAxCisgICAgU1RERVJSX0lOREVYID0gMgor
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0ZGluLCBzdGRvdXQsIHN0ZGVycik6CisgICAgICAg
IEFic3RyYWN0UGlwZS5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLnN0ZG91dEZpbGUgPSBz
dGRvdXQKKyAgICAgICAgc2VsZi5zdGRlcnJGaWxlID0gc3RkZXJyCisKKyAgICAgICAgcGF0aHMg
PSBbc3RkaW4sIHN0ZG91dCwgc3RkZXJyXQorICAgICAgICBzZWxmLl9zb2NrZXRzID0gW10KKyAg
ICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgMyk6CisgICAgICAgICAgICBzZWxmLl9zb2NrZXRzLmFw
cGVuZChVbml4UGlwZVNlcnZlcihwYXRoc1tpXSkpCisKKyAgICAgICAgc2VsZi5jbGVhbigpCisK
KyAgICBkZWYgY29ubmVjdChzZWxmKToKKyAgICAgICAgZm9yIHNvY2sgaW4gc2VsZi5fc29ja2V0
czoKKyAgICAgICAgICAgIHNvY2suY29ubmVjdCgpCisgICAgICAgIHJldHVybiBzZWxmLmlzQ29u
bmVjdGVkKCkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgZm9yIHNvY2sgaW4gc2Vs
Zi5fc29ja2V0czoKKyAgICAgICAgICAgIHNvY2suZGlzY29ubmVjdCgpCisKKyAgICBkZWYgc2Vu
ZChzZWxmLCBkYXRhKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NvY2tldHNbVW5peFBpcGUuU1RE
SU5fSU5ERVhdLnNlbmQoZGF0YSkKKworICAgIGRlZiBpc0Nvbm5lY3RlZChzZWxmKToKKyAgICAg
ICAgZm9yIHNvY2sgaW4gc2VsZi5fc29ja2V0czoKKyAgICAgICAgICAgIGlmIG5vdCBzb2NrLmlz
Q29ubmVjdGVkKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVy
biBUcnVlCisKKyAgICBkZWYgX3BhcnNlTWVzc2FnZShzZWxmLCBpc0Jsb2NraW5nPUZhbHNlKToK
KyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHN0ZEVyckRhdGEgPSBbXQorICAgICAg
ICAgICAgc3RkRXJyRGF0YSA9IHNlbGYuX3NvY2tldHNbVW5peFBpcGUuU1RERVJSX0lOREVYXS5y
ZWFkKCkKKyAgICAgICAgICAgIGlmIHN0ZEVyckRhdGE6CisgICAgICAgICAgICAgICAgc2VsZi5f
c3RkZXJyU3RyZWFtLnNlZWsoMCwgaW8uU0VFS19FTkQpCisgICAgICAgICAgICAgICAgc2VsZi5f
c3RkZXJyU3RyZWFtLndyaXRlKHN0ZEVyckRhdGEpCisgICAgICAgICAgICBzdGRPdXREYXRhID0g
W10KKyAgICAgICAgICAgIHN0ZE91dERhdGEgPSBzZWxmLl9zb2NrZXRzW1VuaXhQaXBlLlNURE9V
VF9JTkRFWF0ucmVhZCgpCisgICAgICAgICAgICBpZiBzdGRPdXREYXRhOgorICAgICAgICAgICAg
ICAgIHNlbGYuX3N0ZG91dFN0cmVhbS5zZWVrKDAsIGlvLlNFRUtfRU5EKQorICAgICAgICAgICAg
ICAgIHNlbGYuX3N0ZG91dFN0cmVhbS53cml0ZShzdGRPdXREYXRhKQorICAgICAgICAgICAgaWYg
c3RkRXJyRGF0YSBvciBzdGRPdXREYXRhOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisg
ICAgICAgICAgICBpZiBub3QgaXNCbG9ja2luZzoKKyAgICAgICAgICAgICAgICBicmVhaworICAg
ICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBoYW5kbGVfaW50ZXJydXB0KHNlbGYpOgorICAg
ICAgICBpZiBub3Qgc2VsZi5pc0Nvbm5lY3RlZCgpOgorICAgICAgICAgICAgcmFpc2UgS2V5Ym9h
cmRJbnRlcnJ1cHQKKworCitjbGFzcyBQcm9jZXNzUGlwZShBYnN0cmFjdFBpcGUpOgorCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIGNtZCwgZW52aXJvPU5vbmUsIHVuaV9uZXdsaW5lcz1G
YWxzZSk6CisKKyAgICAgICAgQWJzdHJhY3RQaXBlLl9faW5pdF9fKHNlbGYpCisKKyAgICAgICAg
c2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5faG9zdCA9IHNlbGYuX3BvcnQuaG9zdAor
CisgICAgICAgIHNlbGYuX3Byb2MgPSBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5wb3BlbihjbWQsIHN0
ZGluPXNlbGYuX2hvc3QuZXhlY3V0aXZlLlBJUEUsCisgICAgICAgICAgICBzdGRvdXQ9c2VsZi5f
aG9zdC5leGVjdXRpdmUuUElQRSwKKyAgICAgICAgICAgIHN0ZGVycj1zZWxmLl9ob3N0LmV4ZWN1
dGl2ZS5QSVBFLAorICAgICAgICAgICAgY2xvc2VfZmRzPW5vdCBzZWxmLl9ob3N0LnBsYXRmb3Jt
LmlzX3dpbigpLAorICAgICAgICAgICAgZW52PWVudmlybywKKyAgICAgICAgICAgIHVuaXZlcnNh
bF9uZXdsaW5lcz11bmlfbmV3bGluZXMpCisKKyAgICAgICAgc2VsZi5fdXNlX3dpbjMyX2FwaXMg
PSBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJykKKyAgICAgICAgaWYgbm90IHNlbGYuX3Vz
ZV93aW4zMl9hcGlzOgorICAgICAgICAgICAgZmQgPSBzZWxmLl9wcm9jLnN0ZG91dC5maWxlbm8o
KQorICAgICAgICAgICAgZmwgPSBmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGTCkKKyAgICAg
ICAgICAgIGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX1NFVEZMLCBmbCB8IG9zLk9fTk9OQkxPQ0sp
CisgICAgICAgICAgICBmZCA9IHNlbGYuX3Byb2Muc3RkZXJyLmZpbGVubygpCisgICAgICAgICAg
ICBmbCA9IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZMKQorICAgICAgICAgICAgZmNudGwu
ZmNudGwoZmQsIGZjbnRsLkZfU0VURkwsIGZsIHwgb3MuT19OT05CTE9DSykKKworICAgIGRlZiBw
aWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wcm9jLnBpZAorCisgICAgZGVmIGlzQ29u
bmVjdGVkKHNlbGYpOgorICAgICAgICByZXR1cm4gbm90IHNlbGYuX3Byb2MucG9sbCgpCisKKyAg
ICBkZWYgaGFuZGxlX2ludGVycnVwdChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fcHJvYy5yZXR1
cm5jb2RlIGluICgtMTA3Mzc0MTUxMCwgLXNpZ25hbC5TSUdJTlQpOgorICAgICAgICAgICAgcmFp
c2UgS2V5Ym9hcmRJbnRlcnJ1cHQKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgaWYg
c2VsZi5fcHJvYy5wb2xsKCk6CisgICAgICAgICAgICBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5raWxs
X3Byb2Nlc3Moc2VsZi5fcHJvYy5waWQpCisgICAgICAgIGlmIHNlbGYuX3Byb2MucG9sbCgpIGlz
IG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fcHJvYy53YWl0KCkKKworICAgICAgICBpZiBz
ZWxmLl9wcm9jLnN0ZGluOgorICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRpbi5jbG9zZSgpCisg
ICAgICAgIGlmIHNlbGYuX3Byb2Muc3Rkb3V0OgorICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRv
dXQuY2xvc2UoKQorICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZGVycjoKKyAgICAgICAgICAgIHNl
bGYuX3Byb2Muc3RkZXJyLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLmlzQ29ubmVj
dGVkKCkKKworICAgIGRlZiBzZW5kKHNlbGYsIGJ5dGVzKToKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgc2VsZi5fcHJvYy5zdGRpbi53cml0ZShieXRlcykKKyAgICAgICAgZXhjZXB0IElPRXJy
b3IsIGU6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKwor
ICAgIGRlZiBfdW5peHN0ZEJsb2NrKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZG91
dC5jbG9zZWQ6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBzZWxlY3RfZmRzID0g
W10KKyAgICAgICAgc2VsZWN0X2Zkcy5hcHBlbmQoc2VsZi5fcHJvYy5zdGRvdXQuZmlsZW5vKCkp
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlYWRfZmRzLCBfLCBfID0gc2VsZWN0LnNlbGVj
dChzZWxlY3RfZmRzLCBbXSwgc2VsZWN0X2ZkcywgMCkKKyAgICAgICAgZXhjZXB0IHNlbGVjdC5l
cnJvciwgZToKKyAgICAgICAgICAgIGlmIGUuYXJnc1swXSA9PSBlcnJuby5FSU5WQUw6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgaWYgc2VsZi5fcHJvYy5zdGRvdXQuZmlsZW5vKCkgaW4gcmVhZF9mZHM6
CisgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuX3Byb2Muc3Rkb3V0LnJlYWQoKQorICAgICAg
ICAgICAgICAgIHJldHVybiBkYXRhCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgorICAgICAg
ICAgICAgcGFzcworCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX3VuaXhlcnJCbG9j
ayhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fcHJvYy5zdGRlcnIuY2xvc2VkOgorICAgICAgICAg
ICAgcmV0dXJuIE5vbmUKKyAgICAgICAgc2VsZWN0X2ZkcyA9IFtdCisgICAgICAgIHNlbGVjdF9m
ZHMuYXBwZW5kKHNlbGYuX3Byb2Muc3RkZXJyLmZpbGVubygpKQorICAgICAgICB0cnk6CisgICAg
ICAgICAgICByZWFkX2ZkcywgXywgXyA9IHNlbGVjdC5zZWxlY3Qoc2VsZWN0X2ZkcywgW10sIHNl
bGVjdF9mZHMsIDApCisgICAgICAgIGV4Y2VwdCBzZWxlY3QuZXJyb3IsIGU6CisgICAgICAgICAg
ICBpZiBlLmFyZ3NbMF0gPT0gZXJybm8uRUlOVkFMOgorICAgICAgICAgICAgICAgIHJldHVybiBO
b25lCisgICAgICAgICAgICByYWlzZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNl
bGYuX3Byb2Muc3RkZXJyLmZpbGVubygpIGluIHJlYWRfZmRzOgorICAgICAgICAgICAgICAgIGRh
dGEgPSBzZWxmLl9wcm9jLnN0ZGVyci5yZWFkKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZGF0
YQorICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAg
ICByZXR1cm4gTm9uZQorCisgICAgZGVmIF93aW4zMk5vbkJsb2NraW5nUmVhZChzZWxmLCBoYW5k
bGUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBfLCBhdmFpbCwgXyA9IHdpbjMycGlwZS5Q
ZWVrTmFtZWRQaXBlKGhhbmRsZSwgMCkKKyAgICAgICAgICAgIGlmIGF2YWlsID4gMDoKKyAgICAg
ICAgICAgICAgICBfLCBidWYgPSB3aW4zMmZpbGUuUmVhZEZpbGUoaGFuZGxlLCBhdmFpbCwgTm9u
ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYnVmCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24s
IGU6CisgICAgICAgICAgICBpZiBlWzBdIG5vdCBpbiAoMTA5LCBlcnJuby5FU0hVVERPV04pOiAg
IyAxMDkgPT0gd2luMzIgRVJST1JfQlJPS0VOX1BJUEUKKyAgICAgICAgICAgICAgICByYWlzZQor
ICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF93aW4zMnN0ZEJsb2NrKHNlbGYpOgorICAg
ICAgICBvdXRfZmggPSBtc3ZjcnQuZ2V0X29zZmhhbmRsZShzZWxmLl9wcm9jLnN0ZG91dC5maWxl
bm8oKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3dpbjMyTm9uQmxvY2tpbmdSZWFkKG91dF9maCkK
KworICAgIGRlZiBfd2luMzJlcnJCbG9jayhzZWxmKToKKyAgICAgICAgZXJyX2ZoID0gbXN2Y3J0
LmdldF9vc2ZoYW5kbGUoc2VsZi5fcHJvYy5zdGRlcnIuZmlsZW5vKCkpCisgICAgICAgIHJldHVy
biBzZWxmLl93aW4zMk5vbkJsb2NraW5nUmVhZChlcnJfZmgpCisKKyAgICBkZWYgX3BhcnNlTWVz
c2FnZShzZWxmLCBpc0Jsb2NraW5nPUZhbHNlKToKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAg
ICAgICAgIHN0ZEVyckRhdGEgPSBbXQorICAgICAgICAgICAgaWYgc2VsZi5fdXNlX3dpbjMyX2Fw
aXM6CisgICAgICAgICAgICAgICAgc3RkRXJyRGF0YSA9IHNlbGYuX3dpbjMyZXJyQmxvY2soKQor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzdGRFcnJEYXRhID0gc2VsZi5fdW5p
eGVyckJsb2NrKCkKKyAgICAgICAgICAgIGlmIHN0ZEVyckRhdGE6CisgICAgICAgICAgICAgICAg
c2VsZi5fc3RkZXJyU3RyZWFtLnNlZWsoMCwgaW8uU0VFS19FTkQpCisgICAgICAgICAgICAgICAg
c2VsZi5fc3RkZXJyU3RyZWFtLndyaXRlKHN0ZEVyckRhdGEpCisgICAgICAgICAgICBzdGRPdXRE
YXRhID0gW10KKyAgICAgICAgICAgIGlmIHNlbGYuX3VzZV93aW4zMl9hcGlzOgorICAgICAgICAg
ICAgICAgIHN0ZE91dERhdGEgPSBzZWxmLl93aW4zMnN0ZEJsb2NrKCkKKyAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgc3RkT3V0RGF0YSA9IHNlbGYuX3VuaXhzdGRCbG9jaygpCisg
ICAgICAgICAgICBpZiBzdGRPdXREYXRhOgorICAgICAgICAgICAgICAgIHNlbGYuX3N0ZG91dFN0
cmVhbS5zZWVrKDAsIGlvLlNFRUtfRU5EKQorICAgICAgICAgICAgICAgIHNlbGYuX3N0ZG91dFN0
cmVhbS53cml0ZShzdGRPdXREYXRhKQorICAgICAgICAgICAgaWYgc3RkRXJyRGF0YSBvciBzdGRP
dXREYXRhOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBpZiBub3Qg
aXNCbG9ja2luZzoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICByZXR1cm4gRmFsc2UK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2lwY19waXBlX3Rlc3RjYXNlLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2lwY19waXBlX3Rl
c3RjYXNlLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L2lwY19waXBlX3Rlc3RjYXNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMxIEBACisj
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgZXJybm8KK2ltcG9y
dCBpbworaW1wb3J0IHNvY2tldAoraW1wb3J0IHRpbWUKKworZnJvbSB3ZWJraXRweS5jb21tb24u
aXBjX3BpcGUgaW1wb3J0IEFic3RyYWN0UGlwZQorCisKK2NsYXNzIER1bW15UHJvY2Vzc1BpcGUo
QWJzdHJhY3RQaXBlKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0PU5vbmUsIGNtZD1O
b25lLCBlbnZpcm89Tm9uZSwgdW5pX25ld2xpbmVzPUZhbHNlKToKKyAgICAgICAgQWJzdHJhY3RQ
aXBlLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIGlm
IHNlbGYuX3BvcnQ6CisgICAgICAgICAgICBzZWxmLl9ob3N0ID0gc2VsZi5fcG9ydC5ob3N0Cisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9ob3N0ID0gTm9uZQorICAgICAgICBzZWxm
LmNvbm5lY3RlZEZvclRlc3RpbmcgPSBUcnVlCisKKyAgICBkZWYgcGlkKHNlbGYpOgorICAgICAg
ICByZXR1cm4gMQorCisgICAgZGVmIGlzQ29ubmVjdGVkKHNlbGYpOgorICAgICAgICByZXR1cm4g
c2VsZi5jb25uZWN0ZWRGb3JUZXN0aW5nCisKKyAgICBkZWYgc2VuZChzZWxmLCBieXRlcyk6Cisg
ICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3RlZEZvclRlc3RpbmcKKworICAgIGRlZiBfcGFyc2VN
ZXNzYWdlKHNlbGYsIGlzQmxvY2tpbmc9RmFsc2UpOgorICAgICAgICByZXR1cm4gRmFsc2UKKwor
ICAgIGRlZiBwdXNoRGF0YUZvclRlc3Rpbmcoc2VsZiwgZGF0YSwgc3RkZXJyPUZhbHNlLCBzdGRv
dXQ9VHJ1ZSk6CisgICAgICAgIGlmIHN0ZGVycjoKKyAgICAgICAgICAgIHNlbGYuX3N0ZGVyclN0
cmVhbS5zZWVrKDAsIGlvLlNFRUtfRU5EKQorICAgICAgICAgICAgc2VsZi5fc3RkZXJyU3RyZWFt
LndyaXRlKGRhdGEpCisgICAgICAgIGVsaWYgc3Rkb3V0OgorICAgICAgICAgICAgc2VsZi5fc3Rk
b3V0U3RyZWFtLnNlZWsoMCwgaW8uU0VFS19FTkQpCisgICAgICAgICAgICBzZWxmLl9zdGRvdXRT
dHJlYW0ud3JpdGUoZGF0YSkKKworCitjbGFzcyBVbml4UGlwZUNsaWVudChvYmplY3QpOgorCisg
ICAgQlVGRkVSID0gNDA5NgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgorICAgICAg
ICBzZWxmLl9wYXRoID0gcGF0aAorICAgICAgICBzZWxmLl9jb25uZWN0ZWQgPSBGYWxzZQorICAg
ICAgICBzZWxmLl9jb25uZWN0aW9uID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29j
a2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzZWxmLl9zdHJlYW0gPSBpby5CeXRlc0lPKCkKKyAg
ICAgICAgc2VsZi5fc3RyZWFtVHJjID0gMAorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAg
ICAgIHNlbGYuZGlzY29ubmVjdCgpCisKKyAgICBkZWYgY29ubmVjdChzZWxmKToKKyAgICAgICAg
aWYgc2VsZi5fY29ubmVjdGVkOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgc2VsZi5fY29ubmVjdGlvbi5jb25uZWN0KHNlbGYuX3BhdGgpCisgICAg
ICAgICAgICBzZWxmLl9jb25uZWN0ZWQgPSBUcnVlCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAg
ICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGRpc2Nvbm5l
Y3Qoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9jb25uZWN0ZWQ6CisgICAgICAgICAgICBy
ZXR1cm4KKyAgICAgICAgc2VsZi5fY29ubmVjdGlvbi5jbG9zZSgpCisgICAgICAgIHNlbGYuX2Nv
bm5lY3RlZCA9IEZhbHNlCisKKyAgICBkZWYgcmVhZGxpbmUoc2VsZiwgaXNCbG9ja2luZz1GYWxz
ZSk6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBzZWxmLl9zdHJlYW0uc2Vlayhz
ZWxmLl9zdHJlYW1UcmMsIGlvLlNFRUtfU0VUKQorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX3N0
cmVhbS5yZWFkbGluZSgpCisgICAgICAgICAgICBpZiBkYXRhIGFuZCBkYXRhWy0xXSA9PSAnXG4n
OgorICAgICAgICAgICAgICAgIHNlbGYuX3N0cmVhbVRyYyA9IHNlbGYuX3N0cmVhbVRyYyArIGxl
bihkYXRhKQorICAgICAgICAgICAgICAgIHJldHVybiBkYXRhCisgICAgICAgICAgICBibG9jayA9
IHNlbGYucmVhZCgpCisgICAgICAgICAgICBpZiBibG9jazoKKyAgICAgICAgICAgICAgICBzZWxm
Ll9zdHJlYW0uc2VlaygwLCBpby5TRUVLX0VORCkKKyAgICAgICAgICAgICAgICBzZWxmLl9zdHJl
YW0ud3JpdGUoYmxvY2spCisgICAgICAgICAgICBpZiBub3QgaXNCbG9ja2luZzoKKyAgICAgICAg
ICAgICAgICBicmVhaworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHJlYWQoc2VsZik6
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9jb25uZWN0aW9uLnJlY3Yo
c2VsZi5CVUZGRVIpCisgICAgICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgICAgIHJldHVy
biBkYXRhCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIGU6CisgICAgICAgICAgICBlcnIg
PSBlLmFyZ3NbMF0KKyAgICAgICAgICAgIGlmIGVyciA9PSBlcnJuby5FQUdBSU4gb3IgZXJyID09
IGVycm5vLkVXT1VMREJMT0NLOgorICAgICAgICAgICAgICAgIHJldHVybiBbXQorICAgICAgICBz
ZWxmLmRpc2Nvbm5lY3QoKQorICAgICAgICByZXR1cm4gW10KKworICAgIGRlZiBzZW5kKHNlbGYs
IGRhdGEpOgorICAgICAgICBpZiBub3Qgc2VsZi5fY29ubmVjdGVkOgorICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCisgICAgICAgIHNlbGYuX2Nvbm5lY3Rpb24uc2VuZChkYXRhKQorICAgICAgICBy
ZXR1cm4gVHJ1ZQorCisgICAgZGVmIHBvcnQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9w
YXRoCisKKyAgICBkZWYgaXNDb25uZWN0ZWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9j
b25uZWN0ZWQKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2lwY19waXBlX3Vu
aXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2lw
Y19waXBlX3VuaXR0ZXN0LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL2lwY19waXBlX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTU3IEBACisjIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MK
K2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRl
c3QKKworZnJvbSB3ZWJraXRweS5jb21tb24uaXBjX3BpcGUgaW1wb3J0IFVuaXhQaXBlU2VydmVy
LCBVbml4UGlwZQorZnJvbSB3ZWJraXRweS5jb21tb24uaXBjX3BpcGVfdGVzdGNhc2UgaW1wb3J0
IER1bW15UHJvY2Vzc1BpcGUsIFVuaXhQaXBlQ2xpZW50CisKKworZGVmIFVuaXhQaXBlQ2xpZW50
VGVzdGluZ1RocmVhZChzb3VyY2UsIHBhdGgsIGFyZ3VtZW50cyk6CisgICAgc291cmNlLmNsaWVu
dFJlc3VsdHMgPSBbXQorICAgIGNsaWVudCA9IFVuaXhQaXBlQ2xpZW50KHBhdGgpCisKKyAgICBk
ZWFkbGluZSA9IHRpbWUudGltZSgpICsgMS4wCisgICAgd2hpbGUgdGltZS50aW1lKCkgPCBkZWFk
bGluZSBhbmQgbm90IGNsaWVudC5pc0Nvbm5lY3RlZCgpOgorICAgICAgICBjbGllbnQuY29ubmVj
dCgpCisgICAgaWYgbm90IGNsaWVudC5pc0Nvbm5lY3RlZCgpOgorICAgICAgICByZXR1cm4gTm9u
ZQorICAgIHJlYWRpbmdtb2RlID0gRmFsc2UKKyAgICBmb3IgZWxtIGluIGFyZ3VtZW50czoKKyAg
ICAgICAgaWYgZWxtID09ICctLXJlYWQnOgorICAgICAgICAgICAgZGF0YSA9IGNsaWVudC5yZWFk
bGluZShUcnVlKQorICAgICAgICAgICAgc291cmNlLmNsaWVudFJlc3VsdHMuYXBwZW5kKGRhdGEp
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbGllbnQuc2VuZChlbG0pCisgICAgY2xpZW50
LmRpc2Nvbm5lY3QoKQorICAgIHJldHVybiBzb3VyY2UuY2xpZW50UmVzdWx0cworCisKK2NsYXNz
IGlwY1BpcGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxm
LCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihpcGNQaXBlVGVzdCwgc2VsZikuX19p
bml0X18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmNsaWVudFJlc3VsdHMgPSBbXQor
CisgICAgZGVmIHRlc3RfYWJzdHJhY3RwaXBlX3N0ZG91dChzZWxmKToKKyAgICAgICAgcGlwZSA9
IER1bW15UHJvY2Vzc1BpcGUoKQorCisgICAgICAgIHBpcGUucHVzaERhdGFGb3JUZXN0aW5nKCdj
b21pbmcgZnJvbSBzdGRvdXRcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlwZS5zdGRv
dXRSZWFkKCksICdjb21pbmcgZnJvbSBzdGRvdXRcbicpCisKKyAgICAgICAgcGlwZS5wdXNoRGF0
YUZvclRlc3RpbmcoJ2NvbWluZyBmcm9tIHN0ZGVyclxuJywgc3RkZXJyPVRydWUpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwocGlwZS5zdGRvdXRSZWFkKCksIE5vbmUpCisKKyAgICBkZWYgdGVz
dF9hYnN0cmFjdHBpcGVfc3RkZXJyKHNlbGYpOgorICAgICAgICBwaXBlID0gRHVtbXlQcm9jZXNz
UGlwZSgpCisKKyAgICAgICAgcGlwZS5wdXNoRGF0YUZvclRlc3RpbmcoJ2NvbWluZyBmcm9tIHN0
ZG91dFxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBlLnN0ZGVyclJlYWQoKSwgTm9u
ZSkKKworICAgICAgICBwaXBlLnB1c2hEYXRhRm9yVGVzdGluZygnY29taW5nIGZyb20gc3RkZXJy
XG4nLCBzdGRlcnI9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBlLnN0ZGVyclJl
YWQoKSwgJ2NvbWluZyBmcm9tIHN0ZGVyclxuJykKKworICAgIGRlZiB0ZXN0X2Fic3RyYWN0cGlw
ZV9kdWVsX3N0cmVhbXMoc2VsZik6CisgICAgICAgIHBpcGUgPSBEdW1teVByb2Nlc3NQaXBlKCkK
KworICAgICAgICBwaXBlLnB1c2hEYXRhRm9yVGVzdGluZygnY29taW5nIGZyb20gc3Rkb3V0XG4n
KQorICAgICAgICBwaXBlLnB1c2hEYXRhRm9yVGVzdGluZygnY29taW5nIGZyb20gc3RkZXJyXG4n
LCBzdGRlcnI9VHJ1ZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBpcGUucmVhZExpbmUo
KSwgJ2NvbWluZyBmcm9tIHN0ZGVyclxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBl
LnJlYWRMaW5lKCksICdjb21pbmcgZnJvbSBzdGRvdXRcbicpCisKKyAgICBkZWYgdGVzdF9hYnN0
cmFjdHBpcGVfc3Rkb3V0YmxvY2soc2VsZik6CisgICAgICAgIHBpcGUgPSBEdW1teVByb2Nlc3NQ
aXBlKCkKKworICAgICAgICBwaXBlLnB1c2hEYXRhRm9yVGVzdGluZygnc3Rkb3V0IGxpbmVcbicp
CisgICAgICAgIHBpcGUucHVzaERhdGFGb3JUZXN0aW5nKCdzdGRvdXQgYmxvY2snKQorCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlwZS5yZWFkQnVmZmVyU3Rkb3V0KCksICdzdGRvdXQgbGlu
ZVxuc3Rkb3V0IGJsb2NrJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBlLnJlYWRCdWZm
ZXJTdGRlcnIoKSwgJycpCisKKyAgICBkZWYgdGVzdF9hYnN0cmFjdHBpcGVfc3RkZXJyYmxvY2so
c2VsZik6CisgICAgICAgIHBpcGUgPSBEdW1teVByb2Nlc3NQaXBlKCkKKworICAgICAgICBwaXBl
LnB1c2hEYXRhRm9yVGVzdGluZygnc3RkZXJyIGxpbmVcbicsIHN0ZGVycj1UcnVlKQorICAgICAg
ICBwaXBlLnB1c2hEYXRhRm9yVGVzdGluZygnc3RkZXJyIGJsb2NrJywgc3RkZXJyPVRydWUpCisK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBlLnJlYWRCdWZmZXJTdGRvdXQoKSwgJycpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlwZS5yZWFkQnVmZmVyU3RkZXJyKCksICdzdGRlcnIg
bGluZVxuc3RkZXJyIGJsb2NrJykKKworICAgIGRlZiB0ZXN0X3VuaXhQaXBlU2VydmVyKHNlbGYp
OgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZXJ2ID0gVW5peFBpcGVTZXJ2ZXIoJy90bXAv
dW5peFBpcGUucGlwZScpCisgICAgICAgICAgICB0aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRh
cmdldD1Vbml4UGlwZUNsaWVudFRlc3RpbmdUaHJlYWQsIGFyZ3M9KHNlbGYsIHNlcnYucGF0aCgp
LCBbJy0tcmVhZCcsICdMaW5lIDFcbicsICdMaW5lIDJcbicsICctLXJlYWQnXSkpCisgICAgICAg
ICAgICB0aHJlYWQuc3RhcnQoKQorICAgICAgICAgICAgc2Vydi5jb25uZWN0KCkKKyAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZXJ2LmlzQ29ubmVjdGVkKCkpCisKKyAgICAgICAgICAgIHNl
cnYuc2VuZCgnU2VydmVyIHNlbmQgMVxuJykKKyAgICAgICAgICAgIHNlcnYuc2VuZCgnU2VydmVy
IHNlbmQgMlxuJykKKworICAgICAgICAgICAgdGhyZWFkLmpvaW4oKQorICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChzZXJ2LnJlYWQoKSwgJ0xpbmUgMVxuTGluZSAyXG4nKQorICAgICAgICAg
ICAgc2Vydi5kaXNjb25uZWN0KCkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnU2Vy
dmVyIHNlbmQgMVxuJywgc2VsZi5jbGllbnRSZXN1bHRzWzBdKQorICAgICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgnU2VydmVyIHNlbmQgMlxuJywgc2VsZi5jbGllbnRSZXN1bHRzWzFdKQorICAg
ICAgICBleGNlcHQgT1NFcnJvciwgZToKKyAgICAgICAgICAgIGlmIG5vdCBzeXMucGxhdGZvcm0u
c3RhcnRzd2l0aCgnd2luJykgb3Igc3RyKGUpICE9ICdVbml4UGlwZVNlcnZlciBub3QgaW1wbGVt
ZW50ZWQgb24gdGhpcyBwbGF0Zm9ybSc6CisgICAgICAgICAgICAgICAgcmFpc2UgZQorCisgICAg
ZGVmIHRlc3RfdW5peFBpcGUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBpcGUg
PSBVbml4UGlwZSgnL3RtcC90ZXN0c3RkaW4ucGlwZScsICcvdG1wL3Rlc3RzdGRvdXQucGlwZScs
ICcvdG1wL3Rlc3RzdGRlcnIucGlwZScpCisgICAgICAgICAgICBzdGRpblRocmVhZCA9IHRocmVh
ZGluZy5UaHJlYWQodGFyZ2V0PVVuaXhQaXBlQ2xpZW50VGVzdGluZ1RocmVhZCwgYXJncz0oc2Vs
ZiwgJy90bXAvdGVzdHN0ZGluLnBpcGUnLCBbJy0tcmVhZCcsICctLXJlYWQnXSkpCisgICAgICAg
ICAgICBzdGRvdXRUaHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1Vbml4UGlwZUNsaWVu
dFRlc3RpbmdUaHJlYWQsIGFyZ3M9KHNlbGYsICcvdG1wL3Rlc3RzdGRvdXQucGlwZScsIFsnc3Rk
b3V0IGxpbmUgMVxuJywgJ3N0ZG91dCBsaW5lIDJcbiddKSkKKyAgICAgICAgICAgIHN0ZGVyclRo
cmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PVVuaXhQaXBlQ2xpZW50VGVzdGluZ1RocmVh
ZCwgYXJncz0oc2VsZiwgJy90bXAvdGVzdHN0ZGVyci5waXBlJywgWydzdGRlcnIgbGluZSAxXG4n
LCAnc3RkZXJyIGxpbmUgMlxuJ10pKQorICAgICAgICAgICAgc3RkaW5UaHJlYWQuc3RhcnQoKQor
ICAgICAgICAgICAgc3Rkb3V0VGhyZWFkLnN0YXJ0KCkKKyAgICAgICAgICAgIHN0ZGVyclRocmVh
ZC5zdGFydCgpCisgICAgICAgICAgICBwaXBlLmNvbm5lY3QoKQorCisgICAgICAgICAgICBzZWxm
LmFzc2VydFRydWUocGlwZS5pc0Nvbm5lY3RlZCgpKQorCisgICAgICAgICAgICBwaXBlLnNlbmQo
J1NlcnZlciBzZW5kIDFcbicpCisgICAgICAgICAgICBwaXBlLnNlbmQoJ1NlcnZlciBzZW5kIDJc
bicpCisKKyAgICAgICAgICAgIHN0ZGluVGhyZWFkLmpvaW4oKQorICAgICAgICAgICAgc3Rkb3V0
VGhyZWFkLmpvaW4oKQorICAgICAgICAgICAgc3RkZXJyVGhyZWFkLmpvaW4oKQorCisgICAgICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHBpcGUuc3Rkb3V0UmVhZCgpLCAnc3Rkb3V0IGxpbmUgMVxu
JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlwZS5zdGRvdXRSZWFkKCksICdzdGRv
dXQgbGluZSAyXG4nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaXBlLnN0ZGVyclJl
YWQoKSwgJ3N0ZGVyciBsaW5lIDFcbicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBp
cGUuc3RkZXJyUmVhZCgpLCAnc3RkZXJyIGxpbmUgMlxuJykKKworICAgICAgICAgICAgcGlwZS5j
bG9zZSgpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1NlcnZlciBzZW5kIDFcbics
IHNlbGYuY2xpZW50UmVzdWx0c1swXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1Nl
cnZlciBzZW5kIDJcbicsIHNlbGYuY2xpZW50UmVzdWx0c1sxXSkKKyAgICAgICAgZXhjZXB0IE9T
RXJyb3IsIGU6CisgICAgICAgICAgICBpZiBub3Qgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dp
bicpIG9yIHN0cihlKSAhPSAnVW5peFBpcGVTZXJ2ZXIgbm90IGltcGxlbWVudGVkIG9uIHRoaXMg
cGxhdGZvcm0nOgorICAgICAgICAgICAgICAgIHJhaXNlIGUKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9iYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9iYXNlLnB5CShyZXZpc2lvbiAyMDk5MjcpCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvYmFzZS5weQkod29ya2luZyBjb3B5KQpAQCAtODk3LDYgKzg5NywxMiBAQCBjbGFz
cyBQb3J0KG9iamVjdCk6CiAKICAgICAgICAgcmV0dXJuIGNsZWFuX2VudgogCisgICAgZGVmIGRl
dmljZURlZmluZWQoc2VsZik6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHJ1bk9u
RGV2aWNlKHNlbGYsIGNtZCwgZW52aT1Ob25lKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKwogICAg
IGRlZiBfY2xlYXJfZ2xvYmFsX2NhY2hlc19hbmRfdGVtcG9yYXJ5X2ZpbGVzKHNlbGYpOgogICAg
ICAgICBwYXNzCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlX3VuaXR0
ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlX3Vu
aXR0ZXN0LnB5CShyZXZpc2lvbiAyMDk5MjcpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvYmFzZV91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMzk1LDYgKzM5NSwxMiBAQCBj
bGFzcyBQb3J0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShwb3J0LmlzX3czY19yZXNvdXJjZV9maWxlKHBvcnQuaG9zdC5maWxlc3lzdGVtLCBwb3J0Lmxh
eW91dF90ZXN0c19kaXIoKSArICIvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9YTUxI
dHRwUmVxdWVzdCIsICJ4bWxodHRwcmVxdWVzdC1zeW5jLWJsb2NrLWRlZmVyLXNjcmlwdHMtc3Vi
ZnJhbWUuaHRtbCIpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocG9ydC5pc193M2NfcmVzb3Vy
Y2VfZmlsZShwb3J0Lmhvc3QuZmlsZXN5c3RlbSwgcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCkgKyAi
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZG9tL25vZGVzL0RvY3VtZW50LWNyZWF0
ZUVsZW1lbnQtbmFtZXNwYWNlLXRlc3RzIiwgInRlc3QuaHRtbCIpKQogCisgICAgZGVmIHRlc3Rf
ZGV2aWNlKHNlbGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQorICAgICAgICBz
ZWxmLmFzc2VydEZhbHNlKHBvcnQuZGV2aWNlRGVmaW5lZCgpKQorICAgICAgICBzZWxmLmFzc2Vy
dElzTm9uZShwb3J0LnJ1bk9uRGV2aWNlKFsncGluZycsICc8bm8taWQ+J10pKQorCisKIGNsYXNz
IE5hdHVyYWxDb21wYXJlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNl
bGYpOgogICAgICAgICBzZWxmLl9wb3J0ID0gVGVzdFBvcnQoTW9ja1N5c3RlbUhvc3QoKSkKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW4ucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weQkocmV2aXNpb24gMjA5OTI3KQor
KysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weQkod29ya2luZyBjb3B5KQpA
QCAtMjEsNyArMjEsMTAgQEAKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAogaW1wb3J0IGxvZ2dpbmcKK2ltcG9y
dCBtdWx0aXByb2Nlc3NpbmcKIGltcG9ydCBvcworaW1wb3J0IHBsaXN0bGliCitpbXBvcnQgc2h1
dGlsCiBpbXBvcnQgdGltZQogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uY3Jhc2hsb2dz
IGltcG9ydCBDcmFzaExvZ3MKQEAgLTE3NCwzICsxNzcsMjQgQEAgY2xhc3MgRGFyd2luUG9ydChB
cHBsZVBvcnQpOgogICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3I6CiAgICAgICAgICAgICBfbG9n
Lndhcm4oInhjcnVuIGZhaWxlZDsgZmFsbGluZyBiYWNrIHRvICclcycuIiAlIGZhbGxiYWNrKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbGxiYWNrCisKKyAgICBkZWYgZXh0cmFjdEJ1bmRsZUlEKHNl
bGYsIGFwcCk6CisgICAgICAgIHBpZCA9IHN0cihtdWx0aXByb2Nlc3NpbmcuY3VycmVudF9wcm9j
ZXNzKCkubmFtZSkucmVwbGFjZSgnLycsICctJykKKworICAgICAgICB0cnk6CisgICAgICAgICAg
ICBzaHV0aWwuY29weWZpbGUoYXBwICsgIi9JbmZvLnBsaXN0IiwgIi90bXAvIiArIHBpZCArICJJ
bmZvLnBsaXN0IikKKyAgICAgICAgICAgIGlmIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChb
J2NwJywgYXBwICsgJy9JbmZvLnBsaXN0JywgJy90bXAvJyArIHBpZCArICdJbmZvLnBsaXN0J10s
IHJldHVybl9leGl0X2NvZGU9VHJ1ZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAg
ICAgICAgICAgIGlmIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ3BsdXRpbCcsICctY29u
dmVydCcsICd4bWwxJywgJy90bXAvJyArIHBpZCArICdJbmZvLnBsaXN0J10sIHJldHVybl9leGl0
X2NvZGU9VHJ1ZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIHBs
ID0gcGxpc3RsaWIucmVhZFBsaXN0KCIvdG1wLyIgKyBwaWQgKyAiSW5mby5wbGlzdCIpCisgICAg
ICAgIGV4Y2VwdCBFeGNlcHRpb24sIGVycjoKKyAgICAgICAgICAgIHBsID0gTm9uZQorCisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgIG9zLnJlbW92ZSgiL3RtcC8iICsgcGlkICsgIkluZm8ucGxp
c3QiKQorICAgICAgICAgICAgaWYgcGw6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBsWyJDRkJ1
bmRsZUlkZW50aWZpZXIiXQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisgICAg
ICAgIHJldHVybiBOb25lCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2lu
X3Rlc3RjYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9k
YXJ3aW5fdGVzdGNhc2UucHkJKHJldmlzaW9uIDIwOTkyNykKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9kYXJ3aW5fdGVzdGNhc2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTIwLDYgKzIw
LDkgQEAKICMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAoraW1wb3J0IG9z
CitpbXBvcnQgcGxpc3RsaWIKKwogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBwb3J0X3Rlc3Rj
YXNlCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZmlsZXN5c3RlbV9tb2NrIGltcG9ydCBN
b2NrRmlsZVN5c3RlbQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLm91dHB1dGNhcHR1cmUg
aW1wb3J0IE91dHB1dENhcHR1cmUKQEAgLTExOSwzICsxMjIsMTAgQEAgY2xhc3MgRGFyd2luVGVz
dChwb3J0X3Rlc3RjYXNlLlBvcnRUZXN0QwogICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQo
KQogICAgICAgICBwb3J0Ll9leGVjdXRpdmUgPSBNb2NrRXhlY3V0aXZlMihydW5fY29tbWFuZF9m
bj10aHJvd2luZ19ydW5fY29tbWFuZCkKICAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9v
dXRwdXRzKHNlbGYsIHBvcnQuc2FtcGxlX3Byb2Nlc3MsIGFyZ3M9Wyd0ZXN0JywgNDJdKQorCisg
ICAgZGVmIHRlc3RfcGxpc3Qoc2VsZik6CisgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgp
CisgICAgICAgIHBsID0gZGljdChDRkJ1bmRsZUlkZW50aWZpZXI9Im9yZy53ZWJraXQuZGVtbyIp
CisgICAgICAgIHBsaXN0bGliLndyaXRlUGxpc3QocGwsICIvdG1wL0luZm8ucGxpc3QiKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuZXh0cmFjdEJ1bmRsZUlEKCIvdG1wIiksIE5vbmUp
CisgICAgICAgIG9zLnJlbW92ZSgiL3RtcC9JbmZvLnBsaXN0IikKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2RyaXZlci5weQkocmV2aXNpb24gMjA5OTI3KQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQkod29ya2luZyBjb3B5KQpAQCAtMTM4LDcgKzEzOCw3
IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogICAgICAgICBzZWxmLl9kcml2ZXJfdXNlcl9kaXJl
Y3Rvcnlfc3VmZml4ID0gTm9uZQogICAgICAgICBzZWxmLl9kcml2ZXJfdXNlcl9jYWNoZV9kaXJl
Y3RvcnkgPSBOb25lCiAKLSAgICAgICAgIyBXZWJLaXRUZXN0UnVubmVyL0xheW91dFRlc3RSZWxh
eSBjYW4gcmVwb3J0IGJhY2sgc3VicHJvY2VzcyBjcmFzaGVzIGJ5IHByaW50aW5nCisgICAgICAg
ICMgV2ViS2l0VGVzdFJ1bm5lciBjYW4gcmVwb3J0IGJhY2sgc3VicHJvY2VzcyBjcmFzaGVzIGJ5
IHByaW50aW5nCiAgICAgICAgICMgIiNDUkFTSEVEIC0gUFJPQ0VTU05BTUUiLiAgU2luY2UgdGhv
c2UgY2FuIGhhcHBlbiBhdCBhbnkgdGltZSBhbmQgU2VydmVyUHJvY2VzcwogICAgICAgICAjIHdv
bid0IGJlIGF3YXJlIG9mIHRoZW0gKHNpbmNlIHRoZSBhY3R1YWwgdG9vbCBkaWRuJ3QgY3Jhc2gs
IGp1c3QgYSBzdWJwcm9jZXNzKQogICAgICAgICAjIHdlIHJlY29yZCB0aGUgY3Jhc2hlZCBzdWJw
cm9jZXNzIG5hbWUgaGVyZS4KQEAgLTE4Miw2ICsxODIsNyBAQCBjbGFzcyBEcml2ZXIob2JqZWN0
KToKICAgICAgICAgIiIiCiAgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQogICAgICAg
ICBzZWxmLnN0YXJ0KGRyaXZlcl9pbnB1dC5zaG91bGRfcnVuX3BpeGVsX3Rlc3QsIGRyaXZlcl9p
bnB1dC5hcmdzKQorICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5jbGVhbigpCiAgICAgICAg
IHRlc3RfYmVnaW5fdGltZSA9IHRpbWUudGltZSgpCiAgICAgICAgIHNlbGYuX2RyaXZlcl90aW1l
ZF9vdXQgPSBGYWxzZQogICAgICAgICBzZWxmLl9jcmFzaF9yZXBvcnRfZnJvbV9kcml2ZXIgPSBO
b25lCkBAIC0zMjcsNyArMzI4LDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAKICAgICBkZWYg
X3NldHVwX2Vudmlyb25fZm9yX2RyaXZlcihzZWxmLCBlbnZpcm9ubWVudCk6CiAgICAgICAgIGJ1
aWxkX3Jvb3RfcGF0aCA9IHN0cihzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCkpCi0gICAgICAgICMg
RklYTUU6IERZTERfKiB2YXJpYWJsZXMgc2hvdWxkIGJlIE1hYy1vbmx5LiBFdmVuIGlPUyBTaW11
bGF0b3IgZG9lc24ndCBuZWVkIHRoZW0sIGFzIExheW91dFRlc3RSZWxheSBpcyBhIGhvc3QgYmlu
YXJ5LgorICAgICAgICAjIEZJWE1FOiBEWUxEXyogdmFyaWFibGVzIHNob3VsZCBiZSBNYWMtb25s
eS4gaU9TIHNpbXVsYXRvcnMgc2hvdWxkIGluY2x1ZGUgdGhlbSBpbiBpdCdzIGFwcCBidW5kbGUu
CiAgICAgICAgIHNlbGYuX2FwcGVuZF9lbnZpcm9ubWVudF92YXJpYWJsZV9wYXRoKGVudmlyb25t
ZW50LCAnRFlMRF9MSUJSQVJZX1BBVEgnLCBidWlsZF9yb290X3BhdGgpCiAgICAgICAgIHNlbGYu
X2FwcGVuZF9lbnZpcm9ubWVudF92YXJpYWJsZV9wYXRoKGVudmlyb25tZW50LCAnX19YUENfRFlM
RF9MSUJSQVJZX1BBVEgnLCBidWlsZF9yb290X3BhdGgpCiAgICAgICAgIHNlbGYuX2FwcGVuZF9l
bnZpcm9ubWVudF92YXJpYWJsZV9wYXRoKGVudmlyb25tZW50LCAnRFlMRF9GUkFNRVdPUktfUEFU
SCcsIGJ1aWxkX3Jvb3RfcGF0aCkKQEAgLTYxMCwyNCArNjExLDIwIEBAIGNsYXNzIERyaXZlcihv
YmplY3QpOgogCiAKICMgRklYTUU6IHRoaXMgc2hvdWxkIGJlIGFic3RyYWN0ZWQgb3V0IHZpYSB0
aGUgUG9ydCBzdWJjbGFzcyBzb21laG93LgotY2xhc3MgSU9TU2ltdWxhdG9yRHJpdmVyKERyaXZl
cik6CitjbGFzcyBEZXZpY2VEcml2ZXIoRHJpdmVyKToKICAgICBkZWYgY21kX2xpbmUoc2VsZiwg
cGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgotICAgICAgICBjbWQgPSBzdXBlcihJT1NTaW11
bGF0b3JEcml2ZXIsIHNlbGYpLmNtZF9saW5lKHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKQot
ICAgICAgICByZWxheV90b29sID0gc2VsZi5fcG9ydC5yZWxheV9wYXRoCisgICAgICAgIGNtZCA9
IHN1cGVyKERldmljZURyaXZlciwgc2VsZikuY21kX2xpbmUocGl4ZWxfdGVzdHMsIHBlcl90ZXN0
X2FyZ3MpCisgICAgICAgIHJlbGF5X3Rvb2wgPSAncnVuLW9uLWRldmljZScKICAgICAgICAgZHVt
cF90b29sID0gY21kWzBdCiAgICAgICAgIGR1bXBfdG9vbF9hcmdzID0gY21kWzE6XQogICAgICAg
ICBwcm9kdWN0X2RpciA9IHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoKQotICAgICAgICByZWxheV9h
cmdzID0gWwotICAgICAgICAgICAgJy1kZXZlbG9wZXJEaXInLCBzZWxmLl9wb3J0LmRldmVsb3Bl
cl9kaXIsCi0gICAgICAgICAgICAnLXVkaWQnLCBzZWxmLl9wb3J0LmRldmljZV9pZF9mb3Jfd29y
a2VyX251bWJlcihzZWxmLl93b3JrZXJfbnVtYmVyKSwKLSAgICAgICAgICAgICctcHJvZHVjdERp
cicsIHByb2R1Y3RfZGlyLAotICAgICAgICAgICAgJy1hcHAnLCBkdW1wX3Rvb2wsCi0gICAgICAg
IF0KLSAgICAgICAgcmV0dXJuIFtyZWxheV90b29sXSArIHJlbGF5X2FyZ3MgKyBbJy0tJ10gKyBk
dW1wX3Rvb2xfYXJncworCisgICAgICAgIHJlbGF5X2FyZ3MgPSBbc2VsZi5fcG9ydC5kZXZpY2Vf
aWRfZm9yX3dvcmtlcl9udW1iZXIoc2VsZi5fd29ya2VyX251bWJlciksIGR1bXBfdG9vbF0KKyAg
ICAgICAgcmV0dXJuIFtyZWxheV90b29sXSArIHJlbGF5X2FyZ3MgKyBkdW1wX3Rvb2xfYXJncwog
CiAgICAgZGVmIF9zZXR1cF9lbnZpcm9uX2Zvcl9kcml2ZXIoc2VsZiwgZW52aXJvbm1lbnQpOgog
ICAgICAgICBlbnZpcm9ubWVudFsnREVWRUxPUEVSX0RJUiddID0gc2VsZi5fcG9ydC5kZXZlbG9w
ZXJfZGlyCi0gICAgICAgIHJldHVybiBzdXBlcihJT1NTaW11bGF0b3JEcml2ZXIsIHNlbGYpLl9z
ZXR1cF9lbnZpcm9uX2Zvcl9kcml2ZXIoZW52aXJvbm1lbnQpCisgICAgICAgIHJldHVybiBzdXBl
cihEZXZpY2VEcml2ZXIsIHNlbGYpLl9zZXR1cF9lbnZpcm9uX2Zvcl9kcml2ZXIoZW52aXJvbm1l
bnQpCiAKIAogY2xhc3MgQ29udGVudEJsb2NrKG9iamVjdCk6CkluZGV4OiBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvaW9zLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9pb3MucHkJKHJldmlzaW9uIDIwOTkyNykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9pb3MucHkJKHdvcmtpbmcgY29weSkKQEAgLTM0LDE0ICszNCwxMDggQEAgZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzLnRlc3RfYwogZnJvbSB3ZWJraXRweS5wb3J0IGlt
cG9ydCBjb25maWcgYXMgcG9ydF9jb25maWcKIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgZHJp
dmVyLCBpbWFnZV9kaWZmCiBmcm9tIHdlYmtpdHB5LnBvcnQuZGFyd2luIGltcG9ydCBEYXJ3aW5Q
b3J0Ci1mcm9tIHdlYmtpdHB5Lnhjb2RlLnNpbXVsYXRvciBpbXBvcnQgU2ltdWxhdG9yLCBSdW50
aW1lLCBEZXZpY2VUeXBlCitmcm9tIHdlYmtpdHB5Lnhjb2RlLnNpbXVsYXRvciBpbXBvcnQgU2lt
dWxhdG9yLCBSdW50aW1lLCBEZXZpY2VUeXBlLCBEZXZpY2UKIGZyb20gd2Via2l0cHkuY29tbW9u
LnN5c3RlbS5jcmFzaGxvZ3MgaW1wb3J0IENyYXNoTG9ncwogCi0KIF9sb2cgPSBsb2dnaW5nLmdl
dExvZ2dlcihfX25hbWVfXykKIAogCi1jbGFzcyBJT1NQb3J0KERhcndpblBvcnQpOgorY2xhc3Mg
SU9TQmFzZShEYXJ3aW5Qb3J0KToKKworICAgIFNVQlBST0NFU1NfQ1JBU0hfUkVHRVggPSByZS5j
b21waWxlKCcjQ1JBU0hFRCAtICg/UDxzdWJwcm9jZXNzX25hbWU+XFMrKSBcKHBpZCAoP1A8c3Vi
cHJvY2Vzc19waWQ+XGQrKVwpJykKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0
X25hbWUsICoqa3dhcmdzKToKKyAgICAgICAgRGFyd2luUG9ydC5fX2luaXRfXyhzZWxmLCBob3N0
LCBwb3J0X25hbWUsICoqa3dhcmdzKQorICAgICAgICBzZWxmLl9wcmludGluZ19jbWRfbGluZSA9
IEZhbHNlCisKKyAgICBkZWYgZHJpdmVyX25hbWUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZ2V0
X29wdGlvbignZHJpdmVyX25hbWUnKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9vcHRp
b24oJ2RyaXZlcl9uYW1lJykKKyAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd3ZWJraXRfdGVz
dF9ydW5uZXInKToKKyAgICAgICAgICAgIHJldHVybiAnV2ViS2l0VGVzdFJ1bm5lckFwcC5hcHAn
CisgICAgICAgIHJldHVybiAnRHVtcFJlbmRlclRyZWUuYXBwJworCisgICAgZGVmIF9nZXRfY3Jh
c2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVf
Zm49dGltZS50aW1lLCBzbGVlcF9mbj10aW1lLnNsZWVwLCB3YWl0X2Zvcl9sb2c9VHJ1ZSk6Cisg
ICAgICAgIHRpbWVfZm4gPSB0aW1lX2ZuIG9yIHRpbWUudGltZQorICAgICAgICBzbGVlcF9mbiA9
IHNsZWVwX2ZuIG9yIHRpbWUuc2xlZXAKKworICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgY29s
bGVjdCB0aGUgYWN0dWFsIGNyYXNoIGxvZyBmb3IgRHVtcFJlbmRlclRyZWUuYXBwIGJlY2F1c2Ug
aXQgaW5jbHVkZXMgbW9yZQorICAgICAgICAjIGluZm9ybWF0aW9uIChlLmcuIGV4Y2VwdGlvbiBj
b2RlcykgdGhhbiBpcyBhdmFpbGFibGUgaW4gdGhlIHN0YWNrIHRyYWNlIHdyaXR0ZW4gdG8gc3Rh
bmRhcmQgZXJyb3IuCisgICAgICAgIHN0ZGVycl9saW5lcyA9IFtdCisgICAgICAgIGNyYXNoZWRf
c3VicHJvY2Vzc19uYW1lX2FuZF9waWQgPSBOb25lICAjIGUuZy4gKCdEdW1wUmVuZGVyVHJlZS5h
cHAnLCAxMjM0KQorICAgICAgICBmb3IgbGluZSBpbiAoc3RkZXJyIG9yICcnKS5zcGxpdGxpbmVz
KCk6CisgICAgICAgICAgICBpZiBub3QgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZDoK
KyAgICAgICAgICAgICAgICBtYXRjaCA9IHNlbGYuU1VCUFJPQ0VTU19DUkFTSF9SRUdFWC5tYXRj
aChsaW5lKQorICAgICAgICAgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgICAgICAgICBj
cmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlkID0gKG1hdGNoLmdyb3VwKCdzdWJwcm9jZXNz
X25hbWUnKSwgaW50KG1hdGNoLmdyb3VwKCdzdWJwcm9jZXNzX3BpZCcpKSkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHN0ZGVycl9saW5lcy5hcHBlbmQobGluZSkK
KworICAgICAgICBpZiBjcmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlkOgorICAgICAgICAg
ICAgcmV0dXJuIHNlbGYuX2dldF9jcmFzaF9sb2coY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5k
X3BpZFswXSwgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZFsxXSwgc3Rkb3V0LAorICAg
ICAgICAgICAgICAgICdcbicuam9pbihzdGRlcnJfbGluZXMpLCBuZXdlcl90aGFuLCB0aW1lX2Zu
LCBzbGVlcF9mbiwgd2FpdF9mb3JfbG9nKQorCisgICAgICAgIF9sb2cuZGVidWcoJ2xvb2tpbmcg
Zm9yIGNyYXNoIGxvZyBmb3IgJXM6JXMnICUgKG5hbWUsIHN0cihwaWQpKSkKKyAgICAgICAgY3Jh
c2hfbG9nID0gJycKKyAgICAgICAgY3Jhc2hfbG9ncyA9IENyYXNoTG9ncyhzZWxmLmhvc3QpCisg
ICAgICAgIG5vdyA9IHRpbWVfZm4oKQorICAgICAgICBkZWFkbGluZSA9IG5vdyArIDUgKiBpbnQo
c2VsZi5nZXRfb3B0aW9uKCdjaGlsZF9wcm9jZXNzZXMnLCAxKSkKKyAgICAgICAgd2hpbGUgbm90
IGNyYXNoX2xvZyBhbmQgbm93IDw9IGRlYWRsaW5lOgorICAgICAgICAgICAgY3Jhc2hfbG9nID0g
Y3Jhc2hfbG9ncy5maW5kX25ld2VzdF9sb2cobmFtZSwgcGlkLCBpbmNsdWRlX2Vycm9ycz1UcnVl
LCBuZXdlcl90aGFuPW5ld2VyX3RoYW4pCisgICAgICAgICAgICBpZiBub3Qgd2FpdF9mb3JfbG9n
OgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBub3QgY3Jhc2hfbG9nIG9y
IG5vdCBbbGluZSBmb3IgbGluZSBpbiBjcmFzaF9sb2cuc3BsaXRsaW5lcygpIGlmIG5vdCBsaW5l
LnN0YXJ0c3dpdGgoJ0VSUk9SJyldOgorICAgICAgICAgICAgICAgIHNsZWVwX2ZuKDAuMSkKKyAg
ICAgICAgICAgICAgICBub3cgPSB0aW1lX2ZuKCkKKworICAgICAgICBpZiBub3QgY3Jhc2hfbG9n
OgorICAgICAgICAgICAgcmV0dXJuIHN0ZGVyciwgTm9uZQorICAgICAgICByZXR1cm4gc3RkZXJy
LCBjcmFzaF9sb2cKKworICAgIGRlZiBfdGVzdGluZ19kZXZpY2Uoc2VsZiwgbnVtYmVyKToKKyAg
ICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBkZXZpY2VfaWRfZm9yX3dvcmtlcl9udW1iZXIo
c2VsZiwgbnVtYmVyKToKKyAgICAgICAgaWYgc2VsZi5fcHJpbnRpbmdfY21kX2xpbmUgb3Igbm90
IHNlbGYuX3Rlc3RpbmdfZGV2aWNlKG51bWJlcik6CisgICAgICAgICAgICByZXR1cm4gJzxkdW1t
eSBpZD4nCisgICAgICAgIHJldHVybiBzZWxmLl90ZXN0aW5nX2RldmljZShudW1iZXIpLnVkaWQK
KworICAgIGRlZiBfZHJpdmVyX2NsYXNzKHNlbGYpOgorICAgICAgICByZXR1cm4gZHJpdmVyLkRl
dmljZURyaXZlcgorCisgICAgZGVmIGRldmljZURlZmluZWQoc2VsZik6CisgICAgICAgIHJldHVy
biBUcnVlCisKKyAgICBkZWYgX2RldmljZVBpbmcoc2VsZiwgZGV2aWNlKToKKyAgICAgICAgcmV0
dXJuIEZhbHNlCisKKyAgICBkZWYgX2RldmljZUluc3RhbGwoc2VsZiwgZGV2aWNlLCBhcHApOgor
ICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBfZGV2aWNlUnVuKHNlbGYsIGNtZCwgZW52
aT1Ob25lKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBfZGV2aWNlS2lsbChzZWxm
LCBkZXZpY2UsIGFwcCk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHJ1bk9uRGV2
aWNlKHNlbGYsIGNtZCwgZW52aT1Ob25lKToKKyAgICAgICAgaWYgbm90IGNtZDoKKyAgICAgICAg
ICAgIHJldHVybiBOb25lCisgICAgICAgIGlmIGNtZFswXSA9PSAncGluZyc6CisgICAgICAgICAg
ICBpZiBsZW4oY21kKSA+PSAyOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9kZXZpY2VQ
aW5nKGNtZFsxXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNl
bGYuX2RldmljZVBpbmcoTm9uZSkKKyAgICAgICAgZWxpZiBjbWRbMF0gPT0gJ3J1bic6CisgICAg
ICAgICAgICByZXR1cm4gc2VsZi5fZGV2aWNlUnVuKGNtZFsxOl0sIGVudmkpCisgICAgICAgIGVs
aWYgY21kWzBdID09ICdpbnN0YWxsJzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9kZXZpY2VJ
bnN0YWxsKGNtZFsxXSwgY21kWzJdKQorICAgICAgICBlbGlmIGNtZFswXSA9PSAna2lsbCc6Cisg
ICAgICAgICAgICByZXR1cm4gc2VsZi5fZGV2aWNlS2lsbChjbWRbMV0sIGNtZFsyXSkKKyAgICAg
ICAgcmV0dXJuIE5vbmUKKworCitjbGFzcyBJT1NQb3J0KElPU0Jhc2UpOgogICAgIHBvcnRfbmFt
ZSA9ICJpb3MiCiAKICAgICBBUkNISVRFQ1RVUkVTID0gWydhcm12NycsICdhcm12N3MnLCAnYXJt
NjQnXQpAQCAtNjYsNyArMTYwLDcgQEAgY2xhc3MgSU9TUG9ydChEYXJ3aW5Qb3J0KToKICAgICAg
ICAgcmV0dXJuICdpb3MnCiAKIAotY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToK
K2NsYXNzIElPU1NpbXVsYXRvclBvcnQoSU9TQmFzZSk6CiAgICAgcG9ydF9uYW1lID0gImlvcy1z
aW11bGF0b3IiCiAKICAgICBGVVRVUkVfVkVSU0lPTiA9ICdmdXR1cmUnCkBAIC03OCw3ICsxNzIs
NiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgIFNESyA9ICdpcGhv
bmVzaW11bGF0b3InCiAKICAgICBTSU1VTEFUT1JfQlVORExFX0lEID0gJ2NvbS5hcHBsZS5pcGhv
bmVzaW11bGF0b3InCi0gICAgcmVsYXlfbmFtZSA9ICdMYXlvdXRUZXN0UmVsYXknCiAgICAgU0lN
VUxBVE9SX0RJUkVDVE9SWSA9ICIvdG1wL1dlYktpdFRlc3RpbmdTaW11bGF0b3JzLyIKICAgICBM
U1JFR0lTVEVSX1BBVEggPSAiL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29yZVNlcnZpY2Vz
LmZyYW1ld29yay9GcmFtZXdvcmtzL0xhdW5jaFNlcnZpY2VzLmZyYW1ld29yay9WZXJzaW9ucy9D
dXJyZW50L1N1cHBvcnQvbHNyZWdpc3RlciIKICAgICBQUk9DRVNTX0NPVU5UX0VTVElNQVRFX1BF
Ul9TSU1VTEFUT1JfSU5TVEFOQ0UgPSAxMDAKQEAgLTk2LDEwICsxODksOSBAQCBjbGFzcyBJT1NT
aW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgIH0KIAogICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKToKLSAgICAgICAgRGFyd2luUG9ydC5fX2luaXRf
XyhzZWxmLCBob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKQorICAgICAgICBJT1NCYXNlLl9faW5p
dF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpCiAKICAgICAgICAgb3B0aW9uYWxf
ZGV2aWNlX2NsYXNzID0gc2VsZi5nZXRfb3B0aW9uKCdkZXZpY2VfY2xhc3MnKQotICAgICAgICBz
ZWxmLl9wcmludGluZ19jbWRfbGluZSA9IEZhbHNlCiAgICAgICAgIHNlbGYuX2RldmljZV9jbGFz
cyA9IG9wdGlvbmFsX2RldmljZV9jbGFzcyBpZiBvcHRpb25hbF9kZXZpY2VfY2xhc3MgZWxzZSBz
ZWxmLkRFRkFVTFRfREVWSUNFX0NMQVNTCiAgICAgICAgIF9sb2cuZGVidWcoJ0lPU1NpbXVsYXRv
clBvcnQgX2RldmljZV9jbGFzcyBpcyAlcycsIHNlbGYuX2RldmljZV9jbGFzcykKIApAQCAtMTQ4
LDE2ICsyNDAsNiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgICAg
ICAgICAgZGV2aWNlX3R5cGUgPSBEZXZpY2VUeXBlLmZyb21fbmFtZShkZXZpY2VfbmFtZSkKICAg
ICAgICAgcmV0dXJuIGRldmljZV90eXBlCiAKLSAgICBAcHJvcGVydHkKLSAgICBAbWVtb2l6ZWQK
LSAgICBkZWYgcmVsYXlfcGF0aChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fcm9vdF93YXNfc2V0
OgotICAgICAgICAgICAgcGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0uYWJzcGF0aChzZWxmLmdldF9v
cHRpb24oJ3Jvb3QnKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1hY19jb25maWcgPSBw
b3J0X2NvbmZpZy5Db25maWcoc2VsZi5fZXhlY3V0aXZlLCBzZWxmLl9maWxlc3lzdGVtLCAnbWFj
JykKLSAgICAgICAgICAgIHBhdGggPSBtYWNfY29uZmlnLmJ1aWxkX2RpcmVjdG9yeShzZWxmLmdl
dF9vcHRpb24oJ2NvbmZpZ3VyYXRpb24nKSkKLSAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0
ZW0uam9pbihwYXRoLCBzZWxmLnJlbGF5X25hbWUpCi0KICAgICBAbWVtb2l6ZWQKICAgICBkZWYg
Y2hpbGRfcHJvY2Vzc2VzKHNlbGYpOgogICAgICAgICByZXR1cm4gaW50KHNlbGYuZ2V0X29wdGlv
bignY2hpbGRfcHJvY2Vzc2VzJykpCkBAIC0xODIsNzUgKzI2NCwxMiBAQCBjbGFzcyBJT1NTaW11
bGF0b3JQb3J0KERhcndpblBvcnQpOgogCiAgICAgICAgIHJldHVybiBtaW4obWF4aW11bV9zaW11
bGF0b3JfY291bnRfb25fdGhpc19zeXN0ZW0sIGJlc3RfY2hpbGRfcHJvY2Vzc19jb3VudF9mb3Jf
Y3B1KQogCi0gICAgZGVmIF9jaGVja19yZWxheShzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYu
X2ZpbGVzeXN0ZW0uZXhpc3RzKHNlbGYucmVsYXlfcGF0aCk6Ci0gICAgICAgICAgICBfbG9nLmVy
cm9yKCIlcyB3YXMgbm90IGZvdW5kIGF0ICVzIiAlIChzZWxmLnJlbGF5X25hbWUsIHNlbGYucmVs
YXlfcGF0aCkpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRydWUK
LQogICAgIGRlZiBfY2hlY2tfcG9ydF9idWlsZChzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYu
X3Jvb3Rfd2FzX3NldCBhbmQgc2VsZi5nZXRfb3B0aW9uKCdidWlsZCcpIGFuZCBub3Qgc2VsZi5f
YnVpbGRfcmVsYXkoKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBpZiBub3Qg
c2VsZi5fY2hlY2tfcmVsYXkoKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBy
ZXR1cm4gVHJ1ZQotCi0gICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rk
b3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49dGltZS50aW1lLCBzbGVlcF9mbj10aW1l
LnNsZWVwLCB3YWl0X2Zvcl9sb2c9VHJ1ZSk6Ci0gICAgICAgIHRpbWVfZm4gPSB0aW1lX2ZuIG9y
IHRpbWUudGltZQotICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9yIHRpbWUuc2xlZXAKLQot
ICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgY29sbGVjdCB0aGUgYWN0dWFsIGNyYXNoIGxvZyBm
b3IgRHVtcFJlbmRlclRyZWUuYXBwIGJlY2F1c2UgaXQgaW5jbHVkZXMgbW9yZQotICAgICAgICAj
IGluZm9ybWF0aW9uIChlLmcuIGV4Y2VwdGlvbiBjb2RlcykgdGhhbiBpcyBhdmFpbGFibGUgaW4g
dGhlIHN0YWNrIHRyYWNlIHdyaXR0ZW4gdG8gc3RhbmRhcmQgZXJyb3IuCi0gICAgICAgIHN0ZGVy
cl9saW5lcyA9IFtdCi0gICAgICAgIGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9waWQgPSBO
b25lICAjIGUuZy4gKCdEdW1wUmVuZGVyVHJlZS5hcHAnLCAxMjM0KQotICAgICAgICBmb3IgbGlu
ZSBpbiAoc3RkZXJyIG9yICcnKS5zcGxpdGxpbmVzKCk6Ci0gICAgICAgICAgICBpZiBub3QgY3Jh
c2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZDoKLSAgICAgICAgICAgICAgICBtYXRjaCA9IHNl
bGYuU1VCUFJPQ0VTU19DUkFTSF9SRUdFWC5tYXRjaChsaW5lKQotICAgICAgICAgICAgICAgIGlm
IG1hdGNoOgotICAgICAgICAgICAgICAgICAgICBjcmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRf
cGlkID0gKG1hdGNoLmdyb3VwKCdzdWJwcm9jZXNzX25hbWUnKSwgaW50KG1hdGNoLmdyb3VwKCdz
dWJwcm9jZXNzX3BpZCcpKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAg
ICAgIHN0ZGVycl9saW5lcy5hcHBlbmQobGluZSkKLQotICAgICAgICBpZiBjcmFzaGVkX3N1YnBy
b2Nlc3NfbmFtZV9hbmRfcGlkOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9jcmFzaF9s
b2coY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZFswXSwgY3Jhc2hlZF9zdWJwcm9jZXNz
X25hbWVfYW5kX3BpZFsxXSwgc3Rkb3V0LAotICAgICAgICAgICAgICAgICdcbicuam9pbihzdGRl
cnJfbGluZXMpLCBuZXdlcl90aGFuLCB0aW1lX2ZuLCBzbGVlcF9mbiwgd2FpdF9mb3JfbG9nKQot
Ci0gICAgICAgICMgTGF5b3V0VGVzdFJlbGF5IGNyYXNoZWQKLSAgICAgICAgX2xvZy5kZWJ1Zygn
bG9va2luZyBmb3IgY3Jhc2ggbG9nIGZvciAlczolcycgJSAobmFtZSwgc3RyKHBpZCkpKQotICAg
ICAgICBjcmFzaF9sb2cgPSAnJwotICAgICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hMb2dzKHNlbGYu
aG9zdCkKLSAgICAgICAgbm93ID0gdGltZV9mbigpCi0gICAgICAgIGRlYWRsaW5lID0gbm93ICsg
NSAqIGludChzZWxmLmdldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpKQotICAgICAgICB3
aGlsZSBub3QgY3Jhc2hfbG9nIGFuZCBub3cgPD0gZGVhZGxpbmU6Ci0gICAgICAgICAgICBjcmFz
aF9sb2cgPSBjcmFzaF9sb2dzLmZpbmRfbmV3ZXN0X2xvZyhuYW1lLCBwaWQsIGluY2x1ZGVfZXJy
b3JzPVRydWUsIG5ld2VyX3RoYW49bmV3ZXJfdGhhbikKLSAgICAgICAgICAgIGlmIG5vdCB3YWl0
X2Zvcl9sb2c6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGlmIG5vdCBjcmFz
aF9sb2cgb3Igbm90IFtsaW5lIGZvciBsaW5lIGluIGNyYXNoX2xvZy5zcGxpdGxpbmVzKCkgaWYg
bm90IGxpbmUuc3RhcnRzd2l0aCgnRVJST1InKV06Ci0gICAgICAgICAgICAgICAgc2xlZXBfZm4o
MC4xKQotICAgICAgICAgICAgICAgIG5vdyA9IHRpbWVfZm4oKQotCi0gICAgICAgIGlmIG5vdCBj
cmFzaF9sb2c6Ci0gICAgICAgICAgICByZXR1cm4gc3RkZXJyLCBOb25lCi0gICAgICAgIHJldHVy
biBzdGRlcnIsIGNyYXNoX2xvZwotCi0gICAgZGVmIF9idWlsZF9yZWxheShzZWxmKToKLSAgICAg
ICAgZW52aXJvbm1lbnQgPSBzZWxmLmhvc3QuY29weV9jdXJyZW50X2Vudmlyb25tZW50KCkKLSAg
ICAgICAgZW52aXJvbm1lbnQuZGlzYWJsZV9nY2Nfc21hcnRxdW90ZXMoKQotICAgICAgICBlbnYg
PSBlbnZpcm9ubWVudC50b19kaWN0aW9uYXJ5KCkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAg
ICAjIEZJWE1FOiBXZSBzaG91bGQgYmUgcGFzc2luZyBfYXJndW1lbnRzX2Zvcl9jb25maWd1cmF0
aW9uKCksIHdoaWNoIHJlc3BlY3RzIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIHBvcnQsCi0gICAg
ICAgICAgICAjIGluc3RlYWQgb2YgaGFyZGNvZGluZyAtLWlvcy1zaW11bGF0b3IuCi0gICAgICAg
ICAgICBzZWxmLl9ydW5fc2NyaXB0KCJidWlsZC1sYXlvdXR0ZXN0cmVsYXkiLCBhcmdzPVsiLS1p
b3Mtc2ltdWxhdG9yIl0sIGVudj1lbnYpCi0gICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvciwgZToK
LSAgICAgICAgICAgIF9sb2cuZXJyb3IoZS5tZXNzYWdlX3dpdGhfb3V0cHV0KG91dHB1dF9saW1p
dD1Ob25lKSkKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICByZXR1cm4gVHJ1ZQog
CiAgICAgZGVmIF9idWlsZF9kcml2ZXIoc2VsZik6CiAgICAgICAgIGJ1aWx0X3Rvb2wgPSBzdXBl
cihJT1NTaW11bGF0b3JQb3J0LCBzZWxmKS5fYnVpbGRfZHJpdmVyKCkKLSAgICAgICAgYnVpbHRf
cmVsYXkgPSBzZWxmLl9idWlsZF9yZWxheSgpCi0gICAgICAgIHJldHVybiBidWlsdF90b29sIGFu
ZCBidWlsdF9yZWxheQorICAgICAgICByZXR1cm4gYnVpbHRfdG9vbAogCiAgICAgZGVmIF9idWls
ZF9kcml2ZXJfZmxhZ3Moc2VsZik6CiAgICAgICAgIGFyY2hzID0gWydBUkNIUz1pMzg2J10gaWYg
c2VsZi5hcmNoaXRlY3R1cmUoKSA9PSAneDg2JyBlbHNlIFtdCkBAIC0yNjQsOSArMjgzLDYgQEAg
Y2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgICAgICAgICBjb25m
aWd1cmF0aW9ucy5hcHBlbmQoVGVzdENvbmZpZ3VyYXRpb24odmVyc2lvbj1zZWxmLl92ZXJzaW9u
LCBhcmNoaXRlY3R1cmU9YXJjaGl0ZWN0dXJlLCBidWlsZF90eXBlPWJ1aWxkX3R5cGUpKQogICAg
ICAgICByZXR1cm4gY29uZmlndXJhdGlvbnMKIAotICAgIGRlZiBfZHJpdmVyX2NsYXNzKHNlbGYp
OgotICAgICAgICByZXR1cm4gZHJpdmVyLklPU1NpbXVsYXRvckRyaXZlcgotCiAgICAgZGVmIGRl
ZmF1bHRfYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuZ2V0X29w
dGlvbignd2Via2l0X3Rlc3RfcnVubmVyJyk6CiAgICAgICAgICAgICBmYWxsYmFja19uYW1lcyA9
IFtzZWxmLl93azJfcG9ydF9uYW1lKCldICsgW3NlbGYucG9ydF9uYW1lXSArIFsnd2syJ10KQEAg
LTM5OSw4ICs0MTUsNiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAg
ICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIHJldHVybiBzdXBlcihJT1NTaW11bGF0b3JQ
b3J0LCBzZWxmKS5jaGVja19zeXNfZGVwcyhuZWVkc19odHRwKQogCi0gICAgU1VCUFJPQ0VTU19D
UkFTSF9SRUdFWCA9IHJlLmNvbXBpbGUoJyNDUkFTSEVEIC0gKD9QPHN1YnByb2Nlc3NfbmFtZT5c
UyspIFwocGlkICg/UDxzdWJwcm9jZXNzX3BpZD5cZCspXCknKQotCiAgICAgZGVmIF91c2luZ19k
ZWRpY2F0ZWRfc2ltdWxhdG9ycyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X29wdGlv
bignZGVkaWNhdGVkX3NpbXVsYXRvcnMnKQogCkBAIC00NzUsMyArNDg5LDU3IEBAIGNsYXNzIElP
U1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0
cHV0KFsiaW5zdGFsbF9uYW1lX3Rvb2wiLCAiLWFkZF9ycGF0aCIsIHNlbGYuZGV2ZWxvcGVyX2Rp
ciArICIvLi4vRnJhbWV3b3Jrcy8iLCBkZXN0aW5hdGlvbiArICIvQ29udGVudHMvTWFjT1MvU2lt
dWxhdG9yIl0pCiAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsiY29kZXNpZ24iLCAi
LWZzIiwgIi0iLCBkZXN0aW5hdGlvbl0pCiAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0
KFtzZWxmLkxTUkVHSVNURVJfUEFUSCwgIi1mIiwgZGVzdGluYXRpb25dKQorCisgICAgZGVmIF9k
ZXZpY2VQaW5nKHNlbGYsIGRldmljZSk6CisgICAgICAgIGRhdGEgPSBzZWxmLl9leGVjdXRpdmUu
cnVuX2NvbW1hbmQoWyd4Y3J1bicsICdzaW1jdGwnLCAnbGlzdCddKQorICAgICAgICBpZiBkZXZp
Y2UgYW5kIGRldmljZSArICcpIChCb290ZWQpJyBpbiBkYXRhOgorICAgICAgICAgICAgcmV0dXJu
IFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX2RldmljZUluc3RhbGwoc2Vs
ZiwgZGV2aWNlLCBhcHApOgorICAgICAgICBpZiBub3Qgc2VsZi5fZGV2aWNlUGluZyhkZXZpY2Up
OgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBub3Qgc2VsZi5fZXhl
Y3V0aXZlLnJ1bl9jb21tYW5kKFsKKyAgICAgICAgICAgICd4Y3J1bicsCisgICAgICAgICAgICAn
c2ltY3RsJywKKyAgICAgICAgICAgICdpbnN0YWxsJywKKyAgICAgICAgICAgIGRldmljZSwKKyAg
ICAgICAgICAgIGFwcCwKKyAgICAgICAgXSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKQorCisgICAg
ZGVmIF9kZXZpY2VSdW4oc2VsZiwgY21kLCBlbnZpPU5vbmUpOgorICAgICAgICBpZiBub3Qgc2Vs
Zi5fZGV2aWNlUGluZyhjbWRbMF0pOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAg
IGFwcGlkID0gc2VsZi5leHRyYWN0QnVuZGxlSUQoY21kWzFdKQorICAgICAgICBpZiBub3QgYXBw
aWQ6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgc2VsZi5fZGV2aWNlS2lsbChj
bWRbMF0sIGNtZFsxXSkKKworICAgICAgICB0cmFuc2ZlcmVkRW52aXJvbm1lbnQgPSB7fQorICAg
ICAgICBmb3IgdmFsdWUgaW4gZW52aToKKyAgICAgICAgICAgIGlmIG5vdCAiU0lNQ1RMX0NISUxE
XyIgaW4gdmFsdWU6CisgICAgICAgICAgICAgICAgdHJhbnNmZXJlZEVudmlyb25tZW50WydTSU1D
VExfQ0hJTERfJyArIHZhbHVlXSA9IGVudmlbdmFsdWVdCisgICAgICAgICAgICB0cmFuc2ZlcmVk
RW52aXJvbm1lbnRbdmFsdWVdID0gZW52aVt2YWx1ZV0KKworICAgICAgICByZXR1cm4gbm90IHNl
bGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbCisgICAgICAgICAgICAneGNydW4nLAorICAgICAg
ICAgICAgJ3NpbWN0bCcsCisgICAgICAgICAgICAnbGF1bmNoJywKKyAgICAgICAgICAgIGNtZFsw
XSwKKyAgICAgICAgICAgIGFwcGlkLAorICAgICAgICBdICsgY21kWzI6XSwKKyAgICAgICAgZW52
PXRyYW5zZmVyZWRFbnZpcm9ubWVudCwKKyAgICAgICAgcmV0dXJuX2V4aXRfY29kZT1UcnVlKQor
ICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9kZXZpY2VLaWxsKHNlbGYsIGRldmljZSwg
YXBwKToKKyAgICAgICAgYWRkaWQgPSBzZWxmLmV4dHJhY3RCdW5kbGVJRChhcHApCisgICAgICAg
IGlmIG5vdCBhZGRpZDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4g
bm90IHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbCisgICAgICAgICAgICAneGNydW4nLAor
ICAgICAgICAgICAgJ3NpbWN0bCcsCisgICAgICAgICAgICAndGVybWluYXRlJywKKyAgICAgICAg
ICAgIGRldmljZSwKKyAgICAgICAgICAgIGFkZGlkLAorICAgICAgICBdLCByZXR1cm5fZXhpdF9j
b2RlPVRydWUpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRl
c3QucHkJKHJldmlzaW9uIDIwOTkyNykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9p
b3NfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDkgQEAKIAogaW1wb3J0
IHRpbWUKIAorZnJvbSB3ZWJraXRweS5wb3J0LmlvcyBpbXBvcnQgSU9TUG9ydAogZnJvbSB3ZWJr
aXRweS5wb3J0LmlvcyBpbXBvcnQgSU9TU2ltdWxhdG9yUG9ydAotZnJvbSB3ZWJraXRweS5wb3J0
IGltcG9ydCBkYXJ3aW5fdGVzdGNhc2UKK2Zyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgaW9zYmFz
ZV90ZXN0Y2FzZQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW1fbW9jayBp
bXBvcnQgTW9ja0ZpbGVTeXN0ZW0KIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5vdXRwdXRj
YXB0dXJlIGltcG9ydCBPdXRwdXRDYXB0dXJlCiBmcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wg
aW1wb3J0IE1vY2tPcHRpb25zCkBAIC0zMSw3ICszMiwyMCBAQCBmcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0uZXhlY3V0aXZlX21vCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVt
aG9zdF9tb2NrIGltcG9ydCBNb2NrU3lzdGVtSG9zdAogCiAKLWNsYXNzIGlvc1Rlc3QoZGFyd2lu
X3Rlc3RjYXNlLkRhcndpblRlc3QpOgorY2xhc3MgSU9TVGVzdChpb3NiYXNlX3Rlc3RjYXNlLklP
U0Jhc2VUZXN0KToKKyAgICBvc19uYW1lID0gJ2lvcycKKyAgICBvc192ZXJzaW9uID0gJycKKyAg
ICBwb3J0X25hbWUgPSAnaW9zJworICAgIHBvcnRfbWFrZXIgPSBJT1NQb3J0CisgICAgaXNfc2lt
dWxhdG9yID0gRmFsc2UKKworICAgIGRlZiBtYWtlX3BvcnQoc2VsZiwgaG9zdD1Ob25lLCBwb3J0
X25hbWU9Tm9uZSwgb3B0aW9ucz1Ob25lLCBvc19uYW1lPU5vbmUsIG9zX3ZlcnNpb249Tm9uZSwg
Kiprd2FyZ3MpOgorICAgICAgICBwb3J0ID0gc3VwZXIoSU9TVGVzdCwgc2VsZikubWFrZV9wb3J0
KGhvc3Q9aG9zdCwgcG9ydF9uYW1lPXBvcnRfbmFtZSwgb3B0aW9ucz1vcHRpb25zLCBvc19uYW1l
PW9zX25hbWUsIHNfdmVyc2lvbj1vc192ZXJzaW9uLCBrd2FyZ3M9a3dhcmdzKQorICAgICAgICBw
b3J0LnNldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpCisgICAgICAgIHJldHVybiBwb3J0
CisKKworY2xhc3MgSU9TU2ltdWxhdG9yVGVzdChpb3NiYXNlX3Rlc3RjYXNlLklPU0Jhc2VUZXN0
KToKICAgICBvc19uYW1lID0gJ2lvcy1zaW11bGF0b3InCiAgICAgb3NfdmVyc2lvbiA9ICcnCiAg
ICAgcG9ydF9uYW1lID0gJ2lvcy1zaW11bGF0b3InCkBAIC0zOSw3ICs1Myw3IEBAIGNsYXNzIGlv
c1Rlc3QoZGFyd2luX3Rlc3RjYXNlLkRhcndpblRlc3QKICAgICBpc19zaW11bGF0b3IgPSBUcnVl
CiAKICAgICBkZWYgbWFrZV9wb3J0KHNlbGYsIGhvc3Q9Tm9uZSwgcG9ydF9uYW1lPU5vbmUsIG9w
dGlvbnM9Tm9uZSwgb3NfbmFtZT1Ob25lLCBvc192ZXJzaW9uPU5vbmUsICoqa3dhcmdzKToKLSAg
ICAgICAgcG9ydCA9IHN1cGVyKGlvc1Rlc3QsIHNlbGYpLm1ha2VfcG9ydChob3N0PWhvc3QsIHBv
cnRfbmFtZT1wb3J0X25hbWUsIG9wdGlvbnM9b3B0aW9ucywgb3NfbmFtZT1vc19uYW1lLCBzX3Zl
cnNpb249b3NfdmVyc2lvbiwga3dhcmdzPWt3YXJncykKKyAgICAgICAgcG9ydCA9IHN1cGVyKElP
U1NpbXVsYXRvclRlc3QsIHNlbGYpLm1ha2VfcG9ydChob3N0PWhvc3QsIHBvcnRfbmFtZT1wb3J0
X25hbWUsIG9wdGlvbnM9b3B0aW9ucywgb3NfbmFtZT1vc19uYW1lLCBzX3ZlcnNpb249b3NfdmVy
c2lvbiwga3dhcmdzPWt3YXJncykKICAgICAgICAgcG9ydC5zZXRfb3B0aW9uKCdjaGlsZF9wcm9j
ZXNzZXMnLCAxKQogICAgICAgICByZXR1cm4gcG9ydAogCkBAIC01MywxNCArNjcsNiBAQCBjbGFz
cyBpb3NUZXN0KGRhcndpbl90ZXN0Y2FzZS5EYXJ3aW5UZXN0CiAgICAgZGVmIHRlc3Rfb3BlcmF0
aW5nX3N5c3RlbShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaW9zLXNpbXVsYXRv
cicsIHNlbGYubWFrZV9wb3J0KCkub3BlcmF0aW5nX3N5c3RlbSgpKQogCi0gICAgZGVmIHRlc3Rf
Z2V0X2NyYXNoX2xvZyhzZWxmKToKLSAgICAgICAgIyBNYWMgY3Jhc2ggbG9ncyBhcmUgdGVzdGVk
IGVsc2V3aGVyZSwgc28gaGVyZSB3ZSBqdXN0IG1ha2Ugc3VyZSB3ZSBkb24ndCBjcmFzaC4KLSAg
ICAgICAgZGVmIGZha2VfdGltZV9jYigpOgotICAgICAgICAgICAgdGltZXMgPSBbMCwgMjAsIDQw
XQotICAgICAgICAgICAgcmV0dXJuIGxhbWJkYTogdGltZXMucG9wKDApCi0gICAgICAgIHBvcnQg
PSBzZWxmLm1ha2VfcG9ydChwb3J0X25hbWU9J2lvcy1zaW11bGF0b3InKQotICAgICAgICBwb3J0
Ll9nZXRfY3Jhc2hfbG9nKCdEdW1wUmVuZGVyVHJlZScsIDEyMzQsIE5vbmUsIE5vbmUsIHRpbWUu
dGltZSgpLCB3YWl0X2Zvcl9sb2c9RmFsc2UpCi0KICAgICBkZWYgdGVzdF8zMmJpdChzZWxmKToK
ICAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KG9wdGlvbnM9TW9ja09wdGlvbnMoYXJjaGl0
ZWN0dXJlPSd4ODYnKSkKIApAQCAtNzAsNyArNzYsNyBAQCBjbGFzcyBpb3NUZXN0KGRhcndpbl90
ZXN0Y2FzZS5EYXJ3aW5UZXN0CiAgICAgICAgIHBvcnQuX3J1bl9zY3JpcHQgPSBydW5fc2NyaXB0
CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5hcmNoaXRlY3R1cmUoKSwgJ3g4NicpCiAg
ICAgICAgIHBvcnQuX2J1aWxkX2RyaXZlcigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vs
Zi5hcmdzLCBbJy0taW9zLXNpbXVsYXRvciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNl
bGYuYXJncywgWydBUkNIUz1pMzg2JywgJy0tc2RrJywgJ2lwaG9uZXNpbXVsYXRvciddKQogCiAg
ICAgZGVmIHRlc3RfNjRiaXQoc2VsZik6CiAgICAgICAgICMgQXBwbGUgTWFjIHBvcnQgaXMgNjQt
Yml0IGJ5IGRlZmF1bHQKQEAgLTgyLDcgKzg4LDcgQEAgY2xhc3MgaW9zVGVzdChkYXJ3aW5fdGVz
dGNhc2UuRGFyd2luVGVzdAogCiAgICAgICAgIHBvcnQuX3J1bl9zY3JpcHQgPSBydW5fc2NyaXB0
CiAgICAgICAgIHBvcnQuX2J1aWxkX2RyaXZlcigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
c2VsZi5hcmdzLCBbJy0taW9zLXNpbXVsYXRvciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHNlbGYuYXJncywgWyctLXNkaycsICdpcGhvbmVzaW11bGF0b3InXSkKIAogICAgIGRlZiB0ZXN0
X3Nka19uYW1lKHNlbGYpOgogICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQpAQCAtOTcs
MyArMTAzLDcgQEAgY2xhc3MgaW9zVGVzdChkYXJ3aW5fdGVzdGNhc2UuRGFyd2luVGVzdAogICAg
ICAgICBwb3J0Ll9leGVjdXRpdmUgPSBNb2NrRXhlY3V0aXZlMihydW5fY29tbWFuZF9mbj10aHJv
d2luZ19ydW5fY29tbWFuZCkKICAgICAgICAgZXhwZWN0ZWRfc3Rkb3V0ID0gIlsneGNydW4nLCAn
LS1zZGsnLCAnaXBob25lc2ltdWxhdG9yJywgJy1maW5kJywgJ3Rlc3QnXVxuIgogICAgICAgICBP
dXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1dHMoc2VsZiwgcG9ydC54Y3J1bl9maW5kLCBhcmdz
PVsndGVzdCcsICdmYWxsaW5nJ10sIGV4cGVjdGVkX3N0ZG91dD1leHBlY3RlZF9zdGRvdXQpCisK
KyAgICBkZWYgdGVzdF9waW5nKHNlbGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQo
KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBvcnQucnVuT25EZXZpY2UoWydwaW5nJywgJzxk
ZXZpZD4nXSkpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zYmFzZV90ZXN0
Y2FzZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zYmFz
ZV90ZXN0Y2FzZS5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvaW9zYmFzZV90ZXN0Y2FzZS5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisj
IENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHRpbWUK
KworZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBkYXJ3aW5fdGVzdGNhc2UKKworCitjbGFzcyBJ
T1NCYXNlVGVzdChkYXJ3aW5fdGVzdGNhc2UuRGFyd2luVGVzdCk6CisKKyAgICBkZWYgdGVzdF9k
ZXZpY2VGbGFnKHNlbGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQorICAgICAg
ICBzZWxmLmFzc2VydFRydWUocG9ydC5kZXZpY2VEZWZpbmVkKCkpCisKKyAgICBkZWYgdGVzdF9n
ZXRfY3Jhc2hfbG9nKHNlbGYpOgorICAgICAgICAjIE1hYyBjcmFzaCBsb2dzIGFyZSB0ZXN0ZWQg
ZWxzZXdoZXJlLCBzbyBoZXJlIHdlIGp1c3QgbWFrZSBzdXJlIHdlIGRvbid0IGNyYXNoLgorICAg
ICAgICBkZWYgZmFrZV90aW1lX2NiKCk6CisgICAgICAgICAgICB0aW1lcyA9IFswLCAyMCwgNDBd
CisgICAgICAgICAgICByZXR1cm4gbGFtYmRhOiB0aW1lcy5wb3AoMCkKKyAgICAgICAgcG9ydCA9
IHNlbGYubWFrZV9wb3J0KHBvcnRfbmFtZT0naW9zLXNpbXVsYXRvcicpCisgICAgICAgIHBvcnQu
X2dldF9jcmFzaF9sb2coJ0R1bXBSZW5kZXJUcmVlJywgMTIzNCwgTm9uZSwgTm9uZSwgdGltZS50
aW1lKCksIHdhaXRfZm9yX2xvZz1GYWxzZSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvc2VydmVyX3Byb2Nlc3MucHkJKHJldmlzaW9uIDIwOTkyNykKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzAsMTAgKzMxLDEzIEBACiAKIGltcG9ydCBlcnJu
bwogaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcKIGltcG9ydCBzaWduYWwK
IGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCiAKK2Zyb20gd2Via2l0cHkuY29tbW9uLmlwY19waXBl
IGltcG9ydCBQcm9jZXNzUGlwZSwgVW5peFBpcGUKKwogIyBOb3RlIHRoYXQgYWx0aG91Z2ggd2lu
MzIgcHl0aG9uIGRvZXMgcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBvZgogIyB0aGUgd2luMzIg
c2VsZWN0IEFQSSwgaXQgb25seSB3b3JrcyBvbiBzb2NrZXRzLCBhbmQgbm90IG9uIHRoZSBuYW1l
ZCBwaXBlcwogIyB1c2VkIGJ5IHN1YnByb2Nlc3MsIHNvIHdlIGhhdmUgdG8gdXNlIHRoZSBuYXRp
dmUgQVBJcyBkaXJlY3RseS4KQEAgLTcxLDMyICs3NSwyNSBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNz
KG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2hvc3QgPSBzZWxmLl9wb3J0Lmhvc3QKICAgICAgICAg
c2VsZi5fcGlkID0gTm9uZQogICAgICAgICBzZWxmLl9yZXNldCgpCi0KLSAgICAgICAgIyBTZWUg
Y29tbWVudCBpbiBpbXBvcnRzIGZvciB3aHkgd2UgbmVlZCB0aGUgd2luMzIgQVBJcyBhbmQgY2Fu
J3QganVzdCB1c2Ugc2VsZWN0LgotICAgICAgICAjIEZJWE1FOiB0aGVyZSBzaG91bGQgYmUgYSB3
YXkgdG8gZ2V0IHdpbjMyIHZzLiBjeWd3aW4gZnJvbSBwbGF0Zm9ybWluZm8uCisgICAgICAgIHNl
bGYuX3BpcGUgPSBOb25lCiAgICAgICAgIHNlbGYuX3VzZV93aW4zMl9hcGlzID0gc3lzLnBsYXRm
b3JtLnN0YXJ0c3dpdGgoJ3dpbicpCiAKKyAgICAgICAgaWYgInJ1bi1vbi1kZXZpY2UiID09IHNl
bGYuX2NtZFswXToKKyAgICAgICAgICAgIHNlbGYuX3BvcnQucnVuT25EZXZpY2UoWydpbnN0YWxs
Jywgc2VsZi5fY21kWzFdLCBzZWxmLl9jbWRbMl1dKQorCiAgICAgZGVmIG5hbWUoc2VsZik6CiAg
ICAgICAgIHJldHVybiBzZWxmLl9uYW1lCiAKICAgICBkZWYgcGlkKHNlbGYpOgogICAgICAgICBy
ZXR1cm4gc2VsZi5fcGlkCiAKKyAgICBkZWYgY2xlYW4oc2VsZik6CisgICAgICAgIHNlbGYuX3Bp
cGUuY2xlYW4oKQorCiAgICAgZGVmIF9yZXNldChzZWxmKToKLSAgICAgICAgaWYgZ2V0YXR0cihz
ZWxmLCAnX3Byb2MnLCBOb25lKToKLSAgICAgICAgICAgIGlmIHNlbGYuX3Byb2Muc3RkaW46Ci0g
ICAgICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRpbi5jbG9zZSgpCi0gICAgICAgICAgICAgICAg
c2VsZi5fcHJvYy5zdGRpbiA9IE5vbmUKLSAgICAgICAgICAgIGlmIHNlbGYuX3Byb2Muc3Rkb3V0
OgotICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3Rkb3V0LmNsb3NlKCkKLSAgICAgICAgICAg
ICAgICBzZWxmLl9wcm9jLnN0ZG91dCA9IE5vbmUKLSAgICAgICAgICAgIGlmIHNlbGYuX3Byb2Mu
c3RkZXJyOgotICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkZXJyLmNsb3NlKCkKLSAgICAg
ICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGVyciA9IE5vbmUKLQotICAgICAgICBzZWxmLl9wcm9j
ID0gTm9uZQotICAgICAgICBzZWxmLl9vdXRwdXQgPSBzdHIoKSAgIyBieXRlc2FycmF5KCkgb25j
ZSB3ZSByZXF1aXJlIFB5dGhvbiAyLjYKLSAgICAgICAgc2VsZi5fZXJyb3IgPSBzdHIoKSAgIyBi
eXRlc2FycmF5KCkgb25jZSB3ZSByZXF1aXJlIFB5dGhvbiAyLjYKKyAgICAgICAgc2VsZi5fcGlw
ZSA9IE5vbmUKKyAgICAgICAgc2VsZi5fcGlkID0gTm9uZQorCiAgICAgICAgIHNlbGYuX2NyYXNo
ZWQgPSBGYWxzZQogICAgICAgICBzZWxmLnRpbWVkX291dCA9IEZhbHNlCiAKQEAgLTEwNCw3NSAr
MTAxLDg1IEBAIGNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToKICAgICAgICAgcmV0dXJuIHNl
bGYuX25hbWUKIAogICAgIGRlZiBfc3RhcnQoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX3Byb2M6
CisgICAgICAgIHNlbGYuX3BpZCA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5fcGlwZToKICAgICAg
ICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIiVzIGFscmVhZHkgcnVubmluZyIgJSBzZWxmLl9uYW1l
KQogICAgICAgICBzZWxmLl9yZXNldCgpCi0gICAgICAgICMgY2xvc2VfZmRzIGlzIGEgd29ya2Fy
b3VuZCBmb3IgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIzMjAKLSAgICAgICAgY2xvc2Vf
ZmRzID0gbm90IHNlbGYuX2hvc3QucGxhdGZvcm0uaXNfd2luKCkKLSAgICAgICAgc2VsZi5fcHJv
YyA9IHNlbGYuX2hvc3QuZXhlY3V0aXZlLnBvcGVuKHNlbGYuX2NtZCwgc3RkaW49c2VsZi5faG9z
dC5leGVjdXRpdmUuUElQRSwKLSAgICAgICAgICAgIHN0ZG91dD1zZWxmLl9ob3N0LmV4ZWN1dGl2
ZS5QSVBFLAotICAgICAgICAgICAgc3RkZXJyPXNlbGYuX2hvc3QuZXhlY3V0aXZlLlBJUEUsCi0g
ICAgICAgICAgICBjbG9zZV9mZHM9Y2xvc2VfZmRzLAotICAgICAgICAgICAgZW52PXNlbGYuX2Vu
diwKLSAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1zZWxmLl91bml2ZXJzYWxfbmV3bGlu
ZXMpCi0gICAgICAgIHNlbGYuX3BpZCA9IHNlbGYuX3Byb2MucGlkCi0gICAgICAgIHNlbGYuX3Bv
cnQuZmluZF9zeXN0ZW1fcGlkKHNlbGYubmFtZSgpLCBzZWxmLl9waWQpCi0gICAgICAgIGZkID0g
c2VsZi5fcHJvYy5zdGRvdXQuZmlsZW5vKCkKLSAgICAgICAgaWYgbm90IHNlbGYuX3VzZV93aW4z
Ml9hcGlzOgotICAgICAgICAgICAgZmwgPSBmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGTCkK
LSAgICAgICAgICAgIGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX1NFVEZMLCBmbCB8IG9zLk9fTk9O
QkxPQ0spCi0gICAgICAgICAgICBmZCA9IHNlbGYuX3Byb2Muc3RkZXJyLmZpbGVubygpCi0gICAg
ICAgICAgICBmbCA9IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZMKQotICAgICAgICAgICAg
ZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfU0VURkwsIGZsIHwgb3MuT19OT05CTE9DSykKLQotICAg
IGRlZiBfaGFuZGxlX3Bvc3NpYmxlX2ludGVycnVwdChzZWxmKToKLSAgICAgICAgIiIiVGhpcyBy
b3V0aW5lIGNoZWNrcyB0byBzZWUgaWYgdGhlIHByb2Nlc3MgY3Jhc2hlZCBvciBleGl0ZWQKLSAg
ICAgICAgYmVjYXVzZSBvZiBhIGtleWJvYXJkIGludGVycnVwdCBhbmQgcmFpc2VzIEtleWJvYXJk
SW50ZXJydXB0Ci0gICAgICAgIGFjY29yZGluZ2x5LiIiIgotICAgICAgICAjIEZJWE1FOiBMaW51
eCBhbmQgTWFjIHNldCB0aGUgcmV0dXJuY29kZSB0byAtc2lnbmFsLlNJR0lOVCBpZiBhCi0gICAg
ICAgICMgc3VicHJvY2VzcyBpcyBraWxsZWQgd2l0aCBhIGN0cmxeQy4gIFByZXZpb3VzIGNvbW1l
bnRzIGluIHRoaXMKLSAgICAgICAgIyByb3V0aW5lIHNhaWQgdGhhdCBzdXBwb3NlZGx5IFdpbmRv
d3MgcmV0dXJucyAweGMwMDAwMDFkLCBidXQgdGhhdCdzIG5vdCB3aGF0Ci0gICAgICAgICMgLTEw
NzM3NDE1MTAgZXZhbHVhdGVzIHRvLiBGaWd1cmUgb3V0IHdoYXQgdGhlIHJpZ2h0IHZhbHVlIGlz
Ci0gICAgICAgICMgZm9yIHdpbjMyIGFuZCBjeWd3aW4gaGVyZSAuLi4KLSAgICAgICAgaWYgc2Vs
Zi5fcHJvYy5yZXR1cm5jb2RlIGluICgtMTA3Mzc0MTUxMCwgLXNpZ25hbC5TSUdJTlQpOgotICAg
ICAgICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQKKworICAgICAgICBpZiAicnVuLW9uLWRl
dmljZSIgPT0gc2VsZi5fY21kWzBdOgorICAgICAgICAgICAgc2VsZi5fZW52WydJUENfSURFTlRJ
RklFUiddID0gc2VsZi5fcG9ydC5leHRyYWN0QnVuZGxlSUQoc2VsZi5fY21kWzJdKSArICItIiAr
IHNlbGYuX2NtZFsxXQorICAgICAgICAgICAgZmlsZV9sb2NhdGlvbiA9ICcvdG1wLycgKyBzZWxm
Ll9lbnZbJ0lQQ19JREVOVElGSUVSJ10KKyAgICAgICAgICAgIHNlbGYuX3BpcGUgPSBVbml4UGlw
ZShmaWxlX2xvY2F0aW9uICsgJ19JTicsIGZpbGVfbG9jYXRpb24gKyAnX09VVCcsIGZpbGVfbG9j
YXRpb24gKyAnX0VSUk9SJykKKyAgICAgICAgICAgIHNlbGYuX3BvcnQucnVuT25EZXZpY2UoWydy
dW4nXSArIHNlbGYuX2NtZFsxOl0sIHNlbGYuX2VudikKKyAgICAgICAgICAgIHNlbGYuX3BpcGUu
Y29ubmVjdCgpCisgICAgICAgICAgICBpZiBzZWxmLl9waXBlLmlzQ29ubmVjdGVkKCk6CisgICAg
ICAgICAgICAgICAgcGlkID0gc2VsZi5yZWFkX3N0ZGVycl9saW5lKHRpbWUudGltZSgpICsgMS4w
KQorICAgICAgICAgICAgICAgIGlmIHBpZDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGlk
ID0gaW50KHBpZFs2Oi0xXSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
ICAgICBfbG9nLmRlYnVnKCdObyBwaWQgcmVjZWl2ZWQgZnJvbSBVbml4LXBpcGUgYmFzZWQgY2xp
ZW50JykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygnRmFpbGVkIHRvIGNvbm5lY3Qg
dG8gbGF1bmNoaW5nIGFwcCcpCisgICAgICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUK
KworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fcGlwZSA9IFByb2Nlc3NQaXBlKHNl
bGYuX3BvcnQsIHNlbGYuX2NtZCwgc2VsZi5fZW52LCBzZWxmLl91bml2ZXJzYWxfbmV3bGluZXMp
CisgICAgICAgICAgICBzZWxmLl9waWQgPSBzZWxmLl9waXBlLnBpZCgpCisKKyAgICAgICAgaWYg
bm90IHNlbGYucG9sbCgpOgorICAgICAgICAgICAgc2VsZi5fcG9ydC5maW5kX3N5c3RlbV9waWQo
c2VsZi5uYW1lKCksIHNlbGYucGlkKCkpCiAKICAgICBkZWYgcG9sbChzZWxmKToKICAgICAgICAg
IiIiQ2hlY2sgdG8gc2VlIGlmIHRoZSB1bmRlcmx5aW5nIHByb2Nlc3MgaXMgcnVubmluZzsgcmV0
dXJucyBOb25lCiAgICAgICAgIGlmIGl0IHN0aWxsIGlzICh3cmFwcGVyIGFyb3VuZCBzdWJwcm9j
ZXNzLnBvbGwpLiIiIgotICAgICAgICBpZiBzZWxmLl9wcm9jOgotICAgICAgICAgICAgcmV0dXJu
IHNlbGYuX3Byb2MucG9sbCgpCi0gICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGlmIHNlbGYu
X3BpcGUgYW5kIHNlbGYuX3BpcGUuaXNDb25uZWN0ZWQoKToKKyAgICAgICAgICAgIHJldHVybiBO
b25lCisgICAgICAgIHJldHVybiBUcnVlCiAKICAgICBkZWYgd3JpdGUoc2VsZiwgYnl0ZXMsIGln
bm9yZV9jcmFzaD1GYWxzZSk6CisKICAgICAgICAgIiIiV3JpdGUgYSByZXF1ZXN0IHRvIHRoZSBz
dWJwcm9jZXNzLiBUaGUgc3VicHJvY2VzcyBpcyAocmUtKXN0YXJ0KCknZWQKICAgICAgICAgaWYg
aXMgbm90IGFscmVhZHkgcnVubmluZy4iIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX3Byb2M6Cisg
ICAgICAgIGlmIG5vdCBzZWxmLl9waXBlOgogICAgICAgICAgICAgc2VsZi5fc3RhcnQoKQotICAg
ICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGluLndyaXRlKGJ5dGVzKQotICAg
ICAgICBleGNlcHQgSU9FcnJvciwgZToKLSAgICAgICAgICAgIHNlbGYuc3RvcCgwLjApCi0gICAg
ICAgICAgICAjIHN0b3AoKSBjYWxscyBfcmVzZXQoKSwgc28gd2UgaGF2ZSB0byBzZXQgY3Jhc2hl
ZCB0byBUcnVlIGFmdGVyIGNhbGxpbmcgc3RvcCgpCi0gICAgICAgICAgICAjIHVubGVzcyB3ZSBh
bHJlYWR5IGtub3cgdGhhdCB0aGlzIGlzIGEgdGltZW91dC4KKyAgICAgICAgc3VjY2VzcyA9IEZh
bHNlCisgICAgICAgIGlmIHNlbGYuX3BpcGU6CisgICAgICAgICAgICBzdWNjZXNzID0gc2VsZi5f
cGlwZS5zZW5kKGJ5dGVzKQorCisgICAgICAgIGlmIG5vdCBzdWNjZXNzOgorICAgICAgICAgICAg
c2VsZi5zdG9wKCkKICAgICAgICAgICAgIGlmIG5vdCBpZ25vcmVfY3Jhc2g6CiAgICAgICAgICAg
ICAgICAgX2xvZy5kZWJ1ZygnVGhpcyB0ZXN0IG1hcmtlZCBhcyBhIGNyYXNoIGJlY2F1c2Ugb2Yg
YSBicm9rZW4gcGlwZSB3aGVuIHdyaXRpbmcgdG8gc3RkaW4gb2YgdGhlIHNlcnZlciBwcm9jZXNz
LicpCiAgICAgICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUKIAogICAgIGRlZiBfcG9w
X3N0ZG91dF9saW5lX2lmX3JlYWR5KHNlbGYpOgotICAgICAgICBpbmRleF9hZnRlcl9uZXdsaW5l
ID0gc2VsZi5fb3V0cHV0LmZpbmQoJ1xuJykgKyAxCi0gICAgICAgIGlmIGluZGV4X2FmdGVyX25l
d2xpbmUgPiAwOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BvcF9vdXRwdXRfYnl0ZXMoaW5k
ZXhfYWZ0ZXJfbmV3bGluZSkKKyAgICAgICAgZGF0YSA9IFtdCisgICAgICAgIGlmIHNlbGYuX3Bp
cGU6CisgICAgICAgICAgICBkYXRhID0gc2VsZi5fcGlwZS5zdGRvdXRSZWFkKCkKKworICAgICAg
ICBpZiBkYXRhOgorICAgICAgICAgICAgcmV0dXJuIGRhdGEKICAgICAgICAgcmV0dXJuIE5vbmUK
IAogICAgIGRlZiBfcG9wX3N0ZGVycl9saW5lX2lmX3JlYWR5KHNlbGYpOgotICAgICAgICBpbmRl
eF9hZnRlcl9uZXdsaW5lID0gc2VsZi5fZXJyb3IuZmluZCgnXG4nKSArIDEKLSAgICAgICAgaWYg
aW5kZXhfYWZ0ZXJfbmV3bGluZSA+IDA6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcG9wX2Vy
cm9yX2J5dGVzKGluZGV4X2FmdGVyX25ld2xpbmUpCisgICAgICAgIGRhdGEgPSBbXQorICAgICAg
ICBpZiBzZWxmLl9waXBlOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX3BpcGUuc3RkZXJyUmVh
ZCgpCisgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICByZXR1cm4gZGF0YQogICAgICAgICBy
ZXR1cm4gTm9uZQogCiAgICAgZGVmIHBvcF9hbGxfYnVmZmVyZWRfc3RkZXJyKHNlbGYpOgotICAg
ICAgICByZXR1cm4gc2VsZi5fcG9wX2Vycm9yX2J5dGVzKGxlbihzZWxmLl9lcnJvcikpCisgICAg
ICAgIF9lcnJvciA9ICIiCisgICAgICAgIF9jdXJyZW50X2Vycm9yID0gW10KKyAgICAgICAgd2hp
bGUgVHJ1ZToKKyAgICAgICAgICAgIGlmIHNlbGYuX3BpcGU6CisgICAgICAgICAgICAgICAgX2N1
cnJlbnRfZXJyb3IgPSBzZWxmLl9waXBlLnN0ZGVyclJlYWQoKQorICAgICAgICAgICAgaWYgbm90
IF9jdXJyZW50X2Vycm9yOgorICAgICAgICAgICAgICAgIHJldHVybiBfZXJyb3IKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgX2Vycm9yID0gX2Vycm9yICsgX2N1cnJlbnRfZXJy
b3IgKyAnXG4nCiAKICAgICBkZWYgcmVhZF9zdGRvdXRfbGluZShzZWxmLCBkZWFkbGluZSk6CiAg
ICAgICAgIHJldHVybiBzZWxmLl9yZWFkKGRlYWRsaW5lLCBzZWxmLl9wb3Bfc3Rkb3V0X2xpbmVf
aWZfcmVhZHkpCkBAIC0xOTEsNyArMTk4LDYgQEAgY2xhc3MgU2VydmVyUHJvY2VzcyhvYmplY3Qp
OgogICAgICAgICAgICAgcmV0dXJuIE5vbmUgICMgSW5zdHJ1Y3RzIHRoZSBjYWxsZXIgdG8ga2Vl
cCB3YWl0aW5nLgogCiAgICAgICAgIHJldHVybl92YWx1ZSA9IHNlbGYuX3JlYWQoZGVhZGxpbmUs
IHJldHJpZXZlX2J5dGVzX2Zyb21fYnVmZmVycykKLSAgICAgICAgIyBGSVhNRTogVGhpcyBpcyBh
IGJpdCBvZiBhIGhhY2sgYXJvdW5kIHRoZSBmYWN0IHRoYXQgX3JlYWQgbm9ybWFsbHkgb25seSBy
ZXR1cm5zIG9uZSB2YWx1ZSwgYnV0IHRoaXMgY2FsbGVyIHdhbnRzIGl0IHRvIHJldHVybiB0d28u
CiAgICAgICAgIGlmIHJldHVybl92YWx1ZSBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuIE5v
bmUsIE5vbmUKICAgICAgICAgcmV0dXJuIHJldHVybl92YWx1ZQpAQCAtMjAxLDExNyArMjA3LDI1
IEBAIGNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToKICAgICAgICAgICAgIHJhaXNlIFZhbHVl
RXJyb3IoJ1NlcnZlclByb2Nlc3MucmVhZCgpIGNhbGxlZCB3aXRoIGEgbm9uLXBvc2l0aXZlIHNp
emU6ICVkICcgJSBzaXplKQogCiAgICAgICAgIGRlZiByZXRyaWV2ZV9ieXRlc19mcm9tX3N0ZG91
dF9idWZmZXIoKToKLSAgICAgICAgICAgIGlmIGxlbihzZWxmLl9vdXRwdXQpID49IHNpemU6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BvcF9vdXRwdXRfYnl0ZXMoc2l6ZSkKKyAgICAg
ICAgICAgIGlmIHNlbGYuX3BpcGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BpcGUu
cmVhZEJsb2NrU3Rkb3V0KHNpemUpCiAgICAgICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgICAg
IHJldHVybiBzZWxmLl9yZWFkKGRlYWRsaW5lLCByZXRyaWV2ZV9ieXRlc19mcm9tX3N0ZG91dF9i
dWZmZXIpCiAKLSAgICBkZWYgX2xvZyhzZWxmLCBtZXNzYWdlKToKLSAgICAgICAgIyBUaGlzIGlz
IGEgYml0IG9mIGEgaGFjaywgYnV0IHdlIGZpcnN0IGxvZyBhIGJsYW5rIGxpbmUgdG8gYXZvaWQK
LSAgICAgICAgIyBtZXNzaW5nIHVwIHRoZSBtYXN0ZXIgcHJvY2VzcydzIG91dHB1dC4KLSAgICAg
ICAgX2xvZy5pbmZvKCcnKQotICAgICAgICBfbG9nLmluZm8obWVzc2FnZSkKLQogICAgIGRlZiBf
aGFuZGxlX3RpbWVvdXQoc2VsZik6CiAgICAgICAgIHNlbGYudGltZWRfb3V0ID0gVHJ1ZQogICAg
ICAgICBpZiBzZWxmLl9wb3J0LmdldF9vcHRpb24oInNhbXBsZV9vbl90aW1lb3V0Iik6Ci0gICAg
ICAgICAgICBzZWxmLl9wb3J0LnNhbXBsZV9wcm9jZXNzKHNlbGYuX25hbWUsIHNlbGYuX3Byb2Mu
cGlkKQotCi0gICAgZGVmIF9zcGxpdF9zdHJpbmdfYWZ0ZXJfaW5kZXgoc2VsZiwgc3RyaW5nLCBp
bmRleCk6Ci0gICAgICAgIHJldHVybiBzdHJpbmdbOmluZGV4XSwgc3RyaW5nW2luZGV4Ol0KLQot
ICAgIGRlZiBfcG9wX291dHB1dF9ieXRlcyhzZWxmLCBieXRlc19jb3VudCk6Ci0gICAgICAgIG91
dHB1dCwgc2VsZi5fb3V0cHV0ID0gc2VsZi5fc3BsaXRfc3RyaW5nX2FmdGVyX2luZGV4KHNlbGYu
X291dHB1dCwgYnl0ZXNfY291bnQpCi0gICAgICAgIHJldHVybiBvdXRwdXQKLQotICAgIGRlZiBf
cG9wX2Vycm9yX2J5dGVzKHNlbGYsIGJ5dGVzX2NvdW50KToKLSAgICAgICAgb3V0cHV0LCBzZWxm
Ll9lcnJvciA9IHNlbGYuX3NwbGl0X3N0cmluZ19hZnRlcl9pbmRleChzZWxmLl9lcnJvciwgYnl0
ZXNfY291bnQpCi0gICAgICAgIHJldHVybiBvdXRwdXQKLQotICAgIGRlZiBfd2FpdF9mb3JfZGF0
YV9hbmRfdXBkYXRlX2J1ZmZlcnNfdXNpbmdfc2VsZWN0KHNlbGYsIGRlYWRsaW5lLCBzdG9wcGlu
Zz1GYWxzZSk6Ci0gICAgICAgIGlmIHNlbGYuX3Byb2Muc3Rkb3V0LmNsb3NlZCBvciBzZWxmLl9w
cm9jLnN0ZGVyci5jbG9zZWQ6Ci0gICAgICAgICAgICAjIElmIHRoZSBwcm9jZXNzIGNyYXNoZWQg
YW5kIGlzIHVzaW5nIEZJRk9zLCBsaWtlIENocm9taXVtIEFuZHJvaWQsIHRoZQotICAgICAgICAg
ICAgIyBzdGRvdXQgYW5kIHN0ZGVyciBwaXBlcyB3aWxsIGJlIGNsb3NlZC4KLSAgICAgICAgICAg
IHJldHVybgotCi0gICAgICAgIG91dF9mZCA9IHNlbGYuX3Byb2Muc3Rkb3V0LmZpbGVubygpCi0g
ICAgICAgIGVycl9mZCA9IHNlbGYuX3Byb2Muc3RkZXJyLmZpbGVubygpCi0gICAgICAgIHNlbGVj
dF9mZHMgPSAob3V0X2ZkLCBlcnJfZmQpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJlYWRf
ZmRzLCBfLCBfID0gc2VsZWN0LnNlbGVjdChzZWxlY3RfZmRzLCBbXSwgc2VsZWN0X2ZkcywgbWF4
KGRlYWRsaW5lIC0gdGltZS50aW1lKCksIDApKQotICAgICAgICBleGNlcHQgc2VsZWN0LmVycm9y
LCBlOgotICAgICAgICAgICAgIyBXZSBjYW4gaWdub3JlIEVJTlZBTCBzaW5jZSBpdCdzIGxpa2Vs
eSB0aGUgcHJvY2VzcyBqdXN0IGNyYXNoZWQgYW5kIHdlJ2xsCi0gICAgICAgICAgICAjIGZpZ3Vy
ZSB0aGF0IG91dCB0aGUgbmV4dCB0aW1lIHRocm91Z2ggdGhlIGxvb3AgaW4gX3JlYWQoKS4KLSAg
ICAgICAgICAgIGlmIGUuYXJnc1swXSA9PSBlcnJuby5FSU5WQUw6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuCi0gICAgICAgICAgICByYWlzZQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMg
Tm90ZSB0aGF0IHdlIG1heSBnZXQgbm8gZGF0YSBkdXJpbmcgcmVhZCgpIGV2ZW4gdGhvdWdoCi0g
ICAgICAgICAgICAjIHNlbGVjdCBzYXlzIHdlIGdvdCBzb21ldGhpbmc7IHNlZSB0aGUgc2VsZWN0
KCkgbWFuIHBhZ2UKLSAgICAgICAgICAgICMgb24gbGludXguIEkgZG9uJ3Qga25vdyBpZiB0aGlz
IGhhcHBlbnMgb24gTWFjIE9TIGFuZAotICAgICAgICAgICAgIyBvdGhlciBVbml4ZW4gYXMgd2Vs
bCwgYnV0IHdlIGRvbid0IGJvdGhlciBzcGVjaWFsLWNhc2luZwotICAgICAgICAgICAgIyBMaW51
eCBiZWNhdXNlIGl0J3MgcmVsYXRpdmVseSBoYXJtbGVzcyBlaXRoZXIgd2F5LgotICAgICAgICAg
ICAgaWYgb3V0X2ZkIGluIHJlYWRfZmRzOgotICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9w
cm9jLnN0ZG91dC5yZWFkKCkKLSAgICAgICAgICAgICAgICBpZiBub3QgZGF0YSBhbmQgbm90IHN0
b3BwaW5nIGFuZCAoc2VsZi5fdHJlYXRfbm9fZGF0YV9hc19jcmFzaCBvciBzZWxmLl9wcm9jLnBv
bGwoKSk6Ci0gICAgICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJ1RoaXMgdGVzdCBtYXJrZWQg
YXMgYSBjcmFzaCBiZWNhdXNlIG9mIG5vIGRhdGEgd2hpbGUgcmVhZGluZyBzdGRvdXQgZm9yIHRo
ZSBzZXJ2ZXIgcHJvY2Vzcy4nKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0g
VHJ1ZQotICAgICAgICAgICAgICAgIHNlbGYuX291dHB1dCArPSBkYXRhCi0KLSAgICAgICAgICAg
IGlmIGVycl9mZCBpbiByZWFkX2ZkczoKLSAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fcHJv
Yy5zdGRlcnIucmVhZCgpCi0gICAgICAgICAgICAgICAgaWYgbm90IGRhdGEgYW5kIG5vdCBzdG9w
cGluZyBhbmQgKHNlbGYuX3RyZWF0X25vX2RhdGFfYXNfY3Jhc2ggb3Igc2VsZi5fcHJvYy5wb2xs
KCkpOgotICAgICAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCdUaGlzIHRlc3QgbWFya2VkIGFz
IGEgY3Jhc2ggYmVjYXVzZSBvZiBubyBkYXRhIHdoaWxlIHJlYWRpbmcgc3Rkb3V0IGZvciB0aGUg
c2VydmVyIHByb2Nlc3MuJykKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRy
dWUKLSAgICAgICAgICAgICAgICBzZWxmLl9lcnJvciArPSBkYXRhCi0gICAgICAgIGV4Y2VwdCBJ
T0Vycm9yLCBlOgotICAgICAgICAgICAgIyBXZSBjYW4gaWdub3JlIHRoZSBJT0Vycm9ycyBiZWNh
dXNlIHdlIHdpbGwgZGV0ZWN0IGlmIHRoZSBzdWJwb3JjZXNzIGNyYXNoZWQKLSAgICAgICAgICAg
ICMgdGhlIG5leHQgdGltZSB0aHJvdWdoIHRoZSBsb29wIGluIF9yZWFkKCkKLSAgICAgICAgICAg
IHBhc3MKLQotICAgIGRlZiBfd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnNfdXNpbmdf
d2luMzJfYXBpcyhzZWxmLCBkZWFkbGluZSk6Ci0gICAgICAgICMgU2VlIGh0dHA6Ly9jb2RlLmFj
dGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzQ0MDU1NC1tb2R1bGUtdG8tYWxsb3ctYXN5bmNocm9ub3Vz
LXN1YnByb2Nlc3MtdXNlLW9uLXdpbi8KLSAgICAgICAgIyBhbmQgaHR0cDovL2RvY3MuYWN0aXZl
c3RhdGUuY29tL2FjdGl2ZXB5dGhvbi8yLjYvcHl3aW4zMi9tb2R1bGVzLmh0bWwKLSAgICAgICAg
IyBmb3IgZG9jdW1lbnRhdGlvbiBvbiBhbGwgb2YgdGhlc2Ugd2luMzItc3BlY2lmaWMgbW9kdWxl
cy4KLSAgICAgICAgbm93ID0gdGltZS50aW1lKCkKLSAgICAgICAgb3V0X2ZoID0gbXN2Y3J0Lmdl
dF9vc2ZoYW5kbGUoc2VsZi5fcHJvYy5zdGRvdXQuZmlsZW5vKCkpCi0gICAgICAgIGVycl9maCA9
IG1zdmNydC5nZXRfb3NmaGFuZGxlKHNlbGYuX3Byb2Muc3RkZXJyLmZpbGVubygpKQotICAgICAg
ICB3aGlsZSAoc2VsZi5fcHJvYy5wb2xsKCkgaXMgTm9uZSkgYW5kIChub3cgPCBkZWFkbGluZSk6
Ci0gICAgICAgICAgICBvdXRwdXQgPSBzZWxmLl9ub25fYmxvY2tpbmdfcmVhZF93aW4zMihvdXRf
ZmgpCi0gICAgICAgICAgICBlcnJvciA9IHNlbGYuX25vbl9ibG9ja2luZ19yZWFkX3dpbjMyKGVy
cl9maCkKLSAgICAgICAgICAgIGlmIG91dHB1dCBvciBlcnJvcjoKLSAgICAgICAgICAgICAgICBp
ZiBvdXRwdXQ6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX291dHB1dCArPSBvdXRwdXQKLSAg
ICAgICAgICAgICAgICBpZiBlcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXJyb3Ig
Kz0gZXJyb3IKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIHRpbWUuc2xlZXAo
MC4wMSkKLSAgICAgICAgICAgIG5vdyA9IHRpbWUudGltZSgpCi0gICAgICAgIHJldHVybgotCi0g
ICAgZGVmIF9ub25fYmxvY2tpbmdfcmVhZF93aW4zMihzZWxmLCBoYW5kbGUpOgotICAgICAgICB0
cnk6Ci0gICAgICAgICAgICBfLCBhdmFpbCwgXyA9IHdpbjMycGlwZS5QZWVrTmFtZWRQaXBlKGhh
bmRsZSwgMCkKLSAgICAgICAgICAgIGlmIGF2YWlsID4gMDoKLSAgICAgICAgICAgICAgICBfLCBi
dWYgPSB3aW4zMmZpbGUuUmVhZEZpbGUoaGFuZGxlLCBhdmFpbCwgTm9uZSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gYnVmCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6Ci0gICAgICAgICAg
ICBpZiBlWzBdIG5vdCBpbiAoMTA5LCBlcnJuby5FU0hVVERPV04pOiAgIyAxMDkgPT0gd2luMzIg
RVJST1JfQlJPS0VOX1BJUEUKLSAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICByZXR1cm4g
Tm9uZQorICAgICAgICAgICAgc2VsZi5fcG9ydC5zYW1wbGVfcHJvY2VzcyhzZWxmLl9uYW1lLCBz
ZWxmLl9waWQpCiAKICAgICBkZWYgaGFzX2NyYXNoZWQoc2VsZik6CiAgICAgICAgIGlmIG5vdCBz
ZWxmLl9jcmFzaGVkIGFuZCBzZWxmLnBvbGwoKToKICAgICAgICAgICAgIF9sb2cuZGVidWcoJ1Ro
aXMgdGVzdCBtYXJrZWQgYXMgYSBjcmFzaCBiZWNhdXNlIG9mIGZhaWx1cmUgdG8gcG9sbCB0aGUg
c2VydmVyIHByb2Nlc3MuJykKICAgICAgICAgICAgIHNlbGYuX2NyYXNoZWQgPSBUcnVlCi0gICAg
ICAgICAgICBzZWxmLl9oYW5kbGVfcG9zc2libGVfaW50ZXJydXB0KCkKKyAgICAgICAgICAgIGlm
IHNlbGYuX3BpcGU6CisgICAgICAgICAgICAgICAgc2VsZi5fcGlwZS5oYW5kbGVfaW50ZXJydXB0
KCkKICAgICAgICAgcmV0dXJuIHNlbGYuX2NyYXNoZWQKIAotICAgICMgVGhpcyByZWFkIGZ1bmN0
aW9uIGlzIGEgYml0IG9kZGx5LWRlc2lnbmVkLCBhcyBpdCBwb2xscyBib3RoIHN0ZG91dCBhbmQg
c3RkZXJyLCB5ZXQKLSAgICAjIG9ubHkgcmVhZHMvcmV0dXJucyBmcm9tIG9uZSBvZiB0aGVtIChi
dWZmZXJpbmcgYm90aCBpbiBsb2NhbCBzZWxmLl9vdXRwdXQvc2VsZi5fZXJyb3IpLgotICAgICMg
SXQgbWlnaHQgYmUgY2xlYW5lciB0byBwYXNzIGluIHRoZSBmaWxlIGRlc2NyaXB0b3IgdG8gcG9s
bCBpbnN0ZWFkLgogICAgIGRlZiBfcmVhZChzZWxmLCBkZWFkbGluZSwgZmV0Y2hfYnl0ZXNfZnJv
bV9idWZmZXJzX2NhbGxiYWNrKToKICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIGlm
IHNlbGYuaGFzX2NyYXNoZWQoKToKQEAgLTMyNSw2MyArMjM5LDM2IEBAIGNsYXNzIFNlcnZlclBy
b2Nlc3Mob2JqZWN0KToKICAgICAgICAgICAgIGlmIGJ5dGVzIGlzIG5vdCBOb25lOgogICAgICAg
ICAgICAgICAgIHJldHVybiBieXRlcwogCi0gICAgICAgICAgICBpZiBzZWxmLl91c2Vfd2luMzJf
YXBpczoKLSAgICAgICAgICAgICAgICBzZWxmLl93YWl0X2Zvcl9kYXRhX2FuZF91cGRhdGVfYnVm
ZmVyc191c2luZ193aW4zMl9hcGlzKGRlYWRsaW5lKQotICAgICAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgICAgICBzZWxmLl93YWl0X2Zvcl9kYXRhX2FuZF91cGRhdGVfYnVmZmVyc191c2luZ19z
ZWxlY3QoZGVhZGxpbmUpCi0KICAgICBkZWYgc3RhcnQoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBz
ZWxmLl9wcm9jOgorICAgICAgICBpZiBub3Qgc2VsZi5fcGlwZToKICAgICAgICAgICAgIHNlbGYu
X3N0YXJ0KCkKIAogICAgIGRlZiBzdG9wKHNlbGYsIHRpbWVvdXRfc2Vjcz0zLjApOgotICAgICAg
ICBpZiBub3Qgc2VsZi5fcHJvYzoKLSAgICAgICAgICAgIHJldHVybiAoTm9uZSwgTm9uZSkKKyAg
ICAgICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIHRpbWVvdXRfc2VjcwogCi0gICAgICAgICMg
T25seSBib3RoZXIgdG8gY2hlY2sgZm9yIGxlYWtzIG9yIHN0ZGVyciBpZiB0aGUgcHJvY2VzcyBp
cyBzdGlsbCBydW5uaW5nLgotICAgICAgICBpZiBzZWxmLnBvbGwoKSBpcyBOb25lOgotICAgICAg
ICAgICAgc2VsZi5fcG9ydC5jaGVja19mb3JfbGVha3Moc2VsZi5uYW1lKCksIHNlbGYucGlkKCkp
Ci0KLSAgICAgICAgbm93ID0gdGltZS50aW1lKCkKLSAgICAgICAgaWYgc2VsZi5fcHJvYy5zdGRp
bjoKLSAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4uY2xvc2UoKQotICAgICAgICAgICAgc2Vs
Zi5fcHJvYy5zdGRpbiA9IE5vbmUKLSAgICAgICAga2lsbGVkID0gRmFsc2UKLSAgICAgICAgaWYg
dGltZW91dF9zZWNzOgotICAgICAgICAgICAgZGVhZGxpbmUgPSBub3cgKyB0aW1lb3V0X3NlY3MK
LSAgICAgICAgICAgIHdoaWxlIHNlbGYuX3Byb2MucG9sbCgpIGlzIE5vbmUgYW5kIHRpbWUudGlt
ZSgpIDwgZGVhZGxpbmU6Ci0gICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQotICAgICAg
ICAgICAgaWYgc2VsZi5fcHJvYy5wb2xsKCkgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBfbG9n
Lndhcm5pbmcoJ3N0b3BwaW5nICVzKHBpZCAlZCkgdGltZWQgb3V0LCBraWxsaW5nIGl0JyAlIChz
ZWxmLl9uYW1lLCBzZWxmLl9wcm9jLnBpZCkpCi0KLSAgICAgICAgaWYgc2VsZi5fcHJvYy5wb2xs
KCkgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX2tpbGwoKQotICAgICAgICAgICAga2lsbGVk
ID0gVHJ1ZQotICAgICAgICAgICAgX2xvZy5kZWJ1Zygna2lsbGVkIHBpZCAlZCcgJSBzZWxmLl9w
cm9jLnBpZCkKLQotICAgICAgICAjIHJlYWQgYW55IHJlbWFpbmluZyBkYXRhIG9uIHRoZSBwaXBl
cyBhbmQgcmV0dXJuIGl0LgotICAgICAgICBpZiBub3Qga2lsbGVkOgotICAgICAgICAgICAgaWYg
c2VsZi5fdXNlX3dpbjMyX2FwaXM6Ci0gICAgICAgICAgICAgICAgc2VsZi5fd2FpdF9mb3JfZGF0
YV9hbmRfdXBkYXRlX2J1ZmZlcnNfdXNpbmdfd2luMzJfYXBpcyhub3cpCi0gICAgICAgICAgICBl
bHNlOgotICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRfZm9yX2RhdGFfYW5kX3VwZGF0ZV9idWZm
ZXJzX3VzaW5nX3NlbGVjdChub3csIHN0b3BwaW5nPVRydWUpCi0gICAgICAgIG91dCwgZXJyID0g
c2VsZi5fb3V0cHV0LCBzZWxmLl9lcnJvcgorICAgICAgICBvdXQgPSBbXQorICAgICAgICBlcnIg
PSBbXQorCisgICAgICAgIGlmIHNlbGYuX3BpcGUgPT0gTm9uZToKKyAgICAgICAgICAgIHJldHVy
biAob3V0LCBlcnIpCisgICAgICAgIGlmIG5vdCBzZWxmLl9waXBlLmlzQ29ubmVjdGVkKCk6Cisg
ICAgICAgICAgICBzZWxmLl9waXBlLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3Jlc2V0KCkK
KyAgICAgICAgICAgIHJldHVybiAob3V0LCBlcnIpCisKKyAgICAgICAgb3V0ID0gc2VsZi5fcGlw
ZS5yZWFkQnVmZmVyU3Rkb3V0KCkKKyAgICAgICAgZXJyID0gc2VsZi5fcGlwZS5yZWFkQnVmZmVy
U3RkZXJyKCkKKworICAgICAgICB3aGlsZSBzZWxmLl9waXBlLmlzQ29ubmVjdGVkKCkgYW5kIGRl
YWRsaW5lID4gdGltZS50aW1lKCk6CisgICAgICAgICAgICBvdXQgPSBvdXQgKyBzZWxmLl9waXBl
LnJlYWRCdWZmZXJTdGRvdXQoKQorICAgICAgICAgICAgZXJyID0gZXJyICsgc2VsZi5fcGlwZS5y
ZWFkQnVmZmVyU3RkZXJyKCkKKworICAgICAgICBpZiAicnVuLW9uLWRldmljZSIgPT0gc2VsZi5f
Y21kWzBdOgorICAgICAgICAgICAgc2VsZi5fcG9ydC5ydW5PbkRldmljZShbJ2tpbGwnLCBzZWxm
Ll9jbWRbMV0sIHNlbGYuX2NtZFsyXV0pCisgICAgICAgIHNlbGYuX3BpcGUuY2xvc2UoKQogICAg
ICAgICBzZWxmLl9yZXNldCgpCiAgICAgICAgIHJldHVybiAob3V0LCBlcnIpCiAKICAgICBkZWYg
a2lsbChzZWxmKToKICAgICAgICAgc2VsZi5zdG9wKDAuMCkKIAotICAgIGRlZiBfa2lsbChzZWxm
KToKLSAgICAgICAgc2VsZi5faG9zdC5leGVjdXRpdmUua2lsbF9wcm9jZXNzKHNlbGYuX3Byb2Mu
cGlkKQotICAgICAgICBpZiBzZWxmLl9wcm9jLnBvbGwoKSBpcyBub3QgTm9uZToKLSAgICAgICAg
ICAgIHNlbGYuX3Byb2Mud2FpdCgpCi0KLSAgICBkZWYgcmVwbGFjZV9vdXRwdXRzKHNlbGYsIHN0
ZG91dCwgc3RkZXJyKToKLSAgICAgICAgYXNzZXJ0IHNlbGYuX3Byb2MKLSAgICAgICAgaWYgc3Rk
b3V0OgotICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRvdXQuY2xvc2UoKQotICAgICAgICAgICAg
c2VsZi5fcHJvYy5zdGRvdXQgPSBzdGRvdXQKLSAgICAgICAgaWYgc3RkZXJyOgotICAgICAgICAg
ICAgc2VsZi5fcHJvYy5zdGRlcnIuY2xvc2UoKQotICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRl
cnIgPSBzdGRlcnIKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJv
Y2Vzc191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvc2VydmVyX3Byb2Nlc3NfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIwOTkyNykKKysrIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzc191bml0dGVzdC5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzIsNiArMzMsNyBAQCBpbXBv
cnQgdW5pdHRlc3QKIAogZnJvbSB3ZWJraXRweS5wb3J0LmZhY3RvcnkgaW1wb3J0IFBvcnRGYWN0
b3J5CiBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IHNlcnZlcl9wcm9jZXNzCitmcm9tIHdlYmtp
dHB5LmNvbW1vbi5pcGNfcGlwZV90ZXN0Y2FzZSBpbXBvcnQgRHVtbXlQcm9jZXNzUGlwZQogZnJv
bSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3QgaW1wb3J0IFN5c3RlbUhvc3QKIGZy
b20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1ob3N0X21vY2sgaW1wb3J0IE1vY2tTeXN0
ZW1Ib3N0CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3V0cHV0Y2FwdHVyZSBpbXBvcnQg
T3V0cHV0Q2FwdHVyZQpAQCAtNTMsNDggKzU1LDExIEBAIGNsYXNzIFRyaXZpYWxNb2NrUG9ydChv
YmplY3QpOgogICAgICAgICByZXR1cm4gMQogCiAKLWNsYXNzIE1vY2tGaWxlKG9iamVjdCk6Ci0g
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcnZlcl9wcm9jZXNzKToKLSAgICAgICAgc2VsZi5fc2Vy
dmVyX3Byb2Nlc3MgPSBzZXJ2ZXJfcHJvY2VzcwotICAgICAgICBzZWxmLmNsb3NlZCA9IEZhbHNl
Ci0KLSAgICBkZWYgZmlsZW5vKHNlbGYpOgotICAgICAgICByZXR1cm4gMQotCi0gICAgZGVmIHdy
aXRlKHNlbGYsIGxpbmUpOgotICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5icm9rZW5fcGlw
ZXMuYXBwZW5kKHNlbGYpCi0gICAgICAgIHJhaXNlIElPRXJyb3IKLQotICAgIGRlZiByZWFkKHNl
bGYsIHNpemU9MCk6Ci0gICAgICAgICMgVGhpcyBtZWFucyBlbmQgb2YgZmlsZQotICAgICAgICBy
ZXR1cm4gJycKLQotICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgc2VsZi5jbG9zZWQgPSBU
cnVlCi0KLQotY2xhc3MgTW9ja1Byb2Mob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwg
c2VydmVyX3Byb2Nlc3MpOgotICAgICAgICBzZWxmLnN0ZGluID0gTW9ja0ZpbGUoc2VydmVyX3By
b2Nlc3MpCi0gICAgICAgIHNlbGYuc3Rkb3V0ID0gTW9ja0ZpbGUoc2VydmVyX3Byb2Nlc3MpCi0g
ICAgICAgIHNlbGYuc3RkZXJyID0gTW9ja0ZpbGUoc2VydmVyX3Byb2Nlc3MpCi0gICAgICAgIHNl
bGYucGlkID0gMQotCi0gICAgZGVmIHBvbGwoc2VsZik6Ci0gICAgICAgIHJldHVybiAxCi0KLSAg
ICBkZWYgd2FpdChzZWxmKToKLSAgICAgICAgcmV0dXJuIDAKLQotCiBjbGFzcyBGYWtlU2VydmVy
UHJvY2VzcyhzZXJ2ZXJfcHJvY2Vzcy5TZXJ2ZXJQcm9jZXNzKToKICAgICBkZWYgX3N0YXJ0KHNl
bGYpOgotICAgICAgICBzZWxmLl9wcm9jID0gTW9ja1Byb2Moc2VsZikKLSAgICAgICAgc2VsZi5z
dGRpbiA9IHNlbGYuX3Byb2Muc3RkaW4KLSAgICAgICAgc2VsZi5zdGRvdXQgPSBzZWxmLl9wcm9j
LnN0ZG91dAotICAgICAgICBzZWxmLnN0ZGVyciA9IHNlbGYuX3Byb2Muc3RkZXJyCi0gICAgICAg
IHNlbGYuX3BpZCA9IHNlbGYuX3Byb2MucGlkCi0gICAgICAgIHNlbGYuYnJva2VuX3BpcGVzID0g
W10KKyAgICAgICAgc2VsZi5fcGlwZSA9IER1bW15UHJvY2Vzc1BpcGUoc2VsZi5fcG9ydCwgc2Vs
Zi5fY21kLCBzZWxmLl9lbnYsIHNlbGYuX3VuaXZlcnNhbF9uZXdsaW5lcykKKyAgICAgICAgc2Vs
Zi5fcGlkID0gc2VsZi5fcGlwZS5waWQoKQorICAgICAgICBzZWxmLl9waXBlLmNvbm5lY3RlZEZv
clRlc3RpbmcgPSBGYWxzZQogCiAKIGNsYXNzIFRlc3RTZXJ2ZXJQcm9jZXNzKHVuaXR0ZXN0LlRl
c3RDYXNlKToKQEAgLTEzNSw5ICsxMDAsNyBAQCBjbGFzcyBUZXN0U2VydmVyUHJvY2Vzcyh1bml0
dGVzdC5UZXN0Q2FzCiAgICAgICAgIHNlcnZlcl9wcm9jZXNzID0gRmFrZVNlcnZlclByb2Nlc3Mo
cG9ydF9vYmo9cG9ydF9vYmosIG5hbWU9InRlc3QiLCBjbWQ9WyJ0ZXN0Il0pCiAgICAgICAgIHNl
cnZlcl9wcm9jZXNzLl9zdGFydCgpCiAgICAgICAgIHNlcnZlcl9wcm9jZXNzLnN0b3AoKQotICAg
ICAgICBzZWxmLmFzc2VydFRydWUoc2VydmVyX3Byb2Nlc3Muc3RkaW4uY2xvc2VkKQotICAgICAg
ICBzZWxmLmFzc2VydFRydWUoc2VydmVyX3Byb2Nlc3Muc3Rkb3V0LmNsb3NlZCkKLSAgICAgICAg
c2VsZi5hc3NlcnRUcnVlKHNlcnZlcl9wcm9jZXNzLnN0ZGVyci5jbG9zZWQpCisgICAgICAgIHNl
bGYuYXNzZXJ0SXNOb25lKHNlcnZlcl9wcm9jZXNzLl9waXBlKQogCiAgICAgZGVmIHRlc3RfYnJv
a2VuX3BpcGUoc2VsZik6CiAgICAgICAgIHBvcnRfb2JqID0gVHJpdmlhbE1vY2tQb3J0KCkKQEAg
LTE0NiwxMyArMTA5LDEyIEBAIGNsYXNzIFRlc3RTZXJ2ZXJQcm9jZXNzKHVuaXR0ZXN0LlRlc3RD
YXMKICAgICAgICAgc2VydmVyX3Byb2Nlc3MgPSBGYWtlU2VydmVyUHJvY2Vzcyhwb3J0X29iaj1w
b3J0X29iaiwgbmFtZT0idGVzdCIsIGNtZD1bInRlc3QiXSkKICAgICAgICAgc2VydmVyX3Byb2Nl
c3Mud3JpdGUoInNob3VsZCBicmVhayIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZXJ2ZXJf
cHJvY2Vzcy5oYXNfY3Jhc2hlZCgpKQotICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShzZXJ2
ZXJfcHJvY2Vzcy5waWQoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VydmVyX3Byb2Nl
c3MuX3Byb2MpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VydmVyX3Byb2Nlc3MuYnJva2Vu
X3BpcGVzLCBbc2VydmVyX3Byb2Nlc3Muc3RkaW5dKQorICAgICAgICBzZWxmLmFzc2VydElzTm9u
ZShzZXJ2ZXJfcHJvY2Vzcy5fcGlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VydmVy
X3Byb2Nlc3MucGlkKCkpCiAKICAgICAgICAgcG9ydF9vYmouaG9zdC5wbGF0Zm9ybS5vc19uYW1l
ID0gJ21hYycKICAgICAgICAgc2VydmVyX3Byb2Nlc3MgPSBGYWtlU2VydmVyUHJvY2Vzcyhwb3J0
X29iaj1wb3J0X29iaiwgbmFtZT0idGVzdCIsIGNtZD1bInRlc3QiXSkKICAgICAgICAgc2VydmVy
X3Byb2Nlc3Mud3JpdGUoInNob3VsZCBicmVhayIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShz
ZXJ2ZXJfcHJvY2Vzcy5oYXNfY3Jhc2hlZCgpKQotICAgICAgICBzZWxmLmFzc2VydElzTm9uZShz
ZXJ2ZXJfcHJvY2Vzcy5fcHJvYykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJ2ZXJfcHJv
Y2Vzcy5icm9rZW5fcGlwZXMsIFtzZXJ2ZXJfcHJvY2Vzcy5zdGRpbl0pCisgICAgICAgIHNlbGYu
YXNzZXJ0SXNOb25lKHNlcnZlcl9wcm9jZXNzLl9waXBlKQorICAgICAgICBzZWxmLmFzc2VydElz
Tm9uZShzZXJ2ZXJfcHJvY2Vzcy5waWQoKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
c3R5bGUvY2hlY2tlcnMvcHl0aG9uLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvY2hlY2tlcnMvcHl0aG9uLnB5CShyZXZpc2lvbiAyMDk5MjcpCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL3B5dGhvbi5weQkod29ya2luZyBjb3B5
KQpAQCAtMTAzLDcgKzEwMyw3IEBAIGNsYXNzIFB5bGludGVyKG9iamVjdCk6CiAKICAgICBkZWYg
cnVuKHNlbGYsIGFyZ3YpOgogICAgICAgICBvdXRwdXQgPSBfRmlsdGVyZWRTdHJpbmdJTyhzZWxm
LkZBTFNFX1BPU0lUSVZFUykKLSAgICAgICAgbGludC5SdW4oWyctLXJjZmlsZScsIHNlbGYuX3B5
bGludHJjXSArIGFyZ3YsIHJlcG9ydGVyPVBhcnNlYWJsZVRleHRSZXBvcnRlcihvdXRwdXQ9b3V0
cHV0KSwgZXhpdD1GYWxzZSkKKyAgICAgICAgbGludC5SdW4oWyctLWlnbm9yZWQtY2xhc3Nlcz1f
c29ja2V0b2JqZWN0JywgJy0tcmNmaWxlJywgc2VsZi5fcHlsaW50cmNdICsgYXJndiwgcmVwb3J0
ZXI9UGFyc2VhYmxlVGV4dFJlcG9ydGVyKG91dHB1dD1vdXRwdXQpLCBleGl0PUZhbHNlKQogICAg
ICAgICByZXR1cm4gb3V0cHV0CiAKIApJbmRleDogVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC91bml4
TG9nZ2luZ1BpcGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC91bml4
TG9nZ2luZ1BpcGVzLmgJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC91
bml4TG9nZ2luZ1BpcGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAK
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAgICAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworbmFtZXNwYWNlIFdUUiB7CisKK3ZvaWQgc2V0dXBVbml4TG9nZ2luZ1BpcGVzKCk7Cit2
b2lkIHRlYXJkb3duVW5peExvZ2dpbmdQaXBlcygpOworCit9CkluZGV4OiBUb29scy9UZXN0UnVu
bmVyU2hhcmVkL3VuaXhMb2dnaW5nUGlwZXMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFJ1
bm5lclNoYXJlZC91bml4TG9nZ2luZ1BpcGVzLm1tCShub25leGlzdGVudCkKKysrIFRvb2xzL1Rl
c3RSdW5uZXJTaGFyZWQvdW5peExvZ2dpbmdQaXBlcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAidW5peExvZ2dpbmdQaXBlcy5oIgorCisj
aW1wb3J0IDxuZXRkYi5oPgorI2ltcG9ydCA8c3lzL3VuLmg+CisKK25hbWVzcGFjZSBXVFIgewor
CitzdGF0aWMgY29uc3QgaW50IFNURElOX0lOREVYID0gMDsKK3N0YXRpYyBjb25zdCBpbnQgU1RE
T1VUX0lOREVYID0gMTsKK3N0YXRpYyBjb25zdCBpbnQgU1RERVJSX0lOREVYID0gMjsKK3N0YXRp
YyBjb25zdCBpbnQgTlVNX1NPQ0tFVFMgPSAzOworICAgIAorc3RhdGljIGludCBzb2NrZXRzW05V
TV9TT0NLRVRTXTsKK3N0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfdW4gYWRkcmVzc1tOVU1fU09DS0VU
U107CitzdGF0aWMgRklMRSogb2xkRmlsZXNbTlVNX1NPQ0tFVFNdOworc3RhdGljIEZJTEUqKiBm
aWxlc1tOVU1fU09DS0VUU107CisKK3ZvaWQgc2V0dXBVbml4TG9nZ2luZ1BpcGVzKCkKK3sKKyAg
ICBjb25zdCBjaGFyKiBpZGVudGlmaWVyID0gZ2V0ZW52KCJJUENfSURFTlRJRklFUiIpOworICAg
IGNvbnN0IGNoYXIgKnNvY2tldFBhdGhzWzNdOworICAgIHNvY2tldFBhdGhzW1NURElOX0lOREVY
XSA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIi90bXAvJXNfSU4iLCBpZGVudGlmaWVy
XSBVVEY4U3RyaW5nXTsKKyAgICBzb2NrZXRQYXRoc1tTVERPVVRfSU5ERVhdID0gW1tOU1N0cmlu
ZyBzdHJpbmdXaXRoRm9ybWF0OkAiL3RtcC8lc19PVVQiLCBpZGVudGlmaWVyXSBVVEY4U3RyaW5n
XTsKKyAgICBzb2NrZXRQYXRoc1tTVERFUlJfSU5ERVhdID0gW1tOU1N0cmluZyBzdHJpbmdXaXRo
Rm9ybWF0OkAiL3RtcC8lc19FUlJPUiIsIGlkZW50aWZpZXJdIFVURjhTdHJpbmddOworCisgICAg
ZmlsZXNbU1RESU5fSU5ERVhdID0gJnN0ZGluOworICAgIGZpbGVzW1NURE9VVF9JTkRFWF0gPSAm
c3Rkb3V0OworICAgIGZpbGVzW1NUREVSUl9JTkRFWF0gPSAmc3RkZXJyOworICAgIAorICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgTlVNX1NPQ0tFVFM7ICsraSkgeworICAgICAgICBzb2NrZXRzW2ld
ID0gc29ja2V0KEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwKTsKKyAgICAgICAgbWVtc2V0KChjaGFy
KikgJmFkZHJlc3NbaV0sIDAsIHNpemVvZihhZGRyZXNzW2ldKSk7CisgICAgICAgIGFkZHJlc3Nb
aV0uc3VuX2ZhbWlseSA9IEFGX1VOSVg7CisgICAgICAgIHN0cm5jcHkoYWRkcmVzc1tpXS5zdW5f
cGF0aCwgc29ja2V0UGF0aHNbaV0sIHNpemVvZihhZGRyZXNzW2ldLnN1bl9wYXRoKSk7CisgICAg
ICAgIAorICAgICAgICBpZiAoOjpjb25uZWN0KHNvY2tldHNbaV0sIChzdHJ1Y3Qgc29ja2FkZHIq
KSAmYWRkcmVzc1tpXSwgc2l6ZW9mKGFkZHJlc3NbaV0pKSA8IDApCisgICAgICAgICAgICBhYm9y
dCgpOworICAgICAgICBvbGRGaWxlc1tpXSA9ICpmaWxlc1tpXTsKKyAgICAgICAgZmZsdXNoKG9s
ZEZpbGVzW2ldKTsKKyAgICAgICAgaWYgKGkgPT0gU1RESU5fSU5ERVgpCisgICAgICAgICAgICAq
ZmlsZXNbaV0gPSBmZG9wZW4oc29ja2V0c1tpXSwgInJiIik7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICpmaWxlc1tpXSA9IGZkb3Blbihzb2NrZXRzW2ldLCAid2IiKTsKKyAgICAgICAgc2V0
bGluZWJ1ZigqZmlsZXNbaV0pOworICAgIH0KKyAgICBmcHJpbnRmKHN0ZGVyciwgIiNQSUQ6ICVk
XG4iLCBnZXRwaWQoKSk7Cit9CisKK3ZvaWQgdGVhcmRvd25Vbml4TG9nZ2luZ1BpcGVzKCkKK3sK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9TT0NLRVRTOyArK2kpIHsKKyAgICAgICAgZmZs
dXNoKCpmaWxlc1tpXSk7CisgICAgICAgIGZjbG9zZSgqZmlsZXNbaV0pOworICAgICAgICAKKyAg
ICAgICAgc2h1dGRvd24oc29ja2V0c1tpXSwgU0hVVF9SRFdSKTsKKyAgICAgICAgOjpjbG9zZShz
b2NrZXRzW2ldKTsKKyAgICAgICAgKmZpbGVzW2ldID0gb2xkRmlsZXNbaV07CisgICAgfQorfQor
Cit9CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVy
L1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA5
OTI3KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDggQEAKIAkJMkU2
M0VEQTExODkxQjI5MTAwMkE3QUZDIC8qIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTYzRUQ3ODE4OTFB
Q0U5MDAyQTdBRkMgLyogQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbSAqLzsgfTsKIAkJMkU2
M0VEQTYxODkxQkRDMDAwMkE3QUZDIC8qIFRlc3RSdW5uZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNDOTk4MTcxMUQzRjUxRTAwMTdCQ0EyIC8q
IFRlc3RSdW5uZXIuY3BwICovOyB9OwogCQkyRTc0OUJGMjE4OTFFQkZBMDA3RkMxNzUgLyogRXZl
bnRTZW5kZXJQcm94eUlPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJFNjNFRDdBMTg5MUFDRTkwMDJBN0FGQyAvKiBFdmVudFNlbmRlclByb3h5SU9T
Lm1tICovOyB9OworCQkzMUIwOUNEMDFFMDQ1MzE0MDA2RjRFNEQgLyogdW5peExvZ2dpbmdQaXBl
cy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxQjA5
Q0NBMUUwNDUxOTcwMDZGNEU0RCAvKiB1bml4TG9nZ2luZ1BpcGVzLm1tICovOyB9OworCQkzMUIw
OUNEMTFFMDQ1MzJBMDA2RjRFNEQgLyogdW5peExvZ2dpbmdQaXBlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzFCMDlDQzkxRTA0NTE5NzAwNkY0RTRE
IC8qIHVuaXhMb2dnaW5nUGlwZXMuaCAqLzsgfTsKIAkJNTEwNThBRDUxRDY3ODgyMDAwOUE1MzhD
IC8qIGxpYldlYkNvcmVUZXN0U3VwcG9ydC5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMjMwRTE2MTM4Qzc4QkYwMEJDQ0ZDQSAvKiBsaWJX
ZWJDb3JlVGVzdFN1cHBvcnQuZHlsaWIgKi87IH07CiAJCTUxMDU4QUQ2MUQ2Nzg4MjUwMDlBNTM4
QyAvKiBXZWJLaXQuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY1MTY5Q0ExNDQ1MjIyRDAwRTBBOUQ3IC8qIFdlYktpdC5mcmFtZXdv
cmsgKi87IH07CiAJCTU2NDFFMkQwMTQzMzVFOTUwMDgzMDdFNSAvKiBKU1RleHRJbnB1dENvbnRy
b2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTY0MUUyQ0UxNDMzNUU5NTAwODMwN0U1IC8qIEpTVGV4dElucHV0Q29udHJvbGxlci5jcHAgKi87
IH07CkBAIC0yNTYsNiArMjU4LDggQEAKIAkJMkVFNTJEMTYxODkwQTlGQjAwMTBFRDIxIC8qIG1h
aW5JT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBtYWluSU9T
Lm1tOyBwYXRoID0gLi4vaW9zL21haW5JT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTMxMTBCRTBGMTVCQTAxMTQwMEQyMTZBQyAvKiBXZWJOb3RpZmljYXRpb25Qcm92aWRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJOb3RpZmljYXRpb25Qcm92aWRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkzMTY0QzhFRjE1RDFBREExMDBFRjFGRTAgLyogV2ViTm90aWZpY2F0
aW9uUHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vi
Tm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkz
MUIwOUNDOTFFMDQ1MTk3MDA2RjRFNEQgLyogdW5peExvZ2dpbmdQaXBlcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSB1bml4TG9nZ2luZ1BpcGVzLmg7IHBhdGggPSAuLi9UZXN0
UnVubmVyU2hhcmVkL3VuaXhMb2dnaW5nUGlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMzFCMDlDQ0ExRTA0NTE5NzAwNkY0RTREIC8qIHVuaXhMb2dnaW5nUGlwZXMubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSB1bml4TG9nZ2luZ1BpcGVzLm1t
OyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJlZC91bml4TG9nZ2luZ1BpcGVzLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkzNzhENDQyMjEzMzQ2RDAwMDA2QTc3N0IgLyogY29uZmln
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IGNvbmZpZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0MTIzMEUxNjEzOEM3OEJGMDBCQ0NGQ0EgLyogbGliV2ViQ29yZVRlc3RTdXBwb3J0LmR5bGli
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gImNvbXBp
bGVkLm1hY2gtby5keWxpYiI7IHBhdGggPSBsaWJXZWJDb3JlVGVzdFN1cHBvcnQuZHlsaWI7IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTQxODE3MzFCMTM4QUQzOUQwMDU3
QUFBNCAvKiBXZWJDb3JlVGVzdFN1cHBvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gV2ViQ29yZVRlc3RTdXBwb3J0Lmg7IHBhdGggPSBXZWJDb3JlVGVzdFN1cHBvcnQvV2Vi
Q29yZVRlc3RTdXBwb3J0Lmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBA
IC00NTYsNiArNDYwLDggQEAKIAkJMEYxOEU3MUExRDZCQzRCQzAwMjdFNTQ3IC8qIFRlc3RSdW5u
ZXJTaGFyZWQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJ
CTMxQjA5Q0M5MUUwNDUxOTcwMDZGNEU0RCAvKiB1bml4TG9nZ2luZ1BpcGVzLmggKi8sCisJCQkJ
MzFCMDlDQ0ExRTA0NTE5NzAwNkY0RTREIC8qIHVuaXhMb2dnaW5nUGlwZXMubW0gKi8sCiAJCQkJ
MEYxOEU3MUIxRDZCQzRFNjAwMjdFNTQ3IC8qIEJpbmRpbmdzICovLAogCQkJCTBGNzNCNTQ3MUJB
NzgyRkUwMDRCM0VGNCAvKiBVSVNjcmlwdENvbnRleHQgKi8sCiAJCQkpOwpAQCAtNzc3LDYgKzc4
Myw3IEBACiAJCQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFz
ayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQkzMUIwOUNEMTFFMDQ1MzJBMDA2RjRF
NEQgLyogdW5peExvZ2dpbmdQaXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3M0I1NTIxQkE3
ODk2ODAwNEIzRUY0IC8qIEpTVUlTY3JpcHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKQEAgLTk4NCw2
ICs5OTEsNyBAQAogCQkJCTBGNzNCNTUxMUJBNzg5NjgwMDRCM0VGNCAvKiBKU1VJU2NyaXB0Q29u
dHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjE4RTcxODFENkJDNDU2MDAyN0U1NDcg
LyogSlNXcmFwcGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExODUxMDNDMUI5QUUwRkUwMDc0
NEFFQiAvKiBPcHRpb25zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxQjA5Q0QwMUUwNDUzMTQw
MDZGNEU0RCAvKiB1bml4TG9nZ2luZ1BpcGVzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE4NTEw
NDAxQjlBRTEzMTAwNzQ0QUVCIC8qIFBpeGVsRHVtcFN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTE4NTEwNDExQjlBRTEzODAwNzQ0QUVCIC8qIFRlc3RDb250cm9sbGVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUExODUxMDNCMUI5QUUwRTIwMDc0NEFFQiAvKiBUZXN0Q29udHJvbGxl
ckNvY29hLm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lv
cy9UZXN0Q29udHJvbGxlcklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbQkocmV2aXNpb24gMjA5OTI3KQorKysgVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0JKHdvcmtpbmcgY29weSkK
QEAgLTI2LDExICsyNiwxMyBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJUZXN0Q29u
dHJvbGxlci5oIgogCisKICNpbXBvcnQgIlBsYXRmb3JtV2ViVmlldy5oIgogI2ltcG9ydCAiVGVz
dEludm9jYXRpb24uaCIKICNpbXBvcnQgIlRlc3RSdW5uZXJXS1dlYlZpZXcuaCIKICNpbXBvcnQg
PEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgogI2ltcG9ydCA8VUlLaXQvVUlLaXQuaD4KKyNpbXBv
cnQgInVuaXhMb2dnaW5nUGlwZXMuaCIKICNpbXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUmVm
UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+CiAjaW1w
b3J0IDxXZWJLaXQvV0tTdHJpbmdDRi5oPgpAQCAtNDcsMjEgKzQ5LDEyIEBAIHZvaWQgVGVzdENv
bnRyb2xsZXI6Om5vdGlmeURvbmUoKQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUlu
aXRpYWxpemUoKQogewotICAgIGNvbnN0IGNoYXIqIGlkZW50aWZpZXIgPSBnZXRlbnYoIklQQ19J
REVOVElGSUVSIik7Ci0gICAgY29uc3QgY2hhciAqc3RkaW5QYXRoID0gW1tOU1N0cmluZyBzdHJp
bmdXaXRoRm9ybWF0OkAiL3RtcC8lc19JTiIsIGlkZW50aWZpZXJdIFVURjhTdHJpbmddOwotICAg
IGNvbnN0IGNoYXIgKnN0ZG91dFBhdGggPSBbW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIv
dG1wLyVzX09VVCIsIGlkZW50aWZpZXJdIFVURjhTdHJpbmddOwotICAgIGNvbnN0IGNoYXIgKnN0
ZGVyclBhdGggPSBbW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIvdG1wLyVzX0VSUk9SIiwg
aWRlbnRpZmllcl0gVVRGOFN0cmluZ107Ci0KLSAgICBpbnQgaW5mZCA9IG9wZW4oc3RkaW5QYXRo
LCBPX1JEV1IpOwotICAgIGR1cDIoaW5mZCwgU1RESU5fRklMRU5PKTsKLSAgICBpbnQgb3V0ZmQg
PSBvcGVuKHN0ZG91dFBhdGgsIE9fUkRXUik7Ci0gICAgZHVwMihvdXRmZCwgU1RET1VUX0ZJTEVO
Tyk7Ci0gICAgaW50IGVycmZkID0gb3BlbihzdGRlcnJQYXRoLCBPX1JEV1IgfCBPX05PTkJMT0NL
KTsKLSAgICBkdXAyKGVycmZkLCBTVERFUlJfRklMRU5PKTsKKyAgICBzZXR1cFVuaXhMb2dnaW5n
UGlwZXMoKTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1EZXN0cm95KCkKIHsK
KyAgICB0ZWFyZG93blVuaXhMb2dnaW5nUGlwZXMoKTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxl
cjo6aW5pdGlhbGl6ZUluamVjdGVkQnVuZGxlUGF0aCgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298112</attachid>
            <date>2017-01-05 10:53:18 -0800</date>
            <delta_ts>2017-01-05 10:55:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165927-20170105105150.patch</filename>
            <type>text/plain</type>
            <size>171329</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMDM1OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDgxIEBACisyMDE3LTAxLTA1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBSZW1vdmluZyBMYXlvdXRUZXN0UmVsYXkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTkyNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTGF5b3V0VGVzdFJlbGF5OiBSZW1vdmVk
IExheW91dFRlc3RSZWxheS4KKyAgICAgICAgKiBNYWtlZmlsZTogUmVtb3ZlZCBMYXlvdXRUZXN0
UmVsYXkgcmVmZXJlbmNlcy4KKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLXdlYmtpdDogUmVtb3Zl
ZCBMYXlvdXRUZXN0UmVsYXkgcmVmZXJlbmNlcy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3BvcnQvYmFzZS5weToKKyAgICAgICAgKFBvcnQuX19pbml0X18pOiBBZGRlZCBfdGVzdF9ydW5u
ZXJfcHJvY2Vzc19jb25zdHJ1Y3Rvci4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQv
ZGFyd2luLnB5OgorICAgICAgICAoRGFyd2luUG9ydC5leHRyYWN0QnVuZGxlSUQpOiBBZGRlZCBm
dW5jdGlvbiB0byBleHRyYWN0IGJ1bmRsZSBJRCBmcm9tIHBsaXN0LgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHk6CisgICAgICAgIChEcml2ZXIuX3NldHVwX2Vudmly
b25fZm9yX2RyaXZlcik6IFN3YXBwZWQgX3NlcnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yIGZvciBf
dGVzdF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3Rvci4KKyAgICAgICAgKElPU1NpbXVsYXRvckRy
aXZlci5jbWRfbGluZSk6IFJlbW92ZWQgdW5uZWVkZWQgYXJndW1lbnRzLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChEcml2ZXJU
ZXN0LnRlc3Rfc3RvcF9jbGVhbnNfdXBfcHJvcGVybHkpOiBTZXQgX3Rlc3RfcnVubmVyX3Byb2Nl
c3NfY29uc3RydWN0b3IgZm9yIHRlc3RpbmcuCisgICAgICAgIChEcml2ZXJUZXN0LnRlc3RfdHdv
X3N0YXJ0c19jbGVhbnNfdXBfcHJvcGVybHkpOiBEaXR0by4KKyAgICAgICAgKERyaXZlclRlc3Qu
dGVzdF9zdGFydF9hY3R1YWxseV9zdGFydHMpOiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3BvcnQvaW9zLnB5OgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydCk6IFJlbW92ZSBy
ZWxheV9uYW1lLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fX2luaXRfXyk6IFNldCBfdGVz
dF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciBmb3IgSU9TU2ltdWxhdG9ycy4KKyAgICAgICAg
KElPU1NpbXVsYXRvclBvcnQuX2dldF9jcmFzaF9sb2cpOiBVcGRhdGUgY29tbWVudC4KKyAgICAg
ICAgKElPU1NpbXVsYXRvclBvcnQuX2J1aWxkX2RyaXZlcik6IFJlbW92ZSByZWZlcmVuY2VzIHRv
IExheW91dFRlc3RSZWxheS4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX2NyZWF0ZV9zaW11
bGF0b3JzKTogQWxpZ25tZW50IGZpeC4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQucmVsYXlf
cGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9jaGVja19yZWxheSk6
IERlbGV0ZWQuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9jaGVja19wb3J0X2J1aWxkKTog
RGVsZXRlZC4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX2J1aWxkX3JlbGF5KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0LnB5OgorICAg
ICAgICAoaW9zVGVzdC50ZXN0XzMyYml0KTogVXBkYXRlIHRlc3QuCisgICAgICAgIChpb3NUZXN0
LnRlc3RfNjRiaXQpOiBVcGRhdGUgdGVzdC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvc2VydmVyX3Byb2Nlc3MucHk6CisgICAgICAgIChTZXJ2ZXJQcm9jZXNzQmFzZSk6IE1vdmUg
c2hhcmVkIGNvZGUgdG8gYSBiYXNlIGNsYXNzLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2Uu
X19pbml0X18pOiBTZXQtdXAgU2VydmVyUHJvY2VzcyBiYXNpY3MuCisgICAgICAgIChTZXJ2ZXJQ
cm9jZXNzQmFzZS5pc19zdGFydGVkKTogVHJ1ZSBpZiB0aGUgcGlwZSBpcyBkZWZpbmVkLgorICAg
ICAgICAoU2VydmVyUHJvY2Vzc0Jhc2UuX3N0YXJ0KTogQmVnaW4gcnVubmluZyB0aGUgcHJvY2Vz
cy4KKyAgICAgICAgKFNlcnZlclByb2Nlc3NCYXNlLnBvbGwpOiBDaGVjayBpZiB0aGUgcHJvY2Vz
cyBpcyBydW5uaW5nLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2UuX3dyaXRlKTogU2VuZCBk
YXRhIHRvIHRoZSBwcm9jZXNzLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2UuX2dyYWJEYXRh
KTogQ2hlY2sgYm90aCBzdGRvdXQgYW5kIHN0ZGVyciBmb3IgZGF0YS4KKyAgICAgICAgKFNlcnZl
clByb2Nlc3NCYXNlLl9raWxsKTogU2h1dCBkb3duIHRoZSBwcm9jZXNzLgorICAgICAgICAoU2Vy
dmVyUHJvY2Vzc0Jhc2UuX2hhbmRsZV9wb3NzaWJsZV9pbnRlcnJ1cHQpOiBDaGVjayBmb3Iga2V5
Ym9hcmQgaW50ZXJydXB0cy4KKyAgICAgICAgKFNlcnZlclByb2Nlc3NCYXNlLl9yZXNldCk6IFJl
c2V0IHByb2Nlc3MgdmFsdWVzLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2UucHJvY2Vzc19u
YW1lKTogUmV0dXJuIHByb2Nlc3MgbmFtZS4KKyAgICAgICAgKFNlcnZlclByb2Nlc3NCYXNlLndy
aXRlKTogUHVibGljIHdyaXRlIGZ1bmN0aW9uLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2Uu
c3RhcnQpOiBQdWJsaWMgc3RhcnQgZnVuY3Rpb24uCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzQmFz
ZS5faGFuZGxlX3RpbWVvdXQpOiBUcmlnZ2VyIG9uIHRpbWVvdXQuCisgICAgICAgIChTZXJ2ZXJQ
cm9jZXNzQmFzZS5oYXNfY3Jhc2hlZCk6IENoZWNrIGlmIGEgcHJvY2VzcyBoYXMgY3Jhc2hlZC4K
KyAgICAgICAgKFNlcnZlclByb2Nlc3NCYXNlLl9yZWFkKTogTW92ZWQgZnJvbSBTZXJ2ZXJQcm9j
ZXNzLCBnZW5lcmFsaXplZC4KKyAgICAgICAgKFNlcnZlclByb2Nlc3NCYXNlLnN0b3ApOiBNb3Zl
ZCBmcm9tIFNlcnZlclByb2Nlc3MsIGdlbmVyYWxpemVkLgorICAgICAgICAoU2VydmVyUHJvY2Vz
c0Jhc2Uua2lsbCk6IE1vdmVkIGZyb20gU2VydmVyUHJvY2Vzcy4KKyAgICAgICAgKFNlcnZlclBy
b2Nlc3MpOgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5fX2luaXRfXyk6IE1vdmVkIGdlbmVyYWxp
emVkIGZ1bmN0aW9uYWxpdHkgdG8gU2VydmVyUHJvY2Vzc0Jhc2UuCisgICAgICAgIChTZXJ2ZXJQ
cm9jZXNzLmlzX3N0YXJ0ZWQpOiBDaGVjayBpZiB0aGUgcHJvY2VzcyBleGlzdHMuCisgICAgICAg
IChTZXJ2ZXJQcm9jZXNzLl9yZXNldCk6IE1vdmVkIGdlbmVyYWxpemVkIGZ1bmN0aW9uYWxpdHkg
dG8gU2VydmVyUHJvY2Vzc0Jhc2UuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLl9zdGFydCk6IE5v
IGNoYW5nZS4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MuX2hhbmRsZV9wb3NzaWJsZV9pbnRlcnJ1
cHQpOiBObyBjaGFuZ2UuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLnBvbGwpOiBObyBjaGFuZ2Uu
CisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLl93cml0ZSk6IFNwbGl0IGludG8gZ2VuZXJhbGl6ZWQg
d3JpdGUoKSBhbmQgdGhpcyBmdW5jdGlvbi4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MuX2dyYWJE
YXRhKTogR3JhYnMgZGF0YSBmcm9tIHByb2Nlc3MsIGVpdGhlciB3aW4zMiBvciBVbml4LgorICAg
ICAgICAoU2VydmVyUHJvY2Vzcy5yZXBsYWNlX291dHB1dHMpOiBObyBjaGFuZ2UuCisgICAgICAg
IChTaW11bGF0b3JQcm9jZXNzKToKKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX19pbml0X18p
OiBJbnN0YWxsIGFwcCBvbiBkZXZpY2UsIHNldHVwIGVudmlyb25tZW50LgorICAgICAgICAoU2lt
dWxhdG9yUHJvY2Vzcy5fcmVzZXQpOiBUZWFyIGRvd24gZmlsZXMuCisgICAgICAgIChTaW11bGF0
b3JQcm9jZXNzLl9fdW5saW5rX21ha2VfZmlmbyk6IFN1YnJvdXRpbmUgdG8gY3JlYXRlIGEgZmlm
by4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX3N0YXJ0KTogQ29uc3RydWN0IGZpZm8sIGxh
dW5jaCBhcHAuCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNzLmlzX3N0YXJ0ZWQpOiBDaGVjayBp
ZiBhbnkgZmlmbyBhcmUgZGVmaW5lZC4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MucG9sbCk6
IENoZWNrIGlmIHN0ZGVyciBpcyBhbGl2ZS4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX3dy
aXRlKTogV3JpdGUgdG8gc3RkaW4gZmlmby4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX2dy
YWJEYXRhKTogQXR0ZW1wdCB0byBwdWxsIGRhdGEgZnJvbSBib3RoIHN0ZG91dCBhbmQgc3RkZXJy
LgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5fa2lsbCk6IFNodXRkb3duIHByb2Nlc3MuCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3IucHk6CisgICAgICAgIChT
aW11bGF0b3IuaW5zdGFsbCk6IEluc3RhbGwgYXBwIG9uIHNpbXVsYXRlZCBkZXZpY2UuCisgICAg
ICAgIChTaW11bGF0b3IucnVuKTogUnVuIGFwcCBvbiBkZXZpY2UsIHRyYW5zZmVyIGVudmlyb25t
ZW50IGRhdGEuCisgICAgICAgIChTaW11bGF0b3Iua2lsbCk6IFNodXRkb3duIGFwcCBvbiBzaW11
bGF0ZWQgZGV2aWNlLgorCiAyMDE3LTAxLTA1ICBQZXIgQXJuZSBWb2xsYW4gIDxwdm9sbGFuQGFw
cGxlLmNvbT4KIAogICAgICAgICBbV2luXSBBcmNoaXZlIHRlc3QgcmVzdWx0IGlzIGZhaWxpbmcu
CkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZp
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMvQmFz
ZS54Y2NvbmZpZwkocmV2aXNpb24gMjEwMjc0KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0Nv
bmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcJKG5vbmV4aXN0ZW50KQpAQCAtMSw2OCArMCwwIEBA
Ci0vLyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0vLyBhcmUgbWV0OgotLy8gMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LS8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLS8vIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0vLyAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotLy8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS8vIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotLy8gUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLS8vIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotLy8gRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotLy8gUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0vLyBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0vLyBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgIi4uLy4uLy4u
Ly4uL0ludGVybmFsL0NvbmZpZ3VyYXRpb25zL0hhdmVJbnRlcm5hbFNESy54Y2NvbmZpZyIKLQot
VVNFX0lOVEVSTkFMX1NESyA9ICQoVVNFX0lOVEVSTkFMX1NES18kKENPTkZJR1VSQVRJT04pKTsK
LVVTRV9JTlRFUk5BTF9TREtfUHJvZHVjdGlvbiA9IFlFUzsKLVVTRV9JTlRFUk5BTF9TREtfRGVi
dWcgPSAkKEhBVkVfSU5URVJOQUxfU0RLKTsKLVVTRV9JTlRFUk5BTF9TREtfUmVsZWFzZSA9ICQo
SEFWRV9JTlRFUk5BTF9TREspOwotCi1DTEFOR19DWFhfTEFOR1VBR0VfU1RBTkRBUkQgPSBnbnUr
KzB4OwotQ0xBTkdfRU5BQkxFX09CSkNfQVJDID0gWUVTOwotQ0xBTkdfV0FSTl9DWFgwWF9FWFRF
TlNJT05TID0gTk87Ci1IRUFERVJfU0VBUkNIX1BBVEhTID0gJChCVUlMVF9QUk9EVUNUU19ESVIp
L3Vzci9sb2NhbC9pbmNsdWRlICQoV0VCQ09SRV9QUklWQVRFX0hFQURFUlNfRElSKS9Gb3J3YXJk
aW5nSGVhZGVycyAkKFNSQ1JPT1QpLy4uLy4uL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UgJChO
RVhUX1JPT1QpL3Vzci9sb2NhbC9pbmNsdWRlL1dlYkNvcmVUZXN0U3VwcG9ydDsKLUdDQ19QUkVQ
Uk9DRVNTT1JfREVGSU5JVElPTlMgPSAkKERFQlVHX0RFRklORVMpIEVOQUJMRV9EQVNIQk9BUkRf
U1VQUE9SVDsKLURFQlVHX0lORk9STUFUSU9OX0ZPUk1BVCA9IGR3YXJmLXdpdGgtZHN5bTsKLVBS
RUJJTkRJTkcgPSBOTwotR0NDX0NfTEFOR1VBR0VfU1RBTkRBUkQgPSBnbnU5OQotR0NDX0VOQUJM
RV9DUFBfRVhDRVBUSU9OUyA9IE5POwotR0NDX0VOQUJMRV9DUFBfUlRUSSA9IE5POwotR0NDX1BS
RUNPTVBJTEVfUFJFRklYX0hFQURFUiA9IFlFUwotR0NDX1RSRUFUX1dBUk5JTkdTX0FTX0VSUk9S
UyA9IFlFUwotR0NDX1ZFUlNJT04gPSBjb20uYXBwbGUuY29tcGlsZXJzLmxsdm0uY2xhbmcuMV8w
OwotR0NDX1dBUk5fQUJPVVRfREVQUkVDQVRFRF9GVU5DVElPTlMgPSBOTwotR0NDX1dBUk5fVU5V
U0VEX0ZVTkNUSU9OID0gWUVTCi1HQ0NfV0FSTl9VTlVTRURfVkFSSUFCTEUgPSBZRVMKLUdDQ19X
QVJOXzY0X1RPXzMyX0JJVF9DT05WRVJTSU9OW2FyY2g9eDg2XzY0XSA9IE5POwotV0FSTklOR19D
RkxBR1MgPSAtV2FsbCAtVyAtV25vLXVudXNlZC1wYXJhbWV0ZXIgLVd1bmRlZgotCi1ERUJVR19E
RUZJTkVTX2RlYnVnID0gOwotREVCVUdfREVGSU5FU19ub3JtYWwgPSBOREVCVUc7Ci1ERUJVR19E
RUZJTkVTID0gJChERUJVR19ERUZJTkVTXyQoQ1VSUkVOVF9WQVJJQU5UKSk7Ci0KLVRBUkdFVF9N
QUNfT1NfWF9WRVJTSU9OX01BSk9SID0gJChUQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUiQo
TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUOnN1ZmZpeDppZGVudGlmaWVyKSk7Ci1UQVJHRVRfTUFD
X09TX1hfVkVSU0lPTl9NQUpPUl8xMCA9IDEwMTAwMDsKLVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9O
X01BSk9SXzExID0gMTAxMTAwOwotVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1JfMTIgPSAx
MDEyMDA7Ci1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUl8xMyA9IDEwMTMwMDsKLQotU0RL
Uk9PVCA9IG1hY29zeC5pbnRlcm5hbDsKLQotU1VQUE9SVEVEX1BMQVRGT1JNUyA9IG1hY29zeDsK
LQotVE9PTENIQUlOUyA9IGRlZmF1bHQ7Ci0KLU9USEVSX0NGTEFHUyA9ICQoQVNBTl9PVEhFUl9D
RkxBR1MpOwotT1RIRVJfQ1BMVVNQTFVTRkxBR1MgPSAkKEFTQU5fT1RIRVJfQ1BMVVNQTFVTRkxB
R1MpOwotT1RIRVJfTERGTEFHUyA9ICQoQVNBTl9PVEhFUl9MREZMQUdTKTsKSW5kZXg6IFRvb2xz
L0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25maWcKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0RlYnVnUmVs
ZWFzZS54Y2NvbmZpZwkocmV2aXNpb24gMjEwMjc0KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5
L0NvbmZpZ3VyYXRpb25zL0RlYnVnUmVsZWFzZS54Y2NvbmZpZwkobm9uZXhpc3RlbnQpCkBAIC0x
LDQyICswLDAgQEAKLS8vIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLS8vIGFyZSBtZXQ6Ci0v
LyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LS8vICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0vLyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotLy8gSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0v
LyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotLy8gQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0vLyBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0vLyBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLS8vIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLS8vIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW5jbHVk
ZSAiQmFzZS54Y2NvbmZpZyIKLQotQVJDSFMgPSAkKEFSQ0hTX1NUQU5EQVJEXzY0X0JJVCk7Ci0K
LVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SID0gJChNQUNfT1NfWF9WRVJTSU9OX01BSk9S
KTsKLQotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUID0gJChNQUNPU1hfREVQTE9ZTUVOVF9UQVJH
RVRfJChUQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUikpCi1NQUNPU1hfREVQTE9ZTUVOVF9U
QVJHRVRfMTAxMDAwID0gMTAuMTA7Ci1NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfMTAxMTAwID0g
MTAuMTE7Ci1NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfMTAxMjAwID0gMTAuMTI7Ci1NQUNPU1hf
REVQTE9ZTUVOVF9UQVJHRVRfMTAxMzAwID0gMTAuMTM7Ci0KLUZSQU1FV09SS19TRUFSQ0hfUEFU
SFMgPSAkKERFVkVMT1BFUl9ESVIpL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3M7Ci1MRF9SVU5Q
QVRIX1NFQVJDSF9QQVRIUyA9ICQoREVWRUxPUEVSX0RJUikvTGlicmFyeS9Qcml2YXRlRnJhbWV3
b3JrczsKLU9USEVSX0xERkxBR1MgPSAtZnJhbWV3b3JrIENvcmVTaW11bGF0b3IgLWZyYW1ld29y
ayBBcHBLaXQ7Ci0KLVNES1JPT1QgPSAkKFNES1JPT1RfbWFjb3N4XyQoVVNFX0lOVEVSTkFMX1NE
SykpOwotU0RLUk9PVF9tYWNvc3hfID0gbWFjb3N4OwotU0RLUk9PVF9tYWNvc3hfWUVTID0gbWFj
b3N4LmludGVybmFsOwpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxh
eS9Db3JlU2ltdWxhdG9yU1BJLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5
L0xheW91dFRlc3RSZWxheS9Db3JlU2ltdWxhdG9yU1BJLmgJKHJldmlzaW9uIDIxMDI3NCkKKysr
IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvQ29yZVNpbXVsYXRvclNQSS5o
CShub25leGlzdGVudCkKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBf
X2hhc19pbmNsdWRlKDxDb3JlU2ltdWxhdG9yL0NvcmVTaW11bGF0b3IuaD4pCi0KLS8qIEZJWE1F
OiBSZW1vdmUgdGhlIGJlbG93ICNkZWZpbmUgb25jZSB3ZSByZXF1aXJlIFhjb2RlIDcuMyB3aXRo
IGlPUyA5LjMgU0RLIG9yIG5ld2VyLiAqLwotI2RlZmluZSBfX2NvcmVzaW1fdW5hdmFpbGFibGVf
bXNnKG1zZykKLSNpbXBvcnQgPENvcmVTaW11bGF0b3IvQ29yZVNpbXVsYXRvci5oPgotCi0vKiBG
SVhNRTogQWx3YXlzIHVzZSBTaW1TZXJ2aWNlQ29udGV4dCBvbmNlIHdlIHJlcXVpcmUgWGNvZGUg
Ny4zIHdpdGggaU9TIDkuMyBTREsgb3IgbmV3ZXIuICovCi0jZGVmaW5lIFVTRV9TSU1fU0VSVklD
RV9DT05URVhUIGRlZmluZWQoQ09SRVNJTV9BUElfTUFYX0FMTE9XRUQpCi0KLSNlbHNlCi0KLSNp
bXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jZGVmaW5lIFVTRV9TSU1fU0VSVklD
RV9DT05URVhUIDEKLQotI2RlZmluZSBrU2ltRGV2aWNlTGF1bmNoQXBwbGljYXRpb25Bcmd1bWVu
dHMgQCJhcmd1bWVudHMiCi0jZGVmaW5lIGtTaW1EZXZpY2VMYXVuY2hBcHBsaWNhdGlvbkVudmly
b25tZW50IEAiZW52aXJvbm1lbnQiCi0KLUBpbnRlcmZhY2UgU2ltRGV2aWNlIDogTlNPYmplY3QK
LS0gKEJPT0wpaW5zdGFsbEFwcGxpY2F0aW9uOihOU1VSTCAqKWluc3RhbGxVUkwgd2l0aE9wdGlv
bnM6KE5TRGljdGlvbmFyeSAqKW9wdGlvbnMgZXJyb3I6KE5TRXJyb3IgKiBfX2F1dG9yZWxlYXNp
bmcgKillcnJvcjsKLS0gKHBpZF90KWxhdW5jaEFwcGxpY2F0aW9uV2l0aElEOihOU1N0cmluZyAq
KWJ1bmRsZUlEIG9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKW9wdGlvbnMgZXJyb3I6KE5TRXJyb3Ig
KiBfX2F1dG9yZWxlYXNpbmcgKillcnJvcjsKLUBlbmQKLQotQGludGVyZmFjZSBTaW1EZXZpY2VT
ZXQgOiBOU09iamVjdAotQHByb3BlcnR5IChyZWFkb25seSwgY29weSkgTlNEaWN0aW9uYXJ5ICpk
ZXZpY2VzQnlVRElEOwotQGVuZAotCi1AaW50ZXJmYWNlIFNpbVNlcnZpY2VDb250ZXh0IDogTlNP
YmplY3QKLSsoU2ltU2VydmljZUNvbnRleHQgKilzaGFyZWRTZXJ2aWNlQ29udGV4dEZvckRldmVs
b3BlckRpcjooTlNTdHJpbmcgKilkZXZlbG9wZXJEaXIgZXJyb3I6KE5TRXJyb3IgKiBfX2F1dG9y
ZWxlYXNpbmcgKillcnJvcjsKLS0oU2ltRGV2aWNlU2V0ICopZGVmYXVsdERldmljZVNldFdpdGhF
cnJvcjooTlNFcnJvciAqIF9fYXV0b3JlbGVhc2luZyAqKWVycm9yOwotQGVuZAotCi0jZW5kaWYK
SW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRQaXBlUmVsYXku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xU
UGlwZVJlbGF5LmgJKHJldmlzaW9uIDIxMDI3NCkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9M
YXlvdXRUZXN0UmVsYXkvTFRQaXBlUmVsYXkuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDM2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIExUUGlwZVJlbGF5X2gKLSNkZWZpbmUgTFRQaXBlUmVs
YXlfaAotCi0jaW1wb3J0ICJMVFJlbGF5LmgiCi0KLUBpbnRlcmZhY2UgTFRQaXBlUmVsYXkgOiBO
U09iamVjdCA8TFRSZWxheT4KLUBwcm9wZXJ0eSAod2VhaykgaWQ8TFRSZWxheURlbGVnYXRlPiBy
ZWxheURlbGVnYXRlOwotLSAoaWQpaW5pdFdpdGhQcmVmaXg6KE5TU3RyaW5nICopcHJlZml4Owot
QGVuZAotCi0jZW5kaWYKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVs
YXkvTFRQaXBlUmVsYXkubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5
b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0JKHJldmlzaW9uIDIxMDI3NCkKKysrIFRvb2xzL0xh
eW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRQaXBlUmVsYXkubQkobm9uZXhpc3RlbnQp
CkBAIC0xLDE1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiTFRQaXBlUmVsYXkuaCIK
LQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQu
aD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQotQGludGVyZmFjZSBMVFBpcGVSZWxheSAoKQot
QHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU1N0cmluZyAqZmlmb1ByZWZpeDsKLUBwcm9w
ZXJ0eSAoc3Ryb25nKSBOU091dHB1dFN0cmVhbSAqc3RhbmRhcmRJbnB1dFBpcGU7Ci1AcHJvcGVy
dHkgKHN0cm9uZykgTlNJbnB1dFN0cmVhbSAqc3RhbmRhcmRPdXRwdXRQaXBlOwotQHByb3BlcnR5
IChzdHJvbmcpIE5TSW5wdXRTdHJlYW0gKnN0YW5kYXJkRXJyb3JQaXBlOwotCi0tICh2b2lkKWNy
ZWF0ZUZJRk9zOwotLSAodm9pZClkZXN0cm95RklGT3M7Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlv
biBMVFBpcGVSZWxheQotCi0tIChOU1N0cmluZyAqKWluUGlwZVBhdGgKLXsKLSAgICByZXR1cm4g
W19maWZvUHJlZml4IHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOkAiX0lOIl07Ci19Ci0KLS0gKE5T
U3RyaW5nICopb3V0UGlwZVBhdGgKLXsKLSAgICByZXR1cm4gW19maWZvUHJlZml4IHN0cmluZ0J5
QXBwZW5kaW5nU3RyaW5nOkAiX09VVCJdOwotfQotCi0tIChOU1N0cmluZyAqKWVycm9yUGlwZVBh
dGgKLXsKLSAgICByZXR1cm4gW19maWZvUHJlZml4IHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOkAi
X0VSUk9SIl07Ci19Ci0KLS0gKE5TT3V0cHV0U3RyZWFtICopIG91dHB1dFN0cmVhbQotewotICAg
IHJldHVybiBfc3RhbmRhcmRJbnB1dFBpcGU7Ci19Ci0KLS0gKGlkKWluaXRXaXRoUHJlZml4OihO
U1N0cmluZyAqKXByZWZpeAotewotICAgIGlmICgoc2VsZiA9IFtzdXBlciBpbml0XSkpIHsKLSAg
ICAgICAgX2ZpZm9QcmVmaXggPSBwcmVmaXg7Ci0gICAgICAgIFtzZWxmIGRlc3Ryb3lGSUZPc107
Ci0gICAgfQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldHVwCi17Ci0gICAgW3Nl
bGYgZGVzdHJveUZJRk9zXTsKLSAgICBbc2VsZiBjcmVhdGVGSUZPc107Ci19Ci0KLS0gKHZvaWQp
dGVhckRvd24KLXsKLSAgICBbc2VsZiBkZXN0cm95RklGT3NdOwotfQotCi0tKHZvaWQpIGNvbm5l
Y3QKLXsKLSAgICBfc3RhbmRhcmRJbnB1dFBpcGUgPSBbTlNPdXRwdXRTdHJlYW0gb3V0cHV0U3Ry
ZWFtVG9GaWxlQXRQYXRoOltzZWxmIGluUGlwZVBhdGhdIGFwcGVuZDpZRVNdOwotICAgIF9zdGFu
ZGFyZE91dHB1dFBpcGUgPSBbTlNJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbVdpdGhGaWxlQXRQYXRo
OltzZWxmIG91dFBpcGVQYXRoXV07Ci0gICAgX3N0YW5kYXJkRXJyb3JQaXBlID0gW05TSW5wdXRT
dHJlYW0gaW5wdXRTdHJlYW1XaXRoRmlsZUF0UGF0aDpbc2VsZiBlcnJvclBpcGVQYXRoXV07Ci0K
LSAgICBbW3NlbGYgc3RhbmRhcmRJbnB1dFBpcGVdIHNldERlbGVnYXRlOnNlbGZdOwotICAgIFtb
c2VsZiBzdGFuZGFyZE91dHB1dFBpcGVdIHNldERlbGVnYXRlOnNlbGZdOwotICAgIFtbc2VsZiBz
dGFuZGFyZEVycm9yUGlwZV0gc2V0RGVsZWdhdGU6c2VsZl07Ci0KLSAgICBbW3NlbGYgc3RhbmRh
cmRPdXRwdXRQaXBlXSBzY2hlZHVsZUluUnVuTG9vcDpbTlNSdW5Mb29wIG1haW5SdW5Mb29wXSBm
b3JNb2RlOk5TRGVmYXVsdFJ1bkxvb3BNb2RlXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRFcnJvclBp
cGVdIHNjaGVkdWxlSW5SdW5Mb29wOltOU1J1bkxvb3AgbWFpblJ1bkxvb3BdIGZvck1vZGU6TlNE
ZWZhdWx0UnVuTG9vcE1vZGVdOwotCi0gICAgW1tzZWxmIHN0YW5kYXJkSW5wdXRQaXBlXSBvcGVu
XTsKLSAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRQaXBlXSBvcGVuXTsKLSAgICBbW3NlbGYgc3Rh
bmRhcmRFcnJvclBpcGVdIG9wZW5dOwotCi0gICAgW1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZENv
bm5lY3RdOwotfQotCi0tICh2b2lkKWRpc2Nvbm5lY3QKLXsKLSAgICBbW3NlbGYgc3RhbmRhcmRP
dXRwdXRQaXBlXSBjbG9zZV07Ci0gICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JQaXBlXSBjbG9zZV07
Ci0gICAgW1tzZWxmIHN0YW5kYXJkSW5wdXRQaXBlXSBjbG9zZV07Ci0gICAgW1tzZWxmIHJlbGF5
RGVsZWdhdGVdIGRpZERpc2Nvbm5lY3RdOwotfQotCi0tICh2b2lkKWNyZWF0ZUZJRk9zCi17Ci0g
ICAgbWtmaWZvKFtbc2VsZiBpblBpcGVQYXRoXSBVVEY4U3RyaW5nXSwgMDY2Nik7Ci0gICAgbWtm
aWZvKFtbc2VsZiBvdXRQaXBlUGF0aF0gVVRGOFN0cmluZ10sIDA2NjYpOwotICAgIG1rZmlmbyhb
W3NlbGYgZXJyb3JQaXBlUGF0aF0gVVRGOFN0cmluZ10sIDA2NjYpOwotfQotCi0tICh2b2lkKWRl
c3Ryb3lGSUZPcwotewotICAgIHVubGluayhbW3NlbGYgaW5QaXBlUGF0aF0gVVRGOFN0cmluZ10p
OwotICAgIHVubGluayhbW3NlbGYgb3V0UGlwZVBhdGhdIFVURjhTdHJpbmddKTsKLSAgICB1bmxp
bmsoW1tzZWxmIGVycm9yUGlwZVBhdGhdIFVURjhTdHJpbmddKTsKLX0KLQotLSAodm9pZCkgcmVs
YXlTdHJlYW06KE5TSW5wdXRTdHJlYW0gKilzdHJlYW0KLXsKLSAgICB1aW50OF90IGJ5dGVzWzEw
MjRdOwotICAgIE5TSW50ZWdlciBieXRlc1JlYWQgPSBbc3RyZWFtIHJlYWQ6Ynl0ZXMgbWF4TGVu
Z3RoOjEwMjRdOwotICAgIE5TRGF0YSAqZGF0YSA9IFtOU0RhdGEgZGF0YVdpdGhCeXRlczpieXRl
cyBsZW5ndGg6Ynl0ZXNSZWFkXTsKLQotICAgIGlmIChzdHJlYW0gPT0gW3NlbGYgc3RhbmRhcmRP
dXRwdXRQaXBlXSkKLSAgICAgICAgW1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZFJlY2VpdmVTdGRv
dXREYXRhOmRhdGFdOwotICAgIGVsc2UKLSAgICAgICAgW1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRp
ZFJlY2VpdmVTdGRlcnJEYXRhOmRhdGFdOwotfQotCi0tICh2b2lkKXN0cmVhbTooTlNTdHJlYW0g
KilhU3RyZWFtIGhhbmRsZUV2ZW50OihOU1N0cmVhbUV2ZW50KWV2ZW50Q29kZQotewotICAgIHN3
aXRjaCAoZXZlbnRDb2RlKSB7Ci0gICAgY2FzZSBOU1N0cmVhbUV2ZW50Tm9uZToKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBOU1N0cmVhbUV2ZW50SGFzQnl0ZXNBdmFpbGFibGU6Ci0gICAgICAg
IFtzZWxmIHJlbGF5U3RyZWFtOihOU0lucHV0U3RyZWFtICopYVN0cmVhbV07Ci0gICAgY2FzZSBO
U1N0cmVhbUV2ZW50SGFzU3BhY2VBdmFpbGFibGU6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
TlNTdHJlYW1FdmVudE9wZW5Db21wbGV0ZWQ6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlNT
dHJlYW1FdmVudEVuZEVuY291bnRlcmVkOgotICAgICAgICBbW3NlbGYgcmVsYXlEZWxlZ2F0ZV0g
ZGlkQ3Jhc2hXaXRoTWVzc2FnZTpuaWxdOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5TU3Ry
ZWFtRXZlbnRFcnJvck9jY3VycmVkOgotICAgICAgICBbW3NlbGYgcmVsYXlEZWxlZ2F0ZV0gZGlk
Q3Jhc2hXaXRoTWVzc2FnZTpbW2FTdHJlYW0gc3RyZWFtRXJyb3JdIGRlc2NyaXB0aW9uXV07Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotQGVuZApJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJl
bGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0
VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5LmgJKHJldmlzaW9uIDIxMDI3NCkKKysr
IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheS5oCShub25leGlz
dGVudCkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTFRSZWxheV9oCi0j
ZGVmaW5lIExUUmVsYXlfaAotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQot
QHByb3RvY29sIExUUmVsYXlEZWxlZ2F0ZSA8TlNPYmplY3Q+Ci0tICh2b2lkKWRpZENvbm5lY3Q7
Ci0tICh2b2lkKWRpZERpc2Nvbm5lY3Q7Ci0tICh2b2lkKWRpZENyYXNoV2l0aE1lc3NhZ2U6KE5T
U3RyaW5nICopbWVzc2FnZTsKLS0gKHZvaWQpZGlkUmVjZWl2ZVN0ZG91dERhdGE6KE5TRGF0YSAq
KWRhdGE7Ci0tICh2b2lkKWRpZFJlY2VpdmVTdGRlcnJEYXRhOihOU0RhdGEgKilkYXRhOwotQGVu
ZAotCi1AcHJvdG9jb2wgTFRSZWxheSA8TlNPYmplY3QsIE5TU3RyZWFtRGVsZWdhdGU+Ci0tICh2
b2lkKXNldHVwOwotLSAodm9pZCl0ZWFyRG93bjsKLS0gKHZvaWQpY29ubmVjdDsKLS0gKHZvaWQp
ZGlzY29ubmVjdDsKLUBwcm9wZXJ0eSAod2VhaykgaWQ8TFRSZWxheURlbGVnYXRlPiByZWxheURl
bGVnYXRlOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU091dHB1dFN0cmVhbSAqb3V0
cHV0U3RyZWFtOwotQGVuZAotCi0jZW5kaWYKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9M
YXlvdXRUZXN0UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9M
YXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLmgJKHJldmlz
aW9uIDIxMDI3NCkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRS
ZWxheUNvbnRyb2xsZXIuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotI2lmbmRlZiBMVFJlbGF5Q29udHJvbGxlcl9oCi0jZGVmaW5lIExUUmVsYXlDb250cm9sbGVy
X2gKLQotI2ltcG9ydCAiTFRSZWxheS5oIgotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRp
b24uaD4KLQotQGNsYXNzIFNpbURldmljZTsKLQotQGludGVyZmFjZSBMVFJlbGF5Q29udHJvbGxl
ciA6IE5TT2JqZWN0IDxMVFJlbGF5RGVsZWdhdGU+Ci0tIChpZClpbml0V2l0aERldmljZTooU2lt
RGV2aWNlICopZGV2aWNlIHByb2R1Y3REaXI6KE5TU3RyaW5nICopcHJvZHVjdERpciBhcHBQYXRo
OihOU1N0cmluZyAqKWFwcFBhdGggZGV2aWNlVURJRDooTlNVVUlEICopdWRpZCBkdW1wVG9vbEFy
Z3VtZW50czooTlNBcnJheSAqKWFyZ3VtZW50czsKLS0gKHZvaWQpc3RhcnQ7Ci0tICh2b2lkKWZp
bmlzaDsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0
VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0
VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5tCShyZXZpc2lvbiAy
MTAyNzQpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlD
b250cm9sbGVyLm0JKG5vbmV4aXN0ZW50KQpAQCAtMSwyNzIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbXBvcnQgIkxUUmVsYXlDb250cm9sbGVyLmgiCi0KLSNpbXBvcnQgIkNvcmVTaW11bGF0b3JT
UEkuaCIKLSNpbXBvcnQgIkxUUGlwZVJlbGF5LmgiCi0jaW1wb3J0IDxBcHBLaXQvQXBwS2l0Lmg+
Ci0jaW1wb3J0IDxjcnRfZXh0ZXJucy5oPgotCi1AaW50ZXJmYWNlIExUUmVsYXlDb250cm9sbGVy
ICgpCi1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIGRpc3BhdGNoX3NvdXJjZV90IHN0YW5k
YXJkSW5wdXREaXNwYXRjaFNvdXJjZTsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNG
aWxlSGFuZGxlICpzdGFuZGFyZE91dHB1dDsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykg
TlNGaWxlSGFuZGxlICpzdGFuZGFyZEVycm9yOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25n
KSBOU1N0cmluZyAqaXBjSWRlbnRpZmllcjsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykg
TlNTdHJpbmcgKmFwcEJ1bmRsZUlkZW50aWZpZXI7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJv
bmcpIE5TU3RyaW5nICphcHBQYXRoOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU1VV
SUQgKmRldmljZVVESUQ7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TQXJyYXkgKmR1
bXBUb29sQXJndW1lbnRzOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU1N0cmluZyAq
cHJvZHVjdERpcjsKLUBwcm9wZXJ0eSAoc3Ryb25nKSBTaW1EZXZpY2UgKmRldmljZTsKLUBwcm9w
ZXJ0eSAoc3Ryb25nKSBpZDxMVFJlbGF5PiByZWxheTsKLUBwcm9wZXJ0eSBwaWRfdCBwaWQ7Ci1A
cHJvcGVydHkgKHN0cm9uZykgZGlzcGF0Y2hfc291cmNlX3QgYXBwRGlzcGF0Y2hTb3VyY2U7Ci1A
ZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBMVFJlbGF5Q29udHJvbGxlcgotCi0tIChpZClpbml0V2l0
aERldmljZTooU2ltRGV2aWNlICopZGV2aWNlIHByb2R1Y3REaXI6KE5TU3RyaW5nICopcHJvZHVj
dERpciBhcHBQYXRoOihOU1N0cmluZyAqKWFwcFBhdGggZGV2aWNlVURJRDooTlNVVUlEICopdWRp
ZCBkdW1wVG9vbEFyZ3VtZW50czooTlNBcnJheSAqKWFyZ3VtZW50cwotewotICAgIGlmICgoc2Vs
ZiA9IFtzdXBlciBpbml0XSkpIHsKLSAgICAgICAgX2RldmljZSA9IGRldmljZTsKLSAgICAgICAg
X3Byb2R1Y3REaXIgPSBwcm9kdWN0RGlyOwotICAgICAgICBfYXBwUGF0aCA9IGFwcFBhdGg7Ci0g
ICAgICAgIF9hcHBCdW5kbGVJZGVudGlmaWVyID0gW1tOU0J1bmRsZSBidW5kbGVXaXRoUGF0aDph
cHBQYXRoXSBidW5kbGVJZGVudGlmaWVyXTsKLSAgICAgICAgX2RldmljZVVESUQgPSB1ZGlkOwot
ICAgICAgICBfZHVtcFRvb2xBcmd1bWVudHMgPSBhcmd1bWVudHM7Ci0gICAgICAgIF9zdGFuZGFy
ZElucHV0RGlzcGF0Y2hTb3VyY2UgPSBkaXNwYXRjaF9zb3VyY2VfY3JlYXRlKERJU1BBVENIX1NP
VVJDRV9UWVBFX1JFQUQsIFNURElOX0ZJTEVOTywgMCwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUo
KSk7Ci0gICAgICAgIF9zdGFuZGFyZE91dHB1dCA9IFtOU0ZpbGVIYW5kbGUgZmlsZUhhbmRsZVdp
dGhTdGFuZGFyZE91dHB1dF07Ci0gICAgICAgIF9zdGFuZGFyZEVycm9yID0gW05TRmlsZUhhbmRs
ZSBmaWxlSGFuZGxlV2l0aFN0YW5kYXJkRXJyb3JdOwotCi0gICAgICAgIGRpc3BhdGNoX3NvdXJj
ZV9zZXRfZXZlbnRfaGFuZGxlcihfc3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNlLCBeewotICAg
ICAgICAgICAgdWludDhfdCBidWZmZXJbMTAyNF07Ci0gICAgICAgICAgICBzc2l6ZV90IGxlbiA9
IHJlYWQoU1RESU5fRklMRU5PLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKLSAgICAgICAgICAg
IGlmIChsZW4gPiAwKSB7Ci0gICAgICAgICAgICAgICAgQHRyeSB7Ci0gICAgICAgICAgICAgICAg
ICAgIFtbW3NlbGYgcmVsYXldIG91dHB1dFN0cmVhbV0gd3JpdGU6YnVmZmVyIG1heExlbmd0aDps
ZW5dOwotICAgICAgICAgICAgICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAqZSkgewotICAgICAg
ICAgICAgICAgICAgICAvLyBCcm9rZW4gcGlwZSAtIHRoZSBkdW1wIHRvb2wgY3Jhc2hlZC4gVGlt
ZSB0byBkaWUuCi0gICAgICAgICAgICAgICAgICAgIFtzZWxmIGRpZENyYXNoV2l0aE1lc3NhZ2U6
bmlsXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIC8vIEVPRiBSZWNlaXZlZCBvbiB0aGUgcmVsYXkncyBzdGFuZGFyZCBpbnB1dC4KLSAg
ICAgICAgICAgICAgICBbc2VsZiBmaW5pc2hdOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsK
LQotICAgICAgICBfcmVsYXkgPSBbW0xUUGlwZVJlbGF5IGFsbG9jXSBpbml0V2l0aFByZWZpeDpb
QCIvdG1wIiBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6c2VsZi5pcGNJZGVudGlmaWVy
XV07Ci0gICAgICAgIFtfcmVsYXkgc2V0UmVsYXlEZWxlZ2F0ZTpzZWxmXTsKLSAgICB9Ci0gICAg
cmV0dXJuIHNlbGY7Ci19Ci0KLS0gKE5TU3RyaW5nICopaXBjSWRlbnRpZmllcgotewotICAgIHJl
dHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVALSVAIiwgc2VsZi5hcHBCdW5kbGVJ
ZGVudGlmaWVyLCBzZWxmLmRldmljZVVESUQuVVVJRFN0cmluZ107Ci19Ci0KLS0gKE5TU3RyaW5n
ICopcHJvY2Vzc05hbWUKLXsKLSAgICByZXR1cm4gW3NlbGYuYXBwQnVuZGxlSWRlbnRpZmllciBj
b21wb25lbnRzU2VwYXJhdGVkQnlTdHJpbmc6QCIuIl0ubGFzdE9iamVjdDsKLX0KLQotLSAodm9p
ZClkaWRSZWNlaXZlU3Rkb3V0RGF0YTooTlNEYXRhICopZGF0YQotewotICAgIEB0cnkgewotICAg
ICAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRdIHdyaXRlRGF0YTpkYXRhXTsKLSAgICB9IEBjYXRj
aCAoTlNFeGNlcHRpb24gKmV4Y2VwdGlvbikgewotICAgICAgICAvLyBOU0ZpbGVIYW5kbGVPcGVy
YXRpb25FeGNlcHRpb24KLSAgICAgICAgLy8gQnJva2VuIHBpcGUgLSB0aGUgdGVzdCBoYXJuZXNz
IHN0b3BwZWQgbGlzdGVuaW5nIHRvIHVzLAotICAgICAgICAvLyBwcm9iYWJseSBiZWNhdXNlIHdl
IHRpbWVkIG91dCBvciBhIHJ1biB3YXMgY2FuY2VsZWQuCi0gICAgICAgIGV4aXQoRVhJVF9GQUlM
VVJFKTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpZGlkUmVjZWl2ZVN0ZGVyckRhdGE6KE5TRGF0YSAq
KWRhdGEKLXsKLSAgICBAdHJ5IHsKLSAgICAgICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JdIHdyaXRl
RGF0YTpkYXRhXTsKLSAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24gKmV4Y2VwdGlvbikgewotICAg
ICAgICAvLyBOU0ZpbGVIYW5kbGVPcGVyYXRpb25FeGNlcHRpb24KLSAgICAgICAgLy8gQnJva2Vu
IHBpcGUgLSB0aGUgdGVzdCBoYXJuZXNzIHN0b3BwZWQgbGlzdGVuaW5nIHRvIHVzLAotICAgICAg
ICAvLyBwcm9iYWJseSBiZWNhdXNlIHdlIHRpbWVkIG91dCBvciBhIHJ1biB3YXMgY2FuY2VsZWQu
Ci0gICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpZGlkRGlz
Y29ubmVjdAotewotICAgIGRpc3BhdGNoX3N1c3BlbmQoW3NlbGYgc3RhbmRhcmRJbnB1dERpc3Bh
dGNoU291cmNlXSk7Ci19Ci0KLS0gKHZvaWQpZGlkQ29ubmVjdAotewotICAgIGRpc3BhdGNoX3Jl
c3VtZShbc2VsZiBzdGFuZGFyZElucHV0RGlzcGF0Y2hTb3VyY2VdKTsKLX0KLQotLSAodm9pZClk
aWRDcmFzaFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICBbW3NlbGYgcmVs
YXldIGRpc2Nvbm5lY3RdOwotICAgIE5TU3RyaW5nICpjcmFzaE1lc3NhZ2UgPSBbTlNTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpAIlxuI0NSQVNIRUQgLSAlQCAocGlkICVkKVxuIiwgW3NlbGYgcHJv
Y2Vzc05hbWVdLCBbc2VsZiBwaWRdXTsKLQotICAgIGlmIChtZXNzYWdlKQotICAgICAgICBjcmFz
aE1lc3NhZ2UgPSBbY3Jhc2hNZXNzYWdlIHN0cmluZ0J5QXBwZW5kaW5nRm9ybWF0OkAiJUBcbiIs
IG1lc3NhZ2VdOwotCi0gICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JdIHdyaXRlRGF0YTpbY3Jhc2hN
ZXNzYWdlIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXV07Ci0gICAgW1tz
ZWxmIHN0YW5kYXJkRXJyb3JdIGNsb3NlRmlsZV07Ci0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0
XSBjbG9zZUZpbGVdOwotICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLX0KLQotLSAodm9pZClpbnN0
YWxsQXBwCi17Ci0gICAgTlNEaWN0aW9uYXJ5ICppbnN0YWxsT3B0aW9ucyA9IEB7Ci0gICAgICAg
IChOU1N0cmluZyAqKWtDRkJ1bmRsZUlkZW50aWZpZXJLZXk6IHNlbGYuYXBwQnVuZGxlSWRlbnRp
ZmllciwKLSAgICB9OwotCi0gICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7Ci0gICAgQk9PTCBpbnN0
YWxsZWQgPSBbc2VsZi5kZXZpY2UgaW5zdGFsbEFwcGxpY2F0aW9uOltOU1VSTCBmaWxlVVJMV2l0
aFBhdGg6c2VsZi5hcHBQYXRoXSB3aXRoT3B0aW9uczppbnN0YWxsT3B0aW9ucyBlcnJvcjomZXJy
b3JdOwotICAgIGlmICghaW5zdGFsbGVkKSB7Ci0gICAgICAgIE5TTG9nKEAiQ291bGRuJ3QgaW5z
dGFsbCAlQDogJUAiLCBzZWxmLmFwcFBhdGgsIGVycm9yLmRlc2NyaXB0aW9uKTsKLSAgICAgICAg
ZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0KLX0KLQotLSAodm9pZClraWxsQXBwCi17Ci0gICAg
ZGlzcGF0Y2hfc291cmNlX3QgZGlzcGF0Y2ggPSBbc2VsZiBhcHBEaXNwYXRjaFNvdXJjZV07Ci0K
LSAgICBpZiAoZGlzcGF0Y2gpCi0gICAgICAgIGRpc3BhdGNoX3NvdXJjZV9jYW5jZWwoZGlzcGF0
Y2gpOwotCi0gICAgaWYgKFtzZWxmIHBpZF0gPiAxKSB7Ci0gICAgICAgIGtpbGwoc2VsZi5waWQs
IFNJR0tJTEwpOwotICAgICAgICBbc2VsZiBzZXRQaWQ6LTFdOwotICAgIH0KLSAgICBbc2VsZiBz
ZXRBcHBEaXNwYXRjaFNvdXJjZTpuaWxdOwotfQotCi0tIChOU0RpY3Rpb25hcnkgKilfZW52aXJv
bm1lbnRWYXJpYWJsZXMKLXsKLSAgICBzdGF0aWMgTlNEaWN0aW9uYXJ5ICplbnZpcm9ubWVudFZh
cmlhYmxlczsKLSAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2U7Ci0KLSAgICBkaXNwYXRj
aF9vbmNlKCZvbmNlLCBeewotICAgICAgICBOU1N0cmluZyAqcHJvZHVjdERpcmVjdG9yeSA9IFtz
ZWxmIHByb2R1Y3REaXJdOwotCi0gICAgICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmRpY3Rpb25h
cnkgPSBbQHsKLSAgICAgICAgICAgIEAiSVBDX0lERU5USUZJRVIiOiBzZWxmLmlwY0lkZW50aWZp
ZXIsCi0gICAgICAgICAgICBAIkRZTERfRlJBTUVXT1JLX1BBVEgiOiBwcm9kdWN0RGlyZWN0b3J5
LAotICAgICAgICAgICAgQCJfX1hQQ19EWUxEX0ZSQU1FV09SS19QQVRIIjogcHJvZHVjdERpcmVj
dG9yeSwKLSAgICAgICAgICAgIEAiRFlMRF9MSUJSQVJZX1BBVEgiOiBwcm9kdWN0RGlyZWN0b3J5
LAotICAgICAgICAgICAgQCJfX1hQQ19EWUxEX0xJQlJBUllfUEFUSCI6IHByb2R1Y3REaXJlY3Rv
cnksCi0gICAgICAgIH0gbXV0YWJsZUNvcHldOwotCi0gICAgICAgIGZvciAoTlNTdHJpbmcgKmtl
eU5hbWUgaW4gQFtAIkRZTERfSU5TRVJUX0xJQlJBUklFUyIsIEAiTWFsbG9jU3RhY2tMb2dnaW5n
IiwgQCJMT0NBTF9SRVNPVVJDRV9ST09UIiwgQCJEVU1QUkVOREVSVFJFRV9URU1QIl0pIHsKLSAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIHZhbHVlID0gZ2V0ZW52KFtrZXlOYW1lIFVURjhTdHJpbmdd
KTsKLSAgICAgICAgICAgIGlmICh2YWx1ZSAmJiBzdHJsZW4odmFsdWUpKSB7Ci0gICAgICAgICAg
ICAgICAgTlNTdHJpbmcgKm5zVmFsdWUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6
dmFsdWVdOwotICAgICAgICAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpuc1ZhbHVlIGZv
cktleTprZXlOYW1lXTsKLSAgICAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6bnNW
YWx1ZSBmb3JLZXk6W0AiX19YUENfIiBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzprZXlOYW1lXV07
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKGNoYXIqKiBlbnZwID0g
Kl9OU0dldEVudmlyb24oKTsgKmVudnA7IGVudnArKykgewotICAgICAgICAgICAgY29uc3QgY2hh
ciogZW52ID0gKmVudnA7Ci0gICAgICAgICAgICBpZiAoIXN0cm5jbXAoIkpTQ18iLCBlbnYsIDQp
IHx8ICFzdHJuY21wKCJfX1hQQ19KU0NfIiwgZW52LCAxMCkpIHsKLSAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiBlcXVhbCA9IHN0cmNocihlbnYsICc9Jyk7Ci0gICAgICAgICAgICAgICAgaWYg
KCFlcXVhbCkgewotICAgICAgICAgICAgICAgICAgICBOU0xvZyhAIk1pc3NpbmcgJz0nIGluIGVu
diB2YXIgJyVzJyIsIGVudik7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4S2V5
TGVuZ3RoID0gMjU2OwotICAgICAgICAgICAgICAgIHNpemVfdCBrZXlMZW5ndGggPSBlcXVhbCAt
IGVudjsKLSAgICAgICAgICAgICAgICBpZiAoa2V5TGVuZ3RoID49IG1heEtleUxlbmd0aCkgewot
ICAgICAgICAgICAgICAgICAgICBOU0xvZyhAIkVudiB2YXIgJyVzJyBpcyB0b28gbG9uZyIsIGVu
dik7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGNoYXIga2V5W21heEtleUxlbmd0aF07Ci0gICAgICAgICAgICAgICAg
c3RybmNweShrZXksIGVudiwga2V5TGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBrZXlba2V5TGVu
Z3RoXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciogdmFsdWUgPSBlcXVhbCAr
IDE7Ci0KLSAgICAgICAgICAgICAgICBOU1N0cmluZyAqbnNLZXkgPSBbTlNTdHJpbmcgc3RyaW5n
V2l0aFVURjhTdHJpbmc6a2V5XTsKLSAgICAgICAgICAgICAgICBOU1N0cmluZyAqbnNWYWx1ZSA9
IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzp2YWx1ZV07Ci0gICAgICAgICAgICAgICAg
W2RpY3Rpb25hcnkgc2V0T2JqZWN0Om5zVmFsdWUgZm9yS2V5Om5zS2V5XTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIGVudmlyb25tZW50VmFyaWFibGVzID0gW2RpY3Rpb25h
cnkgY29weV07Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gZW52aXJvbm1lbnRWYXJpYWJsZXM7Ci19
Ci0KLS0gKHZvaWQpbGF1bmNoQXBwCi17Ci0gICAgTlNEaWN0aW9uYXJ5ICpsYXVuY2hPcHRpb25z
ID0gQHsKLSAgICAgICAga1NpbURldmljZUxhdW5jaEFwcGxpY2F0aW9uRW52aXJvbm1lbnQ6IFtz
ZWxmIF9lbnZpcm9ubWVudFZhcmlhYmxlc10sCi0gICAgICAgIGtTaW1EZXZpY2VMYXVuY2hBcHBs
aWNhdGlvbkFyZ3VtZW50czogW3NlbGYgZHVtcFRvb2xBcmd1bWVudHNdLAotICAgIH07Ci0KLSAg
ICBOU0Vycm9yICplcnJvcjsKLSAgICBwaWRfdCBwaWQgPSBbc2VsZi5kZXZpY2UgbGF1bmNoQXBw
bGljYXRpb25XaXRoSUQ6c2VsZi5hcHBCdW5kbGVJZGVudGlmaWVyIG9wdGlvbnM6bGF1bmNoT3B0
aW9ucyBlcnJvcjomZXJyb3JdOwotCi0gICAgaWYgKHBpZCA8IDApIHsKLSAgICAgICAgTlNMb2co
QCJDb3VsZG4ndCBsYXVuY2ggJUA6ICVAIiwgc2VsZi5hcHBCdW5kbGVJZGVudGlmaWVyLCBlcnJv
ci5kZXNjcmlwdGlvbik7Ci0gICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci0KLSAg
ICBbc2VsZiBzZXRQaWQ6cGlkXTsKLQotICAgIGRpc3BhdGNoX3F1ZXVlX3QgcXVldWUgPSBkaXNw
YXRjaF9nZXRfbWFpbl9xdWV1ZSgpOwotICAgIGRpc3BhdGNoX3NvdXJjZV90IHNpbXVsYXRvckFw
cEV4aXREaXNwYXRjaFNvdXJjZSA9IGRpc3BhdGNoX3NvdXJjZV9jcmVhdGUoRElTUEFUQ0hfU09V
UkNFX1RZUEVfUFJPQywgW3NlbGYgcGlkXSwgRElTUEFUQ0hfUFJPQ19FWElULCBxdWV1ZSk7Ci0g
ICAgW3NlbGYgc2V0QXBwRGlzcGF0Y2hTb3VyY2U6c2ltdWxhdG9yQXBwRXhpdERpc3BhdGNoU291
cmNlXTsKLSAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2V2ZW50X2hhbmRsZXIoc2ltdWxhdG9yQXBw
RXhpdERpc3BhdGNoU291cmNlLCBeewotICAgICAgICBkaXNwYXRjaF9zb3VyY2VfY2FuY2VsKHNp
bXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSk7Ci0gICAgICAgIFtzZWxmIGRpZENyYXNoV2l0
aE1lc3NhZ2U6bmlsXTsKLSAgICB9KTsKLSAgICBkaXNwYXRjaF9yZXN1bWUoc2ltdWxhdG9yQXBw
RXhpdERpc3BhdGNoU291cmNlKTsKLX0KLQotLSAodm9pZClzdGFydAotewotICAgIFtzZWxmIGlu
c3RhbGxBcHBdOwotICAgIFtbc2VsZiByZWxheV0gc2V0dXBdOwotICAgIFtzZWxmIGxhdW5jaEFw
cF07Ci0gICAgW1tzZWxmIHJlbGF5XSBjb25uZWN0XTsKLX0KLQotLSAodm9pZClmaW5pc2gKLXsK
LSAgICBbW3NlbGYgcmVsYXldIGRpc2Nvbm5lY3RdOwotICAgIFtzZWxmIGtpbGxBcHBdOwotICAg
IGV4aXQoRVhJVF9TVUNDRVNTKTsKLX0KLQotQGVuZApJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJl
bGF5L0xheW91dFRlc3RSZWxheS9tYWluLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVz
dFJlbGF5L0xheW91dFRlc3RSZWxheS9tYWluLm0JKHJldmlzaW9uIDIxMDI3NCkKKysrIFRvb2xz
L0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvbWFpbi5tCShub25leGlzdGVudCkKQEAg
LTEsMTMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJDb3JlU2ltdWxhdG9y
U1BJLmgiCi0jaW1wb3J0ICJMVFJlbGF5Q29udHJvbGxlci5oIgotI2ltcG9ydCA8Rm91bmRhdGlv
bi9Gb3VuZGF0aW9uLmg+Ci0KLXN0YXRpYyBMVFJlbGF5Q29udHJvbGxlciAqcmVsYXlDb250cm9s
bGVyOwotCi12b2lkIHVzYWdlKCkKLXsKLSAgICBOU1N0cmluZyAqaGVscFRleHQgPSBAIkxheW91
dFRlc3RSZWxheTogcnVuIGEgZHVtcCB0b29sIGluIHRoZSBzaW11bGF0b3IuIE5vdCBmb3IgZGly
ZWN0IGNvbnN1bXB0aW9uLlxuIgotICAgICAgICAiVXNhZ2U6IExheW91dFRlc3RSZWxheSBbLWhd
IFtvcHRpb25zXSAtLSBbZHVtcCB0b29sIGFyZ3VtZW50c11cbiIKLSAgICAgICAgIlJlcXVpcmVk
IG9wdGlvbnM6XG4iCi0gICAgICAgICIgICAgLXVkaWQgPGlkZW50aWZpZXI+ICAgICAgIFNpbXVs
YXRvciBkZXZpY2UgaWRlbnRpZmllclxuIgotICAgICAgICAiICAgIC1hcHAgPGFwcF9wYXRoPiAg
ICAgICAgICBQYXRoIHRvIHRoZSBidWlsdCBpT1MgLmFwcCBidW5kbGUgZGlyZWN0b3J5LlxuIgot
ICAgICAgICAiICAgIC1wcm9kdWN0RGlyIDxkaXI+ICAgICAgICAvcGF0aC90by9XZWJLaXRCdWls
ZC97Y29uZmlndXJhdGlvbn0te3Nob3J0IHBsYXRmb3JtfS5cbiI7Ci0KLSAgICBmcHJpbnRmKHN0
ZGVyciwgIiVzXG4iLCBbaGVscFRleHQgVVRGOFN0cmluZ10pOwotfQotCi1OU1N0cmluZyAqZ2V0
UmVxdWlyZWRTdHJpbmdBcmd1bWVudChOU1N0cmluZyAqcGFyYW1ldGVyKQotewotICAgIE5TVXNl
ckRlZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0
c107Ci0gICAgTlNTdHJpbmcgKmFyZ3VtZW50ID0gW2RlZmF1bHRzIHN0cmluZ0ZvcktleTpwYXJh
bWV0ZXJdOwotCi0gICAgaWYgKCFhcmd1bWVudCkgewotICAgICAgICBOU0xvZyhAIi0lQCBpcyBy
ZXF1aXJlZC4iLCBwYXJhbWV0ZXIpOwotICAgICAgICB1c2FnZSgpOwotICAgICAgICBleGl0KEVY
SVRfRkFJTFVSRSk7Ci0gICAgfQotICAgIHJldHVybiBhcmd1bWVudDsKLX0KLQotTlNBcnJheSAq
Z2V0RHVtcFRvb2xBcmd1bWVudHMoKQotewotICAgIE5TTXV0YWJsZUFycmF5ICpkdW1wVG9vbEFy
Z3VtZW50cyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOwotICAgIE5TQXJyYXkgKnBy
b2Nlc3NBcmdzID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBhcmd1bWVudHNdOwotICAg
IEJPT0wgYXBwZW5kaW5nID0gTk87Ci0gICAgZm9yIChOU1N0cmluZyAqYXJnIGluIHByb2Nlc3NB
cmdzKSB7Ci0gICAgICAgIGlmIChbYXJnIGlzRXF1YWxUb1N0cmluZzpAIi0tIl0pIHsKLSAgICAg
ICAgICAgIGFwcGVuZGluZyA9IFlFUzsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChhcHBlbmRpbmcpCi0gICAgICAgICAgICBbZHVtcFRvb2xBcmd1bWVudHMg
YWRkT2JqZWN0OmFyZ107Ci0gICAgfQotICAgIHJldHVybiBkdW1wVG9vbEFyZ3VtZW50czsKLX0K
LQotdm9pZCBmaW5pc2goKQotewotICAgIFtyZWxheUNvbnRyb2xsZXIgZmluaXNoXTsKLX0KLQot
dm9pZCByZWNlaXZlZFNpZ25hbChpbnQgc2lnbmFsKQotewotICAgIGV4aXQoRVhJVF9TVUNDRVNT
KTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiBhcmd2W10pCi17Ci0gICAg
QGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAgICAgIE5TQXJyYXkgKmhlbHBBcmd1bWVudHMgPSBAW0Ai
LWgiLCBAIi0taGVscCJdOwotICAgICAgICBmb3IgKE5TU3RyaW5nICpoZWxwQXJndW1lbnQgaW4g
aGVscEFyZ3VtZW50cykgewotICAgICAgICAgICAgaWYgKFtbW05TUHJvY2Vzc0luZm8gcHJvY2Vz
c0luZm9dIGFyZ3VtZW50c10gaW5kZXhPZk9iamVjdDpoZWxwQXJndW1lbnRdICE9IE5TTm90Rm91
bmQpIHsKLSAgICAgICAgICAgICAgICB1c2FnZSgpOwotICAgICAgICAgICAgICAgIGV4aXQoRVhJ
VF9GQUlMVVJFKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0jaWYgVVNFX1NJTV9TRVJW
SUNFX0NPTlRFWFQKLSAgICAgICAgTlNTdHJpbmcgKmRldmVsb3BlckRpcmVjdG9yeSA9IGdldFJl
cXVpcmVkU3RyaW5nQXJndW1lbnQoQCJkZXZlbG9wZXJEaXIiKTsKLSNlbmRpZgotICAgICAgICBO
U1VVSUQgKnVkaWQgPSBbW05TVVVJRCBhbGxvY10gaW5pdFdpdGhVVUlEU3RyaW5nOmdldFJlcXVp
cmVkU3RyaW5nQXJndW1lbnQoQCJ1ZGlkIildOwotICAgICAgICBOU1N0cmluZyAqYXBwUGF0aCA9
IGdldFJlcXVpcmVkU3RyaW5nQXJndW1lbnQoQCJhcHAiKTsKLSAgICAgICAgTlNTdHJpbmcgKnBy
b2R1Y3REaXJlY3RvcnkgPSBnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAicHJvZHVjdERpciIp
OwotICAgICAgICBOU0FycmF5ICpkdW1wVG9vbEFyZ3VtZW50cyA9IGdldER1bXBUb29sQXJndW1l
bnRzKCk7Ci0KLSNpZiBVU0VfU0lNX1NFUlZJQ0VfQ09OVEVYVAotICAgICAgICBOU0Vycm9yICpl
cnJvcjsKLSAgICAgICAgU2ltU2VydmljZUNvbnRleHQgKnNlcnZpY2VDb250ZXh0ID0gW1NpbVNl
cnZpY2VDb250ZXh0IHNoYXJlZFNlcnZpY2VDb250ZXh0Rm9yRGV2ZWxvcGVyRGlyOmRldmVsb3Bl
ckRpcmVjdG9yeSBlcnJvcjomZXJyb3JdOwotICAgICAgICBpZiAoIXNlcnZpY2VDb250ZXh0KSB7
Ci0gICAgICAgICAgICBOU0xvZyhAIkRldmljZSBjb250ZXh0IGNvdWxkbid0IGJlIGZvdW5kOiAl
QCIsIGVycm9yKTsKLSAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAgICAgfQot
ICAgICAgICBTaW1EZXZpY2VTZXQgKmRldmljZVNldCA9IFtzZXJ2aWNlQ29udGV4dCBkZWZhdWx0
RGV2aWNlU2V0V2l0aEVycm9yOm5pbF07Ci0gICAgICAgIGlmICghZGV2aWNlU2V0KSB7Ci0gICAg
ICAgICAgICBOU0xvZyhAIkRlZmF1bHQgZGV2aWNlIHNldCBjb3VsZG4ndCBiZSBmb3VuZDogJUAi
LCBlcnJvcik7Ci0gICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgU2ltRGV2aWNlICpkZXZpY2UgPSBbZGV2aWNlU2V0LmRldmljZXNCeVVESUQgb2JqZWN0
Rm9yS2V5OnVkaWRdOwotI2Vsc2UKLSAgICAgICAgU2ltRGV2aWNlICpkZXZpY2UgPSBbU2ltRGV2
aWNlU2V0LmRlZmF1bHRTZXQuZGV2aWNlc0J5VURJRCBvYmplY3RGb3JLZXk6dWRpZF07Ci0jZW5k
aWYKLSAgICAgICAgaWYgKCFkZXZpY2UpIHsKLSAgICAgICAgICAgIE5TTG9nKEAiRGV2aWNlICVA
IGNvdWxkbid0IGJlIGZvdW5kIiwgdWRpZCk7Ci0gICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVS
RSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZWxheUNvbnRyb2xsZXIgPSBbW0xUUmVsYXlDb250
cm9sbGVyIGFsbG9jXSBpbml0V2l0aERldmljZTpkZXZpY2UgcHJvZHVjdERpcjpwcm9kdWN0RGly
ZWN0b3J5IGFwcFBhdGg6YXBwUGF0aCBkZXZpY2VVRElEOnVkaWQgZHVtcFRvb2xBcmd1bWVudHM6
ZHVtcFRvb2xBcmd1bWVudHNdOwotICAgICAgICBbcmVsYXlDb250cm9sbGVyIHN0YXJ0XTsKLQot
ICAgICAgICBhdGV4aXQoZmluaXNoKTsKLSAgICAgICAgc2lnbmFsKFNJR0lOVCwgcmVjZWl2ZWRT
aWduYWwpOwotICAgICAgICBzaWduYWwoU0lHVEVSTSwgcmVjZWl2ZWRTaWduYWwpOwotCi0gICAg
ICAgIFtbTlNSdW5Mb29wIG1haW5SdW5Mb29wXSBydW5dOwotICAgIH0KLSAgICByZXR1cm4gMDsK
LX0KSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5
b3V0VGVzdFJlbGF5Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxMDI3NCkK
KysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkobm9uZXhpc3RlbnQpCkBAIC0xLDIwMiArMCwwIEBACi0vLyAhJCpVVEY4KiQh
Ci17Ci0JYXJjaGl2ZVZlcnNpb24gPSAxOwotCWNsYXNzZXMgPSB7Ci0JfTsKLQlvYmplY3RWZXJz
aW9uID0gNDY7Ci0Jb2JqZWN0cyA9IHsKLQotLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24g
Ki8KLQkJMkU4RDNFRjgxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOEQzRUY3MTk4ODFENDMwMDRGNkNDMiAv
KiBtYWluLm0gKi87IH07Ci0JCTJFOEQzRjAyMTk4ODFGRDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxh
eS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU4RDNG
MDExOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lm0gKi87IH07Ci0JCTJFOEQzRjA2MTk4
ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU4RDNGMDUxOTg4MjQwNjAwNEY2Q0MyIC8qIExU
UmVsYXlDb250cm9sbGVyLm0gKi87IH07Ci0vKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8K
LQotLyogQmVnaW4gUEJYQ29weUZpbGVzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0JCTJFOEQzRUYy
MTk4ODFENDMwMDRGNkNDMiAvKiBDb3B5RmlsZXMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhDb3B5Rmls
ZXNCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWRzdFBh
dGggPSAvdXNyL3NoYXJlL21hbi9tYW4xLzsKLQkJCWRzdFN1YmZvbGRlclNwZWMgPSAwOwotCQkJ
ZmlsZXMgPSAoCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDE7Ci0JCX07Ci0vKiBFbmQgUEJYQ29weUZpbGVzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0KLS8q
IEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwotCQkyRThEM0VGNDE5ODgxRDQzMDA0
RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4
cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5J
bmRleCA9IDA7IHBhdGggPSBMYXlvdXRUZXN0UmVsYXk7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9E
VUNUU19ESVI7IH07Ci0JCTJFOEQzRUY3MTk4ODFENDMwMDRGNkNDMiAvKiBtYWluLm0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
b2JqYzsgcGF0aCA9IG1haW4ubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNF
RkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IG5hbWUg
PSBEZWJ1Z1JlbGVhc2UueGNjb25maWc7IHBhdGggPSBDb25maWd1cmF0aW9ucy9EZWJ1Z1JlbGVh
c2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOEQzRUZGMTk4ODFF
MjUwMDRGNkNDMiAvKiBCYXNlLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgbmFtZSA9IEJhc2UueGNjb25maWc7
IHBhdGggPSBDb25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkyRThEM0YwMDE5ODgxRjI5MDA0RjZDQzIgLyogTFRSZWxheS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBMVFJlbGF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOEQzRjAx
MTk4ODFGRDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lm9iamM7IHBhdGggPSBMVFBpcGVSZWxheS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkyRThEM0YwMzE5ODgxRkUyMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTFRQaXBlUmVsYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDQx
OTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExUUmVsYXlDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTJFOEQzRjA1MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBMVFJlbGF5Q29udHJvbGxlci5t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDRTFGQkMxNTFCMjkwRTc5MDAwMTM2RjUg
LyogQ29yZVNpbXVsYXRvclNQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b3JlU2ltdWxhdG9yU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0vKiBFbmQgUEJY
RmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBo
YXNlIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjExOTg4MUQ0MzAwNEY2Q0MyIC8qIEZyYW1ld29ya3Mg
Ki8gPSB7Ci0JCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9u
TWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKLS8qIEVuZCBQQlhGcmFtZXdvcmtzQnVp
bGRQaGFzZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWEdyb3VwIHNlY3Rpb24gKi8KLQkJMkU4
RDNFRUIxOTg4MUQ0MzAwNEY2Q0MyID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJl
biA9ICgKLQkJCQkyRThEM0VGRjE5ODgxRTI1MDA0RjZDQzIgLyogQmFzZS54Y2NvbmZpZyAqLywK
LQkJCQkyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICov
LAotCQkJCTJFOEQzRUY2MTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8sCi0J
CQkJMkU4RDNFRjUxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2R1Y3RzICovLAotCQkJKTsKLQkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCTJFOEQzRUY1MTk4ODFENDMwMDRGNkNDMiAv
KiBQcm9kdWN0cyAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0J
CQkJMkU4RDNFRjQxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLywKLQkJCSk7
Ci0JCQluYW1lID0gUHJvZHVjdHM7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9Owot
CQkyRThEM0VGNjE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovID0gewotCQkJ
aXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQkyRThEM0VGNzE5ODgxRDQzMDA0
RjZDQzIgLyogbWFpbi5tICovLAotCQkJCUNFMUZCQzE1MUIyOTBFNzkwMDAxMzZGNSAvKiBDb3Jl
U2ltdWxhdG9yU1BJLmggKi8sCi0JCQkJMkU4RDNGMDAxOTg4MUYyOTAwNEY2Q0MyIC8qIExUUmVs
YXkuaCAqLywKLQkJCQkyRThEM0YwMTE5ODgxRkQwMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkubSAq
LywKLQkJCQkyRThEM0YwMzE5ODgxRkUyMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkuaCAqLywKLQkJ
CQkyRThEM0YwNDE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIuaCAqLywKLQkJ
CQkyRThEM0YwNTE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIubSAqLywKLQkJ
CSk7Ci0JCQlwYXRoID0gTGF5b3V0VGVzdFJlbGF5OwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKLQkJfTsKLS8qIEVuZCBQQlhHcm91cCBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWE5hdGl2
ZVRhcmdldCBzZWN0aW9uICovCi0JCTJFOEQzRUYzMTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRU
ZXN0UmVsYXkgKi8gPSB7Ci0JCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7Ci0JCQlidWlsZENvbmZp
Z3VyYXRpb25MaXN0ID0gMkU4RDNFRkIxOTg4MUQ0MzAwNEY2Q0MyIC8qIEJ1aWxkIGNvbmZpZ3Vy
YXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJMYXlvdXRUZXN0UmVsYXkiICovOwotCQkJ
YnVpbGRQaGFzZXMgPSAoCi0JCQkJMkU4RDNFRjAxOTg4MUQ0MzAwNEY2Q0MyIC8qIFNvdXJjZXMg
Ki8sCi0JCQkJMkU4RDNFRjExOTg4MUQ0MzAwNEY2Q0MyIC8qIEZyYW1ld29ya3MgKi8sCi0JCQkJ
MkU4RDNFRjIxOTg4MUQ0MzAwNEY2Q0MyIC8qIENvcHlGaWxlcyAqLywKLQkJCSk7Ci0JCQlidWls
ZFJ1bGVzID0gKAotCQkJKTsKLQkJCWRlcGVuZGVuY2llcyA9ICgKLQkJCSk7Ci0JCQluYW1lID0g
TGF5b3V0VGVzdFJlbGF5OwotCQkJcHJvZHVjdE5hbWUgPSBMYXlvdXRUZXN0UmVsYXk7Ci0JCQlw
cm9kdWN0UmVmZXJlbmNlID0gMkU4RDNFRjQxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RS
ZWxheSAqLzsKLQkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUudG9vbCI7
Ci0JCX07Ci0vKiBFbmQgUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJY
UHJvamVjdCBzZWN0aW9uICovCi0JCTJFOEQzRUVDMTk4ODFENDMwMDRGNkNDMiAvKiBQcm9qZWN0
IG9iamVjdCAqLyA9IHsKLQkJCWlzYSA9IFBCWFByb2plY3Q7Ci0JCQlhdHRyaWJ1dGVzID0gewot
CQkJCUxhc3RVcGdyYWRlQ2hlY2sgPSAwNjAwOwotCQkJCU9SR0FOSVpBVElPTk5BTUUgPSAiQXBw
bGUsIEluYy4iOwotCQkJCVRhcmdldEF0dHJpYnV0ZXMgPSB7Ci0JCQkJCTJFOEQzRUYzMTk4ODFE
NDMwMDRGNkNDMiA9IHsKLQkJCQkJCUNyZWF0ZWRPblRvb2xzVmVyc2lvbiA9IDYuMDsKLQkJCQkJ
fTsKLQkJCQl9OwotCQkJfTsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAyRThEM0VFRjE5
ODgxRDQzMDA0RjZDQzIgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0
ICJMYXlvdXRUZXN0UmVsYXkiICovOwotCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUg
My4yIjsKLQkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsKLQkJCWhhc1NjYW5uZWRGb3JF
bmNvZGluZ3MgPSAwOwotCQkJa25vd25SZWdpb25zID0gKAotCQkJCWVuLAotCQkJKTsKLQkJCW1h
aW5Hcm91cCA9IDJFOEQzRUVCMTk4ODFENDMwMDRGNkNDMjsKLQkJCXByb2R1Y3RSZWZHcm91cCA9
IDJFOEQzRUY1MTk4ODFENDMwMDRGNkNDMiAvKiBQcm9kdWN0cyAqLzsKLQkJCXByb2plY3REaXJQ
YXRoID0gIiI7Ci0JCQlwcm9qZWN0Um9vdCA9ICIiOwotCQkJdGFyZ2V0cyA9ICgKLQkJCQkyRThE
M0VGMzE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovLAotCQkJKTsKLQkJfTsK
LS8qIEVuZCBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYU291cmNlc0J1aWxk
UGhhc2Ugc2VjdGlvbiAqLwotCQkyRThEM0VGMDE5ODgxRDQzMDA0RjZDQzIgLyogU291cmNlcyAq
LyA9IHsKLQkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJCTJFOEQzRjA2MTk4ODI0MDYwMDRGNkND
MiAvKiBMVFJlbGF5Q29udHJvbGxlci5tIGluIFNvdXJjZXMgKi8sCi0JCQkJMkU4RDNFRjgxOTg4
MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSBpbiBTb3VyY2VzICovLAotCQkJCTJFOEQzRjAyMTk4ODFG
RDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5tIGluIFNvdXJjZXMgKi8sCi0JCQkpOwotCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07Ci0vKiBFbmQgUEJYU291
cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBYQ0J1aWxkQ29uZmlndXJhdGlv
biBzZWN0aW9uICovCi0JCTJFOEQzRUY5MTk4ODFENDMwMDRGNkNDMiAvKiBEZWJ1ZyAqLyA9IHsK
LQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZl
cmVuY2UgPSAyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmln
ICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCX07Ci0JCQluYW1lID0gRGVidWc7Ci0JCX07
Ci0JCTJFOEQzRUZBMTk4ODFENDMwMDRGNkNDMiAvKiBSZWxlYXNlICovID0gewotCQkJaXNhID0g
WENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDJF
OEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi87Ci0JCQli
dWlsZFNldHRpbmdzID0gewotCQkJfTsKLQkJCW5hbWUgPSBSZWxlYXNlOwotCQl9OwotCQkyRThE
M0VGQzE5ODgxRDQzMDA0RjZDQzIgLyogRGVidWcgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29u
ZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gMkU4RDNFRkUxOTg4
MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLzsKLQkJCWJ1aWxkU2V0dGlu
Z3MgPSB7Ci0JCQkJUFJPRFVDVF9OQU1FID0gIiQoVEFSR0VUX05BTUUpIjsKLQkJCX07Ci0JCQlu
YW1lID0gRGVidWc7Ci0JCX07Ci0JCTJFOEQzRUZEMTk4ODFENDMwMDRGNkNDMiAvKiBSZWxlYXNl
ICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJh
dGlvblJlZmVyZW5jZSA9IDJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2Uu
eGNjb25maWcgKi87Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJCVBST0RVQ1RfTkFNRSA9ICIk
KFRBUkdFVF9OQU1FKSI7Ci0JCQl9OwotCQkJbmFtZSA9IFJlbGVhc2U7Ci0JCX07Ci0vKiBFbmQg
WENCdWlsZENvbmZpZ3VyYXRpb24gc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBYQ0NvbmZpZ3VyYXRp
b25MaXN0IHNlY3Rpb24gKi8KLQkJMkU4RDNFRUYxOTg4MUQ0MzAwNEY2Q0MyIC8qIEJ1aWxkIGNv
bmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiTGF5b3V0VGVzdFJlbGF5IiAqLyA9IHsK
LQkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25zID0g
KAotCQkJCTJFOEQzRUY5MTk4ODFENDMwMDRGNkNDMiAvKiBEZWJ1ZyAqLywKLQkJCQkyRThEM0VG
QTE5ODgxRDQzMDA0RjZDQzIgLyogUmVsZWFzZSAqLywKLQkJCSk7Ci0JCQlkZWZhdWx0Q29uZmln
dXJhdGlvbklzVmlzaWJsZSA9IDA7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxl
YXNlOwotCQl9OwotCQkyRThEM0VGQjE5ODgxRDQzMDA0RjZDQzIgLyogQnVpbGQgY29uZmlndXJh
dGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIkxheW91dFRlc3RSZWxheSIgKi8gPSB7Ci0J
CQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgK
LQkJCQkyRThEM0VGQzE5ODgxRDQzMDA0RjZDQzIgLyogRGVidWcgKi8sCi0JCQkJMkU4RDNFRkQx
OTg4MUQ0MzAwNEY2Q0MyIC8qIFJlbGVhc2UgKi8sCi0JCQkpOwotCQkJZGVmYXVsdENvbmZpZ3Vy
YXRpb25Jc1Zpc2libGUgPSAwOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUmVsZWFz
ZTsKLQkJfTsKLS8qIEVuZCBYQ0NvbmZpZ3VyYXRpb25MaXN0IHNlY3Rpb24gKi8KLQl9OwotCXJv
b3RPYmplY3QgPSAyRThEM0VFQzE5ODgxRDQzMDA0RjZDQzIgLyogUHJvamVjdCBvYmplY3QgKi87
Ci19CkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5Lnhjb2RlcHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5Lnhj
b2RlcHJvagkocmV2aXNpb24gMjEwMjc0KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91
dFRlc3RSZWxheS54Y29kZXByb2oJKG5vbmV4aXN0ZW50KQoKUHJvcGVydHkgY2hhbmdlcyBvbjog
VG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2oKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpEZWxldGVkOiBzdm46aWdub3JlCiMjIC0xLDIgKzAsMCAjIwotcHJvamVjdC54Y3dvcmtzcGFj
ZQoteGN1c2VyZGF0YQpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L01ha2VmaWxlCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9NYWtlZmlsZQkocmV2aXNpb24gMjEwMjc0
KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L01ha2VmaWxlCShub25leGlzdGVudCkKQEAgLTEs
NiArMCwwIEBACi1TQ1JJUFRTX1BBVEggPSAuLi9TY3JpcHRzCi0KLU9WRVJSSURFX0FSQ0hTID0g
ZGVmYXVsdAotT1ZFUlJJREVfU0RLUk9PVCA9IGRlZmF1bHQKLQotaW5jbHVkZSAuLi8uLi9NYWtl
ZmlsZS5zaGFyZWQKSW5kZXg6IFRvb2xzL01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL01h
a2VmaWxlCShyZXZpc2lvbiAyMTAyNzQpCisrKyBUb29scy9NYWtlZmlsZQkod29ya2luZyBjb3B5
KQpAQCAtNyw5ICs3LDYgQEAgaWZuZXEgKCwkKFNES1JPT1QpKQogCWlmbmVxICgsJChmaW5kc3Ry
aW5nIGlwaG9uZSwkKFNES1JPT1QpKSkKIAkJTU9EVUxFUyArPSBNb2JpbGVNaW5pQnJvd3Nlcgog
CWVuZGlmCi0JaWZlcSAoLCQoRE9fTk9UX0JVSUxEX0xBWU9VVF9URVNUX1JFTEFZKSkKLQkJTU9E
VUxFUyArPSBMYXlvdXRUZXN0UmVsYXkKLQllbmRpZgogZW5kaWYKIAogYWxsOgpJbmRleDogVG9v
bHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcJ
KHJldmlzaW9uIDIxMDI3NCkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9u
cy9CYXNlLnhjY29uZmlnCShub25leGlzdGVudCkKQEAgLTEsNjggKzAsMCBAQAotLy8gQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vCi0vLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotLy8gYXJlIG1ldDoKLS8vIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotLy8gICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS8v
Ci0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLS8vIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0vLyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLS8vIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0vLyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLS8v
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLS8vIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotLy8gUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotLy8gT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlICIuLi8uLi8uLi8uLi9JbnRlcm5h
bC9Db25maWd1cmF0aW9ucy9IYXZlSW50ZXJuYWxTREsueGNjb25maWciCi0KLVVTRV9JTlRFUk5B
TF9TREsgPSAkKFVTRV9JTlRFUk5BTF9TREtfJChDT05GSUdVUkFUSU9OKSk7Ci1VU0VfSU5URVJO
QUxfU0RLX1Byb2R1Y3Rpb24gPSBZRVM7Ci1VU0VfSU5URVJOQUxfU0RLX0RlYnVnID0gJChIQVZF
X0lOVEVSTkFMX1NESyk7Ci1VU0VfSU5URVJOQUxfU0RLX1JlbGVhc2UgPSAkKEhBVkVfSU5URVJO
QUxfU0RLKTsKLQotQ0xBTkdfQ1hYX0xBTkdVQUdFX1NUQU5EQVJEID0gZ251KysweDsKLUNMQU5H
X0VOQUJMRV9PQkpDX0FSQyA9IFlFUzsKLUNMQU5HX1dBUk5fQ1hYMFhfRVhURU5TSU9OUyA9IE5P
OwotSEVBREVSX1NFQVJDSF9QQVRIUyA9ICQoQlVJTFRfUFJPRFVDVFNfRElSKS91c3IvbG9jYWwv
aW5jbHVkZSAkKFdFQkNPUkVfUFJJVkFURV9IRUFERVJTX0RJUikvRm9yd2FyZGluZ0hlYWRlcnMg
JChTUkNST09UKS8uLi8uLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1ICQoTkVYVF9ST09UKS91
c3IvbG9jYWwvaW5jbHVkZS9XZWJDb3JlVGVzdFN1cHBvcnQ7Ci1HQ0NfUFJFUFJPQ0VTU09SX0RF
RklOSVRJT05TID0gJChERUJVR19ERUZJTkVTKSBFTkFCTEVfREFTSEJPQVJEX1NVUFBPUlQ7Ci1E
RUJVR19JTkZPUk1BVElPTl9GT1JNQVQgPSBkd2FyZi13aXRoLWRzeW07Ci1QUkVCSU5ESU5HID0g
Tk8KLUdDQ19DX0xBTkdVQUdFX1NUQU5EQVJEID0gZ251OTkKLUdDQ19FTkFCTEVfQ1BQX0VYQ0VQ
VElPTlMgPSBOTzsKLUdDQ19FTkFCTEVfQ1BQX1JUVEkgPSBOTzsKLUdDQ19QUkVDT01QSUxFX1BS
RUZJWF9IRUFERVIgPSBZRVMKLUdDQ19UUkVBVF9XQVJOSU5HU19BU19FUlJPUlMgPSBZRVMKLUdD
Q19WRVJTSU9OID0gY29tLmFwcGxlLmNvbXBpbGVycy5sbHZtLmNsYW5nLjFfMDsKLUdDQ19XQVJO
X0FCT1VUX0RFUFJFQ0FURURfRlVOQ1RJT05TID0gTk8KLUdDQ19XQVJOX1VOVVNFRF9GVU5DVElP
TiA9IFlFUwotR0NDX1dBUk5fVU5VU0VEX1ZBUklBQkxFID0gWUVTCi1HQ0NfV0FSTl82NF9UT18z
Ml9CSVRfQ09OVkVSU0lPTlthcmNoPXg4Nl82NF0gPSBOTzsKLVdBUk5JTkdfQ0ZMQUdTID0gLVdh
bGwgLVcgLVduby11bnVzZWQtcGFyYW1ldGVyIC1XdW5kZWYKLQotREVCVUdfREVGSU5FU19kZWJ1
ZyA9IDsKLURFQlVHX0RFRklORVNfbm9ybWFsID0gTkRFQlVHOwotREVCVUdfREVGSU5FUyA9ICQo
REVCVUdfREVGSU5FU18kKENVUlJFTlRfVkFSSUFOVCkpOwotCi1UQVJHRVRfTUFDX09TX1hfVkVS
U0lPTl9NQUpPUiA9ICQoVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1IkKE1BQ09TWF9ERVBM
T1lNRU5UX1RBUkdFVDpzdWZmaXg6aWRlbnRpZmllcikpOwotVEFSR0VUX01BQ19PU19YX1ZFUlNJ
T05fTUFKT1JfMTAgPSAxMDEwMDA7Ci1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUl8xMSA9
IDEwMTEwMDsKLVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SXzEyID0gMTAxMjAwOwotVEFS
R0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1JfMTMgPSAxMDEzMDA7Ci0KLVNES1JPT1QgPSBtYWNv
c3guaW50ZXJuYWw7Ci0KLVNVUFBPUlRFRF9QTEFURk9STVMgPSBtYWNvc3g7Ci0KLVRPT0xDSEFJ
TlMgPSBkZWZhdWx0OwotCi1PVEhFUl9DRkxBR1MgPSAkKEFTQU5fT1RIRVJfQ0ZMQUdTKTsKLU9U
SEVSX0NQTFVTUExVU0ZMQUdTID0gJChBU0FOX09USEVSX0NQTFVTUExVU0ZMQUdTKTsKLU9USEVS
X0xERkxBR1MgPSAkKEFTQU5fT1RIRVJfTERGTEFHUyk7CkluZGV4OiBUb29scy9MYXlvdXRUZXN0
UmVsYXkvQ29uZmlndXJhdGlvbnMvRGVidWdSZWxlYXNlLnhjY29uZmlnCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25m
aWcJKHJldmlzaW9uIDIxMDI3NCkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0
aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25maWcJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MiArMCwwIEBA
Ci0vLyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0vLyBhcmUgbWV0OgotLy8gMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LS8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLS8vIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0vLyAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotLy8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS8vIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotLy8gUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLS8vIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotLy8gRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotLy8gUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0vLyBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0vLyBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgIkJhc2UueGNj
b25maWciCi0KLUFSQ0hTID0gJChBUkNIU19TVEFOREFSRF82NF9CSVQpOwotCi1UQVJHRVRfTUFD
X09TX1hfVkVSU0lPTl9NQUpPUiA9ICQoTUFDX09TX1hfVkVSU0lPTl9NQUpPUik7Ci0KLU1BQ09T
WF9ERVBMT1lNRU5UX1RBUkdFVCA9ICQoTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXyQoVEFSR0VU
X01BQ19PU19YX1ZFUlNJT05fTUFKT1IpKQotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEwMTAw
MCA9IDEwLjEwOwotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEwMTEwMCA9IDEwLjExOwotTUFD
T1NYX0RFUExPWU1FTlRfVEFSR0VUXzEwMTIwMCA9IDEwLjEyOwotTUFDT1NYX0RFUExPWU1FTlRf
VEFSR0VUXzEwMTMwMCA9IDEwLjEzOwotCi1GUkFNRVdPUktfU0VBUkNIX1BBVEhTID0gJChERVZF
TE9QRVJfRElSKS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzOwotTERfUlVOUEFUSF9TRUFSQ0hf
UEFUSFMgPSAkKERFVkVMT1BFUl9ESVIpL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3M7Ci1PVEhF
Ul9MREZMQUdTID0gLWZyYW1ld29yayBDb3JlU2ltdWxhdG9yIC1mcmFtZXdvcmsgQXBwS2l0Owot
Ci1TREtST09UID0gJChTREtST09UX21hY29zeF8kKFVTRV9JTlRFUk5BTF9TREspKTsKLVNES1JP
T1RfbWFjb3N4XyA9IG1hY29zeDsKLVNES1JPT1RfbWFjb3N4X1lFUyA9IG1hY29zeC5pbnRlcm5h
bDsKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvQ29yZVNpbXVs
YXRvclNQSS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0
UmVsYXkvQ29yZVNpbXVsYXRvclNQSS5oCShyZXZpc2lvbiAyMTAyNzQpCisrKyBUb29scy9MYXlv
dXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0NvcmVTaW11bGF0b3JTUEkuaAkobm9uZXhpc3Rl
bnQpCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgX19oYXNfaW5jbHVk
ZSg8Q29yZVNpbXVsYXRvci9Db3JlU2ltdWxhdG9yLmg+KQotCi0vKiBGSVhNRTogUmVtb3ZlIHRo
ZSBiZWxvdyAjZGVmaW5lIG9uY2Ugd2UgcmVxdWlyZSBYY29kZSA3LjMgd2l0aCBpT1MgOS4zIFNE
SyBvciBuZXdlci4gKi8KLSNkZWZpbmUgX19jb3Jlc2ltX3VuYXZhaWxhYmxlX21zZyhtc2cpCi0j
aW1wb3J0IDxDb3JlU2ltdWxhdG9yL0NvcmVTaW11bGF0b3IuaD4KLQotLyogRklYTUU6IEFsd2F5
cyB1c2UgU2ltU2VydmljZUNvbnRleHQgb25jZSB3ZSByZXF1aXJlIFhjb2RlIDcuMyB3aXRoIGlP
UyA5LjMgU0RLIG9yIG5ld2VyLiAqLwotI2RlZmluZSBVU0VfU0lNX1NFUlZJQ0VfQ09OVEVYVCBk
ZWZpbmVkKENPUkVTSU1fQVBJX01BWF9BTExPV0VEKQotCi0jZWxzZQotCi0jaW1wb3J0IDxGb3Vu
ZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2RlZmluZSBVU0VfU0lNX1NFUlZJQ0VfQ09OVEVYVCAx
Ci0KLSNkZWZpbmUga1NpbURldmljZUxhdW5jaEFwcGxpY2F0aW9uQXJndW1lbnRzIEAiYXJndW1l
bnRzIgotI2RlZmluZSBrU2ltRGV2aWNlTGF1bmNoQXBwbGljYXRpb25FbnZpcm9ubWVudCBAImVu
dmlyb25tZW50IgotCi1AaW50ZXJmYWNlIFNpbURldmljZSA6IE5TT2JqZWN0Ci0tIChCT09MKWlu
c3RhbGxBcHBsaWNhdGlvbjooTlNVUkwgKilpbnN0YWxsVVJMIHdpdGhPcHRpb25zOihOU0RpY3Rp
b25hcnkgKilvcHRpb25zIGVycm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7
Ci0tIChwaWRfdClsYXVuY2hBcHBsaWNhdGlvbldpdGhJRDooTlNTdHJpbmcgKilidW5kbGVJRCBv
cHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zIGVycm9yOihOU0Vycm9yICogX19hdXRvcmVs
ZWFzaW5nICopZXJyb3I7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgU2ltRGV2aWNlU2V0IDogTlNPYmpl
Y3QKLUBwcm9wZXJ0eSAocmVhZG9ubHksIGNvcHkpIE5TRGljdGlvbmFyeSAqZGV2aWNlc0J5VURJ
RDsKLUBlbmQKLQotQGludGVyZmFjZSBTaW1TZXJ2aWNlQ29udGV4dCA6IE5TT2JqZWN0Ci0rKFNp
bVNlcnZpY2VDb250ZXh0ICopc2hhcmVkU2VydmljZUNvbnRleHRGb3JEZXZlbG9wZXJEaXI6KE5T
U3RyaW5nICopZGV2ZWxvcGVyRGlyIGVycm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICop
ZXJyb3I7Ci0tKFNpbURldmljZVNldCAqKWRlZmF1bHREZXZpY2VTZXRXaXRoRXJyb3I6KE5TRXJy
b3IgKiBfX2F1dG9yZWxlYXNpbmcgKillcnJvcjsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29s
cy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5o
CShyZXZpc2lvbiAyMTAyNzQpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJl
bGF5L0xUUGlwZVJlbGF5LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwzNiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBMVFBpcGVSZWxheV9oCi0jZGVmaW5lIExUUGlwZVJlbGF5X2gKLQotI2lt
cG9ydCAiTFRSZWxheS5oIgotCi1AaW50ZXJmYWNlIExUUGlwZVJlbGF5IDogTlNPYmplY3QgPExU
UmVsYXk+Ci1AcHJvcGVydHkgKHdlYWspIGlkPExUUmVsYXlEZWxlZ2F0ZT4gcmVsYXlEZWxlZ2F0
ZTsKLS0gKGlkKWluaXRXaXRoUHJlZml4OihOU1N0cmluZyAqKXByZWZpeDsKLUBlbmQKLQotI2Vu
ZGlmCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJl
bGF5Lm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxh
eS9MVFBpcGVSZWxheS5tCShyZXZpc2lvbiAyMTAyNzQpCisrKyBUb29scy9MYXlvdXRUZXN0UmVs
YXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0JKG5vbmV4aXN0ZW50KQpAQCAtMSwxNTgg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgIkxUUGlwZVJlbGF5LmgiCi0KLSNpbXBvcnQg
PEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVk
ZSA8c3lzL3R5cGVzLmg+Ci0KLUBpbnRlcmZhY2UgTFRQaXBlUmVsYXkgKCkKLUBwcm9wZXJ0eSAo
cmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKmZpZm9QcmVmaXg7Ci1AcHJvcGVydHkgKHN0cm9u
ZykgTlNPdXRwdXRTdHJlYW0gKnN0YW5kYXJkSW5wdXRQaXBlOwotQHByb3BlcnR5IChzdHJvbmcp
IE5TSW5wdXRTdHJlYW0gKnN0YW5kYXJkT3V0cHV0UGlwZTsKLUBwcm9wZXJ0eSAoc3Ryb25nKSBO
U0lucHV0U3RyZWFtICpzdGFuZGFyZEVycm9yUGlwZTsKLQotLSAodm9pZCljcmVhdGVGSUZPczsK
LS0gKHZvaWQpZGVzdHJveUZJRk9zOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gTFRQaXBlUmVs
YXkKLQotLSAoTlNTdHJpbmcgKilpblBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZp
eCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9JTiJdOwotfQotCi0tIChOU1N0cmluZyAqKW91
dFBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0
cmluZzpAIl9PVVQiXTsKLX0KLQotLSAoTlNTdHJpbmcgKillcnJvclBpcGVQYXRoCi17Ci0gICAg
cmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9FUlJPUiJdOwot
fQotCi0tIChOU091dHB1dFN0cmVhbSAqKSBvdXRwdXRTdHJlYW0KLXsKLSAgICByZXR1cm4gX3N0
YW5kYXJkSW5wdXRQaXBlOwotfQotCi0tIChpZClpbml0V2l0aFByZWZpeDooTlNTdHJpbmcgKilw
cmVmaXgKLXsKLSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKSB7Ci0gICAgICAgIF9maWZv
UHJlZml4ID0gcHJlZml4OwotICAgICAgICBbc2VsZiBkZXN0cm95RklGT3NdOwotICAgIH0KLSAg
ICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXR1cAotewotICAgIFtzZWxmIGRlc3Ryb3lG
SUZPc107Ci0gICAgW3NlbGYgY3JlYXRlRklGT3NdOwotfQotCi0tICh2b2lkKXRlYXJEb3duCi17
Ci0gICAgW3NlbGYgZGVzdHJveUZJRk9zXTsKLX0KLQotLSh2b2lkKSBjb25uZWN0Ci17Ci0gICAg
X3N0YW5kYXJkSW5wdXRQaXBlID0gW05TT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbVRvRmlsZUF0
UGF0aDpbc2VsZiBpblBpcGVQYXRoXSBhcHBlbmQ6WUVTXTsKLSAgICBfc3RhbmRhcmRPdXRwdXRQ
aXBlID0gW05TSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW1XaXRoRmlsZUF0UGF0aDpbc2VsZiBvdXRQ
aXBlUGF0aF1dOwotICAgIF9zdGFuZGFyZEVycm9yUGlwZSA9IFtOU0lucHV0U3RyZWFtIGlucHV0
U3RyZWFtV2l0aEZpbGVBdFBhdGg6W3NlbGYgZXJyb3JQaXBlUGF0aF1dOwotCi0gICAgW1tzZWxm
IHN0YW5kYXJkSW5wdXRQaXBlXSBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICBbW3NlbGYgc3RhbmRh
cmRPdXRwdXRQaXBlXSBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRFcnJv
clBpcGVdIHNldERlbGVnYXRlOnNlbGZdOwotCi0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlw
ZV0gc2NoZWR1bGVJblJ1bkxvb3A6W05TUnVuTG9vcCBtYWluUnVuTG9vcF0gZm9yTW9kZTpOU0Rl
ZmF1bHRSdW5Mb29wTW9kZV07Ci0gICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JQaXBlXSBzY2hlZHVs
ZUluUnVuTG9vcDpbTlNSdW5Mb29wIG1haW5SdW5Mb29wXSBmb3JNb2RlOk5TRGVmYXVsdFJ1bkxv
b3BNb2RlXTsKLQotICAgIFtbc2VsZiBzdGFuZGFyZElucHV0UGlwZV0gb3Blbl07Ci0gICAgW1tz
ZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gb3Blbl07Ci0gICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JQ
aXBlXSBvcGVuXTsKLQotICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRDb25uZWN0XTsKLX0K
LQotLSAodm9pZClkaXNjb25uZWN0Ci17Ci0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0g
Y2xvc2VdOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yUGlwZV0gY2xvc2VdOwotICAgIFtbc2Vs
ZiBzdGFuZGFyZElucHV0UGlwZV0gY2xvc2VdOwotICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBk
aWREaXNjb25uZWN0XTsKLX0KLQotLSAodm9pZCljcmVhdGVGSUZPcwotewotICAgIG1rZmlmbyhb
W3NlbGYgaW5QaXBlUGF0aF0gVVRGOFN0cmluZ10sIDA2NjYpOwotICAgIG1rZmlmbyhbW3NlbGYg
b3V0UGlwZVBhdGhdIFVURjhTdHJpbmddLCAwNjY2KTsKLSAgICBta2ZpZm8oW1tzZWxmIGVycm9y
UGlwZVBhdGhdIFVURjhTdHJpbmddLCAwNjY2KTsKLX0KLQotLSAodm9pZClkZXN0cm95RklGT3MK
LXsKLSAgICB1bmxpbmsoW1tzZWxmIGluUGlwZVBhdGhdIFVURjhTdHJpbmddKTsKLSAgICB1bmxp
bmsoW1tzZWxmIG91dFBpcGVQYXRoXSBVVEY4U3RyaW5nXSk7Ci0gICAgdW5saW5rKFtbc2VsZiBl
cnJvclBpcGVQYXRoXSBVVEY4U3RyaW5nXSk7Ci19Ci0KLS0gKHZvaWQpIHJlbGF5U3RyZWFtOihO
U0lucHV0U3RyZWFtICopc3RyZWFtCi17Ci0gICAgdWludDhfdCBieXRlc1sxMDI0XTsKLSAgICBO
U0ludGVnZXIgYnl0ZXNSZWFkID0gW3N0cmVhbSByZWFkOmJ5dGVzIG1heExlbmd0aDoxMDI0XTsK
LSAgICBOU0RhdGEgKmRhdGEgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6Ynl0ZXMgbGVuZ3RoOmJ5
dGVzUmVhZF07Ci0KLSAgICBpZiAoc3RyZWFtID09IFtzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0p
Ci0gICAgICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRSZWNlaXZlU3Rkb3V0RGF0YTpkYXRh
XTsKLSAgICBlbHNlCi0gICAgICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRSZWNlaXZlU3Rk
ZXJyRGF0YTpkYXRhXTsKLX0KLQotLSAodm9pZClzdHJlYW06KE5TU3RyZWFtICopYVN0cmVhbSBo
YW5kbGVFdmVudDooTlNTdHJlYW1FdmVudClldmVudENvZGUKLXsKLSAgICBzd2l0Y2ggKGV2ZW50
Q29kZSkgewotICAgIGNhc2UgTlNTdHJlYW1FdmVudE5vbmU6Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgTlNTdHJlYW1FdmVudEhhc0J5dGVzQXZhaWxhYmxlOgotICAgICAgICBbc2VsZiByZWxh
eVN0cmVhbTooTlNJbnB1dFN0cmVhbSAqKWFTdHJlYW1dOwotICAgIGNhc2UgTlNTdHJlYW1FdmVu
dEhhc1NwYWNlQXZhaWxhYmxlOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5TU3RyZWFtRXZl
bnRPcGVuQ29tcGxldGVkOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnRF
bmRFbmNvdW50ZXJlZDoKLSAgICAgICAgW1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZENyYXNoV2l0
aE1lc3NhZ2U6bmlsXTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOU1N0cmVhbUV2ZW50RXJy
b3JPY2N1cnJlZDoKLSAgICAgICAgW1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZENyYXNoV2l0aE1l
c3NhZ2U6W1thU3RyZWFtIHN0cmVhbUVycm9yXSBkZXNjcmlwdGlvbl1dOwotICAgICAgICBicmVh
azsKLSAgICB9Ci19Ci0KLUBlbmQKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRU
ZXN0UmVsYXkvTFRSZWxheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9M
YXlvdXRUZXN0UmVsYXkvTFRSZWxheS5oCShyZXZpc2lvbiAyMTAyNzQpCisrKyBUb29scy9MYXlv
dXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXkuaAkobm9uZXhpc3RlbnQpCkBAIC0x
LDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIExUUmVsYXlfaAotI2RlZmluZSBMVFJl
bGF5X2gKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLUBwcm90b2NvbCBM
VFJlbGF5RGVsZWdhdGUgPE5TT2JqZWN0PgotLSAodm9pZClkaWRDb25uZWN0OwotLSAodm9pZClk
aWREaXNjb25uZWN0OwotLSAodm9pZClkaWRDcmFzaFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1l
c3NhZ2U7Ci0tICh2b2lkKWRpZFJlY2VpdmVTdGRvdXREYXRhOihOU0RhdGEgKilkYXRhOwotLSAo
dm9pZClkaWRSZWNlaXZlU3RkZXJyRGF0YTooTlNEYXRhICopZGF0YTsKLUBlbmQKLQotQHByb3Rv
Y29sIExUUmVsYXkgPE5TT2JqZWN0LCBOU1N0cmVhbURlbGVnYXRlPgotLSAodm9pZClzZXR1cDsK
LS0gKHZvaWQpdGVhckRvd247Ci0tICh2b2lkKWNvbm5lY3Q7Ci0tICh2b2lkKWRpc2Nvbm5lY3Q7
Ci1AcHJvcGVydHkgKHdlYWspIGlkPExUUmVsYXlEZWxlZ2F0ZT4gcmVsYXlEZWxlZ2F0ZTsKLUBw
cm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNPdXRwdXRTdHJlYW0gKm91dHB1dFN0cmVhbTsK
LUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJl
bGF5L0xUUmVsYXlDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJl
bGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAyMTAyNzQp
CisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250cm9s
bGVyLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYg
TFRSZWxheUNvbnRyb2xsZXJfaAotI2RlZmluZSBMVFJlbGF5Q29udHJvbGxlcl9oCi0KLSNpbXBv
cnQgIkxUUmVsYXkuaCIKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLUBj
bGFzcyBTaW1EZXZpY2U7Ci0KLUBpbnRlcmZhY2UgTFRSZWxheUNvbnRyb2xsZXIgOiBOU09iamVj
dCA8TFRSZWxheURlbGVnYXRlPgotLSAoaWQpaW5pdFdpdGhEZXZpY2U6KFNpbURldmljZSAqKWRl
dmljZSBwcm9kdWN0RGlyOihOU1N0cmluZyAqKXByb2R1Y3REaXIgYXBwUGF0aDooTlNTdHJpbmcg
KilhcHBQYXRoIGRldmljZVVESUQ6KE5TVVVJRCAqKXVkaWQgZHVtcFRvb2xBcmd1bWVudHM6KE5T
QXJyYXkgKilhcmd1bWVudHM7Ci0tICh2b2lkKXN0YXJ0OwotLSAodm9pZClmaW5pc2g7Ci1AZW5k
Ci0KLSNlbmRpZgpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9M
VFJlbGF5Q29udHJvbGxlci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9M
YXlvdXRUZXN0UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIubQkocmV2aXNpb24gMjEwMjc0KQorKysg
VG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5t
CShub25leGlzdGVudCkKQEAgLTEsMjcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJM
VFJlbGF5Q29udHJvbGxlci5oIgotCi0jaW1wb3J0ICJDb3JlU2ltdWxhdG9yU1BJLmgiCi0jaW1w
b3J0ICJMVFBpcGVSZWxheS5oIgotI2ltcG9ydCA8QXBwS2l0L0FwcEtpdC5oPgotI2ltcG9ydCA8
Y3J0X2V4dGVybnMuaD4KLQotQGludGVyZmFjZSBMVFJlbGF5Q29udHJvbGxlciAoKQotQHByb3Bl
cnR5IChyZWFkb25seSwgc3Ryb25nKSBkaXNwYXRjaF9zb3VyY2VfdCBzdGFuZGFyZElucHV0RGlz
cGF0Y2hTb3VyY2U7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TRmlsZUhhbmRsZSAq
c3RhbmRhcmRPdXRwdXQ7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TRmlsZUhhbmRs
ZSAqc3RhbmRhcmRFcnJvcjsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcg
KmlwY0lkZW50aWZpZXI7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TU3RyaW5nICph
cHBCdW5kbGVJZGVudGlmaWVyOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU1N0cmlu
ZyAqYXBwUGF0aDsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNVVUlEICpkZXZpY2VV
RElEOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU0FycmF5ICpkdW1wVG9vbEFyZ3Vt
ZW50czsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKnByb2R1Y3REaXI7
Ci1AcHJvcGVydHkgKHN0cm9uZykgU2ltRGV2aWNlICpkZXZpY2U7Ci1AcHJvcGVydHkgKHN0cm9u
ZykgaWQ8TFRSZWxheT4gcmVsYXk7Ci1AcHJvcGVydHkgcGlkX3QgcGlkOwotQHByb3BlcnR5IChz
dHJvbmcpIGRpc3BhdGNoX3NvdXJjZV90IGFwcERpc3BhdGNoU291cmNlOwotQGVuZAotCi1AaW1w
bGVtZW50YXRpb24gTFRSZWxheUNvbnRyb2xsZXIKLQotLSAoaWQpaW5pdFdpdGhEZXZpY2U6KFNp
bURldmljZSAqKWRldmljZSBwcm9kdWN0RGlyOihOU1N0cmluZyAqKXByb2R1Y3REaXIgYXBwUGF0
aDooTlNTdHJpbmcgKilhcHBQYXRoIGRldmljZVVESUQ6KE5TVVVJRCAqKXVkaWQgZHVtcFRvb2xB
cmd1bWVudHM6KE5TQXJyYXkgKilhcmd1bWVudHMKLXsKLSAgICBpZiAoKHNlbGYgPSBbc3VwZXIg
aW5pdF0pKSB7Ci0gICAgICAgIF9kZXZpY2UgPSBkZXZpY2U7Ci0gICAgICAgIF9wcm9kdWN0RGly
ID0gcHJvZHVjdERpcjsKLSAgICAgICAgX2FwcFBhdGggPSBhcHBQYXRoOwotICAgICAgICBfYXBw
QnVuZGxlSWRlbnRpZmllciA9IFtbTlNCdW5kbGUgYnVuZGxlV2l0aFBhdGg6YXBwUGF0aF0gYnVu
ZGxlSWRlbnRpZmllcl07Ci0gICAgICAgIF9kZXZpY2VVRElEID0gdWRpZDsKLSAgICAgICAgX2R1
bXBUb29sQXJndW1lbnRzID0gYXJndW1lbnRzOwotICAgICAgICBfc3RhbmRhcmRJbnB1dERpc3Bh
dGNoU291cmNlID0gZGlzcGF0Y2hfc291cmNlX2NyZWF0ZShESVNQQVRDSF9TT1VSQ0VfVFlQRV9S
RUFELCBTVERJTl9GSUxFTk8sIDAsIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCkpOwotICAgICAg
ICBfc3RhbmRhcmRPdXRwdXQgPSBbTlNGaWxlSGFuZGxlIGZpbGVIYW5kbGVXaXRoU3RhbmRhcmRP
dXRwdXRdOwotICAgICAgICBfc3RhbmRhcmRFcnJvciA9IFtOU0ZpbGVIYW5kbGUgZmlsZUhhbmRs
ZVdpdGhTdGFuZGFyZEVycm9yXTsKLQotICAgICAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2V2ZW50
X2hhbmRsZXIoX3N0YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJjZSwgXnsKLSAgICAgICAgICAgIHVp
bnQ4X3QgYnVmZmVyWzEwMjRdOwotICAgICAgICAgICAgc3NpemVfdCBsZW4gPSByZWFkKFNURElO
X0ZJTEVOTywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7Ci0gICAgICAgICAgICBpZiAobGVuID4g
MCkgewotICAgICAgICAgICAgICAgIEB0cnkgewotICAgICAgICAgICAgICAgICAgICBbW1tzZWxm
IHJlbGF5XSBvdXRwdXRTdHJlYW1dIHdyaXRlOmJ1ZmZlciBtYXhMZW5ndGg6bGVuXTsKLSAgICAg
ICAgICAgICAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24gKmUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gQnJva2VuIHBpcGUgLSB0aGUgZHVtcCB0b29sIGNyYXNoZWQuIFRpbWUgdG8gZGllLgot
ICAgICAgICAgICAgICAgICAgICBbc2VsZiBkaWRDcmFzaFdpdGhNZXNzYWdlOm5pbF07Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBF
T0YgUmVjZWl2ZWQgb24gdGhlIHJlbGF5J3Mgc3RhbmRhcmQgaW5wdXQuCi0gICAgICAgICAgICAg
ICAgW3NlbGYgZmluaXNoXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAg
X3JlbGF5ID0gW1tMVFBpcGVSZWxheSBhbGxvY10gaW5pdFdpdGhQcmVmaXg6W0AiL3RtcCIgc3Ry
aW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OnNlbGYuaXBjSWRlbnRpZmllcl1dOwotICAgICAg
ICBbX3JlbGF5IHNldFJlbGF5RGVsZWdhdGU6c2VsZl07Ci0gICAgfQotICAgIHJldHVybiBzZWxm
OwotfQotCi0tIChOU1N0cmluZyAqKWlwY0lkZW50aWZpZXIKLXsKLSAgICByZXR1cm4gW05TU3Ry
aW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQC0lQCIsIHNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciwg
c2VsZi5kZXZpY2VVRElELlVVSURTdHJpbmddOwotfQotCi0tIChOU1N0cmluZyAqKXByb2Nlc3NO
YW1lCi17Ci0gICAgcmV0dXJuIFtzZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIgY29tcG9uZW50c1Nl
cGFyYXRlZEJ5U3RyaW5nOkAiLiJdLmxhc3RPYmplY3Q7Ci19Ci0KLS0gKHZvaWQpZGlkUmVjZWl2
ZVN0ZG91dERhdGE6KE5TRGF0YSAqKWRhdGEKLXsKLSAgICBAdHJ5IHsKLSAgICAgICAgW1tzZWxm
IHN0YW5kYXJkT3V0cHV0XSB3cml0ZURhdGE6ZGF0YV07Ci0gICAgfSBAY2F0Y2ggKE5TRXhjZXB0
aW9uICpleGNlcHRpb24pIHsKLSAgICAgICAgLy8gTlNGaWxlSGFuZGxlT3BlcmF0aW9uRXhjZXB0
aW9uCi0gICAgICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhlIHRlc3QgaGFybmVzcyBzdG9wcGVkIGxp
c3RlbmluZyB0byB1cywKLSAgICAgICAgLy8gcHJvYmFibHkgYmVjYXVzZSB3ZSB0aW1lZCBvdXQg
b3IgYSBydW4gd2FzIGNhbmNlbGVkLgotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAg
fQotfQotCi0tICh2b2lkKWRpZFJlY2VpdmVTdGRlcnJEYXRhOihOU0RhdGEgKilkYXRhCi17Ci0g
ICAgQHRyeSB7Ci0gICAgICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSB3cml0ZURhdGE6ZGF0YV07
Ci0gICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRpb24pIHsKLSAgICAgICAgLy8gTlNG
aWxlSGFuZGxlT3BlcmF0aW9uRXhjZXB0aW9uCi0gICAgICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhl
IHRlc3QgaGFybmVzcyBzdG9wcGVkIGxpc3RlbmluZyB0byB1cywKLSAgICAgICAgLy8gcHJvYmFi
bHkgYmVjYXVzZSB3ZSB0aW1lZCBvdXQgb3IgYSBydW4gd2FzIGNhbmNlbGVkLgotICAgICAgICBl
eGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotfQotCi0tICh2b2lkKWRpZERpc2Nvbm5lY3QKLXsK
LSAgICBkaXNwYXRjaF9zdXNwZW5kKFtzZWxmIHN0YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJjZV0p
OwotfQotCi0tICh2b2lkKWRpZENvbm5lY3QKLXsKLSAgICBkaXNwYXRjaF9yZXN1bWUoW3NlbGYg
c3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNlXSk7Ci19Ci0KLS0gKHZvaWQpZGlkQ3Jhc2hXaXRo
TWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgW1tzZWxmIHJlbGF5XSBkaXNjb25u
ZWN0XTsKLSAgICBOU1N0cmluZyAqY3Jhc2hNZXNzYWdlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhG
b3JtYXQ6QCJcbiNDUkFTSEVEIC0gJUAgKHBpZCAlZClcbiIsIFtzZWxmIHByb2Nlc3NOYW1lXSwg
W3NlbGYgcGlkXV07Ci0KLSAgICBpZiAobWVzc2FnZSkKLSAgICAgICAgY3Jhc2hNZXNzYWdlID0g
W2NyYXNoTWVzc2FnZSBzdHJpbmdCeUFwcGVuZGluZ0Zvcm1hdDpAIiVAXG4iLCBtZXNzYWdlXTsK
LQotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSB3cml0ZURhdGE6W2NyYXNoTWVzc2FnZSBkYXRh
VXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ11dOwotICAgIFtbc2VsZiBzdGFuZGFy
ZEVycm9yXSBjbG9zZUZpbGVdOwotICAgIFtbc2VsZiBzdGFuZGFyZE91dHB1dF0gY2xvc2VGaWxl
XTsKLSAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci19Ci0KLS0gKHZvaWQpaW5zdGFsbEFwcAotewot
ICAgIE5TRGljdGlvbmFyeSAqaW5zdGFsbE9wdGlvbnMgPSBAewotICAgICAgICAoTlNTdHJpbmcg
KilrQ0ZCdW5kbGVJZGVudGlmaWVyS2V5OiBzZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIsCi0gICAg
fTsKLQotICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOwotICAgIEJPT0wgaW5zdGFsbGVkID0gW3Nl
bGYuZGV2aWNlIGluc3RhbGxBcHBsaWNhdGlvbjpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnNlbGYu
YXBwUGF0aF0gd2l0aE9wdGlvbnM6aW5zdGFsbE9wdGlvbnMgZXJyb3I6JmVycm9yXTsKLSAgICBp
ZiAoIWluc3RhbGxlZCkgewotICAgICAgICBOU0xvZyhAIkNvdWxkbid0IGluc3RhbGwgJUA6ICVA
Iiwgc2VsZi5hcHBQYXRoLCBlcnJvci5kZXNjcmlwdGlvbik7Ci0gICAgICAgIGV4aXQoRVhJVF9G
QUlMVVJFKTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpa2lsbEFwcAotewotICAgIGRpc3BhdGNoX3Nv
dXJjZV90IGRpc3BhdGNoID0gW3NlbGYgYXBwRGlzcGF0Y2hTb3VyY2VdOwotCi0gICAgaWYgKGRp
c3BhdGNoKQotICAgICAgICBkaXNwYXRjaF9zb3VyY2VfY2FuY2VsKGRpc3BhdGNoKTsKLQotICAg
IGlmIChbc2VsZiBwaWRdID4gMSkgewotICAgICAgICBraWxsKHNlbGYucGlkLCBTSUdLSUxMKTsK
LSAgICAgICAgW3NlbGYgc2V0UGlkOi0xXTsKLSAgICB9Ci0gICAgW3NlbGYgc2V0QXBwRGlzcGF0
Y2hTb3VyY2U6bmlsXTsKLX0KLQotLSAoTlNEaWN0aW9uYXJ5ICopX2Vudmlyb25tZW50VmFyaWFi
bGVzCi17Ci0gICAgc3RhdGljIE5TRGljdGlvbmFyeSAqZW52aXJvbm1lbnRWYXJpYWJsZXM7Ci0g
ICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlOwotCi0gICAgZGlzcGF0Y2hfb25jZSgmb25j
ZSwgXnsKLSAgICAgICAgTlNTdHJpbmcgKnByb2R1Y3REaXJlY3RvcnkgPSBbc2VsZiBwcm9kdWN0
RGlyXTsKLQotICAgICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gW0B7Ci0g
ICAgICAgICAgICBAIklQQ19JREVOVElGSUVSIjogc2VsZi5pcGNJZGVudGlmaWVyLAotICAgICAg
ICAgICAgQCJEWUxEX0ZSQU1FV09SS19QQVRIIjogcHJvZHVjdERpcmVjdG9yeSwKLSAgICAgICAg
ICAgIEAiX19YUENfRFlMRF9GUkFNRVdPUktfUEFUSCI6IHByb2R1Y3REaXJlY3RvcnksCi0gICAg
ICAgICAgICBAIkRZTERfTElCUkFSWV9QQVRIIjogcHJvZHVjdERpcmVjdG9yeSwKLSAgICAgICAg
ICAgIEAiX19YUENfRFlMRF9MSUJSQVJZX1BBVEgiOiBwcm9kdWN0RGlyZWN0b3J5LAotICAgICAg
ICB9IG11dGFibGVDb3B5XTsKLQotICAgICAgICBmb3IgKE5TU3RyaW5nICprZXlOYW1lIGluIEBb
QCJEWUxEX0lOU0VSVF9MSUJSQVJJRVMiLCBAIk1hbGxvY1N0YWNrTG9nZ2luZyIsIEAiTE9DQUxf
UkVTT1VSQ0VfUk9PVCIsIEAiRFVNUFJFTkRFUlRSRUVfVEVNUCJdKSB7Ci0gICAgICAgICAgICBj
b25zdCBjaGFyKiB2YWx1ZSA9IGdldGVudihba2V5TmFtZSBVVEY4U3RyaW5nXSk7Ci0gICAgICAg
ICAgICBpZiAodmFsdWUgJiYgc3RybGVuKHZhbHVlKSkgewotICAgICAgICAgICAgICAgIE5TU3Ry
aW5nICpuc1ZhbHVlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnZhbHVlXTsKLSAg
ICAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6bnNWYWx1ZSBmb3JLZXk6a2V5TmFt
ZV07Ci0gICAgICAgICAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0Om5zVmFsdWUgZm9yS2V5
OltAIl9fWFBDXyIgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6a2V5TmFtZV1dOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChjaGFyKiogZW52cCA9ICpfTlNHZXRFbnZp
cm9uKCk7ICplbnZwOyBlbnZwKyspIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVudiA9ICpl
bnZwOwotICAgICAgICAgICAgaWYgKCFzdHJuY21wKCJKU0NfIiwgZW52LCA0KSB8fCAhc3RybmNt
cCgiX19YUENfSlNDXyIsIGVudiwgMTApKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciog
ZXF1YWwgPSBzdHJjaHIoZW52LCAnPScpOwotICAgICAgICAgICAgICAgIGlmICghZXF1YWwpIHsK
LSAgICAgICAgICAgICAgICAgICAgTlNMb2coQCJNaXNzaW5nICc9JyBpbiBlbnYgdmFyICclcyci
LCBlbnYpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heEtleUxlbmd0aCA9IDI1
NjsKLSAgICAgICAgICAgICAgICBzaXplX3Qga2V5TGVuZ3RoID0gZXF1YWwgLSBlbnY7Ci0gICAg
ICAgICAgICAgICAgaWYgKGtleUxlbmd0aCA+PSBtYXhLZXlMZW5ndGgpIHsKLSAgICAgICAgICAg
ICAgICAgICAgTlNMb2coQCJFbnYgdmFyICclcycgaXMgdG9vIGxvbmciLCBlbnYpOwotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBjaGFyIGtleVttYXhLZXlMZW5ndGhdOwotICAgICAgICAgICAgICAgIHN0cm5jcHkoa2V5
LCBlbnYsIGtleUxlbmd0aCk7Ci0gICAgICAgICAgICAgICAga2V5W2tleUxlbmd0aF0gPSAnXDAn
OwotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhbHVlID0gZXF1YWwgKyAxOwotCi0gICAg
ICAgICAgICAgICAgTlNTdHJpbmcgKm5zS2V5ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3Ry
aW5nOmtleV07Ci0gICAgICAgICAgICAgICAgTlNTdHJpbmcgKm5zVmFsdWUgPSBbTlNTdHJpbmcg
c3RyaW5nV2l0aFVURjhTdHJpbmc6dmFsdWVdOwotICAgICAgICAgICAgICAgIFtkaWN0aW9uYXJ5
IHNldE9iamVjdDpuc1ZhbHVlIGZvcktleTpuc0tleV07Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBlbnZpcm9ubWVudFZhcmlhYmxlcyA9IFtkaWN0aW9uYXJ5IGNvcHldOwot
ICAgIH0pOwotCi0gICAgcmV0dXJuIGVudmlyb25tZW50VmFyaWFibGVzOwotfQotCi0tICh2b2lk
KWxhdW5jaEFwcAotewotICAgIE5TRGljdGlvbmFyeSAqbGF1bmNoT3B0aW9ucyA9IEB7Ci0gICAg
ICAgIGtTaW1EZXZpY2VMYXVuY2hBcHBsaWNhdGlvbkVudmlyb25tZW50OiBbc2VsZiBfZW52aXJv
bm1lbnRWYXJpYWJsZXNdLAotICAgICAgICBrU2ltRGV2aWNlTGF1bmNoQXBwbGljYXRpb25Bcmd1
bWVudHM6IFtzZWxmIGR1bXBUb29sQXJndW1lbnRzXSwKLSAgICB9OwotCi0gICAgTlNFcnJvciAq
ZXJyb3I7Ci0gICAgcGlkX3QgcGlkID0gW3NlbGYuZGV2aWNlIGxhdW5jaEFwcGxpY2F0aW9uV2l0
aElEOnNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciBvcHRpb25zOmxhdW5jaE9wdGlvbnMgZXJyb3I6
JmVycm9yXTsKLQotICAgIGlmIChwaWQgPCAwKSB7Ci0gICAgICAgIE5TTG9nKEAiQ291bGRuJ3Qg
bGF1bmNoICVAOiAlQCIsIHNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciwgZXJyb3IuZGVzY3JpcHRp
b24pOwotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotCi0gICAgW3NlbGYgc2V0
UGlkOnBpZF07Ci0KLSAgICBkaXNwYXRjaF9xdWV1ZV90IHF1ZXVlID0gZGlzcGF0Y2hfZ2V0X21h
aW5fcXVldWUoKTsKLSAgICBkaXNwYXRjaF9zb3VyY2VfdCBzaW11bGF0b3JBcHBFeGl0RGlzcGF0
Y2hTb3VyY2UgPSBkaXNwYXRjaF9zb3VyY2VfY3JlYXRlKERJU1BBVENIX1NPVVJDRV9UWVBFX1BS
T0MsIFtzZWxmIHBpZF0sIERJU1BBVENIX1BST0NfRVhJVCwgcXVldWUpOwotICAgIFtzZWxmIHNl
dEFwcERpc3BhdGNoU291cmNlOnNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZV07Ci0gICAg
ZGlzcGF0Y2hfc291cmNlX3NldF9ldmVudF9oYW5kbGVyKHNpbXVsYXRvckFwcEV4aXREaXNwYXRj
aFNvdXJjZSwgXnsKLSAgICAgICAgZGlzcGF0Y2hfc291cmNlX2NhbmNlbChzaW11bGF0b3JBcHBF
eGl0RGlzcGF0Y2hTb3VyY2UpOwotICAgICAgICBbc2VsZiBkaWRDcmFzaFdpdGhNZXNzYWdlOm5p
bF07Ci0gICAgfSk7Ci0gICAgZGlzcGF0Y2hfcmVzdW1lKHNpbXVsYXRvckFwcEV4aXREaXNwYXRj
aFNvdXJjZSk7Ci19Ci0KLS0gKHZvaWQpc3RhcnQKLXsKLSAgICBbc2VsZiBpbnN0YWxsQXBwXTsK
LSAgICBbW3NlbGYgcmVsYXldIHNldHVwXTsKLSAgICBbc2VsZiBsYXVuY2hBcHBdOwotICAgIFtb
c2VsZiByZWxheV0gY29ubmVjdF07Ci19Ci0KLS0gKHZvaWQpZmluaXNoCi17Ci0gICAgW1tzZWxm
IHJlbGF5XSBkaXNjb25uZWN0XTsKLSAgICBbc2VsZiBraWxsQXBwXTsKLSAgICBleGl0KEVYSVRf
U1VDQ0VTUyk7Ci19Ci0KLUBlbmQKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRU
ZXN0UmVsYXkvbWFpbi5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlv
dXRUZXN0UmVsYXkvbWFpbi5tCShyZXZpc2lvbiAyMTAyNzQpCisrKyBUb29scy9MYXlvdXRUZXN0
UmVsYXkvTGF5b3V0VGVzdFJlbGF5L21haW4ubQkobm9uZXhpc3RlbnQpCkBAIC0xLDEzMyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiQ29yZVNpbXVsYXRvclNQSS5oIgotI2lt
cG9ydCAiTFRSZWxheUNvbnRyb2xsZXIuaCIKLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlv
bi5oPgotCi1zdGF0aWMgTFRSZWxheUNvbnRyb2xsZXIgKnJlbGF5Q29udHJvbGxlcjsKLQotdm9p
ZCB1c2FnZSgpCi17Ci0gICAgTlNTdHJpbmcgKmhlbHBUZXh0ID0gQCJMYXlvdXRUZXN0UmVsYXk6
IHJ1biBhIGR1bXAgdG9vbCBpbiB0aGUgc2ltdWxhdG9yLiBOb3QgZm9yIGRpcmVjdCBjb25zdW1w
dGlvbi5cbiIKLSAgICAgICAgIlVzYWdlOiBMYXlvdXRUZXN0UmVsYXkgWy1oXSBbb3B0aW9uc10g
LS0gW2R1bXAgdG9vbCBhcmd1bWVudHNdXG4iCi0gICAgICAgICJSZXF1aXJlZCBvcHRpb25zOlxu
IgotICAgICAgICAiICAgIC11ZGlkIDxpZGVudGlmaWVyPiAgICAgICBTaW11bGF0b3IgZGV2aWNl
IGlkZW50aWZpZXJcbiIKLSAgICAgICAgIiAgICAtYXBwIDxhcHBfcGF0aD4gICAgICAgICAgUGF0
aCB0byB0aGUgYnVpbHQgaU9TIC5hcHAgYnVuZGxlIGRpcmVjdG9yeS5cbiIKLSAgICAgICAgIiAg
ICAtcHJvZHVjdERpciA8ZGlyPiAgICAgICAgL3BhdGgvdG8vV2ViS2l0QnVpbGQve2NvbmZpZ3Vy
YXRpb259LXtzaG9ydCBwbGF0Zm9ybX0uXG4iOwotCi0gICAgZnByaW50ZihzdGRlcnIsICIlc1xu
IiwgW2hlbHBUZXh0IFVURjhTdHJpbmddKTsKLX0KLQotTlNTdHJpbmcgKmdldFJlcXVpcmVkU3Ry
aW5nQXJndW1lbnQoTlNTdHJpbmcgKnBhcmFtZXRlcikKLXsKLSAgICBOU1VzZXJEZWZhdWx0cyAq
ZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdOwotICAgIE5T
U3RyaW5nICphcmd1bWVudCA9IFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6cGFyYW1ldGVyXTsKLQot
ICAgIGlmICghYXJndW1lbnQpIHsKLSAgICAgICAgTlNMb2coQCItJUAgaXMgcmVxdWlyZWQuIiwg
cGFyYW1ldGVyKTsKLSAgICAgICAgdXNhZ2UoKTsKLSAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUp
OwotICAgIH0KLSAgICByZXR1cm4gYXJndW1lbnQ7Ci19Ci0KLU5TQXJyYXkgKmdldER1bXBUb29s
QXJndW1lbnRzKCkKLXsKLSAgICBOU011dGFibGVBcnJheSAqZHVtcFRvb2xBcmd1bWVudHMgPSBb
W05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKLSAgICBOU0FycmF5ICpwcm9jZXNzQXJncyA9
IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gYXJndW1lbnRzXTsKLSAgICBCT09MIGFwcGVu
ZGluZyA9IE5POwotICAgIGZvciAoTlNTdHJpbmcgKmFyZyBpbiBwcm9jZXNzQXJncykgewotICAg
ICAgICBpZiAoW2FyZyBpc0VxdWFsVG9TdHJpbmc6QCItLSJdKSB7Ci0gICAgICAgICAgICBhcHBl
bmRpbmcgPSBZRVM7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBp
ZiAoYXBwZW5kaW5nKQotICAgICAgICAgICAgW2R1bXBUb29sQXJndW1lbnRzIGFkZE9iamVjdDph
cmddOwotICAgIH0KLSAgICByZXR1cm4gZHVtcFRvb2xBcmd1bWVudHM7Ci19Ci0KLXZvaWQgZmlu
aXNoKCkKLXsKLSAgICBbcmVsYXlDb250cm9sbGVyIGZpbmlzaF07Ci19Ci0KLXZvaWQgcmVjZWl2
ZWRTaWduYWwoaW50IHNpZ25hbCkKLXsKLSAgICBleGl0KEVYSVRfU1VDQ0VTUyk7Ci19Ci0KLWlu
dCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICogYXJndltdKQotewotICAgIEBhdXRvcmVsZWFz
ZXBvb2wgewotICAgICAgICBOU0FycmF5ICpoZWxwQXJndW1lbnRzID0gQFtAIi1oIiwgQCItLWhl
bHAiXTsKLSAgICAgICAgZm9yIChOU1N0cmluZyAqaGVscEFyZ3VtZW50IGluIGhlbHBBcmd1bWVu
dHMpIHsKLSAgICAgICAgICAgIGlmIChbW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBhcmd1
bWVudHNdIGluZGV4T2ZPYmplY3Q6aGVscEFyZ3VtZW50XSAhPSBOU05vdEZvdW5kKSB7Ci0gICAg
ICAgICAgICAgICAgdXNhZ2UoKTsKLSAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotI2lmIFVTRV9TSU1fU0VSVklDRV9DT05URVhU
Ci0gICAgICAgIE5TU3RyaW5nICpkZXZlbG9wZXJEaXJlY3RvcnkgPSBnZXRSZXF1aXJlZFN0cmlu
Z0FyZ3VtZW50KEAiZGV2ZWxvcGVyRGlyIik7Ci0jZW5kaWYKLSAgICAgICAgTlNVVUlEICp1ZGlk
ID0gW1tOU1VVSUQgYWxsb2NdIGluaXRXaXRoVVVJRFN0cmluZzpnZXRSZXF1aXJlZFN0cmluZ0Fy
Z3VtZW50KEAidWRpZCIpXTsKLSAgICAgICAgTlNTdHJpbmcgKmFwcFBhdGggPSBnZXRSZXF1aXJl
ZFN0cmluZ0FyZ3VtZW50KEAiYXBwIik7Ci0gICAgICAgIE5TU3RyaW5nICpwcm9kdWN0RGlyZWN0
b3J5ID0gZ2V0UmVxdWlyZWRTdHJpbmdBcmd1bWVudChAInByb2R1Y3REaXIiKTsKLSAgICAgICAg
TlNBcnJheSAqZHVtcFRvb2xBcmd1bWVudHMgPSBnZXREdW1wVG9vbEFyZ3VtZW50cygpOwotCi0j
aWYgVVNFX1NJTV9TRVJWSUNFX0NPTlRFWFQKLSAgICAgICAgTlNFcnJvciAqZXJyb3I7Ci0gICAg
ICAgIFNpbVNlcnZpY2VDb250ZXh0ICpzZXJ2aWNlQ29udGV4dCA9IFtTaW1TZXJ2aWNlQ29udGV4
dCBzaGFyZWRTZXJ2aWNlQ29udGV4dEZvckRldmVsb3BlckRpcjpkZXZlbG9wZXJEaXJlY3Rvcnkg
ZXJyb3I6JmVycm9yXTsKLSAgICAgICAgaWYgKCFzZXJ2aWNlQ29udGV4dCkgewotICAgICAgICAg
ICAgTlNMb2coQCJEZXZpY2UgY29udGV4dCBjb3VsZG4ndCBiZSBmb3VuZDogJUAiLCBlcnJvcik7
Ci0gICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgIH0KLSAgICAgICAgU2lt
RGV2aWNlU2V0ICpkZXZpY2VTZXQgPSBbc2VydmljZUNvbnRleHQgZGVmYXVsdERldmljZVNldFdp
dGhFcnJvcjpuaWxdOwotICAgICAgICBpZiAoIWRldmljZVNldCkgewotICAgICAgICAgICAgTlNM
b2coQCJEZWZhdWx0IGRldmljZSBzZXQgY291bGRuJ3QgYmUgZm91bmQ6ICVAIiwgZXJyb3IpOwot
ICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0gICAgICAgIFNpbURl
dmljZSAqZGV2aWNlID0gW2RldmljZVNldC5kZXZpY2VzQnlVRElEIG9iamVjdEZvcktleTp1ZGlk
XTsKLSNlbHNlCi0gICAgICAgIFNpbURldmljZSAqZGV2aWNlID0gW1NpbURldmljZVNldC5kZWZh
dWx0U2V0LmRldmljZXNCeVVESUQgb2JqZWN0Rm9yS2V5OnVkaWRdOwotI2VuZGlmCi0gICAgICAg
IGlmICghZGV2aWNlKSB7Ci0gICAgICAgICAgICBOU0xvZyhAIkRldmljZSAlQCBjb3VsZG4ndCBi
ZSBmb3VuZCIsIHVkaWQpOwotICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcmVsYXlDb250cm9sbGVyID0gW1tMVFJlbGF5Q29udHJvbGxlciBhbGxv
Y10gaW5pdFdpdGhEZXZpY2U6ZGV2aWNlIHByb2R1Y3REaXI6cHJvZHVjdERpcmVjdG9yeSBhcHBQ
YXRoOmFwcFBhdGggZGV2aWNlVURJRDp1ZGlkIGR1bXBUb29sQXJndW1lbnRzOmR1bXBUb29sQXJn
dW1lbnRzXTsKLSAgICAgICAgW3JlbGF5Q29udHJvbGxlciBzdGFydF07Ci0KLSAgICAgICAgYXRl
eGl0KGZpbmlzaCk7Ci0gICAgICAgIHNpZ25hbChTSUdJTlQsIHJlY2VpdmVkU2lnbmFsKTsKLSAg
ICAgICAgc2lnbmFsKFNJR1RFUk0sIHJlY2VpdmVkU2lnbmFsKTsKLQotICAgICAgICBbW05TUnVu
TG9vcCBtYWluUnVuTG9vcF0gcnVuXTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19CkluZGV4OiBU
b29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5Lnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxh
eS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTAyNzQpCisrKyBUb29scy9M
YXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KG5vbmV4aXN0ZW50KQpAQCAtMSwyMDIgKzAsMCBAQAotLy8gISQqVVRGOCokIQotewotCWFyY2hp
dmVWZXJzaW9uID0gMTsKLQljbGFzc2VzID0gewotCX07Ci0Jb2JqZWN0VmVyc2lvbiA9IDQ2Owot
CW9iamVjdHMgPSB7Ci0KLS8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCi0JCTJFOEQz
RUY4MTk4ODFENDMwMDRGNkNDMiAvKiBtYWluLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRThEM0VGNzE5ODgxRDQzMDA0RjZDQzIgLyogbWFpbi5tICov
OyB9OwotCQkyRThEM0YwMjE5ODgxRkQwMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkubSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOEQzRjAxMTk4ODFGRDAw
MDRGNkNDMiAvKiBMVFBpcGVSZWxheS5tICovOyB9OwotCQkyRThEM0YwNjE5ODgyNDA2MDA0RjZD
QzIgLyogTFRSZWxheUNvbnRyb2xsZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJFOEQzRjA1MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJv
bGxlci5tICovOyB9OwotLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCi0KLS8qIEJlZ2lu
IFBCWENvcHlGaWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCQkyRThEM0VGMjE5ODgxRDQzMDA0
RjZDQzIgLyogQ29weUZpbGVzICovID0gewotCQkJaXNhID0gUEJYQ29weUZpbGVzQnVpbGRQaGFz
ZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlkc3RQYXRoID0gL3Vzci9z
aGFyZS9tYW4vbWFuMS87Ci0JCQlkc3RTdWJmb2xkZXJTcGVjID0gMDsKLQkJCWZpbGVzID0gKAot
CQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAxOwotCQl9Owot
LyogRW5kIFBCWENvcHlGaWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhG
aWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjQxOTg4MUQ0MzAwNEY2Q0MyIC8qIExh
eW91dFRlc3RSZWxheSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVU
eXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBw
YXRoID0gTGF5b3V0VGVzdFJlbGF5OyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9
OwotCQkyRThEM0VGNzE5ODgxRDQzMDA0RjZDQzIgLyogbWFpbi5tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGgg
PSBtYWluLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOEQzRUZFMTk4ODFFMTMw
MDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBuYW1lID0gRGVidWdSZWxl
YXNlLnhjY29uZmlnOyBwYXRoID0gQ29uZmlndXJhdGlvbnMvRGVidWdSZWxlYXNlLnhjY29uZmln
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0VGRjE5ODgxRTI1MDA0RjZDQzIg
LyogQmFzZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQueGNjb25maWc7IG5hbWUgPSBCYXNlLnhjY29uZmlnOyBwYXRoID0gQ29u
ZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MkU4RDNGMDAxOTg4MUYyOTAwNEY2Q0MyIC8qIExUUmVsYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTFRS
ZWxheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0YwMTE5ODgxRkQwMDA0
RjZDQzIgLyogTFRQaXBlUmVsYXkubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRo
ID0gTFRQaXBlUmVsYXkubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDMx
OTg4MUZFMjAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExUUGlwZVJl
bGF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOEQzRjA0MTk4ODI0MDYwMDRG
NkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBMVFJlbGF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQky
RThEM0YwNTE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIubSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gTFRSZWxheUNvbnRyb2xsZXIubTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0UxRkJDMTUxQjI5MEU3OTAwMDEzNkY1IC8qIENvcmVTaW11
bGF0b3JTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29yZVNpbXVsYXRv
clNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotLyogRW5kIFBCWEZpbGVSZWZlcmVu
Y2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9u
ICovCi0JCTJFOEQzRUYxMTk4ODFENDMwMDRGNkNDMiAvKiBGcmFtZXdvcmtzICovID0gewotCQkJ
aXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3
NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7Ci0JCX07Ci0vKiBFbmQgUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2Vj
dGlvbiAqLwotCi0vKiBCZWdpbiBQQlhHcm91cCBzZWN0aW9uICovCi0JCTJFOEQzRUVCMTk4ODFE
NDMwMDRGNkNDMiA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJ
MkU4RDNFRkYxOTg4MUUyNTAwNEY2Q0MyIC8qIEJhc2UueGNjb25maWcgKi8sCi0JCQkJMkU4RDNF
RkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLywKLQkJCQkyRThE
M0VGNjE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovLAotCQkJCTJFOEQzRUY1
MTk4ODFENDMwMDRGNkNDMiAvKiBQcm9kdWN0cyAqLywKLQkJCSk7Ci0JCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwotCQl9OwotCQkyRThEM0VGNTE5ODgxRDQzMDA0RjZDQzIgLyogUHJvZHVjdHMg
Ki8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTJFOEQzRUY0
MTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8sCi0JCQkpOwotCQkJbmFtZSA9
IFByb2R1Y3RzOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJMkU4RDNFRjYx
OTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLyA9IHsKLQkJCWlzYSA9IFBCWEdy
b3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMkU4RDNFRjcxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1h
aW4ubSAqLywKLQkJCQlDRTFGQkMxNTFCMjkwRTc5MDAwMTM2RjUgLyogQ29yZVNpbXVsYXRvclNQ
SS5oICovLAotCQkJCTJFOEQzRjAwMTk4ODFGMjkwMDRGNkNDMiAvKiBMVFJlbGF5LmggKi8sCi0J
CQkJMkU4RDNGMDExOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lm0gKi8sCi0JCQkJMkU4
RDNGMDMxOTg4MUZFMjAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5LmggKi8sCi0JCQkJMkU4RDNGMDQx
OTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLmggKi8sCi0JCQkJMkU4RDNGMDUx
OTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLm0gKi8sCi0JCQkpOwotCQkJcGF0
aCA9IExheW91dFRlc3RSZWxheTsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0v
KiBFbmQgUEJYR3JvdXAgc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhOYXRpdmVUYXJnZXQgc2Vj
dGlvbiAqLwotCQkyRThEM0VGMzE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICov
ID0gewotCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwotCQkJYnVpbGRDb25maWd1cmF0aW9uTGlz
dCA9IDJFOEQzRUZCMTk4ODFENDMwMDRGNkNDMiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWE5hdGl2ZVRhcmdldCAiTGF5b3V0VGVzdFJlbGF5IiAqLzsKLQkJCWJ1aWxkUGhhc2Vz
ID0gKAotCQkJCTJFOEQzRUYwMTk4ODFENDMwMDRGNkNDMiAvKiBTb3VyY2VzICovLAotCQkJCTJF
OEQzRUYxMTk4ODFENDMwMDRGNkNDMiAvKiBGcmFtZXdvcmtzICovLAotCQkJCTJFOEQzRUYyMTk4
ODFENDMwMDRGNkNDMiAvKiBDb3B5RmlsZXMgKi8sCi0JCQkpOwotCQkJYnVpbGRSdWxlcyA9ICgK
LQkJCSk7Ci0JCQlkZXBlbmRlbmNpZXMgPSAoCi0JCQkpOwotCQkJbmFtZSA9IExheW91dFRlc3RS
ZWxheTsKLQkJCXByb2R1Y3ROYW1lID0gTGF5b3V0VGVzdFJlbGF5OwotCQkJcHJvZHVjdFJlZmVy
ZW5jZSA9IDJFOEQzRUY0MTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi87Ci0J
CQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLnRvb2wiOwotCQl9OwotLyog
RW5kIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWFByb2plY3Qgc2Vj
dGlvbiAqLwotCQkyRThEM0VFQzE5ODgxRDQzMDA0RjZDQzIgLyogUHJvamVjdCBvYmplY3QgKi8g
PSB7Ci0JCQlpc2EgPSBQQlhQcm9qZWN0OwotCQkJYXR0cmlidXRlcyA9IHsKLQkJCQlMYXN0VXBn
cmFkZUNoZWNrID0gMDYwMDsKLQkJCQlPUkdBTklaQVRJT05OQU1FID0gIkFwcGxlLCBJbmMuIjsK
LQkJCQlUYXJnZXRBdHRyaWJ1dGVzID0gewotCQkJCQkyRThEM0VGMzE5ODgxRDQzMDA0RjZDQzIg
PSB7Ci0JCQkJCQlDcmVhdGVkT25Ub29sc1ZlcnNpb24gPSA2LjA7Ci0JCQkJCX07Ci0JCQkJfTsK
LQkJCX07Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMkU4RDNFRUYxOTg4MUQ0MzAwNEY2
Q0MyIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiTGF5b3V0VGVz
dFJlbGF5IiAqLzsKLQkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDMuMiI7Ci0JCQlk
ZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7Ci0JCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0g
MDsKLQkJCWtub3duUmVnaW9ucyA9ICgKLQkJCQllbiwKLQkJCSk7Ci0JCQltYWluR3JvdXAgPSAy
RThEM0VFQjE5ODgxRDQzMDA0RjZDQzI7Ci0JCQlwcm9kdWN0UmVmR3JvdXAgPSAyRThEM0VGNTE5
ODgxRDQzMDA0RjZDQzIgLyogUHJvZHVjdHMgKi87Ci0JCQlwcm9qZWN0RGlyUGF0aCA9ICIiOwot
CQkJcHJvamVjdFJvb3QgPSAiIjsKLQkJCXRhcmdldHMgPSAoCi0JCQkJMkU4RDNFRjMxOTg4MUQ0
MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLywKLQkJCSk7Ci0JCX07Ci0vKiBFbmQgUEJY
UHJvamVjdCBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rp
b24gKi8KLQkJMkU4RDNFRjAxOTg4MUQ0MzAwNEY2Q0MyIC8qIFNvdXJjZXMgKi8gPSB7Ci0JCQlp
c2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2
NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCQkyRThEM0YwNjE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxh
eUNvbnRyb2xsZXIubSBpbiBTb3VyY2VzICovLAotCQkJCTJFOEQzRUY4MTk4ODFENDMwMDRGNkND
MiAvKiBtYWluLm0gaW4gU291cmNlcyAqLywKLQkJCQkyRThEM0YwMjE5ODgxRkQwMDA0RjZDQzIg
LyogTFRQaXBlUmVsYXkubSBpbiBTb3VyY2VzICovLAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9OwotLyogRW5kIFBCWFNvdXJjZXNCdWlsZFBo
YXNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gWENCdWlsZENvbmZpZ3VyYXRpb24gc2VjdGlvbiAq
LwotCQkyRThEM0VGOTE5ODgxRDQzMDA0RjZDQzIgLyogRGVidWcgKi8gPSB7Ci0JCQlpc2EgPSBY
Q0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gMkU4
RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLzsKLQkJCWJ1
aWxkU2V0dGluZ3MgPSB7Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVnOwotCQl9OwotCQkyRThEM0VG
QTE5ODgxRDQzMDA0RjZDQzIgLyogUmVsZWFzZSAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25m
aWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAyRThEM0VGRTE5ODgx
RTEzMDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5n
cyA9IHsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJMkU4RDNFRkMxOTg4MUQ0
MzAwNEY2Q0MyIC8qIERlYnVnICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247
Ci0JCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDJFOEQzRUZFMTk4ODFFMTMwMDRGNkND
MiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi87Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJ
CVBST0RVQ1RfTkFNRSA9ICIkKFRBUkdFVF9OQU1FKSI7Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVn
OwotCQl9OwotCQkyRThEM0VGRDE5ODgxRDQzMDA0RjZDQzIgLyogUmVsZWFzZSAqLyA9IHsKLQkJ
CWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVu
Y2UgPSAyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICov
OwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlQUk9EVUNUX05BTUUgPSAiJChUQVJHRVRfTkFN
RSkiOwotCQkJfTsKLQkJCW5hbWUgPSBSZWxlYXNlOwotCQl9OwotLyogRW5kIFhDQnVpbGRDb25m
aWd1cmF0aW9uIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gWENDb25maWd1cmF0aW9uTGlzdCBzZWN0
aW9uICovCi0JCTJFOEQzRUVGMTk4ODFENDMwMDRGNkNDMiAvKiBCdWlsZCBjb25maWd1cmF0aW9u
IGxpc3QgZm9yIFBCWFByb2plY3QgIkxheW91dFRlc3RSZWxheSIgKi8gPSB7Ci0JCQlpc2EgPSBY
Q0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKLQkJCQkyRThE
M0VGOTE5ODgxRDQzMDA0RjZDQzIgLyogRGVidWcgKi8sCi0JCQkJMkU4RDNFRkExOTg4MUQ0MzAw
NEY2Q0MyIC8qIFJlbGVhc2UgKi8sCi0JCQkpOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zp
c2libGUgPSAwOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUmVsZWFzZTsKLQkJfTsK
LQkJMkU4RDNFRkIxOTg4MUQ0MzAwNEY2Q0MyIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBm
b3IgUEJYTmF0aXZlVGFyZ2V0ICJMYXlvdXRUZXN0UmVsYXkiICovID0gewotCQkJaXNhID0gWEND
b25maWd1cmF0aW9uTGlzdDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCi0JCQkJMkU4RDNF
RkMxOTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICovLAotCQkJCTJFOEQzRUZEMTk4ODFENDMwMDRG
NkNDMiAvKiBSZWxlYXNlICovLAotCQkJKTsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNp
YmxlID0gMDsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJlbGVhc2U7Ci0JCX07Ci0v
KiBFbmQgWENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCi0JfTsKLQlyb290T2JqZWN0ID0g
MkU4RDNFRUMxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2plY3Qgb2JqZWN0ICovOwotfQpJbmRleDog
VG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2oJKHJl
dmlzaW9uIDIxMDI3NCkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXku
eGNvZGVwcm9qCShub25leGlzdGVudCkKClByb3BlcnR5IGNoYW5nZXMgb246IFRvb2xzL0xheW91
dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVwcm9qCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDog
c3ZuOmlnbm9yZQojIyAtMSwyICswLDAgIyMKLXByb2plY3QueGN3b3Jrc3BhY2UKLXhjdXNlcmRh
dGEKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9NYWtlZmlsZQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9MYXlvdXRUZXN0UmVsYXkvTWFrZWZpbGUJKHJldmlzaW9uIDIxMDI3NCkKKysrIFRvb2xz
L0xheW91dFRlc3RSZWxheS9NYWtlZmlsZQkobm9uZXhpc3RlbnQpCkBAIC0xLDYgKzAsMCBAQAot
U0NSSVBUU19QQVRIID0gLi4vU2NyaXB0cwotCi1PVkVSUklERV9BUkNIUyA9IGRlZmF1bHQKLU9W
RVJSSURFX1NES1JPT1QgPSBkZWZhdWx0Ci0KLWluY2x1ZGUgLi4vLi4vTWFrZWZpbGUuc2hhcmVk
CkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZp
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMvQmFz
ZS54Y2NvbmZpZwkocmV2aXNpb24gMjEwMjc0KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0Nv
bmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcJKG5vbmV4aXN0ZW50KQpAQCAtMSw2OCArMCwwIEBA
Ci0vLyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0vLyBhcmUgbWV0OgotLy8gMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LS8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLS8vIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0vLyAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotLy8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS8vIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotLy8gUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLS8vIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotLy8gRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotLy8gUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0vLyBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0vLyBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgIi4uLy4uLy4u
Ly4uL0ludGVybmFsL0NvbmZpZ3VyYXRpb25zL0hhdmVJbnRlcm5hbFNESy54Y2NvbmZpZyIKLQot
VVNFX0lOVEVSTkFMX1NESyA9ICQoVVNFX0lOVEVSTkFMX1NES18kKENPTkZJR1VSQVRJT04pKTsK
LVVTRV9JTlRFUk5BTF9TREtfUHJvZHVjdGlvbiA9IFlFUzsKLVVTRV9JTlRFUk5BTF9TREtfRGVi
dWcgPSAkKEhBVkVfSU5URVJOQUxfU0RLKTsKLVVTRV9JTlRFUk5BTF9TREtfUmVsZWFzZSA9ICQo
SEFWRV9JTlRFUk5BTF9TREspOwotCi1DTEFOR19DWFhfTEFOR1VBR0VfU1RBTkRBUkQgPSBnbnUr
KzB4OwotQ0xBTkdfRU5BQkxFX09CSkNfQVJDID0gWUVTOwotQ0xBTkdfV0FSTl9DWFgwWF9FWFRF
TlNJT05TID0gTk87Ci1IRUFERVJfU0VBUkNIX1BBVEhTID0gJChCVUlMVF9QUk9EVUNUU19ESVIp
L3Vzci9sb2NhbC9pbmNsdWRlICQoV0VCQ09SRV9QUklWQVRFX0hFQURFUlNfRElSKS9Gb3J3YXJk
aW5nSGVhZGVycyAkKFNSQ1JPT1QpLy4uLy4uL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UgJChO
RVhUX1JPT1QpL3Vzci9sb2NhbC9pbmNsdWRlL1dlYkNvcmVUZXN0U3VwcG9ydDsKLUdDQ19QUkVQ
Uk9DRVNTT1JfREVGSU5JVElPTlMgPSAkKERFQlVHX0RFRklORVMpIEVOQUJMRV9EQVNIQk9BUkRf
U1VQUE9SVDsKLURFQlVHX0lORk9STUFUSU9OX0ZPUk1BVCA9IGR3YXJmLXdpdGgtZHN5bTsKLVBS
RUJJTkRJTkcgPSBOTwotR0NDX0NfTEFOR1VBR0VfU1RBTkRBUkQgPSBnbnU5OQotR0NDX0VOQUJM
RV9DUFBfRVhDRVBUSU9OUyA9IE5POwotR0NDX0VOQUJMRV9DUFBfUlRUSSA9IE5POwotR0NDX1BS
RUNPTVBJTEVfUFJFRklYX0hFQURFUiA9IFlFUwotR0NDX1RSRUFUX1dBUk5JTkdTX0FTX0VSUk9S
UyA9IFlFUwotR0NDX1ZFUlNJT04gPSBjb20uYXBwbGUuY29tcGlsZXJzLmxsdm0uY2xhbmcuMV8w
OwotR0NDX1dBUk5fQUJPVVRfREVQUkVDQVRFRF9GVU5DVElPTlMgPSBOTwotR0NDX1dBUk5fVU5V
U0VEX0ZVTkNUSU9OID0gWUVTCi1HQ0NfV0FSTl9VTlVTRURfVkFSSUFCTEUgPSBZRVMKLUdDQ19X
QVJOXzY0X1RPXzMyX0JJVF9DT05WRVJTSU9OW2FyY2g9eDg2XzY0XSA9IE5POwotV0FSTklOR19D
RkxBR1MgPSAtV2FsbCAtVyAtV25vLXVudXNlZC1wYXJhbWV0ZXIgLVd1bmRlZgotCi1ERUJVR19E
RUZJTkVTX2RlYnVnID0gOwotREVCVUdfREVGSU5FU19ub3JtYWwgPSBOREVCVUc7Ci1ERUJVR19E
RUZJTkVTID0gJChERUJVR19ERUZJTkVTXyQoQ1VSUkVOVF9WQVJJQU5UKSk7Ci0KLVRBUkdFVF9N
QUNfT1NfWF9WRVJTSU9OX01BSk9SID0gJChUQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUiQo
TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUOnN1ZmZpeDppZGVudGlmaWVyKSk7Ci1UQVJHRVRfTUFD
X09TX1hfVkVSU0lPTl9NQUpPUl8xMCA9IDEwMTAwMDsKLVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9O
X01BSk9SXzExID0gMTAxMTAwOwotVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1JfMTIgPSAx
MDEyMDA7Ci1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUl8xMyA9IDEwMTMwMDsKLQotU0RL
Uk9PVCA9IG1hY29zeC5pbnRlcm5hbDsKLQotU1VQUE9SVEVEX1BMQVRGT1JNUyA9IG1hY29zeDsK
LQotVE9PTENIQUlOUyA9IGRlZmF1bHQ7Ci0KLU9USEVSX0NGTEFHUyA9ICQoQVNBTl9PVEhFUl9D
RkxBR1MpOwotT1RIRVJfQ1BMVVNQTFVTRkxBR1MgPSAkKEFTQU5fT1RIRVJfQ1BMVVNQTFVTRkxB
R1MpOwotT1RIRVJfTERGTEFHUyA9ICQoQVNBTl9PVEhFUl9MREZMQUdTKTsKSW5kZXg6IFRvb2xz
L0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25maWcKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0RlYnVnUmVs
ZWFzZS54Y2NvbmZpZwkocmV2aXNpb24gMjEwMjc0KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5
L0NvbmZpZ3VyYXRpb25zL0RlYnVnUmVsZWFzZS54Y2NvbmZpZwkobm9uZXhpc3RlbnQpCkBAIC0x
LDQyICswLDAgQEAKLS8vIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLS8vIGFyZSBtZXQ6Ci0v
LyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LS8vICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0vLyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotLy8gSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0v
LyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotLy8gQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0vLyBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0vLyBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLS8vIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLS8vIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW5jbHVk
ZSAiQmFzZS54Y2NvbmZpZyIKLQotQVJDSFMgPSAkKEFSQ0hTX1NUQU5EQVJEXzY0X0JJVCk7Ci0K
LVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SID0gJChNQUNfT1NfWF9WRVJTSU9OX01BSk9S
KTsKLQotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUID0gJChNQUNPU1hfREVQTE9ZTUVOVF9UQVJH
RVRfJChUQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUikpCi1NQUNPU1hfREVQTE9ZTUVOVF9U
QVJHRVRfMTAxMDAwID0gMTAuMTA7Ci1NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfMTAxMTAwID0g
MTAuMTE7Ci1NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfMTAxMjAwID0gMTAuMTI7Ci1NQUNPU1hf
REVQTE9ZTUVOVF9UQVJHRVRfMTAxMzAwID0gMTAuMTM7Ci0KLUZSQU1FV09SS19TRUFSQ0hfUEFU
SFMgPSAkKERFVkVMT1BFUl9ESVIpL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3M7Ci1MRF9SVU5Q
QVRIX1NFQVJDSF9QQVRIUyA9ICQoREVWRUxPUEVSX0RJUikvTGlicmFyeS9Qcml2YXRlRnJhbWV3
b3JrczsKLU9USEVSX0xERkxBR1MgPSAtZnJhbWV3b3JrIENvcmVTaW11bGF0b3IgLWZyYW1ld29y
ayBBcHBLaXQ7Ci0KLVNES1JPT1QgPSAkKFNES1JPT1RfbWFjb3N4XyQoVVNFX0lOVEVSTkFMX1NE
SykpOwotU0RLUk9PVF9tYWNvc3hfID0gbWFjb3N4OwotU0RLUk9PVF9tYWNvc3hfWUVTID0gbWFj
b3N4LmludGVybmFsOwpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxh
eS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRl
c3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjEwMjc0KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShub25leGlzdGVudCkKQEAgLTEsMjAyICswLDAgQEAKLS8v
ICEkKlVURjgqJCEKLXsKLQlhcmNoaXZlVmVyc2lvbiA9IDE7Ci0JY2xhc3NlcyA9IHsKLQl9Owot
CW9iamVjdFZlcnNpb24gPSA0NjsKLQlvYmplY3RzID0gewotCi0vKiBCZWdpbiBQQlhCdWlsZEZp
bGUgc2VjdGlvbiAqLwotCQkyRThEM0VGODE5ODgxRDQzMDA0RjZDQzIgLyogbWFpbi5tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU4RDNFRjcxOTg4MUQ0
MzAwNEY2Q0MyIC8qIG1haW4ubSAqLzsgfTsKLQkJMkU4RDNGMDIxOTg4MUZEMDAwNEY2Q0MyIC8q
IExUUGlwZVJlbGF5Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRThEM0YwMTE5ODgxRkQwMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkubSAqLzsgfTsKLQkJ
MkU4RDNGMDYxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLm0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRThEM0YwNTE5ODgyNDA2MDA0
RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIubSAqLzsgfTsKLS8qIEVuZCBQQlhCdWlsZEZpbGUg
c2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8K
LQkJMkU4RDNFRjIxOTg4MUQ0MzAwNEY2Q0MyIC8qIENvcHlGaWxlcyAqLyA9IHsKLQkJCWlzYSA9
IFBCWENvcHlGaWxlc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3
OwotCQkJZHN0UGF0aCA9IC91c3Ivc2hhcmUvbWFuL21hbjEvOwotCQkJZHN0U3ViZm9sZGVyU3Bl
YyA9IDA7Ci0JCQlmaWxlcyA9ICgKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMTsKLQkJfTsKLS8qIEVuZCBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rp
b24gKi8KLQotLyogQmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCi0JCTJFOEQzRUY0
MTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7
IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IExheW91dFRlc3RSZWxheTsgc291cmNlVHJlZSA9
IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJMkU4RDNFRjcxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1h
aW4ubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gbWFpbi5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2Nv
bmZpZzsgbmFtZSA9IERlYnVnUmVsZWFzZS54Y2NvbmZpZzsgcGF0aCA9IENvbmZpZ3VyYXRpb25z
L0RlYnVnUmVsZWFzZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4
RDNFRkYxOTg4MUUyNTAwNEY2Q0MyIC8qIEJhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBuYW1lID0gQmFz
ZS54Y2NvbmZpZzsgcGF0aCA9IENvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWc7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOEQzRjAwMTk4ODFGMjkwMDRGNkNDMiAvKiBMVFJlbGF5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IExUUmVsYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMkU4RDNGMDExOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lm0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IExUUGlwZVJlbGF5Lm07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTJFOEQzRjAzMTk4ODFGRTIwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBMVFBpcGVSZWxheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkyRThEM0YwNDE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTFRSZWxheUNvbnRyb2xsZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDUxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlD
b250cm9sbGVyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IExUUmVsYXlD
b250cm9sbGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNFMUZCQzE1MUIyOTBF
NzkwMDAxMzZGNSAvKiBDb3JlU2ltdWxhdG9yU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvcmVTaW11bGF0b3JTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LS8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYRnJhbWV3
b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCQkyRThEM0VGMTE5ODgxRDQzMDA0RjZDQzIgLyog
RnJhbWV3b3JrcyAqLyA9IHsKLQkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwotCQkJ
YnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9OwotLyogRW5kIFBCWEZy
YW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYR3JvdXAgc2VjdGlv
biAqLwotCQkyRThEM0VFQjE5ODgxRDQzMDA0RjZDQzIgPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsK
LQkJCWNoaWxkcmVuID0gKAotCQkJCTJFOEQzRUZGMTk4ODFFMjUwMDRGNkNDMiAvKiBCYXNlLnhj
Y29uZmlnICovLAotCQkJCTJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2Uu
eGNjb25maWcgKi8sCi0JCQkJMkU4RDNFRjYxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RS
ZWxheSAqLywKLQkJCQkyRThEM0VGNTE5ODgxRDQzMDA0RjZDQzIgLyogUHJvZHVjdHMgKi8sCi0J
CQkpOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJMkU4RDNFRjUxOTg4MUQ0
MzAwNEY2Q0MyIC8qIFByb2R1Y3RzICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGls
ZHJlbiA9ICgKLQkJCQkyRThEM0VGNDE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5
ICovLAotCQkJKTsKLQkJCW5hbWUgPSBQcm9kdWN0czsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7Ci0JCX07Ci0JCTJFOEQzRUY2MTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkg
Ki8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTJFOEQzRUY3
MTk4ODFENDMwMDRGNkNDMiAvKiBtYWluLm0gKi8sCi0JCQkJQ0UxRkJDMTUxQjI5MEU3OTAwMDEz
NkY1IC8qIENvcmVTaW11bGF0b3JTUEkuaCAqLywKLQkJCQkyRThEM0YwMDE5ODgxRjI5MDA0RjZD
QzIgLyogTFRSZWxheS5oICovLAotCQkJCTJFOEQzRjAxMTk4ODFGRDAwMDRGNkNDMiAvKiBMVFBp
cGVSZWxheS5tICovLAotCQkJCTJFOEQzRjAzMTk4ODFGRTIwMDRGNkNDMiAvKiBMVFBpcGVSZWxh
eS5oICovLAotCQkJCTJFOEQzRjA0MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxl
ci5oICovLAotCQkJCTJFOEQzRjA1MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxl
ci5tICovLAotCQkJKTsKLQkJCXBhdGggPSBMYXlvdXRUZXN0UmVsYXk7Ci0JCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwotCQl9OwotLyogRW5kIFBCWEdyb3VwIHNlY3Rpb24gKi8KLQotLyogQmVn
aW4gUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KLQkJMkU4RDNFRjMxOTg4MUQ0MzAwNEY2Q0My
IC8qIExheW91dFRlc3RSZWxheSAqLyA9IHsKLQkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKLQkJ
CWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAyRThEM0VGQjE5ODgxRDQzMDA0RjZDQzIgLyogQnVp
bGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIkxheW91dFRlc3RSZWxh
eSIgKi87Ci0JCQlidWlsZFBoYXNlcyA9ICgKLQkJCQkyRThEM0VGMDE5ODgxRDQzMDA0RjZDQzIg
LyogU291cmNlcyAqLywKLQkJCQkyRThEM0VGMTE5ODgxRDQzMDA0RjZDQzIgLyogRnJhbWV3b3Jr
cyAqLywKLQkJCQkyRThEM0VGMjE5ODgxRDQzMDA0RjZDQzIgLyogQ29weUZpbGVzICovLAotCQkJ
KTsKLQkJCWJ1aWxkUnVsZXMgPSAoCi0JCQkpOwotCQkJZGVwZW5kZW5jaWVzID0gKAotCQkJKTsK
LQkJCW5hbWUgPSBMYXlvdXRUZXN0UmVsYXk7Ci0JCQlwcm9kdWN0TmFtZSA9IExheW91dFRlc3RS
ZWxheTsKLQkJCXByb2R1Y3RSZWZlcmVuY2UgPSAyRThEM0VGNDE5ODgxRDQzMDA0RjZDQzIgLyog
TGF5b3V0VGVzdFJlbGF5ICovOwotCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3Qt
dHlwZS50b29sIjsKLQkJfTsKLS8qIEVuZCBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLwotCi0v
KiBCZWdpbiBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KLQkJMkU4RDNFRUMxOTg4MUQ0MzAwNEY2Q0My
IC8qIFByb2plY3Qgb2JqZWN0ICovID0gewotCQkJaXNhID0gUEJYUHJvamVjdDsKLQkJCWF0dHJp
YnV0ZXMgPSB7Ci0JCQkJTGFzdFVwZ3JhZGVDaGVjayA9IDA2MDA7Ci0JCQkJT1JHQU5JWkFUSU9O
TkFNRSA9ICJBcHBsZSwgSW5jLiI7Ci0JCQkJVGFyZ2V0QXR0cmlidXRlcyA9IHsKLQkJCQkJMkU4
RDNFRjMxOTg4MUQ0MzAwNEY2Q0MyID0gewotCQkJCQkJQ3JlYXRlZE9uVG9vbHNWZXJzaW9uID0g
Ni4wOwotCQkJCQl9OwotCQkJCX07Ci0JCQl9OwotCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9
IDJFOEQzRUVGMTk4ODFENDMwMDRGNkNDMiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9y
IFBCWFByb2plY3QgIkxheW91dFRlc3RSZWxheSIgKi87Ci0JCQljb21wYXRpYmlsaXR5VmVyc2lv
biA9ICJYY29kZSAzLjIiOwotCQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBFbmdsaXNoOwotCQkJaGFz
U2Nhbm5lZEZvckVuY29kaW5ncyA9IDA7Ci0JCQlrbm93blJlZ2lvbnMgPSAoCi0JCQkJZW4sCi0J
CQkpOwotCQkJbWFpbkdyb3VwID0gMkU4RDNFRUIxOTg4MUQ0MzAwNEY2Q0MyOwotCQkJcHJvZHVj
dFJlZkdyb3VwID0gMkU4RDNFRjUxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2R1Y3RzICovOwotCQkJ
cHJvamVjdERpclBhdGggPSAiIjsKLQkJCXByb2plY3RSb290ID0gIiI7Ci0JCQl0YXJnZXRzID0g
KAotCQkJCTJFOEQzRUYzMTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8sCi0J
CQkpOwotCQl9OwotLyogRW5kIFBCWFByb2plY3Qgc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhT
b3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0JCTJFOEQzRUYwMTk4ODFENDMwMDRGNkNDMiAv
KiBTb3VyY2VzICovID0gewotCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7Ci0JCQlidWls
ZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkJMkU4RDNGMDYxOTg4
MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLm0gaW4gU291cmNlcyAqLywKLQkJCQky
RThEM0VGODE5ODgxRDQzMDA0RjZDQzIgLyogbWFpbi5tIGluIFNvdXJjZXMgKi8sCi0JCQkJMkU4
RDNGMDIxOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lm0gaW4gU291cmNlcyAqLywKLQkJ
CSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKLS8q
IEVuZCBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFhDQnVpbGRD
b25maWd1cmF0aW9uIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjkxOTg4MUQ0MzAwNEY2Q0MyIC8qIERl
YnVnICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmln
dXJhdGlvblJlZmVyZW5jZSA9IDJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVh
c2UueGNjb25maWcgKi87Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJfTsKLQkJCW5hbWUgPSBE
ZWJ1ZzsKLQkJfTsKLQkJMkU4RDNFRkExOTg4MUQ0MzAwNEY2Q0MyIC8qIFJlbGVhc2UgKi8gPSB7
Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9uUmVm
ZXJlbmNlID0gMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZp
ZyAqLzsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQl9OwotCQkJbmFtZSA9IFJlbGVhc2U7Ci0J
CX07Ci0JCTJFOEQzRUZDMTk4ODFENDMwMDRGNkNDMiAvKiBEZWJ1ZyAqLyA9IHsKLQkJCWlzYSA9
IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAy
RThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovOwotCQkJ
YnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlQUk9EVUNUX05BTUUgPSAiJChUQVJHRVRfTkFNRSkiOwot
CQkJfTsKLQkJCW5hbWUgPSBEZWJ1ZzsKLQkJfTsKLQkJMkU4RDNFRkQxOTg4MUQ0MzAwNEY2Q0My
IC8qIFJlbGVhc2UgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJh
c2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERl
YnVnUmVsZWFzZS54Y2NvbmZpZyAqLzsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJUFJPRFVD
VF9OQU1FID0gIiQoVEFSR0VUX05BTUUpIjsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJ
fTsKLS8qIEVuZCBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFhD
Q29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLwotCQkyRThEM0VFRjE5ODgxRDQzMDA0RjZDQzIg
LyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJMYXlvdXRUZXN0UmVs
YXkiICovID0gewotCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKLQkJCWJ1aWxkQ29uZmln
dXJhdGlvbnMgPSAoCi0JCQkJMkU4RDNFRjkxOTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICovLAot
CQkJCTJFOEQzRUZBMTk4ODFENDMwMDRGNkNDMiAvKiBSZWxlYXNlICovLAotCQkJKTsKLQkJCWRl
ZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9u
TmFtZSA9IFJlbGVhc2U7Ci0JCX07Ci0JCTJFOEQzRUZCMTk4ODFENDMwMDRGNkNDMiAvKiBCdWls
ZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiTGF5b3V0VGVzdFJlbGF5
IiAqLyA9IHsKLQkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7Ci0JCQlidWlsZENvbmZpZ3Vy
YXRpb25zID0gKAotCQkJCTJFOEQzRUZDMTk4ODFENDMwMDRGNkNDMiAvKiBEZWJ1ZyAqLywKLQkJ
CQkyRThEM0VGRDE5ODgxRDQzMDA0RjZDQzIgLyogUmVsZWFzZSAqLywKLQkJCSk7Ci0JCQlkZWZh
dWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5h
bWUgPSBSZWxlYXNlOwotCQl9OwotLyogRW5kIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAq
LwotCX07Ci0Jcm9vdE9iamVjdCA9IDJFOEQzRUVDMTk4ODFENDMwMDRGNkNDMiAvKiBQcm9qZWN0
IG9iamVjdCAqLzsKLX0KSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVs
YXkvQ29yZVNpbXVsYXRvclNQSS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxh
eS9MYXlvdXRUZXN0UmVsYXkvQ29yZVNpbXVsYXRvclNQSS5oCShyZXZpc2lvbiAyMTAyNzQpCisr
KyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0NvcmVTaW11bGF0b3JTUEku
aAkobm9uZXhpc3RlbnQpCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYg
X19oYXNfaW5jbHVkZSg8Q29yZVNpbXVsYXRvci9Db3JlU2ltdWxhdG9yLmg+KQotCi0vKiBGSVhN
RTogUmVtb3ZlIHRoZSBiZWxvdyAjZGVmaW5lIG9uY2Ugd2UgcmVxdWlyZSBYY29kZSA3LjMgd2l0
aCBpT1MgOS4zIFNESyBvciBuZXdlci4gKi8KLSNkZWZpbmUgX19jb3Jlc2ltX3VuYXZhaWxhYmxl
X21zZyhtc2cpCi0jaW1wb3J0IDxDb3JlU2ltdWxhdG9yL0NvcmVTaW11bGF0b3IuaD4KLQotLyog
RklYTUU6IEFsd2F5cyB1c2UgU2ltU2VydmljZUNvbnRleHQgb25jZSB3ZSByZXF1aXJlIFhjb2Rl
IDcuMyB3aXRoIGlPUyA5LjMgU0RLIG9yIG5ld2VyLiAqLwotI2RlZmluZSBVU0VfU0lNX1NFUlZJ
Q0VfQ09OVEVYVCBkZWZpbmVkKENPUkVTSU1fQVBJX01BWF9BTExPV0VEKQotCi0jZWxzZQotCi0j
aW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2RlZmluZSBVU0VfU0lNX1NFUlZJ
Q0VfQ09OVEVYVCAxCi0KLSNkZWZpbmUga1NpbURldmljZUxhdW5jaEFwcGxpY2F0aW9uQXJndW1l
bnRzIEAiYXJndW1lbnRzIgotI2RlZmluZSBrU2ltRGV2aWNlTGF1bmNoQXBwbGljYXRpb25FbnZp
cm9ubWVudCBAImVudmlyb25tZW50IgotCi1AaW50ZXJmYWNlIFNpbURldmljZSA6IE5TT2JqZWN0
Ci0tIChCT09MKWluc3RhbGxBcHBsaWNhdGlvbjooTlNVUkwgKilpbnN0YWxsVVJMIHdpdGhPcHRp
b25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zIGVycm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFz
aW5nICopZXJyb3I7Ci0tIChwaWRfdClsYXVuY2hBcHBsaWNhdGlvbldpdGhJRDooTlNTdHJpbmcg
KilidW5kbGVJRCBvcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zIGVycm9yOihOU0Vycm9y
ICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgU2ltRGV2aWNl
U2V0IDogTlNPYmplY3QKLUBwcm9wZXJ0eSAocmVhZG9ubHksIGNvcHkpIE5TRGljdGlvbmFyeSAq
ZGV2aWNlc0J5VURJRDsKLUBlbmQKLQotQGludGVyZmFjZSBTaW1TZXJ2aWNlQ29udGV4dCA6IE5T
T2JqZWN0Ci0rKFNpbVNlcnZpY2VDb250ZXh0ICopc2hhcmVkU2VydmljZUNvbnRleHRGb3JEZXZl
bG9wZXJEaXI6KE5TU3RyaW5nICopZGV2ZWxvcGVyRGlyIGVycm9yOihOU0Vycm9yICogX19hdXRv
cmVsZWFzaW5nICopZXJyb3I7Ci0tKFNpbURldmljZVNldCAqKWRlZmF1bHREZXZpY2VTZXRXaXRo
RXJyb3I6KE5TRXJyb3IgKiBfX2F1dG9yZWxlYXNpbmcgKillcnJvcjsKLUBlbmQKLQotI2VuZGlm
CkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9M
VFBpcGVSZWxheS5oCShyZXZpc2lvbiAyMTAyNzQpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkv
TGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwzNiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBMVFBpcGVSZWxheV9oCi0jZGVmaW5lIExUUGlwZVJl
bGF5X2gKLQotI2ltcG9ydCAiTFRSZWxheS5oIgotCi1AaW50ZXJmYWNlIExUUGlwZVJlbGF5IDog
TlNPYmplY3QgPExUUmVsYXk+Ci1AcHJvcGVydHkgKHdlYWspIGlkPExUUmVsYXlEZWxlZ2F0ZT4g
cmVsYXlEZWxlZ2F0ZTsKLS0gKGlkKWluaXRXaXRoUHJlZml4OihOU1N0cmluZyAqKXByZWZpeDsK
LUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJl
bGF5L0xUUGlwZVJlbGF5Lm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xh
eW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5tCShyZXZpc2lvbiAyMTAyNzQpCisrKyBUb29scy9M
YXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0JKG5vbmV4aXN0ZW50
KQpAQCAtMSwxNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgIkxUUGlwZVJlbGF5Lmgi
Ci0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotI2luY2x1ZGUgPHN5cy9zdGF0
Lmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLUBpbnRlcmZhY2UgTFRQaXBlUmVsYXkgKCkK
LUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKmZpZm9QcmVmaXg7Ci1AcHJv
cGVydHkgKHN0cm9uZykgTlNPdXRwdXRTdHJlYW0gKnN0YW5kYXJkSW5wdXRQaXBlOwotQHByb3Bl
cnR5IChzdHJvbmcpIE5TSW5wdXRTdHJlYW0gKnN0YW5kYXJkT3V0cHV0UGlwZTsKLUBwcm9wZXJ0
eSAoc3Ryb25nKSBOU0lucHV0U3RyZWFtICpzdGFuZGFyZEVycm9yUGlwZTsKLQotLSAodm9pZClj
cmVhdGVGSUZPczsKLS0gKHZvaWQpZGVzdHJveUZJRk9zOwotQGVuZAotCi1AaW1wbGVtZW50YXRp
b24gTFRQaXBlUmVsYXkKLQotLSAoTlNTdHJpbmcgKilpblBpcGVQYXRoCi17Ci0gICAgcmV0dXJu
IFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9JTiJdOwotfQotCi0tIChO
U1N0cmluZyAqKW91dFBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdC
eUFwcGVuZGluZ1N0cmluZzpAIl9PVVQiXTsKLX0KLQotLSAoTlNTdHJpbmcgKillcnJvclBpcGVQ
YXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpA
Il9FUlJPUiJdOwotfQotCi0tIChOU091dHB1dFN0cmVhbSAqKSBvdXRwdXRTdHJlYW0KLXsKLSAg
ICByZXR1cm4gX3N0YW5kYXJkSW5wdXRQaXBlOwotfQotCi0tIChpZClpbml0V2l0aFByZWZpeDoo
TlNTdHJpbmcgKilwcmVmaXgKLXsKLSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKSB7Ci0g
ICAgICAgIF9maWZvUHJlZml4ID0gcHJlZml4OwotICAgICAgICBbc2VsZiBkZXN0cm95RklGT3Nd
OwotICAgIH0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXR1cAotewotICAgIFtz
ZWxmIGRlc3Ryb3lGSUZPc107Ci0gICAgW3NlbGYgY3JlYXRlRklGT3NdOwotfQotCi0tICh2b2lk
KXRlYXJEb3duCi17Ci0gICAgW3NlbGYgZGVzdHJveUZJRk9zXTsKLX0KLQotLSh2b2lkKSBjb25u
ZWN0Ci17Ci0gICAgX3N0YW5kYXJkSW5wdXRQaXBlID0gW05TT3V0cHV0U3RyZWFtIG91dHB1dFN0
cmVhbVRvRmlsZUF0UGF0aDpbc2VsZiBpblBpcGVQYXRoXSBhcHBlbmQ6WUVTXTsKLSAgICBfc3Rh
bmRhcmRPdXRwdXRQaXBlID0gW05TSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW1XaXRoRmlsZUF0UGF0
aDpbc2VsZiBvdXRQaXBlUGF0aF1dOwotICAgIF9zdGFuZGFyZEVycm9yUGlwZSA9IFtOU0lucHV0
U3RyZWFtIGlucHV0U3RyZWFtV2l0aEZpbGVBdFBhdGg6W3NlbGYgZXJyb3JQaXBlUGF0aF1dOwot
Ci0gICAgW1tzZWxmIHN0YW5kYXJkSW5wdXRQaXBlXSBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICBb
W3NlbGYgc3RhbmRhcmRPdXRwdXRQaXBlXSBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICBbW3NlbGYg
c3RhbmRhcmRFcnJvclBpcGVdIHNldERlbGVnYXRlOnNlbGZdOwotCi0gICAgW1tzZWxmIHN0YW5k
YXJkT3V0cHV0UGlwZV0gc2NoZWR1bGVJblJ1bkxvb3A6W05TUnVuTG9vcCBtYWluUnVuTG9vcF0g
Zm9yTW9kZTpOU0RlZmF1bHRSdW5Mb29wTW9kZV07Ci0gICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JQ
aXBlXSBzY2hlZHVsZUluUnVuTG9vcDpbTlNSdW5Mb29wIG1haW5SdW5Mb29wXSBmb3JNb2RlOk5T
RGVmYXVsdFJ1bkxvb3BNb2RlXTsKLQotICAgIFtbc2VsZiBzdGFuZGFyZElucHV0UGlwZV0gb3Bl
bl07Ci0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gb3Blbl07Ci0gICAgW1tzZWxmIHN0
YW5kYXJkRXJyb3JQaXBlXSBvcGVuXTsKLQotICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRD
b25uZWN0XTsKLX0KLQotLSAodm9pZClkaXNjb25uZWN0Ci17Ci0gICAgW1tzZWxmIHN0YW5kYXJk
T3V0cHV0UGlwZV0gY2xvc2VdOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yUGlwZV0gY2xvc2Vd
OwotICAgIFtbc2VsZiBzdGFuZGFyZElucHV0UGlwZV0gY2xvc2VdOwotICAgIFtbc2VsZiByZWxh
eURlbGVnYXRlXSBkaWREaXNjb25uZWN0XTsKLX0KLQotLSAodm9pZCljcmVhdGVGSUZPcwotewot
ICAgIG1rZmlmbyhbW3NlbGYgaW5QaXBlUGF0aF0gVVRGOFN0cmluZ10sIDA2NjYpOwotICAgIG1r
ZmlmbyhbW3NlbGYgb3V0UGlwZVBhdGhdIFVURjhTdHJpbmddLCAwNjY2KTsKLSAgICBta2ZpZm8o
W1tzZWxmIGVycm9yUGlwZVBhdGhdIFVURjhTdHJpbmddLCAwNjY2KTsKLX0KLQotLSAodm9pZClk
ZXN0cm95RklGT3MKLXsKLSAgICB1bmxpbmsoW1tzZWxmIGluUGlwZVBhdGhdIFVURjhTdHJpbmdd
KTsKLSAgICB1bmxpbmsoW1tzZWxmIG91dFBpcGVQYXRoXSBVVEY4U3RyaW5nXSk7Ci0gICAgdW5s
aW5rKFtbc2VsZiBlcnJvclBpcGVQYXRoXSBVVEY4U3RyaW5nXSk7Ci19Ci0KLS0gKHZvaWQpIHJl
bGF5U3RyZWFtOihOU0lucHV0U3RyZWFtICopc3RyZWFtCi17Ci0gICAgdWludDhfdCBieXRlc1sx
MDI0XTsKLSAgICBOU0ludGVnZXIgYnl0ZXNSZWFkID0gW3N0cmVhbSByZWFkOmJ5dGVzIG1heExl
bmd0aDoxMDI0XTsKLSAgICBOU0RhdGEgKmRhdGEgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6Ynl0
ZXMgbGVuZ3RoOmJ5dGVzUmVhZF07Ci0KLSAgICBpZiAoc3RyZWFtID09IFtzZWxmIHN0YW5kYXJk
T3V0cHV0UGlwZV0pCi0gICAgICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRSZWNlaXZlU3Rk
b3V0RGF0YTpkYXRhXTsKLSAgICBlbHNlCi0gICAgICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBk
aWRSZWNlaXZlU3RkZXJyRGF0YTpkYXRhXTsKLX0KLQotLSAodm9pZClzdHJlYW06KE5TU3RyZWFt
ICopYVN0cmVhbSBoYW5kbGVFdmVudDooTlNTdHJlYW1FdmVudClldmVudENvZGUKLXsKLSAgICBz
d2l0Y2ggKGV2ZW50Q29kZSkgewotICAgIGNhc2UgTlNTdHJlYW1FdmVudE5vbmU6Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgTlNTdHJlYW1FdmVudEhhc0J5dGVzQXZhaWxhYmxlOgotICAgICAg
ICBbc2VsZiByZWxheVN0cmVhbTooTlNJbnB1dFN0cmVhbSAqKWFTdHJlYW1dOwotICAgIGNhc2Ug
TlNTdHJlYW1FdmVudEhhc1NwYWNlQXZhaWxhYmxlOgotICAgICAgICBicmVhazsKLSAgICBjYXNl
IE5TU3RyZWFtRXZlbnRPcGVuQ29tcGxldGVkOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5T
U3RyZWFtRXZlbnRFbmRFbmNvdW50ZXJlZDoKLSAgICAgICAgW1tzZWxmIHJlbGF5RGVsZWdhdGVd
IGRpZENyYXNoV2l0aE1lc3NhZ2U6bmlsXTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOU1N0
cmVhbUV2ZW50RXJyb3JPY2N1cnJlZDoKLSAgICAgICAgW1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRp
ZENyYXNoV2l0aE1lc3NhZ2U6W1thU3RyZWFtIHN0cmVhbUVycm9yXSBkZXNjcmlwdGlvbl1dOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLUBlbmQKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RS
ZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91
dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheS5oCShyZXZpc2lvbiAyMTAyNzQpCisr
KyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXkuaAkobm9uZXhp
c3RlbnQpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIExUUmVsYXlfaAot
I2RlZmluZSBMVFJlbGF5X2gKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0K
LUBwcm90b2NvbCBMVFJlbGF5RGVsZWdhdGUgPE5TT2JqZWN0PgotLSAodm9pZClkaWRDb25uZWN0
OwotLSAodm9pZClkaWREaXNjb25uZWN0OwotLSAodm9pZClkaWRDcmFzaFdpdGhNZXNzYWdlOihO
U1N0cmluZyAqKW1lc3NhZ2U7Ci0tICh2b2lkKWRpZFJlY2VpdmVTdGRvdXREYXRhOihOU0RhdGEg
KilkYXRhOwotLSAodm9pZClkaWRSZWNlaXZlU3RkZXJyRGF0YTooTlNEYXRhICopZGF0YTsKLUBl
bmQKLQotQHByb3RvY29sIExUUmVsYXkgPE5TT2JqZWN0LCBOU1N0cmVhbURlbGVnYXRlPgotLSAo
dm9pZClzZXR1cDsKLS0gKHZvaWQpdGVhckRvd247Ci0tICh2b2lkKWNvbm5lY3Q7Ci0tICh2b2lk
KWRpc2Nvbm5lY3Q7Ci1AcHJvcGVydHkgKHdlYWspIGlkPExUUmVsYXlEZWxlZ2F0ZT4gcmVsYXlE
ZWxlZ2F0ZTsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNPdXRwdXRTdHJlYW0gKm91
dHB1dFN0cmVhbTsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkv
TGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
TGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5oCShyZXZp
c2lvbiAyMTAyNzQpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xU
UmVsYXlDb250cm9sbGVyLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLSNpZm5kZWYgTFRSZWxheUNvbnRyb2xsZXJfaAotI2RlZmluZSBMVFJlbGF5Q29udHJvbGxl
cl9oCi0KLSNpbXBvcnQgIkxUUmVsYXkuaCIKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0
aW9uLmg+Ci0KLUBjbGFzcyBTaW1EZXZpY2U7Ci0KLUBpbnRlcmZhY2UgTFRSZWxheUNvbnRyb2xs
ZXIgOiBOU09iamVjdCA8TFRSZWxheURlbGVnYXRlPgotLSAoaWQpaW5pdFdpdGhEZXZpY2U6KFNp
bURldmljZSAqKWRldmljZSBwcm9kdWN0RGlyOihOU1N0cmluZyAqKXByb2R1Y3REaXIgYXBwUGF0
aDooTlNTdHJpbmcgKilhcHBQYXRoIGRldmljZVVESUQ6KE5TVVVJRCAqKXVkaWQgZHVtcFRvb2xB
cmd1bWVudHM6KE5TQXJyYXkgKilhcmd1bWVudHM7Ci0tICh2b2lkKXN0YXJ0OwotLSAodm9pZClm
aW5pc2g7Ci1AZW5kCi0KLSNlbmRpZgpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91
dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91
dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIubQkocmV2aXNpb24g
MjEwMjc0KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5
Q29udHJvbGxlci5tCShub25leGlzdGVudCkKQEAgLTEsMjcyICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW1wb3J0ICJMVFJlbGF5Q29udHJvbGxlci5oIgotCi0jaW1wb3J0ICJDb3JlU2ltdWxhdG9y
U1BJLmgiCi0jaW1wb3J0ICJMVFBpcGVSZWxheS5oIgotI2ltcG9ydCA8QXBwS2l0L0FwcEtpdC5o
PgotI2ltcG9ydCA8Y3J0X2V4dGVybnMuaD4KLQotQGludGVyZmFjZSBMVFJlbGF5Q29udHJvbGxl
ciAoKQotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBkaXNwYXRjaF9zb3VyY2VfdCBzdGFu
ZGFyZElucHV0RGlzcGF0Y2hTb3VyY2U7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5T
RmlsZUhhbmRsZSAqc3RhbmRhcmRPdXRwdXQ7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcp
IE5TRmlsZUhhbmRsZSAqc3RhbmRhcmRFcnJvcjsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9u
ZykgTlNTdHJpbmcgKmlwY0lkZW50aWZpZXI7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcp
IE5TU3RyaW5nICphcHBCdW5kbGVJZGVudGlmaWVyOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ry
b25nKSBOU1N0cmluZyAqYXBwUGF0aDsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNV
VUlEICpkZXZpY2VVRElEOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU0FycmF5ICpk
dW1wVG9vbEFyZ3VtZW50czsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcg
KnByb2R1Y3REaXI7Ci1AcHJvcGVydHkgKHN0cm9uZykgU2ltRGV2aWNlICpkZXZpY2U7Ci1AcHJv
cGVydHkgKHN0cm9uZykgaWQ8TFRSZWxheT4gcmVsYXk7Ci1AcHJvcGVydHkgcGlkX3QgcGlkOwot
QHByb3BlcnR5IChzdHJvbmcpIGRpc3BhdGNoX3NvdXJjZV90IGFwcERpc3BhdGNoU291cmNlOwot
QGVuZAotCi1AaW1wbGVtZW50YXRpb24gTFRSZWxheUNvbnRyb2xsZXIKLQotLSAoaWQpaW5pdFdp
dGhEZXZpY2U6KFNpbURldmljZSAqKWRldmljZSBwcm9kdWN0RGlyOihOU1N0cmluZyAqKXByb2R1
Y3REaXIgYXBwUGF0aDooTlNTdHJpbmcgKilhcHBQYXRoIGRldmljZVVESUQ6KE5TVVVJRCAqKXVk
aWQgZHVtcFRvb2xBcmd1bWVudHM6KE5TQXJyYXkgKilhcmd1bWVudHMKLXsKLSAgICBpZiAoKHNl
bGYgPSBbc3VwZXIgaW5pdF0pKSB7Ci0gICAgICAgIF9kZXZpY2UgPSBkZXZpY2U7Ci0gICAgICAg
IF9wcm9kdWN0RGlyID0gcHJvZHVjdERpcjsKLSAgICAgICAgX2FwcFBhdGggPSBhcHBQYXRoOwot
ICAgICAgICBfYXBwQnVuZGxlSWRlbnRpZmllciA9IFtbTlNCdW5kbGUgYnVuZGxlV2l0aFBhdGg6
YXBwUGF0aF0gYnVuZGxlSWRlbnRpZmllcl07Ci0gICAgICAgIF9kZXZpY2VVRElEID0gdWRpZDsK
LSAgICAgICAgX2R1bXBUb29sQXJndW1lbnRzID0gYXJndW1lbnRzOwotICAgICAgICBfc3RhbmRh
cmRJbnB1dERpc3BhdGNoU291cmNlID0gZGlzcGF0Y2hfc291cmNlX2NyZWF0ZShESVNQQVRDSF9T
T1VSQ0VfVFlQRV9SRUFELCBTVERJTl9GSUxFTk8sIDAsIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCkpOwotICAgICAgICBfc3RhbmRhcmRPdXRwdXQgPSBbTlNGaWxlSGFuZGxlIGZpbGVIYW5kbGVX
aXRoU3RhbmRhcmRPdXRwdXRdOwotICAgICAgICBfc3RhbmRhcmRFcnJvciA9IFtOU0ZpbGVIYW5k
bGUgZmlsZUhhbmRsZVdpdGhTdGFuZGFyZEVycm9yXTsKLQotICAgICAgICBkaXNwYXRjaF9zb3Vy
Y2Vfc2V0X2V2ZW50X2hhbmRsZXIoX3N0YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJjZSwgXnsKLSAg
ICAgICAgICAgIHVpbnQ4X3QgYnVmZmVyWzEwMjRdOwotICAgICAgICAgICAgc3NpemVfdCBsZW4g
PSByZWFkKFNURElOX0ZJTEVOTywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7Ci0gICAgICAgICAg
ICBpZiAobGVuID4gMCkgewotICAgICAgICAgICAgICAgIEB0cnkgewotICAgICAgICAgICAgICAg
ICAgICBbW1tzZWxmIHJlbGF5XSBvdXRwdXRTdHJlYW1dIHdyaXRlOmJ1ZmZlciBtYXhMZW5ndGg6
bGVuXTsKLSAgICAgICAgICAgICAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24gKmUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gQnJva2VuIHBpcGUgLSB0aGUgZHVtcCB0b29sIGNyYXNoZWQuIFRp
bWUgdG8gZGllLgotICAgICAgICAgICAgICAgICAgICBbc2VsZiBkaWRDcmFzaFdpdGhNZXNzYWdl
Om5pbF07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAvLyBFT0YgUmVjZWl2ZWQgb24gdGhlIHJlbGF5J3Mgc3RhbmRhcmQgaW5wdXQuCi0g
ICAgICAgICAgICAgICAgW3NlbGYgZmluaXNoXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7
Ci0KLSAgICAgICAgX3JlbGF5ID0gW1tMVFBpcGVSZWxheSBhbGxvY10gaW5pdFdpdGhQcmVmaXg6
W0AiL3RtcCIgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OnNlbGYuaXBjSWRlbnRpZmll
cl1dOwotICAgICAgICBbX3JlbGF5IHNldFJlbGF5RGVsZWdhdGU6c2VsZl07Ci0gICAgfQotICAg
IHJldHVybiBzZWxmOwotfQotCi0tIChOU1N0cmluZyAqKWlwY0lkZW50aWZpZXIKLXsKLSAgICBy
ZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQC0lQCIsIHNlbGYuYXBwQnVuZGxl
SWRlbnRpZmllciwgc2VsZi5kZXZpY2VVRElELlVVSURTdHJpbmddOwotfQotCi0tIChOU1N0cmlu
ZyAqKXByb2Nlc3NOYW1lCi17Ci0gICAgcmV0dXJuIFtzZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIg
Y29tcG9uZW50c1NlcGFyYXRlZEJ5U3RyaW5nOkAiLiJdLmxhc3RPYmplY3Q7Ci19Ci0KLS0gKHZv
aWQpZGlkUmVjZWl2ZVN0ZG91dERhdGE6KE5TRGF0YSAqKWRhdGEKLXsKLSAgICBAdHJ5IHsKLSAg
ICAgICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0XSB3cml0ZURhdGE6ZGF0YV07Ci0gICAgfSBAY2F0
Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRpb24pIHsKLSAgICAgICAgLy8gTlNGaWxlSGFuZGxlT3Bl
cmF0aW9uRXhjZXB0aW9uCi0gICAgICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhlIHRlc3QgaGFybmVz
cyBzdG9wcGVkIGxpc3RlbmluZyB0byB1cywKLSAgICAgICAgLy8gcHJvYmFibHkgYmVjYXVzZSB3
ZSB0aW1lZCBvdXQgb3IgYSBydW4gd2FzIGNhbmNlbGVkLgotICAgICAgICBleGl0KEVYSVRfRkFJ
TFVSRSk7Ci0gICAgfQotfQotCi0tICh2b2lkKWRpZFJlY2VpdmVTdGRlcnJEYXRhOihOU0RhdGEg
KilkYXRhCi17Ci0gICAgQHRyeSB7Ci0gICAgICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSB3cml0
ZURhdGE6ZGF0YV07Ci0gICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRpb24pIHsKLSAg
ICAgICAgLy8gTlNGaWxlSGFuZGxlT3BlcmF0aW9uRXhjZXB0aW9uCi0gICAgICAgIC8vIEJyb2tl
biBwaXBlIC0gdGhlIHRlc3QgaGFybmVzcyBzdG9wcGVkIGxpc3RlbmluZyB0byB1cywKLSAgICAg
ICAgLy8gcHJvYmFibHkgYmVjYXVzZSB3ZSB0aW1lZCBvdXQgb3IgYSBydW4gd2FzIGNhbmNlbGVk
LgotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotfQotCi0tICh2b2lkKWRpZERp
c2Nvbm5lY3QKLXsKLSAgICBkaXNwYXRjaF9zdXNwZW5kKFtzZWxmIHN0YW5kYXJkSW5wdXREaXNw
YXRjaFNvdXJjZV0pOwotfQotCi0tICh2b2lkKWRpZENvbm5lY3QKLXsKLSAgICBkaXNwYXRjaF9y
ZXN1bWUoW3NlbGYgc3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNlXSk7Ci19Ci0KLS0gKHZvaWQp
ZGlkQ3Jhc2hXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgW1tzZWxmIHJl
bGF5XSBkaXNjb25uZWN0XTsKLSAgICBOU1N0cmluZyAqY3Jhc2hNZXNzYWdlID0gW05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCJcbiNDUkFTSEVEIC0gJUAgKHBpZCAlZClcbiIsIFtzZWxmIHBy
b2Nlc3NOYW1lXSwgW3NlbGYgcGlkXV07Ci0KLSAgICBpZiAobWVzc2FnZSkKLSAgICAgICAgY3Jh
c2hNZXNzYWdlID0gW2NyYXNoTWVzc2FnZSBzdHJpbmdCeUFwcGVuZGluZ0Zvcm1hdDpAIiVAXG4i
LCBtZXNzYWdlXTsKLQotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSB3cml0ZURhdGE6W2NyYXNo
TWVzc2FnZSBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ11dOwotICAgIFtb
c2VsZiBzdGFuZGFyZEVycm9yXSBjbG9zZUZpbGVdOwotICAgIFtbc2VsZiBzdGFuZGFyZE91dHB1
dF0gY2xvc2VGaWxlXTsKLSAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci19Ci0KLS0gKHZvaWQpaW5z
dGFsbEFwcAotewotICAgIE5TRGljdGlvbmFyeSAqaW5zdGFsbE9wdGlvbnMgPSBAewotICAgICAg
ICAoTlNTdHJpbmcgKilrQ0ZCdW5kbGVJZGVudGlmaWVyS2V5OiBzZWxmLmFwcEJ1bmRsZUlkZW50
aWZpZXIsCi0gICAgfTsKLQotICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOwotICAgIEJPT0wgaW5z
dGFsbGVkID0gW3NlbGYuZGV2aWNlIGluc3RhbGxBcHBsaWNhdGlvbjpbTlNVUkwgZmlsZVVSTFdp
dGhQYXRoOnNlbGYuYXBwUGF0aF0gd2l0aE9wdGlvbnM6aW5zdGFsbE9wdGlvbnMgZXJyb3I6JmVy
cm9yXTsKLSAgICBpZiAoIWluc3RhbGxlZCkgewotICAgICAgICBOU0xvZyhAIkNvdWxkbid0IGlu
c3RhbGwgJUA6ICVAIiwgc2VsZi5hcHBQYXRoLCBlcnJvci5kZXNjcmlwdGlvbik7Ci0gICAgICAg
IGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpa2lsbEFwcAotewotICAg
IGRpc3BhdGNoX3NvdXJjZV90IGRpc3BhdGNoID0gW3NlbGYgYXBwRGlzcGF0Y2hTb3VyY2VdOwot
Ci0gICAgaWYgKGRpc3BhdGNoKQotICAgICAgICBkaXNwYXRjaF9zb3VyY2VfY2FuY2VsKGRpc3Bh
dGNoKTsKLQotICAgIGlmIChbc2VsZiBwaWRdID4gMSkgewotICAgICAgICBraWxsKHNlbGYucGlk
LCBTSUdLSUxMKTsKLSAgICAgICAgW3NlbGYgc2V0UGlkOi0xXTsKLSAgICB9Ci0gICAgW3NlbGYg
c2V0QXBwRGlzcGF0Y2hTb3VyY2U6bmlsXTsKLX0KLQotLSAoTlNEaWN0aW9uYXJ5ICopX2Vudmly
b25tZW50VmFyaWFibGVzCi17Ci0gICAgc3RhdGljIE5TRGljdGlvbmFyeSAqZW52aXJvbm1lbnRW
YXJpYWJsZXM7Ci0gICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlOwotCi0gICAgZGlzcGF0
Y2hfb25jZSgmb25jZSwgXnsKLSAgICAgICAgTlNTdHJpbmcgKnByb2R1Y3REaXJlY3RvcnkgPSBb
c2VsZiBwcm9kdWN0RGlyXTsKLQotICAgICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpkaWN0aW9u
YXJ5ID0gW0B7Ci0gICAgICAgICAgICBAIklQQ19JREVOVElGSUVSIjogc2VsZi5pcGNJZGVudGlm
aWVyLAotICAgICAgICAgICAgQCJEWUxEX0ZSQU1FV09SS19QQVRIIjogcHJvZHVjdERpcmVjdG9y
eSwKLSAgICAgICAgICAgIEAiX19YUENfRFlMRF9GUkFNRVdPUktfUEFUSCI6IHByb2R1Y3REaXJl
Y3RvcnksCi0gICAgICAgICAgICBAIkRZTERfTElCUkFSWV9QQVRIIjogcHJvZHVjdERpcmVjdG9y
eSwKLSAgICAgICAgICAgIEAiX19YUENfRFlMRF9MSUJSQVJZX1BBVEgiOiBwcm9kdWN0RGlyZWN0
b3J5LAotICAgICAgICB9IG11dGFibGVDb3B5XTsKLQotICAgICAgICBmb3IgKE5TU3RyaW5nICpr
ZXlOYW1lIGluIEBbQCJEWUxEX0lOU0VSVF9MSUJSQVJJRVMiLCBAIk1hbGxvY1N0YWNrTG9nZ2lu
ZyIsIEAiTE9DQUxfUkVTT1VSQ0VfUk9PVCIsIEAiRFVNUFJFTkRFUlRSRUVfVEVNUCJdKSB7Ci0g
ICAgICAgICAgICBjb25zdCBjaGFyKiB2YWx1ZSA9IGdldGVudihba2V5TmFtZSBVVEY4U3RyaW5n
XSk7Ci0gICAgICAgICAgICBpZiAodmFsdWUgJiYgc3RybGVuKHZhbHVlKSkgewotICAgICAgICAg
ICAgICAgIE5TU3RyaW5nICpuc1ZhbHVlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5n
OnZhbHVlXTsKLSAgICAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6bnNWYWx1ZSBm
b3JLZXk6a2V5TmFtZV07Ci0gICAgICAgICAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0Om5z
VmFsdWUgZm9yS2V5OltAIl9fWFBDXyIgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6a2V5TmFtZV1d
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChjaGFyKiogZW52cCA9
ICpfTlNHZXRFbnZpcm9uKCk7ICplbnZwOyBlbnZwKyspIHsKLSAgICAgICAgICAgIGNvbnN0IGNo
YXIqIGVudiA9ICplbnZwOwotICAgICAgICAgICAgaWYgKCFzdHJuY21wKCJKU0NfIiwgZW52LCA0
KSB8fCAhc3RybmNtcCgiX19YUENfSlNDXyIsIGVudiwgMTApKSB7Ci0gICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogZXF1YWwgPSBzdHJjaHIoZW52LCAnPScpOwotICAgICAgICAgICAgICAgIGlm
ICghZXF1YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgTlNMb2coQCJNaXNzaW5nICc9JyBpbiBl
bnYgdmFyICclcyciLCBlbnYpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heEtl
eUxlbmd0aCA9IDI1NjsKLSAgICAgICAgICAgICAgICBzaXplX3Qga2V5TGVuZ3RoID0gZXF1YWwg
LSBlbnY7Ci0gICAgICAgICAgICAgICAgaWYgKGtleUxlbmd0aCA+PSBtYXhLZXlMZW5ndGgpIHsK
LSAgICAgICAgICAgICAgICAgICAgTlNMb2coQCJFbnYgdmFyICclcycgaXMgdG9vIGxvbmciLCBl
bnYpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBjaGFyIGtleVttYXhLZXlMZW5ndGhdOwotICAgICAgICAgICAgICAg
IHN0cm5jcHkoa2V5LCBlbnYsIGtleUxlbmd0aCk7Ci0gICAgICAgICAgICAgICAga2V5W2tleUxl
bmd0aF0gPSAnXDAnOwotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhbHVlID0gZXF1YWwg
KyAxOwotCi0gICAgICAgICAgICAgICAgTlNTdHJpbmcgKm5zS2V5ID0gW05TU3RyaW5nIHN0cmlu
Z1dpdGhVVEY4U3RyaW5nOmtleV07Ci0gICAgICAgICAgICAgICAgTlNTdHJpbmcgKm5zVmFsdWUg
PSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6dmFsdWVdOwotICAgICAgICAgICAgICAg
IFtkaWN0aW9uYXJ5IHNldE9iamVjdDpuc1ZhbHVlIGZvcktleTpuc0tleV07Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICBlbnZpcm9ubWVudFZhcmlhYmxlcyA9IFtkaWN0aW9u
YXJ5IGNvcHldOwotICAgIH0pOwotCi0gICAgcmV0dXJuIGVudmlyb25tZW50VmFyaWFibGVzOwot
fQotCi0tICh2b2lkKWxhdW5jaEFwcAotewotICAgIE5TRGljdGlvbmFyeSAqbGF1bmNoT3B0aW9u
cyA9IEB7Ci0gICAgICAgIGtTaW1EZXZpY2VMYXVuY2hBcHBsaWNhdGlvbkVudmlyb25tZW50OiBb
c2VsZiBfZW52aXJvbm1lbnRWYXJpYWJsZXNdLAotICAgICAgICBrU2ltRGV2aWNlTGF1bmNoQXBw
bGljYXRpb25Bcmd1bWVudHM6IFtzZWxmIGR1bXBUb29sQXJndW1lbnRzXSwKLSAgICB9OwotCi0g
ICAgTlNFcnJvciAqZXJyb3I7Ci0gICAgcGlkX3QgcGlkID0gW3NlbGYuZGV2aWNlIGxhdW5jaEFw
cGxpY2F0aW9uV2l0aElEOnNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciBvcHRpb25zOmxhdW5jaE9w
dGlvbnMgZXJyb3I6JmVycm9yXTsKLQotICAgIGlmIChwaWQgPCAwKSB7Ci0gICAgICAgIE5TTG9n
KEAiQ291bGRuJ3QgbGF1bmNoICVAOiAlQCIsIHNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciwgZXJy
b3IuZGVzY3JpcHRpb24pOwotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotCi0g
ICAgW3NlbGYgc2V0UGlkOnBpZF07Ci0KLSAgICBkaXNwYXRjaF9xdWV1ZV90IHF1ZXVlID0gZGlz
cGF0Y2hfZ2V0X21haW5fcXVldWUoKTsKLSAgICBkaXNwYXRjaF9zb3VyY2VfdCBzaW11bGF0b3JB
cHBFeGl0RGlzcGF0Y2hTb3VyY2UgPSBkaXNwYXRjaF9zb3VyY2VfY3JlYXRlKERJU1BBVENIX1NP
VVJDRV9UWVBFX1BST0MsIFtzZWxmIHBpZF0sIERJU1BBVENIX1BST0NfRVhJVCwgcXVldWUpOwot
ICAgIFtzZWxmIHNldEFwcERpc3BhdGNoU291cmNlOnNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNv
dXJjZV07Ci0gICAgZGlzcGF0Y2hfc291cmNlX3NldF9ldmVudF9oYW5kbGVyKHNpbXVsYXRvckFw
cEV4aXREaXNwYXRjaFNvdXJjZSwgXnsKLSAgICAgICAgZGlzcGF0Y2hfc291cmNlX2NhbmNlbChz
aW11bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3VyY2UpOwotICAgICAgICBbc2VsZiBkaWRDcmFzaFdp
dGhNZXNzYWdlOm5pbF07Ci0gICAgfSk7Ci0gICAgZGlzcGF0Y2hfcmVzdW1lKHNpbXVsYXRvckFw
cEV4aXREaXNwYXRjaFNvdXJjZSk7Ci19Ci0KLS0gKHZvaWQpc3RhcnQKLXsKLSAgICBbc2VsZiBp
bnN0YWxsQXBwXTsKLSAgICBbW3NlbGYgcmVsYXldIHNldHVwXTsKLSAgICBbc2VsZiBsYXVuY2hB
cHBdOwotICAgIFtbc2VsZiByZWxheV0gY29ubmVjdF07Ci19Ci0KLS0gKHZvaWQpZmluaXNoCi17
Ci0gICAgW1tzZWxmIHJlbGF5XSBkaXNjb25uZWN0XTsKLSAgICBbc2VsZiBraWxsQXBwXTsKLSAg
ICBleGl0KEVYSVRfU1VDQ0VTUyk7Ci19Ci0KLUBlbmQKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RS
ZWxheS9MYXlvdXRUZXN0UmVsYXkvbWFpbi5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRl
c3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvbWFpbi5tCShyZXZpc2lvbiAyMTAyNzQpCisrKyBUb29s
cy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L21haW4ubQkobm9uZXhpc3RlbnQpCkBA
IC0xLDEzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiQ29yZVNpbXVsYXRv
clNQSS5oIgotI2ltcG9ydCAiTFRSZWxheUNvbnRyb2xsZXIuaCIKLSNpbXBvcnQgPEZvdW5kYXRp
b24vRm91bmRhdGlvbi5oPgotCi1zdGF0aWMgTFRSZWxheUNvbnRyb2xsZXIgKnJlbGF5Q29udHJv
bGxlcjsKLQotdm9pZCB1c2FnZSgpCi17Ci0gICAgTlNTdHJpbmcgKmhlbHBUZXh0ID0gQCJMYXlv
dXRUZXN0UmVsYXk6IHJ1biBhIGR1bXAgdG9vbCBpbiB0aGUgc2ltdWxhdG9yLiBOb3QgZm9yIGRp
cmVjdCBjb25zdW1wdGlvbi5cbiIKLSAgICAgICAgIlVzYWdlOiBMYXlvdXRUZXN0UmVsYXkgWy1o
XSBbb3B0aW9uc10gLS0gW2R1bXAgdG9vbCBhcmd1bWVudHNdXG4iCi0gICAgICAgICJSZXF1aXJl
ZCBvcHRpb25zOlxuIgotICAgICAgICAiICAgIC11ZGlkIDxpZGVudGlmaWVyPiAgICAgICBTaW11
bGF0b3IgZGV2aWNlIGlkZW50aWZpZXJcbiIKLSAgICAgICAgIiAgICAtYXBwIDxhcHBfcGF0aD4g
ICAgICAgICAgUGF0aCB0byB0aGUgYnVpbHQgaU9TIC5hcHAgYnVuZGxlIGRpcmVjdG9yeS5cbiIK
LSAgICAgICAgIiAgICAtcHJvZHVjdERpciA8ZGlyPiAgICAgICAgL3BhdGgvdG8vV2ViS2l0QnVp
bGQve2NvbmZpZ3VyYXRpb259LXtzaG9ydCBwbGF0Zm9ybX0uXG4iOwotCi0gICAgZnByaW50Zihz
dGRlcnIsICIlc1xuIiwgW2hlbHBUZXh0IFVURjhTdHJpbmddKTsKLX0KLQotTlNTdHJpbmcgKmdl
dFJlcXVpcmVkU3RyaW5nQXJndW1lbnQoTlNTdHJpbmcgKnBhcmFtZXRlcikKLXsKLSAgICBOU1Vz
ZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVs
dHNdOwotICAgIE5TU3RyaW5nICphcmd1bWVudCA9IFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6cGFy
YW1ldGVyXTsKLQotICAgIGlmICghYXJndW1lbnQpIHsKLSAgICAgICAgTlNMb2coQCItJUAgaXMg
cmVxdWlyZWQuIiwgcGFyYW1ldGVyKTsKLSAgICAgICAgdXNhZ2UoKTsKLSAgICAgICAgZXhpdChF
WElUX0ZBSUxVUkUpOwotICAgIH0KLSAgICByZXR1cm4gYXJndW1lbnQ7Ci19Ci0KLU5TQXJyYXkg
KmdldER1bXBUb29sQXJndW1lbnRzKCkKLXsKLSAgICBOU011dGFibGVBcnJheSAqZHVtcFRvb2xB
cmd1bWVudHMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKLSAgICBOU0FycmF5ICpw
cm9jZXNzQXJncyA9IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gYXJndW1lbnRzXTsKLSAg
ICBCT09MIGFwcGVuZGluZyA9IE5POwotICAgIGZvciAoTlNTdHJpbmcgKmFyZyBpbiBwcm9jZXNz
QXJncykgewotICAgICAgICBpZiAoW2FyZyBpc0VxdWFsVG9TdHJpbmc6QCItLSJdKSB7Ci0gICAg
ICAgICAgICBhcHBlbmRpbmcgPSBZRVM7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
fQotICAgICAgICBpZiAoYXBwZW5kaW5nKQotICAgICAgICAgICAgW2R1bXBUb29sQXJndW1lbnRz
IGFkZE9iamVjdDphcmddOwotICAgIH0KLSAgICByZXR1cm4gZHVtcFRvb2xBcmd1bWVudHM7Ci19
Ci0KLXZvaWQgZmluaXNoKCkKLXsKLSAgICBbcmVsYXlDb250cm9sbGVyIGZpbmlzaF07Ci19Ci0K
LXZvaWQgcmVjZWl2ZWRTaWduYWwoaW50IHNpZ25hbCkKLXsKLSAgICBleGl0KEVYSVRfU1VDQ0VT
Uyk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICogYXJndltdKQotewotICAg
IEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBOU0FycmF5ICpoZWxwQXJndW1lbnRzID0gQFtA
Ii1oIiwgQCItLWhlbHAiXTsKLSAgICAgICAgZm9yIChOU1N0cmluZyAqaGVscEFyZ3VtZW50IGlu
IGhlbHBBcmd1bWVudHMpIHsKLSAgICAgICAgICAgIGlmIChbW1tOU1Byb2Nlc3NJbmZvIHByb2Nl
c3NJbmZvXSBhcmd1bWVudHNdIGluZGV4T2ZPYmplY3Q6aGVscEFyZ3VtZW50XSAhPSBOU05vdEZv
dW5kKSB7Ci0gICAgICAgICAgICAgICAgdXNhZ2UoKTsKLSAgICAgICAgICAgICAgICBleGl0KEVY
SVRfRkFJTFVSRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotI2lmIFVTRV9TSU1fU0VS
VklDRV9DT05URVhUCi0gICAgICAgIE5TU3RyaW5nICpkZXZlbG9wZXJEaXJlY3RvcnkgPSBnZXRS
ZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAiZGV2ZWxvcGVyRGlyIik7Ci0jZW5kaWYKLSAgICAgICAg
TlNVVUlEICp1ZGlkID0gW1tOU1VVSUQgYWxsb2NdIGluaXRXaXRoVVVJRFN0cmluZzpnZXRSZXF1
aXJlZFN0cmluZ0FyZ3VtZW50KEAidWRpZCIpXTsKLSAgICAgICAgTlNTdHJpbmcgKmFwcFBhdGgg
PSBnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAiYXBwIik7Ci0gICAgICAgIE5TU3RyaW5nICpw
cm9kdWN0RGlyZWN0b3J5ID0gZ2V0UmVxdWlyZWRTdHJpbmdBcmd1bWVudChAInByb2R1Y3REaXIi
KTsKLSAgICAgICAgTlNBcnJheSAqZHVtcFRvb2xBcmd1bWVudHMgPSBnZXREdW1wVG9vbEFyZ3Vt
ZW50cygpOwotCi0jaWYgVVNFX1NJTV9TRVJWSUNFX0NPTlRFWFQKLSAgICAgICAgTlNFcnJvciAq
ZXJyb3I7Ci0gICAgICAgIFNpbVNlcnZpY2VDb250ZXh0ICpzZXJ2aWNlQ29udGV4dCA9IFtTaW1T
ZXJ2aWNlQ29udGV4dCBzaGFyZWRTZXJ2aWNlQ29udGV4dEZvckRldmVsb3BlckRpcjpkZXZlbG9w
ZXJEaXJlY3RvcnkgZXJyb3I6JmVycm9yXTsKLSAgICAgICAgaWYgKCFzZXJ2aWNlQ29udGV4dCkg
ewotICAgICAgICAgICAgTlNMb2coQCJEZXZpY2UgY29udGV4dCBjb3VsZG4ndCBiZSBmb3VuZDog
JUAiLCBlcnJvcik7Ci0gICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgIH0K
LSAgICAgICAgU2ltRGV2aWNlU2V0ICpkZXZpY2VTZXQgPSBbc2VydmljZUNvbnRleHQgZGVmYXVs
dERldmljZVNldFdpdGhFcnJvcjpuaWxdOwotICAgICAgICBpZiAoIWRldmljZVNldCkgewotICAg
ICAgICAgICAgTlNMb2coQCJEZWZhdWx0IGRldmljZSBzZXQgY291bGRuJ3QgYmUgZm91bmQ6ICVA
IiwgZXJyb3IpOwotICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0g
ICAgICAgIFNpbURldmljZSAqZGV2aWNlID0gW2RldmljZVNldC5kZXZpY2VzQnlVRElEIG9iamVj
dEZvcktleTp1ZGlkXTsKLSNlbHNlCi0gICAgICAgIFNpbURldmljZSAqZGV2aWNlID0gW1NpbURl
dmljZVNldC5kZWZhdWx0U2V0LmRldmljZXNCeVVESUQgb2JqZWN0Rm9yS2V5OnVkaWRdOwotI2Vu
ZGlmCi0gICAgICAgIGlmICghZGV2aWNlKSB7Ci0gICAgICAgICAgICBOU0xvZyhAIkRldmljZSAl
QCBjb3VsZG4ndCBiZSBmb3VuZCIsIHVkaWQpOwotICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxV
UkUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVsYXlDb250cm9sbGVyID0gW1tMVFJlbGF5Q29u
dHJvbGxlciBhbGxvY10gaW5pdFdpdGhEZXZpY2U6ZGV2aWNlIHByb2R1Y3REaXI6cHJvZHVjdERp
cmVjdG9yeSBhcHBQYXRoOmFwcFBhdGggZGV2aWNlVURJRDp1ZGlkIGR1bXBUb29sQXJndW1lbnRz
OmR1bXBUb29sQXJndW1lbnRzXTsKLSAgICAgICAgW3JlbGF5Q29udHJvbGxlciBzdGFydF07Ci0K
LSAgICAgICAgYXRleGl0KGZpbmlzaCk7Ci0gICAgICAgIHNpZ25hbChTSUdJTlQsIHJlY2VpdmVk
U2lnbmFsKTsKLSAgICAgICAgc2lnbmFsKFNJR1RFUk0sIHJlY2VpdmVkU2lnbmFsKTsKLQotICAg
ICAgICBbW05TUnVuTG9vcCBtYWluUnVuTG9vcF0gcnVuXTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7
Ci19CkluZGV4OiBUb29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL2J1aWxkLXdlYmtpdAkocmV2aXNpb24gMjEwMjc0KQorKysgVG9vbHMvU2NyaXB0
cy9idWlsZC13ZWJraXQJKHdvcmtpbmcgY29weSkKQEAgLTIwMCwxMCArMjAwLDYgQEAgaWYgKGlz
QXBwbGVNYWNXZWJLaXQoKSkgewogICAgICAgICBwdXNoIEBjb3B5TGlicmFyaWVzQXJncywgcHJv
ZHVjdERpcigpOwogICAgICAgICBwcmludChqb2luKCIgIiwgQGNvcHlMaWJyYXJpZXNBcmdzKSAu
ICJcbiIpOwogICAgICAgICAoc3lzdGVtKEBjb3B5TGlicmFyaWVzQXJncykgPT0gMCkgb3IgZGll
OwotCi0gICAgICAgIGlmICh3aWxsVXNlSU9TU2ltdWxhdG9yU0RLKCkpIHsKLSAgICAgICAgICAg
IChzeXN0ZW0oInBlcmwiLCAiVG9vbHMvU2NyaXB0cy9idWlsZC1sYXlvdXR0ZXN0cmVsYXkiLCBh
cmd1bWVudHNGb3JDb25maWd1cmF0aW9uKCkpID09IDApIG9yIGRpZTsKLSAgICAgICAgfQogICAg
IH0KIAogICAgICMgQnVpbGQgVG9vbHMgbmVlZGVkIGZvciBBcHBsZSBwb3J0cwpJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkJKHJldmlzaW9uIDIxMDI3NCkKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNiArMTMx
LDcgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICBzZWxmLl93ZWJfcGxhdGZvcm1fdGVz
dF9zZXJ2ZXIgPSBOb25lCiAgICAgICAgIHNlbGYuX2ltYWdlX2RpZmZlciA9IE5vbmUKICAgICAg
ICAgc2VsZi5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBzZXJ2ZXJfcHJvY2Vzcy5TZXJ2
ZXJQcm9jZXNzICAjIG92ZXJyaWRhYmxlIGZvciB0ZXN0aW5nCisgICAgICAgIHNlbGYuX3Rlc3Rf
cnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBzZXJ2ZXJfcHJvY2Vzcy5TZXJ2ZXJQcm9jZXNz
CiAKICAgICAgICAgaWYgbm90IGhhc2F0dHIob3B0aW9ucywgJ2NvbmZpZ3VyYXRpb24nKSBvciBu
b3Qgb3B0aW9ucy5jb25maWd1cmF0aW9uOgogICAgICAgICAgICAgc2VsZi5zZXRfb3B0aW9uX2Rl
ZmF1bHQoJ2NvbmZpZ3VyYXRpb24nLCBzZWxmLmRlZmF1bHRfY29uZmlndXJhdGlvbigpKQpJbmRl
eDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luLnB5CShyZXZpc2lvbiAyMTAyNzQpCisr
KyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0xNzQsMyArMTc0LDYgQEAgY2xhc3MgRGFyd2luUG9ydChBcHBsZVBvcnQpOgogICAgICAgICBl
eGNlcHQgU2NyaXB0RXJyb3I6CiAgICAgICAgICAgICBfbG9nLndhcm4oInhjcnVuIGZhaWxlZDsg
ZmFsbGluZyBiYWNrIHRvICclcycuIiAlIGZhbGxiYWNrKQogICAgICAgICAgICAgcmV0dXJuIGZh
bGxiYWNrCisKKyAgICBkZWYgZXh0cmFjdEJ1bmRsZUlEKHNlbGYsIGFwcCk6CisgICAgICAgIHJl
dHVybiBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoWycvdXNyL2xpYmV4ZWMvUGxpc3RCdWRk
eScsICctYycsICdQcmludCBDRkJ1bmRsZUlkZW50aWZpZXInLCBhcHAgKyAnL0luZm8ucGxpc3Qn
XSkucnN0cmlwKCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQkocmV2
aXNpb24gMjEwMjc0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQko
d29ya2luZyBjb3B5KQpAQCAtMTM4LDcgKzEzOCw3IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgog
ICAgICAgICBzZWxmLl9kcml2ZXJfdXNlcl9kaXJlY3Rvcnlfc3VmZml4ID0gTm9uZQogICAgICAg
ICBzZWxmLl9kcml2ZXJfdXNlcl9jYWNoZV9kaXJlY3RvcnkgPSBOb25lCiAKLSAgICAgICAgIyBX
ZWJLaXRUZXN0UnVubmVyL0xheW91dFRlc3RSZWxheSBjYW4gcmVwb3J0IGJhY2sgc3VicHJvY2Vz
cyBjcmFzaGVzIGJ5IHByaW50aW5nCisgICAgICAgICMgV2ViS2l0VGVzdFJ1bm5lciBjYW4gcmVw
b3J0IGJhY2sgc3VicHJvY2VzcyBjcmFzaGVzIGJ5IHByaW50aW5nCiAgICAgICAgICMgIiNDUkFT
SEVEIC0gUFJPQ0VTU05BTUUiLiAgU2luY2UgdGhvc2UgY2FuIGhhcHBlbiBhdCBhbnkgdGltZSBh
bmQgU2VydmVyUHJvY2VzcwogICAgICAgICAjIHdvbid0IGJlIGF3YXJlIG9mIHRoZW0gKHNpbmNl
IHRoZSBhY3R1YWwgdG9vbCBkaWRuJ3QgY3Jhc2gsIGp1c3QgYSBzdWJwcm9jZXNzKQogICAgICAg
ICAjIHdlIHJlY29yZCB0aGUgY3Jhc2hlZCBzdWJwcm9jZXNzIG5hbWUgaGVyZS4KQEAgLTMyNyw3
ICszMjcsNiBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKIAogICAgIGRlZiBfc2V0dXBfZW52aXJv
bl9mb3JfZHJpdmVyKHNlbGYsIGVudmlyb25tZW50KToKICAgICAgICAgYnVpbGRfcm9vdF9wYXRo
ID0gc3RyKHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoKSkKLSAgICAgICAgIyBGSVhNRTogRFlMRF8q
IHZhcmlhYmxlcyBzaG91bGQgYmUgTWFjLW9ubHkuIEV2ZW4gaU9TIFNpbXVsYXRvciBkb2Vzbid0
IG5lZWQgdGhlbSwgYXMgTGF5b3V0VGVzdFJlbGF5IGlzIGEgaG9zdCBiaW5hcnkuCiAgICAgICAg
IHNlbGYuX2FwcGVuZF9lbnZpcm9ubWVudF92YXJpYWJsZV9wYXRoKGVudmlyb25tZW50LCAnRFlM
RF9MSUJSQVJZX1BBVEgnLCBidWlsZF9yb290X3BhdGgpCiAgICAgICAgIHNlbGYuX2FwcGVuZF9l
bnZpcm9ubWVudF92YXJpYWJsZV9wYXRoKGVudmlyb25tZW50LCAnX19YUENfRFlMRF9MSUJSQVJZ
X1BBVEgnLCBidWlsZF9yb290X3BhdGgpCiAgICAgICAgIHNlbGYuX2FwcGVuZF9lbnZpcm9ubWVu
dF92YXJpYWJsZV9wYXRoKGVudmlyb25tZW50LCAnRFlMRF9GUkFNRVdPUktfUEFUSCcsIGJ1aWxk
X3Jvb3RfcGF0aCkKQEAgLTM2OSw3ICszNjgsNyBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAg
ICAgICAgZW52aXJvbm1lbnQgPSBzZWxmLl9zZXR1cF9lbnZpcm9uX2Zvcl90ZXN0KCkKICAgICAg
ICAgc2VsZi5fY3Jhc2hlZF9wcm9jZXNzX25hbWUgPSBOb25lCiAgICAgICAgIHNlbGYuX2NyYXNo
ZWRfcGlkID0gTm9uZQotICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2VzcyA9IHNlbGYuX3BvcnQu
X3NlcnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yKHNlbGYuX3BvcnQsIHNlbGYuX3NlcnZlcl9uYW1l
LCBzZWxmLmNtZF9saW5lKHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKSwgZW52aXJvbm1lbnQp
CisgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzID0gc2VsZi5fcG9ydC5fdGVzdF9ydW5uZXJf
cHJvY2Vzc19jb25zdHJ1Y3RvcihzZWxmLl9wb3J0LCBzZWxmLl9zZXJ2ZXJfbmFtZSwgc2VsZi5j
bWRfbGluZShwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyksIGVudmlyb25tZW50KQogICAgICAg
ICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5zdGFydCgpCiAKICAgICBkZWYgX3J1bl9wb3N0X3N0YXJ0
X3Rhc2tzKHNlbGYpOgpAQCAtNjA5LDIxICs2MDgsMTUgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6
CiAgICAgICAgIHJldHVybiBUcnVlCiAKIAotIyBGSVhNRTogdGhpcyBzaG91bGQgYmUgYWJzdHJh
Y3RlZCBvdXQgdmlhIHRoZSBQb3J0IHN1YmNsYXNzIHNvbWVob3cuCiBjbGFzcyBJT1NTaW11bGF0
b3JEcml2ZXIoRHJpdmVyKToKICAgICBkZWYgY21kX2xpbmUoc2VsZiwgcGl4ZWxfdGVzdHMsIHBl
cl90ZXN0X2FyZ3MpOgogICAgICAgICBjbWQgPSBzdXBlcihJT1NTaW11bGF0b3JEcml2ZXIsIHNl
bGYpLmNtZF9saW5lKHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKQotICAgICAgICByZWxheV90
b29sID0gc2VsZi5fcG9ydC5yZWxheV9wYXRoCiAgICAgICAgIGR1bXBfdG9vbCA9IGNtZFswXQog
ICAgICAgICBkdW1wX3Rvb2xfYXJncyA9IGNtZFsxOl0KLSAgICAgICAgcHJvZHVjdF9kaXIgPSBz
ZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCkKICAgICAgICAgcmVsYXlfYXJncyA9IFsKLSAgICAgICAg
ICAgICctZGV2ZWxvcGVyRGlyJywgc2VsZi5fcG9ydC5kZXZlbG9wZXJfZGlyLAotICAgICAgICAg
ICAgJy11ZGlkJywgc2VsZi5fcG9ydC5kZXZpY2VfaWRfZm9yX3dvcmtlcl9udW1iZXIoc2VsZi5f
d29ya2VyX251bWJlciksCi0gICAgICAgICAgICAnLXByb2R1Y3REaXInLCBwcm9kdWN0X2RpciwK
LSAgICAgICAgICAgICctYXBwJywgZHVtcF90b29sLAotICAgICAgICBdCi0gICAgICAgIHJldHVy
biBbcmVsYXlfdG9vbF0gKyByZWxheV9hcmdzICsgWyctLSddICsgZHVtcF90b29sX2FyZ3MKKyAg
ICAgICAgICAgIHNlbGYuX3BvcnQuZGV2aWNlX2lkX2Zvcl93b3JrZXJfbnVtYmVyKHNlbGYuX3dv
cmtlcl9udW1iZXIpLAorICAgICAgICAgICAgZHVtcF90b29sXQorICAgICAgICByZXR1cm4gcmVs
YXlfYXJncyArIFsnLS0nXSArIGR1bXBfdG9vbF9hcmdzCiAKICAgICBkZWYgX3NldHVwX2Vudmly
b25fZm9yX2RyaXZlcihzZWxmLCBlbnZpcm9ubWVudCk6CiAgICAgICAgIGVudmlyb25tZW50WydE
RVZFTE9QRVJfRElSJ10gPSBzZWxmLl9wb3J0LmRldmVsb3Blcl9kaXIKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlcl91bml0dGVzdC5weQkocmV2aXNpb24gMjEw
Mjc0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlcl91bml0dGVzdC5weQko
d29ya2luZyBjb3B5KQpAQCAtMjY0LDcgKzI2NCw3IEBAIGNsYXNzIERyaXZlclRlc3QodW5pdHRl
c3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3Rfc3RvcF9jbGVhbnNfdXBfcHJvcGVybHkoc2Vs
Zik6CiAgICAgICAgIHBvcnQgPSBUZXN0V2ViS2l0UG9ydCgpCi0gICAgICAgIHBvcnQuX3NlcnZl
cl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gTW9ja1NlcnZlclByb2Nlc3MKKyAgICAgICAgcG9ydC5f
dGVzdF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IE1vY2tTZXJ2ZXJQcm9jZXNzCiAgICAg
ICAgIGRyaXZlciA9IERyaXZlcihwb3J0LCAwLCBwaXhlbF90ZXN0cz1UcnVlKQogICAgICAgICBk
cml2ZXIuc3RhcnQoVHJ1ZSwgW10pCiAgICAgICAgIGxhc3RfdG1wZGlyID0gcG9ydC5fZmlsZXN5
c3RlbS5sYXN0X3RtcGRpcgpAQCAtMjc0LDcgKzI3NCw3IEBAIGNsYXNzIERyaXZlclRlc3QodW5p
dHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfdHdvX3N0YXJ0c19jbGVhbnNfdXBfcHJv
cGVybHkoc2VsZik6CiAgICAgICAgIHBvcnQgPSBUZXN0V2ViS2l0UG9ydCgpCi0gICAgICAgIHBv
cnQuX3NlcnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gTW9ja1NlcnZlclByb2Nlc3MKKyAgICAg
ICAgcG9ydC5fdGVzdF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IE1vY2tTZXJ2ZXJQcm9j
ZXNzCiAgICAgICAgIGRyaXZlciA9IERyaXZlcihwb3J0LCAwLCBwaXhlbF90ZXN0cz1UcnVlKQog
ICAgICAgICBkcml2ZXIuc3RhcnQoVHJ1ZSwgW10pCiAgICAgICAgIGxhc3RfdG1wZGlyID0gcG9y
dC5fZmlsZXN5c3RlbS5sYXN0X3RtcGRpcgpAQCAtMjgzLDcgKzI4Myw3IEBAIGNsYXNzIERyaXZl
clRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3Rfc3RhcnRfYWN0dWFsbHlf
c3RhcnRzKHNlbGYpOgogICAgICAgICBwb3J0ID0gVGVzdFdlYktpdFBvcnQoKQotICAgICAgICBw
b3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IE1vY2tTZXJ2ZXJQcm9jZXNzCisgICAg
ICAgIHBvcnQuX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJv
Y2VzcwogICAgICAgICBkcml2ZXIgPSBEcml2ZXIocG9ydCwgMCwgcGl4ZWxfdGVzdHM9VHJ1ZSkK
ICAgICAgICAgZHJpdmVyLnN0YXJ0KFRydWUsIFtdKQogICAgICAgICBzZWxmLmFzc2VydFRydWUo
ZHJpdmVyLl9zZXJ2ZXJfcHJvY2Vzcy5zdGFydGVkKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2lvcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvaW9zLnB5CShyZXZpc2lvbiAyMTAyNzQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvaW9zLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBAIGZyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzLm1vZGVscy50ZXN0X2MKIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgY29u
ZmlnIGFzIHBvcnRfY29uZmlnCiBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGRyaXZlciwgaW1h
Z2VfZGlmZgogZnJvbSB3ZWJraXRweS5wb3J0LmRhcndpbiBpbXBvcnQgRGFyd2luUG9ydAorZnJv
bSB3ZWJraXRweS5wb3J0LnNlcnZlcl9wcm9jZXNzIGltcG9ydCBTaW11bGF0b3JQcm9jZXNzCiBm
cm9tIHdlYmtpdHB5Lnhjb2RlLnNpbXVsYXRvciBpbXBvcnQgU2ltdWxhdG9yLCBSdW50aW1lLCBE
ZXZpY2VUeXBlCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uY3Jhc2hsb2dzIGltcG9ydCBD
cmFzaExvZ3MKIApAQCAtNzgsNyArNzksNiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndp
blBvcnQpOgogICAgIFNESyA9ICdpcGhvbmVzaW11bGF0b3InCiAKICAgICBTSU1VTEFUT1JfQlVO
RExFX0lEID0gJ2NvbS5hcHBsZS5pcGhvbmVzaW11bGF0b3InCi0gICAgcmVsYXlfbmFtZSA9ICdM
YXlvdXRUZXN0UmVsYXknCiAgICAgU0lNVUxBVE9SX0RJUkVDVE9SWSA9ICIvdG1wL1dlYktpdFRl
c3RpbmdTaW11bGF0b3JzLyIKICAgICBMU1JFR0lTVEVSX1BBVEggPSAiL1N5c3RlbS9MaWJyYXJ5
L0ZyYW1ld29ya3MvQ29yZVNlcnZpY2VzLmZyYW1ld29yay9GcmFtZXdvcmtzL0xhdW5jaFNlcnZp
Y2VzLmZyYW1ld29yay9WZXJzaW9ucy9DdXJyZW50L1N1cHBvcnQvbHNyZWdpc3RlciIKICAgICBQ
Uk9DRVNTX0NPVU5UX0VTVElNQVRFX1BFUl9TSU1VTEFUT1JfSU5TVEFOQ0UgPSAxMDAKQEAgLTk3
LDYgKzk3LDcgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKIAogICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKToKICAgICAgICAgRGFy
d2luUG9ydC5fX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKQorICAgICAg
ICBzZWxmLl90ZXN0X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gU2ltdWxhdG9yUHJvY2Vz
cwogCiAgICAgICAgIG9wdGlvbmFsX2RldmljZV9jbGFzcyA9IHNlbGYuZ2V0X29wdGlvbignZGV2
aWNlX2NsYXNzJykKICAgICAgICAgc2VsZi5fcHJpbnRpbmdfY21kX2xpbmUgPSBGYWxzZQpAQCAt
MTQ4LDE2ICsxNDksNiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAg
ICAgICAgICAgZGV2aWNlX3R5cGUgPSBEZXZpY2VUeXBlLmZyb21fbmFtZShkZXZpY2VfbmFtZSkK
ICAgICAgICAgcmV0dXJuIGRldmljZV90eXBlCiAKLSAgICBAcHJvcGVydHkKLSAgICBAbWVtb2l6
ZWQKLSAgICBkZWYgcmVsYXlfcGF0aChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fcm9vdF93YXNf
c2V0OgotICAgICAgICAgICAgcGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0uYWJzcGF0aChzZWxmLmdl
dF9vcHRpb24oJ3Jvb3QnKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1hY19jb25maWcg
PSBwb3J0X2NvbmZpZy5Db25maWcoc2VsZi5fZXhlY3V0aXZlLCBzZWxmLl9maWxlc3lzdGVtLCAn
bWFjJykKLSAgICAgICAgICAgIHBhdGggPSBtYWNfY29uZmlnLmJ1aWxkX2RpcmVjdG9yeShzZWxm
LmdldF9vcHRpb24oJ2NvbmZpZ3VyYXRpb24nKSkKLSAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVz
eXN0ZW0uam9pbihwYXRoLCBzZWxmLnJlbGF5X25hbWUpCi0KICAgICBAbWVtb2l6ZWQKICAgICBk
ZWYgY2hpbGRfcHJvY2Vzc2VzKHNlbGYpOgogICAgICAgICByZXR1cm4gaW50KHNlbGYuZ2V0X29w
dGlvbignY2hpbGRfcHJvY2Vzc2VzJykpCkBAIC0xODIsMTkgKzE3Myw2IEBAIGNsYXNzIElPU1Np
bXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAKICAgICAgICAgcmV0dXJuIG1pbihtYXhpbXVtX3Np
bXVsYXRvcl9jb3VudF9vbl90aGlzX3N5c3RlbSwgYmVzdF9jaGlsZF9wcm9jZXNzX2NvdW50X2Zv
cl9jcHUpCiAKLSAgICBkZWYgX2NoZWNrX3JlbGF5KHNlbGYpOgotICAgICAgICBpZiBub3Qgc2Vs
Zi5fZmlsZXN5c3RlbS5leGlzdHMoc2VsZi5yZWxheV9wYXRoKToKLSAgICAgICAgICAgIF9sb2cu
ZXJyb3IoIiVzIHdhcyBub3QgZm91bmQgYXQgJXMiICUgKHNlbGYucmVsYXlfbmFtZSwgc2VsZi5y
ZWxheV9wYXRoKSkKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1
ZQotCi0gICAgZGVmIF9jaGVja19wb3J0X2J1aWxkKHNlbGYpOgotICAgICAgICBpZiBub3Qgc2Vs
Zi5fcm9vdF93YXNfc2V0IGFuZCBzZWxmLmdldF9vcHRpb24oJ2J1aWxkJykgYW5kIG5vdCBzZWxm
Ll9idWlsZF9yZWxheSgpOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIGlmIG5v
dCBzZWxmLl9jaGVja19yZWxheSgpOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAg
IHJldHVybiBUcnVlCi0KICAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBz
dGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbj10aW1lLnRpbWUsIHNsZWVwX2ZuPXRp
bWUuc2xlZXAsIHdhaXRfZm9yX2xvZz1UcnVlKToKICAgICAgICAgdGltZV9mbiA9IHRpbWVfZm4g
b3IgdGltZS50aW1lCiAgICAgICAgIHNsZWVwX2ZuID0gc2xlZXBfZm4gb3IgdGltZS5zbGVlcApA
QCAtMjE1LDcgKzE5Myw3IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAg
ICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X2NyYXNoX2xvZyhjcmFzaGVkX3N1YnByb2Nlc3Nf
bmFtZV9hbmRfcGlkWzBdLCBjcmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlkWzFdLCBzdGRv
dXQsCiAgICAgICAgICAgICAgICAgJ1xuJy5qb2luKHN0ZGVycl9saW5lcyksIG5ld2VyX3RoYW4s
IHRpbWVfZm4sIHNsZWVwX2ZuLCB3YWl0X2Zvcl9sb2cpCiAKLSAgICAgICAgIyBMYXlvdXRUZXN0
UmVsYXkgY3Jhc2hlZAorICAgICAgICAjIEFwcCBjcmFzaGVkCiAgICAgICAgIF9sb2cuZGVidWco
J2xvb2tpbmcgZm9yIGNyYXNoIGxvZyBmb3IgJXM6JXMnICUgKG5hbWUsIHN0cihwaWQpKSkKICAg
ICAgICAgY3Jhc2hfbG9nID0gJycKICAgICAgICAgY3Jhc2hfbG9ncyA9IENyYXNoTG9ncyhzZWxm
Lmhvc3QpCkBAIC0yMzMsMjQgKzIxMSw5IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2lu
UG9ydCk6CiAgICAgICAgICAgICByZXR1cm4gc3RkZXJyLCBOb25lCiAgICAgICAgIHJldHVybiBz
dGRlcnIsIGNyYXNoX2xvZwogCi0gICAgZGVmIF9idWlsZF9yZWxheShzZWxmKToKLSAgICAgICAg
ZW52aXJvbm1lbnQgPSBzZWxmLmhvc3QuY29weV9jdXJyZW50X2Vudmlyb25tZW50KCkKLSAgICAg
ICAgZW52aXJvbm1lbnQuZGlzYWJsZV9nY2Nfc21hcnRxdW90ZXMoKQotICAgICAgICBlbnYgPSBl
bnZpcm9ubWVudC50b19kaWN0aW9uYXJ5KCkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAj
IEZJWE1FOiBXZSBzaG91bGQgYmUgcGFzc2luZyBfYXJndW1lbnRzX2Zvcl9jb25maWd1cmF0aW9u
KCksIHdoaWNoIHJlc3BlY3RzIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIHBvcnQsCi0gICAgICAg
ICAgICAjIGluc3RlYWQgb2YgaGFyZGNvZGluZyAtLWlvcy1zaW11bGF0b3IuCi0gICAgICAgICAg
ICBzZWxmLl9ydW5fc2NyaXB0KCJidWlsZC1sYXlvdXR0ZXN0cmVsYXkiLCBhcmdzPVsiLS1pb3Mt
c2ltdWxhdG9yIl0sIGVudj1lbnYpCi0gICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvciwgZToKLSAg
ICAgICAgICAgIF9sb2cuZXJyb3IoZS5tZXNzYWdlX3dpdGhfb3V0cHV0KG91dHB1dF9saW1pdD1O
b25lKSkKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1ZQotCiAg
ICAgZGVmIF9idWlsZF9kcml2ZXIoc2VsZik6CiAgICAgICAgIGJ1aWx0X3Rvb2wgPSBzdXBlcihJ
T1NTaW11bGF0b3JQb3J0LCBzZWxmKS5fYnVpbGRfZHJpdmVyKCkKLSAgICAgICAgYnVpbHRfcmVs
YXkgPSBzZWxmLl9idWlsZF9yZWxheSgpCi0gICAgICAgIHJldHVybiBidWlsdF90b29sIGFuZCBi
dWlsdF9yZWxheQorICAgICAgICByZXR1cm4gYnVpbHRfdG9vbAogCiAgICAgZGVmIF9idWlsZF9k
cml2ZXJfZmxhZ3Moc2VsZik6CiAgICAgICAgIGFyY2hzID0gWydBUkNIUz1pMzg2J10gaWYgc2Vs
Zi5hcmNoaXRlY3R1cmUoKSA9PSAneDg2JyBlbHNlIFtdCkBAIC0yODAsOSArMjQzLDkgQEAgY2xh
c3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKIAogICAgIGRlZiBfY3JlYXRlX3NpbXVs
YXRvcnMoc2VsZik6CiAgICAgICAgIGlmIChzZWxmLmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKCkg
PCBzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKToKLSAgICAgICAgICAgICAgICBfbG9nLndhcm4oIllv
dSBoYXZlIHNwZWNpZmllZCB2ZXJ5IGhpZ2ggdmFsdWUoezB9KSBmb3IgLS1jaGlsZC1wcm9jZXNz
ZXMiLmZvcm1hdChzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKSkKLSAgICAgICAgICAgICAgICBfbG9n
Lndhcm4oIm1heGltdW0gY2hpbGQtcHJvY2Vzc2VzIHdoaWNoIGNhbiBiZSBzdXBwb3J0ZWQgb24g
dGhpcyBzeXN0ZW0gYXJlOiB7MH0iLmZvcm1hdChzZWxmLmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2Vz
KCkpKQotICAgICAgICAgICAgICAgIF9sb2cud2FybigiVGhpcyBpcyB2ZXJ5IGxpa2VseSB0byBm
YWlsLiIpCisgICAgICAgICAgICBfbG9nLndhcm4oIllvdSBoYXZlIHNwZWNpZmllZCB2ZXJ5IGhp
Z2ggdmFsdWUoezB9KSBmb3IgLS1jaGlsZC1wcm9jZXNzZXMiLmZvcm1hdChzZWxmLmNoaWxkX3By
b2Nlc3NlcygpKSkKKyAgICAgICAgICAgIF9sb2cud2FybigibWF4aW11bSBjaGlsZC1wcm9jZXNz
ZXMgd2hpY2ggY2FuIGJlIHN1cHBvcnRlZCBvbiB0aGlzIHN5c3RlbSBhcmU6IHswfSIuZm9ybWF0
KHNlbGYuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKSkpCisgICAgICAgICAgICBfbG9nLndhcm4o
IlRoaXMgaXMgdmVyeSBsaWtlbHkgdG8gZmFpbC4iKQogCiAgICAgICAgIGlmIHNlbGYuX3VzaW5n
X2RlZGljYXRlZF9zaW11bGF0b3JzKCk6CiAgICAgICAgICAgICBzZWxmLl9jcmVhdGVTaW11bGF0
b3JBcHBzKCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3Qu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc191bml0dGVz
dC5weQkocmV2aXNpb24gMjEwMjc0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lv
c191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBjbGFzcyBpb3NU
ZXN0KGRhcndpbl90ZXN0Y2FzZS5EYXJ3aW5UZXN0CiAgICAgICAgIHBvcnQuX3J1bl9zY3JpcHQg
PSBydW5fc2NyaXB0CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5hcmNoaXRlY3R1cmUo
KSwgJ3g4NicpCiAgICAgICAgIHBvcnQuX2J1aWxkX2RyaXZlcigpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoc2VsZi5hcmdzLCBbJy0taW9zLXNpbXVsYXRvciddKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHNlbGYuYXJncywgWydBUkNIUz1pMzg2JywgJy0tc2RrJywgJ2lwaG9uZXNpbXVs
YXRvciddKQogCiAgICAgZGVmIHRlc3RfNjRiaXQoc2VsZik6CiAgICAgICAgICMgQXBwbGUgTWFj
IHBvcnQgaXMgNjQtYml0IGJ5IGRlZmF1bHQKQEAgLTgyLDcgKzgyLDcgQEAgY2xhc3MgaW9zVGVz
dChkYXJ3aW5fdGVzdGNhc2UuRGFyd2luVGVzdAogCiAgICAgICAgIHBvcnQuX3J1bl9zY3JpcHQg
PSBydW5fc2NyaXB0CiAgICAgICAgIHBvcnQuX2J1aWxkX2RyaXZlcigpCi0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoc2VsZi5hcmdzLCBbJy0taW9zLXNpbXVsYXRvciddKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHNlbGYuYXJncywgWyctLXNkaycsICdpcGhvbmVzaW11bGF0b3InXSkKIAog
ICAgIGRlZiB0ZXN0X3Nka19uYW1lKHNlbGYpOgogICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3Bv
cnQoKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vz
cy5weQkocmV2aXNpb24gMjEwMjc0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3Nl
cnZlcl9wcm9jZXNzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC01MiwxMiArNTIsNyBAQCBmcm9tIHdl
YmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dn
ZXIoX19uYW1lX18pCiAKIAotY2xhc3MgU2VydmVyUHJvY2VzcyhvYmplY3QpOgotICAgICIiIlRo
aXMgY2xhc3MgcHJvdmlkZXMgYSB3cmFwcGVyIGFyb3VuZCBhIHN1YnByb2Nlc3MgdGhhdAotICAg
IGltcGxlbWVudHMgYSBzaW1wbGUgcmVxdWVzdC9yZXNwb25zZSB1c2FnZSBtb2RlbC4gVGhlIHBy
aW1hcnkgYmVuZWZpdAotICAgIGlzIHRoYXQgcmVhZGluZyByZXNwb25zZXMgdGFrZXMgYSBkZWFk
bGluZSwgc28gdGhhdCB3ZSBkb24ndCBldmVyIGJsb2NrCi0gICAgaW5kZWZpbml0ZWx5LiBUaGUg
Y2xhc3MgYWxzbyBoYW5kbGVzIHRyYW5zcGFyZW50bHkgcmVzdGFydGluZyBwcm9jZXNzZXMKLSAg
ICBhcyBuZWNlc3NhcnkgdG8ga2VlcCBpc3N1aW5nIGNvbW1hbmRzLiIiIgorY2xhc3MgU2VydmVy
UHJvY2Vzc0Jhc2Uob2JqZWN0KToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X29iaiwg
bmFtZSwgY21kLCBlbnY9Tm9uZSwgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNlLCB0cmVhdF9ub19k
YXRhX2FzX2NyYXNoPUZhbHNlKToKICAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnRfb2JqCkBAIC03
MCwxMSArNjUsMjggQEAgY2xhc3MgU2VydmVyUHJvY2VzcyhvYmplY3QpOgogICAgICAgICBzZWxm
Ll90cmVhdF9ub19kYXRhX2FzX2NyYXNoID0gdHJlYXRfbm9fZGF0YV9hc19jcmFzaAogICAgICAg
ICBzZWxmLl9ob3N0ID0gc2VsZi5fcG9ydC5ob3N0CiAgICAgICAgIHNlbGYuX3BpZCA9IE5vbmUK
LSAgICAgICAgc2VsZi5fcmVzZXQoKQogCi0gICAgICAgICMgU2VlIGNvbW1lbnQgaW4gaW1wb3J0
cyBmb3Igd2h5IHdlIG5lZWQgdGhlIHdpbjMyIEFQSXMgYW5kIGNhbid0IGp1c3QgdXNlIHNlbGVj
dC4KLSAgICAgICAgIyBGSVhNRTogdGhlcmUgc2hvdWxkIGJlIGEgd2F5IHRvIGdldCB3aW4zMiB2
cy4gY3lnd2luIGZyb20gcGxhdGZvcm1pbmZvLgotICAgICAgICBzZWxmLl91c2Vfd2luMzJfYXBp
cyA9IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKQorICAgIGRlZiBpc19zdGFydGVkKHNl
bGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX3N0YXJ0
KHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgcG9s
bChzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF93
cml0ZShzZWxmLCBieXRlcyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKwor
ICAgIGRlZiBfZ3JhYkRhdGEoc2VsZiwgZGVhZGxpbmUpOgorICAgICAgICByYWlzZSBOb3RJbXBs
ZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX2tpbGwoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdElt
cGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfaGFuZGxlX3Bvc3NpYmxlX2ludGVycnVwdChzZWxm
KToKKyAgICAgICAgIyBVc2VkIHRvIGNhdGNoIGtleWJvYXJkIGludGVydXB0cywgaWYgYXBwbGlj
YWJsZQorICAgICAgICBwYXNzCiAKICAgICBkZWYgbmFtZShzZWxmKToKICAgICAgICAgcmV0dXJu
IHNlbGYuX25hbWUKQEAgLTgzLDE4ICs5NSw2IEBAIGNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0
KToKICAgICAgICAgcmV0dXJuIHNlbGYuX3BpZAogCiAgICAgZGVmIF9yZXNldChzZWxmKToKLSAg
ICAgICAgaWYgZ2V0YXR0cihzZWxmLCAnX3Byb2MnLCBOb25lKToKLSAgICAgICAgICAgIGlmIHNl
bGYuX3Byb2Muc3RkaW46Ci0gICAgICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRpbi5jbG9zZSgp
Ci0gICAgICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRpbiA9IE5vbmUKLSAgICAgICAgICAgIGlm
IHNlbGYuX3Byb2Muc3Rkb3V0OgotICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3Rkb3V0LmNs
b3NlKCkKLSAgICAgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZG91dCA9IE5vbmUKLSAgICAgICAg
ICAgIGlmIHNlbGYuX3Byb2Muc3RkZXJyOgotICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3Rk
ZXJyLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGVyciA9IE5vbmUKLQot
ICAgICAgICBzZWxmLl9wcm9jID0gTm9uZQogICAgICAgICBzZWxmLl9vdXRwdXQgPSBzdHIoKSAg
IyBieXRlc2FycmF5KCkgb25jZSB3ZSByZXF1aXJlIFB5dGhvbiAyLjYKICAgICAgICAgc2VsZi5f
ZXJyb3IgPSBzdHIoKSAgIyBieXRlc2FycmF5KCkgb25jZSB3ZSByZXF1aXJlIFB5dGhvbiAyLjYK
ICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IEZhbHNlCkBAIC0xMDMsNTQgKzEwMywxMSBAQCBjbGFz
cyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6CiAgICAgZGVmIHByb2Nlc3NfbmFtZShzZWxmKToKICAg
ICAgICAgcmV0dXJuIHNlbGYuX25hbWUKIAotICAgIGRlZiBfc3RhcnQoc2VsZik6Ci0gICAgICAg
IGlmIHNlbGYuX3Byb2M6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCIlcyBhbHJlYWR5
IHJ1bm5pbmciICUgc2VsZi5fbmFtZSkKLSAgICAgICAgc2VsZi5fcmVzZXQoKQotICAgICAgICAj
IGNsb3NlX2ZkcyBpcyBhIHdvcmthcm91bmQgZm9yIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNz
dWUyMzIwCi0gICAgICAgIGNsb3NlX2ZkcyA9IG5vdCBzZWxmLl9ob3N0LnBsYXRmb3JtLmlzX3dp
bigpCi0gICAgICAgIHNlbGYuX3Byb2MgPSBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5wb3BlbihzZWxm
Ll9jbWQsIHN0ZGluPXNlbGYuX2hvc3QuZXhlY3V0aXZlLlBJUEUsCi0gICAgICAgICAgICBzdGRv
dXQ9c2VsZi5faG9zdC5leGVjdXRpdmUuUElQRSwKLSAgICAgICAgICAgIHN0ZGVycj1zZWxmLl9o
b3N0LmV4ZWN1dGl2ZS5QSVBFLAotICAgICAgICAgICAgY2xvc2VfZmRzPWNsb3NlX2ZkcywKLSAg
ICAgICAgICAgIGVudj1zZWxmLl9lbnYsCi0gICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGluZXM9
c2VsZi5fdW5pdmVyc2FsX25ld2xpbmVzKQotICAgICAgICBzZWxmLl9waWQgPSBzZWxmLl9wcm9j
LnBpZAotICAgICAgICBzZWxmLl9wb3J0LmZpbmRfc3lzdGVtX3BpZChzZWxmLm5hbWUoKSwgc2Vs
Zi5fcGlkKQotICAgICAgICBmZCA9IHNlbGYuX3Byb2Muc3Rkb3V0LmZpbGVubygpCi0gICAgICAg
IGlmIG5vdCBzZWxmLl91c2Vfd2luMzJfYXBpczoKLSAgICAgICAgICAgIGZsID0gZmNudGwuZmNu
dGwoZmQsIGZjbnRsLkZfR0VURkwpCi0gICAgICAgICAgICBmY250bC5mY250bChmZCwgZmNudGwu
Rl9TRVRGTCwgZmwgfCBvcy5PX05PTkJMT0NLKQotICAgICAgICAgICAgZmQgPSBzZWxmLl9wcm9j
LnN0ZGVyci5maWxlbm8oKQotICAgICAgICAgICAgZmwgPSBmY250bC5mY250bChmZCwgZmNudGwu
Rl9HRVRGTCkKLSAgICAgICAgICAgIGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX1NFVEZMLCBmbCB8
IG9zLk9fTk9OQkxPQ0spCi0KLSAgICBkZWYgX2hhbmRsZV9wb3NzaWJsZV9pbnRlcnJ1cHQoc2Vs
Zik6Ci0gICAgICAgICIiIlRoaXMgcm91dGluZSBjaGVja3MgdG8gc2VlIGlmIHRoZSBwcm9jZXNz
IGNyYXNoZWQgb3IgZXhpdGVkCi0gICAgICAgIGJlY2F1c2Ugb2YgYSBrZXlib2FyZCBpbnRlcnJ1
cHQgYW5kIHJhaXNlcyBLZXlib2FyZEludGVycnVwdAotICAgICAgICBhY2NvcmRpbmdseS4iIiIK
LSAgICAgICAgIyBGSVhNRTogTGludXggYW5kIE1hYyBzZXQgdGhlIHJldHVybmNvZGUgdG8gLXNp
Z25hbC5TSUdJTlQgaWYgYQotICAgICAgICAjIHN1YnByb2Nlc3MgaXMga2lsbGVkIHdpdGggYSBj
dHJsXkMuICBQcmV2aW91cyBjb21tZW50cyBpbiB0aGlzCi0gICAgICAgICMgcm91dGluZSBzYWlk
IHRoYXQgc3VwcG9zZWRseSBXaW5kb3dzIHJldHVybnMgMHhjMDAwMDAxZCwgYnV0IHRoYXQncyBu
b3Qgd2hhdAotICAgICAgICAjIC0xMDczNzQxNTEwIGV2YWx1YXRlcyB0by4gRmlndXJlIG91dCB3
aGF0IHRoZSByaWdodCB2YWx1ZSBpcwotICAgICAgICAjIGZvciB3aW4zMiBhbmQgY3lnd2luIGhl
cmUgLi4uCi0gICAgICAgIGlmIHNlbGYuX3Byb2MucmV0dXJuY29kZSBpbiAoLTEwNzM3NDE1MTAs
IC1zaWduYWwuU0lHSU5UKToKLSAgICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0Ci0K
LSAgICBkZWYgcG9sbChzZWxmKToKLSAgICAgICAgIiIiQ2hlY2sgdG8gc2VlIGlmIHRoZSB1bmRl
cmx5aW5nIHByb2Nlc3MgaXMgcnVubmluZzsgcmV0dXJucyBOb25lCi0gICAgICAgIGlmIGl0IHN0
aWxsIGlzICh3cmFwcGVyIGFyb3VuZCBzdWJwcm9jZXNzLnBvbGwpLiIiIgotICAgICAgICBpZiBz
ZWxmLl9wcm9jOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2MucG9sbCgpCi0gICAgICAg
IHJldHVybiBOb25lCi0KICAgICBkZWYgd3JpdGUoc2VsZiwgYnl0ZXMsIGlnbm9yZV9jcmFzaD1G
YWxzZSk6Ci0gICAgICAgICIiIldyaXRlIGEgcmVxdWVzdCB0byB0aGUgc3VicHJvY2Vzcy4gVGhl
IHN1YnByb2Nlc3MgaXMgKHJlLSlzdGFydCgpJ2VkCi0gICAgICAgIGlmIGlzIG5vdCBhbHJlYWR5
IHJ1bm5pbmcuIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLl9wcm9jOgorICAgICAgICBpZiBub3Qg
c2VsZi5pc19zdGFydGVkKCk6CiAgICAgICAgICAgICBzZWxmLl9zdGFydCgpCiAgICAgICAgIHRy
eToKLSAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4ud3JpdGUoYnl0ZXMpCisgICAgICAgICAg
ICBzZWxmLl93cml0ZShieXRlcykKICAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6CiAgICAgICAg
ICAgICBzZWxmLnN0b3AoMC4wKQogICAgICAgICAgICAgIyBzdG9wKCkgY2FsbHMgX3Jlc2V0KCks
IHNvIHdlIGhhdmUgdG8gc2V0IGNyYXNoZWQgdG8gVHJ1ZSBhZnRlciBjYWxsaW5nIHN0b3AoKQpA
QCAtMTU5LDYgKzExNiwxMCBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6CiAgICAgICAg
ICAgICAgICAgX2xvZy5kZWJ1ZygnVGhpcyB0ZXN0IG1hcmtlZCBhcyBhIGNyYXNoIGJlY2F1c2Ug
b2YgYSBicm9rZW4gcGlwZSB3aGVuIHdyaXRpbmcgdG8gc3RkaW4gb2YgdGhlIHNlcnZlciBwcm9j
ZXNzLicpCiAgICAgICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUKIAorICAgIGRlZiBz
dGFydChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuaXNfc3RhcnRlZCgpOgorICAgICAgICAg
ICAgc2VsZi5fc3RhcnQoKQorCiAgICAgZGVmIF9wb3Bfc3Rkb3V0X2xpbmVfaWZfcmVhZHkoc2Vs
Zik6CiAgICAgICAgIGluZGV4X2FmdGVyX25ld2xpbmUgPSBzZWxmLl9vdXRwdXQuZmluZCgnXG4n
KSArIDEKICAgICAgICAgaWYgaW5kZXhfYWZ0ZXJfbmV3bGluZSA+IDA6CkBAIC0yMTYsNyArMTc3
LDcgQEAgY2xhc3MgU2VydmVyUHJvY2VzcyhvYmplY3QpOgogICAgIGRlZiBfaGFuZGxlX3RpbWVv
dXQoc2VsZik6CiAgICAgICAgIHNlbGYudGltZWRfb3V0ID0gVHJ1ZQogICAgICAgICBpZiBzZWxm
Ll9wb3J0LmdldF9vcHRpb24oInNhbXBsZV9vbl90aW1lb3V0Iik6Ci0gICAgICAgICAgICBzZWxm
Ll9wb3J0LnNhbXBsZV9wcm9jZXNzKHNlbGYuX25hbWUsIHNlbGYuX3Byb2MucGlkKQorICAgICAg
ICAgICAgc2VsZi5fcG9ydC5zYW1wbGVfcHJvY2VzcyhzZWxmLl9uYW1lLCBzZWxmLnBpZCgpKQog
CiAgICAgZGVmIF9zcGxpdF9zdHJpbmdfYWZ0ZXJfaW5kZXgoc2VsZiwgc3RyaW5nLCBpbmRleCk6
CiAgICAgICAgIHJldHVybiBzdHJpbmdbOmluZGV4XSwgc3RyaW5nW2luZGV4Ol0KQEAgLTIyOSw2
ICsxOTAsMTQxIEBAIGNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToKICAgICAgICAgb3V0cHV0
LCBzZWxmLl9lcnJvciA9IHNlbGYuX3NwbGl0X3N0cmluZ19hZnRlcl9pbmRleChzZWxmLl9lcnJv
ciwgYnl0ZXNfY291bnQpCiAgICAgICAgIHJldHVybiBvdXRwdXQKIAorICAgIGRlZiBoYXNfY3Jh
c2hlZChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX2NyYXNoZWQgYW5kIHNlbGYucG9sbCgp
OgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygnVGhpcyB0ZXN0IG1hcmtlZCBhcyBhIGNyYXNoIGJl
Y2F1c2Ugb2YgZmFpbHVyZSB0byBwb2xsIHRoZSBzZXJ2ZXIgcHJvY2Vzcy4nKQorICAgICAgICAg
ICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9wb3NzaWJs
ZV9pbnRlcnJ1cHQoKQorICAgICAgICByZXR1cm4gc2VsZi5fY3Jhc2hlZAorCisgICAgZGVmIF9y
ZWFkKHNlbGYsIGRlYWRsaW5lLCBmZXRjaF9ieXRlc19mcm9tX2J1ZmZlcnNfY2FsbGJhY2spOgor
ICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgaWYgc2VsZi5oYXNfY3Jhc2hlZCgpOgor
ICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgICAgIGlmIHRpbWUudGltZSgp
ID4gZGVhZGxpbmU6CisgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX3RpbWVvdXQoKQorICAg
ICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgICAgIGJ5dGVzID0gZmV0Y2hfYnl0
ZXNfZnJvbV9idWZmZXJzX2NhbGxiYWNrKCkKKyAgICAgICAgICAgIGlmIGJ5dGVzIGlzIG5vdCBO
b25lOgorICAgICAgICAgICAgICAgIHJldHVybiBieXRlcworCisgICAgICAgICAgICBzZWxmLl9n
cmFiRGF0YShkZWFkbGluZSkKKworICAgIGRlZiBzdG9wKHNlbGYsIHRpbWVvdXRfc2Vjcz0zLjAp
OgorICAgICAgICBpZiBub3Qgc2VsZi5pc19zdGFydGVkKCk6CisgICAgICAgICAgICByZXR1cm4g
KE5vbmUsIE5vbmUpCisKKyAgICAgICAgIyBPbmx5IGJvdGhlciB0byBjaGVjayBmb3IgbGVha3Mg
b3Igc3RkZXJyIGlmIHRoZSBwcm9jZXNzIGlzIHN0aWxsIHJ1bm5pbmcuCisgICAgICAgIGlmIHNl
bGYucG9sbCgpIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9wb3J0LmNoZWNrX2Zvcl9sZWFr
cyhzZWxmLm5hbWUoKSwgc2VsZi5waWQoKSkKKworICAgICAgICBvdXQgPSBbXQorICAgICAgICBl
cnIgPSBbXQorCisgICAgICAgIG5vdyA9IHRpbWUudGltZSgpCisgICAgICAgIGtpbGxlZCA9IEZh
bHNlCisgICAgICAgIGlmIHRpbWVvdXRfc2VjczoKKyAgICAgICAgICAgIGRlYWRsaW5lID0gbm93
ICsgdGltZW91dF9zZWNzCisgICAgICAgICAgICB3aGlsZSBzZWxmLnBvbGwoKSBpcyBOb25lIGFu
ZCB0aW1lLnRpbWUoKSA8IGRlYWRsaW5lOgorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4w
MSkKKyAgICAgICAgICAgIGlmIHNlbGYucG9sbCgpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAg
X2xvZy53YXJuaW5nKCdzdG9wcGluZyAlcyhwaWQgJWQpIHRpbWVkIG91dCwga2lsbGluZyBpdCcg
JSAoc2VsZi5fbmFtZSwgc2VsZi5fcGlkKSkKKworICAgICAgICBpZiBzZWxmLnBvbGwoKSBpcyBO
b25lOgorICAgICAgICAgICAgc2VsZi5fa2lsbCgpCisgICAgICAgICAgICBraWxsZWQgPSBUcnVl
CisgICAgICAgICAgICBfbG9nLmRlYnVnKCdraWxsZWQgcGlkICVkJyAlIHNlbGYuX3BpZCkKKwor
ICAgICAgICAjIHJlYWQgYW55IHJlbWFpbmluZyBkYXRhIG9uIHRoZSBwaXBlcyBhbmQgcmV0dXJu
IGl0LgorICAgICAgICBpZiBub3Qga2lsbGVkOgorICAgICAgICAgICAgc2VsZi5fZ3JhYkRhdGEo
bm93KQorICAgICAgICAgICAgb3V0LCBlcnIgPSBzZWxmLl9vdXRwdXQsIHNlbGYuX2Vycm9yCisg
ICAgICAgICAgICBzZWxmLl9yZXNldCgpCisgICAgICAgIHJldHVybiAob3V0LCBlcnIpCisKKyAg
ICBkZWYga2lsbChzZWxmKToKKyAgICAgICAgc2VsZi5zdG9wKDAuMCkKKworCitjbGFzcyBTZXJ2
ZXJQcm9jZXNzKFNlcnZlclByb2Nlc3NCYXNlKToKKyAgICAiIiJUaGlzIGNsYXNzIHByb3ZpZGVz
IGEgd3JhcHBlciBhcm91bmQgYSBzdWJwcm9jZXNzIHRoYXQKKyAgICBpbXBsZW1lbnRzIGEgc2lt
cGxlIHJlcXVlc3QvcmVzcG9uc2UgdXNhZ2UgbW9kZWwuIFRoZSBwcmltYXJ5IGJlbmVmaXQKKyAg
ICBpcyB0aGF0IHJlYWRpbmcgcmVzcG9uc2VzIHRha2VzIGEgZGVhZGxpbmUsIHNvIHRoYXQgd2Ug
ZG9uJ3QgZXZlciBibG9jaworICAgIGluZGVmaW5pdGVseS4gVGhlIGNsYXNzIGFsc28gaGFuZGxl
cyB0cmFuc3BhcmVudGx5IHJlc3RhcnRpbmcgcHJvY2Vzc2VzCisgICAgYXMgbmVjZXNzYXJ5IHRv
IGtlZXAgaXNzdWluZyBjb21tYW5kcy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0
X29iaiwgbmFtZSwgY21kLCBlbnY9Tm9uZSwgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNlLCB0cmVh
dF9ub19kYXRhX2FzX2NyYXNoPUZhbHNlKToKKyAgICAgICAgc3VwZXIoU2VydmVyUHJvY2Vzcywg
c2VsZikuX19pbml0X18ocG9ydF9vYmosIG5hbWUsIGNtZCwgZW52LCB1bml2ZXJzYWxfbmV3bGlu
ZXMsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2gpCisKKyAgICAgICAgIyBTZWUgY29tbWVudCBpbiBp
bXBvcnRzIGZvciB3aHkgd2UgbmVlZCB0aGUgd2luMzIgQVBJcyBhbmQgY2FuJ3QganVzdCB1c2Ug
c2VsZWN0LgorICAgICAgICAjIEZJWE1FOiB0aGVyZSBzaG91bGQgYmUgYSB3YXkgdG8gZ2V0IHdp
bjMyIHZzLiBjeWd3aW4gZnJvbSBwbGF0Zm9ybWluZm8uCisgICAgICAgIHNlbGYuX3VzZV93aW4z
Ml9hcGlzID0gc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpCisgICAgICAgIHNlbGYuX3Jl
c2V0KCkKKworICAgIGRlZiBpc19zdGFydGVkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5f
cHJvYworCisgICAgZGVmIF9yZXNldChzZWxmKToKKyAgICAgICAgaWYgZ2V0YXR0cihzZWxmLCAn
X3Byb2MnLCBOb25lKToKKyAgICAgICAgICAgIGlmIHNlbGYuX3Byb2Muc3RkaW46CisgICAgICAg
ICAgICAgICAgc2VsZi5fcHJvYy5zdGRpbi5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5f
cHJvYy5zdGRpbiA9IE5vbmUKKyAgICAgICAgICAgIGlmIHNlbGYuX3Byb2Muc3Rkb3V0OgorICAg
ICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3Rkb3V0LmNsb3NlKCkKKyAgICAgICAgICAgICAgICBz
ZWxmLl9wcm9jLnN0ZG91dCA9IE5vbmUKKyAgICAgICAgICAgIGlmIHNlbGYuX3Byb2Muc3RkZXJy
OgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkZXJyLmNsb3NlKCkKKyAgICAgICAgICAg
ICAgICBzZWxmLl9wcm9jLnN0ZGVyciA9IE5vbmUKKworICAgICAgICBzZWxmLl9wcm9jID0gTm9u
ZQorICAgICAgICBzdXBlcihTZXJ2ZXJQcm9jZXNzLCBzZWxmKS5fcmVzZXQoKQorCisgICAgZGVm
IF9zdGFydChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fcHJvYzoKKyAgICAgICAgICAgIHJhaXNl
IFZhbHVlRXJyb3IoIiVzIGFscmVhZHkgcnVubmluZyIgJSBzZWxmLl9uYW1lKQorICAgICAgICBz
ZWxmLl9yZXNldCgpCisgICAgICAgICMgY2xvc2VfZmRzIGlzIGEgd29ya2Fyb3VuZCBmb3IgaHR0
cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIzMjAKKyAgICAgICAgY2xvc2VfZmRzID0gbm90IHNl
bGYuX2hvc3QucGxhdGZvcm0uaXNfd2luKCkKKyAgICAgICAgc2VsZi5fcHJvYyA9IHNlbGYuX2hv
c3QuZXhlY3V0aXZlLnBvcGVuKHNlbGYuX2NtZCwgc3RkaW49c2VsZi5faG9zdC5leGVjdXRpdmUu
UElQRSwKKyAgICAgICAgICAgIHN0ZG91dD1zZWxmLl9ob3N0LmV4ZWN1dGl2ZS5QSVBFLAorICAg
ICAgICAgICAgc3RkZXJyPXNlbGYuX2hvc3QuZXhlY3V0aXZlLlBJUEUsCisgICAgICAgICAgICBj
bG9zZV9mZHM9Y2xvc2VfZmRzLAorICAgICAgICAgICAgZW52PXNlbGYuX2VudiwKKyAgICAgICAg
ICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1zZWxmLl91bml2ZXJzYWxfbmV3bGluZXMpCisgICAgICAg
IHNlbGYuX3BpZCA9IHNlbGYuX3Byb2MucGlkCisgICAgICAgIHNlbGYuX3BvcnQuZmluZF9zeXN0
ZW1fcGlkKHNlbGYubmFtZSgpLCBzZWxmLl9waWQpCisgICAgICAgIGZkID0gc2VsZi5fcHJvYy5z
dGRvdXQuZmlsZW5vKCkKKyAgICAgICAgaWYgbm90IHNlbGYuX3VzZV93aW4zMl9hcGlzOgorICAg
ICAgICAgICAgZmwgPSBmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGTCkKKyAgICAgICAgICAg
IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX1NFVEZMLCBmbCB8IG9zLk9fTk9OQkxPQ0spCisgICAg
ICAgICAgICBmZCA9IHNlbGYuX3Byb2Muc3RkZXJyLmZpbGVubygpCisgICAgICAgICAgICBmbCA9
IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZMKQorICAgICAgICAgICAgZmNudGwuZmNudGwo
ZmQsIGZjbnRsLkZfU0VURkwsIGZsIHwgb3MuT19OT05CTE9DSykKKworICAgIGRlZiBfaGFuZGxl
X3Bvc3NpYmxlX2ludGVycnVwdChzZWxmKToKKyAgICAgICAgIiIiVGhpcyByb3V0aW5lIGNoZWNr
cyB0byBzZWUgaWYgdGhlIHByb2Nlc3MgY3Jhc2hlZCBvciBleGl0ZWQKKyAgICAgICAgYmVjYXVz
ZSBvZiBhIGtleWJvYXJkIGludGVycnVwdCBhbmQgcmFpc2VzIEtleWJvYXJkSW50ZXJydXB0Cisg
ICAgICAgIGFjY29yZGluZ2x5LiIiIgorICAgICAgICAjIEZJWE1FOiBMaW51eCBhbmQgTWFjIHNl
dCB0aGUgcmV0dXJuY29kZSB0byAtc2lnbmFsLlNJR0lOVCBpZiBhCisgICAgICAgICMgc3VicHJv
Y2VzcyBpcyBraWxsZWQgd2l0aCBhIGN0cmxeQy4gIFByZXZpb3VzIGNvbW1lbnRzIGluIHRoaXMK
KyAgICAgICAgIyByb3V0aW5lIHNhaWQgdGhhdCBzdXBwb3NlZGx5IFdpbmRvd3MgcmV0dXJucyAw
eGMwMDAwMDFkLCBidXQgdGhhdCdzIG5vdCB3aGF0CisgICAgICAgICMgLTEwNzM3NDE1MTAgZXZh
bHVhdGVzIHRvLiBGaWd1cmUgb3V0IHdoYXQgdGhlIHJpZ2h0IHZhbHVlIGlzCisgICAgICAgICMg
Zm9yIHdpbjMyIGFuZCBjeWd3aW4gaGVyZSAuLi4KKyAgICAgICAgaWYgc2VsZi5fcHJvYy5yZXR1
cm5jb2RlIGluICgtMTA3Mzc0MTUxMCwgLXNpZ25hbC5TSUdJTlQpOgorICAgICAgICAgICAgcmFp
c2UgS2V5Ym9hcmRJbnRlcnJ1cHQKKworICAgIGRlZiBwb2xsKHNlbGYpOgorICAgICAgICAiIiJD
aGVjayB0byBzZWUgaWYgdGhlIHVuZGVybHlpbmcgcHJvY2VzcyBpcyBydW5uaW5nOyByZXR1cm5z
IE5vbmUKKyAgICAgICAgaWYgaXQgc3RpbGwgaXMgKHdyYXBwZXIgYXJvdW5kIHN1YnByb2Nlc3Mu
cG9sbCkuIiIiCisgICAgICAgIGlmIHNlbGYuX3Byb2M6CisgICAgICAgICAgICByZXR1cm4gc2Vs
Zi5fcHJvYy5wb2xsKCkKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBfd3JpdGUoc2Vs
ZiwgYnl0ZXMpOgorICAgICAgICBzZWxmLl9wcm9jLnN0ZGluLndyaXRlKGJ5dGVzKQorCiAgICAg
ZGVmIF93YWl0X2Zvcl9kYXRhX2FuZF91cGRhdGVfYnVmZmVyc191c2luZ19zZWxlY3Qoc2VsZiwg
ZGVhZGxpbmUsIHN0b3BwaW5nPUZhbHNlKToKICAgICAgICAgaWYgc2VsZi5fcHJvYy5zdGRvdXQu
Y2xvc2VkIG9yIHNlbGYuX3Byb2Muc3RkZXJyLmNsb3NlZDoKICAgICAgICAgICAgICMgSWYgdGhl
IHByb2Nlc3MgY3Jhc2hlZCBhbmQgaXMgdXNpbmcgRklGT3MsIGxpa2UgQ2hyb21pdW0gQW5kcm9p
ZCwgdGhlCkBAIC0zMDIsNzUgKzM5OCwxMSBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6
CiAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgcmV0dXJuIE5vbmUKIAotICAgIGRlZiBo
YXNfY3Jhc2hlZChzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuX2NyYXNoZWQgYW5kIHNlbGYu
cG9sbCgpOgotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnVGhpcyB0ZXN0IG1hcmtlZCBhcyBhIGNy
YXNoIGJlY2F1c2Ugb2YgZmFpbHVyZSB0byBwb2xsIHRoZSBzZXJ2ZXIgcHJvY2Vzcy4nKQotICAg
ICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUKLSAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9w
b3NzaWJsZV9pbnRlcnJ1cHQoKQotICAgICAgICByZXR1cm4gc2VsZi5fY3Jhc2hlZAotCi0gICAg
IyBUaGlzIHJlYWQgZnVuY3Rpb24gaXMgYSBiaXQgb2RkbHktZGVzaWduZWQsIGFzIGl0IHBvbGxz
IGJvdGggc3Rkb3V0IGFuZCBzdGRlcnIsIHlldAotICAgICMgb25seSByZWFkcy9yZXR1cm5zIGZy
b20gb25lIG9mIHRoZW0gKGJ1ZmZlcmluZyBib3RoIGluIGxvY2FsIHNlbGYuX291dHB1dC9zZWxm
Ll9lcnJvcikuCi0gICAgIyBJdCBtaWdodCBiZSBjbGVhbmVyIHRvIHBhc3MgaW4gdGhlIGZpbGUg
ZGVzY3JpcHRvciB0byBwb2xsIGluc3RlYWQuCi0gICAgZGVmIF9yZWFkKHNlbGYsIGRlYWRsaW5l
LCBmZXRjaF9ieXRlc19mcm9tX2J1ZmZlcnNfY2FsbGJhY2spOgotICAgICAgICB3aGlsZSBUcnVl
OgotICAgICAgICAgICAgaWYgc2VsZi5oYXNfY3Jhc2hlZCgpOgotICAgICAgICAgICAgICAgIHJl
dHVybiBOb25lCi0KLSAgICAgICAgICAgIGlmIHRpbWUudGltZSgpID4gZGVhZGxpbmU6Ci0gICAg
ICAgICAgICAgICAgc2VsZi5faGFuZGxlX3RpbWVvdXQoKQotICAgICAgICAgICAgICAgIHJldHVy
biBOb25lCi0KLSAgICAgICAgICAgIGJ5dGVzID0gZmV0Y2hfYnl0ZXNfZnJvbV9idWZmZXJzX2Nh
bGxiYWNrKCkKLSAgICAgICAgICAgIGlmIGJ5dGVzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAg
ICAgIHJldHVybiBieXRlcwotCi0gICAgICAgICAgICBpZiBzZWxmLl91c2Vfd2luMzJfYXBpczoK
LSAgICAgICAgICAgICAgICBzZWxmLl93YWl0X2Zvcl9kYXRhX2FuZF91cGRhdGVfYnVmZmVyc191
c2luZ193aW4zMl9hcGlzKGRlYWRsaW5lKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAg
ICAgICBzZWxmLl93YWl0X2Zvcl9kYXRhX2FuZF91cGRhdGVfYnVmZmVyc191c2luZ19zZWxlY3Qo
ZGVhZGxpbmUpCi0KLSAgICBkZWYgc3RhcnQoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9w
cm9jOgotICAgICAgICAgICAgc2VsZi5fc3RhcnQoKQotCi0gICAgZGVmIHN0b3Aoc2VsZiwgdGlt
ZW91dF9zZWNzPTMuMCk6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9wcm9jOgotICAgICAgICAgICAg
cmV0dXJuIChOb25lLCBOb25lKQotCi0gICAgICAgICMgT25seSBib3RoZXIgdG8gY2hlY2sgZm9y
IGxlYWtzIG9yIHN0ZGVyciBpZiB0aGUgcHJvY2VzcyBpcyBzdGlsbCBydW5uaW5nLgotICAgICAg
ICBpZiBzZWxmLnBvbGwoKSBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5fcG9ydC5jaGVja19m
b3JfbGVha3Moc2VsZi5uYW1lKCksIHNlbGYucGlkKCkpCi0KLSAgICAgICAgbm93ID0gdGltZS50
aW1lKCkKLSAgICAgICAgaWYgc2VsZi5fcHJvYy5zdGRpbjoKLSAgICAgICAgICAgIHNlbGYuX3By
b2Muc3RkaW4uY2xvc2UoKQotICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRpbiA9IE5vbmUKLSAg
ICAgICAga2lsbGVkID0gRmFsc2UKLSAgICAgICAgaWYgdGltZW91dF9zZWNzOgotICAgICAgICAg
ICAgZGVhZGxpbmUgPSBub3cgKyB0aW1lb3V0X3NlY3MKLSAgICAgICAgICAgIHdoaWxlIHNlbGYu
X3Byb2MucG9sbCgpIGlzIE5vbmUgYW5kIHRpbWUudGltZSgpIDwgZGVhZGxpbmU6Ci0gICAgICAg
ICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQotICAgICAgICAgICAgaWYgc2VsZi5fcHJvYy5wb2xs
KCkgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ3N0b3BwaW5nICVzKHBp
ZCAlZCkgdGltZWQgb3V0LCBraWxsaW5nIGl0JyAlIChzZWxmLl9uYW1lLCBzZWxmLl9wcm9jLnBp
ZCkpCi0KLSAgICAgICAgaWYgc2VsZi5fcHJvYy5wb2xsKCkgaXMgTm9uZToKLSAgICAgICAgICAg
IHNlbGYuX2tpbGwoKQotICAgICAgICAgICAga2lsbGVkID0gVHJ1ZQotICAgICAgICAgICAgX2xv
Zy5kZWJ1Zygna2lsbGVkIHBpZCAlZCcgJSBzZWxmLl9wcm9jLnBpZCkKLQotICAgICAgICAjIHJl
YWQgYW55IHJlbWFpbmluZyBkYXRhIG9uIHRoZSBwaXBlcyBhbmQgcmV0dXJuIGl0LgotICAgICAg
ICBpZiBub3Qga2lsbGVkOgotICAgICAgICAgICAgaWYgc2VsZi5fdXNlX3dpbjMyX2FwaXM6Ci0g
ICAgICAgICAgICAgICAgc2VsZi5fd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnNfdXNp
bmdfd2luMzJfYXBpcyhub3cpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNl
bGYuX3dhaXRfZm9yX2RhdGFfYW5kX3VwZGF0ZV9idWZmZXJzX3VzaW5nX3NlbGVjdChub3csIHN0
b3BwaW5nPVRydWUpCi0gICAgICAgIG91dCwgZXJyID0gc2VsZi5fb3V0cHV0LCBzZWxmLl9lcnJv
cgotICAgICAgICBzZWxmLl9yZXNldCgpCi0gICAgICAgIHJldHVybiAob3V0LCBlcnIpCi0KLSAg
ICBkZWYga2lsbChzZWxmKToKLSAgICAgICAgc2VsZi5zdG9wKDAuMCkKKyAgICBkZWYgX2dyYWJE
YXRhKHNlbGYsIGRlYWRsaW5lKToKKyAgICAgICAgaWYgc2VsZi5fdXNlX3dpbjMyX2FwaXM6Cisg
ICAgICAgICAgICBzZWxmLl93YWl0X2Zvcl9kYXRhX2FuZF91cGRhdGVfYnVmZmVyc191c2luZ193
aW4zMl9hcGlzKGRlYWRsaW5lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fd2Fp
dF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnNfdXNpbmdfc2VsZWN0KGRlYWRsaW5lKQogCiAg
ICAgZGVmIF9raWxsKHNlbGYpOgogICAgICAgICBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5raWxsX3By
b2Nlc3Moc2VsZi5fcHJvYy5waWQpCkBAIC0zODUsMyArNDE3LDExOSBAQCBjbGFzcyBTZXJ2ZXJQ
cm9jZXNzKG9iamVjdCk6CiAgICAgICAgIGlmIHN0ZGVycjoKICAgICAgICAgICAgIHNlbGYuX3By
b2Muc3RkZXJyLmNsb3NlKCkKICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkZXJyID0gc3RkZXJy
CisKKworY2xhc3MgU2ltdWxhdG9yUHJvY2VzcyhTZXJ2ZXJQcm9jZXNzQmFzZSk6CisKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmosIG5hbWUsIGNtZCwgZW52PU5vbmUsIHVuaXZlcnNh
bF9uZXdsaW5lcz1GYWxzZSwgdHJlYXRfbm9fZGF0YV9hc19jcmFzaD1GYWxzZSk6CisgICAgICAg
IHN1cGVyKFNpbXVsYXRvclByb2Nlc3MsIHNlbGYpLl9faW5pdF9fKHBvcnRfb2JqLCBuYW1lLCBj
bWQsIGVudiwgdW5pdmVyc2FsX25ld2xpbmVzLCB0cmVhdF9ub19kYXRhX2FzX2NyYXNoKQorICAg
ICAgICBzZWxmLl9zdGRpbiA9IE5vbmUKKyAgICAgICAgc2VsZi5fc3Rkb3V0ID0gTm9uZQorICAg
ICAgICBzZWxmLl9zdGRlcnIgPSBOb25lCisgICAgICAgIHNlbGYuX3Jlc2V0KCkKKworICAgICAg
ICBmcm9tIHdlYmtpdHB5Lnhjb2RlLnNpbXVsYXRvciBpbXBvcnQgU2ltdWxhdG9yICAjIEF2b2lk
IGNpcmN1bGFyIGltcG9ydAorICAgICAgICBzZWxmLl9zaW11bGF0b3JfbWFuYWdlciA9IFNpbXVs
YXRvcihwb3J0X29iai5ob3N0KQorCisgICAgICAgIHNlbGYuX2J1bmRsZUlEID0gc2VsZi5fcG9y
dC5leHRyYWN0QnVuZGxlSUQoc2VsZi5fY21kWzFdKQorICAgICAgICBzZWxmLl9kZXZpY2UgPSBz
ZWxmLl9zaW11bGF0b3JfbWFuYWdlci5maW5kX2RldmljZV9ieV91ZGlkKHNlbGYuX2NtZFswXSkK
KyAgICAgICAgc2VsZi5fc2ltdWxhdG9yX21hbmFnZXIuaW5zdGFsbChzZWxmLl9kZXZpY2UsIHNl
bGYuX2NtZFsxXSkKKyAgICAgICAgc2VsZi5fZW52WydJUENfSURFTlRJRklFUiddID0gc2VsZi5f
YnVuZGxlSUQgKyAiLSIgKyBzZWxmLl9kZXZpY2UudWRpZAorCisgICAgZGVmIF9yZXNldChzZWxm
KToKKyAgICAgICAgaWYgc2VsZi5fc3RkaW46CisgICAgICAgICAgICBvcy5jbG9zZShzZWxmLl9z
dGRpbikKKyAgICAgICAgaWYgc2VsZi5fc3Rkb3V0OgorICAgICAgICAgICAgb3MuY2xvc2Uoc2Vs
Zi5fc3Rkb3V0KQorICAgICAgICBpZiBzZWxmLl9zdGRlcnI6CisgICAgICAgICAgICBvcy5jbG9z
ZShzZWxmLl9zdGRlcnIpCisgICAgICAgIHNlbGYuX3N0ZGluID0gTm9uZQorICAgICAgICBzZWxm
Ll9zdGRvdXQgPSBOb25lCisgICAgICAgIHNlbGYuX3N0ZGVyciA9IE5vbmUKKyAgICAgICAgc3Vw
ZXIoU2ltdWxhdG9yUHJvY2Vzcywgc2VsZikuX3Jlc2V0KCkKKworICAgIGRlZiBfX3VubGlua19t
YWtlX2ZpZm8oc2VsZiwgcGF0aCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnVubGlu
ayhwYXRoKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgb3Mu
cGF0aC5leGlzdHMocGF0aCk6CisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiQ291bGQg
bm90IHVubGluayAnIiArIHBhdGggKyAiJywgdGhlIHRhcmdldCBwYXRoIGlzIGEgZmlsZSBub3Qg
YSBwaXBlLiIpCisgICAgICAgIG9zLm1rZmlmbyhwYXRoLCAwNjY2KQorCisgICAgZGVmIF9zdGFy
dChzZWxmKToKKyAgICAgICAgZmlsZV9sb2NhdGlvbiA9ICcvdG1wLycgKyBzZWxmLl9lbnZbJ0lQ
Q19JREVOVElGSUVSJ10KKyAgICAgICAgaW5fcGF0aCA9IGZpbGVfbG9jYXRpb24gKyAnX0lOJwor
ICAgICAgICBvdXRfcGF0aCA9IGZpbGVfbG9jYXRpb24gKyAnX09VVCcKKyAgICAgICAgZXJyb3Jf
cGF0aCA9IGZpbGVfbG9jYXRpb24gKyAnX0VSUk9SJworCisgICAgICAgIHNlbGYuX191bmxpbmtf
bWFrZV9maWZvKGluX3BhdGgpCisgICAgICAgIHNlbGYuX191bmxpbmtfbWFrZV9maWZvKG91dF9w
YXRoKQorICAgICAgICBzZWxmLl9fdW5saW5rX21ha2VfZmlmbyhlcnJvcl9wYXRoKQorCisgICAg
ICAgIHNlbGYuX3BpZCA9IHNlbGYuX3NpbXVsYXRvcl9tYW5hZ2VyLnJ1bihzZWxmLl9kZXZpY2Us
IHNlbGYuX2J1bmRsZUlELCBzZWxmLl9jbWRbMzpdLCBlbnY9c2VsZi5fZW52KQorCisgICAgICAg
IHRyeToKKyAgICAgICAgICAgIHNlbGYuX3N0ZG91dCA9IG9zLm9wZW4ob3V0X3BhdGgsIG9zLk9f
UkRPTkxZIHwgb3MuT19OT05CTE9DSykKKyAgICAgICAgICAgIHNlbGYuX3N0ZGVyciA9IG9zLm9w
ZW4oZXJyb3JfcGF0aCwgb3MuT19SRE9OTFkgfCBvcy5PX05PTkJMT0NLKQorICAgICAgICBleGNl
cHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUKKworICAg
ICAgICBkZWFkbGluZSA9IHRpbWUudGltZSgpICsgMworICAgICAgICB3aGlsZSBub3Qgc2VsZi5f
c3RkaW4gYW5kIGRlYWRsaW5lID4gdGltZS50aW1lKCk6CisgICAgICAgICAgICB0cnk6CisgICAg
ICAgICAgICAgICAgc2VsZi5fc3RkaW4gPSBvcy5vcGVuKGluX3BhdGgsIG9zLk9fV1JPTkxZIHwg
b3MuT19OT05CTE9DSykKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAg
ICAgICAgICAgcGFzcworICAgICAgICBpZiBub3Qgc2VsZi5fc3RkaW46CisgICAgICAgICAgICBz
ZWxmLl9jcmFzaGVkID0gVHJ1ZQorCisgICAgZGVmIGlzX3N0YXJ0ZWQoc2VsZik6CisgICAgICAg
IGlmIHNlbGYuX3N0ZGluIG9yIHNlbGYuX3N0ZG91dCBvciBzZWxmLl9zdGRlcnI6CisgICAgICAg
ICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBwb2xsKHNl
bGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5pc19zdGFydGVkKCk6CisgICAgICAgICAgICByZXR1
cm4gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZW1wID0gb3MucmVhZChzZWxmLl9z
dGRlcnIsIDEyOCkKKyAgICAgICAgICAgIGlmIHRlbXA6CisgICAgICAgICAgICAgICAgc2VsZi5f
ZXJyb3IgKz0gdGVtcAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4g
VHJ1ZQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgcGFzcworICAg
ICAgICBleGNlcHQ6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFs
c2UKKworICAgIGRlZiBfd3JpdGUoc2VsZiwgYnl0ZXMpOgorICAgICAgICBpZiBzZWxmLl9zdGRp
bjoKKyAgICAgICAgICAgIG9zLndyaXRlKHNlbGYuX3N0ZGluLCBieXRlcykKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHNlbGYuX2NyYXNoZWQgPSBUcnVlCisKKyAgICBkZWYgX2dyYWJEYXRh
KHNlbGYsIGRlYWRsaW5lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVtcCA9IG9zLnJl
YWQoc2VsZi5fc3Rkb3V0LCAxMjgpCisgICAgICAgICAgICBpZiB0ZW1wOgorICAgICAgICAgICAg
ICAgIHNlbGYuX291dHB1dCArPSB0ZW1wCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgIHNlbGYuX2NyYXNoZWQgPSBUcnVlCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Cisg
ICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuX2NyYXNo
ZWQgPSBUcnVlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlbXAgPSBvcy5yZWFkKHNlbGYu
X3N0ZGVyciwgMTI4KQorICAgICAgICAgICAgaWYgdGVtcDoKKyAgICAgICAgICAgICAgICBzZWxm
Ll9lcnJvciArPSB0ZW1wCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYu
X2NyYXNoZWQgPSBUcnVlCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAg
ICBwYXNzCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuX2NyYXNoZWQgPSBUcnVl
CisKKyAgICBkZWYgX2tpbGwoc2VsZik6CisgICAgICAgIHNlbGYuX3NpbXVsYXRvcl9tYW5hZ2Vy
LmtpbGwoc2VsZi5fZGV2aWNlLCBzZWxmLl9idW5kbGVJRCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5CShyZXZpc2lvbiAyMTAyNzQpCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvci5weQkod29ya2luZyBjb3B5KQpAQCAtNjE0
LDYgKzYxNCwyOSBAQCBjbGFzcyBTaW11bGF0b3Iob2JqZWN0KToKICAgICAgICAgYXNzZXJ0KHRl
c3RpbmdfZGV2aWNlLmF2YWlsYWJsZSkKICAgICAgICAgcmV0dXJuIHRlc3RpbmdfZGV2aWNlCiAK
KyAgICBkZWYgaW5zdGFsbChzZWxmLCBkZXZpY2UsIGFwcCk6CisgICAgICAgIGlmIHNlbGYuX2hv
c3QuZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsneGNydW4nLCAnc2ltY3RsJywgJ2luc3RhbGwnLCBk
ZXZpY2UudWRpZCwgYXBwXSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKSA+IDA6CisgICAgICAgICAg
ICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBydW4oc2VsZiwg
ZGV2aWNlLCBhcHBfaWQsIGFyZ3MsIGVudj1Ob25lKToKKyAgICAgICAgdHJhbnNmZXJlZEVudmly
b25tZW50ID0ge30KKyAgICAgICAgaWYgZW52OgorICAgICAgICAgICAgZm9yIHZhbHVlIGluIGVu
djoKKyAgICAgICAgICAgICAgICBpZiBub3QgIlNJTUNUTF9DSElMRF8iIGluIHZhbHVlOgorICAg
ICAgICAgICAgICAgICAgICB0cmFuc2ZlcmVkRW52aXJvbm1lbnRbJ1NJTUNUTF9DSElMRF8nICsg
dmFsdWVdID0gZW52W3ZhbHVlXQorICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlcmVkRW52aXJv
bm1lbnRbdmFsdWVdID0gZW52W3ZhbHVlXQorICAgICAgICBzdHIgPSBzZWxmLl9ob3N0LmV4ZWN1
dGl2ZS5ydW5fY29tbWFuZChbJ3hjcnVuJywgJ3NpbWN0bCcsICdsYXVuY2gnLCBkZXZpY2UudWRp
ZCwgYXBwX2lkXSArIGFyZ3MsIGVudj10cmFuc2ZlcmVkRW52aXJvbm1lbnQpCisgICAgICAgIGlm
IG5vdCBhcHBfaWQgaW4gc3RyOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgc3Ry
ID0gc3RyLnJzdHJpcCgnXG4nKS5zcGxpdCgpWzFdCisgICAgICAgIHJldHVybiBpbnQoc3RyKQor
CisgICAgZGVmIGtpbGwoc2VsZiwgZGV2aWNlLCBhcHBfaWQpOgorICAgICAgICBpZiBzZWxmLl9o
b3N0LmV4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ3hjcnVuJywgJ3NpbWN0bCcsICd0ZXJtaW5hdGUn
LCBkZXZpY2UudWRpZCwgYXBwX2lkXSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKSA+IDA6CisgICAg
ICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKwogICAgIGRlZiBfX3Jl
cHJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuICc8aU9TIFNpbXVsYXRvcjoge251bV9ydW50aW1l
c30gcnVudGltZXMsIHtudW1fZGV2aWNlX3R5cGVzfSBkZXZpY2UgdHlwZXM+Jy5mb3JtYXQoCiAg
ICAgICAgICAgICBudW1fcnVudGltZXM9bGVuKHNlbGYucnVudGltZXMpLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298113</attachid>
            <date>2017-01-05 10:55:18 -0800</date>
            <delta_ts>2017-01-05 11:00:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165927-20170105105350.patch</filename>
            <type>text/plain</type>
            <size>126630</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMDM1OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDgxIEBACisyMDE3LTAxLTA1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBSZW1vdmluZyBMYXlvdXRUZXN0UmVsYXkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTkyNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTGF5b3V0VGVzdFJlbGF5OiBSZW1vdmVk
IExheW91dFRlc3RSZWxheS4KKyAgICAgICAgKiBNYWtlZmlsZTogUmVtb3ZlZCBMYXlvdXRUZXN0
UmVsYXkgcmVmZXJlbmNlcy4KKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLXdlYmtpdDogUmVtb3Zl
ZCBMYXlvdXRUZXN0UmVsYXkgcmVmZXJlbmNlcy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3BvcnQvYmFzZS5weToKKyAgICAgICAgKFBvcnQuX19pbml0X18pOiBBZGRlZCBfdGVzdF9ydW5u
ZXJfcHJvY2Vzc19jb25zdHJ1Y3Rvci4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQv
ZGFyd2luLnB5OgorICAgICAgICAoRGFyd2luUG9ydC5leHRyYWN0QnVuZGxlSUQpOiBBZGRlZCBm
dW5jdGlvbiB0byBleHRyYWN0IGJ1bmRsZSBJRCBmcm9tIHBsaXN0LgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHk6CisgICAgICAgIChEcml2ZXIuX3NldHVwX2Vudmly
b25fZm9yX2RyaXZlcik6IFN3YXBwZWQgX3NlcnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yIGZvciBf
dGVzdF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3Rvci4KKyAgICAgICAgKElPU1NpbXVsYXRvckRy
aXZlci5jbWRfbGluZSk6IFJlbW92ZWQgdW5uZWVkZWQgYXJndW1lbnRzLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChEcml2ZXJU
ZXN0LnRlc3Rfc3RvcF9jbGVhbnNfdXBfcHJvcGVybHkpOiBTZXQgX3Rlc3RfcnVubmVyX3Byb2Nl
c3NfY29uc3RydWN0b3IgZm9yIHRlc3RpbmcuCisgICAgICAgIChEcml2ZXJUZXN0LnRlc3RfdHdv
X3N0YXJ0c19jbGVhbnNfdXBfcHJvcGVybHkpOiBEaXR0by4KKyAgICAgICAgKERyaXZlclRlc3Qu
dGVzdF9zdGFydF9hY3R1YWxseV9zdGFydHMpOiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3BvcnQvaW9zLnB5OgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydCk6IFJlbW92ZSBy
ZWxheV9uYW1lLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fX2luaXRfXyk6IFNldCBfdGVz
dF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciBmb3IgSU9TU2ltdWxhdG9ycy4KKyAgICAgICAg
KElPU1NpbXVsYXRvclBvcnQuX2dldF9jcmFzaF9sb2cpOiBVcGRhdGUgY29tbWVudC4KKyAgICAg
ICAgKElPU1NpbXVsYXRvclBvcnQuX2J1aWxkX2RyaXZlcik6IFJlbW92ZSByZWZlcmVuY2VzIHRv
IExheW91dFRlc3RSZWxheS4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX2NyZWF0ZV9zaW11
bGF0b3JzKTogQWxpZ25tZW50IGZpeC4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQucmVsYXlf
cGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9jaGVja19yZWxheSk6
IERlbGV0ZWQuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9jaGVja19wb3J0X2J1aWxkKTog
RGVsZXRlZC4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX2J1aWxkX3JlbGF5KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0LnB5OgorICAg
ICAgICAoaW9zVGVzdC50ZXN0XzMyYml0KTogVXBkYXRlIHRlc3QuCisgICAgICAgIChpb3NUZXN0
LnRlc3RfNjRiaXQpOiBVcGRhdGUgdGVzdC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvc2VydmVyX3Byb2Nlc3MucHk6CisgICAgICAgIChTZXJ2ZXJQcm9jZXNzQmFzZSk6IE1vdmUg
c2hhcmVkIGNvZGUgdG8gYSBiYXNlIGNsYXNzLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2Uu
X19pbml0X18pOiBTZXQtdXAgU2VydmVyUHJvY2VzcyBiYXNpY3MuCisgICAgICAgIChTZXJ2ZXJQ
cm9jZXNzQmFzZS5pc19zdGFydGVkKTogVHJ1ZSBpZiB0aGUgcGlwZSBpcyBkZWZpbmVkLgorICAg
ICAgICAoU2VydmVyUHJvY2Vzc0Jhc2UuX3N0YXJ0KTogQmVnaW4gcnVubmluZyB0aGUgcHJvY2Vz
cy4KKyAgICAgICAgKFNlcnZlclByb2Nlc3NCYXNlLnBvbGwpOiBDaGVjayBpZiB0aGUgcHJvY2Vz
cyBpcyBydW5uaW5nLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2UuX3dyaXRlKTogU2VuZCBk
YXRhIHRvIHRoZSBwcm9jZXNzLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2UuX2dyYWJEYXRh
KTogQ2hlY2sgYm90aCBzdGRvdXQgYW5kIHN0ZGVyciBmb3IgZGF0YS4KKyAgICAgICAgKFNlcnZl
clByb2Nlc3NCYXNlLl9raWxsKTogU2h1dCBkb3duIHRoZSBwcm9jZXNzLgorICAgICAgICAoU2Vy
dmVyUHJvY2Vzc0Jhc2UuX2hhbmRsZV9wb3NzaWJsZV9pbnRlcnJ1cHQpOiBDaGVjayBmb3Iga2V5
Ym9hcmQgaW50ZXJydXB0cy4KKyAgICAgICAgKFNlcnZlclByb2Nlc3NCYXNlLl9yZXNldCk6IFJl
c2V0IHByb2Nlc3MgdmFsdWVzLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2UucHJvY2Vzc19u
YW1lKTogUmV0dXJuIHByb2Nlc3MgbmFtZS4KKyAgICAgICAgKFNlcnZlclByb2Nlc3NCYXNlLndy
aXRlKTogUHVibGljIHdyaXRlIGZ1bmN0aW9uLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2Uu
c3RhcnQpOiBQdWJsaWMgc3RhcnQgZnVuY3Rpb24uCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzQmFz
ZS5faGFuZGxlX3RpbWVvdXQpOiBUcmlnZ2VyIG9uIHRpbWVvdXQuCisgICAgICAgIChTZXJ2ZXJQ
cm9jZXNzQmFzZS5oYXNfY3Jhc2hlZCk6IENoZWNrIGlmIGEgcHJvY2VzcyBoYXMgY3Jhc2hlZC4K
KyAgICAgICAgKFNlcnZlclByb2Nlc3NCYXNlLl9yZWFkKTogTW92ZWQgZnJvbSBTZXJ2ZXJQcm9j
ZXNzLCBnZW5lcmFsaXplZC4KKyAgICAgICAgKFNlcnZlclByb2Nlc3NCYXNlLnN0b3ApOiBNb3Zl
ZCBmcm9tIFNlcnZlclByb2Nlc3MsIGdlbmVyYWxpemVkLgorICAgICAgICAoU2VydmVyUHJvY2Vz
c0Jhc2Uua2lsbCk6IE1vdmVkIGZyb20gU2VydmVyUHJvY2Vzcy4KKyAgICAgICAgKFNlcnZlclBy
b2Nlc3MpOgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5fX2luaXRfXyk6IE1vdmVkIGdlbmVyYWxp
emVkIGZ1bmN0aW9uYWxpdHkgdG8gU2VydmVyUHJvY2Vzc0Jhc2UuCisgICAgICAgIChTZXJ2ZXJQ
cm9jZXNzLmlzX3N0YXJ0ZWQpOiBDaGVjayBpZiB0aGUgcHJvY2VzcyBleGlzdHMuCisgICAgICAg
IChTZXJ2ZXJQcm9jZXNzLl9yZXNldCk6IE1vdmVkIGdlbmVyYWxpemVkIGZ1bmN0aW9uYWxpdHkg
dG8gU2VydmVyUHJvY2Vzc0Jhc2UuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLl9zdGFydCk6IE5v
IGNoYW5nZS4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MuX2hhbmRsZV9wb3NzaWJsZV9pbnRlcnJ1
cHQpOiBObyBjaGFuZ2UuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLnBvbGwpOiBObyBjaGFuZ2Uu
CisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLl93cml0ZSk6IFNwbGl0IGludG8gZ2VuZXJhbGl6ZWQg
d3JpdGUoKSBhbmQgdGhpcyBmdW5jdGlvbi4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MuX2dyYWJE
YXRhKTogR3JhYnMgZGF0YSBmcm9tIHByb2Nlc3MsIGVpdGhlciB3aW4zMiBvciBVbml4LgorICAg
ICAgICAoU2VydmVyUHJvY2Vzcy5yZXBsYWNlX291dHB1dHMpOiBObyBjaGFuZ2UuCisgICAgICAg
IChTaW11bGF0b3JQcm9jZXNzKToKKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX19pbml0X18p
OiBJbnN0YWxsIGFwcCBvbiBkZXZpY2UsIHNldHVwIGVudmlyb25tZW50LgorICAgICAgICAoU2lt
dWxhdG9yUHJvY2Vzcy5fcmVzZXQpOiBUZWFyIGRvd24gZmlsZXMuCisgICAgICAgIChTaW11bGF0
b3JQcm9jZXNzLl9fdW5saW5rX21ha2VfZmlmbyk6IFN1YnJvdXRpbmUgdG8gY3JlYXRlIGEgZmlm
by4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX3N0YXJ0KTogQ29uc3RydWN0IGZpZm8sIGxh
dW5jaCBhcHAuCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNzLmlzX3N0YXJ0ZWQpOiBDaGVjayBp
ZiBhbnkgZmlmbyBhcmUgZGVmaW5lZC4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MucG9sbCk6
IENoZWNrIGlmIHN0ZGVyciBpcyBhbGl2ZS4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX3dy
aXRlKTogV3JpdGUgdG8gc3RkaW4gZmlmby4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX2dy
YWJEYXRhKTogQXR0ZW1wdCB0byBwdWxsIGRhdGEgZnJvbSBib3RoIHN0ZG91dCBhbmQgc3RkZXJy
LgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5fa2lsbCk6IFNodXRkb3duIHByb2Nlc3MuCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3IucHk6CisgICAgICAgIChT
aW11bGF0b3IuaW5zdGFsbCk6IEluc3RhbGwgYXBwIG9uIHNpbXVsYXRlZCBkZXZpY2UuCisgICAg
ICAgIChTaW11bGF0b3IucnVuKTogUnVuIGFwcCBvbiBkZXZpY2UsIHRyYW5zZmVyIGVudmlyb25t
ZW50IGRhdGEuCisgICAgICAgIChTaW11bGF0b3Iua2lsbCk6IFNodXRkb3duIGFwcCBvbiBzaW11
bGF0ZWQgZGV2aWNlLgorCiAyMDE3LTAxLTA1ICBQZXIgQXJuZSBWb2xsYW4gIDxwdm9sbGFuQGFw
cGxlLmNvbT4KIAogICAgICAgICBbV2luXSBBcmNoaXZlIHRlc3QgcmVzdWx0IGlzIGZhaWxpbmcu
CkluZGV4OiBUb29scy9NYWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9NYWtlZmlsZQkocmV2
aXNpb24gMjEwMjc0KQorKysgVG9vbHMvTWFrZWZpbGUJKHdvcmtpbmcgY29weSkKQEAgLTcsOSAr
Nyw2IEBAIGlmbmVxICgsJChTREtST09UKSkKIAlpZm5lcSAoLCQoZmluZHN0cmluZyBpcGhvbmUs
JChTREtST09UKSkpCiAJCU1PRFVMRVMgKz0gTW9iaWxlTWluaUJyb3dzZXIKIAllbmRpZgotCWlm
ZXEgKCwkKERPX05PVF9CVUlMRF9MQVlPVVRfVEVTVF9SRUxBWSkpCi0JCU1PRFVMRVMgKz0gTGF5
b3V0VGVzdFJlbGF5Ci0JZW5kaWYKIGVuZGlmCiAKIGFsbDoKSW5kZXg6IFRvb2xzL0xheW91dFRl
c3RSZWxheS9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCShyZXZpc2lvbiAy
MTAyNzQpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2Nv
bmZpZwkobm9uZXhpc3RlbnQpCkBAIC0xLDY4ICswLDAgQEAKLS8vIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLwotLy8gUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLS8vIGFyZSBtZXQ6Ci0vLyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLS8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLS8vICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0vLwotLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0vLyBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotLy8gSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0vLyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotLy8gQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0vLyBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0vLyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLS8vIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLS8vIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0v
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSAiLi4vLi4vLi4vLi4vSW50ZXJuYWwvQ29uZmlndXJh
dGlvbnMvSGF2ZUludGVybmFsU0RLLnhjY29uZmlnIgotCi1VU0VfSU5URVJOQUxfU0RLID0gJChV
U0VfSU5URVJOQUxfU0RLXyQoQ09ORklHVVJBVElPTikpOwotVVNFX0lOVEVSTkFMX1NES19Qcm9k
dWN0aW9uID0gWUVTOwotVVNFX0lOVEVSTkFMX1NES19EZWJ1ZyA9ICQoSEFWRV9JTlRFUk5BTF9T
REspOwotVVNFX0lOVEVSTkFMX1NES19SZWxlYXNlID0gJChIQVZFX0lOVEVSTkFMX1NESyk7Ci0K
LUNMQU5HX0NYWF9MQU5HVUFHRV9TVEFOREFSRCA9IGdudSsrMHg7Ci1DTEFOR19FTkFCTEVfT0JK
Q19BUkMgPSBZRVM7Ci1DTEFOR19XQVJOX0NYWDBYX0VYVEVOU0lPTlMgPSBOTzsKLUhFQURFUl9T
RUFSQ0hfUEFUSFMgPSAkKEJVSUxUX1BST0RVQ1RTX0RJUikvdXNyL2xvY2FsL2luY2x1ZGUgJChX
RUJDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL0ZvcndhcmRpbmdIZWFkZXJzICQoU1JDUk9PVCkv
Li4vLi4vU291cmNlL0phdmFTY3JpcHRDb3JlL2ljdSAkKE5FWFRfUk9PVCkvdXNyL2xvY2FsL2lu
Y2x1ZGUvV2ViQ29yZVRlc3RTdXBwb3J0OwotR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9
ICQoREVCVUdfREVGSU5FUykgRU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JUOwotREVCVUdfSU5GT1JN
QVRJT05fRk9STUFUID0gZHdhcmYtd2l0aC1kc3ltOwotUFJFQklORElORyA9IE5PCi1HQ0NfQ19M
QU5HVUFHRV9TVEFOREFSRCA9IGdudTk5Ci1HQ0NfRU5BQkxFX0NQUF9FWENFUFRJT05TID0gTk87
Ci1HQ0NfRU5BQkxFX0NQUF9SVFRJID0gTk87Ci1HQ0NfUFJFQ09NUElMRV9QUkVGSVhfSEVBREVS
ID0gWUVTCi1HQ0NfVFJFQVRfV0FSTklOR1NfQVNfRVJST1JTID0gWUVTCi1HQ0NfVkVSU0lPTiA9
IGNvbS5hcHBsZS5jb21waWxlcnMubGx2bS5jbGFuZy4xXzA7Ci1HQ0NfV0FSTl9BQk9VVF9ERVBS
RUNBVEVEX0ZVTkNUSU9OUyA9IE5PCi1HQ0NfV0FSTl9VTlVTRURfRlVOQ1RJT04gPSBZRVMKLUdD
Q19XQVJOX1VOVVNFRF9WQVJJQUJMRSA9IFlFUwotR0NDX1dBUk5fNjRfVE9fMzJfQklUX0NPTlZF
UlNJT05bYXJjaD14ODZfNjRdID0gTk87Ci1XQVJOSU5HX0NGTEFHUyA9IC1XYWxsIC1XIC1Xbm8t
dW51c2VkLXBhcmFtZXRlciAtV3VuZGVmCi0KLURFQlVHX0RFRklORVNfZGVidWcgPSA7Ci1ERUJV
R19ERUZJTkVTX25vcm1hbCA9IE5ERUJVRzsKLURFQlVHX0RFRklORVMgPSAkKERFQlVHX0RFRklO
RVNfJChDVVJSRU5UX1ZBUklBTlQpKTsKLQotVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1Ig
PSAkKFRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SJChNQUNPU1hfREVQTE9ZTUVOVF9UQVJH
RVQ6c3VmZml4OmlkZW50aWZpZXIpKTsKLVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SXzEw
ID0gMTAxMDAwOwotVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1JfMTEgPSAxMDExMDA7Ci1U
QVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUl8xMiA9IDEwMTIwMDsKLVRBUkdFVF9NQUNfT1Nf
WF9WRVJTSU9OX01BSk9SXzEzID0gMTAxMzAwOwotCi1TREtST09UID0gbWFjb3N4LmludGVybmFs
OwotCi1TVVBQT1JURURfUExBVEZPUk1TID0gbWFjb3N4OwotCi1UT09MQ0hBSU5TID0gZGVmYXVs
dDsKLQotT1RIRVJfQ0ZMQUdTID0gJChBU0FOX09USEVSX0NGTEFHUyk7Ci1PVEhFUl9DUExVU1BM
VVNGTEFHUyA9ICQoQVNBTl9PVEhFUl9DUExVU1BMVVNGTEFHUyk7Ci1PVEhFUl9MREZMQUdTID0g
JChBU0FOX09USEVSX0xERkxBR1MpOwpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZp
Z3VyYXRpb25zL0RlYnVnUmVsZWFzZS54Y2NvbmZpZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlv
dXRUZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMvRGVidWdSZWxlYXNlLnhjY29uZmlnCShyZXZpc2lv
biAyMTAyNzQpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMvRGVidWdS
ZWxlYXNlLnhjY29uZmlnCShub25leGlzdGVudCkKQEAgLTEsNDIgKzAsMCBAQAotLy8gQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vCi0vLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotLy8gYXJlIG1ldDoKLS8vIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotLy8gICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS8v
Ci0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLS8vIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0vLyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLS8vIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0vLyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLS8v
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLS8vIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotLy8gUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotLy8gT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlICJCYXNlLnhjY29uZmlnIgotCi1B
UkNIUyA9ICQoQVJDSFNfU1RBTkRBUkRfNjRfQklUKTsKLQotVEFSR0VUX01BQ19PU19YX1ZFUlNJ
T05fTUFKT1IgPSAkKE1BQ19PU19YX1ZFUlNJT05fTUFKT1IpOwotCi1NQUNPU1hfREVQTE9ZTUVO
VF9UQVJHRVQgPSAkKE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVF8kKFRBUkdFVF9NQUNfT1NfWF9W
RVJTSU9OX01BSk9SKSkKLU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVF8xMDEwMDAgPSAxMC4xMDsK
LU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVF8xMDExMDAgPSAxMC4xMTsKLU1BQ09TWF9ERVBMT1lN
RU5UX1RBUkdFVF8xMDEyMDAgPSAxMC4xMjsKLU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVF8xMDEz
MDAgPSAxMC4xMzsKLQotRlJBTUVXT1JLX1NFQVJDSF9QQVRIUyA9ICQoREVWRUxPUEVSX0RJUikv
TGlicmFyeS9Qcml2YXRlRnJhbWV3b3JrczsKLUxEX1JVTlBBVEhfU0VBUkNIX1BBVEhTID0gJChE
RVZFTE9QRVJfRElSKS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzOwotT1RIRVJfTERGTEFHUyA9
IC1mcmFtZXdvcmsgQ29yZVNpbXVsYXRvciAtZnJhbWV3b3JrIEFwcEtpdDsKLQotU0RLUk9PVCA9
ICQoU0RLUk9PVF9tYWNvc3hfJChVU0VfSU5URVJOQUxfU0RLKSk7Ci1TREtST09UX21hY29zeF8g
PSBtYWNvc3g7Ci1TREtST09UX21hY29zeF9ZRVMgPSBtYWNvc3guaW50ZXJuYWw7CkluZGV4OiBU
b29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0NvcmVTaW11bGF0b3JTUEkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0NvcmVT
aW11bGF0b3JTUEkuaAkocmV2aXNpb24gMjEwMjc0KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5
L0xheW91dFRlc3RSZWxheS9Db3JlU2ltdWxhdG9yU1BJLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw1
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIF9faGFzX2luY2x1ZGUoPENvcmVTaW11
bGF0b3IvQ29yZVNpbXVsYXRvci5oPikKLQotLyogRklYTUU6IFJlbW92ZSB0aGUgYmVsb3cgI2Rl
ZmluZSBvbmNlIHdlIHJlcXVpcmUgWGNvZGUgNy4zIHdpdGggaU9TIDkuMyBTREsgb3IgbmV3ZXIu
ICovCi0jZGVmaW5lIF9fY29yZXNpbV91bmF2YWlsYWJsZV9tc2cobXNnKQotI2ltcG9ydCA8Q29y
ZVNpbXVsYXRvci9Db3JlU2ltdWxhdG9yLmg+Ci0KLS8qIEZJWE1FOiBBbHdheXMgdXNlIFNpbVNl
cnZpY2VDb250ZXh0IG9uY2Ugd2UgcmVxdWlyZSBYY29kZSA3LjMgd2l0aCBpT1MgOS4zIFNESyBv
ciBuZXdlci4gKi8KLSNkZWZpbmUgVVNFX1NJTV9TRVJWSUNFX0NPTlRFWFQgZGVmaW5lZChDT1JF
U0lNX0FQSV9NQVhfQUxMT1dFRCkKLQotI2Vsc2UKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3Vu
ZGF0aW9uLmg+Ci0KLSNkZWZpbmUgVVNFX1NJTV9TRVJWSUNFX0NPTlRFWFQgMQotCi0jZGVmaW5l
IGtTaW1EZXZpY2VMYXVuY2hBcHBsaWNhdGlvbkFyZ3VtZW50cyBAImFyZ3VtZW50cyIKLSNkZWZp
bmUga1NpbURldmljZUxhdW5jaEFwcGxpY2F0aW9uRW52aXJvbm1lbnQgQCJlbnZpcm9ubWVudCIK
LQotQGludGVyZmFjZSBTaW1EZXZpY2UgOiBOU09iamVjdAotLSAoQk9PTClpbnN0YWxsQXBwbGlj
YXRpb246KE5TVVJMICopaW5zdGFsbFVSTCB3aXRoT3B0aW9uczooTlNEaWN0aW9uYXJ5ICopb3B0
aW9ucyBlcnJvcjooTlNFcnJvciAqIF9fYXV0b3JlbGVhc2luZyAqKWVycm9yOwotLSAocGlkX3Qp
bGF1bmNoQXBwbGljYXRpb25XaXRoSUQ6KE5TU3RyaW5nICopYnVuZGxlSUQgb3B0aW9uczooTlNE
aWN0aW9uYXJ5ICopb3B0aW9ucyBlcnJvcjooTlNFcnJvciAqIF9fYXV0b3JlbGVhc2luZyAqKWVy
cm9yOwotQGVuZAotCi1AaW50ZXJmYWNlIFNpbURldmljZVNldCA6IE5TT2JqZWN0Ci1AcHJvcGVy
dHkgKHJlYWRvbmx5LCBjb3B5KSBOU0RpY3Rpb25hcnkgKmRldmljZXNCeVVESUQ7Ci1AZW5kCi0K
LUBpbnRlcmZhY2UgU2ltU2VydmljZUNvbnRleHQgOiBOU09iamVjdAotKyhTaW1TZXJ2aWNlQ29u
dGV4dCAqKXNoYXJlZFNlcnZpY2VDb250ZXh0Rm9yRGV2ZWxvcGVyRGlyOihOU1N0cmluZyAqKWRl
dmVsb3BlckRpciBlcnJvcjooTlNFcnJvciAqIF9fYXV0b3JlbGVhc2luZyAqKWVycm9yOwotLShT
aW1EZXZpY2VTZXQgKilkZWZhdWx0RGV2aWNlU2V0V2l0aEVycm9yOihOU0Vycm9yICogX19hdXRv
cmVsZWFzaW5nICopZXJyb3I7Ci1AZW5kCi0KLSNlbmRpZgpJbmRleDogVG9vbHMvTGF5b3V0VGVz
dFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRQaXBlUmVsYXkuaAkocmV2aXNpb24g
MjEwMjc0KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVS
ZWxheS5oCShub25leGlzdGVudCkKQEAgLTEsMzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgTFRQaXBlUmVsYXlfaAotI2RlZmluZSBMVFBpcGVSZWxheV9oCi0KLSNpbXBvcnQgIkxUUmVs
YXkuaCIKLQotQGludGVyZmFjZSBMVFBpcGVSZWxheSA6IE5TT2JqZWN0IDxMVFJlbGF5PgotQHBy
b3BlcnR5ICh3ZWFrKSBpZDxMVFJlbGF5RGVsZWdhdGU+IHJlbGF5RGVsZWdhdGU7Ci0tIChpZClp
bml0V2l0aFByZWZpeDooTlNTdHJpbmcgKilwcmVmaXg7Ci1AZW5kCi0KLSNlbmRpZgpJbmRleDog
VG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRQaXBlUmVs
YXkubQkocmV2aXNpb24gMjEwMjc0KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRl
c3RSZWxheS9MVFBpcGVSZWxheS5tCShub25leGlzdGVudCkKQEAgLTEsMTU4ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW1wb3J0ICJMVFBpcGVSZWxheS5oIgotCi0jaW1wb3J0IDxGb3VuZGF0aW9u
L0ZvdW5kYXRpb24uaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN5cy90eXBl
cy5oPgotCi1AaW50ZXJmYWNlIExUUGlwZVJlbGF5ICgpCi1AcHJvcGVydHkgKHJlYWRvbmx5LCBz
dHJvbmcpIE5TU3RyaW5nICpmaWZvUHJlZml4OwotQHByb3BlcnR5IChzdHJvbmcpIE5TT3V0cHV0
U3RyZWFtICpzdGFuZGFyZElucHV0UGlwZTsKLUBwcm9wZXJ0eSAoc3Ryb25nKSBOU0lucHV0U3Ry
ZWFtICpzdGFuZGFyZE91dHB1dFBpcGU7Ci1AcHJvcGVydHkgKHN0cm9uZykgTlNJbnB1dFN0cmVh
bSAqc3RhbmRhcmRFcnJvclBpcGU7Ci0KLS0gKHZvaWQpY3JlYXRlRklGT3M7Ci0tICh2b2lkKWRl
c3Ryb3lGSUZPczsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIExUUGlwZVJlbGF5Ci0KLS0gKE5T
U3RyaW5nICopaW5QaXBlUGF0aAotewotICAgIHJldHVybiBbX2ZpZm9QcmVmaXggc3RyaW5nQnlB
cHBlbmRpbmdTdHJpbmc6QCJfSU4iXTsKLX0KLQotLSAoTlNTdHJpbmcgKilvdXRQaXBlUGF0aAot
ewotICAgIHJldHVybiBbX2ZpZm9QcmVmaXggc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6QCJfT1VU
Il07Ci19Ci0KLS0gKE5TU3RyaW5nICopZXJyb3JQaXBlUGF0aAotewotICAgIHJldHVybiBbX2Zp
Zm9QcmVmaXggc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6QCJfRVJST1IiXTsKLX0KLQotLSAoTlNP
dXRwdXRTdHJlYW0gKikgb3V0cHV0U3RyZWFtCi17Ci0gICAgcmV0dXJuIF9zdGFuZGFyZElucHV0
UGlwZTsKLX0KLQotLSAoaWQpaW5pdFdpdGhQcmVmaXg6KE5TU3RyaW5nICopcHJlZml4Ci17Ci0g
ICAgaWYgKChzZWxmID0gW3N1cGVyIGluaXRdKSkgewotICAgICAgICBfZmlmb1ByZWZpeCA9IHBy
ZWZpeDsKLSAgICAgICAgW3NlbGYgZGVzdHJveUZJRk9zXTsKLSAgICB9Ci0gICAgcmV0dXJuIHNl
bGY7Ci19Ci0KLS0gKHZvaWQpc2V0dXAKLXsKLSAgICBbc2VsZiBkZXN0cm95RklGT3NdOwotICAg
IFtzZWxmIGNyZWF0ZUZJRk9zXTsKLX0KLQotLSAodm9pZCl0ZWFyRG93bgotewotICAgIFtzZWxm
IGRlc3Ryb3lGSUZPc107Ci19Ci0KLS0odm9pZCkgY29ubmVjdAotewotICAgIF9zdGFuZGFyZElu
cHV0UGlwZSA9IFtOU091dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW1Ub0ZpbGVBdFBhdGg6W3NlbGYg
aW5QaXBlUGF0aF0gYXBwZW5kOllFU107Ci0gICAgX3N0YW5kYXJkT3V0cHV0UGlwZSA9IFtOU0lu
cHV0U3RyZWFtIGlucHV0U3RyZWFtV2l0aEZpbGVBdFBhdGg6W3NlbGYgb3V0UGlwZVBhdGhdXTsK
LSAgICBfc3RhbmRhcmRFcnJvclBpcGUgPSBbTlNJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbVdpdGhG
aWxlQXRQYXRoOltzZWxmIGVycm9yUGlwZVBhdGhdXTsKLQotICAgIFtbc2VsZiBzdGFuZGFyZElu
cHV0UGlwZV0gc2V0RGVsZWdhdGU6c2VsZl07Ci0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlw
ZV0gc2V0RGVsZWdhdGU6c2VsZl07Ci0gICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JQaXBlXSBzZXRE
ZWxlZ2F0ZTpzZWxmXTsKLQotICAgIFtbc2VsZiBzdGFuZGFyZE91dHB1dFBpcGVdIHNjaGVkdWxl
SW5SdW5Mb29wOltOU1J1bkxvb3AgbWFpblJ1bkxvb3BdIGZvck1vZGU6TlNEZWZhdWx0UnVuTG9v
cE1vZGVdOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yUGlwZV0gc2NoZWR1bGVJblJ1bkxvb3A6
W05TUnVuTG9vcCBtYWluUnVuTG9vcF0gZm9yTW9kZTpOU0RlZmF1bHRSdW5Mb29wTW9kZV07Ci0K
LSAgICBbW3NlbGYgc3RhbmRhcmRJbnB1dFBpcGVdIG9wZW5dOwotICAgIFtbc2VsZiBzdGFuZGFy
ZE91dHB1dFBpcGVdIG9wZW5dOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yUGlwZV0gb3Blbl07
Ci0KLSAgICBbW3NlbGYgcmVsYXlEZWxlZ2F0ZV0gZGlkQ29ubmVjdF07Ci19Ci0KLS0gKHZvaWQp
ZGlzY29ubmVjdAotewotICAgIFtbc2VsZiBzdGFuZGFyZE91dHB1dFBpcGVdIGNsb3NlXTsKLSAg
ICBbW3NlbGYgc3RhbmRhcmRFcnJvclBpcGVdIGNsb3NlXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRJ
bnB1dFBpcGVdIGNsb3NlXTsKLSAgICBbW3NlbGYgcmVsYXlEZWxlZ2F0ZV0gZGlkRGlzY29ubmVj
dF07Ci19Ci0KLS0gKHZvaWQpY3JlYXRlRklGT3MKLXsKLSAgICBta2ZpZm8oW1tzZWxmIGluUGlw
ZVBhdGhdIFVURjhTdHJpbmddLCAwNjY2KTsKLSAgICBta2ZpZm8oW1tzZWxmIG91dFBpcGVQYXRo
XSBVVEY4U3RyaW5nXSwgMDY2Nik7Ci0gICAgbWtmaWZvKFtbc2VsZiBlcnJvclBpcGVQYXRoXSBV
VEY4U3RyaW5nXSwgMDY2Nik7Ci19Ci0KLS0gKHZvaWQpZGVzdHJveUZJRk9zCi17Ci0gICAgdW5s
aW5rKFtbc2VsZiBpblBpcGVQYXRoXSBVVEY4U3RyaW5nXSk7Ci0gICAgdW5saW5rKFtbc2VsZiBv
dXRQaXBlUGF0aF0gVVRGOFN0cmluZ10pOwotICAgIHVubGluayhbW3NlbGYgZXJyb3JQaXBlUGF0
aF0gVVRGOFN0cmluZ10pOwotfQotCi0tICh2b2lkKSByZWxheVN0cmVhbTooTlNJbnB1dFN0cmVh
bSAqKXN0cmVhbQotewotICAgIHVpbnQ4X3QgYnl0ZXNbMTAyNF07Ci0gICAgTlNJbnRlZ2VyIGJ5
dGVzUmVhZCA9IFtzdHJlYW0gcmVhZDpieXRlcyBtYXhMZW5ndGg6MTAyNF07Ci0gICAgTlNEYXRh
ICpkYXRhID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmJ5dGVzIGxlbmd0aDpieXRlc1JlYWRdOwot
Ci0gICAgaWYgKHN0cmVhbSA9PSBbc2VsZiBzdGFuZGFyZE91dHB1dFBpcGVdKQotICAgICAgICBb
W3NlbGYgcmVsYXlEZWxlZ2F0ZV0gZGlkUmVjZWl2ZVN0ZG91dERhdGE6ZGF0YV07Ci0gICAgZWxz
ZQotICAgICAgICBbW3NlbGYgcmVsYXlEZWxlZ2F0ZV0gZGlkUmVjZWl2ZVN0ZGVyckRhdGE6ZGF0
YV07Ci19Ci0KLS0gKHZvaWQpc3RyZWFtOihOU1N0cmVhbSAqKWFTdHJlYW0gaGFuZGxlRXZlbnQ6
KE5TU3RyZWFtRXZlbnQpZXZlbnRDb2RlCi17Ci0gICAgc3dpdGNoIChldmVudENvZGUpIHsKLSAg
ICBjYXNlIE5TU3RyZWFtRXZlbnROb25lOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5TU3Ry
ZWFtRXZlbnRIYXNCeXRlc0F2YWlsYWJsZToKLSAgICAgICAgW3NlbGYgcmVsYXlTdHJlYW06KE5T
SW5wdXRTdHJlYW0gKilhU3RyZWFtXTsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnRIYXNTcGFjZUF2
YWlsYWJsZToKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOU1N0cmVhbUV2ZW50T3BlbkNvbXBs
ZXRlZDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOU1N0cmVhbUV2ZW50RW5kRW5jb3VudGVy
ZWQ6Ci0gICAgICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRDcmFzaFdpdGhNZXNzYWdlOm5p
bF07Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlNTdHJlYW1FdmVudEVycm9yT2NjdXJyZWQ6
Ci0gICAgICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRDcmFzaFdpdGhNZXNzYWdlOltbYVN0
cmVhbSBzdHJlYW1FcnJvcl0gZGVzY3JpcHRpb25dXTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
fQotCi1AZW5kCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xU
UmVsYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJl
bGF5L0xUUmVsYXkuaAkocmV2aXNpb24gMjEwMjc0KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5
L0xheW91dFRlc3RSZWxheS9MVFJlbGF5LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw0OCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBMVFJlbGF5X2gKLSNkZWZpbmUgTFRSZWxheV9oCi0KLSNp
bXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi1AcHJvdG9jb2wgTFRSZWxheURlbGVn
YXRlIDxOU09iamVjdD4KLS0gKHZvaWQpZGlkQ29ubmVjdDsKLS0gKHZvaWQpZGlkRGlzY29ubmVj
dDsKLS0gKHZvaWQpZGlkQ3Jhc2hXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlOwotLSAo
dm9pZClkaWRSZWNlaXZlU3Rkb3V0RGF0YTooTlNEYXRhICopZGF0YTsKLS0gKHZvaWQpZGlkUmVj
ZWl2ZVN0ZGVyckRhdGE6KE5TRGF0YSAqKWRhdGE7Ci1AZW5kCi0KLUBwcm90b2NvbCBMVFJlbGF5
IDxOU09iamVjdCwgTlNTdHJlYW1EZWxlZ2F0ZT4KLS0gKHZvaWQpc2V0dXA7Ci0tICh2b2lkKXRl
YXJEb3duOwotLSAodm9pZCljb25uZWN0OwotLSAodm9pZClkaXNjb25uZWN0OwotQHByb3BlcnR5
ICh3ZWFrKSBpZDxMVFJlbGF5RGVsZWdhdGU+IHJlbGF5RGVsZWdhdGU7Ci1AcHJvcGVydHkgKHJl
YWRvbmx5LCBzdHJvbmcpIE5TT3V0cHV0U3RyZWFtICpvdXRwdXRTdHJlYW07Ci1AZW5kCi0KLSNl
bmRpZgpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5
Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRU
ZXN0UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMjEwMjc0KQorKysgVG9vbHMv
TGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5oCShub25l
eGlzdGVudCkKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0jaWZuZGVmIExUUmVsYXlDb250
cm9sbGVyX2gKLSNkZWZpbmUgTFRSZWxheUNvbnRyb2xsZXJfaAotCi0jaW1wb3J0ICJMVFJlbGF5
LmgiCi0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi1AY2xhc3MgU2ltRGV2
aWNlOwotCi1AaW50ZXJmYWNlIExUUmVsYXlDb250cm9sbGVyIDogTlNPYmplY3QgPExUUmVsYXlE
ZWxlZ2F0ZT4KLS0gKGlkKWluaXRXaXRoRGV2aWNlOihTaW1EZXZpY2UgKilkZXZpY2UgcHJvZHVj
dERpcjooTlNTdHJpbmcgKilwcm9kdWN0RGlyIGFwcFBhdGg6KE5TU3RyaW5nICopYXBwUGF0aCBk
ZXZpY2VVRElEOihOU1VVSUQgKil1ZGlkIGR1bXBUb29sQXJndW1lbnRzOihOU0FycmF5ICopYXJn
dW1lbnRzOwotLSAodm9pZClzdGFydDsKLS0gKHZvaWQpZmluaXNoOwotQGVuZAotCi0jZW5kaWYK
SW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheUNvbnRy
b2xsZXIubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJl
bGF5L0xUUmVsYXlDb250cm9sbGVyLm0JKHJldmlzaW9uIDIxMDI3NCkKKysrIFRvb2xzL0xheW91
dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIubQkobm9uZXhpc3Rl
bnQpCkBAIC0xLDI3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiTFRSZWxheUNvbnRy
b2xsZXIuaCIKLQotI2ltcG9ydCAiQ29yZVNpbXVsYXRvclNQSS5oIgotI2ltcG9ydCAiTFRQaXBl
UmVsYXkuaCIKLSNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KLSNpbXBvcnQgPGNydF9leHRlcm5z
Lmg+Ci0KLUBpbnRlcmZhY2UgTFRSZWxheUNvbnRyb2xsZXIgKCkKLUBwcm9wZXJ0eSAocmVhZG9u
bHksIHN0cm9uZykgZGlzcGF0Y2hfc291cmNlX3Qgc3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNl
OwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU0ZpbGVIYW5kbGUgKnN0YW5kYXJkT3V0
cHV0OwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU0ZpbGVIYW5kbGUgKnN0YW5kYXJk
RXJyb3I7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TU3RyaW5nICppcGNJZGVudGlm
aWVyOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU1N0cmluZyAqYXBwQnVuZGxlSWRl
bnRpZmllcjsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKmFwcFBhdGg7
Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TVVVJRCAqZGV2aWNlVURJRDsKLUBwcm9w
ZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNBcnJheSAqZHVtcFRvb2xBcmd1bWVudHM7Ci1AcHJv
cGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TU3RyaW5nICpwcm9kdWN0RGlyOwotQHByb3BlcnR5
IChzdHJvbmcpIFNpbURldmljZSAqZGV2aWNlOwotQHByb3BlcnR5IChzdHJvbmcpIGlkPExUUmVs
YXk+IHJlbGF5OwotQHByb3BlcnR5IHBpZF90IHBpZDsKLUBwcm9wZXJ0eSAoc3Ryb25nKSBkaXNw
YXRjaF9zb3VyY2VfdCBhcHBEaXNwYXRjaFNvdXJjZTsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9u
IExUUmVsYXlDb250cm9sbGVyCi0KLS0gKGlkKWluaXRXaXRoRGV2aWNlOihTaW1EZXZpY2UgKilk
ZXZpY2UgcHJvZHVjdERpcjooTlNTdHJpbmcgKilwcm9kdWN0RGlyIGFwcFBhdGg6KE5TU3RyaW5n
ICopYXBwUGF0aCBkZXZpY2VVRElEOihOU1VVSUQgKil1ZGlkIGR1bXBUb29sQXJndW1lbnRzOihO
U0FycmF5ICopYXJndW1lbnRzCi17Ci0gICAgaWYgKChzZWxmID0gW3N1cGVyIGluaXRdKSkgewot
ICAgICAgICBfZGV2aWNlID0gZGV2aWNlOwotICAgICAgICBfcHJvZHVjdERpciA9IHByb2R1Y3RE
aXI7Ci0gICAgICAgIF9hcHBQYXRoID0gYXBwUGF0aDsKLSAgICAgICAgX2FwcEJ1bmRsZUlkZW50
aWZpZXIgPSBbW05TQnVuZGxlIGJ1bmRsZVdpdGhQYXRoOmFwcFBhdGhdIGJ1bmRsZUlkZW50aWZp
ZXJdOwotICAgICAgICBfZGV2aWNlVURJRCA9IHVkaWQ7Ci0gICAgICAgIF9kdW1wVG9vbEFyZ3Vt
ZW50cyA9IGFyZ3VtZW50czsKLSAgICAgICAgX3N0YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJjZSA9
IGRpc3BhdGNoX3NvdXJjZV9jcmVhdGUoRElTUEFUQ0hfU09VUkNFX1RZUEVfUkVBRCwgU1RESU5f
RklMRU5PLCAwLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpKTsKLSAgICAgICAgX3N0YW5kYXJk
T3V0cHV0ID0gW05TRmlsZUhhbmRsZSBmaWxlSGFuZGxlV2l0aFN0YW5kYXJkT3V0cHV0XTsKLSAg
ICAgICAgX3N0YW5kYXJkRXJyb3IgPSBbTlNGaWxlSGFuZGxlIGZpbGVIYW5kbGVXaXRoU3RhbmRh
cmRFcnJvcl07Ci0KLSAgICAgICAgZGlzcGF0Y2hfc291cmNlX3NldF9ldmVudF9oYW5kbGVyKF9z
dGFuZGFyZElucHV0RGlzcGF0Y2hTb3VyY2UsIF57Ci0gICAgICAgICAgICB1aW50OF90IGJ1ZmZl
clsxMDI0XTsKLSAgICAgICAgICAgIHNzaXplX3QgbGVuID0gcmVhZChTVERJTl9GSUxFTk8sIGJ1
ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOwotICAgICAgICAgICAgaWYgKGxlbiA+IDApIHsKLSAgICAg
ICAgICAgICAgICBAdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgW1tbc2VsZiByZWxheV0gb3V0
cHV0U3RyZWFtXSB3cml0ZTpidWZmZXIgbWF4TGVuZ3RoOmxlbl07Ci0gICAgICAgICAgICAgICAg
fSBAY2F0Y2ggKE5TRXhjZXB0aW9uICplKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEJyb2tl
biBwaXBlIC0gdGhlIGR1bXAgdG9vbCBjcmFzaGVkLiBUaW1lIHRvIGRpZS4KLSAgICAgICAgICAg
ICAgICAgICAgW3NlbGYgZGlkQ3Jhc2hXaXRoTWVzc2FnZTpuaWxdOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gRU9GIFJlY2VpdmVk
IG9uIHRoZSByZWxheSdzIHN0YW5kYXJkIGlucHV0LgotICAgICAgICAgICAgICAgIFtzZWxmIGZp
bmlzaF07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIF9yZWxheSA9IFtb
TFRQaXBlUmVsYXkgYWxsb2NdIGluaXRXaXRoUHJlZml4OltAIi90bXAiIHN0cmluZ0J5QXBwZW5k
aW5nUGF0aENvbXBvbmVudDpzZWxmLmlwY0lkZW50aWZpZXJdXTsKLSAgICAgICAgW19yZWxheSBz
ZXRSZWxheURlbGVnYXRlOnNlbGZdOwotICAgIH0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAo
TlNTdHJpbmcgKilpcGNJZGVudGlmaWVyCi17Ci0gICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdX
aXRoRm9ybWF0OkAiJUAtJUAiLCBzZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIsIHNlbGYuZGV2aWNl
VURJRC5VVUlEU3RyaW5nXTsKLX0KLQotLSAoTlNTdHJpbmcgKilwcm9jZXNzTmFtZQotewotICAg
IHJldHVybiBbc2VsZi5hcHBCdW5kbGVJZGVudGlmaWVyIGNvbXBvbmVudHNTZXBhcmF0ZWRCeVN0
cmluZzpAIi4iXS5sYXN0T2JqZWN0OwotfQotCi0tICh2b2lkKWRpZFJlY2VpdmVTdGRvdXREYXRh
OihOU0RhdGEgKilkYXRhCi17Ci0gICAgQHRyeSB7Ci0gICAgICAgIFtbc2VsZiBzdGFuZGFyZE91
dHB1dF0gd3JpdGVEYXRhOmRhdGFdOwotICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAqZXhjZXB0
aW9uKSB7Ci0gICAgICAgIC8vIE5TRmlsZUhhbmRsZU9wZXJhdGlvbkV4Y2VwdGlvbgotICAgICAg
ICAvLyBCcm9rZW4gcGlwZSAtIHRoZSB0ZXN0IGhhcm5lc3Mgc3RvcHBlZCBsaXN0ZW5pbmcgdG8g
dXMsCi0gICAgICAgIC8vIHByb2JhYmx5IGJlY2F1c2Ugd2UgdGltZWQgb3V0IG9yIGEgcnVuIHdh
cyBjYW5jZWxlZC4KLSAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0KLX0KLQotLSAo
dm9pZClkaWRSZWNlaXZlU3RkZXJyRGF0YTooTlNEYXRhICopZGF0YQotewotICAgIEB0cnkgewot
ICAgICAgICBbW3NlbGYgc3RhbmRhcmRFcnJvcl0gd3JpdGVEYXRhOmRhdGFdOwotICAgIH0gQGNh
dGNoIChOU0V4Y2VwdGlvbiAqZXhjZXB0aW9uKSB7Ci0gICAgICAgIC8vIE5TRmlsZUhhbmRsZU9w
ZXJhdGlvbkV4Y2VwdGlvbgotICAgICAgICAvLyBCcm9rZW4gcGlwZSAtIHRoZSB0ZXN0IGhhcm5l
c3Mgc3RvcHBlZCBsaXN0ZW5pbmcgdG8gdXMsCi0gICAgICAgIC8vIHByb2JhYmx5IGJlY2F1c2Ug
d2UgdGltZWQgb3V0IG9yIGEgcnVuIHdhcyBjYW5jZWxlZC4KLSAgICAgICAgZXhpdChFWElUX0ZB
SUxVUkUpOwotICAgIH0KLX0KLQotLSAodm9pZClkaWREaXNjb25uZWN0Ci17Ci0gICAgZGlzcGF0
Y2hfc3VzcGVuZChbc2VsZiBzdGFuZGFyZElucHV0RGlzcGF0Y2hTb3VyY2VdKTsKLX0KLQotLSAo
dm9pZClkaWRDb25uZWN0Ci17Ci0gICAgZGlzcGF0Y2hfcmVzdW1lKFtzZWxmIHN0YW5kYXJkSW5w
dXREaXNwYXRjaFNvdXJjZV0pOwotfQotCi0tICh2b2lkKWRpZENyYXNoV2l0aE1lc3NhZ2U6KE5T
U3RyaW5nICopbWVzc2FnZQotewotICAgIFtbc2VsZiByZWxheV0gZGlzY29ubmVjdF07Ci0gICAg
TlNTdHJpbmcgKmNyYXNoTWVzc2FnZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiXG4j
Q1JBU0hFRCAtICVAIChwaWQgJWQpXG4iLCBbc2VsZiBwcm9jZXNzTmFtZV0sIFtzZWxmIHBpZF1d
OwotCi0gICAgaWYgKG1lc3NhZ2UpCi0gICAgICAgIGNyYXNoTWVzc2FnZSA9IFtjcmFzaE1lc3Nh
Z2Ugc3RyaW5nQnlBcHBlbmRpbmdGb3JtYXQ6QCIlQFxuIiwgbWVzc2FnZV07Ci0KLSAgICBbW3Nl
bGYgc3RhbmRhcmRFcnJvcl0gd3JpdGVEYXRhOltjcmFzaE1lc3NhZ2UgZGF0YVVzaW5nRW5jb2Rp
bmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRFcnJvcl0gY2xv
c2VGaWxlXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRdIGNsb3NlRmlsZV07Ci0gICAgZXhp
dChFWElUX0ZBSUxVUkUpOwotfQotCi0tICh2b2lkKWluc3RhbGxBcHAKLXsKLSAgICBOU0RpY3Rp
b25hcnkgKmluc3RhbGxPcHRpb25zID0gQHsKLSAgICAgICAgKE5TU3RyaW5nICopa0NGQnVuZGxl
SWRlbnRpZmllcktleTogc2VsZi5hcHBCdW5kbGVJZGVudGlmaWVyLAotICAgIH07Ci0KLSAgICBO
U0Vycm9yICplcnJvciA9IG5pbDsKLSAgICBCT09MIGluc3RhbGxlZCA9IFtzZWxmLmRldmljZSBp
bnN0YWxsQXBwbGljYXRpb246W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpzZWxmLmFwcFBhdGhdIHdp
dGhPcHRpb25zOmluc3RhbGxPcHRpb25zIGVycm9yOiZlcnJvcl07Ci0gICAgaWYgKCFpbnN0YWxs
ZWQpIHsKLSAgICAgICAgTlNMb2coQCJDb3VsZG4ndCBpbnN0YWxsICVAOiAlQCIsIHNlbGYuYXBw
UGF0aCwgZXJyb3IuZGVzY3JpcHRpb24pOwotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0g
ICAgfQotfQotCi0tICh2b2lkKWtpbGxBcHAKLXsKLSAgICBkaXNwYXRjaF9zb3VyY2VfdCBkaXNw
YXRjaCA9IFtzZWxmIGFwcERpc3BhdGNoU291cmNlXTsKLQotICAgIGlmIChkaXNwYXRjaCkKLSAg
ICAgICAgZGlzcGF0Y2hfc291cmNlX2NhbmNlbChkaXNwYXRjaCk7Ci0KLSAgICBpZiAoW3NlbGYg
cGlkXSA+IDEpIHsKLSAgICAgICAga2lsbChzZWxmLnBpZCwgU0lHS0lMTCk7Ci0gICAgICAgIFtz
ZWxmIHNldFBpZDotMV07Ci0gICAgfQotICAgIFtzZWxmIHNldEFwcERpc3BhdGNoU291cmNlOm5p
bF07Ci19Ci0KLS0gKE5TRGljdGlvbmFyeSAqKV9lbnZpcm9ubWVudFZhcmlhYmxlcwotewotICAg
IHN0YXRpYyBOU0RpY3Rpb25hcnkgKmVudmlyb25tZW50VmFyaWFibGVzOwotICAgIHN0YXRpYyBk
aXNwYXRjaF9vbmNlX3Qgb25jZTsKLQotICAgIGRpc3BhdGNoX29uY2UoJm9uY2UsIF57Ci0gICAg
ICAgIE5TU3RyaW5nICpwcm9kdWN0RGlyZWN0b3J5ID0gW3NlbGYgcHJvZHVjdERpcl07Ci0KLSAg
ICAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqZGljdGlvbmFyeSA9IFtAewotICAgICAgICAgICAg
QCJJUENfSURFTlRJRklFUiI6IHNlbGYuaXBjSWRlbnRpZmllciwKLSAgICAgICAgICAgIEAiRFlM
RF9GUkFNRVdPUktfUEFUSCI6IHByb2R1Y3REaXJlY3RvcnksCi0gICAgICAgICAgICBAIl9fWFBD
X0RZTERfRlJBTUVXT1JLX1BBVEgiOiBwcm9kdWN0RGlyZWN0b3J5LAotICAgICAgICAgICAgQCJE
WUxEX0xJQlJBUllfUEFUSCI6IHByb2R1Y3REaXJlY3RvcnksCi0gICAgICAgICAgICBAIl9fWFBD
X0RZTERfTElCUkFSWV9QQVRIIjogcHJvZHVjdERpcmVjdG9yeSwKLSAgICAgICAgfSBtdXRhYmxl
Q29weV07Ci0KLSAgICAgICAgZm9yIChOU1N0cmluZyAqa2V5TmFtZSBpbiBAW0AiRFlMRF9JTlNF
UlRfTElCUkFSSUVTIiwgQCJNYWxsb2NTdGFja0xvZ2dpbmciLCBAIkxPQ0FMX1JFU09VUkNFX1JP
T1QiLCBAIkRVTVBSRU5ERVJUUkVFX1RFTVAiXSkgewotICAgICAgICAgICAgY29uc3QgY2hhciog
dmFsdWUgPSBnZXRlbnYoW2tleU5hbWUgVVRGOFN0cmluZ10pOwotICAgICAgICAgICAgaWYgKHZh
bHVlICYmIHN0cmxlbih2YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICBOU1N0cmluZyAqbnNWYWx1
ZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzp2YWx1ZV07Ci0gICAgICAgICAgICAg
ICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0Om5zVmFsdWUgZm9yS2V5OmtleU5hbWVdOwotICAgICAg
ICAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpuc1ZhbHVlIGZvcktleTpbQCJfX1hQQ18i
IHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOmtleU5hbWVdXTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIGZvciAoY2hhcioqIGVudnAgPSAqX05TR2V0RW52aXJvbigpOyAqZW52
cDsgZW52cCsrKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBlbnYgPSAqZW52cDsKLSAgICAg
ICAgICAgIGlmICghc3RybmNtcCgiSlNDXyIsIGVudiwgNCkgfHwgIXN0cm5jbXAoIl9fWFBDX0pT
Q18iLCBlbnYsIDEwKSkgewotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVxdWFsID0gc3Ry
Y2hyKGVudiwgJz0nKTsKLSAgICAgICAgICAgICAgICBpZiAoIWVxdWFsKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIE5TTG9nKEAiTWlzc2luZyAnPScgaW4gZW52IHZhciAnJXMnIiwgZW52KTsKLSAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhLZXlMZW5ndGggPSAyNTY7Ci0gICAgICAg
ICAgICAgICAgc2l6ZV90IGtleUxlbmd0aCA9IGVxdWFsIC0gZW52OwotICAgICAgICAgICAgICAg
IGlmIChrZXlMZW5ndGggPj0gbWF4S2V5TGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5T
TG9nKEAiRW52IHZhciAnJXMnIGlzIHRvbyBsb25nIiwgZW52KTsKLSAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY2hhciBr
ZXlbbWF4S2V5TGVuZ3RoXTsKLSAgICAgICAgICAgICAgICBzdHJuY3B5KGtleSwgZW52LCBrZXlM
ZW5ndGgpOwotICAgICAgICAgICAgICAgIGtleVtrZXlMZW5ndGhdID0gJ1wwJzsKLSAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiB2YWx1ZSA9IGVxdWFsICsgMTsKLQotICAgICAgICAgICAgICAg
IE5TU3RyaW5nICpuc0tleSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzprZXldOwot
ICAgICAgICAgICAgICAgIE5TU3RyaW5nICpuc1ZhbHVlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhV
VEY4U3RyaW5nOnZhbHVlXTsKLSAgICAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6
bnNWYWx1ZSBmb3JLZXk6bnNLZXldOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgZW52aXJvbm1lbnRWYXJpYWJsZXMgPSBbZGljdGlvbmFyeSBjb3B5XTsKLSAgICB9KTsKLQot
ICAgIHJldHVybiBlbnZpcm9ubWVudFZhcmlhYmxlczsKLX0KLQotLSAodm9pZClsYXVuY2hBcHAK
LXsKLSAgICBOU0RpY3Rpb25hcnkgKmxhdW5jaE9wdGlvbnMgPSBAewotICAgICAgICBrU2ltRGV2
aWNlTGF1bmNoQXBwbGljYXRpb25FbnZpcm9ubWVudDogW3NlbGYgX2Vudmlyb25tZW50VmFyaWFi
bGVzXSwKLSAgICAgICAga1NpbURldmljZUxhdW5jaEFwcGxpY2F0aW9uQXJndW1lbnRzOiBbc2Vs
ZiBkdW1wVG9vbEFyZ3VtZW50c10sCi0gICAgfTsKLQotICAgIE5TRXJyb3IgKmVycm9yOwotICAg
IHBpZF90IHBpZCA9IFtzZWxmLmRldmljZSBsYXVuY2hBcHBsaWNhdGlvbldpdGhJRDpzZWxmLmFw
cEJ1bmRsZUlkZW50aWZpZXIgb3B0aW9uczpsYXVuY2hPcHRpb25zIGVycm9yOiZlcnJvcl07Ci0K
LSAgICBpZiAocGlkIDwgMCkgewotICAgICAgICBOU0xvZyhAIkNvdWxkbid0IGxhdW5jaCAlQDog
JUAiLCBzZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIsIGVycm9yLmRlc2NyaXB0aW9uKTsKLSAgICAg
ICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0KLQotICAgIFtzZWxmIHNldFBpZDpwaWRdOwot
Ci0gICAgZGlzcGF0Y2hfcXVldWVfdCBxdWV1ZSA9IGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCk7
Ci0gICAgZGlzcGF0Y2hfc291cmNlX3Qgc2ltdWxhdG9yQXBwRXhpdERpc3BhdGNoU291cmNlID0g
ZGlzcGF0Y2hfc291cmNlX2NyZWF0ZShESVNQQVRDSF9TT1VSQ0VfVFlQRV9QUk9DLCBbc2VsZiBw
aWRdLCBESVNQQVRDSF9QUk9DX0VYSVQsIHF1ZXVlKTsKLSAgICBbc2VsZiBzZXRBcHBEaXNwYXRj
aFNvdXJjZTpzaW11bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3VyY2VdOwotICAgIGRpc3BhdGNoX3Nv
dXJjZV9zZXRfZXZlbnRfaGFuZGxlcihzaW11bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3VyY2UsIF57
Ci0gICAgICAgIGRpc3BhdGNoX3NvdXJjZV9jYW5jZWwoc2ltdWxhdG9yQXBwRXhpdERpc3BhdGNo
U291cmNlKTsKLSAgICAgICAgW3NlbGYgZGlkQ3Jhc2hXaXRoTWVzc2FnZTpuaWxdOwotICAgIH0p
OwotICAgIGRpc3BhdGNoX3Jlc3VtZShzaW11bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3VyY2UpOwot
fQotCi0tICh2b2lkKXN0YXJ0Ci17Ci0gICAgW3NlbGYgaW5zdGFsbEFwcF07Ci0gICAgW1tzZWxm
IHJlbGF5XSBzZXR1cF07Ci0gICAgW3NlbGYgbGF1bmNoQXBwXTsKLSAgICBbW3NlbGYgcmVsYXld
IGNvbm5lY3RdOwotfQotCi0tICh2b2lkKWZpbmlzaAotewotICAgIFtbc2VsZiByZWxheV0gZGlz
Y29ubmVjdF07Ci0gICAgW3NlbGYga2lsbEFwcF07Ci0gICAgZXhpdChFWElUX1NVQ0NFU1MpOwot
fQotCi1AZW5kCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L21h
aW4ubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5
L21haW4ubQkocmV2aXNpb24gMjEwMjc0KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91
dFRlc3RSZWxheS9tYWluLm0JKG5vbmV4aXN0ZW50KQpAQCAtMSwxMzMgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbXBvcnQgIkNvcmVTaW11bGF0b3JTUEkuaCIKLSNpbXBvcnQgIkxUUmVs
YXlDb250cm9sbGVyLmgiCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotc3Rh
dGljIExUUmVsYXlDb250cm9sbGVyICpyZWxheUNvbnRyb2xsZXI7Ci0KLXZvaWQgdXNhZ2UoKQot
ewotICAgIE5TU3RyaW5nICpoZWxwVGV4dCA9IEAiTGF5b3V0VGVzdFJlbGF5OiBydW4gYSBkdW1w
IHRvb2wgaW4gdGhlIHNpbXVsYXRvci4gTm90IGZvciBkaXJlY3QgY29uc3VtcHRpb24uXG4iCi0g
ICAgICAgICJVc2FnZTogTGF5b3V0VGVzdFJlbGF5IFstaF0gW29wdGlvbnNdIC0tIFtkdW1wIHRv
b2wgYXJndW1lbnRzXVxuIgotICAgICAgICAiUmVxdWlyZWQgb3B0aW9uczpcbiIKLSAgICAgICAg
IiAgICAtdWRpZCA8aWRlbnRpZmllcj4gICAgICAgU2ltdWxhdG9yIGRldmljZSBpZGVudGlmaWVy
XG4iCi0gICAgICAgICIgICAgLWFwcCA8YXBwX3BhdGg+ICAgICAgICAgIFBhdGggdG8gdGhlIGJ1
aWx0IGlPUyAuYXBwIGJ1bmRsZSBkaXJlY3RvcnkuXG4iCi0gICAgICAgICIgICAgLXByb2R1Y3RE
aXIgPGRpcj4gICAgICAgIC9wYXRoL3RvL1dlYktpdEJ1aWxkL3tjb25maWd1cmF0aW9ufS17c2hv
cnQgcGxhdGZvcm19LlxuIjsKLQotICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIFtoZWxwVGV4
dCBVVEY4U3RyaW5nXSk7Ci19Ci0KLU5TU3RyaW5nICpnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50
KE5TU3RyaW5nICpwYXJhbWV0ZXIpCi17Ci0gICAgTlNVc2VyRGVmYXVsdHMgKmRlZmF1bHRzID0g
W05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXTsKLSAgICBOU1N0cmluZyAqYXJn
dW1lbnQgPSBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OnBhcmFtZXRlcl07Ci0KLSAgICBpZiAoIWFy
Z3VtZW50KSB7Ci0gICAgICAgIE5TTG9nKEAiLSVAIGlzIHJlcXVpcmVkLiIsIHBhcmFtZXRlcik7
Ci0gICAgICAgIHVzYWdlKCk7Ci0gICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGFyZ3VtZW50OwotfQotCi1OU0FycmF5ICpnZXREdW1wVG9vbEFyZ3VtZW50cygp
Ci17Ci0gICAgTlNNdXRhYmxlQXJyYXkgKmR1bXBUb29sQXJndW1lbnRzID0gW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdF07Ci0gICAgTlNBcnJheSAqcHJvY2Vzc0FyZ3MgPSBbW05TUHJvY2Vz
c0luZm8gcHJvY2Vzc0luZm9dIGFyZ3VtZW50c107Ci0gICAgQk9PTCBhcHBlbmRpbmcgPSBOTzsK
LSAgICBmb3IgKE5TU3RyaW5nICphcmcgaW4gcHJvY2Vzc0FyZ3MpIHsKLSAgICAgICAgaWYgKFth
cmcgaXNFcXVhbFRvU3RyaW5nOkAiLS0iXSkgewotICAgICAgICAgICAgYXBwZW5kaW5nID0gWUVT
OwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGFwcGVuZGlu
ZykKLSAgICAgICAgICAgIFtkdW1wVG9vbEFyZ3VtZW50cyBhZGRPYmplY3Q6YXJnXTsKLSAgICB9
Ci0gICAgcmV0dXJuIGR1bXBUb29sQXJndW1lbnRzOwotfQotCi12b2lkIGZpbmlzaCgpCi17Ci0g
ICAgW3JlbGF5Q29udHJvbGxlciBmaW5pc2hdOwotfQotCi12b2lkIHJlY2VpdmVkU2lnbmFsKGlu
dCBzaWduYWwpCi17Ci0gICAgZXhpdChFWElUX1NVQ0NFU1MpOwotfQotCi1pbnQgbWFpbihpbnQg
YXJnYywgY29uc3QgY2hhciAqIGFyZ3ZbXSkKLXsKLSAgICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAg
ICAgICAgTlNBcnJheSAqaGVscEFyZ3VtZW50cyA9IEBbQCItaCIsIEAiLS1oZWxwIl07Ci0gICAg
ICAgIGZvciAoTlNTdHJpbmcgKmhlbHBBcmd1bWVudCBpbiBoZWxwQXJndW1lbnRzKSB7Ci0gICAg
ICAgICAgICBpZiAoW1tbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gYXJndW1lbnRzXSBpbmRl
eE9mT2JqZWN0OmhlbHBBcmd1bWVudF0gIT0gTlNOb3RGb3VuZCkgewotICAgICAgICAgICAgICAg
IHVzYWdlKCk7Ci0gICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSNpZiBVU0VfU0lNX1NFUlZJQ0VfQ09OVEVYVAotICAgICAgICBO
U1N0cmluZyAqZGV2ZWxvcGVyRGlyZWN0b3J5ID0gZ2V0UmVxdWlyZWRTdHJpbmdBcmd1bWVudChA
ImRldmVsb3BlckRpciIpOwotI2VuZGlmCi0gICAgICAgIE5TVVVJRCAqdWRpZCA9IFtbTlNVVUlE
IGFsbG9jXSBpbml0V2l0aFVVSURTdHJpbmc6Z2V0UmVxdWlyZWRTdHJpbmdBcmd1bWVudChAInVk
aWQiKV07Ci0gICAgICAgIE5TU3RyaW5nICphcHBQYXRoID0gZ2V0UmVxdWlyZWRTdHJpbmdBcmd1
bWVudChAImFwcCIpOwotICAgICAgICBOU1N0cmluZyAqcHJvZHVjdERpcmVjdG9yeSA9IGdldFJl
cXVpcmVkU3RyaW5nQXJndW1lbnQoQCJwcm9kdWN0RGlyIik7Ci0gICAgICAgIE5TQXJyYXkgKmR1
bXBUb29sQXJndW1lbnRzID0gZ2V0RHVtcFRvb2xBcmd1bWVudHMoKTsKLQotI2lmIFVTRV9TSU1f
U0VSVklDRV9DT05URVhUCi0gICAgICAgIE5TRXJyb3IgKmVycm9yOwotICAgICAgICBTaW1TZXJ2
aWNlQ29udGV4dCAqc2VydmljZUNvbnRleHQgPSBbU2ltU2VydmljZUNvbnRleHQgc2hhcmVkU2Vy
dmljZUNvbnRleHRGb3JEZXZlbG9wZXJEaXI6ZGV2ZWxvcGVyRGlyZWN0b3J5IGVycm9yOiZlcnJv
cl07Ci0gICAgICAgIGlmICghc2VydmljZUNvbnRleHQpIHsKLSAgICAgICAgICAgIE5TTG9nKEAi
RGV2aWNlIGNvbnRleHQgY291bGRuJ3QgYmUgZm91bmQ6ICVAIiwgZXJyb3IpOwotICAgICAgICAg
ICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0gICAgICAgIFNpbURldmljZVNldCAq
ZGV2aWNlU2V0ID0gW3NlcnZpY2VDb250ZXh0IGRlZmF1bHREZXZpY2VTZXRXaXRoRXJyb3I6bmls
XTsKLSAgICAgICAgaWYgKCFkZXZpY2VTZXQpIHsKLSAgICAgICAgICAgIE5TTG9nKEAiRGVmYXVs
dCBkZXZpY2Ugc2V0IGNvdWxkbid0IGJlIGZvdW5kOiAlQCIsIGVycm9yKTsKLSAgICAgICAgICAg
IGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAgICAgfQotICAgICAgICBTaW1EZXZpY2UgKmRldmlj
ZSA9IFtkZXZpY2VTZXQuZGV2aWNlc0J5VURJRCBvYmplY3RGb3JLZXk6dWRpZF07Ci0jZWxzZQot
ICAgICAgICBTaW1EZXZpY2UgKmRldmljZSA9IFtTaW1EZXZpY2VTZXQuZGVmYXVsdFNldC5kZXZp
Y2VzQnlVRElEIG9iamVjdEZvcktleTp1ZGlkXTsKLSNlbmRpZgotICAgICAgICBpZiAoIWRldmlj
ZSkgewotICAgICAgICAgICAgTlNMb2coQCJEZXZpY2UgJUAgY291bGRuJ3QgYmUgZm91bmQiLCB1
ZGlkKTsKLSAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHJlbGF5Q29udHJvbGxlciA9IFtbTFRSZWxheUNvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRo
RGV2aWNlOmRldmljZSBwcm9kdWN0RGlyOnByb2R1Y3REaXJlY3RvcnkgYXBwUGF0aDphcHBQYXRo
IGRldmljZVVESUQ6dWRpZCBkdW1wVG9vbEFyZ3VtZW50czpkdW1wVG9vbEFyZ3VtZW50c107Ci0g
ICAgICAgIFtyZWxheUNvbnRyb2xsZXIgc3RhcnRdOwotCi0gICAgICAgIGF0ZXhpdChmaW5pc2gp
OwotICAgICAgICBzaWduYWwoU0lHSU5ULCByZWNlaXZlZFNpZ25hbCk7Ci0gICAgICAgIHNpZ25h
bChTSUdURVJNLCByZWNlaXZlZFNpZ25hbCk7Ci0KLSAgICAgICAgW1tOU1J1bkxvb3AgbWFpblJ1
bkxvb3BdIHJ1bl07Ci0gICAgfQotICAgIHJldHVybiAwOwotfQpJbmRleDogVG9vbHMvTGF5b3V0
VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjEwMjc0KQorKysgVG9vbHMvTGF5b3V0VGVzdFJl
bGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShub25leGlzdGVu
dCkKQEAgLTEsMjAyICswLDAgQEAKLS8vICEkKlVURjgqJCEKLXsKLQlhcmNoaXZlVmVyc2lvbiA9
IDE7Ci0JY2xhc3NlcyA9IHsKLQl9OwotCW9iamVjdFZlcnNpb24gPSA0NjsKLQlvYmplY3RzID0g
ewotCi0vKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwotCQkyRThEM0VGODE5ODgxRDQz
MDA0RjZDQzIgLyogbWFpbi5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkU4RDNFRjcxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSAqLzsgfTsKLQkJMkU4
RDNGMDIxOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lm0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRThEM0YwMTE5ODgxRkQwMDA0RjZDQzIgLyog
TFRQaXBlUmVsYXkubSAqLzsgfTsKLQkJMkU4RDNGMDYxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVs
YXlDb250cm9sbGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRThEM0YwNTE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIubSAqLzsg
fTsKLS8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhDb3B5Rmls
ZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjIxOTg4MUQ0MzAwNEY2Q0MyIC8qIENv
cHlGaWxlcyAqLyA9IHsKLQkJCWlzYSA9IFBCWENvcHlGaWxlc0J1aWxkUGhhc2U7Ci0JCQlidWls
ZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZHN0UGF0aCA9IC91c3Ivc2hhcmUvbWFuL21h
bjEvOwotCQkJZHN0U3ViZm9sZGVyU3BlYyA9IDA7Ci0JCQlmaWxlcyA9ICgKLQkJCSk7Ci0JCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMTsKLQkJfTsKLS8qIEVuZCBQQlhD
b3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYRmlsZVJlZmVyZW5j
ZSBzZWN0aW9uICovCi0JCTJFOEQzRUY0MTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVs
YXkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21w
aWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IExheW91
dFRlc3RSZWxheTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJMkU4RDNF
RjcxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gbWFpbi5tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyog
RGVidWdSZWxlYXNlLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgbmFtZSA9IERlYnVnUmVsZWFzZS54Y2NvbmZp
ZzsgcGF0aCA9IENvbmZpZ3VyYXRpb25zL0RlYnVnUmVsZWFzZS54Y2NvbmZpZzsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNFRkYxOTg4MUUyNTAwNEY2Q0MyIC8qIEJhc2UueGNj
b25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0LnhjY29uZmlnOyBuYW1lID0gQmFzZS54Y2NvbmZpZzsgcGF0aCA9IENvbmZpZ3VyYXRpb25z
L0Jhc2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOEQzRjAwMTk4
ODFGMjkwMDRGNkNDMiAvKiBMVFJlbGF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExUUmVsYXkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDExOTg4MUZEMDAwNEY2Q0MyIC8qIExU
UGlwZVJlbGF5Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IExUUGlwZVJl
bGF5Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOEQzRjAzMTk4ODFGRTIwMDRG
NkNDMiAvKiBMVFBpcGVSZWxheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMVFBpcGVSZWxheS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0YwNDE5ODgyNDA2MDA0RjZDQzIgLyogTFRS
ZWxheUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTFRSZWxh
eUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDUxOTg4
MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMub2JqYzsgcGF0aCA9IExUUmVsYXlDb250cm9sbGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUNFMUZCQzE1MUIyOTBFNzkwMDAxMzZGNSAvKiBDb3JlU2ltdWxhdG9yU1BJLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcmVTaW11bGF0b3JTUEkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLS8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24g
Ki8KLQotLyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCQkyRThE
M0VGMTE5ODgxRDQzMDA0RjZDQzIgLyogRnJhbWV3b3JrcyAqLyA9IHsKLQkJCWlzYSA9IFBCWEZy
YW1ld29ya3NCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJ
CWZpbGVzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwotCQl9OwotLyogRW5kIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQot
LyogQmVnaW4gUEJYR3JvdXAgc2VjdGlvbiAqLwotCQkyRThEM0VFQjE5ODgxRDQzMDA0RjZDQzIg
PSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTJFOEQzRUZGMTk4
ODFFMjUwMDRGNkNDMiAvKiBCYXNlLnhjY29uZmlnICovLAotCQkJCTJFOEQzRUZFMTk4ODFFMTMw
MDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8sCi0JCQkJMkU4RDNFRjYxOTg4MUQ0
MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLywKLQkJCQkyRThEM0VGNTE5ODgxRDQzMDA0
RjZDQzIgLyogUHJvZHVjdHMgKi8sCi0JCQkpOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
LQkJfTsKLQkJMkU4RDNFRjUxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2R1Y3RzICovID0gewotCQkJ
aXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQkyRThEM0VGNDE5ODgxRDQzMDA0
RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovLAotCQkJKTsKLQkJCW5hbWUgPSBQcm9kdWN0czsK
LQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCTJFOEQzRUY2MTk4ODFENDMwMDRG
NkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNo
aWxkcmVuID0gKAotCQkJCTJFOEQzRUY3MTk4ODFENDMwMDRGNkNDMiAvKiBtYWluLm0gKi8sCi0J
CQkJQ0UxRkJDMTUxQjI5MEU3OTAwMDEzNkY1IC8qIENvcmVTaW11bGF0b3JTUEkuaCAqLywKLQkJ
CQkyRThEM0YwMDE5ODgxRjI5MDA0RjZDQzIgLyogTFRSZWxheS5oICovLAotCQkJCTJFOEQzRjAx
MTk4ODFGRDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5tICovLAotCQkJCTJFOEQzRjAzMTk4ODFG
RTIwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5oICovLAotCQkJCTJFOEQzRjA0MTk4ODI0MDYwMDRG
NkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5oICovLAotCQkJCTJFOEQzRjA1MTk4ODI0MDYwMDRG
NkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5tICovLAotCQkJKTsKLQkJCXBhdGggPSBMYXlvdXRU
ZXN0UmVsYXk7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotLyogRW5kIFBCWEdy
b3VwIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KLQkJ
MkU4RDNFRjMxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLyA9IHsKLQkJCWlz
YSA9IFBCWE5hdGl2ZVRhcmdldDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAyRThEM0VG
QjE5ODgxRDQzMDA0RjZDQzIgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRp
dmVUYXJnZXQgIkxheW91dFRlc3RSZWxheSIgKi87Ci0JCQlidWlsZFBoYXNlcyA9ICgKLQkJCQky
RThEM0VGMDE5ODgxRDQzMDA0RjZDQzIgLyogU291cmNlcyAqLywKLQkJCQkyRThEM0VGMTE5ODgx
RDQzMDA0RjZDQzIgLyogRnJhbWV3b3JrcyAqLywKLQkJCQkyRThEM0VGMjE5ODgxRDQzMDA0RjZD
QzIgLyogQ29weUZpbGVzICovLAotCQkJKTsKLQkJCWJ1aWxkUnVsZXMgPSAoCi0JCQkpOwotCQkJ
ZGVwZW5kZW5jaWVzID0gKAotCQkJKTsKLQkJCW5hbWUgPSBMYXlvdXRUZXN0UmVsYXk7Ci0JCQlw
cm9kdWN0TmFtZSA9IExheW91dFRlc3RSZWxheTsKLQkJCXByb2R1Y3RSZWZlcmVuY2UgPSAyRThE
M0VGNDE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovOwotCQkJcHJvZHVjdFR5
cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS50b29sIjsKLQkJfTsKLS8qIEVuZCBQQlhOYXRp
dmVUYXJnZXQgc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KLQkJ
MkU4RDNFRUMxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2plY3Qgb2JqZWN0ICovID0gewotCQkJaXNh
ID0gUEJYUHJvamVjdDsKLQkJCWF0dHJpYnV0ZXMgPSB7Ci0JCQkJTGFzdFVwZ3JhZGVDaGVjayA9
IDA2MDA7Ci0JCQkJT1JHQU5JWkFUSU9OTkFNRSA9ICJBcHBsZSwgSW5jLiI7Ci0JCQkJVGFyZ2V0
QXR0cmlidXRlcyA9IHsKLQkJCQkJMkU4RDNFRjMxOTg4MUQ0MzAwNEY2Q0MyID0gewotCQkJCQkJ
Q3JlYXRlZE9uVG9vbHNWZXJzaW9uID0gNi4wOwotCQkJCQl9OwotCQkJCX07Ci0JCQl9OwotCQkJ
YnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDJFOEQzRUVGMTk4ODFENDMwMDRGNkNDMiAvKiBCdWls
ZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIkxheW91dFRlc3RSZWxheSIgKi87
Ci0JCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAzLjIiOwotCQkJZGV2ZWxvcG1lbnRS
ZWdpb24gPSBFbmdsaXNoOwotCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDA7Ci0JCQlrbm93
blJlZ2lvbnMgPSAoCi0JCQkJZW4sCi0JCQkpOwotCQkJbWFpbkdyb3VwID0gMkU4RDNFRUIxOTg4
MUQ0MzAwNEY2Q0MyOwotCQkJcHJvZHVjdFJlZkdyb3VwID0gMkU4RDNFRjUxOTg4MUQ0MzAwNEY2
Q0MyIC8qIFByb2R1Y3RzICovOwotCQkJcHJvamVjdERpclBhdGggPSAiIjsKLQkJCXByb2plY3RS
b290ID0gIiI7Ci0JCQl0YXJnZXRzID0gKAotCQkJCTJFOEQzRUYzMTk4ODFENDMwMDRGNkNDMiAv
KiBMYXlvdXRUZXN0UmVsYXkgKi8sCi0JCQkpOwotCQl9OwotLyogRW5kIFBCWFByb2plY3Qgc2Vj
dGlvbiAqLwotCi0vKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0JCTJF
OEQzRUYwMTk4ODFENDMwMDRGNkNDMiAvKiBTb3VyY2VzICovID0gewotCQkJaXNhID0gUEJYU291
cmNlc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmls
ZXMgPSAoCi0JCQkJMkU4RDNGMDYxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVy
Lm0gaW4gU291cmNlcyAqLywKLQkJCQkyRThEM0VGODE5ODgxRDQzMDA0RjZDQzIgLyogbWFpbi5t
IGluIFNvdXJjZXMgKi8sCi0JCQkJMkU4RDNGMDIxOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJl
bGF5Lm0gaW4gU291cmNlcyAqLywKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKLQkJfTsKLS8qIEVuZCBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9u
ICovCi0KLS8qIEJlZ2luIFhDQnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24gKi8KLQkJMkU4RDNF
RjkxOTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZp
Z3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDJFOEQzRUZFMTk4ODFF
MTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi87Ci0JCQlidWlsZFNldHRpbmdz
ID0gewotCQkJfTsKLQkJCW5hbWUgPSBEZWJ1ZzsKLQkJfTsKLQkJMkU4RDNFRkExOTg4MUQ0MzAw
NEY2Q0MyIC8qIFJlbGVhc2UgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsK
LQkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0My
IC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLzsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQl9
OwotCQkJbmFtZSA9IFJlbGVhc2U7Ci0JCX07Ci0JCTJFOEQzRUZDMTk4ODFENDMwMDRGNkNDMiAv
KiBEZWJ1ZyAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJYmFzZUNv
bmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVidWdS
ZWxlYXNlLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlQUk9EVUNUX05B
TUUgPSAiJChUQVJHRVRfTkFNRSkiOwotCQkJfTsKLQkJCW5hbWUgPSBEZWJ1ZzsKLQkJfTsKLQkJ
MkU4RDNFRkQxOTg4MUQ0MzAwNEY2Q0MyIC8qIFJlbGVhc2UgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1
aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gMkU4RDNF
RkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLzsKLQkJCWJ1aWxk
U2V0dGluZ3MgPSB7Ci0JCQkJUFJPRFVDVF9OQU1FID0gIiQoVEFSR0VUX05BTUUpIjsKLQkJCX07
Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLS8qIEVuZCBYQ0J1aWxkQ29uZmlndXJhdGlvbiBz
ZWN0aW9uICovCi0KLS8qIEJlZ2luIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLwotCQky
RThEM0VFRjE5ODgxRDQzMDA0RjZDQzIgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQ
QlhQcm9qZWN0ICJMYXlvdXRUZXN0UmVsYXkiICovID0gewotCQkJaXNhID0gWENDb25maWd1cmF0
aW9uTGlzdDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCi0JCQkJMkU4RDNFRjkxOTg4MUQ0
MzAwNEY2Q0MyIC8qIERlYnVnICovLAotCQkJCTJFOEQzRUZBMTk4ODFENDMwMDRGNkNDMiAvKiBS
ZWxlYXNlICovLAotCQkJKTsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsK
LQkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJlbGVhc2U7Ci0JCX07Ci0JCTJFOEQzRUZC
MTk4ODFENDMwMDRGNkNDMiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2
ZVRhcmdldCAiTGF5b3V0VGVzdFJlbGF5IiAqLyA9IHsKLQkJCWlzYSA9IFhDQ29uZmlndXJhdGlv
bkxpc3Q7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAotCQkJCTJFOEQzRUZDMTk4ODFENDMw
MDRGNkNDMiAvKiBEZWJ1ZyAqLywKLQkJCQkyRThEM0VGRDE5ODgxRDQzMDA0RjZDQzIgLyogUmVs
ZWFzZSAqLywKLQkJCSk7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7Ci0J
CQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNlOwotCQl9OwotLyogRW5kIFhDQ29u
ZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLwotCX07Ci0Jcm9vdE9iamVjdCA9IDJFOEQzRUVDMTk4
ODFENDMwMDRGNkNDMiAvKiBQcm9qZWN0IG9iamVjdCAqLzsKLX0KSW5kZXg6IFRvb2xzL0xheW91
dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVwcm9qCShyZXZpc2lvbiAyMTAy
NzQpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5Lnhjb2RlcHJvagko
bm9uZXhpc3RlbnQpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBUb29scy9MYXlvdXRUZXN0UmVsYXkv
TGF5b3V0VGVzdFJlbGF5Lnhjb2RlcHJvagpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjppZ25vcmUK
IyMgLTEsMiArMCwwICMjCi1wcm9qZWN0Lnhjd29ya3NwYWNlCi14Y3VzZXJkYXRhCkluZGV4OiBU
b29scy9MYXlvdXRUZXN0UmVsYXkvTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0
VGVzdFJlbGF5L01ha2VmaWxlCShyZXZpc2lvbiAyMTAyNzQpCisrKyBUb29scy9MYXlvdXRUZXN0
UmVsYXkvTWFrZWZpbGUJKG5vbmV4aXN0ZW50KQpAQCAtMSw2ICswLDAgQEAKLVNDUklQVFNfUEFU
SCA9IC4uL1NjcmlwdHMKLQotT1ZFUlJJREVfQVJDSFMgPSBkZWZhdWx0Ci1PVkVSUklERV9TREtS
T09UID0gZGVmYXVsdAotCi1pbmNsdWRlIC4uLy4uL01ha2VmaWxlLnNoYXJlZApJbmRleDogVG9v
bHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcJ
KHJldmlzaW9uIDIxMDI3NCkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9u
cy9CYXNlLnhjY29uZmlnCShub25leGlzdGVudCkKQEAgLTEsNjggKzAsMCBAQAotLy8gQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vCi0vLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotLy8gYXJlIG1ldDoKLS8vIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotLy8gICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS8v
Ci0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLS8vIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0vLyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLS8vIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0vLyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLS8v
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLS8vIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotLy8gUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotLy8gT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlICIuLi8uLi8uLi8uLi9JbnRlcm5h
bC9Db25maWd1cmF0aW9ucy9IYXZlSW50ZXJuYWxTREsueGNjb25maWciCi0KLVVTRV9JTlRFUk5B
TF9TREsgPSAkKFVTRV9JTlRFUk5BTF9TREtfJChDT05GSUdVUkFUSU9OKSk7Ci1VU0VfSU5URVJO
QUxfU0RLX1Byb2R1Y3Rpb24gPSBZRVM7Ci1VU0VfSU5URVJOQUxfU0RLX0RlYnVnID0gJChIQVZF
X0lOVEVSTkFMX1NESyk7Ci1VU0VfSU5URVJOQUxfU0RLX1JlbGVhc2UgPSAkKEhBVkVfSU5URVJO
QUxfU0RLKTsKLQotQ0xBTkdfQ1hYX0xBTkdVQUdFX1NUQU5EQVJEID0gZ251KysweDsKLUNMQU5H
X0VOQUJMRV9PQkpDX0FSQyA9IFlFUzsKLUNMQU5HX1dBUk5fQ1hYMFhfRVhURU5TSU9OUyA9IE5P
OwotSEVBREVSX1NFQVJDSF9QQVRIUyA9ICQoQlVJTFRfUFJPRFVDVFNfRElSKS91c3IvbG9jYWwv
aW5jbHVkZSAkKFdFQkNPUkVfUFJJVkFURV9IRUFERVJTX0RJUikvRm9yd2FyZGluZ0hlYWRlcnMg
JChTUkNST09UKS8uLi8uLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1ICQoTkVYVF9ST09UKS91
c3IvbG9jYWwvaW5jbHVkZS9XZWJDb3JlVGVzdFN1cHBvcnQ7Ci1HQ0NfUFJFUFJPQ0VTU09SX0RF
RklOSVRJT05TID0gJChERUJVR19ERUZJTkVTKSBFTkFCTEVfREFTSEJPQVJEX1NVUFBPUlQ7Ci1E
RUJVR19JTkZPUk1BVElPTl9GT1JNQVQgPSBkd2FyZi13aXRoLWRzeW07Ci1QUkVCSU5ESU5HID0g
Tk8KLUdDQ19DX0xBTkdVQUdFX1NUQU5EQVJEID0gZ251OTkKLUdDQ19FTkFCTEVfQ1BQX0VYQ0VQ
VElPTlMgPSBOTzsKLUdDQ19FTkFCTEVfQ1BQX1JUVEkgPSBOTzsKLUdDQ19QUkVDT01QSUxFX1BS
RUZJWF9IRUFERVIgPSBZRVMKLUdDQ19UUkVBVF9XQVJOSU5HU19BU19FUlJPUlMgPSBZRVMKLUdD
Q19WRVJTSU9OID0gY29tLmFwcGxlLmNvbXBpbGVycy5sbHZtLmNsYW5nLjFfMDsKLUdDQ19XQVJO
X0FCT1VUX0RFUFJFQ0FURURfRlVOQ1RJT05TID0gTk8KLUdDQ19XQVJOX1VOVVNFRF9GVU5DVElP
TiA9IFlFUwotR0NDX1dBUk5fVU5VU0VEX1ZBUklBQkxFID0gWUVTCi1HQ0NfV0FSTl82NF9UT18z
Ml9CSVRfQ09OVkVSU0lPTlthcmNoPXg4Nl82NF0gPSBOTzsKLVdBUk5JTkdfQ0ZMQUdTID0gLVdh
bGwgLVcgLVduby11bnVzZWQtcGFyYW1ldGVyIC1XdW5kZWYKLQotREVCVUdfREVGSU5FU19kZWJ1
ZyA9IDsKLURFQlVHX0RFRklORVNfbm9ybWFsID0gTkRFQlVHOwotREVCVUdfREVGSU5FUyA9ICQo
REVCVUdfREVGSU5FU18kKENVUlJFTlRfVkFSSUFOVCkpOwotCi1UQVJHRVRfTUFDX09TX1hfVkVS
U0lPTl9NQUpPUiA9ICQoVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1IkKE1BQ09TWF9ERVBM
T1lNRU5UX1RBUkdFVDpzdWZmaXg6aWRlbnRpZmllcikpOwotVEFSR0VUX01BQ19PU19YX1ZFUlNJ
T05fTUFKT1JfMTAgPSAxMDEwMDA7Ci1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUl8xMSA9
IDEwMTEwMDsKLVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SXzEyID0gMTAxMjAwOwotVEFS
R0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1JfMTMgPSAxMDEzMDA7Ci0KLVNES1JPT1QgPSBtYWNv
c3guaW50ZXJuYWw7Ci0KLVNVUFBPUlRFRF9QTEFURk9STVMgPSBtYWNvc3g7Ci0KLVRPT0xDSEFJ
TlMgPSBkZWZhdWx0OwotCi1PVEhFUl9DRkxBR1MgPSAkKEFTQU5fT1RIRVJfQ0ZMQUdTKTsKLU9U
SEVSX0NQTFVTUExVU0ZMQUdTID0gJChBU0FOX09USEVSX0NQTFVTUExVU0ZMQUdTKTsKLU9USEVS
X0xERkxBR1MgPSAkKEFTQU5fT1RIRVJfTERGTEFHUyk7CkluZGV4OiBUb29scy9MYXlvdXRUZXN0
UmVsYXkvQ29uZmlndXJhdGlvbnMvRGVidWdSZWxlYXNlLnhjY29uZmlnCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25m
aWcJKHJldmlzaW9uIDIxMDI3NCkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0
aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25maWcJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MiArMCwwIEBA
Ci0vLyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0vLyBhcmUgbWV0OgotLy8gMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LS8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLS8vIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0vLyAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotLy8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS8vIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotLy8gUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLS8vIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotLy8gRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotLy8gUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0vLyBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0vLyBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgIkJhc2UueGNj
b25maWciCi0KLUFSQ0hTID0gJChBUkNIU19TVEFOREFSRF82NF9CSVQpOwotCi1UQVJHRVRfTUFD
X09TX1hfVkVSU0lPTl9NQUpPUiA9ICQoTUFDX09TX1hfVkVSU0lPTl9NQUpPUik7Ci0KLU1BQ09T
WF9ERVBMT1lNRU5UX1RBUkdFVCA9ICQoTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXyQoVEFSR0VU
X01BQ19PU19YX1ZFUlNJT05fTUFKT1IpKQotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEwMTAw
MCA9IDEwLjEwOwotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEwMTEwMCA9IDEwLjExOwotTUFD
T1NYX0RFUExPWU1FTlRfVEFSR0VUXzEwMTIwMCA9IDEwLjEyOwotTUFDT1NYX0RFUExPWU1FTlRf
VEFSR0VUXzEwMTMwMCA9IDEwLjEzOwotCi1GUkFNRVdPUktfU0VBUkNIX1BBVEhTID0gJChERVZF
TE9QRVJfRElSKS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzOwotTERfUlVOUEFUSF9TRUFSQ0hf
UEFUSFMgPSAkKERFVkVMT1BFUl9ESVIpL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3M7Ci1PVEhF
Ul9MREZMQUdTID0gLWZyYW1ld29yayBDb3JlU2ltdWxhdG9yIC1mcmFtZXdvcmsgQXBwS2l0Owot
Ci1TREtST09UID0gJChTREtST09UX21hY29zeF8kKFVTRV9JTlRFUk5BTF9TREspKTsKLVNES1JP
T1RfbWFjb3N4XyA9IG1hY29zeDsKLVNES1JPT1RfbWFjb3N4X1lFUyA9IG1hY29zeC5pbnRlcm5h
bDsKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5
b3V0VGVzdFJlbGF5Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxMDI3NCkK
KysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkobm9uZXhpc3RlbnQpCkBAIC0xLDIwMiArMCwwIEBACi0vLyAhJCpVVEY4KiQh
Ci17Ci0JYXJjaGl2ZVZlcnNpb24gPSAxOwotCWNsYXNzZXMgPSB7Ci0JfTsKLQlvYmplY3RWZXJz
aW9uID0gNDY7Ci0Jb2JqZWN0cyA9IHsKLQotLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24g
Ki8KLQkJMkU4RDNFRjgxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOEQzRUY3MTk4ODFENDMwMDRGNkNDMiAv
KiBtYWluLm0gKi87IH07Ci0JCTJFOEQzRjAyMTk4ODFGRDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxh
eS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU4RDNG
MDExOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lm0gKi87IH07Ci0JCTJFOEQzRjA2MTk4
ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU4RDNGMDUxOTg4MjQwNjAwNEY2Q0MyIC8qIExU
UmVsYXlDb250cm9sbGVyLm0gKi87IH07Ci0vKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8K
LQotLyogQmVnaW4gUEJYQ29weUZpbGVzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0JCTJFOEQzRUYy
MTk4ODFENDMwMDRGNkNDMiAvKiBDb3B5RmlsZXMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhDb3B5Rmls
ZXNCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWRzdFBh
dGggPSAvdXNyL3NoYXJlL21hbi9tYW4xLzsKLQkJCWRzdFN1YmZvbGRlclNwZWMgPSAwOwotCQkJ
ZmlsZXMgPSAoCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDE7Ci0JCX07Ci0vKiBFbmQgUEJYQ29weUZpbGVzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0KLS8q
IEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwotCQkyRThEM0VGNDE5ODgxRDQzMDA0
RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4
cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5J
bmRleCA9IDA7IHBhdGggPSBMYXlvdXRUZXN0UmVsYXk7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9E
VUNUU19ESVI7IH07Ci0JCTJFOEQzRUY3MTk4ODFENDMwMDRGNkNDMiAvKiBtYWluLm0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
b2JqYzsgcGF0aCA9IG1haW4ubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNF
RkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IG5hbWUg
PSBEZWJ1Z1JlbGVhc2UueGNjb25maWc7IHBhdGggPSBDb25maWd1cmF0aW9ucy9EZWJ1Z1JlbGVh
c2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOEQzRUZGMTk4ODFF
MjUwMDRGNkNDMiAvKiBCYXNlLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgbmFtZSA9IEJhc2UueGNjb25maWc7
IHBhdGggPSBDb25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkyRThEM0YwMDE5ODgxRjI5MDA0RjZDQzIgLyogTFRSZWxheS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBMVFJlbGF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOEQzRjAx
MTk4ODFGRDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lm9iamM7IHBhdGggPSBMVFBpcGVSZWxheS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkyRThEM0YwMzE5ODgxRkUyMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTFRQaXBlUmVsYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDQx
OTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExUUmVsYXlDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTJFOEQzRjA1MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBMVFJlbGF5Q29udHJvbGxlci5t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDRTFGQkMxNTFCMjkwRTc5MDAwMTM2RjUg
LyogQ29yZVNpbXVsYXRvclNQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b3JlU2ltdWxhdG9yU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0vKiBFbmQgUEJY
RmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBo
YXNlIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjExOTg4MUQ0MzAwNEY2Q0MyIC8qIEZyYW1ld29ya3Mg
Ki8gPSB7Ci0JCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9u
TWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKLS8qIEVuZCBQQlhGcmFtZXdvcmtzQnVp
bGRQaGFzZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWEdyb3VwIHNlY3Rpb24gKi8KLQkJMkU4
RDNFRUIxOTg4MUQ0MzAwNEY2Q0MyID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJl
biA9ICgKLQkJCQkyRThEM0VGRjE5ODgxRTI1MDA0RjZDQzIgLyogQmFzZS54Y2NvbmZpZyAqLywK
LQkJCQkyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICov
LAotCQkJCTJFOEQzRUY2MTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8sCi0J
CQkJMkU4RDNFRjUxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2R1Y3RzICovLAotCQkJKTsKLQkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCTJFOEQzRUY1MTk4ODFENDMwMDRGNkNDMiAv
KiBQcm9kdWN0cyAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0J
CQkJMkU4RDNFRjQxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLywKLQkJCSk7
Ci0JCQluYW1lID0gUHJvZHVjdHM7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9Owot
CQkyRThEM0VGNjE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovID0gewotCQkJ
aXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQkyRThEM0VGNzE5ODgxRDQzMDA0
RjZDQzIgLyogbWFpbi5tICovLAotCQkJCUNFMUZCQzE1MUIyOTBFNzkwMDAxMzZGNSAvKiBDb3Jl
U2ltdWxhdG9yU1BJLmggKi8sCi0JCQkJMkU4RDNGMDAxOTg4MUYyOTAwNEY2Q0MyIC8qIExUUmVs
YXkuaCAqLywKLQkJCQkyRThEM0YwMTE5ODgxRkQwMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkubSAq
LywKLQkJCQkyRThEM0YwMzE5ODgxRkUyMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkuaCAqLywKLQkJ
CQkyRThEM0YwNDE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIuaCAqLywKLQkJ
CQkyRThEM0YwNTE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIubSAqLywKLQkJ
CSk7Ci0JCQlwYXRoID0gTGF5b3V0VGVzdFJlbGF5OwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKLQkJfTsKLS8qIEVuZCBQQlhHcm91cCBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWE5hdGl2
ZVRhcmdldCBzZWN0aW9uICovCi0JCTJFOEQzRUYzMTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRU
ZXN0UmVsYXkgKi8gPSB7Ci0JCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7Ci0JCQlidWlsZENvbmZp
Z3VyYXRpb25MaXN0ID0gMkU4RDNFRkIxOTg4MUQ0MzAwNEY2Q0MyIC8qIEJ1aWxkIGNvbmZpZ3Vy
YXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJMYXlvdXRUZXN0UmVsYXkiICovOwotCQkJ
YnVpbGRQaGFzZXMgPSAoCi0JCQkJMkU4RDNFRjAxOTg4MUQ0MzAwNEY2Q0MyIC8qIFNvdXJjZXMg
Ki8sCi0JCQkJMkU4RDNFRjExOTg4MUQ0MzAwNEY2Q0MyIC8qIEZyYW1ld29ya3MgKi8sCi0JCQkJ
MkU4RDNFRjIxOTg4MUQ0MzAwNEY2Q0MyIC8qIENvcHlGaWxlcyAqLywKLQkJCSk7Ci0JCQlidWls
ZFJ1bGVzID0gKAotCQkJKTsKLQkJCWRlcGVuZGVuY2llcyA9ICgKLQkJCSk7Ci0JCQluYW1lID0g
TGF5b3V0VGVzdFJlbGF5OwotCQkJcHJvZHVjdE5hbWUgPSBMYXlvdXRUZXN0UmVsYXk7Ci0JCQlw
cm9kdWN0UmVmZXJlbmNlID0gMkU4RDNFRjQxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RS
ZWxheSAqLzsKLQkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUudG9vbCI7
Ci0JCX07Ci0vKiBFbmQgUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJY
UHJvamVjdCBzZWN0aW9uICovCi0JCTJFOEQzRUVDMTk4ODFENDMwMDRGNkNDMiAvKiBQcm9qZWN0
IG9iamVjdCAqLyA9IHsKLQkJCWlzYSA9IFBCWFByb2plY3Q7Ci0JCQlhdHRyaWJ1dGVzID0gewot
CQkJCUxhc3RVcGdyYWRlQ2hlY2sgPSAwNjAwOwotCQkJCU9SR0FOSVpBVElPTk5BTUUgPSAiQXBw
bGUsIEluYy4iOwotCQkJCVRhcmdldEF0dHJpYnV0ZXMgPSB7Ci0JCQkJCTJFOEQzRUYzMTk4ODFE
NDMwMDRGNkNDMiA9IHsKLQkJCQkJCUNyZWF0ZWRPblRvb2xzVmVyc2lvbiA9IDYuMDsKLQkJCQkJ
fTsKLQkJCQl9OwotCQkJfTsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAyRThEM0VFRjE5
ODgxRDQzMDA0RjZDQzIgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0
ICJMYXlvdXRUZXN0UmVsYXkiICovOwotCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUg
My4yIjsKLQkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsKLQkJCWhhc1NjYW5uZWRGb3JF
bmNvZGluZ3MgPSAwOwotCQkJa25vd25SZWdpb25zID0gKAotCQkJCWVuLAotCQkJKTsKLQkJCW1h
aW5Hcm91cCA9IDJFOEQzRUVCMTk4ODFENDMwMDRGNkNDMjsKLQkJCXByb2R1Y3RSZWZHcm91cCA9
IDJFOEQzRUY1MTk4ODFENDMwMDRGNkNDMiAvKiBQcm9kdWN0cyAqLzsKLQkJCXByb2plY3REaXJQ
YXRoID0gIiI7Ci0JCQlwcm9qZWN0Um9vdCA9ICIiOwotCQkJdGFyZ2V0cyA9ICgKLQkJCQkyRThE
M0VGMzE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovLAotCQkJKTsKLQkJfTsK
LS8qIEVuZCBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYU291cmNlc0J1aWxk
UGhhc2Ugc2VjdGlvbiAqLwotCQkyRThEM0VGMDE5ODgxRDQzMDA0RjZDQzIgLyogU291cmNlcyAq
LyA9IHsKLQkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJCTJFOEQzRjA2MTk4ODI0MDYwMDRGNkND
MiAvKiBMVFJlbGF5Q29udHJvbGxlci5tIGluIFNvdXJjZXMgKi8sCi0JCQkJMkU4RDNFRjgxOTg4
MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSBpbiBTb3VyY2VzICovLAotCQkJCTJFOEQzRjAyMTk4ODFG
RDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5tIGluIFNvdXJjZXMgKi8sCi0JCQkpOwotCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07Ci0vKiBFbmQgUEJYU291
cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBYQ0J1aWxkQ29uZmlndXJhdGlv
biBzZWN0aW9uICovCi0JCTJFOEQzRUY5MTk4ODFENDMwMDRGNkNDMiAvKiBEZWJ1ZyAqLyA9IHsK
LQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZl
cmVuY2UgPSAyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmln
ICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCX07Ci0JCQluYW1lID0gRGVidWc7Ci0JCX07
Ci0JCTJFOEQzRUZBMTk4ODFENDMwMDRGNkNDMiAvKiBSZWxlYXNlICovID0gewotCQkJaXNhID0g
WENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDJF
OEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi87Ci0JCQli
dWlsZFNldHRpbmdzID0gewotCQkJfTsKLQkJCW5hbWUgPSBSZWxlYXNlOwotCQl9OwotCQkyRThE
M0VGQzE5ODgxRDQzMDA0RjZDQzIgLyogRGVidWcgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29u
ZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gMkU4RDNFRkUxOTg4
MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLzsKLQkJCWJ1aWxkU2V0dGlu
Z3MgPSB7Ci0JCQkJUFJPRFVDVF9OQU1FID0gIiQoVEFSR0VUX05BTUUpIjsKLQkJCX07Ci0JCQlu
YW1lID0gRGVidWc7Ci0JCX07Ci0JCTJFOEQzRUZEMTk4ODFENDMwMDRGNkNDMiAvKiBSZWxlYXNl
ICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJh
dGlvblJlZmVyZW5jZSA9IDJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2Uu
eGNjb25maWcgKi87Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJCVBST0RVQ1RfTkFNRSA9ICIk
KFRBUkdFVF9OQU1FKSI7Ci0JCQl9OwotCQkJbmFtZSA9IFJlbGVhc2U7Ci0JCX07Ci0vKiBFbmQg
WENCdWlsZENvbmZpZ3VyYXRpb24gc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBYQ0NvbmZpZ3VyYXRp
b25MaXN0IHNlY3Rpb24gKi8KLQkJMkU4RDNFRUYxOTg4MUQ0MzAwNEY2Q0MyIC8qIEJ1aWxkIGNv
bmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiTGF5b3V0VGVzdFJlbGF5IiAqLyA9IHsK
LQkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25zID0g
KAotCQkJCTJFOEQzRUY5MTk4ODFENDMwMDRGNkNDMiAvKiBEZWJ1ZyAqLywKLQkJCQkyRThEM0VG
QTE5ODgxRDQzMDA0RjZDQzIgLyogUmVsZWFzZSAqLywKLQkJCSk7Ci0JCQlkZWZhdWx0Q29uZmln
dXJhdGlvbklzVmlzaWJsZSA9IDA7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxl
YXNlOwotCQl9OwotCQkyRThEM0VGQjE5ODgxRDQzMDA0RjZDQzIgLyogQnVpbGQgY29uZmlndXJh
dGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIkxheW91dFRlc3RSZWxheSIgKi8gPSB7Ci0J
CQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgK
LQkJCQkyRThEM0VGQzE5ODgxRDQzMDA0RjZDQzIgLyogRGVidWcgKi8sCi0JCQkJMkU4RDNFRkQx
OTg4MUQ0MzAwNEY2Q0MyIC8qIFJlbGVhc2UgKi8sCi0JCQkpOwotCQkJZGVmYXVsdENvbmZpZ3Vy
YXRpb25Jc1Zpc2libGUgPSAwOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUmVsZWFz
ZTsKLQkJfTsKLS8qIEVuZCBYQ0NvbmZpZ3VyYXRpb25MaXN0IHNlY3Rpb24gKi8KLQl9OwotCXJv
b3RPYmplY3QgPSAyRThEM0VFQzE5ODgxRDQzMDA0RjZDQzIgLyogUHJvamVjdCBvYmplY3QgKi87
Ci19CkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0NvcmVTaW11
bGF0b3JTUEkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVz
dFJlbGF5L0NvcmVTaW11bGF0b3JTUEkuaAkocmV2aXNpb24gMjEwMjc0KQorKysgVG9vbHMvTGF5
b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9Db3JlU2ltdWxhdG9yU1BJLmgJKG5vbmV4aXN0
ZW50KQpAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIF9faGFzX2luY2x1
ZGUoPENvcmVTaW11bGF0b3IvQ29yZVNpbXVsYXRvci5oPikKLQotLyogRklYTUU6IFJlbW92ZSB0
aGUgYmVsb3cgI2RlZmluZSBvbmNlIHdlIHJlcXVpcmUgWGNvZGUgNy4zIHdpdGggaU9TIDkuMyBT
REsgb3IgbmV3ZXIuICovCi0jZGVmaW5lIF9fY29yZXNpbV91bmF2YWlsYWJsZV9tc2cobXNnKQot
I2ltcG9ydCA8Q29yZVNpbXVsYXRvci9Db3JlU2ltdWxhdG9yLmg+Ci0KLS8qIEZJWE1FOiBBbHdh
eXMgdXNlIFNpbVNlcnZpY2VDb250ZXh0IG9uY2Ugd2UgcmVxdWlyZSBYY29kZSA3LjMgd2l0aCBp
T1MgOS4zIFNESyBvciBuZXdlci4gKi8KLSNkZWZpbmUgVVNFX1NJTV9TRVJWSUNFX0NPTlRFWFQg
ZGVmaW5lZChDT1JFU0lNX0FQSV9NQVhfQUxMT1dFRCkKLQotI2Vsc2UKLQotI2ltcG9ydCA8Rm91
bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNkZWZpbmUgVVNFX1NJTV9TRVJWSUNFX0NPTlRFWFQg
MQotCi0jZGVmaW5lIGtTaW1EZXZpY2VMYXVuY2hBcHBsaWNhdGlvbkFyZ3VtZW50cyBAImFyZ3Vt
ZW50cyIKLSNkZWZpbmUga1NpbURldmljZUxhdW5jaEFwcGxpY2F0aW9uRW52aXJvbm1lbnQgQCJl
bnZpcm9ubWVudCIKLQotQGludGVyZmFjZSBTaW1EZXZpY2UgOiBOU09iamVjdAotLSAoQk9PTClp
bnN0YWxsQXBwbGljYXRpb246KE5TVVJMICopaW5zdGFsbFVSTCB3aXRoT3B0aW9uczooTlNEaWN0
aW9uYXJ5ICopb3B0aW9ucyBlcnJvcjooTlNFcnJvciAqIF9fYXV0b3JlbGVhc2luZyAqKWVycm9y
OwotLSAocGlkX3QpbGF1bmNoQXBwbGljYXRpb25XaXRoSUQ6KE5TU3RyaW5nICopYnVuZGxlSUQg
b3B0aW9uczooTlNEaWN0aW9uYXJ5ICopb3B0aW9ucyBlcnJvcjooTlNFcnJvciAqIF9fYXV0b3Jl
bGVhc2luZyAqKWVycm9yOwotQGVuZAotCi1AaW50ZXJmYWNlIFNpbURldmljZVNldCA6IE5TT2Jq
ZWN0Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBjb3B5KSBOU0RpY3Rpb25hcnkgKmRldmljZXNCeVVE
SUQ7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgU2ltU2VydmljZUNvbnRleHQgOiBOU09iamVjdAotKyhT
aW1TZXJ2aWNlQ29udGV4dCAqKXNoYXJlZFNlcnZpY2VDb250ZXh0Rm9yRGV2ZWxvcGVyRGlyOihO
U1N0cmluZyAqKWRldmVsb3BlckRpciBlcnJvcjooTlNFcnJvciAqIF9fYXV0b3JlbGVhc2luZyAq
KWVycm9yOwotLShTaW1EZXZpY2VTZXQgKilkZWZhdWx0RGV2aWNlU2V0V2l0aEVycm9yOihOU0Vy
cm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci1AZW5kCi0KLSNlbmRpZgpJbmRleDogVG9v
bHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRQaXBlUmVsYXku
aAkocmV2aXNpb24gMjEwMjc0KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RS
ZWxheS9MVFBpcGVSZWxheS5oCShub25leGlzdGVudCkKQEAgLTEsMzYgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgTFRQaXBlUmVsYXlfaAotI2RlZmluZSBMVFBpcGVSZWxheV9oCi0KLSNp
bXBvcnQgIkxUUmVsYXkuaCIKLQotQGludGVyZmFjZSBMVFBpcGVSZWxheSA6IE5TT2JqZWN0IDxM
VFJlbGF5PgotQHByb3BlcnR5ICh3ZWFrKSBpZDxMVFJlbGF5RGVsZWdhdGU+IHJlbGF5RGVsZWdh
dGU7Ci0tIChpZClpbml0V2l0aFByZWZpeDooTlNTdHJpbmcgKilwcmVmaXg7Ci1AZW5kCi0KLSNl
bmRpZgpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVS
ZWxheS5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVs
YXkvTFRQaXBlUmVsYXkubQkocmV2aXNpb24gMjEwMjc0KQorKysgVG9vbHMvTGF5b3V0VGVzdFJl
bGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5tCShub25leGlzdGVudCkKQEAgLTEsMTU4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJMVFBpcGVSZWxheS5oIgotCi0jaW1wb3J0
IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1
ZGUgPHN5cy90eXBlcy5oPgotCi1AaW50ZXJmYWNlIExUUGlwZVJlbGF5ICgpCi1AcHJvcGVydHkg
KHJlYWRvbmx5LCBzdHJvbmcpIE5TU3RyaW5nICpmaWZvUHJlZml4OwotQHByb3BlcnR5IChzdHJv
bmcpIE5TT3V0cHV0U3RyZWFtICpzdGFuZGFyZElucHV0UGlwZTsKLUBwcm9wZXJ0eSAoc3Ryb25n
KSBOU0lucHV0U3RyZWFtICpzdGFuZGFyZE91dHB1dFBpcGU7Ci1AcHJvcGVydHkgKHN0cm9uZykg
TlNJbnB1dFN0cmVhbSAqc3RhbmRhcmRFcnJvclBpcGU7Ci0KLS0gKHZvaWQpY3JlYXRlRklGT3M7
Ci0tICh2b2lkKWRlc3Ryb3lGSUZPczsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIExUUGlwZVJl
bGF5Ci0KLS0gKE5TU3RyaW5nICopaW5QaXBlUGF0aAotewotICAgIHJldHVybiBbX2ZpZm9QcmVm
aXggc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6QCJfSU4iXTsKLX0KLQotLSAoTlNTdHJpbmcgKilv
dXRQaXBlUGF0aAotewotICAgIHJldHVybiBbX2ZpZm9QcmVmaXggc3RyaW5nQnlBcHBlbmRpbmdT
dHJpbmc6QCJfT1VUIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopZXJyb3JQaXBlUGF0aAotewotICAg
IHJldHVybiBbX2ZpZm9QcmVmaXggc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6QCJfRVJST1IiXTsK
LX0KLQotLSAoTlNPdXRwdXRTdHJlYW0gKikgb3V0cHV0U3RyZWFtCi17Ci0gICAgcmV0dXJuIF9z
dGFuZGFyZElucHV0UGlwZTsKLX0KLQotLSAoaWQpaW5pdFdpdGhQcmVmaXg6KE5TU3RyaW5nICop
cHJlZml4Ci17Ci0gICAgaWYgKChzZWxmID0gW3N1cGVyIGluaXRdKSkgewotICAgICAgICBfZmlm
b1ByZWZpeCA9IHByZWZpeDsKLSAgICAgICAgW3NlbGYgZGVzdHJveUZJRk9zXTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0dXAKLXsKLSAgICBbc2VsZiBkZXN0cm95
RklGT3NdOwotICAgIFtzZWxmIGNyZWF0ZUZJRk9zXTsKLX0KLQotLSAodm9pZCl0ZWFyRG93bgot
ewotICAgIFtzZWxmIGRlc3Ryb3lGSUZPc107Ci19Ci0KLS0odm9pZCkgY29ubmVjdAotewotICAg
IF9zdGFuZGFyZElucHV0UGlwZSA9IFtOU091dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW1Ub0ZpbGVB
dFBhdGg6W3NlbGYgaW5QaXBlUGF0aF0gYXBwZW5kOllFU107Ci0gICAgX3N0YW5kYXJkT3V0cHV0
UGlwZSA9IFtOU0lucHV0U3RyZWFtIGlucHV0U3RyZWFtV2l0aEZpbGVBdFBhdGg6W3NlbGYgb3V0
UGlwZVBhdGhdXTsKLSAgICBfc3RhbmRhcmRFcnJvclBpcGUgPSBbTlNJbnB1dFN0cmVhbSBpbnB1
dFN0cmVhbVdpdGhGaWxlQXRQYXRoOltzZWxmIGVycm9yUGlwZVBhdGhdXTsKLQotICAgIFtbc2Vs
ZiBzdGFuZGFyZElucHV0UGlwZV0gc2V0RGVsZWdhdGU6c2VsZl07Ci0gICAgW1tzZWxmIHN0YW5k
YXJkT3V0cHV0UGlwZV0gc2V0RGVsZWdhdGU6c2VsZl07Ci0gICAgW1tzZWxmIHN0YW5kYXJkRXJy
b3JQaXBlXSBzZXREZWxlZ2F0ZTpzZWxmXTsKLQotICAgIFtbc2VsZiBzdGFuZGFyZE91dHB1dFBp
cGVdIHNjaGVkdWxlSW5SdW5Mb29wOltOU1J1bkxvb3AgbWFpblJ1bkxvb3BdIGZvck1vZGU6TlNE
ZWZhdWx0UnVuTG9vcE1vZGVdOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yUGlwZV0gc2NoZWR1
bGVJblJ1bkxvb3A6W05TUnVuTG9vcCBtYWluUnVuTG9vcF0gZm9yTW9kZTpOU0RlZmF1bHRSdW5M
b29wTW9kZV07Ci0KLSAgICBbW3NlbGYgc3RhbmRhcmRJbnB1dFBpcGVdIG9wZW5dOwotICAgIFtb
c2VsZiBzdGFuZGFyZE91dHB1dFBpcGVdIG9wZW5dOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9y
UGlwZV0gb3Blbl07Ci0KLSAgICBbW3NlbGYgcmVsYXlEZWxlZ2F0ZV0gZGlkQ29ubmVjdF07Ci19
Ci0KLS0gKHZvaWQpZGlzY29ubmVjdAotewotICAgIFtbc2VsZiBzdGFuZGFyZE91dHB1dFBpcGVd
IGNsb3NlXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRFcnJvclBpcGVdIGNsb3NlXTsKLSAgICBbW3Nl
bGYgc3RhbmRhcmRJbnB1dFBpcGVdIGNsb3NlXTsKLSAgICBbW3NlbGYgcmVsYXlEZWxlZ2F0ZV0g
ZGlkRGlzY29ubmVjdF07Ci19Ci0KLS0gKHZvaWQpY3JlYXRlRklGT3MKLXsKLSAgICBta2ZpZm8o
W1tzZWxmIGluUGlwZVBhdGhdIFVURjhTdHJpbmddLCAwNjY2KTsKLSAgICBta2ZpZm8oW1tzZWxm
IG91dFBpcGVQYXRoXSBVVEY4U3RyaW5nXSwgMDY2Nik7Ci0gICAgbWtmaWZvKFtbc2VsZiBlcnJv
clBpcGVQYXRoXSBVVEY4U3RyaW5nXSwgMDY2Nik7Ci19Ci0KLS0gKHZvaWQpZGVzdHJveUZJRk9z
Ci17Ci0gICAgdW5saW5rKFtbc2VsZiBpblBpcGVQYXRoXSBVVEY4U3RyaW5nXSk7Ci0gICAgdW5s
aW5rKFtbc2VsZiBvdXRQaXBlUGF0aF0gVVRGOFN0cmluZ10pOwotICAgIHVubGluayhbW3NlbGYg
ZXJyb3JQaXBlUGF0aF0gVVRGOFN0cmluZ10pOwotfQotCi0tICh2b2lkKSByZWxheVN0cmVhbToo
TlNJbnB1dFN0cmVhbSAqKXN0cmVhbQotewotICAgIHVpbnQ4X3QgYnl0ZXNbMTAyNF07Ci0gICAg
TlNJbnRlZ2VyIGJ5dGVzUmVhZCA9IFtzdHJlYW0gcmVhZDpieXRlcyBtYXhMZW5ndGg6MTAyNF07
Ci0gICAgTlNEYXRhICpkYXRhID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmJ5dGVzIGxlbmd0aDpi
eXRlc1JlYWRdOwotCi0gICAgaWYgKHN0cmVhbSA9PSBbc2VsZiBzdGFuZGFyZE91dHB1dFBpcGVd
KQotICAgICAgICBbW3NlbGYgcmVsYXlEZWxlZ2F0ZV0gZGlkUmVjZWl2ZVN0ZG91dERhdGE6ZGF0
YV07Ci0gICAgZWxzZQotICAgICAgICBbW3NlbGYgcmVsYXlEZWxlZ2F0ZV0gZGlkUmVjZWl2ZVN0
ZGVyckRhdGE6ZGF0YV07Ci19Ci0KLS0gKHZvaWQpc3RyZWFtOihOU1N0cmVhbSAqKWFTdHJlYW0g
aGFuZGxlRXZlbnQ6KE5TU3RyZWFtRXZlbnQpZXZlbnRDb2RlCi17Ci0gICAgc3dpdGNoIChldmVu
dENvZGUpIHsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnROb25lOgotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIE5TU3RyZWFtRXZlbnRIYXNCeXRlc0F2YWlsYWJsZToKLSAgICAgICAgW3NlbGYgcmVs
YXlTdHJlYW06KE5TSW5wdXRTdHJlYW0gKilhU3RyZWFtXTsKLSAgICBjYXNlIE5TU3RyZWFtRXZl
bnRIYXNTcGFjZUF2YWlsYWJsZToKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOU1N0cmVhbUV2
ZW50T3BlbkNvbXBsZXRlZDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOU1N0cmVhbUV2ZW50
RW5kRW5jb3VudGVyZWQ6Ci0gICAgICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRDcmFzaFdp
dGhNZXNzYWdlOm5pbF07Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlNTdHJlYW1FdmVudEVy
cm9yT2NjdXJyZWQ6Ci0gICAgICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRDcmFzaFdpdGhN
ZXNzYWdlOltbYVN0cmVhbSBzdHJlYW1FcnJvcl0gZGVzY3JpcHRpb25dXTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotfQotCi1AZW5kCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0
VGVzdFJlbGF5L0xUUmVsYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkv
TGF5b3V0VGVzdFJlbGF5L0xUUmVsYXkuaAkocmV2aXNpb24gMjEwMjc0KQorKysgVG9vbHMvTGF5
b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5LmgJKG5vbmV4aXN0ZW50KQpAQCAt
MSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBMVFJlbGF5X2gKLSNkZWZpbmUgTFRS
ZWxheV9oCi0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi1AcHJvdG9jb2wg
TFRSZWxheURlbGVnYXRlIDxOU09iamVjdD4KLS0gKHZvaWQpZGlkQ29ubmVjdDsKLS0gKHZvaWQp
ZGlkRGlzY29ubmVjdDsKLS0gKHZvaWQpZGlkQ3Jhc2hXaXRoTWVzc2FnZTooTlNTdHJpbmcgKilt
ZXNzYWdlOwotLSAodm9pZClkaWRSZWNlaXZlU3Rkb3V0RGF0YTooTlNEYXRhICopZGF0YTsKLS0g
KHZvaWQpZGlkUmVjZWl2ZVN0ZGVyckRhdGE6KE5TRGF0YSAqKWRhdGE7Ci1AZW5kCi0KLUBwcm90
b2NvbCBMVFJlbGF5IDxOU09iamVjdCwgTlNTdHJlYW1EZWxlZ2F0ZT4KLS0gKHZvaWQpc2V0dXA7
Ci0tICh2b2lkKXRlYXJEb3duOwotLSAodm9pZCljb25uZWN0OwotLSAodm9pZClkaXNjb25uZWN0
OwotQHByb3BlcnR5ICh3ZWFrKSBpZDxMVFJlbGF5RGVsZWdhdGU+IHJlbGF5RGVsZWdhdGU7Ci1A
cHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TT3V0cHV0U3RyZWFtICpvdXRwdXRTdHJlYW07
Ci1AZW5kCi0KLSNlbmRpZgpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RS
ZWxheS9MVFJlbGF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RS
ZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMjEwMjc0
KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJv
bGxlci5oCShub25leGlzdGVudCkKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0jaWZuZGVm
IExUUmVsYXlDb250cm9sbGVyX2gKLSNkZWZpbmUgTFRSZWxheUNvbnRyb2xsZXJfaAotCi0jaW1w
b3J0ICJMVFJlbGF5LmgiCi0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi1A
Y2xhc3MgU2ltRGV2aWNlOwotCi1AaW50ZXJmYWNlIExUUmVsYXlDb250cm9sbGVyIDogTlNPYmpl
Y3QgPExUUmVsYXlEZWxlZ2F0ZT4KLS0gKGlkKWluaXRXaXRoRGV2aWNlOihTaW1EZXZpY2UgKilk
ZXZpY2UgcHJvZHVjdERpcjooTlNTdHJpbmcgKilwcm9kdWN0RGlyIGFwcFBhdGg6KE5TU3RyaW5n
ICopYXBwUGF0aCBkZXZpY2VVRElEOihOU1VVSUQgKil1ZGlkIGR1bXBUb29sQXJndW1lbnRzOihO
U0FycmF5ICopYXJndW1lbnRzOwotLSAodm9pZClzdGFydDsKLS0gKHZvaWQpZmluaXNoOwotQGVu
ZAotCi0jZW5kaWYKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkv
TFRSZWxheUNvbnRyb2xsZXIubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkv
TGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLm0JKHJldmlzaW9uIDIxMDI3NCkKKysr
IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIu
bQkobm9uZXhpc3RlbnQpCkBAIC0xLDI3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAi
TFRSZWxheUNvbnRyb2xsZXIuaCIKLQotI2ltcG9ydCAiQ29yZVNpbXVsYXRvclNQSS5oIgotI2lt
cG9ydCAiTFRQaXBlUmVsYXkuaCIKLSNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KLSNpbXBvcnQg
PGNydF9leHRlcm5zLmg+Ci0KLUBpbnRlcmZhY2UgTFRSZWxheUNvbnRyb2xsZXIgKCkKLUBwcm9w
ZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgZGlzcGF0Y2hfc291cmNlX3Qgc3RhbmRhcmRJbnB1dERp
c3BhdGNoU291cmNlOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU0ZpbGVIYW5kbGUg
KnN0YW5kYXJkT3V0cHV0OwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU0ZpbGVIYW5k
bGUgKnN0YW5kYXJkRXJyb3I7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TU3RyaW5n
ICppcGNJZGVudGlmaWVyOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU1N0cmluZyAq
YXBwQnVuZGxlSWRlbnRpZmllcjsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJp
bmcgKmFwcFBhdGg7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TVVVJRCAqZGV2aWNl
VURJRDsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNBcnJheSAqZHVtcFRvb2xBcmd1
bWVudHM7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TU3RyaW5nICpwcm9kdWN0RGly
OwotQHByb3BlcnR5IChzdHJvbmcpIFNpbURldmljZSAqZGV2aWNlOwotQHByb3BlcnR5IChzdHJv
bmcpIGlkPExUUmVsYXk+IHJlbGF5OwotQHByb3BlcnR5IHBpZF90IHBpZDsKLUBwcm9wZXJ0eSAo
c3Ryb25nKSBkaXNwYXRjaF9zb3VyY2VfdCBhcHBEaXNwYXRjaFNvdXJjZTsKLUBlbmQKLQotQGlt
cGxlbWVudGF0aW9uIExUUmVsYXlDb250cm9sbGVyCi0KLS0gKGlkKWluaXRXaXRoRGV2aWNlOihT
aW1EZXZpY2UgKilkZXZpY2UgcHJvZHVjdERpcjooTlNTdHJpbmcgKilwcm9kdWN0RGlyIGFwcFBh
dGg6KE5TU3RyaW5nICopYXBwUGF0aCBkZXZpY2VVRElEOihOU1VVSUQgKil1ZGlkIGR1bXBUb29s
QXJndW1lbnRzOihOU0FycmF5ICopYXJndW1lbnRzCi17Ci0gICAgaWYgKChzZWxmID0gW3N1cGVy
IGluaXRdKSkgewotICAgICAgICBfZGV2aWNlID0gZGV2aWNlOwotICAgICAgICBfcHJvZHVjdERp
ciA9IHByb2R1Y3REaXI7Ci0gICAgICAgIF9hcHBQYXRoID0gYXBwUGF0aDsKLSAgICAgICAgX2Fw
cEJ1bmRsZUlkZW50aWZpZXIgPSBbW05TQnVuZGxlIGJ1bmRsZVdpdGhQYXRoOmFwcFBhdGhdIGJ1
bmRsZUlkZW50aWZpZXJdOwotICAgICAgICBfZGV2aWNlVURJRCA9IHVkaWQ7Ci0gICAgICAgIF9k
dW1wVG9vbEFyZ3VtZW50cyA9IGFyZ3VtZW50czsKLSAgICAgICAgX3N0YW5kYXJkSW5wdXREaXNw
YXRjaFNvdXJjZSA9IGRpc3BhdGNoX3NvdXJjZV9jcmVhdGUoRElTUEFUQ0hfU09VUkNFX1RZUEVf
UkVBRCwgU1RESU5fRklMRU5PLCAwLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpKTsKLSAgICAg
ICAgX3N0YW5kYXJkT3V0cHV0ID0gW05TRmlsZUhhbmRsZSBmaWxlSGFuZGxlV2l0aFN0YW5kYXJk
T3V0cHV0XTsKLSAgICAgICAgX3N0YW5kYXJkRXJyb3IgPSBbTlNGaWxlSGFuZGxlIGZpbGVIYW5k
bGVXaXRoU3RhbmRhcmRFcnJvcl07Ci0KLSAgICAgICAgZGlzcGF0Y2hfc291cmNlX3NldF9ldmVu
dF9oYW5kbGVyKF9zdGFuZGFyZElucHV0RGlzcGF0Y2hTb3VyY2UsIF57Ci0gICAgICAgICAgICB1
aW50OF90IGJ1ZmZlclsxMDI0XTsKLSAgICAgICAgICAgIHNzaXplX3QgbGVuID0gcmVhZChTVERJ
Tl9GSUxFTk8sIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOwotICAgICAgICAgICAgaWYgKGxlbiA+
IDApIHsKLSAgICAgICAgICAgICAgICBAdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgW1tbc2Vs
ZiByZWxheV0gb3V0cHV0U3RyZWFtXSB3cml0ZTpidWZmZXIgbWF4TGVuZ3RoOmxlbl07Ci0gICAg
ICAgICAgICAgICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICplKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhlIGR1bXAgdG9vbCBjcmFzaGVkLiBUaW1lIHRvIGRpZS4K
LSAgICAgICAgICAgICAgICAgICAgW3NlbGYgZGlkQ3Jhc2hXaXRoTWVzc2FnZTpuaWxdOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8g
RU9GIFJlY2VpdmVkIG9uIHRoZSByZWxheSdzIHN0YW5kYXJkIGlucHV0LgotICAgICAgICAgICAg
ICAgIFtzZWxmIGZpbmlzaF07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAg
IF9yZWxheSA9IFtbTFRQaXBlUmVsYXkgYWxsb2NdIGluaXRXaXRoUHJlZml4OltAIi90bXAiIHN0
cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpzZWxmLmlwY0lkZW50aWZpZXJdXTsKLSAgICAg
ICAgW19yZWxheSBzZXRSZWxheURlbGVnYXRlOnNlbGZdOwotICAgIH0KLSAgICByZXR1cm4gc2Vs
ZjsKLX0KLQotLSAoTlNTdHJpbmcgKilpcGNJZGVudGlmaWVyCi17Ci0gICAgcmV0dXJuIFtOU1N0
cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAtJUAiLCBzZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIs
IHNlbGYuZGV2aWNlVURJRC5VVUlEU3RyaW5nXTsKLX0KLQotLSAoTlNTdHJpbmcgKilwcm9jZXNz
TmFtZQotewotICAgIHJldHVybiBbc2VsZi5hcHBCdW5kbGVJZGVudGlmaWVyIGNvbXBvbmVudHNT
ZXBhcmF0ZWRCeVN0cmluZzpAIi4iXS5sYXN0T2JqZWN0OwotfQotCi0tICh2b2lkKWRpZFJlY2Vp
dmVTdGRvdXREYXRhOihOU0RhdGEgKilkYXRhCi17Ci0gICAgQHRyeSB7Ci0gICAgICAgIFtbc2Vs
ZiBzdGFuZGFyZE91dHB1dF0gd3JpdGVEYXRhOmRhdGFdOwotICAgIH0gQGNhdGNoIChOU0V4Y2Vw
dGlvbiAqZXhjZXB0aW9uKSB7Ci0gICAgICAgIC8vIE5TRmlsZUhhbmRsZU9wZXJhdGlvbkV4Y2Vw
dGlvbgotICAgICAgICAvLyBCcm9rZW4gcGlwZSAtIHRoZSB0ZXN0IGhhcm5lc3Mgc3RvcHBlZCBs
aXN0ZW5pbmcgdG8gdXMsCi0gICAgICAgIC8vIHByb2JhYmx5IGJlY2F1c2Ugd2UgdGltZWQgb3V0
IG9yIGEgcnVuIHdhcyBjYW5jZWxlZC4KLSAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAg
IH0KLX0KLQotLSAodm9pZClkaWRSZWNlaXZlU3RkZXJyRGF0YTooTlNEYXRhICopZGF0YQotewot
ICAgIEB0cnkgewotICAgICAgICBbW3NlbGYgc3RhbmRhcmRFcnJvcl0gd3JpdGVEYXRhOmRhdGFd
OwotICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAqZXhjZXB0aW9uKSB7Ci0gICAgICAgIC8vIE5T
RmlsZUhhbmRsZU9wZXJhdGlvbkV4Y2VwdGlvbgotICAgICAgICAvLyBCcm9rZW4gcGlwZSAtIHRo
ZSB0ZXN0IGhhcm5lc3Mgc3RvcHBlZCBsaXN0ZW5pbmcgdG8gdXMsCi0gICAgICAgIC8vIHByb2Jh
Ymx5IGJlY2F1c2Ugd2UgdGltZWQgb3V0IG9yIGEgcnVuIHdhcyBjYW5jZWxlZC4KLSAgICAgICAg
ZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0KLX0KLQotLSAodm9pZClkaWREaXNjb25uZWN0Ci17
Ci0gICAgZGlzcGF0Y2hfc3VzcGVuZChbc2VsZiBzdGFuZGFyZElucHV0RGlzcGF0Y2hTb3VyY2Vd
KTsKLX0KLQotLSAodm9pZClkaWRDb25uZWN0Ci17Ci0gICAgZGlzcGF0Y2hfcmVzdW1lKFtzZWxm
IHN0YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJjZV0pOwotfQotCi0tICh2b2lkKWRpZENyYXNoV2l0
aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIFtbc2VsZiByZWxheV0gZGlzY29u
bmVjdF07Ci0gICAgTlNTdHJpbmcgKmNyYXNoTWVzc2FnZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRo
Rm9ybWF0OkAiXG4jQ1JBU0hFRCAtICVAIChwaWQgJWQpXG4iLCBbc2VsZiBwcm9jZXNzTmFtZV0s
IFtzZWxmIHBpZF1dOwotCi0gICAgaWYgKG1lc3NhZ2UpCi0gICAgICAgIGNyYXNoTWVzc2FnZSA9
IFtjcmFzaE1lc3NhZ2Ugc3RyaW5nQnlBcHBlbmRpbmdGb3JtYXQ6QCIlQFxuIiwgbWVzc2FnZV07
Ci0KLSAgICBbW3NlbGYgc3RhbmRhcmRFcnJvcl0gd3JpdGVEYXRhOltjcmFzaE1lc3NhZ2UgZGF0
YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddXTsKLSAgICBbW3NlbGYgc3RhbmRh
cmRFcnJvcl0gY2xvc2VGaWxlXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRdIGNsb3NlRmls
ZV07Ci0gICAgZXhpdChFWElUX0ZBSUxVUkUpOwotfQotCi0tICh2b2lkKWluc3RhbGxBcHAKLXsK
LSAgICBOU0RpY3Rpb25hcnkgKmluc3RhbGxPcHRpb25zID0gQHsKLSAgICAgICAgKE5TU3RyaW5n
ICopa0NGQnVuZGxlSWRlbnRpZmllcktleTogc2VsZi5hcHBCdW5kbGVJZGVudGlmaWVyLAotICAg
IH07Ci0KLSAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKLSAgICBCT09MIGluc3RhbGxlZCA9IFtz
ZWxmLmRldmljZSBpbnN0YWxsQXBwbGljYXRpb246W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpzZWxm
LmFwcFBhdGhdIHdpdGhPcHRpb25zOmluc3RhbGxPcHRpb25zIGVycm9yOiZlcnJvcl07Ci0gICAg
aWYgKCFpbnN0YWxsZWQpIHsKLSAgICAgICAgTlNMb2coQCJDb3VsZG4ndCBpbnN0YWxsICVAOiAl
QCIsIHNlbGYuYXBwUGF0aCwgZXJyb3IuZGVzY3JpcHRpb24pOwotICAgICAgICBleGl0KEVYSVRf
RkFJTFVSRSk7Ci0gICAgfQotfQotCi0tICh2b2lkKWtpbGxBcHAKLXsKLSAgICBkaXNwYXRjaF9z
b3VyY2VfdCBkaXNwYXRjaCA9IFtzZWxmIGFwcERpc3BhdGNoU291cmNlXTsKLQotICAgIGlmIChk
aXNwYXRjaCkKLSAgICAgICAgZGlzcGF0Y2hfc291cmNlX2NhbmNlbChkaXNwYXRjaCk7Ci0KLSAg
ICBpZiAoW3NlbGYgcGlkXSA+IDEpIHsKLSAgICAgICAga2lsbChzZWxmLnBpZCwgU0lHS0lMTCk7
Ci0gICAgICAgIFtzZWxmIHNldFBpZDotMV07Ci0gICAgfQotICAgIFtzZWxmIHNldEFwcERpc3Bh
dGNoU291cmNlOm5pbF07Ci19Ci0KLS0gKE5TRGljdGlvbmFyeSAqKV9lbnZpcm9ubWVudFZhcmlh
YmxlcwotewotICAgIHN0YXRpYyBOU0RpY3Rpb25hcnkgKmVudmlyb25tZW50VmFyaWFibGVzOwot
ICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZTsKLQotICAgIGRpc3BhdGNoX29uY2UoJm9u
Y2UsIF57Ci0gICAgICAgIE5TU3RyaW5nICpwcm9kdWN0RGlyZWN0b3J5ID0gW3NlbGYgcHJvZHVj
dERpcl07Ci0KLSAgICAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqZGljdGlvbmFyeSA9IFtAewot
ICAgICAgICAgICAgQCJJUENfSURFTlRJRklFUiI6IHNlbGYuaXBjSWRlbnRpZmllciwKLSAgICAg
ICAgICAgIEAiRFlMRF9GUkFNRVdPUktfUEFUSCI6IHByb2R1Y3REaXJlY3RvcnksCi0gICAgICAg
ICAgICBAIl9fWFBDX0RZTERfRlJBTUVXT1JLX1BBVEgiOiBwcm9kdWN0RGlyZWN0b3J5LAotICAg
ICAgICAgICAgQCJEWUxEX0xJQlJBUllfUEFUSCI6IHByb2R1Y3REaXJlY3RvcnksCi0gICAgICAg
ICAgICBAIl9fWFBDX0RZTERfTElCUkFSWV9QQVRIIjogcHJvZHVjdERpcmVjdG9yeSwKLSAgICAg
ICAgfSBtdXRhYmxlQ29weV07Ci0KLSAgICAgICAgZm9yIChOU1N0cmluZyAqa2V5TmFtZSBpbiBA
W0AiRFlMRF9JTlNFUlRfTElCUkFSSUVTIiwgQCJNYWxsb2NTdGFja0xvZ2dpbmciLCBAIkxPQ0FM
X1JFU09VUkNFX1JPT1QiLCBAIkRVTVBSRU5ERVJUUkVFX1RFTVAiXSkgewotICAgICAgICAgICAg
Y29uc3QgY2hhciogdmFsdWUgPSBnZXRlbnYoW2tleU5hbWUgVVRGOFN0cmluZ10pOwotICAgICAg
ICAgICAgaWYgKHZhbHVlICYmIHN0cmxlbih2YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICBOU1N0
cmluZyAqbnNWYWx1ZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzp2YWx1ZV07Ci0g
ICAgICAgICAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0Om5zVmFsdWUgZm9yS2V5OmtleU5h
bWVdOwotICAgICAgICAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpuc1ZhbHVlIGZvcktl
eTpbQCJfX1hQQ18iIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOmtleU5hbWVdXTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoY2hhcioqIGVudnAgPSAqX05TR2V0RW52
aXJvbigpOyAqZW52cDsgZW52cCsrKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBlbnYgPSAq
ZW52cDsKLSAgICAgICAgICAgIGlmICghc3RybmNtcCgiSlNDXyIsIGVudiwgNCkgfHwgIXN0cm5j
bXAoIl9fWFBDX0pTQ18iLCBlbnYsIDEwKSkgewotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IGVxdWFsID0gc3RyY2hyKGVudiwgJz0nKTsKLSAgICAgICAgICAgICAgICBpZiAoIWVxdWFsKSB7
Ci0gICAgICAgICAgICAgICAgICAgIE5TTG9nKEAiTWlzc2luZyAnPScgaW4gZW52IHZhciAnJXMn
IiwgZW52KTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhLZXlMZW5ndGggPSAy
NTY7Ci0gICAgICAgICAgICAgICAgc2l6ZV90IGtleUxlbmd0aCA9IGVxdWFsIC0gZW52OwotICAg
ICAgICAgICAgICAgIGlmIChrZXlMZW5ndGggPj0gbWF4S2V5TGVuZ3RoKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIE5TTG9nKEAiRW52IHZhciAnJXMnIGlzIHRvbyBsb25nIiwgZW52KTsKLSAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgY2hhciBrZXlbbWF4S2V5TGVuZ3RoXTsKLSAgICAgICAgICAgICAgICBzdHJuY3B5KGtl
eSwgZW52LCBrZXlMZW5ndGgpOwotICAgICAgICAgICAgICAgIGtleVtrZXlMZW5ndGhdID0gJ1ww
JzsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB2YWx1ZSA9IGVxdWFsICsgMTsKLQotICAg
ICAgICAgICAgICAgIE5TU3RyaW5nICpuc0tleSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0
cmluZzprZXldOwotICAgICAgICAgICAgICAgIE5TU3RyaW5nICpuc1ZhbHVlID0gW05TU3RyaW5n
IHN0cmluZ1dpdGhVVEY4U3RyaW5nOnZhbHVlXTsKLSAgICAgICAgICAgICAgICBbZGljdGlvbmFy
eSBzZXRPYmplY3Q6bnNWYWx1ZSBmb3JLZXk6bnNLZXldOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXMgPSBbZGljdGlvbmFyeSBjb3B5XTsK
LSAgICB9KTsKLQotICAgIHJldHVybiBlbnZpcm9ubWVudFZhcmlhYmxlczsKLX0KLQotLSAodm9p
ZClsYXVuY2hBcHAKLXsKLSAgICBOU0RpY3Rpb25hcnkgKmxhdW5jaE9wdGlvbnMgPSBAewotICAg
ICAgICBrU2ltRGV2aWNlTGF1bmNoQXBwbGljYXRpb25FbnZpcm9ubWVudDogW3NlbGYgX2Vudmly
b25tZW50VmFyaWFibGVzXSwKLSAgICAgICAga1NpbURldmljZUxhdW5jaEFwcGxpY2F0aW9uQXJn
dW1lbnRzOiBbc2VsZiBkdW1wVG9vbEFyZ3VtZW50c10sCi0gICAgfTsKLQotICAgIE5TRXJyb3Ig
KmVycm9yOwotICAgIHBpZF90IHBpZCA9IFtzZWxmLmRldmljZSBsYXVuY2hBcHBsaWNhdGlvbldp
dGhJRDpzZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIgb3B0aW9uczpsYXVuY2hPcHRpb25zIGVycm9y
OiZlcnJvcl07Ci0KLSAgICBpZiAocGlkIDwgMCkgewotICAgICAgICBOU0xvZyhAIkNvdWxkbid0
IGxhdW5jaCAlQDogJUAiLCBzZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIsIGVycm9yLmRlc2NyaXB0
aW9uKTsKLSAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0KLQotICAgIFtzZWxmIHNl
dFBpZDpwaWRdOwotCi0gICAgZGlzcGF0Y2hfcXVldWVfdCBxdWV1ZSA9IGRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCk7Ci0gICAgZGlzcGF0Y2hfc291cmNlX3Qgc2ltdWxhdG9yQXBwRXhpdERpc3Bh
dGNoU291cmNlID0gZGlzcGF0Y2hfc291cmNlX2NyZWF0ZShESVNQQVRDSF9TT1VSQ0VfVFlQRV9Q
Uk9DLCBbc2VsZiBwaWRdLCBESVNQQVRDSF9QUk9DX0VYSVQsIHF1ZXVlKTsKLSAgICBbc2VsZiBz
ZXRBcHBEaXNwYXRjaFNvdXJjZTpzaW11bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3VyY2VdOwotICAg
IGRpc3BhdGNoX3NvdXJjZV9zZXRfZXZlbnRfaGFuZGxlcihzaW11bGF0b3JBcHBFeGl0RGlzcGF0
Y2hTb3VyY2UsIF57Ci0gICAgICAgIGRpc3BhdGNoX3NvdXJjZV9jYW5jZWwoc2ltdWxhdG9yQXBw
RXhpdERpc3BhdGNoU291cmNlKTsKLSAgICAgICAgW3NlbGYgZGlkQ3Jhc2hXaXRoTWVzc2FnZTpu
aWxdOwotICAgIH0pOwotICAgIGRpc3BhdGNoX3Jlc3VtZShzaW11bGF0b3JBcHBFeGl0RGlzcGF0
Y2hTb3VyY2UpOwotfQotCi0tICh2b2lkKXN0YXJ0Ci17Ci0gICAgW3NlbGYgaW5zdGFsbEFwcF07
Ci0gICAgW1tzZWxmIHJlbGF5XSBzZXR1cF07Ci0gICAgW3NlbGYgbGF1bmNoQXBwXTsKLSAgICBb
W3NlbGYgcmVsYXldIGNvbm5lY3RdOwotfQotCi0tICh2b2lkKWZpbmlzaAotewotICAgIFtbc2Vs
ZiByZWxheV0gZGlzY29ubmVjdF07Ci0gICAgW3NlbGYga2lsbEFwcF07Ci0gICAgZXhpdChFWElU
X1NVQ0NFU1MpOwotfQotCi1AZW5kCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0
VGVzdFJlbGF5L21haW4ubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5
b3V0VGVzdFJlbGF5L21haW4ubQkocmV2aXNpb24gMjEwMjc0KQorKysgVG9vbHMvTGF5b3V0VGVz
dFJlbGF5L0xheW91dFRlc3RSZWxheS9tYWluLm0JKG5vbmV4aXN0ZW50KQpAQCAtMSwxMzMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgIkNvcmVTaW11bGF0b3JTUEkuaCIKLSNp
bXBvcnQgIkxUUmVsYXlDb250cm9sbGVyLmgiCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRp
b24uaD4KLQotc3RhdGljIExUUmVsYXlDb250cm9sbGVyICpyZWxheUNvbnRyb2xsZXI7Ci0KLXZv
aWQgdXNhZ2UoKQotewotICAgIE5TU3RyaW5nICpoZWxwVGV4dCA9IEAiTGF5b3V0VGVzdFJlbGF5
OiBydW4gYSBkdW1wIHRvb2wgaW4gdGhlIHNpbXVsYXRvci4gTm90IGZvciBkaXJlY3QgY29uc3Vt
cHRpb24uXG4iCi0gICAgICAgICJVc2FnZTogTGF5b3V0VGVzdFJlbGF5IFstaF0gW29wdGlvbnNd
IC0tIFtkdW1wIHRvb2wgYXJndW1lbnRzXVxuIgotICAgICAgICAiUmVxdWlyZWQgb3B0aW9uczpc
biIKLSAgICAgICAgIiAgICAtdWRpZCA8aWRlbnRpZmllcj4gICAgICAgU2ltdWxhdG9yIGRldmlj
ZSBpZGVudGlmaWVyXG4iCi0gICAgICAgICIgICAgLWFwcCA8YXBwX3BhdGg+ICAgICAgICAgIFBh
dGggdG8gdGhlIGJ1aWx0IGlPUyAuYXBwIGJ1bmRsZSBkaXJlY3RvcnkuXG4iCi0gICAgICAgICIg
ICAgLXByb2R1Y3REaXIgPGRpcj4gICAgICAgIC9wYXRoL3RvL1dlYktpdEJ1aWxkL3tjb25maWd1
cmF0aW9ufS17c2hvcnQgcGxhdGZvcm19LlxuIjsKLQotICAgIGZwcmludGYoc3RkZXJyLCAiJXNc
biIsIFtoZWxwVGV4dCBVVEY4U3RyaW5nXSk7Ci19Ci0KLU5TU3RyaW5nICpnZXRSZXF1aXJlZFN0
cmluZ0FyZ3VtZW50KE5TU3RyaW5nICpwYXJhbWV0ZXIpCi17Ci0gICAgTlNVc2VyRGVmYXVsdHMg
KmRlZmF1bHRzID0gW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXTsKLSAgICBO
U1N0cmluZyAqYXJndW1lbnQgPSBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OnBhcmFtZXRlcl07Ci0K
LSAgICBpZiAoIWFyZ3VtZW50KSB7Ci0gICAgICAgIE5TTG9nKEAiLSVAIGlzIHJlcXVpcmVkLiIs
IHBhcmFtZXRlcik7Ci0gICAgICAgIHVzYWdlKCk7Ci0gICAgICAgIGV4aXQoRVhJVF9GQUlMVVJF
KTsKLSAgICB9Ci0gICAgcmV0dXJuIGFyZ3VtZW50OwotfQotCi1OU0FycmF5ICpnZXREdW1wVG9v
bEFyZ3VtZW50cygpCi17Ci0gICAgTlNNdXRhYmxlQXJyYXkgKmR1bXBUb29sQXJndW1lbnRzID0g
W1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07Ci0gICAgTlNBcnJheSAqcHJvY2Vzc0FyZ3Mg
PSBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIGFyZ3VtZW50c107Ci0gICAgQk9PTCBhcHBl
bmRpbmcgPSBOTzsKLSAgICBmb3IgKE5TU3RyaW5nICphcmcgaW4gcHJvY2Vzc0FyZ3MpIHsKLSAg
ICAgICAgaWYgKFthcmcgaXNFcXVhbFRvU3RyaW5nOkAiLS0iXSkgewotICAgICAgICAgICAgYXBw
ZW5kaW5nID0gWUVTOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKGFwcGVuZGluZykKLSAgICAgICAgICAgIFtkdW1wVG9vbEFyZ3VtZW50cyBhZGRPYmplY3Q6
YXJnXTsKLSAgICB9Ci0gICAgcmV0dXJuIGR1bXBUb29sQXJndW1lbnRzOwotfQotCi12b2lkIGZp
bmlzaCgpCi17Ci0gICAgW3JlbGF5Q29udHJvbGxlciBmaW5pc2hdOwotfQotCi12b2lkIHJlY2Vp
dmVkU2lnbmFsKGludCBzaWduYWwpCi17Ci0gICAgZXhpdChFWElUX1NVQ0NFU1MpOwotfQotCi1p
bnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqIGFyZ3ZbXSkKLXsKLSAgICBAYXV0b3JlbGVh
c2Vwb29sIHsKLSAgICAgICAgTlNBcnJheSAqaGVscEFyZ3VtZW50cyA9IEBbQCItaCIsIEAiLS1o
ZWxwIl07Ci0gICAgICAgIGZvciAoTlNTdHJpbmcgKmhlbHBBcmd1bWVudCBpbiBoZWxwQXJndW1l
bnRzKSB7Ci0gICAgICAgICAgICBpZiAoW1tbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gYXJn
dW1lbnRzXSBpbmRleE9mT2JqZWN0OmhlbHBBcmd1bWVudF0gIT0gTlNOb3RGb3VuZCkgewotICAg
ICAgICAgICAgICAgIHVzYWdlKCk7Ci0gICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSNpZiBVU0VfU0lNX1NFUlZJQ0VfQ09OVEVY
VAotICAgICAgICBOU1N0cmluZyAqZGV2ZWxvcGVyRGlyZWN0b3J5ID0gZ2V0UmVxdWlyZWRTdHJp
bmdBcmd1bWVudChAImRldmVsb3BlckRpciIpOwotI2VuZGlmCi0gICAgICAgIE5TVVVJRCAqdWRp
ZCA9IFtbTlNVVUlEIGFsbG9jXSBpbml0V2l0aFVVSURTdHJpbmc6Z2V0UmVxdWlyZWRTdHJpbmdB
cmd1bWVudChAInVkaWQiKV07Ci0gICAgICAgIE5TU3RyaW5nICphcHBQYXRoID0gZ2V0UmVxdWly
ZWRTdHJpbmdBcmd1bWVudChAImFwcCIpOwotICAgICAgICBOU1N0cmluZyAqcHJvZHVjdERpcmVj
dG9yeSA9IGdldFJlcXVpcmVkU3RyaW5nQXJndW1lbnQoQCJwcm9kdWN0RGlyIik7Ci0gICAgICAg
IE5TQXJyYXkgKmR1bXBUb29sQXJndW1lbnRzID0gZ2V0RHVtcFRvb2xBcmd1bWVudHMoKTsKLQot
I2lmIFVTRV9TSU1fU0VSVklDRV9DT05URVhUCi0gICAgICAgIE5TRXJyb3IgKmVycm9yOwotICAg
ICAgICBTaW1TZXJ2aWNlQ29udGV4dCAqc2VydmljZUNvbnRleHQgPSBbU2ltU2VydmljZUNvbnRl
eHQgc2hhcmVkU2VydmljZUNvbnRleHRGb3JEZXZlbG9wZXJEaXI6ZGV2ZWxvcGVyRGlyZWN0b3J5
IGVycm9yOiZlcnJvcl07Ci0gICAgICAgIGlmICghc2VydmljZUNvbnRleHQpIHsKLSAgICAgICAg
ICAgIE5TTG9nKEAiRGV2aWNlIGNvbnRleHQgY291bGRuJ3QgYmUgZm91bmQ6ICVAIiwgZXJyb3Ip
OwotICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0gICAgICAgIFNp
bURldmljZVNldCAqZGV2aWNlU2V0ID0gW3NlcnZpY2VDb250ZXh0IGRlZmF1bHREZXZpY2VTZXRX
aXRoRXJyb3I6bmlsXTsKLSAgICAgICAgaWYgKCFkZXZpY2VTZXQpIHsKLSAgICAgICAgICAgIE5T
TG9nKEAiRGVmYXVsdCBkZXZpY2Ugc2V0IGNvdWxkbid0IGJlIGZvdW5kOiAlQCIsIGVycm9yKTsK
LSAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAgICAgfQotICAgICAgICBTaW1E
ZXZpY2UgKmRldmljZSA9IFtkZXZpY2VTZXQuZGV2aWNlc0J5VURJRCBvYmplY3RGb3JLZXk6dWRp
ZF07Ci0jZWxzZQotICAgICAgICBTaW1EZXZpY2UgKmRldmljZSA9IFtTaW1EZXZpY2VTZXQuZGVm
YXVsdFNldC5kZXZpY2VzQnlVRElEIG9iamVjdEZvcktleTp1ZGlkXTsKLSNlbmRpZgotICAgICAg
ICBpZiAoIWRldmljZSkgewotICAgICAgICAgICAgTlNMb2coQCJEZXZpY2UgJUAgY291bGRuJ3Qg
YmUgZm91bmQiLCB1ZGlkKTsKLSAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHJlbGF5Q29udHJvbGxlciA9IFtbTFRSZWxheUNvbnRyb2xsZXIgYWxs
b2NdIGluaXRXaXRoRGV2aWNlOmRldmljZSBwcm9kdWN0RGlyOnByb2R1Y3REaXJlY3RvcnkgYXBw
UGF0aDphcHBQYXRoIGRldmljZVVESUQ6dWRpZCBkdW1wVG9vbEFyZ3VtZW50czpkdW1wVG9vbEFy
Z3VtZW50c107Ci0gICAgICAgIFtyZWxheUNvbnRyb2xsZXIgc3RhcnRdOwotCi0gICAgICAgIGF0
ZXhpdChmaW5pc2gpOwotICAgICAgICBzaWduYWwoU0lHSU5ULCByZWNlaXZlZFNpZ25hbCk7Ci0g
ICAgICAgIHNpZ25hbChTSUdURVJNLCByZWNlaXZlZFNpZ25hbCk7Ci0KLSAgICAgICAgW1tOU1J1
bkxvb3AgbWFpblJ1bkxvb3BdIHJ1bl07Ci0gICAgfQotICAgIHJldHVybiAwOwotfQpJbmRleDog
VG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9i
dWlsZC13ZWJraXQJKHJldmlzaW9uIDIxMDI3NCkKKysrIFRvb2xzL1NjcmlwdHMvYnVpbGQtd2Vi
a2l0CSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsMTAgKzIwMCw2IEBAIGlmIChpc0FwcGxlTWFjV2Vi
S2l0KCkpIHsKICAgICAgICAgcHVzaCBAY29weUxpYnJhcmllc0FyZ3MsIHByb2R1Y3REaXIoKTsK
ICAgICAgICAgcHJpbnQoam9pbigiICIsIEBjb3B5TGlicmFyaWVzQXJncykgLiAiXG4iKTsKICAg
ICAgICAgKHN5c3RlbShAY29weUxpYnJhcmllc0FyZ3MpID09IDApIG9yIGRpZTsKLQotICAgICAg
ICBpZiAod2lsbFVzZUlPU1NpbXVsYXRvclNESygpKSB7Ci0gICAgICAgICAgICAoc3lzdGVtKCJw
ZXJsIiwgIlRvb2xzL1NjcmlwdHMvYnVpbGQtbGF5b3V0dGVzdHJlbGF5IiwgYXJndW1lbnRzRm9y
Q29uZmlndXJhdGlvbigpKSA9PSAwKSBvciBkaWU7Ci0gICAgICAgIH0KICAgICB9CiAKICAgICAj
IEJ1aWxkIFRvb2xzIG5lZWRlZCBmb3IgQXBwbGUgcG9ydHMKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9iYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9iYXNlLnB5CShyZXZpc2lvbiAyMTAyNzQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvYmFzZS5weQkod29ya2luZyBjb3B5KQpAQCAtMTMxLDYgKzEzMSw3IEBAIGNsYXNz
IFBvcnQob2JqZWN0KToKICAgICAgICAgc2VsZi5fd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyID0g
Tm9uZQogICAgICAgICBzZWxmLl9pbWFnZV9kaWZmZXIgPSBOb25lCiAgICAgICAgIHNlbGYuX3Nl
cnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gc2VydmVyX3Byb2Nlc3MuU2VydmVyUHJvY2VzcyAg
IyBvdmVycmlkYWJsZSBmb3IgdGVzdGluZworICAgICAgICBzZWxmLl90ZXN0X3J1bm5lcl9wcm9j
ZXNzX2NvbnN0cnVjdG9yID0gc2VydmVyX3Byb2Nlc3MuU2VydmVyUHJvY2VzcwogCiAgICAgICAg
IGlmIG5vdCBoYXNhdHRyKG9wdGlvbnMsICdjb25maWd1cmF0aW9uJykgb3Igbm90IG9wdGlvbnMu
Y29uZmlndXJhdGlvbjoKICAgICAgICAgICAgIHNlbGYuc2V0X29wdGlvbl9kZWZhdWx0KCdjb25m
aWd1cmF0aW9uJywgc2VsZi5kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKSkKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weQkocmV2aXNpb24gMjEwMjc0KQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weQkod29ya2luZyBjb3B5KQpAQCAtMTc0LDMgKzE3
NCw2IEBAIGNsYXNzIERhcndpblBvcnQoQXBwbGVQb3J0KToKICAgICAgICAgZXhjZXB0IFNjcmlw
dEVycm9yOgogICAgICAgICAgICAgX2xvZy53YXJuKCJ4Y3J1biBmYWlsZWQ7IGZhbGxpbmcgYmFj
ayB0byAnJXMnLiIgJSBmYWxsYmFjaykKICAgICAgICAgICAgIHJldHVybiBmYWxsYmFjaworCisg
ICAgZGVmIGV4dHJhY3RCdW5kbGVJRChzZWxmLCBhcHApOgorICAgICAgICByZXR1cm4gc2VsZi5f
ZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsnL3Vzci9saWJleGVjL1BsaXN0QnVkZHknLCAnLWMnLCAn
UHJpbnQgQ0ZCdW5kbGVJZGVudGlmaWVyJywgYXBwICsgJy9JbmZvLnBsaXN0J10pLnJzdHJpcCgp
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkJKHJldmlzaW9uIDIxMDI3
NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTEzOCw3ICsxMzgsNyBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAgICAgICAgc2Vs
Zi5fZHJpdmVyX3VzZXJfZGlyZWN0b3J5X3N1ZmZpeCA9IE5vbmUKICAgICAgICAgc2VsZi5fZHJp
dmVyX3VzZXJfY2FjaGVfZGlyZWN0b3J5ID0gTm9uZQogCi0gICAgICAgICMgV2ViS2l0VGVzdFJ1
bm5lci9MYXlvdXRUZXN0UmVsYXkgY2FuIHJlcG9ydCBiYWNrIHN1YnByb2Nlc3MgY3Jhc2hlcyBi
eSBwcmludGluZworICAgICAgICAjIFdlYktpdFRlc3RSdW5uZXIgY2FuIHJlcG9ydCBiYWNrIHN1
YnByb2Nlc3MgY3Jhc2hlcyBieSBwcmludGluZwogICAgICAgICAjICIjQ1JBU0hFRCAtIFBST0NF
U1NOQU1FIi4gIFNpbmNlIHRob3NlIGNhbiBoYXBwZW4gYXQgYW55IHRpbWUgYW5kIFNlcnZlclBy
b2Nlc3MKICAgICAgICAgIyB3b24ndCBiZSBhd2FyZSBvZiB0aGVtIChzaW5jZSB0aGUgYWN0dWFs
IHRvb2wgZGlkbid0IGNyYXNoLCBqdXN0IGEgc3VicHJvY2VzcykKICAgICAgICAgIyB3ZSByZWNv
cmQgdGhlIGNyYXNoZWQgc3VicHJvY2VzcyBuYW1lIGhlcmUuCkBAIC0zMjcsNyArMzI3LDYgQEAg
Y2xhc3MgRHJpdmVyKG9iamVjdCk6CiAKICAgICBkZWYgX3NldHVwX2Vudmlyb25fZm9yX2RyaXZl
cihzZWxmLCBlbnZpcm9ubWVudCk6CiAgICAgICAgIGJ1aWxkX3Jvb3RfcGF0aCA9IHN0cihzZWxm
Ll9wb3J0Ll9idWlsZF9wYXRoKCkpCi0gICAgICAgICMgRklYTUU6IERZTERfKiB2YXJpYWJsZXMg
c2hvdWxkIGJlIE1hYy1vbmx5LiBFdmVuIGlPUyBTaW11bGF0b3IgZG9lc24ndCBuZWVkIHRoZW0s
IGFzIExheW91dFRlc3RSZWxheSBpcyBhIGhvc3QgYmluYXJ5LgogICAgICAgICBzZWxmLl9hcHBl
bmRfZW52aXJvbm1lbnRfdmFyaWFibGVfcGF0aChlbnZpcm9ubWVudCwgJ0RZTERfTElCUkFSWV9Q
QVRIJywgYnVpbGRfcm9vdF9wYXRoKQogICAgICAgICBzZWxmLl9hcHBlbmRfZW52aXJvbm1lbnRf
dmFyaWFibGVfcGF0aChlbnZpcm9ubWVudCwgJ19fWFBDX0RZTERfTElCUkFSWV9QQVRIJywgYnVp
bGRfcm9vdF9wYXRoKQogICAgICAgICBzZWxmLl9hcHBlbmRfZW52aXJvbm1lbnRfdmFyaWFibGVf
cGF0aChlbnZpcm9ubWVudCwgJ0RZTERfRlJBTUVXT1JLX1BBVEgnLCBidWlsZF9yb290X3BhdGgp
CkBAIC0zNjksNyArMzY4LDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgIGVudmly
b25tZW50ID0gc2VsZi5fc2V0dXBfZW52aXJvbl9mb3JfdGVzdCgpCiAgICAgICAgIHNlbGYuX2Ny
YXNoZWRfcHJvY2Vzc19uYW1lID0gTm9uZQogICAgICAgICBzZWxmLl9jcmFzaGVkX3BpZCA9IE5v
bmUKLSAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3MgPSBzZWxmLl9wb3J0Ll9zZXJ2ZXJfcHJv
Y2Vzc19jb25zdHJ1Y3RvcihzZWxmLl9wb3J0LCBzZWxmLl9zZXJ2ZXJfbmFtZSwgc2VsZi5jbWRf
bGluZShwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyksIGVudmlyb25tZW50KQorICAgICAgICBz
ZWxmLl9zZXJ2ZXJfcHJvY2VzcyA9IHNlbGYuX3BvcnQuX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29u
c3RydWN0b3Ioc2VsZi5fcG9ydCwgc2VsZi5fc2VydmVyX25hbWUsIHNlbGYuY21kX2xpbmUocGl4
ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpLCBlbnZpcm9ubWVudCkKICAgICAgICAgc2VsZi5fc2Vy
dmVyX3Byb2Nlc3Muc3RhcnQoKQogCiAgICAgZGVmIF9ydW5fcG9zdF9zdGFydF90YXNrcyhzZWxm
KToKQEAgLTYwOSwyMSArNjA4LDE1IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogICAgICAgICBy
ZXR1cm4gVHJ1ZQogCiAKLSMgRklYTUU6IHRoaXMgc2hvdWxkIGJlIGFic3RyYWN0ZWQgb3V0IHZp
YSB0aGUgUG9ydCBzdWJjbGFzcyBzb21laG93LgogY2xhc3MgSU9TU2ltdWxhdG9yRHJpdmVyKERy
aXZlcik6CiAgICAgZGVmIGNtZF9saW5lKHNlbGYsIHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdz
KToKICAgICAgICAgY21kID0gc3VwZXIoSU9TU2ltdWxhdG9yRHJpdmVyLCBzZWxmKS5jbWRfbGlu
ZShwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncykKLSAgICAgICAgcmVsYXlfdG9vbCA9IHNlbGYu
X3BvcnQucmVsYXlfcGF0aAogICAgICAgICBkdW1wX3Rvb2wgPSBjbWRbMF0KICAgICAgICAgZHVt
cF90b29sX2FyZ3MgPSBjbWRbMTpdCi0gICAgICAgIHByb2R1Y3RfZGlyID0gc2VsZi5fcG9ydC5f
YnVpbGRfcGF0aCgpCiAgICAgICAgIHJlbGF5X2FyZ3MgPSBbCi0gICAgICAgICAgICAnLWRldmVs
b3BlckRpcicsIHNlbGYuX3BvcnQuZGV2ZWxvcGVyX2RpciwKLSAgICAgICAgICAgICctdWRpZCcs
IHNlbGYuX3BvcnQuZGV2aWNlX2lkX2Zvcl93b3JrZXJfbnVtYmVyKHNlbGYuX3dvcmtlcl9udW1i
ZXIpLAotICAgICAgICAgICAgJy1wcm9kdWN0RGlyJywgcHJvZHVjdF9kaXIsCi0gICAgICAgICAg
ICAnLWFwcCcsIGR1bXBfdG9vbCwKLSAgICAgICAgXQotICAgICAgICByZXR1cm4gW3JlbGF5X3Rv
b2xdICsgcmVsYXlfYXJncyArIFsnLS0nXSArIGR1bXBfdG9vbF9hcmdzCisgICAgICAgICAgICBz
ZWxmLl9wb3J0LmRldmljZV9pZF9mb3Jfd29ya2VyX251bWJlcihzZWxmLl93b3JrZXJfbnVtYmVy
KSwKKyAgICAgICAgICAgIGR1bXBfdG9vbF0KKyAgICAgICAgcmV0dXJuIHJlbGF5X2FyZ3MgKyBb
Jy0tJ10gKyBkdW1wX3Rvb2xfYXJncwogCiAgICAgZGVmIF9zZXR1cF9lbnZpcm9uX2Zvcl9kcml2
ZXIoc2VsZiwgZW52aXJvbm1lbnQpOgogICAgICAgICBlbnZpcm9ubWVudFsnREVWRUxPUEVSX0RJ
UiddID0gc2VsZi5fcG9ydC5kZXZlbG9wZXJfZGlyCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvZHJpdmVyX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIxMDI3NCkKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTI2NCw3ICsyNjQsNyBAQCBjbGFzcyBEcml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKIAogICAgIGRlZiB0ZXN0X3N0b3BfY2xlYW5zX3VwX3Byb3Blcmx5KHNlbGYpOgogICAgICAg
ICBwb3J0ID0gVGVzdFdlYktpdFBvcnQoKQotICAgICAgICBwb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19j
b25zdHJ1Y3RvciA9IE1vY2tTZXJ2ZXJQcm9jZXNzCisgICAgICAgIHBvcnQuX3Rlc3RfcnVubmVy
X3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJvY2VzcwogICAgICAgICBkcml2ZXIg
PSBEcml2ZXIocG9ydCwgMCwgcGl4ZWxfdGVzdHM9VHJ1ZSkKICAgICAgICAgZHJpdmVyLnN0YXJ0
KFRydWUsIFtdKQogICAgICAgICBsYXN0X3RtcGRpciA9IHBvcnQuX2ZpbGVzeXN0ZW0ubGFzdF90
bXBkaXIKQEAgLTI3NCw3ICsyNzQsNyBAQCBjbGFzcyBEcml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RD
YXNlKToKIAogICAgIGRlZiB0ZXN0X3R3b19zdGFydHNfY2xlYW5zX3VwX3Byb3Blcmx5KHNlbGYp
OgogICAgICAgICBwb3J0ID0gVGVzdFdlYktpdFBvcnQoKQotICAgICAgICBwb3J0Ll9zZXJ2ZXJf
cHJvY2Vzc19jb25zdHJ1Y3RvciA9IE1vY2tTZXJ2ZXJQcm9jZXNzCisgICAgICAgIHBvcnQuX3Rl
c3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJvY2VzcwogICAgICAg
ICBkcml2ZXIgPSBEcml2ZXIocG9ydCwgMCwgcGl4ZWxfdGVzdHM9VHJ1ZSkKICAgICAgICAgZHJp
dmVyLnN0YXJ0KFRydWUsIFtdKQogICAgICAgICBsYXN0X3RtcGRpciA9IHBvcnQuX2ZpbGVzeXN0
ZW0ubGFzdF90bXBkaXIKQEAgLTI4Myw3ICsyODMsNyBAQCBjbGFzcyBEcml2ZXJUZXN0KHVuaXR0
ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3N0YXJ0X2FjdHVhbGx5X3N0YXJ0cyhzZWxm
KToKICAgICAgICAgcG9ydCA9IFRlc3RXZWJLaXRQb3J0KCkKLSAgICAgICAgcG9ydC5fc2VydmVy
X3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJvY2VzcworICAgICAgICBwb3J0Ll90
ZXN0X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gTW9ja1NlcnZlclByb2Nlc3MKICAgICAg
ICAgZHJpdmVyID0gRHJpdmVyKHBvcnQsIDAsIHBpeGVsX3Rlc3RzPVRydWUpCiAgICAgICAgIGRy
aXZlci5zdGFydChUcnVlLCBbXSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRyaXZlci5fc2Vy
dmVyX3Byb2Nlc3Muc3RhcnRlZCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9p
b3MucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQko
cmV2aXNpb24gMjEwMjc0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQko
d29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0
cy5tb2RlbHMudGVzdF9jCiBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGNvbmZpZyBhcyBwb3J0
X2NvbmZpZwogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBkcml2ZXIsIGltYWdlX2RpZmYKIGZy
b20gd2Via2l0cHkucG9ydC5kYXJ3aW4gaW1wb3J0IERhcndpblBvcnQKK2Zyb20gd2Via2l0cHku
cG9ydC5zZXJ2ZXJfcHJvY2VzcyBpbXBvcnQgU2ltdWxhdG9yUHJvY2VzcwogZnJvbSB3ZWJraXRw
eS54Y29kZS5zaW11bGF0b3IgaW1wb3J0IFNpbXVsYXRvciwgUnVudGltZSwgRGV2aWNlVHlwZQog
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCiAK
QEAgLTc4LDcgKzc5LDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAg
ICBTREsgPSAnaXBob25lc2ltdWxhdG9yJwogCiAgICAgU0lNVUxBVE9SX0JVTkRMRV9JRCA9ICdj
b20uYXBwbGUuaXBob25lc2ltdWxhdG9yJwotICAgIHJlbGF5X25hbWUgPSAnTGF5b3V0VGVzdFJl
bGF5JwogICAgIFNJTVVMQVRPUl9ESVJFQ1RPUlkgPSAiL3RtcC9XZWJLaXRUZXN0aW5nU2ltdWxh
dG9ycy8iCiAgICAgTFNSRUdJU1RFUl9QQVRIID0gIi9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtz
L0NvcmVTZXJ2aWNlcy5mcmFtZXdvcmsvRnJhbWV3b3Jrcy9MYXVuY2hTZXJ2aWNlcy5mcmFtZXdv
cmsvVmVyc2lvbnMvQ3VycmVudC9TdXBwb3J0L2xzcmVnaXN0ZXIiCiAgICAgUFJPQ0VTU19DT1VO
VF9FU1RJTUFURV9QRVJfU0lNVUxBVE9SX0lOU1RBTkNFID0gMTAwCkBAIC05Nyw2ICs5Nyw3IEBA
IGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAKICAgICBkZWYgX19pbml0X18o
c2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncyk6CiAgICAgICAgIERhcndpblBvcnQuX19p
bml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5fdGVz
dF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IFNpbXVsYXRvclByb2Nlc3MKIAogICAgICAg
ICBvcHRpb25hbF9kZXZpY2VfY2xhc3MgPSBzZWxmLmdldF9vcHRpb24oJ2RldmljZV9jbGFzcycp
CiAgICAgICAgIHNlbGYuX3ByaW50aW5nX2NtZF9saW5lID0gRmFsc2UKQEAgLTE0OCwxNiArMTQ5
LDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgICAgIGRl
dmljZV90eXBlID0gRGV2aWNlVHlwZS5mcm9tX25hbWUoZGV2aWNlX25hbWUpCiAgICAgICAgIHJl
dHVybiBkZXZpY2VfdHlwZQogCi0gICAgQHByb3BlcnR5Ci0gICAgQG1lbW9pemVkCi0gICAgZGVm
IHJlbGF5X3BhdGgoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX3Jvb3Rfd2FzX3NldDoKLSAgICAg
ICAgICAgIHBhdGggPSBzZWxmLl9maWxlc3lzdGVtLmFic3BhdGgoc2VsZi5nZXRfb3B0aW9uKCdy
b290JykpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtYWNfY29uZmlnID0gcG9ydF9jb25m
aWcuQ29uZmlnKHNlbGYuX2V4ZWN1dGl2ZSwgc2VsZi5fZmlsZXN5c3RlbSwgJ21hYycpCi0gICAg
ICAgICAgICBwYXRoID0gbWFjX2NvbmZpZy5idWlsZF9kaXJlY3Rvcnkoc2VsZi5nZXRfb3B0aW9u
KCdjb25maWd1cmF0aW9uJykpCi0gICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLmpvaW4o
cGF0aCwgc2VsZi5yZWxheV9uYW1lKQotCiAgICAgQG1lbW9pemVkCiAgICAgZGVmIGNoaWxkX3By
b2Nlc3NlcyhzZWxmKToKICAgICAgICAgcmV0dXJuIGludChzZWxmLmdldF9vcHRpb24oJ2NoaWxk
X3Byb2Nlc3NlcycpKQpAQCAtMTgyLDE5ICsxNzMsNiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0
KERhcndpblBvcnQpOgogCiAgICAgICAgIHJldHVybiBtaW4obWF4aW11bV9zaW11bGF0b3JfY291
bnRfb25fdGhpc19zeXN0ZW0sIGJlc3RfY2hpbGRfcHJvY2Vzc19jb3VudF9mb3JfY3B1KQogCi0g
ICAgZGVmIF9jaGVja19yZWxheShzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0
ZW0uZXhpc3RzKHNlbGYucmVsYXlfcGF0aCk6Ci0gICAgICAgICAgICBfbG9nLmVycm9yKCIlcyB3
YXMgbm90IGZvdW5kIGF0ICVzIiAlIChzZWxmLnJlbGF5X25hbWUsIHNlbGYucmVsYXlfcGF0aCkp
Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRl
ZiBfY2hlY2tfcG9ydF9idWlsZChzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuX3Jvb3Rfd2Fz
X3NldCBhbmQgc2VsZi5nZXRfb3B0aW9uKCdidWlsZCcpIGFuZCBub3Qgc2VsZi5fYnVpbGRfcmVs
YXkoKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBpZiBub3Qgc2VsZi5fY2hl
Y2tfcmVsYXkoKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1
ZQotCiAgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRl
cnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49dGltZS50aW1lLCBzbGVlcF9mbj10aW1lLnNsZWVwLCB3
YWl0X2Zvcl9sb2c9VHJ1ZSk6CiAgICAgICAgIHRpbWVfZm4gPSB0aW1lX2ZuIG9yIHRpbWUudGlt
ZQogICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9yIHRpbWUuc2xlZXAKQEAgLTIxNSw3ICsx
OTMsNyBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgICAgICAgICAg
cmV0dXJuIHNlbGYuX2dldF9jcmFzaF9sb2coY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3Bp
ZFswXSwgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZFsxXSwgc3Rkb3V0LAogICAgICAg
ICAgICAgICAgICdcbicuam9pbihzdGRlcnJfbGluZXMpLCBuZXdlcl90aGFuLCB0aW1lX2ZuLCBz
bGVlcF9mbiwgd2FpdF9mb3JfbG9nKQogCi0gICAgICAgICMgTGF5b3V0VGVzdFJlbGF5IGNyYXNo
ZWQKKyAgICAgICAgIyBBcHAgY3Jhc2hlZAogICAgICAgICBfbG9nLmRlYnVnKCdsb29raW5nIGZv
ciBjcmFzaCBsb2cgZm9yICVzOiVzJyAlIChuYW1lLCBzdHIocGlkKSkpCiAgICAgICAgIGNyYXNo
X2xvZyA9ICcnCiAgICAgICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3Moc2VsZi5ob3N0KQpAQCAt
MjMzLDI0ICsyMTEsOSBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAg
ICAgICAgICAgcmV0dXJuIHN0ZGVyciwgTm9uZQogICAgICAgICByZXR1cm4gc3RkZXJyLCBjcmFz
aF9sb2cKIAotICAgIGRlZiBfYnVpbGRfcmVsYXkoc2VsZik6Ci0gICAgICAgIGVudmlyb25tZW50
ID0gc2VsZi5ob3N0LmNvcHlfY3VycmVudF9lbnZpcm9ubWVudCgpCi0gICAgICAgIGVudmlyb25t
ZW50LmRpc2FibGVfZ2NjX3NtYXJ0cXVvdGVzKCkKLSAgICAgICAgZW52ID0gZW52aXJvbm1lbnQu
dG9fZGljdGlvbmFyeSgpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBGSVhNRTogV2Ug
c2hvdWxkIGJlIHBhc3NpbmcgX2FyZ3VtZW50c19mb3JfY29uZmlndXJhdGlvbigpLCB3aGljaCBy
ZXNwZWN0cyBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBwb3J0LAotICAgICAgICAgICAgIyBpbnN0
ZWFkIG9mIGhhcmRjb2RpbmcgLS1pb3Mtc2ltdWxhdG9yLgotICAgICAgICAgICAgc2VsZi5fcnVu
X3NjcmlwdCgiYnVpbGQtbGF5b3V0dGVzdHJlbGF5IiwgYXJncz1bIi0taW9zLXNpbXVsYXRvciJd
LCBlbnY9ZW52KQotICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3IsIGU6Ci0gICAgICAgICAgICBf
bG9nLmVycm9yKGUubWVzc2FnZV93aXRoX291dHB1dChvdXRwdXRfbGltaXQ9Tm9uZSkpCi0gICAg
ICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRydWUKLQogICAgIGRlZiBfYnVp
bGRfZHJpdmVyKHNlbGYpOgogICAgICAgICBidWlsdF90b29sID0gc3VwZXIoSU9TU2ltdWxhdG9y
UG9ydCwgc2VsZikuX2J1aWxkX2RyaXZlcigpCi0gICAgICAgIGJ1aWx0X3JlbGF5ID0gc2VsZi5f
YnVpbGRfcmVsYXkoKQotICAgICAgICByZXR1cm4gYnVpbHRfdG9vbCBhbmQgYnVpbHRfcmVsYXkK
KyAgICAgICAgcmV0dXJuIGJ1aWx0X3Rvb2wKIAogICAgIGRlZiBfYnVpbGRfZHJpdmVyX2ZsYWdz
KHNlbGYpOgogICAgICAgICBhcmNocyA9IFsnQVJDSFM9aTM4NiddIGlmIHNlbGYuYXJjaGl0ZWN0
dXJlKCkgPT0gJ3g4NicgZWxzZSBbXQpAQCAtMjgwLDkgKzI0Myw5IEBAIGNsYXNzIElPU1NpbXVs
YXRvclBvcnQoRGFyd2luUG9ydCk6CiAKICAgICBkZWYgX2NyZWF0ZV9zaW11bGF0b3JzKHNlbGYp
OgogICAgICAgICBpZiAoc2VsZi5kZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcygpIDwgc2VsZi5jaGls
ZF9wcm9jZXNzZXMoKSk6Ci0gICAgICAgICAgICAgICAgX2xvZy53YXJuKCJZb3UgaGF2ZSBzcGVj
aWZpZWQgdmVyeSBoaWdoIHZhbHVlKHswfSkgZm9yIC0tY2hpbGQtcHJvY2Vzc2VzIi5mb3JtYXQo
c2VsZi5jaGlsZF9wcm9jZXNzZXMoKSkpCi0gICAgICAgICAgICAgICAgX2xvZy53YXJuKCJtYXhp
bXVtIGNoaWxkLXByb2Nlc3NlcyB3aGljaCBjYW4gYmUgc3VwcG9ydGVkIG9uIHRoaXMgc3lzdGVt
IGFyZTogezB9Ii5mb3JtYXQoc2VsZi5kZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcygpKSkKLSAgICAg
ICAgICAgICAgICBfbG9nLndhcm4oIlRoaXMgaXMgdmVyeSBsaWtlbHkgdG8gZmFpbC4iKQorICAg
ICAgICAgICAgX2xvZy53YXJuKCJZb3UgaGF2ZSBzcGVjaWZpZWQgdmVyeSBoaWdoIHZhbHVlKHsw
fSkgZm9yIC0tY2hpbGQtcHJvY2Vzc2VzIi5mb3JtYXQoc2VsZi5jaGlsZF9wcm9jZXNzZXMoKSkp
CisgICAgICAgICAgICBfbG9nLndhcm4oIm1heGltdW0gY2hpbGQtcHJvY2Vzc2VzIHdoaWNoIGNh
biBiZSBzdXBwb3J0ZWQgb24gdGhpcyBzeXN0ZW0gYXJlOiB7MH0iLmZvcm1hdChzZWxmLmRlZmF1
bHRfY2hpbGRfcHJvY2Vzc2VzKCkpKQorICAgICAgICAgICAgX2xvZy53YXJuKCJUaGlzIGlzIHZl
cnkgbGlrZWx5IHRvIGZhaWwuIikKIAogICAgICAgICBpZiBzZWxmLl91c2luZ19kZWRpY2F0ZWRf
c2ltdWxhdG9ycygpOgogICAgICAgICAgICAgc2VsZi5fY3JlYXRlU2ltdWxhdG9yQXBwcygpCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0LnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3QucHkJKHJldmlz
aW9uIDIxMDI3NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3Qu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgY2xhc3MgaW9zVGVzdChkYXJ3aW5f
dGVzdGNhc2UuRGFyd2luVGVzdAogICAgICAgICBwb3J0Ll9ydW5fc2NyaXB0ID0gcnVuX3Njcmlw
dAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuYXJjaGl0ZWN0dXJlKCksICd4ODYnKQog
ICAgICAgICBwb3J0Ll9idWlsZF9kcml2ZXIoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNl
bGYuYXJncywgWyctLWlvcy1zaW11bGF0b3InXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz
ZWxmLmFyZ3MsIFsnQVJDSFM9aTM4NicsICctLXNkaycsICdpcGhvbmVzaW11bGF0b3InXSkKIAog
ICAgIGRlZiB0ZXN0XzY0Yml0KHNlbGYpOgogICAgICAgICAjIEFwcGxlIE1hYyBwb3J0IGlzIDY0
LWJpdCBieSBkZWZhdWx0CkBAIC04Miw3ICs4Miw3IEBAIGNsYXNzIGlvc1Rlc3QoZGFyd2luX3Rl
c3RjYXNlLkRhcndpblRlc3QKIAogICAgICAgICBwb3J0Ll9ydW5fc2NyaXB0ID0gcnVuX3Njcmlw
dAogICAgICAgICBwb3J0Ll9idWlsZF9kcml2ZXIoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHNlbGYuYXJncywgWyctLWlvcy1zaW11bGF0b3InXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChzZWxmLmFyZ3MsIFsnLS1zZGsnLCAnaXBob25lc2ltdWxhdG9yJ10pCiAKICAgICBkZWYgdGVz
dF9zZGtfbmFtZShzZWxmKToKICAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3MucHkJKHJldmlz
aW9uIDIxMDI3NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vz
cy5weQkod29ya2luZyBjb3B5KQpAQCAtNTIsMTIgKzUyLDcgQEAgZnJvbSB3ZWJraXRweS5jb21t
b24uc3lzdGVtLmV4ZWN1dGl2ZSBpbQogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9f
KQogCiAKLWNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToKLSAgICAiIiJUaGlzIGNsYXNzIHBy
b3ZpZGVzIGEgd3JhcHBlciBhcm91bmQgYSBzdWJwcm9jZXNzIHRoYXQKLSAgICBpbXBsZW1lbnRz
IGEgc2ltcGxlIHJlcXVlc3QvcmVzcG9uc2UgdXNhZ2UgbW9kZWwuIFRoZSBwcmltYXJ5IGJlbmVm
aXQKLSAgICBpcyB0aGF0IHJlYWRpbmcgcmVzcG9uc2VzIHRha2VzIGEgZGVhZGxpbmUsIHNvIHRo
YXQgd2UgZG9uJ3QgZXZlciBibG9jawotICAgIGluZGVmaW5pdGVseS4gVGhlIGNsYXNzIGFsc28g
aGFuZGxlcyB0cmFuc3BhcmVudGx5IHJlc3RhcnRpbmcgcHJvY2Vzc2VzCi0gICAgYXMgbmVjZXNz
YXJ5IHRvIGtlZXAgaXNzdWluZyBjb21tYW5kcy4iIiIKK2NsYXNzIFNlcnZlclByb2Nlc3NCYXNl
KG9iamVjdCk6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmosIG5hbWUsIGNtZCwg
ZW52PU5vbmUsIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgdHJlYXRfbm9fZGF0YV9hc19jcmFz
aD1GYWxzZSk6CiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0X29iagpAQCAtNzAsMTEgKzY1LDI4
IEBAIGNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToKICAgICAgICAgc2VsZi5fdHJlYXRfbm9f
ZGF0YV9hc19jcmFzaCA9IHRyZWF0X25vX2RhdGFfYXNfY3Jhc2gKICAgICAgICAgc2VsZi5faG9z
dCA9IHNlbGYuX3BvcnQuaG9zdAogICAgICAgICBzZWxmLl9waWQgPSBOb25lCi0gICAgICAgIHNl
bGYuX3Jlc2V0KCkKIAotICAgICAgICAjIFNlZSBjb21tZW50IGluIGltcG9ydHMgZm9yIHdoeSB3
ZSBuZWVkIHRoZSB3aW4zMiBBUElzIGFuZCBjYW4ndCBqdXN0IHVzZSBzZWxlY3QuCi0gICAgICAg
ICMgRklYTUU6IHRoZXJlIHNob3VsZCBiZSBhIHdheSB0byBnZXQgd2luMzIgdnMuIGN5Z3dpbiBm
cm9tIHBsYXRmb3JtaW5mby4KLSAgICAgICAgc2VsZi5fdXNlX3dpbjMyX2FwaXMgPSBzeXMucGxh
dGZvcm0uc3RhcnRzd2l0aCgnd2luJykKKyAgICBkZWYgaXNfc3RhcnRlZChzZWxmKToKKyAgICAg
ICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9zdGFydChzZWxmKToKKyAg
ICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHBvbGwoc2VsZik6Cisg
ICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfd3JpdGUoc2VsZiwg
Ynl0ZXMpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX2dy
YWJEYXRhKHNlbGYsIGRlYWRsaW5lKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJv
cgorCisgICAgZGVmIF9raWxsKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVy
cm9yCisKKyAgICBkZWYgX2hhbmRsZV9wb3NzaWJsZV9pbnRlcnJ1cHQoc2VsZik6CisgICAgICAg
ICMgVXNlZCB0byBjYXRjaCBrZXlib2FyZCBpbnRlcnVwdHMsIGlmIGFwcGxpY2FibGUKKyAgICAg
ICAgcGFzcwogCiAgICAgZGVmIG5hbWUoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9uYW1l
CkBAIC04MywxOCArOTUsNiBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6CiAgICAgICAg
IHJldHVybiBzZWxmLl9waWQKIAogICAgIGRlZiBfcmVzZXQoc2VsZik6Ci0gICAgICAgIGlmIGdl
dGF0dHIoc2VsZiwgJ19wcm9jJywgTm9uZSk6Ci0gICAgICAgICAgICBpZiBzZWxmLl9wcm9jLnN0
ZGluOgotICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4uY2xvc2UoKQotICAgICAgICAg
ICAgICAgIHNlbGYuX3Byb2Muc3RkaW4gPSBOb25lCi0gICAgICAgICAgICBpZiBzZWxmLl9wcm9j
LnN0ZG91dDoKLSAgICAgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZG91dC5jbG9zZSgpCi0gICAg
ICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRvdXQgPSBOb25lCi0gICAgICAgICAgICBpZiBzZWxm
Ll9wcm9jLnN0ZGVycjoKLSAgICAgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGVyci5jbG9zZSgp
Ci0gICAgICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRlcnIgPSBOb25lCi0KLSAgICAgICAgc2Vs
Zi5fcHJvYyA9IE5vbmUKICAgICAgICAgc2VsZi5fb3V0cHV0ID0gc3RyKCkgICMgYnl0ZXNhcnJh
eSgpIG9uY2Ugd2UgcmVxdWlyZSBQeXRob24gMi42CiAgICAgICAgIHNlbGYuX2Vycm9yID0gc3Ry
KCkgICMgYnl0ZXNhcnJheSgpIG9uY2Ugd2UgcmVxdWlyZSBQeXRob24gMi42CiAgICAgICAgIHNl
bGYuX2NyYXNoZWQgPSBGYWxzZQpAQCAtMTAzLDU0ICsxMDMsMTEgQEAgY2xhc3MgU2VydmVyUHJv
Y2VzcyhvYmplY3QpOgogICAgIGRlZiBwcm9jZXNzX25hbWUoc2VsZik6CiAgICAgICAgIHJldHVy
biBzZWxmLl9uYW1lCiAKLSAgICBkZWYgX3N0YXJ0KHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9w
cm9jOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiJXMgYWxyZWFkeSBydW5uaW5nIiAl
IHNlbGYuX25hbWUpCi0gICAgICAgIHNlbGYuX3Jlc2V0KCkKLSAgICAgICAgIyBjbG9zZV9mZHMg
aXMgYSB3b3JrYXJvdW5kIGZvciBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjMyMAotICAg
ICAgICBjbG9zZV9mZHMgPSBub3Qgc2VsZi5faG9zdC5wbGF0Zm9ybS5pc193aW4oKQotICAgICAg
ICBzZWxmLl9wcm9jID0gc2VsZi5faG9zdC5leGVjdXRpdmUucG9wZW4oc2VsZi5fY21kLCBzdGRp
bj1zZWxmLl9ob3N0LmV4ZWN1dGl2ZS5QSVBFLAotICAgICAgICAgICAgc3Rkb3V0PXNlbGYuX2hv
c3QuZXhlY3V0aXZlLlBJUEUsCi0gICAgICAgICAgICBzdGRlcnI9c2VsZi5faG9zdC5leGVjdXRp
dmUuUElQRSwKLSAgICAgICAgICAgIGNsb3NlX2Zkcz1jbG9zZV9mZHMsCi0gICAgICAgICAgICBl
bnY9c2VsZi5fZW52LAotICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPXNlbGYuX3VuaXZl
cnNhbF9uZXdsaW5lcykKLSAgICAgICAgc2VsZi5fcGlkID0gc2VsZi5fcHJvYy5waWQKLSAgICAg
ICAgc2VsZi5fcG9ydC5maW5kX3N5c3RlbV9waWQoc2VsZi5uYW1lKCksIHNlbGYuX3BpZCkKLSAg
ICAgICAgZmQgPSBzZWxmLl9wcm9jLnN0ZG91dC5maWxlbm8oKQotICAgICAgICBpZiBub3Qgc2Vs
Zi5fdXNlX3dpbjMyX2FwaXM6Ci0gICAgICAgICAgICBmbCA9IGZjbnRsLmZjbnRsKGZkLCBmY250
bC5GX0dFVEZMKQotICAgICAgICAgICAgZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfU0VURkwsIGZs
IHwgb3MuT19OT05CTE9DSykKLSAgICAgICAgICAgIGZkID0gc2VsZi5fcHJvYy5zdGRlcnIuZmls
ZW5vKCkKLSAgICAgICAgICAgIGZsID0gZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkwpCi0g
ICAgICAgICAgICBmY250bC5mY250bChmZCwgZmNudGwuRl9TRVRGTCwgZmwgfCBvcy5PX05PTkJM
T0NLKQotCi0gICAgZGVmIF9oYW5kbGVfcG9zc2libGVfaW50ZXJydXB0KHNlbGYpOgotICAgICAg
ICAiIiJUaGlzIHJvdXRpbmUgY2hlY2tzIHRvIHNlZSBpZiB0aGUgcHJvY2VzcyBjcmFzaGVkIG9y
IGV4aXRlZAotICAgICAgICBiZWNhdXNlIG9mIGEga2V5Ym9hcmQgaW50ZXJydXB0IGFuZCByYWlz
ZXMgS2V5Ym9hcmRJbnRlcnJ1cHQKLSAgICAgICAgYWNjb3JkaW5nbHkuIiIiCi0gICAgICAgICMg
RklYTUU6IExpbnV4IGFuZCBNYWMgc2V0IHRoZSByZXR1cm5jb2RlIHRvIC1zaWduYWwuU0lHSU5U
IGlmIGEKLSAgICAgICAgIyBzdWJwcm9jZXNzIGlzIGtpbGxlZCB3aXRoIGEgY3RybF5DLiAgUHJl
dmlvdXMgY29tbWVudHMgaW4gdGhpcwotICAgICAgICAjIHJvdXRpbmUgc2FpZCB0aGF0IHN1cHBv
c2VkbHkgV2luZG93cyByZXR1cm5zIDB4YzAwMDAwMWQsIGJ1dCB0aGF0J3Mgbm90IHdoYXQKLSAg
ICAgICAgIyAtMTA3Mzc0MTUxMCBldmFsdWF0ZXMgdG8uIEZpZ3VyZSBvdXQgd2hhdCB0aGUgcmln
aHQgdmFsdWUgaXMKLSAgICAgICAgIyBmb3Igd2luMzIgYW5kIGN5Z3dpbiBoZXJlIC4uLgotICAg
ICAgICBpZiBzZWxmLl9wcm9jLnJldHVybmNvZGUgaW4gKC0xMDczNzQxNTEwLCAtc2lnbmFsLlNJ
R0lOVCk6Ci0gICAgICAgICAgICByYWlzZSBLZXlib2FyZEludGVycnVwdAotCi0gICAgZGVmIHBv
bGwoc2VsZik6Ci0gICAgICAgICIiIkNoZWNrIHRvIHNlZSBpZiB0aGUgdW5kZXJseWluZyBwcm9j
ZXNzIGlzIHJ1bm5pbmc7IHJldHVybnMgTm9uZQotICAgICAgICBpZiBpdCBzdGlsbCBpcyAod3Jh
cHBlciBhcm91bmQgc3VicHJvY2Vzcy5wb2xsKS4iIiIKLSAgICAgICAgaWYgc2VsZi5fcHJvYzoK
LSAgICAgICAgICAgIHJldHVybiBzZWxmLl9wcm9jLnBvbGwoKQotICAgICAgICByZXR1cm4gTm9u
ZQotCiAgICAgZGVmIHdyaXRlKHNlbGYsIGJ5dGVzLCBpZ25vcmVfY3Jhc2g9RmFsc2UpOgotICAg
ICAgICAiIiJXcml0ZSBhIHJlcXVlc3QgdG8gdGhlIHN1YnByb2Nlc3MuIFRoZSBzdWJwcm9jZXNz
IGlzIChyZS0pc3RhcnQoKSdlZAotICAgICAgICBpZiBpcyBub3QgYWxyZWFkeSBydW5uaW5nLiIi
IgotICAgICAgICBpZiBub3Qgc2VsZi5fcHJvYzoKKyAgICAgICAgaWYgbm90IHNlbGYuaXNfc3Rh
cnRlZCgpOgogICAgICAgICAgICAgc2VsZi5fc3RhcnQoKQogICAgICAgICB0cnk6Ci0gICAgICAg
ICAgICBzZWxmLl9wcm9jLnN0ZGluLndyaXRlKGJ5dGVzKQorICAgICAgICAgICAgc2VsZi5fd3Jp
dGUoYnl0ZXMpCiAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgogICAgICAgICAgICAgc2VsZi5z
dG9wKDAuMCkKICAgICAgICAgICAgICMgc3RvcCgpIGNhbGxzIF9yZXNldCgpLCBzbyB3ZSBoYXZl
IHRvIHNldCBjcmFzaGVkIHRvIFRydWUgYWZ0ZXIgY2FsbGluZyBzdG9wKCkKQEAgLTE1OSw2ICsx
MTYsMTAgQEAgY2xhc3MgU2VydmVyUHJvY2VzcyhvYmplY3QpOgogICAgICAgICAgICAgICAgIF9s
b2cuZGVidWcoJ1RoaXMgdGVzdCBtYXJrZWQgYXMgYSBjcmFzaCBiZWNhdXNlIG9mIGEgYnJva2Vu
IHBpcGUgd2hlbiB3cml0aW5nIHRvIHN0ZGluIG9mIHRoZSBzZXJ2ZXIgcHJvY2Vzcy4nKQogICAg
ICAgICAgICAgICAgIHNlbGYuX2NyYXNoZWQgPSBUcnVlCiAKKyAgICBkZWYgc3RhcnQoc2VsZik6
CisgICAgICAgIGlmIG5vdCBzZWxmLmlzX3N0YXJ0ZWQoKToKKyAgICAgICAgICAgIHNlbGYuX3N0
YXJ0KCkKKwogICAgIGRlZiBfcG9wX3N0ZG91dF9saW5lX2lmX3JlYWR5KHNlbGYpOgogICAgICAg
ICBpbmRleF9hZnRlcl9uZXdsaW5lID0gc2VsZi5fb3V0cHV0LmZpbmQoJ1xuJykgKyAxCiAgICAg
ICAgIGlmIGluZGV4X2FmdGVyX25ld2xpbmUgPiAwOgpAQCAtMjE2LDcgKzE3Nyw3IEBAIGNsYXNz
IFNlcnZlclByb2Nlc3Mob2JqZWN0KToKICAgICBkZWYgX2hhbmRsZV90aW1lb3V0KHNlbGYpOgog
ICAgICAgICBzZWxmLnRpbWVkX291dCA9IFRydWUKICAgICAgICAgaWYgc2VsZi5fcG9ydC5nZXRf
b3B0aW9uKCJzYW1wbGVfb25fdGltZW91dCIpOgotICAgICAgICAgICAgc2VsZi5fcG9ydC5zYW1w
bGVfcHJvY2VzcyhzZWxmLl9uYW1lLCBzZWxmLl9wcm9jLnBpZCkKKyAgICAgICAgICAgIHNlbGYu
X3BvcnQuc2FtcGxlX3Byb2Nlc3Moc2VsZi5fbmFtZSwgc2VsZi5waWQoKSkKIAogICAgIGRlZiBf
c3BsaXRfc3RyaW5nX2FmdGVyX2luZGV4KHNlbGYsIHN0cmluZywgaW5kZXgpOgogICAgICAgICBy
ZXR1cm4gc3RyaW5nWzppbmRleF0sIHN0cmluZ1tpbmRleDpdCkBAIC0yMjksNiArMTkwLDE0MSBA
QCBjbGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6CiAgICAgICAgIG91dHB1dCwgc2VsZi5fZXJy
b3IgPSBzZWxmLl9zcGxpdF9zdHJpbmdfYWZ0ZXJfaW5kZXgoc2VsZi5fZXJyb3IsIGJ5dGVzX2Nv
dW50KQogICAgICAgICByZXR1cm4gb3V0cHV0CiAKKyAgICBkZWYgaGFzX2NyYXNoZWQoc2VsZik6
CisgICAgICAgIGlmIG5vdCBzZWxmLl9jcmFzaGVkIGFuZCBzZWxmLnBvbGwoKToKKyAgICAgICAg
ICAgIF9sb2cuZGVidWcoJ1RoaXMgdGVzdCBtYXJrZWQgYXMgYSBjcmFzaCBiZWNhdXNlIG9mIGZh
aWx1cmUgdG8gcG9sbCB0aGUgc2VydmVyIHByb2Nlc3MuJykKKyAgICAgICAgICAgIHNlbGYuX2Ny
YXNoZWQgPSBUcnVlCisgICAgICAgICAgICBzZWxmLl9oYW5kbGVfcG9zc2libGVfaW50ZXJydXB0
KCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NyYXNoZWQKKworICAgIGRlZiBfcmVhZChzZWxmLCBk
ZWFkbGluZSwgZmV0Y2hfYnl0ZXNfZnJvbV9idWZmZXJzX2NhbGxiYWNrKToKKyAgICAgICAgd2hp
bGUgVHJ1ZToKKyAgICAgICAgICAgIGlmIHNlbGYuaGFzX2NyYXNoZWQoKToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICAgICBpZiB0aW1lLnRpbWUoKSA+IGRlYWRsaW5l
OgorICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV90aW1lb3V0KCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gTm9uZQorCisgICAgICAgICAgICBieXRlcyA9IGZldGNoX2J5dGVzX2Zyb21fYnVm
ZmVyc19jYWxsYmFjaygpCisgICAgICAgICAgICBpZiBieXRlcyBpcyBub3QgTm9uZToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gYnl0ZXMKKworICAgICAgICAgICAgc2VsZi5fZ3JhYkRhdGEoZGVh
ZGxpbmUpCisKKyAgICBkZWYgc3RvcChzZWxmLCB0aW1lb3V0X3NlY3M9My4wKToKKyAgICAgICAg
aWYgbm90IHNlbGYuaXNfc3RhcnRlZCgpOgorICAgICAgICAgICAgcmV0dXJuIChOb25lLCBOb25l
KQorCisgICAgICAgICMgT25seSBib3RoZXIgdG8gY2hlY2sgZm9yIGxlYWtzIG9yIHN0ZGVyciBp
ZiB0aGUgcHJvY2VzcyBpcyBzdGlsbCBydW5uaW5nLgorICAgICAgICBpZiBzZWxmLnBvbGwoKSBp
cyBOb25lOgorICAgICAgICAgICAgc2VsZi5fcG9ydC5jaGVja19mb3JfbGVha3Moc2VsZi5uYW1l
KCksIHNlbGYucGlkKCkpCisKKyAgICAgICAgb3V0ID0gW10KKyAgICAgICAgZXJyID0gW10KKwor
ICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQorICAgICAgICBraWxsZWQgPSBGYWxzZQorICAgICAg
ICBpZiB0aW1lb3V0X3NlY3M6CisgICAgICAgICAgICBkZWFkbGluZSA9IG5vdyArIHRpbWVvdXRf
c2VjcworICAgICAgICAgICAgd2hpbGUgc2VsZi5wb2xsKCkgaXMgTm9uZSBhbmQgdGltZS50aW1l
KCkgPCBkZWFkbGluZToKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCisgICAgICAg
ICAgICBpZiBzZWxmLnBvbGwoKSBpcyBOb25lOgorICAgICAgICAgICAgICAgIF9sb2cud2Fybmlu
Zygnc3RvcHBpbmcgJXMocGlkICVkKSB0aW1lZCBvdXQsIGtpbGxpbmcgaXQnICUgKHNlbGYuX25h
bWUsIHNlbGYuX3BpZCkpCisKKyAgICAgICAgaWYgc2VsZi5wb2xsKCkgaXMgTm9uZToKKyAgICAg
ICAgICAgIHNlbGYuX2tpbGwoKQorICAgICAgICAgICAga2lsbGVkID0gVHJ1ZQorICAgICAgICAg
ICAgX2xvZy5kZWJ1Zygna2lsbGVkIHBpZCAlZCcgJSBzZWxmLl9waWQpCisKKyAgICAgICAgIyBy
ZWFkIGFueSByZW1haW5pbmcgZGF0YSBvbiB0aGUgcGlwZXMgYW5kIHJldHVybiBpdC4KKyAgICAg
ICAgaWYgbm90IGtpbGxlZDoKKyAgICAgICAgICAgIHNlbGYuX2dyYWJEYXRhKG5vdykKKyAgICAg
ICAgICAgIG91dCwgZXJyID0gc2VsZi5fb3V0cHV0LCBzZWxmLl9lcnJvcgorICAgICAgICAgICAg
c2VsZi5fcmVzZXQoKQorICAgICAgICByZXR1cm4gKG91dCwgZXJyKQorCisgICAgZGVmIGtpbGwo
c2VsZik6CisgICAgICAgIHNlbGYuc3RvcCgwLjApCisKKworY2xhc3MgU2VydmVyUHJvY2VzcyhT
ZXJ2ZXJQcm9jZXNzQmFzZSk6CisgICAgIiIiVGhpcyBjbGFzcyBwcm92aWRlcyBhIHdyYXBwZXIg
YXJvdW5kIGEgc3VicHJvY2VzcyB0aGF0CisgICAgaW1wbGVtZW50cyBhIHNpbXBsZSByZXF1ZXN0
L3Jlc3BvbnNlIHVzYWdlIG1vZGVsLiBUaGUgcHJpbWFyeSBiZW5lZml0CisgICAgaXMgdGhhdCBy
ZWFkaW5nIHJlc3BvbnNlcyB0YWtlcyBhIGRlYWRsaW5lLCBzbyB0aGF0IHdlIGRvbid0IGV2ZXIg
YmxvY2sKKyAgICBpbmRlZmluaXRlbHkuIFRoZSBjbGFzcyBhbHNvIGhhbmRsZXMgdHJhbnNwYXJl
bnRseSByZXN0YXJ0aW5nIHByb2Nlc3NlcworICAgIGFzIG5lY2Vzc2FyeSB0byBrZWVwIGlzc3Vp
bmcgY29tbWFuZHMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmosIG5hbWUs
IGNtZCwgZW52PU5vbmUsIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgdHJlYXRfbm9fZGF0YV9h
c19jcmFzaD1GYWxzZSk6CisgICAgICAgIHN1cGVyKFNlcnZlclByb2Nlc3MsIHNlbGYpLl9faW5p
dF9fKHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVudiwgdW5pdmVyc2FsX25ld2xpbmVzLCB0cmVhdF9u
b19kYXRhX2FzX2NyYXNoKQorCisgICAgICAgICMgU2VlIGNvbW1lbnQgaW4gaW1wb3J0cyBmb3Ig
d2h5IHdlIG5lZWQgdGhlIHdpbjMyIEFQSXMgYW5kIGNhbid0IGp1c3QgdXNlIHNlbGVjdC4KKyAg
ICAgICAgIyBGSVhNRTogdGhlcmUgc2hvdWxkIGJlIGEgd2F5IHRvIGdldCB3aW4zMiB2cy4gY3ln
d2luIGZyb20gcGxhdGZvcm1pbmZvLgorICAgICAgICBzZWxmLl91c2Vfd2luMzJfYXBpcyA9IHN5
cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKQorICAgICAgICBzZWxmLl9yZXNldCgpCisKKyAg
ICBkZWYgaXNfc3RhcnRlZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2MKKworICAg
IGRlZiBfcmVzZXQoc2VsZik6CisgICAgICAgIGlmIGdldGF0dHIoc2VsZiwgJ19wcm9jJywgTm9u
ZSk6CisgICAgICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZGluOgorICAgICAgICAgICAgICAgIHNl
bGYuX3Byb2Muc3RkaW4uY2xvc2UoKQorICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4g
PSBOb25lCisgICAgICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZG91dDoKKyAgICAgICAgICAgICAg
ICBzZWxmLl9wcm9jLnN0ZG91dC5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5fcHJvYy5z
dGRvdXQgPSBOb25lCisgICAgICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZGVycjoKKyAgICAgICAg
ICAgICAgICBzZWxmLl9wcm9jLnN0ZGVyci5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5f
cHJvYy5zdGRlcnIgPSBOb25lCisKKyAgICAgICAgc2VsZi5fcHJvYyA9IE5vbmUKKyAgICAgICAg
c3VwZXIoU2VydmVyUHJvY2Vzcywgc2VsZikuX3Jlc2V0KCkKKworICAgIGRlZiBfc3RhcnQoc2Vs
Zik6CisgICAgICAgIGlmIHNlbGYuX3Byb2M6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9y
KCIlcyBhbHJlYWR5IHJ1bm5pbmciICUgc2VsZi5fbmFtZSkKKyAgICAgICAgc2VsZi5fcmVzZXQo
KQorICAgICAgICAjIGNsb3NlX2ZkcyBpcyBhIHdvcmthcm91bmQgZm9yIGh0dHA6Ly9idWdzLnB5
dGhvbi5vcmcvaXNzdWUyMzIwCisgICAgICAgIGNsb3NlX2ZkcyA9IG5vdCBzZWxmLl9ob3N0LnBs
YXRmb3JtLmlzX3dpbigpCisgICAgICAgIHNlbGYuX3Byb2MgPSBzZWxmLl9ob3N0LmV4ZWN1dGl2
ZS5wb3BlbihzZWxmLl9jbWQsIHN0ZGluPXNlbGYuX2hvc3QuZXhlY3V0aXZlLlBJUEUsCisgICAg
ICAgICAgICBzdGRvdXQ9c2VsZi5faG9zdC5leGVjdXRpdmUuUElQRSwKKyAgICAgICAgICAgIHN0
ZGVycj1zZWxmLl9ob3N0LmV4ZWN1dGl2ZS5QSVBFLAorICAgICAgICAgICAgY2xvc2VfZmRzPWNs
b3NlX2ZkcywKKyAgICAgICAgICAgIGVudj1zZWxmLl9lbnYsCisgICAgICAgICAgICB1bml2ZXJz
YWxfbmV3bGluZXM9c2VsZi5fdW5pdmVyc2FsX25ld2xpbmVzKQorICAgICAgICBzZWxmLl9waWQg
PSBzZWxmLl9wcm9jLnBpZAorICAgICAgICBzZWxmLl9wb3J0LmZpbmRfc3lzdGVtX3BpZChzZWxm
Lm5hbWUoKSwgc2VsZi5fcGlkKQorICAgICAgICBmZCA9IHNlbGYuX3Byb2Muc3Rkb3V0LmZpbGVu
bygpCisgICAgICAgIGlmIG5vdCBzZWxmLl91c2Vfd2luMzJfYXBpczoKKyAgICAgICAgICAgIGZs
ID0gZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkwpCisgICAgICAgICAgICBmY250bC5mY250
bChmZCwgZmNudGwuRl9TRVRGTCwgZmwgfCBvcy5PX05PTkJMT0NLKQorICAgICAgICAgICAgZmQg
PSBzZWxmLl9wcm9jLnN0ZGVyci5maWxlbm8oKQorICAgICAgICAgICAgZmwgPSBmY250bC5mY250
bChmZCwgZmNudGwuRl9HRVRGTCkKKyAgICAgICAgICAgIGZjbnRsLmZjbnRsKGZkLCBmY250bC5G
X1NFVEZMLCBmbCB8IG9zLk9fTk9OQkxPQ0spCisKKyAgICBkZWYgX2hhbmRsZV9wb3NzaWJsZV9p
bnRlcnJ1cHQoc2VsZik6CisgICAgICAgICIiIlRoaXMgcm91dGluZSBjaGVja3MgdG8gc2VlIGlm
IHRoZSBwcm9jZXNzIGNyYXNoZWQgb3IgZXhpdGVkCisgICAgICAgIGJlY2F1c2Ugb2YgYSBrZXli
b2FyZCBpbnRlcnJ1cHQgYW5kIHJhaXNlcyBLZXlib2FyZEludGVycnVwdAorICAgICAgICBhY2Nv
cmRpbmdseS4iIiIKKyAgICAgICAgIyBGSVhNRTogTGludXggYW5kIE1hYyBzZXQgdGhlIHJldHVy
bmNvZGUgdG8gLXNpZ25hbC5TSUdJTlQgaWYgYQorICAgICAgICAjIHN1YnByb2Nlc3MgaXMga2ls
bGVkIHdpdGggYSBjdHJsXkMuICBQcmV2aW91cyBjb21tZW50cyBpbiB0aGlzCisgICAgICAgICMg
cm91dGluZSBzYWlkIHRoYXQgc3VwcG9zZWRseSBXaW5kb3dzIHJldHVybnMgMHhjMDAwMDAxZCwg
YnV0IHRoYXQncyBub3Qgd2hhdAorICAgICAgICAjIC0xMDczNzQxNTEwIGV2YWx1YXRlcyB0by4g
RmlndXJlIG91dCB3aGF0IHRoZSByaWdodCB2YWx1ZSBpcworICAgICAgICAjIGZvciB3aW4zMiBh
bmQgY3lnd2luIGhlcmUgLi4uCisgICAgICAgIGlmIHNlbGYuX3Byb2MucmV0dXJuY29kZSBpbiAo
LTEwNzM3NDE1MTAsIC1zaWduYWwuU0lHSU5UKToKKyAgICAgICAgICAgIHJhaXNlIEtleWJvYXJk
SW50ZXJydXB0CisKKyAgICBkZWYgcG9sbChzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdG8gc2Vl
IGlmIHRoZSB1bmRlcmx5aW5nIHByb2Nlc3MgaXMgcnVubmluZzsgcmV0dXJucyBOb25lCisgICAg
ICAgIGlmIGl0IHN0aWxsIGlzICh3cmFwcGVyIGFyb3VuZCBzdWJwcm9jZXNzLnBvbGwpLiIiIgor
ICAgICAgICBpZiBzZWxmLl9wcm9jOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2MucG9s
bCgpCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX3dyaXRlKHNlbGYsIGJ5dGVzKToK
KyAgICAgICAgc2VsZi5fcHJvYy5zdGRpbi53cml0ZShieXRlcykKKwogICAgIGRlZiBfd2FpdF9m
b3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnNfdXNpbmdfc2VsZWN0KHNlbGYsIGRlYWRsaW5lLCBz
dG9wcGluZz1GYWxzZSk6CiAgICAgICAgIGlmIHNlbGYuX3Byb2Muc3Rkb3V0LmNsb3NlZCBvciBz
ZWxmLl9wcm9jLnN0ZGVyci5jbG9zZWQ6CiAgICAgICAgICAgICAjIElmIHRoZSBwcm9jZXNzIGNy
YXNoZWQgYW5kIGlzIHVzaW5nIEZJRk9zLCBsaWtlIENocm9taXVtIEFuZHJvaWQsIHRoZQpAQCAt
MzAyLDc1ICszOTgsMTEgQEAgY2xhc3MgU2VydmVyUHJvY2VzcyhvYmplY3QpOgogICAgICAgICAg
ICAgICAgIHJhaXNlCiAgICAgICAgIHJldHVybiBOb25lCiAKLSAgICBkZWYgaGFzX2NyYXNoZWQo
c2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9jcmFzaGVkIGFuZCBzZWxmLnBvbGwoKToKLSAg
ICAgICAgICAgIF9sb2cuZGVidWcoJ1RoaXMgdGVzdCBtYXJrZWQgYXMgYSBjcmFzaCBiZWNhdXNl
IG9mIGZhaWx1cmUgdG8gcG9sbCB0aGUgc2VydmVyIHByb2Nlc3MuJykKLSAgICAgICAgICAgIHNl
bGYuX2NyYXNoZWQgPSBUcnVlCi0gICAgICAgICAgICBzZWxmLl9oYW5kbGVfcG9zc2libGVfaW50
ZXJydXB0KCkKLSAgICAgICAgcmV0dXJuIHNlbGYuX2NyYXNoZWQKLQotICAgICMgVGhpcyByZWFk
IGZ1bmN0aW9uIGlzIGEgYml0IG9kZGx5LWRlc2lnbmVkLCBhcyBpdCBwb2xscyBib3RoIHN0ZG91
dCBhbmQgc3RkZXJyLCB5ZXQKLSAgICAjIG9ubHkgcmVhZHMvcmV0dXJucyBmcm9tIG9uZSBvZiB0
aGVtIChidWZmZXJpbmcgYm90aCBpbiBsb2NhbCBzZWxmLl9vdXRwdXQvc2VsZi5fZXJyb3IpLgot
ICAgICMgSXQgbWlnaHQgYmUgY2xlYW5lciB0byBwYXNzIGluIHRoZSBmaWxlIGRlc2NyaXB0b3Ig
dG8gcG9sbCBpbnN0ZWFkLgotICAgIGRlZiBfcmVhZChzZWxmLCBkZWFkbGluZSwgZmV0Y2hfYnl0
ZXNfZnJvbV9idWZmZXJzX2NhbGxiYWNrKToKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAg
ICAgIGlmIHNlbGYuaGFzX2NyYXNoZWQoKToKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQot
Ci0gICAgICAgICAgICBpZiB0aW1lLnRpbWUoKSA+IGRlYWRsaW5lOgotICAgICAgICAgICAgICAg
IHNlbGYuX2hhbmRsZV90aW1lb3V0KCkKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotCi0g
ICAgICAgICAgICBieXRlcyA9IGZldGNoX2J5dGVzX2Zyb21fYnVmZmVyc19jYWxsYmFjaygpCi0g
ICAgICAgICAgICBpZiBieXRlcyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICByZXR1cm4g
Ynl0ZXMKLQotICAgICAgICAgICAgaWYgc2VsZi5fdXNlX3dpbjMyX2FwaXM6Ci0gICAgICAgICAg
ICAgICAgc2VsZi5fd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnNfdXNpbmdfd2luMzJf
YXBpcyhkZWFkbGluZSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5f
d2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnNfdXNpbmdfc2VsZWN0KGRlYWRsaW5lKQot
Ci0gICAgZGVmIHN0YXJ0KHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5fcHJvYzoKLSAgICAg
ICAgICAgIHNlbGYuX3N0YXJ0KCkKLQotICAgIGRlZiBzdG9wKHNlbGYsIHRpbWVvdXRfc2Vjcz0z
LjApOgotICAgICAgICBpZiBub3Qgc2VsZi5fcHJvYzoKLSAgICAgICAgICAgIHJldHVybiAoTm9u
ZSwgTm9uZSkKLQotICAgICAgICAjIE9ubHkgYm90aGVyIHRvIGNoZWNrIGZvciBsZWFrcyBvciBz
dGRlcnIgaWYgdGhlIHByb2Nlc3MgaXMgc3RpbGwgcnVubmluZy4KLSAgICAgICAgaWYgc2VsZi5w
b2xsKCkgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX3BvcnQuY2hlY2tfZm9yX2xlYWtzKHNl
bGYubmFtZSgpLCBzZWxmLnBpZCgpKQotCi0gICAgICAgIG5vdyA9IHRpbWUudGltZSgpCi0gICAg
ICAgIGlmIHNlbGYuX3Byb2Muc3RkaW46Ci0gICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGluLmNs
b3NlKCkKLSAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4gPSBOb25lCi0gICAgICAgIGtpbGxl
ZCA9IEZhbHNlCi0gICAgICAgIGlmIHRpbWVvdXRfc2VjczoKLSAgICAgICAgICAgIGRlYWRsaW5l
ID0gbm93ICsgdGltZW91dF9zZWNzCi0gICAgICAgICAgICB3aGlsZSBzZWxmLl9wcm9jLnBvbGwo
KSBpcyBOb25lIGFuZCB0aW1lLnRpbWUoKSA8IGRlYWRsaW5lOgotICAgICAgICAgICAgICAgIHRp
bWUuc2xlZXAoMC4wMSkKLSAgICAgICAgICAgIGlmIHNlbGYuX3Byb2MucG9sbCgpIGlzIE5vbmU6
Ci0gICAgICAgICAgICAgICAgX2xvZy53YXJuaW5nKCdzdG9wcGluZyAlcyhwaWQgJWQpIHRpbWVk
IG91dCwga2lsbGluZyBpdCcgJSAoc2VsZi5fbmFtZSwgc2VsZi5fcHJvYy5waWQpKQotCi0gICAg
ICAgIGlmIHNlbGYuX3Byb2MucG9sbCgpIGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl9raWxs
KCkKLSAgICAgICAgICAgIGtpbGxlZCA9IFRydWUKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJ2tp
bGxlZCBwaWQgJWQnICUgc2VsZi5fcHJvYy5waWQpCi0KLSAgICAgICAgIyByZWFkIGFueSByZW1h
aW5pbmcgZGF0YSBvbiB0aGUgcGlwZXMgYW5kIHJldHVybiBpdC4KLSAgICAgICAgaWYgbm90IGtp
bGxlZDoKLSAgICAgICAgICAgIGlmIHNlbGYuX3VzZV93aW4zMl9hcGlzOgotICAgICAgICAgICAg
ICAgIHNlbGYuX3dhaXRfZm9yX2RhdGFfYW5kX3VwZGF0ZV9idWZmZXJzX3VzaW5nX3dpbjMyX2Fw
aXMobm93KQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLl93YWl0X2Zv
cl9kYXRhX2FuZF91cGRhdGVfYnVmZmVyc191c2luZ19zZWxlY3Qobm93LCBzdG9wcGluZz1UcnVl
KQotICAgICAgICBvdXQsIGVyciA9IHNlbGYuX291dHB1dCwgc2VsZi5fZXJyb3IKLSAgICAgICAg
c2VsZi5fcmVzZXQoKQotICAgICAgICByZXR1cm4gKG91dCwgZXJyKQotCi0gICAgZGVmIGtpbGwo
c2VsZik6Ci0gICAgICAgIHNlbGYuc3RvcCgwLjApCisgICAgZGVmIF9ncmFiRGF0YShzZWxmLCBk
ZWFkbGluZSk6CisgICAgICAgIGlmIHNlbGYuX3VzZV93aW4zMl9hcGlzOgorICAgICAgICAgICAg
c2VsZi5fd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnNfdXNpbmdfd2luMzJfYXBpcyhk
ZWFkbGluZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3dhaXRfZm9yX2RhdGFf
YW5kX3VwZGF0ZV9idWZmZXJzX3VzaW5nX3NlbGVjdChkZWFkbGluZSkKIAogICAgIGRlZiBfa2ls
bChzZWxmKToKICAgICAgICAgc2VsZi5faG9zdC5leGVjdXRpdmUua2lsbF9wcm9jZXNzKHNlbGYu
X3Byb2MucGlkKQpAQCAtMzg1LDMgKzQxNywxMTkgQEAgY2xhc3MgU2VydmVyUHJvY2VzcyhvYmpl
Y3QpOgogICAgICAgICBpZiBzdGRlcnI6CiAgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGVyci5j
bG9zZSgpCiAgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGVyciA9IHN0ZGVycgorCisKK2NsYXNz
IFNpbXVsYXRvclByb2Nlc3MoU2VydmVyUHJvY2Vzc0Jhc2UpOgorCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVudj1Ob25lLCB1bml2ZXJzYWxfbmV3bGluZXM9
RmFsc2UsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2g9RmFsc2UpOgorICAgICAgICBzdXBlcihTaW11
bGF0b3JQcm9jZXNzLCBzZWxmKS5fX2luaXRfXyhwb3J0X29iaiwgbmFtZSwgY21kLCBlbnYsIHVu
aXZlcnNhbF9uZXdsaW5lcywgdHJlYXRfbm9fZGF0YV9hc19jcmFzaCkKKyAgICAgICAgc2VsZi5f
c3RkaW4gPSBOb25lCisgICAgICAgIHNlbGYuX3N0ZG91dCA9IE5vbmUKKyAgICAgICAgc2VsZi5f
c3RkZXJyID0gTm9uZQorICAgICAgICBzZWxmLl9yZXNldCgpCisKKyAgICAgICAgZnJvbSB3ZWJr
aXRweS54Y29kZS5zaW11bGF0b3IgaW1wb3J0IFNpbXVsYXRvciAgIyBBdm9pZCBjaXJjdWxhciBp
bXBvcnQKKyAgICAgICAgc2VsZi5fc2ltdWxhdG9yX21hbmFnZXIgPSBTaW11bGF0b3IocG9ydF9v
YmouaG9zdCkKKworICAgICAgICBzZWxmLl9idW5kbGVJRCA9IHNlbGYuX3BvcnQuZXh0cmFjdEJ1
bmRsZUlEKHNlbGYuX2NtZFsxXSkKKyAgICAgICAgc2VsZi5fZGV2aWNlID0gc2VsZi5fc2ltdWxh
dG9yX21hbmFnZXIuZmluZF9kZXZpY2VfYnlfdWRpZChzZWxmLl9jbWRbMF0pCisgICAgICAgIHNl
bGYuX3NpbXVsYXRvcl9tYW5hZ2VyLmluc3RhbGwoc2VsZi5fZGV2aWNlLCBzZWxmLl9jbWRbMV0p
CisgICAgICAgIHNlbGYuX2VudlsnSVBDX0lERU5USUZJRVInXSA9IHNlbGYuX2J1bmRsZUlEICsg
Ii0iICsgc2VsZi5fZGV2aWNlLnVkaWQKKworICAgIGRlZiBfcmVzZXQoc2VsZik6CisgICAgICAg
IGlmIHNlbGYuX3N0ZGluOgorICAgICAgICAgICAgb3MuY2xvc2Uoc2VsZi5fc3RkaW4pCisgICAg
ICAgIGlmIHNlbGYuX3N0ZG91dDoKKyAgICAgICAgICAgIG9zLmNsb3NlKHNlbGYuX3N0ZG91dCkK
KyAgICAgICAgaWYgc2VsZi5fc3RkZXJyOgorICAgICAgICAgICAgb3MuY2xvc2Uoc2VsZi5fc3Rk
ZXJyKQorICAgICAgICBzZWxmLl9zdGRpbiA9IE5vbmUKKyAgICAgICAgc2VsZi5fc3Rkb3V0ID0g
Tm9uZQorICAgICAgICBzZWxmLl9zdGRlcnIgPSBOb25lCisgICAgICAgIHN1cGVyKFNpbXVsYXRv
clByb2Nlc3MsIHNlbGYpLl9yZXNldCgpCisKKyAgICBkZWYgX191bmxpbmtfbWFrZV9maWZvKHNl
bGYsIHBhdGgpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy51bmxpbmsocGF0aCkKKyAg
ICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3Rz
KHBhdGgpOgorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIkNvdWxkIG5vdCB1bmxpbmsg
JyIgKyBwYXRoICsgIicsIHRoZSB0YXJnZXQgcGF0aCBpcyBhIGZpbGUgbm90IGEgcGlwZS4iKQor
ICAgICAgICBvcy5ta2ZpZm8ocGF0aCwgMDY2NikKKworICAgIGRlZiBfc3RhcnQoc2VsZik6Cisg
ICAgICAgIGZpbGVfbG9jYXRpb24gPSAnL3RtcC8nICsgc2VsZi5fZW52WydJUENfSURFTlRJRklF
UiddCisgICAgICAgIGluX3BhdGggPSBmaWxlX2xvY2F0aW9uICsgJ19JTicKKyAgICAgICAgb3V0
X3BhdGggPSBmaWxlX2xvY2F0aW9uICsgJ19PVVQnCisgICAgICAgIGVycm9yX3BhdGggPSBmaWxl
X2xvY2F0aW9uICsgJ19FUlJPUicKKworICAgICAgICBzZWxmLl9fdW5saW5rX21ha2VfZmlmbyhp
bl9wYXRoKQorICAgICAgICBzZWxmLl9fdW5saW5rX21ha2VfZmlmbyhvdXRfcGF0aCkKKyAgICAg
ICAgc2VsZi5fX3VubGlua19tYWtlX2ZpZm8oZXJyb3JfcGF0aCkKKworICAgICAgICBzZWxmLl9w
aWQgPSBzZWxmLl9zaW11bGF0b3JfbWFuYWdlci5ydW4oc2VsZi5fZGV2aWNlLCBzZWxmLl9idW5k
bGVJRCwgc2VsZi5fY21kWzM6XSwgZW52PXNlbGYuX2VudikKKworICAgICAgICB0cnk6CisgICAg
ICAgICAgICBzZWxmLl9zdGRvdXQgPSBvcy5vcGVuKG91dF9wYXRoLCBvcy5PX1JET05MWSB8IG9z
Lk9fTk9OQkxPQ0spCisgICAgICAgICAgICBzZWxmLl9zdGRlcnIgPSBvcy5vcGVuKGVycm9yX3Bh
dGgsIG9zLk9fUkRPTkxZIHwgb3MuT19OT05CTE9DSykKKyAgICAgICAgZXhjZXB0IE9TRXJyb3Ig
YXMgZToKKyAgICAgICAgICAgIHNlbGYuX2NyYXNoZWQgPSBUcnVlCisKKyAgICAgICAgZGVhZGxp
bmUgPSB0aW1lLnRpbWUoKSArIDMKKyAgICAgICAgd2hpbGUgbm90IHNlbGYuX3N0ZGluIGFuZCBk
ZWFkbGluZSA+IHRpbWUudGltZSgpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAg
IHNlbGYuX3N0ZGluID0gb3Mub3Blbihpbl9wYXRoLCBvcy5PX1dST05MWSB8IG9zLk9fTk9OQkxP
Q0spCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIHBh
c3MKKyAgICAgICAgaWYgbm90IHNlbGYuX3N0ZGluOgorICAgICAgICAgICAgc2VsZi5fY3Jhc2hl
ZCA9IFRydWUKKworICAgIGRlZiBpc19zdGFydGVkKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9z
dGRpbiBvciBzZWxmLl9zdGRvdXQgb3Igc2VsZi5fc3RkZXJyOgorICAgICAgICAgICAgcmV0dXJu
IFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgcG9sbChzZWxmKToKKyAgICAg
ICAgaWYgbm90IHNlbGYuaXNfc3RhcnRlZCgpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgdGVtcCA9IG9zLnJlYWQoc2VsZi5fc3RkZXJyLCAxMjgp
CisgICAgICAgICAgICBpZiB0ZW1wOgorICAgICAgICAgICAgICAgIHNlbGYuX2Vycm9yICs9IHRl
bXAKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAg
ICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0
OgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBk
ZWYgX3dyaXRlKHNlbGYsIGJ5dGVzKToKKyAgICAgICAgaWYgc2VsZi5fc3RkaW46CisgICAgICAg
ICAgICBvcy53cml0ZShzZWxmLl9zdGRpbiwgYnl0ZXMpCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQorCisgICAgZGVmIF9ncmFiRGF0YShzZWxmLCBkZWFk
bGluZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlbXAgPSBvcy5yZWFkKHNlbGYuX3N0
ZG91dCwgMTI4KQorICAgICAgICAgICAgaWYgdGVtcDoKKyAgICAgICAgICAgICAgICBzZWxmLl9v
dXRwdXQgKz0gdGVtcAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9j
cmFzaGVkID0gVHJ1ZQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAg
cGFzcworICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQor
ICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZW1wID0gb3MucmVhZChzZWxmLl9zdGRlcnIsIDEy
OCkKKyAgICAgICAgICAgIGlmIHRlbXA6CisgICAgICAgICAgICAgICAgc2VsZi5fZXJyb3IgKz0g
dGVtcAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0g
VHJ1ZQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgcGFzcworICAg
ICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQorCisgICAgZGVm
IF9raWxsKHNlbGYpOgorICAgICAgICBzZWxmLl9zaW11bGF0b3JfbWFuYWdlci5raWxsKHNlbGYu
X2RldmljZSwgc2VsZi5fYnVuZGxlSUQpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hj
b2RlL3NpbXVsYXRvci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hj
b2RlL3NpbXVsYXRvci5weQkocmV2aXNpb24gMjEwMjc0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS94Y29kZS9zaW11bGF0b3IucHkJKHdvcmtpbmcgY29weSkKQEAgLTYxNCw2ICs2MTQsMjkg
QEAgY2xhc3MgU2ltdWxhdG9yKG9iamVjdCk6CiAgICAgICAgIGFzc2VydCh0ZXN0aW5nX2Rldmlj
ZS5hdmFpbGFibGUpCiAgICAgICAgIHJldHVybiB0ZXN0aW5nX2RldmljZQogCisgICAgZGVmIGlu
c3RhbGwoc2VsZiwgZGV2aWNlLCBhcHApOgorICAgICAgICBpZiBzZWxmLl9ob3N0LmV4ZWN1dGl2
ZS5ydW5fY29tbWFuZChbJ3hjcnVuJywgJ3NpbWN0bCcsICdpbnN0YWxsJywgZGV2aWNlLnVkaWQs
IGFwcF0sIHJldHVybl9leGl0X2NvZGU9VHJ1ZSkgPiAwOgorICAgICAgICAgICAgcmV0dXJuIEZh
bHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgcnVuKHNlbGYsIGRldmljZSwgYXBw
X2lkLCBhcmdzLCBlbnY9Tm9uZSk6CisgICAgICAgIHRyYW5zZmVyZWRFbnZpcm9ubWVudCA9IHt9
CisgICAgICAgIGlmIGVudjoKKyAgICAgICAgICAgIGZvciB2YWx1ZSBpbiBlbnY6CisgICAgICAg
ICAgICAgICAgaWYgbm90ICJTSU1DVExfQ0hJTERfIiBpbiB2YWx1ZToKKyAgICAgICAgICAgICAg
ICAgICAgdHJhbnNmZXJlZEVudmlyb25tZW50WydTSU1DVExfQ0hJTERfJyArIHZhbHVlXSA9IGVu
dlt2YWx1ZV0KKyAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXJlZEVudmlyb25tZW50W3ZhbHVl
XSA9IGVudlt2YWx1ZV0KKyAgICAgICAgc3RyID0gc2VsZi5faG9zdC5leGVjdXRpdmUucnVuX2Nv
bW1hbmQoWyd4Y3J1bicsICdzaW1jdGwnLCAnbGF1bmNoJywgZGV2aWNlLnVkaWQsIGFwcF9pZF0g
KyBhcmdzLCBlbnY9dHJhbnNmZXJlZEVudmlyb25tZW50KQorICAgICAgICBpZiBub3QgYXBwX2lk
IGluIHN0cjoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHN0ciA9IHN0ci5yc3Ry
aXAoJ1xuJykuc3BsaXQoKVsxXQorICAgICAgICByZXR1cm4gaW50KHN0cikKKworICAgIGRlZiBr
aWxsKHNlbGYsIGRldmljZSwgYXBwX2lkKToKKyAgICAgICAgaWYgc2VsZi5faG9zdC5leGVjdXRp
dmUucnVuX2NvbW1hbmQoWyd4Y3J1bicsICdzaW1jdGwnLCAndGVybWluYXRlJywgZGV2aWNlLnVk
aWQsIGFwcF9pZF0sIHJldHVybl9leGl0X2NvZGU9VHJ1ZSkgPiAwOgorICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKICAgICBkZWYgX19yZXByX18oc2VsZik6
CiAgICAgICAgIHJldHVybiAnPGlPUyBTaW11bGF0b3I6IHtudW1fcnVudGltZXN9IHJ1bnRpbWVz
LCB7bnVtX2RldmljZV90eXBlc30gZGV2aWNlIHR5cGVzPicuZm9ybWF0KAogICAgICAgICAgICAg
bnVtX3J1bnRpbWVzPWxlbihzZWxmLnJ1bnRpbWVzKSwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298114</attachid>
            <date>2017-01-05 11:00:47 -0800</date>
            <delta_ts>2017-01-10 10:45:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165927-20170105105919.patch</filename>
            <type>text/plain</type>
            <size>38038</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMDM1OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDgxIEBACisyMDE3LTAxLTA1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBSZW1vdmluZyBMYXlvdXRUZXN0UmVsYXkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTkyNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTGF5b3V0VGVzdFJlbGF5OiBSZW1vdmVk
IExheW91dFRlc3RSZWxheS4KKyAgICAgICAgKiBNYWtlZmlsZTogUmVtb3ZlZCBMYXlvdXRUZXN0
UmVsYXkgcmVmZXJlbmNlcy4KKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLXdlYmtpdDogUmVtb3Zl
ZCBMYXlvdXRUZXN0UmVsYXkgcmVmZXJlbmNlcy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3BvcnQvYmFzZS5weToKKyAgICAgICAgKFBvcnQuX19pbml0X18pOiBBZGRlZCBfdGVzdF9ydW5u
ZXJfcHJvY2Vzc19jb25zdHJ1Y3Rvci4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQv
ZGFyd2luLnB5OgorICAgICAgICAoRGFyd2luUG9ydC5leHRyYWN0QnVuZGxlSUQpOiBBZGRlZCBm
dW5jdGlvbiB0byBleHRyYWN0IGJ1bmRsZSBJRCBmcm9tIHBsaXN0LgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHk6CisgICAgICAgIChEcml2ZXIuX3NldHVwX2Vudmly
b25fZm9yX2RyaXZlcik6IFN3YXBwZWQgX3NlcnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yIGZvciBf
dGVzdF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3Rvci4KKyAgICAgICAgKElPU1NpbXVsYXRvckRy
aXZlci5jbWRfbGluZSk6IFJlbW92ZWQgdW5uZWVkZWQgYXJndW1lbnRzLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChEcml2ZXJU
ZXN0LnRlc3Rfc3RvcF9jbGVhbnNfdXBfcHJvcGVybHkpOiBTZXQgX3Rlc3RfcnVubmVyX3Byb2Nl
c3NfY29uc3RydWN0b3IgZm9yIHRlc3RpbmcuCisgICAgICAgIChEcml2ZXJUZXN0LnRlc3RfdHdv
X3N0YXJ0c19jbGVhbnNfdXBfcHJvcGVybHkpOiBEaXR0by4KKyAgICAgICAgKERyaXZlclRlc3Qu
dGVzdF9zdGFydF9hY3R1YWxseV9zdGFydHMpOiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3BvcnQvaW9zLnB5OgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydCk6IFJlbW92ZSBy
ZWxheV9uYW1lLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fX2luaXRfXyk6IFNldCBfdGVz
dF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciBmb3IgSU9TU2ltdWxhdG9ycy4KKyAgICAgICAg
KElPU1NpbXVsYXRvclBvcnQuX2dldF9jcmFzaF9sb2cpOiBVcGRhdGUgY29tbWVudC4KKyAgICAg
ICAgKElPU1NpbXVsYXRvclBvcnQuX2J1aWxkX2RyaXZlcik6IFJlbW92ZSByZWZlcmVuY2VzIHRv
IExheW91dFRlc3RSZWxheS4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX2NyZWF0ZV9zaW11
bGF0b3JzKTogQWxpZ25tZW50IGZpeC4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQucmVsYXlf
cGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9jaGVja19yZWxheSk6
IERlbGV0ZWQuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9jaGVja19wb3J0X2J1aWxkKTog
RGVsZXRlZC4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX2J1aWxkX3JlbGF5KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0LnB5OgorICAg
ICAgICAoaW9zVGVzdC50ZXN0XzMyYml0KTogVXBkYXRlIHRlc3QuCisgICAgICAgIChpb3NUZXN0
LnRlc3RfNjRiaXQpOiBVcGRhdGUgdGVzdC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvc2VydmVyX3Byb2Nlc3MucHk6CisgICAgICAgIChTZXJ2ZXJQcm9jZXNzQmFzZSk6IE1vdmUg
c2hhcmVkIGNvZGUgdG8gYSBiYXNlIGNsYXNzLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2Uu
X19pbml0X18pOiBTZXQtdXAgU2VydmVyUHJvY2VzcyBiYXNpY3MuCisgICAgICAgIChTZXJ2ZXJQ
cm9jZXNzQmFzZS5pc19zdGFydGVkKTogVHJ1ZSBpZiB0aGUgcGlwZSBpcyBkZWZpbmVkLgorICAg
ICAgICAoU2VydmVyUHJvY2Vzc0Jhc2UuX3N0YXJ0KTogQmVnaW4gcnVubmluZyB0aGUgcHJvY2Vz
cy4KKyAgICAgICAgKFNlcnZlclByb2Nlc3NCYXNlLnBvbGwpOiBDaGVjayBpZiB0aGUgcHJvY2Vz
cyBpcyBydW5uaW5nLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2UuX3dyaXRlKTogU2VuZCBk
YXRhIHRvIHRoZSBwcm9jZXNzLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2UuX2dyYWJEYXRh
KTogQ2hlY2sgYm90aCBzdGRvdXQgYW5kIHN0ZGVyciBmb3IgZGF0YS4KKyAgICAgICAgKFNlcnZl
clByb2Nlc3NCYXNlLl9raWxsKTogU2h1dCBkb3duIHRoZSBwcm9jZXNzLgorICAgICAgICAoU2Vy
dmVyUHJvY2Vzc0Jhc2UuX2hhbmRsZV9wb3NzaWJsZV9pbnRlcnJ1cHQpOiBDaGVjayBmb3Iga2V5
Ym9hcmQgaW50ZXJydXB0cy4KKyAgICAgICAgKFNlcnZlclByb2Nlc3NCYXNlLl9yZXNldCk6IFJl
c2V0IHByb2Nlc3MgdmFsdWVzLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2UucHJvY2Vzc19u
YW1lKTogUmV0dXJuIHByb2Nlc3MgbmFtZS4KKyAgICAgICAgKFNlcnZlclByb2Nlc3NCYXNlLndy
aXRlKTogUHVibGljIHdyaXRlIGZ1bmN0aW9uLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2Uu
c3RhcnQpOiBQdWJsaWMgc3RhcnQgZnVuY3Rpb24uCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzQmFz
ZS5faGFuZGxlX3RpbWVvdXQpOiBUcmlnZ2VyIG9uIHRpbWVvdXQuCisgICAgICAgIChTZXJ2ZXJQ
cm9jZXNzQmFzZS5oYXNfY3Jhc2hlZCk6IENoZWNrIGlmIGEgcHJvY2VzcyBoYXMgY3Jhc2hlZC4K
KyAgICAgICAgKFNlcnZlclByb2Nlc3NCYXNlLl9yZWFkKTogTW92ZWQgZnJvbSBTZXJ2ZXJQcm9j
ZXNzLCBnZW5lcmFsaXplZC4KKyAgICAgICAgKFNlcnZlclByb2Nlc3NCYXNlLnN0b3ApOiBNb3Zl
ZCBmcm9tIFNlcnZlclByb2Nlc3MsIGdlbmVyYWxpemVkLgorICAgICAgICAoU2VydmVyUHJvY2Vz
c0Jhc2Uua2lsbCk6IE1vdmVkIGZyb20gU2VydmVyUHJvY2Vzcy4KKyAgICAgICAgKFNlcnZlclBy
b2Nlc3MpOgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5fX2luaXRfXyk6IE1vdmVkIGdlbmVyYWxp
emVkIGZ1bmN0aW9uYWxpdHkgdG8gU2VydmVyUHJvY2Vzc0Jhc2UuCisgICAgICAgIChTZXJ2ZXJQ
cm9jZXNzLmlzX3N0YXJ0ZWQpOiBDaGVjayBpZiB0aGUgcHJvY2VzcyBleGlzdHMuCisgICAgICAg
IChTZXJ2ZXJQcm9jZXNzLl9yZXNldCk6IE1vdmVkIGdlbmVyYWxpemVkIGZ1bmN0aW9uYWxpdHkg
dG8gU2VydmVyUHJvY2Vzc0Jhc2UuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLl9zdGFydCk6IE5v
IGNoYW5nZS4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MuX2hhbmRsZV9wb3NzaWJsZV9pbnRlcnJ1
cHQpOiBObyBjaGFuZ2UuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLnBvbGwpOiBObyBjaGFuZ2Uu
CisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLl93cml0ZSk6IFNwbGl0IGludG8gZ2VuZXJhbGl6ZWQg
d3JpdGUoKSBhbmQgdGhpcyBmdW5jdGlvbi4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MuX2dyYWJE
YXRhKTogR3JhYnMgZGF0YSBmcm9tIHByb2Nlc3MsIGVpdGhlciB3aW4zMiBvciBVbml4LgorICAg
ICAgICAoU2VydmVyUHJvY2Vzcy5yZXBsYWNlX291dHB1dHMpOiBObyBjaGFuZ2UuCisgICAgICAg
IChTaW11bGF0b3JQcm9jZXNzKToKKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX19pbml0X18p
OiBJbnN0YWxsIGFwcCBvbiBkZXZpY2UsIHNldHVwIGVudmlyb25tZW50LgorICAgICAgICAoU2lt
dWxhdG9yUHJvY2Vzcy5fcmVzZXQpOiBUZWFyIGRvd24gZmlsZXMuCisgICAgICAgIChTaW11bGF0
b3JQcm9jZXNzLl9fdW5saW5rX21ha2VfZmlmbyk6IFN1YnJvdXRpbmUgdG8gY3JlYXRlIGEgZmlm
by4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX3N0YXJ0KTogQ29uc3RydWN0IGZpZm8sIGxh
dW5jaCBhcHAuCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNzLmlzX3N0YXJ0ZWQpOiBDaGVjayBp
ZiBhbnkgZmlmbyBhcmUgZGVmaW5lZC4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MucG9sbCk6
IENoZWNrIGlmIHN0ZGVyciBpcyBhbGl2ZS4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX3dy
aXRlKTogV3JpdGUgdG8gc3RkaW4gZmlmby4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX2dy
YWJEYXRhKTogQXR0ZW1wdCB0byBwdWxsIGRhdGEgZnJvbSBib3RoIHN0ZG91dCBhbmQgc3RkZXJy
LgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5fa2lsbCk6IFNodXRkb3duIHByb2Nlc3MuCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3IucHk6CisgICAgICAgIChT
aW11bGF0b3IuaW5zdGFsbCk6IEluc3RhbGwgYXBwIG9uIHNpbXVsYXRlZCBkZXZpY2UuCisgICAg
ICAgIChTaW11bGF0b3IucnVuKTogUnVuIGFwcCBvbiBkZXZpY2UsIHRyYW5zZmVyIGVudmlyb25t
ZW50IGRhdGEuCisgICAgICAgIChTaW11bGF0b3Iua2lsbCk6IFNodXRkb3duIGFwcCBvbiBzaW11
bGF0ZWQgZGV2aWNlLgorCiAyMDE3LTAxLTA1ICBQZXIgQXJuZSBWb2xsYW4gIDxwdm9sbGFuQGFw
cGxlLmNvbT4KIAogICAgICAgICBbV2luXSBBcmNoaXZlIHRlc3QgcmVzdWx0IGlzIGZhaWxpbmcu
CkluZGV4OiBUb29scy9NYWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9NYWtlZmlsZQkocmV2
aXNpb24gMjEwMjc0KQorKysgVG9vbHMvTWFrZWZpbGUJKHdvcmtpbmcgY29weSkKQEAgLTcsOSAr
Nyw2IEBAIGlmbmVxICgsJChTREtST09UKSkKIAlpZm5lcSAoLCQoZmluZHN0cmluZyBpcGhvbmUs
JChTREtST09UKSkpCiAJCU1PRFVMRVMgKz0gTW9iaWxlTWluaUJyb3dzZXIKIAllbmRpZgotCWlm
ZXEgKCwkKERPX05PVF9CVUlMRF9MQVlPVVRfVEVTVF9SRUxBWSkpCi0JCU1PRFVMRVMgKz0gTGF5
b3V0VGVzdFJlbGF5Ci0JZW5kaWYKIGVuZGlmCiAKIGFsbDoKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
YnVpbGQtd2Via2l0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CShy
ZXZpc2lvbiAyMTAyNzQpCisrKyBUb29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAkod29ya2luZyBj
b3B5KQpAQCAtMjAwLDEwICsyMDAsNiBAQCBpZiAoaXNBcHBsZU1hY1dlYktpdCgpKSB7CiAgICAg
ICAgIHB1c2ggQGNvcHlMaWJyYXJpZXNBcmdzLCBwcm9kdWN0RGlyKCk7CiAgICAgICAgIHByaW50
KGpvaW4oIiAiLCBAY29weUxpYnJhcmllc0FyZ3MpIC4gIlxuIik7CiAgICAgICAgIChzeXN0ZW0o
QGNvcHlMaWJyYXJpZXNBcmdzKSA9PSAwKSBvciBkaWU7Ci0KLSAgICAgICAgaWYgKHdpbGxVc2VJ
T1NTaW11bGF0b3JTREsoKSkgewotICAgICAgICAgICAgKHN5c3RlbSgicGVybCIsICJUb29scy9T
Y3JpcHRzL2J1aWxkLWxheW91dHRlc3RyZWxheSIsIGFyZ3VtZW50c0ZvckNvbmZpZ3VyYXRpb24o
KSkgPT0gMCkgb3IgZGllOwotICAgICAgICB9CiAgICAgfQogCiAgICAgIyBCdWlsZCBUb29scyBu
ZWVkZWQgZm9yIEFwcGxlIHBvcnRzCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
YmFzZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5w
eQkocmV2aXNpb24gMjEwMjc0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2Uu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw2ICsxMzEsNyBAQCBjbGFzcyBQb3J0KG9iamVjdCk6
CiAgICAgICAgIHNlbGYuX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9IE5vbmUKICAgICAgICAg
c2VsZi5faW1hZ2VfZGlmZmVyID0gTm9uZQogICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzc19j
b25zdHJ1Y3RvciA9IHNlcnZlcl9wcm9jZXNzLlNlcnZlclByb2Nlc3MgICMgb3ZlcnJpZGFibGUg
Zm9yIHRlc3RpbmcKKyAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3Rv
ciA9IHNlcnZlcl9wcm9jZXNzLlNlcnZlclByb2Nlc3MKIAogICAgICAgICBpZiBub3QgaGFzYXR0
cihvcHRpb25zLCAnY29uZmlndXJhdGlvbicpIG9yIG5vdCBvcHRpb25zLmNvbmZpZ3VyYXRpb246
CiAgICAgICAgICAgICBzZWxmLnNldF9vcHRpb25fZGVmYXVsdCgnY29uZmlndXJhdGlvbicsIHNl
bGYuZGVmYXVsdF9jb25maWd1cmF0aW9uKCkpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvZGFyd2luLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9kYXJ3aW4ucHkJKHJldmlzaW9uIDIxMDI3NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC9kYXJ3aW4ucHkJKHdvcmtpbmcgY29weSkKQEAgLTE3NCwzICsxNzQsNiBAQCBjbGFzcyBE
YXJ3aW5Qb3J0KEFwcGxlUG9ydCk6CiAgICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvcjoKICAgICAg
ICAgICAgIF9sb2cud2FybigieGNydW4gZmFpbGVkOyBmYWxsaW5nIGJhY2sgdG8gJyVzJy4iICUg
ZmFsbGJhY2spCiAgICAgICAgICAgICByZXR1cm4gZmFsbGJhY2sKKworICAgIGRlZiBleHRyYWN0
QnVuZGxlSUQoc2VsZiwgYXBwKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGl2ZS5ydW5f
Y29tbWFuZChbJy91c3IvbGliZXhlYy9QbGlzdEJ1ZGR5JywgJy1jJywgJ1ByaW50IENGQnVuZGxl
SWRlbnRpZmllcicsIGFwcCArICcvSW5mby5wbGlzdCddKS5yc3RyaXAoKQpJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5CShyZXZpc2lvbiAyMTAyNzQpCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNyAr
MTM4LDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2RyaXZlcl91c2Vy
X2RpcmVjdG9yeV9zdWZmaXggPSBOb25lCiAgICAgICAgIHNlbGYuX2RyaXZlcl91c2VyX2NhY2hl
X2RpcmVjdG9yeSA9IE5vbmUKIAotICAgICAgICAjIFdlYktpdFRlc3RSdW5uZXIvTGF5b3V0VGVz
dFJlbGF5IGNhbiByZXBvcnQgYmFjayBzdWJwcm9jZXNzIGNyYXNoZXMgYnkgcHJpbnRpbmcKKyAg
ICAgICAgIyBXZWJLaXRUZXN0UnVubmVyIGNhbiByZXBvcnQgYmFjayBzdWJwcm9jZXNzIGNyYXNo
ZXMgYnkgcHJpbnRpbmcKICAgICAgICAgIyAiI0NSQVNIRUQgLSBQUk9DRVNTTkFNRSIuICBTaW5j
ZSB0aG9zZSBjYW4gaGFwcGVuIGF0IGFueSB0aW1lIGFuZCBTZXJ2ZXJQcm9jZXNzCiAgICAgICAg
ICMgd29uJ3QgYmUgYXdhcmUgb2YgdGhlbSAoc2luY2UgdGhlIGFjdHVhbCB0b29sIGRpZG4ndCBj
cmFzaCwganVzdCBhIHN1YnByb2Nlc3MpCiAgICAgICAgICMgd2UgcmVjb3JkIHRoZSBjcmFzaGVk
IHN1YnByb2Nlc3MgbmFtZSBoZXJlLgpAQCAtMzI3LDcgKzMyNyw2IEBAIGNsYXNzIERyaXZlcihv
YmplY3QpOgogCiAgICAgZGVmIF9zZXR1cF9lbnZpcm9uX2Zvcl9kcml2ZXIoc2VsZiwgZW52aXJv
bm1lbnQpOgogICAgICAgICBidWlsZF9yb290X3BhdGggPSBzdHIoc2VsZi5fcG9ydC5fYnVpbGRf
cGF0aCgpKQotICAgICAgICAjIEZJWE1FOiBEWUxEXyogdmFyaWFibGVzIHNob3VsZCBiZSBNYWMt
b25seS4gRXZlbiBpT1MgU2ltdWxhdG9yIGRvZXNuJ3QgbmVlZCB0aGVtLCBhcyBMYXlvdXRUZXN0
UmVsYXkgaXMgYSBob3N0IGJpbmFyeS4KICAgICAgICAgc2VsZi5fYXBwZW5kX2Vudmlyb25tZW50
X3ZhcmlhYmxlX3BhdGgoZW52aXJvbm1lbnQsICdEWUxEX0xJQlJBUllfUEFUSCcsIGJ1aWxkX3Jv
b3RfcGF0aCkKICAgICAgICAgc2VsZi5fYXBwZW5kX2Vudmlyb25tZW50X3ZhcmlhYmxlX3BhdGgo
ZW52aXJvbm1lbnQsICdfX1hQQ19EWUxEX0xJQlJBUllfUEFUSCcsIGJ1aWxkX3Jvb3RfcGF0aCkK
ICAgICAgICAgc2VsZi5fYXBwZW5kX2Vudmlyb25tZW50X3ZhcmlhYmxlX3BhdGgoZW52aXJvbm1l
bnQsICdEWUxEX0ZSQU1FV09SS19QQVRIJywgYnVpbGRfcm9vdF9wYXRoKQpAQCAtMzY5LDcgKzM2
OCw3IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogICAgICAgICBlbnZpcm9ubWVudCA9IHNlbGYu
X3NldHVwX2Vudmlyb25fZm9yX3Rlc3QoKQogICAgICAgICBzZWxmLl9jcmFzaGVkX3Byb2Nlc3Nf
bmFtZSA9IE5vbmUKICAgICAgICAgc2VsZi5fY3Jhc2hlZF9waWQgPSBOb25lCi0gICAgICAgIHNl
bGYuX3NlcnZlcl9wcm9jZXNzID0gc2VsZi5fcG9ydC5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0
b3Ioc2VsZi5fcG9ydCwgc2VsZi5fc2VydmVyX25hbWUsIHNlbGYuY21kX2xpbmUocGl4ZWxfdGVz
dHMsIHBlcl90ZXN0X2FyZ3MpLCBlbnZpcm9ubWVudCkKKyAgICAgICAgc2VsZi5fc2VydmVyX3By
b2Nlc3MgPSBzZWxmLl9wb3J0Ll90ZXN0X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yKHNlbGYu
X3BvcnQsIHNlbGYuX3NlcnZlcl9uYW1lLCBzZWxmLmNtZF9saW5lKHBpeGVsX3Rlc3RzLCBwZXJf
dGVzdF9hcmdzKSwgZW52aXJvbm1lbnQpCiAgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzLnN0
YXJ0KCkKIAogICAgIGRlZiBfcnVuX3Bvc3Rfc3RhcnRfdGFza3Moc2VsZik6CkBAIC02MDksMjEg
KzYwOCwxNSBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAgICAgICAgcmV0dXJuIFRydWUKIAog
Ci0jIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBhYnN0cmFjdGVkIG91dCB2aWEgdGhlIFBvcnQgc3Vi
Y2xhc3Mgc29tZWhvdy4KIGNsYXNzIElPU1NpbXVsYXRvckRyaXZlcihEcml2ZXIpOgogICAgIGRl
ZiBjbWRfbGluZShzZWxmLCBwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyk6CiAgICAgICAgIGNt
ZCA9IHN1cGVyKElPU1NpbXVsYXRvckRyaXZlciwgc2VsZikuY21kX2xpbmUocGl4ZWxfdGVzdHMs
IHBlcl90ZXN0X2FyZ3MpCi0gICAgICAgIHJlbGF5X3Rvb2wgPSBzZWxmLl9wb3J0LnJlbGF5X3Bh
dGgKICAgICAgICAgZHVtcF90b29sID0gY21kWzBdCiAgICAgICAgIGR1bXBfdG9vbF9hcmdzID0g
Y21kWzE6XQotICAgICAgICBwcm9kdWN0X2RpciA9IHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoKQog
ICAgICAgICByZWxheV9hcmdzID0gWwotICAgICAgICAgICAgJy1kZXZlbG9wZXJEaXInLCBzZWxm
Ll9wb3J0LmRldmVsb3Blcl9kaXIsCi0gICAgICAgICAgICAnLXVkaWQnLCBzZWxmLl9wb3J0LmRl
dmljZV9pZF9mb3Jfd29ya2VyX251bWJlcihzZWxmLl93b3JrZXJfbnVtYmVyKSwKLSAgICAgICAg
ICAgICctcHJvZHVjdERpcicsIHByb2R1Y3RfZGlyLAotICAgICAgICAgICAgJy1hcHAnLCBkdW1w
X3Rvb2wsCi0gICAgICAgIF0KLSAgICAgICAgcmV0dXJuIFtyZWxheV90b29sXSArIHJlbGF5X2Fy
Z3MgKyBbJy0tJ10gKyBkdW1wX3Rvb2xfYXJncworICAgICAgICAgICAgc2VsZi5fcG9ydC5kZXZp
Y2VfaWRfZm9yX3dvcmtlcl9udW1iZXIoc2VsZi5fd29ya2VyX251bWJlciksCisgICAgICAgICAg
ICBkdW1wX3Rvb2xdCisgICAgICAgIHJldHVybiByZWxheV9hcmdzICsgWyctLSddICsgZHVtcF90
b29sX2FyZ3MKIAogICAgIGRlZiBfc2V0dXBfZW52aXJvbl9mb3JfZHJpdmVyKHNlbGYsIGVudmly
b25tZW50KToKICAgICAgICAgZW52aXJvbm1lbnRbJ0RFVkVMT1BFUl9ESVInXSA9IHNlbGYuX3Bv
cnQuZGV2ZWxvcGVyX2RpcgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZl
cl91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
ZHJpdmVyX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyMTAyNzQpCisrKyBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3BvcnQvZHJpdmVyX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNjQsNyAr
MjY0LDcgQEAgY2xhc3MgRHJpdmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYg
dGVzdF9zdG9wX2NsZWFuc191cF9wcm9wZXJseShzZWxmKToKICAgICAgICAgcG9ydCA9IFRlc3RX
ZWJLaXRQb3J0KCkKLSAgICAgICAgcG9ydC5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBN
b2NrU2VydmVyUHJvY2VzcworICAgICAgICBwb3J0Ll90ZXN0X3J1bm5lcl9wcm9jZXNzX2NvbnN0
cnVjdG9yID0gTW9ja1NlcnZlclByb2Nlc3MKICAgICAgICAgZHJpdmVyID0gRHJpdmVyKHBvcnQs
IDAsIHBpeGVsX3Rlc3RzPVRydWUpCiAgICAgICAgIGRyaXZlci5zdGFydChUcnVlLCBbXSkKICAg
ICAgICAgbGFzdF90bXBkaXIgPSBwb3J0Ll9maWxlc3lzdGVtLmxhc3RfdG1wZGlyCkBAIC0yNzQs
NyArMjc0LDcgQEAgY2xhc3MgRHJpdmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBk
ZWYgdGVzdF90d29fc3RhcnRzX2NsZWFuc191cF9wcm9wZXJseShzZWxmKToKICAgICAgICAgcG9y
dCA9IFRlc3RXZWJLaXRQb3J0KCkKLSAgICAgICAgcG9ydC5fc2VydmVyX3Byb2Nlc3NfY29uc3Ry
dWN0b3IgPSBNb2NrU2VydmVyUHJvY2VzcworICAgICAgICBwb3J0Ll90ZXN0X3J1bm5lcl9wcm9j
ZXNzX2NvbnN0cnVjdG9yID0gTW9ja1NlcnZlclByb2Nlc3MKICAgICAgICAgZHJpdmVyID0gRHJp
dmVyKHBvcnQsIDAsIHBpeGVsX3Rlc3RzPVRydWUpCiAgICAgICAgIGRyaXZlci5zdGFydChUcnVl
LCBbXSkKICAgICAgICAgbGFzdF90bXBkaXIgPSBwb3J0Ll9maWxlc3lzdGVtLmxhc3RfdG1wZGly
CkBAIC0yODMsNyArMjgzLDcgQEAgY2xhc3MgRHJpdmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6
CiAKICAgICBkZWYgdGVzdF9zdGFydF9hY3R1YWxseV9zdGFydHMoc2VsZik6CiAgICAgICAgIHBv
cnQgPSBUZXN0V2ViS2l0UG9ydCgpCi0gICAgICAgIHBvcnQuX3NlcnZlcl9wcm9jZXNzX2NvbnN0
cnVjdG9yID0gTW9ja1NlcnZlclByb2Nlc3MKKyAgICAgICAgcG9ydC5fdGVzdF9ydW5uZXJfcHJv
Y2Vzc19jb25zdHJ1Y3RvciA9IE1vY2tTZXJ2ZXJQcm9jZXNzCiAgICAgICAgIGRyaXZlciA9IERy
aXZlcihwb3J0LCAwLCBwaXhlbF90ZXN0cz1UcnVlKQogICAgICAgICBkcml2ZXIuc3RhcnQoVHJ1
ZSwgW10pCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkcml2ZXIuX3NlcnZlcl9wcm9jZXNzLnN0
YXJ0ZWQpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkJKHJldmlzaW9uIDIxMDI3
NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDYgKzM0LDcgQEAgZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzLnRlc3Rf
YwogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBjb25maWcgYXMgcG9ydF9jb25maWcKIGZyb20g
d2Via2l0cHkucG9ydCBpbXBvcnQgZHJpdmVyLCBpbWFnZV9kaWZmCiBmcm9tIHdlYmtpdHB5LnBv
cnQuZGFyd2luIGltcG9ydCBEYXJ3aW5Qb3J0Citmcm9tIHdlYmtpdHB5LnBvcnQuc2VydmVyX3By
b2Nlc3MgaW1wb3J0IFNpbXVsYXRvclByb2Nlc3MKIGZyb20gd2Via2l0cHkueGNvZGUuc2ltdWxh
dG9yIGltcG9ydCBTaW11bGF0b3IsIFJ1bnRpbWUsIERldmljZVR5cGUKIGZyb20gd2Via2l0cHku
Y29tbW9uLnN5c3RlbS5jcmFzaGxvZ3MgaW1wb3J0IENyYXNoTG9ncwogCkBAIC03OCw3ICs3OSw2
IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAgICAgU0RLID0gJ2lwaG9u
ZXNpbXVsYXRvcicKIAogICAgIFNJTVVMQVRPUl9CVU5ETEVfSUQgPSAnY29tLmFwcGxlLmlwaG9u
ZXNpbXVsYXRvcicKLSAgICByZWxheV9uYW1lID0gJ0xheW91dFRlc3RSZWxheScKICAgICBTSU1V
TEFUT1JfRElSRUNUT1JZID0gIi90bXAvV2ViS2l0VGVzdGluZ1NpbXVsYXRvcnMvIgogICAgIExT
UkVHSVNURVJfUEFUSCA9ICIvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlU2VydmljZXMu
ZnJhbWV3b3JrL0ZyYW1ld29ya3MvTGF1bmNoU2VydmljZXMuZnJhbWV3b3JrL1ZlcnNpb25zL0N1
cnJlbnQvU3VwcG9ydC9sc3JlZ2lzdGVyIgogICAgIFBST0NFU1NfQ09VTlRfRVNUSU1BVEVfUEVS
X1NJTVVMQVRPUl9JTlNUQU5DRSA9IDEwMApAQCAtOTcsNiArOTcsNyBAQCBjbGFzcyBJT1NTaW11
bGF0b3JQb3J0KERhcndpblBvcnQpOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBv
cnRfbmFtZSwgKiprd2FyZ3MpOgogICAgICAgICBEYXJ3aW5Qb3J0Ll9faW5pdF9fKHNlbGYsIGhv
c3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyX3Byb2Nl
c3NfY29uc3RydWN0b3IgPSBTaW11bGF0b3JQcm9jZXNzCiAKICAgICAgICAgb3B0aW9uYWxfZGV2
aWNlX2NsYXNzID0gc2VsZi5nZXRfb3B0aW9uKCdkZXZpY2VfY2xhc3MnKQogICAgICAgICBzZWxm
Ll9wcmludGluZ19jbWRfbGluZSA9IEZhbHNlCkBAIC0xNDgsMTYgKzE0OSw2IEBAIGNsYXNzIElP
U1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAgICAgICAgICAgICBkZXZpY2VfdHlwZSA9IERl
dmljZVR5cGUuZnJvbV9uYW1lKGRldmljZV9uYW1lKQogICAgICAgICByZXR1cm4gZGV2aWNlX3R5
cGUKIAotICAgIEBwcm9wZXJ0eQotICAgIEBtZW1vaXplZAotICAgIGRlZiByZWxheV9wYXRoKHNl
bGYpOgotICAgICAgICBpZiBzZWxmLl9yb290X3dhc19zZXQ6Ci0gICAgICAgICAgICBwYXRoID0g
c2VsZi5fZmlsZXN5c3RlbS5hYnNwYXRoKHNlbGYuZ2V0X29wdGlvbigncm9vdCcpKQotICAgICAg
ICBlbHNlOgotICAgICAgICAgICAgbWFjX2NvbmZpZyA9IHBvcnRfY29uZmlnLkNvbmZpZyhzZWxm
Ll9leGVjdXRpdmUsIHNlbGYuX2ZpbGVzeXN0ZW0sICdtYWMnKQotICAgICAgICAgICAgcGF0aCA9
IG1hY19jb25maWcuYnVpbGRfZGlyZWN0b3J5KHNlbGYuZ2V0X29wdGlvbignY29uZmlndXJhdGlv
bicpKQotICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHBhdGgsIHNlbGYucmVs
YXlfbmFtZSkKLQogICAgIEBtZW1vaXplZAogICAgIGRlZiBjaGlsZF9wcm9jZXNzZXMoc2VsZik6
CiAgICAgICAgIHJldHVybiBpbnQoc2VsZi5nZXRfb3B0aW9uKCdjaGlsZF9wcm9jZXNzZXMnKSkK
QEAgLTE4MiwxOSArMTczLDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToK
IAogICAgICAgICByZXR1cm4gbWluKG1heGltdW1fc2ltdWxhdG9yX2NvdW50X29uX3RoaXNfc3lz
dGVtLCBiZXN0X2NoaWxkX3Byb2Nlc3NfY291bnRfZm9yX2NwdSkKIAotICAgIGRlZiBfY2hlY2tf
cmVsYXkoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhzZWxm
LnJlbGF5X3BhdGgpOgotICAgICAgICAgICAgX2xvZy5lcnJvcigiJXMgd2FzIG5vdCBmb3VuZCBh
dCAlcyIgJSAoc2VsZi5yZWxheV9uYW1lLCBzZWxmLnJlbGF5X3BhdGgpKQotICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCi0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYgX2NoZWNrX3BvcnRf
YnVpbGQoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9yb290X3dhc19zZXQgYW5kIHNlbGYu
Z2V0X29wdGlvbignYnVpbGQnKSBhbmQgbm90IHNlbGYuX2J1aWxkX3JlbGF5KCk6Ci0gICAgICAg
ICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgaWYgbm90IHNlbGYuX2NoZWNrX3JlbGF5KCk6Ci0g
ICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRydWUKLQogICAgIGRlZiBf
Z2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFu
LCB0aW1lX2ZuPXRpbWUudGltZSwgc2xlZXBfZm49dGltZS5zbGVlcCwgd2FpdF9mb3JfbG9nPVRy
dWUpOgogICAgICAgICB0aW1lX2ZuID0gdGltZV9mbiBvciB0aW1lLnRpbWUKICAgICAgICAgc2xl
ZXBfZm4gPSBzbGVlcF9mbiBvciB0aW1lLnNsZWVwCkBAIC0yMTUsNyArMTkzLDcgQEAgY2xhc3Mg
SU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9n
ZXRfY3Jhc2hfbG9nKGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9waWRbMF0sIGNyYXNoZWRf
c3VicHJvY2Vzc19uYW1lX2FuZF9waWRbMV0sIHN0ZG91dCwKICAgICAgICAgICAgICAgICAnXG4n
LmpvaW4oc3RkZXJyX2xpbmVzKSwgbmV3ZXJfdGhhbiwgdGltZV9mbiwgc2xlZXBfZm4sIHdhaXRf
Zm9yX2xvZykKIAotICAgICAgICAjIExheW91dFRlc3RSZWxheSBjcmFzaGVkCisgICAgICAgICMg
QXBwIGNyYXNoZWQKICAgICAgICAgX2xvZy5kZWJ1ZygnbG9va2luZyBmb3IgY3Jhc2ggbG9nIGZv
ciAlczolcycgJSAobmFtZSwgc3RyKHBpZCkpKQogICAgICAgICBjcmFzaF9sb2cgPSAnJwogICAg
ICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hMb2dzKHNlbGYuaG9zdCkKQEAgLTIzMywyNCArMjExLDkg
QEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgICAgIHJldHVy
biBzdGRlcnIsIE5vbmUKICAgICAgICAgcmV0dXJuIHN0ZGVyciwgY3Jhc2hfbG9nCiAKLSAgICBk
ZWYgX2J1aWxkX3JlbGF5KHNlbGYpOgotICAgICAgICBlbnZpcm9ubWVudCA9IHNlbGYuaG9zdC5j
b3B5X2N1cnJlbnRfZW52aXJvbm1lbnQoKQotICAgICAgICBlbnZpcm9ubWVudC5kaXNhYmxlX2dj
Y19zbWFydHF1b3RlcygpCi0gICAgICAgIGVudiA9IGVudmlyb25tZW50LnRvX2RpY3Rpb25hcnko
KQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgRklYTUU6IFdlIHNob3VsZCBiZSBwYXNz
aW5nIF9hcmd1bWVudHNfZm9yX2NvbmZpZ3VyYXRpb24oKSwgd2hpY2ggcmVzcGVjdHMgYnVpbGQg
Y29uZmlndXJhdGlvbiBhbmQgcG9ydCwKLSAgICAgICAgICAgICMgaW5zdGVhZCBvZiBoYXJkY29k
aW5nIC0taW9zLXNpbXVsYXRvci4KLSAgICAgICAgICAgIHNlbGYuX3J1bl9zY3JpcHQoImJ1aWxk
LWxheW91dHRlc3RyZWxheSIsIGFyZ3M9WyItLWlvcy1zaW11bGF0b3IiXSwgZW52PWVudikKLSAg
ICAgICAgZXhjZXB0IFNjcmlwdEVycm9yLCBlOgotICAgICAgICAgICAgX2xvZy5lcnJvcihlLm1l
c3NhZ2Vfd2l0aF9vdXRwdXQob3V0cHV0X2xpbWl0PU5vbmUpKQotICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCi0gICAgICAgIHJldHVybiBUcnVlCi0KICAgICBkZWYgX2J1aWxkX2RyaXZlcihzZWxm
KToKICAgICAgICAgYnVpbHRfdG9vbCA9IHN1cGVyKElPU1NpbXVsYXRvclBvcnQsIHNlbGYpLl9i
dWlsZF9kcml2ZXIoKQotICAgICAgICBidWlsdF9yZWxheSA9IHNlbGYuX2J1aWxkX3JlbGF5KCkK
LSAgICAgICAgcmV0dXJuIGJ1aWx0X3Rvb2wgYW5kIGJ1aWx0X3JlbGF5CisgICAgICAgIHJldHVy
biBidWlsdF90b29sCiAKICAgICBkZWYgX2J1aWxkX2RyaXZlcl9mbGFncyhzZWxmKToKICAgICAg
ICAgYXJjaHMgPSBbJ0FSQ0hTPWkzODYnXSBpZiBzZWxmLmFyY2hpdGVjdHVyZSgpID09ICd4ODYn
IGVsc2UgW10KQEAgLTI4MCw5ICsyNDMsOSBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndp
blBvcnQpOgogCiAgICAgZGVmIF9jcmVhdGVfc2ltdWxhdG9ycyhzZWxmKToKICAgICAgICAgaWYg
KHNlbGYuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKSA8IHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkp
OgotICAgICAgICAgICAgICAgIF9sb2cud2FybigiWW91IGhhdmUgc3BlY2lmaWVkIHZlcnkgaGln
aCB2YWx1ZSh7MH0pIGZvciAtLWNoaWxkLXByb2Nlc3NlcyIuZm9ybWF0KHNlbGYuY2hpbGRfcHJv
Y2Vzc2VzKCkpKQotICAgICAgICAgICAgICAgIF9sb2cud2FybigibWF4aW11bSBjaGlsZC1wcm9j
ZXNzZXMgd2hpY2ggY2FuIGJlIHN1cHBvcnRlZCBvbiB0aGlzIHN5c3RlbSBhcmU6IHswfSIuZm9y
bWF0KHNlbGYuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKSkpCi0gICAgICAgICAgICAgICAgX2xv
Zy53YXJuKCJUaGlzIGlzIHZlcnkgbGlrZWx5IHRvIGZhaWwuIikKKyAgICAgICAgICAgIF9sb2cu
d2FybigiWW91IGhhdmUgc3BlY2lmaWVkIHZlcnkgaGlnaCB2YWx1ZSh7MH0pIGZvciAtLWNoaWxk
LXByb2Nlc3NlcyIuZm9ybWF0KHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpKQorICAgICAgICAgICAg
X2xvZy53YXJuKCJtYXhpbXVtIGNoaWxkLXByb2Nlc3NlcyB3aGljaCBjYW4gYmUgc3VwcG9ydGVk
IG9uIHRoaXMgc3lzdGVtIGFyZTogezB9Ii5mb3JtYXQoc2VsZi5kZWZhdWx0X2NoaWxkX3Byb2Nl
c3NlcygpKSkKKyAgICAgICAgICAgIF9sb2cud2FybigiVGhpcyBpcyB2ZXJ5IGxpa2VseSB0byBm
YWlsLiIpCiAKICAgICAgICAgaWYgc2VsZi5fdXNpbmdfZGVkaWNhdGVkX3NpbXVsYXRvcnMoKToK
ICAgICAgICAgICAgIHNlbGYuX2NyZWF0ZVNpbXVsYXRvckFwcHMoKQpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2lvc191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyMTAyNzQpCisr
KyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNv
cHkpCkBAIC03MCw3ICs3MCw3IEBAIGNsYXNzIGlvc1Rlc3QoZGFyd2luX3Rlc3RjYXNlLkRhcndp
blRlc3QKICAgICAgICAgcG9ydC5fcnVuX3NjcmlwdCA9IHJ1bl9zY3JpcHQKICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChwb3J0LmFyY2hpdGVjdHVyZSgpLCAneDg2JykKICAgICAgICAgcG9ydC5f
YnVpbGRfZHJpdmVyKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFyZ3MsIFsnLS1p
b3Mtc2ltdWxhdG9yJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hcmdzLCBbJ0FS
Q0hTPWkzODYnLCAnLS1zZGsnLCAnaXBob25lc2ltdWxhdG9yJ10pCiAKICAgICBkZWYgdGVzdF82
NGJpdChzZWxmKToKICAgICAgICAgIyBBcHBsZSBNYWMgcG9ydCBpcyA2NC1iaXQgYnkgZGVmYXVs
dApAQCAtODIsNyArODIsNyBAQCBjbGFzcyBpb3NUZXN0KGRhcndpbl90ZXN0Y2FzZS5EYXJ3aW5U
ZXN0CiAKICAgICAgICAgcG9ydC5fcnVuX3NjcmlwdCA9IHJ1bl9zY3JpcHQKICAgICAgICAgcG9y
dC5fYnVpbGRfZHJpdmVyKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFyZ3MsIFsn
LS1pb3Mtc2ltdWxhdG9yJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hcmdzLCBb
Jy0tc2RrJywgJ2lwaG9uZXNpbXVsYXRvciddKQogCiAgICAgZGVmIHRlc3Rfc2RrX25hbWUoc2Vs
Zik6CiAgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCkluZGV4OiBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3MucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzLnB5CShyZXZpc2lvbiAyMTAyNzQpCisr
KyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3MucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTUyLDEyICs1Miw3IEBAIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVj
dXRpdmUgaW0KIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIAogCi1jbGFzcyBT
ZXJ2ZXJQcm9jZXNzKG9iamVjdCk6Ci0gICAgIiIiVGhpcyBjbGFzcyBwcm92aWRlcyBhIHdyYXBw
ZXIgYXJvdW5kIGEgc3VicHJvY2VzcyB0aGF0Ci0gICAgaW1wbGVtZW50cyBhIHNpbXBsZSByZXF1
ZXN0L3Jlc3BvbnNlIHVzYWdlIG1vZGVsLiBUaGUgcHJpbWFyeSBiZW5lZml0Ci0gICAgaXMgdGhh
dCByZWFkaW5nIHJlc3BvbnNlcyB0YWtlcyBhIGRlYWRsaW5lLCBzbyB0aGF0IHdlIGRvbid0IGV2
ZXIgYmxvY2sKLSAgICBpbmRlZmluaXRlbHkuIFRoZSBjbGFzcyBhbHNvIGhhbmRsZXMgdHJhbnNw
YXJlbnRseSByZXN0YXJ0aW5nIHByb2Nlc3NlcwotICAgIGFzIG5lY2Vzc2FyeSB0byBrZWVwIGlz
c3VpbmcgY29tbWFuZHMuIiIiCitjbGFzcyBTZXJ2ZXJQcm9jZXNzQmFzZShvYmplY3QpOgogCiAg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVudj1Ob25lLCB1bml2
ZXJzYWxfbmV3bGluZXM9RmFsc2UsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2g9RmFsc2UpOgogICAg
ICAgICBzZWxmLl9wb3J0ID0gcG9ydF9vYmoKQEAgLTcwLDExICs2NSwyOCBAQCBjbGFzcyBTZXJ2
ZXJQcm9jZXNzKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX3RyZWF0X25vX2RhdGFfYXNfY3Jhc2gg
PSB0cmVhdF9ub19kYXRhX2FzX2NyYXNoCiAgICAgICAgIHNlbGYuX2hvc3QgPSBzZWxmLl9wb3J0
Lmhvc3QKICAgICAgICAgc2VsZi5fcGlkID0gTm9uZQotICAgICAgICBzZWxmLl9yZXNldCgpCiAK
LSAgICAgICAgIyBTZWUgY29tbWVudCBpbiBpbXBvcnRzIGZvciB3aHkgd2UgbmVlZCB0aGUgd2lu
MzIgQVBJcyBhbmQgY2FuJ3QganVzdCB1c2Ugc2VsZWN0LgotICAgICAgICAjIEZJWE1FOiB0aGVy
ZSBzaG91bGQgYmUgYSB3YXkgdG8gZ2V0IHdpbjMyIHZzLiBjeWd3aW4gZnJvbSBwbGF0Zm9ybWlu
Zm8uCi0gICAgICAgIHNlbGYuX3VzZV93aW4zMl9hcGlzID0gc3lzLnBsYXRmb3JtLnN0YXJ0c3dp
dGgoJ3dpbicpCisgICAgZGVmIGlzX3N0YXJ0ZWQoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdElt
cGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfc3RhcnQoc2VsZik6CisgICAgICAgIHJhaXNlIE5v
dEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBwb2xsKHNlbGYpOgorICAgICAgICByYWlzZSBO
b3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX3dyaXRlKHNlbGYsIGJ5dGVzKToKKyAgICAg
ICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9ncmFiRGF0YShzZWxmLCBk
ZWFkbGluZSk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBf
a2lsbChzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVm
IF9oYW5kbGVfcG9zc2libGVfaW50ZXJydXB0KHNlbGYpOgorICAgICAgICAjIFVzZWQgdG8gY2F0
Y2gga2V5Ym9hcmQgaW50ZXJ1cHRzLCBpZiBhcHBsaWNhYmxlCisgICAgICAgIHBhc3MKIAogICAg
IGRlZiBuYW1lKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQpAQCAtODMsMTggKzk1
LDYgQEAgY2xhc3MgU2VydmVyUHJvY2VzcyhvYmplY3QpOgogICAgICAgICByZXR1cm4gc2VsZi5f
cGlkCiAKICAgICBkZWYgX3Jlc2V0KHNlbGYpOgotICAgICAgICBpZiBnZXRhdHRyKHNlbGYsICdf
cHJvYycsIE5vbmUpOgotICAgICAgICAgICAgaWYgc2VsZi5fcHJvYy5zdGRpbjoKLSAgICAgICAg
ICAgICAgICBzZWxmLl9wcm9jLnN0ZGluLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBzZWxmLl9w
cm9jLnN0ZGluID0gTm9uZQotICAgICAgICAgICAgaWYgc2VsZi5fcHJvYy5zdGRvdXQ6Ci0gICAg
ICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRvdXQuY2xvc2UoKQotICAgICAgICAgICAgICAgIHNl
bGYuX3Byb2Muc3Rkb3V0ID0gTm9uZQotICAgICAgICAgICAgaWYgc2VsZi5fcHJvYy5zdGRlcnI6
Ci0gICAgICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRlcnIuY2xvc2UoKQotICAgICAgICAgICAg
ICAgIHNlbGYuX3Byb2Muc3RkZXJyID0gTm9uZQotCi0gICAgICAgIHNlbGYuX3Byb2MgPSBOb25l
CiAgICAgICAgIHNlbGYuX291dHB1dCA9IHN0cigpICAjIGJ5dGVzYXJyYXkoKSBvbmNlIHdlIHJl
cXVpcmUgUHl0aG9uIDIuNgogICAgICAgICBzZWxmLl9lcnJvciA9IHN0cigpICAjIGJ5dGVzYXJy
YXkoKSBvbmNlIHdlIHJlcXVpcmUgUHl0aG9uIDIuNgogICAgICAgICBzZWxmLl9jcmFzaGVkID0g
RmFsc2UKQEAgLTEwMyw1NCArMTAzLDExIEBAIGNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToK
ICAgICBkZWYgcHJvY2Vzc19uYW1lKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQog
Ci0gICAgZGVmIF9zdGFydChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fcHJvYzoKLSAgICAgICAg
ICAgIHJhaXNlIFZhbHVlRXJyb3IoIiVzIGFscmVhZHkgcnVubmluZyIgJSBzZWxmLl9uYW1lKQot
ICAgICAgICBzZWxmLl9yZXNldCgpCi0gICAgICAgICMgY2xvc2VfZmRzIGlzIGEgd29ya2Fyb3Vu
ZCBmb3IgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIzMjAKLSAgICAgICAgY2xvc2VfZmRz
ID0gbm90IHNlbGYuX2hvc3QucGxhdGZvcm0uaXNfd2luKCkKLSAgICAgICAgc2VsZi5fcHJvYyA9
IHNlbGYuX2hvc3QuZXhlY3V0aXZlLnBvcGVuKHNlbGYuX2NtZCwgc3RkaW49c2VsZi5faG9zdC5l
eGVjdXRpdmUuUElQRSwKLSAgICAgICAgICAgIHN0ZG91dD1zZWxmLl9ob3N0LmV4ZWN1dGl2ZS5Q
SVBFLAotICAgICAgICAgICAgc3RkZXJyPXNlbGYuX2hvc3QuZXhlY3V0aXZlLlBJUEUsCi0gICAg
ICAgICAgICBjbG9zZV9mZHM9Y2xvc2VfZmRzLAotICAgICAgICAgICAgZW52PXNlbGYuX2VudiwK
LSAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1zZWxmLl91bml2ZXJzYWxfbmV3bGluZXMp
Ci0gICAgICAgIHNlbGYuX3BpZCA9IHNlbGYuX3Byb2MucGlkCi0gICAgICAgIHNlbGYuX3BvcnQu
ZmluZF9zeXN0ZW1fcGlkKHNlbGYubmFtZSgpLCBzZWxmLl9waWQpCi0gICAgICAgIGZkID0gc2Vs
Zi5fcHJvYy5zdGRvdXQuZmlsZW5vKCkKLSAgICAgICAgaWYgbm90IHNlbGYuX3VzZV93aW4zMl9h
cGlzOgotICAgICAgICAgICAgZmwgPSBmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGTCkKLSAg
ICAgICAgICAgIGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX1NFVEZMLCBmbCB8IG9zLk9fTk9OQkxP
Q0spCi0gICAgICAgICAgICBmZCA9IHNlbGYuX3Byb2Muc3RkZXJyLmZpbGVubygpCi0gICAgICAg
ICAgICBmbCA9IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZMKQotICAgICAgICAgICAgZmNu
dGwuZmNudGwoZmQsIGZjbnRsLkZfU0VURkwsIGZsIHwgb3MuT19OT05CTE9DSykKLQotICAgIGRl
ZiBfaGFuZGxlX3Bvc3NpYmxlX2ludGVycnVwdChzZWxmKToKLSAgICAgICAgIiIiVGhpcyByb3V0
aW5lIGNoZWNrcyB0byBzZWUgaWYgdGhlIHByb2Nlc3MgY3Jhc2hlZCBvciBleGl0ZWQKLSAgICAg
ICAgYmVjYXVzZSBvZiBhIGtleWJvYXJkIGludGVycnVwdCBhbmQgcmFpc2VzIEtleWJvYXJkSW50
ZXJydXB0Ci0gICAgICAgIGFjY29yZGluZ2x5LiIiIgotICAgICAgICAjIEZJWE1FOiBMaW51eCBh
bmQgTWFjIHNldCB0aGUgcmV0dXJuY29kZSB0byAtc2lnbmFsLlNJR0lOVCBpZiBhCi0gICAgICAg
ICMgc3VicHJvY2VzcyBpcyBraWxsZWQgd2l0aCBhIGN0cmxeQy4gIFByZXZpb3VzIGNvbW1lbnRz
IGluIHRoaXMKLSAgICAgICAgIyByb3V0aW5lIHNhaWQgdGhhdCBzdXBwb3NlZGx5IFdpbmRvd3Mg
cmV0dXJucyAweGMwMDAwMDFkLCBidXQgdGhhdCdzIG5vdCB3aGF0Ci0gICAgICAgICMgLTEwNzM3
NDE1MTAgZXZhbHVhdGVzIHRvLiBGaWd1cmUgb3V0IHdoYXQgdGhlIHJpZ2h0IHZhbHVlIGlzCi0g
ICAgICAgICMgZm9yIHdpbjMyIGFuZCBjeWd3aW4gaGVyZSAuLi4KLSAgICAgICAgaWYgc2VsZi5f
cHJvYy5yZXR1cm5jb2RlIGluICgtMTA3Mzc0MTUxMCwgLXNpZ25hbC5TSUdJTlQpOgotICAgICAg
ICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQKLQotICAgIGRlZiBwb2xsKHNlbGYpOgotICAg
ICAgICAiIiJDaGVjayB0byBzZWUgaWYgdGhlIHVuZGVybHlpbmcgcHJvY2VzcyBpcyBydW5uaW5n
OyByZXR1cm5zIE5vbmUKLSAgICAgICAgaWYgaXQgc3RpbGwgaXMgKHdyYXBwZXIgYXJvdW5kIHN1
YnByb2Nlc3MucG9sbCkuIiIiCi0gICAgICAgIGlmIHNlbGYuX3Byb2M6Ci0gICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fcHJvYy5wb2xsKCkKLSAgICAgICAgcmV0dXJuIE5vbmUKLQogICAgIGRlZiB3
cml0ZShzZWxmLCBieXRlcywgaWdub3JlX2NyYXNoPUZhbHNlKToKLSAgICAgICAgIiIiV3JpdGUg
YSByZXF1ZXN0IHRvIHRoZSBzdWJwcm9jZXNzLiBUaGUgc3VicHJvY2VzcyBpcyAocmUtKXN0YXJ0
KCknZWQKLSAgICAgICAgaWYgaXMgbm90IGFscmVhZHkgcnVubmluZy4iIiIKLSAgICAgICAgaWYg
bm90IHNlbGYuX3Byb2M6CisgICAgICAgIGlmIG5vdCBzZWxmLmlzX3N0YXJ0ZWQoKToKICAgICAg
ICAgICAgIHNlbGYuX3N0YXJ0KCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5fcHJv
Yy5zdGRpbi53cml0ZShieXRlcykKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlKGJ5dGVzKQogICAg
ICAgICBleGNlcHQgSU9FcnJvciwgZToKICAgICAgICAgICAgIHNlbGYuc3RvcCgwLjApCiAgICAg
ICAgICAgICAjIHN0b3AoKSBjYWxscyBfcmVzZXQoKSwgc28gd2UgaGF2ZSB0byBzZXQgY3Jhc2hl
ZCB0byBUcnVlIGFmdGVyIGNhbGxpbmcgc3RvcCgpCkBAIC0xNTksNiArMTE2LDEwIEBAIGNsYXNz
IFNlcnZlclByb2Nlc3Mob2JqZWN0KToKICAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCdUaGlz
IHRlc3QgbWFya2VkIGFzIGEgY3Jhc2ggYmVjYXVzZSBvZiBhIGJyb2tlbiBwaXBlIHdoZW4gd3Jp
dGluZyB0byBzdGRpbiBvZiB0aGUgc2VydmVyIHByb2Nlc3MuJykKICAgICAgICAgICAgICAgICBz
ZWxmLl9jcmFzaGVkID0gVHJ1ZQogCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBpZiBu
b3Qgc2VsZi5pc19zdGFydGVkKCk6CisgICAgICAgICAgICBzZWxmLl9zdGFydCgpCisKICAgICBk
ZWYgX3BvcF9zdGRvdXRfbGluZV9pZl9yZWFkeShzZWxmKToKICAgICAgICAgaW5kZXhfYWZ0ZXJf
bmV3bGluZSA9IHNlbGYuX291dHB1dC5maW5kKCdcbicpICsgMQogICAgICAgICBpZiBpbmRleF9h
ZnRlcl9uZXdsaW5lID4gMDoKQEAgLTIxNiw3ICsxNzcsNyBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNz
KG9iamVjdCk6CiAgICAgZGVmIF9oYW5kbGVfdGltZW91dChzZWxmKToKICAgICAgICAgc2VsZi50
aW1lZF9vdXQgPSBUcnVlCiAgICAgICAgIGlmIHNlbGYuX3BvcnQuZ2V0X29wdGlvbigic2FtcGxl
X29uX3RpbWVvdXQiKToKLSAgICAgICAgICAgIHNlbGYuX3BvcnQuc2FtcGxlX3Byb2Nlc3Moc2Vs
Zi5fbmFtZSwgc2VsZi5fcHJvYy5waWQpCisgICAgICAgICAgICBzZWxmLl9wb3J0LnNhbXBsZV9w
cm9jZXNzKHNlbGYuX25hbWUsIHNlbGYucGlkKCkpCiAKICAgICBkZWYgX3NwbGl0X3N0cmluZ19h
ZnRlcl9pbmRleChzZWxmLCBzdHJpbmcsIGluZGV4KToKICAgICAgICAgcmV0dXJuIHN0cmluZ1s6
aW5kZXhdLCBzdHJpbmdbaW5kZXg6XQpAQCAtMjI5LDYgKzE5MCwxNDEgQEAgY2xhc3MgU2VydmVy
UHJvY2VzcyhvYmplY3QpOgogICAgICAgICBvdXRwdXQsIHNlbGYuX2Vycm9yID0gc2VsZi5fc3Bs
aXRfc3RyaW5nX2FmdGVyX2luZGV4KHNlbGYuX2Vycm9yLCBieXRlc19jb3VudCkKICAgICAgICAg
cmV0dXJuIG91dHB1dAogCisgICAgZGVmIGhhc19jcmFzaGVkKHNlbGYpOgorICAgICAgICBpZiBu
b3Qgc2VsZi5fY3Jhc2hlZCBhbmQgc2VsZi5wb2xsKCk6CisgICAgICAgICAgICBfbG9nLmRlYnVn
KCdUaGlzIHRlc3QgbWFya2VkIGFzIGEgY3Jhc2ggYmVjYXVzZSBvZiBmYWlsdXJlIHRvIHBvbGwg
dGhlIHNlcnZlciBwcm9jZXNzLicpCisgICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQor
ICAgICAgICAgICAgc2VsZi5faGFuZGxlX3Bvc3NpYmxlX2ludGVycnVwdCgpCisgICAgICAgIHJl
dHVybiBzZWxmLl9jcmFzaGVkCisKKyAgICBkZWYgX3JlYWQoc2VsZiwgZGVhZGxpbmUsIGZldGNo
X2J5dGVzX2Zyb21fYnVmZmVyc19jYWxsYmFjayk6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAg
ICAgICAgICBpZiBzZWxmLmhhc19jcmFzaGVkKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5v
bmUKKworICAgICAgICAgICAgaWYgdGltZS50aW1lKCkgPiBkZWFkbGluZToKKyAgICAgICAgICAg
ICAgICBzZWxmLl9oYW5kbGVfdGltZW91dCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUK
KworICAgICAgICAgICAgYnl0ZXMgPSBmZXRjaF9ieXRlc19mcm9tX2J1ZmZlcnNfY2FsbGJhY2so
KQorICAgICAgICAgICAgaWYgYnl0ZXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGJ5dGVzCisKKyAgICAgICAgICAgIHNlbGYuX2dyYWJEYXRhKGRlYWRsaW5lKQorCisgICAg
ZGVmIHN0b3Aoc2VsZiwgdGltZW91dF9zZWNzPTMuMCk6CisgICAgICAgIGlmIG5vdCBzZWxmLmlz
X3N0YXJ0ZWQoKToKKyAgICAgICAgICAgIHJldHVybiAoTm9uZSwgTm9uZSkKKworICAgICAgICAj
IE9ubHkgYm90aGVyIHRvIGNoZWNrIGZvciBsZWFrcyBvciBzdGRlcnIgaWYgdGhlIHByb2Nlc3Mg
aXMgc3RpbGwgcnVubmluZy4KKyAgICAgICAgaWYgc2VsZi5wb2xsKCkgaXMgTm9uZToKKyAgICAg
ICAgICAgIHNlbGYuX3BvcnQuY2hlY2tfZm9yX2xlYWtzKHNlbGYubmFtZSgpLCBzZWxmLnBpZCgp
KQorCisgICAgICAgIG91dCA9IFtdCisgICAgICAgIGVyciA9IFtdCisKKyAgICAgICAgbm93ID0g
dGltZS50aW1lKCkKKyAgICAgICAga2lsbGVkID0gRmFsc2UKKyAgICAgICAgaWYgdGltZW91dF9z
ZWNzOgorICAgICAgICAgICAgZGVhZGxpbmUgPSBub3cgKyB0aW1lb3V0X3NlY3MKKyAgICAgICAg
ICAgIHdoaWxlIHNlbGYucG9sbCgpIGlzIE5vbmUgYW5kIHRpbWUudGltZSgpIDwgZGVhZGxpbmU6
CisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQorICAgICAgICAgICAgaWYgc2VsZi5w
b2xsKCkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ3N0b3BwaW5nICVz
KHBpZCAlZCkgdGltZWQgb3V0LCBraWxsaW5nIGl0JyAlIChzZWxmLl9uYW1lLCBzZWxmLl9waWQp
KQorCisgICAgICAgIGlmIHNlbGYucG9sbCgpIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9r
aWxsKCkKKyAgICAgICAgICAgIGtpbGxlZCA9IFRydWUKKyAgICAgICAgICAgIF9sb2cuZGVidWco
J2tpbGxlZCBwaWQgJWQnICUgc2VsZi5fcGlkKQorCisgICAgICAgICMgcmVhZCBhbnkgcmVtYWlu
aW5nIGRhdGEgb24gdGhlIHBpcGVzIGFuZCByZXR1cm4gaXQuCisgICAgICAgIGlmIG5vdCBraWxs
ZWQ6CisgICAgICAgICAgICBzZWxmLl9ncmFiRGF0YShub3cpCisgICAgICAgICAgICBvdXQsIGVy
ciA9IHNlbGYuX291dHB1dCwgc2VsZi5fZXJyb3IKKyAgICAgICAgICAgIHNlbGYuX3Jlc2V0KCkK
KyAgICAgICAgcmV0dXJuIChvdXQsIGVycikKKworICAgIGRlZiBraWxsKHNlbGYpOgorICAgICAg
ICBzZWxmLnN0b3AoMC4wKQorCisKK2NsYXNzIFNlcnZlclByb2Nlc3MoU2VydmVyUHJvY2Vzc0Jh
c2UpOgorICAgICIiIlRoaXMgY2xhc3MgcHJvdmlkZXMgYSB3cmFwcGVyIGFyb3VuZCBhIHN1YnBy
b2Nlc3MgdGhhdAorICAgIGltcGxlbWVudHMgYSBzaW1wbGUgcmVxdWVzdC9yZXNwb25zZSB1c2Fn
ZSBtb2RlbC4gVGhlIHByaW1hcnkgYmVuZWZpdAorICAgIGlzIHRoYXQgcmVhZGluZyByZXNwb25z
ZXMgdGFrZXMgYSBkZWFkbGluZSwgc28gdGhhdCB3ZSBkb24ndCBldmVyIGJsb2NrCisgICAgaW5k
ZWZpbml0ZWx5LiBUaGUgY2xhc3MgYWxzbyBoYW5kbGVzIHRyYW5zcGFyZW50bHkgcmVzdGFydGlu
ZyBwcm9jZXNzZXMKKyAgICBhcyBuZWNlc3NhcnkgdG8ga2VlcCBpc3N1aW5nIGNvbW1hbmRzLiIi
IgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVudj1Ob25l
LCB1bml2ZXJzYWxfbmV3bGluZXM9RmFsc2UsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2g9RmFsc2Up
OgorICAgICAgICBzdXBlcihTZXJ2ZXJQcm9jZXNzLCBzZWxmKS5fX2luaXRfXyhwb3J0X29iaiwg
bmFtZSwgY21kLCBlbnYsIHVuaXZlcnNhbF9uZXdsaW5lcywgdHJlYXRfbm9fZGF0YV9hc19jcmFz
aCkKKworICAgICAgICAjIFNlZSBjb21tZW50IGluIGltcG9ydHMgZm9yIHdoeSB3ZSBuZWVkIHRo
ZSB3aW4zMiBBUElzIGFuZCBjYW4ndCBqdXN0IHVzZSBzZWxlY3QuCisgICAgICAgICMgRklYTUU6
IHRoZXJlIHNob3VsZCBiZSBhIHdheSB0byBnZXQgd2luMzIgdnMuIGN5Z3dpbiBmcm9tIHBsYXRm
b3JtaW5mby4KKyAgICAgICAgc2VsZi5fdXNlX3dpbjMyX2FwaXMgPSBzeXMucGxhdGZvcm0uc3Rh
cnRzd2l0aCgnd2luJykKKyAgICAgICAgc2VsZi5fcmVzZXQoKQorCisgICAgZGVmIGlzX3N0YXJ0
ZWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wcm9jCisKKyAgICBkZWYgX3Jlc2V0KHNl
bGYpOgorICAgICAgICBpZiBnZXRhdHRyKHNlbGYsICdfcHJvYycsIE5vbmUpOgorICAgICAgICAg
ICAgaWYgc2VsZi5fcHJvYy5zdGRpbjoKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGlu
LmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGluID0gTm9uZQorICAgICAg
ICAgICAgaWYgc2VsZi5fcHJvYy5zdGRvdXQ6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvYy5z
dGRvdXQuY2xvc2UoKQorICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3Rkb3V0ID0gTm9uZQor
ICAgICAgICAgICAgaWYgc2VsZi5fcHJvYy5zdGRlcnI6CisgICAgICAgICAgICAgICAgc2VsZi5f
cHJvYy5zdGRlcnIuY2xvc2UoKQorICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkZXJyID0g
Tm9uZQorCisgICAgICAgIHNlbGYuX3Byb2MgPSBOb25lCisgICAgICAgIHN1cGVyKFNlcnZlclBy
b2Nlc3MsIHNlbGYpLl9yZXNldCgpCisKKyAgICBkZWYgX3N0YXJ0KHNlbGYpOgorICAgICAgICBp
ZiBzZWxmLl9wcm9jOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiJXMgYWxyZWFkeSBy
dW5uaW5nIiAlIHNlbGYuX25hbWUpCisgICAgICAgIHNlbGYuX3Jlc2V0KCkKKyAgICAgICAgIyBj
bG9zZV9mZHMgaXMgYSB3b3JrYXJvdW5kIGZvciBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3Vl
MjMyMAorICAgICAgICBjbG9zZV9mZHMgPSBub3Qgc2VsZi5faG9zdC5wbGF0Zm9ybS5pc193aW4o
KQorICAgICAgICBzZWxmLl9wcm9jID0gc2VsZi5faG9zdC5leGVjdXRpdmUucG9wZW4oc2VsZi5f
Y21kLCBzdGRpbj1zZWxmLl9ob3N0LmV4ZWN1dGl2ZS5QSVBFLAorICAgICAgICAgICAgc3Rkb3V0
PXNlbGYuX2hvc3QuZXhlY3V0aXZlLlBJUEUsCisgICAgICAgICAgICBzdGRlcnI9c2VsZi5faG9z
dC5leGVjdXRpdmUuUElQRSwKKyAgICAgICAgICAgIGNsb3NlX2Zkcz1jbG9zZV9mZHMsCisgICAg
ICAgICAgICBlbnY9c2VsZi5fZW52LAorICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPXNl
bGYuX3VuaXZlcnNhbF9uZXdsaW5lcykKKyAgICAgICAgc2VsZi5fcGlkID0gc2VsZi5fcHJvYy5w
aWQKKyAgICAgICAgc2VsZi5fcG9ydC5maW5kX3N5c3RlbV9waWQoc2VsZi5uYW1lKCksIHNlbGYu
X3BpZCkKKyAgICAgICAgZmQgPSBzZWxmLl9wcm9jLnN0ZG91dC5maWxlbm8oKQorICAgICAgICBp
ZiBub3Qgc2VsZi5fdXNlX3dpbjMyX2FwaXM6CisgICAgICAgICAgICBmbCA9IGZjbnRsLmZjbnRs
KGZkLCBmY250bC5GX0dFVEZMKQorICAgICAgICAgICAgZmNudGwuZmNudGwoZmQsIGZjbnRsLkZf
U0VURkwsIGZsIHwgb3MuT19OT05CTE9DSykKKyAgICAgICAgICAgIGZkID0gc2VsZi5fcHJvYy5z
dGRlcnIuZmlsZW5vKCkKKyAgICAgICAgICAgIGZsID0gZmNudGwuZmNudGwoZmQsIGZjbnRsLkZf
R0VURkwpCisgICAgICAgICAgICBmY250bC5mY250bChmZCwgZmNudGwuRl9TRVRGTCwgZmwgfCBv
cy5PX05PTkJMT0NLKQorCisgICAgZGVmIF9oYW5kbGVfcG9zc2libGVfaW50ZXJydXB0KHNlbGYp
OgorICAgICAgICAiIiJUaGlzIHJvdXRpbmUgY2hlY2tzIHRvIHNlZSBpZiB0aGUgcHJvY2VzcyBj
cmFzaGVkIG9yIGV4aXRlZAorICAgICAgICBiZWNhdXNlIG9mIGEga2V5Ym9hcmQgaW50ZXJydXB0
IGFuZCByYWlzZXMgS2V5Ym9hcmRJbnRlcnJ1cHQKKyAgICAgICAgYWNjb3JkaW5nbHkuIiIiCisg
ICAgICAgICMgRklYTUU6IExpbnV4IGFuZCBNYWMgc2V0IHRoZSByZXR1cm5jb2RlIHRvIC1zaWdu
YWwuU0lHSU5UIGlmIGEKKyAgICAgICAgIyBzdWJwcm9jZXNzIGlzIGtpbGxlZCB3aXRoIGEgY3Ry
bF5DLiAgUHJldmlvdXMgY29tbWVudHMgaW4gdGhpcworICAgICAgICAjIHJvdXRpbmUgc2FpZCB0
aGF0IHN1cHBvc2VkbHkgV2luZG93cyByZXR1cm5zIDB4YzAwMDAwMWQsIGJ1dCB0aGF0J3Mgbm90
IHdoYXQKKyAgICAgICAgIyAtMTA3Mzc0MTUxMCBldmFsdWF0ZXMgdG8uIEZpZ3VyZSBvdXQgd2hh
dCB0aGUgcmlnaHQgdmFsdWUgaXMKKyAgICAgICAgIyBmb3Igd2luMzIgYW5kIGN5Z3dpbiBoZXJl
IC4uLgorICAgICAgICBpZiBzZWxmLl9wcm9jLnJldHVybmNvZGUgaW4gKC0xMDczNzQxNTEwLCAt
c2lnbmFsLlNJR0lOVCk6CisgICAgICAgICAgICByYWlzZSBLZXlib2FyZEludGVycnVwdAorCisg
ICAgZGVmIHBvbGwoc2VsZik6CisgICAgICAgICIiIkNoZWNrIHRvIHNlZSBpZiB0aGUgdW5kZXJs
eWluZyBwcm9jZXNzIGlzIHJ1bm5pbmc7IHJldHVybnMgTm9uZQorICAgICAgICBpZiBpdCBzdGls
bCBpcyAod3JhcHBlciBhcm91bmQgc3VicHJvY2Vzcy5wb2xsKS4iIiIKKyAgICAgICAgaWYgc2Vs
Zi5fcHJvYzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9wcm9jLnBvbGwoKQorICAgICAgICBy
ZXR1cm4gTm9uZQorCisgICAgZGVmIF93cml0ZShzZWxmLCBieXRlcyk6CisgICAgICAgIHNlbGYu
X3Byb2Muc3RkaW4ud3JpdGUoYnl0ZXMpCisKICAgICBkZWYgX3dhaXRfZm9yX2RhdGFfYW5kX3Vw
ZGF0ZV9idWZmZXJzX3VzaW5nX3NlbGVjdChzZWxmLCBkZWFkbGluZSwgc3RvcHBpbmc9RmFsc2Up
OgogICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZG91dC5jbG9zZWQgb3Igc2VsZi5fcHJvYy5zdGRl
cnIuY2xvc2VkOgogICAgICAgICAgICAgIyBJZiB0aGUgcHJvY2VzcyBjcmFzaGVkIGFuZCBpcyB1
c2luZyBGSUZPcywgbGlrZSBDaHJvbWl1bSBBbmRyb2lkLCB0aGUKQEAgLTMwMiw3NSArMzk4LDEx
IEBAIGNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToKICAgICAgICAgICAgICAgICByYWlzZQog
ICAgICAgICByZXR1cm4gTm9uZQogCi0gICAgZGVmIGhhc19jcmFzaGVkKHNlbGYpOgotICAgICAg
ICBpZiBub3Qgc2VsZi5fY3Jhc2hlZCBhbmQgc2VsZi5wb2xsKCk6Ci0gICAgICAgICAgICBfbG9n
LmRlYnVnKCdUaGlzIHRlc3QgbWFya2VkIGFzIGEgY3Jhc2ggYmVjYXVzZSBvZiBmYWlsdXJlIHRv
IHBvbGwgdGhlIHNlcnZlciBwcm9jZXNzLicpCi0gICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0g
VHJ1ZQotICAgICAgICAgICAgc2VsZi5faGFuZGxlX3Bvc3NpYmxlX2ludGVycnVwdCgpCi0gICAg
ICAgIHJldHVybiBzZWxmLl9jcmFzaGVkCi0KLSAgICAjIFRoaXMgcmVhZCBmdW5jdGlvbiBpcyBh
IGJpdCBvZGRseS1kZXNpZ25lZCwgYXMgaXQgcG9sbHMgYm90aCBzdGRvdXQgYW5kIHN0ZGVyciwg
eWV0Ci0gICAgIyBvbmx5IHJlYWRzL3JldHVybnMgZnJvbSBvbmUgb2YgdGhlbSAoYnVmZmVyaW5n
IGJvdGggaW4gbG9jYWwgc2VsZi5fb3V0cHV0L3NlbGYuX2Vycm9yKS4KLSAgICAjIEl0IG1pZ2h0
IGJlIGNsZWFuZXIgdG8gcGFzcyBpbiB0aGUgZmlsZSBkZXNjcmlwdG9yIHRvIHBvbGwgaW5zdGVh
ZC4KLSAgICBkZWYgX3JlYWQoc2VsZiwgZGVhZGxpbmUsIGZldGNoX2J5dGVzX2Zyb21fYnVmZmVy
c19jYWxsYmFjayk6Ci0gICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICBpZiBzZWxmLmhh
c19jcmFzaGVkKCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAgICAgICAg
aWYgdGltZS50aW1lKCkgPiBkZWFkbGluZToKLSAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVf
dGltZW91dCgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAgICAgICAgYnl0
ZXMgPSBmZXRjaF9ieXRlc19mcm9tX2J1ZmZlcnNfY2FsbGJhY2soKQotICAgICAgICAgICAgaWYg
Ynl0ZXMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJ5dGVzCi0KLSAgICAg
ICAgICAgIGlmIHNlbGYuX3VzZV93aW4zMl9hcGlzOgotICAgICAgICAgICAgICAgIHNlbGYuX3dh
aXRfZm9yX2RhdGFfYW5kX3VwZGF0ZV9idWZmZXJzX3VzaW5nX3dpbjMyX2FwaXMoZGVhZGxpbmUp
Ci0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRfZm9yX2RhdGFf
YW5kX3VwZGF0ZV9idWZmZXJzX3VzaW5nX3NlbGVjdChkZWFkbGluZSkKLQotICAgIGRlZiBzdGFy
dChzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuX3Byb2M6Ci0gICAgICAgICAgICBzZWxmLl9z
dGFydCgpCi0KLSAgICBkZWYgc3RvcChzZWxmLCB0aW1lb3V0X3NlY3M9My4wKToKLSAgICAgICAg
aWYgbm90IHNlbGYuX3Byb2M6Ci0gICAgICAgICAgICByZXR1cm4gKE5vbmUsIE5vbmUpCi0KLSAg
ICAgICAgIyBPbmx5IGJvdGhlciB0byBjaGVjayBmb3IgbGVha3Mgb3Igc3RkZXJyIGlmIHRoZSBw
cm9jZXNzIGlzIHN0aWxsIHJ1bm5pbmcuCi0gICAgICAgIGlmIHNlbGYucG9sbCgpIGlzIE5vbmU6
Ci0gICAgICAgICAgICBzZWxmLl9wb3J0LmNoZWNrX2Zvcl9sZWFrcyhzZWxmLm5hbWUoKSwgc2Vs
Zi5waWQoKSkKLQotICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQotICAgICAgICBpZiBzZWxmLl9w
cm9jLnN0ZGluOgotICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRpbi5jbG9zZSgpCi0gICAgICAg
ICAgICBzZWxmLl9wcm9jLnN0ZGluID0gTm9uZQotICAgICAgICBraWxsZWQgPSBGYWxzZQotICAg
ICAgICBpZiB0aW1lb3V0X3NlY3M6Ci0gICAgICAgICAgICBkZWFkbGluZSA9IG5vdyArIHRpbWVv
dXRfc2VjcwotICAgICAgICAgICAgd2hpbGUgc2VsZi5fcHJvYy5wb2xsKCkgaXMgTm9uZSBhbmQg
dGltZS50aW1lKCkgPCBkZWFkbGluZToKLSAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEp
Ci0gICAgICAgICAgICBpZiBzZWxmLl9wcm9jLnBvbGwoKSBpcyBOb25lOgotICAgICAgICAgICAg
ICAgIF9sb2cud2FybmluZygnc3RvcHBpbmcgJXMocGlkICVkKSB0aW1lZCBvdXQsIGtpbGxpbmcg
aXQnICUgKHNlbGYuX25hbWUsIHNlbGYuX3Byb2MucGlkKSkKLQotICAgICAgICBpZiBzZWxmLl9w
cm9jLnBvbGwoKSBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5fa2lsbCgpCi0gICAgICAgICAg
ICBraWxsZWQgPSBUcnVlCi0gICAgICAgICAgICBfbG9nLmRlYnVnKCdraWxsZWQgcGlkICVkJyAl
IHNlbGYuX3Byb2MucGlkKQotCi0gICAgICAgICMgcmVhZCBhbnkgcmVtYWluaW5nIGRhdGEgb24g
dGhlIHBpcGVzIGFuZCByZXR1cm4gaXQuCi0gICAgICAgIGlmIG5vdCBraWxsZWQ6Ci0gICAgICAg
ICAgICBpZiBzZWxmLl91c2Vfd2luMzJfYXBpczoKLSAgICAgICAgICAgICAgICBzZWxmLl93YWl0
X2Zvcl9kYXRhX2FuZF91cGRhdGVfYnVmZmVyc191c2luZ193aW4zMl9hcGlzKG5vdykKLSAgICAg
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5fd2FpdF9mb3JfZGF0YV9hbmRfdXBk
YXRlX2J1ZmZlcnNfdXNpbmdfc2VsZWN0KG5vdywgc3RvcHBpbmc9VHJ1ZSkKLSAgICAgICAgb3V0
LCBlcnIgPSBzZWxmLl9vdXRwdXQsIHNlbGYuX2Vycm9yCi0gICAgICAgIHNlbGYuX3Jlc2V0KCkK
LSAgICAgICAgcmV0dXJuIChvdXQsIGVycikKLQotICAgIGRlZiBraWxsKHNlbGYpOgotICAgICAg
ICBzZWxmLnN0b3AoMC4wKQorICAgIGRlZiBfZ3JhYkRhdGEoc2VsZiwgZGVhZGxpbmUpOgorICAg
ICAgICBpZiBzZWxmLl91c2Vfd2luMzJfYXBpczoKKyAgICAgICAgICAgIHNlbGYuX3dhaXRfZm9y
X2RhdGFfYW5kX3VwZGF0ZV9idWZmZXJzX3VzaW5nX3dpbjMyX2FwaXMoZGVhZGxpbmUpCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl93YWl0X2Zvcl9kYXRhX2FuZF91cGRhdGVfYnVm
ZmVyc191c2luZ19zZWxlY3QoZGVhZGxpbmUpCiAKICAgICBkZWYgX2tpbGwoc2VsZik6CiAgICAg
ICAgIHNlbGYuX2hvc3QuZXhlY3V0aXZlLmtpbGxfcHJvY2VzcyhzZWxmLl9wcm9jLnBpZCkKQEAg
LTM4NSwzICs0MTcsMTE5IEBAIGNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToKICAgICAgICAg
aWYgc3RkZXJyOgogICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRlcnIuY2xvc2UoKQogICAgICAg
ICAgICAgc2VsZi5fcHJvYy5zdGRlcnIgPSBzdGRlcnIKKworCitjbGFzcyBTaW11bGF0b3JQcm9j
ZXNzKFNlcnZlclByb2Nlc3NCYXNlKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X29i
aiwgbmFtZSwgY21kLCBlbnY9Tm9uZSwgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNlLCB0cmVhdF9u
b19kYXRhX2FzX2NyYXNoPUZhbHNlKToKKyAgICAgICAgc3VwZXIoU2ltdWxhdG9yUHJvY2Vzcywg
c2VsZikuX19pbml0X18ocG9ydF9vYmosIG5hbWUsIGNtZCwgZW52LCB1bml2ZXJzYWxfbmV3bGlu
ZXMsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2gpCisgICAgICAgIHNlbGYuX3N0ZGluID0gTm9uZQor
ICAgICAgICBzZWxmLl9zdGRvdXQgPSBOb25lCisgICAgICAgIHNlbGYuX3N0ZGVyciA9IE5vbmUK
KyAgICAgICAgc2VsZi5fcmVzZXQoKQorCisgICAgICAgIGZyb20gd2Via2l0cHkueGNvZGUuc2lt
dWxhdG9yIGltcG9ydCBTaW11bGF0b3IgICMgQXZvaWQgY2lyY3VsYXIgaW1wb3J0CisgICAgICAg
IHNlbGYuX3NpbXVsYXRvcl9tYW5hZ2VyID0gU2ltdWxhdG9yKHBvcnRfb2JqLmhvc3QpCisKKyAg
ICAgICAgc2VsZi5fYnVuZGxlSUQgPSBzZWxmLl9wb3J0LmV4dHJhY3RCdW5kbGVJRChzZWxmLl9j
bWRbMV0pCisgICAgICAgIHNlbGYuX2RldmljZSA9IHNlbGYuX3NpbXVsYXRvcl9tYW5hZ2VyLmZp
bmRfZGV2aWNlX2J5X3VkaWQoc2VsZi5fY21kWzBdKQorICAgICAgICBzZWxmLl9zaW11bGF0b3Jf
bWFuYWdlci5pbnN0YWxsKHNlbGYuX2RldmljZSwgc2VsZi5fY21kWzFdKQorICAgICAgICBzZWxm
Ll9lbnZbJ0lQQ19JREVOVElGSUVSJ10gPSBzZWxmLl9idW5kbGVJRCArICItIiArIHNlbGYuX2Rl
dmljZS51ZGlkCisKKyAgICBkZWYgX3Jlc2V0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9zdGRp
bjoKKyAgICAgICAgICAgIG9zLmNsb3NlKHNlbGYuX3N0ZGluKQorICAgICAgICBpZiBzZWxmLl9z
dGRvdXQ6CisgICAgICAgICAgICBvcy5jbG9zZShzZWxmLl9zdGRvdXQpCisgICAgICAgIGlmIHNl
bGYuX3N0ZGVycjoKKyAgICAgICAgICAgIG9zLmNsb3NlKHNlbGYuX3N0ZGVycikKKyAgICAgICAg
c2VsZi5fc3RkaW4gPSBOb25lCisgICAgICAgIHNlbGYuX3N0ZG91dCA9IE5vbmUKKyAgICAgICAg
c2VsZi5fc3RkZXJyID0gTm9uZQorICAgICAgICBzdXBlcihTaW11bGF0b3JQcm9jZXNzLCBzZWxm
KS5fcmVzZXQoKQorCisgICAgZGVmIF9fdW5saW5rX21ha2VfZmlmbyhzZWxmLCBwYXRoKToKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgb3MudW5saW5rKHBhdGgpCisgICAgICAgIGV4Y2VwdCBP
U0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRoKToKKyAgICAg
ICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJDb3VsZCBub3QgdW5saW5rICciICsgcGF0aCArICIn
LCB0aGUgdGFyZ2V0IHBhdGggaXMgYSBmaWxlIG5vdCBhIHBpcGUuIikKKyAgICAgICAgb3MubWtm
aWZvKHBhdGgsIDA2NjYpCisKKyAgICBkZWYgX3N0YXJ0KHNlbGYpOgorICAgICAgICBmaWxlX2xv
Y2F0aW9uID0gJy90bXAvJyArIHNlbGYuX2VudlsnSVBDX0lERU5USUZJRVInXQorICAgICAgICBp
bl9wYXRoID0gZmlsZV9sb2NhdGlvbiArICdfSU4nCisgICAgICAgIG91dF9wYXRoID0gZmlsZV9s
b2NhdGlvbiArICdfT1VUJworICAgICAgICBlcnJvcl9wYXRoID0gZmlsZV9sb2NhdGlvbiArICdf
RVJST1InCisKKyAgICAgICAgc2VsZi5fX3VubGlua19tYWtlX2ZpZm8oaW5fcGF0aCkKKyAgICAg
ICAgc2VsZi5fX3VubGlua19tYWtlX2ZpZm8ob3V0X3BhdGgpCisgICAgICAgIHNlbGYuX191bmxp
bmtfbWFrZV9maWZvKGVycm9yX3BhdGgpCisKKyAgICAgICAgc2VsZi5fcGlkID0gc2VsZi5fc2lt
dWxhdG9yX21hbmFnZXIucnVuKHNlbGYuX2RldmljZSwgc2VsZi5fYnVuZGxlSUQsIHNlbGYuX2Nt
ZFszOl0sIGVudj1zZWxmLl9lbnYpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5f
c3Rkb3V0ID0gb3Mub3BlbihvdXRfcGF0aCwgb3MuT19SRE9OTFkgfCBvcy5PX05PTkJMT0NLKQor
ICAgICAgICAgICAgc2VsZi5fc3RkZXJyID0gb3Mub3BlbihlcnJvcl9wYXRoLCBvcy5PX1JET05M
WSB8IG9zLk9fTk9OQkxPQ0spCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAg
ICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQorCisgICAgICAgIGRlYWRsaW5lID0gdGltZS50aW1l
KCkgKyAzCisgICAgICAgIHdoaWxlIG5vdCBzZWxmLl9zdGRpbiBhbmQgZGVhZGxpbmUgPiB0aW1l
LnRpbWUoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9zdGRpbiA9
IG9zLm9wZW4oaW5fcGF0aCwgb3MuT19XUk9OTFkgfCBvcy5PX05PTkJMT0NLKQorICAgICAgICAg
ICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGlm
IG5vdCBzZWxmLl9zdGRpbjoKKyAgICAgICAgICAgIHNlbGYuX2NyYXNoZWQgPSBUcnVlCisKKyAg
ICBkZWYgaXNfc3RhcnRlZChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fc3RkaW4gb3Igc2VsZi5f
c3Rkb3V0IG9yIHNlbGYuX3N0ZGVycjoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAg
IHJldHVybiBGYWxzZQorCisgICAgZGVmIHBvbGwoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxm
LmlzX3N0YXJ0ZWQoKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHRyeToKKyAg
ICAgICAgICAgIHRlbXAgPSBvcy5yZWFkKHNlbGYuX3N0ZGVyciwgMTI4KQorICAgICAgICAgICAg
aWYgdGVtcDoKKyAgICAgICAgICAgICAgICBzZWxmLl9lcnJvciArPSB0ZW1wCisgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGV4Y2VwdCBPU0Vy
cm9yIGFzIGU6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAg
IHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF93cml0ZShzZWxm
LCBieXRlcyk6CisgICAgICAgIGlmIHNlbGYuX3N0ZGluOgorICAgICAgICAgICAgb3Mud3JpdGUo
c2VsZi5fc3RkaW4sIGJ5dGVzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fY3Jh
c2hlZCA9IFRydWUKKworICAgIGRlZiBfZ3JhYkRhdGEoc2VsZiwgZGVhZGxpbmUpOgorICAgICAg
ICB0cnk6CisgICAgICAgICAgICB0ZW1wID0gb3MucmVhZChzZWxmLl9zdGRvdXQsIDEyOCkKKyAg
ICAgICAgICAgIGlmIHRlbXA6CisgICAgICAgICAgICAgICAgc2VsZi5fb3V0cHV0ICs9IHRlbXAK
KyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUK
KyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAg
ZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUKKyAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgdGVtcCA9IG9zLnJlYWQoc2VsZi5fc3RkZXJyLCAxMjgpCisgICAgICAgICAg
ICBpZiB0ZW1wOgorICAgICAgICAgICAgICAgIHNlbGYuX2Vycm9yICs9IHRlbXAKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUKKyAgICAgICAg
ZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0Ogor
ICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUKKworICAgIGRlZiBfa2lsbChzZWxmKToK
KyAgICAgICAgc2VsZi5fc2ltdWxhdG9yX21hbmFnZXIua2lsbChzZWxmLl9kZXZpY2UsIHNlbGYu
X2J1bmRsZUlEKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3Iu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3Iu
cHkJKHJldmlzaW9uIDIxMDI3NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUvc2lt
dWxhdG9yLnB5CSh3b3JraW5nIGNvcHkpCkBAIC02MTQsNiArNjE0LDI5IEBAIGNsYXNzIFNpbXVs
YXRvcihvYmplY3QpOgogICAgICAgICBhc3NlcnQodGVzdGluZ19kZXZpY2UuYXZhaWxhYmxlKQog
ICAgICAgICByZXR1cm4gdGVzdGluZ19kZXZpY2UKIAorICAgIGRlZiBpbnN0YWxsKHNlbGYsIGRl
dmljZSwgYXBwKToKKyAgICAgICAgaWYgc2VsZi5faG9zdC5leGVjdXRpdmUucnVuX2NvbW1hbmQo
Wyd4Y3J1bicsICdzaW1jdGwnLCAnaW5zdGFsbCcsIGRldmljZS51ZGlkLCBhcHBdLCByZXR1cm5f
ZXhpdF9jb2RlPVRydWUpID4gMDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBy
ZXR1cm4gVHJ1ZQorCisgICAgZGVmIHJ1bihzZWxmLCBkZXZpY2UsIGFwcF9pZCwgYXJncywgZW52
PU5vbmUpOgorICAgICAgICB0cmFuc2ZlcmVkRW52aXJvbm1lbnQgPSB7fQorICAgICAgICBpZiBl
bnY6CisgICAgICAgICAgICBmb3IgdmFsdWUgaW4gZW52OgorICAgICAgICAgICAgICAgIGlmIG5v
dCAiU0lNQ1RMX0NISUxEXyIgaW4gdmFsdWU6CisgICAgICAgICAgICAgICAgICAgIHRyYW5zZmVy
ZWRFbnZpcm9ubWVudFsnU0lNQ1RMX0NISUxEXycgKyB2YWx1ZV0gPSBlbnZbdmFsdWVdCisgICAg
ICAgICAgICAgICAgICAgIHRyYW5zZmVyZWRFbnZpcm9ubWVudFt2YWx1ZV0gPSBlbnZbdmFsdWVd
CisgICAgICAgIHN0ciA9IHNlbGYuX2hvc3QuZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsneGNydW4n
LCAnc2ltY3RsJywgJ2xhdW5jaCcsIGRldmljZS51ZGlkLCBhcHBfaWRdICsgYXJncywgZW52PXRy
YW5zZmVyZWRFbnZpcm9ubWVudCkKKyAgICAgICAgaWYgbm90IGFwcF9pZCBpbiBzdHI6CisgICAg
ICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBzdHIgPSBzdHIucnN0cmlwKCdcbicpLnNwbGl0
KClbMV0KKyAgICAgICAgcmV0dXJuIGludChzdHIpCisKKyAgICBkZWYga2lsbChzZWxmLCBkZXZp
Y2UsIGFwcF9pZCk6CisgICAgICAgIGlmIHNlbGYuX2hvc3QuZXhlY3V0aXZlLnJ1bl9jb21tYW5k
KFsneGNydW4nLCAnc2ltY3RsJywgJ3Rlcm1pbmF0ZScsIGRldmljZS51ZGlkLCBhcHBfaWRdLCBy
ZXR1cm5fZXhpdF9jb2RlPVRydWUpID4gMDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAg
ICAgICByZXR1cm4gVHJ1ZQorCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICByZXR1
cm4gJzxpT1MgU2ltdWxhdG9yOiB7bnVtX3J1bnRpbWVzfSBydW50aW1lcywge251bV9kZXZpY2Vf
dHlwZXN9IGRldmljZSB0eXBlcz4nLmZvcm1hdCgKICAgICAgICAgICAgIG51bV9ydW50aW1lcz1s
ZW4oc2VsZi5ydW50aW1lcyksCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298480</attachid>
            <date>2017-01-10 10:45:18 -0800</date>
            <delta_ts>2017-01-10 11:02:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165927-20170110104341.patch</filename>
            <type>text/plain</type>
            <size>178976</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMDU1MSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDExNSBAQAorMjAxNy0wMS0xMCAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5j
b20+CisKKyAgICAgICAgUmVtb3ZpbmcgTGF5b3V0VGVzdFJlbGF5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU5MjcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIExheW91dFRlc3RSZWxheTogUmVtb3Zl
ZCBMYXlvdXRUZXN0UmVsYXkuCisgICAgICAgICogTWFrZWZpbGU6IFJlbW92ZWQgTGF5b3V0VGVz
dFJlbGF5IHJlZmVyZW5jZXMuCisgICAgICAgICogU2NyaXB0cy9idWlsZC13ZWJraXQ6IFJlbW92
ZWQgTGF5b3V0VGVzdFJlbGF5IHJlZmVyZW5jZXMuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9wb3J0L2Jhc2UucHk6CisgICAgICAgIChQb3J0Ll9faW5pdF9fKTogQWRkZWQgX3Rlc3RfcnVu
bmVyX3Byb2Nlc3NfY29uc3RydWN0b3IuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0
L2Rhcndpbi5weToKKyAgICAgICAgKERhcndpblBvcnQuZXh0cmFjdF9idW5kbGVfSUQpOiBBZGRl
ZCBmdW5jdGlvbiB0byBleHRyYWN0IGJ1bmRsZSBJRCBmcm9tIHBsaXN0LgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHk6CisgICAgICAgIChEcml2ZXIuX3NldHVwX2Vu
dmlyb25fZm9yX2RyaXZlcik6IFN3YXBwZWQgX3NlcnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yIGZv
ciBfdGVzdF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3Rvci4KKyAgICAgICAgKElPU1NpbXVsYXRv
ckRyaXZlci5jbWRfbGluZSk6IFJlbW92ZWQgdW5uZWVkZWQgYXJndW1lbnRzLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChEcml2
ZXJUZXN0LnRlc3Rfc3RvcF9jbGVhbnNfdXBfcHJvcGVybHkpOiBTZXQgX3Rlc3RfcnVubmVyX3By
b2Nlc3NfY29uc3RydWN0b3IgZm9yIHRlc3RpbmcuCisgICAgICAgIChEcml2ZXJUZXN0LnRlc3Rf
dHdvX3N0YXJ0c19jbGVhbnNfdXBfcHJvcGVybHkpOiBEaXR0by4KKyAgICAgICAgKERyaXZlclRl
c3QudGVzdF9zdGFydF9hY3R1YWxseV9zdGFydHMpOiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3BvcnQvaW9zLnB5OgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydCk6IFJlbW92
ZSByZWxheV9uYW1lLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fX2luaXRfXyk6ICBTZXQg
X3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgZm9yIElPU1NpbXVsYXRvcnMuCisgICAg
ICAgIChJT1NTaW11bGF0b3JQb3J0LnJlbGF5X3BhdGgpOiBEZWxldGVkLgorICAgICAgICAoSU9T
U2ltdWxhdG9yUG9ydC5fY2hlY2tfcmVsYXkpOiBVc2UgYmFzZSBjbGFzcy4KKyAgICAgICAgKElP
U1NpbXVsYXRvclBvcnQuX2NoZWNrX3BvcnRfYnVpbGQpOiBEZWxldGVkLgorICAgICAgICAoSU9T
U2ltdWxhdG9yUG9ydC5fYnVpbGRfcmVsYXkpOiBEZWxldGVkLgorICAgICAgICAoSU9TU2ltdWxh
dG9yUG9ydC5fYnVpbGRfZHJpdmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L3BvcnQvaW9zX3VuaXR0ZXN0LnB5OgorICAgICAgICAoaW9zVGVzdC50ZXN0XzMyYml0KTog
VXBkYXRlIHRlc3QuCisgICAgICAgIChpb3NUZXN0LnRlc3RfNjRiaXQpOiBVcGRhdGUgdGVzdC4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3MucHk6CisgICAg
ICAgIChTZXJ2ZXJQcm9jZXNzKTogSW5oZXJpdCBmcm9tIFNlcnZlclByb2Nlc3NCYXNlLgorICAg
ICAgICAoU2VydmVyUHJvY2Vzcy5fX2luaXRfXyk6IE1vdmUgY29tbW9uIGNvZGUgdG8gU2VydmVy
UHJvY2Vzc0Jhc2UuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLmlzX3N0YXJ0ZWQpOiBDaGVjayB0
aGUgc2VsZi5fcHJvYyB2YXJpYWJsZS4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MuX3Jlc2V0KTog
TW92ZSBjb21tb24gY29kZSB0byBTZXJ2ZXJQcm9jZXNzQmFzZS4KKyAgICAgICAgKFNlcnZlclBy
b2Nlc3MuX3dyaXRlKTogV3JpdGUgdG8gc2VsZi5fcHJvYy4KKyAgICAgICAgKFNlcnZlclByb2Nl
c3MuX3dhaXRfZm9yX2RhdGFfYW5kX3VwZGF0ZV9idWZmZXJzKTogQ2hlY2sgYm90aCBzdGRvdXQg
YW5kIHN0ZGVyciBmb3IgZGF0YS4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MubmFtZSk6IE1vdmVk
IHRvIFNlcnZlclByb2Nlc3NCYXNlLgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5waWQpOiBEaXR0
by4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MucHJvY2Vzc19uYW1lKTogRGl0dG8uCisgICAgICAg
IChTZXJ2ZXJQcm9jZXNzLndyaXRlKTogRGl0dG8uCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLl9w
b3Bfc3Rkb3V0X2xpbmVfaWZfcmVhZHkpOiBEaXR0by4KKyAgICAgICAgKFNlcnZlclByb2Nlc3Mu
X3BvcF9zdGRlcnJfbGluZV9pZl9yZWFkeSk6IERpdHRvLgorICAgICAgICAoU2VydmVyUHJvY2Vz
cy5wb3BfYWxsX2J1ZmZlcmVkX3N0ZGVycik6IERpdHRvLgorICAgICAgICAoU2VydmVyUHJvY2Vz
cy5yZWFkX3N0ZG91dF9saW5lKTogRGl0dG8uCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLnJlYWRf
c3RkZXJyX2xpbmUpOiBEaXR0by4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MucmVhZF9laXRoZXJf
c3Rkb3V0X29yX3N0ZGVycl9saW5lKTogRGl0dG8uCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLnJl
YWRfZWl0aGVyX3N0ZG91dF9vcl9zdGRlcnJfbGluZS5yZXRyaWV2ZV9ieXRlc19mcm9tX2J1ZmZl
cnMpOiBEaXR0by4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MucmVhZF9zdGRvdXQpOiBEaXR0by4K
KyAgICAgICAgKFNlcnZlclByb2Nlc3MucmVhZF9zdGRvdXQucmV0cmlldmVfYnl0ZXNfZnJvbV9z
dGRvdXRfYnVmZmVyKTogRGl0dG8uCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLl9sb2cpOiBEaXR0
by4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MuX2hhbmRsZV90aW1lb3V0KTogRGl0dG8uCisgICAg
ICAgIChTZXJ2ZXJQcm9jZXNzLl9zcGxpdF9zdHJpbmdfYWZ0ZXJfaW5kZXgpOiBEaXR0by4KKyAg
ICAgICAgKFNlcnZlclByb2Nlc3MuX3BvcF9vdXRwdXRfYnl0ZXMpOiBEaXR0by4KKyAgICAgICAg
KFNlcnZlclByb2Nlc3MuX3BvcF9lcnJvcl9ieXRlcyk6IERpdHRvLgorICAgICAgICAoU2VydmVy
UHJvY2Vzcy5oYXNfY3Jhc2hlZCk6IERpdHRvLgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5fcmVh
ZCk6IERpdHRvLgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5zdGFydCk6IERpdHRvLgorICAgICAg
ICAoU2VydmVyUHJvY2Vzcy5zdG9wKTogRGl0dG8uCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLmtp
bGwpOiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nl
c3NfYmFzZS5weTogQWRkZWQuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzQmFzZSk6CisgICAgICAg
IChTZXJ2ZXJQcm9jZXNzQmFzZS5fX2luaXRfXyk6IFNldC11cCBTZXJ2ZXJQcm9jZXNzIGJhc2lj
cy4KKyAgICAgICAgKFNlcnZlclByb2Nlc3NCYXNlLmlzX3N0YXJ0ZWQpOiBUcnVlIGlmIHRoZSBw
aXBlIGlzIGRlZmluZWQuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzQmFzZS5fc3RhcnQpOiBCZWdp
biBydW5uaW5nIHRoZSBwcm9jZXNzLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2UucG9sbCk6
IENoZWNrIGlmIHRoZSBwcm9jZXNzIGlzIHJ1bm5pbmcuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNz
QmFzZS5fd3JpdGUpOiBTZW5kIGRhdGEgdG8gdGhlIHByb2Nlc3MuCisgICAgICAgIChTZXJ2ZXJQ
cm9jZXNzQmFzZS5fd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnMpOiBDaGVjayBib3Ro
IHN0ZG91dCBhbmQgc3RkZXJyIGZvciBkYXRhLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2Uu
X2tpbGwpOiBTaHV0IGRvd24gdGhlIHByb2Nlc3MuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzQmFz
ZS5faGFuZGxlX3Bvc3NpYmxlX2ludGVycnVwdCk6IENoZWNrIGZvciBrZXlib2FyZCBpbnRlcnJ1
cHRzLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2UubmFtZSk6IE1vdmVkIGZyb20gU2VydmVy
UHJvY2Vzcy4KKyAgICAgICAgKFNlcnZlclByb2Nlc3NCYXNlLnBpZCk6IERpdHRvLgorICAgICAg
ICAoU2VydmVyUHJvY2Vzc0Jhc2UuX3Jlc2V0KTogRGl0dG8uCisgICAgICAgIChTZXJ2ZXJQcm9j
ZXNzQmFzZS5wcm9jZXNzX25hbWUpOiBEaXR0by4KKyAgICAgICAgKFNlcnZlclByb2Nlc3NCYXNl
LndyaXRlKTogRGl0dG8uCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzQmFzZS5zdGFydCk6IERpdHRv
LgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2UuX3BvcF9zdGRvdXRfbGluZV9pZl9yZWFkeSk6
IERpdHRvLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2UuX3BvcF9zdGRlcnJfbGluZV9pZl9y
ZWFkeSk6IERpdHRvLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2UucG9wX2FsbF9idWZmZXJl
ZF9zdGRlcnIpOiBEaXR0by4KKyAgICAgICAgKFNlcnZlclByb2Nlc3NCYXNlLnJlYWRfc3Rkb3V0
X2xpbmUpOiBEaXR0by4KKyAgICAgICAgKFNlcnZlclByb2Nlc3NCYXNlLnJlYWRfc3RkZXJyX2xp
bmUpOiBEaXR0by4KKyAgICAgICAgKFNlcnZlclByb2Nlc3NCYXNlLnJlYWRfZWl0aGVyX3N0ZG91
dF9vcl9zdGRlcnJfbGluZSk6IERpdHRvLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2UucmVh
ZF9laXRoZXJfc3Rkb3V0X29yX3N0ZGVycl9saW5lLnJldHJpZXZlX2J5dGVzX2Zyb21fYnVmZmVy
cyk6IERpdHRvLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2UucmVhZF9zdGRvdXQpOiBEaXR0
by4KKyAgICAgICAgKFNlcnZlclByb2Nlc3NCYXNlLnJlYWRfc3Rkb3V0LnJldHJpZXZlX2J5dGVz
X2Zyb21fc3Rkb3V0X2J1ZmZlcik6IERpdHRvLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2Uu
X2xvZyk6IERpdHRvLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2UuX2hhbmRsZV90aW1lb3V0
KTogRGl0dG8uCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzQmFzZS5fc3BsaXRfc3RyaW5nX2FmdGVy
X2luZGV4KTogRGl0dG8uCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzQmFzZS5fcG9wX291dHB1dF9i
eXRlcyk6IERpdHRvLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2UuX3BvcF9lcnJvcl9ieXRl
cyk6IERpdHRvLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2UuaGFzX2NyYXNoZWQpOiBEaXR0
by4KKyAgICAgICAgKFNlcnZlclByb2Nlc3NCYXNlLl9yZWFkKTogRGl0dG8uCisgICAgICAgIChT
ZXJ2ZXJQcm9jZXNzQmFzZS5zdG9wKTogRGl0dG8uCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzQmFz
ZS5raWxsKTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRv
cl9wcm9jZXNzLnB5OiBBZGRlZC4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MpOgorICAgICAg
ICAoU2ltdWxhdG9yUHJvY2Vzcy5fX2luaXRfXyk6IEluc3RhbGwgYXBwIG9uIGRldmljZSwgc2V0
dXAgZW52aXJvbm1lbnQuCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNzLl9fdW5saW5rX2NoZWNr
X2V4aXN0cyk6IFVubGluayBmaWxlLCBvbmx5IHRocm93IGVycm9yIGlmIHRoZSBmaWxlIGV4aXN0
cyBhZnRlciB1bmxpbmsuCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNzLl9yZXNldCk6IFRlYXIg
ZG93biBmaWxlcy4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX3N0YXJ0KTogQ29uc3RydWN0
IGZpZm8sIGxhdW5jaCBhcHAuCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNzLmlzX3N0YXJ0ZWQp
OiBDaGVjayBpZiBhbnkgZmlmb3MgYXJlIGRlZmluZWQuCisgICAgICAgIChTaW11bGF0b3JQcm9j
ZXNzLnBvbGwpOiBDaGVjayBpZiBzdGRlcnIgaXMgYWxpdmUuCisgICAgICAgIChTaW11bGF0b3JQ
cm9jZXNzLl93cml0ZSk6IFdyaXRlIHRvIHN0ZGluIGZpZm8uCisgICAgICAgIChTaW11bGF0b3JQ
cm9jZXNzLl93YWl0X2Zvcl9kYXRhX2FuZF91cGRhdGVfYnVmZmVycyk6IEF0dGVtcHQgdG8gcHVs
bCBkYXRhIGZyb20gYm90aCBzdGRvdXQgYW5kIHN0ZGVyci4KKyAgICAgICAgKFNpbXVsYXRvclBy
b2Nlc3MuX2tpbGwpOiBTaHV0ZG93biBwcm9jZXNzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkveGNvZGUvc2ltdWxhdG9yLnB5OgorICAgICAgICAoU2ltdWxhdG9yLmluc3RhbGwpOiBJbnN0
YWxsIGFwcCBvbiBzaW11bGF0ZWQgZGV2aWNlLgorICAgICAgICAoU2ltdWxhdG9yLnJ1bik6IFJ1
biBhcHAgb24gZGV2aWNlLCB0cmFuc2ZlciBlbnZpcm9ubWVudCBkYXRhLgorICAgICAgICAoU2lt
dWxhdG9yLmtpbGwpOiBTaHV0ZG93biBhcHAgb24gc2ltdWxhdGVkIGRldmljZS4KKwogMjAxNy0w
MS0xMCAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgc3Zu
LWFwcGx5IGZhaWxlZCB0byBhcHBseSBhIHBhdGNoIChkZWxldGluZyBmaWxlIHdpdGggc3ZuIHBy
b3BlcnR5KQpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0Jhc2Uu
eGNjb25maWcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRp
b25zL0Jhc2UueGNjb25maWcJKHJldmlzaW9uIDIxMDU0OSkKKysrIFRvb2xzL0xheW91dFRlc3RS
ZWxheS9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCShub25leGlzdGVudCkKQEAgLTEsNjgg
KzAsMCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotLy8gYXJlIG1ldDoKLS8vIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0vLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0vLyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotLy8g
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLS8vIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0vLyBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLS8vIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0v
LyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLS8vIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLS8vIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotLy8gUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotLy8gT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlICIu
Li8uLi8uLi8uLi9JbnRlcm5hbC9Db25maWd1cmF0aW9ucy9IYXZlSW50ZXJuYWxTREsueGNjb25m
aWciCi0KLVVTRV9JTlRFUk5BTF9TREsgPSAkKFVTRV9JTlRFUk5BTF9TREtfJChDT05GSUdVUkFU
SU9OKSk7Ci1VU0VfSU5URVJOQUxfU0RLX1Byb2R1Y3Rpb24gPSBZRVM7Ci1VU0VfSU5URVJOQUxf
U0RLX0RlYnVnID0gJChIQVZFX0lOVEVSTkFMX1NESyk7Ci1VU0VfSU5URVJOQUxfU0RLX1JlbGVh
c2UgPSAkKEhBVkVfSU5URVJOQUxfU0RLKTsKLQotQ0xBTkdfQ1hYX0xBTkdVQUdFX1NUQU5EQVJE
ID0gZ251KysweDsKLUNMQU5HX0VOQUJMRV9PQkpDX0FSQyA9IFlFUzsKLUNMQU5HX1dBUk5fQ1hY
MFhfRVhURU5TSU9OUyA9IE5POwotSEVBREVSX1NFQVJDSF9QQVRIUyA9ICQoQlVJTFRfUFJPRFVD
VFNfRElSKS91c3IvbG9jYWwvaW5jbHVkZSAkKFdFQkNPUkVfUFJJVkFURV9IRUFERVJTX0RJUikv
Rm9yd2FyZGluZ0hlYWRlcnMgJChTUkNST09UKS8uLi8uLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aWN1ICQoTkVYVF9ST09UKS91c3IvbG9jYWwvaW5jbHVkZS9XZWJDb3JlVGVzdFN1cHBvcnQ7Ci1H
Q0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gJChERUJVR19ERUZJTkVTKSBFTkFCTEVfREFT
SEJPQVJEX1NVUFBPUlQ7Ci1ERUJVR19JTkZPUk1BVElPTl9GT1JNQVQgPSBkd2FyZi13aXRoLWRz
eW07Ci1QUkVCSU5ESU5HID0gTk8KLUdDQ19DX0xBTkdVQUdFX1NUQU5EQVJEID0gZ251OTkKLUdD
Q19FTkFCTEVfQ1BQX0VYQ0VQVElPTlMgPSBOTzsKLUdDQ19FTkFCTEVfQ1BQX1JUVEkgPSBOTzsK
LUdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFERVIgPSBZRVMKLUdDQ19UUkVBVF9XQVJOSU5HU19B
U19FUlJPUlMgPSBZRVMKLUdDQ19WRVJTSU9OID0gY29tLmFwcGxlLmNvbXBpbGVycy5sbHZtLmNs
YW5nLjFfMDsKLUdDQ19XQVJOX0FCT1VUX0RFUFJFQ0FURURfRlVOQ1RJT05TID0gTk8KLUdDQ19X
QVJOX1VOVVNFRF9GVU5DVElPTiA9IFlFUwotR0NDX1dBUk5fVU5VU0VEX1ZBUklBQkxFID0gWUVT
Ci1HQ0NfV0FSTl82NF9UT18zMl9CSVRfQ09OVkVSU0lPTlthcmNoPXg4Nl82NF0gPSBOTzsKLVdB
Uk5JTkdfQ0ZMQUdTID0gLVdhbGwgLVcgLVduby11bnVzZWQtcGFyYW1ldGVyIC1XdW5kZWYKLQot
REVCVUdfREVGSU5FU19kZWJ1ZyA9IDsKLURFQlVHX0RFRklORVNfbm9ybWFsID0gTkRFQlVHOwot
REVCVUdfREVGSU5FUyA9ICQoREVCVUdfREVGSU5FU18kKENVUlJFTlRfVkFSSUFOVCkpOwotCi1U
QVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUiA9ICQoVEFSR0VUX01BQ19PU19YX1ZFUlNJT05f
TUFKT1IkKE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVDpzdWZmaXg6aWRlbnRpZmllcikpOwotVEFS
R0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1JfMTAgPSAxMDEwMDA7Ci1UQVJHRVRfTUFDX09TX1hf
VkVSU0lPTl9NQUpPUl8xMSA9IDEwMTEwMDsKLVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9S
XzEyID0gMTAxMjAwOwotVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1JfMTMgPSAxMDEzMDA7
Ci0KLVNES1JPT1QgPSBtYWNvc3guaW50ZXJuYWw7Ci0KLVNVUFBPUlRFRF9QTEFURk9STVMgPSBt
YWNvc3g7Ci0KLVRPT0xDSEFJTlMgPSBkZWZhdWx0OwotCi1PVEhFUl9DRkxBR1MgPSAkKEFTQU5f
T1RIRVJfQ0ZMQUdTKTsKLU9USEVSX0NQTFVTUExVU0ZMQUdTID0gJChBU0FOX09USEVSX0NQTFVT
UExVU0ZMQUdTKTsKLU9USEVSX0xERkxBR1MgPSAkKEFTQU5fT1RIRVJfTERGTEFHUyk7CkluZGV4
OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMvRGVidWdSZWxlYXNlLnhjY29u
ZmlnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9E
ZWJ1Z1JlbGVhc2UueGNjb25maWcJKHJldmlzaW9uIDIxMDU0OSkKKysrIFRvb2xzL0xheW91dFRl
c3RSZWxheS9Db25maWd1cmF0aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25maWcJKG5vbmV4aXN0ZW50
KQpAQCAtMSw0MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0vLyBhcmUg
bWV0OgotLy8gMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0vLyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotLy8gRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS8vIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotLy8gUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLS8vIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotLy8gRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotLy8gUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0v
LyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0vLyBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQot
I2luY2x1ZGUgIkJhc2UueGNjb25maWciCi0KLUFSQ0hTID0gJChBUkNIU19TVEFOREFSRF82NF9C
SVQpOwotCi1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUiA9ICQoTUFDX09TX1hfVkVSU0lP
Tl9NQUpPUik7Ci0KLU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCA9ICQoTUFDT1NYX0RFUExPWU1F
TlRfVEFSR0VUXyQoVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1IpKQotTUFDT1NYX0RFUExP
WU1FTlRfVEFSR0VUXzEwMTAwMCA9IDEwLjEwOwotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEw
MTEwMCA9IDEwLjExOwotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEwMTIwMCA9IDEwLjEyOwot
TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEwMTMwMCA9IDEwLjEzOwotCi1GUkFNRVdPUktfU0VB
UkNIX1BBVEhTID0gJChERVZFTE9QRVJfRElSKS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzOwot
TERfUlVOUEFUSF9TRUFSQ0hfUEFUSFMgPSAkKERFVkVMT1BFUl9ESVIpL0xpYnJhcnkvUHJpdmF0
ZUZyYW1ld29ya3M7Ci1PVEhFUl9MREZMQUdTID0gLWZyYW1ld29yayBDb3JlU2ltdWxhdG9yIC1m
cmFtZXdvcmsgQXBwS2l0OwotCi1TREtST09UID0gJChTREtST09UX21hY29zeF8kKFVTRV9JTlRF
Uk5BTF9TREspKTsKLVNES1JPT1RfbWFjb3N4XyA9IG1hY29zeDsKLVNES1JPT1RfbWFjb3N4X1lF
UyA9IG1hY29zeC5pbnRlcm5hbDsKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRU
ZXN0UmVsYXkvQ29yZVNpbXVsYXRvclNQSS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRl
c3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvQ29yZVNpbXVsYXRvclNQSS5oCShyZXZpc2lvbiAyMTA1
NDkpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0NvcmVTaW11bGF0
b3JTUEkuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWYgX19oYXNfaW5jbHVkZSg8Q29yZVNpbXVsYXRvci9Db3JlU2ltdWxhdG9yLmg+KQotCi0v
KiBGSVhNRTogUmVtb3ZlIHRoZSBiZWxvdyAjZGVmaW5lIG9uY2Ugd2UgcmVxdWlyZSBYY29kZSA3
LjMgd2l0aCBpT1MgOS4zIFNESyBvciBuZXdlci4gKi8KLSNkZWZpbmUgX19jb3Jlc2ltX3VuYXZh
aWxhYmxlX21zZyhtc2cpCi0jaW1wb3J0IDxDb3JlU2ltdWxhdG9yL0NvcmVTaW11bGF0b3IuaD4K
LQotLyogRklYTUU6IEFsd2F5cyB1c2UgU2ltU2VydmljZUNvbnRleHQgb25jZSB3ZSByZXF1aXJl
IFhjb2RlIDcuMyB3aXRoIGlPUyA5LjMgU0RLIG9yIG5ld2VyLiAqLwotI2RlZmluZSBVU0VfU0lN
X1NFUlZJQ0VfQ09OVEVYVCBkZWZpbmVkKENPUkVTSU1fQVBJX01BWF9BTExPV0VEKQotCi0jZWxz
ZQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2RlZmluZSBVU0VfU0lN
X1NFUlZJQ0VfQ09OVEVYVCAxCi0KLSNkZWZpbmUga1NpbURldmljZUxhdW5jaEFwcGxpY2F0aW9u
QXJndW1lbnRzIEAiYXJndW1lbnRzIgotI2RlZmluZSBrU2ltRGV2aWNlTGF1bmNoQXBwbGljYXRp
b25FbnZpcm9ubWVudCBAImVudmlyb25tZW50IgotCi1AaW50ZXJmYWNlIFNpbURldmljZSA6IE5T
T2JqZWN0Ci0tIChCT09MKWluc3RhbGxBcHBsaWNhdGlvbjooTlNVUkwgKilpbnN0YWxsVVJMIHdp
dGhPcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zIGVycm9yOihOU0Vycm9yICogX19hdXRv
cmVsZWFzaW5nICopZXJyb3I7Ci0tIChwaWRfdClsYXVuY2hBcHBsaWNhdGlvbldpdGhJRDooTlNT
dHJpbmcgKilidW5kbGVJRCBvcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zIGVycm9yOihO
U0Vycm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgU2lt
RGV2aWNlU2V0IDogTlNPYmplY3QKLUBwcm9wZXJ0eSAocmVhZG9ubHksIGNvcHkpIE5TRGljdGlv
bmFyeSAqZGV2aWNlc0J5VURJRDsKLUBlbmQKLQotQGludGVyZmFjZSBTaW1TZXJ2aWNlQ29udGV4
dCA6IE5TT2JqZWN0Ci0rKFNpbVNlcnZpY2VDb250ZXh0ICopc2hhcmVkU2VydmljZUNvbnRleHRG
b3JEZXZlbG9wZXJEaXI6KE5TU3RyaW5nICopZGV2ZWxvcGVyRGlyIGVycm9yOihOU0Vycm9yICog
X19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci0tKFNpbURldmljZVNldCAqKWRlZmF1bHREZXZpY2VT
ZXRXaXRoRXJyb3I6KE5TRXJyb3IgKiBfX2F1dG9yZWxlYXNpbmcgKillcnJvcjsKLUBlbmQKLQot
I2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlw
ZVJlbGF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RS
ZWxheS9MVFBpcGVSZWxheS5oCShyZXZpc2lvbiAyMTA1NDkpCisrKyBUb29scy9MYXlvdXRUZXN0
UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwz
NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBMVFBpcGVSZWxheV9oCi0jZGVmaW5lIExU
UGlwZVJlbGF5X2gKLQotI2ltcG9ydCAiTFRSZWxheS5oIgotCi1AaW50ZXJmYWNlIExUUGlwZVJl
bGF5IDogTlNPYmplY3QgPExUUmVsYXk+Ci1AcHJvcGVydHkgKHdlYWspIGlkPExUUmVsYXlEZWxl
Z2F0ZT4gcmVsYXlEZWxlZ2F0ZTsKLS0gKGlkKWluaXRXaXRoUHJlZml4OihOU1N0cmluZyAqKXBy
ZWZpeDsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0
VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJl
bGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5tCShyZXZpc2lvbiAyMTA1NDkpCisrKyBU
b29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0JKG5vbmV4
aXN0ZW50KQpAQCAtMSwxNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgIkxUUGlwZVJl
bGF5LmgiCi0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotI2luY2x1ZGUgPHN5
cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLUBpbnRlcmZhY2UgTFRQaXBlUmVs
YXkgKCkKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKmZpZm9QcmVmaXg7
Ci1AcHJvcGVydHkgKHN0cm9uZykgTlNPdXRwdXRTdHJlYW0gKnN0YW5kYXJkSW5wdXRQaXBlOwot
QHByb3BlcnR5IChzdHJvbmcpIE5TSW5wdXRTdHJlYW0gKnN0YW5kYXJkT3V0cHV0UGlwZTsKLUBw
cm9wZXJ0eSAoc3Ryb25nKSBOU0lucHV0U3RyZWFtICpzdGFuZGFyZEVycm9yUGlwZTsKLQotLSAo
dm9pZCljcmVhdGVGSUZPczsKLS0gKHZvaWQpZGVzdHJveUZJRk9zOwotQGVuZAotCi1AaW1wbGVt
ZW50YXRpb24gTFRQaXBlUmVsYXkKLQotLSAoTlNTdHJpbmcgKilpblBpcGVQYXRoCi17Ci0gICAg
cmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9JTiJdOwotfQot
Ci0tIChOU1N0cmluZyAqKW91dFBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBz
dHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9PVVQiXTsKLX0KLQotLSAoTlNTdHJpbmcgKillcnJv
clBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0
cmluZzpAIl9FUlJPUiJdOwotfQotCi0tIChOU091dHB1dFN0cmVhbSAqKSBvdXRwdXRTdHJlYW0K
LXsKLSAgICByZXR1cm4gX3N0YW5kYXJkSW5wdXRQaXBlOwotfQotCi0tIChpZClpbml0V2l0aFBy
ZWZpeDooTlNTdHJpbmcgKilwcmVmaXgKLXsKLSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0p
KSB7Ci0gICAgICAgIF9maWZvUHJlZml4ID0gcHJlZml4OwotICAgICAgICBbc2VsZiBkZXN0cm95
RklGT3NdOwotICAgIH0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXR1cAotewot
ICAgIFtzZWxmIGRlc3Ryb3lGSUZPc107Ci0gICAgW3NlbGYgY3JlYXRlRklGT3NdOwotfQotCi0t
ICh2b2lkKXRlYXJEb3duCi17Ci0gICAgW3NlbGYgZGVzdHJveUZJRk9zXTsKLX0KLQotLSh2b2lk
KSBjb25uZWN0Ci17Ci0gICAgX3N0YW5kYXJkSW5wdXRQaXBlID0gW05TT3V0cHV0U3RyZWFtIG91
dHB1dFN0cmVhbVRvRmlsZUF0UGF0aDpbc2VsZiBpblBpcGVQYXRoXSBhcHBlbmQ6WUVTXTsKLSAg
ICBfc3RhbmRhcmRPdXRwdXRQaXBlID0gW05TSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW1XaXRoRmls
ZUF0UGF0aDpbc2VsZiBvdXRQaXBlUGF0aF1dOwotICAgIF9zdGFuZGFyZEVycm9yUGlwZSA9IFtO
U0lucHV0U3RyZWFtIGlucHV0U3RyZWFtV2l0aEZpbGVBdFBhdGg6W3NlbGYgZXJyb3JQaXBlUGF0
aF1dOwotCi0gICAgW1tzZWxmIHN0YW5kYXJkSW5wdXRQaXBlXSBzZXREZWxlZ2F0ZTpzZWxmXTsK
LSAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRQaXBlXSBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICBb
W3NlbGYgc3RhbmRhcmRFcnJvclBpcGVdIHNldERlbGVnYXRlOnNlbGZdOwotCi0gICAgW1tzZWxm
IHN0YW5kYXJkT3V0cHV0UGlwZV0gc2NoZWR1bGVJblJ1bkxvb3A6W05TUnVuTG9vcCBtYWluUnVu
TG9vcF0gZm9yTW9kZTpOU0RlZmF1bHRSdW5Mb29wTW9kZV07Ci0gICAgW1tzZWxmIHN0YW5kYXJk
RXJyb3JQaXBlXSBzY2hlZHVsZUluUnVuTG9vcDpbTlNSdW5Mb29wIG1haW5SdW5Mb29wXSBmb3JN
b2RlOk5TRGVmYXVsdFJ1bkxvb3BNb2RlXTsKLQotICAgIFtbc2VsZiBzdGFuZGFyZElucHV0UGlw
ZV0gb3Blbl07Ci0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gb3Blbl07Ci0gICAgW1tz
ZWxmIHN0YW5kYXJkRXJyb3JQaXBlXSBvcGVuXTsKLQotICAgIFtbc2VsZiByZWxheURlbGVnYXRl
XSBkaWRDb25uZWN0XTsKLX0KLQotLSAodm9pZClkaXNjb25uZWN0Ci17Ci0gICAgW1tzZWxmIHN0
YW5kYXJkT3V0cHV0UGlwZV0gY2xvc2VdOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yUGlwZV0g
Y2xvc2VdOwotICAgIFtbc2VsZiBzdGFuZGFyZElucHV0UGlwZV0gY2xvc2VdOwotICAgIFtbc2Vs
ZiByZWxheURlbGVnYXRlXSBkaWREaXNjb25uZWN0XTsKLX0KLQotLSAodm9pZCljcmVhdGVGSUZP
cwotewotICAgIG1rZmlmbyhbW3NlbGYgaW5QaXBlUGF0aF0gVVRGOFN0cmluZ10sIDA2NjYpOwot
ICAgIG1rZmlmbyhbW3NlbGYgb3V0UGlwZVBhdGhdIFVURjhTdHJpbmddLCAwNjY2KTsKLSAgICBt
a2ZpZm8oW1tzZWxmIGVycm9yUGlwZVBhdGhdIFVURjhTdHJpbmddLCAwNjY2KTsKLX0KLQotLSAo
dm9pZClkZXN0cm95RklGT3MKLXsKLSAgICB1bmxpbmsoW1tzZWxmIGluUGlwZVBhdGhdIFVURjhT
dHJpbmddKTsKLSAgICB1bmxpbmsoW1tzZWxmIG91dFBpcGVQYXRoXSBVVEY4U3RyaW5nXSk7Ci0g
ICAgdW5saW5rKFtbc2VsZiBlcnJvclBpcGVQYXRoXSBVVEY4U3RyaW5nXSk7Ci19Ci0KLS0gKHZv
aWQpIHJlbGF5U3RyZWFtOihOU0lucHV0U3RyZWFtICopc3RyZWFtCi17Ci0gICAgdWludDhfdCBi
eXRlc1sxMDI0XTsKLSAgICBOU0ludGVnZXIgYnl0ZXNSZWFkID0gW3N0cmVhbSByZWFkOmJ5dGVz
IG1heExlbmd0aDoxMDI0XTsKLSAgICBOU0RhdGEgKmRhdGEgPSBbTlNEYXRhIGRhdGFXaXRoQnl0
ZXM6Ynl0ZXMgbGVuZ3RoOmJ5dGVzUmVhZF07Ci0KLSAgICBpZiAoc3RyZWFtID09IFtzZWxmIHN0
YW5kYXJkT3V0cHV0UGlwZV0pCi0gICAgICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRSZWNl
aXZlU3Rkb3V0RGF0YTpkYXRhXTsKLSAgICBlbHNlCi0gICAgICAgIFtbc2VsZiByZWxheURlbGVn
YXRlXSBkaWRSZWNlaXZlU3RkZXJyRGF0YTpkYXRhXTsKLX0KLQotLSAodm9pZClzdHJlYW06KE5T
U3RyZWFtICopYVN0cmVhbSBoYW5kbGVFdmVudDooTlNTdHJlYW1FdmVudClldmVudENvZGUKLXsK
LSAgICBzd2l0Y2ggKGV2ZW50Q29kZSkgewotICAgIGNhc2UgTlNTdHJlYW1FdmVudE5vbmU6Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlNTdHJlYW1FdmVudEhhc0J5dGVzQXZhaWxhYmxlOgot
ICAgICAgICBbc2VsZiByZWxheVN0cmVhbTooTlNJbnB1dFN0cmVhbSAqKWFTdHJlYW1dOwotICAg
IGNhc2UgTlNTdHJlYW1FdmVudEhhc1NwYWNlQXZhaWxhYmxlOgotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIE5TU3RyZWFtRXZlbnRPcGVuQ29tcGxldGVkOgotICAgICAgICBicmVhazsKLSAgICBj
YXNlIE5TU3RyZWFtRXZlbnRFbmRFbmNvdW50ZXJlZDoKLSAgICAgICAgW1tzZWxmIHJlbGF5RGVs
ZWdhdGVdIGRpZENyYXNoV2l0aE1lc3NhZ2U6bmlsXTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBOU1N0cmVhbUV2ZW50RXJyb3JPY2N1cnJlZDoKLSAgICAgICAgW1tzZWxmIHJlbGF5RGVsZWdh
dGVdIGRpZENyYXNoV2l0aE1lc3NhZ2U6W1thU3RyZWFtIHN0cmVhbUVycm9yXSBkZXNjcmlwdGlv
bl1dOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLUBlbmQKSW5kZXg6IFRvb2xzL0xheW91
dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheS5oCShyZXZpc2lvbiAyMTA1
NDkpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXkuaAko
bm9uZXhpc3RlbnQpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIExUUmVs
YXlfaAotI2RlZmluZSBMVFJlbGF5X2gKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+Ci0KLUBwcm90b2NvbCBMVFJlbGF5RGVsZWdhdGUgPE5TT2JqZWN0PgotLSAodm9pZClkaWRD
b25uZWN0OwotLSAodm9pZClkaWREaXNjb25uZWN0OwotLSAodm9pZClkaWRDcmFzaFdpdGhNZXNz
YWdlOihOU1N0cmluZyAqKW1lc3NhZ2U7Ci0tICh2b2lkKWRpZFJlY2VpdmVTdGRvdXREYXRhOihO
U0RhdGEgKilkYXRhOwotLSAodm9pZClkaWRSZWNlaXZlU3RkZXJyRGF0YTooTlNEYXRhICopZGF0
YTsKLUBlbmQKLQotQHByb3RvY29sIExUUmVsYXkgPE5TT2JqZWN0LCBOU1N0cmVhbURlbGVnYXRl
PgotLSAodm9pZClzZXR1cDsKLS0gKHZvaWQpdGVhckRvd247Ci0tICh2b2lkKWNvbm5lY3Q7Ci0t
ICh2b2lkKWRpc2Nvbm5lY3Q7Ci1AcHJvcGVydHkgKHdlYWspIGlkPExUUmVsYXlEZWxlZ2F0ZT4g
cmVsYXlEZWxlZ2F0ZTsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNPdXRwdXRTdHJl
YW0gKm91dHB1dFN0cmVhbTsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRUZXN0
UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5o
CShyZXZpc2lvbiAyMTA1NDkpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJl
bGF5L0xUUmVsYXlDb250cm9sbGVyLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLSNpZm5kZWYgTFRSZWxheUNvbnRyb2xsZXJfaAotI2RlZmluZSBMVFJlbGF5Q29u
dHJvbGxlcl9oCi0KLSNpbXBvcnQgIkxUUmVsYXkuaCIKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9G
b3VuZGF0aW9uLmg+Ci0KLUBjbGFzcyBTaW1EZXZpY2U7Ci0KLUBpbnRlcmZhY2UgTFRSZWxheUNv
bnRyb2xsZXIgOiBOU09iamVjdCA8TFRSZWxheURlbGVnYXRlPgotLSAoaWQpaW5pdFdpdGhEZXZp
Y2U6KFNpbURldmljZSAqKWRldmljZSBwcm9kdWN0RGlyOihOU1N0cmluZyAqKXByb2R1Y3REaXIg
YXBwUGF0aDooTlNTdHJpbmcgKilhcHBQYXRoIGRldmljZVVESUQ6KE5TVVVJRCAqKXVkaWQgZHVt
cFRvb2xBcmd1bWVudHM6KE5TQXJyYXkgKilhcmd1bWVudHM7Ci0tICh2b2lkKXN0YXJ0OwotLSAo
dm9pZClmaW5pc2g7Ci1AZW5kCi0KLSNlbmRpZgpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5
L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIubQkocmV2
aXNpb24gMjEwNTQ5KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9M
VFJlbGF5Q29udHJvbGxlci5tCShub25leGlzdGVudCkKQEAgLTEsMjcyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW1wb3J0ICJMVFJlbGF5Q29udHJvbGxlci5oIgotCi0jaW1wb3J0ICJDb3JlU2lt
dWxhdG9yU1BJLmgiCi0jaW1wb3J0ICJMVFBpcGVSZWxheS5oIgotI2ltcG9ydCA8QXBwS2l0L0Fw
cEtpdC5oPgotI2ltcG9ydCA8Y3J0X2V4dGVybnMuaD4KLQotQGludGVyZmFjZSBMVFJlbGF5Q29u
dHJvbGxlciAoKQotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBkaXNwYXRjaF9zb3VyY2Vf
dCBzdGFuZGFyZElucHV0RGlzcGF0Y2hTb3VyY2U7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJv
bmcpIE5TRmlsZUhhbmRsZSAqc3RhbmRhcmRPdXRwdXQ7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBz
dHJvbmcpIE5TRmlsZUhhbmRsZSAqc3RhbmRhcmRFcnJvcjsKLUBwcm9wZXJ0eSAocmVhZG9ubHks
IHN0cm9uZykgTlNTdHJpbmcgKmlwY0lkZW50aWZpZXI7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBz
dHJvbmcpIE5TU3RyaW5nICphcHBCdW5kbGVJZGVudGlmaWVyOwotQHByb3BlcnR5IChyZWFkb25s
eSwgc3Ryb25nKSBOU1N0cmluZyAqYXBwUGF0aDsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9u
ZykgTlNVVUlEICpkZXZpY2VVRElEOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU0Fy
cmF5ICpkdW1wVG9vbEFyZ3VtZW50czsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNT
dHJpbmcgKnByb2R1Y3REaXI7Ci1AcHJvcGVydHkgKHN0cm9uZykgU2ltRGV2aWNlICpkZXZpY2U7
Ci1AcHJvcGVydHkgKHN0cm9uZykgaWQ8TFRSZWxheT4gcmVsYXk7Ci1AcHJvcGVydHkgcGlkX3Qg
cGlkOwotQHByb3BlcnR5IChzdHJvbmcpIGRpc3BhdGNoX3NvdXJjZV90IGFwcERpc3BhdGNoU291
cmNlOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gTFRSZWxheUNvbnRyb2xsZXIKLQotLSAoaWQp
aW5pdFdpdGhEZXZpY2U6KFNpbURldmljZSAqKWRldmljZSBwcm9kdWN0RGlyOihOU1N0cmluZyAq
KXByb2R1Y3REaXIgYXBwUGF0aDooTlNTdHJpbmcgKilhcHBQYXRoIGRldmljZVVESUQ6KE5TVVVJ
RCAqKXVkaWQgZHVtcFRvb2xBcmd1bWVudHM6KE5TQXJyYXkgKilhcmd1bWVudHMKLXsKLSAgICBp
ZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKSB7Ci0gICAgICAgIF9kZXZpY2UgPSBkZXZpY2U7Ci0g
ICAgICAgIF9wcm9kdWN0RGlyID0gcHJvZHVjdERpcjsKLSAgICAgICAgX2FwcFBhdGggPSBhcHBQ
YXRoOwotICAgICAgICBfYXBwQnVuZGxlSWRlbnRpZmllciA9IFtbTlNCdW5kbGUgYnVuZGxlV2l0
aFBhdGg6YXBwUGF0aF0gYnVuZGxlSWRlbnRpZmllcl07Ci0gICAgICAgIF9kZXZpY2VVRElEID0g
dWRpZDsKLSAgICAgICAgX2R1bXBUb29sQXJndW1lbnRzID0gYXJndW1lbnRzOwotICAgICAgICBf
c3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNlID0gZGlzcGF0Y2hfc291cmNlX2NyZWF0ZShESVNQ
QVRDSF9TT1VSQ0VfVFlQRV9SRUFELCBTVERJTl9GSUxFTk8sIDAsIGRpc3BhdGNoX2dldF9tYWlu
X3F1ZXVlKCkpOwotICAgICAgICBfc3RhbmRhcmRPdXRwdXQgPSBbTlNGaWxlSGFuZGxlIGZpbGVI
YW5kbGVXaXRoU3RhbmRhcmRPdXRwdXRdOwotICAgICAgICBfc3RhbmRhcmRFcnJvciA9IFtOU0Zp
bGVIYW5kbGUgZmlsZUhhbmRsZVdpdGhTdGFuZGFyZEVycm9yXTsKLQotICAgICAgICBkaXNwYXRj
aF9zb3VyY2Vfc2V0X2V2ZW50X2hhbmRsZXIoX3N0YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJjZSwg
XnsKLSAgICAgICAgICAgIHVpbnQ4X3QgYnVmZmVyWzEwMjRdOwotICAgICAgICAgICAgc3NpemVf
dCBsZW4gPSByZWFkKFNURElOX0ZJTEVOTywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7Ci0gICAg
ICAgICAgICBpZiAobGVuID4gMCkgewotICAgICAgICAgICAgICAgIEB0cnkgewotICAgICAgICAg
ICAgICAgICAgICBbW1tzZWxmIHJlbGF5XSBvdXRwdXRTdHJlYW1dIHdyaXRlOmJ1ZmZlciBtYXhM
ZW5ndGg6bGVuXTsKLSAgICAgICAgICAgICAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24gKmUpIHsK
LSAgICAgICAgICAgICAgICAgICAgLy8gQnJva2VuIHBpcGUgLSB0aGUgZHVtcCB0b29sIGNyYXNo
ZWQuIFRpbWUgdG8gZGllLgotICAgICAgICAgICAgICAgICAgICBbc2VsZiBkaWRDcmFzaFdpdGhN
ZXNzYWdlOm5pbF07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAvLyBFT0YgUmVjZWl2ZWQgb24gdGhlIHJlbGF5J3Mgc3RhbmRhcmQgaW5w
dXQuCi0gICAgICAgICAgICAgICAgW3NlbGYgZmluaXNoXTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSk7Ci0KLSAgICAgICAgX3JlbGF5ID0gW1tMVFBpcGVSZWxheSBhbGxvY10gaW5pdFdpdGhQ
cmVmaXg6W0AiL3RtcCIgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OnNlbGYuaXBjSWRl
bnRpZmllcl1dOwotICAgICAgICBbX3JlbGF5IHNldFJlbGF5RGVsZWdhdGU6c2VsZl07Ci0gICAg
fQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChOU1N0cmluZyAqKWlwY0lkZW50aWZpZXIKLXsK
LSAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQC0lQCIsIHNlbGYuYXBw
QnVuZGxlSWRlbnRpZmllciwgc2VsZi5kZXZpY2VVRElELlVVSURTdHJpbmddOwotfQotCi0tIChO
U1N0cmluZyAqKXByb2Nlc3NOYW1lCi17Ci0gICAgcmV0dXJuIFtzZWxmLmFwcEJ1bmRsZUlkZW50
aWZpZXIgY29tcG9uZW50c1NlcGFyYXRlZEJ5U3RyaW5nOkAiLiJdLmxhc3RPYmplY3Q7Ci19Ci0K
LS0gKHZvaWQpZGlkUmVjZWl2ZVN0ZG91dERhdGE6KE5TRGF0YSAqKWRhdGEKLXsKLSAgICBAdHJ5
IHsKLSAgICAgICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0XSB3cml0ZURhdGE6ZGF0YV07Ci0gICAg
fSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRpb24pIHsKLSAgICAgICAgLy8gTlNGaWxlSGFu
ZGxlT3BlcmF0aW9uRXhjZXB0aW9uCi0gICAgICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhlIHRlc3Qg
aGFybmVzcyBzdG9wcGVkIGxpc3RlbmluZyB0byB1cywKLSAgICAgICAgLy8gcHJvYmFibHkgYmVj
YXVzZSB3ZSB0aW1lZCBvdXQgb3IgYSBydW4gd2FzIGNhbmNlbGVkLgotICAgICAgICBleGl0KEVY
SVRfRkFJTFVSRSk7Ci0gICAgfQotfQotCi0tICh2b2lkKWRpZFJlY2VpdmVTdGRlcnJEYXRhOihO
U0RhdGEgKilkYXRhCi17Ci0gICAgQHRyeSB7Ci0gICAgICAgIFtbc2VsZiBzdGFuZGFyZEVycm9y
XSB3cml0ZURhdGE6ZGF0YV07Ci0gICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRpb24p
IHsKLSAgICAgICAgLy8gTlNGaWxlSGFuZGxlT3BlcmF0aW9uRXhjZXB0aW9uCi0gICAgICAgIC8v
IEJyb2tlbiBwaXBlIC0gdGhlIHRlc3QgaGFybmVzcyBzdG9wcGVkIGxpc3RlbmluZyB0byB1cywK
LSAgICAgICAgLy8gcHJvYmFibHkgYmVjYXVzZSB3ZSB0aW1lZCBvdXQgb3IgYSBydW4gd2FzIGNh
bmNlbGVkLgotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotfQotCi0tICh2b2lk
KWRpZERpc2Nvbm5lY3QKLXsKLSAgICBkaXNwYXRjaF9zdXNwZW5kKFtzZWxmIHN0YW5kYXJkSW5w
dXREaXNwYXRjaFNvdXJjZV0pOwotfQotCi0tICh2b2lkKWRpZENvbm5lY3QKLXsKLSAgICBkaXNw
YXRjaF9yZXN1bWUoW3NlbGYgc3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNlXSk7Ci19Ci0KLS0g
KHZvaWQpZGlkQ3Jhc2hXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgW1tz
ZWxmIHJlbGF5XSBkaXNjb25uZWN0XTsKLSAgICBOU1N0cmluZyAqY3Jhc2hNZXNzYWdlID0gW05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJcbiNDUkFTSEVEIC0gJUAgKHBpZCAlZClcbiIsIFtz
ZWxmIHByb2Nlc3NOYW1lXSwgW3NlbGYgcGlkXV07Ci0KLSAgICBpZiAobWVzc2FnZSkKLSAgICAg
ICAgY3Jhc2hNZXNzYWdlID0gW2NyYXNoTWVzc2FnZSBzdHJpbmdCeUFwcGVuZGluZ0Zvcm1hdDpA
IiVAXG4iLCBtZXNzYWdlXTsKLQotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSB3cml0ZURhdGE6
W2NyYXNoTWVzc2FnZSBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ11dOwot
ICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSBjbG9zZUZpbGVdOwotICAgIFtbc2VsZiBzdGFuZGFy
ZE91dHB1dF0gY2xvc2VGaWxlXTsKLSAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci19Ci0KLS0gKHZv
aWQpaW5zdGFsbEFwcAotewotICAgIE5TRGljdGlvbmFyeSAqaW5zdGFsbE9wdGlvbnMgPSBAewot
ICAgICAgICAoTlNTdHJpbmcgKilrQ0ZCdW5kbGVJZGVudGlmaWVyS2V5OiBzZWxmLmFwcEJ1bmRs
ZUlkZW50aWZpZXIsCi0gICAgfTsKLQotICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOwotICAgIEJP
T0wgaW5zdGFsbGVkID0gW3NlbGYuZGV2aWNlIGluc3RhbGxBcHBsaWNhdGlvbjpbTlNVUkwgZmls
ZVVSTFdpdGhQYXRoOnNlbGYuYXBwUGF0aF0gd2l0aE9wdGlvbnM6aW5zdGFsbE9wdGlvbnMgZXJy
b3I6JmVycm9yXTsKLSAgICBpZiAoIWluc3RhbGxlZCkgewotICAgICAgICBOU0xvZyhAIkNvdWxk
bid0IGluc3RhbGwgJUA6ICVAIiwgc2VsZi5hcHBQYXRoLCBlcnJvci5kZXNjcmlwdGlvbik7Ci0g
ICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpa2lsbEFwcAot
ewotICAgIGRpc3BhdGNoX3NvdXJjZV90IGRpc3BhdGNoID0gW3NlbGYgYXBwRGlzcGF0Y2hTb3Vy
Y2VdOwotCi0gICAgaWYgKGRpc3BhdGNoKQotICAgICAgICBkaXNwYXRjaF9zb3VyY2VfY2FuY2Vs
KGRpc3BhdGNoKTsKLQotICAgIGlmIChbc2VsZiBwaWRdID4gMSkgewotICAgICAgICBraWxsKHNl
bGYucGlkLCBTSUdLSUxMKTsKLSAgICAgICAgW3NlbGYgc2V0UGlkOi0xXTsKLSAgICB9Ci0gICAg
W3NlbGYgc2V0QXBwRGlzcGF0Y2hTb3VyY2U6bmlsXTsKLX0KLQotLSAoTlNEaWN0aW9uYXJ5ICop
X2Vudmlyb25tZW50VmFyaWFibGVzCi17Ci0gICAgc3RhdGljIE5TRGljdGlvbmFyeSAqZW52aXJv
bm1lbnRWYXJpYWJsZXM7Ci0gICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlOwotCi0gICAg
ZGlzcGF0Y2hfb25jZSgmb25jZSwgXnsKLSAgICAgICAgTlNTdHJpbmcgKnByb2R1Y3REaXJlY3Rv
cnkgPSBbc2VsZiBwcm9kdWN0RGlyXTsKLQotICAgICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpk
aWN0aW9uYXJ5ID0gW0B7Ci0gICAgICAgICAgICBAIklQQ19JREVOVElGSUVSIjogc2VsZi5pcGNJ
ZGVudGlmaWVyLAotICAgICAgICAgICAgQCJEWUxEX0ZSQU1FV09SS19QQVRIIjogcHJvZHVjdERp
cmVjdG9yeSwKLSAgICAgICAgICAgIEAiX19YUENfRFlMRF9GUkFNRVdPUktfUEFUSCI6IHByb2R1
Y3REaXJlY3RvcnksCi0gICAgICAgICAgICBAIkRZTERfTElCUkFSWV9QQVRIIjogcHJvZHVjdERp
cmVjdG9yeSwKLSAgICAgICAgICAgIEAiX19YUENfRFlMRF9MSUJSQVJZX1BBVEgiOiBwcm9kdWN0
RGlyZWN0b3J5LAotICAgICAgICB9IG11dGFibGVDb3B5XTsKLQotICAgICAgICBmb3IgKE5TU3Ry
aW5nICprZXlOYW1lIGluIEBbQCJEWUxEX0lOU0VSVF9MSUJSQVJJRVMiLCBAIk1hbGxvY1N0YWNr
TG9nZ2luZyIsIEAiTE9DQUxfUkVTT1VSQ0VfUk9PVCIsIEAiRFVNUFJFTkRFUlRSRUVfVEVNUCJd
KSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiB2YWx1ZSA9IGdldGVudihba2V5TmFtZSBVVEY4
U3RyaW5nXSk7Ci0gICAgICAgICAgICBpZiAodmFsdWUgJiYgc3RybGVuKHZhbHVlKSkgewotICAg
ICAgICAgICAgICAgIE5TU3RyaW5nICpuc1ZhbHVlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4
U3RyaW5nOnZhbHVlXTsKLSAgICAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6bnNW
YWx1ZSBmb3JLZXk6a2V5TmFtZV07Ci0gICAgICAgICAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2Jq
ZWN0Om5zVmFsdWUgZm9yS2V5OltAIl9fWFBDXyIgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6a2V5
TmFtZV1dOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChjaGFyKiog
ZW52cCA9ICpfTlNHZXRFbnZpcm9uKCk7ICplbnZwOyBlbnZwKyspIHsKLSAgICAgICAgICAgIGNv
bnN0IGNoYXIqIGVudiA9ICplbnZwOwotICAgICAgICAgICAgaWYgKCFzdHJuY21wKCJKU0NfIiwg
ZW52LCA0KSB8fCAhc3RybmNtcCgiX19YUENfSlNDXyIsIGVudiwgMTApKSB7Ci0gICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogZXF1YWwgPSBzdHJjaHIoZW52LCAnPScpOwotICAgICAgICAgICAg
ICAgIGlmICghZXF1YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgTlNMb2coQCJNaXNzaW5nICc9
JyBpbiBlbnYgdmFyICclcyciLCBlbnYpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IG1heEtleUxlbmd0aCA9IDI1NjsKLSAgICAgICAgICAgICAgICBzaXplX3Qga2V5TGVuZ3RoID0g
ZXF1YWwgLSBlbnY7Ci0gICAgICAgICAgICAgICAgaWYgKGtleUxlbmd0aCA+PSBtYXhLZXlMZW5n
dGgpIHsKLSAgICAgICAgICAgICAgICAgICAgTlNMb2coQCJFbnYgdmFyICclcycgaXMgdG9vIGxv
bmciLCBlbnYpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBjaGFyIGtleVttYXhLZXlMZW5ndGhdOwotICAgICAgICAg
ICAgICAgIHN0cm5jcHkoa2V5LCBlbnYsIGtleUxlbmd0aCk7Ci0gICAgICAgICAgICAgICAga2V5
W2tleUxlbmd0aF0gPSAnXDAnOwotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhbHVlID0g
ZXF1YWwgKyAxOwotCi0gICAgICAgICAgICAgICAgTlNTdHJpbmcgKm5zS2V5ID0gW05TU3RyaW5n
IHN0cmluZ1dpdGhVVEY4U3RyaW5nOmtleV07Ci0gICAgICAgICAgICAgICAgTlNTdHJpbmcgKm5z
VmFsdWUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6dmFsdWVdOwotICAgICAgICAg
ICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpuc1ZhbHVlIGZvcktleTpuc0tleV07Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBlbnZpcm9ubWVudFZhcmlhYmxlcyA9IFtk
aWN0aW9uYXJ5IGNvcHldOwotICAgIH0pOwotCi0gICAgcmV0dXJuIGVudmlyb25tZW50VmFyaWFi
bGVzOwotfQotCi0tICh2b2lkKWxhdW5jaEFwcAotewotICAgIE5TRGljdGlvbmFyeSAqbGF1bmNo
T3B0aW9ucyA9IEB7Ci0gICAgICAgIGtTaW1EZXZpY2VMYXVuY2hBcHBsaWNhdGlvbkVudmlyb25t
ZW50OiBbc2VsZiBfZW52aXJvbm1lbnRWYXJpYWJsZXNdLAotICAgICAgICBrU2ltRGV2aWNlTGF1
bmNoQXBwbGljYXRpb25Bcmd1bWVudHM6IFtzZWxmIGR1bXBUb29sQXJndW1lbnRzXSwKLSAgICB9
OwotCi0gICAgTlNFcnJvciAqZXJyb3I7Ci0gICAgcGlkX3QgcGlkID0gW3NlbGYuZGV2aWNlIGxh
dW5jaEFwcGxpY2F0aW9uV2l0aElEOnNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciBvcHRpb25zOmxh
dW5jaE9wdGlvbnMgZXJyb3I6JmVycm9yXTsKLQotICAgIGlmIChwaWQgPCAwKSB7Ci0gICAgICAg
IE5TTG9nKEAiQ291bGRuJ3QgbGF1bmNoICVAOiAlQCIsIHNlbGYuYXBwQnVuZGxlSWRlbnRpZmll
ciwgZXJyb3IuZGVzY3JpcHRpb24pOwotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAg
fQotCi0gICAgW3NlbGYgc2V0UGlkOnBpZF07Ci0KLSAgICBkaXNwYXRjaF9xdWV1ZV90IHF1ZXVl
ID0gZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKTsKLSAgICBkaXNwYXRjaF9zb3VyY2VfdCBzaW11
bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3VyY2UgPSBkaXNwYXRjaF9zb3VyY2VfY3JlYXRlKERJU1BB
VENIX1NPVVJDRV9UWVBFX1BST0MsIFtzZWxmIHBpZF0sIERJU1BBVENIX1BST0NfRVhJVCwgcXVl
dWUpOwotICAgIFtzZWxmIHNldEFwcERpc3BhdGNoU291cmNlOnNpbXVsYXRvckFwcEV4aXREaXNw
YXRjaFNvdXJjZV07Ci0gICAgZGlzcGF0Y2hfc291cmNlX3NldF9ldmVudF9oYW5kbGVyKHNpbXVs
YXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSwgXnsKLSAgICAgICAgZGlzcGF0Y2hfc291cmNlX2Nh
bmNlbChzaW11bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3VyY2UpOwotICAgICAgICBbc2VsZiBkaWRD
cmFzaFdpdGhNZXNzYWdlOm5pbF07Ci0gICAgfSk7Ci0gICAgZGlzcGF0Y2hfcmVzdW1lKHNpbXVs
YXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSk7Ci19Ci0KLS0gKHZvaWQpc3RhcnQKLXsKLSAgICBb
c2VsZiBpbnN0YWxsQXBwXTsKLSAgICBbW3NlbGYgcmVsYXldIHNldHVwXTsKLSAgICBbc2VsZiBs
YXVuY2hBcHBdOwotICAgIFtbc2VsZiByZWxheV0gY29ubmVjdF07Ci19Ci0KLS0gKHZvaWQpZmlu
aXNoCi17Ci0gICAgW1tzZWxmIHJlbGF5XSBkaXNjb25uZWN0XTsKLSAgICBbc2VsZiBraWxsQXBw
XTsKLSAgICBleGl0KEVYSVRfU1VDQ0VTUyk7Ci19Ci0KLUBlbmQKSW5kZXg6IFRvb2xzL0xheW91
dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvbWFpbi5tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xh
eW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvbWFpbi5tCShyZXZpc2lvbiAyMTA1NDkpCisr
KyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L21haW4ubQkobm9uZXhpc3Rl
bnQpCkBAIC0xLDEzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiQ29yZVNp
bXVsYXRvclNQSS5oIgotI2ltcG9ydCAiTFRSZWxheUNvbnRyb2xsZXIuaCIKLSNpbXBvcnQgPEZv
dW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi1zdGF0aWMgTFRSZWxheUNvbnRyb2xsZXIgKnJlbGF5
Q29udHJvbGxlcjsKLQotdm9pZCB1c2FnZSgpCi17Ci0gICAgTlNTdHJpbmcgKmhlbHBUZXh0ID0g
QCJMYXlvdXRUZXN0UmVsYXk6IHJ1biBhIGR1bXAgdG9vbCBpbiB0aGUgc2ltdWxhdG9yLiBOb3Qg
Zm9yIGRpcmVjdCBjb25zdW1wdGlvbi5cbiIKLSAgICAgICAgIlVzYWdlOiBMYXlvdXRUZXN0UmVs
YXkgWy1oXSBbb3B0aW9uc10gLS0gW2R1bXAgdG9vbCBhcmd1bWVudHNdXG4iCi0gICAgICAgICJS
ZXF1aXJlZCBvcHRpb25zOlxuIgotICAgICAgICAiICAgIC11ZGlkIDxpZGVudGlmaWVyPiAgICAg
ICBTaW11bGF0b3IgZGV2aWNlIGlkZW50aWZpZXJcbiIKLSAgICAgICAgIiAgICAtYXBwIDxhcHBf
cGF0aD4gICAgICAgICAgUGF0aCB0byB0aGUgYnVpbHQgaU9TIC5hcHAgYnVuZGxlIGRpcmVjdG9y
eS5cbiIKLSAgICAgICAgIiAgICAtcHJvZHVjdERpciA8ZGlyPiAgICAgICAgL3BhdGgvdG8vV2Vi
S2l0QnVpbGQve2NvbmZpZ3VyYXRpb259LXtzaG9ydCBwbGF0Zm9ybX0uXG4iOwotCi0gICAgZnBy
aW50ZihzdGRlcnIsICIlc1xuIiwgW2hlbHBUZXh0IFVURjhTdHJpbmddKTsKLX0KLQotTlNTdHJp
bmcgKmdldFJlcXVpcmVkU3RyaW5nQXJndW1lbnQoTlNTdHJpbmcgKnBhcmFtZXRlcikKLXsKLSAg
ICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2Vy
RGVmYXVsdHNdOwotICAgIE5TU3RyaW5nICphcmd1bWVudCA9IFtkZWZhdWx0cyBzdHJpbmdGb3JL
ZXk6cGFyYW1ldGVyXTsKLQotICAgIGlmICghYXJndW1lbnQpIHsKLSAgICAgICAgTlNMb2coQCIt
JUAgaXMgcmVxdWlyZWQuIiwgcGFyYW1ldGVyKTsKLSAgICAgICAgdXNhZ2UoKTsKLSAgICAgICAg
ZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0KLSAgICByZXR1cm4gYXJndW1lbnQ7Ci19Ci0KLU5T
QXJyYXkgKmdldER1bXBUb29sQXJndW1lbnRzKCkKLXsKLSAgICBOU011dGFibGVBcnJheSAqZHVt
cFRvb2xBcmd1bWVudHMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKLSAgICBOU0Fy
cmF5ICpwcm9jZXNzQXJncyA9IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gYXJndW1lbnRz
XTsKLSAgICBCT09MIGFwcGVuZGluZyA9IE5POwotICAgIGZvciAoTlNTdHJpbmcgKmFyZyBpbiBw
cm9jZXNzQXJncykgewotICAgICAgICBpZiAoW2FyZyBpc0VxdWFsVG9TdHJpbmc6QCItLSJdKSB7
Ci0gICAgICAgICAgICBhcHBlbmRpbmcgPSBZRVM7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoYXBwZW5kaW5nKQotICAgICAgICAgICAgW2R1bXBUb29sQXJn
dW1lbnRzIGFkZE9iamVjdDphcmddOwotICAgIH0KLSAgICByZXR1cm4gZHVtcFRvb2xBcmd1bWVu
dHM7Ci19Ci0KLXZvaWQgZmluaXNoKCkKLXsKLSAgICBbcmVsYXlDb250cm9sbGVyIGZpbmlzaF07
Ci19Ci0KLXZvaWQgcmVjZWl2ZWRTaWduYWwoaW50IHNpZ25hbCkKLXsKLSAgICBleGl0KEVYSVRf
U1VDQ0VTUyk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICogYXJndltdKQot
ewotICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBOU0FycmF5ICpoZWxwQXJndW1lbnRz
ID0gQFtAIi1oIiwgQCItLWhlbHAiXTsKLSAgICAgICAgZm9yIChOU1N0cmluZyAqaGVscEFyZ3Vt
ZW50IGluIGhlbHBBcmd1bWVudHMpIHsKLSAgICAgICAgICAgIGlmIChbW1tOU1Byb2Nlc3NJbmZv
IHByb2Nlc3NJbmZvXSBhcmd1bWVudHNdIGluZGV4T2ZPYmplY3Q6aGVscEFyZ3VtZW50XSAhPSBO
U05vdEZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgdXNhZ2UoKTsKLSAgICAgICAgICAgICAgICBl
eGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotI2lmIFVTRV9T
SU1fU0VSVklDRV9DT05URVhUCi0gICAgICAgIE5TU3RyaW5nICpkZXZlbG9wZXJEaXJlY3Rvcnkg
PSBnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAiZGV2ZWxvcGVyRGlyIik7Ci0jZW5kaWYKLSAg
ICAgICAgTlNVVUlEICp1ZGlkID0gW1tOU1VVSUQgYWxsb2NdIGluaXRXaXRoVVVJRFN0cmluZzpn
ZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAidWRpZCIpXTsKLSAgICAgICAgTlNTdHJpbmcgKmFw
cFBhdGggPSBnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAiYXBwIik7Ci0gICAgICAgIE5TU3Ry
aW5nICpwcm9kdWN0RGlyZWN0b3J5ID0gZ2V0UmVxdWlyZWRTdHJpbmdBcmd1bWVudChAInByb2R1
Y3REaXIiKTsKLSAgICAgICAgTlNBcnJheSAqZHVtcFRvb2xBcmd1bWVudHMgPSBnZXREdW1wVG9v
bEFyZ3VtZW50cygpOwotCi0jaWYgVVNFX1NJTV9TRVJWSUNFX0NPTlRFWFQKLSAgICAgICAgTlNF
cnJvciAqZXJyb3I7Ci0gICAgICAgIFNpbVNlcnZpY2VDb250ZXh0ICpzZXJ2aWNlQ29udGV4dCA9
IFtTaW1TZXJ2aWNlQ29udGV4dCBzaGFyZWRTZXJ2aWNlQ29udGV4dEZvckRldmVsb3BlckRpcjpk
ZXZlbG9wZXJEaXJlY3RvcnkgZXJyb3I6JmVycm9yXTsKLSAgICAgICAgaWYgKCFzZXJ2aWNlQ29u
dGV4dCkgewotICAgICAgICAgICAgTlNMb2coQCJEZXZpY2UgY29udGV4dCBjb3VsZG4ndCBiZSBm
b3VuZDogJUAiLCBlcnJvcik7Ci0gICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgU2ltRGV2aWNlU2V0ICpkZXZpY2VTZXQgPSBbc2VydmljZUNvbnRleHQg
ZGVmYXVsdERldmljZVNldFdpdGhFcnJvcjpuaWxdOwotICAgICAgICBpZiAoIWRldmljZVNldCkg
ewotICAgICAgICAgICAgTlNMb2coQCJEZWZhdWx0IGRldmljZSBzZXQgY291bGRuJ3QgYmUgZm91
bmQ6ICVAIiwgZXJyb3IpOwotICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAg
ICB9Ci0gICAgICAgIFNpbURldmljZSAqZGV2aWNlID0gW2RldmljZVNldC5kZXZpY2VzQnlVRElE
IG9iamVjdEZvcktleTp1ZGlkXTsKLSNlbHNlCi0gICAgICAgIFNpbURldmljZSAqZGV2aWNlID0g
W1NpbURldmljZVNldC5kZWZhdWx0U2V0LmRldmljZXNCeVVESUQgb2JqZWN0Rm9yS2V5OnVkaWRd
OwotI2VuZGlmCi0gICAgICAgIGlmICghZGV2aWNlKSB7Ci0gICAgICAgICAgICBOU0xvZyhAIkRl
dmljZSAlQCBjb3VsZG4ndCBiZSBmb3VuZCIsIHVkaWQpOwotICAgICAgICAgICAgZXhpdChFWElU
X0ZBSUxVUkUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVsYXlDb250cm9sbGVyID0gW1tMVFJl
bGF5Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhEZXZpY2U6ZGV2aWNlIHByb2R1Y3REaXI6cHJv
ZHVjdERpcmVjdG9yeSBhcHBQYXRoOmFwcFBhdGggZGV2aWNlVURJRDp1ZGlkIGR1bXBUb29sQXJn
dW1lbnRzOmR1bXBUb29sQXJndW1lbnRzXTsKLSAgICAgICAgW3JlbGF5Q29udHJvbGxlciBzdGFy
dF07Ci0KLSAgICAgICAgYXRleGl0KGZpbmlzaCk7Ci0gICAgICAgIHNpZ25hbChTSUdJTlQsIHJl
Y2VpdmVkU2lnbmFsKTsKLSAgICAgICAgc2lnbmFsKFNJR1RFUk0sIHJlY2VpdmVkU2lnbmFsKTsK
LQotICAgICAgICBbW05TUnVuTG9vcCBtYWluUnVuTG9vcF0gcnVuXTsKLSAgICB9Ci0gICAgcmV0
dXJuIDA7Ci19CkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJl
bGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MTA1NDkpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMDIgKzAsMCBAQAotLy8gISQq
VVRGOCokIQotewotCWFyY2hpdmVWZXJzaW9uID0gMTsKLQljbGFzc2VzID0gewotCX07Ci0Jb2Jq
ZWN0VmVyc2lvbiA9IDQ2OwotCW9iamVjdHMgPSB7Ci0KLS8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBz
ZWN0aW9uICovCi0JCTJFOEQzRUY4MTk4ODFENDMwMDRGNkNDMiAvKiBtYWluLm0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRThEM0VGNzE5ODgxRDQzMDA0
RjZDQzIgLyogbWFpbi5tICovOyB9OwotCQkyRThEM0YwMjE5ODgxRkQwMDA0RjZDQzIgLyogTFRQ
aXBlUmVsYXkubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJFOEQzRjAxMTk4ODFGRDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5tICovOyB9OwotCQkyRThE
M0YwNjE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIubSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOEQzRjA1MTk4ODI0MDYwMDRGNkND
MiAvKiBMVFJlbGF5Q29udHJvbGxlci5tICovOyB9OwotLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0
aW9uICovCi0KLS8qIEJlZ2luIFBCWENvcHlGaWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCQky
RThEM0VGMjE5ODgxRDQzMDA0RjZDQzIgLyogQ29weUZpbGVzICovID0gewotCQkJaXNhID0gUEJY
Q29weUZpbGVzQnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0J
CQlkc3RQYXRoID0gL3Vzci9zaGFyZS9tYW4vbWFuMS87Ci0JCQlkc3RTdWJmb2xkZXJTcGVjID0g
MDsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAxOwotCQl9OwotLyogRW5kIFBCWENvcHlGaWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAq
LwotCi0vKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjQxOTg4
MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5j
bHVkZUluSW5kZXggPSAwOyBwYXRoID0gTGF5b3V0VGVzdFJlbGF5OyBzb3VyY2VUcmVlID0gQlVJ
TFRfUFJPRFVDVFNfRElSOyB9OwotCQkyRThEM0VGNzE5ODgxRDQzMDA0RjZDQzIgLyogbWFpbi5t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLm9iamM7IHBhdGggPSBtYWluLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmln
OyBuYW1lID0gRGVidWdSZWxlYXNlLnhjY29uZmlnOyBwYXRoID0gQ29uZmlndXJhdGlvbnMvRGVi
dWdSZWxlYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0VG
RjE5ODgxRTI1MDA0RjZDQzIgLyogQmFzZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IG5hbWUgPSBCYXNlLnhj
Y29uZmlnOyBwYXRoID0gQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDAxOTg4MUYyOTAwNEY2Q0MyIC8qIExUUmVsYXkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTFRSZWxheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQky
RThEM0YwMTE5ODgxRkQwMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkubSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5vYmpjOyBwYXRoID0gTFRQaXBlUmVsYXkubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMkU4RDNGMDMxOTg4MUZFMjAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IExUUGlwZVJlbGF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJF
OEQzRjA0MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBMVFJlbGF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkyRThEM0YwNTE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRy
b2xsZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gTFRSZWxheUNvbnRy
b2xsZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0UxRkJDMTUxQjI5MEU3OTAw
MDEzNkY1IC8qIENvcmVTaW11bGF0b3JTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ29yZVNpbXVsYXRvclNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotLyog
RW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhGcmFtZXdvcmtz
QnVpbGRQaGFzZSBzZWN0aW9uICovCi0JCTJFOEQzRUYxMTk4ODFENDMwMDRGNkNDMiAvKiBGcmFt
ZXdvcmtzICovID0gewotCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7Ci0JCQlidWls
ZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07Ci0vKiBFbmQgUEJYRnJhbWV3
b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhHcm91cCBzZWN0aW9uICov
Ci0JCTJFOEQzRUVCMTk4ODFENDMwMDRGNkNDMiA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJ
Y2hpbGRyZW4gPSAoCi0JCQkJMkU4RDNFRkYxOTg4MUUyNTAwNEY2Q0MyIC8qIEJhc2UueGNjb25m
aWcgKi8sCi0JCQkJMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2Nv
bmZpZyAqLywKLQkJCQkyRThEM0VGNjE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5
ICovLAotCQkJCTJFOEQzRUY1MTk4ODFENDMwMDRGNkNDMiAvKiBQcm9kdWN0cyAqLywKLQkJCSk7
Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQkyRThEM0VGNTE5ODgxRDQzMDA0
RjZDQzIgLyogUHJvZHVjdHMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVu
ID0gKAotCQkJCTJFOEQzRUY0MTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8s
Ci0JCQkpOwotCQkJbmFtZSA9IFByb2R1Y3RzOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
LQkJfTsKLQkJMkU4RDNFRjYxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLyA9
IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMkU4RDNFRjcxOTg4
MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSAqLywKLQkJCQlDRTFGQkMxNTFCMjkwRTc5MDAwMTM2RjUg
LyogQ29yZVNpbXVsYXRvclNQSS5oICovLAotCQkJCTJFOEQzRjAwMTk4ODFGMjkwMDRGNkNDMiAv
KiBMVFJlbGF5LmggKi8sCi0JCQkJMkU4RDNGMDExOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJl
bGF5Lm0gKi8sCi0JCQkJMkU4RDNGMDMxOTg4MUZFMjAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lmgg
Ki8sCi0JCQkJMkU4RDNGMDQxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLmgg
Ki8sCi0JCQkJMkU4RDNGMDUxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLm0g
Ki8sCi0JCQkpOwotCQkJcGF0aCA9IExheW91dFRlc3RSZWxheTsKLQkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7Ci0JCX07Ci0vKiBFbmQgUEJYR3JvdXAgc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQ
QlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLwotCQkyRThEM0VGMzE5ODgxRDQzMDA0RjZDQzIgLyog
TGF5b3V0VGVzdFJlbGF5ICovID0gewotCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwotCQkJYnVp
bGRDb25maWd1cmF0aW9uTGlzdCA9IDJFOEQzRUZCMTk4ODFENDMwMDRGNkNDMiAvKiBCdWlsZCBj
b25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiTGF5b3V0VGVzdFJlbGF5IiAq
LzsKLQkJCWJ1aWxkUGhhc2VzID0gKAotCQkJCTJFOEQzRUYwMTk4ODFENDMwMDRGNkNDMiAvKiBT
b3VyY2VzICovLAotCQkJCTJFOEQzRUYxMTk4ODFENDMwMDRGNkNDMiAvKiBGcmFtZXdvcmtzICov
LAotCQkJCTJFOEQzRUYyMTk4ODFENDMwMDRGNkNDMiAvKiBDb3B5RmlsZXMgKi8sCi0JCQkpOwot
CQkJYnVpbGRSdWxlcyA9ICgKLQkJCSk7Ci0JCQlkZXBlbmRlbmNpZXMgPSAoCi0JCQkpOwotCQkJ
bmFtZSA9IExheW91dFRlc3RSZWxheTsKLQkJCXByb2R1Y3ROYW1lID0gTGF5b3V0VGVzdFJlbGF5
OwotCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDJFOEQzRUY0MTk4ODFENDMwMDRGNkNDMiAvKiBMYXlv
dXRUZXN0UmVsYXkgKi87Ci0JCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBl
LnRvb2wiOwotCQl9OwotLyogRW5kIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCi0KLS8qIEJl
Z2luIFBCWFByb2plY3Qgc2VjdGlvbiAqLwotCQkyRThEM0VFQzE5ODgxRDQzMDA0RjZDQzIgLyog
UHJvamVjdCBvYmplY3QgKi8gPSB7Ci0JCQlpc2EgPSBQQlhQcm9qZWN0OwotCQkJYXR0cmlidXRl
cyA9IHsKLQkJCQlMYXN0VXBncmFkZUNoZWNrID0gMDYwMDsKLQkJCQlPUkdBTklaQVRJT05OQU1F
ID0gIkFwcGxlLCBJbmMuIjsKLQkJCQlUYXJnZXRBdHRyaWJ1dGVzID0gewotCQkJCQkyRThEM0VG
MzE5ODgxRDQzMDA0RjZDQzIgPSB7Ci0JCQkJCQlDcmVhdGVkT25Ub29sc1ZlcnNpb24gPSA2LjA7
Ci0JCQkJCX07Ci0JCQkJfTsKLQkJCX07Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMkU4
RDNFRUYxOTg4MUQ0MzAwNEY2Q0MyIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJY
UHJvamVjdCAiTGF5b3V0VGVzdFJlbGF5IiAqLzsKLQkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0g
Ilhjb2RlIDMuMiI7Ci0JCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7Ci0JCQloYXNTY2Fu
bmVkRm9yRW5jb2RpbmdzID0gMDsKLQkJCWtub3duUmVnaW9ucyA9ICgKLQkJCQllbiwKLQkJCSk7
Ci0JCQltYWluR3JvdXAgPSAyRThEM0VFQjE5ODgxRDQzMDA0RjZDQzI7Ci0JCQlwcm9kdWN0UmVm
R3JvdXAgPSAyRThEM0VGNTE5ODgxRDQzMDA0RjZDQzIgLyogUHJvZHVjdHMgKi87Ci0JCQlwcm9q
ZWN0RGlyUGF0aCA9ICIiOwotCQkJcHJvamVjdFJvb3QgPSAiIjsKLQkJCXRhcmdldHMgPSAoCi0J
CQkJMkU4RDNFRjMxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLywKLQkJCSk7
Ci0JCX07Ci0vKiBFbmQgUEJYUHJvamVjdCBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWFNvdXJj
ZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjAxOTg4MUQ0MzAwNEY2Q0MyIC8qIFNv
dXJjZXMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0
aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCQkyRThEM0YwNjE5ODgyNDA2
MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIubSBpbiBTb3VyY2VzICovLAotCQkJCTJFOEQz
RUY4MTk4ODFENDMwMDRGNkNDMiAvKiBtYWluLm0gaW4gU291cmNlcyAqLywKLQkJCQkyRThEM0Yw
MjE5ODgxRkQwMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkubSBpbiBTb3VyY2VzICovLAotCQkJKTsK
LQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9OwotLyogRW5k
IFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gWENCdWlsZENvbmZp
Z3VyYXRpb24gc2VjdGlvbiAqLwotCQkyRThEM0VGOTE5ODgxRDQzMDA0RjZDQzIgLyogRGVidWcg
Ki8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0
aW9uUmVmZXJlbmNlID0gMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54
Y2NvbmZpZyAqLzsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVn
OwotCQl9OwotCQkyRThEM0VGQTE5ODgxRDQzMDA0RjZDQzIgLyogUmVsZWFzZSAqLyA9IHsKLQkJ
CWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVu
Y2UgPSAyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICov
OwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsK
LQkJMkU4RDNFRkMxOTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICovID0gewotCQkJaXNhID0gWENC
dWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDJFOEQz
RUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi87Ci0JCQlidWls
ZFNldHRpbmdzID0gewotCQkJCVBST0RVQ1RfTkFNRSA9ICIkKFRBUkdFVF9OQU1FKSI7Ci0JCQl9
OwotCQkJbmFtZSA9IERlYnVnOwotCQl9OwotCQkyRThEM0VGRDE5ODgxRDQzMDA0RjZDQzIgLyog
UmVsZWFzZSAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJYmFzZUNv
bmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVidWdS
ZWxlYXNlLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlQUk9EVUNUX05B
TUUgPSAiJChUQVJHRVRfTkFNRSkiOwotCQkJfTsKLQkJCW5hbWUgPSBSZWxlYXNlOwotCQl9Owot
LyogRW5kIFhDQnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gWENDb25m
aWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCi0JCTJFOEQzRUVGMTk4ODFENDMwMDRGNkNDMiAvKiBC
dWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIkxheW91dFRlc3RSZWxheSIg
Ki8gPSB7Ci0JCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVpbGRDb25maWd1cmF0
aW9ucyA9ICgKLQkJCQkyRThEM0VGOTE5ODgxRDQzMDA0RjZDQzIgLyogRGVidWcgKi8sCi0JCQkJ
MkU4RDNFRkExOTg4MUQ0MzAwNEY2Q0MyIC8qIFJlbGVhc2UgKi8sCi0JCQkpOwotCQkJZGVmYXVs
dENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1l
ID0gUmVsZWFzZTsKLQkJfTsKLQkJMkU4RDNFRkIxOTg4MUQ0MzAwNEY2Q0MyIC8qIEJ1aWxkIGNv
bmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJMYXlvdXRUZXN0UmVsYXkiICov
ID0gewotCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlv
bnMgPSAoCi0JCQkJMkU4RDNFRkMxOTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICovLAotCQkJCTJF
OEQzRUZEMTk4ODFENDMwMDRGNkNDMiAvKiBSZWxlYXNlICovLAotCQkJKTsKLQkJCWRlZmF1bHRD
b25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9
IFJlbGVhc2U7Ci0JCX07Ci0vKiBFbmQgWENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCi0J
fTsKLQlyb290T2JqZWN0ID0gMkU4RDNFRUMxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2plY3Qgb2Jq
ZWN0ICovOwotfQpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54
Y29kZXByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RS
ZWxheS54Y29kZXByb2oJKHJldmlzaW9uIDIxMDU0OSkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxh
eS9MYXlvdXRUZXN0UmVsYXkueGNvZGVwcm9qCShub25leGlzdGVudCkKClByb3BlcnR5IGNoYW5n
ZXMgb246IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVwcm9qCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KRGVsZXRlZDogc3ZuOmlnbm9yZQojIyAtMSwyICswLDAgIyMKLXByb2plY3QueGN3
b3Jrc3BhY2UKLXhjdXNlcmRhdGEKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9NYWtlZmls
ZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvTWFrZWZpbGUJKHJldmlzaW9u
IDIxMDU0OSkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9NYWtlZmlsZQkobm9uZXhpc3RlbnQp
CkBAIC0xLDYgKzAsMCBAQAotU0NSSVBUU19QQVRIID0gLi4vU2NyaXB0cwotCi1PVkVSUklERV9B
UkNIUyA9IGRlZmF1bHQKLU9WRVJSSURFX1NES1JPT1QgPSBkZWZhdWx0Ci0KLWluY2x1ZGUgLi4v
Li4vTWFrZWZpbGUuc2hhcmVkCkluZGV4OiBUb29scy9NYWtlZmlsZQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9NYWtlZmlsZQkocmV2aXNpb24gMjEwNTQ5KQorKysgVG9vbHMvTWFrZWZpbGUJKHdvcmtp
bmcgY29weSkKQEAgLTcsOSArNyw2IEBAIGlmbmVxICgsJChTREtST09UKSkKIAlpZm5lcSAoLCQo
ZmluZHN0cmluZyBpcGhvbmUsJChTREtST09UKSkpCiAJCU1PRFVMRVMgKz0gTW9iaWxlTWluaUJy
b3dzZXIKIAllbmRpZgotCWlmZXEgKCwkKERPX05PVF9CVUlMRF9MQVlPVVRfVEVTVF9SRUxBWSkp
Ci0JCU1PRFVMRVMgKz0gTGF5b3V0VGVzdFJlbGF5Ci0JZW5kaWYKIGVuZGlmCiAKIGFsbDoKSW5k
ZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9CYXNlLnhj
Y29uZmlnCShyZXZpc2lvbiAyMTA1NDkpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29uZmln
dXJhdGlvbnMvQmFzZS54Y2NvbmZpZwkobm9uZXhpc3RlbnQpCkBAIC0xLDY4ICswLDAgQEAKLS8v
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLwot
Ly8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLS8vIGFyZSBtZXQ6Ci0vLyAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8g
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotLy8gMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLS8vICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0vLyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotLy8gSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0vLyBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotLy8gQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0vLyBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0vLyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLS8vIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLS8vIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
Ly8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSAiLi4vLi4vLi4vLi4v
SW50ZXJuYWwvQ29uZmlndXJhdGlvbnMvSGF2ZUludGVybmFsU0RLLnhjY29uZmlnIgotCi1VU0Vf
SU5URVJOQUxfU0RLID0gJChVU0VfSU5URVJOQUxfU0RLXyQoQ09ORklHVVJBVElPTikpOwotVVNF
X0lOVEVSTkFMX1NES19Qcm9kdWN0aW9uID0gWUVTOwotVVNFX0lOVEVSTkFMX1NES19EZWJ1ZyA9
ICQoSEFWRV9JTlRFUk5BTF9TREspOwotVVNFX0lOVEVSTkFMX1NES19SZWxlYXNlID0gJChIQVZF
X0lOVEVSTkFMX1NESyk7Ci0KLUNMQU5HX0NYWF9MQU5HVUFHRV9TVEFOREFSRCA9IGdudSsrMHg7
Ci1DTEFOR19FTkFCTEVfT0JKQ19BUkMgPSBZRVM7Ci1DTEFOR19XQVJOX0NYWDBYX0VYVEVOU0lP
TlMgPSBOTzsKLUhFQURFUl9TRUFSQ0hfUEFUSFMgPSAkKEJVSUxUX1BST0RVQ1RTX0RJUikvdXNy
L2xvY2FsL2luY2x1ZGUgJChXRUJDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL0ZvcndhcmRpbmdI
ZWFkZXJzICQoU1JDUk9PVCkvLi4vLi4vU291cmNlL0phdmFTY3JpcHRDb3JlL2ljdSAkKE5FWFRf
Uk9PVCkvdXNyL2xvY2FsL2luY2x1ZGUvV2ViQ29yZVRlc3RTdXBwb3J0OwotR0NDX1BSRVBST0NF
U1NPUl9ERUZJTklUSU9OUyA9ICQoREVCVUdfREVGSU5FUykgRU5BQkxFX0RBU0hCT0FSRF9TVVBQ
T1JUOwotREVCVUdfSU5GT1JNQVRJT05fRk9STUFUID0gZHdhcmYtd2l0aC1kc3ltOwotUFJFQklO
RElORyA9IE5PCi1HQ0NfQ19MQU5HVUFHRV9TVEFOREFSRCA9IGdudTk5Ci1HQ0NfRU5BQkxFX0NQ
UF9FWENFUFRJT05TID0gTk87Ci1HQ0NfRU5BQkxFX0NQUF9SVFRJID0gTk87Ci1HQ0NfUFJFQ09N
UElMRV9QUkVGSVhfSEVBREVSID0gWUVTCi1HQ0NfVFJFQVRfV0FSTklOR1NfQVNfRVJST1JTID0g
WUVTCi1HQ0NfVkVSU0lPTiA9IGNvbS5hcHBsZS5jb21waWxlcnMubGx2bS5jbGFuZy4xXzA7Ci1H
Q0NfV0FSTl9BQk9VVF9ERVBSRUNBVEVEX0ZVTkNUSU9OUyA9IE5PCi1HQ0NfV0FSTl9VTlVTRURf
RlVOQ1RJT04gPSBZRVMKLUdDQ19XQVJOX1VOVVNFRF9WQVJJQUJMRSA9IFlFUwotR0NDX1dBUk5f
NjRfVE9fMzJfQklUX0NPTlZFUlNJT05bYXJjaD14ODZfNjRdID0gTk87Ci1XQVJOSU5HX0NGTEFH
UyA9IC1XYWxsIC1XIC1Xbm8tdW51c2VkLXBhcmFtZXRlciAtV3VuZGVmCi0KLURFQlVHX0RFRklO
RVNfZGVidWcgPSA7Ci1ERUJVR19ERUZJTkVTX25vcm1hbCA9IE5ERUJVRzsKLURFQlVHX0RFRklO
RVMgPSAkKERFQlVHX0RFRklORVNfJChDVVJSRU5UX1ZBUklBTlQpKTsKLQotVEFSR0VUX01BQ19P
U19YX1ZFUlNJT05fTUFKT1IgPSAkKFRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SJChNQUNP
U1hfREVQTE9ZTUVOVF9UQVJHRVQ6c3VmZml4OmlkZW50aWZpZXIpKTsKLVRBUkdFVF9NQUNfT1Nf
WF9WRVJTSU9OX01BSk9SXzEwID0gMTAxMDAwOwotVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFK
T1JfMTEgPSAxMDExMDA7Ci1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUl8xMiA9IDEwMTIw
MDsKLVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SXzEzID0gMTAxMzAwOwotCi1TREtST09U
ID0gbWFjb3N4LmludGVybmFsOwotCi1TVVBQT1JURURfUExBVEZPUk1TID0gbWFjb3N4OwotCi1U
T09MQ0hBSU5TID0gZGVmYXVsdDsKLQotT1RIRVJfQ0ZMQUdTID0gJChBU0FOX09USEVSX0NGTEFH
Uyk7Ci1PVEhFUl9DUExVU1BMVVNGTEFHUyA9ICQoQVNBTl9PVEhFUl9DUExVU1BMVVNGTEFHUyk7
Ci1PVEhFUl9MREZMQUdTID0gJChBU0FOX09USEVSX0xERkxBR1MpOwpJbmRleDogVG9vbHMvTGF5
b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0RlYnVnUmVsZWFzZS54Y2NvbmZpZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMvRGVidWdSZWxlYXNl
LnhjY29uZmlnCShyZXZpc2lvbiAyMTA1NDkpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29u
ZmlndXJhdGlvbnMvRGVidWdSZWxlYXNlLnhjY29uZmlnCShub25leGlzdGVudCkKQEAgLTEsNDIg
KzAsMCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotLy8gYXJlIG1ldDoKLS8vIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0vLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0vLyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotLy8g
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLS8vIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0vLyBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLS8vIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0v
LyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLS8vIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLS8vIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotLy8gUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotLy8gT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlICJC
YXNlLnhjY29uZmlnIgotCi1BUkNIUyA9ICQoQVJDSFNfU1RBTkRBUkRfNjRfQklUKTsKLQotVEFS
R0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1IgPSAkKE1BQ19PU19YX1ZFUlNJT05fTUFKT1IpOwot
Ci1NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgPSAkKE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVF8k
KFRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SKSkKLU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdF
VF8xMDEwMDAgPSAxMC4xMDsKLU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVF8xMDExMDAgPSAxMC4x
MTsKLU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVF8xMDEyMDAgPSAxMC4xMjsKLU1BQ09TWF9ERVBM
T1lNRU5UX1RBUkdFVF8xMDEzMDAgPSAxMC4xMzsKLQotRlJBTUVXT1JLX1NFQVJDSF9QQVRIUyA9
ICQoREVWRUxPUEVSX0RJUikvTGlicmFyeS9Qcml2YXRlRnJhbWV3b3JrczsKLUxEX1JVTlBBVEhf
U0VBUkNIX1BBVEhTID0gJChERVZFTE9QRVJfRElSKS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtz
OwotT1RIRVJfTERGTEFHUyA9IC1mcmFtZXdvcmsgQ29yZVNpbXVsYXRvciAtZnJhbWV3b3JrIEFw
cEtpdDsKLQotU0RLUk9PVCA9ICQoU0RLUk9PVF9tYWNvc3hfJChVU0VfSU5URVJOQUxfU0RLKSk7
Ci1TREtST09UX21hY29zeF8gPSBtYWNvc3g7Ci1TREtST09UX21hY29zeF9ZRVMgPSBtYWNvc3gu
aW50ZXJuYWw7CkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0Nv
cmVTaW11bGF0b3JTUEkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5
b3V0VGVzdFJlbGF5L0NvcmVTaW11bGF0b3JTUEkuaAkocmV2aXNpb24gMjEwNTQ5KQorKysgVG9v
bHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9Db3JlU2ltdWxhdG9yU1BJLmgJKG5v
bmV4aXN0ZW50KQpAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1LCAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIF9faGFz
X2luY2x1ZGUoPENvcmVTaW11bGF0b3IvQ29yZVNpbXVsYXRvci5oPikKLQotLyogRklYTUU6IFJl
bW92ZSB0aGUgYmVsb3cgI2RlZmluZSBvbmNlIHdlIHJlcXVpcmUgWGNvZGUgNy4zIHdpdGggaU9T
IDkuMyBTREsgb3IgbmV3ZXIuICovCi0jZGVmaW5lIF9fY29yZXNpbV91bmF2YWlsYWJsZV9tc2co
bXNnKQotI2ltcG9ydCA8Q29yZVNpbXVsYXRvci9Db3JlU2ltdWxhdG9yLmg+Ci0KLS8qIEZJWE1F
OiBBbHdheXMgdXNlIFNpbVNlcnZpY2VDb250ZXh0IG9uY2Ugd2UgcmVxdWlyZSBYY29kZSA3LjMg
d2l0aCBpT1MgOS4zIFNESyBvciBuZXdlci4gKi8KLSNkZWZpbmUgVVNFX1NJTV9TRVJWSUNFX0NP
TlRFWFQgZGVmaW5lZChDT1JFU0lNX0FQSV9NQVhfQUxMT1dFRCkKLQotI2Vsc2UKLQotI2ltcG9y
dCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNkZWZpbmUgVVNFX1NJTV9TRVJWSUNFX0NP
TlRFWFQgMQotCi0jZGVmaW5lIGtTaW1EZXZpY2VMYXVuY2hBcHBsaWNhdGlvbkFyZ3VtZW50cyBA
ImFyZ3VtZW50cyIKLSNkZWZpbmUga1NpbURldmljZUxhdW5jaEFwcGxpY2F0aW9uRW52aXJvbm1l
bnQgQCJlbnZpcm9ubWVudCIKLQotQGludGVyZmFjZSBTaW1EZXZpY2UgOiBOU09iamVjdAotLSAo
Qk9PTClpbnN0YWxsQXBwbGljYXRpb246KE5TVVJMICopaW5zdGFsbFVSTCB3aXRoT3B0aW9uczoo
TlNEaWN0aW9uYXJ5ICopb3B0aW9ucyBlcnJvcjooTlNFcnJvciAqIF9fYXV0b3JlbGVhc2luZyAq
KWVycm9yOwotLSAocGlkX3QpbGF1bmNoQXBwbGljYXRpb25XaXRoSUQ6KE5TU3RyaW5nICopYnVu
ZGxlSUQgb3B0aW9uczooTlNEaWN0aW9uYXJ5ICopb3B0aW9ucyBlcnJvcjooTlNFcnJvciAqIF9f
YXV0b3JlbGVhc2luZyAqKWVycm9yOwotQGVuZAotCi1AaW50ZXJmYWNlIFNpbURldmljZVNldCA6
IE5TT2JqZWN0Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBjb3B5KSBOU0RpY3Rpb25hcnkgKmRldmlj
ZXNCeVVESUQ7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgU2ltU2VydmljZUNvbnRleHQgOiBOU09iamVj
dAotKyhTaW1TZXJ2aWNlQ29udGV4dCAqKXNoYXJlZFNlcnZpY2VDb250ZXh0Rm9yRGV2ZWxvcGVy
RGlyOihOU1N0cmluZyAqKWRldmVsb3BlckRpciBlcnJvcjooTlNFcnJvciAqIF9fYXV0b3JlbGVh
c2luZyAqKWVycm9yOwotLShTaW1EZXZpY2VTZXQgKilkZWZhdWx0RGV2aWNlU2V0V2l0aEVycm9y
OihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci1AZW5kCi0KLSNlbmRpZgpJbmRl
eDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRQaXBl
UmVsYXkuaAkocmV2aXNpb24gMjEwNTQ5KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91
dFRlc3RSZWxheS9MVFBpcGVSZWxheS5oCShub25leGlzdGVudCkKQEAgLTEsMzYgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgTFRQaXBlUmVsYXlfaAotI2RlZmluZSBMVFBpcGVSZWxheV9o
Ci0KLSNpbXBvcnQgIkxUUmVsYXkuaCIKLQotQGludGVyZmFjZSBMVFBpcGVSZWxheSA6IE5TT2Jq
ZWN0IDxMVFJlbGF5PgotQHByb3BlcnR5ICh3ZWFrKSBpZDxMVFJlbGF5RGVsZWdhdGU+IHJlbGF5
RGVsZWdhdGU7Ci0tIChpZClpbml0V2l0aFByZWZpeDooTlNTdHJpbmcgKilwcmVmaXg7Ci1AZW5k
Ci0KLSNlbmRpZgpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9M
VFBpcGVSZWxheS5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRU
ZXN0UmVsYXkvTFRQaXBlUmVsYXkubQkocmV2aXNpb24gMjEwNTQ5KQorKysgVG9vbHMvTGF5b3V0
VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5tCShub25leGlzdGVudCkKQEAg
LTEsMTU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJMVFBpcGVSZWxheS5oIgotCi0j
aW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgot
I2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCi1AaW50ZXJmYWNlIExUUGlwZVJlbGF5ICgpCi1AcHJv
cGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TU3RyaW5nICpmaWZvUHJlZml4OwotQHByb3BlcnR5
IChzdHJvbmcpIE5TT3V0cHV0U3RyZWFtICpzdGFuZGFyZElucHV0UGlwZTsKLUBwcm9wZXJ0eSAo
c3Ryb25nKSBOU0lucHV0U3RyZWFtICpzdGFuZGFyZE91dHB1dFBpcGU7Ci1AcHJvcGVydHkgKHN0
cm9uZykgTlNJbnB1dFN0cmVhbSAqc3RhbmRhcmRFcnJvclBpcGU7Ci0KLS0gKHZvaWQpY3JlYXRl
RklGT3M7Ci0tICh2b2lkKWRlc3Ryb3lGSUZPczsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIExU
UGlwZVJlbGF5Ci0KLS0gKE5TU3RyaW5nICopaW5QaXBlUGF0aAotewotICAgIHJldHVybiBbX2Zp
Zm9QcmVmaXggc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6QCJfSU4iXTsKLX0KLQotLSAoTlNTdHJp
bmcgKilvdXRQaXBlUGF0aAotewotICAgIHJldHVybiBbX2ZpZm9QcmVmaXggc3RyaW5nQnlBcHBl
bmRpbmdTdHJpbmc6QCJfT1VUIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopZXJyb3JQaXBlUGF0aAot
ewotICAgIHJldHVybiBbX2ZpZm9QcmVmaXggc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6QCJfRVJS
T1IiXTsKLX0KLQotLSAoTlNPdXRwdXRTdHJlYW0gKikgb3V0cHV0U3RyZWFtCi17Ci0gICAgcmV0
dXJuIF9zdGFuZGFyZElucHV0UGlwZTsKLX0KLQotLSAoaWQpaW5pdFdpdGhQcmVmaXg6KE5TU3Ry
aW5nICopcHJlZml4Ci17Ci0gICAgaWYgKChzZWxmID0gW3N1cGVyIGluaXRdKSkgewotICAgICAg
ICBfZmlmb1ByZWZpeCA9IHByZWZpeDsKLSAgICAgICAgW3NlbGYgZGVzdHJveUZJRk9zXTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0dXAKLXsKLSAgICBbc2VsZiBk
ZXN0cm95RklGT3NdOwotICAgIFtzZWxmIGNyZWF0ZUZJRk9zXTsKLX0KLQotLSAodm9pZCl0ZWFy
RG93bgotewotICAgIFtzZWxmIGRlc3Ryb3lGSUZPc107Ci19Ci0KLS0odm9pZCkgY29ubmVjdAot
ewotICAgIF9zdGFuZGFyZElucHV0UGlwZSA9IFtOU091dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW1U
b0ZpbGVBdFBhdGg6W3NlbGYgaW5QaXBlUGF0aF0gYXBwZW5kOllFU107Ci0gICAgX3N0YW5kYXJk
T3V0cHV0UGlwZSA9IFtOU0lucHV0U3RyZWFtIGlucHV0U3RyZWFtV2l0aEZpbGVBdFBhdGg6W3Nl
bGYgb3V0UGlwZVBhdGhdXTsKLSAgICBfc3RhbmRhcmRFcnJvclBpcGUgPSBbTlNJbnB1dFN0cmVh
bSBpbnB1dFN0cmVhbVdpdGhGaWxlQXRQYXRoOltzZWxmIGVycm9yUGlwZVBhdGhdXTsKLQotICAg
IFtbc2VsZiBzdGFuZGFyZElucHV0UGlwZV0gc2V0RGVsZWdhdGU6c2VsZl07Ci0gICAgW1tzZWxm
IHN0YW5kYXJkT3V0cHV0UGlwZV0gc2V0RGVsZWdhdGU6c2VsZl07Ci0gICAgW1tzZWxmIHN0YW5k
YXJkRXJyb3JQaXBlXSBzZXREZWxlZ2F0ZTpzZWxmXTsKLQotICAgIFtbc2VsZiBzdGFuZGFyZE91
dHB1dFBpcGVdIHNjaGVkdWxlSW5SdW5Mb29wOltOU1J1bkxvb3AgbWFpblJ1bkxvb3BdIGZvck1v
ZGU6TlNEZWZhdWx0UnVuTG9vcE1vZGVdOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yUGlwZV0g
c2NoZWR1bGVJblJ1bkxvb3A6W05TUnVuTG9vcCBtYWluUnVuTG9vcF0gZm9yTW9kZTpOU0RlZmF1
bHRSdW5Mb29wTW9kZV07Ci0KLSAgICBbW3NlbGYgc3RhbmRhcmRJbnB1dFBpcGVdIG9wZW5dOwot
ICAgIFtbc2VsZiBzdGFuZGFyZE91dHB1dFBpcGVdIG9wZW5dOwotICAgIFtbc2VsZiBzdGFuZGFy
ZEVycm9yUGlwZV0gb3Blbl07Ci0KLSAgICBbW3NlbGYgcmVsYXlEZWxlZ2F0ZV0gZGlkQ29ubmVj
dF07Ci19Ci0KLS0gKHZvaWQpZGlzY29ubmVjdAotewotICAgIFtbc2VsZiBzdGFuZGFyZE91dHB1
dFBpcGVdIGNsb3NlXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRFcnJvclBpcGVdIGNsb3NlXTsKLSAg
ICBbW3NlbGYgc3RhbmRhcmRJbnB1dFBpcGVdIGNsb3NlXTsKLSAgICBbW3NlbGYgcmVsYXlEZWxl
Z2F0ZV0gZGlkRGlzY29ubmVjdF07Ci19Ci0KLS0gKHZvaWQpY3JlYXRlRklGT3MKLXsKLSAgICBt
a2ZpZm8oW1tzZWxmIGluUGlwZVBhdGhdIFVURjhTdHJpbmddLCAwNjY2KTsKLSAgICBta2ZpZm8o
W1tzZWxmIG91dFBpcGVQYXRoXSBVVEY4U3RyaW5nXSwgMDY2Nik7Ci0gICAgbWtmaWZvKFtbc2Vs
ZiBlcnJvclBpcGVQYXRoXSBVVEY4U3RyaW5nXSwgMDY2Nik7Ci19Ci0KLS0gKHZvaWQpZGVzdHJv
eUZJRk9zCi17Ci0gICAgdW5saW5rKFtbc2VsZiBpblBpcGVQYXRoXSBVVEY4U3RyaW5nXSk7Ci0g
ICAgdW5saW5rKFtbc2VsZiBvdXRQaXBlUGF0aF0gVVRGOFN0cmluZ10pOwotICAgIHVubGluayhb
W3NlbGYgZXJyb3JQaXBlUGF0aF0gVVRGOFN0cmluZ10pOwotfQotCi0tICh2b2lkKSByZWxheVN0
cmVhbTooTlNJbnB1dFN0cmVhbSAqKXN0cmVhbQotewotICAgIHVpbnQ4X3QgYnl0ZXNbMTAyNF07
Ci0gICAgTlNJbnRlZ2VyIGJ5dGVzUmVhZCA9IFtzdHJlYW0gcmVhZDpieXRlcyBtYXhMZW5ndGg6
MTAyNF07Ci0gICAgTlNEYXRhICpkYXRhID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmJ5dGVzIGxl
bmd0aDpieXRlc1JlYWRdOwotCi0gICAgaWYgKHN0cmVhbSA9PSBbc2VsZiBzdGFuZGFyZE91dHB1
dFBpcGVdKQotICAgICAgICBbW3NlbGYgcmVsYXlEZWxlZ2F0ZV0gZGlkUmVjZWl2ZVN0ZG91dERh
dGE6ZGF0YV07Ci0gICAgZWxzZQotICAgICAgICBbW3NlbGYgcmVsYXlEZWxlZ2F0ZV0gZGlkUmVj
ZWl2ZVN0ZGVyckRhdGE6ZGF0YV07Ci19Ci0KLS0gKHZvaWQpc3RyZWFtOihOU1N0cmVhbSAqKWFT
dHJlYW0gaGFuZGxlRXZlbnQ6KE5TU3RyZWFtRXZlbnQpZXZlbnRDb2RlCi17Ci0gICAgc3dpdGNo
IChldmVudENvZGUpIHsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnROb25lOgotICAgICAgICBicmVh
azsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnRIYXNCeXRlc0F2YWlsYWJsZToKLSAgICAgICAgW3Nl
bGYgcmVsYXlTdHJlYW06KE5TSW5wdXRTdHJlYW0gKilhU3RyZWFtXTsKLSAgICBjYXNlIE5TU3Ry
ZWFtRXZlbnRIYXNTcGFjZUF2YWlsYWJsZToKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOU1N0
cmVhbUV2ZW50T3BlbkNvbXBsZXRlZDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOU1N0cmVh
bUV2ZW50RW5kRW5jb3VudGVyZWQ6Ci0gICAgICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRD
cmFzaFdpdGhNZXNzYWdlOm5pbF07Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlNTdHJlYW1F
dmVudEVycm9yT2NjdXJyZWQ6Ci0gICAgICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRDcmFz
aFdpdGhNZXNzYWdlOltbYVN0cmVhbSBzdHJlYW1FcnJvcl0gZGVzY3JpcHRpb25dXTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotfQotCi1AZW5kCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkv
TGF5b3V0VGVzdFJlbGF5L0xUUmVsYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0
UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXkuaAkocmV2aXNpb24gMjEwNTQ5KQorKysgVG9v
bHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5LmgJKG5vbmV4aXN0ZW50
KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBMVFJlbGF5X2gKLSNkZWZp
bmUgTFRSZWxheV9oCi0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi1AcHJv
dG9jb2wgTFRSZWxheURlbGVnYXRlIDxOU09iamVjdD4KLS0gKHZvaWQpZGlkQ29ubmVjdDsKLS0g
KHZvaWQpZGlkRGlzY29ubmVjdDsKLS0gKHZvaWQpZGlkQ3Jhc2hXaXRoTWVzc2FnZTooTlNTdHJp
bmcgKiltZXNzYWdlOwotLSAodm9pZClkaWRSZWNlaXZlU3Rkb3V0RGF0YTooTlNEYXRhICopZGF0
YTsKLS0gKHZvaWQpZGlkUmVjZWl2ZVN0ZGVyckRhdGE6KE5TRGF0YSAqKWRhdGE7Ci1AZW5kCi0K
LUBwcm90b2NvbCBMVFJlbGF5IDxOU09iamVjdCwgTlNTdHJlYW1EZWxlZ2F0ZT4KLS0gKHZvaWQp
c2V0dXA7Ci0tICh2b2lkKXRlYXJEb3duOwotLSAodm9pZCljb25uZWN0OwotLSAodm9pZClkaXNj
b25uZWN0OwotQHByb3BlcnR5ICh3ZWFrKSBpZDxMVFJlbGF5RGVsZWdhdGU+IHJlbGF5RGVsZWdh
dGU7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TT3V0cHV0U3RyZWFtICpvdXRwdXRT
dHJlYW07Ci1AZW5kCi0KLSNlbmRpZgpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91
dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91
dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIuaAkocmV2aXNpb24g
MjEwNTQ5KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5
Q29udHJvbGxlci5oCShub25leGlzdGVudCkKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0j
aWZuZGVmIExUUmVsYXlDb250cm9sbGVyX2gKLSNkZWZpbmUgTFRSZWxheUNvbnRyb2xsZXJfaAot
Ci0jaW1wb3J0ICJMVFJlbGF5LmgiCi0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5o
PgotCi1AY2xhc3MgU2ltRGV2aWNlOwotCi1AaW50ZXJmYWNlIExUUmVsYXlDb250cm9sbGVyIDog
TlNPYmplY3QgPExUUmVsYXlEZWxlZ2F0ZT4KLS0gKGlkKWluaXRXaXRoRGV2aWNlOihTaW1EZXZp
Y2UgKilkZXZpY2UgcHJvZHVjdERpcjooTlNTdHJpbmcgKilwcm9kdWN0RGlyIGFwcFBhdGg6KE5T
U3RyaW5nICopYXBwUGF0aCBkZXZpY2VVRElEOihOU1VVSUQgKil1ZGlkIGR1bXBUb29sQXJndW1l
bnRzOihOU0FycmF5ICopYXJndW1lbnRzOwotLSAodm9pZClzdGFydDsKLS0gKHZvaWQpZmluaXNo
OwotQGVuZAotCi0jZW5kaWYKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0
UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0
UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLm0JKHJldmlzaW9uIDIxMDU0
OSkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheUNvbnRy
b2xsZXIubQkobm9uZXhpc3RlbnQpCkBAIC0xLDI3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lt
cG9ydCAiTFRSZWxheUNvbnRyb2xsZXIuaCIKLQotI2ltcG9ydCAiQ29yZVNpbXVsYXRvclNQSS5o
IgotI2ltcG9ydCAiTFRQaXBlUmVsYXkuaCIKLSNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KLSNp
bXBvcnQgPGNydF9leHRlcm5zLmg+Ci0KLUBpbnRlcmZhY2UgTFRSZWxheUNvbnRyb2xsZXIgKCkK
LUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgZGlzcGF0Y2hfc291cmNlX3Qgc3RhbmRhcmRJ
bnB1dERpc3BhdGNoU291cmNlOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU0ZpbGVI
YW5kbGUgKnN0YW5kYXJkT3V0cHV0OwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU0Zp
bGVIYW5kbGUgKnN0YW5kYXJkRXJyb3I7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5T
U3RyaW5nICppcGNJZGVudGlmaWVyOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU1N0
cmluZyAqYXBwQnVuZGxlSWRlbnRpZmllcjsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykg
TlNTdHJpbmcgKmFwcFBhdGg7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TVVVJRCAq
ZGV2aWNlVURJRDsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNBcnJheSAqZHVtcFRv
b2xBcmd1bWVudHM7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TU3RyaW5nICpwcm9k
dWN0RGlyOwotQHByb3BlcnR5IChzdHJvbmcpIFNpbURldmljZSAqZGV2aWNlOwotQHByb3BlcnR5
IChzdHJvbmcpIGlkPExUUmVsYXk+IHJlbGF5OwotQHByb3BlcnR5IHBpZF90IHBpZDsKLUBwcm9w
ZXJ0eSAoc3Ryb25nKSBkaXNwYXRjaF9zb3VyY2VfdCBhcHBEaXNwYXRjaFNvdXJjZTsKLUBlbmQK
LQotQGltcGxlbWVudGF0aW9uIExUUmVsYXlDb250cm9sbGVyCi0KLS0gKGlkKWluaXRXaXRoRGV2
aWNlOihTaW1EZXZpY2UgKilkZXZpY2UgcHJvZHVjdERpcjooTlNTdHJpbmcgKilwcm9kdWN0RGly
IGFwcFBhdGg6KE5TU3RyaW5nICopYXBwUGF0aCBkZXZpY2VVRElEOihOU1VVSUQgKil1ZGlkIGR1
bXBUb29sQXJndW1lbnRzOihOU0FycmF5ICopYXJndW1lbnRzCi17Ci0gICAgaWYgKChzZWxmID0g
W3N1cGVyIGluaXRdKSkgewotICAgICAgICBfZGV2aWNlID0gZGV2aWNlOwotICAgICAgICBfcHJv
ZHVjdERpciA9IHByb2R1Y3REaXI7Ci0gICAgICAgIF9hcHBQYXRoID0gYXBwUGF0aDsKLSAgICAg
ICAgX2FwcEJ1bmRsZUlkZW50aWZpZXIgPSBbW05TQnVuZGxlIGJ1bmRsZVdpdGhQYXRoOmFwcFBh
dGhdIGJ1bmRsZUlkZW50aWZpZXJdOwotICAgICAgICBfZGV2aWNlVURJRCA9IHVkaWQ7Ci0gICAg
ICAgIF9kdW1wVG9vbEFyZ3VtZW50cyA9IGFyZ3VtZW50czsKLSAgICAgICAgX3N0YW5kYXJkSW5w
dXREaXNwYXRjaFNvdXJjZSA9IGRpc3BhdGNoX3NvdXJjZV9jcmVhdGUoRElTUEFUQ0hfU09VUkNF
X1RZUEVfUkVBRCwgU1RESU5fRklMRU5PLCAwLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpKTsK
LSAgICAgICAgX3N0YW5kYXJkT3V0cHV0ID0gW05TRmlsZUhhbmRsZSBmaWxlSGFuZGxlV2l0aFN0
YW5kYXJkT3V0cHV0XTsKLSAgICAgICAgX3N0YW5kYXJkRXJyb3IgPSBbTlNGaWxlSGFuZGxlIGZp
bGVIYW5kbGVXaXRoU3RhbmRhcmRFcnJvcl07Ci0KLSAgICAgICAgZGlzcGF0Y2hfc291cmNlX3Nl
dF9ldmVudF9oYW5kbGVyKF9zdGFuZGFyZElucHV0RGlzcGF0Y2hTb3VyY2UsIF57Ci0gICAgICAg
ICAgICB1aW50OF90IGJ1ZmZlclsxMDI0XTsKLSAgICAgICAgICAgIHNzaXplX3QgbGVuID0gcmVh
ZChTVERJTl9GSUxFTk8sIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOwotICAgICAgICAgICAgaWYg
KGxlbiA+IDApIHsKLSAgICAgICAgICAgICAgICBAdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAg
W1tbc2VsZiByZWxheV0gb3V0cHV0U3RyZWFtXSB3cml0ZTpidWZmZXIgbWF4TGVuZ3RoOmxlbl07
Ci0gICAgICAgICAgICAgICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICplKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhlIGR1bXAgdG9vbCBjcmFzaGVkLiBUaW1lIHRv
IGRpZS4KLSAgICAgICAgICAgICAgICAgICAgW3NlbGYgZGlkQ3Jhc2hXaXRoTWVzc2FnZTpuaWxd
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgLy8gRU9GIFJlY2VpdmVkIG9uIHRoZSByZWxheSdzIHN0YW5kYXJkIGlucHV0LgotICAgICAg
ICAgICAgICAgIFtzZWxmIGZpbmlzaF07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0g
ICAgICAgIF9yZWxheSA9IFtbTFRQaXBlUmVsYXkgYWxsb2NdIGluaXRXaXRoUHJlZml4OltAIi90
bXAiIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpzZWxmLmlwY0lkZW50aWZpZXJdXTsK
LSAgICAgICAgW19yZWxheSBzZXRSZWxheURlbGVnYXRlOnNlbGZdOwotICAgIH0KLSAgICByZXR1
cm4gc2VsZjsKLX0KLQotLSAoTlNTdHJpbmcgKilpcGNJZGVudGlmaWVyCi17Ci0gICAgcmV0dXJu
IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAtJUAiLCBzZWxmLmFwcEJ1bmRsZUlkZW50
aWZpZXIsIHNlbGYuZGV2aWNlVURJRC5VVUlEU3RyaW5nXTsKLX0KLQotLSAoTlNTdHJpbmcgKilw
cm9jZXNzTmFtZQotewotICAgIHJldHVybiBbc2VsZi5hcHBCdW5kbGVJZGVudGlmaWVyIGNvbXBv
bmVudHNTZXBhcmF0ZWRCeVN0cmluZzpAIi4iXS5sYXN0T2JqZWN0OwotfQotCi0tICh2b2lkKWRp
ZFJlY2VpdmVTdGRvdXREYXRhOihOU0RhdGEgKilkYXRhCi17Ci0gICAgQHRyeSB7Ci0gICAgICAg
IFtbc2VsZiBzdGFuZGFyZE91dHB1dF0gd3JpdGVEYXRhOmRhdGFdOwotICAgIH0gQGNhdGNoIChO
U0V4Y2VwdGlvbiAqZXhjZXB0aW9uKSB7Ci0gICAgICAgIC8vIE5TRmlsZUhhbmRsZU9wZXJhdGlv
bkV4Y2VwdGlvbgotICAgICAgICAvLyBCcm9rZW4gcGlwZSAtIHRoZSB0ZXN0IGhhcm5lc3Mgc3Rv
cHBlZCBsaXN0ZW5pbmcgdG8gdXMsCi0gICAgICAgIC8vIHByb2JhYmx5IGJlY2F1c2Ugd2UgdGlt
ZWQgb3V0IG9yIGEgcnVuIHdhcyBjYW5jZWxlZC4KLSAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUp
OwotICAgIH0KLX0KLQotLSAodm9pZClkaWRSZWNlaXZlU3RkZXJyRGF0YTooTlNEYXRhICopZGF0
YQotewotICAgIEB0cnkgewotICAgICAgICBbW3NlbGYgc3RhbmRhcmRFcnJvcl0gd3JpdGVEYXRh
OmRhdGFdOwotICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAqZXhjZXB0aW9uKSB7Ci0gICAgICAg
IC8vIE5TRmlsZUhhbmRsZU9wZXJhdGlvbkV4Y2VwdGlvbgotICAgICAgICAvLyBCcm9rZW4gcGlw
ZSAtIHRoZSB0ZXN0IGhhcm5lc3Mgc3RvcHBlZCBsaXN0ZW5pbmcgdG8gdXMsCi0gICAgICAgIC8v
IHByb2JhYmx5IGJlY2F1c2Ugd2UgdGltZWQgb3V0IG9yIGEgcnVuIHdhcyBjYW5jZWxlZC4KLSAg
ICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0KLX0KLQotLSAodm9pZClkaWREaXNjb25u
ZWN0Ci17Ci0gICAgZGlzcGF0Y2hfc3VzcGVuZChbc2VsZiBzdGFuZGFyZElucHV0RGlzcGF0Y2hT
b3VyY2VdKTsKLX0KLQotLSAodm9pZClkaWRDb25uZWN0Ci17Ci0gICAgZGlzcGF0Y2hfcmVzdW1l
KFtzZWxmIHN0YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJjZV0pOwotfQotCi0tICh2b2lkKWRpZENy
YXNoV2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIFtbc2VsZiByZWxheV0g
ZGlzY29ubmVjdF07Ci0gICAgTlNTdHJpbmcgKmNyYXNoTWVzc2FnZSA9IFtOU1N0cmluZyBzdHJp
bmdXaXRoRm9ybWF0OkAiXG4jQ1JBU0hFRCAtICVAIChwaWQgJWQpXG4iLCBbc2VsZiBwcm9jZXNz
TmFtZV0sIFtzZWxmIHBpZF1dOwotCi0gICAgaWYgKG1lc3NhZ2UpCi0gICAgICAgIGNyYXNoTWVz
c2FnZSA9IFtjcmFzaE1lc3NhZ2Ugc3RyaW5nQnlBcHBlbmRpbmdGb3JtYXQ6QCIlQFxuIiwgbWVz
c2FnZV07Ci0KLSAgICBbW3NlbGYgc3RhbmRhcmRFcnJvcl0gd3JpdGVEYXRhOltjcmFzaE1lc3Nh
Z2UgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddXTsKLSAgICBbW3NlbGYg
c3RhbmRhcmRFcnJvcl0gY2xvc2VGaWxlXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRdIGNs
b3NlRmlsZV07Ci0gICAgZXhpdChFWElUX0ZBSUxVUkUpOwotfQotCi0tICh2b2lkKWluc3RhbGxB
cHAKLXsKLSAgICBOU0RpY3Rpb25hcnkgKmluc3RhbGxPcHRpb25zID0gQHsKLSAgICAgICAgKE5T
U3RyaW5nICopa0NGQnVuZGxlSWRlbnRpZmllcktleTogc2VsZi5hcHBCdW5kbGVJZGVudGlmaWVy
LAotICAgIH07Ci0KLSAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKLSAgICBCT09MIGluc3RhbGxl
ZCA9IFtzZWxmLmRldmljZSBpbnN0YWxsQXBwbGljYXRpb246W05TVVJMIGZpbGVVUkxXaXRoUGF0
aDpzZWxmLmFwcFBhdGhdIHdpdGhPcHRpb25zOmluc3RhbGxPcHRpb25zIGVycm9yOiZlcnJvcl07
Ci0gICAgaWYgKCFpbnN0YWxsZWQpIHsKLSAgICAgICAgTlNMb2coQCJDb3VsZG4ndCBpbnN0YWxs
ICVAOiAlQCIsIHNlbGYuYXBwUGF0aCwgZXJyb3IuZGVzY3JpcHRpb24pOwotICAgICAgICBleGl0
KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotfQotCi0tICh2b2lkKWtpbGxBcHAKLXsKLSAgICBkaXNw
YXRjaF9zb3VyY2VfdCBkaXNwYXRjaCA9IFtzZWxmIGFwcERpc3BhdGNoU291cmNlXTsKLQotICAg
IGlmIChkaXNwYXRjaCkKLSAgICAgICAgZGlzcGF0Y2hfc291cmNlX2NhbmNlbChkaXNwYXRjaCk7
Ci0KLSAgICBpZiAoW3NlbGYgcGlkXSA+IDEpIHsKLSAgICAgICAga2lsbChzZWxmLnBpZCwgU0lH
S0lMTCk7Ci0gICAgICAgIFtzZWxmIHNldFBpZDotMV07Ci0gICAgfQotICAgIFtzZWxmIHNldEFw
cERpc3BhdGNoU291cmNlOm5pbF07Ci19Ci0KLS0gKE5TRGljdGlvbmFyeSAqKV9lbnZpcm9ubWVu
dFZhcmlhYmxlcwotewotICAgIHN0YXRpYyBOU0RpY3Rpb25hcnkgKmVudmlyb25tZW50VmFyaWFi
bGVzOwotICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZTsKLQotICAgIGRpc3BhdGNoX29u
Y2UoJm9uY2UsIF57Ci0gICAgICAgIE5TU3RyaW5nICpwcm9kdWN0RGlyZWN0b3J5ID0gW3NlbGYg
cHJvZHVjdERpcl07Ci0KLSAgICAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqZGljdGlvbmFyeSA9
IFtAewotICAgICAgICAgICAgQCJJUENfSURFTlRJRklFUiI6IHNlbGYuaXBjSWRlbnRpZmllciwK
LSAgICAgICAgICAgIEAiRFlMRF9GUkFNRVdPUktfUEFUSCI6IHByb2R1Y3REaXJlY3RvcnksCi0g
ICAgICAgICAgICBAIl9fWFBDX0RZTERfRlJBTUVXT1JLX1BBVEgiOiBwcm9kdWN0RGlyZWN0b3J5
LAotICAgICAgICAgICAgQCJEWUxEX0xJQlJBUllfUEFUSCI6IHByb2R1Y3REaXJlY3RvcnksCi0g
ICAgICAgICAgICBAIl9fWFBDX0RZTERfTElCUkFSWV9QQVRIIjogcHJvZHVjdERpcmVjdG9yeSwK
LSAgICAgICAgfSBtdXRhYmxlQ29weV07Ci0KLSAgICAgICAgZm9yIChOU1N0cmluZyAqa2V5TmFt
ZSBpbiBAW0AiRFlMRF9JTlNFUlRfTElCUkFSSUVTIiwgQCJNYWxsb2NTdGFja0xvZ2dpbmciLCBA
IkxPQ0FMX1JFU09VUkNFX1JPT1QiLCBAIkRVTVBSRU5ERVJUUkVFX1RFTVAiXSkgewotICAgICAg
ICAgICAgY29uc3QgY2hhciogdmFsdWUgPSBnZXRlbnYoW2tleU5hbWUgVVRGOFN0cmluZ10pOwot
ICAgICAgICAgICAgaWYgKHZhbHVlICYmIHN0cmxlbih2YWx1ZSkpIHsKLSAgICAgICAgICAgICAg
ICBOU1N0cmluZyAqbnNWYWx1ZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzp2YWx1
ZV07Ci0gICAgICAgICAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0Om5zVmFsdWUgZm9yS2V5
OmtleU5hbWVdOwotICAgICAgICAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpuc1ZhbHVl
IGZvcktleTpbQCJfX1hQQ18iIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOmtleU5hbWVdXTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoY2hhcioqIGVudnAgPSAqX05T
R2V0RW52aXJvbigpOyAqZW52cDsgZW52cCsrKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBl
bnYgPSAqZW52cDsKLSAgICAgICAgICAgIGlmICghc3RybmNtcCgiSlNDXyIsIGVudiwgNCkgfHwg
IXN0cm5jbXAoIl9fWFBDX0pTQ18iLCBlbnYsIDEwKSkgewotICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIqIGVxdWFsID0gc3RyY2hyKGVudiwgJz0nKTsKLSAgICAgICAgICAgICAgICBpZiAoIWVx
dWFsKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5TTG9nKEAiTWlzc2luZyAnPScgaW4gZW52IHZh
ciAnJXMnIiwgZW52KTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhLZXlMZW5n
dGggPSAyNTY7Ci0gICAgICAgICAgICAgICAgc2l6ZV90IGtleUxlbmd0aCA9IGVxdWFsIC0gZW52
OwotICAgICAgICAgICAgICAgIGlmIChrZXlMZW5ndGggPj0gbWF4S2V5TGVuZ3RoKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIE5TTG9nKEAiRW52IHZhciAnJXMnIGlzIHRvbyBsb25nIiwgZW52KTsK
LSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgY2hhciBrZXlbbWF4S2V5TGVuZ3RoXTsKLSAgICAgICAgICAgICAgICBzdHJu
Y3B5KGtleSwgZW52LCBrZXlMZW5ndGgpOwotICAgICAgICAgICAgICAgIGtleVtrZXlMZW5ndGhd
ID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB2YWx1ZSA9IGVxdWFsICsgMTsK
LQotICAgICAgICAgICAgICAgIE5TU3RyaW5nICpuc0tleSA9IFtOU1N0cmluZyBzdHJpbmdXaXRo
VVRGOFN0cmluZzprZXldOwotICAgICAgICAgICAgICAgIE5TU3RyaW5nICpuc1ZhbHVlID0gW05T
U3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnZhbHVlXTsKLSAgICAgICAgICAgICAgICBbZGlj
dGlvbmFyeSBzZXRPYmplY3Q6bnNWYWx1ZSBmb3JLZXk6bnNLZXldOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXMgPSBbZGljdGlvbmFyeSBj
b3B5XTsKLSAgICB9KTsKLQotICAgIHJldHVybiBlbnZpcm9ubWVudFZhcmlhYmxlczsKLX0KLQot
LSAodm9pZClsYXVuY2hBcHAKLXsKLSAgICBOU0RpY3Rpb25hcnkgKmxhdW5jaE9wdGlvbnMgPSBA
ewotICAgICAgICBrU2ltRGV2aWNlTGF1bmNoQXBwbGljYXRpb25FbnZpcm9ubWVudDogW3NlbGYg
X2Vudmlyb25tZW50VmFyaWFibGVzXSwKLSAgICAgICAga1NpbURldmljZUxhdW5jaEFwcGxpY2F0
aW9uQXJndW1lbnRzOiBbc2VsZiBkdW1wVG9vbEFyZ3VtZW50c10sCi0gICAgfTsKLQotICAgIE5T
RXJyb3IgKmVycm9yOwotICAgIHBpZF90IHBpZCA9IFtzZWxmLmRldmljZSBsYXVuY2hBcHBsaWNh
dGlvbldpdGhJRDpzZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIgb3B0aW9uczpsYXVuY2hPcHRpb25z
IGVycm9yOiZlcnJvcl07Ci0KLSAgICBpZiAocGlkIDwgMCkgewotICAgICAgICBOU0xvZyhAIkNv
dWxkbid0IGxhdW5jaCAlQDogJUAiLCBzZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIsIGVycm9yLmRl
c2NyaXB0aW9uKTsKLSAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0KLQotICAgIFtz
ZWxmIHNldFBpZDpwaWRdOwotCi0gICAgZGlzcGF0Y2hfcXVldWVfdCBxdWV1ZSA9IGRpc3BhdGNo
X2dldF9tYWluX3F1ZXVlKCk7Ci0gICAgZGlzcGF0Y2hfc291cmNlX3Qgc2ltdWxhdG9yQXBwRXhp
dERpc3BhdGNoU291cmNlID0gZGlzcGF0Y2hfc291cmNlX2NyZWF0ZShESVNQQVRDSF9TT1VSQ0Vf
VFlQRV9QUk9DLCBbc2VsZiBwaWRdLCBESVNQQVRDSF9QUk9DX0VYSVQsIHF1ZXVlKTsKLSAgICBb
c2VsZiBzZXRBcHBEaXNwYXRjaFNvdXJjZTpzaW11bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3VyY2Vd
OwotICAgIGRpc3BhdGNoX3NvdXJjZV9zZXRfZXZlbnRfaGFuZGxlcihzaW11bGF0b3JBcHBFeGl0
RGlzcGF0Y2hTb3VyY2UsIF57Ci0gICAgICAgIGRpc3BhdGNoX3NvdXJjZV9jYW5jZWwoc2ltdWxh
dG9yQXBwRXhpdERpc3BhdGNoU291cmNlKTsKLSAgICAgICAgW3NlbGYgZGlkQ3Jhc2hXaXRoTWVz
c2FnZTpuaWxdOwotICAgIH0pOwotICAgIGRpc3BhdGNoX3Jlc3VtZShzaW11bGF0b3JBcHBFeGl0
RGlzcGF0Y2hTb3VyY2UpOwotfQotCi0tICh2b2lkKXN0YXJ0Ci17Ci0gICAgW3NlbGYgaW5zdGFs
bEFwcF07Ci0gICAgW1tzZWxmIHJlbGF5XSBzZXR1cF07Ci0gICAgW3NlbGYgbGF1bmNoQXBwXTsK
LSAgICBbW3NlbGYgcmVsYXldIGNvbm5lY3RdOwotfQotCi0tICh2b2lkKWZpbmlzaAotewotICAg
IFtbc2VsZiByZWxheV0gZGlzY29ubmVjdF07Ci0gICAgW3NlbGYga2lsbEFwcF07Ci0gICAgZXhp
dChFWElUX1NVQ0NFU1MpOwotfQotCi1AZW5kCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkv
TGF5b3V0VGVzdFJlbGF5L21haW4ubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVs
YXkvTGF5b3V0VGVzdFJlbGF5L21haW4ubQkocmV2aXNpb24gMjEwNTQ5KQorKysgVG9vbHMvTGF5
b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9tYWluLm0JKG5vbmV4aXN0ZW50KQpAQCAtMSwx
MzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgIkNvcmVTaW11bGF0b3JTUEku
aCIKLSNpbXBvcnQgIkxUUmVsYXlDb250cm9sbGVyLmgiCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0Zv
dW5kYXRpb24uaD4KLQotc3RhdGljIExUUmVsYXlDb250cm9sbGVyICpyZWxheUNvbnRyb2xsZXI7
Ci0KLXZvaWQgdXNhZ2UoKQotewotICAgIE5TU3RyaW5nICpoZWxwVGV4dCA9IEAiTGF5b3V0VGVz
dFJlbGF5OiBydW4gYSBkdW1wIHRvb2wgaW4gdGhlIHNpbXVsYXRvci4gTm90IGZvciBkaXJlY3Qg
Y29uc3VtcHRpb24uXG4iCi0gICAgICAgICJVc2FnZTogTGF5b3V0VGVzdFJlbGF5IFstaF0gW29w
dGlvbnNdIC0tIFtkdW1wIHRvb2wgYXJndW1lbnRzXVxuIgotICAgICAgICAiUmVxdWlyZWQgb3B0
aW9uczpcbiIKLSAgICAgICAgIiAgICAtdWRpZCA8aWRlbnRpZmllcj4gICAgICAgU2ltdWxhdG9y
IGRldmljZSBpZGVudGlmaWVyXG4iCi0gICAgICAgICIgICAgLWFwcCA8YXBwX3BhdGg+ICAgICAg
ICAgIFBhdGggdG8gdGhlIGJ1aWx0IGlPUyAuYXBwIGJ1bmRsZSBkaXJlY3RvcnkuXG4iCi0gICAg
ICAgICIgICAgLXByb2R1Y3REaXIgPGRpcj4gICAgICAgIC9wYXRoL3RvL1dlYktpdEJ1aWxkL3tj
b25maWd1cmF0aW9ufS17c2hvcnQgcGxhdGZvcm19LlxuIjsKLQotICAgIGZwcmludGYoc3RkZXJy
LCAiJXNcbiIsIFtoZWxwVGV4dCBVVEY4U3RyaW5nXSk7Ci19Ci0KLU5TU3RyaW5nICpnZXRSZXF1
aXJlZFN0cmluZ0FyZ3VtZW50KE5TU3RyaW5nICpwYXJhbWV0ZXIpCi17Ci0gICAgTlNVc2VyRGVm
YXVsdHMgKmRlZmF1bHRzID0gW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXTsK
LSAgICBOU1N0cmluZyAqYXJndW1lbnQgPSBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OnBhcmFtZXRl
cl07Ci0KLSAgICBpZiAoIWFyZ3VtZW50KSB7Ci0gICAgICAgIE5TTG9nKEAiLSVAIGlzIHJlcXVp
cmVkLiIsIHBhcmFtZXRlcik7Ci0gICAgICAgIHVzYWdlKCk7Ci0gICAgICAgIGV4aXQoRVhJVF9G
QUlMVVJFKTsKLSAgICB9Ci0gICAgcmV0dXJuIGFyZ3VtZW50OwotfQotCi1OU0FycmF5ICpnZXRE
dW1wVG9vbEFyZ3VtZW50cygpCi17Ci0gICAgTlNNdXRhYmxlQXJyYXkgKmR1bXBUb29sQXJndW1l
bnRzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07Ci0gICAgTlNBcnJheSAqcHJvY2Vz
c0FyZ3MgPSBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIGFyZ3VtZW50c107Ci0gICAgQk9P
TCBhcHBlbmRpbmcgPSBOTzsKLSAgICBmb3IgKE5TU3RyaW5nICphcmcgaW4gcHJvY2Vzc0FyZ3Mp
IHsKLSAgICAgICAgaWYgKFthcmcgaXNFcXVhbFRvU3RyaW5nOkAiLS0iXSkgewotICAgICAgICAg
ICAgYXBwZW5kaW5nID0gWUVTOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKGFwcGVuZGluZykKLSAgICAgICAgICAgIFtkdW1wVG9vbEFyZ3VtZW50cyBhZGRP
YmplY3Q6YXJnXTsKLSAgICB9Ci0gICAgcmV0dXJuIGR1bXBUb29sQXJndW1lbnRzOwotfQotCi12
b2lkIGZpbmlzaCgpCi17Ci0gICAgW3JlbGF5Q29udHJvbGxlciBmaW5pc2hdOwotfQotCi12b2lk
IHJlY2VpdmVkU2lnbmFsKGludCBzaWduYWwpCi17Ci0gICAgZXhpdChFWElUX1NVQ0NFU1MpOwot
fQotCi1pbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqIGFyZ3ZbXSkKLXsKLSAgICBAYXV0
b3JlbGVhc2Vwb29sIHsKLSAgICAgICAgTlNBcnJheSAqaGVscEFyZ3VtZW50cyA9IEBbQCItaCIs
IEAiLS1oZWxwIl07Ci0gICAgICAgIGZvciAoTlNTdHJpbmcgKmhlbHBBcmd1bWVudCBpbiBoZWxw
QXJndW1lbnRzKSB7Ci0gICAgICAgICAgICBpZiAoW1tbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5m
b10gYXJndW1lbnRzXSBpbmRleE9mT2JqZWN0OmhlbHBBcmd1bWVudF0gIT0gTlNOb3RGb3VuZCkg
ewotICAgICAgICAgICAgICAgIHVzYWdlKCk7Ci0gICAgICAgICAgICAgICAgZXhpdChFWElUX0ZB
SUxVUkUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSNpZiBVU0VfU0lNX1NFUlZJQ0Vf
Q09OVEVYVAotICAgICAgICBOU1N0cmluZyAqZGV2ZWxvcGVyRGlyZWN0b3J5ID0gZ2V0UmVxdWly
ZWRTdHJpbmdBcmd1bWVudChAImRldmVsb3BlckRpciIpOwotI2VuZGlmCi0gICAgICAgIE5TVVVJ
RCAqdWRpZCA9IFtbTlNVVUlEIGFsbG9jXSBpbml0V2l0aFVVSURTdHJpbmc6Z2V0UmVxdWlyZWRT
dHJpbmdBcmd1bWVudChAInVkaWQiKV07Ci0gICAgICAgIE5TU3RyaW5nICphcHBQYXRoID0gZ2V0
UmVxdWlyZWRTdHJpbmdBcmd1bWVudChAImFwcCIpOwotICAgICAgICBOU1N0cmluZyAqcHJvZHVj
dERpcmVjdG9yeSA9IGdldFJlcXVpcmVkU3RyaW5nQXJndW1lbnQoQCJwcm9kdWN0RGlyIik7Ci0g
ICAgICAgIE5TQXJyYXkgKmR1bXBUb29sQXJndW1lbnRzID0gZ2V0RHVtcFRvb2xBcmd1bWVudHMo
KTsKLQotI2lmIFVTRV9TSU1fU0VSVklDRV9DT05URVhUCi0gICAgICAgIE5TRXJyb3IgKmVycm9y
OwotICAgICAgICBTaW1TZXJ2aWNlQ29udGV4dCAqc2VydmljZUNvbnRleHQgPSBbU2ltU2Vydmlj
ZUNvbnRleHQgc2hhcmVkU2VydmljZUNvbnRleHRGb3JEZXZlbG9wZXJEaXI6ZGV2ZWxvcGVyRGly
ZWN0b3J5IGVycm9yOiZlcnJvcl07Ci0gICAgICAgIGlmICghc2VydmljZUNvbnRleHQpIHsKLSAg
ICAgICAgICAgIE5TTG9nKEAiRGV2aWNlIGNvbnRleHQgY291bGRuJ3QgYmUgZm91bmQ6ICVAIiwg
ZXJyb3IpOwotICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0gICAg
ICAgIFNpbURldmljZVNldCAqZGV2aWNlU2V0ID0gW3NlcnZpY2VDb250ZXh0IGRlZmF1bHREZXZp
Y2VTZXRXaXRoRXJyb3I6bmlsXTsKLSAgICAgICAgaWYgKCFkZXZpY2VTZXQpIHsKLSAgICAgICAg
ICAgIE5TTG9nKEAiRGVmYXVsdCBkZXZpY2Ugc2V0IGNvdWxkbid0IGJlIGZvdW5kOiAlQCIsIGVy
cm9yKTsKLSAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAgICAgfQotICAgICAg
ICBTaW1EZXZpY2UgKmRldmljZSA9IFtkZXZpY2VTZXQuZGV2aWNlc0J5VURJRCBvYmplY3RGb3JL
ZXk6dWRpZF07Ci0jZWxzZQotICAgICAgICBTaW1EZXZpY2UgKmRldmljZSA9IFtTaW1EZXZpY2VT
ZXQuZGVmYXVsdFNldC5kZXZpY2VzQnlVRElEIG9iamVjdEZvcktleTp1ZGlkXTsKLSNlbmRpZgot
ICAgICAgICBpZiAoIWRldmljZSkgewotICAgICAgICAgICAgTlNMb2coQCJEZXZpY2UgJUAgY291
bGRuJ3QgYmUgZm91bmQiLCB1ZGlkKTsKLSAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHJlbGF5Q29udHJvbGxlciA9IFtbTFRSZWxheUNvbnRyb2xs
ZXIgYWxsb2NdIGluaXRXaXRoRGV2aWNlOmRldmljZSBwcm9kdWN0RGlyOnByb2R1Y3REaXJlY3Rv
cnkgYXBwUGF0aDphcHBQYXRoIGRldmljZVVESUQ6dWRpZCBkdW1wVG9vbEFyZ3VtZW50czpkdW1w
VG9vbEFyZ3VtZW50c107Ci0gICAgICAgIFtyZWxheUNvbnRyb2xsZXIgc3RhcnRdOwotCi0gICAg
ICAgIGF0ZXhpdChmaW5pc2gpOwotICAgICAgICBzaWduYWwoU0lHSU5ULCByZWNlaXZlZFNpZ25h
bCk7Ci0gICAgICAgIHNpZ25hbChTSUdURVJNLCByZWNlaXZlZFNpZ25hbCk7Ci0KLSAgICAgICAg
W1tOU1J1bkxvb3AgbWFpblJ1bkxvb3BdIHJ1bl07Ci0gICAgfQotICAgIHJldHVybiAwOwotfQpJ
bmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRU
ZXN0UmVsYXkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjEwNTQ5KQorKysg
VG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShub25leGlzdGVudCkKQEAgLTEsMjAyICswLDAgQEAKLS8vICEkKlVURjgqJCEKLXsK
LQlhcmNoaXZlVmVyc2lvbiA9IDE7Ci0JY2xhc3NlcyA9IHsKLQl9OwotCW9iamVjdFZlcnNpb24g
PSA0NjsKLQlvYmplY3RzID0gewotCi0vKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwot
CQkyRThEM0VGODE5ODgxRDQzMDA0RjZDQzIgLyogbWFpbi5tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU4RDNFRjcxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1h
aW4ubSAqLzsgfTsKLQkJMkU4RDNGMDIxOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lm0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRThEM0YwMTE5
ODgxRkQwMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkubSAqLzsgfTsKLQkJMkU4RDNGMDYxOTg4MjQw
NjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRThEM0YwNTE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxh
eUNvbnRyb2xsZXIubSAqLzsgfTsKLS8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwotCi0v
KiBCZWdpbiBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjIxOTg4
MUQ0MzAwNEY2Q0MyIC8qIENvcHlGaWxlcyAqLyA9IHsKLQkJCWlzYSA9IFBCWENvcHlGaWxlc0J1
aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZHN0UGF0aCA9
IC91c3Ivc2hhcmUvbWFuL21hbjEvOwotCQkJZHN0U3ViZm9sZGVyU3BlYyA9IDA7Ci0JCQlmaWxl
cyA9ICgKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMTsK
LQkJfTsKLS8qIEVuZCBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQotLyogQmVn
aW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCi0JCTJFOEQzRUY0MTk4ODFENDMwMDRGNkND
MiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGlj
aXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4
ID0gMDsgcGF0aCA9IExheW91dFRlc3RSZWxheTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RT
X0RJUjsgfTsKLQkJMkU4RDNFRjcxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpj
OyBwYXRoID0gbWFpbi5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0VGRTE5
ODgxRTEzMDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgbmFtZSA9IERl
YnVnUmVsZWFzZS54Y2NvbmZpZzsgcGF0aCA9IENvbmZpZ3VyYXRpb25zL0RlYnVnUmVsZWFzZS54
Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNFRkYxOTg4MUUyNTAw
NEY2Q0MyIC8qIEJhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBuYW1lID0gQmFzZS54Y2NvbmZpZzsgcGF0
aCA9IENvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTJFOEQzRjAwMTk4ODFGMjkwMDRGNkNDMiAvKiBMVFJlbGF5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IExUUmVsYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDExOTg4
MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2Jq
YzsgcGF0aCA9IExUUGlwZVJlbGF5Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJF
OEQzRjAzMTk4ODFGRTIwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBM
VFBpcGVSZWxheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0YwNDE5ODgy
NDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTFRSZWxheUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMkU4RDNGMDUxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLm0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IExUUmVsYXlDb250cm9sbGVyLm07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNFMUZCQzE1MUIyOTBFNzkwMDAxMzZGNSAvKiBD
b3JlU2ltdWxhdG9yU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcmVT
aW11bGF0b3JTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLS8qIEVuZCBQQlhGaWxl
UmVmZXJlbmNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ug
c2VjdGlvbiAqLwotCQkyRThEM0VGMTE5ODgxRDQzMDA0RjZDQzIgLyogRnJhbWV3b3JrcyAqLyA9
IHsKLQkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9OwotLyogRW5kIFBCWEZyYW1ld29ya3NCdWlsZFBo
YXNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYR3JvdXAgc2VjdGlvbiAqLwotCQkyRThEM0VF
QjE5ODgxRDQzMDA0RjZDQzIgPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0g
KAotCQkJCTJFOEQzRUZGMTk4ODFFMjUwMDRGNkNDMiAvKiBCYXNlLnhjY29uZmlnICovLAotCQkJ
CTJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8sCi0J
CQkJMkU4RDNFRjYxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLywKLQkJCQky
RThEM0VGNTE5ODgxRDQzMDA0RjZDQzIgLyogUHJvZHVjdHMgKi8sCi0JCQkpOwotCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJMkU4RDNFRjUxOTg4MUQ0MzAwNEY2Q0MyIC8qIFBy
b2R1Y3RzICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQky
RThEM0VGNDE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovLAotCQkJKTsKLQkJ
CW5hbWUgPSBQcm9kdWN0czsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCTJF
OEQzRUY2MTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8gPSB7Ci0JCQlpc2Eg
PSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTJFOEQzRUY3MTk4ODFENDMwMDRGNkND
MiAvKiBtYWluLm0gKi8sCi0JCQkJQ0UxRkJDMTUxQjI5MEU3OTAwMDEzNkY1IC8qIENvcmVTaW11
bGF0b3JTUEkuaCAqLywKLQkJCQkyRThEM0YwMDE5ODgxRjI5MDA0RjZDQzIgLyogTFRSZWxheS5o
ICovLAotCQkJCTJFOEQzRjAxMTk4ODFGRDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5tICovLAot
CQkJCTJFOEQzRjAzMTk4ODFGRTIwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5oICovLAotCQkJCTJF
OEQzRjA0MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5oICovLAotCQkJCTJF
OEQzRjA1MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5tICovLAotCQkJKTsK
LQkJCXBhdGggPSBMYXlvdXRUZXN0UmVsYXk7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwot
CQl9OwotLyogRW5kIFBCWEdyb3VwIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYTmF0aXZlVGFy
Z2V0IHNlY3Rpb24gKi8KLQkJMkU4RDNFRjMxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RS
ZWxheSAqLyA9IHsKLQkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKLQkJCWJ1aWxkQ29uZmlndXJh
dGlvbkxpc3QgPSAyRThEM0VGQjE5ODgxRDQzMDA0RjZDQzIgLyogQnVpbGQgY29uZmlndXJhdGlv
biBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIkxheW91dFRlc3RSZWxheSIgKi87Ci0JCQlidWls
ZFBoYXNlcyA9ICgKLQkJCQkyRThEM0VGMDE5ODgxRDQzMDA0RjZDQzIgLyogU291cmNlcyAqLywK
LQkJCQkyRThEM0VGMTE5ODgxRDQzMDA0RjZDQzIgLyogRnJhbWV3b3JrcyAqLywKLQkJCQkyRThE
M0VGMjE5ODgxRDQzMDA0RjZDQzIgLyogQ29weUZpbGVzICovLAotCQkJKTsKLQkJCWJ1aWxkUnVs
ZXMgPSAoCi0JCQkpOwotCQkJZGVwZW5kZW5jaWVzID0gKAotCQkJKTsKLQkJCW5hbWUgPSBMYXlv
dXRUZXN0UmVsYXk7Ci0JCQlwcm9kdWN0TmFtZSA9IExheW91dFRlc3RSZWxheTsKLQkJCXByb2R1
Y3RSZWZlcmVuY2UgPSAyRThEM0VGNDE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5
ICovOwotCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS50b29sIjsKLQkJ
fTsKLS8qIEVuZCBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhQcm9q
ZWN0IHNlY3Rpb24gKi8KLQkJMkU4RDNFRUMxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2plY3Qgb2Jq
ZWN0ICovID0gewotCQkJaXNhID0gUEJYUHJvamVjdDsKLQkJCWF0dHJpYnV0ZXMgPSB7Ci0JCQkJ
TGFzdFVwZ3JhZGVDaGVjayA9IDA2MDA7Ci0JCQkJT1JHQU5JWkFUSU9OTkFNRSA9ICJBcHBsZSwg
SW5jLiI7Ci0JCQkJVGFyZ2V0QXR0cmlidXRlcyA9IHsKLQkJCQkJMkU4RDNFRjMxOTg4MUQ0MzAw
NEY2Q0MyID0gewotCQkJCQkJQ3JlYXRlZE9uVG9vbHNWZXJzaW9uID0gNi4wOwotCQkJCQl9Owot
CQkJCX07Ci0JCQl9OwotCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDJFOEQzRUVGMTk4ODFE
NDMwMDRGNkNDMiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIkxh
eW91dFRlc3RSZWxheSIgKi87Ci0JCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAzLjIi
OwotCQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBFbmdsaXNoOwotCQkJaGFzU2Nhbm5lZEZvckVuY29k
aW5ncyA9IDA7Ci0JCQlrbm93blJlZ2lvbnMgPSAoCi0JCQkJZW4sCi0JCQkpOwotCQkJbWFpbkdy
b3VwID0gMkU4RDNFRUIxOTg4MUQ0MzAwNEY2Q0MyOwotCQkJcHJvZHVjdFJlZkdyb3VwID0gMkU4
RDNFRjUxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2R1Y3RzICovOwotCQkJcHJvamVjdERpclBhdGgg
PSAiIjsKLQkJCXByb2plY3RSb290ID0gIiI7Ci0JCQl0YXJnZXRzID0gKAotCQkJCTJFOEQzRUYz
MTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8sCi0JCQkpOwotCQl9OwotLyog
RW5kIFBCWFByb2plY3Qgc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQaGFz
ZSBzZWN0aW9uICovCi0JCTJFOEQzRUYwMTk4ODFENDMwMDRGNkNDMiAvKiBTb3VyY2VzICovID0g
ewotCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAy
MTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkJMkU4RDNGMDYxOTg4MjQwNjAwNEY2Q0MyIC8q
IExUUmVsYXlDb250cm9sbGVyLm0gaW4gU291cmNlcyAqLywKLQkJCQkyRThEM0VGODE5ODgxRDQz
MDA0RjZDQzIgLyogbWFpbi5tIGluIFNvdXJjZXMgKi8sCi0JCQkJMkU4RDNGMDIxOTg4MUZEMDAw
NEY2Q0MyIC8qIExUUGlwZVJlbGF5Lm0gaW4gU291cmNlcyAqLywKLQkJCSk7Ci0JCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKLS8qIEVuZCBQQlhTb3VyY2Vz
QnVpbGRQaGFzZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFhDQnVpbGRDb25maWd1cmF0aW9uIHNl
Y3Rpb24gKi8KLQkJMkU4RDNFRjkxOTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICovID0gewotCQkJ
aXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5j
ZSA9IDJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi87
Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJfTsKLQkJCW5hbWUgPSBEZWJ1ZzsKLQkJfTsKLQkJ
MkU4RDNFRkExOTg4MUQ0MzAwNEY2Q0MyIC8qIFJlbGVhc2UgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1
aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gMkU4RDNF
RkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLzsKLQkJCWJ1aWxk
U2V0dGluZ3MgPSB7Ci0JCQl9OwotCQkJbmFtZSA9IFJlbGVhc2U7Ci0JCX07Ci0JCTJFOEQzRUZD
MTk4ODFENDMwMDRGNkNDMiAvKiBEZWJ1ZyAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1
cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAyRThEM0VGRTE5ODgxRTEz
MDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9
IHsKLQkJCQlQUk9EVUNUX05BTUUgPSAiJChUQVJHRVRfTkFNRSkiOwotCQkJfTsKLQkJCW5hbWUg
PSBEZWJ1ZzsKLQkJfTsKLQkJMkU4RDNFRkQxOTg4MUQ0MzAwNEY2Q0MyIC8qIFJlbGVhc2UgKi8g
PSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9u
UmVmZXJlbmNlID0gMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2Nv
bmZpZyAqLzsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJUFJPRFVDVF9OQU1FID0gIiQoVEFS
R0VUX05BTUUpIjsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLS8qIEVuZCBYQ0J1
aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFhDQ29uZmlndXJhdGlvbkxp
c3Qgc2VjdGlvbiAqLwotCQkyRThEM0VFRjE5ODgxRDQzMDA0RjZDQzIgLyogQnVpbGQgY29uZmln
dXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJMYXlvdXRUZXN0UmVsYXkiICovID0gewotCQkJ
aXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCi0J
CQkJMkU4RDNFRjkxOTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICovLAotCQkJCTJFOEQzRUZBMTk4
ODFENDMwMDRGNkNDMiAvKiBSZWxlYXNlICovLAotCQkJKTsKLQkJCWRlZmF1bHRDb25maWd1cmF0
aW9uSXNWaXNpYmxlID0gMDsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJlbGVhc2U7
Ci0JCX07Ci0JCTJFOEQzRUZCMTk4ODFENDMwMDRGNkNDMiAvKiBCdWlsZCBjb25maWd1cmF0aW9u
IGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiTGF5b3V0VGVzdFJlbGF5IiAqLyA9IHsKLQkJCWlz
YSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAotCQkJ
CTJFOEQzRUZDMTk4ODFENDMwMDRGNkNDMiAvKiBEZWJ1ZyAqLywKLQkJCQkyRThEM0VGRDE5ODgx
RDQzMDA0RjZDQzIgLyogUmVsZWFzZSAqLywKLQkJCSk7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlv
bklzVmlzaWJsZSA9IDA7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNlOwot
CQl9OwotLyogRW5kIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLwotCX07Ci0Jcm9vdE9i
amVjdCA9IDJFOEQzRUVDMTk4ODFENDMwMDRGNkNDMiAvKiBQcm9qZWN0IG9iamVjdCAqLzsKLX0K
SW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVw
cm9qCShyZXZpc2lvbiAyMTA1NDkpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVz
dFJlbGF5Lnhjb2RlcHJvagkobm9uZXhpc3RlbnQpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBUb29s
cy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5Lnhjb2RlcHJvagpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRl
bGV0ZWQ6IHN2bjppZ25vcmUKIyMgLTEsMiArMCwwICMjCi1wcm9qZWN0Lnhjd29ya3NwYWNlCi14
Y3VzZXJkYXRhCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTWFrZWZpbGUKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L01ha2VmaWxlCShyZXZpc2lvbiAyMTA1NDkpCisr
KyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTWFrZWZpbGUJKG5vbmV4aXN0ZW50KQpAQCAtMSw2ICsw
LDAgQEAKLVNDUklQVFNfUEFUSCA9IC4uL1NjcmlwdHMKLQotT1ZFUlJJREVfQVJDSFMgPSBkZWZh
dWx0Ci1PVkVSUklERV9TREtST09UID0gZGVmYXVsdAotCi1pbmNsdWRlIC4uLy4uL01ha2VmaWxl
LnNoYXJlZApJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0Jhc2Uu
eGNjb25maWcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRp
b25zL0Jhc2UueGNjb25maWcJKHJldmlzaW9uIDIxMDU0OSkKKysrIFRvb2xzL0xheW91dFRlc3RS
ZWxheS9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCShub25leGlzdGVudCkKQEAgLTEsNjgg
KzAsMCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotLy8gYXJlIG1ldDoKLS8vIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0vLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0vLyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotLy8g
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLS8vIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0vLyBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLS8vIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0v
LyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLS8vIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLS8vIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotLy8gUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotLy8gT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlICIu
Li8uLi8uLi8uLi9JbnRlcm5hbC9Db25maWd1cmF0aW9ucy9IYXZlSW50ZXJuYWxTREsueGNjb25m
aWciCi0KLVVTRV9JTlRFUk5BTF9TREsgPSAkKFVTRV9JTlRFUk5BTF9TREtfJChDT05GSUdVUkFU
SU9OKSk7Ci1VU0VfSU5URVJOQUxfU0RLX1Byb2R1Y3Rpb24gPSBZRVM7Ci1VU0VfSU5URVJOQUxf
U0RLX0RlYnVnID0gJChIQVZFX0lOVEVSTkFMX1NESyk7Ci1VU0VfSU5URVJOQUxfU0RLX1JlbGVh
c2UgPSAkKEhBVkVfSU5URVJOQUxfU0RLKTsKLQotQ0xBTkdfQ1hYX0xBTkdVQUdFX1NUQU5EQVJE
ID0gZ251KysweDsKLUNMQU5HX0VOQUJMRV9PQkpDX0FSQyA9IFlFUzsKLUNMQU5HX1dBUk5fQ1hY
MFhfRVhURU5TSU9OUyA9IE5POwotSEVBREVSX1NFQVJDSF9QQVRIUyA9ICQoQlVJTFRfUFJPRFVD
VFNfRElSKS91c3IvbG9jYWwvaW5jbHVkZSAkKFdFQkNPUkVfUFJJVkFURV9IRUFERVJTX0RJUikv
Rm9yd2FyZGluZ0hlYWRlcnMgJChTUkNST09UKS8uLi8uLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aWN1ICQoTkVYVF9ST09UKS91c3IvbG9jYWwvaW5jbHVkZS9XZWJDb3JlVGVzdFN1cHBvcnQ7Ci1H
Q0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gJChERUJVR19ERUZJTkVTKSBFTkFCTEVfREFT
SEJPQVJEX1NVUFBPUlQ7Ci1ERUJVR19JTkZPUk1BVElPTl9GT1JNQVQgPSBkd2FyZi13aXRoLWRz
eW07Ci1QUkVCSU5ESU5HID0gTk8KLUdDQ19DX0xBTkdVQUdFX1NUQU5EQVJEID0gZ251OTkKLUdD
Q19FTkFCTEVfQ1BQX0VYQ0VQVElPTlMgPSBOTzsKLUdDQ19FTkFCTEVfQ1BQX1JUVEkgPSBOTzsK
LUdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFERVIgPSBZRVMKLUdDQ19UUkVBVF9XQVJOSU5HU19B
U19FUlJPUlMgPSBZRVMKLUdDQ19WRVJTSU9OID0gY29tLmFwcGxlLmNvbXBpbGVycy5sbHZtLmNs
YW5nLjFfMDsKLUdDQ19XQVJOX0FCT1VUX0RFUFJFQ0FURURfRlVOQ1RJT05TID0gTk8KLUdDQ19X
QVJOX1VOVVNFRF9GVU5DVElPTiA9IFlFUwotR0NDX1dBUk5fVU5VU0VEX1ZBUklBQkxFID0gWUVT
Ci1HQ0NfV0FSTl82NF9UT18zMl9CSVRfQ09OVkVSU0lPTlthcmNoPXg4Nl82NF0gPSBOTzsKLVdB
Uk5JTkdfQ0ZMQUdTID0gLVdhbGwgLVcgLVduby11bnVzZWQtcGFyYW1ldGVyIC1XdW5kZWYKLQot
REVCVUdfREVGSU5FU19kZWJ1ZyA9IDsKLURFQlVHX0RFRklORVNfbm9ybWFsID0gTkRFQlVHOwot
REVCVUdfREVGSU5FUyA9ICQoREVCVUdfREVGSU5FU18kKENVUlJFTlRfVkFSSUFOVCkpOwotCi1U
QVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUiA9ICQoVEFSR0VUX01BQ19PU19YX1ZFUlNJT05f
TUFKT1IkKE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVDpzdWZmaXg6aWRlbnRpZmllcikpOwotVEFS
R0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1JfMTAgPSAxMDEwMDA7Ci1UQVJHRVRfTUFDX09TX1hf
VkVSU0lPTl9NQUpPUl8xMSA9IDEwMTEwMDsKLVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9S
XzEyID0gMTAxMjAwOwotVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1JfMTMgPSAxMDEzMDA7
Ci0KLVNES1JPT1QgPSBtYWNvc3guaW50ZXJuYWw7Ci0KLVNVUFBPUlRFRF9QTEFURk9STVMgPSBt
YWNvc3g7Ci0KLVRPT0xDSEFJTlMgPSBkZWZhdWx0OwotCi1PVEhFUl9DRkxBR1MgPSAkKEFTQU5f
T1RIRVJfQ0ZMQUdTKTsKLU9USEVSX0NQTFVTUExVU0ZMQUdTID0gJChBU0FOX09USEVSX0NQTFVT
UExVU0ZMQUdTKTsKLU9USEVSX0xERkxBR1MgPSAkKEFTQU5fT1RIRVJfTERGTEFHUyk7CkluZGV4
OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMvRGVidWdSZWxlYXNlLnhjY29u
ZmlnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9E
ZWJ1Z1JlbGVhc2UueGNjb25maWcJKHJldmlzaW9uIDIxMDU0OSkKKysrIFRvb2xzL0xheW91dFRl
c3RSZWxheS9Db25maWd1cmF0aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25maWcJKG5vbmV4aXN0ZW50
KQpAQCAtMSw0MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0vLyBhcmUg
bWV0OgotLy8gMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0vLyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotLy8gRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS8vIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotLy8gUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLS8vIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotLy8gRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotLy8gUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0v
LyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0vLyBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQot
I2luY2x1ZGUgIkJhc2UueGNjb25maWciCi0KLUFSQ0hTID0gJChBUkNIU19TVEFOREFSRF82NF9C
SVQpOwotCi1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUiA9ICQoTUFDX09TX1hfVkVSU0lP
Tl9NQUpPUik7Ci0KLU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCA9ICQoTUFDT1NYX0RFUExPWU1F
TlRfVEFSR0VUXyQoVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1IpKQotTUFDT1NYX0RFUExP
WU1FTlRfVEFSR0VUXzEwMTAwMCA9IDEwLjEwOwotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEw
MTEwMCA9IDEwLjExOwotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEwMTIwMCA9IDEwLjEyOwot
TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEwMTMwMCA9IDEwLjEzOwotCi1GUkFNRVdPUktfU0VB
UkNIX1BBVEhTID0gJChERVZFTE9QRVJfRElSKS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzOwot
TERfUlVOUEFUSF9TRUFSQ0hfUEFUSFMgPSAkKERFVkVMT1BFUl9ESVIpL0xpYnJhcnkvUHJpdmF0
ZUZyYW1ld29ya3M7Ci1PVEhFUl9MREZMQUdTID0gLWZyYW1ld29yayBDb3JlU2ltdWxhdG9yIC1m
cmFtZXdvcmsgQXBwS2l0OwotCi1TREtST09UID0gJChTREtST09UX21hY29zeF8kKFVTRV9JTlRF
Uk5BTF9TREspKTsKLVNES1JPT1RfbWFjb3N4XyA9IG1hY29zeDsKLVNES1JPT1RfbWFjb3N4X1lF
UyA9IG1hY29zeC5pbnRlcm5hbDsKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRU
ZXN0UmVsYXkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9M
YXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDIxMDU0OSkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVs
YXkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkobm9uZXhpc3RlbnQpCkBAIC0xLDIwMiArMCww
IEBACi0vLyAhJCpVVEY4KiQhCi17Ci0JYXJjaGl2ZVZlcnNpb24gPSAxOwotCWNsYXNzZXMgPSB7
Ci0JfTsKLQlvYmplY3RWZXJzaW9uID0gNDY7Ci0Jb2JqZWN0cyA9IHsKLQotLyogQmVnaW4gUEJY
QnVpbGRGaWxlIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjgxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1haW4u
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOEQzRUY3
MTk4ODFENDMwMDRGNkNDMiAvKiBtYWluLm0gKi87IH07Ci0JCTJFOEQzRjAyMTk4ODFGRDAwMDRG
NkNDMiAvKiBMVFBpcGVSZWxheS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkU4RDNGMDExOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lm0gKi87
IH07Ci0JCTJFOEQzRjA2MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU4RDNGMDUxOTg4
MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLm0gKi87IH07Ci0vKiBFbmQgUEJYQnVp
bGRGaWxlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYQ29weUZpbGVzQnVpbGRQaGFzZSBzZWN0
aW9uICovCi0JCTJFOEQzRUYyMTk4ODFENDMwMDRGNkNDMiAvKiBDb3B5RmlsZXMgKi8gPSB7Ci0J
CQlpc2EgPSBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0
NzQ4MzY0NzsKLQkJCWRzdFBhdGggPSAvdXNyL3NoYXJlL21hbi9tYW4xLzsKLQkJCWRzdFN1YmZv
bGRlclNwZWMgPSAwOwotCQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDE7Ci0JCX07Ci0vKiBFbmQgUEJYQ29weUZpbGVzQnVpbGRQaGFz
ZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwotCQky
RThEM0VGNDE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1
dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBMYXlvdXRUZXN0UmVsYXk7IHNvdXJj
ZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0JCTJFOEQzRUY3MTk4ODFENDMwMDRGNkND
MiAvKiBtYWluLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IG1haW4ubTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2Nv
bmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQueGNjb25maWc7IG5hbWUgPSBEZWJ1Z1JlbGVhc2UueGNjb25maWc7IHBhdGggPSBDb25maWd1
cmF0aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTJFOEQzRUZGMTk4ODFFMjUwMDRGNkNDMiAvKiBCYXNlLnhjY29uZmlnICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgbmFt
ZSA9IEJhc2UueGNjb25maWc7IHBhdGggPSBDb25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0YwMDE5ODgxRjI5MDA0RjZDQzIgLyog
TFRSZWxheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMVFJlbGF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTJFOEQzRjAxMTk4ODFGRDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBMVFBpcGVSZWxheS5tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkyRThEM0YwMzE5ODgxRkUyMDA0RjZDQzIgLyogTFRQaXBlUmVs
YXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTFRQaXBlUmVsYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMkU4RDNGMDQxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExUUmVsYXlDb250cm9sbGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOEQzRjA1MTk4ODI0MDYwMDRGNkNDMiAvKiBM
VFJlbGF5Q29udHJvbGxlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBM
VFJlbGF5Q29udHJvbGxlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDRTFGQkMx
NTFCMjkwRTc5MDAwMTM2RjUgLyogQ29yZVNpbXVsYXRvclNQSS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb3JlU2ltdWxhdG9yU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0vKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBC
WEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjExOTg4MUQ0MzAwNEY2
Q0MyIC8qIEZyYW1ld29ya3MgKi8gPSB7Ci0JCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFz
ZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCSk7
Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKLS8qIEVu
ZCBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWEdyb3Vw
IHNlY3Rpb24gKi8KLQkJMkU4RDNFRUIxOTg4MUQ0MzAwNEY2Q0MyID0gewotCQkJaXNhID0gUEJY
R3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQkyRThEM0VGRjE5ODgxRTI1MDA0RjZDQzIgLyog
QmFzZS54Y2NvbmZpZyAqLywKLQkJCQkyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVidWdS
ZWxlYXNlLnhjY29uZmlnICovLAotCQkJCTJFOEQzRUY2MTk4ODFENDMwMDRGNkNDMiAvKiBMYXlv
dXRUZXN0UmVsYXkgKi8sCi0JCQkJMkU4RDNFRjUxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2R1Y3Rz
ICovLAotCQkJKTsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCTJFOEQzRUY1
MTk4ODFENDMwMDRGNkNDMiAvKiBQcm9kdWN0cyAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwot
CQkJY2hpbGRyZW4gPSAoCi0JCQkJMkU4RDNFRjQxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRl
c3RSZWxheSAqLywKLQkJCSk7Ci0JCQluYW1lID0gUHJvZHVjdHM7Ci0JCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwotCQl9OwotCQkyRThEM0VGNjE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVz
dFJlbGF5ICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQky
RThEM0VGNzE5ODgxRDQzMDA0RjZDQzIgLyogbWFpbi5tICovLAotCQkJCUNFMUZCQzE1MUIyOTBF
NzkwMDAxMzZGNSAvKiBDb3JlU2ltdWxhdG9yU1BJLmggKi8sCi0JCQkJMkU4RDNGMDAxOTg4MUYy
OTAwNEY2Q0MyIC8qIExUUmVsYXkuaCAqLywKLQkJCQkyRThEM0YwMTE5ODgxRkQwMDA0RjZDQzIg
LyogTFRQaXBlUmVsYXkubSAqLywKLQkJCQkyRThEM0YwMzE5ODgxRkUyMDA0RjZDQzIgLyogTFRQ
aXBlUmVsYXkuaCAqLywKLQkJCQkyRThEM0YwNDE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNv
bnRyb2xsZXIuaCAqLywKLQkJCQkyRThEM0YwNTE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNv
bnRyb2xsZXIubSAqLywKLQkJCSk7Ci0JCQlwYXRoID0gTGF5b3V0VGVzdFJlbGF5OwotCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLS8qIEVuZCBQQlhHcm91cCBzZWN0aW9uICovCi0K
LS8qIEJlZ2luIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCi0JCTJFOEQzRUYzMTk4ODFENDMw
MDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8gPSB7Ci0JCQlpc2EgPSBQQlhOYXRpdmVUYXJn
ZXQ7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMkU4RDNFRkIxOTg4MUQ0MzAwNEY2Q0My
IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJMYXlvdXRU
ZXN0UmVsYXkiICovOwotCQkJYnVpbGRQaGFzZXMgPSAoCi0JCQkJMkU4RDNFRjAxOTg4MUQ0MzAw
NEY2Q0MyIC8qIFNvdXJjZXMgKi8sCi0JCQkJMkU4RDNFRjExOTg4MUQ0MzAwNEY2Q0MyIC8qIEZy
YW1ld29ya3MgKi8sCi0JCQkJMkU4RDNFRjIxOTg4MUQ0MzAwNEY2Q0MyIC8qIENvcHlGaWxlcyAq
LywKLQkJCSk7Ci0JCQlidWlsZFJ1bGVzID0gKAotCQkJKTsKLQkJCWRlcGVuZGVuY2llcyA9ICgK
LQkJCSk7Ci0JCQluYW1lID0gTGF5b3V0VGVzdFJlbGF5OwotCQkJcHJvZHVjdE5hbWUgPSBMYXlv
dXRUZXN0UmVsYXk7Ci0JCQlwcm9kdWN0UmVmZXJlbmNlID0gMkU4RDNFRjQxOTg4MUQ0MzAwNEY2
Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLzsKLQkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5w
cm9kdWN0LXR5cGUudG9vbCI7Ci0JCX07Ci0vKiBFbmQgUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24g
Ki8KLQotLyogQmVnaW4gUEJYUHJvamVjdCBzZWN0aW9uICovCi0JCTJFOEQzRUVDMTk4ODFENDMw
MDRGNkNDMiAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKLQkJCWlzYSA9IFBCWFByb2plY3Q7Ci0J
CQlhdHRyaWJ1dGVzID0gewotCQkJCUxhc3RVcGdyYWRlQ2hlY2sgPSAwNjAwOwotCQkJCU9SR0FO
SVpBVElPTk5BTUUgPSAiQXBwbGUsIEluYy4iOwotCQkJCVRhcmdldEF0dHJpYnV0ZXMgPSB7Ci0J
CQkJCTJFOEQzRUYzMTk4ODFENDMwMDRGNkNDMiA9IHsKLQkJCQkJCUNyZWF0ZWRPblRvb2xzVmVy
c2lvbiA9IDYuMDsKLQkJCQkJfTsKLQkJCQl9OwotCQkJfTsKLQkJCWJ1aWxkQ29uZmlndXJhdGlv
bkxpc3QgPSAyRThEM0VFRjE5ODgxRDQzMDA0RjZDQzIgLyogQnVpbGQgY29uZmlndXJhdGlvbiBs
aXN0IGZvciBQQlhQcm9qZWN0ICJMYXlvdXRUZXN0UmVsYXkiICovOwotCQkJY29tcGF0aWJpbGl0
eVZlcnNpb24gPSAiWGNvZGUgMy4yIjsKLQkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsK
LQkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAwOwotCQkJa25vd25SZWdpb25zID0gKAotCQkJ
CWVuLAotCQkJKTsKLQkJCW1haW5Hcm91cCA9IDJFOEQzRUVCMTk4ODFENDMwMDRGNkNDMjsKLQkJ
CXByb2R1Y3RSZWZHcm91cCA9IDJFOEQzRUY1MTk4ODFENDMwMDRGNkNDMiAvKiBQcm9kdWN0cyAq
LzsKLQkJCXByb2plY3REaXJQYXRoID0gIiI7Ci0JCQlwcm9qZWN0Um9vdCA9ICIiOwotCQkJdGFy
Z2V0cyA9ICgKLQkJCQkyRThEM0VGMzE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5
ICovLAotCQkJKTsKLQkJfTsKLS8qIEVuZCBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KLQotLyogQmVn
aW4gUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCQkyRThEM0VGMDE5ODgxRDQzMDA0
RjZDQzIgLyogU291cmNlcyAqLyA9IHsKLQkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwot
CQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJCTJFOEQz
RjA2MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5tIGluIFNvdXJjZXMgKi8s
Ci0JCQkJMkU4RDNFRjgxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSBpbiBTb3VyY2VzICovLAot
CQkJCTJFOEQzRjAyMTk4ODFGRDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5tIGluIFNvdXJjZXMg
Ki8sCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0J
CX07Ci0vKiBFbmQgUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBY
Q0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCi0JCTJFOEQzRUY5MTk4ODFENDMwMDRGNkND
MiAvKiBEZWJ1ZyAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJYmFz
ZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVi
dWdSZWxlYXNlLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCX07Ci0JCQlu
YW1lID0gRGVidWc7Ci0JCX07Ci0JCTJFOEQzRUZBMTk4ODFENDMwMDRGNkNDMiAvKiBSZWxlYXNl
ICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJh
dGlvblJlZmVyZW5jZSA9IDJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2Uu
eGNjb25maWcgKi87Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJfTsKLQkJCW5hbWUgPSBSZWxl
YXNlOwotCQl9OwotCQkyRThEM0VGQzE5ODgxRDQzMDA0RjZDQzIgLyogRGVidWcgKi8gPSB7Ci0J
CQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJl
bmNlID0gMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAq
LzsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJUFJPRFVDVF9OQU1FID0gIiQoVEFSR0VUX05B
TUUpIjsKLQkJCX07Ci0JCQluYW1lID0gRGVidWc7Ci0JCX07Ci0JCTJFOEQzRUZEMTk4ODFENDMw
MDRGNkNDMiAvKiBSZWxlYXNlICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247
Ci0JCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDJFOEQzRUZFMTk4ODFFMTMwMDRGNkND
MiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi87Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJ
CVBST0RVQ1RfTkFNRSA9ICIkKFRBUkdFVF9OQU1FKSI7Ci0JCQl9OwotCQkJbmFtZSA9IFJlbGVh
c2U7Ci0JCX07Ci0vKiBFbmQgWENCdWlsZENvbmZpZ3VyYXRpb24gc2VjdGlvbiAqLwotCi0vKiBC
ZWdpbiBYQ0NvbmZpZ3VyYXRpb25MaXN0IHNlY3Rpb24gKi8KLQkJMkU4RDNFRUYxOTg4MUQ0MzAw
NEY2Q0MyIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiTGF5b3V0
VGVzdFJlbGF5IiAqLyA9IHsKLQkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7Ci0JCQlidWls
ZENvbmZpZ3VyYXRpb25zID0gKAotCQkJCTJFOEQzRUY5MTk4ODFENDMwMDRGNkNDMiAvKiBEZWJ1
ZyAqLywKLQkJCQkyRThEM0VGQTE5ODgxRDQzMDA0RjZDQzIgLyogUmVsZWFzZSAqLywKLQkJCSk7
Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7Ci0JCQlkZWZhdWx0Q29uZmln
dXJhdGlvbk5hbWUgPSBSZWxlYXNlOwotCQl9OwotCQkyRThEM0VGQjE5ODgxRDQzMDA0RjZDQzIg
LyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIkxheW91dFRl
c3RSZWxheSIgKi8gPSB7Ci0JCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVpbGRD
b25maWd1cmF0aW9ucyA9ICgKLQkJCQkyRThEM0VGQzE5ODgxRDQzMDA0RjZDQzIgLyogRGVidWcg
Ki8sCi0JCQkJMkU4RDNFRkQxOTg4MUQ0MzAwNEY2Q0MyIC8qIFJlbGVhc2UgKi8sCi0JCQkpOwot
CQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwotCQkJZGVmYXVsdENvbmZpZ3Vy
YXRpb25OYW1lID0gUmVsZWFzZTsKLQkJfTsKLS8qIEVuZCBYQ0NvbmZpZ3VyYXRpb25MaXN0IHNl
Y3Rpb24gKi8KLQl9OwotCXJvb3RPYmplY3QgPSAyRThEM0VFQzE5ODgxRDQzMDA0RjZDQzIgLyog
UHJvamVjdCBvYmplY3QgKi87Ci19CkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0
VGVzdFJlbGF5L0NvcmVTaW11bGF0b3JTUEkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRU
ZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0NvcmVTaW11bGF0b3JTUEkuaAkocmV2aXNpb24gMjEw
NTQ5KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9Db3JlU2ltdWxh
dG9yU1BJLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE1LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmIF9faGFzX2luY2x1ZGUoPENvcmVTaW11bGF0b3IvQ29yZVNpbXVsYXRvci5oPikKLQot
LyogRklYTUU6IFJlbW92ZSB0aGUgYmVsb3cgI2RlZmluZSBvbmNlIHdlIHJlcXVpcmUgWGNvZGUg
Ny4zIHdpdGggaU9TIDkuMyBTREsgb3IgbmV3ZXIuICovCi0jZGVmaW5lIF9fY29yZXNpbV91bmF2
YWlsYWJsZV9tc2cobXNnKQotI2ltcG9ydCA8Q29yZVNpbXVsYXRvci9Db3JlU2ltdWxhdG9yLmg+
Ci0KLS8qIEZJWE1FOiBBbHdheXMgdXNlIFNpbVNlcnZpY2VDb250ZXh0IG9uY2Ugd2UgcmVxdWly
ZSBYY29kZSA3LjMgd2l0aCBpT1MgOS4zIFNESyBvciBuZXdlci4gKi8KLSNkZWZpbmUgVVNFX1NJ
TV9TRVJWSUNFX0NPTlRFWFQgZGVmaW5lZChDT1JFU0lNX0FQSV9NQVhfQUxMT1dFRCkKLQotI2Vs
c2UKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNkZWZpbmUgVVNFX1NJ
TV9TRVJWSUNFX0NPTlRFWFQgMQotCi0jZGVmaW5lIGtTaW1EZXZpY2VMYXVuY2hBcHBsaWNhdGlv
bkFyZ3VtZW50cyBAImFyZ3VtZW50cyIKLSNkZWZpbmUga1NpbURldmljZUxhdW5jaEFwcGxpY2F0
aW9uRW52aXJvbm1lbnQgQCJlbnZpcm9ubWVudCIKLQotQGludGVyZmFjZSBTaW1EZXZpY2UgOiBO
U09iamVjdAotLSAoQk9PTClpbnN0YWxsQXBwbGljYXRpb246KE5TVVJMICopaW5zdGFsbFVSTCB3
aXRoT3B0aW9uczooTlNEaWN0aW9uYXJ5ICopb3B0aW9ucyBlcnJvcjooTlNFcnJvciAqIF9fYXV0
b3JlbGVhc2luZyAqKWVycm9yOwotLSAocGlkX3QpbGF1bmNoQXBwbGljYXRpb25XaXRoSUQ6KE5T
U3RyaW5nICopYnVuZGxlSUQgb3B0aW9uczooTlNEaWN0aW9uYXJ5ICopb3B0aW9ucyBlcnJvcjoo
TlNFcnJvciAqIF9fYXV0b3JlbGVhc2luZyAqKWVycm9yOwotQGVuZAotCi1AaW50ZXJmYWNlIFNp
bURldmljZVNldCA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBjb3B5KSBOU0RpY3Rp
b25hcnkgKmRldmljZXNCeVVESUQ7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgU2ltU2VydmljZUNvbnRl
eHQgOiBOU09iamVjdAotKyhTaW1TZXJ2aWNlQ29udGV4dCAqKXNoYXJlZFNlcnZpY2VDb250ZXh0
Rm9yRGV2ZWxvcGVyRGlyOihOU1N0cmluZyAqKWRldmVsb3BlckRpciBlcnJvcjooTlNFcnJvciAq
IF9fYXV0b3JlbGVhc2luZyAqKWVycm9yOwotLShTaW1EZXZpY2VTZXQgKilkZWZhdWx0RGV2aWNl
U2V0V2l0aEVycm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci1AZW5kCi0K
LSNlbmRpZgpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBp
cGVSZWxheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0
UmVsYXkvTFRQaXBlUmVsYXkuaAkocmV2aXNpb24gMjEwNTQ5KQorKysgVG9vbHMvTGF5b3V0VGVz
dFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5oCShub25leGlzdGVudCkKQEAgLTEs
MzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTFRQaXBlUmVsYXlfaAotI2RlZmluZSBM
VFBpcGVSZWxheV9oCi0KLSNpbXBvcnQgIkxUUmVsYXkuaCIKLQotQGludGVyZmFjZSBMVFBpcGVS
ZWxheSA6IE5TT2JqZWN0IDxMVFJlbGF5PgotQHByb3BlcnR5ICh3ZWFrKSBpZDxMVFJlbGF5RGVs
ZWdhdGU+IHJlbGF5RGVsZWdhdGU7Ci0tIChpZClpbml0V2l0aFByZWZpeDooTlNTdHJpbmcgKilw
cmVmaXg7Ci1AZW5kCi0KLSNlbmRpZgpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91
dFRlc3RSZWxheS9MVFBpcGVSZWxheS5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RS
ZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRQaXBlUmVsYXkubQkocmV2aXNpb24gMjEwNTQ5KQorKysg
VG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5tCShub25l
eGlzdGVudCkKQEAgLTEsMTU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJMVFBpcGVS
ZWxheS5oIgotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLSNpbmNsdWRlIDxz
eXMvc3RhdC5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCi1AaW50ZXJmYWNlIExUUGlwZVJl
bGF5ICgpCi1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TU3RyaW5nICpmaWZvUHJlZml4
OwotQHByb3BlcnR5IChzdHJvbmcpIE5TT3V0cHV0U3RyZWFtICpzdGFuZGFyZElucHV0UGlwZTsK
LUBwcm9wZXJ0eSAoc3Ryb25nKSBOU0lucHV0U3RyZWFtICpzdGFuZGFyZE91dHB1dFBpcGU7Ci1A
cHJvcGVydHkgKHN0cm9uZykgTlNJbnB1dFN0cmVhbSAqc3RhbmRhcmRFcnJvclBpcGU7Ci0KLS0g
KHZvaWQpY3JlYXRlRklGT3M7Ci0tICh2b2lkKWRlc3Ryb3lGSUZPczsKLUBlbmQKLQotQGltcGxl
bWVudGF0aW9uIExUUGlwZVJlbGF5Ci0KLS0gKE5TU3RyaW5nICopaW5QaXBlUGF0aAotewotICAg
IHJldHVybiBbX2ZpZm9QcmVmaXggc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6QCJfSU4iXTsKLX0K
LQotLSAoTlNTdHJpbmcgKilvdXRQaXBlUGF0aAotewotICAgIHJldHVybiBbX2ZpZm9QcmVmaXgg
c3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6QCJfT1VUIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopZXJy
b3JQaXBlUGF0aAotewotICAgIHJldHVybiBbX2ZpZm9QcmVmaXggc3RyaW5nQnlBcHBlbmRpbmdT
dHJpbmc6QCJfRVJST1IiXTsKLX0KLQotLSAoTlNPdXRwdXRTdHJlYW0gKikgb3V0cHV0U3RyZWFt
Ci17Ci0gICAgcmV0dXJuIF9zdGFuZGFyZElucHV0UGlwZTsKLX0KLQotLSAoaWQpaW5pdFdpdGhQ
cmVmaXg6KE5TU3RyaW5nICopcHJlZml4Ci17Ci0gICAgaWYgKChzZWxmID0gW3N1cGVyIGluaXRd
KSkgewotICAgICAgICBfZmlmb1ByZWZpeCA9IHByZWZpeDsKLSAgICAgICAgW3NlbGYgZGVzdHJv
eUZJRk9zXTsKLSAgICB9Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0dXAKLXsK
LSAgICBbc2VsZiBkZXN0cm95RklGT3NdOwotICAgIFtzZWxmIGNyZWF0ZUZJRk9zXTsKLX0KLQot
LSAodm9pZCl0ZWFyRG93bgotewotICAgIFtzZWxmIGRlc3Ryb3lGSUZPc107Ci19Ci0KLS0odm9p
ZCkgY29ubmVjdAotewotICAgIF9zdGFuZGFyZElucHV0UGlwZSA9IFtOU091dHB1dFN0cmVhbSBv
dXRwdXRTdHJlYW1Ub0ZpbGVBdFBhdGg6W3NlbGYgaW5QaXBlUGF0aF0gYXBwZW5kOllFU107Ci0g
ICAgX3N0YW5kYXJkT3V0cHV0UGlwZSA9IFtOU0lucHV0U3RyZWFtIGlucHV0U3RyZWFtV2l0aEZp
bGVBdFBhdGg6W3NlbGYgb3V0UGlwZVBhdGhdXTsKLSAgICBfc3RhbmRhcmRFcnJvclBpcGUgPSBb
TlNJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbVdpdGhGaWxlQXRQYXRoOltzZWxmIGVycm9yUGlwZVBh
dGhdXTsKLQotICAgIFtbc2VsZiBzdGFuZGFyZElucHV0UGlwZV0gc2V0RGVsZWdhdGU6c2VsZl07
Ci0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gc2V0RGVsZWdhdGU6c2VsZl07Ci0gICAg
W1tzZWxmIHN0YW5kYXJkRXJyb3JQaXBlXSBzZXREZWxlZ2F0ZTpzZWxmXTsKLQotICAgIFtbc2Vs
ZiBzdGFuZGFyZE91dHB1dFBpcGVdIHNjaGVkdWxlSW5SdW5Mb29wOltOU1J1bkxvb3AgbWFpblJ1
bkxvb3BdIGZvck1vZGU6TlNEZWZhdWx0UnVuTG9vcE1vZGVdOwotICAgIFtbc2VsZiBzdGFuZGFy
ZEVycm9yUGlwZV0gc2NoZWR1bGVJblJ1bkxvb3A6W05TUnVuTG9vcCBtYWluUnVuTG9vcF0gZm9y
TW9kZTpOU0RlZmF1bHRSdW5Mb29wTW9kZV07Ci0KLSAgICBbW3NlbGYgc3RhbmRhcmRJbnB1dFBp
cGVdIG9wZW5dOwotICAgIFtbc2VsZiBzdGFuZGFyZE91dHB1dFBpcGVdIG9wZW5dOwotICAgIFtb
c2VsZiBzdGFuZGFyZEVycm9yUGlwZV0gb3Blbl07Ci0KLSAgICBbW3NlbGYgcmVsYXlEZWxlZ2F0
ZV0gZGlkQ29ubmVjdF07Ci19Ci0KLS0gKHZvaWQpZGlzY29ubmVjdAotewotICAgIFtbc2VsZiBz
dGFuZGFyZE91dHB1dFBpcGVdIGNsb3NlXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRFcnJvclBpcGVd
IGNsb3NlXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRJbnB1dFBpcGVdIGNsb3NlXTsKLSAgICBbW3Nl
bGYgcmVsYXlEZWxlZ2F0ZV0gZGlkRGlzY29ubmVjdF07Ci19Ci0KLS0gKHZvaWQpY3JlYXRlRklG
T3MKLXsKLSAgICBta2ZpZm8oW1tzZWxmIGluUGlwZVBhdGhdIFVURjhTdHJpbmddLCAwNjY2KTsK
LSAgICBta2ZpZm8oW1tzZWxmIG91dFBpcGVQYXRoXSBVVEY4U3RyaW5nXSwgMDY2Nik7Ci0gICAg
bWtmaWZvKFtbc2VsZiBlcnJvclBpcGVQYXRoXSBVVEY4U3RyaW5nXSwgMDY2Nik7Ci19Ci0KLS0g
KHZvaWQpZGVzdHJveUZJRk9zCi17Ci0gICAgdW5saW5rKFtbc2VsZiBpblBpcGVQYXRoXSBVVEY4
U3RyaW5nXSk7Ci0gICAgdW5saW5rKFtbc2VsZiBvdXRQaXBlUGF0aF0gVVRGOFN0cmluZ10pOwot
ICAgIHVubGluayhbW3NlbGYgZXJyb3JQaXBlUGF0aF0gVVRGOFN0cmluZ10pOwotfQotCi0tICh2
b2lkKSByZWxheVN0cmVhbTooTlNJbnB1dFN0cmVhbSAqKXN0cmVhbQotewotICAgIHVpbnQ4X3Qg
Ynl0ZXNbMTAyNF07Ci0gICAgTlNJbnRlZ2VyIGJ5dGVzUmVhZCA9IFtzdHJlYW0gcmVhZDpieXRl
cyBtYXhMZW5ndGg6MTAyNF07Ci0gICAgTlNEYXRhICpkYXRhID0gW05TRGF0YSBkYXRhV2l0aEJ5
dGVzOmJ5dGVzIGxlbmd0aDpieXRlc1JlYWRdOwotCi0gICAgaWYgKHN0cmVhbSA9PSBbc2VsZiBz
dGFuZGFyZE91dHB1dFBpcGVdKQotICAgICAgICBbW3NlbGYgcmVsYXlEZWxlZ2F0ZV0gZGlkUmVj
ZWl2ZVN0ZG91dERhdGE6ZGF0YV07Ci0gICAgZWxzZQotICAgICAgICBbW3NlbGYgcmVsYXlEZWxl
Z2F0ZV0gZGlkUmVjZWl2ZVN0ZGVyckRhdGE6ZGF0YV07Ci19Ci0KLS0gKHZvaWQpc3RyZWFtOihO
U1N0cmVhbSAqKWFTdHJlYW0gaGFuZGxlRXZlbnQ6KE5TU3RyZWFtRXZlbnQpZXZlbnRDb2RlCi17
Ci0gICAgc3dpdGNoIChldmVudENvZGUpIHsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnROb25lOgot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnRIYXNCeXRlc0F2YWlsYWJsZToK
LSAgICAgICAgW3NlbGYgcmVsYXlTdHJlYW06KE5TSW5wdXRTdHJlYW0gKilhU3RyZWFtXTsKLSAg
ICBjYXNlIE5TU3RyZWFtRXZlbnRIYXNTcGFjZUF2YWlsYWJsZToKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBOU1N0cmVhbUV2ZW50T3BlbkNvbXBsZXRlZDoKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBOU1N0cmVhbUV2ZW50RW5kRW5jb3VudGVyZWQ6Ci0gICAgICAgIFtbc2VsZiByZWxheURl
bGVnYXRlXSBkaWRDcmFzaFdpdGhNZXNzYWdlOm5pbF07Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgTlNTdHJlYW1FdmVudEVycm9yT2NjdXJyZWQ6Ci0gICAgICAgIFtbc2VsZiByZWxheURlbGVn
YXRlXSBkaWRDcmFzaFdpdGhNZXNzYWdlOltbYVN0cmVhbSBzdHJlYW1FcnJvcl0gZGVzY3JpcHRp
b25dXTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1AZW5kCkluZGV4OiBUb29scy9MYXlv
dXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXkuaAkocmV2aXNpb24gMjEw
NTQ5KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5LmgJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBMVFJl
bGF5X2gKLSNkZWZpbmUgTFRSZWxheV9oCi0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlv
bi5oPgotCi1AcHJvdG9jb2wgTFRSZWxheURlbGVnYXRlIDxOU09iamVjdD4KLS0gKHZvaWQpZGlk
Q29ubmVjdDsKLS0gKHZvaWQpZGlkRGlzY29ubmVjdDsKLS0gKHZvaWQpZGlkQ3Jhc2hXaXRoTWVz
c2FnZTooTlNTdHJpbmcgKiltZXNzYWdlOwotLSAodm9pZClkaWRSZWNlaXZlU3Rkb3V0RGF0YToo
TlNEYXRhICopZGF0YTsKLS0gKHZvaWQpZGlkUmVjZWl2ZVN0ZGVyckRhdGE6KE5TRGF0YSAqKWRh
dGE7Ci1AZW5kCi0KLUBwcm90b2NvbCBMVFJlbGF5IDxOU09iamVjdCwgTlNTdHJlYW1EZWxlZ2F0
ZT4KLS0gKHZvaWQpc2V0dXA7Ci0tICh2b2lkKXRlYXJEb3duOwotLSAodm9pZCljb25uZWN0Owot
LSAodm9pZClkaXNjb25uZWN0OwotQHByb3BlcnR5ICh3ZWFrKSBpZDxMVFJlbGF5RGVsZWdhdGU+
IHJlbGF5RGVsZWdhdGU7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TT3V0cHV0U3Ry
ZWFtICpvdXRwdXRTdHJlYW07Ci1AZW5kCi0KLSNlbmRpZgpJbmRleDogVG9vbHMvTGF5b3V0VGVz
dFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIu
aAkocmV2aXNpb24gMjEwNTQ5KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RS
ZWxheS9MVFJlbGF5Q29udHJvbGxlci5oCShub25leGlzdGVudCkKQEAgLTEsNDAgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0jaWZuZGVmIExUUmVsYXlDb250cm9sbGVyX2gKLSNkZWZpbmUgTFRSZWxheUNv
bnRyb2xsZXJfaAotCi0jaW1wb3J0ICJMVFJlbGF5LmgiCi0KLSNpbXBvcnQgPEZvdW5kYXRpb24v
Rm91bmRhdGlvbi5oPgotCi1AY2xhc3MgU2ltRGV2aWNlOwotCi1AaW50ZXJmYWNlIExUUmVsYXlD
b250cm9sbGVyIDogTlNPYmplY3QgPExUUmVsYXlEZWxlZ2F0ZT4KLS0gKGlkKWluaXRXaXRoRGV2
aWNlOihTaW1EZXZpY2UgKilkZXZpY2UgcHJvZHVjdERpcjooTlNTdHJpbmcgKilwcm9kdWN0RGly
IGFwcFBhdGg6KE5TU3RyaW5nICopYXBwUGF0aCBkZXZpY2VVRElEOihOU1VVSUQgKil1ZGlkIGR1
bXBUb29sQXJndW1lbnRzOihOU0FycmF5ICopYXJndW1lbnRzOwotLSAodm9pZClzdGFydDsKLS0g
KHZvaWQpZmluaXNoOwotQGVuZAotCi0jZW5kaWYKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxh
eS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIubQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLm0JKHJl
dmlzaW9uIDIxMDU0OSkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkv
TFRSZWxheUNvbnRyb2xsZXIubQkobm9uZXhpc3RlbnQpCkBAIC0xLDI3MiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2ltcG9ydCAiTFRSZWxheUNvbnRyb2xsZXIuaCIKLQotI2ltcG9ydCAiQ29yZVNp
bXVsYXRvclNQSS5oIgotI2ltcG9ydCAiTFRQaXBlUmVsYXkuaCIKLSNpbXBvcnQgPEFwcEtpdC9B
cHBLaXQuaD4KLSNpbXBvcnQgPGNydF9leHRlcm5zLmg+Ci0KLUBpbnRlcmZhY2UgTFRSZWxheUNv
bnRyb2xsZXIgKCkKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgZGlzcGF0Y2hfc291cmNl
X3Qgc3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNlOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ry
b25nKSBOU0ZpbGVIYW5kbGUgKnN0YW5kYXJkT3V0cHV0OwotQHByb3BlcnR5IChyZWFkb25seSwg
c3Ryb25nKSBOU0ZpbGVIYW5kbGUgKnN0YW5kYXJkRXJyb3I7Ci1AcHJvcGVydHkgKHJlYWRvbmx5
LCBzdHJvbmcpIE5TU3RyaW5nICppcGNJZGVudGlmaWVyOwotQHByb3BlcnR5IChyZWFkb25seSwg
c3Ryb25nKSBOU1N0cmluZyAqYXBwQnVuZGxlSWRlbnRpZmllcjsKLUBwcm9wZXJ0eSAocmVhZG9u
bHksIHN0cm9uZykgTlNTdHJpbmcgKmFwcFBhdGg7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJv
bmcpIE5TVVVJRCAqZGV2aWNlVURJRDsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNB
cnJheSAqZHVtcFRvb2xBcmd1bWVudHM7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5T
U3RyaW5nICpwcm9kdWN0RGlyOwotQHByb3BlcnR5IChzdHJvbmcpIFNpbURldmljZSAqZGV2aWNl
OwotQHByb3BlcnR5IChzdHJvbmcpIGlkPExUUmVsYXk+IHJlbGF5OwotQHByb3BlcnR5IHBpZF90
IHBpZDsKLUBwcm9wZXJ0eSAoc3Ryb25nKSBkaXNwYXRjaF9zb3VyY2VfdCBhcHBEaXNwYXRjaFNv
dXJjZTsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIExUUmVsYXlDb250cm9sbGVyCi0KLS0gKGlk
KWluaXRXaXRoRGV2aWNlOihTaW1EZXZpY2UgKilkZXZpY2UgcHJvZHVjdERpcjooTlNTdHJpbmcg
Kilwcm9kdWN0RGlyIGFwcFBhdGg6KE5TU3RyaW5nICopYXBwUGF0aCBkZXZpY2VVRElEOihOU1VV
SUQgKil1ZGlkIGR1bXBUb29sQXJndW1lbnRzOihOU0FycmF5ICopYXJndW1lbnRzCi17Ci0gICAg
aWYgKChzZWxmID0gW3N1cGVyIGluaXRdKSkgewotICAgICAgICBfZGV2aWNlID0gZGV2aWNlOwot
ICAgICAgICBfcHJvZHVjdERpciA9IHByb2R1Y3REaXI7Ci0gICAgICAgIF9hcHBQYXRoID0gYXBw
UGF0aDsKLSAgICAgICAgX2FwcEJ1bmRsZUlkZW50aWZpZXIgPSBbW05TQnVuZGxlIGJ1bmRsZVdp
dGhQYXRoOmFwcFBhdGhdIGJ1bmRsZUlkZW50aWZpZXJdOwotICAgICAgICBfZGV2aWNlVURJRCA9
IHVkaWQ7Ci0gICAgICAgIF9kdW1wVG9vbEFyZ3VtZW50cyA9IGFyZ3VtZW50czsKLSAgICAgICAg
X3N0YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJjZSA9IGRpc3BhdGNoX3NvdXJjZV9jcmVhdGUoRElT
UEFUQ0hfU09VUkNFX1RZUEVfUkVBRCwgU1RESU5fRklMRU5PLCAwLCBkaXNwYXRjaF9nZXRfbWFp
bl9xdWV1ZSgpKTsKLSAgICAgICAgX3N0YW5kYXJkT3V0cHV0ID0gW05TRmlsZUhhbmRsZSBmaWxl
SGFuZGxlV2l0aFN0YW5kYXJkT3V0cHV0XTsKLSAgICAgICAgX3N0YW5kYXJkRXJyb3IgPSBbTlNG
aWxlSGFuZGxlIGZpbGVIYW5kbGVXaXRoU3RhbmRhcmRFcnJvcl07Ci0KLSAgICAgICAgZGlzcGF0
Y2hfc291cmNlX3NldF9ldmVudF9oYW5kbGVyKF9zdGFuZGFyZElucHV0RGlzcGF0Y2hTb3VyY2Us
IF57Ci0gICAgICAgICAgICB1aW50OF90IGJ1ZmZlclsxMDI0XTsKLSAgICAgICAgICAgIHNzaXpl
X3QgbGVuID0gcmVhZChTVERJTl9GSUxFTk8sIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOwotICAg
ICAgICAgICAgaWYgKGxlbiA+IDApIHsKLSAgICAgICAgICAgICAgICBAdHJ5IHsKLSAgICAgICAg
ICAgICAgICAgICAgW1tbc2VsZiByZWxheV0gb3V0cHV0U3RyZWFtXSB3cml0ZTpidWZmZXIgbWF4
TGVuZ3RoOmxlbl07Ci0gICAgICAgICAgICAgICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICplKSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhlIGR1bXAgdG9vbCBjcmFz
aGVkLiBUaW1lIHRvIGRpZS4KLSAgICAgICAgICAgICAgICAgICAgW3NlbGYgZGlkQ3Jhc2hXaXRo
TWVzc2FnZTpuaWxdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgLy8gRU9GIFJlY2VpdmVkIG9uIHRoZSByZWxheSdzIHN0YW5kYXJkIGlu
cHV0LgotICAgICAgICAgICAgICAgIFtzZWxmIGZpbmlzaF07Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0pOwotCi0gICAgICAgIF9yZWxheSA9IFtbTFRQaXBlUmVsYXkgYWxsb2NdIGluaXRXaXRo
UHJlZml4OltAIi90bXAiIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpzZWxmLmlwY0lk
ZW50aWZpZXJdXTsKLSAgICAgICAgW19yZWxheSBzZXRSZWxheURlbGVnYXRlOnNlbGZdOwotICAg
IH0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAoTlNTdHJpbmcgKilpcGNJZGVudGlmaWVyCi17
Ci0gICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAtJUAiLCBzZWxmLmFw
cEJ1bmRsZUlkZW50aWZpZXIsIHNlbGYuZGV2aWNlVURJRC5VVUlEU3RyaW5nXTsKLX0KLQotLSAo
TlNTdHJpbmcgKilwcm9jZXNzTmFtZQotewotICAgIHJldHVybiBbc2VsZi5hcHBCdW5kbGVJZGVu
dGlmaWVyIGNvbXBvbmVudHNTZXBhcmF0ZWRCeVN0cmluZzpAIi4iXS5sYXN0T2JqZWN0OwotfQot
Ci0tICh2b2lkKWRpZFJlY2VpdmVTdGRvdXREYXRhOihOU0RhdGEgKilkYXRhCi17Ci0gICAgQHRy
eSB7Ci0gICAgICAgIFtbc2VsZiBzdGFuZGFyZE91dHB1dF0gd3JpdGVEYXRhOmRhdGFdOwotICAg
IH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAqZXhjZXB0aW9uKSB7Ci0gICAgICAgIC8vIE5TRmlsZUhh
bmRsZU9wZXJhdGlvbkV4Y2VwdGlvbgotICAgICAgICAvLyBCcm9rZW4gcGlwZSAtIHRoZSB0ZXN0
IGhhcm5lc3Mgc3RvcHBlZCBsaXN0ZW5pbmcgdG8gdXMsCi0gICAgICAgIC8vIHByb2JhYmx5IGJl
Y2F1c2Ugd2UgdGltZWQgb3V0IG9yIGEgcnVuIHdhcyBjYW5jZWxlZC4KLSAgICAgICAgZXhpdChF
WElUX0ZBSUxVUkUpOwotICAgIH0KLX0KLQotLSAodm9pZClkaWRSZWNlaXZlU3RkZXJyRGF0YToo
TlNEYXRhICopZGF0YQotewotICAgIEB0cnkgewotICAgICAgICBbW3NlbGYgc3RhbmRhcmRFcnJv
cl0gd3JpdGVEYXRhOmRhdGFdOwotICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAqZXhjZXB0aW9u
KSB7Ci0gICAgICAgIC8vIE5TRmlsZUhhbmRsZU9wZXJhdGlvbkV4Y2VwdGlvbgotICAgICAgICAv
LyBCcm9rZW4gcGlwZSAtIHRoZSB0ZXN0IGhhcm5lc3Mgc3RvcHBlZCBsaXN0ZW5pbmcgdG8gdXMs
Ci0gICAgICAgIC8vIHByb2JhYmx5IGJlY2F1c2Ugd2UgdGltZWQgb3V0IG9yIGEgcnVuIHdhcyBj
YW5jZWxlZC4KLSAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0KLX0KLQotLSAodm9p
ZClkaWREaXNjb25uZWN0Ci17Ci0gICAgZGlzcGF0Y2hfc3VzcGVuZChbc2VsZiBzdGFuZGFyZElu
cHV0RGlzcGF0Y2hTb3VyY2VdKTsKLX0KLQotLSAodm9pZClkaWRDb25uZWN0Ci17Ci0gICAgZGlz
cGF0Y2hfcmVzdW1lKFtzZWxmIHN0YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJjZV0pOwotfQotCi0t
ICh2b2lkKWRpZENyYXNoV2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIFtb
c2VsZiByZWxheV0gZGlzY29ubmVjdF07Ci0gICAgTlNTdHJpbmcgKmNyYXNoTWVzc2FnZSA9IFtO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiXG4jQ1JBU0hFRCAtICVAIChwaWQgJWQpXG4iLCBb
c2VsZiBwcm9jZXNzTmFtZV0sIFtzZWxmIHBpZF1dOwotCi0gICAgaWYgKG1lc3NhZ2UpCi0gICAg
ICAgIGNyYXNoTWVzc2FnZSA9IFtjcmFzaE1lc3NhZ2Ugc3RyaW5nQnlBcHBlbmRpbmdGb3JtYXQ6
QCIlQFxuIiwgbWVzc2FnZV07Ci0KLSAgICBbW3NlbGYgc3RhbmRhcmRFcnJvcl0gd3JpdGVEYXRh
OltjcmFzaE1lc3NhZ2UgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddXTsK
LSAgICBbW3NlbGYgc3RhbmRhcmRFcnJvcl0gY2xvc2VGaWxlXTsKLSAgICBbW3NlbGYgc3RhbmRh
cmRPdXRwdXRdIGNsb3NlRmlsZV07Ci0gICAgZXhpdChFWElUX0ZBSUxVUkUpOwotfQotCi0tICh2
b2lkKWluc3RhbGxBcHAKLXsKLSAgICBOU0RpY3Rpb25hcnkgKmluc3RhbGxPcHRpb25zID0gQHsK
LSAgICAgICAgKE5TU3RyaW5nICopa0NGQnVuZGxlSWRlbnRpZmllcktleTogc2VsZi5hcHBCdW5k
bGVJZGVudGlmaWVyLAotICAgIH07Ci0KLSAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKLSAgICBC
T09MIGluc3RhbGxlZCA9IFtzZWxmLmRldmljZSBpbnN0YWxsQXBwbGljYXRpb246W05TVVJMIGZp
bGVVUkxXaXRoUGF0aDpzZWxmLmFwcFBhdGhdIHdpdGhPcHRpb25zOmluc3RhbGxPcHRpb25zIGVy
cm9yOiZlcnJvcl07Ci0gICAgaWYgKCFpbnN0YWxsZWQpIHsKLSAgICAgICAgTlNMb2coQCJDb3Vs
ZG4ndCBpbnN0YWxsICVAOiAlQCIsIHNlbGYuYXBwUGF0aCwgZXJyb3IuZGVzY3JpcHRpb24pOwot
ICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotfQotCi0tICh2b2lkKWtpbGxBcHAK
LXsKLSAgICBkaXNwYXRjaF9zb3VyY2VfdCBkaXNwYXRjaCA9IFtzZWxmIGFwcERpc3BhdGNoU291
cmNlXTsKLQotICAgIGlmIChkaXNwYXRjaCkKLSAgICAgICAgZGlzcGF0Y2hfc291cmNlX2NhbmNl
bChkaXNwYXRjaCk7Ci0KLSAgICBpZiAoW3NlbGYgcGlkXSA+IDEpIHsKLSAgICAgICAga2lsbChz
ZWxmLnBpZCwgU0lHS0lMTCk7Ci0gICAgICAgIFtzZWxmIHNldFBpZDotMV07Ci0gICAgfQotICAg
IFtzZWxmIHNldEFwcERpc3BhdGNoU291cmNlOm5pbF07Ci19Ci0KLS0gKE5TRGljdGlvbmFyeSAq
KV9lbnZpcm9ubWVudFZhcmlhYmxlcwotewotICAgIHN0YXRpYyBOU0RpY3Rpb25hcnkgKmVudmly
b25tZW50VmFyaWFibGVzOwotICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZTsKLQotICAg
IGRpc3BhdGNoX29uY2UoJm9uY2UsIF57Ci0gICAgICAgIE5TU3RyaW5nICpwcm9kdWN0RGlyZWN0
b3J5ID0gW3NlbGYgcHJvZHVjdERpcl07Ci0KLSAgICAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAq
ZGljdGlvbmFyeSA9IFtAewotICAgICAgICAgICAgQCJJUENfSURFTlRJRklFUiI6IHNlbGYuaXBj
SWRlbnRpZmllciwKLSAgICAgICAgICAgIEAiRFlMRF9GUkFNRVdPUktfUEFUSCI6IHByb2R1Y3RE
aXJlY3RvcnksCi0gICAgICAgICAgICBAIl9fWFBDX0RZTERfRlJBTUVXT1JLX1BBVEgiOiBwcm9k
dWN0RGlyZWN0b3J5LAotICAgICAgICAgICAgQCJEWUxEX0xJQlJBUllfUEFUSCI6IHByb2R1Y3RE
aXJlY3RvcnksCi0gICAgICAgICAgICBAIl9fWFBDX0RZTERfTElCUkFSWV9QQVRIIjogcHJvZHVj
dERpcmVjdG9yeSwKLSAgICAgICAgfSBtdXRhYmxlQ29weV07Ci0KLSAgICAgICAgZm9yIChOU1N0
cmluZyAqa2V5TmFtZSBpbiBAW0AiRFlMRF9JTlNFUlRfTElCUkFSSUVTIiwgQCJNYWxsb2NTdGFj
a0xvZ2dpbmciLCBAIkxPQ0FMX1JFU09VUkNFX1JPT1QiLCBAIkRVTVBSRU5ERVJUUkVFX1RFTVAi
XSkgewotICAgICAgICAgICAgY29uc3QgY2hhciogdmFsdWUgPSBnZXRlbnYoW2tleU5hbWUgVVRG
OFN0cmluZ10pOwotICAgICAgICAgICAgaWYgKHZhbHVlICYmIHN0cmxlbih2YWx1ZSkpIHsKLSAg
ICAgICAgICAgICAgICBOU1N0cmluZyAqbnNWYWx1ZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRG
OFN0cmluZzp2YWx1ZV07Ci0gICAgICAgICAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0Om5z
VmFsdWUgZm9yS2V5OmtleU5hbWVdOwotICAgICAgICAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9i
amVjdDpuc1ZhbHVlIGZvcktleTpbQCJfX1hQQ18iIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOmtl
eU5hbWVdXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoY2hhcioq
IGVudnAgPSAqX05TR2V0RW52aXJvbigpOyAqZW52cDsgZW52cCsrKSB7Ci0gICAgICAgICAgICBj
b25zdCBjaGFyKiBlbnYgPSAqZW52cDsKLSAgICAgICAgICAgIGlmICghc3RybmNtcCgiSlNDXyIs
IGVudiwgNCkgfHwgIXN0cm5jbXAoIl9fWFBDX0pTQ18iLCBlbnYsIDEwKSkgewotICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIGVxdWFsID0gc3RyY2hyKGVudiwgJz0nKTsKLSAgICAgICAgICAg
ICAgICBpZiAoIWVxdWFsKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5TTG9nKEAiTWlzc2luZyAn
PScgaW4gZW52IHZhciAnJXMnIiwgZW52KTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBtYXhLZXlMZW5ndGggPSAyNTY7Ci0gICAgICAgICAgICAgICAgc2l6ZV90IGtleUxlbmd0aCA9
IGVxdWFsIC0gZW52OwotICAgICAgICAgICAgICAgIGlmIChrZXlMZW5ndGggPj0gbWF4S2V5TGVu
Z3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5TTG9nKEAiRW52IHZhciAnJXMnIGlzIHRvbyBs
b25nIiwgZW52KTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgY2hhciBrZXlbbWF4S2V5TGVuZ3RoXTsKLSAgICAgICAg
ICAgICAgICBzdHJuY3B5KGtleSwgZW52LCBrZXlMZW5ndGgpOwotICAgICAgICAgICAgICAgIGtl
eVtrZXlMZW5ndGhdID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB2YWx1ZSA9
IGVxdWFsICsgMTsKLQotICAgICAgICAgICAgICAgIE5TU3RyaW5nICpuc0tleSA9IFtOU1N0cmlu
ZyBzdHJpbmdXaXRoVVRGOFN0cmluZzprZXldOwotICAgICAgICAgICAgICAgIE5TU3RyaW5nICpu
c1ZhbHVlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnZhbHVlXTsKLSAgICAgICAg
ICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6bnNWYWx1ZSBmb3JLZXk6bnNLZXldOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXMgPSBb
ZGljdGlvbmFyeSBjb3B5XTsKLSAgICB9KTsKLQotICAgIHJldHVybiBlbnZpcm9ubWVudFZhcmlh
YmxlczsKLX0KLQotLSAodm9pZClsYXVuY2hBcHAKLXsKLSAgICBOU0RpY3Rpb25hcnkgKmxhdW5j
aE9wdGlvbnMgPSBAewotICAgICAgICBrU2ltRGV2aWNlTGF1bmNoQXBwbGljYXRpb25FbnZpcm9u
bWVudDogW3NlbGYgX2Vudmlyb25tZW50VmFyaWFibGVzXSwKLSAgICAgICAga1NpbURldmljZUxh
dW5jaEFwcGxpY2F0aW9uQXJndW1lbnRzOiBbc2VsZiBkdW1wVG9vbEFyZ3VtZW50c10sCi0gICAg
fTsKLQotICAgIE5TRXJyb3IgKmVycm9yOwotICAgIHBpZF90IHBpZCA9IFtzZWxmLmRldmljZSBs
YXVuY2hBcHBsaWNhdGlvbldpdGhJRDpzZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIgb3B0aW9uczps
YXVuY2hPcHRpb25zIGVycm9yOiZlcnJvcl07Ci0KLSAgICBpZiAocGlkIDwgMCkgewotICAgICAg
ICBOU0xvZyhAIkNvdWxkbid0IGxhdW5jaCAlQDogJUAiLCBzZWxmLmFwcEJ1bmRsZUlkZW50aWZp
ZXIsIGVycm9yLmRlc2NyaXB0aW9uKTsKLSAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAg
IH0KLQotICAgIFtzZWxmIHNldFBpZDpwaWRdOwotCi0gICAgZGlzcGF0Y2hfcXVldWVfdCBxdWV1
ZSA9IGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCk7Ci0gICAgZGlzcGF0Y2hfc291cmNlX3Qgc2lt
dWxhdG9yQXBwRXhpdERpc3BhdGNoU291cmNlID0gZGlzcGF0Y2hfc291cmNlX2NyZWF0ZShESVNQ
QVRDSF9TT1VSQ0VfVFlQRV9QUk9DLCBbc2VsZiBwaWRdLCBESVNQQVRDSF9QUk9DX0VYSVQsIHF1
ZXVlKTsKLSAgICBbc2VsZiBzZXRBcHBEaXNwYXRjaFNvdXJjZTpzaW11bGF0b3JBcHBFeGl0RGlz
cGF0Y2hTb3VyY2VdOwotICAgIGRpc3BhdGNoX3NvdXJjZV9zZXRfZXZlbnRfaGFuZGxlcihzaW11
bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3VyY2UsIF57Ci0gICAgICAgIGRpc3BhdGNoX3NvdXJjZV9j
YW5jZWwoc2ltdWxhdG9yQXBwRXhpdERpc3BhdGNoU291cmNlKTsKLSAgICAgICAgW3NlbGYgZGlk
Q3Jhc2hXaXRoTWVzc2FnZTpuaWxdOwotICAgIH0pOwotICAgIGRpc3BhdGNoX3Jlc3VtZShzaW11
bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3VyY2UpOwotfQotCi0tICh2b2lkKXN0YXJ0Ci17Ci0gICAg
W3NlbGYgaW5zdGFsbEFwcF07Ci0gICAgW1tzZWxmIHJlbGF5XSBzZXR1cF07Ci0gICAgW3NlbGYg
bGF1bmNoQXBwXTsKLSAgICBbW3NlbGYgcmVsYXldIGNvbm5lY3RdOwotfQotCi0tICh2b2lkKWZp
bmlzaAotewotICAgIFtbc2VsZiByZWxheV0gZGlzY29ubmVjdF07Ci0gICAgW3NlbGYga2lsbEFw
cF07Ci0gICAgZXhpdChFWElUX1NVQ0NFU1MpOwotfQotCi1AZW5kCkluZGV4OiBUb29scy9MYXlv
dXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L21haW4ubQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9M
YXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L21haW4ubQkocmV2aXNpb24gMjEwNTQ5KQor
KysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9tYWluLm0JKG5vbmV4aXN0
ZW50KQpAQCAtMSwxMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgIkNvcmVT
aW11bGF0b3JTUEkuaCIKLSNpbXBvcnQgIkxUUmVsYXlDb250cm9sbGVyLmgiCi0jaW1wb3J0IDxG
b3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotc3RhdGljIExUUmVsYXlDb250cm9sbGVyICpyZWxh
eUNvbnRyb2xsZXI7Ci0KLXZvaWQgdXNhZ2UoKQotewotICAgIE5TU3RyaW5nICpoZWxwVGV4dCA9
IEAiTGF5b3V0VGVzdFJlbGF5OiBydW4gYSBkdW1wIHRvb2wgaW4gdGhlIHNpbXVsYXRvci4gTm90
IGZvciBkaXJlY3QgY29uc3VtcHRpb24uXG4iCi0gICAgICAgICJVc2FnZTogTGF5b3V0VGVzdFJl
bGF5IFstaF0gW29wdGlvbnNdIC0tIFtkdW1wIHRvb2wgYXJndW1lbnRzXVxuIgotICAgICAgICAi
UmVxdWlyZWQgb3B0aW9uczpcbiIKLSAgICAgICAgIiAgICAtdWRpZCA8aWRlbnRpZmllcj4gICAg
ICAgU2ltdWxhdG9yIGRldmljZSBpZGVudGlmaWVyXG4iCi0gICAgICAgICIgICAgLWFwcCA8YXBw
X3BhdGg+ICAgICAgICAgIFBhdGggdG8gdGhlIGJ1aWx0IGlPUyAuYXBwIGJ1bmRsZSBkaXJlY3Rv
cnkuXG4iCi0gICAgICAgICIgICAgLXByb2R1Y3REaXIgPGRpcj4gICAgICAgIC9wYXRoL3RvL1dl
YktpdEJ1aWxkL3tjb25maWd1cmF0aW9ufS17c2hvcnQgcGxhdGZvcm19LlxuIjsKLQotICAgIGZw
cmludGYoc3RkZXJyLCAiJXNcbiIsIFtoZWxwVGV4dCBVVEY4U3RyaW5nXSk7Ci19Ci0KLU5TU3Ry
aW5nICpnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KE5TU3RyaW5nICpwYXJhbWV0ZXIpCi17Ci0g
ICAgTlNVc2VyRGVmYXVsdHMgKmRlZmF1bHRzID0gW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNl
ckRlZmF1bHRzXTsKLSAgICBOU1N0cmluZyAqYXJndW1lbnQgPSBbZGVmYXVsdHMgc3RyaW5nRm9y
S2V5OnBhcmFtZXRlcl07Ci0KLSAgICBpZiAoIWFyZ3VtZW50KSB7Ci0gICAgICAgIE5TTG9nKEAi
LSVAIGlzIHJlcXVpcmVkLiIsIHBhcmFtZXRlcik7Ci0gICAgICAgIHVzYWdlKCk7Ci0gICAgICAg
IGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci0gICAgcmV0dXJuIGFyZ3VtZW50OwotfQotCi1O
U0FycmF5ICpnZXREdW1wVG9vbEFyZ3VtZW50cygpCi17Ci0gICAgTlNNdXRhYmxlQXJyYXkgKmR1
bXBUb29sQXJndW1lbnRzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07Ci0gICAgTlNB
cnJheSAqcHJvY2Vzc0FyZ3MgPSBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIGFyZ3VtZW50
c107Ci0gICAgQk9PTCBhcHBlbmRpbmcgPSBOTzsKLSAgICBmb3IgKE5TU3RyaW5nICphcmcgaW4g
cHJvY2Vzc0FyZ3MpIHsKLSAgICAgICAgaWYgKFthcmcgaXNFcXVhbFRvU3RyaW5nOkAiLS0iXSkg
ewotICAgICAgICAgICAgYXBwZW5kaW5nID0gWUVTOwotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKGFwcGVuZGluZykKLSAgICAgICAgICAgIFtkdW1wVG9vbEFy
Z3VtZW50cyBhZGRPYmplY3Q6YXJnXTsKLSAgICB9Ci0gICAgcmV0dXJuIGR1bXBUb29sQXJndW1l
bnRzOwotfQotCi12b2lkIGZpbmlzaCgpCi17Ci0gICAgW3JlbGF5Q29udHJvbGxlciBmaW5pc2hd
OwotfQotCi12b2lkIHJlY2VpdmVkU2lnbmFsKGludCBzaWduYWwpCi17Ci0gICAgZXhpdChFWElU
X1NVQ0NFU1MpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqIGFyZ3ZbXSkK
LXsKLSAgICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAgICAgICAgTlNBcnJheSAqaGVscEFyZ3VtZW50
cyA9IEBbQCItaCIsIEAiLS1oZWxwIl07Ci0gICAgICAgIGZvciAoTlNTdHJpbmcgKmhlbHBBcmd1
bWVudCBpbiBoZWxwQXJndW1lbnRzKSB7Ci0gICAgICAgICAgICBpZiAoW1tbTlNQcm9jZXNzSW5m
byBwcm9jZXNzSW5mb10gYXJndW1lbnRzXSBpbmRleE9mT2JqZWN0OmhlbHBBcmd1bWVudF0gIT0g
TlNOb3RGb3VuZCkgewotICAgICAgICAgICAgICAgIHVzYWdlKCk7Ci0gICAgICAgICAgICAgICAg
ZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSNpZiBVU0Vf
U0lNX1NFUlZJQ0VfQ09OVEVYVAotICAgICAgICBOU1N0cmluZyAqZGV2ZWxvcGVyRGlyZWN0b3J5
ID0gZ2V0UmVxdWlyZWRTdHJpbmdBcmd1bWVudChAImRldmVsb3BlckRpciIpOwotI2VuZGlmCi0g
ICAgICAgIE5TVVVJRCAqdWRpZCA9IFtbTlNVVUlEIGFsbG9jXSBpbml0V2l0aFVVSURTdHJpbmc6
Z2V0UmVxdWlyZWRTdHJpbmdBcmd1bWVudChAInVkaWQiKV07Ci0gICAgICAgIE5TU3RyaW5nICph
cHBQYXRoID0gZ2V0UmVxdWlyZWRTdHJpbmdBcmd1bWVudChAImFwcCIpOwotICAgICAgICBOU1N0
cmluZyAqcHJvZHVjdERpcmVjdG9yeSA9IGdldFJlcXVpcmVkU3RyaW5nQXJndW1lbnQoQCJwcm9k
dWN0RGlyIik7Ci0gICAgICAgIE5TQXJyYXkgKmR1bXBUb29sQXJndW1lbnRzID0gZ2V0RHVtcFRv
b2xBcmd1bWVudHMoKTsKLQotI2lmIFVTRV9TSU1fU0VSVklDRV9DT05URVhUCi0gICAgICAgIE5T
RXJyb3IgKmVycm9yOwotICAgICAgICBTaW1TZXJ2aWNlQ29udGV4dCAqc2VydmljZUNvbnRleHQg
PSBbU2ltU2VydmljZUNvbnRleHQgc2hhcmVkU2VydmljZUNvbnRleHRGb3JEZXZlbG9wZXJEaXI6
ZGV2ZWxvcGVyRGlyZWN0b3J5IGVycm9yOiZlcnJvcl07Ci0gICAgICAgIGlmICghc2VydmljZUNv
bnRleHQpIHsKLSAgICAgICAgICAgIE5TTG9nKEAiRGV2aWNlIGNvbnRleHQgY291bGRuJ3QgYmUg
Zm91bmQ6ICVAIiwgZXJyb3IpOwotICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAg
ICAgICB9Ci0gICAgICAgIFNpbURldmljZVNldCAqZGV2aWNlU2V0ID0gW3NlcnZpY2VDb250ZXh0
IGRlZmF1bHREZXZpY2VTZXRXaXRoRXJyb3I6bmlsXTsKLSAgICAgICAgaWYgKCFkZXZpY2VTZXQp
IHsKLSAgICAgICAgICAgIE5TTG9nKEAiRGVmYXVsdCBkZXZpY2Ugc2V0IGNvdWxkbid0IGJlIGZv
dW5kOiAlQCIsIGVycm9yKTsKLSAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAg
ICAgfQotICAgICAgICBTaW1EZXZpY2UgKmRldmljZSA9IFtkZXZpY2VTZXQuZGV2aWNlc0J5VURJ
RCBvYmplY3RGb3JLZXk6dWRpZF07Ci0jZWxzZQotICAgICAgICBTaW1EZXZpY2UgKmRldmljZSA9
IFtTaW1EZXZpY2VTZXQuZGVmYXVsdFNldC5kZXZpY2VzQnlVRElEIG9iamVjdEZvcktleTp1ZGlk
XTsKLSNlbmRpZgotICAgICAgICBpZiAoIWRldmljZSkgewotICAgICAgICAgICAgTlNMb2coQCJE
ZXZpY2UgJUAgY291bGRuJ3QgYmUgZm91bmQiLCB1ZGlkKTsKLSAgICAgICAgICAgIGV4aXQoRVhJ
VF9GQUlMVVJFKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJlbGF5Q29udHJvbGxlciA9IFtbTFRS
ZWxheUNvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoRGV2aWNlOmRldmljZSBwcm9kdWN0RGlyOnBy
b2R1Y3REaXJlY3RvcnkgYXBwUGF0aDphcHBQYXRoIGRldmljZVVESUQ6dWRpZCBkdW1wVG9vbEFy
Z3VtZW50czpkdW1wVG9vbEFyZ3VtZW50c107Ci0gICAgICAgIFtyZWxheUNvbnRyb2xsZXIgc3Rh
cnRdOwotCi0gICAgICAgIGF0ZXhpdChmaW5pc2gpOwotICAgICAgICBzaWduYWwoU0lHSU5ULCBy
ZWNlaXZlZFNpZ25hbCk7Ci0gICAgICAgIHNpZ25hbChTSUdURVJNLCByZWNlaXZlZFNpZ25hbCk7
Ci0KLSAgICAgICAgW1tOU1J1bkxvb3AgbWFpblJ1bkxvb3BdIHJ1bl07Ci0gICAgfQotICAgIHJl
dHVybiAwOwotfQpJbmRleDogVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQJKHJldmlzaW9uIDIxMDU0OSkKKysrIFRvb2xz
L1NjcmlwdHMvYnVpbGQtd2Via2l0CSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsMTAgKzIwMCw2IEBA
IGlmIChpc0FwcGxlTWFjV2ViS2l0KCkpIHsKICAgICAgICAgcHVzaCBAY29weUxpYnJhcmllc0Fy
Z3MsIHByb2R1Y3REaXIoKTsKICAgICAgICAgcHJpbnQoam9pbigiICIsIEBjb3B5TGlicmFyaWVz
QXJncykgLiAiXG4iKTsKICAgICAgICAgKHN5c3RlbShAY29weUxpYnJhcmllc0FyZ3MpID09IDAp
IG9yIGRpZTsKLQotICAgICAgICBpZiAod2lsbFVzZUlPU1NpbXVsYXRvclNESygpKSB7Ci0gICAg
ICAgICAgICAoc3lzdGVtKCJwZXJsIiwgIlRvb2xzL1NjcmlwdHMvYnVpbGQtbGF5b3V0dGVzdHJl
bGF5IiwgYXJndW1lbnRzRm9yQ29uZmlndXJhdGlvbigpKSA9PSAwKSBvciBkaWU7Ci0gICAgICAg
IH0KICAgICB9CiAKICAgICAjIEJ1aWxkIFRvb2xzIG5lZWRlZCBmb3IgQXBwbGUgcG9ydHMKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5CShyZXZpc2lvbiAyMTA1NDkpCisrKyBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQkod29ya2luZyBjb3B5KQpAQCAtMTMx
LDYgKzEzMSw3IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgc2VsZi5fd2ViX3BsYXRm
b3JtX3Rlc3Rfc2VydmVyID0gTm9uZQogICAgICAgICBzZWxmLl9pbWFnZV9kaWZmZXIgPSBOb25l
CiAgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gc2VydmVyX3Byb2Nl
c3MuU2VydmVyUHJvY2VzcyAgIyBvdmVycmlkYWJsZSBmb3IgdGVzdGluZworICAgICAgICBzZWxm
Ll90ZXN0X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gc2VydmVyX3Byb2Nlc3MuU2VydmVy
UHJvY2VzcwogCiAgICAgICAgIGlmIG5vdCBoYXNhdHRyKG9wdGlvbnMsICdjb25maWd1cmF0aW9u
Jykgb3Igbm90IG9wdGlvbnMuY29uZmlndXJhdGlvbjoKICAgICAgICAgICAgIHNlbGYuc2V0X29w
dGlvbl9kZWZhdWx0KCdjb25maWd1cmF0aW9uJywgc2VsZi5kZWZhdWx0X2NvbmZpZ3VyYXRpb24o
KSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW4ucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weQkocmV2aXNpb24gMjEw
NTQ5KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weQkod29ya2luZyBj
b3B5KQpAQCAtMTc0LDMgKzE3NCwxMSBAQCBjbGFzcyBEYXJ3aW5Qb3J0KEFwcGxlUG9ydCk6CiAg
ICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvcjoKICAgICAgICAgICAgIF9sb2cud2FybigieGNydW4g
ZmFpbGVkOyBmYWxsaW5nIGJhY2sgdG8gJyVzJy4iICUgZmFsbGJhY2spCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsbGJhY2sKKworICAgIGRlZiBleHRyYWN0X2J1bmRsZV9JRChzZWxmLCBhcHApOgor
ICAgICAgICBwbGlzdF9wYXRoID0gYXBwICsgJy9JbmZvLnBsaXN0JworICAgICAgICBpZiBub3Qg
c2VsZi5fZmlsZXN5c3RlbS5leGlzdHMocGxpc3RfcGF0aCk6CisgICAgICAgICAgICBwbGlzdF9w
YXRoID0gcGxpc3RfcGF0aCA9IGFwcCArICcvQ29udGVudHMvSW5mby5wbGlzdCcKKyAgICAgICAg
aWYgbm90IHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHBsaXN0X3BhdGgpOgorICAgICAgICAgICAg
cmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChb
Jy91c3IvbGliZXhlYy9QbGlzdEJ1ZGR5JywgJy1jJywgJ1ByaW50IENGQnVuZGxlSWRlbnRpZmll
cicsIHBsaXN0X3BhdGhdKS5yc3RyaXAoKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L2RyaXZlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
ZHJpdmVyLnB5CShyZXZpc2lvbiAyMTA1NDkpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvZHJpdmVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNyArMTM4LDcgQEAgY2xhc3MgRHJp
dmVyKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2RyaXZlcl91c2VyX2RpcmVjdG9yeV9zdWZmaXgg
PSBOb25lCiAgICAgICAgIHNlbGYuX2RyaXZlcl91c2VyX2NhY2hlX2RpcmVjdG9yeSA9IE5vbmUK
IAotICAgICAgICAjIFdlYktpdFRlc3RSdW5uZXIvTGF5b3V0VGVzdFJlbGF5IGNhbiByZXBvcnQg
YmFjayBzdWJwcm9jZXNzIGNyYXNoZXMgYnkgcHJpbnRpbmcKKyAgICAgICAgIyBXZWJLaXRUZXN0
UnVubmVyIGNhbiByZXBvcnQgYmFjayBzdWJwcm9jZXNzIGNyYXNoZXMgYnkgcHJpbnRpbmcKICAg
ICAgICAgIyAiI0NSQVNIRUQgLSBQUk9DRVNTTkFNRSIuICBTaW5jZSB0aG9zZSBjYW4gaGFwcGVu
IGF0IGFueSB0aW1lIGFuZCBTZXJ2ZXJQcm9jZXNzCiAgICAgICAgICMgd29uJ3QgYmUgYXdhcmUg
b2YgdGhlbSAoc2luY2UgdGhlIGFjdHVhbCB0b29sIGRpZG4ndCBjcmFzaCwganVzdCBhIHN1YnBy
b2Nlc3MpCiAgICAgICAgICMgd2UgcmVjb3JkIHRoZSBjcmFzaGVkIHN1YnByb2Nlc3MgbmFtZSBo
ZXJlLgpAQCAtMzI3LDcgKzMyNyw2IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogCiAgICAgZGVm
IF9zZXR1cF9lbnZpcm9uX2Zvcl9kcml2ZXIoc2VsZiwgZW52aXJvbm1lbnQpOgogICAgICAgICBi
dWlsZF9yb290X3BhdGggPSBzdHIoc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgpKQotICAgICAgICAj
IEZJWE1FOiBEWUxEXyogdmFyaWFibGVzIHNob3VsZCBiZSBNYWMtb25seS4gRXZlbiBpT1MgU2lt
dWxhdG9yIGRvZXNuJ3QgbmVlZCB0aGVtLCBhcyBMYXlvdXRUZXN0UmVsYXkgaXMgYSBob3N0IGJp
bmFyeS4KICAgICAgICAgc2VsZi5fYXBwZW5kX2Vudmlyb25tZW50X3ZhcmlhYmxlX3BhdGgoZW52
aXJvbm1lbnQsICdEWUxEX0xJQlJBUllfUEFUSCcsIGJ1aWxkX3Jvb3RfcGF0aCkKICAgICAgICAg
c2VsZi5fYXBwZW5kX2Vudmlyb25tZW50X3ZhcmlhYmxlX3BhdGgoZW52aXJvbm1lbnQsICdfX1hQ
Q19EWUxEX0xJQlJBUllfUEFUSCcsIGJ1aWxkX3Jvb3RfcGF0aCkKICAgICAgICAgc2VsZi5fYXBw
ZW5kX2Vudmlyb25tZW50X3ZhcmlhYmxlX3BhdGgoZW52aXJvbm1lbnQsICdEWUxEX0ZSQU1FV09S
S19QQVRIJywgYnVpbGRfcm9vdF9wYXRoKQpAQCAtMzY5LDcgKzM2OCw3IEBAIGNsYXNzIERyaXZl
cihvYmplY3QpOgogICAgICAgICBlbnZpcm9ubWVudCA9IHNlbGYuX3NldHVwX2Vudmlyb25fZm9y
X3Rlc3QoKQogICAgICAgICBzZWxmLl9jcmFzaGVkX3Byb2Nlc3NfbmFtZSA9IE5vbmUKICAgICAg
ICAgc2VsZi5fY3Jhc2hlZF9waWQgPSBOb25lCi0gICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNz
ID0gc2VsZi5fcG9ydC5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3Ioc2VsZi5fcG9ydCwgc2Vs
Zi5fc2VydmVyX25hbWUsIHNlbGYuY21kX2xpbmUocGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3Mp
LCBlbnZpcm9ubWVudCkKKyAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3MgPSBzZWxmLl9wb3J0
Ll90ZXN0X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yKHNlbGYuX3BvcnQsIHNlbGYuX3NlcnZl
cl9uYW1lLCBzZWxmLmNtZF9saW5lKHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKSwgZW52aXJv
bm1lbnQpCiAgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzLnN0YXJ0KCkKIAogICAgIGRlZiBf
cnVuX3Bvc3Rfc3RhcnRfdGFza3Moc2VsZik6CkBAIC02MTEsMjEgKzYxMCwxNiBAQCBjbGFzcyBE
cml2ZXIob2JqZWN0KToKICAgICAgICAgcmV0dXJuIFRydWUKIAogCi0jIEZJWE1FOiB0aGlzIHNo
b3VsZCBiZSBhYnN0cmFjdGVkIG91dCB2aWEgdGhlIFBvcnQgc3ViY2xhc3Mgc29tZWhvdy4KIGNs
YXNzIElPU1NpbXVsYXRvckRyaXZlcihEcml2ZXIpOgogICAgIGRlZiBjbWRfbGluZShzZWxmLCBw
aXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyk6CiAgICAgICAgIGNtZCA9IHN1cGVyKElPU1NpbXVs
YXRvckRyaXZlciwgc2VsZikuY21kX2xpbmUocGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpCi0g
ICAgICAgIHJlbGF5X3Rvb2wgPSBzZWxmLl9wb3J0LnJlbGF5X3BhdGgKICAgICAgICAgZHVtcF90
b29sID0gY21kWzBdCiAgICAgICAgIGR1bXBfdG9vbF9hcmdzID0gY21kWzE6XQotICAgICAgICBw
cm9kdWN0X2RpciA9IHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoKQogICAgICAgICByZWxheV9hcmdz
ID0gWwotICAgICAgICAgICAgJy1kZXZlbG9wZXJEaXInLCBzZWxmLl9wb3J0LmRldmVsb3Blcl9k
aXIsCi0gICAgICAgICAgICAnLXVkaWQnLCBzZWxmLl9wb3J0LmRldmljZV9pZF9mb3Jfd29ya2Vy
X251bWJlcihzZWxmLl93b3JrZXJfbnVtYmVyKSwKLSAgICAgICAgICAgICctcHJvZHVjdERpcics
IHByb2R1Y3RfZGlyLAotICAgICAgICAgICAgJy1hcHAnLCBkdW1wX3Rvb2wsCisgICAgICAgICAg
ICBzZWxmLl9wb3J0LmRldmljZV9pZF9mb3Jfd29ya2VyX251bWJlcihzZWxmLl93b3JrZXJfbnVt
YmVyKSwKKyAgICAgICAgICAgIGR1bXBfdG9vbCwKICAgICAgICAgXQotICAgICAgICByZXR1cm4g
W3JlbGF5X3Rvb2xdICsgcmVsYXlfYXJncyArIFsnLS0nXSArIGR1bXBfdG9vbF9hcmdzCisgICAg
ICAgIHJldHVybiByZWxheV9hcmdzICsgWyctLSddICsgZHVtcF90b29sX2FyZ3MKIAogICAgIGRl
ZiBfc2V0dXBfZW52aXJvbl9mb3JfZHJpdmVyKHNlbGYsIGVudmlyb25tZW50KToKICAgICAgICAg
ZW52aXJvbm1lbnRbJ0RFVkVMT1BFUl9ESVInXSA9IHNlbGYuX3BvcnQuZGV2ZWxvcGVyX2RpcgpJ
bmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlcl91bml0dGVzdC5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyX3VuaXR0ZXN0LnB5
CShyZXZpc2lvbiAyMTA1NDkpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVy
X3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNjQsNyArMjY0LDcgQEAgY2xhc3MgRHJp
dmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9zdG9wX2NsZWFuc191
cF9wcm9wZXJseShzZWxmKToKICAgICAgICAgcG9ydCA9IFRlc3RXZWJLaXRQb3J0KCkKLSAgICAg
ICAgcG9ydC5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJvY2Vzcwor
ICAgICAgICBwb3J0Ll90ZXN0X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gTW9ja1NlcnZl
clByb2Nlc3MKICAgICAgICAgZHJpdmVyID0gRHJpdmVyKHBvcnQsIDAsIHBpeGVsX3Rlc3RzPVRy
dWUpCiAgICAgICAgIGRyaXZlci5zdGFydChUcnVlLCBbXSkKICAgICAgICAgbGFzdF90bXBkaXIg
PSBwb3J0Ll9maWxlc3lzdGVtLmxhc3RfdG1wZGlyCkBAIC0yNzQsNyArMjc0LDcgQEAgY2xhc3Mg
RHJpdmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF90d29fc3RhcnRz
X2NsZWFuc191cF9wcm9wZXJseShzZWxmKToKICAgICAgICAgcG9ydCA9IFRlc3RXZWJLaXRQb3J0
KCkKLSAgICAgICAgcG9ydC5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVy
UHJvY2VzcworICAgICAgICBwb3J0Ll90ZXN0X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0g
TW9ja1NlcnZlclByb2Nlc3MKICAgICAgICAgZHJpdmVyID0gRHJpdmVyKHBvcnQsIDAsIHBpeGVs
X3Rlc3RzPVRydWUpCiAgICAgICAgIGRyaXZlci5zdGFydChUcnVlLCBbXSkKICAgICAgICAgbGFz
dF90bXBkaXIgPSBwb3J0Ll9maWxlc3lzdGVtLmxhc3RfdG1wZGlyCkBAIC0yODMsNyArMjgzLDcg
QEAgY2xhc3MgRHJpdmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9z
dGFydF9hY3R1YWxseV9zdGFydHMoc2VsZik6CiAgICAgICAgIHBvcnQgPSBUZXN0V2ViS2l0UG9y
dCgpCi0gICAgICAgIHBvcnQuX3NlcnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gTW9ja1NlcnZl
clByb2Nlc3MKKyAgICAgICAgcG9ydC5fdGVzdF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9
IE1vY2tTZXJ2ZXJQcm9jZXNzCiAgICAgICAgIGRyaXZlciA9IERyaXZlcihwb3J0LCAwLCBwaXhl
bF90ZXN0cz1UcnVlKQogICAgICAgICBkcml2ZXIuc3RhcnQoVHJ1ZSwgW10pCiAgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShkcml2ZXIuX3NlcnZlcl9wcm9jZXNzLnN0YXJ0ZWQpCkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9pb3MucHkJKHJldmlzaW9uIDIxMDU0OSkKKysrIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9pb3MucHkJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAg
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzLnRlc3RfYwogZnJvbSB3ZWJraXRweS5w
b3J0IGltcG9ydCBjb25maWcgYXMgcG9ydF9jb25maWcKIGZyb20gd2Via2l0cHkucG9ydCBpbXBv
cnQgZHJpdmVyLCBpbWFnZV9kaWZmCiBmcm9tIHdlYmtpdHB5LnBvcnQuZGFyd2luIGltcG9ydCBE
YXJ3aW5Qb3J0Citmcm9tIHdlYmtpdHB5LnBvcnQuc2ltdWxhdG9yX3Byb2Nlc3MgaW1wb3J0IFNp
bXVsYXRvclByb2Nlc3MKIGZyb20gd2Via2l0cHkueGNvZGUuc2ltdWxhdG9yIGltcG9ydCBTaW11
bGF0b3IsIFJ1bnRpbWUsIERldmljZVR5cGUKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5j
cmFzaGxvZ3MgaW1wb3J0IENyYXNoTG9ncwogCkBAIC03OCw3ICs3OSw2IEBAIGNsYXNzIElPU1Np
bXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAgICAgU0RLID0gJ2lwaG9uZXNpbXVsYXRvcicKIAog
ICAgIFNJTVVMQVRPUl9CVU5ETEVfSUQgPSAnY29tLmFwcGxlLmlwaG9uZXNpbXVsYXRvcicKLSAg
ICByZWxheV9uYW1lID0gJ0xheW91dFRlc3RSZWxheScKICAgICBTSU1VTEFUT1JfRElSRUNUT1JZ
ID0gIi90bXAvV2ViS2l0VGVzdGluZ1NpbXVsYXRvcnMvIgogICAgIExTUkVHSVNURVJfUEFUSCA9
ICIvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlU2VydmljZXMuZnJhbWV3b3JrL0ZyYW1l
d29ya3MvTGF1bmNoU2VydmljZXMuZnJhbWV3b3JrL1ZlcnNpb25zL0N1cnJlbnQvU3VwcG9ydC9s
c3JlZ2lzdGVyIgogICAgIFBST0NFU1NfQ09VTlRfRVNUSU1BVEVfUEVSX1NJTVVMQVRPUl9JTlNU
QU5DRSA9IDEwMApAQCAtOTcsNiArOTcsNyBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndp
blBvcnQpOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2Fy
Z3MpOgogICAgICAgICBEYXJ3aW5Qb3J0Ll9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwg
Kiprd2FyZ3MpCisgICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3Ig
PSBTaW11bGF0b3JQcm9jZXNzCiAKICAgICAgICAgb3B0aW9uYWxfZGV2aWNlX2NsYXNzID0gc2Vs
Zi5nZXRfb3B0aW9uKCdkZXZpY2VfY2xhc3MnKQogICAgICAgICBzZWxmLl9wcmludGluZ19jbWRf
bGluZSA9IEZhbHNlCkBAIC0xNDgsMTYgKzE0OSw2IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQo
RGFyd2luUG9ydCk6CiAgICAgICAgICAgICBkZXZpY2VfdHlwZSA9IERldmljZVR5cGUuZnJvbV9u
YW1lKGRldmljZV9uYW1lKQogICAgICAgICByZXR1cm4gZGV2aWNlX3R5cGUKIAotICAgIEBwcm9w
ZXJ0eQotICAgIEBtZW1vaXplZAotICAgIGRlZiByZWxheV9wYXRoKHNlbGYpOgotICAgICAgICBp
ZiBzZWxmLl9yb290X3dhc19zZXQ6Ci0gICAgICAgICAgICBwYXRoID0gc2VsZi5fZmlsZXN5c3Rl
bS5hYnNwYXRoKHNlbGYuZ2V0X29wdGlvbigncm9vdCcpKQotICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgbWFjX2NvbmZpZyA9IHBvcnRfY29uZmlnLkNvbmZpZyhzZWxmLl9leGVjdXRpdmUsIHNl
bGYuX2ZpbGVzeXN0ZW0sICdtYWMnKQotICAgICAgICAgICAgcGF0aCA9IG1hY19jb25maWcuYnVp
bGRfZGlyZWN0b3J5KHNlbGYuZ2V0X29wdGlvbignY29uZmlndXJhdGlvbicpKQotICAgICAgICBy
ZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHBhdGgsIHNlbGYucmVsYXlfbmFtZSkKLQogICAg
IEBtZW1vaXplZAogICAgIGRlZiBjaGlsZF9wcm9jZXNzZXMoc2VsZik6CiAgICAgICAgIHJldHVy
biBpbnQoc2VsZi5nZXRfb3B0aW9uKCdjaGlsZF9wcm9jZXNzZXMnKSkKQEAgLTE4MiwxOSArMTcz
LDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKIAogICAgICAgICByZXR1
cm4gbWluKG1heGltdW1fc2ltdWxhdG9yX2NvdW50X29uX3RoaXNfc3lzdGVtLCBiZXN0X2NoaWxk
X3Byb2Nlc3NfY291bnRfZm9yX2NwdSkKIAotICAgIGRlZiBfY2hlY2tfcmVsYXkoc2VsZik6Ci0g
ICAgICAgIGlmIG5vdCBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhzZWxmLnJlbGF5X3BhdGgpOgot
ICAgICAgICAgICAgX2xvZy5lcnJvcigiJXMgd2FzIG5vdCBmb3VuZCBhdCAlcyIgJSAoc2VsZi5y
ZWxheV9uYW1lLCBzZWxmLnJlbGF5X3BhdGgpKQotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0g
ICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYgX2NoZWNrX3BvcnRfYnVpbGQoc2VsZik6Ci0g
ICAgICAgIGlmIG5vdCBzZWxmLl9yb290X3dhc19zZXQgYW5kIHNlbGYuZ2V0X29wdGlvbignYnVp
bGQnKSBhbmQgbm90IHNlbGYuX2J1aWxkX3JlbGF5KCk6Ci0gICAgICAgICAgICByZXR1cm4gRmFs
c2UKLSAgICAgICAgaWYgbm90IHNlbGYuX2NoZWNrX3JlbGF5KCk6Ci0gICAgICAgICAgICByZXR1
cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRydWUKLQogICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhz
ZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0aW1lX2ZuPXRpbWUu
dGltZSwgc2xlZXBfZm49dGltZS5zbGVlcCwgd2FpdF9mb3JfbG9nPVRydWUpOgogICAgICAgICB0
aW1lX2ZuID0gdGltZV9mbiBvciB0aW1lLnRpbWUKICAgICAgICAgc2xlZXBfZm4gPSBzbGVlcF9m
biBvciB0aW1lLnNsZWVwCkBAIC0yMTUsNyArMTkzLDcgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9y
dChEYXJ3aW5Qb3J0KToKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXRfY3Jhc2hfbG9nKGNy
YXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9waWRbMF0sIGNyYXNoZWRfc3VicHJvY2Vzc19uYW1l
X2FuZF9waWRbMV0sIHN0ZG91dCwKICAgICAgICAgICAgICAgICAnXG4nLmpvaW4oc3RkZXJyX2xp
bmVzKSwgbmV3ZXJfdGhhbiwgdGltZV9mbiwgc2xlZXBfZm4sIHdhaXRfZm9yX2xvZykKIAotICAg
ICAgICAjIExheW91dFRlc3RSZWxheSBjcmFzaGVkCisgICAgICAgICMgQXBwIGNyYXNoZWQKICAg
ICAgICAgX2xvZy5kZWJ1ZygnbG9va2luZyBmb3IgY3Jhc2ggbG9nIGZvciAlczolcycgJSAobmFt
ZSwgc3RyKHBpZCkpKQogICAgICAgICBjcmFzaF9sb2cgPSAnJwogICAgICAgICBjcmFzaF9sb2dz
ID0gQ3Jhc2hMb2dzKHNlbGYuaG9zdCkKQEAgLTIzMywyNSArMjExLDYgQEAgY2xhc3MgSU9TU2lt
dWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgICAgIHJldHVybiBzdGRlcnIsIE5vbmUK
ICAgICAgICAgcmV0dXJuIHN0ZGVyciwgY3Jhc2hfbG9nCiAKLSAgICBkZWYgX2J1aWxkX3JlbGF5
KHNlbGYpOgotICAgICAgICBlbnZpcm9ubWVudCA9IHNlbGYuaG9zdC5jb3B5X2N1cnJlbnRfZW52
aXJvbm1lbnQoKQotICAgICAgICBlbnZpcm9ubWVudC5kaXNhYmxlX2djY19zbWFydHF1b3Rlcygp
Ci0gICAgICAgIGVudiA9IGVudmlyb25tZW50LnRvX2RpY3Rpb25hcnkoKQotCi0gICAgICAgIHRy
eToKLSAgICAgICAgICAgICMgRklYTUU6IFdlIHNob3VsZCBiZSBwYXNzaW5nIF9hcmd1bWVudHNf
Zm9yX2NvbmZpZ3VyYXRpb24oKSwgd2hpY2ggcmVzcGVjdHMgYnVpbGQgY29uZmlndXJhdGlvbiBh
bmQgcG9ydCwKLSAgICAgICAgICAgICMgaW5zdGVhZCBvZiBoYXJkY29kaW5nIC0taW9zLXNpbXVs
YXRvci4KLSAgICAgICAgICAgIHNlbGYuX3J1bl9zY3JpcHQoImJ1aWxkLWxheW91dHRlc3RyZWxh
eSIsIGFyZ3M9WyItLWlvcy1zaW11bGF0b3IiXSwgZW52PWVudikKLSAgICAgICAgZXhjZXB0IFNj
cmlwdEVycm9yLCBlOgotICAgICAgICAgICAgX2xvZy5lcnJvcihlLm1lc3NhZ2Vfd2l0aF9vdXRw
dXQob3V0cHV0X2xpbWl0PU5vbmUpKQotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAg
IHJldHVybiBUcnVlCi0KLSAgICBkZWYgX2J1aWxkX2RyaXZlcihzZWxmKToKLSAgICAgICAgYnVp
bHRfdG9vbCA9IHN1cGVyKElPU1NpbXVsYXRvclBvcnQsIHNlbGYpLl9idWlsZF9kcml2ZXIoKQot
ICAgICAgICBidWlsdF9yZWxheSA9IHNlbGYuX2J1aWxkX3JlbGF5KCkKLSAgICAgICAgcmV0dXJu
IGJ1aWx0X3Rvb2wgYW5kIGJ1aWx0X3JlbGF5Ci0KICAgICBkZWYgX2J1aWxkX2RyaXZlcl9mbGFn
cyhzZWxmKToKICAgICAgICAgYXJjaHMgPSBbJ0FSQ0hTPWkzODYnXSBpZiBzZWxmLmFyY2hpdGVj
dHVyZSgpID09ICd4ODYnIGVsc2UgW10KICAgICAgICAgc2RrID0gWyctLXNkaycsICdpcGhvbmVz
aW11bGF0b3InXQpAQCAtMjgwLDkgKzIzOSw5IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFy
d2luUG9ydCk6CiAKICAgICBkZWYgX2NyZWF0ZV9zaW11bGF0b3JzKHNlbGYpOgogICAgICAgICBp
ZiAoc2VsZi5kZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcygpIDwgc2VsZi5jaGlsZF9wcm9jZXNzZXMo
KSk6Ci0gICAgICAgICAgICAgICAgX2xvZy53YXJuKCJZb3UgaGF2ZSBzcGVjaWZpZWQgdmVyeSBo
aWdoIHZhbHVlKHswfSkgZm9yIC0tY2hpbGQtcHJvY2Vzc2VzIi5mb3JtYXQoc2VsZi5jaGlsZF9w
cm9jZXNzZXMoKSkpCi0gICAgICAgICAgICAgICAgX2xvZy53YXJuKCJtYXhpbXVtIGNoaWxkLXBy
b2Nlc3NlcyB3aGljaCBjYW4gYmUgc3VwcG9ydGVkIG9uIHRoaXMgc3lzdGVtIGFyZTogezB9Ii5m
b3JtYXQoc2VsZi5kZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcygpKSkKLSAgICAgICAgICAgICAgICBf
bG9nLndhcm4oIlRoaXMgaXMgdmVyeSBsaWtlbHkgdG8gZmFpbC4iKQorICAgICAgICAgICAgX2xv
Zy53YXJuKCJZb3UgaGF2ZSBzcGVjaWZpZWQgdmVyeSBoaWdoIHZhbHVlKHswfSkgZm9yIC0tY2hp
bGQtcHJvY2Vzc2VzIi5mb3JtYXQoc2VsZi5jaGlsZF9wcm9jZXNzZXMoKSkpCisgICAgICAgICAg
ICBfbG9nLndhcm4oIm1heGltdW0gY2hpbGQtcHJvY2Vzc2VzIHdoaWNoIGNhbiBiZSBzdXBwb3J0
ZWQgb24gdGhpcyBzeXN0ZW0gYXJlOiB7MH0iLmZvcm1hdChzZWxmLmRlZmF1bHRfY2hpbGRfcHJv
Y2Vzc2VzKCkpKQorICAgICAgICAgICAgX2xvZy53YXJuKCJUaGlzIGlzIHZlcnkgbGlrZWx5IHRv
IGZhaWwuIikKIAogICAgICAgICBpZiBzZWxmLl91c2luZ19kZWRpY2F0ZWRfc2ltdWxhdG9ycygp
OgogICAgICAgICAgICAgc2VsZi5fY3JlYXRlU2ltdWxhdG9yQXBwcygpCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIxMDU0OSkK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3QucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTcwLDcgKzcwLDcgQEAgY2xhc3MgaW9zVGVzdChkYXJ3aW5fdGVzdGNhc2UuRGFy
d2luVGVzdAogICAgICAgICBwb3J0Ll9ydW5fc2NyaXB0ID0gcnVuX3NjcmlwdAogICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHBvcnQuYXJjaGl0ZWN0dXJlKCksICd4ODYnKQogICAgICAgICBwb3J0
Ll9idWlsZF9kcml2ZXIoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYXJncywgWyct
LWlvcy1zaW11bGF0b3InXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFyZ3MsIFsn
QVJDSFM9aTM4NicsICctLXNkaycsICdpcGhvbmVzaW11bGF0b3InXSkKIAogICAgIGRlZiB0ZXN0
XzY0Yml0KHNlbGYpOgogICAgICAgICAjIEFwcGxlIE1hYyBwb3J0IGlzIDY0LWJpdCBieSBkZWZh
dWx0CkBAIC04Miw3ICs4Miw3IEBAIGNsYXNzIGlvc1Rlc3QoZGFyd2luX3Rlc3RjYXNlLkRhcndp
blRlc3QKIAogICAgICAgICBwb3J0Ll9ydW5fc2NyaXB0ID0gcnVuX3NjcmlwdAogICAgICAgICBw
b3J0Ll9idWlsZF9kcml2ZXIoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYXJncywg
WyctLWlvcy1zaW11bGF0b3InXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFyZ3Ms
IFsnLS1zZGsnLCAnaXBob25lc2ltdWxhdG9yJ10pCiAKICAgICBkZWYgdGVzdF9zZGtfbmFtZShz
ZWxmKToKICAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3MucHkJKHJldmlzaW9uIDIxMDU0OSkK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDcsMTIgKzQ4LDEzIEBAIGVs
c2U6CiAgICAgaW1wb3J0IHNlbGVjdAogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhl
Y3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgorZnJvbSB3ZWJraXRweS5wb3J0LnNlcnZlcl9wcm9j
ZXNzX2Jhc2UgaW1wb3J0IFNlcnZlclByb2Nlc3NCYXNlCiAKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0
TG9nZ2VyKF9fbmFtZV9fKQogCiAKLWNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToKK2NsYXNz
IFNlcnZlclByb2Nlc3MoU2VydmVyUHJvY2Vzc0Jhc2UpOgogICAgICIiIlRoaXMgY2xhc3MgcHJv
dmlkZXMgYSB3cmFwcGVyIGFyb3VuZCBhIHN1YnByb2Nlc3MgdGhhdAogICAgIGltcGxlbWVudHMg
YSBzaW1wbGUgcmVxdWVzdC9yZXNwb25zZSB1c2FnZSBtb2RlbC4gVGhlIHByaW1hcnkgYmVuZWZp
dAogICAgIGlzIHRoYXQgcmVhZGluZyByZXNwb25zZXMgdGFrZXMgYSBkZWFkbGluZSwgc28gdGhh
dCB3ZSBkb24ndCBldmVyIGJsb2NrCkBAIC02MCwyNyArNjIsMTUgQEAgY2xhc3MgU2VydmVyUHJv
Y2VzcyhvYmplY3QpOgogICAgIGFzIG5lY2Vzc2FyeSB0byBrZWVwIGlzc3VpbmcgY29tbWFuZHMu
IiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmosIG5hbWUsIGNtZCwgZW52PU5v
bmUsIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgdHJlYXRfbm9fZGF0YV9hc19jcmFzaD1GYWxz
ZSk6Ci0gICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0X29iagotICAgICAgICBzZWxmLl9uYW1lID0g
bmFtZSAgIyBTaG91bGQgYmUgdGhlIGNvbW1hbmQgbmFtZSAoZS5nLiBEdW1wUmVuZGVyVHJlZSwg
SW1hZ2VEaWZmKQotICAgICAgICBzZWxmLl9jbWQgPSBjbWQKLSAgICAgICAgc2VsZi5fZW52ID0g
ZW52Ci0gICAgICAgICMgU2V0IGlmIHRoZSBwcm9jZXNzIG91dHB1dHMgbm9uLXN0YW5kYXJkIG5l
d2xpbmVzIGxpa2UgJ1xyXG4nIG9yICdccicuCi0gICAgICAgICMgRG9uJ3Qgc2V0IGlmIHRoZXJl
IHdpbGwgYmUgYmluYXJ5IGRhdGEgb3IgdGhlIGRhdGEgbXVzdCBiZSBBU0NJSSBlbmNvZGVkLgot
ICAgICAgICBzZWxmLl91bml2ZXJzYWxfbmV3bGluZXMgPSB1bml2ZXJzYWxfbmV3bGluZXMKLSAg
ICAgICAgc2VsZi5fdHJlYXRfbm9fZGF0YV9hc19jcmFzaCA9IHRyZWF0X25vX2RhdGFfYXNfY3Jh
c2gKLSAgICAgICAgc2VsZi5faG9zdCA9IHNlbGYuX3BvcnQuaG9zdAotICAgICAgICBzZWxmLl9w
aWQgPSBOb25lCi0gICAgICAgIHNlbGYuX3Jlc2V0KCkKKyAgICAgICAgc3VwZXIoU2VydmVyUHJv
Y2Vzcywgc2VsZikuX19pbml0X18ocG9ydF9vYmosIG5hbWUsIGNtZCwgZW52LCB1bml2ZXJzYWxf
bmV3bGluZXMsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2gpCiAKICAgICAgICAgIyBTZWUgY29tbWVu
dCBpbiBpbXBvcnRzIGZvciB3aHkgd2UgbmVlZCB0aGUgd2luMzIgQVBJcyBhbmQgY2FuJ3QganVz
dCB1c2Ugc2VsZWN0LgogICAgICAgICAjIEZJWE1FOiB0aGVyZSBzaG91bGQgYmUgYSB3YXkgdG8g
Z2V0IHdpbjMyIHZzLiBjeWd3aW4gZnJvbSBwbGF0Zm9ybWluZm8uCiAgICAgICAgIHNlbGYuX3Vz
ZV93aW4zMl9hcGlzID0gc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpCisgICAgICAgIHNl
bGYuX3Jlc2V0KCkKIAotICAgIGRlZiBuYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5f
bmFtZQotCi0gICAgZGVmIHBpZChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3BpZAorICAg
IGRlZiBpc19zdGFydGVkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcHJvYwogCiAgICAg
ZGVmIF9yZXNldChzZWxmKToKICAgICAgICAgaWYgZ2V0YXR0cihzZWxmLCAnX3Byb2MnLCBOb25l
KToKQEAgLTk1LDEzICs4NSw3IEBAIGNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToKICAgICAg
ICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGVyciA9IE5vbmUKIAogICAgICAgICBzZWxmLl9wcm9j
ID0gTm9uZQotICAgICAgICBzZWxmLl9vdXRwdXQgPSBzdHIoKSAgIyBieXRlc2FycmF5KCkgb25j
ZSB3ZSByZXF1aXJlIFB5dGhvbiAyLjYKLSAgICAgICAgc2VsZi5fZXJyb3IgPSBzdHIoKSAgIyBi
eXRlc2FycmF5KCkgb25jZSB3ZSByZXF1aXJlIFB5dGhvbiAyLjYKLSAgICAgICAgc2VsZi5fY3Jh
c2hlZCA9IEZhbHNlCi0gICAgICAgIHNlbGYudGltZWRfb3V0ID0gRmFsc2UKLQotICAgIGRlZiBw
cm9jZXNzX25hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9uYW1lCisgICAgICAgIHN1
cGVyKFNlcnZlclByb2Nlc3MsIHNlbGYpLl9yZXNldCgpCiAKICAgICBkZWYgX3N0YXJ0KHNlbGYp
OgogICAgICAgICBpZiBzZWxmLl9wcm9jOgpAQCAtMTQ0LDkwICsxMjgsOCBAQCBjbGFzcyBTZXJ2
ZXJQcm9jZXNzKG9iamVjdCk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcHJvYy5wb2xsKCkK
ICAgICAgICAgcmV0dXJuIE5vbmUKIAotICAgIGRlZiB3cml0ZShzZWxmLCBieXRlcywgaWdub3Jl
X2NyYXNoPUZhbHNlKToKLSAgICAgICAgIiIiV3JpdGUgYSByZXF1ZXN0IHRvIHRoZSBzdWJwcm9j
ZXNzLiBUaGUgc3VicHJvY2VzcyBpcyAocmUtKXN0YXJ0KCknZWQKLSAgICAgICAgaWYgaXMgbm90
IGFscmVhZHkgcnVubmluZy4iIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX3Byb2M6Ci0gICAgICAg
ICAgICBzZWxmLl9zdGFydCgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuX3Byb2Mu
c3RkaW4ud3JpdGUoYnl0ZXMpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgotICAgICAgICAg
ICAgc2VsZi5zdG9wKDAuMCkKLSAgICAgICAgICAgICMgc3RvcCgpIGNhbGxzIF9yZXNldCgpLCBz
byB3ZSBoYXZlIHRvIHNldCBjcmFzaGVkIHRvIFRydWUgYWZ0ZXIgY2FsbGluZyBzdG9wKCkKLSAg
ICAgICAgICAgICMgdW5sZXNzIHdlIGFscmVhZHkga25vdyB0aGF0IHRoaXMgaXMgYSB0aW1lb3V0
LgotICAgICAgICAgICAgaWYgbm90IGlnbm9yZV9jcmFzaDoKLSAgICAgICAgICAgICAgICBfbG9n
LmRlYnVnKCdUaGlzIHRlc3QgbWFya2VkIGFzIGEgY3Jhc2ggYmVjYXVzZSBvZiBhIGJyb2tlbiBw
aXBlIHdoZW4gd3JpdGluZyB0byBzdGRpbiBvZiB0aGUgc2VydmVyIHByb2Nlc3MuJykKLSAgICAg
ICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQotCi0gICAgZGVmIF9wb3Bfc3Rkb3V0X2xp
bmVfaWZfcmVhZHkoc2VsZik6Ci0gICAgICAgIGluZGV4X2FmdGVyX25ld2xpbmUgPSBzZWxmLl9v
dXRwdXQuZmluZCgnXG4nKSArIDEKLSAgICAgICAgaWYgaW5kZXhfYWZ0ZXJfbmV3bGluZSA+IDA6
Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcG9wX291dHB1dF9ieXRlcyhpbmRleF9hZnRlcl9u
ZXdsaW5lKQotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIF9wb3Bfc3RkZXJyX2xpbmVf
aWZfcmVhZHkoc2VsZik6Ci0gICAgICAgIGluZGV4X2FmdGVyX25ld2xpbmUgPSBzZWxmLl9lcnJv
ci5maW5kKCdcbicpICsgMQotICAgICAgICBpZiBpbmRleF9hZnRlcl9uZXdsaW5lID4gMDoKLSAg
ICAgICAgICAgIHJldHVybiBzZWxmLl9wb3BfZXJyb3JfYnl0ZXMoaW5kZXhfYWZ0ZXJfbmV3bGlu
ZSkKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGRlZiBwb3BfYWxsX2J1ZmZlcmVkX3N0ZGVy
cihzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3BvcF9lcnJvcl9ieXRlcyhsZW4oc2VsZi5f
ZXJyb3IpKQotCi0gICAgZGVmIHJlYWRfc3Rkb3V0X2xpbmUoc2VsZiwgZGVhZGxpbmUpOgotICAg
ICAgICByZXR1cm4gc2VsZi5fcmVhZChkZWFkbGluZSwgc2VsZi5fcG9wX3N0ZG91dF9saW5lX2lm
X3JlYWR5KQotCi0gICAgZGVmIHJlYWRfc3RkZXJyX2xpbmUoc2VsZiwgZGVhZGxpbmUpOgotICAg
ICAgICByZXR1cm4gc2VsZi5fcmVhZChkZWFkbGluZSwgc2VsZi5fcG9wX3N0ZGVycl9saW5lX2lm
X3JlYWR5KQotCi0gICAgZGVmIHJlYWRfZWl0aGVyX3N0ZG91dF9vcl9zdGRlcnJfbGluZShzZWxm
LCBkZWFkbGluZSk6Ci0gICAgICAgIGRlZiByZXRyaWV2ZV9ieXRlc19mcm9tX2J1ZmZlcnMoKToK
LSAgICAgICAgICAgIHN0ZG91dF9saW5lID0gc2VsZi5fcG9wX3N0ZG91dF9saW5lX2lmX3JlYWR5
KCkKLSAgICAgICAgICAgIGlmIHN0ZG91dF9saW5lOgotICAgICAgICAgICAgICAgIHJldHVybiBz
dGRvdXRfbGluZSwgTm9uZQotICAgICAgICAgICAgc3RkZXJyX2xpbmUgPSBzZWxmLl9wb3Bfc3Rk
ZXJyX2xpbmVfaWZfcmVhZHkoKQotICAgICAgICAgICAgaWYgc3RkZXJyX2xpbmU6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIE5vbmUsIHN0ZGVycl9saW5lCi0gICAgICAgICAgICByZXR1cm4gTm9u
ZSAgIyBJbnN0cnVjdHMgdGhlIGNhbGxlciB0byBrZWVwIHdhaXRpbmcuCi0KLSAgICAgICAgcmV0
dXJuX3ZhbHVlID0gc2VsZi5fcmVhZChkZWFkbGluZSwgcmV0cmlldmVfYnl0ZXNfZnJvbV9idWZm
ZXJzKQotICAgICAgICAjIEZJWE1FOiBUaGlzIGlzIGEgYml0IG9mIGEgaGFjayBhcm91bmQgdGhl
IGZhY3QgdGhhdCBfcmVhZCBub3JtYWxseSBvbmx5IHJldHVybnMgb25lIHZhbHVlLCBidXQgdGhp
cyBjYWxsZXIgd2FudHMgaXQgdG8gcmV0dXJuIHR3by4KLSAgICAgICAgaWYgcmV0dXJuX3ZhbHVl
IGlzIE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQotICAgICAgICByZXR1cm4g
cmV0dXJuX3ZhbHVlCi0KLSAgICBkZWYgcmVhZF9zdGRvdXQoc2VsZiwgZGVhZGxpbmUsIHNpemUp
OgotICAgICAgICBpZiBzaXplIDw9IDA6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdT
ZXJ2ZXJQcm9jZXNzLnJlYWQoKSBjYWxsZWQgd2l0aCBhIG5vbi1wb3NpdGl2ZSBzaXplOiAlZCAn
ICUgc2l6ZSkKLQotICAgICAgICBkZWYgcmV0cmlldmVfYnl0ZXNfZnJvbV9zdGRvdXRfYnVmZmVy
KCk6Ci0gICAgICAgICAgICBpZiBsZW4oc2VsZi5fb3V0cHV0KSA+PSBzaXplOgotICAgICAgICAg
ICAgICAgIHJldHVybiBzZWxmLl9wb3Bfb3V0cHV0X2J5dGVzKHNpemUpCi0gICAgICAgICAgICBy
ZXR1cm4gTm9uZQotCi0gICAgICAgIHJldHVybiBzZWxmLl9yZWFkKGRlYWRsaW5lLCByZXRyaWV2
ZV9ieXRlc19mcm9tX3N0ZG91dF9idWZmZXIpCi0KLSAgICBkZWYgX2xvZyhzZWxmLCBtZXNzYWdl
KToKLSAgICAgICAgIyBUaGlzIGlzIGEgYml0IG9mIGEgaGFjaywgYnV0IHdlIGZpcnN0IGxvZyBh
IGJsYW5rIGxpbmUgdG8gYXZvaWQKLSAgICAgICAgIyBtZXNzaW5nIHVwIHRoZSBtYXN0ZXIgcHJv
Y2VzcydzIG91dHB1dC4KLSAgICAgICAgX2xvZy5pbmZvKCcnKQotICAgICAgICBfbG9nLmluZm8o
bWVzc2FnZSkKLQotICAgIGRlZiBfaGFuZGxlX3RpbWVvdXQoc2VsZik6Ci0gICAgICAgIHNlbGYu
dGltZWRfb3V0ID0gVHJ1ZQotICAgICAgICBpZiBzZWxmLl9wb3J0LmdldF9vcHRpb24oInNhbXBs
ZV9vbl90aW1lb3V0Iik6Ci0gICAgICAgICAgICBzZWxmLl9wb3J0LnNhbXBsZV9wcm9jZXNzKHNl
bGYuX25hbWUsIHNlbGYuX3Byb2MucGlkKQotCi0gICAgZGVmIF9zcGxpdF9zdHJpbmdfYWZ0ZXJf
aW5kZXgoc2VsZiwgc3RyaW5nLCBpbmRleCk6Ci0gICAgICAgIHJldHVybiBzdHJpbmdbOmluZGV4
XSwgc3RyaW5nW2luZGV4Ol0KLQotICAgIGRlZiBfcG9wX291dHB1dF9ieXRlcyhzZWxmLCBieXRl
c19jb3VudCk6Ci0gICAgICAgIG91dHB1dCwgc2VsZi5fb3V0cHV0ID0gc2VsZi5fc3BsaXRfc3Ry
aW5nX2FmdGVyX2luZGV4KHNlbGYuX291dHB1dCwgYnl0ZXNfY291bnQpCi0gICAgICAgIHJldHVy
biBvdXRwdXQKLQotICAgIGRlZiBfcG9wX2Vycm9yX2J5dGVzKHNlbGYsIGJ5dGVzX2NvdW50KToK
LSAgICAgICAgb3V0cHV0LCBzZWxmLl9lcnJvciA9IHNlbGYuX3NwbGl0X3N0cmluZ19hZnRlcl9p
bmRleChzZWxmLl9lcnJvciwgYnl0ZXNfY291bnQpCi0gICAgICAgIHJldHVybiBvdXRwdXQKKyAg
ICBkZWYgX3dyaXRlKHNlbGYsIGJ5dGVzKToKKyAgICAgICAgc2VsZi5fcHJvYy5zdGRpbi53cml0
ZShieXRlcykKIAogICAgIGRlZiBfd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnNfdXNp
bmdfc2VsZWN0KHNlbGYsIGRlYWRsaW5lLCBzdG9wcGluZz1GYWxzZSk6CiAgICAgICAgIGlmIHNl
bGYuX3Byb2Muc3Rkb3V0LmNsb3NlZCBvciBzZWxmLl9wcm9jLnN0ZGVyci5jbG9zZWQ6CkBAIC0z
MDIsNzUgKzIwNCwxMSBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6CiAgICAgICAgICAg
ICAgICAgcmFpc2UKICAgICAgICAgcmV0dXJuIE5vbmUKIAotICAgIGRlZiBoYXNfY3Jhc2hlZChz
ZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuX2NyYXNoZWQgYW5kIHNlbGYucG9sbCgpOgotICAg
ICAgICAgICAgX2xvZy5kZWJ1ZygnVGhpcyB0ZXN0IG1hcmtlZCBhcyBhIGNyYXNoIGJlY2F1c2Ug
b2YgZmFpbHVyZSB0byBwb2xsIHRoZSBzZXJ2ZXIgcHJvY2Vzcy4nKQotICAgICAgICAgICAgc2Vs
Zi5fY3Jhc2hlZCA9IFRydWUKLSAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9wb3NzaWJsZV9pbnRl
cnJ1cHQoKQotICAgICAgICByZXR1cm4gc2VsZi5fY3Jhc2hlZAotCi0gICAgIyBUaGlzIHJlYWQg
ZnVuY3Rpb24gaXMgYSBiaXQgb2RkbHktZGVzaWduZWQsIGFzIGl0IHBvbGxzIGJvdGggc3Rkb3V0
IGFuZCBzdGRlcnIsIHlldAotICAgICMgb25seSByZWFkcy9yZXR1cm5zIGZyb20gb25lIG9mIHRo
ZW0gKGJ1ZmZlcmluZyBib3RoIGluIGxvY2FsIHNlbGYuX291dHB1dC9zZWxmLl9lcnJvcikuCi0g
ICAgIyBJdCBtaWdodCBiZSBjbGVhbmVyIHRvIHBhc3MgaW4gdGhlIGZpbGUgZGVzY3JpcHRvciB0
byBwb2xsIGluc3RlYWQuCi0gICAgZGVmIF9yZWFkKHNlbGYsIGRlYWRsaW5lLCBmZXRjaF9ieXRl
c19mcm9tX2J1ZmZlcnNfY2FsbGJhY2spOgotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAg
ICAgaWYgc2VsZi5oYXNfY3Jhc2hlZCgpOgotICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0K
LSAgICAgICAgICAgIGlmIHRpbWUudGltZSgpID4gZGVhZGxpbmU6Ci0gICAgICAgICAgICAgICAg
c2VsZi5faGFuZGxlX3RpbWVvdXQoKQotICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAg
ICAgICAgICAgIGJ5dGVzID0gZmV0Y2hfYnl0ZXNfZnJvbV9idWZmZXJzX2NhbGxiYWNrKCkKLSAg
ICAgICAgICAgIGlmIGJ5dGVzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHJldHVybiBi
eXRlcwotCi0gICAgICAgICAgICBpZiBzZWxmLl91c2Vfd2luMzJfYXBpczoKLSAgICAgICAgICAg
ICAgICBzZWxmLl93YWl0X2Zvcl9kYXRhX2FuZF91cGRhdGVfYnVmZmVyc191c2luZ193aW4zMl9h
cGlzKGRlYWRsaW5lKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLl93
YWl0X2Zvcl9kYXRhX2FuZF91cGRhdGVfYnVmZmVyc191c2luZ19zZWxlY3QoZGVhZGxpbmUpCi0K
LSAgICBkZWYgc3RhcnQoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9wcm9jOgotICAgICAg
ICAgICAgc2VsZi5fc3RhcnQoKQotCi0gICAgZGVmIHN0b3Aoc2VsZiwgdGltZW91dF9zZWNzPTMu
MCk6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9wcm9jOgotICAgICAgICAgICAgcmV0dXJuIChOb25l
LCBOb25lKQotCi0gICAgICAgICMgT25seSBib3RoZXIgdG8gY2hlY2sgZm9yIGxlYWtzIG9yIHN0
ZGVyciBpZiB0aGUgcHJvY2VzcyBpcyBzdGlsbCBydW5uaW5nLgotICAgICAgICBpZiBzZWxmLnBv
bGwoKSBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5fcG9ydC5jaGVja19mb3JfbGVha3Moc2Vs
Zi5uYW1lKCksIHNlbGYucGlkKCkpCi0KLSAgICAgICAgbm93ID0gdGltZS50aW1lKCkKLSAgICAg
ICAgaWYgc2VsZi5fcHJvYy5zdGRpbjoKLSAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4uY2xv
c2UoKQotICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRpbiA9IE5vbmUKLSAgICAgICAga2lsbGVk
ID0gRmFsc2UKLSAgICAgICAgaWYgdGltZW91dF9zZWNzOgotICAgICAgICAgICAgZGVhZGxpbmUg
PSBub3cgKyB0aW1lb3V0X3NlY3MKLSAgICAgICAgICAgIHdoaWxlIHNlbGYuX3Byb2MucG9sbCgp
IGlzIE5vbmUgYW5kIHRpbWUudGltZSgpIDwgZGVhZGxpbmU6Ci0gICAgICAgICAgICAgICAgdGlt
ZS5zbGVlcCgwLjAxKQotICAgICAgICAgICAgaWYgc2VsZi5fcHJvYy5wb2xsKCkgaXMgTm9uZToK
LSAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ3N0b3BwaW5nICVzKHBpZCAlZCkgdGltZWQg
b3V0LCBraWxsaW5nIGl0JyAlIChzZWxmLl9uYW1lLCBzZWxmLl9wcm9jLnBpZCkpCi0KLSAgICAg
ICAgaWYgc2VsZi5fcHJvYy5wb2xsKCkgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX2tpbGwo
KQotICAgICAgICAgICAga2lsbGVkID0gVHJ1ZQotICAgICAgICAgICAgX2xvZy5kZWJ1Zygna2ls
bGVkIHBpZCAlZCcgJSBzZWxmLl9wcm9jLnBpZCkKLQotICAgICAgICAjIHJlYWQgYW55IHJlbWFp
bmluZyBkYXRhIG9uIHRoZSBwaXBlcyBhbmQgcmV0dXJuIGl0LgotICAgICAgICBpZiBub3Qga2ls
bGVkOgotICAgICAgICAgICAgaWYgc2VsZi5fdXNlX3dpbjMyX2FwaXM6Ci0gICAgICAgICAgICAg
ICAgc2VsZi5fd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnNfdXNpbmdfd2luMzJfYXBp
cyhub3cpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRfZm9y
X2RhdGFfYW5kX3VwZGF0ZV9idWZmZXJzX3VzaW5nX3NlbGVjdChub3csIHN0b3BwaW5nPVRydWUp
Ci0gICAgICAgIG91dCwgZXJyID0gc2VsZi5fb3V0cHV0LCBzZWxmLl9lcnJvcgotICAgICAgICBz
ZWxmLl9yZXNldCgpCi0gICAgICAgIHJldHVybiAob3V0LCBlcnIpCi0KLSAgICBkZWYga2lsbChz
ZWxmKToKLSAgICAgICAgc2VsZi5zdG9wKDAuMCkKKyAgICBkZWYgX3dhaXRfZm9yX2RhdGFfYW5k
X3VwZGF0ZV9idWZmZXJzKHNlbGYsIGRlYWRsaW5lKToKKyAgICAgICAgaWYgc2VsZi5fdXNlX3dp
bjMyX2FwaXM6CisgICAgICAgICAgICBzZWxmLl93YWl0X2Zvcl9kYXRhX2FuZF91cGRhdGVfYnVm
ZmVyc191c2luZ193aW4zMl9hcGlzKGRlYWRsaW5lKQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgc2VsZi5fd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnNfdXNpbmdfc2VsZWN0KGRl
YWRsaW5lKQogCiAgICAgZGVmIF9raWxsKHNlbGYpOgogICAgICAgICBzZWxmLl9ob3N0LmV4ZWN1
dGl2ZS5raWxsX3Byb2Nlc3Moc2VsZi5fcHJvYy5waWQpCkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3NfYmFzZS5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3NfYmFzZS5weQkobm9uZXhpc3RlbnQp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3NfYmFzZS5weQko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIzMCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgR29vZ2xl
IG5hbWUgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgbG9nZ2luZwor
aW1wb3J0IHRpbWUKKworCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKwor
Y2xhc3MgU2VydmVyUHJvY2Vzc0Jhc2Uob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBwb3J0X29iaiwgbmFtZSwgY21kLCBlbnY9Tm9uZSwgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNl
LCB0cmVhdF9ub19kYXRhX2FzX2NyYXNoPUZhbHNlKToKKyAgICAgICAgc2VsZi5fcG9ydCA9IHBv
cnRfb2JqCisgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lICAjIFNob3VsZCBiZSB0aGUgY29tbWFu
ZCBuYW1lIChlLmcuIER1bXBSZW5kZXJUcmVlLCBJbWFnZURpZmYpCisgICAgICAgIHNlbGYuX2Nt
ZCA9IGNtZAorICAgICAgICBzZWxmLl9lbnYgPSBlbnYKKyAgICAgICAgIyBTZXQgaWYgdGhlIHBy
b2Nlc3Mgb3V0cHV0cyBub24tc3RhbmRhcmQgbmV3bGluZXMgbGlrZSAnXHJcbicgb3IgJ1xyJy4K
KyAgICAgICAgIyBEb24ndCBzZXQgaWYgdGhlcmUgd2lsbCBiZSBiaW5hcnkgZGF0YSBvciB0aGUg
ZGF0YSBtdXN0IGJlIEFTQ0lJIGVuY29kZWQuCisgICAgICAgIHNlbGYuX3VuaXZlcnNhbF9uZXds
aW5lcyA9IHVuaXZlcnNhbF9uZXdsaW5lcworICAgICAgICBzZWxmLl90cmVhdF9ub19kYXRhX2Fz
X2NyYXNoID0gdHJlYXRfbm9fZGF0YV9hc19jcmFzaAorICAgICAgICBzZWxmLl9ob3N0ID0gc2Vs
Zi5fcG9ydC5ob3N0CisgICAgICAgIHNlbGYuX3BpZCA9IE5vbmUKKworICAgIGRlZiBpc19zdGFy
dGVkKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYg
X3N0YXJ0KHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBk
ZWYgcG9sbChzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAg
ZGVmIF93cml0ZShzZWxmLCBieXRlcyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJy
b3IKKworICAgIGRlZiBfd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnMoc2VsZiwgZGVh
ZGxpbmUpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX2tp
bGwoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBf
aGFuZGxlX3Bvc3NpYmxlX2ludGVycnVwdChzZWxmKToKKyAgICAgICAgIyBVc2VkIHRvIGNhdGNo
IGtleWJvYXJkIGludGVydXB0cywgaWYgYXBwbGljYWJsZQorICAgICAgICBwYXNzCisKKyAgICBk
ZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKKworICAgIGRlZiBwaWQo
c2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9waWQKKworICAgIGRlZiBfcmVzZXQoc2VsZik6
CisgICAgICAgIHNlbGYuX291dHB1dCA9IHN0cigpICAjIGJ5dGVzYXJyYXkoKSBvbmNlIHdlIHJl
cXVpcmUgUHl0aG9uIDIuNgorICAgICAgICBzZWxmLl9lcnJvciA9IHN0cigpICAjIGJ5dGVzYXJy
YXkoKSBvbmNlIHdlIHJlcXVpcmUgUHl0aG9uIDIuNgorICAgICAgICBzZWxmLl9jcmFzaGVkID0g
RmFsc2UKKyAgICAgICAgc2VsZi50aW1lZF9vdXQgPSBGYWxzZQorCisgICAgZGVmIHByb2Nlc3Nf
bmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKKworICAgIGRlZiB3cml0ZShz
ZWxmLCBieXRlcywgaWdub3JlX2NyYXNoPUZhbHNlKToKKyAgICAgICAgaWYgbm90IHNlbGYuaXNf
c3RhcnRlZCgpOgorICAgICAgICAgICAgc2VsZi5fc3RhcnQoKQorICAgICAgICB0cnk6CisgICAg
ICAgICAgICBzZWxmLl93cml0ZShieXRlcykKKyAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6Cisg
ICAgICAgICAgICBzZWxmLnN0b3AoMC4wKQorICAgICAgICAgICAgIyBzdG9wKCkgY2FsbHMgX3Jl
c2V0KCksIHNvIHdlIGhhdmUgdG8gc2V0IGNyYXNoZWQgdG8gVHJ1ZSBhZnRlciBjYWxsaW5nIHN0
b3AoKQorICAgICAgICAgICAgIyB1bmxlc3Mgd2UgYWxyZWFkeSBrbm93IHRoYXQgdGhpcyBpcyBh
IHRpbWVvdXQuCisgICAgICAgICAgICBpZiBub3QgaWdub3JlX2NyYXNoOgorICAgICAgICAgICAg
ICAgIF9sb2cuZGVidWcoJ1RoaXMgdGVzdCBtYXJrZWQgYXMgYSBjcmFzaCBiZWNhdXNlIG9mIGEg
YnJva2VuIHBpcGUgd2hlbiB3cml0aW5nIHRvIHN0ZGluIG9mIHRoZSBzZXJ2ZXIgcHJvY2Vzcy4n
KQorICAgICAgICAgICAgICAgIHNlbGYuX2NyYXNoZWQgPSBUcnVlCisKKyAgICBkZWYgc3RhcnQo
c2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmlzX3N0YXJ0ZWQoKToKKyAgICAgICAgICAgIHNl
bGYuX3N0YXJ0KCkKKworICAgIGRlZiBfcG9wX3N0ZG91dF9saW5lX2lmX3JlYWR5KHNlbGYpOgor
ICAgICAgICBpbmRleF9hZnRlcl9uZXdsaW5lID0gc2VsZi5fb3V0cHV0LmZpbmQoJ1xuJykgKyAx
CisgICAgICAgIGlmIGluZGV4X2FmdGVyX25ld2xpbmUgPiAwOgorICAgICAgICAgICAgcmV0dXJu
IHNlbGYuX3BvcF9vdXRwdXRfYnl0ZXMoaW5kZXhfYWZ0ZXJfbmV3bGluZSkKKyAgICAgICAgcmV0
dXJuIE5vbmUKKworICAgIGRlZiBfcG9wX3N0ZGVycl9saW5lX2lmX3JlYWR5KHNlbGYpOgorICAg
ICAgICBpbmRleF9hZnRlcl9uZXdsaW5lID0gc2VsZi5fZXJyb3IuZmluZCgnXG4nKSArIDEKKyAg
ICAgICAgaWYgaW5kZXhfYWZ0ZXJfbmV3bGluZSA+IDA6CisgICAgICAgICAgICByZXR1cm4gc2Vs
Zi5fcG9wX2Vycm9yX2J5dGVzKGluZGV4X2FmdGVyX25ld2xpbmUpCisgICAgICAgIHJldHVybiBO
b25lCisKKyAgICBkZWYgcG9wX2FsbF9idWZmZXJlZF9zdGRlcnIoc2VsZik6CisgICAgICAgIHJl
dHVybiBzZWxmLl9wb3BfZXJyb3JfYnl0ZXMobGVuKHNlbGYuX2Vycm9yKSkKKworICAgIGRlZiBy
ZWFkX3N0ZG91dF9saW5lKHNlbGYsIGRlYWRsaW5lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Jl
YWQoZGVhZGxpbmUsIHNlbGYuX3BvcF9zdGRvdXRfbGluZV9pZl9yZWFkeSkKKworICAgIGRlZiBy
ZWFkX3N0ZGVycl9saW5lKHNlbGYsIGRlYWRsaW5lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Jl
YWQoZGVhZGxpbmUsIHNlbGYuX3BvcF9zdGRlcnJfbGluZV9pZl9yZWFkeSkKKworICAgIGRlZiBy
ZWFkX2VpdGhlcl9zdGRvdXRfb3Jfc3RkZXJyX2xpbmUoc2VsZiwgZGVhZGxpbmUpOgorICAgICAg
ICBkZWYgcmV0cmlldmVfYnl0ZXNfZnJvbV9idWZmZXJzKCk6CisgICAgICAgICAgICBzdGRvdXRf
bGluZSA9IHNlbGYuX3BvcF9zdGRvdXRfbGluZV9pZl9yZWFkeSgpCisgICAgICAgICAgICBpZiBz
dGRvdXRfbGluZToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3Rkb3V0X2xpbmUsIE5vbmUKKyAg
ICAgICAgICAgIHN0ZGVycl9saW5lID0gc2VsZi5fcG9wX3N0ZGVycl9saW5lX2lmX3JlYWR5KCkK
KyAgICAgICAgICAgIGlmIHN0ZGVycl9saW5lOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25l
LCBzdGRlcnJfbGluZQorICAgICAgICAgICAgcmV0dXJuIE5vbmUgICMgSW5zdHJ1Y3RzIHRoZSBj
YWxsZXIgdG8ga2VlcCB3YWl0aW5nLgorCisgICAgICAgIHJldHVybl92YWx1ZSA9IHNlbGYuX3Jl
YWQoZGVhZGxpbmUsIHJldHJpZXZlX2J5dGVzX2Zyb21fYnVmZmVycykKKyAgICAgICAgIyBGSVhN
RTogVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2sgYXJvdW5kIHRoZSBmYWN0IHRoYXQgX3JlYWQgbm9y
bWFsbHkgb25seSByZXR1cm5zIG9uZSB2YWx1ZSwgYnV0IHRoaXMgY2FsbGVyIHdhbnRzIGl0IHRv
IHJldHVybiB0d28uCisgICAgICAgIGlmIHJldHVybl92YWx1ZSBpcyBOb25lOgorICAgICAgICAg
ICAgcmV0dXJuIE5vbmUsIE5vbmUKKyAgICAgICAgcmV0dXJuIHJldHVybl92YWx1ZQorCisgICAg
ZGVmIHJlYWRfc3Rkb3V0KHNlbGYsIGRlYWRsaW5lLCBzaXplKToKKyAgICAgICAgaWYgc2l6ZSA8
PSAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignU2VydmVyUHJvY2Vzcy5yZWFkKCkg
Y2FsbGVkIHdpdGggYSBub24tcG9zaXRpdmUgc2l6ZTogJWQgJyAlIHNpemUpCisKKyAgICAgICAg
ZGVmIHJldHJpZXZlX2J5dGVzX2Zyb21fc3Rkb3V0X2J1ZmZlcigpOgorICAgICAgICAgICAgaWYg
bGVuKHNlbGYuX291dHB1dCkgPj0gc2l6ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5f
cG9wX291dHB1dF9ieXRlcyhzaXplKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAg
ICByZXR1cm4gc2VsZi5fcmVhZChkZWFkbGluZSwgcmV0cmlldmVfYnl0ZXNfZnJvbV9zdGRvdXRf
YnVmZmVyKQorCisgICAgZGVmIF9sb2coc2VsZiwgbWVzc2FnZSk6CisgICAgICAgICMgVGhpcyBp
cyBhIGJpdCBvZiBhIGhhY2ssIGJ1dCB3ZSBmaXJzdCBsb2cgYSBibGFuayBsaW5lIHRvIGF2b2lk
CisgICAgICAgICMgbWVzc2luZyB1cCB0aGUgbWFzdGVyIHByb2Nlc3MncyBvdXRwdXQuCisgICAg
ICAgIF9sb2cuaW5mbygnJykKKyAgICAgICAgX2xvZy5pbmZvKG1lc3NhZ2UpCisKKyAgICBkZWYg
X2hhbmRsZV90aW1lb3V0KHNlbGYpOgorICAgICAgICBzZWxmLnRpbWVkX291dCA9IFRydWUKKyAg
ICAgICAgaWYgc2VsZi5fcG9ydC5nZXRfb3B0aW9uKCJzYW1wbGVfb25fdGltZW91dCIpOgorICAg
ICAgICAgICAgc2VsZi5fcG9ydC5zYW1wbGVfcHJvY2VzcyhzZWxmLl9uYW1lLCBzZWxmLnBpZCgp
KQorCisgICAgZGVmIF9zcGxpdF9zdHJpbmdfYWZ0ZXJfaW5kZXgoc2VsZiwgc3RyaW5nLCBpbmRl
eCk6CisgICAgICAgIHJldHVybiBzdHJpbmdbOmluZGV4XSwgc3RyaW5nW2luZGV4Ol0KKworICAg
IGRlZiBfcG9wX291dHB1dF9ieXRlcyhzZWxmLCBieXRlc19jb3VudCk6CisgICAgICAgIG91dHB1
dCwgc2VsZi5fb3V0cHV0ID0gc2VsZi5fc3BsaXRfc3RyaW5nX2FmdGVyX2luZGV4KHNlbGYuX291
dHB1dCwgYnl0ZXNfY291bnQpCisgICAgICAgIHJldHVybiBvdXRwdXQKKworICAgIGRlZiBfcG9w
X2Vycm9yX2J5dGVzKHNlbGYsIGJ5dGVzX2NvdW50KToKKyAgICAgICAgb3V0cHV0LCBzZWxmLl9l
cnJvciA9IHNlbGYuX3NwbGl0X3N0cmluZ19hZnRlcl9pbmRleChzZWxmLl9lcnJvciwgYnl0ZXNf
Y291bnQpCisgICAgICAgIHJldHVybiBvdXRwdXQKKworICAgIGRlZiBoYXNfY3Jhc2hlZChzZWxm
KToKKyAgICAgICAgaWYgbm90IHNlbGYuX2NyYXNoZWQgYW5kIHNlbGYucG9sbCgpOgorICAgICAg
ICAgICAgX2xvZy5kZWJ1ZygnVGhpcyB0ZXN0IG1hcmtlZCBhcyBhIGNyYXNoIGJlY2F1c2Ugb2Yg
ZmFpbHVyZSB0byBwb2xsIHRoZSBzZXJ2ZXIgcHJvY2Vzcy4nKQorICAgICAgICAgICAgc2VsZi5f
Y3Jhc2hlZCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9wb3NzaWJsZV9pbnRlcnJ1
cHQoKQorICAgICAgICByZXR1cm4gc2VsZi5fY3Jhc2hlZAorCisgICAgZGVmIF9yZWFkKHNlbGYs
IGRlYWRsaW5lLCBmZXRjaF9ieXRlc19mcm9tX2J1ZmZlcnNfY2FsbGJhY2spOgorICAgICAgICB3
aGlsZSBUcnVlOgorICAgICAgICAgICAgaWYgc2VsZi5oYXNfY3Jhc2hlZCgpOgorICAgICAgICAg
ICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgICAgIGlmIHRpbWUudGltZSgpID4gZGVhZGxp
bmU6CisgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX3RpbWVvdXQoKQorICAgICAgICAgICAg
ICAgIHJldHVybiBOb25lCisKKyAgICAgICAgICAgIGJ5dGVzID0gZmV0Y2hfYnl0ZXNfZnJvbV9i
dWZmZXJzX2NhbGxiYWNrKCkKKyAgICAgICAgICAgIGlmIGJ5dGVzIGlzIG5vdCBOb25lOgorICAg
ICAgICAgICAgICAgIHJldHVybiBieXRlcworCisgICAgICAgICAgICBzZWxmLl93YWl0X2Zvcl9k
YXRhX2FuZF91cGRhdGVfYnVmZmVycyhkZWFkbGluZSkKKworICAgIGRlZiBzdG9wKHNlbGYsIHRp
bWVvdXRfc2Vjcz0zLjApOgorICAgICAgICBpZiBub3Qgc2VsZi5pc19zdGFydGVkKCk6CisgICAg
ICAgICAgICByZXR1cm4gKE5vbmUsIE5vbmUpCisKKyAgICAgICAgIyBPbmx5IGJvdGhlciB0byBj
aGVjayBmb3IgbGVha3Mgb3Igc3RkZXJyIGlmIHRoZSBwcm9jZXNzIGlzIHN0aWxsIHJ1bm5pbmcu
CisgICAgICAgIGlmIHNlbGYucG9sbCgpIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9wb3J0
LmNoZWNrX2Zvcl9sZWFrcyhzZWxmLm5hbWUoKSwgc2VsZi5waWQoKSkKKworICAgICAgICBvdXQg
PSBbXQorICAgICAgICBlcnIgPSBbXQorCisgICAgICAgIG5vdyA9IHRpbWUudGltZSgpCisgICAg
ICAgIGtpbGxlZCA9IEZhbHNlCisgICAgICAgIGlmIHRpbWVvdXRfc2VjczoKKyAgICAgICAgICAg
IGRlYWRsaW5lID0gbm93ICsgdGltZW91dF9zZWNzCisgICAgICAgICAgICB3aGlsZSBzZWxmLnBv
bGwoKSBpcyBOb25lIGFuZCB0aW1lLnRpbWUoKSA8IGRlYWRsaW5lOgorICAgICAgICAgICAgICAg
IHRpbWUuc2xlZXAoMC4wMSkKKyAgICAgICAgICAgIGlmIHNlbGYucG9sbCgpIGlzIE5vbmU6Cisg
ICAgICAgICAgICAgICAgX2xvZy53YXJuaW5nKCdzdG9wcGluZyAlcyhwaWQgJWQpIHRpbWVkIG91
dCwga2lsbGluZyBpdCcgJSAoc2VsZi5fbmFtZSwgc2VsZi5fcGlkKSkKKworICAgICAgICBpZiBz
ZWxmLnBvbGwoKSBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fa2lsbCgpCisgICAgICAgICAg
ICBraWxsZWQgPSBUcnVlCisgICAgICAgICAgICBfbG9nLmRlYnVnKCdraWxsZWQgcGlkICVkJyAl
IHNlbGYuX3BpZCkKKworICAgICAgICAjIHJlYWQgYW55IHJlbWFpbmluZyBkYXRhIG9uIHRoZSBw
aXBlcyBhbmQgcmV0dXJuIGl0LgorICAgICAgICBpZiBub3Qga2lsbGVkOgorICAgICAgICAgICAg
c2VsZi5fd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnMobm93KQorICAgICAgICAgICAg
b3V0LCBlcnIgPSBzZWxmLl9vdXRwdXQsIHNlbGYuX2Vycm9yCisgICAgICAgICAgICBzZWxmLl9y
ZXNldCgpCisgICAgICAgIHJldHVybiAob3V0LCBlcnIpCisKKyAgICBkZWYga2lsbChzZWxmKToK
KyAgICAgICAgc2VsZi5zdG9wKDAuMCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9zaW11bGF0b3JfcHJvY2Vzcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvc2ltdWxhdG9yX3Byb2Nlc3MucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNzLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTUyIEBACisjIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMg
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
IyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
KworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHRpbWUKKworZnJvbSB3ZWJraXRw
eS5wb3J0LnNlcnZlcl9wcm9jZXNzX2Jhc2UgaW1wb3J0IFNlcnZlclByb2Nlc3NCYXNlCisKKwor
X2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2NsYXNzIFNpbXVsYXRvclBy
b2Nlc3MoU2VydmVyUHJvY2Vzc0Jhc2UpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRf
b2JqLCBuYW1lLCBjbWQsIGVudj1Ob25lLCB1bml2ZXJzYWxfbmV3bGluZXM9RmFsc2UsIHRyZWF0
X25vX2RhdGFfYXNfY3Jhc2g9RmFsc2UpOgorICAgICAgICBzdXBlcihTaW11bGF0b3JQcm9jZXNz
LCBzZWxmKS5fX2luaXRfXyhwb3J0X29iaiwgbmFtZSwgY21kLCBlbnYsIHVuaXZlcnNhbF9uZXds
aW5lcywgdHJlYXRfbm9fZGF0YV9hc19jcmFzaCkKKyAgICAgICAgc2VsZi5fc3RkaW4gPSBOb25l
CisgICAgICAgIHNlbGYuX3N0ZG91dCA9IE5vbmUKKyAgICAgICAgc2VsZi5fc3RkZXJyID0gTm9u
ZQorCisgICAgICAgIGZyb20gd2Via2l0cHkueGNvZGUuc2ltdWxhdG9yIGltcG9ydCBTaW11bGF0
b3IgICMgQXZvaWQgY2lyY3VsYXIgaW1wb3J0CisgICAgICAgIHNlbGYuX3NpbXVsYXRvcl9tYW5h
Z2VyID0gU2ltdWxhdG9yKHBvcnRfb2JqLmhvc3QpCisKKyAgICAgICAgc2VsZi5fYnVuZGxlSUQg
PSBzZWxmLl9wb3J0LmV4dHJhY3RfYnVuZGxlX0lEKHNlbGYuX2NtZFsxXSkKKyAgICAgICAgc2Vs
Zi5fZGV2aWNlID0gc2VsZi5fc2ltdWxhdG9yX21hbmFnZXIuZmluZF9kZXZpY2VfYnlfdWRpZChz
ZWxmLl9jbWRbMF0pCisgICAgICAgIHNlbGYuX3NpbXVsYXRvcl9tYW5hZ2VyLmluc3RhbGwoc2Vs
Zi5fZGV2aWNlLCBzZWxmLl9jbWRbMV0pCisgICAgICAgIHNlbGYuX2VudlsnSVBDX0lERU5USUZJ
RVInXSA9IHNlbGYuX2J1bmRsZUlEICsgIi0iICsgc2VsZi5fZGV2aWNlLnVkaWQKKworICAgICAg
ICBmaWxlX2xvY2F0aW9uID0gJy90bXAvJyArIHNlbGYuX2VudlsnSVBDX0lERU5USUZJRVInXQor
ICAgICAgICBzZWxmLl9pbl9wYXRoID0gZmlsZV9sb2NhdGlvbiArICdfSU4nCisgICAgICAgIHNl
bGYuX291dF9wYXRoID0gZmlsZV9sb2NhdGlvbiArICdfT1VUJworICAgICAgICBzZWxmLl9lcnJv
cl9wYXRoID0gZmlsZV9sb2NhdGlvbiArICdfRVJST1InCisKKyAgICAgICAgc2VsZi5fcmVzZXQo
KQorCisgICAgZGVmIF9fdW5saW5rX2NoZWNrX2V4aXN0cyhzZWxmLCBwYXRoKToKKyAgICAgICAg
dHJ5OgorICAgICAgICAgICAgb3MudW5saW5rKHBhdGgpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9y
IGFzIGU6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRoKToKKyAgICAgICAgICAg
ICAgICByYWlzZSBPU0Vycm9yKCJDb3VsZCBub3QgdW5saW5rICciICsgcGF0aCArICInLCB0aGUg
dGFyZ2V0IHBhdGggaXMgYSBmaWxlIG5vdCBhIHBpcGUuIikKKworICAgIGRlZiBfcmVzZXQoc2Vs
Zik6CisgICAgICAgIGlmIHNlbGYuX3N0ZGluOgorICAgICAgICAgICAgb3MuY2xvc2Uoc2VsZi5f
c3RkaW4pCisgICAgICAgICAgICBzZWxmLl9zdGRpbiA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5f
c3Rkb3V0OgorICAgICAgICAgICAgb3MuY2xvc2Uoc2VsZi5fc3Rkb3V0KQorICAgICAgICAgICAg
c2VsZi5fc3Rkb3V0ID0gTm9uZQorICAgICAgICBpZiBzZWxmLl9zdGRlcnI6CisgICAgICAgICAg
ICBvcy5jbG9zZShzZWxmLl9zdGRlcnIpCisgICAgICAgICAgICBzZWxmLl9zdGRlcnIgPSBOb25l
CisKKyAgICAgICAgc2VsZi5fX3VubGlua19jaGVja19leGlzdHMoc2VsZi5faW5fcGF0aCkKKyAg
ICAgICAgc2VsZi5fX3VubGlua19jaGVja19leGlzdHMoc2VsZi5fb3V0X3BhdGgpCisgICAgICAg
IHNlbGYuX191bmxpbmtfY2hlY2tfZXhpc3RzKHNlbGYuX2Vycm9yX3BhdGgpCisKKyAgICAgICAg
c3VwZXIoU2ltdWxhdG9yUHJvY2Vzcywgc2VsZikuX3Jlc2V0KCkKKworICAgIGRlZiBfc3RhcnQo
c2VsZik6CisgICAgICAgIG9zLm1rZmlmbyhzZWxmLl9pbl9wYXRoLCAwNjAwKQorICAgICAgICBv
cy5ta2ZpZm8oc2VsZi5fb3V0X3BhdGgsIDA2MDApCisgICAgICAgIG9zLm1rZmlmbyhzZWxmLl9l
cnJvcl9wYXRoLCAwNjAwKQorCisgICAgICAgIHNlbGYuX3BpZCA9IHNlbGYuX3NpbXVsYXRvcl9t
YW5hZ2VyLnJ1bihzZWxmLl9kZXZpY2UsIHNlbGYuX2J1bmRsZUlELCBzZWxmLl9jbWRbMzpdLCBl
bnY9c2VsZi5fZW52KQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3N0ZG91dCA9
IG9zLm9wZW4oc2VsZi5fb3V0X3BhdGgsIG9zLk9fUkRPTkxZIHwgb3MuT19OT05CTE9DSykKKyAg
ICAgICAgICAgIHNlbGYuX3N0ZGVyciA9IG9zLm9wZW4oc2VsZi5fZXJyb3JfcGF0aCwgb3MuT19S
RE9OTFkgfCBvcy5PX05PTkJMT0NLKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAg
ICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUKKworICAgICAgICBkZWFkbGluZSA9IHRpbWUu
dGltZSgpICsgMworICAgICAgICB3aGlsZSBub3Qgc2VsZi5fc3RkaW4gYW5kIGRlYWRsaW5lID4g
dGltZS50aW1lKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fc3Rk
aW4gPSBvcy5vcGVuKHNlbGYuX2luX3BhdGgsIG9zLk9fV1JPTkxZIHwgb3MuT19OT05CTE9DSykK
KyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgcGFzcwor
ICAgICAgICBpZiBub3Qgc2VsZi5fc3RkaW46CisgICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0g
VHJ1ZQorCisgICAgZGVmIGlzX3N0YXJ0ZWQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3N0ZGlu
IG9yIHNlbGYuX3N0ZG91dCBvciBzZWxmLl9zdGRlcnI6CisgICAgICAgICAgICByZXR1cm4gVHJ1
ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBwb2xsKHNlbGYpOgorICAgICAgICBp
ZiBub3Qgc2VsZi5pc19zdGFydGVkKCk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAg
ICB0cnk6CisgICAgICAgICAgICB0ZW1wID0gb3MucmVhZChzZWxmLl9zdGRlcnIsIDEyOCkKKyAg
ICAgICAgICAgIGlmIHRlbXA6CisgICAgICAgICAgICAgICAgc2VsZi5fZXJyb3IgKz0gdGVtcAor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBl
eGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQ6Cisg
ICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBf
d3JpdGUoc2VsZiwgYnl0ZXMpOgorICAgICAgICBpZiBzZWxmLl9zdGRpbjoKKyAgICAgICAgICAg
IG9zLndyaXRlKHNlbGYuX3N0ZGluLCBieXRlcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IHNlbGYuX2NyYXNoZWQgPSBUcnVlCisKKyAgICBkZWYgX3dhaXRfZm9yX2RhdGFfYW5kX3VwZGF0
ZV9idWZmZXJzKHNlbGYsIGRlYWRsaW5lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVt
cCA9IG9zLnJlYWQoc2VsZi5fc3Rkb3V0LCAxMjgpCisgICAgICAgICAgICBpZiB0ZW1wOgorICAg
ICAgICAgICAgICAgIHNlbGYuX291dHB1dCArPSB0ZW1wCisgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgIHNlbGYuX2NyYXNoZWQgPSBUcnVlCisgICAgICAgIGV4Y2VwdCBPU0Vycm9y
IGFzIGU6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNl
bGYuX2NyYXNoZWQgPSBUcnVlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlbXAgPSBvcy5y
ZWFkKHNlbGYuX3N0ZGVyciwgMTI4KQorICAgICAgICAgICAgaWYgdGVtcDoKKyAgICAgICAgICAg
ICAgICBzZWxmLl9lcnJvciArPSB0ZW1wCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgIHNlbGYuX2NyYXNoZWQgPSBUcnVlCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Cisg
ICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuX2NyYXNo
ZWQgPSBUcnVlCisKKyAgICBkZWYgX2tpbGwoc2VsZik6CisgICAgICAgIHNlbGYuX3NpbXVsYXRv
cl9tYW5hZ2VyLmtpbGwoc2VsZi5fZGV2aWNlLCBzZWxmLl9idW5kbGVJRCkKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5CShyZXZpc2lvbiAyMTA1NDkpCisr
KyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvci5weQkod29ya2luZyBjb3B5
KQpAQCAtNjE0LDYgKzYxNCwyOSBAQCBjbGFzcyBTaW11bGF0b3Iob2JqZWN0KToKICAgICAgICAg
YXNzZXJ0KHRlc3RpbmdfZGV2aWNlLmF2YWlsYWJsZSkKICAgICAgICAgcmV0dXJuIHRlc3Rpbmdf
ZGV2aWNlCiAKKyAgICBkZWYgaW5zdGFsbChzZWxmLCBkZXZpY2UsIGFwcCk6CisgICAgICAgIGlm
IHNlbGYuX2hvc3QuZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsneGNydW4nLCAnc2ltY3RsJywgJ2lu
c3RhbGwnLCBkZXZpY2UudWRpZCwgYXBwXSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKSA+IDA6Cisg
ICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBy
dW4oc2VsZiwgZGV2aWNlLCBhcHBfaWQsIGFyZ3MsIGVudj1Ob25lKToKKyAgICAgICAgdHJhbnNm
ZXJlZEVudmlyb25tZW50ID0ge30KKyAgICAgICAgaWYgZW52OgorICAgICAgICAgICAgZm9yIHZh
bHVlIGluIGVudjoKKyAgICAgICAgICAgICAgICBpZiBub3QgIlNJTUNUTF9DSElMRF8iIGluIHZh
bHVlOgorICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlcmVkRW52aXJvbm1lbnRbJ1NJTUNUTF9D
SElMRF8nICsgdmFsdWVdID0gZW52W3ZhbHVlXQorICAgICAgICAgICAgICAgICAgICB0cmFuc2Zl
cmVkRW52aXJvbm1lbnRbdmFsdWVdID0gZW52W3ZhbHVlXQorICAgICAgICBzdHIgPSBzZWxmLl9o
b3N0LmV4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ3hjcnVuJywgJ3NpbWN0bCcsICdsYXVuY2gnLCBk
ZXZpY2UudWRpZCwgYXBwX2lkXSArIGFyZ3MsIGVudj10cmFuc2ZlcmVkRW52aXJvbm1lbnQpCisg
ICAgICAgIGlmIG5vdCBhcHBfaWQgaW4gc3RyOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAg
ICAgICAgc3RyID0gc3RyLnJzdHJpcCgnXG4nKS5zcGxpdCgpWzFdCisgICAgICAgIHJldHVybiBp
bnQoc3RyKQorCisgICAgZGVmIGtpbGwoc2VsZiwgZGV2aWNlLCBhcHBfaWQpOgorICAgICAgICBp
ZiBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ3hjcnVuJywgJ3NpbWN0bCcsICd0
ZXJtaW5hdGUnLCBkZXZpY2UudWRpZCwgYXBwX2lkXSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKSA+
IDA6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKwogICAg
IGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuICc8aU9TIFNpbXVsYXRvcjoge251
bV9ydW50aW1lc30gcnVudGltZXMsIHtudW1fZGV2aWNlX3R5cGVzfSBkZXZpY2UgdHlwZXM+Jy5m
b3JtYXQoCiAgICAgICAgICAgICBudW1fcnVudGltZXM9bGVuKHNlbGYucnVudGltZXMpLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298485</attachid>
            <date>2017-01-10 11:02:01 -0800</date>
            <delta_ts>2017-01-13 15:13:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>temp.diff</filename>
            <type>text/plain</type>
            <size>89879</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMDU1MSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDExNyBAQAogMjAxNy0wMS0xMCAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5j
b20+CiAKKyAgICAgICAgUmVtb3ZpbmcgTGF5b3V0VGVzdFJlbGF5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU5MjcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIExheW91dFRlc3RSZWxheTogUmVtb3Zl
ZCBMYXlvdXRUZXN0UmVsYXkuCisgICAgICAgICogTWFrZWZpbGU6IFJlbW92ZWQgTGF5b3V0VGVz
dFJlbGF5IHJlZmVyZW5jZXMuCisgICAgICAgICogU2NyaXB0cy9idWlsZC13ZWJraXQ6IFJlbW92
ZWQgTGF5b3V0VGVzdFJlbGF5IHJlZmVyZW5jZXMuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9wb3J0L2Jhc2UucHk6CisgICAgICAgIChQb3J0Ll9faW5pdF9fKTogQWRkZWQgX3Rlc3RfcnVu
bmVyX3Byb2Nlc3NfY29uc3RydWN0b3IuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0
L2Rhcndpbi5weToKKyAgICAgICAgKERhcndpblBvcnQuZXh0cmFjdF9idW5kbGVfSUQpOiBBZGRl
ZCBmdW5jdGlvbiB0byBleHRyYWN0IGJ1bmRsZSBJRCBmcm9tIHBsaXN0LgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHk6CisgICAgICAgIChEcml2ZXIuX3NldHVwX2Vu
dmlyb25fZm9yX2RyaXZlcik6IFN3YXBwZWQgX3NlcnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yIGZv
ciBfdGVzdF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3Rvci4KKyAgICAgICAgKElPU1NpbXVsYXRv
ckRyaXZlci5jbWRfbGluZSk6IFJlbW92ZWQgdW5uZWVkZWQgYXJndW1lbnRzLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChEcml2
ZXJUZXN0LnRlc3Rfc3RvcF9jbGVhbnNfdXBfcHJvcGVybHkpOiBTZXQgX3Rlc3RfcnVubmVyX3By
b2Nlc3NfY29uc3RydWN0b3IgZm9yIHRlc3RpbmcuCisgICAgICAgIChEcml2ZXJUZXN0LnRlc3Rf
dHdvX3N0YXJ0c19jbGVhbnNfdXBfcHJvcGVybHkpOiBEaXR0by4KKyAgICAgICAgKERyaXZlclRl
c3QudGVzdF9zdGFydF9hY3R1YWxseV9zdGFydHMpOiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3BvcnQvaW9zLnB5OgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydCk6IFJlbW92
ZSByZWxheV9uYW1lLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fX2luaXRfXyk6ICBTZXQg
X3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgZm9yIElPU1NpbXVsYXRvcnMuCisgICAg
ICAgIChJT1NTaW11bGF0b3JQb3J0LnJlbGF5X3BhdGgpOiBEZWxldGVkLgorICAgICAgICAoSU9T
U2ltdWxhdG9yUG9ydC5fY2hlY2tfcmVsYXkpOiBVc2UgYmFzZSBjbGFzcy4KKyAgICAgICAgKElP
U1NpbXVsYXRvclBvcnQuX2NoZWNrX3BvcnRfYnVpbGQpOiBEZWxldGVkLgorICAgICAgICAoSU9T
U2ltdWxhdG9yUG9ydC5fYnVpbGRfcmVsYXkpOiBEZWxldGVkLgorICAgICAgICAoSU9TU2ltdWxh
dG9yUG9ydC5fYnVpbGRfZHJpdmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L3BvcnQvaW9zX3VuaXR0ZXN0LnB5OgorICAgICAgICAoaW9zVGVzdC50ZXN0XzMyYml0KTog
VXBkYXRlIHRlc3QuCisgICAgICAgIChpb3NUZXN0LnRlc3RfNjRiaXQpOiBVcGRhdGUgdGVzdC4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3MucHk6CisgICAg
ICAgIChTZXJ2ZXJQcm9jZXNzKTogSW5oZXJpdCBmcm9tIFNlcnZlclByb2Nlc3NCYXNlLgorICAg
ICAgICAoU2VydmVyUHJvY2Vzcy5fX2luaXRfXyk6IE1vdmUgY29tbW9uIGNvZGUgdG8gU2VydmVy
UHJvY2Vzc0Jhc2UuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLmlzX3N0YXJ0ZWQpOiBDaGVjayB0
aGUgc2VsZi5fcHJvYyB2YXJpYWJsZS4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MuX3Jlc2V0KTog
TW92ZSBjb21tb24gY29kZSB0byBTZXJ2ZXJQcm9jZXNzQmFzZS4KKyAgICAgICAgKFNlcnZlclBy
b2Nlc3MuX3dyaXRlKTogV3JpdGUgdG8gc2VsZi5fcHJvYy4KKyAgICAgICAgKFNlcnZlclByb2Nl
c3MuX3dhaXRfZm9yX2RhdGFfYW5kX3VwZGF0ZV9idWZmZXJzKTogQ2hlY2sgYm90aCBzdGRvdXQg
YW5kIHN0ZGVyciBmb3IgZGF0YS4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MubmFtZSk6IE1vdmVk
IHRvIFNlcnZlclByb2Nlc3NCYXNlLgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5waWQpOiBEaXR0
by4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MucHJvY2Vzc19uYW1lKTogRGl0dG8uCisgICAgICAg
IChTZXJ2ZXJQcm9jZXNzLndyaXRlKTogRGl0dG8uCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLl9w
b3Bfc3Rkb3V0X2xpbmVfaWZfcmVhZHkpOiBEaXR0by4KKyAgICAgICAgKFNlcnZlclByb2Nlc3Mu
X3BvcF9zdGRlcnJfbGluZV9pZl9yZWFkeSk6IERpdHRvLgorICAgICAgICAoU2VydmVyUHJvY2Vz
cy5wb3BfYWxsX2J1ZmZlcmVkX3N0ZGVycik6IERpdHRvLgorICAgICAgICAoU2VydmVyUHJvY2Vz
cy5yZWFkX3N0ZG91dF9saW5lKTogRGl0dG8uCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLnJlYWRf
c3RkZXJyX2xpbmUpOiBEaXR0by4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MucmVhZF9laXRoZXJf
c3Rkb3V0X29yX3N0ZGVycl9saW5lKTogRGl0dG8uCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLnJl
YWRfZWl0aGVyX3N0ZG91dF9vcl9zdGRlcnJfbGluZS5yZXRyaWV2ZV9ieXRlc19mcm9tX2J1ZmZl
cnMpOiBEaXR0by4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MucmVhZF9zdGRvdXQpOiBEaXR0by4K
KyAgICAgICAgKFNlcnZlclByb2Nlc3MucmVhZF9zdGRvdXQucmV0cmlldmVfYnl0ZXNfZnJvbV9z
dGRvdXRfYnVmZmVyKTogRGl0dG8uCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLl9sb2cpOiBEaXR0
by4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MuX2hhbmRsZV90aW1lb3V0KTogRGl0dG8uCisgICAg
ICAgIChTZXJ2ZXJQcm9jZXNzLl9zcGxpdF9zdHJpbmdfYWZ0ZXJfaW5kZXgpOiBEaXR0by4KKyAg
ICAgICAgKFNlcnZlclByb2Nlc3MuX3BvcF9vdXRwdXRfYnl0ZXMpOiBEaXR0by4KKyAgICAgICAg
KFNlcnZlclByb2Nlc3MuX3BvcF9lcnJvcl9ieXRlcyk6IERpdHRvLgorICAgICAgICAoU2VydmVy
UHJvY2Vzcy5oYXNfY3Jhc2hlZCk6IERpdHRvLgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5fcmVh
ZCk6IERpdHRvLgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5zdGFydCk6IERpdHRvLgorICAgICAg
ICAoU2VydmVyUHJvY2Vzcy5zdG9wKTogRGl0dG8uCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLmtp
bGwpOiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nl
c3NfYmFzZS5weTogQWRkZWQuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzQmFzZSk6CisgICAgICAg
IChTZXJ2ZXJQcm9jZXNzQmFzZS5fX2luaXRfXyk6IFNldC11cCBTZXJ2ZXJQcm9jZXNzIGJhc2lj
cy4KKyAgICAgICAgKFNlcnZlclByb2Nlc3NCYXNlLmlzX3N0YXJ0ZWQpOiBUcnVlIGlmIHRoZSBw
aXBlIGlzIGRlZmluZWQuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzQmFzZS5fc3RhcnQpOiBCZWdp
biBydW5uaW5nIHRoZSBwcm9jZXNzLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2UucG9sbCk6
IENoZWNrIGlmIHRoZSBwcm9jZXNzIGlzIHJ1bm5pbmcuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNz
QmFzZS5fd3JpdGUpOiBTZW5kIGRhdGEgdG8gdGhlIHByb2Nlc3MuCisgICAgICAgIChTZXJ2ZXJQ
cm9jZXNzQmFzZS5fd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnMpOiBDaGVjayBib3Ro
IHN0ZG91dCBhbmQgc3RkZXJyIGZvciBkYXRhLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2Uu
X2tpbGwpOiBTaHV0IGRvd24gdGhlIHByb2Nlc3MuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzQmFz
ZS5faGFuZGxlX3Bvc3NpYmxlX2ludGVycnVwdCk6IENoZWNrIGZvciBrZXlib2FyZCBpbnRlcnJ1
cHRzLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2UubmFtZSk6IE1vdmVkIGZyb20gU2VydmVy
UHJvY2Vzcy4KKyAgICAgICAgKFNlcnZlclByb2Nlc3NCYXNlLnBpZCk6IERpdHRvLgorICAgICAg
ICAoU2VydmVyUHJvY2Vzc0Jhc2UuX3Jlc2V0KTogRGl0dG8uCisgICAgICAgIChTZXJ2ZXJQcm9j
ZXNzQmFzZS5wcm9jZXNzX25hbWUpOiBEaXR0by4KKyAgICAgICAgKFNlcnZlclByb2Nlc3NCYXNl
LndyaXRlKTogRGl0dG8uCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzQmFzZS5zdGFydCk6IERpdHRv
LgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2UuX3BvcF9zdGRvdXRfbGluZV9pZl9yZWFkeSk6
IERpdHRvLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2UuX3BvcF9zdGRlcnJfbGluZV9pZl9y
ZWFkeSk6IERpdHRvLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2UucG9wX2FsbF9idWZmZXJl
ZF9zdGRlcnIpOiBEaXR0by4KKyAgICAgICAgKFNlcnZlclByb2Nlc3NCYXNlLnJlYWRfc3Rkb3V0
X2xpbmUpOiBEaXR0by4KKyAgICAgICAgKFNlcnZlclByb2Nlc3NCYXNlLnJlYWRfc3RkZXJyX2xp
bmUpOiBEaXR0by4KKyAgICAgICAgKFNlcnZlclByb2Nlc3NCYXNlLnJlYWRfZWl0aGVyX3N0ZG91
dF9vcl9zdGRlcnJfbGluZSk6IERpdHRvLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2UucmVh
ZF9laXRoZXJfc3Rkb3V0X29yX3N0ZGVycl9saW5lLnJldHJpZXZlX2J5dGVzX2Zyb21fYnVmZmVy
cyk6IERpdHRvLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2UucmVhZF9zdGRvdXQpOiBEaXR0
by4KKyAgICAgICAgKFNlcnZlclByb2Nlc3NCYXNlLnJlYWRfc3Rkb3V0LnJldHJpZXZlX2J5dGVz
X2Zyb21fc3Rkb3V0X2J1ZmZlcik6IERpdHRvLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2Uu
X2xvZyk6IERpdHRvLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2UuX2hhbmRsZV90aW1lb3V0
KTogRGl0dG8uCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzQmFzZS5fc3BsaXRfc3RyaW5nX2FmdGVy
X2luZGV4KTogRGl0dG8uCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzQmFzZS5fcG9wX291dHB1dF9i
eXRlcyk6IERpdHRvLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2UuX3BvcF9lcnJvcl9ieXRl
cyk6IERpdHRvLgorICAgICAgICAoU2VydmVyUHJvY2Vzc0Jhc2UuaGFzX2NyYXNoZWQpOiBEaXR0
by4KKyAgICAgICAgKFNlcnZlclByb2Nlc3NCYXNlLl9yZWFkKTogRGl0dG8uCisgICAgICAgIChT
ZXJ2ZXJQcm9jZXNzQmFzZS5zdG9wKTogRGl0dG8uCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzQmFz
ZS5raWxsKTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRv
cl9wcm9jZXNzLnB5OiBBZGRlZC4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MpOgorICAgICAg
ICAoU2ltdWxhdG9yUHJvY2Vzcy5fX2luaXRfXyk6IEluc3RhbGwgYXBwIG9uIGRldmljZSwgc2V0
dXAgZW52aXJvbm1lbnQuCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNzLl9fdW5saW5rX2NoZWNr
X2V4aXN0cyk6IFVubGluayBmaWxlLCBvbmx5IHRocm93IGVycm9yIGlmIHRoZSBmaWxlIGV4aXN0
cyBhZnRlciB1bmxpbmsuCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNzLl9yZXNldCk6IFRlYXIg
ZG93biBmaWxlcy4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX3N0YXJ0KTogQ29uc3RydWN0
IGZpZm8sIGxhdW5jaCBhcHAuCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNzLmlzX3N0YXJ0ZWQp
OiBDaGVjayBpZiBhbnkgZmlmb3MgYXJlIGRlZmluZWQuCisgICAgICAgIChTaW11bGF0b3JQcm9j
ZXNzLnBvbGwpOiBDaGVjayBpZiBzdGRlcnIgaXMgYWxpdmUuCisgICAgICAgIChTaW11bGF0b3JQ
cm9jZXNzLl93cml0ZSk6IFdyaXRlIHRvIHN0ZGluIGZpZm8uCisgICAgICAgIChTaW11bGF0b3JQ
cm9jZXNzLl93YWl0X2Zvcl9kYXRhX2FuZF91cGRhdGVfYnVmZmVycyk6IEF0dGVtcHQgdG8gcHVs
bCBkYXRhIGZyb20gYm90aCBzdGRvdXQgYW5kIHN0ZGVyci4KKyAgICAgICAgKFNpbXVsYXRvclBy
b2Nlc3MuX2tpbGwpOiBTaHV0ZG93biBwcm9jZXNzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkveGNvZGUvc2ltdWxhdG9yLnB5OgorICAgICAgICAoU2ltdWxhdG9yLmluc3RhbGwpOiBJbnN0
YWxsIGFwcCBvbiBzaW11bGF0ZWQgZGV2aWNlLgorICAgICAgICAoU2ltdWxhdG9yLnJ1bik6IFJ1
biBhcHAgb24gZGV2aWNlLCB0cmFuc2ZlciBlbnZpcm9ubWVudCBkYXRhLgorICAgICAgICAoU2lt
dWxhdG9yLmtpbGwpOiBTaHV0ZG93biBhcHAgb24gc2ltdWxhdGVkIGRldmljZS4KKworMjAxNy0w
MS0xMCAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CisKICAgICAgICAgc3Zu
LWFwcGx5IGZhaWxlZCB0byBhcHBseSBhIHBhdGNoIChkZWxldGluZyBmaWxlIHdpdGggc3ZuIHBy
b3BlcnR5KQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY1OTUzCiAKCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMvQmFz
ZS54Y2NvbmZpZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29uZmlndXJh
dGlvbnMvQmFzZS54Y2NvbmZpZwkocmV2aXNpb24gMjEwNTQ5KQorKysgVG9vbHMvTGF5b3V0VGVz
dFJlbGF5L0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcJKG5vbmV4aXN0ZW50KQpAQCAtMSw2
OCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0vLyBhcmUgbWV0OgotLy8g
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLS8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0v
LyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotLy8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS8vIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotLy8g
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LS8vIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotLy8gRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotLy8gUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0vLyBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0vLyBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUg
Ii4uLy4uLy4uLy4uL0ludGVybmFsL0NvbmZpZ3VyYXRpb25zL0hhdmVJbnRlcm5hbFNESy54Y2Nv
bmZpZyIKLQotVVNFX0lOVEVSTkFMX1NESyA9ICQoVVNFX0lOVEVSTkFMX1NES18kKENPTkZJR1VS
QVRJT04pKTsKLVVTRV9JTlRFUk5BTF9TREtfUHJvZHVjdGlvbiA9IFlFUzsKLVVTRV9JTlRFUk5B
TF9TREtfRGVidWcgPSAkKEhBVkVfSU5URVJOQUxfU0RLKTsKLVVTRV9JTlRFUk5BTF9TREtfUmVs
ZWFzZSA9ICQoSEFWRV9JTlRFUk5BTF9TREspOwotCi1DTEFOR19DWFhfTEFOR1VBR0VfU1RBTkRB
UkQgPSBnbnUrKzB4OwotQ0xBTkdfRU5BQkxFX09CSkNfQVJDID0gWUVTOwotQ0xBTkdfV0FSTl9D
WFgwWF9FWFRFTlNJT05TID0gTk87Ci1IRUFERVJfU0VBUkNIX1BBVEhTID0gJChCVUlMVF9QUk9E
VUNUU19ESVIpL3Vzci9sb2NhbC9pbmNsdWRlICQoV0VCQ09SRV9QUklWQVRFX0hFQURFUlNfRElS
KS9Gb3J3YXJkaW5nSGVhZGVycyAkKFNSQ1JPT1QpLy4uLy4uL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pY3UgJChORVhUX1JPT1QpL3Vzci9sb2NhbC9pbmNsdWRlL1dlYkNvcmVUZXN0U3VwcG9ydDsK
LUdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAkKERFQlVHX0RFRklORVMpIEVOQUJMRV9E
QVNIQk9BUkRfU1VQUE9SVDsKLURFQlVHX0lORk9STUFUSU9OX0ZPUk1BVCA9IGR3YXJmLXdpdGgt
ZHN5bTsKLVBSRUJJTkRJTkcgPSBOTwotR0NDX0NfTEFOR1VBR0VfU1RBTkRBUkQgPSBnbnU5OQot
R0NDX0VOQUJMRV9DUFBfRVhDRVBUSU9OUyA9IE5POwotR0NDX0VOQUJMRV9DUFBfUlRUSSA9IE5P
OwotR0NDX1BSRUNPTVBJTEVfUFJFRklYX0hFQURFUiA9IFlFUwotR0NDX1RSRUFUX1dBUk5JTkdT
X0FTX0VSUk9SUyA9IFlFUwotR0NDX1ZFUlNJT04gPSBjb20uYXBwbGUuY29tcGlsZXJzLmxsdm0u
Y2xhbmcuMV8wOwotR0NDX1dBUk5fQUJPVVRfREVQUkVDQVRFRF9GVU5DVElPTlMgPSBOTwotR0ND
X1dBUk5fVU5VU0VEX0ZVTkNUSU9OID0gWUVTCi1HQ0NfV0FSTl9VTlVTRURfVkFSSUFCTEUgPSBZ
RVMKLUdDQ19XQVJOXzY0X1RPXzMyX0JJVF9DT05WRVJTSU9OW2FyY2g9eDg2XzY0XSA9IE5POwot
V0FSTklOR19DRkxBR1MgPSAtV2FsbCAtVyAtV25vLXVudXNlZC1wYXJhbWV0ZXIgLVd1bmRlZgot
Ci1ERUJVR19ERUZJTkVTX2RlYnVnID0gOwotREVCVUdfREVGSU5FU19ub3JtYWwgPSBOREVCVUc7
Ci1ERUJVR19ERUZJTkVTID0gJChERUJVR19ERUZJTkVTXyQoQ1VSUkVOVF9WQVJJQU5UKSk7Ci0K
LVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SID0gJChUQVJHRVRfTUFDX09TX1hfVkVSU0lP
Tl9NQUpPUiQoTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUOnN1ZmZpeDppZGVudGlmaWVyKSk7Ci1U
QVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUl8xMCA9IDEwMTAwMDsKLVRBUkdFVF9NQUNfT1Nf
WF9WRVJTSU9OX01BSk9SXzExID0gMTAxMTAwOwotVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFK
T1JfMTIgPSAxMDEyMDA7Ci1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUl8xMyA9IDEwMTMw
MDsKLQotU0RLUk9PVCA9IG1hY29zeC5pbnRlcm5hbDsKLQotU1VQUE9SVEVEX1BMQVRGT1JNUyA9
IG1hY29zeDsKLQotVE9PTENIQUlOUyA9IGRlZmF1bHQ7Ci0KLU9USEVSX0NGTEFHUyA9ICQoQVNB
Tl9PVEhFUl9DRkxBR1MpOwotT1RIRVJfQ1BMVVNQTFVTRkxBR1MgPSAkKEFTQU5fT1RIRVJfQ1BM
VVNQTFVTRkxBR1MpOwotT1RIRVJfTERGTEFHUyA9ICQoQVNBTl9PVEhFUl9MREZMQUdTKTsKCklu
ZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMvRGVidWdSZWxlYXNlLnhj
Y29uZmlnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9u
cy9EZWJ1Z1JlbGVhc2UueGNjb25maWcJKHJldmlzaW9uIDIxMDU0OSkKKysrIFRvb2xzL0xheW91
dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25maWcJKG5vbmV4aXN0
ZW50KQpAQCAtMSw0MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0vLyBh
cmUgbWV0OgotLy8gMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0vLyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotLy8gRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS8vIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotLy8gUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLS8vIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotLy8gRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotLy8gUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0vLyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0vLyBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LQotI2luY2x1ZGUgIkJhc2UueGNjb25maWciCi0KLUFSQ0hTID0gJChBUkNIU19TVEFOREFSRF82
NF9CSVQpOwotCi1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUiA9ICQoTUFDX09TX1hfVkVS
U0lPTl9NQUpPUik7Ci0KLU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCA9ICQoTUFDT1NYX0RFUExP
WU1FTlRfVEFSR0VUXyQoVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1IpKQotTUFDT1NYX0RF
UExPWU1FTlRfVEFSR0VUXzEwMTAwMCA9IDEwLjEwOwotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VU
XzEwMTEwMCA9IDEwLjExOwotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEwMTIwMCA9IDEwLjEy
OwotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEwMTMwMCA9IDEwLjEzOwotCi1GUkFNRVdPUktf
U0VBUkNIX1BBVEhTID0gJChERVZFTE9QRVJfRElSKS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtz
OwotTERfUlVOUEFUSF9TRUFSQ0hfUEFUSFMgPSAkKERFVkVMT1BFUl9ESVIpL0xpYnJhcnkvUHJp
dmF0ZUZyYW1ld29ya3M7Ci1PVEhFUl9MREZMQUdTID0gLWZyYW1ld29yayBDb3JlU2ltdWxhdG9y
IC1mcmFtZXdvcmsgQXBwS2l0OwotCi1TREtST09UID0gJChTREtST09UX21hY29zeF8kKFVTRV9J
TlRFUk5BTF9TREspKTsKLVNES1JPT1RfbWFjb3N4XyA9IG1hY29zeDsKLVNES1JPT1RfbWFjb3N4
X1lFUyA9IG1hY29zeC5pbnRlcm5hbDsKCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5
b3V0VGVzdFJlbGF5L0NvcmVTaW11bGF0b3JTUEkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlv
dXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0NvcmVTaW11bGF0b3JTUEkuaAkocmV2aXNpb24g
MjEwNTQ5KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9Db3JlU2lt
dWxhdG9yU1BJLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE1LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmIF9faGFzX2luY2x1ZGUoPENvcmVTaW11bGF0b3IvQ29yZVNpbXVsYXRvci5oPikK
LQotLyogRklYTUU6IFJlbW92ZSB0aGUgYmVsb3cgI2RlZmluZSBvbmNlIHdlIHJlcXVpcmUgWGNv
ZGUgNy4zIHdpdGggaU9TIDkuMyBTREsgb3IgbmV3ZXIuICovCi0jZGVmaW5lIF9fY29yZXNpbV91
bmF2YWlsYWJsZV9tc2cobXNnKQotI2ltcG9ydCA8Q29yZVNpbXVsYXRvci9Db3JlU2ltdWxhdG9y
Lmg+Ci0KLS8qIEZJWE1FOiBBbHdheXMgdXNlIFNpbVNlcnZpY2VDb250ZXh0IG9uY2Ugd2UgcmVx
dWlyZSBYY29kZSA3LjMgd2l0aCBpT1MgOS4zIFNESyBvciBuZXdlci4gKi8KLSNkZWZpbmUgVVNF
X1NJTV9TRVJWSUNFX0NPTlRFWFQgZGVmaW5lZChDT1JFU0lNX0FQSV9NQVhfQUxMT1dFRCkKLQot
I2Vsc2UKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNkZWZpbmUgVVNF
X1NJTV9TRVJWSUNFX0NPTlRFWFQgMQotCi0jZGVmaW5lIGtTaW1EZXZpY2VMYXVuY2hBcHBsaWNh
dGlvbkFyZ3VtZW50cyBAImFyZ3VtZW50cyIKLSNkZWZpbmUga1NpbURldmljZUxhdW5jaEFwcGxp
Y2F0aW9uRW52aXJvbm1lbnQgQCJlbnZpcm9ubWVudCIKLQotQGludGVyZmFjZSBTaW1EZXZpY2Ug
OiBOU09iamVjdAotLSAoQk9PTClpbnN0YWxsQXBwbGljYXRpb246KE5TVVJMICopaW5zdGFsbFVS
TCB3aXRoT3B0aW9uczooTlNEaWN0aW9uYXJ5ICopb3B0aW9ucyBlcnJvcjooTlNFcnJvciAqIF9f
YXV0b3JlbGVhc2luZyAqKWVycm9yOwotLSAocGlkX3QpbGF1bmNoQXBwbGljYXRpb25XaXRoSUQ6
KE5TU3RyaW5nICopYnVuZGxlSUQgb3B0aW9uczooTlNEaWN0aW9uYXJ5ICopb3B0aW9ucyBlcnJv
cjooTlNFcnJvciAqIF9fYXV0b3JlbGVhc2luZyAqKWVycm9yOwotQGVuZAotCi1AaW50ZXJmYWNl
IFNpbURldmljZVNldCA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBjb3B5KSBOU0Rp
Y3Rpb25hcnkgKmRldmljZXNCeVVESUQ7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgU2ltU2VydmljZUNv
bnRleHQgOiBOU09iamVjdAotKyhTaW1TZXJ2aWNlQ29udGV4dCAqKXNoYXJlZFNlcnZpY2VDb250
ZXh0Rm9yRGV2ZWxvcGVyRGlyOihOU1N0cmluZyAqKWRldmVsb3BlckRpciBlcnJvcjooTlNFcnJv
ciAqIF9fYXV0b3JlbGVhc2luZyAqKWVycm9yOwotLShTaW1EZXZpY2VTZXQgKilkZWZhdWx0RGV2
aWNlU2V0V2l0aEVycm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci1AZW5k
Ci0KLSNlbmRpZgoKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkv
TFRQaXBlUmVsYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0
VGVzdFJlbGF5L0xUUGlwZVJlbGF5LmgJKHJldmlzaW9uIDIxMDU0OSkKKysrIFRvb2xzL0xheW91
dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRQaXBlUmVsYXkuaAkobm9uZXhpc3RlbnQpCkBA
IC0xLDM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIExUUGlwZVJlbGF5X2gKLSNkZWZp
bmUgTFRQaXBlUmVsYXlfaAotCi0jaW1wb3J0ICJMVFJlbGF5LmgiCi0KLUBpbnRlcmZhY2UgTFRQ
aXBlUmVsYXkgOiBOU09iamVjdCA8TFRSZWxheT4KLUBwcm9wZXJ0eSAod2VhaykgaWQ8TFRSZWxh
eURlbGVnYXRlPiByZWxheURlbGVnYXRlOwotLSAoaWQpaW5pdFdpdGhQcmVmaXg6KE5TU3RyaW5n
ICopcHJlZml4OwotQGVuZAotCi0jZW5kaWYKCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkv
TGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0
VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5tCShyZXZpc2lvbiAyMTA1NDkp
CisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0J
KG5vbmV4aXN0ZW50KQpAQCAtMSwxNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgIkxU
UGlwZVJlbGF5LmgiCi0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotI2luY2x1
ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLUBpbnRlcmZhY2UgTFRQ
aXBlUmVsYXkgKCkKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKmZpZm9Q
cmVmaXg7Ci1AcHJvcGVydHkgKHN0cm9uZykgTlNPdXRwdXRTdHJlYW0gKnN0YW5kYXJkSW5wdXRQ
aXBlOwotQHByb3BlcnR5IChzdHJvbmcpIE5TSW5wdXRTdHJlYW0gKnN0YW5kYXJkT3V0cHV0UGlw
ZTsKLUBwcm9wZXJ0eSAoc3Ryb25nKSBOU0lucHV0U3RyZWFtICpzdGFuZGFyZEVycm9yUGlwZTsK
LQotLSAodm9pZCljcmVhdGVGSUZPczsKLS0gKHZvaWQpZGVzdHJveUZJRk9zOwotQGVuZAotCi1A
aW1wbGVtZW50YXRpb24gTFRQaXBlUmVsYXkKLQotLSAoTlNTdHJpbmcgKilpblBpcGVQYXRoCi17
Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9JTiJd
OwotfQotCi0tIChOU1N0cmluZyAqKW91dFBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1By
ZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9PVVQiXTsKLX0KLQotLSAoTlNTdHJpbmcg
KillcnJvclBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVu
ZGluZ1N0cmluZzpAIl9FUlJPUiJdOwotfQotCi0tIChOU091dHB1dFN0cmVhbSAqKSBvdXRwdXRT
dHJlYW0KLXsKLSAgICByZXR1cm4gX3N0YW5kYXJkSW5wdXRQaXBlOwotfQotCi0tIChpZClpbml0
V2l0aFByZWZpeDooTlNTdHJpbmcgKilwcmVmaXgKLXsKLSAgICBpZiAoKHNlbGYgPSBbc3VwZXIg
aW5pdF0pKSB7Ci0gICAgICAgIF9maWZvUHJlZml4ID0gcHJlZml4OwotICAgICAgICBbc2VsZiBk
ZXN0cm95RklGT3NdOwotICAgIH0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXR1
cAotewotICAgIFtzZWxmIGRlc3Ryb3lGSUZPc107Ci0gICAgW3NlbGYgY3JlYXRlRklGT3NdOwot
fQotCi0tICh2b2lkKXRlYXJEb3duCi17Ci0gICAgW3NlbGYgZGVzdHJveUZJRk9zXTsKLX0KLQot
LSh2b2lkKSBjb25uZWN0Ci17Ci0gICAgX3N0YW5kYXJkSW5wdXRQaXBlID0gW05TT3V0cHV0U3Ry
ZWFtIG91dHB1dFN0cmVhbVRvRmlsZUF0UGF0aDpbc2VsZiBpblBpcGVQYXRoXSBhcHBlbmQ6WUVT
XTsKLSAgICBfc3RhbmRhcmRPdXRwdXRQaXBlID0gW05TSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW1X
aXRoRmlsZUF0UGF0aDpbc2VsZiBvdXRQaXBlUGF0aF1dOwotICAgIF9zdGFuZGFyZEVycm9yUGlw
ZSA9IFtOU0lucHV0U3RyZWFtIGlucHV0U3RyZWFtV2l0aEZpbGVBdFBhdGg6W3NlbGYgZXJyb3JQ
aXBlUGF0aF1dOwotCi0gICAgW1tzZWxmIHN0YW5kYXJkSW5wdXRQaXBlXSBzZXREZWxlZ2F0ZTpz
ZWxmXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRQaXBlXSBzZXREZWxlZ2F0ZTpzZWxmXTsK
LSAgICBbW3NlbGYgc3RhbmRhcmRFcnJvclBpcGVdIHNldERlbGVnYXRlOnNlbGZdOwotCi0gICAg
W1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gc2NoZWR1bGVJblJ1bkxvb3A6W05TUnVuTG9vcCBt
YWluUnVuTG9vcF0gZm9yTW9kZTpOU0RlZmF1bHRSdW5Mb29wTW9kZV07Ci0gICAgW1tzZWxmIHN0
YW5kYXJkRXJyb3JQaXBlXSBzY2hlZHVsZUluUnVuTG9vcDpbTlNSdW5Mb29wIG1haW5SdW5Mb29w
XSBmb3JNb2RlOk5TRGVmYXVsdFJ1bkxvb3BNb2RlXTsKLQotICAgIFtbc2VsZiBzdGFuZGFyZElu
cHV0UGlwZV0gb3Blbl07Ci0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gb3Blbl07Ci0g
ICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JQaXBlXSBvcGVuXTsKLQotICAgIFtbc2VsZiByZWxheURl
bGVnYXRlXSBkaWRDb25uZWN0XTsKLX0KLQotLSAodm9pZClkaXNjb25uZWN0Ci17Ci0gICAgW1tz
ZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gY2xvc2VdOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9y
UGlwZV0gY2xvc2VdOwotICAgIFtbc2VsZiBzdGFuZGFyZElucHV0UGlwZV0gY2xvc2VdOwotICAg
IFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWREaXNjb25uZWN0XTsKLX0KLQotLSAodm9pZCljcmVh
dGVGSUZPcwotewotICAgIG1rZmlmbyhbW3NlbGYgaW5QaXBlUGF0aF0gVVRGOFN0cmluZ10sIDA2
NjYpOwotICAgIG1rZmlmbyhbW3NlbGYgb3V0UGlwZVBhdGhdIFVURjhTdHJpbmddLCAwNjY2KTsK
LSAgICBta2ZpZm8oW1tzZWxmIGVycm9yUGlwZVBhdGhdIFVURjhTdHJpbmddLCAwNjY2KTsKLX0K
LQotLSAodm9pZClkZXN0cm95RklGT3MKLXsKLSAgICB1bmxpbmsoW1tzZWxmIGluUGlwZVBhdGhd
IFVURjhTdHJpbmddKTsKLSAgICB1bmxpbmsoW1tzZWxmIG91dFBpcGVQYXRoXSBVVEY4U3RyaW5n
XSk7Ci0gICAgdW5saW5rKFtbc2VsZiBlcnJvclBpcGVQYXRoXSBVVEY4U3RyaW5nXSk7Ci19Ci0K
LS0gKHZvaWQpIHJlbGF5U3RyZWFtOihOU0lucHV0U3RyZWFtICopc3RyZWFtCi17Ci0gICAgdWlu
dDhfdCBieXRlc1sxMDI0XTsKLSAgICBOU0ludGVnZXIgYnl0ZXNSZWFkID0gW3N0cmVhbSByZWFk
OmJ5dGVzIG1heExlbmd0aDoxMDI0XTsKLSAgICBOU0RhdGEgKmRhdGEgPSBbTlNEYXRhIGRhdGFX
aXRoQnl0ZXM6Ynl0ZXMgbGVuZ3RoOmJ5dGVzUmVhZF07Ci0KLSAgICBpZiAoc3RyZWFtID09IFtz
ZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0pCi0gICAgICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBk
aWRSZWNlaXZlU3Rkb3V0RGF0YTpkYXRhXTsKLSAgICBlbHNlCi0gICAgICAgIFtbc2VsZiByZWxh
eURlbGVnYXRlXSBkaWRSZWNlaXZlU3RkZXJyRGF0YTpkYXRhXTsKLX0KLQotLSAodm9pZClzdHJl
YW06KE5TU3RyZWFtICopYVN0cmVhbSBoYW5kbGVFdmVudDooTlNTdHJlYW1FdmVudClldmVudENv
ZGUKLXsKLSAgICBzd2l0Y2ggKGV2ZW50Q29kZSkgewotICAgIGNhc2UgTlNTdHJlYW1FdmVudE5v
bmU6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlNTdHJlYW1FdmVudEhhc0J5dGVzQXZhaWxh
YmxlOgotICAgICAgICBbc2VsZiByZWxheVN0cmVhbTooTlNJbnB1dFN0cmVhbSAqKWFTdHJlYW1d
OwotICAgIGNhc2UgTlNTdHJlYW1FdmVudEhhc1NwYWNlQXZhaWxhYmxlOgotICAgICAgICBicmVh
azsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnRPcGVuQ29tcGxldGVkOgotICAgICAgICBicmVhazsK
LSAgICBjYXNlIE5TU3RyZWFtRXZlbnRFbmRFbmNvdW50ZXJlZDoKLSAgICAgICAgW1tzZWxmIHJl
bGF5RGVsZWdhdGVdIGRpZENyYXNoV2l0aE1lc3NhZ2U6bmlsXTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBOU1N0cmVhbUV2ZW50RXJyb3JPY2N1cnJlZDoKLSAgICAgICAgW1tzZWxmIHJlbGF5
RGVsZWdhdGVdIGRpZENyYXNoV2l0aE1lc3NhZ2U6W1thU3RyZWFtIHN0cmVhbUVycm9yXSBkZXNj
cmlwdGlvbl1dOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLUBlbmQKCkluZGV4OiBUb29s
cy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXkuaAkocmV2aXNp
b24gMjEwNTQ5KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJl
bGF5LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRl
ZiBMVFJlbGF5X2gKLSNkZWZpbmUgTFRSZWxheV9oCi0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91
bmRhdGlvbi5oPgotCi1AcHJvdG9jb2wgTFRSZWxheURlbGVnYXRlIDxOU09iamVjdD4KLS0gKHZv
aWQpZGlkQ29ubmVjdDsKLS0gKHZvaWQpZGlkRGlzY29ubmVjdDsKLS0gKHZvaWQpZGlkQ3Jhc2hX
aXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlOwotLSAodm9pZClkaWRSZWNlaXZlU3Rkb3V0
RGF0YTooTlNEYXRhICopZGF0YTsKLS0gKHZvaWQpZGlkUmVjZWl2ZVN0ZGVyckRhdGE6KE5TRGF0
YSAqKWRhdGE7Ci1AZW5kCi0KLUBwcm90b2NvbCBMVFJlbGF5IDxOU09iamVjdCwgTlNTdHJlYW1E
ZWxlZ2F0ZT4KLS0gKHZvaWQpc2V0dXA7Ci0tICh2b2lkKXRlYXJEb3duOwotLSAodm9pZCljb25u
ZWN0OwotLSAodm9pZClkaXNjb25uZWN0OwotQHByb3BlcnR5ICh3ZWFrKSBpZDxMVFJlbGF5RGVs
ZWdhdGU+IHJlbGF5RGVsZWdhdGU7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TT3V0
cHV0U3RyZWFtICpvdXRwdXRTdHJlYW07Ci1AZW5kCi0KLSNlbmRpZgoKSW5kZXg6IFRvb2xzL0xh
eW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250
cm9sbGVyLmgJKHJldmlzaW9uIDIxMDU0OSkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlv
dXRUZXN0UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQwICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotI2lmbmRlZiBMVFJlbGF5Q29udHJvbGxlcl9oCi0jZGVmaW5lIExU
UmVsYXlDb250cm9sbGVyX2gKLQotI2ltcG9ydCAiTFRSZWxheS5oIgotCi0jaW1wb3J0IDxGb3Vu
ZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotQGNsYXNzIFNpbURldmljZTsKLQotQGludGVyZmFjZSBM
VFJlbGF5Q29udHJvbGxlciA6IE5TT2JqZWN0IDxMVFJlbGF5RGVsZWdhdGU+Ci0tIChpZClpbml0
V2l0aERldmljZTooU2ltRGV2aWNlICopZGV2aWNlIHByb2R1Y3REaXI6KE5TU3RyaW5nICopcHJv
ZHVjdERpciBhcHBQYXRoOihOU1N0cmluZyAqKWFwcFBhdGggZGV2aWNlVURJRDooTlNVVUlEICop
dWRpZCBkdW1wVG9vbEFyZ3VtZW50czooTlNBcnJheSAqKWFyZ3VtZW50czsKLS0gKHZvaWQpc3Rh
cnQ7Ci0tICh2b2lkKWZpbmlzaDsKLUBlbmQKLQotI2VuZGlmCgpJbmRleDogVG9vbHMvTGF5b3V0
VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheUNvbnRyb2xs
ZXIubQkocmV2aXNpb24gMjEwNTQ5KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRl
c3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5tCShub25leGlzdGVudCkKQEAgLTEsMjcyICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJMVFJlbGF5Q29udHJvbGxlci5oIgotCi0jaW1wb3J0
ICJDb3JlU2ltdWxhdG9yU1BJLmgiCi0jaW1wb3J0ICJMVFBpcGVSZWxheS5oIgotI2ltcG9ydCA8
QXBwS2l0L0FwcEtpdC5oPgotI2ltcG9ydCA8Y3J0X2V4dGVybnMuaD4KLQotQGludGVyZmFjZSBM
VFJlbGF5Q29udHJvbGxlciAoKQotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBkaXNwYXRj
aF9zb3VyY2VfdCBzdGFuZGFyZElucHV0RGlzcGF0Y2hTb3VyY2U7Ci1AcHJvcGVydHkgKHJlYWRv
bmx5LCBzdHJvbmcpIE5TRmlsZUhhbmRsZSAqc3RhbmRhcmRPdXRwdXQ7Ci1AcHJvcGVydHkgKHJl
YWRvbmx5LCBzdHJvbmcpIE5TRmlsZUhhbmRsZSAqc3RhbmRhcmRFcnJvcjsKLUBwcm9wZXJ0eSAo
cmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKmlwY0lkZW50aWZpZXI7Ci1AcHJvcGVydHkgKHJl
YWRvbmx5LCBzdHJvbmcpIE5TU3RyaW5nICphcHBCdW5kbGVJZGVudGlmaWVyOwotQHByb3BlcnR5
IChyZWFkb25seSwgc3Ryb25nKSBOU1N0cmluZyAqYXBwUGF0aDsKLUBwcm9wZXJ0eSAocmVhZG9u
bHksIHN0cm9uZykgTlNVVUlEICpkZXZpY2VVRElEOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ry
b25nKSBOU0FycmF5ICpkdW1wVG9vbEFyZ3VtZW50czsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0
cm9uZykgTlNTdHJpbmcgKnByb2R1Y3REaXI7Ci1AcHJvcGVydHkgKHN0cm9uZykgU2ltRGV2aWNl
ICpkZXZpY2U7Ci1AcHJvcGVydHkgKHN0cm9uZykgaWQ8TFRSZWxheT4gcmVsYXk7Ci1AcHJvcGVy
dHkgcGlkX3QgcGlkOwotQHByb3BlcnR5IChzdHJvbmcpIGRpc3BhdGNoX3NvdXJjZV90IGFwcERp
c3BhdGNoU291cmNlOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gTFRSZWxheUNvbnRyb2xsZXIK
LQotLSAoaWQpaW5pdFdpdGhEZXZpY2U6KFNpbURldmljZSAqKWRldmljZSBwcm9kdWN0RGlyOihO
U1N0cmluZyAqKXByb2R1Y3REaXIgYXBwUGF0aDooTlNTdHJpbmcgKilhcHBQYXRoIGRldmljZVVE
SUQ6KE5TVVVJRCAqKXVkaWQgZHVtcFRvb2xBcmd1bWVudHM6KE5TQXJyYXkgKilhcmd1bWVudHMK
LXsKLSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKSB7Ci0gICAgICAgIF9kZXZpY2UgPSBk
ZXZpY2U7Ci0gICAgICAgIF9wcm9kdWN0RGlyID0gcHJvZHVjdERpcjsKLSAgICAgICAgX2FwcFBh
dGggPSBhcHBQYXRoOwotICAgICAgICBfYXBwQnVuZGxlSWRlbnRpZmllciA9IFtbTlNCdW5kbGUg
YnVuZGxlV2l0aFBhdGg6YXBwUGF0aF0gYnVuZGxlSWRlbnRpZmllcl07Ci0gICAgICAgIF9kZXZp
Y2VVRElEID0gdWRpZDsKLSAgICAgICAgX2R1bXBUb29sQXJndW1lbnRzID0gYXJndW1lbnRzOwot
ICAgICAgICBfc3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNlID0gZGlzcGF0Y2hfc291cmNlX2Ny
ZWF0ZShESVNQQVRDSF9TT1VSQ0VfVFlQRV9SRUFELCBTVERJTl9GSUxFTk8sIDAsIGRpc3BhdGNo
X2dldF9tYWluX3F1ZXVlKCkpOwotICAgICAgICBfc3RhbmRhcmRPdXRwdXQgPSBbTlNGaWxlSGFu
ZGxlIGZpbGVIYW5kbGVXaXRoU3RhbmRhcmRPdXRwdXRdOwotICAgICAgICBfc3RhbmRhcmRFcnJv
ciA9IFtOU0ZpbGVIYW5kbGUgZmlsZUhhbmRsZVdpdGhTdGFuZGFyZEVycm9yXTsKLQotICAgICAg
ICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2V2ZW50X2hhbmRsZXIoX3N0YW5kYXJkSW5wdXREaXNwYXRj
aFNvdXJjZSwgXnsKLSAgICAgICAgICAgIHVpbnQ4X3QgYnVmZmVyWzEwMjRdOwotICAgICAgICAg
ICAgc3NpemVfdCBsZW4gPSByZWFkKFNURElOX0ZJTEVOTywgYnVmZmVyLCBzaXplb2YoYnVmZmVy
KSk7Ci0gICAgICAgICAgICBpZiAobGVuID4gMCkgewotICAgICAgICAgICAgICAgIEB0cnkgewot
ICAgICAgICAgICAgICAgICAgICBbW1tzZWxmIHJlbGF5XSBvdXRwdXRTdHJlYW1dIHdyaXRlOmJ1
ZmZlciBtYXhMZW5ndGg6bGVuXTsKLSAgICAgICAgICAgICAgICB9IEBjYXRjaCAoTlNFeGNlcHRp
b24gKmUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQnJva2VuIHBpcGUgLSB0aGUgZHVtcCB0
b29sIGNyYXNoZWQuIFRpbWUgdG8gZGllLgotICAgICAgICAgICAgICAgICAgICBbc2VsZiBkaWRD
cmFzaFdpdGhNZXNzYWdlOm5pbF07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAvLyBFT0YgUmVjZWl2ZWQgb24gdGhlIHJlbGF5J3Mgc3Rh
bmRhcmQgaW5wdXQuCi0gICAgICAgICAgICAgICAgW3NlbGYgZmluaXNoXTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgX3JlbGF5ID0gW1tMVFBpcGVSZWxheSBhbGxvY10g
aW5pdFdpdGhQcmVmaXg6W0AiL3RtcCIgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OnNl
bGYuaXBjSWRlbnRpZmllcl1dOwotICAgICAgICBbX3JlbGF5IHNldFJlbGF5RGVsZWdhdGU6c2Vs
Zl07Ci0gICAgfQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChOU1N0cmluZyAqKWlwY0lkZW50
aWZpZXIKLXsKLSAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQC0lQCIs
IHNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciwgc2VsZi5kZXZpY2VVRElELlVVSURTdHJpbmddOwot
fQotCi0tIChOU1N0cmluZyAqKXByb2Nlc3NOYW1lCi17Ci0gICAgcmV0dXJuIFtzZWxmLmFwcEJ1
bmRsZUlkZW50aWZpZXIgY29tcG9uZW50c1NlcGFyYXRlZEJ5U3RyaW5nOkAiLiJdLmxhc3RPYmpl
Y3Q7Ci19Ci0KLS0gKHZvaWQpZGlkUmVjZWl2ZVN0ZG91dERhdGE6KE5TRGF0YSAqKWRhdGEKLXsK
LSAgICBAdHJ5IHsKLSAgICAgICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0XSB3cml0ZURhdGE6ZGF0
YV07Ci0gICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRpb24pIHsKLSAgICAgICAgLy8g
TlNGaWxlSGFuZGxlT3BlcmF0aW9uRXhjZXB0aW9uCi0gICAgICAgIC8vIEJyb2tlbiBwaXBlIC0g
dGhlIHRlc3QgaGFybmVzcyBzdG9wcGVkIGxpc3RlbmluZyB0byB1cywKLSAgICAgICAgLy8gcHJv
YmFibHkgYmVjYXVzZSB3ZSB0aW1lZCBvdXQgb3IgYSBydW4gd2FzIGNhbmNlbGVkLgotICAgICAg
ICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotfQotCi0tICh2b2lkKWRpZFJlY2VpdmVTdGRl
cnJEYXRhOihOU0RhdGEgKilkYXRhCi17Ci0gICAgQHRyeSB7Ci0gICAgICAgIFtbc2VsZiBzdGFu
ZGFyZEVycm9yXSB3cml0ZURhdGE6ZGF0YV07Ci0gICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpl
eGNlcHRpb24pIHsKLSAgICAgICAgLy8gTlNGaWxlSGFuZGxlT3BlcmF0aW9uRXhjZXB0aW9uCi0g
ICAgICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhlIHRlc3QgaGFybmVzcyBzdG9wcGVkIGxpc3Rlbmlu
ZyB0byB1cywKLSAgICAgICAgLy8gcHJvYmFibHkgYmVjYXVzZSB3ZSB0aW1lZCBvdXQgb3IgYSBy
dW4gd2FzIGNhbmNlbGVkLgotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotfQot
Ci0tICh2b2lkKWRpZERpc2Nvbm5lY3QKLXsKLSAgICBkaXNwYXRjaF9zdXNwZW5kKFtzZWxmIHN0
YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJjZV0pOwotfQotCi0tICh2b2lkKWRpZENvbm5lY3QKLXsK
LSAgICBkaXNwYXRjaF9yZXN1bWUoW3NlbGYgc3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNlXSk7
Ci19Ci0KLS0gKHZvaWQpZGlkQ3Jhc2hXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCi17
Ci0gICAgW1tzZWxmIHJlbGF5XSBkaXNjb25uZWN0XTsKLSAgICBOU1N0cmluZyAqY3Jhc2hNZXNz
YWdlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJcbiNDUkFTSEVEIC0gJUAgKHBpZCAl
ZClcbiIsIFtzZWxmIHByb2Nlc3NOYW1lXSwgW3NlbGYgcGlkXV07Ci0KLSAgICBpZiAobWVzc2Fn
ZSkKLSAgICAgICAgY3Jhc2hNZXNzYWdlID0gW2NyYXNoTWVzc2FnZSBzdHJpbmdCeUFwcGVuZGlu
Z0Zvcm1hdDpAIiVAXG4iLCBtZXNzYWdlXTsKLQotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSB3
cml0ZURhdGE6W2NyYXNoTWVzc2FnZSBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNv
ZGluZ11dOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSBjbG9zZUZpbGVdOwotICAgIFtbc2Vs
ZiBzdGFuZGFyZE91dHB1dF0gY2xvc2VGaWxlXTsKLSAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci19
Ci0KLS0gKHZvaWQpaW5zdGFsbEFwcAotewotICAgIE5TRGljdGlvbmFyeSAqaW5zdGFsbE9wdGlv
bnMgPSBAewotICAgICAgICAoTlNTdHJpbmcgKilrQ0ZCdW5kbGVJZGVudGlmaWVyS2V5OiBzZWxm
LmFwcEJ1bmRsZUlkZW50aWZpZXIsCi0gICAgfTsKLQotICAgIE5TRXJyb3IgKmVycm9yID0gbmls
OwotICAgIEJPT0wgaW5zdGFsbGVkID0gW3NlbGYuZGV2aWNlIGluc3RhbGxBcHBsaWNhdGlvbjpb
TlNVUkwgZmlsZVVSTFdpdGhQYXRoOnNlbGYuYXBwUGF0aF0gd2l0aE9wdGlvbnM6aW5zdGFsbE9w
dGlvbnMgZXJyb3I6JmVycm9yXTsKLSAgICBpZiAoIWluc3RhbGxlZCkgewotICAgICAgICBOU0xv
ZyhAIkNvdWxkbid0IGluc3RhbGwgJUA6ICVAIiwgc2VsZi5hcHBQYXRoLCBlcnJvci5kZXNjcmlw
dGlvbik7Ci0gICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQp
a2lsbEFwcAotewotICAgIGRpc3BhdGNoX3NvdXJjZV90IGRpc3BhdGNoID0gW3NlbGYgYXBwRGlz
cGF0Y2hTb3VyY2VdOwotCi0gICAgaWYgKGRpc3BhdGNoKQotICAgICAgICBkaXNwYXRjaF9zb3Vy
Y2VfY2FuY2VsKGRpc3BhdGNoKTsKLQotICAgIGlmIChbc2VsZiBwaWRdID4gMSkgewotICAgICAg
ICBraWxsKHNlbGYucGlkLCBTSUdLSUxMKTsKLSAgICAgICAgW3NlbGYgc2V0UGlkOi0xXTsKLSAg
ICB9Ci0gICAgW3NlbGYgc2V0QXBwRGlzcGF0Y2hTb3VyY2U6bmlsXTsKLX0KLQotLSAoTlNEaWN0
aW9uYXJ5ICopX2Vudmlyb25tZW50VmFyaWFibGVzCi17Ci0gICAgc3RhdGljIE5TRGljdGlvbmFy
eSAqZW52aXJvbm1lbnRWYXJpYWJsZXM7Ci0gICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNl
OwotCi0gICAgZGlzcGF0Y2hfb25jZSgmb25jZSwgXnsKLSAgICAgICAgTlNTdHJpbmcgKnByb2R1
Y3REaXJlY3RvcnkgPSBbc2VsZiBwcm9kdWN0RGlyXTsKLQotICAgICAgICBOU011dGFibGVEaWN0
aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gW0B7Ci0gICAgICAgICAgICBAIklQQ19JREVOVElGSUVSIjog
c2VsZi5pcGNJZGVudGlmaWVyLAotICAgICAgICAgICAgQCJEWUxEX0ZSQU1FV09SS19QQVRIIjog
cHJvZHVjdERpcmVjdG9yeSwKLSAgICAgICAgICAgIEAiX19YUENfRFlMRF9GUkFNRVdPUktfUEFU
SCI6IHByb2R1Y3REaXJlY3RvcnksCi0gICAgICAgICAgICBAIkRZTERfTElCUkFSWV9QQVRIIjog
cHJvZHVjdERpcmVjdG9yeSwKLSAgICAgICAgICAgIEAiX19YUENfRFlMRF9MSUJSQVJZX1BBVEgi
OiBwcm9kdWN0RGlyZWN0b3J5LAotICAgICAgICB9IG11dGFibGVDb3B5XTsKLQotICAgICAgICBm
b3IgKE5TU3RyaW5nICprZXlOYW1lIGluIEBbQCJEWUxEX0lOU0VSVF9MSUJSQVJJRVMiLCBAIk1h
bGxvY1N0YWNrTG9nZ2luZyIsIEAiTE9DQUxfUkVTT1VSQ0VfUk9PVCIsIEAiRFVNUFJFTkRFUlRS
RUVfVEVNUCJdKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiB2YWx1ZSA9IGdldGVudihba2V5
TmFtZSBVVEY4U3RyaW5nXSk7Ci0gICAgICAgICAgICBpZiAodmFsdWUgJiYgc3RybGVuKHZhbHVl
KSkgewotICAgICAgICAgICAgICAgIE5TU3RyaW5nICpuc1ZhbHVlID0gW05TU3RyaW5nIHN0cmlu
Z1dpdGhVVEY4U3RyaW5nOnZhbHVlXTsKLSAgICAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRP
YmplY3Q6bnNWYWx1ZSBmb3JLZXk6a2V5TmFtZV07Ci0gICAgICAgICAgICAgICAgW2RpY3Rpb25h
cnkgc2V0T2JqZWN0Om5zVmFsdWUgZm9yS2V5OltAIl9fWFBDXyIgc3RyaW5nQnlBcHBlbmRpbmdT
dHJpbmc6a2V5TmFtZV1dOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZm9y
IChjaGFyKiogZW52cCA9ICpfTlNHZXRFbnZpcm9uKCk7ICplbnZwOyBlbnZwKyspIHsKLSAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIGVudiA9ICplbnZwOwotICAgICAgICAgICAgaWYgKCFzdHJuY21w
KCJKU0NfIiwgZW52LCA0KSB8fCAhc3RybmNtcCgiX19YUENfSlNDXyIsIGVudiwgMTApKSB7Ci0g
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXF1YWwgPSBzdHJjaHIoZW52LCAnPScpOwotICAg
ICAgICAgICAgICAgIGlmICghZXF1YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgTlNMb2coQCJN
aXNzaW5nICc9JyBpbiBlbnYgdmFyICclcyciLCBlbnYpOwotICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IG1heEtleUxlbmd0aCA9IDI1NjsKLSAgICAgICAgICAgICAgICBzaXplX3Qga2V5
TGVuZ3RoID0gZXF1YWwgLSBlbnY7Ci0gICAgICAgICAgICAgICAgaWYgKGtleUxlbmd0aCA+PSBt
YXhLZXlMZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgTlNMb2coQCJFbnYgdmFyICclcycg
aXMgdG9vIGxvbmciLCBlbnYpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjaGFyIGtleVttYXhLZXlMZW5ndGhdOwot
ICAgICAgICAgICAgICAgIHN0cm5jcHkoa2V5LCBlbnYsIGtleUxlbmd0aCk7Ci0gICAgICAgICAg
ICAgICAga2V5W2tleUxlbmd0aF0gPSAnXDAnOwotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IHZhbHVlID0gZXF1YWwgKyAxOwotCi0gICAgICAgICAgICAgICAgTlNTdHJpbmcgKm5zS2V5ID0g
W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmtleV07Ci0gICAgICAgICAgICAgICAgTlNT
dHJpbmcgKm5zVmFsdWUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6dmFsdWVdOwot
ICAgICAgICAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpuc1ZhbHVlIGZvcktleTpuc0tl
eV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBlbnZpcm9ubWVudFZhcmlh
YmxlcyA9IFtkaWN0aW9uYXJ5IGNvcHldOwotICAgIH0pOwotCi0gICAgcmV0dXJuIGVudmlyb25t
ZW50VmFyaWFibGVzOwotfQotCi0tICh2b2lkKWxhdW5jaEFwcAotewotICAgIE5TRGljdGlvbmFy
eSAqbGF1bmNoT3B0aW9ucyA9IEB7Ci0gICAgICAgIGtTaW1EZXZpY2VMYXVuY2hBcHBsaWNhdGlv
bkVudmlyb25tZW50OiBbc2VsZiBfZW52aXJvbm1lbnRWYXJpYWJsZXNdLAotICAgICAgICBrU2lt
RGV2aWNlTGF1bmNoQXBwbGljYXRpb25Bcmd1bWVudHM6IFtzZWxmIGR1bXBUb29sQXJndW1lbnRz
XSwKLSAgICB9OwotCi0gICAgTlNFcnJvciAqZXJyb3I7Ci0gICAgcGlkX3QgcGlkID0gW3NlbGYu
ZGV2aWNlIGxhdW5jaEFwcGxpY2F0aW9uV2l0aElEOnNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciBv
cHRpb25zOmxhdW5jaE9wdGlvbnMgZXJyb3I6JmVycm9yXTsKLQotICAgIGlmIChwaWQgPCAwKSB7
Ci0gICAgICAgIE5TTG9nKEAiQ291bGRuJ3QgbGF1bmNoICVAOiAlQCIsIHNlbGYuYXBwQnVuZGxl
SWRlbnRpZmllciwgZXJyb3IuZGVzY3JpcHRpb24pOwotICAgICAgICBleGl0KEVYSVRfRkFJTFVS
RSk7Ci0gICAgfQotCi0gICAgW3NlbGYgc2V0UGlkOnBpZF07Ci0KLSAgICBkaXNwYXRjaF9xdWV1
ZV90IHF1ZXVlID0gZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKTsKLSAgICBkaXNwYXRjaF9zb3Vy
Y2VfdCBzaW11bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3VyY2UgPSBkaXNwYXRjaF9zb3VyY2VfY3Jl
YXRlKERJU1BBVENIX1NPVVJDRV9UWVBFX1BST0MsIFtzZWxmIHBpZF0sIERJU1BBVENIX1BST0Nf
RVhJVCwgcXVldWUpOwotICAgIFtzZWxmIHNldEFwcERpc3BhdGNoU291cmNlOnNpbXVsYXRvckFw
cEV4aXREaXNwYXRjaFNvdXJjZV07Ci0gICAgZGlzcGF0Y2hfc291cmNlX3NldF9ldmVudF9oYW5k
bGVyKHNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSwgXnsKLSAgICAgICAgZGlzcGF0Y2hf
c291cmNlX2NhbmNlbChzaW11bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3VyY2UpOwotICAgICAgICBb
c2VsZiBkaWRDcmFzaFdpdGhNZXNzYWdlOm5pbF07Ci0gICAgfSk7Ci0gICAgZGlzcGF0Y2hfcmVz
dW1lKHNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSk7Ci19Ci0KLS0gKHZvaWQpc3RhcnQK
LXsKLSAgICBbc2VsZiBpbnN0YWxsQXBwXTsKLSAgICBbW3NlbGYgcmVsYXldIHNldHVwXTsKLSAg
ICBbc2VsZiBsYXVuY2hBcHBdOwotICAgIFtbc2VsZiByZWxheV0gY29ubmVjdF07Ci19Ci0KLS0g
KHZvaWQpZmluaXNoCi17Ci0gICAgW1tzZWxmIHJlbGF5XSBkaXNjb25uZWN0XTsKLSAgICBbc2Vs
ZiBraWxsQXBwXTsKLSAgICBleGl0KEVYSVRfU1VDQ0VTUyk7Ci19Ci0KLUBlbmQKCkluZGV4OiBU
b29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L21haW4ubQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L21haW4ubQkocmV2aXNpb24g
MjEwNTQ5KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9tYWluLm0J
KG5vbmV4aXN0ZW50KQpAQCAtMSwxMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBv
cnQgIkNvcmVTaW11bGF0b3JTUEkuaCIKLSNpbXBvcnQgIkxUUmVsYXlDb250cm9sbGVyLmgiCi0j
aW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotc3RhdGljIExUUmVsYXlDb250cm9s
bGVyICpyZWxheUNvbnRyb2xsZXI7Ci0KLXZvaWQgdXNhZ2UoKQotewotICAgIE5TU3RyaW5nICpo
ZWxwVGV4dCA9IEAiTGF5b3V0VGVzdFJlbGF5OiBydW4gYSBkdW1wIHRvb2wgaW4gdGhlIHNpbXVs
YXRvci4gTm90IGZvciBkaXJlY3QgY29uc3VtcHRpb24uXG4iCi0gICAgICAgICJVc2FnZTogTGF5
b3V0VGVzdFJlbGF5IFstaF0gW29wdGlvbnNdIC0tIFtkdW1wIHRvb2wgYXJndW1lbnRzXVxuIgot
ICAgICAgICAiUmVxdWlyZWQgb3B0aW9uczpcbiIKLSAgICAgICAgIiAgICAtdWRpZCA8aWRlbnRp
Zmllcj4gICAgICAgU2ltdWxhdG9yIGRldmljZSBpZGVudGlmaWVyXG4iCi0gICAgICAgICIgICAg
LWFwcCA8YXBwX3BhdGg+ICAgICAgICAgIFBhdGggdG8gdGhlIGJ1aWx0IGlPUyAuYXBwIGJ1bmRs
ZSBkaXJlY3RvcnkuXG4iCi0gICAgICAgICIgICAgLXByb2R1Y3REaXIgPGRpcj4gICAgICAgIC9w
YXRoL3RvL1dlYktpdEJ1aWxkL3tjb25maWd1cmF0aW9ufS17c2hvcnQgcGxhdGZvcm19LlxuIjsK
LQotICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIFtoZWxwVGV4dCBVVEY4U3RyaW5nXSk7Ci19
Ci0KLU5TU3RyaW5nICpnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KE5TU3RyaW5nICpwYXJhbWV0
ZXIpCi17Ci0gICAgTlNVc2VyRGVmYXVsdHMgKmRlZmF1bHRzID0gW05TVXNlckRlZmF1bHRzIHN0
YW5kYXJkVXNlckRlZmF1bHRzXTsKLSAgICBOU1N0cmluZyAqYXJndW1lbnQgPSBbZGVmYXVsdHMg
c3RyaW5nRm9yS2V5OnBhcmFtZXRlcl07Ci0KLSAgICBpZiAoIWFyZ3VtZW50KSB7Ci0gICAgICAg
IE5TTG9nKEAiLSVAIGlzIHJlcXVpcmVkLiIsIHBhcmFtZXRlcik7Ci0gICAgICAgIHVzYWdlKCk7
Ci0gICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci0gICAgcmV0dXJuIGFyZ3VtZW50
OwotfQotCi1OU0FycmF5ICpnZXREdW1wVG9vbEFyZ3VtZW50cygpCi17Ci0gICAgTlNNdXRhYmxl
QXJyYXkgKmR1bXBUb29sQXJndW1lbnRzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07
Ci0gICAgTlNBcnJheSAqcHJvY2Vzc0FyZ3MgPSBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9d
IGFyZ3VtZW50c107Ci0gICAgQk9PTCBhcHBlbmRpbmcgPSBOTzsKLSAgICBmb3IgKE5TU3RyaW5n
ICphcmcgaW4gcHJvY2Vzc0FyZ3MpIHsKLSAgICAgICAgaWYgKFthcmcgaXNFcXVhbFRvU3RyaW5n
OkAiLS0iXSkgewotICAgICAgICAgICAgYXBwZW5kaW5nID0gWUVTOwotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGFwcGVuZGluZykKLSAgICAgICAgICAgIFtk
dW1wVG9vbEFyZ3VtZW50cyBhZGRPYmplY3Q6YXJnXTsKLSAgICB9Ci0gICAgcmV0dXJuIGR1bXBU
b29sQXJndW1lbnRzOwotfQotCi12b2lkIGZpbmlzaCgpCi17Ci0gICAgW3JlbGF5Q29udHJvbGxl
ciBmaW5pc2hdOwotfQotCi12b2lkIHJlY2VpdmVkU2lnbmFsKGludCBzaWduYWwpCi17Ci0gICAg
ZXhpdChFWElUX1NVQ0NFU1MpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAq
IGFyZ3ZbXSkKLXsKLSAgICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAgICAgICAgTlNBcnJheSAqaGVs
cEFyZ3VtZW50cyA9IEBbQCItaCIsIEAiLS1oZWxwIl07Ci0gICAgICAgIGZvciAoTlNTdHJpbmcg
KmhlbHBBcmd1bWVudCBpbiBoZWxwQXJndW1lbnRzKSB7Ci0gICAgICAgICAgICBpZiAoW1tbTlNQ
cm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gYXJndW1lbnRzXSBpbmRleE9mT2JqZWN0OmhlbHBBcmd1
bWVudF0gIT0gTlNOb3RGb3VuZCkgewotICAgICAgICAgICAgICAgIHVzYWdlKCk7Ci0gICAgICAg
ICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSNpZiBVU0VfU0lNX1NFUlZJQ0VfQ09OVEVYVAotICAgICAgICBOU1N0cmluZyAqZGV2ZWxvcGVy
RGlyZWN0b3J5ID0gZ2V0UmVxdWlyZWRTdHJpbmdBcmd1bWVudChAImRldmVsb3BlckRpciIpOwot
I2VuZGlmCi0gICAgICAgIE5TVVVJRCAqdWRpZCA9IFtbTlNVVUlEIGFsbG9jXSBpbml0V2l0aFVV
SURTdHJpbmc6Z2V0UmVxdWlyZWRTdHJpbmdBcmd1bWVudChAInVkaWQiKV07Ci0gICAgICAgIE5T
U3RyaW5nICphcHBQYXRoID0gZ2V0UmVxdWlyZWRTdHJpbmdBcmd1bWVudChAImFwcCIpOwotICAg
ICAgICBOU1N0cmluZyAqcHJvZHVjdERpcmVjdG9yeSA9IGdldFJlcXVpcmVkU3RyaW5nQXJndW1l
bnQoQCJwcm9kdWN0RGlyIik7Ci0gICAgICAgIE5TQXJyYXkgKmR1bXBUb29sQXJndW1lbnRzID0g
Z2V0RHVtcFRvb2xBcmd1bWVudHMoKTsKLQotI2lmIFVTRV9TSU1fU0VSVklDRV9DT05URVhUCi0g
ICAgICAgIE5TRXJyb3IgKmVycm9yOwotICAgICAgICBTaW1TZXJ2aWNlQ29udGV4dCAqc2Vydmlj
ZUNvbnRleHQgPSBbU2ltU2VydmljZUNvbnRleHQgc2hhcmVkU2VydmljZUNvbnRleHRGb3JEZXZl
bG9wZXJEaXI6ZGV2ZWxvcGVyRGlyZWN0b3J5IGVycm9yOiZlcnJvcl07Ci0gICAgICAgIGlmICgh
c2VydmljZUNvbnRleHQpIHsKLSAgICAgICAgICAgIE5TTG9nKEAiRGV2aWNlIGNvbnRleHQgY291
bGRuJ3QgYmUgZm91bmQ6ICVAIiwgZXJyb3IpOwotICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxV
UkUpOwotICAgICAgICB9Ci0gICAgICAgIFNpbURldmljZVNldCAqZGV2aWNlU2V0ID0gW3NlcnZp
Y2VDb250ZXh0IGRlZmF1bHREZXZpY2VTZXRXaXRoRXJyb3I6bmlsXTsKLSAgICAgICAgaWYgKCFk
ZXZpY2VTZXQpIHsKLSAgICAgICAgICAgIE5TTG9nKEAiRGVmYXVsdCBkZXZpY2Ugc2V0IGNvdWxk
bid0IGJlIGZvdW5kOiAlQCIsIGVycm9yKTsKLSAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJF
KTsKLSAgICAgICAgfQotICAgICAgICBTaW1EZXZpY2UgKmRldmljZSA9IFtkZXZpY2VTZXQuZGV2
aWNlc0J5VURJRCBvYmplY3RGb3JLZXk6dWRpZF07Ci0jZWxzZQotICAgICAgICBTaW1EZXZpY2Ug
KmRldmljZSA9IFtTaW1EZXZpY2VTZXQuZGVmYXVsdFNldC5kZXZpY2VzQnlVRElEIG9iamVjdEZv
cktleTp1ZGlkXTsKLSNlbmRpZgotICAgICAgICBpZiAoIWRldmljZSkgewotICAgICAgICAgICAg
TlNMb2coQCJEZXZpY2UgJUAgY291bGRuJ3QgYmUgZm91bmQiLCB1ZGlkKTsKLSAgICAgICAgICAg
IGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJlbGF5Q29udHJvbGxl
ciA9IFtbTFRSZWxheUNvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoRGV2aWNlOmRldmljZSBwcm9k
dWN0RGlyOnByb2R1Y3REaXJlY3RvcnkgYXBwUGF0aDphcHBQYXRoIGRldmljZVVESUQ6dWRpZCBk
dW1wVG9vbEFyZ3VtZW50czpkdW1wVG9vbEFyZ3VtZW50c107Ci0gICAgICAgIFtyZWxheUNvbnRy
b2xsZXIgc3RhcnRdOwotCi0gICAgICAgIGF0ZXhpdChmaW5pc2gpOwotICAgICAgICBzaWduYWwo
U0lHSU5ULCByZWNlaXZlZFNpZ25hbCk7Ci0gICAgICAgIHNpZ25hbChTSUdURVJNLCByZWNlaXZl
ZFNpZ25hbCk7Ci0KLSAgICAgICAgW1tOU1J1bkxvb3AgbWFpblJ1bkxvb3BdIHJ1bl07Ci0gICAg
fQotICAgIHJldHVybiAwOwotfQoKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRU
ZXN0UmVsYXkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9M
YXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDIxMDU0OSkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVs
YXkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkobm9uZXhpc3RlbnQpCkBAIC0xLDIwMiArMCww
IEBACi0vLyAhJCpVVEY4KiQhCi17Ci0JYXJjaGl2ZVZlcnNpb24gPSAxOwotCWNsYXNzZXMgPSB7
Ci0JfTsKLQlvYmplY3RWZXJzaW9uID0gNDY7Ci0Jb2JqZWN0cyA9IHsKLQotLyogQmVnaW4gUEJY
QnVpbGRGaWxlIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjgxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1haW4u
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOEQzRUY3
MTk4ODFENDMwMDRGNkNDMiAvKiBtYWluLm0gKi87IH07Ci0JCTJFOEQzRjAyMTk4ODFGRDAwMDRG
NkNDMiAvKiBMVFBpcGVSZWxheS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkU4RDNGMDExOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lm0gKi87
IH07Ci0JCTJFOEQzRjA2MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU4RDNGMDUxOTg4
MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLm0gKi87IH07Ci0vKiBFbmQgUEJYQnVp
bGRGaWxlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYQ29weUZpbGVzQnVpbGRQaGFzZSBzZWN0
aW9uICovCi0JCTJFOEQzRUYyMTk4ODFENDMwMDRGNkNDMiAvKiBDb3B5RmlsZXMgKi8gPSB7Ci0J
CQlpc2EgPSBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0
NzQ4MzY0NzsKLQkJCWRzdFBhdGggPSAvdXNyL3NoYXJlL21hbi9tYW4xLzsKLQkJCWRzdFN1YmZv
bGRlclNwZWMgPSAwOwotCQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDE7Ci0JCX07Ci0vKiBFbmQgUEJYQ29weUZpbGVzQnVpbGRQaGFz
ZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwotCQky
RThEM0VGNDE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1
dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBMYXlvdXRUZXN0UmVsYXk7IHNvdXJj
ZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0JCTJFOEQzRUY3MTk4ODFENDMwMDRGNkND
MiAvKiBtYWluLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IG1haW4ubTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2Nv
bmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQueGNjb25maWc7IG5hbWUgPSBEZWJ1Z1JlbGVhc2UueGNjb25maWc7IHBhdGggPSBDb25maWd1
cmF0aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTJFOEQzRUZGMTk4ODFFMjUwMDRGNkNDMiAvKiBCYXNlLnhjY29uZmlnICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgbmFt
ZSA9IEJhc2UueGNjb25maWc7IHBhdGggPSBDb25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0YwMDE5ODgxRjI5MDA0RjZDQzIgLyog
TFRSZWxheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMVFJlbGF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTJFOEQzRjAxMTk4ODFGRDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBMVFBpcGVSZWxheS5tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkyRThEM0YwMzE5ODgxRkUyMDA0RjZDQzIgLyogTFRQaXBlUmVs
YXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTFRQaXBlUmVsYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMkU4RDNGMDQxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExUUmVsYXlDb250cm9sbGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOEQzRjA1MTk4ODI0MDYwMDRGNkNDMiAvKiBM
VFJlbGF5Q29udHJvbGxlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBM
VFJlbGF5Q29udHJvbGxlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDRTFGQkMx
NTFCMjkwRTc5MDAwMTM2RjUgLyogQ29yZVNpbXVsYXRvclNQSS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb3JlU2ltdWxhdG9yU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0vKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBC
WEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjExOTg4MUQ0MzAwNEY2
Q0MyIC8qIEZyYW1ld29ya3MgKi8gPSB7Ci0JCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFz
ZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCSk7
Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKLS8qIEVu
ZCBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWEdyb3Vw
IHNlY3Rpb24gKi8KLQkJMkU4RDNFRUIxOTg4MUQ0MzAwNEY2Q0MyID0gewotCQkJaXNhID0gUEJY
R3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQkyRThEM0VGRjE5ODgxRTI1MDA0RjZDQzIgLyog
QmFzZS54Y2NvbmZpZyAqLywKLQkJCQkyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVidWdS
ZWxlYXNlLnhjY29uZmlnICovLAotCQkJCTJFOEQzRUY2MTk4ODFENDMwMDRGNkNDMiAvKiBMYXlv
dXRUZXN0UmVsYXkgKi8sCi0JCQkJMkU4RDNFRjUxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2R1Y3Rz
ICovLAotCQkJKTsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCTJFOEQzRUY1
MTk4ODFENDMwMDRGNkNDMiAvKiBQcm9kdWN0cyAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwot
CQkJY2hpbGRyZW4gPSAoCi0JCQkJMkU4RDNFRjQxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRl
c3RSZWxheSAqLywKLQkJCSk7Ci0JCQluYW1lID0gUHJvZHVjdHM7Ci0JCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwotCQl9OwotCQkyRThEM0VGNjE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVz
dFJlbGF5ICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQky
RThEM0VGNzE5ODgxRDQzMDA0RjZDQzIgLyogbWFpbi5tICovLAotCQkJCUNFMUZCQzE1MUIyOTBF
NzkwMDAxMzZGNSAvKiBDb3JlU2ltdWxhdG9yU1BJLmggKi8sCi0JCQkJMkU4RDNGMDAxOTg4MUYy
OTAwNEY2Q0MyIC8qIExUUmVsYXkuaCAqLywKLQkJCQkyRThEM0YwMTE5ODgxRkQwMDA0RjZDQzIg
LyogTFRQaXBlUmVsYXkubSAqLywKLQkJCQkyRThEM0YwMzE5ODgxRkUyMDA0RjZDQzIgLyogTFRQ
aXBlUmVsYXkuaCAqLywKLQkJCQkyRThEM0YwNDE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNv
bnRyb2xsZXIuaCAqLywKLQkJCQkyRThEM0YwNTE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNv
bnRyb2xsZXIubSAqLywKLQkJCSk7Ci0JCQlwYXRoID0gTGF5b3V0VGVzdFJlbGF5OwotCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLS8qIEVuZCBQQlhHcm91cCBzZWN0aW9uICovCi0K
LS8qIEJlZ2luIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCi0JCTJFOEQzRUYzMTk4ODFENDMw
MDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8gPSB7Ci0JCQlpc2EgPSBQQlhOYXRpdmVUYXJn
ZXQ7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMkU4RDNFRkIxOTg4MUQ0MzAwNEY2Q0My
IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJMYXlvdXRU
ZXN0UmVsYXkiICovOwotCQkJYnVpbGRQaGFzZXMgPSAoCi0JCQkJMkU4RDNFRjAxOTg4MUQ0MzAw
NEY2Q0MyIC8qIFNvdXJjZXMgKi8sCi0JCQkJMkU4RDNFRjExOTg4MUQ0MzAwNEY2Q0MyIC8qIEZy
YW1ld29ya3MgKi8sCi0JCQkJMkU4RDNFRjIxOTg4MUQ0MzAwNEY2Q0MyIC8qIENvcHlGaWxlcyAq
LywKLQkJCSk7Ci0JCQlidWlsZFJ1bGVzID0gKAotCQkJKTsKLQkJCWRlcGVuZGVuY2llcyA9ICgK
LQkJCSk7Ci0JCQluYW1lID0gTGF5b3V0VGVzdFJlbGF5OwotCQkJcHJvZHVjdE5hbWUgPSBMYXlv
dXRUZXN0UmVsYXk7Ci0JCQlwcm9kdWN0UmVmZXJlbmNlID0gMkU4RDNFRjQxOTg4MUQ0MzAwNEY2
Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLzsKLQkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5w
cm9kdWN0LXR5cGUudG9vbCI7Ci0JCX07Ci0vKiBFbmQgUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24g
Ki8KLQotLyogQmVnaW4gUEJYUHJvamVjdCBzZWN0aW9uICovCi0JCTJFOEQzRUVDMTk4ODFENDMw
MDRGNkNDMiAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKLQkJCWlzYSA9IFBCWFByb2plY3Q7Ci0J
CQlhdHRyaWJ1dGVzID0gewotCQkJCUxhc3RVcGdyYWRlQ2hlY2sgPSAwNjAwOwotCQkJCU9SR0FO
SVpBVElPTk5BTUUgPSAiQXBwbGUsIEluYy4iOwotCQkJCVRhcmdldEF0dHJpYnV0ZXMgPSB7Ci0J
CQkJCTJFOEQzRUYzMTk4ODFENDMwMDRGNkNDMiA9IHsKLQkJCQkJCUNyZWF0ZWRPblRvb2xzVmVy
c2lvbiA9IDYuMDsKLQkJCQkJfTsKLQkJCQl9OwotCQkJfTsKLQkJCWJ1aWxkQ29uZmlndXJhdGlv
bkxpc3QgPSAyRThEM0VFRjE5ODgxRDQzMDA0RjZDQzIgLyogQnVpbGQgY29uZmlndXJhdGlvbiBs
aXN0IGZvciBQQlhQcm9qZWN0ICJMYXlvdXRUZXN0UmVsYXkiICovOwotCQkJY29tcGF0aWJpbGl0
eVZlcnNpb24gPSAiWGNvZGUgMy4yIjsKLQkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsK
LQkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAwOwotCQkJa25vd25SZWdpb25zID0gKAotCQkJ
CWVuLAotCQkJKTsKLQkJCW1haW5Hcm91cCA9IDJFOEQzRUVCMTk4ODFENDMwMDRGNkNDMjsKLQkJ
CXByb2R1Y3RSZWZHcm91cCA9IDJFOEQzRUY1MTk4ODFENDMwMDRGNkNDMiAvKiBQcm9kdWN0cyAq
LzsKLQkJCXByb2plY3REaXJQYXRoID0gIiI7Ci0JCQlwcm9qZWN0Um9vdCA9ICIiOwotCQkJdGFy
Z2V0cyA9ICgKLQkJCQkyRThEM0VGMzE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5
ICovLAotCQkJKTsKLQkJfTsKLS8qIEVuZCBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KLQotLyogQmVn
aW4gUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCQkyRThEM0VGMDE5ODgxRDQzMDA0
RjZDQzIgLyogU291cmNlcyAqLyA9IHsKLQkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwot
CQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJCTJFOEQz
RjA2MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5tIGluIFNvdXJjZXMgKi8s
Ci0JCQkJMkU4RDNFRjgxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSBpbiBTb3VyY2VzICovLAot
CQkJCTJFOEQzRjAyMTk4ODFGRDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5tIGluIFNvdXJjZXMg
Ki8sCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0J
CX07Ci0vKiBFbmQgUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBY
Q0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCi0JCTJFOEQzRUY5MTk4ODFENDMwMDRGNkND
MiAvKiBEZWJ1ZyAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJYmFz
ZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVi
dWdSZWxlYXNlLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCX07Ci0JCQlu
YW1lID0gRGVidWc7Ci0JCX07Ci0JCTJFOEQzRUZBMTk4ODFENDMwMDRGNkNDMiAvKiBSZWxlYXNl
ICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJh
dGlvblJlZmVyZW5jZSA9IDJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2Uu
eGNjb25maWcgKi87Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJfTsKLQkJCW5hbWUgPSBSZWxl
YXNlOwotCQl9OwotCQkyRThEM0VGQzE5ODgxRDQzMDA0RjZDQzIgLyogRGVidWcgKi8gPSB7Ci0J
CQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJl
bmNlID0gMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAq
LzsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJUFJPRFVDVF9OQU1FID0gIiQoVEFSR0VUX05B
TUUpIjsKLQkJCX07Ci0JCQluYW1lID0gRGVidWc7Ci0JCX07Ci0JCTJFOEQzRUZEMTk4ODFENDMw
MDRGNkNDMiAvKiBSZWxlYXNlICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247
Ci0JCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDJFOEQzRUZFMTk4ODFFMTMwMDRGNkND
MiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi87Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJ
CVBST0RVQ1RfTkFNRSA9ICIkKFRBUkdFVF9OQU1FKSI7Ci0JCQl9OwotCQkJbmFtZSA9IFJlbGVh
c2U7Ci0JCX07Ci0vKiBFbmQgWENCdWlsZENvbmZpZ3VyYXRpb24gc2VjdGlvbiAqLwotCi0vKiBC
ZWdpbiBYQ0NvbmZpZ3VyYXRpb25MaXN0IHNlY3Rpb24gKi8KLQkJMkU4RDNFRUYxOTg4MUQ0MzAw
NEY2Q0MyIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiTGF5b3V0
VGVzdFJlbGF5IiAqLyA9IHsKLQkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7Ci0JCQlidWls
ZENvbmZpZ3VyYXRpb25zID0gKAotCQkJCTJFOEQzRUY5MTk4ODFENDMwMDRGNkNDMiAvKiBEZWJ1
ZyAqLywKLQkJCQkyRThEM0VGQTE5ODgxRDQzMDA0RjZDQzIgLyogUmVsZWFzZSAqLywKLQkJCSk7
Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7Ci0JCQlkZWZhdWx0Q29uZmln
dXJhdGlvbk5hbWUgPSBSZWxlYXNlOwotCQl9OwotCQkyRThEM0VGQjE5ODgxRDQzMDA0RjZDQzIg
LyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIkxheW91dFRl
c3RSZWxheSIgKi8gPSB7Ci0JCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVpbGRD
b25maWd1cmF0aW9ucyA9ICgKLQkJCQkyRThEM0VGQzE5ODgxRDQzMDA0RjZDQzIgLyogRGVidWcg
Ki8sCi0JCQkJMkU4RDNFRkQxOTg4MUQ0MzAwNEY2Q0MyIC8qIFJlbGVhc2UgKi8sCi0JCQkpOwot
CQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwotCQkJZGVmYXVsdENvbmZpZ3Vy
YXRpb25OYW1lID0gUmVsZWFzZTsKLQkJfTsKLS8qIEVuZCBYQ0NvbmZpZ3VyYXRpb25MaXN0IHNl
Y3Rpb24gKi8KLQl9OwotCXJvb3RPYmplY3QgPSAyRThEM0VFQzE5ODgxRDQzMDA0RjZDQzIgLyog
UHJvamVjdCBvYmplY3QgKi87Ci19CgpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91
dFRlc3RSZWxheS54Y29kZXByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5
L0xheW91dFRlc3RSZWxheS54Y29kZXByb2oJKHJldmlzaW9uIDIxMDU0OSkKKysrIFRvb2xzL0xh
eW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVwcm9qCShub25leGlzdGVudCkKClBy
b3BlcnR5IGNoYW5nZXMgb246IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXku
eGNvZGVwcm9qCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmlnbm9yZQojIyAtMSwyICswLDAgIyMK
LXByb2plY3QueGN3b3Jrc3BhY2UKLXhjdXNlcmRhdGEKCkluZGV4OiBUb29scy9MYXlvdXRUZXN0
UmVsYXkvTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L01ha2Vm
aWxlCShyZXZpc2lvbiAyMTA1NDkpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTWFrZWZpbGUJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw2ICswLDAgQEAKLVNDUklQVFNfUEFUSCA9IC4uL1NjcmlwdHMK
LQotT1ZFUlJJREVfQVJDSFMgPSBkZWZhdWx0Ci1PVkVSUklERV9TREtST09UID0gZGVmYXVsdAot
Ci1pbmNsdWRlIC4uLy4uL01ha2VmaWxlLnNoYXJlZAoKSW5kZXg6IFRvb2xzL01ha2VmaWxlCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL01ha2VmaWxlCShyZXZpc2lvbiAyMTA1NDkpCisrKyBUb29scy9N
YWtlZmlsZQkod29ya2luZyBjb3B5KQpAQCAtNyw5ICs3LDYgQEAKIAlpZm5lcSAoLCQoZmluZHN0
cmluZyBpcGhvbmUsJChTREtST09UKSkpCiAJCU1PRFVMRVMgKz0gTW9iaWxlTWluaUJyb3dzZXIK
IAllbmRpZgotCWlmZXEgKCwkKERPX05PVF9CVUlMRF9MQVlPVVRfVEVTVF9SRUxBWSkpCi0JCU1P
RFVMRVMgKz0gTGF5b3V0VGVzdFJlbGF5Ci0JZW5kaWYKIGVuZGlmCiAKIGFsbDoKCkluZGV4OiBU
b29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2J1
aWxkLXdlYmtpdAkocmV2aXNpb24gMjEwNTQ5KQorKysgVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJr
aXQJKHdvcmtpbmcgY29weSkKQEAgLTIwMCwxMCArMjAwLDYgQEAKICAgICAgICAgcHVzaCBAY29w
eUxpYnJhcmllc0FyZ3MsIHByb2R1Y3REaXIoKTsKICAgICAgICAgcHJpbnQoam9pbigiICIsIEBj
b3B5TGlicmFyaWVzQXJncykgLiAiXG4iKTsKICAgICAgICAgKHN5c3RlbShAY29weUxpYnJhcmll
c0FyZ3MpID09IDApIG9yIGRpZTsKLQotICAgICAgICBpZiAod2lsbFVzZUlPU1NpbXVsYXRvclNE
SygpKSB7Ci0gICAgICAgICAgICAoc3lzdGVtKCJwZXJsIiwgIlRvb2xzL1NjcmlwdHMvYnVpbGQt
bGF5b3V0dGVzdHJlbGF5IiwgYXJndW1lbnRzRm9yQ29uZmlndXJhdGlvbigpKSA9PSAwKSBvciBk
aWU7Ci0gICAgICAgIH0KICAgICB9CiAKICAgICAjIEJ1aWxkIFRvb2xzIG5lZWRlZCBmb3IgQXBw
bGUgcG9ydHMKCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQkocmV2aXNpb24g
MjEwNTQ5KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMSw2ICsxMzEsNyBAQAogICAgICAgICBzZWxmLl93ZWJfcGxhdGZvcm1fdGVz
dF9zZXJ2ZXIgPSBOb25lCiAgICAgICAgIHNlbGYuX2ltYWdlX2RpZmZlciA9IE5vbmUKICAgICAg
ICAgc2VsZi5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBzZXJ2ZXJfcHJvY2Vzcy5TZXJ2
ZXJQcm9jZXNzICAjIG92ZXJyaWRhYmxlIGZvciB0ZXN0aW5nCisgICAgICAgIHNlbGYuX3Rlc3Rf
cnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBzZXJ2ZXJfcHJvY2Vzcy5TZXJ2ZXJQcm9jZXNz
CiAKICAgICAgICAgaWYgbm90IGhhc2F0dHIob3B0aW9ucywgJ2NvbmZpZ3VyYXRpb24nKSBvciBu
b3Qgb3B0aW9ucy5jb25maWd1cmF0aW9uOgogICAgICAgICAgICAgc2VsZi5zZXRfb3B0aW9uX2Rl
ZmF1bHQoJ2NvbmZpZ3VyYXRpb24nLCBzZWxmLmRlZmF1bHRfY29uZmlndXJhdGlvbigpKQoKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW4ucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weQkocmV2aXNpb24gMjEwNTQ5KQor
KysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weQkod29ya2luZyBjb3B5KQpA
QCAtMTc0LDMgKzE3NCwxMSBAQAogICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3I6CiAgICAgICAg
ICAgICBfbG9nLndhcm4oInhjcnVuIGZhaWxlZDsgZmFsbGluZyBiYWNrIHRvICclcycuIiAlIGZh
bGxiYWNrKQogICAgICAgICAgICAgcmV0dXJuIGZhbGxiYWNrCisKKyAgICBkZWYgZXh0cmFjdF9i
dW5kbGVfSUQoc2VsZiwgYXBwKToKKyAgICAgICAgcGxpc3RfcGF0aCA9IGFwcCArICcvSW5mby5w
bGlzdCcKKyAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHBsaXN0X3BhdGgp
OgorICAgICAgICAgICAgcGxpc3RfcGF0aCA9IHBsaXN0X3BhdGggPSBhcHAgKyAnL0NvbnRlbnRz
L0luZm8ucGxpc3QnCisgICAgICAgIGlmIG5vdCBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhwbGlz
dF9wYXRoKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBzZWxmLl9l
eGVjdXRpdmUucnVuX2NvbW1hbmQoWycvdXNyL2xpYmV4ZWMvUGxpc3RCdWRkeScsICctYycsICdQ
cmludCBDRkJ1bmRsZUlkZW50aWZpZXInLCBwbGlzdF9wYXRoXSkucnN0cmlwKCkKCkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkJKHJldmlzaW9uIDIxMDU0OSkKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTEz
OCw3ICsxMzgsNyBAQAogICAgICAgICBzZWxmLl9kcml2ZXJfdXNlcl9kaXJlY3Rvcnlfc3VmZml4
ID0gTm9uZQogICAgICAgICBzZWxmLl9kcml2ZXJfdXNlcl9jYWNoZV9kaXJlY3RvcnkgPSBOb25l
CiAKLSAgICAgICAgIyBXZWJLaXRUZXN0UnVubmVyL0xheW91dFRlc3RSZWxheSBjYW4gcmVwb3J0
IGJhY2sgc3VicHJvY2VzcyBjcmFzaGVzIGJ5IHByaW50aW5nCisgICAgICAgICMgV2ViS2l0VGVz
dFJ1bm5lciBjYW4gcmVwb3J0IGJhY2sgc3VicHJvY2VzcyBjcmFzaGVzIGJ5IHByaW50aW5nCiAg
ICAgICAgICMgIiNDUkFTSEVEIC0gUFJPQ0VTU05BTUUiLiAgU2luY2UgdGhvc2UgY2FuIGhhcHBl
biBhdCBhbnkgdGltZSBhbmQgU2VydmVyUHJvY2VzcwogICAgICAgICAjIHdvbid0IGJlIGF3YXJl
IG9mIHRoZW0gKHNpbmNlIHRoZSBhY3R1YWwgdG9vbCBkaWRuJ3QgY3Jhc2gsIGp1c3QgYSBzdWJw
cm9jZXNzKQogICAgICAgICAjIHdlIHJlY29yZCB0aGUgY3Jhc2hlZCBzdWJwcm9jZXNzIG5hbWUg
aGVyZS4KQEAgLTMyNyw3ICszMjcsNiBAQAogCiAgICAgZGVmIF9zZXR1cF9lbnZpcm9uX2Zvcl9k
cml2ZXIoc2VsZiwgZW52aXJvbm1lbnQpOgogICAgICAgICBidWlsZF9yb290X3BhdGggPSBzdHIo
c2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgpKQotICAgICAgICAjIEZJWE1FOiBEWUxEXyogdmFyaWFi
bGVzIHNob3VsZCBiZSBNYWMtb25seS4gRXZlbiBpT1MgU2ltdWxhdG9yIGRvZXNuJ3QgbmVlZCB0
aGVtLCBhcyBMYXlvdXRUZXN0UmVsYXkgaXMgYSBob3N0IGJpbmFyeS4KICAgICAgICAgc2VsZi5f
YXBwZW5kX2Vudmlyb25tZW50X3ZhcmlhYmxlX3BhdGgoZW52aXJvbm1lbnQsICdEWUxEX0xJQlJB
UllfUEFUSCcsIGJ1aWxkX3Jvb3RfcGF0aCkKICAgICAgICAgc2VsZi5fYXBwZW5kX2Vudmlyb25t
ZW50X3ZhcmlhYmxlX3BhdGgoZW52aXJvbm1lbnQsICdfX1hQQ19EWUxEX0xJQlJBUllfUEFUSCcs
IGJ1aWxkX3Jvb3RfcGF0aCkKICAgICAgICAgc2VsZi5fYXBwZW5kX2Vudmlyb25tZW50X3Zhcmlh
YmxlX3BhdGgoZW52aXJvbm1lbnQsICdEWUxEX0ZSQU1FV09SS19QQVRIJywgYnVpbGRfcm9vdF9w
YXRoKQpAQCAtMzY5LDcgKzM2OCw3IEBACiAgICAgICAgIGVudmlyb25tZW50ID0gc2VsZi5fc2V0
dXBfZW52aXJvbl9mb3JfdGVzdCgpCiAgICAgICAgIHNlbGYuX2NyYXNoZWRfcHJvY2Vzc19uYW1l
ID0gTm9uZQogICAgICAgICBzZWxmLl9jcmFzaGVkX3BpZCA9IE5vbmUKLSAgICAgICAgc2VsZi5f
c2VydmVyX3Byb2Nlc3MgPSBzZWxmLl9wb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3Rvcihz
ZWxmLl9wb3J0LCBzZWxmLl9zZXJ2ZXJfbmFtZSwgc2VsZi5jbWRfbGluZShwaXhlbF90ZXN0cywg
cGVyX3Rlc3RfYXJncyksIGVudmlyb25tZW50KQorICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vz
cyA9IHNlbGYuX3BvcnQuX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3Ioc2VsZi5fcG9y
dCwgc2VsZi5fc2VydmVyX25hbWUsIHNlbGYuY21kX2xpbmUocGl4ZWxfdGVzdHMsIHBlcl90ZXN0
X2FyZ3MpLCBlbnZpcm9ubWVudCkKICAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3Muc3RhcnQo
KQogCiAgICAgZGVmIF9ydW5fcG9zdF9zdGFydF90YXNrcyhzZWxmKToKQEAgLTYxMSwyMSArNjEw
LDE2IEBACiAgICAgICAgIHJldHVybiBUcnVlCiAKIAotIyBGSVhNRTogdGhpcyBzaG91bGQgYmUg
YWJzdHJhY3RlZCBvdXQgdmlhIHRoZSBQb3J0IHN1YmNsYXNzIHNvbWVob3cuCiBjbGFzcyBJT1NT
aW11bGF0b3JEcml2ZXIoRHJpdmVyKToKICAgICBkZWYgY21kX2xpbmUoc2VsZiwgcGl4ZWxfdGVz
dHMsIHBlcl90ZXN0X2FyZ3MpOgogICAgICAgICBjbWQgPSBzdXBlcihJT1NTaW11bGF0b3JEcml2
ZXIsIHNlbGYpLmNtZF9saW5lKHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKQotICAgICAgICBy
ZWxheV90b29sID0gc2VsZi5fcG9ydC5yZWxheV9wYXRoCiAgICAgICAgIGR1bXBfdG9vbCA9IGNt
ZFswXQogICAgICAgICBkdW1wX3Rvb2xfYXJncyA9IGNtZFsxOl0KLSAgICAgICAgcHJvZHVjdF9k
aXIgPSBzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCkKICAgICAgICAgcmVsYXlfYXJncyA9IFsKLSAg
ICAgICAgICAgICctZGV2ZWxvcGVyRGlyJywgc2VsZi5fcG9ydC5kZXZlbG9wZXJfZGlyLAotICAg
ICAgICAgICAgJy11ZGlkJywgc2VsZi5fcG9ydC5kZXZpY2VfaWRfZm9yX3dvcmtlcl9udW1iZXIo
c2VsZi5fd29ya2VyX251bWJlciksCi0gICAgICAgICAgICAnLXByb2R1Y3REaXInLCBwcm9kdWN0
X2RpciwKLSAgICAgICAgICAgICctYXBwJywgZHVtcF90b29sLAorICAgICAgICAgICAgc2VsZi5f
cG9ydC5kZXZpY2VfaWRfZm9yX3dvcmtlcl9udW1iZXIoc2VsZi5fd29ya2VyX251bWJlciksCisg
ICAgICAgICAgICBkdW1wX3Rvb2wsCiAgICAgICAgIF0KLSAgICAgICAgcmV0dXJuIFtyZWxheV90
b29sXSArIHJlbGF5X2FyZ3MgKyBbJy0tJ10gKyBkdW1wX3Rvb2xfYXJncworICAgICAgICByZXR1
cm4gcmVsYXlfYXJncyArIFsnLS0nXSArIGR1bXBfdG9vbF9hcmdzCiAKICAgICBkZWYgX3NldHVw
X2Vudmlyb25fZm9yX2RyaXZlcihzZWxmLCBlbnZpcm9ubWVudCk6CiAgICAgICAgIGVudmlyb25t
ZW50WydERVZFTE9QRVJfRElSJ10gPSBzZWxmLl9wb3J0LmRldmVsb3Blcl9kaXIKCkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHkJKHJldmlz
aW9uIDIxMDU0OSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRl
c3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTI2NCw3ICsyNjQsNyBAQAogCiAgICAgZGVmIHRlc3Rf
c3RvcF9jbGVhbnNfdXBfcHJvcGVybHkoc2VsZik6CiAgICAgICAgIHBvcnQgPSBUZXN0V2ViS2l0
UG9ydCgpCi0gICAgICAgIHBvcnQuX3NlcnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gTW9ja1Nl
cnZlclByb2Nlc3MKKyAgICAgICAgcG9ydC5fdGVzdF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3Rv
ciA9IE1vY2tTZXJ2ZXJQcm9jZXNzCiAgICAgICAgIGRyaXZlciA9IERyaXZlcihwb3J0LCAwLCBw
aXhlbF90ZXN0cz1UcnVlKQogICAgICAgICBkcml2ZXIuc3RhcnQoVHJ1ZSwgW10pCiAgICAgICAg
IGxhc3RfdG1wZGlyID0gcG9ydC5fZmlsZXN5c3RlbS5sYXN0X3RtcGRpcgpAQCAtMjc0LDcgKzI3
NCw3IEBACiAKICAgICBkZWYgdGVzdF90d29fc3RhcnRzX2NsZWFuc191cF9wcm9wZXJseShzZWxm
KToKICAgICAgICAgcG9ydCA9IFRlc3RXZWJLaXRQb3J0KCkKLSAgICAgICAgcG9ydC5fc2VydmVy
X3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJvY2VzcworICAgICAgICBwb3J0Ll90
ZXN0X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gTW9ja1NlcnZlclByb2Nlc3MKICAgICAg
ICAgZHJpdmVyID0gRHJpdmVyKHBvcnQsIDAsIHBpeGVsX3Rlc3RzPVRydWUpCiAgICAgICAgIGRy
aXZlci5zdGFydChUcnVlLCBbXSkKICAgICAgICAgbGFzdF90bXBkaXIgPSBwb3J0Ll9maWxlc3lz
dGVtLmxhc3RfdG1wZGlyCkBAIC0yODMsNyArMjgzLDcgQEAKIAogICAgIGRlZiB0ZXN0X3N0YXJ0
X2FjdHVhbGx5X3N0YXJ0cyhzZWxmKToKICAgICAgICAgcG9ydCA9IFRlc3RXZWJLaXRQb3J0KCkK
LSAgICAgICAgcG9ydC5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJv
Y2VzcworICAgICAgICBwb3J0Ll90ZXN0X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gTW9j
a1NlcnZlclByb2Nlc3MKICAgICAgICAgZHJpdmVyID0gRHJpdmVyKHBvcnQsIDAsIHBpeGVsX3Rl
c3RzPVRydWUpCiAgICAgICAgIGRyaXZlci5zdGFydChUcnVlLCBbXSkKICAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKGRyaXZlci5fc2VydmVyX3Byb2Nlc3Muc3RhcnRlZCkKCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9pb3MucHkJKHJldmlzaW9uIDIxMDU0OSkKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9pb3MucHkJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIGZy
b20gd2Via2l0cHkucG9ydCBpbXBvcnQgY29uZmlnIGFzIHBvcnRfY29uZmlnCiBmcm9tIHdlYmtp
dHB5LnBvcnQgaW1wb3J0IGRyaXZlciwgaW1hZ2VfZGlmZgogZnJvbSB3ZWJraXRweS5wb3J0LmRh
cndpbiBpbXBvcnQgRGFyd2luUG9ydAorZnJvbSB3ZWJraXRweS5wb3J0LnNpbXVsYXRvcl9wcm9j
ZXNzIGltcG9ydCBTaW11bGF0b3JQcm9jZXNzCiBmcm9tIHdlYmtpdHB5Lnhjb2RlLnNpbXVsYXRv
ciBpbXBvcnQgU2ltdWxhdG9yLCBSdW50aW1lLCBEZXZpY2VUeXBlCiBmcm9tIHdlYmtpdHB5LmNv
bW1vbi5zeXN0ZW0uY3Jhc2hsb2dzIGltcG9ydCBDcmFzaExvZ3MKIApAQCAtNzgsNyArNzksNiBA
QAogICAgIFNESyA9ICdpcGhvbmVzaW11bGF0b3InCiAKICAgICBTSU1VTEFUT1JfQlVORExFX0lE
ID0gJ2NvbS5hcHBsZS5pcGhvbmVzaW11bGF0b3InCi0gICAgcmVsYXlfbmFtZSA9ICdMYXlvdXRU
ZXN0UmVsYXknCiAgICAgU0lNVUxBVE9SX0RJUkVDVE9SWSA9ICIvdG1wL1dlYktpdFRlc3RpbmdT
aW11bGF0b3JzLyIKICAgICBMU1JFR0lTVEVSX1BBVEggPSAiL1N5c3RlbS9MaWJyYXJ5L0ZyYW1l
d29ya3MvQ29yZVNlcnZpY2VzLmZyYW1ld29yay9GcmFtZXdvcmtzL0xhdW5jaFNlcnZpY2VzLmZy
YW1ld29yay9WZXJzaW9ucy9DdXJyZW50L1N1cHBvcnQvbHNyZWdpc3RlciIKICAgICBQUk9DRVNT
X0NPVU5UX0VTVElNQVRFX1BFUl9TSU1VTEFUT1JfSU5TVEFOQ0UgPSAxMDAKQEAgLTk3LDYgKzk3
LDcgQEAKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0X25hbWUsICoqa3dhcmdz
KToKICAgICAgICAgRGFyd2luUG9ydC5fX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0X25hbWUsICoq
a3dhcmdzKQorICAgICAgICBzZWxmLl90ZXN0X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0g
U2ltdWxhdG9yUHJvY2VzcwogCiAgICAgICAgIG9wdGlvbmFsX2RldmljZV9jbGFzcyA9IHNlbGYu
Z2V0X29wdGlvbignZGV2aWNlX2NsYXNzJykKICAgICAgICAgc2VsZi5fcHJpbnRpbmdfY21kX2xp
bmUgPSBGYWxzZQpAQCAtMTQ4LDE3ICsxNDksNyBAQAogICAgICAgICAgICAgZGV2aWNlX3R5cGUg
PSBEZXZpY2VUeXBlLmZyb21fbmFtZShkZXZpY2VfbmFtZSkKICAgICAgICAgcmV0dXJuIGRldmlj
ZV90eXBlCiAKLSAgICBAcHJvcGVydHkKICAgICBAbWVtb2l6ZWQKLSAgICBkZWYgcmVsYXlfcGF0
aChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fcm9vdF93YXNfc2V0OgotICAgICAgICAgICAgcGF0
aCA9IHNlbGYuX2ZpbGVzeXN0ZW0uYWJzcGF0aChzZWxmLmdldF9vcHRpb24oJ3Jvb3QnKSkKLSAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgIG1hY19jb25maWcgPSBwb3J0X2NvbmZpZy5Db25maWco
c2VsZi5fZXhlY3V0aXZlLCBzZWxmLl9maWxlc3lzdGVtLCAnbWFjJykKLSAgICAgICAgICAgIHBh
dGggPSBtYWNfY29uZmlnLmJ1aWxkX2RpcmVjdG9yeShzZWxmLmdldF9vcHRpb24oJ2NvbmZpZ3Vy
YXRpb24nKSkKLSAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihwYXRoLCBzZWxm
LnJlbGF5X25hbWUpCi0KLSAgICBAbWVtb2l6ZWQKICAgICBkZWYgY2hpbGRfcHJvY2Vzc2VzKHNl
bGYpOgogICAgICAgICByZXR1cm4gaW50KHNlbGYuZ2V0X29wdGlvbignY2hpbGRfcHJvY2Vzc2Vz
JykpCiAKQEAgLTE4MiwxOSArMTczLDYgQEAKIAogICAgICAgICByZXR1cm4gbWluKG1heGltdW1f
c2ltdWxhdG9yX2NvdW50X29uX3RoaXNfc3lzdGVtLCBiZXN0X2NoaWxkX3Byb2Nlc3NfY291bnRf
Zm9yX2NwdSkKIAotICAgIGRlZiBfY2hlY2tfcmVsYXkoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBz
ZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhzZWxmLnJlbGF5X3BhdGgpOgotICAgICAgICAgICAgX2xv
Zy5lcnJvcigiJXMgd2FzIG5vdCBmb3VuZCBhdCAlcyIgJSAoc2VsZi5yZWxheV9uYW1lLCBzZWxm
LnJlbGF5X3BhdGgpKQotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIHJldHVybiBU
cnVlCi0KLSAgICBkZWYgX2NoZWNrX3BvcnRfYnVpbGQoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBz
ZWxmLl9yb290X3dhc19zZXQgYW5kIHNlbGYuZ2V0X29wdGlvbignYnVpbGQnKSBhbmQgbm90IHNl
bGYuX2J1aWxkX3JlbGF5KCk6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgaWYg
bm90IHNlbGYuX2NoZWNrX3JlbGF5KCk6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAg
ICAgcmV0dXJuIFRydWUKLQogICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQs
IHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0aW1lX2ZuPXRpbWUudGltZSwgc2xlZXBfZm49
dGltZS5zbGVlcCwgd2FpdF9mb3JfbG9nPVRydWUpOgogICAgICAgICB0aW1lX2ZuID0gdGltZV9m
biBvciB0aW1lLnRpbWUKICAgICAgICAgc2xlZXBfZm4gPSBzbGVlcF9mbiBvciB0aW1lLnNsZWVw
CkBAIC0yMTUsNyArMTkzLDcgQEAKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXRfY3Jhc2hf
bG9nKGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9waWRbMF0sIGNyYXNoZWRfc3VicHJvY2Vz
c19uYW1lX2FuZF9waWRbMV0sIHN0ZG91dCwKICAgICAgICAgICAgICAgICAnXG4nLmpvaW4oc3Rk
ZXJyX2xpbmVzKSwgbmV3ZXJfdGhhbiwgdGltZV9mbiwgc2xlZXBfZm4sIHdhaXRfZm9yX2xvZykK
IAotICAgICAgICAjIExheW91dFRlc3RSZWxheSBjcmFzaGVkCisgICAgICAgICMgQXBwIGNyYXNo
ZWQKICAgICAgICAgX2xvZy5kZWJ1ZygnbG9va2luZyBmb3IgY3Jhc2ggbG9nIGZvciAlczolcycg
JSAobmFtZSwgc3RyKHBpZCkpKQogICAgICAgICBjcmFzaF9sb2cgPSAnJwogICAgICAgICBjcmFz
aF9sb2dzID0gQ3Jhc2hMb2dzKHNlbGYuaG9zdCkKQEAgLTIzMywyNSArMjExLDYgQEAKICAgICAg
ICAgICAgIHJldHVybiBzdGRlcnIsIE5vbmUKICAgICAgICAgcmV0dXJuIHN0ZGVyciwgY3Jhc2hf
bG9nCiAKLSAgICBkZWYgX2J1aWxkX3JlbGF5KHNlbGYpOgotICAgICAgICBlbnZpcm9ubWVudCA9
IHNlbGYuaG9zdC5jb3B5X2N1cnJlbnRfZW52aXJvbm1lbnQoKQotICAgICAgICBlbnZpcm9ubWVu
dC5kaXNhYmxlX2djY19zbWFydHF1b3RlcygpCi0gICAgICAgIGVudiA9IGVudmlyb25tZW50LnRv
X2RpY3Rpb25hcnkoKQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgRklYTUU6IFdlIHNo
b3VsZCBiZSBwYXNzaW5nIF9hcmd1bWVudHNfZm9yX2NvbmZpZ3VyYXRpb24oKSwgd2hpY2ggcmVz
cGVjdHMgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgcG9ydCwKLSAgICAgICAgICAgICMgaW5zdGVh
ZCBvZiBoYXJkY29kaW5nIC0taW9zLXNpbXVsYXRvci4KLSAgICAgICAgICAgIHNlbGYuX3J1bl9z
Y3JpcHQoImJ1aWxkLWxheW91dHRlc3RyZWxheSIsIGFyZ3M9WyItLWlvcy1zaW11bGF0b3IiXSwg
ZW52PWVudikKLSAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yLCBlOgotICAgICAgICAgICAgX2xv
Zy5lcnJvcihlLm1lc3NhZ2Vfd2l0aF9vdXRwdXQob3V0cHV0X2xpbWl0PU5vbmUpKQotICAgICAg
ICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYgX2J1aWxk
X2RyaXZlcihzZWxmKToKLSAgICAgICAgYnVpbHRfdG9vbCA9IHN1cGVyKElPU1NpbXVsYXRvclBv
cnQsIHNlbGYpLl9idWlsZF9kcml2ZXIoKQotICAgICAgICBidWlsdF9yZWxheSA9IHNlbGYuX2J1
aWxkX3JlbGF5KCkKLSAgICAgICAgcmV0dXJuIGJ1aWx0X3Rvb2wgYW5kIGJ1aWx0X3JlbGF5Ci0K
ICAgICBkZWYgX2J1aWxkX2RyaXZlcl9mbGFncyhzZWxmKToKICAgICAgICAgYXJjaHMgPSBbJ0FS
Q0hTPWkzODYnXSBpZiBzZWxmLmFyY2hpdGVjdHVyZSgpID09ICd4ODYnIGVsc2UgW10KICAgICAg
ICAgc2RrID0gWyctLXNkaycsICdpcGhvbmVzaW11bGF0b3InXQpAQCAtMjgwLDkgKzIzOSw5IEBA
CiAKICAgICBkZWYgX2NyZWF0ZV9zaW11bGF0b3JzKHNlbGYpOgogICAgICAgICBpZiAoc2VsZi5k
ZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcygpIDwgc2VsZi5jaGlsZF9wcm9jZXNzZXMoKSk6Ci0gICAg
ICAgICAgICAgICAgX2xvZy53YXJuKCJZb3UgaGF2ZSBzcGVjaWZpZWQgdmVyeSBoaWdoIHZhbHVl
KHswfSkgZm9yIC0tY2hpbGQtcHJvY2Vzc2VzIi5mb3JtYXQoc2VsZi5jaGlsZF9wcm9jZXNzZXMo
KSkpCi0gICAgICAgICAgICAgICAgX2xvZy53YXJuKCJtYXhpbXVtIGNoaWxkLXByb2Nlc3NlcyB3
aGljaCBjYW4gYmUgc3VwcG9ydGVkIG9uIHRoaXMgc3lzdGVtIGFyZTogezB9Ii5mb3JtYXQoc2Vs
Zi5kZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcygpKSkKLSAgICAgICAgICAgICAgICBfbG9nLndhcm4o
IlRoaXMgaXMgdmVyeSBsaWtlbHkgdG8gZmFpbC4iKQorICAgICAgICAgICAgX2xvZy53YXJuKCJZ
b3UgaGF2ZSBzcGVjaWZpZWQgdmVyeSBoaWdoIHZhbHVlKHswfSkgZm9yIC0tY2hpbGQtcHJvY2Vz
c2VzIi5mb3JtYXQoc2VsZi5jaGlsZF9wcm9jZXNzZXMoKSkpCisgICAgICAgICAgICBfbG9nLndh
cm4oIm1heGltdW0gY2hpbGQtcHJvY2Vzc2VzIHdoaWNoIGNhbiBiZSBzdXBwb3J0ZWQgb24gdGhp
cyBzeXN0ZW0gYXJlOiB7MH0iLmZvcm1hdChzZWxmLmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKCkp
KQorICAgICAgICAgICAgX2xvZy53YXJuKCJUaGlzIGlzIHZlcnkgbGlrZWx5IHRvIGZhaWwuIikK
IAogICAgICAgICBpZiBzZWxmLl91c2luZ19kZWRpY2F0ZWRfc2ltdWxhdG9ycygpOgogICAgICAg
ICAgICAgc2VsZi5fY3JlYXRlU2ltdWxhdG9yQXBwcygpCgpJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2lvc191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyMTA1NDkpCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBA
IC03MCw3ICs3MCw3IEBACiAgICAgICAgIHBvcnQuX3J1bl9zY3JpcHQgPSBydW5fc2NyaXB0CiAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5hcmNoaXRlY3R1cmUoKSwgJ3g4NicpCiAgICAg
ICAgIHBvcnQuX2J1aWxkX2RyaXZlcigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5h
cmdzLCBbJy0taW9zLXNpbXVsYXRvciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYu
YXJncywgWydBUkNIUz1pMzg2JywgJy0tc2RrJywgJ2lwaG9uZXNpbXVsYXRvciddKQogCiAgICAg
ZGVmIHRlc3RfNjRiaXQoc2VsZik6CiAgICAgICAgICMgQXBwbGUgTWFjIHBvcnQgaXMgNjQtYml0
IGJ5IGRlZmF1bHQKQEAgLTgyLDcgKzgyLDcgQEAKIAogICAgICAgICBwb3J0Ll9ydW5fc2NyaXB0
ID0gcnVuX3NjcmlwdAogICAgICAgICBwb3J0Ll9idWlsZF9kcml2ZXIoKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHNlbGYuYXJncywgWyctLWlvcy1zaW11bGF0b3InXSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChzZWxmLmFyZ3MsIFsnLS1zZGsnLCAnaXBob25lc2ltdWxhdG9yJ10pCiAK
ICAgICBkZWYgdGVzdF9zZGtfbmFtZShzZWxmKToKICAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9w
b3J0KCkKCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3Mu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9j
ZXNzLnB5CShyZXZpc2lvbiAyMTA1NDkpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
c2VydmVyX3Byb2Nlc3MucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0IEBACisjIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKQEAgLTQ3LDEyICs0OCwxMyBAQAogICAgIGltcG9ydCBzZWxlY3QKIAogZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKK2Zyb20gd2Via2l0
cHkucG9ydC5zZXJ2ZXJfcHJvY2Vzc19iYXNlIGltcG9ydCBTZXJ2ZXJQcm9jZXNzQmFzZQogCiAK
IF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIAogCi1jbGFzcyBTZXJ2ZXJQcm9j
ZXNzKG9iamVjdCk6CitjbGFzcyBTZXJ2ZXJQcm9jZXNzKFNlcnZlclByb2Nlc3NCYXNlKToKICAg
ICAiIiJUaGlzIGNsYXNzIHByb3ZpZGVzIGEgd3JhcHBlciBhcm91bmQgYSBzdWJwcm9jZXNzIHRo
YXQKICAgICBpbXBsZW1lbnRzIGEgc2ltcGxlIHJlcXVlc3QvcmVzcG9uc2UgdXNhZ2UgbW9kZWwu
IFRoZSBwcmltYXJ5IGJlbmVmaXQKICAgICBpcyB0aGF0IHJlYWRpbmcgcmVzcG9uc2VzIHRha2Vz
IGEgZGVhZGxpbmUsIHNvIHRoYXQgd2UgZG9uJ3QgZXZlciBibG9jawpAQCAtNjAsMjggKzYyLDE2
IEBACiAgICAgYXMgbmVjZXNzYXJ5IHRvIGtlZXAgaXNzdWluZyBjb21tYW5kcy4iIiIKIAogICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X29iaiwgbmFtZSwgY21kLCBlbnY9Tm9uZSwgdW5pdmVy
c2FsX25ld2xpbmVzPUZhbHNlLCB0cmVhdF9ub19kYXRhX2FzX2NyYXNoPUZhbHNlKToKLSAgICAg
ICAgc2VsZi5fcG9ydCA9IHBvcnRfb2JqCi0gICAgICAgIHNlbGYuX25hbWUgPSBuYW1lICAjIFNo
b3VsZCBiZSB0aGUgY29tbWFuZCBuYW1lIChlLmcuIER1bXBSZW5kZXJUcmVlLCBJbWFnZURpZmYp
Ci0gICAgICAgIHNlbGYuX2NtZCA9IGNtZAotICAgICAgICBzZWxmLl9lbnYgPSBlbnYKLSAgICAg
ICAgIyBTZXQgaWYgdGhlIHByb2Nlc3Mgb3V0cHV0cyBub24tc3RhbmRhcmQgbmV3bGluZXMgbGlr
ZSAnXHJcbicgb3IgJ1xyJy4KLSAgICAgICAgIyBEb24ndCBzZXQgaWYgdGhlcmUgd2lsbCBiZSBi
aW5hcnkgZGF0YSBvciB0aGUgZGF0YSBtdXN0IGJlIEFTQ0lJIGVuY29kZWQuCi0gICAgICAgIHNl
bGYuX3VuaXZlcnNhbF9uZXdsaW5lcyA9IHVuaXZlcnNhbF9uZXdsaW5lcwotICAgICAgICBzZWxm
Ll90cmVhdF9ub19kYXRhX2FzX2NyYXNoID0gdHJlYXRfbm9fZGF0YV9hc19jcmFzaAotICAgICAg
ICBzZWxmLl9ob3N0ID0gc2VsZi5fcG9ydC5ob3N0Ci0gICAgICAgIHNlbGYuX3BpZCA9IE5vbmUK
LSAgICAgICAgc2VsZi5fcmVzZXQoKQorICAgICAgICBzdXBlcihTZXJ2ZXJQcm9jZXNzLCBzZWxm
KS5fX2luaXRfXyhwb3J0X29iaiwgbmFtZSwgY21kLCBlbnYsIHVuaXZlcnNhbF9uZXdsaW5lcywg
dHJlYXRfbm9fZGF0YV9hc19jcmFzaCkKIAogICAgICAgICAjIFNlZSBjb21tZW50IGluIGltcG9y
dHMgZm9yIHdoeSB3ZSBuZWVkIHRoZSB3aW4zMiBBUElzIGFuZCBjYW4ndCBqdXN0IHVzZSBzZWxl
Y3QuCiAgICAgICAgICMgRklYTUU6IHRoZXJlIHNob3VsZCBiZSBhIHdheSB0byBnZXQgd2luMzIg
dnMuIGN5Z3dpbiBmcm9tIHBsYXRmb3JtaW5mby4KICAgICAgICAgc2VsZi5fdXNlX3dpbjMyX2Fw
aXMgPSBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJykKKyAgICAgICAgc2VsZi5fcmVzZXQo
KQogCi0gICAgZGVmIG5hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9uYW1lCisgICAg
ZGVmIGlzX3N0YXJ0ZWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wcm9jCiAKLSAgICBk
ZWYgcGlkKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fcGlkCi0KICAgICBkZWYgX3Jlc2V0
KHNlbGYpOgogICAgICAgICBpZiBnZXRhdHRyKHNlbGYsICdfcHJvYycsIE5vbmUpOgogICAgICAg
ICAgICAgaWYgc2VsZi5fcHJvYy5zdGRpbjoKQEAgLTk1LDE0ICs4NSw4IEBACiAgICAgICAgICAg
ICAgICAgc2VsZi5fcHJvYy5zdGRlcnIgPSBOb25lCiAKICAgICAgICAgc2VsZi5fcHJvYyA9IE5v
bmUKLSAgICAgICAgc2VsZi5fb3V0cHV0ID0gc3RyKCkgICMgYnl0ZXNhcnJheSgpIG9uY2Ugd2Ug
cmVxdWlyZSBQeXRob24gMi42Ci0gICAgICAgIHNlbGYuX2Vycm9yID0gc3RyKCkgICMgYnl0ZXNh
cnJheSgpIG9uY2Ugd2UgcmVxdWlyZSBQeXRob24gMi42Ci0gICAgICAgIHNlbGYuX2NyYXNoZWQg
PSBGYWxzZQotICAgICAgICBzZWxmLnRpbWVkX291dCA9IEZhbHNlCisgICAgICAgIHN1cGVyKFNl
cnZlclByb2Nlc3MsIHNlbGYpLl9yZXNldCgpCiAKLSAgICBkZWYgcHJvY2Vzc19uYW1lKHNlbGYp
OgotICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQotCiAgICAgZGVmIF9zdGFydChzZWxmKToKICAg
ICAgICAgaWYgc2VsZi5fcHJvYzoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIiVzIGFs
cmVhZHkgcnVubmluZyIgJSBzZWxmLl9uYW1lKQpAQCAtMTQ0LDkxICsxMjgsOSBAQAogICAgICAg
ICAgICAgcmV0dXJuIHNlbGYuX3Byb2MucG9sbCgpCiAgICAgICAgIHJldHVybiBOb25lCiAKLSAg
ICBkZWYgd3JpdGUoc2VsZiwgYnl0ZXMsIGlnbm9yZV9jcmFzaD1GYWxzZSk6Ci0gICAgICAgICIi
IldyaXRlIGEgcmVxdWVzdCB0byB0aGUgc3VicHJvY2Vzcy4gVGhlIHN1YnByb2Nlc3MgaXMgKHJl
LSlzdGFydCgpJ2VkCi0gICAgICAgIGlmIGlzIG5vdCBhbHJlYWR5IHJ1bm5pbmcuIiIiCi0gICAg
ICAgIGlmIG5vdCBzZWxmLl9wcm9jOgotICAgICAgICAgICAgc2VsZi5fc3RhcnQoKQotICAgICAg
ICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGluLndyaXRlKGJ5dGVzKQotICAgICAg
ICBleGNlcHQgSU9FcnJvciwgZToKLSAgICAgICAgICAgIHNlbGYuc3RvcCgwLjApCi0gICAgICAg
ICAgICAjIHN0b3AoKSBjYWxscyBfcmVzZXQoKSwgc28gd2UgaGF2ZSB0byBzZXQgY3Jhc2hlZCB0
byBUcnVlIGFmdGVyIGNhbGxpbmcgc3RvcCgpCi0gICAgICAgICAgICAjIHVubGVzcyB3ZSBhbHJl
YWR5IGtub3cgdGhhdCB0aGlzIGlzIGEgdGltZW91dC4KLSAgICAgICAgICAgIGlmIG5vdCBpZ25v
cmVfY3Jhc2g6Ci0gICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygnVGhpcyB0ZXN0IG1hcmtlZCBh
cyBhIGNyYXNoIGJlY2F1c2Ugb2YgYSBicm9rZW4gcGlwZSB3aGVuIHdyaXRpbmcgdG8gc3RkaW4g
b2YgdGhlIHNlcnZlciBwcm9jZXNzLicpCi0gICAgICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9
IFRydWUKKyAgICBkZWYgX3dyaXRlKHNlbGYsIGJ5dGVzKToKKyAgICAgICAgc2VsZi5fcHJvYy5z
dGRpbi53cml0ZShieXRlcykKIAotICAgIGRlZiBfcG9wX3N0ZG91dF9saW5lX2lmX3JlYWR5KHNl
bGYpOgotICAgICAgICBpbmRleF9hZnRlcl9uZXdsaW5lID0gc2VsZi5fb3V0cHV0LmZpbmQoJ1xu
JykgKyAxCi0gICAgICAgIGlmIGluZGV4X2FmdGVyX25ld2xpbmUgPiAwOgotICAgICAgICAgICAg
cmV0dXJuIHNlbGYuX3BvcF9vdXRwdXRfYnl0ZXMoaW5kZXhfYWZ0ZXJfbmV3bGluZSkKLSAgICAg
ICAgcmV0dXJuIE5vbmUKLQotICAgIGRlZiBfcG9wX3N0ZGVycl9saW5lX2lmX3JlYWR5KHNlbGYp
OgotICAgICAgICBpbmRleF9hZnRlcl9uZXdsaW5lID0gc2VsZi5fZXJyb3IuZmluZCgnXG4nKSAr
IDEKLSAgICAgICAgaWYgaW5kZXhfYWZ0ZXJfbmV3bGluZSA+IDA6Ci0gICAgICAgICAgICByZXR1
cm4gc2VsZi5fcG9wX2Vycm9yX2J5dGVzKGluZGV4X2FmdGVyX25ld2xpbmUpCi0gICAgICAgIHJl
dHVybiBOb25lCi0KLSAgICBkZWYgcG9wX2FsbF9idWZmZXJlZF9zdGRlcnIoc2VsZik6Ci0gICAg
ICAgIHJldHVybiBzZWxmLl9wb3BfZXJyb3JfYnl0ZXMobGVuKHNlbGYuX2Vycm9yKSkKLQotICAg
IGRlZiByZWFkX3N0ZG91dF9saW5lKHNlbGYsIGRlYWRsaW5lKToKLSAgICAgICAgcmV0dXJuIHNl
bGYuX3JlYWQoZGVhZGxpbmUsIHNlbGYuX3BvcF9zdGRvdXRfbGluZV9pZl9yZWFkeSkKLQotICAg
IGRlZiByZWFkX3N0ZGVycl9saW5lKHNlbGYsIGRlYWRsaW5lKToKLSAgICAgICAgcmV0dXJuIHNl
bGYuX3JlYWQoZGVhZGxpbmUsIHNlbGYuX3BvcF9zdGRlcnJfbGluZV9pZl9yZWFkeSkKLQotICAg
IGRlZiByZWFkX2VpdGhlcl9zdGRvdXRfb3Jfc3RkZXJyX2xpbmUoc2VsZiwgZGVhZGxpbmUpOgot
ICAgICAgICBkZWYgcmV0cmlldmVfYnl0ZXNfZnJvbV9idWZmZXJzKCk6Ci0gICAgICAgICAgICBz
dGRvdXRfbGluZSA9IHNlbGYuX3BvcF9zdGRvdXRfbGluZV9pZl9yZWFkeSgpCi0gICAgICAgICAg
ICBpZiBzdGRvdXRfbGluZToKLSAgICAgICAgICAgICAgICByZXR1cm4gc3Rkb3V0X2xpbmUsIE5v
bmUKLSAgICAgICAgICAgIHN0ZGVycl9saW5lID0gc2VsZi5fcG9wX3N0ZGVycl9saW5lX2lmX3Jl
YWR5KCkKLSAgICAgICAgICAgIGlmIHN0ZGVycl9saW5lOgotICAgICAgICAgICAgICAgIHJldHVy
biBOb25lLCBzdGRlcnJfbGluZQotICAgICAgICAgICAgcmV0dXJuIE5vbmUgICMgSW5zdHJ1Y3Rz
IHRoZSBjYWxsZXIgdG8ga2VlcCB3YWl0aW5nLgotCi0gICAgICAgIHJldHVybl92YWx1ZSA9IHNl
bGYuX3JlYWQoZGVhZGxpbmUsIHJldHJpZXZlX2J5dGVzX2Zyb21fYnVmZmVycykKLSAgICAgICAg
IyBGSVhNRTogVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2sgYXJvdW5kIHRoZSBmYWN0IHRoYXQgX3Jl
YWQgbm9ybWFsbHkgb25seSByZXR1cm5zIG9uZSB2YWx1ZSwgYnV0IHRoaXMgY2FsbGVyIHdhbnRz
IGl0IHRvIHJldHVybiB0d28uCi0gICAgICAgIGlmIHJldHVybl92YWx1ZSBpcyBOb25lOgotICAg
ICAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKLSAgICAgICAgcmV0dXJuIHJldHVybl92YWx1ZQot
Ci0gICAgZGVmIHJlYWRfc3Rkb3V0KHNlbGYsIGRlYWRsaW5lLCBzaXplKToKLSAgICAgICAgaWYg
c2l6ZSA8PSAwOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignU2VydmVyUHJvY2Vzcy5y
ZWFkKCkgY2FsbGVkIHdpdGggYSBub24tcG9zaXRpdmUgc2l6ZTogJWQgJyAlIHNpemUpCi0KLSAg
ICAgICAgZGVmIHJldHJpZXZlX2J5dGVzX2Zyb21fc3Rkb3V0X2J1ZmZlcigpOgotICAgICAgICAg
ICAgaWYgbGVuKHNlbGYuX291dHB1dCkgPj0gc2l6ZToKLSAgICAgICAgICAgICAgICByZXR1cm4g
c2VsZi5fcG9wX291dHB1dF9ieXRlcyhzaXplKQotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQot
ICAgICAgICByZXR1cm4gc2VsZi5fcmVhZChkZWFkbGluZSwgcmV0cmlldmVfYnl0ZXNfZnJvbV9z
dGRvdXRfYnVmZmVyKQotCi0gICAgZGVmIF9sb2coc2VsZiwgbWVzc2FnZSk6Ci0gICAgICAgICMg
VGhpcyBpcyBhIGJpdCBvZiBhIGhhY2ssIGJ1dCB3ZSBmaXJzdCBsb2cgYSBibGFuayBsaW5lIHRv
IGF2b2lkCi0gICAgICAgICMgbWVzc2luZyB1cCB0aGUgbWFzdGVyIHByb2Nlc3MncyBvdXRwdXQu
Ci0gICAgICAgIF9sb2cuaW5mbygnJykKLSAgICAgICAgX2xvZy5pbmZvKG1lc3NhZ2UpCi0KLSAg
ICBkZWYgX2hhbmRsZV90aW1lb3V0KHNlbGYpOgotICAgICAgICBzZWxmLnRpbWVkX291dCA9IFRy
dWUKLSAgICAgICAgaWYgc2VsZi5fcG9ydC5nZXRfb3B0aW9uKCJzYW1wbGVfb25fdGltZW91dCIp
OgotICAgICAgICAgICAgc2VsZi5fcG9ydC5zYW1wbGVfcHJvY2VzcyhzZWxmLl9uYW1lLCBzZWxm
Ll9wcm9jLnBpZCkKLQotICAgIGRlZiBfc3BsaXRfc3RyaW5nX2FmdGVyX2luZGV4KHNlbGYsIHN0
cmluZywgaW5kZXgpOgotICAgICAgICByZXR1cm4gc3RyaW5nWzppbmRleF0sIHN0cmluZ1tpbmRl
eDpdCi0KLSAgICBkZWYgX3BvcF9vdXRwdXRfYnl0ZXMoc2VsZiwgYnl0ZXNfY291bnQpOgotICAg
ICAgICBvdXRwdXQsIHNlbGYuX291dHB1dCA9IHNlbGYuX3NwbGl0X3N0cmluZ19hZnRlcl9pbmRl
eChzZWxmLl9vdXRwdXQsIGJ5dGVzX2NvdW50KQotICAgICAgICByZXR1cm4gb3V0cHV0Ci0KLSAg
ICBkZWYgX3BvcF9lcnJvcl9ieXRlcyhzZWxmLCBieXRlc19jb3VudCk6Ci0gICAgICAgIG91dHB1
dCwgc2VsZi5fZXJyb3IgPSBzZWxmLl9zcGxpdF9zdHJpbmdfYWZ0ZXJfaW5kZXgoc2VsZi5fZXJy
b3IsIGJ5dGVzX2NvdW50KQotICAgICAgICByZXR1cm4gb3V0cHV0Ci0KICAgICBkZWYgX3dhaXRf
Zm9yX2RhdGFfYW5kX3VwZGF0ZV9idWZmZXJzX3VzaW5nX3NlbGVjdChzZWxmLCBkZWFkbGluZSwg
c3RvcHBpbmc9RmFsc2UpOgogICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZG91dC5jbG9zZWQgb3Ig
c2VsZi5fcHJvYy5zdGRlcnIuY2xvc2VkOgogICAgICAgICAgICAgIyBJZiB0aGUgcHJvY2VzcyBj
cmFzaGVkIGFuZCBpcyB1c2luZyBGSUZPcywgbGlrZSBDaHJvbWl1bSBBbmRyb2lkLCB0aGUKQEAg
LTMwMiw3NiArMjA0LDEyIEBACiAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgcmV0dXJu
IE5vbmUKIAotICAgIGRlZiBoYXNfY3Jhc2hlZChzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYu
X2NyYXNoZWQgYW5kIHNlbGYucG9sbCgpOgotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnVGhpcyB0
ZXN0IG1hcmtlZCBhcyBhIGNyYXNoIGJlY2F1c2Ugb2YgZmFpbHVyZSB0byBwb2xsIHRoZSBzZXJ2
ZXIgcHJvY2Vzcy4nKQotICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUKLSAgICAgICAg
ICAgIHNlbGYuX2hhbmRsZV9wb3NzaWJsZV9pbnRlcnJ1cHQoKQotICAgICAgICByZXR1cm4gc2Vs
Zi5fY3Jhc2hlZAorICAgIGRlZiBfd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnMoc2Vs
ZiwgZGVhZGxpbmUpOgorICAgICAgICBpZiBzZWxmLl91c2Vfd2luMzJfYXBpczoKKyAgICAgICAg
ICAgIHNlbGYuX3dhaXRfZm9yX2RhdGFfYW5kX3VwZGF0ZV9idWZmZXJzX3VzaW5nX3dpbjMyX2Fw
aXMoZGVhZGxpbmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl93YWl0X2Zvcl9k
YXRhX2FuZF91cGRhdGVfYnVmZmVyc191c2luZ19zZWxlY3QoZGVhZGxpbmUpCiAKLSAgICAjIFRo
aXMgcmVhZCBmdW5jdGlvbiBpcyBhIGJpdCBvZGRseS1kZXNpZ25lZCwgYXMgaXQgcG9sbHMgYm90
aCBzdGRvdXQgYW5kIHN0ZGVyciwgeWV0Ci0gICAgIyBvbmx5IHJlYWRzL3JldHVybnMgZnJvbSBv
bmUgb2YgdGhlbSAoYnVmZmVyaW5nIGJvdGggaW4gbG9jYWwgc2VsZi5fb3V0cHV0L3NlbGYuX2Vy
cm9yKS4KLSAgICAjIEl0IG1pZ2h0IGJlIGNsZWFuZXIgdG8gcGFzcyBpbiB0aGUgZmlsZSBkZXNj
cmlwdG9yIHRvIHBvbGwgaW5zdGVhZC4KLSAgICBkZWYgX3JlYWQoc2VsZiwgZGVhZGxpbmUsIGZl
dGNoX2J5dGVzX2Zyb21fYnVmZmVyc19jYWxsYmFjayk6Ci0gICAgICAgIHdoaWxlIFRydWU6Ci0g
ICAgICAgICAgICBpZiBzZWxmLmhhc19jcmFzaGVkKCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IE5vbmUKLQotICAgICAgICAgICAgaWYgdGltZS50aW1lKCkgPiBkZWFkbGluZToKLSAgICAgICAg
ICAgICAgICBzZWxmLl9oYW5kbGVfdGltZW91dCgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5v
bmUKLQotICAgICAgICAgICAgYnl0ZXMgPSBmZXRjaF9ieXRlc19mcm9tX2J1ZmZlcnNfY2FsbGJh
Y2soKQotICAgICAgICAgICAgaWYgYnl0ZXMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGJ5dGVzCi0KLSAgICAgICAgICAgIGlmIHNlbGYuX3VzZV93aW4zMl9hcGlzOgotICAg
ICAgICAgICAgICAgIHNlbGYuX3dhaXRfZm9yX2RhdGFfYW5kX3VwZGF0ZV9idWZmZXJzX3VzaW5n
X3dpbjMyX2FwaXMoZGVhZGxpbmUpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAg
IHNlbGYuX3dhaXRfZm9yX2RhdGFfYW5kX3VwZGF0ZV9idWZmZXJzX3VzaW5nX3NlbGVjdChkZWFk
bGluZSkKLQotICAgIGRlZiBzdGFydChzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuX3Byb2M6
Ci0gICAgICAgICAgICBzZWxmLl9zdGFydCgpCi0KLSAgICBkZWYgc3RvcChzZWxmLCB0aW1lb3V0
X3NlY3M9My4wKToKLSAgICAgICAgaWYgbm90IHNlbGYuX3Byb2M6Ci0gICAgICAgICAgICByZXR1
cm4gKE5vbmUsIE5vbmUpCi0KLSAgICAgICAgIyBPbmx5IGJvdGhlciB0byBjaGVjayBmb3IgbGVh
a3Mgb3Igc3RkZXJyIGlmIHRoZSBwcm9jZXNzIGlzIHN0aWxsIHJ1bm5pbmcuCi0gICAgICAgIGlm
IHNlbGYucG9sbCgpIGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl9wb3J0LmNoZWNrX2Zvcl9s
ZWFrcyhzZWxmLm5hbWUoKSwgc2VsZi5waWQoKSkKLQotICAgICAgICBub3cgPSB0aW1lLnRpbWUo
KQotICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZGluOgotICAgICAgICAgICAgc2VsZi5fcHJvYy5z
dGRpbi5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGluID0gTm9uZQotICAgICAg
ICBraWxsZWQgPSBGYWxzZQotICAgICAgICBpZiB0aW1lb3V0X3NlY3M6Ci0gICAgICAgICAgICBk
ZWFkbGluZSA9IG5vdyArIHRpbWVvdXRfc2VjcwotICAgICAgICAgICAgd2hpbGUgc2VsZi5fcHJv
Yy5wb2xsKCkgaXMgTm9uZSBhbmQgdGltZS50aW1lKCkgPCBkZWFkbGluZToKLSAgICAgICAgICAg
ICAgICB0aW1lLnNsZWVwKDAuMDEpCi0gICAgICAgICAgICBpZiBzZWxmLl9wcm9jLnBvbGwoKSBp
cyBOb25lOgotICAgICAgICAgICAgICAgIF9sb2cud2FybmluZygnc3RvcHBpbmcgJXMocGlkICVk
KSB0aW1lZCBvdXQsIGtpbGxpbmcgaXQnICUgKHNlbGYuX25hbWUsIHNlbGYuX3Byb2MucGlkKSkK
LQotICAgICAgICBpZiBzZWxmLl9wcm9jLnBvbGwoKSBpcyBOb25lOgotICAgICAgICAgICAgc2Vs
Zi5fa2lsbCgpCi0gICAgICAgICAgICBraWxsZWQgPSBUcnVlCi0gICAgICAgICAgICBfbG9nLmRl
YnVnKCdraWxsZWQgcGlkICVkJyAlIHNlbGYuX3Byb2MucGlkKQotCi0gICAgICAgICMgcmVhZCBh
bnkgcmVtYWluaW5nIGRhdGEgb24gdGhlIHBpcGVzIGFuZCByZXR1cm4gaXQuCi0gICAgICAgIGlm
IG5vdCBraWxsZWQ6Ci0gICAgICAgICAgICBpZiBzZWxmLl91c2Vfd2luMzJfYXBpczoKLSAgICAg
ICAgICAgICAgICBzZWxmLl93YWl0X2Zvcl9kYXRhX2FuZF91cGRhdGVfYnVmZmVyc191c2luZ193
aW4zMl9hcGlzKG5vdykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5f
d2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnNfdXNpbmdfc2VsZWN0KG5vdywgc3RvcHBp
bmc9VHJ1ZSkKLSAgICAgICAgb3V0LCBlcnIgPSBzZWxmLl9vdXRwdXQsIHNlbGYuX2Vycm9yCi0g
ICAgICAgIHNlbGYuX3Jlc2V0KCkKLSAgICAgICAgcmV0dXJuIChvdXQsIGVycikKLQotICAgIGRl
ZiBraWxsKHNlbGYpOgotICAgICAgICBzZWxmLnN0b3AoMC4wKQotCiAgICAgZGVmIF9raWxsKHNl
bGYpOgogICAgICAgICBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5raWxsX3Byb2Nlc3Moc2VsZi5fcHJv
Yy5waWQpCiAgICAgICAgIGlmIHNlbGYuX3Byb2MucG9sbCgpIGlzIG5vdCBOb25lOgoKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzc19iYXNlLnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzc19iYXNl
LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJf
cHJvY2Vzc19iYXNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjMwIEBACisjIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBO
ZWl0aGVyIHRoZSBHb29nbGUgbmFtZSBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
K2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgdGltZQorCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dl
cihfX25hbWVfXykKKworCitjbGFzcyBTZXJ2ZXJQcm9jZXNzQmFzZShvYmplY3QpOgorCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVudj1Ob25lLCB1bml2ZXJz
YWxfbmV3bGluZXM9RmFsc2UsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2g9RmFsc2UpOgorICAgICAg
ICBzZWxmLl9wb3J0ID0gcG9ydF9vYmoKKyAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUgICMgU2hv
dWxkIGJlIHRoZSBjb21tYW5kIG5hbWUgKGUuZy4gRHVtcFJlbmRlclRyZWUsIEltYWdlRGlmZikK
KyAgICAgICAgc2VsZi5fY21kID0gY21kCisgICAgICAgIHNlbGYuX2VudiA9IGVudgorICAgICAg
ICAjIFNldCBpZiB0aGUgcHJvY2VzcyBvdXRwdXRzIG5vbi1zdGFuZGFyZCBuZXdsaW5lcyBsaWtl
ICdcclxuJyBvciAnXHInLgorICAgICAgICAjIERvbid0IHNldCBpZiB0aGVyZSB3aWxsIGJlIGJp
bmFyeSBkYXRhIG9yIHRoZSBkYXRhIG11c3QgYmUgQVNDSUkgZW5jb2RlZC4KKyAgICAgICAgc2Vs
Zi5fdW5pdmVyc2FsX25ld2xpbmVzID0gdW5pdmVyc2FsX25ld2xpbmVzCisgICAgICAgIHNlbGYu
X3RyZWF0X25vX2RhdGFfYXNfY3Jhc2ggPSB0cmVhdF9ub19kYXRhX2FzX2NyYXNoCisgICAgICAg
IHNlbGYuX2hvc3QgPSBzZWxmLl9wb3J0Lmhvc3QKKyAgICAgICAgc2VsZi5fcGlkID0gTm9uZQor
CisgICAgZGVmIGlzX3N0YXJ0ZWQoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVk
RXJyb3IKKworICAgIGRlZiBfc3RhcnQoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVu
dGVkRXJyb3IKKworICAgIGRlZiBwb2xsKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1l
bnRlZEVycm9yCisKKyAgICBkZWYgX3dyaXRlKHNlbGYsIGJ5dGVzKToKKyAgICAgICAgcmFpc2Ug
Tm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF93YWl0X2Zvcl9kYXRhX2FuZF91cGRhdGVf
YnVmZmVycyhzZWxmLCBkZWFkbGluZSk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJy
b3IKKworICAgIGRlZiBfa2lsbChzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRF
cnJvcgorCisgICAgZGVmIF9oYW5kbGVfcG9zc2libGVfaW50ZXJydXB0KHNlbGYpOgorICAgICAg
ICAjIFVzZWQgdG8gY2F0Y2gga2V5Ym9hcmQgaW50ZXJ1cHRzLCBpZiBhcHBsaWNhYmxlCisgICAg
ICAgIHBhc3MKKworICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbmFt
ZQorCisgICAgZGVmIHBpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BpZAorCisgICAg
ZGVmIF9yZXNldChzZWxmKToKKyAgICAgICAgc2VsZi5fb3V0cHV0ID0gc3RyKCkgICMgYnl0ZXNh
cnJheSgpIG9uY2Ugd2UgcmVxdWlyZSBQeXRob24gMi42CisgICAgICAgIHNlbGYuX2Vycm9yID0g
c3RyKCkgICMgYnl0ZXNhcnJheSgpIG9uY2Ugd2UgcmVxdWlyZSBQeXRob24gMi42CisgICAgICAg
IHNlbGYuX2NyYXNoZWQgPSBGYWxzZQorICAgICAgICBzZWxmLnRpbWVkX291dCA9IEZhbHNlCisK
KyAgICBkZWYgcHJvY2Vzc19uYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQor
CisgICAgZGVmIHdyaXRlKHNlbGYsIGJ5dGVzLCBpZ25vcmVfY3Jhc2g9RmFsc2UpOgorICAgICAg
ICBpZiBub3Qgc2VsZi5pc19zdGFydGVkKCk6CisgICAgICAgICAgICBzZWxmLl9zdGFydCgpCisg
ICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlKGJ5dGVzKQorICAgICAgICBleGNl
cHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgIHNlbGYuc3RvcCgwLjApCisgICAgICAgICAgICAj
IHN0b3AoKSBjYWxscyBfcmVzZXQoKSwgc28gd2UgaGF2ZSB0byBzZXQgY3Jhc2hlZCB0byBUcnVl
IGFmdGVyIGNhbGxpbmcgc3RvcCgpCisgICAgICAgICAgICAjIHVubGVzcyB3ZSBhbHJlYWR5IGtu
b3cgdGhhdCB0aGlzIGlzIGEgdGltZW91dC4KKyAgICAgICAgICAgIGlmIG5vdCBpZ25vcmVfY3Jh
c2g6CisgICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygnVGhpcyB0ZXN0IG1hcmtlZCBhcyBhIGNy
YXNoIGJlY2F1c2Ugb2YgYSBicm9rZW4gcGlwZSB3aGVuIHdyaXRpbmcgdG8gc3RkaW4gb2YgdGhl
IHNlcnZlciBwcm9jZXNzLicpCisgICAgICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUK
KworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuaXNfc3RhcnRlZCgp
OgorICAgICAgICAgICAgc2VsZi5fc3RhcnQoKQorCisgICAgZGVmIF9wb3Bfc3Rkb3V0X2xpbmVf
aWZfcmVhZHkoc2VsZik6CisgICAgICAgIGluZGV4X2FmdGVyX25ld2xpbmUgPSBzZWxmLl9vdXRw
dXQuZmluZCgnXG4nKSArIDEKKyAgICAgICAgaWYgaW5kZXhfYWZ0ZXJfbmV3bGluZSA+IDA6Cisg
ICAgICAgICAgICByZXR1cm4gc2VsZi5fcG9wX291dHB1dF9ieXRlcyhpbmRleF9hZnRlcl9uZXds
aW5lKQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIF9wb3Bfc3RkZXJyX2xpbmVfaWZf
cmVhZHkoc2VsZik6CisgICAgICAgIGluZGV4X2FmdGVyX25ld2xpbmUgPSBzZWxmLl9lcnJvci5m
aW5kKCdcbicpICsgMQorICAgICAgICBpZiBpbmRleF9hZnRlcl9uZXdsaW5lID4gMDoKKyAgICAg
ICAgICAgIHJldHVybiBzZWxmLl9wb3BfZXJyb3JfYnl0ZXMoaW5kZXhfYWZ0ZXJfbmV3bGluZSkK
KyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBwb3BfYWxsX2J1ZmZlcmVkX3N0ZGVycihz
ZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BvcF9lcnJvcl9ieXRlcyhsZW4oc2VsZi5fZXJy
b3IpKQorCisgICAgZGVmIHJlYWRfc3Rkb3V0X2xpbmUoc2VsZiwgZGVhZGxpbmUpOgorICAgICAg
ICByZXR1cm4gc2VsZi5fcmVhZChkZWFkbGluZSwgc2VsZi5fcG9wX3N0ZG91dF9saW5lX2lmX3Jl
YWR5KQorCisgICAgZGVmIHJlYWRfc3RkZXJyX2xpbmUoc2VsZiwgZGVhZGxpbmUpOgorICAgICAg
ICByZXR1cm4gc2VsZi5fcmVhZChkZWFkbGluZSwgc2VsZi5fcG9wX3N0ZGVycl9saW5lX2lmX3Jl
YWR5KQorCisgICAgZGVmIHJlYWRfZWl0aGVyX3N0ZG91dF9vcl9zdGRlcnJfbGluZShzZWxmLCBk
ZWFkbGluZSk6CisgICAgICAgIGRlZiByZXRyaWV2ZV9ieXRlc19mcm9tX2J1ZmZlcnMoKToKKyAg
ICAgICAgICAgIHN0ZG91dF9saW5lID0gc2VsZi5fcG9wX3N0ZG91dF9saW5lX2lmX3JlYWR5KCkK
KyAgICAgICAgICAgIGlmIHN0ZG91dF9saW5lOgorICAgICAgICAgICAgICAgIHJldHVybiBzdGRv
dXRfbGluZSwgTm9uZQorICAgICAgICAgICAgc3RkZXJyX2xpbmUgPSBzZWxmLl9wb3Bfc3RkZXJy
X2xpbmVfaWZfcmVhZHkoKQorICAgICAgICAgICAgaWYgc3RkZXJyX2xpbmU6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIE5vbmUsIHN0ZGVycl9saW5lCisgICAgICAgICAgICByZXR1cm4gTm9uZSAg
IyBJbnN0cnVjdHMgdGhlIGNhbGxlciB0byBrZWVwIHdhaXRpbmcuCisKKyAgICAgICAgcmV0dXJu
X3ZhbHVlID0gc2VsZi5fcmVhZChkZWFkbGluZSwgcmV0cmlldmVfYnl0ZXNfZnJvbV9idWZmZXJz
KQorICAgICAgICAjIEZJWE1FOiBUaGlzIGlzIGEgYml0IG9mIGEgaGFjayBhcm91bmQgdGhlIGZh
Y3QgdGhhdCBfcmVhZCBub3JtYWxseSBvbmx5IHJldHVybnMgb25lIHZhbHVlLCBidXQgdGhpcyBj
YWxsZXIgd2FudHMgaXQgdG8gcmV0dXJuIHR3by4KKyAgICAgICAgaWYgcmV0dXJuX3ZhbHVlIGlz
IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQorICAgICAgICByZXR1cm4gcmV0
dXJuX3ZhbHVlCisKKyAgICBkZWYgcmVhZF9zdGRvdXQoc2VsZiwgZGVhZGxpbmUsIHNpemUpOgor
ICAgICAgICBpZiBzaXplIDw9IDA6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdTZXJ2
ZXJQcm9jZXNzLnJlYWQoKSBjYWxsZWQgd2l0aCBhIG5vbi1wb3NpdGl2ZSBzaXplOiAlZCAnICUg
c2l6ZSkKKworICAgICAgICBkZWYgcmV0cmlldmVfYnl0ZXNfZnJvbV9zdGRvdXRfYnVmZmVyKCk6
CisgICAgICAgICAgICBpZiBsZW4oc2VsZi5fb3V0cHV0KSA+PSBzaXplOgorICAgICAgICAgICAg
ICAgIHJldHVybiBzZWxmLl9wb3Bfb3V0cHV0X2J5dGVzKHNpemUpCisgICAgICAgICAgICByZXR1
cm4gTm9uZQorCisgICAgICAgIHJldHVybiBzZWxmLl9yZWFkKGRlYWRsaW5lLCByZXRyaWV2ZV9i
eXRlc19mcm9tX3N0ZG91dF9idWZmZXIpCisKKyAgICBkZWYgX2xvZyhzZWxmLCBtZXNzYWdlKToK
KyAgICAgICAgIyBUaGlzIGlzIGEgYml0IG9mIGEgaGFjaywgYnV0IHdlIGZpcnN0IGxvZyBhIGJs
YW5rIGxpbmUgdG8gYXZvaWQKKyAgICAgICAgIyBtZXNzaW5nIHVwIHRoZSBtYXN0ZXIgcHJvY2Vz
cydzIG91dHB1dC4KKyAgICAgICAgX2xvZy5pbmZvKCcnKQorICAgICAgICBfbG9nLmluZm8obWVz
c2FnZSkKKworICAgIGRlZiBfaGFuZGxlX3RpbWVvdXQoc2VsZik6CisgICAgICAgIHNlbGYudGlt
ZWRfb3V0ID0gVHJ1ZQorICAgICAgICBpZiBzZWxmLl9wb3J0LmdldF9vcHRpb24oInNhbXBsZV9v
bl90aW1lb3V0Iik6CisgICAgICAgICAgICBzZWxmLl9wb3J0LnNhbXBsZV9wcm9jZXNzKHNlbGYu
X25hbWUsIHNlbGYucGlkKCkpCisKKyAgICBkZWYgX3NwbGl0X3N0cmluZ19hZnRlcl9pbmRleChz
ZWxmLCBzdHJpbmcsIGluZGV4KToKKyAgICAgICAgcmV0dXJuIHN0cmluZ1s6aW5kZXhdLCBzdHJp
bmdbaW5kZXg6XQorCisgICAgZGVmIF9wb3Bfb3V0cHV0X2J5dGVzKHNlbGYsIGJ5dGVzX2NvdW50
KToKKyAgICAgICAgb3V0cHV0LCBzZWxmLl9vdXRwdXQgPSBzZWxmLl9zcGxpdF9zdHJpbmdfYWZ0
ZXJfaW5kZXgoc2VsZi5fb3V0cHV0LCBieXRlc19jb3VudCkKKyAgICAgICAgcmV0dXJuIG91dHB1
dAorCisgICAgZGVmIF9wb3BfZXJyb3JfYnl0ZXMoc2VsZiwgYnl0ZXNfY291bnQpOgorICAgICAg
ICBvdXRwdXQsIHNlbGYuX2Vycm9yID0gc2VsZi5fc3BsaXRfc3RyaW5nX2FmdGVyX2luZGV4KHNl
bGYuX2Vycm9yLCBieXRlc19jb3VudCkKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCisgICAgZGVm
IGhhc19jcmFzaGVkKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fY3Jhc2hlZCBhbmQgc2Vs
Zi5wb2xsKCk6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCdUaGlzIHRlc3QgbWFya2VkIGFzIGEg
Y3Jhc2ggYmVjYXVzZSBvZiBmYWlsdXJlIHRvIHBvbGwgdGhlIHNlcnZlciBwcm9jZXNzLicpCisg
ICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5faGFuZGxl
X3Bvc3NpYmxlX2ludGVycnVwdCgpCisgICAgICAgIHJldHVybiBzZWxmLl9jcmFzaGVkCisKKyAg
ICBkZWYgX3JlYWQoc2VsZiwgZGVhZGxpbmUsIGZldGNoX2J5dGVzX2Zyb21fYnVmZmVyc19jYWxs
YmFjayk6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBpZiBzZWxmLmhhc19jcmFz
aGVkKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAgICAgaWYgdGlt
ZS50aW1lKCkgPiBkZWFkbGluZToKKyAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfdGltZW91
dCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAgICAgYnl0ZXMgPSBm
ZXRjaF9ieXRlc19mcm9tX2J1ZmZlcnNfY2FsbGJhY2soKQorICAgICAgICAgICAgaWYgYnl0ZXMg
aXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIGJ5dGVzCisKKyAgICAgICAgICAg
IHNlbGYuX3dhaXRfZm9yX2RhdGFfYW5kX3VwZGF0ZV9idWZmZXJzKGRlYWRsaW5lKQorCisgICAg
ZGVmIHN0b3Aoc2VsZiwgdGltZW91dF9zZWNzPTMuMCk6CisgICAgICAgIGlmIG5vdCBzZWxmLmlz
X3N0YXJ0ZWQoKToKKyAgICAgICAgICAgIHJldHVybiAoTm9uZSwgTm9uZSkKKworICAgICAgICAj
IE9ubHkgYm90aGVyIHRvIGNoZWNrIGZvciBsZWFrcyBvciBzdGRlcnIgaWYgdGhlIHByb2Nlc3Mg
aXMgc3RpbGwgcnVubmluZy4KKyAgICAgICAgaWYgc2VsZi5wb2xsKCkgaXMgTm9uZToKKyAgICAg
ICAgICAgIHNlbGYuX3BvcnQuY2hlY2tfZm9yX2xlYWtzKHNlbGYubmFtZSgpLCBzZWxmLnBpZCgp
KQorCisgICAgICAgIG91dCA9IFtdCisgICAgICAgIGVyciA9IFtdCisKKyAgICAgICAgbm93ID0g
dGltZS50aW1lKCkKKyAgICAgICAga2lsbGVkID0gRmFsc2UKKyAgICAgICAgaWYgdGltZW91dF9z
ZWNzOgorICAgICAgICAgICAgZGVhZGxpbmUgPSBub3cgKyB0aW1lb3V0X3NlY3MKKyAgICAgICAg
ICAgIHdoaWxlIHNlbGYucG9sbCgpIGlzIE5vbmUgYW5kIHRpbWUudGltZSgpIDwgZGVhZGxpbmU6
CisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQorICAgICAgICAgICAgaWYgc2VsZi5w
b2xsKCkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ3N0b3BwaW5nICVz
KHBpZCAlZCkgdGltZWQgb3V0LCBraWxsaW5nIGl0JyAlIChzZWxmLl9uYW1lLCBzZWxmLl9waWQp
KQorCisgICAgICAgIGlmIHNlbGYucG9sbCgpIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9r
aWxsKCkKKyAgICAgICAgICAgIGtpbGxlZCA9IFRydWUKKyAgICAgICAgICAgIF9sb2cuZGVidWco
J2tpbGxlZCBwaWQgJWQnICUgc2VsZi5fcGlkKQorCisgICAgICAgICMgcmVhZCBhbnkgcmVtYWlu
aW5nIGRhdGEgb24gdGhlIHBpcGVzIGFuZCByZXR1cm4gaXQuCisgICAgICAgIGlmIG5vdCBraWxs
ZWQ6CisgICAgICAgICAgICBzZWxmLl93YWl0X2Zvcl9kYXRhX2FuZF91cGRhdGVfYnVmZmVycyhu
b3cpCisgICAgICAgICAgICBvdXQsIGVyciA9IHNlbGYuX291dHB1dCwgc2VsZi5fZXJyb3IKKyAg
ICAgICAgICAgIHNlbGYuX3Jlc2V0KCkKKyAgICAgICAgcmV0dXJuIChvdXQsIGVycikKKworICAg
IGRlZiBraWxsKHNlbGYpOgorICAgICAgICBzZWxmLnN0b3AoMC4wKQoKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC9zaW11bGF0b3JfcHJvY2Vzcy5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2ltdWxhdG9yX3Byb2Nlc3MucHkJKG5vbmV4aXN0
ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNzLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUyIEBACisjIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHRp
bWUKKworZnJvbSB3ZWJraXRweS5wb3J0LnNlcnZlcl9wcm9jZXNzX2Jhc2UgaW1wb3J0IFNlcnZl
clByb2Nlc3NCYXNlCisKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisK
K2NsYXNzIFNpbXVsYXRvclByb2Nlc3MoU2VydmVyUHJvY2Vzc0Jhc2UpOgorCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVudj1Ob25lLCB1bml2ZXJzYWxfbmV3
bGluZXM9RmFsc2UsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2g9RmFsc2UpOgorICAgICAgICBzdXBl
cihTaW11bGF0b3JQcm9jZXNzLCBzZWxmKS5fX2luaXRfXyhwb3J0X29iaiwgbmFtZSwgY21kLCBl
bnYsIHVuaXZlcnNhbF9uZXdsaW5lcywgdHJlYXRfbm9fZGF0YV9hc19jcmFzaCkKKyAgICAgICAg
c2VsZi5fc3RkaW4gPSBOb25lCisgICAgICAgIHNlbGYuX3N0ZG91dCA9IE5vbmUKKyAgICAgICAg
c2VsZi5fc3RkZXJyID0gTm9uZQorCisgICAgICAgIGZyb20gd2Via2l0cHkueGNvZGUuc2ltdWxh
dG9yIGltcG9ydCBTaW11bGF0b3IgICMgQXZvaWQgY2lyY3VsYXIgaW1wb3J0CisgICAgICAgIHNl
bGYuX3NpbXVsYXRvcl9tYW5hZ2VyID0gU2ltdWxhdG9yKHBvcnRfb2JqLmhvc3QpCisKKyAgICAg
ICAgc2VsZi5fYnVuZGxlSUQgPSBzZWxmLl9wb3J0LmV4dHJhY3RfYnVuZGxlX0lEKHNlbGYuX2Nt
ZFsxXSkKKyAgICAgICAgc2VsZi5fZGV2aWNlID0gc2VsZi5fc2ltdWxhdG9yX21hbmFnZXIuZmlu
ZF9kZXZpY2VfYnlfdWRpZChzZWxmLl9jbWRbMF0pCisgICAgICAgIHNlbGYuX3NpbXVsYXRvcl9t
YW5hZ2VyLmluc3RhbGwoc2VsZi5fZGV2aWNlLCBzZWxmLl9jbWRbMV0pCisgICAgICAgIHNlbGYu
X2VudlsnSVBDX0lERU5USUZJRVInXSA9IHNlbGYuX2J1bmRsZUlEICsgIi0iICsgc2VsZi5fZGV2
aWNlLnVkaWQKKworICAgICAgICBmaWxlX2xvY2F0aW9uID0gJy90bXAvJyArIHNlbGYuX2Vudlsn
SVBDX0lERU5USUZJRVInXQorICAgICAgICBzZWxmLl9pbl9wYXRoID0gZmlsZV9sb2NhdGlvbiAr
ICdfSU4nCisgICAgICAgIHNlbGYuX291dF9wYXRoID0gZmlsZV9sb2NhdGlvbiArICdfT1VUJwor
ICAgICAgICBzZWxmLl9lcnJvcl9wYXRoID0gZmlsZV9sb2NhdGlvbiArICdfRVJST1InCisKKyAg
ICAgICAgc2VsZi5fcmVzZXQoKQorCisgICAgZGVmIF9fdW5saW5rX2NoZWNrX2V4aXN0cyhzZWxm
LCBwYXRoKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MudW5saW5rKHBhdGgpCisgICAg
ICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhw
YXRoKToKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJDb3VsZCBub3QgdW5saW5rICci
ICsgcGF0aCArICInLCB0aGUgdGFyZ2V0IHBhdGggaXMgYSBmaWxlIG5vdCBhIHBpcGUuIikKKwor
ICAgIGRlZiBfcmVzZXQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3N0ZGluOgorICAgICAgICAg
ICAgb3MuY2xvc2Uoc2VsZi5fc3RkaW4pCisgICAgICAgICAgICBzZWxmLl9zdGRpbiA9IE5vbmUK
KyAgICAgICAgaWYgc2VsZi5fc3Rkb3V0OgorICAgICAgICAgICAgb3MuY2xvc2Uoc2VsZi5fc3Rk
b3V0KQorICAgICAgICAgICAgc2VsZi5fc3Rkb3V0ID0gTm9uZQorICAgICAgICBpZiBzZWxmLl9z
dGRlcnI6CisgICAgICAgICAgICBvcy5jbG9zZShzZWxmLl9zdGRlcnIpCisgICAgICAgICAgICBz
ZWxmLl9zdGRlcnIgPSBOb25lCisKKyAgICAgICAgc2VsZi5fX3VubGlua19jaGVja19leGlzdHMo
c2VsZi5faW5fcGF0aCkKKyAgICAgICAgc2VsZi5fX3VubGlua19jaGVja19leGlzdHMoc2VsZi5f
b3V0X3BhdGgpCisgICAgICAgIHNlbGYuX191bmxpbmtfY2hlY2tfZXhpc3RzKHNlbGYuX2Vycm9y
X3BhdGgpCisKKyAgICAgICAgc3VwZXIoU2ltdWxhdG9yUHJvY2Vzcywgc2VsZikuX3Jlc2V0KCkK
KworICAgIGRlZiBfc3RhcnQoc2VsZik6CisgICAgICAgIG9zLm1rZmlmbyhzZWxmLl9pbl9wYXRo
LCAwNjAwKQorICAgICAgICBvcy5ta2ZpZm8oc2VsZi5fb3V0X3BhdGgsIDA2MDApCisgICAgICAg
IG9zLm1rZmlmbyhzZWxmLl9lcnJvcl9wYXRoLCAwNjAwKQorCisgICAgICAgIHNlbGYuX3BpZCA9
IHNlbGYuX3NpbXVsYXRvcl9tYW5hZ2VyLnJ1bihzZWxmLl9kZXZpY2UsIHNlbGYuX2J1bmRsZUlE
LCBzZWxmLl9jbWRbMzpdLCBlbnY9c2VsZi5fZW52KQorCisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIHNlbGYuX3N0ZG91dCA9IG9zLm9wZW4oc2VsZi5fb3V0X3BhdGgsIG9zLk9fUkRPTkxZIHwg
b3MuT19OT05CTE9DSykKKyAgICAgICAgICAgIHNlbGYuX3N0ZGVyciA9IG9zLm9wZW4oc2VsZi5f
ZXJyb3JfcGF0aCwgb3MuT19SRE9OTFkgfCBvcy5PX05PTkJMT0NLKQorICAgICAgICBleGNlcHQg
T1NFcnJvciBhcyBlOgorICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUKKworICAgICAg
ICBkZWFkbGluZSA9IHRpbWUudGltZSgpICsgMworICAgICAgICB3aGlsZSBub3Qgc2VsZi5fc3Rk
aW4gYW5kIGRlYWRsaW5lID4gdGltZS50aW1lKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAg
ICAgICAgICAgc2VsZi5fc3RkaW4gPSBvcy5vcGVuKHNlbGYuX2luX3BhdGgsIG9zLk9fV1JPTkxZ
IHwgb3MuT19OT05CTE9DSykKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAg
ICAgICAgICAgICAgcGFzcworICAgICAgICBpZiBub3Qgc2VsZi5fc3RkaW46CisgICAgICAgICAg
ICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQorCisgICAgZGVmIGlzX3N0YXJ0ZWQoc2VsZik6CisgICAg
ICAgIGlmIHNlbGYuX3N0ZGluIG9yIHNlbGYuX3N0ZG91dCBvciBzZWxmLl9zdGRlcnI6CisgICAg
ICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBwb2xs
KHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5pc19zdGFydGVkKCk6CisgICAgICAgICAgICBy
ZXR1cm4gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZW1wID0gb3MucmVhZChzZWxm
Ll9zdGRlcnIsIDEyOCkKKyAgICAgICAgICAgIGlmIHRlbXA6CisgICAgICAgICAgICAgICAgc2Vs
Zi5fZXJyb3IgKz0gdGVtcAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1
cm4gVHJ1ZQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgcGFzcwor
ICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4g
RmFsc2UKKworICAgIGRlZiBfd3JpdGUoc2VsZiwgYnl0ZXMpOgorICAgICAgICBpZiBzZWxmLl9z
dGRpbjoKKyAgICAgICAgICAgIG9zLndyaXRlKHNlbGYuX3N0ZGluLCBieXRlcykKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2NyYXNoZWQgPSBUcnVlCisKKyAgICBkZWYgX3dhaXRf
Zm9yX2RhdGFfYW5kX3VwZGF0ZV9idWZmZXJzKHNlbGYsIGRlYWRsaW5lKToKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgdGVtcCA9IG9zLnJlYWQoc2VsZi5fc3Rkb3V0LCAxMjgpCisgICAgICAg
ICAgICBpZiB0ZW1wOgorICAgICAgICAgICAgICAgIHNlbGYuX291dHB1dCArPSB0ZW1wCisgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2NyYXNoZWQgPSBUcnVlCisgICAg
ICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2Vw
dDoKKyAgICAgICAgICAgIHNlbGYuX2NyYXNoZWQgPSBUcnVlCisgICAgICAgIHRyeToKKyAgICAg
ICAgICAgIHRlbXAgPSBvcy5yZWFkKHNlbGYuX3N0ZGVyciwgMTI4KQorICAgICAgICAgICAgaWYg
dGVtcDoKKyAgICAgICAgICAgICAgICBzZWxmLl9lcnJvciArPSB0ZW1wCisgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2NyYXNoZWQgPSBUcnVlCisgICAgICAgIGV4Y2Vw
dCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdDoKKyAgICAg
ICAgICAgIHNlbGYuX2NyYXNoZWQgPSBUcnVlCisKKyAgICBkZWYgX2tpbGwoc2VsZik6CisgICAg
ICAgIHNlbGYuX3NpbXVsYXRvcl9tYW5hZ2VyLmtpbGwoc2VsZi5fZGV2aWNlLCBzZWxmLl9idW5k
bGVJRCkKCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvci5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvci5weQko
cmV2aXNpb24gMjEwNTQ5KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0
b3IucHkJKHdvcmtpbmcgY29weSkKQEAgLTYxNCw2ICs2MTQsMjkgQEAKICAgICAgICAgYXNzZXJ0
KHRlc3RpbmdfZGV2aWNlLmF2YWlsYWJsZSkKICAgICAgICAgcmV0dXJuIHRlc3RpbmdfZGV2aWNl
CiAKKyAgICBkZWYgaW5zdGFsbChzZWxmLCBkZXZpY2UsIGFwcCk6CisgICAgICAgIGlmIHNlbGYu
X2hvc3QuZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsneGNydW4nLCAnc2ltY3RsJywgJ2luc3RhbGwn
LCBkZXZpY2UudWRpZCwgYXBwXSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKSA+IDA6CisgICAgICAg
ICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBydW4oc2Vs
ZiwgZGV2aWNlLCBhcHBfaWQsIGFyZ3MsIGVudj1Ob25lKToKKyAgICAgICAgdHJhbnNmZXJlZEVu
dmlyb25tZW50ID0ge30KKyAgICAgICAgaWYgZW52OgorICAgICAgICAgICAgZm9yIHZhbHVlIGlu
IGVudjoKKyAgICAgICAgICAgICAgICBpZiBub3QgIlNJTUNUTF9DSElMRF8iIGluIHZhbHVlOgor
ICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlcmVkRW52aXJvbm1lbnRbJ1NJTUNUTF9DSElMRF8n
ICsgdmFsdWVdID0gZW52W3ZhbHVlXQorICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlcmVkRW52
aXJvbm1lbnRbdmFsdWVdID0gZW52W3ZhbHVlXQorICAgICAgICBzdHIgPSBzZWxmLl9ob3N0LmV4
ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ3hjcnVuJywgJ3NpbWN0bCcsICdsYXVuY2gnLCBkZXZpY2Uu
dWRpZCwgYXBwX2lkXSArIGFyZ3MsIGVudj10cmFuc2ZlcmVkRW52aXJvbm1lbnQpCisgICAgICAg
IGlmIG5vdCBhcHBfaWQgaW4gc3RyOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAg
c3RyID0gc3RyLnJzdHJpcCgnXG4nKS5zcGxpdCgpWzFdCisgICAgICAgIHJldHVybiBpbnQoc3Ry
KQorCisgICAgZGVmIGtpbGwoc2VsZiwgZGV2aWNlLCBhcHBfaWQpOgorICAgICAgICBpZiBzZWxm
Ll9ob3N0LmV4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ3hjcnVuJywgJ3NpbWN0bCcsICd0ZXJtaW5h
dGUnLCBkZXZpY2UudWRpZCwgYXBwX2lkXSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKSA+IDA6Cisg
ICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKwogICAgIGRlZiBf
X3JlcHJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuICc8aU9TIFNpbXVsYXRvcjoge251bV9ydW50
aW1lc30gcnVudGltZXMsIHtudW1fZGV2aWNlX3R5cGVzfSBkZXZpY2UgdHlwZXM+Jy5mb3JtYXQo
CiAgICAgICAgICAgICBudW1fcnVudGltZXM9bGVuKHNlbGYucnVudGltZXMpLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298790</attachid>
            <date>2017-01-13 15:14:00 -0800</date>
            <delta_ts>2017-01-13 15:19:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165927-20170113151219.patch</filename>
            <type>text/plain</type>
            <size>53325</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMDc0MikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU5IEBACisyMDE3LTAxLTEzICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBSZW1vdmluZyBMYXlvdXRUZXN0UmVsYXkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTkyNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTGF5b3V0VGVzdFJlbGF5OiBSZW1vdmVk
IExheW91dFRlc3RSZWxheS4KKyAgICAgICAgKiBNYWtlZmlsZTogUmVtb3ZlZCBMYXlvdXRUZXN0
UmVsYXkgcmVmZXJlbmNlcy4KKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLXdlYmtpdDogUmVtb3Zl
ZCBMYXlvdXRUZXN0UmVsYXkgcmVmZXJlbmNlcy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3BvcnQvYmFzZS5weToKKyAgICAgICAgKFBvcnQuX19pbml0X18pOiBBZGRlZCBfdGVzdF9ydW5u
ZXJfcHJvY2Vzc19jb25zdHJ1Y3Rvci4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQv
ZGFyd2luLnB5OgorICAgICAgICAoRGFyd2luUG9ydC5leHRyYWN0X2J1bmRsZV9JRCk6IEFkZGVk
IGZ1bmN0aW9uIHRvIGV4dHJhY3QgYnVuZGxlIElEIGZyb20gcGxpc3QuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weToKKyAgICAgICAgKERyaXZlci5fc2V0dXBfZW52
aXJvbl9mb3JfZHJpdmVyKTogU3dhcHBlZCBfc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgZm9y
IF90ZXN0X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yLgorICAgICAgICAoSU9TU2ltdWxhdG9y
RHJpdmVyLmNtZF9saW5lKTogUmVtb3ZlZCB1bm5lZWRlZCBhcmd1bWVudHMuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlcl91bml0dGVzdC5weToKKyAgICAgICAgKERyaXZl
clRlc3QudGVzdF9zdG9wX2NsZWFuc191cF9wcm9wZXJseSk6IFNldCBfdGVzdF9ydW5uZXJfcHJv
Y2Vzc19jb25zdHJ1Y3RvciBmb3IgdGVzdGluZy4KKyAgICAgICAgKERyaXZlclRlc3QudGVzdF90
d29fc3RhcnRzX2NsZWFuc191cF9wcm9wZXJseSk6IERpdHRvLgorICAgICAgICAoRHJpdmVyVGVz
dC50ZXN0X3N0YXJ0X2FjdHVhbGx5X3N0YXJ0cyk6IERpdHRvLgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvcG9ydC9pb3MucHk6CisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0KTogUmVtb3Zl
IHJlbGF5X25hbWUuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9faW5pdF9fKTogIFNldCBf
dGVzdF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciBmb3IgSU9TU2ltdWxhdG9ycy4KKyAgICAg
ICAgKElPU1NpbXVsYXRvclBvcnQucmVsYXlfcGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChJT1NT
aW11bGF0b3JQb3J0Ll9jaGVja19yZWxheSk6IFVzZSBiYXNlIGNsYXNzLgorICAgICAgICAoSU9T
U2ltdWxhdG9yUG9ydC5fY2hlY2tfcG9ydF9idWlsZCk6IERlbGV0ZWQuCisgICAgICAgIChJT1NT
aW11bGF0b3JQb3J0Ll9idWlsZF9yZWxheSk6IERlbGV0ZWQuCisgICAgICAgIChJT1NTaW11bGF0
b3JQb3J0Ll9idWlsZF9kcml2ZXIpOiBEZWxldGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvcG9ydC9pb3NfdW5pdHRlc3QucHk6CisgICAgICAgIChpb3NUZXN0LnRlc3RfMzJiaXQpOiBV
cGRhdGUgdGVzdC4KKyAgICAgICAgKGlvc1Rlc3QudGVzdF82NGJpdCk6IFVwZGF0ZSB0ZXN0Lgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weToKKyAgICAg
ICAgKFNlcnZlclByb2Nlc3MpOiBNb3ZlZCBtb3N0IGZ1bmN0aW9uYWxpdHkgdG8gU2VydmVyUHJv
Y2Vzc0Jhc2UuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLl9faW5pdF9fKTogQ2FsbCBTZXJ2ZXJQ
cm9jZXNzQmFzZSBpbml0aWFsaXplci4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQv
c2VydmVyX3Byb2Nlc3NfYmFzZS5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9wb3J0L3NlcnZlcl9wcm9jZXNzX2Jhc2UucHk6IEFkZGVkLgorICAgICAgICAoU2VydmVyUHJv
Y2Vzc0Jhc2UpOiBNb3ZlZCBtb3N0IG9mIHNlcnZlcl9wcm9jZXNzIGhlcmUuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNzLnB5OiBBZGRlZC4KKyAgICAg
ICAgKGZpZm9Qcm9jZXNzKTogQ29udGFpbnMgc3VicHJvY2VzcyBmdW5jdGlvbnMgdXNlZCBpbiBT
aW11bGF0b3JQcm9jZXNzLgorICAgICAgICAoZmlmb1Byb2Nlc3MuX19pbml0X18pOiBDb25zdHJ1
Y3Qgc3RkaW4sIHN0ZG91dCBhbmQgc3RkZXJyIGZpbGVzIGZyb20gaGFuZGxlcy4KKyAgICAgICAg
KGZpZm9Qcm9jZXNzLnBvbGwpOiBDaGVjayBpZiB0aGUgcHJvY2VzcyBpcyBzdGlsbCBydW5uaW5n
LgorICAgICAgICAoZmlmb1Byb2Nlc3Mud2FpdCk6IFdhaXQgZm9yIHRoZSBwcm9jZXNzIHRvIGNs
b3NlLgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcyk6CisgICAgICAgIChTaW11bGF0b3JQcm9j
ZXNzLl9faW5pdF9fKTogSW5zdGFsbCBhcHAgb24gZGV2aWNlLCBzZXR1cCBlbnZpcm9ubWVudC4K
KyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX191bmxpbmtfY2hlY2tfZXhpc3RzKTogVW5saW5r
IGZpbGUsIG9ubHkgdGhyb3cgZXJyb3IgaWYgdGhlIGZpbGUgZXhpc3RzIGFmdGVyIHVubGluay4K
KyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX3Jlc2V0KTogVGVhciBkb3duIGZpbGVzLgorICAg
ICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5fc3RhcnQpOiBMYXVuY2ggYXBwIGFuZCBzZXR1cCBmaWZv
cy4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX2tpbGwpOiBBdHRlbXB0IHRvIHRlcm1pbmF0
ZSBhcHAgYmVmb3JlIGtpbGxpbmcgcHJvY2Vzcy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3hjb2RlL3NpbXVsYXRvci5weToKKyAgICAgICAgKERldmljZS5fX2luaXRfXyk6IEFkZCBob3N0
IHRvIGRldmljZS4KKyAgICAgICAgKERldmljZS5pbnN0YWxsX2FwcCk6ICBJbnN0YWxsIGFwcCBm
cm9tIGxvY2F0aW9uIG9udG8gZGV2aWNlLgorICAgICAgICAoRGV2aWNlLmxhdW5jaF9hcHApOiBM
YXVuY2ggYXBwIHdpdGggYnVuZGxlIElELgorICAgICAgICAoRGV2aWNlLnRlcm1pbmF0ZV9hcHAp
OiBUZXJtaW5hdGUgdGhlIGFwcCB3aXRoIGJ1bmRsZSBJRC4KKyAgICAgICAgKFNpbXVsYXRvci5f
cGFyc2VfZGV2aWNlcyk6IFBhc3MgaG9zdCB0byBkZXZpY2Ugd2hlbiBjb25zdHJ1Y3RpbmcuCisK
IDIwMTctMDEtMTMgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAg
ICAgICAgcnVuLWpzYy1iZW5jaG1hcmtzJyBlY2hvIHNob3VsZCBoYXZlIC1lIG9wdGlvbgpJbmRl
eDogVG9vbHMvTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTWFrZWZpbGUJKHJldmlzaW9u
IDIxMDczNSkKKysrIFRvb2xzL01ha2VmaWxlCSh3b3JraW5nIGNvcHkpCkBAIC03LDkgKzcsNiBA
QCBpZm5lcSAoLCQoU0RLUk9PVCkpCiAJaWZuZXEgKCwkKGZpbmRzdHJpbmcgaXBob25lLCQoU0RL
Uk9PVCkpKQogCQlNT0RVTEVTICs9IE1vYmlsZU1pbmlCcm93c2VyCiAJZW5kaWYKLQlpZmVxICgs
JChET19OT1RfQlVJTERfTEFZT1VUX1RFU1RfUkVMQVkpKQotCQlNT0RVTEVTICs9IExheW91dFRl
c3RSZWxheQotCWVuZGlmCiBlbmRpZgogCiBhbGw6CkluZGV4OiBUb29scy9TY3JpcHRzL2J1aWxk
LXdlYmtpdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAkocmV2aXNp
b24gMjEwNzM1KQorKysgVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQJKHdvcmtpbmcgY29weSkK
QEAgLTIwMCwxMCArMjAwLDYgQEAgaWYgKGlzQXBwbGVNYWNXZWJLaXQoKSkgewogICAgICAgICBw
dXNoIEBjb3B5TGlicmFyaWVzQXJncywgcHJvZHVjdERpcigpOwogICAgICAgICBwcmludChqb2lu
KCIgIiwgQGNvcHlMaWJyYXJpZXNBcmdzKSAuICJcbiIpOwogICAgICAgICAoc3lzdGVtKEBjb3B5
TGlicmFyaWVzQXJncykgPT0gMCkgb3IgZGllOwotCi0gICAgICAgIGlmICh3aWxsVXNlSU9TU2lt
dWxhdG9yU0RLKCkpIHsKLSAgICAgICAgICAgIChzeXN0ZW0oInBlcmwiLCAiVG9vbHMvU2NyaXB0
cy9idWlsZC1sYXlvdXR0ZXN0cmVsYXkiLCBhcmd1bWVudHNGb3JDb25maWd1cmF0aW9uKCkpID09
IDApIG9yIGRpZTsKLSAgICAgICAgfQogICAgIH0KIAogICAgICMgQnVpbGQgVG9vbHMgbmVlZGVk
IGZvciBBcHBsZSBwb3J0cwpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2Uu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkJKHJl
dmlzaW9uIDIxMDczNSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0xMzEsNiArMTMxLDcgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAg
ICAgICBzZWxmLl93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgPSBOb25lCiAgICAgICAgIHNlbGYu
X2ltYWdlX2RpZmZlciA9IE5vbmUKICAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3NfY29uc3Ry
dWN0b3IgPSBzZXJ2ZXJfcHJvY2Vzcy5TZXJ2ZXJQcm9jZXNzICAjIG92ZXJyaWRhYmxlIGZvciB0
ZXN0aW5nCisgICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBz
ZXJ2ZXJfcHJvY2Vzcy5TZXJ2ZXJQcm9jZXNzCiAKICAgICAgICAgaWYgbm90IGhhc2F0dHIob3B0
aW9ucywgJ2NvbmZpZ3VyYXRpb24nKSBvciBub3Qgb3B0aW9ucy5jb25maWd1cmF0aW9uOgogICAg
ICAgICAgICAgc2VsZi5zZXRfb3B0aW9uX2RlZmF1bHQoJ2NvbmZpZ3VyYXRpb24nLCBzZWxmLmRl
ZmF1bHRfY29uZmlndXJhdGlvbigpKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2Rhcndpbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFy
d2luLnB5CShyZXZpc2lvbiAyMTA3MzUpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
ZGFyd2luLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsMyArMTc0LDExIEBAIGNsYXNzIERhcndp
blBvcnQoQXBwbGVQb3J0KToKICAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yOgogICAgICAgICAg
ICAgX2xvZy53YXJuKCJ4Y3J1biBmYWlsZWQ7IGZhbGxpbmcgYmFjayB0byAnJXMnLiIgJSBmYWxs
YmFjaykKICAgICAgICAgICAgIHJldHVybiBmYWxsYmFjaworCisgICAgZGVmIGFwcF9pZGVudGlm
aWVyX2Zyb21fYnVuZGxlKHNlbGYsIGFwcCk6CisgICAgICAgIHBsaXN0X3BhdGggPSBhcHAgKyAn
L0luZm8ucGxpc3QnCisgICAgICAgIGlmIG5vdCBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhwbGlz
dF9wYXRoKToKKyAgICAgICAgICAgIHBsaXN0X3BhdGggPSBwbGlzdF9wYXRoID0gYXBwICsgJy9D
b250ZW50cy9JbmZvLnBsaXN0JworICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZXN5c3RlbS5leGlz
dHMocGxpc3RfcGF0aCk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4g
c2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsnL3Vzci9saWJleGVjL1BsaXN0QnVkZHknLCAn
LWMnLCAnUHJpbnQgQ0ZCdW5kbGVJZGVudGlmaWVyJywgcGxpc3RfcGF0aF0pLnJzdHJpcCgpCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkJKHJldmlzaW9uIDIxMDczNSkK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkJKHdvcmtpbmcgY29weSkK
QEAgLTEzOCw3ICsxMzgsNyBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAgICAgICAgc2VsZi5f
ZHJpdmVyX3VzZXJfZGlyZWN0b3J5X3N1ZmZpeCA9IE5vbmUKICAgICAgICAgc2VsZi5fZHJpdmVy
X3VzZXJfY2FjaGVfZGlyZWN0b3J5ID0gTm9uZQogCi0gICAgICAgICMgV2ViS2l0VGVzdFJ1bm5l
ci9MYXlvdXRUZXN0UmVsYXkgY2FuIHJlcG9ydCBiYWNrIHN1YnByb2Nlc3MgY3Jhc2hlcyBieSBw
cmludGluZworICAgICAgICAjIFdlYktpdFRlc3RSdW5uZXIgY2FuIHJlcG9ydCBiYWNrIHN1YnBy
b2Nlc3MgY3Jhc2hlcyBieSBwcmludGluZwogICAgICAgICAjICIjQ1JBU0hFRCAtIFBST0NFU1NO
QU1FIi4gIFNpbmNlIHRob3NlIGNhbiBoYXBwZW4gYXQgYW55IHRpbWUgYW5kIFNlcnZlclByb2Nl
c3MKICAgICAgICAgIyB3b24ndCBiZSBhd2FyZSBvZiB0aGVtIChzaW5jZSB0aGUgYWN0dWFsIHRv
b2wgZGlkbid0IGNyYXNoLCBqdXN0IGEgc3VicHJvY2VzcykKICAgICAgICAgIyB3ZSByZWNvcmQg
dGhlIGNyYXNoZWQgc3VicHJvY2VzcyBuYW1lIGhlcmUuCkBAIC0zMjcsNyArMzI3LDYgQEAgY2xh
c3MgRHJpdmVyKG9iamVjdCk6CiAKICAgICBkZWYgX3NldHVwX2Vudmlyb25fZm9yX2RyaXZlcihz
ZWxmLCBlbnZpcm9ubWVudCk6CiAgICAgICAgIGJ1aWxkX3Jvb3RfcGF0aCA9IHN0cihzZWxmLl9w
b3J0Ll9idWlsZF9wYXRoKCkpCi0gICAgICAgICMgRklYTUU6IERZTERfKiB2YXJpYWJsZXMgc2hv
dWxkIGJlIE1hYy1vbmx5LiBFdmVuIGlPUyBTaW11bGF0b3IgZG9lc24ndCBuZWVkIHRoZW0sIGFz
IExheW91dFRlc3RSZWxheSBpcyBhIGhvc3QgYmluYXJ5LgogICAgICAgICBzZWxmLl9hcHBlbmRf
ZW52aXJvbm1lbnRfdmFyaWFibGVfcGF0aChlbnZpcm9ubWVudCwgJ0RZTERfTElCUkFSWV9QQVRI
JywgYnVpbGRfcm9vdF9wYXRoKQogICAgICAgICBzZWxmLl9hcHBlbmRfZW52aXJvbm1lbnRfdmFy
aWFibGVfcGF0aChlbnZpcm9ubWVudCwgJ19fWFBDX0RZTERfTElCUkFSWV9QQVRIJywgYnVpbGRf
cm9vdF9wYXRoKQogICAgICAgICBzZWxmLl9hcHBlbmRfZW52aXJvbm1lbnRfdmFyaWFibGVfcGF0
aChlbnZpcm9ubWVudCwgJ0RZTERfRlJBTUVXT1JLX1BBVEgnLCBidWlsZF9yb290X3BhdGgpCkBA
IC0zNjksNyArMzY4LDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgIGVudmlyb25t
ZW50ID0gc2VsZi5fc2V0dXBfZW52aXJvbl9mb3JfdGVzdCgpCiAgICAgICAgIHNlbGYuX2NyYXNo
ZWRfcHJvY2Vzc19uYW1lID0gTm9uZQogICAgICAgICBzZWxmLl9jcmFzaGVkX3BpZCA9IE5vbmUK
LSAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3MgPSBzZWxmLl9wb3J0Ll9zZXJ2ZXJfcHJvY2Vz
c19jb25zdHJ1Y3RvcihzZWxmLl9wb3J0LCBzZWxmLl9zZXJ2ZXJfbmFtZSwgc2VsZi5jbWRfbGlu
ZShwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyksIGVudmlyb25tZW50KQorICAgICAgICBzZWxm
Ll9zZXJ2ZXJfcHJvY2VzcyA9IHNlbGYuX3BvcnQuX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3Ry
dWN0b3Ioc2VsZi5fcG9ydCwgc2VsZi5fc2VydmVyX25hbWUsIHNlbGYuY21kX2xpbmUocGl4ZWxf
dGVzdHMsIHBlcl90ZXN0X2FyZ3MpLCBlbnZpcm9ubWVudCkKICAgICAgICAgc2VsZi5fc2VydmVy
X3Byb2Nlc3Muc3RhcnQoKQogCiAgICAgZGVmIF9ydW5fcG9zdF9zdGFydF90YXNrcyhzZWxmKToK
QEAgLTYxMSwyMSArNjEwLDE2IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogICAgICAgICByZXR1
cm4gVHJ1ZQogCiAKLSMgRklYTUU6IHRoaXMgc2hvdWxkIGJlIGFic3RyYWN0ZWQgb3V0IHZpYSB0
aGUgUG9ydCBzdWJjbGFzcyBzb21laG93LgogY2xhc3MgSU9TU2ltdWxhdG9yRHJpdmVyKERyaXZl
cik6CiAgICAgZGVmIGNtZF9saW5lKHNlbGYsIHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKToK
ICAgICAgICAgY21kID0gc3VwZXIoSU9TU2ltdWxhdG9yRHJpdmVyLCBzZWxmKS5jbWRfbGluZShw
aXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncykKLSAgICAgICAgcmVsYXlfdG9vbCA9IHNlbGYuX3Bv
cnQucmVsYXlfcGF0aAogICAgICAgICBkdW1wX3Rvb2wgPSBjbWRbMF0KICAgICAgICAgZHVtcF90
b29sX2FyZ3MgPSBjbWRbMTpdCi0gICAgICAgIHByb2R1Y3RfZGlyID0gc2VsZi5fcG9ydC5fYnVp
bGRfcGF0aCgpCiAgICAgICAgIHJlbGF5X2FyZ3MgPSBbCi0gICAgICAgICAgICAnLWRldmVsb3Bl
ckRpcicsIHNlbGYuX3BvcnQuZGV2ZWxvcGVyX2RpciwKLSAgICAgICAgICAgICctdWRpZCcsIHNl
bGYuX3BvcnQuZGV2aWNlX2lkX2Zvcl93b3JrZXJfbnVtYmVyKHNlbGYuX3dvcmtlcl9udW1iZXIp
LAotICAgICAgICAgICAgJy1wcm9kdWN0RGlyJywgcHJvZHVjdF9kaXIsCi0gICAgICAgICAgICAn
LWFwcCcsIGR1bXBfdG9vbCwKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuZGV2aWNlX2lkX2Zvcl93
b3JrZXJfbnVtYmVyKHNlbGYuX3dvcmtlcl9udW1iZXIpLAorICAgICAgICAgICAgZHVtcF90b29s
LAogICAgICAgICBdCi0gICAgICAgIHJldHVybiBbcmVsYXlfdG9vbF0gKyByZWxheV9hcmdzICsg
WyctLSddICsgZHVtcF90b29sX2FyZ3MKKyAgICAgICAgcmV0dXJuIHJlbGF5X2FyZ3MgKyBbJy0t
J10gKyBkdW1wX3Rvb2xfYXJncwogCiAgICAgZGVmIF9zZXR1cF9lbnZpcm9uX2Zvcl9kcml2ZXIo
c2VsZiwgZW52aXJvbm1lbnQpOgogICAgICAgICBlbnZpcm9ubWVudFsnREVWRUxPUEVSX0RJUidd
ID0gc2VsZi5fcG9ydC5kZXZlbG9wZXJfZGlyCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvZHJpdmVyX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIxMDczNSkKKysrIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkK
QEAgLTI2NCw3ICsyNjQsNyBAQCBjbGFzcyBEcml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
IAogICAgIGRlZiB0ZXN0X3N0b3BfY2xlYW5zX3VwX3Byb3Blcmx5KHNlbGYpOgogICAgICAgICBw
b3J0ID0gVGVzdFdlYktpdFBvcnQoKQotICAgICAgICBwb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25z
dHJ1Y3RvciA9IE1vY2tTZXJ2ZXJQcm9jZXNzCisgICAgICAgIHBvcnQuX3Rlc3RfcnVubmVyX3By
b2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJvY2VzcwogICAgICAgICBkcml2ZXIgPSBE
cml2ZXIocG9ydCwgMCwgcGl4ZWxfdGVzdHM9VHJ1ZSkKICAgICAgICAgZHJpdmVyLnN0YXJ0KFRy
dWUsIFtdKQogICAgICAgICBsYXN0X3RtcGRpciA9IHBvcnQuX2ZpbGVzeXN0ZW0ubGFzdF90bXBk
aXIKQEAgLTI3NCw3ICsyNzQsNyBAQCBjbGFzcyBEcml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKIAogICAgIGRlZiB0ZXN0X3R3b19zdGFydHNfY2xlYW5zX3VwX3Byb3Blcmx5KHNlbGYpOgog
ICAgICAgICBwb3J0ID0gVGVzdFdlYktpdFBvcnQoKQotICAgICAgICBwb3J0Ll9zZXJ2ZXJfcHJv
Y2Vzc19jb25zdHJ1Y3RvciA9IE1vY2tTZXJ2ZXJQcm9jZXNzCisgICAgICAgIHBvcnQuX3Rlc3Rf
cnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJvY2VzcwogICAgICAgICBk
cml2ZXIgPSBEcml2ZXIocG9ydCwgMCwgcGl4ZWxfdGVzdHM9VHJ1ZSkKICAgICAgICAgZHJpdmVy
LnN0YXJ0KFRydWUsIFtdKQogICAgICAgICBsYXN0X3RtcGRpciA9IHBvcnQuX2ZpbGVzeXN0ZW0u
bGFzdF90bXBkaXIKQEAgLTI4Myw3ICsyODMsNyBAQCBjbGFzcyBEcml2ZXJUZXN0KHVuaXR0ZXN0
LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3N0YXJ0X2FjdHVhbGx5X3N0YXJ0cyhzZWxmKToK
ICAgICAgICAgcG9ydCA9IFRlc3RXZWJLaXRQb3J0KCkKLSAgICAgICAgcG9ydC5fc2VydmVyX3By
b2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJvY2VzcworICAgICAgICBwb3J0Ll90ZXN0
X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gTW9ja1NlcnZlclByb2Nlc3MKICAgICAgICAg
ZHJpdmVyID0gRHJpdmVyKHBvcnQsIDAsIHBpeGVsX3Rlc3RzPVRydWUpCiAgICAgICAgIGRyaXZl
ci5zdGFydChUcnVlLCBbXSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRyaXZlci5fc2VydmVy
X3Byb2Nlc3Muc3RhcnRlZCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Mu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQkocmV2
aXNpb24gMjEwNzM1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQkod29y
a2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5t
b2RlbHMudGVzdF9jCiBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGNvbmZpZyBhcyBwb3J0X2Nv
bmZpZwogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBkcml2ZXIsIGltYWdlX2RpZmYKIGZyb20g
d2Via2l0cHkucG9ydC5kYXJ3aW4gaW1wb3J0IERhcndpblBvcnQKK2Zyb20gd2Via2l0cHkucG9y
dC5zaW11bGF0b3JfcHJvY2VzcyBpbXBvcnQgU2ltdWxhdG9yUHJvY2VzcwogZnJvbSB3ZWJraXRw
eS54Y29kZS5zaW11bGF0b3IgaW1wb3J0IFNpbXVsYXRvciwgUnVudGltZSwgRGV2aWNlVHlwZQog
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCiAK
QEAgLTc4LDcgKzc5LDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAg
ICBTREsgPSAnaXBob25lc2ltdWxhdG9yJwogCiAgICAgU0lNVUxBVE9SX0JVTkRMRV9JRCA9ICdj
b20uYXBwbGUuaXBob25lc2ltdWxhdG9yJwotICAgIHJlbGF5X25hbWUgPSAnTGF5b3V0VGVzdFJl
bGF5JwogICAgIFNJTVVMQVRPUl9ESVJFQ1RPUlkgPSAiL3RtcC9XZWJLaXRUZXN0aW5nU2ltdWxh
dG9ycy8iCiAgICAgTFNSRUdJU1RFUl9QQVRIID0gIi9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtz
L0NvcmVTZXJ2aWNlcy5mcmFtZXdvcmsvRnJhbWV3b3Jrcy9MYXVuY2hTZXJ2aWNlcy5mcmFtZXdv
cmsvVmVyc2lvbnMvQ3VycmVudC9TdXBwb3J0L2xzcmVnaXN0ZXIiCiAgICAgUFJPQ0VTU19DT1VO
VF9FU1RJTUFURV9QRVJfU0lNVUxBVE9SX0lOU1RBTkNFID0gMTAwCkBAIC05Nyw2ICs5Nyw3IEBA
IGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAKICAgICBkZWYgX19pbml0X18o
c2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncyk6CiAgICAgICAgIERhcndpblBvcnQuX19p
bml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5fdGVz
dF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IFNpbXVsYXRvclByb2Nlc3MKIAogICAgICAg
ICBvcHRpb25hbF9kZXZpY2VfY2xhc3MgPSBzZWxmLmdldF9vcHRpb24oJ2RldmljZV9jbGFzcycp
CiAgICAgICAgIHNlbGYuX3ByaW50aW5nX2NtZF9saW5lID0gRmFsc2UKQEAgLTE0OCwxNiArMTQ5
LDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgICAgIGRl
dmljZV90eXBlID0gRGV2aWNlVHlwZS5mcm9tX25hbWUoZGV2aWNlX25hbWUpCiAgICAgICAgIHJl
dHVybiBkZXZpY2VfdHlwZQogCi0gICAgQHByb3BlcnR5Ci0gICAgQG1lbW9pemVkCi0gICAgZGVm
IHJlbGF5X3BhdGgoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX3Jvb3Rfd2FzX3NldDoKLSAgICAg
ICAgICAgIHBhdGggPSBzZWxmLl9maWxlc3lzdGVtLmFic3BhdGgoc2VsZi5nZXRfb3B0aW9uKCdy
b290JykpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtYWNfY29uZmlnID0gcG9ydF9jb25m
aWcuQ29uZmlnKHNlbGYuX2V4ZWN1dGl2ZSwgc2VsZi5fZmlsZXN5c3RlbSwgJ21hYycpCi0gICAg
ICAgICAgICBwYXRoID0gbWFjX2NvbmZpZy5idWlsZF9kaXJlY3Rvcnkoc2VsZi5nZXRfb3B0aW9u
KCdjb25maWd1cmF0aW9uJykpCi0gICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLmpvaW4o
cGF0aCwgc2VsZi5yZWxheV9uYW1lKQotCiAgICAgQG1lbW9pemVkCiAgICAgZGVmIGNoaWxkX3By
b2Nlc3NlcyhzZWxmKToKICAgICAgICAgcmV0dXJuIGludChzZWxmLmdldF9vcHRpb24oJ2NoaWxk
X3Byb2Nlc3NlcycpKQpAQCAtMTgyLDE5ICsxNzMsNiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0
KERhcndpblBvcnQpOgogCiAgICAgICAgIHJldHVybiBtaW4obWF4aW11bV9zaW11bGF0b3JfY291
bnRfb25fdGhpc19zeXN0ZW0sIGJlc3RfY2hpbGRfcHJvY2Vzc19jb3VudF9mb3JfY3B1KQogCi0g
ICAgZGVmIF9jaGVja19yZWxheShzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0
ZW0uZXhpc3RzKHNlbGYucmVsYXlfcGF0aCk6Ci0gICAgICAgICAgICBfbG9nLmVycm9yKCIlcyB3
YXMgbm90IGZvdW5kIGF0ICVzIiAlIChzZWxmLnJlbGF5X25hbWUsIHNlbGYucmVsYXlfcGF0aCkp
Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRl
ZiBfY2hlY2tfcG9ydF9idWlsZChzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuX3Jvb3Rfd2Fz
X3NldCBhbmQgc2VsZi5nZXRfb3B0aW9uKCdidWlsZCcpIGFuZCBub3Qgc2VsZi5fYnVpbGRfcmVs
YXkoKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBpZiBub3Qgc2VsZi5fY2hl
Y2tfcmVsYXkoKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1
ZQotCiAgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRl
cnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49dGltZS50aW1lLCBzbGVlcF9mbj10aW1lLnNsZWVwLCB3
YWl0X2Zvcl9sb2c9VHJ1ZSk6CiAgICAgICAgIHRpbWVfZm4gPSB0aW1lX2ZuIG9yIHRpbWUudGlt
ZQogICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9yIHRpbWUuc2xlZXAKQEAgLTIxNSw3ICsx
OTMsNyBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgICAgICAgICAg
cmV0dXJuIHNlbGYuX2dldF9jcmFzaF9sb2coY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3Bp
ZFswXSwgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZFsxXSwgc3Rkb3V0LAogICAgICAg
ICAgICAgICAgICdcbicuam9pbihzdGRlcnJfbGluZXMpLCBuZXdlcl90aGFuLCB0aW1lX2ZuLCBz
bGVlcF9mbiwgd2FpdF9mb3JfbG9nKQogCi0gICAgICAgICMgTGF5b3V0VGVzdFJlbGF5IGNyYXNo
ZWQKKyAgICAgICAgIyBBcHAgY3Jhc2hlZAogICAgICAgICBfbG9nLmRlYnVnKCdsb29raW5nIGZv
ciBjcmFzaCBsb2cgZm9yICVzOiVzJyAlIChuYW1lLCBzdHIocGlkKSkpCiAgICAgICAgIGNyYXNo
X2xvZyA9ICcnCiAgICAgICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3Moc2VsZi5ob3N0KQpAQCAt
MjMzLDI1ICsyMTEsNiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAg
ICAgICAgICAgcmV0dXJuIHN0ZGVyciwgTm9uZQogICAgICAgICByZXR1cm4gc3RkZXJyLCBjcmFz
aF9sb2cKIAotICAgIGRlZiBfYnVpbGRfcmVsYXkoc2VsZik6Ci0gICAgICAgIGVudmlyb25tZW50
ID0gc2VsZi5ob3N0LmNvcHlfY3VycmVudF9lbnZpcm9ubWVudCgpCi0gICAgICAgIGVudmlyb25t
ZW50LmRpc2FibGVfZ2NjX3NtYXJ0cXVvdGVzKCkKLSAgICAgICAgZW52ID0gZW52aXJvbm1lbnQu
dG9fZGljdGlvbmFyeSgpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBGSVhNRTogV2Ug
c2hvdWxkIGJlIHBhc3NpbmcgX2FyZ3VtZW50c19mb3JfY29uZmlndXJhdGlvbigpLCB3aGljaCBy
ZXNwZWN0cyBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBwb3J0LAotICAgICAgICAgICAgIyBpbnN0
ZWFkIG9mIGhhcmRjb2RpbmcgLS1pb3Mtc2ltdWxhdG9yLgotICAgICAgICAgICAgc2VsZi5fcnVu
X3NjcmlwdCgiYnVpbGQtbGF5b3V0dGVzdHJlbGF5IiwgYXJncz1bIi0taW9zLXNpbXVsYXRvciJd
LCBlbnY9ZW52KQotICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3IsIGU6Ci0gICAgICAgICAgICBf
bG9nLmVycm9yKGUubWVzc2FnZV93aXRoX291dHB1dChvdXRwdXRfbGltaXQ9Tm9uZSkpCi0gICAg
ICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBfYnVp
bGRfZHJpdmVyKHNlbGYpOgotICAgICAgICBidWlsdF90b29sID0gc3VwZXIoSU9TU2ltdWxhdG9y
UG9ydCwgc2VsZikuX2J1aWxkX2RyaXZlcigpCi0gICAgICAgIGJ1aWx0X3JlbGF5ID0gc2VsZi5f
YnVpbGRfcmVsYXkoKQotICAgICAgICByZXR1cm4gYnVpbHRfdG9vbCBhbmQgYnVpbHRfcmVsYXkK
LQogICAgIGRlZiBfYnVpbGRfZHJpdmVyX2ZsYWdzKHNlbGYpOgogICAgICAgICBhcmNocyA9IFsn
QVJDSFM9aTM4NiddIGlmIHNlbGYuYXJjaGl0ZWN0dXJlKCkgPT0gJ3g4NicgZWxzZSBbXQogICAg
ICAgICBzZGsgPSBbJy0tc2RrJywgJ2lwaG9uZXNpbXVsYXRvciddCkBAIC0yODAsOSArMjM5LDkg
QEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKIAogICAgIGRlZiBfY3JlYXRl
X3NpbXVsYXRvcnMoc2VsZik6CiAgICAgICAgIGlmIChzZWxmLmRlZmF1bHRfY2hpbGRfcHJvY2Vz
c2VzKCkgPCBzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKToKLSAgICAgICAgICAgICAgICBfbG9nLndh
cm4oIllvdSBoYXZlIHNwZWNpZmllZCB2ZXJ5IGhpZ2ggdmFsdWUoezB9KSBmb3IgLS1jaGlsZC1w
cm9jZXNzZXMiLmZvcm1hdChzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKSkKLSAgICAgICAgICAgICAg
ICBfbG9nLndhcm4oIm1heGltdW0gY2hpbGQtcHJvY2Vzc2VzIHdoaWNoIGNhbiBiZSBzdXBwb3J0
ZWQgb24gdGhpcyBzeXN0ZW0gYXJlOiB7MH0iLmZvcm1hdChzZWxmLmRlZmF1bHRfY2hpbGRfcHJv
Y2Vzc2VzKCkpKQotICAgICAgICAgICAgICAgIF9sb2cud2FybigiVGhpcyBpcyB2ZXJ5IGxpa2Vs
eSB0byBmYWlsLiIpCisgICAgICAgICAgICBfbG9nLndhcm4oIllvdSBoYXZlIHNwZWNpZmllZCB2
ZXJ5IGhpZ2ggdmFsdWUoezB9KSBmb3IgLS1jaGlsZC1wcm9jZXNzZXMiLmZvcm1hdChzZWxmLmNo
aWxkX3Byb2Nlc3NlcygpKSkKKyAgICAgICAgICAgIF9sb2cud2FybigibWF4aW11bSBjaGlsZC1w
cm9jZXNzZXMgd2hpY2ggY2FuIGJlIHN1cHBvcnRlZCBvbiB0aGlzIHN5c3RlbSBhcmU6IHswfSIu
Zm9ybWF0KHNlbGYuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKSkpCisgICAgICAgICAgICBfbG9n
Lndhcm4oIlRoaXMgaXMgdmVyeSBsaWtlbHkgdG8gZmFpbC4iKQogCiAgICAgICAgIGlmIHNlbGYu
X3VzaW5nX2RlZGljYXRlZF9zaW11bGF0b3JzKCk6CiAgICAgICAgICAgICBzZWxmLl9jcmVhdGVT
aW11bGF0b3JBcHBzKCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5p
dHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc191
bml0dGVzdC5weQkocmV2aXNpb24gMjEwNzM1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L2lvc191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBjbGFz
cyBpb3NUZXN0KGRhcndpbl90ZXN0Y2FzZS5EYXJ3aW5UZXN0CiAgICAgICAgIHBvcnQuX3J1bl9z
Y3JpcHQgPSBydW5fc2NyaXB0CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5hcmNoaXRl
Y3R1cmUoKSwgJ3g4NicpCiAgICAgICAgIHBvcnQuX2J1aWxkX2RyaXZlcigpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoc2VsZi5hcmdzLCBbJy0taW9zLXNpbXVsYXRvciddKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHNlbGYuYXJncywgWydBUkNIUz1pMzg2JywgJy0tc2RrJywgJ2lwaG9u
ZXNpbXVsYXRvciddKQogCiAgICAgZGVmIHRlc3RfNjRiaXQoc2VsZik6CiAgICAgICAgICMgQXBw
bGUgTWFjIHBvcnQgaXMgNjQtYml0IGJ5IGRlZmF1bHQKQEAgLTgyLDcgKzgyLDcgQEAgY2xhc3Mg
aW9zVGVzdChkYXJ3aW5fdGVzdGNhc2UuRGFyd2luVGVzdAogCiAgICAgICAgIHBvcnQuX3J1bl9z
Y3JpcHQgPSBydW5fc2NyaXB0CiAgICAgICAgIHBvcnQuX2J1aWxkX2RyaXZlcigpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hcmdzLCBbJy0taW9zLXNpbXVsYXRvciddKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYXJncywgWyctLXNkaycsICdpcGhvbmVzaW11bGF0b3In
XSkKIAogICAgIGRlZiB0ZXN0X3Nka19uYW1lKHNlbGYpOgogICAgICAgICBwb3J0ID0gc2VsZi5t
YWtlX3BvcnQoKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9j
ZXNzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJf
cHJvY2Vzcy5weQkocmV2aXNpb24gMjEwNzM1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L3NlcnZlcl9wcm9jZXNzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNCBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CkBAIC0zNCw3NCArMzUsMTcgQEAgaW1wb3J0IHNpZ25hbAogaW1wb3J0IHN5cwogaW1w
b3J0IHRpbWUKIAotIyBOb3RlIHRoYXQgYWx0aG91Z2ggd2luMzIgcHl0aG9uIGRvZXMgcHJvdmlk
ZSBhbiBpbXBsZW1lbnRhdGlvbiBvZgotIyB0aGUgd2luMzIgc2VsZWN0IEFQSSwgaXQgb25seSB3
b3JrcyBvbiBzb2NrZXRzLCBhbmQgbm90IG9uIHRoZSBuYW1lZCBwaXBlcwotIyB1c2VkIGJ5IHN1
YnByb2Nlc3MsIHNvIHdlIGhhdmUgdG8gdXNlIHRoZSBuYXRpdmUgQVBJcyBkaXJlY3RseS4KLWlm
IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKLSAgICBpbXBvcnQgbXN2Y3J0Ci0gICAg
aW1wb3J0IHdpbjMycGlwZQotICAgIGltcG9ydCB3aW4zMmZpbGUKLWVsc2U6Ci0gICAgaW1wb3J0
IGZjbnRsCi0gICAgaW1wb3J0IG9zCi0gICAgaW1wb3J0IHNlbGVjdAotCiBmcm9tIHdlYmtpdHB5
LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgorZnJvbSB3ZWJraXRw
eS5wb3J0LnNlcnZlcl9wcm9jZXNzX2Jhc2UgaW1wb3J0IFNlcnZlclByb2Nlc3NCYXNlCiAKIAog
X2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCiAKLWNsYXNzIFNlcnZlclByb2Nl
c3Mob2JqZWN0KToKLSAgICAiIiJUaGlzIGNsYXNzIHByb3ZpZGVzIGEgd3JhcHBlciBhcm91bmQg
YSBzdWJwcm9jZXNzIHRoYXQKLSAgICBpbXBsZW1lbnRzIGEgc2ltcGxlIHJlcXVlc3QvcmVzcG9u
c2UgdXNhZ2UgbW9kZWwuIFRoZSBwcmltYXJ5IGJlbmVmaXQKLSAgICBpcyB0aGF0IHJlYWRpbmcg
cmVzcG9uc2VzIHRha2VzIGEgZGVhZGxpbmUsIHNvIHRoYXQgd2UgZG9uJ3QgZXZlciBibG9jawot
ICAgIGluZGVmaW5pdGVseS4gVGhlIGNsYXNzIGFsc28gaGFuZGxlcyB0cmFuc3BhcmVudGx5IHJl
c3RhcnRpbmcgcHJvY2Vzc2VzCi0gICAgYXMgbmVjZXNzYXJ5IHRvIGtlZXAgaXNzdWluZyBjb21t
YW5kcy4iIiIKK2NsYXNzIFNlcnZlclByb2Nlc3MoU2VydmVyUHJvY2Vzc0Jhc2UpOgogCiAgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVudj1Ob25lLCB1bml2ZXJz
YWxfbmV3bGluZXM9RmFsc2UsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2g9RmFsc2UpOgotICAgICAg
ICBzZWxmLl9wb3J0ID0gcG9ydF9vYmoKLSAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUgICMgU2hv
dWxkIGJlIHRoZSBjb21tYW5kIG5hbWUgKGUuZy4gRHVtcFJlbmRlclRyZWUsIEltYWdlRGlmZikK
LSAgICAgICAgc2VsZi5fY21kID0gY21kCi0gICAgICAgIHNlbGYuX2VudiA9IGVudgotICAgICAg
ICAjIFNldCBpZiB0aGUgcHJvY2VzcyBvdXRwdXRzIG5vbi1zdGFuZGFyZCBuZXdsaW5lcyBsaWtl
ICdcclxuJyBvciAnXHInLgotICAgICAgICAjIERvbid0IHNldCBpZiB0aGVyZSB3aWxsIGJlIGJp
bmFyeSBkYXRhIG9yIHRoZSBkYXRhIG11c3QgYmUgQVNDSUkgZW5jb2RlZC4KLSAgICAgICAgc2Vs
Zi5fdW5pdmVyc2FsX25ld2xpbmVzID0gdW5pdmVyc2FsX25ld2xpbmVzCi0gICAgICAgIHNlbGYu
X3RyZWF0X25vX2RhdGFfYXNfY3Jhc2ggPSB0cmVhdF9ub19kYXRhX2FzX2NyYXNoCi0gICAgICAg
IHNlbGYuX2hvc3QgPSBzZWxmLl9wb3J0Lmhvc3QKLSAgICAgICAgc2VsZi5fcGlkID0gTm9uZQot
ICAgICAgICBzZWxmLl9yZXNldCgpCi0KLSAgICAgICAgIyBTZWUgY29tbWVudCBpbiBpbXBvcnRz
IGZvciB3aHkgd2UgbmVlZCB0aGUgd2luMzIgQVBJcyBhbmQgY2FuJ3QganVzdCB1c2Ugc2VsZWN0
LgotICAgICAgICAjIEZJWE1FOiB0aGVyZSBzaG91bGQgYmUgYSB3YXkgdG8gZ2V0IHdpbjMyIHZz
LiBjeWd3aW4gZnJvbSBwbGF0Zm9ybWluZm8uCi0gICAgICAgIHNlbGYuX3VzZV93aW4zMl9hcGlz
ID0gc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpCi0KLSAgICBkZWYgbmFtZShzZWxmKToK
LSAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKLQotICAgIGRlZiBwaWQoc2VsZik6Ci0gICAgICAg
IHJldHVybiBzZWxmLl9waWQKLQotICAgIGRlZiBfcmVzZXQoc2VsZik6Ci0gICAgICAgIGlmIGdl
dGF0dHIoc2VsZiwgJ19wcm9jJywgTm9uZSk6Ci0gICAgICAgICAgICBpZiBzZWxmLl9wcm9jLnN0
ZGluOgotICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4uY2xvc2UoKQotICAgICAgICAg
ICAgICAgIHNlbGYuX3Byb2Muc3RkaW4gPSBOb25lCi0gICAgICAgICAgICBpZiBzZWxmLl9wcm9j
LnN0ZG91dDoKLSAgICAgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZG91dC5jbG9zZSgpCi0gICAg
ICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRvdXQgPSBOb25lCi0gICAgICAgICAgICBpZiBzZWxm
Ll9wcm9jLnN0ZGVycjoKLSAgICAgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGVyci5jbG9zZSgp
Ci0gICAgICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRlcnIgPSBOb25lCi0KLSAgICAgICAgc2Vs
Zi5fcHJvYyA9IE5vbmUKLSAgICAgICAgc2VsZi5fb3V0cHV0ID0gc3RyKCkgICMgYnl0ZXNhcnJh
eSgpIG9uY2Ugd2UgcmVxdWlyZSBQeXRob24gMi42Ci0gICAgICAgIHNlbGYuX2Vycm9yID0gc3Ry
KCkgICMgYnl0ZXNhcnJheSgpIG9uY2Ugd2UgcmVxdWlyZSBQeXRob24gMi42Ci0gICAgICAgIHNl
bGYuX2NyYXNoZWQgPSBGYWxzZQotICAgICAgICBzZWxmLnRpbWVkX291dCA9IEZhbHNlCi0KLSAg
ICBkZWYgcHJvY2Vzc19uYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQorICAg
ICAgICBzdXBlcihTZXJ2ZXJQcm9jZXNzLCBzZWxmKS5fX2luaXRfXyhwb3J0X29iaiwgbmFtZSwg
Y21kLCBlbnYsIHVuaXZlcnNhbF9uZXdsaW5lcywgdHJlYXRfbm9fZGF0YV9hc19jcmFzaCkKIAog
ICAgIGRlZiBfc3RhcnQoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX3Byb2M6CkBAIC0xMzcsMjUx
ICs4MSwzIEBAIGNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToKICAgICAgICAgaWYgc2VsZi5f
cHJvYy5yZXR1cm5jb2RlIGluICgtMTA3Mzc0MTUxMCwgLXNpZ25hbC5TSUdJTlQpOgogICAgICAg
ICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQKIAotICAgIGRlZiBwb2xsKHNlbGYpOgotICAg
ICAgICAiIiJDaGVjayB0byBzZWUgaWYgdGhlIHVuZGVybHlpbmcgcHJvY2VzcyBpcyBydW5uaW5n
OyByZXR1cm5zIE5vbmUKLSAgICAgICAgaWYgaXQgc3RpbGwgaXMgKHdyYXBwZXIgYXJvdW5kIHN1
YnByb2Nlc3MucG9sbCkuIiIiCi0gICAgICAgIGlmIHNlbGYuX3Byb2M6Ci0gICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fcHJvYy5wb2xsKCkKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGRlZiB3
cml0ZShzZWxmLCBieXRlcywgaWdub3JlX2NyYXNoPUZhbHNlKToKLSAgICAgICAgIiIiV3JpdGUg
YSByZXF1ZXN0IHRvIHRoZSBzdWJwcm9jZXNzLiBUaGUgc3VicHJvY2VzcyBpcyAocmUtKXN0YXJ0
KCknZWQKLSAgICAgICAgaWYgaXMgbm90IGFscmVhZHkgcnVubmluZy4iIiIKLSAgICAgICAgaWYg
bm90IHNlbGYuX3Byb2M6Ci0gICAgICAgICAgICBzZWxmLl9zdGFydCgpCi0gICAgICAgIHRyeToK
LSAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4ud3JpdGUoYnl0ZXMpCi0gICAgICAgIGV4Y2Vw
dCBJT0Vycm9yLCBlOgotICAgICAgICAgICAgc2VsZi5zdG9wKDAuMCkKLSAgICAgICAgICAgICMg
c3RvcCgpIGNhbGxzIF9yZXNldCgpLCBzbyB3ZSBoYXZlIHRvIHNldCBjcmFzaGVkIHRvIFRydWUg
YWZ0ZXIgY2FsbGluZyBzdG9wKCkKLSAgICAgICAgICAgICMgdW5sZXNzIHdlIGFscmVhZHkga25v
dyB0aGF0IHRoaXMgaXMgYSB0aW1lb3V0LgotICAgICAgICAgICAgaWYgbm90IGlnbm9yZV9jcmFz
aDoKLSAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCdUaGlzIHRlc3QgbWFya2VkIGFzIGEgY3Jh
c2ggYmVjYXVzZSBvZiBhIGJyb2tlbiBwaXBlIHdoZW4gd3JpdGluZyB0byBzdGRpbiBvZiB0aGUg
c2VydmVyIHByb2Nlc3MuJykKLSAgICAgICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQot
Ci0gICAgZGVmIF9wb3Bfc3Rkb3V0X2xpbmVfaWZfcmVhZHkoc2VsZik6Ci0gICAgICAgIGluZGV4
X2FmdGVyX25ld2xpbmUgPSBzZWxmLl9vdXRwdXQuZmluZCgnXG4nKSArIDEKLSAgICAgICAgaWYg
aW5kZXhfYWZ0ZXJfbmV3bGluZSA+IDA6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcG9wX291
dHB1dF9ieXRlcyhpbmRleF9hZnRlcl9uZXdsaW5lKQotICAgICAgICByZXR1cm4gTm9uZQotCi0g
ICAgZGVmIF9wb3Bfc3RkZXJyX2xpbmVfaWZfcmVhZHkoc2VsZik6Ci0gICAgICAgIGluZGV4X2Fm
dGVyX25ld2xpbmUgPSBzZWxmLl9lcnJvci5maW5kKCdcbicpICsgMQotICAgICAgICBpZiBpbmRl
eF9hZnRlcl9uZXdsaW5lID4gMDoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9wb3BfZXJyb3Jf
Ynl0ZXMoaW5kZXhfYWZ0ZXJfbmV3bGluZSkKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGRl
ZiBwb3BfYWxsX2J1ZmZlcmVkX3N0ZGVycihzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Bv
cF9lcnJvcl9ieXRlcyhsZW4oc2VsZi5fZXJyb3IpKQotCi0gICAgZGVmIHJlYWRfc3Rkb3V0X2xp
bmUoc2VsZiwgZGVhZGxpbmUpOgotICAgICAgICByZXR1cm4gc2VsZi5fcmVhZChkZWFkbGluZSwg
c2VsZi5fcG9wX3N0ZG91dF9saW5lX2lmX3JlYWR5KQotCi0gICAgZGVmIHJlYWRfc3RkZXJyX2xp
bmUoc2VsZiwgZGVhZGxpbmUpOgotICAgICAgICByZXR1cm4gc2VsZi5fcmVhZChkZWFkbGluZSwg
c2VsZi5fcG9wX3N0ZGVycl9saW5lX2lmX3JlYWR5KQotCi0gICAgZGVmIHJlYWRfZWl0aGVyX3N0
ZG91dF9vcl9zdGRlcnJfbGluZShzZWxmLCBkZWFkbGluZSk6Ci0gICAgICAgIGRlZiByZXRyaWV2
ZV9ieXRlc19mcm9tX2J1ZmZlcnMoKToKLSAgICAgICAgICAgIHN0ZG91dF9saW5lID0gc2VsZi5f
cG9wX3N0ZG91dF9saW5lX2lmX3JlYWR5KCkKLSAgICAgICAgICAgIGlmIHN0ZG91dF9saW5lOgot
ICAgICAgICAgICAgICAgIHJldHVybiBzdGRvdXRfbGluZSwgTm9uZQotICAgICAgICAgICAgc3Rk
ZXJyX2xpbmUgPSBzZWxmLl9wb3Bfc3RkZXJyX2xpbmVfaWZfcmVhZHkoKQotICAgICAgICAgICAg
aWYgc3RkZXJyX2xpbmU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUsIHN0ZGVycl9saW5l
Ci0gICAgICAgICAgICByZXR1cm4gTm9uZSAgIyBJbnN0cnVjdHMgdGhlIGNhbGxlciB0byBrZWVw
IHdhaXRpbmcuCi0KLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gc2VsZi5fcmVhZChkZWFkbGluZSwg
cmV0cmlldmVfYnl0ZXNfZnJvbV9idWZmZXJzKQotICAgICAgICAjIEZJWE1FOiBUaGlzIGlzIGEg
Yml0IG9mIGEgaGFjayBhcm91bmQgdGhlIGZhY3QgdGhhdCBfcmVhZCBub3JtYWxseSBvbmx5IHJl
dHVybnMgb25lIHZhbHVlLCBidXQgdGhpcyBjYWxsZXIgd2FudHMgaXQgdG8gcmV0dXJuIHR3by4K
LSAgICAgICAgaWYgcmV0dXJuX3ZhbHVlIGlzIE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gTm9u
ZSwgTm9uZQotICAgICAgICByZXR1cm4gcmV0dXJuX3ZhbHVlCi0KLSAgICBkZWYgcmVhZF9zdGRv
dXQoc2VsZiwgZGVhZGxpbmUsIHNpemUpOgotICAgICAgICBpZiBzaXplIDw9IDA6Ci0gICAgICAg
ICAgICByYWlzZSBWYWx1ZUVycm9yKCdTZXJ2ZXJQcm9jZXNzLnJlYWQoKSBjYWxsZWQgd2l0aCBh
IG5vbi1wb3NpdGl2ZSBzaXplOiAlZCAnICUgc2l6ZSkKLQotICAgICAgICBkZWYgcmV0cmlldmVf
Ynl0ZXNfZnJvbV9zdGRvdXRfYnVmZmVyKCk6Ci0gICAgICAgICAgICBpZiBsZW4oc2VsZi5fb3V0
cHV0KSA+PSBzaXplOgotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9wb3Bfb3V0cHV0X2J5
dGVzKHNpemUpCi0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgIHJldHVybiBzZWxm
Ll9yZWFkKGRlYWRsaW5lLCByZXRyaWV2ZV9ieXRlc19mcm9tX3N0ZG91dF9idWZmZXIpCi0KLSAg
ICBkZWYgX2xvZyhzZWxmLCBtZXNzYWdlKToKLSAgICAgICAgIyBUaGlzIGlzIGEgYml0IG9mIGEg
aGFjaywgYnV0IHdlIGZpcnN0IGxvZyBhIGJsYW5rIGxpbmUgdG8gYXZvaWQKLSAgICAgICAgIyBt
ZXNzaW5nIHVwIHRoZSBtYXN0ZXIgcHJvY2VzcydzIG91dHB1dC4KLSAgICAgICAgX2xvZy5pbmZv
KCcnKQotICAgICAgICBfbG9nLmluZm8obWVzc2FnZSkKLQotICAgIGRlZiBfaGFuZGxlX3RpbWVv
dXQoc2VsZik6Ci0gICAgICAgIHNlbGYudGltZWRfb3V0ID0gVHJ1ZQotICAgICAgICBpZiBzZWxm
Ll9wb3J0LmdldF9vcHRpb24oInNhbXBsZV9vbl90aW1lb3V0Iik6Ci0gICAgICAgICAgICBzZWxm
Ll9wb3J0LnNhbXBsZV9wcm9jZXNzKHNlbGYuX25hbWUsIHNlbGYuX3Byb2MucGlkKQotCi0gICAg
ZGVmIF9zcGxpdF9zdHJpbmdfYWZ0ZXJfaW5kZXgoc2VsZiwgc3RyaW5nLCBpbmRleCk6Ci0gICAg
ICAgIHJldHVybiBzdHJpbmdbOmluZGV4XSwgc3RyaW5nW2luZGV4Ol0KLQotICAgIGRlZiBfcG9w
X291dHB1dF9ieXRlcyhzZWxmLCBieXRlc19jb3VudCk6Ci0gICAgICAgIG91dHB1dCwgc2VsZi5f
b3V0cHV0ID0gc2VsZi5fc3BsaXRfc3RyaW5nX2FmdGVyX2luZGV4KHNlbGYuX291dHB1dCwgYnl0
ZXNfY291bnQpCi0gICAgICAgIHJldHVybiBvdXRwdXQKLQotICAgIGRlZiBfcG9wX2Vycm9yX2J5
dGVzKHNlbGYsIGJ5dGVzX2NvdW50KToKLSAgICAgICAgb3V0cHV0LCBzZWxmLl9lcnJvciA9IHNl
bGYuX3NwbGl0X3N0cmluZ19hZnRlcl9pbmRleChzZWxmLl9lcnJvciwgYnl0ZXNfY291bnQpCi0g
ICAgICAgIHJldHVybiBvdXRwdXQKLQotICAgIGRlZiBfd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRl
X2J1ZmZlcnNfdXNpbmdfc2VsZWN0KHNlbGYsIGRlYWRsaW5lLCBzdG9wcGluZz1GYWxzZSk6Ci0g
ICAgICAgIGlmIHNlbGYuX3Byb2Muc3Rkb3V0LmNsb3NlZCBvciBzZWxmLl9wcm9jLnN0ZGVyci5j
bG9zZWQ6Ci0gICAgICAgICAgICAjIElmIHRoZSBwcm9jZXNzIGNyYXNoZWQgYW5kIGlzIHVzaW5n
IEZJRk9zLCBsaWtlIENocm9taXVtIEFuZHJvaWQsIHRoZQotICAgICAgICAgICAgIyBzdGRvdXQg
YW5kIHN0ZGVyciBwaXBlcyB3aWxsIGJlIGNsb3NlZC4KLSAgICAgICAgICAgIHJldHVybgotCi0g
ICAgICAgIG91dF9mZCA9IHNlbGYuX3Byb2Muc3Rkb3V0LmZpbGVubygpCi0gICAgICAgIGVycl9m
ZCA9IHNlbGYuX3Byb2Muc3RkZXJyLmZpbGVubygpCi0gICAgICAgIHNlbGVjdF9mZHMgPSAob3V0
X2ZkLCBlcnJfZmQpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJlYWRfZmRzLCBfLCBfID0g
c2VsZWN0LnNlbGVjdChzZWxlY3RfZmRzLCBbXSwgc2VsZWN0X2ZkcywgbWF4KGRlYWRsaW5lIC0g
dGltZS50aW1lKCksIDApKQotICAgICAgICBleGNlcHQgc2VsZWN0LmVycm9yLCBlOgotICAgICAg
ICAgICAgIyBXZSBjYW4gaWdub3JlIEVJTlZBTCBzaW5jZSBpdCdzIGxpa2VseSB0aGUgcHJvY2Vz
cyBqdXN0IGNyYXNoZWQgYW5kIHdlJ2xsCi0gICAgICAgICAgICAjIGZpZ3VyZSB0aGF0IG91dCB0
aGUgbmV4dCB0aW1lIHRocm91Z2ggdGhlIGxvb3AgaW4gX3JlYWQoKS4KLSAgICAgICAgICAgIGlm
IGUuYXJnc1swXSA9PSBlcnJuby5FSU5WQUw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAg
ICAgICAgICByYWlzZQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgTm90ZSB0aGF0IHdl
IG1heSBnZXQgbm8gZGF0YSBkdXJpbmcgcmVhZCgpIGV2ZW4gdGhvdWdoCi0gICAgICAgICAgICAj
IHNlbGVjdCBzYXlzIHdlIGdvdCBzb21ldGhpbmc7IHNlZSB0aGUgc2VsZWN0KCkgbWFuIHBhZ2UK
LSAgICAgICAgICAgICMgb24gbGludXguIEkgZG9uJ3Qga25vdyBpZiB0aGlzIGhhcHBlbnMgb24g
TWFjIE9TIGFuZAotICAgICAgICAgICAgIyBvdGhlciBVbml4ZW4gYXMgd2VsbCwgYnV0IHdlIGRv
bid0IGJvdGhlciBzcGVjaWFsLWNhc2luZwotICAgICAgICAgICAgIyBMaW51eCBiZWNhdXNlIGl0
J3MgcmVsYXRpdmVseSBoYXJtbGVzcyBlaXRoZXIgd2F5LgotICAgICAgICAgICAgaWYgb3V0X2Zk
IGluIHJlYWRfZmRzOgotICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9wcm9jLnN0ZG91dC5y
ZWFkKCkKLSAgICAgICAgICAgICAgICBpZiBub3QgZGF0YSBhbmQgbm90IHN0b3BwaW5nIGFuZCAo
c2VsZi5fdHJlYXRfbm9fZGF0YV9hc19jcmFzaCBvciBzZWxmLl9wcm9jLnBvbGwoKSk6Ci0gICAg
ICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJ1RoaXMgdGVzdCBtYXJrZWQgYXMgYSBjcmFzaCBi
ZWNhdXNlIG9mIG5vIGRhdGEgd2hpbGUgcmVhZGluZyBzdGRvdXQgZm9yIHRoZSBzZXJ2ZXIgcHJv
Y2Vzcy4nKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQotICAgICAg
ICAgICAgICAgIHNlbGYuX291dHB1dCArPSBkYXRhCi0KLSAgICAgICAgICAgIGlmIGVycl9mZCBp
biByZWFkX2ZkczoKLSAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fcHJvYy5zdGRlcnIucmVh
ZCgpCi0gICAgICAgICAgICAgICAgaWYgbm90IGRhdGEgYW5kIG5vdCBzdG9wcGluZyBhbmQgKHNl
bGYuX3RyZWF0X25vX2RhdGFfYXNfY3Jhc2ggb3Igc2VsZi5fcHJvYy5wb2xsKCkpOgotICAgICAg
ICAgICAgICAgICAgICBfbG9nLmRlYnVnKCdUaGlzIHRlc3QgbWFya2VkIGFzIGEgY3Jhc2ggYmVj
YXVzZSBvZiBubyBkYXRhIHdoaWxlIHJlYWRpbmcgc3Rkb3V0IGZvciB0aGUgc2VydmVyIHByb2Nl
c3MuJykKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUKLSAgICAgICAg
ICAgICAgICBzZWxmLl9lcnJvciArPSBkYXRhCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgot
ICAgICAgICAgICAgIyBXZSBjYW4gaWdub3JlIHRoZSBJT0Vycm9ycyBiZWNhdXNlIHdlIHdpbGwg
ZGV0ZWN0IGlmIHRoZSBzdWJwb3JjZXNzIGNyYXNoZWQKLSAgICAgICAgICAgICMgdGhlIG5leHQg
dGltZSB0aHJvdWdoIHRoZSBsb29wIGluIF9yZWFkKCkKLSAgICAgICAgICAgIHBhc3MKLQotICAg
IGRlZiBfd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnNfdXNpbmdfd2luMzJfYXBpcyhz
ZWxmLCBkZWFkbGluZSk6Ci0gICAgICAgICMgU2VlIGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNv
bS9yZWNpcGVzLzQ0MDU1NC1tb2R1bGUtdG8tYWxsb3ctYXN5bmNocm9ub3VzLXN1YnByb2Nlc3Mt
dXNlLW9uLXdpbi8KLSAgICAgICAgIyBhbmQgaHR0cDovL2RvY3MuYWN0aXZlc3RhdGUuY29tL2Fj
dGl2ZXB5dGhvbi8yLjYvcHl3aW4zMi9tb2R1bGVzLmh0bWwKLSAgICAgICAgIyBmb3IgZG9jdW1l
bnRhdGlvbiBvbiBhbGwgb2YgdGhlc2Ugd2luMzItc3BlY2lmaWMgbW9kdWxlcy4KLSAgICAgICAg
bm93ID0gdGltZS50aW1lKCkKLSAgICAgICAgb3V0X2ZoID0gbXN2Y3J0LmdldF9vc2ZoYW5kbGUo
c2VsZi5fcHJvYy5zdGRvdXQuZmlsZW5vKCkpCi0gICAgICAgIGVycl9maCA9IG1zdmNydC5nZXRf
b3NmaGFuZGxlKHNlbGYuX3Byb2Muc3RkZXJyLmZpbGVubygpKQotICAgICAgICB3aGlsZSAoc2Vs
Zi5fcHJvYy5wb2xsKCkgaXMgTm9uZSkgYW5kIChub3cgPCBkZWFkbGluZSk6Ci0gICAgICAgICAg
ICBvdXRwdXQgPSBzZWxmLl9ub25fYmxvY2tpbmdfcmVhZF93aW4zMihvdXRfZmgpCi0gICAgICAg
ICAgICBlcnJvciA9IHNlbGYuX25vbl9ibG9ja2luZ19yZWFkX3dpbjMyKGVycl9maCkKLSAgICAg
ICAgICAgIGlmIG91dHB1dCBvciBlcnJvcjoKLSAgICAgICAgICAgICAgICBpZiBvdXRwdXQ6Ci0g
ICAgICAgICAgICAgICAgICAgIHNlbGYuX291dHB1dCArPSBvdXRwdXQKLSAgICAgICAgICAgICAg
ICBpZiBlcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXJyb3IgKz0gZXJyb3IKLSAg
ICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKLSAgICAg
ICAgICAgIG5vdyA9IHRpbWUudGltZSgpCi0gICAgICAgIHJldHVybgotCi0gICAgZGVmIF9ub25f
YmxvY2tpbmdfcmVhZF93aW4zMihzZWxmLCBoYW5kbGUpOgotICAgICAgICB0cnk6Ci0gICAgICAg
ICAgICBfLCBhdmFpbCwgXyA9IHdpbjMycGlwZS5QZWVrTmFtZWRQaXBlKGhhbmRsZSwgMCkKLSAg
ICAgICAgICAgIGlmIGF2YWlsID4gMDoKLSAgICAgICAgICAgICAgICBfLCBidWYgPSB3aW4zMmZp
bGUuUmVhZEZpbGUoaGFuZGxlLCBhdmFpbCwgTm9uZSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
YnVmCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6Ci0gICAgICAgICAgICBpZiBlWzBdIG5v
dCBpbiAoMTA5LCBlcnJuby5FU0hVVERPV04pOiAgIyAxMDkgPT0gd2luMzIgRVJST1JfQlJPS0VO
X1BJUEUKLSAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAg
ZGVmIGhhc19jcmFzaGVkKHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5fY3Jhc2hlZCBhbmQg
c2VsZi5wb2xsKCk6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCdUaGlzIHRlc3QgbWFya2VkIGFz
IGEgY3Jhc2ggYmVjYXVzZSBvZiBmYWlsdXJlIHRvIHBvbGwgdGhlIHNlcnZlciBwcm9jZXNzLicp
Ci0gICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQotICAgICAgICAgICAgc2VsZi5faGFu
ZGxlX3Bvc3NpYmxlX2ludGVycnVwdCgpCi0gICAgICAgIHJldHVybiBzZWxmLl9jcmFzaGVkCi0K
LSAgICAjIFRoaXMgcmVhZCBmdW5jdGlvbiBpcyBhIGJpdCBvZGRseS1kZXNpZ25lZCwgYXMgaXQg
cG9sbHMgYm90aCBzdGRvdXQgYW5kIHN0ZGVyciwgeWV0Ci0gICAgIyBvbmx5IHJlYWRzL3JldHVy
bnMgZnJvbSBvbmUgb2YgdGhlbSAoYnVmZmVyaW5nIGJvdGggaW4gbG9jYWwgc2VsZi5fb3V0cHV0
L3NlbGYuX2Vycm9yKS4KLSAgICAjIEl0IG1pZ2h0IGJlIGNsZWFuZXIgdG8gcGFzcyBpbiB0aGUg
ZmlsZSBkZXNjcmlwdG9yIHRvIHBvbGwgaW5zdGVhZC4KLSAgICBkZWYgX3JlYWQoc2VsZiwgZGVh
ZGxpbmUsIGZldGNoX2J5dGVzX2Zyb21fYnVmZmVyc19jYWxsYmFjayk6Ci0gICAgICAgIHdoaWxl
IFRydWU6Ci0gICAgICAgICAgICBpZiBzZWxmLmhhc19jcmFzaGVkKCk6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIE5vbmUKLQotICAgICAgICAgICAgaWYgdGltZS50aW1lKCkgPiBkZWFkbGluZToK
LSAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfdGltZW91dCgpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIE5vbmUKLQotICAgICAgICAgICAgYnl0ZXMgPSBmZXRjaF9ieXRlc19mcm9tX2J1ZmZl
cnNfY2FsbGJhY2soKQotICAgICAgICAgICAgaWYgYnl0ZXMgaXMgbm90IE5vbmU6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGJ5dGVzCi0KLSAgICAgICAgICAgIGlmIHNlbGYuX3VzZV93aW4zMl9h
cGlzOgotICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRfZm9yX2RhdGFfYW5kX3VwZGF0ZV9idWZm
ZXJzX3VzaW5nX3dpbjMyX2FwaXMoZGVhZGxpbmUpCi0gICAgICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgICAgIHNlbGYuX3dhaXRfZm9yX2RhdGFfYW5kX3VwZGF0ZV9idWZmZXJzX3VzaW5nX3Nl
bGVjdChkZWFkbGluZSkKLQotICAgIGRlZiBzdGFydChzZWxmKToKLSAgICAgICAgaWYgbm90IHNl
bGYuX3Byb2M6Ci0gICAgICAgICAgICBzZWxmLl9zdGFydCgpCi0KLSAgICBkZWYgc3RvcChzZWxm
LCB0aW1lb3V0X3NlY3M9My4wKToKLSAgICAgICAgaWYgbm90IHNlbGYuX3Byb2M6Ci0gICAgICAg
ICAgICByZXR1cm4gKE5vbmUsIE5vbmUpCi0KLSAgICAgICAgIyBPbmx5IGJvdGhlciB0byBjaGVj
ayBmb3IgbGVha3Mgb3Igc3RkZXJyIGlmIHRoZSBwcm9jZXNzIGlzIHN0aWxsIHJ1bm5pbmcuCi0g
ICAgICAgIGlmIHNlbGYucG9sbCgpIGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl9wb3J0LmNo
ZWNrX2Zvcl9sZWFrcyhzZWxmLm5hbWUoKSwgc2VsZi5waWQoKSkKLQotICAgICAgICBub3cgPSB0
aW1lLnRpbWUoKQotICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZGluOgotICAgICAgICAgICAgc2Vs
Zi5fcHJvYy5zdGRpbi5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGluID0gTm9u
ZQotICAgICAgICBraWxsZWQgPSBGYWxzZQotICAgICAgICBpZiB0aW1lb3V0X3NlY3M6Ci0gICAg
ICAgICAgICBkZWFkbGluZSA9IG5vdyArIHRpbWVvdXRfc2VjcwotICAgICAgICAgICAgd2hpbGUg
c2VsZi5fcHJvYy5wb2xsKCkgaXMgTm9uZSBhbmQgdGltZS50aW1lKCkgPCBkZWFkbGluZToKLSAg
ICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCi0gICAgICAgICAgICBpZiBzZWxmLl9wcm9j
LnBvbGwoKSBpcyBOb25lOgotICAgICAgICAgICAgICAgIF9sb2cud2FybmluZygnc3RvcHBpbmcg
JXMocGlkICVkKSB0aW1lZCBvdXQsIGtpbGxpbmcgaXQnICUgKHNlbGYuX25hbWUsIHNlbGYuX3By
b2MucGlkKSkKLQotICAgICAgICBpZiBzZWxmLl9wcm9jLnBvbGwoKSBpcyBOb25lOgotICAgICAg
ICAgICAgc2VsZi5fa2lsbCgpCi0gICAgICAgICAgICBraWxsZWQgPSBUcnVlCi0gICAgICAgICAg
ICBfbG9nLmRlYnVnKCdraWxsZWQgcGlkICVkJyAlIHNlbGYuX3Byb2MucGlkKQotCi0gICAgICAg
ICMgcmVhZCBhbnkgcmVtYWluaW5nIGRhdGEgb24gdGhlIHBpcGVzIGFuZCByZXR1cm4gaXQuCi0g
ICAgICAgIGlmIG5vdCBraWxsZWQ6Ci0gICAgICAgICAgICBpZiBzZWxmLl91c2Vfd2luMzJfYXBp
czoKLSAgICAgICAgICAgICAgICBzZWxmLl93YWl0X2Zvcl9kYXRhX2FuZF91cGRhdGVfYnVmZmVy
c191c2luZ193aW4zMl9hcGlzKG5vdykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAg
ICAgc2VsZi5fd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnNfdXNpbmdfc2VsZWN0KG5v
dywgc3RvcHBpbmc9VHJ1ZSkKLSAgICAgICAgb3V0LCBlcnIgPSBzZWxmLl9vdXRwdXQsIHNlbGYu
X2Vycm9yCi0gICAgICAgIHNlbGYuX3Jlc2V0KCkKLSAgICAgICAgcmV0dXJuIChvdXQsIGVycikK
LQotICAgIGRlZiBraWxsKHNlbGYpOgotICAgICAgICBzZWxmLnN0b3AoMC4wKQotCi0gICAgZGVm
IF9raWxsKHNlbGYpOgotICAgICAgICBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5raWxsX3Byb2Nlc3Mo
c2VsZi5fcHJvYy5waWQpCi0gICAgICAgIGlmIHNlbGYuX3Byb2MucG9sbCgpIGlzIG5vdCBOb25l
OgotICAgICAgICAgICAgc2VsZi5fcHJvYy53YWl0KCkKLQotICAgIGRlZiByZXBsYWNlX291dHB1
dHMoc2VsZiwgc3Rkb3V0LCBzdGRlcnIpOgotICAgICAgICBhc3NlcnQgc2VsZi5fcHJvYwotICAg
ICAgICBpZiBzdGRvdXQ6Ci0gICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZG91dC5jbG9zZSgpCi0g
ICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZG91dCA9IHN0ZG91dAotICAgICAgICBpZiBzdGRlcnI6
Ci0gICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGVyci5jbG9zZSgpCi0gICAgICAgICAgICBzZWxm
Ll9wcm9jLnN0ZGVyciA9IHN0ZGVycgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L3NlcnZlcl9wcm9jZXNzX2Jhc2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzX2Jhc2UucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzX2Jhc2UucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzNTggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoK
KyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIEdvb2dsZSBuYW1lIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGVycm5vCitpbXBvcnQgbG9nZ2lu
ZworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHN5cworaW1wb3J0IHRpbWUKKworIyBOb3RlIHRoYXQg
YWx0aG91Z2ggd2luMzIgcHl0aG9uIGRvZXMgcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBvZgor
IyB0aGUgd2luMzIgc2VsZWN0IEFQSSwgaXQgb25seSB3b3JrcyBvbiBzb2NrZXRzLCBhbmQgbm90
IG9uIHRoZSBuYW1lZCBwaXBlcworIyB1c2VkIGJ5IHN1YnByb2Nlc3MsIHNvIHdlIGhhdmUgdG8g
dXNlIHRoZSBuYXRpdmUgQVBJcyBkaXJlY3RseS4KK2lmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRo
KCd3aW4nKToKKyAgICBpbXBvcnQgbXN2Y3J0CisgICAgaW1wb3J0IHdpbjMycGlwZQorICAgIGlt
cG9ydCB3aW4zMmZpbGUKK2Vsc2U6CisgICAgaW1wb3J0IGZjbnRsCisgICAgaW1wb3J0IG9zCisg
ICAgaW1wb3J0IHNlbGVjdAorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZl
IGltcG9ydCBTY3JpcHRFcnJvcgorCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVf
XykKKworCitjbGFzcyBTZXJ2ZXJQcm9jZXNzQmFzZShvYmplY3QpOgorICAgICIiIlRoaXMgY2xh
c3MgcHJvdmlkZXMgYSB3cmFwcGVyIGFyb3VuZCBhIHN1YnByb2Nlc3MgdGhhdAorICAgIGltcGxl
bWVudHMgYSBzaW1wbGUgcmVxdWVzdC9yZXNwb25zZSB1c2FnZSBtb2RlbC4gVGhlIHByaW1hcnkg
YmVuZWZpdAorICAgIGlzIHRoYXQgcmVhZGluZyByZXNwb25zZXMgdGFrZXMgYSBkZWFkbGluZSwg
c28gdGhhdCB3ZSBkb24ndCBldmVyIGJsb2NrCisgICAgaW5kZWZpbml0ZWx5LiBUaGUgY2xhc3Mg
YWxzbyBoYW5kbGVzIHRyYW5zcGFyZW50bHkgcmVzdGFydGluZyBwcm9jZXNzZXMKKyAgICBhcyBu
ZWNlc3NhcnkgdG8ga2VlcCBpc3N1aW5nIGNvbW1hbmRzLiIiIgorCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVudj1Ob25lLCB1bml2ZXJzYWxfbmV3bGluZXM9
RmFsc2UsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2g9RmFsc2UpOgorICAgICAgICBzZWxmLl9wb3J0
ID0gcG9ydF9vYmoKKyAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUgICMgU2hvdWxkIGJlIHRoZSBj
b21tYW5kIG5hbWUgKGUuZy4gRHVtcFJlbmRlclRyZWUsIEltYWdlRGlmZikKKyAgICAgICAgc2Vs
Zi5fY21kID0gY21kCisgICAgICAgIHNlbGYuX2VudiA9IGVudgorICAgICAgICAjIFNldCBpZiB0
aGUgcHJvY2VzcyBvdXRwdXRzIG5vbi1zdGFuZGFyZCBuZXdsaW5lcyBsaWtlICdcclxuJyBvciAn
XHInLgorICAgICAgICAjIERvbid0IHNldCBpZiB0aGVyZSB3aWxsIGJlIGJpbmFyeSBkYXRhIG9y
IHRoZSBkYXRhIG11c3QgYmUgQVNDSUkgZW5jb2RlZC4KKyAgICAgICAgc2VsZi5fdW5pdmVyc2Fs
X25ld2xpbmVzID0gdW5pdmVyc2FsX25ld2xpbmVzCisgICAgICAgIHNlbGYuX3RyZWF0X25vX2Rh
dGFfYXNfY3Jhc2ggPSB0cmVhdF9ub19kYXRhX2FzX2NyYXNoCisgICAgICAgIHNlbGYuX2hvc3Qg
PSBzZWxmLl9wb3J0Lmhvc3QKKyAgICAgICAgc2VsZi5fcGlkID0gTm9uZQorICAgICAgICBzZWxm
Ll9yZXNldCgpCisKKyAgICAgICAgIyBTZWUgY29tbWVudCBpbiBpbXBvcnRzIGZvciB3aHkgd2Ug
bmVlZCB0aGUgd2luMzIgQVBJcyBhbmQgY2FuJ3QganVzdCB1c2Ugc2VsZWN0LgorICAgICAgICAj
IEZJWE1FOiB0aGVyZSBzaG91bGQgYmUgYSB3YXkgdG8gZ2V0IHdpbjMyIHZzLiBjeWd3aW4gZnJv
bSBwbGF0Zm9ybWluZm8uCisgICAgICAgIHNlbGYuX3VzZV93aW4zMl9hcGlzID0gc3lzLnBsYXRm
b3JtLnN0YXJ0c3dpdGgoJ3dpbicpCisKKyAgICBkZWYgX3N0YXJ0KHNlbGYpOgorICAgICAgICBy
YWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX2hhbmRsZV9wb3NzaWJsZV9pbnRl
cnJ1cHQoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAg
ICByZXR1cm4gc2VsZi5fbmFtZQorCisgICAgZGVmIHBpZChzZWxmKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuX3BpZAorCisgICAgZGVmIF9yZXNldChzZWxmKToKKyAgICAgICAgaWYgZ2V0YXR0cihz
ZWxmLCAnX3Byb2MnLCBOb25lKToKKyAgICAgICAgICAgIGlmIHNlbGYuX3Byb2Muc3RkaW46Cisg
ICAgICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRpbi5jbG9zZSgpCisgICAgICAgICAgICAgICAg
c2VsZi5fcHJvYy5zdGRpbiA9IE5vbmUKKyAgICAgICAgICAgIGlmIHNlbGYuX3Byb2Muc3Rkb3V0
OgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3Rkb3V0LmNsb3NlKCkKKyAgICAgICAgICAg
ICAgICBzZWxmLl9wcm9jLnN0ZG91dCA9IE5vbmUKKyAgICAgICAgICAgIGlmIHNlbGYuX3Byb2Mu
c3RkZXJyOgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkZXJyLmNsb3NlKCkKKyAgICAg
ICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGVyciA9IE5vbmUKKworICAgICAgICBzZWxmLl9wcm9j
ID0gTm9uZQorICAgICAgICBzZWxmLl9vdXRwdXQgPSBzdHIoKSAgIyBieXRlc2FycmF5KCkgb25j
ZSB3ZSByZXF1aXJlIFB5dGhvbiAyLjYKKyAgICAgICAgc2VsZi5fZXJyb3IgPSBzdHIoKSAgIyBi
eXRlc2FycmF5KCkgb25jZSB3ZSByZXF1aXJlIFB5dGhvbiAyLjYKKyAgICAgICAgc2VsZi5fY3Jh
c2hlZCA9IEZhbHNlCisgICAgICAgIHNlbGYudGltZWRfb3V0ID0gRmFsc2UKKworICAgIGRlZiBw
cm9jZXNzX25hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9uYW1lCisKKyAgICBkZWYg
cG9sbChzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdG8gc2VlIGlmIHRoZSB1bmRlcmx5aW5nIHBy
b2Nlc3MgaXMgcnVubmluZzsgcmV0dXJucyBOb25lCisgICAgICAgIGlmIGl0IHN0aWxsIGlzICh3
cmFwcGVyIGFyb3VuZCBzdWJwcm9jZXNzLnBvbGwpLiIiIgorICAgICAgICBpZiBzZWxmLl9wcm9j
OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2MucG9sbCgpCisgICAgICAgIHJldHVybiBO
b25lCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgYnl0ZXMsIGlnbm9yZV9jcmFzaD1GYWxzZSk6Cisg
ICAgICAgICIiIldyaXRlIGEgcmVxdWVzdCB0byB0aGUgc3VicHJvY2Vzcy4gVGhlIHN1YnByb2Nl
c3MgaXMgKHJlLSlzdGFydCgpJ2VkCisgICAgICAgIGlmIGlzIG5vdCBhbHJlYWR5IHJ1bm5pbmcu
IiIiCisgICAgICAgIGlmIG5vdCBzZWxmLl9wcm9jOgorICAgICAgICAgICAgc2VsZi5fc3RhcnQo
KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGluLndyaXRlKGJ5dGVz
KQorICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgIHNlbGYuc3RvcCgwLjAp
CisgICAgICAgICAgICAjIHN0b3AoKSBjYWxscyBfcmVzZXQoKSwgc28gd2UgaGF2ZSB0byBzZXQg
Y3Jhc2hlZCB0byBUcnVlIGFmdGVyIGNhbGxpbmcgc3RvcCgpCisgICAgICAgICAgICAjIHVubGVz
cyB3ZSBhbHJlYWR5IGtub3cgdGhhdCB0aGlzIGlzIGEgdGltZW91dC4KKyAgICAgICAgICAgIGlm
IG5vdCBpZ25vcmVfY3Jhc2g6CisgICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygnVGhpcyB0ZXN0
IG1hcmtlZCBhcyBhIGNyYXNoIGJlY2F1c2Ugb2YgYSBicm9rZW4gcGlwZSB3aGVuIHdyaXRpbmcg
dG8gc3RkaW4gb2YgdGhlIHNlcnZlciBwcm9jZXNzLicpCisgICAgICAgICAgICAgICAgc2VsZi5f
Y3Jhc2hlZCA9IFRydWUKKworICAgIGRlZiBfcG9wX3N0ZG91dF9saW5lX2lmX3JlYWR5KHNlbGYp
OgorICAgICAgICBpbmRleF9hZnRlcl9uZXdsaW5lID0gc2VsZi5fb3V0cHV0LmZpbmQoJ1xuJykg
KyAxCisgICAgICAgIGlmIGluZGV4X2FmdGVyX25ld2xpbmUgPiAwOgorICAgICAgICAgICAgcmV0
dXJuIHNlbGYuX3BvcF9vdXRwdXRfYnl0ZXMoaW5kZXhfYWZ0ZXJfbmV3bGluZSkKKyAgICAgICAg
cmV0dXJuIE5vbmUKKworICAgIGRlZiBfcG9wX3N0ZGVycl9saW5lX2lmX3JlYWR5KHNlbGYpOgor
ICAgICAgICBpbmRleF9hZnRlcl9uZXdsaW5lID0gc2VsZi5fZXJyb3IuZmluZCgnXG4nKSArIDEK
KyAgICAgICAgaWYgaW5kZXhfYWZ0ZXJfbmV3bGluZSA+IDA6CisgICAgICAgICAgICByZXR1cm4g
c2VsZi5fcG9wX2Vycm9yX2J5dGVzKGluZGV4X2FmdGVyX25ld2xpbmUpCisgICAgICAgIHJldHVy
biBOb25lCisKKyAgICBkZWYgcG9wX2FsbF9idWZmZXJlZF9zdGRlcnIoc2VsZik6CisgICAgICAg
IHJldHVybiBzZWxmLl9wb3BfZXJyb3JfYnl0ZXMobGVuKHNlbGYuX2Vycm9yKSkKKworICAgIGRl
ZiByZWFkX3N0ZG91dF9saW5lKHNlbGYsIGRlYWRsaW5lKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
X3JlYWQoZGVhZGxpbmUsIHNlbGYuX3BvcF9zdGRvdXRfbGluZV9pZl9yZWFkeSkKKworICAgIGRl
ZiByZWFkX3N0ZGVycl9saW5lKHNlbGYsIGRlYWRsaW5lKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
X3JlYWQoZGVhZGxpbmUsIHNlbGYuX3BvcF9zdGRlcnJfbGluZV9pZl9yZWFkeSkKKworICAgIGRl
ZiByZWFkX2VpdGhlcl9zdGRvdXRfb3Jfc3RkZXJyX2xpbmUoc2VsZiwgZGVhZGxpbmUpOgorICAg
ICAgICBkZWYgcmV0cmlldmVfYnl0ZXNfZnJvbV9idWZmZXJzKCk6CisgICAgICAgICAgICBzdGRv
dXRfbGluZSA9IHNlbGYuX3BvcF9zdGRvdXRfbGluZV9pZl9yZWFkeSgpCisgICAgICAgICAgICBp
ZiBzdGRvdXRfbGluZToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3Rkb3V0X2xpbmUsIE5vbmUK
KyAgICAgICAgICAgIHN0ZGVycl9saW5lID0gc2VsZi5fcG9wX3N0ZGVycl9saW5lX2lmX3JlYWR5
KCkKKyAgICAgICAgICAgIGlmIHN0ZGVycl9saW5lOgorICAgICAgICAgICAgICAgIHJldHVybiBO
b25lLCBzdGRlcnJfbGluZQorICAgICAgICAgICAgcmV0dXJuIE5vbmUgICMgSW5zdHJ1Y3RzIHRo
ZSBjYWxsZXIgdG8ga2VlcCB3YWl0aW5nLgorCisgICAgICAgIHJldHVybl92YWx1ZSA9IHNlbGYu
X3JlYWQoZGVhZGxpbmUsIHJldHJpZXZlX2J5dGVzX2Zyb21fYnVmZmVycykKKyAgICAgICAgIyBG
SVhNRTogVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2sgYXJvdW5kIHRoZSBmYWN0IHRoYXQgX3JlYWQg
bm9ybWFsbHkgb25seSByZXR1cm5zIG9uZSB2YWx1ZSwgYnV0IHRoaXMgY2FsbGVyIHdhbnRzIGl0
IHRvIHJldHVybiB0d28uCisgICAgICAgIGlmIHJldHVybl92YWx1ZSBpcyBOb25lOgorICAgICAg
ICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKKyAgICAgICAgcmV0dXJuIHJldHVybl92YWx1ZQorCisg
ICAgZGVmIHJlYWRfc3Rkb3V0KHNlbGYsIGRlYWRsaW5lLCBzaXplKToKKyAgICAgICAgaWYgc2l6
ZSA8PSAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignU2VydmVyUHJvY2Vzcy5yZWFk
KCkgY2FsbGVkIHdpdGggYSBub24tcG9zaXRpdmUgc2l6ZTogJWQgJyAlIHNpemUpCisKKyAgICAg
ICAgZGVmIHJldHJpZXZlX2J5dGVzX2Zyb21fc3Rkb3V0X2J1ZmZlcigpOgorICAgICAgICAgICAg
aWYgbGVuKHNlbGYuX291dHB1dCkgPj0gc2l6ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2Vs
Zi5fcG9wX291dHB1dF9ieXRlcyhzaXplKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAg
ICAgICByZXR1cm4gc2VsZi5fcmVhZChkZWFkbGluZSwgcmV0cmlldmVfYnl0ZXNfZnJvbV9zdGRv
dXRfYnVmZmVyKQorCisgICAgZGVmIF9sb2coc2VsZiwgbWVzc2FnZSk6CisgICAgICAgICMgVGhp
cyBpcyBhIGJpdCBvZiBhIGhhY2ssIGJ1dCB3ZSBmaXJzdCBsb2cgYSBibGFuayBsaW5lIHRvIGF2
b2lkCisgICAgICAgICMgbWVzc2luZyB1cCB0aGUgbWFzdGVyIHByb2Nlc3MncyBvdXRwdXQuCisg
ICAgICAgIF9sb2cuaW5mbygnJykKKyAgICAgICAgX2xvZy5pbmZvKG1lc3NhZ2UpCisKKyAgICBk
ZWYgX2hhbmRsZV90aW1lb3V0KHNlbGYpOgorICAgICAgICBzZWxmLnRpbWVkX291dCA9IFRydWUK
KyAgICAgICAgaWYgc2VsZi5fcG9ydC5nZXRfb3B0aW9uKCJzYW1wbGVfb25fdGltZW91dCIpOgor
ICAgICAgICAgICAgc2VsZi5fcG9ydC5zYW1wbGVfcHJvY2VzcyhzZWxmLl9uYW1lLCBzZWxmLl9w
cm9jLnBpZCkKKworICAgIGRlZiBfc3BsaXRfc3RyaW5nX2FmdGVyX2luZGV4KHNlbGYsIHN0cmlu
ZywgaW5kZXgpOgorICAgICAgICByZXR1cm4gc3RyaW5nWzppbmRleF0sIHN0cmluZ1tpbmRleDpd
CisKKyAgICBkZWYgX3BvcF9vdXRwdXRfYnl0ZXMoc2VsZiwgYnl0ZXNfY291bnQpOgorICAgICAg
ICBvdXRwdXQsIHNlbGYuX291dHB1dCA9IHNlbGYuX3NwbGl0X3N0cmluZ19hZnRlcl9pbmRleChz
ZWxmLl9vdXRwdXQsIGJ5dGVzX2NvdW50KQorICAgICAgICByZXR1cm4gb3V0cHV0CisKKyAgICBk
ZWYgX3BvcF9lcnJvcl9ieXRlcyhzZWxmLCBieXRlc19jb3VudCk6CisgICAgICAgIG91dHB1dCwg
c2VsZi5fZXJyb3IgPSBzZWxmLl9zcGxpdF9zdHJpbmdfYWZ0ZXJfaW5kZXgoc2VsZi5fZXJyb3Is
IGJ5dGVzX2NvdW50KQorICAgICAgICByZXR1cm4gb3V0cHV0CisKKyAgICBkZWYgX3dhaXRfZm9y
X2RhdGFfYW5kX3VwZGF0ZV9idWZmZXJzX3VzaW5nX3NlbGVjdChzZWxmLCBkZWFkbGluZSwgc3Rv
cHBpbmc9RmFsc2UpOgorICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZG91dC5jbG9zZWQgb3Igc2Vs
Zi5fcHJvYy5zdGRlcnIuY2xvc2VkOgorICAgICAgICAgICAgIyBJZiB0aGUgcHJvY2VzcyBjcmFz
aGVkIGFuZCBpcyB1c2luZyBGSUZPcywgbGlrZSBDaHJvbWl1bSBBbmRyb2lkLCB0aGUKKyAgICAg
ICAgICAgICMgc3Rkb3V0IGFuZCBzdGRlcnIgcGlwZXMgd2lsbCBiZSBjbG9zZWQuCisgICAgICAg
ICAgICByZXR1cm4KKworICAgICAgICBvdXRfZmQgPSBzZWxmLl9wcm9jLnN0ZG91dC5maWxlbm8o
KQorICAgICAgICBlcnJfZmQgPSBzZWxmLl9wcm9jLnN0ZGVyci5maWxlbm8oKQorICAgICAgICBz
ZWxlY3RfZmRzID0gKG91dF9mZCwgZXJyX2ZkKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBy
ZWFkX2ZkcywgXywgXyA9IHNlbGVjdC5zZWxlY3Qoc2VsZWN0X2ZkcywgW10sIHNlbGVjdF9mZHMs
IG1heChkZWFkbGluZSAtIHRpbWUudGltZSgpLCAwKSkKKyAgICAgICAgZXhjZXB0IHNlbGVjdC5l
cnJvciwgZToKKyAgICAgICAgICAgICMgV2UgY2FuIGlnbm9yZSBFSU5WQUwgc2luY2UgaXQncyBs
aWtlbHkgdGhlIHByb2Nlc3MganVzdCBjcmFzaGVkIGFuZCB3ZSdsbAorICAgICAgICAgICAgIyBm
aWd1cmUgdGhhdCBvdXQgdGhlIG5leHQgdGltZSB0aHJvdWdoIHRoZSBsb29wIGluIF9yZWFkKCku
CisgICAgICAgICAgICBpZiBlLmFyZ3NbMF0gPT0gZXJybm8uRUlOVkFMOgorICAgICAgICAgICAg
ICAgIHJldHVybgorICAgICAgICAgICAgcmFpc2UKKworICAgICAgICB0cnk6CisgICAgICAgICAg
ICAjIE5vdGUgdGhhdCB3ZSBtYXkgZ2V0IG5vIGRhdGEgZHVyaW5nIHJlYWQoKSBldmVuIHRob3Vn
aAorICAgICAgICAgICAgIyBzZWxlY3Qgc2F5cyB3ZSBnb3Qgc29tZXRoaW5nOyBzZWUgdGhlIHNl
bGVjdCgpIG1hbiBwYWdlCisgICAgICAgICAgICAjIG9uIGxpbnV4LiBJIGRvbid0IGtub3cgaWYg
dGhpcyBoYXBwZW5zIG9uIE1hYyBPUyBhbmQKKyAgICAgICAgICAgICMgb3RoZXIgVW5peGVuIGFz
IHdlbGwsIGJ1dCB3ZSBkb24ndCBib3RoZXIgc3BlY2lhbC1jYXNpbmcKKyAgICAgICAgICAgICMg
TGludXggYmVjYXVzZSBpdCdzIHJlbGF0aXZlbHkgaGFybWxlc3MgZWl0aGVyIHdheS4KKyAgICAg
ICAgICAgIGlmIG91dF9mZCBpbiByZWFkX2ZkczoKKyAgICAgICAgICAgICAgICBkYXRhID0gc2Vs
Zi5fcHJvYy5zdGRvdXQucmVhZCgpCisgICAgICAgICAgICAgICAgaWYgbm90IGRhdGEgYW5kIG5v
dCBzdG9wcGluZyBhbmQgKHNlbGYuX3RyZWF0X25vX2RhdGFfYXNfY3Jhc2ggb3Igc2VsZi5fcHJv
Yy5wb2xsKCkpOgorICAgICAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCdUaGlzIHRlc3QgbWFy
a2VkIGFzIGEgY3Jhc2ggYmVjYXVzZSBvZiBubyBkYXRhIHdoaWxlIHJlYWRpbmcgc3Rkb3V0IGZv
ciB0aGUgc2VydmVyIHByb2Nlc3MuJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3Jhc2hl
ZCA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLl9vdXRwdXQgKz0gZGF0YQorCisgICAgICAg
ICAgICBpZiBlcnJfZmQgaW4gcmVhZF9mZHM6CisgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYu
X3Byb2Muc3RkZXJyLnJlYWQoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhIGFuZCBub3Qg
c3RvcHBpbmcgYW5kIChzZWxmLl90cmVhdF9ub19kYXRhX2FzX2NyYXNoIG9yIHNlbGYuX3Byb2Mu
cG9sbCgpKToKKyAgICAgICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygnVGhpcyB0ZXN0IG1hcmtl
ZCBhcyBhIGNyYXNoIGJlY2F1c2Ugb2Ygbm8gZGF0YSB3aGlsZSByZWFkaW5nIHN0ZG91dCBmb3Ig
dGhlIHNlcnZlciBwcm9jZXNzLicpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NyYXNoZWQg
PSBUcnVlCisgICAgICAgICAgICAgICAgc2VsZi5fZXJyb3IgKz0gZGF0YQorICAgICAgICBleGNl
cHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgICMgV2UgY2FuIGlnbm9yZSB0aGUgSU9FcnJvcnMg
YmVjYXVzZSB3ZSB3aWxsIGRldGVjdCBpZiB0aGUgc3VicG9yY2VzcyBjcmFzaGVkCisgICAgICAg
ICAgICAjIHRoZSBuZXh0IHRpbWUgdGhyb3VnaCB0aGUgbG9vcCBpbiBfcmVhZCgpCisgICAgICAg
ICAgICBwYXNzCisKKyAgICBkZWYgX3dhaXRfZm9yX2RhdGFfYW5kX3VwZGF0ZV9idWZmZXJzX3Vz
aW5nX3dpbjMyX2FwaXMoc2VsZiwgZGVhZGxpbmUpOgorICAgICAgICAjIFNlZSBodHRwOi8vY29k
ZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy80NDA1NTQtbW9kdWxlLXRvLWFsbG93LWFzeW5jaHJv
bm91cy1zdWJwcm9jZXNzLXVzZS1vbi13aW4vCisgICAgICAgICMgYW5kIGh0dHA6Ly9kb2NzLmFj
dGl2ZXN0YXRlLmNvbS9hY3RpdmVweXRob24vMi42L3B5d2luMzIvbW9kdWxlcy5odG1sCisgICAg
ICAgICMgZm9yIGRvY3VtZW50YXRpb24gb24gYWxsIG9mIHRoZXNlIHdpbjMyLXNwZWNpZmljIG1v
ZHVsZXMuCisgICAgICAgIG5vdyA9IHRpbWUudGltZSgpCisgICAgICAgIG91dF9maCA9IG1zdmNy
dC5nZXRfb3NmaGFuZGxlKHNlbGYuX3Byb2Muc3Rkb3V0LmZpbGVubygpKQorICAgICAgICBlcnJf
ZmggPSBtc3ZjcnQuZ2V0X29zZmhhbmRsZShzZWxmLl9wcm9jLnN0ZGVyci5maWxlbm8oKSkKKyAg
ICAgICAgd2hpbGUgKHNlbGYuX3Byb2MucG9sbCgpIGlzIE5vbmUpIGFuZCAobm93IDwgZGVhZGxp
bmUpOgorICAgICAgICAgICAgb3V0cHV0ID0gc2VsZi5fbm9uX2Jsb2NraW5nX3JlYWRfd2luMzIo
b3V0X2ZoKQorICAgICAgICAgICAgZXJyb3IgPSBzZWxmLl9ub25fYmxvY2tpbmdfcmVhZF93aW4z
MihlcnJfZmgpCisgICAgICAgICAgICBpZiBvdXRwdXQgb3IgZXJyb3I6CisgICAgICAgICAgICAg
ICAgaWYgb3V0cHV0OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9vdXRwdXQgKz0gb3V0cHV0
CisgICAgICAgICAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Vy
cm9yICs9IGVycm9yCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICB0aW1lLnNs
ZWVwKDAuMDEpCisgICAgICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQorICAgICAgICByZXR1cm4K
KworICAgIGRlZiBfbm9uX2Jsb2NraW5nX3JlYWRfd2luMzIoc2VsZiwgaGFuZGxlKToKKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgXywgYXZhaWwsIF8gPSB3aW4zMnBpcGUuUGVla05hbWVkUGlw
ZShoYW5kbGUsIDApCisgICAgICAgICAgICBpZiBhdmFpbCA+IDA6CisgICAgICAgICAgICAgICAg
XywgYnVmID0gd2luMzJmaWxlLlJlYWRGaWxlKGhhbmRsZSwgYXZhaWwsIE5vbmUpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGJ1ZgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAg
ICAgICAgaWYgZVswXSBub3QgaW4gKDEwOSwgZXJybm8uRVNIVVRET1dOKTogICMgMTA5ID09IHdp
bjMyIEVSUk9SX0JST0tFTl9QSVBFCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgcmV0
dXJuIE5vbmUKKworICAgIGRlZiBoYXNfY3Jhc2hlZChzZWxmKToKKyAgICAgICAgaWYgbm90IHNl
bGYuX2NyYXNoZWQgYW5kIHNlbGYucG9sbCgpOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygnVGhp
cyB0ZXN0IG1hcmtlZCBhcyBhIGNyYXNoIGJlY2F1c2Ugb2YgZmFpbHVyZSB0byBwb2xsIHRoZSBz
ZXJ2ZXIgcHJvY2Vzcy4nKQorICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUKKyAgICAg
ICAgICAgIHNlbGYuX2hhbmRsZV9wb3NzaWJsZV9pbnRlcnJ1cHQoKQorICAgICAgICByZXR1cm4g
c2VsZi5fY3Jhc2hlZAorCisgICAgIyBUaGlzIHJlYWQgZnVuY3Rpb24gaXMgYSBiaXQgb2RkbHkt
ZGVzaWduZWQsIGFzIGl0IHBvbGxzIGJvdGggc3Rkb3V0IGFuZCBzdGRlcnIsIHlldAorICAgICMg
b25seSByZWFkcy9yZXR1cm5zIGZyb20gb25lIG9mIHRoZW0gKGJ1ZmZlcmluZyBib3RoIGluIGxv
Y2FsIHNlbGYuX291dHB1dC9zZWxmLl9lcnJvcikuCisgICAgIyBJdCBtaWdodCBiZSBjbGVhbmVy
IHRvIHBhc3MgaW4gdGhlIGZpbGUgZGVzY3JpcHRvciB0byBwb2xsIGluc3RlYWQuCisgICAgZGVm
IF9yZWFkKHNlbGYsIGRlYWRsaW5lLCBmZXRjaF9ieXRlc19mcm9tX2J1ZmZlcnNfY2FsbGJhY2sp
OgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgaWYgc2VsZi5oYXNfY3Jhc2hlZCgp
OgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgICAgIGlmIHRpbWUudGlt
ZSgpID4gZGVhZGxpbmU6CisgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX3RpbWVvdXQoKQor
ICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgICAgIGJ5dGVzID0gZmV0Y2hf
Ynl0ZXNfZnJvbV9idWZmZXJzX2NhbGxiYWNrKCkKKyAgICAgICAgICAgIGlmIGJ5dGVzIGlzIG5v
dCBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybiBieXRlcworCisgICAgICAgICAgICBpZiBz
ZWxmLl91c2Vfd2luMzJfYXBpczoKKyAgICAgICAgICAgICAgICBzZWxmLl93YWl0X2Zvcl9kYXRh
X2FuZF91cGRhdGVfYnVmZmVyc191c2luZ193aW4zMl9hcGlzKGRlYWRsaW5lKQorICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl93YWl0X2Zvcl9kYXRhX2FuZF91cGRhdGVf
YnVmZmVyc191c2luZ19zZWxlY3QoZGVhZGxpbmUpCisKKyAgICBkZWYgc3RhcnQoc2VsZik6Cisg
ICAgICAgIGlmIG5vdCBzZWxmLl9wcm9jOgorICAgICAgICAgICAgc2VsZi5fc3RhcnQoKQorCisg
ICAgZGVmIHN0b3Aoc2VsZiwgdGltZW91dF9zZWNzPTMuMCk6CisgICAgICAgIGlmIG5vdCBzZWxm
Ll9wcm9jOgorICAgICAgICAgICAgcmV0dXJuIChOb25lLCBOb25lKQorCisgICAgICAgICMgT25s
eSBib3RoZXIgdG8gY2hlY2sgZm9yIGxlYWtzIG9yIHN0ZGVyciBpZiB0aGUgcHJvY2VzcyBpcyBz
dGlsbCBydW5uaW5nLgorICAgICAgICBpZiBzZWxmLnBvbGwoKSBpcyBOb25lOgorICAgICAgICAg
ICAgc2VsZi5fcG9ydC5jaGVja19mb3JfbGVha3Moc2VsZi5uYW1lKCksIHNlbGYucGlkKCkpCisK
KyAgICAgICAgbm93ID0gdGltZS50aW1lKCkKKyAgICAgICAgaWYgc2VsZi5fcHJvYy5zdGRpbjoK
KyAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4uY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5f
cHJvYy5zdGRpbiA9IE5vbmUKKyAgICAgICAga2lsbGVkID0gRmFsc2UKKyAgICAgICAgaWYgdGlt
ZW91dF9zZWNzOgorICAgICAgICAgICAgZGVhZGxpbmUgPSBub3cgKyB0aW1lb3V0X3NlY3MKKyAg
ICAgICAgICAgIHdoaWxlIHNlbGYuX3Byb2MucG9sbCgpIGlzIE5vbmUgYW5kIHRpbWUudGltZSgp
IDwgZGVhZGxpbmU6CisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQorICAgICAgICAg
ICAgaWYgc2VsZi5fcHJvYy5wb2xsKCkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBfbG9nLndh
cm5pbmcoJ3N0b3BwaW5nICVzKHBpZCAlZCkgdGltZWQgb3V0LCBraWxsaW5nIGl0JyAlIChzZWxm
Ll9uYW1lLCBzZWxmLl9wcm9jLnBpZCkpCisKKyAgICAgICAgaWYgc2VsZi5fcHJvYy5wb2xsKCkg
aXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2tpbGwoKQorICAgICAgICAgICAga2lsbGVkID0g
VHJ1ZQorICAgICAgICAgICAgX2xvZy5kZWJ1Zygna2lsbGVkIHBpZCAlZCcgJSBzZWxmLl9wcm9j
LnBpZCkKKworICAgICAgICAjIHJlYWQgYW55IHJlbWFpbmluZyBkYXRhIG9uIHRoZSBwaXBlcyBh
bmQgcmV0dXJuIGl0LgorICAgICAgICBpZiBub3Qga2lsbGVkOgorICAgICAgICAgICAgaWYgc2Vs
Zi5fdXNlX3dpbjMyX2FwaXM6CisgICAgICAgICAgICAgICAgc2VsZi5fd2FpdF9mb3JfZGF0YV9h
bmRfdXBkYXRlX2J1ZmZlcnNfdXNpbmdfd2luMzJfYXBpcyhub3cpCisgICAgICAgICAgICBlbHNl
OgorICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRfZm9yX2RhdGFfYW5kX3VwZGF0ZV9idWZmZXJz
X3VzaW5nX3NlbGVjdChub3csIHN0b3BwaW5nPVRydWUpCisgICAgICAgIG91dCwgZXJyID0gc2Vs
Zi5fb3V0cHV0LCBzZWxmLl9lcnJvcgorICAgICAgICBzZWxmLl9yZXNldCgpCisgICAgICAgIHJl
dHVybiAob3V0LCBlcnIpCisKKyAgICBkZWYga2lsbChzZWxmKToKKyAgICAgICAgc2VsZi5zdG9w
KDAuMCkKKworICAgIGRlZiBfa2lsbChzZWxmKToKKyAgICAgICAgc2VsZi5faG9zdC5leGVjdXRp
dmUua2lsbF9wcm9jZXNzKHNlbGYuX3Byb2MucGlkKQorICAgICAgICBpZiBzZWxmLl9wcm9jLnBv
bGwoKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3Byb2Mud2FpdCgpCisKKyAgICBk
ZWYgcmVwbGFjZV9vdXRwdXRzKHNlbGYsIHN0ZG91dCwgc3RkZXJyKToKKyAgICAgICAgYXNzZXJ0
IHNlbGYuX3Byb2MKKyAgICAgICAgaWYgc3Rkb3V0OgorICAgICAgICAgICAgc2VsZi5fcHJvYy5z
dGRvdXQuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRvdXQgPSBzdGRvdXQKKyAg
ICAgICAgaWYgc3RkZXJyOgorICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRlcnIuY2xvc2UoKQor
ICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRlcnIgPSBzdGRlcnIKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9zaW11bGF0b3JfcHJvY2Vzcy5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2ltdWxhdG9yX3Byb2Nlc3MucHkJKG5vbmV4aXN0ZW50
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNzLnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIzIEBACisjIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
KyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisj
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGVycm5vCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9z
CitpbXBvcnQgdGltZQorCitmcm9tIHdlYmtpdHB5LnBvcnQuc2VydmVyX3Byb2Nlc3NfYmFzZSBp
bXBvcnQgU2VydmVyUHJvY2Vzc0Jhc2UKKworCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19u
YW1lX18pCisKKworY2xhc3MgZmlmb1Byb2Nlc3Mob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBzdGRpbl9oYW5kbGUsIHN0ZG91dF9oYW5kbGUsIHN0ZGVycl9oYW5kbGUsIHBpZCk6
CisgICAgICAgIHNlbGYuc3RkaW4gPSBvcy5mZG9wZW4oc3RkaW5faGFuZGxlLCAidyIpCisgICAg
ICAgIHNlbGYuc3Rkb3V0ID0gb3MuZmRvcGVuKHN0ZG91dF9oYW5kbGUsICJyYiIpCisgICAgICAg
IHNlbGYuc3RkZXJyID0gb3MuZmRvcGVuKHN0ZGVycl9oYW5kbGUsICJyYiIpCisgICAgICAgIHNl
bGYucGlkID0gcGlkCisKKyAgICBkZWYgcG9sbChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgb3Mua2lsbChzZWxmLnBpZCwgMCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGVycjoK
KyAgICAgICAgICAgIGlmIGVyci5lcnJubyA9PSBlcnJuby5FU1JDSDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMQorICAgICAgICAgICAgZWxpZiBlcnIuZXJybm8gPT0gZXJybm8uRVBFUk06Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgcHJpbnQgLTEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisK
KyAgICAjIFBlciBzdWJwcm9jZXNzJ3MgZG9jdW1lbnRhdGlvbiwgdGhpcyBtaW1pY2tzIGl0J3Mg
YmVoYXZpb3IKKyAgICBkZWYgd2FpdChzZWxmKToKKyAgICAgICAgd2hpbGUgbm90IHNlbGYucG9s
bCgpOgorICAgICAgICAgICAgdGltZS5zbGVlcCguMDEpCisgICAgICAgIHJldHVybiBzZWxmLnBv
bGwoKQorCisKK2NsYXNzIFNpbXVsYXRvclByb2Nlc3MoU2VydmVyUHJvY2Vzc0Jhc2UpOgorCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVudj1Ob25lLCB1bml2
ZXJzYWxfbmV3bGluZXM9RmFsc2UsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2g9RmFsc2UpOgorICAg
ICAgICBzdXBlcihTaW11bGF0b3JQcm9jZXNzLCBzZWxmKS5fX2luaXRfXyhwb3J0X29iaiwgbmFt
ZSwgY21kLCBlbnYsIHVuaXZlcnNhbF9uZXdsaW5lcywgdHJlYXRfbm9fZGF0YV9hc19jcmFzaCkK
KworICAgICAgICBmcm9tIHdlYmtpdHB5Lnhjb2RlLnNpbXVsYXRvciBpbXBvcnQgU2ltdWxhdG9y
ICAjIEF2b2lkIGNpcmN1bGFyIGltcG9ydAorICAgICAgICBzZWxmLl9zaW11bGF0b3JfbWFuYWdl
ciA9IFNpbXVsYXRvcihwb3J0X29iai5ob3N0KQorCisgICAgICAgIHNlbGYuX2J1bmRsZUlEID0g
c2VsZi5fcG9ydC5hcHBfaWRlbnRpZmllcl9mcm9tX2J1bmRsZShzZWxmLl9jbWRbMV0pCisgICAg
ICAgIHNlbGYuX2RldmljZSA9IHNlbGYuX3NpbXVsYXRvcl9tYW5hZ2VyLmZpbmRfZGV2aWNlX2J5
X3VkaWQoc2VsZi5fY21kWzBdKQorICAgICAgICBzZWxmLl9kZXZpY2UuaW5zdGFsbF9hcHAoc2Vs
Zi5fY21kWzFdKQorICAgICAgICBzZWxmLl9lbnZbJ0lQQ19JREVOVElGSUVSJ10gPSBzZWxmLl9i
dW5kbGVJRCArICItIiArIHNlbGYuX2RldmljZS51ZGlkCisKKyAgICAgICAgZmlsZV9sb2NhdGlv
biA9ICcvdG1wLycgKyBzZWxmLl9lbnZbJ0lQQ19JREVOVElGSUVSJ10KKyAgICAgICAgc2VsZi5f
aW5fcGF0aCA9IGZpbGVfbG9jYXRpb24gKyAnX0lOJworICAgICAgICBzZWxmLl9vdXRfcGF0aCA9
IGZpbGVfbG9jYXRpb24gKyAnX09VVCcKKyAgICAgICAgc2VsZi5fZXJyb3JfcGF0aCA9IGZpbGVf
bG9jYXRpb24gKyAnX0VSUk9SJworCisgICAgICAgIHNlbGYuX3Jlc2V0KCkKKworICAgIGRlZiBf
X3VubGlua19jaGVja19leGlzdHMoc2VsZiwgcGF0aCk6CisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIG9zLnVubGluayhwYXRoKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAg
ICAgICAgaWYgb3MucGF0aC5leGlzdHMocGF0aCk6CisgICAgICAgICAgICAgICAgcmFpc2UgT1NF
cnJvcigiQ291bGQgbm90IHVubGluayAnIiArIHBhdGggKyAiJywgdGhlIHRhcmdldCBwYXRoIGlz
IGEgZmlsZSBub3QgYSBwaXBlLiIpCisKKyAgICBkZWYgX3Jlc2V0KHNlbGYpOgorICAgICAgICBz
dXBlcihTaW11bGF0b3JQcm9jZXNzLCBzZWxmKS5fcmVzZXQoKQorCisgICAgICAgIHNlbGYuX191
bmxpbmtfY2hlY2tfZXhpc3RzKHNlbGYuX2luX3BhdGgpCisgICAgICAgIHNlbGYuX191bmxpbmtf
Y2hlY2tfZXhpc3RzKHNlbGYuX291dF9wYXRoKQorICAgICAgICBzZWxmLl9fdW5saW5rX2NoZWNr
X2V4aXN0cyhzZWxmLl9lcnJvcl9wYXRoKQorCisgICAgZGVmIF9zdGFydChzZWxmKToKKyAgICAg
ICAgb3MubWtmaWZvKHNlbGYuX2luX3BhdGgsIDA2MDApCisgICAgICAgIG9zLm1rZmlmbyhzZWxm
Ll9vdXRfcGF0aCwgMDYwMCkKKyAgICAgICAgb3MubWtmaWZvKHNlbGYuX2Vycm9yX3BhdGgsIDA2
MDApCisKKyAgICAgICAgc2VsZi5fcGlkID0gc2VsZi5fZGV2aWNlLmxhdW5jaF9hcHAoc2VsZi5f
YnVuZGxlSUQsIHNlbGYuX2NtZFszOl0sIGVudj1zZWxmLl9lbnYpCisKKyAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgc2VsZi5fc3Rkb3V0ID0gb3Mub3BlbihzZWxmLl9vdXRfcGF0aCwgb3MuT19S
RE9OTFkgfCBvcy5PX05PTkJMT0NLKQorICAgICAgICAgICAgc2VsZi5fc3RkZXJyID0gb3Mub3Bl
bihzZWxmLl9lcnJvcl9wYXRoLCBvcy5PX1JET05MWSB8IG9zLk9fTk9OQkxPQ0spCisgICAgICAg
IGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQor
CisgICAgICAgIGRlYWRsaW5lID0gdGltZS50aW1lKCkgKyAzCisgICAgICAgIHdoaWxlIG5vdCBz
ZWxmLl9zdGRpbiBhbmQgZGVhZGxpbmUgPiB0aW1lLnRpbWUoKToKKyAgICAgICAgICAgIHRyeToK
KyAgICAgICAgICAgICAgICBzZWxmLl9zdGRpbiA9IG9zLm9wZW4oc2VsZi5faW5fcGF0aCwgb3Mu
T19XUk9OTFkgfCBvcy5PX05PTkJMT0NLKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMg
ZToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIG5vdCBzZWxmLl9zdGRpbjoKKyAg
ICAgICAgICAgIHNlbGYuX2NyYXNoZWQgPSBUcnVlCisKKyAgICAgICAgc2VsZi5fcHJvYyA9IGZp
Zm9Qcm9jZXNzKHNlbGYuX3N0ZGluLCBzZWxmLl9vdXRfcGF0aCwgc2VsZi5fZXJyb3JfcGF0aCwg
c2VsZi5fcGlkKQorCisgICAgZGVmIF9raWxsKHNlbGYpOgorICAgICAgICBzZWxmLl9kZXZpY2Uu
dGVybWluYXRlX2FwcChlbGYuX2J1bmRsZUlEKQorICAgICAgICBzdXBlcihTaW11bGF0b3JQcm9j
ZXNzLCBzZWxmKS5fa2lsbCgpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3Np
bXVsYXRvci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3Np
bXVsYXRvci5weQkocmV2aXNpb24gMjEwNzM1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS94
Y29kZS9zaW11bGF0b3IucHkJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw3ICsxNjcsNyBAQCBjbGFz
cyBEZXZpY2Uob2JqZWN0KToKICAgICBSZXByZXNlbnRzIGEgQ29yZVNpbXVsYXRvciBkZXZpY2Ug
dW5kZXJuZWF0aCBhIHJ1bnRpbWUKICAgICAiIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBu
YW1lLCB1ZGlkLCBhdmFpbGFibGUsIHJ1bnRpbWUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBu
YW1lLCB1ZGlkLCBhdmFpbGFibGUsIHJ1bnRpbWUsIGhvc3Q9Tm9uZSk6CiAgICAgICAgICIiIgog
ICAgICAgICA6cGFyYW0gbmFtZTogVGhlIGRldmljZSBuYW1lCiAgICAgICAgIDp0eXBlIG5hbWU6
IHN0cgpAQCAtMTc4LDYgKzE3OCw3IEBAIGNsYXNzIERldmljZShvYmplY3QpOgogICAgICAgICA6
cGFyYW0gcnVudGltZTogVGhlIGlPUyBTaW11bGF0b3IgcnVudGltZSB0aGF0IGhvc3RzIHRoaXMg
ZGV2aWNlCiAgICAgICAgIDp0eXBlIHJ1bnRpbWU6IFJ1bnRpbWUKICAgICAgICAgIiIiCisgICAg
ICAgIHNlbGYuX2hvc3QgPSBob3N0IG9yIEhvc3QoKQogICAgICAgICBzZWxmLm5hbWUgPSBuYW1l
CiAgICAgICAgIHNlbGYudWRpZCA9IHVkaWQKICAgICAgICAgc2VsZi5hdmFpbGFibGUgPSBhdmFp
bGFibGUKQEAgLTI2MCw2ICsyNjEsMjkgQEAgY2xhc3MgRGV2aWNlKG9iamVjdCk6CiAgICAgICAg
IGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjoKICAgICAgICAgICAgIHJhaXNl
IFJ1bnRpbWVFcnJvcignInhjcnVuIHNpbWN0bCBlcmFzZSIgZmFpbGVkOiBkZXZpY2Ugc3RhdGUg
aXMge30nLmZvcm1hdChTaW11bGF0b3IuZGV2aWNlX3N0YXRlKHVkaWQpKSkKIAorICAgIGRlZiBp
bnN0YWxsX2FwcChzZWxmLCBhcHBfcGF0aCk6CisgICAgICAgIGlmIHNlbGYuX2hvc3QuZXhlY3V0
aXZlLnJ1bl9jb21tYW5kKFsneGNydW4nLCAnc2ltY3RsJywgJ2luc3RhbGwnLCBzZWxmLnVkaWQs
IGFwcF9wYXRoXSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKSA+IDA6CisgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBsYXVuY2hfYXBwKHNlbGYs
IGJ1bmRsZV9pZGVudGlmaWVyLCBhcmdzLCBlbnY9Tm9uZSk6CisgICAgICAgIHRyYW5zZmVyZWRF
bnZpcm9ubWVudCA9IHt9CisgICAgICAgIGlmIGVudjoKKyAgICAgICAgICAgIGZvciB2YWx1ZSBp
biBlbnY6CisgICAgICAgICAgICAgICAgaWYgbm90ICJTSU1DVExfQ0hJTERfIiBpbiB2YWx1ZToK
KyAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXJlZEVudmlyb25tZW50WydTSU1DVExfQ0hJTERf
JyArIHZhbHVlXSA9IGVudlt2YWx1ZV0KKyAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXJlZEVu
dmlyb25tZW50W3ZhbHVlXSA9IGVudlt2YWx1ZV0KKyAgICAgICAgc3RyID0gc2VsZi5faG9zdC5l
eGVjdXRpdmUucnVuX2NvbW1hbmQoWyd4Y3J1bicsICdzaW1jdGwnLCAnbGF1bmNoJywgc2VsZi51
ZGlkLCBidW5kbGVfaWRlbnRpZmllcl0gKyBhcmdzLCBlbnY9dHJhbnNmZXJlZEVudmlyb25tZW50
KQorICAgICAgICBpZiBub3QgYnVuZGxlX2lkZW50aWZpZXIgaW4gc3RyOgorICAgICAgICAgICAg
cmV0dXJuIE5vbmUKKyAgICAgICAgc3RyID0gc3RyLnJzdHJpcCgnXG4nKS5zcGxpdCgpWzFdCisg
ICAgICAgIHJldHVybiBpbnQoc3RyKQorCisgICAgZGVmIHRlcm1pbmF0ZV9hcHAoc2VsZiwgYnVu
ZGxlX2lkZW50aWZpZXIpOgorICAgICAgICBpZiBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5ydW5fY29t
bWFuZChbJ3hjcnVuJywgJ3NpbWN0bCcsICd0ZXJtaW5hdGUnLCBzZWxmLnVkaWQsIGJ1bmRsZV9p
ZGVudGlmaWVyXSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKSA+IDA6CisgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKwogICAgIGRlZiBfX2VxX18oc2VsZiwgb3Ro
ZXIpOgogICAgICAgICByZXR1cm4gc2VsZi51ZGlkID09IG90aGVyLnVkaWQKIApAQCAtNDc3LDcg
KzUwMSw4IEBAIGNsYXNzIFNpbXVsYXRvcihvYmplY3QpOgogICAgICAgICAgICAgICAgIGRldmlj
ZSA9IERldmljZShuYW1lPWRldmljZV9tYXRjaC5ncm91cCgnbmFtZScpLnJzdHJpcCgpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZGlkPWRldmljZV9tYXRjaC5ncm91cCgndWRp
ZCcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGU9ZGV2aWNlX21h
dGNoLmdyb3VwKCdhdmFpbGFiaWxpdHknKSBpcyBOb25lLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBydW50aW1lPWN1cnJlbnRfcnVudGltZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcnVudGltZT1jdXJyZW50X3J1bnRpbWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhvc3Q9c2VsZi5faG9zdCkKICAgICAgICAgICAgICAgICBjdXJyZW50X3J1
bnRpbWUuZGV2aWNlcy5hcHBlbmQoZGV2aWNlKQogCiAgICAgZGVmIGRldmljZV90eXBlKHNlbGYs
IG5hbWU9Tm9uZSwgaWRlbnRpZmllcj1Ob25lKToK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298791</attachid>
            <date>2017-01-13 15:19:41 -0800</date>
            <delta_ts>2017-01-13 15:29:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165927-20170113151759.patch</filename>
            <type>text/plain</type>
            <size>53325</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMDc0MikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU5IEBACisyMDE3LTAxLTEzICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBSZW1vdmluZyBMYXlvdXRUZXN0UmVsYXkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTkyNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTGF5b3V0VGVzdFJlbGF5OiBSZW1vdmVk
IExheW91dFRlc3RSZWxheS4KKyAgICAgICAgKiBNYWtlZmlsZTogUmVtb3ZlZCBMYXlvdXRUZXN0
UmVsYXkgcmVmZXJlbmNlcy4KKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLXdlYmtpdDogUmVtb3Zl
ZCBMYXlvdXRUZXN0UmVsYXkgcmVmZXJlbmNlcy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3BvcnQvYmFzZS5weToKKyAgICAgICAgKFBvcnQuX19pbml0X18pOiBBZGRlZCBfdGVzdF9ydW5u
ZXJfcHJvY2Vzc19jb25zdHJ1Y3Rvci4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQv
ZGFyd2luLnB5OgorICAgICAgICAoRGFyd2luUG9ydC5leHRyYWN0X2J1bmRsZV9JRCk6IEFkZGVk
IGZ1bmN0aW9uIHRvIGV4dHJhY3QgYnVuZGxlIElEIGZyb20gcGxpc3QuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weToKKyAgICAgICAgKERyaXZlci5fc2V0dXBfZW52
aXJvbl9mb3JfZHJpdmVyKTogU3dhcHBlZCBfc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgZm9y
IF90ZXN0X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yLgorICAgICAgICAoSU9TU2ltdWxhdG9y
RHJpdmVyLmNtZF9saW5lKTogUmVtb3ZlZCB1bm5lZWRlZCBhcmd1bWVudHMuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlcl91bml0dGVzdC5weToKKyAgICAgICAgKERyaXZl
clRlc3QudGVzdF9zdG9wX2NsZWFuc191cF9wcm9wZXJseSk6IFNldCBfdGVzdF9ydW5uZXJfcHJv
Y2Vzc19jb25zdHJ1Y3RvciBmb3IgdGVzdGluZy4KKyAgICAgICAgKERyaXZlclRlc3QudGVzdF90
d29fc3RhcnRzX2NsZWFuc191cF9wcm9wZXJseSk6IERpdHRvLgorICAgICAgICAoRHJpdmVyVGVz
dC50ZXN0X3N0YXJ0X2FjdHVhbGx5X3N0YXJ0cyk6IERpdHRvLgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvcG9ydC9pb3MucHk6CisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0KTogUmVtb3Zl
IHJlbGF5X25hbWUuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9faW5pdF9fKTogIFNldCBf
dGVzdF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciBmb3IgSU9TU2ltdWxhdG9ycy4KKyAgICAg
ICAgKElPU1NpbXVsYXRvclBvcnQucmVsYXlfcGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChJT1NT
aW11bGF0b3JQb3J0Ll9jaGVja19yZWxheSk6IFVzZSBiYXNlIGNsYXNzLgorICAgICAgICAoSU9T
U2ltdWxhdG9yUG9ydC5fY2hlY2tfcG9ydF9idWlsZCk6IERlbGV0ZWQuCisgICAgICAgIChJT1NT
aW11bGF0b3JQb3J0Ll9idWlsZF9yZWxheSk6IERlbGV0ZWQuCisgICAgICAgIChJT1NTaW11bGF0
b3JQb3J0Ll9idWlsZF9kcml2ZXIpOiBEZWxldGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvcG9ydC9pb3NfdW5pdHRlc3QucHk6CisgICAgICAgIChpb3NUZXN0LnRlc3RfMzJiaXQpOiBV
cGRhdGUgdGVzdC4KKyAgICAgICAgKGlvc1Rlc3QudGVzdF82NGJpdCk6IFVwZGF0ZSB0ZXN0Lgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weToKKyAgICAg
ICAgKFNlcnZlclByb2Nlc3MpOiBNb3ZlZCBtb3N0IGZ1bmN0aW9uYWxpdHkgdG8gU2VydmVyUHJv
Y2Vzc0Jhc2UuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLl9faW5pdF9fKTogQ2FsbCBTZXJ2ZXJQ
cm9jZXNzQmFzZSBpbml0aWFsaXplci4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQv
c2VydmVyX3Byb2Nlc3NfYmFzZS5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9wb3J0L3NlcnZlcl9wcm9jZXNzX2Jhc2UucHk6IEFkZGVkLgorICAgICAgICAoU2VydmVyUHJv
Y2Vzc0Jhc2UpOiBNb3ZlZCBtb3N0IG9mIHNlcnZlcl9wcm9jZXNzIGhlcmUuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNzLnB5OiBBZGRlZC4KKyAgICAg
ICAgKGZpZm9Qcm9jZXNzKTogQ29udGFpbnMgc3VicHJvY2VzcyBmdW5jdGlvbnMgdXNlZCBpbiBT
aW11bGF0b3JQcm9jZXNzLgorICAgICAgICAoZmlmb1Byb2Nlc3MuX19pbml0X18pOiBDb25zdHJ1
Y3Qgc3RkaW4sIHN0ZG91dCBhbmQgc3RkZXJyIGZpbGVzIGZyb20gaGFuZGxlcy4KKyAgICAgICAg
KGZpZm9Qcm9jZXNzLnBvbGwpOiBDaGVjayBpZiB0aGUgcHJvY2VzcyBpcyBzdGlsbCBydW5uaW5n
LgorICAgICAgICAoZmlmb1Byb2Nlc3Mud2FpdCk6IFdhaXQgZm9yIHRoZSBwcm9jZXNzIHRvIGNs
b3NlLgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcyk6CisgICAgICAgIChTaW11bGF0b3JQcm9j
ZXNzLl9faW5pdF9fKTogSW5zdGFsbCBhcHAgb24gZGV2aWNlLCBzZXR1cCBlbnZpcm9ubWVudC4K
KyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX191bmxpbmtfY2hlY2tfZXhpc3RzKTogVW5saW5r
IGZpbGUsIG9ubHkgdGhyb3cgZXJyb3IgaWYgdGhlIGZpbGUgZXhpc3RzIGFmdGVyIHVubGluay4K
KyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX3Jlc2V0KTogVGVhciBkb3duIGZpbGVzLgorICAg
ICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5fc3RhcnQpOiBMYXVuY2ggYXBwIGFuZCBzZXR1cCBmaWZv
cy4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX2tpbGwpOiBBdHRlbXB0IHRvIHRlcm1pbmF0
ZSBhcHAgYmVmb3JlIGtpbGxpbmcgcHJvY2Vzcy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3hjb2RlL3NpbXVsYXRvci5weToKKyAgICAgICAgKERldmljZS5fX2luaXRfXyk6IEFkZCBob3N0
IHRvIGRldmljZS4KKyAgICAgICAgKERldmljZS5pbnN0YWxsX2FwcCk6ICBJbnN0YWxsIGFwcCBm
cm9tIGxvY2F0aW9uIG9udG8gZGV2aWNlLgorICAgICAgICAoRGV2aWNlLmxhdW5jaF9hcHApOiBM
YXVuY2ggYXBwIHdpdGggYnVuZGxlIElELgorICAgICAgICAoRGV2aWNlLnRlcm1pbmF0ZV9hcHAp
OiBUZXJtaW5hdGUgdGhlIGFwcCB3aXRoIGJ1bmRsZSBJRC4KKyAgICAgICAgKFNpbXVsYXRvci5f
cGFyc2VfZGV2aWNlcyk6IFBhc3MgaG9zdCB0byBkZXZpY2Ugd2hlbiBjb25zdHJ1Y3RpbmcuCisK
IDIwMTctMDEtMTMgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAg
ICAgICAgcnVuLWpzYy1iZW5jaG1hcmtzJyBlY2hvIHNob3VsZCBoYXZlIC1lIG9wdGlvbgpJbmRl
eDogVG9vbHMvTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTWFrZWZpbGUJKHJldmlzaW9u
IDIxMDczNSkKKysrIFRvb2xzL01ha2VmaWxlCSh3b3JraW5nIGNvcHkpCkBAIC03LDkgKzcsNiBA
QCBpZm5lcSAoLCQoU0RLUk9PVCkpCiAJaWZuZXEgKCwkKGZpbmRzdHJpbmcgaXBob25lLCQoU0RL
Uk9PVCkpKQogCQlNT0RVTEVTICs9IE1vYmlsZU1pbmlCcm93c2VyCiAJZW5kaWYKLQlpZmVxICgs
JChET19OT1RfQlVJTERfTEFZT1VUX1RFU1RfUkVMQVkpKQotCQlNT0RVTEVTICs9IExheW91dFRl
c3RSZWxheQotCWVuZGlmCiBlbmRpZgogCiBhbGw6CkluZGV4OiBUb29scy9TY3JpcHRzL2J1aWxk
LXdlYmtpdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAkocmV2aXNp
b24gMjEwNzM1KQorKysgVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQJKHdvcmtpbmcgY29weSkK
QEAgLTIwMCwxMCArMjAwLDYgQEAgaWYgKGlzQXBwbGVNYWNXZWJLaXQoKSkgewogICAgICAgICBw
dXNoIEBjb3B5TGlicmFyaWVzQXJncywgcHJvZHVjdERpcigpOwogICAgICAgICBwcmludChqb2lu
KCIgIiwgQGNvcHlMaWJyYXJpZXNBcmdzKSAuICJcbiIpOwogICAgICAgICAoc3lzdGVtKEBjb3B5
TGlicmFyaWVzQXJncykgPT0gMCkgb3IgZGllOwotCi0gICAgICAgIGlmICh3aWxsVXNlSU9TU2lt
dWxhdG9yU0RLKCkpIHsKLSAgICAgICAgICAgIChzeXN0ZW0oInBlcmwiLCAiVG9vbHMvU2NyaXB0
cy9idWlsZC1sYXlvdXR0ZXN0cmVsYXkiLCBhcmd1bWVudHNGb3JDb25maWd1cmF0aW9uKCkpID09
IDApIG9yIGRpZTsKLSAgICAgICAgfQogICAgIH0KIAogICAgICMgQnVpbGQgVG9vbHMgbmVlZGVk
IGZvciBBcHBsZSBwb3J0cwpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2Uu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkJKHJl
dmlzaW9uIDIxMDczNSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0xMzEsNiArMTMxLDcgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAg
ICAgICBzZWxmLl93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgPSBOb25lCiAgICAgICAgIHNlbGYu
X2ltYWdlX2RpZmZlciA9IE5vbmUKICAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3NfY29uc3Ry
dWN0b3IgPSBzZXJ2ZXJfcHJvY2Vzcy5TZXJ2ZXJQcm9jZXNzICAjIG92ZXJyaWRhYmxlIGZvciB0
ZXN0aW5nCisgICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBz
ZXJ2ZXJfcHJvY2Vzcy5TZXJ2ZXJQcm9jZXNzCiAKICAgICAgICAgaWYgbm90IGhhc2F0dHIob3B0
aW9ucywgJ2NvbmZpZ3VyYXRpb24nKSBvciBub3Qgb3B0aW9ucy5jb25maWd1cmF0aW9uOgogICAg
ICAgICAgICAgc2VsZi5zZXRfb3B0aW9uX2RlZmF1bHQoJ2NvbmZpZ3VyYXRpb24nLCBzZWxmLmRl
ZmF1bHRfY29uZmlndXJhdGlvbigpKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2Rhcndpbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFy
d2luLnB5CShyZXZpc2lvbiAyMTA3MzUpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
ZGFyd2luLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsMyArMTc0LDExIEBAIGNsYXNzIERhcndp
blBvcnQoQXBwbGVQb3J0KToKICAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yOgogICAgICAgICAg
ICAgX2xvZy53YXJuKCJ4Y3J1biBmYWlsZWQ7IGZhbGxpbmcgYmFjayB0byAnJXMnLiIgJSBmYWxs
YmFjaykKICAgICAgICAgICAgIHJldHVybiBmYWxsYmFjaworCisgICAgZGVmIGFwcF9pZGVudGlm
aWVyX2Zyb21fYnVuZGxlKHNlbGYsIGFwcCk6CisgICAgICAgIHBsaXN0X3BhdGggPSBhcHAgKyAn
L0luZm8ucGxpc3QnCisgICAgICAgIGlmIG5vdCBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhwbGlz
dF9wYXRoKToKKyAgICAgICAgICAgIHBsaXN0X3BhdGggPSBwbGlzdF9wYXRoID0gYXBwICsgJy9D
b250ZW50cy9JbmZvLnBsaXN0JworICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZXN5c3RlbS5leGlz
dHMocGxpc3RfcGF0aCk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4g
c2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsnL3Vzci9saWJleGVjL1BsaXN0QnVkZHknLCAn
LWMnLCAnUHJpbnQgQ0ZCdW5kbGVJZGVudGlmaWVyJywgcGxpc3RfcGF0aF0pLnJzdHJpcCgpCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkJKHJldmlzaW9uIDIxMDczNSkK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkJKHdvcmtpbmcgY29weSkK
QEAgLTEzOCw3ICsxMzgsNyBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAgICAgICAgc2VsZi5f
ZHJpdmVyX3VzZXJfZGlyZWN0b3J5X3N1ZmZpeCA9IE5vbmUKICAgICAgICAgc2VsZi5fZHJpdmVy
X3VzZXJfY2FjaGVfZGlyZWN0b3J5ID0gTm9uZQogCi0gICAgICAgICMgV2ViS2l0VGVzdFJ1bm5l
ci9MYXlvdXRUZXN0UmVsYXkgY2FuIHJlcG9ydCBiYWNrIHN1YnByb2Nlc3MgY3Jhc2hlcyBieSBw
cmludGluZworICAgICAgICAjIFdlYktpdFRlc3RSdW5uZXIgY2FuIHJlcG9ydCBiYWNrIHN1YnBy
b2Nlc3MgY3Jhc2hlcyBieSBwcmludGluZwogICAgICAgICAjICIjQ1JBU0hFRCAtIFBST0NFU1NO
QU1FIi4gIFNpbmNlIHRob3NlIGNhbiBoYXBwZW4gYXQgYW55IHRpbWUgYW5kIFNlcnZlclByb2Nl
c3MKICAgICAgICAgIyB3b24ndCBiZSBhd2FyZSBvZiB0aGVtIChzaW5jZSB0aGUgYWN0dWFsIHRv
b2wgZGlkbid0IGNyYXNoLCBqdXN0IGEgc3VicHJvY2VzcykKICAgICAgICAgIyB3ZSByZWNvcmQg
dGhlIGNyYXNoZWQgc3VicHJvY2VzcyBuYW1lIGhlcmUuCkBAIC0zMjcsNyArMzI3LDYgQEAgY2xh
c3MgRHJpdmVyKG9iamVjdCk6CiAKICAgICBkZWYgX3NldHVwX2Vudmlyb25fZm9yX2RyaXZlcihz
ZWxmLCBlbnZpcm9ubWVudCk6CiAgICAgICAgIGJ1aWxkX3Jvb3RfcGF0aCA9IHN0cihzZWxmLl9w
b3J0Ll9idWlsZF9wYXRoKCkpCi0gICAgICAgICMgRklYTUU6IERZTERfKiB2YXJpYWJsZXMgc2hv
dWxkIGJlIE1hYy1vbmx5LiBFdmVuIGlPUyBTaW11bGF0b3IgZG9lc24ndCBuZWVkIHRoZW0sIGFz
IExheW91dFRlc3RSZWxheSBpcyBhIGhvc3QgYmluYXJ5LgogICAgICAgICBzZWxmLl9hcHBlbmRf
ZW52aXJvbm1lbnRfdmFyaWFibGVfcGF0aChlbnZpcm9ubWVudCwgJ0RZTERfTElCUkFSWV9QQVRI
JywgYnVpbGRfcm9vdF9wYXRoKQogICAgICAgICBzZWxmLl9hcHBlbmRfZW52aXJvbm1lbnRfdmFy
aWFibGVfcGF0aChlbnZpcm9ubWVudCwgJ19fWFBDX0RZTERfTElCUkFSWV9QQVRIJywgYnVpbGRf
cm9vdF9wYXRoKQogICAgICAgICBzZWxmLl9hcHBlbmRfZW52aXJvbm1lbnRfdmFyaWFibGVfcGF0
aChlbnZpcm9ubWVudCwgJ0RZTERfRlJBTUVXT1JLX1BBVEgnLCBidWlsZF9yb290X3BhdGgpCkBA
IC0zNjksNyArMzY4LDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgIGVudmlyb25t
ZW50ID0gc2VsZi5fc2V0dXBfZW52aXJvbl9mb3JfdGVzdCgpCiAgICAgICAgIHNlbGYuX2NyYXNo
ZWRfcHJvY2Vzc19uYW1lID0gTm9uZQogICAgICAgICBzZWxmLl9jcmFzaGVkX3BpZCA9IE5vbmUK
LSAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3MgPSBzZWxmLl9wb3J0Ll9zZXJ2ZXJfcHJvY2Vz
c19jb25zdHJ1Y3RvcihzZWxmLl9wb3J0LCBzZWxmLl9zZXJ2ZXJfbmFtZSwgc2VsZi5jbWRfbGlu
ZShwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyksIGVudmlyb25tZW50KQorICAgICAgICBzZWxm
Ll9zZXJ2ZXJfcHJvY2VzcyA9IHNlbGYuX3BvcnQuX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3Ry
dWN0b3Ioc2VsZi5fcG9ydCwgc2VsZi5fc2VydmVyX25hbWUsIHNlbGYuY21kX2xpbmUocGl4ZWxf
dGVzdHMsIHBlcl90ZXN0X2FyZ3MpLCBlbnZpcm9ubWVudCkKICAgICAgICAgc2VsZi5fc2VydmVy
X3Byb2Nlc3Muc3RhcnQoKQogCiAgICAgZGVmIF9ydW5fcG9zdF9zdGFydF90YXNrcyhzZWxmKToK
QEAgLTYxMSwyMSArNjEwLDE2IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogICAgICAgICByZXR1
cm4gVHJ1ZQogCiAKLSMgRklYTUU6IHRoaXMgc2hvdWxkIGJlIGFic3RyYWN0ZWQgb3V0IHZpYSB0
aGUgUG9ydCBzdWJjbGFzcyBzb21laG93LgogY2xhc3MgSU9TU2ltdWxhdG9yRHJpdmVyKERyaXZl
cik6CiAgICAgZGVmIGNtZF9saW5lKHNlbGYsIHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKToK
ICAgICAgICAgY21kID0gc3VwZXIoSU9TU2ltdWxhdG9yRHJpdmVyLCBzZWxmKS5jbWRfbGluZShw
aXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncykKLSAgICAgICAgcmVsYXlfdG9vbCA9IHNlbGYuX3Bv
cnQucmVsYXlfcGF0aAogICAgICAgICBkdW1wX3Rvb2wgPSBjbWRbMF0KICAgICAgICAgZHVtcF90
b29sX2FyZ3MgPSBjbWRbMTpdCi0gICAgICAgIHByb2R1Y3RfZGlyID0gc2VsZi5fcG9ydC5fYnVp
bGRfcGF0aCgpCiAgICAgICAgIHJlbGF5X2FyZ3MgPSBbCi0gICAgICAgICAgICAnLWRldmVsb3Bl
ckRpcicsIHNlbGYuX3BvcnQuZGV2ZWxvcGVyX2RpciwKLSAgICAgICAgICAgICctdWRpZCcsIHNl
bGYuX3BvcnQuZGV2aWNlX2lkX2Zvcl93b3JrZXJfbnVtYmVyKHNlbGYuX3dvcmtlcl9udW1iZXIp
LAotICAgICAgICAgICAgJy1wcm9kdWN0RGlyJywgcHJvZHVjdF9kaXIsCi0gICAgICAgICAgICAn
LWFwcCcsIGR1bXBfdG9vbCwKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuZGV2aWNlX2lkX2Zvcl93
b3JrZXJfbnVtYmVyKHNlbGYuX3dvcmtlcl9udW1iZXIpLAorICAgICAgICAgICAgZHVtcF90b29s
LAogICAgICAgICBdCi0gICAgICAgIHJldHVybiBbcmVsYXlfdG9vbF0gKyByZWxheV9hcmdzICsg
WyctLSddICsgZHVtcF90b29sX2FyZ3MKKyAgICAgICAgcmV0dXJuIHJlbGF5X2FyZ3MgKyBbJy0t
J10gKyBkdW1wX3Rvb2xfYXJncwogCiAgICAgZGVmIF9zZXR1cF9lbnZpcm9uX2Zvcl9kcml2ZXIo
c2VsZiwgZW52aXJvbm1lbnQpOgogICAgICAgICBlbnZpcm9ubWVudFsnREVWRUxPUEVSX0RJUidd
ID0gc2VsZi5fcG9ydC5kZXZlbG9wZXJfZGlyCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvZHJpdmVyX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIxMDczNSkKKysrIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkK
QEAgLTI2NCw3ICsyNjQsNyBAQCBjbGFzcyBEcml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
IAogICAgIGRlZiB0ZXN0X3N0b3BfY2xlYW5zX3VwX3Byb3Blcmx5KHNlbGYpOgogICAgICAgICBw
b3J0ID0gVGVzdFdlYktpdFBvcnQoKQotICAgICAgICBwb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25z
dHJ1Y3RvciA9IE1vY2tTZXJ2ZXJQcm9jZXNzCisgICAgICAgIHBvcnQuX3Rlc3RfcnVubmVyX3By
b2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJvY2VzcwogICAgICAgICBkcml2ZXIgPSBE
cml2ZXIocG9ydCwgMCwgcGl4ZWxfdGVzdHM9VHJ1ZSkKICAgICAgICAgZHJpdmVyLnN0YXJ0KFRy
dWUsIFtdKQogICAgICAgICBsYXN0X3RtcGRpciA9IHBvcnQuX2ZpbGVzeXN0ZW0ubGFzdF90bXBk
aXIKQEAgLTI3NCw3ICsyNzQsNyBAQCBjbGFzcyBEcml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKIAogICAgIGRlZiB0ZXN0X3R3b19zdGFydHNfY2xlYW5zX3VwX3Byb3Blcmx5KHNlbGYpOgog
ICAgICAgICBwb3J0ID0gVGVzdFdlYktpdFBvcnQoKQotICAgICAgICBwb3J0Ll9zZXJ2ZXJfcHJv
Y2Vzc19jb25zdHJ1Y3RvciA9IE1vY2tTZXJ2ZXJQcm9jZXNzCisgICAgICAgIHBvcnQuX3Rlc3Rf
cnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJvY2VzcwogICAgICAgICBk
cml2ZXIgPSBEcml2ZXIocG9ydCwgMCwgcGl4ZWxfdGVzdHM9VHJ1ZSkKICAgICAgICAgZHJpdmVy
LnN0YXJ0KFRydWUsIFtdKQogICAgICAgICBsYXN0X3RtcGRpciA9IHBvcnQuX2ZpbGVzeXN0ZW0u
bGFzdF90bXBkaXIKQEAgLTI4Myw3ICsyODMsNyBAQCBjbGFzcyBEcml2ZXJUZXN0KHVuaXR0ZXN0
LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3N0YXJ0X2FjdHVhbGx5X3N0YXJ0cyhzZWxmKToK
ICAgICAgICAgcG9ydCA9IFRlc3RXZWJLaXRQb3J0KCkKLSAgICAgICAgcG9ydC5fc2VydmVyX3By
b2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJvY2VzcworICAgICAgICBwb3J0Ll90ZXN0
X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gTW9ja1NlcnZlclByb2Nlc3MKICAgICAgICAg
ZHJpdmVyID0gRHJpdmVyKHBvcnQsIDAsIHBpeGVsX3Rlc3RzPVRydWUpCiAgICAgICAgIGRyaXZl
ci5zdGFydChUcnVlLCBbXSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRyaXZlci5fc2VydmVy
X3Byb2Nlc3Muc3RhcnRlZCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Mu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQkocmV2
aXNpb24gMjEwNzM1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQkod29y
a2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5t
b2RlbHMudGVzdF9jCiBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGNvbmZpZyBhcyBwb3J0X2Nv
bmZpZwogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBkcml2ZXIsIGltYWdlX2RpZmYKIGZyb20g
d2Via2l0cHkucG9ydC5kYXJ3aW4gaW1wb3J0IERhcndpblBvcnQKK2Zyb20gd2Via2l0cHkucG9y
dC5zaW11bGF0b3JfcHJvY2VzcyBpbXBvcnQgU2ltdWxhdG9yUHJvY2VzcwogZnJvbSB3ZWJraXRw
eS54Y29kZS5zaW11bGF0b3IgaW1wb3J0IFNpbXVsYXRvciwgUnVudGltZSwgRGV2aWNlVHlwZQog
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCiAK
QEAgLTc4LDcgKzc5LDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAg
ICBTREsgPSAnaXBob25lc2ltdWxhdG9yJwogCiAgICAgU0lNVUxBVE9SX0JVTkRMRV9JRCA9ICdj
b20uYXBwbGUuaXBob25lc2ltdWxhdG9yJwotICAgIHJlbGF5X25hbWUgPSAnTGF5b3V0VGVzdFJl
bGF5JwogICAgIFNJTVVMQVRPUl9ESVJFQ1RPUlkgPSAiL3RtcC9XZWJLaXRUZXN0aW5nU2ltdWxh
dG9ycy8iCiAgICAgTFNSRUdJU1RFUl9QQVRIID0gIi9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtz
L0NvcmVTZXJ2aWNlcy5mcmFtZXdvcmsvRnJhbWV3b3Jrcy9MYXVuY2hTZXJ2aWNlcy5mcmFtZXdv
cmsvVmVyc2lvbnMvQ3VycmVudC9TdXBwb3J0L2xzcmVnaXN0ZXIiCiAgICAgUFJPQ0VTU19DT1VO
VF9FU1RJTUFURV9QRVJfU0lNVUxBVE9SX0lOU1RBTkNFID0gMTAwCkBAIC05Nyw2ICs5Nyw3IEBA
IGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAKICAgICBkZWYgX19pbml0X18o
c2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncyk6CiAgICAgICAgIERhcndpblBvcnQuX19p
bml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5fdGVz
dF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IFNpbXVsYXRvclByb2Nlc3MKIAogICAgICAg
ICBvcHRpb25hbF9kZXZpY2VfY2xhc3MgPSBzZWxmLmdldF9vcHRpb24oJ2RldmljZV9jbGFzcycp
CiAgICAgICAgIHNlbGYuX3ByaW50aW5nX2NtZF9saW5lID0gRmFsc2UKQEAgLTE0OCwxNiArMTQ5
LDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgICAgIGRl
dmljZV90eXBlID0gRGV2aWNlVHlwZS5mcm9tX25hbWUoZGV2aWNlX25hbWUpCiAgICAgICAgIHJl
dHVybiBkZXZpY2VfdHlwZQogCi0gICAgQHByb3BlcnR5Ci0gICAgQG1lbW9pemVkCi0gICAgZGVm
IHJlbGF5X3BhdGgoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX3Jvb3Rfd2FzX3NldDoKLSAgICAg
ICAgICAgIHBhdGggPSBzZWxmLl9maWxlc3lzdGVtLmFic3BhdGgoc2VsZi5nZXRfb3B0aW9uKCdy
b290JykpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtYWNfY29uZmlnID0gcG9ydF9jb25m
aWcuQ29uZmlnKHNlbGYuX2V4ZWN1dGl2ZSwgc2VsZi5fZmlsZXN5c3RlbSwgJ21hYycpCi0gICAg
ICAgICAgICBwYXRoID0gbWFjX2NvbmZpZy5idWlsZF9kaXJlY3Rvcnkoc2VsZi5nZXRfb3B0aW9u
KCdjb25maWd1cmF0aW9uJykpCi0gICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLmpvaW4o
cGF0aCwgc2VsZi5yZWxheV9uYW1lKQotCiAgICAgQG1lbW9pemVkCiAgICAgZGVmIGNoaWxkX3By
b2Nlc3NlcyhzZWxmKToKICAgICAgICAgcmV0dXJuIGludChzZWxmLmdldF9vcHRpb24oJ2NoaWxk
X3Byb2Nlc3NlcycpKQpAQCAtMTgyLDE5ICsxNzMsNiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0
KERhcndpblBvcnQpOgogCiAgICAgICAgIHJldHVybiBtaW4obWF4aW11bV9zaW11bGF0b3JfY291
bnRfb25fdGhpc19zeXN0ZW0sIGJlc3RfY2hpbGRfcHJvY2Vzc19jb3VudF9mb3JfY3B1KQogCi0g
ICAgZGVmIF9jaGVja19yZWxheShzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0
ZW0uZXhpc3RzKHNlbGYucmVsYXlfcGF0aCk6Ci0gICAgICAgICAgICBfbG9nLmVycm9yKCIlcyB3
YXMgbm90IGZvdW5kIGF0ICVzIiAlIChzZWxmLnJlbGF5X25hbWUsIHNlbGYucmVsYXlfcGF0aCkp
Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRl
ZiBfY2hlY2tfcG9ydF9idWlsZChzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuX3Jvb3Rfd2Fz
X3NldCBhbmQgc2VsZi5nZXRfb3B0aW9uKCdidWlsZCcpIGFuZCBub3Qgc2VsZi5fYnVpbGRfcmVs
YXkoKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBpZiBub3Qgc2VsZi5fY2hl
Y2tfcmVsYXkoKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1
ZQotCiAgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRl
cnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49dGltZS50aW1lLCBzbGVlcF9mbj10aW1lLnNsZWVwLCB3
YWl0X2Zvcl9sb2c9VHJ1ZSk6CiAgICAgICAgIHRpbWVfZm4gPSB0aW1lX2ZuIG9yIHRpbWUudGlt
ZQogICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9yIHRpbWUuc2xlZXAKQEAgLTIxNSw3ICsx
OTMsNyBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgICAgICAgICAg
cmV0dXJuIHNlbGYuX2dldF9jcmFzaF9sb2coY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3Bp
ZFswXSwgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZFsxXSwgc3Rkb3V0LAogICAgICAg
ICAgICAgICAgICdcbicuam9pbihzdGRlcnJfbGluZXMpLCBuZXdlcl90aGFuLCB0aW1lX2ZuLCBz
bGVlcF9mbiwgd2FpdF9mb3JfbG9nKQogCi0gICAgICAgICMgTGF5b3V0VGVzdFJlbGF5IGNyYXNo
ZWQKKyAgICAgICAgIyBBcHAgY3Jhc2hlZAogICAgICAgICBfbG9nLmRlYnVnKCdsb29raW5nIGZv
ciBjcmFzaCBsb2cgZm9yICVzOiVzJyAlIChuYW1lLCBzdHIocGlkKSkpCiAgICAgICAgIGNyYXNo
X2xvZyA9ICcnCiAgICAgICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3Moc2VsZi5ob3N0KQpAQCAt
MjMzLDI1ICsyMTEsNiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAg
ICAgICAgICAgcmV0dXJuIHN0ZGVyciwgTm9uZQogICAgICAgICByZXR1cm4gc3RkZXJyLCBjcmFz
aF9sb2cKIAotICAgIGRlZiBfYnVpbGRfcmVsYXkoc2VsZik6Ci0gICAgICAgIGVudmlyb25tZW50
ID0gc2VsZi5ob3N0LmNvcHlfY3VycmVudF9lbnZpcm9ubWVudCgpCi0gICAgICAgIGVudmlyb25t
ZW50LmRpc2FibGVfZ2NjX3NtYXJ0cXVvdGVzKCkKLSAgICAgICAgZW52ID0gZW52aXJvbm1lbnQu
dG9fZGljdGlvbmFyeSgpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBGSVhNRTogV2Ug
c2hvdWxkIGJlIHBhc3NpbmcgX2FyZ3VtZW50c19mb3JfY29uZmlndXJhdGlvbigpLCB3aGljaCBy
ZXNwZWN0cyBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBwb3J0LAotICAgICAgICAgICAgIyBpbnN0
ZWFkIG9mIGhhcmRjb2RpbmcgLS1pb3Mtc2ltdWxhdG9yLgotICAgICAgICAgICAgc2VsZi5fcnVu
X3NjcmlwdCgiYnVpbGQtbGF5b3V0dGVzdHJlbGF5IiwgYXJncz1bIi0taW9zLXNpbXVsYXRvciJd
LCBlbnY9ZW52KQotICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3IsIGU6Ci0gICAgICAgICAgICBf
bG9nLmVycm9yKGUubWVzc2FnZV93aXRoX291dHB1dChvdXRwdXRfbGltaXQ9Tm9uZSkpCi0gICAg
ICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBfYnVp
bGRfZHJpdmVyKHNlbGYpOgotICAgICAgICBidWlsdF90b29sID0gc3VwZXIoSU9TU2ltdWxhdG9y
UG9ydCwgc2VsZikuX2J1aWxkX2RyaXZlcigpCi0gICAgICAgIGJ1aWx0X3JlbGF5ID0gc2VsZi5f
YnVpbGRfcmVsYXkoKQotICAgICAgICByZXR1cm4gYnVpbHRfdG9vbCBhbmQgYnVpbHRfcmVsYXkK
LQogICAgIGRlZiBfYnVpbGRfZHJpdmVyX2ZsYWdzKHNlbGYpOgogICAgICAgICBhcmNocyA9IFsn
QVJDSFM9aTM4NiddIGlmIHNlbGYuYXJjaGl0ZWN0dXJlKCkgPT0gJ3g4NicgZWxzZSBbXQogICAg
ICAgICBzZGsgPSBbJy0tc2RrJywgJ2lwaG9uZXNpbXVsYXRvciddCkBAIC0yODAsOSArMjM5LDkg
QEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKIAogICAgIGRlZiBfY3JlYXRl
X3NpbXVsYXRvcnMoc2VsZik6CiAgICAgICAgIGlmIChzZWxmLmRlZmF1bHRfY2hpbGRfcHJvY2Vz
c2VzKCkgPCBzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKToKLSAgICAgICAgICAgICAgICBfbG9nLndh
cm4oIllvdSBoYXZlIHNwZWNpZmllZCB2ZXJ5IGhpZ2ggdmFsdWUoezB9KSBmb3IgLS1jaGlsZC1w
cm9jZXNzZXMiLmZvcm1hdChzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKSkKLSAgICAgICAgICAgICAg
ICBfbG9nLndhcm4oIm1heGltdW0gY2hpbGQtcHJvY2Vzc2VzIHdoaWNoIGNhbiBiZSBzdXBwb3J0
ZWQgb24gdGhpcyBzeXN0ZW0gYXJlOiB7MH0iLmZvcm1hdChzZWxmLmRlZmF1bHRfY2hpbGRfcHJv
Y2Vzc2VzKCkpKQotICAgICAgICAgICAgICAgIF9sb2cud2FybigiVGhpcyBpcyB2ZXJ5IGxpa2Vs
eSB0byBmYWlsLiIpCisgICAgICAgICAgICBfbG9nLndhcm4oIllvdSBoYXZlIHNwZWNpZmllZCB2
ZXJ5IGhpZ2ggdmFsdWUoezB9KSBmb3IgLS1jaGlsZC1wcm9jZXNzZXMiLmZvcm1hdChzZWxmLmNo
aWxkX3Byb2Nlc3NlcygpKSkKKyAgICAgICAgICAgIF9sb2cud2FybigibWF4aW11bSBjaGlsZC1w
cm9jZXNzZXMgd2hpY2ggY2FuIGJlIHN1cHBvcnRlZCBvbiB0aGlzIHN5c3RlbSBhcmU6IHswfSIu
Zm9ybWF0KHNlbGYuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKSkpCisgICAgICAgICAgICBfbG9n
Lndhcm4oIlRoaXMgaXMgdmVyeSBsaWtlbHkgdG8gZmFpbC4iKQogCiAgICAgICAgIGlmIHNlbGYu
X3VzaW5nX2RlZGljYXRlZF9zaW11bGF0b3JzKCk6CiAgICAgICAgICAgICBzZWxmLl9jcmVhdGVT
aW11bGF0b3JBcHBzKCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5p
dHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc191
bml0dGVzdC5weQkocmV2aXNpb24gMjEwNzM1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L2lvc191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBjbGFz
cyBpb3NUZXN0KGRhcndpbl90ZXN0Y2FzZS5EYXJ3aW5UZXN0CiAgICAgICAgIHBvcnQuX3J1bl9z
Y3JpcHQgPSBydW5fc2NyaXB0CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5hcmNoaXRl
Y3R1cmUoKSwgJ3g4NicpCiAgICAgICAgIHBvcnQuX2J1aWxkX2RyaXZlcigpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoc2VsZi5hcmdzLCBbJy0taW9zLXNpbXVsYXRvciddKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHNlbGYuYXJncywgWydBUkNIUz1pMzg2JywgJy0tc2RrJywgJ2lwaG9u
ZXNpbXVsYXRvciddKQogCiAgICAgZGVmIHRlc3RfNjRiaXQoc2VsZik6CiAgICAgICAgICMgQXBw
bGUgTWFjIHBvcnQgaXMgNjQtYml0IGJ5IGRlZmF1bHQKQEAgLTgyLDcgKzgyLDcgQEAgY2xhc3Mg
aW9zVGVzdChkYXJ3aW5fdGVzdGNhc2UuRGFyd2luVGVzdAogCiAgICAgICAgIHBvcnQuX3J1bl9z
Y3JpcHQgPSBydW5fc2NyaXB0CiAgICAgICAgIHBvcnQuX2J1aWxkX2RyaXZlcigpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hcmdzLCBbJy0taW9zLXNpbXVsYXRvciddKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYXJncywgWyctLXNkaycsICdpcGhvbmVzaW11bGF0b3In
XSkKIAogICAgIGRlZiB0ZXN0X3Nka19uYW1lKHNlbGYpOgogICAgICAgICBwb3J0ID0gc2VsZi5t
YWtlX3BvcnQoKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9j
ZXNzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJf
cHJvY2Vzcy5weQkocmV2aXNpb24gMjEwNzM1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L3NlcnZlcl9wcm9jZXNzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNCBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CkBAIC0zNCw3NCArMzUsMTcgQEAgaW1wb3J0IHNpZ25hbAogaW1wb3J0IHN5cwogaW1w
b3J0IHRpbWUKIAotIyBOb3RlIHRoYXQgYWx0aG91Z2ggd2luMzIgcHl0aG9uIGRvZXMgcHJvdmlk
ZSBhbiBpbXBsZW1lbnRhdGlvbiBvZgotIyB0aGUgd2luMzIgc2VsZWN0IEFQSSwgaXQgb25seSB3
b3JrcyBvbiBzb2NrZXRzLCBhbmQgbm90IG9uIHRoZSBuYW1lZCBwaXBlcwotIyB1c2VkIGJ5IHN1
YnByb2Nlc3MsIHNvIHdlIGhhdmUgdG8gdXNlIHRoZSBuYXRpdmUgQVBJcyBkaXJlY3RseS4KLWlm
IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKLSAgICBpbXBvcnQgbXN2Y3J0Ci0gICAg
aW1wb3J0IHdpbjMycGlwZQotICAgIGltcG9ydCB3aW4zMmZpbGUKLWVsc2U6Ci0gICAgaW1wb3J0
IGZjbnRsCi0gICAgaW1wb3J0IG9zCi0gICAgaW1wb3J0IHNlbGVjdAotCiBmcm9tIHdlYmtpdHB5
LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgorZnJvbSB3ZWJraXRw
eS5wb3J0LnNlcnZlcl9wcm9jZXNzX2Jhc2UgaW1wb3J0IFNlcnZlclByb2Nlc3NCYXNlCiAKIAog
X2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCiAKLWNsYXNzIFNlcnZlclByb2Nl
c3Mob2JqZWN0KToKLSAgICAiIiJUaGlzIGNsYXNzIHByb3ZpZGVzIGEgd3JhcHBlciBhcm91bmQg
YSBzdWJwcm9jZXNzIHRoYXQKLSAgICBpbXBsZW1lbnRzIGEgc2ltcGxlIHJlcXVlc3QvcmVzcG9u
c2UgdXNhZ2UgbW9kZWwuIFRoZSBwcmltYXJ5IGJlbmVmaXQKLSAgICBpcyB0aGF0IHJlYWRpbmcg
cmVzcG9uc2VzIHRha2VzIGEgZGVhZGxpbmUsIHNvIHRoYXQgd2UgZG9uJ3QgZXZlciBibG9jawot
ICAgIGluZGVmaW5pdGVseS4gVGhlIGNsYXNzIGFsc28gaGFuZGxlcyB0cmFuc3BhcmVudGx5IHJl
c3RhcnRpbmcgcHJvY2Vzc2VzCi0gICAgYXMgbmVjZXNzYXJ5IHRvIGtlZXAgaXNzdWluZyBjb21t
YW5kcy4iIiIKK2NsYXNzIFNlcnZlclByb2Nlc3MoU2VydmVyUHJvY2Vzc0Jhc2UpOgogCiAgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVudj1Ob25lLCB1bml2ZXJz
YWxfbmV3bGluZXM9RmFsc2UsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2g9RmFsc2UpOgotICAgICAg
ICBzZWxmLl9wb3J0ID0gcG9ydF9vYmoKLSAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUgICMgU2hv
dWxkIGJlIHRoZSBjb21tYW5kIG5hbWUgKGUuZy4gRHVtcFJlbmRlclRyZWUsIEltYWdlRGlmZikK
LSAgICAgICAgc2VsZi5fY21kID0gY21kCi0gICAgICAgIHNlbGYuX2VudiA9IGVudgotICAgICAg
ICAjIFNldCBpZiB0aGUgcHJvY2VzcyBvdXRwdXRzIG5vbi1zdGFuZGFyZCBuZXdsaW5lcyBsaWtl
ICdcclxuJyBvciAnXHInLgotICAgICAgICAjIERvbid0IHNldCBpZiB0aGVyZSB3aWxsIGJlIGJp
bmFyeSBkYXRhIG9yIHRoZSBkYXRhIG11c3QgYmUgQVNDSUkgZW5jb2RlZC4KLSAgICAgICAgc2Vs
Zi5fdW5pdmVyc2FsX25ld2xpbmVzID0gdW5pdmVyc2FsX25ld2xpbmVzCi0gICAgICAgIHNlbGYu
X3RyZWF0X25vX2RhdGFfYXNfY3Jhc2ggPSB0cmVhdF9ub19kYXRhX2FzX2NyYXNoCi0gICAgICAg
IHNlbGYuX2hvc3QgPSBzZWxmLl9wb3J0Lmhvc3QKLSAgICAgICAgc2VsZi5fcGlkID0gTm9uZQot
ICAgICAgICBzZWxmLl9yZXNldCgpCi0KLSAgICAgICAgIyBTZWUgY29tbWVudCBpbiBpbXBvcnRz
IGZvciB3aHkgd2UgbmVlZCB0aGUgd2luMzIgQVBJcyBhbmQgY2FuJ3QganVzdCB1c2Ugc2VsZWN0
LgotICAgICAgICAjIEZJWE1FOiB0aGVyZSBzaG91bGQgYmUgYSB3YXkgdG8gZ2V0IHdpbjMyIHZz
LiBjeWd3aW4gZnJvbSBwbGF0Zm9ybWluZm8uCi0gICAgICAgIHNlbGYuX3VzZV93aW4zMl9hcGlz
ID0gc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpCi0KLSAgICBkZWYgbmFtZShzZWxmKToK
LSAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKLQotICAgIGRlZiBwaWQoc2VsZik6Ci0gICAgICAg
IHJldHVybiBzZWxmLl9waWQKLQotICAgIGRlZiBfcmVzZXQoc2VsZik6Ci0gICAgICAgIGlmIGdl
dGF0dHIoc2VsZiwgJ19wcm9jJywgTm9uZSk6Ci0gICAgICAgICAgICBpZiBzZWxmLl9wcm9jLnN0
ZGluOgotICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4uY2xvc2UoKQotICAgICAgICAg
ICAgICAgIHNlbGYuX3Byb2Muc3RkaW4gPSBOb25lCi0gICAgICAgICAgICBpZiBzZWxmLl9wcm9j
LnN0ZG91dDoKLSAgICAgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZG91dC5jbG9zZSgpCi0gICAg
ICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRvdXQgPSBOb25lCi0gICAgICAgICAgICBpZiBzZWxm
Ll9wcm9jLnN0ZGVycjoKLSAgICAgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGVyci5jbG9zZSgp
Ci0gICAgICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRlcnIgPSBOb25lCi0KLSAgICAgICAgc2Vs
Zi5fcHJvYyA9IE5vbmUKLSAgICAgICAgc2VsZi5fb3V0cHV0ID0gc3RyKCkgICMgYnl0ZXNhcnJh
eSgpIG9uY2Ugd2UgcmVxdWlyZSBQeXRob24gMi42Ci0gICAgICAgIHNlbGYuX2Vycm9yID0gc3Ry
KCkgICMgYnl0ZXNhcnJheSgpIG9uY2Ugd2UgcmVxdWlyZSBQeXRob24gMi42Ci0gICAgICAgIHNl
bGYuX2NyYXNoZWQgPSBGYWxzZQotICAgICAgICBzZWxmLnRpbWVkX291dCA9IEZhbHNlCi0KLSAg
ICBkZWYgcHJvY2Vzc19uYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQorICAg
ICAgICBzdXBlcihTZXJ2ZXJQcm9jZXNzLCBzZWxmKS5fX2luaXRfXyhwb3J0X29iaiwgbmFtZSwg
Y21kLCBlbnYsIHVuaXZlcnNhbF9uZXdsaW5lcywgdHJlYXRfbm9fZGF0YV9hc19jcmFzaCkKIAog
ICAgIGRlZiBfc3RhcnQoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX3Byb2M6CkBAIC0xMzcsMjUx
ICs4MSwzIEBAIGNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToKICAgICAgICAgaWYgc2VsZi5f
cHJvYy5yZXR1cm5jb2RlIGluICgtMTA3Mzc0MTUxMCwgLXNpZ25hbC5TSUdJTlQpOgogICAgICAg
ICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQKIAotICAgIGRlZiBwb2xsKHNlbGYpOgotICAg
ICAgICAiIiJDaGVjayB0byBzZWUgaWYgdGhlIHVuZGVybHlpbmcgcHJvY2VzcyBpcyBydW5uaW5n
OyByZXR1cm5zIE5vbmUKLSAgICAgICAgaWYgaXQgc3RpbGwgaXMgKHdyYXBwZXIgYXJvdW5kIHN1
YnByb2Nlc3MucG9sbCkuIiIiCi0gICAgICAgIGlmIHNlbGYuX3Byb2M6Ci0gICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fcHJvYy5wb2xsKCkKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGRlZiB3
cml0ZShzZWxmLCBieXRlcywgaWdub3JlX2NyYXNoPUZhbHNlKToKLSAgICAgICAgIiIiV3JpdGUg
YSByZXF1ZXN0IHRvIHRoZSBzdWJwcm9jZXNzLiBUaGUgc3VicHJvY2VzcyBpcyAocmUtKXN0YXJ0
KCknZWQKLSAgICAgICAgaWYgaXMgbm90IGFscmVhZHkgcnVubmluZy4iIiIKLSAgICAgICAgaWYg
bm90IHNlbGYuX3Byb2M6Ci0gICAgICAgICAgICBzZWxmLl9zdGFydCgpCi0gICAgICAgIHRyeToK
LSAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4ud3JpdGUoYnl0ZXMpCi0gICAgICAgIGV4Y2Vw
dCBJT0Vycm9yLCBlOgotICAgICAgICAgICAgc2VsZi5zdG9wKDAuMCkKLSAgICAgICAgICAgICMg
c3RvcCgpIGNhbGxzIF9yZXNldCgpLCBzbyB3ZSBoYXZlIHRvIHNldCBjcmFzaGVkIHRvIFRydWUg
YWZ0ZXIgY2FsbGluZyBzdG9wKCkKLSAgICAgICAgICAgICMgdW5sZXNzIHdlIGFscmVhZHkga25v
dyB0aGF0IHRoaXMgaXMgYSB0aW1lb3V0LgotICAgICAgICAgICAgaWYgbm90IGlnbm9yZV9jcmFz
aDoKLSAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCdUaGlzIHRlc3QgbWFya2VkIGFzIGEgY3Jh
c2ggYmVjYXVzZSBvZiBhIGJyb2tlbiBwaXBlIHdoZW4gd3JpdGluZyB0byBzdGRpbiBvZiB0aGUg
c2VydmVyIHByb2Nlc3MuJykKLSAgICAgICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQot
Ci0gICAgZGVmIF9wb3Bfc3Rkb3V0X2xpbmVfaWZfcmVhZHkoc2VsZik6Ci0gICAgICAgIGluZGV4
X2FmdGVyX25ld2xpbmUgPSBzZWxmLl9vdXRwdXQuZmluZCgnXG4nKSArIDEKLSAgICAgICAgaWYg
aW5kZXhfYWZ0ZXJfbmV3bGluZSA+IDA6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcG9wX291
dHB1dF9ieXRlcyhpbmRleF9hZnRlcl9uZXdsaW5lKQotICAgICAgICByZXR1cm4gTm9uZQotCi0g
ICAgZGVmIF9wb3Bfc3RkZXJyX2xpbmVfaWZfcmVhZHkoc2VsZik6Ci0gICAgICAgIGluZGV4X2Fm
dGVyX25ld2xpbmUgPSBzZWxmLl9lcnJvci5maW5kKCdcbicpICsgMQotICAgICAgICBpZiBpbmRl
eF9hZnRlcl9uZXdsaW5lID4gMDoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9wb3BfZXJyb3Jf
Ynl0ZXMoaW5kZXhfYWZ0ZXJfbmV3bGluZSkKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGRl
ZiBwb3BfYWxsX2J1ZmZlcmVkX3N0ZGVycihzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Bv
cF9lcnJvcl9ieXRlcyhsZW4oc2VsZi5fZXJyb3IpKQotCi0gICAgZGVmIHJlYWRfc3Rkb3V0X2xp
bmUoc2VsZiwgZGVhZGxpbmUpOgotICAgICAgICByZXR1cm4gc2VsZi5fcmVhZChkZWFkbGluZSwg
c2VsZi5fcG9wX3N0ZG91dF9saW5lX2lmX3JlYWR5KQotCi0gICAgZGVmIHJlYWRfc3RkZXJyX2xp
bmUoc2VsZiwgZGVhZGxpbmUpOgotICAgICAgICByZXR1cm4gc2VsZi5fcmVhZChkZWFkbGluZSwg
c2VsZi5fcG9wX3N0ZGVycl9saW5lX2lmX3JlYWR5KQotCi0gICAgZGVmIHJlYWRfZWl0aGVyX3N0
ZG91dF9vcl9zdGRlcnJfbGluZShzZWxmLCBkZWFkbGluZSk6Ci0gICAgICAgIGRlZiByZXRyaWV2
ZV9ieXRlc19mcm9tX2J1ZmZlcnMoKToKLSAgICAgICAgICAgIHN0ZG91dF9saW5lID0gc2VsZi5f
cG9wX3N0ZG91dF9saW5lX2lmX3JlYWR5KCkKLSAgICAgICAgICAgIGlmIHN0ZG91dF9saW5lOgot
ICAgICAgICAgICAgICAgIHJldHVybiBzdGRvdXRfbGluZSwgTm9uZQotICAgICAgICAgICAgc3Rk
ZXJyX2xpbmUgPSBzZWxmLl9wb3Bfc3RkZXJyX2xpbmVfaWZfcmVhZHkoKQotICAgICAgICAgICAg
aWYgc3RkZXJyX2xpbmU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUsIHN0ZGVycl9saW5l
Ci0gICAgICAgICAgICByZXR1cm4gTm9uZSAgIyBJbnN0cnVjdHMgdGhlIGNhbGxlciB0byBrZWVw
IHdhaXRpbmcuCi0KLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gc2VsZi5fcmVhZChkZWFkbGluZSwg
cmV0cmlldmVfYnl0ZXNfZnJvbV9idWZmZXJzKQotICAgICAgICAjIEZJWE1FOiBUaGlzIGlzIGEg
Yml0IG9mIGEgaGFjayBhcm91bmQgdGhlIGZhY3QgdGhhdCBfcmVhZCBub3JtYWxseSBvbmx5IHJl
dHVybnMgb25lIHZhbHVlLCBidXQgdGhpcyBjYWxsZXIgd2FudHMgaXQgdG8gcmV0dXJuIHR3by4K
LSAgICAgICAgaWYgcmV0dXJuX3ZhbHVlIGlzIE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gTm9u
ZSwgTm9uZQotICAgICAgICByZXR1cm4gcmV0dXJuX3ZhbHVlCi0KLSAgICBkZWYgcmVhZF9zdGRv
dXQoc2VsZiwgZGVhZGxpbmUsIHNpemUpOgotICAgICAgICBpZiBzaXplIDw9IDA6Ci0gICAgICAg
ICAgICByYWlzZSBWYWx1ZUVycm9yKCdTZXJ2ZXJQcm9jZXNzLnJlYWQoKSBjYWxsZWQgd2l0aCBh
IG5vbi1wb3NpdGl2ZSBzaXplOiAlZCAnICUgc2l6ZSkKLQotICAgICAgICBkZWYgcmV0cmlldmVf
Ynl0ZXNfZnJvbV9zdGRvdXRfYnVmZmVyKCk6Ci0gICAgICAgICAgICBpZiBsZW4oc2VsZi5fb3V0
cHV0KSA+PSBzaXplOgotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9wb3Bfb3V0cHV0X2J5
dGVzKHNpemUpCi0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgIHJldHVybiBzZWxm
Ll9yZWFkKGRlYWRsaW5lLCByZXRyaWV2ZV9ieXRlc19mcm9tX3N0ZG91dF9idWZmZXIpCi0KLSAg
ICBkZWYgX2xvZyhzZWxmLCBtZXNzYWdlKToKLSAgICAgICAgIyBUaGlzIGlzIGEgYml0IG9mIGEg
aGFjaywgYnV0IHdlIGZpcnN0IGxvZyBhIGJsYW5rIGxpbmUgdG8gYXZvaWQKLSAgICAgICAgIyBt
ZXNzaW5nIHVwIHRoZSBtYXN0ZXIgcHJvY2VzcydzIG91dHB1dC4KLSAgICAgICAgX2xvZy5pbmZv
KCcnKQotICAgICAgICBfbG9nLmluZm8obWVzc2FnZSkKLQotICAgIGRlZiBfaGFuZGxlX3RpbWVv
dXQoc2VsZik6Ci0gICAgICAgIHNlbGYudGltZWRfb3V0ID0gVHJ1ZQotICAgICAgICBpZiBzZWxm
Ll9wb3J0LmdldF9vcHRpb24oInNhbXBsZV9vbl90aW1lb3V0Iik6Ci0gICAgICAgICAgICBzZWxm
Ll9wb3J0LnNhbXBsZV9wcm9jZXNzKHNlbGYuX25hbWUsIHNlbGYuX3Byb2MucGlkKQotCi0gICAg
ZGVmIF9zcGxpdF9zdHJpbmdfYWZ0ZXJfaW5kZXgoc2VsZiwgc3RyaW5nLCBpbmRleCk6Ci0gICAg
ICAgIHJldHVybiBzdHJpbmdbOmluZGV4XSwgc3RyaW5nW2luZGV4Ol0KLQotICAgIGRlZiBfcG9w
X291dHB1dF9ieXRlcyhzZWxmLCBieXRlc19jb3VudCk6Ci0gICAgICAgIG91dHB1dCwgc2VsZi5f
b3V0cHV0ID0gc2VsZi5fc3BsaXRfc3RyaW5nX2FmdGVyX2luZGV4KHNlbGYuX291dHB1dCwgYnl0
ZXNfY291bnQpCi0gICAgICAgIHJldHVybiBvdXRwdXQKLQotICAgIGRlZiBfcG9wX2Vycm9yX2J5
dGVzKHNlbGYsIGJ5dGVzX2NvdW50KToKLSAgICAgICAgb3V0cHV0LCBzZWxmLl9lcnJvciA9IHNl
bGYuX3NwbGl0X3N0cmluZ19hZnRlcl9pbmRleChzZWxmLl9lcnJvciwgYnl0ZXNfY291bnQpCi0g
ICAgICAgIHJldHVybiBvdXRwdXQKLQotICAgIGRlZiBfd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRl
X2J1ZmZlcnNfdXNpbmdfc2VsZWN0KHNlbGYsIGRlYWRsaW5lLCBzdG9wcGluZz1GYWxzZSk6Ci0g
ICAgICAgIGlmIHNlbGYuX3Byb2Muc3Rkb3V0LmNsb3NlZCBvciBzZWxmLl9wcm9jLnN0ZGVyci5j
bG9zZWQ6Ci0gICAgICAgICAgICAjIElmIHRoZSBwcm9jZXNzIGNyYXNoZWQgYW5kIGlzIHVzaW5n
IEZJRk9zLCBsaWtlIENocm9taXVtIEFuZHJvaWQsIHRoZQotICAgICAgICAgICAgIyBzdGRvdXQg
YW5kIHN0ZGVyciBwaXBlcyB3aWxsIGJlIGNsb3NlZC4KLSAgICAgICAgICAgIHJldHVybgotCi0g
ICAgICAgIG91dF9mZCA9IHNlbGYuX3Byb2Muc3Rkb3V0LmZpbGVubygpCi0gICAgICAgIGVycl9m
ZCA9IHNlbGYuX3Byb2Muc3RkZXJyLmZpbGVubygpCi0gICAgICAgIHNlbGVjdF9mZHMgPSAob3V0
X2ZkLCBlcnJfZmQpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJlYWRfZmRzLCBfLCBfID0g
c2VsZWN0LnNlbGVjdChzZWxlY3RfZmRzLCBbXSwgc2VsZWN0X2ZkcywgbWF4KGRlYWRsaW5lIC0g
dGltZS50aW1lKCksIDApKQotICAgICAgICBleGNlcHQgc2VsZWN0LmVycm9yLCBlOgotICAgICAg
ICAgICAgIyBXZSBjYW4gaWdub3JlIEVJTlZBTCBzaW5jZSBpdCdzIGxpa2VseSB0aGUgcHJvY2Vz
cyBqdXN0IGNyYXNoZWQgYW5kIHdlJ2xsCi0gICAgICAgICAgICAjIGZpZ3VyZSB0aGF0IG91dCB0
aGUgbmV4dCB0aW1lIHRocm91Z2ggdGhlIGxvb3AgaW4gX3JlYWQoKS4KLSAgICAgICAgICAgIGlm
IGUuYXJnc1swXSA9PSBlcnJuby5FSU5WQUw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAg
ICAgICAgICByYWlzZQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgTm90ZSB0aGF0IHdl
IG1heSBnZXQgbm8gZGF0YSBkdXJpbmcgcmVhZCgpIGV2ZW4gdGhvdWdoCi0gICAgICAgICAgICAj
IHNlbGVjdCBzYXlzIHdlIGdvdCBzb21ldGhpbmc7IHNlZSB0aGUgc2VsZWN0KCkgbWFuIHBhZ2UK
LSAgICAgICAgICAgICMgb24gbGludXguIEkgZG9uJ3Qga25vdyBpZiB0aGlzIGhhcHBlbnMgb24g
TWFjIE9TIGFuZAotICAgICAgICAgICAgIyBvdGhlciBVbml4ZW4gYXMgd2VsbCwgYnV0IHdlIGRv
bid0IGJvdGhlciBzcGVjaWFsLWNhc2luZwotICAgICAgICAgICAgIyBMaW51eCBiZWNhdXNlIGl0
J3MgcmVsYXRpdmVseSBoYXJtbGVzcyBlaXRoZXIgd2F5LgotICAgICAgICAgICAgaWYgb3V0X2Zk
IGluIHJlYWRfZmRzOgotICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9wcm9jLnN0ZG91dC5y
ZWFkKCkKLSAgICAgICAgICAgICAgICBpZiBub3QgZGF0YSBhbmQgbm90IHN0b3BwaW5nIGFuZCAo
c2VsZi5fdHJlYXRfbm9fZGF0YV9hc19jcmFzaCBvciBzZWxmLl9wcm9jLnBvbGwoKSk6Ci0gICAg
ICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJ1RoaXMgdGVzdCBtYXJrZWQgYXMgYSBjcmFzaCBi
ZWNhdXNlIG9mIG5vIGRhdGEgd2hpbGUgcmVhZGluZyBzdGRvdXQgZm9yIHRoZSBzZXJ2ZXIgcHJv
Y2Vzcy4nKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQotICAgICAg
ICAgICAgICAgIHNlbGYuX291dHB1dCArPSBkYXRhCi0KLSAgICAgICAgICAgIGlmIGVycl9mZCBp
biByZWFkX2ZkczoKLSAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fcHJvYy5zdGRlcnIucmVh
ZCgpCi0gICAgICAgICAgICAgICAgaWYgbm90IGRhdGEgYW5kIG5vdCBzdG9wcGluZyBhbmQgKHNl
bGYuX3RyZWF0X25vX2RhdGFfYXNfY3Jhc2ggb3Igc2VsZi5fcHJvYy5wb2xsKCkpOgotICAgICAg
ICAgICAgICAgICAgICBfbG9nLmRlYnVnKCdUaGlzIHRlc3QgbWFya2VkIGFzIGEgY3Jhc2ggYmVj
YXVzZSBvZiBubyBkYXRhIHdoaWxlIHJlYWRpbmcgc3Rkb3V0IGZvciB0aGUgc2VydmVyIHByb2Nl
c3MuJykKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUKLSAgICAgICAg
ICAgICAgICBzZWxmLl9lcnJvciArPSBkYXRhCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgot
ICAgICAgICAgICAgIyBXZSBjYW4gaWdub3JlIHRoZSBJT0Vycm9ycyBiZWNhdXNlIHdlIHdpbGwg
ZGV0ZWN0IGlmIHRoZSBzdWJwb3JjZXNzIGNyYXNoZWQKLSAgICAgICAgICAgICMgdGhlIG5leHQg
dGltZSB0aHJvdWdoIHRoZSBsb29wIGluIF9yZWFkKCkKLSAgICAgICAgICAgIHBhc3MKLQotICAg
IGRlZiBfd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnNfdXNpbmdfd2luMzJfYXBpcyhz
ZWxmLCBkZWFkbGluZSk6Ci0gICAgICAgICMgU2VlIGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNv
bS9yZWNpcGVzLzQ0MDU1NC1tb2R1bGUtdG8tYWxsb3ctYXN5bmNocm9ub3VzLXN1YnByb2Nlc3Mt
dXNlLW9uLXdpbi8KLSAgICAgICAgIyBhbmQgaHR0cDovL2RvY3MuYWN0aXZlc3RhdGUuY29tL2Fj
dGl2ZXB5dGhvbi8yLjYvcHl3aW4zMi9tb2R1bGVzLmh0bWwKLSAgICAgICAgIyBmb3IgZG9jdW1l
bnRhdGlvbiBvbiBhbGwgb2YgdGhlc2Ugd2luMzItc3BlY2lmaWMgbW9kdWxlcy4KLSAgICAgICAg
bm93ID0gdGltZS50aW1lKCkKLSAgICAgICAgb3V0X2ZoID0gbXN2Y3J0LmdldF9vc2ZoYW5kbGUo
c2VsZi5fcHJvYy5zdGRvdXQuZmlsZW5vKCkpCi0gICAgICAgIGVycl9maCA9IG1zdmNydC5nZXRf
b3NmaGFuZGxlKHNlbGYuX3Byb2Muc3RkZXJyLmZpbGVubygpKQotICAgICAgICB3aGlsZSAoc2Vs
Zi5fcHJvYy5wb2xsKCkgaXMgTm9uZSkgYW5kIChub3cgPCBkZWFkbGluZSk6Ci0gICAgICAgICAg
ICBvdXRwdXQgPSBzZWxmLl9ub25fYmxvY2tpbmdfcmVhZF93aW4zMihvdXRfZmgpCi0gICAgICAg
ICAgICBlcnJvciA9IHNlbGYuX25vbl9ibG9ja2luZ19yZWFkX3dpbjMyKGVycl9maCkKLSAgICAg
ICAgICAgIGlmIG91dHB1dCBvciBlcnJvcjoKLSAgICAgICAgICAgICAgICBpZiBvdXRwdXQ6Ci0g
ICAgICAgICAgICAgICAgICAgIHNlbGYuX291dHB1dCArPSBvdXRwdXQKLSAgICAgICAgICAgICAg
ICBpZiBlcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXJyb3IgKz0gZXJyb3IKLSAg
ICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKLSAgICAg
ICAgICAgIG5vdyA9IHRpbWUudGltZSgpCi0gICAgICAgIHJldHVybgotCi0gICAgZGVmIF9ub25f
YmxvY2tpbmdfcmVhZF93aW4zMihzZWxmLCBoYW5kbGUpOgotICAgICAgICB0cnk6Ci0gICAgICAg
ICAgICBfLCBhdmFpbCwgXyA9IHdpbjMycGlwZS5QZWVrTmFtZWRQaXBlKGhhbmRsZSwgMCkKLSAg
ICAgICAgICAgIGlmIGF2YWlsID4gMDoKLSAgICAgICAgICAgICAgICBfLCBidWYgPSB3aW4zMmZp
bGUuUmVhZEZpbGUoaGFuZGxlLCBhdmFpbCwgTm9uZSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
YnVmCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6Ci0gICAgICAgICAgICBpZiBlWzBdIG5v
dCBpbiAoMTA5LCBlcnJuby5FU0hVVERPV04pOiAgIyAxMDkgPT0gd2luMzIgRVJST1JfQlJPS0VO
X1BJUEUKLSAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAg
ZGVmIGhhc19jcmFzaGVkKHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5fY3Jhc2hlZCBhbmQg
c2VsZi5wb2xsKCk6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCdUaGlzIHRlc3QgbWFya2VkIGFz
IGEgY3Jhc2ggYmVjYXVzZSBvZiBmYWlsdXJlIHRvIHBvbGwgdGhlIHNlcnZlciBwcm9jZXNzLicp
Ci0gICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQotICAgICAgICAgICAgc2VsZi5faGFu
ZGxlX3Bvc3NpYmxlX2ludGVycnVwdCgpCi0gICAgICAgIHJldHVybiBzZWxmLl9jcmFzaGVkCi0K
LSAgICAjIFRoaXMgcmVhZCBmdW5jdGlvbiBpcyBhIGJpdCBvZGRseS1kZXNpZ25lZCwgYXMgaXQg
cG9sbHMgYm90aCBzdGRvdXQgYW5kIHN0ZGVyciwgeWV0Ci0gICAgIyBvbmx5IHJlYWRzL3JldHVy
bnMgZnJvbSBvbmUgb2YgdGhlbSAoYnVmZmVyaW5nIGJvdGggaW4gbG9jYWwgc2VsZi5fb3V0cHV0
L3NlbGYuX2Vycm9yKS4KLSAgICAjIEl0IG1pZ2h0IGJlIGNsZWFuZXIgdG8gcGFzcyBpbiB0aGUg
ZmlsZSBkZXNjcmlwdG9yIHRvIHBvbGwgaW5zdGVhZC4KLSAgICBkZWYgX3JlYWQoc2VsZiwgZGVh
ZGxpbmUsIGZldGNoX2J5dGVzX2Zyb21fYnVmZmVyc19jYWxsYmFjayk6Ci0gICAgICAgIHdoaWxl
IFRydWU6Ci0gICAgICAgICAgICBpZiBzZWxmLmhhc19jcmFzaGVkKCk6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIE5vbmUKLQotICAgICAgICAgICAgaWYgdGltZS50aW1lKCkgPiBkZWFkbGluZToK
LSAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfdGltZW91dCgpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIE5vbmUKLQotICAgICAgICAgICAgYnl0ZXMgPSBmZXRjaF9ieXRlc19mcm9tX2J1ZmZl
cnNfY2FsbGJhY2soKQotICAgICAgICAgICAgaWYgYnl0ZXMgaXMgbm90IE5vbmU6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGJ5dGVzCi0KLSAgICAgICAgICAgIGlmIHNlbGYuX3VzZV93aW4zMl9h
cGlzOgotICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRfZm9yX2RhdGFfYW5kX3VwZGF0ZV9idWZm
ZXJzX3VzaW5nX3dpbjMyX2FwaXMoZGVhZGxpbmUpCi0gICAgICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgICAgIHNlbGYuX3dhaXRfZm9yX2RhdGFfYW5kX3VwZGF0ZV9idWZmZXJzX3VzaW5nX3Nl
bGVjdChkZWFkbGluZSkKLQotICAgIGRlZiBzdGFydChzZWxmKToKLSAgICAgICAgaWYgbm90IHNl
bGYuX3Byb2M6Ci0gICAgICAgICAgICBzZWxmLl9zdGFydCgpCi0KLSAgICBkZWYgc3RvcChzZWxm
LCB0aW1lb3V0X3NlY3M9My4wKToKLSAgICAgICAgaWYgbm90IHNlbGYuX3Byb2M6Ci0gICAgICAg
ICAgICByZXR1cm4gKE5vbmUsIE5vbmUpCi0KLSAgICAgICAgIyBPbmx5IGJvdGhlciB0byBjaGVj
ayBmb3IgbGVha3Mgb3Igc3RkZXJyIGlmIHRoZSBwcm9jZXNzIGlzIHN0aWxsIHJ1bm5pbmcuCi0g
ICAgICAgIGlmIHNlbGYucG9sbCgpIGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl9wb3J0LmNo
ZWNrX2Zvcl9sZWFrcyhzZWxmLm5hbWUoKSwgc2VsZi5waWQoKSkKLQotICAgICAgICBub3cgPSB0
aW1lLnRpbWUoKQotICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZGluOgotICAgICAgICAgICAgc2Vs
Zi5fcHJvYy5zdGRpbi5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGluID0gTm9u
ZQotICAgICAgICBraWxsZWQgPSBGYWxzZQotICAgICAgICBpZiB0aW1lb3V0X3NlY3M6Ci0gICAg
ICAgICAgICBkZWFkbGluZSA9IG5vdyArIHRpbWVvdXRfc2VjcwotICAgICAgICAgICAgd2hpbGUg
c2VsZi5fcHJvYy5wb2xsKCkgaXMgTm9uZSBhbmQgdGltZS50aW1lKCkgPCBkZWFkbGluZToKLSAg
ICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCi0gICAgICAgICAgICBpZiBzZWxmLl9wcm9j
LnBvbGwoKSBpcyBOb25lOgotICAgICAgICAgICAgICAgIF9sb2cud2FybmluZygnc3RvcHBpbmcg
JXMocGlkICVkKSB0aW1lZCBvdXQsIGtpbGxpbmcgaXQnICUgKHNlbGYuX25hbWUsIHNlbGYuX3By
b2MucGlkKSkKLQotICAgICAgICBpZiBzZWxmLl9wcm9jLnBvbGwoKSBpcyBOb25lOgotICAgICAg
ICAgICAgc2VsZi5fa2lsbCgpCi0gICAgICAgICAgICBraWxsZWQgPSBUcnVlCi0gICAgICAgICAg
ICBfbG9nLmRlYnVnKCdraWxsZWQgcGlkICVkJyAlIHNlbGYuX3Byb2MucGlkKQotCi0gICAgICAg
ICMgcmVhZCBhbnkgcmVtYWluaW5nIGRhdGEgb24gdGhlIHBpcGVzIGFuZCByZXR1cm4gaXQuCi0g
ICAgICAgIGlmIG5vdCBraWxsZWQ6Ci0gICAgICAgICAgICBpZiBzZWxmLl91c2Vfd2luMzJfYXBp
czoKLSAgICAgICAgICAgICAgICBzZWxmLl93YWl0X2Zvcl9kYXRhX2FuZF91cGRhdGVfYnVmZmVy
c191c2luZ193aW4zMl9hcGlzKG5vdykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAg
ICAgc2VsZi5fd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnNfdXNpbmdfc2VsZWN0KG5v
dywgc3RvcHBpbmc9VHJ1ZSkKLSAgICAgICAgb3V0LCBlcnIgPSBzZWxmLl9vdXRwdXQsIHNlbGYu
X2Vycm9yCi0gICAgICAgIHNlbGYuX3Jlc2V0KCkKLSAgICAgICAgcmV0dXJuIChvdXQsIGVycikK
LQotICAgIGRlZiBraWxsKHNlbGYpOgotICAgICAgICBzZWxmLnN0b3AoMC4wKQotCi0gICAgZGVm
IF9raWxsKHNlbGYpOgotICAgICAgICBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5raWxsX3Byb2Nlc3Mo
c2VsZi5fcHJvYy5waWQpCi0gICAgICAgIGlmIHNlbGYuX3Byb2MucG9sbCgpIGlzIG5vdCBOb25l
OgotICAgICAgICAgICAgc2VsZi5fcHJvYy53YWl0KCkKLQotICAgIGRlZiByZXBsYWNlX291dHB1
dHMoc2VsZiwgc3Rkb3V0LCBzdGRlcnIpOgotICAgICAgICBhc3NlcnQgc2VsZi5fcHJvYwotICAg
ICAgICBpZiBzdGRvdXQ6Ci0gICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZG91dC5jbG9zZSgpCi0g
ICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZG91dCA9IHN0ZG91dAotICAgICAgICBpZiBzdGRlcnI6
Ci0gICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGVyci5jbG9zZSgpCi0gICAgICAgICAgICBzZWxm
Ll9wcm9jLnN0ZGVyciA9IHN0ZGVycgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L3NlcnZlcl9wcm9jZXNzX2Jhc2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzX2Jhc2UucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzX2Jhc2UucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzNTggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoK
KyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIEdvb2dsZSBuYW1lIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGVycm5vCitpbXBvcnQgbG9nZ2lu
ZworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHN5cworaW1wb3J0IHRpbWUKKworIyBOb3RlIHRoYXQg
YWx0aG91Z2ggd2luMzIgcHl0aG9uIGRvZXMgcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBvZgor
IyB0aGUgd2luMzIgc2VsZWN0IEFQSSwgaXQgb25seSB3b3JrcyBvbiBzb2NrZXRzLCBhbmQgbm90
IG9uIHRoZSBuYW1lZCBwaXBlcworIyB1c2VkIGJ5IHN1YnByb2Nlc3MsIHNvIHdlIGhhdmUgdG8g
dXNlIHRoZSBuYXRpdmUgQVBJcyBkaXJlY3RseS4KK2lmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRo
KCd3aW4nKToKKyAgICBpbXBvcnQgbXN2Y3J0CisgICAgaW1wb3J0IHdpbjMycGlwZQorICAgIGlt
cG9ydCB3aW4zMmZpbGUKK2Vsc2U6CisgICAgaW1wb3J0IGZjbnRsCisgICAgaW1wb3J0IG9zCisg
ICAgaW1wb3J0IHNlbGVjdAorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZl
IGltcG9ydCBTY3JpcHRFcnJvcgorCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVf
XykKKworCitjbGFzcyBTZXJ2ZXJQcm9jZXNzQmFzZShvYmplY3QpOgorICAgICIiIlRoaXMgY2xh
c3MgcHJvdmlkZXMgYSB3cmFwcGVyIGFyb3VuZCBhIHN1YnByb2Nlc3MgdGhhdAorICAgIGltcGxl
bWVudHMgYSBzaW1wbGUgcmVxdWVzdC9yZXNwb25zZSB1c2FnZSBtb2RlbC4gVGhlIHByaW1hcnkg
YmVuZWZpdAorICAgIGlzIHRoYXQgcmVhZGluZyByZXNwb25zZXMgdGFrZXMgYSBkZWFkbGluZSwg
c28gdGhhdCB3ZSBkb24ndCBldmVyIGJsb2NrCisgICAgaW5kZWZpbml0ZWx5LiBUaGUgY2xhc3Mg
YWxzbyBoYW5kbGVzIHRyYW5zcGFyZW50bHkgcmVzdGFydGluZyBwcm9jZXNzZXMKKyAgICBhcyBu
ZWNlc3NhcnkgdG8ga2VlcCBpc3N1aW5nIGNvbW1hbmRzLiIiIgorCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVudj1Ob25lLCB1bml2ZXJzYWxfbmV3bGluZXM9
RmFsc2UsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2g9RmFsc2UpOgorICAgICAgICBzZWxmLl9wb3J0
ID0gcG9ydF9vYmoKKyAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUgICMgU2hvdWxkIGJlIHRoZSBj
b21tYW5kIG5hbWUgKGUuZy4gRHVtcFJlbmRlclRyZWUsIEltYWdlRGlmZikKKyAgICAgICAgc2Vs
Zi5fY21kID0gY21kCisgICAgICAgIHNlbGYuX2VudiA9IGVudgorICAgICAgICAjIFNldCBpZiB0
aGUgcHJvY2VzcyBvdXRwdXRzIG5vbi1zdGFuZGFyZCBuZXdsaW5lcyBsaWtlICdcclxuJyBvciAn
XHInLgorICAgICAgICAjIERvbid0IHNldCBpZiB0aGVyZSB3aWxsIGJlIGJpbmFyeSBkYXRhIG9y
IHRoZSBkYXRhIG11c3QgYmUgQVNDSUkgZW5jb2RlZC4KKyAgICAgICAgc2VsZi5fdW5pdmVyc2Fs
X25ld2xpbmVzID0gdW5pdmVyc2FsX25ld2xpbmVzCisgICAgICAgIHNlbGYuX3RyZWF0X25vX2Rh
dGFfYXNfY3Jhc2ggPSB0cmVhdF9ub19kYXRhX2FzX2NyYXNoCisgICAgICAgIHNlbGYuX2hvc3Qg
PSBzZWxmLl9wb3J0Lmhvc3QKKyAgICAgICAgc2VsZi5fcGlkID0gTm9uZQorICAgICAgICBzZWxm
Ll9yZXNldCgpCisKKyAgICAgICAgIyBTZWUgY29tbWVudCBpbiBpbXBvcnRzIGZvciB3aHkgd2Ug
bmVlZCB0aGUgd2luMzIgQVBJcyBhbmQgY2FuJ3QganVzdCB1c2Ugc2VsZWN0LgorICAgICAgICAj
IEZJWE1FOiB0aGVyZSBzaG91bGQgYmUgYSB3YXkgdG8gZ2V0IHdpbjMyIHZzLiBjeWd3aW4gZnJv
bSBwbGF0Zm9ybWluZm8uCisgICAgICAgIHNlbGYuX3VzZV93aW4zMl9hcGlzID0gc3lzLnBsYXRm
b3JtLnN0YXJ0c3dpdGgoJ3dpbicpCisKKyAgICBkZWYgX3N0YXJ0KHNlbGYpOgorICAgICAgICBy
YWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX2hhbmRsZV9wb3NzaWJsZV9pbnRl
cnJ1cHQoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAg
ICByZXR1cm4gc2VsZi5fbmFtZQorCisgICAgZGVmIHBpZChzZWxmKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuX3BpZAorCisgICAgZGVmIF9yZXNldChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fcHJv
YzoKKyAgICAgICAgICAgIGlmIHNlbGYuX3Byb2Muc3RkaW46CisgICAgICAgICAgICAgICAgc2Vs
Zi5fcHJvYy5zdGRpbi5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRpbiA9
IE5vbmUKKyAgICAgICAgICAgIGlmIHNlbGYuX3Byb2Muc3Rkb3V0OgorICAgICAgICAgICAgICAg
IHNlbGYuX3Byb2Muc3Rkb3V0LmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm9jLnN0
ZG91dCA9IE5vbmUKKyAgICAgICAgICAgIGlmIHNlbGYuX3Byb2Muc3RkZXJyOgorICAgICAgICAg
ICAgICAgIHNlbGYuX3Byb2Muc3RkZXJyLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLl9w
cm9jLnN0ZGVyciA9IE5vbmUKKworICAgICAgICBzZWxmLl9wcm9jID0gTm9uZQorICAgICAgICBz
ZWxmLl9vdXRwdXQgPSBzdHIoKSAgIyBieXRlc2FycmF5KCkgb25jZSB3ZSByZXF1aXJlIFB5dGhv
biAyLjYKKyAgICAgICAgc2VsZi5fZXJyb3IgPSBzdHIoKSAgIyBieXRlc2FycmF5KCkgb25jZSB3
ZSByZXF1aXJlIFB5dGhvbiAyLjYKKyAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IEZhbHNlCisgICAg
ICAgIHNlbGYudGltZWRfb3V0ID0gRmFsc2UKKworICAgIGRlZiBwcm9jZXNzX25hbWUoc2VsZik6
CisgICAgICAgIHJldHVybiBzZWxmLl9uYW1lCisKKyAgICBkZWYgcG9sbChzZWxmKToKKyAgICAg
ICAgIiIiQ2hlY2sgdG8gc2VlIGlmIHRoZSB1bmRlcmx5aW5nIHByb2Nlc3MgaXMgcnVubmluZzsg
cmV0dXJucyBOb25lCisgICAgICAgIGlmIGl0IHN0aWxsIGlzICh3cmFwcGVyIGFyb3VuZCBzdWJw
cm9jZXNzLnBvbGwpLiIiIgorICAgICAgICBpZiBzZWxmLl9wcm9jOgorICAgICAgICAgICAgcmV0
dXJuIHNlbGYuX3Byb2MucG9sbCgpCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgd3Jp
dGUoc2VsZiwgYnl0ZXMsIGlnbm9yZV9jcmFzaD1GYWxzZSk6CisgICAgICAgICIiIldyaXRlIGEg
cmVxdWVzdCB0byB0aGUgc3VicHJvY2Vzcy4gVGhlIHN1YnByb2Nlc3MgaXMgKHJlLSlzdGFydCgp
J2VkCisgICAgICAgIGlmIGlzIG5vdCBhbHJlYWR5IHJ1bm5pbmcuIiIiCisgICAgICAgIGlmIG5v
dCBzZWxmLl9wcm9jOgorICAgICAgICAgICAgc2VsZi5fc3RhcnQoKQorICAgICAgICB0cnk6Cisg
ICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGluLndyaXRlKGJ5dGVzKQorICAgICAgICBleGNlcHQg
SU9FcnJvciwgZToKKyAgICAgICAgICAgIHNlbGYuc3RvcCgwLjApCisgICAgICAgICAgICAjIHN0
b3AoKSBjYWxscyBfcmVzZXQoKSwgc28gd2UgaGF2ZSB0byBzZXQgY3Jhc2hlZCB0byBUcnVlIGFm
dGVyIGNhbGxpbmcgc3RvcCgpCisgICAgICAgICAgICAjIHVubGVzcyB3ZSBhbHJlYWR5IGtub3cg
dGhhdCB0aGlzIGlzIGEgdGltZW91dC4KKyAgICAgICAgICAgIGlmIG5vdCBpZ25vcmVfY3Jhc2g6
CisgICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygnVGhpcyB0ZXN0IG1hcmtlZCBhcyBhIGNyYXNo
IGJlY2F1c2Ugb2YgYSBicm9rZW4gcGlwZSB3aGVuIHdyaXRpbmcgdG8gc3RkaW4gb2YgdGhlIHNl
cnZlciBwcm9jZXNzLicpCisgICAgICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUKKwor
ICAgIGRlZiBfcG9wX3N0ZG91dF9saW5lX2lmX3JlYWR5KHNlbGYpOgorICAgICAgICBpbmRleF9h
ZnRlcl9uZXdsaW5lID0gc2VsZi5fb3V0cHV0LmZpbmQoJ1xuJykgKyAxCisgICAgICAgIGlmIGlu
ZGV4X2FmdGVyX25ld2xpbmUgPiAwOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BvcF9vdXRw
dXRfYnl0ZXMoaW5kZXhfYWZ0ZXJfbmV3bGluZSkKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAg
IGRlZiBfcG9wX3N0ZGVycl9saW5lX2lmX3JlYWR5KHNlbGYpOgorICAgICAgICBpbmRleF9hZnRl
cl9uZXdsaW5lID0gc2VsZi5fZXJyb3IuZmluZCgnXG4nKSArIDEKKyAgICAgICAgaWYgaW5kZXhf
YWZ0ZXJfbmV3bGluZSA+IDA6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcG9wX2Vycm9yX2J5
dGVzKGluZGV4X2FmdGVyX25ld2xpbmUpCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYg
cG9wX2FsbF9idWZmZXJlZF9zdGRlcnIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wb3Bf
ZXJyb3JfYnl0ZXMobGVuKHNlbGYuX2Vycm9yKSkKKworICAgIGRlZiByZWFkX3N0ZG91dF9saW5l
KHNlbGYsIGRlYWRsaW5lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWQoZGVhZGxpbmUsIHNl
bGYuX3BvcF9zdGRvdXRfbGluZV9pZl9yZWFkeSkKKworICAgIGRlZiByZWFkX3N0ZGVycl9saW5l
KHNlbGYsIGRlYWRsaW5lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWQoZGVhZGxpbmUsIHNl
bGYuX3BvcF9zdGRlcnJfbGluZV9pZl9yZWFkeSkKKworICAgIGRlZiByZWFkX2VpdGhlcl9zdGRv
dXRfb3Jfc3RkZXJyX2xpbmUoc2VsZiwgZGVhZGxpbmUpOgorICAgICAgICBkZWYgcmV0cmlldmVf
Ynl0ZXNfZnJvbV9idWZmZXJzKCk6CisgICAgICAgICAgICBzdGRvdXRfbGluZSA9IHNlbGYuX3Bv
cF9zdGRvdXRfbGluZV9pZl9yZWFkeSgpCisgICAgICAgICAgICBpZiBzdGRvdXRfbGluZToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gc3Rkb3V0X2xpbmUsIE5vbmUKKyAgICAgICAgICAgIHN0ZGVy
cl9saW5lID0gc2VsZi5fcG9wX3N0ZGVycl9saW5lX2lmX3JlYWR5KCkKKyAgICAgICAgICAgIGlm
IHN0ZGVycl9saW5lOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lLCBzdGRlcnJfbGluZQor
ICAgICAgICAgICAgcmV0dXJuIE5vbmUgICMgSW5zdHJ1Y3RzIHRoZSBjYWxsZXIgdG8ga2VlcCB3
YWl0aW5nLgorCisgICAgICAgIHJldHVybl92YWx1ZSA9IHNlbGYuX3JlYWQoZGVhZGxpbmUsIHJl
dHJpZXZlX2J5dGVzX2Zyb21fYnVmZmVycykKKyAgICAgICAgIyBGSVhNRTogVGhpcyBpcyBhIGJp
dCBvZiBhIGhhY2sgYXJvdW5kIHRoZSBmYWN0IHRoYXQgX3JlYWQgbm9ybWFsbHkgb25seSByZXR1
cm5zIG9uZSB2YWx1ZSwgYnV0IHRoaXMgY2FsbGVyIHdhbnRzIGl0IHRvIHJldHVybiB0d28uCisg
ICAgICAgIGlmIHJldHVybl92YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUs
IE5vbmUKKyAgICAgICAgcmV0dXJuIHJldHVybl92YWx1ZQorCisgICAgZGVmIHJlYWRfc3Rkb3V0
KHNlbGYsIGRlYWRsaW5lLCBzaXplKToKKyAgICAgICAgaWYgc2l6ZSA8PSAwOgorICAgICAgICAg
ICAgcmFpc2UgVmFsdWVFcnJvcignU2VydmVyUHJvY2Vzcy5yZWFkKCkgY2FsbGVkIHdpdGggYSBu
b24tcG9zaXRpdmUgc2l6ZTogJWQgJyAlIHNpemUpCisKKyAgICAgICAgZGVmIHJldHJpZXZlX2J5
dGVzX2Zyb21fc3Rkb3V0X2J1ZmZlcigpOgorICAgICAgICAgICAgaWYgbGVuKHNlbGYuX291dHB1
dCkgPj0gc2l6ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcG9wX291dHB1dF9ieXRl
cyhzaXplKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICByZXR1cm4gc2VsZi5f
cmVhZChkZWFkbGluZSwgcmV0cmlldmVfYnl0ZXNfZnJvbV9zdGRvdXRfYnVmZmVyKQorCisgICAg
ZGVmIF9sb2coc2VsZiwgbWVzc2FnZSk6CisgICAgICAgICMgVGhpcyBpcyBhIGJpdCBvZiBhIGhh
Y2ssIGJ1dCB3ZSBmaXJzdCBsb2cgYSBibGFuayBsaW5lIHRvIGF2b2lkCisgICAgICAgICMgbWVz
c2luZyB1cCB0aGUgbWFzdGVyIHByb2Nlc3MncyBvdXRwdXQuCisgICAgICAgIF9sb2cuaW5mbygn
JykKKyAgICAgICAgX2xvZy5pbmZvKG1lc3NhZ2UpCisKKyAgICBkZWYgX2hhbmRsZV90aW1lb3V0
KHNlbGYpOgorICAgICAgICBzZWxmLnRpbWVkX291dCA9IFRydWUKKyAgICAgICAgaWYgc2VsZi5f
cG9ydC5nZXRfb3B0aW9uKCJzYW1wbGVfb25fdGltZW91dCIpOgorICAgICAgICAgICAgc2VsZi5f
cG9ydC5zYW1wbGVfcHJvY2VzcyhzZWxmLl9uYW1lLCBzZWxmLl9wcm9jLnBpZCkKKworICAgIGRl
ZiBfc3BsaXRfc3RyaW5nX2FmdGVyX2luZGV4KHNlbGYsIHN0cmluZywgaW5kZXgpOgorICAgICAg
ICByZXR1cm4gc3RyaW5nWzppbmRleF0sIHN0cmluZ1tpbmRleDpdCisKKyAgICBkZWYgX3BvcF9v
dXRwdXRfYnl0ZXMoc2VsZiwgYnl0ZXNfY291bnQpOgorICAgICAgICBvdXRwdXQsIHNlbGYuX291
dHB1dCA9IHNlbGYuX3NwbGl0X3N0cmluZ19hZnRlcl9pbmRleChzZWxmLl9vdXRwdXQsIGJ5dGVz
X2NvdW50KQorICAgICAgICByZXR1cm4gb3V0cHV0CisKKyAgICBkZWYgX3BvcF9lcnJvcl9ieXRl
cyhzZWxmLCBieXRlc19jb3VudCk6CisgICAgICAgIG91dHB1dCwgc2VsZi5fZXJyb3IgPSBzZWxm
Ll9zcGxpdF9zdHJpbmdfYWZ0ZXJfaW5kZXgoc2VsZi5fZXJyb3IsIGJ5dGVzX2NvdW50KQorICAg
ICAgICByZXR1cm4gb3V0cHV0CisKKyAgICBkZWYgX3dhaXRfZm9yX2RhdGFfYW5kX3VwZGF0ZV9i
dWZmZXJzX3VzaW5nX3NlbGVjdChzZWxmLCBkZWFkbGluZSwgc3RvcHBpbmc9RmFsc2UpOgorICAg
ICAgICBpZiBzZWxmLl9wcm9jLnN0ZG91dC5jbG9zZWQgb3Igc2VsZi5fcHJvYy5zdGRlcnIuY2xv
c2VkOgorICAgICAgICAgICAgIyBJZiB0aGUgcHJvY2VzcyBjcmFzaGVkIGFuZCBpcyB1c2luZyBG
SUZPcywgbGlrZSBDaHJvbWl1bSBBbmRyb2lkLCB0aGUKKyAgICAgICAgICAgICMgc3Rkb3V0IGFu
ZCBzdGRlcnIgcGlwZXMgd2lsbCBiZSBjbG9zZWQuCisgICAgICAgICAgICByZXR1cm4KKworICAg
ICAgICBvdXRfZmQgPSBzZWxmLl9wcm9jLnN0ZG91dC5maWxlbm8oKQorICAgICAgICBlcnJfZmQg
PSBzZWxmLl9wcm9jLnN0ZGVyci5maWxlbm8oKQorICAgICAgICBzZWxlY3RfZmRzID0gKG91dF9m
ZCwgZXJyX2ZkKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZWFkX2ZkcywgXywgXyA9IHNl
bGVjdC5zZWxlY3Qoc2VsZWN0X2ZkcywgW10sIHNlbGVjdF9mZHMsIG1heChkZWFkbGluZSAtIHRp
bWUudGltZSgpLCAwKSkKKyAgICAgICAgZXhjZXB0IHNlbGVjdC5lcnJvciwgZToKKyAgICAgICAg
ICAgICMgV2UgY2FuIGlnbm9yZSBFSU5WQUwgc2luY2UgaXQncyBsaWtlbHkgdGhlIHByb2Nlc3Mg
anVzdCBjcmFzaGVkIGFuZCB3ZSdsbAorICAgICAgICAgICAgIyBmaWd1cmUgdGhhdCBvdXQgdGhl
IG5leHQgdGltZSB0aHJvdWdoIHRoZSBsb29wIGluIF9yZWFkKCkuCisgICAgICAgICAgICBpZiBl
LmFyZ3NbMF0gPT0gZXJybm8uRUlOVkFMOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAg
ICAgICAgcmFpc2UKKworICAgICAgICB0cnk6CisgICAgICAgICAgICAjIE5vdGUgdGhhdCB3ZSBt
YXkgZ2V0IG5vIGRhdGEgZHVyaW5nIHJlYWQoKSBldmVuIHRob3VnaAorICAgICAgICAgICAgIyBz
ZWxlY3Qgc2F5cyB3ZSBnb3Qgc29tZXRoaW5nOyBzZWUgdGhlIHNlbGVjdCgpIG1hbiBwYWdlCisg
ICAgICAgICAgICAjIG9uIGxpbnV4LiBJIGRvbid0IGtub3cgaWYgdGhpcyBoYXBwZW5zIG9uIE1h
YyBPUyBhbmQKKyAgICAgICAgICAgICMgb3RoZXIgVW5peGVuIGFzIHdlbGwsIGJ1dCB3ZSBkb24n
dCBib3RoZXIgc3BlY2lhbC1jYXNpbmcKKyAgICAgICAgICAgICMgTGludXggYmVjYXVzZSBpdCdz
IHJlbGF0aXZlbHkgaGFybWxlc3MgZWl0aGVyIHdheS4KKyAgICAgICAgICAgIGlmIG91dF9mZCBp
biByZWFkX2ZkczoKKyAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fcHJvYy5zdGRvdXQucmVh
ZCgpCisgICAgICAgICAgICAgICAgaWYgbm90IGRhdGEgYW5kIG5vdCBzdG9wcGluZyBhbmQgKHNl
bGYuX3RyZWF0X25vX2RhdGFfYXNfY3Jhc2ggb3Igc2VsZi5fcHJvYy5wb2xsKCkpOgorICAgICAg
ICAgICAgICAgICAgICBfbG9nLmRlYnVnKCdUaGlzIHRlc3QgbWFya2VkIGFzIGEgY3Jhc2ggYmVj
YXVzZSBvZiBubyBkYXRhIHdoaWxlIHJlYWRpbmcgc3Rkb3V0IGZvciB0aGUgc2VydmVyIHByb2Nl
c3MuJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUKKyAgICAgICAg
ICAgICAgICBzZWxmLl9vdXRwdXQgKz0gZGF0YQorCisgICAgICAgICAgICBpZiBlcnJfZmQgaW4g
cmVhZF9mZHM6CisgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuX3Byb2Muc3RkZXJyLnJlYWQo
KQorICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhIGFuZCBub3Qgc3RvcHBpbmcgYW5kIChzZWxm
Ll90cmVhdF9ub19kYXRhX2FzX2NyYXNoIG9yIHNlbGYuX3Byb2MucG9sbCgpKToKKyAgICAgICAg
ICAgICAgICAgICAgX2xvZy5kZWJ1ZygnVGhpcyB0ZXN0IG1hcmtlZCBhcyBhIGNyYXNoIGJlY2F1
c2Ugb2Ygbm8gZGF0YSB3aGlsZSByZWFkaW5nIHN0ZG91dCBmb3IgdGhlIHNlcnZlciBwcm9jZXNz
LicpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NyYXNoZWQgPSBUcnVlCisgICAgICAgICAg
ICAgICAgc2VsZi5fZXJyb3IgKz0gZGF0YQorICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAg
ICAgICAgICAgICMgV2UgY2FuIGlnbm9yZSB0aGUgSU9FcnJvcnMgYmVjYXVzZSB3ZSB3aWxsIGRl
dGVjdCBpZiB0aGUgc3VicG9yY2VzcyBjcmFzaGVkCisgICAgICAgICAgICAjIHRoZSBuZXh0IHRp
bWUgdGhyb3VnaCB0aGUgbG9vcCBpbiBfcmVhZCgpCisgICAgICAgICAgICBwYXNzCisKKyAgICBk
ZWYgX3dhaXRfZm9yX2RhdGFfYW5kX3VwZGF0ZV9idWZmZXJzX3VzaW5nX3dpbjMyX2FwaXMoc2Vs
ZiwgZGVhZGxpbmUpOgorICAgICAgICAjIFNlZSBodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20v
cmVjaXBlcy80NDA1NTQtbW9kdWxlLXRvLWFsbG93LWFzeW5jaHJvbm91cy1zdWJwcm9jZXNzLXVz
ZS1vbi13aW4vCisgICAgICAgICMgYW5kIGh0dHA6Ly9kb2NzLmFjdGl2ZXN0YXRlLmNvbS9hY3Rp
dmVweXRob24vMi42L3B5d2luMzIvbW9kdWxlcy5odG1sCisgICAgICAgICMgZm9yIGRvY3VtZW50
YXRpb24gb24gYWxsIG9mIHRoZXNlIHdpbjMyLXNwZWNpZmljIG1vZHVsZXMuCisgICAgICAgIG5v
dyA9IHRpbWUudGltZSgpCisgICAgICAgIG91dF9maCA9IG1zdmNydC5nZXRfb3NmaGFuZGxlKHNl
bGYuX3Byb2Muc3Rkb3V0LmZpbGVubygpKQorICAgICAgICBlcnJfZmggPSBtc3ZjcnQuZ2V0X29z
ZmhhbmRsZShzZWxmLl9wcm9jLnN0ZGVyci5maWxlbm8oKSkKKyAgICAgICAgd2hpbGUgKHNlbGYu
X3Byb2MucG9sbCgpIGlzIE5vbmUpIGFuZCAobm93IDwgZGVhZGxpbmUpOgorICAgICAgICAgICAg
b3V0cHV0ID0gc2VsZi5fbm9uX2Jsb2NraW5nX3JlYWRfd2luMzIob3V0X2ZoKQorICAgICAgICAg
ICAgZXJyb3IgPSBzZWxmLl9ub25fYmxvY2tpbmdfcmVhZF93aW4zMihlcnJfZmgpCisgICAgICAg
ICAgICBpZiBvdXRwdXQgb3IgZXJyb3I6CisgICAgICAgICAgICAgICAgaWYgb3V0cHV0OgorICAg
ICAgICAgICAgICAgICAgICBzZWxmLl9vdXRwdXQgKz0gb3V0cHV0CisgICAgICAgICAgICAgICAg
aWYgZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Vycm9yICs9IGVycm9yCisgICAg
ICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCisgICAgICAg
ICAgICBub3cgPSB0aW1lLnRpbWUoKQorICAgICAgICByZXR1cm4KKworICAgIGRlZiBfbm9uX2Js
b2NraW5nX3JlYWRfd2luMzIoc2VsZiwgaGFuZGxlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgXywgYXZhaWwsIF8gPSB3aW4zMnBpcGUuUGVla05hbWVkUGlwZShoYW5kbGUsIDApCisgICAg
ICAgICAgICBpZiBhdmFpbCA+IDA6CisgICAgICAgICAgICAgICAgXywgYnVmID0gd2luMzJmaWxl
LlJlYWRGaWxlKGhhbmRsZSwgYXZhaWwsIE5vbmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1
ZgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgaWYgZVswXSBub3Qg
aW4gKDEwOSwgZXJybm8uRVNIVVRET1dOKTogICMgMTA5ID09IHdpbjMyIEVSUk9SX0JST0tFTl9Q
SVBFCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRl
ZiBoYXNfY3Jhc2hlZChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX2NyYXNoZWQgYW5kIHNl
bGYucG9sbCgpOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygnVGhpcyB0ZXN0IG1hcmtlZCBhcyBh
IGNyYXNoIGJlY2F1c2Ugb2YgZmFpbHVyZSB0byBwb2xsIHRoZSBzZXJ2ZXIgcHJvY2Vzcy4nKQor
ICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX2hhbmRs
ZV9wb3NzaWJsZV9pbnRlcnJ1cHQoKQorICAgICAgICByZXR1cm4gc2VsZi5fY3Jhc2hlZAorCisg
ICAgIyBUaGlzIHJlYWQgZnVuY3Rpb24gaXMgYSBiaXQgb2RkbHktZGVzaWduZWQsIGFzIGl0IHBv
bGxzIGJvdGggc3Rkb3V0IGFuZCBzdGRlcnIsIHlldAorICAgICMgb25seSByZWFkcy9yZXR1cm5z
IGZyb20gb25lIG9mIHRoZW0gKGJ1ZmZlcmluZyBib3RoIGluIGxvY2FsIHNlbGYuX291dHB1dC9z
ZWxmLl9lcnJvcikuCisgICAgIyBJdCBtaWdodCBiZSBjbGVhbmVyIHRvIHBhc3MgaW4gdGhlIGZp
bGUgZGVzY3JpcHRvciB0byBwb2xsIGluc3RlYWQuCisgICAgZGVmIF9yZWFkKHNlbGYsIGRlYWRs
aW5lLCBmZXRjaF9ieXRlc19mcm9tX2J1ZmZlcnNfY2FsbGJhY2spOgorICAgICAgICB3aGlsZSBU
cnVlOgorICAgICAgICAgICAgaWYgc2VsZi5oYXNfY3Jhc2hlZCgpOgorICAgICAgICAgICAgICAg
IHJldHVybiBOb25lCisKKyAgICAgICAgICAgIGlmIHRpbWUudGltZSgpID4gZGVhZGxpbmU6Cisg
ICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX3RpbWVvdXQoKQorICAgICAgICAgICAgICAgIHJl
dHVybiBOb25lCisKKyAgICAgICAgICAgIGJ5dGVzID0gZmV0Y2hfYnl0ZXNfZnJvbV9idWZmZXJz
X2NhbGxiYWNrKCkKKyAgICAgICAgICAgIGlmIGJ5dGVzIGlzIG5vdCBOb25lOgorICAgICAgICAg
ICAgICAgIHJldHVybiBieXRlcworCisgICAgICAgICAgICBpZiBzZWxmLl91c2Vfd2luMzJfYXBp
czoKKyAgICAgICAgICAgICAgICBzZWxmLl93YWl0X2Zvcl9kYXRhX2FuZF91cGRhdGVfYnVmZmVy
c191c2luZ193aW4zMl9hcGlzKGRlYWRsaW5lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICBzZWxmLl93YWl0X2Zvcl9kYXRhX2FuZF91cGRhdGVfYnVmZmVyc191c2luZ19zZWxl
Y3QoZGVhZGxpbmUpCisKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxm
Ll9wcm9jOgorICAgICAgICAgICAgc2VsZi5fc3RhcnQoKQorCisgICAgZGVmIHN0b3Aoc2VsZiwg
dGltZW91dF9zZWNzPTMuMCk6CisgICAgICAgIGlmIG5vdCBzZWxmLl9wcm9jOgorICAgICAgICAg
ICAgcmV0dXJuIChOb25lLCBOb25lKQorCisgICAgICAgICMgT25seSBib3RoZXIgdG8gY2hlY2sg
Zm9yIGxlYWtzIG9yIHN0ZGVyciBpZiB0aGUgcHJvY2VzcyBpcyBzdGlsbCBydW5uaW5nLgorICAg
ICAgICBpZiBzZWxmLnBvbGwoKSBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fcG9ydC5jaGVj
a19mb3JfbGVha3Moc2VsZi5uYW1lKCksIHNlbGYucGlkKCkpCisKKyAgICAgICAgbm93ID0gdGlt
ZS50aW1lKCkKKyAgICAgICAgaWYgc2VsZi5fcHJvYy5zdGRpbjoKKyAgICAgICAgICAgIHNlbGYu
X3Byb2Muc3RkaW4uY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRpbiA9IE5vbmUK
KyAgICAgICAga2lsbGVkID0gRmFsc2UKKyAgICAgICAgaWYgdGltZW91dF9zZWNzOgorICAgICAg
ICAgICAgZGVhZGxpbmUgPSBub3cgKyB0aW1lb3V0X3NlY3MKKyAgICAgICAgICAgIHdoaWxlIHNl
bGYuX3Byb2MucG9sbCgpIGlzIE5vbmUgYW5kIHRpbWUudGltZSgpIDwgZGVhZGxpbmU6CisgICAg
ICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQorICAgICAgICAgICAgaWYgc2VsZi5fcHJvYy5w
b2xsKCkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ3N0b3BwaW5nICVz
KHBpZCAlZCkgdGltZWQgb3V0LCBraWxsaW5nIGl0JyAlIChzZWxmLl9uYW1lLCBzZWxmLl9wcm9j
LnBpZCkpCisKKyAgICAgICAgaWYgc2VsZi5fcHJvYy5wb2xsKCkgaXMgTm9uZToKKyAgICAgICAg
ICAgIHNlbGYuX2tpbGwoKQorICAgICAgICAgICAga2lsbGVkID0gVHJ1ZQorICAgICAgICAgICAg
X2xvZy5kZWJ1Zygna2lsbGVkIHBpZCAlZCcgJSBzZWxmLl9wcm9jLnBpZCkKKworICAgICAgICAj
IHJlYWQgYW55IHJlbWFpbmluZyBkYXRhIG9uIHRoZSBwaXBlcyBhbmQgcmV0dXJuIGl0LgorICAg
ICAgICBpZiBub3Qga2lsbGVkOgorICAgICAgICAgICAgaWYgc2VsZi5fdXNlX3dpbjMyX2FwaXM6
CisgICAgICAgICAgICAgICAgc2VsZi5fd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnNf
dXNpbmdfd2luMzJfYXBpcyhub3cpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
IHNlbGYuX3dhaXRfZm9yX2RhdGFfYW5kX3VwZGF0ZV9idWZmZXJzX3VzaW5nX3NlbGVjdChub3cs
IHN0b3BwaW5nPVRydWUpCisgICAgICAgIG91dCwgZXJyID0gc2VsZi5fb3V0cHV0LCBzZWxmLl9l
cnJvcgorICAgICAgICBzZWxmLl9yZXNldCgpCisgICAgICAgIHJldHVybiAob3V0LCBlcnIpCisK
KyAgICBkZWYga2lsbChzZWxmKToKKyAgICAgICAgc2VsZi5zdG9wKDAuMCkKKworICAgIGRlZiBf
a2lsbChzZWxmKToKKyAgICAgICAgc2VsZi5faG9zdC5leGVjdXRpdmUua2lsbF9wcm9jZXNzKHNl
bGYuX3Byb2MucGlkKQorICAgICAgICBpZiBzZWxmLl9wcm9jLnBvbGwoKSBpcyBub3QgTm9uZToK
KyAgICAgICAgICAgIHNlbGYuX3Byb2Mud2FpdCgpCisKKyAgICBkZWYgcmVwbGFjZV9vdXRwdXRz
KHNlbGYsIHN0ZG91dCwgc3RkZXJyKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuX3Byb2MKKyAgICAg
ICAgaWYgc3Rkb3V0OgorICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRvdXQuY2xvc2UoKQorICAg
ICAgICAgICAgc2VsZi5fcHJvYy5zdGRvdXQgPSBzdGRvdXQKKyAgICAgICAgaWYgc3RkZXJyOgor
ICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRlcnIuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5f
cHJvYy5zdGRlcnIgPSBzdGRlcnIKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9z
aW11bGF0b3JfcHJvY2Vzcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvc2ltdWxhdG9yX3Byb2Nlc3MucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTIzIEBACisjIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKwor
aW1wb3J0IGVycm5vCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgdGltZQorCitm
cm9tIHdlYmtpdHB5LnBvcnQuc2VydmVyX3Byb2Nlc3NfYmFzZSBpbXBvcnQgU2VydmVyUHJvY2Vz
c0Jhc2UKKworCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xhc3Mg
Zmlmb1Byb2Nlc3Mob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGRpbl9oYW5k
bGUsIHN0ZG91dF9oYW5kbGUsIHN0ZGVycl9oYW5kbGUsIHBpZCk6CisgICAgICAgIHNlbGYuc3Rk
aW4gPSBvcy5mZG9wZW4oc3RkaW5faGFuZGxlLCAidyIpCisgICAgICAgIHNlbGYuc3Rkb3V0ID0g
b3MuZmRvcGVuKHN0ZG91dF9oYW5kbGUsICJyYiIpCisgICAgICAgIHNlbGYuc3RkZXJyID0gb3Mu
ZmRvcGVuKHN0ZGVycl9oYW5kbGUsICJyYiIpCisgICAgICAgIHNlbGYucGlkID0gcGlkCisKKyAg
ICBkZWYgcG9sbChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3Mua2lsbChzZWxm
LnBpZCwgMCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGVycjoKKyAgICAgICAgICAgIGlmIGVy
ci5lcnJubyA9PSBlcnJuby5FU1JDSDoKKyAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAg
ICAgICAgZWxpZiBlcnIuZXJybm8gPT0gZXJybm8uRVBFUk06CisgICAgICAgICAgICAgICAgcmV0
dXJuIE5vbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgLTEKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAjIFBlciBzdWJwcm9j
ZXNzJ3MgZG9jdW1lbnRhdGlvbiwgdGhpcyBtaW1pY2tzIGl0J3MgYmVoYXZpb3IKKyAgICBkZWYg
d2FpdChzZWxmKToKKyAgICAgICAgd2hpbGUgbm90IHNlbGYucG9sbCgpOgorICAgICAgICAgICAg
dGltZS5zbGVlcCguMDEpCisgICAgICAgIHJldHVybiBzZWxmLnBvbGwoKQorCisKK2NsYXNzIFNp
bXVsYXRvclByb2Nlc3MoU2VydmVyUHJvY2Vzc0Jhc2UpOgorCisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVudj1Ob25lLCB1bml2ZXJzYWxfbmV3bGluZXM9RmFs
c2UsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2g9RmFsc2UpOgorICAgICAgICBzdXBlcihTaW11bGF0
b3JQcm9jZXNzLCBzZWxmKS5fX2luaXRfXyhwb3J0X29iaiwgbmFtZSwgY21kLCBlbnYsIHVuaXZl
cnNhbF9uZXdsaW5lcywgdHJlYXRfbm9fZGF0YV9hc19jcmFzaCkKKworICAgICAgICBmcm9tIHdl
YmtpdHB5Lnhjb2RlLnNpbXVsYXRvciBpbXBvcnQgU2ltdWxhdG9yICAjIEF2b2lkIGNpcmN1bGFy
IGltcG9ydAorICAgICAgICBzZWxmLl9zaW11bGF0b3JfbWFuYWdlciA9IFNpbXVsYXRvcihwb3J0
X29iai5ob3N0KQorCisgICAgICAgIHNlbGYuX2J1bmRsZUlEID0gc2VsZi5fcG9ydC5hcHBfaWRl
bnRpZmllcl9mcm9tX2J1bmRsZShzZWxmLl9jbWRbMV0pCisgICAgICAgIHNlbGYuX2RldmljZSA9
IHNlbGYuX3NpbXVsYXRvcl9tYW5hZ2VyLmZpbmRfZGV2aWNlX2J5X3VkaWQoc2VsZi5fY21kWzBd
KQorICAgICAgICBzZWxmLl9kZXZpY2UuaW5zdGFsbF9hcHAoc2VsZi5fY21kWzFdKQorICAgICAg
ICBzZWxmLl9lbnZbJ0lQQ19JREVOVElGSUVSJ10gPSBzZWxmLl9idW5kbGVJRCArICItIiArIHNl
bGYuX2RldmljZS51ZGlkCisKKyAgICAgICAgZmlsZV9sb2NhdGlvbiA9ICcvdG1wLycgKyBzZWxm
Ll9lbnZbJ0lQQ19JREVOVElGSUVSJ10KKyAgICAgICAgc2VsZi5faW5fcGF0aCA9IGZpbGVfbG9j
YXRpb24gKyAnX0lOJworICAgICAgICBzZWxmLl9vdXRfcGF0aCA9IGZpbGVfbG9jYXRpb24gKyAn
X09VVCcKKyAgICAgICAgc2VsZi5fZXJyb3JfcGF0aCA9IGZpbGVfbG9jYXRpb24gKyAnX0VSUk9S
JworCisgICAgICAgIHNlbGYuX3Jlc2V0KCkKKworICAgIGRlZiBfX3VubGlua19jaGVja19leGlz
dHMoc2VsZiwgcGF0aCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnVubGluayhwYXRo
KQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgb3MucGF0aC5l
eGlzdHMocGF0aCk6CisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiQ291bGQgbm90IHVu
bGluayAnIiArIHBhdGggKyAiJywgdGhlIHRhcmdldCBwYXRoIGlzIGEgZmlsZSBub3QgYSBwaXBl
LiIpCisKKyAgICBkZWYgX3Jlc2V0KHNlbGYpOgorICAgICAgICBzdXBlcihTaW11bGF0b3JQcm9j
ZXNzLCBzZWxmKS5fcmVzZXQoKQorCisgICAgICAgIHNlbGYuX191bmxpbmtfY2hlY2tfZXhpc3Rz
KHNlbGYuX2luX3BhdGgpCisgICAgICAgIHNlbGYuX191bmxpbmtfY2hlY2tfZXhpc3RzKHNlbGYu
X291dF9wYXRoKQorICAgICAgICBzZWxmLl9fdW5saW5rX2NoZWNrX2V4aXN0cyhzZWxmLl9lcnJv
cl9wYXRoKQorCisgICAgZGVmIF9zdGFydChzZWxmKToKKyAgICAgICAgb3MubWtmaWZvKHNlbGYu
X2luX3BhdGgsIDA2MDApCisgICAgICAgIG9zLm1rZmlmbyhzZWxmLl9vdXRfcGF0aCwgMDYwMCkK
KyAgICAgICAgb3MubWtmaWZvKHNlbGYuX2Vycm9yX3BhdGgsIDA2MDApCisKKyAgICAgICAgc2Vs
Zi5fcGlkID0gc2VsZi5fZGV2aWNlLmxhdW5jaF9hcHAoc2VsZi5fYnVuZGxlSUQsIHNlbGYuX2Nt
ZFszOl0sIGVudj1zZWxmLl9lbnYpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5f
c3Rkb3V0ID0gb3Mub3BlbihzZWxmLl9vdXRfcGF0aCwgb3MuT19SRE9OTFkgfCBvcy5PX05PTkJM
T0NLKQorICAgICAgICAgICAgc2VsZi5fc3RkZXJyID0gb3Mub3BlbihzZWxmLl9lcnJvcl9wYXRo
LCBvcy5PX1JET05MWSB8IG9zLk9fTk9OQkxPQ0spCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFz
IGU6CisgICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQorCisgICAgICAgIGRlYWRsaW5l
ID0gdGltZS50aW1lKCkgKyAzCisgICAgICAgIHdoaWxlIG5vdCBzZWxmLl9zdGRpbiBhbmQgZGVh
ZGxpbmUgPiB0aW1lLnRpbWUoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBz
ZWxmLl9zdGRpbiA9IG9zLm9wZW4oc2VsZi5faW5fcGF0aCwgb3MuT19XUk9OTFkgfCBvcy5PX05P
TkJMT0NLKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAg
ICBwYXNzCisgICAgICAgIGlmIG5vdCBzZWxmLl9zdGRpbjoKKyAgICAgICAgICAgIHNlbGYuX2Ny
YXNoZWQgPSBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9wcm9jID0gZmlm
b1Byb2Nlc3Moc2VsZi5fc3RkaW4sIHNlbGYuX291dF9wYXRoLCBzZWxmLl9lcnJvcl9wYXRoLCBz
ZWxmLl9waWQpCisKKyAgICBkZWYgX2tpbGwoc2VsZik6CisgICAgICAgIHNlbGYuX2RldmljZS50
ZXJtaW5hdGVfYXBwKHNlbGYuX2J1bmRsZUlEKQorICAgICAgICBzdXBlcihTaW11bGF0b3JQcm9j
ZXNzLCBzZWxmKS5fa2lsbCgpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3Np
bXVsYXRvci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3Np
bXVsYXRvci5weQkocmV2aXNpb24gMjEwNzM1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS94
Y29kZS9zaW11bGF0b3IucHkJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw3ICsxNjcsNyBAQCBjbGFz
cyBEZXZpY2Uob2JqZWN0KToKICAgICBSZXByZXNlbnRzIGEgQ29yZVNpbXVsYXRvciBkZXZpY2Ug
dW5kZXJuZWF0aCBhIHJ1bnRpbWUKICAgICAiIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBu
YW1lLCB1ZGlkLCBhdmFpbGFibGUsIHJ1bnRpbWUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBu
YW1lLCB1ZGlkLCBhdmFpbGFibGUsIHJ1bnRpbWUsIGhvc3Q9Tm9uZSk6CiAgICAgICAgICIiIgog
ICAgICAgICA6cGFyYW0gbmFtZTogVGhlIGRldmljZSBuYW1lCiAgICAgICAgIDp0eXBlIG5hbWU6
IHN0cgpAQCAtMTc4LDYgKzE3OCw3IEBAIGNsYXNzIERldmljZShvYmplY3QpOgogICAgICAgICA6
cGFyYW0gcnVudGltZTogVGhlIGlPUyBTaW11bGF0b3IgcnVudGltZSB0aGF0IGhvc3RzIHRoaXMg
ZGV2aWNlCiAgICAgICAgIDp0eXBlIHJ1bnRpbWU6IFJ1bnRpbWUKICAgICAgICAgIiIiCisgICAg
ICAgIHNlbGYuX2hvc3QgPSBob3N0IG9yIEhvc3QoKQogICAgICAgICBzZWxmLm5hbWUgPSBuYW1l
CiAgICAgICAgIHNlbGYudWRpZCA9IHVkaWQKICAgICAgICAgc2VsZi5hdmFpbGFibGUgPSBhdmFp
bGFibGUKQEAgLTI2MCw2ICsyNjEsMjkgQEAgY2xhc3MgRGV2aWNlKG9iamVjdCk6CiAgICAgICAg
IGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjoKICAgICAgICAgICAgIHJhaXNl
IFJ1bnRpbWVFcnJvcignInhjcnVuIHNpbWN0bCBlcmFzZSIgZmFpbGVkOiBkZXZpY2Ugc3RhdGUg
aXMge30nLmZvcm1hdChTaW11bGF0b3IuZGV2aWNlX3N0YXRlKHVkaWQpKSkKIAorICAgIGRlZiBp
bnN0YWxsX2FwcChzZWxmLCBhcHBfcGF0aCk6CisgICAgICAgIGlmIHNlbGYuX2hvc3QuZXhlY3V0
aXZlLnJ1bl9jb21tYW5kKFsneGNydW4nLCAnc2ltY3RsJywgJ2luc3RhbGwnLCBzZWxmLnVkaWQs
IGFwcF9wYXRoXSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKSA+IDA6CisgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBsYXVuY2hfYXBwKHNlbGYs
IGJ1bmRsZV9pZGVudGlmaWVyLCBhcmdzLCBlbnY9Tm9uZSk6CisgICAgICAgIHRyYW5zZmVyZWRF
bnZpcm9ubWVudCA9IHt9CisgICAgICAgIGlmIGVudjoKKyAgICAgICAgICAgIGZvciB2YWx1ZSBp
biBlbnY6CisgICAgICAgICAgICAgICAgaWYgbm90ICJTSU1DVExfQ0hJTERfIiBpbiB2YWx1ZToK
KyAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXJlZEVudmlyb25tZW50WydTSU1DVExfQ0hJTERf
JyArIHZhbHVlXSA9IGVudlt2YWx1ZV0KKyAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXJlZEVu
dmlyb25tZW50W3ZhbHVlXSA9IGVudlt2YWx1ZV0KKyAgICAgICAgc3RyID0gc2VsZi5faG9zdC5l
eGVjdXRpdmUucnVuX2NvbW1hbmQoWyd4Y3J1bicsICdzaW1jdGwnLCAnbGF1bmNoJywgc2VsZi51
ZGlkLCBidW5kbGVfaWRlbnRpZmllcl0gKyBhcmdzLCBlbnY9dHJhbnNmZXJlZEVudmlyb25tZW50
KQorICAgICAgICBpZiBub3QgYnVuZGxlX2lkZW50aWZpZXIgaW4gc3RyOgorICAgICAgICAgICAg
cmV0dXJuIE5vbmUKKyAgICAgICAgc3RyID0gc3RyLnJzdHJpcCgnXG4nKS5zcGxpdCgpWzFdCisg
ICAgICAgIHJldHVybiBpbnQoc3RyKQorCisgICAgZGVmIHRlcm1pbmF0ZV9hcHAoc2VsZiwgYnVu
ZGxlX2lkZW50aWZpZXIpOgorICAgICAgICBpZiBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5ydW5fY29t
bWFuZChbJ3hjcnVuJywgJ3NpbWN0bCcsICd0ZXJtaW5hdGUnLCBzZWxmLnVkaWQsIGJ1bmRsZV9p
ZGVudGlmaWVyXSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKSA+IDA6CisgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKwogICAgIGRlZiBfX2VxX18oc2VsZiwgb3Ro
ZXIpOgogICAgICAgICByZXR1cm4gc2VsZi51ZGlkID09IG90aGVyLnVkaWQKIApAQCAtNDc3LDcg
KzUwMSw4IEBAIGNsYXNzIFNpbXVsYXRvcihvYmplY3QpOgogICAgICAgICAgICAgICAgIGRldmlj
ZSA9IERldmljZShuYW1lPWRldmljZV9tYXRjaC5ncm91cCgnbmFtZScpLnJzdHJpcCgpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZGlkPWRldmljZV9tYXRjaC5ncm91cCgndWRp
ZCcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGU9ZGV2aWNlX21h
dGNoLmdyb3VwKCdhdmFpbGFiaWxpdHknKSBpcyBOb25lLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBydW50aW1lPWN1cnJlbnRfcnVudGltZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcnVudGltZT1jdXJyZW50X3J1bnRpbWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhvc3Q9c2VsZi5faG9zdCkKICAgICAgICAgICAgICAgICBjdXJyZW50X3J1
bnRpbWUuZGV2aWNlcy5hcHBlbmQoZGV2aWNlKQogCiAgICAgZGVmIGRldmljZV90eXBlKHNlbGYs
IG5hbWU9Tm9uZSwgaWRlbnRpZmllcj1Ob25lKToK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298792</attachid>
            <date>2017-01-13 15:29:45 -0800</date>
            <delta_ts>2017-01-19 10:33:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165927-20170113152804.patch</filename>
            <type>text/plain</type>
            <size>53496</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMDc0MikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU5IEBACisyMDE3LTAxLTEzICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBSZW1vdmluZyBMYXlvdXRUZXN0UmVsYXkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTkyNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTGF5b3V0VGVzdFJlbGF5OiBSZW1vdmVk
IExheW91dFRlc3RSZWxheS4KKyAgICAgICAgKiBNYWtlZmlsZTogUmVtb3ZlZCBMYXlvdXRUZXN0
UmVsYXkgcmVmZXJlbmNlcy4KKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLXdlYmtpdDogUmVtb3Zl
ZCBMYXlvdXRUZXN0UmVsYXkgcmVmZXJlbmNlcy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3BvcnQvYmFzZS5weToKKyAgICAgICAgKFBvcnQuX19pbml0X18pOiBBZGRlZCBfdGVzdF9ydW5u
ZXJfcHJvY2Vzc19jb25zdHJ1Y3Rvci4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQv
ZGFyd2luLnB5OgorICAgICAgICAoRGFyd2luUG9ydC5leHRyYWN0X2J1bmRsZV9JRCk6IEFkZGVk
IGZ1bmN0aW9uIHRvIGV4dHJhY3QgYnVuZGxlIElEIGZyb20gcGxpc3QuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weToKKyAgICAgICAgKERyaXZlci5fc2V0dXBfZW52
aXJvbl9mb3JfZHJpdmVyKTogU3dhcHBlZCBfc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgZm9y
IF90ZXN0X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yLgorICAgICAgICAoSU9TU2ltdWxhdG9y
RHJpdmVyLmNtZF9saW5lKTogUmVtb3ZlZCB1bm5lZWRlZCBhcmd1bWVudHMuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlcl91bml0dGVzdC5weToKKyAgICAgICAgKERyaXZl
clRlc3QudGVzdF9zdG9wX2NsZWFuc191cF9wcm9wZXJseSk6IFNldCBfdGVzdF9ydW5uZXJfcHJv
Y2Vzc19jb25zdHJ1Y3RvciBmb3IgdGVzdGluZy4KKyAgICAgICAgKERyaXZlclRlc3QudGVzdF90
d29fc3RhcnRzX2NsZWFuc191cF9wcm9wZXJseSk6IERpdHRvLgorICAgICAgICAoRHJpdmVyVGVz
dC50ZXN0X3N0YXJ0X2FjdHVhbGx5X3N0YXJ0cyk6IERpdHRvLgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvcG9ydC9pb3MucHk6CisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0KTogUmVtb3Zl
IHJlbGF5X25hbWUuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9faW5pdF9fKTogIFNldCBf
dGVzdF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciBmb3IgSU9TU2ltdWxhdG9ycy4KKyAgICAg
ICAgKElPU1NpbXVsYXRvclBvcnQucmVsYXlfcGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChJT1NT
aW11bGF0b3JQb3J0Ll9jaGVja19yZWxheSk6IFVzZSBiYXNlIGNsYXNzLgorICAgICAgICAoSU9T
U2ltdWxhdG9yUG9ydC5fY2hlY2tfcG9ydF9idWlsZCk6IERlbGV0ZWQuCisgICAgICAgIChJT1NT
aW11bGF0b3JQb3J0Ll9idWlsZF9yZWxheSk6IERlbGV0ZWQuCisgICAgICAgIChJT1NTaW11bGF0
b3JQb3J0Ll9idWlsZF9kcml2ZXIpOiBEZWxldGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvcG9ydC9pb3NfdW5pdHRlc3QucHk6CisgICAgICAgIChpb3NUZXN0LnRlc3RfMzJiaXQpOiBV
cGRhdGUgdGVzdC4KKyAgICAgICAgKGlvc1Rlc3QudGVzdF82NGJpdCk6IFVwZGF0ZSB0ZXN0Lgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weToKKyAgICAg
ICAgKFNlcnZlclByb2Nlc3MpOiBNb3ZlZCBtb3N0IGZ1bmN0aW9uYWxpdHkgdG8gU2VydmVyUHJv
Y2Vzc0Jhc2UuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLl9faW5pdF9fKTogQ2FsbCBTZXJ2ZXJQ
cm9jZXNzQmFzZSBpbml0aWFsaXplci4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQv
c2VydmVyX3Byb2Nlc3NfYmFzZS5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9wb3J0L3NlcnZlcl9wcm9jZXNzX2Jhc2UucHk6IEFkZGVkLgorICAgICAgICAoU2VydmVyUHJv
Y2Vzc0Jhc2UpOiBNb3ZlZCBtb3N0IG9mIHNlcnZlcl9wcm9jZXNzIGhlcmUuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNzLnB5OiBBZGRlZC4KKyAgICAg
ICAgKGZpZm9Qcm9jZXNzKTogQ29udGFpbnMgc3VicHJvY2VzcyBmdW5jdGlvbnMgdXNlZCBpbiBT
aW11bGF0b3JQcm9jZXNzLgorICAgICAgICAoZmlmb1Byb2Nlc3MuX19pbml0X18pOiBDb25zdHJ1
Y3Qgc3RkaW4sIHN0ZG91dCBhbmQgc3RkZXJyIGZpbGVzIGZyb20gaGFuZGxlcy4KKyAgICAgICAg
KGZpZm9Qcm9jZXNzLnBvbGwpOiBDaGVjayBpZiB0aGUgcHJvY2VzcyBpcyBzdGlsbCBydW5uaW5n
LgorICAgICAgICAoZmlmb1Byb2Nlc3Mud2FpdCk6IFdhaXQgZm9yIHRoZSBwcm9jZXNzIHRvIGNs
b3NlLgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcyk6CisgICAgICAgIChTaW11bGF0b3JQcm9j
ZXNzLl9faW5pdF9fKTogSW5zdGFsbCBhcHAgb24gZGV2aWNlLCBzZXR1cCBlbnZpcm9ubWVudC4K
KyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX191bmxpbmtfY2hlY2tfZXhpc3RzKTogVW5saW5r
IGZpbGUsIG9ubHkgdGhyb3cgZXJyb3IgaWYgdGhlIGZpbGUgZXhpc3RzIGFmdGVyIHVubGluay4K
KyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX3Jlc2V0KTogVGVhciBkb3duIGZpbGVzLgorICAg
ICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5fc3RhcnQpOiBMYXVuY2ggYXBwIGFuZCBzZXR1cCBmaWZv
cy4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX2tpbGwpOiBBdHRlbXB0IHRvIHRlcm1pbmF0
ZSBhcHAgYmVmb3JlIGtpbGxpbmcgcHJvY2Vzcy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3hjb2RlL3NpbXVsYXRvci5weToKKyAgICAgICAgKERldmljZS5fX2luaXRfXyk6IEFkZCBob3N0
IHRvIGRldmljZS4KKyAgICAgICAgKERldmljZS5pbnN0YWxsX2FwcCk6ICBJbnN0YWxsIGFwcCBm
cm9tIGxvY2F0aW9uIG9udG8gZGV2aWNlLgorICAgICAgICAoRGV2aWNlLmxhdW5jaF9hcHApOiBM
YXVuY2ggYXBwIHdpdGggYnVuZGxlIElELgorICAgICAgICAoRGV2aWNlLnRlcm1pbmF0ZV9hcHAp
OiBUZXJtaW5hdGUgdGhlIGFwcCB3aXRoIGJ1bmRsZSBJRC4KKyAgICAgICAgKFNpbXVsYXRvci5f
cGFyc2VfZGV2aWNlcyk6IFBhc3MgaG9zdCB0byBkZXZpY2Ugd2hlbiBjb25zdHJ1Y3RpbmcuCisK
IDIwMTctMDEtMTMgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAg
ICAgICAgcnVuLWpzYy1iZW5jaG1hcmtzJyBlY2hvIHNob3VsZCBoYXZlIC1lIG9wdGlvbgpJbmRl
eDogVG9vbHMvTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTWFrZWZpbGUJKHJldmlzaW9u
IDIxMDczNSkKKysrIFRvb2xzL01ha2VmaWxlCSh3b3JraW5nIGNvcHkpCkBAIC03LDkgKzcsNiBA
QCBpZm5lcSAoLCQoU0RLUk9PVCkpCiAJaWZuZXEgKCwkKGZpbmRzdHJpbmcgaXBob25lLCQoU0RL
Uk9PVCkpKQogCQlNT0RVTEVTICs9IE1vYmlsZU1pbmlCcm93c2VyCiAJZW5kaWYKLQlpZmVxICgs
JChET19OT1RfQlVJTERfTEFZT1VUX1RFU1RfUkVMQVkpKQotCQlNT0RVTEVTICs9IExheW91dFRl
c3RSZWxheQotCWVuZGlmCiBlbmRpZgogCiBhbGw6CkluZGV4OiBUb29scy9TY3JpcHRzL2J1aWxk
LXdlYmtpdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAkocmV2aXNp
b24gMjEwNzM1KQorKysgVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQJKHdvcmtpbmcgY29weSkK
QEAgLTIwMCwxMCArMjAwLDYgQEAgaWYgKGlzQXBwbGVNYWNXZWJLaXQoKSkgewogICAgICAgICBw
dXNoIEBjb3B5TGlicmFyaWVzQXJncywgcHJvZHVjdERpcigpOwogICAgICAgICBwcmludChqb2lu
KCIgIiwgQGNvcHlMaWJyYXJpZXNBcmdzKSAuICJcbiIpOwogICAgICAgICAoc3lzdGVtKEBjb3B5
TGlicmFyaWVzQXJncykgPT0gMCkgb3IgZGllOwotCi0gICAgICAgIGlmICh3aWxsVXNlSU9TU2lt
dWxhdG9yU0RLKCkpIHsKLSAgICAgICAgICAgIChzeXN0ZW0oInBlcmwiLCAiVG9vbHMvU2NyaXB0
cy9idWlsZC1sYXlvdXR0ZXN0cmVsYXkiLCBhcmd1bWVudHNGb3JDb25maWd1cmF0aW9uKCkpID09
IDApIG9yIGRpZTsKLSAgICAgICAgfQogICAgIH0KIAogICAgICMgQnVpbGQgVG9vbHMgbmVlZGVk
IGZvciBBcHBsZSBwb3J0cwpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2Uu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkJKHJl
dmlzaW9uIDIxMDczNSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0xMzEsNiArMTMxLDcgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAg
ICAgICBzZWxmLl93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgPSBOb25lCiAgICAgICAgIHNlbGYu
X2ltYWdlX2RpZmZlciA9IE5vbmUKICAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3NfY29uc3Ry
dWN0b3IgPSBzZXJ2ZXJfcHJvY2Vzcy5TZXJ2ZXJQcm9jZXNzICAjIG92ZXJyaWRhYmxlIGZvciB0
ZXN0aW5nCisgICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBz
ZXJ2ZXJfcHJvY2Vzcy5TZXJ2ZXJQcm9jZXNzCiAKICAgICAgICAgaWYgbm90IGhhc2F0dHIob3B0
aW9ucywgJ2NvbmZpZ3VyYXRpb24nKSBvciBub3Qgb3B0aW9ucy5jb25maWd1cmF0aW9uOgogICAg
ICAgICAgICAgc2VsZi5zZXRfb3B0aW9uX2RlZmF1bHQoJ2NvbmZpZ3VyYXRpb24nLCBzZWxmLmRl
ZmF1bHRfY29uZmlndXJhdGlvbigpKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2Rhcndpbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFy
d2luLnB5CShyZXZpc2lvbiAyMTA3MzUpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
ZGFyd2luLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsMyArMTc0LDExIEBAIGNsYXNzIERhcndp
blBvcnQoQXBwbGVQb3J0KToKICAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yOgogICAgICAgICAg
ICAgX2xvZy53YXJuKCJ4Y3J1biBmYWlsZWQ7IGZhbGxpbmcgYmFjayB0byAnJXMnLiIgJSBmYWxs
YmFjaykKICAgICAgICAgICAgIHJldHVybiBmYWxsYmFjaworCisgICAgZGVmIGFwcF9pZGVudGlm
aWVyX2Zyb21fYnVuZGxlKHNlbGYsIGFwcCk6CisgICAgICAgIHBsaXN0X3BhdGggPSBhcHAgKyAn
L0luZm8ucGxpc3QnCisgICAgICAgIGlmIG5vdCBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhwbGlz
dF9wYXRoKToKKyAgICAgICAgICAgIHBsaXN0X3BhdGggPSBwbGlzdF9wYXRoID0gYXBwICsgJy9D
b250ZW50cy9JbmZvLnBsaXN0JworICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZXN5c3RlbS5leGlz
dHMocGxpc3RfcGF0aCk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4g
c2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsnL3Vzci9saWJleGVjL1BsaXN0QnVkZHknLCAn
LWMnLCAnUHJpbnQgQ0ZCdW5kbGVJZGVudGlmaWVyJywgcGxpc3RfcGF0aF0pLnJzdHJpcCgpCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkJKHJldmlzaW9uIDIxMDczNSkK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkJKHdvcmtpbmcgY29weSkK
QEAgLTEzOCw3ICsxMzgsNyBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAgICAgICAgc2VsZi5f
ZHJpdmVyX3VzZXJfZGlyZWN0b3J5X3N1ZmZpeCA9IE5vbmUKICAgICAgICAgc2VsZi5fZHJpdmVy
X3VzZXJfY2FjaGVfZGlyZWN0b3J5ID0gTm9uZQogCi0gICAgICAgICMgV2ViS2l0VGVzdFJ1bm5l
ci9MYXlvdXRUZXN0UmVsYXkgY2FuIHJlcG9ydCBiYWNrIHN1YnByb2Nlc3MgY3Jhc2hlcyBieSBw
cmludGluZworICAgICAgICAjIFdlYktpdFRlc3RSdW5uZXIgY2FuIHJlcG9ydCBiYWNrIHN1YnBy
b2Nlc3MgY3Jhc2hlcyBieSBwcmludGluZwogICAgICAgICAjICIjQ1JBU0hFRCAtIFBST0NFU1NO
QU1FIi4gIFNpbmNlIHRob3NlIGNhbiBoYXBwZW4gYXQgYW55IHRpbWUgYW5kIFNlcnZlclByb2Nl
c3MKICAgICAgICAgIyB3b24ndCBiZSBhd2FyZSBvZiB0aGVtIChzaW5jZSB0aGUgYWN0dWFsIHRv
b2wgZGlkbid0IGNyYXNoLCBqdXN0IGEgc3VicHJvY2VzcykKICAgICAgICAgIyB3ZSByZWNvcmQg
dGhlIGNyYXNoZWQgc3VicHJvY2VzcyBuYW1lIGhlcmUuCkBAIC0zMjcsNyArMzI3LDYgQEAgY2xh
c3MgRHJpdmVyKG9iamVjdCk6CiAKICAgICBkZWYgX3NldHVwX2Vudmlyb25fZm9yX2RyaXZlcihz
ZWxmLCBlbnZpcm9ubWVudCk6CiAgICAgICAgIGJ1aWxkX3Jvb3RfcGF0aCA9IHN0cihzZWxmLl9w
b3J0Ll9idWlsZF9wYXRoKCkpCi0gICAgICAgICMgRklYTUU6IERZTERfKiB2YXJpYWJsZXMgc2hv
dWxkIGJlIE1hYy1vbmx5LiBFdmVuIGlPUyBTaW11bGF0b3IgZG9lc24ndCBuZWVkIHRoZW0sIGFz
IExheW91dFRlc3RSZWxheSBpcyBhIGhvc3QgYmluYXJ5LgogICAgICAgICBzZWxmLl9hcHBlbmRf
ZW52aXJvbm1lbnRfdmFyaWFibGVfcGF0aChlbnZpcm9ubWVudCwgJ0RZTERfTElCUkFSWV9QQVRI
JywgYnVpbGRfcm9vdF9wYXRoKQogICAgICAgICBzZWxmLl9hcHBlbmRfZW52aXJvbm1lbnRfdmFy
aWFibGVfcGF0aChlbnZpcm9ubWVudCwgJ19fWFBDX0RZTERfTElCUkFSWV9QQVRIJywgYnVpbGRf
cm9vdF9wYXRoKQogICAgICAgICBzZWxmLl9hcHBlbmRfZW52aXJvbm1lbnRfdmFyaWFibGVfcGF0
aChlbnZpcm9ubWVudCwgJ0RZTERfRlJBTUVXT1JLX1BBVEgnLCBidWlsZF9yb290X3BhdGgpCkBA
IC0zNjksNyArMzY4LDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgIGVudmlyb25t
ZW50ID0gc2VsZi5fc2V0dXBfZW52aXJvbl9mb3JfdGVzdCgpCiAgICAgICAgIHNlbGYuX2NyYXNo
ZWRfcHJvY2Vzc19uYW1lID0gTm9uZQogICAgICAgICBzZWxmLl9jcmFzaGVkX3BpZCA9IE5vbmUK
LSAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3MgPSBzZWxmLl9wb3J0Ll9zZXJ2ZXJfcHJvY2Vz
c19jb25zdHJ1Y3RvcihzZWxmLl9wb3J0LCBzZWxmLl9zZXJ2ZXJfbmFtZSwgc2VsZi5jbWRfbGlu
ZShwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyksIGVudmlyb25tZW50KQorICAgICAgICBzZWxm
Ll9zZXJ2ZXJfcHJvY2VzcyA9IHNlbGYuX3BvcnQuX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3Ry
dWN0b3Ioc2VsZi5fcG9ydCwgc2VsZi5fc2VydmVyX25hbWUsIHNlbGYuY21kX2xpbmUocGl4ZWxf
dGVzdHMsIHBlcl90ZXN0X2FyZ3MpLCBlbnZpcm9ubWVudCkKICAgICAgICAgc2VsZi5fc2VydmVy
X3Byb2Nlc3Muc3RhcnQoKQogCiAgICAgZGVmIF9ydW5fcG9zdF9zdGFydF90YXNrcyhzZWxmKToK
QEAgLTYxMSwyMSArNjEwLDE2IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogICAgICAgICByZXR1
cm4gVHJ1ZQogCiAKLSMgRklYTUU6IHRoaXMgc2hvdWxkIGJlIGFic3RyYWN0ZWQgb3V0IHZpYSB0
aGUgUG9ydCBzdWJjbGFzcyBzb21laG93LgogY2xhc3MgSU9TU2ltdWxhdG9yRHJpdmVyKERyaXZl
cik6CiAgICAgZGVmIGNtZF9saW5lKHNlbGYsIHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKToK
ICAgICAgICAgY21kID0gc3VwZXIoSU9TU2ltdWxhdG9yRHJpdmVyLCBzZWxmKS5jbWRfbGluZShw
aXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncykKLSAgICAgICAgcmVsYXlfdG9vbCA9IHNlbGYuX3Bv
cnQucmVsYXlfcGF0aAogICAgICAgICBkdW1wX3Rvb2wgPSBjbWRbMF0KICAgICAgICAgZHVtcF90
b29sX2FyZ3MgPSBjbWRbMTpdCi0gICAgICAgIHByb2R1Y3RfZGlyID0gc2VsZi5fcG9ydC5fYnVp
bGRfcGF0aCgpCiAgICAgICAgIHJlbGF5X2FyZ3MgPSBbCi0gICAgICAgICAgICAnLWRldmVsb3Bl
ckRpcicsIHNlbGYuX3BvcnQuZGV2ZWxvcGVyX2RpciwKLSAgICAgICAgICAgICctdWRpZCcsIHNl
bGYuX3BvcnQuZGV2aWNlX2lkX2Zvcl93b3JrZXJfbnVtYmVyKHNlbGYuX3dvcmtlcl9udW1iZXIp
LAotICAgICAgICAgICAgJy1wcm9kdWN0RGlyJywgcHJvZHVjdF9kaXIsCi0gICAgICAgICAgICAn
LWFwcCcsIGR1bXBfdG9vbCwKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuZGV2aWNlX2lkX2Zvcl93
b3JrZXJfbnVtYmVyKHNlbGYuX3dvcmtlcl9udW1iZXIpLAorICAgICAgICAgICAgZHVtcF90b29s
LAogICAgICAgICBdCi0gICAgICAgIHJldHVybiBbcmVsYXlfdG9vbF0gKyByZWxheV9hcmdzICsg
WyctLSddICsgZHVtcF90b29sX2FyZ3MKKyAgICAgICAgcmV0dXJuIHJlbGF5X2FyZ3MgKyBbJy0t
J10gKyBkdW1wX3Rvb2xfYXJncwogCiAgICAgZGVmIF9zZXR1cF9lbnZpcm9uX2Zvcl9kcml2ZXIo
c2VsZiwgZW52aXJvbm1lbnQpOgogICAgICAgICBlbnZpcm9ubWVudFsnREVWRUxPUEVSX0RJUidd
ID0gc2VsZi5fcG9ydC5kZXZlbG9wZXJfZGlyCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvZHJpdmVyX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIxMDczNSkKKysrIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkK
QEAgLTI2NCw3ICsyNjQsNyBAQCBjbGFzcyBEcml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
IAogICAgIGRlZiB0ZXN0X3N0b3BfY2xlYW5zX3VwX3Byb3Blcmx5KHNlbGYpOgogICAgICAgICBw
b3J0ID0gVGVzdFdlYktpdFBvcnQoKQotICAgICAgICBwb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25z
dHJ1Y3RvciA9IE1vY2tTZXJ2ZXJQcm9jZXNzCisgICAgICAgIHBvcnQuX3Rlc3RfcnVubmVyX3By
b2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJvY2VzcwogICAgICAgICBkcml2ZXIgPSBE
cml2ZXIocG9ydCwgMCwgcGl4ZWxfdGVzdHM9VHJ1ZSkKICAgICAgICAgZHJpdmVyLnN0YXJ0KFRy
dWUsIFtdKQogICAgICAgICBsYXN0X3RtcGRpciA9IHBvcnQuX2ZpbGVzeXN0ZW0ubGFzdF90bXBk
aXIKQEAgLTI3NCw3ICsyNzQsNyBAQCBjbGFzcyBEcml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
KToKIAogICAgIGRlZiB0ZXN0X3R3b19zdGFydHNfY2xlYW5zX3VwX3Byb3Blcmx5KHNlbGYpOgog
ICAgICAgICBwb3J0ID0gVGVzdFdlYktpdFBvcnQoKQotICAgICAgICBwb3J0Ll9zZXJ2ZXJfcHJv
Y2Vzc19jb25zdHJ1Y3RvciA9IE1vY2tTZXJ2ZXJQcm9jZXNzCisgICAgICAgIHBvcnQuX3Rlc3Rf
cnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJvY2VzcwogICAgICAgICBk
cml2ZXIgPSBEcml2ZXIocG9ydCwgMCwgcGl4ZWxfdGVzdHM9VHJ1ZSkKICAgICAgICAgZHJpdmVy
LnN0YXJ0KFRydWUsIFtdKQogICAgICAgICBsYXN0X3RtcGRpciA9IHBvcnQuX2ZpbGVzeXN0ZW0u
bGFzdF90bXBkaXIKQEAgLTI4Myw3ICsyODMsNyBAQCBjbGFzcyBEcml2ZXJUZXN0KHVuaXR0ZXN0
LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3N0YXJ0X2FjdHVhbGx5X3N0YXJ0cyhzZWxmKToK
ICAgICAgICAgcG9ydCA9IFRlc3RXZWJLaXRQb3J0KCkKLSAgICAgICAgcG9ydC5fc2VydmVyX3By
b2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJvY2VzcworICAgICAgICBwb3J0Ll90ZXN0
X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gTW9ja1NlcnZlclByb2Nlc3MKICAgICAgICAg
ZHJpdmVyID0gRHJpdmVyKHBvcnQsIDAsIHBpeGVsX3Rlc3RzPVRydWUpCiAgICAgICAgIGRyaXZl
ci5zdGFydChUcnVlLCBbXSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRyaXZlci5fc2VydmVy
X3Byb2Nlc3Muc3RhcnRlZCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Mu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQkocmV2
aXNpb24gMjEwNzM1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQkod29y
a2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5t
b2RlbHMudGVzdF9jCiBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGNvbmZpZyBhcyBwb3J0X2Nv
bmZpZwogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBkcml2ZXIsIGltYWdlX2RpZmYKIGZyb20g
d2Via2l0cHkucG9ydC5kYXJ3aW4gaW1wb3J0IERhcndpblBvcnQKK2Zyb20gd2Via2l0cHkucG9y
dC5zaW11bGF0b3JfcHJvY2VzcyBpbXBvcnQgU2ltdWxhdG9yUHJvY2VzcwogZnJvbSB3ZWJraXRw
eS54Y29kZS5zaW11bGF0b3IgaW1wb3J0IFNpbXVsYXRvciwgUnVudGltZSwgRGV2aWNlVHlwZQog
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCiAK
QEAgLTc4LDcgKzc5LDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAg
ICBTREsgPSAnaXBob25lc2ltdWxhdG9yJwogCiAgICAgU0lNVUxBVE9SX0JVTkRMRV9JRCA9ICdj
b20uYXBwbGUuaXBob25lc2ltdWxhdG9yJwotICAgIHJlbGF5X25hbWUgPSAnTGF5b3V0VGVzdFJl
bGF5JwogICAgIFNJTVVMQVRPUl9ESVJFQ1RPUlkgPSAiL3RtcC9XZWJLaXRUZXN0aW5nU2ltdWxh
dG9ycy8iCiAgICAgTFNSRUdJU1RFUl9QQVRIID0gIi9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtz
L0NvcmVTZXJ2aWNlcy5mcmFtZXdvcmsvRnJhbWV3b3Jrcy9MYXVuY2hTZXJ2aWNlcy5mcmFtZXdv
cmsvVmVyc2lvbnMvQ3VycmVudC9TdXBwb3J0L2xzcmVnaXN0ZXIiCiAgICAgUFJPQ0VTU19DT1VO
VF9FU1RJTUFURV9QRVJfU0lNVUxBVE9SX0lOU1RBTkNFID0gMTAwCkBAIC05Nyw2ICs5Nyw3IEBA
IGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAKICAgICBkZWYgX19pbml0X18o
c2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncyk6CiAgICAgICAgIERhcndpblBvcnQuX19p
bml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5fdGVz
dF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IFNpbXVsYXRvclByb2Nlc3MKIAogICAgICAg
ICBvcHRpb25hbF9kZXZpY2VfY2xhc3MgPSBzZWxmLmdldF9vcHRpb24oJ2RldmljZV9jbGFzcycp
CiAgICAgICAgIHNlbGYuX3ByaW50aW5nX2NtZF9saW5lID0gRmFsc2UKQEAgLTE0OCwxNiArMTQ5
LDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgICAgIGRl
dmljZV90eXBlID0gRGV2aWNlVHlwZS5mcm9tX25hbWUoZGV2aWNlX25hbWUpCiAgICAgICAgIHJl
dHVybiBkZXZpY2VfdHlwZQogCi0gICAgQHByb3BlcnR5Ci0gICAgQG1lbW9pemVkCi0gICAgZGVm
IHJlbGF5X3BhdGgoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX3Jvb3Rfd2FzX3NldDoKLSAgICAg
ICAgICAgIHBhdGggPSBzZWxmLl9maWxlc3lzdGVtLmFic3BhdGgoc2VsZi5nZXRfb3B0aW9uKCdy
b290JykpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtYWNfY29uZmlnID0gcG9ydF9jb25m
aWcuQ29uZmlnKHNlbGYuX2V4ZWN1dGl2ZSwgc2VsZi5fZmlsZXN5c3RlbSwgJ21hYycpCi0gICAg
ICAgICAgICBwYXRoID0gbWFjX2NvbmZpZy5idWlsZF9kaXJlY3Rvcnkoc2VsZi5nZXRfb3B0aW9u
KCdjb25maWd1cmF0aW9uJykpCi0gICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLmpvaW4o
cGF0aCwgc2VsZi5yZWxheV9uYW1lKQotCiAgICAgQG1lbW9pemVkCiAgICAgZGVmIGNoaWxkX3By
b2Nlc3NlcyhzZWxmKToKICAgICAgICAgcmV0dXJuIGludChzZWxmLmdldF9vcHRpb24oJ2NoaWxk
X3Byb2Nlc3NlcycpKQpAQCAtMTgyLDE5ICsxNzMsNiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0
KERhcndpblBvcnQpOgogCiAgICAgICAgIHJldHVybiBtaW4obWF4aW11bV9zaW11bGF0b3JfY291
bnRfb25fdGhpc19zeXN0ZW0sIGJlc3RfY2hpbGRfcHJvY2Vzc19jb3VudF9mb3JfY3B1KQogCi0g
ICAgZGVmIF9jaGVja19yZWxheShzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0
ZW0uZXhpc3RzKHNlbGYucmVsYXlfcGF0aCk6Ci0gICAgICAgICAgICBfbG9nLmVycm9yKCIlcyB3
YXMgbm90IGZvdW5kIGF0ICVzIiAlIChzZWxmLnJlbGF5X25hbWUsIHNlbGYucmVsYXlfcGF0aCkp
Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRl
ZiBfY2hlY2tfcG9ydF9idWlsZChzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuX3Jvb3Rfd2Fz
X3NldCBhbmQgc2VsZi5nZXRfb3B0aW9uKCdidWlsZCcpIGFuZCBub3Qgc2VsZi5fYnVpbGRfcmVs
YXkoKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBpZiBub3Qgc2VsZi5fY2hl
Y2tfcmVsYXkoKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1
ZQotCiAgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRl
cnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49dGltZS50aW1lLCBzbGVlcF9mbj10aW1lLnNsZWVwLCB3
YWl0X2Zvcl9sb2c9VHJ1ZSk6CiAgICAgICAgIHRpbWVfZm4gPSB0aW1lX2ZuIG9yIHRpbWUudGlt
ZQogICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9yIHRpbWUuc2xlZXAKQEAgLTIxNSw3ICsx
OTMsNyBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgICAgICAgICAg
cmV0dXJuIHNlbGYuX2dldF9jcmFzaF9sb2coY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3Bp
ZFswXSwgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZFsxXSwgc3Rkb3V0LAogICAgICAg
ICAgICAgICAgICdcbicuam9pbihzdGRlcnJfbGluZXMpLCBuZXdlcl90aGFuLCB0aW1lX2ZuLCBz
bGVlcF9mbiwgd2FpdF9mb3JfbG9nKQogCi0gICAgICAgICMgTGF5b3V0VGVzdFJlbGF5IGNyYXNo
ZWQKKyAgICAgICAgIyBBcHAgY3Jhc2hlZAogICAgICAgICBfbG9nLmRlYnVnKCdsb29raW5nIGZv
ciBjcmFzaCBsb2cgZm9yICVzOiVzJyAlIChuYW1lLCBzdHIocGlkKSkpCiAgICAgICAgIGNyYXNo
X2xvZyA9ICcnCiAgICAgICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3Moc2VsZi5ob3N0KQpAQCAt
MjMzLDI1ICsyMTEsNiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAg
ICAgICAgICAgcmV0dXJuIHN0ZGVyciwgTm9uZQogICAgICAgICByZXR1cm4gc3RkZXJyLCBjcmFz
aF9sb2cKIAotICAgIGRlZiBfYnVpbGRfcmVsYXkoc2VsZik6Ci0gICAgICAgIGVudmlyb25tZW50
ID0gc2VsZi5ob3N0LmNvcHlfY3VycmVudF9lbnZpcm9ubWVudCgpCi0gICAgICAgIGVudmlyb25t
ZW50LmRpc2FibGVfZ2NjX3NtYXJ0cXVvdGVzKCkKLSAgICAgICAgZW52ID0gZW52aXJvbm1lbnQu
dG9fZGljdGlvbmFyeSgpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBGSVhNRTogV2Ug
c2hvdWxkIGJlIHBhc3NpbmcgX2FyZ3VtZW50c19mb3JfY29uZmlndXJhdGlvbigpLCB3aGljaCBy
ZXNwZWN0cyBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBwb3J0LAotICAgICAgICAgICAgIyBpbnN0
ZWFkIG9mIGhhcmRjb2RpbmcgLS1pb3Mtc2ltdWxhdG9yLgotICAgICAgICAgICAgc2VsZi5fcnVu
X3NjcmlwdCgiYnVpbGQtbGF5b3V0dGVzdHJlbGF5IiwgYXJncz1bIi0taW9zLXNpbXVsYXRvciJd
LCBlbnY9ZW52KQotICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3IsIGU6Ci0gICAgICAgICAgICBf
bG9nLmVycm9yKGUubWVzc2FnZV93aXRoX291dHB1dChvdXRwdXRfbGltaXQ9Tm9uZSkpCi0gICAg
ICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBfYnVp
bGRfZHJpdmVyKHNlbGYpOgotICAgICAgICBidWlsdF90b29sID0gc3VwZXIoSU9TU2ltdWxhdG9y
UG9ydCwgc2VsZikuX2J1aWxkX2RyaXZlcigpCi0gICAgICAgIGJ1aWx0X3JlbGF5ID0gc2VsZi5f
YnVpbGRfcmVsYXkoKQotICAgICAgICByZXR1cm4gYnVpbHRfdG9vbCBhbmQgYnVpbHRfcmVsYXkK
LQogICAgIGRlZiBfYnVpbGRfZHJpdmVyX2ZsYWdzKHNlbGYpOgogICAgICAgICBhcmNocyA9IFsn
QVJDSFM9aTM4NiddIGlmIHNlbGYuYXJjaGl0ZWN0dXJlKCkgPT0gJ3g4NicgZWxzZSBbXQogICAg
ICAgICBzZGsgPSBbJy0tc2RrJywgJ2lwaG9uZXNpbXVsYXRvciddCkBAIC0yODAsOSArMjM5LDkg
QEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKIAogICAgIGRlZiBfY3JlYXRl
X3NpbXVsYXRvcnMoc2VsZik6CiAgICAgICAgIGlmIChzZWxmLmRlZmF1bHRfY2hpbGRfcHJvY2Vz
c2VzKCkgPCBzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKToKLSAgICAgICAgICAgICAgICBfbG9nLndh
cm4oIllvdSBoYXZlIHNwZWNpZmllZCB2ZXJ5IGhpZ2ggdmFsdWUoezB9KSBmb3IgLS1jaGlsZC1w
cm9jZXNzZXMiLmZvcm1hdChzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKSkKLSAgICAgICAgICAgICAg
ICBfbG9nLndhcm4oIm1heGltdW0gY2hpbGQtcHJvY2Vzc2VzIHdoaWNoIGNhbiBiZSBzdXBwb3J0
ZWQgb24gdGhpcyBzeXN0ZW0gYXJlOiB7MH0iLmZvcm1hdChzZWxmLmRlZmF1bHRfY2hpbGRfcHJv
Y2Vzc2VzKCkpKQotICAgICAgICAgICAgICAgIF9sb2cud2FybigiVGhpcyBpcyB2ZXJ5IGxpa2Vs
eSB0byBmYWlsLiIpCisgICAgICAgICAgICBfbG9nLndhcm4oIllvdSBoYXZlIHNwZWNpZmllZCB2
ZXJ5IGhpZ2ggdmFsdWUoezB9KSBmb3IgLS1jaGlsZC1wcm9jZXNzZXMiLmZvcm1hdChzZWxmLmNo
aWxkX3Byb2Nlc3NlcygpKSkKKyAgICAgICAgICAgIF9sb2cud2FybigibWF4aW11bSBjaGlsZC1w
cm9jZXNzZXMgd2hpY2ggY2FuIGJlIHN1cHBvcnRlZCBvbiB0aGlzIHN5c3RlbSBhcmU6IHswfSIu
Zm9ybWF0KHNlbGYuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKSkpCisgICAgICAgICAgICBfbG9n
Lndhcm4oIlRoaXMgaXMgdmVyeSBsaWtlbHkgdG8gZmFpbC4iKQogCiAgICAgICAgIGlmIHNlbGYu
X3VzaW5nX2RlZGljYXRlZF9zaW11bGF0b3JzKCk6CiAgICAgICAgICAgICBzZWxmLl9jcmVhdGVT
aW11bGF0b3JBcHBzKCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5p
dHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc191
bml0dGVzdC5weQkocmV2aXNpb24gMjEwNzM1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L2lvc191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBjbGFz
cyBpb3NUZXN0KGRhcndpbl90ZXN0Y2FzZS5EYXJ3aW5UZXN0CiAgICAgICAgIHBvcnQuX3J1bl9z
Y3JpcHQgPSBydW5fc2NyaXB0CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5hcmNoaXRl
Y3R1cmUoKSwgJ3g4NicpCiAgICAgICAgIHBvcnQuX2J1aWxkX2RyaXZlcigpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoc2VsZi5hcmdzLCBbJy0taW9zLXNpbXVsYXRvciddKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHNlbGYuYXJncywgWydBUkNIUz1pMzg2JywgJy0tc2RrJywgJ2lwaG9u
ZXNpbXVsYXRvciddKQogCiAgICAgZGVmIHRlc3RfNjRiaXQoc2VsZik6CiAgICAgICAgICMgQXBw
bGUgTWFjIHBvcnQgaXMgNjQtYml0IGJ5IGRlZmF1bHQKQEAgLTgyLDcgKzgyLDcgQEAgY2xhc3Mg
aW9zVGVzdChkYXJ3aW5fdGVzdGNhc2UuRGFyd2luVGVzdAogCiAgICAgICAgIHBvcnQuX3J1bl9z
Y3JpcHQgPSBydW5fc2NyaXB0CiAgICAgICAgIHBvcnQuX2J1aWxkX2RyaXZlcigpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hcmdzLCBbJy0taW9zLXNpbXVsYXRvciddKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYXJncywgWyctLXNkaycsICdpcGhvbmVzaW11bGF0b3In
XSkKIAogICAgIGRlZiB0ZXN0X3Nka19uYW1lKHNlbGYpOgogICAgICAgICBwb3J0ID0gc2VsZi5t
YWtlX3BvcnQoKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9j
ZXNzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJf
cHJvY2Vzcy5weQkocmV2aXNpb24gMjEwNzM1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L3NlcnZlcl9wcm9jZXNzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNCBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CkBAIC0zNCw3NCArMzUsMTcgQEAgaW1wb3J0IHNpZ25hbAogaW1wb3J0IHN5cwogaW1w
b3J0IHRpbWUKIAotIyBOb3RlIHRoYXQgYWx0aG91Z2ggd2luMzIgcHl0aG9uIGRvZXMgcHJvdmlk
ZSBhbiBpbXBsZW1lbnRhdGlvbiBvZgotIyB0aGUgd2luMzIgc2VsZWN0IEFQSSwgaXQgb25seSB3
b3JrcyBvbiBzb2NrZXRzLCBhbmQgbm90IG9uIHRoZSBuYW1lZCBwaXBlcwotIyB1c2VkIGJ5IHN1
YnByb2Nlc3MsIHNvIHdlIGhhdmUgdG8gdXNlIHRoZSBuYXRpdmUgQVBJcyBkaXJlY3RseS4KLWlm
IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKLSAgICBpbXBvcnQgbXN2Y3J0Ci0gICAg
aW1wb3J0IHdpbjMycGlwZQotICAgIGltcG9ydCB3aW4zMmZpbGUKLWVsc2U6Ci0gICAgaW1wb3J0
IGZjbnRsCi0gICAgaW1wb3J0IG9zCi0gICAgaW1wb3J0IHNlbGVjdAotCiBmcm9tIHdlYmtpdHB5
LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgorZnJvbSB3ZWJraXRw
eS5wb3J0LnNlcnZlcl9wcm9jZXNzX2Jhc2UgaW1wb3J0IFNlcnZlclByb2Nlc3NCYXNlCiAKIAog
X2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCiAKLWNsYXNzIFNlcnZlclByb2Nl
c3Mob2JqZWN0KToKLSAgICAiIiJUaGlzIGNsYXNzIHByb3ZpZGVzIGEgd3JhcHBlciBhcm91bmQg
YSBzdWJwcm9jZXNzIHRoYXQKLSAgICBpbXBsZW1lbnRzIGEgc2ltcGxlIHJlcXVlc3QvcmVzcG9u
c2UgdXNhZ2UgbW9kZWwuIFRoZSBwcmltYXJ5IGJlbmVmaXQKLSAgICBpcyB0aGF0IHJlYWRpbmcg
cmVzcG9uc2VzIHRha2VzIGEgZGVhZGxpbmUsIHNvIHRoYXQgd2UgZG9uJ3QgZXZlciBibG9jawot
ICAgIGluZGVmaW5pdGVseS4gVGhlIGNsYXNzIGFsc28gaGFuZGxlcyB0cmFuc3BhcmVudGx5IHJl
c3RhcnRpbmcgcHJvY2Vzc2VzCi0gICAgYXMgbmVjZXNzYXJ5IHRvIGtlZXAgaXNzdWluZyBjb21t
YW5kcy4iIiIKK2NsYXNzIFNlcnZlclByb2Nlc3MoU2VydmVyUHJvY2Vzc0Jhc2UpOgogCiAgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVudj1Ob25lLCB1bml2ZXJz
YWxfbmV3bGluZXM9RmFsc2UsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2g9RmFsc2UpOgotICAgICAg
ICBzZWxmLl9wb3J0ID0gcG9ydF9vYmoKLSAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUgICMgU2hv
dWxkIGJlIHRoZSBjb21tYW5kIG5hbWUgKGUuZy4gRHVtcFJlbmRlclRyZWUsIEltYWdlRGlmZikK
LSAgICAgICAgc2VsZi5fY21kID0gY21kCi0gICAgICAgIHNlbGYuX2VudiA9IGVudgotICAgICAg
ICAjIFNldCBpZiB0aGUgcHJvY2VzcyBvdXRwdXRzIG5vbi1zdGFuZGFyZCBuZXdsaW5lcyBsaWtl
ICdcclxuJyBvciAnXHInLgotICAgICAgICAjIERvbid0IHNldCBpZiB0aGVyZSB3aWxsIGJlIGJp
bmFyeSBkYXRhIG9yIHRoZSBkYXRhIG11c3QgYmUgQVNDSUkgZW5jb2RlZC4KLSAgICAgICAgc2Vs
Zi5fdW5pdmVyc2FsX25ld2xpbmVzID0gdW5pdmVyc2FsX25ld2xpbmVzCi0gICAgICAgIHNlbGYu
X3RyZWF0X25vX2RhdGFfYXNfY3Jhc2ggPSB0cmVhdF9ub19kYXRhX2FzX2NyYXNoCi0gICAgICAg
IHNlbGYuX2hvc3QgPSBzZWxmLl9wb3J0Lmhvc3QKLSAgICAgICAgc2VsZi5fcGlkID0gTm9uZQot
ICAgICAgICBzZWxmLl9yZXNldCgpCi0KLSAgICAgICAgIyBTZWUgY29tbWVudCBpbiBpbXBvcnRz
IGZvciB3aHkgd2UgbmVlZCB0aGUgd2luMzIgQVBJcyBhbmQgY2FuJ3QganVzdCB1c2Ugc2VsZWN0
LgotICAgICAgICAjIEZJWE1FOiB0aGVyZSBzaG91bGQgYmUgYSB3YXkgdG8gZ2V0IHdpbjMyIHZz
LiBjeWd3aW4gZnJvbSBwbGF0Zm9ybWluZm8uCi0gICAgICAgIHNlbGYuX3VzZV93aW4zMl9hcGlz
ID0gc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpCi0KLSAgICBkZWYgbmFtZShzZWxmKToK
LSAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKLQotICAgIGRlZiBwaWQoc2VsZik6Ci0gICAgICAg
IHJldHVybiBzZWxmLl9waWQKLQotICAgIGRlZiBfcmVzZXQoc2VsZik6Ci0gICAgICAgIGlmIGdl
dGF0dHIoc2VsZiwgJ19wcm9jJywgTm9uZSk6Ci0gICAgICAgICAgICBpZiBzZWxmLl9wcm9jLnN0
ZGluOgotICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4uY2xvc2UoKQotICAgICAgICAg
ICAgICAgIHNlbGYuX3Byb2Muc3RkaW4gPSBOb25lCi0gICAgICAgICAgICBpZiBzZWxmLl9wcm9j
LnN0ZG91dDoKLSAgICAgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZG91dC5jbG9zZSgpCi0gICAg
ICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRvdXQgPSBOb25lCi0gICAgICAgICAgICBpZiBzZWxm
Ll9wcm9jLnN0ZGVycjoKLSAgICAgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGVyci5jbG9zZSgp
Ci0gICAgICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRlcnIgPSBOb25lCi0KLSAgICAgICAgc2Vs
Zi5fcHJvYyA9IE5vbmUKLSAgICAgICAgc2VsZi5fb3V0cHV0ID0gc3RyKCkgICMgYnl0ZXNhcnJh
eSgpIG9uY2Ugd2UgcmVxdWlyZSBQeXRob24gMi42Ci0gICAgICAgIHNlbGYuX2Vycm9yID0gc3Ry
KCkgICMgYnl0ZXNhcnJheSgpIG9uY2Ugd2UgcmVxdWlyZSBQeXRob24gMi42Ci0gICAgICAgIHNl
bGYuX2NyYXNoZWQgPSBGYWxzZQotICAgICAgICBzZWxmLnRpbWVkX291dCA9IEZhbHNlCi0KLSAg
ICBkZWYgcHJvY2Vzc19uYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQorICAg
ICAgICBzdXBlcihTZXJ2ZXJQcm9jZXNzLCBzZWxmKS5fX2luaXRfXyhwb3J0X29iaiwgbmFtZSwg
Y21kLCBlbnYsIHVuaXZlcnNhbF9uZXdsaW5lcywgdHJlYXRfbm9fZGF0YV9hc19jcmFzaCkKIAog
ICAgIGRlZiBfc3RhcnQoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX3Byb2M6CkBAIC0xMzcsMjUx
ICs4MSwzIEBAIGNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToKICAgICAgICAgaWYgc2VsZi5f
cHJvYy5yZXR1cm5jb2RlIGluICgtMTA3Mzc0MTUxMCwgLXNpZ25hbC5TSUdJTlQpOgogICAgICAg
ICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQKIAotICAgIGRlZiBwb2xsKHNlbGYpOgotICAg
ICAgICAiIiJDaGVjayB0byBzZWUgaWYgdGhlIHVuZGVybHlpbmcgcHJvY2VzcyBpcyBydW5uaW5n
OyByZXR1cm5zIE5vbmUKLSAgICAgICAgaWYgaXQgc3RpbGwgaXMgKHdyYXBwZXIgYXJvdW5kIHN1
YnByb2Nlc3MucG9sbCkuIiIiCi0gICAgICAgIGlmIHNlbGYuX3Byb2M6Ci0gICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fcHJvYy5wb2xsKCkKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGRlZiB3
cml0ZShzZWxmLCBieXRlcywgaWdub3JlX2NyYXNoPUZhbHNlKToKLSAgICAgICAgIiIiV3JpdGUg
YSByZXF1ZXN0IHRvIHRoZSBzdWJwcm9jZXNzLiBUaGUgc3VicHJvY2VzcyBpcyAocmUtKXN0YXJ0
KCknZWQKLSAgICAgICAgaWYgaXMgbm90IGFscmVhZHkgcnVubmluZy4iIiIKLSAgICAgICAgaWYg
bm90IHNlbGYuX3Byb2M6Ci0gICAgICAgICAgICBzZWxmLl9zdGFydCgpCi0gICAgICAgIHRyeToK
LSAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4ud3JpdGUoYnl0ZXMpCi0gICAgICAgIGV4Y2Vw
dCBJT0Vycm9yLCBlOgotICAgICAgICAgICAgc2VsZi5zdG9wKDAuMCkKLSAgICAgICAgICAgICMg
c3RvcCgpIGNhbGxzIF9yZXNldCgpLCBzbyB3ZSBoYXZlIHRvIHNldCBjcmFzaGVkIHRvIFRydWUg
YWZ0ZXIgY2FsbGluZyBzdG9wKCkKLSAgICAgICAgICAgICMgdW5sZXNzIHdlIGFscmVhZHkga25v
dyB0aGF0IHRoaXMgaXMgYSB0aW1lb3V0LgotICAgICAgICAgICAgaWYgbm90IGlnbm9yZV9jcmFz
aDoKLSAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCdUaGlzIHRlc3QgbWFya2VkIGFzIGEgY3Jh
c2ggYmVjYXVzZSBvZiBhIGJyb2tlbiBwaXBlIHdoZW4gd3JpdGluZyB0byBzdGRpbiBvZiB0aGUg
c2VydmVyIHByb2Nlc3MuJykKLSAgICAgICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQot
Ci0gICAgZGVmIF9wb3Bfc3Rkb3V0X2xpbmVfaWZfcmVhZHkoc2VsZik6Ci0gICAgICAgIGluZGV4
X2FmdGVyX25ld2xpbmUgPSBzZWxmLl9vdXRwdXQuZmluZCgnXG4nKSArIDEKLSAgICAgICAgaWYg
aW5kZXhfYWZ0ZXJfbmV3bGluZSA+IDA6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcG9wX291
dHB1dF9ieXRlcyhpbmRleF9hZnRlcl9uZXdsaW5lKQotICAgICAgICByZXR1cm4gTm9uZQotCi0g
ICAgZGVmIF9wb3Bfc3RkZXJyX2xpbmVfaWZfcmVhZHkoc2VsZik6Ci0gICAgICAgIGluZGV4X2Fm
dGVyX25ld2xpbmUgPSBzZWxmLl9lcnJvci5maW5kKCdcbicpICsgMQotICAgICAgICBpZiBpbmRl
eF9hZnRlcl9uZXdsaW5lID4gMDoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9wb3BfZXJyb3Jf
Ynl0ZXMoaW5kZXhfYWZ0ZXJfbmV3bGluZSkKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGRl
ZiBwb3BfYWxsX2J1ZmZlcmVkX3N0ZGVycihzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Bv
cF9lcnJvcl9ieXRlcyhsZW4oc2VsZi5fZXJyb3IpKQotCi0gICAgZGVmIHJlYWRfc3Rkb3V0X2xp
bmUoc2VsZiwgZGVhZGxpbmUpOgotICAgICAgICByZXR1cm4gc2VsZi5fcmVhZChkZWFkbGluZSwg
c2VsZi5fcG9wX3N0ZG91dF9saW5lX2lmX3JlYWR5KQotCi0gICAgZGVmIHJlYWRfc3RkZXJyX2xp
bmUoc2VsZiwgZGVhZGxpbmUpOgotICAgICAgICByZXR1cm4gc2VsZi5fcmVhZChkZWFkbGluZSwg
c2VsZi5fcG9wX3N0ZGVycl9saW5lX2lmX3JlYWR5KQotCi0gICAgZGVmIHJlYWRfZWl0aGVyX3N0
ZG91dF9vcl9zdGRlcnJfbGluZShzZWxmLCBkZWFkbGluZSk6Ci0gICAgICAgIGRlZiByZXRyaWV2
ZV9ieXRlc19mcm9tX2J1ZmZlcnMoKToKLSAgICAgICAgICAgIHN0ZG91dF9saW5lID0gc2VsZi5f
cG9wX3N0ZG91dF9saW5lX2lmX3JlYWR5KCkKLSAgICAgICAgICAgIGlmIHN0ZG91dF9saW5lOgot
ICAgICAgICAgICAgICAgIHJldHVybiBzdGRvdXRfbGluZSwgTm9uZQotICAgICAgICAgICAgc3Rk
ZXJyX2xpbmUgPSBzZWxmLl9wb3Bfc3RkZXJyX2xpbmVfaWZfcmVhZHkoKQotICAgICAgICAgICAg
aWYgc3RkZXJyX2xpbmU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUsIHN0ZGVycl9saW5l
Ci0gICAgICAgICAgICByZXR1cm4gTm9uZSAgIyBJbnN0cnVjdHMgdGhlIGNhbGxlciB0byBrZWVw
IHdhaXRpbmcuCi0KLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gc2VsZi5fcmVhZChkZWFkbGluZSwg
cmV0cmlldmVfYnl0ZXNfZnJvbV9idWZmZXJzKQotICAgICAgICAjIEZJWE1FOiBUaGlzIGlzIGEg
Yml0IG9mIGEgaGFjayBhcm91bmQgdGhlIGZhY3QgdGhhdCBfcmVhZCBub3JtYWxseSBvbmx5IHJl
dHVybnMgb25lIHZhbHVlLCBidXQgdGhpcyBjYWxsZXIgd2FudHMgaXQgdG8gcmV0dXJuIHR3by4K
LSAgICAgICAgaWYgcmV0dXJuX3ZhbHVlIGlzIE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gTm9u
ZSwgTm9uZQotICAgICAgICByZXR1cm4gcmV0dXJuX3ZhbHVlCi0KLSAgICBkZWYgcmVhZF9zdGRv
dXQoc2VsZiwgZGVhZGxpbmUsIHNpemUpOgotICAgICAgICBpZiBzaXplIDw9IDA6Ci0gICAgICAg
ICAgICByYWlzZSBWYWx1ZUVycm9yKCdTZXJ2ZXJQcm9jZXNzLnJlYWQoKSBjYWxsZWQgd2l0aCBh
IG5vbi1wb3NpdGl2ZSBzaXplOiAlZCAnICUgc2l6ZSkKLQotICAgICAgICBkZWYgcmV0cmlldmVf
Ynl0ZXNfZnJvbV9zdGRvdXRfYnVmZmVyKCk6Ci0gICAgICAgICAgICBpZiBsZW4oc2VsZi5fb3V0
cHV0KSA+PSBzaXplOgotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9wb3Bfb3V0cHV0X2J5
dGVzKHNpemUpCi0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgIHJldHVybiBzZWxm
Ll9yZWFkKGRlYWRsaW5lLCByZXRyaWV2ZV9ieXRlc19mcm9tX3N0ZG91dF9idWZmZXIpCi0KLSAg
ICBkZWYgX2xvZyhzZWxmLCBtZXNzYWdlKToKLSAgICAgICAgIyBUaGlzIGlzIGEgYml0IG9mIGEg
aGFjaywgYnV0IHdlIGZpcnN0IGxvZyBhIGJsYW5rIGxpbmUgdG8gYXZvaWQKLSAgICAgICAgIyBt
ZXNzaW5nIHVwIHRoZSBtYXN0ZXIgcHJvY2VzcydzIG91dHB1dC4KLSAgICAgICAgX2xvZy5pbmZv
KCcnKQotICAgICAgICBfbG9nLmluZm8obWVzc2FnZSkKLQotICAgIGRlZiBfaGFuZGxlX3RpbWVv
dXQoc2VsZik6Ci0gICAgICAgIHNlbGYudGltZWRfb3V0ID0gVHJ1ZQotICAgICAgICBpZiBzZWxm
Ll9wb3J0LmdldF9vcHRpb24oInNhbXBsZV9vbl90aW1lb3V0Iik6Ci0gICAgICAgICAgICBzZWxm
Ll9wb3J0LnNhbXBsZV9wcm9jZXNzKHNlbGYuX25hbWUsIHNlbGYuX3Byb2MucGlkKQotCi0gICAg
ZGVmIF9zcGxpdF9zdHJpbmdfYWZ0ZXJfaW5kZXgoc2VsZiwgc3RyaW5nLCBpbmRleCk6Ci0gICAg
ICAgIHJldHVybiBzdHJpbmdbOmluZGV4XSwgc3RyaW5nW2luZGV4Ol0KLQotICAgIGRlZiBfcG9w
X291dHB1dF9ieXRlcyhzZWxmLCBieXRlc19jb3VudCk6Ci0gICAgICAgIG91dHB1dCwgc2VsZi5f
b3V0cHV0ID0gc2VsZi5fc3BsaXRfc3RyaW5nX2FmdGVyX2luZGV4KHNlbGYuX291dHB1dCwgYnl0
ZXNfY291bnQpCi0gICAgICAgIHJldHVybiBvdXRwdXQKLQotICAgIGRlZiBfcG9wX2Vycm9yX2J5
dGVzKHNlbGYsIGJ5dGVzX2NvdW50KToKLSAgICAgICAgb3V0cHV0LCBzZWxmLl9lcnJvciA9IHNl
bGYuX3NwbGl0X3N0cmluZ19hZnRlcl9pbmRleChzZWxmLl9lcnJvciwgYnl0ZXNfY291bnQpCi0g
ICAgICAgIHJldHVybiBvdXRwdXQKLQotICAgIGRlZiBfd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRl
X2J1ZmZlcnNfdXNpbmdfc2VsZWN0KHNlbGYsIGRlYWRsaW5lLCBzdG9wcGluZz1GYWxzZSk6Ci0g
ICAgICAgIGlmIHNlbGYuX3Byb2Muc3Rkb3V0LmNsb3NlZCBvciBzZWxmLl9wcm9jLnN0ZGVyci5j
bG9zZWQ6Ci0gICAgICAgICAgICAjIElmIHRoZSBwcm9jZXNzIGNyYXNoZWQgYW5kIGlzIHVzaW5n
IEZJRk9zLCBsaWtlIENocm9taXVtIEFuZHJvaWQsIHRoZQotICAgICAgICAgICAgIyBzdGRvdXQg
YW5kIHN0ZGVyciBwaXBlcyB3aWxsIGJlIGNsb3NlZC4KLSAgICAgICAgICAgIHJldHVybgotCi0g
ICAgICAgIG91dF9mZCA9IHNlbGYuX3Byb2Muc3Rkb3V0LmZpbGVubygpCi0gICAgICAgIGVycl9m
ZCA9IHNlbGYuX3Byb2Muc3RkZXJyLmZpbGVubygpCi0gICAgICAgIHNlbGVjdF9mZHMgPSAob3V0
X2ZkLCBlcnJfZmQpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJlYWRfZmRzLCBfLCBfID0g
c2VsZWN0LnNlbGVjdChzZWxlY3RfZmRzLCBbXSwgc2VsZWN0X2ZkcywgbWF4KGRlYWRsaW5lIC0g
dGltZS50aW1lKCksIDApKQotICAgICAgICBleGNlcHQgc2VsZWN0LmVycm9yLCBlOgotICAgICAg
ICAgICAgIyBXZSBjYW4gaWdub3JlIEVJTlZBTCBzaW5jZSBpdCdzIGxpa2VseSB0aGUgcHJvY2Vz
cyBqdXN0IGNyYXNoZWQgYW5kIHdlJ2xsCi0gICAgICAgICAgICAjIGZpZ3VyZSB0aGF0IG91dCB0
aGUgbmV4dCB0aW1lIHRocm91Z2ggdGhlIGxvb3AgaW4gX3JlYWQoKS4KLSAgICAgICAgICAgIGlm
IGUuYXJnc1swXSA9PSBlcnJuby5FSU5WQUw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAg
ICAgICAgICByYWlzZQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgTm90ZSB0aGF0IHdl
IG1heSBnZXQgbm8gZGF0YSBkdXJpbmcgcmVhZCgpIGV2ZW4gdGhvdWdoCi0gICAgICAgICAgICAj
IHNlbGVjdCBzYXlzIHdlIGdvdCBzb21ldGhpbmc7IHNlZSB0aGUgc2VsZWN0KCkgbWFuIHBhZ2UK
LSAgICAgICAgICAgICMgb24gbGludXguIEkgZG9uJ3Qga25vdyBpZiB0aGlzIGhhcHBlbnMgb24g
TWFjIE9TIGFuZAotICAgICAgICAgICAgIyBvdGhlciBVbml4ZW4gYXMgd2VsbCwgYnV0IHdlIGRv
bid0IGJvdGhlciBzcGVjaWFsLWNhc2luZwotICAgICAgICAgICAgIyBMaW51eCBiZWNhdXNlIGl0
J3MgcmVsYXRpdmVseSBoYXJtbGVzcyBlaXRoZXIgd2F5LgotICAgICAgICAgICAgaWYgb3V0X2Zk
IGluIHJlYWRfZmRzOgotICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9wcm9jLnN0ZG91dC5y
ZWFkKCkKLSAgICAgICAgICAgICAgICBpZiBub3QgZGF0YSBhbmQgbm90IHN0b3BwaW5nIGFuZCAo
c2VsZi5fdHJlYXRfbm9fZGF0YV9hc19jcmFzaCBvciBzZWxmLl9wcm9jLnBvbGwoKSk6Ci0gICAg
ICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJ1RoaXMgdGVzdCBtYXJrZWQgYXMgYSBjcmFzaCBi
ZWNhdXNlIG9mIG5vIGRhdGEgd2hpbGUgcmVhZGluZyBzdGRvdXQgZm9yIHRoZSBzZXJ2ZXIgcHJv
Y2Vzcy4nKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQotICAgICAg
ICAgICAgICAgIHNlbGYuX291dHB1dCArPSBkYXRhCi0KLSAgICAgICAgICAgIGlmIGVycl9mZCBp
biByZWFkX2ZkczoKLSAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fcHJvYy5zdGRlcnIucmVh
ZCgpCi0gICAgICAgICAgICAgICAgaWYgbm90IGRhdGEgYW5kIG5vdCBzdG9wcGluZyBhbmQgKHNl
bGYuX3RyZWF0X25vX2RhdGFfYXNfY3Jhc2ggb3Igc2VsZi5fcHJvYy5wb2xsKCkpOgotICAgICAg
ICAgICAgICAgICAgICBfbG9nLmRlYnVnKCdUaGlzIHRlc3QgbWFya2VkIGFzIGEgY3Jhc2ggYmVj
YXVzZSBvZiBubyBkYXRhIHdoaWxlIHJlYWRpbmcgc3Rkb3V0IGZvciB0aGUgc2VydmVyIHByb2Nl
c3MuJykKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUKLSAgICAgICAg
ICAgICAgICBzZWxmLl9lcnJvciArPSBkYXRhCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgot
ICAgICAgICAgICAgIyBXZSBjYW4gaWdub3JlIHRoZSBJT0Vycm9ycyBiZWNhdXNlIHdlIHdpbGwg
ZGV0ZWN0IGlmIHRoZSBzdWJwb3JjZXNzIGNyYXNoZWQKLSAgICAgICAgICAgICMgdGhlIG5leHQg
dGltZSB0aHJvdWdoIHRoZSBsb29wIGluIF9yZWFkKCkKLSAgICAgICAgICAgIHBhc3MKLQotICAg
IGRlZiBfd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnNfdXNpbmdfd2luMzJfYXBpcyhz
ZWxmLCBkZWFkbGluZSk6Ci0gICAgICAgICMgU2VlIGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNv
bS9yZWNpcGVzLzQ0MDU1NC1tb2R1bGUtdG8tYWxsb3ctYXN5bmNocm9ub3VzLXN1YnByb2Nlc3Mt
dXNlLW9uLXdpbi8KLSAgICAgICAgIyBhbmQgaHR0cDovL2RvY3MuYWN0aXZlc3RhdGUuY29tL2Fj
dGl2ZXB5dGhvbi8yLjYvcHl3aW4zMi9tb2R1bGVzLmh0bWwKLSAgICAgICAgIyBmb3IgZG9jdW1l
bnRhdGlvbiBvbiBhbGwgb2YgdGhlc2Ugd2luMzItc3BlY2lmaWMgbW9kdWxlcy4KLSAgICAgICAg
bm93ID0gdGltZS50aW1lKCkKLSAgICAgICAgb3V0X2ZoID0gbXN2Y3J0LmdldF9vc2ZoYW5kbGUo
c2VsZi5fcHJvYy5zdGRvdXQuZmlsZW5vKCkpCi0gICAgICAgIGVycl9maCA9IG1zdmNydC5nZXRf
b3NmaGFuZGxlKHNlbGYuX3Byb2Muc3RkZXJyLmZpbGVubygpKQotICAgICAgICB3aGlsZSAoc2Vs
Zi5fcHJvYy5wb2xsKCkgaXMgTm9uZSkgYW5kIChub3cgPCBkZWFkbGluZSk6Ci0gICAgICAgICAg
ICBvdXRwdXQgPSBzZWxmLl9ub25fYmxvY2tpbmdfcmVhZF93aW4zMihvdXRfZmgpCi0gICAgICAg
ICAgICBlcnJvciA9IHNlbGYuX25vbl9ibG9ja2luZ19yZWFkX3dpbjMyKGVycl9maCkKLSAgICAg
ICAgICAgIGlmIG91dHB1dCBvciBlcnJvcjoKLSAgICAgICAgICAgICAgICBpZiBvdXRwdXQ6Ci0g
ICAgICAgICAgICAgICAgICAgIHNlbGYuX291dHB1dCArPSBvdXRwdXQKLSAgICAgICAgICAgICAg
ICBpZiBlcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXJyb3IgKz0gZXJyb3IKLSAg
ICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKLSAgICAg
ICAgICAgIG5vdyA9IHRpbWUudGltZSgpCi0gICAgICAgIHJldHVybgotCi0gICAgZGVmIF9ub25f
YmxvY2tpbmdfcmVhZF93aW4zMihzZWxmLCBoYW5kbGUpOgotICAgICAgICB0cnk6Ci0gICAgICAg
ICAgICBfLCBhdmFpbCwgXyA9IHdpbjMycGlwZS5QZWVrTmFtZWRQaXBlKGhhbmRsZSwgMCkKLSAg
ICAgICAgICAgIGlmIGF2YWlsID4gMDoKLSAgICAgICAgICAgICAgICBfLCBidWYgPSB3aW4zMmZp
bGUuUmVhZEZpbGUoaGFuZGxlLCBhdmFpbCwgTm9uZSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
YnVmCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6Ci0gICAgICAgICAgICBpZiBlWzBdIG5v
dCBpbiAoMTA5LCBlcnJuby5FU0hVVERPV04pOiAgIyAxMDkgPT0gd2luMzIgRVJST1JfQlJPS0VO
X1BJUEUKLSAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAg
ZGVmIGhhc19jcmFzaGVkKHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5fY3Jhc2hlZCBhbmQg
c2VsZi5wb2xsKCk6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCdUaGlzIHRlc3QgbWFya2VkIGFz
IGEgY3Jhc2ggYmVjYXVzZSBvZiBmYWlsdXJlIHRvIHBvbGwgdGhlIHNlcnZlciBwcm9jZXNzLicp
Ci0gICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQotICAgICAgICAgICAgc2VsZi5faGFu
ZGxlX3Bvc3NpYmxlX2ludGVycnVwdCgpCi0gICAgICAgIHJldHVybiBzZWxmLl9jcmFzaGVkCi0K
LSAgICAjIFRoaXMgcmVhZCBmdW5jdGlvbiBpcyBhIGJpdCBvZGRseS1kZXNpZ25lZCwgYXMgaXQg
cG9sbHMgYm90aCBzdGRvdXQgYW5kIHN0ZGVyciwgeWV0Ci0gICAgIyBvbmx5IHJlYWRzL3JldHVy
bnMgZnJvbSBvbmUgb2YgdGhlbSAoYnVmZmVyaW5nIGJvdGggaW4gbG9jYWwgc2VsZi5fb3V0cHV0
L3NlbGYuX2Vycm9yKS4KLSAgICAjIEl0IG1pZ2h0IGJlIGNsZWFuZXIgdG8gcGFzcyBpbiB0aGUg
ZmlsZSBkZXNjcmlwdG9yIHRvIHBvbGwgaW5zdGVhZC4KLSAgICBkZWYgX3JlYWQoc2VsZiwgZGVh
ZGxpbmUsIGZldGNoX2J5dGVzX2Zyb21fYnVmZmVyc19jYWxsYmFjayk6Ci0gICAgICAgIHdoaWxl
IFRydWU6Ci0gICAgICAgICAgICBpZiBzZWxmLmhhc19jcmFzaGVkKCk6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIE5vbmUKLQotICAgICAgICAgICAgaWYgdGltZS50aW1lKCkgPiBkZWFkbGluZToK
LSAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfdGltZW91dCgpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIE5vbmUKLQotICAgICAgICAgICAgYnl0ZXMgPSBmZXRjaF9ieXRlc19mcm9tX2J1ZmZl
cnNfY2FsbGJhY2soKQotICAgICAgICAgICAgaWYgYnl0ZXMgaXMgbm90IE5vbmU6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGJ5dGVzCi0KLSAgICAgICAgICAgIGlmIHNlbGYuX3VzZV93aW4zMl9h
cGlzOgotICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRfZm9yX2RhdGFfYW5kX3VwZGF0ZV9idWZm
ZXJzX3VzaW5nX3dpbjMyX2FwaXMoZGVhZGxpbmUpCi0gICAgICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgICAgIHNlbGYuX3dhaXRfZm9yX2RhdGFfYW5kX3VwZGF0ZV9idWZmZXJzX3VzaW5nX3Nl
bGVjdChkZWFkbGluZSkKLQotICAgIGRlZiBzdGFydChzZWxmKToKLSAgICAgICAgaWYgbm90IHNl
bGYuX3Byb2M6Ci0gICAgICAgICAgICBzZWxmLl9zdGFydCgpCi0KLSAgICBkZWYgc3RvcChzZWxm
LCB0aW1lb3V0X3NlY3M9My4wKToKLSAgICAgICAgaWYgbm90IHNlbGYuX3Byb2M6Ci0gICAgICAg
ICAgICByZXR1cm4gKE5vbmUsIE5vbmUpCi0KLSAgICAgICAgIyBPbmx5IGJvdGhlciB0byBjaGVj
ayBmb3IgbGVha3Mgb3Igc3RkZXJyIGlmIHRoZSBwcm9jZXNzIGlzIHN0aWxsIHJ1bm5pbmcuCi0g
ICAgICAgIGlmIHNlbGYucG9sbCgpIGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl9wb3J0LmNo
ZWNrX2Zvcl9sZWFrcyhzZWxmLm5hbWUoKSwgc2VsZi5waWQoKSkKLQotICAgICAgICBub3cgPSB0
aW1lLnRpbWUoKQotICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZGluOgotICAgICAgICAgICAgc2Vs
Zi5fcHJvYy5zdGRpbi5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGluID0gTm9u
ZQotICAgICAgICBraWxsZWQgPSBGYWxzZQotICAgICAgICBpZiB0aW1lb3V0X3NlY3M6Ci0gICAg
ICAgICAgICBkZWFkbGluZSA9IG5vdyArIHRpbWVvdXRfc2VjcwotICAgICAgICAgICAgd2hpbGUg
c2VsZi5fcHJvYy5wb2xsKCkgaXMgTm9uZSBhbmQgdGltZS50aW1lKCkgPCBkZWFkbGluZToKLSAg
ICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCi0gICAgICAgICAgICBpZiBzZWxmLl9wcm9j
LnBvbGwoKSBpcyBOb25lOgotICAgICAgICAgICAgICAgIF9sb2cud2FybmluZygnc3RvcHBpbmcg
JXMocGlkICVkKSB0aW1lZCBvdXQsIGtpbGxpbmcgaXQnICUgKHNlbGYuX25hbWUsIHNlbGYuX3By
b2MucGlkKSkKLQotICAgICAgICBpZiBzZWxmLl9wcm9jLnBvbGwoKSBpcyBOb25lOgotICAgICAg
ICAgICAgc2VsZi5fa2lsbCgpCi0gICAgICAgICAgICBraWxsZWQgPSBUcnVlCi0gICAgICAgICAg
ICBfbG9nLmRlYnVnKCdraWxsZWQgcGlkICVkJyAlIHNlbGYuX3Byb2MucGlkKQotCi0gICAgICAg
ICMgcmVhZCBhbnkgcmVtYWluaW5nIGRhdGEgb24gdGhlIHBpcGVzIGFuZCByZXR1cm4gaXQuCi0g
ICAgICAgIGlmIG5vdCBraWxsZWQ6Ci0gICAgICAgICAgICBpZiBzZWxmLl91c2Vfd2luMzJfYXBp
czoKLSAgICAgICAgICAgICAgICBzZWxmLl93YWl0X2Zvcl9kYXRhX2FuZF91cGRhdGVfYnVmZmVy
c191c2luZ193aW4zMl9hcGlzKG5vdykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAg
ICAgc2VsZi5fd2FpdF9mb3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnNfdXNpbmdfc2VsZWN0KG5v
dywgc3RvcHBpbmc9VHJ1ZSkKLSAgICAgICAgb3V0LCBlcnIgPSBzZWxmLl9vdXRwdXQsIHNlbGYu
X2Vycm9yCi0gICAgICAgIHNlbGYuX3Jlc2V0KCkKLSAgICAgICAgcmV0dXJuIChvdXQsIGVycikK
LQotICAgIGRlZiBraWxsKHNlbGYpOgotICAgICAgICBzZWxmLnN0b3AoMC4wKQotCi0gICAgZGVm
IF9raWxsKHNlbGYpOgotICAgICAgICBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5raWxsX3Byb2Nlc3Mo
c2VsZi5fcHJvYy5waWQpCi0gICAgICAgIGlmIHNlbGYuX3Byb2MucG9sbCgpIGlzIG5vdCBOb25l
OgotICAgICAgICAgICAgc2VsZi5fcHJvYy53YWl0KCkKLQotICAgIGRlZiByZXBsYWNlX291dHB1
dHMoc2VsZiwgc3Rkb3V0LCBzdGRlcnIpOgotICAgICAgICBhc3NlcnQgc2VsZi5fcHJvYwotICAg
ICAgICBpZiBzdGRvdXQ6Ci0gICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZG91dC5jbG9zZSgpCi0g
ICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZG91dCA9IHN0ZG91dAotICAgICAgICBpZiBzdGRlcnI6
Ci0gICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGVyci5jbG9zZSgpCi0gICAgICAgICAgICBzZWxm
Ll9wcm9jLnN0ZGVyciA9IHN0ZGVycgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L3NlcnZlcl9wcm9jZXNzX2Jhc2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzX2Jhc2UucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzX2Jhc2UucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzNTkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoK
KyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIEdvb2dsZSBuYW1lIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGVycm5vCitpbXBvcnQgbG9nZ2lu
ZworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHN5cworaW1wb3J0IHRpbWUKKworIyBOb3RlIHRoYXQg
YWx0aG91Z2ggd2luMzIgcHl0aG9uIGRvZXMgcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBvZgor
IyB0aGUgd2luMzIgc2VsZWN0IEFQSSwgaXQgb25seSB3b3JrcyBvbiBzb2NrZXRzLCBhbmQgbm90
IG9uIHRoZSBuYW1lZCBwaXBlcworIyB1c2VkIGJ5IHN1YnByb2Nlc3MsIHNvIHdlIGhhdmUgdG8g
dXNlIHRoZSBuYXRpdmUgQVBJcyBkaXJlY3RseS4KK2lmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRo
KCd3aW4nKToKKyAgICBpbXBvcnQgbXN2Y3J0CisgICAgaW1wb3J0IHdpbjMycGlwZQorICAgIGlt
cG9ydCB3aW4zMmZpbGUKK2Vsc2U6CisgICAgaW1wb3J0IGZjbnRsCisgICAgaW1wb3J0IG9zCisg
ICAgaW1wb3J0IHNlbGVjdAorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZl
IGltcG9ydCBTY3JpcHRFcnJvcgorCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVf
XykKKworCitjbGFzcyBTZXJ2ZXJQcm9jZXNzQmFzZShvYmplY3QpOgorICAgICIiIlRoaXMgY2xh
c3MgcHJvdmlkZXMgYSB3cmFwcGVyIGFyb3VuZCBhIHN1YnByb2Nlc3MgdGhhdAorICAgIGltcGxl
bWVudHMgYSBzaW1wbGUgcmVxdWVzdC9yZXNwb25zZSB1c2FnZSBtb2RlbC4gVGhlIHByaW1hcnkg
YmVuZWZpdAorICAgIGlzIHRoYXQgcmVhZGluZyByZXNwb25zZXMgdGFrZXMgYSBkZWFkbGluZSwg
c28gdGhhdCB3ZSBkb24ndCBldmVyIGJsb2NrCisgICAgaW5kZWZpbml0ZWx5LiBUaGUgY2xhc3Mg
YWxzbyBoYW5kbGVzIHRyYW5zcGFyZW50bHkgcmVzdGFydGluZyBwcm9jZXNzZXMKKyAgICBhcyBu
ZWNlc3NhcnkgdG8ga2VlcCBpc3N1aW5nIGNvbW1hbmRzLiIiIgorCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVudj1Ob25lLCB1bml2ZXJzYWxfbmV3bGluZXM9
RmFsc2UsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2g9RmFsc2UpOgorICAgICAgICBzZWxmLl9wb3J0
ID0gcG9ydF9vYmoKKyAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUgICMgU2hvdWxkIGJlIHRoZSBj
b21tYW5kIG5hbWUgKGUuZy4gRHVtcFJlbmRlclRyZWUsIEltYWdlRGlmZikKKyAgICAgICAgc2Vs
Zi5fY21kID0gY21kCisgICAgICAgIHNlbGYuX2VudiA9IGVudgorICAgICAgICAjIFNldCBpZiB0
aGUgcHJvY2VzcyBvdXRwdXRzIG5vbi1zdGFuZGFyZCBuZXdsaW5lcyBsaWtlICdcclxuJyBvciAn
XHInLgorICAgICAgICAjIERvbid0IHNldCBpZiB0aGVyZSB3aWxsIGJlIGJpbmFyeSBkYXRhIG9y
IHRoZSBkYXRhIG11c3QgYmUgQVNDSUkgZW5jb2RlZC4KKyAgICAgICAgc2VsZi5fdW5pdmVyc2Fs
X25ld2xpbmVzID0gdW5pdmVyc2FsX25ld2xpbmVzCisgICAgICAgIHNlbGYuX3RyZWF0X25vX2Rh
dGFfYXNfY3Jhc2ggPSB0cmVhdF9ub19kYXRhX2FzX2NyYXNoCisgICAgICAgIHNlbGYuX2hvc3Qg
PSBzZWxmLl9wb3J0Lmhvc3QKKyAgICAgICAgc2VsZi5fcGlkID0gTm9uZQorICAgICAgICBzZWxm
Ll9wcm9jID0gTm9uZQorICAgICAgICBzZWxmLl9yZXNldCgpCisKKyAgICAgICAgIyBTZWUgY29t
bWVudCBpbiBpbXBvcnRzIGZvciB3aHkgd2UgbmVlZCB0aGUgd2luMzIgQVBJcyBhbmQgY2FuJ3Qg
anVzdCB1c2Ugc2VsZWN0LgorICAgICAgICAjIEZJWE1FOiB0aGVyZSBzaG91bGQgYmUgYSB3YXkg
dG8gZ2V0IHdpbjMyIHZzLiBjeWd3aW4gZnJvbSBwbGF0Zm9ybWluZm8uCisgICAgICAgIHNlbGYu
X3VzZV93aW4zMl9hcGlzID0gc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpCisKKyAgICBk
ZWYgX3N0YXJ0KHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAg
ICBkZWYgX2hhbmRsZV9wb3NzaWJsZV9pbnRlcnJ1cHQoc2VsZik6CisgICAgICAgIHBhc3MKKwor
ICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQorCisgICAgZGVm
IHBpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BpZAorCisgICAgZGVmIF9yZXNldChz
ZWxmKToKKyAgICAgICAgaWYgc2VsZi5fcHJvYzoKKyAgICAgICAgICAgIGlmIHNlbGYuX3Byb2Mu
c3RkaW46CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRpbi5jbG9zZSgpCisgICAgICAg
ICAgICAgICAgc2VsZi5fcHJvYy5zdGRpbiA9IE5vbmUKKyAgICAgICAgICAgIGlmIHNlbGYuX3By
b2Muc3Rkb3V0OgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3Rkb3V0LmNsb3NlKCkKKyAg
ICAgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZG91dCA9IE5vbmUKKyAgICAgICAgICAgIGlmIHNl
bGYuX3Byb2Muc3RkZXJyOgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkZXJyLmNsb3Nl
KCkKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGVyciA9IE5vbmUKKworICAgICAgICBz
ZWxmLl9wcm9jID0gTm9uZQorICAgICAgICBzZWxmLl9vdXRwdXQgPSBzdHIoKSAgIyBieXRlc2Fy
cmF5KCkgb25jZSB3ZSByZXF1aXJlIFB5dGhvbiAyLjYKKyAgICAgICAgc2VsZi5fZXJyb3IgPSBz
dHIoKSAgIyBieXRlc2FycmF5KCkgb25jZSB3ZSByZXF1aXJlIFB5dGhvbiAyLjYKKyAgICAgICAg
c2VsZi5fY3Jhc2hlZCA9IEZhbHNlCisgICAgICAgIHNlbGYudGltZWRfb3V0ID0gRmFsc2UKKwor
ICAgIGRlZiBwcm9jZXNzX25hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9uYW1lCisK
KyAgICBkZWYgcG9sbChzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdG8gc2VlIGlmIHRoZSB1bmRl
cmx5aW5nIHByb2Nlc3MgaXMgcnVubmluZzsgcmV0dXJucyBOb25lCisgICAgICAgIGlmIGl0IHN0
aWxsIGlzICh3cmFwcGVyIGFyb3VuZCBzdWJwcm9jZXNzLnBvbGwpLiIiIgorICAgICAgICBpZiBz
ZWxmLl9wcm9jOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2MucG9sbCgpCisgICAgICAg
IHJldHVybiBOb25lCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgYnl0ZXMsIGlnbm9yZV9jcmFzaD1G
YWxzZSk6CisgICAgICAgICIiIldyaXRlIGEgcmVxdWVzdCB0byB0aGUgc3VicHJvY2Vzcy4gVGhl
IHN1YnByb2Nlc3MgaXMgKHJlLSlzdGFydCgpJ2VkCisgICAgICAgIGlmIGlzIG5vdCBhbHJlYWR5
IHJ1bm5pbmcuIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLl9wcm9jOgorICAgICAgICAgICAgc2Vs
Zi5fc3RhcnQoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGluLndy
aXRlKGJ5dGVzKQorICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgIHNlbGYu
c3RvcCgwLjApCisgICAgICAgICAgICAjIHN0b3AoKSBjYWxscyBfcmVzZXQoKSwgc28gd2UgaGF2
ZSB0byBzZXQgY3Jhc2hlZCB0byBUcnVlIGFmdGVyIGNhbGxpbmcgc3RvcCgpCisgICAgICAgICAg
ICAjIHVubGVzcyB3ZSBhbHJlYWR5IGtub3cgdGhhdCB0aGlzIGlzIGEgdGltZW91dC4KKyAgICAg
ICAgICAgIGlmIG5vdCBpZ25vcmVfY3Jhc2g6CisgICAgICAgICAgICAgICAgX2xvZy5kZWJ1Zygn
VGhpcyB0ZXN0IG1hcmtlZCBhcyBhIGNyYXNoIGJlY2F1c2Ugb2YgYSBicm9rZW4gcGlwZSB3aGVu
IHdyaXRpbmcgdG8gc3RkaW4gb2YgdGhlIHNlcnZlciBwcm9jZXNzLicpCisgICAgICAgICAgICAg
ICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUKKworICAgIGRlZiBfcG9wX3N0ZG91dF9saW5lX2lmX3Jl
YWR5KHNlbGYpOgorICAgICAgICBpbmRleF9hZnRlcl9uZXdsaW5lID0gc2VsZi5fb3V0cHV0LmZp
bmQoJ1xuJykgKyAxCisgICAgICAgIGlmIGluZGV4X2FmdGVyX25ld2xpbmUgPiAwOgorICAgICAg
ICAgICAgcmV0dXJuIHNlbGYuX3BvcF9vdXRwdXRfYnl0ZXMoaW5kZXhfYWZ0ZXJfbmV3bGluZSkK
KyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBfcG9wX3N0ZGVycl9saW5lX2lmX3JlYWR5
KHNlbGYpOgorICAgICAgICBpbmRleF9hZnRlcl9uZXdsaW5lID0gc2VsZi5fZXJyb3IuZmluZCgn
XG4nKSArIDEKKyAgICAgICAgaWYgaW5kZXhfYWZ0ZXJfbmV3bGluZSA+IDA6CisgICAgICAgICAg
ICByZXR1cm4gc2VsZi5fcG9wX2Vycm9yX2J5dGVzKGluZGV4X2FmdGVyX25ld2xpbmUpCisgICAg
ICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgcG9wX2FsbF9idWZmZXJlZF9zdGRlcnIoc2VsZik6
CisgICAgICAgIHJldHVybiBzZWxmLl9wb3BfZXJyb3JfYnl0ZXMobGVuKHNlbGYuX2Vycm9yKSkK
KworICAgIGRlZiByZWFkX3N0ZG91dF9saW5lKHNlbGYsIGRlYWRsaW5lKToKKyAgICAgICAgcmV0
dXJuIHNlbGYuX3JlYWQoZGVhZGxpbmUsIHNlbGYuX3BvcF9zdGRvdXRfbGluZV9pZl9yZWFkeSkK
KworICAgIGRlZiByZWFkX3N0ZGVycl9saW5lKHNlbGYsIGRlYWRsaW5lKToKKyAgICAgICAgcmV0
dXJuIHNlbGYuX3JlYWQoZGVhZGxpbmUsIHNlbGYuX3BvcF9zdGRlcnJfbGluZV9pZl9yZWFkeSkK
KworICAgIGRlZiByZWFkX2VpdGhlcl9zdGRvdXRfb3Jfc3RkZXJyX2xpbmUoc2VsZiwgZGVhZGxp
bmUpOgorICAgICAgICBkZWYgcmV0cmlldmVfYnl0ZXNfZnJvbV9idWZmZXJzKCk6CisgICAgICAg
ICAgICBzdGRvdXRfbGluZSA9IHNlbGYuX3BvcF9zdGRvdXRfbGluZV9pZl9yZWFkeSgpCisgICAg
ICAgICAgICBpZiBzdGRvdXRfbGluZToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3Rkb3V0X2xp
bmUsIE5vbmUKKyAgICAgICAgICAgIHN0ZGVycl9saW5lID0gc2VsZi5fcG9wX3N0ZGVycl9saW5l
X2lmX3JlYWR5KCkKKyAgICAgICAgICAgIGlmIHN0ZGVycl9saW5lOgorICAgICAgICAgICAgICAg
IHJldHVybiBOb25lLCBzdGRlcnJfbGluZQorICAgICAgICAgICAgcmV0dXJuIE5vbmUgICMgSW5z
dHJ1Y3RzIHRoZSBjYWxsZXIgdG8ga2VlcCB3YWl0aW5nLgorCisgICAgICAgIHJldHVybl92YWx1
ZSA9IHNlbGYuX3JlYWQoZGVhZGxpbmUsIHJldHJpZXZlX2J5dGVzX2Zyb21fYnVmZmVycykKKyAg
ICAgICAgIyBGSVhNRTogVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2sgYXJvdW5kIHRoZSBmYWN0IHRo
YXQgX3JlYWQgbm9ybWFsbHkgb25seSByZXR1cm5zIG9uZSB2YWx1ZSwgYnV0IHRoaXMgY2FsbGVy
IHdhbnRzIGl0IHRvIHJldHVybiB0d28uCisgICAgICAgIGlmIHJldHVybl92YWx1ZSBpcyBOb25l
OgorICAgICAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKKyAgICAgICAgcmV0dXJuIHJldHVybl92
YWx1ZQorCisgICAgZGVmIHJlYWRfc3Rkb3V0KHNlbGYsIGRlYWRsaW5lLCBzaXplKToKKyAgICAg
ICAgaWYgc2l6ZSA8PSAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignU2VydmVyUHJv
Y2Vzcy5yZWFkKCkgY2FsbGVkIHdpdGggYSBub24tcG9zaXRpdmUgc2l6ZTogJWQgJyAlIHNpemUp
CisKKyAgICAgICAgZGVmIHJldHJpZXZlX2J5dGVzX2Zyb21fc3Rkb3V0X2J1ZmZlcigpOgorICAg
ICAgICAgICAgaWYgbGVuKHNlbGYuX291dHB1dCkgPj0gc2l6ZToKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fcG9wX291dHB1dF9ieXRlcyhzaXplKQorICAgICAgICAgICAgcmV0dXJuIE5v
bmUKKworICAgICAgICByZXR1cm4gc2VsZi5fcmVhZChkZWFkbGluZSwgcmV0cmlldmVfYnl0ZXNf
ZnJvbV9zdGRvdXRfYnVmZmVyKQorCisgICAgZGVmIF9sb2coc2VsZiwgbWVzc2FnZSk6CisgICAg
ICAgICMgVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2ssIGJ1dCB3ZSBmaXJzdCBsb2cgYSBibGFuayBs
aW5lIHRvIGF2b2lkCisgICAgICAgICMgbWVzc2luZyB1cCB0aGUgbWFzdGVyIHByb2Nlc3MncyBv
dXRwdXQuCisgICAgICAgIF9sb2cuaW5mbygnJykKKyAgICAgICAgX2xvZy5pbmZvKG1lc3NhZ2Up
CisKKyAgICBkZWYgX2hhbmRsZV90aW1lb3V0KHNlbGYpOgorICAgICAgICBzZWxmLnRpbWVkX291
dCA9IFRydWUKKyAgICAgICAgaWYgc2VsZi5fcG9ydC5nZXRfb3B0aW9uKCJzYW1wbGVfb25fdGlt
ZW91dCIpOgorICAgICAgICAgICAgc2VsZi5fcG9ydC5zYW1wbGVfcHJvY2VzcyhzZWxmLl9uYW1l
LCBzZWxmLl9wcm9jLnBpZCkKKworICAgIGRlZiBfc3BsaXRfc3RyaW5nX2FmdGVyX2luZGV4KHNl
bGYsIHN0cmluZywgaW5kZXgpOgorICAgICAgICByZXR1cm4gc3RyaW5nWzppbmRleF0sIHN0cmlu
Z1tpbmRleDpdCisKKyAgICBkZWYgX3BvcF9vdXRwdXRfYnl0ZXMoc2VsZiwgYnl0ZXNfY291bnQp
OgorICAgICAgICBvdXRwdXQsIHNlbGYuX291dHB1dCA9IHNlbGYuX3NwbGl0X3N0cmluZ19hZnRl
cl9pbmRleChzZWxmLl9vdXRwdXQsIGJ5dGVzX2NvdW50KQorICAgICAgICByZXR1cm4gb3V0cHV0
CisKKyAgICBkZWYgX3BvcF9lcnJvcl9ieXRlcyhzZWxmLCBieXRlc19jb3VudCk6CisgICAgICAg
IG91dHB1dCwgc2VsZi5fZXJyb3IgPSBzZWxmLl9zcGxpdF9zdHJpbmdfYWZ0ZXJfaW5kZXgoc2Vs
Zi5fZXJyb3IsIGJ5dGVzX2NvdW50KQorICAgICAgICByZXR1cm4gb3V0cHV0CisKKyAgICBkZWYg
X3dhaXRfZm9yX2RhdGFfYW5kX3VwZGF0ZV9idWZmZXJzX3VzaW5nX3NlbGVjdChzZWxmLCBkZWFk
bGluZSwgc3RvcHBpbmc9RmFsc2UpOgorICAgICAgICBpZiBzZWxmLl9wcm9jLnN0ZG91dC5jbG9z
ZWQgb3Igc2VsZi5fcHJvYy5zdGRlcnIuY2xvc2VkOgorICAgICAgICAgICAgIyBJZiB0aGUgcHJv
Y2VzcyBjcmFzaGVkIGFuZCBpcyB1c2luZyBGSUZPcywgbGlrZSBDaHJvbWl1bSBBbmRyb2lkLCB0
aGUKKyAgICAgICAgICAgICMgc3Rkb3V0IGFuZCBzdGRlcnIgcGlwZXMgd2lsbCBiZSBjbG9zZWQu
CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBvdXRfZmQgPSBzZWxmLl9wcm9jLnN0ZG91
dC5maWxlbm8oKQorICAgICAgICBlcnJfZmQgPSBzZWxmLl9wcm9jLnN0ZGVyci5maWxlbm8oKQor
ICAgICAgICBzZWxlY3RfZmRzID0gKG91dF9mZCwgZXJyX2ZkKQorICAgICAgICB0cnk6CisgICAg
ICAgICAgICByZWFkX2ZkcywgXywgXyA9IHNlbGVjdC5zZWxlY3Qoc2VsZWN0X2ZkcywgW10sIHNl
bGVjdF9mZHMsIG1heChkZWFkbGluZSAtIHRpbWUudGltZSgpLCAwKSkKKyAgICAgICAgZXhjZXB0
IHNlbGVjdC5lcnJvciwgZToKKyAgICAgICAgICAgICMgV2UgY2FuIGlnbm9yZSBFSU5WQUwgc2lu
Y2UgaXQncyBsaWtlbHkgdGhlIHByb2Nlc3MganVzdCBjcmFzaGVkIGFuZCB3ZSdsbAorICAgICAg
ICAgICAgIyBmaWd1cmUgdGhhdCBvdXQgdGhlIG5leHQgdGltZSB0aHJvdWdoIHRoZSBsb29wIGlu
IF9yZWFkKCkuCisgICAgICAgICAgICBpZiBlLmFyZ3NbMF0gPT0gZXJybm8uRUlOVkFMOgorICAg
ICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgcmFpc2UKKworICAgICAgICB0cnk6Cisg
ICAgICAgICAgICAjIE5vdGUgdGhhdCB3ZSBtYXkgZ2V0IG5vIGRhdGEgZHVyaW5nIHJlYWQoKSBl
dmVuIHRob3VnaAorICAgICAgICAgICAgIyBzZWxlY3Qgc2F5cyB3ZSBnb3Qgc29tZXRoaW5nOyBz
ZWUgdGhlIHNlbGVjdCgpIG1hbiBwYWdlCisgICAgICAgICAgICAjIG9uIGxpbnV4LiBJIGRvbid0
IGtub3cgaWYgdGhpcyBoYXBwZW5zIG9uIE1hYyBPUyBhbmQKKyAgICAgICAgICAgICMgb3RoZXIg
VW5peGVuIGFzIHdlbGwsIGJ1dCB3ZSBkb24ndCBib3RoZXIgc3BlY2lhbC1jYXNpbmcKKyAgICAg
ICAgICAgICMgTGludXggYmVjYXVzZSBpdCdzIHJlbGF0aXZlbHkgaGFybWxlc3MgZWl0aGVyIHdh
eS4KKyAgICAgICAgICAgIGlmIG91dF9mZCBpbiByZWFkX2ZkczoKKyAgICAgICAgICAgICAgICBk
YXRhID0gc2VsZi5fcHJvYy5zdGRvdXQucmVhZCgpCisgICAgICAgICAgICAgICAgaWYgbm90IGRh
dGEgYW5kIG5vdCBzdG9wcGluZyBhbmQgKHNlbGYuX3RyZWF0X25vX2RhdGFfYXNfY3Jhc2ggb3Ig
c2VsZi5fcHJvYy5wb2xsKCkpOgorICAgICAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCdUaGlz
IHRlc3QgbWFya2VkIGFzIGEgY3Jhc2ggYmVjYXVzZSBvZiBubyBkYXRhIHdoaWxlIHJlYWRpbmcg
c3Rkb3V0IGZvciB0aGUgc2VydmVyIHByb2Nlc3MuJykKKyAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fY3Jhc2hlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLl9vdXRwdXQgKz0gZGF0YQor
CisgICAgICAgICAgICBpZiBlcnJfZmQgaW4gcmVhZF9mZHM6CisgICAgICAgICAgICAgICAgZGF0
YSA9IHNlbGYuX3Byb2Muc3RkZXJyLnJlYWQoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRh
IGFuZCBub3Qgc3RvcHBpbmcgYW5kIChzZWxmLl90cmVhdF9ub19kYXRhX2FzX2NyYXNoIG9yIHNl
bGYuX3Byb2MucG9sbCgpKToKKyAgICAgICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygnVGhpcyB0
ZXN0IG1hcmtlZCBhcyBhIGNyYXNoIGJlY2F1c2Ugb2Ygbm8gZGF0YSB3aGlsZSByZWFkaW5nIHN0
ZG91dCBmb3IgdGhlIHNlcnZlciBwcm9jZXNzLicpCisgICAgICAgICAgICAgICAgICAgIHNlbGYu
X2NyYXNoZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgc2VsZi5fZXJyb3IgKz0gZGF0YQorICAg
ICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgICMgV2UgY2FuIGlnbm9yZSB0aGUg
SU9FcnJvcnMgYmVjYXVzZSB3ZSB3aWxsIGRldGVjdCBpZiB0aGUgc3VicG9yY2VzcyBjcmFzaGVk
CisgICAgICAgICAgICAjIHRoZSBuZXh0IHRpbWUgdGhyb3VnaCB0aGUgbG9vcCBpbiBfcmVhZCgp
CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgX3dhaXRfZm9yX2RhdGFfYW5kX3VwZGF0ZV9i
dWZmZXJzX3VzaW5nX3dpbjMyX2FwaXMoc2VsZiwgZGVhZGxpbmUpOgorICAgICAgICAjIFNlZSBo
dHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy80NDA1NTQtbW9kdWxlLXRvLWFsbG93
LWFzeW5jaHJvbm91cy1zdWJwcm9jZXNzLXVzZS1vbi13aW4vCisgICAgICAgICMgYW5kIGh0dHA6
Ly9kb2NzLmFjdGl2ZXN0YXRlLmNvbS9hY3RpdmVweXRob24vMi42L3B5d2luMzIvbW9kdWxlcy5o
dG1sCisgICAgICAgICMgZm9yIGRvY3VtZW50YXRpb24gb24gYWxsIG9mIHRoZXNlIHdpbjMyLXNw
ZWNpZmljIG1vZHVsZXMuCisgICAgICAgIG5vdyA9IHRpbWUudGltZSgpCisgICAgICAgIG91dF9m
aCA9IG1zdmNydC5nZXRfb3NmaGFuZGxlKHNlbGYuX3Byb2Muc3Rkb3V0LmZpbGVubygpKQorICAg
ICAgICBlcnJfZmggPSBtc3ZjcnQuZ2V0X29zZmhhbmRsZShzZWxmLl9wcm9jLnN0ZGVyci5maWxl
bm8oKSkKKyAgICAgICAgd2hpbGUgKHNlbGYuX3Byb2MucG9sbCgpIGlzIE5vbmUpIGFuZCAobm93
IDwgZGVhZGxpbmUpOgorICAgICAgICAgICAgb3V0cHV0ID0gc2VsZi5fbm9uX2Jsb2NraW5nX3Jl
YWRfd2luMzIob3V0X2ZoKQorICAgICAgICAgICAgZXJyb3IgPSBzZWxmLl9ub25fYmxvY2tpbmdf
cmVhZF93aW4zMihlcnJfZmgpCisgICAgICAgICAgICBpZiBvdXRwdXQgb3IgZXJyb3I6CisgICAg
ICAgICAgICAgICAgaWYgb3V0cHV0OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9vdXRwdXQg
Kz0gb3V0cHV0CisgICAgICAgICAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICAgICAgICAg
IHNlbGYuX2Vycm9yICs9IGVycm9yCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAg
ICB0aW1lLnNsZWVwKDAuMDEpCisgICAgICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQorICAgICAg
ICByZXR1cm4KKworICAgIGRlZiBfbm9uX2Jsb2NraW5nX3JlYWRfd2luMzIoc2VsZiwgaGFuZGxl
KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgXywgYXZhaWwsIF8gPSB3aW4zMnBpcGUuUGVl
a05hbWVkUGlwZShoYW5kbGUsIDApCisgICAgICAgICAgICBpZiBhdmFpbCA+IDA6CisgICAgICAg
ICAgICAgICAgXywgYnVmID0gd2luMzJmaWxlLlJlYWRGaWxlKGhhbmRsZSwgYXZhaWwsIE5vbmUp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBl
OgorICAgICAgICAgICAgaWYgZVswXSBub3QgaW4gKDEwOSwgZXJybm8uRVNIVVRET1dOKTogICMg
MTA5ID09IHdpbjMyIEVSUk9SX0JST0tFTl9QSVBFCisgICAgICAgICAgICAgICAgcmFpc2UKKyAg
ICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBoYXNfY3Jhc2hlZChzZWxmKToKKyAgICAgICAg
aWYgbm90IHNlbGYuX2NyYXNoZWQgYW5kIHNlbGYucG9sbCgpOgorICAgICAgICAgICAgX2xvZy5k
ZWJ1ZygnVGhpcyB0ZXN0IG1hcmtlZCBhcyBhIGNyYXNoIGJlY2F1c2Ugb2YgZmFpbHVyZSB0byBw
b2xsIHRoZSBzZXJ2ZXIgcHJvY2Vzcy4nKQorICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRy
dWUKKyAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9wb3NzaWJsZV9pbnRlcnJ1cHQoKQorICAgICAg
ICByZXR1cm4gc2VsZi5fY3Jhc2hlZAorCisgICAgIyBUaGlzIHJlYWQgZnVuY3Rpb24gaXMgYSBi
aXQgb2RkbHktZGVzaWduZWQsIGFzIGl0IHBvbGxzIGJvdGggc3Rkb3V0IGFuZCBzdGRlcnIsIHll
dAorICAgICMgb25seSByZWFkcy9yZXR1cm5zIGZyb20gb25lIG9mIHRoZW0gKGJ1ZmZlcmluZyBi
b3RoIGluIGxvY2FsIHNlbGYuX291dHB1dC9zZWxmLl9lcnJvcikuCisgICAgIyBJdCBtaWdodCBi
ZSBjbGVhbmVyIHRvIHBhc3MgaW4gdGhlIGZpbGUgZGVzY3JpcHRvciB0byBwb2xsIGluc3RlYWQu
CisgICAgZGVmIF9yZWFkKHNlbGYsIGRlYWRsaW5lLCBmZXRjaF9ieXRlc19mcm9tX2J1ZmZlcnNf
Y2FsbGJhY2spOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgaWYgc2VsZi5oYXNf
Y3Jhc2hlZCgpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgICAgIGlm
IHRpbWUudGltZSgpID4gZGVhZGxpbmU6CisgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX3Rp
bWVvdXQoKQorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgICAgIGJ5dGVz
ID0gZmV0Y2hfYnl0ZXNfZnJvbV9idWZmZXJzX2NhbGxiYWNrKCkKKyAgICAgICAgICAgIGlmIGJ5
dGVzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybiBieXRlcworCisgICAgICAg
ICAgICBpZiBzZWxmLl91c2Vfd2luMzJfYXBpczoKKyAgICAgICAgICAgICAgICBzZWxmLl93YWl0
X2Zvcl9kYXRhX2FuZF91cGRhdGVfYnVmZmVyc191c2luZ193aW4zMl9hcGlzKGRlYWRsaW5lKQor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl93YWl0X2Zvcl9kYXRhX2Fu
ZF91cGRhdGVfYnVmZmVyc191c2luZ19zZWxlY3QoZGVhZGxpbmUpCisKKyAgICBkZWYgc3RhcnQo
c2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9wcm9jOgorICAgICAgICAgICAgc2VsZi5fc3Rh
cnQoKQorCisgICAgZGVmIHN0b3Aoc2VsZiwgdGltZW91dF9zZWNzPTMuMCk6CisgICAgICAgIGlm
IG5vdCBzZWxmLl9wcm9jOgorICAgICAgICAgICAgcmV0dXJuIChOb25lLCBOb25lKQorCisgICAg
ICAgICMgT25seSBib3RoZXIgdG8gY2hlY2sgZm9yIGxlYWtzIG9yIHN0ZGVyciBpZiB0aGUgcHJv
Y2VzcyBpcyBzdGlsbCBydW5uaW5nLgorICAgICAgICBpZiBzZWxmLnBvbGwoKSBpcyBOb25lOgor
ICAgICAgICAgICAgc2VsZi5fcG9ydC5jaGVja19mb3JfbGVha3Moc2VsZi5uYW1lKCksIHNlbGYu
cGlkKCkpCisKKyAgICAgICAgbm93ID0gdGltZS50aW1lKCkKKyAgICAgICAgaWYgc2VsZi5fcHJv
Yy5zdGRpbjoKKyAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4uY2xvc2UoKQorICAgICAgICAg
ICAgc2VsZi5fcHJvYy5zdGRpbiA9IE5vbmUKKyAgICAgICAga2lsbGVkID0gRmFsc2UKKyAgICAg
ICAgaWYgdGltZW91dF9zZWNzOgorICAgICAgICAgICAgZGVhZGxpbmUgPSBub3cgKyB0aW1lb3V0
X3NlY3MKKyAgICAgICAgICAgIHdoaWxlIHNlbGYuX3Byb2MucG9sbCgpIGlzIE5vbmUgYW5kIHRp
bWUudGltZSgpIDwgZGVhZGxpbmU6CisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQor
ICAgICAgICAgICAgaWYgc2VsZi5fcHJvYy5wb2xsKCkgaXMgTm9uZToKKyAgICAgICAgICAgICAg
ICBfbG9nLndhcm5pbmcoJ3N0b3BwaW5nICVzKHBpZCAlZCkgdGltZWQgb3V0LCBraWxsaW5nIGl0
JyAlIChzZWxmLl9uYW1lLCBzZWxmLl9wcm9jLnBpZCkpCisKKyAgICAgICAgaWYgc2VsZi5fcHJv
Yy5wb2xsKCkgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2tpbGwoKQorICAgICAgICAgICAg
a2lsbGVkID0gVHJ1ZQorICAgICAgICAgICAgX2xvZy5kZWJ1Zygna2lsbGVkIHBpZCAlZCcgJSBz
ZWxmLl9wcm9jLnBpZCkKKworICAgICAgICAjIHJlYWQgYW55IHJlbWFpbmluZyBkYXRhIG9uIHRo
ZSBwaXBlcyBhbmQgcmV0dXJuIGl0LgorICAgICAgICBpZiBub3Qga2lsbGVkOgorICAgICAgICAg
ICAgaWYgc2VsZi5fdXNlX3dpbjMyX2FwaXM6CisgICAgICAgICAgICAgICAgc2VsZi5fd2FpdF9m
b3JfZGF0YV9hbmRfdXBkYXRlX2J1ZmZlcnNfdXNpbmdfd2luMzJfYXBpcyhub3cpCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRfZm9yX2RhdGFfYW5kX3VwZGF0
ZV9idWZmZXJzX3VzaW5nX3NlbGVjdChub3csIHN0b3BwaW5nPVRydWUpCisgICAgICAgIG91dCwg
ZXJyID0gc2VsZi5fb3V0cHV0LCBzZWxmLl9lcnJvcgorICAgICAgICBzZWxmLl9yZXNldCgpCisg
ICAgICAgIHJldHVybiAob3V0LCBlcnIpCisKKyAgICBkZWYga2lsbChzZWxmKToKKyAgICAgICAg
c2VsZi5zdG9wKDAuMCkKKworICAgIGRlZiBfa2lsbChzZWxmKToKKyAgICAgICAgc2VsZi5faG9z
dC5leGVjdXRpdmUua2lsbF9wcm9jZXNzKHNlbGYuX3Byb2MucGlkKQorICAgICAgICBpZiBzZWxm
Ll9wcm9jLnBvbGwoKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3Byb2Mud2FpdCgp
CisKKyAgICBkZWYgcmVwbGFjZV9vdXRwdXRzKHNlbGYsIHN0ZG91dCwgc3RkZXJyKToKKyAgICAg
ICAgYXNzZXJ0IHNlbGYuX3Byb2MKKyAgICAgICAgaWYgc3Rkb3V0OgorICAgICAgICAgICAgc2Vs
Zi5fcHJvYy5zdGRvdXQuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRvdXQgPSBz
dGRvdXQKKyAgICAgICAgaWYgc3RkZXJyOgorICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRlcnIu
Y2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRlcnIgPSBzdGRlcnIKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zaW11bGF0b3JfcHJvY2Vzcy5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2ltdWxhdG9yX3Byb2Nlc3MucHkJKG5v
bmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9j
ZXNzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMwIEBACisjIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGVycm5vCitpbXBvcnQgbG9nZ2luZwor
aW1wb3J0IG9zCitpbXBvcnQgdGltZQorCitmcm9tIHdlYmtpdHB5LnBvcnQuc2VydmVyX3Byb2Nl
c3NfYmFzZSBpbXBvcnQgU2VydmVyUHJvY2Vzc0Jhc2UKKworCitfbG9nID0gbG9nZ2luZy5nZXRM
b2dnZXIoX19uYW1lX18pCisKKworY2xhc3MgZmlmb1Byb2Nlc3Mob2JqZWN0KToKKworICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBzdGRpbl9oYW5kbGUsIHN0ZG91dF9oYW5kbGUsIHN0ZGVycl9oYW5k
bGUsIHBpZCk6CisgICAgICAgIHNlbGYuc3RkaW4gPSBvcy5mZG9wZW4oc3RkaW5faGFuZGxlLCAi
dyIpCisgICAgICAgIHNlbGYuc3Rkb3V0ID0gb3MuZmRvcGVuKHN0ZG91dF9oYW5kbGUsICJyYiIp
CisgICAgICAgIHNlbGYuc3RkZXJyID0gb3MuZmRvcGVuKHN0ZGVycl9oYW5kbGUsICJyYiIpCisg
ICAgICAgIHNlbGYucGlkID0gcGlkCisKKyAgICBkZWYgcG9sbChzZWxmKToKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgb3Mua2lsbChzZWxmLnBpZCwgMCkKKyAgICAgICAgZXhjZXB0IE9TRXJy
b3IsIGVycjoKKyAgICAgICAgICAgIGlmIGVyci5lcnJubyA9PSBlcnJuby5FU1JDSDoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgZWxpZiBlcnIuZXJybm8gPT0gZXJybm8u
RVBFUk06CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgcHJpbnQgLTEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVy
biBOb25lCisKKyAgICAjIFBlciBzdWJwcm9jZXNzJ3MgZG9jdW1lbnRhdGlvbiwgdGhpcyBtaW1p
Y2tzIGl0J3MgYmVoYXZpb3IKKyAgICBkZWYgd2FpdChzZWxmKToKKyAgICAgICAgd2hpbGUgbm90
IHNlbGYucG9sbCgpOgorICAgICAgICAgICAgdGltZS5zbGVlcCguMDEpCisgICAgICAgIHJldHVy
biBzZWxmLnBvbGwoKQorCisKK2NsYXNzIFNpbXVsYXRvclByb2Nlc3MoU2VydmVyUHJvY2Vzc0Jh
c2UpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVudj1O
b25lLCB1bml2ZXJzYWxfbmV3bGluZXM9RmFsc2UsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2g9RmFs
c2UpOgorICAgICAgICBzdXBlcihTaW11bGF0b3JQcm9jZXNzLCBzZWxmKS5fX2luaXRfXyhwb3J0
X29iaiwgbmFtZSwgY21kLCBlbnYsIHVuaXZlcnNhbF9uZXdsaW5lcywgdHJlYXRfbm9fZGF0YV9h
c19jcmFzaCkKKworICAgICAgICBmcm9tIHdlYmtpdHB5Lnhjb2RlLnNpbXVsYXRvciBpbXBvcnQg
U2ltdWxhdG9yICAjIEF2b2lkIGNpcmN1bGFyIGltcG9ydAorICAgICAgICBzZWxmLl9zaW11bGF0
b3JfbWFuYWdlciA9IFNpbXVsYXRvcihwb3J0X29iai5ob3N0KQorCisgICAgICAgIHNlbGYuX2J1
bmRsZUlEID0gc2VsZi5fcG9ydC5hcHBfaWRlbnRpZmllcl9mcm9tX2J1bmRsZShzZWxmLl9jbWRb
MV0pCisgICAgICAgIHNlbGYuX2RldmljZSA9IHNlbGYuX3NpbXVsYXRvcl9tYW5hZ2VyLmZpbmRf
ZGV2aWNlX2J5X3VkaWQoc2VsZi5fY21kWzBdKQorICAgICAgICBzZWxmLl9kZXZpY2UuaW5zdGFs
bF9hcHAoc2VsZi5fY21kWzFdKQorICAgICAgICBzZWxmLl9lbnZbJ0lQQ19JREVOVElGSUVSJ10g
PSBzZWxmLl9idW5kbGVJRCArICItIiArIHNlbGYuX2RldmljZS51ZGlkCisKKyAgICAgICAgZmls
ZV9sb2NhdGlvbiA9ICcvdG1wLycgKyBzZWxmLl9lbnZbJ0lQQ19JREVOVElGSUVSJ10KKyAgICAg
ICAgc2VsZi5faW5fcGF0aCA9IGZpbGVfbG9jYXRpb24gKyAnX0lOJworICAgICAgICBzZWxmLl9v
dXRfcGF0aCA9IGZpbGVfbG9jYXRpb24gKyAnX09VVCcKKyAgICAgICAgc2VsZi5fZXJyb3JfcGF0
aCA9IGZpbGVfbG9jYXRpb24gKyAnX0VSUk9SJworCisgICAgICAgIHNlbGYuX3Jlc2V0KCkKKwor
ICAgIGRlZiBfX3VubGlua19jaGVja19leGlzdHMoc2VsZiwgcGF0aCk6CisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIG9zLnVubGluayhwYXRoKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBl
OgorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocGF0aCk6CisgICAgICAgICAgICAgICAg
cmFpc2UgT1NFcnJvcigiQ291bGQgbm90IHVubGluayAnIiArIHBhdGggKyAiJywgdGhlIHRhcmdl
dCBwYXRoIGlzIGEgZmlsZSBub3QgYSBwaXBlLiIpCisKKyAgICBkZWYgX3Jlc2V0KHNlbGYpOgor
ICAgICAgICBzdXBlcihTaW11bGF0b3JQcm9jZXNzLCBzZWxmKS5fcmVzZXQoKQorCisgICAgICAg
IHNlbGYuX191bmxpbmtfY2hlY2tfZXhpc3RzKHNlbGYuX2luX3BhdGgpCisgICAgICAgIHNlbGYu
X191bmxpbmtfY2hlY2tfZXhpc3RzKHNlbGYuX291dF9wYXRoKQorICAgICAgICBzZWxmLl9fdW5s
aW5rX2NoZWNrX2V4aXN0cyhzZWxmLl9lcnJvcl9wYXRoKQorCisgICAgZGVmIF9zdGFydChzZWxm
KToKKyAgICAgICAgb3MubWtmaWZvKHNlbGYuX2luX3BhdGgsIDA2MDApCisgICAgICAgIG9zLm1r
ZmlmbyhzZWxmLl9vdXRfcGF0aCwgMDYwMCkKKyAgICAgICAgb3MubWtmaWZvKHNlbGYuX2Vycm9y
X3BhdGgsIDA2MDApCisKKyAgICAgICAgc2VsZi5fcGlkID0gc2VsZi5fZGV2aWNlLmxhdW5jaF9h
cHAoc2VsZi5fYnVuZGxlSUQsIHNlbGYuX2NtZFszOl0sIGVudj1zZWxmLl9lbnYpCisKKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgc3Rkb3V0ID0gb3Mub3BlbihzZWxmLl9vdXRfcGF0aCwgb3Mu
T19SRE9OTFkgfCBvcy5PX05PTkJMT0NLKQorICAgICAgICAgICAgc3RkZXJyID0gb3Mub3Blbihz
ZWxmLl9lcnJvcl9wYXRoLCBvcy5PX1JET05MWSB8IG9zLk9fTk9OQkxPQ0spCisgICAgICAgIGV4
Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQorICAg
ICAgICAgICAgaWYgc3Rkb3V0OgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHN0ZG91dCkKKyAg
ICAgICAgICAgIGlmIHN0ZGVycjoKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShzdGRlcnIpCisK
KyAgICAgICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIDMKKyAgICAgICAgc3RkaW4gPSBOb25l
CisgICAgICAgIHdoaWxlIG5vdCBzdGRpbiBhbmQgZGVhZGxpbmUgPiB0aW1lLnRpbWUoKToKKyAg
ICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzdGRpbiA9IG9zLm9wZW4oc2VsZi5faW5f
cGF0aCwgb3MuT19XUk9OTFkgfCBvcy5PX05PTkJMT0NLKQorICAgICAgICAgICAgZXhjZXB0IE9T
RXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIG5vdCBzdGRpbjoK
KyAgICAgICAgICAgIHNlbGYuX2NyYXNoZWQgPSBUcnVlCisgICAgICAgICAgICBvcy5jbG9zZShz
dGRvdXQpCisgICAgICAgICAgICBvcy5jbG9zZShzdGRlcnIpCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBzZWxmLl9wcm9jID0gZmlmb1Byb2Nlc3Moc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBz
ZWxmLl9waWQpCisKKyAgICBkZWYgX2tpbGwoc2VsZik6CisgICAgICAgIHNlbGYuX2RldmljZS50
ZXJtaW5hdGVfYXBwKHNlbGYuX2J1bmRsZUlEKQorICAgICAgICBzdXBlcihTaW11bGF0b3JQcm9j
ZXNzLCBzZWxmKS5fa2lsbCgpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3Np
bXVsYXRvci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3Np
bXVsYXRvci5weQkocmV2aXNpb24gMjEwNzM1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS94
Y29kZS9zaW11bGF0b3IucHkJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw3ICsxNjcsNyBAQCBjbGFz
cyBEZXZpY2Uob2JqZWN0KToKICAgICBSZXByZXNlbnRzIGEgQ29yZVNpbXVsYXRvciBkZXZpY2Ug
dW5kZXJuZWF0aCBhIHJ1bnRpbWUKICAgICAiIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBu
YW1lLCB1ZGlkLCBhdmFpbGFibGUsIHJ1bnRpbWUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBu
YW1lLCB1ZGlkLCBhdmFpbGFibGUsIHJ1bnRpbWUsIGhvc3Q9Tm9uZSk6CiAgICAgICAgICIiIgog
ICAgICAgICA6cGFyYW0gbmFtZTogVGhlIGRldmljZSBuYW1lCiAgICAgICAgIDp0eXBlIG5hbWU6
IHN0cgpAQCAtMTc4LDYgKzE3OCw3IEBAIGNsYXNzIERldmljZShvYmplY3QpOgogICAgICAgICA6
cGFyYW0gcnVudGltZTogVGhlIGlPUyBTaW11bGF0b3IgcnVudGltZSB0aGF0IGhvc3RzIHRoaXMg
ZGV2aWNlCiAgICAgICAgIDp0eXBlIHJ1bnRpbWU6IFJ1bnRpbWUKICAgICAgICAgIiIiCisgICAg
ICAgIHNlbGYuX2hvc3QgPSBob3N0IG9yIEhvc3QoKQogICAgICAgICBzZWxmLm5hbWUgPSBuYW1l
CiAgICAgICAgIHNlbGYudWRpZCA9IHVkaWQKICAgICAgICAgc2VsZi5hdmFpbGFibGUgPSBhdmFp
bGFibGUKQEAgLTI2MCw2ICsyNjEsMjkgQEAgY2xhc3MgRGV2aWNlKG9iamVjdCk6CiAgICAgICAg
IGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjoKICAgICAgICAgICAgIHJhaXNl
IFJ1bnRpbWVFcnJvcignInhjcnVuIHNpbWN0bCBlcmFzZSIgZmFpbGVkOiBkZXZpY2Ugc3RhdGUg
aXMge30nLmZvcm1hdChTaW11bGF0b3IuZGV2aWNlX3N0YXRlKHVkaWQpKSkKIAorICAgIGRlZiBp
bnN0YWxsX2FwcChzZWxmLCBhcHBfcGF0aCk6CisgICAgICAgIGlmIHNlbGYuX2hvc3QuZXhlY3V0
aXZlLnJ1bl9jb21tYW5kKFsneGNydW4nLCAnc2ltY3RsJywgJ2luc3RhbGwnLCBzZWxmLnVkaWQs
IGFwcF9wYXRoXSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKSA+IDA6CisgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBsYXVuY2hfYXBwKHNlbGYs
IGJ1bmRsZV9pZGVudGlmaWVyLCBhcmdzLCBlbnY9Tm9uZSk6CisgICAgICAgIHRyYW5zZmVyZWRF
bnZpcm9ubWVudCA9IHt9CisgICAgICAgIGlmIGVudjoKKyAgICAgICAgICAgIGZvciB2YWx1ZSBp
biBlbnY6CisgICAgICAgICAgICAgICAgaWYgbm90ICJTSU1DVExfQ0hJTERfIiBpbiB2YWx1ZToK
KyAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXJlZEVudmlyb25tZW50WydTSU1DVExfQ0hJTERf
JyArIHZhbHVlXSA9IGVudlt2YWx1ZV0KKyAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXJlZEVu
dmlyb25tZW50W3ZhbHVlXSA9IGVudlt2YWx1ZV0KKyAgICAgICAgc3RyID0gc2VsZi5faG9zdC5l
eGVjdXRpdmUucnVuX2NvbW1hbmQoWyd4Y3J1bicsICdzaW1jdGwnLCAnbGF1bmNoJywgc2VsZi51
ZGlkLCBidW5kbGVfaWRlbnRpZmllcl0gKyBhcmdzLCBlbnY9dHJhbnNmZXJlZEVudmlyb25tZW50
KQorICAgICAgICBpZiBub3QgYnVuZGxlX2lkZW50aWZpZXIgaW4gc3RyOgorICAgICAgICAgICAg
cmV0dXJuIE5vbmUKKyAgICAgICAgc3RyID0gc3RyLnJzdHJpcCgnXG4nKS5zcGxpdCgpWzFdCisg
ICAgICAgIHJldHVybiBpbnQoc3RyKQorCisgICAgZGVmIHRlcm1pbmF0ZV9hcHAoc2VsZiwgYnVu
ZGxlX2lkZW50aWZpZXIpOgorICAgICAgICBpZiBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5ydW5fY29t
bWFuZChbJ3hjcnVuJywgJ3NpbWN0bCcsICd0ZXJtaW5hdGUnLCBzZWxmLnVkaWQsIGJ1bmRsZV9p
ZGVudGlmaWVyXSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKSA+IDA6CisgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKwogICAgIGRlZiBfX2VxX18oc2VsZiwgb3Ro
ZXIpOgogICAgICAgICByZXR1cm4gc2VsZi51ZGlkID09IG90aGVyLnVkaWQKIApAQCAtNDc3LDcg
KzUwMSw4IEBAIGNsYXNzIFNpbXVsYXRvcihvYmplY3QpOgogICAgICAgICAgICAgICAgIGRldmlj
ZSA9IERldmljZShuYW1lPWRldmljZV9tYXRjaC5ncm91cCgnbmFtZScpLnJzdHJpcCgpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZGlkPWRldmljZV9tYXRjaC5ncm91cCgndWRp
ZCcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGU9ZGV2aWNlX21h
dGNoLmdyb3VwKCdhdmFpbGFiaWxpdHknKSBpcyBOb25lLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBydW50aW1lPWN1cnJlbnRfcnVudGltZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcnVudGltZT1jdXJyZW50X3J1bnRpbWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhvc3Q9c2VsZi5faG9zdCkKICAgICAgICAgICAgICAgICBjdXJyZW50X3J1
bnRpbWUuZGV2aWNlcy5hcHBlbmQoZGV2aWNlKQogCiAgICAgZGVmIGRldmljZV90eXBlKHNlbGYs
IG5hbWU9Tm9uZSwgaWRlbnRpZmllcj1Ob25lKToK
</data>
<flag name="review"
          id="320897"
          type_id="1"
          status="-"
          setter="dbates"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298794</attachid>
            <date>2017-01-13 15:35:52 -0800</date>
            <delta_ts>2017-01-27 15:07:15 -0800</delta_ts>
            <desc>Removes layout test relay</desc>
            <filename>removeLayoutTestRelay.patch</filename>
            <type>text/plain</type>
            <size>133291</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmln
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9CYXNl
LnhjY29uZmlnCShyZXZpc2lvbiAyMTA3MzUpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29u
ZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwkobm9uZXhpc3RlbnQpCkBAIC0xLDY4ICswLDAgQEAK
LS8vIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLS8vIGFyZSBtZXQ6Ci0vLyAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
Ly8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotLy8gMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLS8vICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0vLyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotLy8gSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0vLyBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotLy8gQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0vLyBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0vLyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLS8vIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLS8vIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSAiLi4vLi4vLi4v
Li4vSW50ZXJuYWwvQ29uZmlndXJhdGlvbnMvSGF2ZUludGVybmFsU0RLLnhjY29uZmlnIgotCi1V
U0VfSU5URVJOQUxfU0RLID0gJChVU0VfSU5URVJOQUxfU0RLXyQoQ09ORklHVVJBVElPTikpOwot
VVNFX0lOVEVSTkFMX1NES19Qcm9kdWN0aW9uID0gWUVTOwotVVNFX0lOVEVSTkFMX1NES19EZWJ1
ZyA9ICQoSEFWRV9JTlRFUk5BTF9TREspOwotVVNFX0lOVEVSTkFMX1NES19SZWxlYXNlID0gJChI
QVZFX0lOVEVSTkFMX1NESyk7Ci0KLUNMQU5HX0NYWF9MQU5HVUFHRV9TVEFOREFSRCA9IGdudSsr
MHg7Ci1DTEFOR19FTkFCTEVfT0JKQ19BUkMgPSBZRVM7Ci1DTEFOR19XQVJOX0NYWDBYX0VYVEVO
U0lPTlMgPSBOTzsKLUhFQURFUl9TRUFSQ0hfUEFUSFMgPSAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
dXNyL2xvY2FsL2luY2x1ZGUgJChXRUJDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL0ZvcndhcmRp
bmdIZWFkZXJzICQoU1JDUk9PVCkvLi4vLi4vU291cmNlL0phdmFTY3JpcHRDb3JlL2ljdSAkKE5F
WFRfUk9PVCkvdXNyL2xvY2FsL2luY2x1ZGUvV2ViQ29yZVRlc3RTdXBwb3J0OwotR0NDX1BSRVBS
T0NFU1NPUl9ERUZJTklUSU9OUyA9ICQoREVCVUdfREVGSU5FUykgRU5BQkxFX0RBU0hCT0FSRF9T
VVBQT1JUOwotREVCVUdfSU5GT1JNQVRJT05fRk9STUFUID0gZHdhcmYtd2l0aC1kc3ltOwotUFJF
QklORElORyA9IE5PCi1HQ0NfQ19MQU5HVUFHRV9TVEFOREFSRCA9IGdudTk5Ci1HQ0NfRU5BQkxF
X0NQUF9FWENFUFRJT05TID0gTk87Ci1HQ0NfRU5BQkxFX0NQUF9SVFRJID0gTk87Ci1HQ0NfUFJF
Q09NUElMRV9QUkVGSVhfSEVBREVSID0gWUVTCi1HQ0NfVFJFQVRfV0FSTklOR1NfQVNfRVJST1JT
ID0gWUVTCi1HQ0NfVkVSU0lPTiA9IGNvbS5hcHBsZS5jb21waWxlcnMubGx2bS5jbGFuZy4xXzA7
Ci1HQ0NfV0FSTl9BQk9VVF9ERVBSRUNBVEVEX0ZVTkNUSU9OUyA9IE5PCi1HQ0NfV0FSTl9VTlVT
RURfRlVOQ1RJT04gPSBZRVMKLUdDQ19XQVJOX1VOVVNFRF9WQVJJQUJMRSA9IFlFUwotR0NDX1dB
Uk5fNjRfVE9fMzJfQklUX0NPTlZFUlNJT05bYXJjaD14ODZfNjRdID0gTk87Ci1XQVJOSU5HX0NG
TEFHUyA9IC1XYWxsIC1XIC1Xbm8tdW51c2VkLXBhcmFtZXRlciAtV3VuZGVmCi0KLURFQlVHX0RF
RklORVNfZGVidWcgPSA7Ci1ERUJVR19ERUZJTkVTX25vcm1hbCA9IE5ERUJVRzsKLURFQlVHX0RF
RklORVMgPSAkKERFQlVHX0RFRklORVNfJChDVVJSRU5UX1ZBUklBTlQpKTsKLQotVEFSR0VUX01B
Q19PU19YX1ZFUlNJT05fTUFKT1IgPSAkKFRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SJChN
QUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ6c3VmZml4OmlkZW50aWZpZXIpKTsKLVRBUkdFVF9NQUNf
T1NfWF9WRVJTSU9OX01BSk9SXzEwID0gMTAxMDAwOwotVEFSR0VUX01BQ19PU19YX1ZFUlNJT05f
TUFKT1JfMTEgPSAxMDExMDA7Ci1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUl8xMiA9IDEw
MTIwMDsKLVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SXzEzID0gMTAxMzAwOwotCi1TREtS
T09UID0gbWFjb3N4LmludGVybmFsOwotCi1TVVBQT1JURURfUExBVEZPUk1TID0gbWFjb3N4Owot
Ci1UT09MQ0hBSU5TID0gZGVmYXVsdDsKLQotT1RIRVJfQ0ZMQUdTID0gJChBU0FOX09USEVSX0NG
TEFHUyk7Ci1PVEhFUl9DUExVU1BMVVNGTEFHUyA9ICQoQVNBTl9PVEhFUl9DUExVU1BMVVNGTEFH
Uyk7Ci1PVEhFUl9MREZMQUdTID0gJChBU0FOX09USEVSX0xERkxBR1MpOwpJbmRleDogVG9vbHMv
TGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0RlYnVnUmVsZWFzZS54Y2NvbmZpZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMvRGVidWdSZWxl
YXNlLnhjY29uZmlnCShyZXZpc2lvbiAyMTA3MzUpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkv
Q29uZmlndXJhdGlvbnMvRGVidWdSZWxlYXNlLnhjY29uZmlnCShub25leGlzdGVudCkKQEAgLTEs
NDIgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotLy8gYXJlIG1ldDoKLS8v
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0vLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
Ly8gICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLS8vIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0vLyBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLS8v
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0vLyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLS8vIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLS8vIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotLy8gUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotLy8gT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRl
ICJCYXNlLnhjY29uZmlnIgotCi1BUkNIUyA9ICQoQVJDSFNfU1RBTkRBUkRfNjRfQklUKTsKLQot
VEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1IgPSAkKE1BQ19PU19YX1ZFUlNJT05fTUFKT1Ip
OwotCi1NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgPSAkKE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdF
VF8kKFRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SKSkKLU1BQ09TWF9ERVBMT1lNRU5UX1RB
UkdFVF8xMDEwMDAgPSAxMC4xMDsKLU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVF8xMDExMDAgPSAx
MC4xMTsKLU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVF8xMDEyMDAgPSAxMC4xMjsKLU1BQ09TWF9E
RVBMT1lNRU5UX1RBUkdFVF8xMDEzMDAgPSAxMC4xMzsKLQotRlJBTUVXT1JLX1NFQVJDSF9QQVRI
UyA9ICQoREVWRUxPUEVSX0RJUikvTGlicmFyeS9Qcml2YXRlRnJhbWV3b3JrczsKLUxEX1JVTlBB
VEhfU0VBUkNIX1BBVEhTID0gJChERVZFTE9QRVJfRElSKS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdv
cmtzOwotT1RIRVJfTERGTEFHUyA9IC1mcmFtZXdvcmsgQ29yZVNpbXVsYXRvciAtZnJhbWV3b3Jr
IEFwcEtpdDsKLQotU0RLUk9PVCA9ICQoU0RLUk9PVF9tYWNvc3hfJChVU0VfSU5URVJOQUxfU0RL
KSk7Ci1TREtST09UX21hY29zeF8gPSBtYWNvc3g7Ci1TREtST09UX21hY29zeF9ZRVMgPSBtYWNv
c3guaW50ZXJuYWw7CkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5
L0NvcmVTaW11bGF0b3JTUEkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkv
TGF5b3V0VGVzdFJlbGF5L0NvcmVTaW11bGF0b3JTUEkuaAkocmV2aXNpb24gMjEwNzM1KQorKysg
VG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9Db3JlU2ltdWxhdG9yU1BJLmgJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1
LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIF9f
aGFzX2luY2x1ZGUoPENvcmVTaW11bGF0b3IvQ29yZVNpbXVsYXRvci5oPikKLQotLyogRklYTUU6
IFJlbW92ZSB0aGUgYmVsb3cgI2RlZmluZSBvbmNlIHdlIHJlcXVpcmUgWGNvZGUgNy4zIHdpdGgg
aU9TIDkuMyBTREsgb3IgbmV3ZXIuICovCi0jZGVmaW5lIF9fY29yZXNpbV91bmF2YWlsYWJsZV9t
c2cobXNnKQotI2ltcG9ydCA8Q29yZVNpbXVsYXRvci9Db3JlU2ltdWxhdG9yLmg+Ci0KLS8qIEZJ
WE1FOiBBbHdheXMgdXNlIFNpbVNlcnZpY2VDb250ZXh0IG9uY2Ugd2UgcmVxdWlyZSBYY29kZSA3
LjMgd2l0aCBpT1MgOS4zIFNESyBvciBuZXdlci4gKi8KLSNkZWZpbmUgVVNFX1NJTV9TRVJWSUNF
X0NPTlRFWFQgZGVmaW5lZChDT1JFU0lNX0FQSV9NQVhfQUxMT1dFRCkKLQotI2Vsc2UKLQotI2lt
cG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNkZWZpbmUgVVNFX1NJTV9TRVJWSUNF
X0NPTlRFWFQgMQotCi0jZGVmaW5lIGtTaW1EZXZpY2VMYXVuY2hBcHBsaWNhdGlvbkFyZ3VtZW50
cyBAImFyZ3VtZW50cyIKLSNkZWZpbmUga1NpbURldmljZUxhdW5jaEFwcGxpY2F0aW9uRW52aXJv
bm1lbnQgQCJlbnZpcm9ubWVudCIKLQotQGludGVyZmFjZSBTaW1EZXZpY2UgOiBOU09iamVjdAot
LSAoQk9PTClpbnN0YWxsQXBwbGljYXRpb246KE5TVVJMICopaW5zdGFsbFVSTCB3aXRoT3B0aW9u
czooTlNEaWN0aW9uYXJ5ICopb3B0aW9ucyBlcnJvcjooTlNFcnJvciAqIF9fYXV0b3JlbGVhc2lu
ZyAqKWVycm9yOwotLSAocGlkX3QpbGF1bmNoQXBwbGljYXRpb25XaXRoSUQ6KE5TU3RyaW5nICop
YnVuZGxlSUQgb3B0aW9uczooTlNEaWN0aW9uYXJ5ICopb3B0aW9ucyBlcnJvcjooTlNFcnJvciAq
IF9fYXV0b3JlbGVhc2luZyAqKWVycm9yOwotQGVuZAotCi1AaW50ZXJmYWNlIFNpbURldmljZVNl
dCA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBjb3B5KSBOU0RpY3Rpb25hcnkgKmRl
dmljZXNCeVVESUQ7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgU2ltU2VydmljZUNvbnRleHQgOiBOU09i
amVjdAotKyhTaW1TZXJ2aWNlQ29udGV4dCAqKXNoYXJlZFNlcnZpY2VDb250ZXh0Rm9yRGV2ZWxv
cGVyRGlyOihOU1N0cmluZyAqKWRldmVsb3BlckRpciBlcnJvcjooTlNFcnJvciAqIF9fYXV0b3Jl
bGVhc2luZyAqKWVycm9yOwotLShTaW1EZXZpY2VTZXQgKilkZWZhdWx0RGV2aWNlU2V0V2l0aEVy
cm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci1AZW5kCi0KLSNlbmRpZgpJ
bmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRQ
aXBlUmVsYXkuaAkocmV2aXNpb24gMjEwNzM1KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xh
eW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5oCShub25leGlzdGVudCkKQEAgLTEsMzYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgTFRQaXBlUmVsYXlfaAotI2RlZmluZSBMVFBpcGVSZWxh
eV9oCi0KLSNpbXBvcnQgIkxUUmVsYXkuaCIKLQotQGludGVyZmFjZSBMVFBpcGVSZWxheSA6IE5T
T2JqZWN0IDxMVFJlbGF5PgotQHByb3BlcnR5ICh3ZWFrKSBpZDxMVFJlbGF5RGVsZWdhdGU+IHJl
bGF5RGVsZWdhdGU7Ci0tIChpZClpbml0V2l0aFByZWZpeDooTlNTdHJpbmcgKilwcmVmaXg7Ci1A
ZW5kCi0KLSNlbmRpZgpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxh
eS9MVFBpcGVSZWxheS5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlv
dXRUZXN0UmVsYXkvTFRQaXBlUmVsYXkubQkocmV2aXNpb24gMjEwNzM1KQorKysgVG9vbHMvTGF5
b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5tCShub25leGlzdGVudCkK
QEAgLTEsMTU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJMVFBpcGVSZWxheS5oIgot
Ci0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5o
PgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCi1AaW50ZXJmYWNlIExUUGlwZVJlbGF5ICgpCi1A
cHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TU3RyaW5nICpmaWZvUHJlZml4OwotQHByb3Bl
cnR5IChzdHJvbmcpIE5TT3V0cHV0U3RyZWFtICpzdGFuZGFyZElucHV0UGlwZTsKLUBwcm9wZXJ0
eSAoc3Ryb25nKSBOU0lucHV0U3RyZWFtICpzdGFuZGFyZE91dHB1dFBpcGU7Ci1AcHJvcGVydHkg
KHN0cm9uZykgTlNJbnB1dFN0cmVhbSAqc3RhbmRhcmRFcnJvclBpcGU7Ci0KLS0gKHZvaWQpY3Jl
YXRlRklGT3M7Ci0tICh2b2lkKWRlc3Ryb3lGSUZPczsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9u
IExUUGlwZVJlbGF5Ci0KLS0gKE5TU3RyaW5nICopaW5QaXBlUGF0aAotewotICAgIHJldHVybiBb
X2ZpZm9QcmVmaXggc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6QCJfSU4iXTsKLX0KLQotLSAoTlNT
dHJpbmcgKilvdXRQaXBlUGF0aAotewotICAgIHJldHVybiBbX2ZpZm9QcmVmaXggc3RyaW5nQnlB
cHBlbmRpbmdTdHJpbmc6QCJfT1VUIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopZXJyb3JQaXBlUGF0
aAotewotICAgIHJldHVybiBbX2ZpZm9QcmVmaXggc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6QCJf
RVJST1IiXTsKLX0KLQotLSAoTlNPdXRwdXRTdHJlYW0gKikgb3V0cHV0U3RyZWFtCi17Ci0gICAg
cmV0dXJuIF9zdGFuZGFyZElucHV0UGlwZTsKLX0KLQotLSAoaWQpaW5pdFdpdGhQcmVmaXg6KE5T
U3RyaW5nICopcHJlZml4Ci17Ci0gICAgaWYgKChzZWxmID0gW3N1cGVyIGluaXRdKSkgewotICAg
ICAgICBfZmlmb1ByZWZpeCA9IHByZWZpeDsKLSAgICAgICAgW3NlbGYgZGVzdHJveUZJRk9zXTsK
LSAgICB9Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0dXAKLXsKLSAgICBbc2Vs
ZiBkZXN0cm95RklGT3NdOwotICAgIFtzZWxmIGNyZWF0ZUZJRk9zXTsKLX0KLQotLSAodm9pZCl0
ZWFyRG93bgotewotICAgIFtzZWxmIGRlc3Ryb3lGSUZPc107Ci19Ci0KLS0odm9pZCkgY29ubmVj
dAotewotICAgIF9zdGFuZGFyZElucHV0UGlwZSA9IFtOU091dHB1dFN0cmVhbSBvdXRwdXRTdHJl
YW1Ub0ZpbGVBdFBhdGg6W3NlbGYgaW5QaXBlUGF0aF0gYXBwZW5kOllFU107Ci0gICAgX3N0YW5k
YXJkT3V0cHV0UGlwZSA9IFtOU0lucHV0U3RyZWFtIGlucHV0U3RyZWFtV2l0aEZpbGVBdFBhdGg6
W3NlbGYgb3V0UGlwZVBhdGhdXTsKLSAgICBfc3RhbmRhcmRFcnJvclBpcGUgPSBbTlNJbnB1dFN0
cmVhbSBpbnB1dFN0cmVhbVdpdGhGaWxlQXRQYXRoOltzZWxmIGVycm9yUGlwZVBhdGhdXTsKLQot
ICAgIFtbc2VsZiBzdGFuZGFyZElucHV0UGlwZV0gc2V0RGVsZWdhdGU6c2VsZl07Ci0gICAgW1tz
ZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gc2V0RGVsZWdhdGU6c2VsZl07Ci0gICAgW1tzZWxmIHN0
YW5kYXJkRXJyb3JQaXBlXSBzZXREZWxlZ2F0ZTpzZWxmXTsKLQotICAgIFtbc2VsZiBzdGFuZGFy
ZE91dHB1dFBpcGVdIHNjaGVkdWxlSW5SdW5Mb29wOltOU1J1bkxvb3AgbWFpblJ1bkxvb3BdIGZv
ck1vZGU6TlNEZWZhdWx0UnVuTG9vcE1vZGVdOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yUGlw
ZV0gc2NoZWR1bGVJblJ1bkxvb3A6W05TUnVuTG9vcCBtYWluUnVuTG9vcF0gZm9yTW9kZTpOU0Rl
ZmF1bHRSdW5Mb29wTW9kZV07Ci0KLSAgICBbW3NlbGYgc3RhbmRhcmRJbnB1dFBpcGVdIG9wZW5d
OwotICAgIFtbc2VsZiBzdGFuZGFyZE91dHB1dFBpcGVdIG9wZW5dOwotICAgIFtbc2VsZiBzdGFu
ZGFyZEVycm9yUGlwZV0gb3Blbl07Ci0KLSAgICBbW3NlbGYgcmVsYXlEZWxlZ2F0ZV0gZGlkQ29u
bmVjdF07Ci19Ci0KLS0gKHZvaWQpZGlzY29ubmVjdAotewotICAgIFtbc2VsZiBzdGFuZGFyZE91
dHB1dFBpcGVdIGNsb3NlXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRFcnJvclBpcGVdIGNsb3NlXTsK
LSAgICBbW3NlbGYgc3RhbmRhcmRJbnB1dFBpcGVdIGNsb3NlXTsKLSAgICBbW3NlbGYgcmVsYXlE
ZWxlZ2F0ZV0gZGlkRGlzY29ubmVjdF07Ci19Ci0KLS0gKHZvaWQpY3JlYXRlRklGT3MKLXsKLSAg
ICBta2ZpZm8oW1tzZWxmIGluUGlwZVBhdGhdIFVURjhTdHJpbmddLCAwNjY2KTsKLSAgICBta2Zp
Zm8oW1tzZWxmIG91dFBpcGVQYXRoXSBVVEY4U3RyaW5nXSwgMDY2Nik7Ci0gICAgbWtmaWZvKFtb
c2VsZiBlcnJvclBpcGVQYXRoXSBVVEY4U3RyaW5nXSwgMDY2Nik7Ci19Ci0KLS0gKHZvaWQpZGVz
dHJveUZJRk9zCi17Ci0gICAgdW5saW5rKFtbc2VsZiBpblBpcGVQYXRoXSBVVEY4U3RyaW5nXSk7
Ci0gICAgdW5saW5rKFtbc2VsZiBvdXRQaXBlUGF0aF0gVVRGOFN0cmluZ10pOwotICAgIHVubGlu
ayhbW3NlbGYgZXJyb3JQaXBlUGF0aF0gVVRGOFN0cmluZ10pOwotfQotCi0tICh2b2lkKSByZWxh
eVN0cmVhbTooTlNJbnB1dFN0cmVhbSAqKXN0cmVhbQotewotICAgIHVpbnQ4X3QgYnl0ZXNbMTAy
NF07Ci0gICAgTlNJbnRlZ2VyIGJ5dGVzUmVhZCA9IFtzdHJlYW0gcmVhZDpieXRlcyBtYXhMZW5n
dGg6MTAyNF07Ci0gICAgTlNEYXRhICpkYXRhID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmJ5dGVz
IGxlbmd0aDpieXRlc1JlYWRdOwotCi0gICAgaWYgKHN0cmVhbSA9PSBbc2VsZiBzdGFuZGFyZE91
dHB1dFBpcGVdKQotICAgICAgICBbW3NlbGYgcmVsYXlEZWxlZ2F0ZV0gZGlkUmVjZWl2ZVN0ZG91
dERhdGE6ZGF0YV07Ci0gICAgZWxzZQotICAgICAgICBbW3NlbGYgcmVsYXlEZWxlZ2F0ZV0gZGlk
UmVjZWl2ZVN0ZGVyckRhdGE6ZGF0YV07Ci19Ci0KLS0gKHZvaWQpc3RyZWFtOihOU1N0cmVhbSAq
KWFTdHJlYW0gaGFuZGxlRXZlbnQ6KE5TU3RyZWFtRXZlbnQpZXZlbnRDb2RlCi17Ci0gICAgc3dp
dGNoIChldmVudENvZGUpIHsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnROb25lOgotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnRIYXNCeXRlc0F2YWlsYWJsZToKLSAgICAgICAg
W3NlbGYgcmVsYXlTdHJlYW06KE5TSW5wdXRTdHJlYW0gKilhU3RyZWFtXTsKLSAgICBjYXNlIE5T
U3RyZWFtRXZlbnRIYXNTcGFjZUF2YWlsYWJsZToKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBO
U1N0cmVhbUV2ZW50T3BlbkNvbXBsZXRlZDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOU1N0
cmVhbUV2ZW50RW5kRW5jb3VudGVyZWQ6Ci0gICAgICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBk
aWRDcmFzaFdpdGhNZXNzYWdlOm5pbF07Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlNTdHJl
YW1FdmVudEVycm9yT2NjdXJyZWQ6Ci0gICAgICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRD
cmFzaFdpdGhNZXNzYWdlOltbYVN0cmVhbSBzdHJlYW1FcnJvcl0gZGVzY3JpcHRpb25dXTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1AZW5kCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVs
YXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRU
ZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXkuaAkocmV2aXNpb24gMjEwNzM1KQorKysg
VG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5LmgJKG5vbmV4aXN0
ZW50KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBMVFJlbGF5X2gKLSNk
ZWZpbmUgTFRSZWxheV9oCi0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi1A
cHJvdG9jb2wgTFRSZWxheURlbGVnYXRlIDxOU09iamVjdD4KLS0gKHZvaWQpZGlkQ29ubmVjdDsK
LS0gKHZvaWQpZGlkRGlzY29ubmVjdDsKLS0gKHZvaWQpZGlkQ3Jhc2hXaXRoTWVzc2FnZTooTlNT
dHJpbmcgKiltZXNzYWdlOwotLSAodm9pZClkaWRSZWNlaXZlU3Rkb3V0RGF0YTooTlNEYXRhICop
ZGF0YTsKLS0gKHZvaWQpZGlkUmVjZWl2ZVN0ZGVyckRhdGE6KE5TRGF0YSAqKWRhdGE7Ci1AZW5k
Ci0KLUBwcm90b2NvbCBMVFJlbGF5IDxOU09iamVjdCwgTlNTdHJlYW1EZWxlZ2F0ZT4KLS0gKHZv
aWQpc2V0dXA7Ci0tICh2b2lkKXRlYXJEb3duOwotLSAodm9pZCljb25uZWN0OwotLSAodm9pZClk
aXNjb25uZWN0OwotQHByb3BlcnR5ICh3ZWFrKSBpZDxMVFJlbGF5RGVsZWdhdGU+IHJlbGF5RGVs
ZWdhdGU7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TT3V0cHV0U3RyZWFtICpvdXRw
dXRTdHJlYW07Ci1AZW5kCi0KLSNlbmRpZgpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xh
eW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xh
eW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIuaAkocmV2aXNp
b24gMjEwNzM1KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJl
bGF5Q29udHJvbGxlci5oCShub25leGlzdGVudCkKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0jaWZuZGVmIExUUmVsYXlDb250cm9sbGVyX2gKLSNkZWZpbmUgTFRSZWxheUNvbnRyb2xsZXJf
aAotCi0jaW1wb3J0ICJMVFJlbGF5LmgiCi0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlv
bi5oPgotCi1AY2xhc3MgU2ltRGV2aWNlOwotCi1AaW50ZXJmYWNlIExUUmVsYXlDb250cm9sbGVy
IDogTlNPYmplY3QgPExUUmVsYXlEZWxlZ2F0ZT4KLS0gKGlkKWluaXRXaXRoRGV2aWNlOihTaW1E
ZXZpY2UgKilkZXZpY2UgcHJvZHVjdERpcjooTlNTdHJpbmcgKilwcm9kdWN0RGlyIGFwcFBhdGg6
KE5TU3RyaW5nICopYXBwUGF0aCBkZXZpY2VVRElEOihOU1VVSUQgKil1ZGlkIGR1bXBUb29sQXJn
dW1lbnRzOihOU0FycmF5ICopYXJndW1lbnRzOwotLSAodm9pZClzdGFydDsKLS0gKHZvaWQpZmlu
aXNoOwotQGVuZAotCi0jZW5kaWYKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRU
ZXN0UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRU
ZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLm0JKHJldmlzaW9uIDIx
MDczNSkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheUNv
bnRyb2xsZXIubQkobm9uZXhpc3RlbnQpCkBAIC0xLDI3MiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2ltcG9ydCAiTFRSZWxheUNvbnRyb2xsZXIuaCIKLQotI2ltcG9ydCAiQ29yZVNpbXVsYXRvclNQ
SS5oIgotI2ltcG9ydCAiTFRQaXBlUmVsYXkuaCIKLSNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4K
LSNpbXBvcnQgPGNydF9leHRlcm5zLmg+Ci0KLUBpbnRlcmZhY2UgTFRSZWxheUNvbnRyb2xsZXIg
KCkKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgZGlzcGF0Y2hfc291cmNlX3Qgc3RhbmRh
cmRJbnB1dERpc3BhdGNoU291cmNlOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU0Zp
bGVIYW5kbGUgKnN0YW5kYXJkT3V0cHV0OwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBO
U0ZpbGVIYW5kbGUgKnN0YW5kYXJkRXJyb3I7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcp
IE5TU3RyaW5nICppcGNJZGVudGlmaWVyOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBO
U1N0cmluZyAqYXBwQnVuZGxlSWRlbnRpZmllcjsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9u
ZykgTlNTdHJpbmcgKmFwcFBhdGg7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TVVVJ
RCAqZGV2aWNlVURJRDsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNBcnJheSAqZHVt
cFRvb2xBcmd1bWVudHM7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TU3RyaW5nICpw
cm9kdWN0RGlyOwotQHByb3BlcnR5IChzdHJvbmcpIFNpbURldmljZSAqZGV2aWNlOwotQHByb3Bl
cnR5IChzdHJvbmcpIGlkPExUUmVsYXk+IHJlbGF5OwotQHByb3BlcnR5IHBpZF90IHBpZDsKLUBw
cm9wZXJ0eSAoc3Ryb25nKSBkaXNwYXRjaF9zb3VyY2VfdCBhcHBEaXNwYXRjaFNvdXJjZTsKLUBl
bmQKLQotQGltcGxlbWVudGF0aW9uIExUUmVsYXlDb250cm9sbGVyCi0KLS0gKGlkKWluaXRXaXRo
RGV2aWNlOihTaW1EZXZpY2UgKilkZXZpY2UgcHJvZHVjdERpcjooTlNTdHJpbmcgKilwcm9kdWN0
RGlyIGFwcFBhdGg6KE5TU3RyaW5nICopYXBwUGF0aCBkZXZpY2VVRElEOihOU1VVSUQgKil1ZGlk
IGR1bXBUb29sQXJndW1lbnRzOihOU0FycmF5ICopYXJndW1lbnRzCi17Ci0gICAgaWYgKChzZWxm
ID0gW3N1cGVyIGluaXRdKSkgewotICAgICAgICBfZGV2aWNlID0gZGV2aWNlOwotICAgICAgICBf
cHJvZHVjdERpciA9IHByb2R1Y3REaXI7Ci0gICAgICAgIF9hcHBQYXRoID0gYXBwUGF0aDsKLSAg
ICAgICAgX2FwcEJ1bmRsZUlkZW50aWZpZXIgPSBbW05TQnVuZGxlIGJ1bmRsZVdpdGhQYXRoOmFw
cFBhdGhdIGJ1bmRsZUlkZW50aWZpZXJdOwotICAgICAgICBfZGV2aWNlVURJRCA9IHVkaWQ7Ci0g
ICAgICAgIF9kdW1wVG9vbEFyZ3VtZW50cyA9IGFyZ3VtZW50czsKLSAgICAgICAgX3N0YW5kYXJk
SW5wdXREaXNwYXRjaFNvdXJjZSA9IGRpc3BhdGNoX3NvdXJjZV9jcmVhdGUoRElTUEFUQ0hfU09V
UkNFX1RZUEVfUkVBRCwgU1RESU5fRklMRU5PLCAwLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgp
KTsKLSAgICAgICAgX3N0YW5kYXJkT3V0cHV0ID0gW05TRmlsZUhhbmRsZSBmaWxlSGFuZGxlV2l0
aFN0YW5kYXJkT3V0cHV0XTsKLSAgICAgICAgX3N0YW5kYXJkRXJyb3IgPSBbTlNGaWxlSGFuZGxl
IGZpbGVIYW5kbGVXaXRoU3RhbmRhcmRFcnJvcl07Ci0KLSAgICAgICAgZGlzcGF0Y2hfc291cmNl
X3NldF9ldmVudF9oYW5kbGVyKF9zdGFuZGFyZElucHV0RGlzcGF0Y2hTb3VyY2UsIF57Ci0gICAg
ICAgICAgICB1aW50OF90IGJ1ZmZlclsxMDI0XTsKLSAgICAgICAgICAgIHNzaXplX3QgbGVuID0g
cmVhZChTVERJTl9GSUxFTk8sIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOwotICAgICAgICAgICAg
aWYgKGxlbiA+IDApIHsKLSAgICAgICAgICAgICAgICBAdHJ5IHsKLSAgICAgICAgICAgICAgICAg
ICAgW1tbc2VsZiByZWxheV0gb3V0cHV0U3RyZWFtXSB3cml0ZTpidWZmZXIgbWF4TGVuZ3RoOmxl
bl07Ci0gICAgICAgICAgICAgICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICplKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhlIGR1bXAgdG9vbCBjcmFzaGVkLiBUaW1l
IHRvIGRpZS4KLSAgICAgICAgICAgICAgICAgICAgW3NlbGYgZGlkQ3Jhc2hXaXRoTWVzc2FnZTpu
aWxdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgLy8gRU9GIFJlY2VpdmVkIG9uIHRoZSByZWxheSdzIHN0YW5kYXJkIGlucHV0LgotICAg
ICAgICAgICAgICAgIFtzZWxmIGZpbmlzaF07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwot
Ci0gICAgICAgIF9yZWxheSA9IFtbTFRQaXBlUmVsYXkgYWxsb2NdIGluaXRXaXRoUHJlZml4OltA
Ii90bXAiIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpzZWxmLmlwY0lkZW50aWZpZXJd
XTsKLSAgICAgICAgW19yZWxheSBzZXRSZWxheURlbGVnYXRlOnNlbGZdOwotICAgIH0KLSAgICBy
ZXR1cm4gc2VsZjsKLX0KLQotLSAoTlNTdHJpbmcgKilpcGNJZGVudGlmaWVyCi17Ci0gICAgcmV0
dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAtJUAiLCBzZWxmLmFwcEJ1bmRsZUlk
ZW50aWZpZXIsIHNlbGYuZGV2aWNlVURJRC5VVUlEU3RyaW5nXTsKLX0KLQotLSAoTlNTdHJpbmcg
Kilwcm9jZXNzTmFtZQotewotICAgIHJldHVybiBbc2VsZi5hcHBCdW5kbGVJZGVudGlmaWVyIGNv
bXBvbmVudHNTZXBhcmF0ZWRCeVN0cmluZzpAIi4iXS5sYXN0T2JqZWN0OwotfQotCi0tICh2b2lk
KWRpZFJlY2VpdmVTdGRvdXREYXRhOihOU0RhdGEgKilkYXRhCi17Ci0gICAgQHRyeSB7Ci0gICAg
ICAgIFtbc2VsZiBzdGFuZGFyZE91dHB1dF0gd3JpdGVEYXRhOmRhdGFdOwotICAgIH0gQGNhdGNo
IChOU0V4Y2VwdGlvbiAqZXhjZXB0aW9uKSB7Ci0gICAgICAgIC8vIE5TRmlsZUhhbmRsZU9wZXJh
dGlvbkV4Y2VwdGlvbgotICAgICAgICAvLyBCcm9rZW4gcGlwZSAtIHRoZSB0ZXN0IGhhcm5lc3Mg
c3RvcHBlZCBsaXN0ZW5pbmcgdG8gdXMsCi0gICAgICAgIC8vIHByb2JhYmx5IGJlY2F1c2Ugd2Ug
dGltZWQgb3V0IG9yIGEgcnVuIHdhcyBjYW5jZWxlZC4KLSAgICAgICAgZXhpdChFWElUX0ZBSUxV
UkUpOwotICAgIH0KLX0KLQotLSAodm9pZClkaWRSZWNlaXZlU3RkZXJyRGF0YTooTlNEYXRhICop
ZGF0YQotewotICAgIEB0cnkgewotICAgICAgICBbW3NlbGYgc3RhbmRhcmRFcnJvcl0gd3JpdGVE
YXRhOmRhdGFdOwotICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAqZXhjZXB0aW9uKSB7Ci0gICAg
ICAgIC8vIE5TRmlsZUhhbmRsZU9wZXJhdGlvbkV4Y2VwdGlvbgotICAgICAgICAvLyBCcm9rZW4g
cGlwZSAtIHRoZSB0ZXN0IGhhcm5lc3Mgc3RvcHBlZCBsaXN0ZW5pbmcgdG8gdXMsCi0gICAgICAg
IC8vIHByb2JhYmx5IGJlY2F1c2Ugd2UgdGltZWQgb3V0IG9yIGEgcnVuIHdhcyBjYW5jZWxlZC4K
LSAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0KLX0KLQotLSAodm9pZClkaWREaXNj
b25uZWN0Ci17Ci0gICAgZGlzcGF0Y2hfc3VzcGVuZChbc2VsZiBzdGFuZGFyZElucHV0RGlzcGF0
Y2hTb3VyY2VdKTsKLX0KLQotLSAodm9pZClkaWRDb25uZWN0Ci17Ci0gICAgZGlzcGF0Y2hfcmVz
dW1lKFtzZWxmIHN0YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJjZV0pOwotfQotCi0tICh2b2lkKWRp
ZENyYXNoV2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIFtbc2VsZiByZWxh
eV0gZGlzY29ubmVjdF07Ci0gICAgTlNTdHJpbmcgKmNyYXNoTWVzc2FnZSA9IFtOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiXG4jQ1JBU0hFRCAtICVAIChwaWQgJWQpXG4iLCBbc2VsZiBwcm9j
ZXNzTmFtZV0sIFtzZWxmIHBpZF1dOwotCi0gICAgaWYgKG1lc3NhZ2UpCi0gICAgICAgIGNyYXNo
TWVzc2FnZSA9IFtjcmFzaE1lc3NhZ2Ugc3RyaW5nQnlBcHBlbmRpbmdGb3JtYXQ6QCIlQFxuIiwg
bWVzc2FnZV07Ci0KLSAgICBbW3NlbGYgc3RhbmRhcmRFcnJvcl0gd3JpdGVEYXRhOltjcmFzaE1l
c3NhZ2UgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddXTsKLSAgICBbW3Nl
bGYgc3RhbmRhcmRFcnJvcl0gY2xvc2VGaWxlXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRd
IGNsb3NlRmlsZV07Ci0gICAgZXhpdChFWElUX0ZBSUxVUkUpOwotfQotCi0tICh2b2lkKWluc3Rh
bGxBcHAKLXsKLSAgICBOU0RpY3Rpb25hcnkgKmluc3RhbGxPcHRpb25zID0gQHsKLSAgICAgICAg
KE5TU3RyaW5nICopa0NGQnVuZGxlSWRlbnRpZmllcktleTogc2VsZi5hcHBCdW5kbGVJZGVudGlm
aWVyLAotICAgIH07Ci0KLSAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKLSAgICBCT09MIGluc3Rh
bGxlZCA9IFtzZWxmLmRldmljZSBpbnN0YWxsQXBwbGljYXRpb246W05TVVJMIGZpbGVVUkxXaXRo
UGF0aDpzZWxmLmFwcFBhdGhdIHdpdGhPcHRpb25zOmluc3RhbGxPcHRpb25zIGVycm9yOiZlcnJv
cl07Ci0gICAgaWYgKCFpbnN0YWxsZWQpIHsKLSAgICAgICAgTlNMb2coQCJDb3VsZG4ndCBpbnN0
YWxsICVAOiAlQCIsIHNlbGYuYXBwUGF0aCwgZXJyb3IuZGVzY3JpcHRpb24pOwotICAgICAgICBl
eGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotfQotCi0tICh2b2lkKWtpbGxBcHAKLXsKLSAgICBk
aXNwYXRjaF9zb3VyY2VfdCBkaXNwYXRjaCA9IFtzZWxmIGFwcERpc3BhdGNoU291cmNlXTsKLQot
ICAgIGlmIChkaXNwYXRjaCkKLSAgICAgICAgZGlzcGF0Y2hfc291cmNlX2NhbmNlbChkaXNwYXRj
aCk7Ci0KLSAgICBpZiAoW3NlbGYgcGlkXSA+IDEpIHsKLSAgICAgICAga2lsbChzZWxmLnBpZCwg
U0lHS0lMTCk7Ci0gICAgICAgIFtzZWxmIHNldFBpZDotMV07Ci0gICAgfQotICAgIFtzZWxmIHNl
dEFwcERpc3BhdGNoU291cmNlOm5pbF07Ci19Ci0KLS0gKE5TRGljdGlvbmFyeSAqKV9lbnZpcm9u
bWVudFZhcmlhYmxlcwotewotICAgIHN0YXRpYyBOU0RpY3Rpb25hcnkgKmVudmlyb25tZW50VmFy
aWFibGVzOwotICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZTsKLQotICAgIGRpc3BhdGNo
X29uY2UoJm9uY2UsIF57Ci0gICAgICAgIE5TU3RyaW5nICpwcm9kdWN0RGlyZWN0b3J5ID0gW3Nl
bGYgcHJvZHVjdERpcl07Ci0KLSAgICAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqZGljdGlvbmFy
eSA9IFtAewotICAgICAgICAgICAgQCJJUENfSURFTlRJRklFUiI6IHNlbGYuaXBjSWRlbnRpZmll
ciwKLSAgICAgICAgICAgIEAiRFlMRF9GUkFNRVdPUktfUEFUSCI6IHByb2R1Y3REaXJlY3Rvcnks
Ci0gICAgICAgICAgICBAIl9fWFBDX0RZTERfRlJBTUVXT1JLX1BBVEgiOiBwcm9kdWN0RGlyZWN0
b3J5LAotICAgICAgICAgICAgQCJEWUxEX0xJQlJBUllfUEFUSCI6IHByb2R1Y3REaXJlY3Rvcnks
Ci0gICAgICAgICAgICBAIl9fWFBDX0RZTERfTElCUkFSWV9QQVRIIjogcHJvZHVjdERpcmVjdG9y
eSwKLSAgICAgICAgfSBtdXRhYmxlQ29weV07Ci0KLSAgICAgICAgZm9yIChOU1N0cmluZyAqa2V5
TmFtZSBpbiBAW0AiRFlMRF9JTlNFUlRfTElCUkFSSUVTIiwgQCJNYWxsb2NTdGFja0xvZ2dpbmci
LCBAIkxPQ0FMX1JFU09VUkNFX1JPT1QiLCBAIkRVTVBSRU5ERVJUUkVFX1RFTVAiXSkgewotICAg
ICAgICAgICAgY29uc3QgY2hhciogdmFsdWUgPSBnZXRlbnYoW2tleU5hbWUgVVRGOFN0cmluZ10p
OwotICAgICAgICAgICAgaWYgKHZhbHVlICYmIHN0cmxlbih2YWx1ZSkpIHsKLSAgICAgICAgICAg
ICAgICBOU1N0cmluZyAqbnNWYWx1ZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzp2
YWx1ZV07Ci0gICAgICAgICAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0Om5zVmFsdWUgZm9y
S2V5OmtleU5hbWVdOwotICAgICAgICAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpuc1Zh
bHVlIGZvcktleTpbQCJfX1hQQ18iIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOmtleU5hbWVdXTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoY2hhcioqIGVudnAgPSAq
X05TR2V0RW52aXJvbigpOyAqZW52cDsgZW52cCsrKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFy
KiBlbnYgPSAqZW52cDsKLSAgICAgICAgICAgIGlmICghc3RybmNtcCgiSlNDXyIsIGVudiwgNCkg
fHwgIXN0cm5jbXAoIl9fWFBDX0pTQ18iLCBlbnYsIDEwKSkgewotICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIGVxdWFsID0gc3RyY2hyKGVudiwgJz0nKTsKLSAgICAgICAgICAgICAgICBpZiAo
IWVxdWFsKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5TTG9nKEAiTWlzc2luZyAnPScgaW4gZW52
IHZhciAnJXMnIiwgZW52KTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhLZXlM
ZW5ndGggPSAyNTY7Ci0gICAgICAgICAgICAgICAgc2l6ZV90IGtleUxlbmd0aCA9IGVxdWFsIC0g
ZW52OwotICAgICAgICAgICAgICAgIGlmIChrZXlMZW5ndGggPj0gbWF4S2V5TGVuZ3RoKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIE5TTG9nKEAiRW52IHZhciAnJXMnIGlzIHRvbyBsb25nIiwgZW52
KTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgY2hhciBrZXlbbWF4S2V5TGVuZ3RoXTsKLSAgICAgICAgICAgICAgICBz
dHJuY3B5KGtleSwgZW52LCBrZXlMZW5ndGgpOwotICAgICAgICAgICAgICAgIGtleVtrZXlMZW5n
dGhdID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB2YWx1ZSA9IGVxdWFsICsg
MTsKLQotICAgICAgICAgICAgICAgIE5TU3RyaW5nICpuc0tleSA9IFtOU1N0cmluZyBzdHJpbmdX
aXRoVVRGOFN0cmluZzprZXldOwotICAgICAgICAgICAgICAgIE5TU3RyaW5nICpuc1ZhbHVlID0g
W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnZhbHVlXTsKLSAgICAgICAgICAgICAgICBb
ZGljdGlvbmFyeSBzZXRPYmplY3Q6bnNWYWx1ZSBmb3JLZXk6bnNLZXldOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXMgPSBbZGljdGlvbmFy
eSBjb3B5XTsKLSAgICB9KTsKLQotICAgIHJldHVybiBlbnZpcm9ubWVudFZhcmlhYmxlczsKLX0K
LQotLSAodm9pZClsYXVuY2hBcHAKLXsKLSAgICBOU0RpY3Rpb25hcnkgKmxhdW5jaE9wdGlvbnMg
PSBAewotICAgICAgICBrU2ltRGV2aWNlTGF1bmNoQXBwbGljYXRpb25FbnZpcm9ubWVudDogW3Nl
bGYgX2Vudmlyb25tZW50VmFyaWFibGVzXSwKLSAgICAgICAga1NpbURldmljZUxhdW5jaEFwcGxp
Y2F0aW9uQXJndW1lbnRzOiBbc2VsZiBkdW1wVG9vbEFyZ3VtZW50c10sCi0gICAgfTsKLQotICAg
IE5TRXJyb3IgKmVycm9yOwotICAgIHBpZF90IHBpZCA9IFtzZWxmLmRldmljZSBsYXVuY2hBcHBs
aWNhdGlvbldpdGhJRDpzZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIgb3B0aW9uczpsYXVuY2hPcHRp
b25zIGVycm9yOiZlcnJvcl07Ci0KLSAgICBpZiAocGlkIDwgMCkgewotICAgICAgICBOU0xvZyhA
IkNvdWxkbid0IGxhdW5jaCAlQDogJUAiLCBzZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIsIGVycm9y
LmRlc2NyaXB0aW9uKTsKLSAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0KLQotICAg
IFtzZWxmIHNldFBpZDpwaWRdOwotCi0gICAgZGlzcGF0Y2hfcXVldWVfdCBxdWV1ZSA9IGRpc3Bh
dGNoX2dldF9tYWluX3F1ZXVlKCk7Ci0gICAgZGlzcGF0Y2hfc291cmNlX3Qgc2ltdWxhdG9yQXBw
RXhpdERpc3BhdGNoU291cmNlID0gZGlzcGF0Y2hfc291cmNlX2NyZWF0ZShESVNQQVRDSF9TT1VS
Q0VfVFlQRV9QUk9DLCBbc2VsZiBwaWRdLCBESVNQQVRDSF9QUk9DX0VYSVQsIHF1ZXVlKTsKLSAg
ICBbc2VsZiBzZXRBcHBEaXNwYXRjaFNvdXJjZTpzaW11bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3Vy
Y2VdOwotICAgIGRpc3BhdGNoX3NvdXJjZV9zZXRfZXZlbnRfaGFuZGxlcihzaW11bGF0b3JBcHBF
eGl0RGlzcGF0Y2hTb3VyY2UsIF57Ci0gICAgICAgIGRpc3BhdGNoX3NvdXJjZV9jYW5jZWwoc2lt
dWxhdG9yQXBwRXhpdERpc3BhdGNoU291cmNlKTsKLSAgICAgICAgW3NlbGYgZGlkQ3Jhc2hXaXRo
TWVzc2FnZTpuaWxdOwotICAgIH0pOwotICAgIGRpc3BhdGNoX3Jlc3VtZShzaW11bGF0b3JBcHBF
eGl0RGlzcGF0Y2hTb3VyY2UpOwotfQotCi0tICh2b2lkKXN0YXJ0Ci17Ci0gICAgW3NlbGYgaW5z
dGFsbEFwcF07Ci0gICAgW1tzZWxmIHJlbGF5XSBzZXR1cF07Ci0gICAgW3NlbGYgbGF1bmNoQXBw
XTsKLSAgICBbW3NlbGYgcmVsYXldIGNvbm5lY3RdOwotfQotCi0tICh2b2lkKWZpbmlzaAotewot
ICAgIFtbc2VsZiByZWxheV0gZGlzY29ubmVjdF07Ci0gICAgW3NlbGYga2lsbEFwcF07Ci0gICAg
ZXhpdChFWElUX1NVQ0NFU1MpOwotfQotCi1AZW5kCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVs
YXkvTGF5b3V0VGVzdFJlbGF5L21haW4ubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0
UmVsYXkvTGF5b3V0VGVzdFJlbGF5L21haW4ubQkocmV2aXNpb24gMjEwNzM1KQorKysgVG9vbHMv
TGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9tYWluLm0JKG5vbmV4aXN0ZW50KQpAQCAt
MSwxMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgIkNvcmVTaW11bGF0b3JT
UEkuaCIKLSNpbXBvcnQgIkxUUmVsYXlDb250cm9sbGVyLmgiCi0jaW1wb3J0IDxGb3VuZGF0aW9u
L0ZvdW5kYXRpb24uaD4KLQotc3RhdGljIExUUmVsYXlDb250cm9sbGVyICpyZWxheUNvbnRyb2xs
ZXI7Ci0KLXZvaWQgdXNhZ2UoKQotewotICAgIE5TU3RyaW5nICpoZWxwVGV4dCA9IEAiTGF5b3V0
VGVzdFJlbGF5OiBydW4gYSBkdW1wIHRvb2wgaW4gdGhlIHNpbXVsYXRvci4gTm90IGZvciBkaXJl
Y3QgY29uc3VtcHRpb24uXG4iCi0gICAgICAgICJVc2FnZTogTGF5b3V0VGVzdFJlbGF5IFstaF0g
W29wdGlvbnNdIC0tIFtkdW1wIHRvb2wgYXJndW1lbnRzXVxuIgotICAgICAgICAiUmVxdWlyZWQg
b3B0aW9uczpcbiIKLSAgICAgICAgIiAgICAtdWRpZCA8aWRlbnRpZmllcj4gICAgICAgU2ltdWxh
dG9yIGRldmljZSBpZGVudGlmaWVyXG4iCi0gICAgICAgICIgICAgLWFwcCA8YXBwX3BhdGg+ICAg
ICAgICAgIFBhdGggdG8gdGhlIGJ1aWx0IGlPUyAuYXBwIGJ1bmRsZSBkaXJlY3RvcnkuXG4iCi0g
ICAgICAgICIgICAgLXByb2R1Y3REaXIgPGRpcj4gICAgICAgIC9wYXRoL3RvL1dlYktpdEJ1aWxk
L3tjb25maWd1cmF0aW9ufS17c2hvcnQgcGxhdGZvcm19LlxuIjsKLQotICAgIGZwcmludGYoc3Rk
ZXJyLCAiJXNcbiIsIFtoZWxwVGV4dCBVVEY4U3RyaW5nXSk7Ci19Ci0KLU5TU3RyaW5nICpnZXRS
ZXF1aXJlZFN0cmluZ0FyZ3VtZW50KE5TU3RyaW5nICpwYXJhbWV0ZXIpCi17Ci0gICAgTlNVc2Vy
RGVmYXVsdHMgKmRlZmF1bHRzID0gW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRz
XTsKLSAgICBOU1N0cmluZyAqYXJndW1lbnQgPSBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OnBhcmFt
ZXRlcl07Ci0KLSAgICBpZiAoIWFyZ3VtZW50KSB7Ci0gICAgICAgIE5TTG9nKEAiLSVAIGlzIHJl
cXVpcmVkLiIsIHBhcmFtZXRlcik7Ci0gICAgICAgIHVzYWdlKCk7Ci0gICAgICAgIGV4aXQoRVhJ
VF9GQUlMVVJFKTsKLSAgICB9Ci0gICAgcmV0dXJuIGFyZ3VtZW50OwotfQotCi1OU0FycmF5ICpn
ZXREdW1wVG9vbEFyZ3VtZW50cygpCi17Ci0gICAgTlNNdXRhYmxlQXJyYXkgKmR1bXBUb29sQXJn
dW1lbnRzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07Ci0gICAgTlNBcnJheSAqcHJv
Y2Vzc0FyZ3MgPSBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIGFyZ3VtZW50c107Ci0gICAg
Qk9PTCBhcHBlbmRpbmcgPSBOTzsKLSAgICBmb3IgKE5TU3RyaW5nICphcmcgaW4gcHJvY2Vzc0Fy
Z3MpIHsKLSAgICAgICAgaWYgKFthcmcgaXNFcXVhbFRvU3RyaW5nOkAiLS0iXSkgewotICAgICAg
ICAgICAgYXBwZW5kaW5nID0gWUVTOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKGFwcGVuZGluZykKLSAgICAgICAgICAgIFtkdW1wVG9vbEFyZ3VtZW50cyBh
ZGRPYmplY3Q6YXJnXTsKLSAgICB9Ci0gICAgcmV0dXJuIGR1bXBUb29sQXJndW1lbnRzOwotfQot
Ci12b2lkIGZpbmlzaCgpCi17Ci0gICAgW3JlbGF5Q29udHJvbGxlciBmaW5pc2hdOwotfQotCi12
b2lkIHJlY2VpdmVkU2lnbmFsKGludCBzaWduYWwpCi17Ci0gICAgZXhpdChFWElUX1NVQ0NFU1Mp
OwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqIGFyZ3ZbXSkKLXsKLSAgICBA
YXV0b3JlbGVhc2Vwb29sIHsKLSAgICAgICAgTlNBcnJheSAqaGVscEFyZ3VtZW50cyA9IEBbQCIt
aCIsIEAiLS1oZWxwIl07Ci0gICAgICAgIGZvciAoTlNTdHJpbmcgKmhlbHBBcmd1bWVudCBpbiBo
ZWxwQXJndW1lbnRzKSB7Ci0gICAgICAgICAgICBpZiAoW1tbTlNQcm9jZXNzSW5mbyBwcm9jZXNz
SW5mb10gYXJndW1lbnRzXSBpbmRleE9mT2JqZWN0OmhlbHBBcmd1bWVudF0gIT0gTlNOb3RGb3Vu
ZCkgewotICAgICAgICAgICAgICAgIHVzYWdlKCk7Ci0gICAgICAgICAgICAgICAgZXhpdChFWElU
X0ZBSUxVUkUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSNpZiBVU0VfU0lNX1NFUlZJ
Q0VfQ09OVEVYVAotICAgICAgICBOU1N0cmluZyAqZGV2ZWxvcGVyRGlyZWN0b3J5ID0gZ2V0UmVx
dWlyZWRTdHJpbmdBcmd1bWVudChAImRldmVsb3BlckRpciIpOwotI2VuZGlmCi0gICAgICAgIE5T
VVVJRCAqdWRpZCA9IFtbTlNVVUlEIGFsbG9jXSBpbml0V2l0aFVVSURTdHJpbmc6Z2V0UmVxdWly
ZWRTdHJpbmdBcmd1bWVudChAInVkaWQiKV07Ci0gICAgICAgIE5TU3RyaW5nICphcHBQYXRoID0g
Z2V0UmVxdWlyZWRTdHJpbmdBcmd1bWVudChAImFwcCIpOwotICAgICAgICBOU1N0cmluZyAqcHJv
ZHVjdERpcmVjdG9yeSA9IGdldFJlcXVpcmVkU3RyaW5nQXJndW1lbnQoQCJwcm9kdWN0RGlyIik7
Ci0gICAgICAgIE5TQXJyYXkgKmR1bXBUb29sQXJndW1lbnRzID0gZ2V0RHVtcFRvb2xBcmd1bWVu
dHMoKTsKLQotI2lmIFVTRV9TSU1fU0VSVklDRV9DT05URVhUCi0gICAgICAgIE5TRXJyb3IgKmVy
cm9yOwotICAgICAgICBTaW1TZXJ2aWNlQ29udGV4dCAqc2VydmljZUNvbnRleHQgPSBbU2ltU2Vy
dmljZUNvbnRleHQgc2hhcmVkU2VydmljZUNvbnRleHRGb3JEZXZlbG9wZXJEaXI6ZGV2ZWxvcGVy
RGlyZWN0b3J5IGVycm9yOiZlcnJvcl07Ci0gICAgICAgIGlmICghc2VydmljZUNvbnRleHQpIHsK
LSAgICAgICAgICAgIE5TTG9nKEAiRGV2aWNlIGNvbnRleHQgY291bGRuJ3QgYmUgZm91bmQ6ICVA
IiwgZXJyb3IpOwotICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0g
ICAgICAgIFNpbURldmljZVNldCAqZGV2aWNlU2V0ID0gW3NlcnZpY2VDb250ZXh0IGRlZmF1bHRE
ZXZpY2VTZXRXaXRoRXJyb3I6bmlsXTsKLSAgICAgICAgaWYgKCFkZXZpY2VTZXQpIHsKLSAgICAg
ICAgICAgIE5TTG9nKEAiRGVmYXVsdCBkZXZpY2Ugc2V0IGNvdWxkbid0IGJlIGZvdW5kOiAlQCIs
IGVycm9yKTsKLSAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAgICAgfQotICAg
ICAgICBTaW1EZXZpY2UgKmRldmljZSA9IFtkZXZpY2VTZXQuZGV2aWNlc0J5VURJRCBvYmplY3RG
b3JLZXk6dWRpZF07Ci0jZWxzZQotICAgICAgICBTaW1EZXZpY2UgKmRldmljZSA9IFtTaW1EZXZp
Y2VTZXQuZGVmYXVsdFNldC5kZXZpY2VzQnlVRElEIG9iamVjdEZvcktleTp1ZGlkXTsKLSNlbmRp
ZgotICAgICAgICBpZiAoIWRldmljZSkgewotICAgICAgICAgICAgTlNMb2coQCJEZXZpY2UgJUAg
Y291bGRuJ3QgYmUgZm91bmQiLCB1ZGlkKTsKLSAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJF
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHJlbGF5Q29udHJvbGxlciA9IFtbTFRSZWxheUNvbnRy
b2xsZXIgYWxsb2NdIGluaXRXaXRoRGV2aWNlOmRldmljZSBwcm9kdWN0RGlyOnByb2R1Y3REaXJl
Y3RvcnkgYXBwUGF0aDphcHBQYXRoIGRldmljZVVESUQ6dWRpZCBkdW1wVG9vbEFyZ3VtZW50czpk
dW1wVG9vbEFyZ3VtZW50c107Ci0gICAgICAgIFtyZWxheUNvbnRyb2xsZXIgc3RhcnRdOwotCi0g
ICAgICAgIGF0ZXhpdChmaW5pc2gpOwotICAgICAgICBzaWduYWwoU0lHSU5ULCByZWNlaXZlZFNp
Z25hbCk7Ci0gICAgICAgIHNpZ25hbChTSUdURVJNLCByZWNlaXZlZFNpZ25hbCk7Ci0KLSAgICAg
ICAgW1tOU1J1bkxvb3AgbWFpblJ1bkxvb3BdIHJ1bl07Ci0gICAgfQotICAgIHJldHVybiAwOwot
fQpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlv
dXRUZXN0UmVsYXkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjEwNzM1KQor
KysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShub25leGlzdGVudCkKQEAgLTEsMjAyICswLDAgQEAKLS8vICEkKlVURjgqJCEK
LXsKLQlhcmNoaXZlVmVyc2lvbiA9IDE7Ci0JY2xhc3NlcyA9IHsKLQl9OwotCW9iamVjdFZlcnNp
b24gPSA0NjsKLQlvYmplY3RzID0gewotCi0vKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAq
LwotCQkyRThEM0VGODE5ODgxRDQzMDA0RjZDQzIgLyogbWFpbi5tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU4RDNFRjcxOTg4MUQ0MzAwNEY2Q0MyIC8q
IG1haW4ubSAqLzsgfTsKLQkJMkU4RDNGMDIxOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5
Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRThEM0Yw
MTE5ODgxRkQwMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkubSAqLzsgfTsKLQkJMkU4RDNGMDYxOTg4
MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRThEM0YwNTE5ODgyNDA2MDA0RjZDQzIgLyogTFRS
ZWxheUNvbnRyb2xsZXIubSAqLzsgfTsKLS8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwot
Ci0vKiBCZWdpbiBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjIx
OTg4MUQ0MzAwNEY2Q0MyIC8qIENvcHlGaWxlcyAqLyA9IHsKLQkJCWlzYSA9IFBCWENvcHlGaWxl
c0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZHN0UGF0
aCA9IC91c3Ivc2hhcmUvbWFuL21hbjEvOwotCQkJZHN0U3ViZm9sZGVyU3BlYyA9IDA7Ci0JCQlm
aWxlcyA9ICgKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MTsKLQkJfTsKLS8qIEVuZCBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQotLyog
QmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCi0JCTJFOEQzRUY0MTk4ODFENDMwMDRG
NkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbklu
ZGV4ID0gMDsgcGF0aCA9IExheW91dFRlc3RSZWxheTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RV
Q1RTX0RJUjsgfTsKLQkJMkU4RDNFRjcxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5v
YmpjOyBwYXRoID0gbWFpbi5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0VG
RTE5ODgxRTEzMDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgbmFtZSA9
IERlYnVnUmVsZWFzZS54Y2NvbmZpZzsgcGF0aCA9IENvbmZpZ3VyYXRpb25zL0RlYnVnUmVsZWFz
ZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNFRkYxOTg4MUUy
NTAwNEY2Q0MyIC8qIEJhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBuYW1lID0gQmFzZS54Y2NvbmZpZzsg
cGF0aCA9IENvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTJFOEQzRjAwMTk4ODFGMjkwMDRGNkNDMiAvKiBMVFJlbGF5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IExUUmVsYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDEx
OTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
b2JqYzsgcGF0aCA9IExUUGlwZVJlbGF5Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTJFOEQzRjAzMTk4ODFGRTIwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBMVFBpcGVSZWxheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0YwNDE5
ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTFRSZWxheUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMkU4RDNGMDUxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLm0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IExUUmVsYXlDb250cm9sbGVyLm07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNFMUZCQzE1MUIyOTBFNzkwMDAxMzZGNSAv
KiBDb3JlU2ltdWxhdG9yU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENv
cmVTaW11bGF0b3JTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLS8qIEVuZCBQQlhG
aWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhh
c2Ugc2VjdGlvbiAqLwotCQkyRThEM0VGMTE5ODgxRDQzMDA0RjZDQzIgLyogRnJhbWV3b3JrcyAq
LyA9IHsKLQkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25N
YXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9OwotLyogRW5kIFBCWEZyYW1ld29ya3NCdWls
ZFBoYXNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYR3JvdXAgc2VjdGlvbiAqLwotCQkyRThE
M0VFQjE5ODgxRDQzMDA0RjZDQzIgPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVu
ID0gKAotCQkJCTJFOEQzRUZGMTk4ODFFMjUwMDRGNkNDMiAvKiBCYXNlLnhjY29uZmlnICovLAot
CQkJCTJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8s
Ci0JCQkJMkU4RDNFRjYxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLywKLQkJ
CQkyRThEM0VGNTE5ODgxRDQzMDA0RjZDQzIgLyogUHJvZHVjdHMgKi8sCi0JCQkpOwotCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJMkU4RDNFRjUxOTg4MUQ0MzAwNEY2Q0MyIC8q
IFByb2R1Y3RzICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJ
CQkyRThEM0VGNDE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovLAotCQkJKTsK
LQkJCW5hbWUgPSBQcm9kdWN0czsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0J
CTJFOEQzRUY2MTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8gPSB7Ci0JCQlp
c2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTJFOEQzRUY3MTk4ODFENDMwMDRG
NkNDMiAvKiBtYWluLm0gKi8sCi0JCQkJQ0UxRkJDMTUxQjI5MEU3OTAwMDEzNkY1IC8qIENvcmVT
aW11bGF0b3JTUEkuaCAqLywKLQkJCQkyRThEM0YwMDE5ODgxRjI5MDA0RjZDQzIgLyogTFRSZWxh
eS5oICovLAotCQkJCTJFOEQzRjAxMTk4ODFGRDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5tICov
LAotCQkJCTJFOEQzRjAzMTk4ODFGRTIwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5oICovLAotCQkJ
CTJFOEQzRjA0MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5oICovLAotCQkJ
CTJFOEQzRjA1MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5tICovLAotCQkJ
KTsKLQkJCXBhdGggPSBMYXlvdXRUZXN0UmVsYXk7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwotCQl9OwotLyogRW5kIFBCWEdyb3VwIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYTmF0aXZl
VGFyZ2V0IHNlY3Rpb24gKi8KLQkJMkU4RDNFRjMxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRl
c3RSZWxheSAqLyA9IHsKLQkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKLQkJCWJ1aWxkQ29uZmln
dXJhdGlvbkxpc3QgPSAyRThEM0VGQjE5ODgxRDQzMDA0RjZDQzIgLyogQnVpbGQgY29uZmlndXJh
dGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIkxheW91dFRlc3RSZWxheSIgKi87Ci0JCQli
dWlsZFBoYXNlcyA9ICgKLQkJCQkyRThEM0VGMDE5ODgxRDQzMDA0RjZDQzIgLyogU291cmNlcyAq
LywKLQkJCQkyRThEM0VGMTE5ODgxRDQzMDA0RjZDQzIgLyogRnJhbWV3b3JrcyAqLywKLQkJCQky
RThEM0VGMjE5ODgxRDQzMDA0RjZDQzIgLyogQ29weUZpbGVzICovLAotCQkJKTsKLQkJCWJ1aWxk
UnVsZXMgPSAoCi0JCQkpOwotCQkJZGVwZW5kZW5jaWVzID0gKAotCQkJKTsKLQkJCW5hbWUgPSBM
YXlvdXRUZXN0UmVsYXk7Ci0JCQlwcm9kdWN0TmFtZSA9IExheW91dFRlc3RSZWxheTsKLQkJCXBy
b2R1Y3RSZWZlcmVuY2UgPSAyRThEM0VGNDE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJl
bGF5ICovOwotCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS50b29sIjsK
LQkJfTsKLS8qIEVuZCBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhQ
cm9qZWN0IHNlY3Rpb24gKi8KLQkJMkU4RDNFRUMxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2plY3Qg
b2JqZWN0ICovID0gewotCQkJaXNhID0gUEJYUHJvamVjdDsKLQkJCWF0dHJpYnV0ZXMgPSB7Ci0J
CQkJTGFzdFVwZ3JhZGVDaGVjayA9IDA2MDA7Ci0JCQkJT1JHQU5JWkFUSU9OTkFNRSA9ICJBcHBs
ZSwgSW5jLiI7Ci0JCQkJVGFyZ2V0QXR0cmlidXRlcyA9IHsKLQkJCQkJMkU4RDNFRjMxOTg4MUQ0
MzAwNEY2Q0MyID0gewotCQkJCQkJQ3JlYXRlZE9uVG9vbHNWZXJzaW9uID0gNi4wOwotCQkJCQl9
OwotCQkJCX07Ci0JCQl9OwotCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDJFOEQzRUVGMTk4
ODFENDMwMDRGNkNDMiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3Qg
IkxheW91dFRlc3RSZWxheSIgKi87Ci0JCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAz
LjIiOwotCQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBFbmdsaXNoOwotCQkJaGFzU2Nhbm5lZEZvckVu
Y29kaW5ncyA9IDA7Ci0JCQlrbm93blJlZ2lvbnMgPSAoCi0JCQkJZW4sCi0JCQkpOwotCQkJbWFp
bkdyb3VwID0gMkU4RDNFRUIxOTg4MUQ0MzAwNEY2Q0MyOwotCQkJcHJvZHVjdFJlZkdyb3VwID0g
MkU4RDNFRjUxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2R1Y3RzICovOwotCQkJcHJvamVjdERpclBh
dGggPSAiIjsKLQkJCXByb2plY3RSb290ID0gIiI7Ci0JCQl0YXJnZXRzID0gKAotCQkJCTJFOEQz
RUYzMTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8sCi0JCQkpOwotCQl9Owot
LyogRW5kIFBCWFByb2plY3Qgc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQ
aGFzZSBzZWN0aW9uICovCi0JCTJFOEQzRUYwMTk4ODFENDMwMDRGNkNDMiAvKiBTb3VyY2VzICov
ID0gewotCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sg
PSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkJMkU4RDNGMDYxOTg4MjQwNjAwNEY2Q0My
IC8qIExUUmVsYXlDb250cm9sbGVyLm0gaW4gU291cmNlcyAqLywKLQkJCQkyRThEM0VGODE5ODgx
RDQzMDA0RjZDQzIgLyogbWFpbi5tIGluIFNvdXJjZXMgKi8sCi0JCQkJMkU4RDNGMDIxOTg4MUZE
MDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lm0gaW4gU291cmNlcyAqLywKLQkJCSk7Ci0JCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKLS8qIEVuZCBQQlhTb3Vy
Y2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFhDQnVpbGRDb25maWd1cmF0aW9u
IHNlY3Rpb24gKi8KLQkJMkU4RDNFRjkxOTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICovID0gewot
CQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJhdGlvblJlZmVy
ZW5jZSA9IDJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcg
Ki87Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJfTsKLQkJCW5hbWUgPSBEZWJ1ZzsKLQkJfTsK
LQkJMkU4RDNFRkExOTg4MUQ0MzAwNEY2Q0MyIC8qIFJlbGVhc2UgKi8gPSB7Ci0JCQlpc2EgPSBY
Q0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gMkU4
RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLzsKLQkJCWJ1
aWxkU2V0dGluZ3MgPSB7Ci0JCQl9OwotCQkJbmFtZSA9IFJlbGVhc2U7Ci0JCX07Ci0JCTJFOEQz
RUZDMTk4ODFENDMwMDRGNkNDMiAvKiBEZWJ1ZyAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25m
aWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAyRThEM0VGRTE5ODgx
RTEzMDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5n
cyA9IHsKLQkJCQlQUk9EVUNUX05BTUUgPSAiJChUQVJHRVRfTkFNRSkiOwotCQkJfTsKLQkJCW5h
bWUgPSBEZWJ1ZzsKLQkJfTsKLQkJMkU4RDNFRkQxOTg4MUQ0MzAwNEY2Q0MyIC8qIFJlbGVhc2Ug
Ki8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0
aW9uUmVmZXJlbmNlID0gMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54
Y2NvbmZpZyAqLzsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJUFJPRFVDVF9OQU1FID0gIiQo
VEFSR0VUX05BTUUpIjsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLS8qIEVuZCBY
Q0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFhDQ29uZmlndXJhdGlv
bkxpc3Qgc2VjdGlvbiAqLwotCQkyRThEM0VFRjE5ODgxRDQzMDA0RjZDQzIgLyogQnVpbGQgY29u
ZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJMYXlvdXRUZXN0UmVsYXkiICovID0gewot
CQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAo
Ci0JCQkJMkU4RDNFRjkxOTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICovLAotCQkJCTJFOEQzRUZB
MTk4ODFENDMwMDRGNkNDMiAvKiBSZWxlYXNlICovLAotCQkJKTsKLQkJCWRlZmF1bHRDb25maWd1
cmF0aW9uSXNWaXNpYmxlID0gMDsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJlbGVh
c2U7Ci0JCX07Ci0JCTJFOEQzRUZCMTk4ODFENDMwMDRGNkNDMiAvKiBCdWlsZCBjb25maWd1cmF0
aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiTGF5b3V0VGVzdFJlbGF5IiAqLyA9IHsKLQkJ
CWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAot
CQkJCTJFOEQzRUZDMTk4ODFENDMwMDRGNkNDMiAvKiBEZWJ1ZyAqLywKLQkJCQkyRThEM0VGRDE5
ODgxRDQzMDA0RjZDQzIgLyogUmVsZWFzZSAqLywKLQkJCSk7Ci0JCQlkZWZhdWx0Q29uZmlndXJh
dGlvbklzVmlzaWJsZSA9IDA7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNl
OwotCQl9OwotLyogRW5kIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLwotCX07Ci0Jcm9v
dE9iamVjdCA9IDJFOEQzRUVDMTk4ODFENDMwMDRGNkNDMiAvKiBQcm9qZWN0IG9iamVjdCAqLzsK
LX0KSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNv
ZGVwcm9qCShyZXZpc2lvbiAyMTA3MzUpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0
VGVzdFJlbGF5Lnhjb2RlcHJvagkobm9uZXhpc3RlbnQpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBU
b29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5Lnhjb2RlcHJvagpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkRlbGV0ZWQ6IHN2bjppZ25vcmUKIyMgLTEsMiArMCwwICMjCi1wcm9qZWN0Lnhjd29ya3NwYWNl
Ci14Y3VzZXJkYXRhCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTWFrZWZpbGUKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L01ha2VmaWxlCShyZXZpc2lvbiAyMTA3MzUp
CisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTWFrZWZpbGUJKG5vbmV4aXN0ZW50KQpAQCAtMSw2
ICswLDAgQEAKLVNDUklQVFNfUEFUSCA9IC4uL1NjcmlwdHMKLQotT1ZFUlJJREVfQVJDSFMgPSBk
ZWZhdWx0Ci1PVkVSUklERV9TREtST09UID0gZGVmYXVsdAotCi1pbmNsdWRlIC4uLy4uL01ha2Vm
aWxlLnNoYXJlZApJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0Jh
c2UueGNjb25maWcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3Vy
YXRpb25zL0Jhc2UueGNjb25maWcJKHJldmlzaW9uIDIxMDczNSkKKysrIFRvb2xzL0xheW91dFRl
c3RSZWxheS9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCShub25leGlzdGVudCkKQEAgLTEs
NjggKzAsMCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotLy8gYXJlIG1ldDoKLS8v
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0vLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
Ly8gICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLS8vIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0vLyBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLS8v
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0vLyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLS8vIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLS8vIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotLy8gUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotLy8gT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRl
ICIuLi8uLi8uLi8uLi9JbnRlcm5hbC9Db25maWd1cmF0aW9ucy9IYXZlSW50ZXJuYWxTREsueGNj
b25maWciCi0KLVVTRV9JTlRFUk5BTF9TREsgPSAkKFVTRV9JTlRFUk5BTF9TREtfJChDT05GSUdV
UkFUSU9OKSk7Ci1VU0VfSU5URVJOQUxfU0RLX1Byb2R1Y3Rpb24gPSBZRVM7Ci1VU0VfSU5URVJO
QUxfU0RLX0RlYnVnID0gJChIQVZFX0lOVEVSTkFMX1NESyk7Ci1VU0VfSU5URVJOQUxfU0RLX1Jl
bGVhc2UgPSAkKEhBVkVfSU5URVJOQUxfU0RLKTsKLQotQ0xBTkdfQ1hYX0xBTkdVQUdFX1NUQU5E
QVJEID0gZ251KysweDsKLUNMQU5HX0VOQUJMRV9PQkpDX0FSQyA9IFlFUzsKLUNMQU5HX1dBUk5f
Q1hYMFhfRVhURU5TSU9OUyA9IE5POwotSEVBREVSX1NFQVJDSF9QQVRIUyA9ICQoQlVJTFRfUFJP
RFVDVFNfRElSKS91c3IvbG9jYWwvaW5jbHVkZSAkKFdFQkNPUkVfUFJJVkFURV9IRUFERVJTX0RJ
UikvRm9yd2FyZGluZ0hlYWRlcnMgJChTUkNST09UKS8uLi8uLi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaWN1ICQoTkVYVF9ST09UKS91c3IvbG9jYWwvaW5jbHVkZS9XZWJDb3JlVGVzdFN1cHBvcnQ7
Ci1HQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gJChERUJVR19ERUZJTkVTKSBFTkFCTEVf
REFTSEJPQVJEX1NVUFBPUlQ7Ci1ERUJVR19JTkZPUk1BVElPTl9GT1JNQVQgPSBkd2FyZi13aXRo
LWRzeW07Ci1QUkVCSU5ESU5HID0gTk8KLUdDQ19DX0xBTkdVQUdFX1NUQU5EQVJEID0gZ251OTkK
LUdDQ19FTkFCTEVfQ1BQX0VYQ0VQVElPTlMgPSBOTzsKLUdDQ19FTkFCTEVfQ1BQX1JUVEkgPSBO
TzsKLUdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFERVIgPSBZRVMKLUdDQ19UUkVBVF9XQVJOSU5H
U19BU19FUlJPUlMgPSBZRVMKLUdDQ19WRVJTSU9OID0gY29tLmFwcGxlLmNvbXBpbGVycy5sbHZt
LmNsYW5nLjFfMDsKLUdDQ19XQVJOX0FCT1VUX0RFUFJFQ0FURURfRlVOQ1RJT05TID0gTk8KLUdD
Q19XQVJOX1VOVVNFRF9GVU5DVElPTiA9IFlFUwotR0NDX1dBUk5fVU5VU0VEX1ZBUklBQkxFID0g
WUVTCi1HQ0NfV0FSTl82NF9UT18zMl9CSVRfQ09OVkVSU0lPTlthcmNoPXg4Nl82NF0gPSBOTzsK
LVdBUk5JTkdfQ0ZMQUdTID0gLVdhbGwgLVcgLVduby11bnVzZWQtcGFyYW1ldGVyIC1XdW5kZWYK
LQotREVCVUdfREVGSU5FU19kZWJ1ZyA9IDsKLURFQlVHX0RFRklORVNfbm9ybWFsID0gTkRFQlVH
OwotREVCVUdfREVGSU5FUyA9ICQoREVCVUdfREVGSU5FU18kKENVUlJFTlRfVkFSSUFOVCkpOwot
Ci1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUiA9ICQoVEFSR0VUX01BQ19PU19YX1ZFUlNJ
T05fTUFKT1IkKE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVDpzdWZmaXg6aWRlbnRpZmllcikpOwot
VEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1JfMTAgPSAxMDEwMDA7Ci1UQVJHRVRfTUFDX09T
X1hfVkVSU0lPTl9NQUpPUl8xMSA9IDEwMTEwMDsKLVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01B
Sk9SXzEyID0gMTAxMjAwOwotVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1JfMTMgPSAxMDEz
MDA7Ci0KLVNES1JPT1QgPSBtYWNvc3guaW50ZXJuYWw7Ci0KLVNVUFBPUlRFRF9QTEFURk9STVMg
PSBtYWNvc3g7Ci0KLVRPT0xDSEFJTlMgPSBkZWZhdWx0OwotCi1PVEhFUl9DRkxBR1MgPSAkKEFT
QU5fT1RIRVJfQ0ZMQUdTKTsKLU9USEVSX0NQTFVTUExVU0ZMQUdTID0gJChBU0FOX09USEVSX0NQ
TFVTUExVU0ZMQUdTKTsKLU9USEVSX0xERkxBR1MgPSAkKEFTQU5fT1RIRVJfTERGTEFHUyk7Cklu
ZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMvRGVidWdSZWxlYXNlLnhj
Y29uZmlnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9u
cy9EZWJ1Z1JlbGVhc2UueGNjb25maWcJKHJldmlzaW9uIDIxMDczNSkKKysrIFRvb2xzL0xheW91
dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25maWcJKG5vbmV4aXN0
ZW50KQpAQCAtMSw0MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0vLyBh
cmUgbWV0OgotLy8gMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0vLyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotLy8gRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS8vIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotLy8gUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLS8vIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotLy8gRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotLy8gUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0vLyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0vLyBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LQotI2luY2x1ZGUgIkJhc2UueGNjb25maWciCi0KLUFSQ0hTID0gJChBUkNIU19TVEFOREFSRF82
NF9CSVQpOwotCi1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUiA9ICQoTUFDX09TX1hfVkVS
U0lPTl9NQUpPUik7Ci0KLU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCA9ICQoTUFDT1NYX0RFUExP
WU1FTlRfVEFSR0VUXyQoVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1IpKQotTUFDT1NYX0RF
UExPWU1FTlRfVEFSR0VUXzEwMTAwMCA9IDEwLjEwOwotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VU
XzEwMTEwMCA9IDEwLjExOwotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEwMTIwMCA9IDEwLjEy
OwotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEwMTMwMCA9IDEwLjEzOwotCi1GUkFNRVdPUktf
U0VBUkNIX1BBVEhTID0gJChERVZFTE9QRVJfRElSKS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtz
OwotTERfUlVOUEFUSF9TRUFSQ0hfUEFUSFMgPSAkKERFVkVMT1BFUl9ESVIpL0xpYnJhcnkvUHJp
dmF0ZUZyYW1ld29ya3M7Ci1PVEhFUl9MREZMQUdTID0gLWZyYW1ld29yayBDb3JlU2ltdWxhdG9y
IC1mcmFtZXdvcmsgQXBwS2l0OwotCi1TREtST09UID0gJChTREtST09UX21hY29zeF8kKFVTRV9J
TlRFUk5BTF9TREspKTsKLVNES1JPT1RfbWFjb3N4XyA9IG1hY29zeDsKLVNES1JPT1RfbWFjb3N4
X1lFUyA9IG1hY29zeC5pbnRlcm5hbDsKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlv
dXRUZXN0UmVsYXkvQ29yZVNpbXVsYXRvclNQSS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91
dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvQ29yZVNpbXVsYXRvclNQSS5oCShyZXZpc2lvbiAy
MTA3MzUpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0NvcmVTaW11
bGF0b3JTUEkuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWYgX19oYXNfaW5jbHVkZSg8Q29yZVNpbXVsYXRvci9Db3JlU2ltdWxhdG9yLmg+KQot
Ci0vKiBGSVhNRTogUmVtb3ZlIHRoZSBiZWxvdyAjZGVmaW5lIG9uY2Ugd2UgcmVxdWlyZSBYY29k
ZSA3LjMgd2l0aCBpT1MgOS4zIFNESyBvciBuZXdlci4gKi8KLSNkZWZpbmUgX19jb3Jlc2ltX3Vu
YXZhaWxhYmxlX21zZyhtc2cpCi0jaW1wb3J0IDxDb3JlU2ltdWxhdG9yL0NvcmVTaW11bGF0b3Iu
aD4KLQotLyogRklYTUU6IEFsd2F5cyB1c2UgU2ltU2VydmljZUNvbnRleHQgb25jZSB3ZSByZXF1
aXJlIFhjb2RlIDcuMyB3aXRoIGlPUyA5LjMgU0RLIG9yIG5ld2VyLiAqLwotI2RlZmluZSBVU0Vf
U0lNX1NFUlZJQ0VfQ09OVEVYVCBkZWZpbmVkKENPUkVTSU1fQVBJX01BWF9BTExPV0VEKQotCi0j
ZWxzZQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2RlZmluZSBVU0Vf
U0lNX1NFUlZJQ0VfQ09OVEVYVCAxCi0KLSNkZWZpbmUga1NpbURldmljZUxhdW5jaEFwcGxpY2F0
aW9uQXJndW1lbnRzIEAiYXJndW1lbnRzIgotI2RlZmluZSBrU2ltRGV2aWNlTGF1bmNoQXBwbGlj
YXRpb25FbnZpcm9ubWVudCBAImVudmlyb25tZW50IgotCi1AaW50ZXJmYWNlIFNpbURldmljZSA6
IE5TT2JqZWN0Ci0tIChCT09MKWluc3RhbGxBcHBsaWNhdGlvbjooTlNVUkwgKilpbnN0YWxsVVJM
IHdpdGhPcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zIGVycm9yOihOU0Vycm9yICogX19h
dXRvcmVsZWFzaW5nICopZXJyb3I7Ci0tIChwaWRfdClsYXVuY2hBcHBsaWNhdGlvbldpdGhJRDoo
TlNTdHJpbmcgKilidW5kbGVJRCBvcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zIGVycm9y
OihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci1AZW5kCi0KLUBpbnRlcmZhY2Ug
U2ltRGV2aWNlU2V0IDogTlNPYmplY3QKLUBwcm9wZXJ0eSAocmVhZG9ubHksIGNvcHkpIE5TRGlj
dGlvbmFyeSAqZGV2aWNlc0J5VURJRDsKLUBlbmQKLQotQGludGVyZmFjZSBTaW1TZXJ2aWNlQ29u
dGV4dCA6IE5TT2JqZWN0Ci0rKFNpbVNlcnZpY2VDb250ZXh0ICopc2hhcmVkU2VydmljZUNvbnRl
eHRGb3JEZXZlbG9wZXJEaXI6KE5TU3RyaW5nICopZGV2ZWxvcGVyRGlyIGVycm9yOihOU0Vycm9y
ICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci0tKFNpbURldmljZVNldCAqKWRlZmF1bHREZXZp
Y2VTZXRXaXRoRXJyb3I6KE5TRXJyb3IgKiBfX2F1dG9yZWxlYXNpbmcgKillcnJvcjsKLUBlbmQK
LQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xU
UGlwZVJlbGF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRl
c3RSZWxheS9MVFBpcGVSZWxheS5oCShyZXZpc2lvbiAyMTA3MzUpCisrKyBUb29scy9MYXlvdXRU
ZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5LmgJKG5vbmV4aXN0ZW50KQpAQCAt
MSwzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBMVFBpcGVSZWxheV9oCi0jZGVmaW5l
IExUUGlwZVJlbGF5X2gKLQotI2ltcG9ydCAiTFRSZWxheS5oIgotCi1AaW50ZXJmYWNlIExUUGlw
ZVJlbGF5IDogTlNPYmplY3QgPExUUmVsYXk+Ci1AcHJvcGVydHkgKHdlYWspIGlkPExUUmVsYXlE
ZWxlZ2F0ZT4gcmVsYXlEZWxlZ2F0ZTsKLS0gKGlkKWluaXRXaXRoUHJlZml4OihOU1N0cmluZyAq
KXByZWZpeDsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5
b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVz
dFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5tCShyZXZpc2lvbiAyMTA3MzUpCisr
KyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0JKG5v
bmV4aXN0ZW50KQpAQCAtMSwxNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgIkxUUGlw
ZVJlbGF5LmgiCi0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotI2luY2x1ZGUg
PHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLUBpbnRlcmZhY2UgTFRQaXBl
UmVsYXkgKCkKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKmZpZm9QcmVm
aXg7Ci1AcHJvcGVydHkgKHN0cm9uZykgTlNPdXRwdXRTdHJlYW0gKnN0YW5kYXJkSW5wdXRQaXBl
OwotQHByb3BlcnR5IChzdHJvbmcpIE5TSW5wdXRTdHJlYW0gKnN0YW5kYXJkT3V0cHV0UGlwZTsK
LUBwcm9wZXJ0eSAoc3Ryb25nKSBOU0lucHV0U3RyZWFtICpzdGFuZGFyZEVycm9yUGlwZTsKLQot
LSAodm9pZCljcmVhdGVGSUZPczsKLS0gKHZvaWQpZGVzdHJveUZJRk9zOwotQGVuZAotCi1AaW1w
bGVtZW50YXRpb24gTFRQaXBlUmVsYXkKLQotLSAoTlNTdHJpbmcgKilpblBpcGVQYXRoCi17Ci0g
ICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9JTiJdOwot
fQotCi0tIChOU1N0cmluZyAqKW91dFBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZp
eCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9PVVQiXTsKLX0KLQotLSAoTlNTdHJpbmcgKill
cnJvclBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGlu
Z1N0cmluZzpAIl9FUlJPUiJdOwotfQotCi0tIChOU091dHB1dFN0cmVhbSAqKSBvdXRwdXRTdHJl
YW0KLXsKLSAgICByZXR1cm4gX3N0YW5kYXJkSW5wdXRQaXBlOwotfQotCi0tIChpZClpbml0V2l0
aFByZWZpeDooTlNTdHJpbmcgKilwcmVmaXgKLXsKLSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5p
dF0pKSB7Ci0gICAgICAgIF9maWZvUHJlZml4ID0gcHJlZml4OwotICAgICAgICBbc2VsZiBkZXN0
cm95RklGT3NdOwotICAgIH0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXR1cAot
ewotICAgIFtzZWxmIGRlc3Ryb3lGSUZPc107Ci0gICAgW3NlbGYgY3JlYXRlRklGT3NdOwotfQot
Ci0tICh2b2lkKXRlYXJEb3duCi17Ci0gICAgW3NlbGYgZGVzdHJveUZJRk9zXTsKLX0KLQotLSh2
b2lkKSBjb25uZWN0Ci17Ci0gICAgX3N0YW5kYXJkSW5wdXRQaXBlID0gW05TT3V0cHV0U3RyZWFt
IG91dHB1dFN0cmVhbVRvRmlsZUF0UGF0aDpbc2VsZiBpblBpcGVQYXRoXSBhcHBlbmQ6WUVTXTsK
LSAgICBfc3RhbmRhcmRPdXRwdXRQaXBlID0gW05TSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW1XaXRo
RmlsZUF0UGF0aDpbc2VsZiBvdXRQaXBlUGF0aF1dOwotICAgIF9zdGFuZGFyZEVycm9yUGlwZSA9
IFtOU0lucHV0U3RyZWFtIGlucHV0U3RyZWFtV2l0aEZpbGVBdFBhdGg6W3NlbGYgZXJyb3JQaXBl
UGF0aF1dOwotCi0gICAgW1tzZWxmIHN0YW5kYXJkSW5wdXRQaXBlXSBzZXREZWxlZ2F0ZTpzZWxm
XTsKLSAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRQaXBlXSBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAg
ICBbW3NlbGYgc3RhbmRhcmRFcnJvclBpcGVdIHNldERlbGVnYXRlOnNlbGZdOwotCi0gICAgW1tz
ZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gc2NoZWR1bGVJblJ1bkxvb3A6W05TUnVuTG9vcCBtYWlu
UnVuTG9vcF0gZm9yTW9kZTpOU0RlZmF1bHRSdW5Mb29wTW9kZV07Ci0gICAgW1tzZWxmIHN0YW5k
YXJkRXJyb3JQaXBlXSBzY2hlZHVsZUluUnVuTG9vcDpbTlNSdW5Mb29wIG1haW5SdW5Mb29wXSBm
b3JNb2RlOk5TRGVmYXVsdFJ1bkxvb3BNb2RlXTsKLQotICAgIFtbc2VsZiBzdGFuZGFyZElucHV0
UGlwZV0gb3Blbl07Ci0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gb3Blbl07Ci0gICAg
W1tzZWxmIHN0YW5kYXJkRXJyb3JQaXBlXSBvcGVuXTsKLQotICAgIFtbc2VsZiByZWxheURlbGVn
YXRlXSBkaWRDb25uZWN0XTsKLX0KLQotLSAodm9pZClkaXNjb25uZWN0Ci17Ci0gICAgW1tzZWxm
IHN0YW5kYXJkT3V0cHV0UGlwZV0gY2xvc2VdOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yUGlw
ZV0gY2xvc2VdOwotICAgIFtbc2VsZiBzdGFuZGFyZElucHV0UGlwZV0gY2xvc2VdOwotICAgIFtb
c2VsZiByZWxheURlbGVnYXRlXSBkaWREaXNjb25uZWN0XTsKLX0KLQotLSAodm9pZCljcmVhdGVG
SUZPcwotewotICAgIG1rZmlmbyhbW3NlbGYgaW5QaXBlUGF0aF0gVVRGOFN0cmluZ10sIDA2NjYp
OwotICAgIG1rZmlmbyhbW3NlbGYgb3V0UGlwZVBhdGhdIFVURjhTdHJpbmddLCAwNjY2KTsKLSAg
ICBta2ZpZm8oW1tzZWxmIGVycm9yUGlwZVBhdGhdIFVURjhTdHJpbmddLCAwNjY2KTsKLX0KLQot
LSAodm9pZClkZXN0cm95RklGT3MKLXsKLSAgICB1bmxpbmsoW1tzZWxmIGluUGlwZVBhdGhdIFVU
RjhTdHJpbmddKTsKLSAgICB1bmxpbmsoW1tzZWxmIG91dFBpcGVQYXRoXSBVVEY4U3RyaW5nXSk7
Ci0gICAgdW5saW5rKFtbc2VsZiBlcnJvclBpcGVQYXRoXSBVVEY4U3RyaW5nXSk7Ci19Ci0KLS0g
KHZvaWQpIHJlbGF5U3RyZWFtOihOU0lucHV0U3RyZWFtICopc3RyZWFtCi17Ci0gICAgdWludDhf
dCBieXRlc1sxMDI0XTsKLSAgICBOU0ludGVnZXIgYnl0ZXNSZWFkID0gW3N0cmVhbSByZWFkOmJ5
dGVzIG1heExlbmd0aDoxMDI0XTsKLSAgICBOU0RhdGEgKmRhdGEgPSBbTlNEYXRhIGRhdGFXaXRo
Qnl0ZXM6Ynl0ZXMgbGVuZ3RoOmJ5dGVzUmVhZF07Ci0KLSAgICBpZiAoc3RyZWFtID09IFtzZWxm
IHN0YW5kYXJkT3V0cHV0UGlwZV0pCi0gICAgICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRS
ZWNlaXZlU3Rkb3V0RGF0YTpkYXRhXTsKLSAgICBlbHNlCi0gICAgICAgIFtbc2VsZiByZWxheURl
bGVnYXRlXSBkaWRSZWNlaXZlU3RkZXJyRGF0YTpkYXRhXTsKLX0KLQotLSAodm9pZClzdHJlYW06
KE5TU3RyZWFtICopYVN0cmVhbSBoYW5kbGVFdmVudDooTlNTdHJlYW1FdmVudClldmVudENvZGUK
LXsKLSAgICBzd2l0Y2ggKGV2ZW50Q29kZSkgewotICAgIGNhc2UgTlNTdHJlYW1FdmVudE5vbmU6
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlNTdHJlYW1FdmVudEhhc0J5dGVzQXZhaWxhYmxl
OgotICAgICAgICBbc2VsZiByZWxheVN0cmVhbTooTlNJbnB1dFN0cmVhbSAqKWFTdHJlYW1dOwot
ICAgIGNhc2UgTlNTdHJlYW1FdmVudEhhc1NwYWNlQXZhaWxhYmxlOgotICAgICAgICBicmVhazsK
LSAgICBjYXNlIE5TU3RyZWFtRXZlbnRPcGVuQ29tcGxldGVkOgotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIE5TU3RyZWFtRXZlbnRFbmRFbmNvdW50ZXJlZDoKLSAgICAgICAgW1tzZWxmIHJlbGF5
RGVsZWdhdGVdIGRpZENyYXNoV2l0aE1lc3NhZ2U6bmlsXTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBOU1N0cmVhbUV2ZW50RXJyb3JPY2N1cnJlZDoKLSAgICAgICAgW1tzZWxmIHJlbGF5RGVs
ZWdhdGVdIGRpZENyYXNoV2l0aE1lc3NhZ2U6W1thU3RyZWFtIHN0cmVhbUVycm9yXSBkZXNjcmlw
dGlvbl1dOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLUBlbmQKSW5kZXg6IFRvb2xzL0xh
eW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheS5oCShyZXZpc2lvbiAy
MTA3MzUpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXku
aAkobm9uZXhpc3RlbnQpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIExU
UmVsYXlfaAotI2RlZmluZSBMVFJlbGF5X2gKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0
aW9uLmg+Ci0KLUBwcm90b2NvbCBMVFJlbGF5RGVsZWdhdGUgPE5TT2JqZWN0PgotLSAodm9pZClk
aWRDb25uZWN0OwotLSAodm9pZClkaWREaXNjb25uZWN0OwotLSAodm9pZClkaWRDcmFzaFdpdGhN
ZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2U7Ci0tICh2b2lkKWRpZFJlY2VpdmVTdGRvdXREYXRh
OihOU0RhdGEgKilkYXRhOwotLSAodm9pZClkaWRSZWNlaXZlU3RkZXJyRGF0YTooTlNEYXRhICop
ZGF0YTsKLUBlbmQKLQotQHByb3RvY29sIExUUmVsYXkgPE5TT2JqZWN0LCBOU1N0cmVhbURlbGVn
YXRlPgotLSAodm9pZClzZXR1cDsKLS0gKHZvaWQpdGVhckRvd247Ci0tICh2b2lkKWNvbm5lY3Q7
Ci0tICh2b2lkKWRpc2Nvbm5lY3Q7Ci1AcHJvcGVydHkgKHdlYWspIGlkPExUUmVsYXlEZWxlZ2F0
ZT4gcmVsYXlEZWxlZ2F0ZTsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNPdXRwdXRT
dHJlYW0gKm91dHB1dFN0cmVhbTsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRU
ZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxl
ci5oCShyZXZpc2lvbiAyMTA3MzUpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVz
dFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLSNpZm5kZWYgTFRSZWxheUNvbnRyb2xsZXJfaAotI2RlZmluZSBMVFJlbGF5
Q29udHJvbGxlcl9oCi0KLSNpbXBvcnQgIkxUUmVsYXkuaCIKLQotI2ltcG9ydCA8Rm91bmRhdGlv
bi9Gb3VuZGF0aW9uLmg+Ci0KLUBjbGFzcyBTaW1EZXZpY2U7Ci0KLUBpbnRlcmZhY2UgTFRSZWxh
eUNvbnRyb2xsZXIgOiBOU09iamVjdCA8TFRSZWxheURlbGVnYXRlPgotLSAoaWQpaW5pdFdpdGhE
ZXZpY2U6KFNpbURldmljZSAqKWRldmljZSBwcm9kdWN0RGlyOihOU1N0cmluZyAqKXByb2R1Y3RE
aXIgYXBwUGF0aDooTlNTdHJpbmcgKilhcHBQYXRoIGRldmljZVVESUQ6KE5TVVVJRCAqKXVkaWQg
ZHVtcFRvb2xBcmd1bWVudHM6KE5TQXJyYXkgKilhcmd1bWVudHM7Ci0tICh2b2lkKXN0YXJ0Owot
LSAodm9pZClmaW5pc2g7Ci1AZW5kCi0KLSNlbmRpZgpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJl
bGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIubQko
cmV2aXNpb24gMjEwNzM1KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxh
eS9MVFJlbGF5Q29udHJvbGxlci5tCShub25leGlzdGVudCkKQEAgLTEsMjcyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW1wb3J0ICJMVFJlbGF5Q29udHJvbGxlci5oIgotCi0jaW1wb3J0ICJDb3Jl
U2ltdWxhdG9yU1BJLmgiCi0jaW1wb3J0ICJMVFBpcGVSZWxheS5oIgotI2ltcG9ydCA8QXBwS2l0
L0FwcEtpdC5oPgotI2ltcG9ydCA8Y3J0X2V4dGVybnMuaD4KLQotQGludGVyZmFjZSBMVFJlbGF5
Q29udHJvbGxlciAoKQotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBkaXNwYXRjaF9zb3Vy
Y2VfdCBzdGFuZGFyZElucHV0RGlzcGF0Y2hTb3VyY2U7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBz
dHJvbmcpIE5TRmlsZUhhbmRsZSAqc3RhbmRhcmRPdXRwdXQ7Ci1AcHJvcGVydHkgKHJlYWRvbmx5
LCBzdHJvbmcpIE5TRmlsZUhhbmRsZSAqc3RhbmRhcmRFcnJvcjsKLUBwcm9wZXJ0eSAocmVhZG9u
bHksIHN0cm9uZykgTlNTdHJpbmcgKmlwY0lkZW50aWZpZXI7Ci1AcHJvcGVydHkgKHJlYWRvbmx5
LCBzdHJvbmcpIE5TU3RyaW5nICphcHBCdW5kbGVJZGVudGlmaWVyOwotQHByb3BlcnR5IChyZWFk
b25seSwgc3Ryb25nKSBOU1N0cmluZyAqYXBwUGF0aDsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0
cm9uZykgTlNVVUlEICpkZXZpY2VVRElEOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBO
U0FycmF5ICpkdW1wVG9vbEFyZ3VtZW50czsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykg
TlNTdHJpbmcgKnByb2R1Y3REaXI7Ci1AcHJvcGVydHkgKHN0cm9uZykgU2ltRGV2aWNlICpkZXZp
Y2U7Ci1AcHJvcGVydHkgKHN0cm9uZykgaWQ8TFRSZWxheT4gcmVsYXk7Ci1AcHJvcGVydHkgcGlk
X3QgcGlkOwotQHByb3BlcnR5IChzdHJvbmcpIGRpc3BhdGNoX3NvdXJjZV90IGFwcERpc3BhdGNo
U291cmNlOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gTFRSZWxheUNvbnRyb2xsZXIKLQotLSAo
aWQpaW5pdFdpdGhEZXZpY2U6KFNpbURldmljZSAqKWRldmljZSBwcm9kdWN0RGlyOihOU1N0cmlu
ZyAqKXByb2R1Y3REaXIgYXBwUGF0aDooTlNTdHJpbmcgKilhcHBQYXRoIGRldmljZVVESUQ6KE5T
VVVJRCAqKXVkaWQgZHVtcFRvb2xBcmd1bWVudHM6KE5TQXJyYXkgKilhcmd1bWVudHMKLXsKLSAg
ICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKSB7Ci0gICAgICAgIF9kZXZpY2UgPSBkZXZpY2U7
Ci0gICAgICAgIF9wcm9kdWN0RGlyID0gcHJvZHVjdERpcjsKLSAgICAgICAgX2FwcFBhdGggPSBh
cHBQYXRoOwotICAgICAgICBfYXBwQnVuZGxlSWRlbnRpZmllciA9IFtbTlNCdW5kbGUgYnVuZGxl
V2l0aFBhdGg6YXBwUGF0aF0gYnVuZGxlSWRlbnRpZmllcl07Ci0gICAgICAgIF9kZXZpY2VVRElE
ID0gdWRpZDsKLSAgICAgICAgX2R1bXBUb29sQXJndW1lbnRzID0gYXJndW1lbnRzOwotICAgICAg
ICBfc3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNlID0gZGlzcGF0Y2hfc291cmNlX2NyZWF0ZShE
SVNQQVRDSF9TT1VSQ0VfVFlQRV9SRUFELCBTVERJTl9GSUxFTk8sIDAsIGRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCkpOwotICAgICAgICBfc3RhbmRhcmRPdXRwdXQgPSBbTlNGaWxlSGFuZGxlIGZp
bGVIYW5kbGVXaXRoU3RhbmRhcmRPdXRwdXRdOwotICAgICAgICBfc3RhbmRhcmRFcnJvciA9IFtO
U0ZpbGVIYW5kbGUgZmlsZUhhbmRsZVdpdGhTdGFuZGFyZEVycm9yXTsKLQotICAgICAgICBkaXNw
YXRjaF9zb3VyY2Vfc2V0X2V2ZW50X2hhbmRsZXIoX3N0YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJj
ZSwgXnsKLSAgICAgICAgICAgIHVpbnQ4X3QgYnVmZmVyWzEwMjRdOwotICAgICAgICAgICAgc3Np
emVfdCBsZW4gPSByZWFkKFNURElOX0ZJTEVOTywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7Ci0g
ICAgICAgICAgICBpZiAobGVuID4gMCkgewotICAgICAgICAgICAgICAgIEB0cnkgewotICAgICAg
ICAgICAgICAgICAgICBbW1tzZWxmIHJlbGF5XSBvdXRwdXRTdHJlYW1dIHdyaXRlOmJ1ZmZlciBt
YXhMZW5ndGg6bGVuXTsKLSAgICAgICAgICAgICAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24gKmUp
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQnJva2VuIHBpcGUgLSB0aGUgZHVtcCB0b29sIGNy
YXNoZWQuIFRpbWUgdG8gZGllLgotICAgICAgICAgICAgICAgICAgICBbc2VsZiBkaWRDcmFzaFdp
dGhNZXNzYWdlOm5pbF07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAvLyBFT0YgUmVjZWl2ZWQgb24gdGhlIHJlbGF5J3Mgc3RhbmRhcmQg
aW5wdXQuCi0gICAgICAgICAgICAgICAgW3NlbGYgZmluaXNoXTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSk7Ci0KLSAgICAgICAgX3JlbGF5ID0gW1tMVFBpcGVSZWxheSBhbGxvY10gaW5pdFdp
dGhQcmVmaXg6W0AiL3RtcCIgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OnNlbGYuaXBj
SWRlbnRpZmllcl1dOwotICAgICAgICBbX3JlbGF5IHNldFJlbGF5RGVsZWdhdGU6c2VsZl07Ci0g
ICAgfQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChOU1N0cmluZyAqKWlwY0lkZW50aWZpZXIK
LXsKLSAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQC0lQCIsIHNlbGYu
YXBwQnVuZGxlSWRlbnRpZmllciwgc2VsZi5kZXZpY2VVRElELlVVSURTdHJpbmddOwotfQotCi0t
IChOU1N0cmluZyAqKXByb2Nlc3NOYW1lCi17Ci0gICAgcmV0dXJuIFtzZWxmLmFwcEJ1bmRsZUlk
ZW50aWZpZXIgY29tcG9uZW50c1NlcGFyYXRlZEJ5U3RyaW5nOkAiLiJdLmxhc3RPYmplY3Q7Ci19
Ci0KLS0gKHZvaWQpZGlkUmVjZWl2ZVN0ZG91dERhdGE6KE5TRGF0YSAqKWRhdGEKLXsKLSAgICBA
dHJ5IHsKLSAgICAgICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0XSB3cml0ZURhdGE6ZGF0YV07Ci0g
ICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRpb24pIHsKLSAgICAgICAgLy8gTlNGaWxl
SGFuZGxlT3BlcmF0aW9uRXhjZXB0aW9uCi0gICAgICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhlIHRl
c3QgaGFybmVzcyBzdG9wcGVkIGxpc3RlbmluZyB0byB1cywKLSAgICAgICAgLy8gcHJvYmFibHkg
YmVjYXVzZSB3ZSB0aW1lZCBvdXQgb3IgYSBydW4gd2FzIGNhbmNlbGVkLgotICAgICAgICBleGl0
KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotfQotCi0tICh2b2lkKWRpZFJlY2VpdmVTdGRlcnJEYXRh
OihOU0RhdGEgKilkYXRhCi17Ci0gICAgQHRyeSB7Ci0gICAgICAgIFtbc2VsZiBzdGFuZGFyZEVy
cm9yXSB3cml0ZURhdGE6ZGF0YV07Ci0gICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRp
b24pIHsKLSAgICAgICAgLy8gTlNGaWxlSGFuZGxlT3BlcmF0aW9uRXhjZXB0aW9uCi0gICAgICAg
IC8vIEJyb2tlbiBwaXBlIC0gdGhlIHRlc3QgaGFybmVzcyBzdG9wcGVkIGxpc3RlbmluZyB0byB1
cywKLSAgICAgICAgLy8gcHJvYmFibHkgYmVjYXVzZSB3ZSB0aW1lZCBvdXQgb3IgYSBydW4gd2Fz
IGNhbmNlbGVkLgotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotfQotCi0tICh2
b2lkKWRpZERpc2Nvbm5lY3QKLXsKLSAgICBkaXNwYXRjaF9zdXNwZW5kKFtzZWxmIHN0YW5kYXJk
SW5wdXREaXNwYXRjaFNvdXJjZV0pOwotfQotCi0tICh2b2lkKWRpZENvbm5lY3QKLXsKLSAgICBk
aXNwYXRjaF9yZXN1bWUoW3NlbGYgc3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNlXSk7Ci19Ci0K
LS0gKHZvaWQpZGlkQ3Jhc2hXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAg
W1tzZWxmIHJlbGF5XSBkaXNjb25uZWN0XTsKLSAgICBOU1N0cmluZyAqY3Jhc2hNZXNzYWdlID0g
W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJcbiNDUkFTSEVEIC0gJUAgKHBpZCAlZClcbiIs
IFtzZWxmIHByb2Nlc3NOYW1lXSwgW3NlbGYgcGlkXV07Ci0KLSAgICBpZiAobWVzc2FnZSkKLSAg
ICAgICAgY3Jhc2hNZXNzYWdlID0gW2NyYXNoTWVzc2FnZSBzdHJpbmdCeUFwcGVuZGluZ0Zvcm1h
dDpAIiVAXG4iLCBtZXNzYWdlXTsKLQotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSB3cml0ZURh
dGE6W2NyYXNoTWVzc2FnZSBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ11d
OwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSBjbG9zZUZpbGVdOwotICAgIFtbc2VsZiBzdGFu
ZGFyZE91dHB1dF0gY2xvc2VGaWxlXTsKLSAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci19Ci0KLS0g
KHZvaWQpaW5zdGFsbEFwcAotewotICAgIE5TRGljdGlvbmFyeSAqaW5zdGFsbE9wdGlvbnMgPSBA
ewotICAgICAgICAoTlNTdHJpbmcgKilrQ0ZCdW5kbGVJZGVudGlmaWVyS2V5OiBzZWxmLmFwcEJ1
bmRsZUlkZW50aWZpZXIsCi0gICAgfTsKLQotICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOwotICAg
IEJPT0wgaW5zdGFsbGVkID0gW3NlbGYuZGV2aWNlIGluc3RhbGxBcHBsaWNhdGlvbjpbTlNVUkwg
ZmlsZVVSTFdpdGhQYXRoOnNlbGYuYXBwUGF0aF0gd2l0aE9wdGlvbnM6aW5zdGFsbE9wdGlvbnMg
ZXJyb3I6JmVycm9yXTsKLSAgICBpZiAoIWluc3RhbGxlZCkgewotICAgICAgICBOU0xvZyhAIkNv
dWxkbid0IGluc3RhbGwgJUA6ICVAIiwgc2VsZi5hcHBQYXRoLCBlcnJvci5kZXNjcmlwdGlvbik7
Ci0gICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpa2lsbEFw
cAotewotICAgIGRpc3BhdGNoX3NvdXJjZV90IGRpc3BhdGNoID0gW3NlbGYgYXBwRGlzcGF0Y2hT
b3VyY2VdOwotCi0gICAgaWYgKGRpc3BhdGNoKQotICAgICAgICBkaXNwYXRjaF9zb3VyY2VfY2Fu
Y2VsKGRpc3BhdGNoKTsKLQotICAgIGlmIChbc2VsZiBwaWRdID4gMSkgewotICAgICAgICBraWxs
KHNlbGYucGlkLCBTSUdLSUxMKTsKLSAgICAgICAgW3NlbGYgc2V0UGlkOi0xXTsKLSAgICB9Ci0g
ICAgW3NlbGYgc2V0QXBwRGlzcGF0Y2hTb3VyY2U6bmlsXTsKLX0KLQotLSAoTlNEaWN0aW9uYXJ5
ICopX2Vudmlyb25tZW50VmFyaWFibGVzCi17Ci0gICAgc3RhdGljIE5TRGljdGlvbmFyeSAqZW52
aXJvbm1lbnRWYXJpYWJsZXM7Ci0gICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlOwotCi0g
ICAgZGlzcGF0Y2hfb25jZSgmb25jZSwgXnsKLSAgICAgICAgTlNTdHJpbmcgKnByb2R1Y3REaXJl
Y3RvcnkgPSBbc2VsZiBwcm9kdWN0RGlyXTsKLQotICAgICAgICBOU011dGFibGVEaWN0aW9uYXJ5
ICpkaWN0aW9uYXJ5ID0gW0B7Ci0gICAgICAgICAgICBAIklQQ19JREVOVElGSUVSIjogc2VsZi5p
cGNJZGVudGlmaWVyLAotICAgICAgICAgICAgQCJEWUxEX0ZSQU1FV09SS19QQVRIIjogcHJvZHVj
dERpcmVjdG9yeSwKLSAgICAgICAgICAgIEAiX19YUENfRFlMRF9GUkFNRVdPUktfUEFUSCI6IHBy
b2R1Y3REaXJlY3RvcnksCi0gICAgICAgICAgICBAIkRZTERfTElCUkFSWV9QQVRIIjogcHJvZHVj
dERpcmVjdG9yeSwKLSAgICAgICAgICAgIEAiX19YUENfRFlMRF9MSUJSQVJZX1BBVEgiOiBwcm9k
dWN0RGlyZWN0b3J5LAotICAgICAgICB9IG11dGFibGVDb3B5XTsKLQotICAgICAgICBmb3IgKE5T
U3RyaW5nICprZXlOYW1lIGluIEBbQCJEWUxEX0lOU0VSVF9MSUJSQVJJRVMiLCBAIk1hbGxvY1N0
YWNrTG9nZ2luZyIsIEAiTE9DQUxfUkVTT1VSQ0VfUk9PVCIsIEAiRFVNUFJFTkRFUlRSRUVfVEVN
UCJdKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiB2YWx1ZSA9IGdldGVudihba2V5TmFtZSBV
VEY4U3RyaW5nXSk7Ci0gICAgICAgICAgICBpZiAodmFsdWUgJiYgc3RybGVuKHZhbHVlKSkgewot
ICAgICAgICAgICAgICAgIE5TU3RyaW5nICpuc1ZhbHVlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhV
VEY4U3RyaW5nOnZhbHVlXTsKLSAgICAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6
bnNWYWx1ZSBmb3JLZXk6a2V5TmFtZV07Ci0gICAgICAgICAgICAgICAgW2RpY3Rpb25hcnkgc2V0
T2JqZWN0Om5zVmFsdWUgZm9yS2V5OltAIl9fWFBDXyIgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6
a2V5TmFtZV1dOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChjaGFy
KiogZW52cCA9ICpfTlNHZXRFbnZpcm9uKCk7ICplbnZwOyBlbnZwKyspIHsKLSAgICAgICAgICAg
IGNvbnN0IGNoYXIqIGVudiA9ICplbnZwOwotICAgICAgICAgICAgaWYgKCFzdHJuY21wKCJKU0Nf
IiwgZW52LCA0KSB8fCAhc3RybmNtcCgiX19YUENfSlNDXyIsIGVudiwgMTApKSB7Ci0gICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogZXF1YWwgPSBzdHJjaHIoZW52LCAnPScpOwotICAgICAgICAg
ICAgICAgIGlmICghZXF1YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgTlNMb2coQCJNaXNzaW5n
ICc9JyBpbiBlbnYgdmFyICclcyciLCBlbnYpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IG1heEtleUxlbmd0aCA9IDI1NjsKLSAgICAgICAgICAgICAgICBzaXplX3Qga2V5TGVuZ3Ro
ID0gZXF1YWwgLSBlbnY7Ci0gICAgICAgICAgICAgICAgaWYgKGtleUxlbmd0aCA+PSBtYXhLZXlM
ZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgTlNMb2coQCJFbnYgdmFyICclcycgaXMgdG9v
IGxvbmciLCBlbnYpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjaGFyIGtleVttYXhLZXlMZW5ndGhdOwotICAgICAg
ICAgICAgICAgIHN0cm5jcHkoa2V5LCBlbnYsIGtleUxlbmd0aCk7Ci0gICAgICAgICAgICAgICAg
a2V5W2tleUxlbmd0aF0gPSAnXDAnOwotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhbHVl
ID0gZXF1YWwgKyAxOwotCi0gICAgICAgICAgICAgICAgTlNTdHJpbmcgKm5zS2V5ID0gW05TU3Ry
aW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmtleV07Ci0gICAgICAgICAgICAgICAgTlNTdHJpbmcg
Km5zVmFsdWUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6dmFsdWVdOwotICAgICAg
ICAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpuc1ZhbHVlIGZvcktleTpuc0tleV07Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBlbnZpcm9ubWVudFZhcmlhYmxlcyA9
IFtkaWN0aW9uYXJ5IGNvcHldOwotICAgIH0pOwotCi0gICAgcmV0dXJuIGVudmlyb25tZW50VmFy
aWFibGVzOwotfQotCi0tICh2b2lkKWxhdW5jaEFwcAotewotICAgIE5TRGljdGlvbmFyeSAqbGF1
bmNoT3B0aW9ucyA9IEB7Ci0gICAgICAgIGtTaW1EZXZpY2VMYXVuY2hBcHBsaWNhdGlvbkVudmly
b25tZW50OiBbc2VsZiBfZW52aXJvbm1lbnRWYXJpYWJsZXNdLAotICAgICAgICBrU2ltRGV2aWNl
TGF1bmNoQXBwbGljYXRpb25Bcmd1bWVudHM6IFtzZWxmIGR1bXBUb29sQXJndW1lbnRzXSwKLSAg
ICB9OwotCi0gICAgTlNFcnJvciAqZXJyb3I7Ci0gICAgcGlkX3QgcGlkID0gW3NlbGYuZGV2aWNl
IGxhdW5jaEFwcGxpY2F0aW9uV2l0aElEOnNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciBvcHRpb25z
OmxhdW5jaE9wdGlvbnMgZXJyb3I6JmVycm9yXTsKLQotICAgIGlmIChwaWQgPCAwKSB7Ci0gICAg
ICAgIE5TTG9nKEAiQ291bGRuJ3QgbGF1bmNoICVAOiAlQCIsIHNlbGYuYXBwQnVuZGxlSWRlbnRp
ZmllciwgZXJyb3IuZGVzY3JpcHRpb24pOwotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0g
ICAgfQotCi0gICAgW3NlbGYgc2V0UGlkOnBpZF07Ci0KLSAgICBkaXNwYXRjaF9xdWV1ZV90IHF1
ZXVlID0gZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKTsKLSAgICBkaXNwYXRjaF9zb3VyY2VfdCBz
aW11bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3VyY2UgPSBkaXNwYXRjaF9zb3VyY2VfY3JlYXRlKERJ
U1BBVENIX1NPVVJDRV9UWVBFX1BST0MsIFtzZWxmIHBpZF0sIERJU1BBVENIX1BST0NfRVhJVCwg
cXVldWUpOwotICAgIFtzZWxmIHNldEFwcERpc3BhdGNoU291cmNlOnNpbXVsYXRvckFwcEV4aXRE
aXNwYXRjaFNvdXJjZV07Ci0gICAgZGlzcGF0Y2hfc291cmNlX3NldF9ldmVudF9oYW5kbGVyKHNp
bXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSwgXnsKLSAgICAgICAgZGlzcGF0Y2hfc291cmNl
X2NhbmNlbChzaW11bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3VyY2UpOwotICAgICAgICBbc2VsZiBk
aWRDcmFzaFdpdGhNZXNzYWdlOm5pbF07Ci0gICAgfSk7Ci0gICAgZGlzcGF0Y2hfcmVzdW1lKHNp
bXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSk7Ci19Ci0KLS0gKHZvaWQpc3RhcnQKLXsKLSAg
ICBbc2VsZiBpbnN0YWxsQXBwXTsKLSAgICBbW3NlbGYgcmVsYXldIHNldHVwXTsKLSAgICBbc2Vs
ZiBsYXVuY2hBcHBdOwotICAgIFtbc2VsZiByZWxheV0gY29ubmVjdF07Ci19Ci0KLS0gKHZvaWQp
ZmluaXNoCi17Ci0gICAgW1tzZWxmIHJlbGF5XSBkaXNjb25uZWN0XTsKLSAgICBbc2VsZiBraWxs
QXBwXTsKLSAgICBleGl0KEVYSVRfU1VDQ0VTUyk7Ci19Ci0KLUBlbmQKSW5kZXg6IFRvb2xzL0xh
eW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvbWFpbi5tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvbWFpbi5tCShyZXZpc2lvbiAyMTA3MzUp
CisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L21haW4ubQkobm9uZXhp
c3RlbnQpCkBAIC0xLDEzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiQ29y
ZVNpbXVsYXRvclNQSS5oIgotI2ltcG9ydCAiTFRSZWxheUNvbnRyb2xsZXIuaCIKLSNpbXBvcnQg
PEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi1zdGF0aWMgTFRSZWxheUNvbnRyb2xsZXIgKnJl
bGF5Q29udHJvbGxlcjsKLQotdm9pZCB1c2FnZSgpCi17Ci0gICAgTlNTdHJpbmcgKmhlbHBUZXh0
ID0gQCJMYXlvdXRUZXN0UmVsYXk6IHJ1biBhIGR1bXAgdG9vbCBpbiB0aGUgc2ltdWxhdG9yLiBO
b3QgZm9yIGRpcmVjdCBjb25zdW1wdGlvbi5cbiIKLSAgICAgICAgIlVzYWdlOiBMYXlvdXRUZXN0
UmVsYXkgWy1oXSBbb3B0aW9uc10gLS0gW2R1bXAgdG9vbCBhcmd1bWVudHNdXG4iCi0gICAgICAg
ICJSZXF1aXJlZCBvcHRpb25zOlxuIgotICAgICAgICAiICAgIC11ZGlkIDxpZGVudGlmaWVyPiAg
ICAgICBTaW11bGF0b3IgZGV2aWNlIGlkZW50aWZpZXJcbiIKLSAgICAgICAgIiAgICAtYXBwIDxh
cHBfcGF0aD4gICAgICAgICAgUGF0aCB0byB0aGUgYnVpbHQgaU9TIC5hcHAgYnVuZGxlIGRpcmVj
dG9yeS5cbiIKLSAgICAgICAgIiAgICAtcHJvZHVjdERpciA8ZGlyPiAgICAgICAgL3BhdGgvdG8v
V2ViS2l0QnVpbGQve2NvbmZpZ3VyYXRpb259LXtzaG9ydCBwbGF0Zm9ybX0uXG4iOwotCi0gICAg
ZnByaW50ZihzdGRlcnIsICIlc1xuIiwgW2hlbHBUZXh0IFVURjhTdHJpbmddKTsKLX0KLQotTlNT
dHJpbmcgKmdldFJlcXVpcmVkU3RyaW5nQXJndW1lbnQoTlNTdHJpbmcgKnBhcmFtZXRlcikKLXsK
LSAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRV
c2VyRGVmYXVsdHNdOwotICAgIE5TU3RyaW5nICphcmd1bWVudCA9IFtkZWZhdWx0cyBzdHJpbmdG
b3JLZXk6cGFyYW1ldGVyXTsKLQotICAgIGlmICghYXJndW1lbnQpIHsKLSAgICAgICAgTlNMb2co
QCItJUAgaXMgcmVxdWlyZWQuIiwgcGFyYW1ldGVyKTsKLSAgICAgICAgdXNhZ2UoKTsKLSAgICAg
ICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0KLSAgICByZXR1cm4gYXJndW1lbnQ7Ci19Ci0K
LU5TQXJyYXkgKmdldER1bXBUb29sQXJndW1lbnRzKCkKLXsKLSAgICBOU011dGFibGVBcnJheSAq
ZHVtcFRvb2xBcmd1bWVudHMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKLSAgICBO
U0FycmF5ICpwcm9jZXNzQXJncyA9IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gYXJndW1l
bnRzXTsKLSAgICBCT09MIGFwcGVuZGluZyA9IE5POwotICAgIGZvciAoTlNTdHJpbmcgKmFyZyBp
biBwcm9jZXNzQXJncykgewotICAgICAgICBpZiAoW2FyZyBpc0VxdWFsVG9TdHJpbmc6QCItLSJd
KSB7Ci0gICAgICAgICAgICBhcHBlbmRpbmcgPSBZRVM7Ci0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgfQotICAgICAgICBpZiAoYXBwZW5kaW5nKQotICAgICAgICAgICAgW2R1bXBUb29s
QXJndW1lbnRzIGFkZE9iamVjdDphcmddOwotICAgIH0KLSAgICByZXR1cm4gZHVtcFRvb2xBcmd1
bWVudHM7Ci19Ci0KLXZvaWQgZmluaXNoKCkKLXsKLSAgICBbcmVsYXlDb250cm9sbGVyIGZpbmlz
aF07Ci19Ci0KLXZvaWQgcmVjZWl2ZWRTaWduYWwoaW50IHNpZ25hbCkKLXsKLSAgICBleGl0KEVY
SVRfU1VDQ0VTUyk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICogYXJndltd
KQotewotICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBOU0FycmF5ICpoZWxwQXJndW1l
bnRzID0gQFtAIi1oIiwgQCItLWhlbHAiXTsKLSAgICAgICAgZm9yIChOU1N0cmluZyAqaGVscEFy
Z3VtZW50IGluIGhlbHBBcmd1bWVudHMpIHsKLSAgICAgICAgICAgIGlmIChbW1tOU1Byb2Nlc3NJ
bmZvIHByb2Nlc3NJbmZvXSBhcmd1bWVudHNdIGluZGV4T2ZPYmplY3Q6aGVscEFyZ3VtZW50XSAh
PSBOU05vdEZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgdXNhZ2UoKTsKLSAgICAgICAgICAgICAg
ICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotI2lmIFVT
RV9TSU1fU0VSVklDRV9DT05URVhUCi0gICAgICAgIE5TU3RyaW5nICpkZXZlbG9wZXJEaXJlY3Rv
cnkgPSBnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAiZGV2ZWxvcGVyRGlyIik7Ci0jZW5kaWYK
LSAgICAgICAgTlNVVUlEICp1ZGlkID0gW1tOU1VVSUQgYWxsb2NdIGluaXRXaXRoVVVJRFN0cmlu
ZzpnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAidWRpZCIpXTsKLSAgICAgICAgTlNTdHJpbmcg
KmFwcFBhdGggPSBnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAiYXBwIik7Ci0gICAgICAgIE5T
U3RyaW5nICpwcm9kdWN0RGlyZWN0b3J5ID0gZ2V0UmVxdWlyZWRTdHJpbmdBcmd1bWVudChAInBy
b2R1Y3REaXIiKTsKLSAgICAgICAgTlNBcnJheSAqZHVtcFRvb2xBcmd1bWVudHMgPSBnZXREdW1w
VG9vbEFyZ3VtZW50cygpOwotCi0jaWYgVVNFX1NJTV9TRVJWSUNFX0NPTlRFWFQKLSAgICAgICAg
TlNFcnJvciAqZXJyb3I7Ci0gICAgICAgIFNpbVNlcnZpY2VDb250ZXh0ICpzZXJ2aWNlQ29udGV4
dCA9IFtTaW1TZXJ2aWNlQ29udGV4dCBzaGFyZWRTZXJ2aWNlQ29udGV4dEZvckRldmVsb3BlckRp
cjpkZXZlbG9wZXJEaXJlY3RvcnkgZXJyb3I6JmVycm9yXTsKLSAgICAgICAgaWYgKCFzZXJ2aWNl
Q29udGV4dCkgewotICAgICAgICAgICAgTlNMb2coQCJEZXZpY2UgY29udGV4dCBjb3VsZG4ndCBi
ZSBmb3VuZDogJUAiLCBlcnJvcik7Ci0gICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgU2ltRGV2aWNlU2V0ICpkZXZpY2VTZXQgPSBbc2VydmljZUNvbnRl
eHQgZGVmYXVsdERldmljZVNldFdpdGhFcnJvcjpuaWxdOwotICAgICAgICBpZiAoIWRldmljZVNl
dCkgewotICAgICAgICAgICAgTlNMb2coQCJEZWZhdWx0IGRldmljZSBzZXQgY291bGRuJ3QgYmUg
Zm91bmQ6ICVAIiwgZXJyb3IpOwotICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAg
ICAgICB9Ci0gICAgICAgIFNpbURldmljZSAqZGV2aWNlID0gW2RldmljZVNldC5kZXZpY2VzQnlV
RElEIG9iamVjdEZvcktleTp1ZGlkXTsKLSNlbHNlCi0gICAgICAgIFNpbURldmljZSAqZGV2aWNl
ID0gW1NpbURldmljZVNldC5kZWZhdWx0U2V0LmRldmljZXNCeVVESUQgb2JqZWN0Rm9yS2V5OnVk
aWRdOwotI2VuZGlmCi0gICAgICAgIGlmICghZGV2aWNlKSB7Ci0gICAgICAgICAgICBOU0xvZyhA
IkRldmljZSAlQCBjb3VsZG4ndCBiZSBmb3VuZCIsIHVkaWQpOwotICAgICAgICAgICAgZXhpdChF
WElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVsYXlDb250cm9sbGVyID0gW1tM
VFJlbGF5Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhEZXZpY2U6ZGV2aWNlIHByb2R1Y3REaXI6
cHJvZHVjdERpcmVjdG9yeSBhcHBQYXRoOmFwcFBhdGggZGV2aWNlVURJRDp1ZGlkIGR1bXBUb29s
QXJndW1lbnRzOmR1bXBUb29sQXJndW1lbnRzXTsKLSAgICAgICAgW3JlbGF5Q29udHJvbGxlciBz
dGFydF07Ci0KLSAgICAgICAgYXRleGl0KGZpbmlzaCk7Ci0gICAgICAgIHNpZ25hbChTSUdJTlQs
IHJlY2VpdmVkU2lnbmFsKTsKLSAgICAgICAgc2lnbmFsKFNJR1RFUk0sIHJlY2VpdmVkU2lnbmFs
KTsKLQotICAgICAgICBbW05TUnVuTG9vcCBtYWluUnVuTG9vcF0gcnVuXTsKLSAgICB9Ci0gICAg
cmV0dXJuIDA7Ci19CkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVz
dFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAyMTA3MzUpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMDIgKzAsMCBAQAotLy8g
ISQqVVRGOCokIQotewotCWFyY2hpdmVWZXJzaW9uID0gMTsKLQljbGFzc2VzID0gewotCX07Ci0J
b2JqZWN0VmVyc2lvbiA9IDQ2OwotCW9iamVjdHMgPSB7Ci0KLS8qIEJlZ2luIFBCWEJ1aWxkRmls
ZSBzZWN0aW9uICovCi0JCTJFOEQzRUY4MTk4ODFENDMwMDRGNkNDMiAvKiBtYWluLm0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRThEM0VGNzE5ODgxRDQz
MDA0RjZDQzIgLyogbWFpbi5tICovOyB9OwotCQkyRThEM0YwMjE5ODgxRkQwMDA0RjZDQzIgLyog
TFRQaXBlUmVsYXkubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJFOEQzRjAxMTk4ODFGRDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5tICovOyB9OwotCQky
RThEM0YwNjE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIubSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOEQzRjA1MTk4ODI0MDYwMDRG
NkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5tICovOyB9OwotLyogRW5kIFBCWEJ1aWxkRmlsZSBz
ZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWENvcHlGaWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwot
CQkyRThEM0VGMjE5ODgxRDQzMDA0RjZDQzIgLyogQ29weUZpbGVzICovID0gewotCQkJaXNhID0g
UEJYQ29weUZpbGVzQnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7
Ci0JCQlkc3RQYXRoID0gL3Vzci9zaGFyZS9tYW4vbWFuMS87Ci0JCQlkc3RTdWJmb2xkZXJTcGVj
ID0gMDsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAxOwotCQl9OwotLyogRW5kIFBCWENvcHlGaWxlc0J1aWxkUGhhc2Ugc2VjdGlv
biAqLwotCi0vKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjQx
OTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsg
aW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gTGF5b3V0VGVzdFJlbGF5OyBzb3VyY2VUcmVlID0g
QlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQkyRThEM0VGNzE5ODgxRDQzMDA0RjZDQzIgLyogbWFp
bi5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLm9iamM7IHBhdGggPSBtYWluLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29u
ZmlnOyBuYW1lID0gRGVidWdSZWxlYXNlLnhjY29uZmlnOyBwYXRoID0gQ29uZmlndXJhdGlvbnMv
RGVidWdSZWxlYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThE
M0VGRjE5ODgxRTI1MDA0RjZDQzIgLyogQmFzZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IG5hbWUgPSBCYXNl
LnhjY29uZmlnOyBwYXRoID0gQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZzsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDAxOTg4MUYyOTAwNEY2Q0MyIC8qIExUUmVsYXku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTFRSZWxheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkyRThEM0YwMTE5ODgxRkQwMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkubSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gTFRQaXBlUmVsYXkubTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMkU4RDNGMDMxOTg4MUZFMjAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IExUUGlwZVJlbGF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTJFOEQzRjA0MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMVFJlbGF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkyRThEM0YwNTE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNv
bnRyb2xsZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gTFRSZWxheUNv
bnRyb2xsZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0UxRkJDMTUxQjI5MEU3
OTAwMDEzNkY1IC8qIENvcmVTaW11bGF0b3JTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ29yZVNpbXVsYXRvclNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
LyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhGcmFtZXdv
cmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0JCTJFOEQzRUYxMTk4ODFENDMwMDRGNkNDMiAvKiBG
cmFtZXdvcmtzICovID0gewotCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7Ci0JCQli
dWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07Ci0vKiBFbmQgUEJYRnJh
bWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhHcm91cCBzZWN0aW9u
ICovCi0JCTJFOEQzRUVCMTk4ODFENDMwMDRGNkNDMiA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwot
CQkJY2hpbGRyZW4gPSAoCi0JCQkJMkU4RDNFRkYxOTg4MUUyNTAwNEY2Q0MyIC8qIEJhc2UueGNj
b25maWcgKi8sCi0JCQkJMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54
Y2NvbmZpZyAqLywKLQkJCQkyRThEM0VGNjE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJl
bGF5ICovLAotCQkJCTJFOEQzRUY1MTk4ODFENDMwMDRGNkNDMiAvKiBQcm9kdWN0cyAqLywKLQkJ
CSk7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQkyRThEM0VGNTE5ODgxRDQz
MDA0RjZDQzIgLyogUHJvZHVjdHMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxk
cmVuID0gKAotCQkJCTJFOEQzRUY0MTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkg
Ki8sCi0JCQkpOwotCQkJbmFtZSA9IFByb2R1Y3RzOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKLQkJfTsKLQkJMkU4RDNFRjYxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAq
LyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMkU4RDNFRjcx
OTg4MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSAqLywKLQkJCQlDRTFGQkMxNTFCMjkwRTc5MDAwMTM2
RjUgLyogQ29yZVNpbXVsYXRvclNQSS5oICovLAotCQkJCTJFOEQzRjAwMTk4ODFGMjkwMDRGNkND
MiAvKiBMVFJlbGF5LmggKi8sCi0JCQkJMkU4RDNGMDExOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlw
ZVJlbGF5Lm0gKi8sCi0JCQkJMkU4RDNGMDMxOTg4MUZFMjAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5
LmggKi8sCi0JCQkJMkU4RDNGMDQxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVy
LmggKi8sCi0JCQkJMkU4RDNGMDUxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVy
Lm0gKi8sCi0JCQkpOwotCQkJcGF0aCA9IExheW91dFRlc3RSZWxheTsKLQkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7Ci0JCX07Ci0vKiBFbmQgUEJYR3JvdXAgc2VjdGlvbiAqLwotCi0vKiBCZWdp
biBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLwotCQkyRThEM0VGMzE5ODgxRDQzMDA0RjZDQzIg
LyogTGF5b3V0VGVzdFJlbGF5ICovID0gewotCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwotCQkJ
YnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDJFOEQzRUZCMTk4ODFENDMwMDRGNkNDMiAvKiBCdWls
ZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiTGF5b3V0VGVzdFJlbGF5
IiAqLzsKLQkJCWJ1aWxkUGhhc2VzID0gKAotCQkJCTJFOEQzRUYwMTk4ODFENDMwMDRGNkNDMiAv
KiBTb3VyY2VzICovLAotCQkJCTJFOEQzRUYxMTk4ODFENDMwMDRGNkNDMiAvKiBGcmFtZXdvcmtz
ICovLAotCQkJCTJFOEQzRUYyMTk4ODFENDMwMDRGNkNDMiAvKiBDb3B5RmlsZXMgKi8sCi0JCQkp
OwotCQkJYnVpbGRSdWxlcyA9ICgKLQkJCSk7Ci0JCQlkZXBlbmRlbmNpZXMgPSAoCi0JCQkpOwot
CQkJbmFtZSA9IExheW91dFRlc3RSZWxheTsKLQkJCXByb2R1Y3ROYW1lID0gTGF5b3V0VGVzdFJl
bGF5OwotCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDJFOEQzRUY0MTk4ODFENDMwMDRGNkNDMiAvKiBM
YXlvdXRUZXN0UmVsYXkgKi87Ci0JCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10
eXBlLnRvb2wiOwotCQl9OwotLyogRW5kIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCi0KLS8q
IEJlZ2luIFBCWFByb2plY3Qgc2VjdGlvbiAqLwotCQkyRThEM0VFQzE5ODgxRDQzMDA0RjZDQzIg
LyogUHJvamVjdCBvYmplY3QgKi8gPSB7Ci0JCQlpc2EgPSBQQlhQcm9qZWN0OwotCQkJYXR0cmli
dXRlcyA9IHsKLQkJCQlMYXN0VXBncmFkZUNoZWNrID0gMDYwMDsKLQkJCQlPUkdBTklaQVRJT05O
QU1FID0gIkFwcGxlLCBJbmMuIjsKLQkJCQlUYXJnZXRBdHRyaWJ1dGVzID0gewotCQkJCQkyRThE
M0VGMzE5ODgxRDQzMDA0RjZDQzIgPSB7Ci0JCQkJCQlDcmVhdGVkT25Ub29sc1ZlcnNpb24gPSA2
LjA7Ci0JCQkJCX07Ci0JCQkJfTsKLQkJCX07Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0g
MkU4RDNFRUYxOTg4MUQ0MzAwNEY2Q0MyIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3Ig
UEJYUHJvamVjdCAiTGF5b3V0VGVzdFJlbGF5IiAqLzsKLQkJCWNvbXBhdGliaWxpdHlWZXJzaW9u
ID0gIlhjb2RlIDMuMiI7Ci0JCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7Ci0JCQloYXNT
Y2FubmVkRm9yRW5jb2RpbmdzID0gMDsKLQkJCWtub3duUmVnaW9ucyA9ICgKLQkJCQllbiwKLQkJ
CSk7Ci0JCQltYWluR3JvdXAgPSAyRThEM0VFQjE5ODgxRDQzMDA0RjZDQzI7Ci0JCQlwcm9kdWN0
UmVmR3JvdXAgPSAyRThEM0VGNTE5ODgxRDQzMDA0RjZDQzIgLyogUHJvZHVjdHMgKi87Ci0JCQlw
cm9qZWN0RGlyUGF0aCA9ICIiOwotCQkJcHJvamVjdFJvb3QgPSAiIjsKLQkJCXRhcmdldHMgPSAo
Ci0JCQkJMkU4RDNFRjMxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLywKLQkJ
CSk7Ci0JCX07Ci0vKiBFbmQgUEJYUHJvamVjdCBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWFNv
dXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjAxOTg4MUQ0MzAwNEY2Q0MyIC8q
IFNvdXJjZXMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKLQkJCWJ1aWxk
QWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCQkyRThEM0YwNjE5ODgy
NDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIubSBpbiBTb3VyY2VzICovLAotCQkJCTJF
OEQzRUY4MTk4ODFENDMwMDRGNkNDMiAvKiBtYWluLm0gaW4gU291cmNlcyAqLywKLQkJCQkyRThE
M0YwMjE5ODgxRkQwMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkubSBpbiBTb3VyY2VzICovLAotCQkJ
KTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9OwotLyog
RW5kIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gWENCdWlsZENv
bmZpZ3VyYXRpb24gc2VjdGlvbiAqLwotCQkyRThEM0VGOTE5ODgxRDQzMDA0RjZDQzIgLyogRGVi
dWcgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1
cmF0aW9uUmVmZXJlbmNlID0gMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFz
ZS54Y2NvbmZpZyAqLzsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQl9OwotCQkJbmFtZSA9IERl
YnVnOwotCQl9OwotCQkyRThEM0VGQTE5ODgxRDQzMDA0RjZDQzIgLyogUmVsZWFzZSAqLyA9IHsK
LQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZl
cmVuY2UgPSAyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmln
ICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJ
fTsKLQkJMkU4RDNFRkMxOTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICovID0gewotCQkJaXNhID0g
WENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDJF
OEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi87Ci0JCQli
dWlsZFNldHRpbmdzID0gewotCQkJCVBST0RVQ1RfTkFNRSA9ICIkKFRBUkdFVF9OQU1FKSI7Ci0J
CQl9OwotCQkJbmFtZSA9IERlYnVnOwotCQl9OwotCQkyRThEM0VGRDE5ODgxRDQzMDA0RjZDQzIg
LyogUmVsZWFzZSAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJYmFz
ZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVi
dWdSZWxlYXNlLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlQUk9EVUNU
X05BTUUgPSAiJChUQVJHRVRfTkFNRSkiOwotCQkJfTsKLQkJCW5hbWUgPSBSZWxlYXNlOwotCQl9
OwotLyogRW5kIFhDQnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gWEND
b25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCi0JCTJFOEQzRUVGMTk4ODFENDMwMDRGNkNDMiAv
KiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIkxheW91dFRlc3RSZWxh
eSIgKi8gPSB7Ci0JCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVpbGRDb25maWd1
cmF0aW9ucyA9ICgKLQkJCQkyRThEM0VGOTE5ODgxRDQzMDA0RjZDQzIgLyogRGVidWcgKi8sCi0J
CQkJMkU4RDNFRkExOTg4MUQ0MzAwNEY2Q0MyIC8qIFJlbGVhc2UgKi8sCi0JCQkpOwotCQkJZGVm
YXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25O
YW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJMkU4RDNFRkIxOTg4MUQ0MzAwNEY2Q0MyIC8qIEJ1aWxk
IGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJMYXlvdXRUZXN0UmVsYXki
ICovID0gewotCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKLQkJCWJ1aWxkQ29uZmlndXJh
dGlvbnMgPSAoCi0JCQkJMkU4RDNFRkMxOTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICovLAotCQkJ
CTJFOEQzRUZEMTk4ODFENDMwMDRGNkNDMiAvKiBSZWxlYXNlICovLAotCQkJKTsKLQkJCWRlZmF1
bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFt
ZSA9IFJlbGVhc2U7Ci0JCX07Ci0vKiBFbmQgWENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICov
Ci0JfTsKLQlyb290T2JqZWN0ID0gMkU4RDNFRUMxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2plY3Qg
b2JqZWN0ICovOwotfQpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxh
eS54Y29kZXByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRl
c3RSZWxheS54Y29kZXByb2oJKHJldmlzaW9uIDIxMDczNSkKKysrIFRvb2xzL0xheW91dFRlc3RS
ZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVwcm9qCShub25leGlzdGVudCkKClByb3BlcnR5IGNo
YW5nZXMgb246IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVwcm9q
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KRGVsZXRlZDogc3ZuOmlnbm9yZQojIyAtMSwyICswLDAgIyMKLXByb2plY3Qu
eGN3b3Jrc3BhY2UKLXhjdXNlcmRhdGEKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9NYWtl
ZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvTWFrZWZpbGUJKHJldmlz
aW9uIDIxMDczNSkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9NYWtlZmlsZQkobm9uZXhpc3Rl
bnQpCkBAIC0xLDYgKzAsMCBAQAotU0NSSVBUU19QQVRIID0gLi4vU2NyaXB0cwotCi1PVkVSUklE
RV9BUkNIUyA9IGRlZmF1bHQKLU9WRVJSSURFX1NES1JPT1QgPSBkZWZhdWx0Ci0KLWluY2x1ZGUg
Li4vLi4vTWFrZWZpbGUuc2hhcmVkCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29uZmln
dXJhdGlvbnMvQmFzZS54Y2NvbmZpZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVs
YXkvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwkocmV2aXNpb24gMjEwNzM1KQorKysgVG9v
bHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcJKG5vbmV4aXN0
ZW50KQpAQCAtMSw2OCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0vLyBh
cmUgbWV0OgotLy8gMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0vLyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotLy8gRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS8vIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotLy8gUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLS8vIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotLy8gRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotLy8gUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0vLyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0vLyBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LQotI2luY2x1ZGUgIi4uLy4uLy4uLy4uL0ludGVybmFsL0NvbmZpZ3VyYXRpb25zL0hhdmVJbnRl
cm5hbFNESy54Y2NvbmZpZyIKLQotVVNFX0lOVEVSTkFMX1NESyA9ICQoVVNFX0lOVEVSTkFMX1NE
S18kKENPTkZJR1VSQVRJT04pKTsKLVVTRV9JTlRFUk5BTF9TREtfUHJvZHVjdGlvbiA9IFlFUzsK
LVVTRV9JTlRFUk5BTF9TREtfRGVidWcgPSAkKEhBVkVfSU5URVJOQUxfU0RLKTsKLVVTRV9JTlRF
Uk5BTF9TREtfUmVsZWFzZSA9ICQoSEFWRV9JTlRFUk5BTF9TREspOwotCi1DTEFOR19DWFhfTEFO
R1VBR0VfU1RBTkRBUkQgPSBnbnUrKzB4OwotQ0xBTkdfRU5BQkxFX09CSkNfQVJDID0gWUVTOwot
Q0xBTkdfV0FSTl9DWFgwWF9FWFRFTlNJT05TID0gTk87Ci1IRUFERVJfU0VBUkNIX1BBVEhTID0g
JChCVUlMVF9QUk9EVUNUU19ESVIpL3Vzci9sb2NhbC9pbmNsdWRlICQoV0VCQ09SRV9QUklWQVRF
X0hFQURFUlNfRElSKS9Gb3J3YXJkaW5nSGVhZGVycyAkKFNSQ1JPT1QpLy4uLy4uL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pY3UgJChORVhUX1JPT1QpL3Vzci9sb2NhbC9pbmNsdWRlL1dlYkNvcmVU
ZXN0U3VwcG9ydDsKLUdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAkKERFQlVHX0RFRklO
RVMpIEVOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVDsKLURFQlVHX0lORk9STUFUSU9OX0ZPUk1BVCA9
IGR3YXJmLXdpdGgtZHN5bTsKLVBSRUJJTkRJTkcgPSBOTwotR0NDX0NfTEFOR1VBR0VfU1RBTkRB
UkQgPSBnbnU5OQotR0NDX0VOQUJMRV9DUFBfRVhDRVBUSU9OUyA9IE5POwotR0NDX0VOQUJMRV9D
UFBfUlRUSSA9IE5POwotR0NDX1BSRUNPTVBJTEVfUFJFRklYX0hFQURFUiA9IFlFUwotR0NDX1RS
RUFUX1dBUk5JTkdTX0FTX0VSUk9SUyA9IFlFUwotR0NDX1ZFUlNJT04gPSBjb20uYXBwbGUuY29t
cGlsZXJzLmxsdm0uY2xhbmcuMV8wOwotR0NDX1dBUk5fQUJPVVRfREVQUkVDQVRFRF9GVU5DVElP
TlMgPSBOTwotR0NDX1dBUk5fVU5VU0VEX0ZVTkNUSU9OID0gWUVTCi1HQ0NfV0FSTl9VTlVTRURf
VkFSSUFCTEUgPSBZRVMKLUdDQ19XQVJOXzY0X1RPXzMyX0JJVF9DT05WRVJTSU9OW2FyY2g9eDg2
XzY0XSA9IE5POwotV0FSTklOR19DRkxBR1MgPSAtV2FsbCAtVyAtV25vLXVudXNlZC1wYXJhbWV0
ZXIgLVd1bmRlZgotCi1ERUJVR19ERUZJTkVTX2RlYnVnID0gOwotREVCVUdfREVGSU5FU19ub3Jt
YWwgPSBOREVCVUc7Ci1ERUJVR19ERUZJTkVTID0gJChERUJVR19ERUZJTkVTXyQoQ1VSUkVOVF9W
QVJJQU5UKSk7Ci0KLVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SID0gJChUQVJHRVRfTUFD
X09TX1hfVkVSU0lPTl9NQUpPUiQoTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUOnN1ZmZpeDppZGVu
dGlmaWVyKSk7Ci1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUl8xMCA9IDEwMTAwMDsKLVRB
UkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SXzExID0gMTAxMTAwOwotVEFSR0VUX01BQ19PU19Y
X1ZFUlNJT05fTUFKT1JfMTIgPSAxMDEyMDA7Ci1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpP
Ul8xMyA9IDEwMTMwMDsKLQotU0RLUk9PVCA9IG1hY29zeC5pbnRlcm5hbDsKLQotU1VQUE9SVEVE
X1BMQVRGT1JNUyA9IG1hY29zeDsKLQotVE9PTENIQUlOUyA9IGRlZmF1bHQ7Ci0KLU9USEVSX0NG
TEFHUyA9ICQoQVNBTl9PVEhFUl9DRkxBR1MpOwotT1RIRVJfQ1BMVVNQTFVTRkxBR1MgPSAkKEFT
QU5fT1RIRVJfQ1BMVVNQTFVTRkxBR1MpOwotT1RIRVJfTERGTEFHUyA9ICQoQVNBTl9PVEhFUl9M
REZMQUdTKTsKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9EZWJ1
Z1JlbGVhc2UueGNjb25maWcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0Nv
bmZpZ3VyYXRpb25zL0RlYnVnUmVsZWFzZS54Y2NvbmZpZwkocmV2aXNpb24gMjEwNzM1KQorKysg
VG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0RlYnVnUmVsZWFzZS54Y2NvbmZp
Zwkobm9uZXhpc3RlbnQpCkBAIC0xLDQyICswLDAgQEAKLS8vIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLS8vIGFyZSBtZXQ6Ci0vLyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLS8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLS8vICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0vLwotLy8gVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0vLyBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotLy8gSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0vLyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotLy8gQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0vLyBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0v
LyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLS8vIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLS8vIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotCi0jaW5jbHVkZSAiQmFzZS54Y2NvbmZpZyIKLQotQVJDSFMgPSAkKEFSQ0hT
X1NUQU5EQVJEXzY0X0JJVCk7Ci0KLVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SID0gJChN
QUNfT1NfWF9WRVJTSU9OX01BSk9SKTsKLQotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUID0gJChN
QUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfJChUQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUikp
Ci1NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfMTAxMDAwID0gMTAuMTA7Ci1NQUNPU1hfREVQTE9Z
TUVOVF9UQVJHRVRfMTAxMTAwID0gMTAuMTE7Ci1NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfMTAx
MjAwID0gMTAuMTI7Ci1NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfMTAxMzAwID0gMTAuMTM7Ci0K
LUZSQU1FV09SS19TRUFSQ0hfUEFUSFMgPSAkKERFVkVMT1BFUl9ESVIpL0xpYnJhcnkvUHJpdmF0
ZUZyYW1ld29ya3M7Ci1MRF9SVU5QQVRIX1NFQVJDSF9QQVRIUyA9ICQoREVWRUxPUEVSX0RJUikv
TGlicmFyeS9Qcml2YXRlRnJhbWV3b3JrczsKLU9USEVSX0xERkxBR1MgPSAtZnJhbWV3b3JrIENv
cmVTaW11bGF0b3IgLWZyYW1ld29yayBBcHBLaXQ7Ci0KLVNES1JPT1QgPSAkKFNES1JPT1RfbWFj
b3N4XyQoVVNFX0lOVEVSTkFMX1NESykpOwotU0RLUk9PVF9tYWNvc3hfID0gbWFjb3N4OwotU0RL
Uk9PVF9tYWNvc3hfWUVTID0gbWFjb3N4LmludGVybmFsOwpJbmRleDogVG9vbHMvTGF5b3V0VGVz
dFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMjEwNzM1KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5
L0xheW91dFRlc3RSZWxheS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShub25leGlzdGVudCkK
QEAgLTEsMjAyICswLDAgQEAKLS8vICEkKlVURjgqJCEKLXsKLQlhcmNoaXZlVmVyc2lvbiA9IDE7
Ci0JY2xhc3NlcyA9IHsKLQl9OwotCW9iamVjdFZlcnNpb24gPSA0NjsKLQlvYmplY3RzID0gewot
Ci0vKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwotCQkyRThEM0VGODE5ODgxRDQzMDA0
RjZDQzIgLyogbWFpbi5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkU4RDNFRjcxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSAqLzsgfTsKLQkJMkU4RDNG
MDIxOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lm0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRThEM0YwMTE5ODgxRkQwMDA0RjZDQzIgLyogTFRQ
aXBlUmVsYXkubSAqLzsgfTsKLQkJMkU4RDNGMDYxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlD
b250cm9sbGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyRThEM0YwNTE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIubSAqLzsgfTsK
LS8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhDb3B5RmlsZXNC
dWlsZFBoYXNlIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjIxOTg4MUQ0MzAwNEY2Q0MyIC8qIENvcHlG
aWxlcyAqLyA9IHsKLQkJCWlzYSA9IFBCWENvcHlGaWxlc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFj
dGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZHN0UGF0aCA9IC91c3Ivc2hhcmUvbWFuL21hbjEv
OwotCQkJZHN0U3ViZm9sZGVyU3BlYyA9IDA7Ci0JCQlmaWxlcyA9ICgKLQkJCSk7Ci0JCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMTsKLQkJfTsKLS8qIEVuZCBQQlhDb3B5
RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBz
ZWN0aW9uICovCi0JCTJFOEQzRUY0MTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxl
ZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IExheW91dFRl
c3RSZWxheTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJMkU4RDNFRjcx
OTg4MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gbWFpbi5tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVi
dWdSZWxlYXNlLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgbmFtZSA9IERlYnVnUmVsZWFzZS54Y2NvbmZpZzsg
cGF0aCA9IENvbmZpZ3VyYXRpb25zL0RlYnVnUmVsZWFzZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNFRkYxOTg4MUUyNTAwNEY2Q0MyIC8qIEJhc2UueGNjb25m
aWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
LnhjY29uZmlnOyBuYW1lID0gQmFzZS54Y2NvbmZpZzsgcGF0aCA9IENvbmZpZ3VyYXRpb25zL0Jh
c2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOEQzRjAwMTk4ODFG
MjkwMDRGNkNDMiAvKiBMVFJlbGF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExUUmVsYXkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDExOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlw
ZVJlbGF5Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IExUUGlwZVJlbGF5
Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOEQzRjAzMTk4ODFGRTIwMDRGNkND
MiAvKiBMVFBpcGVSZWxheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMVFBpcGVSZWxheS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0YwNDE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxh
eUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTFRSZWxheUNv
bnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDUxOTg4MjQw
NjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
b2JqYzsgcGF0aCA9IExUUmVsYXlDb250cm9sbGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUNFMUZCQzE1MUIyOTBFNzkwMDAxMzZGNSAvKiBDb3JlU2ltdWxhdG9yU1BJLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcmVTaW11bGF0b3JTUEkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLS8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8K
LQotLyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCQkyRThEM0VG
MTE5ODgxRDQzMDA0RjZDQzIgLyogRnJhbWV3b3JrcyAqLyA9IHsKLQkJCWlzYSA9IFBCWEZyYW1l
d29ya3NCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZp
bGVzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwotCQl9OwotLyogRW5kIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQotLyog
QmVnaW4gUEJYR3JvdXAgc2VjdGlvbiAqLwotCQkyRThEM0VFQjE5ODgxRDQzMDA0RjZDQzIgPSB7
Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTJFOEQzRUZGMTk4ODFF
MjUwMDRGNkNDMiAvKiBCYXNlLnhjY29uZmlnICovLAotCQkJCTJFOEQzRUZFMTk4ODFFMTMwMDRG
NkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8sCi0JCQkJMkU4RDNFRjYxOTg4MUQ0MzAw
NEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLywKLQkJCQkyRThEM0VGNTE5ODgxRDQzMDA0RjZD
QzIgLyogUHJvZHVjdHMgKi8sCi0JCQkpOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJ
fTsKLQkJMkU4RDNFRjUxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2R1Y3RzICovID0gewotCQkJaXNh
ID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQkyRThEM0VGNDE5ODgxRDQzMDA0RjZD
QzIgLyogTGF5b3V0VGVzdFJlbGF5ICovLAotCQkJKTsKLQkJCW5hbWUgPSBQcm9kdWN0czsKLQkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCTJFOEQzRUY2MTk4ODFENDMwMDRGNkND
MiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxk
cmVuID0gKAotCQkJCTJFOEQzRUY3MTk4ODFENDMwMDRGNkNDMiAvKiBtYWluLm0gKi8sCi0JCQkJ
Q0UxRkJDMTUxQjI5MEU3OTAwMDEzNkY1IC8qIENvcmVTaW11bGF0b3JTUEkuaCAqLywKLQkJCQky
RThEM0YwMDE5ODgxRjI5MDA0RjZDQzIgLyogTFRSZWxheS5oICovLAotCQkJCTJFOEQzRjAxMTk4
ODFGRDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5tICovLAotCQkJCTJFOEQzRjAzMTk4ODFGRTIw
MDRGNkNDMiAvKiBMVFBpcGVSZWxheS5oICovLAotCQkJCTJFOEQzRjA0MTk4ODI0MDYwMDRGNkND
MiAvKiBMVFJlbGF5Q29udHJvbGxlci5oICovLAotCQkJCTJFOEQzRjA1MTk4ODI0MDYwMDRGNkND
MiAvKiBMVFJlbGF5Q29udHJvbGxlci5tICovLAotCQkJKTsKLQkJCXBhdGggPSBMYXlvdXRUZXN0
UmVsYXk7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotLyogRW5kIFBCWEdyb3Vw
IHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KLQkJMkU4
RDNFRjMxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLyA9IHsKLQkJCWlzYSA9
IFBCWE5hdGl2ZVRhcmdldDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAyRThEM0VGQjE5
ODgxRDQzMDA0RjZDQzIgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVU
YXJnZXQgIkxheW91dFRlc3RSZWxheSIgKi87Ci0JCQlidWlsZFBoYXNlcyA9ICgKLQkJCQkyRThE
M0VGMDE5ODgxRDQzMDA0RjZDQzIgLyogU291cmNlcyAqLywKLQkJCQkyRThEM0VGMTE5ODgxRDQz
MDA0RjZDQzIgLyogRnJhbWV3b3JrcyAqLywKLQkJCQkyRThEM0VGMjE5ODgxRDQzMDA0RjZDQzIg
LyogQ29weUZpbGVzICovLAotCQkJKTsKLQkJCWJ1aWxkUnVsZXMgPSAoCi0JCQkpOwotCQkJZGVw
ZW5kZW5jaWVzID0gKAotCQkJKTsKLQkJCW5hbWUgPSBMYXlvdXRUZXN0UmVsYXk7Ci0JCQlwcm9k
dWN0TmFtZSA9IExheW91dFRlc3RSZWxheTsKLQkJCXByb2R1Y3RSZWZlcmVuY2UgPSAyRThEM0VG
NDE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovOwotCQkJcHJvZHVjdFR5cGUg
PSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS50b29sIjsKLQkJfTsKLS8qIEVuZCBQQlhOYXRpdmVU
YXJnZXQgc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KLQkJMkU4
RDNFRUMxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2plY3Qgb2JqZWN0ICovID0gewotCQkJaXNhID0g
UEJYUHJvamVjdDsKLQkJCWF0dHJpYnV0ZXMgPSB7Ci0JCQkJTGFzdFVwZ3JhZGVDaGVjayA9IDA2
MDA7Ci0JCQkJT1JHQU5JWkFUSU9OTkFNRSA9ICJBcHBsZSwgSW5jLiI7Ci0JCQkJVGFyZ2V0QXR0
cmlidXRlcyA9IHsKLQkJCQkJMkU4RDNFRjMxOTg4MUQ0MzAwNEY2Q0MyID0gewotCQkJCQkJQ3Jl
YXRlZE9uVG9vbHNWZXJzaW9uID0gNi4wOwotCQkJCQl9OwotCQkJCX07Ci0JCQl9OwotCQkJYnVp
bGRDb25maWd1cmF0aW9uTGlzdCA9IDJFOEQzRUVGMTk4ODFENDMwMDRGNkNDMiAvKiBCdWlsZCBj
b25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIkxheW91dFRlc3RSZWxheSIgKi87Ci0J
CQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAzLjIiOwotCQkJZGV2ZWxvcG1lbnRSZWdp
b24gPSBFbmdsaXNoOwotCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDA7Ci0JCQlrbm93blJl
Z2lvbnMgPSAoCi0JCQkJZW4sCi0JCQkpOwotCQkJbWFpbkdyb3VwID0gMkU4RDNFRUIxOTg4MUQ0
MzAwNEY2Q0MyOwotCQkJcHJvZHVjdFJlZkdyb3VwID0gMkU4RDNFRjUxOTg4MUQ0MzAwNEY2Q0My
IC8qIFByb2R1Y3RzICovOwotCQkJcHJvamVjdERpclBhdGggPSAiIjsKLQkJCXByb2plY3RSb290
ID0gIiI7Ci0JCQl0YXJnZXRzID0gKAotCQkJCTJFOEQzRUYzMTk4ODFENDMwMDRGNkNDMiAvKiBM
YXlvdXRUZXN0UmVsYXkgKi8sCi0JCQkpOwotCQl9OwotLyogRW5kIFBCWFByb2plY3Qgc2VjdGlv
biAqLwotCi0vKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0JCTJFOEQz
RUYwMTk4ODFENDMwMDRGNkNDMiAvKiBTb3VyY2VzICovID0gewotCQkJaXNhID0gUEJYU291cmNl
c0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMg
PSAoCi0JCQkJMkU4RDNGMDYxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLm0g
aW4gU291cmNlcyAqLywKLQkJCQkyRThEM0VGODE5ODgxRDQzMDA0RjZDQzIgLyogbWFpbi5tIGlu
IFNvdXJjZXMgKi8sCi0JCQkJMkU4RDNGMDIxOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5
Lm0gaW4gU291cmNlcyAqLywKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKLQkJfTsKLS8qIEVuZCBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICov
Ci0KLS8qIEJlZ2luIFhDQnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjkx
OTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3Vy
YXRpb247Ci0JCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDJFOEQzRUZFMTk4ODFFMTMw
MDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi87Ci0JCQlidWlsZFNldHRpbmdzID0g
ewotCQkJfTsKLQkJCW5hbWUgPSBEZWJ1ZzsKLQkJfTsKLQkJMkU4RDNFRkExOTg4MUQ0MzAwNEY2
Q0MyIC8qIFJlbGVhc2UgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJ
CWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8q
IERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLzsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQl9Owot
CQkJbmFtZSA9IFJlbGVhc2U7Ci0JCX07Ci0JCTJFOEQzRUZDMTk4ODFENDMwMDRGNkNDMiAvKiBE
ZWJ1ZyAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJYmFzZUNvbmZp
Z3VyYXRpb25SZWZlcmVuY2UgPSAyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVidWdSZWxl
YXNlLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlQUk9EVUNUX05BTUUg
PSAiJChUQVJHRVRfTkFNRSkiOwotCQkJfTsKLQkJCW5hbWUgPSBEZWJ1ZzsKLQkJfTsKLQkJMkU4
RDNFRkQxOTg4MUQ0MzAwNEY2Q0MyIC8qIFJlbGVhc2UgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxk
Q29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gMkU4RDNFRkUx
OTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLzsKLQkJCWJ1aWxkU2V0
dGluZ3MgPSB7Ci0JCQkJUFJPRFVDVF9OQU1FID0gIiQoVEFSR0VUX05BTUUpIjsKLQkJCX07Ci0J
CQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLS8qIEVuZCBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0
aW9uICovCi0KLS8qIEJlZ2luIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLwotCQkyRThE
M0VFRjE5ODgxRDQzMDA0RjZDQzIgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQ
cm9qZWN0ICJMYXlvdXRUZXN0UmVsYXkiICovID0gewotCQkJaXNhID0gWENDb25maWd1cmF0aW9u
TGlzdDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCi0JCQkJMkU4RDNFRjkxOTg4MUQ0MzAw
NEY2Q0MyIC8qIERlYnVnICovLAotCQkJCTJFOEQzRUZBMTk4ODFENDMwMDRGNkNDMiAvKiBSZWxl
YXNlICovLAotCQkJKTsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKLQkJ
CWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJlbGVhc2U7Ci0JCX07Ci0JCTJFOEQzRUZCMTk4
ODFENDMwMDRGNkNDMiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRh
cmdldCAiTGF5b3V0VGVzdFJlbGF5IiAqLyA9IHsKLQkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxp
c3Q7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAotCQkJCTJFOEQzRUZDMTk4ODFENDMwMDRG
NkNDMiAvKiBEZWJ1ZyAqLywKLQkJCQkyRThEM0VGRDE5ODgxRDQzMDA0RjZDQzIgLyogUmVsZWFz
ZSAqLywKLQkJCSk7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7Ci0JCQlk
ZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNlOwotCQl9OwotLyogRW5kIFhDQ29uZmln
dXJhdGlvbkxpc3Qgc2VjdGlvbiAqLwotCX07Ci0Jcm9vdE9iamVjdCA9IDJFOEQzRUVDMTk4ODFE
NDMwMDRGNkNDMiAvKiBQcm9qZWN0IG9iamVjdCAqLzsKLX0KSW5kZXg6IFRvb2xzL0xheW91dFRl
c3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvQ29yZVNpbXVsYXRvclNQSS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvQ29yZVNpbXVsYXRvclNQSS5o
CShyZXZpc2lvbiAyMTA3MzUpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJl
bGF5L0NvcmVTaW11bGF0b3JTUEkuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDU4ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWYgX19oYXNfaW5jbHVkZSg8Q29yZVNpbXVsYXRvci9Db3JlU2lt
dWxhdG9yLmg+KQotCi0vKiBGSVhNRTogUmVtb3ZlIHRoZSBiZWxvdyAjZGVmaW5lIG9uY2Ugd2Ug
cmVxdWlyZSBYY29kZSA3LjMgd2l0aCBpT1MgOS4zIFNESyBvciBuZXdlci4gKi8KLSNkZWZpbmUg
X19jb3Jlc2ltX3VuYXZhaWxhYmxlX21zZyhtc2cpCi0jaW1wb3J0IDxDb3JlU2ltdWxhdG9yL0Nv
cmVTaW11bGF0b3IuaD4KLQotLyogRklYTUU6IEFsd2F5cyB1c2UgU2ltU2VydmljZUNvbnRleHQg
b25jZSB3ZSByZXF1aXJlIFhjb2RlIDcuMyB3aXRoIGlPUyA5LjMgU0RLIG9yIG5ld2VyLiAqLwot
I2RlZmluZSBVU0VfU0lNX1NFUlZJQ0VfQ09OVEVYVCBkZWZpbmVkKENPUkVTSU1fQVBJX01BWF9B
TExPV0VEKQotCi0jZWxzZQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQot
I2RlZmluZSBVU0VfU0lNX1NFUlZJQ0VfQ09OVEVYVCAxCi0KLSNkZWZpbmUga1NpbURldmljZUxh
dW5jaEFwcGxpY2F0aW9uQXJndW1lbnRzIEAiYXJndW1lbnRzIgotI2RlZmluZSBrU2ltRGV2aWNl
TGF1bmNoQXBwbGljYXRpb25FbnZpcm9ubWVudCBAImVudmlyb25tZW50IgotCi1AaW50ZXJmYWNl
IFNpbURldmljZSA6IE5TT2JqZWN0Ci0tIChCT09MKWluc3RhbGxBcHBsaWNhdGlvbjooTlNVUkwg
KilpbnN0YWxsVVJMIHdpdGhPcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zIGVycm9yOihO
U0Vycm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci0tIChwaWRfdClsYXVuY2hBcHBsaWNh
dGlvbldpdGhJRDooTlNTdHJpbmcgKilidW5kbGVJRCBvcHRpb25zOihOU0RpY3Rpb25hcnkgKilv
cHRpb25zIGVycm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci1AZW5kCi0K
LUBpbnRlcmZhY2UgU2ltRGV2aWNlU2V0IDogTlNPYmplY3QKLUBwcm9wZXJ0eSAocmVhZG9ubHks
IGNvcHkpIE5TRGljdGlvbmFyeSAqZGV2aWNlc0J5VURJRDsKLUBlbmQKLQotQGludGVyZmFjZSBT
aW1TZXJ2aWNlQ29udGV4dCA6IE5TT2JqZWN0Ci0rKFNpbVNlcnZpY2VDb250ZXh0ICopc2hhcmVk
U2VydmljZUNvbnRleHRGb3JEZXZlbG9wZXJEaXI6KE5TU3RyaW5nICopZGV2ZWxvcGVyRGlyIGVy
cm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci0tKFNpbURldmljZVNldCAq
KWRlZmF1bHREZXZpY2VTZXRXaXRoRXJyb3I6KE5TRXJyb3IgKiBfX2F1dG9yZWxlYXNpbmcgKill
cnJvcjsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0
VGVzdFJlbGF5L0xUUGlwZVJlbGF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJl
bGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5oCShyZXZpc2lvbiAyMTA3MzUpCisrKyBU
b29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5LmgJKG5vbmV4
aXN0ZW50KQpAQCAtMSwzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBMVFBpcGVSZWxh
eV9oCi0jZGVmaW5lIExUUGlwZVJlbGF5X2gKLQotI2ltcG9ydCAiTFRSZWxheS5oIgotCi1AaW50
ZXJmYWNlIExUUGlwZVJlbGF5IDogTlNPYmplY3QgPExUUmVsYXk+Ci1AcHJvcGVydHkgKHdlYWsp
IGlkPExUUmVsYXlEZWxlZ2F0ZT4gcmVsYXlEZWxlZ2F0ZTsKLS0gKGlkKWluaXRXaXRoUHJlZml4
OihOU1N0cmluZyAqKXByZWZpeDsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRU
ZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5tCShyZXZpc2lv
biAyMTA3MzUpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlw
ZVJlbGF5Lm0JKG5vbmV4aXN0ZW50KQpAQCAtMSwxNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bXBvcnQgIkxUUGlwZVJlbGF5LmgiCi0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5o
PgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLUBpbnRl
cmZhY2UgTFRQaXBlUmVsYXkgKCkKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJp
bmcgKmZpZm9QcmVmaXg7Ci1AcHJvcGVydHkgKHN0cm9uZykgTlNPdXRwdXRTdHJlYW0gKnN0YW5k
YXJkSW5wdXRQaXBlOwotQHByb3BlcnR5IChzdHJvbmcpIE5TSW5wdXRTdHJlYW0gKnN0YW5kYXJk
T3V0cHV0UGlwZTsKLUBwcm9wZXJ0eSAoc3Ryb25nKSBOU0lucHV0U3RyZWFtICpzdGFuZGFyZEVy
cm9yUGlwZTsKLQotLSAodm9pZCljcmVhdGVGSUZPczsKLS0gKHZvaWQpZGVzdHJveUZJRk9zOwot
QGVuZAotCi1AaW1wbGVtZW50YXRpb24gTFRQaXBlUmVsYXkKLQotLSAoTlNTdHJpbmcgKilpblBp
cGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmlu
ZzpAIl9JTiJdOwotfQotCi0tIChOU1N0cmluZyAqKW91dFBpcGVQYXRoCi17Ci0gICAgcmV0dXJu
IFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9PVVQiXTsKLX0KLQotLSAo
TlNTdHJpbmcgKillcnJvclBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJp
bmdCeUFwcGVuZGluZ1N0cmluZzpAIl9FUlJPUiJdOwotfQotCi0tIChOU091dHB1dFN0cmVhbSAq
KSBvdXRwdXRTdHJlYW0KLXsKLSAgICByZXR1cm4gX3N0YW5kYXJkSW5wdXRQaXBlOwotfQotCi0t
IChpZClpbml0V2l0aFByZWZpeDooTlNTdHJpbmcgKilwcmVmaXgKLXsKLSAgICBpZiAoKHNlbGYg
PSBbc3VwZXIgaW5pdF0pKSB7Ci0gICAgICAgIF9maWZvUHJlZml4ID0gcHJlZml4OwotICAgICAg
ICBbc2VsZiBkZXN0cm95RklGT3NdOwotICAgIH0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAo
dm9pZClzZXR1cAotewotICAgIFtzZWxmIGRlc3Ryb3lGSUZPc107Ci0gICAgW3NlbGYgY3JlYXRl
RklGT3NdOwotfQotCi0tICh2b2lkKXRlYXJEb3duCi17Ci0gICAgW3NlbGYgZGVzdHJveUZJRk9z
XTsKLX0KLQotLSh2b2lkKSBjb25uZWN0Ci17Ci0gICAgX3N0YW5kYXJkSW5wdXRQaXBlID0gW05T
T3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbVRvRmlsZUF0UGF0aDpbc2VsZiBpblBpcGVQYXRoXSBh
cHBlbmQ6WUVTXTsKLSAgICBfc3RhbmRhcmRPdXRwdXRQaXBlID0gW05TSW5wdXRTdHJlYW0gaW5w
dXRTdHJlYW1XaXRoRmlsZUF0UGF0aDpbc2VsZiBvdXRQaXBlUGF0aF1dOwotICAgIF9zdGFuZGFy
ZEVycm9yUGlwZSA9IFtOU0lucHV0U3RyZWFtIGlucHV0U3RyZWFtV2l0aEZpbGVBdFBhdGg6W3Nl
bGYgZXJyb3JQaXBlUGF0aF1dOwotCi0gICAgW1tzZWxmIHN0YW5kYXJkSW5wdXRQaXBlXSBzZXRE
ZWxlZ2F0ZTpzZWxmXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRQaXBlXSBzZXREZWxlZ2F0
ZTpzZWxmXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRFcnJvclBpcGVdIHNldERlbGVnYXRlOnNlbGZd
OwotCi0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gc2NoZWR1bGVJblJ1bkxvb3A6W05T
UnVuTG9vcCBtYWluUnVuTG9vcF0gZm9yTW9kZTpOU0RlZmF1bHRSdW5Mb29wTW9kZV07Ci0gICAg
W1tzZWxmIHN0YW5kYXJkRXJyb3JQaXBlXSBzY2hlZHVsZUluUnVuTG9vcDpbTlNSdW5Mb29wIG1h
aW5SdW5Mb29wXSBmb3JNb2RlOk5TRGVmYXVsdFJ1bkxvb3BNb2RlXTsKLQotICAgIFtbc2VsZiBz
dGFuZGFyZElucHV0UGlwZV0gb3Blbl07Ci0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0g
b3Blbl07Ci0gICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JQaXBlXSBvcGVuXTsKLQotICAgIFtbc2Vs
ZiByZWxheURlbGVnYXRlXSBkaWRDb25uZWN0XTsKLX0KLQotLSAodm9pZClkaXNjb25uZWN0Ci17
Ci0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gY2xvc2VdOwotICAgIFtbc2VsZiBzdGFu
ZGFyZEVycm9yUGlwZV0gY2xvc2VdOwotICAgIFtbc2VsZiBzdGFuZGFyZElucHV0UGlwZV0gY2xv
c2VdOwotICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWREaXNjb25uZWN0XTsKLX0KLQotLSAo
dm9pZCljcmVhdGVGSUZPcwotewotICAgIG1rZmlmbyhbW3NlbGYgaW5QaXBlUGF0aF0gVVRGOFN0
cmluZ10sIDA2NjYpOwotICAgIG1rZmlmbyhbW3NlbGYgb3V0UGlwZVBhdGhdIFVURjhTdHJpbmdd
LCAwNjY2KTsKLSAgICBta2ZpZm8oW1tzZWxmIGVycm9yUGlwZVBhdGhdIFVURjhTdHJpbmddLCAw
NjY2KTsKLX0KLQotLSAodm9pZClkZXN0cm95RklGT3MKLXsKLSAgICB1bmxpbmsoW1tzZWxmIGlu
UGlwZVBhdGhdIFVURjhTdHJpbmddKTsKLSAgICB1bmxpbmsoW1tzZWxmIG91dFBpcGVQYXRoXSBV
VEY4U3RyaW5nXSk7Ci0gICAgdW5saW5rKFtbc2VsZiBlcnJvclBpcGVQYXRoXSBVVEY4U3RyaW5n
XSk7Ci19Ci0KLS0gKHZvaWQpIHJlbGF5U3RyZWFtOihOU0lucHV0U3RyZWFtICopc3RyZWFtCi17
Ci0gICAgdWludDhfdCBieXRlc1sxMDI0XTsKLSAgICBOU0ludGVnZXIgYnl0ZXNSZWFkID0gW3N0
cmVhbSByZWFkOmJ5dGVzIG1heExlbmd0aDoxMDI0XTsKLSAgICBOU0RhdGEgKmRhdGEgPSBbTlNE
YXRhIGRhdGFXaXRoQnl0ZXM6Ynl0ZXMgbGVuZ3RoOmJ5dGVzUmVhZF07Ci0KLSAgICBpZiAoc3Ry
ZWFtID09IFtzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0pCi0gICAgICAgIFtbc2VsZiByZWxheURl
bGVnYXRlXSBkaWRSZWNlaXZlU3Rkb3V0RGF0YTpkYXRhXTsKLSAgICBlbHNlCi0gICAgICAgIFtb
c2VsZiByZWxheURlbGVnYXRlXSBkaWRSZWNlaXZlU3RkZXJyRGF0YTpkYXRhXTsKLX0KLQotLSAo
dm9pZClzdHJlYW06KE5TU3RyZWFtICopYVN0cmVhbSBoYW5kbGVFdmVudDooTlNTdHJlYW1FdmVu
dClldmVudENvZGUKLXsKLSAgICBzd2l0Y2ggKGV2ZW50Q29kZSkgewotICAgIGNhc2UgTlNTdHJl
YW1FdmVudE5vbmU6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlNTdHJlYW1FdmVudEhhc0J5
dGVzQXZhaWxhYmxlOgotICAgICAgICBbc2VsZiByZWxheVN0cmVhbTooTlNJbnB1dFN0cmVhbSAq
KWFTdHJlYW1dOwotICAgIGNhc2UgTlNTdHJlYW1FdmVudEhhc1NwYWNlQXZhaWxhYmxlOgotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnRPcGVuQ29tcGxldGVkOgotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnRFbmRFbmNvdW50ZXJlZDoKLSAgICAgICAg
W1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZENyYXNoV2l0aE1lc3NhZ2U6bmlsXTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBOU1N0cmVhbUV2ZW50RXJyb3JPY2N1cnJlZDoKLSAgICAgICAgW1tz
ZWxmIHJlbGF5RGVsZWdhdGVdIGRpZENyYXNoV2l0aE1lc3NhZ2U6W1thU3RyZWFtIHN0cmVhbUVy
cm9yXSBkZXNjcmlwdGlvbl1dOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLUBlbmQKSW5k
ZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheS5o
CShyZXZpc2lvbiAyMTA3MzUpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJl
bGF5L0xUUmVsYXkuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIExUUmVsYXlfaAotI2RlZmluZSBMVFJlbGF5X2gKLQotI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLUBwcm90b2NvbCBMVFJlbGF5RGVsZWdhdGUgPE5TT2JqZWN0
PgotLSAodm9pZClkaWRDb25uZWN0OwotLSAodm9pZClkaWREaXNjb25uZWN0OwotLSAodm9pZClk
aWRDcmFzaFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2U7Ci0tICh2b2lkKWRpZFJlY2Vp
dmVTdGRvdXREYXRhOihOU0RhdGEgKilkYXRhOwotLSAodm9pZClkaWRSZWNlaXZlU3RkZXJyRGF0
YTooTlNEYXRhICopZGF0YTsKLUBlbmQKLQotQHByb3RvY29sIExUUmVsYXkgPE5TT2JqZWN0LCBO
U1N0cmVhbURlbGVnYXRlPgotLSAodm9pZClzZXR1cDsKLS0gKHZvaWQpdGVhckRvd247Ci0tICh2
b2lkKWNvbm5lY3Q7Ci0tICh2b2lkKWRpc2Nvbm5lY3Q7Ci1AcHJvcGVydHkgKHdlYWspIGlkPExU
UmVsYXlEZWxlZ2F0ZT4gcmVsYXlEZWxlZ2F0ZTsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9u
ZykgTlNPdXRwdXRTdHJlYW0gKm91dHB1dFN0cmVhbTsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBU
b29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJl
bGF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAyMTA3MzUpCisrKyBUb29scy9MYXlvdXRUZXN0UmVs
YXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLmgJKG5vbmV4aXN0ZW50KQpAQCAt
MSw0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgTFRSZWxheUNvbnRyb2xsZXJfaAotI2Rl
ZmluZSBMVFJlbGF5Q29udHJvbGxlcl9oCi0KLSNpbXBvcnQgIkxUUmVsYXkuaCIKLQotI2ltcG9y
dCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLUBjbGFzcyBTaW1EZXZpY2U7Ci0KLUBpbnRl
cmZhY2UgTFRSZWxheUNvbnRyb2xsZXIgOiBOU09iamVjdCA8TFRSZWxheURlbGVnYXRlPgotLSAo
aWQpaW5pdFdpdGhEZXZpY2U6KFNpbURldmljZSAqKWRldmljZSBwcm9kdWN0RGlyOihOU1N0cmlu
ZyAqKXByb2R1Y3REaXIgYXBwUGF0aDooTlNTdHJpbmcgKilhcHBQYXRoIGRldmljZVVESUQ6KE5T
VVVJRCAqKXVkaWQgZHVtcFRvb2xBcmd1bWVudHM6KE5TQXJyYXkgKilhcmd1bWVudHM7Ci0tICh2
b2lkKXN0YXJ0OwotLSAodm9pZClmaW5pc2g7Ci1AZW5kCi0KLSNlbmRpZgpJbmRleDogVG9vbHMv
TGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheUNv
bnRyb2xsZXIubQkocmV2aXNpb24gMjEwNzM1KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xh
eW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5tCShub25leGlzdGVudCkKQEAgLTEsMjcy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJMVFJlbGF5Q29udHJvbGxlci5oIgotCi0j
aW1wb3J0ICJDb3JlU2ltdWxhdG9yU1BJLmgiCi0jaW1wb3J0ICJMVFBpcGVSZWxheS5oIgotI2lt
cG9ydCA8QXBwS2l0L0FwcEtpdC5oPgotI2ltcG9ydCA8Y3J0X2V4dGVybnMuaD4KLQotQGludGVy
ZmFjZSBMVFJlbGF5Q29udHJvbGxlciAoKQotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBk
aXNwYXRjaF9zb3VyY2VfdCBzdGFuZGFyZElucHV0RGlzcGF0Y2hTb3VyY2U7Ci1AcHJvcGVydHkg
KHJlYWRvbmx5LCBzdHJvbmcpIE5TRmlsZUhhbmRsZSAqc3RhbmRhcmRPdXRwdXQ7Ci1AcHJvcGVy
dHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TRmlsZUhhbmRsZSAqc3RhbmRhcmRFcnJvcjsKLUBwcm9w
ZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKmlwY0lkZW50aWZpZXI7Ci1AcHJvcGVy
dHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TU3RyaW5nICphcHBCdW5kbGVJZGVudGlmaWVyOwotQHBy
b3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU1N0cmluZyAqYXBwUGF0aDsKLUBwcm9wZXJ0eSAo
cmVhZG9ubHksIHN0cm9uZykgTlNVVUlEICpkZXZpY2VVRElEOwotQHByb3BlcnR5IChyZWFkb25s
eSwgc3Ryb25nKSBOU0FycmF5ICpkdW1wVG9vbEFyZ3VtZW50czsKLUBwcm9wZXJ0eSAocmVhZG9u
bHksIHN0cm9uZykgTlNTdHJpbmcgKnByb2R1Y3REaXI7Ci1AcHJvcGVydHkgKHN0cm9uZykgU2lt
RGV2aWNlICpkZXZpY2U7Ci1AcHJvcGVydHkgKHN0cm9uZykgaWQ8TFRSZWxheT4gcmVsYXk7Ci1A
cHJvcGVydHkgcGlkX3QgcGlkOwotQHByb3BlcnR5IChzdHJvbmcpIGRpc3BhdGNoX3NvdXJjZV90
IGFwcERpc3BhdGNoU291cmNlOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gTFRSZWxheUNvbnRy
b2xsZXIKLQotLSAoaWQpaW5pdFdpdGhEZXZpY2U6KFNpbURldmljZSAqKWRldmljZSBwcm9kdWN0
RGlyOihOU1N0cmluZyAqKXByb2R1Y3REaXIgYXBwUGF0aDooTlNTdHJpbmcgKilhcHBQYXRoIGRl
dmljZVVESUQ6KE5TVVVJRCAqKXVkaWQgZHVtcFRvb2xBcmd1bWVudHM6KE5TQXJyYXkgKilhcmd1
bWVudHMKLXsKLSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKSB7Ci0gICAgICAgIF9kZXZp
Y2UgPSBkZXZpY2U7Ci0gICAgICAgIF9wcm9kdWN0RGlyID0gcHJvZHVjdERpcjsKLSAgICAgICAg
X2FwcFBhdGggPSBhcHBQYXRoOwotICAgICAgICBfYXBwQnVuZGxlSWRlbnRpZmllciA9IFtbTlNC
dW5kbGUgYnVuZGxlV2l0aFBhdGg6YXBwUGF0aF0gYnVuZGxlSWRlbnRpZmllcl07Ci0gICAgICAg
IF9kZXZpY2VVRElEID0gdWRpZDsKLSAgICAgICAgX2R1bXBUb29sQXJndW1lbnRzID0gYXJndW1l
bnRzOwotICAgICAgICBfc3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNlID0gZGlzcGF0Y2hfc291
cmNlX2NyZWF0ZShESVNQQVRDSF9TT1VSQ0VfVFlQRV9SRUFELCBTVERJTl9GSUxFTk8sIDAsIGRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCkpOwotICAgICAgICBfc3RhbmRhcmRPdXRwdXQgPSBbTlNG
aWxlSGFuZGxlIGZpbGVIYW5kbGVXaXRoU3RhbmRhcmRPdXRwdXRdOwotICAgICAgICBfc3RhbmRh
cmRFcnJvciA9IFtOU0ZpbGVIYW5kbGUgZmlsZUhhbmRsZVdpdGhTdGFuZGFyZEVycm9yXTsKLQot
ICAgICAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2V2ZW50X2hhbmRsZXIoX3N0YW5kYXJkSW5wdXRE
aXNwYXRjaFNvdXJjZSwgXnsKLSAgICAgICAgICAgIHVpbnQ4X3QgYnVmZmVyWzEwMjRdOwotICAg
ICAgICAgICAgc3NpemVfdCBsZW4gPSByZWFkKFNURElOX0ZJTEVOTywgYnVmZmVyLCBzaXplb2Yo
YnVmZmVyKSk7Ci0gICAgICAgICAgICBpZiAobGVuID4gMCkgewotICAgICAgICAgICAgICAgIEB0
cnkgewotICAgICAgICAgICAgICAgICAgICBbW1tzZWxmIHJlbGF5XSBvdXRwdXRTdHJlYW1dIHdy
aXRlOmJ1ZmZlciBtYXhMZW5ndGg6bGVuXTsKLSAgICAgICAgICAgICAgICB9IEBjYXRjaCAoTlNF
eGNlcHRpb24gKmUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQnJva2VuIHBpcGUgLSB0aGUg
ZHVtcCB0b29sIGNyYXNoZWQuIFRpbWUgdG8gZGllLgotICAgICAgICAgICAgICAgICAgICBbc2Vs
ZiBkaWRDcmFzaFdpdGhNZXNzYWdlOm5pbF07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBFT0YgUmVjZWl2ZWQgb24gdGhlIHJlbGF5
J3Mgc3RhbmRhcmQgaW5wdXQuCi0gICAgICAgICAgICAgICAgW3NlbGYgZmluaXNoXTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgX3JlbGF5ID0gW1tMVFBpcGVSZWxheSBh
bGxvY10gaW5pdFdpdGhQcmVmaXg6W0AiL3RtcCIgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9u
ZW50OnNlbGYuaXBjSWRlbnRpZmllcl1dOwotICAgICAgICBbX3JlbGF5IHNldFJlbGF5RGVsZWdh
dGU6c2VsZl07Ci0gICAgfQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChOU1N0cmluZyAqKWlw
Y0lkZW50aWZpZXIKLXsKLSAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIl
QC0lQCIsIHNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciwgc2VsZi5kZXZpY2VVRElELlVVSURTdHJp
bmddOwotfQotCi0tIChOU1N0cmluZyAqKXByb2Nlc3NOYW1lCi17Ci0gICAgcmV0dXJuIFtzZWxm
LmFwcEJ1bmRsZUlkZW50aWZpZXIgY29tcG9uZW50c1NlcGFyYXRlZEJ5U3RyaW5nOkAiLiJdLmxh
c3RPYmplY3Q7Ci19Ci0KLS0gKHZvaWQpZGlkUmVjZWl2ZVN0ZG91dERhdGE6KE5TRGF0YSAqKWRh
dGEKLXsKLSAgICBAdHJ5IHsKLSAgICAgICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0XSB3cml0ZURh
dGE6ZGF0YV07Ci0gICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRpb24pIHsKLSAgICAg
ICAgLy8gTlNGaWxlSGFuZGxlT3BlcmF0aW9uRXhjZXB0aW9uCi0gICAgICAgIC8vIEJyb2tlbiBw
aXBlIC0gdGhlIHRlc3QgaGFybmVzcyBzdG9wcGVkIGxpc3RlbmluZyB0byB1cywKLSAgICAgICAg
Ly8gcHJvYmFibHkgYmVjYXVzZSB3ZSB0aW1lZCBvdXQgb3IgYSBydW4gd2FzIGNhbmNlbGVkLgot
ICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotfQotCi0tICh2b2lkKWRpZFJlY2Vp
dmVTdGRlcnJEYXRhOihOU0RhdGEgKilkYXRhCi17Ci0gICAgQHRyeSB7Ci0gICAgICAgIFtbc2Vs
ZiBzdGFuZGFyZEVycm9yXSB3cml0ZURhdGE6ZGF0YV07Ci0gICAgfSBAY2F0Y2ggKE5TRXhjZXB0
aW9uICpleGNlcHRpb24pIHsKLSAgICAgICAgLy8gTlNGaWxlSGFuZGxlT3BlcmF0aW9uRXhjZXB0
aW9uCi0gICAgICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhlIHRlc3QgaGFybmVzcyBzdG9wcGVkIGxp
c3RlbmluZyB0byB1cywKLSAgICAgICAgLy8gcHJvYmFibHkgYmVjYXVzZSB3ZSB0aW1lZCBvdXQg
b3IgYSBydW4gd2FzIGNhbmNlbGVkLgotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAg
fQotfQotCi0tICh2b2lkKWRpZERpc2Nvbm5lY3QKLXsKLSAgICBkaXNwYXRjaF9zdXNwZW5kKFtz
ZWxmIHN0YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJjZV0pOwotfQotCi0tICh2b2lkKWRpZENvbm5l
Y3QKLXsKLSAgICBkaXNwYXRjaF9yZXN1bWUoW3NlbGYgc3RhbmRhcmRJbnB1dERpc3BhdGNoU291
cmNlXSk7Ci19Ci0KLS0gKHZvaWQpZGlkQ3Jhc2hXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNz
YWdlCi17Ci0gICAgW1tzZWxmIHJlbGF5XSBkaXNjb25uZWN0XTsKLSAgICBOU1N0cmluZyAqY3Jh
c2hNZXNzYWdlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJcbiNDUkFTSEVEIC0gJUAg
KHBpZCAlZClcbiIsIFtzZWxmIHByb2Nlc3NOYW1lXSwgW3NlbGYgcGlkXV07Ci0KLSAgICBpZiAo
bWVzc2FnZSkKLSAgICAgICAgY3Jhc2hNZXNzYWdlID0gW2NyYXNoTWVzc2FnZSBzdHJpbmdCeUFw
cGVuZGluZ0Zvcm1hdDpAIiVAXG4iLCBtZXNzYWdlXTsKLQotICAgIFtbc2VsZiBzdGFuZGFyZEVy
cm9yXSB3cml0ZURhdGE6W2NyYXNoTWVzc2FnZSBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJp
bmdFbmNvZGluZ11dOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSBjbG9zZUZpbGVdOwotICAg
IFtbc2VsZiBzdGFuZGFyZE91dHB1dF0gY2xvc2VGaWxlXTsKLSAgICBleGl0KEVYSVRfRkFJTFVS
RSk7Ci19Ci0KLS0gKHZvaWQpaW5zdGFsbEFwcAotewotICAgIE5TRGljdGlvbmFyeSAqaW5zdGFs
bE9wdGlvbnMgPSBAewotICAgICAgICAoTlNTdHJpbmcgKilrQ0ZCdW5kbGVJZGVudGlmaWVyS2V5
OiBzZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIsCi0gICAgfTsKLQotICAgIE5TRXJyb3IgKmVycm9y
ID0gbmlsOwotICAgIEJPT0wgaW5zdGFsbGVkID0gW3NlbGYuZGV2aWNlIGluc3RhbGxBcHBsaWNh
dGlvbjpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnNlbGYuYXBwUGF0aF0gd2l0aE9wdGlvbnM6aW5z
dGFsbE9wdGlvbnMgZXJyb3I6JmVycm9yXTsKLSAgICBpZiAoIWluc3RhbGxlZCkgewotICAgICAg
ICBOU0xvZyhAIkNvdWxkbid0IGluc3RhbGwgJUA6ICVAIiwgc2VsZi5hcHBQYXRoLCBlcnJvci5k
ZXNjcmlwdGlvbik7Ci0gICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci19Ci0KLS0g
KHZvaWQpa2lsbEFwcAotewotICAgIGRpc3BhdGNoX3NvdXJjZV90IGRpc3BhdGNoID0gW3NlbGYg
YXBwRGlzcGF0Y2hTb3VyY2VdOwotCi0gICAgaWYgKGRpc3BhdGNoKQotICAgICAgICBkaXNwYXRj
aF9zb3VyY2VfY2FuY2VsKGRpc3BhdGNoKTsKLQotICAgIGlmIChbc2VsZiBwaWRdID4gMSkgewot
ICAgICAgICBraWxsKHNlbGYucGlkLCBTSUdLSUxMKTsKLSAgICAgICAgW3NlbGYgc2V0UGlkOi0x
XTsKLSAgICB9Ci0gICAgW3NlbGYgc2V0QXBwRGlzcGF0Y2hTb3VyY2U6bmlsXTsKLX0KLQotLSAo
TlNEaWN0aW9uYXJ5ICopX2Vudmlyb25tZW50VmFyaWFibGVzCi17Ci0gICAgc3RhdGljIE5TRGlj
dGlvbmFyeSAqZW52aXJvbm1lbnRWYXJpYWJsZXM7Ci0gICAgc3RhdGljIGRpc3BhdGNoX29uY2Vf
dCBvbmNlOwotCi0gICAgZGlzcGF0Y2hfb25jZSgmb25jZSwgXnsKLSAgICAgICAgTlNTdHJpbmcg
KnByb2R1Y3REaXJlY3RvcnkgPSBbc2VsZiBwcm9kdWN0RGlyXTsKLQotICAgICAgICBOU011dGFi
bGVEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gW0B7Ci0gICAgICAgICAgICBAIklQQ19JREVOVElG
SUVSIjogc2VsZi5pcGNJZGVudGlmaWVyLAotICAgICAgICAgICAgQCJEWUxEX0ZSQU1FV09SS19Q
QVRIIjogcHJvZHVjdERpcmVjdG9yeSwKLSAgICAgICAgICAgIEAiX19YUENfRFlMRF9GUkFNRVdP
UktfUEFUSCI6IHByb2R1Y3REaXJlY3RvcnksCi0gICAgICAgICAgICBAIkRZTERfTElCUkFSWV9Q
QVRIIjogcHJvZHVjdERpcmVjdG9yeSwKLSAgICAgICAgICAgIEAiX19YUENfRFlMRF9MSUJSQVJZ
X1BBVEgiOiBwcm9kdWN0RGlyZWN0b3J5LAotICAgICAgICB9IG11dGFibGVDb3B5XTsKLQotICAg
ICAgICBmb3IgKE5TU3RyaW5nICprZXlOYW1lIGluIEBbQCJEWUxEX0lOU0VSVF9MSUJSQVJJRVMi
LCBAIk1hbGxvY1N0YWNrTG9nZ2luZyIsIEAiTE9DQUxfUkVTT1VSQ0VfUk9PVCIsIEAiRFVNUFJF
TkRFUlRSRUVfVEVNUCJdKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiB2YWx1ZSA9IGdldGVu
dihba2V5TmFtZSBVVEY4U3RyaW5nXSk7Ci0gICAgICAgICAgICBpZiAodmFsdWUgJiYgc3RybGVu
KHZhbHVlKSkgewotICAgICAgICAgICAgICAgIE5TU3RyaW5nICpuc1ZhbHVlID0gW05TU3RyaW5n
IHN0cmluZ1dpdGhVVEY4U3RyaW5nOnZhbHVlXTsKLSAgICAgICAgICAgICAgICBbZGljdGlvbmFy
eSBzZXRPYmplY3Q6bnNWYWx1ZSBmb3JLZXk6a2V5TmFtZV07Ci0gICAgICAgICAgICAgICAgW2Rp
Y3Rpb25hcnkgc2V0T2JqZWN0Om5zVmFsdWUgZm9yS2V5OltAIl9fWFBDXyIgc3RyaW5nQnlBcHBl
bmRpbmdTdHJpbmc6a2V5TmFtZV1dOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgZm9yIChjaGFyKiogZW52cCA9ICpfTlNHZXRFbnZpcm9uKCk7ICplbnZwOyBlbnZwKyspIHsK
LSAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVudiA9ICplbnZwOwotICAgICAgICAgICAgaWYgKCFz
dHJuY21wKCJKU0NfIiwgZW52LCA0KSB8fCAhc3RybmNtcCgiX19YUENfSlNDXyIsIGVudiwgMTAp
KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXF1YWwgPSBzdHJjaHIoZW52LCAnPScp
OwotICAgICAgICAgICAgICAgIGlmICghZXF1YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgTlNM
b2coQCJNaXNzaW5nICc9JyBpbiBlbnYgdmFyICclcyciLCBlbnYpOwotICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IG1heEtleUxlbmd0aCA9IDI1NjsKLSAgICAgICAgICAgICAgICBzaXpl
X3Qga2V5TGVuZ3RoID0gZXF1YWwgLSBlbnY7Ci0gICAgICAgICAgICAgICAgaWYgKGtleUxlbmd0
aCA+PSBtYXhLZXlMZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgTlNMb2coQCJFbnYgdmFy
ICclcycgaXMgdG9vIGxvbmciLCBlbnYpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjaGFyIGtleVttYXhLZXlMZW5n
dGhdOwotICAgICAgICAgICAgICAgIHN0cm5jcHkoa2V5LCBlbnYsIGtleUxlbmd0aCk7Ci0gICAg
ICAgICAgICAgICAga2V5W2tleUxlbmd0aF0gPSAnXDAnOwotICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIqIHZhbHVlID0gZXF1YWwgKyAxOwotCi0gICAgICAgICAgICAgICAgTlNTdHJpbmcgKm5z
S2V5ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmtleV07Ci0gICAgICAgICAgICAg
ICAgTlNTdHJpbmcgKm5zVmFsdWUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6dmFs
dWVdOwotICAgICAgICAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpuc1ZhbHVlIGZvcktl
eTpuc0tleV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBlbnZpcm9ubWVu
dFZhcmlhYmxlcyA9IFtkaWN0aW9uYXJ5IGNvcHldOwotICAgIH0pOwotCi0gICAgcmV0dXJuIGVu
dmlyb25tZW50VmFyaWFibGVzOwotfQotCi0tICh2b2lkKWxhdW5jaEFwcAotewotICAgIE5TRGlj
dGlvbmFyeSAqbGF1bmNoT3B0aW9ucyA9IEB7Ci0gICAgICAgIGtTaW1EZXZpY2VMYXVuY2hBcHBs
aWNhdGlvbkVudmlyb25tZW50OiBbc2VsZiBfZW52aXJvbm1lbnRWYXJpYWJsZXNdLAotICAgICAg
ICBrU2ltRGV2aWNlTGF1bmNoQXBwbGljYXRpb25Bcmd1bWVudHM6IFtzZWxmIGR1bXBUb29sQXJn
dW1lbnRzXSwKLSAgICB9OwotCi0gICAgTlNFcnJvciAqZXJyb3I7Ci0gICAgcGlkX3QgcGlkID0g
W3NlbGYuZGV2aWNlIGxhdW5jaEFwcGxpY2F0aW9uV2l0aElEOnNlbGYuYXBwQnVuZGxlSWRlbnRp
ZmllciBvcHRpb25zOmxhdW5jaE9wdGlvbnMgZXJyb3I6JmVycm9yXTsKLQotICAgIGlmIChwaWQg
PCAwKSB7Ci0gICAgICAgIE5TTG9nKEAiQ291bGRuJ3QgbGF1bmNoICVAOiAlQCIsIHNlbGYuYXBw
QnVuZGxlSWRlbnRpZmllciwgZXJyb3IuZGVzY3JpcHRpb24pOwotICAgICAgICBleGl0KEVYSVRf
RkFJTFVSRSk7Ci0gICAgfQotCi0gICAgW3NlbGYgc2V0UGlkOnBpZF07Ci0KLSAgICBkaXNwYXRj
aF9xdWV1ZV90IHF1ZXVlID0gZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKTsKLSAgICBkaXNwYXRj
aF9zb3VyY2VfdCBzaW11bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3VyY2UgPSBkaXNwYXRjaF9zb3Vy
Y2VfY3JlYXRlKERJU1BBVENIX1NPVVJDRV9UWVBFX1BST0MsIFtzZWxmIHBpZF0sIERJU1BBVENI
X1BST0NfRVhJVCwgcXVldWUpOwotICAgIFtzZWxmIHNldEFwcERpc3BhdGNoU291cmNlOnNpbXVs
YXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZV07Ci0gICAgZGlzcGF0Y2hfc291cmNlX3NldF9ldmVu
dF9oYW5kbGVyKHNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSwgXnsKLSAgICAgICAgZGlz
cGF0Y2hfc291cmNlX2NhbmNlbChzaW11bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3VyY2UpOwotICAg
ICAgICBbc2VsZiBkaWRDcmFzaFdpdGhNZXNzYWdlOm5pbF07Ci0gICAgfSk7Ci0gICAgZGlzcGF0
Y2hfcmVzdW1lKHNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSk7Ci19Ci0KLS0gKHZvaWQp
c3RhcnQKLXsKLSAgICBbc2VsZiBpbnN0YWxsQXBwXTsKLSAgICBbW3NlbGYgcmVsYXldIHNldHVw
XTsKLSAgICBbc2VsZiBsYXVuY2hBcHBdOwotICAgIFtbc2VsZiByZWxheV0gY29ubmVjdF07Ci19
Ci0KLS0gKHZvaWQpZmluaXNoCi17Ci0gICAgW1tzZWxmIHJlbGF5XSBkaXNjb25uZWN0XTsKLSAg
ICBbc2VsZiBraWxsQXBwXTsKLSAgICBleGl0KEVYSVRfU1VDQ0VTUyk7Ci19Ci0KLUBlbmQKSW5k
ZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvbWFpbi5tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvbWFpbi5tCShyZXZp
c2lvbiAyMTA3MzUpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L21h
aW4ubQkobm9uZXhpc3RlbnQpCkBAIC0xLDEzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2ltcG9ydCAiQ29yZVNpbXVsYXRvclNQSS5oIgotI2ltcG9ydCAiTFRSZWxheUNvbnRyb2xsZXIu
aCIKLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi1zdGF0aWMgTFRSZWxheUNv
bnRyb2xsZXIgKnJlbGF5Q29udHJvbGxlcjsKLQotdm9pZCB1c2FnZSgpCi17Ci0gICAgTlNTdHJp
bmcgKmhlbHBUZXh0ID0gQCJMYXlvdXRUZXN0UmVsYXk6IHJ1biBhIGR1bXAgdG9vbCBpbiB0aGUg
c2ltdWxhdG9yLiBOb3QgZm9yIGRpcmVjdCBjb25zdW1wdGlvbi5cbiIKLSAgICAgICAgIlVzYWdl
OiBMYXlvdXRUZXN0UmVsYXkgWy1oXSBbb3B0aW9uc10gLS0gW2R1bXAgdG9vbCBhcmd1bWVudHNd
XG4iCi0gICAgICAgICJSZXF1aXJlZCBvcHRpb25zOlxuIgotICAgICAgICAiICAgIC11ZGlkIDxp
ZGVudGlmaWVyPiAgICAgICBTaW11bGF0b3IgZGV2aWNlIGlkZW50aWZpZXJcbiIKLSAgICAgICAg
IiAgICAtYXBwIDxhcHBfcGF0aD4gICAgICAgICAgUGF0aCB0byB0aGUgYnVpbHQgaU9TIC5hcHAg
YnVuZGxlIGRpcmVjdG9yeS5cbiIKLSAgICAgICAgIiAgICAtcHJvZHVjdERpciA8ZGlyPiAgICAg
ICAgL3BhdGgvdG8vV2ViS2l0QnVpbGQve2NvbmZpZ3VyYXRpb259LXtzaG9ydCBwbGF0Zm9ybX0u
XG4iOwotCi0gICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgW2hlbHBUZXh0IFVURjhTdHJpbmdd
KTsKLX0KLQotTlNTdHJpbmcgKmdldFJlcXVpcmVkU3RyaW5nQXJndW1lbnQoTlNTdHJpbmcgKnBh
cmFtZXRlcikKLXsKLSAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVs
dHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdOwotICAgIE5TU3RyaW5nICphcmd1bWVudCA9IFtkZWZh
dWx0cyBzdHJpbmdGb3JLZXk6cGFyYW1ldGVyXTsKLQotICAgIGlmICghYXJndW1lbnQpIHsKLSAg
ICAgICAgTlNMb2coQCItJUAgaXMgcmVxdWlyZWQuIiwgcGFyYW1ldGVyKTsKLSAgICAgICAgdXNh
Z2UoKTsKLSAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0KLSAgICByZXR1cm4gYXJn
dW1lbnQ7Ci19Ci0KLU5TQXJyYXkgKmdldER1bXBUb29sQXJndW1lbnRzKCkKLXsKLSAgICBOU011
dGFibGVBcnJheSAqZHVtcFRvb2xBcmd1bWVudHMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0XTsKLSAgICBOU0FycmF5ICpwcm9jZXNzQXJncyA9IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNz
SW5mb10gYXJndW1lbnRzXTsKLSAgICBCT09MIGFwcGVuZGluZyA9IE5POwotICAgIGZvciAoTlNT
dHJpbmcgKmFyZyBpbiBwcm9jZXNzQXJncykgewotICAgICAgICBpZiAoW2FyZyBpc0VxdWFsVG9T
dHJpbmc6QCItLSJdKSB7Ci0gICAgICAgICAgICBhcHBlbmRpbmcgPSBZRVM7Ci0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoYXBwZW5kaW5nKQotICAgICAgICAg
ICAgW2R1bXBUb29sQXJndW1lbnRzIGFkZE9iamVjdDphcmddOwotICAgIH0KLSAgICByZXR1cm4g
ZHVtcFRvb2xBcmd1bWVudHM7Ci19Ci0KLXZvaWQgZmluaXNoKCkKLXsKLSAgICBbcmVsYXlDb250
cm9sbGVyIGZpbmlzaF07Ci19Ci0KLXZvaWQgcmVjZWl2ZWRTaWduYWwoaW50IHNpZ25hbCkKLXsK
LSAgICBleGl0KEVYSVRfU1VDQ0VTUyk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjb25zdCBj
aGFyICogYXJndltdKQotewotICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBOU0FycmF5
ICpoZWxwQXJndW1lbnRzID0gQFtAIi1oIiwgQCItLWhlbHAiXTsKLSAgICAgICAgZm9yIChOU1N0
cmluZyAqaGVscEFyZ3VtZW50IGluIGhlbHBBcmd1bWVudHMpIHsKLSAgICAgICAgICAgIGlmIChb
W1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBhcmd1bWVudHNdIGluZGV4T2ZPYmplY3Q6aGVs
cEFyZ3VtZW50XSAhPSBOU05vdEZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgdXNhZ2UoKTsKLSAg
ICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotI2lmIFVTRV9TSU1fU0VSVklDRV9DT05URVhUCi0gICAgICAgIE5TU3RyaW5nICpkZXZl
bG9wZXJEaXJlY3RvcnkgPSBnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAiZGV2ZWxvcGVyRGly
Iik7Ci0jZW5kaWYKLSAgICAgICAgTlNVVUlEICp1ZGlkID0gW1tOU1VVSUQgYWxsb2NdIGluaXRX
aXRoVVVJRFN0cmluZzpnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAidWRpZCIpXTsKLSAgICAg
ICAgTlNTdHJpbmcgKmFwcFBhdGggPSBnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAiYXBwIik7
Ci0gICAgICAgIE5TU3RyaW5nICpwcm9kdWN0RGlyZWN0b3J5ID0gZ2V0UmVxdWlyZWRTdHJpbmdB
cmd1bWVudChAInByb2R1Y3REaXIiKTsKLSAgICAgICAgTlNBcnJheSAqZHVtcFRvb2xBcmd1bWVu
dHMgPSBnZXREdW1wVG9vbEFyZ3VtZW50cygpOwotCi0jaWYgVVNFX1NJTV9TRVJWSUNFX0NPTlRF
WFQKLSAgICAgICAgTlNFcnJvciAqZXJyb3I7Ci0gICAgICAgIFNpbVNlcnZpY2VDb250ZXh0ICpz
ZXJ2aWNlQ29udGV4dCA9IFtTaW1TZXJ2aWNlQ29udGV4dCBzaGFyZWRTZXJ2aWNlQ29udGV4dEZv
ckRldmVsb3BlckRpcjpkZXZlbG9wZXJEaXJlY3RvcnkgZXJyb3I6JmVycm9yXTsKLSAgICAgICAg
aWYgKCFzZXJ2aWNlQ29udGV4dCkgewotICAgICAgICAgICAgTlNMb2coQCJEZXZpY2UgY29udGV4
dCBjb3VsZG4ndCBiZSBmb3VuZDogJUAiLCBlcnJvcik7Ci0gICAgICAgICAgICBleGl0KEVYSVRf
RkFJTFVSRSk7Ci0gICAgICAgIH0KLSAgICAgICAgU2ltRGV2aWNlU2V0ICpkZXZpY2VTZXQgPSBb
c2VydmljZUNvbnRleHQgZGVmYXVsdERldmljZVNldFdpdGhFcnJvcjpuaWxdOwotICAgICAgICBp
ZiAoIWRldmljZVNldCkgewotICAgICAgICAgICAgTlNMb2coQCJEZWZhdWx0IGRldmljZSBzZXQg
Y291bGRuJ3QgYmUgZm91bmQ6ICVAIiwgZXJyb3IpOwotICAgICAgICAgICAgZXhpdChFWElUX0ZB
SUxVUkUpOwotICAgICAgICB9Ci0gICAgICAgIFNpbURldmljZSAqZGV2aWNlID0gW2RldmljZVNl
dC5kZXZpY2VzQnlVRElEIG9iamVjdEZvcktleTp1ZGlkXTsKLSNlbHNlCi0gICAgICAgIFNpbURl
dmljZSAqZGV2aWNlID0gW1NpbURldmljZVNldC5kZWZhdWx0U2V0LmRldmljZXNCeVVESUQgb2Jq
ZWN0Rm9yS2V5OnVkaWRdOwotI2VuZGlmCi0gICAgICAgIGlmICghZGV2aWNlKSB7Ci0gICAgICAg
ICAgICBOU0xvZyhAIkRldmljZSAlQCBjb3VsZG4ndCBiZSBmb3VuZCIsIHVkaWQpOwotICAgICAg
ICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVsYXlDb250
cm9sbGVyID0gW1tMVFJlbGF5Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhEZXZpY2U6ZGV2aWNl
IHByb2R1Y3REaXI6cHJvZHVjdERpcmVjdG9yeSBhcHBQYXRoOmFwcFBhdGggZGV2aWNlVURJRDp1
ZGlkIGR1bXBUb29sQXJndW1lbnRzOmR1bXBUb29sQXJndW1lbnRzXTsKLSAgICAgICAgW3JlbGF5
Q29udHJvbGxlciBzdGFydF07Ci0KLSAgICAgICAgYXRleGl0KGZpbmlzaCk7Ci0gICAgICAgIHNp
Z25hbChTSUdJTlQsIHJlY2VpdmVkU2lnbmFsKTsKLSAgICAgICAgc2lnbmFsKFNJR1RFUk0sIHJl
Y2VpdmVkU2lnbmFsKTsKLQotICAgICAgICBbW05TUnVuTG9vcCBtYWluUnVuTG9vcF0gcnVuXTsK
LSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>299251</attachid>
            <date>2017-01-19 10:33:13 -0800</date>
            <delta_ts>2017-01-19 16:50:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165927-20170119103122.patch</filename>
            <type>text/plain</type>
            <size>30128</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMDkyOCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDY0IEBACisyMDE3LTAxLTE5ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBSZW1vdmluZyBMYXlvdXRUZXN0UmVsYXkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTkyNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTGF5b3V0VGVzdFJlbGF5OiBSZW1vdmVk
IExheW91dFRlc3RSZWxheS4KKyAgICAgICAgKiBNYWtlZmlsZTogUmVtb3ZlZCBMYXlvdXRUZXN0
UmVsYXkgcmVmZXJlbmNlcy4KKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLXdlYmtpdDogUmVtb3Zl
ZCBMYXlvdXRUZXN0UmVsYXkgcmVmZXJlbmNlcy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3BvcnQvYmFzZS5weToKKyAgICAgICAgKFBvcnQuX19pbml0X18pOiBBZGRlZCBfdGVzdF9ydW5u
ZXJfcHJvY2Vzc19jb25zdHJ1Y3Rvci4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQv
ZGFyd2luLnB5OgorICAgICAgICAoRGFyd2luUG9ydC5hcHBfaWRlbnRpZmllcl9mcm9tX2J1bmRs
ZSk6IEFkZGVkIGZ1bmN0aW9uIHRvIGV4dHJhY3QgYnVuZGxlIElEIGZyb20gcGxpc3QuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weToKKyAgICAgICAgKERyaXZlci5f
X2luaXRfXyk6IE1hZGUgd29ya2VyX251bWJlciBwdWJsaWMuCisgICAgICAgIChEcml2ZXIuX3N0
YXJ0KTogUGFzcyBzZWxmIHRvIHNlcnZlcl9wcm9jZXNzLgorICAgICAgICAoRHJpdmVyUHJveHku
X19pbml0X18pOiBNYWRlIHdvcmtlcl9udW1iZXIgcHVibGljLgorICAgICAgICAoRHJpdmVyUHJv
eHkuX21ha2VfZHJpdmVyKTogRGl0dG8uCisgICAgICAgIChJT1NTaW11bGF0b3JEcml2ZXIpOiBE
ZWxldGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3Qu
cHk6CisgICAgICAgIChEcml2ZXJUZXN0LnRlc3Rfc3RvcF9jbGVhbnNfdXBfcHJvcGVybHkpOiBT
ZXQgX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgZm9yIHRlc3RpbmcuCisgICAgICAg
IChEcml2ZXJUZXN0LnRlc3RfdHdvX3N0YXJ0c19jbGVhbnNfdXBfcHJvcGVybHkpOiBEaXR0by4K
KyAgICAgICAgKERyaXZlclRlc3QudGVzdF9zdGFydF9hY3R1YWxseV9zdGFydHMpOiBEaXR0by4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5OgorICAgICAgICAoSU9TU2lt
dWxhdG9yUG9ydCk6IFJlbW92ZSByZWxheV9uYW1lLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9y
dC5fX2luaXRfXyk6IFNldCBfdGVzdF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciBmb3IgSU9T
U2ltdWxhdG9ycy4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX2NyZWF0ZV9zaW11bGF0b3Jz
KTogRm9ybWF0dGluZyBjaGFuZ2UuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LnJlbGF5X3Bh
dGgpOiBEZWxldGVkLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fY2hlY2tfcmVsYXkpOiBV
c2UgYmFzZSBjbGFzcy4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX2NoZWNrX3BvcnRfYnVp
bGQpOiBEZWxldGVkLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fYnVpbGRfcmVsYXkpOiBE
ZWxldGVkLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fYnVpbGRfZHJpdmVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX2RyaXZlcl9jbGFzcyk6IFVzZSBiYXNlIGNs
YXNzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3QucHk6Cisg
ICAgICAgIChpb3NUZXN0LnRlc3RfMzJiaXQpOiBVcGRhdGUgdGVzdC4KKyAgICAgICAgKGlvc1Rl
c3QudGVzdF82NGJpdCk6IFVwZGF0ZSB0ZXN0LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
cG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weToKKyAgICAgICAgKFNlcnZlclByb2Nlc3MuX19pbml0X18p
OiBBY2NlcHQgZHJpdmVyLgorICAgICAgICAoU2VydmVyUHJvY2Vzcy5fc2V0X2ZpbGVfbm9uYmxv
Y2tpbmcpOiBBZGRlZCB0byBzaGFyZSBjb21tb24gY29kZS4KKyAgICAgICAgKFNlcnZlclByb2Nl
c3MuX3N0YXJ0KTogVXNlIF9zZXRfZmlsZV9ub25ibG9ja2luZy4KKyAgICAgICAgKFNlcnZlclBy
b2Nlc3Mud3JpdGUpOiBGbHVzaCBhZnRlciB3cml0aW5nLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzc19tb2NrLnB5OgorICAgICAgICAoTW9ja1NlcnZlclBy
b2Nlc3MuX19pbml0X18pOiBBY2NlcHQgZHJpdmVyCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNzLnB5OiBBZGRlZC4KKyAgICAgICAgKFNpbXVsYXRvclBy
b2Nlc3MpOiAKKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuU2ltdWxhdG9yUHJvY2Vzc1BvcGVu
KToKKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuU2ltdWxhdG9yUHJvY2Vzc1BvcGVuLl9faW5p
dF9fKTogU2V0LXVwIG9wZW4gc3RydWN0dXJlIHdpdGggZW1wdHkgYXJndW1lbnRzLgorICAgICAg
ICAoU2ltdWxhdG9yUHJvY2Vzcy5TaW11bGF0b3JQcm9jZXNzUG9wZW4ucG9sbCk6IENoZWNrIGlm
IHRoZSBwcm9jZXNzIGlzIHJ1bm5pbmcuCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNzLlNpbXVs
YXRvclByb2Nlc3NQb3Blbi53YWl0KTogV2FpdCBmb3IgdGFyZ2V0IHByb2Nlc3MgdG8gY2xvc2Uu
CisgICAgICAgIChTaW11bGF0b3JQcm9jZXNzLl9faW5pdF9fKTogSW5zdGFsbCBhcHAgdG8gZGV2
aWNlLgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5fX3VubGlua19jaGVja19leGlzdHMpOiBV
bmxpbmsgZmlsZSwgdGhyb3cgZXJyb3IgaWYgdGhpcyBmYWlscy4KKyAgICAgICAgKFNpbXVsYXRv
clByb2Nlc3MuX3Jlc2V0KTogVW5saW5rIGZpZm9zLgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vz
cy5fc3RhcnQpOiBMYXVuY2ggYXBwIG9uIHNpbXVsYXRvciwgbGluayBmaWZvcy4KKyAgICAgICAg
KFNpbXVsYXRvclByb2Nlc3MuX2tpbGwpOiBTaHV0ZG93biBhcHAgb24gc2ltdWxhdG9yCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3IucHk6CisgICAgICAgIChEZXZp
Y2UuX19pbml0X18pOiBBY2NlcHQgaG9zdCB0byBydW4gaW5zdGFsbC9sYXVuY2gvdGVybWluYXRl
LgorICAgICAgICAoRGV2aWNlLmluc3RhbGxfYXBwKTogSW5zdGFsbCBhcHAgdG8gdGFyZ2V0IGRl
dmljZS4KKyAgICAgICAgKERldmljZS5sYXVuY2hfYXBwKTogTGF1bmNoIGFwcCBvbiB0YXJnZXQg
ZGV2aWNlLgorICAgICAgICAoRGV2aWNlLnRlcm1pbmF0ZV9hcHApOiBTaHV0ZG93biBhcHAgb24g
dGFyZ2V0IGRldmljZS4KKwogMjAxNy0wMS0xOSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2Fy
Y2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gRml4IEdUSysgdW5pdCB0ZXN0
cyBmYWlsaW5nIHNpbmNlIHIyMTA1MzEuCkluZGV4OiBUb29scy9NYWtlZmlsZQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9NYWtlZmlsZQkocmV2aXNpb24gMjEwODUwKQorKysgVG9vbHMvTWFrZWZpbGUJ
KHdvcmtpbmcgY29weSkKQEAgLTcsOSArNyw2IEBAIGlmbmVxICgsJChTREtST09UKSkKIAlpZm5l
cSAoLCQoZmluZHN0cmluZyBpcGhvbmUsJChTREtST09UKSkpCiAJCU1PRFVMRVMgKz0gTW9iaWxl
TWluaUJyb3dzZXIKIAllbmRpZgotCWlmZXEgKCwkKERPX05PVF9CVUlMRF9MQVlPVVRfVEVTVF9S
RUxBWSkpCi0JCU1PRFVMRVMgKz0gTGF5b3V0VGVzdFJlbGF5Ci0JZW5kaWYKIGVuZGlmCiAKIGFs
bDoKSW5kZXg6IFRvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvYnVpbGQtd2Via2l0CShyZXZpc2lvbiAyMTA4NTApCisrKyBUb29scy9TY3JpcHRz
L2J1aWxkLXdlYmtpdAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDEwICsyMDAsNiBAQCBpZiAoaXNB
cHBsZU1hY1dlYktpdCgpKSB7CiAgICAgICAgIHB1c2ggQGNvcHlMaWJyYXJpZXNBcmdzLCBwcm9k
dWN0RGlyKCk7CiAgICAgICAgIHByaW50KGpvaW4oIiAiLCBAY29weUxpYnJhcmllc0FyZ3MpIC4g
IlxuIik7CiAgICAgICAgIChzeXN0ZW0oQGNvcHlMaWJyYXJpZXNBcmdzKSA9PSAwKSBvciBkaWU7
Ci0KLSAgICAgICAgaWYgKHdpbGxVc2VJT1NTaW11bGF0b3JTREsoKSkgewotICAgICAgICAgICAg
KHN5c3RlbSgicGVybCIsICJUb29scy9TY3JpcHRzL2J1aWxkLWxheW91dHRlc3RyZWxheSIsIGFy
Z3VtZW50c0ZvckNvbmZpZ3VyYXRpb24oKSkgPT0gMCkgb3IgZGllOwotICAgICAgICB9CiAgICAg
fQogCiAgICAgIyBCdWlsZCBUb29scyBuZWVkZWQgZm9yIEFwcGxlIHBvcnRzCkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQkocmV2aXNpb24gMjEwODUwKQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw2ICsxMzEs
NyBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgIHNlbGYuX3dlYl9wbGF0Zm9ybV90ZXN0
X3NlcnZlciA9IE5vbmUKICAgICAgICAgc2VsZi5faW1hZ2VfZGlmZmVyID0gTm9uZQogICAgICAg
ICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IHNlcnZlcl9wcm9jZXNzLlNlcnZl
clByb2Nlc3MgICMgb3ZlcnJpZGFibGUgZm9yIHRlc3RpbmcKKyAgICAgICAgc2VsZi5fdGVzdF9y
dW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IHNlcnZlcl9wcm9jZXNzLlNlcnZlclByb2Nlc3MK
IAogICAgICAgICBpZiBub3QgaGFzYXR0cihvcHRpb25zLCAnY29uZmlndXJhdGlvbicpIG9yIG5v
dCBvcHRpb25zLmNvbmZpZ3VyYXRpb246CiAgICAgICAgICAgICBzZWxmLnNldF9vcHRpb25fZGVm
YXVsdCgnY29uZmlndXJhdGlvbicsIHNlbGYuZGVmYXVsdF9jb25maWd1cmF0aW9uKCkpCkluZGV4
OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW4ucHkJKHJldmlzaW9uIDIxMDg1MCkKKysr
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW4ucHkJKHdvcmtpbmcgY29weSkKQEAg
LTE3NCwzICsxNzQsMTEgQEAgY2xhc3MgRGFyd2luUG9ydChBcHBsZVBvcnQpOgogICAgICAgICBl
eGNlcHQgU2NyaXB0RXJyb3I6CiAgICAgICAgICAgICBfbG9nLndhcm4oInhjcnVuIGZhaWxlZDsg
ZmFsbGluZyBiYWNrIHRvICclcycuIiAlIGZhbGxiYWNrKQogICAgICAgICAgICAgcmV0dXJuIGZh
bGxiYWNrCisKKyAgICBkZWYgYXBwX2lkZW50aWZpZXJfZnJvbV9idW5kbGUoc2VsZiwgYXBwX2J1
bmRsZSk6CisgICAgICAgIHBsaXN0X3BhdGggPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oYXBwX2J1
bmRsZSwgJ0luZm8ucGxpc3QnKQorICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZXN5c3RlbS5leGlz
dHMocGxpc3RfcGF0aCk6CisgICAgICAgICAgICBwbGlzdF9wYXRoID0gcGxpc3RfcGF0aCA9IHNl
bGYuX2ZpbGVzeXN0ZW0uam9pbihhcHBfYnVuZGxlLCAnQ29udGVudHMvSW5mby5wbGlzdCcpCisg
ICAgICAgIGlmIG5vdCBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhwbGlzdF9wYXRoKToKKyAgICAg
ICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBzZWxmLl9leGVjdXRpdmUucnVuX2Nv
bW1hbmQoWycvdXNyL2xpYmV4ZWMvUGxpc3RCdWRkeScsICctYycsICdQcmludCBDRkJ1bmRsZUlk
ZW50aWZpZXInLCBwbGlzdF9wYXRoXSkucnN0cmlwKCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9kcml2ZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L2RyaXZlci5weQkocmV2aXNpb24gMjEwODUwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2RyaXZlci5weQkod29ya2luZyBjb3B5KQpAQCAtMTMxLDE0ICsxMzEsMTQgQEAg
Y2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgIHdvcmtlcl9udW1iZXIgLSBpZGVudGlmaWVy
IGZvciBhIHBhcnRpY3VsYXIgd29ya2VyL2RyaXZlciBpbnN0YW5jZQogICAgICAgICAiIiIKICAg
ICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKLSAgICAgICAgc2VsZi5fd29ya2VyX251bWJlciA9IHdv
cmtlcl9udW1iZXIKKyAgICAgICAgc2VsZi53b3JrZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgog
ICAgICAgICBzZWxmLl9ub190aW1lb3V0ID0gbm9fdGltZW91dAogCiAgICAgICAgIHNlbGYuX2Ry
aXZlcl90ZW1wZGlyID0gTm9uZQogICAgICAgICBzZWxmLl9kcml2ZXJfdXNlcl9kaXJlY3Rvcnlf
c3VmZml4ID0gTm9uZQogICAgICAgICBzZWxmLl9kcml2ZXJfdXNlcl9jYWNoZV9kaXJlY3Rvcnkg
PSBOb25lCiAKLSAgICAgICAgIyBXZWJLaXRUZXN0UnVubmVyL0xheW91dFRlc3RSZWxheSBjYW4g
cmVwb3J0IGJhY2sgc3VicHJvY2VzcyBjcmFzaGVzIGJ5IHByaW50aW5nCisgICAgICAgICMgV2Vi
S2l0VGVzdFJ1bm5lciBjYW4gcmVwb3J0IGJhY2sgc3VicHJvY2VzcyBjcmFzaGVzIGJ5IHByaW50
aW5nCiAgICAgICAgICMgIiNDUkFTSEVEIC0gUFJPQ0VTU05BTUUiLiAgU2luY2UgdGhvc2UgY2Fu
IGhhcHBlbiBhdCBhbnkgdGltZSBhbmQgU2VydmVyUHJvY2VzcwogICAgICAgICAjIHdvbid0IGJl
IGF3YXJlIG9mIHRoZW0gKHNpbmNlIHRoZSBhY3R1YWwgdG9vbCBkaWRuJ3QgY3Jhc2gsIGp1c3Qg
YSBzdWJwcm9jZXNzKQogICAgICAgICAjIHdlIHJlY29yZCB0aGUgY3Jhc2hlZCBzdWJwcm9jZXNz
IG5hbWUgaGVyZS4KQEAgLTMyNyw3ICszMjcsNiBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKIAog
ICAgIGRlZiBfc2V0dXBfZW52aXJvbl9mb3JfZHJpdmVyKHNlbGYsIGVudmlyb25tZW50KToKICAg
ICAgICAgYnVpbGRfcm9vdF9wYXRoID0gc3RyKHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoKSkKLSAg
ICAgICAgIyBGSVhNRTogRFlMRF8qIHZhcmlhYmxlcyBzaG91bGQgYmUgTWFjLW9ubHkuIEV2ZW4g
aU9TIFNpbXVsYXRvciBkb2Vzbid0IG5lZWQgdGhlbSwgYXMgTGF5b3V0VGVzdFJlbGF5IGlzIGEg
aG9zdCBiaW5hcnkuCiAgICAgICAgIHNlbGYuX2FwcGVuZF9lbnZpcm9ubWVudF92YXJpYWJsZV9w
YXRoKGVudmlyb25tZW50LCAnRFlMRF9MSUJSQVJZX1BBVEgnLCBidWlsZF9yb290X3BhdGgpCiAg
ICAgICAgIHNlbGYuX2FwcGVuZF9lbnZpcm9ubWVudF92YXJpYWJsZV9wYXRoKGVudmlyb25tZW50
LCAnX19YUENfRFlMRF9MSUJSQVJZX1BBVEgnLCBidWlsZF9yb290X3BhdGgpCiAgICAgICAgIHNl
bGYuX2FwcGVuZF9lbnZpcm9ubWVudF92YXJpYWJsZV9wYXRoKGVudmlyb25tZW50LCAnRFlMRF9G
UkFNRVdPUktfUEFUSCcsIGJ1aWxkX3Jvb3RfcGF0aCkKQEAgLTM2OSw3ICszNjgsNyBAQCBjbGFz
cyBEcml2ZXIob2JqZWN0KToKICAgICAgICAgZW52aXJvbm1lbnQgPSBzZWxmLl9zZXR1cF9lbnZp
cm9uX2Zvcl90ZXN0KCkKICAgICAgICAgc2VsZi5fY3Jhc2hlZF9wcm9jZXNzX25hbWUgPSBOb25l
CiAgICAgICAgIHNlbGYuX2NyYXNoZWRfcGlkID0gTm9uZQotICAgICAgICBzZWxmLl9zZXJ2ZXJf
cHJvY2VzcyA9IHNlbGYuX3BvcnQuX3NlcnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yKHNlbGYuX3Bv
cnQsIHNlbGYuX3NlcnZlcl9uYW1lLCBzZWxmLmNtZF9saW5lKHBpeGVsX3Rlc3RzLCBwZXJfdGVz
dF9hcmdzKSwgZW52aXJvbm1lbnQpCisgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzID0gc2Vs
Zi5fcG9ydC5fdGVzdF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvcihzZWxmLl9wb3J0LCBzZWxm
Ll9zZXJ2ZXJfbmFtZSwgc2VsZi5jbWRfbGluZShwaXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyks
IGVudmlyb25tZW50LCBkcml2ZXI9c2VsZikKICAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3Mu
c3RhcnQoKQogCiAgICAgZGVmIF9ydW5fcG9zdF9zdGFydF90YXNrcyhzZWxmKToKQEAgLTYxMSwy
NyArNjEwLDYgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgIHJldHVybiBUcnVlCiAK
IAotIyBGSVhNRTogdGhpcyBzaG91bGQgYmUgYWJzdHJhY3RlZCBvdXQgdmlhIHRoZSBQb3J0IHN1
YmNsYXNzIHNvbWVob3cuCi1jbGFzcyBJT1NTaW11bGF0b3JEcml2ZXIoRHJpdmVyKToKLSAgICBk
ZWYgY21kX2xpbmUoc2VsZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgotICAgICAgICBj
bWQgPSBzdXBlcihJT1NTaW11bGF0b3JEcml2ZXIsIHNlbGYpLmNtZF9saW5lKHBpeGVsX3Rlc3Rz
LCBwZXJfdGVzdF9hcmdzKQotICAgICAgICByZWxheV90b29sID0gc2VsZi5fcG9ydC5yZWxheV9w
YXRoCi0gICAgICAgIGR1bXBfdG9vbCA9IGNtZFswXQotICAgICAgICBkdW1wX3Rvb2xfYXJncyA9
IGNtZFsxOl0KLSAgICAgICAgcHJvZHVjdF9kaXIgPSBzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCkK
LSAgICAgICAgcmVsYXlfYXJncyA9IFsKLSAgICAgICAgICAgICctZGV2ZWxvcGVyRGlyJywgc2Vs
Zi5fcG9ydC5kZXZlbG9wZXJfZGlyLAotICAgICAgICAgICAgJy11ZGlkJywgc2VsZi5fcG9ydC5k
ZXZpY2VfaWRfZm9yX3dvcmtlcl9udW1iZXIoc2VsZi5fd29ya2VyX251bWJlciksCi0gICAgICAg
ICAgICAnLXByb2R1Y3REaXInLCBwcm9kdWN0X2RpciwKLSAgICAgICAgICAgICctYXBwJywgZHVt
cF90b29sLAotICAgICAgICBdCi0gICAgICAgIHJldHVybiBbcmVsYXlfdG9vbF0gKyByZWxheV9h
cmdzICsgWyctLSddICsgZHVtcF90b29sX2FyZ3MKLQotICAgIGRlZiBfc2V0dXBfZW52aXJvbl9m
b3JfZHJpdmVyKHNlbGYsIGVudmlyb25tZW50KToKLSAgICAgICAgZW52aXJvbm1lbnRbJ0RFVkVM
T1BFUl9ESVInXSA9IHNlbGYuX3BvcnQuZGV2ZWxvcGVyX2RpcgotICAgICAgICByZXR1cm4gc3Vw
ZXIoSU9TU2ltdWxhdG9yRHJpdmVyLCBzZWxmKS5fc2V0dXBfZW52aXJvbl9mb3JfZHJpdmVyKGVu
dmlyb25tZW50KQotCi0KIGNsYXNzIENvbnRlbnRCbG9jayhvYmplY3QpOgogICAgIGRlZiBfX2lu
aXRfXyhzZWxmKToKICAgICAgICAgc2VsZi5jb250ZW50X3R5cGUgPSBOb25lCkBAIC02NTgsNyAr
NjM2LDcgQEAgY2xhc3MgRHJpdmVyUHJveHkob2JqZWN0KToKIAogICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBwb3J0LCB3b3JrZXJfbnVtYmVyLCBkcml2ZXJfaW5zdGFuY2VfY29uc3RydWN0b3IsIHBp
eGVsX3Rlc3RzLCBub190aW1lb3V0KToKICAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKLSAgICAg
ICAgc2VsZi5fd29ya2VyX251bWJlciA9IHdvcmtlcl9udW1iZXIKKyAgICAgICAgc2VsZi53b3Jr
ZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgogICAgICAgICBzZWxmLl9kcml2ZXJfaW5zdGFuY2Vf
Y29uc3RydWN0b3IgPSBkcml2ZXJfaW5zdGFuY2VfY29uc3RydWN0b3IKICAgICAgICAgc2VsZi5f
bm9fdGltZW91dCA9IG5vX3RpbWVvdXQKIApAQCAtNjY3LDcgKzY0NSw3IEBAIGNsYXNzIERyaXZl
clByb3h5KG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2RyaXZlcl9jbWRfbGluZSA9IE5vbmUKIAog
ICAgIGRlZiBfbWFrZV9kcml2ZXIoc2VsZiwgcGl4ZWxfdGVzdHMpOgotICAgICAgICByZXR1cm4g
c2VsZi5fZHJpdmVyX2luc3RhbmNlX2NvbnN0cnVjdG9yKHNlbGYuX3BvcnQsIHNlbGYuX3dvcmtl
cl9udW1iZXIsIHBpeGVsX3Rlc3RzLCBzZWxmLl9ub190aW1lb3V0KQorICAgICAgICByZXR1cm4g
c2VsZi5fZHJpdmVyX2luc3RhbmNlX2NvbnN0cnVjdG9yKHNlbGYuX3BvcnQsIHNlbGYud29ya2Vy
X251bWJlciwgcGl4ZWxfdGVzdHMsIHNlbGYuX25vX3RpbWVvdXQpCiAKICAgICAjIEZJWE1FOiB0
aGlzIHNob3VsZCBiZSBhIEBjbGFzc21ldGhvZCAob3IgaW1wbGVtZW50ZWQgb24gUG9ydCBpbnN0
ZWFkKS4KICAgICBkZWYgaXNfaHR0cF90ZXN0KHNlbGYsIHRlc3RfbmFtZSk6CkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHkJKHJldmlzaW9u
IDIxMDg1MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3Qu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTI2NCw3ICsyNjQsNyBAQCBjbGFzcyBEcml2ZXJUZXN0KHVu
aXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3N0b3BfY2xlYW5zX3VwX3Byb3Blcmx5
KHNlbGYpOgogICAgICAgICBwb3J0ID0gVGVzdFdlYktpdFBvcnQoKQotICAgICAgICBwb3J0Ll9z
ZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IE1vY2tTZXJ2ZXJQcm9jZXNzCisgICAgICAgIHBv
cnQuX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJvY2Vzcwog
ICAgICAgICBkcml2ZXIgPSBEcml2ZXIocG9ydCwgMCwgcGl4ZWxfdGVzdHM9VHJ1ZSkKICAgICAg
ICAgZHJpdmVyLnN0YXJ0KFRydWUsIFtdKQogICAgICAgICBsYXN0X3RtcGRpciA9IHBvcnQuX2Zp
bGVzeXN0ZW0ubGFzdF90bXBkaXIKQEAgLTI3NCw3ICsyNzQsNyBAQCBjbGFzcyBEcml2ZXJUZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3R3b19zdGFydHNfY2xlYW5zX3Vw
X3Byb3Blcmx5KHNlbGYpOgogICAgICAgICBwb3J0ID0gVGVzdFdlYktpdFBvcnQoKQotICAgICAg
ICBwb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IE1vY2tTZXJ2ZXJQcm9jZXNzCisg
ICAgICAgIHBvcnQuX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVy
UHJvY2VzcwogICAgICAgICBkcml2ZXIgPSBEcml2ZXIocG9ydCwgMCwgcGl4ZWxfdGVzdHM9VHJ1
ZSkKICAgICAgICAgZHJpdmVyLnN0YXJ0KFRydWUsIFtdKQogICAgICAgICBsYXN0X3RtcGRpciA9
IHBvcnQuX2ZpbGVzeXN0ZW0ubGFzdF90bXBkaXIKQEAgLTI4Myw3ICsyODMsNyBAQCBjbGFzcyBE
cml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3N0YXJ0X2FjdHVh
bGx5X3N0YXJ0cyhzZWxmKToKICAgICAgICAgcG9ydCA9IFRlc3RXZWJLaXRQb3J0KCkKLSAgICAg
ICAgcG9ydC5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJvY2Vzcwor
ICAgICAgICBwb3J0Ll90ZXN0X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gTW9ja1NlcnZl
clByb2Nlc3MKICAgICAgICAgZHJpdmVyID0gRHJpdmVyKHBvcnQsIDAsIHBpeGVsX3Rlc3RzPVRy
dWUpCiAgICAgICAgIGRyaXZlci5zdGFydChUcnVlLCBbXSkKICAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKGRyaXZlci5fc2VydmVyX3Byb2Nlc3Muc3RhcnRlZCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9pb3MucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L2lvcy5weQkocmV2aXNpb24gMjEwODUwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L2lvcy5weQkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBmcm9tIHdlYmtp
dHB5LmxheW91dF90ZXN0cy5tb2RlbHMudGVzdF9jCiBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0
IGNvbmZpZyBhcyBwb3J0X2NvbmZpZwogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBkcml2ZXIs
IGltYWdlX2RpZmYKIGZyb20gd2Via2l0cHkucG9ydC5kYXJ3aW4gaW1wb3J0IERhcndpblBvcnQK
K2Zyb20gd2Via2l0cHkucG9ydC5zaW11bGF0b3JfcHJvY2VzcyBpbXBvcnQgU2ltdWxhdG9yUHJv
Y2VzcwogZnJvbSB3ZWJraXRweS54Y29kZS5zaW11bGF0b3IgaW1wb3J0IFNpbXVsYXRvciwgUnVu
dGltZSwgRGV2aWNlVHlwZQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmNyYXNobG9ncyBp
bXBvcnQgQ3Jhc2hMb2dzCiAKQEAgLTc4LDcgKzc5LDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9y
dChEYXJ3aW5Qb3J0KToKICAgICBTREsgPSAnaXBob25lc2ltdWxhdG9yJwogCiAgICAgU0lNVUxB
VE9SX0JVTkRMRV9JRCA9ICdjb20uYXBwbGUuaXBob25lc2ltdWxhdG9yJwotICAgIHJlbGF5X25h
bWUgPSAnTGF5b3V0VGVzdFJlbGF5JwogICAgIFNJTVVMQVRPUl9ESVJFQ1RPUlkgPSAiL3RtcC9X
ZWJLaXRUZXN0aW5nU2ltdWxhdG9ycy8iCiAgICAgTFNSRUdJU1RFUl9QQVRIID0gIi9TeXN0ZW0v
TGlicmFyeS9GcmFtZXdvcmtzL0NvcmVTZXJ2aWNlcy5mcmFtZXdvcmsvRnJhbWV3b3Jrcy9MYXVu
Y2hTZXJ2aWNlcy5mcmFtZXdvcmsvVmVyc2lvbnMvQ3VycmVudC9TdXBwb3J0L2xzcmVnaXN0ZXIi
CiAgICAgUFJPQ0VTU19DT1VOVF9FU1RJTUFURV9QRVJfU0lNVUxBVE9SX0lOU1RBTkNFID0gMTAw
CkBAIC05Nyw2ICs5Nyw3IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAK
ICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncyk6CiAgICAg
ICAgIERhcndpblBvcnQuX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncykK
KyAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IFNpbXVsYXRv
clByb2Nlc3MKIAogICAgICAgICBvcHRpb25hbF9kZXZpY2VfY2xhc3MgPSBzZWxmLmdldF9vcHRp
b24oJ2RldmljZV9jbGFzcycpCiAgICAgICAgIHNlbGYuX3ByaW50aW5nX2NtZF9saW5lID0gRmFs
c2UKQEAgLTE0OCwxNiArMTQ5LDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0
KToKICAgICAgICAgICAgIGRldmljZV90eXBlID0gRGV2aWNlVHlwZS5mcm9tX25hbWUoZGV2aWNl
X25hbWUpCiAgICAgICAgIHJldHVybiBkZXZpY2VfdHlwZQogCi0gICAgQHByb3BlcnR5Ci0gICAg
QG1lbW9pemVkCi0gICAgZGVmIHJlbGF5X3BhdGgoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX3Jv
b3Rfd2FzX3NldDoKLSAgICAgICAgICAgIHBhdGggPSBzZWxmLl9maWxlc3lzdGVtLmFic3BhdGgo
c2VsZi5nZXRfb3B0aW9uKCdyb290JykpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtYWNf
Y29uZmlnID0gcG9ydF9jb25maWcuQ29uZmlnKHNlbGYuX2V4ZWN1dGl2ZSwgc2VsZi5fZmlsZXN5
c3RlbSwgJ21hYycpCi0gICAgICAgICAgICBwYXRoID0gbWFjX2NvbmZpZy5idWlsZF9kaXJlY3Rv
cnkoc2VsZi5nZXRfb3B0aW9uKCdjb25maWd1cmF0aW9uJykpCi0gICAgICAgIHJldHVybiBzZWxm
Ll9maWxlc3lzdGVtLmpvaW4ocGF0aCwgc2VsZi5yZWxheV9uYW1lKQotCiAgICAgQG1lbW9pemVk
CiAgICAgZGVmIGNoaWxkX3Byb2Nlc3NlcyhzZWxmKToKICAgICAgICAgcmV0dXJuIGludChzZWxm
LmdldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycpKQpAQCAtMTgyLDE5ICsxNzMsNiBAQCBjbGFz
cyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogCiAgICAgICAgIHJldHVybiBtaW4obWF4
aW11bV9zaW11bGF0b3JfY291bnRfb25fdGhpc19zeXN0ZW0sIGJlc3RfY2hpbGRfcHJvY2Vzc19j
b3VudF9mb3JfY3B1KQogCi0gICAgZGVmIF9jaGVja19yZWxheShzZWxmKToKLSAgICAgICAgaWYg
bm90IHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHNlbGYucmVsYXlfcGF0aCk6Ci0gICAgICAgICAg
ICBfbG9nLmVycm9yKCIlcyB3YXMgbm90IGZvdW5kIGF0ICVzIiAlIChzZWxmLnJlbGF5X25hbWUs
IHNlbGYucmVsYXlfcGF0aCkpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0
dXJuIFRydWUKLQotICAgIGRlZiBfY2hlY2tfcG9ydF9idWlsZChzZWxmKToKLSAgICAgICAgaWYg
bm90IHNlbGYuX3Jvb3Rfd2FzX3NldCBhbmQgc2VsZi5nZXRfb3B0aW9uKCdidWlsZCcpIGFuZCBu
b3Qgc2VsZi5fYnVpbGRfcmVsYXkoKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAg
ICBpZiBub3Qgc2VsZi5fY2hlY2tfcmVsYXkoKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQot
ICAgICAgICByZXR1cm4gVHJ1ZQotCiAgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUs
IHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49dGltZS50aW1lLCBzbGVl
cF9mbj10aW1lLnNsZWVwLCB3YWl0X2Zvcl9sb2c9VHJ1ZSk6CiAgICAgICAgIHRpbWVfZm4gPSB0
aW1lX2ZuIG9yIHRpbWUudGltZQogICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9yIHRpbWUu
c2xlZXAKQEAgLTIxNSw3ICsxOTMsNyBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBv
cnQpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9jcmFzaF9sb2coY3Jhc2hlZF9zdWJw
cm9jZXNzX25hbWVfYW5kX3BpZFswXSwgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZFsx
XSwgc3Rkb3V0LAogICAgICAgICAgICAgICAgICdcbicuam9pbihzdGRlcnJfbGluZXMpLCBuZXdl
cl90aGFuLCB0aW1lX2ZuLCBzbGVlcF9mbiwgd2FpdF9mb3JfbG9nKQogCi0gICAgICAgICMgTGF5
b3V0VGVzdFJlbGF5IGNyYXNoZWQKKyAgICAgICAgIyBBcHAgY3Jhc2hlZAogICAgICAgICBfbG9n
LmRlYnVnKCdsb29raW5nIGZvciBjcmFzaCBsb2cgZm9yICVzOiVzJyAlIChuYW1lLCBzdHIocGlk
KSkpCiAgICAgICAgIGNyYXNoX2xvZyA9ICcnCiAgICAgICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExv
Z3Moc2VsZi5ob3N0KQpAQCAtMjMzLDI1ICsyMTEsNiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0
KERhcndpblBvcnQpOgogICAgICAgICAgICAgcmV0dXJuIHN0ZGVyciwgTm9uZQogICAgICAgICBy
ZXR1cm4gc3RkZXJyLCBjcmFzaF9sb2cKIAotICAgIGRlZiBfYnVpbGRfcmVsYXkoc2VsZik6Ci0g
ICAgICAgIGVudmlyb25tZW50ID0gc2VsZi5ob3N0LmNvcHlfY3VycmVudF9lbnZpcm9ubWVudCgp
Ci0gICAgICAgIGVudmlyb25tZW50LmRpc2FibGVfZ2NjX3NtYXJ0cXVvdGVzKCkKLSAgICAgICAg
ZW52ID0gZW52aXJvbm1lbnQudG9fZGljdGlvbmFyeSgpCi0KLSAgICAgICAgdHJ5OgotICAgICAg
ICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIGJlIHBhc3NpbmcgX2FyZ3VtZW50c19mb3JfY29uZmln
dXJhdGlvbigpLCB3aGljaCByZXNwZWN0cyBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBwb3J0LAot
ICAgICAgICAgICAgIyBpbnN0ZWFkIG9mIGhhcmRjb2RpbmcgLS1pb3Mtc2ltdWxhdG9yLgotICAg
ICAgICAgICAgc2VsZi5fcnVuX3NjcmlwdCgiYnVpbGQtbGF5b3V0dGVzdHJlbGF5IiwgYXJncz1b
Ii0taW9zLXNpbXVsYXRvciJdLCBlbnY9ZW52KQotICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3Is
IGU6Ci0gICAgICAgICAgICBfbG9nLmVycm9yKGUubWVzc2FnZV93aXRoX291dHB1dChvdXRwdXRf
bGltaXQ9Tm9uZSkpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRy
dWUKLQotICAgIGRlZiBfYnVpbGRfZHJpdmVyKHNlbGYpOgotICAgICAgICBidWlsdF90b29sID0g
c3VwZXIoSU9TU2ltdWxhdG9yUG9ydCwgc2VsZikuX2J1aWxkX2RyaXZlcigpCi0gICAgICAgIGJ1
aWx0X3JlbGF5ID0gc2VsZi5fYnVpbGRfcmVsYXkoKQotICAgICAgICByZXR1cm4gYnVpbHRfdG9v
bCBhbmQgYnVpbHRfcmVsYXkKLQogICAgIGRlZiBfYnVpbGRfZHJpdmVyX2ZsYWdzKHNlbGYpOgog
ICAgICAgICBhcmNocyA9IFsnQVJDSFM9aTM4NiddIGlmIHNlbGYuYXJjaGl0ZWN0dXJlKCkgPT0g
J3g4NicgZWxzZSBbXQogICAgICAgICBzZGsgPSBbJy0tc2RrJywgJ2lwaG9uZXNpbXVsYXRvcidd
CkBAIC0yNjQsOSArMjIzLDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToK
ICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucy5hcHBlbmQoVGVzdENvbmZpZ3VyYXRpb24o
dmVyc2lvbj1zZWxmLl92ZXJzaW9uLCBhcmNoaXRlY3R1cmU9YXJjaGl0ZWN0dXJlLCBidWlsZF90
eXBlPWJ1aWxkX3R5cGUpKQogICAgICAgICByZXR1cm4gY29uZmlndXJhdGlvbnMKIAotICAgIGRl
ZiBfZHJpdmVyX2NsYXNzKHNlbGYpOgotICAgICAgICByZXR1cm4gZHJpdmVyLklPU1NpbXVsYXRv
ckRyaXZlcgotCiAgICAgZGVmIGRlZmF1bHRfYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6CiAg
ICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignd2Via2l0X3Rlc3RfcnVubmVyJyk6CiAgICAgICAg
ICAgICBmYWxsYmFja19uYW1lcyA9IFtzZWxmLl93azJfcG9ydF9uYW1lKCldICsgW3NlbGYucG9y
dF9uYW1lXSArIFsnd2syJ10KQEAgLTI4MCw5ICsyMzYsOSBAQCBjbGFzcyBJT1NTaW11bGF0b3JQ
b3J0KERhcndpblBvcnQpOgogCiAgICAgZGVmIF9jcmVhdGVfc2ltdWxhdG9ycyhzZWxmKToKICAg
ICAgICAgaWYgKHNlbGYuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKSA8IHNlbGYuY2hpbGRfcHJv
Y2Vzc2VzKCkpOgotICAgICAgICAgICAgICAgIF9sb2cud2FybigiWW91IGhhdmUgc3BlY2lmaWVk
IHZlcnkgaGlnaCB2YWx1ZSh7MH0pIGZvciAtLWNoaWxkLXByb2Nlc3NlcyIuZm9ybWF0KHNlbGYu
Y2hpbGRfcHJvY2Vzc2VzKCkpKQotICAgICAgICAgICAgICAgIF9sb2cud2FybigibWF4aW11bSBj
aGlsZC1wcm9jZXNzZXMgd2hpY2ggY2FuIGJlIHN1cHBvcnRlZCBvbiB0aGlzIHN5c3RlbSBhcmU6
IHswfSIuZm9ybWF0KHNlbGYuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKSkpCi0gICAgICAgICAg
ICAgICAgX2xvZy53YXJuKCJUaGlzIGlzIHZlcnkgbGlrZWx5IHRvIGZhaWwuIikKKyAgICAgICAg
ICAgIF9sb2cud2FybigiWW91IGhhdmUgc3BlY2lmaWVkIHZlcnkgaGlnaCB2YWx1ZSh7MH0pIGZv
ciAtLWNoaWxkLXByb2Nlc3NlcyIuZm9ybWF0KHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpKQorICAg
ICAgICAgICAgX2xvZy53YXJuKCJtYXhpbXVtIGNoaWxkLXByb2Nlc3NlcyB3aGljaCBjYW4gYmUg
c3VwcG9ydGVkIG9uIHRoaXMgc3lzdGVtIGFyZTogezB9Ii5mb3JtYXQoc2VsZi5kZWZhdWx0X2No
aWxkX3Byb2Nlc3NlcygpKSkKKyAgICAgICAgICAgIF9sb2cud2FybigiVGhpcyBpcyB2ZXJ5IGxp
a2VseSB0byBmYWlsLiIpCiAKICAgICAgICAgaWYgc2VsZi5fdXNpbmdfZGVkaWNhdGVkX3NpbXVs
YXRvcnMoKToKICAgICAgICAgICAgIHNlbGYuX2NyZWF0ZVNpbXVsYXRvckFwcHMoKQpAQCAtNDEz
LDcgKzM2OSw2IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAgICAgZGVm
IF90ZXN0aW5nX2RldmljZShzZWxmLCBudW1iZXIpOgogICAgICAgICByZXR1cm4gU2ltdWxhdG9y
LmRldmljZV9udW1iZXIobnVtYmVyKQogCi0gICAgIyBUaGlzIGlzIG9ubHkgZXhwb3NlZCBzbyB0
aGF0IElPU1NpbXVsYXRvckRyaXZlciBjYW4gdXNlIGl0LgogICAgIGRlZiBkZXZpY2VfaWRfZm9y
X3dvcmtlcl9udW1iZXIoc2VsZiwgbnVtYmVyKToKICAgICAgICAgaWYgc2VsZi5fcHJpbnRpbmdf
Y21kX2xpbmU6CiAgICAgICAgICAgICByZXR1cm4gJzxkdW1teSBpZD4nCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIxMDg1MCkK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3QucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTcwLDcgKzcwLDcgQEAgY2xhc3MgaW9zVGVzdChkYXJ3aW5fdGVzdGNhc2UuRGFy
d2luVGVzdAogICAgICAgICBwb3J0Ll9ydW5fc2NyaXB0ID0gcnVuX3NjcmlwdAogICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHBvcnQuYXJjaGl0ZWN0dXJlKCksICd4ODYnKQogICAgICAgICBwb3J0
Ll9idWlsZF9kcml2ZXIoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYXJncywgWyct
LWlvcy1zaW11bGF0b3InXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFyZ3MsIFsn
QVJDSFM9aTM4NicsICctLXNkaycsICdpcGhvbmVzaW11bGF0b3InXSkKIAogICAgIGRlZiB0ZXN0
XzY0Yml0KHNlbGYpOgogICAgICAgICAjIEFwcGxlIE1hYyBwb3J0IGlzIDY0LWJpdCBieSBkZWZh
dWx0CkBAIC04Miw3ICs4Miw3IEBAIGNsYXNzIGlvc1Rlc3QoZGFyd2luX3Rlc3RjYXNlLkRhcndp
blRlc3QKIAogICAgICAgICBwb3J0Ll9ydW5fc2NyaXB0ID0gcnVuX3NjcmlwdAogICAgICAgICBw
b3J0Ll9idWlsZF9kcml2ZXIoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYXJncywg
WyctLWlvcy1zaW11bGF0b3InXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFyZ3Ms
IFsnLS1zZGsnLCAnaXBob25lc2ltdWxhdG9yJ10pCiAKICAgICBkZWYgdGVzdF9zZGtfbmFtZShz
ZWxmKToKICAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3MucHkJKHJldmlzaW9uIDIxMDg1MCkK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQkod29ya2lu
ZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6CiAg
ICAgaW5kZWZpbml0ZWx5LiBUaGUgY2xhc3MgYWxzbyBoYW5kbGVzIHRyYW5zcGFyZW50bHkgcmVz
dGFydGluZyBwcm9jZXNzZXMKICAgICBhcyBuZWNlc3NhcnkgdG8ga2VlcCBpc3N1aW5nIGNvbW1h
bmRzLiIiIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVu
dj1Ob25lLCB1bml2ZXJzYWxfbmV3bGluZXM9RmFsc2UsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2g9
RmFsc2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X29iaiwgbmFtZSwgY21kLCBlbnY9
Tm9uZSwgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNlLCB0cmVhdF9ub19kYXRhX2FzX2NyYXNoPUZh
bHNlLCBkcml2ZXI9Tm9uZSk6CiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0X29iagogICAgICAg
ICBzZWxmLl9uYW1lID0gbmFtZSAgIyBTaG91bGQgYmUgdGhlIGNvbW1hbmQgbmFtZSAoZS5nLiBE
dW1wUmVuZGVyVHJlZSwgSW1hZ2VEaWZmKQogICAgICAgICBzZWxmLl9jbWQgPSBjbWQKQEAgLTEw
Myw2ICsxMDMsMTAgQEAgY2xhc3MgU2VydmVyUHJvY2VzcyhvYmplY3QpOgogICAgIGRlZiBwcm9j
ZXNzX25hbWUoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9uYW1lCiAKKyAgICBkZWYgX3Nl
dF9maWxlX25vbmJsb2NraW5nKHNlbGYsIGZpbGUpOgorICAgICAgICBmbCA9IGZjbnRsLmZjbnRs
KGZpbGUuZmlsZW5vKCksIGZjbnRsLkZfR0VURkwpCisgICAgICAgIGZjbnRsLmZjbnRsKGZpbGUu
ZmlsZW5vKCksIGZjbnRsLkZfU0VURkwsIGZsIHwgb3MuT19OT05CTE9DSykKKwogICAgIGRlZiBf
c3RhcnQoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX3Byb2M6CiAgICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCIlcyBhbHJlYWR5IHJ1bm5pbmciICUgc2VsZi5fbmFtZSkKQEAgLTExNywxMyAr
MTIxLDkgQEAgY2xhc3MgU2VydmVyUHJvY2VzcyhvYmplY3QpOgogICAgICAgICAgICAgdW5pdmVy
c2FsX25ld2xpbmVzPXNlbGYuX3VuaXZlcnNhbF9uZXdsaW5lcykKICAgICAgICAgc2VsZi5fcGlk
ID0gc2VsZi5fcHJvYy5waWQKICAgICAgICAgc2VsZi5fcG9ydC5maW5kX3N5c3RlbV9waWQoc2Vs
Zi5uYW1lKCksIHNlbGYuX3BpZCkKLSAgICAgICAgZmQgPSBzZWxmLl9wcm9jLnN0ZG91dC5maWxl
bm8oKQogICAgICAgICBpZiBub3Qgc2VsZi5fdXNlX3dpbjMyX2FwaXM6Ci0gICAgICAgICAgICBm
bCA9IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZMKQotICAgICAgICAgICAgZmNudGwuZmNu
dGwoZmQsIGZjbnRsLkZfU0VURkwsIGZsIHwgb3MuT19OT05CTE9DSykKLSAgICAgICAgICAgIGZk
ID0gc2VsZi5fcHJvYy5zdGRlcnIuZmlsZW5vKCkKLSAgICAgICAgICAgIGZsID0gZmNudGwuZmNu
dGwoZmQsIGZjbnRsLkZfR0VURkwpCi0gICAgICAgICAgICBmY250bC5mY250bChmZCwgZmNudGwu
Rl9TRVRGTCwgZmwgfCBvcy5PX05PTkJMT0NLKQorICAgICAgICAgICAgc2VsZi5fc2V0X2ZpbGVf
bm9uYmxvY2tpbmcoc2VsZi5fcHJvYy5zdGRvdXQpCisgICAgICAgICAgICBzZWxmLl9zZXRfZmls
ZV9ub25ibG9ja2luZyhzZWxmLl9wcm9jLnN0ZGVycikKIAogICAgIGRlZiBfaGFuZGxlX3Bvc3Np
YmxlX2ludGVycnVwdChzZWxmKToKICAgICAgICAgIiIiVGhpcyByb3V0aW5lIGNoZWNrcyB0byBz
ZWUgaWYgdGhlIHByb2Nlc3MgY3Jhc2hlZCBvciBleGl0ZWQKQEAgLTE1MSw2ICsxNTEsNyBAQCBj
bGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6CiAgICAgICAgICAgICBzZWxmLl9zdGFydCgpCiAg
ICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4ud3JpdGUoYnl0ZXMpCisg
ICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGluLmZsdXNoKCkKICAgICAgICAgZXhjZXB0IElPRXJy
b3IsIGU6CiAgICAgICAgICAgICBzZWxmLnN0b3AoMC4wKQogICAgICAgICAgICAgIyBzdG9wKCkg
Y2FsbHMgX3Jlc2V0KCksIHNvIHdlIGhhdmUgdG8gc2V0IGNyYXNoZWQgdG8gVHJ1ZSBhZnRlciBj
YWxsaW5nIHN0b3AoKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9w
cm9jZXNzX21vY2sucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L3NlcnZlcl9wcm9jZXNzX21vY2sucHkJKHJldmlzaW9uIDIxMDg1MCkKKysrIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzc19tb2NrLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw3ICsyOCw3IEBACiAKIAogY2xhc3MgTW9ja1NlcnZlclByb2Nlc3Mob2JqZWN0KToKLSAg
ICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmo9Tm9uZSwgbmFtZT1Ob25lLCBjbWQ9Tm9uZSwg
ZW52PU5vbmUsIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgbGluZXM9Tm9uZSwgY3Jhc2hlZD1G
YWxzZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqPU5vbmUsIG5hbWU9Tm9uZSwg
Y21kPU5vbmUsIGVudj1Ob25lLCB1bml2ZXJzYWxfbmV3bGluZXM9RmFsc2UsIGxpbmVzPU5vbmUs
IGNyYXNoZWQ9RmFsc2UsIGRyaXZlcj1Ob25lKToKICAgICAgICAgc2VsZi50aW1lZF9vdXQgPSBG
YWxzZQogICAgICAgICBzZWxmLmxpbmVzID0gbGluZXMgb3IgW10KICAgICAgICAgc2VsZi5jcmFz
aGVkID0gY3Jhc2hlZApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRv
cl9wcm9jZXNzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9z
aW11bGF0b3JfcHJvY2Vzcy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvc2ltdWxhdG9yX3Byb2Nlc3MucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MzAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
IyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQg
ZXJybm8KK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBzZWxlY3QKK2ltcG9ydCBz
dWJwcm9jZXNzCitpbXBvcnQgdGltZQorCitmcm9tIHNlbGVjdCBpbXBvcnQga3F1ZXVlLCBrZXZl
bnQKKworZnJvbSB3ZWJraXRweS5wb3J0LnNlcnZlcl9wcm9jZXNzIGltcG9ydCBTZXJ2ZXJQcm9j
ZXNzCisKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2NsYXNzIFNp
bXVsYXRvclByb2Nlc3MoU2VydmVyUHJvY2Vzcyk6CisKKyAgICBjbGFzcyBTaW11bGF0b3JQcm9j
ZXNzUG9wZW4ob2JqZWN0KToKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAg
ICAgICBzZWxmLnN0ZGluID0gTm9uZQorICAgICAgICAgICAgc2VsZi5zdGRvdXQgPSBOb25lCisg
ICAgICAgICAgICBzZWxmLnN0ZGVyciA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYucGlkID0gTm9u
ZQorCisgICAgICAgIGRlZiBwb2xsKHNlbGYpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgICAgIG9zLmtpbGwoc2VsZi5waWQsIDApCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciwg
ZXJyOgorICAgICAgICAgICAgICAgIGlmIGVyci5lcnJubyA9PSBlcnJuby5FU1JDSDoKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgICAgICBlbGlmIGVyci5lcnJubyA9
PSBlcnJuby5FUEVSTToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBkZWYgd2FpdChz
ZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAgICAgcmV0ID0gc2VsZi5wb2xsKCkKKyAgICAg
ICAgICAgIGlmIHRpbWVvdXQ6CisgICAgICAgICAgICAgICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUo
KSArIHRpbWVvdXQKKyAgICAgICAgICAgIHdoaWxlIG5vdCByZXQ6CisgICAgICAgICAgICAgICAg
dGltZS5zbGVlcCguMDEpCisgICAgICAgICAgICAgICAgcmV0ID0gc2VsZi5wb2xsKCkKKyAgICAg
ICAgICAgICAgICBpZiBkZWFkbGluZSBhbmQgZGVhZGxpbmUgPCB0aW1lLnRpbWUoKToKKyAgICAg
ICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiVGltZWQgb3V0IHdhaXRpbmcgZm9yICIgKyBz
dHIoc2VsZi5waWQpICsgIiB0byBjcmFzaCIpCisgICAgICAgICAgICByZXR1cm4gcmV0CisKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmosIG5hbWUsIGNtZCwgZW52PU5vbmUsIHVuaXZl
cnNhbF9uZXdsaW5lcz1GYWxzZSwgdHJlYXRfbm9fZGF0YV9hc19jcmFzaD1GYWxzZSwgZHJpdmVy
PU5vbmUpOgorICAgICAgICBmcm9tIHdlYmtpdHB5Lnhjb2RlLnNpbXVsYXRvciBpbXBvcnQgU2lt
dWxhdG9yICAjIEF2b2lkIGNpcmN1bGFyIGltcG9ydAorICAgICAgICBzZWxmLl9zaW11bGF0b3Jf
bWFuYWdlciA9IFNpbXVsYXRvcihwb3J0X29iai5ob3N0KQorCisgICAgICAgIGFzc2VydCBkcml2
ZXIKKyAgICAgICAgc2VsZi5fYnVuZGxlX2lkID0gcG9ydF9vYmouYXBwX2lkZW50aWZpZXJfZnJv
bV9idW5kbGUoY21kWzBdKQorICAgICAgICBzZWxmLl9kZXZpY2UgPSBzZWxmLl9zaW11bGF0b3Jf
bWFuYWdlci5maW5kX2RldmljZV9ieV91ZGlkKHBvcnRfb2JqLmRldmljZV9pZF9mb3Jfd29ya2Vy
X251bWJlcihkcml2ZXIud29ya2VyX251bWJlcikpCisgICAgICAgIGFzc2VydCBzZWxmLl9kZXZp
Y2UuaW5zdGFsbF9hcHAoY21kWzBdKQorICAgICAgICBlbnZbJ0lQQ19JREVOVElGSUVSJ10gPSBz
ZWxmLl9idW5kbGVfaWQgKyAiLSIgKyBzZWxmLl9kZXZpY2UudWRpZAorCisgICAgICAgIGZpbGVf
bG9jYXRpb24gPSAnL3RtcC8nICsgZW52WydJUENfSURFTlRJRklFUiddCisgICAgICAgIHNlbGYu
X2luX3BhdGggPSBmaWxlX2xvY2F0aW9uICsgJ19JTicKKyAgICAgICAgc2VsZi5fb3V0X3BhdGgg
PSBmaWxlX2xvY2F0aW9uICsgJ19PVVQnCisgICAgICAgIHNlbGYuX2Vycm9yX3BhdGggPSBmaWxl
X2xvY2F0aW9uICsgJ19FUlJPUicKKworICAgICAgICBzdXBlcihTaW11bGF0b3JQcm9jZXNzLCBz
ZWxmKS5fX2luaXRfXyhwb3J0X29iaiwgbmFtZSwgY21kLCBlbnYsIHVuaXZlcnNhbF9uZXdsaW5l
cywgdHJlYXRfbm9fZGF0YV9hc19jcmFzaCkKKworICAgIGRlZiBfX3VubGlua19jaGVja19leGlz
dHMoc2VsZiwgcGF0aCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnVubGluayhwYXRo
KQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgb3MucGF0aC5l
eGlzdHMocGF0aCk6CisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiQ291bGQgbm90IHVu
bGluayAnIiArIHBhdGggKyAiJywgdGhlIHRhcmdldCBwYXRoIGlzIGEgZmlsZSBub3QgYSBmaWZv
LiIpCisKKyAgICBkZWYgX3Jlc2V0KHNlbGYpOgorICAgICAgICBzdXBlcihTaW11bGF0b3JQcm9j
ZXNzLCBzZWxmKS5fcmVzZXQoKQorCisgICAgICAgIHNlbGYuX191bmxpbmtfY2hlY2tfZXhpc3Rz
KHNlbGYuX2luX3BhdGgpCisgICAgICAgIHNlbGYuX191bmxpbmtfY2hlY2tfZXhpc3RzKHNlbGYu
X291dF9wYXRoKQorICAgICAgICBzZWxmLl9fdW5saW5rX2NoZWNrX2V4aXN0cyhzZWxmLl9lcnJv
cl9wYXRoKQorCisgICAgZGVmIF9zdGFydChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fcHJvYzoK
KyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIiVzIGFscmVhZHkgcnVubmluZyIgJSBzZWxm
Ll9uYW1lKQorICAgICAgICBzZWxmLl9yZXNldCgpCisgICAgICAgIG9zLm1rZmlmbyhzZWxmLl9p
bl9wYXRoLCAwNjAwKQorICAgICAgICBvcy5ta2ZpZm8oc2VsZi5fb3V0X3BhdGgsIDA2MDApCisg
ICAgICAgIG9zLm1rZmlmbyhzZWxmLl9lcnJvcl9wYXRoLCAwNjAwKQorCisgICAgICAgIHNlbGYu
X3Byb2MgPSBTaW11bGF0b3JQcm9jZXNzLlNpbXVsYXRvclByb2Nlc3NQb3BlbigpCisgICAgICAg
IHNlbGYuX3Byb2Muc3Rkb3V0ID0gb3MuZmRvcGVuKG9zLm9wZW4oc2VsZi5fb3V0X3BhdGgsIG9z
Lk9fUkRPTkxZIHwgb3MuT19OT05CTE9DSyksICJyYiIpCisgICAgICAgIHNlbGYuX3Byb2Muc3Rk
ZXJyID0gb3MuZmRvcGVuKG9zLm9wZW4oc2VsZi5fZXJyb3JfcGF0aCwgb3MuT19SRE9OTFkgfCBv
cy5PX05PTkJMT0NLKSwgInJiIikKKworICAgICAgICBzZWxmLl9waWQgPSBzZWxmLl9kZXZpY2Uu
bGF1bmNoX2FwcChzZWxmLl9idW5kbGVfaWQsIHNlbGYuX2NtZFsxOl0sIGVudj1zZWxmLl9lbnYp
CisgICAgICAgIHNlbGYuX3Byb2MucGlkID0gc2VsZi5fcGlkCisKKyAgICAgICAgZGVhZGxpbmUg
PSB0aW1lLnRpbWUoKSArIDMKKyAgICAgICAgd2hpbGUgbm90IHNlbGYuX3Byb2Muc3RkaW4gYW5k
IGRlYWRsaW5lID4gdGltZS50aW1lKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAg
ICAgc2VsZi5fcHJvYy5zdGRpbiA9IG9wZW4oc2VsZi5faW5fcGF0aCwgInciKQorICAgICAgICAg
ICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGlm
IG5vdCBzZWxmLl9wcm9jLnN0ZGluOgorICAgICAgICAgICAgc2VsZi5fY3Jhc2hlZCA9IFRydWUK
KworICAgIGRlZiBfa2lsbChzZWxmKToKKyAgICAgICAgc2VsZi5fZGV2aWNlLnRlcm1pbmF0ZV9h
cHAoc2VsZi5fYnVuZGxlX2lkKQorICAgICAgICBzdXBlcihTaW11bGF0b3JQcm9jZXNzLCBzZWxm
KS5fa2lsbCgpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvci5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvci5w
eQkocmV2aXNpb24gMjEwODUwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11
bGF0b3IucHkJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw3ICsxNjcsNyBAQCBjbGFzcyBEZXZpY2Uo
b2JqZWN0KToKICAgICBSZXByZXNlbnRzIGEgQ29yZVNpbXVsYXRvciBkZXZpY2UgdW5kZXJuZWF0
aCBhIHJ1bnRpbWUKICAgICAiIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCB1ZGlk
LCBhdmFpbGFibGUsIHJ1bnRpbWUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCB1ZGlk
LCBhdmFpbGFibGUsIHJ1bnRpbWUsIGhvc3Q9Tm9uZSk6CiAgICAgICAgICIiIgogICAgICAgICA6
cGFyYW0gbmFtZTogVGhlIGRldmljZSBuYW1lCiAgICAgICAgIDp0eXBlIG5hbWU6IHN0cgpAQCAt
MTc4LDYgKzE3OCw3IEBAIGNsYXNzIERldmljZShvYmplY3QpOgogICAgICAgICA6cGFyYW0gcnVu
dGltZTogVGhlIGlPUyBTaW11bGF0b3IgcnVudGltZSB0aGF0IGhvc3RzIHRoaXMgZGV2aWNlCiAg
ICAgICAgIDp0eXBlIHJ1bnRpbWU6IFJ1bnRpbWUKICAgICAgICAgIiIiCisgICAgICAgIHNlbGYu
X2hvc3QgPSBob3N0IG9yIEhvc3QoKQogICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICAgICAg
IHNlbGYudWRpZCA9IHVkaWQKICAgICAgICAgc2VsZi5hdmFpbGFibGUgPSBhdmFpbGFibGUKQEAg
LTI2MCw2ICsyNjEsMjcgQEAgY2xhc3MgRGV2aWNlKG9iamVjdCk6CiAgICAgICAgIGV4Y2VwdCBz
dWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjoKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVF
cnJvcignInhjcnVuIHNpbWN0bCBlcmFzZSIgZmFpbGVkOiBkZXZpY2Ugc3RhdGUgaXMge30nLmZv
cm1hdChTaW11bGF0b3IuZGV2aWNlX3N0YXRlKHVkaWQpKSkKIAorICAgIGRlZiBpbnN0YWxsX2Fw
cChzZWxmLCBhcHBfcGF0aCk6CisgICAgICAgIHJldHVybiBub3Qgc2VsZi5faG9zdC5leGVjdXRp
dmUucnVuX2NvbW1hbmQoWyd4Y3J1bicsICdzaW1jdGwnLCAnaW5zdGFsbCcsIHNlbGYudWRpZCwg
YXBwX3BhdGhdLCByZXR1cm5fZXhpdF9jb2RlPVRydWUpCisKKyAgICBkZWYgbGF1bmNoX2FwcChz
ZWxmLCBidW5kbGVfaWRlbnRpZmllciwgYXJncywgZW52PU5vbmUpOgorICAgICAgICB0cmFuc2Zl
cmVkX2Vudmlyb25tZW50ID0ge30KKyAgICAgICAgaWYgZW52OgorICAgICAgICAgICAgZm9yIHZh
bHVlIGluIGVudjoKKyAgICAgICAgICAgICAgICBpZiBub3QgdmFsdWUuc3RhcnRzd2l0aCgiU0lN
Q1RMX0NISUxEXyIpOgorICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlcmVkX2Vudmlyb25tZW50
WydTSU1DVExfQ0hJTERfJyArIHZhbHVlXSA9IGVudlt2YWx1ZV0KKyAgICAgICAgICAgICAgICAg
ICAgdHJhbnNmZXJlZF9lbnZpcm9ubWVudFt2YWx1ZV0gPSBlbnZbdmFsdWVdCisgICAgICAgIG91
dHB1dCA9IHNlbGYuX2hvc3QuZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsneGNydW4nLCAnc2ltY3Rs
JywgJ2xhdW5jaCcsIHNlbGYudWRpZCwgYnVuZGxlX2lkZW50aWZpZXJdICsgYXJncywgZW52PXRy
YW5zZmVyZWRfZW52aXJvbm1lbnQpCisKKyAgICAgICAgIyBPdXRwdXQgc2hvdWxkIGJlOiAiPGJ1
bmRsZSBpZD46IDxwaWQ+IgorICAgICAgICBpZiBub3Qgb3V0cHV0LnN0YXJ0c3dpdGgoYnVuZGxl
X2lkZW50aWZpZXIgKyAiOiAiKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIG91
dHB1dCA9IG91dHB1dC5yc3RyaXAoJ1xuJykuc3BsaXQoJyAnKVsxXQorICAgICAgICByZXR1cm4g
aW50KG91dHB1dCkKKworICAgIGRlZiB0ZXJtaW5hdGVfYXBwKHNlbGYsIGJ1bmRsZV9pZGVudGlm
aWVyKToKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5ydW5fY29tbWFu
ZChbJ3hjcnVuJywgJ3NpbWN0bCcsICd0ZXJtaW5hdGUnLCBzZWxmLnVkaWQsIGJ1bmRsZV9pZGVu
dGlmaWVyXSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKQorCiAgICAgZGVmIF9fZXFfXyhzZWxmLCBv
dGhlcik6CiAgICAgICAgIHJldHVybiBzZWxmLnVkaWQgPT0gb3RoZXIudWRpZAogCkBAIC00Nzcs
NyArNDk5LDggQEAgY2xhc3MgU2ltdWxhdG9yKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgZGV2
aWNlID0gRGV2aWNlKG5hbWU9ZGV2aWNlX21hdGNoLmdyb3VwKCduYW1lJykucnN0cmlwKCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVkaWQ9ZGV2aWNlX21hdGNoLmdyb3VwKCd1
ZGlkJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZT1kZXZpY2Vf
bWF0Y2guZ3JvdXAoJ2F2YWlsYWJpbGl0eScpIGlzIE5vbmUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJ1bnRpbWU9Y3VycmVudF9ydW50aW1lKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBydW50aW1lPWN1cnJlbnRfcnVudGltZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaG9zdD1zZWxmLl9ob3N0KQogICAgICAgICAgICAgICAgIGN1cnJlbnRf
cnVudGltZS5kZXZpY2VzLmFwcGVuZChkZXZpY2UpCiAKICAgICBkZWYgZGV2aWNlX3R5cGUoc2Vs
ZiwgbmFtZT1Ob25lLCBpZGVudGlmaWVyPU5vbmUpOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>299284</attachid>
            <date>2017-01-19 16:51:03 -0800</date>
            <delta_ts>2017-01-23 16:28:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165927-20170119164911.patch</filename>
            <type>text/plain</type>
            <size>29045</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMDkzNikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYwIEBACisyMDE3LTAxLTE5ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBSZW1vdmluZyBMYXlvdXRUZXN0UmVsYXkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTkyNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTGF5b3V0VGVzdFJlbGF5OiBSZW1vdmVk
IExheW91dFRlc3RSZWxheS4KKyAgICAgICAgKiBNYWtlZmlsZTogUmVtb3ZlZCBMYXlvdXRUZXN0
UmVsYXkgcmVmZXJlbmNlcy4KKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLXdlYmtpdDogUmVtb3Zl
ZCBMYXlvdXRUZXN0UmVsYXkgcmVmZXJlbmNlcy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3BvcnQvYmFzZS5weToKKyAgICAgICAgKFBvcnQuX19pbml0X18pOiBBZGRlZCBfdGVzdF9ydW5u
ZXJfcHJvY2Vzc19jb25zdHJ1Y3Rvci4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQv
ZGFyd2luLnB5OgorICAgICAgICAoRGFyd2luUG9ydC5hcHBfaWRlbnRpZmllcl9mcm9tX2J1bmRs
ZSk6IEFkZGVkIGZ1bmN0aW9uIHRvIGV4dHJhY3QgYnVuZGxlIElEIGZyb20gcGxpc3QuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weToKKyAgICAgICAgKERyaXZlci5f
c3RhcnQpOiBQYXNzIHdvcmtlcl9udW1iZXIgc2VydmVyX3Byb2Nlc3MuCisgICAgICAgIChJT1NT
aW11bGF0b3JEcml2ZXIpOiBEZWxldGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9y
dC9kcml2ZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChEcml2ZXJUZXN0LnRlc3Rfc3RvcF9jbGVh
bnNfdXBfcHJvcGVybHkpOiBTZXQgX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgZm9y
IHRlc3RpbmcuCisgICAgICAgIChEcml2ZXJUZXN0LnRlc3RfdHdvX3N0YXJ0c19jbGVhbnNfdXBf
cHJvcGVybHkpOiBEaXR0by4KKyAgICAgICAgKERyaXZlclRlc3QudGVzdF9zdGFydF9hY3R1YWxs
eV9zdGFydHMpOiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5
OgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydCk6IFJlbW92ZSByZWxheV9uYW1lLgorICAgICAg
ICAoSU9TU2ltdWxhdG9yUG9ydC5fX2luaXRfXyk6IFNldCBfdGVzdF9ydW5uZXJfcHJvY2Vzc19j
b25zdHJ1Y3RvciBmb3IgSU9TU2ltdWxhdG9ycy4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQu
X2NyZWF0ZV9zaW11bGF0b3JzKTogRm9ybWF0dGluZyBjaGFuZ2UuCisgICAgICAgIChJT1NTaW11
bGF0b3JQb3J0LnJlbGF5X3BhdGgpOiBEZWxldGVkLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9y
dC5fY2hlY2tfcmVsYXkpOiBVc2UgYmFzZSBjbGFzcy4KKyAgICAgICAgKElPU1NpbXVsYXRvclBv
cnQuX2NoZWNrX3BvcnRfYnVpbGQpOiBEZWxldGVkLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9y
dC5fYnVpbGRfcmVsYXkpOiBEZWxldGVkLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fYnVp
bGRfZHJpdmVyKTogRGVsZXRlZC4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX2RyaXZlcl9j
bGFzcyk6IFVzZSBiYXNlIGNsYXNzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9p
b3NfdW5pdHRlc3QucHk6CisgICAgICAgIChpb3NUZXN0LnRlc3RfMzJiaXQpOiBVcGRhdGUgdGVz
dC4KKyAgICAgICAgKGlvc1Rlc3QudGVzdF82NGJpdCk6IFVwZGF0ZSB0ZXN0LgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weToKKyAgICAgICAgKFNlcnZl
clByb2Nlc3MuX19pbml0X18pOiBBY2NlcHQgd29ya2VyX251bWJlci4KKyAgICAgICAgKFNlcnZl
clByb2Nlc3MuX3NldF9maWxlX25vbmJsb2NraW5nKTogQWRkZWQgdG8gc2hhcmUgY29tbW9uIGNv
ZGUuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLndyaXRlKTogRmx1c2ggYWZ0ZXIgd3JpdGluZy4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3NfbW9jay5weToK
KyAgICAgICAgKE1vY2tTZXJ2ZXJQcm9jZXNzLl9faW5pdF9fKTogQWNjZXB0IHdvcmtlcl9udW1i
ZXIuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNzLnB5
OiBBZGRlZC4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MpOiAKKyAgICAgICAgKFNpbXVsYXRv
clByb2Nlc3MuU2ltdWxhdG9yUHJvY2Vzc1BvcGVuKToKKyAgICAgICAgKFNpbXVsYXRvclByb2Nl
c3MuU2ltdWxhdG9yUHJvY2Vzc1BvcGVuLl9faW5pdF9fKTogU2V0LXVwIG9wZW4gc3RydWN0dXJl
IHdpdGggZW1wdHkgYXJndW1lbnRzLgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5TaW11bGF0
b3JQcm9jZXNzUG9wZW4ucG9sbCk6IENoZWNrIGlmIHRoZSBwcm9jZXNzIGlzIHJ1bm5pbmcuCisg
ICAgICAgIChTaW11bGF0b3JQcm9jZXNzLlNpbXVsYXRvclByb2Nlc3NQb3Blbi53YWl0KTogV2Fp
dCBmb3IgdGFyZ2V0IHByb2Nlc3MgdG8gY2xvc2UuCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNz
Ll9faW5pdF9fKTogSW5zdGFsbCBhcHAgdG8gZGV2aWNlLgorICAgICAgICAoU2ltdWxhdG9yUHJv
Y2Vzcy5fX3VubGlua19jaGVja19leGlzdHMpOiBVbmxpbmsgZmlsZSwgdGhyb3cgZXJyb3IgaWYg
dGhpcyBmYWlscy4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX3Jlc2V0KTogVW5saW5rIGZp
Zm9zLgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5fc3RhcnQpOiBMYXVuY2ggYXBwIG9uIHNp
bXVsYXRvciwgbGluayBmaWZvcy4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX2tpbGwpOiBT
aHV0ZG93biBhcHAgb24gc2ltdWxhdG9yCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS94Y29k
ZS9zaW11bGF0b3IucHk6CisgICAgICAgIChEZXZpY2UuX19pbml0X18pOiBBY2NlcHQgaG9zdCB0
byBydW4gaW5zdGFsbC9sYXVuY2gvdGVybWluYXRlLgorICAgICAgICAoRGV2aWNlLmluc3RhbGxf
YXBwKTogSW5zdGFsbCBhcHAgdG8gdGFyZ2V0IGRldmljZS4KKyAgICAgICAgKERldmljZS5sYXVu
Y2hfYXBwKTogTGF1bmNoIGFwcCBvbiB0YXJnZXQgZGV2aWNlLgorICAgICAgICAoRGV2aWNlLnRl
cm1pbmF0ZV9hcHApOiBTaHV0ZG93biBhcHAgb24gdGFyZ2V0IGRldmljZS4KKwogMjAxNy0wMS0x
OSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFtD
b2NvYV0gVmFyaWF0aW9uIGZvbnRzIGFyZSBlcnJvbmVvdXNseSBkaXNhYmxlZCBvbiBpT1MKSW5k
ZXg6IFRvb2xzL01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL01ha2VmaWxlCShyZXZpc2lv
biAyMTA5MzYpCisrKyBUb29scy9NYWtlZmlsZQkod29ya2luZyBjb3B5KQpAQCAtNyw5ICs3LDYg
QEAgaWZuZXEgKCwkKFNES1JPT1QpKQogCWlmbmVxICgsJChmaW5kc3RyaW5nIGlwaG9uZSwkKFNE
S1JPT1QpKSkKIAkJTU9EVUxFUyArPSBNb2JpbGVNaW5pQnJvd3NlcgogCWVuZGlmCi0JaWZlcSAo
LCQoRE9fTk9UX0JVSUxEX0xBWU9VVF9URVNUX1JFTEFZKSkKLQkJTU9EVUxFUyArPSBMYXlvdXRU
ZXN0UmVsYXkKLQllbmRpZgogZW5kaWYKIAogYWxsOgpJbmRleDogVG9vbHMvU2NyaXB0cy9idWls
ZC13ZWJraXQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQJKHJldmlz
aW9uIDIxMDkzNikKKysrIFRvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CSh3b3JraW5nIGNvcHkp
CkBAIC0yMDAsMTAgKzIwMCw2IEBAIGlmIChpc0FwcGxlTWFjV2ViS2l0KCkpIHsKICAgICAgICAg
cHVzaCBAY29weUxpYnJhcmllc0FyZ3MsIHByb2R1Y3REaXIoKTsKICAgICAgICAgcHJpbnQoam9p
bigiICIsIEBjb3B5TGlicmFyaWVzQXJncykgLiAiXG4iKTsKICAgICAgICAgKHN5c3RlbShAY29w
eUxpYnJhcmllc0FyZ3MpID09IDApIG9yIGRpZTsKLQotICAgICAgICBpZiAod2lsbFVzZUlPU1Np
bXVsYXRvclNESygpKSB7Ci0gICAgICAgICAgICAoc3lzdGVtKCJwZXJsIiwgIlRvb2xzL1Njcmlw
dHMvYnVpbGQtbGF5b3V0dGVzdHJlbGF5IiwgYXJndW1lbnRzRm9yQ29uZmlndXJhdGlvbigpKSA9
PSAwKSBvciBkaWU7Ci0gICAgICAgIH0KICAgICB9CiAKICAgICAjIEJ1aWxkIFRvb2xzIG5lZWRl
ZCBmb3IgQXBwbGUgcG9ydHMKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNl
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5CShy
ZXZpc2lvbiAyMTA5MzYpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQko
d29ya2luZyBjb3B5KQpAQCAtMTMxLDYgKzEzMSw3IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAg
ICAgICAgc2VsZi5fd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyID0gTm9uZQogICAgICAgICBzZWxm
Ll9pbWFnZV9kaWZmZXIgPSBOb25lCiAgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzX2NvbnN0
cnVjdG9yID0gc2VydmVyX3Byb2Nlc3MuU2VydmVyUHJvY2VzcyAgIyBvdmVycmlkYWJsZSBmb3Ig
dGVzdGluZworICAgICAgICBzZWxmLl90ZXN0X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0g
c2VydmVyX3Byb2Nlc3MuU2VydmVyUHJvY2VzcwogCiAgICAgICAgIGlmIG5vdCBoYXNhdHRyKG9w
dGlvbnMsICdjb25maWd1cmF0aW9uJykgb3Igbm90IG9wdGlvbnMuY29uZmlndXJhdGlvbjoKICAg
ICAgICAgICAgIHNlbGYuc2V0X29wdGlvbl9kZWZhdWx0KCdjb25maWd1cmF0aW9uJywgc2VsZi5k
ZWZhdWx0X2NvbmZpZ3VyYXRpb24oKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9kYXJ3aW4ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rh
cndpbi5weQkocmV2aXNpb24gMjEwOTM2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2Rhcndpbi5weQkod29ya2luZyBjb3B5KQpAQCAtMTc0LDMgKzE3NCwxMSBAQCBjbGFzcyBEYXJ3
aW5Qb3J0KEFwcGxlUG9ydCk6CiAgICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvcjoKICAgICAgICAg
ICAgIF9sb2cud2FybigieGNydW4gZmFpbGVkOyBmYWxsaW5nIGJhY2sgdG8gJyVzJy4iICUgZmFs
bGJhY2spCiAgICAgICAgICAgICByZXR1cm4gZmFsbGJhY2sKKworICAgIGRlZiBhcHBfaWRlbnRp
Zmllcl9mcm9tX2J1bmRsZShzZWxmLCBhcHBfYnVuZGxlKToKKyAgICAgICAgcGxpc3RfcGF0aCA9
IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihhcHBfYnVuZGxlLCAnSW5mby5wbGlzdCcpCisgICAgICAg
IGlmIG5vdCBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhwbGlzdF9wYXRoKToKKyAgICAgICAgICAg
IHBsaXN0X3BhdGggPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oYXBwX2J1bmRsZSwgJ0NvbnRlbnRz
L0luZm8ucGxpc3QnKQorICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMocGxp
c3RfcGF0aCk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5f
ZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsnL3Vzci9saWJleGVjL1BsaXN0QnVkZHknLCAnLWMnLCAn
UHJpbnQgQ0ZCdW5kbGVJZGVudGlmaWVyJywgcGxpc3RfcGF0aF0pLnJzdHJpcCgpCkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkJKHJldmlzaW9uIDIxMDkzNikKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTEz
OCw3ICsxMzgsNyBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAgICAgICAgc2VsZi5fZHJpdmVy
X3VzZXJfZGlyZWN0b3J5X3N1ZmZpeCA9IE5vbmUKICAgICAgICAgc2VsZi5fZHJpdmVyX3VzZXJf
Y2FjaGVfZGlyZWN0b3J5ID0gTm9uZQogCi0gICAgICAgICMgV2ViS2l0VGVzdFJ1bm5lci9MYXlv
dXRUZXN0UmVsYXkgY2FuIHJlcG9ydCBiYWNrIHN1YnByb2Nlc3MgY3Jhc2hlcyBieSBwcmludGlu
ZworICAgICAgICAjIFdlYktpdFRlc3RSdW5uZXIgY2FuIHJlcG9ydCBiYWNrIHN1YnByb2Nlc3Mg
Y3Jhc2hlcyBieSBwcmludGluZwogICAgICAgICAjICIjQ1JBU0hFRCAtIFBST0NFU1NOQU1FIi4g
IFNpbmNlIHRob3NlIGNhbiBoYXBwZW4gYXQgYW55IHRpbWUgYW5kIFNlcnZlclByb2Nlc3MKICAg
ICAgICAgIyB3b24ndCBiZSBhd2FyZSBvZiB0aGVtIChzaW5jZSB0aGUgYWN0dWFsIHRvb2wgZGlk
bid0IGNyYXNoLCBqdXN0IGEgc3VicHJvY2VzcykKICAgICAgICAgIyB3ZSByZWNvcmQgdGhlIGNy
YXNoZWQgc3VicHJvY2VzcyBuYW1lIGhlcmUuCkBAIC0zMjcsNyArMzI3LDYgQEAgY2xhc3MgRHJp
dmVyKG9iamVjdCk6CiAKICAgICBkZWYgX3NldHVwX2Vudmlyb25fZm9yX2RyaXZlcihzZWxmLCBl
bnZpcm9ubWVudCk6CiAgICAgICAgIGJ1aWxkX3Jvb3RfcGF0aCA9IHN0cihzZWxmLl9wb3J0Ll9i
dWlsZF9wYXRoKCkpCi0gICAgICAgICMgRklYTUU6IERZTERfKiB2YXJpYWJsZXMgc2hvdWxkIGJl
IE1hYy1vbmx5LiBFdmVuIGlPUyBTaW11bGF0b3IgZG9lc24ndCBuZWVkIHRoZW0sIGFzIExheW91
dFRlc3RSZWxheSBpcyBhIGhvc3QgYmluYXJ5LgogICAgICAgICBzZWxmLl9hcHBlbmRfZW52aXJv
bm1lbnRfdmFyaWFibGVfcGF0aChlbnZpcm9ubWVudCwgJ0RZTERfTElCUkFSWV9QQVRIJywgYnVp
bGRfcm9vdF9wYXRoKQogICAgICAgICBzZWxmLl9hcHBlbmRfZW52aXJvbm1lbnRfdmFyaWFibGVf
cGF0aChlbnZpcm9ubWVudCwgJ19fWFBDX0RZTERfTElCUkFSWV9QQVRIJywgYnVpbGRfcm9vdF9w
YXRoKQogICAgICAgICBzZWxmLl9hcHBlbmRfZW52aXJvbm1lbnRfdmFyaWFibGVfcGF0aChlbnZp
cm9ubWVudCwgJ0RZTERfRlJBTUVXT1JLX1BBVEgnLCBidWlsZF9yb290X3BhdGgpCkBAIC0zNjks
NyArMzY4LDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgIGVudmlyb25tZW50ID0g
c2VsZi5fc2V0dXBfZW52aXJvbl9mb3JfdGVzdCgpCiAgICAgICAgIHNlbGYuX2NyYXNoZWRfcHJv
Y2Vzc19uYW1lID0gTm9uZQogICAgICAgICBzZWxmLl9jcmFzaGVkX3BpZCA9IE5vbmUKLSAgICAg
ICAgc2VsZi5fc2VydmVyX3Byb2Nlc3MgPSBzZWxmLl9wb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25z
dHJ1Y3RvcihzZWxmLl9wb3J0LCBzZWxmLl9zZXJ2ZXJfbmFtZSwgc2VsZi5jbWRfbGluZShwaXhl
bF90ZXN0cywgcGVyX3Rlc3RfYXJncyksIGVudmlyb25tZW50KQorICAgICAgICBzZWxmLl9zZXJ2
ZXJfcHJvY2VzcyA9IHNlbGYuX3BvcnQuX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3Io
c2VsZi5fcG9ydCwgc2VsZi5fc2VydmVyX25hbWUsIHNlbGYuY21kX2xpbmUocGl4ZWxfdGVzdHMs
IHBlcl90ZXN0X2FyZ3MpLCBlbnZpcm9ubWVudCwgd29ya2VyX251bWJlcj1zZWxmLl93b3JrZXJf
bnVtYmVyKQogICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzcy5zdGFydCgpCiAKICAgICBkZWYg
X3J1bl9wb3N0X3N0YXJ0X3Rhc2tzKHNlbGYpOgpAQCAtNjExLDI3ICs2MTAsNiBAQCBjbGFzcyBE
cml2ZXIob2JqZWN0KToKICAgICAgICAgcmV0dXJuIFRydWUKIAogCi0jIEZJWE1FOiB0aGlzIHNo
b3VsZCBiZSBhYnN0cmFjdGVkIG91dCB2aWEgdGhlIFBvcnQgc3ViY2xhc3Mgc29tZWhvdy4KLWNs
YXNzIElPU1NpbXVsYXRvckRyaXZlcihEcml2ZXIpOgotICAgIGRlZiBjbWRfbGluZShzZWxmLCBw
aXhlbF90ZXN0cywgcGVyX3Rlc3RfYXJncyk6Ci0gICAgICAgIGNtZCA9IHN1cGVyKElPU1NpbXVs
YXRvckRyaXZlciwgc2VsZikuY21kX2xpbmUocGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpCi0g
ICAgICAgIHJlbGF5X3Rvb2wgPSBzZWxmLl9wb3J0LnJlbGF5X3BhdGgKLSAgICAgICAgZHVtcF90
b29sID0gY21kWzBdCi0gICAgICAgIGR1bXBfdG9vbF9hcmdzID0gY21kWzE6XQotICAgICAgICBw
cm9kdWN0X2RpciA9IHNlbGYuX3BvcnQuX2J1aWxkX3BhdGgoKQotICAgICAgICByZWxheV9hcmdz
ID0gWwotICAgICAgICAgICAgJy1kZXZlbG9wZXJEaXInLCBzZWxmLl9wb3J0LmRldmVsb3Blcl9k
aXIsCi0gICAgICAgICAgICAnLXVkaWQnLCBzZWxmLl9wb3J0LmRldmljZV9pZF9mb3Jfd29ya2Vy
X251bWJlcihzZWxmLl93b3JrZXJfbnVtYmVyKSwKLSAgICAgICAgICAgICctcHJvZHVjdERpcics
IHByb2R1Y3RfZGlyLAotICAgICAgICAgICAgJy1hcHAnLCBkdW1wX3Rvb2wsCi0gICAgICAgIF0K
LSAgICAgICAgcmV0dXJuIFtyZWxheV90b29sXSArIHJlbGF5X2FyZ3MgKyBbJy0tJ10gKyBkdW1w
X3Rvb2xfYXJncwotCi0gICAgZGVmIF9zZXR1cF9lbnZpcm9uX2Zvcl9kcml2ZXIoc2VsZiwgZW52
aXJvbm1lbnQpOgotICAgICAgICBlbnZpcm9ubWVudFsnREVWRUxPUEVSX0RJUiddID0gc2VsZi5f
cG9ydC5kZXZlbG9wZXJfZGlyCi0gICAgICAgIHJldHVybiBzdXBlcihJT1NTaW11bGF0b3JEcml2
ZXIsIHNlbGYpLl9zZXR1cF9lbnZpcm9uX2Zvcl9kcml2ZXIoZW52aXJvbm1lbnQpCi0KLQogY2xh
c3MgQ29udGVudEJsb2NrKG9iamVjdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAg
ICBzZWxmLmNvbnRlbnRfdHlwZSA9IE5vbmUKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC9kcml2ZXJfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2RyaXZlcl91bml0dGVzdC5weQkocmV2aXNpb24gMjEwOTM2KQorKysgVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlcl91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpA
QCAtMjY0LDcgKzI2NCw3IEBAIGNsYXNzIERyaXZlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgog
CiAgICAgZGVmIHRlc3Rfc3RvcF9jbGVhbnNfdXBfcHJvcGVybHkoc2VsZik6CiAgICAgICAgIHBv
cnQgPSBUZXN0V2ViS2l0UG9ydCgpCi0gICAgICAgIHBvcnQuX3NlcnZlcl9wcm9jZXNzX2NvbnN0
cnVjdG9yID0gTW9ja1NlcnZlclByb2Nlc3MKKyAgICAgICAgcG9ydC5fdGVzdF9ydW5uZXJfcHJv
Y2Vzc19jb25zdHJ1Y3RvciA9IE1vY2tTZXJ2ZXJQcm9jZXNzCiAgICAgICAgIGRyaXZlciA9IERy
aXZlcihwb3J0LCAwLCBwaXhlbF90ZXN0cz1UcnVlKQogICAgICAgICBkcml2ZXIuc3RhcnQoVHJ1
ZSwgW10pCiAgICAgICAgIGxhc3RfdG1wZGlyID0gcG9ydC5fZmlsZXN5c3RlbS5sYXN0X3RtcGRp
cgpAQCAtMjc0LDcgKzI3NCw3IEBAIGNsYXNzIERyaXZlclRlc3QodW5pdHRlc3QuVGVzdENhc2Up
OgogCiAgICAgZGVmIHRlc3RfdHdvX3N0YXJ0c19jbGVhbnNfdXBfcHJvcGVybHkoc2VsZik6CiAg
ICAgICAgIHBvcnQgPSBUZXN0V2ViS2l0UG9ydCgpCi0gICAgICAgIHBvcnQuX3NlcnZlcl9wcm9j
ZXNzX2NvbnN0cnVjdG9yID0gTW9ja1NlcnZlclByb2Nlc3MKKyAgICAgICAgcG9ydC5fdGVzdF9y
dW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IE1vY2tTZXJ2ZXJQcm9jZXNzCiAgICAgICAgIGRy
aXZlciA9IERyaXZlcihwb3J0LCAwLCBwaXhlbF90ZXN0cz1UcnVlKQogICAgICAgICBkcml2ZXIu
c3RhcnQoVHJ1ZSwgW10pCiAgICAgICAgIGxhc3RfdG1wZGlyID0gcG9ydC5fZmlsZXN5c3RlbS5s
YXN0X3RtcGRpcgpAQCAtMjgzLDcgKzI4Myw3IEBAIGNsYXNzIERyaXZlclRlc3QodW5pdHRlc3Qu
VGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3Rfc3RhcnRfYWN0dWFsbHlfc3RhcnRzKHNlbGYpOgog
ICAgICAgICBwb3J0ID0gVGVzdFdlYktpdFBvcnQoKQotICAgICAgICBwb3J0Ll9zZXJ2ZXJfcHJv
Y2Vzc19jb25zdHJ1Y3RvciA9IE1vY2tTZXJ2ZXJQcm9jZXNzCisgICAgICAgIHBvcnQuX3Rlc3Rf
cnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJvY2VzcwogICAgICAgICBk
cml2ZXIgPSBEcml2ZXIocG9ydCwgMCwgcGl4ZWxfdGVzdHM9VHJ1ZSkKICAgICAgICAgZHJpdmVy
LnN0YXJ0KFRydWUsIFtdKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZHJpdmVyLl9zZXJ2ZXJf
cHJvY2Vzcy5zdGFydGVkKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5CShyZXZp
c2lvbiAyMTA5MzYpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBAIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1v
ZGVscy50ZXN0X2MKIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgY29uZmlnIGFzIHBvcnRfY29u
ZmlnCiBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGRyaXZlciwgaW1hZ2VfZGlmZgogZnJvbSB3
ZWJraXRweS5wb3J0LmRhcndpbiBpbXBvcnQgRGFyd2luUG9ydAorZnJvbSB3ZWJraXRweS5wb3J0
LnNpbXVsYXRvcl9wcm9jZXNzIGltcG9ydCBTaW11bGF0b3JQcm9jZXNzCiBmcm9tIHdlYmtpdHB5
Lnhjb2RlLnNpbXVsYXRvciBpbXBvcnQgU2ltdWxhdG9yLCBSdW50aW1lLCBEZXZpY2VUeXBlCiBm
cm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uY3Jhc2hsb2dzIGltcG9ydCBDcmFzaExvZ3MKIApA
QCAtNzgsNyArNzksNiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAg
IFNESyA9ICdpcGhvbmVzaW11bGF0b3InCiAKICAgICBTSU1VTEFUT1JfQlVORExFX0lEID0gJ2Nv
bS5hcHBsZS5pcGhvbmVzaW11bGF0b3InCi0gICAgcmVsYXlfbmFtZSA9ICdMYXlvdXRUZXN0UmVs
YXknCiAgICAgU0lNVUxBVE9SX0RJUkVDVE9SWSA9ICIvdG1wL1dlYktpdFRlc3RpbmdTaW11bGF0
b3JzLyIKICAgICBMU1JFR0lTVEVSX1BBVEggPSAiL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3Mv
Q29yZVNlcnZpY2VzLmZyYW1ld29yay9GcmFtZXdvcmtzL0xhdW5jaFNlcnZpY2VzLmZyYW1ld29y
ay9WZXJzaW9ucy9DdXJyZW50L1N1cHBvcnQvbHNyZWdpc3RlciIKICAgICBQUk9DRVNTX0NPVU5U
X0VTVElNQVRFX1BFUl9TSU1VTEFUT1JfSU5TVEFOQ0UgPSAxMDAKQEAgLTk3LDYgKzk3LDcgQEAg
Y2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKIAogICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKToKICAgICAgICAgRGFyd2luUG9ydC5fX2lu
aXRfXyhzZWxmLCBob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKQorICAgICAgICBzZWxmLl90ZXN0
X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gU2ltdWxhdG9yUHJvY2VzcwogCiAgICAgICAg
IG9wdGlvbmFsX2RldmljZV9jbGFzcyA9IHNlbGYuZ2V0X29wdGlvbignZGV2aWNlX2NsYXNzJykK
ICAgICAgICAgc2VsZi5fcHJpbnRpbmdfY21kX2xpbmUgPSBGYWxzZQpAQCAtMTQ4LDE2ICsxNDks
NiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgICAgICAgICAgZGV2
aWNlX3R5cGUgPSBEZXZpY2VUeXBlLmZyb21fbmFtZShkZXZpY2VfbmFtZSkKICAgICAgICAgcmV0
dXJuIGRldmljZV90eXBlCiAKLSAgICBAcHJvcGVydHkKLSAgICBAbWVtb2l6ZWQKLSAgICBkZWYg
cmVsYXlfcGF0aChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fcm9vdF93YXNfc2V0OgotICAgICAg
ICAgICAgcGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0uYWJzcGF0aChzZWxmLmdldF9vcHRpb24oJ3Jv
b3QnKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1hY19jb25maWcgPSBwb3J0X2NvbmZp
Zy5Db25maWcoc2VsZi5fZXhlY3V0aXZlLCBzZWxmLl9maWxlc3lzdGVtLCAnbWFjJykKLSAgICAg
ICAgICAgIHBhdGggPSBtYWNfY29uZmlnLmJ1aWxkX2RpcmVjdG9yeShzZWxmLmdldF9vcHRpb24o
J2NvbmZpZ3VyYXRpb24nKSkKLSAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihw
YXRoLCBzZWxmLnJlbGF5X25hbWUpCi0KICAgICBAbWVtb2l6ZWQKICAgICBkZWYgY2hpbGRfcHJv
Y2Vzc2VzKHNlbGYpOgogICAgICAgICByZXR1cm4gaW50KHNlbGYuZ2V0X29wdGlvbignY2hpbGRf
cHJvY2Vzc2VzJykpCkBAIC0xODIsMTkgKzE3Myw2IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQo
RGFyd2luUG9ydCk6CiAKICAgICAgICAgcmV0dXJuIG1pbihtYXhpbXVtX3NpbXVsYXRvcl9jb3Vu
dF9vbl90aGlzX3N5c3RlbSwgYmVzdF9jaGlsZF9wcm9jZXNzX2NvdW50X2Zvcl9jcHUpCiAKLSAg
ICBkZWYgX2NoZWNrX3JlbGF5KHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZXN5c3Rl
bS5leGlzdHMoc2VsZi5yZWxheV9wYXRoKToKLSAgICAgICAgICAgIF9sb2cuZXJyb3IoIiVzIHdh
cyBub3QgZm91bmQgYXQgJXMiICUgKHNlbGYucmVsYXlfbmFtZSwgc2VsZi5yZWxheV9wYXRoKSkK
LSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVm
IF9jaGVja19wb3J0X2J1aWxkKHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5fcm9vdF93YXNf
c2V0IGFuZCBzZWxmLmdldF9vcHRpb24oJ2J1aWxkJykgYW5kIG5vdCBzZWxmLl9idWlsZF9yZWxh
eSgpOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIGlmIG5vdCBzZWxmLl9jaGVj
a19yZWxheSgpOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIHJldHVybiBUcnVl
Ci0KICAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVy
ciwgbmV3ZXJfdGhhbiwgdGltZV9mbj10aW1lLnRpbWUsIHNsZWVwX2ZuPXRpbWUuc2xlZXAsIHdh
aXRfZm9yX2xvZz1UcnVlKToKICAgICAgICAgdGltZV9mbiA9IHRpbWVfZm4gb3IgdGltZS50aW1l
CiAgICAgICAgIHNsZWVwX2ZuID0gc2xlZXBfZm4gb3IgdGltZS5zbGVlcApAQCAtMjE1LDcgKzE5
Myw3IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fZ2V0X2NyYXNoX2xvZyhjcmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlk
WzBdLCBjcmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlkWzFdLCBzdGRvdXQsCiAgICAgICAg
ICAgICAgICAgJ1xuJy5qb2luKHN0ZGVycl9saW5lcyksIG5ld2VyX3RoYW4sIHRpbWVfZm4sIHNs
ZWVwX2ZuLCB3YWl0X2Zvcl9sb2cpCiAKLSAgICAgICAgIyBMYXlvdXRUZXN0UmVsYXkgY3Jhc2hl
ZAorICAgICAgICAjIEFwcCBjcmFzaGVkCiAgICAgICAgIF9sb2cuZGVidWcoJ2xvb2tpbmcgZm9y
IGNyYXNoIGxvZyBmb3IgJXM6JXMnICUgKG5hbWUsIHN0cihwaWQpKSkKICAgICAgICAgY3Jhc2hf
bG9nID0gJycKICAgICAgICAgY3Jhc2hfbG9ncyA9IENyYXNoTG9ncyhzZWxmLmhvc3QpCkBAIC0y
MzMsMjUgKzIxMSw2IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAgICAg
ICAgICAgICByZXR1cm4gc3RkZXJyLCBOb25lCiAgICAgICAgIHJldHVybiBzdGRlcnIsIGNyYXNo
X2xvZwogCi0gICAgZGVmIF9idWlsZF9yZWxheShzZWxmKToKLSAgICAgICAgZW52aXJvbm1lbnQg
PSBzZWxmLmhvc3QuY29weV9jdXJyZW50X2Vudmlyb25tZW50KCkKLSAgICAgICAgZW52aXJvbm1l
bnQuZGlzYWJsZV9nY2Nfc21hcnRxdW90ZXMoKQotICAgICAgICBlbnYgPSBlbnZpcm9ubWVudC50
b19kaWN0aW9uYXJ5KCkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIEZJWE1FOiBXZSBz
aG91bGQgYmUgcGFzc2luZyBfYXJndW1lbnRzX2Zvcl9jb25maWd1cmF0aW9uKCksIHdoaWNoIHJl
c3BlY3RzIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIHBvcnQsCi0gICAgICAgICAgICAjIGluc3Rl
YWQgb2YgaGFyZGNvZGluZyAtLWlvcy1zaW11bGF0b3IuCi0gICAgICAgICAgICBzZWxmLl9ydW5f
c2NyaXB0KCJidWlsZC1sYXlvdXR0ZXN0cmVsYXkiLCBhcmdzPVsiLS1pb3Mtc2ltdWxhdG9yIl0s
IGVudj1lbnYpCi0gICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvciwgZToKLSAgICAgICAgICAgIF9s
b2cuZXJyb3IoZS5tZXNzYWdlX3dpdGhfb3V0cHV0KG91dHB1dF9saW1pdD1Ob25lKSkKLSAgICAg
ICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIF9idWls
ZF9kcml2ZXIoc2VsZik6Ci0gICAgICAgIGJ1aWx0X3Rvb2wgPSBzdXBlcihJT1NTaW11bGF0b3JQ
b3J0LCBzZWxmKS5fYnVpbGRfZHJpdmVyKCkKLSAgICAgICAgYnVpbHRfcmVsYXkgPSBzZWxmLl9i
dWlsZF9yZWxheSgpCi0gICAgICAgIHJldHVybiBidWlsdF90b29sIGFuZCBidWlsdF9yZWxheQot
CiAgICAgZGVmIF9idWlsZF9kcml2ZXJfZmxhZ3Moc2VsZik6CiAgICAgICAgIGFyY2hzID0gWydB
UkNIUz1pMzg2J10gaWYgc2VsZi5hcmNoaXRlY3R1cmUoKSA9PSAneDg2JyBlbHNlIFtdCiAgICAg
ICAgIHNkayA9IFsnLS1zZGsnLCAnaXBob25lc2ltdWxhdG9yJ10KQEAgLTI2NCw5ICsyMjMsNiBA
QCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgICAgICAgICAgICAgIGNv
bmZpZ3VyYXRpb25zLmFwcGVuZChUZXN0Q29uZmlndXJhdGlvbih2ZXJzaW9uPXNlbGYuX3ZlcnNp
b24sIGFyY2hpdGVjdHVyZT1hcmNoaXRlY3R1cmUsIGJ1aWxkX3R5cGU9YnVpbGRfdHlwZSkpCiAg
ICAgICAgIHJldHVybiBjb25maWd1cmF0aW9ucwogCi0gICAgZGVmIF9kcml2ZXJfY2xhc3Moc2Vs
Zik6Ci0gICAgICAgIHJldHVybiBkcml2ZXIuSU9TU2ltdWxhdG9yRHJpdmVyCi0KICAgICBkZWYg
ZGVmYXVsdF9iYXNlbGluZV9zZWFyY2hfcGF0aChzZWxmKToKICAgICAgICAgaWYgc2VsZi5nZXRf
b3B0aW9uKCd3ZWJraXRfdGVzdF9ydW5uZXInKToKICAgICAgICAgICAgIGZhbGxiYWNrX25hbWVz
ID0gW3NlbGYuX3drMl9wb3J0X25hbWUoKV0gKyBbc2VsZi5wb3J0X25hbWVdICsgWyd3azInXQpA
QCAtMjgwLDkgKzIzNiw5IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAK
ICAgICBkZWYgX2NyZWF0ZV9zaW11bGF0b3JzKHNlbGYpOgogICAgICAgICBpZiAoc2VsZi5kZWZh
dWx0X2NoaWxkX3Byb2Nlc3NlcygpIDwgc2VsZi5jaGlsZF9wcm9jZXNzZXMoKSk6Ci0gICAgICAg
ICAgICAgICAgX2xvZy53YXJuKCJZb3UgaGF2ZSBzcGVjaWZpZWQgdmVyeSBoaWdoIHZhbHVlKHsw
fSkgZm9yIC0tY2hpbGQtcHJvY2Vzc2VzIi5mb3JtYXQoc2VsZi5jaGlsZF9wcm9jZXNzZXMoKSkp
Ci0gICAgICAgICAgICAgICAgX2xvZy53YXJuKCJtYXhpbXVtIGNoaWxkLXByb2Nlc3NlcyB3aGlj
aCBjYW4gYmUgc3VwcG9ydGVkIG9uIHRoaXMgc3lzdGVtIGFyZTogezB9Ii5mb3JtYXQoc2VsZi5k
ZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcygpKSkKLSAgICAgICAgICAgICAgICBfbG9nLndhcm4oIlRo
aXMgaXMgdmVyeSBsaWtlbHkgdG8gZmFpbC4iKQorICAgICAgICAgICAgX2xvZy53YXJuKCJZb3Ug
aGF2ZSBzcGVjaWZpZWQgdmVyeSBoaWdoIHZhbHVlKHswfSkgZm9yIC0tY2hpbGQtcHJvY2Vzc2Vz
Ii5mb3JtYXQoc2VsZi5jaGlsZF9wcm9jZXNzZXMoKSkpCisgICAgICAgICAgICBfbG9nLndhcm4o
Im1heGltdW0gY2hpbGQtcHJvY2Vzc2VzIHdoaWNoIGNhbiBiZSBzdXBwb3J0ZWQgb24gdGhpcyBz
eXN0ZW0gYXJlOiB7MH0iLmZvcm1hdChzZWxmLmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKCkpKQor
ICAgICAgICAgICAgX2xvZy53YXJuKCJUaGlzIGlzIHZlcnkgbGlrZWx5IHRvIGZhaWwuIikKIAog
ICAgICAgICBpZiBzZWxmLl91c2luZ19kZWRpY2F0ZWRfc2ltdWxhdG9ycygpOgogICAgICAgICAg
ICAgc2VsZi5fY3JlYXRlU2ltdWxhdG9yQXBwcygpCkBAIC00MTMsNyArMzY5LDYgQEAgY2xhc3Mg
SU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICBkZWYgX3Rlc3RpbmdfZGV2aWNlKHNl
bGYsIG51bWJlcik6CiAgICAgICAgIHJldHVybiBTaW11bGF0b3IuZGV2aWNlX251bWJlcihudW1i
ZXIpCiAKLSAgICAjIFRoaXMgaXMgb25seSBleHBvc2VkIHNvIHRoYXQgSU9TU2ltdWxhdG9yRHJp
dmVyIGNhbiB1c2UgaXQuCiAgICAgZGVmIGRldmljZV9pZF9mb3Jfd29ya2VyX251bWJlcihzZWxm
LCBudW1iZXIpOgogICAgICAgICBpZiBzZWxmLl9wcmludGluZ19jbWRfbGluZToKICAgICAgICAg
ICAgIHJldHVybiAnPGR1bW15IGlkPicKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9pb3NfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L2lvc191bml0dGVzdC5weQkocmV2aXNpb24gMjEwOTM2KQorKysgVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2lvc191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAs
NyBAQCBjbGFzcyBpb3NUZXN0KGRhcndpbl90ZXN0Y2FzZS5EYXJ3aW5UZXN0CiAgICAgICAgIHBv
cnQuX3J1bl9zY3JpcHQgPSBydW5fc2NyaXB0CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9y
dC5hcmNoaXRlY3R1cmUoKSwgJ3g4NicpCiAgICAgICAgIHBvcnQuX2J1aWxkX2RyaXZlcigpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hcmdzLCBbJy0taW9zLXNpbXVsYXRvciddKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYXJncywgWydBUkNIUz1pMzg2JywgJy0tc2Rr
JywgJ2lwaG9uZXNpbXVsYXRvciddKQogCiAgICAgZGVmIHRlc3RfNjRiaXQoc2VsZik6CiAgICAg
ICAgICMgQXBwbGUgTWFjIHBvcnQgaXMgNjQtYml0IGJ5IGRlZmF1bHQKQEAgLTgyLDcgKzgyLDcg
QEAgY2xhc3MgaW9zVGVzdChkYXJ3aW5fdGVzdGNhc2UuRGFyd2luVGVzdAogCiAgICAgICAgIHBv
cnQuX3J1bl9zY3JpcHQgPSBydW5fc2NyaXB0CiAgICAgICAgIHBvcnQuX2J1aWxkX2RyaXZlcigp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hcmdzLCBbJy0taW9zLXNpbXVsYXRvcidd
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYXJncywgWyctLXNkaycsICdpcGhvbmVz
aW11bGF0b3InXSkKIAogICAgIGRlZiB0ZXN0X3Nka19uYW1lKHNlbGYpOgogICAgICAgICBwb3J0
ID0gc2VsZi5tYWtlX3BvcnQoKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3Nl
cnZlcl9wcm9jZXNzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9zZXJ2ZXJfcHJvY2Vzcy5weQkocmV2aXNpb24gMjEwOTM2KQorKysgVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1
OSw3IEBAIGNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToKICAgICBpbmRlZmluaXRlbHkuIFRo
ZSBjbGFzcyBhbHNvIGhhbmRsZXMgdHJhbnNwYXJlbnRseSByZXN0YXJ0aW5nIHByb2Nlc3Nlcwog
ICAgIGFzIG5lY2Vzc2FyeSB0byBrZWVwIGlzc3VpbmcgY29tbWFuZHMuIiIiCiAKLSAgICBkZWYg
X19pbml0X18oc2VsZiwgcG9ydF9vYmosIG5hbWUsIGNtZCwgZW52PU5vbmUsIHVuaXZlcnNhbF9u
ZXdsaW5lcz1GYWxzZSwgdHJlYXRfbm9fZGF0YV9hc19jcmFzaD1GYWxzZSk6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVudj1Ob25lLCB1bml2ZXJzYWxfbmV3
bGluZXM9RmFsc2UsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2g9RmFsc2UsIHdvcmtlcl9udW1iZXI9
Tm9uZSk6CiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0X29iagogICAgICAgICBzZWxmLl9uYW1l
ID0gbmFtZSAgIyBTaG91bGQgYmUgdGhlIGNvbW1hbmQgbmFtZSAoZS5nLiBEdW1wUmVuZGVyVHJl
ZSwgSW1hZ2VEaWZmKQogICAgICAgICBzZWxmLl9jbWQgPSBjbWQKQEAgLTEwMyw2ICsxMDMsMTEg
QEAgY2xhc3MgU2VydmVyUHJvY2VzcyhvYmplY3QpOgogICAgIGRlZiBwcm9jZXNzX25hbWUoc2Vs
Zik6CiAgICAgICAgIHJldHVybiBzZWxmLl9uYW1lCiAKKyAgICBAc3RhdGljbWV0aG9kCisgICAg
ZGVmIF9zZXRfZmlsZV9ub25ibG9ja2luZyhmaWxlKToKKyAgICAgICAgZmwgPSBmY250bC5mY250
bChmaWxlLmZpbGVubygpLCBmY250bC5GX0dFVEZMKQorICAgICAgICBmY250bC5mY250bChmaWxl
LmZpbGVubygpLCBmY250bC5GX1NFVEZMLCBmbCB8IG9zLk9fTk9OQkxPQ0spCisKICAgICBkZWYg
X3N0YXJ0KHNlbGYpOgogICAgICAgICBpZiBzZWxmLl9wcm9jOgogICAgICAgICAgICAgcmFpc2Ug
VmFsdWVFcnJvcigiJXMgYWxyZWFkeSBydW5uaW5nIiAlIHNlbGYuX25hbWUpCkBAIC0xMTcsMTMg
KzEyMiw5IEBAIGNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToKICAgICAgICAgICAgIHVuaXZl
cnNhbF9uZXdsaW5lcz1zZWxmLl91bml2ZXJzYWxfbmV3bGluZXMpCiAgICAgICAgIHNlbGYuX3Bp
ZCA9IHNlbGYuX3Byb2MucGlkCiAgICAgICAgIHNlbGYuX3BvcnQuZmluZF9zeXN0ZW1fcGlkKHNl
bGYubmFtZSgpLCBzZWxmLl9waWQpCi0gICAgICAgIGZkID0gc2VsZi5fcHJvYy5zdGRvdXQuZmls
ZW5vKCkKICAgICAgICAgaWYgbm90IHNlbGYuX3VzZV93aW4zMl9hcGlzOgotICAgICAgICAgICAg
ZmwgPSBmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGTCkKLSAgICAgICAgICAgIGZjbnRsLmZj
bnRsKGZkLCBmY250bC5GX1NFVEZMLCBmbCB8IG9zLk9fTk9OQkxPQ0spCi0gICAgICAgICAgICBm
ZCA9IHNlbGYuX3Byb2Muc3RkZXJyLmZpbGVubygpCi0gICAgICAgICAgICBmbCA9IGZjbnRsLmZj
bnRsKGZkLCBmY250bC5GX0dFVEZMKQotICAgICAgICAgICAgZmNudGwuZmNudGwoZmQsIGZjbnRs
LkZfU0VURkwsIGZsIHwgb3MuT19OT05CTE9DSykKKyAgICAgICAgICAgIHNlbGYuX3NldF9maWxl
X25vbmJsb2NraW5nKHNlbGYuX3Byb2Muc3Rkb3V0KQorICAgICAgICAgICAgc2VsZi5fc2V0X2Zp
bGVfbm9uYmxvY2tpbmcoc2VsZi5fcHJvYy5zdGRlcnIpCiAKICAgICBkZWYgX2hhbmRsZV9wb3Nz
aWJsZV9pbnRlcnJ1cHQoc2VsZik6CiAgICAgICAgICIiIlRoaXMgcm91dGluZSBjaGVja3MgdG8g
c2VlIGlmIHRoZSBwcm9jZXNzIGNyYXNoZWQgb3IgZXhpdGVkCkBAIC0xNTAsNyArMTUxLDggQEAg
Y2xhc3MgU2VydmVyUHJvY2VzcyhvYmplY3QpOgogICAgICAgICBpZiBub3Qgc2VsZi5fcHJvYzoK
ICAgICAgICAgICAgIHNlbGYuX3N0YXJ0KCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2Vs
Zi5fcHJvYy5zdGRpbi53cml0ZShieXRlcykKKyAgICAgICAgICAgIGlmIHNlbGYuX3Byb2Muc3Rk
aW46CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvYy5zdGRpbi53cml0ZShieXRlcykKICAgICAg
ICAgZXhjZXB0IElPRXJyb3IsIGU6CiAgICAgICAgICAgICBzZWxmLnN0b3AoMC4wKQogICAgICAg
ICAgICAgIyBzdG9wKCkgY2FsbHMgX3Jlc2V0KCksIHNvIHdlIGhhdmUgdG8gc2V0IGNyYXNoZWQg
dG8gVHJ1ZSBhZnRlciBjYWxsaW5nIHN0b3AoKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L3NlcnZlcl9wcm9jZXNzX21vY2sucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzX21vY2sucHkJKHJldmlzaW9uIDIxMDkzNikK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzc19tb2NrLnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKIAogY2xhc3MgTW9ja1NlcnZlclByb2Nl
c3Mob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmo9Tm9uZSwgbmFtZT1O
b25lLCBjbWQ9Tm9uZSwgZW52PU5vbmUsIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgbGluZXM9
Tm9uZSwgY3Jhc2hlZD1GYWxzZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqPU5v
bmUsIG5hbWU9Tm9uZSwgY21kPU5vbmUsIGVudj1Ob25lLCB1bml2ZXJzYWxfbmV3bGluZXM9RmFs
c2UsIGxpbmVzPU5vbmUsIGNyYXNoZWQ9RmFsc2UsIHdvcmtlcl9udW1iZXI9Tm9uZSk6CiAgICAg
ICAgIHNlbGYudGltZWRfb3V0ID0gRmFsc2UKICAgICAgICAgc2VsZi5saW5lcyA9IGxpbmVzIG9y
IFtdCiAgICAgICAgIHNlbGYuY3Jhc2hlZCA9IGNyYXNoZWQKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9zaW11bGF0b3JfcHJvY2Vzcy5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvc2ltdWxhdG9yX3Byb2Nlc3MucHkJKG5vbmV4aXN0ZW50KQor
KysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNzLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI5IEBACisjIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMg
YXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKworaW1wb3J0IGVycm5vCitpbXBvcnQgb3MKK2ltcG9ydCBzaWduYWwKK2lt
cG9ydCB0aW1lCisKK2Zyb20gd2Via2l0cHkucG9ydC5zZXJ2ZXJfcHJvY2VzcyBpbXBvcnQgU2Vy
dmVyUHJvY2VzcworCisKK2NsYXNzIFNpbXVsYXRvclByb2Nlc3MoU2VydmVyUHJvY2Vzcyk6CisK
KyAgICBjbGFzcyBTaW11bGF0b3JQcm9jZXNzUG9wZW4ob2JqZWN0KToKKworICAgICAgICBkZWYg
X19pbml0X18oc2VsZik6CisgICAgICAgICAgICBzZWxmLnN0ZGluID0gTm9uZQorICAgICAgICAg
ICAgc2VsZi5zdGRvdXQgPSBOb25lCisgICAgICAgICAgICBzZWxmLnN0ZGVyciA9IE5vbmUKKyAg
ICAgICAgICAgIHNlbGYucGlkID0gTm9uZQorICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0g
Tm9uZQorCisgICAgICAgIGRlZiBwb2xsKHNlbGYpOgorICAgICAgICAgICAgaWYgbm90IHNlbGYu
cGlkOgorICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IC0xCisgICAgICAgICAgICBp
ZiBzZWxmLnJldHVybmNvZGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYucmV0dXJuY29k
ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLmtpbGwoc2VsZi5waWQsIDAp
CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciwgZXJyOgorICAgICAgICAgICAgICAgIGlmIGVy
ci5lcnJubyA9PSBlcnJuby5FU1JDSDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5j
b2RlID0gMQorICAgICAgICAgICAgICAgIGVsaWYgZXJyLmVycm5vICE9IGVycm5vLkVQRVJNOgor
ICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSAtMQorICAgICAgICAgICAgcmV0
dXJuIHNlbGYucmV0dXJuY29kZQorCisgICAgICAgIGRlZiB3YWl0KHNlbGYpOgorICAgICAgICAg
ICAgd2hpbGUgbm90IHNlbGYucG9sbCgpOgorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoLjAx
KQorICAgICAgICAgICAgcmV0dXJuIHNlbGYucmV0dXJuY29kZQorCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVudj1Ob25lLCB1bml2ZXJzYWxfbmV3bGluZXM9
RmFsc2UsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2g9RmFsc2UsIHdvcmtlcl9udW1iZXI9Tm9uZSk6
CisgICAgICAgIGZyb20gd2Via2l0cHkueGNvZGUuc2ltdWxhdG9yIGltcG9ydCBTaW11bGF0b3Ig
ICMgQXZvaWQgY2lyY3VsYXIgaW1wb3J0CisgICAgICAgIHNlbGYuX3NpbXVsYXRvcl9tYW5hZ2Vy
ID0gU2ltdWxhdG9yKHBvcnRfb2JqLmhvc3QpCisKKyAgICAgICAgc2VsZi5fYnVuZGxlX2lkID0g
cG9ydF9vYmouYXBwX2lkZW50aWZpZXJfZnJvbV9idW5kbGUoY21kWzBdKQorICAgICAgICBzZWxm
Ll9kZXZpY2UgPSBzZWxmLl9zaW11bGF0b3JfbWFuYWdlci5maW5kX2RldmljZV9ieV91ZGlkKHBv
cnRfb2JqLmRldmljZV9pZF9mb3Jfd29ya2VyX251bWJlcih3b3JrZXJfbnVtYmVyKSkKKyAgICAg
ICAgYXNzZXJ0IHNlbGYuX2RldmljZS5pbnN0YWxsX2FwcChjbWRbMF0pCisgICAgICAgIGVudlsn
SVBDX0lERU5USUZJRVInXSA9IHNlbGYuX2J1bmRsZV9pZCArICItIiArIHNlbGYuX2RldmljZS51
ZGlkCisKKyAgICAgICAgZmlsZV9sb2NhdGlvbiA9ICcvdG1wLycgKyBlbnZbJ0lQQ19JREVOVElG
SUVSJ10KKyAgICAgICAgc2VsZi5faW5fcGF0aCA9IGZpbGVfbG9jYXRpb24gKyAnX0lOJworICAg
ICAgICBzZWxmLl9vdXRfcGF0aCA9IGZpbGVfbG9jYXRpb24gKyAnX09VVCcKKyAgICAgICAgc2Vs
Zi5fZXJyb3JfcGF0aCA9IGZpbGVfbG9jYXRpb24gKyAnX0VSUk9SJworCisgICAgICAgIHN1cGVy
KFNpbXVsYXRvclByb2Nlc3MsIHNlbGYpLl9faW5pdF9fKHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVu
diwgdW5pdmVyc2FsX25ld2xpbmVzLCB0cmVhdF9ub19kYXRhX2FzX2NyYXNoKQorCisgICAgZGVm
IF9yZXNldChzZWxmKToKKyAgICAgICAgc3VwZXIoU2ltdWxhdG9yUHJvY2Vzcywgc2VsZikuX3Jl
c2V0KCkKKworICAgICAgICAjIFVubGlua3MgYXJlIG5lZWRlZCBvbiByZXNldCBpbiB0aGUgZXZl
bnQgdGhhdCB0aGUgUHl0aG9uIGNvZGUgdW5leHBlY3RlZGx5CisgICAgICAgICMgZmFpbHMgYmV0
d2VlbiByZXNldCBhbmQga2lsbC4gIFRoaXMgY2FuIGJlIGNhdXNlZCBieSBhIHNpZ2tpbGwgb3Ig
YSBjcmFzaC4KKyAgICAgICAgIyBUaGlzIGVuc3VyZXMgdGhhdCBvcy5ta2ZpZm8gd2lsbCBub3Qg
YmUgb2JzdHJ1Y3RlZCBieSBwcmV2aW91cyBmaWZvcy4KKyAgICAgICAgIyBPdGhlciBmaWxlcyB3
aWxsIHN0aWxsIGNhdXNlIG9zLm1rZmlmbyB0byBmYWlsLgorICAgICAgICB0cnk6CisgICAgICAg
ICAgICBvcy51bmxpbmsoc2VsZi5faW5fcGF0aCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAg
ICAgcGFzcworICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5fb3V0X3Bh
dGgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgb3MudW5saW5rKHNlbGYuX2Vycm9yX3BhdGgpCisgICAgICAgIGV4Y2VwdDoKKyAg
ICAgICAgICAgIHBhc3MKKworICAgIGRlZiBfc3RhcnQoc2VsZik6CisgICAgICAgIGlmIHNlbGYu
X3Byb2M6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCIlcyBhbHJlYWR5IHJ1bm5pbmci
ICUgc2VsZi5fbmFtZSkKKyAgICAgICAgc2VsZi5fcmVzZXQoKQorICAgICAgICBvcy5ta2ZpZm8o
c2VsZi5faW5fcGF0aCwgMDYwMCkKKyAgICAgICAgb3MubWtmaWZvKHNlbGYuX291dF9wYXRoLCAw
NjAwKQorICAgICAgICBvcy5ta2ZpZm8oc2VsZi5fZXJyb3JfcGF0aCwgMDYwMCkKKworICAgICAg
ICBzZWxmLl9wcm9jID0gU2ltdWxhdG9yUHJvY2Vzcy5TaW11bGF0b3JQcm9jZXNzUG9wZW4oKQor
ICAgICAgICBzZWxmLl9wcm9jLnN0ZG91dCA9IG9zLmZkb3Blbihvcy5vcGVuKHNlbGYuX291dF9w
YXRoLCBvcy5PX1JET05MWSB8IG9zLk9fTk9OQkxPQ0spLCAicmIiKQorICAgICAgICBzZWxmLl9w
cm9jLnN0ZGVyciA9IG9zLmZkb3Blbihvcy5vcGVuKHNlbGYuX2Vycm9yX3BhdGgsIG9zLk9fUkRP
TkxZIHwgb3MuT19OT05CTE9DSyksICJyYiIpCisKKyAgICAgICAgc2VsZi5fcGlkID0gc2VsZi5f
ZGV2aWNlLmxhdW5jaF9hcHAoc2VsZi5fYnVuZGxlX2lkLCBzZWxmLl9jbWRbMTpdLCBlbnY9c2Vs
Zi5fZW52KQorICAgICAgICBhc3NlcnQgc2VsZi5fcGlkCisgICAgICAgIHNlbGYuX3Byb2MucGlk
ID0gc2VsZi5fcGlkCisKKyAgICAgICAgZGVmIGhhbmRsZXIoc2lnbnVtLCBmcmFtZSk6CisgICAg
ICAgICAgICByYWlzZSBJT0Vycm9yKCJDb3VsZG4ndCBvcGVuIHN0ZGluIikKKyAgICAgICAgc2ln
bmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgaGFuZGxlcikKKyAgICAgICAgc2lnbmFsLmFsYXJt
KDMpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4gPSBvcGVuKHNl
bGYuX2luX3BhdGgsICJ3IiwgMCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5f
cHJvYy5zdGRpbiA9IE5vbmUKKyAgICAgICAgc2lnbmFsLmFsYXJtKDApCisKKyAgICAgICAgaWYg
bm90IHNlbGYuX3Byb2Muc3RkaW46CisgICAgICAgICAgICBzZWxmLl9jcmFzaGVkID0gVHJ1ZQor
CisgICAgZGVmIF9raWxsKHNlbGYpOgorICAgICAgICBzZWxmLl9kZXZpY2UudGVybWluYXRlX2Fw
cChzZWxmLl9idW5kbGVfaWQpCisgICAgICAgIHN1cGVyKFNpbXVsYXRvclByb2Nlc3MsIHNlbGYp
Ll9raWxsKCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5
CShyZXZpc2lvbiAyMTA5MzYpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVs
YXRvci5weQkod29ya2luZyBjb3B5KQpAQCAtMTY3LDcgKzE2Nyw3IEBAIGNsYXNzIERldmljZShv
YmplY3QpOgogICAgIFJlcHJlc2VudHMgYSBDb3JlU2ltdWxhdG9yIGRldmljZSB1bmRlcm5lYXRo
IGEgcnVudGltZQogICAgICIiIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHVkaWQs
IGF2YWlsYWJsZSwgcnVudGltZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHVkaWQs
IGF2YWlsYWJsZSwgcnVudGltZSwgaG9zdD1Ob25lKToKICAgICAgICAgIiIiCiAgICAgICAgIDpw
YXJhbSBuYW1lOiBUaGUgZGV2aWNlIG5hbWUKICAgICAgICAgOnR5cGUgbmFtZTogc3RyCkBAIC0x
NzgsNiArMTc4LDcgQEAgY2xhc3MgRGV2aWNlKG9iamVjdCk6CiAgICAgICAgIDpwYXJhbSBydW50
aW1lOiBUaGUgaU9TIFNpbXVsYXRvciBydW50aW1lIHRoYXQgaG9zdHMgdGhpcyBkZXZpY2UKICAg
ICAgICAgOnR5cGUgcnVudGltZTogUnVudGltZQogICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5f
aG9zdCA9IGhvc3Qgb3IgSG9zdCgpCiAgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKICAgICAgICAg
c2VsZi51ZGlkID0gdWRpZAogICAgICAgICBzZWxmLmF2YWlsYWJsZSA9IGF2YWlsYWJsZQpAQCAt
MjYwLDYgKzI2MSwzNSBAQCBjbGFzcyBEZXZpY2Uob2JqZWN0KToKICAgICAgICAgZXhjZXB0IHN1
YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVy
cm9yKCcieGNydW4gc2ltY3RsIGVyYXNlIiBmYWlsZWQ6IGRldmljZSBzdGF0ZSBpcyB7fScuZm9y
bWF0KFNpbXVsYXRvci5kZXZpY2Vfc3RhdGUodWRpZCkpKQogCisgICAgZGVmIGluc3RhbGxfYXBw
KHNlbGYsIGFwcF9wYXRoKToKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9ob3N0LmV4ZWN1dGl2
ZS5ydW5fY29tbWFuZChbJ3hjcnVuJywgJ3NpbWN0bCcsICdpbnN0YWxsJywgc2VsZi51ZGlkLCBh
cHBfcGF0aF0sIHJldHVybl9leGl0X2NvZGU9VHJ1ZSkKKworICAgIGRlZiBsYXVuY2hfYXBwKHNl
bGYsIGJ1bmRsZV9pZGVudGlmaWVyLCBhcmdzLCBlbnY9Tm9uZSk6CisgICAgICAgIGVudmlyb25t
ZW50X3RvX3VzZSA9IHt9CisgICAgICAgIGZvciB2YWx1ZSBpbiAoZW52IG9yIHt9KToKKyAgICAg
ICAgICAgIGlmIG5vdCB2YWx1ZS5zdGFydHN3aXRoKCJTSU1DVExfQ0hJTERfIik6CisgICAgICAg
ICAgICAgICAgZW52aXJvbm1lbnRfdG9fdXNlWydTSU1DVExfQ0hJTERfJyArIHZhbHVlXSA9IGVu
dlt2YWx1ZV0KKyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudF90b191c2VbdmFsdWVdID0gZW52
W3ZhbHVlXQorCisgICAgICAgIGRlZiBsYXVuY2hfaGFuZGxlcihlcnIpOgorICAgICAgICAgICAg
cmFpc2UgUnVudGltZUVycm9yKCdGYWlsZWQgdG8gbGF1bmNoIGFwcCcpCisKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgb3V0cHV0ID0gc2VsZi5faG9zdC5leGVjdXRpdmUucnVuX2NvbW1hbmQo
CisgICAgICAgICAgICAgICAgWyd4Y3J1bicsICdzaW1jdGwnLCAnbGF1bmNoJywgc2VsZi51ZGlk
LCBidW5kbGVfaWRlbnRpZmllcl0gKyBhcmdzLAorICAgICAgICAgICAgICAgIGVudj1lbnZpcm9u
bWVudF90b191c2UsCisgICAgICAgICAgICAgICAgZXJyb3JfaGFuZGxlcj1sYXVuY2hfaGFuZGxl
ciwKKyAgICAgICAgICAgICkKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAg
ICAgIHJldHVybiBOb25lCisKKyAgICAgICAgIyBPdXRwdXQgc2hvdWxkIGJlOiAiPGJ1bmRsZSBp
ZD46IDxwaWQ+IgorICAgICAgICBhc3NlcnQgb3V0cHV0LnN0YXJ0c3dpdGgoYnVuZGxlX2lkZW50
aWZpZXIgKyAiOiAiKQorICAgICAgICByZXR1cm4gaW50KG91dHB1dC5yc3RyaXAoJ1xuJykuc3Bs
aXQoJyAnKVsxXSkKKworICAgIGRlZiB0ZXJtaW5hdGVfYXBwKHNlbGYsIGJ1bmRsZV9pZGVudGlm
aWVyKToKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5ydW5fY29tbWFu
ZChbJ3hjcnVuJywgJ3NpbWN0bCcsICd0ZXJtaW5hdGUnLCBzZWxmLnVkaWQsIGJ1bmRsZV9pZGVu
dGlmaWVyXSwgcmV0dXJuX2V4aXRfY29kZT1UcnVlKQorCiAgICAgZGVmIF9fZXFfXyhzZWxmLCBv
dGhlcik6CiAgICAgICAgIHJldHVybiBzZWxmLnVkaWQgPT0gb3RoZXIudWRpZAogCkBAIC00Nzcs
NyArNTA3LDggQEAgY2xhc3MgU2ltdWxhdG9yKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgZGV2
aWNlID0gRGV2aWNlKG5hbWU9ZGV2aWNlX21hdGNoLmdyb3VwKCduYW1lJykucnN0cmlwKCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVkaWQ9ZGV2aWNlX21hdGNoLmdyb3VwKCd1
ZGlkJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZT1kZXZpY2Vf
bWF0Y2guZ3JvdXAoJ2F2YWlsYWJpbGl0eScpIGlzIE5vbmUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJ1bnRpbWU9Y3VycmVudF9ydW50aW1lKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBydW50aW1lPWN1cnJlbnRfcnVudGltZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaG9zdD1zZWxmLl9ob3N0KQogICAgICAgICAgICAgICAgIGN1cnJlbnRf
cnVudGltZS5kZXZpY2VzLmFwcGVuZChkZXZpY2UpCiAKICAgICBkZWYgZGV2aWNlX3R5cGUoc2Vs
ZiwgbmFtZT1Ob25lLCBpZGVudGlmaWVyPU5vbmUpOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>299554</attachid>
            <date>2017-01-23 16:28:21 -0800</date>
            <delta_ts>2017-01-24 12:54:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165927-20170123162623.patch</filename>
            <type>text/plain</type>
            <size>29332</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMDk5MykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYwIEBACisyMDE3LTAxLTIzICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBSZW1vdmluZyBMYXlvdXRUZXN0UmVsYXkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTkyNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTGF5b3V0VGVzdFJlbGF5OiBSZW1vdmVk
IExheW91dFRlc3RSZWxheS4KKyAgICAgICAgKiBNYWtlZmlsZTogUmVtb3ZlZCBMYXlvdXRUZXN0
UmVsYXkgcmVmZXJlbmNlcy4KKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLXdlYmtpdDogUmVtb3Zl
ZCBMYXlvdXRUZXN0UmVsYXkgcmVmZXJlbmNlcy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3BvcnQvYmFzZS5weToKKyAgICAgICAgKFBvcnQuX19pbml0X18pOiBBZGRlZCBfdGVzdF9ydW5u
ZXJfcHJvY2Vzc19jb25zdHJ1Y3Rvci4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQv
ZGFyd2luLnB5OgorICAgICAgICAoRGFyd2luUG9ydC5hcHBfaWRlbnRpZmllcl9mcm9tX2J1bmRs
ZSk6IEFkZGVkIGZ1bmN0aW9uIHRvIGV4dHJhY3QgYnVuZGxlIElEIGZyb20gcGxpc3QuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weToKKyAgICAgICAgKERyaXZlci5f
c3RhcnQpOiBQYXNzIHdvcmtlcl9udW1iZXIgc2VydmVyX3Byb2Nlc3MuCisgICAgICAgIChJT1NT
aW11bGF0b3JEcml2ZXIpOiBEZWxldGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9y
dC9kcml2ZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChEcml2ZXJUZXN0LnRlc3Rfc3RvcF9jbGVh
bnNfdXBfcHJvcGVybHkpOiBTZXQgX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgZm9y
IHRlc3RpbmcuCisgICAgICAgIChEcml2ZXJUZXN0LnRlc3RfdHdvX3N0YXJ0c19jbGVhbnNfdXBf
cHJvcGVybHkpOiBEaXR0by4KKyAgICAgICAgKERyaXZlclRlc3QudGVzdF9zdGFydF9hY3R1YWxs
eV9zdGFydHMpOiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5
OgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydCk6IFJlbW92ZSByZWxheV9uYW1lLgorICAgICAg
ICAoSU9TU2ltdWxhdG9yUG9ydC5fX2luaXRfXyk6IFNldCBfdGVzdF9ydW5uZXJfcHJvY2Vzc19j
b25zdHJ1Y3RvciBmb3IgSU9TU2ltdWxhdG9ycy4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQu
X2NyZWF0ZV9zaW11bGF0b3JzKTogRm9ybWF0dGluZyBjaGFuZ2UuCisgICAgICAgIChJT1NTaW11
bGF0b3JQb3J0LnJlbGF5X3BhdGgpOiBEZWxldGVkLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9y
dC5fY2hlY2tfcmVsYXkpOiBVc2UgYmFzZSBjbGFzcy4KKyAgICAgICAgKElPU1NpbXVsYXRvclBv
cnQuX2NoZWNrX3BvcnRfYnVpbGQpOiBEZWxldGVkLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9y
dC5fYnVpbGRfcmVsYXkpOiBEZWxldGVkLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fYnVp
bGRfZHJpdmVyKTogRGVsZXRlZC4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX2RyaXZlcl9j
bGFzcyk6IFVzZSBiYXNlIGNsYXNzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9p
b3NfdW5pdHRlc3QucHk6CisgICAgICAgIChpb3NUZXN0LnRlc3RfMzJiaXQpOiBVcGRhdGUgdGVz
dC4KKyAgICAgICAgKGlvc1Rlc3QudGVzdF82NGJpdCk6IFVwZGF0ZSB0ZXN0LgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weToKKyAgICAgICAgKFNlcnZl
clByb2Nlc3MuX19pbml0X18pOiBBY2NlcHQgd29ya2VyX251bWJlci4KKyAgICAgICAgKFNlcnZl
clByb2Nlc3MuX3NldF9maWxlX25vbmJsb2NraW5nKTogQWRkZWQgdG8gc2hhcmUgY29tbW9uIGNv
ZGUuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLndyaXRlKTogRmx1c2ggYWZ0ZXIgd3JpdGluZy4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3NfbW9jay5weToK
KyAgICAgICAgKE1vY2tTZXJ2ZXJQcm9jZXNzLl9faW5pdF9fKTogQWNjZXB0IHdvcmtlcl9udW1i
ZXIuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNzLnB5
OiBBZGRlZC4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MpOiAKKyAgICAgICAgKFNpbXVsYXRv
clByb2Nlc3MuU2ltdWxhdG9yUHJvY2Vzc1BvcGVuKToKKyAgICAgICAgKFNpbXVsYXRvclByb2Nl
c3MuU2ltdWxhdG9yUHJvY2Vzc1BvcGVuLl9faW5pdF9fKTogU2V0LXVwIG9wZW4gc3RydWN0dXJl
IHdpdGggZW1wdHkgYXJndW1lbnRzLgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5TaW11bGF0
b3JQcm9jZXNzUG9wZW4ucG9sbCk6IENoZWNrIGlmIHRoZSBwcm9jZXNzIGlzIHJ1bm5pbmcuCisg
ICAgICAgIChTaW11bGF0b3JQcm9jZXNzLlNpbXVsYXRvclByb2Nlc3NQb3Blbi53YWl0KTogV2Fp
dCBmb3IgdGFyZ2V0IHByb2Nlc3MgdG8gY2xvc2UuCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNz
Ll9faW5pdF9fKTogSW5zdGFsbCBhcHAgdG8gZGV2aWNlLgorICAgICAgICAoU2ltdWxhdG9yUHJv
Y2Vzcy5fX3VubGlua19jaGVja19leGlzdHMpOiBVbmxpbmsgZmlsZSwgdGhyb3cgZXJyb3IgaWYg
dGhpcyBmYWlscy4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX3Jlc2V0KTogVW5saW5rIGZp
Zm9zLgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5fc3RhcnQpOiBMYXVuY2ggYXBwIG9uIHNp
bXVsYXRvciwgbGluayBmaWZvcy4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX2tpbGwpOiBT
aHV0ZG93biBhcHAgb24gc2ltdWxhdG9yCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS94Y29k
ZS9zaW11bGF0b3IucHk6CisgICAgICAgIChEZXZpY2UuX19pbml0X18pOiBBY2NlcHQgaG9zdCB0
byBydW4gaW5zdGFsbC9sYXVuY2gvdGVybWluYXRlLgorICAgICAgICAoRGV2aWNlLmluc3RhbGxf
YXBwKTogSW5zdGFsbCBhcHAgdG8gdGFyZ2V0IGRldmljZS4KKyAgICAgICAgKERldmljZS5sYXVu
Y2hfYXBwKTogTGF1bmNoIGFwcCBvbiB0YXJnZXQgZGV2aWNlLgorICAgICAgICAoRGV2aWNlLnRl
cm1pbmF0ZV9hcHApOiBTaHV0ZG93biBhcHAgb24gdGFyZ2V0IGRldmljZS4KKwogMjAxNy0wMS0y
MCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAg
IEJ1aWxkIEZpeCBmb3IgV2luZG93cyBEdW1wUmVuZGVyVHJlZSBhZnRlciByMjEwOTc2CkluZGV4
OiBUb29scy9NYWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9NYWtlZmlsZQkocmV2aXNpb24g
MjEwOTMwKQorKysgVG9vbHMvTWFrZWZpbGUJKHdvcmtpbmcgY29weSkKQEAgLTcsOSArNyw2IEBA
IGlmbmVxICgsJChTREtST09UKSkKIAlpZm5lcSAoLCQoZmluZHN0cmluZyBpcGhvbmUsJChTREtS
T09UKSkpCiAJCU1PRFVMRVMgKz0gTW9iaWxlTWluaUJyb3dzZXIKIAllbmRpZgotCWlmZXEgKCwk
KERPX05PVF9CVUlMRF9MQVlPVVRfVEVTVF9SRUxBWSkpCi0JCU1PRFVMRVMgKz0gTGF5b3V0VGVz
dFJlbGF5Ci0JZW5kaWYKIGVuZGlmCiAKIGFsbDoKSW5kZXg6IFRvb2xzL1NjcmlwdHMvYnVpbGQt
d2Via2l0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CShyZXZpc2lv
biAyMTA5MzApCisrKyBUb29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAkod29ya2luZyBjb3B5KQpA
QCAtMjAwLDEwICsyMDAsNiBAQCBpZiAoaXNBcHBsZU1hY1dlYktpdCgpKSB7CiAgICAgICAgIHB1
c2ggQGNvcHlMaWJyYXJpZXNBcmdzLCBwcm9kdWN0RGlyKCk7CiAgICAgICAgIHByaW50KGpvaW4o
IiAiLCBAY29weUxpYnJhcmllc0FyZ3MpIC4gIlxuIik7CiAgICAgICAgIChzeXN0ZW0oQGNvcHlM
aWJyYXJpZXNBcmdzKSA9PSAwKSBvciBkaWU7Ci0KLSAgICAgICAgaWYgKHdpbGxVc2VJT1NTaW11
bGF0b3JTREsoKSkgewotICAgICAgICAgICAgKHN5c3RlbSgicGVybCIsICJUb29scy9TY3JpcHRz
L2J1aWxkLWxheW91dHRlc3RyZWxheSIsIGFyZ3VtZW50c0ZvckNvbmZpZ3VyYXRpb24oKSkgPT0g
MCkgb3IgZGllOwotICAgICAgICB9CiAgICAgfQogCiAgICAgIyBCdWlsZCBUb29scyBuZWVkZWQg
Zm9yIEFwcGxlIHBvcnRzCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQkocmV2
aXNpb24gMjEwOTMwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkJKHdv
cmtpbmcgY29weSkKQEAgLTEzMSw2ICsxMzEsNyBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAg
ICAgIHNlbGYuX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9IE5vbmUKICAgICAgICAgc2VsZi5f
aW1hZ2VfZGlmZmVyID0gTm9uZQogICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1
Y3RvciA9IHNlcnZlcl9wcm9jZXNzLlNlcnZlclByb2Nlc3MgICMgb3ZlcnJpZGFibGUgZm9yIHRl
c3RpbmcKKyAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IHNl
cnZlcl9wcm9jZXNzLlNlcnZlclByb2Nlc3MKIAogICAgICAgICBpZiBub3QgaGFzYXR0cihvcHRp
b25zLCAnY29uZmlndXJhdGlvbicpIG9yIG5vdCBvcHRpb25zLmNvbmZpZ3VyYXRpb246CiAgICAg
ICAgICAgICBzZWxmLnNldF9vcHRpb25fZGVmYXVsdCgnY29uZmlndXJhdGlvbicsIHNlbGYuZGVm
YXVsdF9jb25maWd1cmF0aW9uKCkpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
ZGFyd2luLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3
aW4ucHkJKHJldmlzaW9uIDIxMDkzMCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9k
YXJ3aW4ucHkJKHdvcmtpbmcgY29weSkKQEAgLTE3NCwzICsxNzQsMTEgQEAgY2xhc3MgRGFyd2lu
UG9ydChBcHBsZVBvcnQpOgogICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3I6CiAgICAgICAgICAg
ICBfbG9nLndhcm4oInhjcnVuIGZhaWxlZDsgZmFsbGluZyBiYWNrIHRvICclcycuIiAlIGZhbGxi
YWNrKQogICAgICAgICAgICAgcmV0dXJuIGZhbGxiYWNrCisKKyAgICBkZWYgYXBwX2lkZW50aWZp
ZXJfZnJvbV9idW5kbGUoc2VsZiwgYXBwX2J1bmRsZSk6CisgICAgICAgIHBsaXN0X3BhdGggPSBz
ZWxmLl9maWxlc3lzdGVtLmpvaW4oYXBwX2J1bmRsZSwgJ0luZm8ucGxpc3QnKQorICAgICAgICBp
ZiBub3Qgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMocGxpc3RfcGF0aCk6CisgICAgICAgICAgICBw
bGlzdF9wYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKGFwcF9idW5kbGUsICdDb250ZW50cy9J
bmZvLnBsaXN0JykKKyAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHBsaXN0
X3BhdGgpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4
ZWN1dGl2ZS5ydW5fY29tbWFuZChbJy91c3IvbGliZXhlYy9QbGlzdEJ1ZGR5JywgJy1jJywgJ1By
aW50IENGQnVuZGxlSWRlbnRpZmllcicsIHBsaXN0X3BhdGhdKS5yc3RyaXAoKQpJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5CShyZXZpc2lvbiAyMTA5MzApCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMzgs
NyArMTM4LDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2RyaXZlcl91
c2VyX2RpcmVjdG9yeV9zdWZmaXggPSBOb25lCiAgICAgICAgIHNlbGYuX2RyaXZlcl91c2VyX2Nh
Y2hlX2RpcmVjdG9yeSA9IE5vbmUKIAotICAgICAgICAjIFdlYktpdFRlc3RSdW5uZXIvTGF5b3V0
VGVzdFJlbGF5IGNhbiByZXBvcnQgYmFjayBzdWJwcm9jZXNzIGNyYXNoZXMgYnkgcHJpbnRpbmcK
KyAgICAgICAgIyBXZWJLaXRUZXN0UnVubmVyIGNhbiByZXBvcnQgYmFjayBzdWJwcm9jZXNzIGNy
YXNoZXMgYnkgcHJpbnRpbmcKICAgICAgICAgIyAiI0NSQVNIRUQgLSBQUk9DRVNTTkFNRSIuICBT
aW5jZSB0aG9zZSBjYW4gaGFwcGVuIGF0IGFueSB0aW1lIGFuZCBTZXJ2ZXJQcm9jZXNzCiAgICAg
ICAgICMgd29uJ3QgYmUgYXdhcmUgb2YgdGhlbSAoc2luY2UgdGhlIGFjdHVhbCB0b29sIGRpZG4n
dCBjcmFzaCwganVzdCBhIHN1YnByb2Nlc3MpCiAgICAgICAgICMgd2UgcmVjb3JkIHRoZSBjcmFz
aGVkIHN1YnByb2Nlc3MgbmFtZSBoZXJlLgpAQCAtMzI3LDcgKzMyNyw2IEBAIGNsYXNzIERyaXZl
cihvYmplY3QpOgogCiAgICAgZGVmIF9zZXR1cF9lbnZpcm9uX2Zvcl9kcml2ZXIoc2VsZiwgZW52
aXJvbm1lbnQpOgogICAgICAgICBidWlsZF9yb290X3BhdGggPSBzdHIoc2VsZi5fcG9ydC5fYnVp
bGRfcGF0aCgpKQotICAgICAgICAjIEZJWE1FOiBEWUxEXyogdmFyaWFibGVzIHNob3VsZCBiZSBN
YWMtb25seS4gRXZlbiBpT1MgU2ltdWxhdG9yIGRvZXNuJ3QgbmVlZCB0aGVtLCBhcyBMYXlvdXRU
ZXN0UmVsYXkgaXMgYSBob3N0IGJpbmFyeS4KICAgICAgICAgc2VsZi5fYXBwZW5kX2Vudmlyb25t
ZW50X3ZhcmlhYmxlX3BhdGgoZW52aXJvbm1lbnQsICdEWUxEX0xJQlJBUllfUEFUSCcsIGJ1aWxk
X3Jvb3RfcGF0aCkKICAgICAgICAgc2VsZi5fYXBwZW5kX2Vudmlyb25tZW50X3ZhcmlhYmxlX3Bh
dGgoZW52aXJvbm1lbnQsICdfX1hQQ19EWUxEX0xJQlJBUllfUEFUSCcsIGJ1aWxkX3Jvb3RfcGF0
aCkKICAgICAgICAgc2VsZi5fYXBwZW5kX2Vudmlyb25tZW50X3ZhcmlhYmxlX3BhdGgoZW52aXJv
bm1lbnQsICdEWUxEX0ZSQU1FV09SS19QQVRIJywgYnVpbGRfcm9vdF9wYXRoKQpAQCAtMzY5LDcg
KzM2OCw3IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogICAgICAgICBlbnZpcm9ubWVudCA9IHNl
bGYuX3NldHVwX2Vudmlyb25fZm9yX3Rlc3QoKQogICAgICAgICBzZWxmLl9jcmFzaGVkX3Byb2Nl
c3NfbmFtZSA9IE5vbmUKICAgICAgICAgc2VsZi5fY3Jhc2hlZF9waWQgPSBOb25lCi0gICAgICAg
IHNlbGYuX3NlcnZlcl9wcm9jZXNzID0gc2VsZi5fcG9ydC5fc2VydmVyX3Byb2Nlc3NfY29uc3Ry
dWN0b3Ioc2VsZi5fcG9ydCwgc2VsZi5fc2VydmVyX25hbWUsIHNlbGYuY21kX2xpbmUocGl4ZWxf
dGVzdHMsIHBlcl90ZXN0X2FyZ3MpLCBlbnZpcm9ubWVudCkKKyAgICAgICAgc2VsZi5fc2VydmVy
X3Byb2Nlc3MgPSBzZWxmLl9wb3J0Ll90ZXN0X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yKHNl
bGYuX3BvcnQsIHNlbGYuX3NlcnZlcl9uYW1lLCBzZWxmLmNtZF9saW5lKHBpeGVsX3Rlc3RzLCBw
ZXJfdGVzdF9hcmdzKSwgZW52aXJvbm1lbnQsIHdvcmtlcl9udW1iZXI9c2VsZi5fd29ya2VyX251
bWJlcikKICAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3Muc3RhcnQoKQogCiAgICAgZGVmIF9y
dW5fcG9zdF9zdGFydF90YXNrcyhzZWxmKToKQEAgLTYxMSwyNyArNjEwLDYgQEAgY2xhc3MgRHJp
dmVyKG9iamVjdCk6CiAgICAgICAgIHJldHVybiBUcnVlCiAKIAotIyBGSVhNRTogdGhpcyBzaG91
bGQgYmUgYWJzdHJhY3RlZCBvdXQgdmlhIHRoZSBQb3J0IHN1YmNsYXNzIHNvbWVob3cuCi1jbGFz
cyBJT1NTaW11bGF0b3JEcml2ZXIoRHJpdmVyKToKLSAgICBkZWYgY21kX2xpbmUoc2VsZiwgcGl4
ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgotICAgICAgICBjbWQgPSBzdXBlcihJT1NTaW11bGF0
b3JEcml2ZXIsIHNlbGYpLmNtZF9saW5lKHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKQotICAg
ICAgICByZWxheV90b29sID0gc2VsZi5fcG9ydC5yZWxheV9wYXRoCi0gICAgICAgIGR1bXBfdG9v
bCA9IGNtZFswXQotICAgICAgICBkdW1wX3Rvb2xfYXJncyA9IGNtZFsxOl0KLSAgICAgICAgcHJv
ZHVjdF9kaXIgPSBzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCkKLSAgICAgICAgcmVsYXlfYXJncyA9
IFsKLSAgICAgICAgICAgICctZGV2ZWxvcGVyRGlyJywgc2VsZi5fcG9ydC5kZXZlbG9wZXJfZGly
LAotICAgICAgICAgICAgJy11ZGlkJywgc2VsZi5fcG9ydC5kZXZpY2VfaWRfZm9yX3dvcmtlcl9u
dW1iZXIoc2VsZi5fd29ya2VyX251bWJlciksCi0gICAgICAgICAgICAnLXByb2R1Y3REaXInLCBw
cm9kdWN0X2RpciwKLSAgICAgICAgICAgICctYXBwJywgZHVtcF90b29sLAotICAgICAgICBdCi0g
ICAgICAgIHJldHVybiBbcmVsYXlfdG9vbF0gKyByZWxheV9hcmdzICsgWyctLSddICsgZHVtcF90
b29sX2FyZ3MKLQotICAgIGRlZiBfc2V0dXBfZW52aXJvbl9mb3JfZHJpdmVyKHNlbGYsIGVudmly
b25tZW50KToKLSAgICAgICAgZW52aXJvbm1lbnRbJ0RFVkVMT1BFUl9ESVInXSA9IHNlbGYuX3Bv
cnQuZGV2ZWxvcGVyX2RpcgotICAgICAgICByZXR1cm4gc3VwZXIoSU9TU2ltdWxhdG9yRHJpdmVy
LCBzZWxmKS5fc2V0dXBfZW52aXJvbl9mb3JfZHJpdmVyKGVudmlyb25tZW50KQotCi0KIGNsYXNz
IENvbnRlbnRCbG9jayhvYmplY3QpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAg
c2VsZi5jb250ZW50X3R5cGUgPSBOb25lCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvZHJpdmVyX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIxMDkzMCkKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAg
LTI2NCw3ICsyNjQsNyBAQCBjbGFzcyBEcml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAog
ICAgIGRlZiB0ZXN0X3N0b3BfY2xlYW5zX3VwX3Byb3Blcmx5KHNlbGYpOgogICAgICAgICBwb3J0
ID0gVGVzdFdlYktpdFBvcnQoKQotICAgICAgICBwb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1
Y3RvciA9IE1vY2tTZXJ2ZXJQcm9jZXNzCisgICAgICAgIHBvcnQuX3Rlc3RfcnVubmVyX3Byb2Nl
c3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJvY2VzcwogICAgICAgICBkcml2ZXIgPSBEcml2
ZXIocG9ydCwgMCwgcGl4ZWxfdGVzdHM9VHJ1ZSkKICAgICAgICAgZHJpdmVyLnN0YXJ0KFRydWUs
IFtdKQogICAgICAgICBsYXN0X3RtcGRpciA9IHBvcnQuX2ZpbGVzeXN0ZW0ubGFzdF90bXBkaXIK
QEAgLTI3NCw3ICsyNzQsNyBAQCBjbGFzcyBEcml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
IAogICAgIGRlZiB0ZXN0X3R3b19zdGFydHNfY2xlYW5zX3VwX3Byb3Blcmx5KHNlbGYpOgogICAg
ICAgICBwb3J0ID0gVGVzdFdlYktpdFBvcnQoKQotICAgICAgICBwb3J0Ll9zZXJ2ZXJfcHJvY2Vz
c19jb25zdHJ1Y3RvciA9IE1vY2tTZXJ2ZXJQcm9jZXNzCisgICAgICAgIHBvcnQuX3Rlc3RfcnVu
bmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJvY2VzcwogICAgICAgICBkcml2
ZXIgPSBEcml2ZXIocG9ydCwgMCwgcGl4ZWxfdGVzdHM9VHJ1ZSkKICAgICAgICAgZHJpdmVyLnN0
YXJ0KFRydWUsIFtdKQogICAgICAgICBsYXN0X3RtcGRpciA9IHBvcnQuX2ZpbGVzeXN0ZW0ubGFz
dF90bXBkaXIKQEAgLTI4Myw3ICsyODMsNyBAQCBjbGFzcyBEcml2ZXJUZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3N0YXJ0X2FjdHVhbGx5X3N0YXJ0cyhzZWxmKToKICAg
ICAgICAgcG9ydCA9IFRlc3RXZWJLaXRQb3J0KCkKLSAgICAgICAgcG9ydC5fc2VydmVyX3Byb2Nl
c3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJvY2VzcworICAgICAgICBwb3J0Ll90ZXN0X3J1
bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gTW9ja1NlcnZlclByb2Nlc3MKICAgICAgICAgZHJp
dmVyID0gRHJpdmVyKHBvcnQsIDAsIHBpeGVsX3Rlc3RzPVRydWUpCiAgICAgICAgIGRyaXZlci5z
dGFydChUcnVlLCBbXSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRyaXZlci5fc2VydmVyX3By
b2Nlc3Muc3RhcnRlZCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQkocmV2aXNp
b24gMjEwOTMwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2Rl
bHMudGVzdF9jCiBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGNvbmZpZyBhcyBwb3J0X2NvbmZp
ZwogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBkcml2ZXIsIGltYWdlX2RpZmYKIGZyb20gd2Vi
a2l0cHkucG9ydC5kYXJ3aW4gaW1wb3J0IERhcndpblBvcnQKK2Zyb20gd2Via2l0cHkucG9ydC5z
aW11bGF0b3JfcHJvY2VzcyBpbXBvcnQgU2ltdWxhdG9yUHJvY2VzcwogZnJvbSB3ZWJraXRweS54
Y29kZS5zaW11bGF0b3IgaW1wb3J0IFNpbXVsYXRvciwgUnVudGltZSwgRGV2aWNlVHlwZQogZnJv
bSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCiAKQEAg
LTc4LDcgKzc5LDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICBT
REsgPSAnaXBob25lc2ltdWxhdG9yJwogCiAgICAgU0lNVUxBVE9SX0JVTkRMRV9JRCA9ICdjb20u
YXBwbGUuaXBob25lc2ltdWxhdG9yJwotICAgIHJlbGF5X25hbWUgPSAnTGF5b3V0VGVzdFJlbGF5
JwogICAgIFNJTVVMQVRPUl9ESVJFQ1RPUlkgPSAiL3RtcC9XZWJLaXRUZXN0aW5nU2ltdWxhdG9y
cy8iCiAgICAgTFNSRUdJU1RFUl9QQVRIID0gIi9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0Nv
cmVTZXJ2aWNlcy5mcmFtZXdvcmsvRnJhbWV3b3Jrcy9MYXVuY2hTZXJ2aWNlcy5mcmFtZXdvcmsv
VmVyc2lvbnMvQ3VycmVudC9TdXBwb3J0L2xzcmVnaXN0ZXIiCiAgICAgUFJPQ0VTU19DT1VOVF9F
U1RJTUFURV9QRVJfU0lNVUxBVE9SX0lOU1RBTkNFID0gMTAwCkBAIC05Nyw2ICs5Nyw3IEBAIGNs
YXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAKICAgICBkZWYgX19pbml0X18oc2Vs
ZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncyk6CiAgICAgICAgIERhcndpblBvcnQuX19pbml0
X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5fdGVzdF9y
dW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IFNpbXVsYXRvclByb2Nlc3MKIAogICAgICAgICBv
cHRpb25hbF9kZXZpY2VfY2xhc3MgPSBzZWxmLmdldF9vcHRpb24oJ2RldmljZV9jbGFzcycpCiAg
ICAgICAgIHNlbGYuX3ByaW50aW5nX2NtZF9saW5lID0gRmFsc2UKQEAgLTE0OCwxNiArMTQ5LDYg
QEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgICAgIGRldmlj
ZV90eXBlID0gRGV2aWNlVHlwZS5mcm9tX25hbWUoZGV2aWNlX25hbWUpCiAgICAgICAgIHJldHVy
biBkZXZpY2VfdHlwZQogCi0gICAgQHByb3BlcnR5Ci0gICAgQG1lbW9pemVkCi0gICAgZGVmIHJl
bGF5X3BhdGgoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX3Jvb3Rfd2FzX3NldDoKLSAgICAgICAg
ICAgIHBhdGggPSBzZWxmLl9maWxlc3lzdGVtLmFic3BhdGgoc2VsZi5nZXRfb3B0aW9uKCdyb290
JykpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtYWNfY29uZmlnID0gcG9ydF9jb25maWcu
Q29uZmlnKHNlbGYuX2V4ZWN1dGl2ZSwgc2VsZi5fZmlsZXN5c3RlbSwgJ21hYycpCi0gICAgICAg
ICAgICBwYXRoID0gbWFjX2NvbmZpZy5idWlsZF9kaXJlY3Rvcnkoc2VsZi5nZXRfb3B0aW9uKCdj
b25maWd1cmF0aW9uJykpCi0gICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLmpvaW4ocGF0
aCwgc2VsZi5yZWxheV9uYW1lKQotCiAgICAgQG1lbW9pemVkCiAgICAgZGVmIGNoaWxkX3Byb2Nl
c3NlcyhzZWxmKToKICAgICAgICAgcmV0dXJuIGludChzZWxmLmdldF9vcHRpb24oJ2NoaWxkX3By
b2Nlc3NlcycpKQpAQCAtMTgyLDE5ICsxNzMsNiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERh
cndpblBvcnQpOgogCiAgICAgICAgIHJldHVybiBtaW4obWF4aW11bV9zaW11bGF0b3JfY291bnRf
b25fdGhpc19zeXN0ZW0sIGJlc3RfY2hpbGRfcHJvY2Vzc19jb3VudF9mb3JfY3B1KQogCi0gICAg
ZGVmIF9jaGVja19yZWxheShzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0ZW0u
ZXhpc3RzKHNlbGYucmVsYXlfcGF0aCk6Ci0gICAgICAgICAgICBfbG9nLmVycm9yKCIlcyB3YXMg
bm90IGZvdW5kIGF0ICVzIiAlIChzZWxmLnJlbGF5X25hbWUsIHNlbGYucmVsYXlfcGF0aCkpCi0g
ICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBf
Y2hlY2tfcG9ydF9idWlsZChzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuX3Jvb3Rfd2FzX3Nl
dCBhbmQgc2VsZi5nZXRfb3B0aW9uKCdidWlsZCcpIGFuZCBub3Qgc2VsZi5fYnVpbGRfcmVsYXko
KToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBpZiBub3Qgc2VsZi5fY2hlY2tf
cmVsYXkoKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1ZQot
CiAgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIs
IG5ld2VyX3RoYW4sIHRpbWVfZm49dGltZS50aW1lLCBzbGVlcF9mbj10aW1lLnNsZWVwLCB3YWl0
X2Zvcl9sb2c9VHJ1ZSk6CiAgICAgICAgIHRpbWVfZm4gPSB0aW1lX2ZuIG9yIHRpbWUudGltZQog
ICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9yIHRpbWUuc2xlZXAKQEAgLTIxNSw3ICsxOTMs
NyBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgICAgICAgICAgcmV0
dXJuIHNlbGYuX2dldF9jcmFzaF9sb2coY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZFsw
XSwgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZFsxXSwgc3Rkb3V0LAogICAgICAgICAg
ICAgICAgICdcbicuam9pbihzdGRlcnJfbGluZXMpLCBuZXdlcl90aGFuLCB0aW1lX2ZuLCBzbGVl
cF9mbiwgd2FpdF9mb3JfbG9nKQogCi0gICAgICAgICMgTGF5b3V0VGVzdFJlbGF5IGNyYXNoZWQK
KyAgICAgICAgIyBBcHAgY3Jhc2hlZAogICAgICAgICBfbG9nLmRlYnVnKCdsb29raW5nIGZvciBj
cmFzaCBsb2cgZm9yICVzOiVzJyAlIChuYW1lLCBzdHIocGlkKSkpCiAgICAgICAgIGNyYXNoX2xv
ZyA9ICcnCiAgICAgICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3Moc2VsZi5ob3N0KQpAQCAtMjMz
LDI1ICsyMTEsNiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgICAg
ICAgICAgcmV0dXJuIHN0ZGVyciwgTm9uZQogICAgICAgICByZXR1cm4gc3RkZXJyLCBjcmFzaF9s
b2cKIAotICAgIGRlZiBfYnVpbGRfcmVsYXkoc2VsZik6Ci0gICAgICAgIGVudmlyb25tZW50ID0g
c2VsZi5ob3N0LmNvcHlfY3VycmVudF9lbnZpcm9ubWVudCgpCi0gICAgICAgIGVudmlyb25tZW50
LmRpc2FibGVfZ2NjX3NtYXJ0cXVvdGVzKCkKLSAgICAgICAgZW52ID0gZW52aXJvbm1lbnQudG9f
ZGljdGlvbmFyeSgpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBGSVhNRTogV2Ugc2hv
dWxkIGJlIHBhc3NpbmcgX2FyZ3VtZW50c19mb3JfY29uZmlndXJhdGlvbigpLCB3aGljaCByZXNw
ZWN0cyBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBwb3J0LAotICAgICAgICAgICAgIyBpbnN0ZWFk
IG9mIGhhcmRjb2RpbmcgLS1pb3Mtc2ltdWxhdG9yLgotICAgICAgICAgICAgc2VsZi5fcnVuX3Nj
cmlwdCgiYnVpbGQtbGF5b3V0dGVzdHJlbGF5IiwgYXJncz1bIi0taW9zLXNpbXVsYXRvciJdLCBl
bnY9ZW52KQotICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3IsIGU6Ci0gICAgICAgICAgICBfbG9n
LmVycm9yKGUubWVzc2FnZV93aXRoX291dHB1dChvdXRwdXRfbGltaXQ9Tm9uZSkpCi0gICAgICAg
ICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBfYnVpbGRf
ZHJpdmVyKHNlbGYpOgotICAgICAgICBidWlsdF90b29sID0gc3VwZXIoSU9TU2ltdWxhdG9yUG9y
dCwgc2VsZikuX2J1aWxkX2RyaXZlcigpCi0gICAgICAgIGJ1aWx0X3JlbGF5ID0gc2VsZi5fYnVp
bGRfcmVsYXkoKQotICAgICAgICByZXR1cm4gYnVpbHRfdG9vbCBhbmQgYnVpbHRfcmVsYXkKLQog
ICAgIGRlZiBfYnVpbGRfZHJpdmVyX2ZsYWdzKHNlbGYpOgogICAgICAgICBhcmNocyA9IFsnQVJD
SFM9aTM4NiddIGlmIHNlbGYuYXJjaGl0ZWN0dXJlKCkgPT0gJ3g4NicgZWxzZSBbXQogICAgICAg
ICBzZGsgPSBbJy0tc2RrJywgJ2lwaG9uZXNpbXVsYXRvciddCkBAIC0yNjQsOSArMjIzLDYgQEAg
Y2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgICAgICAgICBjb25m
aWd1cmF0aW9ucy5hcHBlbmQoVGVzdENvbmZpZ3VyYXRpb24odmVyc2lvbj1zZWxmLl92ZXJzaW9u
LCBhcmNoaXRlY3R1cmU9YXJjaGl0ZWN0dXJlLCBidWlsZF90eXBlPWJ1aWxkX3R5cGUpKQogICAg
ICAgICByZXR1cm4gY29uZmlndXJhdGlvbnMKIAotICAgIGRlZiBfZHJpdmVyX2NsYXNzKHNlbGYp
OgotICAgICAgICByZXR1cm4gZHJpdmVyLklPU1NpbXVsYXRvckRyaXZlcgotCiAgICAgZGVmIGRl
ZmF1bHRfYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuZ2V0X29w
dGlvbignd2Via2l0X3Rlc3RfcnVubmVyJyk6CiAgICAgICAgICAgICBmYWxsYmFja19uYW1lcyA9
IFtzZWxmLl93azJfcG9ydF9uYW1lKCldICsgW3NlbGYucG9ydF9uYW1lXSArIFsnd2syJ10KQEAg
LTI4MCw5ICsyMzYsOSBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogCiAg
ICAgZGVmIF9jcmVhdGVfc2ltdWxhdG9ycyhzZWxmKToKICAgICAgICAgaWYgKHNlbGYuZGVmYXVs
dF9jaGlsZF9wcm9jZXNzZXMoKSA8IHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpOgotICAgICAgICAg
ICAgICAgIF9sb2cud2FybigiWW91IGhhdmUgc3BlY2lmaWVkIHZlcnkgaGlnaCB2YWx1ZSh7MH0p
IGZvciAtLWNoaWxkLXByb2Nlc3NlcyIuZm9ybWF0KHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpKQot
ICAgICAgICAgICAgICAgIF9sb2cud2FybigibWF4aW11bSBjaGlsZC1wcm9jZXNzZXMgd2hpY2gg
Y2FuIGJlIHN1cHBvcnRlZCBvbiB0aGlzIHN5c3RlbSBhcmU6IHswfSIuZm9ybWF0KHNlbGYuZGVm
YXVsdF9jaGlsZF9wcm9jZXNzZXMoKSkpCi0gICAgICAgICAgICAgICAgX2xvZy53YXJuKCJUaGlz
IGlzIHZlcnkgbGlrZWx5IHRvIGZhaWwuIikKKyAgICAgICAgICAgIF9sb2cud2FybigiWW91IGhh
dmUgc3BlY2lmaWVkIHZlcnkgaGlnaCB2YWx1ZSh7MH0pIGZvciAtLWNoaWxkLXByb2Nlc3NlcyIu
Zm9ybWF0KHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpKQorICAgICAgICAgICAgX2xvZy53YXJuKCJt
YXhpbXVtIGNoaWxkLXByb2Nlc3NlcyB3aGljaCBjYW4gYmUgc3VwcG9ydGVkIG9uIHRoaXMgc3lz
dGVtIGFyZTogezB9Ii5mb3JtYXQoc2VsZi5kZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcygpKSkKKyAg
ICAgICAgICAgIF9sb2cud2FybigiVGhpcyBpcyB2ZXJ5IGxpa2VseSB0byBmYWlsLiIpCiAKICAg
ICAgICAgaWYgc2VsZi5fdXNpbmdfZGVkaWNhdGVkX3NpbXVsYXRvcnMoKToKICAgICAgICAgICAg
IHNlbGYuX2NyZWF0ZVNpbXVsYXRvckFwcHMoKQpAQCAtNDEzLDcgKzM2OSw2IEBAIGNsYXNzIElP
U1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAgICAgZGVmIF90ZXN0aW5nX2RldmljZShzZWxm
LCBudW1iZXIpOgogICAgICAgICByZXR1cm4gU2ltdWxhdG9yLmRldmljZV9udW1iZXIobnVtYmVy
KQogCi0gICAgIyBUaGlzIGlzIG9ubHkgZXhwb3NlZCBzbyB0aGF0IElPU1NpbXVsYXRvckRyaXZl
ciBjYW4gdXNlIGl0LgogICAgIGRlZiBkZXZpY2VfaWRfZm9yX3dvcmtlcl9udW1iZXIoc2VsZiwg
bnVtYmVyKToKICAgICAgICAgaWYgc2VsZi5fcHJpbnRpbmdfY21kX2xpbmU6CiAgICAgICAgICAg
ICByZXR1cm4gJzxkdW1teSBpZD4nCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
aW9zX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9pb3NfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIxMDkzMCkKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9pb3NfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcg
QEAgY2xhc3MgaW9zVGVzdChkYXJ3aW5fdGVzdGNhc2UuRGFyd2luVGVzdAogICAgICAgICBwb3J0
Ll9ydW5fc2NyaXB0ID0gcnVuX3NjcmlwdAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQu
YXJjaGl0ZWN0dXJlKCksICd4ODYnKQogICAgICAgICBwb3J0Ll9idWlsZF9kcml2ZXIoKQotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYXJncywgWyctLWlvcy1zaW11bGF0b3InXSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFyZ3MsIFsnQVJDSFM9aTM4NicsICctLXNkaycs
ICdpcGhvbmVzaW11bGF0b3InXSkKIAogICAgIGRlZiB0ZXN0XzY0Yml0KHNlbGYpOgogICAgICAg
ICAjIEFwcGxlIE1hYyBwb3J0IGlzIDY0LWJpdCBieSBkZWZhdWx0CkBAIC04Miw3ICs4Miw3IEBA
IGNsYXNzIGlvc1Rlc3QoZGFyd2luX3Rlc3RjYXNlLkRhcndpblRlc3QKIAogICAgICAgICBwb3J0
Ll9ydW5fc2NyaXB0ID0gcnVuX3NjcmlwdAogICAgICAgICBwb3J0Ll9idWlsZF9kcml2ZXIoKQot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYXJncywgWyctLWlvcy1zaW11bGF0b3InXSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFyZ3MsIFsnLS1zZGsnLCAnaXBob25lc2lt
dWxhdG9yJ10pCiAKICAgICBkZWYgdGVzdF9zZGtfbmFtZShzZWxmKToKICAgICAgICAgcG9ydCA9
IHNlbGYubWFrZV9wb3J0KCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2
ZXJfcHJvY2Vzcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
c2VydmVyX3Byb2Nlc3MucHkJKHJldmlzaW9uIDIxMDkzMCkKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAj
CiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dApAQCAtNTksNyArNjAsNyBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVj
dCk6CiAgICAgaW5kZWZpbml0ZWx5LiBUaGUgY2xhc3MgYWxzbyBoYW5kbGVzIHRyYW5zcGFyZW50
bHkgcmVzdGFydGluZyBwcm9jZXNzZXMKICAgICBhcyBuZWNlc3NhcnkgdG8ga2VlcCBpc3N1aW5n
IGNvbW1hbmRzLiIiIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBj
bWQsIGVudj1Ob25lLCB1bml2ZXJzYWxfbmV3bGluZXM9RmFsc2UsIHRyZWF0X25vX2RhdGFfYXNf
Y3Jhc2g9RmFsc2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X29iaiwgbmFtZSwgY21k
LCBlbnY9Tm9uZSwgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNlLCB0cmVhdF9ub19kYXRhX2FzX2Ny
YXNoPUZhbHNlLCB3b3JrZXJfbnVtYmVyPU5vbmUpOgogICAgICAgICBzZWxmLl9wb3J0ID0gcG9y
dF9vYmoKICAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUgICMgU2hvdWxkIGJlIHRoZSBjb21tYW5k
IG5hbWUgKGUuZy4gRHVtcFJlbmRlclRyZWUsIEltYWdlRGlmZikKICAgICAgICAgc2VsZi5fY21k
ID0gY21kCkBAIC0xMDMsNiArMTA0LDExIEBAIGNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToK
ICAgICBkZWYgcHJvY2Vzc19uYW1lKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQog
CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfc2V0X2ZpbGVfbm9uYmxvY2tpbmcoZmlsZSk6
CisgICAgICAgIGZsYWcgPSBmY250bC5mY250bChmaWxlLmZpbGVubygpLCBmY250bC5GX0dFVEZM
KQorICAgICAgICBmY250bC5mY250bChmaWxlLmZpbGVubygpLCBmY250bC5GX1NFVEZMLCBmbGFn
IHwgb3MuT19OT05CTE9DSykKKwogICAgIGRlZiBfc3RhcnQoc2VsZik6CiAgICAgICAgIGlmIHNl
bGYuX3Byb2M6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCIlcyBhbHJlYWR5IHJ1bm5p
bmciICUgc2VsZi5fbmFtZSkKQEAgLTExNywxMyArMTIzLDkgQEAgY2xhc3MgU2VydmVyUHJvY2Vz
cyhvYmplY3QpOgogICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPXNlbGYuX3VuaXZlcnNh
bF9uZXdsaW5lcykKICAgICAgICAgc2VsZi5fcGlkID0gc2VsZi5fcHJvYy5waWQKICAgICAgICAg
c2VsZi5fcG9ydC5maW5kX3N5c3RlbV9waWQoc2VsZi5uYW1lKCksIHNlbGYuX3BpZCkKLSAgICAg
ICAgZmQgPSBzZWxmLl9wcm9jLnN0ZG91dC5maWxlbm8oKQogICAgICAgICBpZiBub3Qgc2VsZi5f
dXNlX3dpbjMyX2FwaXM6Ci0gICAgICAgICAgICBmbCA9IGZjbnRsLmZjbnRsKGZkLCBmY250bC5G
X0dFVEZMKQotICAgICAgICAgICAgZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfU0VURkwsIGZsIHwg
b3MuT19OT05CTE9DSykKLSAgICAgICAgICAgIGZkID0gc2VsZi5fcHJvYy5zdGRlcnIuZmlsZW5v
KCkKLSAgICAgICAgICAgIGZsID0gZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkwpCi0gICAg
ICAgICAgICBmY250bC5mY250bChmZCwgZmNudGwuRl9TRVRGTCwgZmwgfCBvcy5PX05PTkJMT0NL
KQorICAgICAgICAgICAgc2VsZi5fc2V0X2ZpbGVfbm9uYmxvY2tpbmcoc2VsZi5fcHJvYy5zdGRv
dXQpCisgICAgICAgICAgICBzZWxmLl9zZXRfZmlsZV9ub25ibG9ja2luZyhzZWxmLl9wcm9jLnN0
ZGVycikKIAogICAgIGRlZiBfaGFuZGxlX3Bvc3NpYmxlX2ludGVycnVwdChzZWxmKToKICAgICAg
ICAgIiIiVGhpcyByb3V0aW5lIGNoZWNrcyB0byBzZWUgaWYgdGhlIHByb2Nlc3MgY3Jhc2hlZCBv
ciBleGl0ZWQKQEAgLTE1MCw3ICsxNTIsOCBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6
CiAgICAgICAgIGlmIG5vdCBzZWxmLl9wcm9jOgogICAgICAgICAgICAgc2VsZi5fc3RhcnQoKQog
ICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl9wcm9jLnN0ZGluLndyaXRlKGJ5dGVzKQor
ICAgICAgICAgICAgaWYgc2VsZi5fcHJvYy5zdGRpbjoKKyAgICAgICAgICAgICAgICBzZWxmLl9w
cm9jLnN0ZGluLndyaXRlKGJ5dGVzKQogICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKICAgICAg
ICAgICAgIHNlbGYuc3RvcCgwLjApCiAgICAgICAgICAgICAjIHN0b3AoKSBjYWxscyBfcmVzZXQo
KSwgc28gd2UgaGF2ZSB0byBzZXQgY3Jhc2hlZCB0byBUcnVlIGFmdGVyIGNhbGxpbmcgc3RvcCgp
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3NfbW9jay5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nl
c3NfbW9jay5weQkocmV2aXNpb24gMjEwOTMwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L3NlcnZlcl9wcm9jZXNzX21vY2sucHkJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcg
QEAKIAogCiBjbGFzcyBNb2NrU2VydmVyUHJvY2VzcyhvYmplY3QpOgotICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBwb3J0X29iaj1Ob25lLCBuYW1lPU5vbmUsIGNtZD1Ob25lLCBlbnY9Tm9uZSwgdW5p
dmVyc2FsX25ld2xpbmVzPUZhbHNlLCBsaW5lcz1Ob25lLCBjcmFzaGVkPUZhbHNlKToKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmo9Tm9uZSwgbmFtZT1Ob25lLCBjbWQ9Tm9uZSwgZW52
PU5vbmUsIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgbGluZXM9Tm9uZSwgY3Jhc2hlZD1GYWxz
ZSwgd29ya2VyX251bWJlcj1Ob25lKToKICAgICAgICAgc2VsZi50aW1lZF9vdXQgPSBGYWxzZQog
ICAgICAgICBzZWxmLmxpbmVzID0gbGluZXMgb3IgW10KICAgICAgICAgc2VsZi5jcmFzaGVkID0g
Y3Jhc2hlZApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9j
ZXNzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zaW11bGF0
b3JfcHJvY2Vzcy5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvc2ltdWxhdG9yX3Byb2Nlc3MucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjggQEAK
KyMgQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwK
KyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgZXJybm8K
K2ltcG9ydCBvcworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHRpbWUKKworZnJvbSB3ZWJraXRweS5w
b3J0LnNlcnZlcl9wcm9jZXNzIGltcG9ydCBTZXJ2ZXJQcm9jZXNzCitmcm9tIHdlYmtpdHB5Lnhj
b2RlLnNpbXVsYXRvciBpbXBvcnQgU2ltdWxhdG9yCisKKworY2xhc3MgU2ltdWxhdG9yUHJvY2Vz
cyhTZXJ2ZXJQcm9jZXNzKToKKworICAgIGNsYXNzIFNpbXVsYXRvclByb2Nlc3NQb3BlbihvYmpl
Y3QpOgorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwaWQsIHN0ZGluLCBzdGRvdXQsIHN0
ZGVycik6CisgICAgICAgICAgICBzZWxmLnN0ZGluID0gc3RkaW4KKyAgICAgICAgICAgIHNlbGYu
c3Rkb3V0ID0gc3Rkb3V0CisgICAgICAgICAgICBzZWxmLnN0ZGVyciA9IHN0ZGVycgorICAgICAg
ICAgICAgc2VsZi5waWQgPSBwaWQKKyAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IE5vbmUK
KworICAgICAgICBkZWYgcG9sbChzZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYucmV0dXJuY29k
ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5yZXR1cm5jb2RlCisgICAgICAgICAgICB0
cnk6CisgICAgICAgICAgICAgICAgb3Mua2lsbChzZWxmLnBpZCwgMCkKKyAgICAgICAgICAgIGV4
Y2VwdCBPU0Vycm9yLCBlcnI6CisgICAgICAgICAgICAgICAgaWYgZXJyLmVycm5vID09IGVycm5v
LkVTUkNIOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSAxCisgICAgICAg
ICAgICAgICAgZWxpZiBlcnIuZXJybm8gIT0gZXJybm8uRVBFUk06CisgICAgICAgICAgICAgICAg
ICAgIHNlbGYucmV0dXJuY29kZSA9IC0xCisgICAgICAgICAgICByZXR1cm4gc2VsZi5yZXR1cm5j
b2RlCisKKyAgICAgICAgZGVmIHdhaXQoc2VsZik6CisgICAgICAgICAgICB3aGlsZSBub3Qgc2Vs
Zi5wb2xsKCk6CisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCguMDEpCisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5yZXR1cm5jb2RlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmos
IG5hbWUsIGNtZCwgZW52PU5vbmUsIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgdHJlYXRfbm9f
ZGF0YV9hc19jcmFzaD1GYWxzZSwgd29ya2VyX251bWJlcj1Ob25lKToKKyAgICAgICAgc2VsZi5f
c2ltdWxhdG9yX21hbmFnZXIgPSBTaW11bGF0b3IocG9ydF9vYmouaG9zdCkKKworICAgICAgICBz
ZWxmLl9idW5kbGVfaWQgPSBwb3J0X29iai5hcHBfaWRlbnRpZmllcl9mcm9tX2J1bmRsZShjbWRb
MF0pCisgICAgICAgIHNlbGYuX2RldmljZSA9IHNlbGYuX3NpbXVsYXRvcl9tYW5hZ2VyLmZpbmRf
ZGV2aWNlX2J5X3VkaWQocG9ydF9vYmouZGV2aWNlX2lkX2Zvcl93b3JrZXJfbnVtYmVyKHdvcmtl
cl9udW1iZXIpKQorICAgICAgICBhc3NlcnQgc2VsZi5fZGV2aWNlLmluc3RhbGxfYXBwKGNtZFsw
XSkKKyAgICAgICAgZW52WydJUENfSURFTlRJRklFUiddID0gc2VsZi5fYnVuZGxlX2lkICsgIi0i
ICsgc2VsZi5fZGV2aWNlLnVkaWQKKworICAgICAgICAjIFRoaXMgbG9jYXRpb24gbWF0Y2hlcyB0
aGUgbG9jYXRpb24gdXNlZCBieSBXZWJLaXRUZXN0UnVubmVyIGFuZCBEdW1wUmVuZGVyVHJlZQor
ICAgICAgICAjIGZvciB0aGUgb3RoZXIgc2lkZSBvZiB0aGVzZSBmaWZvcy4KKyAgICAgICAgZmls
ZV9sb2NhdGlvbiA9ICcvdG1wLycgKyBlbnZbJ0lQQ19JREVOVElGSUVSJ10KKyAgICAgICAgc2Vs
Zi5faW5fcGF0aCA9IGZpbGVfbG9jYXRpb24gKyAnX0lOJworICAgICAgICBzZWxmLl9vdXRfcGF0
aCA9IGZpbGVfbG9jYXRpb24gKyAnX09VVCcKKyAgICAgICAgc2VsZi5fZXJyb3JfcGF0aCA9IGZp
bGVfbG9jYXRpb24gKyAnX0VSUk9SJworCisgICAgICAgIHN1cGVyKFNpbXVsYXRvclByb2Nlc3Ms
IHNlbGYpLl9faW5pdF9fKHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVudiwgdW5pdmVyc2FsX25ld2xp
bmVzLCB0cmVhdF9ub19kYXRhX2FzX2NyYXNoKQorCisgICAgZGVmIF9yZXNldChzZWxmKToKKyAg
ICAgICAgc3VwZXIoU2ltdWxhdG9yUHJvY2Vzcywgc2VsZikuX3Jlc2V0KCkKKworICAgICAgICAj
IFVubGlua3MgYXJlIG5lZWRlZCBvbiByZXNldCBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgUHl0aG9u
IGNvZGUgdW5leHBlY3RlZGx5CisgICAgICAgICMgZmFpbHMgYmV0d2VlbiBfc3RhcnQgYW5kIGtp
bGwuICBUaGlzIGNhbiBiZSBjYXVzZWQgYnkgYSBzaWdraWxsIG9yIGEgY3Jhc2guCisgICAgICAg
ICMgVGhpcyBlbnN1cmVzIHRoYXQgb3MubWtmaWZvIHdpbGwgbm90IGJlIG9ic3RydWN0ZWQgYnkg
cHJldmlvdXMgZmlmb3MuCisgICAgICAgICMgT3RoZXIgZmlsZXMgd2lsbCBzdGlsbCBjYXVzZSBv
cy5ta2ZpZm8gdG8gZmFpbC4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MudW5saW5rKHNl
bGYuX2luX3BhdGgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAg
dHJ5OgorICAgICAgICAgICAgb3MudW5saW5rKHNlbGYuX291dF9wYXRoKQorICAgICAgICBleGNl
cHQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnVubGlu
ayhzZWxmLl9lcnJvcl9wYXRoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisK
KyAgICBkZWYgX3N0YXJ0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9wcm9jOgorICAgICAgICAg
ICAgcmFpc2UgVmFsdWVFcnJvcigiJXMgYWxyZWFkeSBydW5uaW5nIiAlIHNlbGYuX25hbWUpCisg
ICAgICAgIHNlbGYuX3Jlc2V0KCkKKyAgICAgICAgb3MubWtmaWZvKHNlbGYuX2luX3BhdGgsIDA2
MDApCisgICAgICAgIG9zLm1rZmlmbyhzZWxmLl9vdXRfcGF0aCwgMDYwMCkKKyAgICAgICAgb3Mu
bWtmaWZvKHNlbGYuX2Vycm9yX3BhdGgsIDA2MDApCisKKyAgICAgICAgc3Rkb3V0ID0gb3MuZmRv
cGVuKG9zLm9wZW4oc2VsZi5fb3V0X3BhdGgsIG9zLk9fUkRPTkxZIHwgb3MuT19OT05CTE9DSyks
ICJyYiIpCisgICAgICAgIHN0ZGVyciA9IG9zLmZkb3Blbihvcy5vcGVuKHNlbGYuX2Vycm9yX3Bh
dGgsIG9zLk9fUkRPTkxZIHwgb3MuT19OT05CTE9DSyksICJyYiIpCisKKyAgICAgICAgc2VsZi5f
cGlkID0gc2VsZi5fZGV2aWNlLmxhdW5jaF9hcHAoc2VsZi5fYnVuZGxlX2lkLCBzZWxmLl9jbWRb
MTpdLCBlbnY9c2VsZi5fZW52KQorICAgICAgICBhc3NlcnQgc2VsZi5fcGlkCisKKyAgICAgICAg
ZGVmIGhhbmRsZXIoc2lnbnVtLCBmcmFtZSk6CisgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJD
b3VsZG4ndCBvcGVuIHN0ZGluIikKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxS
TSwgaGFuZGxlcikKKyAgICAgICAgc2lnbmFsLmFsYXJtKDMpCisgICAgICAgIHRyeToKKyAgICAg
ICAgICAgIHN0ZGluID0gb3BlbihzZWxmLl9pbl9wYXRoLCAidyIsIDApCisgICAgICAgIGV4Y2Vw
dDoKKyAgICAgICAgICAgIHN0ZGluID0gTm9uZQorICAgICAgICBzaWduYWwuYWxhcm0oMCkKKwor
ICAgICAgICBzZWxmLl9wcm9jID0gU2ltdWxhdG9yUHJvY2Vzcy5TaW11bGF0b3JQcm9jZXNzUG9w
ZW4oc2VsZi5fcGlkLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIpCisgICAgICAgIGlmIG5vdCBzdGRp
bjoKKyAgICAgICAgICAgIHNlbGYuX2NyYXNoZWQgPSBUcnVlCisKKyAgICBkZWYgX2tpbGwoc2Vs
Zik6CisgICAgICAgIHNlbGYuX2RldmljZS50ZXJtaW5hdGVfYXBwKHNlbGYuX2J1bmRsZV9pZCkK
KyAgICAgICAgc3VwZXIoU2ltdWxhdG9yUHJvY2Vzcywgc2VsZikuX2tpbGwoKQpJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3IucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3IucHkJKHJldmlzaW9uIDIxMDkzMCkK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw3IEBAIGltcG9ydCB0aW1lCiAKIGZyb20gd2Via2l0cHkuYmVuY2ht
YXJrX3J1bm5lci51dGlscyBpbXBvcnQgdGltZW91dAogZnJvbSB3ZWJraXRweS5jb21tb24uaG9z
dCBpbXBvcnQgSG9zdAorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBv
cnQgU2NyaXB0RXJyb3IKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCkBA
IC0xNjcsNyArMTY4LDcgQEAgY2xhc3MgRGV2aWNlKG9iamVjdCk6CiAgICAgUmVwcmVzZW50cyBh
IENvcmVTaW11bGF0b3IgZGV2aWNlIHVuZGVybmVhdGggYSBydW50aW1lCiAgICAgIiIiCiAKLSAg
ICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgdWRpZCwgYXZhaWxhYmxlLCBydW50aW1lKToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgdWRpZCwgYXZhaWxhYmxlLCBydW50aW1lLCBob3N0
PU5vbmUpOgogICAgICAgICAiIiIKICAgICAgICAgOnBhcmFtIG5hbWU6IFRoZSBkZXZpY2UgbmFt
ZQogICAgICAgICA6dHlwZSBuYW1lOiBzdHIKQEAgLTE3OCw2ICsxNzksNyBAQCBjbGFzcyBEZXZp
Y2Uob2JqZWN0KToKICAgICAgICAgOnBhcmFtIHJ1bnRpbWU6IFRoZSBpT1MgU2ltdWxhdG9yIHJ1
bnRpbWUgdGhhdCBob3N0cyB0aGlzIGRldmljZQogICAgICAgICA6dHlwZSBydW50aW1lOiBSdW50
aW1lCiAgICAgICAgICIiIgorICAgICAgICBzZWxmLl9ob3N0ID0gaG9zdCBvciBIb3N0KCkKICAg
ICAgICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgICBzZWxmLnVkaWQgPSB1ZGlkCiAgICAgICAg
IHNlbGYuYXZhaWxhYmxlID0gYXZhaWxhYmxlCkBAIC0yNjAsNiArMjYyLDMxIEBAIGNsYXNzIERl
dmljZShvYmplY3QpOgogICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJy
b3I6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJyJ4Y3J1biBzaW1jdGwgZXJhc2Ui
IGZhaWxlZDogZGV2aWNlIHN0YXRlIGlzIHt9Jy5mb3JtYXQoU2ltdWxhdG9yLmRldmljZV9zdGF0
ZSh1ZGlkKSkpCiAKKyAgICBkZWYgaW5zdGFsbF9hcHAoc2VsZiwgYXBwX3BhdGgpOgorICAgICAg
ICByZXR1cm4gbm90IHNlbGYuX2hvc3QuZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsneGNydW4nLCAn
c2ltY3RsJywgJ2luc3RhbGwnLCBzZWxmLnVkaWQsIGFwcF9wYXRoXSwgcmV0dXJuX2V4aXRfY29k
ZT1UcnVlKQorCisgICAgZGVmIGxhdW5jaF9hcHAoc2VsZiwgYnVuZGxlX2lkZW50aWZpZXIsIGFy
Z3MsIGVudj1Ob25lKToKKyAgICAgICAgZW52aXJvbm1lbnRfdG9fdXNlID0ge30KKyAgICAgICAg
Zm9yIHZhbHVlIGluIChlbnYgb3Ige30pOgorICAgICAgICAgICAgaWYgbm90IHZhbHVlLnN0YXJ0
c3dpdGgoIlNJTUNUTF9DSElMRF8iKToKKyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudF90b191
c2VbJ1NJTUNUTF9DSElMRF8nICsgdmFsdWVdID0gZW52W3ZhbHVlXQorICAgICAgICAgICAgZW52
aXJvbm1lbnRfdG9fdXNlW3ZhbHVlXSA9IGVudlt2YWx1ZV0KKworICAgICAgICB0cnk6CisgICAg
ICAgICAgICBvdXRwdXQgPSBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5ydW5fY29tbWFuZCgKKyAgICAg
ICAgICAgICAgICBbJ3hjcnVuJywgJ3NpbWN0bCcsICdsYXVuY2gnLCBzZWxmLnVkaWQsIGJ1bmRs
ZV9pZGVudGlmaWVyXSArIGFyZ3MsCisgICAgICAgICAgICAgICAgZW52PWVudmlyb25tZW50X3Rv
X3VzZSwKKyAgICAgICAgICAgICkKKyAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yOgorICAgICAg
ICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAjIE91dHB1dCBzaG91bGQgYmU6ICI8YnVuZGxl
IGlkPjogPHBpZD4iCisgICAgICAgIGFzc2VydCBvdXRwdXQuc3RhcnRzd2l0aChidW5kbGVfaWRl
bnRpZmllciArICI6ICIpCisgICAgICAgIHJldHVybiBpbnQob3V0cHV0LnJzdHJpcCgnXG4nKS5z
cGxpdCgnICcpWzFdKQorCisgICAgZGVmIHRlcm1pbmF0ZV9hcHAoc2VsZiwgYnVuZGxlX2lkZW50
aWZpZXIpOgorICAgICAgICByZXR1cm4gbm90IHNlbGYuX2hvc3QuZXhlY3V0aXZlLnJ1bl9jb21t
YW5kKFsneGNydW4nLCAnc2ltY3RsJywgJ3Rlcm1pbmF0ZScsIHNlbGYudWRpZCwgYnVuZGxlX2lk
ZW50aWZpZXJdLCByZXR1cm5fZXhpdF9jb2RlPVRydWUpCisKICAgICBkZWYgX19lcV9fKHNlbGYs
IG90aGVyKToKICAgICAgICAgcmV0dXJuIHNlbGYudWRpZCA9PSBvdGhlci51ZGlkCiAKQEAgLTQ3
Nyw3ICs1MDQsOCBAQCBjbGFzcyBTaW11bGF0b3Iob2JqZWN0KToKICAgICAgICAgICAgICAgICBk
ZXZpY2UgPSBEZXZpY2UobmFtZT1kZXZpY2VfbWF0Y2guZ3JvdXAoJ25hbWUnKS5yc3RyaXAoKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWRpZD1kZXZpY2VfbWF0Y2guZ3JvdXAo
J3VkaWQnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlPWRldmlj
ZV9tYXRjaC5ncm91cCgnYXZhaWxhYmlsaXR5JykgaXMgTm9uZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcnVudGltZT1jdXJyZW50X3J1bnRpbWUpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJ1bnRpbWU9Y3VycmVudF9ydW50aW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBob3N0PXNlbGYuX2hvc3QpCiAgICAgICAgICAgICAgICAgY3VycmVu
dF9ydW50aW1lLmRldmljZXMuYXBwZW5kKGRldmljZSkKIAogICAgIGRlZiBkZXZpY2VfdHlwZShz
ZWxmLCBuYW1lPU5vbmUsIGlkZW50aWZpZXI9Tm9uZSk6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>299619</attachid>
            <date>2017-01-24 12:54:00 -0800</date>
            <delta_ts>2017-01-26 13:56:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165927-20170124125200.patch</filename>
            <type>text/plain</type>
            <size>29436</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMDk5MykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYwIEBACisyMDE3LTAxLTIzICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBSZW1vdmluZyBMYXlvdXRUZXN0UmVsYXkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTkyNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTGF5b3V0VGVzdFJlbGF5OiBSZW1vdmVk
IExheW91dFRlc3RSZWxheS4KKyAgICAgICAgKiBNYWtlZmlsZTogUmVtb3ZlZCBMYXlvdXRUZXN0
UmVsYXkgcmVmZXJlbmNlcy4KKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLXdlYmtpdDogUmVtb3Zl
ZCBMYXlvdXRUZXN0UmVsYXkgcmVmZXJlbmNlcy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3BvcnQvYmFzZS5weToKKyAgICAgICAgKFBvcnQuX19pbml0X18pOiBBZGRlZCBfdGVzdF9ydW5u
ZXJfcHJvY2Vzc19jb25zdHJ1Y3Rvci4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQv
ZGFyd2luLnB5OgorICAgICAgICAoRGFyd2luUG9ydC5hcHBfaWRlbnRpZmllcl9mcm9tX2J1bmRs
ZSk6IEFkZGVkIGZ1bmN0aW9uIHRvIGV4dHJhY3QgYnVuZGxlIElEIGZyb20gcGxpc3QuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weToKKyAgICAgICAgKERyaXZlci5f
c3RhcnQpOiBQYXNzIHdvcmtlcl9udW1iZXIgc2VydmVyX3Byb2Nlc3MuCisgICAgICAgIChJT1NT
aW11bGF0b3JEcml2ZXIpOiBEZWxldGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9y
dC9kcml2ZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChEcml2ZXJUZXN0LnRlc3Rfc3RvcF9jbGVh
bnNfdXBfcHJvcGVybHkpOiBTZXQgX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgZm9y
IHRlc3RpbmcuCisgICAgICAgIChEcml2ZXJUZXN0LnRlc3RfdHdvX3N0YXJ0c19jbGVhbnNfdXBf
cHJvcGVybHkpOiBEaXR0by4KKyAgICAgICAgKERyaXZlclRlc3QudGVzdF9zdGFydF9hY3R1YWxs
eV9zdGFydHMpOiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5
OgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydCk6IFJlbW92ZSByZWxheV9uYW1lLgorICAgICAg
ICAoSU9TU2ltdWxhdG9yUG9ydC5fX2luaXRfXyk6IFNldCBfdGVzdF9ydW5uZXJfcHJvY2Vzc19j
b25zdHJ1Y3RvciBmb3IgSU9TU2ltdWxhdG9ycy4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQu
X2NyZWF0ZV9zaW11bGF0b3JzKTogRm9ybWF0dGluZyBjaGFuZ2UuCisgICAgICAgIChJT1NTaW11
bGF0b3JQb3J0LnJlbGF5X3BhdGgpOiBEZWxldGVkLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9y
dC5fY2hlY2tfcmVsYXkpOiBVc2UgYmFzZSBjbGFzcy4KKyAgICAgICAgKElPU1NpbXVsYXRvclBv
cnQuX2NoZWNrX3BvcnRfYnVpbGQpOiBEZWxldGVkLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9y
dC5fYnVpbGRfcmVsYXkpOiBEZWxldGVkLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fYnVp
bGRfZHJpdmVyKTogRGVsZXRlZC4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX2RyaXZlcl9j
bGFzcyk6IFVzZSBiYXNlIGNsYXNzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9p
b3NfdW5pdHRlc3QucHk6CisgICAgICAgIChpb3NUZXN0LnRlc3RfMzJiaXQpOiBVcGRhdGUgdGVz
dC4KKyAgICAgICAgKGlvc1Rlc3QudGVzdF82NGJpdCk6IFVwZGF0ZSB0ZXN0LgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weToKKyAgICAgICAgKFNlcnZl
clByb2Nlc3MuX19pbml0X18pOiBBY2NlcHQgd29ya2VyX251bWJlci4KKyAgICAgICAgKFNlcnZl
clByb2Nlc3MuX3NldF9maWxlX25vbmJsb2NraW5nKTogQWRkZWQgdG8gc2hhcmUgY29tbW9uIGNv
ZGUuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLndyaXRlKTogRmx1c2ggYWZ0ZXIgd3JpdGluZy4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3NfbW9jay5weToK
KyAgICAgICAgKE1vY2tTZXJ2ZXJQcm9jZXNzLl9faW5pdF9fKTogQWNjZXB0IHdvcmtlcl9udW1i
ZXIuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNzLnB5
OiBBZGRlZC4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MpOiAKKyAgICAgICAgKFNpbXVsYXRv
clByb2Nlc3MuU2ltdWxhdG9yUHJvY2Vzc1BvcGVuKToKKyAgICAgICAgKFNpbXVsYXRvclByb2Nl
c3MuU2ltdWxhdG9yUHJvY2Vzc1BvcGVuLl9faW5pdF9fKTogU2V0LXVwIG9wZW4gc3RydWN0dXJl
IHdpdGggZW1wdHkgYXJndW1lbnRzLgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5TaW11bGF0
b3JQcm9jZXNzUG9wZW4ucG9sbCk6IENoZWNrIGlmIHRoZSBwcm9jZXNzIGlzIHJ1bm5pbmcuCisg
ICAgICAgIChTaW11bGF0b3JQcm9jZXNzLlNpbXVsYXRvclByb2Nlc3NQb3Blbi53YWl0KTogV2Fp
dCBmb3IgdGFyZ2V0IHByb2Nlc3MgdG8gY2xvc2UuCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNz
Ll9faW5pdF9fKTogSW5zdGFsbCBhcHAgdG8gZGV2aWNlLgorICAgICAgICAoU2ltdWxhdG9yUHJv
Y2Vzcy5fX3VubGlua19jaGVja19leGlzdHMpOiBVbmxpbmsgZmlsZSwgdGhyb3cgZXJyb3IgaWYg
dGhpcyBmYWlscy4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX3Jlc2V0KTogVW5saW5rIGZp
Zm9zLgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5fc3RhcnQpOiBMYXVuY2ggYXBwIG9uIHNp
bXVsYXRvciwgbGluayBmaWZvcy4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX2tpbGwpOiBT
aHV0ZG93biBhcHAgb24gc2ltdWxhdG9yCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS94Y29k
ZS9zaW11bGF0b3IucHk6CisgICAgICAgIChEZXZpY2UuX19pbml0X18pOiBBY2NlcHQgaG9zdCB0
byBydW4gaW5zdGFsbC9sYXVuY2gvdGVybWluYXRlLgorICAgICAgICAoRGV2aWNlLmluc3RhbGxf
YXBwKTogSW5zdGFsbCBhcHAgdG8gdGFyZ2V0IGRldmljZS4KKyAgICAgICAgKERldmljZS5sYXVu
Y2hfYXBwKTogTGF1bmNoIGFwcCBvbiB0YXJnZXQgZGV2aWNlLgorICAgICAgICAoRGV2aWNlLnRl
cm1pbmF0ZV9hcHApOiBTaHV0ZG93biBhcHAgb24gdGFyZ2V0IGRldmljZS4KKwogMjAxNy0wMS0y
MCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAg
IEJ1aWxkIEZpeCBmb3IgV2luZG93cyBEdW1wUmVuZGVyVHJlZSBhZnRlciByMjEwOTc2CkluZGV4
OiBUb29scy9NYWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9NYWtlZmlsZQkocmV2aXNpb24g
MjEwOTMwKQorKysgVG9vbHMvTWFrZWZpbGUJKHdvcmtpbmcgY29weSkKQEAgLTcsOSArNyw2IEBA
IGlmbmVxICgsJChTREtST09UKSkKIAlpZm5lcSAoLCQoZmluZHN0cmluZyBpcGhvbmUsJChTREtS
T09UKSkpCiAJCU1PRFVMRVMgKz0gTW9iaWxlTWluaUJyb3dzZXIKIAllbmRpZgotCWlmZXEgKCwk
KERPX05PVF9CVUlMRF9MQVlPVVRfVEVTVF9SRUxBWSkpCi0JCU1PRFVMRVMgKz0gTGF5b3V0VGVz
dFJlbGF5Ci0JZW5kaWYKIGVuZGlmCiAKIGFsbDoKSW5kZXg6IFRvb2xzL1NjcmlwdHMvYnVpbGQt
d2Via2l0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CShyZXZpc2lv
biAyMTA5MzApCisrKyBUb29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAkod29ya2luZyBjb3B5KQpA
QCAtMjAwLDEwICsyMDAsNiBAQCBpZiAoaXNBcHBsZU1hY1dlYktpdCgpKSB7CiAgICAgICAgIHB1
c2ggQGNvcHlMaWJyYXJpZXNBcmdzLCBwcm9kdWN0RGlyKCk7CiAgICAgICAgIHByaW50KGpvaW4o
IiAiLCBAY29weUxpYnJhcmllc0FyZ3MpIC4gIlxuIik7CiAgICAgICAgIChzeXN0ZW0oQGNvcHlM
aWJyYXJpZXNBcmdzKSA9PSAwKSBvciBkaWU7Ci0KLSAgICAgICAgaWYgKHdpbGxVc2VJT1NTaW11
bGF0b3JTREsoKSkgewotICAgICAgICAgICAgKHN5c3RlbSgicGVybCIsICJUb29scy9TY3JpcHRz
L2J1aWxkLWxheW91dHRlc3RyZWxheSIsIGFyZ3VtZW50c0ZvckNvbmZpZ3VyYXRpb24oKSkgPT0g
MCkgb3IgZGllOwotICAgICAgICB9CiAgICAgfQogCiAgICAgIyBCdWlsZCBUb29scyBuZWVkZWQg
Zm9yIEFwcGxlIHBvcnRzCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQkocmV2
aXNpb24gMjEwOTMwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkJKHdv
cmtpbmcgY29weSkKQEAgLTEzMSw2ICsxMzEsNyBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAg
ICAgIHNlbGYuX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9IE5vbmUKICAgICAgICAgc2VsZi5f
aW1hZ2VfZGlmZmVyID0gTm9uZQogICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1
Y3RvciA9IHNlcnZlcl9wcm9jZXNzLlNlcnZlclByb2Nlc3MgICMgb3ZlcnJpZGFibGUgZm9yIHRl
c3RpbmcKKyAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IHNl
cnZlcl9wcm9jZXNzLlNlcnZlclByb2Nlc3MKIAogICAgICAgICBpZiBub3QgaGFzYXR0cihvcHRp
b25zLCAnY29uZmlndXJhdGlvbicpIG9yIG5vdCBvcHRpb25zLmNvbmZpZ3VyYXRpb246CiAgICAg
ICAgICAgICBzZWxmLnNldF9vcHRpb25fZGVmYXVsdCgnY29uZmlndXJhdGlvbicsIHNlbGYuZGVm
YXVsdF9jb25maWd1cmF0aW9uKCkpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
ZGFyd2luLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3
aW4ucHkJKHJldmlzaW9uIDIxMDkzMCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9k
YXJ3aW4ucHkJKHdvcmtpbmcgY29weSkKQEAgLTE3NCwzICsxNzQsMTEgQEAgY2xhc3MgRGFyd2lu
UG9ydChBcHBsZVBvcnQpOgogICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3I6CiAgICAgICAgICAg
ICBfbG9nLndhcm4oInhjcnVuIGZhaWxlZDsgZmFsbGluZyBiYWNrIHRvICclcycuIiAlIGZhbGxi
YWNrKQogICAgICAgICAgICAgcmV0dXJuIGZhbGxiYWNrCisKKyAgICBkZWYgYXBwX2lkZW50aWZp
ZXJfZnJvbV9idW5kbGUoc2VsZiwgYXBwX2J1bmRsZSk6CisgICAgICAgIHBsaXN0X3BhdGggPSBz
ZWxmLl9maWxlc3lzdGVtLmpvaW4oYXBwX2J1bmRsZSwgJ0luZm8ucGxpc3QnKQorICAgICAgICBp
ZiBub3Qgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMocGxpc3RfcGF0aCk6CisgICAgICAgICAgICBw
bGlzdF9wYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKGFwcF9idW5kbGUsICdDb250ZW50cy9J
bmZvLnBsaXN0JykKKyAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHBsaXN0
X3BhdGgpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4
ZWN1dGl2ZS5ydW5fY29tbWFuZChbJy91c3IvbGliZXhlYy9QbGlzdEJ1ZGR5JywgJy1jJywgJ1By
aW50IENGQnVuZGxlSWRlbnRpZmllcicsIHBsaXN0X3BhdGhdKS5yc3RyaXAoKQpJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5CShyZXZpc2lvbiAyMTA5MzApCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMzgs
NyArMTM4LDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2RyaXZlcl91
c2VyX2RpcmVjdG9yeV9zdWZmaXggPSBOb25lCiAgICAgICAgIHNlbGYuX2RyaXZlcl91c2VyX2Nh
Y2hlX2RpcmVjdG9yeSA9IE5vbmUKIAotICAgICAgICAjIFdlYktpdFRlc3RSdW5uZXIvTGF5b3V0
VGVzdFJlbGF5IGNhbiByZXBvcnQgYmFjayBzdWJwcm9jZXNzIGNyYXNoZXMgYnkgcHJpbnRpbmcK
KyAgICAgICAgIyBXZWJLaXRUZXN0UnVubmVyIGNhbiByZXBvcnQgYmFjayBzdWJwcm9jZXNzIGNy
YXNoZXMgYnkgcHJpbnRpbmcKICAgICAgICAgIyAiI0NSQVNIRUQgLSBQUk9DRVNTTkFNRSIuICBT
aW5jZSB0aG9zZSBjYW4gaGFwcGVuIGF0IGFueSB0aW1lIGFuZCBTZXJ2ZXJQcm9jZXNzCiAgICAg
ICAgICMgd29uJ3QgYmUgYXdhcmUgb2YgdGhlbSAoc2luY2UgdGhlIGFjdHVhbCB0b29sIGRpZG4n
dCBjcmFzaCwganVzdCBhIHN1YnByb2Nlc3MpCiAgICAgICAgICMgd2UgcmVjb3JkIHRoZSBjcmFz
aGVkIHN1YnByb2Nlc3MgbmFtZSBoZXJlLgpAQCAtMzI3LDcgKzMyNyw2IEBAIGNsYXNzIERyaXZl
cihvYmplY3QpOgogCiAgICAgZGVmIF9zZXR1cF9lbnZpcm9uX2Zvcl9kcml2ZXIoc2VsZiwgZW52
aXJvbm1lbnQpOgogICAgICAgICBidWlsZF9yb290X3BhdGggPSBzdHIoc2VsZi5fcG9ydC5fYnVp
bGRfcGF0aCgpKQotICAgICAgICAjIEZJWE1FOiBEWUxEXyogdmFyaWFibGVzIHNob3VsZCBiZSBN
YWMtb25seS4gRXZlbiBpT1MgU2ltdWxhdG9yIGRvZXNuJ3QgbmVlZCB0aGVtLCBhcyBMYXlvdXRU
ZXN0UmVsYXkgaXMgYSBob3N0IGJpbmFyeS4KICAgICAgICAgc2VsZi5fYXBwZW5kX2Vudmlyb25t
ZW50X3ZhcmlhYmxlX3BhdGgoZW52aXJvbm1lbnQsICdEWUxEX0xJQlJBUllfUEFUSCcsIGJ1aWxk
X3Jvb3RfcGF0aCkKICAgICAgICAgc2VsZi5fYXBwZW5kX2Vudmlyb25tZW50X3ZhcmlhYmxlX3Bh
dGgoZW52aXJvbm1lbnQsICdfX1hQQ19EWUxEX0xJQlJBUllfUEFUSCcsIGJ1aWxkX3Jvb3RfcGF0
aCkKICAgICAgICAgc2VsZi5fYXBwZW5kX2Vudmlyb25tZW50X3ZhcmlhYmxlX3BhdGgoZW52aXJv
bm1lbnQsICdEWUxEX0ZSQU1FV09SS19QQVRIJywgYnVpbGRfcm9vdF9wYXRoKQpAQCAtMzY5LDcg
KzM2OCw3IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogICAgICAgICBlbnZpcm9ubWVudCA9IHNl
bGYuX3NldHVwX2Vudmlyb25fZm9yX3Rlc3QoKQogICAgICAgICBzZWxmLl9jcmFzaGVkX3Byb2Nl
c3NfbmFtZSA9IE5vbmUKICAgICAgICAgc2VsZi5fY3Jhc2hlZF9waWQgPSBOb25lCi0gICAgICAg
IHNlbGYuX3NlcnZlcl9wcm9jZXNzID0gc2VsZi5fcG9ydC5fc2VydmVyX3Byb2Nlc3NfY29uc3Ry
dWN0b3Ioc2VsZi5fcG9ydCwgc2VsZi5fc2VydmVyX25hbWUsIHNlbGYuY21kX2xpbmUocGl4ZWxf
dGVzdHMsIHBlcl90ZXN0X2FyZ3MpLCBlbnZpcm9ubWVudCkKKyAgICAgICAgc2VsZi5fc2VydmVy
X3Byb2Nlc3MgPSBzZWxmLl9wb3J0Ll90ZXN0X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yKHNl
bGYuX3BvcnQsIHNlbGYuX3NlcnZlcl9uYW1lLCBzZWxmLmNtZF9saW5lKHBpeGVsX3Rlc3RzLCBw
ZXJfdGVzdF9hcmdzKSwgZW52aXJvbm1lbnQsIHdvcmtlcl9udW1iZXI9c2VsZi5fd29ya2VyX251
bWJlcikKICAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3Muc3RhcnQoKQogCiAgICAgZGVmIF9y
dW5fcG9zdF9zdGFydF90YXNrcyhzZWxmKToKQEAgLTYxMSwyNyArNjEwLDYgQEAgY2xhc3MgRHJp
dmVyKG9iamVjdCk6CiAgICAgICAgIHJldHVybiBUcnVlCiAKIAotIyBGSVhNRTogdGhpcyBzaG91
bGQgYmUgYWJzdHJhY3RlZCBvdXQgdmlhIHRoZSBQb3J0IHN1YmNsYXNzIHNvbWVob3cuCi1jbGFz
cyBJT1NTaW11bGF0b3JEcml2ZXIoRHJpdmVyKToKLSAgICBkZWYgY21kX2xpbmUoc2VsZiwgcGl4
ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgotICAgICAgICBjbWQgPSBzdXBlcihJT1NTaW11bGF0
b3JEcml2ZXIsIHNlbGYpLmNtZF9saW5lKHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKQotICAg
ICAgICByZWxheV90b29sID0gc2VsZi5fcG9ydC5yZWxheV9wYXRoCi0gICAgICAgIGR1bXBfdG9v
bCA9IGNtZFswXQotICAgICAgICBkdW1wX3Rvb2xfYXJncyA9IGNtZFsxOl0KLSAgICAgICAgcHJv
ZHVjdF9kaXIgPSBzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCkKLSAgICAgICAgcmVsYXlfYXJncyA9
IFsKLSAgICAgICAgICAgICctZGV2ZWxvcGVyRGlyJywgc2VsZi5fcG9ydC5kZXZlbG9wZXJfZGly
LAotICAgICAgICAgICAgJy11ZGlkJywgc2VsZi5fcG9ydC5kZXZpY2VfaWRfZm9yX3dvcmtlcl9u
dW1iZXIoc2VsZi5fd29ya2VyX251bWJlciksCi0gICAgICAgICAgICAnLXByb2R1Y3REaXInLCBw
cm9kdWN0X2RpciwKLSAgICAgICAgICAgICctYXBwJywgZHVtcF90b29sLAotICAgICAgICBdCi0g
ICAgICAgIHJldHVybiBbcmVsYXlfdG9vbF0gKyByZWxheV9hcmdzICsgWyctLSddICsgZHVtcF90
b29sX2FyZ3MKLQotICAgIGRlZiBfc2V0dXBfZW52aXJvbl9mb3JfZHJpdmVyKHNlbGYsIGVudmly
b25tZW50KToKLSAgICAgICAgZW52aXJvbm1lbnRbJ0RFVkVMT1BFUl9ESVInXSA9IHNlbGYuX3Bv
cnQuZGV2ZWxvcGVyX2RpcgotICAgICAgICByZXR1cm4gc3VwZXIoSU9TU2ltdWxhdG9yRHJpdmVy
LCBzZWxmKS5fc2V0dXBfZW52aXJvbl9mb3JfZHJpdmVyKGVudmlyb25tZW50KQotCi0KIGNsYXNz
IENvbnRlbnRCbG9jayhvYmplY3QpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAg
c2VsZi5jb250ZW50X3R5cGUgPSBOb25lCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvZHJpdmVyX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIxMDkzMCkKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAg
LTI2NCw3ICsyNjQsNyBAQCBjbGFzcyBEcml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAog
ICAgIGRlZiB0ZXN0X3N0b3BfY2xlYW5zX3VwX3Byb3Blcmx5KHNlbGYpOgogICAgICAgICBwb3J0
ID0gVGVzdFdlYktpdFBvcnQoKQotICAgICAgICBwb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1
Y3RvciA9IE1vY2tTZXJ2ZXJQcm9jZXNzCisgICAgICAgIHBvcnQuX3Rlc3RfcnVubmVyX3Byb2Nl
c3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJvY2VzcwogICAgICAgICBkcml2ZXIgPSBEcml2
ZXIocG9ydCwgMCwgcGl4ZWxfdGVzdHM9VHJ1ZSkKICAgICAgICAgZHJpdmVyLnN0YXJ0KFRydWUs
IFtdKQogICAgICAgICBsYXN0X3RtcGRpciA9IHBvcnQuX2ZpbGVzeXN0ZW0ubGFzdF90bXBkaXIK
QEAgLTI3NCw3ICsyNzQsNyBAQCBjbGFzcyBEcml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
IAogICAgIGRlZiB0ZXN0X3R3b19zdGFydHNfY2xlYW5zX3VwX3Byb3Blcmx5KHNlbGYpOgogICAg
ICAgICBwb3J0ID0gVGVzdFdlYktpdFBvcnQoKQotICAgICAgICBwb3J0Ll9zZXJ2ZXJfcHJvY2Vz
c19jb25zdHJ1Y3RvciA9IE1vY2tTZXJ2ZXJQcm9jZXNzCisgICAgICAgIHBvcnQuX3Rlc3RfcnVu
bmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJvY2VzcwogICAgICAgICBkcml2
ZXIgPSBEcml2ZXIocG9ydCwgMCwgcGl4ZWxfdGVzdHM9VHJ1ZSkKICAgICAgICAgZHJpdmVyLnN0
YXJ0KFRydWUsIFtdKQogICAgICAgICBsYXN0X3RtcGRpciA9IHBvcnQuX2ZpbGVzeXN0ZW0ubGFz
dF90bXBkaXIKQEAgLTI4Myw3ICsyODMsNyBAQCBjbGFzcyBEcml2ZXJUZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3N0YXJ0X2FjdHVhbGx5X3N0YXJ0cyhzZWxmKToKICAg
ICAgICAgcG9ydCA9IFRlc3RXZWJLaXRQb3J0KCkKLSAgICAgICAgcG9ydC5fc2VydmVyX3Byb2Nl
c3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJvY2VzcworICAgICAgICBwb3J0Ll90ZXN0X3J1
bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gTW9ja1NlcnZlclByb2Nlc3MKICAgICAgICAgZHJp
dmVyID0gRHJpdmVyKHBvcnQsIDAsIHBpeGVsX3Rlc3RzPVRydWUpCiAgICAgICAgIGRyaXZlci5z
dGFydChUcnVlLCBbXSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRyaXZlci5fc2VydmVyX3By
b2Nlc3Muc3RhcnRlZCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQkocmV2aXNp
b24gMjEwOTMwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2Rl
bHMudGVzdF9jCiBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGNvbmZpZyBhcyBwb3J0X2NvbmZp
ZwogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBkcml2ZXIsIGltYWdlX2RpZmYKIGZyb20gd2Vi
a2l0cHkucG9ydC5kYXJ3aW4gaW1wb3J0IERhcndpblBvcnQKK2Zyb20gd2Via2l0cHkucG9ydC5z
aW11bGF0b3JfcHJvY2VzcyBpbXBvcnQgU2ltdWxhdG9yUHJvY2VzcwogZnJvbSB3ZWJraXRweS54
Y29kZS5zaW11bGF0b3IgaW1wb3J0IFNpbXVsYXRvciwgUnVudGltZSwgRGV2aWNlVHlwZQogZnJv
bSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCiAKQEAg
LTc4LDcgKzc5LDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICBT
REsgPSAnaXBob25lc2ltdWxhdG9yJwogCiAgICAgU0lNVUxBVE9SX0JVTkRMRV9JRCA9ICdjb20u
YXBwbGUuaXBob25lc2ltdWxhdG9yJwotICAgIHJlbGF5X25hbWUgPSAnTGF5b3V0VGVzdFJlbGF5
JwogICAgIFNJTVVMQVRPUl9ESVJFQ1RPUlkgPSAiL3RtcC9XZWJLaXRUZXN0aW5nU2ltdWxhdG9y
cy8iCiAgICAgTFNSRUdJU1RFUl9QQVRIID0gIi9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0Nv
cmVTZXJ2aWNlcy5mcmFtZXdvcmsvRnJhbWV3b3Jrcy9MYXVuY2hTZXJ2aWNlcy5mcmFtZXdvcmsv
VmVyc2lvbnMvQ3VycmVudC9TdXBwb3J0L2xzcmVnaXN0ZXIiCiAgICAgUFJPQ0VTU19DT1VOVF9F
U1RJTUFURV9QRVJfU0lNVUxBVE9SX0lOU1RBTkNFID0gMTAwCkBAIC05Nyw2ICs5Nyw3IEBAIGNs
YXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAKICAgICBkZWYgX19pbml0X18oc2Vs
ZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncyk6CiAgICAgICAgIERhcndpblBvcnQuX19pbml0
X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5fdGVzdF9y
dW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IFNpbXVsYXRvclByb2Nlc3MKIAogICAgICAgICBv
cHRpb25hbF9kZXZpY2VfY2xhc3MgPSBzZWxmLmdldF9vcHRpb24oJ2RldmljZV9jbGFzcycpCiAg
ICAgICAgIHNlbGYuX3ByaW50aW5nX2NtZF9saW5lID0gRmFsc2UKQEAgLTE0OCwxNiArMTQ5LDYg
QEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgICAgIGRldmlj
ZV90eXBlID0gRGV2aWNlVHlwZS5mcm9tX25hbWUoZGV2aWNlX25hbWUpCiAgICAgICAgIHJldHVy
biBkZXZpY2VfdHlwZQogCi0gICAgQHByb3BlcnR5Ci0gICAgQG1lbW9pemVkCi0gICAgZGVmIHJl
bGF5X3BhdGgoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX3Jvb3Rfd2FzX3NldDoKLSAgICAgICAg
ICAgIHBhdGggPSBzZWxmLl9maWxlc3lzdGVtLmFic3BhdGgoc2VsZi5nZXRfb3B0aW9uKCdyb290
JykpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtYWNfY29uZmlnID0gcG9ydF9jb25maWcu
Q29uZmlnKHNlbGYuX2V4ZWN1dGl2ZSwgc2VsZi5fZmlsZXN5c3RlbSwgJ21hYycpCi0gICAgICAg
ICAgICBwYXRoID0gbWFjX2NvbmZpZy5idWlsZF9kaXJlY3Rvcnkoc2VsZi5nZXRfb3B0aW9uKCdj
b25maWd1cmF0aW9uJykpCi0gICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLmpvaW4ocGF0
aCwgc2VsZi5yZWxheV9uYW1lKQotCiAgICAgQG1lbW9pemVkCiAgICAgZGVmIGNoaWxkX3Byb2Nl
c3NlcyhzZWxmKToKICAgICAgICAgcmV0dXJuIGludChzZWxmLmdldF9vcHRpb24oJ2NoaWxkX3By
b2Nlc3NlcycpKQpAQCAtMTgyLDE5ICsxNzMsNiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERh
cndpblBvcnQpOgogCiAgICAgICAgIHJldHVybiBtaW4obWF4aW11bV9zaW11bGF0b3JfY291bnRf
b25fdGhpc19zeXN0ZW0sIGJlc3RfY2hpbGRfcHJvY2Vzc19jb3VudF9mb3JfY3B1KQogCi0gICAg
ZGVmIF9jaGVja19yZWxheShzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0ZW0u
ZXhpc3RzKHNlbGYucmVsYXlfcGF0aCk6Ci0gICAgICAgICAgICBfbG9nLmVycm9yKCIlcyB3YXMg
bm90IGZvdW5kIGF0ICVzIiAlIChzZWxmLnJlbGF5X25hbWUsIHNlbGYucmVsYXlfcGF0aCkpCi0g
ICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBf
Y2hlY2tfcG9ydF9idWlsZChzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuX3Jvb3Rfd2FzX3Nl
dCBhbmQgc2VsZi5nZXRfb3B0aW9uKCdidWlsZCcpIGFuZCBub3Qgc2VsZi5fYnVpbGRfcmVsYXko
KToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBpZiBub3Qgc2VsZi5fY2hlY2tf
cmVsYXkoKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1ZQot
CiAgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIs
IG5ld2VyX3RoYW4sIHRpbWVfZm49dGltZS50aW1lLCBzbGVlcF9mbj10aW1lLnNsZWVwLCB3YWl0
X2Zvcl9sb2c9VHJ1ZSk6CiAgICAgICAgIHRpbWVfZm4gPSB0aW1lX2ZuIG9yIHRpbWUudGltZQog
ICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9yIHRpbWUuc2xlZXAKQEAgLTIxNSw3ICsxOTMs
NyBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgICAgICAgICAgcmV0
dXJuIHNlbGYuX2dldF9jcmFzaF9sb2coY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZFsw
XSwgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZFsxXSwgc3Rkb3V0LAogICAgICAgICAg
ICAgICAgICdcbicuam9pbihzdGRlcnJfbGluZXMpLCBuZXdlcl90aGFuLCB0aW1lX2ZuLCBzbGVl
cF9mbiwgd2FpdF9mb3JfbG9nKQogCi0gICAgICAgICMgTGF5b3V0VGVzdFJlbGF5IGNyYXNoZWQK
KyAgICAgICAgIyBBcHAgY3Jhc2hlZAogICAgICAgICBfbG9nLmRlYnVnKCdsb29raW5nIGZvciBj
cmFzaCBsb2cgZm9yICVzOiVzJyAlIChuYW1lLCBzdHIocGlkKSkpCiAgICAgICAgIGNyYXNoX2xv
ZyA9ICcnCiAgICAgICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3Moc2VsZi5ob3N0KQpAQCAtMjMz
LDI1ICsyMTEsNiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgICAg
ICAgICAgcmV0dXJuIHN0ZGVyciwgTm9uZQogICAgICAgICByZXR1cm4gc3RkZXJyLCBjcmFzaF9s
b2cKIAotICAgIGRlZiBfYnVpbGRfcmVsYXkoc2VsZik6Ci0gICAgICAgIGVudmlyb25tZW50ID0g
c2VsZi5ob3N0LmNvcHlfY3VycmVudF9lbnZpcm9ubWVudCgpCi0gICAgICAgIGVudmlyb25tZW50
LmRpc2FibGVfZ2NjX3NtYXJ0cXVvdGVzKCkKLSAgICAgICAgZW52ID0gZW52aXJvbm1lbnQudG9f
ZGljdGlvbmFyeSgpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBGSVhNRTogV2Ugc2hv
dWxkIGJlIHBhc3NpbmcgX2FyZ3VtZW50c19mb3JfY29uZmlndXJhdGlvbigpLCB3aGljaCByZXNw
ZWN0cyBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBwb3J0LAotICAgICAgICAgICAgIyBpbnN0ZWFk
IG9mIGhhcmRjb2RpbmcgLS1pb3Mtc2ltdWxhdG9yLgotICAgICAgICAgICAgc2VsZi5fcnVuX3Nj
cmlwdCgiYnVpbGQtbGF5b3V0dGVzdHJlbGF5IiwgYXJncz1bIi0taW9zLXNpbXVsYXRvciJdLCBl
bnY9ZW52KQotICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3IsIGU6Ci0gICAgICAgICAgICBfbG9n
LmVycm9yKGUubWVzc2FnZV93aXRoX291dHB1dChvdXRwdXRfbGltaXQ9Tm9uZSkpCi0gICAgICAg
ICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBfYnVpbGRf
ZHJpdmVyKHNlbGYpOgotICAgICAgICBidWlsdF90b29sID0gc3VwZXIoSU9TU2ltdWxhdG9yUG9y
dCwgc2VsZikuX2J1aWxkX2RyaXZlcigpCi0gICAgICAgIGJ1aWx0X3JlbGF5ID0gc2VsZi5fYnVp
bGRfcmVsYXkoKQotICAgICAgICByZXR1cm4gYnVpbHRfdG9vbCBhbmQgYnVpbHRfcmVsYXkKLQog
ICAgIGRlZiBfYnVpbGRfZHJpdmVyX2ZsYWdzKHNlbGYpOgogICAgICAgICBhcmNocyA9IFsnQVJD
SFM9aTM4NiddIGlmIHNlbGYuYXJjaGl0ZWN0dXJlKCkgPT0gJ3g4NicgZWxzZSBbXQogICAgICAg
ICBzZGsgPSBbJy0tc2RrJywgJ2lwaG9uZXNpbXVsYXRvciddCkBAIC0yNjQsOSArMjIzLDYgQEAg
Y2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgICAgICAgICBjb25m
aWd1cmF0aW9ucy5hcHBlbmQoVGVzdENvbmZpZ3VyYXRpb24odmVyc2lvbj1zZWxmLl92ZXJzaW9u
LCBhcmNoaXRlY3R1cmU9YXJjaGl0ZWN0dXJlLCBidWlsZF90eXBlPWJ1aWxkX3R5cGUpKQogICAg
ICAgICByZXR1cm4gY29uZmlndXJhdGlvbnMKIAotICAgIGRlZiBfZHJpdmVyX2NsYXNzKHNlbGYp
OgotICAgICAgICByZXR1cm4gZHJpdmVyLklPU1NpbXVsYXRvckRyaXZlcgotCiAgICAgZGVmIGRl
ZmF1bHRfYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuZ2V0X29w
dGlvbignd2Via2l0X3Rlc3RfcnVubmVyJyk6CiAgICAgICAgICAgICBmYWxsYmFja19uYW1lcyA9
IFtzZWxmLl93azJfcG9ydF9uYW1lKCldICsgW3NlbGYucG9ydF9uYW1lXSArIFsnd2syJ10KQEAg
LTI4MCw5ICsyMzYsOSBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogCiAg
ICAgZGVmIF9jcmVhdGVfc2ltdWxhdG9ycyhzZWxmKToKICAgICAgICAgaWYgKHNlbGYuZGVmYXVs
dF9jaGlsZF9wcm9jZXNzZXMoKSA8IHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpOgotICAgICAgICAg
ICAgICAgIF9sb2cud2FybigiWW91IGhhdmUgc3BlY2lmaWVkIHZlcnkgaGlnaCB2YWx1ZSh7MH0p
IGZvciAtLWNoaWxkLXByb2Nlc3NlcyIuZm9ybWF0KHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpKQot
ICAgICAgICAgICAgICAgIF9sb2cud2FybigibWF4aW11bSBjaGlsZC1wcm9jZXNzZXMgd2hpY2gg
Y2FuIGJlIHN1cHBvcnRlZCBvbiB0aGlzIHN5c3RlbSBhcmU6IHswfSIuZm9ybWF0KHNlbGYuZGVm
YXVsdF9jaGlsZF9wcm9jZXNzZXMoKSkpCi0gICAgICAgICAgICAgICAgX2xvZy53YXJuKCJUaGlz
IGlzIHZlcnkgbGlrZWx5IHRvIGZhaWwuIikKKyAgICAgICAgICAgIF9sb2cud2FybigiWW91IGhh
dmUgc3BlY2lmaWVkIHZlcnkgaGlnaCB2YWx1ZSh7MH0pIGZvciAtLWNoaWxkLXByb2Nlc3NlcyIu
Zm9ybWF0KHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpKQorICAgICAgICAgICAgX2xvZy53YXJuKCJt
YXhpbXVtIGNoaWxkLXByb2Nlc3NlcyB3aGljaCBjYW4gYmUgc3VwcG9ydGVkIG9uIHRoaXMgc3lz
dGVtIGFyZTogezB9Ii5mb3JtYXQoc2VsZi5kZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcygpKSkKKyAg
ICAgICAgICAgIF9sb2cud2FybigiVGhpcyBpcyB2ZXJ5IGxpa2VseSB0byBmYWlsLiIpCiAKICAg
ICAgICAgaWYgc2VsZi5fdXNpbmdfZGVkaWNhdGVkX3NpbXVsYXRvcnMoKToKICAgICAgICAgICAg
IHNlbGYuX2NyZWF0ZVNpbXVsYXRvckFwcHMoKQpAQCAtNDEzLDcgKzM2OSw2IEBAIGNsYXNzIElP
U1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAgICAgZGVmIF90ZXN0aW5nX2RldmljZShzZWxm
LCBudW1iZXIpOgogICAgICAgICByZXR1cm4gU2ltdWxhdG9yLmRldmljZV9udW1iZXIobnVtYmVy
KQogCi0gICAgIyBUaGlzIGlzIG9ubHkgZXhwb3NlZCBzbyB0aGF0IElPU1NpbXVsYXRvckRyaXZl
ciBjYW4gdXNlIGl0LgogICAgIGRlZiBkZXZpY2VfaWRfZm9yX3dvcmtlcl9udW1iZXIoc2VsZiwg
bnVtYmVyKToKICAgICAgICAgaWYgc2VsZi5fcHJpbnRpbmdfY21kX2xpbmU6CiAgICAgICAgICAg
ICByZXR1cm4gJzxkdW1teSBpZD4nCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
aW9zX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9pb3NfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIxMDkzMCkKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9pb3NfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcg
QEAgY2xhc3MgaW9zVGVzdChkYXJ3aW5fdGVzdGNhc2UuRGFyd2luVGVzdAogICAgICAgICBwb3J0
Ll9ydW5fc2NyaXB0ID0gcnVuX3NjcmlwdAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQu
YXJjaGl0ZWN0dXJlKCksICd4ODYnKQogICAgICAgICBwb3J0Ll9idWlsZF9kcml2ZXIoKQotICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYXJncywgWyctLWlvcy1zaW11bGF0b3InXSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFyZ3MsIFsnQVJDSFM9aTM4NicsICctLXNkaycs
ICdpcGhvbmVzaW11bGF0b3InXSkKIAogICAgIGRlZiB0ZXN0XzY0Yml0KHNlbGYpOgogICAgICAg
ICAjIEFwcGxlIE1hYyBwb3J0IGlzIDY0LWJpdCBieSBkZWZhdWx0CkBAIC04Miw3ICs4Miw3IEBA
IGNsYXNzIGlvc1Rlc3QoZGFyd2luX3Rlc3RjYXNlLkRhcndpblRlc3QKIAogICAgICAgICBwb3J0
Ll9ydW5fc2NyaXB0ID0gcnVuX3NjcmlwdAogICAgICAgICBwb3J0Ll9idWlsZF9kcml2ZXIoKQot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYXJncywgWyctLWlvcy1zaW11bGF0b3InXSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFyZ3MsIFsnLS1zZGsnLCAnaXBob25lc2lt
dWxhdG9yJ10pCiAKICAgICBkZWYgdGVzdF9zZGtfbmFtZShzZWxmKToKICAgICAgICAgcG9ydCA9
IHNlbGYubWFrZV9wb3J0KCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2
ZXJfcHJvY2Vzcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
c2VydmVyX3Byb2Nlc3MucHkJKHJldmlzaW9uIDIxMDkzMCkKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAj
CiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dApAQCAtNTksNyArNjAsNyBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVj
dCk6CiAgICAgaW5kZWZpbml0ZWx5LiBUaGUgY2xhc3MgYWxzbyBoYW5kbGVzIHRyYW5zcGFyZW50
bHkgcmVzdGFydGluZyBwcm9jZXNzZXMKICAgICBhcyBuZWNlc3NhcnkgdG8ga2VlcCBpc3N1aW5n
IGNvbW1hbmRzLiIiIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBj
bWQsIGVudj1Ob25lLCB1bml2ZXJzYWxfbmV3bGluZXM9RmFsc2UsIHRyZWF0X25vX2RhdGFfYXNf
Y3Jhc2g9RmFsc2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X29iaiwgbmFtZSwgY21k
LCBlbnY9Tm9uZSwgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNlLCB0cmVhdF9ub19kYXRhX2FzX2Ny
YXNoPUZhbHNlLCB3b3JrZXJfbnVtYmVyPU5vbmUpOgogICAgICAgICBzZWxmLl9wb3J0ID0gcG9y
dF9vYmoKICAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUgICMgU2hvdWxkIGJlIHRoZSBjb21tYW5k
IG5hbWUgKGUuZy4gRHVtcFJlbmRlclRyZWUsIEltYWdlRGlmZikKICAgICAgICAgc2VsZi5fY21k
ID0gY21kCkBAIC0xMDMsNiArMTA0LDExIEBAIGNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToK
ICAgICBkZWYgcHJvY2Vzc19uYW1lKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQog
CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfc2V0X2ZpbGVfbm9uYmxvY2tpbmcoZmlsZSk6
CisgICAgICAgIGZsYWdzID0gZmNudGwuZmNudGwoZmlsZS5maWxlbm8oKSwgZmNudGwuRl9HRVRG
TCkKKyAgICAgICAgZmNudGwuZmNudGwoZmlsZS5maWxlbm8oKSwgZmNudGwuRl9TRVRGTCwgZmxh
Z3MgfCBvcy5PX05PTkJMT0NLKQorCiAgICAgZGVmIF9zdGFydChzZWxmKToKICAgICAgICAgaWYg
c2VsZi5fcHJvYzoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIiVzIGFscmVhZHkgcnVu
bmluZyIgJSBzZWxmLl9uYW1lKQpAQCAtMTE3LDEzICsxMjMsOSBAQCBjbGFzcyBTZXJ2ZXJQcm9j
ZXNzKG9iamVjdCk6CiAgICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGluZXM9c2VsZi5fdW5pdmVy
c2FsX25ld2xpbmVzKQogICAgICAgICBzZWxmLl9waWQgPSBzZWxmLl9wcm9jLnBpZAogICAgICAg
ICBzZWxmLl9wb3J0LmZpbmRfc3lzdGVtX3BpZChzZWxmLm5hbWUoKSwgc2VsZi5fcGlkKQotICAg
ICAgICBmZCA9IHNlbGYuX3Byb2Muc3Rkb3V0LmZpbGVubygpCiAgICAgICAgIGlmIG5vdCBzZWxm
Ll91c2Vfd2luMzJfYXBpczoKLSAgICAgICAgICAgIGZsID0gZmNudGwuZmNudGwoZmQsIGZjbnRs
LkZfR0VURkwpCi0gICAgICAgICAgICBmY250bC5mY250bChmZCwgZmNudGwuRl9TRVRGTCwgZmwg
fCBvcy5PX05PTkJMT0NLKQotICAgICAgICAgICAgZmQgPSBzZWxmLl9wcm9jLnN0ZGVyci5maWxl
bm8oKQotICAgICAgICAgICAgZmwgPSBmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGTCkKLSAg
ICAgICAgICAgIGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX1NFVEZMLCBmbCB8IG9zLk9fTk9OQkxP
Q0spCisgICAgICAgICAgICBzZWxmLl9zZXRfZmlsZV9ub25ibG9ja2luZyhzZWxmLl9wcm9jLnN0
ZG91dCkKKyAgICAgICAgICAgIHNlbGYuX3NldF9maWxlX25vbmJsb2NraW5nKHNlbGYuX3Byb2Mu
c3RkZXJyKQogCiAgICAgZGVmIF9oYW5kbGVfcG9zc2libGVfaW50ZXJydXB0KHNlbGYpOgogICAg
ICAgICAiIiJUaGlzIHJvdXRpbmUgY2hlY2tzIHRvIHNlZSBpZiB0aGUgcHJvY2VzcyBjcmFzaGVk
IG9yIGV4aXRlZApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9j
ZXNzX21vY2sucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3Nl
cnZlcl9wcm9jZXNzX21vY2sucHkJKHJldmlzaW9uIDIxMDkzMCkKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzc19tb2NrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw3ICsyOCw3IEBACiAKIAogY2xhc3MgTW9ja1NlcnZlclByb2Nlc3Mob2JqZWN0KToKLSAgICBk
ZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmo9Tm9uZSwgbmFtZT1Ob25lLCBjbWQ9Tm9uZSwgZW52
PU5vbmUsIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgbGluZXM9Tm9uZSwgY3Jhc2hlZD1GYWxz
ZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqPU5vbmUsIG5hbWU9Tm9uZSwgY21k
PU5vbmUsIGVudj1Ob25lLCB1bml2ZXJzYWxfbmV3bGluZXM9RmFsc2UsIGxpbmVzPU5vbmUsIGNy
YXNoZWQ9RmFsc2UsIHdvcmtlcl9udW1iZXI9Tm9uZSk6CiAgICAgICAgIHNlbGYudGltZWRfb3V0
ID0gRmFsc2UKICAgICAgICAgc2VsZi5saW5lcyA9IGxpbmVzIG9yIFtdCiAgICAgICAgIHNlbGYu
Y3Jhc2hlZCA9IGNyYXNoZWQKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zaW11
bGF0b3JfcHJvY2Vzcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvc2ltdWxhdG9yX3Byb2Nlc3MucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTMyIEBACisjIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
CisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1w
b3J0IGVycm5vCitpbXBvcnQgb3MKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCB0aW1lCisKK2Zyb20g
d2Via2l0cHkucG9ydC5zZXJ2ZXJfcHJvY2VzcyBpbXBvcnQgU2VydmVyUHJvY2VzcworZnJvbSB3
ZWJraXRweS54Y29kZS5zaW11bGF0b3IgaW1wb3J0IFNpbXVsYXRvcgorCisKK2NsYXNzIFNpbXVs
YXRvclByb2Nlc3MoU2VydmVyUHJvY2Vzcyk6CisKKyAgICBjbGFzcyBTaW11bGF0b3JQcm9jZXNz
UG9wZW4ob2JqZWN0KToKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcGlkLCBzdGRpbiwg
c3Rkb3V0LCBzdGRlcnIpOgorICAgICAgICAgICAgc2VsZi5zdGRpbiA9IHN0ZGluCisgICAgICAg
ICAgICBzZWxmLnN0ZG91dCA9IHN0ZG91dAorICAgICAgICAgICAgc2VsZi5zdGRlcnIgPSBzdGRl
cnIKKyAgICAgICAgICAgIHNlbGYucGlkID0gcGlkCisgICAgICAgICAgICBzZWxmLnJldHVybmNv
ZGUgPSBOb25lCisKKyAgICAgICAgZGVmIHBvbGwoc2VsZik6CisgICAgICAgICAgICBpZiBzZWxm
LnJldHVybmNvZGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYucmV0dXJuY29kZQorICAg
ICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLmtpbGwoc2VsZi5waWQsIDApCisgICAg
ICAgICAgICBleGNlcHQgT1NFcnJvciwgZXJyOgorICAgICAgICAgICAgICAgIGlmIGVyci5lcnJu
byA9PSBlcnJuby5FU1JDSDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0g
MQorICAgICAgICAgICAgICAgIGVsaWYgZXJyLmVycm5vICE9IGVycm5vLkVQRVJNOgorICAgICAg
ICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSAtMQorICAgICAgICAgICAgcmV0dXJuIHNl
bGYucmV0dXJuY29kZQorCisgICAgICAgIGRlZiB3YWl0KHNlbGYpOgorICAgICAgICAgICAgd2hp
bGUgbm90IHNlbGYucG9sbCgpOgorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoLjAxKQorICAg
ICAgICAgICAgcmV0dXJuIHNlbGYucmV0dXJuY29kZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVudj1Ob25lLCB1bml2ZXJzYWxfbmV3bGluZXM9RmFsc2Us
IHRyZWF0X25vX2RhdGFfYXNfY3Jhc2g9RmFsc2UsIHdvcmtlcl9udW1iZXI9Tm9uZSk6CisgICAg
ICAgIHNlbGYuX3NpbXVsYXRvcl9tYW5hZ2VyID0gU2ltdWxhdG9yKHBvcnRfb2JqLmhvc3QpCisK
KyAgICAgICAgc2VsZi5fYnVuZGxlX2lkID0gcG9ydF9vYmouYXBwX2lkZW50aWZpZXJfZnJvbV9i
dW5kbGUoY21kWzBdKQorICAgICAgICBzZWxmLl9kZXZpY2UgPSBzZWxmLl9zaW11bGF0b3JfbWFu
YWdlci5maW5kX2RldmljZV9ieV91ZGlkKHBvcnRfb2JqLmRldmljZV9pZF9mb3Jfd29ya2VyX251
bWJlcih3b3JrZXJfbnVtYmVyKSkKKyAgICAgICAgaWYgbm90IHNlbGYuX2RldmljZS5pbnN0YWxs
X2FwcChjbWRbMF0pOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJGYWlsZWQgdG8g
aW5zdGFsbCBhcHAge30gb24gZGV2aWNlIHt9Ii5mb3JtYXQoY21kWzBdLCBzZWxmLl9kZXZpY2Uu
dWRpZCkpCisgICAgICAgIGVudlsnSVBDX0lERU5USUZJRVInXSA9IHNlbGYuX2J1bmRsZV9pZCAr
ICItIiArIHNlbGYuX2RldmljZS51ZGlkCisKKyAgICAgICAgIyBUaGlzIGxvY2F0aW9uIG1hdGNo
ZXMgdGhlIGxvY2F0aW9uIHVzZWQgYnkgV2ViS2l0VGVzdFJ1bm5lciBhbmQgRHVtcFJlbmRlclRy
ZWUKKyAgICAgICAgIyBmb3IgdGhlIG90aGVyIHNpZGUgb2YgdGhlc2UgZmlmb3MuCisgICAgICAg
IGZpbGVfbG9jYXRpb24gPSAnL3RtcC8nICsgZW52WydJUENfSURFTlRJRklFUiddCisgICAgICAg
IHNlbGYuX2luX3BhdGggPSBmaWxlX2xvY2F0aW9uICsgJ19JTicKKyAgICAgICAgc2VsZi5fb3V0
X3BhdGggPSBmaWxlX2xvY2F0aW9uICsgJ19PVVQnCisgICAgICAgIHNlbGYuX2Vycm9yX3BhdGgg
PSBmaWxlX2xvY2F0aW9uICsgJ19FUlJPUicKKworICAgICAgICBzdXBlcihTaW11bGF0b3JQcm9j
ZXNzLCBzZWxmKS5fX2luaXRfXyhwb3J0X29iaiwgbmFtZSwgY21kLCBlbnYsIHVuaXZlcnNhbF9u
ZXdsaW5lcywgdHJlYXRfbm9fZGF0YV9hc19jcmFzaCkKKworICAgIGRlZiBfcmVzZXQoc2VsZik6
CisgICAgICAgIHN1cGVyKFNpbXVsYXRvclByb2Nlc3MsIHNlbGYpLl9yZXNldCgpCisKKyAgICAg
ICAgIyBVbmxpbmtzIGFyZSBuZWVkZWQgb24gcmVzZXQgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIFB5
dGhvbiBjb2RlIHVuZXhwZWN0ZWRseQorICAgICAgICAjIGZhaWxzIGJldHdlZW4gX3N0YXJ0KCkg
YW5kIGtpbGwoKS4gIFRoaXMgY2FuIGJlIGNhdXNlZCBieSBhIFNJR0tJTEwgb3IgYSBjcmFzaC4K
KyAgICAgICAgIyBUaGlzIGVuc3VyZXMgdGhhdCBvcy5ta2ZpZm8oKSB3aWxsIG5vdCBiZSBvYnN0
cnVjdGVkIGJ5IHByZXZpb3VzIGZpZm9zLgorICAgICAgICAjIE90aGVyIGZpbGVzIHdpbGwgc3Rp
bGwgY2F1c2Ugb3MubWtmaWZvKCkgdG8gZmFpbC4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
b3MudW5saW5rKHNlbGYuX2luX3BhdGgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBh
c3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MudW5saW5rKHNlbGYuX291dF9wYXRoKQor
ICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIG9zLnVubGluayhzZWxmLl9lcnJvcl9wYXRoKQorICAgICAgICBleGNlcHQ6CisgICAgICAg
ICAgICBwYXNzCisKKyAgICBkZWYgX3N0YXJ0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9wcm9j
OgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiJXMgYWxyZWFkeSBydW5uaW5nIiAlIHNl
bGYuX25hbWUpCisgICAgICAgIHNlbGYuX3Jlc2V0KCkKKyAgICAgICAgb3MubWtmaWZvKHNlbGYu
X2luX3BhdGgsIDA2MDApCisgICAgICAgIG9zLm1rZmlmbyhzZWxmLl9vdXRfcGF0aCwgMDYwMCkK
KyAgICAgICAgb3MubWtmaWZvKHNlbGYuX2Vycm9yX3BhdGgsIDA2MDApCisKKyAgICAgICAgc3Rk
b3V0ID0gb3MuZmRvcGVuKG9zLm9wZW4oc2VsZi5fb3V0X3BhdGgsIG9zLk9fUkRPTkxZIHwgb3Mu
T19OT05CTE9DSyksICdyYicpCisgICAgICAgIHN0ZGVyciA9IG9zLmZkb3Blbihvcy5vcGVuKHNl
bGYuX2Vycm9yX3BhdGgsIG9zLk9fUkRPTkxZIHwgb3MuT19OT05CTE9DSyksICdyYicpCisKKyAg
ICAgICAgc2VsZi5fcGlkID0gc2VsZi5fZGV2aWNlLmxhdW5jaF9hcHAoc2VsZi5fYnVuZGxlX2lk
LCBzZWxmLl9jbWRbMTpdLCBlbnY9c2VsZi5fZW52KQorICAgICAgICBpZiBub3Qgc2VsZi5fcGlk
OgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJGYWlsZWQgdG8gbGF1bmNoIGFwcCB7
fSBvbiBkZXZpY2Uge30iLmZvcm1hdChzZWxmLl9idW5kbGVfaWQsIHNlbGYuX2RldmljZS51ZGlk
KSkKKworICAgICAgICBkZWYgaGFuZGxlcihzaWdudW0sIGZyYW1lKToKKyAgICAgICAgICAgIGFz
c2VydCBzaWdudW0gPT0gc2lnbmFsLlNJR0FMUk0KKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3Io
IlRpbWVkIG91dCB3YWl0aW5nIGZvciBwcm9jZXNzIHRvIG9wZW4ge30iLmZvcm1hdChzZWxmLl9p
bl9wYXRoKSkKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgaGFuZGxlcikK
KyAgICAgICAgc2lnbmFsLmFsYXJtKDMpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN0ZGlu
ID0gb3BlbihzZWxmLl9pbl9wYXRoLCAndycsIDApICAjIE9wZW5pbmcgd2l0aCBubyBidWZmZXJp
bmcsIGxpa2UgcG9wZW4KKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc3RkaW4gPSBOb25l
CisgICAgICAgIHNpZ25hbC5hbGFybSgwKSAgIyBDYW5jZWwgYWxhcm0KKworICAgICAgICBzZWxm
Ll9wcm9jID0gU2ltdWxhdG9yUHJvY2Vzcy5TaW11bGF0b3JQcm9jZXNzUG9wZW4oc2VsZi5fcGlk
LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIpCisgICAgICAgIGlmIG5vdCBzdGRpbjoKKyAgICAgICAg
ICAgIHNlbGYua2lsbCgpICAjIFdpbGwgc2V0IHNlbGYuX3Byb2MgdG8gbm9uZQorICAgICAgICAg
ICAgcmFpc2UgUnVudGltZUVycm9yKCJzdGRpbiBmaWZvIGF0IHt9IGNvdWxkIG5vdCBiZSBvcGVu
ZWQiLmZvcm1hdChzZWxmLl9pbl9wYXRoKSkKKworICAgIGRlZiBfa2lsbChzZWxmKToKKyAgICAg
ICAgc2VsZi5fZGV2aWNlLnRlcm1pbmF0ZV9hcHAoc2VsZi5fYnVuZGxlX2lkKQorICAgICAgICBz
dXBlcihTaW11bGF0b3JQcm9jZXNzLCBzZWxmKS5fa2lsbCgpCkluZGV4OiBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvci5weQkocmV2aXNpb24gMjEwOTMwKQorKysgVG9vbHMv
U2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3IucHkJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDYgKzMwLDcgQEAgaW1wb3J0IHRpbWUKIAogZnJvbSB3ZWJraXRweS5iZW5jaG1hcmtfcnVubmVy
LnV0aWxzIGltcG9ydCB0aW1lb3V0CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0IGltcG9ydCBI
b3N0Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRF
cnJvcgogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKQEAgLTE2Nyw3ICsx
NjgsNyBAQCBjbGFzcyBEZXZpY2Uob2JqZWN0KToKICAgICBSZXByZXNlbnRzIGEgQ29yZVNpbXVs
YXRvciBkZXZpY2UgdW5kZXJuZWF0aCBhIHJ1bnRpbWUKICAgICAiIiIKIAotICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBuYW1lLCB1ZGlkLCBhdmFpbGFibGUsIHJ1bnRpbWUpOgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBuYW1lLCB1ZGlkLCBhdmFpbGFibGUsIHJ1bnRpbWUsIGhvc3Q9Tm9uZSk6CiAg
ICAgICAgICIiIgogICAgICAgICA6cGFyYW0gbmFtZTogVGhlIGRldmljZSBuYW1lCiAgICAgICAg
IDp0eXBlIG5hbWU6IHN0cgpAQCAtMTc4LDYgKzE3OSw3IEBAIGNsYXNzIERldmljZShvYmplY3Qp
OgogICAgICAgICA6cGFyYW0gcnVudGltZTogVGhlIGlPUyBTaW11bGF0b3IgcnVudGltZSB0aGF0
IGhvc3RzIHRoaXMgZGV2aWNlCiAgICAgICAgIDp0eXBlIHJ1bnRpbWU6IFJ1bnRpbWUKICAgICAg
ICAgIiIiCisgICAgICAgIHNlbGYuX2hvc3QgPSBob3N0IG9yIEhvc3QoKQogICAgICAgICBzZWxm
Lm5hbWUgPSBuYW1lCiAgICAgICAgIHNlbGYudWRpZCA9IHVkaWQKICAgICAgICAgc2VsZi5hdmFp
bGFibGUgPSBhdmFpbGFibGUKQEAgLTI2MCw2ICsyNjIsMzEgQEAgY2xhc3MgRGV2aWNlKG9iamVj
dCk6CiAgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjoKICAgICAg
ICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignInhjcnVuIHNpbWN0bCBlcmFzZSIgZmFpbGVkOiBk
ZXZpY2Ugc3RhdGUgaXMge30nLmZvcm1hdChTaW11bGF0b3IuZGV2aWNlX3N0YXRlKHVkaWQpKSkK
IAorICAgIGRlZiBpbnN0YWxsX2FwcChzZWxmLCBhcHBfcGF0aCk6CisgICAgICAgIHJldHVybiBu
b3Qgc2VsZi5faG9zdC5leGVjdXRpdmUucnVuX2NvbW1hbmQoWyd4Y3J1bicsICdzaW1jdGwnLCAn
aW5zdGFsbCcsIHNlbGYudWRpZCwgYXBwX3BhdGhdLCByZXR1cm5fZXhpdF9jb2RlPVRydWUpCisK
KyAgICBkZWYgbGF1bmNoX2FwcChzZWxmLCBidW5kbGVfaWRlbnRpZmllciwgYXJncywgZW52PU5v
bmUpOgorICAgICAgICBlbnZpcm9ubWVudF90b191c2UgPSB7fQorICAgICAgICBmb3IgdmFsdWUg
aW4gKGVudiBvciB7fSk6CisgICAgICAgICAgICBpZiBub3QgdmFsdWUuc3RhcnRzd2l0aCgiU0lN
Q1RMX0NISUxEXyIpOgorICAgICAgICAgICAgICAgIGVudmlyb25tZW50X3RvX3VzZVsnU0lNQ1RM
X0NISUxEXycgKyB2YWx1ZV0gPSBlbnZbdmFsdWVdCisgICAgICAgICAgICBlbnZpcm9ubWVudF90
b191c2VbdmFsdWVdID0gZW52W3ZhbHVlXQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91
dHB1dCA9IHNlbGYuX2hvc3QuZXhlY3V0aXZlLnJ1bl9jb21tYW5kKAorICAgICAgICAgICAgICAg
IFsneGNydW4nLCAnc2ltY3RsJywgJ2xhdW5jaCcsIHNlbGYudWRpZCwgYnVuZGxlX2lkZW50aWZp
ZXJdICsgYXJncywKKyAgICAgICAgICAgICAgICBlbnY9ZW52aXJvbm1lbnRfdG9fdXNlLAorICAg
ICAgICAgICAgKQorICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3I6CisgICAgICAgICAgICByZXR1
cm4gTm9uZQorCisgICAgICAgICMgT3V0cHV0IHNob3VsZCBiZTogIjxidW5kbGUgaWQ+OiA8cGlk
PiIKKyAgICAgICAgYXNzZXJ0IG91dHB1dC5zdGFydHN3aXRoKGJ1bmRsZV9pZGVudGlmaWVyICsg
IjogIikKKyAgICAgICAgcmV0dXJuIGludChvdXRwdXQucnN0cmlwKCdcbicpLnNwbGl0KCcgJylb
MV0pCisKKyAgICBkZWYgdGVybWluYXRlX2FwcChzZWxmLCBidW5kbGVfaWRlbnRpZmllcik6Cisg
ICAgICAgIHJldHVybiBub3Qgc2VsZi5faG9zdC5leGVjdXRpdmUucnVuX2NvbW1hbmQoWyd4Y3J1
bicsICdzaW1jdGwnLCAndGVybWluYXRlJywgc2VsZi51ZGlkLCBidW5kbGVfaWRlbnRpZmllcl0s
IHJldHVybl9leGl0X2NvZGU9VHJ1ZSkKKwogICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgog
ICAgICAgICByZXR1cm4gc2VsZi51ZGlkID09IG90aGVyLnVkaWQKIApAQCAtNDc3LDcgKzUwNCw4
IEBAIGNsYXNzIFNpbXVsYXRvcihvYmplY3QpOgogICAgICAgICAgICAgICAgIGRldmljZSA9IERl
dmljZShuYW1lPWRldmljZV9tYXRjaC5ncm91cCgnbmFtZScpLnJzdHJpcCgpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1ZGlkPWRldmljZV9tYXRjaC5ncm91cCgndWRpZCcpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGU9ZGV2aWNlX21hdGNoLmdy
b3VwKCdhdmFpbGFiaWxpdHknKSBpcyBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBydW50aW1lPWN1cnJlbnRfcnVudGltZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcnVudGltZT1jdXJyZW50X3J1bnRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhvc3Q9c2VsZi5faG9zdCkKICAgICAgICAgICAgICAgICBjdXJyZW50X3J1bnRpbWUu
ZGV2aWNlcy5hcHBlbmQoZGV2aWNlKQogCiAgICAgZGVmIGRldmljZV90eXBlKHNlbGYsIG5hbWU9
Tm9uZSwgaWRlbnRpZmllcj1Ob25lKToK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>299846</attachid>
            <date>2017-01-26 13:55:37 -0800</date>
            <delta_ts>2017-01-26 16:20:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165927-20170126135334.patch</filename>
            <type>text/plain</type>
            <size>29590</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMTE0MikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYwIEBACisyMDE3LTAxLTI2ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBSZW1vdmluZyBMYXlvdXRUZXN0UmVsYXkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTkyNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTGF5b3V0VGVzdFJlbGF5OiBSZW1vdmVk
IExheW91dFRlc3RSZWxheS4KKyAgICAgICAgKiBNYWtlZmlsZTogUmVtb3ZlZCBMYXlvdXRUZXN0
UmVsYXkgcmVmZXJlbmNlcy4KKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLXdlYmtpdDogUmVtb3Zl
ZCBMYXlvdXRUZXN0UmVsYXkgcmVmZXJlbmNlcy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3BvcnQvYmFzZS5weToKKyAgICAgICAgKFBvcnQuX19pbml0X18pOiBBZGRlZCBfdGVzdF9ydW5u
ZXJfcHJvY2Vzc19jb25zdHJ1Y3Rvci4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQv
ZGFyd2luLnB5OgorICAgICAgICAoRGFyd2luUG9ydC5hcHBfaWRlbnRpZmllcl9mcm9tX2J1bmRs
ZSk6IEFkZGVkIGZ1bmN0aW9uIHRvIGV4dHJhY3QgYnVuZGxlIElEIGZyb20gcGxpc3QuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weToKKyAgICAgICAgKERyaXZlci5f
c3RhcnQpOiBQYXNzIHdvcmtlcl9udW1iZXIgc2VydmVyX3Byb2Nlc3MuCisgICAgICAgIChJT1NT
aW11bGF0b3JEcml2ZXIpOiBEZWxldGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9y
dC9kcml2ZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChEcml2ZXJUZXN0LnRlc3Rfc3RvcF9jbGVh
bnNfdXBfcHJvcGVybHkpOiBTZXQgX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgZm9y
IHRlc3RpbmcuCisgICAgICAgIChEcml2ZXJUZXN0LnRlc3RfdHdvX3N0YXJ0c19jbGVhbnNfdXBf
cHJvcGVybHkpOiBEaXR0by4KKyAgICAgICAgKERyaXZlclRlc3QudGVzdF9zdGFydF9hY3R1YWxs
eV9zdGFydHMpOiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5
OgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydCk6IFJlbW92ZSByZWxheV9uYW1lLgorICAgICAg
ICAoSU9TU2ltdWxhdG9yUG9ydC5fX2luaXRfXyk6IFNldCBfdGVzdF9ydW5uZXJfcHJvY2Vzc19j
b25zdHJ1Y3RvciBmb3IgSU9TU2ltdWxhdG9ycy4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQu
X2NyZWF0ZV9zaW11bGF0b3JzKTogRm9ybWF0dGluZyBjaGFuZ2UuCisgICAgICAgIChJT1NTaW11
bGF0b3JQb3J0LnJlbGF5X3BhdGgpOiBEZWxldGVkLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9y
dC5fY2hlY2tfcmVsYXkpOiBVc2UgYmFzZSBjbGFzcy4KKyAgICAgICAgKElPU1NpbXVsYXRvclBv
cnQuX2NoZWNrX3BvcnRfYnVpbGQpOiBEZWxldGVkLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9y
dC5fYnVpbGRfcmVsYXkpOiBEZWxldGVkLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fYnVp
bGRfZHJpdmVyKTogRGVsZXRlZC4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX2RyaXZlcl9j
bGFzcyk6IFVzZSBiYXNlIGNsYXNzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9p
b3NfdW5pdHRlc3QucHk6CisgICAgICAgIChpb3NUZXN0LnRlc3RfMzJiaXQpOiBVcGRhdGUgdGVz
dC4KKyAgICAgICAgKGlvc1Rlc3QudGVzdF82NGJpdCk6IFVwZGF0ZSB0ZXN0LgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weToKKyAgICAgICAgKFNlcnZl
clByb2Nlc3MuX19pbml0X18pOiBBY2NlcHQgd29ya2VyX251bWJlci4KKyAgICAgICAgKFNlcnZl
clByb2Nlc3MuX3NldF9maWxlX25vbmJsb2NraW5nKTogQWRkZWQgdG8gc2hhcmUgY29tbW9uIGNv
ZGUuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLndyaXRlKTogRmx1c2ggYWZ0ZXIgd3JpdGluZy4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3NfbW9jay5weToK
KyAgICAgICAgKE1vY2tTZXJ2ZXJQcm9jZXNzLl9faW5pdF9fKTogQWNjZXB0IHdvcmtlcl9udW1i
ZXIuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNzLnB5
OiBBZGRlZC4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MpOiAKKyAgICAgICAgKFNpbXVsYXRv
clByb2Nlc3MuU2ltdWxhdG9yUHJvY2Vzc1BvcGVuKToKKyAgICAgICAgKFNpbXVsYXRvclByb2Nl
c3MuU2ltdWxhdG9yUHJvY2Vzc1BvcGVuLl9faW5pdF9fKTogU2V0LXVwIG9wZW4gc3RydWN0dXJl
IHdpdGggZW1wdHkgYXJndW1lbnRzLgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5TaW11bGF0
b3JQcm9jZXNzUG9wZW4ucG9sbCk6IENoZWNrIGlmIHRoZSBwcm9jZXNzIGlzIHJ1bm5pbmcuCisg
ICAgICAgIChTaW11bGF0b3JQcm9jZXNzLlNpbXVsYXRvclByb2Nlc3NQb3Blbi53YWl0KTogV2Fp
dCBmb3IgdGFyZ2V0IHByb2Nlc3MgdG8gY2xvc2UuCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNz
Ll9faW5pdF9fKTogSW5zdGFsbCBhcHAgdG8gZGV2aWNlLgorICAgICAgICAoU2ltdWxhdG9yUHJv
Y2Vzcy5fX3VubGlua19jaGVja19leGlzdHMpOiBVbmxpbmsgZmlsZSwgdGhyb3cgZXJyb3IgaWYg
dGhpcyBmYWlscy4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX3Jlc2V0KTogVW5saW5rIGZp
Zm9zLgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5fc3RhcnQpOiBMYXVuY2ggYXBwIG9uIHNp
bXVsYXRvciwgbGluayBmaWZvcy4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX2tpbGwpOiBT
aHV0ZG93biBhcHAgb24gc2ltdWxhdG9yCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS94Y29k
ZS9zaW11bGF0b3IucHk6CisgICAgICAgIChEZXZpY2UuX19pbml0X18pOiBBY2NlcHQgaG9zdCB0
byBydW4gaW5zdGFsbC9sYXVuY2gvdGVybWluYXRlLgorICAgICAgICAoRGV2aWNlLmluc3RhbGxf
YXBwKTogSW5zdGFsbCBhcHAgdG8gdGFyZ2V0IGRldmljZS4KKyAgICAgICAgKERldmljZS5sYXVu
Y2hfYXBwKTogTGF1bmNoIGFwcCBvbiB0YXJnZXQgZGV2aWNlLgorICAgICAgICAoRGV2aWNlLnRl
cm1pbmF0ZV9hcHApOiBTaHV0ZG93biBhcHAgb24gdGFyZ2V0IGRldmljZS4KKwogMjAxNy0wMS0y
NSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBjb2xsZWN0TWF0
Y2hpbmdFbGVtZW50c0luRmxhdFRyZWUgc2hvdWxkIG5vdCBmaW5kIGVsZW1lbnRzIGluc2lkZSBh
biB1c2VyIGFnZW50IHNoYWRvdyB0cmVlCkluZGV4OiBUb29scy9NYWtlZmlsZQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9NYWtlZmlsZQkocmV2aXNpb24gMjExMTQyKQorKysgVG9vbHMvTWFrZWZpbGUJ
KHdvcmtpbmcgY29weSkKQEAgLTcsOSArNyw2IEBAIGlmbmVxICgsJChTREtST09UKSkKIAlpZm5l
cSAoLCQoZmluZHN0cmluZyBpcGhvbmUsJChTREtST09UKSkpCiAJCU1PRFVMRVMgKz0gTW9iaWxl
TWluaUJyb3dzZXIKIAllbmRpZgotCWlmZXEgKCwkKERPX05PVF9CVUlMRF9MQVlPVVRfVEVTVF9S
RUxBWSkpCi0JCU1PRFVMRVMgKz0gTGF5b3V0VGVzdFJlbGF5Ci0JZW5kaWYKIGVuZGlmCiAKIGFs
bDoKSW5kZXg6IFRvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvYnVpbGQtd2Via2l0CShyZXZpc2lvbiAyMTExNDIpCisrKyBUb29scy9TY3JpcHRz
L2J1aWxkLXdlYmtpdAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDEwICsyMDAsNiBAQCBpZiAoaXNB
cHBsZU1hY1dlYktpdCgpKSB7CiAgICAgICAgIHB1c2ggQGNvcHlMaWJyYXJpZXNBcmdzLCBwcm9k
dWN0RGlyKCk7CiAgICAgICAgIHByaW50KGpvaW4oIiAiLCBAY29weUxpYnJhcmllc0FyZ3MpIC4g
IlxuIik7CiAgICAgICAgIChzeXN0ZW0oQGNvcHlMaWJyYXJpZXNBcmdzKSA9PSAwKSBvciBkaWU7
Ci0KLSAgICAgICAgaWYgKHdpbGxVc2VJT1NTaW11bGF0b3JTREsoKSkgewotICAgICAgICAgICAg
KHN5c3RlbSgicGVybCIsICJUb29scy9TY3JpcHRzL2J1aWxkLWxheW91dHRlc3RyZWxheSIsIGFy
Z3VtZW50c0ZvckNvbmZpZ3VyYXRpb24oKSkgPT0gMCkgb3IgZGllOwotICAgICAgICB9CiAgICAg
fQogCiAgICAgIyBCdWlsZCBUb29scyBuZWVkZWQgZm9yIEFwcGxlIHBvcnRzCkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQkocmV2aXNpb24gMjExMTQyKQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw2ICsxMzEs
NyBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgIHNlbGYuX3dlYl9wbGF0Zm9ybV90ZXN0
X3NlcnZlciA9IE5vbmUKICAgICAgICAgc2VsZi5faW1hZ2VfZGlmZmVyID0gTm9uZQogICAgICAg
ICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IHNlcnZlcl9wcm9jZXNzLlNlcnZl
clByb2Nlc3MgICMgb3ZlcnJpZGFibGUgZm9yIHRlc3RpbmcKKyAgICAgICAgc2VsZi5fdGVzdF9y
dW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IHNlcnZlcl9wcm9jZXNzLlNlcnZlclByb2Nlc3MK
IAogICAgICAgICBpZiBub3QgaGFzYXR0cihvcHRpb25zLCAnY29uZmlndXJhdGlvbicpIG9yIG5v
dCBvcHRpb25zLmNvbmZpZ3VyYXRpb246CiAgICAgICAgICAgICBzZWxmLnNldF9vcHRpb25fZGVm
YXVsdCgnY29uZmlndXJhdGlvbicsIHNlbGYuZGVmYXVsdF9jb25maWd1cmF0aW9uKCkpCkluZGV4
OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW4ucHkJKHJldmlzaW9uIDIxMTE0MikKKysr
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW4ucHkJKHdvcmtpbmcgY29weSkKQEAg
LTE3NCwzICsxNzQsMTEgQEAgY2xhc3MgRGFyd2luUG9ydChBcHBsZVBvcnQpOgogICAgICAgICBl
eGNlcHQgU2NyaXB0RXJyb3I6CiAgICAgICAgICAgICBfbG9nLndhcm4oInhjcnVuIGZhaWxlZDsg
ZmFsbGluZyBiYWNrIHRvICclcycuIiAlIGZhbGxiYWNrKQogICAgICAgICAgICAgcmV0dXJuIGZh
bGxiYWNrCisKKyAgICBkZWYgYXBwX2lkZW50aWZpZXJfZnJvbV9idW5kbGUoc2VsZiwgYXBwX2J1
bmRsZSk6CisgICAgICAgIHBsaXN0X3BhdGggPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oYXBwX2J1
bmRsZSwgJ0luZm8ucGxpc3QnKQorICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZXN5c3RlbS5leGlz
dHMocGxpc3RfcGF0aCk6CisgICAgICAgICAgICBwbGlzdF9wYXRoID0gc2VsZi5fZmlsZXN5c3Rl
bS5qb2luKGFwcF9idW5kbGUsICdDb250ZW50cy9JbmZvLnBsaXN0JykKKyAgICAgICAgaWYgbm90
IHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHBsaXN0X3BhdGgpOgorICAgICAgICAgICAgcmV0dXJu
IE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJy91c3Iv
bGliZXhlYy9QbGlzdEJ1ZGR5JywgJy1jJywgJ1ByaW50IENGQnVuZGxlSWRlbnRpZmllcicsIHBs
aXN0X3BhdGhdKS5yc3RyaXAoKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Ry
aXZlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVy
LnB5CShyZXZpc2lvbiAyMTExNDIpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJp
dmVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNyArMTM4LDcgQEAgY2xhc3MgRHJpdmVyKG9i
amVjdCk6CiAgICAgICAgIHNlbGYuX2RyaXZlcl91c2VyX2RpcmVjdG9yeV9zdWZmaXggPSBOb25l
CiAgICAgICAgIHNlbGYuX2RyaXZlcl91c2VyX2NhY2hlX2RpcmVjdG9yeSA9IE5vbmUKIAotICAg
ICAgICAjIFdlYktpdFRlc3RSdW5uZXIvTGF5b3V0VGVzdFJlbGF5IGNhbiByZXBvcnQgYmFjayBz
dWJwcm9jZXNzIGNyYXNoZXMgYnkgcHJpbnRpbmcKKyAgICAgICAgIyBXZWJLaXRUZXN0UnVubmVy
IGNhbiByZXBvcnQgYmFjayBzdWJwcm9jZXNzIGNyYXNoZXMgYnkgcHJpbnRpbmcKICAgICAgICAg
IyAiI0NSQVNIRUQgLSBQUk9DRVNTTkFNRSIuICBTaW5jZSB0aG9zZSBjYW4gaGFwcGVuIGF0IGFu
eSB0aW1lIGFuZCBTZXJ2ZXJQcm9jZXNzCiAgICAgICAgICMgd29uJ3QgYmUgYXdhcmUgb2YgdGhl
bSAoc2luY2UgdGhlIGFjdHVhbCB0b29sIGRpZG4ndCBjcmFzaCwganVzdCBhIHN1YnByb2Nlc3Mp
CiAgICAgICAgICMgd2UgcmVjb3JkIHRoZSBjcmFzaGVkIHN1YnByb2Nlc3MgbmFtZSBoZXJlLgpA
QCAtMzI3LDcgKzMyNyw2IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogCiAgICAgZGVmIF9zZXR1
cF9lbnZpcm9uX2Zvcl9kcml2ZXIoc2VsZiwgZW52aXJvbm1lbnQpOgogICAgICAgICBidWlsZF9y
b290X3BhdGggPSBzdHIoc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgpKQotICAgICAgICAjIEZJWE1F
OiBEWUxEXyogdmFyaWFibGVzIHNob3VsZCBiZSBNYWMtb25seS4gRXZlbiBpT1MgU2ltdWxhdG9y
IGRvZXNuJ3QgbmVlZCB0aGVtLCBhcyBMYXlvdXRUZXN0UmVsYXkgaXMgYSBob3N0IGJpbmFyeS4K
ICAgICAgICAgc2VsZi5fYXBwZW5kX2Vudmlyb25tZW50X3ZhcmlhYmxlX3BhdGgoZW52aXJvbm1l
bnQsICdEWUxEX0xJQlJBUllfUEFUSCcsIGJ1aWxkX3Jvb3RfcGF0aCkKICAgICAgICAgc2VsZi5f
YXBwZW5kX2Vudmlyb25tZW50X3ZhcmlhYmxlX3BhdGgoZW52aXJvbm1lbnQsICdfX1hQQ19EWUxE
X0xJQlJBUllfUEFUSCcsIGJ1aWxkX3Jvb3RfcGF0aCkKICAgICAgICAgc2VsZi5fYXBwZW5kX2Vu
dmlyb25tZW50X3ZhcmlhYmxlX3BhdGgoZW52aXJvbm1lbnQsICdEWUxEX0ZSQU1FV09SS19QQVRI
JywgYnVpbGRfcm9vdF9wYXRoKQpAQCAtMzY5LDcgKzM2OCw3IEBAIGNsYXNzIERyaXZlcihvYmpl
Y3QpOgogICAgICAgICBlbnZpcm9ubWVudCA9IHNlbGYuX3NldHVwX2Vudmlyb25fZm9yX3Rlc3Qo
KQogICAgICAgICBzZWxmLl9jcmFzaGVkX3Byb2Nlc3NfbmFtZSA9IE5vbmUKICAgICAgICAgc2Vs
Zi5fY3Jhc2hlZF9waWQgPSBOb25lCi0gICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzID0gc2Vs
Zi5fcG9ydC5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3Ioc2VsZi5fcG9ydCwgc2VsZi5fc2Vy
dmVyX25hbWUsIHNlbGYuY21kX2xpbmUocGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpLCBlbnZp
cm9ubWVudCkKKyAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3MgPSBzZWxmLl9wb3J0Ll90ZXN0
X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yKHNlbGYuX3BvcnQsIHNlbGYuX3NlcnZlcl9uYW1l
LCBzZWxmLmNtZF9saW5lKHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKSwgZW52aXJvbm1lbnQs
IHdvcmtlcl9udW1iZXI9c2VsZi5fd29ya2VyX251bWJlcikKICAgICAgICAgc2VsZi5fc2VydmVy
X3Byb2Nlc3Muc3RhcnQoKQogCiAgICAgZGVmIF9ydW5fcG9zdF9zdGFydF90YXNrcyhzZWxmKToK
QEAgLTYxMSwyNyArNjEwLDYgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgIHJldHVy
biBUcnVlCiAKIAotIyBGSVhNRTogdGhpcyBzaG91bGQgYmUgYWJzdHJhY3RlZCBvdXQgdmlhIHRo
ZSBQb3J0IHN1YmNsYXNzIHNvbWVob3cuCi1jbGFzcyBJT1NTaW11bGF0b3JEcml2ZXIoRHJpdmVy
KToKLSAgICBkZWYgY21kX2xpbmUoc2VsZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgot
ICAgICAgICBjbWQgPSBzdXBlcihJT1NTaW11bGF0b3JEcml2ZXIsIHNlbGYpLmNtZF9saW5lKHBp
eGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKQotICAgICAgICByZWxheV90b29sID0gc2VsZi5fcG9y
dC5yZWxheV9wYXRoCi0gICAgICAgIGR1bXBfdG9vbCA9IGNtZFswXQotICAgICAgICBkdW1wX3Rv
b2xfYXJncyA9IGNtZFsxOl0KLSAgICAgICAgcHJvZHVjdF9kaXIgPSBzZWxmLl9wb3J0Ll9idWls
ZF9wYXRoKCkKLSAgICAgICAgcmVsYXlfYXJncyA9IFsKLSAgICAgICAgICAgICctZGV2ZWxvcGVy
RGlyJywgc2VsZi5fcG9ydC5kZXZlbG9wZXJfZGlyLAotICAgICAgICAgICAgJy11ZGlkJywgc2Vs
Zi5fcG9ydC5kZXZpY2VfaWRfZm9yX3dvcmtlcl9udW1iZXIoc2VsZi5fd29ya2VyX251bWJlciks
Ci0gICAgICAgICAgICAnLXByb2R1Y3REaXInLCBwcm9kdWN0X2RpciwKLSAgICAgICAgICAgICct
YXBwJywgZHVtcF90b29sLAotICAgICAgICBdCi0gICAgICAgIHJldHVybiBbcmVsYXlfdG9vbF0g
KyByZWxheV9hcmdzICsgWyctLSddICsgZHVtcF90b29sX2FyZ3MKLQotICAgIGRlZiBfc2V0dXBf
ZW52aXJvbl9mb3JfZHJpdmVyKHNlbGYsIGVudmlyb25tZW50KToKLSAgICAgICAgZW52aXJvbm1l
bnRbJ0RFVkVMT1BFUl9ESVInXSA9IHNlbGYuX3BvcnQuZGV2ZWxvcGVyX2RpcgotICAgICAgICBy
ZXR1cm4gc3VwZXIoSU9TU2ltdWxhdG9yRHJpdmVyLCBzZWxmKS5fc2V0dXBfZW52aXJvbl9mb3Jf
ZHJpdmVyKGVudmlyb25tZW50KQotCi0KIGNsYXNzIENvbnRlbnRCbG9jayhvYmplY3QpOgogICAg
IGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgc2VsZi5jb250ZW50X3R5cGUgPSBOb25lCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyX3VuaXR0ZXN0LnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHkJ
KHJldmlzaW9uIDIxMTE0MikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJf
dW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTI2NCw3ICsyNjQsNyBAQCBjbGFzcyBEcml2
ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3N0b3BfY2xlYW5zX3Vw
X3Byb3Blcmx5KHNlbGYpOgogICAgICAgICBwb3J0ID0gVGVzdFdlYktpdFBvcnQoKQotICAgICAg
ICBwb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IE1vY2tTZXJ2ZXJQcm9jZXNzCisg
ICAgICAgIHBvcnQuX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVy
UHJvY2VzcwogICAgICAgICBkcml2ZXIgPSBEcml2ZXIocG9ydCwgMCwgcGl4ZWxfdGVzdHM9VHJ1
ZSkKICAgICAgICAgZHJpdmVyLnN0YXJ0KFRydWUsIFtdKQogICAgICAgICBsYXN0X3RtcGRpciA9
IHBvcnQuX2ZpbGVzeXN0ZW0ubGFzdF90bXBkaXIKQEAgLTI3NCw3ICsyNzQsNyBAQCBjbGFzcyBE
cml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3R3b19zdGFydHNf
Y2xlYW5zX3VwX3Byb3Blcmx5KHNlbGYpOgogICAgICAgICBwb3J0ID0gVGVzdFdlYktpdFBvcnQo
KQotICAgICAgICBwb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IE1vY2tTZXJ2ZXJQ
cm9jZXNzCisgICAgICAgIHBvcnQuX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBN
b2NrU2VydmVyUHJvY2VzcwogICAgICAgICBkcml2ZXIgPSBEcml2ZXIocG9ydCwgMCwgcGl4ZWxf
dGVzdHM9VHJ1ZSkKICAgICAgICAgZHJpdmVyLnN0YXJ0KFRydWUsIFtdKQogICAgICAgICBsYXN0
X3RtcGRpciA9IHBvcnQuX2ZpbGVzeXN0ZW0ubGFzdF90bXBkaXIKQEAgLTI4Myw3ICsyODMsNyBA
QCBjbGFzcyBEcml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3N0
YXJ0X2FjdHVhbGx5X3N0YXJ0cyhzZWxmKToKICAgICAgICAgcG9ydCA9IFRlc3RXZWJLaXRQb3J0
KCkKLSAgICAgICAgcG9ydC5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVy
UHJvY2VzcworICAgICAgICBwb3J0Ll90ZXN0X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0g
TW9ja1NlcnZlclByb2Nlc3MKICAgICAgICAgZHJpdmVyID0gRHJpdmVyKHBvcnQsIDAsIHBpeGVs
X3Rlc3RzPVRydWUpCiAgICAgICAgIGRyaXZlci5zdGFydChUcnVlLCBbXSkKICAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKGRyaXZlci5fc2VydmVyX3Byb2Nlc3Muc3RhcnRlZCkKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2lvcy5weQkocmV2aXNpb24gMjExMTQyKQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2lvcy5weQkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBm
cm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMudGVzdF9jCiBmcm9tIHdlYmtpdHB5LnBv
cnQgaW1wb3J0IGNvbmZpZyBhcyBwb3J0X2NvbmZpZwogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9y
dCBkcml2ZXIsIGltYWdlX2RpZmYKIGZyb20gd2Via2l0cHkucG9ydC5kYXJ3aW4gaW1wb3J0IERh
cndpblBvcnQKK2Zyb20gd2Via2l0cHkucG9ydC5zaW11bGF0b3JfcHJvY2VzcyBpbXBvcnQgU2lt
dWxhdG9yUHJvY2VzcwogZnJvbSB3ZWJraXRweS54Y29kZS5zaW11bGF0b3IgaW1wb3J0IFNpbXVs
YXRvciwgUnVudGltZSwgRGV2aWNlVHlwZQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmNy
YXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCiAKQEAgLTc4LDcgKzc5LDYgQEAgY2xhc3MgSU9TU2lt
dWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICBTREsgPSAnaXBob25lc2ltdWxhdG9yJwogCiAg
ICAgU0lNVUxBVE9SX0JVTkRMRV9JRCA9ICdjb20uYXBwbGUuaXBob25lc2ltdWxhdG9yJwotICAg
IHJlbGF5X25hbWUgPSAnTGF5b3V0VGVzdFJlbGF5JwogICAgIFNJTVVMQVRPUl9ESVJFQ1RPUlkg
PSAiL3RtcC9XZWJLaXRUZXN0aW5nU2ltdWxhdG9ycy8iCiAgICAgTFNSRUdJU1RFUl9QQVRIID0g
Ii9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NvcmVTZXJ2aWNlcy5mcmFtZXdvcmsvRnJhbWV3
b3Jrcy9MYXVuY2hTZXJ2aWNlcy5mcmFtZXdvcmsvVmVyc2lvbnMvQ3VycmVudC9TdXBwb3J0L2xz
cmVnaXN0ZXIiCiAgICAgUFJPQ0VTU19DT1VOVF9FU1RJTUFURV9QRVJfU0lNVUxBVE9SX0lOU1RB
TkNFID0gMTAwCkBAIC05Nyw2ICs5Nyw3IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2lu
UG9ydCk6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJn
cyk6CiAgICAgICAgIERhcndpblBvcnQuX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAq
Kmt3YXJncykKKyAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9
IFNpbXVsYXRvclByb2Nlc3MKIAogICAgICAgICBvcHRpb25hbF9kZXZpY2VfY2xhc3MgPSBzZWxm
LmdldF9vcHRpb24oJ2RldmljZV9jbGFzcycpCiAgICAgICAgIHNlbGYuX3ByaW50aW5nX2NtZF9s
aW5lID0gRmFsc2UKQEAgLTE0OCwxNiArMTQ5LDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChE
YXJ3aW5Qb3J0KToKICAgICAgICAgICAgIGRldmljZV90eXBlID0gRGV2aWNlVHlwZS5mcm9tX25h
bWUoZGV2aWNlX25hbWUpCiAgICAgICAgIHJldHVybiBkZXZpY2VfdHlwZQogCi0gICAgQHByb3Bl
cnR5Ci0gICAgQG1lbW9pemVkCi0gICAgZGVmIHJlbGF5X3BhdGgoc2VsZik6Ci0gICAgICAgIGlm
IHNlbGYuX3Jvb3Rfd2FzX3NldDoKLSAgICAgICAgICAgIHBhdGggPSBzZWxmLl9maWxlc3lzdGVt
LmFic3BhdGgoc2VsZi5nZXRfb3B0aW9uKCdyb290JykpCi0gICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICBtYWNfY29uZmlnID0gcG9ydF9jb25maWcuQ29uZmlnKHNlbGYuX2V4ZWN1dGl2ZSwgc2Vs
Zi5fZmlsZXN5c3RlbSwgJ21hYycpCi0gICAgICAgICAgICBwYXRoID0gbWFjX2NvbmZpZy5idWls
ZF9kaXJlY3Rvcnkoc2VsZi5nZXRfb3B0aW9uKCdjb25maWd1cmF0aW9uJykpCi0gICAgICAgIHJl
dHVybiBzZWxmLl9maWxlc3lzdGVtLmpvaW4ocGF0aCwgc2VsZi5yZWxheV9uYW1lKQotCiAgICAg
QG1lbW9pemVkCiAgICAgZGVmIGNoaWxkX3Byb2Nlc3NlcyhzZWxmKToKICAgICAgICAgcmV0dXJu
IGludChzZWxmLmdldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycpKQpAQCAtMTgyLDE5ICsxNzMs
NiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogCiAgICAgICAgIHJldHVy
biBtaW4obWF4aW11bV9zaW11bGF0b3JfY291bnRfb25fdGhpc19zeXN0ZW0sIGJlc3RfY2hpbGRf
cHJvY2Vzc19jb3VudF9mb3JfY3B1KQogCi0gICAgZGVmIF9jaGVja19yZWxheShzZWxmKToKLSAg
ICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHNlbGYucmVsYXlfcGF0aCk6Ci0g
ICAgICAgICAgICBfbG9nLmVycm9yKCIlcyB3YXMgbm90IGZvdW5kIGF0ICVzIiAlIChzZWxmLnJl
bGF5X25hbWUsIHNlbGYucmVsYXlfcGF0aCkpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAg
ICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBfY2hlY2tfcG9ydF9idWlsZChzZWxmKToKLSAg
ICAgICAgaWYgbm90IHNlbGYuX3Jvb3Rfd2FzX3NldCBhbmQgc2VsZi5nZXRfb3B0aW9uKCdidWls
ZCcpIGFuZCBub3Qgc2VsZi5fYnVpbGRfcmVsYXkoKToKLSAgICAgICAgICAgIHJldHVybiBGYWxz
ZQotICAgICAgICBpZiBub3Qgc2VsZi5fY2hlY2tfcmVsYXkoKToKLSAgICAgICAgICAgIHJldHVy
biBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1ZQotCiAgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNl
bGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49dGltZS50
aW1lLCBzbGVlcF9mbj10aW1lLnNsZWVwLCB3YWl0X2Zvcl9sb2c9VHJ1ZSk6CiAgICAgICAgIHRp
bWVfZm4gPSB0aW1lX2ZuIG9yIHRpbWUudGltZQogICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2Zu
IG9yIHRpbWUuc2xlZXAKQEAgLTIxNSw3ICsxOTMsNyBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0
KERhcndpblBvcnQpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9jcmFzaF9sb2coY3Jh
c2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZFswXSwgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVf
YW5kX3BpZFsxXSwgc3Rkb3V0LAogICAgICAgICAgICAgICAgICdcbicuam9pbihzdGRlcnJfbGlu
ZXMpLCBuZXdlcl90aGFuLCB0aW1lX2ZuLCBzbGVlcF9mbiwgd2FpdF9mb3JfbG9nKQogCi0gICAg
ICAgICMgTGF5b3V0VGVzdFJlbGF5IGNyYXNoZWQKKyAgICAgICAgIyBBcHAgY3Jhc2hlZAogICAg
ICAgICBfbG9nLmRlYnVnKCdsb29raW5nIGZvciBjcmFzaCBsb2cgZm9yICVzOiVzJyAlIChuYW1l
LCBzdHIocGlkKSkpCiAgICAgICAgIGNyYXNoX2xvZyA9ICcnCiAgICAgICAgIGNyYXNoX2xvZ3Mg
PSBDcmFzaExvZ3Moc2VsZi5ob3N0KQpAQCAtMjMzLDI1ICsyMTEsNiBAQCBjbGFzcyBJT1NTaW11
bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgICAgICAgICAgcmV0dXJuIHN0ZGVyciwgTm9uZQog
ICAgICAgICByZXR1cm4gc3RkZXJyLCBjcmFzaF9sb2cKIAotICAgIGRlZiBfYnVpbGRfcmVsYXko
c2VsZik6Ci0gICAgICAgIGVudmlyb25tZW50ID0gc2VsZi5ob3N0LmNvcHlfY3VycmVudF9lbnZp
cm9ubWVudCgpCi0gICAgICAgIGVudmlyb25tZW50LmRpc2FibGVfZ2NjX3NtYXJ0cXVvdGVzKCkK
LSAgICAgICAgZW52ID0gZW52aXJvbm1lbnQudG9fZGljdGlvbmFyeSgpCi0KLSAgICAgICAgdHJ5
OgotICAgICAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIGJlIHBhc3NpbmcgX2FyZ3VtZW50c19m
b3JfY29uZmlndXJhdGlvbigpLCB3aGljaCByZXNwZWN0cyBidWlsZCBjb25maWd1cmF0aW9uIGFu
ZCBwb3J0LAotICAgICAgICAgICAgIyBpbnN0ZWFkIG9mIGhhcmRjb2RpbmcgLS1pb3Mtc2ltdWxh
dG9yLgotICAgICAgICAgICAgc2VsZi5fcnVuX3NjcmlwdCgiYnVpbGQtbGF5b3V0dGVzdHJlbGF5
IiwgYXJncz1bIi0taW9zLXNpbXVsYXRvciJdLCBlbnY9ZW52KQotICAgICAgICBleGNlcHQgU2Ny
aXB0RXJyb3IsIGU6Ci0gICAgICAgICAgICBfbG9nLmVycm9yKGUubWVzc2FnZV93aXRoX291dHB1
dChvdXRwdXRfbGltaXQ9Tm9uZSkpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAg
cmV0dXJuIFRydWUKLQotICAgIGRlZiBfYnVpbGRfZHJpdmVyKHNlbGYpOgotICAgICAgICBidWls
dF90b29sID0gc3VwZXIoSU9TU2ltdWxhdG9yUG9ydCwgc2VsZikuX2J1aWxkX2RyaXZlcigpCi0g
ICAgICAgIGJ1aWx0X3JlbGF5ID0gc2VsZi5fYnVpbGRfcmVsYXkoKQotICAgICAgICByZXR1cm4g
YnVpbHRfdG9vbCBhbmQgYnVpbHRfcmVsYXkKLQogICAgIGRlZiBfYnVpbGRfZHJpdmVyX2ZsYWdz
KHNlbGYpOgogICAgICAgICBhcmNocyA9IFsnQVJDSFM9aTM4NiddIGlmIHNlbGYuYXJjaGl0ZWN0
dXJlKCkgPT0gJ3g4NicgZWxzZSBbXQogICAgICAgICBzZGsgPSBbJy0tc2RrJywgJ2lwaG9uZXNp
bXVsYXRvciddCkBAIC0yNjQsOSArMjIzLDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3
aW5Qb3J0KToKICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucy5hcHBlbmQoVGVzdENvbmZp
Z3VyYXRpb24odmVyc2lvbj1zZWxmLl92ZXJzaW9uLCBhcmNoaXRlY3R1cmU9YXJjaGl0ZWN0dXJl
LCBidWlsZF90eXBlPWJ1aWxkX3R5cGUpKQogICAgICAgICByZXR1cm4gY29uZmlndXJhdGlvbnMK
IAotICAgIGRlZiBfZHJpdmVyX2NsYXNzKHNlbGYpOgotICAgICAgICByZXR1cm4gZHJpdmVyLklP
U1NpbXVsYXRvckRyaXZlcgotCiAgICAgZGVmIGRlZmF1bHRfYmFzZWxpbmVfc2VhcmNoX3BhdGgo
c2VsZik6CiAgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignd2Via2l0X3Rlc3RfcnVubmVyJyk6
CiAgICAgICAgICAgICBmYWxsYmFja19uYW1lcyA9IFtzZWxmLl93azJfcG9ydF9uYW1lKCldICsg
W3NlbGYucG9ydF9uYW1lXSArIFsnd2syJ10KQEAgLTI4MCw5ICsyMzYsOSBAQCBjbGFzcyBJT1NT
aW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogCiAgICAgZGVmIF9jcmVhdGVfc2ltdWxhdG9ycyhz
ZWxmKToKICAgICAgICAgaWYgKHNlbGYuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKSA8IHNlbGYu
Y2hpbGRfcHJvY2Vzc2VzKCkpOgotICAgICAgICAgICAgICAgIF9sb2cud2FybigiWW91IGhhdmUg
c3BlY2lmaWVkIHZlcnkgaGlnaCB2YWx1ZSh7MH0pIGZvciAtLWNoaWxkLXByb2Nlc3NlcyIuZm9y
bWF0KHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpKQotICAgICAgICAgICAgICAgIF9sb2cud2Fybigi
bWF4aW11bSBjaGlsZC1wcm9jZXNzZXMgd2hpY2ggY2FuIGJlIHN1cHBvcnRlZCBvbiB0aGlzIHN5
c3RlbSBhcmU6IHswfSIuZm9ybWF0KHNlbGYuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKSkpCi0g
ICAgICAgICAgICAgICAgX2xvZy53YXJuKCJUaGlzIGlzIHZlcnkgbGlrZWx5IHRvIGZhaWwuIikK
KyAgICAgICAgICAgIF9sb2cud2FybigiWW91IGhhdmUgc3BlY2lmaWVkIHZlcnkgaGlnaCB2YWx1
ZSh7MH0pIGZvciAtLWNoaWxkLXByb2Nlc3NlcyIuZm9ybWF0KHNlbGYuY2hpbGRfcHJvY2Vzc2Vz
KCkpKQorICAgICAgICAgICAgX2xvZy53YXJuKCJtYXhpbXVtIGNoaWxkLXByb2Nlc3NlcyB3aGlj
aCBjYW4gYmUgc3VwcG9ydGVkIG9uIHRoaXMgc3lzdGVtIGFyZTogezB9Ii5mb3JtYXQoc2VsZi5k
ZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcygpKSkKKyAgICAgICAgICAgIF9sb2cud2FybigiVGhpcyBp
cyB2ZXJ5IGxpa2VseSB0byBmYWlsLiIpCiAKICAgICAgICAgaWYgc2VsZi5fdXNpbmdfZGVkaWNh
dGVkX3NpbXVsYXRvcnMoKToKICAgICAgICAgICAgIHNlbGYuX2NyZWF0ZVNpbXVsYXRvckFwcHMo
KQpAQCAtNDEzLDcgKzM2OSw2IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6
CiAgICAgZGVmIF90ZXN0aW5nX2RldmljZShzZWxmLCBudW1iZXIpOgogICAgICAgICByZXR1cm4g
U2ltdWxhdG9yLmRldmljZV9udW1iZXIobnVtYmVyKQogCi0gICAgIyBUaGlzIGlzIG9ubHkgZXhw
b3NlZCBzbyB0aGF0IElPU1NpbXVsYXRvckRyaXZlciBjYW4gdXNlIGl0LgogICAgIGRlZiBkZXZp
Y2VfaWRfZm9yX3dvcmtlcl9udW1iZXIoc2VsZiwgbnVtYmVyKToKICAgICAgICAgaWYgc2VsZi5f
cHJpbnRpbmdfY21kX2xpbmU6CiAgICAgICAgICAgICByZXR1cm4gJzxkdW1teSBpZD4nCkluZGV4
OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3QucHkJKHJldmlzaW9u
IDIxMTE0MikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3QucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgY2xhc3MgaW9zVGVzdChkYXJ3aW5fdGVz
dGNhc2UuRGFyd2luVGVzdAogICAgICAgICBwb3J0Ll9ydW5fc2NyaXB0ID0gcnVuX3NjcmlwdAog
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuYXJjaGl0ZWN0dXJlKCksICd4ODYnKQogICAg
ICAgICBwb3J0Ll9idWlsZF9kcml2ZXIoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYu
YXJncywgWyctLWlvcy1zaW11bGF0b3InXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxm
LmFyZ3MsIFsnQVJDSFM9aTM4NicsICctLXNkaycsICdpcGhvbmVzaW11bGF0b3InXSkKIAogICAg
IGRlZiB0ZXN0XzY0Yml0KHNlbGYpOgogICAgICAgICAjIEFwcGxlIE1hYyBwb3J0IGlzIDY0LWJp
dCBieSBkZWZhdWx0CkBAIC04Miw3ICs4Miw3IEBAIGNsYXNzIGlvc1Rlc3QoZGFyd2luX3Rlc3Rj
YXNlLkRhcndpblRlc3QKIAogICAgICAgICBwb3J0Ll9ydW5fc2NyaXB0ID0gcnVuX3NjcmlwdAog
ICAgICAgICBwb3J0Ll9idWlsZF9kcml2ZXIoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNl
bGYuYXJncywgWyctLWlvcy1zaW11bGF0b3InXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz
ZWxmLmFyZ3MsIFsnLS1zZGsnLCAnaXBob25lc2ltdWxhdG9yJ10pCiAKICAgICBkZWYgdGVzdF9z
ZGtfbmFtZShzZWxmKToKICAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3MucHkJKHJldmlzaW9u
IDIxMTE0MikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5w
eQkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNTksNyArNjAs
NyBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6CiAgICAgaW5kZWZpbml0ZWx5LiBUaGUg
Y2xhc3MgYWxzbyBoYW5kbGVzIHRyYW5zcGFyZW50bHkgcmVzdGFydGluZyBwcm9jZXNzZXMKICAg
ICBhcyBuZWNlc3NhcnkgdG8ga2VlcCBpc3N1aW5nIGNvbW1hbmRzLiIiIgogCi0gICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVudj1Ob25lLCB1bml2ZXJzYWxfbmV3
bGluZXM9RmFsc2UsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2g9RmFsc2UpOgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBwb3J0X29iaiwgbmFtZSwgY21kLCBlbnY9Tm9uZSwgdW5pdmVyc2FsX25ld2xp
bmVzPUZhbHNlLCB0cmVhdF9ub19kYXRhX2FzX2NyYXNoPUZhbHNlLCB3b3JrZXJfbnVtYmVyPU5v
bmUpOgogICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydF9vYmoKICAgICAgICAgc2VsZi5fbmFtZSA9
IG5hbWUgICMgU2hvdWxkIGJlIHRoZSBjb21tYW5kIG5hbWUgKGUuZy4gRHVtcFJlbmRlclRyZWUs
IEltYWdlRGlmZikKICAgICAgICAgc2VsZi5fY21kID0gY21kCkBAIC0xMDMsNiArMTA0LDExIEBA
IGNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToKICAgICBkZWYgcHJvY2Vzc19uYW1lKHNlbGYp
OgogICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQogCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRl
ZiBfc2V0X2ZpbGVfbm9uYmxvY2tpbmcoZmlsZSk6CisgICAgICAgIGZsYWdzID0gZmNudGwuZmNu
dGwoZmlsZS5maWxlbm8oKSwgZmNudGwuRl9HRVRGTCkKKyAgICAgICAgZmNudGwuZmNudGwoZmls
ZS5maWxlbm8oKSwgZmNudGwuRl9TRVRGTCwgZmxhZ3MgfCBvcy5PX05PTkJMT0NLKQorCiAgICAg
ZGVmIF9zdGFydChzZWxmKToKICAgICAgICAgaWYgc2VsZi5fcHJvYzoKICAgICAgICAgICAgIHJh
aXNlIFZhbHVlRXJyb3IoIiVzIGFscmVhZHkgcnVubmluZyIgJSBzZWxmLl9uYW1lKQpAQCAtMTE3
LDEzICsxMjMsOSBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6CiAgICAgICAgICAgICB1
bml2ZXJzYWxfbmV3bGluZXM9c2VsZi5fdW5pdmVyc2FsX25ld2xpbmVzKQogICAgICAgICBzZWxm
Ll9waWQgPSBzZWxmLl9wcm9jLnBpZAogICAgICAgICBzZWxmLl9wb3J0LmZpbmRfc3lzdGVtX3Bp
ZChzZWxmLm5hbWUoKSwgc2VsZi5fcGlkKQotICAgICAgICBmZCA9IHNlbGYuX3Byb2Muc3Rkb3V0
LmZpbGVubygpCiAgICAgICAgIGlmIG5vdCBzZWxmLl91c2Vfd2luMzJfYXBpczoKLSAgICAgICAg
ICAgIGZsID0gZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkwpCi0gICAgICAgICAgICBmY250
bC5mY250bChmZCwgZmNudGwuRl9TRVRGTCwgZmwgfCBvcy5PX05PTkJMT0NLKQotICAgICAgICAg
ICAgZmQgPSBzZWxmLl9wcm9jLnN0ZGVyci5maWxlbm8oKQotICAgICAgICAgICAgZmwgPSBmY250
bC5mY250bChmZCwgZmNudGwuRl9HRVRGTCkKLSAgICAgICAgICAgIGZjbnRsLmZjbnRsKGZkLCBm
Y250bC5GX1NFVEZMLCBmbCB8IG9zLk9fTk9OQkxPQ0spCisgICAgICAgICAgICBzZWxmLl9zZXRf
ZmlsZV9ub25ibG9ja2luZyhzZWxmLl9wcm9jLnN0ZG91dCkKKyAgICAgICAgICAgIHNlbGYuX3Nl
dF9maWxlX25vbmJsb2NraW5nKHNlbGYuX3Byb2Muc3RkZXJyKQogCiAgICAgZGVmIF9oYW5kbGVf
cG9zc2libGVfaW50ZXJydXB0KHNlbGYpOgogICAgICAgICAiIiJUaGlzIHJvdXRpbmUgY2hlY2tz
IHRvIHNlZSBpZiB0aGUgcHJvY2VzcyBjcmFzaGVkIG9yIGV4aXRlZApJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzX21vY2sucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzX21vY2sucHkJKHJldmlz
aW9uIDIxMTE0MikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vz
c19tb2NrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKIAogY2xhc3MgTW9j
a1NlcnZlclByb2Nlc3Mob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmo9
Tm9uZSwgbmFtZT1Ob25lLCBjbWQ9Tm9uZSwgZW52PU5vbmUsIHVuaXZlcnNhbF9uZXdsaW5lcz1G
YWxzZSwgbGluZXM9Tm9uZSwgY3Jhc2hlZD1GYWxzZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IHBvcnRfb2JqPU5vbmUsIG5hbWU9Tm9uZSwgY21kPU5vbmUsIGVudj1Ob25lLCB1bml2ZXJzYWxf
bmV3bGluZXM9RmFsc2UsIGxpbmVzPU5vbmUsIGNyYXNoZWQ9RmFsc2UsIHdvcmtlcl9udW1iZXI9
Tm9uZSk6CiAgICAgICAgIHNlbGYudGltZWRfb3V0ID0gRmFsc2UKICAgICAgICAgc2VsZi5saW5l
cyA9IGxpbmVzIG9yIFtdCiAgICAgICAgIHNlbGYuY3Jhc2hlZCA9IGNyYXNoZWQKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zaW11bGF0b3JfcHJvY2Vzcy5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2ltdWxhdG9yX3Byb2Nlc3MucHkJKG5v
bmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9j
ZXNzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMyIEBACisjIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGVycm5vCitpbXBvcnQgb3MKK2ltcG9y
dCBzaWduYWwKK2ltcG9ydCB0aW1lCisKK2Zyb20gd2Via2l0cHkucG9ydC5zZXJ2ZXJfcHJvY2Vz
cyBpbXBvcnQgU2VydmVyUHJvY2VzcworZnJvbSB3ZWJraXRweS54Y29kZS5zaW11bGF0b3IgaW1w
b3J0IFNpbXVsYXRvcgorCisKK2NsYXNzIFNpbXVsYXRvclByb2Nlc3MoU2VydmVyUHJvY2Vzcyk6
CisKKyAgICBjbGFzcyBTaW11bGF0b3JQcm9jZXNzUG9wZW4ob2JqZWN0KToKKworICAgICAgICBk
ZWYgX19pbml0X18oc2VsZiwgcGlkLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIpOgorICAgICAgICAg
ICAgc2VsZi5zdGRpbiA9IHN0ZGluCisgICAgICAgICAgICBzZWxmLnN0ZG91dCA9IHN0ZG91dAor
ICAgICAgICAgICAgc2VsZi5zdGRlcnIgPSBzdGRlcnIKKyAgICAgICAgICAgIHNlbGYucGlkID0g
cGlkCisgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBOb25lCisKKyAgICAgICAgZGVmIHBv
bGwoc2VsZik6CisgICAgICAgICAgICBpZiBzZWxmLnJldHVybmNvZGU6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHNlbGYucmV0dXJuY29kZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAg
ICAgIG9zLmtpbGwoc2VsZi5waWQsIDApCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciwgZXJy
OgorICAgICAgICAgICAgICAgIGlmIGVyci5lcnJubyA9PSBlcnJuby5FU1JDSDoKKyAgICAgICAg
ICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gMQorICAgICAgICAgICAgICAgIGVsaWYgZXJy
LmVycm5vICE9IGVycm5vLkVQRVJNOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNv
ZGUgPSAtMQorICAgICAgICAgICAgcmV0dXJuIHNlbGYucmV0dXJuY29kZQorCisgICAgICAgIGRl
ZiB3YWl0KHNlbGYpOgorICAgICAgICAgICAgd2hpbGUgbm90IHNlbGYucG9sbCgpOgorICAgICAg
ICAgICAgICAgIHRpbWUuc2xlZXAoLjAxKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYucmV0dXJu
Y29kZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVudj1O
b25lLCB1bml2ZXJzYWxfbmV3bGluZXM9RmFsc2UsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2g9RmFs
c2UsIHdvcmtlcl9udW1iZXI9Tm9uZSk6CisgICAgICAgIHNlbGYuX3NpbXVsYXRvcl9tYW5hZ2Vy
ID0gU2ltdWxhdG9yKHBvcnRfb2JqLmhvc3QpCisKKyAgICAgICAgc2VsZi5fYnVuZGxlX2lkID0g
cG9ydF9vYmouYXBwX2lkZW50aWZpZXJfZnJvbV9idW5kbGUoY21kWzBdKQorICAgICAgICBzZWxm
Ll9kZXZpY2UgPSBzZWxmLl9zaW11bGF0b3JfbWFuYWdlci5maW5kX2RldmljZV9ieV91ZGlkKHBv
cnRfb2JqLmRldmljZV9pZF9mb3Jfd29ya2VyX251bWJlcih3b3JrZXJfbnVtYmVyKSkKKyAgICAg
ICAgaWYgbm90IHNlbGYuX2RldmljZS5pbnN0YWxsX2FwcChjbWRbMF0pOgorICAgICAgICAgICAg
cmFpc2UgUnVudGltZUVycm9yKCJGYWlsZWQgdG8gaW5zdGFsbCBhcHAge30gb24gZGV2aWNlIHt9
Ii5mb3JtYXQoY21kWzBdLCBzZWxmLl9kZXZpY2UudWRpZCkpCisgICAgICAgIGVudlsnSVBDX0lE
RU5USUZJRVInXSA9IHNlbGYuX2J1bmRsZV9pZCArICItIiArIHNlbGYuX2RldmljZS51ZGlkCisK
KyAgICAgICAgIyBUaGlzIGxvY2F0aW9uIG1hdGNoZXMgdGhlIGxvY2F0aW9uIHVzZWQgYnkgV2Vi
S2l0VGVzdFJ1bm5lciBhbmQgRHVtcFJlbmRlclRyZWUKKyAgICAgICAgIyBmb3IgdGhlIG90aGVy
IHNpZGUgb2YgdGhlc2UgZmlmb3MuCisgICAgICAgIGZpbGVfbG9jYXRpb24gPSAnL3RtcC8nICsg
ZW52WydJUENfSURFTlRJRklFUiddCisgICAgICAgIHNlbGYuX2luX3BhdGggPSBmaWxlX2xvY2F0
aW9uICsgJ19JTicKKyAgICAgICAgc2VsZi5fb3V0X3BhdGggPSBmaWxlX2xvY2F0aW9uICsgJ19P
VVQnCisgICAgICAgIHNlbGYuX2Vycm9yX3BhdGggPSBmaWxlX2xvY2F0aW9uICsgJ19FUlJPUicK
KworICAgICAgICBzdXBlcihTaW11bGF0b3JQcm9jZXNzLCBzZWxmKS5fX2luaXRfXyhwb3J0X29i
aiwgbmFtZSwgY21kLCBlbnYsIHVuaXZlcnNhbF9uZXdsaW5lcywgdHJlYXRfbm9fZGF0YV9hc19j
cmFzaCkKKworICAgIGRlZiBfcmVzZXQoc2VsZik6CisgICAgICAgIHN1cGVyKFNpbXVsYXRvclBy
b2Nlc3MsIHNlbGYpLl9yZXNldCgpCisKKyAgICAgICAgIyBVbmxpbmtzIGFyZSBuZWVkZWQgb24g
cmVzZXQgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIFB5dGhvbiBjb2RlIHVuZXhwZWN0ZWRseQorICAg
ICAgICAjIGZhaWxzIGJldHdlZW4gX3N0YXJ0KCkgYW5kIGtpbGwoKS4gIFRoaXMgY2FuIGJlIGNh
dXNlZCBieSBhIFNJR0tJTEwgb3IgYSBjcmFzaC4KKyAgICAgICAgIyBUaGlzIGVuc3VyZXMgdGhh
dCBvcy5ta2ZpZm8oKSB3aWxsIG5vdCBiZSBvYnN0cnVjdGVkIGJ5IHByZXZpb3VzIGZpZm9zLgor
ICAgICAgICAjIE90aGVyIGZpbGVzIHdpbGwgc3RpbGwgY2F1c2Ugb3MubWtmaWZvKCkgdG8gZmFp
bC4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MudW5saW5rKHNlbGYuX2luX3BhdGgpCisg
ICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgb3MudW5saW5rKHNlbGYuX291dF9wYXRoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAg
ICBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnVubGluayhzZWxmLl9lcnJvcl9w
YXRoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgX3N0YXJ0
KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9wcm9jOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVF
cnJvcigiJXMgYWxyZWFkeSBydW5uaW5nIiAlIHNlbGYuX25hbWUpCisgICAgICAgIHNlbGYuX3Jl
c2V0KCkKKyAgICAgICAgb3MubWtmaWZvKHNlbGYuX2luX3BhdGgsIDA2MDApCisgICAgICAgIG9z
Lm1rZmlmbyhzZWxmLl9vdXRfcGF0aCwgMDYwMCkKKyAgICAgICAgb3MubWtmaWZvKHNlbGYuX2Vy
cm9yX3BhdGgsIDA2MDApCisKKyAgICAgICAgc3Rkb3V0ID0gb3MuZmRvcGVuKG9zLm9wZW4oc2Vs
Zi5fb3V0X3BhdGgsIG9zLk9fUkRPTkxZIHwgb3MuT19OT05CTE9DSyksICdyYicpCisgICAgICAg
IHN0ZGVyciA9IG9zLmZkb3Blbihvcy5vcGVuKHNlbGYuX2Vycm9yX3BhdGgsIG9zLk9fUkRPTkxZ
IHwgb3MuT19OT05CTE9DSyksICdyYicpCisKKyAgICAgICAgc2VsZi5fcGlkID0gc2VsZi5fZGV2
aWNlLmxhdW5jaF9hcHAoc2VsZi5fYnVuZGxlX2lkLCBzZWxmLl9jbWRbMTpdLCBlbnY9c2VsZi5f
ZW52KQorICAgICAgICBpZiBub3Qgc2VsZi5fcGlkOgorICAgICAgICAgICAgcmFpc2UgUnVudGlt
ZUVycm9yKCJGYWlsZWQgdG8gbGF1bmNoIGFwcCB7fSBvbiBkZXZpY2Uge30iLmZvcm1hdChzZWxm
Ll9idW5kbGVfaWQsIHNlbGYuX2RldmljZS51ZGlkKSkKKworICAgICAgICBkZWYgaGFuZGxlcihz
aWdudW0sIGZyYW1lKToKKyAgICAgICAgICAgIGFzc2VydCBzaWdudW0gPT0gc2lnbmFsLlNJR0FM
Uk0KKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoIlRpbWVkIG91dCB3YWl0aW5nIGZvciBwcm9j
ZXNzIHRvIG9wZW4ge30iLmZvcm1hdChzZWxmLl9pbl9wYXRoKSkKKyAgICAgICAgc2lnbmFsLnNp
Z25hbChzaWduYWwuU0lHQUxSTSwgaGFuZGxlcikKKyAgICAgICAgc2lnbmFsLmFsYXJtKDMpCisg
ICAgICAgIHRyeToKKyAgICAgICAgICAgIHN0ZGluID0gb3BlbihzZWxmLl9pbl9wYXRoLCAndycs
IDApICAjIE9wZW5pbmcgd2l0aCBubyBidWZmZXJpbmcsIGxpa2UgcG9wZW4KKyAgICAgICAgZXhj
ZXB0OgorICAgICAgICAgICAgc3RkaW4gPSBOb25lCisgICAgICAgIHNpZ25hbC5hbGFybSgwKSAg
IyBDYW5jZWwgYWxhcm0KKworICAgICAgICBzZWxmLl9wcm9jID0gU2ltdWxhdG9yUHJvY2Vzcy5T
aW11bGF0b3JQcm9jZXNzUG9wZW4oc2VsZi5fcGlkLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIpCisg
ICAgICAgIGlmIG5vdCBzdGRpbjoKKyAgICAgICAgICAgIHNlbGYua2lsbCgpICAjIFdpbGwgc2V0
IHNlbGYuX3Byb2MgdG8gbm9uZQorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJzdGRp
biBmaWZvIGF0IHt9IGNvdWxkIG5vdCBiZSBvcGVuZWQiLmZvcm1hdChzZWxmLl9pbl9wYXRoKSkK
KworICAgIGRlZiBfa2lsbChzZWxmKToKKyAgICAgICAgc2VsZi5fZGV2aWNlLnRlcm1pbmF0ZV9h
cHAoc2VsZi5fYnVuZGxlX2lkKQorICAgICAgICBzdXBlcihTaW11bGF0b3JQcm9jZXNzLCBzZWxm
KS5fa2lsbCgpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvci5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvci5w
eQkocmV2aXNpb24gMjExMTQyKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11
bGF0b3IucHkJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAgaW1wb3J0IHRpbWUKIAog
ZnJvbSB3ZWJraXRweS5iZW5jaG1hcmtfcnVubmVyLnV0aWxzIGltcG9ydCB0aW1lb3V0CiBmcm9t
IHdlYmtpdHB5LmNvbW1vbi5ob3N0IGltcG9ydCBIb3N0Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5z
eXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgogCiBfbG9nID0gbG9nZ2luZy5nZXRM
b2dnZXIoX19uYW1lX18pCiAKQEAgLTE2Nyw3ICsxNjgsNyBAQCBjbGFzcyBEZXZpY2Uob2JqZWN0
KToKICAgICBSZXByZXNlbnRzIGEgQ29yZVNpbXVsYXRvciBkZXZpY2UgdW5kZXJuZWF0aCBhIHJ1
bnRpbWUKICAgICAiIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCB1ZGlkLCBhdmFp
bGFibGUsIHJ1bnRpbWUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCB1ZGlkLCBhdmFp
bGFibGUsIHJ1bnRpbWUsIGhvc3Q9Tm9uZSk6CiAgICAgICAgICIiIgogICAgICAgICA6cGFyYW0g
bmFtZTogVGhlIGRldmljZSBuYW1lCiAgICAgICAgIDp0eXBlIG5hbWU6IHN0cgpAQCAtMTc4LDYg
KzE3OSw3IEBAIGNsYXNzIERldmljZShvYmplY3QpOgogICAgICAgICA6cGFyYW0gcnVudGltZTog
VGhlIGlPUyBTaW11bGF0b3IgcnVudGltZSB0aGF0IGhvc3RzIHRoaXMgZGV2aWNlCiAgICAgICAg
IDp0eXBlIHJ1bnRpbWU6IFJ1bnRpbWUKICAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2hvc3Qg
PSBob3N0IG9yIEhvc3QoKQogICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICAgICAgIHNlbGYu
dWRpZCA9IHVkaWQKICAgICAgICAgc2VsZi5hdmFpbGFibGUgPSBhdmFpbGFibGUKQEAgLTI2MCw2
ICsyNjIsMzIgQEAgY2xhc3MgRGV2aWNlKG9iamVjdCk6CiAgICAgICAgIGV4Y2VwdCBzdWJwcm9j
ZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjoKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcign
InhjcnVuIHNpbWN0bCBlcmFzZSIgZmFpbGVkOiBkZXZpY2Ugc3RhdGUgaXMge30nLmZvcm1hdChT
aW11bGF0b3IuZGV2aWNlX3N0YXRlKHVkaWQpKSkKIAorICAgIGRlZiBpbnN0YWxsX2FwcChzZWxm
LCBhcHBfcGF0aCk6CisgICAgICAgIHJldHVybiBub3Qgc2VsZi5faG9zdC5leGVjdXRpdmUucnVu
X2NvbW1hbmQoWyd4Y3J1bicsICdzaW1jdGwnLCAnaW5zdGFsbCcsIHNlbGYudWRpZCwgYXBwX3Bh
dGhdLCByZXR1cm5fZXhpdF9jb2RlPVRydWUpCisKKyAgICBkZWYgbGF1bmNoX2FwcChzZWxmLCBi
dW5kbGVfaWRlbnRpZmllciwgYXJncywgZW52PU5vbmUpOgorICAgICAgICBlbnZpcm9ubWVudF90
b191c2UgPSB7fQorICAgICAgICBmb3IgdmFsdWUgaW4gKGVudiBvciB7fSk6CisgICAgICAgICAg
ICBpZiBub3QgdmFsdWUuc3RhcnRzd2l0aCgiU0lNQ1RMX0NISUxEXyIpOgorICAgICAgICAgICAg
ICAgIGVudmlyb25tZW50X3RvX3VzZVsnU0lNQ1RMX0NISUxEXycgKyB2YWx1ZV0gPSBlbnZbdmFs
dWVdCisgICAgICAgICAgICBlbnZpcm9ubWVudF90b191c2VbdmFsdWVdID0gZW52W3ZhbHVlXQor
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dHB1dCA9IHNlbGYuX2hvc3QuZXhlY3V0aXZl
LnJ1bl9jb21tYW5kKAorICAgICAgICAgICAgICAgIFsneGNydW4nLCAnc2ltY3RsJywgJ2xhdW5j
aCcsIHNlbGYudWRpZCwgYnVuZGxlX2lkZW50aWZpZXJdICsgYXJncywKKyAgICAgICAgICAgICAg
ICBlbnY9ZW52aXJvbm1lbnRfdG9fdXNlLAorICAgICAgICAgICAgKQorICAgICAgICBleGNlcHQg
U2NyaXB0RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICMgT3V0cHV0
IHNob3VsZCBiZTogIjxidW5kbGUgaWQ+OiA8cGlkPiIKKyAgICAgICAgaWYgbm90IG91dHB1dC5z
dGFydHN3aXRoKGJ1bmRsZV9pZGVudGlmaWVyICsgIjogIik6CisgICAgICAgICAgICByYWlzZSBS
dW50aW1lRXJyb3IoInNpbWN0bCBsYXVuY2ggb3V0cHV0IGRpZCBub3QgbWF0Y2ggdGhlIGV4cGVj
dGVkIG91dHB1dCwgYWx0aG91Z2ggdGhlIGNvbW1hbmQgc3VjY2VlZGVkLiIpCisgICAgICAgIHJl
dHVybiBpbnQob3V0cHV0LnJzdHJpcCgnXG4nKS5zcGxpdCgnICcpWzFdKQorCisgICAgZGVmIHRl
cm1pbmF0ZV9hcHAoc2VsZiwgYnVuZGxlX2lkZW50aWZpZXIpOgorICAgICAgICByZXR1cm4gbm90
IHNlbGYuX2hvc3QuZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsneGNydW4nLCAnc2ltY3RsJywgJ3Rl
cm1pbmF0ZScsIHNlbGYudWRpZCwgYnVuZGxlX2lkZW50aWZpZXJdLCByZXR1cm5fZXhpdF9jb2Rl
PVRydWUpCisKICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgICAgICAgcmV0dXJuIHNl
bGYudWRpZCA9PSBvdGhlci51ZGlkCiAKQEAgLTQ3Nyw3ICs1MDUsOCBAQCBjbGFzcyBTaW11bGF0
b3Iob2JqZWN0KToKICAgICAgICAgICAgICAgICBkZXZpY2UgPSBEZXZpY2UobmFtZT1kZXZpY2Vf
bWF0Y2guZ3JvdXAoJ25hbWUnKS5yc3RyaXAoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdWRpZD1kZXZpY2VfbWF0Y2guZ3JvdXAoJ3VkaWQnKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXZhaWxhYmxlPWRldmljZV9tYXRjaC5ncm91cCgnYXZhaWxhYmlsaXR5
JykgaXMgTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZT1jdXJy
ZW50X3J1bnRpbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWU9Y3Vy
cmVudF9ydW50aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0PXNlbGYu
X2hvc3QpCiAgICAgICAgICAgICAgICAgY3VycmVudF9ydW50aW1lLmRldmljZXMuYXBwZW5kKGRl
dmljZSkKIAogICAgIGRlZiBkZXZpY2VfdHlwZShzZWxmLCBuYW1lPU5vbmUsIGlkZW50aWZpZXI9
Tm9uZSk6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>299874</attachid>
            <date>2017-01-26 16:20:23 -0800</date>
            <delta_ts>2017-01-27 15:01:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165927-20170126161820.patch</filename>
            <type>text/plain</type>
            <size>29721</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMTE0MikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYwIEBACisyMDE3LTAxLTI2ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBSZW1vdmluZyBMYXlvdXRUZXN0UmVsYXkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTkyNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTGF5b3V0VGVzdFJlbGF5OiBSZW1vdmVk
IExheW91dFRlc3RSZWxheS4KKyAgICAgICAgKiBNYWtlZmlsZTogUmVtb3ZlZCBMYXlvdXRUZXN0
UmVsYXkgcmVmZXJlbmNlcy4KKyAgICAgICAgKiBTY3JpcHRzL2J1aWxkLXdlYmtpdDogUmVtb3Zl
ZCBMYXlvdXRUZXN0UmVsYXkgcmVmZXJlbmNlcy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3BvcnQvYmFzZS5weToKKyAgICAgICAgKFBvcnQuX19pbml0X18pOiBBZGRlZCBfdGVzdF9ydW5u
ZXJfcHJvY2Vzc19jb25zdHJ1Y3Rvci4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQv
ZGFyd2luLnB5OgorICAgICAgICAoRGFyd2luUG9ydC5hcHBfaWRlbnRpZmllcl9mcm9tX2J1bmRs
ZSk6IEFkZGVkIGZ1bmN0aW9uIHRvIGV4dHJhY3QgYnVuZGxlIElEIGZyb20gcGxpc3QuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weToKKyAgICAgICAgKERyaXZlci5f
c3RhcnQpOiBQYXNzIHdvcmtlcl9udW1iZXIgc2VydmVyX3Byb2Nlc3MuCisgICAgICAgIChJT1NT
aW11bGF0b3JEcml2ZXIpOiBEZWxldGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9y
dC9kcml2ZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChEcml2ZXJUZXN0LnRlc3Rfc3RvcF9jbGVh
bnNfdXBfcHJvcGVybHkpOiBTZXQgX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgZm9y
IHRlc3RpbmcuCisgICAgICAgIChEcml2ZXJUZXN0LnRlc3RfdHdvX3N0YXJ0c19jbGVhbnNfdXBf
cHJvcGVybHkpOiBEaXR0by4KKyAgICAgICAgKERyaXZlclRlc3QudGVzdF9zdGFydF9hY3R1YWxs
eV9zdGFydHMpOiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5
OgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydCk6IFJlbW92ZSByZWxheV9uYW1lLgorICAgICAg
ICAoSU9TU2ltdWxhdG9yUG9ydC5fX2luaXRfXyk6IFNldCBfdGVzdF9ydW5uZXJfcHJvY2Vzc19j
b25zdHJ1Y3RvciBmb3IgSU9TU2ltdWxhdG9ycy4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQu
X2NyZWF0ZV9zaW11bGF0b3JzKTogRm9ybWF0dGluZyBjaGFuZ2UuCisgICAgICAgIChJT1NTaW11
bGF0b3JQb3J0LnJlbGF5X3BhdGgpOiBEZWxldGVkLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9y
dC5fY2hlY2tfcmVsYXkpOiBVc2UgYmFzZSBjbGFzcy4KKyAgICAgICAgKElPU1NpbXVsYXRvclBv
cnQuX2NoZWNrX3BvcnRfYnVpbGQpOiBEZWxldGVkLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9y
dC5fYnVpbGRfcmVsYXkpOiBEZWxldGVkLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fYnVp
bGRfZHJpdmVyKTogRGVsZXRlZC4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX2RyaXZlcl9j
bGFzcyk6IFVzZSBiYXNlIGNsYXNzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9p
b3NfdW5pdHRlc3QucHk6CisgICAgICAgIChpb3NUZXN0LnRlc3RfMzJiaXQpOiBVcGRhdGUgdGVz
dC4KKyAgICAgICAgKGlvc1Rlc3QudGVzdF82NGJpdCk6IFVwZGF0ZSB0ZXN0LgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weToKKyAgICAgICAgKFNlcnZl
clByb2Nlc3MuX19pbml0X18pOiBBY2NlcHQgd29ya2VyX251bWJlci4KKyAgICAgICAgKFNlcnZl
clByb2Nlc3MuX3NldF9maWxlX25vbmJsb2NraW5nKTogQWRkZWQgdG8gc2hhcmUgY29tbW9uIGNv
ZGUuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLndyaXRlKTogRmx1c2ggYWZ0ZXIgd3JpdGluZy4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3NfbW9jay5weToK
KyAgICAgICAgKE1vY2tTZXJ2ZXJQcm9jZXNzLl9faW5pdF9fKTogQWNjZXB0IHdvcmtlcl9udW1i
ZXIuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNzLnB5
OiBBZGRlZC4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MpOiAKKyAgICAgICAgKFNpbXVsYXRv
clByb2Nlc3MuU2ltdWxhdG9yUHJvY2Vzc1BvcGVuKToKKyAgICAgICAgKFNpbXVsYXRvclByb2Nl
c3MuU2ltdWxhdG9yUHJvY2Vzc1BvcGVuLl9faW5pdF9fKTogU2V0LXVwIG9wZW4gc3RydWN0dXJl
IHdpdGggZW1wdHkgYXJndW1lbnRzLgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5TaW11bGF0
b3JQcm9jZXNzUG9wZW4ucG9sbCk6IENoZWNrIGlmIHRoZSBwcm9jZXNzIGlzIHJ1bm5pbmcuCisg
ICAgICAgIChTaW11bGF0b3JQcm9jZXNzLlNpbXVsYXRvclByb2Nlc3NQb3Blbi53YWl0KTogV2Fp
dCBmb3IgdGFyZ2V0IHByb2Nlc3MgdG8gY2xvc2UuCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNz
Ll9faW5pdF9fKTogSW5zdGFsbCBhcHAgdG8gZGV2aWNlLgorICAgICAgICAoU2ltdWxhdG9yUHJv
Y2Vzcy5fX3VubGlua19jaGVja19leGlzdHMpOiBVbmxpbmsgZmlsZSwgdGhyb3cgZXJyb3IgaWYg
dGhpcyBmYWlscy4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX3Jlc2V0KTogVW5saW5rIGZp
Zm9zLgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5fc3RhcnQpOiBMYXVuY2ggYXBwIG9uIHNp
bXVsYXRvciwgbGluayBmaWZvcy4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX2tpbGwpOiBT
aHV0ZG93biBhcHAgb24gc2ltdWxhdG9yCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS94Y29k
ZS9zaW11bGF0b3IucHk6CisgICAgICAgIChEZXZpY2UuX19pbml0X18pOiBBY2NlcHQgaG9zdCB0
byBydW4gaW5zdGFsbC9sYXVuY2gvdGVybWluYXRlLgorICAgICAgICAoRGV2aWNlLmluc3RhbGxf
YXBwKTogSW5zdGFsbCBhcHAgdG8gdGFyZ2V0IGRldmljZS4KKyAgICAgICAgKERldmljZS5sYXVu
Y2hfYXBwKTogTGF1bmNoIGFwcCBvbiB0YXJnZXQgZGV2aWNlLgorICAgICAgICAoRGV2aWNlLnRl
cm1pbmF0ZV9hcHApOiBTaHV0ZG93biBhcHAgb24gdGFyZ2V0IGRldmljZS4KKwogMjAxNy0wMS0y
NSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBjb2xsZWN0TWF0
Y2hpbmdFbGVtZW50c0luRmxhdFRyZWUgc2hvdWxkIG5vdCBmaW5kIGVsZW1lbnRzIGluc2lkZSBh
biB1c2VyIGFnZW50IHNoYWRvdyB0cmVlCkluZGV4OiBUb29scy9NYWtlZmlsZQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9NYWtlZmlsZQkocmV2aXNpb24gMjExMTQyKQorKysgVG9vbHMvTWFrZWZpbGUJ
KHdvcmtpbmcgY29weSkKQEAgLTcsOSArNyw2IEBAIGlmbmVxICgsJChTREtST09UKSkKIAlpZm5l
cSAoLCQoZmluZHN0cmluZyBpcGhvbmUsJChTREtST09UKSkpCiAJCU1PRFVMRVMgKz0gTW9iaWxl
TWluaUJyb3dzZXIKIAllbmRpZgotCWlmZXEgKCwkKERPX05PVF9CVUlMRF9MQVlPVVRfVEVTVF9S
RUxBWSkpCi0JCU1PRFVMRVMgKz0gTGF5b3V0VGVzdFJlbGF5Ci0JZW5kaWYKIGVuZGlmCiAKIGFs
bDoKSW5kZXg6IFRvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvYnVpbGQtd2Via2l0CShyZXZpc2lvbiAyMTExNDIpCisrKyBUb29scy9TY3JpcHRz
L2J1aWxkLXdlYmtpdAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDEwICsyMDAsNiBAQCBpZiAoaXNB
cHBsZU1hY1dlYktpdCgpKSB7CiAgICAgICAgIHB1c2ggQGNvcHlMaWJyYXJpZXNBcmdzLCBwcm9k
dWN0RGlyKCk7CiAgICAgICAgIHByaW50KGpvaW4oIiAiLCBAY29weUxpYnJhcmllc0FyZ3MpIC4g
IlxuIik7CiAgICAgICAgIChzeXN0ZW0oQGNvcHlMaWJyYXJpZXNBcmdzKSA9PSAwKSBvciBkaWU7
Ci0KLSAgICAgICAgaWYgKHdpbGxVc2VJT1NTaW11bGF0b3JTREsoKSkgewotICAgICAgICAgICAg
KHN5c3RlbSgicGVybCIsICJUb29scy9TY3JpcHRzL2J1aWxkLWxheW91dHRlc3RyZWxheSIsIGFy
Z3VtZW50c0ZvckNvbmZpZ3VyYXRpb24oKSkgPT0gMCkgb3IgZGllOwotICAgICAgICB9CiAgICAg
fQogCiAgICAgIyBCdWlsZCBUb29scyBuZWVkZWQgZm9yIEFwcGxlIHBvcnRzCkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQkocmV2aXNpb24gMjExMTQyKQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw2ICsxMzEs
NyBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgIHNlbGYuX3dlYl9wbGF0Zm9ybV90ZXN0
X3NlcnZlciA9IE5vbmUKICAgICAgICAgc2VsZi5faW1hZ2VfZGlmZmVyID0gTm9uZQogICAgICAg
ICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IHNlcnZlcl9wcm9jZXNzLlNlcnZl
clByb2Nlc3MgICMgb3ZlcnJpZGFibGUgZm9yIHRlc3RpbmcKKyAgICAgICAgc2VsZi5fdGVzdF9y
dW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IHNlcnZlcl9wcm9jZXNzLlNlcnZlclByb2Nlc3MK
IAogICAgICAgICBpZiBub3QgaGFzYXR0cihvcHRpb25zLCAnY29uZmlndXJhdGlvbicpIG9yIG5v
dCBvcHRpb25zLmNvbmZpZ3VyYXRpb246CiAgICAgICAgICAgICBzZWxmLnNldF9vcHRpb25fZGVm
YXVsdCgnY29uZmlndXJhdGlvbicsIHNlbGYuZGVmYXVsdF9jb25maWd1cmF0aW9uKCkpCkluZGV4
OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW4ucHkJKHJldmlzaW9uIDIxMTE0MikKKysr
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW4ucHkJKHdvcmtpbmcgY29weSkKQEAg
LTE3NCwzICsxNzQsMTEgQEAgY2xhc3MgRGFyd2luUG9ydChBcHBsZVBvcnQpOgogICAgICAgICBl
eGNlcHQgU2NyaXB0RXJyb3I6CiAgICAgICAgICAgICBfbG9nLndhcm4oInhjcnVuIGZhaWxlZDsg
ZmFsbGluZyBiYWNrIHRvICclcycuIiAlIGZhbGxiYWNrKQogICAgICAgICAgICAgcmV0dXJuIGZh
bGxiYWNrCisKKyAgICBkZWYgYXBwX2lkZW50aWZpZXJfZnJvbV9idW5kbGUoc2VsZiwgYXBwX2J1
bmRsZSk6CisgICAgICAgIHBsaXN0X3BhdGggPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oYXBwX2J1
bmRsZSwgJ0luZm8ucGxpc3QnKQorICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZXN5c3RlbS5leGlz
dHMocGxpc3RfcGF0aCk6CisgICAgICAgICAgICBwbGlzdF9wYXRoID0gc2VsZi5fZmlsZXN5c3Rl
bS5qb2luKGFwcF9idW5kbGUsICdDb250ZW50cycsICdJbmZvLnBsaXN0JykKKyAgICAgICAgaWYg
bm90IHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHBsaXN0X3BhdGgpOgorICAgICAgICAgICAgcmV0
dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJy91
c3IvbGliZXhlYy9QbGlzdEJ1ZGR5JywgJy1jJywgJ1ByaW50IENGQnVuZGxlSWRlbnRpZmllcics
IHBsaXN0X3BhdGhdKS5yc3RyaXAoKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2RyaXZlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJp
dmVyLnB5CShyZXZpc2lvbiAyMTExNDIpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
ZHJpdmVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNyArMTM4LDcgQEAgY2xhc3MgRHJpdmVy
KG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2RyaXZlcl91c2VyX2RpcmVjdG9yeV9zdWZmaXggPSBO
b25lCiAgICAgICAgIHNlbGYuX2RyaXZlcl91c2VyX2NhY2hlX2RpcmVjdG9yeSA9IE5vbmUKIAot
ICAgICAgICAjIFdlYktpdFRlc3RSdW5uZXIvTGF5b3V0VGVzdFJlbGF5IGNhbiByZXBvcnQgYmFj
ayBzdWJwcm9jZXNzIGNyYXNoZXMgYnkgcHJpbnRpbmcKKyAgICAgICAgIyBXZWJLaXRUZXN0UnVu
bmVyIGNhbiByZXBvcnQgYmFjayBzdWJwcm9jZXNzIGNyYXNoZXMgYnkgcHJpbnRpbmcKICAgICAg
ICAgIyAiI0NSQVNIRUQgLSBQUk9DRVNTTkFNRSIuICBTaW5jZSB0aG9zZSBjYW4gaGFwcGVuIGF0
IGFueSB0aW1lIGFuZCBTZXJ2ZXJQcm9jZXNzCiAgICAgICAgICMgd29uJ3QgYmUgYXdhcmUgb2Yg
dGhlbSAoc2luY2UgdGhlIGFjdHVhbCB0b29sIGRpZG4ndCBjcmFzaCwganVzdCBhIHN1YnByb2Nl
c3MpCiAgICAgICAgICMgd2UgcmVjb3JkIHRoZSBjcmFzaGVkIHN1YnByb2Nlc3MgbmFtZSBoZXJl
LgpAQCAtMzI3LDcgKzMyNyw2IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogCiAgICAgZGVmIF9z
ZXR1cF9lbnZpcm9uX2Zvcl9kcml2ZXIoc2VsZiwgZW52aXJvbm1lbnQpOgogICAgICAgICBidWls
ZF9yb290X3BhdGggPSBzdHIoc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgpKQotICAgICAgICAjIEZJ
WE1FOiBEWUxEXyogdmFyaWFibGVzIHNob3VsZCBiZSBNYWMtb25seS4gRXZlbiBpT1MgU2ltdWxh
dG9yIGRvZXNuJ3QgbmVlZCB0aGVtLCBhcyBMYXlvdXRUZXN0UmVsYXkgaXMgYSBob3N0IGJpbmFy
eS4KICAgICAgICAgc2VsZi5fYXBwZW5kX2Vudmlyb25tZW50X3ZhcmlhYmxlX3BhdGgoZW52aXJv
bm1lbnQsICdEWUxEX0xJQlJBUllfUEFUSCcsIGJ1aWxkX3Jvb3RfcGF0aCkKICAgICAgICAgc2Vs
Zi5fYXBwZW5kX2Vudmlyb25tZW50X3ZhcmlhYmxlX3BhdGgoZW52aXJvbm1lbnQsICdfX1hQQ19E
WUxEX0xJQlJBUllfUEFUSCcsIGJ1aWxkX3Jvb3RfcGF0aCkKICAgICAgICAgc2VsZi5fYXBwZW5k
X2Vudmlyb25tZW50X3ZhcmlhYmxlX3BhdGgoZW52aXJvbm1lbnQsICdEWUxEX0ZSQU1FV09SS19Q
QVRIJywgYnVpbGRfcm9vdF9wYXRoKQpAQCAtMzY5LDcgKzM2OCw3IEBAIGNsYXNzIERyaXZlcihv
YmplY3QpOgogICAgICAgICBlbnZpcm9ubWVudCA9IHNlbGYuX3NldHVwX2Vudmlyb25fZm9yX3Rl
c3QoKQogICAgICAgICBzZWxmLl9jcmFzaGVkX3Byb2Nlc3NfbmFtZSA9IE5vbmUKICAgICAgICAg
c2VsZi5fY3Jhc2hlZF9waWQgPSBOb25lCi0gICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzID0g
c2VsZi5fcG9ydC5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3Ioc2VsZi5fcG9ydCwgc2VsZi5f
c2VydmVyX25hbWUsIHNlbGYuY21kX2xpbmUocGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpLCBl
bnZpcm9ubWVudCkKKyAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3MgPSBzZWxmLl9wb3J0Ll90
ZXN0X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yKHNlbGYuX3BvcnQsIHNlbGYuX3NlcnZlcl9u
YW1lLCBzZWxmLmNtZF9saW5lKHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKSwgZW52aXJvbm1l
bnQsIHdvcmtlcl9udW1iZXI9c2VsZi5fd29ya2VyX251bWJlcikKICAgICAgICAgc2VsZi5fc2Vy
dmVyX3Byb2Nlc3Muc3RhcnQoKQogCiAgICAgZGVmIF9ydW5fcG9zdF9zdGFydF90YXNrcyhzZWxm
KToKQEAgLTYxMSwyNyArNjEwLDYgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgIHJl
dHVybiBUcnVlCiAKIAotIyBGSVhNRTogdGhpcyBzaG91bGQgYmUgYWJzdHJhY3RlZCBvdXQgdmlh
IHRoZSBQb3J0IHN1YmNsYXNzIHNvbWVob3cuCi1jbGFzcyBJT1NTaW11bGF0b3JEcml2ZXIoRHJp
dmVyKToKLSAgICBkZWYgY21kX2xpbmUoc2VsZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3Mp
OgotICAgICAgICBjbWQgPSBzdXBlcihJT1NTaW11bGF0b3JEcml2ZXIsIHNlbGYpLmNtZF9saW5l
KHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKQotICAgICAgICByZWxheV90b29sID0gc2VsZi5f
cG9ydC5yZWxheV9wYXRoCi0gICAgICAgIGR1bXBfdG9vbCA9IGNtZFswXQotICAgICAgICBkdW1w
X3Rvb2xfYXJncyA9IGNtZFsxOl0KLSAgICAgICAgcHJvZHVjdF9kaXIgPSBzZWxmLl9wb3J0Ll9i
dWlsZF9wYXRoKCkKLSAgICAgICAgcmVsYXlfYXJncyA9IFsKLSAgICAgICAgICAgICctZGV2ZWxv
cGVyRGlyJywgc2VsZi5fcG9ydC5kZXZlbG9wZXJfZGlyLAotICAgICAgICAgICAgJy11ZGlkJywg
c2VsZi5fcG9ydC5kZXZpY2VfaWRfZm9yX3dvcmtlcl9udW1iZXIoc2VsZi5fd29ya2VyX251bWJl
ciksCi0gICAgICAgICAgICAnLXByb2R1Y3REaXInLCBwcm9kdWN0X2RpciwKLSAgICAgICAgICAg
ICctYXBwJywgZHVtcF90b29sLAotICAgICAgICBdCi0gICAgICAgIHJldHVybiBbcmVsYXlfdG9v
bF0gKyByZWxheV9hcmdzICsgWyctLSddICsgZHVtcF90b29sX2FyZ3MKLQotICAgIGRlZiBfc2V0
dXBfZW52aXJvbl9mb3JfZHJpdmVyKHNlbGYsIGVudmlyb25tZW50KToKLSAgICAgICAgZW52aXJv
bm1lbnRbJ0RFVkVMT1BFUl9ESVInXSA9IHNlbGYuX3BvcnQuZGV2ZWxvcGVyX2RpcgotICAgICAg
ICByZXR1cm4gc3VwZXIoSU9TU2ltdWxhdG9yRHJpdmVyLCBzZWxmKS5fc2V0dXBfZW52aXJvbl9m
b3JfZHJpdmVyKGVudmlyb25tZW50KQotCi0KIGNsYXNzIENvbnRlbnRCbG9jayhvYmplY3QpOgog
ICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgc2VsZi5jb250ZW50X3R5cGUgPSBOb25l
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyX3VuaXR0ZXN0LnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3Qu
cHkJKHJldmlzaW9uIDIxMTE0MikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2
ZXJfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTI2NCw3ICsyNjQsNyBAQCBjbGFzcyBE
cml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3N0b3BfY2xlYW5z
X3VwX3Byb3Blcmx5KHNlbGYpOgogICAgICAgICBwb3J0ID0gVGVzdFdlYktpdFBvcnQoKQotICAg
ICAgICBwb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IE1vY2tTZXJ2ZXJQcm9jZXNz
CisgICAgICAgIHBvcnQuX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2Vy
dmVyUHJvY2VzcwogICAgICAgICBkcml2ZXIgPSBEcml2ZXIocG9ydCwgMCwgcGl4ZWxfdGVzdHM9
VHJ1ZSkKICAgICAgICAgZHJpdmVyLnN0YXJ0KFRydWUsIFtdKQogICAgICAgICBsYXN0X3RtcGRp
ciA9IHBvcnQuX2ZpbGVzeXN0ZW0ubGFzdF90bXBkaXIKQEAgLTI3NCw3ICsyNzQsNyBAQCBjbGFz
cyBEcml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3R3b19zdGFy
dHNfY2xlYW5zX3VwX3Byb3Blcmx5KHNlbGYpOgogICAgICAgICBwb3J0ID0gVGVzdFdlYktpdFBv
cnQoKQotICAgICAgICBwb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IE1vY2tTZXJ2
ZXJQcm9jZXNzCisgICAgICAgIHBvcnQuX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3Ig
PSBNb2NrU2VydmVyUHJvY2VzcwogICAgICAgICBkcml2ZXIgPSBEcml2ZXIocG9ydCwgMCwgcGl4
ZWxfdGVzdHM9VHJ1ZSkKICAgICAgICAgZHJpdmVyLnN0YXJ0KFRydWUsIFtdKQogICAgICAgICBs
YXN0X3RtcGRpciA9IHBvcnQuX2ZpbGVzeXN0ZW0ubGFzdF90bXBkaXIKQEAgLTI4Myw3ICsyODMs
NyBAQCBjbGFzcyBEcml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0
X3N0YXJ0X2FjdHVhbGx5X3N0YXJ0cyhzZWxmKToKICAgICAgICAgcG9ydCA9IFRlc3RXZWJLaXRQ
b3J0KCkKLSAgICAgICAgcG9ydC5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2Vy
dmVyUHJvY2VzcworICAgICAgICBwb3J0Ll90ZXN0X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9y
ID0gTW9ja1NlcnZlclByb2Nlc3MKICAgICAgICAgZHJpdmVyID0gRHJpdmVyKHBvcnQsIDAsIHBp
eGVsX3Rlc3RzPVRydWUpCiAgICAgICAgIGRyaXZlci5zdGFydChUcnVlLCBbXSkKICAgICAgICAg
c2VsZi5hc3NlcnRUcnVlKGRyaXZlci5fc2VydmVyX3Byb2Nlc3Muc3RhcnRlZCkKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQkocmV2aXNpb24gMjExMTQyKQorKysgVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBA
QCBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMudGVzdF9jCiBmcm9tIHdlYmtpdHB5
LnBvcnQgaW1wb3J0IGNvbmZpZyBhcyBwb3J0X2NvbmZpZwogZnJvbSB3ZWJraXRweS5wb3J0IGlt
cG9ydCBkcml2ZXIsIGltYWdlX2RpZmYKIGZyb20gd2Via2l0cHkucG9ydC5kYXJ3aW4gaW1wb3J0
IERhcndpblBvcnQKK2Zyb20gd2Via2l0cHkucG9ydC5zaW11bGF0b3JfcHJvY2VzcyBpbXBvcnQg
U2ltdWxhdG9yUHJvY2VzcwogZnJvbSB3ZWJraXRweS54Y29kZS5zaW11bGF0b3IgaW1wb3J0IFNp
bXVsYXRvciwgUnVudGltZSwgRGV2aWNlVHlwZQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVt
LmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCiAKQEAgLTc4LDcgKzc5LDYgQEAgY2xhc3MgSU9T
U2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICBTREsgPSAnaXBob25lc2ltdWxhdG9yJwog
CiAgICAgU0lNVUxBVE9SX0JVTkRMRV9JRCA9ICdjb20uYXBwbGUuaXBob25lc2ltdWxhdG9yJwot
ICAgIHJlbGF5X25hbWUgPSAnTGF5b3V0VGVzdFJlbGF5JwogICAgIFNJTVVMQVRPUl9ESVJFQ1RP
UlkgPSAiL3RtcC9XZWJLaXRUZXN0aW5nU2ltdWxhdG9ycy8iCiAgICAgTFNSRUdJU1RFUl9QQVRI
ID0gIi9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NvcmVTZXJ2aWNlcy5mcmFtZXdvcmsvRnJh
bWV3b3Jrcy9MYXVuY2hTZXJ2aWNlcy5mcmFtZXdvcmsvVmVyc2lvbnMvQ3VycmVudC9TdXBwb3J0
L2xzcmVnaXN0ZXIiCiAgICAgUFJPQ0VTU19DT1VOVF9FU1RJTUFURV9QRVJfU0lNVUxBVE9SX0lO
U1RBTkNFID0gMTAwCkBAIC05Nyw2ICs5Nyw3IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFy
d2luUG9ydCk6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3
YXJncyk6CiAgICAgICAgIERhcndpblBvcnQuX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1l
LCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3Rv
ciA9IFNpbXVsYXRvclByb2Nlc3MKIAogICAgICAgICBvcHRpb25hbF9kZXZpY2VfY2xhc3MgPSBz
ZWxmLmdldF9vcHRpb24oJ2RldmljZV9jbGFzcycpCiAgICAgICAgIHNlbGYuX3ByaW50aW5nX2Nt
ZF9saW5lID0gRmFsc2UKQEAgLTE0OCwxNiArMTQ5LDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9y
dChEYXJ3aW5Qb3J0KToKICAgICAgICAgICAgIGRldmljZV90eXBlID0gRGV2aWNlVHlwZS5mcm9t
X25hbWUoZGV2aWNlX25hbWUpCiAgICAgICAgIHJldHVybiBkZXZpY2VfdHlwZQogCi0gICAgQHBy
b3BlcnR5Ci0gICAgQG1lbW9pemVkCi0gICAgZGVmIHJlbGF5X3BhdGgoc2VsZik6Ci0gICAgICAg
IGlmIHNlbGYuX3Jvb3Rfd2FzX3NldDoKLSAgICAgICAgICAgIHBhdGggPSBzZWxmLl9maWxlc3lz
dGVtLmFic3BhdGgoc2VsZi5nZXRfb3B0aW9uKCdyb290JykpCi0gICAgICAgIGVsc2U6Ci0gICAg
ICAgICAgICBtYWNfY29uZmlnID0gcG9ydF9jb25maWcuQ29uZmlnKHNlbGYuX2V4ZWN1dGl2ZSwg
c2VsZi5fZmlsZXN5c3RlbSwgJ21hYycpCi0gICAgICAgICAgICBwYXRoID0gbWFjX2NvbmZpZy5i
dWlsZF9kaXJlY3Rvcnkoc2VsZi5nZXRfb3B0aW9uKCdjb25maWd1cmF0aW9uJykpCi0gICAgICAg
IHJldHVybiBzZWxmLl9maWxlc3lzdGVtLmpvaW4ocGF0aCwgc2VsZi5yZWxheV9uYW1lKQotCiAg
ICAgQG1lbW9pemVkCiAgICAgZGVmIGNoaWxkX3Byb2Nlc3NlcyhzZWxmKToKICAgICAgICAgcmV0
dXJuIGludChzZWxmLmdldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycpKQpAQCAtMTgyLDE5ICsx
NzMsNiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogCiAgICAgICAgIHJl
dHVybiBtaW4obWF4aW11bV9zaW11bGF0b3JfY291bnRfb25fdGhpc19zeXN0ZW0sIGJlc3RfY2hp
bGRfcHJvY2Vzc19jb3VudF9mb3JfY3B1KQogCi0gICAgZGVmIF9jaGVja19yZWxheShzZWxmKToK
LSAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHNlbGYucmVsYXlfcGF0aCk6
Ci0gICAgICAgICAgICBfbG9nLmVycm9yKCIlcyB3YXMgbm90IGZvdW5kIGF0ICVzIiAlIChzZWxm
LnJlbGF5X25hbWUsIHNlbGYucmVsYXlfcGF0aCkpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UK
LSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBfY2hlY2tfcG9ydF9idWlsZChzZWxmKToK
LSAgICAgICAgaWYgbm90IHNlbGYuX3Jvb3Rfd2FzX3NldCBhbmQgc2VsZi5nZXRfb3B0aW9uKCdi
dWlsZCcpIGFuZCBub3Qgc2VsZi5fYnVpbGRfcmVsYXkoKToKLSAgICAgICAgICAgIHJldHVybiBG
YWxzZQotICAgICAgICBpZiBub3Qgc2VsZi5fY2hlY2tfcmVsYXkoKToKLSAgICAgICAgICAgIHJl
dHVybiBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1ZQotCiAgICAgZGVmIF9nZXRfY3Jhc2hfbG9n
KHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49dGlt
ZS50aW1lLCBzbGVlcF9mbj10aW1lLnNsZWVwLCB3YWl0X2Zvcl9sb2c9VHJ1ZSk6CiAgICAgICAg
IHRpbWVfZm4gPSB0aW1lX2ZuIG9yIHRpbWUudGltZQogICAgICAgICBzbGVlcF9mbiA9IHNsZWVw
X2ZuIG9yIHRpbWUuc2xlZXAKQEAgLTIxNSw3ICsxOTMsNyBAQCBjbGFzcyBJT1NTaW11bGF0b3JQ
b3J0KERhcndpblBvcnQpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9jcmFzaF9sb2co
Y3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZFswXSwgY3Jhc2hlZF9zdWJwcm9jZXNzX25h
bWVfYW5kX3BpZFsxXSwgc3Rkb3V0LAogICAgICAgICAgICAgICAgICdcbicuam9pbihzdGRlcnJf
bGluZXMpLCBuZXdlcl90aGFuLCB0aW1lX2ZuLCBzbGVlcF9mbiwgd2FpdF9mb3JfbG9nKQogCi0g
ICAgICAgICMgTGF5b3V0VGVzdFJlbGF5IGNyYXNoZWQKKyAgICAgICAgIyBBcHAgY3Jhc2hlZAog
ICAgICAgICBfbG9nLmRlYnVnKCdsb29raW5nIGZvciBjcmFzaCBsb2cgZm9yICVzOiVzJyAlIChu
YW1lLCBzdHIocGlkKSkpCiAgICAgICAgIGNyYXNoX2xvZyA9ICcnCiAgICAgICAgIGNyYXNoX2xv
Z3MgPSBDcmFzaExvZ3Moc2VsZi5ob3N0KQpAQCAtMjMzLDI1ICsyMTEsNiBAQCBjbGFzcyBJT1NT
aW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgICAgICAgICAgcmV0dXJuIHN0ZGVyciwgTm9u
ZQogICAgICAgICByZXR1cm4gc3RkZXJyLCBjcmFzaF9sb2cKIAotICAgIGRlZiBfYnVpbGRfcmVs
YXkoc2VsZik6Ci0gICAgICAgIGVudmlyb25tZW50ID0gc2VsZi5ob3N0LmNvcHlfY3VycmVudF9l
bnZpcm9ubWVudCgpCi0gICAgICAgIGVudmlyb25tZW50LmRpc2FibGVfZ2NjX3NtYXJ0cXVvdGVz
KCkKLSAgICAgICAgZW52ID0gZW52aXJvbm1lbnQudG9fZGljdGlvbmFyeSgpCi0KLSAgICAgICAg
dHJ5OgotICAgICAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIGJlIHBhc3NpbmcgX2FyZ3VtZW50
c19mb3JfY29uZmlndXJhdGlvbigpLCB3aGljaCByZXNwZWN0cyBidWlsZCBjb25maWd1cmF0aW9u
IGFuZCBwb3J0LAotICAgICAgICAgICAgIyBpbnN0ZWFkIG9mIGhhcmRjb2RpbmcgLS1pb3Mtc2lt
dWxhdG9yLgotICAgICAgICAgICAgc2VsZi5fcnVuX3NjcmlwdCgiYnVpbGQtbGF5b3V0dGVzdHJl
bGF5IiwgYXJncz1bIi0taW9zLXNpbXVsYXRvciJdLCBlbnY9ZW52KQotICAgICAgICBleGNlcHQg
U2NyaXB0RXJyb3IsIGU6Ci0gICAgICAgICAgICBfbG9nLmVycm9yKGUubWVzc2FnZV93aXRoX291
dHB1dChvdXRwdXRfbGltaXQ9Tm9uZSkpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAg
ICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBfYnVpbGRfZHJpdmVyKHNlbGYpOgotICAgICAgICBi
dWlsdF90b29sID0gc3VwZXIoSU9TU2ltdWxhdG9yUG9ydCwgc2VsZikuX2J1aWxkX2RyaXZlcigp
Ci0gICAgICAgIGJ1aWx0X3JlbGF5ID0gc2VsZi5fYnVpbGRfcmVsYXkoKQotICAgICAgICByZXR1
cm4gYnVpbHRfdG9vbCBhbmQgYnVpbHRfcmVsYXkKLQogICAgIGRlZiBfYnVpbGRfZHJpdmVyX2Zs
YWdzKHNlbGYpOgogICAgICAgICBhcmNocyA9IFsnQVJDSFM9aTM4NiddIGlmIHNlbGYuYXJjaGl0
ZWN0dXJlKCkgPT0gJ3g4NicgZWxzZSBbXQogICAgICAgICBzZGsgPSBbJy0tc2RrJywgJ2lwaG9u
ZXNpbXVsYXRvciddCkBAIC0yNjQsOSArMjIzLDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChE
YXJ3aW5Qb3J0KToKICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucy5hcHBlbmQoVGVzdENv
bmZpZ3VyYXRpb24odmVyc2lvbj1zZWxmLl92ZXJzaW9uLCBhcmNoaXRlY3R1cmU9YXJjaGl0ZWN0
dXJlLCBidWlsZF90eXBlPWJ1aWxkX3R5cGUpKQogICAgICAgICByZXR1cm4gY29uZmlndXJhdGlv
bnMKIAotICAgIGRlZiBfZHJpdmVyX2NsYXNzKHNlbGYpOgotICAgICAgICByZXR1cm4gZHJpdmVy
LklPU1NpbXVsYXRvckRyaXZlcgotCiAgICAgZGVmIGRlZmF1bHRfYmFzZWxpbmVfc2VhcmNoX3Bh
dGgoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignd2Via2l0X3Rlc3RfcnVubmVy
Jyk6CiAgICAgICAgICAgICBmYWxsYmFja19uYW1lcyA9IFtzZWxmLl93azJfcG9ydF9uYW1lKCld
ICsgW3NlbGYucG9ydF9uYW1lXSArIFsnd2syJ10KQEAgLTI4MCw5ICsyMzYsOSBAQCBjbGFzcyBJ
T1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogCiAgICAgZGVmIF9jcmVhdGVfc2ltdWxhdG9y
cyhzZWxmKToKICAgICAgICAgaWYgKHNlbGYuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKSA8IHNl
bGYuY2hpbGRfcHJvY2Vzc2VzKCkpOgotICAgICAgICAgICAgICAgIF9sb2cud2FybigiWW91IGhh
dmUgc3BlY2lmaWVkIHZlcnkgaGlnaCB2YWx1ZSh7MH0pIGZvciAtLWNoaWxkLXByb2Nlc3NlcyIu
Zm9ybWF0KHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpKQotICAgICAgICAgICAgICAgIF9sb2cud2Fy
bigibWF4aW11bSBjaGlsZC1wcm9jZXNzZXMgd2hpY2ggY2FuIGJlIHN1cHBvcnRlZCBvbiB0aGlz
IHN5c3RlbSBhcmU6IHswfSIuZm9ybWF0KHNlbGYuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKSkp
Ci0gICAgICAgICAgICAgICAgX2xvZy53YXJuKCJUaGlzIGlzIHZlcnkgbGlrZWx5IHRvIGZhaWwu
IikKKyAgICAgICAgICAgIF9sb2cud2FybigiWW91IGhhdmUgc3BlY2lmaWVkIHZlcnkgaGlnaCB2
YWx1ZSh7MH0pIGZvciAtLWNoaWxkLXByb2Nlc3NlcyIuZm9ybWF0KHNlbGYuY2hpbGRfcHJvY2Vz
c2VzKCkpKQorICAgICAgICAgICAgX2xvZy53YXJuKCJtYXhpbXVtIGNoaWxkLXByb2Nlc3NlcyB3
aGljaCBjYW4gYmUgc3VwcG9ydGVkIG9uIHRoaXMgc3lzdGVtIGFyZTogezB9Ii5mb3JtYXQoc2Vs
Zi5kZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcygpKSkKKyAgICAgICAgICAgIF9sb2cud2FybigiVGhp
cyBpcyB2ZXJ5IGxpa2VseSB0byBmYWlsLiIpCiAKICAgICAgICAgaWYgc2VsZi5fdXNpbmdfZGVk
aWNhdGVkX3NpbXVsYXRvcnMoKToKICAgICAgICAgICAgIHNlbGYuX2NyZWF0ZVNpbXVsYXRvckFw
cHMoKQpAQCAtNDEzLDcgKzM2OSw2IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9y
dCk6CiAgICAgZGVmIF90ZXN0aW5nX2RldmljZShzZWxmLCBudW1iZXIpOgogICAgICAgICByZXR1
cm4gU2ltdWxhdG9yLmRldmljZV9udW1iZXIobnVtYmVyKQogCi0gICAgIyBUaGlzIGlzIG9ubHkg
ZXhwb3NlZCBzbyB0aGF0IElPU1NpbXVsYXRvckRyaXZlciBjYW4gdXNlIGl0LgogICAgIGRlZiBk
ZXZpY2VfaWRfZm9yX3dvcmtlcl9udW1iZXIoc2VsZiwgbnVtYmVyKToKICAgICAgICAgaWYgc2Vs
Zi5fcHJpbnRpbmdfY21kX2xpbmU6CiAgICAgICAgICAgICByZXR1cm4gJzxkdW1teSBpZD4nCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0LnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3QucHkJKHJldmlz
aW9uIDIxMTE0MikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3Qu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgY2xhc3MgaW9zVGVzdChkYXJ3aW5f
dGVzdGNhc2UuRGFyd2luVGVzdAogICAgICAgICBwb3J0Ll9ydW5fc2NyaXB0ID0gcnVuX3Njcmlw
dAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuYXJjaGl0ZWN0dXJlKCksICd4ODYnKQog
ICAgICAgICBwb3J0Ll9idWlsZF9kcml2ZXIoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNl
bGYuYXJncywgWyctLWlvcy1zaW11bGF0b3InXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz
ZWxmLmFyZ3MsIFsnQVJDSFM9aTM4NicsICctLXNkaycsICdpcGhvbmVzaW11bGF0b3InXSkKIAog
ICAgIGRlZiB0ZXN0XzY0Yml0KHNlbGYpOgogICAgICAgICAjIEFwcGxlIE1hYyBwb3J0IGlzIDY0
LWJpdCBieSBkZWZhdWx0CkBAIC04Miw3ICs4Miw3IEBAIGNsYXNzIGlvc1Rlc3QoZGFyd2luX3Rl
c3RjYXNlLkRhcndpblRlc3QKIAogICAgICAgICBwb3J0Ll9ydW5fc2NyaXB0ID0gcnVuX3Njcmlw
dAogICAgICAgICBwb3J0Ll9idWlsZF9kcml2ZXIoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHNlbGYuYXJncywgWyctLWlvcy1zaW11bGF0b3InXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChzZWxmLmFyZ3MsIFsnLS1zZGsnLCAnaXBob25lc2ltdWxhdG9yJ10pCiAKICAgICBkZWYgdGVz
dF9zZGtfbmFtZShzZWxmKToKICAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3MucHkJKHJldmlz
aW9uIDIxMTE0MikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vz
cy5weQkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNTksNyAr
NjAsNyBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6CiAgICAgaW5kZWZpbml0ZWx5LiBU
aGUgY2xhc3MgYWxzbyBoYW5kbGVzIHRyYW5zcGFyZW50bHkgcmVzdGFydGluZyBwcm9jZXNzZXMK
ICAgICBhcyBuZWNlc3NhcnkgdG8ga2VlcCBpc3N1aW5nIGNvbW1hbmRzLiIiIgogCi0gICAgZGVm
IF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVudj1Ob25lLCB1bml2ZXJzYWxf
bmV3bGluZXM9RmFsc2UsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2g9RmFsc2UpOgorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBwb3J0X29iaiwgbmFtZSwgY21kLCBlbnY9Tm9uZSwgdW5pdmVyc2FsX25l
d2xpbmVzPUZhbHNlLCB0cmVhdF9ub19kYXRhX2FzX2NyYXNoPUZhbHNlLCB3b3JrZXJfbnVtYmVy
PU5vbmUpOgogICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydF9vYmoKICAgICAgICAgc2VsZi5fbmFt
ZSA9IG5hbWUgICMgU2hvdWxkIGJlIHRoZSBjb21tYW5kIG5hbWUgKGUuZy4gRHVtcFJlbmRlclRy
ZWUsIEltYWdlRGlmZikKICAgICAgICAgc2VsZi5fY21kID0gY21kCkBAIC0xMDMsNiArMTA0LDEx
IEBAIGNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToKICAgICBkZWYgcHJvY2Vzc19uYW1lKHNl
bGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQogCisgICAgQHN0YXRpY21ldGhvZAorICAg
IGRlZiBfc2V0X2ZpbGVfbm9uYmxvY2tpbmcoZmlsZSk6CisgICAgICAgIGZsYWdzID0gZmNudGwu
ZmNudGwoZmlsZS5maWxlbm8oKSwgZmNudGwuRl9HRVRGTCkKKyAgICAgICAgZmNudGwuZmNudGwo
ZmlsZS5maWxlbm8oKSwgZmNudGwuRl9TRVRGTCwgZmxhZ3MgfCBvcy5PX05PTkJMT0NLKQorCiAg
ICAgZGVmIF9zdGFydChzZWxmKToKICAgICAgICAgaWYgc2VsZi5fcHJvYzoKICAgICAgICAgICAg
IHJhaXNlIFZhbHVlRXJyb3IoIiVzIGFscmVhZHkgcnVubmluZyIgJSBzZWxmLl9uYW1lKQpAQCAt
MTE3LDEzICsxMjMsOSBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6CiAgICAgICAgICAg
ICB1bml2ZXJzYWxfbmV3bGluZXM9c2VsZi5fdW5pdmVyc2FsX25ld2xpbmVzKQogICAgICAgICBz
ZWxmLl9waWQgPSBzZWxmLl9wcm9jLnBpZAogICAgICAgICBzZWxmLl9wb3J0LmZpbmRfc3lzdGVt
X3BpZChzZWxmLm5hbWUoKSwgc2VsZi5fcGlkKQotICAgICAgICBmZCA9IHNlbGYuX3Byb2Muc3Rk
b3V0LmZpbGVubygpCiAgICAgICAgIGlmIG5vdCBzZWxmLl91c2Vfd2luMzJfYXBpczoKLSAgICAg
ICAgICAgIGZsID0gZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkwpCi0gICAgICAgICAgICBm
Y250bC5mY250bChmZCwgZmNudGwuRl9TRVRGTCwgZmwgfCBvcy5PX05PTkJMT0NLKQotICAgICAg
ICAgICAgZmQgPSBzZWxmLl9wcm9jLnN0ZGVyci5maWxlbm8oKQotICAgICAgICAgICAgZmwgPSBm
Y250bC5mY250bChmZCwgZmNudGwuRl9HRVRGTCkKLSAgICAgICAgICAgIGZjbnRsLmZjbnRsKGZk
LCBmY250bC5GX1NFVEZMLCBmbCB8IG9zLk9fTk9OQkxPQ0spCisgICAgICAgICAgICBzZWxmLl9z
ZXRfZmlsZV9ub25ibG9ja2luZyhzZWxmLl9wcm9jLnN0ZG91dCkKKyAgICAgICAgICAgIHNlbGYu
X3NldF9maWxlX25vbmJsb2NraW5nKHNlbGYuX3Byb2Muc3RkZXJyKQogCiAgICAgZGVmIF9oYW5k
bGVfcG9zc2libGVfaW50ZXJydXB0KHNlbGYpOgogICAgICAgICAiIiJUaGlzIHJvdXRpbmUgY2hl
Y2tzIHRvIHNlZSBpZiB0aGUgcHJvY2VzcyBjcmFzaGVkIG9yIGV4aXRlZApJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzX21vY2sucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzX21vY2sucHkJKHJl
dmlzaW9uIDIxMTE0MikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJv
Y2Vzc19tb2NrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKIAogY2xhc3Mg
TW9ja1NlcnZlclByb2Nlc3Mob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9v
Ymo9Tm9uZSwgbmFtZT1Ob25lLCBjbWQ9Tm9uZSwgZW52PU5vbmUsIHVuaXZlcnNhbF9uZXdsaW5l
cz1GYWxzZSwgbGluZXM9Tm9uZSwgY3Jhc2hlZD1GYWxzZSk6CisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIHBvcnRfb2JqPU5vbmUsIG5hbWU9Tm9uZSwgY21kPU5vbmUsIGVudj1Ob25lLCB1bml2ZXJz
YWxfbmV3bGluZXM9RmFsc2UsIGxpbmVzPU5vbmUsIGNyYXNoZWQ9RmFsc2UsIHdvcmtlcl9udW1i
ZXI9Tm9uZSk6CiAgICAgICAgIHNlbGYudGltZWRfb3V0ID0gRmFsc2UKICAgICAgICAgc2VsZi5s
aW5lcyA9IGxpbmVzIG9yIFtdCiAgICAgICAgIHNlbGYuY3Jhc2hlZCA9IGNyYXNoZWQKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zaW11bGF0b3JfcHJvY2Vzcy5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2ltdWxhdG9yX3Byb2Nlc3MucHkJ
KG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9w
cm9jZXNzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM2IEBACisjIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisj
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGVycm5vCitpbXBvcnQgb3MKK2lt
cG9ydCBzaWduYWwKK2ltcG9ydCB0aW1lCisKK2Zyb20gd2Via2l0cHkucG9ydC5zZXJ2ZXJfcHJv
Y2VzcyBpbXBvcnQgU2VydmVyUHJvY2VzcworZnJvbSB3ZWJraXRweS54Y29kZS5zaW11bGF0b3Ig
aW1wb3J0IFNpbXVsYXRvcgorCisKK2NsYXNzIFNpbXVsYXRvclByb2Nlc3MoU2VydmVyUHJvY2Vz
cyk6CisKKyAgICBjbGFzcyBTaW11bGF0b3JQcm9jZXNzUG9wZW4ob2JqZWN0KToKKworICAgICAg
ICBkZWYgX19pbml0X18oc2VsZiwgcGlkLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIpOgorICAgICAg
ICAgICAgc2VsZi5zdGRpbiA9IHN0ZGluCisgICAgICAgICAgICBzZWxmLnN0ZG91dCA9IHN0ZG91
dAorICAgICAgICAgICAgc2VsZi5zdGRlcnIgPSBzdGRlcnIKKyAgICAgICAgICAgIHNlbGYucGlk
ID0gcGlkCisgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBOb25lCisKKyAgICAgICAgZGVm
IHBvbGwoc2VsZik6CisgICAgICAgICAgICBpZiBzZWxmLnJldHVybmNvZGU6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHNlbGYucmV0dXJuY29kZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgICAgIG9zLmtpbGwoc2VsZi5waWQsIDApCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciwg
ZXJyOgorICAgICAgICAgICAgICAgIGlmIGVyci5lcnJubyA9PSBlcnJuby5FU1JDSDoKKyAgICAg
ICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gMQorICAgICAgICAgICAgICAgIGVsaWYg
ZXJyLmVycm5vICE9IGVycm5vLkVQRVJNOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHVy
bmNvZGUgPSAtMQorICAgICAgICAgICAgcmV0dXJuIHNlbGYucmV0dXJuY29kZQorCisgICAgICAg
IGRlZiB3YWl0KHNlbGYpOgorICAgICAgICAgICAgd2hpbGUgbm90IHNlbGYucG9sbCgpOgorICAg
ICAgICAgICAgICAgIHRpbWUuc2xlZXAoLjAxKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYucmV0
dXJuY29kZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVu
dj1Ob25lLCB1bml2ZXJzYWxfbmV3bGluZXM9RmFsc2UsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2g9
RmFsc2UsIHdvcmtlcl9udW1iZXI9Tm9uZSk6CisgICAgICAgIHNlbGYuX3NpbXVsYXRvcl9tYW5h
Z2VyID0gU2ltdWxhdG9yKHBvcnRfb2JqLmhvc3QpCisKKyAgICAgICAgc2VsZi5fYnVuZGxlX2lk
ID0gcG9ydF9vYmouYXBwX2lkZW50aWZpZXJfZnJvbV9idW5kbGUoY21kWzBdKQorICAgICAgICBz
ZWxmLl9kZXZpY2UgPSBzZWxmLl9zaW11bGF0b3JfbWFuYWdlci5maW5kX2RldmljZV9ieV91ZGlk
KHBvcnRfb2JqLmRldmljZV9pZF9mb3Jfd29ya2VyX251bWJlcih3b3JrZXJfbnVtYmVyKSkKKyAg
ICAgICAgaWYgbm90IHNlbGYuX2RldmljZS5pbnN0YWxsX2FwcChjbWRbMF0pOgorICAgICAgICAg
ICAgcmFpc2UgUnVudGltZUVycm9yKCJGYWlsZWQgdG8gaW5zdGFsbCBhcHAge30gb24gZGV2aWNl
IHt9Ii5mb3JtYXQoY21kWzBdLCBzZWxmLl9kZXZpY2UudWRpZCkpCisgICAgICAgIGVudlsnSVBD
X0lERU5USUZJRVInXSA9IHNlbGYuX2J1bmRsZV9pZCArICItIiArIHNlbGYuX2RldmljZS51ZGlk
CisKKyAgICAgICAgIyBUaGlzIGxvY2F0aW9uIG1hdGNoZXMgdGhlIGxvY2F0aW9uIHVzZWQgYnkg
V2ViS2l0VGVzdFJ1bm5lciBhbmQgRHVtcFJlbmRlclRyZWUKKyAgICAgICAgIyBmb3IgdGhlIG90
aGVyIHNpZGUgb2YgdGhlc2UgZmlmb3MuCisgICAgICAgIGZpbGVfbG9jYXRpb24gPSAnL3RtcC8n
ICsgZW52WydJUENfSURFTlRJRklFUiddCisgICAgICAgIHNlbGYuX2luX3BhdGggPSBmaWxlX2xv
Y2F0aW9uICsgJ19JTicKKyAgICAgICAgc2VsZi5fb3V0X3BhdGggPSBmaWxlX2xvY2F0aW9uICsg
J19PVVQnCisgICAgICAgIHNlbGYuX2Vycm9yX3BhdGggPSBmaWxlX2xvY2F0aW9uICsgJ19FUlJP
UicKKworICAgICAgICBzdXBlcihTaW11bGF0b3JQcm9jZXNzLCBzZWxmKS5fX2luaXRfXyhwb3J0
X29iaiwgbmFtZSwgY21kLCBlbnYsIHVuaXZlcnNhbF9uZXdsaW5lcywgdHJlYXRfbm9fZGF0YV9h
c19jcmFzaCkKKworICAgIGRlZiBfcmVzZXQoc2VsZik6CisgICAgICAgIHN1cGVyKFNpbXVsYXRv
clByb2Nlc3MsIHNlbGYpLl9yZXNldCgpCisKKyAgICAgICAgIyBVbmxpbmtzIGFyZSBuZWVkZWQg
b24gcmVzZXQgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIFB5dGhvbiBjb2RlIHVuZXhwZWN0ZWRseQor
ICAgICAgICAjIGZhaWxzIGJldHdlZW4gX3N0YXJ0KCkgYW5kIGtpbGwoKS4gIFRoaXMgY2FuIGJl
IGNhdXNlZCBieSBhIFNJR0tJTEwgb3IgYSBjcmFzaC4KKyAgICAgICAgIyBUaGlzIGVuc3VyZXMg
dGhhdCBvcy5ta2ZpZm8oKSB3aWxsIG5vdCBiZSBvYnN0cnVjdGVkIGJ5IHByZXZpb3VzIGZpZm9z
LgorICAgICAgICAjIE90aGVyIGZpbGVzIHdpbGwgc3RpbGwgY2F1c2Ugb3MubWtmaWZvKCkgdG8g
ZmFpbC4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MudW5saW5rKHNlbGYuX2luX3BhdGgp
CisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgb3MudW5saW5rKHNlbGYuX291dF9wYXRoKQorICAgICAgICBleGNlcHQ6CisgICAgICAg
ICAgICBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnVubGluayhzZWxmLl9lcnJv
cl9wYXRoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgX3N0
YXJ0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9wcm9jOgorICAgICAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcigiJXMgYWxyZWFkeSBydW5uaW5nIiAlIHNlbGYuX25hbWUpCisgICAgICAgIHNlbGYu
X3Jlc2V0KCkKKworICAgICAgICBvcy5ta2ZpZm8oc2VsZi5faW5fcGF0aCwgMDYwMCkKKyAgICAg
ICAgb3MubWtmaWZvKHNlbGYuX291dF9wYXRoLCAwNjAwKQorICAgICAgICBvcy5ta2ZpZm8oc2Vs
Zi5fZXJyb3JfcGF0aCwgMDYwMCkKKworICAgICAgICBzdGRvdXQgPSBvcy5mZG9wZW4ob3Mub3Bl
bihzZWxmLl9vdXRfcGF0aCwgb3MuT19SRE9OTFkgfCBvcy5PX05PTkJMT0NLKSwgJ3JiJykKKyAg
ICAgICAgc3RkZXJyID0gb3MuZmRvcGVuKG9zLm9wZW4oc2VsZi5fZXJyb3JfcGF0aCwgb3MuT19S
RE9OTFkgfCBvcy5PX05PTkJMT0NLKSwgJ3JiJykKKworICAgICAgICBzZWxmLl9waWQgPSBzZWxm
Ll9kZXZpY2UubGF1bmNoX2FwcChzZWxmLl9idW5kbGVfaWQsIHNlbGYuX2NtZFsxOl0sIGVudj1z
ZWxmLl9lbnYpCisKKyAgICAgICAgZGVmIGhhbmRsZXIoc2lnbnVtLCBmcmFtZSk6CisgICAgICAg
ICAgICBhc3NlcnQgc2lnbnVtID09IHNpZ25hbC5TSUdBTFJNCisgICAgICAgICAgICByYWlzZSBF
eGNlcHRpb24oIlRpbWVkIG91dCB3YWl0aW5nIGZvciBwcm9jZXNzIHRvIG9wZW4ge30iLmZvcm1h
dChzZWxmLl9pbl9wYXRoKSkKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwg
aGFuZGxlcikKKyAgICAgICAgc2lnbmFsLmFsYXJtKDMpCisKKyAgICAgICAgc3RkaW4gPSBOb25l
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN0ZGluID0gb3BlbihzZWxmLl9pbl9wYXRoLCAn
dycsIDApICAjIE9wZW5pbmcgd2l0aCBubyBidWZmZXJpbmcsIGxpa2UgcG9wZW4KKyAgICAgICAg
ZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgc2VsZi5fcHJvYyA9IFNpbXVsYXRv
clByb2Nlc3MuU2ltdWxhdG9yUHJvY2Vzc1BvcGVuKHNlbGYuX3BpZCwgc3RkaW4sIHN0ZG91dCwg
c3RkZXJyKQorICAgICAgICAgICAgaWYgc2VsZi5fcHJvYy5wb2xsKCk6CisgICAgICAgICAgICAg
ICAgZSA9IEV4Y2VwdGlvbigiUHJvY2VzcyB7fSBjcmFzaGVkIGJlZm9yZSBzdGRpbiBjb3VsZCBi
ZSBhdHRhY2hlZCIuZm9ybWF0KHNlbGYuX3BpZCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgIHNlbGYuX2tpbGwoKQorICAgICAgICAgICAgc2VsZi5fcmVzZXQoKQorICAgICAg
ICAgICAgcmFpc2UgZQorICAgICAgICBzaWduYWwuYWxhcm0oMCkgICMgQ2FuY2VsIGFsYXJtCisK
KyAgICAgICAgc2VsZi5fcHJvYyA9IFNpbXVsYXRvclByb2Nlc3MuU2ltdWxhdG9yUHJvY2Vzc1Bv
cGVuKHNlbGYuX3BpZCwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyKQorCisgICAgZGVmIF9raWxsKHNl
bGYpOgorICAgICAgICBzZWxmLl9kZXZpY2UudGVybWluYXRlX2FwcChzZWxmLl9idW5kbGVfaWQp
CisgICAgICAgIHN1cGVyKFNpbXVsYXRvclByb2Nlc3MsIHNlbGYpLl9raWxsKCkKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5CShyZXZpc2lvbiAyMTExNDIp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvci5weQkod29ya2luZyBj
b3B5KQpAQCAtMzAsNiArMzAsNyBAQCBpbXBvcnQgdGltZQogCiBmcm9tIHdlYmtpdHB5LmJlbmNo
bWFya19ydW5uZXIudXRpbHMgaW1wb3J0IHRpbWVvdXQKIGZyb20gd2Via2l0cHkuY29tbW9uLmhv
c3QgaW1wb3J0IEhvc3QKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1w
b3J0IFNjcmlwdEVycm9yCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIApA
QCAtMTY3LDcgKzE2OCw3IEBAIGNsYXNzIERldmljZShvYmplY3QpOgogICAgIFJlcHJlc2VudHMg
YSBDb3JlU2ltdWxhdG9yIGRldmljZSB1bmRlcm5lYXRoIGEgcnVudGltZQogICAgICIiIgogCi0g
ICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHVkaWQsIGF2YWlsYWJsZSwgcnVudGltZSk6Cisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHVkaWQsIGF2YWlsYWJsZSwgcnVudGltZSwgaG9z
dCk6CiAgICAgICAgICIiIgogICAgICAgICA6cGFyYW0gbmFtZTogVGhlIGRldmljZSBuYW1lCiAg
ICAgICAgIDp0eXBlIG5hbWU6IHN0cgpAQCAtMTc3LDcgKzE3OCwxMCBAQCBjbGFzcyBEZXZpY2Uo
b2JqZWN0KToKICAgICAgICAgOnR5cGUgYXZhaWxhYmxlOiBib29sCiAgICAgICAgIDpwYXJhbSBy
dW50aW1lOiBUaGUgaU9TIFNpbXVsYXRvciBydW50aW1lIHRoYXQgaG9zdHMgdGhpcyBkZXZpY2UK
ICAgICAgICAgOnR5cGUgcnVudGltZTogUnVudGltZQorICAgICAgICA6cGFyYW0gaG9zdDogVGhl
IGhvc3Qgd2hpY2ggY2FuIHJ1biBjb21tYW5kIGxpbmUgY29tbWFuZHMKKyAgICAgICAgOnR5cGUg
aG9zdDogSG9zdAogICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5faG9zdCA9IGhvc3QKICAgICAg
ICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgICBzZWxmLnVkaWQgPSB1ZGlkCiAgICAgICAgIHNl
bGYuYXZhaWxhYmxlID0gYXZhaWxhYmxlCkBAIC0yNjAsNiArMjY0LDMwIEBAIGNsYXNzIERldmlj
ZShvYmplY3QpOgogICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3I6
CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJyJ4Y3J1biBzaW1jdGwgZXJhc2UiIGZh
aWxlZDogZGV2aWNlIHN0YXRlIGlzIHt9Jy5mb3JtYXQoU2ltdWxhdG9yLmRldmljZV9zdGF0ZSh1
ZGlkKSkpCiAKKyAgICBkZWYgaW5zdGFsbF9hcHAoc2VsZiwgYXBwX3BhdGgpOgorICAgICAgICBy
ZXR1cm4gbm90IHNlbGYuX2hvc3QuZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsneGNydW4nLCAnc2lt
Y3RsJywgJ2luc3RhbGwnLCBzZWxmLnVkaWQsIGFwcF9wYXRoXSwgcmV0dXJuX2V4aXRfY29kZT1U
cnVlKQorCisgICAgZGVmIGxhdW5jaF9hcHAoc2VsZiwgYnVuZGxlX2lkZW50aWZpZXIsIGFyZ3Ms
IGVudj1Ob25lKToKKyAgICAgICAgZW52aXJvbm1lbnRfdG9fdXNlID0ge30KKyAgICAgICAgZm9y
IHZhbHVlIGluIChlbnYgb3Ige30pOgorICAgICAgICAgICAgaWYgbm90IHZhbHVlLnN0YXJ0c3dp
dGgoJ1NJTUNUTF9DSElMRF8nKToKKyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudF90b191c2Vb
J1NJTUNUTF9DSElMRF8nICsgdmFsdWVdID0gZW52W3ZhbHVlXQorICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudF90b191c2VbdmFsdWVdID0gZW52W3ZhbHVlXQor
CisgICAgICAgIG91dHB1dCA9IHNlbGYuX2hvc3QuZXhlY3V0aXZlLnJ1bl9jb21tYW5kKAorICAg
ICAgICAgICAgWyd4Y3J1bicsICdzaW1jdGwnLCAnbGF1bmNoJywgc2VsZi51ZGlkLCBidW5kbGVf
aWRlbnRpZmllcl0gKyBhcmdzLAorICAgICAgICAgICAgZW52PWVudmlyb25tZW50X3RvX3VzZSwK
KyAgICAgICAgKQorCisgICAgICAgIG1hdGNoID0gcmUubWF0Y2gocicoP1A8YnVuZGxlPi4rKTog
KD9QPHBpZD5bMC05XSspXG4nLCBvdXRwdXQpCisgICAgICAgIGlmIG5vdCBtYXRjaCBvciBtYXRj
aC5ncm91cCgnYnVuZGxlJykgIT0gYnVuZGxlX2lkZW50aWZpZXI6CisgICAgICAgICAgICByYWlz
ZSBSdW50aW1lRXJyb3IoInNpbWN0bCBsYXVuY2ggb3V0cHV0IGRpZCBub3QgbWF0Y2ggdGhlIGV4
cGVjdGVkIG91dHB1dDogJzxidW5kbGUgaWQ+OiA8cGlkPicuICBSZWNlaXZlZDogJ3t9JyBpbnN0
ZWFkIi5mb3JtYXQob3V0cHV0KSkKKyAgICAgICAgcmV0dXJuIGludChtYXRjaC5ncm91cCgncGlk
JykpCisKKyAgICBkZWYgdGVybWluYXRlX2FwcChzZWxmLCBidW5kbGVfaWRlbnRpZmllcik6Cisg
ICAgICAgIHJldHVybiBub3Qgc2VsZi5faG9zdC5leGVjdXRpdmUucnVuX2NvbW1hbmQoWyd4Y3J1
bicsICdzaW1jdGwnLCAndGVybWluYXRlJywgc2VsZi51ZGlkLCBidW5kbGVfaWRlbnRpZmllcl0s
IHJldHVybl9leGl0X2NvZGU9VHJ1ZSkKKwogICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgog
ICAgICAgICByZXR1cm4gc2VsZi51ZGlkID09IG90aGVyLnVkaWQKIApAQCAtNDc3LDcgKzUwNSw4
IEBAIGNsYXNzIFNpbXVsYXRvcihvYmplY3QpOgogICAgICAgICAgICAgICAgIGRldmljZSA9IERl
dmljZShuYW1lPWRldmljZV9tYXRjaC5ncm91cCgnbmFtZScpLnJzdHJpcCgpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1ZGlkPWRldmljZV9tYXRjaC5ncm91cCgndWRpZCcpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGU9ZGV2aWNlX21hdGNoLmdy
b3VwKCdhdmFpbGFiaWxpdHknKSBpcyBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBydW50aW1lPWN1cnJlbnRfcnVudGltZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcnVudGltZT1jdXJyZW50X3J1bnRpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhvc3Q9c2VsZi5faG9zdCkKICAgICAgICAgICAgICAgICBjdXJyZW50X3J1bnRpbWUu
ZGV2aWNlcy5hcHBlbmQoZGV2aWNlKQogCiAgICAgZGVmIGRldmljZV90eXBlKHNlbGYsIG5hbWU9
Tm9uZSwgaWRlbnRpZmllcj1Ob25lKToK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>299965</attachid>
            <date>2017-01-27 15:00:39 -0800</date>
            <delta_ts>2017-01-27 17:22:55 -0800</delta_ts>
            <desc>Python replacement of LayoutTestRelay</desc>
            <filename>bug-165927-20170127145835.patch</filename>
            <type>text/plain</type>
            <size>28935</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMTE0MikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYwIEBACisyMDE3LTAxLTI3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXBsYWNlIExheW91dFRlc3RSZWxheSB3aXRoIHNpbWN0bAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1OTI3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIChQYXRjaCAxIG9mIDIpCisK
KyAgICAgICAgTGF5b3V0VGVzdFJlbGF5IHVzZXMgU1BJLCBzaW5jZSByZWNlbnQgdmVyc2lvbnMg
b2YgdGhlIGlPUyBTREsgYWxsb3cgZm9yIGluc3RhbGxpbmcgYXBwcyBvbiBzaW11bGF0b3JzIHRo
cm91Z2ggc2ltY3RsLCB1c2UgdGhpcyBmdW5jdGlvbmFsaXR5IGluc3RlYWQuCisKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weToKKyAgICAgICAgKFBvcnQuX19pbml0X18p
OiBBZGRlZCBfdGVzdF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3Rvci4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luLnB5OgorICAgICAgICAoRGFyd2luUG9ydC5hcHBfaWRl
bnRpZmllcl9mcm9tX2J1bmRsZSk6IEFkZGVkIGZ1bmN0aW9uIHRvIGV4dHJhY3QgYnVuZGxlIElE
IGZyb20gcGxpc3QuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weToK
KyAgICAgICAgKERyaXZlci5fc3RhcnQpOiBQYXNzIHdvcmtlcl9udW1iZXIgc2VydmVyX3Byb2Nl
c3MuCisgICAgICAgIChJT1NTaW11bGF0b3JEcml2ZXIpOiBEZWxldGVkLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChEcml2ZXJU
ZXN0LnRlc3Rfc3RvcF9jbGVhbnNfdXBfcHJvcGVybHkpOiBTZXQgX3Rlc3RfcnVubmVyX3Byb2Nl
c3NfY29uc3RydWN0b3IgZm9yIHRlc3RpbmcuCisgICAgICAgIChEcml2ZXJUZXN0LnRlc3RfdHdv
X3N0YXJ0c19jbGVhbnNfdXBfcHJvcGVybHkpOiBEaXR0by4KKyAgICAgICAgKERyaXZlclRlc3Qu
dGVzdF9zdGFydF9hY3R1YWxseV9zdGFydHMpOiBEaXR0by4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3BvcnQvaW9zLnB5OgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydCk6IFJlbW92ZSBy
ZWxheV9uYW1lLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fX2luaXRfXyk6IFNldCBfdGVz
dF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciBmb3IgSU9TU2ltdWxhdG9ycy4KKyAgICAgICAg
KElPU1NpbXVsYXRvclBvcnQuX2NyZWF0ZV9zaW11bGF0b3JzKTogRm9ybWF0dGluZyBjaGFuZ2Uu
CisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LnJlbGF5X3BhdGgpOiBEZWxldGVkLgorICAgICAg
ICAoSU9TU2ltdWxhdG9yUG9ydC5fY2hlY2tfcmVsYXkpOiBVc2UgYmFzZSBjbGFzcy4KKyAgICAg
ICAgKElPU1NpbXVsYXRvclBvcnQuX2NoZWNrX3BvcnRfYnVpbGQpOiBEZWxldGVkLgorICAgICAg
ICAoSU9TU2ltdWxhdG9yUG9ydC5fYnVpbGRfcmVsYXkpOiBEZWxldGVkLgorICAgICAgICAoSU9T
U2ltdWxhdG9yUG9ydC5fYnVpbGRfZHJpdmVyKTogRGVsZXRlZC4KKyAgICAgICAgKElPU1NpbXVs
YXRvclBvcnQuX2RyaXZlcl9jbGFzcyk6IFVzZSBiYXNlIGNsYXNzLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3QucHk6CisgICAgICAgIChpb3NUZXN0LnRlc3Rf
MzJiaXQpOiBVcGRhdGUgdGVzdC4KKyAgICAgICAgKGlvc1Rlc3QudGVzdF82NGJpdCk6IFVwZGF0
ZSB0ZXN0LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5w
eToKKyAgICAgICAgKFNlcnZlclByb2Nlc3MuX19pbml0X18pOiBBY2NlcHQgd29ya2VyX251bWJl
ci4KKyAgICAgICAgKFNlcnZlclByb2Nlc3MuX3NldF9maWxlX25vbmJsb2NraW5nKTogQWRkZWQg
dG8gc2hhcmUgY29tbW9uIGNvZGUuCisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLndyaXRlKTogRmx1
c2ggYWZ0ZXIgd3JpdGluZy4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVy
X3Byb2Nlc3NfbW9jay5weToKKyAgICAgICAgKE1vY2tTZXJ2ZXJQcm9jZXNzLl9faW5pdF9fKTog
QWNjZXB0IHdvcmtlcl9udW1iZXIuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3Np
bXVsYXRvcl9wcm9jZXNzLnB5OiBBZGRlZC4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MpOiAK
KyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuU2ltdWxhdG9yUHJvY2Vzc1BvcGVuKToKKyAgICAg
ICAgKFNpbXVsYXRvclByb2Nlc3MuU2ltdWxhdG9yUHJvY2Vzc1BvcGVuLl9faW5pdF9fKTogU2V0
LXVwIG9wZW4gc3RydWN0dXJlIHdpdGggZW1wdHkgYXJndW1lbnRzLgorICAgICAgICAoU2ltdWxh
dG9yUHJvY2Vzcy5TaW11bGF0b3JQcm9jZXNzUG9wZW4ucG9sbCk6IENoZWNrIGlmIHRoZSBwcm9j
ZXNzIGlzIHJ1bm5pbmcuCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNzLlNpbXVsYXRvclByb2Nl
c3NQb3Blbi53YWl0KTogV2FpdCBmb3IgdGFyZ2V0IHByb2Nlc3MgdG8gY2xvc2UuCisgICAgICAg
IChTaW11bGF0b3JQcm9jZXNzLl9faW5pdF9fKTogSW5zdGFsbCBhcHAgdG8gZGV2aWNlLgorICAg
ICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5fX3VubGlua19jaGVja19leGlzdHMpOiBVbmxpbmsgZmls
ZSwgdGhyb3cgZXJyb3IgaWYgdGhpcyBmYWlscy4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3Mu
X3Jlc2V0KTogVW5saW5rIGZpZm9zLgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5fc3RhcnQp
OiBMYXVuY2ggYXBwIG9uIHNpbXVsYXRvciwgbGluayBmaWZvcy4KKyAgICAgICAgKFNpbXVsYXRv
clByb2Nlc3MuX2tpbGwpOiBTaHV0ZG93biBhcHAgb24gc2ltdWxhdG9yCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3IucHk6CisgICAgICAgIChEZXZpY2UuX19pbml0
X18pOiBBY2NlcHQgaG9zdCB0byBydW4gaW5zdGFsbC9sYXVuY2gvdGVybWluYXRlLgorICAgICAg
ICAoRGV2aWNlLmluc3RhbGxfYXBwKTogSW5zdGFsbCBhcHAgdG8gdGFyZ2V0IGRldmljZS4KKyAg
ICAgICAgKERldmljZS5sYXVuY2hfYXBwKTogTGF1bmNoIGFwcCBvbiB0YXJnZXQgZGV2aWNlLgor
ICAgICAgICAoRGV2aWNlLnRlcm1pbmF0ZV9hcHApOiBTaHV0ZG93biBhcHAgb24gdGFyZ2V0IGRl
dmljZS4KKwogMjAxNy0wMS0yNSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBjb2xsZWN0TWF0Y2hpbmdFbGVtZW50c0luRmxhdFRyZWUgc2hvdWxkIG5vdCBmaW5k
IGVsZW1lbnRzIGluc2lkZSBhbiB1c2VyIGFnZW50IHNoYWRvdyB0cmVlCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvYmFzZS5weQkocmV2aXNpb24gMjExMTQyKQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2Jhc2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw2ICsxMzEsNyBA
QCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgIHNlbGYuX3dlYl9wbGF0Zm9ybV90ZXN0X3Nl
cnZlciA9IE5vbmUKICAgICAgICAgc2VsZi5faW1hZ2VfZGlmZmVyID0gTm9uZQogICAgICAgICBz
ZWxmLl9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IHNlcnZlcl9wcm9jZXNzLlNlcnZlclBy
b2Nlc3MgICMgb3ZlcnJpZGFibGUgZm9yIHRlc3RpbmcKKyAgICAgICAgc2VsZi5fdGVzdF9ydW5u
ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IHNlcnZlcl9wcm9jZXNzLlNlcnZlclByb2Nlc3MKIAog
ICAgICAgICBpZiBub3QgaGFzYXR0cihvcHRpb25zLCAnY29uZmlndXJhdGlvbicpIG9yIG5vdCBv
cHRpb25zLmNvbmZpZ3VyYXRpb246CiAgICAgICAgICAgICBzZWxmLnNldF9vcHRpb25fZGVmYXVs
dCgnY29uZmlndXJhdGlvbicsIHNlbGYuZGVmYXVsdF9jb25maWd1cmF0aW9uKCkpCkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW4ucHkJKHJldmlzaW9uIDIxMTE0MikKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kYXJ3aW4ucHkJKHdvcmtpbmcgY29weSkKQEAgLTE3
NCwzICsxNzQsMTEgQEAgY2xhc3MgRGFyd2luUG9ydChBcHBsZVBvcnQpOgogICAgICAgICBleGNl
cHQgU2NyaXB0RXJyb3I6CiAgICAgICAgICAgICBfbG9nLndhcm4oInhjcnVuIGZhaWxlZDsgZmFs
bGluZyBiYWNrIHRvICclcycuIiAlIGZhbGxiYWNrKQogICAgICAgICAgICAgcmV0dXJuIGZhbGxi
YWNrCisKKyAgICBkZWYgYXBwX2lkZW50aWZpZXJfZnJvbV9idW5kbGUoc2VsZiwgYXBwX2J1bmRs
ZSk6CisgICAgICAgIHBsaXN0X3BhdGggPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oYXBwX2J1bmRs
ZSwgJ0luZm8ucGxpc3QnKQorICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMo
cGxpc3RfcGF0aCk6CisgICAgICAgICAgICBwbGlzdF9wYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5q
b2luKGFwcF9idW5kbGUsICdDb250ZW50cycsICdJbmZvLnBsaXN0JykKKyAgICAgICAgaWYgbm90
IHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHBsaXN0X3BhdGgpOgorICAgICAgICAgICAgcmV0dXJu
IE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJy91c3Iv
bGliZXhlYy9QbGlzdEJ1ZGR5JywgJy1jJywgJ1ByaW50IENGQnVuZGxlSWRlbnRpZmllcicsIHBs
aXN0X3BhdGhdKS5yc3RyaXAoKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Ry
aXZlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVy
LnB5CShyZXZpc2lvbiAyMTExNDIpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJp
dmVyLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNyArMTM4LDcgQEAgY2xhc3MgRHJpdmVyKG9i
amVjdCk6CiAgICAgICAgIHNlbGYuX2RyaXZlcl91c2VyX2RpcmVjdG9yeV9zdWZmaXggPSBOb25l
CiAgICAgICAgIHNlbGYuX2RyaXZlcl91c2VyX2NhY2hlX2RpcmVjdG9yeSA9IE5vbmUKIAotICAg
ICAgICAjIFdlYktpdFRlc3RSdW5uZXIvTGF5b3V0VGVzdFJlbGF5IGNhbiByZXBvcnQgYmFjayBz
dWJwcm9jZXNzIGNyYXNoZXMgYnkgcHJpbnRpbmcKKyAgICAgICAgIyBXZWJLaXRUZXN0UnVubmVy
IGNhbiByZXBvcnQgYmFjayBzdWJwcm9jZXNzIGNyYXNoZXMgYnkgcHJpbnRpbmcKICAgICAgICAg
IyAiI0NSQVNIRUQgLSBQUk9DRVNTTkFNRSIuICBTaW5jZSB0aG9zZSBjYW4gaGFwcGVuIGF0IGFu
eSB0aW1lIGFuZCBTZXJ2ZXJQcm9jZXNzCiAgICAgICAgICMgd29uJ3QgYmUgYXdhcmUgb2YgdGhl
bSAoc2luY2UgdGhlIGFjdHVhbCB0b29sIGRpZG4ndCBjcmFzaCwganVzdCBhIHN1YnByb2Nlc3Mp
CiAgICAgICAgICMgd2UgcmVjb3JkIHRoZSBjcmFzaGVkIHN1YnByb2Nlc3MgbmFtZSBoZXJlLgpA
QCAtMzI3LDcgKzMyNyw2IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogCiAgICAgZGVmIF9zZXR1
cF9lbnZpcm9uX2Zvcl9kcml2ZXIoc2VsZiwgZW52aXJvbm1lbnQpOgogICAgICAgICBidWlsZF9y
b290X3BhdGggPSBzdHIoc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgpKQotICAgICAgICAjIEZJWE1F
OiBEWUxEXyogdmFyaWFibGVzIHNob3VsZCBiZSBNYWMtb25seS4gRXZlbiBpT1MgU2ltdWxhdG9y
IGRvZXNuJ3QgbmVlZCB0aGVtLCBhcyBMYXlvdXRUZXN0UmVsYXkgaXMgYSBob3N0IGJpbmFyeS4K
ICAgICAgICAgc2VsZi5fYXBwZW5kX2Vudmlyb25tZW50X3ZhcmlhYmxlX3BhdGgoZW52aXJvbm1l
bnQsICdEWUxEX0xJQlJBUllfUEFUSCcsIGJ1aWxkX3Jvb3RfcGF0aCkKICAgICAgICAgc2VsZi5f
YXBwZW5kX2Vudmlyb25tZW50X3ZhcmlhYmxlX3BhdGgoZW52aXJvbm1lbnQsICdfX1hQQ19EWUxE
X0xJQlJBUllfUEFUSCcsIGJ1aWxkX3Jvb3RfcGF0aCkKICAgICAgICAgc2VsZi5fYXBwZW5kX2Vu
dmlyb25tZW50X3ZhcmlhYmxlX3BhdGgoZW52aXJvbm1lbnQsICdEWUxEX0ZSQU1FV09SS19QQVRI
JywgYnVpbGRfcm9vdF9wYXRoKQpAQCAtMzY5LDcgKzM2OCw3IEBAIGNsYXNzIERyaXZlcihvYmpl
Y3QpOgogICAgICAgICBlbnZpcm9ubWVudCA9IHNlbGYuX3NldHVwX2Vudmlyb25fZm9yX3Rlc3Qo
KQogICAgICAgICBzZWxmLl9jcmFzaGVkX3Byb2Nlc3NfbmFtZSA9IE5vbmUKICAgICAgICAgc2Vs
Zi5fY3Jhc2hlZF9waWQgPSBOb25lCi0gICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzID0gc2Vs
Zi5fcG9ydC5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3Ioc2VsZi5fcG9ydCwgc2VsZi5fc2Vy
dmVyX25hbWUsIHNlbGYuY21kX2xpbmUocGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpLCBlbnZp
cm9ubWVudCkKKyAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3MgPSBzZWxmLl9wb3J0Ll90ZXN0
X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yKHNlbGYuX3BvcnQsIHNlbGYuX3NlcnZlcl9uYW1l
LCBzZWxmLmNtZF9saW5lKHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKSwgZW52aXJvbm1lbnQs
IHdvcmtlcl9udW1iZXI9c2VsZi5fd29ya2VyX251bWJlcikKICAgICAgICAgc2VsZi5fc2VydmVy
X3Byb2Nlc3Muc3RhcnQoKQogCiAgICAgZGVmIF9ydW5fcG9zdF9zdGFydF90YXNrcyhzZWxmKToK
QEAgLTYxMSwyNyArNjEwLDYgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgIHJldHVy
biBUcnVlCiAKIAotIyBGSVhNRTogdGhpcyBzaG91bGQgYmUgYWJzdHJhY3RlZCBvdXQgdmlhIHRo
ZSBQb3J0IHN1YmNsYXNzIHNvbWVob3cuCi1jbGFzcyBJT1NTaW11bGF0b3JEcml2ZXIoRHJpdmVy
KToKLSAgICBkZWYgY21kX2xpbmUoc2VsZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgot
ICAgICAgICBjbWQgPSBzdXBlcihJT1NTaW11bGF0b3JEcml2ZXIsIHNlbGYpLmNtZF9saW5lKHBp
eGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKQotICAgICAgICByZWxheV90b29sID0gc2VsZi5fcG9y
dC5yZWxheV9wYXRoCi0gICAgICAgIGR1bXBfdG9vbCA9IGNtZFswXQotICAgICAgICBkdW1wX3Rv
b2xfYXJncyA9IGNtZFsxOl0KLSAgICAgICAgcHJvZHVjdF9kaXIgPSBzZWxmLl9wb3J0Ll9idWls
ZF9wYXRoKCkKLSAgICAgICAgcmVsYXlfYXJncyA9IFsKLSAgICAgICAgICAgICctZGV2ZWxvcGVy
RGlyJywgc2VsZi5fcG9ydC5kZXZlbG9wZXJfZGlyLAotICAgICAgICAgICAgJy11ZGlkJywgc2Vs
Zi5fcG9ydC5kZXZpY2VfaWRfZm9yX3dvcmtlcl9udW1iZXIoc2VsZi5fd29ya2VyX251bWJlciks
Ci0gICAgICAgICAgICAnLXByb2R1Y3REaXInLCBwcm9kdWN0X2RpciwKLSAgICAgICAgICAgICct
YXBwJywgZHVtcF90b29sLAotICAgICAgICBdCi0gICAgICAgIHJldHVybiBbcmVsYXlfdG9vbF0g
KyByZWxheV9hcmdzICsgWyctLSddICsgZHVtcF90b29sX2FyZ3MKLQotICAgIGRlZiBfc2V0dXBf
ZW52aXJvbl9mb3JfZHJpdmVyKHNlbGYsIGVudmlyb25tZW50KToKLSAgICAgICAgZW52aXJvbm1l
bnRbJ0RFVkVMT1BFUl9ESVInXSA9IHNlbGYuX3BvcnQuZGV2ZWxvcGVyX2RpcgotICAgICAgICBy
ZXR1cm4gc3VwZXIoSU9TU2ltdWxhdG9yRHJpdmVyLCBzZWxmKS5fc2V0dXBfZW52aXJvbl9mb3Jf
ZHJpdmVyKGVudmlyb25tZW50KQotCi0KIGNsYXNzIENvbnRlbnRCbG9jayhvYmplY3QpOgogICAg
IGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgc2VsZi5jb250ZW50X3R5cGUgPSBOb25lCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyX3VuaXR0ZXN0LnB5Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHkJ
KHJldmlzaW9uIDIxMTE0MikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJf
dW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTI2NCw3ICsyNjQsNyBAQCBjbGFzcyBEcml2
ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3N0b3BfY2xlYW5zX3Vw
X3Byb3Blcmx5KHNlbGYpOgogICAgICAgICBwb3J0ID0gVGVzdFdlYktpdFBvcnQoKQotICAgICAg
ICBwb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IE1vY2tTZXJ2ZXJQcm9jZXNzCisg
ICAgICAgIHBvcnQuX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVy
UHJvY2VzcwogICAgICAgICBkcml2ZXIgPSBEcml2ZXIocG9ydCwgMCwgcGl4ZWxfdGVzdHM9VHJ1
ZSkKICAgICAgICAgZHJpdmVyLnN0YXJ0KFRydWUsIFtdKQogICAgICAgICBsYXN0X3RtcGRpciA9
IHBvcnQuX2ZpbGVzeXN0ZW0ubGFzdF90bXBkaXIKQEAgLTI3NCw3ICsyNzQsNyBAQCBjbGFzcyBE
cml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3R3b19zdGFydHNf
Y2xlYW5zX3VwX3Byb3Blcmx5KHNlbGYpOgogICAgICAgICBwb3J0ID0gVGVzdFdlYktpdFBvcnQo
KQotICAgICAgICBwb3J0Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IE1vY2tTZXJ2ZXJQ
cm9jZXNzCisgICAgICAgIHBvcnQuX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBN
b2NrU2VydmVyUHJvY2VzcwogICAgICAgICBkcml2ZXIgPSBEcml2ZXIocG9ydCwgMCwgcGl4ZWxf
dGVzdHM9VHJ1ZSkKICAgICAgICAgZHJpdmVyLnN0YXJ0KFRydWUsIFtdKQogICAgICAgICBsYXN0
X3RtcGRpciA9IHBvcnQuX2ZpbGVzeXN0ZW0ubGFzdF90bXBkaXIKQEAgLTI4Myw3ICsyODMsNyBA
QCBjbGFzcyBEcml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3N0
YXJ0X2FjdHVhbGx5X3N0YXJ0cyhzZWxmKToKICAgICAgICAgcG9ydCA9IFRlc3RXZWJLaXRQb3J0
KCkKLSAgICAgICAgcG9ydC5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVy
UHJvY2VzcworICAgICAgICBwb3J0Ll90ZXN0X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0g
TW9ja1NlcnZlclByb2Nlc3MKICAgICAgICAgZHJpdmVyID0gRHJpdmVyKHBvcnQsIDAsIHBpeGVs
X3Rlc3RzPVRydWUpCiAgICAgICAgIGRyaXZlci5zdGFydChUcnVlLCBbXSkKICAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKGRyaXZlci5fc2VydmVyX3Byb2Nlc3Muc3RhcnRlZCkKSW5kZXg6IFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2lvcy5weQkocmV2aXNpb24gMjExMTQyKQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2lvcy5weQkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBm
cm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMudGVzdF9jCiBmcm9tIHdlYmtpdHB5LnBv
cnQgaW1wb3J0IGNvbmZpZyBhcyBwb3J0X2NvbmZpZwogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9y
dCBkcml2ZXIsIGltYWdlX2RpZmYKIGZyb20gd2Via2l0cHkucG9ydC5kYXJ3aW4gaW1wb3J0IERh
cndpblBvcnQKK2Zyb20gd2Via2l0cHkucG9ydC5zaW11bGF0b3JfcHJvY2VzcyBpbXBvcnQgU2lt
dWxhdG9yUHJvY2VzcwogZnJvbSB3ZWJraXRweS54Y29kZS5zaW11bGF0b3IgaW1wb3J0IFNpbXVs
YXRvciwgUnVudGltZSwgRGV2aWNlVHlwZQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmNy
YXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCiAKQEAgLTc4LDcgKzc5LDYgQEAgY2xhc3MgSU9TU2lt
dWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICBTREsgPSAnaXBob25lc2ltdWxhdG9yJwogCiAg
ICAgU0lNVUxBVE9SX0JVTkRMRV9JRCA9ICdjb20uYXBwbGUuaXBob25lc2ltdWxhdG9yJwotICAg
IHJlbGF5X25hbWUgPSAnTGF5b3V0VGVzdFJlbGF5JwogICAgIFNJTVVMQVRPUl9ESVJFQ1RPUlkg
PSAiL3RtcC9XZWJLaXRUZXN0aW5nU2ltdWxhdG9ycy8iCiAgICAgTFNSRUdJU1RFUl9QQVRIID0g
Ii9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NvcmVTZXJ2aWNlcy5mcmFtZXdvcmsvRnJhbWV3
b3Jrcy9MYXVuY2hTZXJ2aWNlcy5mcmFtZXdvcmsvVmVyc2lvbnMvQ3VycmVudC9TdXBwb3J0L2xz
cmVnaXN0ZXIiCiAgICAgUFJPQ0VTU19DT1VOVF9FU1RJTUFURV9QRVJfU0lNVUxBVE9SX0lOU1RB
TkNFID0gMTAwCkBAIC05Nyw2ICs5Nyw3IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2lu
UG9ydCk6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJn
cyk6CiAgICAgICAgIERhcndpblBvcnQuX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAq
Kmt3YXJncykKKyAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9
IFNpbXVsYXRvclByb2Nlc3MKIAogICAgICAgICBvcHRpb25hbF9kZXZpY2VfY2xhc3MgPSBzZWxm
LmdldF9vcHRpb24oJ2RldmljZV9jbGFzcycpCiAgICAgICAgIHNlbGYuX3ByaW50aW5nX2NtZF9s
aW5lID0gRmFsc2UKQEAgLTE0OCwxNiArMTQ5LDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChE
YXJ3aW5Qb3J0KToKICAgICAgICAgICAgIGRldmljZV90eXBlID0gRGV2aWNlVHlwZS5mcm9tX25h
bWUoZGV2aWNlX25hbWUpCiAgICAgICAgIHJldHVybiBkZXZpY2VfdHlwZQogCi0gICAgQHByb3Bl
cnR5Ci0gICAgQG1lbW9pemVkCi0gICAgZGVmIHJlbGF5X3BhdGgoc2VsZik6Ci0gICAgICAgIGlm
IHNlbGYuX3Jvb3Rfd2FzX3NldDoKLSAgICAgICAgICAgIHBhdGggPSBzZWxmLl9maWxlc3lzdGVt
LmFic3BhdGgoc2VsZi5nZXRfb3B0aW9uKCdyb290JykpCi0gICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICBtYWNfY29uZmlnID0gcG9ydF9jb25maWcuQ29uZmlnKHNlbGYuX2V4ZWN1dGl2ZSwgc2Vs
Zi5fZmlsZXN5c3RlbSwgJ21hYycpCi0gICAgICAgICAgICBwYXRoID0gbWFjX2NvbmZpZy5idWls
ZF9kaXJlY3Rvcnkoc2VsZi5nZXRfb3B0aW9uKCdjb25maWd1cmF0aW9uJykpCi0gICAgICAgIHJl
dHVybiBzZWxmLl9maWxlc3lzdGVtLmpvaW4ocGF0aCwgc2VsZi5yZWxheV9uYW1lKQotCiAgICAg
QG1lbW9pemVkCiAgICAgZGVmIGNoaWxkX3Byb2Nlc3NlcyhzZWxmKToKICAgICAgICAgcmV0dXJu
IGludChzZWxmLmdldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycpKQpAQCAtMTgyLDE5ICsxNzMs
NiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogCiAgICAgICAgIHJldHVy
biBtaW4obWF4aW11bV9zaW11bGF0b3JfY291bnRfb25fdGhpc19zeXN0ZW0sIGJlc3RfY2hpbGRf
cHJvY2Vzc19jb3VudF9mb3JfY3B1KQogCi0gICAgZGVmIF9jaGVja19yZWxheShzZWxmKToKLSAg
ICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHNlbGYucmVsYXlfcGF0aCk6Ci0g
ICAgICAgICAgICBfbG9nLmVycm9yKCIlcyB3YXMgbm90IGZvdW5kIGF0ICVzIiAlIChzZWxmLnJl
bGF5X25hbWUsIHNlbGYucmVsYXlfcGF0aCkpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAg
ICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBfY2hlY2tfcG9ydF9idWlsZChzZWxmKToKLSAg
ICAgICAgaWYgbm90IHNlbGYuX3Jvb3Rfd2FzX3NldCBhbmQgc2VsZi5nZXRfb3B0aW9uKCdidWls
ZCcpIGFuZCBub3Qgc2VsZi5fYnVpbGRfcmVsYXkoKToKLSAgICAgICAgICAgIHJldHVybiBGYWxz
ZQotICAgICAgICBpZiBub3Qgc2VsZi5fY2hlY2tfcmVsYXkoKToKLSAgICAgICAgICAgIHJldHVy
biBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1ZQotCiAgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNl
bGYsIG5hbWUsIHBpZCwgc3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49dGltZS50
aW1lLCBzbGVlcF9mbj10aW1lLnNsZWVwLCB3YWl0X2Zvcl9sb2c9VHJ1ZSk6CiAgICAgICAgIHRp
bWVfZm4gPSB0aW1lX2ZuIG9yIHRpbWUudGltZQogICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2Zu
IG9yIHRpbWUuc2xlZXAKQEAgLTIxNSw3ICsxOTMsNyBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0
KERhcndpblBvcnQpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9jcmFzaF9sb2coY3Jh
c2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZFswXSwgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVf
YW5kX3BpZFsxXSwgc3Rkb3V0LAogICAgICAgICAgICAgICAgICdcbicuam9pbihzdGRlcnJfbGlu
ZXMpLCBuZXdlcl90aGFuLCB0aW1lX2ZuLCBzbGVlcF9mbiwgd2FpdF9mb3JfbG9nKQogCi0gICAg
ICAgICMgTGF5b3V0VGVzdFJlbGF5IGNyYXNoZWQKKyAgICAgICAgIyBBcHAgY3Jhc2hlZAogICAg
ICAgICBfbG9nLmRlYnVnKCdsb29raW5nIGZvciBjcmFzaCBsb2cgZm9yICVzOiVzJyAlIChuYW1l
LCBzdHIocGlkKSkpCiAgICAgICAgIGNyYXNoX2xvZyA9ICcnCiAgICAgICAgIGNyYXNoX2xvZ3Mg
PSBDcmFzaExvZ3Moc2VsZi5ob3N0KQpAQCAtMjMzLDI1ICsyMTEsNiBAQCBjbGFzcyBJT1NTaW11
bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgICAgICAgICAgcmV0dXJuIHN0ZGVyciwgTm9uZQog
ICAgICAgICByZXR1cm4gc3RkZXJyLCBjcmFzaF9sb2cKIAotICAgIGRlZiBfYnVpbGRfcmVsYXko
c2VsZik6Ci0gICAgICAgIGVudmlyb25tZW50ID0gc2VsZi5ob3N0LmNvcHlfY3VycmVudF9lbnZp
cm9ubWVudCgpCi0gICAgICAgIGVudmlyb25tZW50LmRpc2FibGVfZ2NjX3NtYXJ0cXVvdGVzKCkK
LSAgICAgICAgZW52ID0gZW52aXJvbm1lbnQudG9fZGljdGlvbmFyeSgpCi0KLSAgICAgICAgdHJ5
OgotICAgICAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIGJlIHBhc3NpbmcgX2FyZ3VtZW50c19m
b3JfY29uZmlndXJhdGlvbigpLCB3aGljaCByZXNwZWN0cyBidWlsZCBjb25maWd1cmF0aW9uIGFu
ZCBwb3J0LAotICAgICAgICAgICAgIyBpbnN0ZWFkIG9mIGhhcmRjb2RpbmcgLS1pb3Mtc2ltdWxh
dG9yLgotICAgICAgICAgICAgc2VsZi5fcnVuX3NjcmlwdCgiYnVpbGQtbGF5b3V0dGVzdHJlbGF5
IiwgYXJncz1bIi0taW9zLXNpbXVsYXRvciJdLCBlbnY9ZW52KQotICAgICAgICBleGNlcHQgU2Ny
aXB0RXJyb3IsIGU6Ci0gICAgICAgICAgICBfbG9nLmVycm9yKGUubWVzc2FnZV93aXRoX291dHB1
dChvdXRwdXRfbGltaXQ9Tm9uZSkpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAg
cmV0dXJuIFRydWUKLQotICAgIGRlZiBfYnVpbGRfZHJpdmVyKHNlbGYpOgotICAgICAgICBidWls
dF90b29sID0gc3VwZXIoSU9TU2ltdWxhdG9yUG9ydCwgc2VsZikuX2J1aWxkX2RyaXZlcigpCi0g
ICAgICAgIGJ1aWx0X3JlbGF5ID0gc2VsZi5fYnVpbGRfcmVsYXkoKQotICAgICAgICByZXR1cm4g
YnVpbHRfdG9vbCBhbmQgYnVpbHRfcmVsYXkKLQogICAgIGRlZiBfYnVpbGRfZHJpdmVyX2ZsYWdz
KHNlbGYpOgogICAgICAgICBhcmNocyA9IFsnQVJDSFM9aTM4NiddIGlmIHNlbGYuYXJjaGl0ZWN0
dXJlKCkgPT0gJ3g4NicgZWxzZSBbXQogICAgICAgICBzZGsgPSBbJy0tc2RrJywgJ2lwaG9uZXNp
bXVsYXRvciddCkBAIC0yNjQsOSArMjIzLDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3
aW5Qb3J0KToKICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucy5hcHBlbmQoVGVzdENvbmZp
Z3VyYXRpb24odmVyc2lvbj1zZWxmLl92ZXJzaW9uLCBhcmNoaXRlY3R1cmU9YXJjaGl0ZWN0dXJl
LCBidWlsZF90eXBlPWJ1aWxkX3R5cGUpKQogICAgICAgICByZXR1cm4gY29uZmlndXJhdGlvbnMK
IAotICAgIGRlZiBfZHJpdmVyX2NsYXNzKHNlbGYpOgotICAgICAgICByZXR1cm4gZHJpdmVyLklP
U1NpbXVsYXRvckRyaXZlcgotCiAgICAgZGVmIGRlZmF1bHRfYmFzZWxpbmVfc2VhcmNoX3BhdGgo
c2VsZik6CiAgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignd2Via2l0X3Rlc3RfcnVubmVyJyk6
CiAgICAgICAgICAgICBmYWxsYmFja19uYW1lcyA9IFtzZWxmLl93azJfcG9ydF9uYW1lKCldICsg
W3NlbGYucG9ydF9uYW1lXSArIFsnd2syJ10KQEAgLTI4MCw5ICsyMzYsOSBAQCBjbGFzcyBJT1NT
aW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogCiAgICAgZGVmIF9jcmVhdGVfc2ltdWxhdG9ycyhz
ZWxmKToKICAgICAgICAgaWYgKHNlbGYuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKSA8IHNlbGYu
Y2hpbGRfcHJvY2Vzc2VzKCkpOgotICAgICAgICAgICAgICAgIF9sb2cud2FybigiWW91IGhhdmUg
c3BlY2lmaWVkIHZlcnkgaGlnaCB2YWx1ZSh7MH0pIGZvciAtLWNoaWxkLXByb2Nlc3NlcyIuZm9y
bWF0KHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpKQotICAgICAgICAgICAgICAgIF9sb2cud2Fybigi
bWF4aW11bSBjaGlsZC1wcm9jZXNzZXMgd2hpY2ggY2FuIGJlIHN1cHBvcnRlZCBvbiB0aGlzIHN5
c3RlbSBhcmU6IHswfSIuZm9ybWF0KHNlbGYuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKSkpCi0g
ICAgICAgICAgICAgICAgX2xvZy53YXJuKCJUaGlzIGlzIHZlcnkgbGlrZWx5IHRvIGZhaWwuIikK
KyAgICAgICAgICAgIF9sb2cud2FybigiWW91IGhhdmUgc3BlY2lmaWVkIHZlcnkgaGlnaCB2YWx1
ZSh7MH0pIGZvciAtLWNoaWxkLXByb2Nlc3NlcyIuZm9ybWF0KHNlbGYuY2hpbGRfcHJvY2Vzc2Vz
KCkpKQorICAgICAgICAgICAgX2xvZy53YXJuKCJtYXhpbXVtIGNoaWxkLXByb2Nlc3NlcyB3aGlj
aCBjYW4gYmUgc3VwcG9ydGVkIG9uIHRoaXMgc3lzdGVtIGFyZTogezB9Ii5mb3JtYXQoc2VsZi5k
ZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcygpKSkKKyAgICAgICAgICAgIF9sb2cud2FybigiVGhpcyBp
cyB2ZXJ5IGxpa2VseSB0byBmYWlsLiIpCiAKICAgICAgICAgaWYgc2VsZi5fdXNpbmdfZGVkaWNh
dGVkX3NpbXVsYXRvcnMoKToKICAgICAgICAgICAgIHNlbGYuX2NyZWF0ZVNpbXVsYXRvckFwcHMo
KQpAQCAtNDEzLDcgKzM2OSw2IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6
CiAgICAgZGVmIF90ZXN0aW5nX2RldmljZShzZWxmLCBudW1iZXIpOgogICAgICAgICByZXR1cm4g
U2ltdWxhdG9yLmRldmljZV9udW1iZXIobnVtYmVyKQogCi0gICAgIyBUaGlzIGlzIG9ubHkgZXhw
b3NlZCBzbyB0aGF0IElPU1NpbXVsYXRvckRyaXZlciBjYW4gdXNlIGl0LgogICAgIGRlZiBkZXZp
Y2VfaWRfZm9yX3dvcmtlcl9udW1iZXIoc2VsZiwgbnVtYmVyKToKICAgICAgICAgaWYgc2VsZi5f
cHJpbnRpbmdfY21kX2xpbmU6CiAgICAgICAgICAgICByZXR1cm4gJzxkdW1teSBpZD4nCkluZGV4
OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3QucHkJKHJldmlzaW9u
IDIxMTE0MikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3QucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgY2xhc3MgaW9zVGVzdChkYXJ3aW5fdGVz
dGNhc2UuRGFyd2luVGVzdAogICAgICAgICBwb3J0Ll9ydW5fc2NyaXB0ID0gcnVuX3NjcmlwdAog
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuYXJjaGl0ZWN0dXJlKCksICd4ODYnKQogICAg
ICAgICBwb3J0Ll9idWlsZF9kcml2ZXIoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYu
YXJncywgWyctLWlvcy1zaW11bGF0b3InXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxm
LmFyZ3MsIFsnQVJDSFM9aTM4NicsICctLXNkaycsICdpcGhvbmVzaW11bGF0b3InXSkKIAogICAg
IGRlZiB0ZXN0XzY0Yml0KHNlbGYpOgogICAgICAgICAjIEFwcGxlIE1hYyBwb3J0IGlzIDY0LWJp
dCBieSBkZWZhdWx0CkBAIC04Miw3ICs4Miw3IEBAIGNsYXNzIGlvc1Rlc3QoZGFyd2luX3Rlc3Rj
YXNlLkRhcndpblRlc3QKIAogICAgICAgICBwb3J0Ll9ydW5fc2NyaXB0ID0gcnVuX3NjcmlwdAog
ICAgICAgICBwb3J0Ll9idWlsZF9kcml2ZXIoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNl
bGYuYXJncywgWyctLWlvcy1zaW11bGF0b3InXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz
ZWxmLmFyZ3MsIFsnLS1zZGsnLCAnaXBob25lc2ltdWxhdG9yJ10pCiAKICAgICBkZWYgdGVzdF9z
ZGtfbmFtZShzZWxmKToKICAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3MucHkJKHJldmlzaW9u
IDIxMTE0MikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5w
eQkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNTksNyArNjAs
NyBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6CiAgICAgaW5kZWZpbml0ZWx5LiBUaGUg
Y2xhc3MgYWxzbyBoYW5kbGVzIHRyYW5zcGFyZW50bHkgcmVzdGFydGluZyBwcm9jZXNzZXMKICAg
ICBhcyBuZWNlc3NhcnkgdG8ga2VlcCBpc3N1aW5nIGNvbW1hbmRzLiIiIgogCi0gICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVudj1Ob25lLCB1bml2ZXJzYWxfbmV3
bGluZXM9RmFsc2UsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2g9RmFsc2UpOgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBwb3J0X29iaiwgbmFtZSwgY21kLCBlbnY9Tm9uZSwgdW5pdmVyc2FsX25ld2xp
bmVzPUZhbHNlLCB0cmVhdF9ub19kYXRhX2FzX2NyYXNoPUZhbHNlLCB3b3JrZXJfbnVtYmVyPU5v
bmUpOgogICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydF9vYmoKICAgICAgICAgc2VsZi5fbmFtZSA9
IG5hbWUgICMgU2hvdWxkIGJlIHRoZSBjb21tYW5kIG5hbWUgKGUuZy4gRHVtcFJlbmRlclRyZWUs
IEltYWdlRGlmZikKICAgICAgICAgc2VsZi5fY21kID0gY21kCkBAIC0xMDMsNiArMTA0LDExIEBA
IGNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToKICAgICBkZWYgcHJvY2Vzc19uYW1lKHNlbGYp
OgogICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQogCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRl
ZiBfc2V0X2ZpbGVfbm9uYmxvY2tpbmcoZmlsZSk6CisgICAgICAgIGZsYWdzID0gZmNudGwuZmNu
dGwoZmlsZS5maWxlbm8oKSwgZmNudGwuRl9HRVRGTCkKKyAgICAgICAgZmNudGwuZmNudGwoZmls
ZS5maWxlbm8oKSwgZmNudGwuRl9TRVRGTCwgZmxhZ3MgfCBvcy5PX05PTkJMT0NLKQorCiAgICAg
ZGVmIF9zdGFydChzZWxmKToKICAgICAgICAgaWYgc2VsZi5fcHJvYzoKICAgICAgICAgICAgIHJh
aXNlIFZhbHVlRXJyb3IoIiVzIGFscmVhZHkgcnVubmluZyIgJSBzZWxmLl9uYW1lKQpAQCAtMTE3
LDEzICsxMjMsOSBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6CiAgICAgICAgICAgICB1
bml2ZXJzYWxfbmV3bGluZXM9c2VsZi5fdW5pdmVyc2FsX25ld2xpbmVzKQogICAgICAgICBzZWxm
Ll9waWQgPSBzZWxmLl9wcm9jLnBpZAogICAgICAgICBzZWxmLl9wb3J0LmZpbmRfc3lzdGVtX3Bp
ZChzZWxmLm5hbWUoKSwgc2VsZi5fcGlkKQotICAgICAgICBmZCA9IHNlbGYuX3Byb2Muc3Rkb3V0
LmZpbGVubygpCiAgICAgICAgIGlmIG5vdCBzZWxmLl91c2Vfd2luMzJfYXBpczoKLSAgICAgICAg
ICAgIGZsID0gZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkwpCi0gICAgICAgICAgICBmY250
bC5mY250bChmZCwgZmNudGwuRl9TRVRGTCwgZmwgfCBvcy5PX05PTkJMT0NLKQotICAgICAgICAg
ICAgZmQgPSBzZWxmLl9wcm9jLnN0ZGVyci5maWxlbm8oKQotICAgICAgICAgICAgZmwgPSBmY250
bC5mY250bChmZCwgZmNudGwuRl9HRVRGTCkKLSAgICAgICAgICAgIGZjbnRsLmZjbnRsKGZkLCBm
Y250bC5GX1NFVEZMLCBmbCB8IG9zLk9fTk9OQkxPQ0spCisgICAgICAgICAgICBzZWxmLl9zZXRf
ZmlsZV9ub25ibG9ja2luZyhzZWxmLl9wcm9jLnN0ZG91dCkKKyAgICAgICAgICAgIHNlbGYuX3Nl
dF9maWxlX25vbmJsb2NraW5nKHNlbGYuX3Byb2Muc3RkZXJyKQogCiAgICAgZGVmIF9oYW5kbGVf
cG9zc2libGVfaW50ZXJydXB0KHNlbGYpOgogICAgICAgICAiIiJUaGlzIHJvdXRpbmUgY2hlY2tz
IHRvIHNlZSBpZiB0aGUgcHJvY2VzcyBjcmFzaGVkIG9yIGV4aXRlZApJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzX21vY2sucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzX21vY2sucHkJKHJldmlz
aW9uIDIxMTE0MikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vz
c19tb2NrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKIAogY2xhc3MgTW9j
a1NlcnZlclByb2Nlc3Mob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmo9
Tm9uZSwgbmFtZT1Ob25lLCBjbWQ9Tm9uZSwgZW52PU5vbmUsIHVuaXZlcnNhbF9uZXdsaW5lcz1G
YWxzZSwgbGluZXM9Tm9uZSwgY3Jhc2hlZD1GYWxzZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IHBvcnRfb2JqPU5vbmUsIG5hbWU9Tm9uZSwgY21kPU5vbmUsIGVudj1Ob25lLCB1bml2ZXJzYWxf
bmV3bGluZXM9RmFsc2UsIGxpbmVzPU5vbmUsIGNyYXNoZWQ9RmFsc2UsIHdvcmtlcl9udW1iZXI9
Tm9uZSk6CiAgICAgICAgIHNlbGYudGltZWRfb3V0ID0gRmFsc2UKICAgICAgICAgc2VsZi5saW5l
cyA9IGxpbmVzIG9yIFtdCiAgICAgICAgIHNlbGYuY3Jhc2hlZCA9IGNyYXNoZWQKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zaW11bGF0b3JfcHJvY2Vzcy5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2ltdWxhdG9yX3Byb2Nlc3MucHkJKG5v
bmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9j
ZXNzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM0IEBACisjIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGVycm5vCitpbXBvcnQgb3MKK2ltcG9y
dCBzaWduYWwKK2ltcG9ydCB0aW1lCisKK2Zyb20gd2Via2l0cHkucG9ydC5zZXJ2ZXJfcHJvY2Vz
cyBpbXBvcnQgU2VydmVyUHJvY2VzcworZnJvbSB3ZWJraXRweS54Y29kZS5zaW11bGF0b3IgaW1w
b3J0IFNpbXVsYXRvcgorCisKK2NsYXNzIFNpbXVsYXRvclByb2Nlc3MoU2VydmVyUHJvY2Vzcyk6
CisKKyAgICBjbGFzcyBQb3BlbihvYmplY3QpOgorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBwaWQsIHN0ZGluLCBzdGRvdXQsIHN0ZGVycik6CisgICAgICAgICAgICBzZWxmLnN0ZGluID0g
c3RkaW4KKyAgICAgICAgICAgIHNlbGYuc3Rkb3V0ID0gc3Rkb3V0CisgICAgICAgICAgICBzZWxm
LnN0ZGVyciA9IHN0ZGVycgorICAgICAgICAgICAgc2VsZi5waWQgPSBwaWQKKyAgICAgICAgICAg
IHNlbGYucmV0dXJuY29kZSA9IE5vbmUKKworICAgICAgICBkZWYgcG9sbChzZWxmKToKKyAgICAg
ICAgICAgIGlmIHNlbGYucmV0dXJuY29kZToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5y
ZXR1cm5jb2RlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3Mua2lsbChzZWxm
LnBpZCwgMCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlcnI6CisgICAgICAgICAgICAg
ICAgYXNzZXJ0IGVyci5lcnJubyA9PSBlcnJuby5FU1JDSAorICAgICAgICAgICAgICAgIHNlbGYu
cmV0dXJuY29kZSA9IDEKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnJldHVybmNvZGUKKworICAg
ICAgICBkZWYgd2FpdChzZWxmKToKKyAgICAgICAgICAgIHdoaWxlIG5vdCBzZWxmLnBvbGwoKToK
KyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpICAjIEluIHNlY29uZHMuICBTdWJwcm9j
ZXNzIGRvZXMgYSBzaW1pbGFyIGJ1c3kgd2FpdGluZyBsb29wIGluIHdhaXQoKS4KKyAgICAgICAg
ICAgIHJldHVybiBzZWxmLnJldHVybmNvZGUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0
X29iaiwgbmFtZSwgY21kLCBlbnY9Tm9uZSwgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNlLCB0cmVh
dF9ub19kYXRhX2FzX2NyYXNoPUZhbHNlLCB3b3JrZXJfbnVtYmVyPU5vbmUpOgorICAgICAgICBz
ZWxmLl9idW5kbGVfaWQgPSBwb3J0X29iai5hcHBfaWRlbnRpZmllcl9mcm9tX2J1bmRsZShjbWRb
MF0pCisgICAgICAgIHNlbGYuX2RldmljZSA9IFNpbXVsYXRvcihwb3J0X29iai5ob3N0KS5maW5k
X2RldmljZV9ieV91ZGlkKHBvcnRfb2JqLmRldmljZV9pZF9mb3Jfd29ya2VyX251bWJlcih3b3Jr
ZXJfbnVtYmVyKSkKKyAgICAgICAgaWYgbm90IHNlbGYuX2RldmljZS5pbnN0YWxsX2FwcChjbWRb
MF0pOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdGYWlsZWQgdG8gaW5zdGFsbCBh
cHAge30gb24gc2ltdWxhdG9yIGRldmljZSB7fScuZm9ybWF0KGNtZFswXSwgc2VsZi5fZGV2aWNl
LnVkaWQpKQorICAgICAgICBlbnZbJ0lQQ19JREVOVElGSUVSJ10gPSBzZWxmLl9idW5kbGVfaWQg
KyAnLScgKyBzZWxmLl9kZXZpY2UudWRpZAorCisgICAgICAgICMgVGhpcyBsb2NhdGlvbiBtYXRj
aGVzIHRoZSBsb2NhdGlvbiB1c2VkIGJ5IFdlYktpdFRlc3RSdW5uZXIgYW5kIER1bXBSZW5kZXJU
cmVlCisgICAgICAgICMgZm9yIHRoZSBvdGhlciBzaWRlIG9mIHRoZXNlIGZpZm9zLgorICAgICAg
ICBmaWxlX2xvY2F0aW9uID0gJy90bXAvJyArIGVudlsnSVBDX0lERU5USUZJRVInXQorICAgICAg
ICBzZWxmLl9pbl9wYXRoID0gZmlsZV9sb2NhdGlvbiArICdfSU4nCisgICAgICAgIHNlbGYuX291
dF9wYXRoID0gZmlsZV9sb2NhdGlvbiArICdfT1VUJworICAgICAgICBzZWxmLl9lcnJvcl9wYXRo
ID0gZmlsZV9sb2NhdGlvbiArICdfRVJST1InCisKKyAgICAgICAgc3VwZXIoU2ltdWxhdG9yUHJv
Y2Vzcywgc2VsZikuX19pbml0X18ocG9ydF9vYmosIG5hbWUsIGNtZCwgZW52LCB1bml2ZXJzYWxf
bmV3bGluZXMsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2gpCisKKyAgICBkZWYgX3Jlc2V0KHNlbGYp
OgorICAgICAgICBzdXBlcihTaW11bGF0b3JQcm9jZXNzLCBzZWxmKS5fcmVzZXQoKQorCisgICAg
ICAgICMgVW5saW5rcyBhcmUgbmVlZGVkIG9uIHJlc2V0IGluIHRoZSBldmVudCB0aGF0IHRoZSBQ
eXRob24gY29kZSB1bmV4cGVjdGVkbHkKKyAgICAgICAgIyBmYWlscyBiZXR3ZWVuIF9zdGFydCgp
IGFuZCBraWxsKCkuICBUaGlzIGNhbiBiZSBjYXVzZWQgYnkgYSBTSUdLSUxMIG9yIGEgY3Jhc2gu
CisgICAgICAgICMgVGhpcyBlbnN1cmVzIHRoYXQgb3MubWtmaWZvKCkgd2lsbCBub3QgYmUgb2Jz
dHJ1Y3RlZCBieSBwcmV2aW91cyBmaWZvcy4KKyAgICAgICAgIyBPdGhlciBmaWxlcyB3aWxsIHN0
aWxsIGNhdXNlIG9zLm1rZmlmbygpIHRvIGZhaWwuCisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IG9zLnVubGluayhzZWxmLl9pbl9wYXRoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBw
YXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnVubGluayhzZWxmLl9vdXRfcGF0aCkK
KyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworICAgICAgICB0cnk6CisgICAgICAg
ICAgICBvcy51bmxpbmsoc2VsZi5fZXJyb3JfcGF0aCkKKyAgICAgICAgZXhjZXB0OgorICAgICAg
ICAgICAgcGFzcworCisgICAgZGVmIF9zdGFydChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fcHJv
YzoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3t9IGFscmVhZHkgcnVubmluZycuZm9y
bWF0KHNlbGYuX25hbWUpKQorICAgICAgICBzZWxmLl9yZXNldCgpCisKKyAgICAgICAgZmlmb19w
ZXJtaXNzaW9uX2ZsYWdzID0gMDYwMCAgIyBPbmx5IG93bmVyIGNhbiByZWFkIGFuZCB3cml0ZQor
ICAgICAgICBvcy5ta2ZpZm8oc2VsZi5faW5fcGF0aCwgZmlmb19wZXJtaXNzaW9uX2ZsYWdzKQor
ICAgICAgICBvcy5ta2ZpZm8oc2VsZi5fb3V0X3BhdGgsIGZpZm9fcGVybWlzc2lvbl9mbGFncykK
KyAgICAgICAgb3MubWtmaWZvKHNlbGYuX2Vycm9yX3BhdGgsIGZpZm9fcGVybWlzc2lvbl9mbGFn
cykKKworICAgICAgICBzdGRvdXQgPSBvcy5mZG9wZW4ob3Mub3BlbihzZWxmLl9vdXRfcGF0aCwg
b3MuT19SRE9OTFkgfCBvcy5PX05PTkJMT0NLKSwgJ3JiJykKKyAgICAgICAgc3RkZXJyID0gb3Mu
ZmRvcGVuKG9zLm9wZW4oc2VsZi5fZXJyb3JfcGF0aCwgb3MuT19SRE9OTFkgfCBvcy5PX05PTkJM
T0NLKSwgJ3JiJykKKworICAgICAgICBzZWxmLl9waWQgPSBzZWxmLl9kZXZpY2UubGF1bmNoX2Fw
cChzZWxmLl9idW5kbGVfaWQsIHNlbGYuX2NtZFsxOl0sIGVudj1zZWxmLl9lbnYpCisKKyAgICAg
ICAgZGVmIGhhbmRsZXIoc2lnbnVtLCBmcmFtZSk6CisgICAgICAgICAgICBhc3NlcnQgc2lnbnVt
ID09IHNpZ25hbC5TSUdBTFJNCisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1RpbWVkIG91
dCB3YWl0aW5nIGZvciBwcm9jZXNzIHRvIG9wZW4ge30nLmZvcm1hdChzZWxmLl9pbl9wYXRoKSkK
KyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgaGFuZGxlcikKKyAgICAgICAg
c2lnbmFsLmFsYXJtKDMpICAjIFRoZSBhcHAgc2hvdWxkIGJlIGxhdW5jaGVkIGFuZCBoYXZlIG9w
ZW5lZCBzdGRpbiBpbiAzIHNlY29uZHMKKworICAgICAgICBzdGRpbiA9IE5vbmUKKyAgICAgICAg
dHJ5OgorICAgICAgICAgICAgc3RkaW4gPSBvcGVuKHNlbGYuX2luX3BhdGgsICd3JywgMCkgICMg
T3BlbmluZyB3aXRoIG5vIGJ1ZmZlcmluZywgbGlrZSBwb3BlbgorICAgICAgICBleGNlcHQgRXhj
ZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAjIFdlIHNldCBzZWxmLl9wcm9jIGFzIF9yZXNldCgp
IGFuZCBfa2lsbCgpIGRlcGVuZCBvbiBpdC4KKyAgICAgICAgICAgIHNlbGYuX3Byb2MgPSBTaW11
bGF0b3JQcm9jZXNzLlBvcGVuKHNlbGYuX3BpZCwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyKQorICAg
ICAgICAgICAgaWYgc2VsZi5fcHJvYy5wb2xsKCkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAg
ICAgc2VsZi5fcmVzZXQoKQorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignQXBwIHt9
IGNyYXNoZWQgYmVmb3JlIHN0ZGluIGNvdWxkIGJlIGF0dGFjaGVkJy5mb3JtYXQob3MucGF0aC5i
YXNlbmFtZShzZWxmLl9jbWRbMF0pKSkKKyAgICAgICAgICAgIHNlbGYuX2tpbGwoKQorICAgICAg
ICAgICAgc2VsZi5fcmVzZXQoKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgc2lnbmFsLmFs
YXJtKDApICAjIENhbmNlbCBhbGFybQorCisgICAgICAgIHNlbGYuX3Byb2MgPSBTaW11bGF0b3JQ
cm9jZXNzLlBvcGVuKHNlbGYuX3BpZCwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyKQorCisgICAgZGVm
IF9raWxsKHNlbGYpOgorICAgICAgICBzZWxmLl9kZXZpY2UudGVybWluYXRlX2FwcChzZWxmLl9i
dW5kbGVfaWQpCisgICAgICAgIHN1cGVyKFNpbXVsYXRvclByb2Nlc3MsIHNlbGYpLl9raWxsKCkK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5CShyZXZpc2lv
biAyMTExNDIpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvci5weQko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQCBpbXBvcnQgdGltZQogCiBmcm9tIHdlYmtp
dHB5LmJlbmNobWFya19ydW5uZXIudXRpbHMgaW1wb3J0IHRpbWVvdXQKIGZyb20gd2Via2l0cHku
Y29tbW9uLmhvc3QgaW1wb3J0IEhvc3QKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVj
dXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25h
bWVfXykKIApAQCAtMTY3LDcgKzE2OCw3IEBAIGNsYXNzIERldmljZShvYmplY3QpOgogICAgIFJl
cHJlc2VudHMgYSBDb3JlU2ltdWxhdG9yIGRldmljZSB1bmRlcm5lYXRoIGEgcnVudGltZQogICAg
ICIiIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHVkaWQsIGF2YWlsYWJsZSwgcnVu
dGltZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHVkaWQsIGF2YWlsYWJsZSwgcnVu
dGltZSwgaG9zdCk6CiAgICAgICAgICIiIgogICAgICAgICA6cGFyYW0gbmFtZTogVGhlIGRldmlj
ZSBuYW1lCiAgICAgICAgIDp0eXBlIG5hbWU6IHN0cgpAQCAtMTc3LDcgKzE3OCwxMCBAQCBjbGFz
cyBEZXZpY2Uob2JqZWN0KToKICAgICAgICAgOnR5cGUgYXZhaWxhYmxlOiBib29sCiAgICAgICAg
IDpwYXJhbSBydW50aW1lOiBUaGUgaU9TIFNpbXVsYXRvciBydW50aW1lIHRoYXQgaG9zdHMgdGhp
cyBkZXZpY2UKICAgICAgICAgOnR5cGUgcnVudGltZTogUnVudGltZQorICAgICAgICA6cGFyYW0g
aG9zdDogVGhlIGhvc3Qgd2hpY2ggY2FuIHJ1biBjb21tYW5kIGxpbmUgY29tbWFuZHMKKyAgICAg
ICAgOnR5cGUgaG9zdDogSG9zdAogICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5faG9zdCA9IGhv
c3QKICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgICBzZWxmLnVkaWQgPSB1ZGlkCiAg
ICAgICAgIHNlbGYuYXZhaWxhYmxlID0gYXZhaWxhYmxlCkBAIC0yNjAsNiArMjY0LDMxIEBAIGNs
YXNzIERldmljZShvYmplY3QpOgogICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9j
ZXNzRXJyb3I6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJyJ4Y3J1biBzaW1jdGwg
ZXJhc2UiIGZhaWxlZDogZGV2aWNlIHN0YXRlIGlzIHt9Jy5mb3JtYXQoU2ltdWxhdG9yLmRldmlj
ZV9zdGF0ZSh1ZGlkKSkpCiAKKyAgICBkZWYgaW5zdGFsbF9hcHAoc2VsZiwgYXBwX3BhdGgpOgor
ICAgICAgICByZXR1cm4gbm90IHNlbGYuX2hvc3QuZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsneGNy
dW4nLCAnc2ltY3RsJywgJ2luc3RhbGwnLCBzZWxmLnVkaWQsIGFwcF9wYXRoXSwgcmV0dXJuX2V4
aXRfY29kZT1UcnVlKQorCisgICAgZGVmIGxhdW5jaF9hcHAoc2VsZiwgYnVuZGxlX2lkZW50aWZp
ZXIsIGFyZ3MsIGVudj1Ob25lKToKKyAgICAgICAgZW52aXJvbm1lbnRfdG9fdXNlID0ge30KKyAg
ICAgICAgc2ltY3RsX2Vudl9wcmVmaXggPSAnU0lNQ1RMX0NISUxEXycKKyAgICAgICAgZm9yIHZh
bHVlIGluIChlbnYgb3Ige30pOgorICAgICAgICAgICAgaWYgbm90IHZhbHVlLnN0YXJ0c3dpdGgo
c2ltY3RsX2Vudl9wcmVmaXgpOgorICAgICAgICAgICAgICAgIGVudmlyb25tZW50X3RvX3VzZVtz
aW1jdGxfZW52X3ByZWZpeCArIHZhbHVlXSA9IGVudlt2YWx1ZV0KKyAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnRfdG9fdXNlW3ZhbHVlXSA9IGVudlt2YWx1ZV0K
KworICAgICAgICBvdXRwdXQgPSBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5ydW5fY29tbWFuZCgKKyAg
ICAgICAgICAgIFsneGNydW4nLCAnc2ltY3RsJywgJ2xhdW5jaCcsIHNlbGYudWRpZCwgYnVuZGxl
X2lkZW50aWZpZXJdICsgYXJncywKKyAgICAgICAgICAgIGVudj1lbnZpcm9ubWVudF90b191c2Us
CisgICAgICAgICkKKworICAgICAgICBtYXRjaCA9IHJlLm1hdGNoKHInKD9QPGJ1bmRsZT4uKyk6
ICg/UDxwaWQ+WzAtOV0rKVxuJywgb3V0cHV0KQorICAgICAgICBpZiBub3QgbWF0Y2ggb3IgbWF0
Y2guZ3JvdXAoJ2J1bmRsZScpICE9IGJ1bmRsZV9pZGVudGlmaWVyOgorICAgICAgICAgICAgcmFp
c2UgUnVudGltZUVycm9yKCdGYWlsZWQgdG8gZmluZCBwcm9jZXNzIGlkIGZvciB7fToge30nLmZv
cm1hdChidW5kbGVfaWRlbnRpZmllciwgb3V0cHV0KSkKKyAgICAgICAgcmV0dXJuIGludChtYXRj
aC5ncm91cCgncGlkJykpCisKKyAgICBkZWYgdGVybWluYXRlX2FwcChzZWxmLCBidW5kbGVfaWRl
bnRpZmllcik6CisgICAgICAgIHJldHVybiBub3Qgc2VsZi5faG9zdC5leGVjdXRpdmUucnVuX2Nv
bW1hbmQoWyd4Y3J1bicsICdzaW1jdGwnLCAndGVybWluYXRlJywgc2VsZi51ZGlkLCBidW5kbGVf
aWRlbnRpZmllcl0sIHJldHVybl9leGl0X2NvZGU9VHJ1ZSkKKwogICAgIGRlZiBfX2VxX18oc2Vs
Ziwgb3RoZXIpOgogICAgICAgICByZXR1cm4gc2VsZi51ZGlkID09IG90aGVyLnVkaWQKIApAQCAt
NDc3LDcgKzUwNiw4IEBAIGNsYXNzIFNpbXVsYXRvcihvYmplY3QpOgogICAgICAgICAgICAgICAg
IGRldmljZSA9IERldmljZShuYW1lPWRldmljZV9tYXRjaC5ncm91cCgnbmFtZScpLnJzdHJpcCgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZGlkPWRldmljZV9tYXRjaC5ncm91
cCgndWRpZCcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGU9ZGV2
aWNlX21hdGNoLmdyb3VwKCdhdmFpbGFiaWxpdHknKSBpcyBOb25lLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBydW50aW1lPWN1cnJlbnRfcnVudGltZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcnVudGltZT1jdXJyZW50X3J1bnRpbWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhvc3Q9c2VsZi5faG9zdCkKICAgICAgICAgICAgICAgICBjdXJy
ZW50X3J1bnRpbWUuZGV2aWNlcy5hcHBlbmQoZGV2aWNlKQogCiAgICAgZGVmIGRldmljZV90eXBl
KHNlbGYsIG5hbWU9Tm9uZSwgaWRlbnRpZmllcj1Ob25lKToK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>299967</attachid>
            <date>2017-01-27 15:06:53 -0800</date>
            <delta_ts>2017-01-30 08:55:25 -0800</delta_ts>
            <desc>Removal of LayoutTestRelay</desc>
            <filename>bug-165927-20170127150448.patch</filename>
            <type>text/plain</type>
            <size>135161</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMTE0MikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE3IEBACisyMDE3LTAxLTI3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBSZW1vdmluZyBMYXlvdXRUZXN0UmVsYXkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTkyNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAoUGF0Y2ggMiBvZiAyKQorCisgICAgICAgIExh
eW91dFRlc3RSZWxheSB1c2VzIFNQSSwgc2luY2UgcmVjZW50IHZlcnNpb25zIG9mIHRoZSBpT1Mg
U0RLIGFsbG93IGZvciBpbnN0YWxsaW5nIGFwcHMgb24gc2ltdWxhdG9ycyB0aHJvdWdoIHNpbWN0
bCwgdXNlIHRoaXMgZnVuY3Rpb25hbGl0eSBpbnN0ZWFkLgorCisgICAgICAgICogTGF5b3V0VGVz
dFJlbGF5OiBSZW1vdmVkIExheW91dFRlc3RSZWxheS4KKyAgICAgICAgKiBNYWtlZmlsZTogUmVt
b3ZlZCBMYXlvdXRUZXN0UmVsYXkgcmVmZXJlbmNlcy4KKyAgICAgICAgKiBTY3JpcHRzL2J1aWxk
LXdlYmtpdDogUmVtb3ZlZCBMYXlvdXRUZXN0UmVsYXkgcmVmZXJlbmNlcy4KKwogMjAxNy0wMS0y
NSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBjb2xsZWN0TWF0
Y2hpbmdFbGVtZW50c0luRmxhdFRyZWUgc2hvdWxkIG5vdCBmaW5kIGVsZW1lbnRzIGluc2lkZSBh
biB1c2VyIGFnZW50IHNoYWRvdyB0cmVlCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29u
ZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0
UmVsYXkvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwkocmV2aXNpb24gMjExMTQyKQorKysg
VG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcJKG5vbmV4
aXN0ZW50KQpAQCAtMSw2OCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0v
LyBhcmUgbWV0OgotLy8gMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0vLyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotLy8gRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS8v
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotLy8gUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLS8vIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotLy8gRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotLy8gUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0vLyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0vLyBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotI2luY2x1ZGUgIi4uLy4uLy4uLy4uL0ludGVybmFsL0NvbmZpZ3VyYXRpb25zL0hhdmVJ
bnRlcm5hbFNESy54Y2NvbmZpZyIKLQotVVNFX0lOVEVSTkFMX1NESyA9ICQoVVNFX0lOVEVSTkFM
X1NES18kKENPTkZJR1VSQVRJT04pKTsKLVVTRV9JTlRFUk5BTF9TREtfUHJvZHVjdGlvbiA9IFlF
UzsKLVVTRV9JTlRFUk5BTF9TREtfRGVidWcgPSAkKEhBVkVfSU5URVJOQUxfU0RLKTsKLVVTRV9J
TlRFUk5BTF9TREtfUmVsZWFzZSA9ICQoSEFWRV9JTlRFUk5BTF9TREspOwotCi1DTEFOR19DWFhf
TEFOR1VBR0VfU1RBTkRBUkQgPSBnbnUrKzB4OwotQ0xBTkdfRU5BQkxFX09CSkNfQVJDID0gWUVT
OwotQ0xBTkdfV0FSTl9DWFgwWF9FWFRFTlNJT05TID0gTk87Ci1IRUFERVJfU0VBUkNIX1BBVEhT
ID0gJChCVUlMVF9QUk9EVUNUU19ESVIpL3Vzci9sb2NhbC9pbmNsdWRlICQoV0VCQ09SRV9QUklW
QVRFX0hFQURFUlNfRElSKS9Gb3J3YXJkaW5nSGVhZGVycyAkKFNSQ1JPT1QpLy4uLy4uL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pY3UgJChORVhUX1JPT1QpL3Vzci9sb2NhbC9pbmNsdWRlL1dlYkNv
cmVUZXN0U3VwcG9ydDsKLUdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAkKERFQlVHX0RF
RklORVMpIEVOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVDsKLURFQlVHX0lORk9STUFUSU9OX0ZPUk1B
VCA9IGR3YXJmLXdpdGgtZHN5bTsKLVBSRUJJTkRJTkcgPSBOTwotR0NDX0NfTEFOR1VBR0VfU1RB
TkRBUkQgPSBnbnU5OQotR0NDX0VOQUJMRV9DUFBfRVhDRVBUSU9OUyA9IE5POwotR0NDX0VOQUJM
RV9DUFBfUlRUSSA9IE5POwotR0NDX1BSRUNPTVBJTEVfUFJFRklYX0hFQURFUiA9IFlFUwotR0ND
X1RSRUFUX1dBUk5JTkdTX0FTX0VSUk9SUyA9IFlFUwotR0NDX1ZFUlNJT04gPSBjb20uYXBwbGUu
Y29tcGlsZXJzLmxsdm0uY2xhbmcuMV8wOwotR0NDX1dBUk5fQUJPVVRfREVQUkVDQVRFRF9GVU5D
VElPTlMgPSBOTwotR0NDX1dBUk5fVU5VU0VEX0ZVTkNUSU9OID0gWUVTCi1HQ0NfV0FSTl9VTlVT
RURfVkFSSUFCTEUgPSBZRVMKLUdDQ19XQVJOXzY0X1RPXzMyX0JJVF9DT05WRVJTSU9OW2FyY2g9
eDg2XzY0XSA9IE5POwotV0FSTklOR19DRkxBR1MgPSAtV2FsbCAtVyAtV25vLXVudXNlZC1wYXJh
bWV0ZXIgLVd1bmRlZgotCi1ERUJVR19ERUZJTkVTX2RlYnVnID0gOwotREVCVUdfREVGSU5FU19u
b3JtYWwgPSBOREVCVUc7Ci1ERUJVR19ERUZJTkVTID0gJChERUJVR19ERUZJTkVTXyQoQ1VSUkVO
VF9WQVJJQU5UKSk7Ci0KLVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SID0gJChUQVJHRVRf
TUFDX09TX1hfVkVSU0lPTl9NQUpPUiQoTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUOnN1ZmZpeDpp
ZGVudGlmaWVyKSk7Ci1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUl8xMCA9IDEwMTAwMDsK
LVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SXzExID0gMTAxMTAwOwotVEFSR0VUX01BQ19P
U19YX1ZFUlNJT05fTUFKT1JfMTIgPSAxMDEyMDA7Ci1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9N
QUpPUl8xMyA9IDEwMTMwMDsKLQotU0RLUk9PVCA9IG1hY29zeC5pbnRlcm5hbDsKLQotU1VQUE9S
VEVEX1BMQVRGT1JNUyA9IG1hY29zeDsKLQotVE9PTENIQUlOUyA9IGRlZmF1bHQ7Ci0KLU9USEVS
X0NGTEFHUyA9ICQoQVNBTl9PVEhFUl9DRkxBR1MpOwotT1RIRVJfQ1BMVVNQTFVTRkxBR1MgPSAk
KEFTQU5fT1RIRVJfQ1BMVVNQTFVTRkxBR1MpOwotT1RIRVJfTERGTEFHUyA9ICQoQVNBTl9PVEhF
Ul9MREZMQUdTKTsKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9E
ZWJ1Z1JlbGVhc2UueGNjb25maWcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5
L0NvbmZpZ3VyYXRpb25zL0RlYnVnUmVsZWFzZS54Y2NvbmZpZwkocmV2aXNpb24gMjExMTQyKQor
KysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0RlYnVnUmVsZWFzZS54Y2Nv
bmZpZwkobm9uZXhpc3RlbnQpCkBAIC0xLDQyICswLDAgQEAKLS8vIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLwotLy8gUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLS8vIGFyZSBtZXQ6Ci0vLyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLS8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLS8vICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0vLwotLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0vLyBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotLy8gSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0vLyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotLy8gQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0vLyBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0vLyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLS8vIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLS8vIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0v
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSAiQmFzZS54Y2NvbmZpZyIKLQotQVJDSFMgPSAkKEFS
Q0hTX1NUQU5EQVJEXzY0X0JJVCk7Ci0KLVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SID0g
JChNQUNfT1NfWF9WRVJTSU9OX01BSk9SKTsKLQotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUID0g
JChNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfJChUQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpP
UikpCi1NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfMTAxMDAwID0gMTAuMTA7Ci1NQUNPU1hfREVQ
TE9ZTUVOVF9UQVJHRVRfMTAxMTAwID0gMTAuMTE7Ci1NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRf
MTAxMjAwID0gMTAuMTI7Ci1NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfMTAxMzAwID0gMTAuMTM7
Ci0KLUZSQU1FV09SS19TRUFSQ0hfUEFUSFMgPSAkKERFVkVMT1BFUl9ESVIpL0xpYnJhcnkvUHJp
dmF0ZUZyYW1ld29ya3M7Ci1MRF9SVU5QQVRIX1NFQVJDSF9QQVRIUyA9ICQoREVWRUxPUEVSX0RJ
UikvTGlicmFyeS9Qcml2YXRlRnJhbWV3b3JrczsKLU9USEVSX0xERkxBR1MgPSAtZnJhbWV3b3Jr
IENvcmVTaW11bGF0b3IgLWZyYW1ld29yayBBcHBLaXQ7Ci0KLVNES1JPT1QgPSAkKFNES1JPT1Rf
bWFjb3N4XyQoVVNFX0lOVEVSTkFMX1NESykpOwotU0RLUk9PVF9tYWNvc3hfID0gbWFjb3N4Owot
U0RLUk9PVF9tYWNvc3hfWUVTID0gbWFjb3N4LmludGVybmFsOwpJbmRleDogVG9vbHMvTGF5b3V0
VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9Db3JlU2ltdWxhdG9yU1BJLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9Db3JlU2ltdWxhdG9yU1BJ
LmgJKHJldmlzaW9uIDIxMTE0MikKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0
UmVsYXkvQ29yZVNpbXVsYXRvclNQSS5oCShub25leGlzdGVudCkKQEAgLTEsNTggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZiBfX2hhc19pbmNsdWRlKDxDb3JlU2ltdWxhdG9yL0NvcmVT
aW11bGF0b3IuaD4pCi0KLS8qIEZJWE1FOiBSZW1vdmUgdGhlIGJlbG93ICNkZWZpbmUgb25jZSB3
ZSByZXF1aXJlIFhjb2RlIDcuMyB3aXRoIGlPUyA5LjMgU0RLIG9yIG5ld2VyLiAqLwotI2RlZmlu
ZSBfX2NvcmVzaW1fdW5hdmFpbGFibGVfbXNnKG1zZykKLSNpbXBvcnQgPENvcmVTaW11bGF0b3Iv
Q29yZVNpbXVsYXRvci5oPgotCi0vKiBGSVhNRTogQWx3YXlzIHVzZSBTaW1TZXJ2aWNlQ29udGV4
dCBvbmNlIHdlIHJlcXVpcmUgWGNvZGUgNy4zIHdpdGggaU9TIDkuMyBTREsgb3IgbmV3ZXIuICov
Ci0jZGVmaW5lIFVTRV9TSU1fU0VSVklDRV9DT05URVhUIGRlZmluZWQoQ09SRVNJTV9BUElfTUFY
X0FMTE9XRUQpCi0KLSNlbHNlCi0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgot
Ci0jZGVmaW5lIFVTRV9TSU1fU0VSVklDRV9DT05URVhUIDEKLQotI2RlZmluZSBrU2ltRGV2aWNl
TGF1bmNoQXBwbGljYXRpb25Bcmd1bWVudHMgQCJhcmd1bWVudHMiCi0jZGVmaW5lIGtTaW1EZXZp
Y2VMYXVuY2hBcHBsaWNhdGlvbkVudmlyb25tZW50IEAiZW52aXJvbm1lbnQiCi0KLUBpbnRlcmZh
Y2UgU2ltRGV2aWNlIDogTlNPYmplY3QKLS0gKEJPT0wpaW5zdGFsbEFwcGxpY2F0aW9uOihOU1VS
TCAqKWluc3RhbGxVUkwgd2l0aE9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKW9wdGlvbnMgZXJyb3I6
KE5TRXJyb3IgKiBfX2F1dG9yZWxlYXNpbmcgKillcnJvcjsKLS0gKHBpZF90KWxhdW5jaEFwcGxp
Y2F0aW9uV2l0aElEOihOU1N0cmluZyAqKWJ1bmRsZUlEIG9wdGlvbnM6KE5TRGljdGlvbmFyeSAq
KW9wdGlvbnMgZXJyb3I6KE5TRXJyb3IgKiBfX2F1dG9yZWxlYXNpbmcgKillcnJvcjsKLUBlbmQK
LQotQGludGVyZmFjZSBTaW1EZXZpY2VTZXQgOiBOU09iamVjdAotQHByb3BlcnR5IChyZWFkb25s
eSwgY29weSkgTlNEaWN0aW9uYXJ5ICpkZXZpY2VzQnlVRElEOwotQGVuZAotCi1AaW50ZXJmYWNl
IFNpbVNlcnZpY2VDb250ZXh0IDogTlNPYmplY3QKLSsoU2ltU2VydmljZUNvbnRleHQgKilzaGFy
ZWRTZXJ2aWNlQ29udGV4dEZvckRldmVsb3BlckRpcjooTlNTdHJpbmcgKilkZXZlbG9wZXJEaXIg
ZXJyb3I6KE5TRXJyb3IgKiBfX2F1dG9yZWxlYXNpbmcgKillcnJvcjsKLS0oU2ltRGV2aWNlU2V0
ICopZGVmYXVsdERldmljZVNldFdpdGhFcnJvcjooTlNFcnJvciAqIF9fYXV0b3JlbGVhc2luZyAq
KWVycm9yOwotQGVuZAotCi0jZW5kaWYKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlv
dXRUZXN0UmVsYXkvTFRQaXBlUmVsYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0
UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5LmgJKHJldmlzaW9uIDIxMTE0MikKKysr
IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRQaXBlUmVsYXkuaAkobm9u
ZXhpc3RlbnQpCkBAIC0xLDM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIExUUGlwZVJl
bGF5X2gKLSNkZWZpbmUgTFRQaXBlUmVsYXlfaAotCi0jaW1wb3J0ICJMVFJlbGF5LmgiCi0KLUBp
bnRlcmZhY2UgTFRQaXBlUmVsYXkgOiBOU09iamVjdCA8TFRSZWxheT4KLUBwcm9wZXJ0eSAod2Vh
aykgaWQ8TFRSZWxheURlbGVnYXRlPiByZWxheURlbGVnYXRlOwotLSAoaWQpaW5pdFdpdGhQcmVm
aXg6KE5TU3RyaW5nICopcHJlZml4OwotQGVuZAotCi0jZW5kaWYKSW5kZXg6IFRvb2xzL0xheW91
dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRQaXBlUmVsYXkubQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0JKHJldmlz
aW9uIDIxMTE0MikKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRQ
aXBlUmVsYXkubQkobm9uZXhpc3RlbnQpCkBAIC0xLDE1OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2ltcG9ydCAiTFRQaXBlUmVsYXkuaCIKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQotQGlu
dGVyZmFjZSBMVFBpcGVSZWxheSAoKQotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU1N0
cmluZyAqZmlmb1ByZWZpeDsKLUBwcm9wZXJ0eSAoc3Ryb25nKSBOU091dHB1dFN0cmVhbSAqc3Rh
bmRhcmRJbnB1dFBpcGU7Ci1AcHJvcGVydHkgKHN0cm9uZykgTlNJbnB1dFN0cmVhbSAqc3RhbmRh
cmRPdXRwdXRQaXBlOwotQHByb3BlcnR5IChzdHJvbmcpIE5TSW5wdXRTdHJlYW0gKnN0YW5kYXJk
RXJyb3JQaXBlOwotCi0tICh2b2lkKWNyZWF0ZUZJRk9zOwotLSAodm9pZClkZXN0cm95RklGT3M7
Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBMVFBpcGVSZWxheQotCi0tIChOU1N0cmluZyAqKWlu
UGlwZVBhdGgKLXsKLSAgICByZXR1cm4gW19maWZvUHJlZml4IHN0cmluZ0J5QXBwZW5kaW5nU3Ry
aW5nOkAiX0lOIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopb3V0UGlwZVBhdGgKLXsKLSAgICByZXR1
cm4gW19maWZvUHJlZml4IHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOkAiX09VVCJdOwotfQotCi0t
IChOU1N0cmluZyAqKWVycm9yUGlwZVBhdGgKLXsKLSAgICByZXR1cm4gW19maWZvUHJlZml4IHN0
cmluZ0J5QXBwZW5kaW5nU3RyaW5nOkAiX0VSUk9SIl07Ci19Ci0KLS0gKE5TT3V0cHV0U3RyZWFt
ICopIG91dHB1dFN0cmVhbQotewotICAgIHJldHVybiBfc3RhbmRhcmRJbnB1dFBpcGU7Ci19Ci0K
LS0gKGlkKWluaXRXaXRoUHJlZml4OihOU1N0cmluZyAqKXByZWZpeAotewotICAgIGlmICgoc2Vs
ZiA9IFtzdXBlciBpbml0XSkpIHsKLSAgICAgICAgX2ZpZm9QcmVmaXggPSBwcmVmaXg7Ci0gICAg
ICAgIFtzZWxmIGRlc3Ryb3lGSUZPc107Ci0gICAgfQotICAgIHJldHVybiBzZWxmOwotfQotCi0t
ICh2b2lkKXNldHVwCi17Ci0gICAgW3NlbGYgZGVzdHJveUZJRk9zXTsKLSAgICBbc2VsZiBjcmVh
dGVGSUZPc107Ci19Ci0KLS0gKHZvaWQpdGVhckRvd24KLXsKLSAgICBbc2VsZiBkZXN0cm95RklG
T3NdOwotfQotCi0tKHZvaWQpIGNvbm5lY3QKLXsKLSAgICBfc3RhbmRhcmRJbnB1dFBpcGUgPSBb
TlNPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtVG9GaWxlQXRQYXRoOltzZWxmIGluUGlwZVBhdGhd
IGFwcGVuZDpZRVNdOwotICAgIF9zdGFuZGFyZE91dHB1dFBpcGUgPSBbTlNJbnB1dFN0cmVhbSBp
bnB1dFN0cmVhbVdpdGhGaWxlQXRQYXRoOltzZWxmIG91dFBpcGVQYXRoXV07Ci0gICAgX3N0YW5k
YXJkRXJyb3JQaXBlID0gW05TSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW1XaXRoRmlsZUF0UGF0aDpb
c2VsZiBlcnJvclBpcGVQYXRoXV07Ci0KLSAgICBbW3NlbGYgc3RhbmRhcmRJbnB1dFBpcGVdIHNl
dERlbGVnYXRlOnNlbGZdOwotICAgIFtbc2VsZiBzdGFuZGFyZE91dHB1dFBpcGVdIHNldERlbGVn
YXRlOnNlbGZdOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yUGlwZV0gc2V0RGVsZWdhdGU6c2Vs
Zl07Ci0KLSAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRQaXBlXSBzY2hlZHVsZUluUnVuTG9vcDpb
TlNSdW5Mb29wIG1haW5SdW5Mb29wXSBmb3JNb2RlOk5TRGVmYXVsdFJ1bkxvb3BNb2RlXTsKLSAg
ICBbW3NlbGYgc3RhbmRhcmRFcnJvclBpcGVdIHNjaGVkdWxlSW5SdW5Mb29wOltOU1J1bkxvb3Ag
bWFpblJ1bkxvb3BdIGZvck1vZGU6TlNEZWZhdWx0UnVuTG9vcE1vZGVdOwotCi0gICAgW1tzZWxm
IHN0YW5kYXJkSW5wdXRQaXBlXSBvcGVuXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRQaXBl
XSBvcGVuXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRFcnJvclBpcGVdIG9wZW5dOwotCi0gICAgW1tz
ZWxmIHJlbGF5RGVsZWdhdGVdIGRpZENvbm5lY3RdOwotfQotCi0tICh2b2lkKWRpc2Nvbm5lY3QK
LXsKLSAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRQaXBlXSBjbG9zZV07Ci0gICAgW1tzZWxmIHN0
YW5kYXJkRXJyb3JQaXBlXSBjbG9zZV07Ci0gICAgW1tzZWxmIHN0YW5kYXJkSW5wdXRQaXBlXSBj
bG9zZV07Ci0gICAgW1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZERpc2Nvbm5lY3RdOwotfQotCi0t
ICh2b2lkKWNyZWF0ZUZJRk9zCi17Ci0gICAgbWtmaWZvKFtbc2VsZiBpblBpcGVQYXRoXSBVVEY4
U3RyaW5nXSwgMDY2Nik7Ci0gICAgbWtmaWZvKFtbc2VsZiBvdXRQaXBlUGF0aF0gVVRGOFN0cmlu
Z10sIDA2NjYpOwotICAgIG1rZmlmbyhbW3NlbGYgZXJyb3JQaXBlUGF0aF0gVVRGOFN0cmluZ10s
IDA2NjYpOwotfQotCi0tICh2b2lkKWRlc3Ryb3lGSUZPcwotewotICAgIHVubGluayhbW3NlbGYg
aW5QaXBlUGF0aF0gVVRGOFN0cmluZ10pOwotICAgIHVubGluayhbW3NlbGYgb3V0UGlwZVBhdGhd
IFVURjhTdHJpbmddKTsKLSAgICB1bmxpbmsoW1tzZWxmIGVycm9yUGlwZVBhdGhdIFVURjhTdHJp
bmddKTsKLX0KLQotLSAodm9pZCkgcmVsYXlTdHJlYW06KE5TSW5wdXRTdHJlYW0gKilzdHJlYW0K
LXsKLSAgICB1aW50OF90IGJ5dGVzWzEwMjRdOwotICAgIE5TSW50ZWdlciBieXRlc1JlYWQgPSBb
c3RyZWFtIHJlYWQ6Ynl0ZXMgbWF4TGVuZ3RoOjEwMjRdOwotICAgIE5TRGF0YSAqZGF0YSA9IFtO
U0RhdGEgZGF0YVdpdGhCeXRlczpieXRlcyBsZW5ndGg6Ynl0ZXNSZWFkXTsKLQotICAgIGlmIChz
dHJlYW0gPT0gW3NlbGYgc3RhbmRhcmRPdXRwdXRQaXBlXSkKLSAgICAgICAgW1tzZWxmIHJlbGF5
RGVsZWdhdGVdIGRpZFJlY2VpdmVTdGRvdXREYXRhOmRhdGFdOwotICAgIGVsc2UKLSAgICAgICAg
W1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZFJlY2VpdmVTdGRlcnJEYXRhOmRhdGFdOwotfQotCi0t
ICh2b2lkKXN0cmVhbTooTlNTdHJlYW0gKilhU3RyZWFtIGhhbmRsZUV2ZW50OihOU1N0cmVhbUV2
ZW50KWV2ZW50Q29kZQotewotICAgIHN3aXRjaCAoZXZlbnRDb2RlKSB7Ci0gICAgY2FzZSBOU1N0
cmVhbUV2ZW50Tm9uZToKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOU1N0cmVhbUV2ZW50SGFz
Qnl0ZXNBdmFpbGFibGU6Ci0gICAgICAgIFtzZWxmIHJlbGF5U3RyZWFtOihOU0lucHV0U3RyZWFt
ICopYVN0cmVhbV07Ci0gICAgY2FzZSBOU1N0cmVhbUV2ZW50SGFzU3BhY2VBdmFpbGFibGU6Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlNTdHJlYW1FdmVudE9wZW5Db21wbGV0ZWQ6Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgTlNTdHJlYW1FdmVudEVuZEVuY291bnRlcmVkOgotICAgICAg
ICBbW3NlbGYgcmVsYXlEZWxlZ2F0ZV0gZGlkQ3Jhc2hXaXRoTWVzc2FnZTpuaWxdOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnRFcnJvck9jY3VycmVkOgotICAgICAgICBb
W3NlbGYgcmVsYXlEZWxlZ2F0ZV0gZGlkQ3Jhc2hXaXRoTWVzc2FnZTpbW2FTdHJlYW0gc3RyZWFt
RXJyb3JdIGRlc2NyaXB0aW9uXV07Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotQGVuZApJ
bmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5
LmgJKHJldmlzaW9uIDIxMTE0MikKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0
UmVsYXkvTFRSZWxheS5oCShub25leGlzdGVudCkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgTFRSZWxheV9oCi0jZGVmaW5lIExUUmVsYXlfaAotCi0jaW1wb3J0IDxGb3Vu
ZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotQHByb3RvY29sIExUUmVsYXlEZWxlZ2F0ZSA8TlNPYmpl
Y3Q+Ci0tICh2b2lkKWRpZENvbm5lY3Q7Ci0tICh2b2lkKWRpZERpc2Nvbm5lY3Q7Ci0tICh2b2lk
KWRpZENyYXNoV2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZTsKLS0gKHZvaWQpZGlkUmVj
ZWl2ZVN0ZG91dERhdGE6KE5TRGF0YSAqKWRhdGE7Ci0tICh2b2lkKWRpZFJlY2VpdmVTdGRlcnJE
YXRhOihOU0RhdGEgKilkYXRhOwotQGVuZAotCi1AcHJvdG9jb2wgTFRSZWxheSA8TlNPYmplY3Qs
IE5TU3RyZWFtRGVsZWdhdGU+Ci0tICh2b2lkKXNldHVwOwotLSAodm9pZCl0ZWFyRG93bjsKLS0g
KHZvaWQpY29ubmVjdDsKLS0gKHZvaWQpZGlzY29ubmVjdDsKLUBwcm9wZXJ0eSAod2VhaykgaWQ8
TFRSZWxheURlbGVnYXRlPiByZWxheURlbGVnYXRlOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ry
b25nKSBOU091dHB1dFN0cmVhbSAqb3V0cHV0U3RyZWFtOwotQGVuZAotCi0jZW5kaWYKSW5kZXg6
IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xU
UmVsYXlDb250cm9sbGVyLmgJKHJldmlzaW9uIDIxMTE0MikKKysrIFRvb2xzL0xheW91dFRlc3RS
ZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIuaAkobm9uZXhpc3RlbnQpCkBA
IC0xLDQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotI2lmbmRlZiBMVFJlbGF5Q29udHJvbGxlcl9oCi0j
ZGVmaW5lIExUUmVsYXlDb250cm9sbGVyX2gKLQotI2ltcG9ydCAiTFRSZWxheS5oIgotCi0jaW1w
b3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotQGNsYXNzIFNpbURldmljZTsKLQotQGlu
dGVyZmFjZSBMVFJlbGF5Q29udHJvbGxlciA6IE5TT2JqZWN0IDxMVFJlbGF5RGVsZWdhdGU+Ci0t
IChpZClpbml0V2l0aERldmljZTooU2ltRGV2aWNlICopZGV2aWNlIHByb2R1Y3REaXI6KE5TU3Ry
aW5nICopcHJvZHVjdERpciBhcHBQYXRoOihOU1N0cmluZyAqKWFwcFBhdGggZGV2aWNlVURJRDoo
TlNVVUlEICopdWRpZCBkdW1wVG9vbEFyZ3VtZW50czooTlNBcnJheSAqKWFyZ3VtZW50czsKLS0g
KHZvaWQpc3RhcnQ7Ci0tICh2b2lkKWZpbmlzaDsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29s
cy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLm0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5
Q29udHJvbGxlci5tCShyZXZpc2lvbiAyMTExNDIpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkv
TGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLm0JKG5vbmV4aXN0ZW50KQpAQCAtMSwy
NzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgIkxUUmVsYXlDb250cm9sbGVyLmgiCi0K
LSNpbXBvcnQgIkNvcmVTaW11bGF0b3JTUEkuaCIKLSNpbXBvcnQgIkxUUGlwZVJlbGF5LmgiCi0j
aW1wb3J0IDxBcHBLaXQvQXBwS2l0Lmg+Ci0jaW1wb3J0IDxjcnRfZXh0ZXJucy5oPgotCi1AaW50
ZXJmYWNlIExUUmVsYXlDb250cm9sbGVyICgpCi1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcp
IGRpc3BhdGNoX3NvdXJjZV90IHN0YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJjZTsKLUBwcm9wZXJ0
eSAocmVhZG9ubHksIHN0cm9uZykgTlNGaWxlSGFuZGxlICpzdGFuZGFyZE91dHB1dDsKLUBwcm9w
ZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNGaWxlSGFuZGxlICpzdGFuZGFyZEVycm9yOwotQHBy
b3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU1N0cmluZyAqaXBjSWRlbnRpZmllcjsKLUBwcm9w
ZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKmFwcEJ1bmRsZUlkZW50aWZpZXI7Ci1A
cHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TU3RyaW5nICphcHBQYXRoOwotQHByb3BlcnR5
IChyZWFkb25seSwgc3Ryb25nKSBOU1VVSUQgKmRldmljZVVESUQ7Ci1AcHJvcGVydHkgKHJlYWRv
bmx5LCBzdHJvbmcpIE5TQXJyYXkgKmR1bXBUb29sQXJndW1lbnRzOwotQHByb3BlcnR5IChyZWFk
b25seSwgc3Ryb25nKSBOU1N0cmluZyAqcHJvZHVjdERpcjsKLUBwcm9wZXJ0eSAoc3Ryb25nKSBT
aW1EZXZpY2UgKmRldmljZTsKLUBwcm9wZXJ0eSAoc3Ryb25nKSBpZDxMVFJlbGF5PiByZWxheTsK
LUBwcm9wZXJ0eSBwaWRfdCBwaWQ7Ci1AcHJvcGVydHkgKHN0cm9uZykgZGlzcGF0Y2hfc291cmNl
X3QgYXBwRGlzcGF0Y2hTb3VyY2U7Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBMVFJlbGF5Q29u
dHJvbGxlcgotCi0tIChpZClpbml0V2l0aERldmljZTooU2ltRGV2aWNlICopZGV2aWNlIHByb2R1
Y3REaXI6KE5TU3RyaW5nICopcHJvZHVjdERpciBhcHBQYXRoOihOU1N0cmluZyAqKWFwcFBhdGgg
ZGV2aWNlVURJRDooTlNVVUlEICopdWRpZCBkdW1wVG9vbEFyZ3VtZW50czooTlNBcnJheSAqKWFy
Z3VtZW50cwotewotICAgIGlmICgoc2VsZiA9IFtzdXBlciBpbml0XSkpIHsKLSAgICAgICAgX2Rl
dmljZSA9IGRldmljZTsKLSAgICAgICAgX3Byb2R1Y3REaXIgPSBwcm9kdWN0RGlyOwotICAgICAg
ICBfYXBwUGF0aCA9IGFwcFBhdGg7Ci0gICAgICAgIF9hcHBCdW5kbGVJZGVudGlmaWVyID0gW1tO
U0J1bmRsZSBidW5kbGVXaXRoUGF0aDphcHBQYXRoXSBidW5kbGVJZGVudGlmaWVyXTsKLSAgICAg
ICAgX2RldmljZVVESUQgPSB1ZGlkOwotICAgICAgICBfZHVtcFRvb2xBcmd1bWVudHMgPSBhcmd1
bWVudHM7Ci0gICAgICAgIF9zdGFuZGFyZElucHV0RGlzcGF0Y2hTb3VyY2UgPSBkaXNwYXRjaF9z
b3VyY2VfY3JlYXRlKERJU1BBVENIX1NPVVJDRV9UWVBFX1JFQUQsIFNURElOX0ZJTEVOTywgMCwg
ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSk7Ci0gICAgICAgIF9zdGFuZGFyZE91dHB1dCA9IFtO
U0ZpbGVIYW5kbGUgZmlsZUhhbmRsZVdpdGhTdGFuZGFyZE91dHB1dF07Ci0gICAgICAgIF9zdGFu
ZGFyZEVycm9yID0gW05TRmlsZUhhbmRsZSBmaWxlSGFuZGxlV2l0aFN0YW5kYXJkRXJyb3JdOwot
Ci0gICAgICAgIGRpc3BhdGNoX3NvdXJjZV9zZXRfZXZlbnRfaGFuZGxlcihfc3RhbmRhcmRJbnB1
dERpc3BhdGNoU291cmNlLCBeewotICAgICAgICAgICAgdWludDhfdCBidWZmZXJbMTAyNF07Ci0g
ICAgICAgICAgICBzc2l6ZV90IGxlbiA9IHJlYWQoU1RESU5fRklMRU5PLCBidWZmZXIsIHNpemVv
ZihidWZmZXIpKTsKLSAgICAgICAgICAgIGlmIChsZW4gPiAwKSB7Ci0gICAgICAgICAgICAgICAg
QHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIFtbW3NlbGYgcmVsYXldIG91dHB1dFN0cmVhbV0g
d3JpdGU6YnVmZmVyIG1heExlbmd0aDpsZW5dOwotICAgICAgICAgICAgICAgIH0gQGNhdGNoIChO
U0V4Y2VwdGlvbiAqZSkgewotICAgICAgICAgICAgICAgICAgICAvLyBCcm9rZW4gcGlwZSAtIHRo
ZSBkdW1wIHRvb2wgY3Jhc2hlZC4gVGltZSB0byBkaWUuCi0gICAgICAgICAgICAgICAgICAgIFtz
ZWxmIGRpZENyYXNoV2l0aE1lc3NhZ2U6bmlsXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIEVPRiBSZWNlaXZlZCBvbiB0aGUgcmVs
YXkncyBzdGFuZGFyZCBpbnB1dC4KLSAgICAgICAgICAgICAgICBbc2VsZiBmaW5pc2hdOwotICAg
ICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBfcmVsYXkgPSBbW0xUUGlwZVJlbGF5
IGFsbG9jXSBpbml0V2l0aFByZWZpeDpbQCIvdG1wIiBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21w
b25lbnQ6c2VsZi5pcGNJZGVudGlmaWVyXV07Ci0gICAgICAgIFtfcmVsYXkgc2V0UmVsYXlEZWxl
Z2F0ZTpzZWxmXTsKLSAgICB9Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKE5TU3RyaW5nICop
aXBjSWRlbnRpZmllcgotewotICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpA
IiVALSVAIiwgc2VsZi5hcHBCdW5kbGVJZGVudGlmaWVyLCBzZWxmLmRldmljZVVESUQuVVVJRFN0
cmluZ107Ci19Ci0KLS0gKE5TU3RyaW5nICopcHJvY2Vzc05hbWUKLXsKLSAgICByZXR1cm4gW3Nl
bGYuYXBwQnVuZGxlSWRlbnRpZmllciBjb21wb25lbnRzU2VwYXJhdGVkQnlTdHJpbmc6QCIuIl0u
bGFzdE9iamVjdDsKLX0KLQotLSAodm9pZClkaWRSZWNlaXZlU3Rkb3V0RGF0YTooTlNEYXRhICop
ZGF0YQotewotICAgIEB0cnkgewotICAgICAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRdIHdyaXRl
RGF0YTpkYXRhXTsKLSAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24gKmV4Y2VwdGlvbikgewotICAg
ICAgICAvLyBOU0ZpbGVIYW5kbGVPcGVyYXRpb25FeGNlcHRpb24KLSAgICAgICAgLy8gQnJva2Vu
IHBpcGUgLSB0aGUgdGVzdCBoYXJuZXNzIHN0b3BwZWQgbGlzdGVuaW5nIHRvIHVzLAotICAgICAg
ICAvLyBwcm9iYWJseSBiZWNhdXNlIHdlIHRpbWVkIG91dCBvciBhIHJ1biB3YXMgY2FuY2VsZWQu
Ci0gICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpZGlkUmVj
ZWl2ZVN0ZGVyckRhdGE6KE5TRGF0YSAqKWRhdGEKLXsKLSAgICBAdHJ5IHsKLSAgICAgICAgW1tz
ZWxmIHN0YW5kYXJkRXJyb3JdIHdyaXRlRGF0YTpkYXRhXTsKLSAgICB9IEBjYXRjaCAoTlNFeGNl
cHRpb24gKmV4Y2VwdGlvbikgewotICAgICAgICAvLyBOU0ZpbGVIYW5kbGVPcGVyYXRpb25FeGNl
cHRpb24KLSAgICAgICAgLy8gQnJva2VuIHBpcGUgLSB0aGUgdGVzdCBoYXJuZXNzIHN0b3BwZWQg
bGlzdGVuaW5nIHRvIHVzLAotICAgICAgICAvLyBwcm9iYWJseSBiZWNhdXNlIHdlIHRpbWVkIG91
dCBvciBhIHJ1biB3YXMgY2FuY2VsZWQuCi0gICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAg
ICB9Ci19Ci0KLS0gKHZvaWQpZGlkRGlzY29ubmVjdAotewotICAgIGRpc3BhdGNoX3N1c3BlbmQo
W3NlbGYgc3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNlXSk7Ci19Ci0KLS0gKHZvaWQpZGlkQ29u
bmVjdAotewotICAgIGRpc3BhdGNoX3Jlc3VtZShbc2VsZiBzdGFuZGFyZElucHV0RGlzcGF0Y2hT
b3VyY2VdKTsKLX0KLQotLSAodm9pZClkaWRDcmFzaFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1l
c3NhZ2UKLXsKLSAgICBbW3NlbGYgcmVsYXldIGRpc2Nvbm5lY3RdOwotICAgIE5TU3RyaW5nICpj
cmFzaE1lc3NhZ2UgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIlxuI0NSQVNIRUQgLSAl
QCAocGlkICVkKVxuIiwgW3NlbGYgcHJvY2Vzc05hbWVdLCBbc2VsZiBwaWRdXTsKLQotICAgIGlm
IChtZXNzYWdlKQotICAgICAgICBjcmFzaE1lc3NhZ2UgPSBbY3Jhc2hNZXNzYWdlIHN0cmluZ0J5
QXBwZW5kaW5nRm9ybWF0OkAiJUBcbiIsIG1lc3NhZ2VdOwotCi0gICAgW1tzZWxmIHN0YW5kYXJk
RXJyb3JdIHdyaXRlRGF0YTpbY3Jhc2hNZXNzYWdlIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0
cmluZ0VuY29kaW5nXV07Ci0gICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JdIGNsb3NlRmlsZV07Ci0g
ICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0XSBjbG9zZUZpbGVdOwotICAgIGV4aXQoRVhJVF9GQUlM
VVJFKTsKLX0KLQotLSAodm9pZClpbnN0YWxsQXBwCi17Ci0gICAgTlNEaWN0aW9uYXJ5ICppbnN0
YWxsT3B0aW9ucyA9IEB7Ci0gICAgICAgIChOU1N0cmluZyAqKWtDRkJ1bmRsZUlkZW50aWZpZXJL
ZXk6IHNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciwKLSAgICB9OwotCi0gICAgTlNFcnJvciAqZXJy
b3IgPSBuaWw7Ci0gICAgQk9PTCBpbnN0YWxsZWQgPSBbc2VsZi5kZXZpY2UgaW5zdGFsbEFwcGxp
Y2F0aW9uOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6c2VsZi5hcHBQYXRoXSB3aXRoT3B0aW9uczpp
bnN0YWxsT3B0aW9ucyBlcnJvcjomZXJyb3JdOwotICAgIGlmICghaW5zdGFsbGVkKSB7Ci0gICAg
ICAgIE5TTG9nKEAiQ291bGRuJ3QgaW5zdGFsbCAlQDogJUAiLCBzZWxmLmFwcFBhdGgsIGVycm9y
LmRlc2NyaXB0aW9uKTsKLSAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0KLX0KLQot
LSAodm9pZClraWxsQXBwCi17Ci0gICAgZGlzcGF0Y2hfc291cmNlX3QgZGlzcGF0Y2ggPSBbc2Vs
ZiBhcHBEaXNwYXRjaFNvdXJjZV07Ci0KLSAgICBpZiAoZGlzcGF0Y2gpCi0gICAgICAgIGRpc3Bh
dGNoX3NvdXJjZV9jYW5jZWwoZGlzcGF0Y2gpOwotCi0gICAgaWYgKFtzZWxmIHBpZF0gPiAxKSB7
Ci0gICAgICAgIGtpbGwoc2VsZi5waWQsIFNJR0tJTEwpOwotICAgICAgICBbc2VsZiBzZXRQaWQ6
LTFdOwotICAgIH0KLSAgICBbc2VsZiBzZXRBcHBEaXNwYXRjaFNvdXJjZTpuaWxdOwotfQotCi0t
IChOU0RpY3Rpb25hcnkgKilfZW52aXJvbm1lbnRWYXJpYWJsZXMKLXsKLSAgICBzdGF0aWMgTlNE
aWN0aW9uYXJ5ICplbnZpcm9ubWVudFZhcmlhYmxlczsKLSAgICBzdGF0aWMgZGlzcGF0Y2hfb25j
ZV90IG9uY2U7Ci0KLSAgICBkaXNwYXRjaF9vbmNlKCZvbmNlLCBeewotICAgICAgICBOU1N0cmlu
ZyAqcHJvZHVjdERpcmVjdG9yeSA9IFtzZWxmIHByb2R1Y3REaXJdOwotCi0gICAgICAgIE5TTXV0
YWJsZURpY3Rpb25hcnkgKmRpY3Rpb25hcnkgPSBbQHsKLSAgICAgICAgICAgIEAiSVBDX0lERU5U
SUZJRVIiOiBzZWxmLmlwY0lkZW50aWZpZXIsCi0gICAgICAgICAgICBAIkRZTERfRlJBTUVXT1JL
X1BBVEgiOiBwcm9kdWN0RGlyZWN0b3J5LAotICAgICAgICAgICAgQCJfX1hQQ19EWUxEX0ZSQU1F
V09SS19QQVRIIjogcHJvZHVjdERpcmVjdG9yeSwKLSAgICAgICAgICAgIEAiRFlMRF9MSUJSQVJZ
X1BBVEgiOiBwcm9kdWN0RGlyZWN0b3J5LAotICAgICAgICAgICAgQCJfX1hQQ19EWUxEX0xJQlJB
UllfUEFUSCI6IHByb2R1Y3REaXJlY3RvcnksCi0gICAgICAgIH0gbXV0YWJsZUNvcHldOwotCi0g
ICAgICAgIGZvciAoTlNTdHJpbmcgKmtleU5hbWUgaW4gQFtAIkRZTERfSU5TRVJUX0xJQlJBUklF
UyIsIEAiTWFsbG9jU3RhY2tMb2dnaW5nIiwgQCJMT0NBTF9SRVNPVVJDRV9ST09UIiwgQCJEVU1Q
UkVOREVSVFJFRV9URU1QIl0pIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhbHVlID0gZ2V0
ZW52KFtrZXlOYW1lIFVURjhTdHJpbmddKTsKLSAgICAgICAgICAgIGlmICh2YWx1ZSAmJiBzdHJs
ZW4odmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgTlNTdHJpbmcgKm5zVmFsdWUgPSBbTlNTdHJp
bmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6dmFsdWVdOwotICAgICAgICAgICAgICAgIFtkaWN0aW9u
YXJ5IHNldE9iamVjdDpuc1ZhbHVlIGZvcktleTprZXlOYW1lXTsKLSAgICAgICAgICAgICAgICBb
ZGljdGlvbmFyeSBzZXRPYmplY3Q6bnNWYWx1ZSBmb3JLZXk6W0AiX19YUENfIiBzdHJpbmdCeUFw
cGVuZGluZ1N0cmluZzprZXlOYW1lXV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBmb3IgKGNoYXIqKiBlbnZwID0gKl9OU0dldEVudmlyb24oKTsgKmVudnA7IGVudnArKykg
ewotICAgICAgICAgICAgY29uc3QgY2hhciogZW52ID0gKmVudnA7Ci0gICAgICAgICAgICBpZiAo
IXN0cm5jbXAoIkpTQ18iLCBlbnYsIDQpIHx8ICFzdHJuY21wKCJfX1hQQ19KU0NfIiwgZW52LCAx
MCkpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBlcXVhbCA9IHN0cmNocihlbnYsICc9
Jyk7Ci0gICAgICAgICAgICAgICAgaWYgKCFlcXVhbCkgewotICAgICAgICAgICAgICAgICAgICBO
U0xvZyhAIk1pc3NpbmcgJz0nIGluIGVudiB2YXIgJyVzJyIsIGVudik7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgbWF4S2V5TGVuZ3RoID0gMjU2OwotICAgICAgICAgICAgICAgIHNp
emVfdCBrZXlMZW5ndGggPSBlcXVhbCAtIGVudjsKLSAgICAgICAgICAgICAgICBpZiAoa2V5TGVu
Z3RoID49IG1heEtleUxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICBOU0xvZyhAIkVudiB2
YXIgJyVzJyBpcyB0b28gbG9uZyIsIGVudik7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGNoYXIga2V5W21heEtleUxl
bmd0aF07Ci0gICAgICAgICAgICAgICAgc3RybmNweShrZXksIGVudiwga2V5TGVuZ3RoKTsKLSAg
ICAgICAgICAgICAgICBrZXlba2V5TGVuZ3RoXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgY29u
c3QgY2hhciogdmFsdWUgPSBlcXVhbCArIDE7Ci0KLSAgICAgICAgICAgICAgICBOU1N0cmluZyAq
bnNLZXkgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6a2V5XTsKLSAgICAgICAgICAg
ICAgICBOU1N0cmluZyAqbnNWYWx1ZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzp2
YWx1ZV07Ci0gICAgICAgICAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0Om5zVmFsdWUgZm9y
S2V5Om5zS2V5XTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGVudmlyb25t
ZW50VmFyaWFibGVzID0gW2RpY3Rpb25hcnkgY29weV07Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4g
ZW52aXJvbm1lbnRWYXJpYWJsZXM7Ci19Ci0KLS0gKHZvaWQpbGF1bmNoQXBwCi17Ci0gICAgTlNE
aWN0aW9uYXJ5ICpsYXVuY2hPcHRpb25zID0gQHsKLSAgICAgICAga1NpbURldmljZUxhdW5jaEFw
cGxpY2F0aW9uRW52aXJvbm1lbnQ6IFtzZWxmIF9lbnZpcm9ubWVudFZhcmlhYmxlc10sCi0gICAg
ICAgIGtTaW1EZXZpY2VMYXVuY2hBcHBsaWNhdGlvbkFyZ3VtZW50czogW3NlbGYgZHVtcFRvb2xB
cmd1bWVudHNdLAotICAgIH07Ci0KLSAgICBOU0Vycm9yICplcnJvcjsKLSAgICBwaWRfdCBwaWQg
PSBbc2VsZi5kZXZpY2UgbGF1bmNoQXBwbGljYXRpb25XaXRoSUQ6c2VsZi5hcHBCdW5kbGVJZGVu
dGlmaWVyIG9wdGlvbnM6bGF1bmNoT3B0aW9ucyBlcnJvcjomZXJyb3JdOwotCi0gICAgaWYgKHBp
ZCA8IDApIHsKLSAgICAgICAgTlNMb2coQCJDb3VsZG4ndCBsYXVuY2ggJUA6ICVAIiwgc2VsZi5h
cHBCdW5kbGVJZGVudGlmaWVyLCBlcnJvci5kZXNjcmlwdGlvbik7Ci0gICAgICAgIGV4aXQoRVhJ
VF9GQUlMVVJFKTsKLSAgICB9Ci0KLSAgICBbc2VsZiBzZXRQaWQ6cGlkXTsKLQotICAgIGRpc3Bh
dGNoX3F1ZXVlX3QgcXVldWUgPSBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpOwotICAgIGRpc3Bh
dGNoX3NvdXJjZV90IHNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSA9IGRpc3BhdGNoX3Nv
dXJjZV9jcmVhdGUoRElTUEFUQ0hfU09VUkNFX1RZUEVfUFJPQywgW3NlbGYgcGlkXSwgRElTUEFU
Q0hfUFJPQ19FWElULCBxdWV1ZSk7Ci0gICAgW3NlbGYgc2V0QXBwRGlzcGF0Y2hTb3VyY2U6c2lt
dWxhdG9yQXBwRXhpdERpc3BhdGNoU291cmNlXTsKLSAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2V2
ZW50X2hhbmRsZXIoc2ltdWxhdG9yQXBwRXhpdERpc3BhdGNoU291cmNlLCBeewotICAgICAgICBk
aXNwYXRjaF9zb3VyY2VfY2FuY2VsKHNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSk7Ci0g
ICAgICAgIFtzZWxmIGRpZENyYXNoV2l0aE1lc3NhZ2U6bmlsXTsKLSAgICB9KTsKLSAgICBkaXNw
YXRjaF9yZXN1bWUoc2ltdWxhdG9yQXBwRXhpdERpc3BhdGNoU291cmNlKTsKLX0KLQotLSAodm9p
ZClzdGFydAotewotICAgIFtzZWxmIGluc3RhbGxBcHBdOwotICAgIFtbc2VsZiByZWxheV0gc2V0
dXBdOwotICAgIFtzZWxmIGxhdW5jaEFwcF07Ci0gICAgW1tzZWxmIHJlbGF5XSBjb25uZWN0XTsK
LX0KLQotLSAodm9pZClmaW5pc2gKLXsKLSAgICBbW3NlbGYgcmVsYXldIGRpc2Nvbm5lY3RdOwot
ICAgIFtzZWxmIGtpbGxBcHBdOwotICAgIGV4aXQoRVhJVF9TVUNDRVNTKTsKLX0KLQotQGVuZApJ
bmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9tYWluLm0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9tYWluLm0JKHJl
dmlzaW9uIDIxMTE0MikKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkv
bWFpbi5tCShub25leGlzdGVudCkKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW1wb3J0ICJDb3JlU2ltdWxhdG9yU1BJLmgiCi0jaW1wb3J0ICJMVFJlbGF5Q29udHJvbGxl
ci5oIgotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLXN0YXRpYyBMVFJlbGF5
Q29udHJvbGxlciAqcmVsYXlDb250cm9sbGVyOwotCi12b2lkIHVzYWdlKCkKLXsKLSAgICBOU1N0
cmluZyAqaGVscFRleHQgPSBAIkxheW91dFRlc3RSZWxheTogcnVuIGEgZHVtcCB0b29sIGluIHRo
ZSBzaW11bGF0b3IuIE5vdCBmb3IgZGlyZWN0IGNvbnN1bXB0aW9uLlxuIgotICAgICAgICAiVXNh
Z2U6IExheW91dFRlc3RSZWxheSBbLWhdIFtvcHRpb25zXSAtLSBbZHVtcCB0b29sIGFyZ3VtZW50
c11cbiIKLSAgICAgICAgIlJlcXVpcmVkIG9wdGlvbnM6XG4iCi0gICAgICAgICIgICAgLXVkaWQg
PGlkZW50aWZpZXI+ICAgICAgIFNpbXVsYXRvciBkZXZpY2UgaWRlbnRpZmllclxuIgotICAgICAg
ICAiICAgIC1hcHAgPGFwcF9wYXRoPiAgICAgICAgICBQYXRoIHRvIHRoZSBidWlsdCBpT1MgLmFw
cCBidW5kbGUgZGlyZWN0b3J5LlxuIgotICAgICAgICAiICAgIC1wcm9kdWN0RGlyIDxkaXI+ICAg
ICAgICAvcGF0aC90by9XZWJLaXRCdWlsZC97Y29uZmlndXJhdGlvbn0te3Nob3J0IHBsYXRmb3Jt
fS5cbiI7Ci0KLSAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBbaGVscFRleHQgVVRGOFN0cmlu
Z10pOwotfQotCi1OU1N0cmluZyAqZ2V0UmVxdWlyZWRTdHJpbmdBcmd1bWVudChOU1N0cmluZyAq
cGFyYW1ldGVyKQotewotICAgIE5TVXNlckRlZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJEZWZh
dWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c107Ci0gICAgTlNTdHJpbmcgKmFyZ3VtZW50ID0gW2Rl
ZmF1bHRzIHN0cmluZ0ZvcktleTpwYXJhbWV0ZXJdOwotCi0gICAgaWYgKCFhcmd1bWVudCkgewot
ICAgICAgICBOU0xvZyhAIi0lQCBpcyByZXF1aXJlZC4iLCBwYXJhbWV0ZXIpOwotICAgICAgICB1
c2FnZSgpOwotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotICAgIHJldHVybiBh
cmd1bWVudDsKLX0KLQotTlNBcnJheSAqZ2V0RHVtcFRvb2xBcmd1bWVudHMoKQotewotICAgIE5T
TXV0YWJsZUFycmF5ICpkdW1wVG9vbEFyZ3VtZW50cyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRdOwotICAgIE5TQXJyYXkgKnByb2Nlc3NBcmdzID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nl
c3NJbmZvXSBhcmd1bWVudHNdOwotICAgIEJPT0wgYXBwZW5kaW5nID0gTk87Ci0gICAgZm9yIChO
U1N0cmluZyAqYXJnIGluIHByb2Nlc3NBcmdzKSB7Ci0gICAgICAgIGlmIChbYXJnIGlzRXF1YWxU
b1N0cmluZzpAIi0tIl0pIHsKLSAgICAgICAgICAgIGFwcGVuZGluZyA9IFlFUzsKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChhcHBlbmRpbmcpCi0gICAgICAg
ICAgICBbZHVtcFRvb2xBcmd1bWVudHMgYWRkT2JqZWN0OmFyZ107Ci0gICAgfQotICAgIHJldHVy
biBkdW1wVG9vbEFyZ3VtZW50czsKLX0KLQotdm9pZCBmaW5pc2goKQotewotICAgIFtyZWxheUNv
bnRyb2xsZXIgZmluaXNoXTsKLX0KLQotdm9pZCByZWNlaXZlZFNpZ25hbChpbnQgc2lnbmFsKQot
ewotICAgIGV4aXQoRVhJVF9TVUNDRVNTKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0
IGNoYXIgKiBhcmd2W10pCi17Ci0gICAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAgICAgIE5TQXJy
YXkgKmhlbHBBcmd1bWVudHMgPSBAW0AiLWgiLCBAIi0taGVscCJdOwotICAgICAgICBmb3IgKE5T
U3RyaW5nICpoZWxwQXJndW1lbnQgaW4gaGVscEFyZ3VtZW50cykgewotICAgICAgICAgICAgaWYg
KFtbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIGFyZ3VtZW50c10gaW5kZXhPZk9iamVjdDpo
ZWxwQXJndW1lbnRdICE9IE5TTm90Rm91bmQpIHsKLSAgICAgICAgICAgICAgICB1c2FnZSgpOwot
ICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0jaWYgVVNFX1NJTV9TRVJWSUNFX0NPTlRFWFQKLSAgICAgICAgTlNTdHJpbmcgKmRl
dmVsb3BlckRpcmVjdG9yeSA9IGdldFJlcXVpcmVkU3RyaW5nQXJndW1lbnQoQCJkZXZlbG9wZXJE
aXIiKTsKLSNlbmRpZgotICAgICAgICBOU1VVSUQgKnVkaWQgPSBbW05TVVVJRCBhbGxvY10gaW5p
dFdpdGhVVUlEU3RyaW5nOmdldFJlcXVpcmVkU3RyaW5nQXJndW1lbnQoQCJ1ZGlkIildOwotICAg
ICAgICBOU1N0cmluZyAqYXBwUGF0aCA9IGdldFJlcXVpcmVkU3RyaW5nQXJndW1lbnQoQCJhcHAi
KTsKLSAgICAgICAgTlNTdHJpbmcgKnByb2R1Y3REaXJlY3RvcnkgPSBnZXRSZXF1aXJlZFN0cmlu
Z0FyZ3VtZW50KEAicHJvZHVjdERpciIpOwotICAgICAgICBOU0FycmF5ICpkdW1wVG9vbEFyZ3Vt
ZW50cyA9IGdldER1bXBUb29sQXJndW1lbnRzKCk7Ci0KLSNpZiBVU0VfU0lNX1NFUlZJQ0VfQ09O
VEVYVAotICAgICAgICBOU0Vycm9yICplcnJvcjsKLSAgICAgICAgU2ltU2VydmljZUNvbnRleHQg
KnNlcnZpY2VDb250ZXh0ID0gW1NpbVNlcnZpY2VDb250ZXh0IHNoYXJlZFNlcnZpY2VDb250ZXh0
Rm9yRGV2ZWxvcGVyRGlyOmRldmVsb3BlckRpcmVjdG9yeSBlcnJvcjomZXJyb3JdOwotICAgICAg
ICBpZiAoIXNlcnZpY2VDb250ZXh0KSB7Ci0gICAgICAgICAgICBOU0xvZyhAIkRldmljZSBjb250
ZXh0IGNvdWxkbid0IGJlIGZvdW5kOiAlQCIsIGVycm9yKTsKLSAgICAgICAgICAgIGV4aXQoRVhJ
VF9GQUlMVVJFKTsKLSAgICAgICAgfQotICAgICAgICBTaW1EZXZpY2VTZXQgKmRldmljZVNldCA9
IFtzZXJ2aWNlQ29udGV4dCBkZWZhdWx0RGV2aWNlU2V0V2l0aEVycm9yOm5pbF07Ci0gICAgICAg
IGlmICghZGV2aWNlU2V0KSB7Ci0gICAgICAgICAgICBOU0xvZyhAIkRlZmF1bHQgZGV2aWNlIHNl
dCBjb3VsZG4ndCBiZSBmb3VuZDogJUAiLCBlcnJvcik7Ci0gICAgICAgICAgICBleGl0KEVYSVRf
RkFJTFVSRSk7Ci0gICAgICAgIH0KLSAgICAgICAgU2ltRGV2aWNlICpkZXZpY2UgPSBbZGV2aWNl
U2V0LmRldmljZXNCeVVESUQgb2JqZWN0Rm9yS2V5OnVkaWRdOwotI2Vsc2UKLSAgICAgICAgU2lt
RGV2aWNlICpkZXZpY2UgPSBbU2ltRGV2aWNlU2V0LmRlZmF1bHRTZXQuZGV2aWNlc0J5VURJRCBv
YmplY3RGb3JLZXk6dWRpZF07Ci0jZW5kaWYKLSAgICAgICAgaWYgKCFkZXZpY2UpIHsKLSAgICAg
ICAgICAgIE5TTG9nKEAiRGV2aWNlICVAIGNvdWxkbid0IGJlIGZvdW5kIiwgdWRpZCk7Ci0gICAg
ICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZWxheUNv
bnRyb2xsZXIgPSBbW0xUUmVsYXlDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0aERldmljZTpkZXZp
Y2UgcHJvZHVjdERpcjpwcm9kdWN0RGlyZWN0b3J5IGFwcFBhdGg6YXBwUGF0aCBkZXZpY2VVRElE
OnVkaWQgZHVtcFRvb2xBcmd1bWVudHM6ZHVtcFRvb2xBcmd1bWVudHNdOwotICAgICAgICBbcmVs
YXlDb250cm9sbGVyIHN0YXJ0XTsKLQotICAgICAgICBhdGV4aXQoZmluaXNoKTsKLSAgICAgICAg
c2lnbmFsKFNJR0lOVCwgcmVjZWl2ZWRTaWduYWwpOwotICAgICAgICBzaWduYWwoU0lHVEVSTSwg
cmVjZWl2ZWRTaWduYWwpOwotCi0gICAgICAgIFtbTlNSdW5Mb29wIG1haW5SdW5Mb29wXSBydW5d
OwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9M
YXlvdXRUZXN0UmVsYXkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5Lnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDIxMTE0MikKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRU
ZXN0UmVsYXkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkobm9uZXhpc3RlbnQpCkBAIC0xLDIw
MiArMCwwIEBACi0vLyAhJCpVVEY4KiQhCi17Ci0JYXJjaGl2ZVZlcnNpb24gPSAxOwotCWNsYXNz
ZXMgPSB7Ci0JfTsKLQlvYmplY3RWZXJzaW9uID0gNDY7Ci0Jb2JqZWN0cyA9IHsKLQotLyogQmVn
aW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjgxOTg4MUQ0MzAwNEY2Q0MyIC8q
IG1haW4ubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJF
OEQzRUY3MTk4ODFENDMwMDRGNkNDMiAvKiBtYWluLm0gKi87IH07Ci0JCTJFOEQzRjAyMTk4ODFG
RDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkU4RDNGMDExOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5
Lm0gKi87IH07Ci0JCTJFOEQzRjA2MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxl
ci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU4RDNG
MDUxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLm0gKi87IH07Ci0vKiBFbmQg
UEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYQ29weUZpbGVzQnVpbGRQaGFz
ZSBzZWN0aW9uICovCi0JCTJFOEQzRUYyMTk4ODFENDMwMDRGNkNDMiAvKiBDb3B5RmlsZXMgKi8g
PSB7Ci0JCQlpc2EgPSBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKLQkJCWRzdFBhdGggPSAvdXNyL3NoYXJlL21hbi9tYW4xLzsKLQkJCWRz
dFN1YmZvbGRlclNwZWMgPSAwOwotCQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDE7Ci0JCX07Ci0vKiBFbmQgUEJYQ29weUZpbGVzQnVp
bGRQaGFzZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAq
LwotCQkyRThEM0VGNDE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1v
LmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBMYXlvdXRUZXN0UmVsYXk7
IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0JCTJFOEQzRUY3MTk4ODFENDMw
MDRGNkNDMiAvKiBtYWluLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IG1haW4ubTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFz
ZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQueGNjb25maWc7IG5hbWUgPSBEZWJ1Z1JlbGVhc2UueGNjb25maWc7IHBhdGggPSBD
b25maWd1cmF0aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTJFOEQzRUZGMTk4ODFFMjUwMDRGNkNDMiAvKiBCYXNlLnhjY29uZmlnICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZp
ZzsgbmFtZSA9IEJhc2UueGNjb25maWc7IHBhdGggPSBDb25maWd1cmF0aW9ucy9CYXNlLnhjY29u
ZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0YwMDE5ODgxRjI5MDA0RjZD
QzIgLyogTFRSZWxheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMVFJlbGF5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTJFOEQzRjAxMTk4ODFGRDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBMVFBpcGVSZWxheS5tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0YwMzE5ODgxRkUyMDA0RjZDQzIgLyogTFRQ
aXBlUmVsYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTFRQaXBlUmVsYXkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDQxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9s
bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExUUmVsYXlDb250cm9sbGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOEQzRjA1MTk4ODI0MDYwMDRGNkND
MiAvKiBMVFJlbGF5Q29udHJvbGxlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBh
dGggPSBMVFJlbGF5Q29udHJvbGxlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlD
RTFGQkMxNTFCMjkwRTc5MDAwMTM2RjUgLyogQ29yZVNpbXVsYXRvclNQSS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb3JlU2ltdWxhdG9yU1BJLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0vKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCi0KLS8qIEJl
Z2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjExOTg4MUQ0
MzAwNEY2Q0MyIC8qIEZyYW1ld29ya3MgKi8gPSB7Ci0JCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVp
bGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgK
LQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsK
LS8qIEVuZCBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBC
WEdyb3VwIHNlY3Rpb24gKi8KLQkJMkU4RDNFRUIxOTg4MUQ0MzAwNEY2Q0MyID0gewotCQkJaXNh
ID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQkyRThEM0VGRjE5ODgxRTI1MDA0RjZD
QzIgLyogQmFzZS54Y2NvbmZpZyAqLywKLQkJCQkyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyog
RGVidWdSZWxlYXNlLnhjY29uZmlnICovLAotCQkJCTJFOEQzRUY2MTk4ODFENDMwMDRGNkNDMiAv
KiBMYXlvdXRUZXN0UmVsYXkgKi8sCi0JCQkJMkU4RDNFRjUxOTg4MUQ0MzAwNEY2Q0MyIC8qIFBy
b2R1Y3RzICovLAotCQkJKTsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCTJF
OEQzRUY1MTk4ODFENDMwMDRGNkNDMiAvKiBQcm9kdWN0cyAqLyA9IHsKLQkJCWlzYSA9IFBCWEdy
b3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMkU4RDNFRjQxOTg4MUQ0MzAwNEY2Q0MyIC8qIExh
eW91dFRlc3RSZWxheSAqLywKLQkJCSk7Ci0JCQluYW1lID0gUHJvZHVjdHM7Ci0JCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOwotCQl9OwotCQkyRThEM0VGNjE5ODgxRDQzMDA0RjZDQzIgLyogTGF5
b3V0VGVzdFJlbGF5ICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgK
LQkJCQkyRThEM0VGNzE5ODgxRDQzMDA0RjZDQzIgLyogbWFpbi5tICovLAotCQkJCUNFMUZCQzE1
MUIyOTBFNzkwMDAxMzZGNSAvKiBDb3JlU2ltdWxhdG9yU1BJLmggKi8sCi0JCQkJMkU4RDNGMDAx
OTg4MUYyOTAwNEY2Q0MyIC8qIExUUmVsYXkuaCAqLywKLQkJCQkyRThEM0YwMTE5ODgxRkQwMDA0
RjZDQzIgLyogTFRQaXBlUmVsYXkubSAqLywKLQkJCQkyRThEM0YwMzE5ODgxRkUyMDA0RjZDQzIg
LyogTFRQaXBlUmVsYXkuaCAqLywKLQkJCQkyRThEM0YwNDE5ODgyNDA2MDA0RjZDQzIgLyogTFRS
ZWxheUNvbnRyb2xsZXIuaCAqLywKLQkJCQkyRThEM0YwNTE5ODgyNDA2MDA0RjZDQzIgLyogTFRS
ZWxheUNvbnRyb2xsZXIubSAqLywKLQkJCSk7Ci0JCQlwYXRoID0gTGF5b3V0VGVzdFJlbGF5Owot
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLS8qIEVuZCBQQlhHcm91cCBzZWN0aW9u
ICovCi0KLS8qIEJlZ2luIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCi0JCTJFOEQzRUYzMTk4
ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8gPSB7Ci0JCQlpc2EgPSBQQlhOYXRp
dmVUYXJnZXQ7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMkU4RDNFRkIxOTg4MUQ0MzAw
NEY2Q0MyIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJM
YXlvdXRUZXN0UmVsYXkiICovOwotCQkJYnVpbGRQaGFzZXMgPSAoCi0JCQkJMkU4RDNFRjAxOTg4
MUQ0MzAwNEY2Q0MyIC8qIFNvdXJjZXMgKi8sCi0JCQkJMkU4RDNFRjExOTg4MUQ0MzAwNEY2Q0My
IC8qIEZyYW1ld29ya3MgKi8sCi0JCQkJMkU4RDNFRjIxOTg4MUQ0MzAwNEY2Q0MyIC8qIENvcHlG
aWxlcyAqLywKLQkJCSk7Ci0JCQlidWlsZFJ1bGVzID0gKAotCQkJKTsKLQkJCWRlcGVuZGVuY2ll
cyA9ICgKLQkJCSk7Ci0JCQluYW1lID0gTGF5b3V0VGVzdFJlbGF5OwotCQkJcHJvZHVjdE5hbWUg
PSBMYXlvdXRUZXN0UmVsYXk7Ci0JCQlwcm9kdWN0UmVmZXJlbmNlID0gMkU4RDNFRjQxOTg4MUQ0
MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLzsKLQkJCXByb2R1Y3RUeXBlID0gImNvbS5h
cHBsZS5wcm9kdWN0LXR5cGUudG9vbCI7Ci0JCX07Ci0vKiBFbmQgUEJYTmF0aXZlVGFyZ2V0IHNl
Y3Rpb24gKi8KLQotLyogQmVnaW4gUEJYUHJvamVjdCBzZWN0aW9uICovCi0JCTJFOEQzRUVDMTk4
ODFENDMwMDRGNkNDMiAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKLQkJCWlzYSA9IFBCWFByb2pl
Y3Q7Ci0JCQlhdHRyaWJ1dGVzID0gewotCQkJCUxhc3RVcGdyYWRlQ2hlY2sgPSAwNjAwOwotCQkJ
CU9SR0FOSVpBVElPTk5BTUUgPSAiQXBwbGUsIEluYy4iOwotCQkJCVRhcmdldEF0dHJpYnV0ZXMg
PSB7Ci0JCQkJCTJFOEQzRUYzMTk4ODFENDMwMDRGNkNDMiA9IHsKLQkJCQkJCUNyZWF0ZWRPblRv
b2xzVmVyc2lvbiA9IDYuMDsKLQkJCQkJfTsKLQkJCQl9OwotCQkJfTsKLQkJCWJ1aWxkQ29uZmln
dXJhdGlvbkxpc3QgPSAyRThEM0VFRjE5ODgxRDQzMDA0RjZDQzIgLyogQnVpbGQgY29uZmlndXJh
dGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJMYXlvdXRUZXN0UmVsYXkiICovOwotCQkJY29tcGF0
aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMy4yIjsKLQkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5n
bGlzaDsKLQkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAwOwotCQkJa25vd25SZWdpb25zID0g
KAotCQkJCWVuLAotCQkJKTsKLQkJCW1haW5Hcm91cCA9IDJFOEQzRUVCMTk4ODFENDMwMDRGNkND
MjsKLQkJCXByb2R1Y3RSZWZHcm91cCA9IDJFOEQzRUY1MTk4ODFENDMwMDRGNkNDMiAvKiBQcm9k
dWN0cyAqLzsKLQkJCXByb2plY3REaXJQYXRoID0gIiI7Ci0JCQlwcm9qZWN0Um9vdCA9ICIiOwot
CQkJdGFyZ2V0cyA9ICgKLQkJCQkyRThEM0VGMzE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVz
dFJlbGF5ICovLAotCQkJKTsKLQkJfTsKLS8qIEVuZCBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KLQot
LyogQmVnaW4gUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCQkyRThEM0VGMDE5ODgx
RDQzMDA0RjZDQzIgLyogU291cmNlcyAqLyA9IHsKLQkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBo
YXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJ
CTJFOEQzRjA2MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5tIGluIFNvdXJj
ZXMgKi8sCi0JCQkJMkU4RDNFRjgxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSBpbiBTb3VyY2Vz
ICovLAotCQkJCTJFOEQzRjAyMTk4ODFGRDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5tIGluIFNv
dXJjZXMgKi8sCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7Ci0JCX07Ci0vKiBFbmQgUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCi0vKiBC
ZWdpbiBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCi0JCTJFOEQzRUY5MTk4ODFENDMw
MDRGNkNDMiAvKiBEZWJ1ZyAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwot
CQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIg
LyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCX07
Ci0JCQluYW1lID0gRGVidWc7Ci0JCX07Ci0JCTJFOEQzRUZBMTk4ODFENDMwMDRGNkNDMiAvKiBS
ZWxlYXNlICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29u
ZmlndXJhdGlvblJlZmVyZW5jZSA9IDJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1Jl
bGVhc2UueGNjb25maWcgKi87Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJfTsKLQkJCW5hbWUg
PSBSZWxlYXNlOwotCQl9OwotCQkyRThEM0VGQzE5ODgxRDQzMDA0RjZDQzIgLyogRGVidWcgKi8g
PSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9u
UmVmZXJlbmNlID0gMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2Nv
bmZpZyAqLzsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJUFJPRFVDVF9OQU1FID0gIiQoVEFS
R0VUX05BTUUpIjsKLQkJCX07Ci0JCQluYW1lID0gRGVidWc7Ci0JCX07Ci0JCTJFOEQzRUZEMTk4
ODFENDMwMDRGNkNDMiAvKiBSZWxlYXNlICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3Vy
YXRpb247Ci0JCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDJFOEQzRUZFMTk4ODFFMTMw
MDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi87Ci0JCQlidWlsZFNldHRpbmdzID0g
ewotCQkJCVBST0RVQ1RfTkFNRSA9ICIkKFRBUkdFVF9OQU1FKSI7Ci0JCQl9OwotCQkJbmFtZSA9
IFJlbGVhc2U7Ci0JCX07Ci0vKiBFbmQgWENCdWlsZENvbmZpZ3VyYXRpb24gc2VjdGlvbiAqLwot
Ci0vKiBCZWdpbiBYQ0NvbmZpZ3VyYXRpb25MaXN0IHNlY3Rpb24gKi8KLQkJMkU4RDNFRUYxOTg4
MUQ0MzAwNEY2Q0MyIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAi
TGF5b3V0VGVzdFJlbGF5IiAqLyA9IHsKLQkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7Ci0J
CQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAotCQkJCTJFOEQzRUY5MTk4ODFENDMwMDRGNkNDMiAv
KiBEZWJ1ZyAqLywKLQkJCQkyRThEM0VGQTE5ODgxRDQzMDA0RjZDQzIgLyogUmVsZWFzZSAqLywK
LQkJCSk7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7Ci0JCQlkZWZhdWx0
Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNlOwotCQl9OwotCQkyRThEM0VGQjE5ODgxRDQzMDA0
RjZDQzIgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIkxh
eW91dFRlc3RSZWxheSIgKi8gPSB7Ci0JCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJ
YnVpbGRDb25maWd1cmF0aW9ucyA9ICgKLQkJCQkyRThEM0VGQzE5ODgxRDQzMDA0RjZDQzIgLyog
RGVidWcgKi8sCi0JCQkJMkU4RDNFRkQxOTg4MUQ0MzAwNEY2Q0MyIC8qIFJlbGVhc2UgKi8sCi0J
CQkpOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwotCQkJZGVmYXVsdENv
bmZpZ3VyYXRpb25OYW1lID0gUmVsZWFzZTsKLQkJfTsKLS8qIEVuZCBYQ0NvbmZpZ3VyYXRpb25M
aXN0IHNlY3Rpb24gKi8KLQl9OwotCXJvb3RPYmplY3QgPSAyRThEM0VFQzE5ODgxRDQzMDA0RjZD
QzIgLyogUHJvamVjdCBvYmplY3QgKi87Ci19CkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkv
TGF5b3V0VGVzdFJlbGF5Lnhjb2RlcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0
UmVsYXkvTGF5b3V0VGVzdFJlbGF5Lnhjb2RlcHJvagkocmV2aXNpb24gMjExMTQyKQorKysgVG9v
bHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2oJKG5vbmV4aXN0ZW50
KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RS
ZWxheS54Y29kZXByb2oKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46aWdub3JlCiMjIC0xLDIgKzAs
MCAjIwotcHJvamVjdC54Y3dvcmtzcGFjZQoteGN1c2VyZGF0YQpJbmRleDogVG9vbHMvTGF5b3V0
VGVzdFJlbGF5L01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9N
YWtlZmlsZQkocmV2aXNpb24gMjExMTQyKQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L01ha2Vm
aWxlCShub25leGlzdGVudCkKQEAgLTEsNiArMCwwIEBACi1TQ1JJUFRTX1BBVEggPSAuLi9TY3Jp
cHRzCi0KLU9WRVJSSURFX0FSQ0hTID0gZGVmYXVsdAotT1ZFUlJJREVfU0RLUk9PVCA9IGRlZmF1
bHQKLQotaW5jbHVkZSAuLi8uLi9NYWtlZmlsZS5zaGFyZWQKSW5kZXg6IFRvb2xzL01ha2VmaWxl
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL01ha2VmaWxlCShyZXZpc2lvbiAyMTExNDIpCisrKyBUb29s
cy9NYWtlZmlsZQkod29ya2luZyBjb3B5KQpAQCAtNyw5ICs3LDYgQEAgaWZuZXEgKCwkKFNES1JP
T1QpKQogCWlmbmVxICgsJChmaW5kc3RyaW5nIGlwaG9uZSwkKFNES1JPT1QpKSkKIAkJTU9EVUxF
UyArPSBNb2JpbGVNaW5pQnJvd3NlcgogCWVuZGlmCi0JaWZlcSAoLCQoRE9fTk9UX0JVSUxEX0xB
WU9VVF9URVNUX1JFTEFZKSkKLQkJTU9EVUxFUyArPSBMYXlvdXRUZXN0UmVsYXkKLQllbmRpZgog
ZW5kaWYKIAogYWxsOgpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25z
L0Jhc2UueGNjb25maWcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZp
Z3VyYXRpb25zL0Jhc2UueGNjb25maWcJKHJldmlzaW9uIDIxMTE0MikKKysrIFRvb2xzL0xheW91
dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCShub25leGlzdGVudCkKQEAg
LTEsNjggKzAsMCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotLy8gYXJlIG1ldDoK
LS8vIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0vLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotLy8gICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLS8vIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0vLyBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LS8vIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0vLyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLS8vIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLS8vIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotLy8gUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotLy8gT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNs
dWRlICIuLi8uLi8uLi8uLi9JbnRlcm5hbC9Db25maWd1cmF0aW9ucy9IYXZlSW50ZXJuYWxTREsu
eGNjb25maWciCi0KLVVTRV9JTlRFUk5BTF9TREsgPSAkKFVTRV9JTlRFUk5BTF9TREtfJChDT05G
SUdVUkFUSU9OKSk7Ci1VU0VfSU5URVJOQUxfU0RLX1Byb2R1Y3Rpb24gPSBZRVM7Ci1VU0VfSU5U
RVJOQUxfU0RLX0RlYnVnID0gJChIQVZFX0lOVEVSTkFMX1NESyk7Ci1VU0VfSU5URVJOQUxfU0RL
X1JlbGVhc2UgPSAkKEhBVkVfSU5URVJOQUxfU0RLKTsKLQotQ0xBTkdfQ1hYX0xBTkdVQUdFX1NU
QU5EQVJEID0gZ251KysweDsKLUNMQU5HX0VOQUJMRV9PQkpDX0FSQyA9IFlFUzsKLUNMQU5HX1dB
Uk5fQ1hYMFhfRVhURU5TSU9OUyA9IE5POwotSEVBREVSX1NFQVJDSF9QQVRIUyA9ICQoQlVJTFRf
UFJPRFVDVFNfRElSKS91c3IvbG9jYWwvaW5jbHVkZSAkKFdFQkNPUkVfUFJJVkFURV9IRUFERVJT
X0RJUikvRm9yd2FyZGluZ0hlYWRlcnMgJChTUkNST09UKS8uLi8uLi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaWN1ICQoTkVYVF9ST09UKS91c3IvbG9jYWwvaW5jbHVkZS9XZWJDb3JlVGVzdFN1cHBv
cnQ7Ci1HQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gJChERUJVR19ERUZJTkVTKSBFTkFC
TEVfREFTSEJPQVJEX1NVUFBPUlQ7Ci1ERUJVR19JTkZPUk1BVElPTl9GT1JNQVQgPSBkd2FyZi13
aXRoLWRzeW07Ci1QUkVCSU5ESU5HID0gTk8KLUdDQ19DX0xBTkdVQUdFX1NUQU5EQVJEID0gZ251
OTkKLUdDQ19FTkFCTEVfQ1BQX0VYQ0VQVElPTlMgPSBOTzsKLUdDQ19FTkFCTEVfQ1BQX1JUVEkg
PSBOTzsKLUdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFERVIgPSBZRVMKLUdDQ19UUkVBVF9XQVJO
SU5HU19BU19FUlJPUlMgPSBZRVMKLUdDQ19WRVJTSU9OID0gY29tLmFwcGxlLmNvbXBpbGVycy5s
bHZtLmNsYW5nLjFfMDsKLUdDQ19XQVJOX0FCT1VUX0RFUFJFQ0FURURfRlVOQ1RJT05TID0gTk8K
LUdDQ19XQVJOX1VOVVNFRF9GVU5DVElPTiA9IFlFUwotR0NDX1dBUk5fVU5VU0VEX1ZBUklBQkxF
ID0gWUVTCi1HQ0NfV0FSTl82NF9UT18zMl9CSVRfQ09OVkVSU0lPTlthcmNoPXg4Nl82NF0gPSBO
TzsKLVdBUk5JTkdfQ0ZMQUdTID0gLVdhbGwgLVcgLVduby11bnVzZWQtcGFyYW1ldGVyIC1XdW5k
ZWYKLQotREVCVUdfREVGSU5FU19kZWJ1ZyA9IDsKLURFQlVHX0RFRklORVNfbm9ybWFsID0gTkRF
QlVHOwotREVCVUdfREVGSU5FUyA9ICQoREVCVUdfREVGSU5FU18kKENVUlJFTlRfVkFSSUFOVCkp
OwotCi1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUiA9ICQoVEFSR0VUX01BQ19PU19YX1ZF
UlNJT05fTUFKT1IkKE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVDpzdWZmaXg6aWRlbnRpZmllcikp
OwotVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1JfMTAgPSAxMDEwMDA7Ci1UQVJHRVRfTUFD
X09TX1hfVkVSU0lPTl9NQUpPUl8xMSA9IDEwMTEwMDsKLVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9O
X01BSk9SXzEyID0gMTAxMjAwOwotVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1JfMTMgPSAx
MDEzMDA7Ci0KLVNES1JPT1QgPSBtYWNvc3guaW50ZXJuYWw7Ci0KLVNVUFBPUlRFRF9QTEFURk9S
TVMgPSBtYWNvc3g7Ci0KLVRPT0xDSEFJTlMgPSBkZWZhdWx0OwotCi1PVEhFUl9DRkxBR1MgPSAk
KEFTQU5fT1RIRVJfQ0ZMQUdTKTsKLU9USEVSX0NQTFVTUExVU0ZMQUdTID0gJChBU0FOX09USEVS
X0NQTFVTUExVU0ZMQUdTKTsKLU9USEVSX0xERkxBR1MgPSAkKEFTQU5fT1RIRVJfTERGTEFHUyk7
CkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMvRGVidWdSZWxlYXNl
LnhjY29uZmlnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0
aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25maWcJKHJldmlzaW9uIDIxMTE0MikKKysrIFRvb2xzL0xh
eW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25maWcJKG5vbmV4
aXN0ZW50KQpAQCAtMSw0MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0v
LyBhcmUgbWV0OgotLy8gMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0vLyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotLy8gRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS8v
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotLy8gUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLS8vIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotLy8gRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotLy8gUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0vLyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0vLyBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotI2luY2x1ZGUgIkJhc2UueGNjb25maWciCi0KLUFSQ0hTID0gJChBUkNIU19TVEFOREFS
RF82NF9CSVQpOwotCi1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUiA9ICQoTUFDX09TX1hf
VkVSU0lPTl9NQUpPUik7Ci0KLU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCA9ICQoTUFDT1NYX0RF
UExPWU1FTlRfVEFSR0VUXyQoVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1IpKQotTUFDT1NY
X0RFUExPWU1FTlRfVEFSR0VUXzEwMTAwMCA9IDEwLjEwOwotTUFDT1NYX0RFUExPWU1FTlRfVEFS
R0VUXzEwMTEwMCA9IDEwLjExOwotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEwMTIwMCA9IDEw
LjEyOwotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEwMTMwMCA9IDEwLjEzOwotCi1GUkFNRVdP
UktfU0VBUkNIX1BBVEhTID0gJChERVZFTE9QRVJfRElSKS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdv
cmtzOwotTERfUlVOUEFUSF9TRUFSQ0hfUEFUSFMgPSAkKERFVkVMT1BFUl9ESVIpL0xpYnJhcnkv
UHJpdmF0ZUZyYW1ld29ya3M7Ci1PVEhFUl9MREZMQUdTID0gLWZyYW1ld29yayBDb3JlU2ltdWxh
dG9yIC1mcmFtZXdvcmsgQXBwS2l0OwotCi1TREtST09UID0gJChTREtST09UX21hY29zeF8kKFVT
RV9JTlRFUk5BTF9TREspKTsKLVNES1JPT1RfbWFjb3N4XyA9IG1hY29zeDsKLVNES1JPT1RfbWFj
b3N4X1lFUyA9IG1hY29zeC5pbnRlcm5hbDsKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9M
YXlvdXRUZXN0UmVsYXkvQ29yZVNpbXVsYXRvclNQSS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xh
eW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvQ29yZVNpbXVsYXRvclNQSS5oCShyZXZpc2lv
biAyMTExNDIpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0NvcmVT
aW11bGF0b3JTUEkuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWYgX19oYXNfaW5jbHVkZSg8Q29yZVNpbXVsYXRvci9Db3JlU2ltdWxhdG9yLmg+
KQotCi0vKiBGSVhNRTogUmVtb3ZlIHRoZSBiZWxvdyAjZGVmaW5lIG9uY2Ugd2UgcmVxdWlyZSBY
Y29kZSA3LjMgd2l0aCBpT1MgOS4zIFNESyBvciBuZXdlci4gKi8KLSNkZWZpbmUgX19jb3Jlc2lt
X3VuYXZhaWxhYmxlX21zZyhtc2cpCi0jaW1wb3J0IDxDb3JlU2ltdWxhdG9yL0NvcmVTaW11bGF0
b3IuaD4KLQotLyogRklYTUU6IEFsd2F5cyB1c2UgU2ltU2VydmljZUNvbnRleHQgb25jZSB3ZSBy
ZXF1aXJlIFhjb2RlIDcuMyB3aXRoIGlPUyA5LjMgU0RLIG9yIG5ld2VyLiAqLwotI2RlZmluZSBV
U0VfU0lNX1NFUlZJQ0VfQ09OVEVYVCBkZWZpbmVkKENPUkVTSU1fQVBJX01BWF9BTExPV0VEKQot
Ci0jZWxzZQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotI2RlZmluZSBV
U0VfU0lNX1NFUlZJQ0VfQ09OVEVYVCAxCi0KLSNkZWZpbmUga1NpbURldmljZUxhdW5jaEFwcGxp
Y2F0aW9uQXJndW1lbnRzIEAiYXJndW1lbnRzIgotI2RlZmluZSBrU2ltRGV2aWNlTGF1bmNoQXBw
bGljYXRpb25FbnZpcm9ubWVudCBAImVudmlyb25tZW50IgotCi1AaW50ZXJmYWNlIFNpbURldmlj
ZSA6IE5TT2JqZWN0Ci0tIChCT09MKWluc3RhbGxBcHBsaWNhdGlvbjooTlNVUkwgKilpbnN0YWxs
VVJMIHdpdGhPcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zIGVycm9yOihOU0Vycm9yICog
X19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci0tIChwaWRfdClsYXVuY2hBcHBsaWNhdGlvbldpdGhJ
RDooTlNTdHJpbmcgKilidW5kbGVJRCBvcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zIGVy
cm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci1AZW5kCi0KLUBpbnRlcmZh
Y2UgU2ltRGV2aWNlU2V0IDogTlNPYmplY3QKLUBwcm9wZXJ0eSAocmVhZG9ubHksIGNvcHkpIE5T
RGljdGlvbmFyeSAqZGV2aWNlc0J5VURJRDsKLUBlbmQKLQotQGludGVyZmFjZSBTaW1TZXJ2aWNl
Q29udGV4dCA6IE5TT2JqZWN0Ci0rKFNpbVNlcnZpY2VDb250ZXh0ICopc2hhcmVkU2VydmljZUNv
bnRleHRGb3JEZXZlbG9wZXJEaXI6KE5TU3RyaW5nICopZGV2ZWxvcGVyRGlyIGVycm9yOihOU0Vy
cm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci0tKFNpbURldmljZVNldCAqKWRlZmF1bHRE
ZXZpY2VTZXRXaXRoRXJyb3I6KE5TRXJyb3IgKiBfX2F1dG9yZWxlYXNpbmcgKillcnJvcjsKLUBl
bmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5
L0xUUGlwZVJlbGF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91
dFRlc3RSZWxheS9MVFBpcGVSZWxheS5oCShyZXZpc2lvbiAyMTExNDIpCisrKyBUb29scy9MYXlv
dXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5LmgJKG5vbmV4aXN0ZW50KQpA
QCAtMSwzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBMVFBpcGVSZWxheV9oCi0jZGVm
aW5lIExUUGlwZVJlbGF5X2gKLQotI2ltcG9ydCAiTFRSZWxheS5oIgotCi1AaW50ZXJmYWNlIExU
UGlwZVJlbGF5IDogTlNPYmplY3QgPExUUmVsYXk+Ci1AcHJvcGVydHkgKHdlYWspIGlkPExUUmVs
YXlEZWxlZ2F0ZT4gcmVsYXlEZWxlZ2F0ZTsKLS0gKGlkKWluaXRXaXRoUHJlZml4OihOU1N0cmlu
ZyAqKXByZWZpeDsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkv
TGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0
VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5tCShyZXZpc2lvbiAyMTExNDIp
CisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0J
KG5vbmV4aXN0ZW50KQpAQCAtMSwxNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgIkxU
UGlwZVJlbGF5LmgiCi0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotI2luY2x1
ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLUBpbnRlcmZhY2UgTFRQ
aXBlUmVsYXkgKCkKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKmZpZm9Q
cmVmaXg7Ci1AcHJvcGVydHkgKHN0cm9uZykgTlNPdXRwdXRTdHJlYW0gKnN0YW5kYXJkSW5wdXRQ
aXBlOwotQHByb3BlcnR5IChzdHJvbmcpIE5TSW5wdXRTdHJlYW0gKnN0YW5kYXJkT3V0cHV0UGlw
ZTsKLUBwcm9wZXJ0eSAoc3Ryb25nKSBOU0lucHV0U3RyZWFtICpzdGFuZGFyZEVycm9yUGlwZTsK
LQotLSAodm9pZCljcmVhdGVGSUZPczsKLS0gKHZvaWQpZGVzdHJveUZJRk9zOwotQGVuZAotCi1A
aW1wbGVtZW50YXRpb24gTFRQaXBlUmVsYXkKLQotLSAoTlNTdHJpbmcgKilpblBpcGVQYXRoCi17
Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9JTiJd
OwotfQotCi0tIChOU1N0cmluZyAqKW91dFBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1By
ZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9PVVQiXTsKLX0KLQotLSAoTlNTdHJpbmcg
KillcnJvclBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVu
ZGluZ1N0cmluZzpAIl9FUlJPUiJdOwotfQotCi0tIChOU091dHB1dFN0cmVhbSAqKSBvdXRwdXRT
dHJlYW0KLXsKLSAgICByZXR1cm4gX3N0YW5kYXJkSW5wdXRQaXBlOwotfQotCi0tIChpZClpbml0
V2l0aFByZWZpeDooTlNTdHJpbmcgKilwcmVmaXgKLXsKLSAgICBpZiAoKHNlbGYgPSBbc3VwZXIg
aW5pdF0pKSB7Ci0gICAgICAgIF9maWZvUHJlZml4ID0gcHJlZml4OwotICAgICAgICBbc2VsZiBk
ZXN0cm95RklGT3NdOwotICAgIH0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClzZXR1
cAotewotICAgIFtzZWxmIGRlc3Ryb3lGSUZPc107Ci0gICAgW3NlbGYgY3JlYXRlRklGT3NdOwot
fQotCi0tICh2b2lkKXRlYXJEb3duCi17Ci0gICAgW3NlbGYgZGVzdHJveUZJRk9zXTsKLX0KLQot
LSh2b2lkKSBjb25uZWN0Ci17Ci0gICAgX3N0YW5kYXJkSW5wdXRQaXBlID0gW05TT3V0cHV0U3Ry
ZWFtIG91dHB1dFN0cmVhbVRvRmlsZUF0UGF0aDpbc2VsZiBpblBpcGVQYXRoXSBhcHBlbmQ6WUVT
XTsKLSAgICBfc3RhbmRhcmRPdXRwdXRQaXBlID0gW05TSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW1X
aXRoRmlsZUF0UGF0aDpbc2VsZiBvdXRQaXBlUGF0aF1dOwotICAgIF9zdGFuZGFyZEVycm9yUGlw
ZSA9IFtOU0lucHV0U3RyZWFtIGlucHV0U3RyZWFtV2l0aEZpbGVBdFBhdGg6W3NlbGYgZXJyb3JQ
aXBlUGF0aF1dOwotCi0gICAgW1tzZWxmIHN0YW5kYXJkSW5wdXRQaXBlXSBzZXREZWxlZ2F0ZTpz
ZWxmXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRQaXBlXSBzZXREZWxlZ2F0ZTpzZWxmXTsK
LSAgICBbW3NlbGYgc3RhbmRhcmRFcnJvclBpcGVdIHNldERlbGVnYXRlOnNlbGZdOwotCi0gICAg
W1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gc2NoZWR1bGVJblJ1bkxvb3A6W05TUnVuTG9vcCBt
YWluUnVuTG9vcF0gZm9yTW9kZTpOU0RlZmF1bHRSdW5Mb29wTW9kZV07Ci0gICAgW1tzZWxmIHN0
YW5kYXJkRXJyb3JQaXBlXSBzY2hlZHVsZUluUnVuTG9vcDpbTlNSdW5Mb29wIG1haW5SdW5Mb29w
XSBmb3JNb2RlOk5TRGVmYXVsdFJ1bkxvb3BNb2RlXTsKLQotICAgIFtbc2VsZiBzdGFuZGFyZElu
cHV0UGlwZV0gb3Blbl07Ci0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gb3Blbl07Ci0g
ICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JQaXBlXSBvcGVuXTsKLQotICAgIFtbc2VsZiByZWxheURl
bGVnYXRlXSBkaWRDb25uZWN0XTsKLX0KLQotLSAodm9pZClkaXNjb25uZWN0Ci17Ci0gICAgW1tz
ZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gY2xvc2VdOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9y
UGlwZV0gY2xvc2VdOwotICAgIFtbc2VsZiBzdGFuZGFyZElucHV0UGlwZV0gY2xvc2VdOwotICAg
IFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWREaXNjb25uZWN0XTsKLX0KLQotLSAodm9pZCljcmVh
dGVGSUZPcwotewotICAgIG1rZmlmbyhbW3NlbGYgaW5QaXBlUGF0aF0gVVRGOFN0cmluZ10sIDA2
NjYpOwotICAgIG1rZmlmbyhbW3NlbGYgb3V0UGlwZVBhdGhdIFVURjhTdHJpbmddLCAwNjY2KTsK
LSAgICBta2ZpZm8oW1tzZWxmIGVycm9yUGlwZVBhdGhdIFVURjhTdHJpbmddLCAwNjY2KTsKLX0K
LQotLSAodm9pZClkZXN0cm95RklGT3MKLXsKLSAgICB1bmxpbmsoW1tzZWxmIGluUGlwZVBhdGhd
IFVURjhTdHJpbmddKTsKLSAgICB1bmxpbmsoW1tzZWxmIG91dFBpcGVQYXRoXSBVVEY4U3RyaW5n
XSk7Ci0gICAgdW5saW5rKFtbc2VsZiBlcnJvclBpcGVQYXRoXSBVVEY4U3RyaW5nXSk7Ci19Ci0K
LS0gKHZvaWQpIHJlbGF5U3RyZWFtOihOU0lucHV0U3RyZWFtICopc3RyZWFtCi17Ci0gICAgdWlu
dDhfdCBieXRlc1sxMDI0XTsKLSAgICBOU0ludGVnZXIgYnl0ZXNSZWFkID0gW3N0cmVhbSByZWFk
OmJ5dGVzIG1heExlbmd0aDoxMDI0XTsKLSAgICBOU0RhdGEgKmRhdGEgPSBbTlNEYXRhIGRhdGFX
aXRoQnl0ZXM6Ynl0ZXMgbGVuZ3RoOmJ5dGVzUmVhZF07Ci0KLSAgICBpZiAoc3RyZWFtID09IFtz
ZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0pCi0gICAgICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBk
aWRSZWNlaXZlU3Rkb3V0RGF0YTpkYXRhXTsKLSAgICBlbHNlCi0gICAgICAgIFtbc2VsZiByZWxh
eURlbGVnYXRlXSBkaWRSZWNlaXZlU3RkZXJyRGF0YTpkYXRhXTsKLX0KLQotLSAodm9pZClzdHJl
YW06KE5TU3RyZWFtICopYVN0cmVhbSBoYW5kbGVFdmVudDooTlNTdHJlYW1FdmVudClldmVudENv
ZGUKLXsKLSAgICBzd2l0Y2ggKGV2ZW50Q29kZSkgewotICAgIGNhc2UgTlNTdHJlYW1FdmVudE5v
bmU6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlNTdHJlYW1FdmVudEhhc0J5dGVzQXZhaWxh
YmxlOgotICAgICAgICBbc2VsZiByZWxheVN0cmVhbTooTlNJbnB1dFN0cmVhbSAqKWFTdHJlYW1d
OwotICAgIGNhc2UgTlNTdHJlYW1FdmVudEhhc1NwYWNlQXZhaWxhYmxlOgotICAgICAgICBicmVh
azsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnRPcGVuQ29tcGxldGVkOgotICAgICAgICBicmVhazsK
LSAgICBjYXNlIE5TU3RyZWFtRXZlbnRFbmRFbmNvdW50ZXJlZDoKLSAgICAgICAgW1tzZWxmIHJl
bGF5RGVsZWdhdGVdIGRpZENyYXNoV2l0aE1lc3NhZ2U6bmlsXTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBOU1N0cmVhbUV2ZW50RXJyb3JPY2N1cnJlZDoKLSAgICAgICAgW1tzZWxmIHJlbGF5
RGVsZWdhdGVdIGRpZENyYXNoV2l0aE1lc3NhZ2U6W1thU3RyZWFtIHN0cmVhbUVycm9yXSBkZXNj
cmlwdGlvbl1dOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLUBlbmQKSW5kZXg6IFRvb2xz
L0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheS5oCShyZXZpc2lv
biAyMTExNDIpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVs
YXkuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IExUUmVsYXlfaAotI2RlZmluZSBMVFJlbGF5X2gKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3Vu
ZGF0aW9uLmg+Ci0KLUBwcm90b2NvbCBMVFJlbGF5RGVsZWdhdGUgPE5TT2JqZWN0PgotLSAodm9p
ZClkaWRDb25uZWN0OwotLSAodm9pZClkaWREaXNjb25uZWN0OwotLSAodm9pZClkaWRDcmFzaFdp
dGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2U7Ci0tICh2b2lkKWRpZFJlY2VpdmVTdGRvdXRE
YXRhOihOU0RhdGEgKilkYXRhOwotLSAodm9pZClkaWRSZWNlaXZlU3RkZXJyRGF0YTooTlNEYXRh
ICopZGF0YTsKLUBlbmQKLQotQHByb3RvY29sIExUUmVsYXkgPE5TT2JqZWN0LCBOU1N0cmVhbURl
bGVnYXRlPgotLSAodm9pZClzZXR1cDsKLS0gKHZvaWQpdGVhckRvd247Ci0tICh2b2lkKWNvbm5l
Y3Q7Ci0tICh2b2lkKWRpc2Nvbm5lY3Q7Ci1AcHJvcGVydHkgKHdlYWspIGlkPExUUmVsYXlEZWxl
Z2F0ZT4gcmVsYXlEZWxlZ2F0ZTsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNPdXRw
dXRTdHJlYW0gKm91dHB1dFN0cmVhbTsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlv
dXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJv
bGxlci5oCShyZXZpc2lvbiAyMTExNDIpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0
VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgTFRSZWxheUNvbnRyb2xsZXJfaAotI2RlZmluZSBMVFJl
bGF5Q29udHJvbGxlcl9oCi0KLSNpbXBvcnQgIkxUUmVsYXkuaCIKLQotI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLUBjbGFzcyBTaW1EZXZpY2U7Ci0KLUBpbnRlcmZhY2UgTFRS
ZWxheUNvbnRyb2xsZXIgOiBOU09iamVjdCA8TFRSZWxheURlbGVnYXRlPgotLSAoaWQpaW5pdFdp
dGhEZXZpY2U6KFNpbURldmljZSAqKWRldmljZSBwcm9kdWN0RGlyOihOU1N0cmluZyAqKXByb2R1
Y3REaXIgYXBwUGF0aDooTlNTdHJpbmcgKilhcHBQYXRoIGRldmljZVVESUQ6KE5TVVVJRCAqKXVk
aWQgZHVtcFRvb2xBcmd1bWVudHM6KE5TQXJyYXkgKilhcmd1bWVudHM7Ci0tICh2b2lkKXN0YXJ0
OwotLSAodm9pZClmaW5pc2g7Ci1AZW5kCi0KLSNlbmRpZgpJbmRleDogVG9vbHMvTGF5b3V0VGVz
dFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIu
bQkocmV2aXNpb24gMjExMTQyKQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RS
ZWxheS9MVFJlbGF5Q29udHJvbGxlci5tCShub25leGlzdGVudCkKQEAgLTEsMjcyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW1wb3J0ICJMVFJlbGF5Q29udHJvbGxlci5oIgotCi0jaW1wb3J0ICJD
b3JlU2ltdWxhdG9yU1BJLmgiCi0jaW1wb3J0ICJMVFBpcGVSZWxheS5oIgotI2ltcG9ydCA8QXBw
S2l0L0FwcEtpdC5oPgotI2ltcG9ydCA8Y3J0X2V4dGVybnMuaD4KLQotQGludGVyZmFjZSBMVFJl
bGF5Q29udHJvbGxlciAoKQotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBkaXNwYXRjaF9z
b3VyY2VfdCBzdGFuZGFyZElucHV0RGlzcGF0Y2hTb3VyY2U7Ci1AcHJvcGVydHkgKHJlYWRvbmx5
LCBzdHJvbmcpIE5TRmlsZUhhbmRsZSAqc3RhbmRhcmRPdXRwdXQ7Ci1AcHJvcGVydHkgKHJlYWRv
bmx5LCBzdHJvbmcpIE5TRmlsZUhhbmRsZSAqc3RhbmRhcmRFcnJvcjsKLUBwcm9wZXJ0eSAocmVh
ZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKmlwY0lkZW50aWZpZXI7Ci1AcHJvcGVydHkgKHJlYWRv
bmx5LCBzdHJvbmcpIE5TU3RyaW5nICphcHBCdW5kbGVJZGVudGlmaWVyOwotQHByb3BlcnR5IChy
ZWFkb25seSwgc3Ryb25nKSBOU1N0cmluZyAqYXBwUGF0aDsKLUBwcm9wZXJ0eSAocmVhZG9ubHks
IHN0cm9uZykgTlNVVUlEICpkZXZpY2VVRElEOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25n
KSBOU0FycmF5ICpkdW1wVG9vbEFyZ3VtZW50czsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9u
ZykgTlNTdHJpbmcgKnByb2R1Y3REaXI7Ci1AcHJvcGVydHkgKHN0cm9uZykgU2ltRGV2aWNlICpk
ZXZpY2U7Ci1AcHJvcGVydHkgKHN0cm9uZykgaWQ8TFRSZWxheT4gcmVsYXk7Ci1AcHJvcGVydHkg
cGlkX3QgcGlkOwotQHByb3BlcnR5IChzdHJvbmcpIGRpc3BhdGNoX3NvdXJjZV90IGFwcERpc3Bh
dGNoU291cmNlOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gTFRSZWxheUNvbnRyb2xsZXIKLQot
LSAoaWQpaW5pdFdpdGhEZXZpY2U6KFNpbURldmljZSAqKWRldmljZSBwcm9kdWN0RGlyOihOU1N0
cmluZyAqKXByb2R1Y3REaXIgYXBwUGF0aDooTlNTdHJpbmcgKilhcHBQYXRoIGRldmljZVVESUQ6
KE5TVVVJRCAqKXVkaWQgZHVtcFRvb2xBcmd1bWVudHM6KE5TQXJyYXkgKilhcmd1bWVudHMKLXsK
LSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKSB7Ci0gICAgICAgIF9kZXZpY2UgPSBkZXZp
Y2U7Ci0gICAgICAgIF9wcm9kdWN0RGlyID0gcHJvZHVjdERpcjsKLSAgICAgICAgX2FwcFBhdGgg
PSBhcHBQYXRoOwotICAgICAgICBfYXBwQnVuZGxlSWRlbnRpZmllciA9IFtbTlNCdW5kbGUgYnVu
ZGxlV2l0aFBhdGg6YXBwUGF0aF0gYnVuZGxlSWRlbnRpZmllcl07Ci0gICAgICAgIF9kZXZpY2VV
RElEID0gdWRpZDsKLSAgICAgICAgX2R1bXBUb29sQXJndW1lbnRzID0gYXJndW1lbnRzOwotICAg
ICAgICBfc3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNlID0gZGlzcGF0Y2hfc291cmNlX2NyZWF0
ZShESVNQQVRDSF9TT1VSQ0VfVFlQRV9SRUFELCBTVERJTl9GSUxFTk8sIDAsIGRpc3BhdGNoX2dl
dF9tYWluX3F1ZXVlKCkpOwotICAgICAgICBfc3RhbmRhcmRPdXRwdXQgPSBbTlNGaWxlSGFuZGxl
IGZpbGVIYW5kbGVXaXRoU3RhbmRhcmRPdXRwdXRdOwotICAgICAgICBfc3RhbmRhcmRFcnJvciA9
IFtOU0ZpbGVIYW5kbGUgZmlsZUhhbmRsZVdpdGhTdGFuZGFyZEVycm9yXTsKLQotICAgICAgICBk
aXNwYXRjaF9zb3VyY2Vfc2V0X2V2ZW50X2hhbmRsZXIoX3N0YW5kYXJkSW5wdXREaXNwYXRjaFNv
dXJjZSwgXnsKLSAgICAgICAgICAgIHVpbnQ4X3QgYnVmZmVyWzEwMjRdOwotICAgICAgICAgICAg
c3NpemVfdCBsZW4gPSByZWFkKFNURElOX0ZJTEVOTywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7
Ci0gICAgICAgICAgICBpZiAobGVuID4gMCkgewotICAgICAgICAgICAgICAgIEB0cnkgewotICAg
ICAgICAgICAgICAgICAgICBbW1tzZWxmIHJlbGF5XSBvdXRwdXRTdHJlYW1dIHdyaXRlOmJ1ZmZl
ciBtYXhMZW5ndGg6bGVuXTsKLSAgICAgICAgICAgICAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24g
KmUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQnJva2VuIHBpcGUgLSB0aGUgZHVtcCB0b29s
IGNyYXNoZWQuIFRpbWUgdG8gZGllLgotICAgICAgICAgICAgICAgICAgICBbc2VsZiBkaWRDcmFz
aFdpdGhNZXNzYWdlOm5pbF07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAvLyBFT0YgUmVjZWl2ZWQgb24gdGhlIHJlbGF5J3Mgc3RhbmRh
cmQgaW5wdXQuCi0gICAgICAgICAgICAgICAgW3NlbGYgZmluaXNoXTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSk7Ci0KLSAgICAgICAgX3JlbGF5ID0gW1tMVFBpcGVSZWxheSBhbGxvY10gaW5p
dFdpdGhQcmVmaXg6W0AiL3RtcCIgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OnNlbGYu
aXBjSWRlbnRpZmllcl1dOwotICAgICAgICBbX3JlbGF5IHNldFJlbGF5RGVsZWdhdGU6c2VsZl07
Ci0gICAgfQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChOU1N0cmluZyAqKWlwY0lkZW50aWZp
ZXIKLXsKLSAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQC0lQCIsIHNl
bGYuYXBwQnVuZGxlSWRlbnRpZmllciwgc2VsZi5kZXZpY2VVRElELlVVSURTdHJpbmddOwotfQot
Ci0tIChOU1N0cmluZyAqKXByb2Nlc3NOYW1lCi17Ci0gICAgcmV0dXJuIFtzZWxmLmFwcEJ1bmRs
ZUlkZW50aWZpZXIgY29tcG9uZW50c1NlcGFyYXRlZEJ5U3RyaW5nOkAiLiJdLmxhc3RPYmplY3Q7
Ci19Ci0KLS0gKHZvaWQpZGlkUmVjZWl2ZVN0ZG91dERhdGE6KE5TRGF0YSAqKWRhdGEKLXsKLSAg
ICBAdHJ5IHsKLSAgICAgICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0XSB3cml0ZURhdGE6ZGF0YV07
Ci0gICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRpb24pIHsKLSAgICAgICAgLy8gTlNG
aWxlSGFuZGxlT3BlcmF0aW9uRXhjZXB0aW9uCi0gICAgICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhl
IHRlc3QgaGFybmVzcyBzdG9wcGVkIGxpc3RlbmluZyB0byB1cywKLSAgICAgICAgLy8gcHJvYmFi
bHkgYmVjYXVzZSB3ZSB0aW1lZCBvdXQgb3IgYSBydW4gd2FzIGNhbmNlbGVkLgotICAgICAgICBl
eGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotfQotCi0tICh2b2lkKWRpZFJlY2VpdmVTdGRlcnJE
YXRhOihOU0RhdGEgKilkYXRhCi17Ci0gICAgQHRyeSB7Ci0gICAgICAgIFtbc2VsZiBzdGFuZGFy
ZEVycm9yXSB3cml0ZURhdGE6ZGF0YV07Ci0gICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNl
cHRpb24pIHsKLSAgICAgICAgLy8gTlNGaWxlSGFuZGxlT3BlcmF0aW9uRXhjZXB0aW9uCi0gICAg
ICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhlIHRlc3QgaGFybmVzcyBzdG9wcGVkIGxpc3RlbmluZyB0
byB1cywKLSAgICAgICAgLy8gcHJvYmFibHkgYmVjYXVzZSB3ZSB0aW1lZCBvdXQgb3IgYSBydW4g
d2FzIGNhbmNlbGVkLgotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotfQotCi0t
ICh2b2lkKWRpZERpc2Nvbm5lY3QKLXsKLSAgICBkaXNwYXRjaF9zdXNwZW5kKFtzZWxmIHN0YW5k
YXJkSW5wdXREaXNwYXRjaFNvdXJjZV0pOwotfQotCi0tICh2b2lkKWRpZENvbm5lY3QKLXsKLSAg
ICBkaXNwYXRjaF9yZXN1bWUoW3NlbGYgc3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNlXSk7Ci19
Ci0KLS0gKHZvaWQpZGlkQ3Jhc2hXaXRoTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCi17Ci0g
ICAgW1tzZWxmIHJlbGF5XSBkaXNjb25uZWN0XTsKLSAgICBOU1N0cmluZyAqY3Jhc2hNZXNzYWdl
ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJcbiNDUkFTSEVEIC0gJUAgKHBpZCAlZClc
biIsIFtzZWxmIHByb2Nlc3NOYW1lXSwgW3NlbGYgcGlkXV07Ci0KLSAgICBpZiAobWVzc2FnZSkK
LSAgICAgICAgY3Jhc2hNZXNzYWdlID0gW2NyYXNoTWVzc2FnZSBzdHJpbmdCeUFwcGVuZGluZ0Zv
cm1hdDpAIiVAXG4iLCBtZXNzYWdlXTsKLQotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSB3cml0
ZURhdGE6W2NyYXNoTWVzc2FnZSBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGlu
Z11dOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSBjbG9zZUZpbGVdOwotICAgIFtbc2VsZiBz
dGFuZGFyZE91dHB1dF0gY2xvc2VGaWxlXTsKLSAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci19Ci0K
LS0gKHZvaWQpaW5zdGFsbEFwcAotewotICAgIE5TRGljdGlvbmFyeSAqaW5zdGFsbE9wdGlvbnMg
PSBAewotICAgICAgICAoTlNTdHJpbmcgKilrQ0ZCdW5kbGVJZGVudGlmaWVyS2V5OiBzZWxmLmFw
cEJ1bmRsZUlkZW50aWZpZXIsCi0gICAgfTsKLQotICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOwot
ICAgIEJPT0wgaW5zdGFsbGVkID0gW3NlbGYuZGV2aWNlIGluc3RhbGxBcHBsaWNhdGlvbjpbTlNV
UkwgZmlsZVVSTFdpdGhQYXRoOnNlbGYuYXBwUGF0aF0gd2l0aE9wdGlvbnM6aW5zdGFsbE9wdGlv
bnMgZXJyb3I6JmVycm9yXTsKLSAgICBpZiAoIWluc3RhbGxlZCkgewotICAgICAgICBOU0xvZyhA
IkNvdWxkbid0IGluc3RhbGwgJUA6ICVAIiwgc2VsZi5hcHBQYXRoLCBlcnJvci5kZXNjcmlwdGlv
bik7Ci0gICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpa2ls
bEFwcAotewotICAgIGRpc3BhdGNoX3NvdXJjZV90IGRpc3BhdGNoID0gW3NlbGYgYXBwRGlzcGF0
Y2hTb3VyY2VdOwotCi0gICAgaWYgKGRpc3BhdGNoKQotICAgICAgICBkaXNwYXRjaF9zb3VyY2Vf
Y2FuY2VsKGRpc3BhdGNoKTsKLQotICAgIGlmIChbc2VsZiBwaWRdID4gMSkgewotICAgICAgICBr
aWxsKHNlbGYucGlkLCBTSUdLSUxMKTsKLSAgICAgICAgW3NlbGYgc2V0UGlkOi0xXTsKLSAgICB9
Ci0gICAgW3NlbGYgc2V0QXBwRGlzcGF0Y2hTb3VyY2U6bmlsXTsKLX0KLQotLSAoTlNEaWN0aW9u
YXJ5ICopX2Vudmlyb25tZW50VmFyaWFibGVzCi17Ci0gICAgc3RhdGljIE5TRGljdGlvbmFyeSAq
ZW52aXJvbm1lbnRWYXJpYWJsZXM7Ci0gICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlOwot
Ci0gICAgZGlzcGF0Y2hfb25jZSgmb25jZSwgXnsKLSAgICAgICAgTlNTdHJpbmcgKnByb2R1Y3RE
aXJlY3RvcnkgPSBbc2VsZiBwcm9kdWN0RGlyXTsKLQotICAgICAgICBOU011dGFibGVEaWN0aW9u
YXJ5ICpkaWN0aW9uYXJ5ID0gW0B7Ci0gICAgICAgICAgICBAIklQQ19JREVOVElGSUVSIjogc2Vs
Zi5pcGNJZGVudGlmaWVyLAotICAgICAgICAgICAgQCJEWUxEX0ZSQU1FV09SS19QQVRIIjogcHJv
ZHVjdERpcmVjdG9yeSwKLSAgICAgICAgICAgIEAiX19YUENfRFlMRF9GUkFNRVdPUktfUEFUSCI6
IHByb2R1Y3REaXJlY3RvcnksCi0gICAgICAgICAgICBAIkRZTERfTElCUkFSWV9QQVRIIjogcHJv
ZHVjdERpcmVjdG9yeSwKLSAgICAgICAgICAgIEAiX19YUENfRFlMRF9MSUJSQVJZX1BBVEgiOiBw
cm9kdWN0RGlyZWN0b3J5LAotICAgICAgICB9IG11dGFibGVDb3B5XTsKLQotICAgICAgICBmb3Ig
KE5TU3RyaW5nICprZXlOYW1lIGluIEBbQCJEWUxEX0lOU0VSVF9MSUJSQVJJRVMiLCBAIk1hbGxv
Y1N0YWNrTG9nZ2luZyIsIEAiTE9DQUxfUkVTT1VSQ0VfUk9PVCIsIEAiRFVNUFJFTkRFUlRSRUVf
VEVNUCJdKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiB2YWx1ZSA9IGdldGVudihba2V5TmFt
ZSBVVEY4U3RyaW5nXSk7Ci0gICAgICAgICAgICBpZiAodmFsdWUgJiYgc3RybGVuKHZhbHVlKSkg
ewotICAgICAgICAgICAgICAgIE5TU3RyaW5nICpuc1ZhbHVlID0gW05TU3RyaW5nIHN0cmluZ1dp
dGhVVEY4U3RyaW5nOnZhbHVlXTsKLSAgICAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmpl
Y3Q6bnNWYWx1ZSBmb3JLZXk6a2V5TmFtZV07Ci0gICAgICAgICAgICAgICAgW2RpY3Rpb25hcnkg
c2V0T2JqZWN0Om5zVmFsdWUgZm9yS2V5OltAIl9fWFBDXyIgc3RyaW5nQnlBcHBlbmRpbmdTdHJp
bmc6a2V5TmFtZV1dOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChj
aGFyKiogZW52cCA9ICpfTlNHZXRFbnZpcm9uKCk7ICplbnZwOyBlbnZwKyspIHsKLSAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIGVudiA9ICplbnZwOwotICAgICAgICAgICAgaWYgKCFzdHJuY21wKCJK
U0NfIiwgZW52LCA0KSB8fCAhc3RybmNtcCgiX19YUENfSlNDXyIsIGVudiwgMTApKSB7Ci0gICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogZXF1YWwgPSBzdHJjaHIoZW52LCAnPScpOwotICAgICAg
ICAgICAgICAgIGlmICghZXF1YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgTlNMb2coQCJNaXNz
aW5nICc9JyBpbiBlbnYgdmFyICclcyciLCBlbnYpOwotICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3Qg
c2l6ZV90IG1heEtleUxlbmd0aCA9IDI1NjsKLSAgICAgICAgICAgICAgICBzaXplX3Qga2V5TGVu
Z3RoID0gZXF1YWwgLSBlbnY7Ci0gICAgICAgICAgICAgICAgaWYgKGtleUxlbmd0aCA+PSBtYXhL
ZXlMZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgTlNMb2coQCJFbnYgdmFyICclcycgaXMg
dG9vIGxvbmciLCBlbnYpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjaGFyIGtleVttYXhLZXlMZW5ndGhdOwotICAg
ICAgICAgICAgICAgIHN0cm5jcHkoa2V5LCBlbnYsIGtleUxlbmd0aCk7Ci0gICAgICAgICAgICAg
ICAga2V5W2tleUxlbmd0aF0gPSAnXDAnOwotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZh
bHVlID0gZXF1YWwgKyAxOwotCi0gICAgICAgICAgICAgICAgTlNTdHJpbmcgKm5zS2V5ID0gW05T
U3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmtleV07Ci0gICAgICAgICAgICAgICAgTlNTdHJp
bmcgKm5zVmFsdWUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6dmFsdWVdOwotICAg
ICAgICAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpuc1ZhbHVlIGZvcktleTpuc0tleV07
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBlbnZpcm9ubWVudFZhcmlhYmxl
cyA9IFtkaWN0aW9uYXJ5IGNvcHldOwotICAgIH0pOwotCi0gICAgcmV0dXJuIGVudmlyb25tZW50
VmFyaWFibGVzOwotfQotCi0tICh2b2lkKWxhdW5jaEFwcAotewotICAgIE5TRGljdGlvbmFyeSAq
bGF1bmNoT3B0aW9ucyA9IEB7Ci0gICAgICAgIGtTaW1EZXZpY2VMYXVuY2hBcHBsaWNhdGlvbkVu
dmlyb25tZW50OiBbc2VsZiBfZW52aXJvbm1lbnRWYXJpYWJsZXNdLAotICAgICAgICBrU2ltRGV2
aWNlTGF1bmNoQXBwbGljYXRpb25Bcmd1bWVudHM6IFtzZWxmIGR1bXBUb29sQXJndW1lbnRzXSwK
LSAgICB9OwotCi0gICAgTlNFcnJvciAqZXJyb3I7Ci0gICAgcGlkX3QgcGlkID0gW3NlbGYuZGV2
aWNlIGxhdW5jaEFwcGxpY2F0aW9uV2l0aElEOnNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciBvcHRp
b25zOmxhdW5jaE9wdGlvbnMgZXJyb3I6JmVycm9yXTsKLQotICAgIGlmIChwaWQgPCAwKSB7Ci0g
ICAgICAgIE5TTG9nKEAiQ291bGRuJ3QgbGF1bmNoICVAOiAlQCIsIHNlbGYuYXBwQnVuZGxlSWRl
bnRpZmllciwgZXJyb3IuZGVzY3JpcHRpb24pOwotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7
Ci0gICAgfQotCi0gICAgW3NlbGYgc2V0UGlkOnBpZF07Ci0KLSAgICBkaXNwYXRjaF9xdWV1ZV90
IHF1ZXVlID0gZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKTsKLSAgICBkaXNwYXRjaF9zb3VyY2Vf
dCBzaW11bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3VyY2UgPSBkaXNwYXRjaF9zb3VyY2VfY3JlYXRl
KERJU1BBVENIX1NPVVJDRV9UWVBFX1BST0MsIFtzZWxmIHBpZF0sIERJU1BBVENIX1BST0NfRVhJ
VCwgcXVldWUpOwotICAgIFtzZWxmIHNldEFwcERpc3BhdGNoU291cmNlOnNpbXVsYXRvckFwcEV4
aXREaXNwYXRjaFNvdXJjZV07Ci0gICAgZGlzcGF0Y2hfc291cmNlX3NldF9ldmVudF9oYW5kbGVy
KHNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSwgXnsKLSAgICAgICAgZGlzcGF0Y2hfc291
cmNlX2NhbmNlbChzaW11bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3VyY2UpOwotICAgICAgICBbc2Vs
ZiBkaWRDcmFzaFdpdGhNZXNzYWdlOm5pbF07Ci0gICAgfSk7Ci0gICAgZGlzcGF0Y2hfcmVzdW1l
KHNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSk7Ci19Ci0KLS0gKHZvaWQpc3RhcnQKLXsK
LSAgICBbc2VsZiBpbnN0YWxsQXBwXTsKLSAgICBbW3NlbGYgcmVsYXldIHNldHVwXTsKLSAgICBb
c2VsZiBsYXVuY2hBcHBdOwotICAgIFtbc2VsZiByZWxheV0gY29ubmVjdF07Ci19Ci0KLS0gKHZv
aWQpZmluaXNoCi17Ci0gICAgW1tzZWxmIHJlbGF5XSBkaXNjb25uZWN0XTsKLSAgICBbc2VsZiBr
aWxsQXBwXTsKLSAgICBleGl0KEVYSVRfU1VDQ0VTUyk7Ci19Ci0KLUBlbmQKSW5kZXg6IFRvb2xz
L0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvbWFpbi5tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvbWFpbi5tCShyZXZpc2lvbiAyMTEx
NDIpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L21haW4ubQkobm9u
ZXhpc3RlbnQpCkBAIC0xLDEzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAi
Q29yZVNpbXVsYXRvclNQSS5oIgotI2ltcG9ydCAiTFRSZWxheUNvbnRyb2xsZXIuaCIKLSNpbXBv
cnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi1zdGF0aWMgTFRSZWxheUNvbnRyb2xsZXIg
KnJlbGF5Q29udHJvbGxlcjsKLQotdm9pZCB1c2FnZSgpCi17Ci0gICAgTlNTdHJpbmcgKmhlbHBU
ZXh0ID0gQCJMYXlvdXRUZXN0UmVsYXk6IHJ1biBhIGR1bXAgdG9vbCBpbiB0aGUgc2ltdWxhdG9y
LiBOb3QgZm9yIGRpcmVjdCBjb25zdW1wdGlvbi5cbiIKLSAgICAgICAgIlVzYWdlOiBMYXlvdXRU
ZXN0UmVsYXkgWy1oXSBbb3B0aW9uc10gLS0gW2R1bXAgdG9vbCBhcmd1bWVudHNdXG4iCi0gICAg
ICAgICJSZXF1aXJlZCBvcHRpb25zOlxuIgotICAgICAgICAiICAgIC11ZGlkIDxpZGVudGlmaWVy
PiAgICAgICBTaW11bGF0b3IgZGV2aWNlIGlkZW50aWZpZXJcbiIKLSAgICAgICAgIiAgICAtYXBw
IDxhcHBfcGF0aD4gICAgICAgICAgUGF0aCB0byB0aGUgYnVpbHQgaU9TIC5hcHAgYnVuZGxlIGRp
cmVjdG9yeS5cbiIKLSAgICAgICAgIiAgICAtcHJvZHVjdERpciA8ZGlyPiAgICAgICAgL3BhdGgv
dG8vV2ViS2l0QnVpbGQve2NvbmZpZ3VyYXRpb259LXtzaG9ydCBwbGF0Zm9ybX0uXG4iOwotCi0g
ICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgW2hlbHBUZXh0IFVURjhTdHJpbmddKTsKLX0KLQot
TlNTdHJpbmcgKmdldFJlcXVpcmVkU3RyaW5nQXJndW1lbnQoTlNTdHJpbmcgKnBhcmFtZXRlcikK
LXsKLSAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRh
cmRVc2VyRGVmYXVsdHNdOwotICAgIE5TU3RyaW5nICphcmd1bWVudCA9IFtkZWZhdWx0cyBzdHJp
bmdGb3JLZXk6cGFyYW1ldGVyXTsKLQotICAgIGlmICghYXJndW1lbnQpIHsKLSAgICAgICAgTlNM
b2coQCItJUAgaXMgcmVxdWlyZWQuIiwgcGFyYW1ldGVyKTsKLSAgICAgICAgdXNhZ2UoKTsKLSAg
ICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0KLSAgICByZXR1cm4gYXJndW1lbnQ7Ci19
Ci0KLU5TQXJyYXkgKmdldER1bXBUb29sQXJndW1lbnRzKCkKLXsKLSAgICBOU011dGFibGVBcnJh
eSAqZHVtcFRvb2xBcmd1bWVudHMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKLSAg
ICBOU0FycmF5ICpwcm9jZXNzQXJncyA9IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gYXJn
dW1lbnRzXTsKLSAgICBCT09MIGFwcGVuZGluZyA9IE5POwotICAgIGZvciAoTlNTdHJpbmcgKmFy
ZyBpbiBwcm9jZXNzQXJncykgewotICAgICAgICBpZiAoW2FyZyBpc0VxdWFsVG9TdHJpbmc6QCIt
LSJdKSB7Ci0gICAgICAgICAgICBhcHBlbmRpbmcgPSBZRVM7Ci0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoYXBwZW5kaW5nKQotICAgICAgICAgICAgW2R1bXBU
b29sQXJndW1lbnRzIGFkZE9iamVjdDphcmddOwotICAgIH0KLSAgICByZXR1cm4gZHVtcFRvb2xB
cmd1bWVudHM7Ci19Ci0KLXZvaWQgZmluaXNoKCkKLXsKLSAgICBbcmVsYXlDb250cm9sbGVyIGZp
bmlzaF07Ci19Ci0KLXZvaWQgcmVjZWl2ZWRTaWduYWwoaW50IHNpZ25hbCkKLXsKLSAgICBleGl0
KEVYSVRfU1VDQ0VTUyk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICogYXJn
dltdKQotewotICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBOU0FycmF5ICpoZWxwQXJn
dW1lbnRzID0gQFtAIi1oIiwgQCItLWhlbHAiXTsKLSAgICAgICAgZm9yIChOU1N0cmluZyAqaGVs
cEFyZ3VtZW50IGluIGhlbHBBcmd1bWVudHMpIHsKLSAgICAgICAgICAgIGlmIChbW1tOU1Byb2Nl
c3NJbmZvIHByb2Nlc3NJbmZvXSBhcmd1bWVudHNdIGluZGV4T2ZPYmplY3Q6aGVscEFyZ3VtZW50
XSAhPSBOU05vdEZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgdXNhZ2UoKTsKLSAgICAgICAgICAg
ICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotI2lm
IFVTRV9TSU1fU0VSVklDRV9DT05URVhUCi0gICAgICAgIE5TU3RyaW5nICpkZXZlbG9wZXJEaXJl
Y3RvcnkgPSBnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAiZGV2ZWxvcGVyRGlyIik7Ci0jZW5k
aWYKLSAgICAgICAgTlNVVUlEICp1ZGlkID0gW1tOU1VVSUQgYWxsb2NdIGluaXRXaXRoVVVJRFN0
cmluZzpnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAidWRpZCIpXTsKLSAgICAgICAgTlNTdHJp
bmcgKmFwcFBhdGggPSBnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAiYXBwIik7Ci0gICAgICAg
IE5TU3RyaW5nICpwcm9kdWN0RGlyZWN0b3J5ID0gZ2V0UmVxdWlyZWRTdHJpbmdBcmd1bWVudChA
InByb2R1Y3REaXIiKTsKLSAgICAgICAgTlNBcnJheSAqZHVtcFRvb2xBcmd1bWVudHMgPSBnZXRE
dW1wVG9vbEFyZ3VtZW50cygpOwotCi0jaWYgVVNFX1NJTV9TRVJWSUNFX0NPTlRFWFQKLSAgICAg
ICAgTlNFcnJvciAqZXJyb3I7Ci0gICAgICAgIFNpbVNlcnZpY2VDb250ZXh0ICpzZXJ2aWNlQ29u
dGV4dCA9IFtTaW1TZXJ2aWNlQ29udGV4dCBzaGFyZWRTZXJ2aWNlQ29udGV4dEZvckRldmVsb3Bl
ckRpcjpkZXZlbG9wZXJEaXJlY3RvcnkgZXJyb3I6JmVycm9yXTsKLSAgICAgICAgaWYgKCFzZXJ2
aWNlQ29udGV4dCkgewotICAgICAgICAgICAgTlNMb2coQCJEZXZpY2UgY29udGV4dCBjb3VsZG4n
dCBiZSBmb3VuZDogJUAiLCBlcnJvcik7Ci0gICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7
Ci0gICAgICAgIH0KLSAgICAgICAgU2ltRGV2aWNlU2V0ICpkZXZpY2VTZXQgPSBbc2VydmljZUNv
bnRleHQgZGVmYXVsdERldmljZVNldFdpdGhFcnJvcjpuaWxdOwotICAgICAgICBpZiAoIWRldmlj
ZVNldCkgewotICAgICAgICAgICAgTlNMb2coQCJEZWZhdWx0IGRldmljZSBzZXQgY291bGRuJ3Qg
YmUgZm91bmQ6ICVAIiwgZXJyb3IpOwotICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwot
ICAgICAgICB9Ci0gICAgICAgIFNpbURldmljZSAqZGV2aWNlID0gW2RldmljZVNldC5kZXZpY2Vz
QnlVRElEIG9iamVjdEZvcktleTp1ZGlkXTsKLSNlbHNlCi0gICAgICAgIFNpbURldmljZSAqZGV2
aWNlID0gW1NpbURldmljZVNldC5kZWZhdWx0U2V0LmRldmljZXNCeVVESUQgb2JqZWN0Rm9yS2V5
OnVkaWRdOwotI2VuZGlmCi0gICAgICAgIGlmICghZGV2aWNlKSB7Ci0gICAgICAgICAgICBOU0xv
ZyhAIkRldmljZSAlQCBjb3VsZG4ndCBiZSBmb3VuZCIsIHVkaWQpOwotICAgICAgICAgICAgZXhp
dChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVsYXlDb250cm9sbGVyID0g
W1tMVFJlbGF5Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhEZXZpY2U6ZGV2aWNlIHByb2R1Y3RE
aXI6cHJvZHVjdERpcmVjdG9yeSBhcHBQYXRoOmFwcFBhdGggZGV2aWNlVURJRDp1ZGlkIGR1bXBU
b29sQXJndW1lbnRzOmR1bXBUb29sQXJndW1lbnRzXTsKLSAgICAgICAgW3JlbGF5Q29udHJvbGxl
ciBzdGFydF07Ci0KLSAgICAgICAgYXRleGl0KGZpbmlzaCk7Ci0gICAgICAgIHNpZ25hbChTSUdJ
TlQsIHJlY2VpdmVkU2lnbmFsKTsKLSAgICAgICAgc2lnbmFsKFNJR1RFUk0sIHJlY2VpdmVkU2ln
bmFsKTsKLQotICAgICAgICBbW05TUnVuTG9vcCBtYWluUnVuTG9vcF0gcnVuXTsKLSAgICB9Ci0g
ICAgcmV0dXJuIDA7Ci19CkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJl
bGF5Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0
VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAyMTExNDIpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMDIgKzAsMCBAQAot
Ly8gISQqVVRGOCokIQotewotCWFyY2hpdmVWZXJzaW9uID0gMTsKLQljbGFzc2VzID0gewotCX07
Ci0Jb2JqZWN0VmVyc2lvbiA9IDQ2OwotCW9iamVjdHMgPSB7Ci0KLS8qIEJlZ2luIFBCWEJ1aWxk
RmlsZSBzZWN0aW9uICovCi0JCTJFOEQzRUY4MTk4ODFENDMwMDRGNkNDMiAvKiBtYWluLm0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRThEM0VGNzE5ODgx
RDQzMDA0RjZDQzIgLyogbWFpbi5tICovOyB9OwotCQkyRThEM0YwMjE5ODgxRkQwMDA0RjZDQzIg
LyogTFRQaXBlUmVsYXkubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJFOEQzRjAxMTk4ODFGRDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5tICovOyB9Owot
CQkyRThEM0YwNjE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIubSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOEQzRjA1MTk4ODI0MDYw
MDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5tICovOyB9OwotLyogRW5kIFBCWEJ1aWxkRmls
ZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWENvcHlGaWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAq
LwotCQkyRThEM0VGMjE5ODgxRDQzMDA0RjZDQzIgLyogQ29weUZpbGVzICovID0gewotCQkJaXNh
ID0gUEJYQ29weUZpbGVzQnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2
NDc7Ci0JCQlkc3RQYXRoID0gL3Vzci9zaGFyZS9tYW4vbWFuMS87Ci0JCQlkc3RTdWJmb2xkZXJT
cGVjID0gMDsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAxOwotCQl9OwotLyogRW5kIFBCWENvcHlGaWxlc0J1aWxkUGhhc2Ugc2Vj
dGlvbiAqLwotCi0vKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KLQkJMkU4RDNF
RjQxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxl
IjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gTGF5b3V0VGVzdFJlbGF5OyBzb3VyY2VUcmVl
ID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQkyRThEM0VGNzE5ODgxRDQzMDA0RjZDQzIgLyog
bWFpbi5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLm9iamM7IHBhdGggPSBtYWluLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lnhj
Y29uZmlnOyBuYW1lID0gRGVidWdSZWxlYXNlLnhjY29uZmlnOyBwYXRoID0gQ29uZmlndXJhdGlv
bnMvRGVidWdSZWxlYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQky
RThEM0VGRjE5ODgxRTI1MDA0RjZDQzIgLyogQmFzZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IG5hbWUgPSBC
YXNlLnhjY29uZmlnOyBwYXRoID0gQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZzsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDAxOTg4MUYyOTAwNEY2Q0MyIC8qIExUUmVs
YXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTFRSZWxheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkyRThEM0YwMTE5ODgxRkQwMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkubSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gTFRQaXBlUmVsYXkubTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDMxOTg4MUZFMjAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExUUGlwZVJlbGF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTJFOEQzRjA0MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMVFJlbGF5Q29udHJvbGxlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0YwNTE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxh
eUNvbnRyb2xsZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gTFRSZWxh
eUNvbnRyb2xsZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0UxRkJDMTUxQjI5
MEU3OTAwMDEzNkY1IC8qIENvcmVTaW11bGF0b3JTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29yZVNpbXVsYXRvclNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhGcmFt
ZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0JCTJFOEQzRUYxMTk4ODFENDMwMDRGNkNDMiAv
KiBGcmFtZXdvcmtzICovID0gewotCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7Ci0J
CQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07Ci0vKiBFbmQgUEJY
RnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhHcm91cCBzZWN0
aW9uICovCi0JCTJFOEQzRUVCMTk4ODFENDMwMDRGNkNDMiA9IHsKLQkJCWlzYSA9IFBCWEdyb3Vw
OwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMkU4RDNFRkYxOTg4MUUyNTAwNEY2Q0MyIC8qIEJhc2Uu
eGNjb25maWcgKi8sCi0JCQkJMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFz
ZS54Y2NvbmZpZyAqLywKLQkJCQkyRThEM0VGNjE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVz
dFJlbGF5ICovLAotCQkJCTJFOEQzRUY1MTk4ODFENDMwMDRGNkNDMiAvKiBQcm9kdWN0cyAqLywK
LQkJCSk7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQkyRThEM0VGNTE5ODgx
RDQzMDA0RjZDQzIgLyogUHJvZHVjdHMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNo
aWxkcmVuID0gKAotCQkJCTJFOEQzRUY0MTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVs
YXkgKi8sCi0JCQkpOwotCQkJbmFtZSA9IFByb2R1Y3RzOwotCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKLQkJfTsKLQkJMkU4RDNFRjYxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxh
eSAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMkU4RDNF
RjcxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSAqLywKLQkJCQlDRTFGQkMxNTFCMjkwRTc5MDAw
MTM2RjUgLyogQ29yZVNpbXVsYXRvclNQSS5oICovLAotCQkJCTJFOEQzRjAwMTk4ODFGMjkwMDRG
NkNDMiAvKiBMVFJlbGF5LmggKi8sCi0JCQkJMkU4RDNGMDExOTg4MUZEMDAwNEY2Q0MyIC8qIExU
UGlwZVJlbGF5Lm0gKi8sCi0JCQkJMkU4RDNGMDMxOTg4MUZFMjAwNEY2Q0MyIC8qIExUUGlwZVJl
bGF5LmggKi8sCi0JCQkJMkU4RDNGMDQxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9s
bGVyLmggKi8sCi0JCQkJMkU4RDNGMDUxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9s
bGVyLm0gKi8sCi0JCQkpOwotCQkJcGF0aCA9IExheW91dFRlc3RSZWxheTsKLQkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0vKiBFbmQgUEJYR3JvdXAgc2VjdGlvbiAqLwotCi0vKiBC
ZWdpbiBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLwotCQkyRThEM0VGMzE5ODgxRDQzMDA0RjZD
QzIgLyogTGF5b3V0VGVzdFJlbGF5ICovID0gewotCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0Owot
CQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDJFOEQzRUZCMTk4ODFENDMwMDRGNkNDMiAvKiBC
dWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiTGF5b3V0VGVzdFJl
bGF5IiAqLzsKLQkJCWJ1aWxkUGhhc2VzID0gKAotCQkJCTJFOEQzRUYwMTk4ODFENDMwMDRGNkND
MiAvKiBTb3VyY2VzICovLAotCQkJCTJFOEQzRUYxMTk4ODFENDMwMDRGNkNDMiAvKiBGcmFtZXdv
cmtzICovLAotCQkJCTJFOEQzRUYyMTk4ODFENDMwMDRGNkNDMiAvKiBDb3B5RmlsZXMgKi8sCi0J
CQkpOwotCQkJYnVpbGRSdWxlcyA9ICgKLQkJCSk7Ci0JCQlkZXBlbmRlbmNpZXMgPSAoCi0JCQkp
OwotCQkJbmFtZSA9IExheW91dFRlc3RSZWxheTsKLQkJCXByb2R1Y3ROYW1lID0gTGF5b3V0VGVz
dFJlbGF5OwotCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDJFOEQzRUY0MTk4ODFENDMwMDRGNkNDMiAv
KiBMYXlvdXRUZXN0UmVsYXkgKi87Ci0JCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVj
dC10eXBlLnRvb2wiOwotCQl9OwotLyogRW5kIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCi0K
LS8qIEJlZ2luIFBCWFByb2plY3Qgc2VjdGlvbiAqLwotCQkyRThEM0VFQzE5ODgxRDQzMDA0RjZD
QzIgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7Ci0JCQlpc2EgPSBQQlhQcm9qZWN0OwotCQkJYXR0
cmlidXRlcyA9IHsKLQkJCQlMYXN0VXBncmFkZUNoZWNrID0gMDYwMDsKLQkJCQlPUkdBTklaQVRJ
T05OQU1FID0gIkFwcGxlLCBJbmMuIjsKLQkJCQlUYXJnZXRBdHRyaWJ1dGVzID0gewotCQkJCQky
RThEM0VGMzE5ODgxRDQzMDA0RjZDQzIgPSB7Ci0JCQkJCQlDcmVhdGVkT25Ub29sc1ZlcnNpb24g
PSA2LjA7Ci0JCQkJCX07Ci0JCQkJfTsKLQkJCX07Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0
ID0gMkU4RDNFRUYxOTg4MUQ0MzAwNEY2Q0MyIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBm
b3IgUEJYUHJvamVjdCAiTGF5b3V0VGVzdFJlbGF5IiAqLzsKLQkJCWNvbXBhdGliaWxpdHlWZXJz
aW9uID0gIlhjb2RlIDMuMiI7Ci0JCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7Ci0JCQlo
YXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMDsKLQkJCWtub3duUmVnaW9ucyA9ICgKLQkJCQllbiwK
LQkJCSk7Ci0JCQltYWluR3JvdXAgPSAyRThEM0VFQjE5ODgxRDQzMDA0RjZDQzI7Ci0JCQlwcm9k
dWN0UmVmR3JvdXAgPSAyRThEM0VGNTE5ODgxRDQzMDA0RjZDQzIgLyogUHJvZHVjdHMgKi87Ci0J
CQlwcm9qZWN0RGlyUGF0aCA9ICIiOwotCQkJcHJvamVjdFJvb3QgPSAiIjsKLQkJCXRhcmdldHMg
PSAoCi0JCQkJMkU4RDNFRjMxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLywK
LQkJCSk7Ci0JCX07Ci0vKiBFbmQgUEJYUHJvamVjdCBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBC
WFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjAxOTg4MUQ0MzAwNEY2Q0My
IC8qIFNvdXJjZXMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKLQkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCQkyRThEM0YwNjE5
ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIubSBpbiBTb3VyY2VzICovLAotCQkJ
CTJFOEQzRUY4MTk4ODFENDMwMDRGNkNDMiAvKiBtYWluLm0gaW4gU291cmNlcyAqLywKLQkJCQky
RThEM0YwMjE5ODgxRkQwMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkubSBpbiBTb3VyY2VzICovLAot
CQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9Owot
LyogRW5kIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gWENCdWls
ZENvbmZpZ3VyYXRpb24gc2VjdGlvbiAqLwotCQkyRThEM0VGOTE5ODgxRDQzMDA0RjZDQzIgLyog
RGVidWcgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25m
aWd1cmF0aW9uUmVmZXJlbmNlID0gMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVs
ZWFzZS54Y2NvbmZpZyAqLzsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQl9OwotCQkJbmFtZSA9
IERlYnVnOwotCQl9OwotCQkyRThEM0VGQTE5ODgxRDQzMDA0RjZDQzIgLyogUmVsZWFzZSAqLyA9
IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25S
ZWZlcmVuY2UgPSAyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29u
ZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsK
LQkJfTsKLQkJMkU4RDNFRkMxOTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICovID0gewotCQkJaXNh
ID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9
IDJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi87Ci0J
CQlidWlsZFNldHRpbmdzID0gewotCQkJCVBST0RVQ1RfTkFNRSA9ICIkKFRBUkdFVF9OQU1FKSI7
Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVnOwotCQl9OwotCQkyRThEM0VGRDE5ODgxRDQzMDA0RjZD
QzIgLyogUmVsZWFzZSAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJ
YmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyog
RGVidWdSZWxlYXNlLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlQUk9E
VUNUX05BTUUgPSAiJChUQVJHRVRfTkFNRSkiOwotCQkJfTsKLQkJCW5hbWUgPSBSZWxlYXNlOwot
CQl9OwotLyogRW5kIFhDQnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24gKi8KLQotLyogQmVnaW4g
WENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCi0JCTJFOEQzRUVGMTk4ODFENDMwMDRGNkND
MiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIkxheW91dFRlc3RS
ZWxheSIgKi8gPSB7Ci0JCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVpbGRDb25m
aWd1cmF0aW9ucyA9ICgKLQkJCQkyRThEM0VGOTE5ODgxRDQzMDA0RjZDQzIgLyogRGVidWcgKi8s
Ci0JCQkJMkU4RDNFRkExOTg4MUQ0MzAwNEY2Q0MyIC8qIFJlbGVhc2UgKi8sCi0JCQkpOwotCQkJ
ZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRp
b25OYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJMkU4RDNFRkIxOTg4MUQ0MzAwNEY2Q0MyIC8qIEJ1
aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJMYXlvdXRUZXN0UmVs
YXkiICovID0gewotCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKLQkJCWJ1aWxkQ29uZmln
dXJhdGlvbnMgPSAoCi0JCQkJMkU4RDNFRkMxOTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICovLAot
CQkJCTJFOEQzRUZEMTk4ODFENDMwMDRGNkNDMiAvKiBSZWxlYXNlICovLAotCQkJKTsKLQkJCWRl
ZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9u
TmFtZSA9IFJlbGVhc2U7Ci0JCX07Ci0vKiBFbmQgWENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9u
ICovCi0JfTsKLQlyb290T2JqZWN0ID0gMkU4RDNFRUMxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2pl
Y3Qgb2JqZWN0ICovOwotfQpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RS
ZWxheS54Y29kZXByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91
dFRlc3RSZWxheS54Y29kZXByb2oJKHJldmlzaW9uIDIxMTE0MikKKysrIFRvb2xzL0xheW91dFRl
c3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVwcm9qCShub25leGlzdGVudCkKClByb3BlcnR5
IGNoYW5nZXMgb246IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVw
cm9qCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmlnbm9yZQojIyAtMSwyICswLDAgIyMKLXByb2pl
Y3QueGN3b3Jrc3BhY2UKLXhjdXNlcmRhdGEKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9N
YWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvTWFrZWZpbGUJKHJl
dmlzaW9uIDIxMTE0MikKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9NYWtlZmlsZQkobm9uZXhp
c3RlbnQpCkBAIC0xLDYgKzAsMCBAQAotU0NSSVBUU19QQVRIID0gLi4vU2NyaXB0cwotCi1PVkVS
UklERV9BUkNIUyA9IGRlZmF1bHQKLU9WRVJSSURFX1NES1JPT1QgPSBkZWZhdWx0Ci0KLWluY2x1
ZGUgLi4vLi4vTWFrZWZpbGUuc2hhcmVkCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29u
ZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0
UmVsYXkvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwkocmV2aXNpb24gMjExMTQyKQorKysg
VG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcJKG5vbmV4
aXN0ZW50KQpAQCAtMSw2OCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0v
LyBhcmUgbWV0OgotLy8gMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0vLyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotLy8gRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS8v
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotLy8gUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLS8vIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotLy8gRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotLy8gUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0vLyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0vLyBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotI2luY2x1ZGUgIi4uLy4uLy4uLy4uL0ludGVybmFsL0NvbmZpZ3VyYXRpb25zL0hhdmVJ
bnRlcm5hbFNESy54Y2NvbmZpZyIKLQotVVNFX0lOVEVSTkFMX1NESyA9ICQoVVNFX0lOVEVSTkFM
X1NES18kKENPTkZJR1VSQVRJT04pKTsKLVVTRV9JTlRFUk5BTF9TREtfUHJvZHVjdGlvbiA9IFlF
UzsKLVVTRV9JTlRFUk5BTF9TREtfRGVidWcgPSAkKEhBVkVfSU5URVJOQUxfU0RLKTsKLVVTRV9J
TlRFUk5BTF9TREtfUmVsZWFzZSA9ICQoSEFWRV9JTlRFUk5BTF9TREspOwotCi1DTEFOR19DWFhf
TEFOR1VBR0VfU1RBTkRBUkQgPSBnbnUrKzB4OwotQ0xBTkdfRU5BQkxFX09CSkNfQVJDID0gWUVT
OwotQ0xBTkdfV0FSTl9DWFgwWF9FWFRFTlNJT05TID0gTk87Ci1IRUFERVJfU0VBUkNIX1BBVEhT
ID0gJChCVUlMVF9QUk9EVUNUU19ESVIpL3Vzci9sb2NhbC9pbmNsdWRlICQoV0VCQ09SRV9QUklW
QVRFX0hFQURFUlNfRElSKS9Gb3J3YXJkaW5nSGVhZGVycyAkKFNSQ1JPT1QpLy4uLy4uL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pY3UgJChORVhUX1JPT1QpL3Vzci9sb2NhbC9pbmNsdWRlL1dlYkNv
cmVUZXN0U3VwcG9ydDsKLUdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAkKERFQlVHX0RF
RklORVMpIEVOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVDsKLURFQlVHX0lORk9STUFUSU9OX0ZPUk1B
VCA9IGR3YXJmLXdpdGgtZHN5bTsKLVBSRUJJTkRJTkcgPSBOTwotR0NDX0NfTEFOR1VBR0VfU1RB
TkRBUkQgPSBnbnU5OQotR0NDX0VOQUJMRV9DUFBfRVhDRVBUSU9OUyA9IE5POwotR0NDX0VOQUJM
RV9DUFBfUlRUSSA9IE5POwotR0NDX1BSRUNPTVBJTEVfUFJFRklYX0hFQURFUiA9IFlFUwotR0ND
X1RSRUFUX1dBUk5JTkdTX0FTX0VSUk9SUyA9IFlFUwotR0NDX1ZFUlNJT04gPSBjb20uYXBwbGUu
Y29tcGlsZXJzLmxsdm0uY2xhbmcuMV8wOwotR0NDX1dBUk5fQUJPVVRfREVQUkVDQVRFRF9GVU5D
VElPTlMgPSBOTwotR0NDX1dBUk5fVU5VU0VEX0ZVTkNUSU9OID0gWUVTCi1HQ0NfV0FSTl9VTlVT
RURfVkFSSUFCTEUgPSBZRVMKLUdDQ19XQVJOXzY0X1RPXzMyX0JJVF9DT05WRVJTSU9OW2FyY2g9
eDg2XzY0XSA9IE5POwotV0FSTklOR19DRkxBR1MgPSAtV2FsbCAtVyAtV25vLXVudXNlZC1wYXJh
bWV0ZXIgLVd1bmRlZgotCi1ERUJVR19ERUZJTkVTX2RlYnVnID0gOwotREVCVUdfREVGSU5FU19u
b3JtYWwgPSBOREVCVUc7Ci1ERUJVR19ERUZJTkVTID0gJChERUJVR19ERUZJTkVTXyQoQ1VSUkVO
VF9WQVJJQU5UKSk7Ci0KLVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SID0gJChUQVJHRVRf
TUFDX09TX1hfVkVSU0lPTl9NQUpPUiQoTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUOnN1ZmZpeDpp
ZGVudGlmaWVyKSk7Ci1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUl8xMCA9IDEwMTAwMDsK
LVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SXzExID0gMTAxMTAwOwotVEFSR0VUX01BQ19P
U19YX1ZFUlNJT05fTUFKT1JfMTIgPSAxMDEyMDA7Ci1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9N
QUpPUl8xMyA9IDEwMTMwMDsKLQotU0RLUk9PVCA9IG1hY29zeC5pbnRlcm5hbDsKLQotU1VQUE9S
VEVEX1BMQVRGT1JNUyA9IG1hY29zeDsKLQotVE9PTENIQUlOUyA9IGRlZmF1bHQ7Ci0KLU9USEVS
X0NGTEFHUyA9ICQoQVNBTl9PVEhFUl9DRkxBR1MpOwotT1RIRVJfQ1BMVVNQTFVTRkxBR1MgPSAk
KEFTQU5fT1RIRVJfQ1BMVVNQTFVTRkxBR1MpOwotT1RIRVJfTERGTEFHUyA9ICQoQVNBTl9PVEhF
Ul9MREZMQUdTKTsKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9E
ZWJ1Z1JlbGVhc2UueGNjb25maWcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5
L0NvbmZpZ3VyYXRpb25zL0RlYnVnUmVsZWFzZS54Y2NvbmZpZwkocmV2aXNpb24gMjExMTQyKQor
KysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0RlYnVnUmVsZWFzZS54Y2Nv
bmZpZwkobm9uZXhpc3RlbnQpCkBAIC0xLDQyICswLDAgQEAKLS8vIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLwotLy8gUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLS8vIGFyZSBtZXQ6Ci0vLyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLS8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLS8vICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0vLwotLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0vLyBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotLy8gSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0vLyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotLy8gQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0vLyBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0vLyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLS8vIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLS8vIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0v
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSAiQmFzZS54Y2NvbmZpZyIKLQotQVJDSFMgPSAkKEFS
Q0hTX1NUQU5EQVJEXzY0X0JJVCk7Ci0KLVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SID0g
JChNQUNfT1NfWF9WRVJTSU9OX01BSk9SKTsKLQotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUID0g
JChNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfJChUQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpP
UikpCi1NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfMTAxMDAwID0gMTAuMTA7Ci1NQUNPU1hfREVQ
TE9ZTUVOVF9UQVJHRVRfMTAxMTAwID0gMTAuMTE7Ci1NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRf
MTAxMjAwID0gMTAuMTI7Ci1NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfMTAxMzAwID0gMTAuMTM7
Ci0KLUZSQU1FV09SS19TRUFSQ0hfUEFUSFMgPSAkKERFVkVMT1BFUl9ESVIpL0xpYnJhcnkvUHJp
dmF0ZUZyYW1ld29ya3M7Ci1MRF9SVU5QQVRIX1NFQVJDSF9QQVRIUyA9ICQoREVWRUxPUEVSX0RJ
UikvTGlicmFyeS9Qcml2YXRlRnJhbWV3b3JrczsKLU9USEVSX0xERkxBR1MgPSAtZnJhbWV3b3Jr
IENvcmVTaW11bGF0b3IgLWZyYW1ld29yayBBcHBLaXQ7Ci0KLVNES1JPT1QgPSAkKFNES1JPT1Rf
bWFjb3N4XyQoVVNFX0lOVEVSTkFMX1NESykpOwotU0RLUk9PVF9tYWNvc3hfID0gbWFjb3N4Owot
U0RLUk9PVF9tYWNvc3hfWUVTID0gbWFjb3N4LmludGVybmFsOwpJbmRleDogVG9vbHMvTGF5b3V0
VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjExMTQyKQorKysgVG9vbHMvTGF5b3V0VGVzdFJl
bGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShub25leGlzdGVu
dCkKQEAgLTEsMjAyICswLDAgQEAKLS8vICEkKlVURjgqJCEKLXsKLQlhcmNoaXZlVmVyc2lvbiA9
IDE7Ci0JY2xhc3NlcyA9IHsKLQl9OwotCW9iamVjdFZlcnNpb24gPSA0NjsKLQlvYmplY3RzID0g
ewotCi0vKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwotCQkyRThEM0VGODE5ODgxRDQz
MDA0RjZDQzIgLyogbWFpbi5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkU4RDNFRjcxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSAqLzsgfTsKLQkJMkU4
RDNGMDIxOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lm0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRThEM0YwMTE5ODgxRkQwMDA0RjZDQzIgLyog
TFRQaXBlUmVsYXkubSAqLzsgfTsKLQkJMkU4RDNGMDYxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVs
YXlDb250cm9sbGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRThEM0YwNTE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIubSAqLzsg
fTsKLS8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhDb3B5Rmls
ZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjIxOTg4MUQ0MzAwNEY2Q0MyIC8qIENv
cHlGaWxlcyAqLyA9IHsKLQkJCWlzYSA9IFBCWENvcHlGaWxlc0J1aWxkUGhhc2U7Ci0JCQlidWls
ZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZHN0UGF0aCA9IC91c3Ivc2hhcmUvbWFuL21h
bjEvOwotCQkJZHN0U3ViZm9sZGVyU3BlYyA9IDA7Ci0JCQlmaWxlcyA9ICgKLQkJCSk7Ci0JCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMTsKLQkJfTsKLS8qIEVuZCBQQlhD
b3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYRmlsZVJlZmVyZW5j
ZSBzZWN0aW9uICovCi0JCTJFOEQzRUY0MTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVs
YXkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21w
aWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IExheW91
dFRlc3RSZWxheTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJMkU4RDNF
RjcxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gbWFpbi5tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyog
RGVidWdSZWxlYXNlLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgbmFtZSA9IERlYnVnUmVsZWFzZS54Y2NvbmZp
ZzsgcGF0aCA9IENvbmZpZ3VyYXRpb25zL0RlYnVnUmVsZWFzZS54Y2NvbmZpZzsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNFRkYxOTg4MUUyNTAwNEY2Q0MyIC8qIEJhc2UueGNj
b25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0LnhjY29uZmlnOyBuYW1lID0gQmFzZS54Y2NvbmZpZzsgcGF0aCA9IENvbmZpZ3VyYXRpb25z
L0Jhc2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOEQzRjAwMTk4
ODFGMjkwMDRGNkNDMiAvKiBMVFJlbGF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExUUmVsYXkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDExOTg4MUZEMDAwNEY2Q0MyIC8qIExU
UGlwZVJlbGF5Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IExUUGlwZVJl
bGF5Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOEQzRjAzMTk4ODFGRTIwMDRG
NkNDMiAvKiBMVFBpcGVSZWxheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMVFBpcGVSZWxheS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0YwNDE5ODgyNDA2MDA0RjZDQzIgLyogTFRS
ZWxheUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTFRSZWxh
eUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDUxOTg4
MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMub2JqYzsgcGF0aCA9IExUUmVsYXlDb250cm9sbGVyLm07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUNFMUZCQzE1MUIyOTBFNzkwMDAxMzZGNSAvKiBDb3JlU2ltdWxhdG9yU1BJLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcmVTaW11bGF0b3JTUEkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLS8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24g
Ki8KLQotLyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCQkyRThE
M0VGMTE5ODgxRDQzMDA0RjZDQzIgLyogRnJhbWV3b3JrcyAqLyA9IHsKLQkJCWlzYSA9IFBCWEZy
YW1ld29ya3NCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJ
CWZpbGVzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwotCQl9OwotLyogRW5kIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQot
LyogQmVnaW4gUEJYR3JvdXAgc2VjdGlvbiAqLwotCQkyRThEM0VFQjE5ODgxRDQzMDA0RjZDQzIg
PSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTJFOEQzRUZGMTk4
ODFFMjUwMDRGNkNDMiAvKiBCYXNlLnhjY29uZmlnICovLAotCQkJCTJFOEQzRUZFMTk4ODFFMTMw
MDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8sCi0JCQkJMkU4RDNFRjYxOTg4MUQ0
MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLywKLQkJCQkyRThEM0VGNTE5ODgxRDQzMDA0
RjZDQzIgLyogUHJvZHVjdHMgKi8sCi0JCQkpOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
LQkJfTsKLQkJMkU4RDNFRjUxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2R1Y3RzICovID0gewotCQkJ
aXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQkyRThEM0VGNDE5ODgxRDQzMDA0
RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovLAotCQkJKTsKLQkJCW5hbWUgPSBQcm9kdWN0czsK
LQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCTJFOEQzRUY2MTk4ODFENDMwMDRG
NkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNo
aWxkcmVuID0gKAotCQkJCTJFOEQzRUY3MTk4ODFENDMwMDRGNkNDMiAvKiBtYWluLm0gKi8sCi0J
CQkJQ0UxRkJDMTUxQjI5MEU3OTAwMDEzNkY1IC8qIENvcmVTaW11bGF0b3JTUEkuaCAqLywKLQkJ
CQkyRThEM0YwMDE5ODgxRjI5MDA0RjZDQzIgLyogTFRSZWxheS5oICovLAotCQkJCTJFOEQzRjAx
MTk4ODFGRDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5tICovLAotCQkJCTJFOEQzRjAzMTk4ODFG
RTIwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5oICovLAotCQkJCTJFOEQzRjA0MTk4ODI0MDYwMDRG
NkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5oICovLAotCQkJCTJFOEQzRjA1MTk4ODI0MDYwMDRG
NkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5tICovLAotCQkJKTsKLQkJCXBhdGggPSBMYXlvdXRU
ZXN0UmVsYXk7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotLyogRW5kIFBCWEdy
b3VwIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KLQkJ
MkU4RDNFRjMxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLyA9IHsKLQkJCWlz
YSA9IFBCWE5hdGl2ZVRhcmdldDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAyRThEM0VG
QjE5ODgxRDQzMDA0RjZDQzIgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRp
dmVUYXJnZXQgIkxheW91dFRlc3RSZWxheSIgKi87Ci0JCQlidWlsZFBoYXNlcyA9ICgKLQkJCQky
RThEM0VGMDE5ODgxRDQzMDA0RjZDQzIgLyogU291cmNlcyAqLywKLQkJCQkyRThEM0VGMTE5ODgx
RDQzMDA0RjZDQzIgLyogRnJhbWV3b3JrcyAqLywKLQkJCQkyRThEM0VGMjE5ODgxRDQzMDA0RjZD
QzIgLyogQ29weUZpbGVzICovLAotCQkJKTsKLQkJCWJ1aWxkUnVsZXMgPSAoCi0JCQkpOwotCQkJ
ZGVwZW5kZW5jaWVzID0gKAotCQkJKTsKLQkJCW5hbWUgPSBMYXlvdXRUZXN0UmVsYXk7Ci0JCQlw
cm9kdWN0TmFtZSA9IExheW91dFRlc3RSZWxheTsKLQkJCXByb2R1Y3RSZWZlcmVuY2UgPSAyRThE
M0VGNDE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovOwotCQkJcHJvZHVjdFR5
cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS50b29sIjsKLQkJfTsKLS8qIEVuZCBQQlhOYXRp
dmVUYXJnZXQgc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KLQkJ
MkU4RDNFRUMxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2plY3Qgb2JqZWN0ICovID0gewotCQkJaXNh
ID0gUEJYUHJvamVjdDsKLQkJCWF0dHJpYnV0ZXMgPSB7Ci0JCQkJTGFzdFVwZ3JhZGVDaGVjayA9
IDA2MDA7Ci0JCQkJT1JHQU5JWkFUSU9OTkFNRSA9ICJBcHBsZSwgSW5jLiI7Ci0JCQkJVGFyZ2V0
QXR0cmlidXRlcyA9IHsKLQkJCQkJMkU4RDNFRjMxOTg4MUQ0MzAwNEY2Q0MyID0gewotCQkJCQkJ
Q3JlYXRlZE9uVG9vbHNWZXJzaW9uID0gNi4wOwotCQkJCQl9OwotCQkJCX07Ci0JCQl9OwotCQkJ
YnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDJFOEQzRUVGMTk4ODFENDMwMDRGNkNDMiAvKiBCdWls
ZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIkxheW91dFRlc3RSZWxheSIgKi87
Ci0JCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAzLjIiOwotCQkJZGV2ZWxvcG1lbnRS
ZWdpb24gPSBFbmdsaXNoOwotCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDA7Ci0JCQlrbm93
blJlZ2lvbnMgPSAoCi0JCQkJZW4sCi0JCQkpOwotCQkJbWFpbkdyb3VwID0gMkU4RDNFRUIxOTg4
MUQ0MzAwNEY2Q0MyOwotCQkJcHJvZHVjdFJlZkdyb3VwID0gMkU4RDNFRjUxOTg4MUQ0MzAwNEY2
Q0MyIC8qIFByb2R1Y3RzICovOwotCQkJcHJvamVjdERpclBhdGggPSAiIjsKLQkJCXByb2plY3RS
b290ID0gIiI7Ci0JCQl0YXJnZXRzID0gKAotCQkJCTJFOEQzRUYzMTk4ODFENDMwMDRGNkNDMiAv
KiBMYXlvdXRUZXN0UmVsYXkgKi8sCi0JCQkpOwotCQl9OwotLyogRW5kIFBCWFByb2plY3Qgc2Vj
dGlvbiAqLwotCi0vKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0JCTJF
OEQzRUYwMTk4ODFENDMwMDRGNkNDMiAvKiBTb3VyY2VzICovID0gewotCQkJaXNhID0gUEJYU291
cmNlc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmls
ZXMgPSAoCi0JCQkJMkU4RDNGMDYxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVy
Lm0gaW4gU291cmNlcyAqLywKLQkJCQkyRThEM0VGODE5ODgxRDQzMDA0RjZDQzIgLyogbWFpbi5t
IGluIFNvdXJjZXMgKi8sCi0JCQkJMkU4RDNGMDIxOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJl
bGF5Lm0gaW4gU291cmNlcyAqLywKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKLQkJfTsKLS8qIEVuZCBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9u
ICovCi0KLS8qIEJlZ2luIFhDQnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24gKi8KLQkJMkU4RDNF
RjkxOTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZp
Z3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDJFOEQzRUZFMTk4ODFF
MTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi87Ci0JCQlidWlsZFNldHRpbmdz
ID0gewotCQkJfTsKLQkJCW5hbWUgPSBEZWJ1ZzsKLQkJfTsKLQkJMkU4RDNFRkExOTg4MUQ0MzAw
NEY2Q0MyIC8qIFJlbGVhc2UgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsK
LQkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0My
IC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLzsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQl9
OwotCQkJbmFtZSA9IFJlbGVhc2U7Ci0JCX07Ci0JCTJFOEQzRUZDMTk4ODFENDMwMDRGNkNDMiAv
KiBEZWJ1ZyAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJYmFzZUNv
bmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVidWdS
ZWxlYXNlLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlQUk9EVUNUX05B
TUUgPSAiJChUQVJHRVRfTkFNRSkiOwotCQkJfTsKLQkJCW5hbWUgPSBEZWJ1ZzsKLQkJfTsKLQkJ
MkU4RDNFRkQxOTg4MUQ0MzAwNEY2Q0MyIC8qIFJlbGVhc2UgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1
aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gMkU4RDNF
RkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLzsKLQkJCWJ1aWxk
U2V0dGluZ3MgPSB7Ci0JCQkJUFJPRFVDVF9OQU1FID0gIiQoVEFSR0VUX05BTUUpIjsKLQkJCX07
Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLS8qIEVuZCBYQ0J1aWxkQ29uZmlndXJhdGlvbiBz
ZWN0aW9uICovCi0KLS8qIEJlZ2luIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLwotCQky
RThEM0VFRjE5ODgxRDQzMDA0RjZDQzIgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQ
QlhQcm9qZWN0ICJMYXlvdXRUZXN0UmVsYXkiICovID0gewotCQkJaXNhID0gWENDb25maWd1cmF0
aW9uTGlzdDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCi0JCQkJMkU4RDNFRjkxOTg4MUQ0
MzAwNEY2Q0MyIC8qIERlYnVnICovLAotCQkJCTJFOEQzRUZBMTk4ODFENDMwMDRGNkNDMiAvKiBS
ZWxlYXNlICovLAotCQkJKTsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsK
LQkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJlbGVhc2U7Ci0JCX07Ci0JCTJFOEQzRUZC
MTk4ODFENDMwMDRGNkNDMiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2
ZVRhcmdldCAiTGF5b3V0VGVzdFJlbGF5IiAqLyA9IHsKLQkJCWlzYSA9IFhDQ29uZmlndXJhdGlv
bkxpc3Q7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAotCQkJCTJFOEQzRUZDMTk4ODFENDMw
MDRGNkNDMiAvKiBEZWJ1ZyAqLywKLQkJCQkyRThEM0VGRDE5ODgxRDQzMDA0RjZDQzIgLyogUmVs
ZWFzZSAqLywKLQkJCSk7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7Ci0J
CQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNlOwotCQl9OwotLyogRW5kIFhDQ29u
ZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLwotCX07Ci0Jcm9vdE9iamVjdCA9IDJFOEQzRUVDMTk4
ODFENDMwMDRGNkNDMiAvKiBQcm9qZWN0IG9iamVjdCAqLzsKLX0KSW5kZXg6IFRvb2xzL0xheW91
dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvQ29yZVNpbXVsYXRvclNQSS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvQ29yZVNpbXVsYXRvclNQ
SS5oCShyZXZpc2lvbiAyMTExNDIpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVz
dFJlbGF5L0NvcmVTaW11bGF0b3JTUEkuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDU4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWYgX19oYXNfaW5jbHVkZSg8Q29yZVNpbXVsYXRvci9Db3Jl
U2ltdWxhdG9yLmg+KQotCi0vKiBGSVhNRTogUmVtb3ZlIHRoZSBiZWxvdyAjZGVmaW5lIG9uY2Ug
d2UgcmVxdWlyZSBYY29kZSA3LjMgd2l0aCBpT1MgOS4zIFNESyBvciBuZXdlci4gKi8KLSNkZWZp
bmUgX19jb3Jlc2ltX3VuYXZhaWxhYmxlX21zZyhtc2cpCi0jaW1wb3J0IDxDb3JlU2ltdWxhdG9y
L0NvcmVTaW11bGF0b3IuaD4KLQotLyogRklYTUU6IEFsd2F5cyB1c2UgU2ltU2VydmljZUNvbnRl
eHQgb25jZSB3ZSByZXF1aXJlIFhjb2RlIDcuMyB3aXRoIGlPUyA5LjMgU0RLIG9yIG5ld2VyLiAq
LwotI2RlZmluZSBVU0VfU0lNX1NFUlZJQ0VfQ09OVEVYVCBkZWZpbmVkKENPUkVTSU1fQVBJX01B
WF9BTExPV0VEKQotCi0jZWxzZQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4K
LQotI2RlZmluZSBVU0VfU0lNX1NFUlZJQ0VfQ09OVEVYVCAxCi0KLSNkZWZpbmUga1NpbURldmlj
ZUxhdW5jaEFwcGxpY2F0aW9uQXJndW1lbnRzIEAiYXJndW1lbnRzIgotI2RlZmluZSBrU2ltRGV2
aWNlTGF1bmNoQXBwbGljYXRpb25FbnZpcm9ubWVudCBAImVudmlyb25tZW50IgotCi1AaW50ZXJm
YWNlIFNpbURldmljZSA6IE5TT2JqZWN0Ci0tIChCT09MKWluc3RhbGxBcHBsaWNhdGlvbjooTlNV
UkwgKilpbnN0YWxsVVJMIHdpdGhPcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zIGVycm9y
OihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci0tIChwaWRfdClsYXVuY2hBcHBs
aWNhdGlvbldpdGhJRDooTlNTdHJpbmcgKilidW5kbGVJRCBvcHRpb25zOihOU0RpY3Rpb25hcnkg
KilvcHRpb25zIGVycm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci1AZW5k
Ci0KLUBpbnRlcmZhY2UgU2ltRGV2aWNlU2V0IDogTlNPYmplY3QKLUBwcm9wZXJ0eSAocmVhZG9u
bHksIGNvcHkpIE5TRGljdGlvbmFyeSAqZGV2aWNlc0J5VURJRDsKLUBlbmQKLQotQGludGVyZmFj
ZSBTaW1TZXJ2aWNlQ29udGV4dCA6IE5TT2JqZWN0Ci0rKFNpbVNlcnZpY2VDb250ZXh0ICopc2hh
cmVkU2VydmljZUNvbnRleHRGb3JEZXZlbG9wZXJEaXI6KE5TU3RyaW5nICopZGV2ZWxvcGVyRGly
IGVycm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci0tKFNpbURldmljZVNl
dCAqKWRlZmF1bHREZXZpY2VTZXRXaXRoRXJyb3I6KE5TRXJyb3IgKiBfX2F1dG9yZWxlYXNpbmcg
KillcnJvcjsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5
b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVz
dFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5oCShyZXZpc2lvbiAyMTExNDIpCisr
KyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5LmgJKG5v
bmV4aXN0ZW50KQpAQCAtMSwzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBMVFBpcGVS
ZWxheV9oCi0jZGVmaW5lIExUUGlwZVJlbGF5X2gKLQotI2ltcG9ydCAiTFRSZWxheS5oIgotCi1A
aW50ZXJmYWNlIExUUGlwZVJlbGF5IDogTlNPYmplY3QgPExUUmVsYXk+Ci1AcHJvcGVydHkgKHdl
YWspIGlkPExUUmVsYXlEZWxlZ2F0ZT4gcmVsYXlEZWxlZ2F0ZTsKLS0gKGlkKWluaXRXaXRoUHJl
Zml4OihOU1N0cmluZyAqKXByZWZpeDsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlv
dXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5tCShyZXZp
c2lvbiAyMTExNDIpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xU
UGlwZVJlbGF5Lm0JKG5vbmV4aXN0ZW50KQpAQCAtMSwxNTggKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbXBvcnQgIkxUUGlwZVJlbGF5LmgiCi0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlv
bi5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLUBp
bnRlcmZhY2UgTFRQaXBlUmVsYXkgKCkKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNT
dHJpbmcgKmZpZm9QcmVmaXg7Ci1AcHJvcGVydHkgKHN0cm9uZykgTlNPdXRwdXRTdHJlYW0gKnN0
YW5kYXJkSW5wdXRQaXBlOwotQHByb3BlcnR5IChzdHJvbmcpIE5TSW5wdXRTdHJlYW0gKnN0YW5k
YXJkT3V0cHV0UGlwZTsKLUBwcm9wZXJ0eSAoc3Ryb25nKSBOU0lucHV0U3RyZWFtICpzdGFuZGFy
ZEVycm9yUGlwZTsKLQotLSAodm9pZCljcmVhdGVGSUZPczsKLS0gKHZvaWQpZGVzdHJveUZJRk9z
OwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gTFRQaXBlUmVsYXkKLQotLSAoTlNTdHJpbmcgKilp
blBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0
cmluZzpAIl9JTiJdOwotfQotCi0tIChOU1N0cmluZyAqKW91dFBpcGVQYXRoCi17Ci0gICAgcmV0
dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9PVVQiXTsKLX0KLQot
LSAoTlNTdHJpbmcgKillcnJvclBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBz
dHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9FUlJPUiJdOwotfQotCi0tIChOU091dHB1dFN0cmVh
bSAqKSBvdXRwdXRTdHJlYW0KLXsKLSAgICByZXR1cm4gX3N0YW5kYXJkSW5wdXRQaXBlOwotfQot
Ci0tIChpZClpbml0V2l0aFByZWZpeDooTlNTdHJpbmcgKilwcmVmaXgKLXsKLSAgICBpZiAoKHNl
bGYgPSBbc3VwZXIgaW5pdF0pKSB7Ci0gICAgICAgIF9maWZvUHJlZml4ID0gcHJlZml4OwotICAg
ICAgICBbc2VsZiBkZXN0cm95RklGT3NdOwotICAgIH0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQot
LSAodm9pZClzZXR1cAotewotICAgIFtzZWxmIGRlc3Ryb3lGSUZPc107Ci0gICAgW3NlbGYgY3Jl
YXRlRklGT3NdOwotfQotCi0tICh2b2lkKXRlYXJEb3duCi17Ci0gICAgW3NlbGYgZGVzdHJveUZJ
Rk9zXTsKLX0KLQotLSh2b2lkKSBjb25uZWN0Ci17Ci0gICAgX3N0YW5kYXJkSW5wdXRQaXBlID0g
W05TT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbVRvRmlsZUF0UGF0aDpbc2VsZiBpblBpcGVQYXRo
XSBhcHBlbmQ6WUVTXTsKLSAgICBfc3RhbmRhcmRPdXRwdXRQaXBlID0gW05TSW5wdXRTdHJlYW0g
aW5wdXRTdHJlYW1XaXRoRmlsZUF0UGF0aDpbc2VsZiBvdXRQaXBlUGF0aF1dOwotICAgIF9zdGFu
ZGFyZEVycm9yUGlwZSA9IFtOU0lucHV0U3RyZWFtIGlucHV0U3RyZWFtV2l0aEZpbGVBdFBhdGg6
W3NlbGYgZXJyb3JQaXBlUGF0aF1dOwotCi0gICAgW1tzZWxmIHN0YW5kYXJkSW5wdXRQaXBlXSBz
ZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRQaXBlXSBzZXREZWxl
Z2F0ZTpzZWxmXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRFcnJvclBpcGVdIHNldERlbGVnYXRlOnNl
bGZdOwotCi0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gc2NoZWR1bGVJblJ1bkxvb3A6
W05TUnVuTG9vcCBtYWluUnVuTG9vcF0gZm9yTW9kZTpOU0RlZmF1bHRSdW5Mb29wTW9kZV07Ci0g
ICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JQaXBlXSBzY2hlZHVsZUluUnVuTG9vcDpbTlNSdW5Mb29w
IG1haW5SdW5Mb29wXSBmb3JNb2RlOk5TRGVmYXVsdFJ1bkxvb3BNb2RlXTsKLQotICAgIFtbc2Vs
ZiBzdGFuZGFyZElucHV0UGlwZV0gb3Blbl07Ci0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlw
ZV0gb3Blbl07Ci0gICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JQaXBlXSBvcGVuXTsKLQotICAgIFtb
c2VsZiByZWxheURlbGVnYXRlXSBkaWRDb25uZWN0XTsKLX0KLQotLSAodm9pZClkaXNjb25uZWN0
Ci17Ci0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gY2xvc2VdOwotICAgIFtbc2VsZiBz
dGFuZGFyZEVycm9yUGlwZV0gY2xvc2VdOwotICAgIFtbc2VsZiBzdGFuZGFyZElucHV0UGlwZV0g
Y2xvc2VdOwotICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWREaXNjb25uZWN0XTsKLX0KLQot
LSAodm9pZCljcmVhdGVGSUZPcwotewotICAgIG1rZmlmbyhbW3NlbGYgaW5QaXBlUGF0aF0gVVRG
OFN0cmluZ10sIDA2NjYpOwotICAgIG1rZmlmbyhbW3NlbGYgb3V0UGlwZVBhdGhdIFVURjhTdHJp
bmddLCAwNjY2KTsKLSAgICBta2ZpZm8oW1tzZWxmIGVycm9yUGlwZVBhdGhdIFVURjhTdHJpbmdd
LCAwNjY2KTsKLX0KLQotLSAodm9pZClkZXN0cm95RklGT3MKLXsKLSAgICB1bmxpbmsoW1tzZWxm
IGluUGlwZVBhdGhdIFVURjhTdHJpbmddKTsKLSAgICB1bmxpbmsoW1tzZWxmIG91dFBpcGVQYXRo
XSBVVEY4U3RyaW5nXSk7Ci0gICAgdW5saW5rKFtbc2VsZiBlcnJvclBpcGVQYXRoXSBVVEY4U3Ry
aW5nXSk7Ci19Ci0KLS0gKHZvaWQpIHJlbGF5U3RyZWFtOihOU0lucHV0U3RyZWFtICopc3RyZWFt
Ci17Ci0gICAgdWludDhfdCBieXRlc1sxMDI0XTsKLSAgICBOU0ludGVnZXIgYnl0ZXNSZWFkID0g
W3N0cmVhbSByZWFkOmJ5dGVzIG1heExlbmd0aDoxMDI0XTsKLSAgICBOU0RhdGEgKmRhdGEgPSBb
TlNEYXRhIGRhdGFXaXRoQnl0ZXM6Ynl0ZXMgbGVuZ3RoOmJ5dGVzUmVhZF07Ci0KLSAgICBpZiAo
c3RyZWFtID09IFtzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0pCi0gICAgICAgIFtbc2VsZiByZWxh
eURlbGVnYXRlXSBkaWRSZWNlaXZlU3Rkb3V0RGF0YTpkYXRhXTsKLSAgICBlbHNlCi0gICAgICAg
IFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRSZWNlaXZlU3RkZXJyRGF0YTpkYXRhXTsKLX0KLQot
LSAodm9pZClzdHJlYW06KE5TU3RyZWFtICopYVN0cmVhbSBoYW5kbGVFdmVudDooTlNTdHJlYW1F
dmVudClldmVudENvZGUKLXsKLSAgICBzd2l0Y2ggKGV2ZW50Q29kZSkgewotICAgIGNhc2UgTlNT
dHJlYW1FdmVudE5vbmU6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlNTdHJlYW1FdmVudEhh
c0J5dGVzQXZhaWxhYmxlOgotICAgICAgICBbc2VsZiByZWxheVN0cmVhbTooTlNJbnB1dFN0cmVh
bSAqKWFTdHJlYW1dOwotICAgIGNhc2UgTlNTdHJlYW1FdmVudEhhc1NwYWNlQXZhaWxhYmxlOgot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnRPcGVuQ29tcGxldGVkOgotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnRFbmRFbmNvdW50ZXJlZDoKLSAgICAg
ICAgW1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZENyYXNoV2l0aE1lc3NhZ2U6bmlsXTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBOU1N0cmVhbUV2ZW50RXJyb3JPY2N1cnJlZDoKLSAgICAgICAg
W1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZENyYXNoV2l0aE1lc3NhZ2U6W1thU3RyZWFtIHN0cmVh
bUVycm9yXSBkZXNjcmlwdGlvbl1dOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLUBlbmQK
SW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxh
eS5oCShyZXZpc2lvbiAyMTExNDIpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVz
dFJlbGF5L0xUUmVsYXkuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIExUUmVsYXlfaAotI2RlZmluZSBMVFJlbGF5X2gKLQotI2ltcG9ydCA8Rm91
bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLUBwcm90b2NvbCBMVFJlbGF5RGVsZWdhdGUgPE5TT2Jq
ZWN0PgotLSAodm9pZClkaWRDb25uZWN0OwotLSAodm9pZClkaWREaXNjb25uZWN0OwotLSAodm9p
ZClkaWRDcmFzaFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2U7Ci0tICh2b2lkKWRpZFJl
Y2VpdmVTdGRvdXREYXRhOihOU0RhdGEgKilkYXRhOwotLSAodm9pZClkaWRSZWNlaXZlU3RkZXJy
RGF0YTooTlNEYXRhICopZGF0YTsKLUBlbmQKLQotQHByb3RvY29sIExUUmVsYXkgPE5TT2JqZWN0
LCBOU1N0cmVhbURlbGVnYXRlPgotLSAodm9pZClzZXR1cDsKLS0gKHZvaWQpdGVhckRvd247Ci0t
ICh2b2lkKWNvbm5lY3Q7Ci0tICh2b2lkKWRpc2Nvbm5lY3Q7Ci1AcHJvcGVydHkgKHdlYWspIGlk
PExUUmVsYXlEZWxlZ2F0ZT4gcmVsYXlEZWxlZ2F0ZTsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0
cm9uZykgTlNPdXRwdXRTdHJlYW0gKm91dHB1dFN0cmVhbTsKLUBlbmQKLQotI2VuZGlmCkluZGV4
OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9M
VFJlbGF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAyMTExNDIpCisrKyBUb29scy9MYXlvdXRUZXN0
UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLmgJKG5vbmV4aXN0ZW50KQpA
QCAtMSw0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgTFRSZWxheUNvbnRyb2xsZXJfaAot
I2RlZmluZSBMVFJlbGF5Q29udHJvbGxlcl9oCi0KLSNpbXBvcnQgIkxUUmVsYXkuaCIKLQotI2lt
cG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLUBjbGFzcyBTaW1EZXZpY2U7Ci0KLUBp
bnRlcmZhY2UgTFRSZWxheUNvbnRyb2xsZXIgOiBOU09iamVjdCA8TFRSZWxheURlbGVnYXRlPgot
LSAoaWQpaW5pdFdpdGhEZXZpY2U6KFNpbURldmljZSAqKWRldmljZSBwcm9kdWN0RGlyOihOU1N0
cmluZyAqKXByb2R1Y3REaXIgYXBwUGF0aDooTlNTdHJpbmcgKilhcHBQYXRoIGRldmljZVVESUQ6
KE5TVVVJRCAqKXVkaWQgZHVtcFRvb2xBcmd1bWVudHM6KE5TQXJyYXkgKilhcmd1bWVudHM7Ci0t
ICh2b2lkKXN0YXJ0OwotLSAodm9pZClmaW5pc2g7Ci1AZW5kCi0KLSNlbmRpZgpJbmRleDogVG9v
bHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxh
eUNvbnRyb2xsZXIubQkocmV2aXNpb24gMjExMTQyKQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5
L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5tCShub25leGlzdGVudCkKQEAgLTEs
MjcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJMVFJlbGF5Q29udHJvbGxlci5oIgot
Ci0jaW1wb3J0ICJDb3JlU2ltdWxhdG9yU1BJLmgiCi0jaW1wb3J0ICJMVFBpcGVSZWxheS5oIgot
I2ltcG9ydCA8QXBwS2l0L0FwcEtpdC5oPgotI2ltcG9ydCA8Y3J0X2V4dGVybnMuaD4KLQotQGlu
dGVyZmFjZSBMVFJlbGF5Q29udHJvbGxlciAoKQotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25n
KSBkaXNwYXRjaF9zb3VyY2VfdCBzdGFuZGFyZElucHV0RGlzcGF0Y2hTb3VyY2U7Ci1AcHJvcGVy
dHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TRmlsZUhhbmRsZSAqc3RhbmRhcmRPdXRwdXQ7Ci1AcHJv
cGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TRmlsZUhhbmRsZSAqc3RhbmRhcmRFcnJvcjsKLUBw
cm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKmlwY0lkZW50aWZpZXI7Ci1AcHJv
cGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TU3RyaW5nICphcHBCdW5kbGVJZGVudGlmaWVyOwot
QHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU1N0cmluZyAqYXBwUGF0aDsKLUBwcm9wZXJ0
eSAocmVhZG9ubHksIHN0cm9uZykgTlNVVUlEICpkZXZpY2VVRElEOwotQHByb3BlcnR5IChyZWFk
b25seSwgc3Ryb25nKSBOU0FycmF5ICpkdW1wVG9vbEFyZ3VtZW50czsKLUBwcm9wZXJ0eSAocmVh
ZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKnByb2R1Y3REaXI7Ci1AcHJvcGVydHkgKHN0cm9uZykg
U2ltRGV2aWNlICpkZXZpY2U7Ci1AcHJvcGVydHkgKHN0cm9uZykgaWQ8TFRSZWxheT4gcmVsYXk7
Ci1AcHJvcGVydHkgcGlkX3QgcGlkOwotQHByb3BlcnR5IChzdHJvbmcpIGRpc3BhdGNoX3NvdXJj
ZV90IGFwcERpc3BhdGNoU291cmNlOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gTFRSZWxheUNv
bnRyb2xsZXIKLQotLSAoaWQpaW5pdFdpdGhEZXZpY2U6KFNpbURldmljZSAqKWRldmljZSBwcm9k
dWN0RGlyOihOU1N0cmluZyAqKXByb2R1Y3REaXIgYXBwUGF0aDooTlNTdHJpbmcgKilhcHBQYXRo
IGRldmljZVVESUQ6KE5TVVVJRCAqKXVkaWQgZHVtcFRvb2xBcmd1bWVudHM6KE5TQXJyYXkgKilh
cmd1bWVudHMKLXsKLSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKSB7Ci0gICAgICAgIF9k
ZXZpY2UgPSBkZXZpY2U7Ci0gICAgICAgIF9wcm9kdWN0RGlyID0gcHJvZHVjdERpcjsKLSAgICAg
ICAgX2FwcFBhdGggPSBhcHBQYXRoOwotICAgICAgICBfYXBwQnVuZGxlSWRlbnRpZmllciA9IFtb
TlNCdW5kbGUgYnVuZGxlV2l0aFBhdGg6YXBwUGF0aF0gYnVuZGxlSWRlbnRpZmllcl07Ci0gICAg
ICAgIF9kZXZpY2VVRElEID0gdWRpZDsKLSAgICAgICAgX2R1bXBUb29sQXJndW1lbnRzID0gYXJn
dW1lbnRzOwotICAgICAgICBfc3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNlID0gZGlzcGF0Y2hf
c291cmNlX2NyZWF0ZShESVNQQVRDSF9TT1VSQ0VfVFlQRV9SRUFELCBTVERJTl9GSUxFTk8sIDAs
IGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCkpOwotICAgICAgICBfc3RhbmRhcmRPdXRwdXQgPSBb
TlNGaWxlSGFuZGxlIGZpbGVIYW5kbGVXaXRoU3RhbmRhcmRPdXRwdXRdOwotICAgICAgICBfc3Rh
bmRhcmRFcnJvciA9IFtOU0ZpbGVIYW5kbGUgZmlsZUhhbmRsZVdpdGhTdGFuZGFyZEVycm9yXTsK
LQotICAgICAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2V2ZW50X2hhbmRsZXIoX3N0YW5kYXJkSW5w
dXREaXNwYXRjaFNvdXJjZSwgXnsKLSAgICAgICAgICAgIHVpbnQ4X3QgYnVmZmVyWzEwMjRdOwot
ICAgICAgICAgICAgc3NpemVfdCBsZW4gPSByZWFkKFNURElOX0ZJTEVOTywgYnVmZmVyLCBzaXpl
b2YoYnVmZmVyKSk7Ci0gICAgICAgICAgICBpZiAobGVuID4gMCkgewotICAgICAgICAgICAgICAg
IEB0cnkgewotICAgICAgICAgICAgICAgICAgICBbW1tzZWxmIHJlbGF5XSBvdXRwdXRTdHJlYW1d
IHdyaXRlOmJ1ZmZlciBtYXhMZW5ndGg6bGVuXTsKLSAgICAgICAgICAgICAgICB9IEBjYXRjaCAo
TlNFeGNlcHRpb24gKmUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQnJva2VuIHBpcGUgLSB0
aGUgZHVtcCB0b29sIGNyYXNoZWQuIFRpbWUgdG8gZGllLgotICAgICAgICAgICAgICAgICAgICBb
c2VsZiBkaWRDcmFzaFdpdGhNZXNzYWdlOm5pbF07Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBFT0YgUmVjZWl2ZWQgb24gdGhlIHJl
bGF5J3Mgc3RhbmRhcmQgaW5wdXQuCi0gICAgICAgICAgICAgICAgW3NlbGYgZmluaXNoXTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgX3JlbGF5ID0gW1tMVFBpcGVSZWxh
eSBhbGxvY10gaW5pdFdpdGhQcmVmaXg6W0AiL3RtcCIgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29t
cG9uZW50OnNlbGYuaXBjSWRlbnRpZmllcl1dOwotICAgICAgICBbX3JlbGF5IHNldFJlbGF5RGVs
ZWdhdGU6c2VsZl07Ci0gICAgfQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChOU1N0cmluZyAq
KWlwY0lkZW50aWZpZXIKLXsKLSAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6
QCIlQC0lQCIsIHNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciwgc2VsZi5kZXZpY2VVRElELlVVSURT
dHJpbmddOwotfQotCi0tIChOU1N0cmluZyAqKXByb2Nlc3NOYW1lCi17Ci0gICAgcmV0dXJuIFtz
ZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIgY29tcG9uZW50c1NlcGFyYXRlZEJ5U3RyaW5nOkAiLiJd
Lmxhc3RPYmplY3Q7Ci19Ci0KLS0gKHZvaWQpZGlkUmVjZWl2ZVN0ZG91dERhdGE6KE5TRGF0YSAq
KWRhdGEKLXsKLSAgICBAdHJ5IHsKLSAgICAgICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0XSB3cml0
ZURhdGE6ZGF0YV07Ci0gICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRpb24pIHsKLSAg
ICAgICAgLy8gTlNGaWxlSGFuZGxlT3BlcmF0aW9uRXhjZXB0aW9uCi0gICAgICAgIC8vIEJyb2tl
biBwaXBlIC0gdGhlIHRlc3QgaGFybmVzcyBzdG9wcGVkIGxpc3RlbmluZyB0byB1cywKLSAgICAg
ICAgLy8gcHJvYmFibHkgYmVjYXVzZSB3ZSB0aW1lZCBvdXQgb3IgYSBydW4gd2FzIGNhbmNlbGVk
LgotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotfQotCi0tICh2b2lkKWRpZFJl
Y2VpdmVTdGRlcnJEYXRhOihOU0RhdGEgKilkYXRhCi17Ci0gICAgQHRyeSB7Ci0gICAgICAgIFtb
c2VsZiBzdGFuZGFyZEVycm9yXSB3cml0ZURhdGE6ZGF0YV07Ci0gICAgfSBAY2F0Y2ggKE5TRXhj
ZXB0aW9uICpleGNlcHRpb24pIHsKLSAgICAgICAgLy8gTlNGaWxlSGFuZGxlT3BlcmF0aW9uRXhj
ZXB0aW9uCi0gICAgICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhlIHRlc3QgaGFybmVzcyBzdG9wcGVk
IGxpc3RlbmluZyB0byB1cywKLSAgICAgICAgLy8gcHJvYmFibHkgYmVjYXVzZSB3ZSB0aW1lZCBv
dXQgb3IgYSBydW4gd2FzIGNhbmNlbGVkLgotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0g
ICAgfQotfQotCi0tICh2b2lkKWRpZERpc2Nvbm5lY3QKLXsKLSAgICBkaXNwYXRjaF9zdXNwZW5k
KFtzZWxmIHN0YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJjZV0pOwotfQotCi0tICh2b2lkKWRpZENv
bm5lY3QKLXsKLSAgICBkaXNwYXRjaF9yZXN1bWUoW3NlbGYgc3RhbmRhcmRJbnB1dERpc3BhdGNo
U291cmNlXSk7Ci19Ci0KLS0gKHZvaWQpZGlkQ3Jhc2hXaXRoTWVzc2FnZTooTlNTdHJpbmcgKilt
ZXNzYWdlCi17Ci0gICAgW1tzZWxmIHJlbGF5XSBkaXNjb25uZWN0XTsKLSAgICBOU1N0cmluZyAq
Y3Jhc2hNZXNzYWdlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJcbiNDUkFTSEVEIC0g
JUAgKHBpZCAlZClcbiIsIFtzZWxmIHByb2Nlc3NOYW1lXSwgW3NlbGYgcGlkXV07Ci0KLSAgICBp
ZiAobWVzc2FnZSkKLSAgICAgICAgY3Jhc2hNZXNzYWdlID0gW2NyYXNoTWVzc2FnZSBzdHJpbmdC
eUFwcGVuZGluZ0Zvcm1hdDpAIiVAXG4iLCBtZXNzYWdlXTsKLQotICAgIFtbc2VsZiBzdGFuZGFy
ZEVycm9yXSB3cml0ZURhdGE6W2NyYXNoTWVzc2FnZSBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhT
dHJpbmdFbmNvZGluZ11dOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSBjbG9zZUZpbGVdOwot
ICAgIFtbc2VsZiBzdGFuZGFyZE91dHB1dF0gY2xvc2VGaWxlXTsKLSAgICBleGl0KEVYSVRfRkFJ
TFVSRSk7Ci19Ci0KLS0gKHZvaWQpaW5zdGFsbEFwcAotewotICAgIE5TRGljdGlvbmFyeSAqaW5z
dGFsbE9wdGlvbnMgPSBAewotICAgICAgICAoTlNTdHJpbmcgKilrQ0ZCdW5kbGVJZGVudGlmaWVy
S2V5OiBzZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIsCi0gICAgfTsKLQotICAgIE5TRXJyb3IgKmVy
cm9yID0gbmlsOwotICAgIEJPT0wgaW5zdGFsbGVkID0gW3NlbGYuZGV2aWNlIGluc3RhbGxBcHBs
aWNhdGlvbjpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnNlbGYuYXBwUGF0aF0gd2l0aE9wdGlvbnM6
aW5zdGFsbE9wdGlvbnMgZXJyb3I6JmVycm9yXTsKLSAgICBpZiAoIWluc3RhbGxlZCkgewotICAg
ICAgICBOU0xvZyhAIkNvdWxkbid0IGluc3RhbGwgJUA6ICVAIiwgc2VsZi5hcHBQYXRoLCBlcnJv
ci5kZXNjcmlwdGlvbik7Ci0gICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci19Ci0K
LS0gKHZvaWQpa2lsbEFwcAotewotICAgIGRpc3BhdGNoX3NvdXJjZV90IGRpc3BhdGNoID0gW3Nl
bGYgYXBwRGlzcGF0Y2hTb3VyY2VdOwotCi0gICAgaWYgKGRpc3BhdGNoKQotICAgICAgICBkaXNw
YXRjaF9zb3VyY2VfY2FuY2VsKGRpc3BhdGNoKTsKLQotICAgIGlmIChbc2VsZiBwaWRdID4gMSkg
ewotICAgICAgICBraWxsKHNlbGYucGlkLCBTSUdLSUxMKTsKLSAgICAgICAgW3NlbGYgc2V0UGlk
Oi0xXTsKLSAgICB9Ci0gICAgW3NlbGYgc2V0QXBwRGlzcGF0Y2hTb3VyY2U6bmlsXTsKLX0KLQot
LSAoTlNEaWN0aW9uYXJ5ICopX2Vudmlyb25tZW50VmFyaWFibGVzCi17Ci0gICAgc3RhdGljIE5T
RGljdGlvbmFyeSAqZW52aXJvbm1lbnRWYXJpYWJsZXM7Ci0gICAgc3RhdGljIGRpc3BhdGNoX29u
Y2VfdCBvbmNlOwotCi0gICAgZGlzcGF0Y2hfb25jZSgmb25jZSwgXnsKLSAgICAgICAgTlNTdHJp
bmcgKnByb2R1Y3REaXJlY3RvcnkgPSBbc2VsZiBwcm9kdWN0RGlyXTsKLQotICAgICAgICBOU011
dGFibGVEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gW0B7Ci0gICAgICAgICAgICBAIklQQ19JREVO
VElGSUVSIjogc2VsZi5pcGNJZGVudGlmaWVyLAotICAgICAgICAgICAgQCJEWUxEX0ZSQU1FV09S
S19QQVRIIjogcHJvZHVjdERpcmVjdG9yeSwKLSAgICAgICAgICAgIEAiX19YUENfRFlMRF9GUkFN
RVdPUktfUEFUSCI6IHByb2R1Y3REaXJlY3RvcnksCi0gICAgICAgICAgICBAIkRZTERfTElCUkFS
WV9QQVRIIjogcHJvZHVjdERpcmVjdG9yeSwKLSAgICAgICAgICAgIEAiX19YUENfRFlMRF9MSUJS
QVJZX1BBVEgiOiBwcm9kdWN0RGlyZWN0b3J5LAotICAgICAgICB9IG11dGFibGVDb3B5XTsKLQot
ICAgICAgICBmb3IgKE5TU3RyaW5nICprZXlOYW1lIGluIEBbQCJEWUxEX0lOU0VSVF9MSUJSQVJJ
RVMiLCBAIk1hbGxvY1N0YWNrTG9nZ2luZyIsIEAiTE9DQUxfUkVTT1VSQ0VfUk9PVCIsIEAiRFVN
UFJFTkRFUlRSRUVfVEVNUCJdKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiB2YWx1ZSA9IGdl
dGVudihba2V5TmFtZSBVVEY4U3RyaW5nXSk7Ci0gICAgICAgICAgICBpZiAodmFsdWUgJiYgc3Ry
bGVuKHZhbHVlKSkgewotICAgICAgICAgICAgICAgIE5TU3RyaW5nICpuc1ZhbHVlID0gW05TU3Ry
aW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnZhbHVlXTsKLSAgICAgICAgICAgICAgICBbZGljdGlv
bmFyeSBzZXRPYmplY3Q6bnNWYWx1ZSBmb3JLZXk6a2V5TmFtZV07Ci0gICAgICAgICAgICAgICAg
W2RpY3Rpb25hcnkgc2V0T2JqZWN0Om5zVmFsdWUgZm9yS2V5OltAIl9fWFBDXyIgc3RyaW5nQnlB
cHBlbmRpbmdTdHJpbmc6a2V5TmFtZV1dOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgZm9yIChjaGFyKiogZW52cCA9ICpfTlNHZXRFbnZpcm9uKCk7ICplbnZwOyBlbnZwKysp
IHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVudiA9ICplbnZwOwotICAgICAgICAgICAgaWYg
KCFzdHJuY21wKCJKU0NfIiwgZW52LCA0KSB8fCAhc3RybmNtcCgiX19YUENfSlNDXyIsIGVudiwg
MTApKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXF1YWwgPSBzdHJjaHIoZW52LCAn
PScpOwotICAgICAgICAgICAgICAgIGlmICghZXF1YWwpIHsKLSAgICAgICAgICAgICAgICAgICAg
TlNMb2coQCJNaXNzaW5nICc9JyBpbiBlbnYgdmFyICclcyciLCBlbnYpOwotICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IG1heEtleUxlbmd0aCA9IDI1NjsKLSAgICAgICAgICAgICAgICBz
aXplX3Qga2V5TGVuZ3RoID0gZXF1YWwgLSBlbnY7Ci0gICAgICAgICAgICAgICAgaWYgKGtleUxl
bmd0aCA+PSBtYXhLZXlMZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgTlNMb2coQCJFbnYg
dmFyICclcycgaXMgdG9vIGxvbmciLCBlbnYpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjaGFyIGtleVttYXhLZXlM
ZW5ndGhdOwotICAgICAgICAgICAgICAgIHN0cm5jcHkoa2V5LCBlbnYsIGtleUxlbmd0aCk7Ci0g
ICAgICAgICAgICAgICAga2V5W2tleUxlbmd0aF0gPSAnXDAnOwotICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIHZhbHVlID0gZXF1YWwgKyAxOwotCi0gICAgICAgICAgICAgICAgTlNTdHJpbmcg
Km5zS2V5ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmtleV07Ci0gICAgICAgICAg
ICAgICAgTlNTdHJpbmcgKm5zVmFsdWUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6
dmFsdWVdOwotICAgICAgICAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpuc1ZhbHVlIGZv
cktleTpuc0tleV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBlbnZpcm9u
bWVudFZhcmlhYmxlcyA9IFtkaWN0aW9uYXJ5IGNvcHldOwotICAgIH0pOwotCi0gICAgcmV0dXJu
IGVudmlyb25tZW50VmFyaWFibGVzOwotfQotCi0tICh2b2lkKWxhdW5jaEFwcAotewotICAgIE5T
RGljdGlvbmFyeSAqbGF1bmNoT3B0aW9ucyA9IEB7Ci0gICAgICAgIGtTaW1EZXZpY2VMYXVuY2hB
cHBsaWNhdGlvbkVudmlyb25tZW50OiBbc2VsZiBfZW52aXJvbm1lbnRWYXJpYWJsZXNdLAotICAg
ICAgICBrU2ltRGV2aWNlTGF1bmNoQXBwbGljYXRpb25Bcmd1bWVudHM6IFtzZWxmIGR1bXBUb29s
QXJndW1lbnRzXSwKLSAgICB9OwotCi0gICAgTlNFcnJvciAqZXJyb3I7Ci0gICAgcGlkX3QgcGlk
ID0gW3NlbGYuZGV2aWNlIGxhdW5jaEFwcGxpY2F0aW9uV2l0aElEOnNlbGYuYXBwQnVuZGxlSWRl
bnRpZmllciBvcHRpb25zOmxhdW5jaE9wdGlvbnMgZXJyb3I6JmVycm9yXTsKLQotICAgIGlmIChw
aWQgPCAwKSB7Ci0gICAgICAgIE5TTG9nKEAiQ291bGRuJ3QgbGF1bmNoICVAOiAlQCIsIHNlbGYu
YXBwQnVuZGxlSWRlbnRpZmllciwgZXJyb3IuZGVzY3JpcHRpb24pOwotICAgICAgICBleGl0KEVY
SVRfRkFJTFVSRSk7Ci0gICAgfQotCi0gICAgW3NlbGYgc2V0UGlkOnBpZF07Ci0KLSAgICBkaXNw
YXRjaF9xdWV1ZV90IHF1ZXVlID0gZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKTsKLSAgICBkaXNw
YXRjaF9zb3VyY2VfdCBzaW11bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3VyY2UgPSBkaXNwYXRjaF9z
b3VyY2VfY3JlYXRlKERJU1BBVENIX1NPVVJDRV9UWVBFX1BST0MsIFtzZWxmIHBpZF0sIERJU1BB
VENIX1BST0NfRVhJVCwgcXVldWUpOwotICAgIFtzZWxmIHNldEFwcERpc3BhdGNoU291cmNlOnNp
bXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZV07Ci0gICAgZGlzcGF0Y2hfc291cmNlX3NldF9l
dmVudF9oYW5kbGVyKHNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSwgXnsKLSAgICAgICAg
ZGlzcGF0Y2hfc291cmNlX2NhbmNlbChzaW11bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3VyY2UpOwot
ICAgICAgICBbc2VsZiBkaWRDcmFzaFdpdGhNZXNzYWdlOm5pbF07Ci0gICAgfSk7Ci0gICAgZGlz
cGF0Y2hfcmVzdW1lKHNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSk7Ci19Ci0KLS0gKHZv
aWQpc3RhcnQKLXsKLSAgICBbc2VsZiBpbnN0YWxsQXBwXTsKLSAgICBbW3NlbGYgcmVsYXldIHNl
dHVwXTsKLSAgICBbc2VsZiBsYXVuY2hBcHBdOwotICAgIFtbc2VsZiByZWxheV0gY29ubmVjdF07
Ci19Ci0KLS0gKHZvaWQpZmluaXNoCi17Ci0gICAgW1tzZWxmIHJlbGF5XSBkaXNjb25uZWN0XTsK
LSAgICBbc2VsZiBraWxsQXBwXTsKLSAgICBleGl0KEVYSVRfU1VDQ0VTUyk7Ci19Ci0KLUBlbmQK
SW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvbWFpbi5tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvbWFpbi5tCShy
ZXZpc2lvbiAyMTExNDIpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5
L21haW4ubQkobm9uZXhpc3RlbnQpCkBAIC0xLDEzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2ltcG9ydCAiQ29yZVNpbXVsYXRvclNQSS5oIgotI2ltcG9ydCAiTFRSZWxheUNvbnRyb2xs
ZXIuaCIKLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi1zdGF0aWMgTFRSZWxh
eUNvbnRyb2xsZXIgKnJlbGF5Q29udHJvbGxlcjsKLQotdm9pZCB1c2FnZSgpCi17Ci0gICAgTlNT
dHJpbmcgKmhlbHBUZXh0ID0gQCJMYXlvdXRUZXN0UmVsYXk6IHJ1biBhIGR1bXAgdG9vbCBpbiB0
aGUgc2ltdWxhdG9yLiBOb3QgZm9yIGRpcmVjdCBjb25zdW1wdGlvbi5cbiIKLSAgICAgICAgIlVz
YWdlOiBMYXlvdXRUZXN0UmVsYXkgWy1oXSBbb3B0aW9uc10gLS0gW2R1bXAgdG9vbCBhcmd1bWVu
dHNdXG4iCi0gICAgICAgICJSZXF1aXJlZCBvcHRpb25zOlxuIgotICAgICAgICAiICAgIC11ZGlk
IDxpZGVudGlmaWVyPiAgICAgICBTaW11bGF0b3IgZGV2aWNlIGlkZW50aWZpZXJcbiIKLSAgICAg
ICAgIiAgICAtYXBwIDxhcHBfcGF0aD4gICAgICAgICAgUGF0aCB0byB0aGUgYnVpbHQgaU9TIC5h
cHAgYnVuZGxlIGRpcmVjdG9yeS5cbiIKLSAgICAgICAgIiAgICAtcHJvZHVjdERpciA8ZGlyPiAg
ICAgICAgL3BhdGgvdG8vV2ViS2l0QnVpbGQve2NvbmZpZ3VyYXRpb259LXtzaG9ydCBwbGF0Zm9y
bX0uXG4iOwotCi0gICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgW2hlbHBUZXh0IFVURjhTdHJp
bmddKTsKLX0KLQotTlNTdHJpbmcgKmdldFJlcXVpcmVkU3RyaW5nQXJndW1lbnQoTlNTdHJpbmcg
KnBhcmFtZXRlcikKLXsKLSAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVm
YXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdOwotICAgIE5TU3RyaW5nICphcmd1bWVudCA9IFtk
ZWZhdWx0cyBzdHJpbmdGb3JLZXk6cGFyYW1ldGVyXTsKLQotICAgIGlmICghYXJndW1lbnQpIHsK
LSAgICAgICAgTlNMb2coQCItJUAgaXMgcmVxdWlyZWQuIiwgcGFyYW1ldGVyKTsKLSAgICAgICAg
dXNhZ2UoKTsKLSAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0KLSAgICByZXR1cm4g
YXJndW1lbnQ7Ci19Ci0KLU5TQXJyYXkgKmdldER1bXBUb29sQXJndW1lbnRzKCkKLXsKLSAgICBO
U011dGFibGVBcnJheSAqZHVtcFRvb2xBcmd1bWVudHMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9j
XSBpbml0XTsKLSAgICBOU0FycmF5ICpwcm9jZXNzQXJncyA9IFtbTlNQcm9jZXNzSW5mbyBwcm9j
ZXNzSW5mb10gYXJndW1lbnRzXTsKLSAgICBCT09MIGFwcGVuZGluZyA9IE5POwotICAgIGZvciAo
TlNTdHJpbmcgKmFyZyBpbiBwcm9jZXNzQXJncykgewotICAgICAgICBpZiAoW2FyZyBpc0VxdWFs
VG9TdHJpbmc6QCItLSJdKSB7Ci0gICAgICAgICAgICBhcHBlbmRpbmcgPSBZRVM7Ci0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoYXBwZW5kaW5nKQotICAgICAg
ICAgICAgW2R1bXBUb29sQXJndW1lbnRzIGFkZE9iamVjdDphcmddOwotICAgIH0KLSAgICByZXR1
cm4gZHVtcFRvb2xBcmd1bWVudHM7Ci19Ci0KLXZvaWQgZmluaXNoKCkKLXsKLSAgICBbcmVsYXlD
b250cm9sbGVyIGZpbmlzaF07Ci19Ci0KLXZvaWQgcmVjZWl2ZWRTaWduYWwoaW50IHNpZ25hbCkK
LXsKLSAgICBleGl0KEVYSVRfU1VDQ0VTUyk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjb25z
dCBjaGFyICogYXJndltdKQotewotICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBOU0Fy
cmF5ICpoZWxwQXJndW1lbnRzID0gQFtAIi1oIiwgQCItLWhlbHAiXTsKLSAgICAgICAgZm9yIChO
U1N0cmluZyAqaGVscEFyZ3VtZW50IGluIGhlbHBBcmd1bWVudHMpIHsKLSAgICAgICAgICAgIGlm
IChbW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBhcmd1bWVudHNdIGluZGV4T2ZPYmplY3Q6
aGVscEFyZ3VtZW50XSAhPSBOU05vdEZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgdXNhZ2UoKTsK
LSAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotI2lmIFVTRV9TSU1fU0VSVklDRV9DT05URVhUCi0gICAgICAgIE5TU3RyaW5nICpk
ZXZlbG9wZXJEaXJlY3RvcnkgPSBnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAiZGV2ZWxvcGVy
RGlyIik7Ci0jZW5kaWYKLSAgICAgICAgTlNVVUlEICp1ZGlkID0gW1tOU1VVSUQgYWxsb2NdIGlu
aXRXaXRoVVVJRFN0cmluZzpnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAidWRpZCIpXTsKLSAg
ICAgICAgTlNTdHJpbmcgKmFwcFBhdGggPSBnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAiYXBw
Iik7Ci0gICAgICAgIE5TU3RyaW5nICpwcm9kdWN0RGlyZWN0b3J5ID0gZ2V0UmVxdWlyZWRTdHJp
bmdBcmd1bWVudChAInByb2R1Y3REaXIiKTsKLSAgICAgICAgTlNBcnJheSAqZHVtcFRvb2xBcmd1
bWVudHMgPSBnZXREdW1wVG9vbEFyZ3VtZW50cygpOwotCi0jaWYgVVNFX1NJTV9TRVJWSUNFX0NP
TlRFWFQKLSAgICAgICAgTlNFcnJvciAqZXJyb3I7Ci0gICAgICAgIFNpbVNlcnZpY2VDb250ZXh0
ICpzZXJ2aWNlQ29udGV4dCA9IFtTaW1TZXJ2aWNlQ29udGV4dCBzaGFyZWRTZXJ2aWNlQ29udGV4
dEZvckRldmVsb3BlckRpcjpkZXZlbG9wZXJEaXJlY3RvcnkgZXJyb3I6JmVycm9yXTsKLSAgICAg
ICAgaWYgKCFzZXJ2aWNlQ29udGV4dCkgewotICAgICAgICAgICAgTlNMb2coQCJEZXZpY2UgY29u
dGV4dCBjb3VsZG4ndCBiZSBmb3VuZDogJUAiLCBlcnJvcik7Ci0gICAgICAgICAgICBleGl0KEVY
SVRfRkFJTFVSRSk7Ci0gICAgICAgIH0KLSAgICAgICAgU2ltRGV2aWNlU2V0ICpkZXZpY2VTZXQg
PSBbc2VydmljZUNvbnRleHQgZGVmYXVsdERldmljZVNldFdpdGhFcnJvcjpuaWxdOwotICAgICAg
ICBpZiAoIWRldmljZVNldCkgewotICAgICAgICAgICAgTlNMb2coQCJEZWZhdWx0IGRldmljZSBz
ZXQgY291bGRuJ3QgYmUgZm91bmQ6ICVAIiwgZXJyb3IpOwotICAgICAgICAgICAgZXhpdChFWElU
X0ZBSUxVUkUpOwotICAgICAgICB9Ci0gICAgICAgIFNpbURldmljZSAqZGV2aWNlID0gW2Rldmlj
ZVNldC5kZXZpY2VzQnlVRElEIG9iamVjdEZvcktleTp1ZGlkXTsKLSNlbHNlCi0gICAgICAgIFNp
bURldmljZSAqZGV2aWNlID0gW1NpbURldmljZVNldC5kZWZhdWx0U2V0LmRldmljZXNCeVVESUQg
b2JqZWN0Rm9yS2V5OnVkaWRdOwotI2VuZGlmCi0gICAgICAgIGlmICghZGV2aWNlKSB7Ci0gICAg
ICAgICAgICBOU0xvZyhAIkRldmljZSAlQCBjb3VsZG4ndCBiZSBmb3VuZCIsIHVkaWQpOwotICAg
ICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVsYXlD
b250cm9sbGVyID0gW1tMVFJlbGF5Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhEZXZpY2U6ZGV2
aWNlIHByb2R1Y3REaXI6cHJvZHVjdERpcmVjdG9yeSBhcHBQYXRoOmFwcFBhdGggZGV2aWNlVURJ
RDp1ZGlkIGR1bXBUb29sQXJndW1lbnRzOmR1bXBUb29sQXJndW1lbnRzXTsKLSAgICAgICAgW3Jl
bGF5Q29udHJvbGxlciBzdGFydF07Ci0KLSAgICAgICAgYXRleGl0KGZpbmlzaCk7Ci0gICAgICAg
IHNpZ25hbChTSUdJTlQsIHJlY2VpdmVkU2lnbmFsKTsKLSAgICAgICAgc2lnbmFsKFNJR1RFUk0s
IHJlY2VpdmVkU2lnbmFsKTsKLQotICAgICAgICBbW05TUnVuTG9vcCBtYWluUnVuTG9vcF0gcnVu
XTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19CkluZGV4OiBUb29scy9TY3JpcHRzL2J1aWxkLXdl
YmtpdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAkocmV2aXNpb24g
MjExMTQyKQorKysgVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQJKHdvcmtpbmcgY29weSkKQEAg
LTIwMCwxMCArMjAwLDYgQEAgaWYgKGlzQXBwbGVNYWNXZWJLaXQoKSkgewogICAgICAgICBwdXNo
IEBjb3B5TGlicmFyaWVzQXJncywgcHJvZHVjdERpcigpOwogICAgICAgICBwcmludChqb2luKCIg
IiwgQGNvcHlMaWJyYXJpZXNBcmdzKSAuICJcbiIpOwogICAgICAgICAoc3lzdGVtKEBjb3B5TGli
cmFyaWVzQXJncykgPT0gMCkgb3IgZGllOwotCi0gICAgICAgIGlmICh3aWxsVXNlSU9TU2ltdWxh
dG9yU0RLKCkpIHsKLSAgICAgICAgICAgIChzeXN0ZW0oInBlcmwiLCAiVG9vbHMvU2NyaXB0cy9i
dWlsZC1sYXlvdXR0ZXN0cmVsYXkiLCBhcmd1bWVudHNGb3JDb25maWd1cmF0aW9uKCkpID09IDAp
IG9yIGRpZTsKLSAgICAgICAgfQogICAgIH0KIAogICAgICMgQnVpbGQgVG9vbHMgbmVlZGVkIGZv
ciBBcHBsZSBwb3J0cwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>299984</attachid>
            <date>2017-01-27 17:22:34 -0800</date>
            <delta_ts>2017-01-29 16:04:18 -0800</delta_ts>
            <desc>Python replacement of LayoutTestRelay</desc>
            <filename>bug-165927-20170127172029.patch</filename>
            <type>text/plain</type>
            <size>28707</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMTMxNikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYxIEBACisyMDE3LTAxLTI3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBVc2Ugc2ltY3RsIGluc3RlYWQgb2YgTGF5b3V0VGVzdFJlbGF5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU5MjcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXJ0IDEKKworICAg
ICAgICBMYXlvdXRUZXN0UmVsYXkgdXNlcyBTUEksIHNpbmNlIHJlY2VudCB2ZXJzaW9ucyBvZiB0
aGUgaU9TIFNESyBhbGxvdyBmb3IgaW5zdGFsbGluZyBhcHBzIG9uICMgTm90ZSBpT1MgdmVyc2lv
bgorICAgICAgICBzaW11bGF0b3JzIHRocm91Z2ggc2ltY3RsLCB1c2UgdGhpcyBmdW5jdGlvbmFs
aXR5IGluc3RlYWQuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weToK
KyAgICAgICAgKFBvcnQuX19pbml0X18pOiBBZGRlZCBfdGVzdF9ydW5uZXJfcHJvY2Vzc19jb25z
dHJ1Y3Rvci4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGFyd2luLnB5OgorICAg
ICAgICAoRGFyd2luUG9ydC5hcHBfaWRlbnRpZmllcl9mcm9tX2J1bmRsZSk6IEFkZGVkIGZ1bmN0
aW9uIHRvIGV4dHJhY3QgYnVuZGxlIElEIGZyb20gcGxpc3QuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9wb3J0L2RyaXZlci5weToKKyAgICAgICAgKERyaXZlci5fc3RhcnQpOiBQYXNzIHdv
cmtlcl9udW1iZXIgdG8gc2VydmVyX3Byb2Nlc3Mgc28gd2UgY2FuIGxvb2sgdXAgdGhlIGNvcnJl
Y3Qgc2ltdWxhdG9yIGRldmljZSB0byB1c2UuCisgICAgICAgIChJT1NTaW11bGF0b3JEcml2ZXIp
OiBEZWxldGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRl
c3QucHk6CisgICAgICAgIChEcml2ZXJUZXN0LnRlc3Rfc3RvcF9jbGVhbnNfdXBfcHJvcGVybHkp
OiBTZXQgX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgZm9yIHRlc3RpbmcuCisgICAg
ICAgIChEcml2ZXJUZXN0LnRlc3RfdHdvX3N0YXJ0c19jbGVhbnNfdXBfcHJvcGVybHkpOiBEaXR0
by4KKyAgICAgICAgKERyaXZlclRlc3QudGVzdF9zdGFydF9hY3R1YWxseV9zdGFydHMpOiBEaXR0
by4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5OgorICAgICAgICAoSU9T
U2ltdWxhdG9yUG9ydCk6IFJlbW92ZSByZWxheV9uYW1lLgorICAgICAgICAoSU9TU2ltdWxhdG9y
UG9ydC5fX2luaXRfXyk6IFNldCBfdGVzdF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciB0byBT
aW11bGF0b3JQcm9jZXNzIGZvciBJT1NTaW11bGF0b3JQb3J0LgorICAgICAgICAoSU9TU2ltdWxh
dG9yUG9ydC5fY3JlYXRlX3NpbXVsYXRvcnMpOiBGb3JtYXR0aW5nIGNoYW5nZS4KKyAgICAgICAg
KElPU1NpbXVsYXRvclBvcnQucmVsYXlfcGF0aCk6IERlbGV0ZWQuCisgICAgICAgIChJT1NTaW11
bGF0b3JQb3J0Ll9jaGVja19yZWxheSk6IFVzZSBiYXNlIGNsYXNzLgorICAgICAgICAoSU9TU2lt
dWxhdG9yUG9ydC5fY2hlY2tfcG9ydF9idWlsZCk6IERlbGV0ZWQuCisgICAgICAgIChJT1NTaW11
bGF0b3JQb3J0Ll9idWlsZF9yZWxheSk6IERlbGV0ZWQuCisgICAgICAgIChJT1NTaW11bGF0b3JQ
b3J0Ll9idWlsZF9kcml2ZXIpOiBEZWxldGVkLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5f
ZHJpdmVyX2NsYXNzKTogVXNlIGJhc2UgY2xhc3MuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9wb3J0L2lvc191bml0dGVzdC5weToKKyAgICAgICAgKGlvc1Rlc3QudGVzdF8zMmJpdCk6IFVw
ZGF0ZSB0ZXN0LgorICAgICAgICAoaW9zVGVzdC50ZXN0XzY0Yml0KTogVXBkYXRlIHRlc3QuCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzLnB5OgorICAgICAg
ICAoU2VydmVyUHJvY2Vzcy5fX2luaXRfXyk6IEFjY2VwdCB3b3JrZXJfbnVtYmVyLCB0byBtYXRj
aCBTaW11bGF0b3JQcm9jZXNzc+KAmXMgY29uc3RydWN0b3IuCisgICAgICAgIChTZXJ2ZXJQcm9j
ZXNzLl9zZXRfZmlsZV9ub25ibG9ja2luZyk6IEFkZGVkIHRvIHNoYXJlIGNvbW1vbiBjb2RlLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzc19tb2NrLnB5Ogor
ICAgICAgICAoTW9ja1NlcnZlclByb2Nlc3MuX19pbml0X18pOiBBY2NlcHQgd29ya2VyX251bWJl
ciwgdG8gbWF0Y2ggU2ltdWxhdG9yUHJvY2Vzc3PigJlzIGNvbnN0cnVjdG9yLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvcG9ydC9zaW11bGF0b3JfcHJvY2Vzcy5weTogQWRkZWQuCisgICAg
ICAgIChTaW11bGF0b3JQcm9jZXNzKTogCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNzLlBvcGVu
KToKKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuUG9wZW4uX19pbml0X18pOiBTZXQtdXAgUG9w
ZW4gc3RydWN0dXJlIHdpdGggc3RkaW4sIHN0ZG91dCwgc3RkZXJyIGFuZCBwaWQuCisgICAgICAg
IChTaW11bGF0b3JQcm9jZXNzLlBvcGVuLnBvbGwpOiBDaGVjayBpZiB0aGUgcHJvY2VzcyBpcyBy
dW5uaW5nLgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5Qb3Blbi53YWl0KTogV2FpdCBmb3Ig
dGFyZ2V0IHByb2Nlc3MgdG8gY2xvc2UuCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNzLl9faW5p
dF9fKTogSW5zdGFsbCBhcHAgdG8gZGV2aWNlIHNwZWNpZmllZCB0aHJvdWdoIHBvcnQgYW5kIHdv
cmtlcl9udW1iZXIuCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNzLl9yZXNldCk6IFVubGluayBm
aWZvcy4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX3N0YXJ0KTogTGF1bmNoIGFwcCBvbiBz
aW11bGF0b3IsIGxpbmsgZmlmb3MuCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNzLl9raWxsKTog
U2h1dGRvd24gYXBwIG9uIHNpbXVsYXRvci4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3hj
b2RlL3NpbXVsYXRvci5weToKKyAgICAgICAgKERldmljZS5fX2luaXRfXyk6IEFjY2VwdCBob3N0
IHRvIHJ1biBpbnN0YWxsL2xhdW5jaC90ZXJtaW5hdGUuCisgICAgICAgIChEZXZpY2UuaW5zdGFs
bF9hcHApOiBJbnN0YWxsIGFwcCB0byB0YXJnZXQgZGV2aWNlLgorICAgICAgICAoRGV2aWNlLmxh
dW5jaF9hcHApOiBMYXVuY2ggYXBwIG9uIHRhcmdldCBkZXZpY2UuCisgICAgICAgIChEZXZpY2Uu
dGVybWluYXRlX2FwcCk6IFNodXRkb3duIGFwcCBvbiB0YXJnZXQgZGV2aWNlLgorICAgICAgICAo
U2ltdWxhdG9yLl9wYXJzZV9kZXZpY2VzKTogUGFzcyBob3N0IHRvIGRldmljZS4KKwogMjAxNy0w
MS0yNyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBy
dW4tYmVuY2htYXJrcyBzaG91bGQgbWFrZSBzdXJlIGl0IHBhc3NlcyB0aGUgdGVzdCB1cmwgdG8g
dGhlIHJpZ2h0IGFwcGxpY2F0aW9uCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
YmFzZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5w
eQkocmV2aXNpb24gMjExMzAzKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2Uu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw2ICsxMzEsNyBAQCBjbGFzcyBQb3J0KG9iamVjdCk6
CiAgICAgICAgIHNlbGYuX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9IE5vbmUKICAgICAgICAg
c2VsZi5faW1hZ2VfZGlmZmVyID0gTm9uZQogICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2Vzc19j
b25zdHJ1Y3RvciA9IHNlcnZlcl9wcm9jZXNzLlNlcnZlclByb2Nlc3MgICMgb3ZlcnJpZGFibGUg
Zm9yIHRlc3RpbmcKKyAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3Rv
ciA9IHNlcnZlcl9wcm9jZXNzLlNlcnZlclByb2Nlc3MKIAogICAgICAgICBpZiBub3QgaGFzYXR0
cihvcHRpb25zLCAnY29uZmlndXJhdGlvbicpIG9yIG5vdCBvcHRpb25zLmNvbmZpZ3VyYXRpb246
CiAgICAgICAgICAgICBzZWxmLnNldF9vcHRpb25fZGVmYXVsdCgnY29uZmlndXJhdGlvbicsIHNl
bGYuZGVmYXVsdF9jb25maWd1cmF0aW9uKCkpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvZGFyd2luLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9kYXJ3aW4ucHkJKHJldmlzaW9uIDIxMTMwMykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC9kYXJ3aW4ucHkJKHdvcmtpbmcgY29weSkKQEAgLTE3NCwzICsxNzQsMTEgQEAgY2xhc3Mg
RGFyd2luUG9ydChBcHBsZVBvcnQpOgogICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3I6CiAgICAg
ICAgICAgICBfbG9nLndhcm4oInhjcnVuIGZhaWxlZDsgZmFsbGluZyBiYWNrIHRvICclcycuIiAl
IGZhbGxiYWNrKQogICAgICAgICAgICAgcmV0dXJuIGZhbGxiYWNrCisKKyAgICBkZWYgYXBwX2lk
ZW50aWZpZXJfZnJvbV9idW5kbGUoc2VsZiwgYXBwX2J1bmRsZSk6CisgICAgICAgIHBsaXN0X3Bh
dGggPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oYXBwX2J1bmRsZSwgJ0luZm8ucGxpc3QnKQorICAg
ICAgICBpZiBub3Qgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMocGxpc3RfcGF0aCk6CisgICAgICAg
ICAgICBwbGlzdF9wYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKGFwcF9idW5kbGUsICdDb250
ZW50cycsICdJbmZvLnBsaXN0JykKKyAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0ZW0uZXhp
c3RzKHBsaXN0X3BhdGgpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJu
IHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJy91c3IvbGliZXhlYy9QbGlzdEJ1ZGR5Jywg
Jy1jJywgJ1ByaW50IENGQnVuZGxlSWRlbnRpZmllcicsIHBsaXN0X3BhdGhdKS5yc3RyaXAoKQpJ
bmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5CShyZXZpc2lvbiAyMTEzMDMp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0xMzgsNyArMTM4LDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgIHNlbGYu
X2RyaXZlcl91c2VyX2RpcmVjdG9yeV9zdWZmaXggPSBOb25lCiAgICAgICAgIHNlbGYuX2RyaXZl
cl91c2VyX2NhY2hlX2RpcmVjdG9yeSA9IE5vbmUKIAotICAgICAgICAjIFdlYktpdFRlc3RSdW5u
ZXIvTGF5b3V0VGVzdFJlbGF5IGNhbiByZXBvcnQgYmFjayBzdWJwcm9jZXNzIGNyYXNoZXMgYnkg
cHJpbnRpbmcKKyAgICAgICAgIyBXZWJLaXRUZXN0UnVubmVyIGNhbiByZXBvcnQgYmFjayBzdWJw
cm9jZXNzIGNyYXNoZXMgYnkgcHJpbnRpbmcKICAgICAgICAgIyAiI0NSQVNIRUQgLSBQUk9DRVNT
TkFNRSIuICBTaW5jZSB0aG9zZSBjYW4gaGFwcGVuIGF0IGFueSB0aW1lIGFuZCBTZXJ2ZXJQcm9j
ZXNzCiAgICAgICAgICMgd29uJ3QgYmUgYXdhcmUgb2YgdGhlbSAoc2luY2UgdGhlIGFjdHVhbCB0
b29sIGRpZG4ndCBjcmFzaCwganVzdCBhIHN1YnByb2Nlc3MpCiAgICAgICAgICMgd2UgcmVjb3Jk
IHRoZSBjcmFzaGVkIHN1YnByb2Nlc3MgbmFtZSBoZXJlLgpAQCAtMzI3LDcgKzMyNyw2IEBAIGNs
YXNzIERyaXZlcihvYmplY3QpOgogCiAgICAgZGVmIF9zZXR1cF9lbnZpcm9uX2Zvcl9kcml2ZXIo
c2VsZiwgZW52aXJvbm1lbnQpOgogICAgICAgICBidWlsZF9yb290X3BhdGggPSBzdHIoc2VsZi5f
cG9ydC5fYnVpbGRfcGF0aCgpKQotICAgICAgICAjIEZJWE1FOiBEWUxEXyogdmFyaWFibGVzIHNo
b3VsZCBiZSBNYWMtb25seS4gRXZlbiBpT1MgU2ltdWxhdG9yIGRvZXNuJ3QgbmVlZCB0aGVtLCBh
cyBMYXlvdXRUZXN0UmVsYXkgaXMgYSBob3N0IGJpbmFyeS4KICAgICAgICAgc2VsZi5fYXBwZW5k
X2Vudmlyb25tZW50X3ZhcmlhYmxlX3BhdGgoZW52aXJvbm1lbnQsICdEWUxEX0xJQlJBUllfUEFU
SCcsIGJ1aWxkX3Jvb3RfcGF0aCkKICAgICAgICAgc2VsZi5fYXBwZW5kX2Vudmlyb25tZW50X3Zh
cmlhYmxlX3BhdGgoZW52aXJvbm1lbnQsICdfX1hQQ19EWUxEX0xJQlJBUllfUEFUSCcsIGJ1aWxk
X3Jvb3RfcGF0aCkKICAgICAgICAgc2VsZi5fYXBwZW5kX2Vudmlyb25tZW50X3ZhcmlhYmxlX3Bh
dGgoZW52aXJvbm1lbnQsICdEWUxEX0ZSQU1FV09SS19QQVRIJywgYnVpbGRfcm9vdF9wYXRoKQpA
QCAtMzY5LDcgKzM2OCw3IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogICAgICAgICBlbnZpcm9u
bWVudCA9IHNlbGYuX3NldHVwX2Vudmlyb25fZm9yX3Rlc3QoKQogICAgICAgICBzZWxmLl9jcmFz
aGVkX3Byb2Nlc3NfbmFtZSA9IE5vbmUKICAgICAgICAgc2VsZi5fY3Jhc2hlZF9waWQgPSBOb25l
Ci0gICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzID0gc2VsZi5fcG9ydC5fc2VydmVyX3Byb2Nl
c3NfY29uc3RydWN0b3Ioc2VsZi5fcG9ydCwgc2VsZi5fc2VydmVyX25hbWUsIHNlbGYuY21kX2xp
bmUocGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpLCBlbnZpcm9ubWVudCkKKyAgICAgICAgc2Vs
Zi5fc2VydmVyX3Byb2Nlc3MgPSBzZWxmLl9wb3J0Ll90ZXN0X3J1bm5lcl9wcm9jZXNzX2NvbnN0
cnVjdG9yKHNlbGYuX3BvcnQsIHNlbGYuX3NlcnZlcl9uYW1lLCBzZWxmLmNtZF9saW5lKHBpeGVs
X3Rlc3RzLCBwZXJfdGVzdF9hcmdzKSwgZW52aXJvbm1lbnQsIHdvcmtlcl9udW1iZXI9c2VsZi5f
d29ya2VyX251bWJlcikKICAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3Muc3RhcnQoKQogCiAg
ICAgZGVmIF9ydW5fcG9zdF9zdGFydF90YXNrcyhzZWxmKToKQEAgLTYxMSwyNyArNjEwLDYgQEAg
Y2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgIHJldHVybiBUcnVlCiAKIAotIyBGSVhNRTog
dGhpcyBzaG91bGQgYmUgYWJzdHJhY3RlZCBvdXQgdmlhIHRoZSBQb3J0IHN1YmNsYXNzIHNvbWVo
b3cuCi1jbGFzcyBJT1NTaW11bGF0b3JEcml2ZXIoRHJpdmVyKToKLSAgICBkZWYgY21kX2xpbmUo
c2VsZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgotICAgICAgICBjbWQgPSBzdXBlcihJ
T1NTaW11bGF0b3JEcml2ZXIsIHNlbGYpLmNtZF9saW5lKHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9h
cmdzKQotICAgICAgICByZWxheV90b29sID0gc2VsZi5fcG9ydC5yZWxheV9wYXRoCi0gICAgICAg
IGR1bXBfdG9vbCA9IGNtZFswXQotICAgICAgICBkdW1wX3Rvb2xfYXJncyA9IGNtZFsxOl0KLSAg
ICAgICAgcHJvZHVjdF9kaXIgPSBzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCkKLSAgICAgICAgcmVs
YXlfYXJncyA9IFsKLSAgICAgICAgICAgICctZGV2ZWxvcGVyRGlyJywgc2VsZi5fcG9ydC5kZXZl
bG9wZXJfZGlyLAotICAgICAgICAgICAgJy11ZGlkJywgc2VsZi5fcG9ydC5kZXZpY2VfaWRfZm9y
X3dvcmtlcl9udW1iZXIoc2VsZi5fd29ya2VyX251bWJlciksCi0gICAgICAgICAgICAnLXByb2R1
Y3REaXInLCBwcm9kdWN0X2RpciwKLSAgICAgICAgICAgICctYXBwJywgZHVtcF90b29sLAotICAg
ICAgICBdCi0gICAgICAgIHJldHVybiBbcmVsYXlfdG9vbF0gKyByZWxheV9hcmdzICsgWyctLSdd
ICsgZHVtcF90b29sX2FyZ3MKLQotICAgIGRlZiBfc2V0dXBfZW52aXJvbl9mb3JfZHJpdmVyKHNl
bGYsIGVudmlyb25tZW50KToKLSAgICAgICAgZW52aXJvbm1lbnRbJ0RFVkVMT1BFUl9ESVInXSA9
IHNlbGYuX3BvcnQuZGV2ZWxvcGVyX2RpcgotICAgICAgICByZXR1cm4gc3VwZXIoSU9TU2ltdWxh
dG9yRHJpdmVyLCBzZWxmKS5fc2V0dXBfZW52aXJvbl9mb3JfZHJpdmVyKGVudmlyb25tZW50KQot
Ci0KIGNsYXNzIENvbnRlbnRCbG9jayhvYmplY3QpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmKToK
ICAgICAgICAgc2VsZi5jb250ZW50X3R5cGUgPSBOb25lCkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3BvcnQvZHJpdmVyX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIxMTMwMykKKysr
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTI2NCw3ICsyNjQsNyBAQCBjbGFzcyBEcml2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RD
YXNlKToKIAogICAgIGRlZiB0ZXN0X3N0b3BfY2xlYW5zX3VwX3Byb3Blcmx5KHNlbGYpOgogICAg
ICAgICBwb3J0ID0gVGVzdFdlYktpdFBvcnQoKQotICAgICAgICBwb3J0Ll9zZXJ2ZXJfcHJvY2Vz
c19jb25zdHJ1Y3RvciA9IE1vY2tTZXJ2ZXJQcm9jZXNzCisgICAgICAgIHBvcnQuX3Rlc3RfcnVu
bmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJvY2VzcwogICAgICAgICBkcml2
ZXIgPSBEcml2ZXIocG9ydCwgMCwgcGl4ZWxfdGVzdHM9VHJ1ZSkKICAgICAgICAgZHJpdmVyLnN0
YXJ0KFRydWUsIFtdKQogICAgICAgICBsYXN0X3RtcGRpciA9IHBvcnQuX2ZpbGVzeXN0ZW0ubGFz
dF90bXBkaXIKQEAgLTI3NCw3ICsyNzQsNyBAQCBjbGFzcyBEcml2ZXJUZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3R3b19zdGFydHNfY2xlYW5zX3VwX3Byb3Blcmx5KHNl
bGYpOgogICAgICAgICBwb3J0ID0gVGVzdFdlYktpdFBvcnQoKQotICAgICAgICBwb3J0Ll9zZXJ2
ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IE1vY2tTZXJ2ZXJQcm9jZXNzCisgICAgICAgIHBvcnQu
X3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJvY2VzcwogICAg
ICAgICBkcml2ZXIgPSBEcml2ZXIocG9ydCwgMCwgcGl4ZWxfdGVzdHM9VHJ1ZSkKICAgICAgICAg
ZHJpdmVyLnN0YXJ0KFRydWUsIFtdKQogICAgICAgICBsYXN0X3RtcGRpciA9IHBvcnQuX2ZpbGVz
eXN0ZW0ubGFzdF90bXBkaXIKQEAgLTI4Myw3ICsyODMsNyBAQCBjbGFzcyBEcml2ZXJUZXN0KHVu
aXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3N0YXJ0X2FjdHVhbGx5X3N0YXJ0cyhz
ZWxmKToKICAgICAgICAgcG9ydCA9IFRlc3RXZWJLaXRQb3J0KCkKLSAgICAgICAgcG9ydC5fc2Vy
dmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJvY2VzcworICAgICAgICBwb3J0
Ll90ZXN0X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gTW9ja1NlcnZlclByb2Nlc3MKICAg
ICAgICAgZHJpdmVyID0gRHJpdmVyKHBvcnQsIDAsIHBpeGVsX3Rlc3RzPVRydWUpCiAgICAgICAg
IGRyaXZlci5zdGFydChUcnVlLCBbXSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRyaXZlci5f
c2VydmVyX3Byb2Nlc3Muc3RhcnRlZCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9pb3MucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5w
eQkocmV2aXNpb24gMjExMzAzKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5w
eQkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBmcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5tb2RlbHMudGVzdF9jCiBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGNvbmZpZyBhcyBw
b3J0X2NvbmZpZwogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBkcml2ZXIsIGltYWdlX2RpZmYK
IGZyb20gd2Via2l0cHkucG9ydC5kYXJ3aW4gaW1wb3J0IERhcndpblBvcnQKK2Zyb20gd2Via2l0
cHkucG9ydC5zaW11bGF0b3JfcHJvY2VzcyBpbXBvcnQgU2ltdWxhdG9yUHJvY2VzcwogZnJvbSB3
ZWJraXRweS54Y29kZS5zaW11bGF0b3IgaW1wb3J0IFNpbXVsYXRvciwgUnVudGltZSwgRGV2aWNl
VHlwZQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hM
b2dzCiAKQEAgLTc4LDcgKzc5LDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0
KToKICAgICBTREsgPSAnaXBob25lc2ltdWxhdG9yJwogCiAgICAgU0lNVUxBVE9SX0JVTkRMRV9J
RCA9ICdjb20uYXBwbGUuaXBob25lc2ltdWxhdG9yJwotICAgIHJlbGF5X25hbWUgPSAnTGF5b3V0
VGVzdFJlbGF5JwogICAgIFNJTVVMQVRPUl9ESVJFQ1RPUlkgPSAiL3RtcC9XZWJLaXRUZXN0aW5n
U2ltdWxhdG9ycy8iCiAgICAgTFNSRUdJU1RFUl9QQVRIID0gIi9TeXN0ZW0vTGlicmFyeS9GcmFt
ZXdvcmtzL0NvcmVTZXJ2aWNlcy5mcmFtZXdvcmsvRnJhbWV3b3Jrcy9MYXVuY2hTZXJ2aWNlcy5m
cmFtZXdvcmsvVmVyc2lvbnMvQ3VycmVudC9TdXBwb3J0L2xzcmVnaXN0ZXIiCiAgICAgUFJPQ0VT
U19DT1VOVF9FU1RJTUFURV9QRVJfU0lNVUxBVE9SX0lOU1RBTkNFID0gMTAwCkBAIC05Nyw2ICs5
Nyw3IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAKICAgICBkZWYgX19p
bml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncyk6CiAgICAgICAgIERhcndpblBv
cnQuX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncykKKyAgICAgICAgc2Vs
Zi5fdGVzdF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IFNpbXVsYXRvclByb2Nlc3MKIAog
ICAgICAgICBvcHRpb25hbF9kZXZpY2VfY2xhc3MgPSBzZWxmLmdldF9vcHRpb24oJ2RldmljZV9j
bGFzcycpCiAgICAgICAgIHNlbGYuX3ByaW50aW5nX2NtZF9saW5lID0gRmFsc2UKQEAgLTE0OCwx
NiArMTQ5LDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAg
ICAgIGRldmljZV90eXBlID0gRGV2aWNlVHlwZS5mcm9tX25hbWUoZGV2aWNlX25hbWUpCiAgICAg
ICAgIHJldHVybiBkZXZpY2VfdHlwZQogCi0gICAgQHByb3BlcnR5Ci0gICAgQG1lbW9pemVkCi0g
ICAgZGVmIHJlbGF5X3BhdGgoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX3Jvb3Rfd2FzX3NldDoK
LSAgICAgICAgICAgIHBhdGggPSBzZWxmLl9maWxlc3lzdGVtLmFic3BhdGgoc2VsZi5nZXRfb3B0
aW9uKCdyb290JykpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtYWNfY29uZmlnID0gcG9y
dF9jb25maWcuQ29uZmlnKHNlbGYuX2V4ZWN1dGl2ZSwgc2VsZi5fZmlsZXN5c3RlbSwgJ21hYycp
Ci0gICAgICAgICAgICBwYXRoID0gbWFjX2NvbmZpZy5idWlsZF9kaXJlY3Rvcnkoc2VsZi5nZXRf
b3B0aW9uKCdjb25maWd1cmF0aW9uJykpCi0gICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVt
LmpvaW4ocGF0aCwgc2VsZi5yZWxheV9uYW1lKQotCiAgICAgQG1lbW9pemVkCiAgICAgZGVmIGNo
aWxkX3Byb2Nlc3NlcyhzZWxmKToKICAgICAgICAgcmV0dXJuIGludChzZWxmLmdldF9vcHRpb24o
J2NoaWxkX3Byb2Nlc3NlcycpKQpAQCAtMTgyLDE5ICsxNzMsNiBAQCBjbGFzcyBJT1NTaW11bGF0
b3JQb3J0KERhcndpblBvcnQpOgogCiAgICAgICAgIHJldHVybiBtaW4obWF4aW11bV9zaW11bGF0
b3JfY291bnRfb25fdGhpc19zeXN0ZW0sIGJlc3RfY2hpbGRfcHJvY2Vzc19jb3VudF9mb3JfY3B1
KQogCi0gICAgZGVmIF9jaGVja19yZWxheShzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuX2Zp
bGVzeXN0ZW0uZXhpc3RzKHNlbGYucmVsYXlfcGF0aCk6Ci0gICAgICAgICAgICBfbG9nLmVycm9y
KCIlcyB3YXMgbm90IGZvdW5kIGF0ICVzIiAlIChzZWxmLnJlbGF5X25hbWUsIHNlbGYucmVsYXlf
cGF0aCkpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRydWUKLQot
ICAgIGRlZiBfY2hlY2tfcG9ydF9idWlsZChzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuX3Jv
b3Rfd2FzX3NldCBhbmQgc2VsZi5nZXRfb3B0aW9uKCdidWlsZCcpIGFuZCBub3Qgc2VsZi5fYnVp
bGRfcmVsYXkoKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBpZiBub3Qgc2Vs
Zi5fY2hlY2tfcmVsYXkoKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1
cm4gVHJ1ZQotCiAgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwgc3Rkb3V0
LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49dGltZS50aW1lLCBzbGVlcF9mbj10aW1lLnNs
ZWVwLCB3YWl0X2Zvcl9sb2c9VHJ1ZSk6CiAgICAgICAgIHRpbWVfZm4gPSB0aW1lX2ZuIG9yIHRp
bWUudGltZQogICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9yIHRpbWUuc2xlZXAKQEAgLTIx
NSw3ICsxOTMsNyBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgICAg
ICAgICAgcmV0dXJuIHNlbGYuX2dldF9jcmFzaF9sb2coY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVf
YW5kX3BpZFswXSwgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZFsxXSwgc3Rkb3V0LAog
ICAgICAgICAgICAgICAgICdcbicuam9pbihzdGRlcnJfbGluZXMpLCBuZXdlcl90aGFuLCB0aW1l
X2ZuLCBzbGVlcF9mbiwgd2FpdF9mb3JfbG9nKQogCi0gICAgICAgICMgTGF5b3V0VGVzdFJlbGF5
IGNyYXNoZWQKKyAgICAgICAgIyBBcHAgY3Jhc2hlZAogICAgICAgICBfbG9nLmRlYnVnKCdsb29r
aW5nIGZvciBjcmFzaCBsb2cgZm9yICVzOiVzJyAlIChuYW1lLCBzdHIocGlkKSkpCiAgICAgICAg
IGNyYXNoX2xvZyA9ICcnCiAgICAgICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3Moc2VsZi5ob3N0
KQpAQCAtMjMzLDI1ICsyMTEsNiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQp
OgogICAgICAgICAgICAgcmV0dXJuIHN0ZGVyciwgTm9uZQogICAgICAgICByZXR1cm4gc3RkZXJy
LCBjcmFzaF9sb2cKIAotICAgIGRlZiBfYnVpbGRfcmVsYXkoc2VsZik6Ci0gICAgICAgIGVudmly
b25tZW50ID0gc2VsZi5ob3N0LmNvcHlfY3VycmVudF9lbnZpcm9ubWVudCgpCi0gICAgICAgIGVu
dmlyb25tZW50LmRpc2FibGVfZ2NjX3NtYXJ0cXVvdGVzKCkKLSAgICAgICAgZW52ID0gZW52aXJv
bm1lbnQudG9fZGljdGlvbmFyeSgpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBGSVhN
RTogV2Ugc2hvdWxkIGJlIHBhc3NpbmcgX2FyZ3VtZW50c19mb3JfY29uZmlndXJhdGlvbigpLCB3
aGljaCByZXNwZWN0cyBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBwb3J0LAotICAgICAgICAgICAg
IyBpbnN0ZWFkIG9mIGhhcmRjb2RpbmcgLS1pb3Mtc2ltdWxhdG9yLgotICAgICAgICAgICAgc2Vs
Zi5fcnVuX3NjcmlwdCgiYnVpbGQtbGF5b3V0dGVzdHJlbGF5IiwgYXJncz1bIi0taW9zLXNpbXVs
YXRvciJdLCBlbnY9ZW52KQotICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3IsIGU6Ci0gICAgICAg
ICAgICBfbG9nLmVycm9yKGUubWVzc2FnZV93aXRoX291dHB1dChvdXRwdXRfbGltaXQ9Tm9uZSkp
Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRl
ZiBfYnVpbGRfZHJpdmVyKHNlbGYpOgotICAgICAgICBidWlsdF90b29sID0gc3VwZXIoSU9TU2lt
dWxhdG9yUG9ydCwgc2VsZikuX2J1aWxkX2RyaXZlcigpCi0gICAgICAgIGJ1aWx0X3JlbGF5ID0g
c2VsZi5fYnVpbGRfcmVsYXkoKQotICAgICAgICByZXR1cm4gYnVpbHRfdG9vbCBhbmQgYnVpbHRf
cmVsYXkKLQogICAgIGRlZiBfYnVpbGRfZHJpdmVyX2ZsYWdzKHNlbGYpOgogICAgICAgICBhcmNo
cyA9IFsnQVJDSFM9aTM4NiddIGlmIHNlbGYuYXJjaGl0ZWN0dXJlKCkgPT0gJ3g4NicgZWxzZSBb
XQogICAgICAgICBzZGsgPSBbJy0tc2RrJywgJ2lwaG9uZXNpbXVsYXRvciddCkBAIC0yNjQsOSAr
MjIzLDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgICAg
ICAgICBjb25maWd1cmF0aW9ucy5hcHBlbmQoVGVzdENvbmZpZ3VyYXRpb24odmVyc2lvbj1zZWxm
Ll92ZXJzaW9uLCBhcmNoaXRlY3R1cmU9YXJjaGl0ZWN0dXJlLCBidWlsZF90eXBlPWJ1aWxkX3R5
cGUpKQogICAgICAgICByZXR1cm4gY29uZmlndXJhdGlvbnMKIAotICAgIGRlZiBfZHJpdmVyX2Ns
YXNzKHNlbGYpOgotICAgICAgICByZXR1cm4gZHJpdmVyLklPU1NpbXVsYXRvckRyaXZlcgotCiAg
ICAgZGVmIGRlZmF1bHRfYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6CiAgICAgICAgIGlmIHNl
bGYuZ2V0X29wdGlvbignd2Via2l0X3Rlc3RfcnVubmVyJyk6CiAgICAgICAgICAgICBmYWxsYmFj
a19uYW1lcyA9IFtzZWxmLl93azJfcG9ydF9uYW1lKCldICsgW3NlbGYucG9ydF9uYW1lXSArIFsn
d2syJ10KQEAgLTI4MCw5ICsyMzYsOSBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBv
cnQpOgogCiAgICAgZGVmIF9jcmVhdGVfc2ltdWxhdG9ycyhzZWxmKToKICAgICAgICAgaWYgKHNl
bGYuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKSA8IHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpOgot
ICAgICAgICAgICAgICAgIF9sb2cud2FybigiWW91IGhhdmUgc3BlY2lmaWVkIHZlcnkgaGlnaCB2
YWx1ZSh7MH0pIGZvciAtLWNoaWxkLXByb2Nlc3NlcyIuZm9ybWF0KHNlbGYuY2hpbGRfcHJvY2Vz
c2VzKCkpKQotICAgICAgICAgICAgICAgIF9sb2cud2FybigibWF4aW11bSBjaGlsZC1wcm9jZXNz
ZXMgd2hpY2ggY2FuIGJlIHN1cHBvcnRlZCBvbiB0aGlzIHN5c3RlbSBhcmU6IHswfSIuZm9ybWF0
KHNlbGYuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKSkpCi0gICAgICAgICAgICAgICAgX2xvZy53
YXJuKCJUaGlzIGlzIHZlcnkgbGlrZWx5IHRvIGZhaWwuIikKKyAgICAgICAgICAgIF9sb2cud2Fy
bignWW91IGhhdmUgc3BlY2lmaWVkIHZlcnkgaGlnaCB2YWx1ZSh7MH0pIGZvciAtLWNoaWxkLXBy
b2Nlc3NlcycuZm9ybWF0KHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpKQorICAgICAgICAgICAgX2xv
Zy53YXJuKCdtYXhpbXVtIGNoaWxkLXByb2Nlc3NlcyB3aGljaCBjYW4gYmUgc3VwcG9ydGVkIG9u
IHRoaXMgc3lzdGVtIGFyZTogezB9Jy5mb3JtYXQoc2VsZi5kZWZhdWx0X2NoaWxkX3Byb2Nlc3Nl
cygpKSkKKyAgICAgICAgICAgIF9sb2cud2FybignVGhpcyBpcyB2ZXJ5IGxpa2VseSB0byBmYWls
LicpCiAKICAgICAgICAgaWYgc2VsZi5fdXNpbmdfZGVkaWNhdGVkX3NpbXVsYXRvcnMoKToKICAg
ICAgICAgICAgIHNlbGYuX2NyZWF0ZVNpbXVsYXRvckFwcHMoKQpAQCAtNDEzLDcgKzM2OSw3IEBA
IGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAgICAgZGVmIF90ZXN0aW5nX2Rl
dmljZShzZWxmLCBudW1iZXIpOgogICAgICAgICByZXR1cm4gU2ltdWxhdG9yLmRldmljZV9udW1i
ZXIobnVtYmVyKQogCi0gICAgIyBUaGlzIGlzIG9ubHkgZXhwb3NlZCBzbyB0aGF0IElPU1NpbXVs
YXRvckRyaXZlciBjYW4gdXNlIGl0LgorICAgICMgRklYTUU6IFRoaXMgaXMgb25seSBleHBvc2Vk
IHNvIHRoYXQgU2ltdWxhdG9yUHJvY2VzcyBjYW4gdXNlIGl0LgogICAgIGRlZiBkZXZpY2VfaWRf
Zm9yX3dvcmtlcl9udW1iZXIoc2VsZiwgbnVtYmVyKToKICAgICAgICAgaWYgc2VsZi5fcHJpbnRp
bmdfY21kX2xpbmU6CiAgICAgICAgICAgICByZXR1cm4gJzxkdW1teSBpZD4nCkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIxMTMw
MykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3QucHkJKHdvcmtp
bmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgY2xhc3MgaW9zVGVzdChkYXJ3aW5fdGVzdGNhc2Uu
RGFyd2luVGVzdAogICAgICAgICBwb3J0Ll9ydW5fc2NyaXB0ID0gcnVuX3NjcmlwdAogICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuYXJjaGl0ZWN0dXJlKCksICd4ODYnKQogICAgICAgICBw
b3J0Ll9idWlsZF9kcml2ZXIoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYXJncywg
WyctLWlvcy1zaW11bGF0b3InXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFyZ3Ms
IFsnQVJDSFM9aTM4NicsICctLXNkaycsICdpcGhvbmVzaW11bGF0b3InXSkKIAogICAgIGRlZiB0
ZXN0XzY0Yml0KHNlbGYpOgogICAgICAgICAjIEFwcGxlIE1hYyBwb3J0IGlzIDY0LWJpdCBieSBk
ZWZhdWx0CkBAIC04Miw3ICs4Miw3IEBAIGNsYXNzIGlvc1Rlc3QoZGFyd2luX3Rlc3RjYXNlLkRh
cndpblRlc3QKIAogICAgICAgICBwb3J0Ll9ydW5fc2NyaXB0ID0gcnVuX3NjcmlwdAogICAgICAg
ICBwb3J0Ll9idWlsZF9kcml2ZXIoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYXJn
cywgWyctLWlvcy1zaW11bGF0b3InXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFy
Z3MsIFsnLS1zZGsnLCAnaXBob25lc2ltdWxhdG9yJ10pCiAKICAgICBkZWYgdGVzdF9zZGtfbmFt
ZShzZWxmKToKICAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3MucHkJKHJldmlzaW9uIDIxMTMw
MykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNTksNyArNjAsNyBAQCBj
bGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6CiAgICAgaW5kZWZpbml0ZWx5LiBUaGUgY2xhc3Mg
YWxzbyBoYW5kbGVzIHRyYW5zcGFyZW50bHkgcmVzdGFydGluZyBwcm9jZXNzZXMKICAgICBhcyBu
ZWNlc3NhcnkgdG8ga2VlcCBpc3N1aW5nIGNvbW1hbmRzLiIiIgogCi0gICAgZGVmIF9faW5pdF9f
KHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVudj1Ob25lLCB1bml2ZXJzYWxfbmV3bGluZXM9
RmFsc2UsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2g9RmFsc2UpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBwb3J0X29iaiwgbmFtZSwgY21kLCBlbnY9Tm9uZSwgdW5pdmVyc2FsX25ld2xpbmVzPUZh
bHNlLCB0cmVhdF9ub19kYXRhX2FzX2NyYXNoPUZhbHNlLCB3b3JrZXJfbnVtYmVyPU5vbmUpOgog
ICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydF9vYmoKICAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUg
ICMgU2hvdWxkIGJlIHRoZSBjb21tYW5kIG5hbWUgKGUuZy4gRHVtcFJlbmRlclRyZWUsIEltYWdl
RGlmZikKICAgICAgICAgc2VsZi5fY21kID0gY21kCkBAIC0xMDMsNiArMTA0LDExIEBAIGNsYXNz
IFNlcnZlclByb2Nlc3Mob2JqZWN0KToKICAgICBkZWYgcHJvY2Vzc19uYW1lKHNlbGYpOgogICAg
ICAgICByZXR1cm4gc2VsZi5fbmFtZQogCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfc2V0
X2ZpbGVfbm9uYmxvY2tpbmcoZmlsZSk6CisgICAgICAgIGZsYWdzID0gZmNudGwuZmNudGwoZmls
ZS5maWxlbm8oKSwgZmNudGwuRl9HRVRGTCkKKyAgICAgICAgZmNudGwuZmNudGwoZmlsZS5maWxl
bm8oKSwgZmNudGwuRl9TRVRGTCwgZmxhZ3MgfCBvcy5PX05PTkJMT0NLKQorCiAgICAgZGVmIF9z
dGFydChzZWxmKToKICAgICAgICAgaWYgc2VsZi5fcHJvYzoKICAgICAgICAgICAgIHJhaXNlIFZh
bHVlRXJyb3IoIiVzIGFscmVhZHkgcnVubmluZyIgJSBzZWxmLl9uYW1lKQpAQCAtMTE3LDEzICsx
MjMsOSBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6CiAgICAgICAgICAgICB1bml2ZXJz
YWxfbmV3bGluZXM9c2VsZi5fdW5pdmVyc2FsX25ld2xpbmVzKQogICAgICAgICBzZWxmLl9waWQg
PSBzZWxmLl9wcm9jLnBpZAogICAgICAgICBzZWxmLl9wb3J0LmZpbmRfc3lzdGVtX3BpZChzZWxm
Lm5hbWUoKSwgc2VsZi5fcGlkKQotICAgICAgICBmZCA9IHNlbGYuX3Byb2Muc3Rkb3V0LmZpbGVu
bygpCiAgICAgICAgIGlmIG5vdCBzZWxmLl91c2Vfd2luMzJfYXBpczoKLSAgICAgICAgICAgIGZs
ID0gZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkwpCi0gICAgICAgICAgICBmY250bC5mY250
bChmZCwgZmNudGwuRl9TRVRGTCwgZmwgfCBvcy5PX05PTkJMT0NLKQotICAgICAgICAgICAgZmQg
PSBzZWxmLl9wcm9jLnN0ZGVyci5maWxlbm8oKQotICAgICAgICAgICAgZmwgPSBmY250bC5mY250
bChmZCwgZmNudGwuRl9HRVRGTCkKLSAgICAgICAgICAgIGZjbnRsLmZjbnRsKGZkLCBmY250bC5G
X1NFVEZMLCBmbCB8IG9zLk9fTk9OQkxPQ0spCisgICAgICAgICAgICBzZWxmLl9zZXRfZmlsZV9u
b25ibG9ja2luZyhzZWxmLl9wcm9jLnN0ZG91dCkKKyAgICAgICAgICAgIHNlbGYuX3NldF9maWxl
X25vbmJsb2NraW5nKHNlbGYuX3Byb2Muc3RkZXJyKQogCiAgICAgZGVmIF9oYW5kbGVfcG9zc2li
bGVfaW50ZXJydXB0KHNlbGYpOgogICAgICAgICAiIiJUaGlzIHJvdXRpbmUgY2hlY2tzIHRvIHNl
ZSBpZiB0aGUgcHJvY2VzcyBjcmFzaGVkIG9yIGV4aXRlZApJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzX21vY2sucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzX21vY2sucHkJKHJldmlzaW9uIDIx
MTMwMykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzc19tb2Nr
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKIAogY2xhc3MgTW9ja1NlcnZl
clByb2Nlc3Mob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmo9Tm9uZSwg
bmFtZT1Ob25lLCBjbWQ9Tm9uZSwgZW52PU5vbmUsIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwg
bGluZXM9Tm9uZSwgY3Jhc2hlZD1GYWxzZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRf
b2JqPU5vbmUsIG5hbWU9Tm9uZSwgY21kPU5vbmUsIGVudj1Ob25lLCB1bml2ZXJzYWxfbmV3bGlu
ZXM9RmFsc2UsIGxpbmVzPU5vbmUsIGNyYXNoZWQ9RmFsc2UsIHdvcmtlcl9udW1iZXI9Tm9uZSk6
CiAgICAgICAgIHNlbGYudGltZWRfb3V0ID0gRmFsc2UKICAgICAgICAgc2VsZi5saW5lcyA9IGxp
bmVzIG9yIFtdCiAgICAgICAgIHNlbGYuY3Jhc2hlZCA9IGNyYXNoZWQKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC9zaW11bGF0b3JfcHJvY2Vzcy5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2ltdWxhdG9yX3Byb2Nlc3MucHkJKG5vbmV4aXN0
ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNzLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM0IEBACisjIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGVycm5vCitpbXBvcnQgb3MKK2ltcG9ydCBzaWdu
YWwKK2ltcG9ydCB0aW1lCisKK2Zyb20gd2Via2l0cHkucG9ydC5zZXJ2ZXJfcHJvY2VzcyBpbXBv
cnQgU2VydmVyUHJvY2VzcworZnJvbSB3ZWJraXRweS54Y29kZS5zaW11bGF0b3IgaW1wb3J0IFNp
bXVsYXRvcgorCisKK2NsYXNzIFNpbXVsYXRvclByb2Nlc3MoU2VydmVyUHJvY2Vzcyk6CisKKyAg
ICBjbGFzcyBQb3BlbihvYmplY3QpOgorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwaWQs
IHN0ZGluLCBzdGRvdXQsIHN0ZGVycik6CisgICAgICAgICAgICBzZWxmLnN0ZGluID0gc3RkaW4K
KyAgICAgICAgICAgIHNlbGYuc3Rkb3V0ID0gc3Rkb3V0CisgICAgICAgICAgICBzZWxmLnN0ZGVy
ciA9IHN0ZGVycgorICAgICAgICAgICAgc2VsZi5waWQgPSBwaWQKKyAgICAgICAgICAgIHNlbGYu
cmV0dXJuY29kZSA9IE5vbmUKKworICAgICAgICBkZWYgcG9sbChzZWxmKToKKyAgICAgICAgICAg
IGlmIHNlbGYucmV0dXJuY29kZToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5yZXR1cm5j
b2RlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3Mua2lsbChzZWxmLnBpZCwg
MCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlcnI6CisgICAgICAgICAgICAgICAgYXNz
ZXJ0IGVyci5lcnJubyA9PSBlcnJuby5FU1JDSAorICAgICAgICAgICAgICAgIHNlbGYucmV0dXJu
Y29kZSA9IDEKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnJldHVybmNvZGUKKworICAgICAgICBk
ZWYgd2FpdChzZWxmKToKKyAgICAgICAgICAgIHdoaWxlIG5vdCBzZWxmLnBvbGwoKToKKyAgICAg
ICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpICAjIEluIHNlY29uZHMKKyAgICAgICAgICAgIHJl
dHVybiBzZWxmLnJldHVybmNvZGUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X29iaiwg
bmFtZSwgY21kLCBlbnY9Tm9uZSwgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNlLCB0cmVhdF9ub19k
YXRhX2FzX2NyYXNoPUZhbHNlLCB3b3JrZXJfbnVtYmVyPU5vbmUpOgorICAgICAgICBzZWxmLl9i
dW5kbGVfaWQgPSBwb3J0X29iai5hcHBfaWRlbnRpZmllcl9mcm9tX2J1bmRsZShjbWRbMF0pCisg
ICAgICAgIHNlbGYuX2RldmljZSA9IFNpbXVsYXRvcihwb3J0X29iai5ob3N0KS5maW5kX2Rldmlj
ZV9ieV91ZGlkKHBvcnRfb2JqLmRldmljZV9pZF9mb3Jfd29ya2VyX251bWJlcih3b3JrZXJfbnVt
YmVyKSkKKyAgICAgICAgaWYgbm90IHNlbGYuX2RldmljZS5pbnN0YWxsX2FwcChjbWRbMF0pOgor
ICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdGYWlsZWQgdG8gaW5zdGFsbCBhcHAge30g
b24gc2ltdWxhdG9yIGRldmljZSB7fScuZm9ybWF0KGNtZFswXSwgc2VsZi5fZGV2aWNlLnVkaWQp
KQorICAgICAgICBlbnZbJ0lQQ19JREVOVElGSUVSJ10gPSBzZWxmLl9idW5kbGVfaWQgKyAnLScg
KyBzZWxmLl9kZXZpY2UudWRpZAorCisgICAgICAgICMgVGhpcyBsb2NhdGlvbiBtYXRjaGVzIHRo
ZSBsb2NhdGlvbiB1c2VkIGJ5IFdlYktpdFRlc3RSdW5uZXIgYW5kIER1bXBSZW5kZXJUcmVlCisg
ICAgICAgICMgZm9yIHRoZSBvdGhlciBzaWRlIG9mIHRoZXNlIGZpZm9zLgorICAgICAgICBmaWxl
X2xvY2F0aW9uID0gJy90bXAvJyArIGVudlsnSVBDX0lERU5USUZJRVInXQorICAgICAgICBzZWxm
Ll9pbl9wYXRoID0gZmlsZV9sb2NhdGlvbiArICdfSU4nCisgICAgICAgIHNlbGYuX291dF9wYXRo
ID0gZmlsZV9sb2NhdGlvbiArICdfT1VUJworICAgICAgICBzZWxmLl9lcnJvcl9wYXRoID0gZmls
ZV9sb2NhdGlvbiArICdfRVJST1InCisKKyAgICAgICAgc3VwZXIoU2ltdWxhdG9yUHJvY2Vzcywg
c2VsZikuX19pbml0X18ocG9ydF9vYmosIG5hbWUsIGNtZCwgZW52LCB1bml2ZXJzYWxfbmV3bGlu
ZXMsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2gpCisKKyAgICBkZWYgX3Jlc2V0KHNlbGYpOgorICAg
ICAgICBzdXBlcihTaW11bGF0b3JQcm9jZXNzLCBzZWxmKS5fcmVzZXQoKQorCisgICAgICAgICMg
VW5saW5rcyBhcmUgbmVlZGVkIG9uIHJlc2V0IGluIHRoZSBldmVudCB0aGF0IHRoZSBQeXRob24g
Y29kZSB1bmV4cGVjdGVkbHkKKyAgICAgICAgIyBmYWlscyBiZXR3ZWVuIF9zdGFydCgpIGFuZCBr
aWxsKCkuICBUaGlzIGNhbiBiZSBjYXVzZWQgYnkgYSBTSUdLSUxMIG9yIGEgY3Jhc2guCisgICAg
ICAgICMgVGhpcyBlbnN1cmVzIHRoYXQgb3MubWtmaWZvKCkgd2lsbCBub3QgYmUgb2JzdHJ1Y3Rl
ZCBieSBwcmV2aW91cyBmaWZvcy4KKyAgICAgICAgIyBPdGhlciBmaWxlcyB3aWxsIHN0aWxsIGNh
dXNlIG9zLm1rZmlmbygpIHRvIGZhaWwuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnVu
bGluayhzZWxmLl9pbl9wYXRoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisg
ICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnVubGluayhzZWxmLl9vdXRfcGF0aCkKKyAgICAg
ICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworICAgICAgICB0cnk6CisgICAgICAgICAgICBv
cy51bmxpbmsoc2VsZi5fZXJyb3JfcGF0aCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAg
cGFzcworCisgICAgZGVmIF9zdGFydChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fcHJvYzoKKyAg
ICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3t9IGFscmVhZHkgcnVubmluZycuZm9ybWF0KHNl
bGYuX25hbWUpKQorICAgICAgICBzZWxmLl9yZXNldCgpCisKKyAgICAgICAgRklGT19QRVJNSVNT
SU9OX0ZMQUdTID0gMDYwMCAgIyBPbmx5IG93bmVyIGNhbiByZWFkIGFuZCB3cml0ZQorICAgICAg
ICBvcy5ta2ZpZm8oc2VsZi5faW5fcGF0aCwgRklGT19QRVJNSVNTSU9OX0ZMQUdTKQorICAgICAg
ICBvcy5ta2ZpZm8oc2VsZi5fb3V0X3BhdGgsIEZJRk9fUEVSTUlTU0lPTl9GTEFHUykKKyAgICAg
ICAgb3MubWtmaWZvKHNlbGYuX2Vycm9yX3BhdGgsIEZJRk9fUEVSTUlTU0lPTl9GTEFHUykKKwor
ICAgICAgICBzdGRvdXQgPSBvcy5mZG9wZW4ob3Mub3BlbihzZWxmLl9vdXRfcGF0aCwgb3MuT19S
RE9OTFkgfCBvcy5PX05PTkJMT0NLKSwgJ3JiJykKKyAgICAgICAgc3RkZXJyID0gb3MuZmRvcGVu
KG9zLm9wZW4oc2VsZi5fZXJyb3JfcGF0aCwgb3MuT19SRE9OTFkgfCBvcy5PX05PTkJMT0NLKSwg
J3JiJykKKworICAgICAgICBzZWxmLl9waWQgPSBzZWxmLl9kZXZpY2UubGF1bmNoX2FwcChzZWxm
Ll9idW5kbGVfaWQsIHNlbGYuX2NtZFsxOl0sIGVudj1zZWxmLl9lbnYpCisKKyAgICAgICAgZGVm
IGhhbmRsZXIoc2lnbnVtLCBmcmFtZSk6CisgICAgICAgICAgICBhc3NlcnQgc2lnbnVtID09IHNp
Z25hbC5TSUdBTFJNCisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1RpbWVkIG91dCB3YWl0
aW5nIGZvciBwcm9jZXNzIHRvIG9wZW4ge30nLmZvcm1hdChzZWxmLl9pbl9wYXRoKSkKKyAgICAg
ICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgaGFuZGxlcikKKyAgICAgICAgc2lnbmFs
LmFsYXJtKDMpICAjIEluIHNlY29uZHMKKworICAgICAgICBzdGRpbiA9IE5vbmUKKyAgICAgICAg
dHJ5OgorICAgICAgICAgICAgc3RkaW4gPSBvcGVuKHNlbGYuX2luX3BhdGgsICd3JywgMCkgICMg
T3BlbmluZyB3aXRoIG5vIGJ1ZmZlcmluZywgbGlrZSBwb3BlbgorICAgICAgICBleGNlcHQ6Cisg
ICAgICAgICAgICAjIFdlIHNldCBzZWxmLl9wcm9jIGFzIF9yZXNldCgpIGFuZCBfa2lsbCgpIGRl
cGVuZCBvbiBpdC4KKyAgICAgICAgICAgIHNlbGYuX3Byb2MgPSBTaW11bGF0b3JQcm9jZXNzLlBv
cGVuKHNlbGYuX3BpZCwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyKQorICAgICAgICAgICAgaWYgc2Vs
Zi5fcHJvYy5wb2xsKCkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5fcmVzZXQo
KQorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignQXBwIHt9IGNyYXNoZWQgYmVmb3Jl
IHN0ZGluIGNvdWxkIGJlIGF0dGFjaGVkJy5mb3JtYXQob3MucGF0aC5iYXNlbmFtZShzZWxmLl9j
bWRbMF0pKSkKKyAgICAgICAgICAgIHNlbGYuX2tpbGwoKQorICAgICAgICAgICAgc2VsZi5fcmVz
ZXQoKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgc2lnbmFsLmFsYXJtKDApICAjIENhbmNl
bCBhbGFybQorCisgICAgICAgIHNlbGYuX3Byb2MgPSBTaW11bGF0b3JQcm9jZXNzLlBvcGVuKHNl
bGYuX3BpZCwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyKQorCisgICAgZGVmIF9raWxsKHNlbGYpOgor
ICAgICAgICBzZWxmLl9kZXZpY2UudGVybWluYXRlX2FwcChzZWxmLl9idW5kbGVfaWQpCisgICAg
ICAgIHN1cGVyKFNpbXVsYXRvclByb2Nlc3MsIHNlbGYpLl9raWxsKCkKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5CShyZXZpc2lvbiAyMTEzMDMpCisrKyBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvci5weQkod29ya2luZyBjb3B5KQpA
QCAtMTY3LDcgKzE2Nyw3IEBAIGNsYXNzIERldmljZShvYmplY3QpOgogICAgIFJlcHJlc2VudHMg
YSBDb3JlU2ltdWxhdG9yIGRldmljZSB1bmRlcm5lYXRoIGEgcnVudGltZQogICAgICIiIgogCi0g
ICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHVkaWQsIGF2YWlsYWJsZSwgcnVudGltZSk6Cisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHVkaWQsIGF2YWlsYWJsZSwgcnVudGltZSwgaG9z
dCk6CiAgICAgICAgICIiIgogICAgICAgICA6cGFyYW0gbmFtZTogVGhlIGRldmljZSBuYW1lCiAg
ICAgICAgIDp0eXBlIG5hbWU6IHN0cgpAQCAtMTc3LDcgKzE3NywxMCBAQCBjbGFzcyBEZXZpY2Uo
b2JqZWN0KToKICAgICAgICAgOnR5cGUgYXZhaWxhYmxlOiBib29sCiAgICAgICAgIDpwYXJhbSBy
dW50aW1lOiBUaGUgaU9TIFNpbXVsYXRvciBydW50aW1lIHRoYXQgaG9zdHMgdGhpcyBkZXZpY2UK
ICAgICAgICAgOnR5cGUgcnVudGltZTogUnVudGltZQorICAgICAgICA6cGFyYW0gaG9zdDogVGhl
IGhvc3Qgd2hpY2ggY2FuIHJ1biBjb21tYW5kIGxpbmUgY29tbWFuZHMKKyAgICAgICAgOnR5cGUg
aG9zdDogSG9zdAogICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5faG9zdCA9IGhvc3QKICAgICAg
ICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgICBzZWxmLnVkaWQgPSB1ZGlkCiAgICAgICAgIHNl
bGYuYXZhaWxhYmxlID0gYXZhaWxhYmxlCkBAIC0yNjAsNiArMjYzLDMxIEBAIGNsYXNzIERldmlj
ZShvYmplY3QpOgogICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3I6
CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJyJ4Y3J1biBzaW1jdGwgZXJhc2UiIGZh
aWxlZDogZGV2aWNlIHN0YXRlIGlzIHt9Jy5mb3JtYXQoU2ltdWxhdG9yLmRldmljZV9zdGF0ZSh1
ZGlkKSkpCiAKKyAgICBkZWYgaW5zdGFsbF9hcHAoc2VsZiwgYXBwX3BhdGgpOgorICAgICAgICBy
ZXR1cm4gbm90IHNlbGYuX2hvc3QuZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsneGNydW4nLCAnc2lt
Y3RsJywgJ2luc3RhbGwnLCBzZWxmLnVkaWQsIGFwcF9wYXRoXSwgcmV0dXJuX2V4aXRfY29kZT1U
cnVlKQorCisgICAgZGVmIGxhdW5jaF9hcHAoc2VsZiwgYnVuZGxlX2lkLCBhcmdzLCBlbnY9Tm9u
ZSk6CisgICAgICAgIGVudmlyb25tZW50X3RvX3VzZSA9IHt9CisgICAgICAgIFNJTUNUTF9FTlZf
UFJFRklYID0gJ1NJTUNUTF9DSElMRF8nCisgICAgICAgIGZvciB2YWx1ZSBpbiAoZW52IG9yIHt9
KToKKyAgICAgICAgICAgIGlmIG5vdCB2YWx1ZS5zdGFydHN3aXRoKFNJTUNUTF9FTlZfUFJFRklY
KToKKyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudF90b191c2VbU0lNQ1RMX0VOVl9QUkVGSVgg
KyB2YWx1ZV0gPSBlbnZbdmFsdWVdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
IGVudmlyb25tZW50X3RvX3VzZVt2YWx1ZV0gPSBlbnZbdmFsdWVdCisKKyAgICAgICAgb3V0cHV0
ID0gc2VsZi5faG9zdC5leGVjdXRpdmUucnVuX2NvbW1hbmQoCisgICAgICAgICAgICBbJ3hjcnVu
JywgJ3NpbWN0bCcsICdsYXVuY2gnLCBzZWxmLnVkaWQsIGJ1bmRsZV9pZF0gKyBhcmdzLAorICAg
ICAgICAgICAgZW52PWVudmlyb25tZW50X3RvX3VzZSwKKyAgICAgICAgKQorCisgICAgICAgIG1h
dGNoID0gcmUubWF0Y2gocicoP1A8YnVuZGxlPlteOl0rKTogKD9QPHBpZD5cZCspXG4nLCBvdXRw
dXQpCisgICAgICAgIGlmIG5vdCBtYXRjaCBvciBtYXRjaC5ncm91cCgnYnVuZGxlJykgIT0gYnVu
ZGxlX2lkOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdGYWlsZWQgdG8gZmluZCBw
cm9jZXNzIGlkIGZvciB7fToge30nLmZvcm1hdChidW5kbGVfaWQsIG91dHB1dCkpCisgICAgICAg
IHJldHVybiBpbnQobWF0Y2guZ3JvdXAoJ3BpZCcpKQorCisgICAgZGVmIHRlcm1pbmF0ZV9hcHAo
c2VsZiwgYnVuZGxlX2lkKToKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9ob3N0LmV4ZWN1dGl2
ZS5ydW5fY29tbWFuZChbJ3hjcnVuJywgJ3NpbWN0bCcsICd0ZXJtaW5hdGUnLCBzZWxmLnVkaWQs
IGJ1bmRsZV9pZF0sIHJldHVybl9leGl0X2NvZGU9VHJ1ZSkKKwogICAgIGRlZiBfX2VxX18oc2Vs
Ziwgb3RoZXIpOgogICAgICAgICByZXR1cm4gc2VsZi51ZGlkID09IG90aGVyLnVkaWQKIApAQCAt
NDc3LDcgKzUwNSw4IEBAIGNsYXNzIFNpbXVsYXRvcihvYmplY3QpOgogICAgICAgICAgICAgICAg
IGRldmljZSA9IERldmljZShuYW1lPWRldmljZV9tYXRjaC5ncm91cCgnbmFtZScpLnJzdHJpcCgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZGlkPWRldmljZV9tYXRjaC5ncm91
cCgndWRpZCcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGU9ZGV2
aWNlX21hdGNoLmdyb3VwKCdhdmFpbGFiaWxpdHknKSBpcyBOb25lLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBydW50aW1lPWN1cnJlbnRfcnVudGltZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcnVudGltZT1jdXJyZW50X3J1bnRpbWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhvc3Q9c2VsZi5faG9zdCkKICAgICAgICAgICAgICAgICBjdXJy
ZW50X3J1bnRpbWUuZGV2aWNlcy5hcHBlbmQoZGV2aWNlKQogCiAgICAgZGVmIGRldmljZV90eXBl
KHNlbGYsIG5hbWU9Tm9uZSwgaWRlbnRpZmllcj1Ob25lKToK
</data>
<flag name="review"
          id="321914"
          type_id="1"
          status="+"
          setter="dbates"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300076</attachid>
            <date>2017-01-29 16:04:18 -0800</date>
            <delta_ts>2017-01-30 08:55:29 -0800</delta_ts>
            <desc>Python replacement of LayoutTestRelay</desc>
            <filename>replace.patch</filename>
            <type>text/plain</type>
            <size>28879</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMTM1MykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYxIEBACisyMDE3LTAxLTI5ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBVc2Ugc2ltY3RsIGluc3RlYWQgb2YgTGF5b3V0VGVzdFJlbGF5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU5MjcKKworICAg
ICAgICBSZXZpZXdlZCBieSBEYW5pZWwgQmF0ZXMuCisKKyAgICAgICAgUGFydCAxCisKKyAgICAg
ICAgTGF5b3V0VGVzdFJlbGF5IHVzZXMgU1BJLCBzaW5jZSByZWNlbnQgdmVyc2lvbnMgb2YgdGhl
IGlPUyBTREsgYWxsb3cgZm9yIGluc3RhbGxpbmcgYXBwcyBvbgorICAgICAgICBzaW11bGF0b3Jz
IHRocm91Z2ggc2ltY3RsIChpT1MgMTAgYW5kIGxhdGVyKSwgdXNlIHRoaXMgZnVuY3Rpb25hbGl0
eSBpbnN0ZWFkLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHk6Cisg
ICAgICAgIChQb3J0Ll9faW5pdF9fKTogQWRkZWQgX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3Ry
dWN0b3IuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weToKKyAgICAg
ICAgKERhcndpblBvcnQuYXBwX2lkZW50aWZpZXJfZnJvbV9idW5kbGUpOiBBZGRlZCBmdW5jdGlv
biB0byBleHRyYWN0IGJ1bmRsZSBJRCBmcm9tIHBsaXN0LgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9kcml2ZXIucHk6CisgICAgICAgIChEcml2ZXIuX3N0YXJ0KTogUGFzcyB3b3Jr
ZXJfbnVtYmVyIHRvIHNlcnZlcl9wcm9jZXNzIHNvIHdlIGNhbiBsb29rIHVwIHRoZSBjb3JyZWN0
IHNpbXVsYXRvciBkZXZpY2UgdG8gdXNlLgorICAgICAgICAoSU9TU2ltdWxhdG9yRHJpdmVyKTog
RGVsZXRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyX3VuaXR0ZXN0
LnB5OgorICAgICAgICAoRHJpdmVyVGVzdC50ZXN0X3N0b3BfY2xlYW5zX3VwX3Byb3Blcmx5KTog
U2V0IF90ZXN0X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yIGZvciB0ZXN0aW5nLgorICAgICAg
ICAoRHJpdmVyVGVzdC50ZXN0X3R3b19zdGFydHNfY2xlYW5zX3VwX3Byb3Blcmx5KTogRGl0dG8u
CisgICAgICAgIChEcml2ZXJUZXN0LnRlc3Rfc3RhcnRfYWN0dWFsbHlfc3RhcnRzKTogRGl0dG8u
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weToKKyAgICAgICAgKElPU1Np
bXVsYXRvclBvcnQpOiBSZW1vdmUgcmVsYXlfbmFtZS4KKyAgICAgICAgKElPU1NpbXVsYXRvclBv
cnQuX19pbml0X18pOiBTZXQgX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgdG8gU2lt
dWxhdG9yUHJvY2VzcyBmb3IgSU9TU2ltdWxhdG9yUG9ydC4KKyAgICAgICAgKElPU1NpbXVsYXRv
clBvcnQuX2NyZWF0ZV9zaW11bGF0b3JzKTogRm9ybWF0dGluZyBjaGFuZ2UuCisgICAgICAgIChJ
T1NTaW11bGF0b3JQb3J0LnJlbGF5X3BhdGgpOiBEZWxldGVkLgorICAgICAgICAoSU9TU2ltdWxh
dG9yUG9ydC5fY2hlY2tfcmVsYXkpOiBEZWxldGVkLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9y
dC5fY2hlY2tfcG9ydF9idWlsZCk6IERlbGV0ZWQuIFVzZSBiYXNlIGNsYXNzIGltcGxlbWVudGF0
aW9uCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9idWlsZF9yZWxheSk6IERlbGV0ZWQuCisg
ICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9idWlsZF9kcml2ZXIpOiBEZWxldGVkLiBVc2UgYmFz
ZSBjbGFzcyBpbXBsZW1lbnRhdGlvbgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fZHJpdmVy
X2NsYXNzKTogRGVsZXRlZC4gVXNlIGJhc2UgY2xhc3MgaW1wbGVtZW50YXRpb24KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0LnB5OgorICAgICAgICAoaW9zVGVz
dC50ZXN0XzMyYml0KTogVXBkYXRlIHRlc3QuCisgICAgICAgIChpb3NUZXN0LnRlc3RfNjRiaXQp
OiBVcGRhdGUgdGVzdC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3By
b2Nlc3MucHk6CisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLl9faW5pdF9fKTogQWRkZWQgYXJndW1l
bnQgd29ya2VyX251bWJlci4gVGhpcyBjbGFzcyBkb2VzIG5vdCBtYWtlIHVzZSBvZiBpdC4gV2Ug
d2lsbCBtYWtlIHVzZSBvZiB0aGlzIGFyZ3VtZW50IGluIFNpbXVsYXRvclByb2Nlc3MgdG8gbG9v
a3VwIHRoZSBhc3NvY2lhdGVkIHNpbXVsYXRvciBkZXZpY2UuCisgICAgICAgIChTZXJ2ZXJQcm9j
ZXNzLl9zZXRfZmlsZV9ub25ibG9ja2luZyk6IEFkZGVkIHRvIHNoYXJlIGNvbW1vbiBjb2RlLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzc19tb2NrLnB5Ogor
ICAgICAgICAoTW9ja1NlcnZlclByb2Nlc3MuX19pbml0X18pOiBBZGRlZCBhcmd1bWVudCB3b3Jr
ZXJfbnVtYmVyLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9zaW11bGF0b3JfcHJv
Y2Vzcy5weTogQWRkZWQuCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNzKTogQWRkZWQuCisgICAg
ICAgIChTaW11bGF0b3JQcm9jZXNzLlBvcGVuKTogQWRkZWQuCisgICAgICAgIChTaW11bGF0b3JQ
cm9jZXNzLlBvcGVuLl9faW5pdF9fKTogQWRkZWQuIEluaXRpYWxpemUgUG9wZW4gc3RydWN0dXJl
IHdpdGggc3RkaW4sIHN0ZG91dCwgc3RkZXJyIGFuZCBwaWQuCisgICAgICAgIChTaW11bGF0b3JQ
cm9jZXNzLlBvcGVuLnBvbGwpOiBBZGRlZC4gQ2hlY2sgaWYgdGhlIHByb2Nlc3MgaXMgcnVubmlu
Zy4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuUG9wZW4ud2FpdCk6IEFkZGVkLiBXYWl0IGZv
ciBwcm9jZXNzIHRvIGNsb3NlLgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5fX2luaXRfXyk6
IEFkZGVkLiBJbnN0YWxsIGFwcCB0byBkZXZpY2Ugc3BlY2lmaWVkIHRocm91Z2ggcG9ydCBhbmQg
d29ya2VyX251bWJlci4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX3Jlc2V0KTogQWRkZWQu
IFVubGluayBmaWZvcy4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX3N0YXJ0KTogQWRkZWQu
IExhdW5jaCBhcHAgb24gc2ltdWxhdG9yLCBsaW5rIGZpZm9zLgorICAgICAgICAoU2ltdWxhdG9y
UHJvY2Vzcy5fa2lsbCk6IEFkZGVkLiBTaHV0ZG93biBhcHAgb24gc2ltdWxhdG9yLgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5OgorICAgICAgICAoRGV2aWNl
Ll9faW5pdF9fKTogQWNjZXB0IGhvc3QgdG8gcnVuIGluc3RhbGwvbGF1bmNoL3Rlcm1pbmF0ZS4K
KyAgICAgICAgKERldmljZS5pbnN0YWxsX2FwcCk6IEluc3RhbGwgYXBwIHRvIHRhcmdldCBEZXZp
Y2UuCisgICAgICAgIChEZXZpY2UubGF1bmNoX2FwcCk6IExhdW5jaCBhcHAgb24gdGFyZ2V0IERl
dmljZS4KKyAgICAgICAgKERldmljZS50ZXJtaW5hdGVfYXBwKTogU2h1dGRvd24gYXBwIG9uIHRh
cmdldCBEZXZpY2UuCisgICAgICAgIChTaW11bGF0b3IuX3BhcnNlX2RldmljZXMpOiBQYXNzIGhv
c3QgdG8gRGV2aWNlLgorCiAyMDE3LTAxLTI4ICBZb2F2IFdlaXNzICA8eW9hdkB5b2F2LndzPgog
CiAgICAgICAgIEFkZCBMaW5rIFByZWxvYWQgYXMgYW4gb2ZmLWJ5LWRlZmF1bHQgZXhwZXJpbWVu
dGFsIGZlYXR1cmUgbWVudSBpdGVtLgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2Jhc2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2Uu
cHkJKHJldmlzaW9uIDIxMTM1MykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNl
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNiArMTMxLDcgQEAgY2xhc3MgUG9ydChvYmplY3Qp
OgogICAgICAgICBzZWxmLl93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgPSBOb25lCiAgICAgICAg
IHNlbGYuX2ltYWdlX2RpZmZlciA9IE5vbmUKICAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3Nf
Y29uc3RydWN0b3IgPSBzZXJ2ZXJfcHJvY2Vzcy5TZXJ2ZXJQcm9jZXNzICAjIG92ZXJyaWRhYmxl
IGZvciB0ZXN0aW5nCisgICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0
b3IgPSBzZXJ2ZXJfcHJvY2Vzcy5TZXJ2ZXJQcm9jZXNzCiAKICAgICAgICAgaWYgbm90IGhhc2F0
dHIob3B0aW9ucywgJ2NvbmZpZ3VyYXRpb24nKSBvciBub3Qgb3B0aW9ucy5jb25maWd1cmF0aW9u
OgogICAgICAgICAgICAgc2VsZi5zZXRfb3B0aW9uX2RlZmF1bHQoJ2NvbmZpZ3VyYXRpb24nLCBz
ZWxmLmRlZmF1bHRfY29uZmlndXJhdGlvbigpKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L2Rhcndpbi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvZGFyd2luLnB5CShyZXZpc2lvbiAyMTEzNTMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvZGFyd2luLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsMyArMTc0LDExIEBAIGNsYXNz
IERhcndpblBvcnQoQXBwbGVQb3J0KToKICAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yOgogICAg
ICAgICAgICAgX2xvZy53YXJuKCJ4Y3J1biBmYWlsZWQ7IGZhbGxpbmcgYmFjayB0byAnJXMnLiIg
JSBmYWxsYmFjaykKICAgICAgICAgICAgIHJldHVybiBmYWxsYmFjaworCisgICAgZGVmIGFwcF9p
ZGVudGlmaWVyX2Zyb21fYnVuZGxlKHNlbGYsIGFwcF9idW5kbGUpOgorICAgICAgICBwbGlzdF9w
YXRoID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKGFwcF9idW5kbGUsICdJbmZvLnBsaXN0JykKKyAg
ICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHBsaXN0X3BhdGgpOgorICAgICAg
ICAgICAgcGxpc3RfcGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihhcHBfYnVuZGxlLCAnQ29u
dGVudHMnLCAnSW5mby5wbGlzdCcpCisgICAgICAgIGlmIG5vdCBzZWxmLl9maWxlc3lzdGVtLmV4
aXN0cyhwbGlzdF9wYXRoKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVy
biBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoWycvdXNyL2xpYmV4ZWMvUGxpc3RCdWRkeScs
ICctYycsICdQcmludCBDRkJ1bmRsZUlkZW50aWZpZXInLCBwbGlzdF9wYXRoXSkucnN0cmlwKCkK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXIucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQkocmV2aXNpb24gMjExMzUz
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQkod29ya2luZyBjb3B5
KQpAQCAtMTM4LDcgKzEzOCw3IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogICAgICAgICBzZWxm
Ll9kcml2ZXJfdXNlcl9kaXJlY3Rvcnlfc3VmZml4ID0gTm9uZQogICAgICAgICBzZWxmLl9kcml2
ZXJfdXNlcl9jYWNoZV9kaXJlY3RvcnkgPSBOb25lCiAKLSAgICAgICAgIyBXZWJLaXRUZXN0UnVu
bmVyL0xheW91dFRlc3RSZWxheSBjYW4gcmVwb3J0IGJhY2sgc3VicHJvY2VzcyBjcmFzaGVzIGJ5
IHByaW50aW5nCisgICAgICAgICMgV2ViS2l0VGVzdFJ1bm5lciBjYW4gcmVwb3J0IGJhY2sgc3Vi
cHJvY2VzcyBjcmFzaGVzIGJ5IHByaW50aW5nCiAgICAgICAgICMgIiNDUkFTSEVEIC0gUFJPQ0VT
U05BTUUiLiAgU2luY2UgdGhvc2UgY2FuIGhhcHBlbiBhdCBhbnkgdGltZSBhbmQgU2VydmVyUHJv
Y2VzcwogICAgICAgICAjIHdvbid0IGJlIGF3YXJlIG9mIHRoZW0gKHNpbmNlIHRoZSBhY3R1YWwg
dG9vbCBkaWRuJ3QgY3Jhc2gsIGp1c3QgYSBzdWJwcm9jZXNzKQogICAgICAgICAjIHdlIHJlY29y
ZCB0aGUgY3Jhc2hlZCBzdWJwcm9jZXNzIG5hbWUgaGVyZS4KQEAgLTMyNyw3ICszMjcsNiBAQCBj
bGFzcyBEcml2ZXIob2JqZWN0KToKIAogICAgIGRlZiBfc2V0dXBfZW52aXJvbl9mb3JfZHJpdmVy
KHNlbGYsIGVudmlyb25tZW50KToKICAgICAgICAgYnVpbGRfcm9vdF9wYXRoID0gc3RyKHNlbGYu
X3BvcnQuX2J1aWxkX3BhdGgoKSkKLSAgICAgICAgIyBGSVhNRTogRFlMRF8qIHZhcmlhYmxlcyBz
aG91bGQgYmUgTWFjLW9ubHkuIEV2ZW4gaU9TIFNpbXVsYXRvciBkb2Vzbid0IG5lZWQgdGhlbSwg
YXMgTGF5b3V0VGVzdFJlbGF5IGlzIGEgaG9zdCBiaW5hcnkuCiAgICAgICAgIHNlbGYuX2FwcGVu
ZF9lbnZpcm9ubWVudF92YXJpYWJsZV9wYXRoKGVudmlyb25tZW50LCAnRFlMRF9MSUJSQVJZX1BB
VEgnLCBidWlsZF9yb290X3BhdGgpCiAgICAgICAgIHNlbGYuX2FwcGVuZF9lbnZpcm9ubWVudF92
YXJpYWJsZV9wYXRoKGVudmlyb25tZW50LCAnX19YUENfRFlMRF9MSUJSQVJZX1BBVEgnLCBidWls
ZF9yb290X3BhdGgpCiAgICAgICAgIHNlbGYuX2FwcGVuZF9lbnZpcm9ubWVudF92YXJpYWJsZV9w
YXRoKGVudmlyb25tZW50LCAnRFlMRF9GUkFNRVdPUktfUEFUSCcsIGJ1aWxkX3Jvb3RfcGF0aCkK
QEAgLTM2OSw3ICszNjgsNyBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAgICAgICAgZW52aXJv
bm1lbnQgPSBzZWxmLl9zZXR1cF9lbnZpcm9uX2Zvcl90ZXN0KCkKICAgICAgICAgc2VsZi5fY3Jh
c2hlZF9wcm9jZXNzX25hbWUgPSBOb25lCiAgICAgICAgIHNlbGYuX2NyYXNoZWRfcGlkID0gTm9u
ZQotICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJvY2VzcyA9IHNlbGYuX3BvcnQuX3NlcnZlcl9wcm9j
ZXNzX2NvbnN0cnVjdG9yKHNlbGYuX3BvcnQsIHNlbGYuX3NlcnZlcl9uYW1lLCBzZWxmLmNtZF9s
aW5lKHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKSwgZW52aXJvbm1lbnQpCisgICAgICAgIHNl
bGYuX3NlcnZlcl9wcm9jZXNzID0gc2VsZi5fcG9ydC5fdGVzdF9ydW5uZXJfcHJvY2Vzc19jb25z
dHJ1Y3RvcihzZWxmLl9wb3J0LCBzZWxmLl9zZXJ2ZXJfbmFtZSwgc2VsZi5jbWRfbGluZShwaXhl
bF90ZXN0cywgcGVyX3Rlc3RfYXJncyksIGVudmlyb25tZW50LCB3b3JrZXJfbnVtYmVyPXNlbGYu
X3dvcmtlcl9udW1iZXIpCiAgICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzLnN0YXJ0KCkKIAog
ICAgIGRlZiBfcnVuX3Bvc3Rfc3RhcnRfdGFza3Moc2VsZik6CkBAIC02MTEsMjcgKzYxMCw2IEBA
IGNsYXNzIERyaXZlcihvYmplY3QpOgogICAgICAgICByZXR1cm4gVHJ1ZQogCiAKLSMgRklYTUU6
IHRoaXMgc2hvdWxkIGJlIGFic3RyYWN0ZWQgb3V0IHZpYSB0aGUgUG9ydCBzdWJjbGFzcyBzb21l
aG93LgotY2xhc3MgSU9TU2ltdWxhdG9yRHJpdmVyKERyaXZlcik6Ci0gICAgZGVmIGNtZF9saW5l
KHNlbGYsIHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKToKLSAgICAgICAgY21kID0gc3VwZXIo
SU9TU2ltdWxhdG9yRHJpdmVyLCBzZWxmKS5jbWRfbGluZShwaXhlbF90ZXN0cywgcGVyX3Rlc3Rf
YXJncykKLSAgICAgICAgcmVsYXlfdG9vbCA9IHNlbGYuX3BvcnQucmVsYXlfcGF0aAotICAgICAg
ICBkdW1wX3Rvb2wgPSBjbWRbMF0KLSAgICAgICAgZHVtcF90b29sX2FyZ3MgPSBjbWRbMTpdCi0g
ICAgICAgIHByb2R1Y3RfZGlyID0gc2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgpCi0gICAgICAgIHJl
bGF5X2FyZ3MgPSBbCi0gICAgICAgICAgICAnLWRldmVsb3BlckRpcicsIHNlbGYuX3BvcnQuZGV2
ZWxvcGVyX2RpciwKLSAgICAgICAgICAgICctdWRpZCcsIHNlbGYuX3BvcnQuZGV2aWNlX2lkX2Zv
cl93b3JrZXJfbnVtYmVyKHNlbGYuX3dvcmtlcl9udW1iZXIpLAotICAgICAgICAgICAgJy1wcm9k
dWN0RGlyJywgcHJvZHVjdF9kaXIsCi0gICAgICAgICAgICAnLWFwcCcsIGR1bXBfdG9vbCwKLSAg
ICAgICAgXQotICAgICAgICByZXR1cm4gW3JlbGF5X3Rvb2xdICsgcmVsYXlfYXJncyArIFsnLS0n
XSArIGR1bXBfdG9vbF9hcmdzCi0KLSAgICBkZWYgX3NldHVwX2Vudmlyb25fZm9yX2RyaXZlcihz
ZWxmLCBlbnZpcm9ubWVudCk6Ci0gICAgICAgIGVudmlyb25tZW50WydERVZFTE9QRVJfRElSJ10g
PSBzZWxmLl9wb3J0LmRldmVsb3Blcl9kaXIKLSAgICAgICAgcmV0dXJuIHN1cGVyKElPU1NpbXVs
YXRvckRyaXZlciwgc2VsZikuX3NldHVwX2Vudmlyb25fZm9yX2RyaXZlcihlbnZpcm9ubWVudCkK
LQotCiBjbGFzcyBDb250ZW50QmxvY2sob2JqZWN0KToKICAgICBkZWYgX19pbml0X18oc2VsZik6
CiAgICAgICAgIHNlbGYuY29udGVudF90eXBlID0gTm9uZQpJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2RyaXZlcl91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyMTEzNTMpCisr
KyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyX3VuaXR0ZXN0LnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0yNjQsNyArMjY0LDcgQEAgY2xhc3MgRHJpdmVyVGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9zdG9wX2NsZWFuc191cF9wcm9wZXJseShzZWxmKToKICAg
ICAgICAgcG9ydCA9IFRlc3RXZWJLaXRQb3J0KCkKLSAgICAgICAgcG9ydC5fc2VydmVyX3Byb2Nl
c3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJvY2VzcworICAgICAgICBwb3J0Ll90ZXN0X3J1
bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gTW9ja1NlcnZlclByb2Nlc3MKICAgICAgICAgZHJp
dmVyID0gRHJpdmVyKHBvcnQsIDAsIHBpeGVsX3Rlc3RzPVRydWUpCiAgICAgICAgIGRyaXZlci5z
dGFydChUcnVlLCBbXSkKICAgICAgICAgbGFzdF90bXBkaXIgPSBwb3J0Ll9maWxlc3lzdGVtLmxh
c3RfdG1wZGlyCkBAIC0yNzQsNyArMjc0LDcgQEAgY2xhc3MgRHJpdmVyVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF90d29fc3RhcnRzX2NsZWFuc191cF9wcm9wZXJseShz
ZWxmKToKICAgICAgICAgcG9ydCA9IFRlc3RXZWJLaXRQb3J0KCkKLSAgICAgICAgcG9ydC5fc2Vy
dmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJvY2VzcworICAgICAgICBwb3J0
Ll90ZXN0X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gTW9ja1NlcnZlclByb2Nlc3MKICAg
ICAgICAgZHJpdmVyID0gRHJpdmVyKHBvcnQsIDAsIHBpeGVsX3Rlc3RzPVRydWUpCiAgICAgICAg
IGRyaXZlci5zdGFydChUcnVlLCBbXSkKICAgICAgICAgbGFzdF90bXBkaXIgPSBwb3J0Ll9maWxl
c3lzdGVtLmxhc3RfdG1wZGlyCkBAIC0yODMsNyArMjgzLDcgQEAgY2xhc3MgRHJpdmVyVGVzdCh1
bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9zdGFydF9hY3R1YWxseV9zdGFydHMo
c2VsZik6CiAgICAgICAgIHBvcnQgPSBUZXN0V2ViS2l0UG9ydCgpCi0gICAgICAgIHBvcnQuX3Nl
cnZlcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gTW9ja1NlcnZlclByb2Nlc3MKKyAgICAgICAgcG9y
dC5fdGVzdF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IE1vY2tTZXJ2ZXJQcm9jZXNzCiAg
ICAgICAgIGRyaXZlciA9IERyaXZlcihwb3J0LCAwLCBwaXhlbF90ZXN0cz1UcnVlKQogICAgICAg
ICBkcml2ZXIuc3RhcnQoVHJ1ZSwgW10pCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkcml2ZXIu
X3NlcnZlcl9wcm9jZXNzLnN0YXJ0ZWQpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvaW9zLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Mu
cHkJKHJldmlzaW9uIDIxMTM1MykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Mu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAgZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMubW9kZWxzLnRlc3RfYwogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBjb25maWcgYXMg
cG9ydF9jb25maWcKIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgZHJpdmVyLCBpbWFnZV9kaWZm
CiBmcm9tIHdlYmtpdHB5LnBvcnQuZGFyd2luIGltcG9ydCBEYXJ3aW5Qb3J0Citmcm9tIHdlYmtp
dHB5LnBvcnQuc2ltdWxhdG9yX3Byb2Nlc3MgaW1wb3J0IFNpbXVsYXRvclByb2Nlc3MKIGZyb20g
d2Via2l0cHkueGNvZGUuc2ltdWxhdG9yIGltcG9ydCBTaW11bGF0b3IsIFJ1bnRpbWUsIERldmlj
ZVR5cGUKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5jcmFzaGxvZ3MgaW1wb3J0IENyYXNo
TG9ncwogCkBAIC03OCw3ICs3OSw2IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9y
dCk6CiAgICAgU0RLID0gJ2lwaG9uZXNpbXVsYXRvcicKIAogICAgIFNJTVVMQVRPUl9CVU5ETEVf
SUQgPSAnY29tLmFwcGxlLmlwaG9uZXNpbXVsYXRvcicKLSAgICByZWxheV9uYW1lID0gJ0xheW91
dFRlc3RSZWxheScKICAgICBTSU1VTEFUT1JfRElSRUNUT1JZID0gIi90bXAvV2ViS2l0VGVzdGlu
Z1NpbXVsYXRvcnMvIgogICAgIExTUkVHSVNURVJfUEFUSCA9ICIvU3lzdGVtL0xpYnJhcnkvRnJh
bWV3b3Jrcy9Db3JlU2VydmljZXMuZnJhbWV3b3JrL0ZyYW1ld29ya3MvTGF1bmNoU2VydmljZXMu
ZnJhbWV3b3JrL1ZlcnNpb25zL0N1cnJlbnQvU3VwcG9ydC9sc3JlZ2lzdGVyIgogICAgIFBST0NF
U1NfQ09VTlRfRVNUSU1BVEVfUEVSX1NJTVVMQVRPUl9JTlNUQU5DRSA9IDEwMApAQCAtOTcsNiAr
OTcsNyBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogCiAgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpOgogICAgICAgICBEYXJ3aW5Q
b3J0Ll9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpCisgICAgICAgIHNl
bGYuX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBTaW11bGF0b3JQcm9jZXNzCiAK
ICAgICAgICAgb3B0aW9uYWxfZGV2aWNlX2NsYXNzID0gc2VsZi5nZXRfb3B0aW9uKCdkZXZpY2Vf
Y2xhc3MnKQogICAgICAgICBzZWxmLl9wcmludGluZ19jbWRfbGluZSA9IEZhbHNlCkBAIC0xNDgs
MTYgKzE0OSw2IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAgICAgICAg
ICAgICBkZXZpY2VfdHlwZSA9IERldmljZVR5cGUuZnJvbV9uYW1lKGRldmljZV9uYW1lKQogICAg
ICAgICByZXR1cm4gZGV2aWNlX3R5cGUKIAotICAgIEBwcm9wZXJ0eQotICAgIEBtZW1vaXplZAot
ICAgIGRlZiByZWxheV9wYXRoKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9yb290X3dhc19zZXQ6
Ci0gICAgICAgICAgICBwYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5hYnNwYXRoKHNlbGYuZ2V0X29w
dGlvbigncm9vdCcpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbWFjX2NvbmZpZyA9IHBv
cnRfY29uZmlnLkNvbmZpZyhzZWxmLl9leGVjdXRpdmUsIHNlbGYuX2ZpbGVzeXN0ZW0sICdtYWMn
KQotICAgICAgICAgICAgcGF0aCA9IG1hY19jb25maWcuYnVpbGRfZGlyZWN0b3J5KHNlbGYuZ2V0
X29wdGlvbignY29uZmlndXJhdGlvbicpKQotICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3Rl
bS5qb2luKHBhdGgsIHNlbGYucmVsYXlfbmFtZSkKLQogICAgIEBtZW1vaXplZAogICAgIGRlZiBj
aGlsZF9wcm9jZXNzZXMoc2VsZik6CiAgICAgICAgIHJldHVybiBpbnQoc2VsZi5nZXRfb3B0aW9u
KCdjaGlsZF9wcm9jZXNzZXMnKSkKQEAgLTE4MiwxOSArMTczLDYgQEAgY2xhc3MgSU9TU2ltdWxh
dG9yUG9ydChEYXJ3aW5Qb3J0KToKIAogICAgICAgICByZXR1cm4gbWluKG1heGltdW1fc2ltdWxh
dG9yX2NvdW50X29uX3RoaXNfc3lzdGVtLCBiZXN0X2NoaWxkX3Byb2Nlc3NfY291bnRfZm9yX2Nw
dSkKIAotICAgIGRlZiBfY2hlY2tfcmVsYXkoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9m
aWxlc3lzdGVtLmV4aXN0cyhzZWxmLnJlbGF5X3BhdGgpOgotICAgICAgICAgICAgX2xvZy5lcnJv
cigiJXMgd2FzIG5vdCBmb3VuZCBhdCAlcyIgJSAoc2VsZi5yZWxheV9uYW1lLCBzZWxmLnJlbGF5
X3BhdGgpKQotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIHJldHVybiBUcnVlCi0K
LSAgICBkZWYgX2NoZWNrX3BvcnRfYnVpbGQoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9y
b290X3dhc19zZXQgYW5kIHNlbGYuZ2V0X29wdGlvbignYnVpbGQnKSBhbmQgbm90IHNlbGYuX2J1
aWxkX3JlbGF5KCk6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgaWYgbm90IHNl
bGYuX2NoZWNrX3JlbGF5KCk6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0
dXJuIFRydWUKLQogICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91
dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0aW1lX2ZuPXRpbWUudGltZSwgc2xlZXBfZm49dGltZS5z
bGVlcCwgd2FpdF9mb3JfbG9nPVRydWUpOgogICAgICAgICB0aW1lX2ZuID0gdGltZV9mbiBvciB0
aW1lLnRpbWUKICAgICAgICAgc2xlZXBfZm4gPSBzbGVlcF9mbiBvciB0aW1lLnNsZWVwCkBAIC0y
MTUsNyArMTkzLDcgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICAg
ICAgICAgIHJldHVybiBzZWxmLl9nZXRfY3Jhc2hfbG9nKGNyYXNoZWRfc3VicHJvY2Vzc19uYW1l
X2FuZF9waWRbMF0sIGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9waWRbMV0sIHN0ZG91dCwK
ICAgICAgICAgICAgICAgICAnXG4nLmpvaW4oc3RkZXJyX2xpbmVzKSwgbmV3ZXJfdGhhbiwgdGlt
ZV9mbiwgc2xlZXBfZm4sIHdhaXRfZm9yX2xvZykKIAotICAgICAgICAjIExheW91dFRlc3RSZWxh
eSBjcmFzaGVkCisgICAgICAgICMgQXBwIGNyYXNoZWQKICAgICAgICAgX2xvZy5kZWJ1ZygnbG9v
a2luZyBmb3IgY3Jhc2ggbG9nIGZvciAlczolcycgJSAobmFtZSwgc3RyKHBpZCkpKQogICAgICAg
ICBjcmFzaF9sb2cgPSAnJwogICAgICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hMb2dzKHNlbGYuaG9z
dCkKQEAgLTIzMywyNSArMjExLDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0
KToKICAgICAgICAgICAgIHJldHVybiBzdGRlcnIsIE5vbmUKICAgICAgICAgcmV0dXJuIHN0ZGVy
ciwgY3Jhc2hfbG9nCiAKLSAgICBkZWYgX2J1aWxkX3JlbGF5KHNlbGYpOgotICAgICAgICBlbnZp
cm9ubWVudCA9IHNlbGYuaG9zdC5jb3B5X2N1cnJlbnRfZW52aXJvbm1lbnQoKQotICAgICAgICBl
bnZpcm9ubWVudC5kaXNhYmxlX2djY19zbWFydHF1b3RlcygpCi0gICAgICAgIGVudiA9IGVudmly
b25tZW50LnRvX2RpY3Rpb25hcnkoKQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgRklY
TUU6IFdlIHNob3VsZCBiZSBwYXNzaW5nIF9hcmd1bWVudHNfZm9yX2NvbmZpZ3VyYXRpb24oKSwg
d2hpY2ggcmVzcGVjdHMgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgcG9ydCwKLSAgICAgICAgICAg
ICMgaW5zdGVhZCBvZiBoYXJkY29kaW5nIC0taW9zLXNpbXVsYXRvci4KLSAgICAgICAgICAgIHNl
bGYuX3J1bl9zY3JpcHQoImJ1aWxkLWxheW91dHRlc3RyZWxheSIsIGFyZ3M9WyItLWlvcy1zaW11
bGF0b3IiXSwgZW52PWVudikKLSAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yLCBlOgotICAgICAg
ICAgICAgX2xvZy5lcnJvcihlLm1lc3NhZ2Vfd2l0aF9vdXRwdXQob3V0cHV0X2xpbWl0PU5vbmUp
KQotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBk
ZWYgX2J1aWxkX2RyaXZlcihzZWxmKToKLSAgICAgICAgYnVpbHRfdG9vbCA9IHN1cGVyKElPU1Np
bXVsYXRvclBvcnQsIHNlbGYpLl9idWlsZF9kcml2ZXIoKQotICAgICAgICBidWlsdF9yZWxheSA9
IHNlbGYuX2J1aWxkX3JlbGF5KCkKLSAgICAgICAgcmV0dXJuIGJ1aWx0X3Rvb2wgYW5kIGJ1aWx0
X3JlbGF5Ci0KICAgICBkZWYgX2J1aWxkX2RyaXZlcl9mbGFncyhzZWxmKToKICAgICAgICAgYXJj
aHMgPSBbJ0FSQ0hTPWkzODYnXSBpZiBzZWxmLmFyY2hpdGVjdHVyZSgpID09ICd4ODYnIGVsc2Ug
W10KICAgICAgICAgc2RrID0gWyctLXNkaycsICdpcGhvbmVzaW11bGF0b3InXQpAQCAtMjY0LDkg
KzIyMyw2IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAgICAgICAgICAg
ICAgICAgY29uZmlndXJhdGlvbnMuYXBwZW5kKFRlc3RDb25maWd1cmF0aW9uKHZlcnNpb249c2Vs
Zi5fdmVyc2lvbiwgYXJjaGl0ZWN0dXJlPWFyY2hpdGVjdHVyZSwgYnVpbGRfdHlwZT1idWlsZF90
eXBlKSkKICAgICAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25zCiAKLSAgICBkZWYgX2RyaXZlcl9j
bGFzcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIGRyaXZlci5JT1NTaW11bGF0b3JEcml2ZXIKLQog
ICAgIGRlZiBkZWZhdWx0X2Jhc2VsaW5lX3NlYXJjaF9wYXRoKHNlbGYpOgogICAgICAgICBpZiBz
ZWxmLmdldF9vcHRpb24oJ3dlYmtpdF90ZXN0X3J1bm5lcicpOgogICAgICAgICAgICAgZmFsbGJh
Y2tfbmFtZXMgPSBbc2VsZi5fd2syX3BvcnRfbmFtZSgpXSArIFtzZWxmLnBvcnRfbmFtZV0gKyBb
J3drMiddCkBAIC0yODAsOSArMjM2LDkgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Q
b3J0KToKIAogICAgIGRlZiBfY3JlYXRlX3NpbXVsYXRvcnMoc2VsZik6CiAgICAgICAgIGlmIChz
ZWxmLmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKCkgPCBzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKToK
LSAgICAgICAgICAgICAgICBfbG9nLndhcm4oIllvdSBoYXZlIHNwZWNpZmllZCB2ZXJ5IGhpZ2gg
dmFsdWUoezB9KSBmb3IgLS1jaGlsZC1wcm9jZXNzZXMiLmZvcm1hdChzZWxmLmNoaWxkX3Byb2Nl
c3NlcygpKSkKLSAgICAgICAgICAgICAgICBfbG9nLndhcm4oIm1heGltdW0gY2hpbGQtcHJvY2Vz
c2VzIHdoaWNoIGNhbiBiZSBzdXBwb3J0ZWQgb24gdGhpcyBzeXN0ZW0gYXJlOiB7MH0iLmZvcm1h
dChzZWxmLmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKCkpKQotICAgICAgICAgICAgICAgIF9sb2cu
d2FybigiVGhpcyBpcyB2ZXJ5IGxpa2VseSB0byBmYWlsLiIpCisgICAgICAgICAgICBfbG9nLndh
cm4oJ1lvdSBoYXZlIHNwZWNpZmllZCB2ZXJ5IGhpZ2ggdmFsdWUoezB9KSBmb3IgLS1jaGlsZC1w
cm9jZXNzZXMnLmZvcm1hdChzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKSkKKyAgICAgICAgICAgIF9s
b2cud2FybignbWF4aW11bSBjaGlsZC1wcm9jZXNzZXMgd2hpY2ggY2FuIGJlIHN1cHBvcnRlZCBv
biB0aGlzIHN5c3RlbSBhcmU6IHswfScuZm9ybWF0KHNlbGYuZGVmYXVsdF9jaGlsZF9wcm9jZXNz
ZXMoKSkpCisgICAgICAgICAgICBfbG9nLndhcm4oJ1RoaXMgaXMgdmVyeSBsaWtlbHkgdG8gZmFp
bC4nKQogCiAgICAgICAgIGlmIHNlbGYuX3VzaW5nX2RlZGljYXRlZF9zaW11bGF0b3JzKCk6CiAg
ICAgICAgICAgICBzZWxmLl9jcmVhdGVTaW11bGF0b3JBcHBzKCkKQEAgLTQxMyw3ICszNjksNyBA
QCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgIGRlZiBfdGVzdGluZ19k
ZXZpY2Uoc2VsZiwgbnVtYmVyKToKICAgICAgICAgcmV0dXJuIFNpbXVsYXRvci5kZXZpY2VfbnVt
YmVyKG51bWJlcikKIAotICAgICMgVGhpcyBpcyBvbmx5IGV4cG9zZWQgc28gdGhhdCBJT1NTaW11
bGF0b3JEcml2ZXIgY2FuIHVzZSBpdC4KKyAgICAjIEZJWE1FOiBUaGlzIGlzIG9ubHkgZXhwb3Nl
ZCBzbyB0aGF0IFNpbXVsYXRvclByb2Nlc3MgY2FuIHVzZSBpdC4KICAgICBkZWYgZGV2aWNlX2lk
X2Zvcl93b3JrZXJfbnVtYmVyKHNlbGYsIG51bWJlcik6CiAgICAgICAgIGlmIHNlbGYuX3ByaW50
aW5nX2NtZF9saW5lOgogICAgICAgICAgICAgcmV0dXJuICc8ZHVtbXkgaWQ+JwpJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyMTEz
NTMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0LnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIGNsYXNzIGlvc1Rlc3QoZGFyd2luX3Rlc3RjYXNl
LkRhcndpblRlc3QKICAgICAgICAgcG9ydC5fcnVuX3NjcmlwdCA9IHJ1bl9zY3JpcHQKICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LmFyY2hpdGVjdHVyZSgpLCAneDg2JykKICAgICAgICAg
cG9ydC5fYnVpbGRfZHJpdmVyKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFyZ3Ms
IFsnLS1pb3Mtc2ltdWxhdG9yJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hcmdz
LCBbJ0FSQ0hTPWkzODYnLCAnLS1zZGsnLCAnaXBob25lc2ltdWxhdG9yJ10pCiAKICAgICBkZWYg
dGVzdF82NGJpdChzZWxmKToKICAgICAgICAgIyBBcHBsZSBNYWMgcG9ydCBpcyA2NC1iaXQgYnkg
ZGVmYXVsdApAQCAtODIsNyArODIsNyBAQCBjbGFzcyBpb3NUZXN0KGRhcndpbl90ZXN0Y2FzZS5E
YXJ3aW5UZXN0CiAKICAgICAgICAgcG9ydC5fcnVuX3NjcmlwdCA9IHJ1bl9zY3JpcHQKICAgICAg
ICAgcG9ydC5fYnVpbGRfZHJpdmVyKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFy
Z3MsIFsnLS1pb3Mtc2ltdWxhdG9yJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5h
cmdzLCBbJy0tc2RrJywgJ2lwaG9uZXNpbXVsYXRvciddKQogCiAgICAgZGVmIHRlc3Rfc2RrX25h
bWUoc2VsZik6CiAgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3MucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzLnB5CShyZXZpc2lvbiAyMTEz
NTMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3MucHkJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSw0IEBACisjIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTU5LDcgKzYwLDcgQEAg
Y2xhc3MgU2VydmVyUHJvY2VzcyhvYmplY3QpOgogICAgIGluZGVmaW5pdGVseS4gVGhlIGNsYXNz
IGFsc28gaGFuZGxlcyB0cmFuc3BhcmVudGx5IHJlc3RhcnRpbmcgcHJvY2Vzc2VzCiAgICAgYXMg
bmVjZXNzYXJ5IHRvIGtlZXAgaXNzdWluZyBjb21tYW5kcy4iIiIKIAotICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBwb3J0X29iaiwgbmFtZSwgY21kLCBlbnY9Tm9uZSwgdW5pdmVyc2FsX25ld2xpbmVz
PUZhbHNlLCB0cmVhdF9ub19kYXRhX2FzX2NyYXNoPUZhbHNlKToKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgcG9ydF9vYmosIG5hbWUsIGNtZCwgZW52PU5vbmUsIHVuaXZlcnNhbF9uZXdsaW5lcz1G
YWxzZSwgdHJlYXRfbm9fZGF0YV9hc19jcmFzaD1GYWxzZSwgd29ya2VyX251bWJlcj1Ob25lKToK
ICAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnRfb2JqCiAgICAgICAgIHNlbGYuX25hbWUgPSBuYW1l
ICAjIFNob3VsZCBiZSB0aGUgY29tbWFuZCBuYW1lIChlLmcuIER1bXBSZW5kZXJUcmVlLCBJbWFn
ZURpZmYpCiAgICAgICAgIHNlbGYuX2NtZCA9IGNtZApAQCAtMTAzLDYgKzEwNCwxMSBAQCBjbGFz
cyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6CiAgICAgZGVmIHByb2Nlc3NfbmFtZShzZWxmKToKICAg
ICAgICAgcmV0dXJuIHNlbGYuX25hbWUKIAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX3Nl
dF9maWxlX25vbmJsb2NraW5nKGZpbGUpOgorICAgICAgICBmbGFncyA9IGZjbnRsLmZjbnRsKGZp
bGUuZmlsZW5vKCksIGZjbnRsLkZfR0VURkwpCisgICAgICAgIGZjbnRsLmZjbnRsKGZpbGUuZmls
ZW5vKCksIGZjbnRsLkZfU0VURkwsIGZsYWdzIHwgb3MuT19OT05CTE9DSykKKwogICAgIGRlZiBf
c3RhcnQoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX3Byb2M6CiAgICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCIlcyBhbHJlYWR5IHJ1bm5pbmciICUgc2VsZi5fbmFtZSkKQEAgLTExNywxMyAr
MTIzLDkgQEAgY2xhc3MgU2VydmVyUHJvY2VzcyhvYmplY3QpOgogICAgICAgICAgICAgdW5pdmVy
c2FsX25ld2xpbmVzPXNlbGYuX3VuaXZlcnNhbF9uZXdsaW5lcykKICAgICAgICAgc2VsZi5fcGlk
ID0gc2VsZi5fcHJvYy5waWQKICAgICAgICAgc2VsZi5fcG9ydC5maW5kX3N5c3RlbV9waWQoc2Vs
Zi5uYW1lKCksIHNlbGYuX3BpZCkKLSAgICAgICAgZmQgPSBzZWxmLl9wcm9jLnN0ZG91dC5maWxl
bm8oKQogICAgICAgICBpZiBub3Qgc2VsZi5fdXNlX3dpbjMyX2FwaXM6Ci0gICAgICAgICAgICBm
bCA9IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZMKQotICAgICAgICAgICAgZmNudGwuZmNu
dGwoZmQsIGZjbnRsLkZfU0VURkwsIGZsIHwgb3MuT19OT05CTE9DSykKLSAgICAgICAgICAgIGZk
ID0gc2VsZi5fcHJvYy5zdGRlcnIuZmlsZW5vKCkKLSAgICAgICAgICAgIGZsID0gZmNudGwuZmNu
dGwoZmQsIGZjbnRsLkZfR0VURkwpCi0gICAgICAgICAgICBmY250bC5mY250bChmZCwgZmNudGwu
Rl9TRVRGTCwgZmwgfCBvcy5PX05PTkJMT0NLKQorICAgICAgICAgICAgc2VsZi5fc2V0X2ZpbGVf
bm9uYmxvY2tpbmcoc2VsZi5fcHJvYy5zdGRvdXQpCisgICAgICAgICAgICBzZWxmLl9zZXRfZmls
ZV9ub25ibG9ja2luZyhzZWxmLl9wcm9jLnN0ZGVycikKIAogICAgIGRlZiBfaGFuZGxlX3Bvc3Np
YmxlX2ludGVycnVwdChzZWxmKToKICAgICAgICAgIiIiVGhpcyByb3V0aW5lIGNoZWNrcyB0byBz
ZWUgaWYgdGhlIHByb2Nlc3MgY3Jhc2hlZCBvciBleGl0ZWQKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzc19tb2NrLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzc19tb2NrLnB5CShyZXZpc2lvbiAy
MTEzNTMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3NfbW9j
ay5weQkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiAKIGNsYXNzIE1vY2tTZXJ2
ZXJQcm9jZXNzKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqPU5vbmUs
IG5hbWU9Tm9uZSwgY21kPU5vbmUsIGVudj1Ob25lLCB1bml2ZXJzYWxfbmV3bGluZXM9RmFsc2Us
IGxpbmVzPU5vbmUsIGNyYXNoZWQ9RmFsc2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0
X29iaj1Ob25lLCBuYW1lPU5vbmUsIGNtZD1Ob25lLCBlbnY9Tm9uZSwgdW5pdmVyc2FsX25ld2xp
bmVzPUZhbHNlLCBsaW5lcz1Ob25lLCBjcmFzaGVkPUZhbHNlLCB3b3JrZXJfbnVtYmVyPU5vbmUp
OgogICAgICAgICBzZWxmLnRpbWVkX291dCA9IEZhbHNlCiAgICAgICAgIHNlbGYubGluZXMgPSBs
aW5lcyBvciBbXQogICAgICAgICBzZWxmLmNyYXNoZWQgPSBjcmFzaGVkCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvc2ltdWxhdG9yX3Byb2Nlc3MucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNzLnB5CShub25leGlz
dGVudCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zaW11bGF0b3JfcHJvY2Vzcy5w
eQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBlcnJubworaW1wb3J0IG9zCitpbXBvcnQgc2ln
bmFsCitpbXBvcnQgdGltZQorCitmcm9tIHdlYmtpdHB5LnBvcnQuc2VydmVyX3Byb2Nlc3MgaW1w
b3J0IFNlcnZlclByb2Nlc3MKK2Zyb20gd2Via2l0cHkueGNvZGUuc2ltdWxhdG9yIGltcG9ydCBT
aW11bGF0b3IKKworCitjbGFzcyBTaW11bGF0b3JQcm9jZXNzKFNlcnZlclByb2Nlc3MpOgorCisg
ICAgY2xhc3MgUG9wZW4ob2JqZWN0KToKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcGlk
LCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIpOgorICAgICAgICAgICAgc2VsZi5zdGRpbiA9IHN0ZGlu
CisgICAgICAgICAgICBzZWxmLnN0ZG91dCA9IHN0ZG91dAorICAgICAgICAgICAgc2VsZi5zdGRl
cnIgPSBzdGRlcnIKKyAgICAgICAgICAgIHNlbGYucGlkID0gcGlkCisgICAgICAgICAgICBzZWxm
LnJldHVybmNvZGUgPSBOb25lCisKKyAgICAgICAgZGVmIHBvbGwoc2VsZik6CisgICAgICAgICAg
ICBpZiBzZWxmLnJldHVybmNvZGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYucmV0dXJu
Y29kZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLmtpbGwoc2VsZi5waWQs
IDApCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciwgZXJyOgorICAgICAgICAgICAgICAgIGFz
c2VydCBlcnIuZXJybm8gPT0gZXJybm8uRVNSQ0gKKyAgICAgICAgICAgICAgICBzZWxmLnJldHVy
bmNvZGUgPSAxCisgICAgICAgICAgICByZXR1cm4gc2VsZi5yZXR1cm5jb2RlCisKKyAgICAgICAg
ZGVmIHdhaXQoc2VsZik6CisgICAgICAgICAgICB3aGlsZSBub3Qgc2VsZi5wb2xsKCk6CisgICAg
ICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKSAgIyBJbiBzZWNvbmRzCisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5yZXR1cm5jb2RlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmos
IG5hbWUsIGNtZCwgZW52PU5vbmUsIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgdHJlYXRfbm9f
ZGF0YV9hc19jcmFzaD1GYWxzZSwgd29ya2VyX251bWJlcj1Ob25lKToKKyAgICAgICAgc2VsZi5f
YnVuZGxlX2lkID0gcG9ydF9vYmouYXBwX2lkZW50aWZpZXJfZnJvbV9idW5kbGUoY21kWzBdKQor
ICAgICAgICBzZWxmLl9kZXZpY2UgPSBTaW11bGF0b3IocG9ydF9vYmouaG9zdCkuZmluZF9kZXZp
Y2VfYnlfdWRpZChwb3J0X29iai5kZXZpY2VfaWRfZm9yX3dvcmtlcl9udW1iZXIod29ya2VyX251
bWJlcikpCisgICAgICAgIGlmIG5vdCBzZWxmLl9kZXZpY2UuaW5zdGFsbF9hcHAoY21kWzBdKToK
KyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRmFpbGVkIHRvIGluc3RhbGwgYXBwIHt9
IG9uIHNpbXVsYXRvciBkZXZpY2Uge30nLmZvcm1hdChjbWRbMF0sIHNlbGYuX2RldmljZS51ZGlk
KSkKKyAgICAgICAgZW52WydJUENfSURFTlRJRklFUiddID0gc2VsZi5fYnVuZGxlX2lkICsgJy0n
ICsgc2VsZi5fZGV2aWNlLnVkaWQKKworICAgICAgICAjIFRoaXMgbG9jYXRpb24gbWF0Y2hlcyB0
aGUgbG9jYXRpb24gdXNlZCBieSBXZWJLaXRUZXN0UnVubmVyIGFuZCBEdW1wUmVuZGVyVHJlZQor
ICAgICAgICAjIGZvciB0aGUgb3RoZXIgc2lkZSBvZiB0aGVzZSBmaWZvcy4KKyAgICAgICAgZmls
ZV9sb2NhdGlvbiA9ICcvdG1wLycgKyBlbnZbJ0lQQ19JREVOVElGSUVSJ10KKyAgICAgICAgc2Vs
Zi5faW5fcGF0aCA9IGZpbGVfbG9jYXRpb24gKyAnX0lOJworICAgICAgICBzZWxmLl9vdXRfcGF0
aCA9IGZpbGVfbG9jYXRpb24gKyAnX09VVCcKKyAgICAgICAgc2VsZi5fZXJyb3JfcGF0aCA9IGZp
bGVfbG9jYXRpb24gKyAnX0VSUk9SJworCisgICAgICAgIHN1cGVyKFNpbXVsYXRvclByb2Nlc3Ms
IHNlbGYpLl9faW5pdF9fKHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVudiwgdW5pdmVyc2FsX25ld2xp
bmVzLCB0cmVhdF9ub19kYXRhX2FzX2NyYXNoKQorCisgICAgZGVmIF9yZXNldChzZWxmKToKKyAg
ICAgICAgc3VwZXIoU2ltdWxhdG9yUHJvY2Vzcywgc2VsZikuX3Jlc2V0KCkKKworICAgICAgICAj
IFVubGlua3MgYXJlIG5lZWRlZCBvbiByZXNldCBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgUHl0aG9u
IGNvZGUgdW5leHBlY3RlZGx5CisgICAgICAgICMgZmFpbHMgYmV0d2VlbiBfc3RhcnQoKSBhbmQg
a2lsbCgpLiAgVGhpcyBjYW4gYmUgY2F1c2VkIGJ5IGEgU0lHS0lMTCBvciBhIGNyYXNoLgorICAg
ICAgICAjIFRoaXMgZW5zdXJlcyB0aGF0IG9zLm1rZmlmbygpIHdpbGwgbm90IGJlIG9ic3RydWN0
ZWQgYnkgcHJldmlvdXMgZmlmb3MuCisgICAgICAgICMgT3RoZXIgZmlsZXMgd2lsbCBzdGlsbCBj
YXVzZSBvcy5ta2ZpZm8oKSB0byBmYWlsLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy51
bmxpbmsoc2VsZi5faW5fcGF0aCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcwor
ICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5fb3V0X3BhdGgpCisgICAg
ICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
b3MudW5saW5rKHNlbGYuX2Vycm9yX3BhdGgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAg
IHBhc3MKKworICAgIGRlZiBfc3RhcnQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3Byb2M6Cisg
ICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd7fSBhbHJlYWR5IHJ1bm5pbmcnLmZvcm1hdChz
ZWxmLl9uYW1lKSkKKyAgICAgICAgc2VsZi5fcmVzZXQoKQorCisgICAgICAgIEZJRk9fUEVSTUlT
U0lPTl9GTEFHUyA9IDA2MDAgICMgT25seSBvd25lciBjYW4gcmVhZCBhbmQgd3JpdGUKKyAgICAg
ICAgb3MubWtmaWZvKHNlbGYuX2luX3BhdGgsIEZJRk9fUEVSTUlTU0lPTl9GTEFHUykKKyAgICAg
ICAgb3MubWtmaWZvKHNlbGYuX291dF9wYXRoLCBGSUZPX1BFUk1JU1NJT05fRkxBR1MpCisgICAg
ICAgIG9zLm1rZmlmbyhzZWxmLl9lcnJvcl9wYXRoLCBGSUZPX1BFUk1JU1NJT05fRkxBR1MpCisK
KyAgICAgICAgc3Rkb3V0ID0gb3MuZmRvcGVuKG9zLm9wZW4oc2VsZi5fb3V0X3BhdGgsIG9zLk9f
UkRPTkxZIHwgb3MuT19OT05CTE9DSyksICdyYicpCisgICAgICAgIHN0ZGVyciA9IG9zLmZkb3Bl
bihvcy5vcGVuKHNlbGYuX2Vycm9yX3BhdGgsIG9zLk9fUkRPTkxZIHwgb3MuT19OT05CTE9DSyks
ICdyYicpCisKKyAgICAgICAgc2VsZi5fcGlkID0gc2VsZi5fZGV2aWNlLmxhdW5jaF9hcHAoc2Vs
Zi5fYnVuZGxlX2lkLCBzZWxmLl9jbWRbMTpdLCBlbnY9c2VsZi5fZW52KQorCisgICAgICAgIGRl
ZiBoYW5kbGVyKHNpZ251bSwgZnJhbWUpOgorICAgICAgICAgICAgYXNzZXJ0IHNpZ251bSA9PSBz
aWduYWwuU0lHQUxSTQorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdUaW1lZCBvdXQgd2Fp
dGluZyBmb3IgcHJvY2VzcyB0byBvcGVuIHt9Jy5mb3JtYXQoc2VsZi5faW5fcGF0aCkpCisgICAg
ICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIGhhbmRsZXIpCisgICAgICAgIHNpZ25h
bC5hbGFybSgzKSAgIyBJbiBzZWNvbmRzCisKKyAgICAgICAgc3RkaW4gPSBOb25lCisgICAgICAg
IHRyeToKKyAgICAgICAgICAgIHN0ZGluID0gb3BlbihzZWxmLl9pbl9wYXRoLCAndycsIDApICAj
IE9wZW5pbmcgd2l0aCBubyBidWZmZXJpbmcsIGxpa2UgcG9wZW4KKyAgICAgICAgZXhjZXB0Ogor
ICAgICAgICAgICAgIyBXZSBzZXQgc2VsZi5fcHJvYyBhcyBfcmVzZXQoKSBhbmQgX2tpbGwoKSBk
ZXBlbmQgb24gaXQuCisgICAgICAgICAgICBzZWxmLl9wcm9jID0gU2ltdWxhdG9yUHJvY2Vzcy5Q
b3BlbihzZWxmLl9waWQsIHN0ZGluLCBzdGRvdXQsIHN0ZGVycikKKyAgICAgICAgICAgIGlmIHNl
bGYuX3Byb2MucG9sbCgpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuX3Jlc2V0
KCkKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0FwcCB7fSBjcmFzaGVkIGJlZm9y
ZSBzdGRpbiBjb3VsZCBiZSBhdHRhY2hlZCcuZm9ybWF0KG9zLnBhdGguYmFzZW5hbWUoc2VsZi5f
Y21kWzBdKSkpCisgICAgICAgICAgICBzZWxmLl9raWxsKCkKKyAgICAgICAgICAgIHNlbGYuX3Jl
c2V0KCkKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHNpZ25hbC5hbGFybSgwKSAgIyBDYW5j
ZWwgYWxhcm0KKworICAgICAgICBzZWxmLl9wcm9jID0gU2ltdWxhdG9yUHJvY2Vzcy5Qb3Blbihz
ZWxmLl9waWQsIHN0ZGluLCBzdGRvdXQsIHN0ZGVycikKKworICAgIGRlZiBfa2lsbChzZWxmKToK
KyAgICAgICAgc2VsZi5fZGV2aWNlLnRlcm1pbmF0ZV9hcHAoc2VsZi5fYnVuZGxlX2lkKQorICAg
ICAgICBzdXBlcihTaW11bGF0b3JQcm9jZXNzLCBzZWxmKS5fa2lsbCgpCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvci5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvci5weQkocmV2aXNpb24gMjExMzUzKQorKysg
VG9vbHMvU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3IucHkJKHdvcmtpbmcgY29weSkK
QEAgLTE2Nyw3ICsxNjcsNyBAQCBjbGFzcyBEZXZpY2Uob2JqZWN0KToKICAgICBSZXByZXNlbnRz
IGEgQ29yZVNpbXVsYXRvciBkZXZpY2UgdW5kZXJuZWF0aCBhIHJ1bnRpbWUKICAgICAiIiIKIAot
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCB1ZGlkLCBhdmFpbGFibGUsIHJ1bnRpbWUpOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCB1ZGlkLCBhdmFpbGFibGUsIHJ1bnRpbWUsIGhv
c3QpOgogICAgICAgICAiIiIKICAgICAgICAgOnBhcmFtIG5hbWU6IFRoZSBkZXZpY2UgbmFtZQog
ICAgICAgICA6dHlwZSBuYW1lOiBzdHIKQEAgLTE3Nyw3ICsxNzcsMTAgQEAgY2xhc3MgRGV2aWNl
KG9iamVjdCk6CiAgICAgICAgIDp0eXBlIGF2YWlsYWJsZTogYm9vbAogICAgICAgICA6cGFyYW0g
cnVudGltZTogVGhlIGlPUyBTaW11bGF0b3IgcnVudGltZSB0aGF0IGhvc3RzIHRoaXMgZGV2aWNl
CiAgICAgICAgIDp0eXBlIHJ1bnRpbWU6IFJ1bnRpbWUKKyAgICAgICAgOnBhcmFtIGhvc3Q6IFRo
ZSBob3N0IHdoaWNoIGNhbiBydW4gY29tbWFuZCBsaW5lIGNvbW1hbmRzCisgICAgICAgIDp0eXBl
IGhvc3Q6IEhvc3QKICAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2hvc3QgPSBob3N0CiAgICAg
ICAgIHNlbGYubmFtZSA9IG5hbWUKICAgICAgICAgc2VsZi51ZGlkID0gdWRpZAogICAgICAgICBz
ZWxmLmF2YWlsYWJsZSA9IGF2YWlsYWJsZQpAQCAtMjYwLDYgKzI2MywzMSBAQCBjbGFzcyBEZXZp
Y2Uob2JqZWN0KToKICAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9y
OgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCcieGNydW4gc2ltY3RsIGVyYXNlIiBm
YWlsZWQ6IGRldmljZSBzdGF0ZSBpcyB7fScuZm9ybWF0KFNpbXVsYXRvci5kZXZpY2Vfc3RhdGUo
dWRpZCkpKQogCisgICAgZGVmIGluc3RhbGxfYXBwKHNlbGYsIGFwcF9wYXRoKToKKyAgICAgICAg
cmV0dXJuIG5vdCBzZWxmLl9ob3N0LmV4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ3hjcnVuJywgJ3Np
bWN0bCcsICdpbnN0YWxsJywgc2VsZi51ZGlkLCBhcHBfcGF0aF0sIHJldHVybl9leGl0X2NvZGU9
VHJ1ZSkKKworICAgIGRlZiBsYXVuY2hfYXBwKHNlbGYsIGJ1bmRsZV9pZCwgYXJncywgZW52PU5v
bmUpOgorICAgICAgICBlbnZpcm9ubWVudF90b191c2UgPSB7fQorICAgICAgICBTSU1DVExfRU5W
X1BSRUZJWCA9ICdTSU1DVExfQ0hJTERfJworICAgICAgICBmb3IgdmFsdWUgaW4gKGVudiBvciB7
fSk6CisgICAgICAgICAgICBpZiBub3QgdmFsdWUuc3RhcnRzd2l0aChTSU1DVExfRU5WX1BSRUZJ
WCk6CisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnRfdG9fdXNlW1NJTUNUTF9FTlZfUFJFRklY
ICsgdmFsdWVdID0gZW52W3ZhbHVlXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg
ICBlbnZpcm9ubWVudF90b191c2VbdmFsdWVdID0gZW52W3ZhbHVlXQorCisgICAgICAgIG91dHB1
dCA9IHNlbGYuX2hvc3QuZXhlY3V0aXZlLnJ1bl9jb21tYW5kKAorICAgICAgICAgICAgWyd4Y3J1
bicsICdzaW1jdGwnLCAnbGF1bmNoJywgc2VsZi51ZGlkLCBidW5kbGVfaWRdICsgYXJncywKKyAg
ICAgICAgICAgIGVudj1lbnZpcm9ubWVudF90b191c2UsCisgICAgICAgICkKKworICAgICAgICBt
YXRjaCA9IHJlLm1hdGNoKHInKD9QPGJ1bmRsZT5bXjpdKyk6ICg/UDxwaWQ+XGQrKVxuJywgb3V0
cHV0KQorICAgICAgICBpZiBub3QgbWF0Y2ggb3IgbWF0Y2guZ3JvdXAoJ2J1bmRsZScpICE9IGJ1
bmRsZV9pZDoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRmFpbGVkIHRvIGZpbmQg
cHJvY2VzcyBpZCBmb3Ige306IHt9Jy5mb3JtYXQoYnVuZGxlX2lkLCBvdXRwdXQpKQorICAgICAg
ICByZXR1cm4gaW50KG1hdGNoLmdyb3VwKCdwaWQnKSkKKworICAgIGRlZiB0ZXJtaW5hdGVfYXBw
KHNlbGYsIGJ1bmRsZV9pZCk6CisgICAgICAgIHJldHVybiBub3Qgc2VsZi5faG9zdC5leGVjdXRp
dmUucnVuX2NvbW1hbmQoWyd4Y3J1bicsICdzaW1jdGwnLCAndGVybWluYXRlJywgc2VsZi51ZGlk
LCBidW5kbGVfaWRdLCByZXR1cm5fZXhpdF9jb2RlPVRydWUpCisKICAgICBkZWYgX19lcV9fKHNl
bGYsIG90aGVyKToKICAgICAgICAgcmV0dXJuIHNlbGYudWRpZCA9PSBvdGhlci51ZGlkCiAKQEAg
LTQ3Nyw3ICs1MDUsOCBAQCBjbGFzcyBTaW11bGF0b3Iob2JqZWN0KToKICAgICAgICAgICAgICAg
ICBkZXZpY2UgPSBEZXZpY2UobmFtZT1kZXZpY2VfbWF0Y2guZ3JvdXAoJ25hbWUnKS5yc3RyaXAo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWRpZD1kZXZpY2VfbWF0Y2guZ3Jv
dXAoJ3VkaWQnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlPWRl
dmljZV9tYXRjaC5ncm91cCgnYXZhaWxhYmlsaXR5JykgaXMgTm9uZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcnVudGltZT1jdXJyZW50X3J1bnRpbWUpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJ1bnRpbWU9Y3VycmVudF9ydW50aW1lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBob3N0PXNlbGYuX2hvc3QpCiAgICAgICAgICAgICAgICAgY3Vy
cmVudF9ydW50aW1lLmRldmljZXMuYXBwZW5kKGRldmljZSkKIAogICAgIGRlZiBkZXZpY2VfdHlw
ZShzZWxmLCBuYW1lPU5vbmUsIGlkZW50aWZpZXI9Tm9uZSk6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300113</attachid>
            <date>2017-01-30 08:55:36 -0800</date>
            <delta_ts>2017-01-30 11:43:31 -0800</delta_ts>
            <desc>Replace LayoutTestRelay</desc>
            <filename>bug-165927-20170130085327.patch</filename>
            <type>text/plain</type>
            <size>28884</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMTM2NikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYxIEBACisyMDE3LTAxLTMwICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBVc2Ugc2ltY3RsIGluc3RlYWQgb2YgTGF5b3V0VGVzdFJlbGF5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU5MjcKKworICAg
ICAgICBSZXZpZXdlZCBieSBEYW5pZWwgQmF0ZXMuCisKKyAgICAgICAgUGFydCAxCisKKyAgICAg
ICAgTGF5b3V0VGVzdFJlbGF5IHVzZXMgU1BJLCBzaW5jZSByZWNlbnQgdmVyc2lvbnMgb2YgdGhl
IGlPUyBTREsgYWxsb3cgZm9yIGluc3RhbGxpbmcgYXBwcyBvbgorICAgICAgICBzaW11bGF0b3Jz
IHRocm91Z2ggc2ltY3RsIChpT1MgMTAgYW5kIGxhdGVyKSwgdXNlIHRoaXMgZnVuY3Rpb25hbGl0
eSBpbnN0ZWFkLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHk6Cisg
ICAgICAgIChQb3J0Ll9faW5pdF9fKTogQWRkZWQgX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3Ry
dWN0b3IuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2Rhcndpbi5weToKKyAgICAg
ICAgKERhcndpblBvcnQuYXBwX2lkZW50aWZpZXJfZnJvbV9idW5kbGUpOiBBZGRlZCBmdW5jdGlv
biB0byBleHRyYWN0IGJ1bmRsZSBJRCBmcm9tIHBsaXN0LgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9kcml2ZXIucHk6CisgICAgICAgIChEcml2ZXIuX3N0YXJ0KTogUGFzcyB3b3Jr
ZXJfbnVtYmVyIHRvIHNlcnZlcl9wcm9jZXNzIHNvIHdlIGNhbiBsb29rIHVwIHRoZSBjb3JyZWN0
IHNpbXVsYXRvciBkZXZpY2UgdG8gdXNlLgorICAgICAgICAoSU9TU2ltdWxhdG9yRHJpdmVyKTog
RGVsZXRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyX3VuaXR0ZXN0
LnB5OgorICAgICAgICAoRHJpdmVyVGVzdC50ZXN0X3N0b3BfY2xlYW5zX3VwX3Byb3Blcmx5KTog
U2V0IF90ZXN0X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yIGZvciB0ZXN0aW5nLgorICAgICAg
ICAoRHJpdmVyVGVzdC50ZXN0X3R3b19zdGFydHNfY2xlYW5zX3VwX3Byb3Blcmx5KTogRGl0dG8u
CisgICAgICAgIChEcml2ZXJUZXN0LnRlc3Rfc3RhcnRfYWN0dWFsbHlfc3RhcnRzKTogRGl0dG8u
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weToKKyAgICAgICAgKElPU1Np
bXVsYXRvclBvcnQpOiBSZW1vdmUgcmVsYXlfbmFtZS4KKyAgICAgICAgKElPU1NpbXVsYXRvclBv
cnQuX19pbml0X18pOiBTZXQgX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgdG8gU2lt
dWxhdG9yUHJvY2VzcyBmb3IgSU9TU2ltdWxhdG9yUG9ydC4KKyAgICAgICAgKElPU1NpbXVsYXRv
clBvcnQuX2NyZWF0ZV9zaW11bGF0b3JzKTogRm9ybWF0dGluZyBjaGFuZ2UuCisgICAgICAgIChJ
T1NTaW11bGF0b3JQb3J0LnJlbGF5X3BhdGgpOiBEZWxldGVkLgorICAgICAgICAoSU9TU2ltdWxh
dG9yUG9ydC5fY2hlY2tfcmVsYXkpOiBEZWxldGVkLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9y
dC5fY2hlY2tfcG9ydF9idWlsZCk6IERlbGV0ZWQuIFVzZSBiYXNlIGNsYXNzIGltcGxlbWVudGF0
aW9uCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9idWlsZF9yZWxheSk6IERlbGV0ZWQuCisg
ICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9idWlsZF9kcml2ZXIpOiBEZWxldGVkLiBVc2UgYmFz
ZSBjbGFzcyBpbXBsZW1lbnRhdGlvbgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fZHJpdmVy
X2NsYXNzKTogRGVsZXRlZC4gVXNlIGJhc2UgY2xhc3MgaW1wbGVtZW50YXRpb24KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0LnB5OgorICAgICAgICAoaW9zVGVz
dC50ZXN0XzMyYml0KTogVXBkYXRlIHRlc3QuCisgICAgICAgIChpb3NUZXN0LnRlc3RfNjRiaXQp
OiBVcGRhdGUgdGVzdC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3By
b2Nlc3MucHk6CisgICAgICAgIChTZXJ2ZXJQcm9jZXNzLl9faW5pdF9fKTogQWRkZWQgYXJndW1l
bnQgd29ya2VyX251bWJlci4gVGhpcyBjbGFzcyBkb2VzIG5vdCBtYWtlIHVzZSBvZiBpdC4gV2Ug
d2lsbCBtYWtlIHVzZSBvZiB0aGlzIGFyZ3VtZW50IGluIFNpbXVsYXRvclByb2Nlc3MgdG8gbG9v
a3VwIHRoZSBhc3NvY2lhdGVkIHNpbXVsYXRvciBkZXZpY2UuCisgICAgICAgIChTZXJ2ZXJQcm9j
ZXNzLl9zZXRfZmlsZV9ub25ibG9ja2luZyk6IEFkZGVkIHRvIHNoYXJlIGNvbW1vbiBjb2RlLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzc19tb2NrLnB5Ogor
ICAgICAgICAoTW9ja1NlcnZlclByb2Nlc3MuX19pbml0X18pOiBBZGRlZCBhcmd1bWVudCB3b3Jr
ZXJfbnVtYmVyLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9zaW11bGF0b3JfcHJv
Y2Vzcy5weTogQWRkZWQuCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNzKTogQWRkZWQuCisgICAg
ICAgIChTaW11bGF0b3JQcm9jZXNzLlBvcGVuKTogQWRkZWQuCisgICAgICAgIChTaW11bGF0b3JQ
cm9jZXNzLlBvcGVuLl9faW5pdF9fKTogQWRkZWQuIEluaXRpYWxpemUgUG9wZW4gc3RydWN0dXJl
IHdpdGggc3RkaW4sIHN0ZG91dCwgc3RkZXJyIGFuZCBwaWQuCisgICAgICAgIChTaW11bGF0b3JQ
cm9jZXNzLlBvcGVuLnBvbGwpOiBBZGRlZC4gQ2hlY2sgaWYgdGhlIHByb2Nlc3MgaXMgcnVubmlu
Zy4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuUG9wZW4ud2FpdCk6IEFkZGVkLiBXYWl0IGZv
ciBwcm9jZXNzIHRvIGNsb3NlLgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5fX2luaXRfXyk6
IEFkZGVkLiBJbnN0YWxsIGFwcCB0byBkZXZpY2Ugc3BlY2lmaWVkIHRocm91Z2ggcG9ydCBhbmQg
d29ya2VyX251bWJlci4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX3Jlc2V0KTogQWRkZWQu
IFVubGluayBmaWZvcy4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX3N0YXJ0KTogQWRkZWQu
IExhdW5jaCBhcHAgb24gc2ltdWxhdG9yLCBsaW5rIGZpZm9zLgorICAgICAgICAoU2ltdWxhdG9y
UHJvY2Vzcy5fa2lsbCk6IEFkZGVkLiBTaHV0ZG93biBhcHAgb24gc2ltdWxhdG9yLgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5OgorICAgICAgICAoRGV2aWNl
Ll9faW5pdF9fKTogQWNjZXB0IGhvc3QgdG8gcnVuIGluc3RhbGwvbGF1bmNoL3Rlcm1pbmF0ZS4K
KyAgICAgICAgKERldmljZS5pbnN0YWxsX2FwcCk6IEluc3RhbGwgYXBwIHRvIHRhcmdldCBEZXZp
Y2UuCisgICAgICAgIChEZXZpY2UubGF1bmNoX2FwcCk6IExhdW5jaCBhcHAgb24gdGFyZ2V0IERl
dmljZS4KKyAgICAgICAgKERldmljZS50ZXJtaW5hdGVfYXBwKTogU2h1dGRvd24gYXBwIG9uIHRh
cmdldCBEZXZpY2UuCisgICAgICAgIChTaW11bGF0b3IuX3BhcnNlX2RldmljZXMpOiBQYXNzIGhv
c3QgdG8gRGV2aWNlLgorCiAyMDE3LTAxLTMwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJj
aWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBBZGQgQVBJIHRvIGhhbmRsZSB0aGUgYWNj
ZWxlcmF0ZWQgY29tcG9zaXRpbmcgcG9saWN5CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvYmFzZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
YmFzZS5weQkocmV2aXNpb24gMjExMzY2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2Jhc2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw2ICsxMzEsNyBAQCBjbGFzcyBQb3J0KG9i
amVjdCk6CiAgICAgICAgIHNlbGYuX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9IE5vbmUKICAg
ICAgICAgc2VsZi5faW1hZ2VfZGlmZmVyID0gTm9uZQogICAgICAgICBzZWxmLl9zZXJ2ZXJfcHJv
Y2Vzc19jb25zdHJ1Y3RvciA9IHNlcnZlcl9wcm9jZXNzLlNlcnZlclByb2Nlc3MgICMgb3ZlcnJp
ZGFibGUgZm9yIHRlc3RpbmcKKyAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXJfcHJvY2Vzc19jb25z
dHJ1Y3RvciA9IHNlcnZlcl9wcm9jZXNzLlNlcnZlclByb2Nlc3MKIAogICAgICAgICBpZiBub3Qg
aGFzYXR0cihvcHRpb25zLCAnY29uZmlndXJhdGlvbicpIG9yIG5vdCBvcHRpb25zLmNvbmZpZ3Vy
YXRpb246CiAgICAgICAgICAgICBzZWxmLnNldF9vcHRpb25fZGVmYXVsdCgnY29uZmlndXJhdGlv
bicsIHNlbGYuZGVmYXVsdF9jb25maWd1cmF0aW9uKCkpCkluZGV4OiBUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3BvcnQvZGFyd2luLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9kYXJ3aW4ucHkJKHJldmlzaW9uIDIxMTM2NikKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9kYXJ3aW4ucHkJKHdvcmtpbmcgY29weSkKQEAgLTE3NCwzICsxNzQsMTEgQEAg
Y2xhc3MgRGFyd2luUG9ydChBcHBsZVBvcnQpOgogICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3I6
CiAgICAgICAgICAgICBfbG9nLndhcm4oInhjcnVuIGZhaWxlZDsgZmFsbGluZyBiYWNrIHRvICcl
cycuIiAlIGZhbGxiYWNrKQogICAgICAgICAgICAgcmV0dXJuIGZhbGxiYWNrCisKKyAgICBkZWYg
YXBwX2lkZW50aWZpZXJfZnJvbV9idW5kbGUoc2VsZiwgYXBwX2J1bmRsZSk6CisgICAgICAgIHBs
aXN0X3BhdGggPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oYXBwX2J1bmRsZSwgJ0luZm8ucGxpc3Qn
KQorICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMocGxpc3RfcGF0aCk6Cisg
ICAgICAgICAgICBwbGlzdF9wYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKGFwcF9idW5kbGUs
ICdDb250ZW50cycsICdJbmZvLnBsaXN0JykKKyAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzeXN0
ZW0uZXhpc3RzKHBsaXN0X3BhdGgpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAg
cmV0dXJuIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJy91c3IvbGliZXhlYy9QbGlzdEJ1
ZGR5JywgJy1jJywgJ1ByaW50IENGQnVuZGxlSWRlbnRpZmllcicsIHBsaXN0X3BhdGhdKS5yc3Ry
aXAoKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RyaXZlci5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5CShyZXZpc2lvbiAy
MTEzNjYpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0xMzgsNyArMTM4LDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAg
IHNlbGYuX2RyaXZlcl91c2VyX2RpcmVjdG9yeV9zdWZmaXggPSBOb25lCiAgICAgICAgIHNlbGYu
X2RyaXZlcl91c2VyX2NhY2hlX2RpcmVjdG9yeSA9IE5vbmUKIAotICAgICAgICAjIFdlYktpdFRl
c3RSdW5uZXIvTGF5b3V0VGVzdFJlbGF5IGNhbiByZXBvcnQgYmFjayBzdWJwcm9jZXNzIGNyYXNo
ZXMgYnkgcHJpbnRpbmcKKyAgICAgICAgIyBXZWJLaXRUZXN0UnVubmVyIGNhbiByZXBvcnQgYmFj
ayBzdWJwcm9jZXNzIGNyYXNoZXMgYnkgcHJpbnRpbmcKICAgICAgICAgIyAiI0NSQVNIRUQgLSBQ
Uk9DRVNTTkFNRSIuICBTaW5jZSB0aG9zZSBjYW4gaGFwcGVuIGF0IGFueSB0aW1lIGFuZCBTZXJ2
ZXJQcm9jZXNzCiAgICAgICAgICMgd29uJ3QgYmUgYXdhcmUgb2YgdGhlbSAoc2luY2UgdGhlIGFj
dHVhbCB0b29sIGRpZG4ndCBjcmFzaCwganVzdCBhIHN1YnByb2Nlc3MpCiAgICAgICAgICMgd2Ug
cmVjb3JkIHRoZSBjcmFzaGVkIHN1YnByb2Nlc3MgbmFtZSBoZXJlLgpAQCAtMzI3LDcgKzMyNyw2
IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogCiAgICAgZGVmIF9zZXR1cF9lbnZpcm9uX2Zvcl9k
cml2ZXIoc2VsZiwgZW52aXJvbm1lbnQpOgogICAgICAgICBidWlsZF9yb290X3BhdGggPSBzdHIo
c2VsZi5fcG9ydC5fYnVpbGRfcGF0aCgpKQotICAgICAgICAjIEZJWE1FOiBEWUxEXyogdmFyaWFi
bGVzIHNob3VsZCBiZSBNYWMtb25seS4gRXZlbiBpT1MgU2ltdWxhdG9yIGRvZXNuJ3QgbmVlZCB0
aGVtLCBhcyBMYXlvdXRUZXN0UmVsYXkgaXMgYSBob3N0IGJpbmFyeS4KICAgICAgICAgc2VsZi5f
YXBwZW5kX2Vudmlyb25tZW50X3ZhcmlhYmxlX3BhdGgoZW52aXJvbm1lbnQsICdEWUxEX0xJQlJB
UllfUEFUSCcsIGJ1aWxkX3Jvb3RfcGF0aCkKICAgICAgICAgc2VsZi5fYXBwZW5kX2Vudmlyb25t
ZW50X3ZhcmlhYmxlX3BhdGgoZW52aXJvbm1lbnQsICdfX1hQQ19EWUxEX0xJQlJBUllfUEFUSCcs
IGJ1aWxkX3Jvb3RfcGF0aCkKICAgICAgICAgc2VsZi5fYXBwZW5kX2Vudmlyb25tZW50X3Zhcmlh
YmxlX3BhdGgoZW52aXJvbm1lbnQsICdEWUxEX0ZSQU1FV09SS19QQVRIJywgYnVpbGRfcm9vdF9w
YXRoKQpAQCAtMzY5LDcgKzM2OCw3IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogICAgICAgICBl
bnZpcm9ubWVudCA9IHNlbGYuX3NldHVwX2Vudmlyb25fZm9yX3Rlc3QoKQogICAgICAgICBzZWxm
Ll9jcmFzaGVkX3Byb2Nlc3NfbmFtZSA9IE5vbmUKICAgICAgICAgc2VsZi5fY3Jhc2hlZF9waWQg
PSBOb25lCi0gICAgICAgIHNlbGYuX3NlcnZlcl9wcm9jZXNzID0gc2VsZi5fcG9ydC5fc2VydmVy
X3Byb2Nlc3NfY29uc3RydWN0b3Ioc2VsZi5fcG9ydCwgc2VsZi5fc2VydmVyX25hbWUsIHNlbGYu
Y21kX2xpbmUocGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpLCBlbnZpcm9ubWVudCkKKyAgICAg
ICAgc2VsZi5fc2VydmVyX3Byb2Nlc3MgPSBzZWxmLl9wb3J0Ll90ZXN0X3J1bm5lcl9wcm9jZXNz
X2NvbnN0cnVjdG9yKHNlbGYuX3BvcnQsIHNlbGYuX3NlcnZlcl9uYW1lLCBzZWxmLmNtZF9saW5l
KHBpeGVsX3Rlc3RzLCBwZXJfdGVzdF9hcmdzKSwgZW52aXJvbm1lbnQsIHdvcmtlcl9udW1iZXI9
c2VsZi5fd29ya2VyX251bWJlcikKICAgICAgICAgc2VsZi5fc2VydmVyX3Byb2Nlc3Muc3RhcnQo
KQogCiAgICAgZGVmIF9ydW5fcG9zdF9zdGFydF90YXNrcyhzZWxmKToKQEAgLTYxMSwyNyArNjEw
LDYgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgIHJldHVybiBUcnVlCiAKIAotIyBG
SVhNRTogdGhpcyBzaG91bGQgYmUgYWJzdHJhY3RlZCBvdXQgdmlhIHRoZSBQb3J0IHN1YmNsYXNz
IHNvbWVob3cuCi1jbGFzcyBJT1NTaW11bGF0b3JEcml2ZXIoRHJpdmVyKToKLSAgICBkZWYgY21k
X2xpbmUoc2VsZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgotICAgICAgICBjbWQgPSBz
dXBlcihJT1NTaW11bGF0b3JEcml2ZXIsIHNlbGYpLmNtZF9saW5lKHBpeGVsX3Rlc3RzLCBwZXJf
dGVzdF9hcmdzKQotICAgICAgICByZWxheV90b29sID0gc2VsZi5fcG9ydC5yZWxheV9wYXRoCi0g
ICAgICAgIGR1bXBfdG9vbCA9IGNtZFswXQotICAgICAgICBkdW1wX3Rvb2xfYXJncyA9IGNtZFsx
Ol0KLSAgICAgICAgcHJvZHVjdF9kaXIgPSBzZWxmLl9wb3J0Ll9idWlsZF9wYXRoKCkKLSAgICAg
ICAgcmVsYXlfYXJncyA9IFsKLSAgICAgICAgICAgICctZGV2ZWxvcGVyRGlyJywgc2VsZi5fcG9y
dC5kZXZlbG9wZXJfZGlyLAotICAgICAgICAgICAgJy11ZGlkJywgc2VsZi5fcG9ydC5kZXZpY2Vf
aWRfZm9yX3dvcmtlcl9udW1iZXIoc2VsZi5fd29ya2VyX251bWJlciksCi0gICAgICAgICAgICAn
LXByb2R1Y3REaXInLCBwcm9kdWN0X2RpciwKLSAgICAgICAgICAgICctYXBwJywgZHVtcF90b29s
LAotICAgICAgICBdCi0gICAgICAgIHJldHVybiBbcmVsYXlfdG9vbF0gKyByZWxheV9hcmdzICsg
WyctLSddICsgZHVtcF90b29sX2FyZ3MKLQotICAgIGRlZiBfc2V0dXBfZW52aXJvbl9mb3JfZHJp
dmVyKHNlbGYsIGVudmlyb25tZW50KToKLSAgICAgICAgZW52aXJvbm1lbnRbJ0RFVkVMT1BFUl9E
SVInXSA9IHNlbGYuX3BvcnQuZGV2ZWxvcGVyX2RpcgotICAgICAgICByZXR1cm4gc3VwZXIoSU9T
U2ltdWxhdG9yRHJpdmVyLCBzZWxmKS5fc2V0dXBfZW52aXJvbl9mb3JfZHJpdmVyKGVudmlyb25t
ZW50KQotCi0KIGNsYXNzIENvbnRlbnRCbG9jayhvYmplY3QpOgogICAgIGRlZiBfX2luaXRfXyhz
ZWxmKToKICAgICAgICAgc2VsZi5jb250ZW50X3R5cGUgPSBOb25lCkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvZHJpdmVyX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHkJKHJldmlzaW9uIDIxMTM2
NikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kcml2ZXJfdW5pdHRlc3QucHkJKHdv
cmtpbmcgY29weSkKQEAgLTI2NCw3ICsyNjQsNyBAQCBjbGFzcyBEcml2ZXJUZXN0KHVuaXR0ZXN0
LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3N0b3BfY2xlYW5zX3VwX3Byb3Blcmx5KHNlbGYp
OgogICAgICAgICBwb3J0ID0gVGVzdFdlYktpdFBvcnQoKQotICAgICAgICBwb3J0Ll9zZXJ2ZXJf
cHJvY2Vzc19jb25zdHJ1Y3RvciA9IE1vY2tTZXJ2ZXJQcm9jZXNzCisgICAgICAgIHBvcnQuX3Rl
c3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJvY2VzcwogICAgICAg
ICBkcml2ZXIgPSBEcml2ZXIocG9ydCwgMCwgcGl4ZWxfdGVzdHM9VHJ1ZSkKICAgICAgICAgZHJp
dmVyLnN0YXJ0KFRydWUsIFtdKQogICAgICAgICBsYXN0X3RtcGRpciA9IHBvcnQuX2ZpbGVzeXN0
ZW0ubGFzdF90bXBkaXIKQEAgLTI3NCw3ICsyNzQsNyBAQCBjbGFzcyBEcml2ZXJUZXN0KHVuaXR0
ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3R3b19zdGFydHNfY2xlYW5zX3VwX3Byb3Bl
cmx5KHNlbGYpOgogICAgICAgICBwb3J0ID0gVGVzdFdlYktpdFBvcnQoKQotICAgICAgICBwb3J0
Ll9zZXJ2ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IE1vY2tTZXJ2ZXJQcm9jZXNzCisgICAgICAg
IHBvcnQuX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJvY2Vz
cwogICAgICAgICBkcml2ZXIgPSBEcml2ZXIocG9ydCwgMCwgcGl4ZWxfdGVzdHM9VHJ1ZSkKICAg
ICAgICAgZHJpdmVyLnN0YXJ0KFRydWUsIFtdKQogICAgICAgICBsYXN0X3RtcGRpciA9IHBvcnQu
X2ZpbGVzeXN0ZW0ubGFzdF90bXBkaXIKQEAgLTI4Myw3ICsyODMsNyBAQCBjbGFzcyBEcml2ZXJU
ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3N0YXJ0X2FjdHVhbGx5X3N0
YXJ0cyhzZWxmKToKICAgICAgICAgcG9ydCA9IFRlc3RXZWJLaXRQb3J0KCkKLSAgICAgICAgcG9y
dC5fc2VydmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBNb2NrU2VydmVyUHJvY2VzcworICAgICAg
ICBwb3J0Ll90ZXN0X3J1bm5lcl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gTW9ja1NlcnZlclByb2Nl
c3MKICAgICAgICAgZHJpdmVyID0gRHJpdmVyKHBvcnQsIDAsIHBpeGVsX3Rlc3RzPVRydWUpCiAg
ICAgICAgIGRyaXZlci5zdGFydChUcnVlLCBbXSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRy
aXZlci5fc2VydmVyX3Byb2Nlc3Muc3RhcnRlZCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9pb3MucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2lvcy5weQkocmV2aXNpb24gMjExMzY2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2lvcy5weQkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBmcm9tIHdlYmtpdHB5Lmxh
eW91dF90ZXN0cy5tb2RlbHMudGVzdF9jCiBmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGNvbmZp
ZyBhcyBwb3J0X2NvbmZpZwogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBkcml2ZXIsIGltYWdl
X2RpZmYKIGZyb20gd2Via2l0cHkucG9ydC5kYXJ3aW4gaW1wb3J0IERhcndpblBvcnQKK2Zyb20g
d2Via2l0cHkucG9ydC5zaW11bGF0b3JfcHJvY2VzcyBpbXBvcnQgU2ltdWxhdG9yUHJvY2Vzcwog
ZnJvbSB3ZWJraXRweS54Y29kZS5zaW11bGF0b3IgaW1wb3J0IFNpbXVsYXRvciwgUnVudGltZSwg
RGV2aWNlVHlwZQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmNyYXNobG9ncyBpbXBvcnQg
Q3Jhc2hMb2dzCiAKQEAgLTc4LDcgKzc5LDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3
aW5Qb3J0KToKICAgICBTREsgPSAnaXBob25lc2ltdWxhdG9yJwogCiAgICAgU0lNVUxBVE9SX0JV
TkRMRV9JRCA9ICdjb20uYXBwbGUuaXBob25lc2ltdWxhdG9yJwotICAgIHJlbGF5X25hbWUgPSAn
TGF5b3V0VGVzdFJlbGF5JwogICAgIFNJTVVMQVRPUl9ESVJFQ1RPUlkgPSAiL3RtcC9XZWJLaXRU
ZXN0aW5nU2ltdWxhdG9ycy8iCiAgICAgTFNSRUdJU1RFUl9QQVRIID0gIi9TeXN0ZW0vTGlicmFy
eS9GcmFtZXdvcmtzL0NvcmVTZXJ2aWNlcy5mcmFtZXdvcmsvRnJhbWV3b3Jrcy9MYXVuY2hTZXJ2
aWNlcy5mcmFtZXdvcmsvVmVyc2lvbnMvQ3VycmVudC9TdXBwb3J0L2xzcmVnaXN0ZXIiCiAgICAg
UFJPQ0VTU19DT1VOVF9FU1RJTUFURV9QRVJfU0lNVUxBVE9SX0lOU1RBTkNFID0gMTAwCkBAIC05
Nyw2ICs5Nyw3IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAKICAgICBk
ZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncyk6CiAgICAgICAgIERh
cndpblBvcnQuX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncykKKyAgICAg
ICAgc2VsZi5fdGVzdF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IFNpbXVsYXRvclByb2Nl
c3MKIAogICAgICAgICBvcHRpb25hbF9kZXZpY2VfY2xhc3MgPSBzZWxmLmdldF9vcHRpb24oJ2Rl
dmljZV9jbGFzcycpCiAgICAgICAgIHNlbGYuX3ByaW50aW5nX2NtZF9saW5lID0gRmFsc2UKQEAg
LTE0OCwxNiArMTQ5LDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAg
ICAgICAgICAgIGRldmljZV90eXBlID0gRGV2aWNlVHlwZS5mcm9tX25hbWUoZGV2aWNlX25hbWUp
CiAgICAgICAgIHJldHVybiBkZXZpY2VfdHlwZQogCi0gICAgQHByb3BlcnR5Ci0gICAgQG1lbW9p
emVkCi0gICAgZGVmIHJlbGF5X3BhdGgoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX3Jvb3Rfd2Fz
X3NldDoKLSAgICAgICAgICAgIHBhdGggPSBzZWxmLl9maWxlc3lzdGVtLmFic3BhdGgoc2VsZi5n
ZXRfb3B0aW9uKCdyb290JykpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtYWNfY29uZmln
ID0gcG9ydF9jb25maWcuQ29uZmlnKHNlbGYuX2V4ZWN1dGl2ZSwgc2VsZi5fZmlsZXN5c3RlbSwg
J21hYycpCi0gICAgICAgICAgICBwYXRoID0gbWFjX2NvbmZpZy5idWlsZF9kaXJlY3Rvcnkoc2Vs
Zi5nZXRfb3B0aW9uKCdjb25maWd1cmF0aW9uJykpCi0gICAgICAgIHJldHVybiBzZWxmLl9maWxl
c3lzdGVtLmpvaW4ocGF0aCwgc2VsZi5yZWxheV9uYW1lKQotCiAgICAgQG1lbW9pemVkCiAgICAg
ZGVmIGNoaWxkX3Byb2Nlc3NlcyhzZWxmKToKICAgICAgICAgcmV0dXJuIGludChzZWxmLmdldF9v
cHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycpKQpAQCAtMTgyLDE5ICsxNzMsNiBAQCBjbGFzcyBJT1NT
aW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogCiAgICAgICAgIHJldHVybiBtaW4obWF4aW11bV9z
aW11bGF0b3JfY291bnRfb25fdGhpc19zeXN0ZW0sIGJlc3RfY2hpbGRfcHJvY2Vzc19jb3VudF9m
b3JfY3B1KQogCi0gICAgZGVmIF9jaGVja19yZWxheShzZWxmKToKLSAgICAgICAgaWYgbm90IHNl
bGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHNlbGYucmVsYXlfcGF0aCk6Ci0gICAgICAgICAgICBfbG9n
LmVycm9yKCIlcyB3YXMgbm90IGZvdW5kIGF0ICVzIiAlIChzZWxmLnJlbGF5X25hbWUsIHNlbGYu
cmVsYXlfcGF0aCkpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRy
dWUKLQotICAgIGRlZiBfY2hlY2tfcG9ydF9idWlsZChzZWxmKToKLSAgICAgICAgaWYgbm90IHNl
bGYuX3Jvb3Rfd2FzX3NldCBhbmQgc2VsZi5nZXRfb3B0aW9uKCdidWlsZCcpIGFuZCBub3Qgc2Vs
Zi5fYnVpbGRfcmVsYXkoKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBpZiBu
b3Qgc2VsZi5fY2hlY2tfcmVsYXkoKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAg
ICByZXR1cm4gVHJ1ZQotCiAgICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwg
c3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49dGltZS50aW1lLCBzbGVlcF9mbj10
aW1lLnNsZWVwLCB3YWl0X2Zvcl9sb2c9VHJ1ZSk6CiAgICAgICAgIHRpbWVfZm4gPSB0aW1lX2Zu
IG9yIHRpbWUudGltZQogICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9yIHRpbWUuc2xlZXAK
QEAgLTIxNSw3ICsxOTMsNyBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgog
ICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9jcmFzaF9sb2coY3Jhc2hlZF9zdWJwcm9jZXNz
X25hbWVfYW5kX3BpZFswXSwgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZFsxXSwgc3Rk
b3V0LAogICAgICAgICAgICAgICAgICdcbicuam9pbihzdGRlcnJfbGluZXMpLCBuZXdlcl90aGFu
LCB0aW1lX2ZuLCBzbGVlcF9mbiwgd2FpdF9mb3JfbG9nKQogCi0gICAgICAgICMgTGF5b3V0VGVz
dFJlbGF5IGNyYXNoZWQKKyAgICAgICAgIyBBcHAgY3Jhc2hlZAogICAgICAgICBfbG9nLmRlYnVn
KCdsb29raW5nIGZvciBjcmFzaCBsb2cgZm9yICVzOiVzJyAlIChuYW1lLCBzdHIocGlkKSkpCiAg
ICAgICAgIGNyYXNoX2xvZyA9ICcnCiAgICAgICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3Moc2Vs
Zi5ob3N0KQpAQCAtMjMzLDI1ICsyMTEsNiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndp
blBvcnQpOgogICAgICAgICAgICAgcmV0dXJuIHN0ZGVyciwgTm9uZQogICAgICAgICByZXR1cm4g
c3RkZXJyLCBjcmFzaF9sb2cKIAotICAgIGRlZiBfYnVpbGRfcmVsYXkoc2VsZik6Ci0gICAgICAg
IGVudmlyb25tZW50ID0gc2VsZi5ob3N0LmNvcHlfY3VycmVudF9lbnZpcm9ubWVudCgpCi0gICAg
ICAgIGVudmlyb25tZW50LmRpc2FibGVfZ2NjX3NtYXJ0cXVvdGVzKCkKLSAgICAgICAgZW52ID0g
ZW52aXJvbm1lbnQudG9fZGljdGlvbmFyeSgpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAg
IyBGSVhNRTogV2Ugc2hvdWxkIGJlIHBhc3NpbmcgX2FyZ3VtZW50c19mb3JfY29uZmlndXJhdGlv
bigpLCB3aGljaCByZXNwZWN0cyBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBwb3J0LAotICAgICAg
ICAgICAgIyBpbnN0ZWFkIG9mIGhhcmRjb2RpbmcgLS1pb3Mtc2ltdWxhdG9yLgotICAgICAgICAg
ICAgc2VsZi5fcnVuX3NjcmlwdCgiYnVpbGQtbGF5b3V0dGVzdHJlbGF5IiwgYXJncz1bIi0taW9z
LXNpbXVsYXRvciJdLCBlbnY9ZW52KQotICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3IsIGU6Ci0g
ICAgICAgICAgICBfbG9nLmVycm9yKGUubWVzc2FnZV93aXRoX291dHB1dChvdXRwdXRfbGltaXQ9
Tm9uZSkpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRydWUKLQot
ICAgIGRlZiBfYnVpbGRfZHJpdmVyKHNlbGYpOgotICAgICAgICBidWlsdF90b29sID0gc3VwZXIo
SU9TU2ltdWxhdG9yUG9ydCwgc2VsZikuX2J1aWxkX2RyaXZlcigpCi0gICAgICAgIGJ1aWx0X3Jl
bGF5ID0gc2VsZi5fYnVpbGRfcmVsYXkoKQotICAgICAgICByZXR1cm4gYnVpbHRfdG9vbCBhbmQg
YnVpbHRfcmVsYXkKLQogICAgIGRlZiBfYnVpbGRfZHJpdmVyX2ZsYWdzKHNlbGYpOgogICAgICAg
ICBhcmNocyA9IFsnQVJDSFM9aTM4NiddIGlmIHNlbGYuYXJjaGl0ZWN0dXJlKCkgPT0gJ3g4Nicg
ZWxzZSBbXQogICAgICAgICBzZGsgPSBbJy0tc2RrJywgJ2lwaG9uZXNpbXVsYXRvciddCkBAIC0y
NjQsOSArMjIzLDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICAg
ICAgICAgICAgICBjb25maWd1cmF0aW9ucy5hcHBlbmQoVGVzdENvbmZpZ3VyYXRpb24odmVyc2lv
bj1zZWxmLl92ZXJzaW9uLCBhcmNoaXRlY3R1cmU9YXJjaGl0ZWN0dXJlLCBidWlsZF90eXBlPWJ1
aWxkX3R5cGUpKQogICAgICAgICByZXR1cm4gY29uZmlndXJhdGlvbnMKIAotICAgIGRlZiBfZHJp
dmVyX2NsYXNzKHNlbGYpOgotICAgICAgICByZXR1cm4gZHJpdmVyLklPU1NpbXVsYXRvckRyaXZl
cgotCiAgICAgZGVmIGRlZmF1bHRfYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6CiAgICAgICAg
IGlmIHNlbGYuZ2V0X29wdGlvbignd2Via2l0X3Rlc3RfcnVubmVyJyk6CiAgICAgICAgICAgICBm
YWxsYmFja19uYW1lcyA9IFtzZWxmLl93azJfcG9ydF9uYW1lKCldICsgW3NlbGYucG9ydF9uYW1l
XSArIFsnd2syJ10KQEAgLTI4MCw5ICsyMzYsOSBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERh
cndpblBvcnQpOgogCiAgICAgZGVmIF9jcmVhdGVfc2ltdWxhdG9ycyhzZWxmKToKICAgICAgICAg
aWYgKHNlbGYuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKSA8IHNlbGYuY2hpbGRfcHJvY2Vzc2Vz
KCkpOgotICAgICAgICAgICAgICAgIF9sb2cud2FybigiWW91IGhhdmUgc3BlY2lmaWVkIHZlcnkg
aGlnaCB2YWx1ZSh7MH0pIGZvciAtLWNoaWxkLXByb2Nlc3NlcyIuZm9ybWF0KHNlbGYuY2hpbGRf
cHJvY2Vzc2VzKCkpKQotICAgICAgICAgICAgICAgIF9sb2cud2FybigibWF4aW11bSBjaGlsZC1w
cm9jZXNzZXMgd2hpY2ggY2FuIGJlIHN1cHBvcnRlZCBvbiB0aGlzIHN5c3RlbSBhcmU6IHswfSIu
Zm9ybWF0KHNlbGYuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKSkpCi0gICAgICAgICAgICAgICAg
X2xvZy53YXJuKCJUaGlzIGlzIHZlcnkgbGlrZWx5IHRvIGZhaWwuIikKKyAgICAgICAgICAgIF9s
b2cud2FybignWW91IGhhdmUgc3BlY2lmaWVkIHZlcnkgaGlnaCB2YWx1ZSh7MH0pIGZvciAtLWNo
aWxkLXByb2Nlc3NlcycuZm9ybWF0KHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpKQorICAgICAgICAg
ICAgX2xvZy53YXJuKCdtYXhpbXVtIGNoaWxkLXByb2Nlc3NlcyB3aGljaCBjYW4gYmUgc3VwcG9y
dGVkIG9uIHRoaXMgc3lzdGVtIGFyZTogezB9Jy5mb3JtYXQoc2VsZi5kZWZhdWx0X2NoaWxkX3By
b2Nlc3NlcygpKSkKKyAgICAgICAgICAgIF9sb2cud2FybignVGhpcyBpcyB2ZXJ5IGxpa2VseSB0
byBmYWlsLicpCiAKICAgICAgICAgaWYgc2VsZi5fdXNpbmdfZGVkaWNhdGVkX3NpbXVsYXRvcnMo
KToKICAgICAgICAgICAgIHNlbGYuX2NyZWF0ZVNpbXVsYXRvckFwcHMoKQpAQCAtNDEzLDcgKzM2
OSw3IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAgICAgZGVmIF90ZXN0
aW5nX2RldmljZShzZWxmLCBudW1iZXIpOgogICAgICAgICByZXR1cm4gU2ltdWxhdG9yLmRldmlj
ZV9udW1iZXIobnVtYmVyKQogCi0gICAgIyBUaGlzIGlzIG9ubHkgZXhwb3NlZCBzbyB0aGF0IElP
U1NpbXVsYXRvckRyaXZlciBjYW4gdXNlIGl0LgorICAgICMgRklYTUU6IFRoaXMgaXMgb25seSBl
eHBvc2VkIHNvIHRoYXQgU2ltdWxhdG9yUHJvY2VzcyBjYW4gdXNlIGl0LgogICAgIGRlZiBkZXZp
Y2VfaWRfZm9yX3dvcmtlcl9udW1iZXIoc2VsZiwgbnVtYmVyKToKICAgICAgICAgaWYgc2VsZi5f
cHJpbnRpbmdfY21kX2xpbmU6CiAgICAgICAgICAgICByZXR1cm4gJzxkdW1teSBpZD4nCkluZGV4
OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3QucHkJKHJldmlzaW9u
IDIxMTM2NikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3QucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgY2xhc3MgaW9zVGVzdChkYXJ3aW5fdGVz
dGNhc2UuRGFyd2luVGVzdAogICAgICAgICBwb3J0Ll9ydW5fc2NyaXB0ID0gcnVuX3NjcmlwdAog
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcnQuYXJjaGl0ZWN0dXJlKCksICd4ODYnKQogICAg
ICAgICBwb3J0Ll9idWlsZF9kcml2ZXIoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYu
YXJncywgWyctLWlvcy1zaW11bGF0b3InXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxm
LmFyZ3MsIFsnQVJDSFM9aTM4NicsICctLXNkaycsICdpcGhvbmVzaW11bGF0b3InXSkKIAogICAg
IGRlZiB0ZXN0XzY0Yml0KHNlbGYpOgogICAgICAgICAjIEFwcGxlIE1hYyBwb3J0IGlzIDY0LWJp
dCBieSBkZWZhdWx0CkBAIC04Miw3ICs4Miw3IEBAIGNsYXNzIGlvc1Rlc3QoZGFyd2luX3Rlc3Rj
YXNlLkRhcndpblRlc3QKIAogICAgICAgICBwb3J0Ll9ydW5fc2NyaXB0ID0gcnVuX3NjcmlwdAog
ICAgICAgICBwb3J0Ll9idWlsZF9kcml2ZXIoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNl
bGYuYXJncywgWyctLWlvcy1zaW11bGF0b3InXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz
ZWxmLmFyZ3MsIFsnLS1zZGsnLCAnaXBob25lc2ltdWxhdG9yJ10pCiAKICAgICBkZWYgdGVzdF9z
ZGtfbmFtZShzZWxmKToKICAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2VydmVyX3Byb2Nlc3MucHkJKHJldmlzaW9u
IDIxMTM2NikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vzcy5w
eQkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNTksNyArNjAs
NyBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6CiAgICAgaW5kZWZpbml0ZWx5LiBUaGUg
Y2xhc3MgYWxzbyBoYW5kbGVzIHRyYW5zcGFyZW50bHkgcmVzdGFydGluZyBwcm9jZXNzZXMKICAg
ICBhcyBuZWNlc3NhcnkgdG8ga2VlcCBpc3N1aW5nIGNvbW1hbmRzLiIiIgogCi0gICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVudj1Ob25lLCB1bml2ZXJzYWxfbmV3
bGluZXM9RmFsc2UsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2g9RmFsc2UpOgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBwb3J0X29iaiwgbmFtZSwgY21kLCBlbnY9Tm9uZSwgdW5pdmVyc2FsX25ld2xp
bmVzPUZhbHNlLCB0cmVhdF9ub19kYXRhX2FzX2NyYXNoPUZhbHNlLCB3b3JrZXJfbnVtYmVyPU5v
bmUpOgogICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydF9vYmoKICAgICAgICAgc2VsZi5fbmFtZSA9
IG5hbWUgICMgU2hvdWxkIGJlIHRoZSBjb21tYW5kIG5hbWUgKGUuZy4gRHVtcFJlbmRlclRyZWUs
IEltYWdlRGlmZikKICAgICAgICAgc2VsZi5fY21kID0gY21kCkBAIC0xMDMsNiArMTA0LDExIEBA
IGNsYXNzIFNlcnZlclByb2Nlc3Mob2JqZWN0KToKICAgICBkZWYgcHJvY2Vzc19uYW1lKHNlbGYp
OgogICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQogCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRl
ZiBfc2V0X2ZpbGVfbm9uYmxvY2tpbmcoZmlsZSk6CisgICAgICAgIGZsYWdzID0gZmNudGwuZmNu
dGwoZmlsZS5maWxlbm8oKSwgZmNudGwuRl9HRVRGTCkKKyAgICAgICAgZmNudGwuZmNudGwoZmls
ZS5maWxlbm8oKSwgZmNudGwuRl9TRVRGTCwgZmxhZ3MgfCBvcy5PX05PTkJMT0NLKQorCiAgICAg
ZGVmIF9zdGFydChzZWxmKToKICAgICAgICAgaWYgc2VsZi5fcHJvYzoKICAgICAgICAgICAgIHJh
aXNlIFZhbHVlRXJyb3IoIiVzIGFscmVhZHkgcnVubmluZyIgJSBzZWxmLl9uYW1lKQpAQCAtMTE3
LDEzICsxMjMsOSBAQCBjbGFzcyBTZXJ2ZXJQcm9jZXNzKG9iamVjdCk6CiAgICAgICAgICAgICB1
bml2ZXJzYWxfbmV3bGluZXM9c2VsZi5fdW5pdmVyc2FsX25ld2xpbmVzKQogICAgICAgICBzZWxm
Ll9waWQgPSBzZWxmLl9wcm9jLnBpZAogICAgICAgICBzZWxmLl9wb3J0LmZpbmRfc3lzdGVtX3Bp
ZChzZWxmLm5hbWUoKSwgc2VsZi5fcGlkKQotICAgICAgICBmZCA9IHNlbGYuX3Byb2Muc3Rkb3V0
LmZpbGVubygpCiAgICAgICAgIGlmIG5vdCBzZWxmLl91c2Vfd2luMzJfYXBpczoKLSAgICAgICAg
ICAgIGZsID0gZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkwpCi0gICAgICAgICAgICBmY250
bC5mY250bChmZCwgZmNudGwuRl9TRVRGTCwgZmwgfCBvcy5PX05PTkJMT0NLKQotICAgICAgICAg
ICAgZmQgPSBzZWxmLl9wcm9jLnN0ZGVyci5maWxlbm8oKQotICAgICAgICAgICAgZmwgPSBmY250
bC5mY250bChmZCwgZmNudGwuRl9HRVRGTCkKLSAgICAgICAgICAgIGZjbnRsLmZjbnRsKGZkLCBm
Y250bC5GX1NFVEZMLCBmbCB8IG9zLk9fTk9OQkxPQ0spCisgICAgICAgICAgICBzZWxmLl9zZXRf
ZmlsZV9ub25ibG9ja2luZyhzZWxmLl9wcm9jLnN0ZG91dCkKKyAgICAgICAgICAgIHNlbGYuX3Nl
dF9maWxlX25vbmJsb2NraW5nKHNlbGYuX3Byb2Muc3RkZXJyKQogCiAgICAgZGVmIF9oYW5kbGVf
cG9zc2libGVfaW50ZXJydXB0KHNlbGYpOgogICAgICAgICAiIiJUaGlzIHJvdXRpbmUgY2hlY2tz
IHRvIHNlZSBpZiB0aGUgcHJvY2VzcyBjcmFzaGVkIG9yIGV4aXRlZApJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzX21vY2sucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NlcnZlcl9wcm9jZXNzX21vY2sucHkJKHJldmlz
aW9uIDIxMTM2NikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zZXJ2ZXJfcHJvY2Vz
c19tb2NrLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKIAogY2xhc3MgTW9j
a1NlcnZlclByb2Nlc3Mob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmo9
Tm9uZSwgbmFtZT1Ob25lLCBjbWQ9Tm9uZSwgZW52PU5vbmUsIHVuaXZlcnNhbF9uZXdsaW5lcz1G
YWxzZSwgbGluZXM9Tm9uZSwgY3Jhc2hlZD1GYWxzZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IHBvcnRfb2JqPU5vbmUsIG5hbWU9Tm9uZSwgY21kPU5vbmUsIGVudj1Ob25lLCB1bml2ZXJzYWxf
bmV3bGluZXM9RmFsc2UsIGxpbmVzPU5vbmUsIGNyYXNoZWQ9RmFsc2UsIHdvcmtlcl9udW1iZXI9
Tm9uZSk6CiAgICAgICAgIHNlbGYudGltZWRfb3V0ID0gRmFsc2UKICAgICAgICAgc2VsZi5saW5l
cyA9IGxpbmVzIG9yIFtdCiAgICAgICAgIHNlbGYuY3Jhc2hlZCA9IGNyYXNoZWQKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zaW11bGF0b3JfcHJvY2Vzcy5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2ltdWxhdG9yX3Byb2Nlc3MucHkJKG5v
bmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9j
ZXNzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM0IEBACisjIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGVycm5vCitpbXBvcnQgb3MKK2ltcG9y
dCBzaWduYWwKK2ltcG9ydCB0aW1lCisKK2Zyb20gd2Via2l0cHkucG9ydC5zZXJ2ZXJfcHJvY2Vz
cyBpbXBvcnQgU2VydmVyUHJvY2VzcworZnJvbSB3ZWJraXRweS54Y29kZS5zaW11bGF0b3IgaW1w
b3J0IFNpbXVsYXRvcgorCisKK2NsYXNzIFNpbXVsYXRvclByb2Nlc3MoU2VydmVyUHJvY2Vzcyk6
CisKKyAgICBjbGFzcyBQb3BlbihvYmplY3QpOgorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBwaWQsIHN0ZGluLCBzdGRvdXQsIHN0ZGVycik6CisgICAgICAgICAgICBzZWxmLnN0ZGluID0g
c3RkaW4KKyAgICAgICAgICAgIHNlbGYuc3Rkb3V0ID0gc3Rkb3V0CisgICAgICAgICAgICBzZWxm
LnN0ZGVyciA9IHN0ZGVycgorICAgICAgICAgICAgc2VsZi5waWQgPSBwaWQKKyAgICAgICAgICAg
IHNlbGYucmV0dXJuY29kZSA9IE5vbmUKKworICAgICAgICBkZWYgcG9sbChzZWxmKToKKyAgICAg
ICAgICAgIGlmIHNlbGYucmV0dXJuY29kZToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5y
ZXR1cm5jb2RlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3Mua2lsbChzZWxm
LnBpZCwgMCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlcnI6CisgICAgICAgICAgICAg
ICAgYXNzZXJ0IGVyci5lcnJubyA9PSBlcnJuby5FU1JDSAorICAgICAgICAgICAgICAgIHNlbGYu
cmV0dXJuY29kZSA9IDEKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnJldHVybmNvZGUKKworICAg
ICAgICBkZWYgd2FpdChzZWxmKToKKyAgICAgICAgICAgIHdoaWxlIG5vdCBzZWxmLnBvbGwoKToK
KyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpICAjIEluIHNlY29uZHMKKyAgICAgICAg
ICAgIHJldHVybiBzZWxmLnJldHVybmNvZGUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0
X29iaiwgbmFtZSwgY21kLCBlbnY9Tm9uZSwgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNlLCB0cmVh
dF9ub19kYXRhX2FzX2NyYXNoPUZhbHNlLCB3b3JrZXJfbnVtYmVyPU5vbmUpOgorICAgICAgICBz
ZWxmLl9idW5kbGVfaWQgPSBwb3J0X29iai5hcHBfaWRlbnRpZmllcl9mcm9tX2J1bmRsZShjbWRb
MF0pCisgICAgICAgIHNlbGYuX2RldmljZSA9IFNpbXVsYXRvcihwb3J0X29iai5ob3N0KS5maW5k
X2RldmljZV9ieV91ZGlkKHBvcnRfb2JqLmRldmljZV9pZF9mb3Jfd29ya2VyX251bWJlcih3b3Jr
ZXJfbnVtYmVyKSkKKyAgICAgICAgaWYgbm90IHNlbGYuX2RldmljZS5pbnN0YWxsX2FwcChjbWRb
MF0pOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdGYWlsZWQgdG8gaW5zdGFsbCBh
cHAge30gb24gc2ltdWxhdG9yIGRldmljZSB7fScuZm9ybWF0KGNtZFswXSwgc2VsZi5fZGV2aWNl
LnVkaWQpKQorICAgICAgICBlbnZbJ0lQQ19JREVOVElGSUVSJ10gPSBzZWxmLl9idW5kbGVfaWQg
KyAnLScgKyBzZWxmLl9kZXZpY2UudWRpZAorCisgICAgICAgICMgVGhpcyBsb2NhdGlvbiBtYXRj
aGVzIHRoZSBsb2NhdGlvbiB1c2VkIGJ5IFdlYktpdFRlc3RSdW5uZXIgYW5kIER1bXBSZW5kZXJU
cmVlCisgICAgICAgICMgZm9yIHRoZSBvdGhlciBzaWRlIG9mIHRoZXNlIGZpZm9zLgorICAgICAg
ICBmaWxlX2xvY2F0aW9uID0gJy90bXAvJyArIGVudlsnSVBDX0lERU5USUZJRVInXQorICAgICAg
ICBzZWxmLl9pbl9wYXRoID0gZmlsZV9sb2NhdGlvbiArICdfSU4nCisgICAgICAgIHNlbGYuX291
dF9wYXRoID0gZmlsZV9sb2NhdGlvbiArICdfT1VUJworICAgICAgICBzZWxmLl9lcnJvcl9wYXRo
ID0gZmlsZV9sb2NhdGlvbiArICdfRVJST1InCisKKyAgICAgICAgc3VwZXIoU2ltdWxhdG9yUHJv
Y2Vzcywgc2VsZikuX19pbml0X18ocG9ydF9vYmosIG5hbWUsIGNtZCwgZW52LCB1bml2ZXJzYWxf
bmV3bGluZXMsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2gpCisKKyAgICBkZWYgX3Jlc2V0KHNlbGYp
OgorICAgICAgICBzdXBlcihTaW11bGF0b3JQcm9jZXNzLCBzZWxmKS5fcmVzZXQoKQorCisgICAg
ICAgICMgVW5saW5rcyBhcmUgbmVlZGVkIG9uIHJlc2V0IGluIHRoZSBldmVudCB0aGF0IHRoZSBQ
eXRob24gY29kZSB1bmV4cGVjdGVkbHkKKyAgICAgICAgIyBmYWlscyBiZXR3ZWVuIF9zdGFydCgp
IGFuZCBraWxsKCkuICBUaGlzIGNhbiBiZSBjYXVzZWQgYnkgYSBTSUdLSUxMIG9yIGEgY3Jhc2gu
CisgICAgICAgICMgVGhpcyBlbnN1cmVzIHRoYXQgb3MubWtmaWZvKCkgd2lsbCBub3QgYmUgb2Jz
dHJ1Y3RlZCBieSBwcmV2aW91cyBmaWZvcy4KKyAgICAgICAgIyBPdGhlciBmaWxlcyB3aWxsIHN0
aWxsIGNhdXNlIG9zLm1rZmlmbygpIHRvIGZhaWwuCisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IG9zLnVubGluayhzZWxmLl9pbl9wYXRoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBw
YXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnVubGluayhzZWxmLl9vdXRfcGF0aCkK
KyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworICAgICAgICB0cnk6CisgICAgICAg
ICAgICBvcy51bmxpbmsoc2VsZi5fZXJyb3JfcGF0aCkKKyAgICAgICAgZXhjZXB0OgorICAgICAg
ICAgICAgcGFzcworCisgICAgZGVmIF9zdGFydChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fcHJv
YzoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3t9IGFscmVhZHkgcnVubmluZycuZm9y
bWF0KHNlbGYuX25hbWUpKQorICAgICAgICBzZWxmLl9yZXNldCgpCisKKyAgICAgICAgRklGT19Q
RVJNSVNTSU9OX0ZMQUdTID0gMDYwMCAgIyBPbmx5IG93bmVyIGNhbiByZWFkIGFuZCB3cml0ZQor
ICAgICAgICBvcy5ta2ZpZm8oc2VsZi5faW5fcGF0aCwgRklGT19QRVJNSVNTSU9OX0ZMQUdTKQor
ICAgICAgICBvcy5ta2ZpZm8oc2VsZi5fb3V0X3BhdGgsIEZJRk9fUEVSTUlTU0lPTl9GTEFHUykK
KyAgICAgICAgb3MubWtmaWZvKHNlbGYuX2Vycm9yX3BhdGgsIEZJRk9fUEVSTUlTU0lPTl9GTEFH
UykKKworICAgICAgICBzdGRvdXQgPSBvcy5mZG9wZW4ob3Mub3BlbihzZWxmLl9vdXRfcGF0aCwg
b3MuT19SRE9OTFkgfCBvcy5PX05PTkJMT0NLKSwgJ3JiJykKKyAgICAgICAgc3RkZXJyID0gb3Mu
ZmRvcGVuKG9zLm9wZW4oc2VsZi5fZXJyb3JfcGF0aCwgb3MuT19SRE9OTFkgfCBvcy5PX05PTkJM
T0NLKSwgJ3JiJykKKworICAgICAgICBzZWxmLl9waWQgPSBzZWxmLl9kZXZpY2UubGF1bmNoX2Fw
cChzZWxmLl9idW5kbGVfaWQsIHNlbGYuX2NtZFsxOl0sIGVudj1zZWxmLl9lbnYpCisKKyAgICAg
ICAgZGVmIGhhbmRsZXIoc2lnbnVtLCBmcmFtZSk6CisgICAgICAgICAgICBhc3NlcnQgc2lnbnVt
ID09IHNpZ25hbC5TSUdBTFJNCisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1RpbWVkIG91
dCB3YWl0aW5nIGZvciBwcm9jZXNzIHRvIG9wZW4ge30nLmZvcm1hdChzZWxmLl9pbl9wYXRoKSkK
KyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgaGFuZGxlcikKKyAgICAgICAg
c2lnbmFsLmFsYXJtKDMpICAjIEluIHNlY29uZHMKKworICAgICAgICBzdGRpbiA9IE5vbmUKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgc3RkaW4gPSBvcGVuKHNlbGYuX2luX3BhdGgsICd3Jywg
MCkgICMgT3BlbmluZyB3aXRoIG5vIGJ1ZmZlcmluZywgbGlrZSBwb3BlbgorICAgICAgICBleGNl
cHQ6CisgICAgICAgICAgICAjIFdlIHNldCBzZWxmLl9wcm9jIGFzIF9yZXNldCgpIGFuZCBfa2ls
bCgpIGRlcGVuZCBvbiBpdC4KKyAgICAgICAgICAgIHNlbGYuX3Byb2MgPSBTaW11bGF0b3JQcm9j
ZXNzLlBvcGVuKHNlbGYuX3BpZCwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyKQorICAgICAgICAgICAg
aWYgc2VsZi5fcHJvYy5wb2xsKCkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5f
cmVzZXQoKQorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignQXBwIHt9IGNyYXNoZWQg
YmVmb3JlIHN0ZGluIGNvdWxkIGJlIGF0dGFjaGVkJy5mb3JtYXQob3MucGF0aC5iYXNlbmFtZShz
ZWxmLl9jbWRbMF0pKSkKKyAgICAgICAgICAgIHNlbGYuX2tpbGwoKQorICAgICAgICAgICAgc2Vs
Zi5fcmVzZXQoKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgc2lnbmFsLmFsYXJtKDApICAj
IENhbmNlbCBhbGFybQorCisgICAgICAgIHNlbGYuX3Byb2MgPSBTaW11bGF0b3JQcm9jZXNzLlBv
cGVuKHNlbGYuX3BpZCwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyKQorCisgICAgZGVmIF9raWxsKHNl
bGYpOgorICAgICAgICBzZWxmLl9kZXZpY2UudGVybWluYXRlX2FwcChzZWxmLl9idW5kbGVfaWQp
CisgICAgICAgIHN1cGVyKFNpbXVsYXRvclByb2Nlc3MsIHNlbGYpLl9raWxsKCkKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5CShyZXZpc2lvbiAyMTEzNjYp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvci5weQkod29ya2luZyBj
b3B5KQpAQCAtMTY3LDcgKzE2Nyw3IEBAIGNsYXNzIERldmljZShvYmplY3QpOgogICAgIFJlcHJl
c2VudHMgYSBDb3JlU2ltdWxhdG9yIGRldmljZSB1bmRlcm5lYXRoIGEgcnVudGltZQogICAgICIi
IgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHVkaWQsIGF2YWlsYWJsZSwgcnVudGlt
ZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHVkaWQsIGF2YWlsYWJsZSwgcnVudGlt
ZSwgaG9zdCk6CiAgICAgICAgICIiIgogICAgICAgICA6cGFyYW0gbmFtZTogVGhlIGRldmljZSBu
YW1lCiAgICAgICAgIDp0eXBlIG5hbWU6IHN0cgpAQCAtMTc3LDcgKzE3NywxMCBAQCBjbGFzcyBE
ZXZpY2Uob2JqZWN0KToKICAgICAgICAgOnR5cGUgYXZhaWxhYmxlOiBib29sCiAgICAgICAgIDpw
YXJhbSBydW50aW1lOiBUaGUgaU9TIFNpbXVsYXRvciBydW50aW1lIHRoYXQgaG9zdHMgdGhpcyBk
ZXZpY2UKICAgICAgICAgOnR5cGUgcnVudGltZTogUnVudGltZQorICAgICAgICA6cGFyYW0gaG9z
dDogVGhlIGhvc3Qgd2hpY2ggY2FuIHJ1biBjb21tYW5kIGxpbmUgY29tbWFuZHMKKyAgICAgICAg
OnR5cGUgaG9zdDogSG9zdAogICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5faG9zdCA9IGhvc3QK
ICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgICBzZWxmLnVkaWQgPSB1ZGlkCiAgICAg
ICAgIHNlbGYuYXZhaWxhYmxlID0gYXZhaWxhYmxlCkBAIC0yNjAsNiArMjYzLDMxIEBAIGNsYXNz
IERldmljZShvYmplY3QpOgogICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNz
RXJyb3I6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJyJ4Y3J1biBzaW1jdGwgZXJh
c2UiIGZhaWxlZDogZGV2aWNlIHN0YXRlIGlzIHt9Jy5mb3JtYXQoU2ltdWxhdG9yLmRldmljZV9z
dGF0ZSh1ZGlkKSkpCiAKKyAgICBkZWYgaW5zdGFsbF9hcHAoc2VsZiwgYXBwX3BhdGgpOgorICAg
ICAgICByZXR1cm4gbm90IHNlbGYuX2hvc3QuZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsneGNydW4n
LCAnc2ltY3RsJywgJ2luc3RhbGwnLCBzZWxmLnVkaWQsIGFwcF9wYXRoXSwgcmV0dXJuX2V4aXRf
Y29kZT1UcnVlKQorCisgICAgZGVmIGxhdW5jaF9hcHAoc2VsZiwgYnVuZGxlX2lkLCBhcmdzLCBl
bnY9Tm9uZSk6CisgICAgICAgIGVudmlyb25tZW50X3RvX3VzZSA9IHt9CisgICAgICAgIFNJTUNU
TF9FTlZfUFJFRklYID0gJ1NJTUNUTF9DSElMRF8nCisgICAgICAgIGZvciB2YWx1ZSBpbiAoZW52
IG9yIHt9KToKKyAgICAgICAgICAgIGlmIG5vdCB2YWx1ZS5zdGFydHN3aXRoKFNJTUNUTF9FTlZf
UFJFRklYKToKKyAgICAgICAgICAgICAgICBlbnZpcm9ubWVudF90b191c2VbU0lNQ1RMX0VOVl9Q
UkVGSVggKyB2YWx1ZV0gPSBlbnZbdmFsdWVdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgIGVudmlyb25tZW50X3RvX3VzZVt2YWx1ZV0gPSBlbnZbdmFsdWVdCisKKyAgICAgICAg
b3V0cHV0ID0gc2VsZi5faG9zdC5leGVjdXRpdmUucnVuX2NvbW1hbmQoCisgICAgICAgICAgICBb
J3hjcnVuJywgJ3NpbWN0bCcsICdsYXVuY2gnLCBzZWxmLnVkaWQsIGJ1bmRsZV9pZF0gKyBhcmdz
LAorICAgICAgICAgICAgZW52PWVudmlyb25tZW50X3RvX3VzZSwKKyAgICAgICAgKQorCisgICAg
ICAgIG1hdGNoID0gcmUubWF0Y2gocicoP1A8YnVuZGxlPlteOl0rKTogKD9QPHBpZD5cZCspXG4n
LCBvdXRwdXQpCisgICAgICAgIGlmIG5vdCBtYXRjaCBvciBtYXRjaC5ncm91cCgnYnVuZGxlJykg
IT0gYnVuZGxlX2lkOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdGYWlsZWQgdG8g
ZmluZCBwcm9jZXNzIGlkIGZvciB7fToge30nLmZvcm1hdChidW5kbGVfaWQsIG91dHB1dCkpCisg
ICAgICAgIHJldHVybiBpbnQobWF0Y2guZ3JvdXAoJ3BpZCcpKQorCisgICAgZGVmIHRlcm1pbmF0
ZV9hcHAoc2VsZiwgYnVuZGxlX2lkKToKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9ob3N0LmV4
ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ3hjcnVuJywgJ3NpbWN0bCcsICd0ZXJtaW5hdGUnLCBzZWxm
LnVkaWQsIGJ1bmRsZV9pZF0sIHJldHVybl9leGl0X2NvZGU9VHJ1ZSkKKwogICAgIGRlZiBfX2Vx
X18oc2VsZiwgb3RoZXIpOgogICAgICAgICByZXR1cm4gc2VsZi51ZGlkID09IG90aGVyLnVkaWQK
IApAQCAtNDc3LDcgKzUwNSw4IEBAIGNsYXNzIFNpbXVsYXRvcihvYmplY3QpOgogICAgICAgICAg
ICAgICAgIGRldmljZSA9IERldmljZShuYW1lPWRldmljZV9tYXRjaC5ncm91cCgnbmFtZScpLnJz
dHJpcCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZGlkPWRldmljZV9tYXRj
aC5ncm91cCgndWRpZCcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFi
bGU9ZGV2aWNlX21hdGNoLmdyb3VwKCdhdmFpbGFiaWxpdHknKSBpcyBOb25lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lPWN1cnJlbnRfcnVudGltZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZT1jdXJyZW50X3J1bnRpbWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3Q9c2VsZi5faG9zdCkKICAgICAgICAgICAgICAg
ICBjdXJyZW50X3J1bnRpbWUuZGV2aWNlcy5hcHBlbmQoZGV2aWNlKQogCiAgICAgZGVmIGRldmlj
ZV90eXBlKHNlbGYsIG5hbWU9Tm9uZSwgaWRlbnRpZmllcj1Ob25lKToK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300129</attachid>
            <date>2017-01-30 11:43:00 -0800</date>
            <delta_ts>2017-02-09 09:25:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165927-20170130114051.patch</filename>
            <type>text/plain</type>
            <size>141089</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMTM3NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDIyIEBACisyMDE3LTAxLTMwICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBSZW1vdmluZyBMYXlvdXRUZXN0UmVsYXkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTkyNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICBQYXJ0IDIKKworICAgICAgICBMYXlvdXRUZXN0
UmVsYXkgdXNlcyBTUEksIHNpbmNlIHJlY2VudCB2ZXJzaW9ucyBvZiB0aGUgaU9TIFNESyBhbGxv
dyBmb3IgaW5zdGFsbGluZyBhcHBzIG9uIHNpbXVsYXRvcnMgdGhyb3VnaCBzaW1jdGwsIHVzZSB0
aGlzIGZ1bmN0aW9uYWxpdHkgaW5zdGVhZC4KKworICAgICAgICAqIEJ1aWxkU2xhdmVTdXBwb3J0
L2J1aWx0LXByb2R1Y3QtYXJjaGl2ZToKKyAgICAgICAgKGFyY2hpdmVCdWlsdFByb2R1Y3QpOiBO
byBtb3JlIHNwZWNpYWwgY2FzZSBmb3IgaU9TIFNpbXVsYXRvciBwcm9kdWN0cy4KKyAgICAgICAg
KiBCdWlsZFNsYXZlU3VwcG9ydC9raWxsLW9sZC1wcm9jZXNzZXM6CisgICAgICAgIChtYWluKTog
UmVtb3ZlIExheW91dFRlc3RSZWxheSBmcm9tIGxpc3Qgb2YgcHJvY2Vzc2VzLgorICAgICAgICAq
IExheW91dFRlc3RSZWxheTogUmVtb3ZlZCBMYXlvdXRUZXN0UmVsYXkuCisgICAgICAgICogTWFr
ZWZpbGU6CisgICAgICAgICogU2NyaXB0cy9idWlsZC1sYXlvdXR0ZXN0cmVsYXk6IFJlbW92ZWQu
CisgICAgICAgICogU2NyaXB0cy9idWlsZC13ZWJraXQ6IFJlbW92ZWQgTGF5b3V0VGVzdFJlbGF5
IHJlZmVyZW5jZXMuCisKIDIwMTctMDEtMzAgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBw
bGUuY29tPgogCiAgICAgICAgIFVzZSBzaW1jdGwgaW5zdGVhZCBvZiBMYXlvdXRUZXN0UmVsYXkK
SW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmln
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9CYXNl
LnhjY29uZmlnCShyZXZpc2lvbiAyMTEzNzEpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29u
ZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwkobm9uZXhpc3RlbnQpCkBAIC0xLDY4ICswLDAgQEAK
LS8vIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0v
LwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLS8vIGFyZSBtZXQ6Ci0vLyAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
Ly8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotLy8gMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLS8vICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0vLyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotLy8gSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0vLyBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotLy8gQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0vLyBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0vLyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLS8vIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLS8vIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSAiLi4vLi4vLi4v
Li4vSW50ZXJuYWwvQ29uZmlndXJhdGlvbnMvSGF2ZUludGVybmFsU0RLLnhjY29uZmlnIgotCi1V
U0VfSU5URVJOQUxfU0RLID0gJChVU0VfSU5URVJOQUxfU0RLXyQoQ09ORklHVVJBVElPTikpOwot
VVNFX0lOVEVSTkFMX1NES19Qcm9kdWN0aW9uID0gWUVTOwotVVNFX0lOVEVSTkFMX1NES19EZWJ1
ZyA9ICQoSEFWRV9JTlRFUk5BTF9TREspOwotVVNFX0lOVEVSTkFMX1NES19SZWxlYXNlID0gJChI
QVZFX0lOVEVSTkFMX1NESyk7Ci0KLUNMQU5HX0NYWF9MQU5HVUFHRV9TVEFOREFSRCA9IGdudSsr
MHg7Ci1DTEFOR19FTkFCTEVfT0JKQ19BUkMgPSBZRVM7Ci1DTEFOR19XQVJOX0NYWDBYX0VYVEVO
U0lPTlMgPSBOTzsKLUhFQURFUl9TRUFSQ0hfUEFUSFMgPSAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
dXNyL2xvY2FsL2luY2x1ZGUgJChXRUJDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL0ZvcndhcmRp
bmdIZWFkZXJzICQoU1JDUk9PVCkvLi4vLi4vU291cmNlL0phdmFTY3JpcHRDb3JlL2ljdSAkKE5F
WFRfUk9PVCkvdXNyL2xvY2FsL2luY2x1ZGUvV2ViQ29yZVRlc3RTdXBwb3J0OwotR0NDX1BSRVBS
T0NFU1NPUl9ERUZJTklUSU9OUyA9ICQoREVCVUdfREVGSU5FUykgRU5BQkxFX0RBU0hCT0FSRF9T
VVBQT1JUOwotREVCVUdfSU5GT1JNQVRJT05fRk9STUFUID0gZHdhcmYtd2l0aC1kc3ltOwotUFJF
QklORElORyA9IE5PCi1HQ0NfQ19MQU5HVUFHRV9TVEFOREFSRCA9IGdudTk5Ci1HQ0NfRU5BQkxF
X0NQUF9FWENFUFRJT05TID0gTk87Ci1HQ0NfRU5BQkxFX0NQUF9SVFRJID0gTk87Ci1HQ0NfUFJF
Q09NUElMRV9QUkVGSVhfSEVBREVSID0gWUVTCi1HQ0NfVFJFQVRfV0FSTklOR1NfQVNfRVJST1JT
ID0gWUVTCi1HQ0NfVkVSU0lPTiA9IGNvbS5hcHBsZS5jb21waWxlcnMubGx2bS5jbGFuZy4xXzA7
Ci1HQ0NfV0FSTl9BQk9VVF9ERVBSRUNBVEVEX0ZVTkNUSU9OUyA9IE5PCi1HQ0NfV0FSTl9VTlVT
RURfRlVOQ1RJT04gPSBZRVMKLUdDQ19XQVJOX1VOVVNFRF9WQVJJQUJMRSA9IFlFUwotR0NDX1dB
Uk5fNjRfVE9fMzJfQklUX0NPTlZFUlNJT05bYXJjaD14ODZfNjRdID0gTk87Ci1XQVJOSU5HX0NG
TEFHUyA9IC1XYWxsIC1XIC1Xbm8tdW51c2VkLXBhcmFtZXRlciAtV3VuZGVmCi0KLURFQlVHX0RF
RklORVNfZGVidWcgPSA7Ci1ERUJVR19ERUZJTkVTX25vcm1hbCA9IE5ERUJVRzsKLURFQlVHX0RF
RklORVMgPSAkKERFQlVHX0RFRklORVNfJChDVVJSRU5UX1ZBUklBTlQpKTsKLQotVEFSR0VUX01B
Q19PU19YX1ZFUlNJT05fTUFKT1IgPSAkKFRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SJChN
QUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ6c3VmZml4OmlkZW50aWZpZXIpKTsKLVRBUkdFVF9NQUNf
T1NfWF9WRVJTSU9OX01BSk9SXzEwID0gMTAxMDAwOwotVEFSR0VUX01BQ19PU19YX1ZFUlNJT05f
TUFKT1JfMTEgPSAxMDExMDA7Ci1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUl8xMiA9IDEw
MTIwMDsKLVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SXzEzID0gMTAxMzAwOwotCi1TREtS
T09UID0gbWFjb3N4LmludGVybmFsOwotCi1TVVBQT1JURURfUExBVEZPUk1TID0gbWFjb3N4Owot
Ci1UT09MQ0hBSU5TID0gZGVmYXVsdDsKLQotT1RIRVJfQ0ZMQUdTID0gJChBU0FOX09USEVSX0NG
TEFHUyk7Ci1PVEhFUl9DUExVU1BMVVNGTEFHUyA9ICQoQVNBTl9PVEhFUl9DUExVU1BMVVNGTEFH
Uyk7Ci1PVEhFUl9MREZMQUdTID0gJChBU0FOX09USEVSX0xERkxBR1MpOwpJbmRleDogVG9vbHMv
TGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0RlYnVnUmVsZWFzZS54Y2NvbmZpZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMvRGVidWdSZWxl
YXNlLnhjY29uZmlnCShyZXZpc2lvbiAyMTEzNzEpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkv
Q29uZmlndXJhdGlvbnMvRGVidWdSZWxlYXNlLnhjY29uZmlnCShub25leGlzdGVudCkKQEAgLTEs
NDIgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotLy8gYXJlIG1ldDoKLS8v
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0vLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
Ly8gICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLS8vIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0vLyBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLS8v
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0vLyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLS8vIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLS8vIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotLy8gUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotLy8gT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRl
ICJCYXNlLnhjY29uZmlnIgotCi1BUkNIUyA9ICQoQVJDSFNfU1RBTkRBUkRfNjRfQklUKTsKLQot
VEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1IgPSAkKE1BQ19PU19YX1ZFUlNJT05fTUFKT1Ip
OwotCi1NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgPSAkKE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdF
VF8kKFRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SKSkKLU1BQ09TWF9ERVBMT1lNRU5UX1RB
UkdFVF8xMDEwMDAgPSAxMC4xMDsKLU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVF8xMDExMDAgPSAx
MC4xMTsKLU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVF8xMDEyMDAgPSAxMC4xMjsKLU1BQ09TWF9E
RVBMT1lNRU5UX1RBUkdFVF8xMDEzMDAgPSAxMC4xMzsKLQotRlJBTUVXT1JLX1NFQVJDSF9QQVRI
UyA9ICQoREVWRUxPUEVSX0RJUikvTGlicmFyeS9Qcml2YXRlRnJhbWV3b3JrczsKLUxEX1JVTlBB
VEhfU0VBUkNIX1BBVEhTID0gJChERVZFTE9QRVJfRElSKS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdv
cmtzOwotT1RIRVJfTERGTEFHUyA9IC1mcmFtZXdvcmsgQ29yZVNpbXVsYXRvciAtZnJhbWV3b3Jr
IEFwcEtpdDsKLQotU0RLUk9PVCA9ICQoU0RLUk9PVF9tYWNvc3hfJChVU0VfSU5URVJOQUxfU0RL
KSk7Ci1TREtST09UX21hY29zeF8gPSBtYWNvc3g7Ci1TREtST09UX21hY29zeF9ZRVMgPSBtYWNv
c3guaW50ZXJuYWw7CkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5
L0NvcmVTaW11bGF0b3JTUEkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkv
TGF5b3V0VGVzdFJlbGF5L0NvcmVTaW11bGF0b3JTUEkuaAkocmV2aXNpb24gMjExMzcxKQorKysg
VG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9Db3JlU2ltdWxhdG9yU1BJLmgJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1
LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIF9f
aGFzX2luY2x1ZGUoPENvcmVTaW11bGF0b3IvQ29yZVNpbXVsYXRvci5oPikKLQotLyogRklYTUU6
IFJlbW92ZSB0aGUgYmVsb3cgI2RlZmluZSBvbmNlIHdlIHJlcXVpcmUgWGNvZGUgNy4zIHdpdGgg
aU9TIDkuMyBTREsgb3IgbmV3ZXIuICovCi0jZGVmaW5lIF9fY29yZXNpbV91bmF2YWlsYWJsZV9t
c2cobXNnKQotI2ltcG9ydCA8Q29yZVNpbXVsYXRvci9Db3JlU2ltdWxhdG9yLmg+Ci0KLS8qIEZJ
WE1FOiBBbHdheXMgdXNlIFNpbVNlcnZpY2VDb250ZXh0IG9uY2Ugd2UgcmVxdWlyZSBYY29kZSA3
LjMgd2l0aCBpT1MgOS4zIFNESyBvciBuZXdlci4gKi8KLSNkZWZpbmUgVVNFX1NJTV9TRVJWSUNF
X0NPTlRFWFQgZGVmaW5lZChDT1JFU0lNX0FQSV9NQVhfQUxMT1dFRCkKLQotI2Vsc2UKLQotI2lt
cG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLSNkZWZpbmUgVVNFX1NJTV9TRVJWSUNF
X0NPTlRFWFQgMQotCi0jZGVmaW5lIGtTaW1EZXZpY2VMYXVuY2hBcHBsaWNhdGlvbkFyZ3VtZW50
cyBAImFyZ3VtZW50cyIKLSNkZWZpbmUga1NpbURldmljZUxhdW5jaEFwcGxpY2F0aW9uRW52aXJv
bm1lbnQgQCJlbnZpcm9ubWVudCIKLQotQGludGVyZmFjZSBTaW1EZXZpY2UgOiBOU09iamVjdAot
LSAoQk9PTClpbnN0YWxsQXBwbGljYXRpb246KE5TVVJMICopaW5zdGFsbFVSTCB3aXRoT3B0aW9u
czooTlNEaWN0aW9uYXJ5ICopb3B0aW9ucyBlcnJvcjooTlNFcnJvciAqIF9fYXV0b3JlbGVhc2lu
ZyAqKWVycm9yOwotLSAocGlkX3QpbGF1bmNoQXBwbGljYXRpb25XaXRoSUQ6KE5TU3RyaW5nICop
YnVuZGxlSUQgb3B0aW9uczooTlNEaWN0aW9uYXJ5ICopb3B0aW9ucyBlcnJvcjooTlNFcnJvciAq
IF9fYXV0b3JlbGVhc2luZyAqKWVycm9yOwotQGVuZAotCi1AaW50ZXJmYWNlIFNpbURldmljZVNl
dCA6IE5TT2JqZWN0Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBjb3B5KSBOU0RpY3Rpb25hcnkgKmRl
dmljZXNCeVVESUQ7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgU2ltU2VydmljZUNvbnRleHQgOiBOU09i
amVjdAotKyhTaW1TZXJ2aWNlQ29udGV4dCAqKXNoYXJlZFNlcnZpY2VDb250ZXh0Rm9yRGV2ZWxv
cGVyRGlyOihOU1N0cmluZyAqKWRldmVsb3BlckRpciBlcnJvcjooTlNFcnJvciAqIF9fYXV0b3Jl
bGVhc2luZyAqKWVycm9yOwotLShTaW1EZXZpY2VTZXQgKilkZWZhdWx0RGV2aWNlU2V0V2l0aEVy
cm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci1AZW5kCi0KLSNlbmRpZgpJ
bmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRQ
aXBlUmVsYXkuaAkocmV2aXNpb24gMjExMzcxKQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xh
eW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5oCShub25leGlzdGVudCkKQEAgLTEsMzYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgTFRQaXBlUmVsYXlfaAotI2RlZmluZSBMVFBpcGVSZWxh
eV9oCi0KLSNpbXBvcnQgIkxUUmVsYXkuaCIKLQotQGludGVyZmFjZSBMVFBpcGVSZWxheSA6IE5T
T2JqZWN0IDxMVFJlbGF5PgotQHByb3BlcnR5ICh3ZWFrKSBpZDxMVFJlbGF5RGVsZWdhdGU+IHJl
bGF5RGVsZWdhdGU7Ci0tIChpZClpbml0V2l0aFByZWZpeDooTlNTdHJpbmcgKilwcmVmaXg7Ci1A
ZW5kCi0KLSNlbmRpZgpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxh
eS9MVFBpcGVSZWxheS5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlv
dXRUZXN0UmVsYXkvTFRQaXBlUmVsYXkubQkocmV2aXNpb24gMjExMzcxKQorKysgVG9vbHMvTGF5
b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5tCShub25leGlzdGVudCkK
QEAgLTEsMTU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJMVFBpcGVSZWxheS5oIgot
Ci0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5o
PgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCi1AaW50ZXJmYWNlIExUUGlwZVJlbGF5ICgpCi1A
cHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TU3RyaW5nICpmaWZvUHJlZml4OwotQHByb3Bl
cnR5IChzdHJvbmcpIE5TT3V0cHV0U3RyZWFtICpzdGFuZGFyZElucHV0UGlwZTsKLUBwcm9wZXJ0
eSAoc3Ryb25nKSBOU0lucHV0U3RyZWFtICpzdGFuZGFyZE91dHB1dFBpcGU7Ci1AcHJvcGVydHkg
KHN0cm9uZykgTlNJbnB1dFN0cmVhbSAqc3RhbmRhcmRFcnJvclBpcGU7Ci0KLS0gKHZvaWQpY3Jl
YXRlRklGT3M7Ci0tICh2b2lkKWRlc3Ryb3lGSUZPczsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9u
IExUUGlwZVJlbGF5Ci0KLS0gKE5TU3RyaW5nICopaW5QaXBlUGF0aAotewotICAgIHJldHVybiBb
X2ZpZm9QcmVmaXggc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6QCJfSU4iXTsKLX0KLQotLSAoTlNT
dHJpbmcgKilvdXRQaXBlUGF0aAotewotICAgIHJldHVybiBbX2ZpZm9QcmVmaXggc3RyaW5nQnlB
cHBlbmRpbmdTdHJpbmc6QCJfT1VUIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopZXJyb3JQaXBlUGF0
aAotewotICAgIHJldHVybiBbX2ZpZm9QcmVmaXggc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6QCJf
RVJST1IiXTsKLX0KLQotLSAoTlNPdXRwdXRTdHJlYW0gKikgb3V0cHV0U3RyZWFtCi17Ci0gICAg
cmV0dXJuIF9zdGFuZGFyZElucHV0UGlwZTsKLX0KLQotLSAoaWQpaW5pdFdpdGhQcmVmaXg6KE5T
U3RyaW5nICopcHJlZml4Ci17Ci0gICAgaWYgKChzZWxmID0gW3N1cGVyIGluaXRdKSkgewotICAg
ICAgICBfZmlmb1ByZWZpeCA9IHByZWZpeDsKLSAgICAgICAgW3NlbGYgZGVzdHJveUZJRk9zXTsK
LSAgICB9Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpc2V0dXAKLXsKLSAgICBbc2Vs
ZiBkZXN0cm95RklGT3NdOwotICAgIFtzZWxmIGNyZWF0ZUZJRk9zXTsKLX0KLQotLSAodm9pZCl0
ZWFyRG93bgotewotICAgIFtzZWxmIGRlc3Ryb3lGSUZPc107Ci19Ci0KLS0odm9pZCkgY29ubmVj
dAotewotICAgIF9zdGFuZGFyZElucHV0UGlwZSA9IFtOU091dHB1dFN0cmVhbSBvdXRwdXRTdHJl
YW1Ub0ZpbGVBdFBhdGg6W3NlbGYgaW5QaXBlUGF0aF0gYXBwZW5kOllFU107Ci0gICAgX3N0YW5k
YXJkT3V0cHV0UGlwZSA9IFtOU0lucHV0U3RyZWFtIGlucHV0U3RyZWFtV2l0aEZpbGVBdFBhdGg6
W3NlbGYgb3V0UGlwZVBhdGhdXTsKLSAgICBfc3RhbmRhcmRFcnJvclBpcGUgPSBbTlNJbnB1dFN0
cmVhbSBpbnB1dFN0cmVhbVdpdGhGaWxlQXRQYXRoOltzZWxmIGVycm9yUGlwZVBhdGhdXTsKLQot
ICAgIFtbc2VsZiBzdGFuZGFyZElucHV0UGlwZV0gc2V0RGVsZWdhdGU6c2VsZl07Ci0gICAgW1tz
ZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gc2V0RGVsZWdhdGU6c2VsZl07Ci0gICAgW1tzZWxmIHN0
YW5kYXJkRXJyb3JQaXBlXSBzZXREZWxlZ2F0ZTpzZWxmXTsKLQotICAgIFtbc2VsZiBzdGFuZGFy
ZE91dHB1dFBpcGVdIHNjaGVkdWxlSW5SdW5Mb29wOltOU1J1bkxvb3AgbWFpblJ1bkxvb3BdIGZv
ck1vZGU6TlNEZWZhdWx0UnVuTG9vcE1vZGVdOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yUGlw
ZV0gc2NoZWR1bGVJblJ1bkxvb3A6W05TUnVuTG9vcCBtYWluUnVuTG9vcF0gZm9yTW9kZTpOU0Rl
ZmF1bHRSdW5Mb29wTW9kZV07Ci0KLSAgICBbW3NlbGYgc3RhbmRhcmRJbnB1dFBpcGVdIG9wZW5d
OwotICAgIFtbc2VsZiBzdGFuZGFyZE91dHB1dFBpcGVdIG9wZW5dOwotICAgIFtbc2VsZiBzdGFu
ZGFyZEVycm9yUGlwZV0gb3Blbl07Ci0KLSAgICBbW3NlbGYgcmVsYXlEZWxlZ2F0ZV0gZGlkQ29u
bmVjdF07Ci19Ci0KLS0gKHZvaWQpZGlzY29ubmVjdAotewotICAgIFtbc2VsZiBzdGFuZGFyZE91
dHB1dFBpcGVdIGNsb3NlXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRFcnJvclBpcGVdIGNsb3NlXTsK
LSAgICBbW3NlbGYgc3RhbmRhcmRJbnB1dFBpcGVdIGNsb3NlXTsKLSAgICBbW3NlbGYgcmVsYXlE
ZWxlZ2F0ZV0gZGlkRGlzY29ubmVjdF07Ci19Ci0KLS0gKHZvaWQpY3JlYXRlRklGT3MKLXsKLSAg
ICBta2ZpZm8oW1tzZWxmIGluUGlwZVBhdGhdIFVURjhTdHJpbmddLCAwNjY2KTsKLSAgICBta2Zp
Zm8oW1tzZWxmIG91dFBpcGVQYXRoXSBVVEY4U3RyaW5nXSwgMDY2Nik7Ci0gICAgbWtmaWZvKFtb
c2VsZiBlcnJvclBpcGVQYXRoXSBVVEY4U3RyaW5nXSwgMDY2Nik7Ci19Ci0KLS0gKHZvaWQpZGVz
dHJveUZJRk9zCi17Ci0gICAgdW5saW5rKFtbc2VsZiBpblBpcGVQYXRoXSBVVEY4U3RyaW5nXSk7
Ci0gICAgdW5saW5rKFtbc2VsZiBvdXRQaXBlUGF0aF0gVVRGOFN0cmluZ10pOwotICAgIHVubGlu
ayhbW3NlbGYgZXJyb3JQaXBlUGF0aF0gVVRGOFN0cmluZ10pOwotfQotCi0tICh2b2lkKSByZWxh
eVN0cmVhbTooTlNJbnB1dFN0cmVhbSAqKXN0cmVhbQotewotICAgIHVpbnQ4X3QgYnl0ZXNbMTAy
NF07Ci0gICAgTlNJbnRlZ2VyIGJ5dGVzUmVhZCA9IFtzdHJlYW0gcmVhZDpieXRlcyBtYXhMZW5n
dGg6MTAyNF07Ci0gICAgTlNEYXRhICpkYXRhID0gW05TRGF0YSBkYXRhV2l0aEJ5dGVzOmJ5dGVz
IGxlbmd0aDpieXRlc1JlYWRdOwotCi0gICAgaWYgKHN0cmVhbSA9PSBbc2VsZiBzdGFuZGFyZE91
dHB1dFBpcGVdKQotICAgICAgICBbW3NlbGYgcmVsYXlEZWxlZ2F0ZV0gZGlkUmVjZWl2ZVN0ZG91
dERhdGE6ZGF0YV07Ci0gICAgZWxzZQotICAgICAgICBbW3NlbGYgcmVsYXlEZWxlZ2F0ZV0gZGlk
UmVjZWl2ZVN0ZGVyckRhdGE6ZGF0YV07Ci19Ci0KLS0gKHZvaWQpc3RyZWFtOihOU1N0cmVhbSAq
KWFTdHJlYW0gaGFuZGxlRXZlbnQ6KE5TU3RyZWFtRXZlbnQpZXZlbnRDb2RlCi17Ci0gICAgc3dp
dGNoIChldmVudENvZGUpIHsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnROb25lOgotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnRIYXNCeXRlc0F2YWlsYWJsZToKLSAgICAgICAg
W3NlbGYgcmVsYXlTdHJlYW06KE5TSW5wdXRTdHJlYW0gKilhU3RyZWFtXTsKLSAgICBjYXNlIE5T
U3RyZWFtRXZlbnRIYXNTcGFjZUF2YWlsYWJsZToKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBO
U1N0cmVhbUV2ZW50T3BlbkNvbXBsZXRlZDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOU1N0
cmVhbUV2ZW50RW5kRW5jb3VudGVyZWQ6Ci0gICAgICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBk
aWRDcmFzaFdpdGhNZXNzYWdlOm5pbF07Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlNTdHJl
YW1FdmVudEVycm9yT2NjdXJyZWQ6Ci0gICAgICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRD
cmFzaFdpdGhNZXNzYWdlOltbYVN0cmVhbSBzdHJlYW1FcnJvcl0gZGVzY3JpcHRpb25dXTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1AZW5kCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVs
YXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRU
ZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXkuaAkocmV2aXNpb24gMjExMzcxKQorKysg
VG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5LmgJKG5vbmV4aXN0
ZW50KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBMVFJlbGF5X2gKLSNk
ZWZpbmUgTFRSZWxheV9oCi0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi1A
cHJvdG9jb2wgTFRSZWxheURlbGVnYXRlIDxOU09iamVjdD4KLS0gKHZvaWQpZGlkQ29ubmVjdDsK
LS0gKHZvaWQpZGlkRGlzY29ubmVjdDsKLS0gKHZvaWQpZGlkQ3Jhc2hXaXRoTWVzc2FnZTooTlNT
dHJpbmcgKiltZXNzYWdlOwotLSAodm9pZClkaWRSZWNlaXZlU3Rkb3V0RGF0YTooTlNEYXRhICop
ZGF0YTsKLS0gKHZvaWQpZGlkUmVjZWl2ZVN0ZGVyckRhdGE6KE5TRGF0YSAqKWRhdGE7Ci1AZW5k
Ci0KLUBwcm90b2NvbCBMVFJlbGF5IDxOU09iamVjdCwgTlNTdHJlYW1EZWxlZ2F0ZT4KLS0gKHZv
aWQpc2V0dXA7Ci0tICh2b2lkKXRlYXJEb3duOwotLSAodm9pZCljb25uZWN0OwotLSAodm9pZClk
aXNjb25uZWN0OwotQHByb3BlcnR5ICh3ZWFrKSBpZDxMVFJlbGF5RGVsZWdhdGU+IHJlbGF5RGVs
ZWdhdGU7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TT3V0cHV0U3RyZWFtICpvdXRw
dXRTdHJlYW07Ci1AZW5kCi0KLSNlbmRpZgpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xh
eW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xh
eW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIuaAkocmV2aXNp
b24gMjExMzcxKQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJl
bGF5Q29udHJvbGxlci5oCShub25leGlzdGVudCkKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0jaWZuZGVmIExUUmVsYXlDb250cm9sbGVyX2gKLSNkZWZpbmUgTFRSZWxheUNvbnRyb2xsZXJf
aAotCi0jaW1wb3J0ICJMVFJlbGF5LmgiCi0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlv
bi5oPgotCi1AY2xhc3MgU2ltRGV2aWNlOwotCi1AaW50ZXJmYWNlIExUUmVsYXlDb250cm9sbGVy
IDogTlNPYmplY3QgPExUUmVsYXlEZWxlZ2F0ZT4KLS0gKGlkKWluaXRXaXRoRGV2aWNlOihTaW1E
ZXZpY2UgKilkZXZpY2UgcHJvZHVjdERpcjooTlNTdHJpbmcgKilwcm9kdWN0RGlyIGFwcFBhdGg6
KE5TU3RyaW5nICopYXBwUGF0aCBkZXZpY2VVRElEOihOU1VVSUQgKil1ZGlkIGR1bXBUb29sQXJn
dW1lbnRzOihOU0FycmF5ICopYXJndW1lbnRzOwotLSAodm9pZClzdGFydDsKLS0gKHZvaWQpZmlu
aXNoOwotQGVuZAotCi0jZW5kaWYKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRU
ZXN0UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRU
ZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLm0JKHJldmlzaW9uIDIx
MTM3MSkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheUNv
bnRyb2xsZXIubQkobm9uZXhpc3RlbnQpCkBAIC0xLDI3MiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2ltcG9ydCAiTFRSZWxheUNvbnRyb2xsZXIuaCIKLQotI2ltcG9ydCAiQ29yZVNpbXVsYXRvclNQ
SS5oIgotI2ltcG9ydCAiTFRQaXBlUmVsYXkuaCIKLSNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4K
LSNpbXBvcnQgPGNydF9leHRlcm5zLmg+Ci0KLUBpbnRlcmZhY2UgTFRSZWxheUNvbnRyb2xsZXIg
KCkKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgZGlzcGF0Y2hfc291cmNlX3Qgc3RhbmRh
cmRJbnB1dERpc3BhdGNoU291cmNlOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU0Zp
bGVIYW5kbGUgKnN0YW5kYXJkT3V0cHV0OwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBO
U0ZpbGVIYW5kbGUgKnN0YW5kYXJkRXJyb3I7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcp
IE5TU3RyaW5nICppcGNJZGVudGlmaWVyOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBO
U1N0cmluZyAqYXBwQnVuZGxlSWRlbnRpZmllcjsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9u
ZykgTlNTdHJpbmcgKmFwcFBhdGg7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TVVVJ
RCAqZGV2aWNlVURJRDsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNBcnJheSAqZHVt
cFRvb2xBcmd1bWVudHM7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TU3RyaW5nICpw
cm9kdWN0RGlyOwotQHByb3BlcnR5IChzdHJvbmcpIFNpbURldmljZSAqZGV2aWNlOwotQHByb3Bl
cnR5IChzdHJvbmcpIGlkPExUUmVsYXk+IHJlbGF5OwotQHByb3BlcnR5IHBpZF90IHBpZDsKLUBw
cm9wZXJ0eSAoc3Ryb25nKSBkaXNwYXRjaF9zb3VyY2VfdCBhcHBEaXNwYXRjaFNvdXJjZTsKLUBl
bmQKLQotQGltcGxlbWVudGF0aW9uIExUUmVsYXlDb250cm9sbGVyCi0KLS0gKGlkKWluaXRXaXRo
RGV2aWNlOihTaW1EZXZpY2UgKilkZXZpY2UgcHJvZHVjdERpcjooTlNTdHJpbmcgKilwcm9kdWN0
RGlyIGFwcFBhdGg6KE5TU3RyaW5nICopYXBwUGF0aCBkZXZpY2VVRElEOihOU1VVSUQgKil1ZGlk
IGR1bXBUb29sQXJndW1lbnRzOihOU0FycmF5ICopYXJndW1lbnRzCi17Ci0gICAgaWYgKChzZWxm
ID0gW3N1cGVyIGluaXRdKSkgewotICAgICAgICBfZGV2aWNlID0gZGV2aWNlOwotICAgICAgICBf
cHJvZHVjdERpciA9IHByb2R1Y3REaXI7Ci0gICAgICAgIF9hcHBQYXRoID0gYXBwUGF0aDsKLSAg
ICAgICAgX2FwcEJ1bmRsZUlkZW50aWZpZXIgPSBbW05TQnVuZGxlIGJ1bmRsZVdpdGhQYXRoOmFw
cFBhdGhdIGJ1bmRsZUlkZW50aWZpZXJdOwotICAgICAgICBfZGV2aWNlVURJRCA9IHVkaWQ7Ci0g
ICAgICAgIF9kdW1wVG9vbEFyZ3VtZW50cyA9IGFyZ3VtZW50czsKLSAgICAgICAgX3N0YW5kYXJk
SW5wdXREaXNwYXRjaFNvdXJjZSA9IGRpc3BhdGNoX3NvdXJjZV9jcmVhdGUoRElTUEFUQ0hfU09V
UkNFX1RZUEVfUkVBRCwgU1RESU5fRklMRU5PLCAwLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgp
KTsKLSAgICAgICAgX3N0YW5kYXJkT3V0cHV0ID0gW05TRmlsZUhhbmRsZSBmaWxlSGFuZGxlV2l0
aFN0YW5kYXJkT3V0cHV0XTsKLSAgICAgICAgX3N0YW5kYXJkRXJyb3IgPSBbTlNGaWxlSGFuZGxl
IGZpbGVIYW5kbGVXaXRoU3RhbmRhcmRFcnJvcl07Ci0KLSAgICAgICAgZGlzcGF0Y2hfc291cmNl
X3NldF9ldmVudF9oYW5kbGVyKF9zdGFuZGFyZElucHV0RGlzcGF0Y2hTb3VyY2UsIF57Ci0gICAg
ICAgICAgICB1aW50OF90IGJ1ZmZlclsxMDI0XTsKLSAgICAgICAgICAgIHNzaXplX3QgbGVuID0g
cmVhZChTVERJTl9GSUxFTk8sIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOwotICAgICAgICAgICAg
aWYgKGxlbiA+IDApIHsKLSAgICAgICAgICAgICAgICBAdHJ5IHsKLSAgICAgICAgICAgICAgICAg
ICAgW1tbc2VsZiByZWxheV0gb3V0cHV0U3RyZWFtXSB3cml0ZTpidWZmZXIgbWF4TGVuZ3RoOmxl
bl07Ci0gICAgICAgICAgICAgICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICplKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhlIGR1bXAgdG9vbCBjcmFzaGVkLiBUaW1l
IHRvIGRpZS4KLSAgICAgICAgICAgICAgICAgICAgW3NlbGYgZGlkQ3Jhc2hXaXRoTWVzc2FnZTpu
aWxdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgLy8gRU9GIFJlY2VpdmVkIG9uIHRoZSByZWxheSdzIHN0YW5kYXJkIGlucHV0LgotICAg
ICAgICAgICAgICAgIFtzZWxmIGZpbmlzaF07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwot
Ci0gICAgICAgIF9yZWxheSA9IFtbTFRQaXBlUmVsYXkgYWxsb2NdIGluaXRXaXRoUHJlZml4OltA
Ii90bXAiIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpzZWxmLmlwY0lkZW50aWZpZXJd
XTsKLSAgICAgICAgW19yZWxheSBzZXRSZWxheURlbGVnYXRlOnNlbGZdOwotICAgIH0KLSAgICBy
ZXR1cm4gc2VsZjsKLX0KLQotLSAoTlNTdHJpbmcgKilpcGNJZGVudGlmaWVyCi17Ci0gICAgcmV0
dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAtJUAiLCBzZWxmLmFwcEJ1bmRsZUlk
ZW50aWZpZXIsIHNlbGYuZGV2aWNlVURJRC5VVUlEU3RyaW5nXTsKLX0KLQotLSAoTlNTdHJpbmcg
Kilwcm9jZXNzTmFtZQotewotICAgIHJldHVybiBbc2VsZi5hcHBCdW5kbGVJZGVudGlmaWVyIGNv
bXBvbmVudHNTZXBhcmF0ZWRCeVN0cmluZzpAIi4iXS5sYXN0T2JqZWN0OwotfQotCi0tICh2b2lk
KWRpZFJlY2VpdmVTdGRvdXREYXRhOihOU0RhdGEgKilkYXRhCi17Ci0gICAgQHRyeSB7Ci0gICAg
ICAgIFtbc2VsZiBzdGFuZGFyZE91dHB1dF0gd3JpdGVEYXRhOmRhdGFdOwotICAgIH0gQGNhdGNo
IChOU0V4Y2VwdGlvbiAqZXhjZXB0aW9uKSB7Ci0gICAgICAgIC8vIE5TRmlsZUhhbmRsZU9wZXJh
dGlvbkV4Y2VwdGlvbgotICAgICAgICAvLyBCcm9rZW4gcGlwZSAtIHRoZSB0ZXN0IGhhcm5lc3Mg
c3RvcHBlZCBsaXN0ZW5pbmcgdG8gdXMsCi0gICAgICAgIC8vIHByb2JhYmx5IGJlY2F1c2Ugd2Ug
dGltZWQgb3V0IG9yIGEgcnVuIHdhcyBjYW5jZWxlZC4KLSAgICAgICAgZXhpdChFWElUX0ZBSUxV
UkUpOwotICAgIH0KLX0KLQotLSAodm9pZClkaWRSZWNlaXZlU3RkZXJyRGF0YTooTlNEYXRhICop
ZGF0YQotewotICAgIEB0cnkgewotICAgICAgICBbW3NlbGYgc3RhbmRhcmRFcnJvcl0gd3JpdGVE
YXRhOmRhdGFdOwotICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAqZXhjZXB0aW9uKSB7Ci0gICAg
ICAgIC8vIE5TRmlsZUhhbmRsZU9wZXJhdGlvbkV4Y2VwdGlvbgotICAgICAgICAvLyBCcm9rZW4g
cGlwZSAtIHRoZSB0ZXN0IGhhcm5lc3Mgc3RvcHBlZCBsaXN0ZW5pbmcgdG8gdXMsCi0gICAgICAg
IC8vIHByb2JhYmx5IGJlY2F1c2Ugd2UgdGltZWQgb3V0IG9yIGEgcnVuIHdhcyBjYW5jZWxlZC4K
LSAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0KLX0KLQotLSAodm9pZClkaWREaXNj
b25uZWN0Ci17Ci0gICAgZGlzcGF0Y2hfc3VzcGVuZChbc2VsZiBzdGFuZGFyZElucHV0RGlzcGF0
Y2hTb3VyY2VdKTsKLX0KLQotLSAodm9pZClkaWRDb25uZWN0Ci17Ci0gICAgZGlzcGF0Y2hfcmVz
dW1lKFtzZWxmIHN0YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJjZV0pOwotfQotCi0tICh2b2lkKWRp
ZENyYXNoV2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZQotewotICAgIFtbc2VsZiByZWxh
eV0gZGlzY29ubmVjdF07Ci0gICAgTlNTdHJpbmcgKmNyYXNoTWVzc2FnZSA9IFtOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiXG4jQ1JBU0hFRCAtICVAIChwaWQgJWQpXG4iLCBbc2VsZiBwcm9j
ZXNzTmFtZV0sIFtzZWxmIHBpZF1dOwotCi0gICAgaWYgKG1lc3NhZ2UpCi0gICAgICAgIGNyYXNo
TWVzc2FnZSA9IFtjcmFzaE1lc3NhZ2Ugc3RyaW5nQnlBcHBlbmRpbmdGb3JtYXQ6QCIlQFxuIiwg
bWVzc2FnZV07Ci0KLSAgICBbW3NlbGYgc3RhbmRhcmRFcnJvcl0gd3JpdGVEYXRhOltjcmFzaE1l
c3NhZ2UgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddXTsKLSAgICBbW3Nl
bGYgc3RhbmRhcmRFcnJvcl0gY2xvc2VGaWxlXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRd
IGNsb3NlRmlsZV07Ci0gICAgZXhpdChFWElUX0ZBSUxVUkUpOwotfQotCi0tICh2b2lkKWluc3Rh
bGxBcHAKLXsKLSAgICBOU0RpY3Rpb25hcnkgKmluc3RhbGxPcHRpb25zID0gQHsKLSAgICAgICAg
KE5TU3RyaW5nICopa0NGQnVuZGxlSWRlbnRpZmllcktleTogc2VsZi5hcHBCdW5kbGVJZGVudGlm
aWVyLAotICAgIH07Ci0KLSAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKLSAgICBCT09MIGluc3Rh
bGxlZCA9IFtzZWxmLmRldmljZSBpbnN0YWxsQXBwbGljYXRpb246W05TVVJMIGZpbGVVUkxXaXRo
UGF0aDpzZWxmLmFwcFBhdGhdIHdpdGhPcHRpb25zOmluc3RhbGxPcHRpb25zIGVycm9yOiZlcnJv
cl07Ci0gICAgaWYgKCFpbnN0YWxsZWQpIHsKLSAgICAgICAgTlNMb2coQCJDb3VsZG4ndCBpbnN0
YWxsICVAOiAlQCIsIHNlbGYuYXBwUGF0aCwgZXJyb3IuZGVzY3JpcHRpb24pOwotICAgICAgICBl
eGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotfQotCi0tICh2b2lkKWtpbGxBcHAKLXsKLSAgICBk
aXNwYXRjaF9zb3VyY2VfdCBkaXNwYXRjaCA9IFtzZWxmIGFwcERpc3BhdGNoU291cmNlXTsKLQot
ICAgIGlmIChkaXNwYXRjaCkKLSAgICAgICAgZGlzcGF0Y2hfc291cmNlX2NhbmNlbChkaXNwYXRj
aCk7Ci0KLSAgICBpZiAoW3NlbGYgcGlkXSA+IDEpIHsKLSAgICAgICAga2lsbChzZWxmLnBpZCwg
U0lHS0lMTCk7Ci0gICAgICAgIFtzZWxmIHNldFBpZDotMV07Ci0gICAgfQotICAgIFtzZWxmIHNl
dEFwcERpc3BhdGNoU291cmNlOm5pbF07Ci19Ci0KLS0gKE5TRGljdGlvbmFyeSAqKV9lbnZpcm9u
bWVudFZhcmlhYmxlcwotewotICAgIHN0YXRpYyBOU0RpY3Rpb25hcnkgKmVudmlyb25tZW50VmFy
aWFibGVzOwotICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZTsKLQotICAgIGRpc3BhdGNo
X29uY2UoJm9uY2UsIF57Ci0gICAgICAgIE5TU3RyaW5nICpwcm9kdWN0RGlyZWN0b3J5ID0gW3Nl
bGYgcHJvZHVjdERpcl07Ci0KLSAgICAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqZGljdGlvbmFy
eSA9IFtAewotICAgICAgICAgICAgQCJJUENfSURFTlRJRklFUiI6IHNlbGYuaXBjSWRlbnRpZmll
ciwKLSAgICAgICAgICAgIEAiRFlMRF9GUkFNRVdPUktfUEFUSCI6IHByb2R1Y3REaXJlY3Rvcnks
Ci0gICAgICAgICAgICBAIl9fWFBDX0RZTERfRlJBTUVXT1JLX1BBVEgiOiBwcm9kdWN0RGlyZWN0
b3J5LAotICAgICAgICAgICAgQCJEWUxEX0xJQlJBUllfUEFUSCI6IHByb2R1Y3REaXJlY3Rvcnks
Ci0gICAgICAgICAgICBAIl9fWFBDX0RZTERfTElCUkFSWV9QQVRIIjogcHJvZHVjdERpcmVjdG9y
eSwKLSAgICAgICAgfSBtdXRhYmxlQ29weV07Ci0KLSAgICAgICAgZm9yIChOU1N0cmluZyAqa2V5
TmFtZSBpbiBAW0AiRFlMRF9JTlNFUlRfTElCUkFSSUVTIiwgQCJNYWxsb2NTdGFja0xvZ2dpbmci
LCBAIkxPQ0FMX1JFU09VUkNFX1JPT1QiLCBAIkRVTVBSRU5ERVJUUkVFX1RFTVAiXSkgewotICAg
ICAgICAgICAgY29uc3QgY2hhciogdmFsdWUgPSBnZXRlbnYoW2tleU5hbWUgVVRGOFN0cmluZ10p
OwotICAgICAgICAgICAgaWYgKHZhbHVlICYmIHN0cmxlbih2YWx1ZSkpIHsKLSAgICAgICAgICAg
ICAgICBOU1N0cmluZyAqbnNWYWx1ZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzp2
YWx1ZV07Ci0gICAgICAgICAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0Om5zVmFsdWUgZm9y
S2V5OmtleU5hbWVdOwotICAgICAgICAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpuc1Zh
bHVlIGZvcktleTpbQCJfX1hQQ18iIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOmtleU5hbWVdXTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoY2hhcioqIGVudnAgPSAq
X05TR2V0RW52aXJvbigpOyAqZW52cDsgZW52cCsrKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFy
KiBlbnYgPSAqZW52cDsKLSAgICAgICAgICAgIGlmICghc3RybmNtcCgiSlNDXyIsIGVudiwgNCkg
fHwgIXN0cm5jbXAoIl9fWFBDX0pTQ18iLCBlbnYsIDEwKSkgewotICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIGVxdWFsID0gc3RyY2hyKGVudiwgJz0nKTsKLSAgICAgICAgICAgICAgICBpZiAo
IWVxdWFsKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5TTG9nKEAiTWlzc2luZyAnPScgaW4gZW52
IHZhciAnJXMnIiwgZW52KTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhLZXlM
ZW5ndGggPSAyNTY7Ci0gICAgICAgICAgICAgICAgc2l6ZV90IGtleUxlbmd0aCA9IGVxdWFsIC0g
ZW52OwotICAgICAgICAgICAgICAgIGlmIChrZXlMZW5ndGggPj0gbWF4S2V5TGVuZ3RoKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIE5TTG9nKEAiRW52IHZhciAnJXMnIGlzIHRvbyBsb25nIiwgZW52
KTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgY2hhciBrZXlbbWF4S2V5TGVuZ3RoXTsKLSAgICAgICAgICAgICAgICBz
dHJuY3B5KGtleSwgZW52LCBrZXlMZW5ndGgpOwotICAgICAgICAgICAgICAgIGtleVtrZXlMZW5n
dGhdID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB2YWx1ZSA9IGVxdWFsICsg
MTsKLQotICAgICAgICAgICAgICAgIE5TU3RyaW5nICpuc0tleSA9IFtOU1N0cmluZyBzdHJpbmdX
aXRoVVRGOFN0cmluZzprZXldOwotICAgICAgICAgICAgICAgIE5TU3RyaW5nICpuc1ZhbHVlID0g
W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnZhbHVlXTsKLSAgICAgICAgICAgICAgICBb
ZGljdGlvbmFyeSBzZXRPYmplY3Q6bnNWYWx1ZSBmb3JLZXk6bnNLZXldOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXMgPSBbZGljdGlvbmFy
eSBjb3B5XTsKLSAgICB9KTsKLQotICAgIHJldHVybiBlbnZpcm9ubWVudFZhcmlhYmxlczsKLX0K
LQotLSAodm9pZClsYXVuY2hBcHAKLXsKLSAgICBOU0RpY3Rpb25hcnkgKmxhdW5jaE9wdGlvbnMg
PSBAewotICAgICAgICBrU2ltRGV2aWNlTGF1bmNoQXBwbGljYXRpb25FbnZpcm9ubWVudDogW3Nl
bGYgX2Vudmlyb25tZW50VmFyaWFibGVzXSwKLSAgICAgICAga1NpbURldmljZUxhdW5jaEFwcGxp
Y2F0aW9uQXJndW1lbnRzOiBbc2VsZiBkdW1wVG9vbEFyZ3VtZW50c10sCi0gICAgfTsKLQotICAg
IE5TRXJyb3IgKmVycm9yOwotICAgIHBpZF90IHBpZCA9IFtzZWxmLmRldmljZSBsYXVuY2hBcHBs
aWNhdGlvbldpdGhJRDpzZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIgb3B0aW9uczpsYXVuY2hPcHRp
b25zIGVycm9yOiZlcnJvcl07Ci0KLSAgICBpZiAocGlkIDwgMCkgewotICAgICAgICBOU0xvZyhA
IkNvdWxkbid0IGxhdW5jaCAlQDogJUAiLCBzZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIsIGVycm9y
LmRlc2NyaXB0aW9uKTsKLSAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0KLQotICAg
IFtzZWxmIHNldFBpZDpwaWRdOwotCi0gICAgZGlzcGF0Y2hfcXVldWVfdCBxdWV1ZSA9IGRpc3Bh
dGNoX2dldF9tYWluX3F1ZXVlKCk7Ci0gICAgZGlzcGF0Y2hfc291cmNlX3Qgc2ltdWxhdG9yQXBw
RXhpdERpc3BhdGNoU291cmNlID0gZGlzcGF0Y2hfc291cmNlX2NyZWF0ZShESVNQQVRDSF9TT1VS
Q0VfVFlQRV9QUk9DLCBbc2VsZiBwaWRdLCBESVNQQVRDSF9QUk9DX0VYSVQsIHF1ZXVlKTsKLSAg
ICBbc2VsZiBzZXRBcHBEaXNwYXRjaFNvdXJjZTpzaW11bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3Vy
Y2VdOwotICAgIGRpc3BhdGNoX3NvdXJjZV9zZXRfZXZlbnRfaGFuZGxlcihzaW11bGF0b3JBcHBF
eGl0RGlzcGF0Y2hTb3VyY2UsIF57Ci0gICAgICAgIGRpc3BhdGNoX3NvdXJjZV9jYW5jZWwoc2lt
dWxhdG9yQXBwRXhpdERpc3BhdGNoU291cmNlKTsKLSAgICAgICAgW3NlbGYgZGlkQ3Jhc2hXaXRo
TWVzc2FnZTpuaWxdOwotICAgIH0pOwotICAgIGRpc3BhdGNoX3Jlc3VtZShzaW11bGF0b3JBcHBF
eGl0RGlzcGF0Y2hTb3VyY2UpOwotfQotCi0tICh2b2lkKXN0YXJ0Ci17Ci0gICAgW3NlbGYgaW5z
dGFsbEFwcF07Ci0gICAgW1tzZWxmIHJlbGF5XSBzZXR1cF07Ci0gICAgW3NlbGYgbGF1bmNoQXBw
XTsKLSAgICBbW3NlbGYgcmVsYXldIGNvbm5lY3RdOwotfQotCi0tICh2b2lkKWZpbmlzaAotewot
ICAgIFtbc2VsZiByZWxheV0gZGlzY29ubmVjdF07Ci0gICAgW3NlbGYga2lsbEFwcF07Ci0gICAg
ZXhpdChFWElUX1NVQ0NFU1MpOwotfQotCi1AZW5kCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVs
YXkvTGF5b3V0VGVzdFJlbGF5L21haW4ubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0
UmVsYXkvTGF5b3V0VGVzdFJlbGF5L21haW4ubQkocmV2aXNpb24gMjExMzcxKQorKysgVG9vbHMv
TGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9tYWluLm0JKG5vbmV4aXN0ZW50KQpAQCAt
MSwxMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgIkNvcmVTaW11bGF0b3JT
UEkuaCIKLSNpbXBvcnQgIkxUUmVsYXlDb250cm9sbGVyLmgiCi0jaW1wb3J0IDxGb3VuZGF0aW9u
L0ZvdW5kYXRpb24uaD4KLQotc3RhdGljIExUUmVsYXlDb250cm9sbGVyICpyZWxheUNvbnRyb2xs
ZXI7Ci0KLXZvaWQgdXNhZ2UoKQotewotICAgIE5TU3RyaW5nICpoZWxwVGV4dCA9IEAiTGF5b3V0
VGVzdFJlbGF5OiBydW4gYSBkdW1wIHRvb2wgaW4gdGhlIHNpbXVsYXRvci4gTm90IGZvciBkaXJl
Y3QgY29uc3VtcHRpb24uXG4iCi0gICAgICAgICJVc2FnZTogTGF5b3V0VGVzdFJlbGF5IFstaF0g
W29wdGlvbnNdIC0tIFtkdW1wIHRvb2wgYXJndW1lbnRzXVxuIgotICAgICAgICAiUmVxdWlyZWQg
b3B0aW9uczpcbiIKLSAgICAgICAgIiAgICAtdWRpZCA8aWRlbnRpZmllcj4gICAgICAgU2ltdWxh
dG9yIGRldmljZSBpZGVudGlmaWVyXG4iCi0gICAgICAgICIgICAgLWFwcCA8YXBwX3BhdGg+ICAg
ICAgICAgIFBhdGggdG8gdGhlIGJ1aWx0IGlPUyAuYXBwIGJ1bmRsZSBkaXJlY3RvcnkuXG4iCi0g
ICAgICAgICIgICAgLXByb2R1Y3REaXIgPGRpcj4gICAgICAgIC9wYXRoL3RvL1dlYktpdEJ1aWxk
L3tjb25maWd1cmF0aW9ufS17c2hvcnQgcGxhdGZvcm19LlxuIjsKLQotICAgIGZwcmludGYoc3Rk
ZXJyLCAiJXNcbiIsIFtoZWxwVGV4dCBVVEY4U3RyaW5nXSk7Ci19Ci0KLU5TU3RyaW5nICpnZXRS
ZXF1aXJlZFN0cmluZ0FyZ3VtZW50KE5TU3RyaW5nICpwYXJhbWV0ZXIpCi17Ci0gICAgTlNVc2Vy
RGVmYXVsdHMgKmRlZmF1bHRzID0gW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRz
XTsKLSAgICBOU1N0cmluZyAqYXJndW1lbnQgPSBbZGVmYXVsdHMgc3RyaW5nRm9yS2V5OnBhcmFt
ZXRlcl07Ci0KLSAgICBpZiAoIWFyZ3VtZW50KSB7Ci0gICAgICAgIE5TTG9nKEAiLSVAIGlzIHJl
cXVpcmVkLiIsIHBhcmFtZXRlcik7Ci0gICAgICAgIHVzYWdlKCk7Ci0gICAgICAgIGV4aXQoRVhJ
VF9GQUlMVVJFKTsKLSAgICB9Ci0gICAgcmV0dXJuIGFyZ3VtZW50OwotfQotCi1OU0FycmF5ICpn
ZXREdW1wVG9vbEFyZ3VtZW50cygpCi17Ci0gICAgTlNNdXRhYmxlQXJyYXkgKmR1bXBUb29sQXJn
dW1lbnRzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07Ci0gICAgTlNBcnJheSAqcHJv
Y2Vzc0FyZ3MgPSBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIGFyZ3VtZW50c107Ci0gICAg
Qk9PTCBhcHBlbmRpbmcgPSBOTzsKLSAgICBmb3IgKE5TU3RyaW5nICphcmcgaW4gcHJvY2Vzc0Fy
Z3MpIHsKLSAgICAgICAgaWYgKFthcmcgaXNFcXVhbFRvU3RyaW5nOkAiLS0iXSkgewotICAgICAg
ICAgICAgYXBwZW5kaW5nID0gWUVTOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKGFwcGVuZGluZykKLSAgICAgICAgICAgIFtkdW1wVG9vbEFyZ3VtZW50cyBh
ZGRPYmplY3Q6YXJnXTsKLSAgICB9Ci0gICAgcmV0dXJuIGR1bXBUb29sQXJndW1lbnRzOwotfQot
Ci12b2lkIGZpbmlzaCgpCi17Ci0gICAgW3JlbGF5Q29udHJvbGxlciBmaW5pc2hdOwotfQotCi12
b2lkIHJlY2VpdmVkU2lnbmFsKGludCBzaWduYWwpCi17Ci0gICAgZXhpdChFWElUX1NVQ0NFU1Mp
OwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqIGFyZ3ZbXSkKLXsKLSAgICBA
YXV0b3JlbGVhc2Vwb29sIHsKLSAgICAgICAgTlNBcnJheSAqaGVscEFyZ3VtZW50cyA9IEBbQCIt
aCIsIEAiLS1oZWxwIl07Ci0gICAgICAgIGZvciAoTlNTdHJpbmcgKmhlbHBBcmd1bWVudCBpbiBo
ZWxwQXJndW1lbnRzKSB7Ci0gICAgICAgICAgICBpZiAoW1tbTlNQcm9jZXNzSW5mbyBwcm9jZXNz
SW5mb10gYXJndW1lbnRzXSBpbmRleE9mT2JqZWN0OmhlbHBBcmd1bWVudF0gIT0gTlNOb3RGb3Vu
ZCkgewotICAgICAgICAgICAgICAgIHVzYWdlKCk7Ci0gICAgICAgICAgICAgICAgZXhpdChFWElU
X0ZBSUxVUkUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSNpZiBVU0VfU0lNX1NFUlZJ
Q0VfQ09OVEVYVAotICAgICAgICBOU1N0cmluZyAqZGV2ZWxvcGVyRGlyZWN0b3J5ID0gZ2V0UmVx
dWlyZWRTdHJpbmdBcmd1bWVudChAImRldmVsb3BlckRpciIpOwotI2VuZGlmCi0gICAgICAgIE5T
VVVJRCAqdWRpZCA9IFtbTlNVVUlEIGFsbG9jXSBpbml0V2l0aFVVSURTdHJpbmc6Z2V0UmVxdWly
ZWRTdHJpbmdBcmd1bWVudChAInVkaWQiKV07Ci0gICAgICAgIE5TU3RyaW5nICphcHBQYXRoID0g
Z2V0UmVxdWlyZWRTdHJpbmdBcmd1bWVudChAImFwcCIpOwotICAgICAgICBOU1N0cmluZyAqcHJv
ZHVjdERpcmVjdG9yeSA9IGdldFJlcXVpcmVkU3RyaW5nQXJndW1lbnQoQCJwcm9kdWN0RGlyIik7
Ci0gICAgICAgIE5TQXJyYXkgKmR1bXBUb29sQXJndW1lbnRzID0gZ2V0RHVtcFRvb2xBcmd1bWVu
dHMoKTsKLQotI2lmIFVTRV9TSU1fU0VSVklDRV9DT05URVhUCi0gICAgICAgIE5TRXJyb3IgKmVy
cm9yOwotICAgICAgICBTaW1TZXJ2aWNlQ29udGV4dCAqc2VydmljZUNvbnRleHQgPSBbU2ltU2Vy
dmljZUNvbnRleHQgc2hhcmVkU2VydmljZUNvbnRleHRGb3JEZXZlbG9wZXJEaXI6ZGV2ZWxvcGVy
RGlyZWN0b3J5IGVycm9yOiZlcnJvcl07Ci0gICAgICAgIGlmICghc2VydmljZUNvbnRleHQpIHsK
LSAgICAgICAgICAgIE5TTG9nKEAiRGV2aWNlIGNvbnRleHQgY291bGRuJ3QgYmUgZm91bmQ6ICVA
IiwgZXJyb3IpOwotICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0g
ICAgICAgIFNpbURldmljZVNldCAqZGV2aWNlU2V0ID0gW3NlcnZpY2VDb250ZXh0IGRlZmF1bHRE
ZXZpY2VTZXRXaXRoRXJyb3I6bmlsXTsKLSAgICAgICAgaWYgKCFkZXZpY2VTZXQpIHsKLSAgICAg
ICAgICAgIE5TTG9nKEAiRGVmYXVsdCBkZXZpY2Ugc2V0IGNvdWxkbid0IGJlIGZvdW5kOiAlQCIs
IGVycm9yKTsKLSAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAgICAgfQotICAg
ICAgICBTaW1EZXZpY2UgKmRldmljZSA9IFtkZXZpY2VTZXQuZGV2aWNlc0J5VURJRCBvYmplY3RG
b3JLZXk6dWRpZF07Ci0jZWxzZQotICAgICAgICBTaW1EZXZpY2UgKmRldmljZSA9IFtTaW1EZXZp
Y2VTZXQuZGVmYXVsdFNldC5kZXZpY2VzQnlVRElEIG9iamVjdEZvcktleTp1ZGlkXTsKLSNlbmRp
ZgotICAgICAgICBpZiAoIWRldmljZSkgewotICAgICAgICAgICAgTlNMb2coQCJEZXZpY2UgJUAg
Y291bGRuJ3QgYmUgZm91bmQiLCB1ZGlkKTsKLSAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJF
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHJlbGF5Q29udHJvbGxlciA9IFtbTFRSZWxheUNvbnRy
b2xsZXIgYWxsb2NdIGluaXRXaXRoRGV2aWNlOmRldmljZSBwcm9kdWN0RGlyOnByb2R1Y3REaXJl
Y3RvcnkgYXBwUGF0aDphcHBQYXRoIGRldmljZVVESUQ6dWRpZCBkdW1wVG9vbEFyZ3VtZW50czpk
dW1wVG9vbEFyZ3VtZW50c107Ci0gICAgICAgIFtyZWxheUNvbnRyb2xsZXIgc3RhcnRdOwotCi0g
ICAgICAgIGF0ZXhpdChmaW5pc2gpOwotICAgICAgICBzaWduYWwoU0lHSU5ULCByZWNlaXZlZFNp
Z25hbCk7Ci0gICAgICAgIHNpZ25hbChTSUdURVJNLCByZWNlaXZlZFNpZ25hbCk7Ci0KLSAgICAg
ICAgW1tOU1J1bkxvb3AgbWFpblJ1bkxvb3BdIHJ1bl07Ci0gICAgfQotICAgIHJldHVybiAwOwot
fQpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlv
dXRUZXN0UmVsYXkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjExMzcxKQor
KysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShub25leGlzdGVudCkKQEAgLTEsMjAyICswLDAgQEAKLS8vICEkKlVURjgqJCEK
LXsKLQlhcmNoaXZlVmVyc2lvbiA9IDE7Ci0JY2xhc3NlcyA9IHsKLQl9OwotCW9iamVjdFZlcnNp
b24gPSA0NjsKLQlvYmplY3RzID0gewotCi0vKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAq
LwotCQkyRThEM0VGODE5ODgxRDQzMDA0RjZDQzIgLyogbWFpbi5tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU4RDNFRjcxOTg4MUQ0MzAwNEY2Q0MyIC8q
IG1haW4ubSAqLzsgfTsKLQkJMkU4RDNGMDIxOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5
Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRThEM0Yw
MTE5ODgxRkQwMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkubSAqLzsgfTsKLQkJMkU4RDNGMDYxOTg4
MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRThEM0YwNTE5ODgyNDA2MDA0RjZDQzIgLyogTFRS
ZWxheUNvbnRyb2xsZXIubSAqLzsgfTsKLS8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwot
Ci0vKiBCZWdpbiBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjIx
OTg4MUQ0MzAwNEY2Q0MyIC8qIENvcHlGaWxlcyAqLyA9IHsKLQkJCWlzYSA9IFBCWENvcHlGaWxl
c0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZHN0UGF0
aCA9IC91c3Ivc2hhcmUvbWFuL21hbjEvOwotCQkJZHN0U3ViZm9sZGVyU3BlYyA9IDA7Ci0JCQlm
aWxlcyA9ICgKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MTsKLQkJfTsKLS8qIEVuZCBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQotLyog
QmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCi0JCTJFOEQzRUY0MTk4ODFENDMwMDRG
NkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbklu
ZGV4ID0gMDsgcGF0aCA9IExheW91dFRlc3RSZWxheTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RV
Q1RTX0RJUjsgfTsKLQkJMkU4RDNFRjcxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5v
YmpjOyBwYXRoID0gbWFpbi5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0VG
RTE5ODgxRTEzMDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgbmFtZSA9
IERlYnVnUmVsZWFzZS54Y2NvbmZpZzsgcGF0aCA9IENvbmZpZ3VyYXRpb25zL0RlYnVnUmVsZWFz
ZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNFRkYxOTg4MUUy
NTAwNEY2Q0MyIC8qIEJhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBuYW1lID0gQmFzZS54Y2NvbmZpZzsg
cGF0aCA9IENvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTJFOEQzRjAwMTk4ODFGMjkwMDRGNkNDMiAvKiBMVFJlbGF5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IExUUmVsYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDEx
OTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
b2JqYzsgcGF0aCA9IExUUGlwZVJlbGF5Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTJFOEQzRjAzMTk4ODFGRTIwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBMVFBpcGVSZWxheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0YwNDE5
ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTFRSZWxheUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMkU4RDNGMDUxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLm0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IExUUmVsYXlDb250cm9sbGVyLm07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNFMUZCQzE1MUIyOTBFNzkwMDAxMzZGNSAv
KiBDb3JlU2ltdWxhdG9yU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENv
cmVTaW11bGF0b3JTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLS8qIEVuZCBQQlhG
aWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhh
c2Ugc2VjdGlvbiAqLwotCQkyRThEM0VGMTE5ODgxRDQzMDA0RjZDQzIgLyogRnJhbWV3b3JrcyAq
LyA9IHsKLQkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25N
YXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9OwotLyogRW5kIFBCWEZyYW1ld29ya3NCdWls
ZFBoYXNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYR3JvdXAgc2VjdGlvbiAqLwotCQkyRThE
M0VFQjE5ODgxRDQzMDA0RjZDQzIgPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVu
ID0gKAotCQkJCTJFOEQzRUZGMTk4ODFFMjUwMDRGNkNDMiAvKiBCYXNlLnhjY29uZmlnICovLAot
CQkJCTJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8s
Ci0JCQkJMkU4RDNFRjYxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLywKLQkJ
CQkyRThEM0VGNTE5ODgxRDQzMDA0RjZDQzIgLyogUHJvZHVjdHMgKi8sCi0JCQkpOwotCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJMkU4RDNFRjUxOTg4MUQ0MzAwNEY2Q0MyIC8q
IFByb2R1Y3RzICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJ
CQkyRThEM0VGNDE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovLAotCQkJKTsK
LQkJCW5hbWUgPSBQcm9kdWN0czsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0J
CTJFOEQzRUY2MTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8gPSB7Ci0JCQlp
c2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTJFOEQzRUY3MTk4ODFENDMwMDRG
NkNDMiAvKiBtYWluLm0gKi8sCi0JCQkJQ0UxRkJDMTUxQjI5MEU3OTAwMDEzNkY1IC8qIENvcmVT
aW11bGF0b3JTUEkuaCAqLywKLQkJCQkyRThEM0YwMDE5ODgxRjI5MDA0RjZDQzIgLyogTFRSZWxh
eS5oICovLAotCQkJCTJFOEQzRjAxMTk4ODFGRDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5tICov
LAotCQkJCTJFOEQzRjAzMTk4ODFGRTIwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5oICovLAotCQkJ
CTJFOEQzRjA0MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5oICovLAotCQkJ
CTJFOEQzRjA1MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5tICovLAotCQkJ
KTsKLQkJCXBhdGggPSBMYXlvdXRUZXN0UmVsYXk7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwotCQl9OwotLyogRW5kIFBCWEdyb3VwIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYTmF0aXZl
VGFyZ2V0IHNlY3Rpb24gKi8KLQkJMkU4RDNFRjMxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRl
c3RSZWxheSAqLyA9IHsKLQkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKLQkJCWJ1aWxkQ29uZmln
dXJhdGlvbkxpc3QgPSAyRThEM0VGQjE5ODgxRDQzMDA0RjZDQzIgLyogQnVpbGQgY29uZmlndXJh
dGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIkxheW91dFRlc3RSZWxheSIgKi87Ci0JCQli
dWlsZFBoYXNlcyA9ICgKLQkJCQkyRThEM0VGMDE5ODgxRDQzMDA0RjZDQzIgLyogU291cmNlcyAq
LywKLQkJCQkyRThEM0VGMTE5ODgxRDQzMDA0RjZDQzIgLyogRnJhbWV3b3JrcyAqLywKLQkJCQky
RThEM0VGMjE5ODgxRDQzMDA0RjZDQzIgLyogQ29weUZpbGVzICovLAotCQkJKTsKLQkJCWJ1aWxk
UnVsZXMgPSAoCi0JCQkpOwotCQkJZGVwZW5kZW5jaWVzID0gKAotCQkJKTsKLQkJCW5hbWUgPSBM
YXlvdXRUZXN0UmVsYXk7Ci0JCQlwcm9kdWN0TmFtZSA9IExheW91dFRlc3RSZWxheTsKLQkJCXBy
b2R1Y3RSZWZlcmVuY2UgPSAyRThEM0VGNDE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJl
bGF5ICovOwotCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS50b29sIjsK
LQkJfTsKLS8qIEVuZCBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhQ
cm9qZWN0IHNlY3Rpb24gKi8KLQkJMkU4RDNFRUMxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2plY3Qg
b2JqZWN0ICovID0gewotCQkJaXNhID0gUEJYUHJvamVjdDsKLQkJCWF0dHJpYnV0ZXMgPSB7Ci0J
CQkJTGFzdFVwZ3JhZGVDaGVjayA9IDA2MDA7Ci0JCQkJT1JHQU5JWkFUSU9OTkFNRSA9ICJBcHBs
ZSwgSW5jLiI7Ci0JCQkJVGFyZ2V0QXR0cmlidXRlcyA9IHsKLQkJCQkJMkU4RDNFRjMxOTg4MUQ0
MzAwNEY2Q0MyID0gewotCQkJCQkJQ3JlYXRlZE9uVG9vbHNWZXJzaW9uID0gNi4wOwotCQkJCQl9
OwotCQkJCX07Ci0JCQl9OwotCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDJFOEQzRUVGMTk4
ODFENDMwMDRGNkNDMiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3Qg
IkxheW91dFRlc3RSZWxheSIgKi87Ci0JCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAz
LjIiOwotCQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBFbmdsaXNoOwotCQkJaGFzU2Nhbm5lZEZvckVu
Y29kaW5ncyA9IDA7Ci0JCQlrbm93blJlZ2lvbnMgPSAoCi0JCQkJZW4sCi0JCQkpOwotCQkJbWFp
bkdyb3VwID0gMkU4RDNFRUIxOTg4MUQ0MzAwNEY2Q0MyOwotCQkJcHJvZHVjdFJlZkdyb3VwID0g
MkU4RDNFRjUxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2R1Y3RzICovOwotCQkJcHJvamVjdERpclBh
dGggPSAiIjsKLQkJCXByb2plY3RSb290ID0gIiI7Ci0JCQl0YXJnZXRzID0gKAotCQkJCTJFOEQz
RUYzMTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8sCi0JCQkpOwotCQl9Owot
LyogRW5kIFBCWFByb2plY3Qgc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQ
aGFzZSBzZWN0aW9uICovCi0JCTJFOEQzRUYwMTk4ODFENDMwMDRGNkNDMiAvKiBTb3VyY2VzICov
ID0gewotCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sg
PSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkJMkU4RDNGMDYxOTg4MjQwNjAwNEY2Q0My
IC8qIExUUmVsYXlDb250cm9sbGVyLm0gaW4gU291cmNlcyAqLywKLQkJCQkyRThEM0VGODE5ODgx
RDQzMDA0RjZDQzIgLyogbWFpbi5tIGluIFNvdXJjZXMgKi8sCi0JCQkJMkU4RDNGMDIxOTg4MUZE
MDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lm0gaW4gU291cmNlcyAqLywKLQkJCSk7Ci0JCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKLS8qIEVuZCBQQlhTb3Vy
Y2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFhDQnVpbGRDb25maWd1cmF0aW9u
IHNlY3Rpb24gKi8KLQkJMkU4RDNFRjkxOTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICovID0gewot
CQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJhdGlvblJlZmVy
ZW5jZSA9IDJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcg
Ki87Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJfTsKLQkJCW5hbWUgPSBEZWJ1ZzsKLQkJfTsK
LQkJMkU4RDNFRkExOTg4MUQ0MzAwNEY2Q0MyIC8qIFJlbGVhc2UgKi8gPSB7Ci0JCQlpc2EgPSBY
Q0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gMkU4
RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLzsKLQkJCWJ1
aWxkU2V0dGluZ3MgPSB7Ci0JCQl9OwotCQkJbmFtZSA9IFJlbGVhc2U7Ci0JCX07Ci0JCTJFOEQz
RUZDMTk4ODFENDMwMDRGNkNDMiAvKiBEZWJ1ZyAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25m
aWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAyRThEM0VGRTE5ODgx
RTEzMDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5n
cyA9IHsKLQkJCQlQUk9EVUNUX05BTUUgPSAiJChUQVJHRVRfTkFNRSkiOwotCQkJfTsKLQkJCW5h
bWUgPSBEZWJ1ZzsKLQkJfTsKLQkJMkU4RDNFRkQxOTg4MUQ0MzAwNEY2Q0MyIC8qIFJlbGVhc2Ug
Ki8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0
aW9uUmVmZXJlbmNlID0gMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54
Y2NvbmZpZyAqLzsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJUFJPRFVDVF9OQU1FID0gIiQo
VEFSR0VUX05BTUUpIjsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLS8qIEVuZCBY
Q0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFhDQ29uZmlndXJhdGlv
bkxpc3Qgc2VjdGlvbiAqLwotCQkyRThEM0VFRjE5ODgxRDQzMDA0RjZDQzIgLyogQnVpbGQgY29u
ZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJMYXlvdXRUZXN0UmVsYXkiICovID0gewot
CQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAo
Ci0JCQkJMkU4RDNFRjkxOTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICovLAotCQkJCTJFOEQzRUZB
MTk4ODFENDMwMDRGNkNDMiAvKiBSZWxlYXNlICovLAotCQkJKTsKLQkJCWRlZmF1bHRDb25maWd1
cmF0aW9uSXNWaXNpYmxlID0gMDsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJlbGVh
c2U7Ci0JCX07Ci0JCTJFOEQzRUZCMTk4ODFENDMwMDRGNkNDMiAvKiBCdWlsZCBjb25maWd1cmF0
aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiTGF5b3V0VGVzdFJlbGF5IiAqLyA9IHsKLQkJ
CWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAot
CQkJCTJFOEQzRUZDMTk4ODFENDMwMDRGNkNDMiAvKiBEZWJ1ZyAqLywKLQkJCQkyRThEM0VGRDE5
ODgxRDQzMDA0RjZDQzIgLyogUmVsZWFzZSAqLywKLQkJCSk7Ci0JCQlkZWZhdWx0Q29uZmlndXJh
dGlvbklzVmlzaWJsZSA9IDA7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNl
OwotCQl9OwotLyogRW5kIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLwotCX07Ci0Jcm9v
dE9iamVjdCA9IDJFOEQzRUVDMTk4ODFENDMwMDRGNkNDMiAvKiBQcm9qZWN0IG9iamVjdCAqLzsK
LX0KSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNv
ZGVwcm9qCShyZXZpc2lvbiAyMTEzNzEpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0
VGVzdFJlbGF5Lnhjb2RlcHJvagkobm9uZXhpc3RlbnQpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBU
b29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5Lnhjb2RlcHJvagpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkRlbGV0ZWQ6IHN2bjppZ25vcmUKIyMgLTEsMiArMCwwICMjCi1wcm9qZWN0Lnhjd29ya3NwYWNl
Ci14Y3VzZXJkYXRhCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTWFrZWZpbGUKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L01ha2VmaWxlCShyZXZpc2lvbiAyMTEzNzEp
CisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTWFrZWZpbGUJKG5vbmV4aXN0ZW50KQpAQCAtMSw2
ICswLDAgQEAKLVNDUklQVFNfUEFUSCA9IC4uL1NjcmlwdHMKLQotT1ZFUlJJREVfQVJDSFMgPSBk
ZWZhdWx0Ci1PVkVSUklERV9TREtST09UID0gZGVmYXVsdAotCi1pbmNsdWRlIC4uLy4uL01ha2Vm
aWxlLnNoYXJlZApJbmRleDogVG9vbHMvTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTWFr
ZWZpbGUJKHJldmlzaW9uIDIxMTM3MSkKKysrIFRvb2xzL01ha2VmaWxlCSh3b3JraW5nIGNvcHkp
CkBAIC03LDkgKzcsNiBAQCBpZm5lcSAoLCQoU0RLUk9PVCkpCiAJaWZuZXEgKCwkKGZpbmRzdHJp
bmcgaXBob25lLCQoU0RLUk9PVCkpKQogCQlNT0RVTEVTICs9IE1vYmlsZU1pbmlCcm93c2VyCiAJ
ZW5kaWYKLQlpZmVxICgsJChET19OT1RfQlVJTERfTEFZT1VUX1RFU1RfUkVMQVkpKQotCQlNT0RV
TEVTICs9IExheW91dFRlc3RSZWxheQotCWVuZGlmCiBlbmRpZgogCiBhbGw6CkluZGV4OiBUb29s
cy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsdC1wcm9kdWN0LWFyY2hpdmUKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbHQtcHJvZHVjdC1hcmNoaXZlCShyZXZpc2lvbiAy
MTEzNzEpCisrKyBUb29scy9CdWlsZFNsYXZlU3VwcG9ydC9idWlsdC1wcm9kdWN0LWFyY2hpdmUJ
KHdvcmtpbmcgY29weSkKQEAgLTE0NSwyOSArMTQ1LDggQEAgZGVmIGRpckNvbnRhaW5zZHdvKGRp
cmVjdG9yeSk6CiBkZWYgYXJjaGl2ZUJ1aWx0UHJvZHVjdChjb25maWd1cmF0aW9uLCBwbGF0Zm9y
bSwgZnVsbFBsYXRmb3JtKToKICAgICBhc3NlcnQgcGxhdGZvcm0gaW4gKCdtYWMnLCAnd2luJywg
J2d0aycsICdlZmwnLCAnaW9zJykKIAotICAgIGlmIGZ1bGxQbGF0Zm9ybS5zdGFydHN3aXRoKCdp
b3Mtc2ltdWxhdG9yJyk6Ci0gICAgICAgICMgV2UgbmVlZCB0byBpbmNsdWRlIGluIHRoZSBhcmNo
aXZlIHRoZSBNYWMgdG9vbCwgTGF5b3V0VGVzdFJlbGF5LCB0byBydW4gbGF5b3V0IHRlc3RzIGlu
IHRoZSBpT1Mgc2ltdWxhdG9yLgotICAgICAgICBjb21iaW5lZERpcmVjdG9yeSA9IG9zLnBhdGgu
am9pbihfdG9wTGV2ZWxCdWlsZERpcmVjdG9yeSwgJ2NvbWJpbmVkLW1hYy1hbmQtaW9zJykKLSAg
ICAgICAgcmVtb3ZlRGlyZWN0b3J5SWZFeGlzdHMoY29tYmluZWREaXJlY3RvcnkpCi0gICAgICAg
IG9zLm1ha2VkaXJzKGNvbWJpbmVkRGlyZWN0b3J5KQotCi0gICAgICAgIGlmIHN1YnByb2Nlc3Mu
Y2FsbChbJy9iaW4vY3AnLCAnLXBSJywgX2NvbmZpZ3VyYXRpb25CdWlsZERpcmVjdG9yeSwgY29t
YmluZWREaXJlY3RvcnldKToKLSAgICAgICAgICAgIHJldHVybiAxCi0KLSAgICAgICAgbWFjQnVp
bGREaXJlY3RvcnkgPSB3ZWJraXRCdWlsZERpcmVjdG9yeUZvckNvbmZpZ3VyYXRpb25BbmRQbGF0
Zm9ybShjb25maWd1cmF0aW9uLCAnbWFjJykKLSAgICAgICAgZGVzdGluYXRpb25EaXJlY3Rvcnkg
PSBvcy5wYXRoLmpvaW4oY29tYmluZWREaXJlY3RvcnksIG9zLnBhdGgucmVscGF0aChtYWNCdWls
ZERpcmVjdG9yeSwgX3RvcExldmVsQnVpbGREaXJlY3RvcnkpKQotICAgICAgICBvcy5tYWtlZGly
cyhkZXN0aW5hdGlvbkRpcmVjdG9yeSkKLSAgICAgICAgZm9yIGZpbGVuYW1lIGluIFsnTGF5b3V0
VGVzdFJlbGF5JywgJ0xheW91dFRlc3RSZWxheS5kU1lNJ106Ci0gICAgICAgICAgICBzb3VyY2VG
aWxlID0gb3MucGF0aC5qb2luKG1hY0J1aWxkRGlyZWN0b3J5LCBmaWxlbmFtZSkKLSAgICAgICAg
ICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzb3VyY2VGaWxlKToKLSAgICAgICAgICAgICAgICBj
b250aW51ZQotICAgICAgICAgICAgaWYgc3VicHJvY2Vzcy5jYWxsKFsnL2Jpbi9jcCcsICctcFIn
LCBzb3VyY2VGaWxlLCBkZXN0aW5hdGlvbkRpcmVjdG9yeV0pOgotICAgICAgICAgICAgICAgIHJl
dHVybiAxCi0KLSAgICAgICAgaWYgY3JlYXRlWmlwKGNvbWJpbmVkRGlyZWN0b3J5LCBjb25maWd1
cmF0aW9uKToKLSAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgIHNodXRpbC5ybXRyZWUoY29t
YmluZWREaXJlY3RvcnkpCi0gICAgZWxpZiBwbGF0Zm9ybSBpbiAoJ21hYycsICdpb3MnKToKKyAg
ICAjIEZJWE1FOiBJbWFnZURpZmYgc2hvdWxkIGJlIGJ1aWx0IHdpdGggdGhlIGhvc3QgU0RLIDxy
ZGFyOi8vcHJvYmxlbS8zMDI2NjAzOD4KKyAgICBpZiBwbGF0Zm9ybSBpbiAoJ21hYycsICdpb3Mn
KToKICAgICAgICAgcmV0dXJuIGNyZWF0ZVppcChfY29uZmlndXJhdGlvbkJ1aWxkRGlyZWN0b3J5
LCBjb25maWd1cmF0aW9uLCBlbWJlZFBhcmVudERpcmVjdG9yeU5hbWVPbkRhcndpbj1UcnVlKQog
ICAgIGVsaWYgcGxhdGZvcm0gPT0gJ3dpbic6CiAgICAgICAgICMgRklYTUU6IFdlIHNob3VsZG4n
dCBoYXJkY29kZSB0aGUgYXNzdW1wdGlvbiBvZiBhIDMyLWJpdCBidWlsZC4gU2VlIDxodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5NzE1Pi4KSW5kZXg6IFRvb2xzL0J1
aWxkU2xhdmVTdXBwb3J0L2tpbGwtb2xkLXByb2Nlc3Nlcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9C
dWlsZFNsYXZlU3VwcG9ydC9raWxsLW9sZC1wcm9jZXNzZXMJKHJldmlzaW9uIDIxMTM3MSkKKysr
IFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2tpbGwtb2xkLXByb2Nlc3Nlcwkod29ya2luZyBjb3B5
KQpAQCAtODksOCArODksNyBAQCBkZWYgbWFpbigpOgogICAgICAgICAiV2ViUHJvY2VzcyIsCiAg
ICAgICAgICJ4Y29kZWJ1aWxkIiwKICAgICAgICAgIyBGSVhNRTogQ29uc2lkZXIgbW92aW5nIGlP
Uy1zcGVjaWZpYyB0YXNrcyB0byB0aGVpciBvd24gbGlzdC4KLSAgICAgICAgIlNpbXVsYXRvciIs
Ci0gICAgICAgICJMYXlvdXRUZXN0UmVsYXkiCisgICAgICAgICJTaW11bGF0b3IiCiAgICAgXQog
CiAgICAgdGFza1RvS2lsbFVuaXggPSBbCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29u
ZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0
UmVsYXkvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwkocmV2aXNpb24gMjExMzcxKQorKysg
VG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcJKG5vbmV4
aXN0ZW50KQpAQCAtMSw2OCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0v
LyBhcmUgbWV0OgotLy8gMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0vLyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotLy8gRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS8v
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotLy8gUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLS8vIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotLy8gRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotLy8gUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0vLyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0vLyBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotI2luY2x1ZGUgIi4uLy4uLy4uLy4uL0ludGVybmFsL0NvbmZpZ3VyYXRpb25zL0hhdmVJ
bnRlcm5hbFNESy54Y2NvbmZpZyIKLQotVVNFX0lOVEVSTkFMX1NESyA9ICQoVVNFX0lOVEVSTkFM
X1NES18kKENPTkZJR1VSQVRJT04pKTsKLVVTRV9JTlRFUk5BTF9TREtfUHJvZHVjdGlvbiA9IFlF
UzsKLVVTRV9JTlRFUk5BTF9TREtfRGVidWcgPSAkKEhBVkVfSU5URVJOQUxfU0RLKTsKLVVTRV9J
TlRFUk5BTF9TREtfUmVsZWFzZSA9ICQoSEFWRV9JTlRFUk5BTF9TREspOwotCi1DTEFOR19DWFhf
TEFOR1VBR0VfU1RBTkRBUkQgPSBnbnUrKzB4OwotQ0xBTkdfRU5BQkxFX09CSkNfQVJDID0gWUVT
OwotQ0xBTkdfV0FSTl9DWFgwWF9FWFRFTlNJT05TID0gTk87Ci1IRUFERVJfU0VBUkNIX1BBVEhT
ID0gJChCVUlMVF9QUk9EVUNUU19ESVIpL3Vzci9sb2NhbC9pbmNsdWRlICQoV0VCQ09SRV9QUklW
QVRFX0hFQURFUlNfRElSKS9Gb3J3YXJkaW5nSGVhZGVycyAkKFNSQ1JPT1QpLy4uLy4uL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pY3UgJChORVhUX1JPT1QpL3Vzci9sb2NhbC9pbmNsdWRlL1dlYkNv
cmVUZXN0U3VwcG9ydDsKLUdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAkKERFQlVHX0RF
RklORVMpIEVOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVDsKLURFQlVHX0lORk9STUFUSU9OX0ZPUk1B
VCA9IGR3YXJmLXdpdGgtZHN5bTsKLVBSRUJJTkRJTkcgPSBOTwotR0NDX0NfTEFOR1VBR0VfU1RB
TkRBUkQgPSBnbnU5OQotR0NDX0VOQUJMRV9DUFBfRVhDRVBUSU9OUyA9IE5POwotR0NDX0VOQUJM
RV9DUFBfUlRUSSA9IE5POwotR0NDX1BSRUNPTVBJTEVfUFJFRklYX0hFQURFUiA9IFlFUwotR0ND
X1RSRUFUX1dBUk5JTkdTX0FTX0VSUk9SUyA9IFlFUwotR0NDX1ZFUlNJT04gPSBjb20uYXBwbGUu
Y29tcGlsZXJzLmxsdm0uY2xhbmcuMV8wOwotR0NDX1dBUk5fQUJPVVRfREVQUkVDQVRFRF9GVU5D
VElPTlMgPSBOTwotR0NDX1dBUk5fVU5VU0VEX0ZVTkNUSU9OID0gWUVTCi1HQ0NfV0FSTl9VTlVT
RURfVkFSSUFCTEUgPSBZRVMKLUdDQ19XQVJOXzY0X1RPXzMyX0JJVF9DT05WRVJTSU9OW2FyY2g9
eDg2XzY0XSA9IE5POwotV0FSTklOR19DRkxBR1MgPSAtV2FsbCAtVyAtV25vLXVudXNlZC1wYXJh
bWV0ZXIgLVd1bmRlZgotCi1ERUJVR19ERUZJTkVTX2RlYnVnID0gOwotREVCVUdfREVGSU5FU19u
b3JtYWwgPSBOREVCVUc7Ci1ERUJVR19ERUZJTkVTID0gJChERUJVR19ERUZJTkVTXyQoQ1VSUkVO
VF9WQVJJQU5UKSk7Ci0KLVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SID0gJChUQVJHRVRf
TUFDX09TX1hfVkVSU0lPTl9NQUpPUiQoTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUOnN1ZmZpeDpp
ZGVudGlmaWVyKSk7Ci1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUl8xMCA9IDEwMTAwMDsK
LVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SXzExID0gMTAxMTAwOwotVEFSR0VUX01BQ19P
U19YX1ZFUlNJT05fTUFKT1JfMTIgPSAxMDEyMDA7Ci1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9N
QUpPUl8xMyA9IDEwMTMwMDsKLQotU0RLUk9PVCA9IG1hY29zeC5pbnRlcm5hbDsKLQotU1VQUE9S
VEVEX1BMQVRGT1JNUyA9IG1hY29zeDsKLQotVE9PTENIQUlOUyA9IGRlZmF1bHQ7Ci0KLU9USEVS
X0NGTEFHUyA9ICQoQVNBTl9PVEhFUl9DRkxBR1MpOwotT1RIRVJfQ1BMVVNQTFVTRkxBR1MgPSAk
KEFTQU5fT1RIRVJfQ1BMVVNQTFVTRkxBR1MpOwotT1RIRVJfTERGTEFHUyA9ICQoQVNBTl9PVEhF
Ul9MREZMQUdTKTsKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9E
ZWJ1Z1JlbGVhc2UueGNjb25maWcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5
L0NvbmZpZ3VyYXRpb25zL0RlYnVnUmVsZWFzZS54Y2NvbmZpZwkocmV2aXNpb24gMjExMzcxKQor
KysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0RlYnVnUmVsZWFzZS54Y2Nv
bmZpZwkobm9uZXhpc3RlbnQpCkBAIC0xLDQyICswLDAgQEAKLS8vIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLwotLy8gUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLS8vIGFyZSBtZXQ6Ci0vLyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLS8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLS8vICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0vLwotLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0vLyBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotLy8gSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0vLyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotLy8gQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0vLyBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0vLyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLS8vIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLS8vIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0v
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSAiQmFzZS54Y2NvbmZpZyIKLQotQVJDSFMgPSAkKEFS
Q0hTX1NUQU5EQVJEXzY0X0JJVCk7Ci0KLVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SID0g
JChNQUNfT1NfWF9WRVJTSU9OX01BSk9SKTsKLQotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUID0g
JChNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfJChUQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpP
UikpCi1NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfMTAxMDAwID0gMTAuMTA7Ci1NQUNPU1hfREVQ
TE9ZTUVOVF9UQVJHRVRfMTAxMTAwID0gMTAuMTE7Ci1NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRf
MTAxMjAwID0gMTAuMTI7Ci1NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfMTAxMzAwID0gMTAuMTM7
Ci0KLUZSQU1FV09SS19TRUFSQ0hfUEFUSFMgPSAkKERFVkVMT1BFUl9ESVIpL0xpYnJhcnkvUHJp
dmF0ZUZyYW1ld29ya3M7Ci1MRF9SVU5QQVRIX1NFQVJDSF9QQVRIUyA9ICQoREVWRUxPUEVSX0RJ
UikvTGlicmFyeS9Qcml2YXRlRnJhbWV3b3JrczsKLU9USEVSX0xERkxBR1MgPSAtZnJhbWV3b3Jr
IENvcmVTaW11bGF0b3IgLWZyYW1ld29yayBBcHBLaXQ7Ci0KLVNES1JPT1QgPSAkKFNES1JPT1Rf
bWFjb3N4XyQoVVNFX0lOVEVSTkFMX1NESykpOwotU0RLUk9PVF9tYWNvc3hfID0gbWFjb3N4Owot
U0RLUk9PVF9tYWNvc3hfWUVTID0gbWFjb3N4LmludGVybmFsOwpJbmRleDogVG9vbHMvTGF5b3V0
VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9Db3JlU2ltdWxhdG9yU1BJLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9Db3JlU2ltdWxhdG9yU1BJ
LmgJKHJldmlzaW9uIDIxMTM3MSkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0
UmVsYXkvQ29yZVNpbXVsYXRvclNQSS5oCShub25leGlzdGVudCkKQEAgLTEsNTggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZiBfX2hhc19pbmNsdWRlKDxDb3JlU2ltdWxhdG9yL0NvcmVT
aW11bGF0b3IuaD4pCi0KLS8qIEZJWE1FOiBSZW1vdmUgdGhlIGJlbG93ICNkZWZpbmUgb25jZSB3
ZSByZXF1aXJlIFhjb2RlIDcuMyB3aXRoIGlPUyA5LjMgU0RLIG9yIG5ld2VyLiAqLwotI2RlZmlu
ZSBfX2NvcmVzaW1fdW5hdmFpbGFibGVfbXNnKG1zZykKLSNpbXBvcnQgPENvcmVTaW11bGF0b3Iv
Q29yZVNpbXVsYXRvci5oPgotCi0vKiBGSVhNRTogQWx3YXlzIHVzZSBTaW1TZXJ2aWNlQ29udGV4
dCBvbmNlIHdlIHJlcXVpcmUgWGNvZGUgNy4zIHdpdGggaU9TIDkuMyBTREsgb3IgbmV3ZXIuICov
Ci0jZGVmaW5lIFVTRV9TSU1fU0VSVklDRV9DT05URVhUIGRlZmluZWQoQ09SRVNJTV9BUElfTUFY
X0FMTE9XRUQpCi0KLSNlbHNlCi0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgot
Ci0jZGVmaW5lIFVTRV9TSU1fU0VSVklDRV9DT05URVhUIDEKLQotI2RlZmluZSBrU2ltRGV2aWNl
TGF1bmNoQXBwbGljYXRpb25Bcmd1bWVudHMgQCJhcmd1bWVudHMiCi0jZGVmaW5lIGtTaW1EZXZp
Y2VMYXVuY2hBcHBsaWNhdGlvbkVudmlyb25tZW50IEAiZW52aXJvbm1lbnQiCi0KLUBpbnRlcmZh
Y2UgU2ltRGV2aWNlIDogTlNPYmplY3QKLS0gKEJPT0wpaW5zdGFsbEFwcGxpY2F0aW9uOihOU1VS
TCAqKWluc3RhbGxVUkwgd2l0aE9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKW9wdGlvbnMgZXJyb3I6
KE5TRXJyb3IgKiBfX2F1dG9yZWxlYXNpbmcgKillcnJvcjsKLS0gKHBpZF90KWxhdW5jaEFwcGxp
Y2F0aW9uV2l0aElEOihOU1N0cmluZyAqKWJ1bmRsZUlEIG9wdGlvbnM6KE5TRGljdGlvbmFyeSAq
KW9wdGlvbnMgZXJyb3I6KE5TRXJyb3IgKiBfX2F1dG9yZWxlYXNpbmcgKillcnJvcjsKLUBlbmQK
LQotQGludGVyZmFjZSBTaW1EZXZpY2VTZXQgOiBOU09iamVjdAotQHByb3BlcnR5IChyZWFkb25s
eSwgY29weSkgTlNEaWN0aW9uYXJ5ICpkZXZpY2VzQnlVRElEOwotQGVuZAotCi1AaW50ZXJmYWNl
IFNpbVNlcnZpY2VDb250ZXh0IDogTlNPYmplY3QKLSsoU2ltU2VydmljZUNvbnRleHQgKilzaGFy
ZWRTZXJ2aWNlQ29udGV4dEZvckRldmVsb3BlckRpcjooTlNTdHJpbmcgKilkZXZlbG9wZXJEaXIg
ZXJyb3I6KE5TRXJyb3IgKiBfX2F1dG9yZWxlYXNpbmcgKillcnJvcjsKLS0oU2ltRGV2aWNlU2V0
ICopZGVmYXVsdERldmljZVNldFdpdGhFcnJvcjooTlNFcnJvciAqIF9fYXV0b3JlbGVhc2luZyAq
KWVycm9yOwotQGVuZAotCi0jZW5kaWYKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlv
dXRUZXN0UmVsYXkvTFRQaXBlUmVsYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0
UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5LmgJKHJldmlzaW9uIDIxMTM3MSkKKysr
IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRQaXBlUmVsYXkuaAkobm9u
ZXhpc3RlbnQpCkBAIC0xLDM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIExUUGlwZVJl
bGF5X2gKLSNkZWZpbmUgTFRQaXBlUmVsYXlfaAotCi0jaW1wb3J0ICJMVFJlbGF5LmgiCi0KLUBp
bnRlcmZhY2UgTFRQaXBlUmVsYXkgOiBOU09iamVjdCA8TFRSZWxheT4KLUBwcm9wZXJ0eSAod2Vh
aykgaWQ8TFRSZWxheURlbGVnYXRlPiByZWxheURlbGVnYXRlOwotLSAoaWQpaW5pdFdpdGhQcmVm
aXg6KE5TU3RyaW5nICopcHJlZml4OwotQGVuZAotCi0jZW5kaWYKSW5kZXg6IFRvb2xzL0xheW91
dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRQaXBlUmVsYXkubQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0JKHJldmlz
aW9uIDIxMTM3MSkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRQ
aXBlUmVsYXkubQkobm9uZXhpc3RlbnQpCkBAIC0xLDE1OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2ltcG9ydCAiTFRQaXBlUmVsYXkuaCIKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9u
Lmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQotQGlu
dGVyZmFjZSBMVFBpcGVSZWxheSAoKQotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU1N0
cmluZyAqZmlmb1ByZWZpeDsKLUBwcm9wZXJ0eSAoc3Ryb25nKSBOU091dHB1dFN0cmVhbSAqc3Rh
bmRhcmRJbnB1dFBpcGU7Ci1AcHJvcGVydHkgKHN0cm9uZykgTlNJbnB1dFN0cmVhbSAqc3RhbmRh
cmRPdXRwdXRQaXBlOwotQHByb3BlcnR5IChzdHJvbmcpIE5TSW5wdXRTdHJlYW0gKnN0YW5kYXJk
RXJyb3JQaXBlOwotCi0tICh2b2lkKWNyZWF0ZUZJRk9zOwotLSAodm9pZClkZXN0cm95RklGT3M7
Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBMVFBpcGVSZWxheQotCi0tIChOU1N0cmluZyAqKWlu
UGlwZVBhdGgKLXsKLSAgICByZXR1cm4gW19maWZvUHJlZml4IHN0cmluZ0J5QXBwZW5kaW5nU3Ry
aW5nOkAiX0lOIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopb3V0UGlwZVBhdGgKLXsKLSAgICByZXR1
cm4gW19maWZvUHJlZml4IHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOkAiX09VVCJdOwotfQotCi0t
IChOU1N0cmluZyAqKWVycm9yUGlwZVBhdGgKLXsKLSAgICByZXR1cm4gW19maWZvUHJlZml4IHN0
cmluZ0J5QXBwZW5kaW5nU3RyaW5nOkAiX0VSUk9SIl07Ci19Ci0KLS0gKE5TT3V0cHV0U3RyZWFt
ICopIG91dHB1dFN0cmVhbQotewotICAgIHJldHVybiBfc3RhbmRhcmRJbnB1dFBpcGU7Ci19Ci0K
LS0gKGlkKWluaXRXaXRoUHJlZml4OihOU1N0cmluZyAqKXByZWZpeAotewotICAgIGlmICgoc2Vs
ZiA9IFtzdXBlciBpbml0XSkpIHsKLSAgICAgICAgX2ZpZm9QcmVmaXggPSBwcmVmaXg7Ci0gICAg
ICAgIFtzZWxmIGRlc3Ryb3lGSUZPc107Ci0gICAgfQotICAgIHJldHVybiBzZWxmOwotfQotCi0t
ICh2b2lkKXNldHVwCi17Ci0gICAgW3NlbGYgZGVzdHJveUZJRk9zXTsKLSAgICBbc2VsZiBjcmVh
dGVGSUZPc107Ci19Ci0KLS0gKHZvaWQpdGVhckRvd24KLXsKLSAgICBbc2VsZiBkZXN0cm95RklG
T3NdOwotfQotCi0tKHZvaWQpIGNvbm5lY3QKLXsKLSAgICBfc3RhbmRhcmRJbnB1dFBpcGUgPSBb
TlNPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtVG9GaWxlQXRQYXRoOltzZWxmIGluUGlwZVBhdGhd
IGFwcGVuZDpZRVNdOwotICAgIF9zdGFuZGFyZE91dHB1dFBpcGUgPSBbTlNJbnB1dFN0cmVhbSBp
bnB1dFN0cmVhbVdpdGhGaWxlQXRQYXRoOltzZWxmIG91dFBpcGVQYXRoXV07Ci0gICAgX3N0YW5k
YXJkRXJyb3JQaXBlID0gW05TSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW1XaXRoRmlsZUF0UGF0aDpb
c2VsZiBlcnJvclBpcGVQYXRoXV07Ci0KLSAgICBbW3NlbGYgc3RhbmRhcmRJbnB1dFBpcGVdIHNl
dERlbGVnYXRlOnNlbGZdOwotICAgIFtbc2VsZiBzdGFuZGFyZE91dHB1dFBpcGVdIHNldERlbGVn
YXRlOnNlbGZdOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yUGlwZV0gc2V0RGVsZWdhdGU6c2Vs
Zl07Ci0KLSAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRQaXBlXSBzY2hlZHVsZUluUnVuTG9vcDpb
TlNSdW5Mb29wIG1haW5SdW5Mb29wXSBmb3JNb2RlOk5TRGVmYXVsdFJ1bkxvb3BNb2RlXTsKLSAg
ICBbW3NlbGYgc3RhbmRhcmRFcnJvclBpcGVdIHNjaGVkdWxlSW5SdW5Mb29wOltOU1J1bkxvb3Ag
bWFpblJ1bkxvb3BdIGZvck1vZGU6TlNEZWZhdWx0UnVuTG9vcE1vZGVdOwotCi0gICAgW1tzZWxm
IHN0YW5kYXJkSW5wdXRQaXBlXSBvcGVuXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRQaXBl
XSBvcGVuXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRFcnJvclBpcGVdIG9wZW5dOwotCi0gICAgW1tz
ZWxmIHJlbGF5RGVsZWdhdGVdIGRpZENvbm5lY3RdOwotfQotCi0tICh2b2lkKWRpc2Nvbm5lY3QK
LXsKLSAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRQaXBlXSBjbG9zZV07Ci0gICAgW1tzZWxmIHN0
YW5kYXJkRXJyb3JQaXBlXSBjbG9zZV07Ci0gICAgW1tzZWxmIHN0YW5kYXJkSW5wdXRQaXBlXSBj
bG9zZV07Ci0gICAgW1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZERpc2Nvbm5lY3RdOwotfQotCi0t
ICh2b2lkKWNyZWF0ZUZJRk9zCi17Ci0gICAgbWtmaWZvKFtbc2VsZiBpblBpcGVQYXRoXSBVVEY4
U3RyaW5nXSwgMDY2Nik7Ci0gICAgbWtmaWZvKFtbc2VsZiBvdXRQaXBlUGF0aF0gVVRGOFN0cmlu
Z10sIDA2NjYpOwotICAgIG1rZmlmbyhbW3NlbGYgZXJyb3JQaXBlUGF0aF0gVVRGOFN0cmluZ10s
IDA2NjYpOwotfQotCi0tICh2b2lkKWRlc3Ryb3lGSUZPcwotewotICAgIHVubGluayhbW3NlbGYg
aW5QaXBlUGF0aF0gVVRGOFN0cmluZ10pOwotICAgIHVubGluayhbW3NlbGYgb3V0UGlwZVBhdGhd
IFVURjhTdHJpbmddKTsKLSAgICB1bmxpbmsoW1tzZWxmIGVycm9yUGlwZVBhdGhdIFVURjhTdHJp
bmddKTsKLX0KLQotLSAodm9pZCkgcmVsYXlTdHJlYW06KE5TSW5wdXRTdHJlYW0gKilzdHJlYW0K
LXsKLSAgICB1aW50OF90IGJ5dGVzWzEwMjRdOwotICAgIE5TSW50ZWdlciBieXRlc1JlYWQgPSBb
c3RyZWFtIHJlYWQ6Ynl0ZXMgbWF4TGVuZ3RoOjEwMjRdOwotICAgIE5TRGF0YSAqZGF0YSA9IFtO
U0RhdGEgZGF0YVdpdGhCeXRlczpieXRlcyBsZW5ndGg6Ynl0ZXNSZWFkXTsKLQotICAgIGlmIChz
dHJlYW0gPT0gW3NlbGYgc3RhbmRhcmRPdXRwdXRQaXBlXSkKLSAgICAgICAgW1tzZWxmIHJlbGF5
RGVsZWdhdGVdIGRpZFJlY2VpdmVTdGRvdXREYXRhOmRhdGFdOwotICAgIGVsc2UKLSAgICAgICAg
W1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZFJlY2VpdmVTdGRlcnJEYXRhOmRhdGFdOwotfQotCi0t
ICh2b2lkKXN0cmVhbTooTlNTdHJlYW0gKilhU3RyZWFtIGhhbmRsZUV2ZW50OihOU1N0cmVhbUV2
ZW50KWV2ZW50Q29kZQotewotICAgIHN3aXRjaCAoZXZlbnRDb2RlKSB7Ci0gICAgY2FzZSBOU1N0
cmVhbUV2ZW50Tm9uZToKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOU1N0cmVhbUV2ZW50SGFz
Qnl0ZXNBdmFpbGFibGU6Ci0gICAgICAgIFtzZWxmIHJlbGF5U3RyZWFtOihOU0lucHV0U3RyZWFt
ICopYVN0cmVhbV07Ci0gICAgY2FzZSBOU1N0cmVhbUV2ZW50SGFzU3BhY2VBdmFpbGFibGU6Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlNTdHJlYW1FdmVudE9wZW5Db21wbGV0ZWQ6Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgTlNTdHJlYW1FdmVudEVuZEVuY291bnRlcmVkOgotICAgICAg
ICBbW3NlbGYgcmVsYXlEZWxlZ2F0ZV0gZGlkQ3Jhc2hXaXRoTWVzc2FnZTpuaWxdOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnRFcnJvck9jY3VycmVkOgotICAgICAgICBb
W3NlbGYgcmVsYXlEZWxlZ2F0ZV0gZGlkQ3Jhc2hXaXRoTWVzc2FnZTpbW2FTdHJlYW0gc3RyZWFt
RXJyb3JdIGRlc2NyaXB0aW9uXV07Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotQGVuZApJ
bmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5
LmgJKHJldmlzaW9uIDIxMTM3MSkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0
UmVsYXkvTFRSZWxheS5oCShub25leGlzdGVudCkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgTFRSZWxheV9oCi0jZGVmaW5lIExUUmVsYXlfaAotCi0jaW1wb3J0IDxGb3Vu
ZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotQHByb3RvY29sIExUUmVsYXlEZWxlZ2F0ZSA8TlNPYmpl
Y3Q+Ci0tICh2b2lkKWRpZENvbm5lY3Q7Ci0tICh2b2lkKWRpZERpc2Nvbm5lY3Q7Ci0tICh2b2lk
KWRpZENyYXNoV2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZTsKLS0gKHZvaWQpZGlkUmVj
ZWl2ZVN0ZG91dERhdGE6KE5TRGF0YSAqKWRhdGE7Ci0tICh2b2lkKWRpZFJlY2VpdmVTdGRlcnJE
YXRhOihOU0RhdGEgKilkYXRhOwotQGVuZAotCi1AcHJvdG9jb2wgTFRSZWxheSA8TlNPYmplY3Qs
IE5TU3RyZWFtRGVsZWdhdGU+Ci0tICh2b2lkKXNldHVwOwotLSAodm9pZCl0ZWFyRG93bjsKLS0g
KHZvaWQpY29ubmVjdDsKLS0gKHZvaWQpZGlzY29ubmVjdDsKLUBwcm9wZXJ0eSAod2VhaykgaWQ8
TFRSZWxheURlbGVnYXRlPiByZWxheURlbGVnYXRlOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ry
b25nKSBOU091dHB1dFN0cmVhbSAqb3V0cHV0U3RyZWFtOwotQGVuZAotCi0jZW5kaWYKSW5kZXg6
IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xU
UmVsYXlDb250cm9sbGVyLmgJKHJldmlzaW9uIDIxMTM3MSkKKysrIFRvb2xzL0xheW91dFRlc3RS
ZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIuaAkobm9uZXhpc3RlbnQpCkBA
IC0xLDQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotI2lmbmRlZiBMVFJlbGF5Q29udHJvbGxlcl9oCi0j
ZGVmaW5lIExUUmVsYXlDb250cm9sbGVyX2gKLQotI2ltcG9ydCAiTFRSZWxheS5oIgotCi0jaW1w
b3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotQGNsYXNzIFNpbURldmljZTsKLQotQGlu
dGVyZmFjZSBMVFJlbGF5Q29udHJvbGxlciA6IE5TT2JqZWN0IDxMVFJlbGF5RGVsZWdhdGU+Ci0t
IChpZClpbml0V2l0aERldmljZTooU2ltRGV2aWNlICopZGV2aWNlIHByb2R1Y3REaXI6KE5TU3Ry
aW5nICopcHJvZHVjdERpciBhcHBQYXRoOihOU1N0cmluZyAqKWFwcFBhdGggZGV2aWNlVURJRDoo
TlNVVUlEICopdWRpZCBkdW1wVG9vbEFyZ3VtZW50czooTlNBcnJheSAqKWFyZ3VtZW50czsKLS0g
KHZvaWQpc3RhcnQ7Ci0tICh2b2lkKWZpbmlzaDsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29s
cy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLm0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5
Q29udHJvbGxlci5tCShyZXZpc2lvbiAyMTEzNzEpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkv
TGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLm0JKG5vbmV4aXN0ZW50KQpAQCAtMSwy
NzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgIkxUUmVsYXlDb250cm9sbGVyLmgiCi0K
LSNpbXBvcnQgIkNvcmVTaW11bGF0b3JTUEkuaCIKLSNpbXBvcnQgIkxUUGlwZVJlbGF5LmgiCi0j
aW1wb3J0IDxBcHBLaXQvQXBwS2l0Lmg+Ci0jaW1wb3J0IDxjcnRfZXh0ZXJucy5oPgotCi1AaW50
ZXJmYWNlIExUUmVsYXlDb250cm9sbGVyICgpCi1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcp
IGRpc3BhdGNoX3NvdXJjZV90IHN0YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJjZTsKLUBwcm9wZXJ0
eSAocmVhZG9ubHksIHN0cm9uZykgTlNGaWxlSGFuZGxlICpzdGFuZGFyZE91dHB1dDsKLUBwcm9w
ZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNGaWxlSGFuZGxlICpzdGFuZGFyZEVycm9yOwotQHBy
b3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU1N0cmluZyAqaXBjSWRlbnRpZmllcjsKLUBwcm9w
ZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKmFwcEJ1bmRsZUlkZW50aWZpZXI7Ci1A
cHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TU3RyaW5nICphcHBQYXRoOwotQHByb3BlcnR5
IChyZWFkb25seSwgc3Ryb25nKSBOU1VVSUQgKmRldmljZVVESUQ7Ci1AcHJvcGVydHkgKHJlYWRv
bmx5LCBzdHJvbmcpIE5TQXJyYXkgKmR1bXBUb29sQXJndW1lbnRzOwotQHByb3BlcnR5IChyZWFk
b25seSwgc3Ryb25nKSBOU1N0cmluZyAqcHJvZHVjdERpcjsKLUBwcm9wZXJ0eSAoc3Ryb25nKSBT
aW1EZXZpY2UgKmRldmljZTsKLUBwcm9wZXJ0eSAoc3Ryb25nKSBpZDxMVFJlbGF5PiByZWxheTsK
LUBwcm9wZXJ0eSBwaWRfdCBwaWQ7Ci1AcHJvcGVydHkgKHN0cm9uZykgZGlzcGF0Y2hfc291cmNl
X3QgYXBwRGlzcGF0Y2hTb3VyY2U7Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBMVFJlbGF5Q29u
dHJvbGxlcgotCi0tIChpZClpbml0V2l0aERldmljZTooU2ltRGV2aWNlICopZGV2aWNlIHByb2R1
Y3REaXI6KE5TU3RyaW5nICopcHJvZHVjdERpciBhcHBQYXRoOihOU1N0cmluZyAqKWFwcFBhdGgg
ZGV2aWNlVURJRDooTlNVVUlEICopdWRpZCBkdW1wVG9vbEFyZ3VtZW50czooTlNBcnJheSAqKWFy
Z3VtZW50cwotewotICAgIGlmICgoc2VsZiA9IFtzdXBlciBpbml0XSkpIHsKLSAgICAgICAgX2Rl
dmljZSA9IGRldmljZTsKLSAgICAgICAgX3Byb2R1Y3REaXIgPSBwcm9kdWN0RGlyOwotICAgICAg
ICBfYXBwUGF0aCA9IGFwcFBhdGg7Ci0gICAgICAgIF9hcHBCdW5kbGVJZGVudGlmaWVyID0gW1tO
U0J1bmRsZSBidW5kbGVXaXRoUGF0aDphcHBQYXRoXSBidW5kbGVJZGVudGlmaWVyXTsKLSAgICAg
ICAgX2RldmljZVVESUQgPSB1ZGlkOwotICAgICAgICBfZHVtcFRvb2xBcmd1bWVudHMgPSBhcmd1
bWVudHM7Ci0gICAgICAgIF9zdGFuZGFyZElucHV0RGlzcGF0Y2hTb3VyY2UgPSBkaXNwYXRjaF9z
b3VyY2VfY3JlYXRlKERJU1BBVENIX1NPVVJDRV9UWVBFX1JFQUQsIFNURElOX0ZJTEVOTywgMCwg
ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSk7Ci0gICAgICAgIF9zdGFuZGFyZE91dHB1dCA9IFtO
U0ZpbGVIYW5kbGUgZmlsZUhhbmRsZVdpdGhTdGFuZGFyZE91dHB1dF07Ci0gICAgICAgIF9zdGFu
ZGFyZEVycm9yID0gW05TRmlsZUhhbmRsZSBmaWxlSGFuZGxlV2l0aFN0YW5kYXJkRXJyb3JdOwot
Ci0gICAgICAgIGRpc3BhdGNoX3NvdXJjZV9zZXRfZXZlbnRfaGFuZGxlcihfc3RhbmRhcmRJbnB1
dERpc3BhdGNoU291cmNlLCBeewotICAgICAgICAgICAgdWludDhfdCBidWZmZXJbMTAyNF07Ci0g
ICAgICAgICAgICBzc2l6ZV90IGxlbiA9IHJlYWQoU1RESU5fRklMRU5PLCBidWZmZXIsIHNpemVv
ZihidWZmZXIpKTsKLSAgICAgICAgICAgIGlmIChsZW4gPiAwKSB7Ci0gICAgICAgICAgICAgICAg
QHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIFtbW3NlbGYgcmVsYXldIG91dHB1dFN0cmVhbV0g
d3JpdGU6YnVmZmVyIG1heExlbmd0aDpsZW5dOwotICAgICAgICAgICAgICAgIH0gQGNhdGNoIChO
U0V4Y2VwdGlvbiAqZSkgewotICAgICAgICAgICAgICAgICAgICAvLyBCcm9rZW4gcGlwZSAtIHRo
ZSBkdW1wIHRvb2wgY3Jhc2hlZC4gVGltZSB0byBkaWUuCi0gICAgICAgICAgICAgICAgICAgIFtz
ZWxmIGRpZENyYXNoV2l0aE1lc3NhZ2U6bmlsXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIEVPRiBSZWNlaXZlZCBvbiB0aGUgcmVs
YXkncyBzdGFuZGFyZCBpbnB1dC4KLSAgICAgICAgICAgICAgICBbc2VsZiBmaW5pc2hdOwotICAg
ICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBfcmVsYXkgPSBbW0xUUGlwZVJlbGF5
IGFsbG9jXSBpbml0V2l0aFByZWZpeDpbQCIvdG1wIiBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21w
b25lbnQ6c2VsZi5pcGNJZGVudGlmaWVyXV07Ci0gICAgICAgIFtfcmVsYXkgc2V0UmVsYXlEZWxl
Z2F0ZTpzZWxmXTsKLSAgICB9Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKE5TU3RyaW5nICop
aXBjSWRlbnRpZmllcgotewotICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpA
IiVALSVAIiwgc2VsZi5hcHBCdW5kbGVJZGVudGlmaWVyLCBzZWxmLmRldmljZVVESUQuVVVJRFN0
cmluZ107Ci19Ci0KLS0gKE5TU3RyaW5nICopcHJvY2Vzc05hbWUKLXsKLSAgICByZXR1cm4gW3Nl
bGYuYXBwQnVuZGxlSWRlbnRpZmllciBjb21wb25lbnRzU2VwYXJhdGVkQnlTdHJpbmc6QCIuIl0u
bGFzdE9iamVjdDsKLX0KLQotLSAodm9pZClkaWRSZWNlaXZlU3Rkb3V0RGF0YTooTlNEYXRhICop
ZGF0YQotewotICAgIEB0cnkgewotICAgICAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRdIHdyaXRl
RGF0YTpkYXRhXTsKLSAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24gKmV4Y2VwdGlvbikgewotICAg
ICAgICAvLyBOU0ZpbGVIYW5kbGVPcGVyYXRpb25FeGNlcHRpb24KLSAgICAgICAgLy8gQnJva2Vu
IHBpcGUgLSB0aGUgdGVzdCBoYXJuZXNzIHN0b3BwZWQgbGlzdGVuaW5nIHRvIHVzLAotICAgICAg
ICAvLyBwcm9iYWJseSBiZWNhdXNlIHdlIHRpbWVkIG91dCBvciBhIHJ1biB3YXMgY2FuY2VsZWQu
Ci0gICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpZGlkUmVj
ZWl2ZVN0ZGVyckRhdGE6KE5TRGF0YSAqKWRhdGEKLXsKLSAgICBAdHJ5IHsKLSAgICAgICAgW1tz
ZWxmIHN0YW5kYXJkRXJyb3JdIHdyaXRlRGF0YTpkYXRhXTsKLSAgICB9IEBjYXRjaCAoTlNFeGNl
cHRpb24gKmV4Y2VwdGlvbikgewotICAgICAgICAvLyBOU0ZpbGVIYW5kbGVPcGVyYXRpb25FeGNl
cHRpb24KLSAgICAgICAgLy8gQnJva2VuIHBpcGUgLSB0aGUgdGVzdCBoYXJuZXNzIHN0b3BwZWQg
bGlzdGVuaW5nIHRvIHVzLAotICAgICAgICAvLyBwcm9iYWJseSBiZWNhdXNlIHdlIHRpbWVkIG91
dCBvciBhIHJ1biB3YXMgY2FuY2VsZWQuCi0gICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAg
ICB9Ci19Ci0KLS0gKHZvaWQpZGlkRGlzY29ubmVjdAotewotICAgIGRpc3BhdGNoX3N1c3BlbmQo
W3NlbGYgc3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNlXSk7Ci19Ci0KLS0gKHZvaWQpZGlkQ29u
bmVjdAotewotICAgIGRpc3BhdGNoX3Jlc3VtZShbc2VsZiBzdGFuZGFyZElucHV0RGlzcGF0Y2hT
b3VyY2VdKTsKLX0KLQotLSAodm9pZClkaWRDcmFzaFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1l
c3NhZ2UKLXsKLSAgICBbW3NlbGYgcmVsYXldIGRpc2Nvbm5lY3RdOwotICAgIE5TU3RyaW5nICpj
cmFzaE1lc3NhZ2UgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIlxuI0NSQVNIRUQgLSAl
QCAocGlkICVkKVxuIiwgW3NlbGYgcHJvY2Vzc05hbWVdLCBbc2VsZiBwaWRdXTsKLQotICAgIGlm
IChtZXNzYWdlKQotICAgICAgICBjcmFzaE1lc3NhZ2UgPSBbY3Jhc2hNZXNzYWdlIHN0cmluZ0J5
QXBwZW5kaW5nRm9ybWF0OkAiJUBcbiIsIG1lc3NhZ2VdOwotCi0gICAgW1tzZWxmIHN0YW5kYXJk
RXJyb3JdIHdyaXRlRGF0YTpbY3Jhc2hNZXNzYWdlIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0
cmluZ0VuY29kaW5nXV07Ci0gICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JdIGNsb3NlRmlsZV07Ci0g
ICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0XSBjbG9zZUZpbGVdOwotICAgIGV4aXQoRVhJVF9GQUlM
VVJFKTsKLX0KLQotLSAodm9pZClpbnN0YWxsQXBwCi17Ci0gICAgTlNEaWN0aW9uYXJ5ICppbnN0
YWxsT3B0aW9ucyA9IEB7Ci0gICAgICAgIChOU1N0cmluZyAqKWtDRkJ1bmRsZUlkZW50aWZpZXJL
ZXk6IHNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciwKLSAgICB9OwotCi0gICAgTlNFcnJvciAqZXJy
b3IgPSBuaWw7Ci0gICAgQk9PTCBpbnN0YWxsZWQgPSBbc2VsZi5kZXZpY2UgaW5zdGFsbEFwcGxp
Y2F0aW9uOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6c2VsZi5hcHBQYXRoXSB3aXRoT3B0aW9uczpp
bnN0YWxsT3B0aW9ucyBlcnJvcjomZXJyb3JdOwotICAgIGlmICghaW5zdGFsbGVkKSB7Ci0gICAg
ICAgIE5TTG9nKEAiQ291bGRuJ3QgaW5zdGFsbCAlQDogJUAiLCBzZWxmLmFwcFBhdGgsIGVycm9y
LmRlc2NyaXB0aW9uKTsKLSAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0KLX0KLQot
LSAodm9pZClraWxsQXBwCi17Ci0gICAgZGlzcGF0Y2hfc291cmNlX3QgZGlzcGF0Y2ggPSBbc2Vs
ZiBhcHBEaXNwYXRjaFNvdXJjZV07Ci0KLSAgICBpZiAoZGlzcGF0Y2gpCi0gICAgICAgIGRpc3Bh
dGNoX3NvdXJjZV9jYW5jZWwoZGlzcGF0Y2gpOwotCi0gICAgaWYgKFtzZWxmIHBpZF0gPiAxKSB7
Ci0gICAgICAgIGtpbGwoc2VsZi5waWQsIFNJR0tJTEwpOwotICAgICAgICBbc2VsZiBzZXRQaWQ6
LTFdOwotICAgIH0KLSAgICBbc2VsZiBzZXRBcHBEaXNwYXRjaFNvdXJjZTpuaWxdOwotfQotCi0t
IChOU0RpY3Rpb25hcnkgKilfZW52aXJvbm1lbnRWYXJpYWJsZXMKLXsKLSAgICBzdGF0aWMgTlNE
aWN0aW9uYXJ5ICplbnZpcm9ubWVudFZhcmlhYmxlczsKLSAgICBzdGF0aWMgZGlzcGF0Y2hfb25j
ZV90IG9uY2U7Ci0KLSAgICBkaXNwYXRjaF9vbmNlKCZvbmNlLCBeewotICAgICAgICBOU1N0cmlu
ZyAqcHJvZHVjdERpcmVjdG9yeSA9IFtzZWxmIHByb2R1Y3REaXJdOwotCi0gICAgICAgIE5TTXV0
YWJsZURpY3Rpb25hcnkgKmRpY3Rpb25hcnkgPSBbQHsKLSAgICAgICAgICAgIEAiSVBDX0lERU5U
SUZJRVIiOiBzZWxmLmlwY0lkZW50aWZpZXIsCi0gICAgICAgICAgICBAIkRZTERfRlJBTUVXT1JL
X1BBVEgiOiBwcm9kdWN0RGlyZWN0b3J5LAotICAgICAgICAgICAgQCJfX1hQQ19EWUxEX0ZSQU1F
V09SS19QQVRIIjogcHJvZHVjdERpcmVjdG9yeSwKLSAgICAgICAgICAgIEAiRFlMRF9MSUJSQVJZ
X1BBVEgiOiBwcm9kdWN0RGlyZWN0b3J5LAotICAgICAgICAgICAgQCJfX1hQQ19EWUxEX0xJQlJB
UllfUEFUSCI6IHByb2R1Y3REaXJlY3RvcnksCi0gICAgICAgIH0gbXV0YWJsZUNvcHldOwotCi0g
ICAgICAgIGZvciAoTlNTdHJpbmcgKmtleU5hbWUgaW4gQFtAIkRZTERfSU5TRVJUX0xJQlJBUklF
UyIsIEAiTWFsbG9jU3RhY2tMb2dnaW5nIiwgQCJMT0NBTF9SRVNPVVJDRV9ST09UIiwgQCJEVU1Q
UkVOREVSVFJFRV9URU1QIl0pIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhbHVlID0gZ2V0
ZW52KFtrZXlOYW1lIFVURjhTdHJpbmddKTsKLSAgICAgICAgICAgIGlmICh2YWx1ZSAmJiBzdHJs
ZW4odmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgTlNTdHJpbmcgKm5zVmFsdWUgPSBbTlNTdHJp
bmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6dmFsdWVdOwotICAgICAgICAgICAgICAgIFtkaWN0aW9u
YXJ5IHNldE9iamVjdDpuc1ZhbHVlIGZvcktleTprZXlOYW1lXTsKLSAgICAgICAgICAgICAgICBb
ZGljdGlvbmFyeSBzZXRPYmplY3Q6bnNWYWx1ZSBmb3JLZXk6W0AiX19YUENfIiBzdHJpbmdCeUFw
cGVuZGluZ1N0cmluZzprZXlOYW1lXV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBmb3IgKGNoYXIqKiBlbnZwID0gKl9OU0dldEVudmlyb24oKTsgKmVudnA7IGVudnArKykg
ewotICAgICAgICAgICAgY29uc3QgY2hhciogZW52ID0gKmVudnA7Ci0gICAgICAgICAgICBpZiAo
IXN0cm5jbXAoIkpTQ18iLCBlbnYsIDQpIHx8ICFzdHJuY21wKCJfX1hQQ19KU0NfIiwgZW52LCAx
MCkpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBlcXVhbCA9IHN0cmNocihlbnYsICc9
Jyk7Ci0gICAgICAgICAgICAgICAgaWYgKCFlcXVhbCkgewotICAgICAgICAgICAgICAgICAgICBO
U0xvZyhAIk1pc3NpbmcgJz0nIGluIGVudiB2YXIgJyVzJyIsIGVudik7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgbWF4S2V5TGVuZ3RoID0gMjU2OwotICAgICAgICAgICAgICAgIHNp
emVfdCBrZXlMZW5ndGggPSBlcXVhbCAtIGVudjsKLSAgICAgICAgICAgICAgICBpZiAoa2V5TGVu
Z3RoID49IG1heEtleUxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICBOU0xvZyhAIkVudiB2
YXIgJyVzJyBpcyB0b28gbG9uZyIsIGVudik7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGNoYXIga2V5W21heEtleUxl
bmd0aF07Ci0gICAgICAgICAgICAgICAgc3RybmNweShrZXksIGVudiwga2V5TGVuZ3RoKTsKLSAg
ICAgICAgICAgICAgICBrZXlba2V5TGVuZ3RoXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgY29u
c3QgY2hhciogdmFsdWUgPSBlcXVhbCArIDE7Ci0KLSAgICAgICAgICAgICAgICBOU1N0cmluZyAq
bnNLZXkgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6a2V5XTsKLSAgICAgICAgICAg
ICAgICBOU1N0cmluZyAqbnNWYWx1ZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzp2
YWx1ZV07Ci0gICAgICAgICAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0Om5zVmFsdWUgZm9y
S2V5Om5zS2V5XTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGVudmlyb25t
ZW50VmFyaWFibGVzID0gW2RpY3Rpb25hcnkgY29weV07Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4g
ZW52aXJvbm1lbnRWYXJpYWJsZXM7Ci19Ci0KLS0gKHZvaWQpbGF1bmNoQXBwCi17Ci0gICAgTlNE
aWN0aW9uYXJ5ICpsYXVuY2hPcHRpb25zID0gQHsKLSAgICAgICAga1NpbURldmljZUxhdW5jaEFw
cGxpY2F0aW9uRW52aXJvbm1lbnQ6IFtzZWxmIF9lbnZpcm9ubWVudFZhcmlhYmxlc10sCi0gICAg
ICAgIGtTaW1EZXZpY2VMYXVuY2hBcHBsaWNhdGlvbkFyZ3VtZW50czogW3NlbGYgZHVtcFRvb2xB
cmd1bWVudHNdLAotICAgIH07Ci0KLSAgICBOU0Vycm9yICplcnJvcjsKLSAgICBwaWRfdCBwaWQg
PSBbc2VsZi5kZXZpY2UgbGF1bmNoQXBwbGljYXRpb25XaXRoSUQ6c2VsZi5hcHBCdW5kbGVJZGVu
dGlmaWVyIG9wdGlvbnM6bGF1bmNoT3B0aW9ucyBlcnJvcjomZXJyb3JdOwotCi0gICAgaWYgKHBp
ZCA8IDApIHsKLSAgICAgICAgTlNMb2coQCJDb3VsZG4ndCBsYXVuY2ggJUA6ICVAIiwgc2VsZi5h
cHBCdW5kbGVJZGVudGlmaWVyLCBlcnJvci5kZXNjcmlwdGlvbik7Ci0gICAgICAgIGV4aXQoRVhJ
VF9GQUlMVVJFKTsKLSAgICB9Ci0KLSAgICBbc2VsZiBzZXRQaWQ6cGlkXTsKLQotICAgIGRpc3Bh
dGNoX3F1ZXVlX3QgcXVldWUgPSBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpOwotICAgIGRpc3Bh
dGNoX3NvdXJjZV90IHNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSA9IGRpc3BhdGNoX3Nv
dXJjZV9jcmVhdGUoRElTUEFUQ0hfU09VUkNFX1RZUEVfUFJPQywgW3NlbGYgcGlkXSwgRElTUEFU
Q0hfUFJPQ19FWElULCBxdWV1ZSk7Ci0gICAgW3NlbGYgc2V0QXBwRGlzcGF0Y2hTb3VyY2U6c2lt
dWxhdG9yQXBwRXhpdERpc3BhdGNoU291cmNlXTsKLSAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2V2
ZW50X2hhbmRsZXIoc2ltdWxhdG9yQXBwRXhpdERpc3BhdGNoU291cmNlLCBeewotICAgICAgICBk
aXNwYXRjaF9zb3VyY2VfY2FuY2VsKHNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSk7Ci0g
ICAgICAgIFtzZWxmIGRpZENyYXNoV2l0aE1lc3NhZ2U6bmlsXTsKLSAgICB9KTsKLSAgICBkaXNw
YXRjaF9yZXN1bWUoc2ltdWxhdG9yQXBwRXhpdERpc3BhdGNoU291cmNlKTsKLX0KLQotLSAodm9p
ZClzdGFydAotewotICAgIFtzZWxmIGluc3RhbGxBcHBdOwotICAgIFtbc2VsZiByZWxheV0gc2V0
dXBdOwotICAgIFtzZWxmIGxhdW5jaEFwcF07Ci0gICAgW1tzZWxmIHJlbGF5XSBjb25uZWN0XTsK
LX0KLQotLSAodm9pZClmaW5pc2gKLXsKLSAgICBbW3NlbGYgcmVsYXldIGRpc2Nvbm5lY3RdOwot
ICAgIFtzZWxmIGtpbGxBcHBdOwotICAgIGV4aXQoRVhJVF9TVUNDRVNTKTsKLX0KLQotQGVuZApJ
bmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9tYWluLm0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9tYWluLm0JKHJl
dmlzaW9uIDIxMTM3MSkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkv
bWFpbi5tCShub25leGlzdGVudCkKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW1wb3J0ICJDb3JlU2ltdWxhdG9yU1BJLmgiCi0jaW1wb3J0ICJMVFJlbGF5Q29udHJvbGxl
ci5oIgotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLXN0YXRpYyBMVFJlbGF5
Q29udHJvbGxlciAqcmVsYXlDb250cm9sbGVyOwotCi12b2lkIHVzYWdlKCkKLXsKLSAgICBOU1N0
cmluZyAqaGVscFRleHQgPSBAIkxheW91dFRlc3RSZWxheTogcnVuIGEgZHVtcCB0b29sIGluIHRo
ZSBzaW11bGF0b3IuIE5vdCBmb3IgZGlyZWN0IGNvbnN1bXB0aW9uLlxuIgotICAgICAgICAiVXNh
Z2U6IExheW91dFRlc3RSZWxheSBbLWhdIFtvcHRpb25zXSAtLSBbZHVtcCB0b29sIGFyZ3VtZW50
c11cbiIKLSAgICAgICAgIlJlcXVpcmVkIG9wdGlvbnM6XG4iCi0gICAgICAgICIgICAgLXVkaWQg
PGlkZW50aWZpZXI+ICAgICAgIFNpbXVsYXRvciBkZXZpY2UgaWRlbnRpZmllclxuIgotICAgICAg
ICAiICAgIC1hcHAgPGFwcF9wYXRoPiAgICAgICAgICBQYXRoIHRvIHRoZSBidWlsdCBpT1MgLmFw
cCBidW5kbGUgZGlyZWN0b3J5LlxuIgotICAgICAgICAiICAgIC1wcm9kdWN0RGlyIDxkaXI+ICAg
ICAgICAvcGF0aC90by9XZWJLaXRCdWlsZC97Y29uZmlndXJhdGlvbn0te3Nob3J0IHBsYXRmb3Jt
fS5cbiI7Ci0KLSAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBbaGVscFRleHQgVVRGOFN0cmlu
Z10pOwotfQotCi1OU1N0cmluZyAqZ2V0UmVxdWlyZWRTdHJpbmdBcmd1bWVudChOU1N0cmluZyAq
cGFyYW1ldGVyKQotewotICAgIE5TVXNlckRlZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJEZWZh
dWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c107Ci0gICAgTlNTdHJpbmcgKmFyZ3VtZW50ID0gW2Rl
ZmF1bHRzIHN0cmluZ0ZvcktleTpwYXJhbWV0ZXJdOwotCi0gICAgaWYgKCFhcmd1bWVudCkgewot
ICAgICAgICBOU0xvZyhAIi0lQCBpcyByZXF1aXJlZC4iLCBwYXJhbWV0ZXIpOwotICAgICAgICB1
c2FnZSgpOwotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotICAgIHJldHVybiBh
cmd1bWVudDsKLX0KLQotTlNBcnJheSAqZ2V0RHVtcFRvb2xBcmd1bWVudHMoKQotewotICAgIE5T
TXV0YWJsZUFycmF5ICpkdW1wVG9vbEFyZ3VtZW50cyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRdOwotICAgIE5TQXJyYXkgKnByb2Nlc3NBcmdzID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nl
c3NJbmZvXSBhcmd1bWVudHNdOwotICAgIEJPT0wgYXBwZW5kaW5nID0gTk87Ci0gICAgZm9yIChO
U1N0cmluZyAqYXJnIGluIHByb2Nlc3NBcmdzKSB7Ci0gICAgICAgIGlmIChbYXJnIGlzRXF1YWxU
b1N0cmluZzpAIi0tIl0pIHsKLSAgICAgICAgICAgIGFwcGVuZGluZyA9IFlFUzsKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChhcHBlbmRpbmcpCi0gICAgICAg
ICAgICBbZHVtcFRvb2xBcmd1bWVudHMgYWRkT2JqZWN0OmFyZ107Ci0gICAgfQotICAgIHJldHVy
biBkdW1wVG9vbEFyZ3VtZW50czsKLX0KLQotdm9pZCBmaW5pc2goKQotewotICAgIFtyZWxheUNv
bnRyb2xsZXIgZmluaXNoXTsKLX0KLQotdm9pZCByZWNlaXZlZFNpZ25hbChpbnQgc2lnbmFsKQot
ewotICAgIGV4aXQoRVhJVF9TVUNDRVNTKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0
IGNoYXIgKiBhcmd2W10pCi17Ci0gICAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAgICAgIE5TQXJy
YXkgKmhlbHBBcmd1bWVudHMgPSBAW0AiLWgiLCBAIi0taGVscCJdOwotICAgICAgICBmb3IgKE5T
U3RyaW5nICpoZWxwQXJndW1lbnQgaW4gaGVscEFyZ3VtZW50cykgewotICAgICAgICAgICAgaWYg
KFtbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIGFyZ3VtZW50c10gaW5kZXhPZk9iamVjdDpo
ZWxwQXJndW1lbnRdICE9IE5TTm90Rm91bmQpIHsKLSAgICAgICAgICAgICAgICB1c2FnZSgpOwot
ICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0jaWYgVVNFX1NJTV9TRVJWSUNFX0NPTlRFWFQKLSAgICAgICAgTlNTdHJpbmcgKmRl
dmVsb3BlckRpcmVjdG9yeSA9IGdldFJlcXVpcmVkU3RyaW5nQXJndW1lbnQoQCJkZXZlbG9wZXJE
aXIiKTsKLSNlbmRpZgotICAgICAgICBOU1VVSUQgKnVkaWQgPSBbW05TVVVJRCBhbGxvY10gaW5p
dFdpdGhVVUlEU3RyaW5nOmdldFJlcXVpcmVkU3RyaW5nQXJndW1lbnQoQCJ1ZGlkIildOwotICAg
ICAgICBOU1N0cmluZyAqYXBwUGF0aCA9IGdldFJlcXVpcmVkU3RyaW5nQXJndW1lbnQoQCJhcHAi
KTsKLSAgICAgICAgTlNTdHJpbmcgKnByb2R1Y3REaXJlY3RvcnkgPSBnZXRSZXF1aXJlZFN0cmlu
Z0FyZ3VtZW50KEAicHJvZHVjdERpciIpOwotICAgICAgICBOU0FycmF5ICpkdW1wVG9vbEFyZ3Vt
ZW50cyA9IGdldER1bXBUb29sQXJndW1lbnRzKCk7Ci0KLSNpZiBVU0VfU0lNX1NFUlZJQ0VfQ09O
VEVYVAotICAgICAgICBOU0Vycm9yICplcnJvcjsKLSAgICAgICAgU2ltU2VydmljZUNvbnRleHQg
KnNlcnZpY2VDb250ZXh0ID0gW1NpbVNlcnZpY2VDb250ZXh0IHNoYXJlZFNlcnZpY2VDb250ZXh0
Rm9yRGV2ZWxvcGVyRGlyOmRldmVsb3BlckRpcmVjdG9yeSBlcnJvcjomZXJyb3JdOwotICAgICAg
ICBpZiAoIXNlcnZpY2VDb250ZXh0KSB7Ci0gICAgICAgICAgICBOU0xvZyhAIkRldmljZSBjb250
ZXh0IGNvdWxkbid0IGJlIGZvdW5kOiAlQCIsIGVycm9yKTsKLSAgICAgICAgICAgIGV4aXQoRVhJ
VF9GQUlMVVJFKTsKLSAgICAgICAgfQotICAgICAgICBTaW1EZXZpY2VTZXQgKmRldmljZVNldCA9
IFtzZXJ2aWNlQ29udGV4dCBkZWZhdWx0RGV2aWNlU2V0V2l0aEVycm9yOm5pbF07Ci0gICAgICAg
IGlmICghZGV2aWNlU2V0KSB7Ci0gICAgICAgICAgICBOU0xvZyhAIkRlZmF1bHQgZGV2aWNlIHNl
dCBjb3VsZG4ndCBiZSBmb3VuZDogJUAiLCBlcnJvcik7Ci0gICAgICAgICAgICBleGl0KEVYSVRf
RkFJTFVSRSk7Ci0gICAgICAgIH0KLSAgICAgICAgU2ltRGV2aWNlICpkZXZpY2UgPSBbZGV2aWNl
U2V0LmRldmljZXNCeVVESUQgb2JqZWN0Rm9yS2V5OnVkaWRdOwotI2Vsc2UKLSAgICAgICAgU2lt
RGV2aWNlICpkZXZpY2UgPSBbU2ltRGV2aWNlU2V0LmRlZmF1bHRTZXQuZGV2aWNlc0J5VURJRCBv
YmplY3RGb3JLZXk6dWRpZF07Ci0jZW5kaWYKLSAgICAgICAgaWYgKCFkZXZpY2UpIHsKLSAgICAg
ICAgICAgIE5TTG9nKEAiRGV2aWNlICVAIGNvdWxkbid0IGJlIGZvdW5kIiwgdWRpZCk7Ci0gICAg
ICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZWxheUNv
bnRyb2xsZXIgPSBbW0xUUmVsYXlDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0aERldmljZTpkZXZp
Y2UgcHJvZHVjdERpcjpwcm9kdWN0RGlyZWN0b3J5IGFwcFBhdGg6YXBwUGF0aCBkZXZpY2VVRElE
OnVkaWQgZHVtcFRvb2xBcmd1bWVudHM6ZHVtcFRvb2xBcmd1bWVudHNdOwotICAgICAgICBbcmVs
YXlDb250cm9sbGVyIHN0YXJ0XTsKLQotICAgICAgICBhdGV4aXQoZmluaXNoKTsKLSAgICAgICAg
c2lnbmFsKFNJR0lOVCwgcmVjZWl2ZWRTaWduYWwpOwotICAgICAgICBzaWduYWwoU0lHVEVSTSwg
cmVjZWl2ZWRTaWduYWwpOwotCi0gICAgICAgIFtbTlNSdW5Mb29wIG1haW5SdW5Mb29wXSBydW5d
OwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9M
YXlvdXRUZXN0UmVsYXkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5Lnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDIxMTM3MSkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRU
ZXN0UmVsYXkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkobm9uZXhpc3RlbnQpCkBAIC0xLDIw
MiArMCwwIEBACi0vLyAhJCpVVEY4KiQhCi17Ci0JYXJjaGl2ZVZlcnNpb24gPSAxOwotCWNsYXNz
ZXMgPSB7Ci0JfTsKLQlvYmplY3RWZXJzaW9uID0gNDY7Ci0Jb2JqZWN0cyA9IHsKLQotLyogQmVn
aW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjgxOTg4MUQ0MzAwNEY2Q0MyIC8q
IG1haW4ubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJF
OEQzRUY3MTk4ODFENDMwMDRGNkNDMiAvKiBtYWluLm0gKi87IH07Ci0JCTJFOEQzRjAyMTk4ODFG
RDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkU4RDNGMDExOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5
Lm0gKi87IH07Ci0JCTJFOEQzRjA2MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxl
ci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU4RDNG
MDUxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLm0gKi87IH07Ci0vKiBFbmQg
UEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYQ29weUZpbGVzQnVpbGRQaGFz
ZSBzZWN0aW9uICovCi0JCTJFOEQzRUYyMTk4ODFENDMwMDRGNkNDMiAvKiBDb3B5RmlsZXMgKi8g
PSB7Ci0JCQlpc2EgPSBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKLQkJCWRzdFBhdGggPSAvdXNyL3NoYXJlL21hbi9tYW4xLzsKLQkJCWRz
dFN1YmZvbGRlclNwZWMgPSAwOwotCQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDE7Ci0JCX07Ci0vKiBFbmQgUEJYQ29weUZpbGVzQnVp
bGRQaGFzZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAq
LwotCQkyRThEM0VGNDE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1v
LmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBMYXlvdXRUZXN0UmVsYXk7
IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0JCTJFOEQzRUY3MTk4ODFENDMw
MDRGNkNDMiAvKiBtYWluLm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IG1haW4ubTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFz
ZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQueGNjb25maWc7IG5hbWUgPSBEZWJ1Z1JlbGVhc2UueGNjb25maWc7IHBhdGggPSBD
b25maWd1cmF0aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTJFOEQzRUZGMTk4ODFFMjUwMDRGNkNDMiAvKiBCYXNlLnhjY29uZmlnICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZp
ZzsgbmFtZSA9IEJhc2UueGNjb25maWc7IHBhdGggPSBDb25maWd1cmF0aW9ucy9CYXNlLnhjY29u
ZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0YwMDE5ODgxRjI5MDA0RjZD
QzIgLyogTFRSZWxheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMVFJlbGF5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTJFOEQzRjAxMTk4ODFGRDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBMVFBpcGVSZWxheS5tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0YwMzE5ODgxRkUyMDA0RjZDQzIgLyogTFRQ
aXBlUmVsYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTFRQaXBlUmVsYXkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDQxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9s
bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExUUmVsYXlDb250cm9sbGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOEQzRjA1MTk4ODI0MDYwMDRGNkND
MiAvKiBMVFJlbGF5Q29udHJvbGxlci5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBh
dGggPSBMVFJlbGF5Q29udHJvbGxlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlD
RTFGQkMxNTFCMjkwRTc5MDAwMTM2RjUgLyogQ29yZVNpbXVsYXRvclNQSS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb3JlU2ltdWxhdG9yU1BJLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0vKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCi0KLS8qIEJl
Z2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjExOTg4MUQ0
MzAwNEY2Q0MyIC8qIEZyYW1ld29ya3MgKi8gPSB7Ci0JCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVp
bGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgK
LQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsK
LS8qIEVuZCBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBC
WEdyb3VwIHNlY3Rpb24gKi8KLQkJMkU4RDNFRUIxOTg4MUQ0MzAwNEY2Q0MyID0gewotCQkJaXNh
ID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQkyRThEM0VGRjE5ODgxRTI1MDA0RjZD
QzIgLyogQmFzZS54Y2NvbmZpZyAqLywKLQkJCQkyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyog
RGVidWdSZWxlYXNlLnhjY29uZmlnICovLAotCQkJCTJFOEQzRUY2MTk4ODFENDMwMDRGNkNDMiAv
KiBMYXlvdXRUZXN0UmVsYXkgKi8sCi0JCQkJMkU4RDNFRjUxOTg4MUQ0MzAwNEY2Q0MyIC8qIFBy
b2R1Y3RzICovLAotCQkJKTsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCTJF
OEQzRUY1MTk4ODFENDMwMDRGNkNDMiAvKiBQcm9kdWN0cyAqLyA9IHsKLQkJCWlzYSA9IFBCWEdy
b3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMkU4RDNFRjQxOTg4MUQ0MzAwNEY2Q0MyIC8qIExh
eW91dFRlc3RSZWxheSAqLywKLQkJCSk7Ci0JCQluYW1lID0gUHJvZHVjdHM7Ci0JCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOwotCQl9OwotCQkyRThEM0VGNjE5ODgxRDQzMDA0RjZDQzIgLyogTGF5
b3V0VGVzdFJlbGF5ICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgK
LQkJCQkyRThEM0VGNzE5ODgxRDQzMDA0RjZDQzIgLyogbWFpbi5tICovLAotCQkJCUNFMUZCQzE1
MUIyOTBFNzkwMDAxMzZGNSAvKiBDb3JlU2ltdWxhdG9yU1BJLmggKi8sCi0JCQkJMkU4RDNGMDAx
OTg4MUYyOTAwNEY2Q0MyIC8qIExUUmVsYXkuaCAqLywKLQkJCQkyRThEM0YwMTE5ODgxRkQwMDA0
RjZDQzIgLyogTFRQaXBlUmVsYXkubSAqLywKLQkJCQkyRThEM0YwMzE5ODgxRkUyMDA0RjZDQzIg
LyogTFRQaXBlUmVsYXkuaCAqLywKLQkJCQkyRThEM0YwNDE5ODgyNDA2MDA0RjZDQzIgLyogTFRS
ZWxheUNvbnRyb2xsZXIuaCAqLywKLQkJCQkyRThEM0YwNTE5ODgyNDA2MDA0RjZDQzIgLyogTFRS
ZWxheUNvbnRyb2xsZXIubSAqLywKLQkJCSk7Ci0JCQlwYXRoID0gTGF5b3V0VGVzdFJlbGF5Owot
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLS8qIEVuZCBQQlhHcm91cCBzZWN0aW9u
ICovCi0KLS8qIEJlZ2luIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCi0JCTJFOEQzRUYzMTk4
ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8gPSB7Ci0JCQlpc2EgPSBQQlhOYXRp
dmVUYXJnZXQ7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMkU4RDNFRkIxOTg4MUQ0MzAw
NEY2Q0MyIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJM
YXlvdXRUZXN0UmVsYXkiICovOwotCQkJYnVpbGRQaGFzZXMgPSAoCi0JCQkJMkU4RDNFRjAxOTg4
MUQ0MzAwNEY2Q0MyIC8qIFNvdXJjZXMgKi8sCi0JCQkJMkU4RDNFRjExOTg4MUQ0MzAwNEY2Q0My
IC8qIEZyYW1ld29ya3MgKi8sCi0JCQkJMkU4RDNFRjIxOTg4MUQ0MzAwNEY2Q0MyIC8qIENvcHlG
aWxlcyAqLywKLQkJCSk7Ci0JCQlidWlsZFJ1bGVzID0gKAotCQkJKTsKLQkJCWRlcGVuZGVuY2ll
cyA9ICgKLQkJCSk7Ci0JCQluYW1lID0gTGF5b3V0VGVzdFJlbGF5OwotCQkJcHJvZHVjdE5hbWUg
PSBMYXlvdXRUZXN0UmVsYXk7Ci0JCQlwcm9kdWN0UmVmZXJlbmNlID0gMkU4RDNFRjQxOTg4MUQ0
MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLzsKLQkJCXByb2R1Y3RUeXBlID0gImNvbS5h
cHBsZS5wcm9kdWN0LXR5cGUudG9vbCI7Ci0JCX07Ci0vKiBFbmQgUEJYTmF0aXZlVGFyZ2V0IHNl
Y3Rpb24gKi8KLQotLyogQmVnaW4gUEJYUHJvamVjdCBzZWN0aW9uICovCi0JCTJFOEQzRUVDMTk4
ODFENDMwMDRGNkNDMiAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKLQkJCWlzYSA9IFBCWFByb2pl
Y3Q7Ci0JCQlhdHRyaWJ1dGVzID0gewotCQkJCUxhc3RVcGdyYWRlQ2hlY2sgPSAwNjAwOwotCQkJ
CU9SR0FOSVpBVElPTk5BTUUgPSAiQXBwbGUsIEluYy4iOwotCQkJCVRhcmdldEF0dHJpYnV0ZXMg
PSB7Ci0JCQkJCTJFOEQzRUYzMTk4ODFENDMwMDRGNkNDMiA9IHsKLQkJCQkJCUNyZWF0ZWRPblRv
b2xzVmVyc2lvbiA9IDYuMDsKLQkJCQkJfTsKLQkJCQl9OwotCQkJfTsKLQkJCWJ1aWxkQ29uZmln
dXJhdGlvbkxpc3QgPSAyRThEM0VFRjE5ODgxRDQzMDA0RjZDQzIgLyogQnVpbGQgY29uZmlndXJh
dGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJMYXlvdXRUZXN0UmVsYXkiICovOwotCQkJY29tcGF0
aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMy4yIjsKLQkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5n
bGlzaDsKLQkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAwOwotCQkJa25vd25SZWdpb25zID0g
KAotCQkJCWVuLAotCQkJKTsKLQkJCW1haW5Hcm91cCA9IDJFOEQzRUVCMTk4ODFENDMwMDRGNkND
MjsKLQkJCXByb2R1Y3RSZWZHcm91cCA9IDJFOEQzRUY1MTk4ODFENDMwMDRGNkNDMiAvKiBQcm9k
dWN0cyAqLzsKLQkJCXByb2plY3REaXJQYXRoID0gIiI7Ci0JCQlwcm9qZWN0Um9vdCA9ICIiOwot
CQkJdGFyZ2V0cyA9ICgKLQkJCQkyRThEM0VGMzE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVz
dFJlbGF5ICovLAotCQkJKTsKLQkJfTsKLS8qIEVuZCBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KLQot
LyogQmVnaW4gUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCQkyRThEM0VGMDE5ODgx
RDQzMDA0RjZDQzIgLyogU291cmNlcyAqLyA9IHsKLQkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBo
YXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJ
CTJFOEQzRjA2MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5tIGluIFNvdXJj
ZXMgKi8sCi0JCQkJMkU4RDNFRjgxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSBpbiBTb3VyY2Vz
ICovLAotCQkJCTJFOEQzRjAyMTk4ODFGRDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5tIGluIFNv
dXJjZXMgKi8sCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7Ci0JCX07Ci0vKiBFbmQgUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCi0vKiBC
ZWdpbiBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCi0JCTJFOEQzRUY5MTk4ODFENDMw
MDRGNkNDMiAvKiBEZWJ1ZyAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwot
CQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIg
LyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCX07
Ci0JCQluYW1lID0gRGVidWc7Ci0JCX07Ci0JCTJFOEQzRUZBMTk4ODFENDMwMDRGNkNDMiAvKiBS
ZWxlYXNlICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29u
ZmlndXJhdGlvblJlZmVyZW5jZSA9IDJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1Jl
bGVhc2UueGNjb25maWcgKi87Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJfTsKLQkJCW5hbWUg
PSBSZWxlYXNlOwotCQl9OwotCQkyRThEM0VGQzE5ODgxRDQzMDA0RjZDQzIgLyogRGVidWcgKi8g
PSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9u
UmVmZXJlbmNlID0gMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2Nv
bmZpZyAqLzsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJUFJPRFVDVF9OQU1FID0gIiQoVEFS
R0VUX05BTUUpIjsKLQkJCX07Ci0JCQluYW1lID0gRGVidWc7Ci0JCX07Ci0JCTJFOEQzRUZEMTk4
ODFENDMwMDRGNkNDMiAvKiBSZWxlYXNlICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3Vy
YXRpb247Ci0JCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDJFOEQzRUZFMTk4ODFFMTMw
MDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi87Ci0JCQlidWlsZFNldHRpbmdzID0g
ewotCQkJCVBST0RVQ1RfTkFNRSA9ICIkKFRBUkdFVF9OQU1FKSI7Ci0JCQl9OwotCQkJbmFtZSA9
IFJlbGVhc2U7Ci0JCX07Ci0vKiBFbmQgWENCdWlsZENvbmZpZ3VyYXRpb24gc2VjdGlvbiAqLwot
Ci0vKiBCZWdpbiBYQ0NvbmZpZ3VyYXRpb25MaXN0IHNlY3Rpb24gKi8KLQkJMkU4RDNFRUYxOTg4
MUQ0MzAwNEY2Q0MyIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAi
TGF5b3V0VGVzdFJlbGF5IiAqLyA9IHsKLQkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7Ci0J
CQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAotCQkJCTJFOEQzRUY5MTk4ODFENDMwMDRGNkNDMiAv
KiBEZWJ1ZyAqLywKLQkJCQkyRThEM0VGQTE5ODgxRDQzMDA0RjZDQzIgLyogUmVsZWFzZSAqLywK
LQkJCSk7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7Ci0JCQlkZWZhdWx0
Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNlOwotCQl9OwotCQkyRThEM0VGQjE5ODgxRDQzMDA0
RjZDQzIgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIkxh
eW91dFRlc3RSZWxheSIgKi8gPSB7Ci0JCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJ
YnVpbGRDb25maWd1cmF0aW9ucyA9ICgKLQkJCQkyRThEM0VGQzE5ODgxRDQzMDA0RjZDQzIgLyog
RGVidWcgKi8sCi0JCQkJMkU4RDNFRkQxOTg4MUQ0MzAwNEY2Q0MyIC8qIFJlbGVhc2UgKi8sCi0J
CQkpOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwotCQkJZGVmYXVsdENv
bmZpZ3VyYXRpb25OYW1lID0gUmVsZWFzZTsKLQkJfTsKLS8qIEVuZCBYQ0NvbmZpZ3VyYXRpb25M
aXN0IHNlY3Rpb24gKi8KLQl9OwotCXJvb3RPYmplY3QgPSAyRThEM0VFQzE5ODgxRDQzMDA0RjZD
QzIgLyogUHJvamVjdCBvYmplY3QgKi87Ci19CkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkv
TGF5b3V0VGVzdFJlbGF5Lnhjb2RlcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0
UmVsYXkvTGF5b3V0VGVzdFJlbGF5Lnhjb2RlcHJvagkocmV2aXNpb24gMjExMzcxKQorKysgVG9v
bHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2oJKG5vbmV4aXN0ZW50
KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RS
ZWxheS54Y29kZXByb2oKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46aWdub3JlCiMjIC0xLDIgKzAs
MCAjIwotcHJvamVjdC54Y3dvcmtzcGFjZQoteGN1c2VyZGF0YQpJbmRleDogVG9vbHMvTGF5b3V0
VGVzdFJlbGF5L01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9N
YWtlZmlsZQkocmV2aXNpb24gMjExMzcxKQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L01ha2Vm
aWxlCShub25leGlzdGVudCkKQEAgLTEsNiArMCwwIEBACi1TQ1JJUFRTX1BBVEggPSAuLi9TY3Jp
cHRzCi0KLU9WRVJSSURFX0FSQ0hTID0gZGVmYXVsdAotT1ZFUlJJREVfU0RLUk9PVCA9IGRlZmF1
bHQKLQotaW5jbHVkZSAuLi8uLi9NYWtlZmlsZS5zaGFyZWQKSW5kZXg6IFRvb2xzL0xheW91dFRl
c3RSZWxheS9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCShyZXZpc2lvbiAy
MTEzNzEpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2Nv
bmZpZwkobm9uZXhpc3RlbnQpCkBAIC0xLDY4ICswLDAgQEAKLS8vIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLwotLy8gUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLS8vIGFyZSBtZXQ6Ci0vLyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLS8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLS8vICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0vLwotLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0vLyBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotLy8gSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0vLyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotLy8gQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0vLyBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0vLyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLS8vIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLS8vIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0v
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSAiLi4vLi4vLi4vLi4vSW50ZXJuYWwvQ29uZmlndXJh
dGlvbnMvSGF2ZUludGVybmFsU0RLLnhjY29uZmlnIgotCi1VU0VfSU5URVJOQUxfU0RLID0gJChV
U0VfSU5URVJOQUxfU0RLXyQoQ09ORklHVVJBVElPTikpOwotVVNFX0lOVEVSTkFMX1NES19Qcm9k
dWN0aW9uID0gWUVTOwotVVNFX0lOVEVSTkFMX1NES19EZWJ1ZyA9ICQoSEFWRV9JTlRFUk5BTF9T
REspOwotVVNFX0lOVEVSTkFMX1NES19SZWxlYXNlID0gJChIQVZFX0lOVEVSTkFMX1NESyk7Ci0K
LUNMQU5HX0NYWF9MQU5HVUFHRV9TVEFOREFSRCA9IGdudSsrMHg7Ci1DTEFOR19FTkFCTEVfT0JK
Q19BUkMgPSBZRVM7Ci1DTEFOR19XQVJOX0NYWDBYX0VYVEVOU0lPTlMgPSBOTzsKLUhFQURFUl9T
RUFSQ0hfUEFUSFMgPSAkKEJVSUxUX1BST0RVQ1RTX0RJUikvdXNyL2xvY2FsL2luY2x1ZGUgJChX
RUJDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL0ZvcndhcmRpbmdIZWFkZXJzICQoU1JDUk9PVCkv
Li4vLi4vU291cmNlL0phdmFTY3JpcHRDb3JlL2ljdSAkKE5FWFRfUk9PVCkvdXNyL2xvY2FsL2lu
Y2x1ZGUvV2ViQ29yZVRlc3RTdXBwb3J0OwotR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9
ICQoREVCVUdfREVGSU5FUykgRU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JUOwotREVCVUdfSU5GT1JN
QVRJT05fRk9STUFUID0gZHdhcmYtd2l0aC1kc3ltOwotUFJFQklORElORyA9IE5PCi1HQ0NfQ19M
QU5HVUFHRV9TVEFOREFSRCA9IGdudTk5Ci1HQ0NfRU5BQkxFX0NQUF9FWENFUFRJT05TID0gTk87
Ci1HQ0NfRU5BQkxFX0NQUF9SVFRJID0gTk87Ci1HQ0NfUFJFQ09NUElMRV9QUkVGSVhfSEVBREVS
ID0gWUVTCi1HQ0NfVFJFQVRfV0FSTklOR1NfQVNfRVJST1JTID0gWUVTCi1HQ0NfVkVSU0lPTiA9
IGNvbS5hcHBsZS5jb21waWxlcnMubGx2bS5jbGFuZy4xXzA7Ci1HQ0NfV0FSTl9BQk9VVF9ERVBS
RUNBVEVEX0ZVTkNUSU9OUyA9IE5PCi1HQ0NfV0FSTl9VTlVTRURfRlVOQ1RJT04gPSBZRVMKLUdD
Q19XQVJOX1VOVVNFRF9WQVJJQUJMRSA9IFlFUwotR0NDX1dBUk5fNjRfVE9fMzJfQklUX0NPTlZF
UlNJT05bYXJjaD14ODZfNjRdID0gTk87Ci1XQVJOSU5HX0NGTEFHUyA9IC1XYWxsIC1XIC1Xbm8t
dW51c2VkLXBhcmFtZXRlciAtV3VuZGVmCi0KLURFQlVHX0RFRklORVNfZGVidWcgPSA7Ci1ERUJV
R19ERUZJTkVTX25vcm1hbCA9IE5ERUJVRzsKLURFQlVHX0RFRklORVMgPSAkKERFQlVHX0RFRklO
RVNfJChDVVJSRU5UX1ZBUklBTlQpKTsKLQotVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1Ig
PSAkKFRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SJChNQUNPU1hfREVQTE9ZTUVOVF9UQVJH
RVQ6c3VmZml4OmlkZW50aWZpZXIpKTsKLVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SXzEw
ID0gMTAxMDAwOwotVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1JfMTEgPSAxMDExMDA7Ci1U
QVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUl8xMiA9IDEwMTIwMDsKLVRBUkdFVF9NQUNfT1Nf
WF9WRVJTSU9OX01BSk9SXzEzID0gMTAxMzAwOwotCi1TREtST09UID0gbWFjb3N4LmludGVybmFs
OwotCi1TVVBQT1JURURfUExBVEZPUk1TID0gbWFjb3N4OwotCi1UT09MQ0hBSU5TID0gZGVmYXVs
dDsKLQotT1RIRVJfQ0ZMQUdTID0gJChBU0FOX09USEVSX0NGTEFHUyk7Ci1PVEhFUl9DUExVU1BM
VVNGTEFHUyA9ICQoQVNBTl9PVEhFUl9DUExVU1BMVVNGTEFHUyk7Ci1PVEhFUl9MREZMQUdTID0g
JChBU0FOX09USEVSX0xERkxBR1MpOwpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZp
Z3VyYXRpb25zL0RlYnVnUmVsZWFzZS54Y2NvbmZpZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlv
dXRUZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMvRGVidWdSZWxlYXNlLnhjY29uZmlnCShyZXZpc2lv
biAyMTEzNzEpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMvRGVidWdS
ZWxlYXNlLnhjY29uZmlnCShub25leGlzdGVudCkKQEAgLTEsNDIgKzAsMCBAQAotLy8gQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vCi0vLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotLy8gYXJlIG1ldDoKLS8vIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotLy8gICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS8v
Ci0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLS8vIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0vLyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLS8vIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0vLyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLS8v
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLS8vIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotLy8gUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotLy8gT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSNpbmNsdWRlICJCYXNlLnhjY29uZmlnIgotCi1B
UkNIUyA9ICQoQVJDSFNfU1RBTkRBUkRfNjRfQklUKTsKLQotVEFSR0VUX01BQ19PU19YX1ZFUlNJ
T05fTUFKT1IgPSAkKE1BQ19PU19YX1ZFUlNJT05fTUFKT1IpOwotCi1NQUNPU1hfREVQTE9ZTUVO
VF9UQVJHRVQgPSAkKE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVF8kKFRBUkdFVF9NQUNfT1NfWF9W
RVJTSU9OX01BSk9SKSkKLU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVF8xMDEwMDAgPSAxMC4xMDsK
LU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVF8xMDExMDAgPSAxMC4xMTsKLU1BQ09TWF9ERVBMT1lN
RU5UX1RBUkdFVF8xMDEyMDAgPSAxMC4xMjsKLU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVF8xMDEz
MDAgPSAxMC4xMzsKLQotRlJBTUVXT1JLX1NFQVJDSF9QQVRIUyA9ICQoREVWRUxPUEVSX0RJUikv
TGlicmFyeS9Qcml2YXRlRnJhbWV3b3JrczsKLUxEX1JVTlBBVEhfU0VBUkNIX1BBVEhTID0gJChE
RVZFTE9QRVJfRElSKS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzOwotT1RIRVJfTERGTEFHUyA9
IC1mcmFtZXdvcmsgQ29yZVNpbXVsYXRvciAtZnJhbWV3b3JrIEFwcEtpdDsKLQotU0RLUk9PVCA9
ICQoU0RLUk9PVF9tYWNvc3hfJChVU0VfSU5URVJOQUxfU0RLKSk7Ci1TREtST09UX21hY29zeF8g
PSBtYWNvc3g7Ci1TREtST09UX21hY29zeF9ZRVMgPSBtYWNvc3guaW50ZXJuYWw7CkluZGV4OiBU
b29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5Lnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxh
eS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTEzNzEpCisrKyBUb29scy9M
YXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KG5vbmV4aXN0ZW50KQpAQCAtMSwyMDIgKzAsMCBAQAotLy8gISQqVVRGOCokIQotewotCWFyY2hp
dmVWZXJzaW9uID0gMTsKLQljbGFzc2VzID0gewotCX07Ci0Jb2JqZWN0VmVyc2lvbiA9IDQ2Owot
CW9iamVjdHMgPSB7Ci0KLS8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCi0JCTJFOEQz
RUY4MTk4ODFENDMwMDRGNkNDMiAvKiBtYWluLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRThEM0VGNzE5ODgxRDQzMDA0RjZDQzIgLyogbWFpbi5tICov
OyB9OwotCQkyRThEM0YwMjE5ODgxRkQwMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkubSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOEQzRjAxMTk4ODFGRDAw
MDRGNkNDMiAvKiBMVFBpcGVSZWxheS5tICovOyB9OwotCQkyRThEM0YwNjE5ODgyNDA2MDA0RjZD
QzIgLyogTFRSZWxheUNvbnRyb2xsZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJFOEQzRjA1MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJv
bGxlci5tICovOyB9OwotLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCi0KLS8qIEJlZ2lu
IFBCWENvcHlGaWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCQkyRThEM0VGMjE5ODgxRDQzMDA0
RjZDQzIgLyogQ29weUZpbGVzICovID0gewotCQkJaXNhID0gUEJYQ29weUZpbGVzQnVpbGRQaGFz
ZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlkc3RQYXRoID0gL3Vzci9z
aGFyZS9tYW4vbWFuMS87Ci0JCQlkc3RTdWJmb2xkZXJTcGVjID0gMDsKLQkJCWZpbGVzID0gKAot
CQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAxOwotCQl9Owot
LyogRW5kIFBCWENvcHlGaWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhG
aWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjQxOTg4MUQ0MzAwNEY2Q0MyIC8qIExh
eW91dFRlc3RSZWxheSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVU
eXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBw
YXRoID0gTGF5b3V0VGVzdFJlbGF5OyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9
OwotCQkyRThEM0VGNzE5ODgxRDQzMDA0RjZDQzIgLyogbWFpbi5tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGgg
PSBtYWluLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOEQzRUZFMTk4ODFFMTMw
MDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBuYW1lID0gRGVidWdSZWxl
YXNlLnhjY29uZmlnOyBwYXRoID0gQ29uZmlndXJhdGlvbnMvRGVidWdSZWxlYXNlLnhjY29uZmln
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0VGRjE5ODgxRTI1MDA0RjZDQzIg
LyogQmFzZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQueGNjb25maWc7IG5hbWUgPSBCYXNlLnhjY29uZmlnOyBwYXRoID0gQ29u
ZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MkU4RDNGMDAxOTg4MUYyOTAwNEY2Q0MyIC8qIExUUmVsYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTFRS
ZWxheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0YwMTE5ODgxRkQwMDA0
RjZDQzIgLyogTFRQaXBlUmVsYXkubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRo
ID0gTFRQaXBlUmVsYXkubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDMx
OTg4MUZFMjAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExUUGlwZVJl
bGF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOEQzRjA0MTk4ODI0MDYwMDRG
NkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBMVFJlbGF5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQky
RThEM0YwNTE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIubSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gTFRSZWxheUNvbnRyb2xsZXIubTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0UxRkJDMTUxQjI5MEU3OTAwMDEzNkY1IC8qIENvcmVTaW11
bGF0b3JTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29yZVNpbXVsYXRv
clNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotLyogRW5kIFBCWEZpbGVSZWZlcmVu
Y2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9u
ICovCi0JCTJFOEQzRUYxMTk4ODFENDMwMDRGNkNDMiAvKiBGcmFtZXdvcmtzICovID0gewotCQkJ
aXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3
NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7Ci0JCX07Ci0vKiBFbmQgUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2Vj
dGlvbiAqLwotCi0vKiBCZWdpbiBQQlhHcm91cCBzZWN0aW9uICovCi0JCTJFOEQzRUVCMTk4ODFE
NDMwMDRGNkNDMiA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJ
MkU4RDNFRkYxOTg4MUUyNTAwNEY2Q0MyIC8qIEJhc2UueGNjb25maWcgKi8sCi0JCQkJMkU4RDNF
RkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLywKLQkJCQkyRThE
M0VGNjE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovLAotCQkJCTJFOEQzRUY1
MTk4ODFENDMwMDRGNkNDMiAvKiBQcm9kdWN0cyAqLywKLQkJCSk7Ci0JCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwotCQl9OwotCQkyRThEM0VGNTE5ODgxRDQzMDA0RjZDQzIgLyogUHJvZHVjdHMg
Ki8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTJFOEQzRUY0
MTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8sCi0JCQkpOwotCQkJbmFtZSA9
IFByb2R1Y3RzOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJMkU4RDNFRjYx
OTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLyA9IHsKLQkJCWlzYSA9IFBCWEdy
b3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMkU4RDNFRjcxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1h
aW4ubSAqLywKLQkJCQlDRTFGQkMxNTFCMjkwRTc5MDAwMTM2RjUgLyogQ29yZVNpbXVsYXRvclNQ
SS5oICovLAotCQkJCTJFOEQzRjAwMTk4ODFGMjkwMDRGNkNDMiAvKiBMVFJlbGF5LmggKi8sCi0J
CQkJMkU4RDNGMDExOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lm0gKi8sCi0JCQkJMkU4
RDNGMDMxOTg4MUZFMjAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5LmggKi8sCi0JCQkJMkU4RDNGMDQx
OTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLmggKi8sCi0JCQkJMkU4RDNGMDUx
OTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLm0gKi8sCi0JCQkpOwotCQkJcGF0
aCA9IExheW91dFRlc3RSZWxheTsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0v
KiBFbmQgUEJYR3JvdXAgc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhOYXRpdmVUYXJnZXQgc2Vj
dGlvbiAqLwotCQkyRThEM0VGMzE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICov
ID0gewotCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwotCQkJYnVpbGRDb25maWd1cmF0aW9uTGlz
dCA9IDJFOEQzRUZCMTk4ODFENDMwMDRGNkNDMiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWE5hdGl2ZVRhcmdldCAiTGF5b3V0VGVzdFJlbGF5IiAqLzsKLQkJCWJ1aWxkUGhhc2Vz
ID0gKAotCQkJCTJFOEQzRUYwMTk4ODFENDMwMDRGNkNDMiAvKiBTb3VyY2VzICovLAotCQkJCTJF
OEQzRUYxMTk4ODFENDMwMDRGNkNDMiAvKiBGcmFtZXdvcmtzICovLAotCQkJCTJFOEQzRUYyMTk4
ODFENDMwMDRGNkNDMiAvKiBDb3B5RmlsZXMgKi8sCi0JCQkpOwotCQkJYnVpbGRSdWxlcyA9ICgK
LQkJCSk7Ci0JCQlkZXBlbmRlbmNpZXMgPSAoCi0JCQkpOwotCQkJbmFtZSA9IExheW91dFRlc3RS
ZWxheTsKLQkJCXByb2R1Y3ROYW1lID0gTGF5b3V0VGVzdFJlbGF5OwotCQkJcHJvZHVjdFJlZmVy
ZW5jZSA9IDJFOEQzRUY0MTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi87Ci0J
CQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLnRvb2wiOwotCQl9OwotLyog
RW5kIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWFByb2plY3Qgc2Vj
dGlvbiAqLwotCQkyRThEM0VFQzE5ODgxRDQzMDA0RjZDQzIgLyogUHJvamVjdCBvYmplY3QgKi8g
PSB7Ci0JCQlpc2EgPSBQQlhQcm9qZWN0OwotCQkJYXR0cmlidXRlcyA9IHsKLQkJCQlMYXN0VXBn
cmFkZUNoZWNrID0gMDYwMDsKLQkJCQlPUkdBTklaQVRJT05OQU1FID0gIkFwcGxlLCBJbmMuIjsK
LQkJCQlUYXJnZXRBdHRyaWJ1dGVzID0gewotCQkJCQkyRThEM0VGMzE5ODgxRDQzMDA0RjZDQzIg
PSB7Ci0JCQkJCQlDcmVhdGVkT25Ub29sc1ZlcnNpb24gPSA2LjA7Ci0JCQkJCX07Ci0JCQkJfTsK
LQkJCX07Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMkU4RDNFRUYxOTg4MUQ0MzAwNEY2
Q0MyIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiTGF5b3V0VGVz
dFJlbGF5IiAqLzsKLQkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDMuMiI7Ci0JCQlk
ZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7Ci0JCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0g
MDsKLQkJCWtub3duUmVnaW9ucyA9ICgKLQkJCQllbiwKLQkJCSk7Ci0JCQltYWluR3JvdXAgPSAy
RThEM0VFQjE5ODgxRDQzMDA0RjZDQzI7Ci0JCQlwcm9kdWN0UmVmR3JvdXAgPSAyRThEM0VGNTE5
ODgxRDQzMDA0RjZDQzIgLyogUHJvZHVjdHMgKi87Ci0JCQlwcm9qZWN0RGlyUGF0aCA9ICIiOwot
CQkJcHJvamVjdFJvb3QgPSAiIjsKLQkJCXRhcmdldHMgPSAoCi0JCQkJMkU4RDNFRjMxOTg4MUQ0
MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLywKLQkJCSk7Ci0JCX07Ci0vKiBFbmQgUEJY
UHJvamVjdCBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rp
b24gKi8KLQkJMkU4RDNFRjAxOTg4MUQ0MzAwNEY2Q0MyIC8qIFNvdXJjZXMgKi8gPSB7Ci0JCQlp
c2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2
NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCQkyRThEM0YwNjE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxh
eUNvbnRyb2xsZXIubSBpbiBTb3VyY2VzICovLAotCQkJCTJFOEQzRUY4MTk4ODFENDMwMDRGNkND
MiAvKiBtYWluLm0gaW4gU291cmNlcyAqLywKLQkJCQkyRThEM0YwMjE5ODgxRkQwMDA0RjZDQzIg
LyogTFRQaXBlUmVsYXkubSBpbiBTb3VyY2VzICovLAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9OwotLyogRW5kIFBCWFNvdXJjZXNCdWlsZFBo
YXNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gWENCdWlsZENvbmZpZ3VyYXRpb24gc2VjdGlvbiAq
LwotCQkyRThEM0VGOTE5ODgxRDQzMDA0RjZDQzIgLyogRGVidWcgKi8gPSB7Ci0JCQlpc2EgPSBY
Q0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gMkU4
RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLzsKLQkJCWJ1
aWxkU2V0dGluZ3MgPSB7Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVnOwotCQl9OwotCQkyRThEM0VG
QTE5ODgxRDQzMDA0RjZDQzIgLyogUmVsZWFzZSAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25m
aWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAyRThEM0VGRTE5ODgx
RTEzMDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5n
cyA9IHsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJMkU4RDNFRkMxOTg4MUQ0
MzAwNEY2Q0MyIC8qIERlYnVnICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247
Ci0JCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDJFOEQzRUZFMTk4ODFFMTMwMDRGNkND
MiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi87Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJ
CVBST0RVQ1RfTkFNRSA9ICIkKFRBUkdFVF9OQU1FKSI7Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVn
OwotCQl9OwotCQkyRThEM0VGRDE5ODgxRDQzMDA0RjZDQzIgLyogUmVsZWFzZSAqLyA9IHsKLQkJ
CWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVu
Y2UgPSAyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICov
OwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlQUk9EVUNUX05BTUUgPSAiJChUQVJHRVRfTkFN
RSkiOwotCQkJfTsKLQkJCW5hbWUgPSBSZWxlYXNlOwotCQl9OwotLyogRW5kIFhDQnVpbGRDb25m
aWd1cmF0aW9uIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gWENDb25maWd1cmF0aW9uTGlzdCBzZWN0
aW9uICovCi0JCTJFOEQzRUVGMTk4ODFENDMwMDRGNkNDMiAvKiBCdWlsZCBjb25maWd1cmF0aW9u
IGxpc3QgZm9yIFBCWFByb2plY3QgIkxheW91dFRlc3RSZWxheSIgKi8gPSB7Ci0JCQlpc2EgPSBY
Q0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKLQkJCQkyRThE
M0VGOTE5ODgxRDQzMDA0RjZDQzIgLyogRGVidWcgKi8sCi0JCQkJMkU4RDNFRkExOTg4MUQ0MzAw
NEY2Q0MyIC8qIFJlbGVhc2UgKi8sCi0JCQkpOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zp
c2libGUgPSAwOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUmVsZWFzZTsKLQkJfTsK
LQkJMkU4RDNFRkIxOTg4MUQ0MzAwNEY2Q0MyIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBm
b3IgUEJYTmF0aXZlVGFyZ2V0ICJMYXlvdXRUZXN0UmVsYXkiICovID0gewotCQkJaXNhID0gWEND
b25maWd1cmF0aW9uTGlzdDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCi0JCQkJMkU4RDNF
RkMxOTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICovLAotCQkJCTJFOEQzRUZEMTk4ODFENDMwMDRG
NkNDMiAvKiBSZWxlYXNlICovLAotCQkJKTsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNp
YmxlID0gMDsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJlbGVhc2U7Ci0JCX07Ci0v
KiBFbmQgWENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCi0JfTsKLQlyb290T2JqZWN0ID0g
MkU4RDNFRUMxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2plY3Qgb2JqZWN0ICovOwotfQpJbmRleDog
VG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9Db3JlU2ltdWxhdG9yU1BJLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9Db3Jl
U2ltdWxhdG9yU1BJLmgJKHJldmlzaW9uIDIxMTM3MSkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxh
eS9MYXlvdXRUZXN0UmVsYXkvQ29yZVNpbXVsYXRvclNQSS5oCShub25leGlzdGVudCkKQEAgLTEs
NTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBfX2hhc19pbmNsdWRlKDxDb3JlU2lt
dWxhdG9yL0NvcmVTaW11bGF0b3IuaD4pCi0KLS8qIEZJWE1FOiBSZW1vdmUgdGhlIGJlbG93ICNk
ZWZpbmUgb25jZSB3ZSByZXF1aXJlIFhjb2RlIDcuMyB3aXRoIGlPUyA5LjMgU0RLIG9yIG5ld2Vy
LiAqLwotI2RlZmluZSBfX2NvcmVzaW1fdW5hdmFpbGFibGVfbXNnKG1zZykKLSNpbXBvcnQgPENv
cmVTaW11bGF0b3IvQ29yZVNpbXVsYXRvci5oPgotCi0vKiBGSVhNRTogQWx3YXlzIHVzZSBTaW1T
ZXJ2aWNlQ29udGV4dCBvbmNlIHdlIHJlcXVpcmUgWGNvZGUgNy4zIHdpdGggaU9TIDkuMyBTREsg
b3IgbmV3ZXIuICovCi0jZGVmaW5lIFVTRV9TSU1fU0VSVklDRV9DT05URVhUIGRlZmluZWQoQ09S
RVNJTV9BUElfTUFYX0FMTE9XRUQpCi0KLSNlbHNlCi0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91
bmRhdGlvbi5oPgotCi0jZGVmaW5lIFVTRV9TSU1fU0VSVklDRV9DT05URVhUIDEKLQotI2RlZmlu
ZSBrU2ltRGV2aWNlTGF1bmNoQXBwbGljYXRpb25Bcmd1bWVudHMgQCJhcmd1bWVudHMiCi0jZGVm
aW5lIGtTaW1EZXZpY2VMYXVuY2hBcHBsaWNhdGlvbkVudmlyb25tZW50IEAiZW52aXJvbm1lbnQi
Ci0KLUBpbnRlcmZhY2UgU2ltRGV2aWNlIDogTlNPYmplY3QKLS0gKEJPT0wpaW5zdGFsbEFwcGxp
Y2F0aW9uOihOU1VSTCAqKWluc3RhbGxVUkwgd2l0aE9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKW9w
dGlvbnMgZXJyb3I6KE5TRXJyb3IgKiBfX2F1dG9yZWxlYXNpbmcgKillcnJvcjsKLS0gKHBpZF90
KWxhdW5jaEFwcGxpY2F0aW9uV2l0aElEOihOU1N0cmluZyAqKWJ1bmRsZUlEIG9wdGlvbnM6KE5T
RGljdGlvbmFyeSAqKW9wdGlvbnMgZXJyb3I6KE5TRXJyb3IgKiBfX2F1dG9yZWxlYXNpbmcgKill
cnJvcjsKLUBlbmQKLQotQGludGVyZmFjZSBTaW1EZXZpY2VTZXQgOiBOU09iamVjdAotQHByb3Bl
cnR5IChyZWFkb25seSwgY29weSkgTlNEaWN0aW9uYXJ5ICpkZXZpY2VzQnlVRElEOwotQGVuZAot
Ci1AaW50ZXJmYWNlIFNpbVNlcnZpY2VDb250ZXh0IDogTlNPYmplY3QKLSsoU2ltU2VydmljZUNv
bnRleHQgKilzaGFyZWRTZXJ2aWNlQ29udGV4dEZvckRldmVsb3BlckRpcjooTlNTdHJpbmcgKilk
ZXZlbG9wZXJEaXIgZXJyb3I6KE5TRXJyb3IgKiBfX2F1dG9yZWxlYXNpbmcgKillcnJvcjsKLS0o
U2ltRGV2aWNlU2V0ICopZGVmYXVsdERldmljZVNldFdpdGhFcnJvcjooTlNFcnJvciAqIF9fYXV0
b3JlbGVhc2luZyAqKWVycm9yOwotQGVuZAotCi0jZW5kaWYKSW5kZXg6IFRvb2xzL0xheW91dFRl
c3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRQaXBlUmVsYXkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5LmgJKHJldmlzaW9u
IDIxMTM3MSkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRQaXBl
UmVsYXkuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIExUUGlwZVJlbGF5X2gKLSNkZWZpbmUgTFRQaXBlUmVsYXlfaAotCi0jaW1wb3J0ICJMVFJl
bGF5LmgiCi0KLUBpbnRlcmZhY2UgTFRQaXBlUmVsYXkgOiBOU09iamVjdCA8TFRSZWxheT4KLUBw
cm9wZXJ0eSAod2VhaykgaWQ8TFRSZWxheURlbGVnYXRlPiByZWxheURlbGVnYXRlOwotLSAoaWQp
aW5pdFdpdGhQcmVmaXg6KE5TU3RyaW5nICopcHJlZml4OwotQGVuZAotCi0jZW5kaWYKSW5kZXg6
IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRQaXBlUmVsYXkubQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJl
bGF5Lm0JKHJldmlzaW9uIDIxMTM3MSkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRU
ZXN0UmVsYXkvTFRQaXBlUmVsYXkubQkobm9uZXhpc3RlbnQpCkBAIC0xLDE1OCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2ltcG9ydCAiTFRQaXBlUmVsYXkuaCIKLQotI2ltcG9ydCA8Rm91bmRhdGlv
bi9Gb3VuZGF0aW9uLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzeXMvdHlw
ZXMuaD4KLQotQGludGVyZmFjZSBMVFBpcGVSZWxheSAoKQotQHByb3BlcnR5IChyZWFkb25seSwg
c3Ryb25nKSBOU1N0cmluZyAqZmlmb1ByZWZpeDsKLUBwcm9wZXJ0eSAoc3Ryb25nKSBOU091dHB1
dFN0cmVhbSAqc3RhbmRhcmRJbnB1dFBpcGU7Ci1AcHJvcGVydHkgKHN0cm9uZykgTlNJbnB1dFN0
cmVhbSAqc3RhbmRhcmRPdXRwdXRQaXBlOwotQHByb3BlcnR5IChzdHJvbmcpIE5TSW5wdXRTdHJl
YW0gKnN0YW5kYXJkRXJyb3JQaXBlOwotCi0tICh2b2lkKWNyZWF0ZUZJRk9zOwotLSAodm9pZClk
ZXN0cm95RklGT3M7Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBMVFBpcGVSZWxheQotCi0tIChO
U1N0cmluZyAqKWluUGlwZVBhdGgKLXsKLSAgICByZXR1cm4gW19maWZvUHJlZml4IHN0cmluZ0J5
QXBwZW5kaW5nU3RyaW5nOkAiX0lOIl07Ci19Ci0KLS0gKE5TU3RyaW5nICopb3V0UGlwZVBhdGgK
LXsKLSAgICByZXR1cm4gW19maWZvUHJlZml4IHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOkAiX09V
VCJdOwotfQotCi0tIChOU1N0cmluZyAqKWVycm9yUGlwZVBhdGgKLXsKLSAgICByZXR1cm4gW19m
aWZvUHJlZml4IHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOkAiX0VSUk9SIl07Ci19Ci0KLS0gKE5T
T3V0cHV0U3RyZWFtICopIG91dHB1dFN0cmVhbQotewotICAgIHJldHVybiBfc3RhbmRhcmRJbnB1
dFBpcGU7Ci19Ci0KLS0gKGlkKWluaXRXaXRoUHJlZml4OihOU1N0cmluZyAqKXByZWZpeAotewot
ICAgIGlmICgoc2VsZiA9IFtzdXBlciBpbml0XSkpIHsKLSAgICAgICAgX2ZpZm9QcmVmaXggPSBw
cmVmaXg7Ci0gICAgICAgIFtzZWxmIGRlc3Ryb3lGSUZPc107Ci0gICAgfQotICAgIHJldHVybiBz
ZWxmOwotfQotCi0tICh2b2lkKXNldHVwCi17Ci0gICAgW3NlbGYgZGVzdHJveUZJRk9zXTsKLSAg
ICBbc2VsZiBjcmVhdGVGSUZPc107Ci19Ci0KLS0gKHZvaWQpdGVhckRvd24KLXsKLSAgICBbc2Vs
ZiBkZXN0cm95RklGT3NdOwotfQotCi0tKHZvaWQpIGNvbm5lY3QKLXsKLSAgICBfc3RhbmRhcmRJ
bnB1dFBpcGUgPSBbTlNPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtVG9GaWxlQXRQYXRoOltzZWxm
IGluUGlwZVBhdGhdIGFwcGVuZDpZRVNdOwotICAgIF9zdGFuZGFyZE91dHB1dFBpcGUgPSBbTlNJ
bnB1dFN0cmVhbSBpbnB1dFN0cmVhbVdpdGhGaWxlQXRQYXRoOltzZWxmIG91dFBpcGVQYXRoXV07
Ci0gICAgX3N0YW5kYXJkRXJyb3JQaXBlID0gW05TSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW1XaXRo
RmlsZUF0UGF0aDpbc2VsZiBlcnJvclBpcGVQYXRoXV07Ci0KLSAgICBbW3NlbGYgc3RhbmRhcmRJ
bnB1dFBpcGVdIHNldERlbGVnYXRlOnNlbGZdOwotICAgIFtbc2VsZiBzdGFuZGFyZE91dHB1dFBp
cGVdIHNldERlbGVnYXRlOnNlbGZdOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yUGlwZV0gc2V0
RGVsZWdhdGU6c2VsZl07Ci0KLSAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRQaXBlXSBzY2hlZHVs
ZUluUnVuTG9vcDpbTlNSdW5Mb29wIG1haW5SdW5Mb29wXSBmb3JNb2RlOk5TRGVmYXVsdFJ1bkxv
b3BNb2RlXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRFcnJvclBpcGVdIHNjaGVkdWxlSW5SdW5Mb29w
OltOU1J1bkxvb3AgbWFpblJ1bkxvb3BdIGZvck1vZGU6TlNEZWZhdWx0UnVuTG9vcE1vZGVdOwot
Ci0gICAgW1tzZWxmIHN0YW5kYXJkSW5wdXRQaXBlXSBvcGVuXTsKLSAgICBbW3NlbGYgc3RhbmRh
cmRPdXRwdXRQaXBlXSBvcGVuXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRFcnJvclBpcGVdIG9wZW5d
OwotCi0gICAgW1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZENvbm5lY3RdOwotfQotCi0tICh2b2lk
KWRpc2Nvbm5lY3QKLXsKLSAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRQaXBlXSBjbG9zZV07Ci0g
ICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JQaXBlXSBjbG9zZV07Ci0gICAgW1tzZWxmIHN0YW5kYXJk
SW5wdXRQaXBlXSBjbG9zZV07Ci0gICAgW1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZERpc2Nvbm5l
Y3RdOwotfQotCi0tICh2b2lkKWNyZWF0ZUZJRk9zCi17Ci0gICAgbWtmaWZvKFtbc2VsZiBpblBp
cGVQYXRoXSBVVEY4U3RyaW5nXSwgMDY2Nik7Ci0gICAgbWtmaWZvKFtbc2VsZiBvdXRQaXBlUGF0
aF0gVVRGOFN0cmluZ10sIDA2NjYpOwotICAgIG1rZmlmbyhbW3NlbGYgZXJyb3JQaXBlUGF0aF0g
VVRGOFN0cmluZ10sIDA2NjYpOwotfQotCi0tICh2b2lkKWRlc3Ryb3lGSUZPcwotewotICAgIHVu
bGluayhbW3NlbGYgaW5QaXBlUGF0aF0gVVRGOFN0cmluZ10pOwotICAgIHVubGluayhbW3NlbGYg
b3V0UGlwZVBhdGhdIFVURjhTdHJpbmddKTsKLSAgICB1bmxpbmsoW1tzZWxmIGVycm9yUGlwZVBh
dGhdIFVURjhTdHJpbmddKTsKLX0KLQotLSAodm9pZCkgcmVsYXlTdHJlYW06KE5TSW5wdXRTdHJl
YW0gKilzdHJlYW0KLXsKLSAgICB1aW50OF90IGJ5dGVzWzEwMjRdOwotICAgIE5TSW50ZWdlciBi
eXRlc1JlYWQgPSBbc3RyZWFtIHJlYWQ6Ynl0ZXMgbWF4TGVuZ3RoOjEwMjRdOwotICAgIE5TRGF0
YSAqZGF0YSA9IFtOU0RhdGEgZGF0YVdpdGhCeXRlczpieXRlcyBsZW5ndGg6Ynl0ZXNSZWFkXTsK
LQotICAgIGlmIChzdHJlYW0gPT0gW3NlbGYgc3RhbmRhcmRPdXRwdXRQaXBlXSkKLSAgICAgICAg
W1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZFJlY2VpdmVTdGRvdXREYXRhOmRhdGFdOwotICAgIGVs
c2UKLSAgICAgICAgW1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZFJlY2VpdmVTdGRlcnJEYXRhOmRh
dGFdOwotfQotCi0tICh2b2lkKXN0cmVhbTooTlNTdHJlYW0gKilhU3RyZWFtIGhhbmRsZUV2ZW50
OihOU1N0cmVhbUV2ZW50KWV2ZW50Q29kZQotewotICAgIHN3aXRjaCAoZXZlbnRDb2RlKSB7Ci0g
ICAgY2FzZSBOU1N0cmVhbUV2ZW50Tm9uZToKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOU1N0
cmVhbUV2ZW50SGFzQnl0ZXNBdmFpbGFibGU6Ci0gICAgICAgIFtzZWxmIHJlbGF5U3RyZWFtOihO
U0lucHV0U3RyZWFtICopYVN0cmVhbV07Ci0gICAgY2FzZSBOU1N0cmVhbUV2ZW50SGFzU3BhY2VB
dmFpbGFibGU6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlNTdHJlYW1FdmVudE9wZW5Db21w
bGV0ZWQ6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlNTdHJlYW1FdmVudEVuZEVuY291bnRl
cmVkOgotICAgICAgICBbW3NlbGYgcmVsYXlEZWxlZ2F0ZV0gZGlkQ3Jhc2hXaXRoTWVzc2FnZTpu
aWxdOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnRFcnJvck9jY3VycmVk
OgotICAgICAgICBbW3NlbGYgcmVsYXlEZWxlZ2F0ZV0gZGlkQ3Jhc2hXaXRoTWVzc2FnZTpbW2FT
dHJlYW0gc3RyZWFtRXJyb3JdIGRlc2NyaXB0aW9uXV07Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LX0KLQotQGVuZApJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9M
VFJlbGF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RS
ZWxheS9MVFJlbGF5LmgJKHJldmlzaW9uIDIxMTM3MSkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxh
eS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheS5oCShub25leGlzdGVudCkKQEAgLTEsNDggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgTFRSZWxheV9oCi0jZGVmaW5lIExUUmVsYXlfaAotCi0j
aW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotQHByb3RvY29sIExUUmVsYXlEZWxl
Z2F0ZSA8TlNPYmplY3Q+Ci0tICh2b2lkKWRpZENvbm5lY3Q7Ci0tICh2b2lkKWRpZERpc2Nvbm5l
Y3Q7Ci0tICh2b2lkKWRpZENyYXNoV2l0aE1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZTsKLS0g
KHZvaWQpZGlkUmVjZWl2ZVN0ZG91dERhdGE6KE5TRGF0YSAqKWRhdGE7Ci0tICh2b2lkKWRpZFJl
Y2VpdmVTdGRlcnJEYXRhOihOU0RhdGEgKilkYXRhOwotQGVuZAotCi1AcHJvdG9jb2wgTFRSZWxh
eSA8TlNPYmplY3QsIE5TU3RyZWFtRGVsZWdhdGU+Ci0tICh2b2lkKXNldHVwOwotLSAodm9pZCl0
ZWFyRG93bjsKLS0gKHZvaWQpY29ubmVjdDsKLS0gKHZvaWQpZGlzY29ubmVjdDsKLUBwcm9wZXJ0
eSAod2VhaykgaWQ8TFRSZWxheURlbGVnYXRlPiByZWxheURlbGVnYXRlOwotQHByb3BlcnR5IChy
ZWFkb25seSwgc3Ryb25nKSBOU091dHB1dFN0cmVhbSAqb3V0cHV0U3RyZWFtOwotQGVuZAotCi0j
ZW5kaWYKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxh
eUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0
VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLmgJKHJldmlzaW9uIDIxMTM3MSkKKysrIFRvb2xz
L0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIuaAkobm9u
ZXhpc3RlbnQpCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotI2lmbmRlZiBMVFJlbGF5Q29u
dHJvbGxlcl9oCi0jZGVmaW5lIExUUmVsYXlDb250cm9sbGVyX2gKLQotI2ltcG9ydCAiTFRSZWxh
eS5oIgotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQotQGNsYXNzIFNpbURl
dmljZTsKLQotQGludGVyZmFjZSBMVFJlbGF5Q29udHJvbGxlciA6IE5TT2JqZWN0IDxMVFJlbGF5
RGVsZWdhdGU+Ci0tIChpZClpbml0V2l0aERldmljZTooU2ltRGV2aWNlICopZGV2aWNlIHByb2R1
Y3REaXI6KE5TU3RyaW5nICopcHJvZHVjdERpciBhcHBQYXRoOihOU1N0cmluZyAqKWFwcFBhdGgg
ZGV2aWNlVURJRDooTlNVVUlEICopdWRpZCBkdW1wVG9vbEFyZ3VtZW50czooTlNBcnJheSAqKWFy
Z3VtZW50czsKLS0gKHZvaWQpc3RhcnQ7Ci0tICh2b2lkKWZpbmlzaDsKLUBlbmQKLQotI2VuZGlm
CkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250
cm9sbGVyLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RS
ZWxheS9MVFJlbGF5Q29udHJvbGxlci5tCShyZXZpc2lvbiAyMTEzNzEpCisrKyBUb29scy9MYXlv
dXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLm0JKG5vbmV4aXN0
ZW50KQpAQCAtMSwyNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgIkxUUmVsYXlDb250
cm9sbGVyLmgiCi0KLSNpbXBvcnQgIkNvcmVTaW11bGF0b3JTUEkuaCIKLSNpbXBvcnQgIkxUUGlw
ZVJlbGF5LmgiCi0jaW1wb3J0IDxBcHBLaXQvQXBwS2l0Lmg+Ci0jaW1wb3J0IDxjcnRfZXh0ZXJu
cy5oPgotCi1AaW50ZXJmYWNlIExUUmVsYXlDb250cm9sbGVyICgpCi1AcHJvcGVydHkgKHJlYWRv
bmx5LCBzdHJvbmcpIGRpc3BhdGNoX3NvdXJjZV90IHN0YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJj
ZTsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNGaWxlSGFuZGxlICpzdGFuZGFyZE91
dHB1dDsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNGaWxlSGFuZGxlICpzdGFuZGFy
ZEVycm9yOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU1N0cmluZyAqaXBjSWRlbnRp
ZmllcjsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKmFwcEJ1bmRsZUlk
ZW50aWZpZXI7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TU3RyaW5nICphcHBQYXRo
OwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU1VVSUQgKmRldmljZVVESUQ7Ci1AcHJv
cGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TQXJyYXkgKmR1bXBUb29sQXJndW1lbnRzOwotQHBy
b3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU1N0cmluZyAqcHJvZHVjdERpcjsKLUBwcm9wZXJ0
eSAoc3Ryb25nKSBTaW1EZXZpY2UgKmRldmljZTsKLUBwcm9wZXJ0eSAoc3Ryb25nKSBpZDxMVFJl
bGF5PiByZWxheTsKLUBwcm9wZXJ0eSBwaWRfdCBwaWQ7Ci1AcHJvcGVydHkgKHN0cm9uZykgZGlz
cGF0Y2hfc291cmNlX3QgYXBwRGlzcGF0Y2hTb3VyY2U7Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlv
biBMVFJlbGF5Q29udHJvbGxlcgotCi0tIChpZClpbml0V2l0aERldmljZTooU2ltRGV2aWNlICop
ZGV2aWNlIHByb2R1Y3REaXI6KE5TU3RyaW5nICopcHJvZHVjdERpciBhcHBQYXRoOihOU1N0cmlu
ZyAqKWFwcFBhdGggZGV2aWNlVURJRDooTlNVVUlEICopdWRpZCBkdW1wVG9vbEFyZ3VtZW50czoo
TlNBcnJheSAqKWFyZ3VtZW50cwotewotICAgIGlmICgoc2VsZiA9IFtzdXBlciBpbml0XSkpIHsK
LSAgICAgICAgX2RldmljZSA9IGRldmljZTsKLSAgICAgICAgX3Byb2R1Y3REaXIgPSBwcm9kdWN0
RGlyOwotICAgICAgICBfYXBwUGF0aCA9IGFwcFBhdGg7Ci0gICAgICAgIF9hcHBCdW5kbGVJZGVu
dGlmaWVyID0gW1tOU0J1bmRsZSBidW5kbGVXaXRoUGF0aDphcHBQYXRoXSBidW5kbGVJZGVudGlm
aWVyXTsKLSAgICAgICAgX2RldmljZVVESUQgPSB1ZGlkOwotICAgICAgICBfZHVtcFRvb2xBcmd1
bWVudHMgPSBhcmd1bWVudHM7Ci0gICAgICAgIF9zdGFuZGFyZElucHV0RGlzcGF0Y2hTb3VyY2Ug
PSBkaXNwYXRjaF9zb3VyY2VfY3JlYXRlKERJU1BBVENIX1NPVVJDRV9UWVBFX1JFQUQsIFNURElO
X0ZJTEVOTywgMCwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSk7Ci0gICAgICAgIF9zdGFuZGFy
ZE91dHB1dCA9IFtOU0ZpbGVIYW5kbGUgZmlsZUhhbmRsZVdpdGhTdGFuZGFyZE91dHB1dF07Ci0g
ICAgICAgIF9zdGFuZGFyZEVycm9yID0gW05TRmlsZUhhbmRsZSBmaWxlSGFuZGxlV2l0aFN0YW5k
YXJkRXJyb3JdOwotCi0gICAgICAgIGRpc3BhdGNoX3NvdXJjZV9zZXRfZXZlbnRfaGFuZGxlcihf
c3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNlLCBeewotICAgICAgICAgICAgdWludDhfdCBidWZm
ZXJbMTAyNF07Ci0gICAgICAgICAgICBzc2l6ZV90IGxlbiA9IHJlYWQoU1RESU5fRklMRU5PLCBi
dWZmZXIsIHNpemVvZihidWZmZXIpKTsKLSAgICAgICAgICAgIGlmIChsZW4gPiAwKSB7Ci0gICAg
ICAgICAgICAgICAgQHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIFtbW3NlbGYgcmVsYXldIG91
dHB1dFN0cmVhbV0gd3JpdGU6YnVmZmVyIG1heExlbmd0aDpsZW5dOwotICAgICAgICAgICAgICAg
IH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAqZSkgewotICAgICAgICAgICAgICAgICAgICAvLyBCcm9r
ZW4gcGlwZSAtIHRoZSBkdW1wIHRvb2wgY3Jhc2hlZC4gVGltZSB0byBkaWUuCi0gICAgICAgICAg
ICAgICAgICAgIFtzZWxmIGRpZENyYXNoV2l0aE1lc3NhZ2U6bmlsXTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIEVPRiBSZWNlaXZl
ZCBvbiB0aGUgcmVsYXkncyBzdGFuZGFyZCBpbnB1dC4KLSAgICAgICAgICAgICAgICBbc2VsZiBm
aW5pc2hdOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBfcmVsYXkgPSBb
W0xUUGlwZVJlbGF5IGFsbG9jXSBpbml0V2l0aFByZWZpeDpbQCIvdG1wIiBzdHJpbmdCeUFwcGVu
ZGluZ1BhdGhDb21wb25lbnQ6c2VsZi5pcGNJZGVudGlmaWVyXV07Ci0gICAgICAgIFtfcmVsYXkg
c2V0UmVsYXlEZWxlZ2F0ZTpzZWxmXTsKLSAgICB9Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0g
KE5TU3RyaW5nICopaXBjSWRlbnRpZmllcgotewotICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5n
V2l0aEZvcm1hdDpAIiVALSVAIiwgc2VsZi5hcHBCdW5kbGVJZGVudGlmaWVyLCBzZWxmLmRldmlj
ZVVESUQuVVVJRFN0cmluZ107Ci19Ci0KLS0gKE5TU3RyaW5nICopcHJvY2Vzc05hbWUKLXsKLSAg
ICByZXR1cm4gW3NlbGYuYXBwQnVuZGxlSWRlbnRpZmllciBjb21wb25lbnRzU2VwYXJhdGVkQnlT
dHJpbmc6QCIuIl0ubGFzdE9iamVjdDsKLX0KLQotLSAodm9pZClkaWRSZWNlaXZlU3Rkb3V0RGF0
YTooTlNEYXRhICopZGF0YQotewotICAgIEB0cnkgewotICAgICAgICBbW3NlbGYgc3RhbmRhcmRP
dXRwdXRdIHdyaXRlRGF0YTpkYXRhXTsKLSAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24gKmV4Y2Vw
dGlvbikgewotICAgICAgICAvLyBOU0ZpbGVIYW5kbGVPcGVyYXRpb25FeGNlcHRpb24KLSAgICAg
ICAgLy8gQnJva2VuIHBpcGUgLSB0aGUgdGVzdCBoYXJuZXNzIHN0b3BwZWQgbGlzdGVuaW5nIHRv
IHVzLAotICAgICAgICAvLyBwcm9iYWJseSBiZWNhdXNlIHdlIHRpbWVkIG91dCBvciBhIHJ1biB3
YXMgY2FuY2VsZWQuCi0gICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci19Ci0KLS0g
KHZvaWQpZGlkUmVjZWl2ZVN0ZGVyckRhdGE6KE5TRGF0YSAqKWRhdGEKLXsKLSAgICBAdHJ5IHsK
LSAgICAgICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JdIHdyaXRlRGF0YTpkYXRhXTsKLSAgICB9IEBj
YXRjaCAoTlNFeGNlcHRpb24gKmV4Y2VwdGlvbikgewotICAgICAgICAvLyBOU0ZpbGVIYW5kbGVP
cGVyYXRpb25FeGNlcHRpb24KLSAgICAgICAgLy8gQnJva2VuIHBpcGUgLSB0aGUgdGVzdCBoYXJu
ZXNzIHN0b3BwZWQgbGlzdGVuaW5nIHRvIHVzLAotICAgICAgICAvLyBwcm9iYWJseSBiZWNhdXNl
IHdlIHRpbWVkIG91dCBvciBhIHJ1biB3YXMgY2FuY2VsZWQuCi0gICAgICAgIGV4aXQoRVhJVF9G
QUlMVVJFKTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpZGlkRGlzY29ubmVjdAotewotICAgIGRpc3Bh
dGNoX3N1c3BlbmQoW3NlbGYgc3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNlXSk7Ci19Ci0KLS0g
KHZvaWQpZGlkQ29ubmVjdAotewotICAgIGRpc3BhdGNoX3Jlc3VtZShbc2VsZiBzdGFuZGFyZElu
cHV0RGlzcGF0Y2hTb3VyY2VdKTsKLX0KLQotLSAodm9pZClkaWRDcmFzaFdpdGhNZXNzYWdlOihO
U1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICBbW3NlbGYgcmVsYXldIGRpc2Nvbm5lY3RdOwotICAg
IE5TU3RyaW5nICpjcmFzaE1lc3NhZ2UgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIlxu
I0NSQVNIRUQgLSAlQCAocGlkICVkKVxuIiwgW3NlbGYgcHJvY2Vzc05hbWVdLCBbc2VsZiBwaWRd
XTsKLQotICAgIGlmIChtZXNzYWdlKQotICAgICAgICBjcmFzaE1lc3NhZ2UgPSBbY3Jhc2hNZXNz
YWdlIHN0cmluZ0J5QXBwZW5kaW5nRm9ybWF0OkAiJUBcbiIsIG1lc3NhZ2VdOwotCi0gICAgW1tz
ZWxmIHN0YW5kYXJkRXJyb3JdIHdyaXRlRGF0YTpbY3Jhc2hNZXNzYWdlIGRhdGFVc2luZ0VuY29k
aW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXV07Ci0gICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JdIGNs
b3NlRmlsZV07Ci0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0XSBjbG9zZUZpbGVdOwotICAgIGV4
aXQoRVhJVF9GQUlMVVJFKTsKLX0KLQotLSAodm9pZClpbnN0YWxsQXBwCi17Ci0gICAgTlNEaWN0
aW9uYXJ5ICppbnN0YWxsT3B0aW9ucyA9IEB7Ci0gICAgICAgIChOU1N0cmluZyAqKWtDRkJ1bmRs
ZUlkZW50aWZpZXJLZXk6IHNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciwKLSAgICB9OwotCi0gICAg
TlNFcnJvciAqZXJyb3IgPSBuaWw7Ci0gICAgQk9PTCBpbnN0YWxsZWQgPSBbc2VsZi5kZXZpY2Ug
aW5zdGFsbEFwcGxpY2F0aW9uOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6c2VsZi5hcHBQYXRoXSB3
aXRoT3B0aW9uczppbnN0YWxsT3B0aW9ucyBlcnJvcjomZXJyb3JdOwotICAgIGlmICghaW5zdGFs
bGVkKSB7Ci0gICAgICAgIE5TTG9nKEAiQ291bGRuJ3QgaW5zdGFsbCAlQDogJUAiLCBzZWxmLmFw
cFBhdGgsIGVycm9yLmRlc2NyaXB0aW9uKTsKLSAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwot
ICAgIH0KLX0KLQotLSAodm9pZClraWxsQXBwCi17Ci0gICAgZGlzcGF0Y2hfc291cmNlX3QgZGlz
cGF0Y2ggPSBbc2VsZiBhcHBEaXNwYXRjaFNvdXJjZV07Ci0KLSAgICBpZiAoZGlzcGF0Y2gpCi0g
ICAgICAgIGRpc3BhdGNoX3NvdXJjZV9jYW5jZWwoZGlzcGF0Y2gpOwotCi0gICAgaWYgKFtzZWxm
IHBpZF0gPiAxKSB7Ci0gICAgICAgIGtpbGwoc2VsZi5waWQsIFNJR0tJTEwpOwotICAgICAgICBb
c2VsZiBzZXRQaWQ6LTFdOwotICAgIH0KLSAgICBbc2VsZiBzZXRBcHBEaXNwYXRjaFNvdXJjZTpu
aWxdOwotfQotCi0tIChOU0RpY3Rpb25hcnkgKilfZW52aXJvbm1lbnRWYXJpYWJsZXMKLXsKLSAg
ICBzdGF0aWMgTlNEaWN0aW9uYXJ5ICplbnZpcm9ubWVudFZhcmlhYmxlczsKLSAgICBzdGF0aWMg
ZGlzcGF0Y2hfb25jZV90IG9uY2U7Ci0KLSAgICBkaXNwYXRjaF9vbmNlKCZvbmNlLCBeewotICAg
ICAgICBOU1N0cmluZyAqcHJvZHVjdERpcmVjdG9yeSA9IFtzZWxmIHByb2R1Y3REaXJdOwotCi0g
ICAgICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmRpY3Rpb25hcnkgPSBbQHsKLSAgICAgICAgICAg
IEAiSVBDX0lERU5USUZJRVIiOiBzZWxmLmlwY0lkZW50aWZpZXIsCi0gICAgICAgICAgICBAIkRZ
TERfRlJBTUVXT1JLX1BBVEgiOiBwcm9kdWN0RGlyZWN0b3J5LAotICAgICAgICAgICAgQCJfX1hQ
Q19EWUxEX0ZSQU1FV09SS19QQVRIIjogcHJvZHVjdERpcmVjdG9yeSwKLSAgICAgICAgICAgIEAi
RFlMRF9MSUJSQVJZX1BBVEgiOiBwcm9kdWN0RGlyZWN0b3J5LAotICAgICAgICAgICAgQCJfX1hQ
Q19EWUxEX0xJQlJBUllfUEFUSCI6IHByb2R1Y3REaXJlY3RvcnksCi0gICAgICAgIH0gbXV0YWJs
ZUNvcHldOwotCi0gICAgICAgIGZvciAoTlNTdHJpbmcgKmtleU5hbWUgaW4gQFtAIkRZTERfSU5T
RVJUX0xJQlJBUklFUyIsIEAiTWFsbG9jU3RhY2tMb2dnaW5nIiwgQCJMT0NBTF9SRVNPVVJDRV9S
T09UIiwgQCJEVU1QUkVOREVSVFJFRV9URU1QIl0pIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIq
IHZhbHVlID0gZ2V0ZW52KFtrZXlOYW1lIFVURjhTdHJpbmddKTsKLSAgICAgICAgICAgIGlmICh2
YWx1ZSAmJiBzdHJsZW4odmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgTlNTdHJpbmcgKm5zVmFs
dWUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6dmFsdWVdOwotICAgICAgICAgICAg
ICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpuc1ZhbHVlIGZvcktleTprZXlOYW1lXTsKLSAgICAg
ICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6bnNWYWx1ZSBmb3JLZXk6W0AiX19YUENf
IiBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzprZXlOYW1lXV07Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICBmb3IgKGNoYXIqKiBlbnZwID0gKl9OU0dldEVudmlyb24oKTsgKmVu
dnA7IGVudnArKykgewotICAgICAgICAgICAgY29uc3QgY2hhciogZW52ID0gKmVudnA7Ci0gICAg
ICAgICAgICBpZiAoIXN0cm5jbXAoIkpTQ18iLCBlbnYsIDQpIHx8ICFzdHJuY21wKCJfX1hQQ19K
U0NfIiwgZW52LCAxMCkpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBlcXVhbCA9IHN0
cmNocihlbnYsICc9Jyk7Ci0gICAgICAgICAgICAgICAgaWYgKCFlcXVhbCkgewotICAgICAgICAg
ICAgICAgICAgICBOU0xvZyhAIk1pc3NpbmcgJz0nIGluIGVudiB2YXIgJyVzJyIsIGVudik7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4S2V5TGVuZ3RoID0gMjU2OwotICAgICAg
ICAgICAgICAgIHNpemVfdCBrZXlMZW5ndGggPSBlcXVhbCAtIGVudjsKLSAgICAgICAgICAgICAg
ICBpZiAoa2V5TGVuZ3RoID49IG1heEtleUxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICBO
U0xvZyhAIkVudiB2YXIgJyVzJyBpcyB0b28gbG9uZyIsIGVudik7Ci0gICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGNoYXIg
a2V5W21heEtleUxlbmd0aF07Ci0gICAgICAgICAgICAgICAgc3RybmNweShrZXksIGVudiwga2V5
TGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBrZXlba2V5TGVuZ3RoXSA9ICdcMCc7Ci0gICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogdmFsdWUgPSBlcXVhbCArIDE7Ci0KLSAgICAgICAgICAgICAg
ICBOU1N0cmluZyAqbnNLZXkgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6a2V5XTsK
LSAgICAgICAgICAgICAgICBOU1N0cmluZyAqbnNWYWx1ZSA9IFtOU1N0cmluZyBzdHJpbmdXaXRo
VVRGOFN0cmluZzp2YWx1ZV07Ci0gICAgICAgICAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0
Om5zVmFsdWUgZm9yS2V5Om5zS2V5XTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIGVudmlyb25tZW50VmFyaWFibGVzID0gW2RpY3Rpb25hcnkgY29weV07Ci0gICAgfSk7Ci0K
LSAgICByZXR1cm4gZW52aXJvbm1lbnRWYXJpYWJsZXM7Ci19Ci0KLS0gKHZvaWQpbGF1bmNoQXBw
Ci17Ci0gICAgTlNEaWN0aW9uYXJ5ICpsYXVuY2hPcHRpb25zID0gQHsKLSAgICAgICAga1NpbURl
dmljZUxhdW5jaEFwcGxpY2F0aW9uRW52aXJvbm1lbnQ6IFtzZWxmIF9lbnZpcm9ubWVudFZhcmlh
Ymxlc10sCi0gICAgICAgIGtTaW1EZXZpY2VMYXVuY2hBcHBsaWNhdGlvbkFyZ3VtZW50czogW3Nl
bGYgZHVtcFRvb2xBcmd1bWVudHNdLAotICAgIH07Ci0KLSAgICBOU0Vycm9yICplcnJvcjsKLSAg
ICBwaWRfdCBwaWQgPSBbc2VsZi5kZXZpY2UgbGF1bmNoQXBwbGljYXRpb25XaXRoSUQ6c2VsZi5h
cHBCdW5kbGVJZGVudGlmaWVyIG9wdGlvbnM6bGF1bmNoT3B0aW9ucyBlcnJvcjomZXJyb3JdOwot
Ci0gICAgaWYgKHBpZCA8IDApIHsKLSAgICAgICAgTlNMb2coQCJDb3VsZG4ndCBsYXVuY2ggJUA6
ICVAIiwgc2VsZi5hcHBCdW5kbGVJZGVudGlmaWVyLCBlcnJvci5kZXNjcmlwdGlvbik7Ci0gICAg
ICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci0KLSAgICBbc2VsZiBzZXRQaWQ6cGlkXTsK
LQotICAgIGRpc3BhdGNoX3F1ZXVlX3QgcXVldWUgPSBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgp
OwotICAgIGRpc3BhdGNoX3NvdXJjZV90IHNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSA9
IGRpc3BhdGNoX3NvdXJjZV9jcmVhdGUoRElTUEFUQ0hfU09VUkNFX1RZUEVfUFJPQywgW3NlbGYg
cGlkXSwgRElTUEFUQ0hfUFJPQ19FWElULCBxdWV1ZSk7Ci0gICAgW3NlbGYgc2V0QXBwRGlzcGF0
Y2hTb3VyY2U6c2ltdWxhdG9yQXBwRXhpdERpc3BhdGNoU291cmNlXTsKLSAgICBkaXNwYXRjaF9z
b3VyY2Vfc2V0X2V2ZW50X2hhbmRsZXIoc2ltdWxhdG9yQXBwRXhpdERpc3BhdGNoU291cmNlLCBe
ewotICAgICAgICBkaXNwYXRjaF9zb3VyY2VfY2FuY2VsKHNpbXVsYXRvckFwcEV4aXREaXNwYXRj
aFNvdXJjZSk7Ci0gICAgICAgIFtzZWxmIGRpZENyYXNoV2l0aE1lc3NhZ2U6bmlsXTsKLSAgICB9
KTsKLSAgICBkaXNwYXRjaF9yZXN1bWUoc2ltdWxhdG9yQXBwRXhpdERpc3BhdGNoU291cmNlKTsK
LX0KLQotLSAodm9pZClzdGFydAotewotICAgIFtzZWxmIGluc3RhbGxBcHBdOwotICAgIFtbc2Vs
ZiByZWxheV0gc2V0dXBdOwotICAgIFtzZWxmIGxhdW5jaEFwcF07Ci0gICAgW1tzZWxmIHJlbGF5
XSBjb25uZWN0XTsKLX0KLQotLSAodm9pZClmaW5pc2gKLXsKLSAgICBbW3NlbGYgcmVsYXldIGRp
c2Nvbm5lY3RdOwotICAgIFtzZWxmIGtpbGxBcHBdOwotICAgIGV4aXQoRVhJVF9TVUNDRVNTKTsK
LX0KLQotQGVuZApJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9t
YWluLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxh
eS9tYWluLm0JKHJldmlzaW9uIDIxMTM3MSkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlv
dXRUZXN0UmVsYXkvbWFpbi5tCShub25leGlzdGVudCkKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW1wb3J0ICJDb3JlU2ltdWxhdG9yU1BJLmgiCi0jaW1wb3J0ICJMVFJl
bGF5Q29udHJvbGxlci5oIgotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLXN0
YXRpYyBMVFJlbGF5Q29udHJvbGxlciAqcmVsYXlDb250cm9sbGVyOwotCi12b2lkIHVzYWdlKCkK
LXsKLSAgICBOU1N0cmluZyAqaGVscFRleHQgPSBAIkxheW91dFRlc3RSZWxheTogcnVuIGEgZHVt
cCB0b29sIGluIHRoZSBzaW11bGF0b3IuIE5vdCBmb3IgZGlyZWN0IGNvbnN1bXB0aW9uLlxuIgot
ICAgICAgICAiVXNhZ2U6IExheW91dFRlc3RSZWxheSBbLWhdIFtvcHRpb25zXSAtLSBbZHVtcCB0
b29sIGFyZ3VtZW50c11cbiIKLSAgICAgICAgIlJlcXVpcmVkIG9wdGlvbnM6XG4iCi0gICAgICAg
ICIgICAgLXVkaWQgPGlkZW50aWZpZXI+ICAgICAgIFNpbXVsYXRvciBkZXZpY2UgaWRlbnRpZmll
clxuIgotICAgICAgICAiICAgIC1hcHAgPGFwcF9wYXRoPiAgICAgICAgICBQYXRoIHRvIHRoZSBi
dWlsdCBpT1MgLmFwcCBidW5kbGUgZGlyZWN0b3J5LlxuIgotICAgICAgICAiICAgIC1wcm9kdWN0
RGlyIDxkaXI+ICAgICAgICAvcGF0aC90by9XZWJLaXRCdWlsZC97Y29uZmlndXJhdGlvbn0te3No
b3J0IHBsYXRmb3JtfS5cbiI7Ci0KLSAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBbaGVscFRl
eHQgVVRGOFN0cmluZ10pOwotfQotCi1OU1N0cmluZyAqZ2V0UmVxdWlyZWRTdHJpbmdBcmd1bWVu
dChOU1N0cmluZyAqcGFyYW1ldGVyKQotewotICAgIE5TVXNlckRlZmF1bHRzICpkZWZhdWx0cyA9
IFtOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c107Ci0gICAgTlNTdHJpbmcgKmFy
Z3VtZW50ID0gW2RlZmF1bHRzIHN0cmluZ0ZvcktleTpwYXJhbWV0ZXJdOwotCi0gICAgaWYgKCFh
cmd1bWVudCkgewotICAgICAgICBOU0xvZyhAIi0lQCBpcyByZXF1aXJlZC4iLCBwYXJhbWV0ZXIp
OwotICAgICAgICB1c2FnZSgpOwotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQot
ICAgIHJldHVybiBhcmd1bWVudDsKLX0KLQotTlNBcnJheSAqZ2V0RHVtcFRvb2xBcmd1bWVudHMo
KQotewotICAgIE5TTXV0YWJsZUFycmF5ICpkdW1wVG9vbEFyZ3VtZW50cyA9IFtbTlNNdXRhYmxl
QXJyYXkgYWxsb2NdIGluaXRdOwotICAgIE5TQXJyYXkgKnByb2Nlc3NBcmdzID0gW1tOU1Byb2Nl
c3NJbmZvIHByb2Nlc3NJbmZvXSBhcmd1bWVudHNdOwotICAgIEJPT0wgYXBwZW5kaW5nID0gTk87
Ci0gICAgZm9yIChOU1N0cmluZyAqYXJnIGluIHByb2Nlc3NBcmdzKSB7Ci0gICAgICAgIGlmIChb
YXJnIGlzRXF1YWxUb1N0cmluZzpAIi0tIl0pIHsKLSAgICAgICAgICAgIGFwcGVuZGluZyA9IFlF
UzsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChhcHBlbmRp
bmcpCi0gICAgICAgICAgICBbZHVtcFRvb2xBcmd1bWVudHMgYWRkT2JqZWN0OmFyZ107Ci0gICAg
fQotICAgIHJldHVybiBkdW1wVG9vbEFyZ3VtZW50czsKLX0KLQotdm9pZCBmaW5pc2goKQotewot
ICAgIFtyZWxheUNvbnRyb2xsZXIgZmluaXNoXTsKLX0KLQotdm9pZCByZWNlaXZlZFNpZ25hbChp
bnQgc2lnbmFsKQotewotICAgIGV4aXQoRVhJVF9TVUNDRVNTKTsKLX0KLQotaW50IG1haW4oaW50
IGFyZ2MsIGNvbnN0IGNoYXIgKiBhcmd2W10pCi17Ci0gICAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0g
ICAgICAgIE5TQXJyYXkgKmhlbHBBcmd1bWVudHMgPSBAW0AiLWgiLCBAIi0taGVscCJdOwotICAg
ICAgICBmb3IgKE5TU3RyaW5nICpoZWxwQXJndW1lbnQgaW4gaGVscEFyZ3VtZW50cykgewotICAg
ICAgICAgICAgaWYgKFtbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIGFyZ3VtZW50c10gaW5k
ZXhPZk9iamVjdDpoZWxwQXJndW1lbnRdICE9IE5TTm90Rm91bmQpIHsKLSAgICAgICAgICAgICAg
ICB1c2FnZSgpOwotICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0jaWYgVVNFX1NJTV9TRVJWSUNFX0NPTlRFWFQKLSAgICAgICAg
TlNTdHJpbmcgKmRldmVsb3BlckRpcmVjdG9yeSA9IGdldFJlcXVpcmVkU3RyaW5nQXJndW1lbnQo
QCJkZXZlbG9wZXJEaXIiKTsKLSNlbmRpZgotICAgICAgICBOU1VVSUQgKnVkaWQgPSBbW05TVVVJ
RCBhbGxvY10gaW5pdFdpdGhVVUlEU3RyaW5nOmdldFJlcXVpcmVkU3RyaW5nQXJndW1lbnQoQCJ1
ZGlkIildOwotICAgICAgICBOU1N0cmluZyAqYXBwUGF0aCA9IGdldFJlcXVpcmVkU3RyaW5nQXJn
dW1lbnQoQCJhcHAiKTsKLSAgICAgICAgTlNTdHJpbmcgKnByb2R1Y3REaXJlY3RvcnkgPSBnZXRS
ZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAicHJvZHVjdERpciIpOwotICAgICAgICBOU0FycmF5ICpk
dW1wVG9vbEFyZ3VtZW50cyA9IGdldER1bXBUb29sQXJndW1lbnRzKCk7Ci0KLSNpZiBVU0VfU0lN
X1NFUlZJQ0VfQ09OVEVYVAotICAgICAgICBOU0Vycm9yICplcnJvcjsKLSAgICAgICAgU2ltU2Vy
dmljZUNvbnRleHQgKnNlcnZpY2VDb250ZXh0ID0gW1NpbVNlcnZpY2VDb250ZXh0IHNoYXJlZFNl
cnZpY2VDb250ZXh0Rm9yRGV2ZWxvcGVyRGlyOmRldmVsb3BlckRpcmVjdG9yeSBlcnJvcjomZXJy
b3JdOwotICAgICAgICBpZiAoIXNlcnZpY2VDb250ZXh0KSB7Ci0gICAgICAgICAgICBOU0xvZyhA
IkRldmljZSBjb250ZXh0IGNvdWxkbid0IGJlIGZvdW5kOiAlQCIsIGVycm9yKTsKLSAgICAgICAg
ICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAgICAgfQotICAgICAgICBTaW1EZXZpY2VTZXQg
KmRldmljZVNldCA9IFtzZXJ2aWNlQ29udGV4dCBkZWZhdWx0RGV2aWNlU2V0V2l0aEVycm9yOm5p
bF07Ci0gICAgICAgIGlmICghZGV2aWNlU2V0KSB7Ci0gICAgICAgICAgICBOU0xvZyhAIkRlZmF1
bHQgZGV2aWNlIHNldCBjb3VsZG4ndCBiZSBmb3VuZDogJUAiLCBlcnJvcik7Ci0gICAgICAgICAg
ICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgIH0KLSAgICAgICAgU2ltRGV2aWNlICpkZXZp
Y2UgPSBbZGV2aWNlU2V0LmRldmljZXNCeVVESUQgb2JqZWN0Rm9yS2V5OnVkaWRdOwotI2Vsc2UK
LSAgICAgICAgU2ltRGV2aWNlICpkZXZpY2UgPSBbU2ltRGV2aWNlU2V0LmRlZmF1bHRTZXQuZGV2
aWNlc0J5VURJRCBvYmplY3RGb3JLZXk6dWRpZF07Ci0jZW5kaWYKLSAgICAgICAgaWYgKCFkZXZp
Y2UpIHsKLSAgICAgICAgICAgIE5TTG9nKEAiRGV2aWNlICVAIGNvdWxkbid0IGJlIGZvdW5kIiwg
dWRpZCk7Ci0gICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZWxheUNvbnRyb2xsZXIgPSBbW0xUUmVsYXlDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0
aERldmljZTpkZXZpY2UgcHJvZHVjdERpcjpwcm9kdWN0RGlyZWN0b3J5IGFwcFBhdGg6YXBwUGF0
aCBkZXZpY2VVRElEOnVkaWQgZHVtcFRvb2xBcmd1bWVudHM6ZHVtcFRvb2xBcmd1bWVudHNdOwot
ICAgICAgICBbcmVsYXlDb250cm9sbGVyIHN0YXJ0XTsKLQotICAgICAgICBhdGV4aXQoZmluaXNo
KTsKLSAgICAgICAgc2lnbmFsKFNJR0lOVCwgcmVjZWl2ZWRTaWduYWwpOwotICAgICAgICBzaWdu
YWwoU0lHVEVSTSwgcmVjZWl2ZWRTaWduYWwpOwotCi0gICAgICAgIFtbTlNSdW5Mb29wIG1haW5S
dW5Mb29wXSBydW5dOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KSW5kZXg6IFRvb2xzL1Njcmlw
dHMvYnVpbGQtbGF5b3V0dGVzdHJlbGF5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvYnVp
bGQtbGF5b3V0dGVzdHJlbGF5CShyZXZpc2lvbiAyMTEzNzEpCisrKyBUb29scy9TY3JpcHRzL2J1
aWxkLWxheW91dHRlc3RyZWxheQkobm9uZXhpc3RlbnQpCkBAIC0xLDcwICswLDAgQEAKLSMhL3Vz
ci9iaW4vcGVybCAtdwotCi0jIENvcHlyaWdodCAoQykgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0
OgotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotIyBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSMg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotIyBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSMgQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0KLXVzZSBzdHJpY3Q7Ci11c2UgRmlsZTo6QmFzZW5hbWU7Ci11c2UgRmluZEJpbjsKLXVzZSBH
ZXRvcHQ6OkxvbmcgcXcoOmNvbmZpZyBwYXNzX3Rocm91Z2gpOwotdXNlIGxpYiAkRmluZEJpbjo6
QmluOwotdXNlIHdlYmtpdGRpcnM7Ci0KLW15ICRzaG93SGVscCA9IDA7Ci1teSAkY2xlYW4gPSAw
OwotCi1teSAkcHJvZ3JhbU5hbWUgPSBiYXNlbmFtZSgkMCk7Ci1teSAkdXNhZ2UgPSA8PEVPRjsK
LVVzYWdlOiAkcHJvZ3JhbU5hbWUgW29wdGlvbnNdIFtvcHRpb25zIHRvIHBhc3MgdG8gYnVpbGQg
c3lzdGVtXQotICAtLWhlbHAgICAgICAgIFNob3cgdGhpcyBoZWxwIG1lc3NhZ2UKLSAgLS1jbGVh
biAgICAgICBDbGVhbiB1cCB0aGUgYnVpbGQgZGlyZWN0b3J5Ci1FT0YKLQotbXkgJHJlc3VsdCA9
IEdldE9wdGlvbnMoCi0gICAgJ2hlbHAnID0+IFwkc2hvd0hlbHAsCi0gICAgJ2NsZWFuJyA9PiBc
JGNsZWFuLAotKTsKLQotaWYgKCRzaG93SGVscCBvciBub3QgJHJlc3VsdCkgewotICAgcHJpbnQg
U1RERVJSICR1c2FnZTsKLSAgIGV4aXQgMTsKLX0KLQotY2hlY2tSZXF1aXJlZFN5c3RlbUNvbmZp
ZygpOwotc2V0Q29uZmlndXJhdGlvbigpOwotY2hkaXJXZWJLaXQoKTsKLQotY2hkaXIgIlRvb2xz
L0xheW91dFRlc3RSZWxheSIgb3IgZGllOwotCi0jIEZJWE1FOiBUaGlzIHRvb2wgaXMgb25seSB1
c2VmdWwgd2hlbiBidWlsZGluZyBXZWJLaXQgZm9yIGlPUyBTaW11bGF0b3IuIEZvciBub3csCi0j
ICAgICAgICB0byBhdm9pZCBicmVha2luZyBzb21lIEFwcGxlIEludGVybmFsIHRvb2xzIHdlIHN1
cHBvcnQgY2FsbGluZyB0aGlzIHNjcmlwdAotIyAgICAgICAgd2l0aG91dCAtLWlvcy1zaW11bGF0
b3Igc28gbG9uZyBhcyB3ZSBhcmUgYnVpbGRpbmcgb24gYSBNYWMuCi1pZiAoaXNBcHBsZU1hY1dl
YktpdCgpICYmICF3aWxsVXNlSU9TRGV2aWNlU0RLKCkpIHsKLSAgICAjIEZJWE1FOiBDaGFuZ2lu
ZyBTREsgYXQgdGhpcyBwb2ludCByZXN1bHRzIGluIGFuIGluY29uc2lzdGVudCB3ZWJraXRkaXJz
IHN0YXRlLgotICAgICMgV2Ugc2hvdWxkIG1ha2UgaXQgc28gdGhhdCB3ZWJraXRkaXJzIGZ1bmN0
aW9ucyBuZXZlciBzZWUgdGhlIHdyb25nIFNESy4KLSAgICBzZXRYY29kZVNESyh1bmRlZik7ICMg
Rm9yY2UgdXNlIG9mIE1hYyBTREsgaWYgLS1pb3Mtc2ltdWxhdG9yIHdhcyBwYXNzZWQKLSAgICBl
eGl0IGV4aXRTdGF0dXMoYnVpbGRYQ29kZVByb2plY3QoIkxheW91dFRlc3RSZWxheSIsICRjbGVh
biwgWGNvZGVPcHRpb25zKCksIEBBUkdWKSk7Ci19Ci0KLXByaW50IFNUREVSUiAiTGF5b3V0VGVz
dFJlbGF5IGlzIG9ubHkgc3VwcG9ydGVkIGZvciBpT1MgU2ltdWxhdG9yLlxuIjsKLWV4aXQgMTsK
ClByb3BlcnR5IGNoYW5nZXMgb246IFRvb2xzL1NjcmlwdHMvYnVpbGQtbGF5b3V0dGVzdHJlbGF5
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KRGVsZXRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTEgKzAsMCAjIwotKgpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBUb29scy9TY3JpcHRzL2J1aWxkLXdl
YmtpdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAkocmV2aXNpb24g
MjExMzcxKQorKysgVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQJKHdvcmtpbmcgY29weSkKQEAg
LTIwMCwxMCArMjAwLDYgQEAgaWYgKGlzQXBwbGVNYWNXZWJLaXQoKSkgewogICAgICAgICBwdXNo
IEBjb3B5TGlicmFyaWVzQXJncywgcHJvZHVjdERpcigpOwogICAgICAgICBwcmludChqb2luKCIg
IiwgQGNvcHlMaWJyYXJpZXNBcmdzKSAuICJcbiIpOwogICAgICAgICAoc3lzdGVtKEBjb3B5TGli
cmFyaWVzQXJncykgPT0gMCkgb3IgZGllOwotCi0gICAgICAgIGlmICh3aWxsVXNlSU9TU2ltdWxh
dG9yU0RLKCkpIHsKLSAgICAgICAgICAgIChzeXN0ZW0oInBlcmwiLCAiVG9vbHMvU2NyaXB0cy9i
dWlsZC1sYXlvdXR0ZXN0cmVsYXkiLCBhcmd1bWVudHNGb3JDb25maWd1cmF0aW9uKCkpID09IDAp
IG9yIGRpZTsKLSAgICAgICAgfQogICAgIH0KIAogICAgICMgQnVpbGQgVG9vbHMgbmVlZGVkIGZv
ciBBcHBsZSBwb3J0cwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>301048</attachid>
            <date>2017-02-09 09:24:36 -0800</date>
            <delta_ts>2017-02-10 12:00:26 -0800</delta_ts>
            <desc>Remove LayoutTestRelay</desc>
            <filename>bug-165927-20170209092209.patch</filename>
            <type>text/plain</type>
            <size>141090</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMTk2MSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDIyIEBACisyMDE3LTAyLTA5ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBSZW1vdmluZyBMYXlvdXRUZXN0UmVsYXkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTkyNworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICBQYXJ0IDIKKworICAgICAgICBMYXlvdXRUZXN0
UmVsYXkgdXNlcyBTUEksIHNpbmNlIHJlY2VudCB2ZXJzaW9ucyBvZiB0aGUgaU9TIFNESyBhbGxv
dyBmb3IgaW5zdGFsbGluZyBhcHBzIG9uIHNpbXVsYXRvcnMgdGhyb3VnaCBzaW1jdGwsIHVzZSB0
aGlzIGZ1bmN0aW9uYWxpdHkgaW5zdGVhZC4KKworICAgICAgICAqIEJ1aWxkU2xhdmVTdXBwb3J0
L2J1aWx0LXByb2R1Y3QtYXJjaGl2ZToKKyAgICAgICAgKGFyY2hpdmVCdWlsdFByb2R1Y3QpOiBO
byBtb3JlIHNwZWNpYWwgY2FzZSBmb3IgaU9TIFNpbXVsYXRvciBwcm9kdWN0cy4KKyAgICAgICAg
KiBCdWlsZFNsYXZlU3VwcG9ydC9raWxsLW9sZC1wcm9jZXNzZXM6CisgICAgICAgIChtYWluKTog
UmVtb3ZlIExheW91dFRlc3RSZWxheSBmcm9tIGxpc3Qgb2YgcHJvY2Vzc2VzLgorICAgICAgICAq
IExheW91dFRlc3RSZWxheTogUmVtb3ZlZCBMYXlvdXRUZXN0UmVsYXkuCisgICAgICAgICogTWFr
ZWZpbGU6CisgICAgICAgICogU2NyaXB0cy9idWlsZC1sYXlvdXR0ZXN0cmVsYXk6IFJlbW92ZWQu
CisgICAgICAgICogU2NyaXB0cy9idWlsZC13ZWJraXQ6IFJlbW92ZWQgTGF5b3V0VGVzdFJlbGF5
IHJlZmVyZW5jZXMuCisKIDIwMTctMDItMDkgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUu
Y29tPgogCiAgICAgICAgIEltcHJvdmUgVzNDIGltcG9ydGVyIGNvbW1hbmQgbGluZSBvcHRpb25z
CkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZp
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMvQmFz
ZS54Y2NvbmZpZwkocmV2aXNpb24gMjExOTYxKQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0Nv
bmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcJKG5vbmV4aXN0ZW50KQpAQCAtMSw2OCArMCwwIEBA
Ci0vLyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
Ly8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0vLyBhcmUgbWV0OgotLy8gMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LS8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLS8vIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0vLyAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotLy8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS8vIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotLy8gUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLS8vIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotLy8gRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotLy8gUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0vLyBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0vLyBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgIi4uLy4uLy4u
Ly4uL0ludGVybmFsL0NvbmZpZ3VyYXRpb25zL0hhdmVJbnRlcm5hbFNESy54Y2NvbmZpZyIKLQot
VVNFX0lOVEVSTkFMX1NESyA9ICQoVVNFX0lOVEVSTkFMX1NES18kKENPTkZJR1VSQVRJT04pKTsK
LVVTRV9JTlRFUk5BTF9TREtfUHJvZHVjdGlvbiA9IFlFUzsKLVVTRV9JTlRFUk5BTF9TREtfRGVi
dWcgPSAkKEhBVkVfSU5URVJOQUxfU0RLKTsKLVVTRV9JTlRFUk5BTF9TREtfUmVsZWFzZSA9ICQo
SEFWRV9JTlRFUk5BTF9TREspOwotCi1DTEFOR19DWFhfTEFOR1VBR0VfU1RBTkRBUkQgPSBnbnUr
KzB4OwotQ0xBTkdfRU5BQkxFX09CSkNfQVJDID0gWUVTOwotQ0xBTkdfV0FSTl9DWFgwWF9FWFRF
TlNJT05TID0gTk87Ci1IRUFERVJfU0VBUkNIX1BBVEhTID0gJChCVUlMVF9QUk9EVUNUU19ESVIp
L3Vzci9sb2NhbC9pbmNsdWRlICQoV0VCQ09SRV9QUklWQVRFX0hFQURFUlNfRElSKS9Gb3J3YXJk
aW5nSGVhZGVycyAkKFNSQ1JPT1QpLy4uLy4uL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UgJChO
RVhUX1JPT1QpL3Vzci9sb2NhbC9pbmNsdWRlL1dlYkNvcmVUZXN0U3VwcG9ydDsKLUdDQ19QUkVQ
Uk9DRVNTT1JfREVGSU5JVElPTlMgPSAkKERFQlVHX0RFRklORVMpIEVOQUJMRV9EQVNIQk9BUkRf
U1VQUE9SVDsKLURFQlVHX0lORk9STUFUSU9OX0ZPUk1BVCA9IGR3YXJmLXdpdGgtZHN5bTsKLVBS
RUJJTkRJTkcgPSBOTwotR0NDX0NfTEFOR1VBR0VfU1RBTkRBUkQgPSBnbnU5OQotR0NDX0VOQUJM
RV9DUFBfRVhDRVBUSU9OUyA9IE5POwotR0NDX0VOQUJMRV9DUFBfUlRUSSA9IE5POwotR0NDX1BS
RUNPTVBJTEVfUFJFRklYX0hFQURFUiA9IFlFUwotR0NDX1RSRUFUX1dBUk5JTkdTX0FTX0VSUk9S
UyA9IFlFUwotR0NDX1ZFUlNJT04gPSBjb20uYXBwbGUuY29tcGlsZXJzLmxsdm0uY2xhbmcuMV8w
OwotR0NDX1dBUk5fQUJPVVRfREVQUkVDQVRFRF9GVU5DVElPTlMgPSBOTwotR0NDX1dBUk5fVU5V
U0VEX0ZVTkNUSU9OID0gWUVTCi1HQ0NfV0FSTl9VTlVTRURfVkFSSUFCTEUgPSBZRVMKLUdDQ19X
QVJOXzY0X1RPXzMyX0JJVF9DT05WRVJTSU9OW2FyY2g9eDg2XzY0XSA9IE5POwotV0FSTklOR19D
RkxBR1MgPSAtV2FsbCAtVyAtV25vLXVudXNlZC1wYXJhbWV0ZXIgLVd1bmRlZgotCi1ERUJVR19E
RUZJTkVTX2RlYnVnID0gOwotREVCVUdfREVGSU5FU19ub3JtYWwgPSBOREVCVUc7Ci1ERUJVR19E
RUZJTkVTID0gJChERUJVR19ERUZJTkVTXyQoQ1VSUkVOVF9WQVJJQU5UKSk7Ci0KLVRBUkdFVF9N
QUNfT1NfWF9WRVJTSU9OX01BSk9SID0gJChUQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUiQo
TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUOnN1ZmZpeDppZGVudGlmaWVyKSk7Ci1UQVJHRVRfTUFD
X09TX1hfVkVSU0lPTl9NQUpPUl8xMCA9IDEwMTAwMDsKLVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9O
X01BSk9SXzExID0gMTAxMTAwOwotVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1JfMTIgPSAx
MDEyMDA7Ci1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUl8xMyA9IDEwMTMwMDsKLQotU0RL
Uk9PVCA9IG1hY29zeC5pbnRlcm5hbDsKLQotU1VQUE9SVEVEX1BMQVRGT1JNUyA9IG1hY29zeDsK
LQotVE9PTENIQUlOUyA9IGRlZmF1bHQ7Ci0KLU9USEVSX0NGTEFHUyA9ICQoQVNBTl9PVEhFUl9D
RkxBR1MpOwotT1RIRVJfQ1BMVVNQTFVTRkxBR1MgPSAkKEFTQU5fT1RIRVJfQ1BMVVNQTFVTRkxB
R1MpOwotT1RIRVJfTERGTEFHUyA9ICQoQVNBTl9PVEhFUl9MREZMQUdTKTsKSW5kZXg6IFRvb2xz
L0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25maWcKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0RlYnVnUmVs
ZWFzZS54Y2NvbmZpZwkocmV2aXNpb24gMjExOTYxKQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5
L0NvbmZpZ3VyYXRpb25zL0RlYnVnUmVsZWFzZS54Y2NvbmZpZwkobm9uZXhpc3RlbnQpCkBAIC0x
LDQyICswLDAgQEAKLS8vIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLS8vIGFyZSBtZXQ6Ci0v
LyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotLy8gICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LS8vICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0vLyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotLy8gSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0v
LyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotLy8gQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0vLyBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0vLyBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLS8vIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLS8vIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW5jbHVk
ZSAiQmFzZS54Y2NvbmZpZyIKLQotQVJDSFMgPSAkKEFSQ0hTX1NUQU5EQVJEXzY0X0JJVCk7Ci0K
LVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SID0gJChNQUNfT1NfWF9WRVJTSU9OX01BSk9S
KTsKLQotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUID0gJChNQUNPU1hfREVQTE9ZTUVOVF9UQVJH
RVRfJChUQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUikpCi1NQUNPU1hfREVQTE9ZTUVOVF9U
QVJHRVRfMTAxMDAwID0gMTAuMTA7Ci1NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfMTAxMTAwID0g
MTAuMTE7Ci1NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfMTAxMjAwID0gMTAuMTI7Ci1NQUNPU1hf
REVQTE9ZTUVOVF9UQVJHRVRfMTAxMzAwID0gMTAuMTM7Ci0KLUZSQU1FV09SS19TRUFSQ0hfUEFU
SFMgPSAkKERFVkVMT1BFUl9ESVIpL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3M7Ci1MRF9SVU5Q
QVRIX1NFQVJDSF9QQVRIUyA9ICQoREVWRUxPUEVSX0RJUikvTGlicmFyeS9Qcml2YXRlRnJhbWV3
b3JrczsKLU9USEVSX0xERkxBR1MgPSAtZnJhbWV3b3JrIENvcmVTaW11bGF0b3IgLWZyYW1ld29y
ayBBcHBLaXQ7Ci0KLVNES1JPT1QgPSAkKFNES1JPT1RfbWFjb3N4XyQoVVNFX0lOVEVSTkFMX1NE
SykpOwotU0RLUk9PVF9tYWNvc3hfID0gbWFjb3N4OwotU0RLUk9PVF9tYWNvc3hfWUVTID0gbWFj
b3N4LmludGVybmFsOwpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxh
eS9Db3JlU2ltdWxhdG9yU1BJLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5
L0xheW91dFRlc3RSZWxheS9Db3JlU2ltdWxhdG9yU1BJLmgJKHJldmlzaW9uIDIxMTk2MSkKKysr
IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvQ29yZVNpbXVsYXRvclNQSS5o
CShub25leGlzdGVudCkKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBf
X2hhc19pbmNsdWRlKDxDb3JlU2ltdWxhdG9yL0NvcmVTaW11bGF0b3IuaD4pCi0KLS8qIEZJWE1F
OiBSZW1vdmUgdGhlIGJlbG93ICNkZWZpbmUgb25jZSB3ZSByZXF1aXJlIFhjb2RlIDcuMyB3aXRo
IGlPUyA5LjMgU0RLIG9yIG5ld2VyLiAqLwotI2RlZmluZSBfX2NvcmVzaW1fdW5hdmFpbGFibGVf
bXNnKG1zZykKLSNpbXBvcnQgPENvcmVTaW11bGF0b3IvQ29yZVNpbXVsYXRvci5oPgotCi0vKiBG
SVhNRTogQWx3YXlzIHVzZSBTaW1TZXJ2aWNlQ29udGV4dCBvbmNlIHdlIHJlcXVpcmUgWGNvZGUg
Ny4zIHdpdGggaU9TIDkuMyBTREsgb3IgbmV3ZXIuICovCi0jZGVmaW5lIFVTRV9TSU1fU0VSVklD
RV9DT05URVhUIGRlZmluZWQoQ09SRVNJTV9BUElfTUFYX0FMTE9XRUQpCi0KLSNlbHNlCi0KLSNp
bXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi0jZGVmaW5lIFVTRV9TSU1fU0VSVklD
RV9DT05URVhUIDEKLQotI2RlZmluZSBrU2ltRGV2aWNlTGF1bmNoQXBwbGljYXRpb25Bcmd1bWVu
dHMgQCJhcmd1bWVudHMiCi0jZGVmaW5lIGtTaW1EZXZpY2VMYXVuY2hBcHBsaWNhdGlvbkVudmly
b25tZW50IEAiZW52aXJvbm1lbnQiCi0KLUBpbnRlcmZhY2UgU2ltRGV2aWNlIDogTlNPYmplY3QK
LS0gKEJPT0wpaW5zdGFsbEFwcGxpY2F0aW9uOihOU1VSTCAqKWluc3RhbGxVUkwgd2l0aE9wdGlv
bnM6KE5TRGljdGlvbmFyeSAqKW9wdGlvbnMgZXJyb3I6KE5TRXJyb3IgKiBfX2F1dG9yZWxlYXNp
bmcgKillcnJvcjsKLS0gKHBpZF90KWxhdW5jaEFwcGxpY2F0aW9uV2l0aElEOihOU1N0cmluZyAq
KWJ1bmRsZUlEIG9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKW9wdGlvbnMgZXJyb3I6KE5TRXJyb3Ig
KiBfX2F1dG9yZWxlYXNpbmcgKillcnJvcjsKLUBlbmQKLQotQGludGVyZmFjZSBTaW1EZXZpY2VT
ZXQgOiBOU09iamVjdAotQHByb3BlcnR5IChyZWFkb25seSwgY29weSkgTlNEaWN0aW9uYXJ5ICpk
ZXZpY2VzQnlVRElEOwotQGVuZAotCi1AaW50ZXJmYWNlIFNpbVNlcnZpY2VDb250ZXh0IDogTlNP
YmplY3QKLSsoU2ltU2VydmljZUNvbnRleHQgKilzaGFyZWRTZXJ2aWNlQ29udGV4dEZvckRldmVs
b3BlckRpcjooTlNTdHJpbmcgKilkZXZlbG9wZXJEaXIgZXJyb3I6KE5TRXJyb3IgKiBfX2F1dG9y
ZWxlYXNpbmcgKillcnJvcjsKLS0oU2ltRGV2aWNlU2V0ICopZGVmYXVsdERldmljZVNldFdpdGhF
cnJvcjooTlNFcnJvciAqIF9fYXV0b3JlbGVhc2luZyAqKWVycm9yOwotQGVuZAotCi0jZW5kaWYK
SW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRQaXBlUmVsYXku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xU
UGlwZVJlbGF5LmgJKHJldmlzaW9uIDIxMTk2MSkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9M
YXlvdXRUZXN0UmVsYXkvTFRQaXBlUmVsYXkuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDM2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIExUUGlwZVJlbGF5X2gKLSNkZWZpbmUgTFRQaXBlUmVs
YXlfaAotCi0jaW1wb3J0ICJMVFJlbGF5LmgiCi0KLUBpbnRlcmZhY2UgTFRQaXBlUmVsYXkgOiBO
U09iamVjdCA8TFRSZWxheT4KLUBwcm9wZXJ0eSAod2VhaykgaWQ8TFRSZWxheURlbGVnYXRlPiBy
ZWxheURlbGVnYXRlOwotLSAoaWQpaW5pdFdpdGhQcmVmaXg6KE5TU3RyaW5nICopcHJlZml4Owot
QGVuZAotCi0jZW5kaWYKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVs
YXkvTFRQaXBlUmVsYXkubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5
b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0JKHJldmlzaW9uIDIxMTk2MSkKKysrIFRvb2xzL0xh
eW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRQaXBlUmVsYXkubQkobm9uZXhpc3RlbnQp
CkBAIC0xLDE1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiTFRQaXBlUmVsYXkuaCIK
LQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQu
aD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQotQGludGVyZmFjZSBMVFBpcGVSZWxheSAoKQot
QHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU1N0cmluZyAqZmlmb1ByZWZpeDsKLUBwcm9w
ZXJ0eSAoc3Ryb25nKSBOU091dHB1dFN0cmVhbSAqc3RhbmRhcmRJbnB1dFBpcGU7Ci1AcHJvcGVy
dHkgKHN0cm9uZykgTlNJbnB1dFN0cmVhbSAqc3RhbmRhcmRPdXRwdXRQaXBlOwotQHByb3BlcnR5
IChzdHJvbmcpIE5TSW5wdXRTdHJlYW0gKnN0YW5kYXJkRXJyb3JQaXBlOwotCi0tICh2b2lkKWNy
ZWF0ZUZJRk9zOwotLSAodm9pZClkZXN0cm95RklGT3M7Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlv
biBMVFBpcGVSZWxheQotCi0tIChOU1N0cmluZyAqKWluUGlwZVBhdGgKLXsKLSAgICByZXR1cm4g
W19maWZvUHJlZml4IHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOkAiX0lOIl07Ci19Ci0KLS0gKE5T
U3RyaW5nICopb3V0UGlwZVBhdGgKLXsKLSAgICByZXR1cm4gW19maWZvUHJlZml4IHN0cmluZ0J5
QXBwZW5kaW5nU3RyaW5nOkAiX09VVCJdOwotfQotCi0tIChOU1N0cmluZyAqKWVycm9yUGlwZVBh
dGgKLXsKLSAgICByZXR1cm4gW19maWZvUHJlZml4IHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOkAi
X0VSUk9SIl07Ci19Ci0KLS0gKE5TT3V0cHV0U3RyZWFtICopIG91dHB1dFN0cmVhbQotewotICAg
IHJldHVybiBfc3RhbmRhcmRJbnB1dFBpcGU7Ci19Ci0KLS0gKGlkKWluaXRXaXRoUHJlZml4OihO
U1N0cmluZyAqKXByZWZpeAotewotICAgIGlmICgoc2VsZiA9IFtzdXBlciBpbml0XSkpIHsKLSAg
ICAgICAgX2ZpZm9QcmVmaXggPSBwcmVmaXg7Ci0gICAgICAgIFtzZWxmIGRlc3Ryb3lGSUZPc107
Ci0gICAgfQotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKXNldHVwCi17Ci0gICAgW3Nl
bGYgZGVzdHJveUZJRk9zXTsKLSAgICBbc2VsZiBjcmVhdGVGSUZPc107Ci19Ci0KLS0gKHZvaWQp
dGVhckRvd24KLXsKLSAgICBbc2VsZiBkZXN0cm95RklGT3NdOwotfQotCi0tKHZvaWQpIGNvbm5l
Y3QKLXsKLSAgICBfc3RhbmRhcmRJbnB1dFBpcGUgPSBbTlNPdXRwdXRTdHJlYW0gb3V0cHV0U3Ry
ZWFtVG9GaWxlQXRQYXRoOltzZWxmIGluUGlwZVBhdGhdIGFwcGVuZDpZRVNdOwotICAgIF9zdGFu
ZGFyZE91dHB1dFBpcGUgPSBbTlNJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbVdpdGhGaWxlQXRQYXRo
OltzZWxmIG91dFBpcGVQYXRoXV07Ci0gICAgX3N0YW5kYXJkRXJyb3JQaXBlID0gW05TSW5wdXRT
dHJlYW0gaW5wdXRTdHJlYW1XaXRoRmlsZUF0UGF0aDpbc2VsZiBlcnJvclBpcGVQYXRoXV07Ci0K
LSAgICBbW3NlbGYgc3RhbmRhcmRJbnB1dFBpcGVdIHNldERlbGVnYXRlOnNlbGZdOwotICAgIFtb
c2VsZiBzdGFuZGFyZE91dHB1dFBpcGVdIHNldERlbGVnYXRlOnNlbGZdOwotICAgIFtbc2VsZiBz
dGFuZGFyZEVycm9yUGlwZV0gc2V0RGVsZWdhdGU6c2VsZl07Ci0KLSAgICBbW3NlbGYgc3RhbmRh
cmRPdXRwdXRQaXBlXSBzY2hlZHVsZUluUnVuTG9vcDpbTlNSdW5Mb29wIG1haW5SdW5Mb29wXSBm
b3JNb2RlOk5TRGVmYXVsdFJ1bkxvb3BNb2RlXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRFcnJvclBp
cGVdIHNjaGVkdWxlSW5SdW5Mb29wOltOU1J1bkxvb3AgbWFpblJ1bkxvb3BdIGZvck1vZGU6TlNE
ZWZhdWx0UnVuTG9vcE1vZGVdOwotCi0gICAgW1tzZWxmIHN0YW5kYXJkSW5wdXRQaXBlXSBvcGVu
XTsKLSAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRQaXBlXSBvcGVuXTsKLSAgICBbW3NlbGYgc3Rh
bmRhcmRFcnJvclBpcGVdIG9wZW5dOwotCi0gICAgW1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZENv
bm5lY3RdOwotfQotCi0tICh2b2lkKWRpc2Nvbm5lY3QKLXsKLSAgICBbW3NlbGYgc3RhbmRhcmRP
dXRwdXRQaXBlXSBjbG9zZV07Ci0gICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JQaXBlXSBjbG9zZV07
Ci0gICAgW1tzZWxmIHN0YW5kYXJkSW5wdXRQaXBlXSBjbG9zZV07Ci0gICAgW1tzZWxmIHJlbGF5
RGVsZWdhdGVdIGRpZERpc2Nvbm5lY3RdOwotfQotCi0tICh2b2lkKWNyZWF0ZUZJRk9zCi17Ci0g
ICAgbWtmaWZvKFtbc2VsZiBpblBpcGVQYXRoXSBVVEY4U3RyaW5nXSwgMDY2Nik7Ci0gICAgbWtm
aWZvKFtbc2VsZiBvdXRQaXBlUGF0aF0gVVRGOFN0cmluZ10sIDA2NjYpOwotICAgIG1rZmlmbyhb
W3NlbGYgZXJyb3JQaXBlUGF0aF0gVVRGOFN0cmluZ10sIDA2NjYpOwotfQotCi0tICh2b2lkKWRl
c3Ryb3lGSUZPcwotewotICAgIHVubGluayhbW3NlbGYgaW5QaXBlUGF0aF0gVVRGOFN0cmluZ10p
OwotICAgIHVubGluayhbW3NlbGYgb3V0UGlwZVBhdGhdIFVURjhTdHJpbmddKTsKLSAgICB1bmxp
bmsoW1tzZWxmIGVycm9yUGlwZVBhdGhdIFVURjhTdHJpbmddKTsKLX0KLQotLSAodm9pZCkgcmVs
YXlTdHJlYW06KE5TSW5wdXRTdHJlYW0gKilzdHJlYW0KLXsKLSAgICB1aW50OF90IGJ5dGVzWzEw
MjRdOwotICAgIE5TSW50ZWdlciBieXRlc1JlYWQgPSBbc3RyZWFtIHJlYWQ6Ynl0ZXMgbWF4TGVu
Z3RoOjEwMjRdOwotICAgIE5TRGF0YSAqZGF0YSA9IFtOU0RhdGEgZGF0YVdpdGhCeXRlczpieXRl
cyBsZW5ndGg6Ynl0ZXNSZWFkXTsKLQotICAgIGlmIChzdHJlYW0gPT0gW3NlbGYgc3RhbmRhcmRP
dXRwdXRQaXBlXSkKLSAgICAgICAgW1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZFJlY2VpdmVTdGRv
dXREYXRhOmRhdGFdOwotICAgIGVsc2UKLSAgICAgICAgW1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRp
ZFJlY2VpdmVTdGRlcnJEYXRhOmRhdGFdOwotfQotCi0tICh2b2lkKXN0cmVhbTooTlNTdHJlYW0g
KilhU3RyZWFtIGhhbmRsZUV2ZW50OihOU1N0cmVhbUV2ZW50KWV2ZW50Q29kZQotewotICAgIHN3
aXRjaCAoZXZlbnRDb2RlKSB7Ci0gICAgY2FzZSBOU1N0cmVhbUV2ZW50Tm9uZToKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBOU1N0cmVhbUV2ZW50SGFzQnl0ZXNBdmFpbGFibGU6Ci0gICAgICAg
IFtzZWxmIHJlbGF5U3RyZWFtOihOU0lucHV0U3RyZWFtICopYVN0cmVhbV07Ci0gICAgY2FzZSBO
U1N0cmVhbUV2ZW50SGFzU3BhY2VBdmFpbGFibGU6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
TlNTdHJlYW1FdmVudE9wZW5Db21wbGV0ZWQ6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlNT
dHJlYW1FdmVudEVuZEVuY291bnRlcmVkOgotICAgICAgICBbW3NlbGYgcmVsYXlEZWxlZ2F0ZV0g
ZGlkQ3Jhc2hXaXRoTWVzc2FnZTpuaWxdOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5TU3Ry
ZWFtRXZlbnRFcnJvck9jY3VycmVkOgotICAgICAgICBbW3NlbGYgcmVsYXlEZWxlZ2F0ZV0gZGlk
Q3Jhc2hXaXRoTWVzc2FnZTpbW2FTdHJlYW0gc3RyZWFtRXJyb3JdIGRlc2NyaXB0aW9uXV07Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotQGVuZApJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJl
bGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0
VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5LmgJKHJldmlzaW9uIDIxMTk2MSkKKysr
IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheS5oCShub25leGlz
dGVudCkKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTFRSZWxheV9oCi0j
ZGVmaW5lIExUUmVsYXlfaAotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLQot
QHByb3RvY29sIExUUmVsYXlEZWxlZ2F0ZSA8TlNPYmplY3Q+Ci0tICh2b2lkKWRpZENvbm5lY3Q7
Ci0tICh2b2lkKWRpZERpc2Nvbm5lY3Q7Ci0tICh2b2lkKWRpZENyYXNoV2l0aE1lc3NhZ2U6KE5T
U3RyaW5nICopbWVzc2FnZTsKLS0gKHZvaWQpZGlkUmVjZWl2ZVN0ZG91dERhdGE6KE5TRGF0YSAq
KWRhdGE7Ci0tICh2b2lkKWRpZFJlY2VpdmVTdGRlcnJEYXRhOihOU0RhdGEgKilkYXRhOwotQGVu
ZAotCi1AcHJvdG9jb2wgTFRSZWxheSA8TlNPYmplY3QsIE5TU3RyZWFtRGVsZWdhdGU+Ci0tICh2
b2lkKXNldHVwOwotLSAodm9pZCl0ZWFyRG93bjsKLS0gKHZvaWQpY29ubmVjdDsKLS0gKHZvaWQp
ZGlzY29ubmVjdDsKLUBwcm9wZXJ0eSAod2VhaykgaWQ8TFRSZWxheURlbGVnYXRlPiByZWxheURl
bGVnYXRlOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU091dHB1dFN0cmVhbSAqb3V0
cHV0U3RyZWFtOwotQGVuZAotCi0jZW5kaWYKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9M
YXlvdXRUZXN0UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9M
YXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLmgJKHJldmlz
aW9uIDIxMTk2MSkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRS
ZWxheUNvbnRyb2xsZXIuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotI2lmbmRlZiBMVFJlbGF5Q29udHJvbGxlcl9oCi0jZGVmaW5lIExUUmVsYXlDb250cm9sbGVy
X2gKLQotI2ltcG9ydCAiTFRSZWxheS5oIgotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRp
b24uaD4KLQotQGNsYXNzIFNpbURldmljZTsKLQotQGludGVyZmFjZSBMVFJlbGF5Q29udHJvbGxl
ciA6IE5TT2JqZWN0IDxMVFJlbGF5RGVsZWdhdGU+Ci0tIChpZClpbml0V2l0aERldmljZTooU2lt
RGV2aWNlICopZGV2aWNlIHByb2R1Y3REaXI6KE5TU3RyaW5nICopcHJvZHVjdERpciBhcHBQYXRo
OihOU1N0cmluZyAqKWFwcFBhdGggZGV2aWNlVURJRDooTlNVVUlEICopdWRpZCBkdW1wVG9vbEFy
Z3VtZW50czooTlNBcnJheSAqKWFyZ3VtZW50czsKLS0gKHZvaWQpc3RhcnQ7Ci0tICh2b2lkKWZp
bmlzaDsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0
VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0
VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5tCShyZXZpc2lvbiAy
MTE5NjEpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlD
b250cm9sbGVyLm0JKG5vbmV4aXN0ZW50KQpAQCAtMSwyNzIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbXBvcnQgIkxUUmVsYXlDb250cm9sbGVyLmgiCi0KLSNpbXBvcnQgIkNvcmVTaW11bGF0b3JT
UEkuaCIKLSNpbXBvcnQgIkxUUGlwZVJlbGF5LmgiCi0jaW1wb3J0IDxBcHBLaXQvQXBwS2l0Lmg+
Ci0jaW1wb3J0IDxjcnRfZXh0ZXJucy5oPgotCi1AaW50ZXJmYWNlIExUUmVsYXlDb250cm9sbGVy
ICgpCi1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIGRpc3BhdGNoX3NvdXJjZV90IHN0YW5k
YXJkSW5wdXREaXNwYXRjaFNvdXJjZTsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNG
aWxlSGFuZGxlICpzdGFuZGFyZE91dHB1dDsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykg
TlNGaWxlSGFuZGxlICpzdGFuZGFyZEVycm9yOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25n
KSBOU1N0cmluZyAqaXBjSWRlbnRpZmllcjsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykg
TlNTdHJpbmcgKmFwcEJ1bmRsZUlkZW50aWZpZXI7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJv
bmcpIE5TU3RyaW5nICphcHBQYXRoOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU1VV
SUQgKmRldmljZVVESUQ7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TQXJyYXkgKmR1
bXBUb29sQXJndW1lbnRzOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU1N0cmluZyAq
cHJvZHVjdERpcjsKLUBwcm9wZXJ0eSAoc3Ryb25nKSBTaW1EZXZpY2UgKmRldmljZTsKLUBwcm9w
ZXJ0eSAoc3Ryb25nKSBpZDxMVFJlbGF5PiByZWxheTsKLUBwcm9wZXJ0eSBwaWRfdCBwaWQ7Ci1A
cHJvcGVydHkgKHN0cm9uZykgZGlzcGF0Y2hfc291cmNlX3QgYXBwRGlzcGF0Y2hTb3VyY2U7Ci1A
ZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBMVFJlbGF5Q29udHJvbGxlcgotCi0tIChpZClpbml0V2l0
aERldmljZTooU2ltRGV2aWNlICopZGV2aWNlIHByb2R1Y3REaXI6KE5TU3RyaW5nICopcHJvZHVj
dERpciBhcHBQYXRoOihOU1N0cmluZyAqKWFwcFBhdGggZGV2aWNlVURJRDooTlNVVUlEICopdWRp
ZCBkdW1wVG9vbEFyZ3VtZW50czooTlNBcnJheSAqKWFyZ3VtZW50cwotewotICAgIGlmICgoc2Vs
ZiA9IFtzdXBlciBpbml0XSkpIHsKLSAgICAgICAgX2RldmljZSA9IGRldmljZTsKLSAgICAgICAg
X3Byb2R1Y3REaXIgPSBwcm9kdWN0RGlyOwotICAgICAgICBfYXBwUGF0aCA9IGFwcFBhdGg7Ci0g
ICAgICAgIF9hcHBCdW5kbGVJZGVudGlmaWVyID0gW1tOU0J1bmRsZSBidW5kbGVXaXRoUGF0aDph
cHBQYXRoXSBidW5kbGVJZGVudGlmaWVyXTsKLSAgICAgICAgX2RldmljZVVESUQgPSB1ZGlkOwot
ICAgICAgICBfZHVtcFRvb2xBcmd1bWVudHMgPSBhcmd1bWVudHM7Ci0gICAgICAgIF9zdGFuZGFy
ZElucHV0RGlzcGF0Y2hTb3VyY2UgPSBkaXNwYXRjaF9zb3VyY2VfY3JlYXRlKERJU1BBVENIX1NP
VVJDRV9UWVBFX1JFQUQsIFNURElOX0ZJTEVOTywgMCwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUo
KSk7Ci0gICAgICAgIF9zdGFuZGFyZE91dHB1dCA9IFtOU0ZpbGVIYW5kbGUgZmlsZUhhbmRsZVdp
dGhTdGFuZGFyZE91dHB1dF07Ci0gICAgICAgIF9zdGFuZGFyZEVycm9yID0gW05TRmlsZUhhbmRs
ZSBmaWxlSGFuZGxlV2l0aFN0YW5kYXJkRXJyb3JdOwotCi0gICAgICAgIGRpc3BhdGNoX3NvdXJj
ZV9zZXRfZXZlbnRfaGFuZGxlcihfc3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNlLCBeewotICAg
ICAgICAgICAgdWludDhfdCBidWZmZXJbMTAyNF07Ci0gICAgICAgICAgICBzc2l6ZV90IGxlbiA9
IHJlYWQoU1RESU5fRklMRU5PLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKLSAgICAgICAgICAg
IGlmIChsZW4gPiAwKSB7Ci0gICAgICAgICAgICAgICAgQHRyeSB7Ci0gICAgICAgICAgICAgICAg
ICAgIFtbW3NlbGYgcmVsYXldIG91dHB1dFN0cmVhbV0gd3JpdGU6YnVmZmVyIG1heExlbmd0aDps
ZW5dOwotICAgICAgICAgICAgICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAqZSkgewotICAgICAg
ICAgICAgICAgICAgICAvLyBCcm9rZW4gcGlwZSAtIHRoZSBkdW1wIHRvb2wgY3Jhc2hlZC4gVGlt
ZSB0byBkaWUuCi0gICAgICAgICAgICAgICAgICAgIFtzZWxmIGRpZENyYXNoV2l0aE1lc3NhZ2U6
bmlsXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIC8vIEVPRiBSZWNlaXZlZCBvbiB0aGUgcmVsYXkncyBzdGFuZGFyZCBpbnB1dC4KLSAg
ICAgICAgICAgICAgICBbc2VsZiBmaW5pc2hdOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsK
LQotICAgICAgICBfcmVsYXkgPSBbW0xUUGlwZVJlbGF5IGFsbG9jXSBpbml0V2l0aFByZWZpeDpb
QCIvdG1wIiBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6c2VsZi5pcGNJZGVudGlmaWVy
XV07Ci0gICAgICAgIFtfcmVsYXkgc2V0UmVsYXlEZWxlZ2F0ZTpzZWxmXTsKLSAgICB9Ci0gICAg
cmV0dXJuIHNlbGY7Ci19Ci0KLS0gKE5TU3RyaW5nICopaXBjSWRlbnRpZmllcgotewotICAgIHJl
dHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVALSVAIiwgc2VsZi5hcHBCdW5kbGVJ
ZGVudGlmaWVyLCBzZWxmLmRldmljZVVESUQuVVVJRFN0cmluZ107Ci19Ci0KLS0gKE5TU3RyaW5n
ICopcHJvY2Vzc05hbWUKLXsKLSAgICByZXR1cm4gW3NlbGYuYXBwQnVuZGxlSWRlbnRpZmllciBj
b21wb25lbnRzU2VwYXJhdGVkQnlTdHJpbmc6QCIuIl0ubGFzdE9iamVjdDsKLX0KLQotLSAodm9p
ZClkaWRSZWNlaXZlU3Rkb3V0RGF0YTooTlNEYXRhICopZGF0YQotewotICAgIEB0cnkgewotICAg
ICAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRdIHdyaXRlRGF0YTpkYXRhXTsKLSAgICB9IEBjYXRj
aCAoTlNFeGNlcHRpb24gKmV4Y2VwdGlvbikgewotICAgICAgICAvLyBOU0ZpbGVIYW5kbGVPcGVy
YXRpb25FeGNlcHRpb24KLSAgICAgICAgLy8gQnJva2VuIHBpcGUgLSB0aGUgdGVzdCBoYXJuZXNz
IHN0b3BwZWQgbGlzdGVuaW5nIHRvIHVzLAotICAgICAgICAvLyBwcm9iYWJseSBiZWNhdXNlIHdl
IHRpbWVkIG91dCBvciBhIHJ1biB3YXMgY2FuY2VsZWQuCi0gICAgICAgIGV4aXQoRVhJVF9GQUlM
VVJFKTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpZGlkUmVjZWl2ZVN0ZGVyckRhdGE6KE5TRGF0YSAq
KWRhdGEKLXsKLSAgICBAdHJ5IHsKLSAgICAgICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JdIHdyaXRl
RGF0YTpkYXRhXTsKLSAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24gKmV4Y2VwdGlvbikgewotICAg
ICAgICAvLyBOU0ZpbGVIYW5kbGVPcGVyYXRpb25FeGNlcHRpb24KLSAgICAgICAgLy8gQnJva2Vu
IHBpcGUgLSB0aGUgdGVzdCBoYXJuZXNzIHN0b3BwZWQgbGlzdGVuaW5nIHRvIHVzLAotICAgICAg
ICAvLyBwcm9iYWJseSBiZWNhdXNlIHdlIHRpbWVkIG91dCBvciBhIHJ1biB3YXMgY2FuY2VsZWQu
Ci0gICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpZGlkRGlz
Y29ubmVjdAotewotICAgIGRpc3BhdGNoX3N1c3BlbmQoW3NlbGYgc3RhbmRhcmRJbnB1dERpc3Bh
dGNoU291cmNlXSk7Ci19Ci0KLS0gKHZvaWQpZGlkQ29ubmVjdAotewotICAgIGRpc3BhdGNoX3Jl
c3VtZShbc2VsZiBzdGFuZGFyZElucHV0RGlzcGF0Y2hTb3VyY2VdKTsKLX0KLQotLSAodm9pZClk
aWRDcmFzaFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2UKLXsKLSAgICBbW3NlbGYgcmVs
YXldIGRpc2Nvbm5lY3RdOwotICAgIE5TU3RyaW5nICpjcmFzaE1lc3NhZ2UgPSBbTlNTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpAIlxuI0NSQVNIRUQgLSAlQCAocGlkICVkKVxuIiwgW3NlbGYgcHJv
Y2Vzc05hbWVdLCBbc2VsZiBwaWRdXTsKLQotICAgIGlmIChtZXNzYWdlKQotICAgICAgICBjcmFz
aE1lc3NhZ2UgPSBbY3Jhc2hNZXNzYWdlIHN0cmluZ0J5QXBwZW5kaW5nRm9ybWF0OkAiJUBcbiIs
IG1lc3NhZ2VdOwotCi0gICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JdIHdyaXRlRGF0YTpbY3Jhc2hN
ZXNzYWdlIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXV07Ci0gICAgW1tz
ZWxmIHN0YW5kYXJkRXJyb3JdIGNsb3NlRmlsZV07Ci0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0
XSBjbG9zZUZpbGVdOwotICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLX0KLQotLSAodm9pZClpbnN0
YWxsQXBwCi17Ci0gICAgTlNEaWN0aW9uYXJ5ICppbnN0YWxsT3B0aW9ucyA9IEB7Ci0gICAgICAg
IChOU1N0cmluZyAqKWtDRkJ1bmRsZUlkZW50aWZpZXJLZXk6IHNlbGYuYXBwQnVuZGxlSWRlbnRp
ZmllciwKLSAgICB9OwotCi0gICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7Ci0gICAgQk9PTCBpbnN0
YWxsZWQgPSBbc2VsZi5kZXZpY2UgaW5zdGFsbEFwcGxpY2F0aW9uOltOU1VSTCBmaWxlVVJMV2l0
aFBhdGg6c2VsZi5hcHBQYXRoXSB3aXRoT3B0aW9uczppbnN0YWxsT3B0aW9ucyBlcnJvcjomZXJy
b3JdOwotICAgIGlmICghaW5zdGFsbGVkKSB7Ci0gICAgICAgIE5TTG9nKEAiQ291bGRuJ3QgaW5z
dGFsbCAlQDogJUAiLCBzZWxmLmFwcFBhdGgsIGVycm9yLmRlc2NyaXB0aW9uKTsKLSAgICAgICAg
ZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0KLX0KLQotLSAodm9pZClraWxsQXBwCi17Ci0gICAg
ZGlzcGF0Y2hfc291cmNlX3QgZGlzcGF0Y2ggPSBbc2VsZiBhcHBEaXNwYXRjaFNvdXJjZV07Ci0K
LSAgICBpZiAoZGlzcGF0Y2gpCi0gICAgICAgIGRpc3BhdGNoX3NvdXJjZV9jYW5jZWwoZGlzcGF0
Y2gpOwotCi0gICAgaWYgKFtzZWxmIHBpZF0gPiAxKSB7Ci0gICAgICAgIGtpbGwoc2VsZi5waWQs
IFNJR0tJTEwpOwotICAgICAgICBbc2VsZiBzZXRQaWQ6LTFdOwotICAgIH0KLSAgICBbc2VsZiBz
ZXRBcHBEaXNwYXRjaFNvdXJjZTpuaWxdOwotfQotCi0tIChOU0RpY3Rpb25hcnkgKilfZW52aXJv
bm1lbnRWYXJpYWJsZXMKLXsKLSAgICBzdGF0aWMgTlNEaWN0aW9uYXJ5ICplbnZpcm9ubWVudFZh
cmlhYmxlczsKLSAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2U7Ci0KLSAgICBkaXNwYXRj
aF9vbmNlKCZvbmNlLCBeewotICAgICAgICBOU1N0cmluZyAqcHJvZHVjdERpcmVjdG9yeSA9IFtz
ZWxmIHByb2R1Y3REaXJdOwotCi0gICAgICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmRpY3Rpb25h
cnkgPSBbQHsKLSAgICAgICAgICAgIEAiSVBDX0lERU5USUZJRVIiOiBzZWxmLmlwY0lkZW50aWZp
ZXIsCi0gICAgICAgICAgICBAIkRZTERfRlJBTUVXT1JLX1BBVEgiOiBwcm9kdWN0RGlyZWN0b3J5
LAotICAgICAgICAgICAgQCJfX1hQQ19EWUxEX0ZSQU1FV09SS19QQVRIIjogcHJvZHVjdERpcmVj
dG9yeSwKLSAgICAgICAgICAgIEAiRFlMRF9MSUJSQVJZX1BBVEgiOiBwcm9kdWN0RGlyZWN0b3J5
LAotICAgICAgICAgICAgQCJfX1hQQ19EWUxEX0xJQlJBUllfUEFUSCI6IHByb2R1Y3REaXJlY3Rv
cnksCi0gICAgICAgIH0gbXV0YWJsZUNvcHldOwotCi0gICAgICAgIGZvciAoTlNTdHJpbmcgKmtl
eU5hbWUgaW4gQFtAIkRZTERfSU5TRVJUX0xJQlJBUklFUyIsIEAiTWFsbG9jU3RhY2tMb2dnaW5n
IiwgQCJMT0NBTF9SRVNPVVJDRV9ST09UIiwgQCJEVU1QUkVOREVSVFJFRV9URU1QIl0pIHsKLSAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIHZhbHVlID0gZ2V0ZW52KFtrZXlOYW1lIFVURjhTdHJpbmdd
KTsKLSAgICAgICAgICAgIGlmICh2YWx1ZSAmJiBzdHJsZW4odmFsdWUpKSB7Ci0gICAgICAgICAg
ICAgICAgTlNTdHJpbmcgKm5zVmFsdWUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6
dmFsdWVdOwotICAgICAgICAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpuc1ZhbHVlIGZv
cktleTprZXlOYW1lXTsKLSAgICAgICAgICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6bnNW
YWx1ZSBmb3JLZXk6W0AiX19YUENfIiBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzprZXlOYW1lXV07
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKGNoYXIqKiBlbnZwID0g
Kl9OU0dldEVudmlyb24oKTsgKmVudnA7IGVudnArKykgewotICAgICAgICAgICAgY29uc3QgY2hh
ciogZW52ID0gKmVudnA7Ci0gICAgICAgICAgICBpZiAoIXN0cm5jbXAoIkpTQ18iLCBlbnYsIDQp
IHx8ICFzdHJuY21wKCJfX1hQQ19KU0NfIiwgZW52LCAxMCkpIHsKLSAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiBlcXVhbCA9IHN0cmNocihlbnYsICc9Jyk7Ci0gICAgICAgICAgICAgICAgaWYg
KCFlcXVhbCkgewotICAgICAgICAgICAgICAgICAgICBOU0xvZyhAIk1pc3NpbmcgJz0nIGluIGVu
diB2YXIgJyVzJyIsIGVudik7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4S2V5
TGVuZ3RoID0gMjU2OwotICAgICAgICAgICAgICAgIHNpemVfdCBrZXlMZW5ndGggPSBlcXVhbCAt
IGVudjsKLSAgICAgICAgICAgICAgICBpZiAoa2V5TGVuZ3RoID49IG1heEtleUxlbmd0aCkgewot
ICAgICAgICAgICAgICAgICAgICBOU0xvZyhAIkVudiB2YXIgJyVzJyBpcyB0b28gbG9uZyIsIGVu
dik7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGNoYXIga2V5W21heEtleUxlbmd0aF07Ci0gICAgICAgICAgICAgICAg
c3RybmNweShrZXksIGVudiwga2V5TGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBrZXlba2V5TGVu
Z3RoXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciogdmFsdWUgPSBlcXVhbCAr
IDE7Ci0KLSAgICAgICAgICAgICAgICBOU1N0cmluZyAqbnNLZXkgPSBbTlNTdHJpbmcgc3RyaW5n
V2l0aFVURjhTdHJpbmc6a2V5XTsKLSAgICAgICAgICAgICAgICBOU1N0cmluZyAqbnNWYWx1ZSA9
IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzp2YWx1ZV07Ci0gICAgICAgICAgICAgICAg
W2RpY3Rpb25hcnkgc2V0T2JqZWN0Om5zVmFsdWUgZm9yS2V5Om5zS2V5XTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIGVudmlyb25tZW50VmFyaWFibGVzID0gW2RpY3Rpb25h
cnkgY29weV07Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gZW52aXJvbm1lbnRWYXJpYWJsZXM7Ci19
Ci0KLS0gKHZvaWQpbGF1bmNoQXBwCi17Ci0gICAgTlNEaWN0aW9uYXJ5ICpsYXVuY2hPcHRpb25z
ID0gQHsKLSAgICAgICAga1NpbURldmljZUxhdW5jaEFwcGxpY2F0aW9uRW52aXJvbm1lbnQ6IFtz
ZWxmIF9lbnZpcm9ubWVudFZhcmlhYmxlc10sCi0gICAgICAgIGtTaW1EZXZpY2VMYXVuY2hBcHBs
aWNhdGlvbkFyZ3VtZW50czogW3NlbGYgZHVtcFRvb2xBcmd1bWVudHNdLAotICAgIH07Ci0KLSAg
ICBOU0Vycm9yICplcnJvcjsKLSAgICBwaWRfdCBwaWQgPSBbc2VsZi5kZXZpY2UgbGF1bmNoQXBw
bGljYXRpb25XaXRoSUQ6c2VsZi5hcHBCdW5kbGVJZGVudGlmaWVyIG9wdGlvbnM6bGF1bmNoT3B0
aW9ucyBlcnJvcjomZXJyb3JdOwotCi0gICAgaWYgKHBpZCA8IDApIHsKLSAgICAgICAgTlNMb2co
QCJDb3VsZG4ndCBsYXVuY2ggJUA6ICVAIiwgc2VsZi5hcHBCdW5kbGVJZGVudGlmaWVyLCBlcnJv
ci5kZXNjcmlwdGlvbik7Ci0gICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci0KLSAg
ICBbc2VsZiBzZXRQaWQ6cGlkXTsKLQotICAgIGRpc3BhdGNoX3F1ZXVlX3QgcXVldWUgPSBkaXNw
YXRjaF9nZXRfbWFpbl9xdWV1ZSgpOwotICAgIGRpc3BhdGNoX3NvdXJjZV90IHNpbXVsYXRvckFw
cEV4aXREaXNwYXRjaFNvdXJjZSA9IGRpc3BhdGNoX3NvdXJjZV9jcmVhdGUoRElTUEFUQ0hfU09V
UkNFX1RZUEVfUFJPQywgW3NlbGYgcGlkXSwgRElTUEFUQ0hfUFJPQ19FWElULCBxdWV1ZSk7Ci0g
ICAgW3NlbGYgc2V0QXBwRGlzcGF0Y2hTb3VyY2U6c2ltdWxhdG9yQXBwRXhpdERpc3BhdGNoU291
cmNlXTsKLSAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2V2ZW50X2hhbmRsZXIoc2ltdWxhdG9yQXBw
RXhpdERpc3BhdGNoU291cmNlLCBeewotICAgICAgICBkaXNwYXRjaF9zb3VyY2VfY2FuY2VsKHNp
bXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSk7Ci0gICAgICAgIFtzZWxmIGRpZENyYXNoV2l0
aE1lc3NhZ2U6bmlsXTsKLSAgICB9KTsKLSAgICBkaXNwYXRjaF9yZXN1bWUoc2ltdWxhdG9yQXBw
RXhpdERpc3BhdGNoU291cmNlKTsKLX0KLQotLSAodm9pZClzdGFydAotewotICAgIFtzZWxmIGlu
c3RhbGxBcHBdOwotICAgIFtbc2VsZiByZWxheV0gc2V0dXBdOwotICAgIFtzZWxmIGxhdW5jaEFw
cF07Ci0gICAgW1tzZWxmIHJlbGF5XSBjb25uZWN0XTsKLX0KLQotLSAodm9pZClmaW5pc2gKLXsK
LSAgICBbW3NlbGYgcmVsYXldIGRpc2Nvbm5lY3RdOwotICAgIFtzZWxmIGtpbGxBcHBdOwotICAg
IGV4aXQoRVhJVF9TVUNDRVNTKTsKLX0KLQotQGVuZApJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJl
bGF5L0xheW91dFRlc3RSZWxheS9tYWluLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVz
dFJlbGF5L0xheW91dFRlc3RSZWxheS9tYWluLm0JKHJldmlzaW9uIDIxMTk2MSkKKysrIFRvb2xz
L0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvbWFpbi5tCShub25leGlzdGVudCkKQEAg
LTEsMTMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJDb3JlU2ltdWxhdG9y
U1BJLmgiCi0jaW1wb3J0ICJMVFJlbGF5Q29udHJvbGxlci5oIgotI2ltcG9ydCA8Rm91bmRhdGlv
bi9Gb3VuZGF0aW9uLmg+Ci0KLXN0YXRpYyBMVFJlbGF5Q29udHJvbGxlciAqcmVsYXlDb250cm9s
bGVyOwotCi12b2lkIHVzYWdlKCkKLXsKLSAgICBOU1N0cmluZyAqaGVscFRleHQgPSBAIkxheW91
dFRlc3RSZWxheTogcnVuIGEgZHVtcCB0b29sIGluIHRoZSBzaW11bGF0b3IuIE5vdCBmb3IgZGly
ZWN0IGNvbnN1bXB0aW9uLlxuIgotICAgICAgICAiVXNhZ2U6IExheW91dFRlc3RSZWxheSBbLWhd
IFtvcHRpb25zXSAtLSBbZHVtcCB0b29sIGFyZ3VtZW50c11cbiIKLSAgICAgICAgIlJlcXVpcmVk
IG9wdGlvbnM6XG4iCi0gICAgICAgICIgICAgLXVkaWQgPGlkZW50aWZpZXI+ICAgICAgIFNpbXVs
YXRvciBkZXZpY2UgaWRlbnRpZmllclxuIgotICAgICAgICAiICAgIC1hcHAgPGFwcF9wYXRoPiAg
ICAgICAgICBQYXRoIHRvIHRoZSBidWlsdCBpT1MgLmFwcCBidW5kbGUgZGlyZWN0b3J5LlxuIgot
ICAgICAgICAiICAgIC1wcm9kdWN0RGlyIDxkaXI+ICAgICAgICAvcGF0aC90by9XZWJLaXRCdWls
ZC97Y29uZmlndXJhdGlvbn0te3Nob3J0IHBsYXRmb3JtfS5cbiI7Ci0KLSAgICBmcHJpbnRmKHN0
ZGVyciwgIiVzXG4iLCBbaGVscFRleHQgVVRGOFN0cmluZ10pOwotfQotCi1OU1N0cmluZyAqZ2V0
UmVxdWlyZWRTdHJpbmdBcmd1bWVudChOU1N0cmluZyAqcGFyYW1ldGVyKQotewotICAgIE5TVXNl
ckRlZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0
c107Ci0gICAgTlNTdHJpbmcgKmFyZ3VtZW50ID0gW2RlZmF1bHRzIHN0cmluZ0ZvcktleTpwYXJh
bWV0ZXJdOwotCi0gICAgaWYgKCFhcmd1bWVudCkgewotICAgICAgICBOU0xvZyhAIi0lQCBpcyBy
ZXF1aXJlZC4iLCBwYXJhbWV0ZXIpOwotICAgICAgICB1c2FnZSgpOwotICAgICAgICBleGl0KEVY
SVRfRkFJTFVSRSk7Ci0gICAgfQotICAgIHJldHVybiBhcmd1bWVudDsKLX0KLQotTlNBcnJheSAq
Z2V0RHVtcFRvb2xBcmd1bWVudHMoKQotewotICAgIE5TTXV0YWJsZUFycmF5ICpkdW1wVG9vbEFy
Z3VtZW50cyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOwotICAgIE5TQXJyYXkgKnBy
b2Nlc3NBcmdzID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBhcmd1bWVudHNdOwotICAg
IEJPT0wgYXBwZW5kaW5nID0gTk87Ci0gICAgZm9yIChOU1N0cmluZyAqYXJnIGluIHByb2Nlc3NB
cmdzKSB7Ci0gICAgICAgIGlmIChbYXJnIGlzRXF1YWxUb1N0cmluZzpAIi0tIl0pIHsKLSAgICAg
ICAgICAgIGFwcGVuZGluZyA9IFlFUzsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChhcHBlbmRpbmcpCi0gICAgICAgICAgICBbZHVtcFRvb2xBcmd1bWVudHMg
YWRkT2JqZWN0OmFyZ107Ci0gICAgfQotICAgIHJldHVybiBkdW1wVG9vbEFyZ3VtZW50czsKLX0K
LQotdm9pZCBmaW5pc2goKQotewotICAgIFtyZWxheUNvbnRyb2xsZXIgZmluaXNoXTsKLX0KLQot
dm9pZCByZWNlaXZlZFNpZ25hbChpbnQgc2lnbmFsKQotewotICAgIGV4aXQoRVhJVF9TVUNDRVNT
KTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiBhcmd2W10pCi17Ci0gICAg
QGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAgICAgIE5TQXJyYXkgKmhlbHBBcmd1bWVudHMgPSBAW0Ai
LWgiLCBAIi0taGVscCJdOwotICAgICAgICBmb3IgKE5TU3RyaW5nICpoZWxwQXJndW1lbnQgaW4g
aGVscEFyZ3VtZW50cykgewotICAgICAgICAgICAgaWYgKFtbW05TUHJvY2Vzc0luZm8gcHJvY2Vz
c0luZm9dIGFyZ3VtZW50c10gaW5kZXhPZk9iamVjdDpoZWxwQXJndW1lbnRdICE9IE5TTm90Rm91
bmQpIHsKLSAgICAgICAgICAgICAgICB1c2FnZSgpOwotICAgICAgICAgICAgICAgIGV4aXQoRVhJ
VF9GQUlMVVJFKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0jaWYgVVNFX1NJTV9TRVJW
SUNFX0NPTlRFWFQKLSAgICAgICAgTlNTdHJpbmcgKmRldmVsb3BlckRpcmVjdG9yeSA9IGdldFJl
cXVpcmVkU3RyaW5nQXJndW1lbnQoQCJkZXZlbG9wZXJEaXIiKTsKLSNlbmRpZgotICAgICAgICBO
U1VVSUQgKnVkaWQgPSBbW05TVVVJRCBhbGxvY10gaW5pdFdpdGhVVUlEU3RyaW5nOmdldFJlcXVp
cmVkU3RyaW5nQXJndW1lbnQoQCJ1ZGlkIildOwotICAgICAgICBOU1N0cmluZyAqYXBwUGF0aCA9
IGdldFJlcXVpcmVkU3RyaW5nQXJndW1lbnQoQCJhcHAiKTsKLSAgICAgICAgTlNTdHJpbmcgKnBy
b2R1Y3REaXJlY3RvcnkgPSBnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAicHJvZHVjdERpciIp
OwotICAgICAgICBOU0FycmF5ICpkdW1wVG9vbEFyZ3VtZW50cyA9IGdldER1bXBUb29sQXJndW1l
bnRzKCk7Ci0KLSNpZiBVU0VfU0lNX1NFUlZJQ0VfQ09OVEVYVAotICAgICAgICBOU0Vycm9yICpl
cnJvcjsKLSAgICAgICAgU2ltU2VydmljZUNvbnRleHQgKnNlcnZpY2VDb250ZXh0ID0gW1NpbVNl
cnZpY2VDb250ZXh0IHNoYXJlZFNlcnZpY2VDb250ZXh0Rm9yRGV2ZWxvcGVyRGlyOmRldmVsb3Bl
ckRpcmVjdG9yeSBlcnJvcjomZXJyb3JdOwotICAgICAgICBpZiAoIXNlcnZpY2VDb250ZXh0KSB7
Ci0gICAgICAgICAgICBOU0xvZyhAIkRldmljZSBjb250ZXh0IGNvdWxkbid0IGJlIGZvdW5kOiAl
QCIsIGVycm9yKTsKLSAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAgICAgfQot
ICAgICAgICBTaW1EZXZpY2VTZXQgKmRldmljZVNldCA9IFtzZXJ2aWNlQ29udGV4dCBkZWZhdWx0
RGV2aWNlU2V0V2l0aEVycm9yOm5pbF07Ci0gICAgICAgIGlmICghZGV2aWNlU2V0KSB7Ci0gICAg
ICAgICAgICBOU0xvZyhAIkRlZmF1bHQgZGV2aWNlIHNldCBjb3VsZG4ndCBiZSBmb3VuZDogJUAi
LCBlcnJvcik7Ci0gICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgU2ltRGV2aWNlICpkZXZpY2UgPSBbZGV2aWNlU2V0LmRldmljZXNCeVVESUQgb2JqZWN0
Rm9yS2V5OnVkaWRdOwotI2Vsc2UKLSAgICAgICAgU2ltRGV2aWNlICpkZXZpY2UgPSBbU2ltRGV2
aWNlU2V0LmRlZmF1bHRTZXQuZGV2aWNlc0J5VURJRCBvYmplY3RGb3JLZXk6dWRpZF07Ci0jZW5k
aWYKLSAgICAgICAgaWYgKCFkZXZpY2UpIHsKLSAgICAgICAgICAgIE5TTG9nKEAiRGV2aWNlICVA
IGNvdWxkbid0IGJlIGZvdW5kIiwgdWRpZCk7Ci0gICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVS
RSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZWxheUNvbnRyb2xsZXIgPSBbW0xUUmVsYXlDb250
cm9sbGVyIGFsbG9jXSBpbml0V2l0aERldmljZTpkZXZpY2UgcHJvZHVjdERpcjpwcm9kdWN0RGly
ZWN0b3J5IGFwcFBhdGg6YXBwUGF0aCBkZXZpY2VVRElEOnVkaWQgZHVtcFRvb2xBcmd1bWVudHM6
ZHVtcFRvb2xBcmd1bWVudHNdOwotICAgICAgICBbcmVsYXlDb250cm9sbGVyIHN0YXJ0XTsKLQot
ICAgICAgICBhdGV4aXQoZmluaXNoKTsKLSAgICAgICAgc2lnbmFsKFNJR0lOVCwgcmVjZWl2ZWRT
aWduYWwpOwotICAgICAgICBzaWduYWwoU0lHVEVSTSwgcmVjZWl2ZWRTaWduYWwpOwotCi0gICAg
ICAgIFtbTlNSdW5Mb29wIG1haW5SdW5Mb29wXSBydW5dOwotICAgIH0KLSAgICByZXR1cm4gMDsK
LX0KSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5
b3V0VGVzdFJlbGF5Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxMTk2MSkK
KysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkobm9uZXhpc3RlbnQpCkBAIC0xLDIwMiArMCwwIEBACi0vLyAhJCpVVEY4KiQh
Ci17Ci0JYXJjaGl2ZVZlcnNpb24gPSAxOwotCWNsYXNzZXMgPSB7Ci0JfTsKLQlvYmplY3RWZXJz
aW9uID0gNDY7Ci0Jb2JqZWN0cyA9IHsKLQotLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24g
Ki8KLQkJMkU4RDNFRjgxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOEQzRUY3MTk4ODFENDMwMDRGNkNDMiAv
KiBtYWluLm0gKi87IH07Ci0JCTJFOEQzRjAyMTk4ODFGRDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxh
eS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU4RDNG
MDExOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lm0gKi87IH07Ci0JCTJFOEQzRjA2MTk4
ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU4RDNGMDUxOTg4MjQwNjAwNEY2Q0MyIC8qIExU
UmVsYXlDb250cm9sbGVyLm0gKi87IH07Ci0vKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8K
LQotLyogQmVnaW4gUEJYQ29weUZpbGVzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0JCTJFOEQzRUYy
MTk4ODFENDMwMDRGNkNDMiAvKiBDb3B5RmlsZXMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhDb3B5Rmls
ZXNCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWRzdFBh
dGggPSAvdXNyL3NoYXJlL21hbi9tYW4xLzsKLQkJCWRzdFN1YmZvbGRlclNwZWMgPSAwOwotCQkJ
ZmlsZXMgPSAoCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDE7Ci0JCX07Ci0vKiBFbmQgUEJYQ29weUZpbGVzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0KLS8q
IEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwotCQkyRThEM0VGNDE5ODgxRDQzMDA0
RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4
cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5J
bmRleCA9IDA7IHBhdGggPSBMYXlvdXRUZXN0UmVsYXk7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9E
VUNUU19ESVI7IH07Ci0JCTJFOEQzRUY3MTk4ODFENDMwMDRGNkNDMiAvKiBtYWluLm0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
b2JqYzsgcGF0aCA9IG1haW4ubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNF
RkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IG5hbWUg
PSBEZWJ1Z1JlbGVhc2UueGNjb25maWc7IHBhdGggPSBDb25maWd1cmF0aW9ucy9EZWJ1Z1JlbGVh
c2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOEQzRUZGMTk4ODFF
MjUwMDRGNkNDMiAvKiBCYXNlLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgbmFtZSA9IEJhc2UueGNjb25maWc7
IHBhdGggPSBDb25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkyRThEM0YwMDE5ODgxRjI5MDA0RjZDQzIgLyogTFRSZWxheS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBMVFJlbGF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOEQzRjAx
MTk4ODFGRDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lm9iamM7IHBhdGggPSBMVFBpcGVSZWxheS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkyRThEM0YwMzE5ODgxRkUyMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTFRQaXBlUmVsYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDQx
OTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExUUmVsYXlDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTJFOEQzRjA1MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBMVFJlbGF5Q29udHJvbGxlci5t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDRTFGQkMxNTFCMjkwRTc5MDAwMTM2RjUg
LyogQ29yZVNpbXVsYXRvclNQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b3JlU2ltdWxhdG9yU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0vKiBFbmQgUEJY
RmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBo
YXNlIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjExOTg4MUQ0MzAwNEY2Q0MyIC8qIEZyYW1ld29ya3Mg
Ki8gPSB7Ci0JCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9u
TWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKLS8qIEVuZCBQQlhGcmFtZXdvcmtzQnVp
bGRQaGFzZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWEdyb3VwIHNlY3Rpb24gKi8KLQkJMkU4
RDNFRUIxOTg4MUQ0MzAwNEY2Q0MyID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJl
biA9ICgKLQkJCQkyRThEM0VGRjE5ODgxRTI1MDA0RjZDQzIgLyogQmFzZS54Y2NvbmZpZyAqLywK
LQkJCQkyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICov
LAotCQkJCTJFOEQzRUY2MTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8sCi0J
CQkJMkU4RDNFRjUxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2R1Y3RzICovLAotCQkJKTsKLQkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCTJFOEQzRUY1MTk4ODFENDMwMDRGNkNDMiAv
KiBQcm9kdWN0cyAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0J
CQkJMkU4RDNFRjQxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLywKLQkJCSk7
Ci0JCQluYW1lID0gUHJvZHVjdHM7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9Owot
CQkyRThEM0VGNjE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovID0gewotCQkJ
aXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQkyRThEM0VGNzE5ODgxRDQzMDA0
RjZDQzIgLyogbWFpbi5tICovLAotCQkJCUNFMUZCQzE1MUIyOTBFNzkwMDAxMzZGNSAvKiBDb3Jl
U2ltdWxhdG9yU1BJLmggKi8sCi0JCQkJMkU4RDNGMDAxOTg4MUYyOTAwNEY2Q0MyIC8qIExUUmVs
YXkuaCAqLywKLQkJCQkyRThEM0YwMTE5ODgxRkQwMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkubSAq
LywKLQkJCQkyRThEM0YwMzE5ODgxRkUyMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkuaCAqLywKLQkJ
CQkyRThEM0YwNDE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIuaCAqLywKLQkJ
CQkyRThEM0YwNTE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIubSAqLywKLQkJ
CSk7Ci0JCQlwYXRoID0gTGF5b3V0VGVzdFJlbGF5OwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKLQkJfTsKLS8qIEVuZCBQQlhHcm91cCBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWE5hdGl2
ZVRhcmdldCBzZWN0aW9uICovCi0JCTJFOEQzRUYzMTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRU
ZXN0UmVsYXkgKi8gPSB7Ci0JCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7Ci0JCQlidWlsZENvbmZp
Z3VyYXRpb25MaXN0ID0gMkU4RDNFRkIxOTg4MUQ0MzAwNEY2Q0MyIC8qIEJ1aWxkIGNvbmZpZ3Vy
YXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJMYXlvdXRUZXN0UmVsYXkiICovOwotCQkJ
YnVpbGRQaGFzZXMgPSAoCi0JCQkJMkU4RDNFRjAxOTg4MUQ0MzAwNEY2Q0MyIC8qIFNvdXJjZXMg
Ki8sCi0JCQkJMkU4RDNFRjExOTg4MUQ0MzAwNEY2Q0MyIC8qIEZyYW1ld29ya3MgKi8sCi0JCQkJ
MkU4RDNFRjIxOTg4MUQ0MzAwNEY2Q0MyIC8qIENvcHlGaWxlcyAqLywKLQkJCSk7Ci0JCQlidWls
ZFJ1bGVzID0gKAotCQkJKTsKLQkJCWRlcGVuZGVuY2llcyA9ICgKLQkJCSk7Ci0JCQluYW1lID0g
TGF5b3V0VGVzdFJlbGF5OwotCQkJcHJvZHVjdE5hbWUgPSBMYXlvdXRUZXN0UmVsYXk7Ci0JCQlw
cm9kdWN0UmVmZXJlbmNlID0gMkU4RDNFRjQxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RS
ZWxheSAqLzsKLQkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUudG9vbCI7
Ci0JCX07Ci0vKiBFbmQgUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJY
UHJvamVjdCBzZWN0aW9uICovCi0JCTJFOEQzRUVDMTk4ODFENDMwMDRGNkNDMiAvKiBQcm9qZWN0
IG9iamVjdCAqLyA9IHsKLQkJCWlzYSA9IFBCWFByb2plY3Q7Ci0JCQlhdHRyaWJ1dGVzID0gewot
CQkJCUxhc3RVcGdyYWRlQ2hlY2sgPSAwNjAwOwotCQkJCU9SR0FOSVpBVElPTk5BTUUgPSAiQXBw
bGUsIEluYy4iOwotCQkJCVRhcmdldEF0dHJpYnV0ZXMgPSB7Ci0JCQkJCTJFOEQzRUYzMTk4ODFE
NDMwMDRGNkNDMiA9IHsKLQkJCQkJCUNyZWF0ZWRPblRvb2xzVmVyc2lvbiA9IDYuMDsKLQkJCQkJ
fTsKLQkJCQl9OwotCQkJfTsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAyRThEM0VFRjE5
ODgxRDQzMDA0RjZDQzIgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0
ICJMYXlvdXRUZXN0UmVsYXkiICovOwotCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUg
My4yIjsKLQkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsKLQkJCWhhc1NjYW5uZWRGb3JF
bmNvZGluZ3MgPSAwOwotCQkJa25vd25SZWdpb25zID0gKAotCQkJCWVuLAotCQkJKTsKLQkJCW1h
aW5Hcm91cCA9IDJFOEQzRUVCMTk4ODFENDMwMDRGNkNDMjsKLQkJCXByb2R1Y3RSZWZHcm91cCA9
IDJFOEQzRUY1MTk4ODFENDMwMDRGNkNDMiAvKiBQcm9kdWN0cyAqLzsKLQkJCXByb2plY3REaXJQ
YXRoID0gIiI7Ci0JCQlwcm9qZWN0Um9vdCA9ICIiOwotCQkJdGFyZ2V0cyA9ICgKLQkJCQkyRThE
M0VGMzE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovLAotCQkJKTsKLQkJfTsK
LS8qIEVuZCBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYU291cmNlc0J1aWxk
UGhhc2Ugc2VjdGlvbiAqLwotCQkyRThEM0VGMDE5ODgxRDQzMDA0RjZDQzIgLyogU291cmNlcyAq
LyA9IHsKLQkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJCTJFOEQzRjA2MTk4ODI0MDYwMDRGNkND
MiAvKiBMVFJlbGF5Q29udHJvbGxlci5tIGluIFNvdXJjZXMgKi8sCi0JCQkJMkU4RDNFRjgxOTg4
MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSBpbiBTb3VyY2VzICovLAotCQkJCTJFOEQzRjAyMTk4ODFG
RDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5tIGluIFNvdXJjZXMgKi8sCi0JCQkpOwotCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07Ci0vKiBFbmQgUEJYU291
cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBYQ0J1aWxkQ29uZmlndXJhdGlv
biBzZWN0aW9uICovCi0JCTJFOEQzRUY5MTk4ODFENDMwMDRGNkNDMiAvKiBEZWJ1ZyAqLyA9IHsK
LQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZl
cmVuY2UgPSAyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmln
ICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCX07Ci0JCQluYW1lID0gRGVidWc7Ci0JCX07
Ci0JCTJFOEQzRUZBMTk4ODFENDMwMDRGNkNDMiAvKiBSZWxlYXNlICovID0gewotCQkJaXNhID0g
WENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDJF
OEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi87Ci0JCQli
dWlsZFNldHRpbmdzID0gewotCQkJfTsKLQkJCW5hbWUgPSBSZWxlYXNlOwotCQl9OwotCQkyRThE
M0VGQzE5ODgxRDQzMDA0RjZDQzIgLyogRGVidWcgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29u
ZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gMkU4RDNFRkUxOTg4
MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLzsKLQkJCWJ1aWxkU2V0dGlu
Z3MgPSB7Ci0JCQkJUFJPRFVDVF9OQU1FID0gIiQoVEFSR0VUX05BTUUpIjsKLQkJCX07Ci0JCQlu
YW1lID0gRGVidWc7Ci0JCX07Ci0JCTJFOEQzRUZEMTk4ODFENDMwMDRGNkNDMiAvKiBSZWxlYXNl
ICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJh
dGlvblJlZmVyZW5jZSA9IDJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2Uu
eGNjb25maWcgKi87Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJCVBST0RVQ1RfTkFNRSA9ICIk
KFRBUkdFVF9OQU1FKSI7Ci0JCQl9OwotCQkJbmFtZSA9IFJlbGVhc2U7Ci0JCX07Ci0vKiBFbmQg
WENCdWlsZENvbmZpZ3VyYXRpb24gc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBYQ0NvbmZpZ3VyYXRp
b25MaXN0IHNlY3Rpb24gKi8KLQkJMkU4RDNFRUYxOTg4MUQ0MzAwNEY2Q0MyIC8qIEJ1aWxkIGNv
bmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiTGF5b3V0VGVzdFJlbGF5IiAqLyA9IHsK
LQkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25zID0g
KAotCQkJCTJFOEQzRUY5MTk4ODFENDMwMDRGNkNDMiAvKiBEZWJ1ZyAqLywKLQkJCQkyRThEM0VG
QTE5ODgxRDQzMDA0RjZDQzIgLyogUmVsZWFzZSAqLywKLQkJCSk7Ci0JCQlkZWZhdWx0Q29uZmln
dXJhdGlvbklzVmlzaWJsZSA9IDA7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxl
YXNlOwotCQl9OwotCQkyRThEM0VGQjE5ODgxRDQzMDA0RjZDQzIgLyogQnVpbGQgY29uZmlndXJh
dGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIkxheW91dFRlc3RSZWxheSIgKi8gPSB7Ci0J
CQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwotCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgK
LQkJCQkyRThEM0VGQzE5ODgxRDQzMDA0RjZDQzIgLyogRGVidWcgKi8sCi0JCQkJMkU4RDNFRkQx
OTg4MUQ0MzAwNEY2Q0MyIC8qIFJlbGVhc2UgKi8sCi0JCQkpOwotCQkJZGVmYXVsdENvbmZpZ3Vy
YXRpb25Jc1Zpc2libGUgPSAwOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUmVsZWFz
ZTsKLQkJfTsKLS8qIEVuZCBYQ0NvbmZpZ3VyYXRpb25MaXN0IHNlY3Rpb24gKi8KLQl9OwotCXJv
b3RPYmplY3QgPSAyRThEM0VFQzE5ODgxRDQzMDA0RjZDQzIgLyogUHJvamVjdCBvYmplY3QgKi87
Ci19CkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5Lnhjb2RlcHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5Lnhj
b2RlcHJvagkocmV2aXNpb24gMjExOTYxKQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91
dFRlc3RSZWxheS54Y29kZXByb2oJKG5vbmV4aXN0ZW50KQoKUHJvcGVydHkgY2hhbmdlcyBvbjog
VG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2oKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpEZWxldGVkOiBzdm46aWdub3JlCiMjIC0xLDIgKzAsMCAjIwotcHJvamVjdC54Y3dvcmtzcGFj
ZQoteGN1c2VyZGF0YQpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L01ha2VmaWxlCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9NYWtlZmlsZQkocmV2aXNpb24gMjExOTYx
KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L01ha2VmaWxlCShub25leGlzdGVudCkKQEAgLTEs
NiArMCwwIEBACi1TQ1JJUFRTX1BBVEggPSAuLi9TY3JpcHRzCi0KLU9WRVJSSURFX0FSQ0hTID0g
ZGVmYXVsdAotT1ZFUlJJREVfU0RLUk9PVCA9IGRlZmF1bHQKLQotaW5jbHVkZSAuLi8uLi9NYWtl
ZmlsZS5zaGFyZWQKSW5kZXg6IFRvb2xzL01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL01h
a2VmaWxlCShyZXZpc2lvbiAyMTE5NjEpCisrKyBUb29scy9NYWtlZmlsZQkod29ya2luZyBjb3B5
KQpAQCAtNyw5ICs3LDYgQEAgaWZuZXEgKCwkKFNES1JPT1QpKQogCWlmbmVxICgsJChmaW5kc3Ry
aW5nIGlwaG9uZSwkKFNES1JPT1QpKSkKIAkJTU9EVUxFUyArPSBNb2JpbGVNaW5pQnJvd3Nlcgog
CWVuZGlmCi0JaWZlcSAoLCQoRE9fTk9UX0JVSUxEX0xBWU9VVF9URVNUX1JFTEFZKSkKLQkJTU9E
VUxFUyArPSBMYXlvdXRUZXN0UmVsYXkKLQllbmRpZgogZW5kaWYKIAogYWxsOgpJbmRleDogVG9v
bHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbHQtcHJvZHVjdC1hcmNoaXZlCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWx0LXByb2R1Y3QtYXJjaGl2ZQkocmV2aXNpb24g
MjExOTYxKQorKysgVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvYnVpbHQtcHJvZHVjdC1hcmNoaXZl
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsMjkgKzE2NSw4IEBAIGRlZiBkaXJDb250YWluc2R3byhk
aXJlY3RvcnkpOgogZGVmIGFyY2hpdmVCdWlsdFByb2R1Y3QoY29uZmlndXJhdGlvbiwgcGxhdGZv
cm0sIGZ1bGxQbGF0Zm9ybSk6CiAgICAgYXNzZXJ0IHBsYXRmb3JtIGluICgnbWFjJywgJ3dpbics
ICdndGsnLCAnZWZsJywgJ2lvcycpCiAKLSAgICBpZiBmdWxsUGxhdGZvcm0uc3RhcnRzd2l0aCgn
aW9zLXNpbXVsYXRvcicpOgotICAgICAgICAjIFdlIG5lZWQgdG8gaW5jbHVkZSBpbiB0aGUgYXJj
aGl2ZSB0aGUgTWFjIHRvb2wsIExheW91dFRlc3RSZWxheSwgdG8gcnVuIGxheW91dCB0ZXN0cyBp
biB0aGUgaU9TIHNpbXVsYXRvci4KLSAgICAgICAgY29tYmluZWREaXJlY3RvcnkgPSBvcy5wYXRo
LmpvaW4oX3RvcExldmVsQnVpbGREaXJlY3RvcnksICdjb21iaW5lZC1tYWMtYW5kLWlvcycpCi0g
ICAgICAgIHJlbW92ZURpcmVjdG9yeUlmRXhpc3RzKGNvbWJpbmVkRGlyZWN0b3J5KQotICAgICAg
ICBvcy5tYWtlZGlycyhjb21iaW5lZERpcmVjdG9yeSkKLQotICAgICAgICBpZiBzdWJwcm9jZXNz
LmNhbGwoWycvYmluL2NwJywgJy1wUicsIF9jb25maWd1cmF0aW9uQnVpbGREaXJlY3RvcnksIGNv
bWJpbmVkRGlyZWN0b3J5XSk6Ci0gICAgICAgICAgICByZXR1cm4gMQotCi0gICAgICAgIG1hY0J1
aWxkRGlyZWN0b3J5ID0gd2Via2l0QnVpbGREaXJlY3RvcnlGb3JDb25maWd1cmF0aW9uQW5kUGxh
dGZvcm0oY29uZmlndXJhdGlvbiwgJ21hYycpCi0gICAgICAgIGRlc3RpbmF0aW9uRGlyZWN0b3J5
ID0gb3MucGF0aC5qb2luKGNvbWJpbmVkRGlyZWN0b3J5LCBvcy5wYXRoLnJlbHBhdGgobWFjQnVp
bGREaXJlY3RvcnksIF90b3BMZXZlbEJ1aWxkRGlyZWN0b3J5KSkKLSAgICAgICAgb3MubWFrZWRp
cnMoZGVzdGluYXRpb25EaXJlY3RvcnkpCi0gICAgICAgIGZvciBmaWxlbmFtZSBpbiBbJ0xheW91
dFRlc3RSZWxheScsICdMYXlvdXRUZXN0UmVsYXkuZFNZTSddOgotICAgICAgICAgICAgc291cmNl
RmlsZSA9IG9zLnBhdGguam9pbihtYWNCdWlsZERpcmVjdG9yeSwgZmlsZW5hbWUpCi0gICAgICAg
ICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc291cmNlRmlsZSk6Ci0gICAgICAgICAgICAgICAg
Y29udGludWUKLSAgICAgICAgICAgIGlmIHN1YnByb2Nlc3MuY2FsbChbJy9iaW4vY3AnLCAnLXBS
Jywgc291cmNlRmlsZSwgZGVzdGluYXRpb25EaXJlY3RvcnldKToKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gMQotCi0gICAgICAgIGlmIGNyZWF0ZVppcChjb21iaW5lZERpcmVjdG9yeSwgY29uZmln
dXJhdGlvbik6Ci0gICAgICAgICAgICByZXR1cm4gMQotICAgICAgICBzaHV0aWwucm10cmVlKGNv
bWJpbmVkRGlyZWN0b3J5KQotICAgIGVsaWYgcGxhdGZvcm0gaW4gKCdtYWMnLCAnaW9zJyk6Cisg
ICAgIyBGSVhNRTogSW1hZ2VEaWZmIHNob3VsZCBiZSBidWlsdCB3aXRoIHRoZSBob3N0IFNESyA8
cmRhcjovL3Byb2JsZW0vMzAyNjYwMzg+CisgICAgaWYgcGxhdGZvcm0gaW4gKCdtYWMnLCAnaW9z
Jyk6CiAgICAgICAgIHJldHVybiBjcmVhdGVaaXAoX2NvbmZpZ3VyYXRpb25CdWlsZERpcmVjdG9y
eSwgY29uZmlndXJhdGlvbiwgZW1iZWRQYXJlbnREaXJlY3RvcnlOYW1lT25EYXJ3aW49VHJ1ZSkK
ICAgICBlbGlmIHBsYXRmb3JtID09ICd3aW4nOgogICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGRu
J3QgaGFyZGNvZGUgdGhlIGFzc3VtcHRpb24gb2YgYSAzMi1iaXQgYnVpbGQuIFNlZSA8aHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTcxNT4uCkluZGV4OiBUb29scy9C
dWlsZFNsYXZlU3VwcG9ydC9raWxsLW9sZC1wcm9jZXNzZXMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
QnVpbGRTbGF2ZVN1cHBvcnQva2lsbC1vbGQtcHJvY2Vzc2VzCShyZXZpc2lvbiAyMTE5NjEpCisr
KyBUb29scy9CdWlsZFNsYXZlU3VwcG9ydC9raWxsLW9sZC1wcm9jZXNzZXMJKHdvcmtpbmcgY29w
eSkKQEAgLTg5LDggKzg5LDcgQEAgZGVmIG1haW4oKToKICAgICAgICAgIldlYlByb2Nlc3MiLAog
ICAgICAgICAieGNvZGVidWlsZCIsCiAgICAgICAgICMgRklYTUU6IENvbnNpZGVyIG1vdmluZyBp
T1Mtc3BlY2lmaWMgdGFza3MgdG8gdGhlaXIgb3duIGxpc3QuCi0gICAgICAgICJTaW11bGF0b3Ii
LAotICAgICAgICAiTGF5b3V0VGVzdFJlbGF5IgorICAgICAgICAiU2ltdWxhdG9yIgogICAgIF0K
IAogICAgIHRhc2tUb0tpbGxVbml4ID0gWwpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0Nv
bmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVz
dFJlbGF5L0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcJKHJldmlzaW9uIDIxMTk2MSkKKysr
IFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9CYXNlLnhjY29uZmlnCShub25l
eGlzdGVudCkKQEAgLTEsNjggKzAsMCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
Ly8gYXJlIG1ldDoKLS8vIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotLy8g
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotLy8gICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLS8vIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0v
LyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLS8vIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0vLyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLS8vIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLS8vIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotLy8gUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotLy8gT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLSNpbmNsdWRlICIuLi8uLi8uLi8uLi9JbnRlcm5hbC9Db25maWd1cmF0aW9ucy9IYXZl
SW50ZXJuYWxTREsueGNjb25maWciCi0KLVVTRV9JTlRFUk5BTF9TREsgPSAkKFVTRV9JTlRFUk5B
TF9TREtfJChDT05GSUdVUkFUSU9OKSk7Ci1VU0VfSU5URVJOQUxfU0RLX1Byb2R1Y3Rpb24gPSBZ
RVM7Ci1VU0VfSU5URVJOQUxfU0RLX0RlYnVnID0gJChIQVZFX0lOVEVSTkFMX1NESyk7Ci1VU0Vf
SU5URVJOQUxfU0RLX1JlbGVhc2UgPSAkKEhBVkVfSU5URVJOQUxfU0RLKTsKLQotQ0xBTkdfQ1hY
X0xBTkdVQUdFX1NUQU5EQVJEID0gZ251KysweDsKLUNMQU5HX0VOQUJMRV9PQkpDX0FSQyA9IFlF
UzsKLUNMQU5HX1dBUk5fQ1hYMFhfRVhURU5TSU9OUyA9IE5POwotSEVBREVSX1NFQVJDSF9QQVRI
UyA9ICQoQlVJTFRfUFJPRFVDVFNfRElSKS91c3IvbG9jYWwvaW5jbHVkZSAkKFdFQkNPUkVfUFJJ
VkFURV9IRUFERVJTX0RJUikvRm9yd2FyZGluZ0hlYWRlcnMgJChTUkNST09UKS8uLi8uLi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaWN1ICQoTkVYVF9ST09UKS91c3IvbG9jYWwvaW5jbHVkZS9XZWJD
b3JlVGVzdFN1cHBvcnQ7Ci1HQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gJChERUJVR19E
RUZJTkVTKSBFTkFCTEVfREFTSEJPQVJEX1NVUFBPUlQ7Ci1ERUJVR19JTkZPUk1BVElPTl9GT1JN
QVQgPSBkd2FyZi13aXRoLWRzeW07Ci1QUkVCSU5ESU5HID0gTk8KLUdDQ19DX0xBTkdVQUdFX1NU
QU5EQVJEID0gZ251OTkKLUdDQ19FTkFCTEVfQ1BQX0VYQ0VQVElPTlMgPSBOTzsKLUdDQ19FTkFC
TEVfQ1BQX1JUVEkgPSBOTzsKLUdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFERVIgPSBZRVMKLUdD
Q19UUkVBVF9XQVJOSU5HU19BU19FUlJPUlMgPSBZRVMKLUdDQ19WRVJTSU9OID0gY29tLmFwcGxl
LmNvbXBpbGVycy5sbHZtLmNsYW5nLjFfMDsKLUdDQ19XQVJOX0FCT1VUX0RFUFJFQ0FURURfRlVO
Q1RJT05TID0gTk8KLUdDQ19XQVJOX1VOVVNFRF9GVU5DVElPTiA9IFlFUwotR0NDX1dBUk5fVU5V
U0VEX1ZBUklBQkxFID0gWUVTCi1HQ0NfV0FSTl82NF9UT18zMl9CSVRfQ09OVkVSU0lPTlthcmNo
PXg4Nl82NF0gPSBOTzsKLVdBUk5JTkdfQ0ZMQUdTID0gLVdhbGwgLVcgLVduby11bnVzZWQtcGFy
YW1ldGVyIC1XdW5kZWYKLQotREVCVUdfREVGSU5FU19kZWJ1ZyA9IDsKLURFQlVHX0RFRklORVNf
bm9ybWFsID0gTkRFQlVHOwotREVCVUdfREVGSU5FUyA9ICQoREVCVUdfREVGSU5FU18kKENVUlJF
TlRfVkFSSUFOVCkpOwotCi1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUiA9ICQoVEFSR0VU
X01BQ19PU19YX1ZFUlNJT05fTUFKT1IkKE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVDpzdWZmaXg6
aWRlbnRpZmllcikpOwotVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1JfMTAgPSAxMDEwMDA7
Ci1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUl8xMSA9IDEwMTEwMDsKLVRBUkdFVF9NQUNf
T1NfWF9WRVJTSU9OX01BSk9SXzEyID0gMTAxMjAwOwotVEFSR0VUX01BQ19PU19YX1ZFUlNJT05f
TUFKT1JfMTMgPSAxMDEzMDA7Ci0KLVNES1JPT1QgPSBtYWNvc3guaW50ZXJuYWw7Ci0KLVNVUFBP
UlRFRF9QTEFURk9STVMgPSBtYWNvc3g7Ci0KLVRPT0xDSEFJTlMgPSBkZWZhdWx0OwotCi1PVEhF
Ul9DRkxBR1MgPSAkKEFTQU5fT1RIRVJfQ0ZMQUdTKTsKLU9USEVSX0NQTFVTUExVU0ZMQUdTID0g
JChBU0FOX09USEVSX0NQTFVTUExVU0ZMQUdTKTsKLU9USEVSX0xERkxBR1MgPSAkKEFTQU5fT1RI
RVJfTERGTEFHUyk7CkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMv
RGVidWdSZWxlYXNlLnhjY29uZmlnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxh
eS9Db25maWd1cmF0aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25maWcJKHJldmlzaW9uIDIxMTk2MSkK
KysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25maWd1cmF0aW9ucy9EZWJ1Z1JlbGVhc2UueGNj
b25maWcJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0vLyBhcmUgbWV0OgotLy8gMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0vLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0vLyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLy8KLS8vIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotLy8g
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLS8vIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotLy8gUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLS8vIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotLy8gRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotLy8gUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0vLyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0vLyBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgIkJhc2UueGNjb25maWciCi0KLUFSQ0hTID0gJChB
UkNIU19TVEFOREFSRF82NF9CSVQpOwotCi1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUiA9
ICQoTUFDX09TX1hfVkVSU0lPTl9NQUpPUik7Ci0KLU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCA9
ICQoTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXyQoVEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFK
T1IpKQotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEwMTAwMCA9IDEwLjEwOwotTUFDT1NYX0RF
UExPWU1FTlRfVEFSR0VUXzEwMTEwMCA9IDEwLjExOwotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VU
XzEwMTIwMCA9IDEwLjEyOwotTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUXzEwMTMwMCA9IDEwLjEz
OwotCi1GUkFNRVdPUktfU0VBUkNIX1BBVEhTID0gJChERVZFTE9QRVJfRElSKS9MaWJyYXJ5L1By
aXZhdGVGcmFtZXdvcmtzOwotTERfUlVOUEFUSF9TRUFSQ0hfUEFUSFMgPSAkKERFVkVMT1BFUl9E
SVIpL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3M7Ci1PVEhFUl9MREZMQUdTID0gLWZyYW1ld29y
ayBDb3JlU2ltdWxhdG9yIC1mcmFtZXdvcmsgQXBwS2l0OwotCi1TREtST09UID0gJChTREtST09U
X21hY29zeF8kKFVTRV9JTlRFUk5BTF9TREspKTsKLVNES1JPT1RfbWFjb3N4XyA9IG1hY29zeDsK
LVNES1JPT1RfbWFjb3N4X1lFUyA9IG1hY29zeC5pbnRlcm5hbDsKSW5kZXg6IFRvb2xzL0xheW91
dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvQ29yZVNpbXVsYXRvclNQSS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvQ29yZVNpbXVsYXRvclNQ
SS5oCShyZXZpc2lvbiAyMTE5NjEpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVz
dFJlbGF5L0NvcmVTaW11bGF0b3JTUEkuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDU4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWYgX19oYXNfaW5jbHVkZSg8Q29yZVNpbXVsYXRvci9Db3Jl
U2ltdWxhdG9yLmg+KQotCi0vKiBGSVhNRTogUmVtb3ZlIHRoZSBiZWxvdyAjZGVmaW5lIG9uY2Ug
d2UgcmVxdWlyZSBYY29kZSA3LjMgd2l0aCBpT1MgOS4zIFNESyBvciBuZXdlci4gKi8KLSNkZWZp
bmUgX19jb3Jlc2ltX3VuYXZhaWxhYmxlX21zZyhtc2cpCi0jaW1wb3J0IDxDb3JlU2ltdWxhdG9y
L0NvcmVTaW11bGF0b3IuaD4KLQotLyogRklYTUU6IEFsd2F5cyB1c2UgU2ltU2VydmljZUNvbnRl
eHQgb25jZSB3ZSByZXF1aXJlIFhjb2RlIDcuMyB3aXRoIGlPUyA5LjMgU0RLIG9yIG5ld2VyLiAq
LwotI2RlZmluZSBVU0VfU0lNX1NFUlZJQ0VfQ09OVEVYVCBkZWZpbmVkKENPUkVTSU1fQVBJX01B
WF9BTExPV0VEKQotCi0jZWxzZQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4K
LQotI2RlZmluZSBVU0VfU0lNX1NFUlZJQ0VfQ09OVEVYVCAxCi0KLSNkZWZpbmUga1NpbURldmlj
ZUxhdW5jaEFwcGxpY2F0aW9uQXJndW1lbnRzIEAiYXJndW1lbnRzIgotI2RlZmluZSBrU2ltRGV2
aWNlTGF1bmNoQXBwbGljYXRpb25FbnZpcm9ubWVudCBAImVudmlyb25tZW50IgotCi1AaW50ZXJm
YWNlIFNpbURldmljZSA6IE5TT2JqZWN0Ci0tIChCT09MKWluc3RhbGxBcHBsaWNhdGlvbjooTlNV
UkwgKilpbnN0YWxsVVJMIHdpdGhPcHRpb25zOihOU0RpY3Rpb25hcnkgKilvcHRpb25zIGVycm9y
OihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci0tIChwaWRfdClsYXVuY2hBcHBs
aWNhdGlvbldpdGhJRDooTlNTdHJpbmcgKilidW5kbGVJRCBvcHRpb25zOihOU0RpY3Rpb25hcnkg
KilvcHRpb25zIGVycm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci1AZW5k
Ci0KLUBpbnRlcmZhY2UgU2ltRGV2aWNlU2V0IDogTlNPYmplY3QKLUBwcm9wZXJ0eSAocmVhZG9u
bHksIGNvcHkpIE5TRGljdGlvbmFyeSAqZGV2aWNlc0J5VURJRDsKLUBlbmQKLQotQGludGVyZmFj
ZSBTaW1TZXJ2aWNlQ29udGV4dCA6IE5TT2JqZWN0Ci0rKFNpbVNlcnZpY2VDb250ZXh0ICopc2hh
cmVkU2VydmljZUNvbnRleHRGb3JEZXZlbG9wZXJEaXI6KE5TU3RyaW5nICopZGV2ZWxvcGVyRGly
IGVycm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci0tKFNpbURldmljZVNl
dCAqKWRlZmF1bHREZXZpY2VTZXRXaXRoRXJyb3I6KE5TRXJyb3IgKiBfX2F1dG9yZWxlYXNpbmcg
KillcnJvcjsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5
b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVz
dFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5oCShyZXZpc2lvbiAyMTE5NjEpCisr
KyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5LmgJKG5v
bmV4aXN0ZW50KQpAQCAtMSwzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBMVFBpcGVS
ZWxheV9oCi0jZGVmaW5lIExUUGlwZVJlbGF5X2gKLQotI2ltcG9ydCAiTFRSZWxheS5oIgotCi1A
aW50ZXJmYWNlIExUUGlwZVJlbGF5IDogTlNPYmplY3QgPExUUmVsYXk+Ci1AcHJvcGVydHkgKHdl
YWspIGlkPExUUmVsYXlEZWxlZ2F0ZT4gcmVsYXlEZWxlZ2F0ZTsKLS0gKGlkKWluaXRXaXRoUHJl
Zml4OihOU1N0cmluZyAqKXByZWZpeDsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlv
dXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5tCShyZXZp
c2lvbiAyMTE5NjEpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xU
UGlwZVJlbGF5Lm0JKG5vbmV4aXN0ZW50KQpAQCAtMSwxNTggKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbXBvcnQgIkxUUGlwZVJlbGF5LmgiCi0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlv
bi5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLUBp
bnRlcmZhY2UgTFRQaXBlUmVsYXkgKCkKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNT
dHJpbmcgKmZpZm9QcmVmaXg7Ci1AcHJvcGVydHkgKHN0cm9uZykgTlNPdXRwdXRTdHJlYW0gKnN0
YW5kYXJkSW5wdXRQaXBlOwotQHByb3BlcnR5IChzdHJvbmcpIE5TSW5wdXRTdHJlYW0gKnN0YW5k
YXJkT3V0cHV0UGlwZTsKLUBwcm9wZXJ0eSAoc3Ryb25nKSBOU0lucHV0U3RyZWFtICpzdGFuZGFy
ZEVycm9yUGlwZTsKLQotLSAodm9pZCljcmVhdGVGSUZPczsKLS0gKHZvaWQpZGVzdHJveUZJRk9z
OwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gTFRQaXBlUmVsYXkKLQotLSAoTlNTdHJpbmcgKilp
blBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0
cmluZzpAIl9JTiJdOwotfQotCi0tIChOU1N0cmluZyAqKW91dFBpcGVQYXRoCi17Ci0gICAgcmV0
dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9PVVQiXTsKLX0KLQot
LSAoTlNTdHJpbmcgKillcnJvclBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBz
dHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9FUlJPUiJdOwotfQotCi0tIChOU091dHB1dFN0cmVh
bSAqKSBvdXRwdXRTdHJlYW0KLXsKLSAgICByZXR1cm4gX3N0YW5kYXJkSW5wdXRQaXBlOwotfQot
Ci0tIChpZClpbml0V2l0aFByZWZpeDooTlNTdHJpbmcgKilwcmVmaXgKLXsKLSAgICBpZiAoKHNl
bGYgPSBbc3VwZXIgaW5pdF0pKSB7Ci0gICAgICAgIF9maWZvUHJlZml4ID0gcHJlZml4OwotICAg
ICAgICBbc2VsZiBkZXN0cm95RklGT3NdOwotICAgIH0KLSAgICByZXR1cm4gc2VsZjsKLX0KLQot
LSAodm9pZClzZXR1cAotewotICAgIFtzZWxmIGRlc3Ryb3lGSUZPc107Ci0gICAgW3NlbGYgY3Jl
YXRlRklGT3NdOwotfQotCi0tICh2b2lkKXRlYXJEb3duCi17Ci0gICAgW3NlbGYgZGVzdHJveUZJ
Rk9zXTsKLX0KLQotLSh2b2lkKSBjb25uZWN0Ci17Ci0gICAgX3N0YW5kYXJkSW5wdXRQaXBlID0g
W05TT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbVRvRmlsZUF0UGF0aDpbc2VsZiBpblBpcGVQYXRo
XSBhcHBlbmQ6WUVTXTsKLSAgICBfc3RhbmRhcmRPdXRwdXRQaXBlID0gW05TSW5wdXRTdHJlYW0g
aW5wdXRTdHJlYW1XaXRoRmlsZUF0UGF0aDpbc2VsZiBvdXRQaXBlUGF0aF1dOwotICAgIF9zdGFu
ZGFyZEVycm9yUGlwZSA9IFtOU0lucHV0U3RyZWFtIGlucHV0U3RyZWFtV2l0aEZpbGVBdFBhdGg6
W3NlbGYgZXJyb3JQaXBlUGF0aF1dOwotCi0gICAgW1tzZWxmIHN0YW5kYXJkSW5wdXRQaXBlXSBz
ZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRQaXBlXSBzZXREZWxl
Z2F0ZTpzZWxmXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRFcnJvclBpcGVdIHNldERlbGVnYXRlOnNl
bGZdOwotCi0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gc2NoZWR1bGVJblJ1bkxvb3A6
W05TUnVuTG9vcCBtYWluUnVuTG9vcF0gZm9yTW9kZTpOU0RlZmF1bHRSdW5Mb29wTW9kZV07Ci0g
ICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JQaXBlXSBzY2hlZHVsZUluUnVuTG9vcDpbTlNSdW5Mb29w
IG1haW5SdW5Mb29wXSBmb3JNb2RlOk5TRGVmYXVsdFJ1bkxvb3BNb2RlXTsKLQotICAgIFtbc2Vs
ZiBzdGFuZGFyZElucHV0UGlwZV0gb3Blbl07Ci0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlw
ZV0gb3Blbl07Ci0gICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JQaXBlXSBvcGVuXTsKLQotICAgIFtb
c2VsZiByZWxheURlbGVnYXRlXSBkaWRDb25uZWN0XTsKLX0KLQotLSAodm9pZClkaXNjb25uZWN0
Ci17Ci0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gY2xvc2VdOwotICAgIFtbc2VsZiBz
dGFuZGFyZEVycm9yUGlwZV0gY2xvc2VdOwotICAgIFtbc2VsZiBzdGFuZGFyZElucHV0UGlwZV0g
Y2xvc2VdOwotICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWREaXNjb25uZWN0XTsKLX0KLQot
LSAodm9pZCljcmVhdGVGSUZPcwotewotICAgIG1rZmlmbyhbW3NlbGYgaW5QaXBlUGF0aF0gVVRG
OFN0cmluZ10sIDA2NjYpOwotICAgIG1rZmlmbyhbW3NlbGYgb3V0UGlwZVBhdGhdIFVURjhTdHJp
bmddLCAwNjY2KTsKLSAgICBta2ZpZm8oW1tzZWxmIGVycm9yUGlwZVBhdGhdIFVURjhTdHJpbmdd
LCAwNjY2KTsKLX0KLQotLSAodm9pZClkZXN0cm95RklGT3MKLXsKLSAgICB1bmxpbmsoW1tzZWxm
IGluUGlwZVBhdGhdIFVURjhTdHJpbmddKTsKLSAgICB1bmxpbmsoW1tzZWxmIG91dFBpcGVQYXRo
XSBVVEY4U3RyaW5nXSk7Ci0gICAgdW5saW5rKFtbc2VsZiBlcnJvclBpcGVQYXRoXSBVVEY4U3Ry
aW5nXSk7Ci19Ci0KLS0gKHZvaWQpIHJlbGF5U3RyZWFtOihOU0lucHV0U3RyZWFtICopc3RyZWFt
Ci17Ci0gICAgdWludDhfdCBieXRlc1sxMDI0XTsKLSAgICBOU0ludGVnZXIgYnl0ZXNSZWFkID0g
W3N0cmVhbSByZWFkOmJ5dGVzIG1heExlbmd0aDoxMDI0XTsKLSAgICBOU0RhdGEgKmRhdGEgPSBb
TlNEYXRhIGRhdGFXaXRoQnl0ZXM6Ynl0ZXMgbGVuZ3RoOmJ5dGVzUmVhZF07Ci0KLSAgICBpZiAo
c3RyZWFtID09IFtzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0pCi0gICAgICAgIFtbc2VsZiByZWxh
eURlbGVnYXRlXSBkaWRSZWNlaXZlU3Rkb3V0RGF0YTpkYXRhXTsKLSAgICBlbHNlCi0gICAgICAg
IFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRSZWNlaXZlU3RkZXJyRGF0YTpkYXRhXTsKLX0KLQot
LSAodm9pZClzdHJlYW06KE5TU3RyZWFtICopYVN0cmVhbSBoYW5kbGVFdmVudDooTlNTdHJlYW1F
dmVudClldmVudENvZGUKLXsKLSAgICBzd2l0Y2ggKGV2ZW50Q29kZSkgewotICAgIGNhc2UgTlNT
dHJlYW1FdmVudE5vbmU6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlNTdHJlYW1FdmVudEhh
c0J5dGVzQXZhaWxhYmxlOgotICAgICAgICBbc2VsZiByZWxheVN0cmVhbTooTlNJbnB1dFN0cmVh
bSAqKWFTdHJlYW1dOwotICAgIGNhc2UgTlNTdHJlYW1FdmVudEhhc1NwYWNlQXZhaWxhYmxlOgot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnRPcGVuQ29tcGxldGVkOgotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnRFbmRFbmNvdW50ZXJlZDoKLSAgICAg
ICAgW1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZENyYXNoV2l0aE1lc3NhZ2U6bmlsXTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBOU1N0cmVhbUV2ZW50RXJyb3JPY2N1cnJlZDoKLSAgICAgICAg
W1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZENyYXNoV2l0aE1lc3NhZ2U6W1thU3RyZWFtIHN0cmVh
bUVycm9yXSBkZXNjcmlwdGlvbl1dOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLUBlbmQK
SW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxheS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxh
eS5oCShyZXZpc2lvbiAyMTE5NjEpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVz
dFJlbGF5L0xUUmVsYXkuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIExUUmVsYXlfaAotI2RlZmluZSBMVFJlbGF5X2gKLQotI2ltcG9ydCA8Rm91
bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLUBwcm90b2NvbCBMVFJlbGF5RGVsZWdhdGUgPE5TT2Jq
ZWN0PgotLSAodm9pZClkaWRDb25uZWN0OwotLSAodm9pZClkaWREaXNjb25uZWN0OwotLSAodm9p
ZClkaWRDcmFzaFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2U7Ci0tICh2b2lkKWRpZFJl
Y2VpdmVTdGRvdXREYXRhOihOU0RhdGEgKilkYXRhOwotLSAodm9pZClkaWRSZWNlaXZlU3RkZXJy
RGF0YTooTlNEYXRhICopZGF0YTsKLUBlbmQKLQotQHByb3RvY29sIExUUmVsYXkgPE5TT2JqZWN0
LCBOU1N0cmVhbURlbGVnYXRlPgotLSAodm9pZClzZXR1cDsKLS0gKHZvaWQpdGVhckRvd247Ci0t
ICh2b2lkKWNvbm5lY3Q7Ci0tICh2b2lkKWRpc2Nvbm5lY3Q7Ci1AcHJvcGVydHkgKHdlYWspIGlk
PExUUmVsYXlEZWxlZ2F0ZT4gcmVsYXlEZWxlZ2F0ZTsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0
cm9uZykgTlNPdXRwdXRTdHJlYW0gKm91dHB1dFN0cmVhbTsKLUBlbmQKLQotI2VuZGlmCkluZGV4
OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9M
VFJlbGF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAyMTE5NjEpCisrKyBUb29scy9MYXlvdXRUZXN0
UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLmgJKG5vbmV4aXN0ZW50KQpA
QCAtMSw0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgTFRSZWxheUNvbnRyb2xsZXJfaAot
I2RlZmluZSBMVFJlbGF5Q29udHJvbGxlcl9oCi0KLSNpbXBvcnQgIkxUUmVsYXkuaCIKLQotI2lt
cG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLUBjbGFzcyBTaW1EZXZpY2U7Ci0KLUBp
bnRlcmZhY2UgTFRSZWxheUNvbnRyb2xsZXIgOiBOU09iamVjdCA8TFRSZWxheURlbGVnYXRlPgot
LSAoaWQpaW5pdFdpdGhEZXZpY2U6KFNpbURldmljZSAqKWRldmljZSBwcm9kdWN0RGlyOihOU1N0
cmluZyAqKXByb2R1Y3REaXIgYXBwUGF0aDooTlNTdHJpbmcgKilhcHBQYXRoIGRldmljZVVESUQ6
KE5TVVVJRCAqKXVkaWQgZHVtcFRvb2xBcmd1bWVudHM6KE5TQXJyYXkgKilhcmd1bWVudHM7Ci0t
ICh2b2lkKXN0YXJ0OwotLSAodm9pZClmaW5pc2g7Ci1AZW5kCi0KLSNlbmRpZgpJbmRleDogVG9v
bHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvTFRSZWxh
eUNvbnRyb2xsZXIubQkocmV2aXNpb24gMjExOTYxKQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5
L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5tCShub25leGlzdGVudCkKQEAgLTEs
MjcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJMVFJlbGF5Q29udHJvbGxlci5oIgot
Ci0jaW1wb3J0ICJDb3JlU2ltdWxhdG9yU1BJLmgiCi0jaW1wb3J0ICJMVFBpcGVSZWxheS5oIgot
I2ltcG9ydCA8QXBwS2l0L0FwcEtpdC5oPgotI2ltcG9ydCA8Y3J0X2V4dGVybnMuaD4KLQotQGlu
dGVyZmFjZSBMVFJlbGF5Q29udHJvbGxlciAoKQotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25n
KSBkaXNwYXRjaF9zb3VyY2VfdCBzdGFuZGFyZElucHV0RGlzcGF0Y2hTb3VyY2U7Ci1AcHJvcGVy
dHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TRmlsZUhhbmRsZSAqc3RhbmRhcmRPdXRwdXQ7Ci1AcHJv
cGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TRmlsZUhhbmRsZSAqc3RhbmRhcmRFcnJvcjsKLUBw
cm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKmlwY0lkZW50aWZpZXI7Ci1AcHJv
cGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TU3RyaW5nICphcHBCdW5kbGVJZGVudGlmaWVyOwot
QHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU1N0cmluZyAqYXBwUGF0aDsKLUBwcm9wZXJ0
eSAocmVhZG9ubHksIHN0cm9uZykgTlNVVUlEICpkZXZpY2VVRElEOwotQHByb3BlcnR5IChyZWFk
b25seSwgc3Ryb25nKSBOU0FycmF5ICpkdW1wVG9vbEFyZ3VtZW50czsKLUBwcm9wZXJ0eSAocmVh
ZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKnByb2R1Y3REaXI7Ci1AcHJvcGVydHkgKHN0cm9uZykg
U2ltRGV2aWNlICpkZXZpY2U7Ci1AcHJvcGVydHkgKHN0cm9uZykgaWQ8TFRSZWxheT4gcmVsYXk7
Ci1AcHJvcGVydHkgcGlkX3QgcGlkOwotQHByb3BlcnR5IChzdHJvbmcpIGRpc3BhdGNoX3NvdXJj
ZV90IGFwcERpc3BhdGNoU291cmNlOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gTFRSZWxheUNv
bnRyb2xsZXIKLQotLSAoaWQpaW5pdFdpdGhEZXZpY2U6KFNpbURldmljZSAqKWRldmljZSBwcm9k
dWN0RGlyOihOU1N0cmluZyAqKXByb2R1Y3REaXIgYXBwUGF0aDooTlNTdHJpbmcgKilhcHBQYXRo
IGRldmljZVVESUQ6KE5TVVVJRCAqKXVkaWQgZHVtcFRvb2xBcmd1bWVudHM6KE5TQXJyYXkgKilh
cmd1bWVudHMKLXsKLSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKSB7Ci0gICAgICAgIF9k
ZXZpY2UgPSBkZXZpY2U7Ci0gICAgICAgIF9wcm9kdWN0RGlyID0gcHJvZHVjdERpcjsKLSAgICAg
ICAgX2FwcFBhdGggPSBhcHBQYXRoOwotICAgICAgICBfYXBwQnVuZGxlSWRlbnRpZmllciA9IFtb
TlNCdW5kbGUgYnVuZGxlV2l0aFBhdGg6YXBwUGF0aF0gYnVuZGxlSWRlbnRpZmllcl07Ci0gICAg
ICAgIF9kZXZpY2VVRElEID0gdWRpZDsKLSAgICAgICAgX2R1bXBUb29sQXJndW1lbnRzID0gYXJn
dW1lbnRzOwotICAgICAgICBfc3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNlID0gZGlzcGF0Y2hf
c291cmNlX2NyZWF0ZShESVNQQVRDSF9TT1VSQ0VfVFlQRV9SRUFELCBTVERJTl9GSUxFTk8sIDAs
IGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCkpOwotICAgICAgICBfc3RhbmRhcmRPdXRwdXQgPSBb
TlNGaWxlSGFuZGxlIGZpbGVIYW5kbGVXaXRoU3RhbmRhcmRPdXRwdXRdOwotICAgICAgICBfc3Rh
bmRhcmRFcnJvciA9IFtOU0ZpbGVIYW5kbGUgZmlsZUhhbmRsZVdpdGhTdGFuZGFyZEVycm9yXTsK
LQotICAgICAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2V2ZW50X2hhbmRsZXIoX3N0YW5kYXJkSW5w
dXREaXNwYXRjaFNvdXJjZSwgXnsKLSAgICAgICAgICAgIHVpbnQ4X3QgYnVmZmVyWzEwMjRdOwot
ICAgICAgICAgICAgc3NpemVfdCBsZW4gPSByZWFkKFNURElOX0ZJTEVOTywgYnVmZmVyLCBzaXpl
b2YoYnVmZmVyKSk7Ci0gICAgICAgICAgICBpZiAobGVuID4gMCkgewotICAgICAgICAgICAgICAg
IEB0cnkgewotICAgICAgICAgICAgICAgICAgICBbW1tzZWxmIHJlbGF5XSBvdXRwdXRTdHJlYW1d
IHdyaXRlOmJ1ZmZlciBtYXhMZW5ndGg6bGVuXTsKLSAgICAgICAgICAgICAgICB9IEBjYXRjaCAo
TlNFeGNlcHRpb24gKmUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQnJva2VuIHBpcGUgLSB0
aGUgZHVtcCB0b29sIGNyYXNoZWQuIFRpbWUgdG8gZGllLgotICAgICAgICAgICAgICAgICAgICBb
c2VsZiBkaWRDcmFzaFdpdGhNZXNzYWdlOm5pbF07Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBFT0YgUmVjZWl2ZWQgb24gdGhlIHJl
bGF5J3Mgc3RhbmRhcmQgaW5wdXQuCi0gICAgICAgICAgICAgICAgW3NlbGYgZmluaXNoXTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgX3JlbGF5ID0gW1tMVFBpcGVSZWxh
eSBhbGxvY10gaW5pdFdpdGhQcmVmaXg6W0AiL3RtcCIgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29t
cG9uZW50OnNlbGYuaXBjSWRlbnRpZmllcl1dOwotICAgICAgICBbX3JlbGF5IHNldFJlbGF5RGVs
ZWdhdGU6c2VsZl07Ci0gICAgfQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChOU1N0cmluZyAq
KWlwY0lkZW50aWZpZXIKLXsKLSAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6
QCIlQC0lQCIsIHNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciwgc2VsZi5kZXZpY2VVRElELlVVSURT
dHJpbmddOwotfQotCi0tIChOU1N0cmluZyAqKXByb2Nlc3NOYW1lCi17Ci0gICAgcmV0dXJuIFtz
ZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIgY29tcG9uZW50c1NlcGFyYXRlZEJ5U3RyaW5nOkAiLiJd
Lmxhc3RPYmplY3Q7Ci19Ci0KLS0gKHZvaWQpZGlkUmVjZWl2ZVN0ZG91dERhdGE6KE5TRGF0YSAq
KWRhdGEKLXsKLSAgICBAdHJ5IHsKLSAgICAgICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0XSB3cml0
ZURhdGE6ZGF0YV07Ci0gICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRpb24pIHsKLSAg
ICAgICAgLy8gTlNGaWxlSGFuZGxlT3BlcmF0aW9uRXhjZXB0aW9uCi0gICAgICAgIC8vIEJyb2tl
biBwaXBlIC0gdGhlIHRlc3QgaGFybmVzcyBzdG9wcGVkIGxpc3RlbmluZyB0byB1cywKLSAgICAg
ICAgLy8gcHJvYmFibHkgYmVjYXVzZSB3ZSB0aW1lZCBvdXQgb3IgYSBydW4gd2FzIGNhbmNlbGVk
LgotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotfQotCi0tICh2b2lkKWRpZFJl
Y2VpdmVTdGRlcnJEYXRhOihOU0RhdGEgKilkYXRhCi17Ci0gICAgQHRyeSB7Ci0gICAgICAgIFtb
c2VsZiBzdGFuZGFyZEVycm9yXSB3cml0ZURhdGE6ZGF0YV07Ci0gICAgfSBAY2F0Y2ggKE5TRXhj
ZXB0aW9uICpleGNlcHRpb24pIHsKLSAgICAgICAgLy8gTlNGaWxlSGFuZGxlT3BlcmF0aW9uRXhj
ZXB0aW9uCi0gICAgICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhlIHRlc3QgaGFybmVzcyBzdG9wcGVk
IGxpc3RlbmluZyB0byB1cywKLSAgICAgICAgLy8gcHJvYmFibHkgYmVjYXVzZSB3ZSB0aW1lZCBv
dXQgb3IgYSBydW4gd2FzIGNhbmNlbGVkLgotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0g
ICAgfQotfQotCi0tICh2b2lkKWRpZERpc2Nvbm5lY3QKLXsKLSAgICBkaXNwYXRjaF9zdXNwZW5k
KFtzZWxmIHN0YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJjZV0pOwotfQotCi0tICh2b2lkKWRpZENv
bm5lY3QKLXsKLSAgICBkaXNwYXRjaF9yZXN1bWUoW3NlbGYgc3RhbmRhcmRJbnB1dERpc3BhdGNo
U291cmNlXSk7Ci19Ci0KLS0gKHZvaWQpZGlkQ3Jhc2hXaXRoTWVzc2FnZTooTlNTdHJpbmcgKilt
ZXNzYWdlCi17Ci0gICAgW1tzZWxmIHJlbGF5XSBkaXNjb25uZWN0XTsKLSAgICBOU1N0cmluZyAq
Y3Jhc2hNZXNzYWdlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJcbiNDUkFTSEVEIC0g
JUAgKHBpZCAlZClcbiIsIFtzZWxmIHByb2Nlc3NOYW1lXSwgW3NlbGYgcGlkXV07Ci0KLSAgICBp
ZiAobWVzc2FnZSkKLSAgICAgICAgY3Jhc2hNZXNzYWdlID0gW2NyYXNoTWVzc2FnZSBzdHJpbmdC
eUFwcGVuZGluZ0Zvcm1hdDpAIiVAXG4iLCBtZXNzYWdlXTsKLQotICAgIFtbc2VsZiBzdGFuZGFy
ZEVycm9yXSB3cml0ZURhdGE6W2NyYXNoTWVzc2FnZSBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhT
dHJpbmdFbmNvZGluZ11dOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSBjbG9zZUZpbGVdOwot
ICAgIFtbc2VsZiBzdGFuZGFyZE91dHB1dF0gY2xvc2VGaWxlXTsKLSAgICBleGl0KEVYSVRfRkFJ
TFVSRSk7Ci19Ci0KLS0gKHZvaWQpaW5zdGFsbEFwcAotewotICAgIE5TRGljdGlvbmFyeSAqaW5z
dGFsbE9wdGlvbnMgPSBAewotICAgICAgICAoTlNTdHJpbmcgKilrQ0ZCdW5kbGVJZGVudGlmaWVy
S2V5OiBzZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIsCi0gICAgfTsKLQotICAgIE5TRXJyb3IgKmVy
cm9yID0gbmlsOwotICAgIEJPT0wgaW5zdGFsbGVkID0gW3NlbGYuZGV2aWNlIGluc3RhbGxBcHBs
aWNhdGlvbjpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnNlbGYuYXBwUGF0aF0gd2l0aE9wdGlvbnM6
aW5zdGFsbE9wdGlvbnMgZXJyb3I6JmVycm9yXTsKLSAgICBpZiAoIWluc3RhbGxlZCkgewotICAg
ICAgICBOU0xvZyhAIkNvdWxkbid0IGluc3RhbGwgJUA6ICVAIiwgc2VsZi5hcHBQYXRoLCBlcnJv
ci5kZXNjcmlwdGlvbik7Ci0gICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci19Ci0K
LS0gKHZvaWQpa2lsbEFwcAotewotICAgIGRpc3BhdGNoX3NvdXJjZV90IGRpc3BhdGNoID0gW3Nl
bGYgYXBwRGlzcGF0Y2hTb3VyY2VdOwotCi0gICAgaWYgKGRpc3BhdGNoKQotICAgICAgICBkaXNw
YXRjaF9zb3VyY2VfY2FuY2VsKGRpc3BhdGNoKTsKLQotICAgIGlmIChbc2VsZiBwaWRdID4gMSkg
ewotICAgICAgICBraWxsKHNlbGYucGlkLCBTSUdLSUxMKTsKLSAgICAgICAgW3NlbGYgc2V0UGlk
Oi0xXTsKLSAgICB9Ci0gICAgW3NlbGYgc2V0QXBwRGlzcGF0Y2hTb3VyY2U6bmlsXTsKLX0KLQot
LSAoTlNEaWN0aW9uYXJ5ICopX2Vudmlyb25tZW50VmFyaWFibGVzCi17Ci0gICAgc3RhdGljIE5T
RGljdGlvbmFyeSAqZW52aXJvbm1lbnRWYXJpYWJsZXM7Ci0gICAgc3RhdGljIGRpc3BhdGNoX29u
Y2VfdCBvbmNlOwotCi0gICAgZGlzcGF0Y2hfb25jZSgmb25jZSwgXnsKLSAgICAgICAgTlNTdHJp
bmcgKnByb2R1Y3REaXJlY3RvcnkgPSBbc2VsZiBwcm9kdWN0RGlyXTsKLQotICAgICAgICBOU011
dGFibGVEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gW0B7Ci0gICAgICAgICAgICBAIklQQ19JREVO
VElGSUVSIjogc2VsZi5pcGNJZGVudGlmaWVyLAotICAgICAgICAgICAgQCJEWUxEX0ZSQU1FV09S
S19QQVRIIjogcHJvZHVjdERpcmVjdG9yeSwKLSAgICAgICAgICAgIEAiX19YUENfRFlMRF9GUkFN
RVdPUktfUEFUSCI6IHByb2R1Y3REaXJlY3RvcnksCi0gICAgICAgICAgICBAIkRZTERfTElCUkFS
WV9QQVRIIjogcHJvZHVjdERpcmVjdG9yeSwKLSAgICAgICAgICAgIEAiX19YUENfRFlMRF9MSUJS
QVJZX1BBVEgiOiBwcm9kdWN0RGlyZWN0b3J5LAotICAgICAgICB9IG11dGFibGVDb3B5XTsKLQot
ICAgICAgICBmb3IgKE5TU3RyaW5nICprZXlOYW1lIGluIEBbQCJEWUxEX0lOU0VSVF9MSUJSQVJJ
RVMiLCBAIk1hbGxvY1N0YWNrTG9nZ2luZyIsIEAiTE9DQUxfUkVTT1VSQ0VfUk9PVCIsIEAiRFVN
UFJFTkRFUlRSRUVfVEVNUCJdKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiB2YWx1ZSA9IGdl
dGVudihba2V5TmFtZSBVVEY4U3RyaW5nXSk7Ci0gICAgICAgICAgICBpZiAodmFsdWUgJiYgc3Ry
bGVuKHZhbHVlKSkgewotICAgICAgICAgICAgICAgIE5TU3RyaW5nICpuc1ZhbHVlID0gW05TU3Ry
aW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnZhbHVlXTsKLSAgICAgICAgICAgICAgICBbZGljdGlv
bmFyeSBzZXRPYmplY3Q6bnNWYWx1ZSBmb3JLZXk6a2V5TmFtZV07Ci0gICAgICAgICAgICAgICAg
W2RpY3Rpb25hcnkgc2V0T2JqZWN0Om5zVmFsdWUgZm9yS2V5OltAIl9fWFBDXyIgc3RyaW5nQnlB
cHBlbmRpbmdTdHJpbmc6a2V5TmFtZV1dOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgZm9yIChjaGFyKiogZW52cCA9ICpfTlNHZXRFbnZpcm9uKCk7ICplbnZwOyBlbnZwKysp
IHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVudiA9ICplbnZwOwotICAgICAgICAgICAgaWYg
KCFzdHJuY21wKCJKU0NfIiwgZW52LCA0KSB8fCAhc3RybmNtcCgiX19YUENfSlNDXyIsIGVudiwg
MTApKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXF1YWwgPSBzdHJjaHIoZW52LCAn
PScpOwotICAgICAgICAgICAgICAgIGlmICghZXF1YWwpIHsKLSAgICAgICAgICAgICAgICAgICAg
TlNMb2coQCJNaXNzaW5nICc9JyBpbiBlbnYgdmFyICclcyciLCBlbnYpOwotICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IG1heEtleUxlbmd0aCA9IDI1NjsKLSAgICAgICAgICAgICAgICBz
aXplX3Qga2V5TGVuZ3RoID0gZXF1YWwgLSBlbnY7Ci0gICAgICAgICAgICAgICAgaWYgKGtleUxl
bmd0aCA+PSBtYXhLZXlMZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgTlNMb2coQCJFbnYg
dmFyICclcycgaXMgdG9vIGxvbmciLCBlbnYpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjaGFyIGtleVttYXhLZXlM
ZW5ndGhdOwotICAgICAgICAgICAgICAgIHN0cm5jcHkoa2V5LCBlbnYsIGtleUxlbmd0aCk7Ci0g
ICAgICAgICAgICAgICAga2V5W2tleUxlbmd0aF0gPSAnXDAnOwotICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIHZhbHVlID0gZXF1YWwgKyAxOwotCi0gICAgICAgICAgICAgICAgTlNTdHJpbmcg
Km5zS2V5ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmtleV07Ci0gICAgICAgICAg
ICAgICAgTlNTdHJpbmcgKm5zVmFsdWUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6
dmFsdWVdOwotICAgICAgICAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVjdDpuc1ZhbHVlIGZv
cktleTpuc0tleV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBlbnZpcm9u
bWVudFZhcmlhYmxlcyA9IFtkaWN0aW9uYXJ5IGNvcHldOwotICAgIH0pOwotCi0gICAgcmV0dXJu
IGVudmlyb25tZW50VmFyaWFibGVzOwotfQotCi0tICh2b2lkKWxhdW5jaEFwcAotewotICAgIE5T
RGljdGlvbmFyeSAqbGF1bmNoT3B0aW9ucyA9IEB7Ci0gICAgICAgIGtTaW1EZXZpY2VMYXVuY2hB
cHBsaWNhdGlvbkVudmlyb25tZW50OiBbc2VsZiBfZW52aXJvbm1lbnRWYXJpYWJsZXNdLAotICAg
ICAgICBrU2ltRGV2aWNlTGF1bmNoQXBwbGljYXRpb25Bcmd1bWVudHM6IFtzZWxmIGR1bXBUb29s
QXJndW1lbnRzXSwKLSAgICB9OwotCi0gICAgTlNFcnJvciAqZXJyb3I7Ci0gICAgcGlkX3QgcGlk
ID0gW3NlbGYuZGV2aWNlIGxhdW5jaEFwcGxpY2F0aW9uV2l0aElEOnNlbGYuYXBwQnVuZGxlSWRl
bnRpZmllciBvcHRpb25zOmxhdW5jaE9wdGlvbnMgZXJyb3I6JmVycm9yXTsKLQotICAgIGlmIChw
aWQgPCAwKSB7Ci0gICAgICAgIE5TTG9nKEAiQ291bGRuJ3QgbGF1bmNoICVAOiAlQCIsIHNlbGYu
YXBwQnVuZGxlSWRlbnRpZmllciwgZXJyb3IuZGVzY3JpcHRpb24pOwotICAgICAgICBleGl0KEVY
SVRfRkFJTFVSRSk7Ci0gICAgfQotCi0gICAgW3NlbGYgc2V0UGlkOnBpZF07Ci0KLSAgICBkaXNw
YXRjaF9xdWV1ZV90IHF1ZXVlID0gZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKTsKLSAgICBkaXNw
YXRjaF9zb3VyY2VfdCBzaW11bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3VyY2UgPSBkaXNwYXRjaF9z
b3VyY2VfY3JlYXRlKERJU1BBVENIX1NPVVJDRV9UWVBFX1BST0MsIFtzZWxmIHBpZF0sIERJU1BB
VENIX1BST0NfRVhJVCwgcXVldWUpOwotICAgIFtzZWxmIHNldEFwcERpc3BhdGNoU291cmNlOnNp
bXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZV07Ci0gICAgZGlzcGF0Y2hfc291cmNlX3NldF9l
dmVudF9oYW5kbGVyKHNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSwgXnsKLSAgICAgICAg
ZGlzcGF0Y2hfc291cmNlX2NhbmNlbChzaW11bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3VyY2UpOwot
ICAgICAgICBbc2VsZiBkaWRDcmFzaFdpdGhNZXNzYWdlOm5pbF07Ci0gICAgfSk7Ci0gICAgZGlz
cGF0Y2hfcmVzdW1lKHNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSk7Ci19Ci0KLS0gKHZv
aWQpc3RhcnQKLXsKLSAgICBbc2VsZiBpbnN0YWxsQXBwXTsKLSAgICBbW3NlbGYgcmVsYXldIHNl
dHVwXTsKLSAgICBbc2VsZiBsYXVuY2hBcHBdOwotICAgIFtbc2VsZiByZWxheV0gY29ubmVjdF07
Ci19Ci0KLS0gKHZvaWQpZmluaXNoCi17Ci0gICAgW1tzZWxmIHJlbGF5XSBkaXNjb25uZWN0XTsK
LSAgICBbc2VsZiBraWxsQXBwXTsKLSAgICBleGl0KEVYSVRfU1VDQ0VTUyk7Ci19Ci0KLUBlbmQK
SW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvbWFpbi5tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvbWFpbi5tCShy
ZXZpc2lvbiAyMTE5NjEpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5
L21haW4ubQkobm9uZXhpc3RlbnQpCkBAIC0xLDEzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2ltcG9ydCAiQ29yZVNpbXVsYXRvclNQSS5oIgotI2ltcG9ydCAiTFRSZWxheUNvbnRyb2xs
ZXIuaCIKLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi1zdGF0aWMgTFRSZWxh
eUNvbnRyb2xsZXIgKnJlbGF5Q29udHJvbGxlcjsKLQotdm9pZCB1c2FnZSgpCi17Ci0gICAgTlNT
dHJpbmcgKmhlbHBUZXh0ID0gQCJMYXlvdXRUZXN0UmVsYXk6IHJ1biBhIGR1bXAgdG9vbCBpbiB0
aGUgc2ltdWxhdG9yLiBOb3QgZm9yIGRpcmVjdCBjb25zdW1wdGlvbi5cbiIKLSAgICAgICAgIlVz
YWdlOiBMYXlvdXRUZXN0UmVsYXkgWy1oXSBbb3B0aW9uc10gLS0gW2R1bXAgdG9vbCBhcmd1bWVu
dHNdXG4iCi0gICAgICAgICJSZXF1aXJlZCBvcHRpb25zOlxuIgotICAgICAgICAiICAgIC11ZGlk
IDxpZGVudGlmaWVyPiAgICAgICBTaW11bGF0b3IgZGV2aWNlIGlkZW50aWZpZXJcbiIKLSAgICAg
ICAgIiAgICAtYXBwIDxhcHBfcGF0aD4gICAgICAgICAgUGF0aCB0byB0aGUgYnVpbHQgaU9TIC5h
cHAgYnVuZGxlIGRpcmVjdG9yeS5cbiIKLSAgICAgICAgIiAgICAtcHJvZHVjdERpciA8ZGlyPiAg
ICAgICAgL3BhdGgvdG8vV2ViS2l0QnVpbGQve2NvbmZpZ3VyYXRpb259LXtzaG9ydCBwbGF0Zm9y
bX0uXG4iOwotCi0gICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgW2hlbHBUZXh0IFVURjhTdHJp
bmddKTsKLX0KLQotTlNTdHJpbmcgKmdldFJlcXVpcmVkU3RyaW5nQXJndW1lbnQoTlNTdHJpbmcg
KnBhcmFtZXRlcikKLXsKLSAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVm
YXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdOwotICAgIE5TU3RyaW5nICphcmd1bWVudCA9IFtk
ZWZhdWx0cyBzdHJpbmdGb3JLZXk6cGFyYW1ldGVyXTsKLQotICAgIGlmICghYXJndW1lbnQpIHsK
LSAgICAgICAgTlNMb2coQCItJUAgaXMgcmVxdWlyZWQuIiwgcGFyYW1ldGVyKTsKLSAgICAgICAg
dXNhZ2UoKTsKLSAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0KLSAgICByZXR1cm4g
YXJndW1lbnQ7Ci19Ci0KLU5TQXJyYXkgKmdldER1bXBUb29sQXJndW1lbnRzKCkKLXsKLSAgICBO
U011dGFibGVBcnJheSAqZHVtcFRvb2xBcmd1bWVudHMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9j
XSBpbml0XTsKLSAgICBOU0FycmF5ICpwcm9jZXNzQXJncyA9IFtbTlNQcm9jZXNzSW5mbyBwcm9j
ZXNzSW5mb10gYXJndW1lbnRzXTsKLSAgICBCT09MIGFwcGVuZGluZyA9IE5POwotICAgIGZvciAo
TlNTdHJpbmcgKmFyZyBpbiBwcm9jZXNzQXJncykgewotICAgICAgICBpZiAoW2FyZyBpc0VxdWFs
VG9TdHJpbmc6QCItLSJdKSB7Ci0gICAgICAgICAgICBhcHBlbmRpbmcgPSBZRVM7Ci0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoYXBwZW5kaW5nKQotICAgICAg
ICAgICAgW2R1bXBUb29sQXJndW1lbnRzIGFkZE9iamVjdDphcmddOwotICAgIH0KLSAgICByZXR1
cm4gZHVtcFRvb2xBcmd1bWVudHM7Ci19Ci0KLXZvaWQgZmluaXNoKCkKLXsKLSAgICBbcmVsYXlD
b250cm9sbGVyIGZpbmlzaF07Ci19Ci0KLXZvaWQgcmVjZWl2ZWRTaWduYWwoaW50IHNpZ25hbCkK
LXsKLSAgICBleGl0KEVYSVRfU1VDQ0VTUyk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjb25z
dCBjaGFyICogYXJndltdKQotewotICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBOU0Fy
cmF5ICpoZWxwQXJndW1lbnRzID0gQFtAIi1oIiwgQCItLWhlbHAiXTsKLSAgICAgICAgZm9yIChO
U1N0cmluZyAqaGVscEFyZ3VtZW50IGluIGhlbHBBcmd1bWVudHMpIHsKLSAgICAgICAgICAgIGlm
IChbW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBhcmd1bWVudHNdIGluZGV4T2ZPYmplY3Q6
aGVscEFyZ3VtZW50XSAhPSBOU05vdEZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgdXNhZ2UoKTsK
LSAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotI2lmIFVTRV9TSU1fU0VSVklDRV9DT05URVhUCi0gICAgICAgIE5TU3RyaW5nICpk
ZXZlbG9wZXJEaXJlY3RvcnkgPSBnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAiZGV2ZWxvcGVy
RGlyIik7Ci0jZW5kaWYKLSAgICAgICAgTlNVVUlEICp1ZGlkID0gW1tOU1VVSUQgYWxsb2NdIGlu
aXRXaXRoVVVJRFN0cmluZzpnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAidWRpZCIpXTsKLSAg
ICAgICAgTlNTdHJpbmcgKmFwcFBhdGggPSBnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAiYXBw
Iik7Ci0gICAgICAgIE5TU3RyaW5nICpwcm9kdWN0RGlyZWN0b3J5ID0gZ2V0UmVxdWlyZWRTdHJp
bmdBcmd1bWVudChAInByb2R1Y3REaXIiKTsKLSAgICAgICAgTlNBcnJheSAqZHVtcFRvb2xBcmd1
bWVudHMgPSBnZXREdW1wVG9vbEFyZ3VtZW50cygpOwotCi0jaWYgVVNFX1NJTV9TRVJWSUNFX0NP
TlRFWFQKLSAgICAgICAgTlNFcnJvciAqZXJyb3I7Ci0gICAgICAgIFNpbVNlcnZpY2VDb250ZXh0
ICpzZXJ2aWNlQ29udGV4dCA9IFtTaW1TZXJ2aWNlQ29udGV4dCBzaGFyZWRTZXJ2aWNlQ29udGV4
dEZvckRldmVsb3BlckRpcjpkZXZlbG9wZXJEaXJlY3RvcnkgZXJyb3I6JmVycm9yXTsKLSAgICAg
ICAgaWYgKCFzZXJ2aWNlQ29udGV4dCkgewotICAgICAgICAgICAgTlNMb2coQCJEZXZpY2UgY29u
dGV4dCBjb3VsZG4ndCBiZSBmb3VuZDogJUAiLCBlcnJvcik7Ci0gICAgICAgICAgICBleGl0KEVY
SVRfRkFJTFVSRSk7Ci0gICAgICAgIH0KLSAgICAgICAgU2ltRGV2aWNlU2V0ICpkZXZpY2VTZXQg
PSBbc2VydmljZUNvbnRleHQgZGVmYXVsdERldmljZVNldFdpdGhFcnJvcjpuaWxdOwotICAgICAg
ICBpZiAoIWRldmljZVNldCkgewotICAgICAgICAgICAgTlNMb2coQCJEZWZhdWx0IGRldmljZSBz
ZXQgY291bGRuJ3QgYmUgZm91bmQ6ICVAIiwgZXJyb3IpOwotICAgICAgICAgICAgZXhpdChFWElU
X0ZBSUxVUkUpOwotICAgICAgICB9Ci0gICAgICAgIFNpbURldmljZSAqZGV2aWNlID0gW2Rldmlj
ZVNldC5kZXZpY2VzQnlVRElEIG9iamVjdEZvcktleTp1ZGlkXTsKLSNlbHNlCi0gICAgICAgIFNp
bURldmljZSAqZGV2aWNlID0gW1NpbURldmljZVNldC5kZWZhdWx0U2V0LmRldmljZXNCeVVESUQg
b2JqZWN0Rm9yS2V5OnVkaWRdOwotI2VuZGlmCi0gICAgICAgIGlmICghZGV2aWNlKSB7Ci0gICAg
ICAgICAgICBOU0xvZyhAIkRldmljZSAlQCBjb3VsZG4ndCBiZSBmb3VuZCIsIHVkaWQpOwotICAg
ICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVsYXlD
b250cm9sbGVyID0gW1tMVFJlbGF5Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhEZXZpY2U6ZGV2
aWNlIHByb2R1Y3REaXI6cHJvZHVjdERpcmVjdG9yeSBhcHBQYXRoOmFwcFBhdGggZGV2aWNlVURJ
RDp1ZGlkIGR1bXBUb29sQXJndW1lbnRzOmR1bXBUb29sQXJndW1lbnRzXTsKLSAgICAgICAgW3Jl
bGF5Q29udHJvbGxlciBzdGFydF07Ci0KLSAgICAgICAgYXRleGl0KGZpbmlzaCk7Ci0gICAgICAg
IHNpZ25hbChTSUdJTlQsIHJlY2VpdmVkU2lnbmFsKTsKLSAgICAgICAgc2lnbmFsKFNJR1RFUk0s
IHJlY2VpdmVkU2lnbmFsKTsKLQotICAgICAgICBbW05TUnVuTG9vcCBtYWluUnVuTG9vcF0gcnVu
XTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19CkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkv
TGF5b3V0VGVzdFJlbGF5Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAyMTE5NjEpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0
VGVzdFJlbGF5Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKG5vbmV4aXN0ZW50KQpAQCAtMSwy
MDIgKzAsMCBAQAotLy8gISQqVVRGOCokIQotewotCWFyY2hpdmVWZXJzaW9uID0gMTsKLQljbGFz
c2VzID0gewotCX07Ci0Jb2JqZWN0VmVyc2lvbiA9IDQ2OwotCW9iamVjdHMgPSB7Ci0KLS8qIEJl
Z2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCi0JCTJFOEQzRUY4MTk4ODFENDMwMDRGNkNDMiAv
KiBtYWluLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
RThEM0VGNzE5ODgxRDQzMDA0RjZDQzIgLyogbWFpbi5tICovOyB9OwotCQkyRThEM0YwMjE5ODgx
RkQwMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDJFOEQzRjAxMTk4ODFGRDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxh
eS5tICovOyB9OwotCQkyRThEM0YwNjE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xs
ZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOEQz
RjA1MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5tICovOyB9OwotLyogRW5k
IFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWENvcHlGaWxlc0J1aWxkUGhh
c2Ugc2VjdGlvbiAqLwotCQkyRThEM0VGMjE5ODgxRDQzMDA0RjZDQzIgLyogQ29weUZpbGVzICov
ID0gewotCQkJaXNhID0gUEJYQ29weUZpbGVzQnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFz
ayA9IDIxNDc0ODM2NDc7Ci0JCQlkc3RQYXRoID0gL3Vzci9zaGFyZS9tYW4vbWFuMS87Ci0JCQlk
c3RTdWJmb2xkZXJTcGVjID0gMDsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAxOwotCQl9OwotLyogRW5kIFBCWENvcHlGaWxlc0J1
aWxkUGhhc2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24g
Ki8KLQkJMkU4RDNFRjQxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gt
by5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gTGF5b3V0VGVzdFJlbGF5
OyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQkyRThEM0VGNzE5ODgxRDQz
MDA0RjZDQzIgLyogbWFpbi5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBtYWluLm07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVh
c2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0LnhjY29uZmlnOyBuYW1lID0gRGVidWdSZWxlYXNlLnhjY29uZmlnOyBwYXRoID0g
Q29uZmlndXJhdGlvbnMvRGVidWdSZWxlYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkyRThEM0VGRjE5ODgxRTI1MDA0RjZDQzIgLyogQmFzZS54Y2NvbmZpZyAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25m
aWc7IG5hbWUgPSBCYXNlLnhjY29uZmlnOyBwYXRoID0gQ29uZmlndXJhdGlvbnMvQmFzZS54Y2Nv
bmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDAxOTg4MUYyOTAwNEY2
Q0MyIC8qIExUUmVsYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTFRSZWxheS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkyRThEM0YwMTE5ODgxRkQwMDA0RjZDQzIgLyogTFRQaXBlUmVsYXku
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gTFRQaXBlUmVsYXkubTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDMxOTg4MUZFMjAwNEY2Q0MyIC8qIExU
UGlwZVJlbGF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExUUGlwZVJlbGF5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTJFOEQzRjA0MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJv
bGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMVFJlbGF5Q29udHJvbGxl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0YwNTE5ODgyNDA2MDA0RjZD
QzIgLyogTFRSZWxheUNvbnRyb2xsZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBw
YXRoID0gTFRSZWxheUNvbnRyb2xsZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
Q0UxRkJDMTUxQjI5MEU3OTAwMDEzNkY1IC8qIENvcmVTaW11bGF0b3JTUEkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29yZVNpbXVsYXRvclNQSS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwotCi0vKiBC
ZWdpbiBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0JCTJFOEQzRUYxMTk4ODFE
NDMwMDRGNkNDMiAvKiBGcmFtZXdvcmtzICovID0gewotCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1
aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAo
Ci0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07
Ci0vKiBFbmQgUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQ
QlhHcm91cCBzZWN0aW9uICovCi0JCTJFOEQzRUVCMTk4ODFENDMwMDRGNkNDMiA9IHsKLQkJCWlz
YSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMkU4RDNFRkYxOTg4MUUyNTAwNEY2
Q0MyIC8qIEJhc2UueGNjb25maWcgKi8sCi0JCQkJMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8q
IERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLywKLQkJCQkyRThEM0VGNjE5ODgxRDQzMDA0RjZDQzIg
LyogTGF5b3V0VGVzdFJlbGF5ICovLAotCQkJCTJFOEQzRUY1MTk4ODFENDMwMDRGNkNDMiAvKiBQ
cm9kdWN0cyAqLywKLQkJCSk7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQky
RThEM0VGNTE5ODgxRDQzMDA0RjZDQzIgLyogUHJvZHVjdHMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhH
cm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTJFOEQzRUY0MTk4ODFENDMwMDRGNkNDMiAvKiBM
YXlvdXRUZXN0UmVsYXkgKi8sCi0JCQkpOwotCQkJbmFtZSA9IFByb2R1Y3RzOwotCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJMkU4RDNFRjYxOTg4MUQ0MzAwNEY2Q0MyIC8qIExh
eW91dFRlc3RSZWxheSAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAo
Ci0JCQkJMkU4RDNFRjcxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSAqLywKLQkJCQlDRTFGQkMx
NTFCMjkwRTc5MDAwMTM2RjUgLyogQ29yZVNpbXVsYXRvclNQSS5oICovLAotCQkJCTJFOEQzRjAw
MTk4ODFGMjkwMDRGNkNDMiAvKiBMVFJlbGF5LmggKi8sCi0JCQkJMkU4RDNGMDExOTg4MUZEMDAw
NEY2Q0MyIC8qIExUUGlwZVJlbGF5Lm0gKi8sCi0JCQkJMkU4RDNGMDMxOTg4MUZFMjAwNEY2Q0My
IC8qIExUUGlwZVJlbGF5LmggKi8sCi0JCQkJMkU4RDNGMDQxOTg4MjQwNjAwNEY2Q0MyIC8qIExU
UmVsYXlDb250cm9sbGVyLmggKi8sCi0JCQkJMkU4RDNGMDUxOTg4MjQwNjAwNEY2Q0MyIC8qIExU
UmVsYXlDb250cm9sbGVyLm0gKi8sCi0JCQkpOwotCQkJcGF0aCA9IExheW91dFRlc3RSZWxheTsK
LQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0vKiBFbmQgUEJYR3JvdXAgc2VjdGlv
biAqLwotCi0vKiBCZWdpbiBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLwotCQkyRThEM0VGMzE5
ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovID0gewotCQkJaXNhID0gUEJYTmF0
aXZlVGFyZ2V0OwotCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDJFOEQzRUZCMTk4ODFENDMw
MDRGNkNDMiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAi
TGF5b3V0VGVzdFJlbGF5IiAqLzsKLQkJCWJ1aWxkUGhhc2VzID0gKAotCQkJCTJFOEQzRUYwMTk4
ODFENDMwMDRGNkNDMiAvKiBTb3VyY2VzICovLAotCQkJCTJFOEQzRUYxMTk4ODFENDMwMDRGNkND
MiAvKiBGcmFtZXdvcmtzICovLAotCQkJCTJFOEQzRUYyMTk4ODFENDMwMDRGNkNDMiAvKiBDb3B5
RmlsZXMgKi8sCi0JCQkpOwotCQkJYnVpbGRSdWxlcyA9ICgKLQkJCSk7Ci0JCQlkZXBlbmRlbmNp
ZXMgPSAoCi0JCQkpOwotCQkJbmFtZSA9IExheW91dFRlc3RSZWxheTsKLQkJCXByb2R1Y3ROYW1l
ID0gTGF5b3V0VGVzdFJlbGF5OwotCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDJFOEQzRUY0MTk4ODFE
NDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi87Ci0JCQlwcm9kdWN0VHlwZSA9ICJjb20u
YXBwbGUucHJvZHVjdC10eXBlLnRvb2wiOwotCQl9OwotLyogRW5kIFBCWE5hdGl2ZVRhcmdldCBz
ZWN0aW9uICovCi0KLS8qIEJlZ2luIFBCWFByb2plY3Qgc2VjdGlvbiAqLwotCQkyRThEM0VFQzE5
ODgxRDQzMDA0RjZDQzIgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7Ci0JCQlpc2EgPSBQQlhQcm9q
ZWN0OwotCQkJYXR0cmlidXRlcyA9IHsKLQkJCQlMYXN0VXBncmFkZUNoZWNrID0gMDYwMDsKLQkJ
CQlPUkdBTklaQVRJT05OQU1FID0gIkFwcGxlLCBJbmMuIjsKLQkJCQlUYXJnZXRBdHRyaWJ1dGVz
ID0gewotCQkJCQkyRThEM0VGMzE5ODgxRDQzMDA0RjZDQzIgPSB7Ci0JCQkJCQlDcmVhdGVkT25U
b29sc1ZlcnNpb24gPSA2LjA7Ci0JCQkJCX07Ci0JCQkJfTsKLQkJCX07Ci0JCQlidWlsZENvbmZp
Z3VyYXRpb25MaXN0ID0gMkU4RDNFRUYxOTg4MUQ0MzAwNEY2Q0MyIC8qIEJ1aWxkIGNvbmZpZ3Vy
YXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiTGF5b3V0VGVzdFJlbGF5IiAqLzsKLQkJCWNvbXBh
dGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDMuMiI7Ci0JCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVu
Z2xpc2g7Ci0JCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMDsKLQkJCWtub3duUmVnaW9ucyA9
ICgKLQkJCQllbiwKLQkJCSk7Ci0JCQltYWluR3JvdXAgPSAyRThEM0VFQjE5ODgxRDQzMDA0RjZD
QzI7Ci0JCQlwcm9kdWN0UmVmR3JvdXAgPSAyRThEM0VGNTE5ODgxRDQzMDA0RjZDQzIgLyogUHJv
ZHVjdHMgKi87Ci0JCQlwcm9qZWN0RGlyUGF0aCA9ICIiOwotCQkJcHJvamVjdFJvb3QgPSAiIjsK
LQkJCXRhcmdldHMgPSAoCi0JCQkJMkU4RDNFRjMxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRl
c3RSZWxheSAqLywKLQkJCSk7Ci0JCX07Ci0vKiBFbmQgUEJYUHJvamVjdCBzZWN0aW9uICovCi0K
LS8qIEJlZ2luIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjAxOTg4
MUQ0MzAwNEY2Q0MyIC8qIFNvdXJjZXMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQ
aGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJ
CQkyRThEM0YwNjE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIubSBpbiBTb3Vy
Y2VzICovLAotCQkJCTJFOEQzRUY4MTk4ODFENDMwMDRGNkNDMiAvKiBtYWluLm0gaW4gU291cmNl
cyAqLywKLQkJCQkyRThEM0YwMjE5ODgxRkQwMDA0RjZDQzIgLyogTFRQaXBlUmVsYXkubSBpbiBT
b3VyY2VzICovLAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwotCQl9OwotLyogRW5kIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQotLyog
QmVnaW4gWENCdWlsZENvbmZpZ3VyYXRpb24gc2VjdGlvbiAqLwotCQkyRThEM0VGOTE5ODgxRDQz
MDA0RjZDQzIgLyogRGVidWcgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsK
LQkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0My
IC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLzsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQl9
OwotCQkJbmFtZSA9IERlYnVnOwotCQl9OwotCQkyRThEM0VGQTE5ODgxRDQzMDA0RjZDQzIgLyog
UmVsZWFzZSAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJYmFzZUNv
bmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAyRThEM0VGRTE5ODgxRTEzMDA0RjZDQzIgLyogRGVidWdS
ZWxlYXNlLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCX07Ci0JCQluYW1l
ID0gUmVsZWFzZTsKLQkJfTsKLQkJMkU4RDNFRkMxOTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICov
ID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJhdGlv
blJlZmVyZW5jZSA9IDJFOEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNj
b25maWcgKi87Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJCVBST0RVQ1RfTkFNRSA9ICIkKFRB
UkdFVF9OQU1FKSI7Ci0JCQl9OwotCQkJbmFtZSA9IERlYnVnOwotCQl9OwotCQkyRThEM0VGRDE5
ODgxRDQzMDA0RjZDQzIgLyogUmVsZWFzZSAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1
cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAyRThEM0VGRTE5ODgxRTEz
MDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9
IHsKLQkJCQlQUk9EVUNUX05BTUUgPSAiJChUQVJHRVRfTkFNRSkiOwotCQkJfTsKLQkJCW5hbWUg
PSBSZWxlYXNlOwotCQl9OwotLyogRW5kIFhDQnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24gKi8K
LQotLyogQmVnaW4gWENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCi0JCTJFOEQzRUVGMTk4
ODFENDMwMDRGNkNDMiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3Qg
IkxheW91dFRlc3RSZWxheSIgKi8gPSB7Ci0JCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0Owot
CQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKLQkJCQkyRThEM0VGOTE5ODgxRDQzMDA0RjZDQzIg
LyogRGVidWcgKi8sCi0JCQkJMkU4RDNFRkExOTg4MUQ0MzAwNEY2Q0MyIC8qIFJlbGVhc2UgKi8s
Ci0JCQkpOwotCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwotCQkJZGVmYXVs
dENvbmZpZ3VyYXRpb25OYW1lID0gUmVsZWFzZTsKLQkJfTsKLQkJMkU4RDNFRkIxOTg4MUQ0MzAw
NEY2Q0MyIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJM
YXlvdXRUZXN0UmVsYXkiICovID0gewotCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKLQkJ
CWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCi0JCQkJMkU4RDNFRkMxOTg4MUQ0MzAwNEY2Q0MyIC8q
IERlYnVnICovLAotCQkJCTJFOEQzRUZEMTk4ODFENDMwMDRGNkNDMiAvKiBSZWxlYXNlICovLAot
CQkJKTsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKLQkJCWRlZmF1bHRD
b25maWd1cmF0aW9uTmFtZSA9IFJlbGVhc2U7Ci0JCX07Ci0vKiBFbmQgWENDb25maWd1cmF0aW9u
TGlzdCBzZWN0aW9uICovCi0JfTsKLQlyb290T2JqZWN0ID0gMkU4RDNFRUMxOTg4MUQ0MzAwNEY2
Q0MyIC8qIFByb2plY3Qgb2JqZWN0ICovOwotfQpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5
L0xheW91dFRlc3RSZWxheS54Y29kZXByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVz
dFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2oJKHJldmlzaW9uIDIxMTk2MSkKKysrIFRv
b2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkueGNvZGVwcm9qCShub25leGlzdGVu
dCkKClByb3BlcnR5IGNoYW5nZXMgb246IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0
UmVsYXkueGNvZGVwcm9qCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmlnbm9yZQojIyAtMSwyICsw
LDAgIyMKLXByb2plY3QueGN3b3Jrc3BhY2UKLXhjdXNlcmRhdGEKSW5kZXg6IFRvb2xzL0xheW91
dFRlc3RSZWxheS9NYWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkv
TWFrZWZpbGUJKHJldmlzaW9uIDIxMTk2MSkKKysrIFRvb2xzL0xheW91dFRlc3RSZWxheS9NYWtl
ZmlsZQkobm9uZXhpc3RlbnQpCkBAIC0xLDYgKzAsMCBAQAotU0NSSVBUU19QQVRIID0gLi4vU2Ny
aXB0cwotCi1PVkVSUklERV9BUkNIUyA9IGRlZmF1bHQKLU9WRVJSSURFX1NES1JPT1QgPSBkZWZh
dWx0Ci0KLWluY2x1ZGUgLi4vLi4vTWFrZWZpbGUuc2hhcmVkCkluZGV4OiBUb29scy9MYXlvdXRU
ZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9MYXlvdXRUZXN0UmVsYXkvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwkocmV2aXNpb24g
MjExOTYxKQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNj
b25maWcJKG5vbmV4aXN0ZW50KQpAQCAtMSw2OCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0vLyBhcmUgbWV0OgotLy8gMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0vLyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0vLyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLy8KLS8vIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotLy8g
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLS8vIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotLy8gUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLS8vIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotLy8gRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotLy8gUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0vLyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0vLyBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLQotI2luY2x1ZGUgIi4uLy4uLy4uLy4uL0ludGVybmFsL0NvbmZpZ3Vy
YXRpb25zL0hhdmVJbnRlcm5hbFNESy54Y2NvbmZpZyIKLQotVVNFX0lOVEVSTkFMX1NESyA9ICQo
VVNFX0lOVEVSTkFMX1NES18kKENPTkZJR1VSQVRJT04pKTsKLVVTRV9JTlRFUk5BTF9TREtfUHJv
ZHVjdGlvbiA9IFlFUzsKLVVTRV9JTlRFUk5BTF9TREtfRGVidWcgPSAkKEhBVkVfSU5URVJOQUxf
U0RLKTsKLVVTRV9JTlRFUk5BTF9TREtfUmVsZWFzZSA9ICQoSEFWRV9JTlRFUk5BTF9TREspOwot
Ci1DTEFOR19DWFhfTEFOR1VBR0VfU1RBTkRBUkQgPSBnbnUrKzB4OwotQ0xBTkdfRU5BQkxFX09C
SkNfQVJDID0gWUVTOwotQ0xBTkdfV0FSTl9DWFgwWF9FWFRFTlNJT05TID0gTk87Ci1IRUFERVJf
U0VBUkNIX1BBVEhTID0gJChCVUlMVF9QUk9EVUNUU19ESVIpL3Vzci9sb2NhbC9pbmNsdWRlICQo
V0VCQ09SRV9QUklWQVRFX0hFQURFUlNfRElSKS9Gb3J3YXJkaW5nSGVhZGVycyAkKFNSQ1JPT1Qp
Ly4uLy4uL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pY3UgJChORVhUX1JPT1QpL3Vzci9sb2NhbC9p
bmNsdWRlL1dlYkNvcmVUZXN0U3VwcG9ydDsKLUdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMg
PSAkKERFQlVHX0RFRklORVMpIEVOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVDsKLURFQlVHX0lORk9S
TUFUSU9OX0ZPUk1BVCA9IGR3YXJmLXdpdGgtZHN5bTsKLVBSRUJJTkRJTkcgPSBOTwotR0NDX0Nf
TEFOR1VBR0VfU1RBTkRBUkQgPSBnbnU5OQotR0NDX0VOQUJMRV9DUFBfRVhDRVBUSU9OUyA9IE5P
OwotR0NDX0VOQUJMRV9DUFBfUlRUSSA9IE5POwotR0NDX1BSRUNPTVBJTEVfUFJFRklYX0hFQURF
UiA9IFlFUwotR0NDX1RSRUFUX1dBUk5JTkdTX0FTX0VSUk9SUyA9IFlFUwotR0NDX1ZFUlNJT04g
PSBjb20uYXBwbGUuY29tcGlsZXJzLmxsdm0uY2xhbmcuMV8wOwotR0NDX1dBUk5fQUJPVVRfREVQ
UkVDQVRFRF9GVU5DVElPTlMgPSBOTwotR0NDX1dBUk5fVU5VU0VEX0ZVTkNUSU9OID0gWUVTCi1H
Q0NfV0FSTl9VTlVTRURfVkFSSUFCTEUgPSBZRVMKLUdDQ19XQVJOXzY0X1RPXzMyX0JJVF9DT05W
RVJTSU9OW2FyY2g9eDg2XzY0XSA9IE5POwotV0FSTklOR19DRkxBR1MgPSAtV2FsbCAtVyAtV25v
LXVudXNlZC1wYXJhbWV0ZXIgLVd1bmRlZgotCi1ERUJVR19ERUZJTkVTX2RlYnVnID0gOwotREVC
VUdfREVGSU5FU19ub3JtYWwgPSBOREVCVUc7Ci1ERUJVR19ERUZJTkVTID0gJChERUJVR19ERUZJ
TkVTXyQoQ1VSUkVOVF9WQVJJQU5UKSk7Ci0KLVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9S
ID0gJChUQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUiQoTUFDT1NYX0RFUExPWU1FTlRfVEFS
R0VUOnN1ZmZpeDppZGVudGlmaWVyKSk7Ci1UQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUl8x
MCA9IDEwMTAwMDsKLVRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9SXzExID0gMTAxMTAwOwot
VEFSR0VUX01BQ19PU19YX1ZFUlNJT05fTUFKT1JfMTIgPSAxMDEyMDA7Ci1UQVJHRVRfTUFDX09T
X1hfVkVSU0lPTl9NQUpPUl8xMyA9IDEwMTMwMDsKLQotU0RLUk9PVCA9IG1hY29zeC5pbnRlcm5h
bDsKLQotU1VQUE9SVEVEX1BMQVRGT1JNUyA9IG1hY29zeDsKLQotVE9PTENIQUlOUyA9IGRlZmF1
bHQ7Ci0KLU9USEVSX0NGTEFHUyA9ICQoQVNBTl9PVEhFUl9DRkxBR1MpOwotT1RIRVJfQ1BMVVNQ
TFVTRkxBR1MgPSAkKEFTQU5fT1RIRVJfQ1BMVVNQTFVTRkxBR1MpOwotT1RIRVJfTERGTEFHUyA9
ICQoQVNBTl9PVEhFUl9MREZMQUdTKTsKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9Db25m
aWd1cmF0aW9ucy9EZWJ1Z1JlbGVhc2UueGNjb25maWcKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5
b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0RlYnVnUmVsZWFzZS54Y2NvbmZpZwkocmV2aXNp
b24gMjExOTYxKQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0NvbmZpZ3VyYXRpb25zL0RlYnVn
UmVsZWFzZS54Y2NvbmZpZwkobm9uZXhpc3RlbnQpCkBAIC0xLDQyICswLDAgQEAKLS8vIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLwotLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLS8vIGFyZSBtZXQ6Ci0vLyAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotLy8gMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLS8vICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLS8vICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0v
LwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0vLyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotLy8gSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0vLyBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotLy8gQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0v
LyBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0vLyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLS8vIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLS8vIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jaW5jbHVkZSAiQmFzZS54Y2NvbmZpZyIKLQot
QVJDSFMgPSAkKEFSQ0hTX1NUQU5EQVJEXzY0X0JJVCk7Ci0KLVRBUkdFVF9NQUNfT1NfWF9WRVJT
SU9OX01BSk9SID0gJChNQUNfT1NfWF9WRVJTSU9OX01BSk9SKTsKLQotTUFDT1NYX0RFUExPWU1F
TlRfVEFSR0VUID0gJChNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfJChUQVJHRVRfTUFDX09TX1hf
VkVSU0lPTl9NQUpPUikpCi1NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfMTAxMDAwID0gMTAuMTA7
Ci1NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfMTAxMTAwID0gMTAuMTE7Ci1NQUNPU1hfREVQTE9Z
TUVOVF9UQVJHRVRfMTAxMjAwID0gMTAuMTI7Ci1NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRfMTAx
MzAwID0gMTAuMTM7Ci0KLUZSQU1FV09SS19TRUFSQ0hfUEFUSFMgPSAkKERFVkVMT1BFUl9ESVIp
L0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3M7Ci1MRF9SVU5QQVRIX1NFQVJDSF9QQVRIUyA9ICQo
REVWRUxPUEVSX0RJUikvTGlicmFyeS9Qcml2YXRlRnJhbWV3b3JrczsKLU9USEVSX0xERkxBR1Mg
PSAtZnJhbWV3b3JrIENvcmVTaW11bGF0b3IgLWZyYW1ld29yayBBcHBLaXQ7Ci0KLVNES1JPT1Qg
PSAkKFNES1JPT1RfbWFjb3N4XyQoVVNFX0lOVEVSTkFMX1NESykpOwotU0RLUk9PVF9tYWNvc3hf
ID0gbWFjb3N4OwotU0RLUk9PVF9tYWNvc3hfWUVTID0gbWFjb3N4LmludGVybmFsOwpJbmRleDog
VG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVs
YXkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjExOTYxKQorKysgVG9vbHMv
TGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShub25leGlzdGVudCkKQEAgLTEsMjAyICswLDAgQEAKLS8vICEkKlVURjgqJCEKLXsKLQlhcmNo
aXZlVmVyc2lvbiA9IDE7Ci0JY2xhc3NlcyA9IHsKLQl9OwotCW9iamVjdFZlcnNpb24gPSA0NjsK
LQlvYmplY3RzID0gewotCi0vKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwotCQkyRThE
M0VGODE5ODgxRDQzMDA0RjZDQzIgLyogbWFpbi5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkU4RDNFRjcxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSAq
LzsgfTsKLQkJMkU4RDNGMDIxOTg4MUZEMDAwNEY2Q0MyIC8qIExUUGlwZVJlbGF5Lm0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRThEM0YwMTE5ODgxRkQw
MDA0RjZDQzIgLyogTFRQaXBlUmVsYXkubSAqLzsgfTsKLQkJMkU4RDNGMDYxOTg4MjQwNjAwNEY2
Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRThEM0YwNTE5ODgyNDA2MDA0RjZDQzIgLyogTFRSZWxheUNvbnRy
b2xsZXIubSAqLzsgfTsKLS8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwotCi0vKiBCZWdp
biBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQkJMkU4RDNFRjIxOTg4MUQ0MzAw
NEY2Q0MyIC8qIENvcHlGaWxlcyAqLyA9IHsKLQkJCWlzYSA9IFBCWENvcHlGaWxlc0J1aWxkUGhh
c2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZHN0UGF0aCA9IC91c3Iv
c2hhcmUvbWFuL21hbjEvOwotCQkJZHN0U3ViZm9sZGVyU3BlYyA9IDA7Ci0JCQlmaWxlcyA9ICgK
LQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMTsKLQkJfTsK
LS8qIEVuZCBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJY
RmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCi0JCTJFOEQzRUY0MTk4ODFENDMwMDRGNkNDMiAvKiBM
YXlvdXRUZXN0UmVsYXkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxl
VHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsg
cGF0aCA9IExheW91dFRlc3RSZWxheTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKLQkJMkU4RDNFRjcxOTg4MUQ0MzAwNEY2Q0MyIC8qIG1haW4ubSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRo
ID0gbWFpbi5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0VGRTE5ODgxRTEz
MDA0RjZDQzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgbmFtZSA9IERlYnVnUmVs
ZWFzZS54Y2NvbmZpZzsgcGF0aCA9IENvbmZpZ3VyYXRpb25zL0RlYnVnUmVsZWFzZS54Y2NvbmZp
Zzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNFRkYxOTg4MUUyNTAwNEY2Q0My
IC8qIEJhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBuYW1lID0gQmFzZS54Y2NvbmZpZzsgcGF0aCA9IENv
bmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTJFOEQzRjAwMTk4ODFGMjkwMDRGNkNDMiAvKiBMVFJlbGF5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExU
UmVsYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkU4RDNGMDExOTg4MUZEMDAw
NEY2Q0MyIC8qIExUUGlwZVJlbGF5Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0
aCA9IExUUGlwZVJlbGF5Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTJFOEQzRjAz
MTk4ODFGRTIwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMVFBpcGVS
ZWxheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyRThEM0YwNDE5ODgyNDA2MDA0
RjZDQzIgLyogTFRSZWxheUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTFRSZWxheUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MkU4RDNGMDUxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVsYXlDb250cm9sbGVyLm0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IExUUmVsYXlDb250cm9sbGVyLm07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNFMUZCQzE1MUIyOTBFNzkwMDAxMzZGNSAvKiBDb3JlU2lt
dWxhdG9yU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcmVTaW11bGF0
b3JTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLS8qIEVuZCBQQlhGaWxlUmVmZXJl
bmNlIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlv
biAqLwotCQkyRThEM0VGMTE5ODgxRDQzMDA0RjZDQzIgLyogRnJhbWV3b3JrcyAqLyA9IHsKLQkJ
CWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0
NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwotCQl9OwotLyogRW5kIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNl
Y3Rpb24gKi8KLQotLyogQmVnaW4gUEJYR3JvdXAgc2VjdGlvbiAqLwotCQkyRThEM0VFQjE5ODgx
RDQzMDA0RjZDQzIgPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJ
CTJFOEQzRUZGMTk4ODFFMjUwMDRGNkNDMiAvKiBCYXNlLnhjY29uZmlnICovLAotCQkJCTJFOEQz
RUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8sCi0JCQkJMkU4
RDNFRjYxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAqLywKLQkJCQkyRThEM0VG
NTE5ODgxRDQzMDA0RjZDQzIgLyogUHJvZHVjdHMgKi8sCi0JCQkpOwotCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKLQkJfTsKLQkJMkU4RDNFRjUxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2R1Y3Rz
ICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQkyRThEM0VG
NDE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovLAotCQkJKTsKLQkJCW5hbWUg
PSBQcm9kdWN0czsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCTJFOEQzRUY2
MTk4ODFENDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8gPSB7Ci0JCQlpc2EgPSBQQlhH
cm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTJFOEQzRUY3MTk4ODFENDMwMDRGNkNDMiAvKiBt
YWluLm0gKi8sCi0JCQkJQ0UxRkJDMTUxQjI5MEU3OTAwMDEzNkY1IC8qIENvcmVTaW11bGF0b3JT
UEkuaCAqLywKLQkJCQkyRThEM0YwMDE5ODgxRjI5MDA0RjZDQzIgLyogTFRSZWxheS5oICovLAot
CQkJCTJFOEQzRjAxMTk4ODFGRDAwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5tICovLAotCQkJCTJF
OEQzRjAzMTk4ODFGRTIwMDRGNkNDMiAvKiBMVFBpcGVSZWxheS5oICovLAotCQkJCTJFOEQzRjA0
MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5oICovLAotCQkJCTJFOEQzRjA1
MTk4ODI0MDYwMDRGNkNDMiAvKiBMVFJlbGF5Q29udHJvbGxlci5tICovLAotCQkJKTsKLQkJCXBh
dGggPSBMYXlvdXRUZXN0UmVsYXk7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9Owot
LyogRW5kIFBCWEdyb3VwIHNlY3Rpb24gKi8KLQotLyogQmVnaW4gUEJYTmF0aXZlVGFyZ2V0IHNl
Y3Rpb24gKi8KLQkJMkU4RDNFRjMxOTg4MUQ0MzAwNEY2Q0MyIC8qIExheW91dFRlc3RSZWxheSAq
LyA9IHsKLQkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbkxp
c3QgPSAyRThEM0VGQjE5ODgxRDQzMDA0RjZDQzIgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0
IGZvciBQQlhOYXRpdmVUYXJnZXQgIkxheW91dFRlc3RSZWxheSIgKi87Ci0JCQlidWlsZFBoYXNl
cyA9ICgKLQkJCQkyRThEM0VGMDE5ODgxRDQzMDA0RjZDQzIgLyogU291cmNlcyAqLywKLQkJCQky
RThEM0VGMTE5ODgxRDQzMDA0RjZDQzIgLyogRnJhbWV3b3JrcyAqLywKLQkJCQkyRThEM0VGMjE5
ODgxRDQzMDA0RjZDQzIgLyogQ29weUZpbGVzICovLAotCQkJKTsKLQkJCWJ1aWxkUnVsZXMgPSAo
Ci0JCQkpOwotCQkJZGVwZW5kZW5jaWVzID0gKAotCQkJKTsKLQkJCW5hbWUgPSBMYXlvdXRUZXN0
UmVsYXk7Ci0JCQlwcm9kdWN0TmFtZSA9IExheW91dFRlc3RSZWxheTsKLQkJCXByb2R1Y3RSZWZl
cmVuY2UgPSAyRThEM0VGNDE5ODgxRDQzMDA0RjZDQzIgLyogTGF5b3V0VGVzdFJlbGF5ICovOwot
CQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS50b29sIjsKLQkJfTsKLS8q
IEVuZCBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhQcm9qZWN0IHNl
Y3Rpb24gKi8KLQkJMkU4RDNFRUMxOTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2plY3Qgb2JqZWN0ICov
ID0gewotCQkJaXNhID0gUEJYUHJvamVjdDsKLQkJCWF0dHJpYnV0ZXMgPSB7Ci0JCQkJTGFzdFVw
Z3JhZGVDaGVjayA9IDA2MDA7Ci0JCQkJT1JHQU5JWkFUSU9OTkFNRSA9ICJBcHBsZSwgSW5jLiI7
Ci0JCQkJVGFyZ2V0QXR0cmlidXRlcyA9IHsKLQkJCQkJMkU4RDNFRjMxOTg4MUQ0MzAwNEY2Q0My
ID0gewotCQkJCQkJQ3JlYXRlZE9uVG9vbHNWZXJzaW9uID0gNi4wOwotCQkJCQl9OwotCQkJCX07
Ci0JCQl9OwotCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDJFOEQzRUVGMTk4ODFENDMwMDRG
NkNDMiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIkxheW91dFRl
c3RSZWxheSIgKi87Ci0JCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAzLjIiOwotCQkJ
ZGV2ZWxvcG1lbnRSZWdpb24gPSBFbmdsaXNoOwotCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9
IDA7Ci0JCQlrbm93blJlZ2lvbnMgPSAoCi0JCQkJZW4sCi0JCQkpOwotCQkJbWFpbkdyb3VwID0g
MkU4RDNFRUIxOTg4MUQ0MzAwNEY2Q0MyOwotCQkJcHJvZHVjdFJlZkdyb3VwID0gMkU4RDNFRjUx
OTg4MUQ0MzAwNEY2Q0MyIC8qIFByb2R1Y3RzICovOwotCQkJcHJvamVjdERpclBhdGggPSAiIjsK
LQkJCXByb2plY3RSb290ID0gIiI7Ci0JCQl0YXJnZXRzID0gKAotCQkJCTJFOEQzRUYzMTk4ODFE
NDMwMDRGNkNDMiAvKiBMYXlvdXRUZXN0UmVsYXkgKi8sCi0JCQkpOwotCQl9OwotLyogRW5kIFBC
WFByb2plY3Qgc2VjdGlvbiAqLwotCi0vKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0
aW9uICovCi0JCTJFOEQzRUYwMTk4ODFENDMwMDRGNkNDMiAvKiBTb3VyY2VzICovID0gewotCQkJ
aXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgz
NjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkJMkU4RDNGMDYxOTg4MjQwNjAwNEY2Q0MyIC8qIExUUmVs
YXlDb250cm9sbGVyLm0gaW4gU291cmNlcyAqLywKLQkJCQkyRThEM0VGODE5ODgxRDQzMDA0RjZD
QzIgLyogbWFpbi5tIGluIFNvdXJjZXMgKi8sCi0JCQkJMkU4RDNGMDIxOTg4MUZEMDAwNEY2Q0My
IC8qIExUUGlwZVJlbGF5Lm0gaW4gU291cmNlcyAqLywKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKLS8qIEVuZCBQQlhTb3VyY2VzQnVpbGRQ
aGFzZSBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFhDQnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24g
Ki8KLQkJMkU4RDNFRjkxOTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICovID0gewotCQkJaXNhID0g
WENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDJF
OEQzRUZFMTk4ODFFMTMwMDRGNkNDMiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi87Ci0JCQli
dWlsZFNldHRpbmdzID0gewotCQkJfTsKLQkJCW5hbWUgPSBEZWJ1ZzsKLQkJfTsKLQkJMkU4RDNF
RkExOTg4MUQ0MzAwNEY2Q0MyIC8qIFJlbGVhc2UgKi8gPSB7Ci0JCQlpc2EgPSBYQ0J1aWxkQ29u
ZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gMkU4RDNFRkUxOTg4
MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLzsKLQkJCWJ1aWxkU2V0dGlu
Z3MgPSB7Ci0JCQl9OwotCQkJbmFtZSA9IFJlbGVhc2U7Ci0JCX07Ci0JCTJFOEQzRUZDMTk4ODFE
NDMwMDRGNkNDMiAvKiBEZWJ1ZyAqLyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9u
OwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAyRThEM0VGRTE5ODgxRTEzMDA0RjZD
QzIgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJ
CQlQUk9EVUNUX05BTUUgPSAiJChUQVJHRVRfTkFNRSkiOwotCQkJfTsKLQkJCW5hbWUgPSBEZWJ1
ZzsKLQkJfTsKLQkJMkU4RDNFRkQxOTg4MUQ0MzAwNEY2Q0MyIC8qIFJlbGVhc2UgKi8gPSB7Ci0J
CQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJl
bmNlID0gMkU4RDNFRkUxOTg4MUUxMzAwNEY2Q0MyIC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAq
LzsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJUFJPRFVDVF9OQU1FID0gIiQoVEFSR0VUX05B
TUUpIjsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsKLQkJfTsKLS8qIEVuZCBYQ0J1aWxkQ29u
ZmlndXJhdGlvbiBzZWN0aW9uICovCi0KLS8qIEJlZ2luIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2Vj
dGlvbiAqLwotCQkyRThEM0VFRjE5ODgxRDQzMDA0RjZDQzIgLyogQnVpbGQgY29uZmlndXJhdGlv
biBsaXN0IGZvciBQQlhQcm9qZWN0ICJMYXlvdXRUZXN0UmVsYXkiICovID0gewotCQkJaXNhID0g
WENDb25maWd1cmF0aW9uTGlzdDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCi0JCQkJMkU4
RDNFRjkxOTg4MUQ0MzAwNEY2Q0MyIC8qIERlYnVnICovLAotCQkJCTJFOEQzRUZBMTk4ODFENDMw
MDRGNkNDMiAvKiBSZWxlYXNlICovLAotCQkJKTsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNW
aXNpYmxlID0gMDsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJlbGVhc2U7Ci0JCX07
Ci0JCTJFOEQzRUZCMTk4ODFENDMwMDRGNkNDMiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWE5hdGl2ZVRhcmdldCAiTGF5b3V0VGVzdFJlbGF5IiAqLyA9IHsKLQkJCWlzYSA9IFhD
Q29uZmlndXJhdGlvbkxpc3Q7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAotCQkJCTJFOEQz
RUZDMTk4ODFENDMwMDRGNkNDMiAvKiBEZWJ1ZyAqLywKLQkJCQkyRThEM0VGRDE5ODgxRDQzMDA0
RjZDQzIgLyogUmVsZWFzZSAqLywKLQkJCSk7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlz
aWJsZSA9IDA7Ci0JCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNlOwotCQl9Owot
LyogRW5kIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLwotCX07Ci0Jcm9vdE9iamVjdCA9
IDJFOEQzRUVDMTk4ODFENDMwMDRGNkNDMiAvKiBQcm9qZWN0IG9iamVjdCAqLzsKLX0KSW5kZXg6
IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvQ29yZVNpbXVsYXRvclNQSS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvQ29y
ZVNpbXVsYXRvclNQSS5oCShyZXZpc2lvbiAyMTE5NjEpCisrKyBUb29scy9MYXlvdXRUZXN0UmVs
YXkvTGF5b3V0VGVzdFJlbGF5L0NvcmVTaW11bGF0b3JTUEkuaAkobm9uZXhpc3RlbnQpCkBAIC0x
LDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgX19oYXNfaW5jbHVkZSg8Q29yZVNp
bXVsYXRvci9Db3JlU2ltdWxhdG9yLmg+KQotCi0vKiBGSVhNRTogUmVtb3ZlIHRoZSBiZWxvdyAj
ZGVmaW5lIG9uY2Ugd2UgcmVxdWlyZSBYY29kZSA3LjMgd2l0aCBpT1MgOS4zIFNESyBvciBuZXdl
ci4gKi8KLSNkZWZpbmUgX19jb3Jlc2ltX3VuYXZhaWxhYmxlX21zZyhtc2cpCi0jaW1wb3J0IDxD
b3JlU2ltdWxhdG9yL0NvcmVTaW11bGF0b3IuaD4KLQotLyogRklYTUU6IEFsd2F5cyB1c2UgU2lt
U2VydmljZUNvbnRleHQgb25jZSB3ZSByZXF1aXJlIFhjb2RlIDcuMyB3aXRoIGlPUyA5LjMgU0RL
IG9yIG5ld2VyLiAqLwotI2RlZmluZSBVU0VfU0lNX1NFUlZJQ0VfQ09OVEVYVCBkZWZpbmVkKENP
UkVTSU1fQVBJX01BWF9BTExPV0VEKQotCi0jZWxzZQotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0Zv
dW5kYXRpb24uaD4KLQotI2RlZmluZSBVU0VfU0lNX1NFUlZJQ0VfQ09OVEVYVCAxCi0KLSNkZWZp
bmUga1NpbURldmljZUxhdW5jaEFwcGxpY2F0aW9uQXJndW1lbnRzIEAiYXJndW1lbnRzIgotI2Rl
ZmluZSBrU2ltRGV2aWNlTGF1bmNoQXBwbGljYXRpb25FbnZpcm9ubWVudCBAImVudmlyb25tZW50
IgotCi1AaW50ZXJmYWNlIFNpbURldmljZSA6IE5TT2JqZWN0Ci0tIChCT09MKWluc3RhbGxBcHBs
aWNhdGlvbjooTlNVUkwgKilpbnN0YWxsVVJMIHdpdGhPcHRpb25zOihOU0RpY3Rpb25hcnkgKilv
cHRpb25zIGVycm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci0tIChwaWRf
dClsYXVuY2hBcHBsaWNhdGlvbldpdGhJRDooTlNTdHJpbmcgKilidW5kbGVJRCBvcHRpb25zOihO
U0RpY3Rpb25hcnkgKilvcHRpb25zIGVycm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICop
ZXJyb3I7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgU2ltRGV2aWNlU2V0IDogTlNPYmplY3QKLUBwcm9w
ZXJ0eSAocmVhZG9ubHksIGNvcHkpIE5TRGljdGlvbmFyeSAqZGV2aWNlc0J5VURJRDsKLUBlbmQK
LQotQGludGVyZmFjZSBTaW1TZXJ2aWNlQ29udGV4dCA6IE5TT2JqZWN0Ci0rKFNpbVNlcnZpY2VD
b250ZXh0ICopc2hhcmVkU2VydmljZUNvbnRleHRGb3JEZXZlbG9wZXJEaXI6KE5TU3RyaW5nICop
ZGV2ZWxvcGVyRGlyIGVycm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nICopZXJyb3I7Ci0t
KFNpbURldmljZVNldCAqKWRlZmF1bHREZXZpY2VTZXRXaXRoRXJyb3I6KE5TRXJyb3IgKiBfX2F1
dG9yZWxlYXNpbmcgKillcnJvcjsKLUBlbmQKLQotI2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRU
ZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVSZWxheS5oCShyZXZpc2lv
biAyMTE5NjEpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlw
ZVJlbGF5LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBMVFBpcGVSZWxheV9oCi0jZGVmaW5lIExUUGlwZVJlbGF5X2gKLQotI2ltcG9ydCAiTFRS
ZWxheS5oIgotCi1AaW50ZXJmYWNlIExUUGlwZVJlbGF5IDogTlNPYmplY3QgPExUUmVsYXk+Ci1A
cHJvcGVydHkgKHdlYWspIGlkPExUUmVsYXlEZWxlZ2F0ZT4gcmVsYXlEZWxlZ2F0ZTsKLS0gKGlk
KWluaXRXaXRoUHJlZml4OihOU1N0cmluZyAqKXByZWZpeDsKLUBlbmQKLQotI2VuZGlmCkluZGV4
OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFBpcGVS
ZWxheS5tCShyZXZpc2lvbiAyMTE5NjEpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0
VGVzdFJlbGF5L0xUUGlwZVJlbGF5Lm0JKG5vbmV4aXN0ZW50KQpAQCAtMSwxNTggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbXBvcnQgIkxUUGlwZVJlbGF5LmgiCi0KLSNpbXBvcnQgPEZvdW5kYXRp
b24vRm91bmRhdGlvbi5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3lzL3R5
cGVzLmg+Ci0KLUBpbnRlcmZhY2UgTFRQaXBlUmVsYXkgKCkKLUBwcm9wZXJ0eSAocmVhZG9ubHks
IHN0cm9uZykgTlNTdHJpbmcgKmZpZm9QcmVmaXg7Ci1AcHJvcGVydHkgKHN0cm9uZykgTlNPdXRw
dXRTdHJlYW0gKnN0YW5kYXJkSW5wdXRQaXBlOwotQHByb3BlcnR5IChzdHJvbmcpIE5TSW5wdXRT
dHJlYW0gKnN0YW5kYXJkT3V0cHV0UGlwZTsKLUBwcm9wZXJ0eSAoc3Ryb25nKSBOU0lucHV0U3Ry
ZWFtICpzdGFuZGFyZEVycm9yUGlwZTsKLQotLSAodm9pZCljcmVhdGVGSUZPczsKLS0gKHZvaWQp
ZGVzdHJveUZJRk9zOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gTFRQaXBlUmVsYXkKLQotLSAo
TlNTdHJpbmcgKilpblBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdC
eUFwcGVuZGluZ1N0cmluZzpAIl9JTiJdOwotfQotCi0tIChOU1N0cmluZyAqKW91dFBpcGVQYXRo
Ci17Ci0gICAgcmV0dXJuIFtfZmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9P
VVQiXTsKLX0KLQotLSAoTlNTdHJpbmcgKillcnJvclBpcGVQYXRoCi17Ci0gICAgcmV0dXJuIFtf
Zmlmb1ByZWZpeCBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIl9FUlJPUiJdOwotfQotCi0tIChO
U091dHB1dFN0cmVhbSAqKSBvdXRwdXRTdHJlYW0KLXsKLSAgICByZXR1cm4gX3N0YW5kYXJkSW5w
dXRQaXBlOwotfQotCi0tIChpZClpbml0V2l0aFByZWZpeDooTlNTdHJpbmcgKilwcmVmaXgKLXsK
LSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKSB7Ci0gICAgICAgIF9maWZvUHJlZml4ID0g
cHJlZml4OwotICAgICAgICBbc2VsZiBkZXN0cm95RklGT3NdOwotICAgIH0KLSAgICByZXR1cm4g
c2VsZjsKLX0KLQotLSAodm9pZClzZXR1cAotewotICAgIFtzZWxmIGRlc3Ryb3lGSUZPc107Ci0g
ICAgW3NlbGYgY3JlYXRlRklGT3NdOwotfQotCi0tICh2b2lkKXRlYXJEb3duCi17Ci0gICAgW3Nl
bGYgZGVzdHJveUZJRk9zXTsKLX0KLQotLSh2b2lkKSBjb25uZWN0Ci17Ci0gICAgX3N0YW5kYXJk
SW5wdXRQaXBlID0gW05TT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbVRvRmlsZUF0UGF0aDpbc2Vs
ZiBpblBpcGVQYXRoXSBhcHBlbmQ6WUVTXTsKLSAgICBfc3RhbmRhcmRPdXRwdXRQaXBlID0gW05T
SW5wdXRTdHJlYW0gaW5wdXRTdHJlYW1XaXRoRmlsZUF0UGF0aDpbc2VsZiBvdXRQaXBlUGF0aF1d
OwotICAgIF9zdGFuZGFyZEVycm9yUGlwZSA9IFtOU0lucHV0U3RyZWFtIGlucHV0U3RyZWFtV2l0
aEZpbGVBdFBhdGg6W3NlbGYgZXJyb3JQaXBlUGF0aF1dOwotCi0gICAgW1tzZWxmIHN0YW5kYXJk
SW5wdXRQaXBlXSBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRPdXRwdXRQ
aXBlXSBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICBbW3NlbGYgc3RhbmRhcmRFcnJvclBpcGVdIHNl
dERlbGVnYXRlOnNlbGZdOwotCi0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gc2NoZWR1
bGVJblJ1bkxvb3A6W05TUnVuTG9vcCBtYWluUnVuTG9vcF0gZm9yTW9kZTpOU0RlZmF1bHRSdW5M
b29wTW9kZV07Ci0gICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JQaXBlXSBzY2hlZHVsZUluUnVuTG9v
cDpbTlNSdW5Mb29wIG1haW5SdW5Mb29wXSBmb3JNb2RlOk5TRGVmYXVsdFJ1bkxvb3BNb2RlXTsK
LQotICAgIFtbc2VsZiBzdGFuZGFyZElucHV0UGlwZV0gb3Blbl07Ci0gICAgW1tzZWxmIHN0YW5k
YXJkT3V0cHV0UGlwZV0gb3Blbl07Ci0gICAgW1tzZWxmIHN0YW5kYXJkRXJyb3JQaXBlXSBvcGVu
XTsKLQotICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRDb25uZWN0XTsKLX0KLQotLSAodm9p
ZClkaXNjb25uZWN0Ci17Ci0gICAgW1tzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0gY2xvc2VdOwot
ICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yUGlwZV0gY2xvc2VdOwotICAgIFtbc2VsZiBzdGFuZGFy
ZElucHV0UGlwZV0gY2xvc2VdOwotICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWREaXNjb25u
ZWN0XTsKLX0KLQotLSAodm9pZCljcmVhdGVGSUZPcwotewotICAgIG1rZmlmbyhbW3NlbGYgaW5Q
aXBlUGF0aF0gVVRGOFN0cmluZ10sIDA2NjYpOwotICAgIG1rZmlmbyhbW3NlbGYgb3V0UGlwZVBh
dGhdIFVURjhTdHJpbmddLCAwNjY2KTsKLSAgICBta2ZpZm8oW1tzZWxmIGVycm9yUGlwZVBhdGhd
IFVURjhTdHJpbmddLCAwNjY2KTsKLX0KLQotLSAodm9pZClkZXN0cm95RklGT3MKLXsKLSAgICB1
bmxpbmsoW1tzZWxmIGluUGlwZVBhdGhdIFVURjhTdHJpbmddKTsKLSAgICB1bmxpbmsoW1tzZWxm
IG91dFBpcGVQYXRoXSBVVEY4U3RyaW5nXSk7Ci0gICAgdW5saW5rKFtbc2VsZiBlcnJvclBpcGVQ
YXRoXSBVVEY4U3RyaW5nXSk7Ci19Ci0KLS0gKHZvaWQpIHJlbGF5U3RyZWFtOihOU0lucHV0U3Ry
ZWFtICopc3RyZWFtCi17Ci0gICAgdWludDhfdCBieXRlc1sxMDI0XTsKLSAgICBOU0ludGVnZXIg
Ynl0ZXNSZWFkID0gW3N0cmVhbSByZWFkOmJ5dGVzIG1heExlbmd0aDoxMDI0XTsKLSAgICBOU0Rh
dGEgKmRhdGEgPSBbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6Ynl0ZXMgbGVuZ3RoOmJ5dGVzUmVhZF07
Ci0KLSAgICBpZiAoc3RyZWFtID09IFtzZWxmIHN0YW5kYXJkT3V0cHV0UGlwZV0pCi0gICAgICAg
IFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRSZWNlaXZlU3Rkb3V0RGF0YTpkYXRhXTsKLSAgICBl
bHNlCi0gICAgICAgIFtbc2VsZiByZWxheURlbGVnYXRlXSBkaWRSZWNlaXZlU3RkZXJyRGF0YTpk
YXRhXTsKLX0KLQotLSAodm9pZClzdHJlYW06KE5TU3RyZWFtICopYVN0cmVhbSBoYW5kbGVFdmVu
dDooTlNTdHJlYW1FdmVudClldmVudENvZGUKLXsKLSAgICBzd2l0Y2ggKGV2ZW50Q29kZSkgewot
ICAgIGNhc2UgTlNTdHJlYW1FdmVudE5vbmU6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlNT
dHJlYW1FdmVudEhhc0J5dGVzQXZhaWxhYmxlOgotICAgICAgICBbc2VsZiByZWxheVN0cmVhbToo
TlNJbnB1dFN0cmVhbSAqKWFTdHJlYW1dOwotICAgIGNhc2UgTlNTdHJlYW1FdmVudEhhc1NwYWNl
QXZhaWxhYmxlOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnRPcGVuQ29t
cGxldGVkOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5TU3RyZWFtRXZlbnRFbmRFbmNvdW50
ZXJlZDoKLSAgICAgICAgW1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZENyYXNoV2l0aE1lc3NhZ2U6
bmlsXTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOU1N0cmVhbUV2ZW50RXJyb3JPY2N1cnJl
ZDoKLSAgICAgICAgW1tzZWxmIHJlbGF5RGVsZWdhdGVdIGRpZENyYXNoV2l0aE1lc3NhZ2U6W1th
U3RyZWFtIHN0cmVhbUVycm9yXSBkZXNjcmlwdGlvbl1dOwotICAgICAgICBicmVhazsKLSAgICB9
Ci19Ci0KLUBlbmQKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkv
TFRSZWxheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0
UmVsYXkvTFRSZWxheS5oCShyZXZpc2lvbiAyMTE5NjEpCisrKyBUb29scy9MYXlvdXRUZXN0UmVs
YXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXkuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQ4ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIExUUmVsYXlfaAotI2RlZmluZSBMVFJlbGF5X2gKLQot
I2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLUBwcm90b2NvbCBMVFJlbGF5RGVs
ZWdhdGUgPE5TT2JqZWN0PgotLSAodm9pZClkaWRDb25uZWN0OwotLSAodm9pZClkaWREaXNjb25u
ZWN0OwotLSAodm9pZClkaWRDcmFzaFdpdGhNZXNzYWdlOihOU1N0cmluZyAqKW1lc3NhZ2U7Ci0t
ICh2b2lkKWRpZFJlY2VpdmVTdGRvdXREYXRhOihOU0RhdGEgKilkYXRhOwotLSAodm9pZClkaWRS
ZWNlaXZlU3RkZXJyRGF0YTooTlNEYXRhICopZGF0YTsKLUBlbmQKLQotQHByb3RvY29sIExUUmVs
YXkgPE5TT2JqZWN0LCBOU1N0cmVhbURlbGVnYXRlPgotLSAodm9pZClzZXR1cDsKLS0gKHZvaWQp
dGVhckRvd247Ci0tICh2b2lkKWNvbm5lY3Q7Ci0tICh2b2lkKWRpc2Nvbm5lY3Q7Ci1AcHJvcGVy
dHkgKHdlYWspIGlkPExUUmVsYXlEZWxlZ2F0ZT4gcmVsYXlEZWxlZ2F0ZTsKLUBwcm9wZXJ0eSAo
cmVhZG9ubHksIHN0cm9uZykgTlNPdXRwdXRTdHJlYW0gKm91dHB1dFN0cmVhbTsKLUBlbmQKLQot
I2VuZGlmCkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVs
YXlDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91
dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5oCShyZXZpc2lvbiAyMTE5NjEpCisrKyBUb29s
cy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L0xUUmVsYXlDb250cm9sbGVyLmgJKG5v
bmV4aXN0ZW50KQpAQCAtMSw0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgTFRSZWxheUNv
bnRyb2xsZXJfaAotI2RlZmluZSBMVFJlbGF5Q29udHJvbGxlcl9oCi0KLSNpbXBvcnQgIkxUUmVs
YXkuaCIKLQotI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Ci0KLUBjbGFzcyBTaW1E
ZXZpY2U7Ci0KLUBpbnRlcmZhY2UgTFRSZWxheUNvbnRyb2xsZXIgOiBOU09iamVjdCA8TFRSZWxh
eURlbGVnYXRlPgotLSAoaWQpaW5pdFdpdGhEZXZpY2U6KFNpbURldmljZSAqKWRldmljZSBwcm9k
dWN0RGlyOihOU1N0cmluZyAqKXByb2R1Y3REaXIgYXBwUGF0aDooTlNTdHJpbmcgKilhcHBQYXRo
IGRldmljZVVESUQ6KE5TVVVJRCAqKXVkaWQgZHVtcFRvb2xBcmd1bWVudHM6KE5TQXJyYXkgKilh
cmd1bWVudHM7Ci0tICh2b2lkKXN0YXJ0OwotLSAodm9pZClmaW5pc2g7Ci1AZW5kCi0KLSNlbmRp
ZgpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29u
dHJvbGxlci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0
UmVsYXkvTFRSZWxheUNvbnRyb2xsZXIubQkocmV2aXNpb24gMjExOTYxKQorKysgVG9vbHMvTGF5
b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9MVFJlbGF5Q29udHJvbGxlci5tCShub25leGlz
dGVudCkKQEAgLTEsMjcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJMVFJlbGF5Q29u
dHJvbGxlci5oIgotCi0jaW1wb3J0ICJDb3JlU2ltdWxhdG9yU1BJLmgiCi0jaW1wb3J0ICJMVFBp
cGVSZWxheS5oIgotI2ltcG9ydCA8QXBwS2l0L0FwcEtpdC5oPgotI2ltcG9ydCA8Y3J0X2V4dGVy
bnMuaD4KLQotQGludGVyZmFjZSBMVFJlbGF5Q29udHJvbGxlciAoKQotQHByb3BlcnR5IChyZWFk
b25seSwgc3Ryb25nKSBkaXNwYXRjaF9zb3VyY2VfdCBzdGFuZGFyZElucHV0RGlzcGF0Y2hTb3Vy
Y2U7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TRmlsZUhhbmRsZSAqc3RhbmRhcmRP
dXRwdXQ7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TRmlsZUhhbmRsZSAqc3RhbmRh
cmRFcnJvcjsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKmlwY0lkZW50
aWZpZXI7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBzdHJvbmcpIE5TU3RyaW5nICphcHBCdW5kbGVJ
ZGVudGlmaWVyOwotQHByb3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU1N0cmluZyAqYXBwUGF0
aDsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNVVUlEICpkZXZpY2VVRElEOwotQHBy
b3BlcnR5IChyZWFkb25seSwgc3Ryb25nKSBOU0FycmF5ICpkdW1wVG9vbEFyZ3VtZW50czsKLUBw
cm9wZXJ0eSAocmVhZG9ubHksIHN0cm9uZykgTlNTdHJpbmcgKnByb2R1Y3REaXI7Ci1AcHJvcGVy
dHkgKHN0cm9uZykgU2ltRGV2aWNlICpkZXZpY2U7Ci1AcHJvcGVydHkgKHN0cm9uZykgaWQ8TFRS
ZWxheT4gcmVsYXk7Ci1AcHJvcGVydHkgcGlkX3QgcGlkOwotQHByb3BlcnR5IChzdHJvbmcpIGRp
c3BhdGNoX3NvdXJjZV90IGFwcERpc3BhdGNoU291cmNlOwotQGVuZAotCi1AaW1wbGVtZW50YXRp
b24gTFRSZWxheUNvbnRyb2xsZXIKLQotLSAoaWQpaW5pdFdpdGhEZXZpY2U6KFNpbURldmljZSAq
KWRldmljZSBwcm9kdWN0RGlyOihOU1N0cmluZyAqKXByb2R1Y3REaXIgYXBwUGF0aDooTlNTdHJp
bmcgKilhcHBQYXRoIGRldmljZVVESUQ6KE5TVVVJRCAqKXVkaWQgZHVtcFRvb2xBcmd1bWVudHM6
KE5TQXJyYXkgKilhcmd1bWVudHMKLXsKLSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKSB7
Ci0gICAgICAgIF9kZXZpY2UgPSBkZXZpY2U7Ci0gICAgICAgIF9wcm9kdWN0RGlyID0gcHJvZHVj
dERpcjsKLSAgICAgICAgX2FwcFBhdGggPSBhcHBQYXRoOwotICAgICAgICBfYXBwQnVuZGxlSWRl
bnRpZmllciA9IFtbTlNCdW5kbGUgYnVuZGxlV2l0aFBhdGg6YXBwUGF0aF0gYnVuZGxlSWRlbnRp
Zmllcl07Ci0gICAgICAgIF9kZXZpY2VVRElEID0gdWRpZDsKLSAgICAgICAgX2R1bXBUb29sQXJn
dW1lbnRzID0gYXJndW1lbnRzOwotICAgICAgICBfc3RhbmRhcmRJbnB1dERpc3BhdGNoU291cmNl
ID0gZGlzcGF0Y2hfc291cmNlX2NyZWF0ZShESVNQQVRDSF9TT1VSQ0VfVFlQRV9SRUFELCBTVERJ
Tl9GSUxFTk8sIDAsIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCkpOwotICAgICAgICBfc3RhbmRh
cmRPdXRwdXQgPSBbTlNGaWxlSGFuZGxlIGZpbGVIYW5kbGVXaXRoU3RhbmRhcmRPdXRwdXRdOwot
ICAgICAgICBfc3RhbmRhcmRFcnJvciA9IFtOU0ZpbGVIYW5kbGUgZmlsZUhhbmRsZVdpdGhTdGFu
ZGFyZEVycm9yXTsKLQotICAgICAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2V2ZW50X2hhbmRsZXIo
X3N0YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJjZSwgXnsKLSAgICAgICAgICAgIHVpbnQ4X3QgYnVm
ZmVyWzEwMjRdOwotICAgICAgICAgICAgc3NpemVfdCBsZW4gPSByZWFkKFNURElOX0ZJTEVOTywg
YnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7Ci0gICAgICAgICAgICBpZiAobGVuID4gMCkgewotICAg
ICAgICAgICAgICAgIEB0cnkgewotICAgICAgICAgICAgICAgICAgICBbW1tzZWxmIHJlbGF5XSBv
dXRwdXRTdHJlYW1dIHdyaXRlOmJ1ZmZlciBtYXhMZW5ndGg6bGVuXTsKLSAgICAgICAgICAgICAg
ICB9IEBjYXRjaCAoTlNFeGNlcHRpb24gKmUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQnJv
a2VuIHBpcGUgLSB0aGUgZHVtcCB0b29sIGNyYXNoZWQuIFRpbWUgdG8gZGllLgotICAgICAgICAg
ICAgICAgICAgICBbc2VsZiBkaWRDcmFzaFdpdGhNZXNzYWdlOm5pbF07Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBFT0YgUmVjZWl2
ZWQgb24gdGhlIHJlbGF5J3Mgc3RhbmRhcmQgaW5wdXQuCi0gICAgICAgICAgICAgICAgW3NlbGYg
ZmluaXNoXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgX3JlbGF5ID0g
W1tMVFBpcGVSZWxheSBhbGxvY10gaW5pdFdpdGhQcmVmaXg6W0AiL3RtcCIgc3RyaW5nQnlBcHBl
bmRpbmdQYXRoQ29tcG9uZW50OnNlbGYuaXBjSWRlbnRpZmllcl1dOwotICAgICAgICBbX3JlbGF5
IHNldFJlbGF5RGVsZWdhdGU6c2VsZl07Ci0gICAgfQotICAgIHJldHVybiBzZWxmOwotfQotCi0t
IChOU1N0cmluZyAqKWlwY0lkZW50aWZpZXIKLXsKLSAgICByZXR1cm4gW05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6QCIlQC0lQCIsIHNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciwgc2VsZi5kZXZp
Y2VVRElELlVVSURTdHJpbmddOwotfQotCi0tIChOU1N0cmluZyAqKXByb2Nlc3NOYW1lCi17Ci0g
ICAgcmV0dXJuIFtzZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIgY29tcG9uZW50c1NlcGFyYXRlZEJ5
U3RyaW5nOkAiLiJdLmxhc3RPYmplY3Q7Ci19Ci0KLS0gKHZvaWQpZGlkUmVjZWl2ZVN0ZG91dERh
dGE6KE5TRGF0YSAqKWRhdGEKLXsKLSAgICBAdHJ5IHsKLSAgICAgICAgW1tzZWxmIHN0YW5kYXJk
T3V0cHV0XSB3cml0ZURhdGE6ZGF0YV07Ci0gICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNl
cHRpb24pIHsKLSAgICAgICAgLy8gTlNGaWxlSGFuZGxlT3BlcmF0aW9uRXhjZXB0aW9uCi0gICAg
ICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhlIHRlc3QgaGFybmVzcyBzdG9wcGVkIGxpc3RlbmluZyB0
byB1cywKLSAgICAgICAgLy8gcHJvYmFibHkgYmVjYXVzZSB3ZSB0aW1lZCBvdXQgb3IgYSBydW4g
d2FzIGNhbmNlbGVkLgotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotfQotCi0t
ICh2b2lkKWRpZFJlY2VpdmVTdGRlcnJEYXRhOihOU0RhdGEgKilkYXRhCi17Ci0gICAgQHRyeSB7
Ci0gICAgICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSB3cml0ZURhdGE6ZGF0YV07Ci0gICAgfSBA
Y2F0Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRpb24pIHsKLSAgICAgICAgLy8gTlNGaWxlSGFuZGxl
T3BlcmF0aW9uRXhjZXB0aW9uCi0gICAgICAgIC8vIEJyb2tlbiBwaXBlIC0gdGhlIHRlc3QgaGFy
bmVzcyBzdG9wcGVkIGxpc3RlbmluZyB0byB1cywKLSAgICAgICAgLy8gcHJvYmFibHkgYmVjYXVz
ZSB3ZSB0aW1lZCBvdXQgb3IgYSBydW4gd2FzIGNhbmNlbGVkLgotICAgICAgICBleGl0KEVYSVRf
RkFJTFVSRSk7Ci0gICAgfQotfQotCi0tICh2b2lkKWRpZERpc2Nvbm5lY3QKLXsKLSAgICBkaXNw
YXRjaF9zdXNwZW5kKFtzZWxmIHN0YW5kYXJkSW5wdXREaXNwYXRjaFNvdXJjZV0pOwotfQotCi0t
ICh2b2lkKWRpZENvbm5lY3QKLXsKLSAgICBkaXNwYXRjaF9yZXN1bWUoW3NlbGYgc3RhbmRhcmRJ
bnB1dERpc3BhdGNoU291cmNlXSk7Ci19Ci0KLS0gKHZvaWQpZGlkQ3Jhc2hXaXRoTWVzc2FnZToo
TlNTdHJpbmcgKiltZXNzYWdlCi17Ci0gICAgW1tzZWxmIHJlbGF5XSBkaXNjb25uZWN0XTsKLSAg
ICBOU1N0cmluZyAqY3Jhc2hNZXNzYWdlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJc
biNDUkFTSEVEIC0gJUAgKHBpZCAlZClcbiIsIFtzZWxmIHByb2Nlc3NOYW1lXSwgW3NlbGYgcGlk
XV07Ci0KLSAgICBpZiAobWVzc2FnZSkKLSAgICAgICAgY3Jhc2hNZXNzYWdlID0gW2NyYXNoTWVz
c2FnZSBzdHJpbmdCeUFwcGVuZGluZ0Zvcm1hdDpAIiVAXG4iLCBtZXNzYWdlXTsKLQotICAgIFtb
c2VsZiBzdGFuZGFyZEVycm9yXSB3cml0ZURhdGE6W2NyYXNoTWVzc2FnZSBkYXRhVXNpbmdFbmNv
ZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ11dOwotICAgIFtbc2VsZiBzdGFuZGFyZEVycm9yXSBj
bG9zZUZpbGVdOwotICAgIFtbc2VsZiBzdGFuZGFyZE91dHB1dF0gY2xvc2VGaWxlXTsKLSAgICBl
eGl0KEVYSVRfRkFJTFVSRSk7Ci19Ci0KLS0gKHZvaWQpaW5zdGFsbEFwcAotewotICAgIE5TRGlj
dGlvbmFyeSAqaW5zdGFsbE9wdGlvbnMgPSBAewotICAgICAgICAoTlNTdHJpbmcgKilrQ0ZCdW5k
bGVJZGVudGlmaWVyS2V5OiBzZWxmLmFwcEJ1bmRsZUlkZW50aWZpZXIsCi0gICAgfTsKLQotICAg
IE5TRXJyb3IgKmVycm9yID0gbmlsOwotICAgIEJPT0wgaW5zdGFsbGVkID0gW3NlbGYuZGV2aWNl
IGluc3RhbGxBcHBsaWNhdGlvbjpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnNlbGYuYXBwUGF0aF0g
d2l0aE9wdGlvbnM6aW5zdGFsbE9wdGlvbnMgZXJyb3I6JmVycm9yXTsKLSAgICBpZiAoIWluc3Rh
bGxlZCkgewotICAgICAgICBOU0xvZyhAIkNvdWxkbid0IGluc3RhbGwgJUA6ICVAIiwgc2VsZi5h
cHBQYXRoLCBlcnJvci5kZXNjcmlwdGlvbik7Ci0gICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsK
LSAgICB9Ci19Ci0KLS0gKHZvaWQpa2lsbEFwcAotewotICAgIGRpc3BhdGNoX3NvdXJjZV90IGRp
c3BhdGNoID0gW3NlbGYgYXBwRGlzcGF0Y2hTb3VyY2VdOwotCi0gICAgaWYgKGRpc3BhdGNoKQot
ICAgICAgICBkaXNwYXRjaF9zb3VyY2VfY2FuY2VsKGRpc3BhdGNoKTsKLQotICAgIGlmIChbc2Vs
ZiBwaWRdID4gMSkgewotICAgICAgICBraWxsKHNlbGYucGlkLCBTSUdLSUxMKTsKLSAgICAgICAg
W3NlbGYgc2V0UGlkOi0xXTsKLSAgICB9Ci0gICAgW3NlbGYgc2V0QXBwRGlzcGF0Y2hTb3VyY2U6
bmlsXTsKLX0KLQotLSAoTlNEaWN0aW9uYXJ5ICopX2Vudmlyb25tZW50VmFyaWFibGVzCi17Ci0g
ICAgc3RhdGljIE5TRGljdGlvbmFyeSAqZW52aXJvbm1lbnRWYXJpYWJsZXM7Ci0gICAgc3RhdGlj
IGRpc3BhdGNoX29uY2VfdCBvbmNlOwotCi0gICAgZGlzcGF0Y2hfb25jZSgmb25jZSwgXnsKLSAg
ICAgICAgTlNTdHJpbmcgKnByb2R1Y3REaXJlY3RvcnkgPSBbc2VsZiBwcm9kdWN0RGlyXTsKLQot
ICAgICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gW0B7Ci0gICAgICAgICAg
ICBAIklQQ19JREVOVElGSUVSIjogc2VsZi5pcGNJZGVudGlmaWVyLAotICAgICAgICAgICAgQCJE
WUxEX0ZSQU1FV09SS19QQVRIIjogcHJvZHVjdERpcmVjdG9yeSwKLSAgICAgICAgICAgIEAiX19Y
UENfRFlMRF9GUkFNRVdPUktfUEFUSCI6IHByb2R1Y3REaXJlY3RvcnksCi0gICAgICAgICAgICBA
IkRZTERfTElCUkFSWV9QQVRIIjogcHJvZHVjdERpcmVjdG9yeSwKLSAgICAgICAgICAgIEAiX19Y
UENfRFlMRF9MSUJSQVJZX1BBVEgiOiBwcm9kdWN0RGlyZWN0b3J5LAotICAgICAgICB9IG11dGFi
bGVDb3B5XTsKLQotICAgICAgICBmb3IgKE5TU3RyaW5nICprZXlOYW1lIGluIEBbQCJEWUxEX0lO
U0VSVF9MSUJSQVJJRVMiLCBAIk1hbGxvY1N0YWNrTG9nZ2luZyIsIEAiTE9DQUxfUkVTT1VSQ0Vf
Uk9PVCIsIEAiRFVNUFJFTkRFUlRSRUVfVEVNUCJdKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFy
KiB2YWx1ZSA9IGdldGVudihba2V5TmFtZSBVVEY4U3RyaW5nXSk7Ci0gICAgICAgICAgICBpZiAo
dmFsdWUgJiYgc3RybGVuKHZhbHVlKSkgewotICAgICAgICAgICAgICAgIE5TU3RyaW5nICpuc1Zh
bHVlID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnZhbHVlXTsKLSAgICAgICAgICAg
ICAgICBbZGljdGlvbmFyeSBzZXRPYmplY3Q6bnNWYWx1ZSBmb3JLZXk6a2V5TmFtZV07Ci0gICAg
ICAgICAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0Om5zVmFsdWUgZm9yS2V5OltAIl9fWFBD
XyIgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6a2V5TmFtZV1dOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgZm9yIChjaGFyKiogZW52cCA9ICpfTlNHZXRFbnZpcm9uKCk7ICpl
bnZwOyBlbnZwKyspIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVudiA9ICplbnZwOwotICAg
ICAgICAgICAgaWYgKCFzdHJuY21wKCJKU0NfIiwgZW52LCA0KSB8fCAhc3RybmNtcCgiX19YUENf
SlNDXyIsIGVudiwgMTApKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXF1YWwgPSBz
dHJjaHIoZW52LCAnPScpOwotICAgICAgICAgICAgICAgIGlmICghZXF1YWwpIHsKLSAgICAgICAg
ICAgICAgICAgICAgTlNMb2coQCJNaXNzaW5nICc9JyBpbiBlbnYgdmFyICclcyciLCBlbnYpOwot
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heEtleUxlbmd0aCA9IDI1NjsKLSAgICAg
ICAgICAgICAgICBzaXplX3Qga2V5TGVuZ3RoID0gZXF1YWwgLSBlbnY7Ci0gICAgICAgICAgICAg
ICAgaWYgKGtleUxlbmd0aCA+PSBtYXhLZXlMZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAg
TlNMb2coQCJFbnYgdmFyICclcycgaXMgdG9vIGxvbmciLCBlbnYpOwotICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjaGFy
IGtleVttYXhLZXlMZW5ndGhdOwotICAgICAgICAgICAgICAgIHN0cm5jcHkoa2V5LCBlbnYsIGtl
eUxlbmd0aCk7Ci0gICAgICAgICAgICAgICAga2V5W2tleUxlbmd0aF0gPSAnXDAnOwotICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIHZhbHVlID0gZXF1YWwgKyAxOwotCi0gICAgICAgICAgICAg
ICAgTlNTdHJpbmcgKm5zS2V5ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmtleV07
Ci0gICAgICAgICAgICAgICAgTlNTdHJpbmcgKm5zVmFsdWUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0
aFVURjhTdHJpbmc6dmFsdWVdOwotICAgICAgICAgICAgICAgIFtkaWN0aW9uYXJ5IHNldE9iamVj
dDpuc1ZhbHVlIGZvcktleTpuc0tleV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBlbnZpcm9ubWVudFZhcmlhYmxlcyA9IFtkaWN0aW9uYXJ5IGNvcHldOwotICAgIH0pOwot
Ci0gICAgcmV0dXJuIGVudmlyb25tZW50VmFyaWFibGVzOwotfQotCi0tICh2b2lkKWxhdW5jaEFw
cAotewotICAgIE5TRGljdGlvbmFyeSAqbGF1bmNoT3B0aW9ucyA9IEB7Ci0gICAgICAgIGtTaW1E
ZXZpY2VMYXVuY2hBcHBsaWNhdGlvbkVudmlyb25tZW50OiBbc2VsZiBfZW52aXJvbm1lbnRWYXJp
YWJsZXNdLAotICAgICAgICBrU2ltRGV2aWNlTGF1bmNoQXBwbGljYXRpb25Bcmd1bWVudHM6IFtz
ZWxmIGR1bXBUb29sQXJndW1lbnRzXSwKLSAgICB9OwotCi0gICAgTlNFcnJvciAqZXJyb3I7Ci0g
ICAgcGlkX3QgcGlkID0gW3NlbGYuZGV2aWNlIGxhdW5jaEFwcGxpY2F0aW9uV2l0aElEOnNlbGYu
YXBwQnVuZGxlSWRlbnRpZmllciBvcHRpb25zOmxhdW5jaE9wdGlvbnMgZXJyb3I6JmVycm9yXTsK
LQotICAgIGlmIChwaWQgPCAwKSB7Ci0gICAgICAgIE5TTG9nKEAiQ291bGRuJ3QgbGF1bmNoICVA
OiAlQCIsIHNlbGYuYXBwQnVuZGxlSWRlbnRpZmllciwgZXJyb3IuZGVzY3JpcHRpb24pOwotICAg
ICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotCi0gICAgW3NlbGYgc2V0UGlkOnBpZF07
Ci0KLSAgICBkaXNwYXRjaF9xdWV1ZV90IHF1ZXVlID0gZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUo
KTsKLSAgICBkaXNwYXRjaF9zb3VyY2VfdCBzaW11bGF0b3JBcHBFeGl0RGlzcGF0Y2hTb3VyY2Ug
PSBkaXNwYXRjaF9zb3VyY2VfY3JlYXRlKERJU1BBVENIX1NPVVJDRV9UWVBFX1BST0MsIFtzZWxm
IHBpZF0sIERJU1BBVENIX1BST0NfRVhJVCwgcXVldWUpOwotICAgIFtzZWxmIHNldEFwcERpc3Bh
dGNoU291cmNlOnNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZV07Ci0gICAgZGlzcGF0Y2hf
c291cmNlX3NldF9ldmVudF9oYW5kbGVyKHNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSwg
XnsKLSAgICAgICAgZGlzcGF0Y2hfc291cmNlX2NhbmNlbChzaW11bGF0b3JBcHBFeGl0RGlzcGF0
Y2hTb3VyY2UpOwotICAgICAgICBbc2VsZiBkaWRDcmFzaFdpdGhNZXNzYWdlOm5pbF07Ci0gICAg
fSk7Ci0gICAgZGlzcGF0Y2hfcmVzdW1lKHNpbXVsYXRvckFwcEV4aXREaXNwYXRjaFNvdXJjZSk7
Ci19Ci0KLS0gKHZvaWQpc3RhcnQKLXsKLSAgICBbc2VsZiBpbnN0YWxsQXBwXTsKLSAgICBbW3Nl
bGYgcmVsYXldIHNldHVwXTsKLSAgICBbc2VsZiBsYXVuY2hBcHBdOwotICAgIFtbc2VsZiByZWxh
eV0gY29ubmVjdF07Ci19Ci0KLS0gKHZvaWQpZmluaXNoCi17Ci0gICAgW1tzZWxmIHJlbGF5XSBk
aXNjb25uZWN0XTsKLSAgICBbc2VsZiBraWxsQXBwXTsKLSAgICBleGl0KEVYSVRfU1VDQ0VTUyk7
Ci19Ci0KLUBlbmQKSW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkv
bWFpbi5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVs
YXkvbWFpbi5tCShyZXZpc2lvbiAyMTE5NjEpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5
b3V0VGVzdFJlbGF5L21haW4ubQkobm9uZXhpc3RlbnQpCkBAIC0xLDEzMyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiQ29yZVNpbXVsYXRvclNQSS5oIgotI2ltcG9ydCAiTFRS
ZWxheUNvbnRyb2xsZXIuaCIKLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotCi1z
dGF0aWMgTFRSZWxheUNvbnRyb2xsZXIgKnJlbGF5Q29udHJvbGxlcjsKLQotdm9pZCB1c2FnZSgp
Ci17Ci0gICAgTlNTdHJpbmcgKmhlbHBUZXh0ID0gQCJMYXlvdXRUZXN0UmVsYXk6IHJ1biBhIGR1
bXAgdG9vbCBpbiB0aGUgc2ltdWxhdG9yLiBOb3QgZm9yIGRpcmVjdCBjb25zdW1wdGlvbi5cbiIK
LSAgICAgICAgIlVzYWdlOiBMYXlvdXRUZXN0UmVsYXkgWy1oXSBbb3B0aW9uc10gLS0gW2R1bXAg
dG9vbCBhcmd1bWVudHNdXG4iCi0gICAgICAgICJSZXF1aXJlZCBvcHRpb25zOlxuIgotICAgICAg
ICAiICAgIC11ZGlkIDxpZGVudGlmaWVyPiAgICAgICBTaW11bGF0b3IgZGV2aWNlIGlkZW50aWZp
ZXJcbiIKLSAgICAgICAgIiAgICAtYXBwIDxhcHBfcGF0aD4gICAgICAgICAgUGF0aCB0byB0aGUg
YnVpbHQgaU9TIC5hcHAgYnVuZGxlIGRpcmVjdG9yeS5cbiIKLSAgICAgICAgIiAgICAtcHJvZHVj
dERpciA8ZGlyPiAgICAgICAgL3BhdGgvdG8vV2ViS2l0QnVpbGQve2NvbmZpZ3VyYXRpb259LXtz
aG9ydCBwbGF0Zm9ybX0uXG4iOwotCi0gICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgW2hlbHBU
ZXh0IFVURjhTdHJpbmddKTsKLX0KLQotTlNTdHJpbmcgKmdldFJlcXVpcmVkU3RyaW5nQXJndW1l
bnQoTlNTdHJpbmcgKnBhcmFtZXRlcikKLXsKLSAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMg
PSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdOwotICAgIE5TU3RyaW5nICph
cmd1bWVudCA9IFtkZWZhdWx0cyBzdHJpbmdGb3JLZXk6cGFyYW1ldGVyXTsKLQotICAgIGlmICgh
YXJndW1lbnQpIHsKLSAgICAgICAgTlNMb2coQCItJUAgaXMgcmVxdWlyZWQuIiwgcGFyYW1ldGVy
KTsKLSAgICAgICAgdXNhZ2UoKTsKLSAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0K
LSAgICByZXR1cm4gYXJndW1lbnQ7Ci19Ci0KLU5TQXJyYXkgKmdldER1bXBUb29sQXJndW1lbnRz
KCkKLXsKLSAgICBOU011dGFibGVBcnJheSAqZHVtcFRvb2xBcmd1bWVudHMgPSBbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0XTsKLSAgICBOU0FycmF5ICpwcm9jZXNzQXJncyA9IFtbTlNQcm9j
ZXNzSW5mbyBwcm9jZXNzSW5mb10gYXJndW1lbnRzXTsKLSAgICBCT09MIGFwcGVuZGluZyA9IE5P
OwotICAgIGZvciAoTlNTdHJpbmcgKmFyZyBpbiBwcm9jZXNzQXJncykgewotICAgICAgICBpZiAo
W2FyZyBpc0VxdWFsVG9TdHJpbmc6QCItLSJdKSB7Ci0gICAgICAgICAgICBhcHBlbmRpbmcgPSBZ
RVM7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoYXBwZW5k
aW5nKQotICAgICAgICAgICAgW2R1bXBUb29sQXJndW1lbnRzIGFkZE9iamVjdDphcmddOwotICAg
IH0KLSAgICByZXR1cm4gZHVtcFRvb2xBcmd1bWVudHM7Ci19Ci0KLXZvaWQgZmluaXNoKCkKLXsK
LSAgICBbcmVsYXlDb250cm9sbGVyIGZpbmlzaF07Ci19Ci0KLXZvaWQgcmVjZWl2ZWRTaWduYWwo
aW50IHNpZ25hbCkKLXsKLSAgICBleGl0KEVYSVRfU1VDQ0VTUyk7Ci19Ci0KLWludCBtYWluKGlu
dCBhcmdjLCBjb25zdCBjaGFyICogYXJndltdKQotewotICAgIEBhdXRvcmVsZWFzZXBvb2wgewot
ICAgICAgICBOU0FycmF5ICpoZWxwQXJndW1lbnRzID0gQFtAIi1oIiwgQCItLWhlbHAiXTsKLSAg
ICAgICAgZm9yIChOU1N0cmluZyAqaGVscEFyZ3VtZW50IGluIGhlbHBBcmd1bWVudHMpIHsKLSAg
ICAgICAgICAgIGlmIChbW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBhcmd1bWVudHNdIGlu
ZGV4T2ZPYmplY3Q6aGVscEFyZ3VtZW50XSAhPSBOU05vdEZvdW5kKSB7Ci0gICAgICAgICAgICAg
ICAgdXNhZ2UoKTsKLSAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotI2lmIFVTRV9TSU1fU0VSVklDRV9DT05URVhUCi0gICAgICAg
IE5TU3RyaW5nICpkZXZlbG9wZXJEaXJlY3RvcnkgPSBnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50
KEAiZGV2ZWxvcGVyRGlyIik7Ci0jZW5kaWYKLSAgICAgICAgTlNVVUlEICp1ZGlkID0gW1tOU1VV
SUQgYWxsb2NdIGluaXRXaXRoVVVJRFN0cmluZzpnZXRSZXF1aXJlZFN0cmluZ0FyZ3VtZW50KEAi
dWRpZCIpXTsKLSAgICAgICAgTlNTdHJpbmcgKmFwcFBhdGggPSBnZXRSZXF1aXJlZFN0cmluZ0Fy
Z3VtZW50KEAiYXBwIik7Ci0gICAgICAgIE5TU3RyaW5nICpwcm9kdWN0RGlyZWN0b3J5ID0gZ2V0
UmVxdWlyZWRTdHJpbmdBcmd1bWVudChAInByb2R1Y3REaXIiKTsKLSAgICAgICAgTlNBcnJheSAq
ZHVtcFRvb2xBcmd1bWVudHMgPSBnZXREdW1wVG9vbEFyZ3VtZW50cygpOwotCi0jaWYgVVNFX1NJ
TV9TRVJWSUNFX0NPTlRFWFQKLSAgICAgICAgTlNFcnJvciAqZXJyb3I7Ci0gICAgICAgIFNpbVNl
cnZpY2VDb250ZXh0ICpzZXJ2aWNlQ29udGV4dCA9IFtTaW1TZXJ2aWNlQ29udGV4dCBzaGFyZWRT
ZXJ2aWNlQ29udGV4dEZvckRldmVsb3BlckRpcjpkZXZlbG9wZXJEaXJlY3RvcnkgZXJyb3I6JmVy
cm9yXTsKLSAgICAgICAgaWYgKCFzZXJ2aWNlQ29udGV4dCkgewotICAgICAgICAgICAgTlNMb2co
QCJEZXZpY2UgY29udGV4dCBjb3VsZG4ndCBiZSBmb3VuZDogJUAiLCBlcnJvcik7Ci0gICAgICAg
ICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgIH0KLSAgICAgICAgU2ltRGV2aWNlU2V0
ICpkZXZpY2VTZXQgPSBbc2VydmljZUNvbnRleHQgZGVmYXVsdERldmljZVNldFdpdGhFcnJvcjpu
aWxdOwotICAgICAgICBpZiAoIWRldmljZVNldCkgewotICAgICAgICAgICAgTlNMb2coQCJEZWZh
dWx0IGRldmljZSBzZXQgY291bGRuJ3QgYmUgZm91bmQ6ICVAIiwgZXJyb3IpOwotICAgICAgICAg
ICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0gICAgICAgIFNpbURldmljZSAqZGV2
aWNlID0gW2RldmljZVNldC5kZXZpY2VzQnlVRElEIG9iamVjdEZvcktleTp1ZGlkXTsKLSNlbHNl
Ci0gICAgICAgIFNpbURldmljZSAqZGV2aWNlID0gW1NpbURldmljZVNldC5kZWZhdWx0U2V0LmRl
dmljZXNCeVVESUQgb2JqZWN0Rm9yS2V5OnVkaWRdOwotI2VuZGlmCi0gICAgICAgIGlmICghZGV2
aWNlKSB7Ci0gICAgICAgICAgICBOU0xvZyhAIkRldmljZSAlQCBjb3VsZG4ndCBiZSBmb3VuZCIs
IHVkaWQpOwotICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmVsYXlDb250cm9sbGVyID0gW1tMVFJlbGF5Q29udHJvbGxlciBhbGxvY10gaW5pdFdp
dGhEZXZpY2U6ZGV2aWNlIHByb2R1Y3REaXI6cHJvZHVjdERpcmVjdG9yeSBhcHBQYXRoOmFwcFBh
dGggZGV2aWNlVURJRDp1ZGlkIGR1bXBUb29sQXJndW1lbnRzOmR1bXBUb29sQXJndW1lbnRzXTsK
LSAgICAgICAgW3JlbGF5Q29udHJvbGxlciBzdGFydF07Ci0KLSAgICAgICAgYXRleGl0KGZpbmlz
aCk7Ci0gICAgICAgIHNpZ25hbChTSUdJTlQsIHJlY2VpdmVkU2lnbmFsKTsKLSAgICAgICAgc2ln
bmFsKFNJR1RFUk0sIHJlY2VpdmVkU2lnbmFsKTsKLQotICAgICAgICBbW05TUnVuTG9vcCBtYWlu
UnVuTG9vcF0gcnVuXTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19CkluZGV4OiBUb29scy9TY3Jp
cHRzL2J1aWxkLWxheW91dHRlc3RyZWxheQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2J1
aWxkLWxheW91dHRlc3RyZWxheQkocmV2aXNpb24gMjExOTYxKQorKysgVG9vbHMvU2NyaXB0cy9i
dWlsZC1sYXlvdXR0ZXN0cmVsYXkJKG5vbmV4aXN0ZW50KQpAQCAtMSw3MCArMCwwIEBACi0jIS91
c3IvYmluL3BlcmwgLXcKLQotIyBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1l
dDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSMgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0j
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSMgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0jIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi11c2Ugc3RyaWN0OwotdXNlIEZpbGU6OkJhc2VuYW1lOwotdXNlIEZpbmRCaW47Ci11c2Ug
R2V0b3B0OjpMb25nIHF3KDpjb25maWcgcGFzc190aHJvdWdoKTsKLXVzZSBsaWIgJEZpbmRCaW46
OkJpbjsKLXVzZSB3ZWJraXRkaXJzOwotCi1teSAkc2hvd0hlbHAgPSAwOwotbXkgJGNsZWFuID0g
MDsKLQotbXkgJHByb2dyYW1OYW1lID0gYmFzZW5hbWUoJDApOwotbXkgJHVzYWdlID0gPDxFT0Y7
Ci1Vc2FnZTogJHByb2dyYW1OYW1lIFtvcHRpb25zXSBbb3B0aW9ucyB0byBwYXNzIHRvIGJ1aWxk
IHN5c3RlbV0KLSAgLS1oZWxwICAgICAgICBTaG93IHRoaXMgaGVscCBtZXNzYWdlCi0gIC0tY2xl
YW4gICAgICAgQ2xlYW4gdXAgdGhlIGJ1aWxkIGRpcmVjdG9yeQotRU9GCi0KLW15ICRyZXN1bHQg
PSBHZXRPcHRpb25zKAotICAgICdoZWxwJyA9PiBcJHNob3dIZWxwLAotICAgICdjbGVhbicgPT4g
XCRjbGVhbiwKLSk7Ci0KLWlmICgkc2hvd0hlbHAgb3Igbm90ICRyZXN1bHQpIHsKLSAgIHByaW50
IFNUREVSUiAkdXNhZ2U7Ci0gICBleGl0IDE7Ci19Ci0KLWNoZWNrUmVxdWlyZWRTeXN0ZW1Db25m
aWcoKTsKLXNldENvbmZpZ3VyYXRpb24oKTsKLWNoZGlyV2ViS2l0KCk7Ci0KLWNoZGlyICJUb29s
cy9MYXlvdXRUZXN0UmVsYXkiIG9yIGRpZTsKLQotIyBGSVhNRTogVGhpcyB0b29sIGlzIG9ubHkg
dXNlZnVsIHdoZW4gYnVpbGRpbmcgV2ViS2l0IGZvciBpT1MgU2ltdWxhdG9yLiBGb3Igbm93LAot
IyAgICAgICAgdG8gYXZvaWQgYnJlYWtpbmcgc29tZSBBcHBsZSBJbnRlcm5hbCB0b29scyB3ZSBz
dXBwb3J0IGNhbGxpbmcgdGhpcyBzY3JpcHQKLSMgICAgICAgIHdpdGhvdXQgLS1pb3Mtc2ltdWxh
dG9yIHNvIGxvbmcgYXMgd2UgYXJlIGJ1aWxkaW5nIG9uIGEgTWFjLgotaWYgKGlzQXBwbGVNYWNX
ZWJLaXQoKSAmJiAhd2lsbFVzZUlPU0RldmljZVNESygpKSB7Ci0gICAgIyBGSVhNRTogQ2hhbmdp
bmcgU0RLIGF0IHRoaXMgcG9pbnQgcmVzdWx0cyBpbiBhbiBpbmNvbnNpc3RlbnQgd2Via2l0ZGly
cyBzdGF0ZS4KLSAgICAjIFdlIHNob3VsZCBtYWtlIGl0IHNvIHRoYXQgd2Via2l0ZGlycyBmdW5j
dGlvbnMgbmV2ZXIgc2VlIHRoZSB3cm9uZyBTREsuCi0gICAgc2V0WGNvZGVTREsodW5kZWYpOyAj
IEZvcmNlIHVzZSBvZiBNYWMgU0RLIGlmIC0taW9zLXNpbXVsYXRvciB3YXMgcGFzc2VkCi0gICAg
ZXhpdCBleGl0U3RhdHVzKGJ1aWxkWENvZGVQcm9qZWN0KCJMYXlvdXRUZXN0UmVsYXkiLCAkY2xl
YW4sIFhjb2RlT3B0aW9ucygpLCBAQVJHVikpOwotfQotCi1wcmludCBTVERFUlIgIkxheW91dFRl
c3RSZWxheSBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgaU9TIFNpbXVsYXRvci5cbiI7Ci1leGl0IDE7
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBUb29scy9TY3JpcHRzL2J1aWxkLWxheW91dHRlc3RyZWxh
eQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0xICswLDAgIyMKLSoKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogVG9vbHMvU2NyaXB0cy9idWlsZC13
ZWJraXQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQJKHJldmlzaW9u
IDIxMTk2MSkKKysrIFRvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CSh3b3JraW5nIGNvcHkpCkBA
IC0yMDAsMTAgKzIwMCw2IEBAIGlmIChpc0FwcGxlTWFjV2ViS2l0KCkpIHsKICAgICAgICAgcHVz
aCBAY29weUxpYnJhcmllc0FyZ3MsIHByb2R1Y3REaXIoKTsKICAgICAgICAgcHJpbnQoam9pbigi
ICIsIEBjb3B5TGlicmFyaWVzQXJncykgLiAiXG4iKTsKICAgICAgICAgKHN5c3RlbShAY29weUxp
YnJhcmllc0FyZ3MpID09IDApIG9yIGRpZTsKLQotICAgICAgICBpZiAod2lsbFVzZUlPU1NpbXVs
YXRvclNESygpKSB7Ci0gICAgICAgICAgICAoc3lzdGVtKCJwZXJsIiwgIlRvb2xzL1NjcmlwdHMv
YnVpbGQtbGF5b3V0dGVzdHJlbGF5IiwgYXJndW1lbnRzRm9yQ29uZmlndXJhdGlvbigpKSA9PSAw
KSBvciBkaWU7Ci0gICAgICAgIH0KICAgICB9CiAKICAgICAjIEJ1aWxkIFRvb2xzIG5lZWRlZCBm
b3IgQXBwbGUgcG9ydHMK
</data>
<flag name="review"
          id="322903"
          type_id="1"
          status="+"
          setter="dbates"
    />
          </attachment>
      

    </bug>

</bugzilla>