<?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>151243</bug_id>
          
          <creation_ts>2015-11-12 20:15:49 -0800</creation_ts>
          <short_desc>Use multiple iOS simulator instead of multiple apps on single simulator for running layout-tests</short_desc>
          <delta_ts>2017-03-15 17:19:30 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=152081</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=152146</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=152363</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=152157</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Aakash Jain">aakash_jain</reporter>
          <assigned_to name="Aakash Jain">aakash_jain</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>dburkart</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>dean_johnson</cc>
    
    <cc>glenn</cc>
    
    <cc>lforschler</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1141739</commentid>
    <comment_count>0</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2015-11-12 20:15:49 -0800</bug_when>
    <thetext>Currently, we run multiple instances of WebKitTestRunner.app in a single simulator device. This is not great, as there are many things on iOS that only work for foreground app. We should be starting multiple simulators.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141740</commentid>
    <comment_count>1</comment_count>
      <attachid>265465</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2015-11-12 20:18:19 -0800</bug_when>
    <thetext>Created attachment 265465
Proposed patch

Not completely ready, I am still working on couple of improvements. However I would like to get it reviewed meanwhile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141968</commentid>
    <comment_count>2</comment_count>
      <attachid>265510</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2015-11-13 16:00:38 -0800</bug_when>
    <thetext>Created attachment 265510
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142038</commentid>
    <comment_count>3</comment_count>
      <attachid>265510</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-11-13 22:55:36 -0800</bug_when>
    <thetext>Comment on attachment 265510
Updated patch

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

I have a number of comments, but not very deep ones. This needs to be reviewed by Dan Bates I think.

Great work overall!

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:81
&gt; +        self.MAX_NUM_OF_SIMULATOR = 5

What does this number mean, and how did you come up with it?

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:82
&gt; +        self.NUM_PROCESSES_PER_SIMULATOR = 100

Existing code uses &quot;num&quot; a lot, but I think that we should do better. First, it&apos;s an abbreviation, and second, it&apos;s not very clear.

Maybe something along the lines of &quot;PROCESS_COUNT_ESTIMATE_PER_SIMULATOR_INSTANCE&quot;?

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:84
&gt; +    def get_num_workers(self, test_inputs, num_workers):

This function does two things - a platform specific &quot;maximum_number_of_simulators&quot; computation, and computing a minimum between that and how many workers the test run needs. It seems better to keep these separate.

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:88
&gt; +            plimit = int(subprocess.check_output([&quot;launchctl&quot;, &quot;limit&quot;, &quot;maxproc&quot;]).strip().split()[1])
&gt; +            current_num_process = len(subprocess.check_output([&quot;ps&quot;, &quot;aux&quot;]).strip().split(&apos;\n&apos;))

Same comments about abbreviations. Maybe &quot;system_process_count_limit&quot; or &quot;maxproc&quot;? &quot;current_process_count&quot;?

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:93
&gt; +        except:
&gt; +            self._printer.write_update(&apos;Error in calculating number of processes&apos;)
&gt; +            num_sim = self.MAX_NUM_OF_SIMULATOR

When do we get here? Does it need to be a recoverable error, or can the script just die?

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:95
&gt; +        num_workers = min(num_workers, len(all_shards), num_sim, self.MAX_NUM_OF_SIMULATOR)

We should print an explanation when the effective simulator count is lower than what we&apos;d like it to be based on the number of CPU cores. The user needs to know that they can change system configuration to make tests run much faster.

&gt; Tools/Scripts/webkitpy/port/base.py:885
&gt; +    def reset_preferences(self, num_workers=1):

As elsewhere, it would help to elaborate on &quot;num&quot; - is this requested number, maximum number, or something else?

&gt; Tools/Scripts/webkitpy/port/ios.py:81
&gt; +    SIMULATOR_APP_PATH = &quot;/Applications/Xcode.app/Contents/Developer/Applications/Simulator.app&quot;

We should support having a non-default Xcode installation path. Not sure if we can just use xcrun, or respect some variable passed to higher level scripts.

&gt; Tools/Scripts/webkitpy/port/ios.py:208
&gt; +            time.sleep(1)

Should this only be done when host OS is 10.11 or older?

&gt; Tools/Scripts/webkitpy/port/ios.py:410
&gt; +        subprocess.call([self.LSREGISTER_PATH, &quot;-kill&quot;])

This a big hammer! Is there any way to not rebuild everything?

&gt; Tools/Scripts/webkitpy/port/ios.py:420
&gt; +            #_log.error(&quot;Data path for simulator &quot; + str(i) + &quot; is: &quot;+ data_path)

Let&apos;s not check in commented out code.

&gt; Tools/Scripts/webkitpy/port/ios.py:463
&gt; +        subprocess.call([&quot;install_name_tool&quot;, &quot;-add_rpath&quot;, &quot;/Applications/Xcode.app/Contents/Developer/Library/PrivateFrameworks/&quot;, destination + &quot;/Contents/MacOS/Simulator&quot;])

Same comment about Xcode path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143418</commentid>
    <comment_count>4</comment_count>
      <attachid>265510</attachid>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2015-11-19 13:43:27 -0800</bug_when>
    <thetext>Comment on attachment 265510
Updated patch

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

r=me after the comments, although I can&apos;t speak for the non-Python changes.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:82
&gt;&gt; +        self.NUM_PROCESSES_PER_SIMULATOR = 100
&gt; 
&gt; Existing code uses &quot;num&quot; a lot, but I think that we should do better. First, it&apos;s an abbreviation, and second, it&apos;s not very clear.
&gt; 
&gt; Maybe something along the lines of &quot;PROCESS_COUNT_ESTIMATE_PER_SIMULATOR_INSTANCE&quot;?

I think this naming conventions is fine and accurate.

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:87
&gt; +            plimit = int(subprocess.check_output([&quot;launchctl&quot;, &quot;limit&quot;, &quot;maxproc&quot;]).strip().split()[1])

I think it&apos;d be easier to do:

limit = int(subprocess.check_outpu([&quot;ulimit&quot;, &quot;-u&quot;]))

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:88
&gt;&gt; +            current_num_process = len(subprocess.check_output([&quot;ps&quot;, &quot;aux&quot;]).strip().split(&apos;\n&apos;))
&gt; 
&gt; Same comments about abbreviations. Maybe &quot;system_process_count_limit&quot; or &quot;maxproc&quot;? &quot;current_process_count&quot;?

current_num_process -&gt; current_num_processes

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:90
&gt; +            num_sim = (plimit - current_num_process) / self.NUM_PROCESSES_PER_SIMULATOR

Nit: If we want to strictly do integer division we should probably use // instead of /. (This doesn&apos;t apply to Python2, but explicit is better than implicit :))

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:91
&gt; +        except:

Which exception are you trying to catch? subprocess.CalledProcessError? We should be explicit in what we&apos;re catching so we don&apos;t run into edge cases of excepting something else unexpectedly.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:93
&gt;&gt; +            num_sim = self.MAX_NUM_OF_SIMULATOR
&gt; 
&gt; When do we get here? Does it need to be a recoverable error, or can the script just die?

This will cause issues if we don&apos;t raise the process limit cap. A quick sampling of our bots shows that around 330 processes are running on them, which means we will hit the default limit (709) spawning any more than 3 simulators.

I think if we fail on shell&apos;ing out to the appropriate commands we should simply default to 1 simulator, but I don&apos;t see a case where we should fail to run the commands if we use ps and ulimit.

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager.py:158
&gt; +        test_inputs = self._get_test_inputs(test_names, self._options.repeat_each, self._options.iterations)

Do these options default to integer values, or strings?

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/manager.py:159
&gt; +        num_workers = self._runner.get_num_workers(test_inputs, int(self._options.child_processes))

If the above options DO default to integers, we should probably follow the same convention for child_processes.

&gt;&gt; Tools/Scripts/webkitpy/port/base.py:885
&gt;&gt; +    def reset_preferences(self, num_workers=1):
&gt; 
&gt; As elsewhere, it would help to elaborate on &quot;num&quot; - is this requested number, maximum number, or something else?

I think num_workers is fine. I&apos;d assume num_workers is the number of workers to use.

&gt; Tools/Scripts/webkitpy/port/ios.py:203
&gt; +            device_udid = self.testing_device(i).udid

Why is testing_device a function? Shouldn&apos;t it be `testing_devices` as an array?

&gt; Tools/Scripts/webkitpy/port/ios.py:212
&gt; +            Simulator.wait_until_device_is_booted(self.testing_device(i).udid)

Ditto on testing_device comment.

&gt; Tools/Scripts/webkitpy/port/ios.py:233
&gt; +            except:

Can we explicitly catch an exception here instead of catching all cases?

&gt; Tools/Scripts/webkitpy/port/ios.py:255
&gt; +            testing_device = self.testing_device(i)

Ditto to testing_device comment above.

&gt; Tools/Scripts/webkitpy/port/ios.py:256
&gt; +            _log.debug(&apos;Verifying Simulator&apos; + str(i) + &apos; with UDID {0}.&apos;.format(testing_device.udid))

This is more idiomatic:
_log.debug(&apos;Verifying Simulator{0} with UDID {1}.&apos;.format(i, testing_device.udid))

&gt; Tools/Scripts/webkitpy/port/ios.py:335
&gt; +    def testing_device(self, number):

Ah, I see why you are using it as a function now. Still, maybe we should create all the testing_devices and put them in an array to access?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146225</commentid>
    <comment_count>5</comment_count>
      <attachid>266605</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2015-12-03 23:10:07 -0800</bug_when>
    <thetext>Created attachment 266605
Updated patch

Updated patch with the review comments incorporated and misc improvements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146995</commentid>
    <comment_count>6</comment_count>
      <attachid>266808</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2015-12-07 13:49:27 -0800</bug_when>
    <thetext>Created attachment 266808
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147006</commentid>
    <comment_count>7</comment_count>
      <attachid>266808</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-12-07 14:12:37 -0800</bug_when>
    <thetext>Comment on attachment 266808
Updated patch

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

&gt; Tools/Scripts/webkitpy/port/ios.py:78
&gt; +    num_workers = None

Do we need this despite default_child_processes being memoized?

&gt; Tools/Scripts/webkitpy/port/ios.py:135
&gt; +        num_cpu_cores = self._executive.cpu_count() / 2

For consistency, this should have &quot;count&quot; in the name. From the way it&apos;s used, I suggest a name like &quot;best_child_process_count_for_cpu&quot;.

&gt; Tools/Scripts/webkitpy/port/ios.py:139
&gt; +        maximum_simulator_count_on_this_system = (system_process_count_limit - current_process_count) // self.PROCESS_COUNT_ESTIMATE_PER_SIMULATOR_INSTANCE

Please add a FIXME about checking the amount of RAM.

&gt; Tools/Scripts/webkitpy/port/ios.py:142
&gt; +            _log.info(&apos;Please increase the process and file limit to launch more Simulators&apos;)

Where do we check the file limit?

Also, let&apos;s at least log the same info that Mac does:

                _log.warning(&quot;This machine could support %s child processes, but only has enough memory for %s.&quot; % (default_count, supportable_instances))

&gt; Tools/Scripts/webkitpy/port/ios.py:144
&gt; +            # FIXME: add url for webpage explaining how to increase these limits

WebKit style is to start FIXME with an upper case letter, and end with a period (i.e. to have a complete sentence).

&gt; Tools/Scripts/webkitpy/port/ios.py:226
&gt; +            if (int(self.host.platform._platform_module.mac_ver()[0].strip().replace(&quot;10.&quot;, &quot;&quot;)) &lt; 12):

I suggest comparing to &quot;10.10&quot; and &quot;10.11&quot; instead - that way it will be easier to find and delete in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147142</commentid>
    <comment_count>8</comment_count>
      <attachid>266839</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2015-12-07 18:25:28 -0800</bug_when>
    <thetext>Created attachment 266839
Updated patch with review comments incorporated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147339</commentid>
    <comment_count>9</comment_count>
      <attachid>266839</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-12-08 10:14:24 -0800</bug_when>
    <thetext>Comment on attachment 266839
Updated patch with review comments incorporated.

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

&gt; Tools/Scripts/webkitpy/port/ios.py:132
&gt; +    def num_child_processes(self):

Please rename to just &quot;child_processes&quot; or &quot;child_processes_option&quot;, as it&apos;s the same thing as the one in options.

&gt; Tools/Scripts/webkitpy/port/ios.py:143
&gt; +        # FIXME: We should also take into account the Add logic to take into account the available RAM.

Please fix the grammar, looks like two variants of the comment collided.

&gt; Tools/Scripts/webkitpy/port/ios.py:148
&gt; +            _log.warn(&quot;This machine could support %s child processes, but only has enough process limit for %s.&quot;
&gt; +                % (best_child_process_count_for_cpu, maximum_simulator_count_on_this_system))
&gt; +            _log.info(&apos;Run &quot;launchctl limit&quot; to check these limits&apos;)

Is there a reason to use different log levels here? These look like parts of the same message.

&gt; Tools/Scripts/webkitpy/port/ios.py:280
&gt; +            # FIXME: This creates the devices sequentially, this can be optimized.

I think that this can be more specific: &quot;This creates the devices sequentially, doing this in parallel can improve performance&quot;.

&gt; Tools/Scripts/webkitpy/port/ios.py:284
&gt; +            # FIXME: this is very slow, especially for mulitple simulators, we probably do not need

Please start the sentence with an upper case letter (&quot;This&quot;).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147382</commentid>
    <comment_count>10</comment_count>
      <attachid>266916</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2015-12-08 11:23:05 -0800</bug_when>
    <thetext>Created attachment 266916
Updated patch with review comments incorporated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147392</commentid>
    <comment_count>11</comment_count>
      <attachid>266916</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-08 11:30:58 -0800</bug_when>
    <thetext>Comment on attachment 266916
Updated patch with review comments incorporated.

Rejecting attachment 266916 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-03&apos;, &apos;validate-changelog&apos;, &apos;--check-oops&apos;, &apos;--non-interactive&apos;, 266916, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

ChangeLog entry in Tools/ChangeLog contains OOPS!.

Full output: http://webkit-queues.webkit.org/results/533630</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147408</commentid>
    <comment_count>12</comment_count>
      <attachid>266916</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-08 11:49:25 -0800</bug_when>
    <thetext>Comment on attachment 266916
Updated patch with review comments incorporated.

Clearing flags on attachment: 266916

Committed r193765: &lt;http://trac.webkit.org/changeset/193765&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147409</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-08 11:49:29 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265465</attachid>
            <date>2015-11-12 20:18:19 -0800</date>
            <delta_ts>2015-11-13 16:00:38 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>patch_multi_sim1</filename>
            <type>text/plain</type>
            <size>16228</size>
            <attacher name="Aakash Jain">aakash_jain</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvbWFpbi5tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvbWFpbi5tCShy
ZXZpc2lvbiAxOTI0MDcpCisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5
L21haW4ubQkod29ya2luZyBjb3B5KQpAQCAtNDMsMTAgKzQzLDEwIEBAIHZvaWQgdXNhZ2UoKQog
ICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIFtoZWxwVGV4dCBVVEY4U3RyaW5nXSk7CiB9CiAK
LVNpbURldmljZSAqZ2V0VGVzdGluZ1NpbURldmljZShTaW1EZXZpY2VUeXBlICpkZXZpY2VUeXBl
LCBTaW1SdW50aW1lICpydW50aW1lKQorU2ltRGV2aWNlICpnZXRUZXN0aW5nU2ltRGV2aWNlKFNp
bURldmljZVR5cGUgKmRldmljZVR5cGUsIFNpbVJ1bnRpbWUgKnJ1bnRpbWUsIE5TU3RyaW5nICpz
dWZmaXgpCiB7CiAgICAgTlNTdHJpbmcgKmRldmljZU5hbWUgPSBbW1tbZGV2aWNlVHlwZSBpZGVu
dGlmaWVyXSBjb21wb25lbnRzU2VwYXJhdGVkQnlTdHJpbmc6QCIuIl0gbGFzdE9iamVjdF0gc3Ry
aW5nQnlSZXBsYWNpbmdPY2N1cnJlbmNlc09mU3RyaW5nOkAiLSIgd2l0aFN0cmluZzpAIiAiXTsK
LSAgICBkZXZpY2VOYW1lID0gW2RldmljZU5hbWUgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6QCIg
V2ViS2l0IFRlc3RlciJdOworICAgIGRldmljZU5hbWUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZv
cm1hdDpAIiVAJUAlQCIsIGRldmljZU5hbWUsIEAiIFdlYktpdCBUZXN0ZXIiLCBzdWZmaXhdOwog
CiAgICAgZm9yIChTaW1EZXZpY2UgKmRldmljZSBpbiBbW1NpbURldmljZVNldCBkZWZhdWx0U2V0
XSBkZXZpY2VzXSkgewogICAgICAgICBpZiAoW1tkZXZpY2UgbmFtZV0gaXNFcXVhbFRvU3RyaW5n
OmRldmljZU5hbWVdICYmIFtbZGV2aWNlIGRldmljZVR5cGVdIGlzRXF1YWxUbzpkZXZpY2VUeXBl
XSAmJiBbW2RldmljZSBydW50aW1lXSBpc0VxdWFsVG86cnVudGltZV0pCkBAIC0xMzYsNyArMTM2
LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiBhcmd2W10pCiAgICAgICAgIE5T
U3RyaW5nICpwcm9kdWN0RGlyID0gZ2V0UmVxdWlyZWRTdHJpbmdBcmd1bWVudChAInByb2R1Y3RE
aXIiKTsKICAgICAgICAgTlNBcnJheSAqZHVtcFRvb2xBcmd1bWVudHMgPSBnZXREdW1wVG9vbEFy
Z3VtZW50cygpOwogCi0gICAgICAgIFNpbURldmljZSAqZGV2aWNlID0gZ2V0VGVzdGluZ1NpbURl
dmljZShkZXZpY2VUeXBlLCBydW50aW1lKTsKKyAgICAgICAgU2ltRGV2aWNlICpkZXZpY2UgPSBn
ZXRUZXN0aW5nU2ltRGV2aWNlKGRldmljZVR5cGUsIHJ1bnRpbWUsIHN1ZmZpeCk7CiAKICAgICAg
ICAgcmVsYXlDb250cm9sbGVyID0gW1tMVFJlbGF5Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhE
ZXZpY2U6ZGV2aWNlIHByb2R1Y3REaXI6cHJvZHVjdERpciBhcHBQYXRoOmFwcFBhdGggaWRlbnRp
ZmllclN1ZmZpeDpzdWZmaXggZHVtcFRvb2xBcmd1bWVudHM6ZHVtcFRvb2xBcmd1bWVudHNdOwog
ICAgICAgICBbcmVsYXlDb250cm9sbGVyIHN0YXJ0XTsKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lci5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVy
cy9sYXlvdXRfdGVzdF9ydW5uZXIucHkJKHJldmlzaW9uIDE5MjQwNykKKysrIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lci5w
eQkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQCBpbXBvcnQgbG9nZ2luZwogaW1wb3J0
IG1hdGgKIGltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0aW1lCitpbXBvcnQgc3VicHJvY2Vzcwog
CiBmcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQgbWVzc2FnZV9wb29sCiBmcm9tIHdlYmtpdHB5
LmxheW91dF90ZXN0cy5jb250cm9sbGVycyBpbXBvcnQgc2luZ2xlX3Rlc3RfcnVubmVyCkBAIC03
Nyw2ICs3OCwxOSBAQCBjbGFzcyBMYXlvdXRUZXN0UnVubmVyKG9iamVjdCk6CiAgICAgICAgIHNl
bGYuX25lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciA9IE5vbmUKICAgICAgICAgc2VsZi5f
cmV0cnlpbmcgPSBGYWxzZQogICAgICAgICBzZWxmLl9jdXJyZW50X3J1bl9yZXN1bHRzID0gTm9u
ZQorICAgICAgICBzZWxmLk1BWF9OVU1fT0ZfU0lNVUxBVE9SID0gNQorICAgICAgICBzZWxmLk5V
TV9QUk9DRVNTRVNfUEVSX1NJTVVMQVRPUiA9IDEwMAorCisgICAgZGVmIGdldF9udW1fd29ya2Vy
cyhzZWxmLCB0ZXN0X2lucHV0cywgbnVtX3dvcmtlcnMpOgorICAgICAgICBhbGxfc2hhcmRzID0g
c2VsZi5fc2hhcmRlci5zaGFyZF90ZXN0cyh0ZXN0X2lucHV0cywgaW50KHNlbGYuX29wdGlvbnMu
Y2hpbGRfcHJvY2Vzc2VzKSwgc2VsZi5fb3B0aW9ucy5mdWxseV9wYXJhbGxlbCkKKyAgICAgICAg
cGxpbWl0ID0gaW50KHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsibGF1bmNoY3RsIiwgImxpbWl0
IiwgIm1heHByb2MiXSkuc3RyaXAoKS5zcGxpdCgpWzFdKQorICAgICAgICBjdXJyZW50X251bV9w
cm9jZXNzID0gbGVuKHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsicHMiLCAiYXV4Il0pLnN0cmlw
KCkuc3BsaXQoJ1xuJykpCisgICAgICAgIHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRlKCdQcm9j
ZXNzIGxpbWl0OiAlcywgY3VycmVudCBwcm9jZXNzZXM6ICVzJyAlIChzdHIocGxpbWl0KSwgY3Vy
cmVudF9udW1fcHJvY2VzcykpCisgICAgICAgIG51bV9zaW0gPSAocGxpbWl0IC0gY3VycmVudF9u
dW1fcHJvY2VzcykgLyBzZWxmLk5VTV9QUk9DRVNTRVNfUEVSX1NJTVVMQVRPUgorCisgICAgICAg
IG51bV93b3JrZXJzID0gbWluKG51bV93b3JrZXJzLCBsZW4oYWxsX3NoYXJkcyksIG51bV9zaW0s
IHNlbGYuTUFYX05VTV9PRl9TSU1VTEFUT1IpCisgICAgICAgIHNlbGYuX3ByaW50ZXIud3JpdGVf
dXBkYXRlKCdOdW1iZXIgb2Ygd29ya2VyczogJWQnICUgbnVtX3dvcmtlcnMpCisgICAgICAgIHJl
dHVybiBudW1fd29ya2VycwogCiAgICAgZGVmIHJ1bl90ZXN0cyhzZWxmLCBleHBlY3RhdGlvbnMs
IHRlc3RfaW5wdXRzLCB0ZXN0c190b19za2lwLCBudW1fd29ya2VycywgbmVlZHNfaHR0cCwgbmVl
ZHNfd2Vic29ja2V0cywgbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyLCByZXRyeWluZyk6
CiAgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9ucyA9IGV4cGVjdGF0aW9ucwpAQCAtMTA2LDcgKzEy
MCw3IEBAIGNsYXNzIExheW91dFRlc3RSdW5uZXIob2JqZWN0KToKICAgICAgICAgaWYgKHNlbGYu
X25lZWRzX2h0dHAgYW5kIHNlbGYuX29wdGlvbnMuaHR0cCkgb3Igc2VsZi5fbmVlZHNfd2ViX3Bs
YXRmb3JtX3Rlc3Rfc2VydmVyOgogICAgICAgICAgICAgc2VsZi5zdGFydF9zZXJ2ZXJzKCkKIAot
ICAgICAgICBudW1fd29ya2VycyA9IG1pbihudW1fd29ya2VycywgbGVuKGFsbF9zaGFyZHMpKQor
ICAgICAgICBudW1fd29ya2VycyA9IHNlbGYuZ2V0X251bV93b3JrZXJzKHRlc3RfaW5wdXRzLCBu
dW1fd29ya2VycykKICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF93b3JrZXJzX2FuZF9zaGFy
ZHMobnVtX3dvcmtlcnMsIGxlbihhbGxfc2hhcmRzKSkKIAogICAgICAgICBpZiBzZWxmLl9vcHRp
b25zLmRyeV9ydW46CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9j
b250cm9sbGVycy9tYW5hZ2VyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkJKHJldmlzaW9uIDE5MjQwNykK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFn
ZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw2ICsxMzUsMTQgQEAgY2xhc3MgTWFuYWdlcihv
YmplY3QpOgogICAgIGRlZiBuZWVkc19zZXJ2ZXJzKHNlbGYsIHRlc3RfbmFtZXMpOgogICAgICAg
ICByZXR1cm4gYW55KHNlbGYuX2lzX2h0dHBfdGVzdCh0ZXN0X25hbWUpIGZvciB0ZXN0X25hbWUg
aW4gdGVzdF9uYW1lcykgYW5kIHNlbGYuX29wdGlvbnMuaHR0cAogCisgICAgZGVmIF9nZXRfbnVt
X3dvcmtlcnMoc2VsZiwgdGVzdHNfdG9fcnVuLCByZXBlYXRfZWFjaCwgaXRlcmF0aW9ucyk6Cisg
ICAgICAgIHRlc3RfaW5wdXRzID0gW10KKyAgICAgICAgZm9yIF8gaW4geHJhbmdlKGl0ZXJhdGlv
bnMpOgorICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHNfdG9fcnVuOgorICAgICAgICAgICAg
ICAgIGZvciBfIGluIHhyYW5nZShyZXBlYXRfZWFjaCk6CisgICAgICAgICAgICAgICAgICAgIHRl
c3RfaW5wdXRzLmFwcGVuZChzZWxmLl90ZXN0X2lucHV0X2Zvcl9maWxlKHRlc3QpKQorICAgICAg
ICByZXR1cm4gc2VsZi5fcnVubmVyLmdldF9udW1fd29ya2Vycyh0ZXN0X2lucHV0cywgaW50KHNl
bGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSkKKwogICAgIGRlZiBfc2V0X3VwX3J1bihzZWxm
LCB0ZXN0X25hbWVzKToKICAgICAgICAgc2VsZi5fcHJpbnRlci53cml0ZV91cGRhdGUoIkNoZWNr
aW5nIGJ1aWxkIC4uLiIpCiAgICAgICAgIGlmIG5vdCBzZWxmLl9wb3J0LmNoZWNrX2J1aWxkKHNl
bGYubmVlZHNfc2VydmVycyh0ZXN0X25hbWVzKSk6CkBAIC0xNDcsNiArMTU1LDggQEAgY2xhc3Mg
TWFuYWdlcihvYmplY3QpOgogICAgICAgICBpZiBub3Qgc2VsZi5fcG9ydC5zdGFydF9oZWxwZXIo
c2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0cyk6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAor
ICAgICAgICBudW1fd29ya2VycyA9IHNlbGYuX2dldF9udW1fd29ya2Vycyh0ZXN0X25hbWVzLCBz
ZWxmLl9vcHRpb25zLnJlcGVhdF9lYWNoLCBzZWxmLl9vcHRpb25zLml0ZXJhdGlvbnMpCisgICAg
ICAgIHNlbGYuX3BvcnQubnVtX3dvcmtlcnMgPSBudW1fd29ya2VycwogICAgICAgICBzZWxmLl9w
b3J0LnJlc2V0X3ByZWZlcmVuY2VzKCkKIAogICAgICAgICAjIENoZWNrIHRoYXQgdGhlIHN5c3Rl
bSBkZXBlbmRlbmNpZXMgKHRoZW1lcywgZm9udHMsIC4uLikgYXJlIGNvcnJlY3QuCkBAIC0xODcs
MTEgKzE5NywxMSBAQCBjbGFzcyBNYW5hZ2VyKG9iamVjdCk6CiAgICAgICAgICAgICBfbG9nLmNy
aXRpY2FsKCdObyB0ZXN0cyB0byBydW4uJykKICAgICAgICAgICAgIHJldHVybiB0ZXN0X3J1bl9y
ZXN1bHRzLlJ1bkRldGFpbHMoZXhpdF9jb2RlPS0xKQogCi0gICAgICAgIGlmIG5vdCBzZWxmLl9z
ZXRfdXBfcnVuKHRlc3RzX3RvX3J1bik6Ci0gICAgICAgICAgICByZXR1cm4gdGVzdF9ydW5fcmVz
dWx0cy5SdW5EZXRhaWxzKGV4aXRfY29kZT0tMSkKLQotICAgICAgICBlbmFibGVkX3BpeGVsX3Rl
c3RzX2luX3JldHJ5ID0gRmFsc2UKICAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IHNl
bGYuX3NldF91cF9ydW4odGVzdHNfdG9fcnVuKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdGVz
dF9ydW5fcmVzdWx0cy5SdW5EZXRhaWxzKGV4aXRfY29kZT0tMSkKKworICAgICAgICAgICAgZW5h
YmxlZF9waXhlbF90ZXN0c19pbl9yZXRyeSA9IEZhbHNlCiAgICAgICAgICAgICBpbml0aWFsX3Jl
c3VsdHMgPSBzZWxmLl9ydW5fdGVzdHModGVzdHNfdG9fcnVuLCB0ZXN0c190b19za2lwLCBzZWxm
Ll9vcHRpb25zLnJlcGVhdF9lYWNoLCBzZWxmLl9vcHRpb25zLml0ZXJhdGlvbnMsCiAgICAgICAg
ICAgICAgICAgaW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSwgcmV0cnlpbmc9RmFs
c2UpCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQkocmV2aXNpb24gMTkyNDA3
KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQkod29ya2luZyBjb3B5KQpA
QCAtMjcsNiArMjcsNyBAQCBpbXBvcnQgcmUKIGltcG9ydCBzaHV0aWwKIGltcG9ydCBzdWJwcm9j
ZXNzCiBpbXBvcnQgdGltZQoraW1wb3J0IGJpcGxpc3QKIAogZnJvbSB3ZWJraXRweS5jb21tb24u
bWVtb2l6ZWQgaW1wb3J0IG1lbW9pemVkCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uY3Jh
c2hsb2dzIGltcG9ydCBDcmFzaExvZ3MKQEAgLTcwLDE2ICs3MSwxNSBAQCBjbGFzcyBJT1NQb3J0
KEFwcGxlUG9ydCk6CiAKIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoUG9ydCk6CiAgICAgcG9ydF9u
YW1lID0gImlvcy1zaW11bGF0b3IiCi0KICAgICBGVVRVUkVfVkVSU0lPTiA9ICdmdXR1cmUnCi0K
ICAgICBBUkNISVRFQ1RVUkVTID0gWyd4ODZfNjQnLCAneDg2J10KLQogICAgIERFRkFVTFRfQVJD
SElURUNUVVJFID0gJ3g4Nl82NCcKLQogICAgIFNJTVVMQVRPUl9CVU5ETEVfSUQgPSAnY29tLmFw
cGxlLmlwaG9uZXNpbXVsYXRvcicKLQogICAgIHJlbGF5X25hbWUgPSAnTGF5b3V0VGVzdFJlbGF5
JworICAgIG51bV93b3JrZXJzID0gMQorICAgIFNJTVVMQVRPUl9ESVJFQ1RPUlkgPSAiL3RtcC9T
aW11bGF0b3JzLyIKKyAgICBMU1JFR0lTVEVSX1BBVEggPSAiL1N5c3RlbS9MaWJyYXJ5L0ZyYW1l
d29ya3MvQ29yZVNlcnZpY2VzLmZyYW1ld29yay9GcmFtZXdvcmtzL0xhdW5jaFNlcnZpY2VzLmZy
YW1ld29yay9WZXJzaW9ucy9DdXJyZW50L1N1cHBvcnQvbHNyZWdpc3RlciIKKyAgICBTSU1VTEFU
T1JfQVBQX1BBVEggPSAiL0FwcGxpY2F0aW9ucy9YY29kZS5hcHAvQ29udGVudHMvRGV2ZWxvcGVy
L0FwcGxpY2F0aW9ucy9TaW11bGF0b3IuYXBwIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsICph
cmdzLCAqKmt3YXJncyk6CiAgICAgICAgIHN1cGVyKElPU1NpbXVsYXRvclBvcnQsIHNlbGYpLl9f
aW5pdF9fKCphcmdzLCAqKmt3YXJncykKQEAgLTIwMCwyMSArMjAwLDIwIEBAIGNsYXNzIElPU1Np
bXVsYXRvclBvcnQoUG9ydCk6CiAgICAgICAgIHJldHVybiBsaXN0KHJldmVyc2VkKFtzZWxmLl9m
aWxlc3lzdGVtLmpvaW4oc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgocCksICdUZXN0RXhwZWN0
YXRpb25zJykgZm9yIHAgaW4gc2VsZi5iYXNlbGluZV9zZWFyY2hfcGF0aCgpXSkpCiAKICAgICBk
ZWYgc2V0dXBfdGVzdF9ydW4oc2VsZik6Ci0gICAgICAgIGRldmljZV91ZGlkID0gc2VsZi50ZXN0
aW5nX2RldmljZS51ZGlkCi0gICAgICAgICMgRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8yMDkxNjE0
MD4gU3dpdGNoIHRvIHVzaW5nIENvcmVTaW11bGF0b3IuZnJhbWV3b3JrIGZvciBsYXVuY2hpbmcg
YW5kIHF1aXR0aW5nIGlPUyBTaW11bGF0b3IKLSAgICAgICAgc2VsZi5fZXhlY3V0aXZlLnJ1bl9j
b21tYW5kKFsKLSAgICAgICAgICAgICdvcGVuJywgJy1iJywgc2VsZi5TSU1VTEFUT1JfQlVORExF
X0lELAotICAgICAgICAgICAgJy0tYXJncycsICctQ3VycmVudERldmljZVVESUQnLCBkZXZpY2Vf
dWRpZF0pCi0gICAgICAgIFNpbXVsYXRvci53YWl0X3VudGlsX2RldmljZV9pc19pbl9zdGF0ZShk
ZXZpY2VfdWRpZCwgU2ltdWxhdG9yLkRldmljZVN0YXRlLkJPT1RFRCkKLQotICAgICAgICAjIEZJ
WE1FOiBQYXVzZSBoZXJlIHVudGlsIFNwcmluZ0JvYXJkIGZpbmlzaGVzIGxhdW5jaGluZyB0byB3
b3JrYXJvdW5kIDxyZGFyOi8vcHJvYmxlbS8yMDAwMDM4Mz4uCi0gICAgICAgIGJvb3RfZGVsYXkg
PSAzMAotICAgICAgICBfbG9nLmRlYnVnKCdXYWl0aW5nIHtzZWNvbmRzfSBzZWNvbmRzIGZvciBp
T1MgU2ltdWxhdG9yIHRvIGZpbmlzaCBib290aW5nIC4uLicuZm9ybWF0KHNlY29uZHM9Ym9vdF9k
ZWxheSkpCi0gICAgICAgIHRpbWUuc2xlZXAoYm9vdF9kZWxheSkKKyAgICAgICAgZm9yIGkgaW4g
cmFuZ2Uoc2VsZi5udW1fd29ya2Vycyk6CisgICAgICAgICAgICBkZXZpY2VfdWRpZCA9IHNlbGYu
dGVzdGluZ19kZXZpY2UoaSkudWRpZAorICAgICAgICAgICAgIyBGSVhNRTogPHJkYXI6Ly9wcm9i
bGVtLzIwOTE2MTQwPiBTd2l0Y2ggdG8gdXNpbmcgQ29yZVNpbXVsYXRvci5mcmFtZXdvcmsgZm9y
IGxhdW5jaGluZyBhbmQgcXVpdHRpbmcgaU9TIFNpbXVsYXRvcgorICAgICAgICAgICAgc2VsZi5f
ZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsKKyAgICAgICAgICAgICAgICAnb3BlbicsICctYicsIHNl
bGYuU0lNVUxBVE9SX0JVTkRMRV9JRCArIHN0cihpKSwKKyAgICAgICAgICAgICAgICAnLS1hcmdz
JywgJy1DdXJyZW50RGV2aWNlVURJRCcsIGRldmljZV91ZGlkXSkKKyAgICAgICAgICAgIHRpbWUu
c2xlZXAoMSkKKworICAgICAgICBfbG9nLmluZm8oJ1dhaXRpbmcgZm9yIHNpbXVsYXRvcnMgdG8g
Ym9vdCcpCisgICAgICAgIGZvciBpIGluIHJhbmdlKHNlbGYubnVtX3dvcmtlcnMpOgorICAgICAg
ICAgICAgU2ltdWxhdG9yLndhaXRfdW50aWxfZGV2aWNlX2lzX2Jvb3RlZChzZWxmLnRlc3Rpbmdf
ZGV2aWNlKGkpLnVkaWQpCiAKICAgICBkZWYgX3F1aXRfaW9zX3NpbXVsYXRvcihzZWxmKToKLSAg
ICAgICAgIyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzIwOTE2MTQwPiBTd2l0Y2ggdG8gdXNpbmcg
Q29yZVNpbXVsYXRvci5mcmFtZXdvcmsgZm9yIGxhdW5jaGluZyBhbmQgcXVpdHRpbmcgaU9TIFNp
bXVsYXRvcgotICAgICAgICBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoWydvc2FzY3JpcHQn
LCAnLWUnLCAndGVsbCBhcHBsaWNhdGlvbiBpZCAiezB9IiB0byBxdWl0Jy5mb3JtYXQoc2VsZi5T
SU1VTEFUT1JfQlVORExFX0lEKV0pCisgICAgICAgIHN1YnByb2Nlc3MuY2FsbChbImtpbGxhbGwi
LCAiLTkiLCAiLXYiLCAiLW0iLCAiU2ltdWxhdG9yIl0pCiAKICAgICBkZWYgY2xlYW5fdXBfdGVz
dF9ydW4oc2VsZik6CiAgICAgICAgIHN1cGVyKElPU1NpbXVsYXRvclBvcnQsIHNlbGYpLmNsZWFu
X3VwX3Rlc3RfcnVuKCkKQEAgLTIyNyw2ICsyMjYsMTQgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9y
dChQb3J0KToKICAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ1VuYWJsZSB0byByZW1vdmUg
JyArIGZpZm8pCiAgICAgICAgICAgICAgICAgcGFzcwogCisgICAgICAgIGZvciBpIGluIHJhbmdl
KHNlbGYubnVtX3dvcmtlcnMpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN1
YnByb2Nlc3MuY2FsbChbc2VsZi5MU1JFR0lTVEVSX1BBVEgsICItdiIsICItdSIsIHNlbGYuZ2V0
X3NpbXVsYXRvcl9wYXRoKGkpXSkKKyAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYu
Z2V0X3NpbXVsYXRvcl9wYXRoKGkpLCBpZ25vcmVfZXJyb3JzPVRydWUpCisgICAgICAgICAgICAg
ICAgU2ltdWxhdG9yKCkuZGVsZXRlX2RldmljZShzZWxmLnRlc3RpbmdfZGV2aWNlKGkpLnVkaWQp
CisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgX2xvZy53YXJuaW5nKCdVbmFi
bGUgdG8gcmVtb3ZlIFNpbXVsYXRvcicgKyBzdHIoaSkpCisKICAgICBkZWYgc2V0dXBfZW52aXJv
bl9mb3Jfc2VydmVyKHNlbGYsIHNlcnZlcl9uYW1lPU5vbmUpOgogICAgICAgICBlbnYgPSBzdXBl
cihJT1NTaW11bGF0b3JQb3J0LCBzZWxmKS5zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoc2VydmVy
X25hbWUpCiAgICAgICAgIGlmIHNlcnZlcl9uYW1lID09IHNlbGYuZHJpdmVyX25hbWUoKToKQEAg
LTI0NSwxMSArMjUyLDEzIEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoUG9ydCk6CiAgICAgICAg
IGlmIG5vdCBzZWxmLnNpbXVsYXRvcl9ydW50aW1lLmF2YWlsYWJsZToKICAgICAgICAgICAgIF9s
b2cuZXJyb3IoJ1RoZSBpT1MgU2ltdWxhdG9yIHJ1bnRpbWUgd2l0aCBpZGVudGlmaWVyICJ7MH0i
IGNhbm5vdCBiZSB1c2VkIGJlY2F1c2UgaXQgaXMgdW5hdmFpbGFibGUuJy5mb3JtYXQoc2VsZi5z
aW11bGF0b3JfcnVudGltZS5pZGVudGlmaWVyKSkKICAgICAgICAgICAgIHJldHVybiBGYWxzZQot
ICAgICAgICB0ZXN0aW5nX2RldmljZSA9IHNlbGYudGVzdGluZ19kZXZpY2UgICMgTWF5IGNyZWF0
ZSBhIG5ldyBzaW11bGF0b3IgZGV2aWNlCi0KLSAgICAgICAgaWYgbm90IFNpbXVsYXRvci5jaGVj
a19zaW11bGF0b3JfZGV2aWNlX2FuZF9lcmFzZV9pZl9uZWVkZWQoc2VsZi5ob3N0LCB0ZXN0aW5n
X2RldmljZS51ZGlkKToKLSAgICAgICAgICAgIF9sb2cuZXJyb3IoJ1VuYWJsZSB0byBib290IHRo
ZSBzaW11bGF0b3IgZGV2aWNlIHdpdGggVURJRCB7MH0uJy5mb3JtYXQodGVzdGluZ19kZXZpY2Uu
dWRpZCkpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2Uo
c2VsZi5udW1fd29ya2Vycyk6CisgICAgICAgICAgICB0ZXN0aW5nX2RldmljZSA9IHNlbGYudGVz
dGluZ19kZXZpY2UoaSkKKyAgICAgICAgICAgIF9sb2cuZGVidWcoJ1ZlcmlmeWluZyBTaW11bGF0
b3InICsgc3RyKGkpICsgJyB3aXRoIFVESUQgezB9LicuZm9ybWF0KHRlc3RpbmdfZGV2aWNlLnVk
aWQpKQorCisgICAgICAgICAgICBpZiBub3QgU2ltdWxhdG9yLmNoZWNrX3NpbXVsYXRvcl9kZXZp
Y2VfYW5kX2VyYXNlX2lmX25lZWRlZChzZWxmLmhvc3QsIHRlc3RpbmdfZGV2aWNlLnVkaWQpOgor
ICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ1VuYWJsZSB0byBib290IHRoZSBzaW11bGF0b3Ig
ZGV2aWNlIHdpdGggVURJRCB7MH0uJy5mb3JtYXQodGVzdGluZ19kZXZpY2UudWRpZCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIHJldHVybiBzdXBlcihJT1NTaW11bGF0
b3JQb3J0LCBzZWxmKS5jaGVja19zeXNfZGVwcyhuZWVkc19odHRwKQogCiAgICAgZGVmIGNoZWNr
X2Zvcl9sZWFrcyhzZWxmLCBwcm9jZXNzX25hbWUsIHByb2Nlc3NfcGlkKToKQEAgLTMyMywxMCAr
MzMyLDEyIEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoUG9ydCk6CiAgICAgICAgICAgICByZXR1
cm4gc3RkZXJyLCBOb25lCiAgICAgICAgIHJldHVybiBzdGRlcnIsIGNyYXNoX2xvZwogCi0gICAg
QHByb3BlcnR5CiAgICAgQG1lbW9pemVkCi0gICAgZGVmIHRlc3RpbmdfZGV2aWNlKHNlbGYpOgot
ICAgICAgICByZXR1cm4gU2ltdWxhdG9yKCkubG9va3VwX29yX2NyZWF0ZV9kZXZpY2Uoc2VsZi5z
aW11bGF0b3JfZGV2aWNlX3R5cGUubmFtZSArICcgV2ViS2l0IFRlc3RlcicsIHNlbGYuc2ltdWxh
dG9yX2RldmljZV90eXBlLCBzZWxmLnNpbXVsYXRvcl9ydW50aW1lKQorICAgIGRlZiB0ZXN0aW5n
X2RldmljZShzZWxmLCBudW1iZXIpOgorICAgICAgICByZXR1cm4gU2ltdWxhdG9yKCkubG9va3Vw
X29yX2NyZWF0ZV9kZXZpY2Uoc2VsZi5zaW11bGF0b3JfZGV2aWNlX3R5cGUubmFtZSArICcgV2Vi
S2l0IFRlc3RlcicgKyBzdHIobnVtYmVyKSwgc2VsZi5zaW11bGF0b3JfZGV2aWNlX3R5cGUsIHNl
bGYuc2ltdWxhdG9yX3J1bnRpbWUpCisKKyAgICBkZWYgZ2V0X3NpbXVsYXRvcl9wYXRoKHNlbGYs
IHN1ZmZpeD0iIik6CisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5TSU1VTEFUT1Jf
RElSRUNUT1JZLCAiU2ltdWxhdG9yIiArIHN0cihzdWZmaXgpICsgIi5hcHAiKQogCiAgICAgZGVm
IF9tZXJnZV9jcmFzaF9sb2dzKHNlbGYsIGxvZ3MsIG5ld19sb2dzLCBjcmFzaGVkX3Byb2Nlc3Nl
cyk6CiAgICAgICAgIGZvciB0ZXN0LCBjcmFzaF9sb2cgaW4gbmV3X2xvZ3MuaXRlcml0ZW1zKCk6
CkBAIC0zOTYsMTQgKzQwNywxOSBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KFBvcnQpOgogICAg
ICAgICByZXR1cm4gc2VsZi5faW1hZ2VfZGlmZmVyLmRpZmZfaW1hZ2UoZXhwZWN0ZWRfY29udGVu
dHMsIGFjdHVhbF9jb250ZW50cywgdG9sZXJhbmNlKQogCiAgICAgZGVmIHJlc2V0X3ByZWZlcmVu
Y2VzKHNlbGYpOgorICAgICAgICBzdWJwcm9jZXNzLmNhbGwoW3NlbGYuTFNSRUdJU1RFUl9QQVRI
LCAiLWtpbGwiXSkKICAgICAgICAgIyBXZSBhc3N1bWUgdGhhdCBpZiB0ZXN0aW5nX2RldmljZSBp
cyBib290ZWQgdGhhdCBpdCB3YXMgYm9vdGVkIGJ5IHRoZSBpT1MgU2ltdWxhdG9yIGFwcAogICAg
ICAgICAjIChhcyBvcHBvc2VkIHRvIHNpbWN0bCkuIFNvLCBxdWl0IHRoZSBpT1MgU2ltdWxhdG9y
IGFwcCB0byBzaHV0ZG93biB0ZXN0aW5nX2RldmljZS4KICAgICAgICAgc2VsZi5fcXVpdF9pb3Nf
c2ltdWxhdG9yKCkKLSAgICAgICAgU2ltdWxhdG9yLndhaXRfdW50aWxfZGV2aWNlX2lzX2luX3N0
YXRlKHNlbGYudGVzdGluZ19kZXZpY2UudWRpZCwgU2ltdWxhdG9yLkRldmljZVN0YXRlLlNIVVRE
T1dOKQorICAgICAgICBzZWxmLl9jcmVhdGVTaW11bGF0b3JBcHBzKCkKKworICAgICAgICBmb3Ig
aSBpbiByYW5nZShzZWxmLm51bV93b3JrZXJzKToKKyAgICAgICAgICAgIFNpbXVsYXRvci53YWl0
X3VudGlsX2RldmljZV9pc19pbl9zdGF0ZShzZWxmLnRlc3RpbmdfZGV2aWNlKGkpLnVkaWQsIFNp
bXVsYXRvci5EZXZpY2VTdGF0ZS5TSFVURE9XTikKIAotICAgICAgICBkYXRhX3BhdGggPSBvcy5w
YXRoLmpvaW4oc2VsZi50ZXN0aW5nX2RldmljZS5wYXRoLCAnZGF0YScpCi0gICAgICAgIGlmIG9z
LnBhdGguaXNkaXIoZGF0YV9wYXRoKToKLSAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZGF0YV9w
YXRoKQorICAgICAgICAgICAgZGF0YV9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGluZ19k
ZXZpY2UoaSkucGF0aCwgJ2RhdGEnKQorICAgICAgICAgICAgI19sb2cuZXJyb3IoIkRhdGEgcGF0
aCBmb3Igc2ltdWxhdG9yICIgKyBzdHIoaSkgKyAiIGlzOiAiKyBkYXRhX3BhdGgpCisgICAgICAg
ICAgICBpZiBvcy5wYXRoLmlzZGlyKGRhdGFfcGF0aCk6CisgICAgICAgICAgICAgICAgc2h1dGls
LnJtdHJlZShkYXRhX3BhdGgpCiAKICAgICBkZWYgbWFrZV9jb21tYW5kKHNlbGYpOgogICAgICAg
ICByZXR1cm4gc2VsZi54Y3J1bl9maW5kKCdtYWtlJywgJy91c3IvYmluL21ha2UnKQpAQCAtNDI4
LDMgKzQ0NCwyNiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KFBvcnQpOgogCiAgICAgZGVmIHN0
ZGVycl9wYXR0ZXJuc190b19zdHJpcChzZWxmKToKICAgICAgICAgcmV0dXJuIFtdCisKKyAgICBk
ZWYgX2NyZWF0ZVNpbXVsYXRvckFwcHMoc2VsZik6CisgICAgICAgIGZvciBpIGluIHJhbmdlKHNl
bGYubnVtX3dvcmtlcnMpOgorICAgICAgICAgICAgc2VsZi5fY3JlYXRlU2ltdWxhdG9yQXBwKGkp
CisKKyAgICBkZWYgIF9jcmVhdGVTaW11bGF0b3JBcHAoc2VsZiwgc3VmZml4KToKKyAgICAgICAg
ZGVzdGluYXRpb24gPSBzZWxmLmdldF9zaW11bGF0b3JfcGF0aChzdWZmaXgpCisgICAgICAgIF9s
b2cuaW5mbygiQ3JlYXRpbmcgYXBwOiIgKyBkZXN0aW5hdGlvbikKKyAgICAgICAgaWYgb3MucGF0
aC5leGlzdHMoZGVzdGluYXRpb24pOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShkZXN0aW5h
dGlvbiwgaWdub3JlX2Vycm9ycz1UcnVlKQorCisgICAgICAgIHNodXRpbC5jb3B5dHJlZShzZWxm
LlNJTVVMQVRPUl9BUFBfUEFUSCwgZGVzdGluYXRpb24pCisgICAgICAgICMgVXBkYXRlIGFwcCdz
IHBhY2thZ2UtbmFtZSBpbnNpZGUgcGxpc3QKKyAgICAgICAgcGxpc3RfcGF0aCA9IGRlc3RpbmF0
aW9uICsgIi9Db250ZW50cy9JbmZvLnBsaXN0IgorICAgICAgICBwbCA9IGJpcGxpc3QucmVhZFBs
aXN0KHBsaXN0X3BhdGgpCisgICAgICAgIG9yaWdpbmFsQXBwSWRlbnRpZmllciA9IHBsWyJDRkJ1
bmRsZUlkZW50aWZpZXIiXQorICAgICAgICB1bmlxdWVBcHBJZGVudGlmaWVyID0gb3JpZ2luYWxB
cHBJZGVudGlmaWVyICsgc3RyKHN1ZmZpeCkKKyAgICAgICAgcGxbIkNGQnVuZGxlSWRlbnRpZmll
ciJdID0gdW5pcXVlQXBwSWRlbnRpZmllcgorICAgICAgICBiaXBsaXN0LndyaXRlUGxpc3QocGws
IHBsaXN0X3BhdGgpCisKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKFsiaW5zdGFsbF9uYW1lX3Rv
b2wiLCAiLWFkZF9ycGF0aCIsICIvQXBwbGljYXRpb25zL1hjb2RlLmFwcC9Db250ZW50cy9EZXZl
bG9wZXIvTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy8iLCBkZXN0aW5hdGlvbiArICIvQ29udGVu
dHMvTWFjT1MvU2ltdWxhdG9yIl0pCisgICAgICAgIHN1YnByb2Nlc3MuY2FsbChbImNvZGVzaWdu
IiwgIi1mcyIsICItIiwgZGVzdGluYXRpb25dKQorICAgICAgICBzdWJwcm9jZXNzLmNhbGwoW3Nl
bGYuTFNSRUdJU1RFUl9QQVRILCAiLXYiLCAiLWYiLCBkZXN0aW5hdGlvbl0pCkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvci5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvci5weQkocmV2aXNpb24gMTkyNDA3KQor
KysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3IucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTIxNSw2ICsyMTUsMTUgQEAgY2xhc3MgRGV2aWNlKG9iamVjdCk6CiAgICAgICAgIFNp
bXVsYXRvci53YWl0X3VudGlsX2RldmljZV9pc19pbl9zdGF0ZShkZXZpY2VfdWRpZCwgU2ltdWxh
dG9yLkRldmljZVN0YXRlLlNIVVRET1dOKQogICAgICAgICByZXR1cm4gU2ltdWxhdG9yKCkuZmlu
ZF9kZXZpY2VfYnlfdWRpZChkZXZpY2VfdWRpZCkKIAorICAgIEBjbGFzc21ldGhvZAorICAgIGRl
ZiBkZWxldGUoY2xzLCB1ZGlkKToKKyAgICAgICAgIiIiCisgICAgICAgIERlbGV0ZSB0aGUgZ2l2
ZW4gQ29yZVNpbXVsYXRvciBkZXZpY2UuCisgICAgICAgIDpwYXJhbSB1ZGlkOiBUaGUgdWRpZCBv
ZiB0aGUgZGV2aWNlLgorICAgICAgICA6dHlwZSB1ZGlkOiBzdHIKKyAgICAgICAgIiIiCisgICAg
ICAgIHN1YnByb2Nlc3MuY2FsbChbJ3hjcnVuJywgJ3NpbWN0bCcsICdkZWxldGUnLCB1ZGlkXSkK
KwogICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgICAgICByZXR1cm4gc2VsZi51ZGlk
ID09IG90aGVyLnVkaWQKIApAQCAtMjY1LDYgKzI3NCwxNSBAQCBjbGFzcyBTaW11bGF0b3Iob2Jq
ZWN0KToKICAgICAgICAgU0hVVFRJTkdfRE9XTiA9IDQKIAogICAgIEBzdGF0aWNtZXRob2QKKyAg
ICBkZWYgd2FpdF91bnRpbF9kZXZpY2VfaXNfYm9vdGVkKHVkaWQsIHRpbWVvdXRfc2Vjb25kcz02
MCAqIDUpOgorICAgICAgICB3aXRoIHRpbWVvdXQoc2Vjb25kcz10aW1lb3V0X3NlY29uZHMpOgor
ICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IHN1YnByb2Nl
c3MuY2hlY2tfb3V0cHV0KFsneGNydW4nLCAnc2ltY3RsJywgJ3NwYXduJywgdWRpZCwgJ2xhdW5j
aGN0bCcsICdwcmludCcsICdzeXN0ZW0nXSkuc3RyaXAoKQorICAgICAgICAgICAgICAgIGlmIHJl
LnNlYXJjaCgiQVtcc10rY29tLmFwcGxlLnNwcmluZ2JvYXJkLnNlcnZpY2VzIiwgc3RhdGUpOgor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEp
CisKKyAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIHdhaXRfdW50aWxfZGV2aWNlX2lzX2luX3N0
YXRlKHVkaWQsIHdhaXRfdW50aWxfc3RhdGUsIHRpbWVvdXRfc2Vjb25kcz02MCAqIDUpOgogICAg
ICAgICB3aXRoIHRpbWVvdXQoc2Vjb25kcz10aW1lb3V0X3NlY29uZHMpOgogICAgICAgICAgICAg
d2hpbGUgKFNpbXVsYXRvci5kZXZpY2Vfc3RhdGUodWRpZCkgIT0gd2FpdF91bnRpbF9zdGF0ZSk6
CkBAIC0yOTksNiArMzE3LDkgQEAgY2xhc3MgU2ltdWxhdG9yKG9iamVjdCk6CiAgICAgICAgICAg
ICByZXR1cm4gU2ltdWxhdG9yLl9ib290X2FuZF9zaHV0ZG93bl9zaW11bGF0b3JfZGV2aWNlKGhv
c3QsIHVkaWQpID09IDAgICMgQ2FuIGJvb3QgZGV2aWNlCiAgICAgICAgIHJldHVybiBGYWxzZSAg
IyBDYW5ub3QgYm9vdCBvciBlcmFzZSBkZXZpY2UKIAorICAgIGRlZiBkZWxldGVfZGV2aWNlKHNl
bGYsIHVkaWQpOgorICAgICAgICBEZXZpY2UuZGVsZXRlKHVkaWQpCisKICAgICBkZWYgcmVmcmVz
aChzZWxmKToKICAgICAgICAgIiIiCiAgICAgICAgIFJlZnJlc2ggcnVudGltZSBhbmQgZGV2aWNl
IHR5cGUgaW5mb3JtYXRpb24gZnJvbSBgYHNpbWN0bCBsaXN0YGAuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265510</attachid>
            <date>2015-11-13 16:00:38 -0800</date>
            <delta_ts>2015-12-03 23:10:07 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>patch_multi_sim2</filename>
            <type>text/plain</type>
            <size>19620</size>
            <attacher name="Aakash Jain">aakash_jain</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE5MjQ0NikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM0IEBACisyMDE1LTExLTEzICBBYWthc2ggSmFpbiAgPGFha2FzaF9qYWluQGFwcGxlLmNv
bT4KKworICAgICAgICBVc2UgbXVsdGlwbGUgaU9TIHNpbXVsYXRvciBpbnN0ZWFkIG9mIG11bHRp
cGxlIGFwcHMgb24gc2luZ2xlIHNpbXVsYXRvciBmb3IgcnVubmluZyBsYXlvdXQtdGVzdHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTI0MworICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vMjI5NTUxOTc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBMYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5
L21haW4ubToKKyAgICAgICAgKGdldFRlc3RpbmdTaW1EZXZpY2UpOiBVc2Ugc2VwYXJhdGUgdGVz
dGluZyBkZXZpY2UgZm9yIGVhY2ggd29ya2VyLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lci5weToKKyAgICAgICAg
KExheW91dFRlc3RSdW5uZXIuZ2V0X251bV93b3JrZXJzKTogQ2FsY3VsYXRlIG51bWJlciBvZiB3
b3JrZXJzIHRvIHJ1bi4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9j
b250cm9sbGVycy9tYW5hZ2VyLnB5OgorICAgICAgICAoTWFuYWdlci5fZ2V0X3Rlc3RfaW5wdXRz
KTogUmVvcmdhbml6ZWQgY29kZSB0byBhIGNvbW1vbiBtZXRob2QuCisgICAgICAgIChNYW5hZ2Vy
Ll9zZXRfdXBfcnVuKTogQ2FsY3VsYXRlIG51bWJlciBvZiB3b3JrZXJzIGFuZCBwYXNzIGl0IHRv
IHRoZSBwb3J0LgorICAgICAgICAoTWFuYWdlci5ydW4pOiBQZXJmb3JtIGNsZWFudXAgZXZlbiBp
ZiBzZXR1cCBmYWlscworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5OiBQ
YXNzIG51bV93b3JrZXJzIHRvIHRoZSBwb3J0LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
cG9ydC9pb3MucHk6CisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LnNldHVwX3Rlc3RfcnVuKTog
SGFuZGxlIG11bGl0cGxlIHNpbXVsYXRvcnMuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9x
dWl0X2lvc19zaW11bGF0b3IpOiBTYW1lCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LmNsZWFu
X3VwX3Rlc3RfcnVuKTogU2FtZQorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5jaGVja19zeXNf
ZGVwcyk6IFNhbWUKKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQudGVzdGluZ19kZXZpY2UpOiBT
YW1lCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LnJlc2V0X3ByZWZlcmVuY2VzKToKKyAgICAg
ICAgKElPU1NpbXVsYXRvclBvcnQuZ2V0X3NpbXVsYXRvcl9wYXRoKTogUmV0dXJuIHNpbXVsYXRv
ciBwYXRoLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fY3JlYXRlU2ltdWxhdG9yQXBwKTog
Q3JlYXRlIHRoZSBzaW11YWx0b3IgYXBwIGNvcHkuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS94Y29kZS9zaW11bGF0b3IucHk6CisgICAgICAgIChEZXZpY2UuZGVsZXRlKTogRGVsZXRlIHRo
ZSBzaW11bGF0b3IgZGV2aWNlLgorICAgICAgICAoU2ltdWxhdG9yLmRlbGV0ZV9kZXZpY2UpOiBT
YW1lCisgICAgICAgIChTaW11bGF0b3Iud2FpdF91bnRpbF9kZXZpY2VfaXNfYm9vdGVkKTogV2Fp
dCBmb3IgZGV2aWNlIGJvb3RpbmcuCisKIDIwMTUtMTEtMTMgIFRpbSBIb3J0b24gIDx0aW1vdGh5
X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgSGFyZHdhcmUga2V5Ym9hcmQgc3BhY2ViYXIg
c2Nyb2xscyB0b28gZmFyIG9uIGlPUwpJbmRleDogVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91
dFRlc3RSZWxheS9tYWluLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xh
eW91dFRlc3RSZWxheS9tYWluLm0JKHJldmlzaW9uIDE5MjQ0NikKKysrIFRvb2xzL0xheW91dFRl
c3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvbWFpbi5tCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMCAr
NDMsMTAgQEAKICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBbaGVscFRleHQgVVRGOFN0cmlu
Z10pOwogfQogCi1TaW1EZXZpY2UgKmdldFRlc3RpbmdTaW1EZXZpY2UoU2ltRGV2aWNlVHlwZSAq
ZGV2aWNlVHlwZSwgU2ltUnVudGltZSAqcnVudGltZSkKK1NpbURldmljZSAqZ2V0VGVzdGluZ1Np
bURldmljZShTaW1EZXZpY2VUeXBlICpkZXZpY2VUeXBlLCBTaW1SdW50aW1lICpydW50aW1lLCBO
U1N0cmluZyAqc3VmZml4KQogewogICAgIE5TU3RyaW5nICpkZXZpY2VOYW1lID0gW1tbW2Rldmlj
ZVR5cGUgaWRlbnRpZmllcl0gY29tcG9uZW50c1NlcGFyYXRlZEJ5U3RyaW5nOkAiLiJdIGxhc3RP
YmplY3RdIHN0cmluZ0J5UmVwbGFjaW5nT2NjdXJyZW5jZXNPZlN0cmluZzpAIi0iIHdpdGhTdHJp
bmc6QCIgIl07Ci0gICAgZGV2aWNlTmFtZSA9IFtkZXZpY2VOYW1lIHN0cmluZ0J5QXBwZW5kaW5n
U3RyaW5nOkAiIFdlYktpdCBUZXN0ZXIiXTsKKyAgICBkZXZpY2VOYW1lID0gW05TU3RyaW5nIHN0
cmluZ1dpdGhGb3JtYXQ6QCIlQCVAJUAiLCBkZXZpY2VOYW1lLCBAIiBXZWJLaXQgVGVzdGVyIiwg
c3VmZml4XTsKIAogICAgIGZvciAoU2ltRGV2aWNlICpkZXZpY2UgaW4gW1tTaW1EZXZpY2VTZXQg
ZGVmYXVsdFNldF0gZGV2aWNlc10pIHsKICAgICAgICAgaWYgKFtbZGV2aWNlIG5hbWVdIGlzRXF1
YWxUb1N0cmluZzpkZXZpY2VOYW1lXSAmJiBbW2RldmljZSBkZXZpY2VUeXBlXSBpc0VxdWFsVG86
ZGV2aWNlVHlwZV0gJiYgW1tkZXZpY2UgcnVudGltZV0gaXNFcXVhbFRvOnJ1bnRpbWVdKQpAQCAt
MTM2LDcgKzEzNiw3IEBACiAgICAgICAgIE5TU3RyaW5nICpwcm9kdWN0RGlyID0gZ2V0UmVxdWly
ZWRTdHJpbmdBcmd1bWVudChAInByb2R1Y3REaXIiKTsKICAgICAgICAgTlNBcnJheSAqZHVtcFRv
b2xBcmd1bWVudHMgPSBnZXREdW1wVG9vbEFyZ3VtZW50cygpOwogCi0gICAgICAgIFNpbURldmlj
ZSAqZGV2aWNlID0gZ2V0VGVzdGluZ1NpbURldmljZShkZXZpY2VUeXBlLCBydW50aW1lKTsKKyAg
ICAgICAgU2ltRGV2aWNlICpkZXZpY2UgPSBnZXRUZXN0aW5nU2ltRGV2aWNlKGRldmljZVR5cGUs
IHJ1bnRpbWUsIHN1ZmZpeCk7CiAKICAgICAgICAgcmVsYXlDb250cm9sbGVyID0gW1tMVFJlbGF5
Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhEZXZpY2U6ZGV2aWNlIHByb2R1Y3REaXI6cHJvZHVj
dERpciBhcHBQYXRoOmFwcFBhdGggaWRlbnRpZmllclN1ZmZpeDpzdWZmaXggZHVtcFRvb2xBcmd1
bWVudHM6ZHVtcFRvb2xBcmd1bWVudHNdOwogICAgICAgICBbcmVsYXlDb250cm9sbGVyIHN0YXJ0
XTsKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJz
L2xheW91dF90ZXN0X3J1bm5lci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXIucHkJKHJldmlz
aW9uIDE5MjQ0NikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRy
b2xsZXJzL2xheW91dF90ZXN0X3J1bm5lci5weQkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
NyBAQAogaW1wb3J0IG1hdGgKIGltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0aW1lCitpbXBvcnQg
c3VicHJvY2VzcwogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQgbWVzc2FnZV9wb29sCiBm
cm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVycyBpbXBvcnQgc2luZ2xlX3Rlc3Rf
cnVubmVyCkBAIC03Nyw3ICs3OCwyNCBAQAogICAgICAgICBzZWxmLl9uZWVkc193ZWJfcGxhdGZv
cm1fdGVzdF9zZXJ2ZXIgPSBOb25lCiAgICAgICAgIHNlbGYuX3JldHJ5aW5nID0gRmFsc2UKICAg
ICAgICAgc2VsZi5fY3VycmVudF9ydW5fcmVzdWx0cyA9IE5vbmUKKyAgICAgICAgc2VsZi5NQVhf
TlVNX09GX1NJTVVMQVRPUiA9IDUKKyAgICAgICAgc2VsZi5OVU1fUFJPQ0VTU0VTX1BFUl9TSU1V
TEFUT1IgPSAxMDAKIAorICAgIGRlZiBnZXRfbnVtX3dvcmtlcnMoc2VsZiwgdGVzdF9pbnB1dHMs
IG51bV93b3JrZXJzKToKKyAgICAgICAgYWxsX3NoYXJkcyA9IHNlbGYuX3NoYXJkZXIuc2hhcmRf
dGVzdHModGVzdF9pbnB1dHMsIGludChzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcyksIHNl
bGYuX29wdGlvbnMuZnVsbHlfcGFyYWxsZWwpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBs
aW1pdCA9IGludChzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbImxhdW5jaGN0bCIsICJsaW1pdCIs
ICJtYXhwcm9jIl0pLnN0cmlwKCkuc3BsaXQoKVsxXSkKKyAgICAgICAgICAgIGN1cnJlbnRfbnVt
X3Byb2Nlc3MgPSBsZW4oc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJwcyIsICJhdXgiXSkuc3Ry
aXAoKS5zcGxpdCgnXG4nKSkKKyAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRl
KCdQcm9jZXNzIGxpbWl0OiAlcywgY3VycmVudCBwcm9jZXNzZXM6ICVzJyAlIChzdHIocGxpbWl0
KSwgY3VycmVudF9udW1fcHJvY2VzcykpCisgICAgICAgICAgICBudW1fc2ltID0gKHBsaW1pdCAt
IGN1cnJlbnRfbnVtX3Byb2Nlc3MpIC8gc2VsZi5OVU1fUFJPQ0VTU0VTX1BFUl9TSU1VTEFUT1IK
KyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5fcHJpbnRlci53cml0ZV91cGRhdGUo
J0Vycm9yIGluIGNhbGN1bGF0aW5nIG51bWJlciBvZiBwcm9jZXNzZXMnKQorICAgICAgICAgICAg
bnVtX3NpbSA9IHNlbGYuTUFYX05VTV9PRl9TSU1VTEFUT1IKKworICAgICAgICBudW1fd29ya2Vy
cyA9IG1pbihudW1fd29ya2VycywgbGVuKGFsbF9zaGFyZHMpLCBudW1fc2ltLCBzZWxmLk1BWF9O
VU1fT0ZfU0lNVUxBVE9SKQorICAgICAgICBzZWxmLl9wcmludGVyLndyaXRlX3VwZGF0ZSgnTnVt
YmVyIG9mIHdvcmtlcnM6ICVkJyAlIG51bV93b3JrZXJzKQorICAgICAgICByZXR1cm4gbnVtX3dv
cmtlcnMKKwogICAgIGRlZiBydW5fdGVzdHMoc2VsZiwgZXhwZWN0YXRpb25zLCB0ZXN0X2lucHV0
cywgdGVzdHNfdG9fc2tpcCwgbnVtX3dvcmtlcnMsIG5lZWRzX2h0dHAsIG5lZWRzX3dlYnNvY2tl
dHMsIG5lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciwgcmV0cnlpbmcpOgogICAgICAgICBz
ZWxmLl9leHBlY3RhdGlvbnMgPSBleHBlY3RhdGlvbnMKICAgICAgICAgc2VsZi5fdGVzdF9pbnB1
dHMgPSB0ZXN0X2lucHV0cwpAQCAtMTA2LDcgKzEyNCw3IEBACiAgICAgICAgIGlmIChzZWxmLl9u
ZWVkc19odHRwIGFuZCBzZWxmLl9vcHRpb25zLmh0dHApIG9yIHNlbGYuX25lZWRzX3dlYl9wbGF0
Zm9ybV90ZXN0X3NlcnZlcjoKICAgICAgICAgICAgIHNlbGYuc3RhcnRfc2VydmVycygpCiAKLSAg
ICAgICAgbnVtX3dvcmtlcnMgPSBtaW4obnVtX3dvcmtlcnMsIGxlbihhbGxfc2hhcmRzKSkKKyAg
ICAgICAgbnVtX3dvcmtlcnMgPSBzZWxmLmdldF9udW1fd29ya2Vycyh0ZXN0X2lucHV0cywgbnVt
X3dvcmtlcnMpCiAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfd29ya2Vyc19hbmRfc2hhcmRz
KG51bV93b3JrZXJzLCBsZW4oYWxsX3NoYXJkcykpCiAKICAgICAgICAgaWYgc2VsZi5fb3B0aW9u
cy5kcnlfcnVuOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29u
dHJvbGxlcnMvbWFuYWdlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5CShyZXZpc2lvbiAxOTI0NDYpCisr
KyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2Vy
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xMjksNiArMTI5LDE0IEBACiAgICAgICAgICAgICBzZWxm
Ll9vcHRpb25zLnNsb3dfdGltZV9vdXRfbXMgaWYgc2VsZi5fdGVzdF9pc19zbG93KHRlc3RfZmls
ZSkgZWxzZSBzZWxmLl9vcHRpb25zLnRpbWVfb3V0X21zLAogICAgICAgICAgICAgc2VsZi5faXNf
aHR0cF90ZXN0KHRlc3RfZmlsZSkpCiAKKyAgICBkZWYgX2dldF90ZXN0X2lucHV0cyhzZWxmLCB0
ZXN0c190b19ydW4sIHJlcGVhdF9lYWNoLCBpdGVyYXRpb25zKToKKyAgICAgICAgdGVzdF9pbnB1
dHMgPSBbXQorICAgICAgICBmb3IgXyBpbiB4cmFuZ2UoaXRlcmF0aW9ucyk6CisgICAgICAgICAg
ICBmb3IgdGVzdCBpbiB0ZXN0c190b19ydW46CisgICAgICAgICAgICAgICAgZm9yIF8gaW4geHJh
bmdlKHJlcGVhdF9lYWNoKToKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9pbnB1dHMuYXBwZW5k
KHNlbGYuX3Rlc3RfaW5wdXRfZm9yX2ZpbGUodGVzdCkpCisgICAgICAgIHJldHVybiB0ZXN0X2lu
cHV0cworCiAgICAgZGVmIF90ZXN0X2lzX3Nsb3coc2VsZiwgdGVzdF9maWxlKToKICAgICAgICAg
cmV0dXJuIHNlbGYuX2V4cGVjdGF0aW9ucy5tb2RlbCgpLmhhc19tb2RpZmllcih0ZXN0X2ZpbGUs
IHRlc3RfZXhwZWN0YXRpb25zLlNMT1cpCiAKQEAgLTE0Nyw3ICsxNTUsOSBAQAogICAgICAgICBp
ZiBub3Qgc2VsZi5fcG9ydC5zdGFydF9oZWxwZXIoc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0cyk6
CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAotICAgICAgICBzZWxmLl9wb3J0LnJlc2V0X3By
ZWZlcmVuY2VzKCkKKyAgICAgICAgdGVzdF9pbnB1dHMgPSBzZWxmLl9nZXRfdGVzdF9pbnB1dHMo
dGVzdF9uYW1lcywgc2VsZi5fb3B0aW9ucy5yZXBlYXRfZWFjaCwgc2VsZi5fb3B0aW9ucy5pdGVy
YXRpb25zKQorICAgICAgICBudW1fd29ya2VycyA9IHNlbGYuX3J1bm5lci5nZXRfbnVtX3dvcmtl
cnModGVzdF9pbnB1dHMsIGludChzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykpCisgICAg
ICAgIHNlbGYuX3BvcnQucmVzZXRfcHJlZmVyZW5jZXMobnVtX3dvcmtlcnMpCiAKICAgICAgICAg
IyBDaGVjayB0aGF0IHRoZSBzeXN0ZW0gZGVwZW5kZW5jaWVzICh0aGVtZXMsIGZvbnRzLCAuLi4p
IGFyZSBjb3JyZWN0LgogICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5ub2NoZWNrX3N5c19k
ZXBzOgpAQCAtMTg3LDExICsxOTcsMTEgQEAKICAgICAgICAgICAgIF9sb2cuY3JpdGljYWwoJ05v
IHRlc3RzIHRvIHJ1bi4nKQogICAgICAgICAgICAgcmV0dXJuIHRlc3RfcnVuX3Jlc3VsdHMuUnVu
RGV0YWlscyhleGl0X2NvZGU9LTEpCiAKLSAgICAgICAgaWYgbm90IHNlbGYuX3NldF91cF9ydW4o
dGVzdHNfdG9fcnVuKToKLSAgICAgICAgICAgIHJldHVybiB0ZXN0X3J1bl9yZXN1bHRzLlJ1bkRl
dGFpbHMoZXhpdF9jb2RlPS0xKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBub3Qgc2Vs
Zi5fc2V0X3VwX3J1bih0ZXN0c190b19ydW4pOgorICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0
X3J1bl9yZXN1bHRzLlJ1bkRldGFpbHMoZXhpdF9jb2RlPS0xKQogCi0gICAgICAgIGVuYWJsZWRf
cGl4ZWxfdGVzdHNfaW5fcmV0cnkgPSBGYWxzZQotICAgICAgICB0cnk6CisgICAgICAgICAgICBl
bmFibGVkX3BpeGVsX3Rlc3RzX2luX3JldHJ5ID0gRmFsc2UKICAgICAgICAgICAgIGluaXRpYWxf
cmVzdWx0cyA9IHNlbGYuX3J1bl90ZXN0cyh0ZXN0c190b19ydW4sIHRlc3RzX3RvX3NraXAsIHNl
bGYuX29wdGlvbnMucmVwZWF0X2VhY2gsIHNlbGYuX29wdGlvbnMuaXRlcmF0aW9ucywKICAgICAg
ICAgICAgICAgICBpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpLCByZXRyeWluZz1G
YWxzZSkKIApAQCAtMjUxLDExICsyNjEsNyBAQAogICAgICAgICBuZWVkc193ZWJfcGxhdGZvcm1f
dGVzdF9zZXJ2ZXIgPSBhbnkoc2VsZi5faXNfd2ViX3BsYXRmb3JtX3Rlc3QodGVzdCkgZm9yIHRl
c3QgaW4gdGVzdHNfdG9fcnVuKQogICAgICAgICBuZWVkc193ZWJzb2NrZXRzID0gYW55KHNlbGYu
X2lzX3dlYnNvY2tldF90ZXN0KHRlc3QpIGZvciB0ZXN0IGluIHRlc3RzX3RvX3J1bikKIAotICAg
ICAgICB0ZXN0X2lucHV0cyA9IFtdCi0gICAgICAgIGZvciBfIGluIHhyYW5nZShpdGVyYXRpb25z
KToKLSAgICAgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzX3RvX3J1bjoKLSAgICAgICAgICAgICAg
ICBmb3IgXyBpbiB4cmFuZ2UocmVwZWF0X2VhY2gpOgotICAgICAgICAgICAgICAgICAgICB0ZXN0
X2lucHV0cy5hcHBlbmQoc2VsZi5fdGVzdF9pbnB1dF9mb3JfZmlsZSh0ZXN0KSkKKyAgICAgICAg
dGVzdF9pbnB1dHMgPSBzZWxmLl9nZXRfdGVzdF9pbnB1dHModGVzdHNfdG9fcnVuLCByZXBlYXRf
ZWFjaCwgaXRlcmF0aW9ucykKICAgICAgICAgcmV0dXJuIHNlbGYuX3J1bm5lci5ydW5fdGVzdHMo
c2VsZi5fZXhwZWN0YXRpb25zLCB0ZXN0X2lucHV0cywgdGVzdHNfdG9fc2tpcCwgbnVtX3dvcmtl
cnMsIG5lZWRzX2h0dHAsIG5lZWRzX3dlYnNvY2tldHMsIG5lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0
X3NlcnZlciwgcmV0cnlpbmcpCiAKICAgICBkZWYgX2NsZWFuX3VwX3J1bihzZWxmKToKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5CShyZXZpc2lvbiAxOTI0NDYpCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQkod29ya2luZyBjb3B5KQpAQCAtODgyLDcg
Kzg4Miw3IEBACiAgICAgICAgIG1ldGhvZC4iIiIKICAgICAgICAgcmV0dXJuIFRydWUKIAotICAg
IGRlZiByZXNldF9wcmVmZXJlbmNlcyhzZWxmKToKKyAgICBkZWYgcmVzZXRfcHJlZmVyZW5jZXMo
c2VsZiwgbnVtX3dvcmtlcnM9MSk6CiAgICAgICAgICIiIklmIGEgcG9ydCBuZWVkcyB0byByZXNl
dCBwbGF0Zm9ybS1zcGVjaWZpYyBwZXJzaXN0ZW50IHByZWZlcmVuY2UKICAgICAgICAgc3RvcmFn
ZSwgaXQgc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kLiIiIgogICAgICAgICBwYXNzCkluZGV4
OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkJKHJldmlzaW9uIDE5MjQ0NikKKysrIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkJKHdvcmtpbmcgY29weSkKQEAgLTcwLDE2ICs3
MCwxNSBAQAogCiBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KFBvcnQpOgogICAgIHBvcnRfbmFtZSA9
ICJpb3Mtc2ltdWxhdG9yIgotCiAgICAgRlVUVVJFX1ZFUlNJT04gPSAnZnV0dXJlJwotCiAgICAg
QVJDSElURUNUVVJFUyA9IFsneDg2XzY0JywgJ3g4NiddCi0KICAgICBERUZBVUxUX0FSQ0hJVEVD
VFVSRSA9ICd4ODZfNjQnCi0KICAgICBTSU1VTEFUT1JfQlVORExFX0lEID0gJ2NvbS5hcHBsZS5p
cGhvbmVzaW11bGF0b3InCi0KICAgICByZWxheV9uYW1lID0gJ0xheW91dFRlc3RSZWxheScKKyAg
ICBudW1fd29ya2VycyA9IDEKKyAgICBTSU1VTEFUT1JfRElSRUNUT1JZID0gIi90bXAvU2ltdWxh
dG9ycy8iCisgICAgTFNSRUdJU1RFUl9QQVRIID0gIi9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtz
L0NvcmVTZXJ2aWNlcy5mcmFtZXdvcmsvRnJhbWV3b3Jrcy9MYXVuY2hTZXJ2aWNlcy5mcmFtZXdv
cmsvVmVyc2lvbnMvQ3VycmVudC9TdXBwb3J0L2xzcmVnaXN0ZXIiCisgICAgU0lNVUxBVE9SX0FQ
UF9QQVRIID0gIi9BcHBsaWNhdGlvbnMvWGNvZGUuYXBwL0NvbnRlbnRzL0RldmVsb3Blci9BcHBs
aWNhdGlvbnMvU2ltdWxhdG9yLmFwcCIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywg
Kiprd2FyZ3MpOgogICAgICAgICBzdXBlcihJT1NTaW11bGF0b3JQb3J0LCBzZWxmKS5fX2luaXRf
XygqYXJncywgKiprd2FyZ3MpCkBAIC0yMDAsMjEgKzE5OSwyMCBAQAogICAgICAgICByZXR1cm4g
bGlzdChyZXZlcnNlZChbc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX3dlYmtpdF9iYXNlbGlu
ZV9wYXRoKHApLCAnVGVzdEV4cGVjdGF0aW9ucycpIGZvciBwIGluIHNlbGYuYmFzZWxpbmVfc2Vh
cmNoX3BhdGgoKV0pKQogCiAgICAgZGVmIHNldHVwX3Rlc3RfcnVuKHNlbGYpOgotICAgICAgICBk
ZXZpY2VfdWRpZCA9IHNlbGYudGVzdGluZ19kZXZpY2UudWRpZAotICAgICAgICAjIEZJWE1FOiA8
cmRhcjovL3Byb2JsZW0vMjA5MTYxNDA+IFN3aXRjaCB0byB1c2luZyBDb3JlU2ltdWxhdG9yLmZy
YW1ld29yayBmb3IgbGF1bmNoaW5nIGFuZCBxdWl0dGluZyBpT1MgU2ltdWxhdG9yCi0gICAgICAg
IHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbCi0gICAgICAgICAgICAnb3BlbicsICctYics
IHNlbGYuU0lNVUxBVE9SX0JVTkRMRV9JRCwKLSAgICAgICAgICAgICctLWFyZ3MnLCAnLUN1cnJl
bnREZXZpY2VVRElEJywgZGV2aWNlX3VkaWRdKQotICAgICAgICBTaW11bGF0b3Iud2FpdF91bnRp
bF9kZXZpY2VfaXNfaW5fc3RhdGUoZGV2aWNlX3VkaWQsIFNpbXVsYXRvci5EZXZpY2VTdGF0ZS5C
T09URUQpCisgICAgICAgIGZvciBpIGluIHhyYW5nZShzZWxmLm51bV93b3JrZXJzKToKKyAgICAg
ICAgICAgIGRldmljZV91ZGlkID0gc2VsZi50ZXN0aW5nX2RldmljZShpKS51ZGlkCisgICAgICAg
ICAgICAjIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMjA5MTYxNDA+IFN3aXRjaCB0byB1c2luZyBD
b3JlU2ltdWxhdG9yLmZyYW1ld29yayBmb3IgbGF1bmNoaW5nIGFuZCBxdWl0dGluZyBpT1MgU2lt
dWxhdG9yCisgICAgICAgICAgICBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoWworICAgICAg
ICAgICAgICAgICdvcGVuJywgJy1iJywgc2VsZi5TSU1VTEFUT1JfQlVORExFX0lEICsgc3RyKGkp
LAorICAgICAgICAgICAgICAgICctLWFyZ3MnLCAnLUN1cnJlbnREZXZpY2VVRElEJywgZGV2aWNl
X3VkaWRdKQorICAgICAgICAgICAgdGltZS5zbGVlcCgxKQogCi0gICAgICAgICMgRklYTUU6IFBh
dXNlIGhlcmUgdW50aWwgU3ByaW5nQm9hcmQgZmluaXNoZXMgbGF1bmNoaW5nIHRvIHdvcmthcm91
bmQgPHJkYXI6Ly9wcm9ibGVtLzIwMDAwMzgzPi4KLSAgICAgICAgYm9vdF9kZWxheSA9IDMwCi0g
ICAgICAgIF9sb2cuZGVidWcoJ1dhaXRpbmcge3NlY29uZHN9IHNlY29uZHMgZm9yIGlPUyBTaW11
bGF0b3IgdG8gZmluaXNoIGJvb3RpbmcgLi4uJy5mb3JtYXQoc2Vjb25kcz1ib290X2RlbGF5KSkK
LSAgICAgICAgdGltZS5zbGVlcChib290X2RlbGF5KQorICAgICAgICBfbG9nLmluZm8oJ1dhaXRp
bmcgZm9yIHNpbXVsYXRvcnMgdG8gYm9vdCcpCisgICAgICAgIGZvciBpIGluIHhyYW5nZShzZWxm
Lm51bV93b3JrZXJzKToKKyAgICAgICAgICAgIFNpbXVsYXRvci53YWl0X3VudGlsX2RldmljZV9p
c19ib290ZWQoc2VsZi50ZXN0aW5nX2RldmljZShpKS51ZGlkKQogCiAgICAgZGVmIF9xdWl0X2lv
c19zaW11bGF0b3Ioc2VsZik6Ci0gICAgICAgICMgRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8yMDkx
NjE0MD4gU3dpdGNoIHRvIHVzaW5nIENvcmVTaW11bGF0b3IuZnJhbWV3b3JrIGZvciBsYXVuY2hp
bmcgYW5kIHF1aXR0aW5nIGlPUyBTaW11bGF0b3IKLSAgICAgICAgc2VsZi5fZXhlY3V0aXZlLnJ1
bl9jb21tYW5kKFsnb3Nhc2NyaXB0JywgJy1lJywgJ3RlbGwgYXBwbGljYXRpb24gaWQgInswfSIg
dG8gcXVpdCcuZm9ybWF0KHNlbGYuU0lNVUxBVE9SX0JVTkRMRV9JRCldKQorICAgICAgICBzdWJw
cm9jZXNzLmNhbGwoWyJraWxsYWxsIiwgIi05IiwgIi12IiwgIi1tIiwgIlNpbXVsYXRvciJdKQog
CiAgICAgZGVmIGNsZWFuX3VwX3Rlc3RfcnVuKHNlbGYpOgogICAgICAgICBzdXBlcihJT1NTaW11
bGF0b3JQb3J0LCBzZWxmKS5jbGVhbl91cF90ZXN0X3J1bigpCkBAIC0yMjcsNiArMjI1LDE0IEBA
CiAgICAgICAgICAgICAgICAgX2xvZy53YXJuaW5nKCdVbmFibGUgdG8gcmVtb3ZlICcgKyBmaWZv
KQogICAgICAgICAgICAgICAgIHBhc3MKIAorICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uoc2VsZi5u
dW1fd29ya2Vycyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3VicHJvY2Vz
cy5jYWxsKFtzZWxmLkxTUkVHSVNURVJfUEFUSCwgIi12IiwgIi11Iiwgc2VsZi5nZXRfc2ltdWxh
dG9yX3BhdGgoaSldKQorICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5nZXRfc2lt
dWxhdG9yX3BhdGgoaSksIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKKyAgICAgICAgICAgICAgICBTaW11
bGF0b3IoKS5kZWxldGVfZGV2aWNlKHNlbGYudGVzdGluZ19kZXZpY2UoaSkudWRpZCkKKyAgICAg
ICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ1VuYWJsZSB0byBy
ZW1vdmUgU2ltdWxhdG9yJyArIHN0cihpKSkKKwogICAgIGRlZiBzZXR1cF9lbnZpcm9uX2Zvcl9z
ZXJ2ZXIoc2VsZiwgc2VydmVyX25hbWU9Tm9uZSk6CiAgICAgICAgIGVudiA9IHN1cGVyKElPU1Np
bXVsYXRvclBvcnQsIHNlbGYpLnNldHVwX2Vudmlyb25fZm9yX3NlcnZlcihzZXJ2ZXJfbmFtZSkK
ICAgICAgICAgaWYgc2VydmVyX25hbWUgPT0gc2VsZi5kcml2ZXJfbmFtZSgpOgpAQCAtMjQ1LDEx
ICsyNTEsMTMgQEAKICAgICAgICAgaWYgbm90IHNlbGYuc2ltdWxhdG9yX3J1bnRpbWUuYXZhaWxh
YmxlOgogICAgICAgICAgICAgX2xvZy5lcnJvcignVGhlIGlPUyBTaW11bGF0b3IgcnVudGltZSB3
aXRoIGlkZW50aWZpZXIgInswfSIgY2Fubm90IGJlIHVzZWQgYmVjYXVzZSBpdCBpcyB1bmF2YWls
YWJsZS4nLmZvcm1hdChzZWxmLnNpbXVsYXRvcl9ydW50aW1lLmlkZW50aWZpZXIpKQogICAgICAg
ICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIHRlc3RpbmdfZGV2aWNlID0gc2VsZi50ZXN0aW5n
X2RldmljZSAgIyBNYXkgY3JlYXRlIGEgbmV3IHNpbXVsYXRvciBkZXZpY2UKKyAgICAgICAgZm9y
IGkgaW4geHJhbmdlKHNlbGYubnVtX3dvcmtlcnMpOgorICAgICAgICAgICAgdGVzdGluZ19kZXZp
Y2UgPSBzZWxmLnRlc3RpbmdfZGV2aWNlKGkpCisgICAgICAgICAgICBfbG9nLmRlYnVnKCdWZXJp
ZnlpbmcgU2ltdWxhdG9yJyArIHN0cihpKSArICcgd2l0aCBVRElEIHswfS4nLmZvcm1hdCh0ZXN0
aW5nX2RldmljZS51ZGlkKSkKIAotICAgICAgICBpZiBub3QgU2ltdWxhdG9yLmNoZWNrX3NpbXVs
YXRvcl9kZXZpY2VfYW5kX2VyYXNlX2lmX25lZWRlZChzZWxmLmhvc3QsIHRlc3RpbmdfZGV2aWNl
LnVkaWQpOgotICAgICAgICAgICAgX2xvZy5lcnJvcignVW5hYmxlIHRvIGJvb3QgdGhlIHNpbXVs
YXRvciBkZXZpY2Ugd2l0aCBVRElEIHswfS4nLmZvcm1hdCh0ZXN0aW5nX2RldmljZS51ZGlkKSkK
LSAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgaWYgbm90IFNpbXVsYXRvci5j
aGVja19zaW11bGF0b3JfZGV2aWNlX2FuZF9lcmFzZV9pZl9uZWVkZWQoc2VsZi5ob3N0LCB0ZXN0
aW5nX2RldmljZS51ZGlkKToKKyAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCdVbmFibGUgdG8g
Ym9vdCB0aGUgc2ltdWxhdG9yIGRldmljZSB3aXRoIFVESUQgezB9LicuZm9ybWF0KHRlc3Rpbmdf
ZGV2aWNlLnVkaWQpKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICByZXR1
cm4gc3VwZXIoSU9TU2ltdWxhdG9yUG9ydCwgc2VsZikuY2hlY2tfc3lzX2RlcHMobmVlZHNfaHR0
cCkKIAogICAgIGRlZiBjaGVja19mb3JfbGVha3Moc2VsZiwgcHJvY2Vzc19uYW1lLCBwcm9jZXNz
X3BpZCk6CkBAIC0zMjMsMTEgKzMzMSwxMyBAQAogICAgICAgICAgICAgcmV0dXJuIHN0ZGVyciwg
Tm9uZQogICAgICAgICByZXR1cm4gc3RkZXJyLCBjcmFzaF9sb2cKIAotICAgIEBwcm9wZXJ0eQog
ICAgIEBtZW1vaXplZAotICAgIGRlZiB0ZXN0aW5nX2RldmljZShzZWxmKToKLSAgICAgICAgcmV0
dXJuIFNpbXVsYXRvcigpLmxvb2t1cF9vcl9jcmVhdGVfZGV2aWNlKHNlbGYuc2ltdWxhdG9yX2Rl
dmljZV90eXBlLm5hbWUgKyAnIFdlYktpdCBUZXN0ZXInLCBzZWxmLnNpbXVsYXRvcl9kZXZpY2Vf
dHlwZSwgc2VsZi5zaW11bGF0b3JfcnVudGltZSkKKyAgICBkZWYgdGVzdGluZ19kZXZpY2Uoc2Vs
ZiwgbnVtYmVyKToKKyAgICAgICAgcmV0dXJuIFNpbXVsYXRvcigpLmxvb2t1cF9vcl9jcmVhdGVf
ZGV2aWNlKHNlbGYuc2ltdWxhdG9yX2RldmljZV90eXBlLm5hbWUgKyAnIFdlYktpdCBUZXN0ZXIn
ICsgc3RyKG51bWJlciksIHNlbGYuc2ltdWxhdG9yX2RldmljZV90eXBlLCBzZWxmLnNpbXVsYXRv
cl9ydW50aW1lKQogCisgICAgZGVmIGdldF9zaW11bGF0b3JfcGF0aChzZWxmLCBzdWZmaXg9IiIp
OgorICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuU0lNVUxBVE9SX0RJUkVDVE9SWSwg
IlNpbXVsYXRvciIgKyBzdHIoc3VmZml4KSArICIuYXBwIikKKwogICAgIGRlZiBfbWVyZ2VfY3Jh
c2hfbG9ncyhzZWxmLCBsb2dzLCBuZXdfbG9ncywgY3Jhc2hlZF9wcm9jZXNzZXMpOgogICAgICAg
ICBmb3IgdGVzdCwgY3Jhc2hfbG9nIGluIG5ld19sb2dzLml0ZXJpdGVtcygpOgogICAgICAgICAg
ICAgdHJ5OgpAQCAtMzk1LDE2ICs0MDUsMjIgQEAKICAgICAgICAgICAgIHRvbGVyYW5jZSA9IHNl
bGYuZ2V0X29wdGlvbigndG9sZXJhbmNlJykKICAgICAgICAgcmV0dXJuIHNlbGYuX2ltYWdlX2Rp
ZmZlci5kaWZmX2ltYWdlKGV4cGVjdGVkX2NvbnRlbnRzLCBhY3R1YWxfY29udGVudHMsIHRvbGVy
YW5jZSkKIAotICAgIGRlZiByZXNldF9wcmVmZXJlbmNlcyhzZWxmKToKKyAgICBkZWYgcmVzZXRf
cHJlZmVyZW5jZXMoc2VsZiwgbnVtX3dvcmtlcnMpOgorICAgICAgICBzZWxmLm51bV93b3JrZXJz
ID0gbnVtX3dvcmtlcnMKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKFtzZWxmLkxTUkVHSVNURVJf
UEFUSCwgIi1raWxsIl0pCiAgICAgICAgICMgV2UgYXNzdW1lIHRoYXQgaWYgdGVzdGluZ19kZXZp
Y2UgaXMgYm9vdGVkIHRoYXQgaXQgd2FzIGJvb3RlZCBieSB0aGUgaU9TIFNpbXVsYXRvciBhcHAK
ICAgICAgICAgIyAoYXMgb3Bwb3NlZCB0byBzaW1jdGwpLiBTbywgcXVpdCB0aGUgaU9TIFNpbXVs
YXRvciBhcHAgdG8gc2h1dGRvd24gdGVzdGluZ19kZXZpY2UuCiAgICAgICAgIHNlbGYuX3F1aXRf
aW9zX3NpbXVsYXRvcigpCi0gICAgICAgIFNpbXVsYXRvci53YWl0X3VudGlsX2RldmljZV9pc19p
bl9zdGF0ZShzZWxmLnRlc3RpbmdfZGV2aWNlLnVkaWQsIFNpbXVsYXRvci5EZXZpY2VTdGF0ZS5T
SFVURE9XTikKKyAgICAgICAgc2VsZi5fY3JlYXRlU2ltdWxhdG9yQXBwcygpCiAKLSAgICAgICAg
ZGF0YV9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGluZ19kZXZpY2UucGF0aCwgJ2RhdGEn
KQotICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGRhdGFfcGF0aCk6Ci0gICAgICAgICAgICBzaHV0
aWwucm10cmVlKGRhdGFfcGF0aCkKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKHNlbGYubnVtX3dv
cmtlcnMpOgorICAgICAgICAgICAgU2ltdWxhdG9yLndhaXRfdW50aWxfZGV2aWNlX2lzX2luX3N0
YXRlKHNlbGYudGVzdGluZ19kZXZpY2UoaSkudWRpZCwgU2ltdWxhdG9yLkRldmljZVN0YXRlLlNI
VVRET1dOKQogCisgICAgICAgICAgICBkYXRhX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0
aW5nX2RldmljZShpKS5wYXRoLCAnZGF0YScpCisgICAgICAgICAgICAjX2xvZy5lcnJvcigiRGF0
YSBwYXRoIGZvciBzaW11bGF0b3IgIiArIHN0cihpKSArICIgaXM6ICIrIGRhdGFfcGF0aCkKKyAg
ICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZGF0YV9wYXRoKToKKyAgICAgICAgICAgICAgICBz
aHV0aWwucm10cmVlKGRhdGFfcGF0aCkKKwogICAgIGRlZiBtYWtlX2NvbW1hbmQoc2VsZik6CiAg
ICAgICAgIHJldHVybiBzZWxmLnhjcnVuX2ZpbmQoJ21ha2UnLCAnL3Vzci9iaW4vbWFrZScpCiAK
QEAgLTQyOCwzICs0NDQsMjIgQEAKIAogICAgIGRlZiBzdGRlcnJfcGF0dGVybnNfdG9fc3RyaXAo
c2VsZik6CiAgICAgICAgIHJldHVybiBbXQorCisgICAgZGVmIF9jcmVhdGVTaW11bGF0b3JBcHBz
KHNlbGYpOgorICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uoc2VsZi5udW1fd29ya2Vycyk6CisgICAg
ICAgICAgICBzZWxmLl9jcmVhdGVTaW11bGF0b3JBcHAoaSkKKworICAgIGRlZiAgX2NyZWF0ZVNp
bXVsYXRvckFwcChzZWxmLCBzdWZmaXgpOgorICAgICAgICBkZXN0aW5hdGlvbiA9IHNlbGYuZ2V0
X3NpbXVsYXRvcl9wYXRoKHN1ZmZpeCkKKyAgICAgICAgX2xvZy5pbmZvKCJDcmVhdGluZyBhcHA6
IiArIGRlc3RpbmF0aW9uKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkZXN0aW5hdGlvbik6
CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKGRlc3RpbmF0aW9uLCBpZ25vcmVfZXJyb3JzPVRy
dWUpCisgICAgICAgIHNodXRpbC5jb3B5dHJlZShzZWxmLlNJTVVMQVRPUl9BUFBfUEFUSCwgZGVz
dGluYXRpb24pCisKKyAgICAgICAgIyBVcGRhdGUgYXBwJ3MgcGFja2FnZS1uYW1lIGluc2lkZSBw
bGlzdCBhbmQgcmUtY29kZS1zaWduIGl0CisgICAgICAgIHBsaXN0X3BhdGggPSBkZXN0aW5hdGlv
biArICIvQ29udGVudHMvSW5mby5wbGlzdCIKKyAgICAgICAgY29tbWFuZCA9ICJTZXQgQ0ZCdW5k
bGVJZGVudGlmaWVyIGNvbS5hcHBsZS5pcGhvbmVzaW11bGF0b3IiICsgc3RyKHN1ZmZpeCkKKyAg
ICAgICAgc3VicHJvY2Vzcy5jYWxsKFsiL3Vzci9saWJleGVjL1BsaXN0QnVkZHkiLCAiLWMiLCBj
b21tYW5kLCBwbGlzdF9wYXRoXSkKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKFsiaW5zdGFsbF9u
YW1lX3Rvb2wiLCAiLWFkZF9ycGF0aCIsICIvQXBwbGljYXRpb25zL1hjb2RlLmFwcC9Db250ZW50
cy9EZXZlbG9wZXIvTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy8iLCBkZXN0aW5hdGlvbiArICIv
Q29udGVudHMvTWFjT1MvU2ltdWxhdG9yIl0pCisgICAgICAgIHN1YnByb2Nlc3MuY2FsbChbImNv
ZGVzaWduIiwgIi1mcyIsICItIiwgZGVzdGluYXRpb25dKQorICAgICAgICBzdWJwcm9jZXNzLmNh
bGwoW3NlbGYuTFNSRUdJU1RFUl9QQVRILCAiLXYiLCAiLWYiLCBkZXN0aW5hdGlvbl0pCkluZGV4
OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvbWFjLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9tYWMucHkJKHJldmlzaW9uIDE5MjQ0NikKKysrIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9tYWMucHkJKHdvcmtpbmcgY29weSkKQEAgLTI5Nyw3ICsy
OTcsNyBAQAogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIHJldHVybiBUcnVlCiAK
LSAgICBkZWYgcmVzZXRfcHJlZmVyZW5jZXMoc2VsZik6CisgICAgZGVmIHJlc2V0X3ByZWZlcmVu
Y2VzKHNlbGYsIG51bV93b3JrZXJzPTEpOgogICAgICAgICBfbG9nLmRlYnVnKCJSZXNldHRpbmcg
cGVyc2lzdGVudCBwcmVmZXJlbmNlcyIpCiAKICAgICAgICAgZm9yIGRvbWFpbiBpbiBbIkR1bXBS
ZW5kZXJUcmVlIiwgIldlYktpdFRlc3RSdW5uZXIiXToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5CShyZXZpc2lvbiAxOTI0NDYpCisrKyBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvci5weQkod29ya2luZyBjb3B5KQpAQCAtMjE1LDYg
KzIxNSwxNSBAQAogICAgICAgICBTaW11bGF0b3Iud2FpdF91bnRpbF9kZXZpY2VfaXNfaW5fc3Rh
dGUoZGV2aWNlX3VkaWQsIFNpbXVsYXRvci5EZXZpY2VTdGF0ZS5TSFVURE9XTikKICAgICAgICAg
cmV0dXJuIFNpbXVsYXRvcigpLmZpbmRfZGV2aWNlX2J5X3VkaWQoZGV2aWNlX3VkaWQpCiAKKyAg
ICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZGVsZXRlKGNscywgdWRpZCk6CisgICAgICAgICIiIgor
ICAgICAgICBEZWxldGUgdGhlIGdpdmVuIENvcmVTaW11bGF0b3IgZGV2aWNlLgorICAgICAgICA6
cGFyYW0gdWRpZDogVGhlIHVkaWQgb2YgdGhlIGRldmljZS4KKyAgICAgICAgOnR5cGUgdWRpZDog
c3RyCisgICAgICAgICIiIgorICAgICAgICBzdWJwcm9jZXNzLmNhbGwoWyd4Y3J1bicsICdzaW1j
dGwnLCAnZGVsZXRlJywgdWRpZF0pCisKICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAg
ICAgICAgcmV0dXJuIHNlbGYudWRpZCA9PSBvdGhlci51ZGlkCiAKQEAgLTI2NSw2ICsyNzQsMTUg
QEAKICAgICAgICAgU0hVVFRJTkdfRE9XTiA9IDQKIAogICAgIEBzdGF0aWNtZXRob2QKKyAgICBk
ZWYgd2FpdF91bnRpbF9kZXZpY2VfaXNfYm9vdGVkKHVkaWQsIHRpbWVvdXRfc2Vjb25kcz02MCAq
IDUpOgorICAgICAgICB3aXRoIHRpbWVvdXQoc2Vjb25kcz10aW1lb3V0X3NlY29uZHMpOgorICAg
ICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IHN1YnByb2Nlc3Mu
Y2hlY2tfb3V0cHV0KFsneGNydW4nLCAnc2ltY3RsJywgJ3NwYXduJywgdWRpZCwgJ2xhdW5jaGN0
bCcsICdwcmludCcsICdzeXN0ZW0nXSkuc3RyaXAoKQorICAgICAgICAgICAgICAgIGlmIHJlLnNl
YXJjaCgiQVtcc10rY29tLmFwcGxlLnNwcmluZ2JvYXJkLnNlcnZpY2VzIiwgc3RhdGUpOgorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisK
KyAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIHdhaXRfdW50aWxfZGV2aWNlX2lzX2luX3N0YXRl
KHVkaWQsIHdhaXRfdW50aWxfc3RhdGUsIHRpbWVvdXRfc2Vjb25kcz02MCAqIDUpOgogICAgICAg
ICB3aXRoIHRpbWVvdXQoc2Vjb25kcz10aW1lb3V0X3NlY29uZHMpOgogICAgICAgICAgICAgd2hp
bGUgKFNpbXVsYXRvci5kZXZpY2Vfc3RhdGUodWRpZCkgIT0gd2FpdF91bnRpbF9zdGF0ZSk6CkBA
IC0yOTksNiArMzE3LDkgQEAKICAgICAgICAgICAgIHJldHVybiBTaW11bGF0b3IuX2Jvb3RfYW5k
X3NodXRkb3duX3NpbXVsYXRvcl9kZXZpY2UoaG9zdCwgdWRpZCkgPT0gMCAgIyBDYW4gYm9vdCBk
ZXZpY2UKICAgICAgICAgcmV0dXJuIEZhbHNlICAjIENhbm5vdCBib290IG9yIGVyYXNlIGRldmlj
ZQogCisgICAgZGVmIGRlbGV0ZV9kZXZpY2Uoc2VsZiwgdWRpZCk6CisgICAgICAgIERldmljZS5k
ZWxldGUodWRpZCkKKwogICAgIGRlZiByZWZyZXNoKHNlbGYpOgogICAgICAgICAiIiIKICAgICAg
ICAgUmVmcmVzaCBydW50aW1lIGFuZCBkZXZpY2UgdHlwZSBpbmZvcm1hdGlvbiBmcm9tIGBgc2lt
Y3RsIGxpc3RgYC4K
</data>
<flag name="review"
          id="290557"
          type_id="1"
          status="-"
          setter="ap"
    />
    <flag name="commit-queue"
          id="290558"
          type_id="3"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266605</attachid>
            <date>2015-12-03 23:10:07 -0800</date>
            <delta_ts>2015-12-07 13:49:27 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>patch_multi_sim4</filename>
            <type>text/plain</type>
            <size>22082</size>
            <attacher name="Aakash Jain">aakash_jain</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE5MzQxMSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM3IEBACisyMDE1LTEyLTAzICBBYWthc2ggSmFpbiAgPGFha2FzaF9qYWluQGFwcGxlLmNv
bT4KKworICAgICAgICBVc2UgbXVsdGlwbGUgaU9TIHNpbXVsYXRvciBpbnN0ZWFkIG9mIG11bHRp
cGxlIGFwcHMgb24gc2luZ2xlIHNpbXVsYXRvciBmb3IgcnVubmluZyBsYXlvdXQtdGVzdHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTI0MworICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vMjI5NTUxOTc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBMYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5
L21haW4ubToKKyAgICAgICAgKGdldFRlc3RpbmdTaW1EZXZpY2UpOiBVc2Ugc2VwYXJhdGUgdGVz
dGluZyBkZXZpY2UgZm9yIGVhY2ggd29ya2VyLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lci5weToKKyAgICAgICAg
KExheW91dFRlc3RSdW5uZXIuZ2V0X251bV93b3JrZXJzKTogQ2FsY3VsYXRlIG51bWJlciBvZiB3
b3JrZXJzIHRvIHJ1bi4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9j
b250cm9sbGVycy9tYW5hZ2VyLnB5OgorICAgICAgICAoTWFuYWdlci5fZ2V0X3Rlc3RfaW5wdXRz
KTogUmVvcmdhbml6ZWQgY29kZSB0byBhIGNvbW1vbiBtZXRob2QuCisgICAgICAgIChNYW5hZ2Vy
Ll9zZXRfdXBfcnVuKTogQ2FsY3VsYXRlIG51bWJlciBvZiB3b3JrZXJzIGFuZCBwYXNzIGl0IHRv
IHRoZSBwb3J0LgorICAgICAgICAoTWFuYWdlci5ydW4pOiBQZXJmb3JtIGNsZWFudXAgZXZlbiBp
ZiBzZXR1cCBmYWlscworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5OiAK
KyAgICAgICAgKFBvcnQudG8ucmVzZXRfcHJlZmVyZW5jZXMpOiBQYXNzIG51bV93b3JrZXJzIHRv
IHRoZSBwb3J0LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHk6CisgICAg
ICAgIChJT1NTaW11bGF0b3JQb3J0LnNldHVwX3Rlc3RfcnVuKTogSGFuZGxlIG11bGl0cGxlIHNp
bXVsYXRvcnMuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9xdWl0X2lvc19zaW11bGF0b3Ip
OiBTYW1lCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LmNsZWFuX3VwX3Rlc3RfcnVuKTogU2Ft
ZQorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5jaGVja19zeXNfZGVwcyk6IFNhbWUKKyAgICAg
ICAgKElPU1NpbXVsYXRvclBvcnQudGVzdGluZ19kZXZpY2UpOiBTYW1lCisgICAgICAgIChJT1NT
aW11bGF0b3JQb3J0LnJlc2V0X3ByZWZlcmVuY2VzKToKKyAgICAgICAgKElPU1NpbXVsYXRvclBv
cnQuZ2V0X3NpbXVsYXRvcl9wYXRoKTogUmV0dXJuIHNpbXVsYXRvciBwYXRoLgorICAgICAgICAo
SU9TU2ltdWxhdG9yUG9ydC5fY3JlYXRlU2ltdWxhdG9yQXBwKTogQ3JlYXRlIHRoZSBzaW11YWx0
b3IgYXBwIGNvcHkuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L21hYy5weToKKyAg
ICAgICAgKE1hY1BvcnQucmVzZXRfcHJlZmVyZW5jZXMpOiBQYXNzIG51bV93b3JrZXJzIHRvIG1h
dGNoIHdpdGggYmFzZS5weQorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxh
dG9yLnB5OgorICAgICAgICAoRGV2aWNlLmRlbGV0ZSk6IERlbGV0ZSB0aGUgc2ltdWxhdG9yIGRl
dmljZS4KKyAgICAgICAgKFNpbXVsYXRvci5kZWxldGVfZGV2aWNlKTogU2FtZQorICAgICAgICAo
U2ltdWxhdG9yLndhaXRfdW50aWxfZGV2aWNlX2lzX2Jvb3RlZCk6IFdhaXQgZm9yIGRldmljZSBi
b290aW5nLgorCiAyMDE1LTEyLTAzICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+
CiAKICAgICAgICAgRHVtcFJlbmRlclRyZWU6IFVzZS1hZnRlci1mcmVlIGluIGNyZWF0ZUJpdG1h
cENvbnRleHQoKSBpbiBQaXhlbER1bXBTdXBwb3J0TWFjLm1tCkluZGV4OiBUb29scy9MYXlvdXRU
ZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L21haW4ubQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlv
dXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L21haW4ubQkocmV2aXNpb24gMTkzNDEwKQorKysg
VG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9tYWluLm0JKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDEwICs0MywxMCBAQCB2b2lkIHVzYWdlKCkKICAgICBmcHJpbnRmKHN0ZGVyciwg
IiVzXG4iLCBbaGVscFRleHQgVVRGOFN0cmluZ10pOwogfQogCi1TaW1EZXZpY2UgKmdldFRlc3Rp
bmdTaW1EZXZpY2UoU2ltRGV2aWNlVHlwZSAqZGV2aWNlVHlwZSwgU2ltUnVudGltZSAqcnVudGlt
ZSkKK1NpbURldmljZSAqZ2V0VGVzdGluZ1NpbURldmljZShTaW1EZXZpY2VUeXBlICpkZXZpY2VU
eXBlLCBTaW1SdW50aW1lICpydW50aW1lLCBOU1N0cmluZyAqc3VmZml4KQogewogICAgIE5TU3Ry
aW5nICpkZXZpY2VOYW1lID0gW1tbW2RldmljZVR5cGUgaWRlbnRpZmllcl0gY29tcG9uZW50c1Nl
cGFyYXRlZEJ5U3RyaW5nOkAiLiJdIGxhc3RPYmplY3RdIHN0cmluZ0J5UmVwbGFjaW5nT2NjdXJy
ZW5jZXNPZlN0cmluZzpAIi0iIHdpdGhTdHJpbmc6QCIgIl07Ci0gICAgZGV2aWNlTmFtZSA9IFtk
ZXZpY2VOYW1lIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOkAiIFdlYktpdCBUZXN0ZXIiXTsKKyAg
ICBkZXZpY2VOYW1lID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCVAJUAiLCBkZXZp
Y2VOYW1lLCBAIiBXZWJLaXQgVGVzdGVyIiwgc3VmZml4XTsKIAogICAgIGZvciAoU2ltRGV2aWNl
ICpkZXZpY2UgaW4gW1tTaW1EZXZpY2VTZXQgZGVmYXVsdFNldF0gZGV2aWNlc10pIHsKICAgICAg
ICAgaWYgKFtbZGV2aWNlIG5hbWVdIGlzRXF1YWxUb1N0cmluZzpkZXZpY2VOYW1lXSAmJiBbW2Rl
dmljZSBkZXZpY2VUeXBlXSBpc0VxdWFsVG86ZGV2aWNlVHlwZV0gJiYgW1tkZXZpY2UgcnVudGlt
ZV0gaXNFcXVhbFRvOnJ1bnRpbWVdKQpAQCAtMTM2LDcgKzEzNiw3IEBAIGludCBtYWluKGludCBh
cmdjLCBjb25zdCBjaGFyICogYXJndltdKQogICAgICAgICBOU1N0cmluZyAqcHJvZHVjdERpciA9
IGdldFJlcXVpcmVkU3RyaW5nQXJndW1lbnQoQCJwcm9kdWN0RGlyIik7CiAgICAgICAgIE5TQXJy
YXkgKmR1bXBUb29sQXJndW1lbnRzID0gZ2V0RHVtcFRvb2xBcmd1bWVudHMoKTsKIAotICAgICAg
ICBTaW1EZXZpY2UgKmRldmljZSA9IGdldFRlc3RpbmdTaW1EZXZpY2UoZGV2aWNlVHlwZSwgcnVu
dGltZSk7CisgICAgICAgIFNpbURldmljZSAqZGV2aWNlID0gZ2V0VGVzdGluZ1NpbURldmljZShk
ZXZpY2VUeXBlLCBydW50aW1lLCBzdWZmaXgpOwogCiAgICAgICAgIHJlbGF5Q29udHJvbGxlciA9
IFtbTFRSZWxheUNvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoRGV2aWNlOmRldmljZSBwcm9kdWN0
RGlyOnByb2R1Y3REaXIgYXBwUGF0aDphcHBQYXRoIGlkZW50aWZpZXJTdWZmaXg6c3VmZml4IGR1
bXBUb29sQXJndW1lbnRzOmR1bXBUb29sQXJndW1lbnRzXTsKICAgICAgICAgW3JlbGF5Q29udHJv
bGxlciBzdGFydF07CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9j
b250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVy
LnB5CShyZXZpc2lvbiAxOTM0MTApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXIucHkJKHdvcmtpbmcgY29weSkKQEAg
LTc4LDcgKzc4LDE4IEBAIGNsYXNzIExheW91dFRlc3RSdW5uZXIob2JqZWN0KToKICAgICAgICAg
c2VsZi5fcmV0cnlpbmcgPSBGYWxzZQogICAgICAgICBzZWxmLl9jdXJyZW50X3J1bl9yZXN1bHRz
ID0gTm9uZQogCi0gICAgZGVmIHJ1bl90ZXN0cyhzZWxmLCBleHBlY3RhdGlvbnMsIHRlc3RfaW5w
dXRzLCB0ZXN0c190b19za2lwLCBudW1fd29ya2VycywgbmVlZHNfaHR0cCwgbmVlZHNfd2Vic29j
a2V0cywgbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyLCByZXRyeWluZyk6CisgICAgZGVm
IGdldF9udW1fd29ya2VycyhzZWxmLCB0ZXN0X2lucHV0cywgbnVtX2NoaWxkX3Byb2Nlc3Nlcyk6
CisgICAgICAgIGFsbF9zaGFyZHMgPSBzZWxmLl9zaGFyZGVyLnNoYXJkX3Rlc3RzKHRlc3RfaW5w
dXRzLCBpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpLCBzZWxmLl9vcHRpb25zLmZ1
bGx5X3BhcmFsbGVsKQorICAgICAgICBtYXhpbXVtX3NpbXVsYXRvcl9jb3VudF9vbl90aGlzX3N5
c3RlbSA9IHNlbGYuX3BvcnQubWF4aW11bV9zaW11bGF0b3JfY291bnQoKQorICAgICAgICBudW1f
d29ya2VycyA9IG1pbihudW1fY2hpbGRfcHJvY2Vzc2VzLCBsZW4oYWxsX3NoYXJkcyksIG1heGlt
dW1fc2ltdWxhdG9yX2NvdW50X29uX3RoaXNfc3lzdGVtKQorICAgICAgICBzZWxmLl9wcmludGVy
LndyaXRlX3VwZGF0ZSgnTnVtYmVyIG9mIHdvcmtlcnM6ICVkJyAlIG51bV93b3JrZXJzKQorCisg
ICAgICAgIGlmIChudW1fd29ya2VycyA9PSBtYXhpbXVtX3NpbXVsYXRvcl9jb3VudF9vbl90aGlz
X3N5c3RlbSk6CisgICAgICAgICAgICBzZWxmLl9wcmludGVyLndyaXRlX3VwZGF0ZSgnUGxlYXNl
IGluY3JlYXNlIHRoZSBwcm9jZXNzIGFuZCBmaWxlIGxpbWl0IHRvIExhdW5jaCBtb3JlIG51bWJl
ciBvZiBTaW11bGF0b3JzJykKKyAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRl
KCdSdW4gImxhdW5jaGN0bCBsaW1pdCIgdG8gY2hlY2sgdGhlIGxpbWl0JykKKyAgICAgICAgcmV0
dXJuIG51bV93b3JrZXJzCisKKyAgICBkZWYgcnVuX3Rlc3RzKHNlbGYsIGV4cGVjdGF0aW9ucywg
dGVzdF9pbnB1dHMsIHRlc3RzX3RvX3NraXAsIG51bV9jaGlsZF9wcm9jZXNzZXMsIG5lZWRzX2h0
dHAsIG5lZWRzX3dlYnNvY2tldHMsIG5lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciwgcmV0
cnlpbmcpOgogICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnMgPSBleHBlY3RhdGlvbnMKICAgICAg
ICAgc2VsZi5fdGVzdF9pbnB1dHMgPSB0ZXN0X2lucHV0cwogICAgICAgICBzZWxmLl9uZWVkc19o
dHRwID0gbmVlZHNfaHR0cApAQCAtMTA2LDcgKzExNyw3IEBAIGNsYXNzIExheW91dFRlc3RSdW5u
ZXIob2JqZWN0KToKICAgICAgICAgaWYgKHNlbGYuX25lZWRzX2h0dHAgYW5kIHNlbGYuX29wdGlv
bnMuaHR0cCkgb3Igc2VsZi5fbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyOgogICAgICAg
ICAgICAgc2VsZi5zdGFydF9zZXJ2ZXJzKCkKIAotICAgICAgICBudW1fd29ya2VycyA9IG1pbihu
dW1fd29ya2VycywgbGVuKGFsbF9zaGFyZHMpKQorICAgICAgICBudW1fd29ya2VycyA9IHNlbGYu
Z2V0X251bV93b3JrZXJzKHRlc3RfaW5wdXRzLCBudW1fY2hpbGRfcHJvY2Vzc2VzKQogICAgICAg
ICBzZWxmLl9wcmludGVyLnByaW50X3dvcmtlcnNfYW5kX3NoYXJkcyhudW1fd29ya2VycywgbGVu
KGFsbF9zaGFyZHMpKQogCiAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMuZHJ5X3J1bjoKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29u
dHJvbGxlcnMvbWFuYWdlci5weQkocmV2aXNpb24gMTkzNDEwKQorKysgVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weQkod29ya2luZyBjb3B5
KQpAQCAtMTI5LDYgKzEyOSwxNCBAQCBjbGFzcyBNYW5hZ2VyKG9iamVjdCk6CiAgICAgICAgICAg
ICBzZWxmLl9vcHRpb25zLnNsb3dfdGltZV9vdXRfbXMgaWYgc2VsZi5fdGVzdF9pc19zbG93KHRl
c3RfZmlsZSkgZWxzZSBzZWxmLl9vcHRpb25zLnRpbWVfb3V0X21zLAogICAgICAgICAgICAgc2Vs
Zi5faXNfaHR0cF90ZXN0KHRlc3RfZmlsZSkpCiAKKyAgICBkZWYgX2dldF90ZXN0X2lucHV0cyhz
ZWxmLCB0ZXN0c190b19ydW4sIHJlcGVhdF9lYWNoLCBpdGVyYXRpb25zKToKKyAgICAgICAgdGVz
dF9pbnB1dHMgPSBbXQorICAgICAgICBmb3IgXyBpbiB4cmFuZ2UoaXRlcmF0aW9ucyk6CisgICAg
ICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0c190b19ydW46CisgICAgICAgICAgICAgICAgZm9yIF8g
aW4geHJhbmdlKHJlcGVhdF9lYWNoKToKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9pbnB1dHMu
YXBwZW5kKHNlbGYuX3Rlc3RfaW5wdXRfZm9yX2ZpbGUodGVzdCkpCisgICAgICAgIHJldHVybiB0
ZXN0X2lucHV0cworCiAgICAgZGVmIF90ZXN0X2lzX3Nsb3coc2VsZiwgdGVzdF9maWxlKToKICAg
ICAgICAgcmV0dXJuIHNlbGYuX2V4cGVjdGF0aW9ucy5tb2RlbCgpLmhhc19tb2RpZmllcih0ZXN0
X2ZpbGUsIHRlc3RfZXhwZWN0YXRpb25zLlNMT1cpCiAKQEAgLTE0Nyw3ICsxNTUsOSBAQCBjbGFz
cyBNYW5hZ2VyKG9iamVjdCk6CiAgICAgICAgIGlmIG5vdCBzZWxmLl9wb3J0LnN0YXJ0X2hlbHBl
cihzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzKToKICAgICAgICAgICAgIHJldHVybiBGYWxzZQog
Ci0gICAgICAgIHNlbGYuX3BvcnQucmVzZXRfcHJlZmVyZW5jZXMoKQorICAgICAgICB0ZXN0X2lu
cHV0cyA9IHNlbGYuX2dldF90ZXN0X2lucHV0cyh0ZXN0X25hbWVzLCBzZWxmLl9vcHRpb25zLnJl
cGVhdF9lYWNoLCBzZWxmLl9vcHRpb25zLml0ZXJhdGlvbnMpCisgICAgICAgIG51bV93b3JrZXJz
ID0gc2VsZi5fcnVubmVyLmdldF9udW1fd29ya2Vycyh0ZXN0X2lucHV0cywgaW50KHNlbGYuX29w
dGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSkKKyAgICAgICAgc2VsZi5fcG9ydC5yZXNldF9wcmVmZXJl
bmNlcyhudW1fd29ya2VycykKIAogICAgICAgICAjIENoZWNrIHRoYXQgdGhlIHN5c3RlbSBkZXBl
bmRlbmNpZXMgKHRoZW1lcywgZm9udHMsIC4uLikgYXJlIGNvcnJlY3QuCiAgICAgICAgIGlmIG5v
dCBzZWxmLl9vcHRpb25zLm5vY2hlY2tfc3lzX2RlcHM6CkBAIC0xODcsMTEgKzE5NywxMSBAQCBj
bGFzcyBNYW5hZ2VyKG9iamVjdCk6CiAgICAgICAgICAgICBfbG9nLmNyaXRpY2FsKCdObyB0ZXN0
cyB0byBydW4uJykKICAgICAgICAgICAgIHJldHVybiB0ZXN0X3J1bl9yZXN1bHRzLlJ1bkRldGFp
bHMoZXhpdF9jb2RlPS0xKQogCi0gICAgICAgIGlmIG5vdCBzZWxmLl9zZXRfdXBfcnVuKHRlc3Rz
X3RvX3J1bik6Ci0gICAgICAgICAgICByZXR1cm4gdGVzdF9ydW5fcmVzdWx0cy5SdW5EZXRhaWxz
KGV4aXRfY29kZT0tMSkKLQotICAgICAgICBlbmFibGVkX3BpeGVsX3Rlc3RzX2luX3JldHJ5ID0g
RmFsc2UKICAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX3NldF91cF9ydW4o
dGVzdHNfdG9fcnVuKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdGVzdF9ydW5fcmVzdWx0cy5S
dW5EZXRhaWxzKGV4aXRfY29kZT0tMSkKKworICAgICAgICAgICAgZW5hYmxlZF9waXhlbF90ZXN0
c19pbl9yZXRyeSA9IEZhbHNlCiAgICAgICAgICAgICBpbml0aWFsX3Jlc3VsdHMgPSBzZWxmLl9y
dW5fdGVzdHModGVzdHNfdG9fcnVuLCB0ZXN0c190b19za2lwLCBzZWxmLl9vcHRpb25zLnJlcGVh
dF9lYWNoLCBzZWxmLl9vcHRpb25zLml0ZXJhdGlvbnMsCiAgICAgICAgICAgICAgICAgaW50KHNl
bGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSwgcmV0cnlpbmc9RmFsc2UpCiAKQEAgLTIwNSw3
ICsyMTUsNyBAQCBjbGFzcyBNYW5hZ2VyKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgX2xvZy5p
bmZvKCJSZXRyeWluZyAlcyAuLi4iICUgcGx1cmFsaXplKGxlbih0ZXN0c190b19yZXRyeSksICJ1
bmV4cGVjdGVkIGZhaWx1cmUiKSkKICAgICAgICAgICAgICAgICBfbG9nLmluZm8oJycpCiAgICAg
ICAgICAgICAgICAgcmV0cnlfcmVzdWx0cyA9IHNlbGYuX3J1bl90ZXN0cyh0ZXN0c190b19yZXRy
eSwgdGVzdHNfdG9fc2tpcD1zZXQoKSwgcmVwZWF0X2VhY2g9MSwgaXRlcmF0aW9ucz0xLAotICAg
ICAgICAgICAgICAgICAgICBudW1fd29ya2Vycz0xLCByZXRyeWluZz1UcnVlKQorICAgICAgICAg
ICAgICAgICAgICBudW1fY2hpbGRfcHJvY2Vzc2VzPTEsIHJldHJ5aW5nPVRydWUpCiAKICAgICAg
ICAgICAgICAgICBpZiBlbmFibGVkX3BpeGVsX3Rlc3RzX2luX3JldHJ5OgogICAgICAgICAgICAg
ICAgICAgICBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzID0gRmFsc2UKQEAgLTI0NiwxNyArMjU2
LDEzIEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKICAgICAgICAgICAgICAgICBleGl0X2NvZGUg
PSBzZWxmLl9wb3J0LmV4aXRfY29kZV9mcm9tX3N1bW1hcml6ZWRfcmVzdWx0cyhzdW1tYXJpemVk
X3Jlc3VsdHMpCiAgICAgICAgIHJldHVybiB0ZXN0X3J1bl9yZXN1bHRzLlJ1bkRldGFpbHMoZXhp
dF9jb2RlLCBzdW1tYXJpemVkX3Jlc3VsdHMsIGluaXRpYWxfcmVzdWx0cywgcmV0cnlfcmVzdWx0
cywgZW5hYmxlZF9waXhlbF90ZXN0c19pbl9yZXRyeSkKIAotICAgIGRlZiBfcnVuX3Rlc3RzKHNl
bGYsIHRlc3RzX3RvX3J1biwgdGVzdHNfdG9fc2tpcCwgcmVwZWF0X2VhY2gsIGl0ZXJhdGlvbnMs
IG51bV93b3JrZXJzLCByZXRyeWluZyk6CisgICAgZGVmIF9ydW5fdGVzdHMoc2VsZiwgdGVzdHNf
dG9fcnVuLCB0ZXN0c190b19za2lwLCByZXBlYXRfZWFjaCwgaXRlcmF0aW9ucywgbnVtX2NoaWxk
X3Byb2Nlc3NlcywgcmV0cnlpbmcpOgogICAgICAgICBuZWVkc19odHRwID0gYW55KChzZWxmLl9p
c19odHRwX3Rlc3QodGVzdCkgYW5kIG5vdCBzZWxmLl9pc193ZWJfcGxhdGZvcm1fdGVzdCh0ZXN0
KSkgZm9yIHRlc3QgaW4gdGVzdHNfdG9fcnVuKQogICAgICAgICBuZWVkc193ZWJfcGxhdGZvcm1f
dGVzdF9zZXJ2ZXIgPSBhbnkoc2VsZi5faXNfd2ViX3BsYXRmb3JtX3Rlc3QodGVzdCkgZm9yIHRl
c3QgaW4gdGVzdHNfdG9fcnVuKQogICAgICAgICBuZWVkc193ZWJzb2NrZXRzID0gYW55KHNlbGYu
X2lzX3dlYnNvY2tldF90ZXN0KHRlc3QpIGZvciB0ZXN0IGluIHRlc3RzX3RvX3J1bikKIAotICAg
ICAgICB0ZXN0X2lucHV0cyA9IFtdCi0gICAgICAgIGZvciBfIGluIHhyYW5nZShpdGVyYXRpb25z
KToKLSAgICAgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzX3RvX3J1bjoKLSAgICAgICAgICAgICAg
ICBmb3IgXyBpbiB4cmFuZ2UocmVwZWF0X2VhY2gpOgotICAgICAgICAgICAgICAgICAgICB0ZXN0
X2lucHV0cy5hcHBlbmQoc2VsZi5fdGVzdF9pbnB1dF9mb3JfZmlsZSh0ZXN0KSkKLSAgICAgICAg
cmV0dXJuIHNlbGYuX3J1bm5lci5ydW5fdGVzdHMoc2VsZi5fZXhwZWN0YXRpb25zLCB0ZXN0X2lu
cHV0cywgdGVzdHNfdG9fc2tpcCwgbnVtX3dvcmtlcnMsIG5lZWRzX2h0dHAsIG5lZWRzX3dlYnNv
Y2tldHMsIG5lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlciwgcmV0cnlpbmcpCisgICAgICAg
IHRlc3RfaW5wdXRzID0gc2VsZi5fZ2V0X3Rlc3RfaW5wdXRzKHRlc3RzX3RvX3J1biwgcmVwZWF0
X2VhY2gsIGl0ZXJhdGlvbnMpCisgICAgICAgIHJldHVybiBzZWxmLl9ydW5uZXIucnVuX3Rlc3Rz
KHNlbGYuX2V4cGVjdGF0aW9ucywgdGVzdF9pbnB1dHMsIHRlc3RzX3RvX3NraXAsIG51bV9jaGls
ZF9wcm9jZXNzZXMsIG5lZWRzX2h0dHAsIG5lZWRzX3dlYnNvY2tldHMsIG5lZWRzX3dlYl9wbGF0
Zm9ybV90ZXN0X3NlcnZlciwgcmV0cnlpbmcpCiAKICAgICBkZWYgX2NsZWFuX3VwX3J1bihzZWxm
KToKICAgICAgICAgX2xvZy5kZWJ1ZygiRmx1c2hpbmcgc3Rkb3V0IikKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9iYXNlLnB5CShyZXZpc2lvbiAxOTM0MTApCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvYmFzZS5weQkod29ya2luZyBjb3B5KQpAQCAtODgyLDcgKzg4MiwxMCBA
QCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgIG1ldGhvZC4iIiIKICAgICAgICAgcmV0dXJu
IFRydWUKIAotICAgIGRlZiByZXNldF9wcmVmZXJlbmNlcyhzZWxmKToKKyAgICBkZWYgbWF4aW11
bV9zaW11bGF0b3JfY291bnQoc2VsZik6CisgICAgICAgIHJldHVybiBzeXMubWF4aW50CisKKyAg
ICBkZWYgcmVzZXRfcHJlZmVyZW5jZXMoc2VsZiwgbnVtX3dvcmtlcnM9MSk6CiAgICAgICAgICIi
IklmIGEgcG9ydCBuZWVkcyB0byByZXNldCBwbGF0Zm9ybS1zcGVjaWZpYyBwZXJzaXN0ZW50IHBy
ZWZlcmVuY2UKICAgICAgICAgc3RvcmFnZSwgaXQgc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9k
LiIiIgogICAgICAgICBwYXNzCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9z
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkJKHJl
dmlzaW9uIDE5MzQxMCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkJKHdv
cmtpbmcgY29weSkKQEAgLTcwLDE2ICs3MCwxNiBAQCBjbGFzcyBJT1NQb3J0KEFwcGxlUG9ydCk6
CiAKIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoUG9ydCk6CiAgICAgcG9ydF9uYW1lID0gImlvcy1z
aW11bGF0b3IiCi0KICAgICBGVVRVUkVfVkVSU0lPTiA9ICdmdXR1cmUnCi0KICAgICBBUkNISVRF
Q1RVUkVTID0gWyd4ODZfNjQnLCAneDg2J10KLQogICAgIERFRkFVTFRfQVJDSElURUNUVVJFID0g
J3g4Nl82NCcKLQogICAgIFNJTVVMQVRPUl9CVU5ETEVfSUQgPSAnY29tLmFwcGxlLmlwaG9uZXNp
bXVsYXRvcicKLQogICAgIHJlbGF5X25hbWUgPSAnTGF5b3V0VGVzdFJlbGF5JworICAgIG51bV93
b3JrZXJzID0gMQorICAgIFNJTVVMQVRPUl9ESVJFQ1RPUlkgPSAiL3RtcC9TaW11bGF0b3JzLyIK
KyAgICBMU1JFR0lTVEVSX1BBVEggPSAiL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29yZVNl
cnZpY2VzLmZyYW1ld29yay9GcmFtZXdvcmtzL0xhdW5jaFNlcnZpY2VzLmZyYW1ld29yay9WZXJz
aW9ucy9DdXJyZW50L1N1cHBvcnQvbHNyZWdpc3RlciIKKyAgICBQUk9DRVNTX0NPVU5UX0VTVElN
QVRFX1BFUl9TSU1VTEFUT1JfSU5TVEFOQ0UgPSAxMDAKKyAgICBNQVhfTlVNQkVSX09GX1NJTVVM
QVRPUiA9IDE1CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAg
ICAgICAgc3VwZXIoSU9TU2ltdWxhdG9yUG9ydCwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dh
cmdzKQpAQCAtMTk5LDIyICsxOTksMzEgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChQb3J0KToK
ICAgICBkZWYgX3BvcnRfc3BlY2lmaWNfZXhwZWN0YXRpb25zX2ZpbGVzKHNlbGYpOgogICAgICAg
ICByZXR1cm4gbGlzdChyZXZlcnNlZChbc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX3dlYmtp
dF9iYXNlbGluZV9wYXRoKHApLCAnVGVzdEV4cGVjdGF0aW9ucycpIGZvciBwIGluIHNlbGYuYmFz
ZWxpbmVfc2VhcmNoX3BhdGgoKV0pKQogCisgICAgQG1lbW9pemVkCisgICAgZGVmIG1heGltdW1f
c2ltdWxhdG9yX2NvdW50KHNlbGYpOgorICAgICAgICBzeXN0ZW1fcHJvY2Vzc19jb3VudF9saW1p
dCA9IGludChzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbImxhdW5jaGN0bCIsICJsaW1pdCIsICJt
YXhwcm9jIl0pLnN0cmlwKCkuc3BsaXQoKVsxXSkKKyAgICAgICAgY3VycmVudF9wcm9jZXNzX2Nv
dW50ID0gbGVuKHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsicHMiLCAiYXV4Il0pLnN0cmlwKCku
c3BsaXQoJ1xuJykpCisgICAgICAgIF9sb2cuaW5mbygnUHJvY2VzcyBsaW1pdDogJWQsIGN1cnJl
bnQgcHJvY2Vzc2VzOiAlZCcgJSAoc3lzdGVtX3Byb2Nlc3NfY291bnRfbGltaXQsIGN1cnJlbnRf
cHJvY2Vzc19jb3VudCkpCisgICAgICAgIG1heGltdW1fc2ltdWxhdG9yX2NvdW50X29uX3RoaXNf
c3lzdGVtID0gKHN5c3RlbV9wcm9jZXNzX2NvdW50X2xpbWl0IC0gY3VycmVudF9wcm9jZXNzX2Nv
dW50KSAvLyBzZWxmLlBST0NFU1NfQ09VTlRfRVNUSU1BVEVfUEVSX1NJTVVMQVRPUl9JTlNUQU5D
RQorICAgICAgICByZXR1cm4gbWluKG1heGltdW1fc2ltdWxhdG9yX2NvdW50X29uX3RoaXNfc3lz
dGVtLCBzZWxmLk1BWF9OVU1CRVJfT0ZfU0lNVUxBVE9SKQorCiAgICAgZGVmIHNldHVwX3Rlc3Rf
cnVuKHNlbGYpOgotICAgICAgICBkZXZpY2VfdWRpZCA9IHNlbGYudGVzdGluZ19kZXZpY2UudWRp
ZAotICAgICAgICAjIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMjA5MTYxNDA+IFN3aXRjaCB0byB1
c2luZyBDb3JlU2ltdWxhdG9yLmZyYW1ld29yayBmb3IgbGF1bmNoaW5nIGFuZCBxdWl0dGluZyBp
T1MgU2ltdWxhdG9yCi0gICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbCi0gICAg
ICAgICAgICAnb3BlbicsICctYicsIHNlbGYuU0lNVUxBVE9SX0JVTkRMRV9JRCwKLSAgICAgICAg
ICAgICctLWFyZ3MnLCAnLUN1cnJlbnREZXZpY2VVRElEJywgZGV2aWNlX3VkaWRdKQotICAgICAg
ICBTaW11bGF0b3Iud2FpdF91bnRpbF9kZXZpY2VfaXNfaW5fc3RhdGUoZGV2aWNlX3VkaWQsIFNp
bXVsYXRvci5EZXZpY2VTdGF0ZS5CT09URUQpCi0KLSAgICAgICAgIyBGSVhNRTogUGF1c2UgaGVy
ZSB1bnRpbCBTcHJpbmdCb2FyZCBmaW5pc2hlcyBsYXVuY2hpbmcgdG8gd29ya2Fyb3VuZCA8cmRh
cjovL3Byb2JsZW0vMjAwMDAzODM+LgotICAgICAgICBib290X2RlbGF5ID0gMzAKLSAgICAgICAg
X2xvZy5kZWJ1ZygnV2FpdGluZyB7c2Vjb25kc30gc2Vjb25kcyBmb3IgaU9TIFNpbXVsYXRvciB0
byBmaW5pc2ggYm9vdGluZyAuLi4nLmZvcm1hdChzZWNvbmRzPWJvb3RfZGVsYXkpKQotICAgICAg
ICB0aW1lLnNsZWVwKGJvb3RfZGVsYXkpCisgICAgICAgIGZvciBpIGluIHhyYW5nZShzZWxmLm51
bV93b3JrZXJzKToKKyAgICAgICAgICAgIGRldmljZV91ZGlkID0gc2VsZi50ZXN0aW5nX2Rldmlj
ZShpKS51ZGlkCisgICAgICAgICAgICAjIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMjA5MTYxNDA+
IFN3aXRjaCB0byB1c2luZyBDb3JlU2ltdWxhdG9yLmZyYW1ld29yayBmb3IgbGF1bmNoaW5nIGFu
ZCBxdWl0dGluZyBpT1MgU2ltdWxhdG9yCisgICAgICAgICAgICBzZWxmLl9leGVjdXRpdmUucnVu
X2NvbW1hbmQoWworICAgICAgICAgICAgICAgICdvcGVuJywgJy1iJywgc2VsZi5TSU1VTEFUT1Jf
QlVORExFX0lEICsgc3RyKGkpLAorICAgICAgICAgICAgICAgICctLWFyZ3MnLCAnLUN1cnJlbnRE
ZXZpY2VVRElEJywgZGV2aWNlX3VkaWRdKQorCisgICAgICAgICAgICBpZiAoaW50KHN1YnByb2Nl
c3MuY2hlY2tfb3V0cHV0KFsic3dfdmVycyIsICItcHJvZHVjdFZlcnNpb24iXSkuc3RyaXAoKS5y
ZXBsYWNlKCIxMC4iLCAiIikpIDwgMTIpOgorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkK
KworICAgICAgICBfbG9nLmluZm8oJ1dhaXRpbmcgZm9yIGFsbCBpT1MgU2ltdWxhdG9ycyB0byBm
aW5pc2ggYm9vdGluZy4nKQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uoc2VsZi5udW1fd29ya2Vy
cyk6CisgICAgICAgICAgICBTaW11bGF0b3Iud2FpdF91bnRpbF9kZXZpY2VfaXNfYm9vdGVkKHNl
bGYudGVzdGluZ19kZXZpY2UoaSkudWRpZCkKIAogICAgIGRlZiBfcXVpdF9pb3Nfc2ltdWxhdG9y
KHNlbGYpOgotICAgICAgICAjIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMjA5MTYxNDA+IFN3aXRj
aCB0byB1c2luZyBDb3JlU2ltdWxhdG9yLmZyYW1ld29yayBmb3IgbGF1bmNoaW5nIGFuZCBxdWl0
dGluZyBpT1MgU2ltdWxhdG9yCi0gICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChb
J29zYXNjcmlwdCcsICctZScsICd0ZWxsIGFwcGxpY2F0aW9uIGlkICJ7MH0iIHRvIHF1aXQnLmZv
cm1hdChzZWxmLlNJTVVMQVRPUl9CVU5ETEVfSUQpXSkKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxs
KFsia2lsbGFsbCIsICItOSIsICItdiIsICItbSIsICJTaW11bGF0b3IiXSkKIAogICAgIGRlZiBj
bGVhbl91cF90ZXN0X3J1bihzZWxmKToKICAgICAgICAgc3VwZXIoSU9TU2ltdWxhdG9yUG9ydCwg
c2VsZikuY2xlYW5fdXBfdGVzdF9ydW4oKQpAQCAtMjI3LDYgKzIzNiwxNCBAQCBjbGFzcyBJT1NT
aW11bGF0b3JQb3J0KFBvcnQpOgogICAgICAgICAgICAgICAgIF9sb2cud2FybmluZygnVW5hYmxl
IHRvIHJlbW92ZSAnICsgZmlmbykKICAgICAgICAgICAgICAgICBwYXNzCiAKKyAgICAgICAgZm9y
IGkgaW4geHJhbmdlKHNlbGYubnVtX3dvcmtlcnMpOgorICAgICAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbChbc2VsZi5MU1JFR0lTVEVSX1BBVEgsICItdiIsICIt
dSIsIHNlbGYuZ2V0X3NpbXVsYXRvcl9wYXRoKGkpXSkKKyAgICAgICAgICAgICAgICBzaHV0aWwu
cm10cmVlKHNlbGYuZ2V0X3NpbXVsYXRvcl9wYXRoKGkpLCBpZ25vcmVfZXJyb3JzPVRydWUpCisg
ICAgICAgICAgICAgICAgU2ltdWxhdG9yKCkuZGVsZXRlX2RldmljZShzZWxmLnRlc3RpbmdfZGV2
aWNlKGkpLnVkaWQpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgX2xvZy53
YXJuaW5nKCdVbmFibGUgdG8gcmVtb3ZlIFNpbXVsYXRvcicgKyBzdHIoaSkpCisKICAgICBkZWYg
c2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyKHNlbGYsIHNlcnZlcl9uYW1lPU5vbmUpOgogICAgICAg
ICBlbnYgPSBzdXBlcihJT1NTaW11bGF0b3JQb3J0LCBzZWxmKS5zZXR1cF9lbnZpcm9uX2Zvcl9z
ZXJ2ZXIoc2VydmVyX25hbWUpCiAgICAgICAgIGlmIHNlcnZlcl9uYW1lID09IHNlbGYuZHJpdmVy
X25hbWUoKToKQEAgLTI0NSwxMSArMjYyLDEzIEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoUG9y
dCk6CiAgICAgICAgIGlmIG5vdCBzZWxmLnNpbXVsYXRvcl9ydW50aW1lLmF2YWlsYWJsZToKICAg
ICAgICAgICAgIF9sb2cuZXJyb3IoJ1RoZSBpT1MgU2ltdWxhdG9yIHJ1bnRpbWUgd2l0aCBpZGVu
dGlmaWVyICJ7MH0iIGNhbm5vdCBiZSB1c2VkIGJlY2F1c2UgaXQgaXMgdW5hdmFpbGFibGUuJy5m
b3JtYXQoc2VsZi5zaW11bGF0b3JfcnVudGltZS5pZGVudGlmaWVyKSkKICAgICAgICAgICAgIHJl
dHVybiBGYWxzZQotICAgICAgICB0ZXN0aW5nX2RldmljZSA9IHNlbGYudGVzdGluZ19kZXZpY2Ug
ICMgTWF5IGNyZWF0ZSBhIG5ldyBzaW11bGF0b3IgZGV2aWNlCi0KLSAgICAgICAgaWYgbm90IFNp
bXVsYXRvci5jaGVja19zaW11bGF0b3JfZGV2aWNlX2FuZF9lcmFzZV9pZl9uZWVkZWQoc2VsZi5o
b3N0LCB0ZXN0aW5nX2RldmljZS51ZGlkKToKLSAgICAgICAgICAgIF9sb2cuZXJyb3IoJ1VuYWJs
ZSB0byBib290IHRoZSBzaW11bGF0b3IgZGV2aWNlIHdpdGggVURJRCB7MH0uJy5mb3JtYXQodGVz
dGluZ19kZXZpY2UudWRpZCkpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZm9y
IGkgaW4geHJhbmdlKHNlbGYubnVtX3dvcmtlcnMpOgorICAgICAgICAgICAgdGVzdGluZ19kZXZp
Y2UgPSBzZWxmLnRlc3RpbmdfZGV2aWNlKGkpCisgICAgICAgICAgICBfbG9nLmRlYnVnKCdWZXJp
ZnlpbmcgU2ltdWxhdG9yezB9IHdpdGggVURJRCB7MX0uJy5mb3JtYXQoaSwgdGVzdGluZ19kZXZp
Y2UudWRpZCkpCisKKyAgICAgICAgICAgIGlmIG5vdCBTaW11bGF0b3IuY2hlY2tfc2ltdWxhdG9y
X2RldmljZV9hbmRfZXJhc2VfaWZfbmVlZGVkKHNlbGYuaG9zdCwgdGVzdGluZ19kZXZpY2UudWRp
ZCk6CisgICAgICAgICAgICAgICAgX2xvZy5lcnJvcignVW5hYmxlIHRvIGJvb3QgdGhlIHNpbXVs
YXRvciBkZXZpY2Ugd2l0aCBVRElEIHswfS4nLmZvcm1hdCh0ZXN0aW5nX2RldmljZS51ZGlkKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgcmV0dXJuIHN1cGVyKElPU1Np
bXVsYXRvclBvcnQsIHNlbGYpLmNoZWNrX3N5c19kZXBzKG5lZWRzX2h0dHApCiAKICAgICBkZWYg
Y2hlY2tfZm9yX2xlYWtzKHNlbGYsIHByb2Nlc3NfbmFtZSwgcHJvY2Vzc19waWQpOgpAQCAtMzIz
LDEwICszNDIsMTIgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChQb3J0KToKICAgICAgICAgICAg
IHJldHVybiBzdGRlcnIsIE5vbmUKICAgICAgICAgcmV0dXJuIHN0ZGVyciwgY3Jhc2hfbG9nCiAK
LSAgICBAcHJvcGVydHkKICAgICBAbWVtb2l6ZWQKLSAgICBkZWYgdGVzdGluZ19kZXZpY2Uoc2Vs
Zik6Ci0gICAgICAgIHJldHVybiBTaW11bGF0b3IoKS5sb29rdXBfb3JfY3JlYXRlX2RldmljZShz
ZWxmLnNpbXVsYXRvcl9kZXZpY2VfdHlwZS5uYW1lICsgJyBXZWJLaXQgVGVzdGVyJywgc2VsZi5z
aW11bGF0b3JfZGV2aWNlX3R5cGUsIHNlbGYuc2ltdWxhdG9yX3J1bnRpbWUpCisgICAgZGVmIHRl
c3RpbmdfZGV2aWNlKHNlbGYsIG51bWJlcik6CisgICAgICAgIHJldHVybiBTaW11bGF0b3IoKS5s
b29rdXBfb3JfY3JlYXRlX2RldmljZShzZWxmLnNpbXVsYXRvcl9kZXZpY2VfdHlwZS5uYW1lICsg
JyBXZWJLaXQgVGVzdGVyJyArIHN0cihudW1iZXIpLCBzZWxmLnNpbXVsYXRvcl9kZXZpY2VfdHlw
ZSwgc2VsZi5zaW11bGF0b3JfcnVudGltZSkKKworICAgIGRlZiBnZXRfc2ltdWxhdG9yX3BhdGgo
c2VsZiwgc3VmZml4PSIiKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLlNJTVVM
QVRPUl9ESVJFQ1RPUlksICJTaW11bGF0b3IiICsgc3RyKHN1ZmZpeCkgKyAiLmFwcCIpCiAKICAg
ICBkZWYgX21lcmdlX2NyYXNoX2xvZ3Moc2VsZiwgbG9ncywgbmV3X2xvZ3MsIGNyYXNoZWRfcHJv
Y2Vzc2VzKToKICAgICAgICAgZm9yIHRlc3QsIGNyYXNoX2xvZyBpbiBuZXdfbG9ncy5pdGVyaXRl
bXMoKToKQEAgLTM5NSwxNSArNDE2LDE5IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoUG9ydCk6
CiAgICAgICAgICAgICB0b2xlcmFuY2UgPSBzZWxmLmdldF9vcHRpb24oJ3RvbGVyYW5jZScpCiAg
ICAgICAgIHJldHVybiBzZWxmLl9pbWFnZV9kaWZmZXIuZGlmZl9pbWFnZShleHBlY3RlZF9jb250
ZW50cywgYWN0dWFsX2NvbnRlbnRzLCB0b2xlcmFuY2UpCiAKLSAgICBkZWYgcmVzZXRfcHJlZmVy
ZW5jZXMoc2VsZik6CisgICAgZGVmIHJlc2V0X3ByZWZlcmVuY2VzKHNlbGYsIG51bV93b3JrZXJz
KToKKyAgICAgICAgc2VsZi5udW1fd29ya2VycyA9IG51bV93b3JrZXJzCiAgICAgICAgICMgV2Ug
YXNzdW1lIHRoYXQgaWYgdGVzdGluZ19kZXZpY2UgaXMgYm9vdGVkIHRoYXQgaXQgd2FzIGJvb3Rl
ZCBieSB0aGUgaU9TIFNpbXVsYXRvciBhcHAKICAgICAgICAgIyAoYXMgb3Bwb3NlZCB0byBzaW1j
dGwpLiBTbywgcXVpdCB0aGUgaU9TIFNpbXVsYXRvciBhcHAgdG8gc2h1dGRvd24gdGVzdGluZ19k
ZXZpY2UuCiAgICAgICAgIHNlbGYuX3F1aXRfaW9zX3NpbXVsYXRvcigpCi0gICAgICAgIFNpbXVs
YXRvci53YWl0X3VudGlsX2RldmljZV9pc19pbl9zdGF0ZShzZWxmLnRlc3RpbmdfZGV2aWNlLnVk
aWQsIFNpbXVsYXRvci5EZXZpY2VTdGF0ZS5TSFVURE9XTikKKyAgICAgICAgc2VsZi5fY3JlYXRl
U2ltdWxhdG9yQXBwcygpCiAKLSAgICAgICAgZGF0YV9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYu
dGVzdGluZ19kZXZpY2UucGF0aCwgJ2RhdGEnKQotICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGRh
dGFfcGF0aCk6Ci0gICAgICAgICAgICBzaHV0aWwucm10cmVlKGRhdGFfcGF0aCkKKyAgICAgICAg
Zm9yIGkgaW4geHJhbmdlKHNlbGYubnVtX3dvcmtlcnMpOgorICAgICAgICAgICAgU2ltdWxhdG9y
LndhaXRfdW50aWxfZGV2aWNlX2lzX2luX3N0YXRlKHNlbGYudGVzdGluZ19kZXZpY2UoaSkudWRp
ZCwgU2ltdWxhdG9yLkRldmljZVN0YXRlLlNIVVRET1dOKQorCisgICAgICAgICAgICBkYXRhX3Bh
dGggPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0aW5nX2RldmljZShpKS5wYXRoLCAnZGF0YScpCisg
ICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGRhdGFfcGF0aCk6CisgICAgICAgICAgICAgICAg
c2h1dGlsLnJtdHJlZShkYXRhX3BhdGgpCiAKICAgICBkZWYgbWFrZV9jb21tYW5kKHNlbGYpOgog
ICAgICAgICByZXR1cm4gc2VsZi54Y3J1bl9maW5kKCdtYWtlJywgJy91c3IvYmluL21ha2UnKQpA
QCAtNDI4LDMgKzQ1MywyMyBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KFBvcnQpOgogCiAgICAg
ZGVmIHN0ZGVycl9wYXR0ZXJuc190b19zdHJpcChzZWxmKToKICAgICAgICAgcmV0dXJuIFtdCisK
KyAgICBkZWYgX2NyZWF0ZVNpbXVsYXRvckFwcHMoc2VsZik6CisgICAgICAgIGZvciBpIGluIHhy
YW5nZShzZWxmLm51bV93b3JrZXJzKToKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZVNpbXVsYXRv
ckFwcChpKQorCisgICAgZGVmICBfY3JlYXRlU2ltdWxhdG9yQXBwKHNlbGYsIHN1ZmZpeCk6Cisg
ICAgICAgIGRlc3RpbmF0aW9uID0gc2VsZi5nZXRfc2ltdWxhdG9yX3BhdGgoc3VmZml4KQorICAg
ICAgICBfbG9nLmluZm8oIkNyZWF0aW5nIGFwcDoiICsgZGVzdGluYXRpb24pCisgICAgICAgIGlm
IG9zLnBhdGguZXhpc3RzKGRlc3RpbmF0aW9uKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUo
ZGVzdGluYXRpb24sIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKKyAgICAgICAgc2ltdWxhdG9yX2FwcF9w
YXRoID0gc2VsZi5kZXZlbG9wZXJfZGlyICsgIi9BcHBsaWNhdGlvbnMvU2ltdWxhdG9yLmFwcCIK
KyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNpbXVsYXRvcl9hcHBfcGF0aCwgZGVzdGluYXRpb24p
CisKKyAgICAgICAgIyBVcGRhdGUgYXBwJ3MgcGFja2FnZS1uYW1lIGluc2lkZSBwbGlzdCBhbmQg
cmUtY29kZS1zaWduIGl0CisgICAgICAgIHBsaXN0X3BhdGggPSBkZXN0aW5hdGlvbiArICIvQ29u
dGVudHMvSW5mby5wbGlzdCIKKyAgICAgICAgY29tbWFuZCA9ICJTZXQgQ0ZCdW5kbGVJZGVudGlm
aWVyIGNvbS5hcHBsZS5pcGhvbmVzaW11bGF0b3IiICsgc3RyKHN1ZmZpeCkKKyAgICAgICAgc3Vi
cHJvY2Vzcy5jYWxsKFsiL3Vzci9saWJleGVjL1BsaXN0QnVkZHkiLCAiLWMiLCBjb21tYW5kLCBw
bGlzdF9wYXRoXSkKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKFsiaW5zdGFsbF9uYW1lX3Rvb2wi
LCAiLWFkZF9ycGF0aCIsIHNlbGYuZGV2ZWxvcGVyX2RpciArICIvTGlicmFyeS9Qcml2YXRlRnJh
bWV3b3Jrcy8iLCBkZXN0aW5hdGlvbiArICIvQ29udGVudHMvTWFjT1MvU2ltdWxhdG9yIl0pCisg
ICAgICAgIHN1YnByb2Nlc3MuY2FsbChbImNvZGVzaWduIiwgIi1mcyIsICItIiwgZGVzdGluYXRp
b25dKQorICAgICAgICBzdWJwcm9jZXNzLmNhbGwoW3NlbGYuTFNSRUdJU1RFUl9QQVRILCAiLXYi
LCAiLWYiLCBkZXN0aW5hdGlvbl0pCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
bWFjLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9tYWMucHkJ
KHJldmlzaW9uIDE5MzQxMCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9tYWMucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTI5Nyw3ICsyOTcsNyBAQCBjbGFzcyBNYWNQb3J0KEFwcGxlUG9y
dCk6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgcmV0dXJuIFRydWUKIAotICAg
IGRlZiByZXNldF9wcmVmZXJlbmNlcyhzZWxmKToKKyAgICBkZWYgcmVzZXRfcHJlZmVyZW5jZXMo
c2VsZiwgbnVtX3dvcmtlcnM9MSk6CiAgICAgICAgIF9sb2cuZGVidWcoIlJlc2V0dGluZyBwZXJz
aXN0ZW50IHByZWZlcmVuY2VzIikKIAogICAgICAgICBmb3IgZG9tYWluIGluIFsiRHVtcFJlbmRl
clRyZWUiLCAiV2ViS2l0VGVzdFJ1bm5lciJdOgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS94Y29kZS9zaW11bGF0b3IucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS94Y29kZS9zaW11bGF0b3IucHkJKHJldmlzaW9uIDE5MzQxMCkKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsNiArMjE1
LDE1IEBAIGNsYXNzIERldmljZShvYmplY3QpOgogICAgICAgICBTaW11bGF0b3Iud2FpdF91bnRp
bF9kZXZpY2VfaXNfaW5fc3RhdGUoZGV2aWNlX3VkaWQsIFNpbXVsYXRvci5EZXZpY2VTdGF0ZS5T
SFVURE9XTikKICAgICAgICAgcmV0dXJuIFNpbXVsYXRvcigpLmZpbmRfZGV2aWNlX2J5X3VkaWQo
ZGV2aWNlX3VkaWQpCiAKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZGVsZXRlKGNscywgdWRp
ZCk6CisgICAgICAgICIiIgorICAgICAgICBEZWxldGUgdGhlIGdpdmVuIENvcmVTaW11bGF0b3Ig
ZGV2aWNlLgorICAgICAgICA6cGFyYW0gdWRpZDogVGhlIHVkaWQgb2YgdGhlIGRldmljZS4KKyAg
ICAgICAgOnR5cGUgdWRpZDogc3RyCisgICAgICAgICIiIgorICAgICAgICBzdWJwcm9jZXNzLmNh
bGwoWyd4Y3J1bicsICdzaW1jdGwnLCAnZGVsZXRlJywgdWRpZF0pCisKICAgICBkZWYgX19lcV9f
KHNlbGYsIG90aGVyKToKICAgICAgICAgcmV0dXJuIHNlbGYudWRpZCA9PSBvdGhlci51ZGlkCiAK
QEAgLTI2NSw2ICsyNzQsMTUgQEAgY2xhc3MgU2ltdWxhdG9yKG9iamVjdCk6CiAgICAgICAgIFNI
VVRUSU5HX0RPV04gPSA0CiAKICAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHdhaXRfdW50aWxf
ZGV2aWNlX2lzX2Jvb3RlZCh1ZGlkLCB0aW1lb3V0X3NlY29uZHM9NjAgKiA1KToKKyAgICAgICAg
d2l0aCB0aW1lb3V0KHNlY29uZHM9dGltZW91dF9zZWNvbmRzKToKKyAgICAgICAgICAgIHdoaWxl
IFRydWU6CisgICAgICAgICAgICAgICAgc3RhdGUgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChb
J3hjcnVuJywgJ3NpbWN0bCcsICdzcGF3bicsIHVkaWQsICdsYXVuY2hjdGwnLCAncHJpbnQnLCAn
c3lzdGVtJ10pLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpZiByZS5zZWFyY2goIkFbXHNdK2Nv
bS5hcHBsZS5zcHJpbmdib2FyZC5zZXJ2aWNlcyIsIHN0YXRlKToKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgxKQorCisgICAgQHN0YXRpY21l
dGhvZAogICAgIGRlZiB3YWl0X3VudGlsX2RldmljZV9pc19pbl9zdGF0ZSh1ZGlkLCB3YWl0X3Vu
dGlsX3N0YXRlLCB0aW1lb3V0X3NlY29uZHM9NjAgKiA1KToKICAgICAgICAgd2l0aCB0aW1lb3V0
KHNlY29uZHM9dGltZW91dF9zZWNvbmRzKToKICAgICAgICAgICAgIHdoaWxlIChTaW11bGF0b3Iu
ZGV2aWNlX3N0YXRlKHVkaWQpICE9IHdhaXRfdW50aWxfc3RhdGUpOgpAQCAtMjk5LDYgKzMxNyw5
IEBAIGNsYXNzIFNpbXVsYXRvcihvYmplY3QpOgogICAgICAgICAgICAgcmV0dXJuIFNpbXVsYXRv
ci5fYm9vdF9hbmRfc2h1dGRvd25fc2ltdWxhdG9yX2RldmljZShob3N0LCB1ZGlkKSA9PSAwICAj
IENhbiBib290IGRldmljZQogICAgICAgICByZXR1cm4gRmFsc2UgICMgQ2Fubm90IGJvb3Qgb3Ig
ZXJhc2UgZGV2aWNlCiAKKyAgICBkZWYgZGVsZXRlX2RldmljZShzZWxmLCB1ZGlkKToKKyAgICAg
ICAgRGV2aWNlLmRlbGV0ZSh1ZGlkKQorCiAgICAgZGVmIHJlZnJlc2goc2VsZik6CiAgICAgICAg
ICIiIgogICAgICAgICBSZWZyZXNoIHJ1bnRpbWUgYW5kIGRldmljZSB0eXBlIGluZm9ybWF0aW9u
IGZyb20gYGBzaW1jdGwgbGlzdGBgLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266808</attachid>
            <date>2015-12-07 13:49:27 -0800</date>
            <delta_ts>2015-12-07 18:25:28 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>patch_multi_sim5</filename>
            <type>text/plain</type>
            <size>16659</size>
            <attacher name="Aakash Jain">aakash_jain</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE5MzY0OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMwIEBACisyMDE1LTEyLTA3ICBBYWthc2ggSmFpbiAgPGFha2FzaF9qYWluQGFwcGxlLmNv
bT4KKworICAgICAgICBVc2UgbXVsdGlwbGUgaU9TIHNpbXVsYXRvciBpbnN0ZWFkIG9mIG11bHRp
cGxlIGFwcHMgb24gc2luZ2xlIHNpbXVsYXRvciBmb3IgcnVubmluZyBsYXlvdXQtdGVzdHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTI0MworICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vMjI5NTUxOTc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBMYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5
L21haW4ubToKKyAgICAgICAgKGdldFRlc3RpbmdTaW1EZXZpY2UpOiBVc2Ugc2VwYXJhdGUgdGVz
dGluZyBkZXZpY2UgZm9yIGVhY2ggd29ya2VyLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHk6CisgICAgICAgIChNYW5hZ2VyLnJ1
bik6IFBlcmZvcm0gY2xlYW51cCBldmVuIGlmIHNldHVwIGZhaWxzLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvcG9ydC9pb3MucHk6CisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LmRlZmF1
bHRfY2hpbGRfcHJvY2Vzc2VzKTogQ2FsY3VsYXRlIG51bWJlciBvZiBzaW11bGF0b3JzIHRvIHVz
ZS4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuc2V0dXBfdGVzdF9ydW4pOiBIYW5kbGUgbXVs
aXRwbGUgc2ltdWxhdG9ycy4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX3F1aXRfaW9zX3Np
bXVsYXRvcik6IFNhbWUKKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuY2xlYW5fdXBfdGVzdF9y
dW4pOiBTYW1lCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LmNoZWNrX3N5c19kZXBzKTogU2Ft
ZQorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC50ZXN0aW5nX2RldmljZSk6IFNhbWUKKyAgICAg
ICAgKElPU1NpbXVsYXRvclBvcnQucmVzZXRfcHJlZmVyZW5jZXMpOiBTYW1lCisgICAgICAgIChJ
T1NTaW11bGF0b3JQb3J0LmdldF9zaW11bGF0b3JfcGF0aCk6IFJldHVybiBzaW11bGF0b3IgcGF0
aC4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX2NyZWF0ZVNpbXVsYXRvckFwcCk6IENyZWF0
ZSB0aGUgY29weSBvZiBzaW11bGF0b3IgYXBwLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
eGNvZGUvc2ltdWxhdG9yLnB5OgorICAgICAgICAoRGV2aWNlLmRlbGV0ZSk6IERlbGV0ZSB0aGUg
c2ltdWxhdG9yIGRldmljZS4KKyAgICAgICAgKFNpbXVsYXRvci5kZWxldGVfZGV2aWNlKTogU2Ft
ZQorICAgICAgICAoU2ltdWxhdG9yLndhaXRfdW50aWxfZGV2aWNlX2lzX2Jvb3RlZCk6IFdhaXQg
Zm9yIGRldmljZSBib290aW5nLgorCiAyMDE1LTEyLTA3ICBNaWNoYWVsIENhdGFuemFybyAgPG1j
YXRhbnphcm9AaWdhbGlhLmNvbT4KIAogICAgICAgICAnamhidWlsZCBidWlsZCcgc2hvdWxkIGZh
aWwgaW1tZWRpYXRlbHkgd2hlbiBidWlsZGluZyBhbnkgbW9kdWxlIGZhaWxzCkluZGV4OiBUb29s
cy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L21haW4ubQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L21haW4ubQkocmV2aXNpb24gMTkz
NjQ3KQorKysgVG9vbHMvTGF5b3V0VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9tYWluLm0JKHdv
cmtpbmcgY29weSkKQEAgLTQzLDEwICs0MywxMCBAQCB2b2lkIHVzYWdlKCkKICAgICBmcHJpbnRm
KHN0ZGVyciwgIiVzXG4iLCBbaGVscFRleHQgVVRGOFN0cmluZ10pOwogfQogCi1TaW1EZXZpY2Ug
KmdldFRlc3RpbmdTaW1EZXZpY2UoU2ltRGV2aWNlVHlwZSAqZGV2aWNlVHlwZSwgU2ltUnVudGlt
ZSAqcnVudGltZSkKK1NpbURldmljZSAqZ2V0VGVzdGluZ1NpbURldmljZShTaW1EZXZpY2VUeXBl
ICpkZXZpY2VUeXBlLCBTaW1SdW50aW1lICpydW50aW1lLCBOU1N0cmluZyAqc3VmZml4KQogewog
ICAgIE5TU3RyaW5nICpkZXZpY2VOYW1lID0gW1tbW2RldmljZVR5cGUgaWRlbnRpZmllcl0gY29t
cG9uZW50c1NlcGFyYXRlZEJ5U3RyaW5nOkAiLiJdIGxhc3RPYmplY3RdIHN0cmluZ0J5UmVwbGFj
aW5nT2NjdXJyZW5jZXNPZlN0cmluZzpAIi0iIHdpdGhTdHJpbmc6QCIgIl07Ci0gICAgZGV2aWNl
TmFtZSA9IFtkZXZpY2VOYW1lIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOkAiIFdlYktpdCBUZXN0
ZXIiXTsKKyAgICBkZXZpY2VOYW1lID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCVA
JUAiLCBkZXZpY2VOYW1lLCBAIiBXZWJLaXQgVGVzdGVyIiwgc3VmZml4XTsKIAogICAgIGZvciAo
U2ltRGV2aWNlICpkZXZpY2UgaW4gW1tTaW1EZXZpY2VTZXQgZGVmYXVsdFNldF0gZGV2aWNlc10p
IHsKICAgICAgICAgaWYgKFtbZGV2aWNlIG5hbWVdIGlzRXF1YWxUb1N0cmluZzpkZXZpY2VOYW1l
XSAmJiBbW2RldmljZSBkZXZpY2VUeXBlXSBpc0VxdWFsVG86ZGV2aWNlVHlwZV0gJiYgW1tkZXZp
Y2UgcnVudGltZV0gaXNFcXVhbFRvOnJ1bnRpbWVdKQpAQCAtMTM2LDcgKzEzNiw3IEBAIGludCBt
YWluKGludCBhcmdjLCBjb25zdCBjaGFyICogYXJndltdKQogICAgICAgICBOU1N0cmluZyAqcHJv
ZHVjdERpciA9IGdldFJlcXVpcmVkU3RyaW5nQXJndW1lbnQoQCJwcm9kdWN0RGlyIik7CiAgICAg
ICAgIE5TQXJyYXkgKmR1bXBUb29sQXJndW1lbnRzID0gZ2V0RHVtcFRvb2xBcmd1bWVudHMoKTsK
IAotICAgICAgICBTaW1EZXZpY2UgKmRldmljZSA9IGdldFRlc3RpbmdTaW1EZXZpY2UoZGV2aWNl
VHlwZSwgcnVudGltZSk7CisgICAgICAgIFNpbURldmljZSAqZGV2aWNlID0gZ2V0VGVzdGluZ1Np
bURldmljZShkZXZpY2VUeXBlLCBydW50aW1lLCBzdWZmaXgpOwogCiAgICAgICAgIHJlbGF5Q29u
dHJvbGxlciA9IFtbTFRSZWxheUNvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoRGV2aWNlOmRldmlj
ZSBwcm9kdWN0RGlyOnByb2R1Y3REaXIgYXBwUGF0aDphcHBQYXRoIGlkZW50aWZpZXJTdWZmaXg6
c3VmZml4IGR1bXBUb29sQXJndW1lbnRzOmR1bXBUb29sQXJndW1lbnRzXTsKICAgICAgICAgW3Jl
bGF5Q29udHJvbGxlciBzdGFydF07CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkJKHJldmlzaW9u
IDE5MzY0NykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xs
ZXJzL21hbmFnZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTE4NywxMSArMTg3LDExIEBAIGNsYXNz
IE1hbmFnZXIob2JqZWN0KToKICAgICAgICAgICAgIF9sb2cuY3JpdGljYWwoJ05vIHRlc3RzIHRv
IHJ1bi4nKQogICAgICAgICAgICAgcmV0dXJuIHRlc3RfcnVuX3Jlc3VsdHMuUnVuRGV0YWlscyhl
eGl0X2NvZGU9LTEpCiAKLSAgICAgICAgaWYgbm90IHNlbGYuX3NldF91cF9ydW4odGVzdHNfdG9f
cnVuKToKLSAgICAgICAgICAgIHJldHVybiB0ZXN0X3J1bl9yZXN1bHRzLlJ1bkRldGFpbHMoZXhp
dF9jb2RlPS0xKQotCi0gICAgICAgIGVuYWJsZWRfcGl4ZWxfdGVzdHNfaW5fcmV0cnkgPSBGYWxz
ZQogICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fc2V0X3VwX3J1bih0ZXN0
c190b19ydW4pOgorICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0X3J1bl9yZXN1bHRzLlJ1bkRl
dGFpbHMoZXhpdF9jb2RlPS0xKQorCisgICAgICAgICAgICBlbmFibGVkX3BpeGVsX3Rlc3RzX2lu
X3JldHJ5ID0gRmFsc2UKICAgICAgICAgICAgIGluaXRpYWxfcmVzdWx0cyA9IHNlbGYuX3J1bl90
ZXN0cyh0ZXN0c190b19ydW4sIHRlc3RzX3RvX3NraXAsIHNlbGYuX29wdGlvbnMucmVwZWF0X2Vh
Y2gsIHNlbGYuX29wdGlvbnMuaXRlcmF0aW9ucywKICAgICAgICAgICAgICAgICBpbnQoc2VsZi5f
b3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpLCByZXRyeWluZz1GYWxzZSkKIApJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvaW9zLnB5CShyZXZpc2lvbiAxOTM2NDcpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvaW9zLnB5CSh3b3JraW5nIGNvcHkpCkBAIC03MCwxNiArNzAsMTUgQEAg
Y2xhc3MgSU9TUG9ydChBcHBsZVBvcnQpOgogCiBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KFBvcnQp
OgogICAgIHBvcnRfbmFtZSA9ICJpb3Mtc2ltdWxhdG9yIgotCiAgICAgRlVUVVJFX1ZFUlNJT04g
PSAnZnV0dXJlJwotCiAgICAgQVJDSElURUNUVVJFUyA9IFsneDg2XzY0JywgJ3g4NiddCi0KICAg
ICBERUZBVUxUX0FSQ0hJVEVDVFVSRSA9ICd4ODZfNjQnCi0KICAgICBTSU1VTEFUT1JfQlVORExF
X0lEID0gJ2NvbS5hcHBsZS5pcGhvbmVzaW11bGF0b3InCi0KICAgICByZWxheV9uYW1lID0gJ0xh
eW91dFRlc3RSZWxheScKKyAgICBudW1fd29ya2VycyA9IE5vbmUKKyAgICBTSU1VTEFUT1JfRElS
RUNUT1JZID0gIi90bXAvV2ViS2l0VGVzdGluZ1NpbXVsYXRvcnMvIgorICAgIExTUkVHSVNURVJf
UEFUSCA9ICIvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlU2VydmljZXMuZnJhbWV3b3Jr
L0ZyYW1ld29ya3MvTGF1bmNoU2VydmljZXMuZnJhbWV3b3JrL1ZlcnNpb25zL0N1cnJlbnQvU3Vw
cG9ydC9sc3JlZ2lzdGVyIgorICAgIFBST0NFU1NfQ09VTlRfRVNUSU1BVEVfUEVSX1NJTVVMQVRP
Ul9JTlNUQU5DRSA9IDEwMAogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJn
cyk6CiAgICAgICAgIHN1cGVyKElPU1NpbXVsYXRvclBvcnQsIHNlbGYpLl9faW5pdF9fKCphcmdz
LCAqKmt3YXJncykKQEAgLTEzMCw2ICsxMjksMjMgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChQ
b3J0KToKICAgICAgICAgICAgIHBhdGggPSBtYWNfY29uZmlnLmJ1aWxkX2RpcmVjdG9yeShzZWxm
LmdldF9vcHRpb24oJ2NvbmZpZ3VyYXRpb24nKSkKICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVz
eXN0ZW0uam9pbihwYXRoLCBzZWxmLnJlbGF5X25hbWUpCiAKKyAgICBAbWVtb2l6ZWQKKyAgICBk
ZWYgZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUg
bnVtYmVyIG9mIFNpbXVsYXRvcnMgaW5zdGFuY2VzIHRvIHVzZSBmb3IgdGhpcyBwb3J0LiIiIgor
ICAgICAgICBudW1fY3B1X2NvcmVzID0gc2VsZi5fZXhlY3V0aXZlLmNwdV9jb3VudCgpIC8gMgor
ICAgICAgICBzeXN0ZW1fcHJvY2Vzc19jb3VudF9saW1pdCA9IGludChzdWJwcm9jZXNzLmNoZWNr
X291dHB1dChbImxhdW5jaGN0bCIsICJsaW1pdCIsICJtYXhwcm9jIl0pLnN0cmlwKCkuc3BsaXQo
KVsxXSkKKyAgICAgICAgY3VycmVudF9wcm9jZXNzX2NvdW50ID0gbGVuKHN1YnByb2Nlc3MuY2hl
Y2tfb3V0cHV0KFsicHMiLCAiYXV4Il0pLnN0cmlwKCkuc3BsaXQoJ1xuJykpCisgICAgICAgIF9s
b2cuaW5mbygnUHJvY2VzcyBsaW1pdDogJWQsIGN1cnJlbnQgI3Byb2Nlc3NlczogJWQnICUgKHN5
c3RlbV9wcm9jZXNzX2NvdW50X2xpbWl0LCBjdXJyZW50X3Byb2Nlc3NfY291bnQpKQorICAgICAg
ICBtYXhpbXVtX3NpbXVsYXRvcl9jb3VudF9vbl90aGlzX3N5c3RlbSA9IChzeXN0ZW1fcHJvY2Vz
c19jb3VudF9saW1pdCAtIGN1cnJlbnRfcHJvY2Vzc19jb3VudCkgLy8gc2VsZi5QUk9DRVNTX0NP
VU5UX0VTVElNQVRFX1BFUl9TSU1VTEFUT1JfSU5TVEFOQ0UKKworICAgICAgICBpZiAobWF4aW11
bV9zaW11bGF0b3JfY291bnRfb25fdGhpc19zeXN0ZW0gPCBudW1fY3B1X2NvcmVzKToKKyAgICAg
ICAgICAgIF9sb2cuaW5mbygnUGxlYXNlIGluY3JlYXNlIHRoZSBwcm9jZXNzIGFuZCBmaWxlIGxp
bWl0IHRvIGxhdW5jaCBtb3JlIFNpbXVsYXRvcnMnKQorICAgICAgICAgICAgX2xvZy5pbmZvKCdS
dW4gImxhdW5jaGN0bCBsaW1pdCIgdG8gY2hlY2sgdGhlc2UgbGltaXRzJykKKyAgICAgICAgICAg
ICMgRklYTUU6IGFkZCB1cmwgZm9yIHdlYnBhZ2UgZXhwbGFpbmluZyBob3cgdG8gaW5jcmVhc2Ug
dGhlc2UgbGltaXRzCisKKyAgICAgICAgc2VsZi5udW1fd29ya2VycyA9IG1pbihtYXhpbXVtX3Np
bXVsYXRvcl9jb3VudF9vbl90aGlzX3N5c3RlbSwgbnVtX2NwdV9jb3JlcykKKyAgICAgICAgcmV0
dXJuIHNlbGYubnVtX3dvcmtlcnMKKwogICAgIGRlZiBkZWZhdWx0X3RpbWVvdXRfbXMoc2VsZik6
CiAgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignZ3VhcmRfbWFsbG9jJyk6CiAgICAgICAgICAg
ICByZXR1cm4gMzUwICogMTAwMApAQCAtMjAwLDIxICsyMTYsMjMgQEAgY2xhc3MgSU9TU2ltdWxh
dG9yUG9ydChQb3J0KToKICAgICAgICAgcmV0dXJuIGxpc3QocmV2ZXJzZWQoW3NlbGYuX2ZpbGVz
eXN0ZW0uam9pbihzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aChwKSwgJ1Rlc3RFeHBlY3RhdGlv
bnMnKSBmb3IgcCBpbiBzZWxmLmJhc2VsaW5lX3NlYXJjaF9wYXRoKCldKSkKIAogICAgIGRlZiBz
ZXR1cF90ZXN0X3J1bihzZWxmKToKLSAgICAgICAgZGV2aWNlX3VkaWQgPSBzZWxmLnRlc3Rpbmdf
ZGV2aWNlLnVkaWQKLSAgICAgICAgIyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzIwOTE2MTQwPiBT
d2l0Y2ggdG8gdXNpbmcgQ29yZVNpbXVsYXRvci5mcmFtZXdvcmsgZm9yIGxhdW5jaGluZyBhbmQg
cXVpdHRpbmcgaU9TIFNpbXVsYXRvcgotICAgICAgICBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1h
bmQoWwotICAgICAgICAgICAgJ29wZW4nLCAnLWInLCBzZWxmLlNJTVVMQVRPUl9CVU5ETEVfSUQs
Ci0gICAgICAgICAgICAnLS1hcmdzJywgJy1DdXJyZW50RGV2aWNlVURJRCcsIGRldmljZV91ZGlk
XSkKLSAgICAgICAgU2ltdWxhdG9yLndhaXRfdW50aWxfZGV2aWNlX2lzX2luX3N0YXRlKGRldmlj
ZV91ZGlkLCBTaW11bGF0b3IuRGV2aWNlU3RhdGUuQk9PVEVEKQotCi0gICAgICAgICMgRklYTUU6
IFBhdXNlIGhlcmUgdW50aWwgU3ByaW5nQm9hcmQgZmluaXNoZXMgbGF1bmNoaW5nIHRvIHdvcmth
cm91bmQgPHJkYXI6Ly9wcm9ibGVtLzIwMDAwMzgzPi4KLSAgICAgICAgYm9vdF9kZWxheSA9IDMw
Ci0gICAgICAgIF9sb2cuZGVidWcoJ1dhaXRpbmcge3NlY29uZHN9IHNlY29uZHMgZm9yIGlPUyBT
aW11bGF0b3IgdG8gZmluaXNoIGJvb3RpbmcgLi4uJy5mb3JtYXQoc2Vjb25kcz1ib290X2RlbGF5
KSkKLSAgICAgICAgdGltZS5zbGVlcChib290X2RlbGF5KQorICAgICAgICBmb3IgaSBpbiB4cmFu
Z2Uoc2VsZi5udW1fd29ya2Vycyk6CisgICAgICAgICAgICBkZXZpY2VfdWRpZCA9IHNlbGYudGVz
dGluZ19kZXZpY2UoaSkudWRpZAorICAgICAgICAgICAgIyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVt
LzIwOTE2MTQwPiBTd2l0Y2ggdG8gdXNpbmcgQ29yZVNpbXVsYXRvci5mcmFtZXdvcmsgZm9yIGxh
dW5jaGluZyBhbmQgcXVpdHRpbmcgaU9TIFNpbXVsYXRvcgorICAgICAgICAgICAgc2VsZi5fZXhl
Y3V0aXZlLnJ1bl9jb21tYW5kKFsKKyAgICAgICAgICAgICAgICAnb3BlbicsICctYicsIHNlbGYu
U0lNVUxBVE9SX0JVTkRMRV9JRCArIHN0cihpKSwKKyAgICAgICAgICAgICAgICAnLS1hcmdzJywg
Jy1DdXJyZW50RGV2aWNlVURJRCcsIGRldmljZV91ZGlkXSkKKworICAgICAgICAgICAgaWYgKGlu
dChzZWxmLmhvc3QucGxhdGZvcm0uX3BsYXRmb3JtX21vZHVsZS5tYWNfdmVyKClbMF0uc3RyaXAo
KS5yZXBsYWNlKCIxMC4iLCAiIikpIDwgMTIpOgorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAo
MSkKKworICAgICAgICBfbG9nLmluZm8oJ1dhaXRpbmcgZm9yIGFsbCBpT1MgU2ltdWxhdG9ycyB0
byBmaW5pc2ggYm9vdGluZy4nKQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uoc2VsZi5udW1fd29y
a2Vycyk6CisgICAgICAgICAgICBTaW11bGF0b3Iud2FpdF91bnRpbF9kZXZpY2VfaXNfYm9vdGVk
KHNlbGYudGVzdGluZ19kZXZpY2UoaSkudWRpZCkKIAogICAgIGRlZiBfcXVpdF9pb3Nfc2ltdWxh
dG9yKHNlbGYpOgotICAgICAgICAjIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMjA5MTYxNDA+IFN3
aXRjaCB0byB1c2luZyBDb3JlU2ltdWxhdG9yLmZyYW1ld29yayBmb3IgbGF1bmNoaW5nIGFuZCBx
dWl0dGluZyBpT1MgU2ltdWxhdG9yCi0gICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFu
ZChbJ29zYXNjcmlwdCcsICctZScsICd0ZWxsIGFwcGxpY2F0aW9uIGlkICJ7MH0iIHRvIHF1aXQn
LmZvcm1hdChzZWxmLlNJTVVMQVRPUl9CVU5ETEVfSUQpXSkKKyAgICAgICAgIyBGSVhNRTogV2Ug
c2hvdWxkIGtpbGwgb25seSB0aGUgU2ltdWxhdG9ycyB3ZSBzdGFydGVkLgorICAgICAgICBzdWJw
cm9jZXNzLmNhbGwoWyJraWxsYWxsIiwgIi05IiwgIi12IiwgIi1tIiwgIlNpbXVsYXRvciJdKQog
CiAgICAgZGVmIGNsZWFuX3VwX3Rlc3RfcnVuKHNlbGYpOgogICAgICAgICBzdXBlcihJT1NTaW11
bGF0b3JQb3J0LCBzZWxmKS5jbGVhbl91cF90ZXN0X3J1bigpCkBAIC0yMjcsNiArMjQ1LDE0IEBA
IGNsYXNzIElPU1NpbXVsYXRvclBvcnQoUG9ydCk6CiAgICAgICAgICAgICAgICAgX2xvZy53YXJu
aW5nKCdVbmFibGUgdG8gcmVtb3ZlICcgKyBmaWZvKQogICAgICAgICAgICAgICAgIHBhc3MKIAor
ICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uoc2VsZi5udW1fd29ya2Vycyk6CisgICAgICAgICAgICB0
cnk6CisgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKFtzZWxmLkxTUkVHSVNURVJfUEFU
SCwgIi12IiwgIi11Iiwgc2VsZi5nZXRfc2ltdWxhdG9yX3BhdGgoaSldKQorICAgICAgICAgICAg
ICAgIHNodXRpbC5ybXRyZWUoc2VsZi5nZXRfc2ltdWxhdG9yX3BhdGgoaSksIGlnbm9yZV9lcnJv
cnM9VHJ1ZSkKKyAgICAgICAgICAgICAgICBTaW11bGF0b3IoKS5kZWxldGVfZGV2aWNlKHNlbGYu
dGVzdGluZ19kZXZpY2UoaSkudWRpZCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAg
ICAgICBfbG9nLndhcm5pbmcoJ1VuYWJsZSB0byByZW1vdmUgU2ltdWxhdG9yJyArIHN0cihpKSkK
KwogICAgIGRlZiBzZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoc2VsZiwgc2VydmVyX25hbWU9Tm9u
ZSk6CiAgICAgICAgIGVudiA9IHN1cGVyKElPU1NpbXVsYXRvclBvcnQsIHNlbGYpLnNldHVwX2Vu
dmlyb25fZm9yX3NlcnZlcihzZXJ2ZXJfbmFtZSkKICAgICAgICAgaWYgc2VydmVyX25hbWUgPT0g
c2VsZi5kcml2ZXJfbmFtZSgpOgpAQCAtMjQ1LDExICsyNzEsMTYgQEAgY2xhc3MgSU9TU2ltdWxh
dG9yUG9ydChQb3J0KToKICAgICAgICAgaWYgbm90IHNlbGYuc2ltdWxhdG9yX3J1bnRpbWUuYXZh
aWxhYmxlOgogICAgICAgICAgICAgX2xvZy5lcnJvcignVGhlIGlPUyBTaW11bGF0b3IgcnVudGlt
ZSB3aXRoIGlkZW50aWZpZXIgInswfSIgY2Fubm90IGJlIHVzZWQgYmVjYXVzZSBpdCBpcyB1bmF2
YWlsYWJsZS4nLmZvcm1hdChzZWxmLnNpbXVsYXRvcl9ydW50aW1lLmlkZW50aWZpZXIpKQogICAg
ICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIHRlc3RpbmdfZGV2aWNlID0gc2VsZi50ZXN0
aW5nX2RldmljZSAgIyBNYXkgY3JlYXRlIGEgbmV3IHNpbXVsYXRvciBkZXZpY2UKLQotICAgICAg
ICBpZiBub3QgU2ltdWxhdG9yLmNoZWNrX3NpbXVsYXRvcl9kZXZpY2VfYW5kX2VyYXNlX2lmX25l
ZWRlZChzZWxmLmhvc3QsIHRlc3RpbmdfZGV2aWNlLnVkaWQpOgotICAgICAgICAgICAgX2xvZy5l
cnJvcignVW5hYmxlIHRvIGJvb3QgdGhlIHNpbXVsYXRvciBkZXZpY2Ugd2l0aCBVRElEIHswfS4n
LmZvcm1hdCh0ZXN0aW5nX2RldmljZS51ZGlkKSkKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQor
ICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uoc2VsZi5udW1fd29ya2Vycyk6CisgICAgICAgICAgICAj
IEZJWE1FOiBUaGlzIGNyZWF0ZXMgdGhlIGRldmljZXMgc2VxdWVudGlhbGx5LCB0aGlzIGNhbiBi
ZSBvcHRpbWl6ZWQuCisgICAgICAgICAgICB0ZXN0aW5nX2RldmljZSA9IHNlbGYudGVzdGluZ19k
ZXZpY2UoaSkKKyAgICAgICAgICAgIF9sb2cuZGVidWcoJ1ZlcmlmeWluZyBTaW11bGF0b3J7MH0g
d2l0aCBVRElEIHsxfS4nLmZvcm1hdChpLCB0ZXN0aW5nX2RldmljZS51ZGlkKSkKKworICAgICAg
ICAgICAgIyBGSVhNRTogdGhpcyBpcyB2ZXJ5IHNsb3csIGVzcGVjaWFsbHkgZm9yIG11bGl0cGxl
IHNpbXVsYXRvcnMsIHdlIHByb2JhYmx5IGRvIG5vdCBuZWVkCisgICAgICAgICAgICAjIHRoaXMg
Y2hlY2tpbmcgYXMgd2UgYXJlIHJlLWNyZWF0aW5nIG5ldyBzaW11bGF0b3IgYXBwcyBhbmQgZGV2
aWNlcyBpbiBldmVyeSBydW4uCisgICAgICAgICAgICBpZiBub3QgU2ltdWxhdG9yLmNoZWNrX3Np
bXVsYXRvcl9kZXZpY2VfYW5kX2VyYXNlX2lmX25lZWRlZChzZWxmLmhvc3QsIHRlc3RpbmdfZGV2
aWNlLnVkaWQpOgorICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ1VuYWJsZSB0byBib290IHRo
ZSBzaW11bGF0b3IgZGV2aWNlIHdpdGggVURJRCB7MH0uJy5mb3JtYXQodGVzdGluZ19kZXZpY2Uu
dWRpZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIHJldHVybiBzdXBl
cihJT1NTaW11bGF0b3JQb3J0LCBzZWxmKS5jaGVja19zeXNfZGVwcyhuZWVkc19odHRwKQogCiAg
ICAgZGVmIGNoZWNrX2Zvcl9sZWFrcyhzZWxmLCBwcm9jZXNzX25hbWUsIHByb2Nlc3NfcGlkKToK
QEAgLTMyMywxMCArMzU0LDEyIEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoUG9ydCk6CiAgICAg
ICAgICAgICByZXR1cm4gc3RkZXJyLCBOb25lCiAgICAgICAgIHJldHVybiBzdGRlcnIsIGNyYXNo
X2xvZwogCi0gICAgQHByb3BlcnR5CiAgICAgQG1lbW9pemVkCi0gICAgZGVmIHRlc3RpbmdfZGV2
aWNlKHNlbGYpOgotICAgICAgICByZXR1cm4gU2ltdWxhdG9yKCkubG9va3VwX29yX2NyZWF0ZV9k
ZXZpY2Uoc2VsZi5zaW11bGF0b3JfZGV2aWNlX3R5cGUubmFtZSArICcgV2ViS2l0IFRlc3Rlcics
IHNlbGYuc2ltdWxhdG9yX2RldmljZV90eXBlLCBzZWxmLnNpbXVsYXRvcl9ydW50aW1lKQorICAg
IGRlZiB0ZXN0aW5nX2RldmljZShzZWxmLCBudW1iZXIpOgorICAgICAgICByZXR1cm4gU2ltdWxh
dG9yKCkubG9va3VwX29yX2NyZWF0ZV9kZXZpY2Uoc2VsZi5zaW11bGF0b3JfZGV2aWNlX3R5cGUu
bmFtZSArICcgV2ViS2l0IFRlc3RlcicgKyBzdHIobnVtYmVyKSwgc2VsZi5zaW11bGF0b3JfZGV2
aWNlX3R5cGUsIHNlbGYuc2ltdWxhdG9yX3J1bnRpbWUpCisKKyAgICBkZWYgZ2V0X3NpbXVsYXRv
cl9wYXRoKHNlbGYsIHN1ZmZpeD0iIik6CisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2Vs
Zi5TSU1VTEFUT1JfRElSRUNUT1JZLCAiU2ltdWxhdG9yIiArIHN0cihzdWZmaXgpICsgIi5hcHAi
KQogCiAgICAgZGVmIF9tZXJnZV9jcmFzaF9sb2dzKHNlbGYsIGxvZ3MsIG5ld19sb2dzLCBjcmFz
aGVkX3Byb2Nlc3Nlcyk6CiAgICAgICAgIGZvciB0ZXN0LCBjcmFzaF9sb2cgaW4gbmV3X2xvZ3Mu
aXRlcml0ZW1zKCk6CkBAIC0zOTYsMTQgKzQyOSwyMyBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0
KFBvcnQpOgogICAgICAgICByZXR1cm4gc2VsZi5faW1hZ2VfZGlmZmVyLmRpZmZfaW1hZ2UoZXhw
ZWN0ZWRfY29udGVudHMsIGFjdHVhbF9jb250ZW50cywgdG9sZXJhbmNlKQogCiAgICAgZGVmIHJl
c2V0X3ByZWZlcmVuY2VzKHNlbGYpOgotICAgICAgICAjIFdlIGFzc3VtZSB0aGF0IGlmIHRlc3Rp
bmdfZGV2aWNlIGlzIGJvb3RlZCB0aGF0IGl0IHdhcyBib290ZWQgYnkgdGhlIGlPUyBTaW11bGF0
b3IgYXBwCi0gICAgICAgICMgKGFzIG9wcG9zZWQgdG8gc2ltY3RsKS4gU28sIHF1aXQgdGhlIGlP
UyBTaW11bGF0b3IgYXBwIHRvIHNodXRkb3duIHRlc3RpbmdfZGV2aWNlLgorICAgICAgICBpZiBz
ZWxmLm51bV93b3JrZXJzIGlzIE5vbmU6CisgICAgICAgICAgICBtYXhfbnVtX3NpbXVsYXRvcnMg
PSBzZWxmLmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKCkKKyAgICAgICAgICAgIHNlbGYubnVtX3dv
cmtlcnMgPSBpbnQoc2VsZi5nZXRfb3B0aW9uKCdjaGlsZF9wcm9jZXNzZXMnLCBtYXhfbnVtX3Np
bXVsYXRvcnMpKQorICAgICAgICAgICAgaWYgKHNlbGYubnVtX3dvcmtlcnMgPiBtYXhfbnVtX3Np
bXVsYXRvcnMpOgorICAgICAgICAgICAgICAgIF9sb2cud2FybigiWW91IGhhdmUgc3BlY2lmaWVk
IHZlcnkgaGlnaCB2YWx1ZSh7MH0pIGZvciAtLWNoaWxkLXByb2Nlc3NlcyIuZm9ybWF0KHNlbGYu
bnVtX3dvcmtlcnMpKQorICAgICAgICAgICAgICAgIF9sb2cud2FybigibWF4aW11bSBjaGlsZC1w
cm9jZXNzZXMgd2hpY2ggY2FuIGJlIHN1cHBvcnRlZCBvbiB0aGlzIHN5c3RlbSBhcmU6IHswfSIu
Zm9ybWF0KG1heF9udW1fc2ltdWxhdG9ycykpCisgICAgICAgICAgICAgICAgX2xvZy53YXJuKCJU
aGlzIGlzIHZlcnkgbGlrZWx5IHRvIGZhaWwuIikKKwogICAgICAgICBzZWxmLl9xdWl0X2lvc19z
aW11bGF0b3IoKQotICAgICAgICBTaW11bGF0b3Iud2FpdF91bnRpbF9kZXZpY2VfaXNfaW5fc3Rh
dGUoc2VsZi50ZXN0aW5nX2RldmljZS51ZGlkLCBTaW11bGF0b3IuRGV2aWNlU3RhdGUuU0hVVERP
V04pCisgICAgICAgIHNlbGYuX2NyZWF0ZVNpbXVsYXRvckFwcHMoKQogCi0gICAgICAgIGRhdGFf
cGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RpbmdfZGV2aWNlLnBhdGgsICdkYXRhJykKLSAg
ICAgICAgaWYgb3MucGF0aC5pc2RpcihkYXRhX3BhdGgpOgotICAgICAgICAgICAgc2h1dGlsLnJt
dHJlZShkYXRhX3BhdGgpCisgICAgICAgIGZvciBpIGluIHhyYW5nZShzZWxmLm51bV93b3JrZXJz
KToKKyAgICAgICAgICAgIFNpbXVsYXRvci53YWl0X3VudGlsX2RldmljZV9pc19pbl9zdGF0ZShz
ZWxmLnRlc3RpbmdfZGV2aWNlKGkpLnVkaWQsIFNpbXVsYXRvci5EZXZpY2VTdGF0ZS5TSFVURE9X
TikKKworICAgICAgICAgICAgZGF0YV9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGluZ19k
ZXZpY2UoaSkucGF0aCwgJ2RhdGEnKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihkYXRh
X3BhdGgpOgorICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZGF0YV9wYXRoKQogCiAgICAg
ZGVmIG1ha2VfY29tbWFuZChzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYueGNydW5fZmluZCgn
bWFrZScsICcvdXNyL2Jpbi9tYWtlJykKQEAgLTQyOCwzICs0NzAsMjMgQEAgY2xhc3MgSU9TU2lt
dWxhdG9yUG9ydChQb3J0KToKIAogICAgIGRlZiBzdGRlcnJfcGF0dGVybnNfdG9fc3RyaXAoc2Vs
Zik6CiAgICAgICAgIHJldHVybiBbXQorCisgICAgZGVmIF9jcmVhdGVTaW11bGF0b3JBcHBzKHNl
bGYpOgorICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uoc2VsZi5udW1fd29ya2Vycyk6CisgICAgICAg
ICAgICBzZWxmLl9jcmVhdGVTaW11bGF0b3JBcHAoaSkKKworICAgIGRlZiBfY3JlYXRlU2ltdWxh
dG9yQXBwKHNlbGYsIHN1ZmZpeCk6CisgICAgICAgIGRlc3RpbmF0aW9uID0gc2VsZi5nZXRfc2lt
dWxhdG9yX3BhdGgoc3VmZml4KQorICAgICAgICBfbG9nLmluZm8oIkNyZWF0aW5nIGFwcDoiICsg
ZGVzdGluYXRpb24pCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRlc3RpbmF0aW9uKToKKyAg
ICAgICAgICAgIHNodXRpbC5ybXRyZWUoZGVzdGluYXRpb24sIGlnbm9yZV9lcnJvcnM9VHJ1ZSkK
KyAgICAgICAgc2ltdWxhdG9yX2FwcF9wYXRoID0gc2VsZi5kZXZlbG9wZXJfZGlyICsgIi9BcHBs
aWNhdGlvbnMvU2ltdWxhdG9yLmFwcCIKKyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNpbXVsYXRv
cl9hcHBfcGF0aCwgZGVzdGluYXRpb24pCisKKyAgICAgICAgIyBVcGRhdGUgYXBwJ3MgcGFja2Fn
ZS1uYW1lIGluc2lkZSBwbGlzdCBhbmQgcmUtY29kZS1zaWduIGl0CisgICAgICAgIHBsaXN0X3Bh
dGggPSBkZXN0aW5hdGlvbiArICIvQ29udGVudHMvSW5mby5wbGlzdCIKKyAgICAgICAgY29tbWFu
ZCA9ICJTZXQgQ0ZCdW5kbGVJZGVudGlmaWVyIGNvbS5hcHBsZS5pcGhvbmVzaW11bGF0b3IiICsg
c3RyKHN1ZmZpeCkKKyAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyIvdXNyL2xpYmV4
ZWMvUGxpc3RCdWRkeSIsICItYyIsIGNvbW1hbmQsIHBsaXN0X3BhdGhdKQorICAgICAgICBzdWJw
cm9jZXNzLmNoZWNrX291dHB1dChbImluc3RhbGxfbmFtZV90b29sIiwgIi1hZGRfcnBhdGgiLCBz
ZWxmLmRldmVsb3Blcl9kaXIgKyAiL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvIiwgZGVzdGlu
YXRpb24gKyAiL0NvbnRlbnRzL01hY09TL1NpbXVsYXRvciJdKQorICAgICAgICBzdWJwcm9jZXNz
LmNoZWNrX291dHB1dChbImNvZGVzaWduIiwgIi1mcyIsICItIiwgZGVzdGluYXRpb25dKQorICAg
ICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbc2VsZi5MU1JFR0lTVEVSX1BBVEgsICItdiIs
ICItZiIsIGRlc3RpbmF0aW9uXSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUv
c2ltdWxhdG9yLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUv
c2ltdWxhdG9yLnB5CShyZXZpc2lvbiAxOTM2NDcpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3hjb2RlL3NpbXVsYXRvci5weQkod29ya2luZyBjb3B5KQpAQCAtMjE1LDYgKzIxNSwxNSBAQCBj
bGFzcyBEZXZpY2Uob2JqZWN0KToKICAgICAgICAgU2ltdWxhdG9yLndhaXRfdW50aWxfZGV2aWNl
X2lzX2luX3N0YXRlKGRldmljZV91ZGlkLCBTaW11bGF0b3IuRGV2aWNlU3RhdGUuU0hVVERPV04p
CiAgICAgICAgIHJldHVybiBTaW11bGF0b3IoKS5maW5kX2RldmljZV9ieV91ZGlkKGRldmljZV91
ZGlkKQogCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRlbGV0ZShjbHMsIHVkaWQpOgorICAg
ICAgICAiIiIKKyAgICAgICAgRGVsZXRlIHRoZSBnaXZlbiBDb3JlU2ltdWxhdG9yIGRldmljZS4K
KyAgICAgICAgOnBhcmFtIHVkaWQ6IFRoZSB1ZGlkIG9mIHRoZSBkZXZpY2UuCisgICAgICAgIDp0
eXBlIHVkaWQ6IHN0cgorICAgICAgICAiIiIKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKFsneGNy
dW4nLCAnc2ltY3RsJywgJ2RlbGV0ZScsIHVkaWRdKQorCiAgICAgZGVmIF9fZXFfXyhzZWxmLCBv
dGhlcik6CiAgICAgICAgIHJldHVybiBzZWxmLnVkaWQgPT0gb3RoZXIudWRpZAogCkBAIC0yNjUs
NiArMjc0LDE1IEBAIGNsYXNzIFNpbXVsYXRvcihvYmplY3QpOgogICAgICAgICBTSFVUVElOR19E
T1dOID0gNAogCiAgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiB3YWl0X3VudGlsX2RldmljZV9p
c19ib290ZWQodWRpZCwgdGltZW91dF9zZWNvbmRzPTYwICogNSk6CisgICAgICAgIHdpdGggdGlt
ZW91dChzZWNvbmRzPXRpbWVvdXRfc2Vjb25kcyk6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgor
ICAgICAgICAgICAgICAgIHN0YXRlID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyd4Y3J1bics
ICdzaW1jdGwnLCAnc3Bhd24nLCB1ZGlkLCAnbGF1bmNoY3RsJywgJ3ByaW50JywgJ3N5c3RlbSdd
KS5zdHJpcCgpCisgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKCJBW1xzXStjb20uYXBwbGUu
c3ByaW5nYm9hcmQuc2VydmljZXMiLCBzdGF0ZSk6CisgICAgICAgICAgICAgICAgICAgIHJldHVy
bgorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKworICAgIEBzdGF0aWNtZXRob2QKICAg
ICBkZWYgd2FpdF91bnRpbF9kZXZpY2VfaXNfaW5fc3RhdGUodWRpZCwgd2FpdF91bnRpbF9zdGF0
ZSwgdGltZW91dF9zZWNvbmRzPTYwICogNSk6CiAgICAgICAgIHdpdGggdGltZW91dChzZWNvbmRz
PXRpbWVvdXRfc2Vjb25kcyk6CiAgICAgICAgICAgICB3aGlsZSAoU2ltdWxhdG9yLmRldmljZV9z
dGF0ZSh1ZGlkKSAhPSB3YWl0X3VudGlsX3N0YXRlKToKQEAgLTI5OSw2ICszMTcsOSBAQCBjbGFz
cyBTaW11bGF0b3Iob2JqZWN0KToKICAgICAgICAgICAgIHJldHVybiBTaW11bGF0b3IuX2Jvb3Rf
YW5kX3NodXRkb3duX3NpbXVsYXRvcl9kZXZpY2UoaG9zdCwgdWRpZCkgPT0gMCAgIyBDYW4gYm9v
dCBkZXZpY2UKICAgICAgICAgcmV0dXJuIEZhbHNlICAjIENhbm5vdCBib290IG9yIGVyYXNlIGRl
dmljZQogCisgICAgZGVmIGRlbGV0ZV9kZXZpY2Uoc2VsZiwgdWRpZCk6CisgICAgICAgIERldmlj
ZS5kZWxldGUodWRpZCkKKwogICAgIGRlZiByZWZyZXNoKHNlbGYpOgogICAgICAgICAiIiIKICAg
ICAgICAgUmVmcmVzaCBydW50aW1lIGFuZCBkZXZpY2UgdHlwZSBpbmZvcm1hdGlvbiBmcm9tIGBg
c2ltY3RsIGxpc3RgYC4K
</data>
<flag name="review"
          id="291832"
          type_id="1"
          status="-"
          setter="ap"
    />
    <flag name="commit-queue"
          id="291833"
          type_id="3"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266839</attachid>
            <date>2015-12-07 18:25:28 -0800</date>
            <delta_ts>2015-12-08 11:23:05 -0800</delta_ts>
            <desc>Updated patch with review comments incorporated.</desc>
            <filename>patch_multi_sim6</filename>
            <type>text/plain</type>
            <size>16902</size>
            <attacher name="Aakash Jain">aakash_jain</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE5MzY3OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMwIEBACisyMDE1LTEyLTA3ICBBYWthc2ggSmFpbiAgPGFha2FzaF9qYWluQGFwcGxlLmNv
bT4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUx
MjQzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yMjk1NTE5Nz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIExheW91dFRlc3RSZWxheS9MYXlvdXRU
ZXN0UmVsYXkvbWFpbi5tOgorICAgICAgICAoZ2V0VGVzdGluZ1NpbURldmljZSk6IFVzZSBzZXBh
cmF0ZSB0ZXN0aW5nIGRldmljZSBmb3IgZWFjaCB3b3JrZXIuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weToKKyAgICAgICAgKE1h
bmFnZXIucnVuKTogUGVyZm9ybSBjbGVhbnVwIGV2ZW4gaWYgc2V0dXAgZmFpbHMuCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weToKKyAgICAgICAgKElPU1NpbXVsYXRvclBv
cnQuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMpOiBDYWxjdWxhdGUgbnVtYmVyIG9mIHNpbXVsYXRv
cnMgdG8gdXNlLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5udW1fY2hpbGRfcHJvY2Vzc2Vz
KTogR2V0cyB0aGUgbnVtYmVyIG9mIHNpbXVsYXRvcnMgZnJvbSBvcHRpb25zIHZhcmlhYmxlLgor
ICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5zZXR1cF90ZXN0X3J1bik6IEhhbmRsZSBtdWxpdHBs
ZSBzaW11bGF0b3JzLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fcXVpdF9pb3Nfc2ltdWxh
dG9yKTogU2FtZQorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5jbGVhbl91cF90ZXN0X3J1bik6
IFNhbWUKKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuY2hlY2tfc3lzX2RlcHMpOiBTYW1lCisg
ICAgICAgIChJT1NTaW11bGF0b3JQb3J0LnRlc3RpbmdfZGV2aWNlKTogU2FtZQorICAgICAgICAo
SU9TU2ltdWxhdG9yUG9ydC5yZXNldF9wcmVmZXJlbmNlcyk6IFNhbWUKKyAgICAgICAgKElPU1Np
bXVsYXRvclBvcnQuZ2V0X3NpbXVsYXRvcl9wYXRoKTogUmV0dXJuIHNpbXVsYXRvciBwYXRoLgor
ICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fY3JlYXRlU2ltdWxhdG9yQXBwKTogQ3JlYXRlIHRo
ZSBjb3B5IG9mIHNpbXVsYXRvciBhcHAuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS94Y29k
ZS9zaW11bGF0b3IucHk6CisgICAgICAgIChEZXZpY2UuZGVsZXRlKTogRGVsZXRlIHRoZSBzaW11
bGF0b3IgZGV2aWNlLgorICAgICAgICAoU2ltdWxhdG9yLmRlbGV0ZV9kZXZpY2UpOiBTYW1lCisg
ICAgICAgIChTaW11bGF0b3Iud2FpdF91bnRpbF9kZXZpY2VfaXNfYm9vdGVkKTogV2FpdCBmb3Ig
ZGV2aWNlIGJvb3RpbmcuCisKIDIwMTUtMTItMDcgIE1pY2hhZWwgQ2F0YW56YXJvICA8bWNhdGFu
emFyb0BpZ2FsaWEuY29tPgogCiAgICAgICAgICdqaGJ1aWxkIGJ1aWxkJyBzaG91bGQgZmFpbCBp
bW1lZGlhdGVseSB3aGVuIGJ1aWxkaW5nIGFueSBtb2R1bGUgZmFpbHMKSW5kZXg6IFRvb2xzL0xh
eW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvbWFpbi5tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0xheW91dFRlc3RSZWxheS9MYXlvdXRUZXN0UmVsYXkvbWFpbi5tCShyZXZpc2lvbiAxOTM2Nzgp
CisrKyBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5b3V0VGVzdFJlbGF5L21haW4ubQkod29ya2lu
ZyBjb3B5KQpAQCAtNDMsMTAgKzQzLDEwIEBAIHZvaWQgdXNhZ2UoKQogICAgIGZwcmludGYoc3Rk
ZXJyLCAiJXNcbiIsIFtoZWxwVGV4dCBVVEY4U3RyaW5nXSk7CiB9CiAKLVNpbURldmljZSAqZ2V0
VGVzdGluZ1NpbURldmljZShTaW1EZXZpY2VUeXBlICpkZXZpY2VUeXBlLCBTaW1SdW50aW1lICpy
dW50aW1lKQorU2ltRGV2aWNlICpnZXRUZXN0aW5nU2ltRGV2aWNlKFNpbURldmljZVR5cGUgKmRl
dmljZVR5cGUsIFNpbVJ1bnRpbWUgKnJ1bnRpbWUsIE5TU3RyaW5nICpzdWZmaXgpCiB7CiAgICAg
TlNTdHJpbmcgKmRldmljZU5hbWUgPSBbW1tbZGV2aWNlVHlwZSBpZGVudGlmaWVyXSBjb21wb25l
bnRzU2VwYXJhdGVkQnlTdHJpbmc6QCIuIl0gbGFzdE9iamVjdF0gc3RyaW5nQnlSZXBsYWNpbmdP
Y2N1cnJlbmNlc09mU3RyaW5nOkAiLSIgd2l0aFN0cmluZzpAIiAiXTsKLSAgICBkZXZpY2VOYW1l
ID0gW2RldmljZU5hbWUgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6QCIgV2ViS2l0IFRlc3RlciJd
OworICAgIGRldmljZU5hbWUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAJUAlQCIs
IGRldmljZU5hbWUsIEAiIFdlYktpdCBUZXN0ZXIiLCBzdWZmaXhdOwogCiAgICAgZm9yIChTaW1E
ZXZpY2UgKmRldmljZSBpbiBbW1NpbURldmljZVNldCBkZWZhdWx0U2V0XSBkZXZpY2VzXSkgewog
ICAgICAgICBpZiAoW1tkZXZpY2UgbmFtZV0gaXNFcXVhbFRvU3RyaW5nOmRldmljZU5hbWVdICYm
IFtbZGV2aWNlIGRldmljZVR5cGVdIGlzRXF1YWxUbzpkZXZpY2VUeXBlXSAmJiBbW2RldmljZSBy
dW50aW1lXSBpc0VxdWFsVG86cnVudGltZV0pCkBAIC0xMzYsNyArMTM2LDcgQEAgaW50IG1haW4o
aW50IGFyZ2MsIGNvbnN0IGNoYXIgKiBhcmd2W10pCiAgICAgICAgIE5TU3RyaW5nICpwcm9kdWN0
RGlyID0gZ2V0UmVxdWlyZWRTdHJpbmdBcmd1bWVudChAInByb2R1Y3REaXIiKTsKICAgICAgICAg
TlNBcnJheSAqZHVtcFRvb2xBcmd1bWVudHMgPSBnZXREdW1wVG9vbEFyZ3VtZW50cygpOwogCi0g
ICAgICAgIFNpbURldmljZSAqZGV2aWNlID0gZ2V0VGVzdGluZ1NpbURldmljZShkZXZpY2VUeXBl
LCBydW50aW1lKTsKKyAgICAgICAgU2ltRGV2aWNlICpkZXZpY2UgPSBnZXRUZXN0aW5nU2ltRGV2
aWNlKGRldmljZVR5cGUsIHJ1bnRpbWUsIHN1ZmZpeCk7CiAKICAgICAgICAgcmVsYXlDb250cm9s
bGVyID0gW1tMVFJlbGF5Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhEZXZpY2U6ZGV2aWNlIHBy
b2R1Y3REaXI6cHJvZHVjdERpciBhcHBQYXRoOmFwcFBhdGggaWRlbnRpZmllclN1ZmZpeDpzdWZm
aXggZHVtcFRvb2xBcmd1bWVudHM6ZHVtcFRvb2xBcmd1bWVudHNdOwogICAgICAgICBbcmVsYXlD
b250cm9sbGVyIHN0YXJ0XTsKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weQkocmV2aXNpb24gMTkz
Njc4KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMv
bWFuYWdlci5weQkod29ya2luZyBjb3B5KQpAQCAtMTg3LDExICsxODcsMTEgQEAgY2xhc3MgTWFu
YWdlcihvYmplY3QpOgogICAgICAgICAgICAgX2xvZy5jcml0aWNhbCgnTm8gdGVzdHMgdG8gcnVu
LicpCiAgICAgICAgICAgICByZXR1cm4gdGVzdF9ydW5fcmVzdWx0cy5SdW5EZXRhaWxzKGV4aXRf
Y29kZT0tMSkKIAotICAgICAgICBpZiBub3Qgc2VsZi5fc2V0X3VwX3J1bih0ZXN0c190b19ydW4p
OgotICAgICAgICAgICAgcmV0dXJuIHRlc3RfcnVuX3Jlc3VsdHMuUnVuRGV0YWlscyhleGl0X2Nv
ZGU9LTEpCi0KLSAgICAgICAgZW5hYmxlZF9waXhlbF90ZXN0c19pbl9yZXRyeSA9IEZhbHNlCiAg
ICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9zZXRfdXBfcnVuKHRlc3RzX3Rv
X3J1bik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRlc3RfcnVuX3Jlc3VsdHMuUnVuRGV0YWls
cyhleGl0X2NvZGU9LTEpCisKKyAgICAgICAgICAgIGVuYWJsZWRfcGl4ZWxfdGVzdHNfaW5fcmV0
cnkgPSBGYWxzZQogICAgICAgICAgICAgaW5pdGlhbF9yZXN1bHRzID0gc2VsZi5fcnVuX3Rlc3Rz
KHRlc3RzX3RvX3J1biwgdGVzdHNfdG9fc2tpcCwgc2VsZi5fb3B0aW9ucy5yZXBlYXRfZWFjaCwg
c2VsZi5fb3B0aW9ucy5pdGVyYXRpb25zLAogICAgICAgICAgICAgICAgIGludChzZWxmLl9vcHRp
b25zLmNoaWxkX3Byb2Nlc3NlcyksIHJldHJ5aW5nPUZhbHNlKQogCkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9pb3MucHkJKHJldmlzaW9uIDE5MzY3OCkKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9pb3MucHkJKHdvcmtpbmcgY29weSkKQEAgLTcwLDE2ICs3MCwxNCBAQCBjbGFz
cyBJT1NQb3J0KEFwcGxlUG9ydCk6CiAKIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoUG9ydCk6CiAg
ICAgcG9ydF9uYW1lID0gImlvcy1zaW11bGF0b3IiCi0KICAgICBGVVRVUkVfVkVSU0lPTiA9ICdm
dXR1cmUnCi0KICAgICBBUkNISVRFQ1RVUkVTID0gWyd4ODZfNjQnLCAneDg2J10KLQogICAgIERF
RkFVTFRfQVJDSElURUNUVVJFID0gJ3g4Nl82NCcKLQogICAgIFNJTVVMQVRPUl9CVU5ETEVfSUQg
PSAnY29tLmFwcGxlLmlwaG9uZXNpbXVsYXRvcicKLQogICAgIHJlbGF5X25hbWUgPSAnTGF5b3V0
VGVzdFJlbGF5JworICAgIFNJTVVMQVRPUl9ESVJFQ1RPUlkgPSAiL3RtcC9XZWJLaXRUZXN0aW5n
U2ltdWxhdG9ycy8iCisgICAgTFNSRUdJU1RFUl9QQVRIID0gIi9TeXN0ZW0vTGlicmFyeS9GcmFt
ZXdvcmtzL0NvcmVTZXJ2aWNlcy5mcmFtZXdvcmsvRnJhbWV3b3Jrcy9MYXVuY2hTZXJ2aWNlcy5m
cmFtZXdvcmsvVmVyc2lvbnMvQ3VycmVudC9TdXBwb3J0L2xzcmVnaXN0ZXIiCisgICAgUFJPQ0VT
U19DT1VOVF9FU1RJTUFURV9QRVJfU0lNVUxBVE9SX0lOU1RBTkNFID0gMTAwCiAKICAgICBkZWYg
X19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgc3VwZXIoSU9TU2ltdWxh
dG9yUG9ydCwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQpAQCAtMTMwLDYgKzEyOCwy
OCBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KFBvcnQpOgogICAgICAgICAgICAgcGF0aCA9IG1h
Y19jb25maWcuYnVpbGRfZGlyZWN0b3J5KHNlbGYuZ2V0X29wdGlvbignY29uZmlndXJhdGlvbicp
KQogICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHBhdGgsIHNlbGYucmVsYXlf
bmFtZSkKIAorICAgIEBtZW1vaXplZAorICAgIGRlZiBudW1fY2hpbGRfcHJvY2Vzc2VzKHNlbGYp
OgorICAgICAgICByZXR1cm4gaW50KHNlbGYuZ2V0X29wdGlvbignY2hpbGRfcHJvY2Vzc2VzJykp
CisKKyAgICBAbWVtb2l6ZWQKKyAgICBkZWYgZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoc2VsZik6
CisgICAgICAgICIiIlJldHVybiB0aGUgbnVtYmVyIG9mIFNpbXVsYXRvcnMgaW5zdGFuY2VzIHRv
IHVzZSBmb3IgdGhpcyBwb3J0LiIiIgorICAgICAgICBiZXN0X2NoaWxkX3Byb2Nlc3NfY291bnRf
Zm9yX2NwdSA9IHNlbGYuX2V4ZWN1dGl2ZS5jcHVfY291bnQoKSAvIDIKKyAgICAgICAgc3lzdGVt
X3Byb2Nlc3NfY291bnRfbGltaXQgPSBpbnQoc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJsYXVu
Y2hjdGwiLCAibGltaXQiLCAibWF4cHJvYyJdKS5zdHJpcCgpLnNwbGl0KClbMV0pCisgICAgICAg
IGN1cnJlbnRfcHJvY2Vzc19jb3VudCA9IGxlbihzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbInBz
IiwgImF1eCJdKS5zdHJpcCgpLnNwbGl0KCdcbicpKQorICAgICAgICBfbG9nLmluZm8oJ1Byb2Nl
c3MgbGltaXQ6ICVkLCBjdXJyZW50ICNwcm9jZXNzZXM6ICVkJyAlIChzeXN0ZW1fcHJvY2Vzc19j
b3VudF9saW1pdCwgY3VycmVudF9wcm9jZXNzX2NvdW50KSkKKyAgICAgICAgbWF4aW11bV9zaW11
bGF0b3JfY291bnRfb25fdGhpc19zeXN0ZW0gPSAoc3lzdGVtX3Byb2Nlc3NfY291bnRfbGltaXQg
LSBjdXJyZW50X3Byb2Nlc3NfY291bnQpIC8vIHNlbGYuUFJPQ0VTU19DT1VOVF9FU1RJTUFURV9Q
RVJfU0lNVUxBVE9SX0lOU1RBTkNFCisgICAgICAgICMgRklYTUU6IFdlIHNob3VsZCBhbHNvIHRh
a2UgaW50byBhY2NvdW50IHRoZSBBZGQgbG9naWMgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlIGF2
YWlsYWJsZSBSQU0uCisKKyAgICAgICAgaWYgKG1heGltdW1fc2ltdWxhdG9yX2NvdW50X29uX3Ro
aXNfc3lzdGVtIDwgYmVzdF9jaGlsZF9wcm9jZXNzX2NvdW50X2Zvcl9jcHUpOgorICAgICAgICAg
ICAgX2xvZy53YXJuKCJUaGlzIG1hY2hpbmUgY291bGQgc3VwcG9ydCAlcyBjaGlsZCBwcm9jZXNz
ZXMsIGJ1dCBvbmx5IGhhcyBlbm91Z2ggcHJvY2VzcyBsaW1pdCBmb3IgJXMuIgorICAgICAgICAg
ICAgICAgICUgKGJlc3RfY2hpbGRfcHJvY2Vzc19jb3VudF9mb3JfY3B1LCBtYXhpbXVtX3NpbXVs
YXRvcl9jb3VudF9vbl90aGlzX3N5c3RlbSkpCisgICAgICAgICAgICBfbG9nLmluZm8oJ1J1biAi
bGF1bmNoY3RsIGxpbWl0IiB0byBjaGVjayB0aGVzZSBsaW1pdHMnKQorICAgICAgICAgICAgIyBG
SVhNRTogQWRkIHVybCBmb3Igd2VicGFnZSBleHBsYWluaW5nIGhvdyB0byBpbmNyZWFzZSB0aGVz
ZSBsaW1pdHMuCisKKyAgICAgICAgcmV0dXJuIG1pbihtYXhpbXVtX3NpbXVsYXRvcl9jb3VudF9v
bl90aGlzX3N5c3RlbSwgYmVzdF9jaGlsZF9wcm9jZXNzX2NvdW50X2Zvcl9jcHUpCisKICAgICBk
ZWYgZGVmYXVsdF90aW1lb3V0X21zKHNlbGYpOgogICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24o
J2d1YXJkX21hbGxvYycpOgogICAgICAgICAgICAgcmV0dXJuIDM1MCAqIDEwMDAKQEAgLTIwMCwy
MSArMjIwLDI0IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoUG9ydCk6CiAgICAgICAgIHJldHVy
biBsaXN0KHJldmVyc2VkKFtzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fd2Via2l0X2Jhc2Vs
aW5lX3BhdGgocCksICdUZXN0RXhwZWN0YXRpb25zJykgZm9yIHAgaW4gc2VsZi5iYXNlbGluZV9z
ZWFyY2hfcGF0aCgpXSkpCiAKICAgICBkZWYgc2V0dXBfdGVzdF9ydW4oc2VsZik6Ci0gICAgICAg
IGRldmljZV91ZGlkID0gc2VsZi50ZXN0aW5nX2RldmljZS51ZGlkCi0gICAgICAgICMgRklYTUU6
IDxyZGFyOi8vcHJvYmxlbS8yMDkxNjE0MD4gU3dpdGNoIHRvIHVzaW5nIENvcmVTaW11bGF0b3Iu
ZnJhbWV3b3JrIGZvciBsYXVuY2hpbmcgYW5kIHF1aXR0aW5nIGlPUyBTaW11bGF0b3IKLSAgICAg
ICAgc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsKLSAgICAgICAgICAgICdvcGVuJywgJy1i
Jywgc2VsZi5TSU1VTEFUT1JfQlVORExFX0lELAotICAgICAgICAgICAgJy0tYXJncycsICctQ3Vy
cmVudERldmljZVVESUQnLCBkZXZpY2VfdWRpZF0pCi0gICAgICAgIFNpbXVsYXRvci53YWl0X3Vu
dGlsX2RldmljZV9pc19pbl9zdGF0ZShkZXZpY2VfdWRpZCwgU2ltdWxhdG9yLkRldmljZVN0YXRl
LkJPT1RFRCkKLQotICAgICAgICAjIEZJWE1FOiBQYXVzZSBoZXJlIHVudGlsIFNwcmluZ0JvYXJk
IGZpbmlzaGVzIGxhdW5jaGluZyB0byB3b3JrYXJvdW5kIDxyZGFyOi8vcHJvYmxlbS8yMDAwMDM4
Mz4uCi0gICAgICAgIGJvb3RfZGVsYXkgPSAzMAotICAgICAgICBfbG9nLmRlYnVnKCdXYWl0aW5n
IHtzZWNvbmRzfSBzZWNvbmRzIGZvciBpT1MgU2ltdWxhdG9yIHRvIGZpbmlzaCBib290aW5nIC4u
LicuZm9ybWF0KHNlY29uZHM9Ym9vdF9kZWxheSkpCi0gICAgICAgIHRpbWUuc2xlZXAoYm9vdF9k
ZWxheSkKKyAgICAgICAgbWFjX29zX3ZlcnNpb24gPSBzZWxmLmhvc3QucGxhdGZvcm0ub3NfdmVy
c2lvbgorICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uoc2VsZi5udW1fY2hpbGRfcHJvY2Vzc2VzKCkp
OgorICAgICAgICAgICAgZGV2aWNlX3VkaWQgPSBzZWxmLnRlc3RpbmdfZGV2aWNlKGkpLnVkaWQK
KyAgICAgICAgICAgICMgRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8yMDkxNjE0MD4gU3dpdGNoIHRv
IHVzaW5nIENvcmVTaW11bGF0b3IuZnJhbWV3b3JrIGZvciBsYXVuY2hpbmcgYW5kIHF1aXR0aW5n
IGlPUyBTaW11bGF0b3IKKyAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChb
CisgICAgICAgICAgICAgICAgJ29wZW4nLCAnLWInLCBzZWxmLlNJTVVMQVRPUl9CVU5ETEVfSUQg
KyBzdHIoaSksCisgICAgICAgICAgICAgICAgJy0tYXJncycsICctQ3VycmVudERldmljZVVESUQn
LCBkZXZpY2VfdWRpZF0pCisKKyAgICAgICAgICAgIGlmIG1hY19vc192ZXJzaW9uIGluIFsnZWxj
YXBpdGFuJywgJ3lvc2VtaXRlJywgJ21hdmVyaWNrcyddOgorICAgICAgICAgICAgICAgIHRpbWUu
c2xlZXAoMSkKKworICAgICAgICBfbG9nLmluZm8oJ1dhaXRpbmcgZm9yIGFsbCBpT1MgU2ltdWxh
dG9ycyB0byBmaW5pc2ggYm9vdGluZy4nKQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uoc2VsZi5u
dW1fY2hpbGRfcHJvY2Vzc2VzKCkpOgorICAgICAgICAgICAgU2ltdWxhdG9yLndhaXRfdW50aWxf
ZGV2aWNlX2lzX2Jvb3RlZChzZWxmLnRlc3RpbmdfZGV2aWNlKGkpLnVkaWQpCiAKICAgICBkZWYg
X3F1aXRfaW9zX3NpbXVsYXRvcihzZWxmKToKLSAgICAgICAgIyBGSVhNRTogPHJkYXI6Ly9wcm9i
bGVtLzIwOTE2MTQwPiBTd2l0Y2ggdG8gdXNpbmcgQ29yZVNpbXVsYXRvci5mcmFtZXdvcmsgZm9y
IGxhdW5jaGluZyBhbmQgcXVpdHRpbmcgaU9TIFNpbXVsYXRvcgotICAgICAgICBzZWxmLl9leGVj
dXRpdmUucnVuX2NvbW1hbmQoWydvc2FzY3JpcHQnLCAnLWUnLCAndGVsbCBhcHBsaWNhdGlvbiBp
ZCAiezB9IiB0byBxdWl0Jy5mb3JtYXQoc2VsZi5TSU1VTEFUT1JfQlVORExFX0lEKV0pCisgICAg
ICAgICMgRklYTUU6IFdlIHNob3VsZCBraWxsIG9ubHkgdGhlIFNpbXVsYXRvcnMgd2Ugc3RhcnRl
ZC4KKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKFsia2lsbGFsbCIsICItOSIsICItdiIsICItbSIs
ICJTaW11bGF0b3IiXSkKIAogICAgIGRlZiBjbGVhbl91cF90ZXN0X3J1bihzZWxmKToKICAgICAg
ICAgc3VwZXIoSU9TU2ltdWxhdG9yUG9ydCwgc2VsZikuY2xlYW5fdXBfdGVzdF9ydW4oKQpAQCAt
MjI3LDYgKzI1MCwxNCBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KFBvcnQpOgogICAgICAgICAg
ICAgICAgIF9sb2cud2FybmluZygnVW5hYmxlIHRvIHJlbW92ZSAnICsgZmlmbykKICAgICAgICAg
ICAgICAgICBwYXNzCiAKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKHNlbGYubnVtX2NoaWxkX3By
b2Nlc3NlcygpKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzdWJwcm9jZXNz
LmNhbGwoW3NlbGYuTFNSRUdJU1RFUl9QQVRILCAiLXYiLCAiLXUiLCBzZWxmLmdldF9zaW11bGF0
b3JfcGF0aChpKV0pCisgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLmdldF9zaW11
bGF0b3JfcGF0aChpKSwgaWdub3JlX2Vycm9ycz1UcnVlKQorICAgICAgICAgICAgICAgIFNpbXVs
YXRvcigpLmRlbGV0ZV9kZXZpY2Uoc2VsZi50ZXN0aW5nX2RldmljZShpKS51ZGlkKQorICAgICAg
ICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIF9sb2cud2FybmluZygnVW5hYmxlIHRvIHJl
bW92ZSBTaW11bGF0b3InICsgc3RyKGkpKQorCiAgICAgZGVmIHNldHVwX2Vudmlyb25fZm9yX3Nl
cnZlcihzZWxmLCBzZXJ2ZXJfbmFtZT1Ob25lKToKICAgICAgICAgZW52ID0gc3VwZXIoSU9TU2lt
dWxhdG9yUG9ydCwgc2VsZikuc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyKHNlcnZlcl9uYW1lKQog
ICAgICAgICBpZiBzZXJ2ZXJfbmFtZSA9PSBzZWxmLmRyaXZlcl9uYW1lKCk6CkBAIC0yNDUsMTEg
KzI3NiwxNiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KFBvcnQpOgogICAgICAgICBpZiBub3Qg
c2VsZi5zaW11bGF0b3JfcnVudGltZS5hdmFpbGFibGU6CiAgICAgICAgICAgICBfbG9nLmVycm9y
KCdUaGUgaU9TIFNpbXVsYXRvciBydW50aW1lIHdpdGggaWRlbnRpZmllciAiezB9IiBjYW5ub3Qg
YmUgdXNlZCBiZWNhdXNlIGl0IGlzIHVuYXZhaWxhYmxlLicuZm9ybWF0KHNlbGYuc2ltdWxhdG9y
X3J1bnRpbWUuaWRlbnRpZmllcikpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAg
dGVzdGluZ19kZXZpY2UgPSBzZWxmLnRlc3RpbmdfZGV2aWNlICAjIE1heSBjcmVhdGUgYSBuZXcg
c2ltdWxhdG9yIGRldmljZQotCi0gICAgICAgIGlmIG5vdCBTaW11bGF0b3IuY2hlY2tfc2ltdWxh
dG9yX2RldmljZV9hbmRfZXJhc2VfaWZfbmVlZGVkKHNlbGYuaG9zdCwgdGVzdGluZ19kZXZpY2Uu
dWRpZCk6Ci0gICAgICAgICAgICBfbG9nLmVycm9yKCdVbmFibGUgdG8gYm9vdCB0aGUgc2ltdWxh
dG9yIGRldmljZSB3aXRoIFVESUQgezB9LicuZm9ybWF0KHRlc3RpbmdfZGV2aWNlLnVkaWQpKQot
ICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGZvciBpIGluIHhyYW5nZShzZWxmLm51
bV9jaGlsZF9wcm9jZXNzZXMoKSk6CisgICAgICAgICAgICAjIEZJWE1FOiBUaGlzIGNyZWF0ZXMg
dGhlIGRldmljZXMgc2VxdWVudGlhbGx5LCB0aGlzIGNhbiBiZSBvcHRpbWl6ZWQuCisgICAgICAg
ICAgICB0ZXN0aW5nX2RldmljZSA9IHNlbGYudGVzdGluZ19kZXZpY2UoaSkKKyAgICAgICAgICAg
IF9sb2cuZGVidWcoJ1ZlcmlmeWluZyBTaW11bGF0b3J7MH0gd2l0aCBVRElEIHsxfS4nLmZvcm1h
dChpLCB0ZXN0aW5nX2RldmljZS51ZGlkKSkKKworICAgICAgICAgICAgIyBGSVhNRTogdGhpcyBp
cyB2ZXJ5IHNsb3csIGVzcGVjaWFsbHkgZm9yIG11bGl0cGxlIHNpbXVsYXRvcnMsIHdlIHByb2Jh
Ymx5IGRvIG5vdCBuZWVkCisgICAgICAgICAgICAjIHRoaXMgY2hlY2tpbmcgYXMgd2UgYXJlIHJl
LWNyZWF0aW5nIG5ldyBzaW11bGF0b3IgYXBwcyBhbmQgZGV2aWNlcyBpbiBldmVyeSBydW4uCisg
ICAgICAgICAgICBpZiBub3QgU2ltdWxhdG9yLmNoZWNrX3NpbXVsYXRvcl9kZXZpY2VfYW5kX2Vy
YXNlX2lmX25lZWRlZChzZWxmLmhvc3QsIHRlc3RpbmdfZGV2aWNlLnVkaWQpOgorICAgICAgICAg
ICAgICAgIF9sb2cuZXJyb3IoJ1VuYWJsZSB0byBib290IHRoZSBzaW11bGF0b3IgZGV2aWNlIHdp
dGggVURJRCB7MH0uJy5mb3JtYXQodGVzdGluZ19kZXZpY2UudWRpZCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIHJldHVybiBzdXBlcihJT1NTaW11bGF0b3JQb3J0LCBz
ZWxmKS5jaGVja19zeXNfZGVwcyhuZWVkc19odHRwKQogCiAgICAgZGVmIGNoZWNrX2Zvcl9sZWFr
cyhzZWxmLCBwcm9jZXNzX25hbWUsIHByb2Nlc3NfcGlkKToKQEAgLTMyMywxMCArMzU5LDEyIEBA
IGNsYXNzIElPU1NpbXVsYXRvclBvcnQoUG9ydCk6CiAgICAgICAgICAgICByZXR1cm4gc3RkZXJy
LCBOb25lCiAgICAgICAgIHJldHVybiBzdGRlcnIsIGNyYXNoX2xvZwogCi0gICAgQHByb3BlcnR5
CiAgICAgQG1lbW9pemVkCi0gICAgZGVmIHRlc3RpbmdfZGV2aWNlKHNlbGYpOgotICAgICAgICBy
ZXR1cm4gU2ltdWxhdG9yKCkubG9va3VwX29yX2NyZWF0ZV9kZXZpY2Uoc2VsZi5zaW11bGF0b3Jf
ZGV2aWNlX3R5cGUubmFtZSArICcgV2ViS2l0IFRlc3RlcicsIHNlbGYuc2ltdWxhdG9yX2Rldmlj
ZV90eXBlLCBzZWxmLnNpbXVsYXRvcl9ydW50aW1lKQorICAgIGRlZiB0ZXN0aW5nX2RldmljZShz
ZWxmLCBudW1iZXIpOgorICAgICAgICByZXR1cm4gU2ltdWxhdG9yKCkubG9va3VwX29yX2NyZWF0
ZV9kZXZpY2Uoc2VsZi5zaW11bGF0b3JfZGV2aWNlX3R5cGUubmFtZSArICcgV2ViS2l0IFRlc3Rl
cicgKyBzdHIobnVtYmVyKSwgc2VsZi5zaW11bGF0b3JfZGV2aWNlX3R5cGUsIHNlbGYuc2ltdWxh
dG9yX3J1bnRpbWUpCisKKyAgICBkZWYgZ2V0X3NpbXVsYXRvcl9wYXRoKHNlbGYsIHN1ZmZpeD0i
Iik6CisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5TSU1VTEFUT1JfRElSRUNUT1JZ
LCAiU2ltdWxhdG9yIiArIHN0cihzdWZmaXgpICsgIi5hcHAiKQogCiAgICAgZGVmIF9tZXJnZV9j
cmFzaF9sb2dzKHNlbGYsIGxvZ3MsIG5ld19sb2dzLCBjcmFzaGVkX3Byb2Nlc3Nlcyk6CiAgICAg
ICAgIGZvciB0ZXN0LCBjcmFzaF9sb2cgaW4gbmV3X2xvZ3MuaXRlcml0ZW1zKCk6CkBAIC0zOTYs
MTQgKzQzNCwyMCBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KFBvcnQpOgogICAgICAgICByZXR1
cm4gc2VsZi5faW1hZ2VfZGlmZmVyLmRpZmZfaW1hZ2UoZXhwZWN0ZWRfY29udGVudHMsIGFjdHVh
bF9jb250ZW50cywgdG9sZXJhbmNlKQogCiAgICAgZGVmIHJlc2V0X3ByZWZlcmVuY2VzKHNlbGYp
OgotICAgICAgICAjIFdlIGFzc3VtZSB0aGF0IGlmIHRlc3RpbmdfZGV2aWNlIGlzIGJvb3RlZCB0
aGF0IGl0IHdhcyBib290ZWQgYnkgdGhlIGlPUyBTaW11bGF0b3IgYXBwCi0gICAgICAgICMgKGFz
IG9wcG9zZWQgdG8gc2ltY3RsKS4gU28sIHF1aXQgdGhlIGlPUyBTaW11bGF0b3IgYXBwIHRvIHNo
dXRkb3duIHRlc3RpbmdfZGV2aWNlLgorICAgICAgICBpZiAoc2VsZi5kZWZhdWx0X2NoaWxkX3By
b2Nlc3NlcygpIDwgc2VsZi5udW1fY2hpbGRfcHJvY2Vzc2VzKCkpOgorICAgICAgICAgICAgICAg
IF9sb2cud2FybigiWW91IGhhdmUgc3BlY2lmaWVkIHZlcnkgaGlnaCB2YWx1ZSh7MH0pIGZvciAt
LWNoaWxkLXByb2Nlc3NlcyIuZm9ybWF0KHNlbGYubnVtX2NoaWxkX3Byb2Nlc3NlcygpKSkKKyAg
ICAgICAgICAgICAgICBfbG9nLndhcm4oIm1heGltdW0gY2hpbGQtcHJvY2Vzc2VzIHdoaWNoIGNh
biBiZSBzdXBwb3J0ZWQgb24gdGhpcyBzeXN0ZW0gYXJlOiB7MH0iLmZvcm1hdChzZWxmLmRlZmF1
bHRfY2hpbGRfcHJvY2Vzc2VzKCkpKQorICAgICAgICAgICAgICAgIF9sb2cud2FybigiVGhpcyBp
cyB2ZXJ5IGxpa2VseSB0byBmYWlsLiIpCisKICAgICAgICAgc2VsZi5fcXVpdF9pb3Nfc2ltdWxh
dG9yKCkKLSAgICAgICAgU2ltdWxhdG9yLndhaXRfdW50aWxfZGV2aWNlX2lzX2luX3N0YXRlKHNl
bGYudGVzdGluZ19kZXZpY2UudWRpZCwgU2ltdWxhdG9yLkRldmljZVN0YXRlLlNIVVRET1dOKQor
ICAgICAgICBzZWxmLl9jcmVhdGVTaW11bGF0b3JBcHBzKCkKIAotICAgICAgICBkYXRhX3BhdGgg
PSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0aW5nX2RldmljZS5wYXRoLCAnZGF0YScpCi0gICAgICAg
IGlmIG9zLnBhdGguaXNkaXIoZGF0YV9wYXRoKToKLSAgICAgICAgICAgIHNodXRpbC5ybXRyZWUo
ZGF0YV9wYXRoKQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uoc2VsZi5udW1fY2hpbGRfcHJvY2Vz
c2VzKCkpOgorICAgICAgICAgICAgU2ltdWxhdG9yLndhaXRfdW50aWxfZGV2aWNlX2lzX2luX3N0
YXRlKHNlbGYudGVzdGluZ19kZXZpY2UoaSkudWRpZCwgU2ltdWxhdG9yLkRldmljZVN0YXRlLlNI
VVRET1dOKQorCisgICAgICAgICAgICBkYXRhX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0
aW5nX2RldmljZShpKS5wYXRoLCAnZGF0YScpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGly
KGRhdGFfcGF0aCk6CisgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShkYXRhX3BhdGgpCiAK
ICAgICBkZWYgbWFrZV9jb21tYW5kKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi54Y3J1bl9m
aW5kKCdtYWtlJywgJy91c3IvYmluL21ha2UnKQpAQCAtNDI4LDMgKzQ3MiwyMyBAQCBjbGFzcyBJ
T1NTaW11bGF0b3JQb3J0KFBvcnQpOgogCiAgICAgZGVmIHN0ZGVycl9wYXR0ZXJuc190b19zdHJp
cChzZWxmKToKICAgICAgICAgcmV0dXJuIFtdCisKKyAgICBkZWYgX2NyZWF0ZVNpbXVsYXRvckFw
cHMoc2VsZik6CisgICAgICAgIGZvciBpIGluIHhyYW5nZShzZWxmLm51bV9jaGlsZF9wcm9jZXNz
ZXMoKSk6CisgICAgICAgICAgICBzZWxmLl9jcmVhdGVTaW11bGF0b3JBcHAoaSkKKworICAgIGRl
ZiBfY3JlYXRlU2ltdWxhdG9yQXBwKHNlbGYsIHN1ZmZpeCk6CisgICAgICAgIGRlc3RpbmF0aW9u
ID0gc2VsZi5nZXRfc2ltdWxhdG9yX3BhdGgoc3VmZml4KQorICAgICAgICBfbG9nLmluZm8oIkNy
ZWF0aW5nIGFwcDoiICsgZGVzdGluYXRpb24pCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRl
c3RpbmF0aW9uKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZGVzdGluYXRpb24sIGlnbm9y
ZV9lcnJvcnM9VHJ1ZSkKKyAgICAgICAgc2ltdWxhdG9yX2FwcF9wYXRoID0gc2VsZi5kZXZlbG9w
ZXJfZGlyICsgIi9BcHBsaWNhdGlvbnMvU2ltdWxhdG9yLmFwcCIKKyAgICAgICAgc2h1dGlsLmNv
cHl0cmVlKHNpbXVsYXRvcl9hcHBfcGF0aCwgZGVzdGluYXRpb24pCisKKyAgICAgICAgIyBVcGRh
dGUgYXBwJ3MgcGFja2FnZS1uYW1lIGluc2lkZSBwbGlzdCBhbmQgcmUtY29kZS1zaWduIGl0Cisg
ICAgICAgIHBsaXN0X3BhdGggPSBkZXN0aW5hdGlvbiArICIvQ29udGVudHMvSW5mby5wbGlzdCIK
KyAgICAgICAgY29tbWFuZCA9ICJTZXQgQ0ZCdW5kbGVJZGVudGlmaWVyIGNvbS5hcHBsZS5pcGhv
bmVzaW11bGF0b3IiICsgc3RyKHN1ZmZpeCkKKyAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRw
dXQoWyIvdXNyL2xpYmV4ZWMvUGxpc3RCdWRkeSIsICItYyIsIGNvbW1hbmQsIHBsaXN0X3BhdGhd
KQorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbImluc3RhbGxfbmFtZV90b29sIiwg
Ii1hZGRfcnBhdGgiLCBzZWxmLmRldmVsb3Blcl9kaXIgKyAiL0xpYnJhcnkvUHJpdmF0ZUZyYW1l
d29ya3MvIiwgZGVzdGluYXRpb24gKyAiL0NvbnRlbnRzL01hY09TL1NpbXVsYXRvciJdKQorICAg
ICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbImNvZGVzaWduIiwgIi1mcyIsICItIiwgZGVz
dGluYXRpb25dKQorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbc2VsZi5MU1JFR0lT
VEVSX1BBVEgsICItdiIsICItZiIsIGRlc3RpbmF0aW9uXSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5CShyZXZpc2lvbiAxOTM2NzgpCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvci5weQkod29ya2luZyBjb3B5KQpAQCAtMjE1
LDYgKzIxNSwxNSBAQCBjbGFzcyBEZXZpY2Uob2JqZWN0KToKICAgICAgICAgU2ltdWxhdG9yLndh
aXRfdW50aWxfZGV2aWNlX2lzX2luX3N0YXRlKGRldmljZV91ZGlkLCBTaW11bGF0b3IuRGV2aWNl
U3RhdGUuU0hVVERPV04pCiAgICAgICAgIHJldHVybiBTaW11bGF0b3IoKS5maW5kX2RldmljZV9i
eV91ZGlkKGRldmljZV91ZGlkKQogCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRlbGV0ZShj
bHMsIHVkaWQpOgorICAgICAgICAiIiIKKyAgICAgICAgRGVsZXRlIHRoZSBnaXZlbiBDb3JlU2lt
dWxhdG9yIGRldmljZS4KKyAgICAgICAgOnBhcmFtIHVkaWQ6IFRoZSB1ZGlkIG9mIHRoZSBkZXZp
Y2UuCisgICAgICAgIDp0eXBlIHVkaWQ6IHN0cgorICAgICAgICAiIiIKKyAgICAgICAgc3VicHJv
Y2Vzcy5jYWxsKFsneGNydW4nLCAnc2ltY3RsJywgJ2RlbGV0ZScsIHVkaWRdKQorCiAgICAgZGVm
IF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgIHJldHVybiBzZWxmLnVkaWQgPT0gb3RoZXIu
dWRpZAogCkBAIC0yNjUsNiArMjc0LDE1IEBAIGNsYXNzIFNpbXVsYXRvcihvYmplY3QpOgogICAg
ICAgICBTSFVUVElOR19ET1dOID0gNAogCiAgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiB3YWl0
X3VudGlsX2RldmljZV9pc19ib290ZWQodWRpZCwgdGltZW91dF9zZWNvbmRzPTYwICogNSk6Cisg
ICAgICAgIHdpdGggdGltZW91dChzZWNvbmRzPXRpbWVvdXRfc2Vjb25kcyk6CisgICAgICAgICAg
ICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHN0YXRlID0gc3VicHJvY2Vzcy5jaGVja19v
dXRwdXQoWyd4Y3J1bicsICdzaW1jdGwnLCAnc3Bhd24nLCB1ZGlkLCAnbGF1bmNoY3RsJywgJ3By
aW50JywgJ3N5c3RlbSddKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKCJB
W1xzXStjb20uYXBwbGUuc3ByaW5nYm9hcmQuc2VydmljZXMiLCBzdGF0ZSk6CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKworICAgIEBz
dGF0aWNtZXRob2QKICAgICBkZWYgd2FpdF91bnRpbF9kZXZpY2VfaXNfaW5fc3RhdGUodWRpZCwg
d2FpdF91bnRpbF9zdGF0ZSwgdGltZW91dF9zZWNvbmRzPTYwICogNSk6CiAgICAgICAgIHdpdGgg
dGltZW91dChzZWNvbmRzPXRpbWVvdXRfc2Vjb25kcyk6CiAgICAgICAgICAgICB3aGlsZSAoU2lt
dWxhdG9yLmRldmljZV9zdGF0ZSh1ZGlkKSAhPSB3YWl0X3VudGlsX3N0YXRlKToKQEAgLTI5OSw2
ICszMTcsOSBAQCBjbGFzcyBTaW11bGF0b3Iob2JqZWN0KToKICAgICAgICAgICAgIHJldHVybiBT
aW11bGF0b3IuX2Jvb3RfYW5kX3NodXRkb3duX3NpbXVsYXRvcl9kZXZpY2UoaG9zdCwgdWRpZCkg
PT0gMCAgIyBDYW4gYm9vdCBkZXZpY2UKICAgICAgICAgcmV0dXJuIEZhbHNlICAjIENhbm5vdCBi
b290IG9yIGVyYXNlIGRldmljZQogCisgICAgZGVmIGRlbGV0ZV9kZXZpY2Uoc2VsZiwgdWRpZCk6
CisgICAgICAgIERldmljZS5kZWxldGUodWRpZCkKKwogICAgIGRlZiByZWZyZXNoKHNlbGYpOgog
ICAgICAgICAiIiIKICAgICAgICAgUmVmcmVzaCBydW50aW1lIGFuZCBkZXZpY2UgdHlwZSBpbmZv
cm1hdGlvbiBmcm9tIGBgc2ltY3RsIGxpc3RgYC4K
</data>
<flag name="review"
          id="291871"
          type_id="1"
          status="+"
          setter="ap"
    />
    <flag name="commit-queue"
          id="291872"
          type_id="3"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266916</attachid>
            <date>2015-12-08 11:23:05 -0800</date>
            <delta_ts>2015-12-08 11:49:25 -0800</delta_ts>
            <desc>Updated patch with review comments incorporated.</desc>
            <filename>patch_multi_sim7</filename>
            <type>text/plain</type>
            <size>16839</size>
            <attacher name="Aakash Jain">aakash_jain</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE5Mzc1OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMwIEBACisyMDE1LTEyLTA4ICBBYWthc2ggSmFpbiAgPGFha2FzaF9qYWluQGFwcGxlLmNv
bT4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUx
MjQzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yMjk1NTE5Nz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIExheW91dFRlc3RSZWxheS9MYXlvdXRU
ZXN0UmVsYXkvbWFpbi5tOgorICAgICAgICAoZ2V0VGVzdGluZ1NpbURldmljZSk6IFVzZSBzZXBh
cmF0ZSB0ZXN0aW5nIGRldmljZSBmb3IgZWFjaCB3b3JrZXIuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weToKKyAgICAgICAgKE1h
bmFnZXIucnVuKTogUGVyZm9ybSBjbGVhbnVwIGV2ZW4gaWYgc2V0dXAgZmFpbHMuCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weToKKyAgICAgICAgKElPU1NpbXVsYXRvclBv
cnQuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMpOiBDYWxjdWxhdGUgbnVtYmVyIG9mIHNpbXVsYXRv
cnMgdG8gdXNlLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5jaGlsZF9wcm9jZXNzZXMpOiBH
ZXRzIHRoZSBudW1iZXIgb2Ygc2ltdWxhdG9ycyBmcm9tIG9wdGlvbnMgdmFyaWFibGUuCisgICAg
ICAgIChJT1NTaW11bGF0b3JQb3J0LnNldHVwX3Rlc3RfcnVuKTogSGFuZGxlIG11bGl0cGxlIHNp
bXVsYXRvcnMuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9xdWl0X2lvc19zaW11bGF0b3Ip
OiBTYW1lCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LmNsZWFuX3VwX3Rlc3RfcnVuKTogU2Ft
ZQorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5jaGVja19zeXNfZGVwcyk6IFNhbWUKKyAgICAg
ICAgKElPU1NpbXVsYXRvclBvcnQudGVzdGluZ19kZXZpY2UpOiBTYW1lCisgICAgICAgIChJT1NT
aW11bGF0b3JQb3J0LnJlc2V0X3ByZWZlcmVuY2VzKTogU2FtZQorICAgICAgICAoSU9TU2ltdWxh
dG9yUG9ydC5nZXRfc2ltdWxhdG9yX3BhdGgpOiBSZXR1cm4gc2ltdWxhdG9yIHBhdGguCisgICAg
ICAgIChJT1NTaW11bGF0b3JQb3J0Ll9jcmVhdGVTaW11bGF0b3JBcHApOiBDcmVhdGUgdGhlIGNv
cHkgb2Ygc2ltdWxhdG9yIGFwcC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3Np
bXVsYXRvci5weToKKyAgICAgICAgKERldmljZS5kZWxldGUpOiBEZWxldGUgdGhlIHNpbXVsYXRv
ciBkZXZpY2UuCisgICAgICAgIChTaW11bGF0b3IuZGVsZXRlX2RldmljZSk6IFNhbWUKKyAgICAg
ICAgKFNpbXVsYXRvci53YWl0X3VudGlsX2RldmljZV9pc19ib290ZWQpOiBXYWl0IGZvciBkZXZp
Y2UgYm9vdGluZy4KKwogMjAxNS0xMi0wOCAgUnl1YW4gQ2hvaSAgPHJ5dWFuLmNob2lAbmF2ZXJj
b3JwLmNvbT4KIAogICAgICAgICBbRUZMXSBBZGQgQVBJIHRvIHByb3ZpZGUgcHJlZmVyZW5jZXMg
YmVmb3JlIGNyZWF0aW5nIGV3a192aWV3CkluZGV4OiBUb29scy9MYXlvdXRUZXN0UmVsYXkvTGF5
b3V0VGVzdFJlbGF5L21haW4ubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9MYXlvdXRUZXN0UmVsYXkv
TGF5b3V0VGVzdFJlbGF5L21haW4ubQkocmV2aXNpb24gMTkzNzU5KQorKysgVG9vbHMvTGF5b3V0
VGVzdFJlbGF5L0xheW91dFRlc3RSZWxheS9tYWluLm0JKHdvcmtpbmcgY29weSkKQEAgLTQzLDEw
ICs0MywxMCBAQCB2b2lkIHVzYWdlKCkKICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBbaGVs
cFRleHQgVVRGOFN0cmluZ10pOwogfQogCi1TaW1EZXZpY2UgKmdldFRlc3RpbmdTaW1EZXZpY2Uo
U2ltRGV2aWNlVHlwZSAqZGV2aWNlVHlwZSwgU2ltUnVudGltZSAqcnVudGltZSkKK1NpbURldmlj
ZSAqZ2V0VGVzdGluZ1NpbURldmljZShTaW1EZXZpY2VUeXBlICpkZXZpY2VUeXBlLCBTaW1SdW50
aW1lICpydW50aW1lLCBOU1N0cmluZyAqc3VmZml4KQogewogICAgIE5TU3RyaW5nICpkZXZpY2VO
YW1lID0gW1tbW2RldmljZVR5cGUgaWRlbnRpZmllcl0gY29tcG9uZW50c1NlcGFyYXRlZEJ5U3Ry
aW5nOkAiLiJdIGxhc3RPYmplY3RdIHN0cmluZ0J5UmVwbGFjaW5nT2NjdXJyZW5jZXNPZlN0cmlu
ZzpAIi0iIHdpdGhTdHJpbmc6QCIgIl07Ci0gICAgZGV2aWNlTmFtZSA9IFtkZXZpY2VOYW1lIHN0
cmluZ0J5QXBwZW5kaW5nU3RyaW5nOkAiIFdlYktpdCBUZXN0ZXIiXTsKKyAgICBkZXZpY2VOYW1l
ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCVAJUAiLCBkZXZpY2VOYW1lLCBAIiBX
ZWJLaXQgVGVzdGVyIiwgc3VmZml4XTsKIAogICAgIGZvciAoU2ltRGV2aWNlICpkZXZpY2UgaW4g
W1tTaW1EZXZpY2VTZXQgZGVmYXVsdFNldF0gZGV2aWNlc10pIHsKICAgICAgICAgaWYgKFtbZGV2
aWNlIG5hbWVdIGlzRXF1YWxUb1N0cmluZzpkZXZpY2VOYW1lXSAmJiBbW2RldmljZSBkZXZpY2VU
eXBlXSBpc0VxdWFsVG86ZGV2aWNlVHlwZV0gJiYgW1tkZXZpY2UgcnVudGltZV0gaXNFcXVhbFRv
OnJ1bnRpbWVdKQpAQCAtMTM2LDcgKzEzNiw3IEBAIGludCBtYWluKGludCBhcmdjLCBjb25zdCBj
aGFyICogYXJndltdKQogICAgICAgICBOU1N0cmluZyAqcHJvZHVjdERpciA9IGdldFJlcXVpcmVk
U3RyaW5nQXJndW1lbnQoQCJwcm9kdWN0RGlyIik7CiAgICAgICAgIE5TQXJyYXkgKmR1bXBUb29s
QXJndW1lbnRzID0gZ2V0RHVtcFRvb2xBcmd1bWVudHMoKTsKIAotICAgICAgICBTaW1EZXZpY2Ug
KmRldmljZSA9IGdldFRlc3RpbmdTaW1EZXZpY2UoZGV2aWNlVHlwZSwgcnVudGltZSk7CisgICAg
ICAgIFNpbURldmljZSAqZGV2aWNlID0gZ2V0VGVzdGluZ1NpbURldmljZShkZXZpY2VUeXBlLCBy
dW50aW1lLCBzdWZmaXgpOwogCiAgICAgICAgIHJlbGF5Q29udHJvbGxlciA9IFtbTFRSZWxheUNv
bnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoRGV2aWNlOmRldmljZSBwcm9kdWN0RGlyOnByb2R1Y3RE
aXIgYXBwUGF0aDphcHBQYXRoIGlkZW50aWZpZXJTdWZmaXg6c3VmZml4IGR1bXBUb29sQXJndW1l
bnRzOmR1bXBUb29sQXJndW1lbnRzXTsKICAgICAgICAgW3JlbGF5Q29udHJvbGxlciBzdGFydF07
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9t
YW5hZ2VyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkJKHJldmlzaW9uIDE5Mzc1OSkKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkJKHdvcmtp
bmcgY29weSkKQEAgLTE4NywxMSArMTg3LDExIEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKICAg
ICAgICAgICAgIF9sb2cuY3JpdGljYWwoJ05vIHRlc3RzIHRvIHJ1bi4nKQogICAgICAgICAgICAg
cmV0dXJuIHRlc3RfcnVuX3Jlc3VsdHMuUnVuRGV0YWlscyhleGl0X2NvZGU9LTEpCiAKLSAgICAg
ICAgaWYgbm90IHNlbGYuX3NldF91cF9ydW4odGVzdHNfdG9fcnVuKToKLSAgICAgICAgICAgIHJl
dHVybiB0ZXN0X3J1bl9yZXN1bHRzLlJ1bkRldGFpbHMoZXhpdF9jb2RlPS0xKQotCi0gICAgICAg
IGVuYWJsZWRfcGl4ZWxfdGVzdHNfaW5fcmV0cnkgPSBGYWxzZQogICAgICAgICB0cnk6CisgICAg
ICAgICAgICBpZiBub3Qgc2VsZi5fc2V0X3VwX3J1bih0ZXN0c190b19ydW4pOgorICAgICAgICAg
ICAgICAgIHJldHVybiB0ZXN0X3J1bl9yZXN1bHRzLlJ1bkRldGFpbHMoZXhpdF9jb2RlPS0xKQor
CisgICAgICAgICAgICBlbmFibGVkX3BpeGVsX3Rlc3RzX2luX3JldHJ5ID0gRmFsc2UKICAgICAg
ICAgICAgIGluaXRpYWxfcmVzdWx0cyA9IHNlbGYuX3J1bl90ZXN0cyh0ZXN0c190b19ydW4sIHRl
c3RzX3RvX3NraXAsIHNlbGYuX29wdGlvbnMucmVwZWF0X2VhY2gsIHNlbGYuX29wdGlvbnMuaXRl
cmF0aW9ucywKICAgICAgICAgICAgICAgICBpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNz
ZXMpLCByZXRyeWluZz1GYWxzZSkKIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2lvcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5
CShyZXZpc2lvbiAxOTM3NTkpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5
CSh3b3JraW5nIGNvcHkpCkBAIC03MCwxNiArNzAsMTQgQEAgY2xhc3MgSU9TUG9ydChBcHBsZVBv
cnQpOgogCiBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KFBvcnQpOgogICAgIHBvcnRfbmFtZSA9ICJp
b3Mtc2ltdWxhdG9yIgotCiAgICAgRlVUVVJFX1ZFUlNJT04gPSAnZnV0dXJlJwotCiAgICAgQVJD
SElURUNUVVJFUyA9IFsneDg2XzY0JywgJ3g4NiddCi0KICAgICBERUZBVUxUX0FSQ0hJVEVDVFVS
RSA9ICd4ODZfNjQnCi0KICAgICBTSU1VTEFUT1JfQlVORExFX0lEID0gJ2NvbS5hcHBsZS5pcGhv
bmVzaW11bGF0b3InCi0KICAgICByZWxheV9uYW1lID0gJ0xheW91dFRlc3RSZWxheScKKyAgICBT
SU1VTEFUT1JfRElSRUNUT1JZID0gIi90bXAvV2ViS2l0VGVzdGluZ1NpbXVsYXRvcnMvIgorICAg
IExTUkVHSVNURVJfUEFUSCA9ICIvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlU2Vydmlj
ZXMuZnJhbWV3b3JrL0ZyYW1ld29ya3MvTGF1bmNoU2VydmljZXMuZnJhbWV3b3JrL1ZlcnNpb25z
L0N1cnJlbnQvU3VwcG9ydC9sc3JlZ2lzdGVyIgorICAgIFBST0NFU1NfQ09VTlRfRVNUSU1BVEVf
UEVSX1NJTVVMQVRPUl9JTlNUQU5DRSA9IDEwMAogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsICph
cmdzLCAqKmt3YXJncyk6CiAgICAgICAgIHN1cGVyKElPU1NpbXVsYXRvclBvcnQsIHNlbGYpLl9f
aW5pdF9fKCphcmdzLCAqKmt3YXJncykKQEAgLTEzMCw2ICsxMjgsMjggQEAgY2xhc3MgSU9TU2lt
dWxhdG9yUG9ydChQb3J0KToKICAgICAgICAgICAgIHBhdGggPSBtYWNfY29uZmlnLmJ1aWxkX2Rp
cmVjdG9yeShzZWxmLmdldF9vcHRpb24oJ2NvbmZpZ3VyYXRpb24nKSkKICAgICAgICAgcmV0dXJu
IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihwYXRoLCBzZWxmLnJlbGF5X25hbWUpCiAKKyAgICBAbWVt
b2l6ZWQKKyAgICBkZWYgY2hpbGRfcHJvY2Vzc2VzKHNlbGYpOgorICAgICAgICByZXR1cm4gaW50
KHNlbGYuZ2V0X29wdGlvbignY2hpbGRfcHJvY2Vzc2VzJykpCisKKyAgICBAbWVtb2l6ZWQKKyAg
ICBkZWYgZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0
aGUgbnVtYmVyIG9mIFNpbXVsYXRvcnMgaW5zdGFuY2VzIHRvIHVzZSBmb3IgdGhpcyBwb3J0LiIi
IgorICAgICAgICBiZXN0X2NoaWxkX3Byb2Nlc3NfY291bnRfZm9yX2NwdSA9IHNlbGYuX2V4ZWN1
dGl2ZS5jcHVfY291bnQoKSAvIDIKKyAgICAgICAgc3lzdGVtX3Byb2Nlc3NfY291bnRfbGltaXQg
PSBpbnQoc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJsYXVuY2hjdGwiLCAibGltaXQiLCAibWF4
cHJvYyJdKS5zdHJpcCgpLnNwbGl0KClbMV0pCisgICAgICAgIGN1cnJlbnRfcHJvY2Vzc19jb3Vu
dCA9IGxlbihzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbInBzIiwgImF1eCJdKS5zdHJpcCgpLnNw
bGl0KCdcbicpKQorICAgICAgICBfbG9nLmluZm8oJ1Byb2Nlc3MgbGltaXQ6ICVkLCBjdXJyZW50
ICNwcm9jZXNzZXM6ICVkJyAlIChzeXN0ZW1fcHJvY2Vzc19jb3VudF9saW1pdCwgY3VycmVudF9w
cm9jZXNzX2NvdW50KSkKKyAgICAgICAgbWF4aW11bV9zaW11bGF0b3JfY291bnRfb25fdGhpc19z
eXN0ZW0gPSAoc3lzdGVtX3Byb2Nlc3NfY291bnRfbGltaXQgLSBjdXJyZW50X3Byb2Nlc3NfY291
bnQpIC8vIHNlbGYuUFJPQ0VTU19DT1VOVF9FU1RJTUFURV9QRVJfU0lNVUxBVE9SX0lOU1RBTkNF
CisgICAgICAgICMgRklYTUU6IFdlIHNob3VsZCBhbHNvIHRha2UgaW50byBhY2NvdW50IHRoZSBh
dmFpbGFibGUgUkFNLgorCisgICAgICAgIGlmIChtYXhpbXVtX3NpbXVsYXRvcl9jb3VudF9vbl90
aGlzX3N5c3RlbSA8IGJlc3RfY2hpbGRfcHJvY2Vzc19jb3VudF9mb3JfY3B1KToKKyAgICAgICAg
ICAgIF9sb2cud2FybigiVGhpcyBtYWNoaW5lIGNvdWxkIHN1cHBvcnQgJXMgY2hpbGQgcHJvY2Vz
c2VzLCBidXQgb25seSBoYXMgZW5vdWdoIHByb2Nlc3MgbGltaXQgZm9yICVzLiIKKyAgICAgICAg
ICAgICAgICAlIChiZXN0X2NoaWxkX3Byb2Nlc3NfY291bnRfZm9yX2NwdSwgbWF4aW11bV9zaW11
bGF0b3JfY291bnRfb25fdGhpc19zeXN0ZW0pKQorICAgICAgICAgICAgX2xvZy53YXJuKCdSdW4g
ImxhdW5jaGN0bCBsaW1pdCIgdG8gY2hlY2sgdGhlc2UgbGltaXRzJykKKyAgICAgICAgICAgICMg
RklYTUU6IEFkZCB1cmwgZm9yIHdlYnBhZ2UgZXhwbGFpbmluZyBob3cgdG8gaW5jcmVhc2UgdGhl
c2UgbGltaXRzLgorCisgICAgICAgIHJldHVybiBtaW4obWF4aW11bV9zaW11bGF0b3JfY291bnRf
b25fdGhpc19zeXN0ZW0sIGJlc3RfY2hpbGRfcHJvY2Vzc19jb3VudF9mb3JfY3B1KQorCiAgICAg
ZGVmIGRlZmF1bHRfdGltZW91dF9tcyhzZWxmKToKICAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9u
KCdndWFyZF9tYWxsb2MnKToKICAgICAgICAgICAgIHJldHVybiAzNTAgKiAxMDAwCkBAIC0yMDAs
MjEgKzIyMCwyNCBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KFBvcnQpOgogICAgICAgICByZXR1
cm4gbGlzdChyZXZlcnNlZChbc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX3dlYmtpdF9iYXNl
bGluZV9wYXRoKHApLCAnVGVzdEV4cGVjdGF0aW9ucycpIGZvciBwIGluIHNlbGYuYmFzZWxpbmVf
c2VhcmNoX3BhdGgoKV0pKQogCiAgICAgZGVmIHNldHVwX3Rlc3RfcnVuKHNlbGYpOgotICAgICAg
ICBkZXZpY2VfdWRpZCA9IHNlbGYudGVzdGluZ19kZXZpY2UudWRpZAotICAgICAgICAjIEZJWE1F
OiA8cmRhcjovL3Byb2JsZW0vMjA5MTYxNDA+IFN3aXRjaCB0byB1c2luZyBDb3JlU2ltdWxhdG9y
LmZyYW1ld29yayBmb3IgbGF1bmNoaW5nIGFuZCBxdWl0dGluZyBpT1MgU2ltdWxhdG9yCi0gICAg
ICAgIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbCi0gICAgICAgICAgICAnb3BlbicsICct
YicsIHNlbGYuU0lNVUxBVE9SX0JVTkRMRV9JRCwKLSAgICAgICAgICAgICctLWFyZ3MnLCAnLUN1
cnJlbnREZXZpY2VVRElEJywgZGV2aWNlX3VkaWRdKQotICAgICAgICBTaW11bGF0b3Iud2FpdF91
bnRpbF9kZXZpY2VfaXNfaW5fc3RhdGUoZGV2aWNlX3VkaWQsIFNpbXVsYXRvci5EZXZpY2VTdGF0
ZS5CT09URUQpCi0KLSAgICAgICAgIyBGSVhNRTogUGF1c2UgaGVyZSB1bnRpbCBTcHJpbmdCb2Fy
ZCBmaW5pc2hlcyBsYXVuY2hpbmcgdG8gd29ya2Fyb3VuZCA8cmRhcjovL3Byb2JsZW0vMjAwMDAz
ODM+LgotICAgICAgICBib290X2RlbGF5ID0gMzAKLSAgICAgICAgX2xvZy5kZWJ1ZygnV2FpdGlu
ZyB7c2Vjb25kc30gc2Vjb25kcyBmb3IgaU9TIFNpbXVsYXRvciB0byBmaW5pc2ggYm9vdGluZyAu
Li4nLmZvcm1hdChzZWNvbmRzPWJvb3RfZGVsYXkpKQotICAgICAgICB0aW1lLnNsZWVwKGJvb3Rf
ZGVsYXkpCisgICAgICAgIG1hY19vc192ZXJzaW9uID0gc2VsZi5ob3N0LnBsYXRmb3JtLm9zX3Zl
cnNpb24KKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpOgor
ICAgICAgICAgICAgZGV2aWNlX3VkaWQgPSBzZWxmLnRlc3RpbmdfZGV2aWNlKGkpLnVkaWQKKyAg
ICAgICAgICAgICMgRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8yMDkxNjE0MD4gU3dpdGNoIHRvIHVz
aW5nIENvcmVTaW11bGF0b3IuZnJhbWV3b3JrIGZvciBsYXVuY2hpbmcgYW5kIHF1aXR0aW5nIGlP
UyBTaW11bGF0b3IKKyAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbCisg
ICAgICAgICAgICAgICAgJ29wZW4nLCAnLWInLCBzZWxmLlNJTVVMQVRPUl9CVU5ETEVfSUQgKyBz
dHIoaSksCisgICAgICAgICAgICAgICAgJy0tYXJncycsICctQ3VycmVudERldmljZVVESUQnLCBk
ZXZpY2VfdWRpZF0pCisKKyAgICAgICAgICAgIGlmIG1hY19vc192ZXJzaW9uIGluIFsnZWxjYXBp
dGFuJywgJ3lvc2VtaXRlJywgJ21hdmVyaWNrcyddOgorICAgICAgICAgICAgICAgIHRpbWUuc2xl
ZXAoMSkKKworICAgICAgICBfbG9nLmluZm8oJ1dhaXRpbmcgZm9yIGFsbCBpT1MgU2ltdWxhdG9y
cyB0byBmaW5pc2ggYm9vdGluZy4nKQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uoc2VsZi5jaGls
ZF9wcm9jZXNzZXMoKSk6CisgICAgICAgICAgICBTaW11bGF0b3Iud2FpdF91bnRpbF9kZXZpY2Vf
aXNfYm9vdGVkKHNlbGYudGVzdGluZ19kZXZpY2UoaSkudWRpZCkKIAogICAgIGRlZiBfcXVpdF9p
b3Nfc2ltdWxhdG9yKHNlbGYpOgotICAgICAgICAjIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMjA5
MTYxNDA+IFN3aXRjaCB0byB1c2luZyBDb3JlU2ltdWxhdG9yLmZyYW1ld29yayBmb3IgbGF1bmNo
aW5nIGFuZCBxdWl0dGluZyBpT1MgU2ltdWxhdG9yCi0gICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5y
dW5fY29tbWFuZChbJ29zYXNjcmlwdCcsICctZScsICd0ZWxsIGFwcGxpY2F0aW9uIGlkICJ7MH0i
IHRvIHF1aXQnLmZvcm1hdChzZWxmLlNJTVVMQVRPUl9CVU5ETEVfSUQpXSkKKyAgICAgICAgIyBG
SVhNRTogV2Ugc2hvdWxkIGtpbGwgb25seSB0aGUgU2ltdWxhdG9ycyB3ZSBzdGFydGVkLgorICAg
ICAgICBzdWJwcm9jZXNzLmNhbGwoWyJraWxsYWxsIiwgIi05IiwgIi12IiwgIi1tIiwgIlNpbXVs
YXRvciJdKQogCiAgICAgZGVmIGNsZWFuX3VwX3Rlc3RfcnVuKHNlbGYpOgogICAgICAgICBzdXBl
cihJT1NTaW11bGF0b3JQb3J0LCBzZWxmKS5jbGVhbl91cF90ZXN0X3J1bigpCkBAIC0yMjcsNiAr
MjUwLDE0IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoUG9ydCk6CiAgICAgICAgICAgICAgICAg
X2xvZy53YXJuaW5nKCdVbmFibGUgdG8gcmVtb3ZlICcgKyBmaWZvKQogICAgICAgICAgICAgICAg
IHBhc3MKIAorICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uoc2VsZi5jaGlsZF9wcm9jZXNzZXMoKSk6
CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKFtzZWxm
LkxTUkVHSVNURVJfUEFUSCwgIi12IiwgIi11Iiwgc2VsZi5nZXRfc2ltdWxhdG9yX3BhdGgoaSld
KQorICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5nZXRfc2ltdWxhdG9yX3BhdGgo
aSksIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKKyAgICAgICAgICAgICAgICBTaW11bGF0b3IoKS5kZWxl
dGVfZGV2aWNlKHNlbGYudGVzdGluZ19kZXZpY2UoaSkudWRpZCkKKyAgICAgICAgICAgIGV4Y2Vw
dDoKKyAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ1VuYWJsZSB0byByZW1vdmUgU2ltdWxh
dG9yJyArIHN0cihpKSkKKwogICAgIGRlZiBzZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoc2VsZiwg
c2VydmVyX25hbWU9Tm9uZSk6CiAgICAgICAgIGVudiA9IHN1cGVyKElPU1NpbXVsYXRvclBvcnQs
IHNlbGYpLnNldHVwX2Vudmlyb25fZm9yX3NlcnZlcihzZXJ2ZXJfbmFtZSkKICAgICAgICAgaWYg
c2VydmVyX25hbWUgPT0gc2VsZi5kcml2ZXJfbmFtZSgpOgpAQCAtMjQ1LDExICsyNzYsMTYgQEAg
Y2xhc3MgSU9TU2ltdWxhdG9yUG9ydChQb3J0KToKICAgICAgICAgaWYgbm90IHNlbGYuc2ltdWxh
dG9yX3J1bnRpbWUuYXZhaWxhYmxlOgogICAgICAgICAgICAgX2xvZy5lcnJvcignVGhlIGlPUyBT
aW11bGF0b3IgcnVudGltZSB3aXRoIGlkZW50aWZpZXIgInswfSIgY2Fubm90IGJlIHVzZWQgYmVj
YXVzZSBpdCBpcyB1bmF2YWlsYWJsZS4nLmZvcm1hdChzZWxmLnNpbXVsYXRvcl9ydW50aW1lLmlk
ZW50aWZpZXIpKQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIHRlc3RpbmdfZGV2
aWNlID0gc2VsZi50ZXN0aW5nX2RldmljZSAgIyBNYXkgY3JlYXRlIGEgbmV3IHNpbXVsYXRvciBk
ZXZpY2UKLQotICAgICAgICBpZiBub3QgU2ltdWxhdG9yLmNoZWNrX3NpbXVsYXRvcl9kZXZpY2Vf
YW5kX2VyYXNlX2lmX25lZWRlZChzZWxmLmhvc3QsIHRlc3RpbmdfZGV2aWNlLnVkaWQpOgotICAg
ICAgICAgICAgX2xvZy5lcnJvcignVW5hYmxlIHRvIGJvb3QgdGhlIHNpbXVsYXRvciBkZXZpY2Ug
d2l0aCBVRElEIHswfS4nLmZvcm1hdCh0ZXN0aW5nX2RldmljZS51ZGlkKSkKLSAgICAgICAgICAg
IHJldHVybiBGYWxzZQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uoc2VsZi5jaGlsZF9wcm9jZXNz
ZXMoKSk6CisgICAgICAgICAgICAjIEZJWE1FOiBUaGlzIGNyZWF0ZXMgdGhlIGRldmljZXMgc2Vx
dWVudGlhbGx5LCBkb2luZyB0aGlzIGluIHBhcmFsbGVsIGNhbiBpbXByb3ZlIHBlcmZvcm1hbmNl
LgorICAgICAgICAgICAgdGVzdGluZ19kZXZpY2UgPSBzZWxmLnRlc3RpbmdfZGV2aWNlKGkpCisg
ICAgICAgICAgICBfbG9nLmRlYnVnKCdWZXJpZnlpbmcgU2ltdWxhdG9yezB9IHdpdGggVURJRCB7
MX0uJy5mb3JtYXQoaSwgdGVzdGluZ19kZXZpY2UudWRpZCkpCisKKyAgICAgICAgICAgICMgRklY
TUU6IFRoaXMgaXMgdmVyeSBzbG93LCBlc3BlY2lhbGx5IGZvciBtdWxpdHBsZSBzaW11bGF0b3Jz
LCB3ZSBwcm9iYWJseSBkbyBub3QgbmVlZAorICAgICAgICAgICAgIyB0aGlzIGNoZWNraW5nIGFz
IHdlIGFyZSByZS1jcmVhdGluZyBuZXcgc2ltdWxhdG9yIGFwcHMgYW5kIGRldmljZXMgaW4gZXZl
cnkgcnVuLgorICAgICAgICAgICAgaWYgbm90IFNpbXVsYXRvci5jaGVja19zaW11bGF0b3JfZGV2
aWNlX2FuZF9lcmFzZV9pZl9uZWVkZWQoc2VsZi5ob3N0LCB0ZXN0aW5nX2RldmljZS51ZGlkKToK
KyAgICAgICAgICAgICAgICBfbG9nLmVycm9yKCdVbmFibGUgdG8gYm9vdCB0aGUgc2ltdWxhdG9y
IGRldmljZSB3aXRoIFVESUQgezB9LicuZm9ybWF0KHRlc3RpbmdfZGV2aWNlLnVkaWQpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICByZXR1cm4gc3VwZXIoSU9TU2ltdWxh
dG9yUG9ydCwgc2VsZikuY2hlY2tfc3lzX2RlcHMobmVlZHNfaHR0cCkKIAogICAgIGRlZiBjaGVj
a19mb3JfbGVha3Moc2VsZiwgcHJvY2Vzc19uYW1lLCBwcm9jZXNzX3BpZCk6CkBAIC0zMjMsMTAg
KzM1OSwxMiBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KFBvcnQpOgogICAgICAgICAgICAgcmV0
dXJuIHN0ZGVyciwgTm9uZQogICAgICAgICByZXR1cm4gc3RkZXJyLCBjcmFzaF9sb2cKIAotICAg
IEBwcm9wZXJ0eQogICAgIEBtZW1vaXplZAotICAgIGRlZiB0ZXN0aW5nX2RldmljZShzZWxmKToK
LSAgICAgICAgcmV0dXJuIFNpbXVsYXRvcigpLmxvb2t1cF9vcl9jcmVhdGVfZGV2aWNlKHNlbGYu
c2ltdWxhdG9yX2RldmljZV90eXBlLm5hbWUgKyAnIFdlYktpdCBUZXN0ZXInLCBzZWxmLnNpbXVs
YXRvcl9kZXZpY2VfdHlwZSwgc2VsZi5zaW11bGF0b3JfcnVudGltZSkKKyAgICBkZWYgdGVzdGlu
Z19kZXZpY2Uoc2VsZiwgbnVtYmVyKToKKyAgICAgICAgcmV0dXJuIFNpbXVsYXRvcigpLmxvb2t1
cF9vcl9jcmVhdGVfZGV2aWNlKHNlbGYuc2ltdWxhdG9yX2RldmljZV90eXBlLm5hbWUgKyAnIFdl
YktpdCBUZXN0ZXInICsgc3RyKG51bWJlciksIHNlbGYuc2ltdWxhdG9yX2RldmljZV90eXBlLCBz
ZWxmLnNpbXVsYXRvcl9ydW50aW1lKQorCisgICAgZGVmIGdldF9zaW11bGF0b3JfcGF0aChzZWxm
LCBzdWZmaXg9IiIpOgorICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuU0lNVUxBVE9S
X0RJUkVDVE9SWSwgIlNpbXVsYXRvciIgKyBzdHIoc3VmZml4KSArICIuYXBwIikKIAogICAgIGRl
ZiBfbWVyZ2VfY3Jhc2hfbG9ncyhzZWxmLCBsb2dzLCBuZXdfbG9ncywgY3Jhc2hlZF9wcm9jZXNz
ZXMpOgogICAgICAgICBmb3IgdGVzdCwgY3Jhc2hfbG9nIGluIG5ld19sb2dzLml0ZXJpdGVtcygp
OgpAQCAtMzk2LDE0ICs0MzQsMjAgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChQb3J0KToKICAg
ICAgICAgcmV0dXJuIHNlbGYuX2ltYWdlX2RpZmZlci5kaWZmX2ltYWdlKGV4cGVjdGVkX2NvbnRl
bnRzLCBhY3R1YWxfY29udGVudHMsIHRvbGVyYW5jZSkKIAogICAgIGRlZiByZXNldF9wcmVmZXJl
bmNlcyhzZWxmKToKLSAgICAgICAgIyBXZSBhc3N1bWUgdGhhdCBpZiB0ZXN0aW5nX2RldmljZSBp
cyBib290ZWQgdGhhdCBpdCB3YXMgYm9vdGVkIGJ5IHRoZSBpT1MgU2ltdWxhdG9yIGFwcAotICAg
ICAgICAjIChhcyBvcHBvc2VkIHRvIHNpbWN0bCkuIFNvLCBxdWl0IHRoZSBpT1MgU2ltdWxhdG9y
IGFwcCB0byBzaHV0ZG93biB0ZXN0aW5nX2RldmljZS4KKyAgICAgICAgaWYgKHNlbGYuZGVmYXVs
dF9jaGlsZF9wcm9jZXNzZXMoKSA8IHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpOgorICAgICAgICAg
ICAgICAgIF9sb2cud2FybigiWW91IGhhdmUgc3BlY2lmaWVkIHZlcnkgaGlnaCB2YWx1ZSh7MH0p
IGZvciAtLWNoaWxkLXByb2Nlc3NlcyIuZm9ybWF0KHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpKQor
ICAgICAgICAgICAgICAgIF9sb2cud2FybigibWF4aW11bSBjaGlsZC1wcm9jZXNzZXMgd2hpY2gg
Y2FuIGJlIHN1cHBvcnRlZCBvbiB0aGlzIHN5c3RlbSBhcmU6IHswfSIuZm9ybWF0KHNlbGYuZGVm
YXVsdF9jaGlsZF9wcm9jZXNzZXMoKSkpCisgICAgICAgICAgICAgICAgX2xvZy53YXJuKCJUaGlz
IGlzIHZlcnkgbGlrZWx5IHRvIGZhaWwuIikKKwogICAgICAgICBzZWxmLl9xdWl0X2lvc19zaW11
bGF0b3IoKQotICAgICAgICBTaW11bGF0b3Iud2FpdF91bnRpbF9kZXZpY2VfaXNfaW5fc3RhdGUo
c2VsZi50ZXN0aW5nX2RldmljZS51ZGlkLCBTaW11bGF0b3IuRGV2aWNlU3RhdGUuU0hVVERPV04p
CisgICAgICAgIHNlbGYuX2NyZWF0ZVNpbXVsYXRvckFwcHMoKQogCi0gICAgICAgIGRhdGFfcGF0
aCA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RpbmdfZGV2aWNlLnBhdGgsICdkYXRhJykKLSAgICAg
ICAgaWYgb3MucGF0aC5pc2RpcihkYXRhX3BhdGgpOgotICAgICAgICAgICAgc2h1dGlsLnJtdHJl
ZShkYXRhX3BhdGgpCisgICAgICAgIGZvciBpIGluIHhyYW5nZShzZWxmLmNoaWxkX3Byb2Nlc3Nl
cygpKToKKyAgICAgICAgICAgIFNpbXVsYXRvci53YWl0X3VudGlsX2RldmljZV9pc19pbl9zdGF0
ZShzZWxmLnRlc3RpbmdfZGV2aWNlKGkpLnVkaWQsIFNpbXVsYXRvci5EZXZpY2VTdGF0ZS5TSFVU
RE9XTikKKworICAgICAgICAgICAgZGF0YV9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGlu
Z19kZXZpY2UoaSkucGF0aCwgJ2RhdGEnKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihk
YXRhX3BhdGgpOgorICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZGF0YV9wYXRoKQogCiAg
ICAgZGVmIG1ha2VfY29tbWFuZChzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYueGNydW5fZmlu
ZCgnbWFrZScsICcvdXNyL2Jpbi9tYWtlJykKQEAgLTQyOCwzICs0NzIsMjMgQEAgY2xhc3MgSU9T
U2ltdWxhdG9yUG9ydChQb3J0KToKIAogICAgIGRlZiBzdGRlcnJfcGF0dGVybnNfdG9fc3RyaXAo
c2VsZik6CiAgICAgICAgIHJldHVybiBbXQorCisgICAgZGVmIF9jcmVhdGVTaW11bGF0b3JBcHBz
KHNlbGYpOgorICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uoc2VsZi5jaGlsZF9wcm9jZXNzZXMoKSk6
CisgICAgICAgICAgICBzZWxmLl9jcmVhdGVTaW11bGF0b3JBcHAoaSkKKworICAgIGRlZiBfY3Jl
YXRlU2ltdWxhdG9yQXBwKHNlbGYsIHN1ZmZpeCk6CisgICAgICAgIGRlc3RpbmF0aW9uID0gc2Vs
Zi5nZXRfc2ltdWxhdG9yX3BhdGgoc3VmZml4KQorICAgICAgICBfbG9nLmluZm8oIkNyZWF0aW5n
IGFwcDoiICsgZGVzdGluYXRpb24pCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRlc3RpbmF0
aW9uKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZGVzdGluYXRpb24sIGlnbm9yZV9lcnJv
cnM9VHJ1ZSkKKyAgICAgICAgc2ltdWxhdG9yX2FwcF9wYXRoID0gc2VsZi5kZXZlbG9wZXJfZGly
ICsgIi9BcHBsaWNhdGlvbnMvU2ltdWxhdG9yLmFwcCIKKyAgICAgICAgc2h1dGlsLmNvcHl0cmVl
KHNpbXVsYXRvcl9hcHBfcGF0aCwgZGVzdGluYXRpb24pCisKKyAgICAgICAgIyBVcGRhdGUgYXBw
J3MgcGFja2FnZS1uYW1lIGluc2lkZSBwbGlzdCBhbmQgcmUtY29kZS1zaWduIGl0CisgICAgICAg
IHBsaXN0X3BhdGggPSBkZXN0aW5hdGlvbiArICIvQ29udGVudHMvSW5mby5wbGlzdCIKKyAgICAg
ICAgY29tbWFuZCA9ICJTZXQgQ0ZCdW5kbGVJZGVudGlmaWVyIGNvbS5hcHBsZS5pcGhvbmVzaW11
bGF0b3IiICsgc3RyKHN1ZmZpeCkKKyAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyIv
dXNyL2xpYmV4ZWMvUGxpc3RCdWRkeSIsICItYyIsIGNvbW1hbmQsIHBsaXN0X3BhdGhdKQorICAg
ICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbImluc3RhbGxfbmFtZV90b29sIiwgIi1hZGRf
cnBhdGgiLCBzZWxmLmRldmVsb3Blcl9kaXIgKyAiL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3Mv
IiwgZGVzdGluYXRpb24gKyAiL0NvbnRlbnRzL01hY09TL1NpbXVsYXRvciJdKQorICAgICAgICBz
dWJwcm9jZXNzLmNoZWNrX291dHB1dChbImNvZGVzaWduIiwgIi1mcyIsICItIiwgZGVzdGluYXRp
b25dKQorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbc2VsZi5MU1JFR0lTVEVSX1BB
VEgsICItdiIsICItZiIsIGRlc3RpbmF0aW9uXSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkveGNvZGUvc2ltdWxhdG9yLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkveGNvZGUvc2ltdWxhdG9yLnB5CShyZXZpc2lvbiAxOTM3NTkpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvci5weQkod29ya2luZyBjb3B5KQpAQCAtMjE1LDYgKzIx
NSwxNSBAQCBjbGFzcyBEZXZpY2Uob2JqZWN0KToKICAgICAgICAgU2ltdWxhdG9yLndhaXRfdW50
aWxfZGV2aWNlX2lzX2luX3N0YXRlKGRldmljZV91ZGlkLCBTaW11bGF0b3IuRGV2aWNlU3RhdGUu
U0hVVERPV04pCiAgICAgICAgIHJldHVybiBTaW11bGF0b3IoKS5maW5kX2RldmljZV9ieV91ZGlk
KGRldmljZV91ZGlkKQogCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRlbGV0ZShjbHMsIHVk
aWQpOgorICAgICAgICAiIiIKKyAgICAgICAgRGVsZXRlIHRoZSBnaXZlbiBDb3JlU2ltdWxhdG9y
IGRldmljZS4KKyAgICAgICAgOnBhcmFtIHVkaWQ6IFRoZSB1ZGlkIG9mIHRoZSBkZXZpY2UuCisg
ICAgICAgIDp0eXBlIHVkaWQ6IHN0cgorICAgICAgICAiIiIKKyAgICAgICAgc3VicHJvY2Vzcy5j
YWxsKFsneGNydW4nLCAnc2ltY3RsJywgJ2RlbGV0ZScsIHVkaWRdKQorCiAgICAgZGVmIF9fZXFf
XyhzZWxmLCBvdGhlcik6CiAgICAgICAgIHJldHVybiBzZWxmLnVkaWQgPT0gb3RoZXIudWRpZAog
CkBAIC0yNjUsNiArMjc0LDE1IEBAIGNsYXNzIFNpbXVsYXRvcihvYmplY3QpOgogICAgICAgICBT
SFVUVElOR19ET1dOID0gNAogCiAgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiB3YWl0X3VudGls
X2RldmljZV9pc19ib290ZWQodWRpZCwgdGltZW91dF9zZWNvbmRzPTYwICogNSk6CisgICAgICAg
IHdpdGggdGltZW91dChzZWNvbmRzPXRpbWVvdXRfc2Vjb25kcyk6CisgICAgICAgICAgICB3aGls
ZSBUcnVlOgorICAgICAgICAgICAgICAgIHN0YXRlID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQo
Wyd4Y3J1bicsICdzaW1jdGwnLCAnc3Bhd24nLCB1ZGlkLCAnbGF1bmNoY3RsJywgJ3ByaW50Jywg
J3N5c3RlbSddKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKCJBW1xzXStj
b20uYXBwbGUuc3ByaW5nYm9hcmQuc2VydmljZXMiLCBzdGF0ZSk6CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybgorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKworICAgIEBzdGF0aWNt
ZXRob2QKICAgICBkZWYgd2FpdF91bnRpbF9kZXZpY2VfaXNfaW5fc3RhdGUodWRpZCwgd2FpdF91
bnRpbF9zdGF0ZSwgdGltZW91dF9zZWNvbmRzPTYwICogNSk6CiAgICAgICAgIHdpdGggdGltZW91
dChzZWNvbmRzPXRpbWVvdXRfc2Vjb25kcyk6CiAgICAgICAgICAgICB3aGlsZSAoU2ltdWxhdG9y
LmRldmljZV9zdGF0ZSh1ZGlkKSAhPSB3YWl0X3VudGlsX3N0YXRlKToKQEAgLTI5OSw2ICszMTcs
OSBAQCBjbGFzcyBTaW11bGF0b3Iob2JqZWN0KToKICAgICAgICAgICAgIHJldHVybiBTaW11bGF0
b3IuX2Jvb3RfYW5kX3NodXRkb3duX3NpbXVsYXRvcl9kZXZpY2UoaG9zdCwgdWRpZCkgPT0gMCAg
IyBDYW4gYm9vdCBkZXZpY2UKICAgICAgICAgcmV0dXJuIEZhbHNlICAjIENhbm5vdCBib290IG9y
IGVyYXNlIGRldmljZQogCisgICAgZGVmIGRlbGV0ZV9kZXZpY2Uoc2VsZiwgdWRpZCk6CisgICAg
ICAgIERldmljZS5kZWxldGUodWRpZCkKKwogICAgIGRlZiByZWZyZXNoKHNlbGYpOgogICAgICAg
ICAiIiIKICAgICAgICAgUmVmcmVzaCBydW50aW1lIGFuZCBkZXZpY2UgdHlwZSBpbmZvcm1hdGlv
biBmcm9tIGBgc2ltY3RsIGxpc3RgYC4K
</data>

          </attachment>
      

    </bug>

</bugzilla>