<?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>92398</bug_id>
          
          <creation_ts>2012-07-26 10:41:41 -0700</creation_ts>
          <short_desc>All ports should support per test switching of pixel testing</short_desc>
          <delta_ts>2012-08-20 19:13:24 -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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>92855</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Balazs Kelemen">kbalazs</reporter>
          <assigned_to name="Balazs Kelemen">kbalazs</assigned_to>
          <cc>abarth</cc>
    
    <cc>aroben</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dpranke</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>haraken</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ojan</cc>
    
    <cc>ossy</cc>
    
    <cc>philn</cc>
    
    <cc>rakuco</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tkent</cc>
    
    <cc>tony</cc>
    
    <cc>vestbo</cc>
    
    <cc>wangxianzhu</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>yosin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>679496</commentid>
    <comment_count>0</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-26 10:41:41 -0700</bug_when>
    <thetext>This is the next step after bug 91754. The goal is to be able to specify what tests a platform want to run as pixel test with --pixel-test-directory. We will also be able to remove the DriverProxy hack in nrwt which was added to support reftests. I am going to remove the --pixel-tests option from DRT&apos;s because it&apos;s unlikely that anyone rely on the ability to use it manually. Please notify me if you don&apos;t agree on that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679574</commentid>
    <comment_count>1</comment_count>
      <attachid>154700</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-26 11:30:39 -0700</bug_when>
    <thetext>Created attachment 154700
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679772</commentid>
    <comment_count>2</comment_count>
      <attachid>154700</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-26 14:31:19 -0700</bug_when>
    <thetext>Comment on attachment 154700
Patch

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

Thanks for changing all of the ports! that&apos;s great. That said, R-&apos;ing for the typo on the mac port :)

Also, it might be nice if someone else who was more familiar with the DRT/WTR/C++ code took a look. Tony, what do you think?

In your earlier change, I missed that the format for the line written to stdin was &quot;test&apos;--pixel-test&apos;hash&quot; ... I was hoping to extend this to support arbitrary arguments, which I suppose you can do by just splicing them between single quotes, but it seems a little odd. why not just separate the args with spaces, e.g., test hash --pixel-test --foo --bar, etc.?

&gt; Tools/DumpRenderTree/efl/DumpRenderTree.cpp:232
&gt; +static bool getExpectedPixelHash(const String&amp; testURL, String&amp; pixelHashOut)

I don&apos;t know the EFL implementation at all, but (perhaps naively) wouldn&apos;t it be better to parse the url in the caller to see if you needed to get the hash? Or maybe at least change the name of this function?

&gt; Tools/DumpRenderTree/mac/DumpRenderTree.mm:876
&gt; +        printSeparators = (optind &lt; argc - 1 || (dumpPixelsForCurrentTest &amp;&amp; dumpTree);

does this compile? I think you&apos;re missing a closing paren ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679776</commentid>
    <comment_count>3</comment_count>
      <attachid>154700</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-07-26 14:35:38 -0700</bug_when>
    <thetext>Comment on attachment 154700
Patch

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

It&apos;s very brave of you to try to change all the ports at the same time! :)

It seems like the code for parsing pathOrURL and the command line arguments is the same for all DRTs (except maybe EFL).  Can we move that into a helper file?  Something like CyclicRedundancyCheck.h or PixelDumpSupport.h.

This was probably discussed in an earlier bug, but why is &apos; used as a separator? Can&apos;t we just search for -- after a space?

&gt; Tools/ChangeLog:10
&gt; +        on the standart input that means that running the current

typo: standart -&gt; standard

&gt; Tools/Scripts/webkitpy/layout_tests/port/driver.py:342
&gt; +            command += &quot;&apos;&quot; + &apos;--pixel-test&apos;

Nit: Can this just be command += &quot;&apos;--pixel-test&quot; ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680665</commentid>
    <comment_count>4</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-27 08:15:12 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 154700 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=154700&amp;action=review
&gt; 
&gt; It&apos;s very brave of you to try to change all the ports at the same time! :)
&gt; 

I know... :)

&gt; It seems like the code for parsing pathOrURL and the command line arguments is the same for all DRTs (except maybe EFL).  Can we move that into a helper file?  Something like CyclicRedundancyCheck.h or PixelDumpSupport.h.
&gt; 
&gt; This was probably discussed in an earlier bug, but why is &apos; used as a separator? Can&apos;t we just search for -- after a space?

Both are good idea. I will do that way in the next patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682093</commentid>
    <comment_count>5</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-30 09:44:59 -0700</bug_when>
    <thetext>&gt; 
&gt; In your earlier change, I missed that the format for the line written to stdin was &quot;test&apos;--pixel-test&apos;hash&quot; ... I was hoping to extend this to support arbitrary arguments, which I suppose you can do by just splicing them between single quotes, but it seems a little odd. why not just separate the args with spaces, e.g., test hash --pixel-test --foo --bar, etc.?
&gt; 

I have tried to implement this but than realized that &apos; as separator is used because spaces are used to separate paths (which are simply the argv array in when running in standalone mode). I don&apos;t think it&apos;s worth to add a bunch of command line parsing logic to drt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682171</commentid>
    <comment_count>6</comment_count>
      <attachid>155320</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-30 10:43:55 -0700</bug_when>
    <thetext>Created attachment 155320
patch for ews&apos;s</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682185</commentid>
    <comment_count>7</comment_count>
      <attachid>155320</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-30 10:50:11 -0700</bug_when>
    <thetext>Comment on attachment 155320
patch for ews&apos;s

Attachment 155320 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13396347</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682187</commentid>
    <comment_count>8</comment_count>
      <attachid>155320</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-30 10:52:39 -0700</bug_when>
    <thetext>Comment on attachment 155320
patch for ews&apos;s

Attachment 155320 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13394378</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682190</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-30 10:53:21 -0700</bug_when>
    <thetext>Attachment 155320 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/DumpRenderTree/D...&quot; exit_code: 1
Tools/DumpRenderTree/qt/DumpRenderTreeQt.cpp:34:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
Total errors found: 1 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682192</commentid>
    <comment_count>10</comment_count>
      <attachid>155320</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-30 10:54:42 -0700</bug_when>
    <thetext>Comment on attachment 155320
patch for ews&apos;s

Attachment 155320 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13387457</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682193</commentid>
    <comment_count>11</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-30 10:55:37 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; I have tried to implement this but than realized that &apos; as separator is used because spaces are used to separate paths (which are simply the argv array in when running in standalone mode). I don&apos;t think it&apos;s worth to add a bunch of command line parsing logic to drt.

DRT supports running more than one test at a time using argv? News to me; do all ports support that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682197</commentid>
    <comment_count>12</comment_count>
      <attachid>155320</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-07-30 11:00:17 -0700</bug_when>
    <thetext>Comment on attachment 155320
patch for ews&apos;s

Attachment 155320 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13385588</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682208</commentid>
    <comment_count>13</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-30 11:13:33 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #5)
&gt; &gt; I have tried to implement this but than realized that &apos; as separator is used because spaces are used to separate paths (which are simply the argv array in when running in standalone mode). I don&apos;t think it&apos;s worth to add a bunch of command line parsing logic to drt.
&gt; 
&gt; DRT supports running more than one test at a time using argv? News to me; do all ports support that?

Yes, all of them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682216</commentid>
    <comment_count>14</comment_count>
      <attachid>155325</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-30 11:27:48 -0700</bug_when>
    <thetext>Created attachment 155325
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682222</commentid>
    <comment_count>15</comment_count>
      <attachid>155325</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-07-30 11:32:06 -0700</bug_when>
    <thetext>Comment on attachment 155325
Patch

Attachment 155325 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13385598</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682223</commentid>
    <comment_count>16</comment_count>
      <attachid>155325</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-30 11:34:17 -0700</bug_when>
    <thetext>Comment on attachment 155325
Patch

Attachment 155325 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13381862</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682261</commentid>
    <comment_count>17</comment_count>
      <attachid>155325</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-30 11:58:46 -0700</bug_when>
    <thetext>Comment on attachment 155325
Patch

Attachment 155325 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13391413</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682270</commentid>
    <comment_count>18</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-07-30 12:09:20 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; 
&gt; &gt; In your earlier change, I missed that the format for the line written to stdin was &quot;test&apos;--pixel-test&apos;hash&quot; ... I was hoping to extend this to support arbitrary arguments, which I suppose you can do by just splicing them between single quotes, but it seems a little odd. why not just separate the args with spaces, e.g., test hash --pixel-test --foo --bar, etc.?
&gt; &gt; 
&gt; 
&gt; I have tried to implement this but than realized that &apos; as separator is used because spaces are used to separate paths (which are simply the argv array in when running in standalone mode). I don&apos;t think it&apos;s worth to add a bunch of command line parsing logic to drt.

I still don&apos;t see why you need &apos;.  Any token starting with -- is a flag; everything else is a filename/URL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682834</commentid>
    <comment_count>19</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-31 01:57:01 -0700</bug_when>
    <thetext>&gt; 
&gt; I still don&apos;t see why you need &apos;.  Any token starting with -- is a flag; everything else is a filename/URL.

I did not say it&apos;s not possible to get rid of it. I said I don&apos;t want to bother with it. I don&apos;t make it worst than it was and improving it is out of the scope of this patch. (And anyway, it&apos;s not a common use case when one want to pass -p and the hash manually.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682854</commentid>
    <comment_count>20</comment_count>
      <attachid>155474</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-31 02:34:30 -0700</bug_when>
    <thetext>Created attachment 155474
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682860</commentid>
    <comment_count>21</comment_count>
      <attachid>155474</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-07-31 02:38:01 -0700</bug_when>
    <thetext>Comment on attachment 155474
Patch

Attachment 155474 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13388723</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682865</commentid>
    <comment_count>22</comment_count>
      <attachid>155474</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-31 02:41:08 -0700</bug_when>
    <thetext>Comment on attachment 155474
Patch

Attachment 155474 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13384893</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682870</commentid>
    <comment_count>23</comment_count>
      <attachid>155474</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-31 02:41:41 -0700</bug_when>
    <thetext>Comment on attachment 155474
Patch

Attachment 155474 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13386787</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682872</commentid>
    <comment_count>24</comment_count>
      <attachid>155474</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-31 02:44:05 -0700</bug_when>
    <thetext>Comment on attachment 155474
Patch

Attachment 155474 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13387710</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682875</commentid>
    <comment_count>25</comment_count>
      <attachid>155474</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-31 02:48:20 -0700</bug_when>
    <thetext>Comment on attachment 155474
Patch

Attachment 155474 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13385847</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682913</commentid>
    <comment_count>26</comment_count>
      <attachid>155489</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-31 04:30:44 -0700</bug_when>
    <thetext>Created attachment 155489
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682920</commentid>
    <comment_count>27</comment_count>
      <attachid>155489</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-31 04:37:48 -0700</bug_when>
    <thetext>Comment on attachment 155489
Patch

Attachment 155489 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13400395</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682950</commentid>
    <comment_count>28</comment_count>
      <attachid>155489</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-31 05:36:30 -0700</bug_when>
    <thetext>Comment on attachment 155489
Patch

Attachment 155489 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13400410</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682971</commentid>
    <comment_count>29</comment_count>
      <attachid>155513</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-31 06:14:55 -0700</bug_when>
    <thetext>Created attachment 155513
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682976</commentid>
    <comment_count>30</comment_count>
      <attachid>155513</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-31 06:21:16 -0700</bug_when>
    <thetext>Comment on attachment 155513
Patch

Attachment 155513 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13390754</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682984</commentid>
    <comment_count>31</comment_count>
      <attachid>155519</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-31 06:40:14 -0700</bug_when>
    <thetext>Created attachment 155519
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682987</commentid>
    <comment_count>32</comment_count>
      <attachid>155519</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-31 06:43:35 -0700</bug_when>
    <thetext>Comment on attachment 155519
Patch

Attachment 155519 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13385931</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683047</commentid>
    <comment_count>33</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-31 07:42:39 -0700</bug_when>
    <thetext>Could somebody tell me how can I include the common DumpRenderTree.h in the chromium DumpRenderTree.cpp? Include path is not set, #include &quot;../DumpRenderTree.h&quot; doesn&apos;t work. I don&apos;t know how to add include paths in the gpy build. Could you catch me on IRC? Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683199</commentid>
    <comment_count>34</comment_count>
      <attachid>155569</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-31 09:38:35 -0700</bug_when>
    <thetext>Created attachment 155569
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683208</commentid>
    <comment_count>35</comment_count>
      <attachid>155569</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-31 09:50:52 -0700</bug_when>
    <thetext>Comment on attachment 155569
Patch

Attachment 155569 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13410019</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683238</commentid>
    <comment_count>36</comment_count>
      <attachid>155580</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-31 10:19:47 -0700</bug_when>
    <thetext>Created attachment 155580
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683256</commentid>
    <comment_count>37</comment_count>
      <attachid>155580</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-31 10:44:55 -0700</bug_when>
    <thetext>Comment on attachment 155580
Patch

Attachment 155580 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13403260</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683302</commentid>
    <comment_count>38</comment_count>
      <attachid>155580</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-31 11:37:10 -0700</bug_when>
    <thetext>Comment on attachment 155580
Patch

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

r+ with the nit that I&apos;d change the delimiter back to &apos; if we&apos;re not going to use spaces. I assume you&apos;d have no complaints with someone uploading a separate patch to switch to spaces? Also, fix the .gyp file, please ;).

Tony, are you okay with this?

&gt; Tools/DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:136
&gt; +                &apos;../&apos;

you probably need a comma here, else I expect this is messing up the compile path: you&apos;d get &apos;../&lt;(DEPTH)&apos; :). 

Also, this should probably be &apos;&lt;(tools_dir)/DumpRenderTree&apos; rather than a relative path.

&gt; Tools/Scripts/old-run-webkit-tests:754
&gt; +        $suffixPixelTest = &quot;:--pixel-test&quot;;

if we&apos;re not able to use spaces, it seems like we might as well stay with single quotes as the delimiter.

&gt; Tools/Scripts/webkitpy/layout_tests/port/driver.py:339
&gt; +            command += &quot;:&quot; + driver_input.image_hash

as above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683382</commentid>
    <comment_count>39</comment_count>
      <attachid>155580</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-07-31 12:29:04 -0700</bug_when>
    <thetext>Comment on attachment 155580
Patch

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

&gt;&gt; Tools/DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:136
&gt;&gt; +                &apos;../&apos;
&gt; 
&gt; you probably need a comma here, else I expect this is messing up the compile path: you&apos;d get &apos;../&lt;(DEPTH)&apos; :). 
&gt; 
&gt; Also, this should probably be &apos;&lt;(tools_dir)/DumpRenderTree&apos; rather than a relative path.

Heh, I suggested the relative path.  Either is fine.

&gt; Tools/DumpRenderTree/DumpRenderTreeCommon.cpp:12
&gt; +    CommandTokenizer(const std::string&amp; input)

Nit: explicit

&gt; Tools/DumpRenderTree/DumpRenderTreeCommon.cpp:53
&gt; +    return m_next != std::string();

Nit: !m_next.empty()

&gt; Tools/WebKitTestRunner/TestController.cpp:516
&gt; +    CommandTokenizer(const std::string&amp; input)

explicit

&gt; Tools/WebKitTestRunner/TestController.cpp:557
&gt; +    return m_next != std::string();

!m_next.empty()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683388</commentid>
    <comment_count>40</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-31 12:38:13 -0700</bug_when>
    <thetext>(In reply to comment #39)
&gt; &gt; 
&gt; &gt; Also, this should probably be &apos;&lt;(tools_dir)/DumpRenderTree&apos; rather than a relative path.
&gt; 
&gt; Heh, I suggested the relative path.  Either is fine.
&gt;

I&apos;ve found using relative paths to be fragile and confusing, especially when trying to move files around and/or sort through webkit-in-chromium vs. chromium-in-webkit checkouts. Using the variables made things a lot clearer (again, to me).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684002</commentid>
    <comment_count>41</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-08-01 02:09:25 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/124313.
Keeping bug open because I forgot to remove --pixel-tests from the Qt DRT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684028</commentid>
    <comment_count>42</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-08-01 02:36:47 -0700</bug_when>
    <thetext>Need to roll out. Adding Tools/DumpRenderTree as include path does not work because there are some files with the same name in the chromium dir. Do you agree to rename these with a Chromium suffix? It would be:
AccessibilityController.h/cpp -&gt; AccessibilityControllerChromium.h/cpp
AccessibilityUIElement.h/cpp -&gt; AccessibilityUIElementChromium.h/cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684032</commentid>
    <comment_count>43</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-08-01 02:40:03 -0700</bug_when>
    <thetext>(In reply to comment #42)
&gt; Need to roll out. Adding Tools/DumpRenderTree as include path does not work because there are some files with the same name in the chromium dir. Do you agree to rename these with a Chromium suffix? It would be:
&gt; AccessibilityController.h/cpp -&gt; AccessibilityControllerChromium.h/cpp
&gt; AccessibilityUIElement.h/cpp -&gt; AccessibilityUIElementChromium.h/cpp

Actually we could also change the includes, like
-#include &quot;AccessibilityController.h&quot;
+#include &quot;chromium/TestRunner/AccessibilityController.h&quot;

Which solution do you prefer? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684352</commentid>
    <comment_count>44</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-01 11:20:50 -0700</bug_when>
    <thetext>&gt; Actually we could also change the includes, like
&gt; -#include &quot;AccessibilityController.h&quot;
&gt; +#include &quot;chromium/TestRunner/AccessibilityController.h&quot;
&gt; 
&gt; Which solution do you prefer? :)

Using an include path like &quot;chromium/TestRunner/AccessibilityController.h&quot; in WebKit isn&apos;t correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684356</commentid>
    <comment_count>45</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-08-01 11:22:39 -0700</bug_when>
    <thetext>Perhaps we should just copy DumpRenderTree.h down into the chromium dir ... it looks like that&apos;s what we&apos;ve done (more or less) for other files. I don&apos;t like the duplication, but sharing more code properly is probably a bigger effort than what should be required to make this patch land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685116</commentid>
    <comment_count>46</comment_count>
      <attachid>156011</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-08-02 02:06:03 -0700</bug_when>
    <thetext>Created attachment 156011
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685119</commentid>
    <comment_count>47</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-08-02 02:07:27 -0700</bug_when>
    <thetext>(In reply to comment #45)
&gt; Perhaps we should just copy DumpRenderTree.h down into the chromium dir ... it looks like that&apos;s what we&apos;ve done (more or less) for other files. I don&apos;t like the duplication, but sharing more code properly is probably a bigger effort than what should be required to make this patch land.

Well, I don&apos;t like this idea, I think renaming those files is much more straightforward, so I did that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685260</commentid>
    <comment_count>48</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-08-02 05:42:04 -0700</bug_when>
    <thetext>Wow, finally it builds everywhere :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685776</commentid>
    <comment_count>49</comment_count>
      <attachid>156011</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-08-02 13:52:37 -0700</bug_when>
    <thetext>Comment on attachment 156011
Patch

Going to land it tomorrow as it is late here and I would like to watch bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686568</commentid>
    <comment_count>50</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-08-03 04:36:45 -0700</bug_when>
    <thetext>Landed in r124581. ELF regression is fixed in r124595.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688174</commentid>
    <comment_count>51</comment_count>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-08-06 09:05:02 -0700</bug_when>
    <thetext>*** Bug 91538 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700304</commentid>
    <comment_count>52</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-08-20 18:26:07 -0700</bug_when>
    <thetext>How can I manually run DRT with the path to a test and -p to dump pixels now?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700345</commentid>
    <comment_count>53</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-08-20 19:13:24 -0700</bug_when>
    <thetext>(In reply to comment #52)
&gt; How can I manually run DRT with the path to a test and -p to dump pixels now?

Assuming your environment is set up properly, 

path-to-DumpRenderTree path-to-LayoutTests/foo/bar.html&apos;-pixel-test

should work (just tested this earlier today).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154700</attachid>
            <date>2012-07-26 11:30:39 -0700</date>
            <delta_ts>2012-07-30 10:43:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92398-20120726203017.patch</filename>
            <type>text/plain</type>
            <size>36672</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNzI5CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNDE5ZmU1NTdiZmQ1OTMxZTYyYzkxYTE1YmEzN2E4NzBk
NGM1OTM2YS4uYTFhZDkxMzViMDBmNzJkMjc3N2VmYTY2MzlkODZjZGIyOTA2MWQ3OCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDYw
IEBACiAyMDEyLTA3LTI2ICBCYWxhenMgS2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9yZz4KIAor
ICAgICAgICBBbGwgcG9ydHMgc2hvdWxkIHN1cHBvcnQgcGVyIHRlc3Qgc3dpdGNoaW5nIG9mIHBp
eGVsIHRlc3RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkyMzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGVhY2ggYWxsIHRlc3QgZHJpdmVycyB0byBhY2NlcHQgYSBwZXIgdGVzdCBjb250cm9sIG9m
IHdoZXRoZXIKKyAgICAgICAgdG8gZHVtcCBwaXhlbHMuIERyaXZlcnMgbm93IGFjY2VwdCBhIC0t
cGl4ZWwtdGVzdCBhcmd1bWVudAorICAgICAgICBvbiB0aGUgc3RhbmRhcnQgaW5wdXQgdGhhdCBt
ZWFucyB0aGF0IHJ1bm5pbmcgdGhlIGN1cnJlbnQKKyAgICAgICAgdGVzdCBhcyBwaXhlbCB0ZXN0
IGlzIGFsbG93ZWQgKGV2ZW4gaWYgdGhlIGV4cGVjdGVkIGhhc2ggaXMKKyAgICAgICAgbWlzc2lu
ZykuIFJlbW92ZWQgdGhlIC0tcGl4ZWwtdGVzdHMgY29tbWFuZCBsaW5lIG9wdGlvbiBzaW5jZQor
ICAgICAgICB0aGVyZSBpcyBubyBuZWVkIGZvciBpdCBhbnltb3JlLgorCisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwOgorICAgICAgICAocnVuVGVz
dCk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0U2hlbGwuY3BwOgorICAgICAgICAoVGVzdFNoZWxsOjpUZXN0U2hlbGwpOgorICAgICAgICAo
VGVzdFNoZWxsOjpydW5GaWxlVGVzdCk6CisgICAgICAgIChUZXN0U2hlbGw6OmR1bXApOgorICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oOgorICAgICAgICAoVGVz
dFBhcmFtczo6VGVzdFBhcmFtcyk6CisgICAgICAgIChUZXN0U2hlbGwpOgorICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZS5jcHA6CisgICAgICAgIChwYXJzZUNvbW1h
bmRMaW5lT3B0aW9ucyk6CisgICAgICAgIChnZXRFeHBlY3RlZFBpeGVsSGFzaCk6CisgICAgICAg
IChydW5UZXN0KToKKyAgICAgICAgKHNob3VsZER1bXBQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVj
dGVkKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9EdW1w
UmVuZGVyVHJlZS5jcHA6CisgICAgICAgIChpbml0aWFsaXplR2xvYmFsc0Zyb21Db21tYW5kTGlu
ZU9wdGlvbnMpOgorICAgICAgICAoZHVtcCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFj
L0R1bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICAoaW5pdGlhbGl6ZUdsb2JhbHNGcm9tQ29tbWFu
ZExpbmVPcHRpb25zKToKKyAgICAgICAgKGR1bXBSZW5kZXJUcmVlKToKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkR1
bXBSZW5kZXJUcmVlOjpwcm9jZXNzTGluZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2lu
L0R1bXBSZW5kZXJUcmVlLmNwcDoKKyAgICAgICAgKGR1bXApOgorICAgICAgICAocnVuVGVzdCk6
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd3gvRHVtcFJlbmRlclRyZWVXeC5jcHA6CisgICAg
ICAgIChkdW1wKToKKyAgICAgICAgKHJ1blRlc3QpOgorICAgICAgICAqIFNjcmlwdHMvb2xkLXJ1
bi13ZWJraXQtdGVzdHM6IFBhc3MgLS1waXhlbC10ZXN0IGJlZm9yZSB0aGUgaGFzaC4KKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHk6CisgICAgICAg
IChQb3J0LnNob3VsZF9ydW5fYXNfcGl4ZWxfdGVzdCk6IFJlbW92ZWQgbm93IHRoYXQgYWxsIHBv
cnRzIHN1cHBvcnRzIGl0LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvZHJpdmVyLnB5OgorICAgICAgICAoRHJpdmVyLmNtZF9saW5lKTogRG9uJ3QgcGFzcyAt
LXBpeGVsLXRlc3RzIGFueW1vcmUuCisgICAgICAgIChEcml2ZXIuX2NvbW1hbmRfZnJvbV9kcml2
ZXJfaW5wdXQpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6VGVzdENvbnRyb2xsZXIpOgorICAgICAg
ICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXVFI6OlRlc3RD
b250cm9sbGVyOjpydW5UZXN0KToKKworMjAxMi0wNy0yNiAgQmFsYXpzIEtlbGVtZW4gIDxrYmFs
YXpzQHdlYmtpdC5vcmc+CisKICAgICAgICAgW25yd3RdIGdldCByaWQgb2YgLS1za2lwLXBpeGVs
LXRlc3QtaWYtbm8tYmFzZWxpbmUKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTkyMzc3CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L0R1bXBSZW5kZXJUcmVlLmNwcAppbmRleCA2MTU1ZjQ0MWY1ZDhiYjNjNDRlNTE3OTA4MGRjYjE3
NDQ1ZTg5ODc0Li4zZjZkOWY4MTYwYWJiNmQ2MThlNTAwZjQ0ODBjYTgyOGRiOTczYTZmIDEwMDY0
NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EdW1wUmVuZGVyVHJlZS5jcHAK
KysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwCkBA
IC00NCw3ICs0NCw2IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiBzdGF0aWMgY29uc3QgY2hhciBv
cHRpb25Db21wbGV4VGV4dFtdID0gIi0tY29tcGxleC10ZXh0IjsKIHN0YXRpYyBjb25zdCBjaGFy
IG9wdGlvbkR1bXBBbGxQaXhlbHNbXSA9ICItLWR1bXAtYWxsLXBpeGVscyI7CiBzdGF0aWMgY29u
c3QgY2hhciBvcHRpb25Ob3RyZWVbXSA9ICItLW5vdHJlZSI7Ci1zdGF0aWMgY29uc3QgY2hhciBv
cHRpb25QaXhlbFRlc3RzW10gPSAiLS1waXhlbC10ZXN0cyI7CiBzdGF0aWMgY29uc3QgY2hhciBv
cHRpb25UaHJlYWRlZFtdID0gIi0tdGhyZWFkZWQiOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9u
RGVidWdSZW5kZXJUcmVlW10gPSAiLS1kZWJ1Zy1yZW5kZXItdHJlZSI7CiBzdGF0aWMgY29uc3Qg
Y2hhciBvcHRpb25EZWJ1Z0xheWVyVHJlZVtdID0gIi0tZGVidWctbGF5ZXItdHJlZSI7CkBAIC03
MCw2ICs2OSw4IEBAIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkVuY29kZUJpbmFyeVtdID0gIi0t
ZW5jb2RlLWJpbmFyeSI7CiBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25Ob1RpbWVvdXRbXSA9ICIt
LW5vLXRpbWVvdXQiOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uV2ViQ29yZUxvZ0NoYW5uZWxz
W10gPSAiLS13ZWJjb3JlLWxvZy1jaGFubmVscz0iOwogCitzdGF0aWMgYm9vbCBkdW1wUGl4ZWxz
Rm9yQ3VycmVudFRlc3Q7CisKIGNsYXNzIFdlYktpdFN1cHBvcnRUZXN0RW52aXJvbm1lbnQgewog
cHVibGljOgogICAgIFdlYktpdFN1cHBvcnRUZXN0RW52aXJvbm1lbnQoKQpAQCAtODksMTIgKzkw
LDI1IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoVGVzdFNoZWxsJiBzaGVsbCwgVGVzdFBhcmFtcyYg
cGFyYW1zLCBjb25zdCBzdHJpbmcmIHRlc3ROYW1lCiB7CiAgICAgaW50IG9sZFRpbWVvdXRNc2Vj
ID0gc2hlbGwubGF5b3V0VGVzdFRpbWVvdXQoKTsKICAgICBwYXJhbXMucGl4ZWxIYXNoID0gIiI7
CisgICAgc3RyaW5nIGNvbW1hbmQgPSB0ZXN0TmFtZTsKICAgICBzdHJpbmcgcGF0aE9yVVJMID0g
dGVzdE5hbWU7Ci0gICAgc3RyaW5nOjpzaXplX3R5cGUgc2VwYXJhdG9yUG9zaXRpb24gPSBwYXRo
T3JVUkwuZmluZCgiJyIpOwotICAgIGlmIChzZXBhcmF0b3JQb3NpdGlvbiAhPSBzdHJpbmc6Om5w
b3MpIHsKLSAgICAgICAgcGFyYW1zLnBpeGVsSGFzaCA9IHBhdGhPclVSTC5zdWJzdHIoc2VwYXJh
dG9yUG9zaXRpb24gKyAxKTsKLSAgICAgICAgcGF0aE9yVVJMLmVyYXNlKHNlcGFyYXRvclBvc2l0
aW9uKTsKKyAgICBkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgPSBmYWxzZTsKKyAgICBzaXplX3Qg
Zmlyc3RTZXBhcmF0b3JQb3MgPSBjb21tYW5kLmZpbmRfZmlyc3Rfb2YoJ1wnJyk7CisgICAgaWYg
KGZpcnN0U2VwYXJhdG9yUG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICAgIGNvbnN0
IHN0ZDo6c3RyaW5nIGV4cGVjdGVkUGl4ZWxUZXN0QXJnKCItLXBpeGVsLXRlc3QiKTsKKyAgICAg
ICAgc3RkOjpzdHJpbmcgYXJnVGVzdCA9IHN0ZDo6c3RyaW5nKGNvbW1hbmQsIGZpcnN0U2VwYXJh
dG9yUG9zICsgMSwgZXhwZWN0ZWRQaXhlbFRlc3RBcmcuc2l6ZSgpKTsKKyAgICAgICAgaWYgKGFy
Z1Rlc3QgIT0gZXhwZWN0ZWRQaXhlbFRlc3RBcmcpIHsKKyAgICAgICAgICAgIEZBVEFMKCJ1bmV4
cGVjdGVkIGFyZ3VtZW50OiAlc1xuIiwgYXJnVGVzdC5jX3N0cigpKQorICAgICAgICAgICAgZXhp
dCgxKTsKKyAgICAgICAgfQorCisgICAgICAgIHBhdGhPclVSTCA9IHN0ZDo6c3RyaW5nKGNvbW1h
bmQsIDAsIGZpcnN0U2VwYXJhdG9yUG9zKTsKKyAgICAgICAgZHVtcFBpeGVsc0ZvckN1cnJlbnRU
ZXN0ID0gdHJ1ZTsKKyAgICAgICAgc2l6ZV90IHNlY29uZFNlcGFyYXRvclBvcyA9IGNvbW1hbmQu
ZmluZF9maXJzdF9vZignXCcnLCBmaXJzdFNlcGFyYXRvclBvcyArIDEpOworICAgICAgICBpZiAo
c2Vjb25kU2VwYXJhdG9yUG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgICAgICAgICAgcGFy
YW1zLnBpeGVsaGFzaCA9IHN0ZDo6c3RyaW5nKGNvbW1hbmQsIHNlY29uZFNlcGFyYXRvclBvcyAr
IDEpOwogICAgIH0KKwogICAgIHBhcmFtcy50ZXN0VXJsID0gd2Via2l0X3N1cHBvcnQ6OkNyZWF0
ZVVSTEZvclBhdGhPclVSTChwYXRoT3JVUkwpOwogICAgIHdlYmtpdF9zdXBwb3J0OjpTZXRDdXJy
ZW50RGlyZWN0b3J5Rm9yRmlsZVVSTChwYXJhbXMudGVzdFVybCk7CiAgICAgdjg6OlY4OjpTZXRG
bGFnc0Zyb21TdHJpbmcoc2hlbGwuamF2YVNjcmlwdEZsYWdzKCkuY19zdHIoKSwgc2hlbGwuamF2
YVNjcmlwdEZsYWdzKCkubGVuZ3RoKCkpOwpAQCAtMTA4LDExICsxMjIsMTEgQEAgc3RhdGljIHZv
aWQgcnVuVGVzdChUZXN0U2hlbGwmIHNoZWxsLCBUZXN0UGFyYW1zJiBwYXJhbXMsIGNvbnN0IHN0
cmluZyYgdGVzdE5hbWUKICAgICAgICAgICBib29sIGlzTGFzdExvYWQgPSAoaSA9PSAodjg6OlRl
c3Rpbmc6OkdldFN0cmVzc1J1bnMoKSAtIDEpKTsKICAgICAgICAgICBzaGVsbC5zZXREdW1wV2hl
bkZpbmlzaGVkKGlzTGFzdExvYWQpOwogICAgICAgICAgIHNoZWxsLnJlc2V0VGVzdENvbnRyb2xs
ZXIoKTsKLSAgICAgICAgICBzaGVsbC5ydW5GaWxlVGVzdChwYXJhbXMpOworICAgICAgICAgIHNo
ZWxsLnJ1bkZpbGVUZXN0KHBhcmFtcywgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0KTsKICAgICAg
IH0KICAgICB9IGVsc2UgewogICAgICAgc2hlbGwucmVzZXRUZXN0Q29udHJvbGxlcigpOwotICAg
ICAgc2hlbGwucnVuRmlsZVRlc3QocGFyYW1zKTsKKyAgICAgIHNoZWxsLnJ1bkZpbGVUZXN0KHBh
cmFtcywgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0KTsKICAgICB9CiAgICAgc2hlbGwuc2V0TGF5
b3V0VGVzdFRpbWVvdXQob2xkVGltZW91dE1zZWMpOwogfQpAQCAtMTQ2LDggKzE2MCw2IEBAIGlu
dCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAgICAgICAgICAgICBzZXJ2ZXJNb2RlID0g
dHJ1ZTsKICAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uTm90cmVlKQogICAgICAg
ICAgICAgcGFyYW1zLmR1bXBUcmVlID0gZmFsc2U7Ci0gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50
ID09IG9wdGlvblBpeGVsVGVzdHMpCi0gICAgICAgICAgICBwYXJhbXMuZHVtcFBpeGVscyA9IHRy
dWU7CiAgICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvbkRlYnVnUmVuZGVyVHJlZSkK
ICAgICAgICAgICAgIHBhcmFtcy5kZWJ1Z1JlbmRlclRyZWUgPSB0cnVlOwogICAgICAgICBlbHNl
IGlmIChhcmd1bWVudCA9PSBvcHRpb25EZWJ1Z0xheWVyVHJlZSkKZGlmZiAtLWdpdCBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCmluZGV4IDgwMzQyOTA5OTNlZmZkZDgxMmFmYjI1
YzVhN2NlMjU1NjUyYzNlNTcuLjA3ZTUzY2M0MWM1ZjUyZmViMWMzNjc2MDVmN2I5ODY3YjZlMjQ4
ZTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5j
cHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcApAQCAt
MTAyLDcgKzEwMiw4IEBAIHN0YXRpYyB2b2lkIG1ha2VDYW52YXNPcGFxdWUoU2tDYW52YXMqIGNh
bnZhcykKIH0KIAogVGVzdFNoZWxsOjpUZXN0U2hlbGwoKQotICAgIDogbV90ZXN0SXNQZW5kaW5n
KGZhbHNlKQorICAgIDogbV9kdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QoZmFsc2UpCisgICAgLCBt
X3Rlc3RJc1BlbmRpbmcoZmFsc2UpCiAgICAgLCBtX3Rlc3RJc1ByZXBhcmluZyhmYWxzZSkKICAg
ICAsIG1fZm9jdXNlZFdpZGdldCgwKQogICAgICwgbV9kZXZUb29scygwKQpAQCAtMjMyLDEzICsy
MzMsMTYgQEAgdm9pZCBUZXN0U2hlbGw6OnJlc2V0V2ViU2V0dGluZ3MoV2ViVmlldyYgd2ViVmll
dykKICAgICBtX3ByZWZzLmFwcGx5VG8oJndlYlZpZXcpOwogfQogCi12b2lkIFRlc3RTaGVsbDo6
cnVuRmlsZVRlc3QoY29uc3QgVGVzdFBhcmFtcyYgcGFyYW1zKQordm9pZCBUZXN0U2hlbGw6OnJ1
bkZpbGVUZXN0KGNvbnN0IFRlc3RQYXJhbXMmIHBhcmFtcywgYm9vbCBzaG91bGREdW1wUGl4ZWxz
KQogewogICAgIEFTU0VSVChwYXJhbXMudGVzdFVybC5pc1ZhbGlkKCkpOwogICAgIG1fdGVzdElz
UHJlcGFyaW5nID0gdHJ1ZTsKKyAgICBtX3Nob3VsZER1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCA9
IHNob3VsZER1bXBQaXhlbHM7CiAgICAgbV9wYXJhbXMgPSBwYXJhbXM7CiAgICAgc3RyaW5nIHRl
c3RVcmwgPSBtX3BhcmFtcy50ZXN0VXJsLnNwZWMoKTsKIAorICAgIG1fbGF5b3V0VGVzdENvbnRy
b2xsZXItPnNldFNob3VsZEdlbmVyYXRlUGl4ZWxSZXN1bHRzKHNob3VsZER1bXBQaXhlbHMpOwor
CiAgICAgaWYgKHRlc3RVcmwuZmluZCgibG9hZGluZy8iKSAhPSBzdHJpbmc6Om5wb3MKICAgICAg
ICAgfHwgdGVzdFVybC5maW5kKCJsb2FkaW5nXFwiKSAhPSBzdHJpbmc6Om5wb3MpCiAgICAgICAg
IG1fbGF5b3V0VGVzdENvbnRyb2xsZXItPnNldFNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3Mo
dHJ1ZSk7CkBAIC02MDQsNyArNjA4LDcgQEAgdm9pZCBUZXN0U2hlbGw6OmR1bXAoKQogICAgIGlm
IChkdW1wZWRBbnl0aGluZyAmJiBtX3BhcmFtcy5wcmludFNlcGFyYXRvcnMpCiAgICAgICAgIG1f
cHJpbnRlci5oYW5kbGVUZXh0Rm9vdGVyKCk7CiAKLSAgICBpZiAobV9wYXJhbXMuZHVtcFBpeGVs
cyAmJiBzaG91bGRHZW5lcmF0ZVBpeGVsUmVzdWx0cykgeworICAgIGlmIChtX2R1bXBQaXhlbHNG
b3JDdXJyZW50VGVzdCAmJiBzaG91bGRHZW5lcmF0ZVBpeGVsUmVzdWx0cykgewogICAgICAgICAv
LyBJbWFnZSBvdXRwdXQ6IHdlIHdyaXRlIHRoZSBpbWFnZSBkYXRhIHRvIHRoZSBmaWxlIGdpdmVu
IG9uIHRoZQogICAgICAgICAvLyBjb21tYW5kIGxpbmUgKGZvciB0aGUgZHVtcCBwaXhlbHMgYXJn
dW1lbnQpLCBhbmQgdGhlIE1ENSBzdW0gdG8KICAgICAgICAgLy8gc3Rkb3V0LgpkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmggYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaAppbmRleCAwNzc4MTYzNmJhNzUwNzU5NTJi
MmZmMzhjNGM0NzNkZDc2YzRjYjVjLi44YWY2YjkzNmQzNzgzNmE1N2JhMWM0MzVkMjhmZDRiNGE2
OGM0OTQ4IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hl
bGwuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaApAQCAt
NjQsNyArNjQsNiBAQCBjbGFzcyBXZWJQZXJtaXNzaW9uczsKIAogc3RydWN0IFRlc3RQYXJhbXMg
ewogICAgIGJvb2wgZHVtcFRyZWU7Ci0gICAgYm9vbCBkdW1wUGl4ZWxzOwogICAgIGJvb2wgZGVi
dWdSZW5kZXJUcmVlOwogICAgIGJvb2wgZGVidWdMYXllclRyZWU7CiAgICAgYm9vbCBwcmludFNl
cGFyYXRvcnM7CkBAIC03Myw3ICs3Miw2IEBAIHN0cnVjdCBUZXN0UGFyYW1zIHsKIAogICAgIFRl
c3RQYXJhbXMoKQogICAgICAgICA6IGR1bXBUcmVlKHRydWUpCi0gICAgICAgICwgZHVtcFBpeGVs
cyhmYWxzZSkKICAgICAgICAgLCBkZWJ1Z1JlbmRlclRyZWUoZmFsc2UpCiAgICAgICAgICwgZGVi
dWdMYXllclRyZWUoZmFsc2UpCiAgICAgICAgICwgcHJpbnRTZXBhcmF0b3JzKGZhbHNlKSB7IH0K
QEAgLTEwNCw3ICsxMDIsNyBAQCBwdWJsaWM6CiAgICAgV2ViUGVybWlzc2lvbnMqIHdlYlBlcm1p
c3Npb25zKCkgeyByZXR1cm4gbV93ZWJQZXJtaXNzaW9ucy5nZXQoKTsgfQogCiAgICAgdm9pZCBi
aW5kSlNPYmplY3RzVG9XaW5kb3coV2ViS2l0OjpXZWJGcmFtZSopOwotICAgIHZvaWQgcnVuRmls
ZVRlc3QoY29uc3QgVGVzdFBhcmFtcyYpOworICAgIHZvaWQgcnVuRmlsZVRlc3QoY29uc3QgVGVz
dFBhcmFtcyYsIGJvb2wgc2hvdWxkRHVtcFBpeGVsVGVzdHMpOwogICAgIHZvaWQgY2FsbEpTR0Mo
KTsKICAgICB2b2lkIHJlc2V0VGVzdENvbnRyb2xsZXIoKTsKICAgICB2b2lkIHdhaXRUZXN0Rmlu
aXNoZWQoKTsKQEAgLTIyNiw2ICsyMjQsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBUZXN0
UGFyYW1zIG1fcGFyYW1zOworICAgIGJvb2wgbV9kdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3Q7CiAg
ICAgaW50IG1fdGltZW91dDsgLy8gdGltZW91dCB2YWx1ZSBpbiBtaWxsaXNlY29uZAogICAgIGJv
b2wgbV9hbGxvd0V4dGVybmFsUGFnZXM7CiAgICAgYm9vbCBtX2FjY2VsZXJhdGVkQ29tcG9zaXRp
bmdGb3JWaWRlb0VuYWJsZWQ7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwv
RHVtcFJlbmRlclRyZWUuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJU
cmVlLmNwcAppbmRleCBjMmM5ZDcxYzBjNTE1Y2IwOGNkNDEyZDQyYWRkMGQxMDVjYTk3NTljLi45
YzFhZjA0Zjg1N2NiNzdjYzFhMGRlMGQxMGY4ZDJkNWMxNmM4Yzc0IDEwMDY0NAotLS0gYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWUuY3BwCisrKyBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZS5jcHAKQEAgLTY0LDcgKzY0LDcgQEAgZXh0ZXJu
IEV3a19IaXN0b3J5X0l0ZW0qIHByZXZUZXN0QkZJdGVtOwogUmVmUHRyPExheW91dFRlc3RDb250
cm9sbGVyPiBnTGF5b3V0VGVzdENvbnRyb2xsZXI7CiB2b2xhdGlsZSBib29sIGRvbmUgPSBmYWxz
ZTsKIAotc3RhdGljIGludCBkdW1wUGl4ZWxzID0gZmFsc2U7CitzdGF0aWMgYm9vbCBkdW1wUGl4
ZWxzRm9yQ3VycmVudFRlc3RGb3JDdXJyZW50VGVzdDsKIHN0YXRpYyBpbnQgZHVtcFRyZWUgPSB0
cnVlOwogc3RhdGljIGludCBwcmludFNlcGFyYXRvcnMgPSB0cnVlOwogc3RhdGljIGludCB1c2VY
MTFXaW5kb3cgPSBmYWxzZTsKQEAgLTE5Miw3ICsxOTIsNiBAQCBzdGF0aWMgYm9vbCBwYXJzZUNv
bW1hbmRMaW5lT3B0aW9ucyhpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7CiAgICAgc3RhdGljIGNv
bnN0IG9wdGlvbiBvcHRpb25zW10gPSB7CiAgICAgICAgIHsibm90cmVlIiwgbm9fYXJndW1lbnQs
ICZkdW1wVHJlZSwgZmFsc2V9LAotICAgICAgICB7InBpeGVsLXRlc3RzIiwgbm9fYXJndW1lbnQs
ICZkdW1wUGl4ZWxzLCB0cnVlfSwKICAgICAgICAgeyJ0cmVlIiwgbm9fYXJndW1lbnQsICZkdW1w
VHJlZSwgdHJ1ZX0sCiAgICAgICAgIHsiZ3VpIiwgbm9fYXJndW1lbnQsICZ1c2VYMTFXaW5kb3cs
IHRydWV9LAogICAgICAgICB7MCwgMCwgMCwgMH0KQEAgLTIzMCwxMCArMjI5LDI2IEBAIHN0YXRp
YyBTdHJpbmcgZ2V0RmluYWxUZXN0VVJMKGNvbnN0IFN0cmluZyYgdGVzdFVSTCkKICAgICByZXR1
cm4gdGVzdFVSTDsKIH0KIAotc3RhdGljIFN0cmluZyBnZXRFeHBlY3RlZFBpeGVsSGFzaChjb25z
dCBTdHJpbmcmIHRlc3RVUkwpCitzdGF0aWMgYm9vbCBnZXRFeHBlY3RlZFBpeGVsSGFzaChjb25z
dCBTdHJpbmcmIHRlc3RVUkwsIFN0cmluZyYgcGl4ZWxIYXNoT3V0KQogewotICAgIGNvbnN0IHNp
emVfdCBoYXNoU2VwYXJhdG9yUG9zID0gdGVzdFVSTC5maW5kKCInIik7Ci0gICAgcmV0dXJuICho
YXNoU2VwYXJhdG9yUG9zICE9IG5vdEZvdW5kKSA/IHRlc3RVUkwuc3Vic3RyaW5nKGhhc2hTZXBh
cmF0b3JQb3MgKyAxKSA6IFN0cmluZygpOworICAgIEFTU0VSVF9BUkcocGl4ZWxIYXNoT3V0LCBw
aXhlbEhhc2hPdXQuaXNOdWxsKCkpOworCisgICAgc2l6ZV90IHNlcGFyYXRvclBvcyA9IHRlc3RV
UkwuZmluZCgiJyIpOworICAgIGlmIChzZXBhcmF0b3JQb3MgPT0gbm90Rm91bmQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IFN0cmluZyBleHBlY3RlZFBpeGVsVGVzdEFyZygi
LS1waXhlbC10ZXN0IikKKyAgICBTdHJpbmcgYXJnVGVzdCA9IHRlc3RVUkwuc3Vic3RyaW5nKHNl
cGFyYXRvclBvcyArIDEsIGV4cGVjdGVkUGl4ZWxUZXN0QXJnLmxlbmd0aCgpKTsKKyAgICBpZiAo
YXJnVGVzdCAhPSBleHBlY3RlZFBpeGVsVGVzdEFyZykgeworICAgICAgICBGQVRBTCgidW5leHBl
Y3RlZCBhcmd1bWVudDogJXNcbiIsIGFyZ1Rlc3QuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBl
eGl0KDEpOworICAgIH0KKworICAgIHNlcGFyYXRvclBvcyA9IHRlc3RVcmwuZmluZCgiJyIsIHNl
cGFyYXRvclBvcyArIDEpOworICAgIGlmIChzZXBhcmF0b3JQb3MgIT0gbm90Rm91bmQpOworICAg
ICAgICBwaXhlbEhhc2hPdXQgPSB0ZXN0VVJMLnN1YnN0cmluZyhzZXBhcmF0b3JQb3MgKyAxKTsK
KworICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNHbG9iYWxIaXN0
b3J5VGVzdChjb25zdCBTdHJpbmcmIGNUZXN0UGF0aE9yVVJMKQpAQCAtMjczLDcgKzI4OCw4IEBA
IHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3QgY2hhciogY1Rlc3RQYXRoT3JVUkwpCiAgICAgQVNT
RVJUKCF0ZXN0UGF0aE9yVVJMLmlzRW1wdHkoKSk7CiAKICAgICBjb25zdCBTdHJpbmcgdGVzdFVS
TCA9IGdldEZpbmFsVGVzdFVSTCh0ZXN0UGF0aE9yVVJMKTsKLSAgICBjb25zdCBTdHJpbmcgZXhw
ZWN0ZWRQaXhlbEhhc2ggPSBnZXRFeHBlY3RlZFBpeGVsSGFzaCh0ZXN0UGF0aE9yVVJMKTsKKyAg
ICBjb25zdCBTdHJpbmcgZXhwZWN0ZWRQaXhlbEhhc2g7CisgICAgZHVtcFBpeGVsc0ZvckN1cnJl
bnRUZXN0ID0gZ2V0RXhwZWN0ZWRQaXhlbEhhc2godGVzdFBhdGhPclVSTCwgZXhwZWN0ZWRQaXhl
bEhhc2gpOwogCiAgICAgYnJvd3Nlci0+cmVzZXREZWZhdWx0c1RvQ29uc2lzdGVudFZhbHVlcygp
OwogICAgIGNyZWF0ZUxheW91dFRlc3RDb250cm9sbGVyKHRlc3RVUkwsIGV4cGVjdGVkUGl4ZWxI
YXNoKTsKQEAgLTM1MSw3ICszNjcsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGREdW1wRnJhbWVTY3Jv
bGxQb3NpdGlvbigpCiAKIHN0YXRpYyBib29sIHNob3VsZER1bXBQaXhlbHNBbmRDb21wYXJlV2l0
aEV4cGVjdGVkKCkKIHsKLSAgICByZXR1cm4gZHVtcFBpeGVscyAmJiBnTGF5b3V0VGVzdENvbnRy
b2xsZXItPmdlbmVyYXRlUGl4ZWxSZXN1bHRzKCkgJiYgIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+
ZHVtcERPTUFzV2ViQXJjaGl2ZSgpICYmICFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBTb3Vy
Y2VBc1dlYkFyY2hpdmUoKTsKKyAgICByZXR1cm4gZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ICYm
IGdMYXlvdXRUZXN0Q29udHJvbGxlci0+Z2VuZXJhdGVQaXhlbFJlc3VsdHMoKSAmJiAhZ0xheW91
dFRlc3RDb250cm9sbGVyLT5kdW1wRE9NQXNXZWJBcmNoaXZlKCkgJiYgIWdMYXlvdXRUZXN0Q29u
dHJvbGxlci0+ZHVtcFNvdXJjZUFzV2ViQXJjaGl2ZSgpOwogfQogCiBzdGF0aWMgYm9vbCBzaG91
bGREdW1wQmFja0ZvcndhcmRMaXN0KCkKQEAgLTQ1OCw3ICs0NzQsNyBAQCBpbnQgbWFpbihpbnQg
YXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgIHByaW50U2VwYXJhdG9ycyA9IHRydWU7CiAgICAg
ICAgIHJ1blRlc3RpbmdTZXJ2ZXJMb29wKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnRT
ZXBhcmF0b3JzID0gKG9wdGluZCA8IGFyZ2MgLSAxIHx8IChkdW1wUGl4ZWxzICYmIGR1bXBUcmVl
KSk7CisgICAgICAgIHByaW50U2VwYXJhdG9ycyA9IChvcHRpbmQgPCBhcmdjIC0gMSB8fCAoZHVt
cFBpeGVsc0ZvckN1cnJlbnRUZXN0ICYmIGR1bXBUcmVlKSk7CiAgICAgICAgIGZvciAoaW50IGkg
PSBvcHRpbmQ7IGkgIT0gYXJnYzsgKytpKQogICAgICAgICAgICAgcnVuVGVzdChhcmd2W2ldKTsK
ICAgICB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRy
ZWUuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcAppbmRl
eCA1N2NkMDU5MTdlODIyNTU4YjQ4Mzc2ZTAxMDJkODAwYTZiY2ZjY2RhLi5hMzA2NjliYmRkMjJi
ZTZiNDFmN2Y0M2IwZDcyYTE5NGYyNzQ4YzJjIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0
ay9EdW1wUmVuZGVyVHJlZS5jcHAKQEAgLTczLDcgKzczLDcgQEAgZXh0ZXJuIGdjaGFyKiB3ZWJr
aXRfd2ViX2ZyYW1lX2dldF9yZXNwb25zZV9taW1lX3R5cGUoV2ViS2l0V2ViRnJhbWUqIGZyYW1l
KTsKIAogdm9sYXRpbGUgYm9vbCBkb25lOwogc3RhdGljIGJvb2wgcHJpbnRTZXBhcmF0b3JzOwot
c3RhdGljIGludCBkdW1wUGl4ZWxzOworc3RhdGljIGJvb2wgZHVtcFBpeGVsc0ZvckN1cnJlbnRU
ZXN0Owogc3RhdGljIGludCBkdW1wVHJlZSA9IDE7CiBzdGF0aWMgaW50IHVzZVRpbWVvdXRXYXRj
aGRvZyA9IDE7CiAKQEAgLTU0NCw3ICs1NDQsNiBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplR2xv
YmFsc0Zyb21Db21tYW5kTGluZU9wdGlvbnMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKICAg
ICBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKICAgICAgICAgeyJub3RyZWUiLCBub19hcmd1
bWVudCwgJmR1bXBUcmVlLCBmYWxzZX0sCi0gICAgICAgIHsicGl4ZWwtdGVzdHMiLCBub19hcmd1
bWVudCwgJmR1bXBQaXhlbHMsIHRydWV9LAogICAgICAgICB7InRyZWUiLCBub19hcmd1bWVudCwg
JmR1bXBUcmVlLCB0cnVlfSwKICAgICAgICAgeyJuby10aW1lb3V0Iiwgbm9fYXJndW1lbnQsICZ1
c2VUaW1lb3V0V2F0Y2hkb2csIGZhbHNlfSwKICAgICAgICAge05VTEwsIDAsIE5VTEwsIDB9CkBA
IC02MjQsNyArNjIzLDcgQEAgdm9pZCBkdW1wKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGlm
IChkdW1wUGl4ZWxzCisgICAgaWYgKGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCkKICAgICAgJiYg
Z0xheW91dFRlc3RDb250cm9sbGVyLT5nZW5lcmF0ZVBpeGVsUmVzdWx0cygpCiAgICAgICYmICFn
TGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBET01Bc1dlYkFyY2hpdmUoKQogICAgICAmJiAhZ0xh
eW91dFRlc3RDb250cm9sbGVyLT5kdW1wU291cmNlQXNXZWJBcmNoaXZlKCkpIHsKQEAgLTY5MSwx
MyArNjkwLDI1IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiB0ZXN0UGF0aE9y
VVJMKQogewogICAgIEFTU0VSVCghdGVzdFBhdGhPclVSTC5lbXB0eSgpKTsKIAotICAgIC8vIExv
b2sgZm9yICInIiBhcyBhIHNlcGFyYXRvciBiZXR3ZWVuIHRoZSBwYXRoIG9yIFVSTCwgYW5kIHRo
ZSBwaXhlbCBkdW1wIGhhc2ggdGhhdCBmb2xsb3dzLgotICAgIHN0cmluZyB0ZXN0VVJMKHRlc3RQ
YXRoT3JVUkwpOworICAgIC8vIExvb2sgZm9yICInIiBhcyBhIHNlcGFyYXRvciBiZXR3ZWVuIGFy
Z3VtZW50cy4KKyAgICBzdHJpbmcgY29tbWFuZCA9IHRlc3RQYXRoT3JVUkw7CisgICAgc3RyaW5n
IHBhdGhPclVSTCA9IHRlc3RQYXRoT3JVUkw7CisgICAgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0
ID0gZmFsc2U7CiAgICAgc3RyaW5nIGV4cGVjdGVkUGl4ZWxIYXNoOwotICAgIHNpemVfdCBzZXBh
cmF0b3JQb3MgPSB0ZXN0VVJMLmZpbmQoIiciKTsKLSAgICBpZiAoc2VwYXJhdG9yUG9zICE9IHN0
cmluZzo6bnBvcykgewotICAgICAgICB0ZXN0VVJMID0gc3RyaW5nKHRlc3RQYXRoT3JVUkwsIDAs
IHNlcGFyYXRvclBvcyk7Ci0gICAgICAgIGV4cGVjdGVkUGl4ZWxIYXNoID0gc3RyaW5nKHRlc3RQ
YXRoT3JVUkwsIHNlcGFyYXRvclBvcyArIDEpOworICAgIHNpemVfdCBmaXJzdFNlcGFyYXRvclBv
cyA9IGNvbW1hbmQuZmluZF9maXJzdF9vZignXCcnKTsKKyAgICBpZiAoZmlyc3RTZXBhcmF0b3JQ
b3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgZXhw
ZWN0ZWRQaXhlbFRlc3RBcmcoIi0tcGl4ZWwtdGVzdCIpOworICAgICAgICBzdGQ6OnN0cmluZyBh
cmdUZXN0ID0gc3RkOjpzdHJpbmcoY29tbWFuZCwgZmlyc3RTZXBhcmF0b3JQb3MgKyAxLCBleHBl
Y3RlZFBpeGVsVGVzdEFyZy5zaXplKCkpOworICAgICAgICBpZiAoYXJnVGVzdCAhPSBleHBlY3Rl
ZFBpeGVsVGVzdEFyZykgeworICAgICAgICAgICAgRkFUQUwoInVuZXhwZWN0ZWQgYXJndW1lbnQ6
ICVzXG4iLCBhcmdUZXN0LmNfc3RyKCkpCisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9
CisKKyAgICAgICAgdGVzdFVSTCA9IHN0ZDo6c3RyaW5nKGNvbW1hbmQsIDAsIGZpcnN0U2VwYXJh
dG9yUG9zKTsKKyAgICAgICAgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gdHJ1ZTsKKyAgICAg
ICAgc2l6ZV90IHNlY29uZFNlcGFyYXRvclBvcyA9IGNvbW1hbmQuZmluZF9maXJzdF9vZignXCcn
LCBmaXJzdFNlcGFyYXRvclBvcyArIDEpOworICAgICAgICBpZiAoc2Vjb25kU2VwYXJhdG9yUG9z
ICE9IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgICAgICAgICAgZXhwZWN0ZWRQaXhlbEhhc2ggPSBz
dGQ6OnN0cmluZyhjb21tYW5kLCBzZWNvbmRTZXBhcmF0b3JQb3MgKyAxKTsKICAgICB9CiAKICAg
ICAvLyBDb252ZXJ0IHRoZSBwYXRoIGludG8gYSBmdWxsIGZpbGUgVVJMIGlmIGl0IGRvZXMgbm90
IGxvb2sKQEAgLTE0NDcsNyArMTQ1OCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2
W10pCiAgICAgICAgIHByaW50U2VwYXJhdG9ycyA9IHRydWU7CiAgICAgICAgIHJ1blRlc3RpbmdT
ZXJ2ZXJMb29wKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnRTZXBhcmF0b3JzID0gKG9w
dGluZCA8IGFyZ2MtMSB8fCAoZHVtcFBpeGVscyAmJiBkdW1wVHJlZSkpOworICAgICAgICBwcmlu
dFNlcGFyYXRvcnMgPSAob3B0aW5kIDwgYXJnYy0xIHx8IChkdW1wUGl4ZWxzRm9yQ3VycmVudFRl
c3QgJiYgZHVtcFRyZWUpKTsKICAgICAgICAgZm9yIChpbnQgaSA9IG9wdGluZDsgaSAhPSBhcmdj
OyArK2kpCiAgICAgICAgICAgICBydW5UZXN0KGFyZ3ZbaV0pOwogICAgIH0KZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbSBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQppbmRleCBhYmJhNTM1ZWRkYzg4YTM5NDkw
Mjk0ZmQ0NTFhMzkxOTY4ZmNjM2QxLi4xNTI5MThiZTFjYTQzZmNjNGRhYzY3ZTM4MGI4M2U5MjNl
YTI1OTE1IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRy
ZWUubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCkBA
IC0xNDAsNyArMTQwLDcgQEAgc3RhdGljIEhpc3RvcnlEZWxlZ2F0ZSAqaGlzdG9yeURlbGVnYXRl
OwogUG9saWN5RGVsZWdhdGUgKnBvbGljeURlbGVnYXRlOwogU3RvcmFnZVRyYWNrZXJEZWxlZ2F0
ZSAqc3RvcmFnZURlbGVnYXRlOwogCi1zdGF0aWMgaW50IGR1bXBQaXhlbHM7CitzdGF0aWMgYm9v
bCBkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3Q7CiBzdGF0aWMgaW50IHRocmVhZGVkOwogc3RhdGlj
IGludCBkdW1wVHJlZSA9IFlFUzsKIHN0YXRpYyBpbnQgdXNlVGltZW91dFdhdGNoZG9nID0gWUVT
OwpAQCAtNzgwLDcgKzc4MCw2IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVHbG9iYWxzRnJvbUNv
bW1hbmRMaW5lT3B0aW9ucyhpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdCiB7CiAgICAgc3Ry
dWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CiAgICAgICAgIHsibm90cmVlIiwgbm9fYXJndW1lbnQs
ICZkdW1wVHJlZSwgTk99LAotICAgICAgICB7InBpeGVsLXRlc3RzIiwgbm9fYXJndW1lbnQsICZk
dW1wUGl4ZWxzLCBZRVN9LAogICAgICAgICB7InRyZWUiLCBub19hcmd1bWVudCwgJmR1bXBUcmVl
LCBZRVN9LAogICAgICAgICB7InRocmVhZGVkIiwgbm9fYXJndW1lbnQsICZ0aHJlYWRlZCwgWUVT
fSwKICAgICAgICAgeyJjb21wbGV4LXRleHQiLCBub19hcmd1bWVudCwgJmZvcmNlQ29tcGxleFRl
eHQsIFlFU30sCkBAIC04NDksNyArODQ4LDcgQEAgdm9pZCBkdW1wUmVuZGVyVHJlZShpbnQgYXJn
YywgY29uc3QgY2hhciAqYXJndltdKQogICAgIGluaXRpYWxpemVHbG9iYWxzRnJvbUNvbW1hbmRM
aW5lT3B0aW9ucyhhcmdjLCBhcmd2KTsKICAgICBwcmVwYXJlQ29uc2lzdGVudFRlc3RpbmdFbnZp
cm9ubWVudCgpOwogICAgIGFkZFRlc3RQbHVnaW5zVG9QbHVnaW5TZWFyY2hQYXRoKGFyZ3ZbMF0p
OwotICAgIGlmIChkdW1wUGl4ZWxzKQorICAgIGlmIChkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3Qp
CiAgICAgICAgIGluc3RhbGxTaWduYWxIYW5kbGVycygpOwogCiAgICAgaWYgKGZvcmNlQ29tcGxl
eFRleHQpCkBAIC04NzQsNyArODczLDcgQEAgdm9pZCBkdW1wUmVuZGVyVHJlZShpbnQgYXJnYywg
Y29uc3QgY2hhciAqYXJndltdKQogICAgICAgICBwcmludFNlcGFyYXRvcnMgPSBZRVM7CiAgICAg
ICAgIHJ1blRlc3RpbmdTZXJ2ZXJMb29wKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnRT
ZXBhcmF0b3JzID0gKG9wdGluZCA8IGFyZ2MtMSB8fCAoZHVtcFBpeGVscyAmJiBkdW1wVHJlZSkp
OworICAgICAgICBwcmludFNlcGFyYXRvcnMgPSAob3B0aW5kIDwgYXJnYyAtIDEgfHwgKGR1bXBQ
aXhlbHNGb3JDdXJyZW50VGVzdCAmJiBkdW1wVHJlZSk7CiAgICAgICAgIGZvciAoaW50IGkgPSBv
cHRpbmQ7IGkgIT0gYXJnYzsgKytpKQogICAgICAgICAgICAgcnVuVGVzdChhcmd2W2ldKTsKICAg
ICB9CkBAIC0xMTk1LDcgKzExOTQsNyBAQCB2b2lkIGR1bXAoKQogICAgICAgICB9ICAgICAgICAg
ICAgCiAgICAgfQogCi0gICAgaWYgKGR1bXBQaXhlbHMgJiYgZ0xheW91dFRlc3RDb250cm9sbGVy
LT5nZW5lcmF0ZVBpeGVsUmVzdWx0cygpKQorICAgIGlmIChkdW1wUGl4ZWxzRm9yQ3VycmVudFRl
c3QgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5nZW5lcmF0ZVBpeGVsUmVzdWx0cygpKQogICAg
ICAgICAvLyBGSVhNRTogd2hlbiBpc1ByaW50aW5nIGlzIHNldCwgZHVtcCB0aGUgaW1hZ2Ugd2l0
aCBwYWdlIHNlcGFyYXRvcnMuCiAgICAgICAgIGR1bXBXZWJWaWV3QXNQaXhlbHNBbmRDb21wYXJl
V2l0aEV4cGVjdGVkKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZXhwZWN0ZWRQaXhlbEhhc2goKSk7
CiAKQEAgLTEyNzksMTUgKzEyNzgsMjYgQEAgc3RhdGljIHZvaWQgcmVzZXRXZWJWaWV3VG9Db25z
aXN0ZW50U3RhdGVCZWZvcmVUZXN0aW5nKCkKIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3Ry
aW5nJiB0ZXN0UGF0aE9yVVJMKQogewogICAgIEFTU0VSVCghdGVzdFBhdGhPclVSTC5lbXB0eSgp
KTsKLSAgICAKLSAgICAvLyBMb29rIGZvciAiJyIgYXMgYSBzZXBhcmF0b3IgYmV0d2VlbiB0aGUg
cGF0aCBvciBVUkwsIGFuZCB0aGUgcGl4ZWwgZHVtcCBoYXNoIHRoYXQgZm9sbG93cy4KLSAgICBz
dHJpbmcgcGF0aE9yVVJMKHRlc3RQYXRoT3JVUkwpOworCisgICAgLy8gTG9vayBmb3IgIiciIGFz
IGEgc2VwYXJhdG9yIGJldHdlZW4gYXJndW1lbnRzLgorICAgIHN0cmluZyBjb21tYW5kID0gdGVz
dFBhdGhPclVSTDsKKyAgICBzdHJpbmcgcGF0aE9yVVJMID0gdGVzdFBhdGhPclVSTDsKKyAgICBk
dW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgPSBmYWxzZTsKICAgICBzdHJpbmcgZXhwZWN0ZWRQaXhl
bEhhc2g7Ci0gICAgCi0gICAgc2l6ZV90IHNlcGFyYXRvclBvcyA9IHBhdGhPclVSTC5maW5kKCIn
Iik7Ci0gICAgaWYgKHNlcGFyYXRvclBvcyAhPSBzdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgcGF0
aE9yVVJMID0gc3RyaW5nKHRlc3RQYXRoT3JVUkwsIDAsIHNlcGFyYXRvclBvcyk7Ci0gICAgICAg
IGV4cGVjdGVkUGl4ZWxIYXNoID0gc3RyaW5nKHRlc3RQYXRoT3JVUkwsIHNlcGFyYXRvclBvcyAr
IDEpOworICAgIHNpemVfdCBmaXJzdFNlcGFyYXRvclBvcyA9IGNvbW1hbmQuZmluZF9maXJzdF9v
ZignXCcnKTsKKyAgICBpZiAoZmlyc3RTZXBhcmF0b3JQb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3Mp
IHsKKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgZXhwZWN0ZWRQaXhlbFRlc3RBcmcoIi0tcGl4
ZWwtdGVzdCIpOworICAgICAgICBzdGQ6OnN0cmluZyBhcmdUZXN0ID0gc3RkOjpzdHJpbmcoY29t
bWFuZCwgZmlyc3RTZXBhcmF0b3JQb3MgKyAxLCBleHBlY3RlZFBpeGVsVGVzdEFyZy5zaXplKCkp
OworICAgICAgICBpZiAoYXJnVGVzdCAhPSBleHBlY3RlZFBpeGVsVGVzdEFyZykgeworICAgICAg
ICAgICAgRkFUQUwoInVuZXhwZWN0ZWQgYXJndW1lbnQ6ICVzXG4iLCBhcmdUZXN0LmNfc3RyKCkp
CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisKKyAgICAgICAgcGF0aE9yVVJMID0g
c3RkOjpzdHJpbmcoY29tbWFuZCwgMCwgZmlyc3RTZXBhcmF0b3JQb3MpOworICAgICAgICBkdW1w
UGl4ZWxzRm9yQ3VycmVudFRlc3QgPSB0cnVlOworICAgICAgICBzaXplX3Qgc2Vjb25kU2VwYXJh
dG9yUG9zID0gY29tbWFuZC5maW5kX2ZpcnN0X29mKCdcJycsIGZpcnN0U2VwYXJhdG9yUG9zICsg
MSk7CisgICAgICAgIGlmIChzZWNvbmRTZXBhcmF0b3JQb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3Mp
CisgICAgICAgICAgICBleHBlY3RlZFBpeGVsSGFzaCA9IHN0ZDo6c3RyaW5nKGNvbW1hbmQsIHNl
Y29uZFNlcGFyYXRvclBvcyArIDEpOwogICAgIH0KIAogICAgIE5TU3RyaW5nICpwYXRoT3JVUkxT
dHJpbmcgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6cGF0aE9yVVJMLmNfc3RyKCld
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5j
cHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcAppbmRleCA4
MjEyYmYxZTdjNDM1MTI4MzIzOTRiNTYxZmU0NjU1OTRjODgxYzgwLi5kOTYyYmQ0ZmRiMjgxMzIw
OGI1ODM5MjkxYmI5MzFlNzdmOTExMjhjIDEwMDc1NQotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9E
dW1wUmVuZGVyVHJlZVF0LmNwcApAQCAtNjkyLDIzICs2OTIsMjIgQEAgdm9pZCBEdW1wUmVuZGVy
VHJlZTo6cHJvY2Vzc0xpbmUoY29uc3QgUVN0cmluZyAmaW5wdXQpCiB7CiAgICAgUVN0cmluZyBs
aW5lID0gaW5wdXQ7CiAKKyAgICAvLyBMb29rIGZvciAiJyIgYXMgYSBzZXBhcmF0b3IgYmV0d2Vl
biBhcmd1bWVudHMuCiAgICAgbV9kdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgPSBmYWxzZTsKICAg
ICBtX2V4cGVjdGVkSGFzaCA9IFFTdHJpbmcoKTsKLSAgICAvLyBzaW5nbGUgcXVvdGUgbWFya3Mg
dGhlIHBpeGVsIGR1bXAgaGFzaAogICAgIGludCBpbmRleE9mRmlyc3RTZXBhcmF0b3IgPSBsaW5l
LmluZGV4T2YoJ1wnJyk7Ci0gICAgaW50IGluZGV4T2ZTZWNvbmRTZXBhcmF0b3IgPSBsaW5lLmlu
ZGV4T2YoJ1wnJywgaW5kZXhPZkZpcnN0U2VwYXJhdG9yKTsKICAgICBpZiAoaW5kZXhPZkZpcnN0
U2VwYXJhdG9yID4gLTEpIHsKLSAgICAgICAgaW50IGluZGV4T2ZQaXhlbEhhc2ggPSBpbmRleE9m
Rmlyc3RTZXBhcmF0b3IgKyAxOwotCi0gICAgICAgIC8vIE5SV1QgcGFzc2VzIC0tcGl4ZWwtdGVz
dCBpZiB3ZSBzaG91bGQgZHVtcCBwaXhlbHMgZm9yIHRoZSB0ZXN0LgogICAgICAgICBjb25zdCBR
U3RyaW5nIGV4cGVjdGVkQXJnKFFMYXRpbjFTdHJpbmcoIi0tcGl4ZWwtdGVzdCIpKTsKICAgICAg
ICAgUVN0cmluZyBhcmdUZXN0ID0gbGluZS5taWQoaW5kZXhPZkZpcnN0U2VwYXJhdG9yICsgMSwg
ZXhwZWN0ZWRBcmcubGVuZ3RoKCkpOwotICAgICAgICBpZiAoYXJnVGVzdCA9PSBleHBlY3RlZEFy
ZykgewotICAgICAgICAgICAgbV9kdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgPSB0cnVlOwotICAg
ICAgICAgICAgaW5kZXhPZlBpeGVsSGFzaCA9IGluZGV4T2ZTZWNvbmRTZXBhcmF0b3IgPT0gLTEg
PyAtMSA6IGluZGV4T2ZTZWNvbmRTZXBhcmF0b3IgKyAxOworICAgICAgICBpZiAoYXJnVGVzdCAh
PSBleHBlY3RlZEFyZykgeworICAgICAgICAgICAgRkFUQUwoInVuZXhwZWN0ZWQgYXJndW1lbnQ6
ICVzXG4iLCBhcmdUZXN0LnRvTGF0aW4xKCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGV4aXQoMSk7
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGluZGV4T2ZQaXhlbEhhc2ggIT0gLTEgJiYgaW5kZXhP
ZlBpeGVsSGFzaCA8IGxpbmUuc2l6ZSgpKQotICAgICAgICAgICAgbV9leHBlY3RlZEhhc2ggPSBs
aW5lLm1pZChpbmRleE9mUGl4ZWxIYXNoKTsKKworICAgICAgICBtX2R1bXBQaXhlbHNGb3JDdXJy
ZW50VGVzdCA9IHRydWU7CisgICAgICAgIGludCBpbmRleE9mU2Vjb25kU2VwYXJhdG9yID0gbGlu
ZS5pbmRleE9mKCdcJycsIGluZGV4T2ZGaXJzdFNlcGFyYXRvcik7CisgICAgICAgIGlmIChpbmRl
eE9mU2Vjb25kU2VwYXJhdG9yICE9IC0xKQorICAgICAgICAgICAgbV9leHBlY3RlZEhhc2ggPSBs
aW5lLm1pZChpbmRleE9mU2Vjb25kU2VwYXJhdG9yICsgMSk7CiAgICAgICAgIGxpbmUucmVtb3Zl
KGluZGV4T2ZGaXJzdFNlcGFyYXRvciwgbGluZS5sZW5ndGgoKSk7CiAgICAgfQogCmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAppbmRleCBmNDAyYTAyY2EzNjJj
NTI3OWRlNWE1YzhjMWUwY2U5ZGYzNjJhYmFkLi4wZDJhYzQwNzExNDMwODNkMTUxN2M5N2I0ZTQ4
OThjM2Q0NzJjZTQ2IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJl
bmRlclRyZWUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJl
ZS5jcHAKQEAgLTgwLDcgKzgwLDcgQEAgc3RhdGljIExQQ1dTVFIgZm9udHNFbnZpcm9ubWVudFZh
cmlhYmxlID0gTCJXRUJLSVRfVEVTVEZPTlRTIjsKIGNvbnN0IExQQ1dTVFIga0R1bXBSZW5kZXJU
cmVlQ2xhc3NOYW1lID0gTCJEdW1wUmVuZGVyVHJlZVdpbmRvdyI7CiAKIHN0YXRpYyBib29sIGR1
bXBUcmVlID0gdHJ1ZTsKLXN0YXRpYyBib29sIGR1bXBQaXhlbHM7CitzdGF0aWMgYm9vbCBkdW1w
UGl4ZWxzRm9yQ3VycmVudFRlc3Q7CiBzdGF0aWMgYm9vbCBkdW1wQWxsUGl4ZWxzOwogc3RhdGlj
IGJvb2wgcHJpbnRTZXBhcmF0b3JzOwogc3RhdGljIGJvb2wgbGVha0NoZWNraW5nID0gZmFsc2U7
CkBAIC03NTksNyArNzU5LDcgQEAgdm9pZCBkdW1wKCkKICAgICAgICAgZmZsdXNoKHN0ZGVycik7
CiAgICAgfQogCi0gICAgaWYgKGR1bXBQaXhlbHMKKyAgICBpZiAoZHVtcFBpeGVsc0ZvckN1cnJl
bnRUZXN0CiAgICAgICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+Z2VuZXJhdGVQaXhlbFJlc3Vs
dHMoKQogICAgICAmJiAhZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRE9NQXNXZWJBcmNoaXZl
KCkKICAgICAgJiYgIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFNvdXJjZUFzV2ViQXJjaGl2
ZSgpKQpAQCAtOTUyLDE0ICs5NTIsMjUgQEAgc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJp
bmcmIHRlc3RQYXRoT3JVUkwpCiB7CiAgICAgc3RhdGljIEJTVFIgbWV0aG9kQlN0ciA9IFN5c0Fs
bG9jU3RyaW5nKFRFWFQoIkdFVCIpKTsKIAotICAgIC8vIExvb2sgZm9yICInIiBhcyBhIHNlcGFy
YXRvciBiZXR3ZWVuIHRoZSBwYXRoIG9yIFVSTCwgYW5kIHRoZSBwaXhlbCBkdW1wIGhhc2ggdGhh
dCBmb2xsb3dzLgotICAgIHN0cmluZyBwYXRoT3JVUkwodGVzdFBhdGhPclVSTCk7CisgICAgLy8g
TG9vayBmb3IgIiciIGFzIGEgc2VwYXJhdG9yIGJldHdlZW4gYXJndW1lbnRzLgorICAgIHN0cmlu
ZyBjb21tYW5kID0gdGVzdFBhdGhPclVSTAorICAgIHN0cmluZyBwYXRoT3JVUkwgPSB0ZXN0UGF0
aE9yVVJMOworICAgIGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCA9IGZhbHNlOwogICAgIHN0cmlu
ZyBleHBlY3RlZFBpeGVsSGFzaDsKLSAgICAKLSAgICBzaXplX3Qgc2VwYXJhdG9yUG9zID0gcGF0
aE9yVVJMLmZpbmQoIiciKTsKLSAgICBpZiAoc2VwYXJhdG9yUG9zICE9IHN0cmluZzo6bnBvcykg
ewotICAgICAgICBwYXRoT3JVUkwgPSBzdHJpbmcodGVzdFBhdGhPclVSTCwgMCwgc2VwYXJhdG9y
UG9zKTsKLSAgICAgICAgZXhwZWN0ZWRQaXhlbEhhc2ggPSBzdHJpbmcodGVzdFBhdGhPclVSTCwg
c2VwYXJhdG9yUG9zICsgMSk7CisgICAgc2l6ZV90IGZpcnN0U2VwYXJhdG9yUG9zID0gY29tbWFu
ZC5maW5kX2ZpcnN0X29mKCdcJycpOworICAgIGlmIChmaXJzdFNlcGFyYXRvclBvcyAhPSBzdGQ6
OnN0cmluZzo6bnBvcykgeworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBleHBlY3RlZFBpeGVs
VGVzdEFyZygiLS1waXhlbC10ZXN0Iik7CisgICAgICAgIHN0ZDo6c3RyaW5nIGFyZ1Rlc3QgPSBz
dGQ6OnN0cmluZyhjb21tYW5kLCBmaXJzdFNlcGFyYXRvclBvcyArIDEsIGV4cGVjdGVkUGl4ZWxU
ZXN0QXJnLnNpemUoKSk7CisgICAgICAgIGlmIChhcmdUZXN0ICE9IGV4cGVjdGVkUGl4ZWxUZXN0
QXJnKSB7CisgICAgICAgICAgICBGQVRBTCgidW5leHBlY3RlZCBhcmd1bWVudDogJXNcbiIsIGFy
Z1Rlc3QuY19zdHIoKSkKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKworICAgICAg
ICBwYXRoT3JVUkwgPSBzdGQ6OnN0cmluZyhjb21tYW5kLCAwLCBmaXJzdFNlcGFyYXRvclBvcyk7
CisgICAgICAgIGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCA9IHRydWU7CisgICAgICAgIHNpemVf
dCBzZWNvbmRTZXBhcmF0b3JQb3MgPSBjb21tYW5kLmZpbmRfZmlyc3Rfb2YoJ1wnJywgZmlyc3RT
ZXBhcmF0b3JQb3MgKyAxKTsKKyAgICAgICAgaWYgKHNlY29uZFNlcGFyYXRvclBvcyAhPSBzdGQ6
OnN0cmluZzo6bnBvcykKKyAgICAgICAgICAgIGV4cGVjdGVkUGl4ZWxIYXNoID0gc3RkOjpzdHJp
bmcoY29tbWFuZCwgc2Vjb25kU2VwYXJhdG9yUG9zICsgMSk7CiAgICAgfQogICAgIAogICAgIEJT
VFIgdXJsQlN0cjsKQEAgLTEzMzcsMTEgKzEzNDgsNiBAQCBleHRlcm4gIkMiIF9fZGVjbHNwZWMo
ZGxsZXhwb3J0KSBpbnQgV0lOQVBJIGRsbExhdW5jaGVyRW50cnlQb2ludChpbnQgYXJnYywgY29u
cwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIXN0cmlj
bXAoYXJndltpXSwgIi0tcGl4ZWwtdGVzdHMiKSkgewotICAgICAgICAgICAgZHVtcFBpeGVscyA9
IHRydWU7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCiAgICAgICAgIGlmICgh
c3RyaWNtcChhcmd2W2ldLCAiLS1jb21wbGV4LXRleHQiKSkgewogICAgICAgICAgICAgZm9yY2VD
b21wbGV4VGV4dCA9IHRydWU7CiAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL3d4L0R1bXBSZW5kZXJUcmVlV3guY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvd3gvRHVtcFJlbmRlclRyZWVXeC5jcHAKaW5kZXggMzFhZGQxMWEyZWI3NGQxZjRk
ODMyOTQ3OWY0MTlmMTA3ZmZiYTg4Zi4uNjdhNDNhN2JiY2JmZDVlMTJiMjA3NDcwZjE5YzdhYWFh
MzcyNGI1MiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvRHVtcFJlbmRlclRy
ZWVXeC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvRHVtcFJlbmRlclRyZWVXeC5j
cHAKQEAgLTUwLDcgKzUwLDcgQEAKIHZvbGF0aWxlIGJvb2wgZG9uZSA9IHRydWU7CiB2b2xhdGls
ZSBib29sIG5vdGlmaWVkID0gZmFsc2U7CiBzdGF0aWMgYm9vbCBwcmludFNlcGFyYXRvcnMgPSB0
cnVlOwotc3RhdGljIGludCBkdW1wUGl4ZWxzOworc3RhdGljIGludCBkdW1wUGl4ZWxzRm9yQ3Vy
cmVudFRlc3Q7CiBzdGF0aWMgaW50IGR1bXBUcmVlID0gMTsKIHRpbWVfdCBzdGFydFRpbWU7IC8v
IHRvIGRldGVjdCB0aW1lb3V0cyAvIGZhaWxlZCB0ZXN0cwogCkBAIC0yMDMsNyArMjAzLDcgQEAg
dm9pZCBkdW1wKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChkdW1wUGl4ZWxzCisgICAg
aWYgKGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdAogICAgICAgICAmJiBnTGF5b3V0VGVzdENvbnRy
b2xsZXItPmdlbmVyYXRlUGl4ZWxSZXN1bHRzKCkKICAgICAgICAgJiYgIWdMYXlvdXRUZXN0Q29u
dHJvbGxlci0+ZHVtcERPTUFzV2ViQXJjaGl2ZSgpCiAgICAgICAgICYmICFnTGF5b3V0VGVzdENv
bnRyb2xsZXItPmR1bXBTb3VyY2VBc1dlYkFyY2hpdmUoKSkgewpAQCAtMjIyLDE0ICsyMjIsMjYg
QEAgc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCB3eFN0cmluZyB0ZXN0UGF0aE9yVVJMKQogewog
ICAgIGRvbmUgPSBmYWxzZTsKICAgICB0aW1lKCZzdGFydFRpbWUpOwotICAgIHN0cmluZyBwYXRo
T3JVUkxTdHJpbmcodGVzdFBhdGhPclVSTC5jaGFyX3N0cigpKTsKLSAgICBzdHJpbmcgcGF0aE9y
VVJMKHBhdGhPclVSTFN0cmluZyk7CisKKyAgICAvLyBMb29rIGZvciAiJyIgYXMgYSBzZXBhcmF0
b3IgYmV0d2VlbiBhcmd1bWVudHMuCisgICAgc3RyaW5nIGNvbW1hbmQgPSB0ZXN0UGF0aE9yVVJM
OworICAgIHN0cmluZyBwYXRoT3JVUkwgPSB0ZXN0UGF0aE9yVVJMOworICAgIGR1bXBQaXhlbHNG
b3JDdXJyZW50VGVzdCA9IGZhbHNlOwogICAgIHN0cmluZyBleHBlY3RlZFBpeGVsSGFzaDsKKyAg
ICBzaXplX3QgZmlyc3RTZXBhcmF0b3JQb3MgPSBjb21tYW5kLmZpbmRfZmlyc3Rfb2YoJ1wnJyk7
CisgICAgaWYgKGZpcnN0U2VwYXJhdG9yUG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAg
ICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGV4cGVjdGVkUGl4ZWxUZXN0QXJnKCItLXBpeGVsLXRlc3Qi
KTsKKyAgICAgICAgc3RkOjpzdHJpbmcgYXJnVGVzdCA9IHN0ZDo6c3RyaW5nKGNvbW1hbmQsIGZp
cnN0U2VwYXJhdG9yUG9zICsgMSwgZXhwZWN0ZWRQaXhlbFRlc3RBcmcuc2l6ZSgpKTsKKyAgICAg
ICAgaWYgKGFyZ1Rlc3QgIT0gZXhwZWN0ZWRQaXhlbFRlc3RBcmcpIHsKKyAgICAgICAgICAgIEZB
VEFMKCJ1bmV4cGVjdGVkIGFyZ3VtZW50OiAlc1xuIiwgYXJnVGVzdC5jX3N0cigpKQorICAgICAg
ICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQogCi0gICAgc2l6ZV90IHNlcGFyYXRvclBvcyA9IHBh
dGhPclVSTC5maW5kKCInIik7Ci0gICAgaWYgKHNlcGFyYXRvclBvcyAhPSBzdHJpbmc6Om5wb3Mp
IHsKLSAgICAgICAgcGF0aE9yVVJMID0gc3RyaW5nKHBhdGhPclVSTFN0cmluZywgMCwgc2VwYXJh
dG9yUG9zKTsKLSAgICAgICAgZXhwZWN0ZWRQaXhlbEhhc2ggPSBzdHJpbmcocGF0aE9yVVJMU3Ry
aW5nLCBzZXBhcmF0b3JQb3MgKyAxKTsKKyAgICAgICAgcGF0aE9yVVJMID0gc3RkOjpzdHJpbmco
Y29tbWFuZCwgMCwgZmlyc3RTZXBhcmF0b3JQb3MpOworICAgICAgICBkdW1wUGl4ZWxzRm9yQ3Vy
cmVudFRlc3QgPSB0cnVlOworICAgICAgICBzaXplX3Qgc2Vjb25kU2VwYXJhdG9yUG9zID0gY29t
bWFuZC5maW5kX2ZpcnN0X29mKCdcJycsIGZpcnN0U2VwYXJhdG9yUG9zICsgMSk7CisgICAgICAg
IGlmIChzZWNvbmRTZXBhcmF0b3JQb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAgICAgICAg
ICBleHBlY3RlZFBpeGVsSGFzaCA9IHN0ZDo6c3RyaW5nKGNvbW1hbmQsIHNlY29uZFNlcGFyYXRv
clBvcyArIDEpOwogICAgIH0KICAgICAKICAgICAvLyBDVVJMIGlzbid0IGhhcHB5IGlmIHdlIGRv
bid0IGhhdmUgYSBwcm90b2NvbC4KQEAgLTI4MiwxMSArMjk0LDYgQEAgYm9vbCBNeUFwcDo6T25J
bml0KCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBpZiAoIW9wdGlvbi5DbXBOb0Nhc2UoX1QoIi0tcGl4ZWwtdGVzdHMiKSkpIHsKLSAgICAgICAg
ICAgIGR1bXBQaXhlbHMgPSB0cnVlOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0K
LSAgICAgICAgCiAgICAgICAgIGlmICghb3B0aW9uLkNtcE5vQ2FzZShfVCgiLS10cmVlIikpKSB7
CiAgICAgICAgICAgICBkdW1wVHJlZSA9IHRydWU7CiAgICAgICAgICAgICBjb250aW51ZTsKQEAg
LTMyMyw3ICszMzAsNyBAQCBib29sIE15QXBwOjpPbkluaXQoKQogICAgICAgICB9CiAgICAgCiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnRTZXBhcmF0b3JzID0gKG9wdGluZCA8IGFyZ2MtMSB8
fCAoZHVtcFBpeGVscyAmJiBkdW1wVHJlZSkpOworICAgICAgICBwcmludFNlcGFyYXRvcnMgPSAo
b3B0aW5kIDwgYXJnYyAtIDEgfHwgKGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCAmJiBkdW1wVHJl
ZSkpOwogICAgICAgICBmb3IgKGludCBpID0gb3B0aW5kOyBpICE9IGFyZ2M7ICsraSkgewogICAg
ICAgICAgICAgcnVuVGVzdCh3eFRoZUFwcC0+YXJndlsxXSk7CiAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvb2xkLXJ1bi13ZWJraXQtdGVzdHMgYi9Ub29scy9TY3JpcHRzL29s
ZC1ydW4td2Via2l0LXRlc3RzCmluZGV4IDA5NDQzYzg3YzAyZjFlOGNmNWJkZTZkMWIwNDVjNGRi
OWJhYjA4ODIuLjczYjUxYTQ1MjI5OTcwNDk0ZjA3N2JhMjZjZmU3OTVlY2IyZDI2ZTQgMTAwNzU1
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvb2xkLXJ1bi13ZWJraXQtdGVzdHMKKysrIGIvVG9vbHMvU2Ny
aXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0cwpAQCAtNzQ4LDEyICs3NDgsMTUgQEAgZm9yIG15ICR0
ZXN0IChAdGVzdHMpIHsKICAgICBwcmludCAkdGVzdHNfcnVuX2ZoICIkdGVzdFxuIjsKIAogICAg
ICMgVHJ5IHRvIHJlYWQgZXhwZWN0ZWQgaGFzaCBmaWxlIGZvciBwaXhlbCB0ZXN0cwotICAgIG15
ICRzdWZmaXhFeHBlY3RlZEhhc2ggPSAiIjsKLSAgICBpZiAoJHBpeGVsVGVzdHMgJiYgISRyZXNl
dFJlc3VsdHMpIHsKLSAgICAgICAgbXkgJGV4cGVjdGVkUGl4ZWxEaXIgPSBleHBlY3RlZERpcmVj
dG9yeUZvclRlc3QoJGJhc2UsIDAsICJwbmciKTsKLSAgICAgICAgaWYgKG15ICRleHBlY3RlZEhh
c2ggPSByZWFkQ2hlY2tzdW1Gcm9tUG5nKEZpbGU6OlNwZWMtPmNhdGZpbGUoJGV4cGVjdGVkUGl4
ZWxEaXIsICIkYmFzZS0kZXhwZWN0ZWRUYWcucG5nIikpKSB7Ci0gICAgICAgICAgICAjIEZvcm1h
dCBleHBlY3RlZCBoYXNoIGludG8gYSBzdWZmaXggc3RyaW5nIHRoYXQgaXMgYXBwZW5kZWQgdG8g
dGhlIHBhdGggLyBVUkwgcGFzc2VkIHRvIERSVC4KLSAgICAgICAgICAgICRzdWZmaXhFeHBlY3Rl
ZEhhc2ggPSAiJyRleHBlY3RlZEhhc2giOworICAgIG15ICRzdWZmaXhQaXhlbFRlc3QgPSAiIjsK
KyAgICBpZiAoJHBpeGVsVGVzdHMpIHsKKyAgICAgICAgJHN1ZmZpeFBpeGVsVGVzdCA9ICInLS1w
aXhlbC10ZXN0IjsKKyAgICAgICAgaWYgKCEkcmVzZXRSZXN1bHRzKSB7CisgICAgICAgICAgICBt
eSAkZXhwZWN0ZWRQaXhlbERpciA9IGV4cGVjdGVkRGlyZWN0b3J5Rm9yVGVzdCgkYmFzZSwgMCwg
InBuZyIpOworICAgICAgICAgICAgaWYgKG15ICRleHBlY3RlZEhhc2ggPSByZWFkQ2hlY2tzdW1G
cm9tUG5nKEZpbGU6OlNwZWMtPmNhdGZpbGUoJGV4cGVjdGVkUGl4ZWxEaXIsICIkYmFzZS0kZXhw
ZWN0ZWRUYWcucG5nIikpKSB7CisgICAgICAgICAgICAgICAgIyBGb3JtYXQgZXhwZWN0ZWQgaGFz
aCBpbnRvIGEgc3VmZml4IHN0cmluZyB0aGF0IGlzIGFwcGVuZGVkIHRvIHRoZSBwYXRoIC8gVVJM
IHBhc3NlZCB0byBEUlQuCisgICAgICAgICAgICAgICAgJHN1ZmZpeFBpeGVsVGVzdCA9ICInLS1w
aXhlbC10ZXN0JyRleHBlY3RlZEhhc2giOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQogCkBAIC03ODksMTEgKzc5MiwxMSBAQCBmb3IgbXkgJHRlc3QgKEB0ZXN0cykgewogICAgICAg
ICB9IGVsc2lmICgkdGVzdCAhfiAvXmh0dHBcL3Rlc3RzXC9sb2NhbFwvLyAmJiAkdGVzdCAhfiAv
Xmh0dHBcL3Rlc3RzXC9zc2xcLy8pIHsKICAgICAgICAgICAgIG15ICRwYXRoID0gY2Fub25wYXRo
KCR0ZXN0KTsKICAgICAgICAgICAgICRwYXRoID1+IHMvXmh0dHBcL3Rlc3RzXC8vLzsKLSAgICAg
ICAgICAgIHByaW50IE9VVCAiaHR0cDovLzEyNy4wLjAuMTokaHR0cGRQb3J0LyRwYXRoJHN1ZmZp
eEV4cGVjdGVkSGFzaFxuIjsKKyAgICAgICAgICAgIHByaW50IE9VVCAiaHR0cDovLzEyNy4wLjAu
MTokaHR0cGRQb3J0LyRwYXRoJHN1ZmZpeFBpeGVsVGVzdFxuIjsKICAgICAgICAgfSBlbHNpZiAo
JHRlc3QgPX4gL15odHRwXC90ZXN0c1wvc3NsXC8vKSB7CiAgICAgICAgICAgICBteSAkcGF0aCA9
IGNhbm9ucGF0aCgkdGVzdCk7CiAgICAgICAgICAgICAkcGF0aCA9fiBzL15odHRwXC90ZXN0c1wv
Ly87Ci0gICAgICAgICAgICBwcmludCBPVVQgImh0dHBzOi8vMTI3LjAuMC4xOiRodHRwZFNTTFBv
cnQvJHBhdGgkc3VmZml4RXhwZWN0ZWRIYXNoXG4iOworICAgICAgICAgICAgcHJpbnQgT1VUICJo
dHRwczovLzEyNy4wLjAuMTokaHR0cGRTU0xQb3J0LyRwYXRoJHN1ZmZpeFBpeGVsVGVzdFxuIjsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG15ICR0ZXN0UGF0aCA9ICIkdGVzdERpcmVj
dG9yeS8kdGVzdCI7CiAgICAgICAgICAgICBpZiAoaXNDeWd3aW4oKSkgewpAQCAtODAxLDcgKzgw
NCw3IEBAIGZvciBteSAkdGVzdCAoQHRlc3RzKSB7CiAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICR0ZXN0UGF0aCA9IGNhbm9ucGF0aCgkdGVzdFBhdGgpOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcHJpbnQgT1VUICIkdGVzdFBhdGgkc3VmZml4RXhwZWN0ZWRIYXNo
XG4iOworICAgICAgICAgICAgcHJpbnQgT1VUICIkdGVzdFBhdGgkc3VmZml4UGl4ZWxUZXN0XG4i
OwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgbXkgJHRlc3RQYXRoID0gIiR0ZXN0
RGlyZWN0b3J5LyR0ZXN0IjsKQEAgLTgxMCw3ICs4MTMsNyBAQCBmb3IgbXkgJHRlc3QgKEB0ZXN0
cykgewogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgJHRlc3RQYXRoID0gY2Fub25wYXRo
KCR0ZXN0UGF0aCk7CiAgICAgICAgIH0KLSAgICAgICAgcHJpbnQgT1VUICIkdGVzdFBhdGgkc3Vm
Zml4RXhwZWN0ZWRIYXNoXG4iIGlmIGRlZmluZWQgJHRlc3RQYXRoOworICAgICAgICBwcmludCBP
VVQgIiR0ZXN0UGF0aCRzdWZmaXhQaXhlbFRlc3RcbiIgaWYgZGVmaW5lZCAkdGVzdFBhdGg7CiAg
ICAgfQogCiAgICAgIyBEdW1wUmVuZGVyVHJlZSBpcyBleHBlY3RlZCB0byBkdW1wIHR3byAiYmxv
Y2tzIiB0byBzdGRvdXQgZm9yIGVhY2ggdGVzdC4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQppbmRleCBlZWRkMTlkYWQxODRmMzI4Zjg5ZjJl
NTQ0ZTcwM2NhNDk5OGQzODBmLi42NTU1YmMxYzkyYzg5Y2VlYmRiMDJjOTFiNTcwMzU5NjQ1MGIx
NTkxIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2Jhc2UucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9i
YXNlLnB5CkBAIC0xMjU2LDIxICsxMjU2LDkgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAg
ICAgICAgICAgIHJldHVybiBzdWl0ZS5hcmdzCiAgICAgICAgIHJldHVybiBbXQogCi0gICAgZGVm
IHN1cHBvcnRzX3N3aXRjaGluZ19waXhlbF90ZXN0c19wZXJfdGVzdChzZWxmKToKLSAgICAgICAg
aWYgc2VsZi5nZXRfb3B0aW9uKCd3ZWJraXRfdGVzdF9ydW5uZXInKToKLSAgICAgICAgICAgIHJl
dHVybiBUcnVlCi0gICAgICAgIHJldHVybiBzZWxmLl9zdXBwb3J0c19zd2l0Y2hpbmdfcGl4ZWxf
dGVzdHNfcGVyX3Rlc3QoKQotCi0gICAgZGVmIF9zdXBwb3J0c19zd2l0Y2hpbmdfcGl4ZWxfdGVz
dHNfcGVyX3Rlc3Qoc2VsZik6Ci0gICAgICAgICMgRklYTUU6IGFsbCBwb3J0cyBzaG91bGQgc3Vw
cG9ydCBpdC4KLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KICAgICBkZWYgc2hvdWxkX3J1bl9hc19w
aXhlbF90ZXN0KHNlbGYsIHRlc3RfaW5wdXQpOgogICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9u
cy5waXhlbF90ZXN0czoKICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBpZiBub3Qg
c2VsZi5zdXBwb3J0c19zd2l0Y2hpbmdfcGl4ZWxfdGVzdHNfcGVyX3Rlc3QoKToKLSAgICAgICAg
ICAgICMgQ2Fubm90IGRvIG1vcmUgZmlsdGVyaW5nIHdpdGhvdXQgdGhpcy4KLSAgICAgICAgICAg
IHJldHVybiBUcnVlCiAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdF9kaXJlY3Rv
cmllczoKICAgICAgICAgICAgIHJldHVybiBhbnkodGVzdF9pbnB1dC50ZXN0X25hbWUuc3RhcnRz
d2l0aChkaXJlY3RvcnkpIGZvciBkaXJlY3RvcnkgaW4gc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0
X2RpcmVjdG9yaWVzKQogICAgICAgICByZXR1cm4gc2VsZi5fc2hvdWxkX3J1bl9hc19waXhlbF90
ZXN0KHRlc3RfaW5wdXQpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2RyaXZlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvZHJpdmVyLnB5CmluZGV4IGZmYzFjMTk0NWQ2ODljY2RiMjBiNDllZmU3OGMwMWMw
OTEyMGQzMzguLjFjZTcxZGY0MjliNjMyZDJjMTk1MWE2ZTMwMWY0YmRhZjhmMGE5NjQgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5
CkBAIC0yOTgsOCArMjk4LDYgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAKICAgICAgICAgY21k
LmV4dGVuZChzZWxmLl9wb3J0LmdldF9vcHRpb24oJ2FkZGl0aW9uYWxfZHJ0X2ZsYWcnLCBbXSkp
CiAKLSAgICAgICAgaWYgcGl4ZWxfdGVzdHMgYW5kIG5vdCBzZWxmLl9wb3J0LnN1cHBvcnRzX3N3
aXRjaGluZ19waXhlbF90ZXN0c19wZXJfdGVzdCgpOgotICAgICAgICAgICAgY21kLmFwcGVuZCgn
LS1waXhlbC10ZXN0cycpCiAgICAgICAgIGNtZC5leHRlbmQocGVyX3Rlc3RfYXJncykKIAogICAg
ICAgICBjbWQuYXBwZW5kKCctJykKQEAgLTM0MSwxMCArMzM5LDcgQEAgY2xhc3MgRHJpdmVyKG9i
amVjdCk6CiAgICAgICAgIGFzc2VydCBub3QgZHJpdmVyX2lucHV0LmltYWdlX2hhc2ggb3IgZHJp
dmVyX2lucHV0LnNob3VsZF9ydW5fcGl4ZWxfdGVzdAogCiAgICAgICAgIGlmIGRyaXZlcl9pbnB1
dC5zaG91bGRfcnVuX3BpeGVsX3Rlc3Q6Ci0gICAgICAgICAgICBpZiBzZWxmLl9wb3J0LnN1cHBv
cnRzX3N3aXRjaGluZ19waXhlbF90ZXN0c19wZXJfdGVzdCgpOgotICAgICAgICAgICAgICAgICMg
V2UgZGlkIG5vdCBzdGFydCB0aGUgZHJpdmVyIHdpdGggLS1waXhlbC10ZXN0cywgaW5zdGVhZCB3
ZSBzcGVjaWZ5IGl0IHBlciB0ZXN0LgotICAgICAgICAgICAgICAgICMgIiciIGlzIHRoZSBzZXBh
cmF0b3Igb2YgY29tbWFuZCBmaWVsZHMuCi0gICAgICAgICAgICAgICAgY29tbWFuZCArPSAiJyIg
KyAnLS1waXhlbC10ZXN0JworICAgICAgICAgICAgY29tbWFuZCArPSAiJyIgKyAnLS1waXhlbC10
ZXN0JwogICAgICAgICBpZiBkcml2ZXJfaW5wdXQuaW1hZ2VfaGFzaDoKICAgICAgICAgICAgIGNv
bW1hbmQgKz0gIiciICsgZHJpdmVyX2lucHV0LmltYWdlX2hhc2gKICAgICAgICAgcmV0dXJuIGNv
bW1hbmQgKyAiXG4iCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L3F0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9xdC5weQppbmRleCBiMGQ2NDg1M2M2NTdiMTliZWJkZjljNWFjZGNhNmVlNjc5NjcyMzViLi4x
ZTA2NmU3ZmNlMzA0ZDMzN2NmOTBjM2Y5NzJjMmY2M2I2MjEwNGU2IDEwMDY0NAotLS0gYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3F0LnB5CisrKyBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcXQucHkKQEAgLTE4Niw5ICsxODYsNiBA
QCBjbGFzcyBRdFBvcnQoV2ViS2l0UG9ydCk6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAg
ICAgICAgcmV0dXJuIHJlc3VsdAogCi0gICAgZGVmIF9zdXBwb3J0c19zd2l0Y2hpbmdfcGl4ZWxf
dGVzdHNfcGVyX3Rlc3Qoc2VsZik6Ci0gICAgICAgIHJldHVybiBUcnVlCi0KICAgICBkZWYgX3No
b3VsZF9ydW5fYXNfcGl4ZWxfdGVzdChzZWxmLCB0ZXN0X2lucHV0KToKICAgICAgICAgcmV0dXJu
IGFueSh0ZXN0X2lucHV0LnRlc3RfbmFtZS5zdGFydHN3aXRoKGRpcmVjdG9yeSkKICAgICAgICAg
ICAgICAgICAgICBmb3IgZGlyZWN0b3J5IGluIFF0UG9ydC5fZGVmYXVsdF9waXhlbF90ZXN0X2Rp
cmVjdG9yaWVzKCkpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L3Rlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L3Rlc3QucHkKaW5kZXggNTcxNDY2MWZkMjAzNjc2ODM5ZDZjNzZmNDczNWJlYzgxMzJiODli
OC4uMGNkMTcxZjNiY2E2YWJlYmRiMjFiOThlMmE0NWMyMWExNGE5MDExMiAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5CisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQpAQCAtNTEzLDEw
ICs1MTMsNiBAQCBjbGFzcyBUZXN0UG9ydChQb3J0KToKICAgICAgICAgICAgIFZpcnR1YWxUZXN0
U3VpdGUoJ3ZpcnR1YWwvc2tpcHBlZCcsICdmYWlsdXJlcy9leHBlY3RlZCcsIFsnLS12aXJ0dWFs
LWFyZzInXSksCiAgICAgICAgIF0KIAotICAgIGRlZiBzdXBwb3J0c19zd2l0Y2hpbmdfcGl4ZWxf
dGVzdHNfcGVyX3Rlc3Qoc2VsZik6Ci0gICAgICAgICMgTGV0IGl0IHRydWUgc28gd2UgY2FuIHRl
c3QgdGhlIC0tcGl4ZWwtdGVzdC1kaXJlY3Rvcnkgb3B0aW9uLgotICAgICAgICByZXR1cm4gVHJ1
ZQotCiAKIGNsYXNzIFRlc3REcml2ZXIoRHJpdmVyKToKICAgICAiIiJUZXN0L0R1bW15IGltcGxl
bWVudGF0aW9uIG9mIHRoZSBEdW1wUmVuZGVyVHJlZSBpbnRlcmZhY2UuIiIiCmRpZmYgLS1naXQg
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IDkyMDBkMmMwMzQ1Y2EzYTMzMGI1
ZmIyMzkxM2I3MWQ0M2I0M2I1MzQuLmVjNGViNDE0M2QxMzA0ODY0YmQ2MmE1YzExZDk4YzYxNGIx
OWJhNzMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIu
Y3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCkBAIC02
Nyw4ICs2Nyw3IEBAIFRlc3RDb250cm9sbGVyJiBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkKIH0K
IAogVGVzdENvbnRyb2xsZXI6OlRlc3RDb250cm9sbGVyKGludCBhcmdjLCBjb25zdCBjaGFyKiBh
cmd2W10pCi0gICAgOiBtX2R1bXBQaXhlbHNGb3JBbGxUZXN0cyhmYWxzZSkKLSAgICAsIG1fdmVy
Ym9zZShmYWxzZSkKKyAgICA6IG1fdmVyYm9zZShmYWxzZSkKICAgICAsIG1fcHJpbnRTZXBhcmF0
b3JzKGZhbHNlKQogICAgICwgbV91c2luZ1NlcnZlck1vZGUoZmFsc2UpCiAgICAgLCBtX2djQmV0
d2VlblRlc3RzKGZhbHNlKQpAQCAtMjY3LDEwICsyNjYsNiBAQCB2b2lkIFRlc3RDb250cm9sbGVy
Ojppbml0aWFsaXplKGludCBhcmdjLCBjb25zdCBjaGFyKiBhcmd2W10pCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChhcmd1bWVudCA9PSAiLS1waXhlbC10
ZXN0cyIpIHsKLSAgICAgICAgICAgIG1fZHVtcFBpeGVsc0ZvckFsbFRlc3RzID0gdHJ1ZTsKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9CiAgICAgICAgIGlmIChhcmd1bWVudCA9PSAi
LS12ZXJib3NlIikgewogICAgICAgICAgICAgbV92ZXJib3NlID0gdHJ1ZTsKICAgICAgICAgICAg
IGNvbnRpbnVlOwpAQCAtNTE3LDMxICs1MTIsMzAgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cnVu
VGVzdChjb25zdCBjaGFyKiB0ZXN0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0g
ICAgYm9vbCBkdW1wUGl4ZWxzVGVzdCA9IG1fZHVtcFBpeGVsc0ZvckFsbFRlc3RzOworICAgIGJv
b2wgZHVtcFBpeGVscyA9IGZhbHNlOwogICAgIHN0ZDo6c3RyaW5nIGNvbW1hbmQodGVzdCk7CiAg
ICAgc3RkOjpzdHJpbmcgcGF0aE9yVVJMID0gY29tbWFuZDsKICAgICBzdGQ6OnN0cmluZyBleHBl
Y3RlZFBpeGVsSGFzaDsKICAgICBzaXplX3QgZmlyc3RTZXBhcmF0b3JQb3MgPSBjb21tYW5kLmZp
bmRfZmlyc3Rfb2YoJ1wnJyk7Ci0gICAgc2l6ZV90IHNlY29uZFNlcGFyYXRvclBvcyA9IGNvbW1h
bmQuZmluZF9maXJzdF9vZignXCcnLCBmaXJzdFNlcGFyYXRvclBvcyArIDEpOwogICAgIGlmIChm
aXJzdFNlcGFyYXRvclBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgICAgICBwYXRoT3JV
UkwgPSBzdGQ6OnN0cmluZyhjb21tYW5kLCAwLCBmaXJzdFNlcGFyYXRvclBvcyk7Ci0gICAgICAg
IHNpemVfdCBwaXhlbEhhc2hQb3MgPSBmaXJzdFNlcGFyYXRvclBvcyArIDE7Ci0KLSAgICAgICAg
Ly8gTlJXVCBwYXNzZXMgLS1waXhlbC10ZXN0IGlmIHdlIHNob3VsZCBkdW1wIHBpeGVscyBmb3Ig
dGhlIHRlc3QuCiAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGV4cGVjdGVkUGl4ZWxUZXN0QXJn
KCItLXBpeGVsLXRlc3QiKTsKICAgICAgICAgc3RkOjpzdHJpbmcgYXJnVGVzdCA9IHN0ZDo6c3Ry
aW5nKGNvbW1hbmQsIGZpcnN0U2VwYXJhdG9yUG9zICsgMSwgZXhwZWN0ZWRQaXhlbFRlc3RBcmcu
c2l6ZSgpKTsKLSAgICAgICAgaWYgKGFyZ1Rlc3QgPT0gZXhwZWN0ZWRQaXhlbFRlc3RBcmcpIHsK
LSAgICAgICAgICAgIGR1bXBQaXhlbHNUZXN0ID0gdHJ1ZTsKLSAgICAgICAgICAgIHBpeGVsSGFz
aFBvcyA9IHNlY29uZFNlcGFyYXRvclBvcyA9PSBzdGQ6OnN0cmluZzo6bnBvcyA/IC0xIDogc2Vj
b25kU2VwYXJhdG9yUG9zICsgMTsKKyAgICAgICAgaWYgKGFyZ1Rlc3QgIT0gZXhwZWN0ZWRQaXhl
bFRlc3RBcmcpIHsKKyAgICAgICAgICAgIEZBVEFMKCJ1bmV4cGVjdGVkIGFyZ3VtZW50OiAlc1xu
IiwgYXJnVGVzdC5jX3N0cigpKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKHBpeGVsSGFzaFBvcyAhPSAtMSAmJiBwaXhlbEhhc2hQb3MgPCBjb21tYW5kLnNp
emUoKSkKLSAgICAgICAgICAgIGV4cGVjdGVkUGl4ZWxIYXNoID0gc3RkOjpzdHJpbmcoY29tbWFu
ZCwgcGl4ZWxIYXNoUG9zKTsKKworICAgICAgICBwYXRoT3JVUkwgPSBzdGQ6OnN0cmluZyhjb21t
YW5kLCAwLCBmaXJzdFNlcGFyYXRvclBvcyk7CisgICAgICAgIGR1bXBQaXhlbHMgPSB0cnVlOwor
ICAgICAgICBzaXplX3Qgc2Vjb25kU2VwYXJhdG9yUG9zID0gY29tbWFuZC5maW5kX2ZpcnN0X29m
KCdcJycsIGZpcnN0U2VwYXJhdG9yUG9zICsgMSk7CisgICAgICAgIGlmIChzZWNvbmRTZXBhcmF0
b3JQb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAgICAgICAgICBleHBlY3RlZFBpeGVsSGFz
aCA9IHN0ZDo6c3RyaW5nKGNvbW1hbmQsIHNlY29uZFNlcGFyYXRvclBvcyArIDEpOwogICAgIH0K
IAogICAgIG1fc3RhdGUgPSBSdW5uaW5nVGVzdDsKIAogICAgIG1fY3VycmVudEludm9jYXRpb24g
PSBhZG9wdFB0cihuZXcgVGVzdEludm9jYXRpb24ocGF0aE9yVVJMKSk7Ci0gICAgaWYgKGR1bXBQ
aXhlbHNUZXN0KQorICAgIGlmIChkdW1wUGl4ZWxzKQogICAgICAgICBtX2N1cnJlbnRJbnZvY2F0
aW9uLT5zZXRJc1BpeGVsVGVzdChleHBlY3RlZFBpeGVsSGFzaCk7CiAKICAgICBtX2N1cnJlbnRJ
bnZvY2F0aW9uLT5pbnZva2UoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155320</attachid>
            <date>2012-07-30 10:43:55 -0700</date>
            <delta_ts>2012-07-30 11:27:40 -0700</delta_ts>
            <desc>patch for ews&apos;s</desc>
            <filename>bug-92398-20120730194324.patch</filename>
            <type>text/plain</type>
            <size>46047</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MDE0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggN2EwZTUzOWUzZWZhN2Q2NTNhNjAyZjQwMWY4MWEwYTIw
MGU5ZDY5Ni4uNDQxOWYwYmY0Yjc0ODM4OWZmMTM3YWJjYTE3NDAwODBkYmZiNDZjOSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDYw
IEBACiAyMDEyLTA3LTMwICBCYWxhenMgS2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9yZz4KIAor
ICAgICAgICBBbGwgcG9ydHMgc2hvdWxkIHN1cHBvcnQgcGVyIHRlc3Qgc3dpdGNoaW5nIG9mIHBp
eGVsIHRlc3RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkyMzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGVhY2ggYWxsIHRlc3QgZHJpdmVycyB0byBhY2NlcHQgYSBwZXIgdGVzdCBjb250cm9sIG9m
IHdoZXRoZXIKKyAgICAgICAgdG8gZHVtcCBwaXhlbHMuIERyaXZlcnMgbm93IGFjY2VwdCBhIC0t
cGl4ZWwtdGVzdCBhcmd1bWVudAorICAgICAgICBvbiB0aGUgc3RhbmRhcnQgaW5wdXQgdGhhdCBt
ZWFucyB0aGF0IHJ1bm5pbmcgdGhlIGN1cnJlbnQKKyAgICAgICAgdGVzdCBhcyBwaXhlbCB0ZXN0
IGlzIGFsbG93ZWQgKGV2ZW4gaWYgdGhlIGV4cGVjdGVkIGhhc2ggaXMKKyAgICAgICAgbWlzc2lu
ZykuIFJlbW92ZWQgdGhlIC0tcGl4ZWwtdGVzdHMgY29tbWFuZCBsaW5lIG9wdGlvbiBzaW5jZQor
ICAgICAgICB0aGVyZSBpcyBubyBuZWVkIGZvciBpdCBhbnltb3JlLgorCisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwOgorICAgICAgICAocnVuVGVz
dCk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0U2hlbGwuY3BwOgorICAgICAgICAoVGVzdFNoZWxsOjpUZXN0U2hlbGwpOgorICAgICAgICAo
VGVzdFNoZWxsOjpydW5GaWxlVGVzdCk6CisgICAgICAgIChUZXN0U2hlbGw6OmR1bXApOgorICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oOgorICAgICAgICAoVGVz
dFBhcmFtczo6VGVzdFBhcmFtcyk6CisgICAgICAgIChUZXN0U2hlbGwpOgorICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZS5jcHA6CisgICAgICAgIChwYXJzZUNvbW1h
bmRMaW5lT3B0aW9ucyk6CisgICAgICAgIChnZXRFeHBlY3RlZFBpeGVsSGFzaCk6CisgICAgICAg
IChydW5UZXN0KToKKyAgICAgICAgKHNob3VsZER1bXBQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVj
dGVkKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9EdW1w
UmVuZGVyVHJlZS5jcHA6CisgICAgICAgIChpbml0aWFsaXplR2xvYmFsc0Zyb21Db21tYW5kTGlu
ZU9wdGlvbnMpOgorICAgICAgICAoZHVtcCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFj
L0R1bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICAoaW5pdGlhbGl6ZUdsb2JhbHNGcm9tQ29tbWFu
ZExpbmVPcHRpb25zKToKKyAgICAgICAgKGR1bXBSZW5kZXJUcmVlKToKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkR1
bXBSZW5kZXJUcmVlOjpwcm9jZXNzTGluZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2lu
L0R1bXBSZW5kZXJUcmVlLmNwcDoKKyAgICAgICAgKGR1bXApOgorICAgICAgICAocnVuVGVzdCk6
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd3gvRHVtcFJlbmRlclRyZWVXeC5jcHA6CisgICAg
ICAgIChkdW1wKToKKyAgICAgICAgKHJ1blRlc3QpOgorICAgICAgICAqIFNjcmlwdHMvb2xkLXJ1
bi13ZWJraXQtdGVzdHM6IFBhc3MgLS1waXhlbC10ZXN0IGJlZm9yZSB0aGUgaGFzaC4KKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHk6CisgICAgICAg
IChQb3J0LnNob3VsZF9ydW5fYXNfcGl4ZWxfdGVzdCk6IFJlbW92ZWQgbm93IHRoYXQgYWxsIHBv
cnRzIHN1cHBvcnRzIGl0LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvZHJpdmVyLnB5OgorICAgICAgICAoRHJpdmVyLmNtZF9saW5lKTogRG9uJ3QgcGFzcyAt
LXBpeGVsLXRlc3RzIGFueW1vcmUuCisgICAgICAgIChEcml2ZXIuX2NvbW1hbmRfZnJvbV9kcml2
ZXJfaW5wdXQpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6VGVzdENvbnRyb2xsZXIpOgorICAgICAg
ICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXVFI6OlRlc3RD
b250cm9sbGVyOjpydW5UZXN0KToKKworMjAxMi0wNy0zMCAgQmFsYXpzIEtlbGVtZW4gIDxrYmFs
YXpzQHdlYmtpdC5vcmc+CisKICAgICAgICAgW1F0XVtOUldUXSBSRUdSRVNTSU9OKDEyMzcyOSk6
IEZvcmNpbmcgcGl4ZWwgdGVzdHMgd2l0aCAtcCBkb2Vzbid0IHdvcmsKICAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyNjI3CiAKZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpCmluZGV4IGRjZTFlMzYxZDYwMDZlZGUwNzQwMTVjZDFj
ZDZiZmE2YTQwMjExZTguLmQ2ZjBhYWIxYzkwMTljNTJhNDM5MGQ5ZWU5MzIwZTYxYzU3MWMxYzUg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkKKysr
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaQpAQCAtNTYsNiArNTYs
OCBAQAogICAgICAgICAgICAgJ2Nocm9taXVtL1dlYlZpZXdIb3N0LmgnLAogICAgICAgICBdLAog
ICAgICAgICAndGVzdF9ydW5uZXJfZmlsZXMnOiBbCisgICAgICAgICAgICAnRHVtcFJlbmRlclRy
ZWUuaCcsCisgICAgICAgICAgICAnRHVtcFJlbmRlclRyZWVDb21tb24uY3BwJywKICAgICAgICAg
ICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcCcsCiAg
ICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5o
JywKICAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnQuY3BwJywKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVl
LmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5oCmluZGV4IDBlNTk4YmU0
YWUzZGQ2MjVmMGI0NWVmZTZiMjhmYTM1ZjY3ZjUyZjIuLjg0MjcwYTIwMDFiYmFhNWE5MmYxNjkw
OWE2YjI2M2U1NmY3NDQ4NWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBS
ZW5kZXJUcmVlLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuaApA
QCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlQmxhY2tCZXJyeS5oIgog
I2VuZGlmCiAKKyNpbmNsdWRlIDxtYXA+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KIApAQCAtNjUsNCArNjYsMTQgQEAgZXh0ZXJuIFJlZlB0cjxMYXlvdXRUZXN0
Q29udHJvbGxlcj4gZ0xheW91dFRlc3RDb250cm9sbGVyOwogdm9pZCBkdW1wKCk7CiB2b2lkIGRp
c3BsYXlXZWJWaWV3KCk7CiAKK3N0cnVjdCBUZXN0Q29tbWFuZCB7CisgICAgVGVzdENvbW1hbmQo
KSA6IHNob3VsZER1bXBQaXhlbHMoZmFsc2UpIHsgfQorCisgICAgc3RkOjpzdHJpbmcgcGF0aE9y
VVJMOworICAgIGJvb2wgc2hvdWxkRHVtcFBpeGVsczsKKyAgICBzdGQ6OnN0cmluZyBleHBlY3Rl
ZFBpeGVsSGFzaDsKK307CisKK1Rlc3RDb21tYW5kIHBhcnNlSW5wdXRMaW5lKGNvbnN0IHN0ZDo6
c3RyaW5nJik7CisKICNlbmRpZiAvLyBEdW1wUmVuZGVyVHJlZV9oCmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZUNvbW1vbi5jcHAgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9EdW1wUmVuZGVyVHJlZUNvbW1vbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzVmY2YzOWYyN2Jk
MTVjN2QxOThlNDI3ZmI4YjQxNTEzOGVhOGVkMwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcApAQCAtMCwwICsxLDgyIEBACisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKKworI2luY2x1
ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+Cisj
aW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nPgorCitjbGFzcyBDb21tYW5kVG9r
ZW5pemVyIHsKK3B1YmxpYzoKKyAgICBDb21tYW5kVG9rZW5pemVyKGNvbnN0IHN0ZDo6c3RyaW5n
JiBpbnB1dCkKKyAgICAgICAgOiBtX2lucHV0KGlucHV0KQorICAgICAgICAsIG1fcG9zTmV4dFNl
cGFyYXRvcigwKQorICAgIHsKKyAgICAgICAgZmluZE5leHQoKTsKKyAgICB9CisKKyAgICBib29s
IGhhc05leHQoKSBjb25zdDsKKyAgICBzdGQ6OnN0cmluZyBuZXh0KCk7CisKK3ByaXZhdGU6Cisg
ICAgdm9pZCBmaW5kTmV4dCgpOworICAgIHN0YXRpYyBjb25zdCBjaGFyIGtTZXBhcmF0b3IgPSAn
Oic7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1faW5wdXQ7CisgICAgc3RkOjpzdHJpbmcgbV9u
ZXh0OworICAgIHNpemVfdCBtX3Bvc05leHRTZXBhcmF0b3I7Cit9OworCit2b2lkIENvbW1hbmRU
b2tlbml6ZXI6OmZpbmROZXh0KCkKK3sKKyAgICBpZiAobV9wb3NOZXh0U2VwYXJhdG9yID09IHN0
ZDo6c3RyaW5nOjpucG9zIHx8IG1fcG9zTmV4dFNlcGFyYXRvciA9PSBtX2lucHV0LnNpemUoKSkg
eworICAgICAgICBtX25leHQgPSBzdGQ6OnN0cmluZygpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIHNpemVfdCBzdGFydCA9IG1fcG9zTmV4dFNlcGFyYXRvciA/IG1fcG9zTmV4dFNlcGFy
YXRvciArIDEgOiAwOworICAgIG1fcG9zTmV4dFNlcGFyYXRvciA9IG1faW5wdXQuZmluZChrU2Vw
YXJhdG9yLCBzdGFydCk7CisgICAgc2l6ZV90IHNpemUgPSBtX3Bvc05leHRTZXBhcmF0b3IgPT0g
c3RkOjpzdHJpbmc6Om5wb3MgPyBzdGQ6OnN0cmluZzo6bnBvcyA6IG1fcG9zTmV4dFNlcGFyYXRv
ciAtIHN0YXJ0OworICAgIG1fbmV4dCA9IHN0ZDo6c3RyaW5nKG1faW5wdXQsIHN0YXJ0LCBzaXpl
KTsKK30KKworc3RkOjpzdHJpbmcgQ29tbWFuZFRva2VuaXplcjo6bmV4dCgpCit7CisgICAgQVNT
RVJUKGhhc05leHQoKSk7CisKKyAgICBzdGQ6OnN0cmluZyBvbGROZXh0ID0gbV9uZXh0OworICAg
IGZpbmROZXh0KCk7CisgICAgcmV0dXJuIG9sZE5leHQ7Cit9CisKK2Jvb2wgQ29tbWFuZFRva2Vu
aXplcjo6aGFzTmV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmV4dCAhPSBzdGQ6OnN0cmlu
ZygpOworfQorCitzdGF0aWMgdm9pZCBkaWUoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0TGluZSkK
K3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlVuZXhwZWN0ZWQgaW5wdXQgbGluZTogJXNcbiIsIGlu
cHV0TGluZS5jX3N0cigpKTsKKyAgICBleGl0KEVYSVRfRkFJTFVSRSk7Cit9CisKK1Rlc3RDb21t
YW5kIHBhcnNlSW5wdXRMaW5lKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnB1dExpbmUpCit7CisgICAg
VGVzdENvbW1hbmQgY29tbWFuZDsKKyAgICBDb21tYW5kVG9rZW5pemVyIHRva2VuaXplcihpbnB1
dExpbmUpOworICAgIGlmICghdG9rZW5pemVyLmhhc05leHQoKSkKKyAgICAgICAgZGllKGlucHV0
TGluZSk7CisKKyAgICBjb21tYW5kLnBhdGhPclVSTCA9IHRva2VuaXplci5uZXh0KCk7CisgICAg
aWYgKCF0b2tlbml6ZXIuaGFzTmV4dCgpKQorICAgICAgICByZXR1cm4gY29tbWFuZDsKKworICAg
IHN0ZDo6c3RyaW5nIGFyZyA9IHRva2VuaXplci5uZXh0KCk7CisgICAgaWYgKGFyZyAhPSBzdGQ6
OnN0cmluZygiLXAiKSAmJiBhcmcgIT0gc3RkOjpzdHJpbmcoIi0tcGl4ZWwtdGVzdCIpKQorICAg
ICAgICBkaWUoaW5wdXRMaW5lKTsKKyAgICBjb21tYW5kLnNob3VsZER1bXBQaXhlbHMgPSB0cnVl
OworCisgICAgaWYgKHRva2VuaXplci5oYXNOZXh0KCkpCisgICAgICAgIGNvbW1hbmQuZXhwZWN0
ZWRQaXhlbEhhc2ggPSB0b2tlbml6ZXIubmV4dCgpOworCisgICAgcmV0dXJuIGNvbW1hbmQ7Cit9
CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EdW1wUmVuZGVyVHJl
ZS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EdW1wUmVuZGVyVHJlZS5jcHAK
aW5kZXggNjE1NWY0NDFmNWQ4YmIzYzQ0ZTUxNzkwODBkY2IxNzQ0NWU4OTg3NC4uYzhiOWRlNTU1
YjhmMmI3MDVkZmMxMzI2NDY2MzQwYWQ1NzgwNDhkMSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcApAQCAtNDQsNyArNDQsNiBAQCB1c2lu
ZyBuYW1lc3BhY2Ugc3RkOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uQ29tcGxleFRleHRbXSA9
ICItLWNvbXBsZXgtdGV4dCI7CiBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25EdW1wQWxsUGl4ZWxz
W10gPSAiLS1kdW1wLWFsbC1waXhlbHMiOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uTm90cmVl
W10gPSAiLS1ub3RyZWUiOwotc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uUGl4ZWxUZXN0c1tdID0g
Ii0tcGl4ZWwtdGVzdHMiOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uVGhyZWFkZWRbXSA9ICIt
LXRocmVhZGVkIjsKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkRlYnVnUmVuZGVyVHJlZVtdID0g
Ii0tZGVidWctcmVuZGVyLXRyZWUiOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uRGVidWdMYXll
clRyZWVbXSA9ICItLWRlYnVnLWxheWVyLXRyZWUiOwpAQCAtNzAsNiArNjksOCBAQCBzdGF0aWMg
Y29uc3QgY2hhciBvcHRpb25FbmNvZGVCaW5hcnlbXSA9ICItLWVuY29kZS1iaW5hcnkiOwogc3Rh
dGljIGNvbnN0IGNoYXIgb3B0aW9uTm9UaW1lb3V0W10gPSAiLS1uby10aW1lb3V0IjsKIHN0YXRp
YyBjb25zdCBjaGFyIG9wdGlvbldlYkNvcmVMb2dDaGFubmVsc1tdID0gIi0td2ViY29yZS1sb2ct
Y2hhbm5lbHM9IjsKIAorc3RhdGljIGJvb2wgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0OworCiBj
bGFzcyBXZWJLaXRTdXBwb3J0VGVzdEVudmlyb25tZW50IHsKIHB1YmxpYzoKICAgICBXZWJLaXRT
dXBwb3J0VGVzdEVudmlyb25tZW50KCkKQEAgLTg1LDE3ICs4NiwxMiBAQCBwcml2YXRlOgogICAg
IE93blB0cjxNb2NrV2ViS2l0UGxhdGZvcm1TdXBwb3J0PiBtX21vY2tQbGF0Zm9ybTsKIH07CiAK
LXN0YXRpYyB2b2lkIHJ1blRlc3QoVGVzdFNoZWxsJiBzaGVsbCwgVGVzdFBhcmFtcyYgcGFyYW1z
LCBjb25zdCBzdHJpbmcmIHRlc3ROYW1lKQorc3RhdGljIHZvaWQgcnVuVGVzdChUZXN0U2hlbGwm
IHNoZWxsLCBUZXN0UGFyYW1zJiBwYXJhbXMsIGNvbnN0IHN0cmluZyYgaW5wdXRMaW5lKQogewog
ICAgIGludCBvbGRUaW1lb3V0TXNlYyA9IHNoZWxsLmxheW91dFRlc3RUaW1lb3V0KCk7Ci0gICAg
cGFyYW1zLnBpeGVsSGFzaCA9ICIiOwotICAgIHN0cmluZyBwYXRoT3JVUkwgPSB0ZXN0TmFtZTsK
LSAgICBzdHJpbmc6OnNpemVfdHlwZSBzZXBhcmF0b3JQb3NpdGlvbiA9IHBhdGhPclVSTC5maW5k
KCInIik7Ci0gICAgaWYgKHNlcGFyYXRvclBvc2l0aW9uICE9IHN0cmluZzo6bnBvcykgewotICAg
ICAgICBwYXJhbXMucGl4ZWxIYXNoID0gcGF0aE9yVVJMLnN1YnN0cihzZXBhcmF0b3JQb3NpdGlv
biArIDEpOwotICAgICAgICBwYXRoT3JVUkwuZXJhc2Uoc2VwYXJhdG9yUG9zaXRpb24pOwotICAg
IH0KLSAgICBwYXJhbXMudGVzdFVybCA9IHdlYmtpdF9zdXBwb3J0OjpDcmVhdGVVUkxGb3JQYXRo
T3JVUkwocGF0aE9yVVJMKTsKKyAgICBUZXN0Q29tbWFuZCBjb21tYW5kID0gcGFyc2VJbnB1dExp
bmUoaW5wdXRMaW5lKTsKKyAgICBwYXJhbXMudGVzdFVybCA9IHdlYmtpdF9zdXBwb3J0OjpDcmVh
dGVVUkxGb3JQYXRoT3JVUkwoY29tbWFuZC5wYXRoT3JVUkwpOworICAgIHBhcmFtcy5waXhlbEhh
c2ggPSBjb21tYW5kLnNob3VsZER1bXBQaXhlbHM7CiAgICAgd2Via2l0X3N1cHBvcnQ6OlNldEN1
cnJlbnREaXJlY3RvcnlGb3JGaWxlVVJMKHBhcmFtcy50ZXN0VXJsKTsKICAgICB2ODo6Vjg6OlNl
dEZsYWdzRnJvbVN0cmluZyhzaGVsbC5qYXZhU2NyaXB0RmxhZ3MoKS5jX3N0cigpLCBzaGVsbC5q
YXZhU2NyaXB0RmxhZ3MoKS5sZW5ndGgoKSk7CiAgICAgaWYgKHNoZWxsLnN0cmVzc09wdCgpIHx8
IHNoZWxsLnN0cmVzc0Rlb3B0KCkpIHsKQEAgLTEwOCwxMSArMTA0LDExIEBAIHN0YXRpYyB2b2lk
IHJ1blRlc3QoVGVzdFNoZWxsJiBzaGVsbCwgVGVzdFBhcmFtcyYgcGFyYW1zLCBjb25zdCBzdHJp
bmcmIHRlc3ROYW1lCiAgICAgICAgICAgYm9vbCBpc0xhc3RMb2FkID0gKGkgPT0gKHY4OjpUZXN0
aW5nOjpHZXRTdHJlc3NSdW5zKCkgLSAxKSk7CiAgICAgICAgICAgc2hlbGwuc2V0RHVtcFdoZW5G
aW5pc2hlZChpc0xhc3RMb2FkKTsKICAgICAgICAgICBzaGVsbC5yZXNldFRlc3RDb250cm9sbGVy
KCk7Ci0gICAgICAgICAgc2hlbGwucnVuRmlsZVRlc3QocGFyYW1zKTsKKyAgICAgICAgICBzaGVs
bC5ydW5GaWxlVGVzdChwYXJhbXMsIGNvbW1hbmQuc2hvdWxkRHVtcFBpeGVscyk7CiAgICAgICB9
CiAgICAgfSBlbHNlIHsKICAgICAgIHNoZWxsLnJlc2V0VGVzdENvbnRyb2xsZXIoKTsKLSAgICAg
IHNoZWxsLnJ1bkZpbGVUZXN0KHBhcmFtcyk7CisgICAgICBzaGVsbC5ydW5GaWxlVGVzdChwYXJh
bXMsIGNvbW1hbmQuc2hvdWxkRHVtcFBpeGVscyk7CiAgICAgfQogICAgIHNoZWxsLnNldExheW91
dFRlc3RUaW1lb3V0KG9sZFRpbWVvdXRNc2VjKTsKIH0KQEAgLTE0Niw4ICsxNDIsNiBAQCBpbnQg
bWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgICAgICAgICAgc2VydmVyTW9kZSA9IHRy
dWU7CiAgICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvbk5vdHJlZSkKICAgICAgICAg
ICAgIHBhcmFtcy5kdW1wVHJlZSA9IGZhbHNlOwotICAgICAgICBlbHNlIGlmIChhcmd1bWVudCA9
PSBvcHRpb25QaXhlbFRlc3RzKQotICAgICAgICAgICAgcGFyYW1zLmR1bXBQaXhlbHMgPSB0cnVl
OwogICAgICAgICBlbHNlIGlmIChhcmd1bWVudCA9PSBvcHRpb25EZWJ1Z1JlbmRlclRyZWUpCiAg
ICAgICAgICAgICBwYXJhbXMuZGVidWdSZW5kZXJUcmVlID0gdHJ1ZTsKICAgICAgICAgZWxzZSBp
ZiAoYXJndW1lbnQgPT0gb3B0aW9uRGVidWdMYXllclRyZWUpCmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcAppbmRleCA2Zjk5MWZmMzM1OWM3NzQ2MWEyMzg3OTUx
OGQzMDBjNTZmYTBjN2YzLi5jZmM4MWYxOGNhZTBkYzQ3NGU3MzBlMzBkM2ZiNGY3OGU0NjExOWY2
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3Bw
CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKQEAgLTEw
Miw3ICsxMDIsOCBAQCBzdGF0aWMgdm9pZCBtYWtlQ2FudmFzT3BhcXVlKFNrQ2FudmFzKiBjYW52
YXMpCiB9CiAKIFRlc3RTaGVsbDo6VGVzdFNoZWxsKCkKLSAgICA6IG1fdGVzdElzUGVuZGluZyhm
YWxzZSkKKyAgICA6IG1fZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0KGZhbHNlKQorICAgICwgbV90
ZXN0SXNQZW5kaW5nKGZhbHNlKQogICAgICwgbV90ZXN0SXNQcmVwYXJpbmcoZmFsc2UpCiAgICAg
LCBtX2ZvY3VzZWRXaWRnZXQoMCkKICAgICAsIG1fZGV2VG9vbHMoMCkKQEAgLTIzNywxMyArMjM4
LDE2IEBAIHZvaWQgVGVzdFNoZWxsOjpyZXNldFdlYlNldHRpbmdzKFdlYlZpZXcmIHdlYlZpZXcp
CiAgICAgbV9wcmVmcy5hcHBseVRvKCZ3ZWJWaWV3KTsKIH0KIAotdm9pZCBUZXN0U2hlbGw6OnJ1
bkZpbGVUZXN0KGNvbnN0IFRlc3RQYXJhbXMmIHBhcmFtcykKK3ZvaWQgVGVzdFNoZWxsOjpydW5G
aWxlVGVzdChjb25zdCBUZXN0UGFyYW1zJiBwYXJhbXMsIGJvb2wgc2hvdWxkRHVtcFBpeGVscykK
IHsKICAgICBBU1NFUlQocGFyYW1zLnRlc3RVcmwuaXNWYWxpZCgpKTsKICAgICBtX3Rlc3RJc1By
ZXBhcmluZyA9IHRydWU7CisgICAgbV9zaG91bGREdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgPSBz
aG91bGREdW1wUGl4ZWxzOwogICAgIG1fcGFyYW1zID0gcGFyYW1zOwogICAgIHN0cmluZyB0ZXN0
VXJsID0gbV9wYXJhbXMudGVzdFVybC5zcGVjKCk7CiAKKyAgICBtX2xheW91dFRlc3RDb250cm9s
bGVyLT5zZXRTaG91bGRHZW5lcmF0ZVBpeGVsUmVzdWx0cyhzaG91bGREdW1wUGl4ZWxzKTsKKwog
ICAgIGlmICh0ZXN0VXJsLmZpbmQoImxvYWRpbmcvIikgIT0gc3RyaW5nOjpucG9zCiAgICAgICAg
IHx8IHRlc3RVcmwuZmluZCgibG9hZGluZ1xcIikgIT0gc3RyaW5nOjpucG9zKQogICAgICAgICBt
X2xheW91dFRlc3RDb250cm9sbGVyLT5zZXRTaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKHRy
dWUpOwpAQCAtNjA5LDcgKzYxMyw3IEBAIHZvaWQgVGVzdFNoZWxsOjpkdW1wKCkKICAgICBpZiAo
ZHVtcGVkQW55dGhpbmcgJiYgbV9wYXJhbXMucHJpbnRTZXBhcmF0b3JzKQogICAgICAgICBtX3By
aW50ZXIuaGFuZGxlVGV4dEZvb3RlcigpOwogCi0gICAgaWYgKG1fcGFyYW1zLmR1bXBQaXhlbHMg
JiYgc2hvdWxkR2VuZXJhdGVQaXhlbFJlc3VsdHMpIHsKKyAgICBpZiAobV9kdW1wUGl4ZWxzRm9y
Q3VycmVudFRlc3QgJiYgc2hvdWxkR2VuZXJhdGVQaXhlbFJlc3VsdHMpIHsKICAgICAgICAgLy8g
SW1hZ2Ugb3V0cHV0OiB3ZSB3cml0ZSB0aGUgaW1hZ2UgZGF0YSB0byB0aGUgZmlsZSBnaXZlbiBv
biB0aGUKICAgICAgICAgLy8gY29tbWFuZCBsaW5lIChmb3IgdGhlIGR1bXAgcGl4ZWxzIGFyZ3Vt
ZW50KSwgYW5kIHRoZSBNRDUgc3VtIHRvCiAgICAgICAgIC8vIHN0ZG91dC4KZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgKaW5kZXggMDc3ODE2MzZiYTc1MDc1OTUyYjJm
ZjM4YzRjNDczZGQ3NmM0Y2I1Yy4uOGFmNmI5MzZkMzc4MzZhNTdiYTFjNDM1ZDI4ZmQ0YjRhNjhj
NDk0OCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxs
LmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgKQEAgLTY0
LDcgKzY0LDYgQEAgY2xhc3MgV2ViUGVybWlzc2lvbnM7CiAKIHN0cnVjdCBUZXN0UGFyYW1zIHsK
ICAgICBib29sIGR1bXBUcmVlOwotICAgIGJvb2wgZHVtcFBpeGVsczsKICAgICBib29sIGRlYnVn
UmVuZGVyVHJlZTsKICAgICBib29sIGRlYnVnTGF5ZXJUcmVlOwogICAgIGJvb2wgcHJpbnRTZXBh
cmF0b3JzOwpAQCAtNzMsNyArNzIsNiBAQCBzdHJ1Y3QgVGVzdFBhcmFtcyB7CiAKICAgICBUZXN0
UGFyYW1zKCkKICAgICAgICAgOiBkdW1wVHJlZSh0cnVlKQotICAgICAgICAsIGR1bXBQaXhlbHMo
ZmFsc2UpCiAgICAgICAgICwgZGVidWdSZW5kZXJUcmVlKGZhbHNlKQogICAgICAgICAsIGRlYnVn
TGF5ZXJUcmVlKGZhbHNlKQogICAgICAgICAsIHByaW50U2VwYXJhdG9ycyhmYWxzZSkgeyB9CkBA
IC0xMDQsNyArMTAyLDcgQEAgcHVibGljOgogICAgIFdlYlBlcm1pc3Npb25zKiB3ZWJQZXJtaXNz
aW9ucygpIHsgcmV0dXJuIG1fd2ViUGVybWlzc2lvbnMuZ2V0KCk7IH0KIAogICAgIHZvaWQgYmlu
ZEpTT2JqZWN0c1RvV2luZG93KFdlYktpdDo6V2ViRnJhbWUqKTsKLSAgICB2b2lkIHJ1bkZpbGVU
ZXN0KGNvbnN0IFRlc3RQYXJhbXMmKTsKKyAgICB2b2lkIHJ1bkZpbGVUZXN0KGNvbnN0IFRlc3RQ
YXJhbXMmLCBib29sIHNob3VsZER1bXBQaXhlbFRlc3RzKTsKICAgICB2b2lkIGNhbGxKU0dDKCk7
CiAgICAgdm9pZCByZXNldFRlc3RDb250cm9sbGVyKCk7CiAgICAgdm9pZCB3YWl0VGVzdEZpbmlz
aGVkKCk7CkBAIC0yMjYsNiArMjI0LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgVGVzdFBh
cmFtcyBtX3BhcmFtczsKKyAgICBib29sIG1fZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0OwogICAg
IGludCBtX3RpbWVvdXQ7IC8vIHRpbWVvdXQgdmFsdWUgaW4gbWlsbGlzZWNvbmQKICAgICBib29s
IG1fYWxsb3dFeHRlcm5hbFBhZ2VzOwogICAgIGJvb2wgbV9hY2NlbGVyYXRlZENvbXBvc2l0aW5n
Rm9yVmlkZW9FbmFibGVkOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0NN
YWtlTGlzdHMudHh0IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IGUxZGFjZjkwMWJhMDYyNWE1YTFlODA3ZWM2Yjk0NTM0MzQ5ODRjYWEuLjA2N2RiZDMyYjdh
YTkxZjVhNTQ3Y2I3YmU1N2ZmNGJkZjU5OTkzMjkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4dAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwv
Q01ha2VMaXN0cy50eHQKQEAgLTEsNCArMSw1IEBACiBTRVQoRHVtcFJlbmRlclRyZWVfU09VUkNF
UworICAgICR7VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZUNvbW1vbi5j
cHAKICAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvQ3ljbGljUmVkdW5kYW5jeUNoZWNr
LmNwcAogICAgICR7VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuY3BwCiAg
ICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcApk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlLmNwcCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZS5jcHAKaW5kZXggYzJjOWQ3
MWMwYzUxNWNiMDhjZDQxMmQ0MmFkZDBkMTA1Y2E5NzU5Yy4uOWE1ZmIwZTMwYWU5ZThkODM2Zjdj
YzA2YTdmYTc3ZGVhN2UxNmYzZCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZs
L0R1bXBSZW5kZXJUcmVlLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJl
bmRlclRyZWUuY3BwCkBAIC02NCw3ICs2NCw3IEBAIGV4dGVybiBFd2tfSGlzdG9yeV9JdGVtKiBw
cmV2VGVzdEJGSXRlbTsKIFJlZlB0cjxMYXlvdXRUZXN0Q29udHJvbGxlcj4gZ0xheW91dFRlc3RD
b250cm9sbGVyOwogdm9sYXRpbGUgYm9vbCBkb25lID0gZmFsc2U7CiAKLXN0YXRpYyBpbnQgZHVt
cFBpeGVscyA9IGZhbHNlOworc3RhdGljIGJvb2wgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0Rm9y
Q3VycmVudFRlc3Q7CiBzdGF0aWMgaW50IGR1bXBUcmVlID0gdHJ1ZTsKIHN0YXRpYyBpbnQgcHJp
bnRTZXBhcmF0b3JzID0gdHJ1ZTsKIHN0YXRpYyBpbnQgdXNlWDExV2luZG93ID0gZmFsc2U7CkBA
IC0xOTIsNyArMTkyLDYgQEAgc3RhdGljIGJvb2wgcGFyc2VDb21tYW5kTGluZU9wdGlvbnMoaW50
IGFyZ2MsIGNoYXIqKiBhcmd2KQogewogICAgIHN0YXRpYyBjb25zdCBvcHRpb24gb3B0aW9uc1td
ID0gewogICAgICAgICB7Im5vdHJlZSIsIG5vX2FyZ3VtZW50LCAmZHVtcFRyZWUsIGZhbHNlfSwK
LSAgICAgICAgeyJwaXhlbC10ZXN0cyIsIG5vX2FyZ3VtZW50LCAmZHVtcFBpeGVscywgdHJ1ZX0s
CiAgICAgICAgIHsidHJlZSIsIG5vX2FyZ3VtZW50LCAmZHVtcFRyZWUsIHRydWV9LAogICAgICAg
ICB7Imd1aSIsIG5vX2FyZ3VtZW50LCAmdXNlWDExV2luZG93LCB0cnVlfSwKICAgICAgICAgezAs
IDAsIDAsIDB9CkBAIC0yMTAsMzIgKzIwOSw2IEBAIHN0YXRpYyBib29sIHBhcnNlQ29tbWFuZExp
bmVPcHRpb25zKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
c3RhdGljIFN0cmluZyBnZXRGaW5hbFRlc3RVUkwoY29uc3QgU3RyaW5nJiB0ZXN0VVJMKQotewot
ICAgIGNvbnN0IHNpemVfdCBoYXNoU2VwYXJhdG9yUG9zID0gdGVzdFVSTC5maW5kKCInIik7Ci0g
ICAgaWYgKGhhc2hTZXBhcmF0b3JQb3MgIT0gbm90Rm91bmQpCi0gICAgICAgIHJldHVybiBnZXRG
aW5hbFRlc3RVUkwodGVzdFVSTC5sZWZ0KGhhc2hTZXBhcmF0b3JQb3MpKTsKLQotICAgIC8vIENv
bnZlcnQgdGhlIHBhdGggaW50byBhIGZ1bGwgZmlsZSBVUkwgaWYgaXQgZG9lcyBub3QgbG9vawot
ICAgIC8vIGxpa2UgYW4gSFRUUC9TIFVSTCAoZG9lc24ndCBzdGFydCB3aXRoIGh0dHA6Ly8gb3Ig
aHR0cHM6Ly8pLgotICAgIGlmICghdGVzdFVSTC5zdGFydHNXaXRoKCJodHRwOi8vIikgJiYgIXRl
c3RVUkwuc3RhcnRzV2l0aCgiaHR0cHM6Ly8iKSkgewotICAgICAgICBjaGFyKiBjRmlsZVBhdGgg
PSBlY29yZV9maWxlX3JlYWxwYXRoKHRlc3RVUkwudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGNv
bnN0IFN0cmluZyBmaWxlUGF0aCA9IFN0cmluZzo6ZnJvbVVURjgoY0ZpbGVQYXRoKTsKLSAgICAg
ICAgZnJlZShjRmlsZVBhdGgpOwotCi0gICAgICAgIGlmIChlY29yZV9maWxlX2V4aXN0cyhmaWxl
UGF0aC51dGY4KCkuZGF0YSgpKSkKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmcoImZpbGU6Ly8i
KSArIGZpbGVQYXRoOwotICAgIH0KLQotICAgIHJldHVybiB0ZXN0VVJMOwotfQotCi1zdGF0aWMg
U3RyaW5nIGdldEV4cGVjdGVkUGl4ZWxIYXNoKGNvbnN0IFN0cmluZyYgdGVzdFVSTCkKLXsKLSAg
ICBjb25zdCBzaXplX3QgaGFzaFNlcGFyYXRvclBvcyA9IHRlc3RVUkwuZmluZCgiJyIpOwotICAg
IHJldHVybiAoaGFzaFNlcGFyYXRvclBvcyAhPSBub3RGb3VuZCkgPyB0ZXN0VVJMLnN1YnN0cmlu
ZyhoYXNoU2VwYXJhdG9yUG9zICsgMSkgOiBTdHJpbmcoKTsKLX0KLQogc3RhdGljIGlubGluZSBi
b29sIGlzR2xvYmFsSGlzdG9yeVRlc3QoY29uc3QgU3RyaW5nJiBjVGVzdFBhdGhPclVSTCkKIHsK
ICAgICByZXR1cm4gY1Rlc3RQYXRoT3JVUkwuY29udGFpbnMoIi9nbG9iYWxoaXN0b3J5LyIpOwpA
QCAtMjY3LDEzICsyNDAsMTUgQEAgc3RhdGljIHZvaWQgY3JlYXRlTGF5b3V0VGVzdENvbnRyb2xs
ZXIoY29uc3QgU3RyaW5nJiB0ZXN0VVJMLCBjb25zdCBTdHJpbmcmIGV4cGUKICAgICB9CiB9CiAK
LXN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3QgY2hhciogY1Rlc3RQYXRoT3JVUkwpCitzdGF0aWMg
dm9pZCBydW5UZXN0KGNvbnN0IGNoYXIqIGlucHV0TGluZSkKIHsKICAgICBjb25zdCBTdHJpbmcg
dGVzdFBhdGhPclVSTCA9IFN0cmluZzo6ZnJvbVVURjgoY1Rlc3RQYXRoT3JVUkwpOwogICAgIEFT
U0VSVCghdGVzdFBhdGhPclVSTC5pc0VtcHR5KCkpOwogCi0gICAgY29uc3QgU3RyaW5nIHRlc3RV
UkwgPSBnZXRGaW5hbFRlc3RVUkwodGVzdFBhdGhPclVSTCk7Ci0gICAgY29uc3QgU3RyaW5nIGV4
cGVjdGVkUGl4ZWxIYXNoID0gZ2V0RXhwZWN0ZWRQaXhlbEhhc2godGVzdFBhdGhPclVSTCk7Cisg
ICAgVGVzdENvbW1hbmQgY29tbWFuZCA9IHBhcnNlSW5wdXRMaW5lKGlucHV0TGluZSk7CisgICAg
Y29uc3QgU3RyaW5nIHRlc3RVUkwoY29tbWFuZC5wYXRoT3JVUkwuY19zdHIoKSk7CisgICAgZHVt
cFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gY29tbWFuZC5zaG91bGREdW1wUGl4ZWxzOworICAgIGNv
bnN0IFN0cmluZyBleHBlY3RlZFBpeGVsSGFzaChjb21tYW5kLmV4cGVjdGVkUGl4ZWxIYXNoLmNf
c3RyKCkpOwogCiAgICAgYnJvd3Nlci0+cmVzZXREZWZhdWx0c1RvQ29uc2lzdGVudFZhbHVlcygp
OwogICAgIGNyZWF0ZUxheW91dFRlc3RDb250cm9sbGVyKHRlc3RVUkwsIGV4cGVjdGVkUGl4ZWxI
YXNoKTsKQEAgLTM1MSw3ICszMjYsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGREdW1wRnJhbWVTY3Jv
bGxQb3NpdGlvbigpCiAKIHN0YXRpYyBib29sIHNob3VsZER1bXBQaXhlbHNBbmRDb21wYXJlV2l0
aEV4cGVjdGVkKCkKIHsKLSAgICByZXR1cm4gZHVtcFBpeGVscyAmJiBnTGF5b3V0VGVzdENvbnRy
b2xsZXItPmdlbmVyYXRlUGl4ZWxSZXN1bHRzKCkgJiYgIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+
ZHVtcERPTUFzV2ViQXJjaGl2ZSgpICYmICFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBTb3Vy
Y2VBc1dlYkFyY2hpdmUoKTsKKyAgICByZXR1cm4gZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ICYm
IGdMYXlvdXRUZXN0Q29udHJvbGxlci0+Z2VuZXJhdGVQaXhlbFJlc3VsdHMoKSAmJiAhZ0xheW91
dFRlc3RDb250cm9sbGVyLT5kdW1wRE9NQXNXZWJBcmNoaXZlKCkgJiYgIWdMYXlvdXRUZXN0Q29u
dHJvbGxlci0+ZHVtcFNvdXJjZUFzV2ViQXJjaGl2ZSgpOwogfQogCiBzdGF0aWMgYm9vbCBzaG91
bGREdW1wQmFja0ZvcndhcmRMaXN0KCkKQEAgLTQ1OCw3ICs0MzMsNyBAQCBpbnQgbWFpbihpbnQg
YXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgIHByaW50U2VwYXJhdG9ycyA9IHRydWU7CiAgICAg
ICAgIHJ1blRlc3RpbmdTZXJ2ZXJMb29wKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnRT
ZXBhcmF0b3JzID0gKG9wdGluZCA8IGFyZ2MgLSAxIHx8IChkdW1wUGl4ZWxzICYmIGR1bXBUcmVl
KSk7CisgICAgICAgIHByaW50U2VwYXJhdG9ycyA9IChvcHRpbmQgPCBhcmdjIC0gMSB8fCAoZHVt
cFBpeGVsc0ZvckN1cnJlbnRUZXN0ICYmIGR1bXBUcmVlKSk7CiAgICAgICAgIGZvciAoaW50IGkg
PSBvcHRpbmQ7IGkgIT0gYXJnYzsgKytpKQogICAgICAgICAgICAgcnVuVGVzdChhcmd2W2ldKTsK
ICAgICB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRy
ZWUuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcAppbmRl
eCA1N2NkMDU5MTdlODIyNTU4YjQ4Mzc2ZTAxMDJkODAwYTZiY2ZjY2RhLi5mYTYxMjU2NmRkMmI5
YzNlYTNlMDZjMGJhN2U0NTA2NDgxM2JjZDRjIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0
ay9EdW1wUmVuZGVyVHJlZS5jcHAKQEAgLTczLDcgKzczLDcgQEAgZXh0ZXJuIGdjaGFyKiB3ZWJr
aXRfd2ViX2ZyYW1lX2dldF9yZXNwb25zZV9taW1lX3R5cGUoV2ViS2l0V2ViRnJhbWUqIGZyYW1l
KTsKIAogdm9sYXRpbGUgYm9vbCBkb25lOwogc3RhdGljIGJvb2wgcHJpbnRTZXBhcmF0b3JzOwot
c3RhdGljIGludCBkdW1wUGl4ZWxzOworc3RhdGljIGJvb2wgZHVtcFBpeGVsc0ZvckN1cnJlbnRU
ZXN0Owogc3RhdGljIGludCBkdW1wVHJlZSA9IDE7CiBzdGF0aWMgaW50IHVzZVRpbWVvdXRXYXRj
aGRvZyA9IDE7CiAKQEAgLTU0NCw3ICs1NDQsNiBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplR2xv
YmFsc0Zyb21Db21tYW5kTGluZU9wdGlvbnMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKICAg
ICBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKICAgICAgICAgeyJub3RyZWUiLCBub19hcmd1
bWVudCwgJmR1bXBUcmVlLCBmYWxzZX0sCi0gICAgICAgIHsicGl4ZWwtdGVzdHMiLCBub19hcmd1
bWVudCwgJmR1bXBQaXhlbHMsIHRydWV9LAogICAgICAgICB7InRyZWUiLCBub19hcmd1bWVudCwg
JmR1bXBUcmVlLCB0cnVlfSwKICAgICAgICAgeyJuby10aW1lb3V0Iiwgbm9fYXJndW1lbnQsICZ1
c2VUaW1lb3V0V2F0Y2hkb2csIGZhbHNlfSwKICAgICAgICAge05VTEwsIDAsIE5VTEwsIDB9CkBA
IC02MjQsNyArNjIzLDcgQEAgdm9pZCBkdW1wKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGlm
IChkdW1wUGl4ZWxzCisgICAgaWYgKGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCkKICAgICAgJiYg
Z0xheW91dFRlc3RDb250cm9sbGVyLT5nZW5lcmF0ZVBpeGVsUmVzdWx0cygpCiAgICAgICYmICFn
TGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBET01Bc1dlYkFyY2hpdmUoKQogICAgICAmJiAhZ0xh
eW91dFRlc3RDb250cm9sbGVyLT5kdW1wU291cmNlQXNXZWJBcmNoaXZlKCkpIHsKQEAgLTY4Nywx
OCArNjg2LDEzIEBAIHN0YXRpYyB2b2lkIHNlbmRQaXhlbFJlc3VsdHNFT0YoKQogICAgIGZmbHVz
aChzdGRlcnIpOwogfQogCi1zdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYgdGVzdFBh
dGhPclVSTCkKK3N0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBpbnB1dExpbmUpCiB7
CiAgICAgQVNTRVJUKCF0ZXN0UGF0aE9yVVJMLmVtcHR5KCkpOwogCi0gICAgLy8gTG9vayBmb3Ig
IiciIGFzIGEgc2VwYXJhdG9yIGJldHdlZW4gdGhlIHBhdGggb3IgVVJMLCBhbmQgdGhlIHBpeGVs
IGR1bXAgaGFzaCB0aGF0IGZvbGxvd3MuCi0gICAgc3RyaW5nIHRlc3RVUkwodGVzdFBhdGhPclVS
TCk7Ci0gICAgc3RyaW5nIGV4cGVjdGVkUGl4ZWxIYXNoOwotICAgIHNpemVfdCBzZXBhcmF0b3JQ
b3MgPSB0ZXN0VVJMLmZpbmQoIiciKTsKLSAgICBpZiAoc2VwYXJhdG9yUG9zICE9IHN0cmluZzo6
bnBvcykgewotICAgICAgICB0ZXN0VVJMID0gc3RyaW5nKHRlc3RQYXRoT3JVUkwsIDAsIHNlcGFy
YXRvclBvcyk7Ci0gICAgICAgIGV4cGVjdGVkUGl4ZWxIYXNoID0gc3RyaW5nKHRlc3RQYXRoT3JV
UkwsIHNlcGFyYXRvclBvcyArIDEpOwotICAgIH0KKyAgICBUZXN0Q29tbWFuZCBjb21tYW5kID0g
cGFyc2VJbnB1dExpbmUoaW5wdXRMaW5lKTsKKyAgICBjb25zdCBzdHJpbmcmIHRlc3RVUkwgPSBj
b21tYW5kLnBhdGhPclVSTDsKKyAgICBkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgPSBjb21tYW5k
LnNob3VsZER1bXBQaXhlbHM7CiAKICAgICAvLyBDb252ZXJ0IHRoZSBwYXRoIGludG8gYSBmdWxs
IGZpbGUgVVJMIGlmIGl0IGRvZXMgbm90IGxvb2sKICAgICAvLyBsaWtlIGFuIEhUVFAvUyBVUkwg
KGRvZXNuJ3Qgc3RhcnQgd2l0aCBodHRwOi8vIG9yIGh0dHBzOi8vKS4KQEAgLTcxMiw3ICs3MDYs
NyBAQCBzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYgdGVzdFBhdGhPclVSTCkKIAog
ICAgIHJlc2V0RGVmYXVsdHNUb0NvbnNpc3RlbnRWYWx1ZXMoKTsKIAotICAgIGdMYXlvdXRUZXN0
Q29udHJvbGxlciA9IExheW91dFRlc3RDb250cm9sbGVyOjpjcmVhdGUodGVzdFVSTCwgZXhwZWN0
ZWRQaXhlbEhhc2gpOworICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlciA9IExheW91dFRlc3RDb250
cm9sbGVyOjpjcmVhdGUodGVzdFVSTCwgY29tbWFuZC5leHBlY3RlZFBpeGVsSGFzaCk7CiAgICAg
dG9wTG9hZGluZ0ZyYW1lID0gMDsKICAgICBkb25lID0gZmFsc2U7CiAKQEAgLTE0NDcsNyArMTQ0
MSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAgICAgICAgIHByaW50U2Vw
YXJhdG9ycyA9IHRydWU7CiAgICAgICAgIHJ1blRlc3RpbmdTZXJ2ZXJMb29wKCk7CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgcHJpbnRTZXBhcmF0b3JzID0gKG9wdGluZCA8IGFyZ2MtMSB8fCAoZHVt
cFBpeGVscyAmJiBkdW1wVHJlZSkpOworICAgICAgICBwcmludFNlcGFyYXRvcnMgPSAob3B0aW5k
IDwgYXJnYy0xIHx8IChkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgJiYgZHVtcFRyZWUpKTsKICAg
ICAgICAgZm9yIChpbnQgaSA9IG9wdGluZDsgaSAhPSBhcmdjOyArK2kpCiAgICAgICAgICAgICBy
dW5UZXN0KGFyZ3ZbaV0pOwogICAgIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9EdW1wUmVuZGVyVHJlZS5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVu
ZGVyVHJlZS5tbQppbmRleCBhYmJhNTM1ZWRkYzg4YTM5NDkwMjk0ZmQ0NTFhMzkxOTY4ZmNjM2Qx
Li4zMDY0MTMzYWRkNjdmNzY5OWNkZmM5ZTZkZDllM2E3OWZmMjFhNTgxIDEwMDY0NAotLS0gYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KKysrIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCkBAIC0xNDAsNyArMTQwLDcgQEAgc3Rh
dGljIEhpc3RvcnlEZWxlZ2F0ZSAqaGlzdG9yeURlbGVnYXRlOwogUG9saWN5RGVsZWdhdGUgKnBv
bGljeURlbGVnYXRlOwogU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZSAqc3RvcmFnZURlbGVnYXRlOwog
Ci1zdGF0aWMgaW50IGR1bXBQaXhlbHM7CitzdGF0aWMgYm9vbCBkdW1wUGl4ZWxzRm9yQ3VycmVu
dFRlc3Q7CiBzdGF0aWMgaW50IHRocmVhZGVkOwogc3RhdGljIGludCBkdW1wVHJlZSA9IFlFUzsK
IHN0YXRpYyBpbnQgdXNlVGltZW91dFdhdGNoZG9nID0gWUVTOwpAQCAtNzgwLDcgKzc4MCw2IEBA
IHN0YXRpYyB2b2lkIGluaXRpYWxpemVHbG9iYWxzRnJvbUNvbW1hbmRMaW5lT3B0aW9ucyhpbnQg
YXJnYywgY29uc3QgY2hhciAqYXJndltdCiB7CiAgICAgc3RydWN0IG9wdGlvbiBvcHRpb25zW10g
PSB7CiAgICAgICAgIHsibm90cmVlIiwgbm9fYXJndW1lbnQsICZkdW1wVHJlZSwgTk99LAotICAg
ICAgICB7InBpeGVsLXRlc3RzIiwgbm9fYXJndW1lbnQsICZkdW1wUGl4ZWxzLCBZRVN9LAogICAg
ICAgICB7InRyZWUiLCBub19hcmd1bWVudCwgJmR1bXBUcmVlLCBZRVN9LAogICAgICAgICB7InRo
cmVhZGVkIiwgbm9fYXJndW1lbnQsICZ0aHJlYWRlZCwgWUVTfSwKICAgICAgICAgeyJjb21wbGV4
LXRleHQiLCBub19hcmd1bWVudCwgJmZvcmNlQ29tcGxleFRleHQsIFlFU30sCkBAIC04NDksNyAr
ODQ4LDcgQEAgdm9pZCBkdW1wUmVuZGVyVHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltd
KQogICAgIGluaXRpYWxpemVHbG9iYWxzRnJvbUNvbW1hbmRMaW5lT3B0aW9ucyhhcmdjLCBhcmd2
KTsKICAgICBwcmVwYXJlQ29uc2lzdGVudFRlc3RpbmdFbnZpcm9ubWVudCgpOwogICAgIGFkZFRl
c3RQbHVnaW5zVG9QbHVnaW5TZWFyY2hQYXRoKGFyZ3ZbMF0pOwotICAgIGlmIChkdW1wUGl4ZWxz
KQorICAgIGlmIChkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QpCiAgICAgICAgIGluc3RhbGxTaWdu
YWxIYW5kbGVycygpOwogCiAgICAgaWYgKGZvcmNlQ29tcGxleFRleHQpCkBAIC04NzQsNyArODcz
LDcgQEAgdm9pZCBkdW1wUmVuZGVyVHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdKQog
ICAgICAgICBwcmludFNlcGFyYXRvcnMgPSBZRVM7CiAgICAgICAgIHJ1blRlc3RpbmdTZXJ2ZXJM
b29wKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnRTZXBhcmF0b3JzID0gKG9wdGluZCA8
IGFyZ2MtMSB8fCAoZHVtcFBpeGVscyAmJiBkdW1wVHJlZSkpOworICAgICAgICBwcmludFNlcGFy
YXRvcnMgPSAob3B0aW5kIDwgYXJnYyAtIDEgfHwgKGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCAm
JiBkdW1wVHJlZSk7CiAgICAgICAgIGZvciAoaW50IGkgPSBvcHRpbmQ7IGkgIT0gYXJnYzsgKytp
KQogICAgICAgICAgICAgcnVuVGVzdChhcmd2W2ldKTsKICAgICB9CkBAIC0xMTk1LDcgKzExOTQs
NyBAQCB2b2lkIGR1bXAoKQogICAgICAgICB9ICAgICAgICAgICAgCiAgICAgfQogCi0gICAgaWYg
KGR1bXBQaXhlbHMgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5nZW5lcmF0ZVBpeGVsUmVzdWx0
cygpKQorICAgIGlmIChkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgJiYgZ0xheW91dFRlc3RDb250
cm9sbGVyLT5nZW5lcmF0ZVBpeGVsUmVzdWx0cygpKQogICAgICAgICAvLyBGSVhNRTogd2hlbiBp
c1ByaW50aW5nIGlzIHNldCwgZHVtcCB0aGUgaW1hZ2Ugd2l0aCBwYWdlIHNlcGFyYXRvcnMuCiAg
ICAgICAgIGR1bXBXZWJWaWV3QXNQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKGdMYXlvdXRU
ZXN0Q29udHJvbGxlci0+ZXhwZWN0ZWRQaXhlbEhhc2goKSk7CiAKQEAgLTEyNzYsMTkgKzEyNzUs
MTMgQEAgc3RhdGljIHZvaWQgcmVzZXRXZWJWaWV3VG9Db25zaXN0ZW50U3RhdGVCZWZvcmVUZXN0
aW5nKCkKICAgICBbbWFpbkZyYW1lIF9jbGVhck9wZW5lcl07CiB9CiAKLXN0YXRpYyB2b2lkIHJ1
blRlc3QoY29uc3Qgc3RyaW5nJiB0ZXN0UGF0aE9yVVJMKQorc3RhdGljIHZvaWQgcnVuVGVzdChj
b25zdCBzdHJpbmcmIGlucHV0TGluZSkKIHsKICAgICBBU1NFUlQoIXRlc3RQYXRoT3JVUkwuZW1w
dHkoKSk7Ci0gICAgCi0gICAgLy8gTG9vayBmb3IgIiciIGFzIGEgc2VwYXJhdG9yIGJldHdlZW4g
dGhlIHBhdGggb3IgVVJMLCBhbmQgdGhlIHBpeGVsIGR1bXAgaGFzaCB0aGF0IGZvbGxvd3MuCi0g
ICAgc3RyaW5nIHBhdGhPclVSTCh0ZXN0UGF0aE9yVVJMKTsKLSAgICBzdHJpbmcgZXhwZWN0ZWRQ
aXhlbEhhc2g7Ci0gICAgCi0gICAgc2l6ZV90IHNlcGFyYXRvclBvcyA9IHBhdGhPclVSTC5maW5k
KCInIik7Ci0gICAgaWYgKHNlcGFyYXRvclBvcyAhPSBzdHJpbmc6Om5wb3MpIHsKLSAgICAgICAg
cGF0aE9yVVJMID0gc3RyaW5nKHRlc3RQYXRoT3JVUkwsIDAsIHNlcGFyYXRvclBvcyk7Ci0gICAg
ICAgIGV4cGVjdGVkUGl4ZWxIYXNoID0gc3RyaW5nKHRlc3RQYXRoT3JVUkwsIHNlcGFyYXRvclBv
cyArIDEpOwotICAgIH0KKworICAgIFRlc3RDb21tYW5kIGNvbW1hbmQgPSBwYXJzZUlucHV0TGlu
ZShpbnB1dExpbmUpOworICAgIGNvbnN0IHN0cmluZyYgcGF0aE9yVVJMID0gY29tbWFuZC5wYXRo
T3JVUkw7CisgICAgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gY29tbWFuZC5zaG91bGREdW1w
UGl4ZWxzOwogCiAgICAgTlNTdHJpbmcgKnBhdGhPclVSTFN0cmluZyA9IFtOU1N0cmluZyBzdHJp
bmdXaXRoVVRGOFN0cmluZzpwYXRoT3JVUkwuY19zdHIoKV07CiAgICAgaWYgKCFwYXRoT3JVUkxT
dHJpbmcpIHsKQEAgLTEzMTAsNyArMTMwMyw3IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qg
c3RyaW5nJiB0ZXN0UGF0aE9yVVJMKQogICAgIAogICAgIHJlc2V0V2ViVmlld1RvQ29uc2lzdGVu
dFN0YXRlQmVmb3JlVGVzdGluZygpOwogCi0gICAgZ0xheW91dFRlc3RDb250cm9sbGVyID0gTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmNyZWF0ZSh0ZXN0VVJMLCBleHBlY3RlZFBpeGVsSGFzaCk7Cisg
ICAgZ0xheW91dFRlc3RDb250cm9sbGVyID0gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNyZWF0ZSh0
ZXN0VVJMLCBjb21tYW5kLmV4cGVjdGVkUGl4ZWxIYXNoKTsKICAgICB0b3BMb2FkaW5nRnJhbWUg
PSBuaWw7CiAgICAgQVNTRVJUKCFkcmFnZ2luZ0luZm8pOyAvLyB0aGUgcHJldmlvdXMgdGVzdCBz
aG91bGQgaGF2ZSBjYWxsZWQgZXZlbnRTZW5kZXIubW91c2VVcCB0byBkcm9wIQogICAgIHJlbGVh
c2VBbmRaZXJvKCZkcmFnZ2luZ0luZm8pOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJl
bmRlclRyZWUucHJvCmluZGV4IGY0N2ZiNDM0NGI5ZWY4M2E1YWE0NmJiNTY4M2Q5MjMxNDk0YWEx
MjUuLjgzMzg3MGJjYWM5YTgyZWRjZWU4MWVkNWRiYTMxOTEwYWNmMGYwZjIgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlLnBybworKysgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5wcm8KQEAgLTI1LDYgKzI1LDcgQEAgY29u
dGFpbnMoREVGSU5FUywgSEFWRV9GT05UQ09ORklHPTEpOiBQS0dDT05GSUcgKz0gZm9udGNvbmZp
ZwogCiBIRUFERVJTICs9IFwKICAgICAkJFBXRC8uLi9Xb3JrUXVldWUuaCBcCisgICAgJCRQV0Qv
Li4vRHVtcFJlbmRlclRyZWUuaCBcCiAgICAgRHVtcFJlbmRlclRyZWVRdC5oIFwKICAgICBFdmVu
dFNlbmRlclF0LmggXAogICAgIFRleHRJbnB1dENvbnRyb2xsZXJRdC5oIFwKQEAgLTM2LDYgKzM3
LDcgQEAgSEVBREVSUyArPSBcCiAKIFNPVVJDRVMgKz0gXAogICAgICQkUFdELy4uL1dvcmtRdWV1
ZS5jcHAgXAorICAgICQkUFdELy4uL0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcCBcCiAgICAgRHVt
cFJlbmRlclRyZWVRdC5jcHAgXAogICAgIEV2ZW50U2VuZGVyUXQuY3BwIFwKICAgICBUZXh0SW5w
dXRDb250cm9sbGVyUXQuY3BwIFwKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0
L0R1bXBSZW5kZXJUcmVlUXQuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRl
clRyZWVRdC5jcHAKaW5kZXggMGVjZjYyMmYzZjhkZGE1NmM0Yzg4Y2VmY2YwOGEzYzk4Y2YyMzdj
NC4uNWZkMjM4NjAxYzIwMTI4NjIxNTkyODkzYjYyYTRiOTRkMjdmZDMwNiAxMDA3NTUKLS0tIGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAKKysrIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAK
IAogI2luY2x1ZGUgImNvbmZpZy5oIgogCisjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKICNp
bmNsdWRlICJEdW1wUmVuZGVyVHJlZVF0LmgiCiAjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQuaCIKICNpbmNsdWRlICJFdmVudFNlbmRlclF0LmgiCkBAIC02OTAsNDQgKzY5MSwyNyBA
QCB2b2lkIER1bXBSZW5kZXJUcmVlOjpsb2FkTmV4dFRlc3RJblN0YW5kQWxvbmVNb2RlKCkKIAog
dm9pZCBEdW1wUmVuZGVyVHJlZTo6cHJvY2Vzc0xpbmUoY29uc3QgUVN0cmluZyAmaW5wdXQpCiB7
Ci0gICAgUVN0cmluZyBsaW5lID0gaW5wdXQ7Ci0KLSAgICBtX2R1bXBQaXhlbHNGb3JDdXJyZW50
VGVzdCA9IGZhbHNlOwotICAgIG1fZXhwZWN0ZWRIYXNoID0gUVN0cmluZygpOwotICAgIC8vIHNp
bmdsZSBxdW90ZSBtYXJrcyB0aGUgcGl4ZWwgZHVtcCBoYXNoCi0gICAgaW50IGluZGV4T2ZGaXJz
dFNlcGFyYXRvciA9IGxpbmUuaW5kZXhPZignXCcnKTsKLSAgICBpbnQgaW5kZXhPZlNlY29uZFNl
cGFyYXRvciA9IGxpbmUuaW5kZXhPZignXCcnLCBpbmRleE9mRmlyc3RTZXBhcmF0b3IgKyAxKTsK
LSAgICBpZiAoaW5kZXhPZkZpcnN0U2VwYXJhdG9yID4gLTEpIHsKLSAgICAgICAgaW50IGluZGV4
T2ZQaXhlbEhhc2ggPSBpbmRleE9mRmlyc3RTZXBhcmF0b3IgKyAxOwotCi0gICAgICAgIC8vIE5S
V1QgcGFzc2VzIC0tcGl4ZWwtdGVzdCBpZiB3ZSBzaG91bGQgZHVtcCBwaXhlbHMgZm9yIHRoZSB0
ZXN0LgotICAgICAgICBjb25zdCBRU3RyaW5nIGV4cGVjdGVkQXJnKFFMYXRpbjFTdHJpbmcoIi0t
cGl4ZWwtdGVzdCIpKTsKLSAgICAgICAgUVN0cmluZyBhcmdUZXN0ID0gbGluZS5taWQoaW5kZXhP
ZkZpcnN0U2VwYXJhdG9yICsgMSwgZXhwZWN0ZWRBcmcubGVuZ3RoKCkpOwotICAgICAgICBpZiAo
YXJnVGVzdCA9PSBleHBlY3RlZEFyZykgewotICAgICAgICAgICAgbV9kdW1wUGl4ZWxzRm9yQ3Vy
cmVudFRlc3QgPSB0cnVlOwotICAgICAgICAgICAgaW5kZXhPZlBpeGVsSGFzaCA9IGluZGV4T2ZT
ZWNvbmRTZXBhcmF0b3IgPT0gLTEgPyAtMSA6IGluZGV4T2ZTZWNvbmRTZXBhcmF0b3IgKyAxOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChpbmRleE9mUGl4ZWxIYXNoICE9IC0xICYmIGluZGV4T2ZQ
aXhlbEhhc2ggPCBsaW5lLnNpemUoKSkKLSAgICAgICAgICAgIG1fZXhwZWN0ZWRIYXNoID0gbGlu
ZS5taWQoaW5kZXhPZlBpeGVsSGFzaCk7Ci0gICAgICAgIGxpbmUucmVtb3ZlKGluZGV4T2ZGaXJz
dFNlcGFyYXRvciwgbGluZS5sZW5ndGgoKSk7Ci0gICAgfQotCi0gICAgaWYgKGxpbmUuc3RhcnRz
V2l0aChRTGF0aW4xU3RyaW5nKCJodHRwOiIpKQotICAgICAgICAgICAgfHwgbGluZS5zdGFydHNX
aXRoKFFMYXRpbjFTdHJpbmcoImh0dHBzOiIpKQotICAgICAgICAgICAgfHwgbGluZS5zdGFydHNX
aXRoKFFMYXRpbjFTdHJpbmcoImZpbGU6IikpCi0gICAgICAgICAgICB8fCBsaW5lID09IFFMYXRp
bjFTdHJpbmcoImFib3V0OmJsYW5rIikpIHsKLSAgICAgICAgb3BlbihRVXJsKGxpbmUpKTsKKyAg
ICBUZXN0Q29tbWFuZCBjb21tYW5kID0gcGFyc2VJbnB1dExpbmUoc3RkOjpzdHJpbmcoaW5wdXQu
dG9MYXRpbjEoKS5jb25zdERhdGEoKSkpOworICAgIFFTdHJpbmcgcGF0aE9yVVJMID0gUUxhdGlu
MVN0cmluZyhjb21tYW5kLnBhdGhPclVSTC5jX3N0cigpKTsKKyAgICBtX2R1bXBQaXhlbHNGb3JD
dXJyZW50VGVzdCA9IGNvbW1hbmQuc2hvdWxkRHVtcFBpeGVsczsKKyAgICBtX2V4cGVjdGVkSGFz
aCA9IFFMYXRpbjFTdHJpbmcoY29tbWFuZC5leHBlY3RlZFBpeGVsSGFzaC5jX3N0cigpKTsKKwor
ICAgIGlmIChwYXRoT3JVUkwuc3RhcnRzV2l0aChRTGF0aW4xU3RyaW5nKCJodHRwOiIpKQorICAg
ICAgICAgICAgfHwgcGF0aE9yVVJMLnN0YXJ0c1dpdGgoUUxhdGluMVN0cmluZygiaHR0cHM6Iikp
CisgICAgICAgICAgICB8fCBwYXRoT3JVUkwuc3RhcnRzV2l0aChRTGF0aW4xU3RyaW5nKCJmaWxl
OiIpKQorICAgICAgICAgICAgfHwgcGF0aE9yVVJMID09IFFMYXRpbjFTdHJpbmcoImFib3V0OmJs
YW5rIikpIHsKKyAgICAgICAgb3BlbihRVXJsKHBhdGhPclVSTCkpOwogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIFFGaWxlSW5mbyBmaShsaW5lKTsKKyAgICAgICAgUUZpbGVJbmZvIGZpKHBhdGhPclVS
TCk7CiAKICAgICAgICAgaWYgKCFmaS5leGlzdHMoKSkgewogICAgICAgICAgICAgUURpciBjdXJy
ZW50RGlyID0gUURpcjo6Y3VycmVudFBhdGgoKTsKIAogICAgICAgICAgICAgLy8gVHJ5IHRvIGJl
IHNtYXJ0IGFib3V0IHdoZXJlIHRoZSB0ZXN0IGlzIGxvY2F0ZWQKICAgICAgICAgICAgIGlmIChj
dXJyZW50RGlyLmRpck5hbWUoKSA9PSBRTGF0aW4xU3RyaW5nKCJMYXlvdXRUZXN0cyIpKQotICAg
ICAgICAgICAgICAgIGZpID0gUUZpbGVJbmZvKGN1cnJlbnREaXIsIGxpbmUucmVwbGFjZShRUmVn
RXhwKCIuKj9MYXlvdXRUZXN0cy8oLiopIiksICJcXDEiKSk7Ci0gICAgICAgICAgICBlbHNlIGlm
ICghbGluZS5jb250YWlucyhRTGF0aW4xU3RyaW5nKCJMYXlvdXRUZXN0cyIpKSkKLSAgICAgICAg
ICAgICAgICBmaSA9IFFGaWxlSW5mbyhjdXJyZW50RGlyLCBsaW5lLnByZXBlbmQoUUxhdGluMVN0
cmluZygiTGF5b3V0VGVzdHMvIikpKTsKKyAgICAgICAgICAgICAgICBmaSA9IFFGaWxlSW5mbyhj
dXJyZW50RGlyLCBwYXRoT3JVUkwucmVwbGFjZShRUmVnRXhwKCIuKj9MYXlvdXRUZXN0cy8oLiop
IiksICJcXDEiKSk7CisgICAgICAgICAgICBlbHNlIGlmICghcGF0aE9yVVJMLmNvbnRhaW5zKFFM
YXRpbjFTdHJpbmcoIkxheW91dFRlc3RzIikpKQorICAgICAgICAgICAgICAgIGZpID0gUUZpbGVJ
bmZvKGN1cnJlbnREaXIsIHBhdGhPclVSTC5wcmVwZW5kKFFMYXRpbjFTdHJpbmcoIkxheW91dFRl
c3RzLyIpKSk7CiAKICAgICAgICAgICAgIGlmICghZmkuZXhpc3RzKCkpIHsKICAgICAgICAgICAg
ICAgICBlbWl0IHJlYWR5KCk7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4v
RHVtcFJlbmRlclRyZWUuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJU
cmVlLmNwcAppbmRleCBmNDAyYTAyY2EzNjJjNTI3OWRlNWE1YzhjMWUwY2U5ZGYzNjJhYmFkLi4z
MTI0MzBkNTY5ODk1NDhiYzNlY2FkMTNmOGRmMTgzMDk2YzE3Yzg1IDEwMDY0NAotLS0gYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwCisrKyBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAKQEAgLTgwLDcgKzgwLDcgQEAgc3RhdGlj
IExQQ1dTVFIgZm9udHNFbnZpcm9ubWVudFZhcmlhYmxlID0gTCJXRUJLSVRfVEVTVEZPTlRTIjsK
IGNvbnN0IExQQ1dTVFIga0R1bXBSZW5kZXJUcmVlQ2xhc3NOYW1lID0gTCJEdW1wUmVuZGVyVHJl
ZVdpbmRvdyI7CiAKIHN0YXRpYyBib29sIGR1bXBUcmVlID0gdHJ1ZTsKLXN0YXRpYyBib29sIGR1
bXBQaXhlbHM7CitzdGF0aWMgYm9vbCBkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3Q7CiBzdGF0aWMg
Ym9vbCBkdW1wQWxsUGl4ZWxzOwogc3RhdGljIGJvb2wgcHJpbnRTZXBhcmF0b3JzOwogc3RhdGlj
IGJvb2wgbGVha0NoZWNraW5nID0gZmFsc2U7CkBAIC03NTksNyArNzU5LDcgQEAgdm9pZCBkdW1w
KCkKICAgICAgICAgZmZsdXNoKHN0ZGVycik7CiAgICAgfQogCi0gICAgaWYgKGR1bXBQaXhlbHMK
KyAgICBpZiAoZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0CiAgICAgICYmIGdMYXlvdXRUZXN0Q29u
dHJvbGxlci0+Z2VuZXJhdGVQaXhlbFJlc3VsdHMoKQogICAgICAmJiAhZ0xheW91dFRlc3RDb250
cm9sbGVyLT5kdW1wRE9NQXNXZWJBcmNoaXZlKCkKICAgICAgJiYgIWdMYXlvdXRUZXN0Q29udHJv
bGxlci0+ZHVtcFNvdXJjZUFzV2ViQXJjaGl2ZSgpKQpAQCAtOTQ4LDIwICs5NDgsMTQgQEAgc3Rh
dGljIHZvaWQgc2l6ZVdlYlZpZXdGb3JDdXJyZW50VGVzdCgpCiAgICAgOjpTZXRXaW5kb3dQb3Mo
d2ViVmlld1dpbmRvdywgMCwgMCwgMCwgd2lkdGgsIGhlaWdodCwgU1dQX05PTU9WRSk7CiB9CiAK
LXN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiB0ZXN0UGF0aE9yVVJMKQorc3RhdGlj
IHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIGlucHV0TGluZSkKIHsKKyAgICBUZXN0Q29tbWFu
ZCBjb21tYW5kID0gcGFyc2VJbnB1dExpbmUoaW5wdXRMaW5lKTsKKyAgICBjb25zdCBzdHJpbmcm
IHBhdGhPclVSTCA9IGNvbW1hbmQucGF0aE9yVVJMOworICAgIGR1bXBQaXhlbHNGb3JDdXJyZW50
VGVzdCA9IGNvbW1hbmQuc2hvdWxkRHVtcFBpeGVsczsKKwogICAgIHN0YXRpYyBCU1RSIG1ldGhv
ZEJTdHIgPSBTeXNBbGxvY1N0cmluZyhURVhUKCJHRVQiKSk7CiAKLSAgICAvLyBMb29rIGZvciAi
JyIgYXMgYSBzZXBhcmF0b3IgYmV0d2VlbiB0aGUgcGF0aCBvciBVUkwsIGFuZCB0aGUgcGl4ZWwg
ZHVtcCBoYXNoIHRoYXQgZm9sbG93cy4KLSAgICBzdHJpbmcgcGF0aE9yVVJMKHRlc3RQYXRoT3JV
UkwpOwotICAgIHN0cmluZyBleHBlY3RlZFBpeGVsSGFzaDsKLSAgICAKLSAgICBzaXplX3Qgc2Vw
YXJhdG9yUG9zID0gcGF0aE9yVVJMLmZpbmQoIiciKTsKLSAgICBpZiAoc2VwYXJhdG9yUG9zICE9
IHN0cmluZzo6bnBvcykgewotICAgICAgICBwYXRoT3JVUkwgPSBzdHJpbmcodGVzdFBhdGhPclVS
TCwgMCwgc2VwYXJhdG9yUG9zKTsKLSAgICAgICAgZXhwZWN0ZWRQaXhlbEhhc2ggPSBzdHJpbmco
dGVzdFBhdGhPclVSTCwgc2VwYXJhdG9yUG9zICsgMSk7Ci0gICAgfQotICAgIAogICAgIEJTVFIg
dXJsQlN0cjsKICAKICAgICBDRlN0cmluZ1JlZiBzdHIgPSBDRlN0cmluZ0NyZWF0ZVdpdGhDU3Ry
aW5nKDAsIHBhdGhPclVSTC5jX3N0cigpLCBrQ0ZTdHJpbmdFbmNvZGluZ1dpbmRvd3NMYXRpbjEp
OwpAQCAtOTgzLDcgKzk3Nyw3IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiB0
ZXN0UGF0aE9yVVJMKQogCiAgICAgQ0ZSZWxlYXNlKHVybCk7CiAKLSAgICA6OmdMYXlvdXRUZXN0
Q29udHJvbGxlciA9IExheW91dFRlc3RDb250cm9sbGVyOjpjcmVhdGUocGF0aE9yVVJMLCBleHBl
Y3RlZFBpeGVsSGFzaCk7CisgICAgOjpnTGF5b3V0VGVzdENvbnRyb2xsZXIgPSBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6Y3JlYXRlKHBhdGhPclVSTCwgY29tbWFuZC5leHBlY3RlZFBpeGVsSGFzaCk7
CiAgICAgZG9uZSA9IGZhbHNlOwogICAgIHRvcExvYWRpbmdGcmFtZSA9IDA7CiAKQEAgLTEzMzcs
MTEgKzEzMzEsNiBAQCBleHRlcm4gIkMiIF9fZGVjbHNwZWMoZGxsZXhwb3J0KSBpbnQgV0lOQVBJ
IGRsbExhdW5jaGVyRW50cnlQb2ludChpbnQgYXJnYywgY29ucwogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIXN0cmljbXAoYXJndltpXSwgIi0tcGl4ZWwt
dGVzdHMiKSkgewotICAgICAgICAgICAgZHVtcFBpeGVscyA9IHRydWU7Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotCiAgICAgICAgIGlmICghc3RyaWNtcChhcmd2W2ldLCAiLS1j
b21wbGV4LXRleHQiKSkgewogICAgICAgICAgICAgZm9yY2VDb21wbGV4VGV4dCA9IHRydWU7CiAg
ICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dp
bi9EdW1wUmVuZGVyVHJlZS52Y3Byb2ogYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJl
bmRlclRyZWUudmNwcm9qCmluZGV4IDQ4NDNjMzkwZTdjNmI1MmUyNGUyYjM3NzA2NTQ3OGQwNzZj
MDk3ZmEuLjdlMjQyYTFjZGU0YTJmY2NjMWEyNDcxYjYxNjliM2UzM2VhZGNkY2QgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS52Y3Byb2oKKysrIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLnZjcHJvagpAQCAtNTYzLDYg
KzU2MywxMCBAQAogCQkJPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4u
XER1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcCIKKwkJCT4KKwkJPC9GaWxlPgorCQk8RmlsZQogCQkJ
UmVsYXRpdmVQYXRoPSIuLlxEdW1wUmVuZGVyVHJlZVByZWZpeC5oIgogCQkJPgogCQk8L0ZpbGU+
CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93c2NyaXB0IGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvd3NjcmlwdAppbmRleCA2NDVjN2Q2NDE1OThhZmUyZjE0ZTE2M2FkNGNjZWYyN2M1
MjhiNzY0Li4yYjc1Y2FjZDg2NzE3NjkzOTc2MWI3NzEzZGRlNDEzNGY2YWZiZDVlIDEwMDY0NAot
LS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93c2NyaXB0CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL3dzY3JpcHQKQEAgLTQwLDYgKzQwLDcgQEAgaW5jbHVkZV9wYXRocyA9IFsKICAgICAgICAg
ICAgICAgICAnd3gnCiAgICAgICAgICAgICAgICAgXQogc291cmNlcyA9IFsKKyAgICAgICAgICAg
ICdEdW1wUmVuZGVyVHJlZUNvbW1vbi5jcHAnCiAgICAgICAgICAgICAnTGF5b3V0VGVzdENvbnRy
b2xsZXIuY3BwJywKICAgICAgICAgICAgICdXb3JrUXVldWUuY3BwJywKICAgICAgICAgICAgICd3
eC9EdW1wUmVuZGVyVHJlZVd4LmNwcCcsCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS93eC9EdW1wUmVuZGVyVHJlZVd4LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0R1bXBS
ZW5kZXJUcmVlV3guY3BwCmluZGV4IDMxYWRkMTFhMmViNzRkMWY0ZDgzMjk0NzlmNDE5ZjEwN2Zm
YmE4OGYuLjQ1Yjg1MmQ4OGFiOWJkYTI5MWZiMWVkMjc3YWNhNzUxZGZkMzUwOTcgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0R1bXBSZW5kZXJUcmVlV3guY3BwCisrKyBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL3d4L0R1bXBSZW5kZXJUcmVlV3guY3BwCkBAIC01MCw3ICs1MCw3
IEBACiB2b2xhdGlsZSBib29sIGRvbmUgPSB0cnVlOwogdm9sYXRpbGUgYm9vbCBub3RpZmllZCA9
IGZhbHNlOwogc3RhdGljIGJvb2wgcHJpbnRTZXBhcmF0b3JzID0gdHJ1ZTsKLXN0YXRpYyBpbnQg
ZHVtcFBpeGVsczsKK3N0YXRpYyBpbnQgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0Owogc3RhdGlj
IGludCBkdW1wVHJlZSA9IDE7CiB0aW1lX3Qgc3RhcnRUaW1lOyAvLyB0byBkZXRlY3QgdGltZW91
dHMgLyBmYWlsZWQgdGVzdHMKIApAQCAtMjAzLDcgKzIwMyw3IEBAIHZvaWQgZHVtcCgpCiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBpZiAoZHVtcFBpeGVscworICAgIGlmIChkdW1wUGl4ZWxzRm9y
Q3VycmVudFRlc3QKICAgICAgICAgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5nZW5lcmF0ZVBp
eGVsUmVzdWx0cygpCiAgICAgICAgICYmICFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBET01B
c1dlYkFyY2hpdmUoKQogICAgICAgICAmJiAhZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wU291
cmNlQXNXZWJBcmNoaXZlKCkpIHsKQEAgLTIxOCwyNiArMjE4LDIxIEBAIHZvaWQgZHVtcCgpCiAg
ICAgZ0xheW91dFRlc3RDb250cm9sbGVyLmNsZWFyKCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ1blRl
c3QoY29uc3Qgd3hTdHJpbmcgdGVzdFBhdGhPclVSTCkKK3N0YXRpYyB2b2lkIHJ1blRlc3QoY29u
c3Qgd3hTdHJpbmcgaW5wdXRMaW5lKQogewogICAgIGRvbmUgPSBmYWxzZTsKICAgICB0aW1lKCZz
dGFydFRpbWUpOwotICAgIHN0cmluZyBwYXRoT3JVUkxTdHJpbmcodGVzdFBhdGhPclVSTC5jaGFy
X3N0cigpKTsKLSAgICBzdHJpbmcgcGF0aE9yVVJMKHBhdGhPclVSTFN0cmluZyk7Ci0gICAgc3Ry
aW5nIGV4cGVjdGVkUGl4ZWxIYXNoOwotCi0gICAgc2l6ZV90IHNlcGFyYXRvclBvcyA9IHBhdGhP
clVSTC5maW5kKCInIik7Ci0gICAgaWYgKHNlcGFyYXRvclBvcyAhPSBzdHJpbmc6Om5wb3MpIHsK
LSAgICAgICAgcGF0aE9yVVJMID0gc3RyaW5nKHBhdGhPclVSTFN0cmluZywgMCwgc2VwYXJhdG9y
UG9zKTsKLSAgICAgICAgZXhwZWN0ZWRQaXhlbEhhc2ggPSBzdHJpbmcocGF0aE9yVVJMU3RyaW5n
LCBzZXBhcmF0b3JQb3MgKyAxKTsKLSAgICB9CisKKyAgICBUZXN0Q29tbWFuZCBjb21tYW5kID0g
cGFyc2VJbnB1dExpbmUoc3RkOjpzdHJpbmcoaW5wdXRMaW5lLlRvQXNjaWkoKSkpOworICAgIHN0
cmluZyYgcGF0aE9yVVJMID0gY29tbWFuZC5wYXRoT3JVUkw7CisgICAgZHVtcFBpeGVsc0ZvckN1
cnJlbnRUZXN0ID0gY29tbWFuZC5zaG91bGREdW1wUGl4ZWxzOwogICAgIAogICAgIC8vIENVUkwg
aXNuJ3QgaGFwcHkgaWYgd2UgZG9uJ3QgaGF2ZSBhIHByb3RvY29sLgogICAgIHNpemVfdCBodHRw
ID0gcGF0aE9yVVJMLmZpbmQoImh0dHA6Ly8iKTsKICAgICBpZiAoaHR0cCA9PSBzdHJpbmc6Om5w
b3MpCiAgICAgICAgIHBhdGhPclVSTC5pbnNlcnQoMCwgImZpbGU6Ly8iKTsKICAgICAKLSAgICBn
TGF5b3V0VGVzdENvbnRyb2xsZXIgPSBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y3JlYXRlKHBhdGhP
clVSTCwgZXhwZWN0ZWRQaXhlbEhhc2gpOworICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlciA9IExh
eW91dFRlc3RDb250cm9sbGVyOjpjcmVhdGUocGF0aE9yVVJMLCBjb21tYW5kLmV4cGVjdGVkUGl4
ZWxIYXNoKTsKICAgICBpZiAoIWdMYXlvdXRUZXN0Q29udHJvbGxlcikgewogICAgICAgICB3eFRo
ZUFwcC0+RXhpdE1haW5Mb29wKCk7CiAgICAgfQpAQCAtMjgyLDExICsyNzcsNiBAQCBib29sIE15
QXBwOjpPbkluaXQoKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIGlmICghb3B0aW9uLkNtcE5vQ2FzZShfVCgiLS1waXhlbC10ZXN0cyIpKSkgewot
ICAgICAgICAgICAgZHVtcFBpeGVscyA9IHRydWU7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotICAgICAgICAKICAgICAgICAgaWYgKCFvcHRpb24uQ21wTm9DYXNlKF9UKCItLXRy
ZWUiKSkpIHsKICAgICAgICAgICAgIGR1bXBUcmVlID0gdHJ1ZTsKICAgICAgICAgICAgIGNvbnRp
bnVlOwpAQCAtMzIzLDcgKzMxMyw3IEBAIGJvb2wgTXlBcHA6Ok9uSW5pdCgpCiAgICAgICAgIH0K
ICAgICAKICAgICB9IGVsc2UgewotICAgICAgICBwcmludFNlcGFyYXRvcnMgPSAob3B0aW5kIDwg
YXJnYy0xIHx8IChkdW1wUGl4ZWxzICYmIGR1bXBUcmVlKSk7CisgICAgICAgIHByaW50U2VwYXJh
dG9ycyA9IChvcHRpbmQgPCBhcmdjIC0gMSB8fCAoZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ICYm
IGR1bXBUcmVlKSk7CiAgICAgICAgIGZvciAoaW50IGkgPSBvcHRpbmQ7IGkgIT0gYXJnYzsgKytp
KSB7CiAgICAgICAgICAgICBydW5UZXN0KHd4VGhlQXBwLT5hcmd2WzFdKTsKICAgICAgICAgfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0cyBiL1Rvb2xzL1Nj
cmlwdHMvb2xkLXJ1bi13ZWJraXQtdGVzdHMKaW5kZXggMDk0NDNjODdjMDJmMWU4Y2Y1YmRlNmQx
YjA0NWM0ZGI5YmFiMDg4Mi4uZDcwY2U0NTIwMGIyZjFlMzFkNzFkZjE1MDZhZDgzMGFhNjdkYjMz
ZSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0cworKysgYi9U
b29scy9TY3JpcHRzL29sZC1ydW4td2Via2l0LXRlc3RzCkBAIC03NDgsMTIgKzc0OCwxNSBAQCBm
b3IgbXkgJHRlc3QgKEB0ZXN0cykgewogICAgIHByaW50ICR0ZXN0c19ydW5fZmggIiR0ZXN0XG4i
OwogCiAgICAgIyBUcnkgdG8gcmVhZCBleHBlY3RlZCBoYXNoIGZpbGUgZm9yIHBpeGVsIHRlc3Rz
Ci0gICAgbXkgJHN1ZmZpeEV4cGVjdGVkSGFzaCA9ICIiOwotICAgIGlmICgkcGl4ZWxUZXN0cyAm
JiAhJHJlc2V0UmVzdWx0cykgewotICAgICAgICBteSAkZXhwZWN0ZWRQaXhlbERpciA9IGV4cGVj
dGVkRGlyZWN0b3J5Rm9yVGVzdCgkYmFzZSwgMCwgInBuZyIpOwotICAgICAgICBpZiAobXkgJGV4
cGVjdGVkSGFzaCA9IHJlYWRDaGVja3N1bUZyb21QbmcoRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkZXhw
ZWN0ZWRQaXhlbERpciwgIiRiYXNlLSRleHBlY3RlZFRhZy5wbmciKSkpIHsKLSAgICAgICAgICAg
ICMgRm9ybWF0IGV4cGVjdGVkIGhhc2ggaW50byBhIHN1ZmZpeCBzdHJpbmcgdGhhdCBpcyBhcHBl
bmRlZCB0byB0aGUgcGF0aCAvIFVSTCBwYXNzZWQgdG8gRFJULgotICAgICAgICAgICAgJHN1ZmZp
eEV4cGVjdGVkSGFzaCA9ICInJGV4cGVjdGVkSGFzaCI7CisgICAgbXkgJHN1ZmZpeFBpeGVsVGVz
dCA9ICIiOworICAgIGlmICgkcGl4ZWxUZXN0cykgeworICAgICAgICAkc3VmZml4UGl4ZWxUZXN0
ID0gIjotLXBpeGVsLXRlc3QiOworICAgICAgICBpZiAoISRyZXNldFJlc3VsdHMpIHsKKyAgICAg
ICAgICAgIG15ICRleHBlY3RlZFBpeGVsRGlyID0gZXhwZWN0ZWREaXJlY3RvcnlGb3JUZXN0KCRi
YXNlLCAwLCAicG5nIik7CisgICAgICAgICAgICBpZiAobXkgJGV4cGVjdGVkSGFzaCA9IHJlYWRD
aGVja3N1bUZyb21QbmcoRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkZXhwZWN0ZWRQaXhlbERpciwgIiRi
YXNlLSRleHBlY3RlZFRhZy5wbmciKSkpIHsKKyAgICAgICAgICAgICAgICAjIEZvcm1hdCBleHBl
Y3RlZCBoYXNoIGludG8gYSBzdWZmaXggc3RyaW5nIHRoYXQgaXMgYXBwZW5kZWQgdG8gdGhlIHBh
dGggLyBVUkwgcGFzc2VkIHRvIERSVC4KKyAgICAgICAgICAgICAgICAkc3VmZml4UGl4ZWxUZXN0
ID0gIjotLXBpeGVsLXRlc3Q6JGV4cGVjdGVkSGFzaCI7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9CiAKQEAgLTc4OSwxMSArNzkyLDExIEBAIGZvciBteSAkdGVzdCAoQHRlc3RzKSB7
CiAgICAgICAgIH0gZWxzaWYgKCR0ZXN0ICF+IC9eaHR0cFwvdGVzdHNcL2xvY2FsXC8vICYmICR0
ZXN0ICF+IC9eaHR0cFwvdGVzdHNcL3NzbFwvLykgewogICAgICAgICAgICAgbXkgJHBhdGggPSBj
YW5vbnBhdGgoJHRlc3QpOwogICAgICAgICAgICAgJHBhdGggPX4gcy9eaHR0cFwvdGVzdHNcLy8v
OwotICAgICAgICAgICAgcHJpbnQgT1VUICJodHRwOi8vMTI3LjAuMC4xOiRodHRwZFBvcnQvJHBh
dGgkc3VmZml4RXhwZWN0ZWRIYXNoXG4iOworICAgICAgICAgICAgcHJpbnQgT1VUICJodHRwOi8v
MTI3LjAuMC4xOiRodHRwZFBvcnQvJHBhdGgkc3VmZml4UGl4ZWxUZXN0XG4iOwogICAgICAgICB9
IGVsc2lmICgkdGVzdCA9fiAvXmh0dHBcL3Rlc3RzXC9zc2xcLy8pIHsKICAgICAgICAgICAgIG15
ICRwYXRoID0gY2Fub25wYXRoKCR0ZXN0KTsKICAgICAgICAgICAgICRwYXRoID1+IHMvXmh0dHBc
L3Rlc3RzXC8vLzsKLSAgICAgICAgICAgIHByaW50IE9VVCAiaHR0cHM6Ly8xMjcuMC4wLjE6JGh0
dHBkU1NMUG9ydC8kcGF0aCRzdWZmaXhFeHBlY3RlZEhhc2hcbiI7CisgICAgICAgICAgICBwcmlu
dCBPVVQgImh0dHBzOi8vMTI3LjAuMC4xOiRodHRwZFNTTFBvcnQvJHBhdGgkc3VmZml4UGl4ZWxU
ZXN0XG4iOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbXkgJHRlc3RQYXRoID0gIiR0
ZXN0RGlyZWN0b3J5LyR0ZXN0IjsKICAgICAgICAgICAgIGlmIChpc0N5Z3dpbigpKSB7CkBAIC04
MDEsNyArODA0LDcgQEAgZm9yIG15ICR0ZXN0IChAdGVzdHMpIHsKICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgJHRlc3RQYXRoID0gY2Fub25wYXRoKCR0ZXN0UGF0aCk7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmludCBPVVQgIiR0ZXN0UGF0aCRzdWZmaXhFeHBl
Y3RlZEhhc2hcbiI7CisgICAgICAgICAgICBwcmludCBPVVQgIiR0ZXN0UGF0aCRzdWZmaXhQaXhl
bFRlc3RcbiI7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBteSAkdGVzdFBhdGgg
PSAiJHRlc3REaXJlY3RvcnkvJHRlc3QiOwpAQCAtODEwLDcgKzgxMyw3IEBAIGZvciBteSAkdGVz
dCAoQHRlc3RzKSB7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAkdGVzdFBhdGggPSBj
YW5vbnBhdGgoJHRlc3RQYXRoKTsKICAgICAgICAgfQotICAgICAgICBwcmludCBPVVQgIiR0ZXN0
UGF0aCRzdWZmaXhFeHBlY3RlZEhhc2hcbiIgaWYgZGVmaW5lZCAkdGVzdFBhdGg7CisgICAgICAg
IHByaW50IE9VVCAiJHRlc3RQYXRoJHN1ZmZpeFBpeGVsVGVzdFxuIiBpZiBkZWZpbmVkICR0ZXN0
UGF0aDsKICAgICB9CiAKICAgICAjIER1bXBSZW5kZXJUcmVlIGlzIGV4cGVjdGVkIHRvIGR1bXAg
dHdvICJibG9ja3MiIHRvIHN0ZG91dCBmb3IgZWFjaCB0ZXN0LgpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CmluZGV4IGFkNzBmMDQyZGU5ZWNi
NjAwNjNiZWE2ZjUwYzI4NWJmOWVmZDljMTIuLjk0MjE1NjI0ZmUyN2VhNDI1YWE3M2U4OTE1Nzdj
YzVlNmU5OTBlMjkgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvYmFzZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2Jhc2UucHkKQEAgLTEyNzcsMjEgKzEyNzcsOSBAQCBjbGFzcyBQb3J0KG9iamVjdCk6
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHN1aXRlLmFyZ3MKICAgICAgICAgcmV0dXJuIFtdCiAK
LSAgICBkZWYgc3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Blcl90ZXN0KHNlbGYpOgot
ICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ3dlYmtpdF90ZXN0X3J1bm5lcicpOgotICAgICAg
ICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIHNlbGYuX3N1cHBvcnRzX3N3aXRjaGlu
Z19waXhlbF90ZXN0c19wZXJfdGVzdCgpCi0KLSAgICBkZWYgX3N1cHBvcnRzX3N3aXRjaGluZ19w
aXhlbF90ZXN0c19wZXJfdGVzdChzZWxmKToKLSAgICAgICAgIyBGSVhNRTogYWxsIHBvcnRzIHNo
b3VsZCBzdXBwb3J0IGl0LgotICAgICAgICByZXR1cm4gRmFsc2UKLQogICAgIGRlZiBzaG91bGRf
cnVuX2FzX3BpeGVsX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCk6CiAgICAgICAgIGlmIG5vdCBzZWxm
Ll9vcHRpb25zLnBpeGVsX3Rlc3RzOgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAg
IGlmIG5vdCBzZWxmLnN1cHBvcnRzX3N3aXRjaGluZ19waXhlbF90ZXN0c19wZXJfdGVzdCgpOgot
ICAgICAgICAgICAgIyBDYW5ub3QgZG8gbW9yZSBmaWx0ZXJpbmcgd2l0aG91dCB0aGlzLgotICAg
ICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0
X2RpcmVjdG9yaWVzOgogICAgICAgICAgICAgcmV0dXJuIGFueSh0ZXN0X2lucHV0LnRlc3RfbmFt
ZS5zdGFydHN3aXRoKGRpcmVjdG9yeSkgZm9yIGRpcmVjdG9yeSBpbiBzZWxmLl9vcHRpb25zLnBp
eGVsX3Rlc3RfZGlyZWN0b3JpZXMpCiAgICAgICAgIHJldHVybiBzZWxmLl9zaG91bGRfcnVuX2Fz
X3BpeGVsX3Rlc3QodGVzdF9pbnB1dCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9kcml2ZXIucHkKaW5kZXggNzgxODIzYjhkNjcwYTZlYjhlNTJlMDc2
OGJlNjY0YjExZDYzMDMzYy4uMmViMWUxNGI1MmJjZDcyMzVmMzU1YzFhOTc0MDY4NmY5NWJjYzhk
NiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9k
cml2ZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9k
cml2ZXIucHkKQEAgLTI5Myw4ICsyOTMsNiBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKIAogICAg
ICAgICBjbWQuZXh0ZW5kKHNlbGYuX3BvcnQuZ2V0X29wdGlvbignYWRkaXRpb25hbF9kcnRfZmxh
ZycsIFtdKSkKIAotICAgICAgICBpZiBwaXhlbF90ZXN0cyBhbmQgbm90IHNlbGYuX3BvcnQuc3Vw
cG9ydHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Blcl90ZXN0KCk6Ci0gICAgICAgICAgICBjbWQu
YXBwZW5kKCctLXBpeGVsLXRlc3RzJykKICAgICAgICAgY21kLmV4dGVuZChwZXJfdGVzdF9hcmdz
KQogCiAgICAgICAgIGNtZC5hcHBlbmQoJy0nKQpAQCAtMzM2LDEyICszMzQsOSBAQCBjbGFzcyBE
cml2ZXIob2JqZWN0KToKICAgICAgICAgYXNzZXJ0IG5vdCBkcml2ZXJfaW5wdXQuaW1hZ2VfaGFz
aCBvciBkcml2ZXJfaW5wdXQuc2hvdWxkX3J1bl9waXhlbF90ZXN0CiAKICAgICAgICAgaWYgZHJp
dmVyX2lucHV0LnNob3VsZF9ydW5fcGl4ZWxfdGVzdDoKLSAgICAgICAgICAgIGlmIHNlbGYuX3Bv
cnQuc3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Blcl90ZXN0KCk6Ci0gICAgICAgICAg
ICAgICAgIyBXZSBkaWQgbm90IHN0YXJ0IHRoZSBkcml2ZXIgd2l0aCAtLXBpeGVsLXRlc3RzLCBp
bnN0ZWFkIHdlIHNwZWNpZnkgaXQgcGVyIHRlc3QuCi0gICAgICAgICAgICAgICAgIyAiJyIgaXMg
dGhlIHNlcGFyYXRvciBvZiBjb21tYW5kIGZpZWxkcy4KLSAgICAgICAgICAgICAgICBjb21tYW5k
ICs9ICInIiArICctLXBpeGVsLXRlc3QnCisgICAgICAgICAgICBjb21tYW5kICs9ICI6LS1waXhl
bC10ZXN0IgogICAgICAgICBpZiBkcml2ZXJfaW5wdXQuaW1hZ2VfaGFzaDoKLSAgICAgICAgICAg
IGNvbW1hbmQgKz0gIiciICsgZHJpdmVyX2lucHV0LmltYWdlX2hhc2gKKyAgICAgICAgICAgIGNv
bW1hbmQgKz0gIjoiICsgZHJpdmVyX2lucHV0LmltYWdlX2hhc2gKICAgICAgICAgcmV0dXJuIGNv
bW1hbmQgKyAiXG4iCiAKICAgICBkZWYgX3JlYWRfZmlyc3RfYmxvY2soc2VsZiwgZGVhZGxpbmUp
OgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9x
dC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcXQucHkKaW5k
ZXggZTIzOWM3ZTNhYWY2ZjYwMmIwYzM1MWVjMjJkY2ZhNjgwNjRlYTI2OS4uNmU3YjA5ODhkNWE3
N2VmYzVmYzM3MmZhNzUxNjc4MzQwMGE2OWYwOCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9xdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L3F0LnB5CkBAIC0xODQsNiArMTg0LDMgQEAgY2xhc3MgUXRQ
b3J0KFBvcnQpOgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIHJldHVybiByZXN1
bHQKIAotICAgIGRlZiBfc3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Blcl90ZXN0KHNl
bGYpOgotICAgICAgICByZXR1cm4gVHJ1ZQotCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkKaW5kZXggNTcxNDY2MWZkMjAzNjc2ODM5ZDZjNzZm
NDczNWJlYzgxMzJiODliOC4uMGNkMTcxZjNiY2E2YWJlYmRiMjFiOThlMmE0NWMyMWExNGE5MDEx
MiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90
ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVz
dC5weQpAQCAtNTEzLDEwICs1MTMsNiBAQCBjbGFzcyBUZXN0UG9ydChQb3J0KToKICAgICAgICAg
ICAgIFZpcnR1YWxUZXN0U3VpdGUoJ3ZpcnR1YWwvc2tpcHBlZCcsICdmYWlsdXJlcy9leHBlY3Rl
ZCcsIFsnLS12aXJ0dWFsLWFyZzInXSksCiAgICAgICAgIF0KIAotICAgIGRlZiBzdXBwb3J0c19z
d2l0Y2hpbmdfcGl4ZWxfdGVzdHNfcGVyX3Rlc3Qoc2VsZik6Ci0gICAgICAgICMgTGV0IGl0IHRy
dWUgc28gd2UgY2FuIHRlc3QgdGhlIC0tcGl4ZWwtdGVzdC1kaXJlY3Rvcnkgb3B0aW9uLgotICAg
ICAgICByZXR1cm4gVHJ1ZQotCiAKIGNsYXNzIFRlc3REcml2ZXIoRHJpdmVyKToKICAgICAiIiJU
ZXN0L0R1bW15IGltcGxlbWVudGF0aW9uIG9mIHRoZSBEdW1wUmVuZGVyVHJlZSBpbnRlcmZhY2Uu
IiIiCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNw
cCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IGQwMjMy
OTkyNzMxZDFiYzk3MTI2OGZjMzkzMWY0YjcwYWIzNjdhYzcuLjc3ZTk5MjkxZmNkODUxODhkZjlj
NzFkZmNhNDAwY2MxNTQwZmIyOWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
VGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRy
b2xsZXIuY3BwCkBAIC0zNSw3ICszNSwxMSBAQAogI2luY2x1ZGUgPFdlYktpdDIvV0tQYWdlUHJp
dmF0ZS5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaD4KICNpbmNs
dWRlIDxXZWJLaXQyL1dLUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1
ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lu
Y2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiAjaWYgUExBVEZP
Uk0oTUFDKQpAQCAtNjcsOCArNzEsNyBAQCBUZXN0Q29udHJvbGxlciYgVGVzdENvbnRyb2xsZXI6
OnNoYXJlZCgpCiB9CiAKIFRlc3RDb250cm9sbGVyOjpUZXN0Q29udHJvbGxlcihpbnQgYXJnYywg
Y29uc3QgY2hhciogYXJndltdKQotICAgIDogbV9kdW1wUGl4ZWxzRm9yQWxsVGVzdHMoZmFsc2Up
Ci0gICAgLCBtX3ZlcmJvc2UoZmFsc2UpCisgICAgOiBtX3ZlcmJvc2UoZmFsc2UpCiAgICAgLCBt
X3ByaW50U2VwYXJhdG9ycyhmYWxzZSkKICAgICAsIG1fdXNpbmdTZXJ2ZXJNb2RlKGZhbHNlKQog
ICAgICwgbV9nY0JldHdlZW5UZXN0cyhmYWxzZSkKQEAgLTI2NywxMCArMjcwLDYgQEAgdm9pZCBU
ZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZShpbnQgYXJnYywgY29uc3QgY2hhciogYXJndltdKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoYXJndW1lbnQg
PT0gIi0tcGl4ZWwtdGVzdHMiKSB7Ci0gICAgICAgICAgICBtX2R1bXBQaXhlbHNGb3JBbGxUZXN0
cyA9IHRydWU7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQogICAgICAgICBpZiAo
YXJndW1lbnQgPT0gIi0tdmVyYm9zZSIpIHsKICAgICAgICAgICAgIG1fdmVyYm9zZSA9IHRydWU7
CiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTUwNCw3ICs1MDMsODkgQEAgYm9vbCBUZXN0Q29u
dHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcygpCiAgICAgcmV0dXJuIG1fZG9u
ZVJlc2V0dGluZzsKIH0KIAotYm9vbCBUZXN0Q29udHJvbGxlcjo6cnVuVGVzdChjb25zdCBjaGFy
KiB0ZXN0KQorc3RydWN0IFRlc3RDb21tYW5kIHsKKyAgICBUZXN0Q29tbWFuZCgpIDogc2hvdWxk
RHVtcFBpeGVscyhmYWxzZSkgeyB9CisKKyAgICBzdGQ6OnN0cmluZyBwYXRoT3JVUkw7CisgICAg
Ym9vbCBzaG91bGREdW1wUGl4ZWxzOworICAgIHN0ZDo6c3RyaW5nIGV4cGVjdGVkUGl4ZWxIYXNo
OworfTsKKworY2xhc3MgQ29tbWFuZFRva2VuaXplciB7CitwdWJsaWM6CisgICAgQ29tbWFuZFRv
a2VuaXplcihjb25zdCBzdGQ6OnN0cmluZyYgaW5wdXQpCisgICAgICAgIDogbV9pbnB1dChpbnB1
dCkKKyAgICAgICAgLCBtX3Bvc05leHRTZXBhcmF0b3IoMCkKKyAgICB7CisgICAgICAgIGZpbmRO
ZXh0KCk7CisgICAgfQorCisgICAgYm9vbCBoYXNOZXh0KCkgY29uc3Q7CisgICAgc3RkOjpzdHJp
bmcgbmV4dCgpOworCitwcml2YXRlOgorICAgIHZvaWQgZmluZE5leHQoKTsKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciBrU2VwYXJhdG9yID0gJzonOworICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtX2lu
cHV0OworICAgIHN0ZDo6c3RyaW5nIG1fbmV4dDsKKyAgICBzaXplX3QgbV9wb3NOZXh0U2VwYXJh
dG9yOworfTsKKwordm9pZCBDb21tYW5kVG9rZW5pemVyOjpmaW5kTmV4dCgpCit7CisgICAgaWYg
KG1fcG9zTmV4dFNlcGFyYXRvciA9PSBzdGQ6OnN0cmluZzo6bnBvcyB8fCBtX3Bvc05leHRTZXBh
cmF0b3IgPT0gbV9pbnB1dC5zaXplKCkpIHsKKyAgICAgICAgbV9uZXh0ID0gc3RkOjpzdHJpbmco
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzaXplX3Qgc3RhcnQgPSBtX3Bvc05leHRT
ZXBhcmF0b3IgPyBtX3Bvc05leHRTZXBhcmF0b3IgKyAxIDogMDsKKyAgICBtX3Bvc05leHRTZXBh
cmF0b3IgPSBtX2lucHV0LmZpbmQoa1NlcGFyYXRvciwgc3RhcnQpOworICAgIHNpemVfdCBzaXpl
ID0gbV9wb3NOZXh0U2VwYXJhdG9yID09IHN0ZDo6c3RyaW5nOjpucG9zID8gc3RkOjpzdHJpbmc6
Om5wb3MgOiBtX3Bvc05leHRTZXBhcmF0b3IgLSBzdGFydDsKKyAgICBtX25leHQgPSBzdGQ6OnN0
cmluZyhtX2lucHV0LCBzdGFydCwgc2l6ZSk7Cit9CisKK3N0ZDo6c3RyaW5nIENvbW1hbmRUb2tl
bml6ZXI6Om5leHQoKQoreworICAgIEFTU0VSVChoYXNOZXh0KCkpOworCisgICAgc3RkOjpzdHJp
bmcgb2xkTmV4dCA9IG1fbmV4dDsKKyAgICBmaW5kTmV4dCgpOworICAgIHJldHVybiBvbGROZXh0
OworfQorCitib29sIENvbW1hbmRUb2tlbml6ZXI6Omhhc05leHQoKSBjb25zdAoreworICAgIHJl
dHVybiBtX25leHQgIT0gc3RkOjpzdHJpbmcoKTsKK30KKworc3RhdGljIHZvaWQgZGllKGNvbnN0
IHN0ZDo6c3RyaW5nJiBpbnB1dExpbmUpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJVbmV4cGVj
dGVkIGlucHV0IGxpbmU6ICVzXG4iLCBpbnB1dExpbmUuY19zdHIoKSk7CisgICAgZXhpdChFWElU
X0ZBSUxVUkUpOworfQorCitUZXN0Q29tbWFuZCBwYXJzZUlucHV0TGluZShjb25zdCBzdGQ6OnN0
cmluZyYgaW5wdXRMaW5lKQoreworICAgIFRlc3RDb21tYW5kIGNvbW1hbmQ7CisgICAgQ29tbWFu
ZFRva2VuaXplciB0b2tlbml6ZXIoaW5wdXRMaW5lKTsKKyAgICBpZiAoIXRva2VuaXplci5oYXNO
ZXh0KCkpCisgICAgICAgIGRpZShpbnB1dExpbmUpOworCisgICAgY29tbWFuZC5wYXRoT3JVUkwg
PSB0b2tlbml6ZXIubmV4dCgpOworICAgIGlmICghdG9rZW5pemVyLmhhc05leHQoKSkKKyAgICAg
ICAgcmV0dXJuIGNvbW1hbmQ7CisKKyAgICBzdGQ6OnN0cmluZyBhcmcgPSB0b2tlbml6ZXIubmV4
dCgpOworICAgIGlmIChhcmcgIT0gc3RkOjpzdHJpbmcoIi1wIikgJiYgYXJnICE9IHN0ZDo6c3Ry
aW5nKCItLXBpeGVsLXRlc3QiKSkKKyAgICAgICAgZGllKGlucHV0TGluZSk7CisgICAgY29tbWFu
ZC5zaG91bGREdW1wUGl4ZWxzID0gdHJ1ZTsKKworICAgIGlmICh0b2tlbml6ZXIuaGFzTmV4dCgp
KQorICAgICAgICBjb21tYW5kLmV4cGVjdGVkUGl4ZWxIYXNoID0gdG9rZW5pemVyLm5leHQoKTsK
KworICAgIHJldHVybiBjb21tYW5kOworfQorCitib29sIFRlc3RDb250cm9sbGVyOjpydW5UZXN0
KGNvbnN0IGNoYXIqIGlucHV0TGluZSkKIHsKICAgICBpZiAoIXJlc2V0U3RhdGVUb0NvbnNpc3Rl
bnRWYWx1ZXMoKSkgewogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTUxNywzMiArNTk4LDEzIEBAIGJv
b2wgVGVzdENvbnRyb2xsZXI6OnJ1blRlc3QoY29uc3QgY2hhciogdGVzdCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGJvb2wgZHVtcFBpeGVsc1Rlc3QgPSBtX2R1bXBQaXhl
bHNGb3JBbGxUZXN0czsKLSAgICBzdGQ6OnN0cmluZyBjb21tYW5kKHRlc3QpOwotICAgIHN0ZDo6
c3RyaW5nIHBhdGhPclVSTCA9IGNvbW1hbmQ7Ci0gICAgc3RkOjpzdHJpbmcgZXhwZWN0ZWRQaXhl
bEhhc2g7Ci0gICAgc2l6ZV90IGZpcnN0U2VwYXJhdG9yUG9zID0gY29tbWFuZC5maW5kX2ZpcnN0
X29mKCdcJycpOwotICAgIHNpemVfdCBzZWNvbmRTZXBhcmF0b3JQb3MgPSBjb21tYW5kLmZpbmRf
Zmlyc3Rfb2YoJ1wnJywgZmlyc3RTZXBhcmF0b3JQb3MgKyAxKTsKLSAgICBpZiAoZmlyc3RTZXBh
cmF0b3JQb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgcGF0aE9yVVJMID0gc3Rk
OjpzdHJpbmcoY29tbWFuZCwgMCwgZmlyc3RTZXBhcmF0b3JQb3MpOwotICAgICAgICBzaXplX3Qg
cGl4ZWxIYXNoUG9zID0gZmlyc3RTZXBhcmF0b3JQb3MgKyAxOwotCi0gICAgICAgIC8vIE5SV1Qg
cGFzc2VzIC0tcGl4ZWwtdGVzdCBpZiB3ZSBzaG91bGQgZHVtcCBwaXhlbHMgZm9yIHRoZSB0ZXN0
LgotICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBleHBlY3RlZFBpeGVsVGVzdEFyZygiLS1waXhl
bC10ZXN0Iik7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIGFyZ1Rlc3QgPSBzdGQ6OnN0cmluZyhjb21t
YW5kLCBmaXJzdFNlcGFyYXRvclBvcyArIDEsIGV4cGVjdGVkUGl4ZWxUZXN0QXJnLnNpemUoKSk7
Ci0gICAgICAgIGlmIChhcmdUZXN0ID09IGV4cGVjdGVkUGl4ZWxUZXN0QXJnKSB7Ci0gICAgICAg
ICAgICBkdW1wUGl4ZWxzVGVzdCA9IHRydWU7Ci0gICAgICAgICAgICBwaXhlbEhhc2hQb3MgPSBz
ZWNvbmRTZXBhcmF0b3JQb3MgPT0gc3RkOjpzdHJpbmc6Om5wb3MgPyBzdGQ6OnN0cmluZzo6bnBv
cyA6IHNlY29uZFNlcGFyYXRvclBvcyArIDE7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBpeGVs
SGFzaFBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcyAmJiBwaXhlbEhhc2hQb3MgPCBjb21tYW5kLnNp
emUoKSkKLSAgICAgICAgICAgIGV4cGVjdGVkUGl4ZWxIYXNoID0gc3RkOjpzdHJpbmcoY29tbWFu
ZCwgcGl4ZWxIYXNoUG9zKTsKLSAgICB9CisgICAgVGVzdENvbW1hbmQgY29tbWFuZCA9IHBhcnNl
SW5wdXRMaW5lKHN0ZDo6c3RyaW5nKGlucHV0TGluZSkpOwogCiAgICAgbV9zdGF0ZSA9IFJ1bm5p
bmdUZXN0OwogCi0gICAgbV9jdXJyZW50SW52b2NhdGlvbiA9IGFkb3B0UHRyKG5ldyBUZXN0SW52
b2NhdGlvbihwYXRoT3JVUkwpKTsKLSAgICBpZiAoZHVtcFBpeGVsc1Rlc3QpCi0gICAgICAgIG1f
Y3VycmVudEludm9jYXRpb24tPnNldElzUGl4ZWxUZXN0KGV4cGVjdGVkUGl4ZWxIYXNoKTsKKyAg
ICBtX2N1cnJlbnRJbnZvY2F0aW9uID0gYWRvcHRQdHIobmV3IFRlc3RJbnZvY2F0aW9uKGNvbW1h
bmQucGF0aE9yVVJMKSk7CisgICAgaWYgKGNvbW1hbmQuc2hvdWxkRHVtcFBpeGVscykKKyAgICAg
ICAgbV9jdXJyZW50SW52b2NhdGlvbi0+c2V0SXNQaXhlbFRlc3QoY29tbWFuZC5leHBlY3RlZFBp
eGVsSGFzaCk7CiAKICAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5pbnZva2UoKTsKICAgICBtX2N1
cnJlbnRJbnZvY2F0aW9uLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL1Rlc3RDb250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmgKaW5kZXggYTk5ZTE2ZWE4NzAyN2MzNGYwN2I4OTYyYjA5OGMyMzM0ZDk0MjFiZC4uNWUy
MGQ2MTFiNDY5ZGYxODdjMzc4ZWU2MmVkMGNhYzMxOGRhZWQyMSAxMDA2NDQKLS0tIGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuaApAQCAtMTA0LDcgKzEwNCw2IEBAIHByaXZhdGU6CiAKICAg
ICBPd25QdHI8VGVzdEludm9jYXRpb24+IG1fY3VycmVudEludm9jYXRpb247CiAKLSAgICBib29s
IG1fZHVtcFBpeGVsc0ZvckFsbFRlc3RzOwogICAgIGJvb2wgbV92ZXJib3NlOwogICAgIGJvb2wg
bV9wcmludFNlcGFyYXRvcnM7CiAgICAgYm9vbCBtX3VzaW5nU2VydmVyTW9kZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155325</attachid>
            <date>2012-07-30 11:27:48 -0700</date>
            <delta_ts>2012-07-31 02:34:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92398-20120730202717.patch</filename>
            <type>text/plain</type>
            <size>46038</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MDU2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZWVlZDk2N2YwOTNjOTZkN2Y2ZDdmOTc3NWVjN2VhYTI5
ODFkMzA4My4uNDFlZjU2ZjExYzI4MjhkOTIwZDU4MTNmYjg3NzhlMDNjODEyN2M2YiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDYw
IEBACiAyMDEyLTA3LTMwICBCYWxhenMgS2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9yZz4KIAor
ICAgICAgICBBbGwgcG9ydHMgc2hvdWxkIHN1cHBvcnQgcGVyIHRlc3Qgc3dpdGNoaW5nIG9mIHBp
eGVsIHRlc3RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkyMzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGVhY2ggYWxsIHRlc3QgZHJpdmVycyB0byBhY2NlcHQgYSBwZXIgdGVzdCBjb250cm9sIG9m
IHdoZXRoZXIKKyAgICAgICAgdG8gZHVtcCBwaXhlbHMuIERyaXZlcnMgbm93IGFjY2VwdCBhIC0t
cGl4ZWwtdGVzdCBhcmd1bWVudAorICAgICAgICBvbiB0aGUgc3RhbmRhcnQgaW5wdXQgdGhhdCBt
ZWFucyB0aGF0IHJ1bm5pbmcgdGhlIGN1cnJlbnQKKyAgICAgICAgdGVzdCBhcyBwaXhlbCB0ZXN0
IGlzIGFsbG93ZWQgKGV2ZW4gaWYgdGhlIGV4cGVjdGVkIGhhc2ggaXMKKyAgICAgICAgbWlzc2lu
ZykuIFJlbW92ZWQgdGhlIC0tcGl4ZWwtdGVzdHMgY29tbWFuZCBsaW5lIG9wdGlvbiBzaW5jZQor
ICAgICAgICB0aGVyZSBpcyBubyBuZWVkIGZvciBpdCBhbnltb3JlLgorCisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwOgorICAgICAgICAocnVuVGVz
dCk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0U2hlbGwuY3BwOgorICAgICAgICAoVGVzdFNoZWxsOjpUZXN0U2hlbGwpOgorICAgICAgICAo
VGVzdFNoZWxsOjpydW5GaWxlVGVzdCk6CisgICAgICAgIChUZXN0U2hlbGw6OmR1bXApOgorICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oOgorICAgICAgICAoVGVz
dFBhcmFtczo6VGVzdFBhcmFtcyk6CisgICAgICAgIChUZXN0U2hlbGwpOgorICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZS5jcHA6CisgICAgICAgIChwYXJzZUNvbW1h
bmRMaW5lT3B0aW9ucyk6CisgICAgICAgIChnZXRFeHBlY3RlZFBpeGVsSGFzaCk6CisgICAgICAg
IChydW5UZXN0KToKKyAgICAgICAgKHNob3VsZER1bXBQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVj
dGVkKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9EdW1w
UmVuZGVyVHJlZS5jcHA6CisgICAgICAgIChpbml0aWFsaXplR2xvYmFsc0Zyb21Db21tYW5kTGlu
ZU9wdGlvbnMpOgorICAgICAgICAoZHVtcCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFj
L0R1bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICAoaW5pdGlhbGl6ZUdsb2JhbHNGcm9tQ29tbWFu
ZExpbmVPcHRpb25zKToKKyAgICAgICAgKGR1bXBSZW5kZXJUcmVlKToKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkR1
bXBSZW5kZXJUcmVlOjpwcm9jZXNzTGluZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2lu
L0R1bXBSZW5kZXJUcmVlLmNwcDoKKyAgICAgICAgKGR1bXApOgorICAgICAgICAocnVuVGVzdCk6
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd3gvRHVtcFJlbmRlclRyZWVXeC5jcHA6CisgICAg
ICAgIChkdW1wKToKKyAgICAgICAgKHJ1blRlc3QpOgorICAgICAgICAqIFNjcmlwdHMvb2xkLXJ1
bi13ZWJraXQtdGVzdHM6IFBhc3MgLS1waXhlbC10ZXN0IGJlZm9yZSB0aGUgaGFzaC4KKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHk6CisgICAgICAg
IChQb3J0LnNob3VsZF9ydW5fYXNfcGl4ZWxfdGVzdCk6IFJlbW92ZWQgbm93IHRoYXQgYWxsIHBv
cnRzIHN1cHBvcnRzIGl0LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvZHJpdmVyLnB5OgorICAgICAgICAoRHJpdmVyLmNtZF9saW5lKTogRG9uJ3QgcGFzcyAt
LXBpeGVsLXRlc3RzIGFueW1vcmUuCisgICAgICAgIChEcml2ZXIuX2NvbW1hbmRfZnJvbV9kcml2
ZXJfaW5wdXQpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6VGVzdENvbnRyb2xsZXIpOgorICAgICAg
ICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXVFI6OlRlc3RD
b250cm9sbGVyOjpydW5UZXN0KToKKworMjAxMi0wNy0zMCAgQmFsYXpzIEtlbGVtZW4gIDxrYmFs
YXpzQHdlYmtpdC5vcmc+CisKICAgICAgICAgW1F0XVtOUldUXSBSRUdSRVNTSU9OKDEyMzcyOSk6
IEZvcmNpbmcgcGl4ZWwgdGVzdHMgd2l0aCAtcCBkb2Vzbid0IHdvcmsKICAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyNjI3CiAKZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpCmluZGV4IGRjZTFlMzYxZDYwMDZlZGUwNzQwMTVjZDFj
ZDZiZmE2YTQwMjExZTguLmQ2ZjBhYWIxYzkwMTljNTJhNDM5MGQ5ZWU5MzIwZTYxYzU3MWMxYzUg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkKKysr
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaQpAQCAtNTYsNiArNTYs
OCBAQAogICAgICAgICAgICAgJ2Nocm9taXVtL1dlYlZpZXdIb3N0LmgnLAogICAgICAgICBdLAog
ICAgICAgICAndGVzdF9ydW5uZXJfZmlsZXMnOiBbCisgICAgICAgICAgICAnRHVtcFJlbmRlclRy
ZWUuaCcsCisgICAgICAgICAgICAnRHVtcFJlbmRlclRyZWVDb21tb24uY3BwJywKICAgICAgICAg
ICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcCcsCiAg
ICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5o
JywKICAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnQuY3BwJywKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVl
LmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5oCmluZGV4IDBlNTk4YmU0
YWUzZGQ2MjVmMGI0NWVmZTZiMjhmYTM1ZjY3ZjUyZjIuLjE4ZDhjZGEwZWIxN2ZhODNiZWUyMDg5
YjZkNDg1YTY0OWRiYjg2NzAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBS
ZW5kZXJUcmVlLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuaApA
QCAtNjUsNCArNjUsMTQgQEAgZXh0ZXJuIFJlZlB0cjxMYXlvdXRUZXN0Q29udHJvbGxlcj4gZ0xh
eW91dFRlc3RDb250cm9sbGVyOwogdm9pZCBkdW1wKCk7CiB2b2lkIGRpc3BsYXlXZWJWaWV3KCk7
CiAKK3N0cnVjdCBUZXN0Q29tbWFuZCB7CisgICAgVGVzdENvbW1hbmQoKSA6IHNob3VsZER1bXBQ
aXhlbHMoZmFsc2UpIHsgfQorCisgICAgc3RkOjpzdHJpbmcgcGF0aE9yVVJMOworICAgIGJvb2wg
c2hvdWxkRHVtcFBpeGVsczsKKyAgICBzdGQ6OnN0cmluZyBleHBlY3RlZFBpeGVsSGFzaDsKK307
CisKK1Rlc3RDb21tYW5kIHBhcnNlSW5wdXRMaW5lKGNvbnN0IHN0ZDo6c3RyaW5nJik7CisKICNl
bmRpZiAvLyBEdW1wUmVuZGVyVHJlZV9oCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9EdW1wUmVuZGVyVHJlZUNvbW1vbi5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVu
ZGVyVHJlZUNvbW1vbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTE3YzJmZTQ0NjI1NzhkYjFlM2JhNGQzZTky
Mzg5Mzc5NzcxMDI5OAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1
bXBSZW5kZXJUcmVlQ29tbW9uLmNwcApAQCAtMCwwICsxLDgyIEBACisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKKworI2luY2x1ZGUgPGFsZ29yaXRobT4K
KyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGli
Lmg+CisjaW5jbHVkZSA8c3RyaW5nPgorCitjbGFzcyBDb21tYW5kVG9rZW5pemVyIHsKK3B1Ymxp
YzoKKyAgICBDb21tYW5kVG9rZW5pemVyKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnB1dCkKKyAgICAg
ICAgOiBtX2lucHV0KGlucHV0KQorICAgICAgICAsIG1fcG9zTmV4dFNlcGFyYXRvcigwKQorICAg
IHsKKyAgICAgICAgZmluZE5leHQoKTsKKyAgICB9CisKKyAgICBib29sIGhhc05leHQoKSBjb25z
dDsKKyAgICBzdGQ6OnN0cmluZyBuZXh0KCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBmaW5kTmV4
dCgpOworICAgIHN0YXRpYyBjb25zdCBjaGFyIGtTZXBhcmF0b3IgPSAnOic7CisgICAgY29uc3Qg
c3RkOjpzdHJpbmcmIG1faW5wdXQ7CisgICAgc3RkOjpzdHJpbmcgbV9uZXh0OworICAgIHNpemVf
dCBtX3Bvc05leHRTZXBhcmF0b3I7Cit9OworCit2b2lkIENvbW1hbmRUb2tlbml6ZXI6OmZpbmRO
ZXh0KCkKK3sKKyAgICBpZiAobV9wb3NOZXh0U2VwYXJhdG9yID09IHN0ZDo6c3RyaW5nOjpucG9z
IHx8IG1fcG9zTmV4dFNlcGFyYXRvciA9PSBtX2lucHV0LnNpemUoKSkgeworICAgICAgICBtX25l
eHQgPSBzdGQ6OnN0cmluZygpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHNpemVfdCBz
dGFydCA9IG1fcG9zTmV4dFNlcGFyYXRvciA/IG1fcG9zTmV4dFNlcGFyYXRvciArIDEgOiAwOwor
ICAgIG1fcG9zTmV4dFNlcGFyYXRvciA9IG1faW5wdXQuZmluZChrU2VwYXJhdG9yLCBzdGFydCk7
CisgICAgc2l6ZV90IHNpemUgPSBtX3Bvc05leHRTZXBhcmF0b3IgPT0gc3RkOjpzdHJpbmc6Om5w
b3MgPyBzdGQ6OnN0cmluZzo6bnBvcyA6IG1fcG9zTmV4dFNlcGFyYXRvciAtIHN0YXJ0OworICAg
IG1fbmV4dCA9IHN0ZDo6c3RyaW5nKG1faW5wdXQsIHN0YXJ0LCBzaXplKTsKK30KKworc3RkOjpz
dHJpbmcgQ29tbWFuZFRva2VuaXplcjo6bmV4dCgpCit7CisgICAgQVNTRVJUKGhhc05leHQoKSk7
CisKKyAgICBzdGQ6OnN0cmluZyBvbGROZXh0ID0gbV9uZXh0OworICAgIGZpbmROZXh0KCk7Cisg
ICAgcmV0dXJuIG9sZE5leHQ7Cit9CisKK2Jvb2wgQ29tbWFuZFRva2VuaXplcjo6aGFzTmV4dCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmV4dCAhPSBzdGQ6OnN0cmluZygpOworfQorCitOT19S
RVRVUk4gc3RhdGljIHZvaWQgZGllKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnB1dExpbmUpCit7Cisg
ICAgZnByaW50ZihzdGRlcnIsICJVbmV4cGVjdGVkIGlucHV0IGxpbmU6ICVzXG4iLCBpbnB1dExp
bmUuY19zdHIoKSk7CisgICAgZXhpdChFWElUX0ZBSUxVUkUpOworfQorCitUZXN0Q29tbWFuZCBw
YXJzZUlucHV0TGluZShjb25zdCBzdGQ6OnN0cmluZyYgaW5wdXRMaW5lKQoreworICAgIFRlc3RD
b21tYW5kIGNvbW1hbmQ7CisgICAgQ29tbWFuZFRva2VuaXplciB0b2tlbml6ZXIoaW5wdXRMaW5l
KTsKKyAgICBpZiAoIXRva2VuaXplci5oYXNOZXh0KCkpCisgICAgICAgIGRpZShpbnB1dExpbmUp
OworCisgICAgY29tbWFuZC5wYXRoT3JVUkwgPSB0b2tlbml6ZXIubmV4dCgpOworICAgIGlmICgh
dG9rZW5pemVyLmhhc05leHQoKSkKKyAgICAgICAgcmV0dXJuIGNvbW1hbmQ7CisKKyAgICBzdGQ6
OnN0cmluZyBhcmcgPSB0b2tlbml6ZXIubmV4dCgpOworICAgIGlmIChhcmcgIT0gc3RkOjpzdHJp
bmcoIi1wIikgJiYgYXJnICE9IHN0ZDo6c3RyaW5nKCItLXBpeGVsLXRlc3QiKSkKKyAgICAgICAg
ZGllKGlucHV0TGluZSk7CisgICAgY29tbWFuZC5zaG91bGREdW1wUGl4ZWxzID0gdHJ1ZTsKKwor
ICAgIGlmICh0b2tlbml6ZXIuaGFzTmV4dCgpKQorICAgICAgICBjb21tYW5kLmV4cGVjdGVkUGl4
ZWxIYXNoID0gdG9rZW5pemVyLm5leHQoKTsKKworICAgIHJldHVybiBjb21tYW5kOworfQpkaWZm
IC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3Bw
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwCmluZGV4
IDYxNTVmNDQxZjVkOGJiM2M0NGU1MTc5MDgwZGNiMTc0NDVlODk4NzQuLmM4YjlkZTU1NWI4ZjJi
NzA1ZGZjMTMyNjQ2NjM0MGFkNTc4MDQ4ZDEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9EdW1wUmVuZGVyVHJlZS5jcHAKQEAgLTQ0LDcgKzQ0LDYgQEAgdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkNvbXBsZXhUZXh0W10gPSAiLS1j
b21wbGV4LXRleHQiOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uRHVtcEFsbFBpeGVsc1tdID0g
Ii0tZHVtcC1hbGwtcGl4ZWxzIjsKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbk5vdHJlZVtdID0g
Ii0tbm90cmVlIjsKLXN0YXRpYyBjb25zdCBjaGFyIG9wdGlvblBpeGVsVGVzdHNbXSA9ICItLXBp
eGVsLXRlc3RzIjsKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvblRocmVhZGVkW10gPSAiLS10aHJl
YWRlZCI7CiBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25EZWJ1Z1JlbmRlclRyZWVbXSA9ICItLWRl
YnVnLXJlbmRlci10cmVlIjsKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkRlYnVnTGF5ZXJUcmVl
W10gPSAiLS1kZWJ1Zy1sYXllci10cmVlIjsKQEAgLTcwLDYgKzY5LDggQEAgc3RhdGljIGNvbnN0
IGNoYXIgb3B0aW9uRW5jb2RlQmluYXJ5W10gPSAiLS1lbmNvZGUtYmluYXJ5IjsKIHN0YXRpYyBj
b25zdCBjaGFyIG9wdGlvbk5vVGltZW91dFtdID0gIi0tbm8tdGltZW91dCI7CiBzdGF0aWMgY29u
c3QgY2hhciBvcHRpb25XZWJDb3JlTG9nQ2hhbm5lbHNbXSA9ICItLXdlYmNvcmUtbG9nLWNoYW5u
ZWxzPSI7CiAKK3N0YXRpYyBib29sIGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdDsKKwogY2xhc3Mg
V2ViS2l0U3VwcG9ydFRlc3RFbnZpcm9ubWVudCB7CiBwdWJsaWM6CiAgICAgV2ViS2l0U3VwcG9y
dFRlc3RFbnZpcm9ubWVudCgpCkBAIC04NSwxNyArODYsMTIgQEAgcHJpdmF0ZToKICAgICBPd25Q
dHI8TW9ja1dlYktpdFBsYXRmb3JtU3VwcG9ydD4gbV9tb2NrUGxhdGZvcm07CiB9OwogCi1zdGF0
aWMgdm9pZCBydW5UZXN0KFRlc3RTaGVsbCYgc2hlbGwsIFRlc3RQYXJhbXMmIHBhcmFtcywgY29u
c3Qgc3RyaW5nJiB0ZXN0TmFtZSkKK3N0YXRpYyB2b2lkIHJ1blRlc3QoVGVzdFNoZWxsJiBzaGVs
bCwgVGVzdFBhcmFtcyYgcGFyYW1zLCBjb25zdCBzdHJpbmcmIGlucHV0TGluZSkKIHsKICAgICBp
bnQgb2xkVGltZW91dE1zZWMgPSBzaGVsbC5sYXlvdXRUZXN0VGltZW91dCgpOwotICAgIHBhcmFt
cy5waXhlbEhhc2ggPSAiIjsKLSAgICBzdHJpbmcgcGF0aE9yVVJMID0gdGVzdE5hbWU7Ci0gICAg
c3RyaW5nOjpzaXplX3R5cGUgc2VwYXJhdG9yUG9zaXRpb24gPSBwYXRoT3JVUkwuZmluZCgiJyIp
OwotICAgIGlmIChzZXBhcmF0b3JQb3NpdGlvbiAhPSBzdHJpbmc6Om5wb3MpIHsKLSAgICAgICAg
cGFyYW1zLnBpeGVsSGFzaCA9IHBhdGhPclVSTC5zdWJzdHIoc2VwYXJhdG9yUG9zaXRpb24gKyAx
KTsKLSAgICAgICAgcGF0aE9yVVJMLmVyYXNlKHNlcGFyYXRvclBvc2l0aW9uKTsKLSAgICB9Ci0g
ICAgcGFyYW1zLnRlc3RVcmwgPSB3ZWJraXRfc3VwcG9ydDo6Q3JlYXRlVVJMRm9yUGF0aE9yVVJM
KHBhdGhPclVSTCk7CisgICAgVGVzdENvbW1hbmQgY29tbWFuZCA9IHBhcnNlSW5wdXRMaW5lKGlu
cHV0TGluZSk7CisgICAgcGFyYW1zLnRlc3RVcmwgPSB3ZWJraXRfc3VwcG9ydDo6Q3JlYXRlVVJM
Rm9yUGF0aE9yVVJMKGNvbW1hbmQucGF0aE9yVVJMKTsKKyAgICBwYXJhbXMucGl4ZWxIYXNoID0g
Y29tbWFuZC5zaG91bGREdW1wUGl4ZWxzOwogICAgIHdlYmtpdF9zdXBwb3J0OjpTZXRDdXJyZW50
RGlyZWN0b3J5Rm9yRmlsZVVSTChwYXJhbXMudGVzdFVybCk7CiAgICAgdjg6OlY4OjpTZXRGbGFn
c0Zyb21TdHJpbmcoc2hlbGwuamF2YVNjcmlwdEZsYWdzKCkuY19zdHIoKSwgc2hlbGwuamF2YVNj
cmlwdEZsYWdzKCkubGVuZ3RoKCkpOwogICAgIGlmIChzaGVsbC5zdHJlc3NPcHQoKSB8fCBzaGVs
bC5zdHJlc3NEZW9wdCgpKSB7CkBAIC0xMDgsMTEgKzEwNCwxMSBAQCBzdGF0aWMgdm9pZCBydW5U
ZXN0KFRlc3RTaGVsbCYgc2hlbGwsIFRlc3RQYXJhbXMmIHBhcmFtcywgY29uc3Qgc3RyaW5nJiB0
ZXN0TmFtZQogICAgICAgICAgIGJvb2wgaXNMYXN0TG9hZCA9IChpID09ICh2ODo6VGVzdGluZzo6
R2V0U3RyZXNzUnVucygpIC0gMSkpOwogICAgICAgICAgIHNoZWxsLnNldER1bXBXaGVuRmluaXNo
ZWQoaXNMYXN0TG9hZCk7CiAgICAgICAgICAgc2hlbGwucmVzZXRUZXN0Q29udHJvbGxlcigpOwot
ICAgICAgICAgIHNoZWxsLnJ1bkZpbGVUZXN0KHBhcmFtcyk7CisgICAgICAgICAgc2hlbGwucnVu
RmlsZVRlc3QocGFyYW1zLCBjb21tYW5kLnNob3VsZER1bXBQaXhlbHMpOwogICAgICAgfQogICAg
IH0gZWxzZSB7CiAgICAgICBzaGVsbC5yZXNldFRlc3RDb250cm9sbGVyKCk7Ci0gICAgICBzaGVs
bC5ydW5GaWxlVGVzdChwYXJhbXMpOworICAgICAgc2hlbGwucnVuRmlsZVRlc3QocGFyYW1zLCBj
b21tYW5kLnNob3VsZER1bXBQaXhlbHMpOwogICAgIH0KICAgICBzaGVsbC5zZXRMYXlvdXRUZXN0
VGltZW91dChvbGRUaW1lb3V0TXNlYyk7CiB9CkBAIC0xNDYsOCArMTQyLDYgQEAgaW50IG1haW4o
aW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICAgICAgICAgIHNlcnZlck1vZGUgPSB0cnVlOwog
ICAgICAgICBlbHNlIGlmIChhcmd1bWVudCA9PSBvcHRpb25Ob3RyZWUpCiAgICAgICAgICAgICBw
YXJhbXMuZHVtcFRyZWUgPSBmYWxzZTsKLSAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0
aW9uUGl4ZWxUZXN0cykKLSAgICAgICAgICAgIHBhcmFtcy5kdW1wUGl4ZWxzID0gdHJ1ZTsKICAg
ICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uRGVidWdSZW5kZXJUcmVlKQogICAgICAg
ICAgICAgcGFyYW1zLmRlYnVnUmVuZGVyVHJlZSA9IHRydWU7CiAgICAgICAgIGVsc2UgaWYgKGFy
Z3VtZW50ID09IG9wdGlvbkRlYnVnTGF5ZXJUcmVlKQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RTaGVsbC5jcHAKaW5kZXggNmY5OTFmZjMzNTljNzc0NjFhMjM4Nzk1MThkMzAw
YzU2ZmEwYzdmMy4uY2ZjODFmMThjYWUwZGM0NzRlNzMwZTMwZDNmYjRmNzhlNDYxMTlmNiAxMDA2
NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcAorKysg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCkBAIC0xMDIsNyAr
MTAyLDggQEAgc3RhdGljIHZvaWQgbWFrZUNhbnZhc09wYXF1ZShTa0NhbnZhcyogY2FudmFzKQog
fQogCiBUZXN0U2hlbGw6OlRlc3RTaGVsbCgpCi0gICAgOiBtX3Rlc3RJc1BlbmRpbmcoZmFsc2Up
CisgICAgOiBtX2R1bXBQaXhlbHNGb3JDdXJyZW50VGVzdChmYWxzZSkKKyAgICAsIG1fdGVzdElz
UGVuZGluZyhmYWxzZSkKICAgICAsIG1fdGVzdElzUHJlcGFyaW5nKGZhbHNlKQogICAgICwgbV9m
b2N1c2VkV2lkZ2V0KDApCiAgICAgLCBtX2RldlRvb2xzKDApCkBAIC0yMzcsMTMgKzIzOCwxNiBA
QCB2b2lkIFRlc3RTaGVsbDo6cmVzZXRXZWJTZXR0aW5ncyhXZWJWaWV3JiB3ZWJWaWV3KQogICAg
IG1fcHJlZnMuYXBwbHlUbygmd2ViVmlldyk7CiB9CiAKLXZvaWQgVGVzdFNoZWxsOjpydW5GaWxl
VGVzdChjb25zdCBUZXN0UGFyYW1zJiBwYXJhbXMpCit2b2lkIFRlc3RTaGVsbDo6cnVuRmlsZVRl
c3QoY29uc3QgVGVzdFBhcmFtcyYgcGFyYW1zLCBib29sIHNob3VsZER1bXBQaXhlbHMpCiB7CiAg
ICAgQVNTRVJUKHBhcmFtcy50ZXN0VXJsLmlzVmFsaWQoKSk7CiAgICAgbV90ZXN0SXNQcmVwYXJp
bmcgPSB0cnVlOworICAgIG1fc2hvdWxkRHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gc2hvdWxk
RHVtcFBpeGVsczsKICAgICBtX3BhcmFtcyA9IHBhcmFtczsKICAgICBzdHJpbmcgdGVzdFVybCA9
IG1fcGFyYW1zLnRlc3RVcmwuc3BlYygpOwogCisgICAgbV9sYXlvdXRUZXN0Q29udHJvbGxlci0+
c2V0U2hvdWxkR2VuZXJhdGVQaXhlbFJlc3VsdHMoc2hvdWxkRHVtcFBpeGVscyk7CisKICAgICBp
ZiAodGVzdFVybC5maW5kKCJsb2FkaW5nLyIpICE9IHN0cmluZzo6bnBvcwogICAgICAgICB8fCB0
ZXN0VXJsLmZpbmQoImxvYWRpbmdcXCIpICE9IHN0cmluZzo6bnBvcykKICAgICAgICAgbV9sYXlv
dXRUZXN0Q29udHJvbGxlci0+c2V0U2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcyh0cnVlKTsK
QEAgLTYwOSw3ICs2MTMsNyBAQCB2b2lkIFRlc3RTaGVsbDo6ZHVtcCgpCiAgICAgaWYgKGR1bXBl
ZEFueXRoaW5nICYmIG1fcGFyYW1zLnByaW50U2VwYXJhdG9ycykKICAgICAgICAgbV9wcmludGVy
LmhhbmRsZVRleHRGb290ZXIoKTsKIAotICAgIGlmIChtX3BhcmFtcy5kdW1wUGl4ZWxzICYmIHNo
b3VsZEdlbmVyYXRlUGl4ZWxSZXN1bHRzKSB7CisgICAgaWYgKG1fZHVtcFBpeGVsc0ZvckN1cnJl
bnRUZXN0ICYmIHNob3VsZEdlbmVyYXRlUGl4ZWxSZXN1bHRzKSB7CiAgICAgICAgIC8vIEltYWdl
IG91dHB1dDogd2Ugd3JpdGUgdGhlIGltYWdlIGRhdGEgdG8gdGhlIGZpbGUgZ2l2ZW4gb24gdGhl
CiAgICAgICAgIC8vIGNvbW1hbmQgbGluZSAoZm9yIHRoZSBkdW1wIHBpeGVscyBhcmd1bWVudCks
IGFuZCB0aGUgTUQ1IHN1bSB0bwogICAgICAgICAvLyBzdGRvdXQuCmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaCBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oCmluZGV4IDA3NzgxNjM2YmE3NTA3NTk1MmIyZmYzOGM0
YzQ3M2RkNzZjNGNiNWMuLjhhZjZiOTM2ZDM3ODM2YTU3YmExYzQzNWQyOGZkNGI0YTY4YzQ5NDgg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oCisr
KyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oCkBAIC02NCw3ICs2
NCw2IEBAIGNsYXNzIFdlYlBlcm1pc3Npb25zOwogCiBzdHJ1Y3QgVGVzdFBhcmFtcyB7CiAgICAg
Ym9vbCBkdW1wVHJlZTsKLSAgICBib29sIGR1bXBQaXhlbHM7CiAgICAgYm9vbCBkZWJ1Z1JlbmRl
clRyZWU7CiAgICAgYm9vbCBkZWJ1Z0xheWVyVHJlZTsKICAgICBib29sIHByaW50U2VwYXJhdG9y
czsKQEAgLTczLDcgKzcyLDYgQEAgc3RydWN0IFRlc3RQYXJhbXMgewogCiAgICAgVGVzdFBhcmFt
cygpCiAgICAgICAgIDogZHVtcFRyZWUodHJ1ZSkKLSAgICAgICAgLCBkdW1wUGl4ZWxzKGZhbHNl
KQogICAgICAgICAsIGRlYnVnUmVuZGVyVHJlZShmYWxzZSkKICAgICAgICAgLCBkZWJ1Z0xheWVy
VHJlZShmYWxzZSkKICAgICAgICAgLCBwcmludFNlcGFyYXRvcnMoZmFsc2UpIHsgfQpAQCAtMTA0
LDcgKzEwMiw3IEBAIHB1YmxpYzoKICAgICBXZWJQZXJtaXNzaW9ucyogd2ViUGVybWlzc2lvbnMo
KSB7IHJldHVybiBtX3dlYlBlcm1pc3Npb25zLmdldCgpOyB9CiAKICAgICB2b2lkIGJpbmRKU09i
amVjdHNUb1dpbmRvdyhXZWJLaXQ6OldlYkZyYW1lKik7Ci0gICAgdm9pZCBydW5GaWxlVGVzdChj
b25zdCBUZXN0UGFyYW1zJik7CisgICAgdm9pZCBydW5GaWxlVGVzdChjb25zdCBUZXN0UGFyYW1z
JiwgYm9vbCBzaG91bGREdW1wUGl4ZWxUZXN0cyk7CiAgICAgdm9pZCBjYWxsSlNHQygpOwogICAg
IHZvaWQgcmVzZXRUZXN0Q29udHJvbGxlcigpOwogICAgIHZvaWQgd2FpdFRlc3RGaW5pc2hlZCgp
OwpAQCAtMjI2LDYgKzIyNCw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIFRlc3RQYXJhbXMg
bV9wYXJhbXM7CisgICAgYm9vbCBtX2R1bXBQaXhlbHNGb3JDdXJyZW50VGVzdDsKICAgICBpbnQg
bV90aW1lb3V0OyAvLyB0aW1lb3V0IHZhbHVlIGluIG1pbGxpc2Vjb25kCiAgICAgYm9vbCBtX2Fs
bG93RXh0ZXJuYWxQYWdlczsKICAgICBib29sIG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclZp
ZGVvRW5hYmxlZDsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxp
c3RzLnR4dCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4dAppbmRleCBl
MWRhY2Y5MDFiYTA2MjVhNWExZTgwN2VjNmI5NDUzNDM0OTg0Y2FhLi4wNjdkYmQzMmI3YWE5MWY1
YTU0N2NiN2JlNTdmZjRiZGY1OTk5MzI5IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9lZmwvQ01ha2VMaXN0cy50eHQKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0NNYWtl
TGlzdHMudHh0CkBAIC0xLDQgKzEsNSBAQAogU0VUKER1bXBSZW5kZXJUcmVlX1NPVVJDRVMKKyAg
ICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWVDb21tb24uY3BwCiAg
ICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL0N5Y2xpY1JlZHVuZGFuY3lDaGVjay5jcHAK
ICAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvR0NDb250cm9sbGVyLmNwcAogICAgICR7
VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZS5jcHAgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWUuY3BwCmluZGV4IGMyYzlkNzFjMGM1
MTVjYjA4Y2Q0MTJkNDJhZGQwZDEwNWNhOTc1OWMuLmYxOTdhMjZlM2ZiMzMwMTJmOTc3ZDUzNjk0
ZGYxNTI5Yjg5ZmQ0NGUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1w
UmVuZGVyVHJlZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJU
cmVlLmNwcApAQCAtNjQsNyArNjQsNyBAQCBleHRlcm4gRXdrX0hpc3RvcnlfSXRlbSogcHJldlRl
c3RCRkl0ZW07CiBSZWZQdHI8TGF5b3V0VGVzdENvbnRyb2xsZXI+IGdMYXlvdXRUZXN0Q29udHJv
bGxlcjsKIHZvbGF0aWxlIGJvb2wgZG9uZSA9IGZhbHNlOwogCi1zdGF0aWMgaW50IGR1bXBQaXhl
bHMgPSBmYWxzZTsKK3N0YXRpYyBib29sIGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdDsKIHN0YXRp
YyBpbnQgZHVtcFRyZWUgPSB0cnVlOwogc3RhdGljIGludCBwcmludFNlcGFyYXRvcnMgPSB0cnVl
Owogc3RhdGljIGludCB1c2VYMTFXaW5kb3cgPSBmYWxzZTsKQEAgLTE5Miw3ICsxOTIsNiBAQCBz
dGF0aWMgYm9vbCBwYXJzZUNvbW1hbmRMaW5lT3B0aW9ucyhpbnQgYXJnYywgY2hhcioqIGFyZ3Yp
CiB7CiAgICAgc3RhdGljIGNvbnN0IG9wdGlvbiBvcHRpb25zW10gPSB7CiAgICAgICAgIHsibm90
cmVlIiwgbm9fYXJndW1lbnQsICZkdW1wVHJlZSwgZmFsc2V9LAotICAgICAgICB7InBpeGVsLXRl
c3RzIiwgbm9fYXJndW1lbnQsICZkdW1wUGl4ZWxzLCB0cnVlfSwKICAgICAgICAgeyJ0cmVlIiwg
bm9fYXJndW1lbnQsICZkdW1wVHJlZSwgdHJ1ZX0sCiAgICAgICAgIHsiZ3VpIiwgbm9fYXJndW1l
bnQsICZ1c2VYMTFXaW5kb3csIHRydWV9LAogICAgICAgICB7MCwgMCwgMCwgMH0KQEAgLTIxMCwz
MiArMjA5LDYgQEAgc3RhdGljIGJvb2wgcGFyc2VDb21tYW5kTGluZU9wdGlvbnMoaW50IGFyZ2Ms
IGNoYXIqKiBhcmd2KQogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgU3RyaW5nIGdldEZp
bmFsVGVzdFVSTChjb25zdCBTdHJpbmcmIHRlc3RVUkwpCi17Ci0gICAgY29uc3Qgc2l6ZV90IGhh
c2hTZXBhcmF0b3JQb3MgPSB0ZXN0VVJMLmZpbmQoIiciKTsKLSAgICBpZiAoaGFzaFNlcGFyYXRv
clBvcyAhPSBub3RGb3VuZCkKLSAgICAgICAgcmV0dXJuIGdldEZpbmFsVGVzdFVSTCh0ZXN0VVJM
LmxlZnQoaGFzaFNlcGFyYXRvclBvcykpOwotCi0gICAgLy8gQ29udmVydCB0aGUgcGF0aCBpbnRv
IGEgZnVsbCBmaWxlIFVSTCBpZiBpdCBkb2VzIG5vdCBsb29rCi0gICAgLy8gbGlrZSBhbiBIVFRQ
L1MgVVJMIChkb2Vzbid0IHN0YXJ0IHdpdGggaHR0cDovLyBvciBodHRwczovLykuCi0gICAgaWYg
KCF0ZXN0VVJMLnN0YXJ0c1dpdGgoImh0dHA6Ly8iKSAmJiAhdGVzdFVSTC5zdGFydHNXaXRoKCJo
dHRwczovLyIpKSB7Ci0gICAgICAgIGNoYXIqIGNGaWxlUGF0aCA9IGVjb3JlX2ZpbGVfcmVhbHBh
dGgodGVzdFVSTC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgY29uc3QgU3RyaW5nIGZpbGVQYXRo
ID0gU3RyaW5nOjpmcm9tVVRGOChjRmlsZVBhdGgpOwotICAgICAgICBmcmVlKGNGaWxlUGF0aCk7
Ci0KLSAgICAgICAgaWYgKGVjb3JlX2ZpbGVfZXhpc3RzKGZpbGVQYXRoLnV0ZjgoKS5kYXRhKCkp
KQotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygiZmlsZTovLyIpICsgZmlsZVBhdGg7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRlc3RVUkw7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgZ2V0RXhwZWN0ZWRQ
aXhlbEhhc2goY29uc3QgU3RyaW5nJiB0ZXN0VVJMKQotewotICAgIGNvbnN0IHNpemVfdCBoYXNo
U2VwYXJhdG9yUG9zID0gdGVzdFVSTC5maW5kKCInIik7Ci0gICAgcmV0dXJuIChoYXNoU2VwYXJh
dG9yUG9zICE9IG5vdEZvdW5kKSA/IHRlc3RVUkwuc3Vic3RyaW5nKGhhc2hTZXBhcmF0b3JQb3Mg
KyAxKSA6IFN0cmluZygpOwotfQotCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNHbG9iYWxIaXN0b3J5
VGVzdChjb25zdCBTdHJpbmcmIGNUZXN0UGF0aE9yVVJMKQogewogICAgIHJldHVybiBjVGVzdFBh
dGhPclVSTC5jb250YWlucygiL2dsb2JhbGhpc3RvcnkvIik7CkBAIC0yNjcsMTMgKzI0MCwxNSBA
QCBzdGF0aWMgdm9pZCBjcmVhdGVMYXlvdXRUZXN0Q29udHJvbGxlcihjb25zdCBTdHJpbmcmIHRl
c3RVUkwsIGNvbnN0IFN0cmluZyYgZXhwZQogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgcnVuVGVz
dChjb25zdCBjaGFyKiBjVGVzdFBhdGhPclVSTCkKK3N0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qg
Y2hhciogY0lucHV0TGluZSkKIHsKLSAgICBjb25zdCBTdHJpbmcgdGVzdFBhdGhPclVSTCA9IFN0
cmluZzo6ZnJvbVVURjgoY1Rlc3RQYXRoT3JVUkwpOwotICAgIEFTU0VSVCghdGVzdFBhdGhPclVS
TC5pc0VtcHR5KCkpOworICAgIGNvbnN0IFN0cmluZyBpbnB1dExpbmUgPSBTdHJpbmc6OmZyb21V
VEY4KGlucHV0TGluZSk7CisgICAgQVNTRVJUKCFpbnB1dExpbmUuaXNFbXB0eSgpKTsKIAotICAg
IGNvbnN0IFN0cmluZyB0ZXN0VVJMID0gZ2V0RmluYWxUZXN0VVJMKHRlc3RQYXRoT3JVUkwpOwot
ICAgIGNvbnN0IFN0cmluZyBleHBlY3RlZFBpeGVsSGFzaCA9IGdldEV4cGVjdGVkUGl4ZWxIYXNo
KHRlc3RQYXRoT3JVUkwpOworICAgIFRlc3RDb21tYW5kIGNvbW1hbmQgPSBwYXJzZUlucHV0TGlu
ZShzdGQ6OnN0cmluZyhjSW5wdXRMaW5lKSk7CisgICAgY29uc3QgU3RyaW5nIHRlc3RVUkwoY29t
bWFuZC5wYXRoT3JVUkwuY19zdHIoKSk7CisgICAgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0g
Y29tbWFuZC5zaG91bGREdW1wUGl4ZWxzOworICAgIGNvbnN0IFN0cmluZyBleHBlY3RlZFBpeGVs
SGFzaChjb21tYW5kLmV4cGVjdGVkUGl4ZWxIYXNoLmNfc3RyKCkpOwogCiAgICAgYnJvd3Nlci0+
cmVzZXREZWZhdWx0c1RvQ29uc2lzdGVudFZhbHVlcygpOwogICAgIGNyZWF0ZUxheW91dFRlc3RD
b250cm9sbGVyKHRlc3RVUkwsIGV4cGVjdGVkUGl4ZWxIYXNoKTsKQEAgLTM1MSw3ICszMjYsNyBA
QCBzdGF0aWMgYm9vbCBzaG91bGREdW1wRnJhbWVTY3JvbGxQb3NpdGlvbigpCiAKIHN0YXRpYyBi
b29sIHNob3VsZER1bXBQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKCkKIHsKLSAgICByZXR1
cm4gZHVtcFBpeGVscyAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmdlbmVyYXRlUGl4ZWxSZXN1
bHRzKCkgJiYgIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcERPTUFzV2ViQXJjaGl2ZSgpICYm
ICFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBTb3VyY2VBc1dlYkFyY2hpdmUoKTsKKyAgICBy
ZXR1cm4gZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+
Z2VuZXJhdGVQaXhlbFJlc3VsdHMoKSAmJiAhZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRE9N
QXNXZWJBcmNoaXZlKCkgJiYgIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFNvdXJjZUFzV2Vi
QXJjaGl2ZSgpOwogfQogCiBzdGF0aWMgYm9vbCBzaG91bGREdW1wQmFja0ZvcndhcmRMaXN0KCkK
QEAgLTQ1OCw3ICs0MzMsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAg
ICAgIHByaW50U2VwYXJhdG9ycyA9IHRydWU7CiAgICAgICAgIHJ1blRlc3RpbmdTZXJ2ZXJMb29w
KCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnRTZXBhcmF0b3JzID0gKG9wdGluZCA8IGFy
Z2MgLSAxIHx8IChkdW1wUGl4ZWxzICYmIGR1bXBUcmVlKSk7CisgICAgICAgIHByaW50U2VwYXJh
dG9ycyA9IChvcHRpbmQgPCBhcmdjIC0gMSB8fCAoZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ICYm
IGR1bXBUcmVlKSk7CiAgICAgICAgIGZvciAoaW50IGkgPSBvcHRpbmQ7IGkgIT0gYXJnYzsgKytp
KQogICAgICAgICAgICAgcnVuVGVzdChhcmd2W2ldKTsKICAgICB9CmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcAppbmRleCA1N2NkMDU5MTdlODIyNTU4YjQ4Mzc2
ZTAxMDJkODAwYTZiY2ZjY2RhLi5lYmRhNWNmYjIzMTg5ZmMyYTc5NWM0Yzk4MDVlMGJjYmVhZjVj
Zjg3IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUu
Y3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAKQEAg
LTczLDcgKzczLDcgQEAgZXh0ZXJuIGdjaGFyKiB3ZWJraXRfd2ViX2ZyYW1lX2dldF9yZXNwb25z
ZV9taW1lX3R5cGUoV2ViS2l0V2ViRnJhbWUqIGZyYW1lKTsKIAogdm9sYXRpbGUgYm9vbCBkb25l
Owogc3RhdGljIGJvb2wgcHJpbnRTZXBhcmF0b3JzOwotc3RhdGljIGludCBkdW1wUGl4ZWxzOwor
c3RhdGljIGJvb2wgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0Owogc3RhdGljIGludCBkdW1wVHJl
ZSA9IDE7CiBzdGF0aWMgaW50IHVzZVRpbWVvdXRXYXRjaGRvZyA9IDE7CiAKQEAgLTU0NCw3ICs1
NDQsNiBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplR2xvYmFsc0Zyb21Db21tYW5kTGluZU9wdGlv
bnMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKICAgICBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNb
XSA9IHsKICAgICAgICAgeyJub3RyZWUiLCBub19hcmd1bWVudCwgJmR1bXBUcmVlLCBmYWxzZX0s
Ci0gICAgICAgIHsicGl4ZWwtdGVzdHMiLCBub19hcmd1bWVudCwgJmR1bXBQaXhlbHMsIHRydWV9
LAogICAgICAgICB7InRyZWUiLCBub19hcmd1bWVudCwgJmR1bXBUcmVlLCB0cnVlfSwKICAgICAg
ICAgeyJuby10aW1lb3V0Iiwgbm9fYXJndW1lbnQsICZ1c2VUaW1lb3V0V2F0Y2hkb2csIGZhbHNl
fSwKICAgICAgICAge05VTEwsIDAsIE5VTEwsIDB9CkBAIC02MjQsNyArNjIzLDcgQEAgdm9pZCBk
dW1wKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChkdW1wUGl4ZWxzCisgICAgaWYgKGR1
bXBQaXhlbHNGb3JDdXJyZW50VGVzdAogICAgICAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmdl
bmVyYXRlUGl4ZWxSZXN1bHRzKCkKICAgICAgJiYgIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVt
cERPTUFzV2ViQXJjaGl2ZSgpCiAgICAgICYmICFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBT
b3VyY2VBc1dlYkFyY2hpdmUoKSkgewpAQCAtNjg3LDE4ICs2ODYsMTMgQEAgc3RhdGljIHZvaWQg
c2VuZFBpeGVsUmVzdWx0c0VPRigpCiAgICAgZmZsdXNoKHN0ZGVycik7CiB9CiAKLXN0YXRpYyB2
b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiB0ZXN0UGF0aE9yVVJMKQorc3RhdGljIHZvaWQgcnVu
VGVzdChjb25zdCBzdHJpbmcmIGlucHV0TGluZSkKIHsKICAgICBBU1NFUlQoIXRlc3RQYXRoT3JV
UkwuZW1wdHkoKSk7CiAKLSAgICAvLyBMb29rIGZvciAiJyIgYXMgYSBzZXBhcmF0b3IgYmV0d2Vl
biB0aGUgcGF0aCBvciBVUkwsIGFuZCB0aGUgcGl4ZWwgZHVtcCBoYXNoIHRoYXQgZm9sbG93cy4K
LSAgICBzdHJpbmcgdGVzdFVSTCh0ZXN0UGF0aE9yVVJMKTsKLSAgICBzdHJpbmcgZXhwZWN0ZWRQ
aXhlbEhhc2g7Ci0gICAgc2l6ZV90IHNlcGFyYXRvclBvcyA9IHRlc3RVUkwuZmluZCgiJyIpOwot
ICAgIGlmIChzZXBhcmF0b3JQb3MgIT0gc3RyaW5nOjpucG9zKSB7Ci0gICAgICAgIHRlc3RVUkwg
PSBzdHJpbmcodGVzdFBhdGhPclVSTCwgMCwgc2VwYXJhdG9yUG9zKTsKLSAgICAgICAgZXhwZWN0
ZWRQaXhlbEhhc2ggPSBzdHJpbmcodGVzdFBhdGhPclVSTCwgc2VwYXJhdG9yUG9zICsgMSk7Ci0g
ICAgfQorICAgIFRlc3RDb21tYW5kIGNvbW1hbmQgPSBwYXJzZUlucHV0TGluZShpbnB1dExpbmUp
OworICAgIHN0cmluZyYgdGVzdFVSTCA9IGNvbW1hbmQucGF0aE9yVVJMOworICAgIGR1bXBQaXhl
bHNGb3JDdXJyZW50VGVzdCA9IGNvbW1hbmQuc2hvdWxkRHVtcFBpeGVsczsKIAogICAgIC8vIENv
bnZlcnQgdGhlIHBhdGggaW50byBhIGZ1bGwgZmlsZSBVUkwgaWYgaXQgZG9lcyBub3QgbG9vawog
ICAgIC8vIGxpa2UgYW4gSFRUUC9TIFVSTCAoZG9lc24ndCBzdGFydCB3aXRoIGh0dHA6Ly8gb3Ig
aHR0cHM6Ly8pLgpAQCAtNzEyLDcgKzcwNiw3IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qg
c3RyaW5nJiB0ZXN0UGF0aE9yVVJMKQogCiAgICAgcmVzZXREZWZhdWx0c1RvQ29uc2lzdGVudFZh
bHVlcygpOwogCi0gICAgZ0xheW91dFRlc3RDb250cm9sbGVyID0gTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmNyZWF0ZSh0ZXN0VVJMLCBleHBlY3RlZFBpeGVsSGFzaCk7CisgICAgZ0xheW91dFRlc3RD
b250cm9sbGVyID0gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNyZWF0ZSh0ZXN0VVJMLCBjb21tYW5k
LmV4cGVjdGVkUGl4ZWxIYXNoKTsKICAgICB0b3BMb2FkaW5nRnJhbWUgPSAwOwogICAgIGRvbmUg
PSBmYWxzZTsKIApAQCAtMTQ0Nyw3ICsxNDQxLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIq
IGFyZ3ZbXSkKICAgICAgICAgcHJpbnRTZXBhcmF0b3JzID0gdHJ1ZTsKICAgICAgICAgcnVuVGVz
dGluZ1NlcnZlckxvb3AoKTsKICAgICB9IGVsc2UgewotICAgICAgICBwcmludFNlcGFyYXRvcnMg
PSAob3B0aW5kIDwgYXJnYy0xIHx8IChkdW1wUGl4ZWxzICYmIGR1bXBUcmVlKSk7CisgICAgICAg
IHByaW50U2VwYXJhdG9ycyA9IChvcHRpbmQgPCBhcmdjLTEgfHwgKGR1bXBQaXhlbHNGb3JDdXJy
ZW50VGVzdCAmJiBkdW1wVHJlZSkpOwogICAgICAgICBmb3IgKGludCBpID0gb3B0aW5kOyBpICE9
IGFyZ2M7ICsraSkKICAgICAgICAgICAgIHJ1blRlc3QoYXJndltpXSk7CiAgICAgfQpkaWZmIC0t
Z2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCmluZGV4IGFiYmE1MzVlZGRjODhh
Mzk0OTAyOTRmZDQ1MWEzOTE5NjhmY2MzZDEuLjNmOWQ0MjY2NDUxZmFjYmUxMTUwOTYyMDM1NTk3
OTAzMmJlYmU2ZmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVu
ZGVyVHJlZS5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUu
bW0KQEAgLTE0MCw3ICsxNDAsNyBAQCBzdGF0aWMgSGlzdG9yeURlbGVnYXRlICpoaXN0b3J5RGVs
ZWdhdGU7CiBQb2xpY3lEZWxlZ2F0ZSAqcG9saWN5RGVsZWdhdGU7CiBTdG9yYWdlVHJhY2tlckRl
bGVnYXRlICpzdG9yYWdlRGVsZWdhdGU7CiAKLXN0YXRpYyBpbnQgZHVtcFBpeGVsczsKK3N0YXRp
YyBib29sIGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdDsKIHN0YXRpYyBpbnQgdGhyZWFkZWQ7CiBz
dGF0aWMgaW50IGR1bXBUcmVlID0gWUVTOwogc3RhdGljIGludCB1c2VUaW1lb3V0V2F0Y2hkb2cg
PSBZRVM7CkBAIC03ODAsNyArNzgwLDYgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUdsb2JhbHNG
cm9tQ29tbWFuZExpbmVPcHRpb25zKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10KIHsKICAg
ICBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKICAgICAgICAgeyJub3RyZWUiLCBub19hcmd1
bWVudCwgJmR1bXBUcmVlLCBOT30sCi0gICAgICAgIHsicGl4ZWwtdGVzdHMiLCBub19hcmd1bWVu
dCwgJmR1bXBQaXhlbHMsIFlFU30sCiAgICAgICAgIHsidHJlZSIsIG5vX2FyZ3VtZW50LCAmZHVt
cFRyZWUsIFlFU30sCiAgICAgICAgIHsidGhyZWFkZWQiLCBub19hcmd1bWVudCwgJnRocmVhZGVk
LCBZRVN9LAogICAgICAgICB7ImNvbXBsZXgtdGV4dCIsIG5vX2FyZ3VtZW50LCAmZm9yY2VDb21w
bGV4VGV4dCwgWUVTfSwKQEAgLTg0OSw3ICs4NDgsNyBAQCB2b2lkIGR1bXBSZW5kZXJUcmVlKGlu
dCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pCiAgICAgaW5pdGlhbGl6ZUdsb2JhbHNGcm9tQ29t
bWFuZExpbmVPcHRpb25zKGFyZ2MsIGFyZ3YpOwogICAgIHByZXBhcmVDb25zaXN0ZW50VGVzdGlu
Z0Vudmlyb25tZW50KCk7CiAgICAgYWRkVGVzdFBsdWdpbnNUb1BsdWdpblNlYXJjaFBhdGgoYXJn
dlswXSk7Ci0gICAgaWYgKGR1bXBQaXhlbHMpCisgICAgaWYgKGR1bXBQaXhlbHNGb3JDdXJyZW50
VGVzdCkKICAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXJzKCk7CiAKICAgICBpZiAoZm9yY2VD
b21wbGV4VGV4dCkKQEAgLTg3NCw3ICs4NzMsNyBAQCB2b2lkIGR1bXBSZW5kZXJUcmVlKGludCBh
cmdjLCBjb25zdCBjaGFyICphcmd2W10pCiAgICAgICAgIHByaW50U2VwYXJhdG9ycyA9IFlFUzsK
ICAgICAgICAgcnVuVGVzdGluZ1NlcnZlckxvb3AoKTsKICAgICB9IGVsc2UgewotICAgICAgICBw
cmludFNlcGFyYXRvcnMgPSAob3B0aW5kIDwgYXJnYy0xIHx8IChkdW1wUGl4ZWxzICYmIGR1bXBU
cmVlKSk7CisgICAgICAgIHByaW50U2VwYXJhdG9ycyA9IChvcHRpbmQgPCBhcmdjIC0gMSB8fCAo
ZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ICYmIGR1bXBUcmVlKSk7CiAgICAgICAgIGZvciAoaW50
IGkgPSBvcHRpbmQ7IGkgIT0gYXJnYzsgKytpKQogICAgICAgICAgICAgcnVuVGVzdChhcmd2W2ld
KTsKICAgICB9CkBAIC0xMTk1LDcgKzExOTQsNyBAQCB2b2lkIGR1bXAoKQogICAgICAgICB9ICAg
ICAgICAgICAgCiAgICAgfQogCi0gICAgaWYgKGR1bXBQaXhlbHMgJiYgZ0xheW91dFRlc3RDb250
cm9sbGVyLT5nZW5lcmF0ZVBpeGVsUmVzdWx0cygpKQorICAgIGlmIChkdW1wUGl4ZWxzRm9yQ3Vy
cmVudFRlc3QgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5nZW5lcmF0ZVBpeGVsUmVzdWx0cygp
KQogICAgICAgICAvLyBGSVhNRTogd2hlbiBpc1ByaW50aW5nIGlzIHNldCwgZHVtcCB0aGUgaW1h
Z2Ugd2l0aCBwYWdlIHNlcGFyYXRvcnMuCiAgICAgICAgIGR1bXBXZWJWaWV3QXNQaXhlbHNBbmRD
b21wYXJlV2l0aEV4cGVjdGVkKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZXhwZWN0ZWRQaXhlbEhh
c2goKSk7CiAKQEAgLTEyNzYsMTkgKzEyNzUsMTMgQEAgc3RhdGljIHZvaWQgcmVzZXRXZWJWaWV3
VG9Db25zaXN0ZW50U3RhdGVCZWZvcmVUZXN0aW5nKCkKICAgICBbbWFpbkZyYW1lIF9jbGVhck9w
ZW5lcl07CiB9CiAKLXN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiB0ZXN0UGF0aE9y
VVJMKQorc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIGlucHV0TGluZSkKIHsKLSAg
ICBBU1NFUlQoIXRlc3RQYXRoT3JVUkwuZW1wdHkoKSk7Ci0gICAgCi0gICAgLy8gTG9vayBmb3Ig
IiciIGFzIGEgc2VwYXJhdG9yIGJldHdlZW4gdGhlIHBhdGggb3IgVVJMLCBhbmQgdGhlIHBpeGVs
IGR1bXAgaGFzaCB0aGF0IGZvbGxvd3MuCi0gICAgc3RyaW5nIHBhdGhPclVSTCh0ZXN0UGF0aE9y
VVJMKTsKLSAgICBzdHJpbmcgZXhwZWN0ZWRQaXhlbEhhc2g7Ci0gICAgCi0gICAgc2l6ZV90IHNl
cGFyYXRvclBvcyA9IHBhdGhPclVSTC5maW5kKCInIik7Ci0gICAgaWYgKHNlcGFyYXRvclBvcyAh
PSBzdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgcGF0aE9yVVJMID0gc3RyaW5nKHRlc3RQYXRoT3JV
UkwsIDAsIHNlcGFyYXRvclBvcyk7Ci0gICAgICAgIGV4cGVjdGVkUGl4ZWxIYXNoID0gc3RyaW5n
KHRlc3RQYXRoT3JVUkwsIHNlcGFyYXRvclBvcyArIDEpOwotICAgIH0KKyAgICBBU1NFUlQoIWlu
cHV0TGluZS5lbXB0eSgpKTsKKworICAgIFRlc3RDb21tYW5kIGNvbW1hbmQgPSBwYXJzZUlucHV0
TGluZShpbnB1dExpbmUpOworICAgIGNvbnN0IHN0cmluZyYgcGF0aE9yVVJMID0gY29tbWFuZC5w
YXRoT3JVUkw7CisgICAgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gY29tbWFuZC5zaG91bGRE
dW1wUGl4ZWxzOwogCiAgICAgTlNTdHJpbmcgKnBhdGhPclVSTFN0cmluZyA9IFtOU1N0cmluZyBz
dHJpbmdXaXRoVVRGOFN0cmluZzpwYXRoT3JVUkwuY19zdHIoKV07CiAgICAgaWYgKCFwYXRoT3JV
UkxTdHJpbmcpIHsKQEAgLTEzMTAsNyArMTMwMyw3IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29u
c3Qgc3RyaW5nJiB0ZXN0UGF0aE9yVVJMKQogICAgIAogICAgIHJlc2V0V2ViVmlld1RvQ29uc2lz
dGVudFN0YXRlQmVmb3JlVGVzdGluZygpOwogCi0gICAgZ0xheW91dFRlc3RDb250cm9sbGVyID0g
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmNyZWF0ZSh0ZXN0VVJMLCBleHBlY3RlZFBpeGVsSGFzaCk7
CisgICAgZ0xheW91dFRlc3RDb250cm9sbGVyID0gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNyZWF0
ZSh0ZXN0VVJMLCBjb21tYW5kLmV4cGVjdGVkUGl4ZWxIYXNoKTsKICAgICB0b3BMb2FkaW5nRnJh
bWUgPSBuaWw7CiAgICAgQVNTRVJUKCFkcmFnZ2luZ0luZm8pOyAvLyB0aGUgcHJldmlvdXMgdGVz
dCBzaG91bGQgaGF2ZSBjYWxsZWQgZXZlbnRTZW5kZXIubW91c2VVcCB0byBkcm9wIQogICAgIHJl
bGVhc2VBbmRaZXJvKCZkcmFnZ2luZ0luZm8pOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVt
cFJlbmRlclRyZWUucHJvCmluZGV4IGY0N2ZiNDM0NGI5ZWY4M2E1YWE0NmJiNTY4M2Q5MjMxNDk0
YWExMjUuLjgzMzg3MGJjYWM5YTgyZWRjZWU4MWVkNWRiYTMxOTEwYWNmMGYwZjIgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlLnBybworKysgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5wcm8KQEAgLTI1LDYgKzI1LDcgQEAg
Y29udGFpbnMoREVGSU5FUywgSEFWRV9GT05UQ09ORklHPTEpOiBQS0dDT05GSUcgKz0gZm9udGNv
bmZpZwogCiBIRUFERVJTICs9IFwKICAgICAkJFBXRC8uLi9Xb3JrUXVldWUuaCBcCisgICAgJCRQ
V0QvLi4vRHVtcFJlbmRlclRyZWUuaCBcCiAgICAgRHVtcFJlbmRlclRyZWVRdC5oIFwKICAgICBF
dmVudFNlbmRlclF0LmggXAogICAgIFRleHRJbnB1dENvbnRyb2xsZXJRdC5oIFwKQEAgLTM2LDYg
KzM3LDcgQEAgSEVBREVSUyArPSBcCiAKIFNPVVJDRVMgKz0gXAogICAgICQkUFdELy4uL1dvcmtR
dWV1ZS5jcHAgXAorICAgICQkUFdELy4uL0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcCBcCiAgICAg
RHVtcFJlbmRlclRyZWVRdC5jcHAgXAogICAgIEV2ZW50U2VuZGVyUXQuY3BwIFwKICAgICBUZXh0
SW5wdXRDb250cm9sbGVyUXQuY3BwIFwKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJl
bmRlclRyZWVRdC5jcHAKaW5kZXggMGVjZjYyMmYzZjhkZGE1NmM0Yzg4Y2VmY2YwOGEzYzk4Y2Yy
MzdjNC4uNWE1Y2I5NmFkZWM5M2NkMGViNjg1MDBlNzZlYzMxZWZkZGEwOTdhZiAxMDA3NTUKLS0t
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAKKysrIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAKQEAgLTMwLDYgKzMwLDcg
QEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWUu
aCIKIAogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlUXQuaCIKICNpbmNsdWRlICJEdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdC5oIgpAQCAtNjkwLDQ0ICs2OTEsMjcgQEAgdm9pZCBEdW1wUmVuZGVyVHJl
ZTo6bG9hZE5leHRUZXN0SW5TdGFuZEFsb25lTW9kZSgpCiAKIHZvaWQgRHVtcFJlbmRlclRyZWU6
OnByb2Nlc3NMaW5lKGNvbnN0IFFTdHJpbmcgJmlucHV0KQogewotICAgIFFTdHJpbmcgbGluZSA9
IGlucHV0OwotCi0gICAgbV9kdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgPSBmYWxzZTsKLSAgICBt
X2V4cGVjdGVkSGFzaCA9IFFTdHJpbmcoKTsKLSAgICAvLyBzaW5nbGUgcXVvdGUgbWFya3MgdGhl
IHBpeGVsIGR1bXAgaGFzaAotICAgIGludCBpbmRleE9mRmlyc3RTZXBhcmF0b3IgPSBsaW5lLmlu
ZGV4T2YoJ1wnJyk7Ci0gICAgaW50IGluZGV4T2ZTZWNvbmRTZXBhcmF0b3IgPSBsaW5lLmluZGV4
T2YoJ1wnJywgaW5kZXhPZkZpcnN0U2VwYXJhdG9yICsgMSk7Ci0gICAgaWYgKGluZGV4T2ZGaXJz
dFNlcGFyYXRvciA+IC0xKSB7Ci0gICAgICAgIGludCBpbmRleE9mUGl4ZWxIYXNoID0gaW5kZXhP
ZkZpcnN0U2VwYXJhdG9yICsgMTsKLQotICAgICAgICAvLyBOUldUIHBhc3NlcyAtLXBpeGVsLXRl
c3QgaWYgd2Ugc2hvdWxkIGR1bXAgcGl4ZWxzIGZvciB0aGUgdGVzdC4KLSAgICAgICAgY29uc3Qg
UVN0cmluZyBleHBlY3RlZEFyZyhRTGF0aW4xU3RyaW5nKCItLXBpeGVsLXRlc3QiKSk7Ci0gICAg
ICAgIFFTdHJpbmcgYXJnVGVzdCA9IGxpbmUubWlkKGluZGV4T2ZGaXJzdFNlcGFyYXRvciArIDEs
IGV4cGVjdGVkQXJnLmxlbmd0aCgpKTsKLSAgICAgICAgaWYgKGFyZ1Rlc3QgPT0gZXhwZWN0ZWRB
cmcpIHsKLSAgICAgICAgICAgIG1fZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gdHJ1ZTsKLSAg
ICAgICAgICAgIGluZGV4T2ZQaXhlbEhhc2ggPSBpbmRleE9mU2Vjb25kU2VwYXJhdG9yID09IC0x
ID8gLTEgOiBpbmRleE9mU2Vjb25kU2VwYXJhdG9yICsgMTsKLSAgICAgICAgfQotICAgICAgICBp
ZiAoaW5kZXhPZlBpeGVsSGFzaCAhPSAtMSAmJiBpbmRleE9mUGl4ZWxIYXNoIDwgbGluZS5zaXpl
KCkpCi0gICAgICAgICAgICBtX2V4cGVjdGVkSGFzaCA9IGxpbmUubWlkKGluZGV4T2ZQaXhlbEhh
c2gpOwotICAgICAgICBsaW5lLnJlbW92ZShpbmRleE9mRmlyc3RTZXBhcmF0b3IsIGxpbmUubGVu
Z3RoKCkpOwotICAgIH0KLQotICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoUUxhdGluMVN0cmluZygi
aHR0cDoiKSkKLSAgICAgICAgICAgIHx8IGxpbmUuc3RhcnRzV2l0aChRTGF0aW4xU3RyaW5nKCJo
dHRwczoiKSkKLSAgICAgICAgICAgIHx8IGxpbmUuc3RhcnRzV2l0aChRTGF0aW4xU3RyaW5nKCJm
aWxlOiIpKQotICAgICAgICAgICAgfHwgbGluZSA9PSBRTGF0aW4xU3RyaW5nKCJhYm91dDpibGFu
ayIpKSB7Ci0gICAgICAgIG9wZW4oUVVybChsaW5lKSk7CisgICAgVGVzdENvbW1hbmQgY29tbWFu
ZCA9IHBhcnNlSW5wdXRMaW5lKHN0ZDo6c3RyaW5nKGlucHV0LnRvTGF0aW4xKCkuY29uc3REYXRh
KCkpKTsKKyAgICBRU3RyaW5nIHBhdGhPclVSTCA9IFFMYXRpbjFTdHJpbmcoY29tbWFuZC5wYXRo
T3JVUkwuY19zdHIoKSk7CisgICAgbV9kdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgPSBjb21tYW5k
LnNob3VsZER1bXBQaXhlbHM7CisgICAgbV9leHBlY3RlZEhhc2ggPSBRTGF0aW4xU3RyaW5nKGNv
bW1hbmQuZXhwZWN0ZWRQaXhlbEhhc2guY19zdHIoKSk7CisKKyAgICBpZiAocGF0aE9yVVJMLnN0
YXJ0c1dpdGgoUUxhdGluMVN0cmluZygiaHR0cDoiKSkKKyAgICAgICAgICAgIHx8IHBhdGhPclVS
TC5zdGFydHNXaXRoKFFMYXRpbjFTdHJpbmcoImh0dHBzOiIpKQorICAgICAgICAgICAgfHwgcGF0
aE9yVVJMLnN0YXJ0c1dpdGgoUUxhdGluMVN0cmluZygiZmlsZToiKSkKKyAgICAgICAgICAgIHx8
IHBhdGhPclVSTCA9PSBRTGF0aW4xU3RyaW5nKCJhYm91dDpibGFuayIpKSB7CisgICAgICAgIG9w
ZW4oUVVybChwYXRoT3JVUkwpKTsKICAgICB9IGVsc2UgewotICAgICAgICBRRmlsZUluZm8gZmko
bGluZSk7CisgICAgICAgIFFGaWxlSW5mbyBmaShwYXRoT3JVUkwpOwogCiAgICAgICAgIGlmICgh
ZmkuZXhpc3RzKCkpIHsKICAgICAgICAgICAgIFFEaXIgY3VycmVudERpciA9IFFEaXI6OmN1cnJl
bnRQYXRoKCk7CiAKICAgICAgICAgICAgIC8vIFRyeSB0byBiZSBzbWFydCBhYm91dCB3aGVyZSB0
aGUgdGVzdCBpcyBsb2NhdGVkCiAgICAgICAgICAgICBpZiAoY3VycmVudERpci5kaXJOYW1lKCkg
PT0gUUxhdGluMVN0cmluZygiTGF5b3V0VGVzdHMiKSkKLSAgICAgICAgICAgICAgICBmaSA9IFFG
aWxlSW5mbyhjdXJyZW50RGlyLCBsaW5lLnJlcGxhY2UoUVJlZ0V4cCgiLio/TGF5b3V0VGVzdHMv
KC4qKSIpLCAiXFwxIikpOwotICAgICAgICAgICAgZWxzZSBpZiAoIWxpbmUuY29udGFpbnMoUUxh
dGluMVN0cmluZygiTGF5b3V0VGVzdHMiKSkpCi0gICAgICAgICAgICAgICAgZmkgPSBRRmlsZUlu
Zm8oY3VycmVudERpciwgbGluZS5wcmVwZW5kKFFMYXRpbjFTdHJpbmcoIkxheW91dFRlc3RzLyIp
KSk7CisgICAgICAgICAgICAgICAgZmkgPSBRRmlsZUluZm8oY3VycmVudERpciwgcGF0aE9yVVJM
LnJlcGxhY2UoUVJlZ0V4cCgiLio/TGF5b3V0VGVzdHMvKC4qKSIpLCAiXFwxIikpOworICAgICAg
ICAgICAgZWxzZSBpZiAoIXBhdGhPclVSTC5jb250YWlucyhRTGF0aW4xU3RyaW5nKCJMYXlvdXRU
ZXN0cyIpKSkKKyAgICAgICAgICAgICAgICBmaSA9IFFGaWxlSW5mbyhjdXJyZW50RGlyLCBwYXRo
T3JVUkwucHJlcGVuZChRTGF0aW4xU3RyaW5nKCJMYXlvdXRUZXN0cy8iKSkpOwogCiAgICAgICAg
ICAgICBpZiAoIWZpLmV4aXN0cygpKSB7CiAgICAgICAgICAgICAgICAgZW1pdCByZWFkeSgpOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAKaW5kZXggZjQwMmEw
MmNhMzYyYzUyNzlkZTVhNWM4YzFlMGNlOWRmMzYyYWJhZC4uMzEyNDMwZDU2OTg5NTQ4YmMzZWNh
ZDEzZjhkZjE4MzA5NmMxN2M4NSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L0R1bXBSZW5kZXJUcmVlLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJl
bmRlclRyZWUuY3BwCkBAIC04MCw3ICs4MCw3IEBAIHN0YXRpYyBMUENXU1RSIGZvbnRzRW52aXJv
bm1lbnRWYXJpYWJsZSA9IEwiV0VCS0lUX1RFU1RGT05UUyI7CiBjb25zdCBMUENXU1RSIGtEdW1w
UmVuZGVyVHJlZUNsYXNzTmFtZSA9IEwiRHVtcFJlbmRlclRyZWVXaW5kb3ciOwogCiBzdGF0aWMg
Ym9vbCBkdW1wVHJlZSA9IHRydWU7Ci1zdGF0aWMgYm9vbCBkdW1wUGl4ZWxzOworc3RhdGljIGJv
b2wgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0Owogc3RhdGljIGJvb2wgZHVtcEFsbFBpeGVsczsK
IHN0YXRpYyBib29sIHByaW50U2VwYXJhdG9yczsKIHN0YXRpYyBib29sIGxlYWtDaGVja2luZyA9
IGZhbHNlOwpAQCAtNzU5LDcgKzc1OSw3IEBAIHZvaWQgZHVtcCgpCiAgICAgICAgIGZmbHVzaChz
dGRlcnIpOwogICAgIH0KIAotICAgIGlmIChkdW1wUGl4ZWxzCisgICAgaWYgKGR1bXBQaXhlbHNG
b3JDdXJyZW50VGVzdAogICAgICAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmdlbmVyYXRlUGl4
ZWxSZXN1bHRzKCkKICAgICAgJiYgIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcERPTUFzV2Vi
QXJjaGl2ZSgpCiAgICAgICYmICFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBTb3VyY2VBc1dl
YkFyY2hpdmUoKSkKQEAgLTk0OCwyMCArOTQ4LDE0IEBAIHN0YXRpYyB2b2lkIHNpemVXZWJWaWV3
Rm9yQ3VycmVudFRlc3QoKQogICAgIDo6U2V0V2luZG93UG9zKHdlYlZpZXdXaW5kb3csIDAsIDAs
IDAsIHdpZHRoLCBoZWlnaHQsIFNXUF9OT01PVkUpOwogfQogCi1zdGF0aWMgdm9pZCBydW5UZXN0
KGNvbnN0IHN0cmluZyYgdGVzdFBhdGhPclVSTCkKK3N0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qg
c3RyaW5nJiBpbnB1dExpbmUpCiB7CisgICAgVGVzdENvbW1hbmQgY29tbWFuZCA9IHBhcnNlSW5w
dXRMaW5lKGlucHV0TGluZSk7CisgICAgY29uc3Qgc3RyaW5nJiBwYXRoT3JVUkwgPSBjb21tYW5k
LnBhdGhPclVSTDsKKyAgICBkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgPSBjb21tYW5kLnNob3Vs
ZER1bXBQaXhlbHM7CisKICAgICBzdGF0aWMgQlNUUiBtZXRob2RCU3RyID0gU3lzQWxsb2NTdHJp
bmcoVEVYVCgiR0VUIikpOwogCi0gICAgLy8gTG9vayBmb3IgIiciIGFzIGEgc2VwYXJhdG9yIGJl
dHdlZW4gdGhlIHBhdGggb3IgVVJMLCBhbmQgdGhlIHBpeGVsIGR1bXAgaGFzaCB0aGF0IGZvbGxv
d3MuCi0gICAgc3RyaW5nIHBhdGhPclVSTCh0ZXN0UGF0aE9yVVJMKTsKLSAgICBzdHJpbmcgZXhw
ZWN0ZWRQaXhlbEhhc2g7Ci0gICAgCi0gICAgc2l6ZV90IHNlcGFyYXRvclBvcyA9IHBhdGhPclVS
TC5maW5kKCInIik7Ci0gICAgaWYgKHNlcGFyYXRvclBvcyAhPSBzdHJpbmc6Om5wb3MpIHsKLSAg
ICAgICAgcGF0aE9yVVJMID0gc3RyaW5nKHRlc3RQYXRoT3JVUkwsIDAsIHNlcGFyYXRvclBvcyk7
Ci0gICAgICAgIGV4cGVjdGVkUGl4ZWxIYXNoID0gc3RyaW5nKHRlc3RQYXRoT3JVUkwsIHNlcGFy
YXRvclBvcyArIDEpOwotICAgIH0KLSAgICAKICAgICBCU1RSIHVybEJTdHI7CiAgCiAgICAgQ0ZT
dHJpbmdSZWYgc3RyID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ1N0cmluZygwLCBwYXRoT3JVUkwuY19z
dHIoKSwga0NGU3RyaW5nRW5jb2RpbmdXaW5kb3dzTGF0aW4xKTsKQEAgLTk4Myw3ICs5NzcsNyBA
QCBzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYgdGVzdFBhdGhPclVSTCkKIAogICAg
IENGUmVsZWFzZSh1cmwpOwogCi0gICAgOjpnTGF5b3V0VGVzdENvbnRyb2xsZXIgPSBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6Y3JlYXRlKHBhdGhPclVSTCwgZXhwZWN0ZWRQaXhlbEhhc2gpOworICAg
IDo6Z0xheW91dFRlc3RDb250cm9sbGVyID0gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNyZWF0ZShw
YXRoT3JVUkwsIGNvbW1hbmQuZXhwZWN0ZWRQaXhlbEhhc2gpOwogICAgIGRvbmUgPSBmYWxzZTsK
ICAgICB0b3BMb2FkaW5nRnJhbWUgPSAwOwogCkBAIC0xMzM3LDExICsxMzMxLDYgQEAgZXh0ZXJu
ICJDIiBfX2RlY2xzcGVjKGRsbGV4cG9ydCkgaW50IFdJTkFQSSBkbGxMYXVuY2hlckVudHJ5UG9p
bnQoaW50IGFyZ2MsIGNvbnMKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAg
ICAgICAgaWYgKCFzdHJpY21wKGFyZ3ZbaV0sICItLXBpeGVsLXRlc3RzIikpIHsKLSAgICAgICAg
ICAgIGR1bXBQaXhlbHMgPSB0cnVlOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0K
LQogICAgICAgICBpZiAoIXN0cmljbXAoYXJndltpXSwgIi0tY29tcGxleC10ZXh0IikpIHsKICAg
ICAgICAgICAgIGZvcmNlQ29tcGxleFRleHQgPSB0cnVlOwogICAgICAgICAgICAgY29udGludWU7
CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUudmNw
cm9qIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLnZjcHJvagppbmRl
eCA0ODQzYzM5MGU3YzZiNTJlMjRlMmIzNzcwNjU0NzhkMDc2YzA5N2ZhLi43ZTI0MmExY2RlNGEy
ZmNjYzFhMjQ3MWI2MTY5YjNlMzNlYWRjZGNkIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS93aW4vRHVtcFJlbmRlclRyZWUudmNwcm9qCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L3dpbi9EdW1wUmVuZGVyVHJlZS52Y3Byb2oKQEAgLTU2Myw2ICs1NjMsMTAgQEAKIAkJCT4KIAkJ
PC9GaWxlPgogCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlxEdW1wUmVuZGVyVHJlZUNvbW1v
bi5jcHAiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cRHVt
cFJlbmRlclRyZWVQcmVmaXguaCIKIAkJCT4KIAkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvd3NjcmlwdCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dzY3JpcHQKaW5k
ZXggNjQ1YzdkNjQxNTk4YWZlMmYxNGUxNjNhZDRjY2VmMjdjNTI4Yjc2NC4uYjMyOTI5NDUwYjI4
YWE4ODkyYzMzZTNiZTBkOTZmMGU2ZTExMzQxOCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvd3NjcmlwdAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93c2NyaXB0CkBAIC00MCw2
ICs0MCw3IEBAIGluY2x1ZGVfcGF0aHMgPSBbCiAgICAgICAgICAgICAgICAgJ3d4JwogICAgICAg
ICAgICAgICAgIF0KIHNvdXJjZXMgPSBbCisgICAgICAgICAgICAnRHVtcFJlbmRlclRyZWVDb21t
b24uY3BwJywKICAgICAgICAgICAgICdMYXlvdXRUZXN0Q29udHJvbGxlci5jcHAnLAogICAgICAg
ICAgICAgJ1dvcmtRdWV1ZS5jcHAnLAogICAgICAgICAgICAgJ3d4L0R1bXBSZW5kZXJUcmVlV3gu
Y3BwJywKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0R1bXBSZW5kZXJUcmVl
V3guY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvRHVtcFJlbmRlclRyZWVXeC5jcHAKaW5k
ZXggMzFhZGQxMWEyZWI3NGQxZjRkODMyOTQ3OWY0MTlmMTA3ZmZiYTg4Zi4uNDViODUyZDg4YWI5
YmRhMjkxZmIxZWQyNzdhY2E3NTFkZmQzNTA5NyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvd3gvRHVtcFJlbmRlclRyZWVXeC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
d3gvRHVtcFJlbmRlclRyZWVXeC5jcHAKQEAgLTUwLDcgKzUwLDcgQEAKIHZvbGF0aWxlIGJvb2wg
ZG9uZSA9IHRydWU7CiB2b2xhdGlsZSBib29sIG5vdGlmaWVkID0gZmFsc2U7CiBzdGF0aWMgYm9v
bCBwcmludFNlcGFyYXRvcnMgPSB0cnVlOwotc3RhdGljIGludCBkdW1wUGl4ZWxzOworc3RhdGlj
IGludCBkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3Q7CiBzdGF0aWMgaW50IGR1bXBUcmVlID0gMTsK
IHRpbWVfdCBzdGFydFRpbWU7IC8vIHRvIGRldGVjdCB0aW1lb3V0cyAvIGZhaWxlZCB0ZXN0cwog
CkBAIC0yMDMsNyArMjAzLDcgQEAgdm9pZCBkdW1wKCkKICAgICAgICAgfQogICAgIH0KIAotICAg
IGlmIChkdW1wUGl4ZWxzCisgICAgaWYgKGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdAogICAgICAg
ICAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmdlbmVyYXRlUGl4ZWxSZXN1bHRzKCkKICAgICAg
ICAgJiYgIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcERPTUFzV2ViQXJjaGl2ZSgpCiAgICAg
ICAgICYmICFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBTb3VyY2VBc1dlYkFyY2hpdmUoKSkg
ewpAQCAtMjE4LDI2ICsyMTgsMjEgQEAgdm9pZCBkdW1wKCkKICAgICBnTGF5b3V0VGVzdENvbnRy
b2xsZXIuY2xlYXIoKTsKIH0KIAotc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCB3eFN0cmluZyB0
ZXN0UGF0aE9yVVJMKQorc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCB3eFN0cmluZyBpbnB1dExp
bmUpCiB7CiAgICAgZG9uZSA9IGZhbHNlOwogICAgIHRpbWUoJnN0YXJ0VGltZSk7Ci0gICAgc3Ry
aW5nIHBhdGhPclVSTFN0cmluZyh0ZXN0UGF0aE9yVVJMLmNoYXJfc3RyKCkpOwotICAgIHN0cmlu
ZyBwYXRoT3JVUkwocGF0aE9yVVJMU3RyaW5nKTsKLSAgICBzdHJpbmcgZXhwZWN0ZWRQaXhlbEhh
c2g7Ci0KLSAgICBzaXplX3Qgc2VwYXJhdG9yUG9zID0gcGF0aE9yVVJMLmZpbmQoIiciKTsKLSAg
ICBpZiAoc2VwYXJhdG9yUG9zICE9IHN0cmluZzo6bnBvcykgewotICAgICAgICBwYXRoT3JVUkwg
PSBzdHJpbmcocGF0aE9yVVJMU3RyaW5nLCAwLCBzZXBhcmF0b3JQb3MpOwotICAgICAgICBleHBl
Y3RlZFBpeGVsSGFzaCA9IHN0cmluZyhwYXRoT3JVUkxTdHJpbmcsIHNlcGFyYXRvclBvcyArIDEp
OwotICAgIH0KKworICAgIFRlc3RDb21tYW5kIGNvbW1hbmQgPSBwYXJzZUlucHV0TGluZShzdGQ6
OnN0cmluZyhpbnB1dExpbmUuVG9Bc2NpaSgpKSk7CisgICAgc3RyaW5nJiBwYXRoT3JVUkwgPSBj
b21tYW5kLnBhdGhPclVSTDsKKyAgICBkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgPSBjb21tYW5k
LnNob3VsZER1bXBQaXhlbHM7CiAgICAgCiAgICAgLy8gQ1VSTCBpc24ndCBoYXBweSBpZiB3ZSBk
b24ndCBoYXZlIGEgcHJvdG9jb2wuCiAgICAgc2l6ZV90IGh0dHAgPSBwYXRoT3JVUkwuZmluZCgi
aHR0cDovLyIpOwogICAgIGlmIChodHRwID09IHN0cmluZzo6bnBvcykKICAgICAgICAgcGF0aE9y
VVJMLmluc2VydCgwLCAiZmlsZTovLyIpOwogICAgIAotICAgIGdMYXlvdXRUZXN0Q29udHJvbGxl
ciA9IExheW91dFRlc3RDb250cm9sbGVyOjpjcmVhdGUocGF0aE9yVVJMLCBleHBlY3RlZFBpeGVs
SGFzaCk7CisgICAgZ0xheW91dFRlc3RDb250cm9sbGVyID0gTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmNyZWF0ZShwYXRoT3JVUkwsIGNvbW1hbmQuZXhwZWN0ZWRQaXhlbEhhc2gpOwogICAgIGlmICgh
Z0xheW91dFRlc3RDb250cm9sbGVyKSB7CiAgICAgICAgIHd4VGhlQXBwLT5FeGl0TWFpbkxvb3Ao
KTsKICAgICB9CkBAIC0yODIsMTEgKzI3Nyw2IEBAIGJvb2wgTXlBcHA6Ok9uSW5pdCgpCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKCFvcHRp
b24uQ21wTm9DYXNlKF9UKCItLXBpeGVsLXRlc3RzIikpKSB7Ci0gICAgICAgICAgICBkdW1wUGl4
ZWxzID0gdHJ1ZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIAog
ICAgICAgICBpZiAoIW9wdGlvbi5DbXBOb0Nhc2UoX1QoIi0tdHJlZSIpKSkgewogICAgICAgICAg
ICAgZHVtcFRyZWUgPSB0cnVlOwogICAgICAgICAgICAgY29udGludWU7CkBAIC0zMjMsNyArMzEz
LDcgQEAgYm9vbCBNeUFwcDo6T25Jbml0KCkKICAgICAgICAgfQogICAgIAogICAgIH0gZWxzZSB7
Ci0gICAgICAgIHByaW50U2VwYXJhdG9ycyA9IChvcHRpbmQgPCBhcmdjLTEgfHwgKGR1bXBQaXhl
bHMgJiYgZHVtcFRyZWUpKTsKKyAgICAgICAgcHJpbnRTZXBhcmF0b3JzID0gKG9wdGluZCA8IGFy
Z2MgLSAxIHx8IChkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgJiYgZHVtcFRyZWUpKTsKICAgICAg
ICAgZm9yIChpbnQgaSA9IG9wdGluZDsgaSAhPSBhcmdjOyArK2kpIHsKICAgICAgICAgICAgIHJ1
blRlc3Qod3hUaGVBcHAtPmFyZ3ZbMV0pOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL29sZC1ydW4td2Via2l0LXRlc3RzIGIvVG9vbHMvU2NyaXB0cy9vbGQtcnVuLXdlYmtp
dC10ZXN0cwppbmRleCAwOTQ0M2M4N2MwMmYxZThjZjViZGU2ZDFiMDQ1YzRkYjliYWIwODgyLi5k
NzBjZTQ1MjAwYjJmMWUzMWQ3MWRmMTUwNmFkODMwYWE2N2RiMzNlIDEwMDc1NQotLS0gYS9Ub29s
cy9TY3JpcHRzL29sZC1ydW4td2Via2l0LXRlc3RzCisrKyBiL1Rvb2xzL1NjcmlwdHMvb2xkLXJ1
bi13ZWJraXQtdGVzdHMKQEAgLTc0OCwxMiArNzQ4LDE1IEBAIGZvciBteSAkdGVzdCAoQHRlc3Rz
KSB7CiAgICAgcHJpbnQgJHRlc3RzX3J1bl9maCAiJHRlc3RcbiI7CiAKICAgICAjIFRyeSB0byBy
ZWFkIGV4cGVjdGVkIGhhc2ggZmlsZSBmb3IgcGl4ZWwgdGVzdHMKLSAgICBteSAkc3VmZml4RXhw
ZWN0ZWRIYXNoID0gIiI7Ci0gICAgaWYgKCRwaXhlbFRlc3RzICYmICEkcmVzZXRSZXN1bHRzKSB7
Ci0gICAgICAgIG15ICRleHBlY3RlZFBpeGVsRGlyID0gZXhwZWN0ZWREaXJlY3RvcnlGb3JUZXN0
KCRiYXNlLCAwLCAicG5nIik7Ci0gICAgICAgIGlmIChteSAkZXhwZWN0ZWRIYXNoID0gcmVhZENo
ZWNrc3VtRnJvbVBuZyhGaWxlOjpTcGVjLT5jYXRmaWxlKCRleHBlY3RlZFBpeGVsRGlyLCAiJGJh
c2UtJGV4cGVjdGVkVGFnLnBuZyIpKSkgewotICAgICAgICAgICAgIyBGb3JtYXQgZXhwZWN0ZWQg
aGFzaCBpbnRvIGEgc3VmZml4IHN0cmluZyB0aGF0IGlzIGFwcGVuZGVkIHRvIHRoZSBwYXRoIC8g
VVJMIHBhc3NlZCB0byBEUlQuCi0gICAgICAgICAgICAkc3VmZml4RXhwZWN0ZWRIYXNoID0gIick
ZXhwZWN0ZWRIYXNoIjsKKyAgICBteSAkc3VmZml4UGl4ZWxUZXN0ID0gIiI7CisgICAgaWYgKCRw
aXhlbFRlc3RzKSB7CisgICAgICAgICRzdWZmaXhQaXhlbFRlc3QgPSAiOi0tcGl4ZWwtdGVzdCI7
CisgICAgICAgIGlmICghJHJlc2V0UmVzdWx0cykgeworICAgICAgICAgICAgbXkgJGV4cGVjdGVk
UGl4ZWxEaXIgPSBleHBlY3RlZERpcmVjdG9yeUZvclRlc3QoJGJhc2UsIDAsICJwbmciKTsKKyAg
ICAgICAgICAgIGlmIChteSAkZXhwZWN0ZWRIYXNoID0gcmVhZENoZWNrc3VtRnJvbVBuZyhGaWxl
OjpTcGVjLT5jYXRmaWxlKCRleHBlY3RlZFBpeGVsRGlyLCAiJGJhc2UtJGV4cGVjdGVkVGFnLnBu
ZyIpKSkgeworICAgICAgICAgICAgICAgICMgRm9ybWF0IGV4cGVjdGVkIGhhc2ggaW50byBhIHN1
ZmZpeCBzdHJpbmcgdGhhdCBpcyBhcHBlbmRlZCB0byB0aGUgcGF0aCAvIFVSTCBwYXNzZWQgdG8g
RFJULgorICAgICAgICAgICAgICAgICRzdWZmaXhQaXhlbFRlc3QgPSAiOi0tcGl4ZWwtdGVzdDok
ZXhwZWN0ZWRIYXNoIjsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtNzg5
LDExICs3OTIsMTEgQEAgZm9yIG15ICR0ZXN0IChAdGVzdHMpIHsKICAgICAgICAgfSBlbHNpZiAo
JHRlc3QgIX4gL15odHRwXC90ZXN0c1wvbG9jYWxcLy8gJiYgJHRlc3QgIX4gL15odHRwXC90ZXN0
c1wvc3NsXC8vKSB7CiAgICAgICAgICAgICBteSAkcGF0aCA9IGNhbm9ucGF0aCgkdGVzdCk7CiAg
ICAgICAgICAgICAkcGF0aCA9fiBzL15odHRwXC90ZXN0c1wvLy87Ci0gICAgICAgICAgICBwcmlu
dCBPVVQgImh0dHA6Ly8xMjcuMC4wLjE6JGh0dHBkUG9ydC8kcGF0aCRzdWZmaXhFeHBlY3RlZEhh
c2hcbiI7CisgICAgICAgICAgICBwcmludCBPVVQgImh0dHA6Ly8xMjcuMC4wLjE6JGh0dHBkUG9y
dC8kcGF0aCRzdWZmaXhQaXhlbFRlc3RcbiI7CiAgICAgICAgIH0gZWxzaWYgKCR0ZXN0ID1+IC9e
aHR0cFwvdGVzdHNcL3NzbFwvLykgewogICAgICAgICAgICAgbXkgJHBhdGggPSBjYW5vbnBhdGgo
JHRlc3QpOwogICAgICAgICAgICAgJHBhdGggPX4gcy9eaHR0cFwvdGVzdHNcLy8vOwotICAgICAg
ICAgICAgcHJpbnQgT1VUICJodHRwczovLzEyNy4wLjAuMTokaHR0cGRTU0xQb3J0LyRwYXRoJHN1
ZmZpeEV4cGVjdGVkSGFzaFxuIjsKKyAgICAgICAgICAgIHByaW50IE9VVCAiaHR0cHM6Ly8xMjcu
MC4wLjE6JGh0dHBkU1NMUG9ydC8kcGF0aCRzdWZmaXhQaXhlbFRlc3RcbiI7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBteSAkdGVzdFBhdGggPSAiJHRlc3REaXJlY3RvcnkvJHRlc3Qi
OwogICAgICAgICAgICAgaWYgKGlzQ3lnd2luKCkpIHsKQEAgLTgwMSw3ICs4MDQsNyBAQCBmb3Ig
bXkgJHRlc3QgKEB0ZXN0cykgewogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAkdGVzdFBhdGggPSBjYW5vbnBhdGgoJHRlc3RQYXRoKTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHByaW50IE9VVCAiJHRlc3RQYXRoJHN1ZmZpeEV4cGVjdGVkSGFzaFxuIjsKKyAgICAg
ICAgICAgIHByaW50IE9VVCAiJHRlc3RQYXRoJHN1ZmZpeFBpeGVsVGVzdFxuIjsKICAgICAgICAg
fQogICAgIH0gZWxzZSB7CiAgICAgICAgIG15ICR0ZXN0UGF0aCA9ICIkdGVzdERpcmVjdG9yeS8k
dGVzdCI7CkBAIC04MTAsNyArODEzLDcgQEAgZm9yIG15ICR0ZXN0IChAdGVzdHMpIHsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICR0ZXN0UGF0aCA9IGNhbm9ucGF0aCgkdGVzdFBhdGgp
OwogICAgICAgICB9Ci0gICAgICAgIHByaW50IE9VVCAiJHRlc3RQYXRoJHN1ZmZpeEV4cGVjdGVk
SGFzaFxuIiBpZiBkZWZpbmVkICR0ZXN0UGF0aDsKKyAgICAgICAgcHJpbnQgT1VUICIkdGVzdFBh
dGgkc3VmZml4UGl4ZWxUZXN0XG4iIGlmIGRlZmluZWQgJHRlc3RQYXRoOwogICAgIH0KIAogICAg
ICMgRHVtcFJlbmRlclRyZWUgaXMgZXhwZWN0ZWQgdG8gZHVtcCB0d28gImJsb2NrcyIgdG8gc3Rk
b3V0IGZvciBlYWNoIHRlc3QuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Jhc2UucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2Jhc2UucHkKaW5kZXggYWQ3MGYwNDJkZTllY2I2MDA2M2JlYTZmNTBjMjg1YmY5
ZWZkOWMxMi4uOTQyMTU2MjRmZTI3ZWE0MjVhYTczZTg5MTU3N2NjNWU2ZTk5MGUyOSAxMDA3NTUK
LS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5Cisr
KyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQpAQCAt
MTI3NywyMSArMTI3Nyw5IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgICAgICAgICBy
ZXR1cm4gc3VpdGUuYXJncwogICAgICAgICByZXR1cm4gW10KIAotICAgIGRlZiBzdXBwb3J0c19z
d2l0Y2hpbmdfcGl4ZWxfdGVzdHNfcGVyX3Rlc3Qoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuZ2V0
X29wdGlvbignd2Via2l0X3Rlc3RfcnVubmVyJyk6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQot
ICAgICAgICByZXR1cm4gc2VsZi5fc3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Blcl90
ZXN0KCkKLQotICAgIGRlZiBfc3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Blcl90ZXN0
KHNlbGYpOgotICAgICAgICAjIEZJWE1FOiBhbGwgcG9ydHMgc2hvdWxkIHN1cHBvcnQgaXQuCi0g
ICAgICAgIHJldHVybiBGYWxzZQotCiAgICAgZGVmIHNob3VsZF9ydW5fYXNfcGl4ZWxfdGVzdChz
ZWxmLCB0ZXN0X2lucHV0KToKICAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMucGl4ZWxfdGVz
dHM6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgaWYgbm90IHNlbGYuc3VwcG9y
dHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Blcl90ZXN0KCk6Ci0gICAgICAgICAgICAjIENhbm5v
dCBkbyBtb3JlIGZpbHRlcmluZyB3aXRob3V0IHRoaXMuCi0gICAgICAgICAgICByZXR1cm4gVHJ1
ZQogICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RfZGlyZWN0b3JpZXM6CiAgICAg
ICAgICAgICByZXR1cm4gYW55KHRlc3RfaW5wdXQudGVzdF9uYW1lLnN0YXJ0c3dpdGgoZGlyZWN0
b3J5KSBmb3IgZGlyZWN0b3J5IGluIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdF9kaXJlY3Rvcmll
cykKICAgICAgICAgcmV0dXJuIHNlbGYuX3Nob3VsZF9ydW5fYXNfcGl4ZWxfdGVzdCh0ZXN0X2lu
cHV0KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9kcml2ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Ry
aXZlci5weQppbmRleCA3ODE4MjNiOGQ2NzBhNmViOGU1MmUwNzY4YmU2NjRiMTFkNjMwMzNjLi4y
ZWIxZTE0YjUyYmNkNzIzNWYzNTVjMWE5NzQwNjg2Zjk1YmNjOGQ2IDEwMDY0NAotLS0gYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlci5weQorKysgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlci5weQpAQCAtMjkzLDgg
KzI5Myw2IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogCiAgICAgICAgIGNtZC5leHRlbmQoc2Vs
Zi5fcG9ydC5nZXRfb3B0aW9uKCdhZGRpdGlvbmFsX2RydF9mbGFnJywgW10pKQogCi0gICAgICAg
IGlmIHBpeGVsX3Rlc3RzIGFuZCBub3Qgc2VsZi5fcG9ydC5zdXBwb3J0c19zd2l0Y2hpbmdfcGl4
ZWxfdGVzdHNfcGVyX3Rlc3QoKToKLSAgICAgICAgICAgIGNtZC5hcHBlbmQoJy0tcGl4ZWwtdGVz
dHMnKQogICAgICAgICBjbWQuZXh0ZW5kKHBlcl90ZXN0X2FyZ3MpCiAKICAgICAgICAgY21kLmFw
cGVuZCgnLScpCkBAIC0zMzYsMTIgKzMzNCw5IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogICAg
ICAgICBhc3NlcnQgbm90IGRyaXZlcl9pbnB1dC5pbWFnZV9oYXNoIG9yIGRyaXZlcl9pbnB1dC5z
aG91bGRfcnVuX3BpeGVsX3Rlc3QKIAogICAgICAgICBpZiBkcml2ZXJfaW5wdXQuc2hvdWxkX3J1
bl9waXhlbF90ZXN0OgotICAgICAgICAgICAgaWYgc2VsZi5fcG9ydC5zdXBwb3J0c19zd2l0Y2hp
bmdfcGl4ZWxfdGVzdHNfcGVyX3Rlc3QoKToKLSAgICAgICAgICAgICAgICAjIFdlIGRpZCBub3Qg
c3RhcnQgdGhlIGRyaXZlciB3aXRoIC0tcGl4ZWwtdGVzdHMsIGluc3RlYWQgd2Ugc3BlY2lmeSBp
dCBwZXIgdGVzdC4KLSAgICAgICAgICAgICAgICAjICInIiBpcyB0aGUgc2VwYXJhdG9yIG9mIGNv
bW1hbmQgZmllbGRzLgotICAgICAgICAgICAgICAgIGNvbW1hbmQgKz0gIiciICsgJy0tcGl4ZWwt
dGVzdCcKKyAgICAgICAgICAgIGNvbW1hbmQgKz0gIjotLXBpeGVsLXRlc3QiCiAgICAgICAgIGlm
IGRyaXZlcl9pbnB1dC5pbWFnZV9oYXNoOgotICAgICAgICAgICAgY29tbWFuZCArPSAiJyIgKyBk
cml2ZXJfaW5wdXQuaW1hZ2VfaGFzaAorICAgICAgICAgICAgY29tbWFuZCArPSAiOiIgKyBkcml2
ZXJfaW5wdXQuaW1hZ2VfaGFzaAogICAgICAgICByZXR1cm4gY29tbWFuZCArICJcbiIKIAogICAg
IGRlZiBfcmVhZF9maXJzdF9ibG9jayhzZWxmLCBkZWFkbGluZSk6CmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3F0LnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9xdC5weQppbmRleCBlMjM5YzdlM2FhZjZmNjAy
YjBjMzUxZWMyMmRjZmE2ODA2NGVhMjY5Li42ZTdiMDk4OGQ1YTc3ZWZjNWZjMzcyZmE3NTE2Nzgz
NDAwYTY5ZjA4IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L3F0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvcXQucHkKQEAgLTE4NCw2ICsxODQsMyBAQCBjbGFzcyBRdFBvcnQoUG9ydCk6CiAgICAgICAg
ICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCi0gICAgZGVmIF9zdXBw
b3J0c19zd2l0Y2hpbmdfcGl4ZWxfdGVzdHNfcGVyX3Rlc3Qoc2VsZik6Ci0gICAgICAgIHJldHVy
biBUcnVlCi0KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvdGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
dGVzdC5weQppbmRleCA1NzE0NjYxZmQyMDM2NzY4MzlkNmM3NmY0NzM1YmVjODEzMmI4OWI4Li4w
Y2QxNzFmM2JjYTZhYmViZGIyMWI5OGUyYTQ1YzIxYTE0YTkwMTEyIDEwMDY0NAotLS0gYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5CkBAIC01MTMsMTAgKzUx
Myw2IEBAIGNsYXNzIFRlc3RQb3J0KFBvcnQpOgogICAgICAgICAgICAgVmlydHVhbFRlc3RTdWl0
ZSgndmlydHVhbC9za2lwcGVkJywgJ2ZhaWx1cmVzL2V4cGVjdGVkJywgWyctLXZpcnR1YWwtYXJn
MiddKSwKICAgICAgICAgXQogCi0gICAgZGVmIHN1cHBvcnRzX3N3aXRjaGluZ19waXhlbF90ZXN0
c19wZXJfdGVzdChzZWxmKToKLSAgICAgICAgIyBMZXQgaXQgdHJ1ZSBzbyB3ZSBjYW4gdGVzdCB0
aGUgLS1waXhlbC10ZXN0LWRpcmVjdG9yeSBvcHRpb24uCi0gICAgICAgIHJldHVybiBUcnVlCi0K
IAogY2xhc3MgVGVzdERyaXZlcihEcml2ZXIpOgogICAgICIiIlRlc3QvRHVtbXkgaW1wbGVtZW50
YXRpb24gb2YgdGhlIER1bXBSZW5kZXJUcmVlIGludGVyZmFjZS4iIiIKZGlmZiAtLWdpdCBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKaW5kZXggZDAyMzI5OTI3MzFkMWJjOTcxMjY4ZmMz
OTMxZjRiNzBhYjM2N2FjNy4uOWY3N2ZlZDg5YjBkZTQwOGU4ZjViNDA2NDM3OWM1ZGQ1MmJlZmIx
ZSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAK
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKQEAgLTM1LDcg
KzM1LDExIEBACiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1BhZ2VQcml2YXRlLmg+CiAjaW5jbHVkZSA8
V2ViS2l0Mi9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tSZXRh
aW5QdHIuaD4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8Y3N0ZGlvPgorI2luY2x1
ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nPgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKICNpZiBQTEFURk9STShNQUMpCkBAIC02Nyw4ICs3
MSw3IEBAIFRlc3RDb250cm9sbGVyJiBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkKIH0KIAogVGVz
dENvbnRyb2xsZXI6OlRlc3RDb250cm9sbGVyKGludCBhcmdjLCBjb25zdCBjaGFyKiBhcmd2W10p
Ci0gICAgOiBtX2R1bXBQaXhlbHNGb3JBbGxUZXN0cyhmYWxzZSkKLSAgICAsIG1fdmVyYm9zZShm
YWxzZSkKKyAgICA6IG1fdmVyYm9zZShmYWxzZSkKICAgICAsIG1fcHJpbnRTZXBhcmF0b3JzKGZh
bHNlKQogICAgICwgbV91c2luZ1NlcnZlck1vZGUoZmFsc2UpCiAgICAgLCBtX2djQmV0d2VlblRl
c3RzKGZhbHNlKQpAQCAtMjY3LDEwICsyNzAsNiBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjppbml0
aWFsaXplKGludCBhcmdjLCBjb25zdCBjaGFyKiBhcmd2W10pCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChhcmd1bWVudCA9PSAiLS1waXhlbC10ZXN0cyIp
IHsKLSAgICAgICAgICAgIG1fZHVtcFBpeGVsc0ZvckFsbFRlc3RzID0gdHJ1ZTsKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB9CiAgICAgICAgIGlmIChhcmd1bWVudCA9PSAiLS12ZXJi
b3NlIikgewogICAgICAgICAgICAgbV92ZXJib3NlID0gdHJ1ZTsKICAgICAgICAgICAgIGNvbnRp
bnVlOwpAQCAtNTA0LDcgKzUwMyw4OSBAQCBib29sIFRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRl
VG9Db25zaXN0ZW50VmFsdWVzKCkKICAgICByZXR1cm4gbV9kb25lUmVzZXR0aW5nOwogfQogCi1i
b29sIFRlc3RDb250cm9sbGVyOjpydW5UZXN0KGNvbnN0IGNoYXIqIHRlc3QpCitzdHJ1Y3QgVGVz
dENvbW1hbmQgeworICAgIFRlc3RDb21tYW5kKCkgOiBzaG91bGREdW1wUGl4ZWxzKGZhbHNlKSB7
IH0KKworICAgIHN0ZDo6c3RyaW5nIHBhdGhPclVSTDsKKyAgICBib29sIHNob3VsZER1bXBQaXhl
bHM7CisgICAgc3RkOjpzdHJpbmcgZXhwZWN0ZWRQaXhlbEhhc2g7Cit9OworCitjbGFzcyBDb21t
YW5kVG9rZW5pemVyIHsKK3B1YmxpYzoKKyAgICBDb21tYW5kVG9rZW5pemVyKGNvbnN0IHN0ZDo6
c3RyaW5nJiBpbnB1dCkKKyAgICAgICAgOiBtX2lucHV0KGlucHV0KQorICAgICAgICAsIG1fcG9z
TmV4dFNlcGFyYXRvcigwKQorICAgIHsKKyAgICAgICAgZmluZE5leHQoKTsKKyAgICB9CisKKyAg
ICBib29sIGhhc05leHQoKSBjb25zdDsKKyAgICBzdGQ6OnN0cmluZyBuZXh0KCk7CisKK3ByaXZh
dGU6CisgICAgdm9pZCBmaW5kTmV4dCgpOworICAgIHN0YXRpYyBjb25zdCBjaGFyIGtTZXBhcmF0
b3IgPSAnOic7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1faW5wdXQ7CisgICAgc3RkOjpzdHJp
bmcgbV9uZXh0OworICAgIHNpemVfdCBtX3Bvc05leHRTZXBhcmF0b3I7Cit9OworCit2b2lkIENv
bW1hbmRUb2tlbml6ZXI6OmZpbmROZXh0KCkKK3sKKyAgICBpZiAobV9wb3NOZXh0U2VwYXJhdG9y
ID09IHN0ZDo6c3RyaW5nOjpucG9zIHx8IG1fcG9zTmV4dFNlcGFyYXRvciA9PSBtX2lucHV0LnNp
emUoKSkgeworICAgICAgICBtX25leHQgPSBzdGQ6OnN0cmluZygpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIHNpemVfdCBzdGFydCA9IG1fcG9zTmV4dFNlcGFyYXRvciA/IG1fcG9zTmV4
dFNlcGFyYXRvciArIDEgOiAwOworICAgIG1fcG9zTmV4dFNlcGFyYXRvciA9IG1faW5wdXQuZmlu
ZChrU2VwYXJhdG9yLCBzdGFydCk7CisgICAgc2l6ZV90IHNpemUgPSBtX3Bvc05leHRTZXBhcmF0
b3IgPT0gc3RkOjpzdHJpbmc6Om5wb3MgPyBzdGQ6OnN0cmluZzo6bnBvcyA6IG1fcG9zTmV4dFNl
cGFyYXRvciAtIHN0YXJ0OworICAgIG1fbmV4dCA9IHN0ZDo6c3RyaW5nKG1faW5wdXQsIHN0YXJ0
LCBzaXplKTsKK30KKworc3RkOjpzdHJpbmcgQ29tbWFuZFRva2VuaXplcjo6bmV4dCgpCit7Cisg
ICAgQVNTRVJUKGhhc05leHQoKSk7CisKKyAgICBzdGQ6OnN0cmluZyBvbGROZXh0ID0gbV9uZXh0
OworICAgIGZpbmROZXh0KCk7CisgICAgcmV0dXJuIG9sZE5leHQ7Cit9CisKK2Jvb2wgQ29tbWFu
ZFRva2VuaXplcjo6aGFzTmV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmV4dCAhPSBzdGQ6
OnN0cmluZygpOworfQorCitOT19SRVRVUk4gc3RhdGljIHZvaWQgZGllKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBpbnB1dExpbmUpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJVbmV4cGVjdGVkIGlucHV0
IGxpbmU6ICVzXG4iLCBpbnB1dExpbmUuY19zdHIoKSk7CisgICAgZXhpdChFWElUX0ZBSUxVUkUp
OworfQorCitUZXN0Q29tbWFuZCBwYXJzZUlucHV0TGluZShjb25zdCBzdGQ6OnN0cmluZyYgaW5w
dXRMaW5lKQoreworICAgIFRlc3RDb21tYW5kIGNvbW1hbmQ7CisgICAgQ29tbWFuZFRva2VuaXpl
ciB0b2tlbml6ZXIoaW5wdXRMaW5lKTsKKyAgICBpZiAoIXRva2VuaXplci5oYXNOZXh0KCkpCisg
ICAgICAgIGRpZShpbnB1dExpbmUpOworCisgICAgY29tbWFuZC5wYXRoT3JVUkwgPSB0b2tlbml6
ZXIubmV4dCgpOworICAgIGlmICghdG9rZW5pemVyLmhhc05leHQoKSkKKyAgICAgICAgcmV0dXJu
IGNvbW1hbmQ7CisKKyAgICBzdGQ6OnN0cmluZyBhcmcgPSB0b2tlbml6ZXIubmV4dCgpOworICAg
IGlmIChhcmcgIT0gc3RkOjpzdHJpbmcoIi1wIikgJiYgYXJnICE9IHN0ZDo6c3RyaW5nKCItLXBp
eGVsLXRlc3QiKSkKKyAgICAgICAgZGllKGlucHV0TGluZSk7CisgICAgY29tbWFuZC5zaG91bGRE
dW1wUGl4ZWxzID0gdHJ1ZTsKKworICAgIGlmICh0b2tlbml6ZXIuaGFzTmV4dCgpKQorICAgICAg
ICBjb21tYW5kLmV4cGVjdGVkUGl4ZWxIYXNoID0gdG9rZW5pemVyLm5leHQoKTsKKworICAgIHJl
dHVybiBjb21tYW5kOworfQorCitib29sIFRlc3RDb250cm9sbGVyOjpydW5UZXN0KGNvbnN0IGNo
YXIqIGlucHV0TGluZSkKIHsKICAgICBpZiAoIXJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMo
KSkgewogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTUxNywzMiArNTk4LDEzIEBAIGJvb2wgVGVzdENv
bnRyb2xsZXI6OnJ1blRlc3QoY29uc3QgY2hhciogdGVzdCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAotICAgIGJvb2wgZHVtcFBpeGVsc1Rlc3QgPSBtX2R1bXBQaXhlbHNGb3JBbGxU
ZXN0czsKLSAgICBzdGQ6OnN0cmluZyBjb21tYW5kKHRlc3QpOwotICAgIHN0ZDo6c3RyaW5nIHBh
dGhPclVSTCA9IGNvbW1hbmQ7Ci0gICAgc3RkOjpzdHJpbmcgZXhwZWN0ZWRQaXhlbEhhc2g7Ci0g
ICAgc2l6ZV90IGZpcnN0U2VwYXJhdG9yUG9zID0gY29tbWFuZC5maW5kX2ZpcnN0X29mKCdcJycp
OwotICAgIHNpemVfdCBzZWNvbmRTZXBhcmF0b3JQb3MgPSBjb21tYW5kLmZpbmRfZmlyc3Rfb2Yo
J1wnJywgZmlyc3RTZXBhcmF0b3JQb3MgKyAxKTsKLSAgICBpZiAoZmlyc3RTZXBhcmF0b3JQb3Mg
IT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgcGF0aE9yVVJMID0gc3RkOjpzdHJpbmco
Y29tbWFuZCwgMCwgZmlyc3RTZXBhcmF0b3JQb3MpOwotICAgICAgICBzaXplX3QgcGl4ZWxIYXNo
UG9zID0gZmlyc3RTZXBhcmF0b3JQb3MgKyAxOwotCi0gICAgICAgIC8vIE5SV1QgcGFzc2VzIC0t
cGl4ZWwtdGVzdCBpZiB3ZSBzaG91bGQgZHVtcCBwaXhlbHMgZm9yIHRoZSB0ZXN0LgotICAgICAg
ICBjb25zdCBzdGQ6OnN0cmluZyBleHBlY3RlZFBpeGVsVGVzdEFyZygiLS1waXhlbC10ZXN0Iik7
Ci0gICAgICAgIHN0ZDo6c3RyaW5nIGFyZ1Rlc3QgPSBzdGQ6OnN0cmluZyhjb21tYW5kLCBmaXJz
dFNlcGFyYXRvclBvcyArIDEsIGV4cGVjdGVkUGl4ZWxUZXN0QXJnLnNpemUoKSk7Ci0gICAgICAg
IGlmIChhcmdUZXN0ID09IGV4cGVjdGVkUGl4ZWxUZXN0QXJnKSB7Ci0gICAgICAgICAgICBkdW1w
UGl4ZWxzVGVzdCA9IHRydWU7Ci0gICAgICAgICAgICBwaXhlbEhhc2hQb3MgPSBzZWNvbmRTZXBh
cmF0b3JQb3MgPT0gc3RkOjpzdHJpbmc6Om5wb3MgPyBzdGQ6OnN0cmluZzo6bnBvcyA6IHNlY29u
ZFNlcGFyYXRvclBvcyArIDE7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBpeGVsSGFzaFBvcyAh
PSBzdGQ6OnN0cmluZzo6bnBvcyAmJiBwaXhlbEhhc2hQb3MgPCBjb21tYW5kLnNpemUoKSkKLSAg
ICAgICAgICAgIGV4cGVjdGVkUGl4ZWxIYXNoID0gc3RkOjpzdHJpbmcoY29tbWFuZCwgcGl4ZWxI
YXNoUG9zKTsKLSAgICB9CisgICAgVGVzdENvbW1hbmQgY29tbWFuZCA9IHBhcnNlSW5wdXRMaW5l
KHN0ZDo6c3RyaW5nKGlucHV0TGluZSkpOwogCiAgICAgbV9zdGF0ZSA9IFJ1bm5pbmdUZXN0Owog
Ci0gICAgbV9jdXJyZW50SW52b2NhdGlvbiA9IGFkb3B0UHRyKG5ldyBUZXN0SW52b2NhdGlvbihw
YXRoT3JVUkwpKTsKLSAgICBpZiAoZHVtcFBpeGVsc1Rlc3QpCi0gICAgICAgIG1fY3VycmVudElu
dm9jYXRpb24tPnNldElzUGl4ZWxUZXN0KGV4cGVjdGVkUGl4ZWxIYXNoKTsKKyAgICBtX2N1cnJl
bnRJbnZvY2F0aW9uID0gYWRvcHRQdHIobmV3IFRlc3RJbnZvY2F0aW9uKGNvbW1hbmQucGF0aE9y
VVJMKSk7CisgICAgaWYgKGNvbW1hbmQuc2hvdWxkRHVtcFBpeGVscykKKyAgICAgICAgbV9jdXJy
ZW50SW52b2NhdGlvbi0+c2V0SXNQaXhlbFRlc3QoY29tbWFuZC5leHBlY3RlZFBpeGVsSGFzaCk7
CiAKICAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5pbnZva2UoKTsKICAgICBtX2N1cnJlbnRJbnZv
Y2F0aW9uLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RD
b250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKaW5k
ZXggYTk5ZTE2ZWE4NzAyN2MzNGYwN2I4OTYyYjA5OGMyMzM0ZDk0MjFiZC4uNWUyMGQ2MTFiNDY5
ZGYxODdjMzc4ZWU2MmVkMGNhYzMxOGRhZWQyMSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuaApAQCAtMTA0LDcgKzEwNCw2IEBAIHByaXZhdGU6CiAKICAgICBPd25QdHI8
VGVzdEludm9jYXRpb24+IG1fY3VycmVudEludm9jYXRpb247CiAKLSAgICBib29sIG1fZHVtcFBp
eGVsc0ZvckFsbFRlc3RzOwogICAgIGJvb2wgbV92ZXJib3NlOwogICAgIGJvb2wgbV9wcmludFNl
cGFyYXRvcnM7CiAgICAgYm9vbCBtX3VzaW5nU2VydmVyTW9kZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155474</attachid>
            <date>2012-07-31 02:34:30 -0700</date>
            <delta_ts>2012-07-31 04:30:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92398-20120731113357.patch</filename>
            <type>text/plain</type>
            <size>49801</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MTg0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNDEyY2IzYzRmY2RhODFiZDNjNjNmMDA4ZjBkNzJlZjY0
ODcxNDdiOS4uMGQ4MTViZDM4ZGM4OWYxNzYwNWUwYWYyYWRkNTc4NDVlYjVkMTI2NCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk3
IEBACisyMDEyLTA3LTMxICBCYWxhenMgS2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBBbGwgcG9ydHMgc2hvdWxkIHN1cHBvcnQgcGVyIHRlc3Qgc3dpdGNoaW5nIG9mIHBp
eGVsIHRlc3RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkyMzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGVhY2ggYWxsIHRlc3QgZHJpdmVycyB0byBhY2NlcHQgYSBwZXIgdGVzdCBjb250cm9sIG9m
IHdoZXRoZXIKKyAgICAgICAgdG8gZHVtcCBwaXhlbHMuIERyaXZlcnMgbm93IGFjY2VwdCBhIC1w
Ly0tcGl4ZWwtdGVzdCBhcmd1bWVudAorICAgICAgICBvbiB0aGUgc3RhbmRhcnQgaW5wdXQgdGhh
dCBtZWFucyB0aGF0IHJ1bm5pbmcgdGhlIGN1cnJlbnQKKyAgICAgICAgdGVzdCBhcyBwaXhlbCB0
ZXN0IGlzIGFsbG93ZWQgKGV2ZW4gaWYgdGhlIGV4cGVjdGVkIGhhc2ggaXMKKyAgICAgICAgbWlz
c2luZykuIFJlbW92ZWQgdGhlIC0tcGl4ZWwtdGVzdHMgY29tbWFuZCBsaW5lIG9wdGlvbiBzaW5j
ZQorICAgICAgICB0aGVyZSBpcyBubyBuZWVkIGZvciBpdCBhbnltb3JlLgorCisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaToKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9EdW1wUmVuZGVyVHJlZS5oOgorICAgICAgICAoVGVzdENvbW1hbmQ6OlRlc3RDb21tYW5k
KToKKyAgICAgICAgKFRlc3RDb21tYW5kKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9EdW1w
UmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcDogQWRkZWQuCisgICAgICAgIChDb21tYW5k
VG9rZW5pemVyKToKKyAgICAgICAgKENvbW1hbmRUb2tlbml6ZXI6OkNvbW1hbmRUb2tlbml6ZXIp
OgorICAgICAgICAoQ29tbWFuZFRva2VuaXplcjo6cHVtcCk6CisgICAgICAgIChDb21tYW5kVG9r
ZW5pemVyOjpuZXh0KToKKyAgICAgICAgKENvbW1hbmRUb2tlbml6ZXI6Omhhc05leHQpOgorICAg
ICAgICAoZGllKToKKyAgICAgICAgKHBhcnNlSW5wdXRMaW5lKToKKyAgICAgICAgQ29tbW9uIGxv
Z2ljIHRvIHBhcnNlIHRoZSBpbnB1dCBsaW5lIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IChvciBm
cm9tIHRoZSBjb21tYW5kIGxpbmUKKyAgICAgICAgaW4gc3RhbmRhbG9uZSBtb2RlKS4gTWFkZSBp
dCBzb21ld2hhdCBnZW5lcmFsIHNvIHdlIGNhbiBlYXNpbHkgYWRkIG1vcmUgYXJndW1lbnRzIGlm
CisgICAgICAgIHRoZXJlIGlzIGEgbmVlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9EdW1wUmVuZGVyVHJlZS5jcHA6CisgICAgICAgIChydW5UZXN0KToKKyAgICAgICAgKG1h
aW4pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHA6Cisg
ICAgICAgIChUZXN0U2hlbGw6OlRlc3RTaGVsbCk6CisgICAgICAgIChUZXN0U2hlbGw6OnJ1bkZp
bGVUZXN0KToKKyAgICAgICAgKFRlc3RTaGVsbDo6ZHVtcCk6CisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmg6CisgICAgICAgIChUZXN0UGFyYW1zOjpUZXN0UGFy
YW1zKToKKyAgICAgICAgKFRlc3RTaGVsbCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZWZs
L0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVy
VHJlZS5jcHA6CisgICAgICAgIChwYXJzZUNvbW1hbmRMaW5lT3B0aW9ucyk6CisgICAgICAgIChy
dW5UZXN0KToKKyAgICAgICAgKHNob3VsZER1bXBQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVk
KToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVu
ZGVyVHJlZS5jcHA6CisgICAgICAgIChpbml0aWFsaXplR2xvYmFsc0Zyb21Db21tYW5kTGluZU9w
dGlvbnMpOgorICAgICAgICAoZHVtcCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0R1
bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICAoaW5pdGlhbGl6ZUdsb2JhbHNGcm9tQ29tbWFuZExp
bmVPcHRpb25zKToKKyAgICAgICAgKGR1bXBSZW5kZXJUcmVlKToKKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5wcm86CisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
cXQvRHVtcFJlbmRlclRyZWVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEdW1wUmVuZGVyVHJl
ZTo6cHJvY2Vzc0xpbmUpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVy
VHJlZS5jcHA6CisgICAgICAgIChkdW1wKToKKyAgICAgICAgKHJ1blRlc3QpOgorICAgICAgICAo
ZGxsTGF1bmNoZXJFbnRyeVBvaW50KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRHVt
cFJlbmRlclRyZWUudmNwcm9qOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dzY3JpcHQ6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvd3gvRHVtcFJlbmRlclRyZWVXeC5jcHA6CisgICAgICAg
IChkdW1wKToKKyAgICAgICAgKHJ1blRlc3QpOgorICAgICAgICAoTXlBcHA6Ok9uSW5pdCk6Cisg
ICAgICAgICogU2NyaXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0czogUGFzcyAtLXBpeGVsLXRlc3Qg
YmVmb3JlIHRoZSBoYXNoLgorICAgICAgICBDaGFuZ2VkIHRoZSBzZXBhcmF0b3IgZm9ybSAnIHRv
IDogYmVjYXVzZSBpdCBkb24ndCBuZWVkIHRvIGJlIGVzY2FwZWQKKyAgICAgICAgd2hlbiBwYXNz
aW5nIG1hbnVhbGx5IG9uIHRoZSBjb21hbmQgbGluZS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHk6CisgICAgICAgIChQb3J0LnNob3VsZF9ydW5f
YXNfcGl4ZWxfdGVzdCk6IFJlbW92ZWQgbm93IHRoYXQgYWxsIHBvcnRzIHN1cHBvcnRzIGl0Lgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5Ogor
ICAgICAgICAoRHJpdmVyLmNtZF9saW5lKTogRG9uJ3QgcGFzcyAtLXBpeGVsLXRlc3RzIGFueW1v
cmUuCisgICAgICAgIChEcml2ZXIuX2NvbW1hbmRfZnJvbV9kcml2ZXJfaW5wdXQpOgorCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpUZXN0Q29udHJvbGxlcik6CisgICAgICAgIChXVFI6OlRlc3RDb250
cm9sbGVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdUUjo6VGVzdENvbW1hbmQ6OlRlc3RDb21t
YW5kKToKKyAgICAgICAgKFRlc3RDb21tYW5kKToKKyAgICAgICAgKFdUUik6CisgICAgICAgIChD
b21tYW5kVG9rZW5pemVyKToKKyAgICAgICAgKFdUUjo6Q29tbWFuZFRva2VuaXplcjo6Q29tbWFu
ZFRva2VuaXplcik6CisgICAgICAgIChXVFI6OkNvbW1hbmRUb2tlbml6ZXI6OnB1bXApOgorICAg
ICAgICAoV1RSOjpDb21tYW5kVG9rZW5pemVyOjpuZXh0KToKKyAgICAgICAgKFdUUjo6Q29tbWFu
ZFRva2VuaXplcjo6aGFzTmV4dCk6CisgICAgICAgIChXVFI6OmRpZSk6CisgICAgICAgIChXVFI6
OnBhcnNlSW5wdXRMaW5lKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJ1blRlc3Qp
OgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAg
KFRlc3RDb250cm9sbGVyKToKKyAgICAgICAgRHVwbGljYXRlIHRoZSBsb2dpYyBmb3IgcGFyc2lu
ZyB0aGUgY29tbWFuZCBsaW5lIGJlY2F1c2UKKyAgICAgICAgdW5mb3J0dW5hdGVseSB0aGVyZSBp
cyBubyB3YXkgdG8gc2hhcmUgY29kZSBiZXR3ZWVuCisgICAgICAgIFdlYktpdFRlc3RSdW5uZXIg
YW5kIER1bXBSZW5kZXJUcmVlLgorCiAyMDEyLTA3LTMxICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9i
aW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBbamhidWlsZF0gQWxzbyB0cnkgdG8gbG9hZCBq
aGJ1aWxkIFB5dGhvbiBtb2R1bGUgZnJvbSB0aGUgc291cmNlIGNoZWNrb3V0CmRpZmYgLS1naXQg
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaQppbmRleCBkY2UxZTM2MWQ2MDA2ZWRlMDc0MDE1
Y2QxY2Q2YmZhNmE0MDIxMWU4Li5kNmYwYWFiMWM5MDE5YzUyYTQzOTBkOWVlOTMyMGU2MWM1NzFj
MWM1IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBp
CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkKQEAgLTU2LDYg
KzU2LDggQEAKICAgICAgICAgICAgICdjaHJvbWl1bS9XZWJWaWV3SG9zdC5oJywKICAgICAgICAg
XSwKICAgICAgICAgJ3Rlc3RfcnVubmVyX2ZpbGVzJzogWworICAgICAgICAgICAgJ0R1bXBSZW5k
ZXJUcmVlLmgnLAorICAgICAgICAgICAgJ0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcCcsCiAgICAg
ICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAn
LAogICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50LmNwcCcsCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVy
VHJlZS5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuaAppbmRleCAwZTU5
OGJlNGFlM2RkNjI1ZjBiNDVlZmU2YjI4ZmEzNWY2N2Y1MmYyLi4xOGQ4Y2RhMGViMTdmYTgzYmVl
MjA4OWI2ZDQ4NWE2NDlkYmI4NjcwIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9E
dW1wUmVuZGVyVHJlZS5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVl
LmgKQEAgLTY1LDQgKzY1LDE0IEBAIGV4dGVybiBSZWZQdHI8TGF5b3V0VGVzdENvbnRyb2xsZXI+
IGdMYXlvdXRUZXN0Q29udHJvbGxlcjsKIHZvaWQgZHVtcCgpOwogdm9pZCBkaXNwbGF5V2ViVmll
dygpOwogCitzdHJ1Y3QgVGVzdENvbW1hbmQgeworICAgIFRlc3RDb21tYW5kKCkgOiBzaG91bGRE
dW1wUGl4ZWxzKGZhbHNlKSB7IH0KKworICAgIHN0ZDo6c3RyaW5nIHBhdGhPclVSTDsKKyAgICBi
b29sIHNob3VsZER1bXBQaXhlbHM7CisgICAgc3RkOjpzdHJpbmcgZXhwZWN0ZWRQaXhlbEhhc2g7
Cit9OworCitUZXN0Q29tbWFuZCBwYXJzZUlucHV0TGluZShjb25zdCBzdGQ6OnN0cmluZyYpOwor
CiAjZW5kaWYgLy8gRHVtcFJlbmRlclRyZWVfaApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggODNiZmZkNDQ4NDFhYTEyMmVlZGVkNDcyNTEzNGM2OTE1MjAwZGQ1ZS4uYWEzNGI5NzM4Y2Y1
NGZiMjI3NWY1ZGUzNGQxODFiZDQwMWFhODljMyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC0yODksNiArMjg5LDcgQEAKIAkJOENDREE4MUYxNTFBNTY1NTAwMDNGOTM3IC8qIFNhbXBs
ZUZvbnQuc2ZvbnQgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhtbDsgbmFtZSA9IFNhbXBsZUZvbnQuc2ZvbnQ7
IHBhdGggPSBmb250cy9TYW1wbGVGb250LnNmb250OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5MzM1NDM1RjAzRDc1NTAyMDA4NjM1Q0UgLyogV2ViS2l0LmZyYW1ld29yayAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3
b3JrOyBwYXRoID0gV2ViS2l0LmZyYW1ld29yazsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RT
X0RJUjsgfTsKIAkJOTM0MDk5NTQwODU0MENBRjAwN0YzQkM4IC8qIER1bXBSZW5kZXJUcmVlICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQu
bWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBEdW1wUmVuZGVy
VHJlZTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJOTgwNTExRDExNUM3
MDFFNTAwOENGRTdCIC8qIER1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IER1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwM0ZGNzQwOUNBQUQwODAwOUIyQTM3IC8qIER1bXBSZW5k
ZXJUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBEdW1wUmVuZGVyVHJl
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODE3MDkwMzA4QjE2NEQzMDBDQ0I5
RkIgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IHBhdGggPSBKYXZhU2Ny
aXB0Q29yZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJ
CUE4NEY2MDg5MDhCMTM2REEwMEU5NzQ1RiAvKiBDb2NvYS5mcmFtZXdvcmsgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsg
bmFtZSA9IENvY29hLmZyYW1ld29yazsgcGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtz
L0NvY29hLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKQEAgLTQyMSw2
ICs0MjIsNyBAQAogCQkwOEZCNzc5NEZFODQxNTVEQzAyQUFDMDcgLyogRHVtcFJlbmRlclRyZWUg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTk4MDUxMUQx
MTVDNzAxRTUwMDhDRkU3QiAvKiBEdW1wUmVuZGVyVHJlZUNvbW1vbi5jcHAgKi8sCiAJCQkJMzJB
NzBBQUIwMzcwNUUxRjAwQzkxNzgzIC8qIER1bXBSZW5kZXJUcmVlUHJlZml4LmggKi8sCiAJCQkJ
MTQyMkEyNzUwQUY2RjRCRDAwRTFBODgzIC8qIERlbGVnYXRlcyAqLywKIAkJCQkxNDIyQTI2OTBB
RjZGNDUyMDBFMUE4ODMgLyogQ29udHJvbGxlcnMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZUNvbW1vbi5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9EdW1wUmVuZGVyVHJlZUNvbW1vbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmYzNzZhYTMyNjhiNWUyMmYy
MjAzZTA3YmVkZmI2MjhkNDAyYzYwOAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcApAQCAtMCwwICsxLDgyIEBACisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKKworI2luY2x1ZGUgPGFs
Z29yaXRobT4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVk
ZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nPgorCitjbGFzcyBDb21tYW5kVG9rZW5pemVy
IHsKK3B1YmxpYzoKKyAgICBDb21tYW5kVG9rZW5pemVyKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnB1
dCkKKyAgICAgICAgOiBtX2lucHV0KGlucHV0KQorICAgICAgICAsIG1fcG9zTmV4dFNlcGFyYXRv
cigwKQorICAgIHsKKyAgICAgICAgcHVtcCgpOworICAgIH0KKworICAgIGJvb2wgaGFzTmV4dCgp
IGNvbnN0OworICAgIHN0ZDo6c3RyaW5nIG5leHQoKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHB1
bXAoKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciBrU2VwYXJhdG9yID0gJzonOworICAgIGNvbnN0
IHN0ZDo6c3RyaW5nJiBtX2lucHV0OworICAgIHN0ZDo6c3RyaW5nIG1fbmV4dDsKKyAgICBzaXpl
X3QgbV9wb3NOZXh0U2VwYXJhdG9yOworfTsKKwordm9pZCBDb21tYW5kVG9rZW5pemVyOjpwdW1w
KCkKK3sKKyAgICBpZiAobV9wb3NOZXh0U2VwYXJhdG9yID09IHN0ZDo6c3RyaW5nOjpucG9zIHx8
IG1fcG9zTmV4dFNlcGFyYXRvciA9PSBtX2lucHV0LnNpemUoKSkgeworICAgICAgICBtX25leHQg
PSBzdGQ6OnN0cmluZygpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHNpemVfdCBzdGFy
dCA9IG1fcG9zTmV4dFNlcGFyYXRvciA/IG1fcG9zTmV4dFNlcGFyYXRvciArIDEgOiAwOworICAg
IG1fcG9zTmV4dFNlcGFyYXRvciA9IG1faW5wdXQuZmluZChrU2VwYXJhdG9yLCBzdGFydCk7Cisg
ICAgc2l6ZV90IHNpemUgPSBtX3Bvc05leHRTZXBhcmF0b3IgPT0gc3RkOjpzdHJpbmc6Om5wb3Mg
PyBzdGQ6OnN0cmluZzo6bnBvcyA6IG1fcG9zTmV4dFNlcGFyYXRvciAtIHN0YXJ0OworICAgIG1f
bmV4dCA9IHN0ZDo6c3RyaW5nKG1faW5wdXQsIHN0YXJ0LCBzaXplKTsKK30KKworc3RkOjpzdHJp
bmcgQ29tbWFuZFRva2VuaXplcjo6bmV4dCgpCit7CisgICAgQVNTRVJUKGhhc05leHQoKSk7CisK
KyAgICBzdGQ6OnN0cmluZyBvbGROZXh0ID0gbV9uZXh0OworICAgIHB1bXAoKTsKKyAgICByZXR1
cm4gb2xkTmV4dDsKK30KKworYm9vbCBDb21tYW5kVG9rZW5pemVyOjpoYXNOZXh0KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9uZXh0ICE9IHN0ZDo6c3RyaW5nKCk7Cit9CisKK3N0YXRpYyB2b2lk
IGRpZShjb25zdCBzdGQ6OnN0cmluZyYgaW5wdXRMaW5lKQoreworICAgIGZwcmludGYoc3RkZXJy
LCAiVW5leHBlY3RlZCBpbnB1dCBsaW5lOiAlc1xuIiwgaW5wdXRMaW5lLmNfc3RyKCkpOworICAg
IGV4aXQoMSk7Cit9CisKK1Rlc3RDb21tYW5kIHBhcnNlSW5wdXRMaW5lKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBpbnB1dExpbmUpCit7CisgICAgVGVzdENvbW1hbmQgcmVzdWx0OworICAgIENvbW1hbmRU
b2tlbml6ZXIgdG9rZW5pemVyKGlucHV0TGluZSk7CisgICAgaWYgKCF0b2tlbml6ZXIuaGFzTmV4
dCgpKQorICAgICAgICBkaWUoaW5wdXRMaW5lKTsKKworICAgIHJlc3VsdC5wYXRoT3JVUkwgPSB0
b2tlbml6ZXIubmV4dCgpOworICAgIGlmICghdG9rZW5pemVyLmhhc05leHQoKSkKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKworICAgIHN0ZDo6c3RyaW5nIGFyZyA9IHRva2VuaXplci5uZXh0KCk7
CisgICAgaWYgKGFyZyAhPSBzdGQ6OnN0cmluZygiLXAiKSAmJiBhcmcgIT0gc3RkOjpzdHJpbmco
Ii0tcGl4ZWwtdGVzdCIpKQorICAgICAgICBkaWUoaW5wdXRMaW5lKTsKKyAgICByZXN1bHQuc2hv
dWxkRHVtcFBpeGVscyA9IHRydWU7CisKKyAgICBpZiAodG9rZW5pemVyLmhhc05leHQoKSkKKyAg
ICAgICAgcmVzdWx0LmV4cGVjdGVkUGl4ZWxIYXNoID0gdG9rZW5pemVyLm5leHQoKTsKKworICAg
IHJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9EdW1wUmVuZGVyVHJlZS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9E
dW1wUmVuZGVyVHJlZS5jcHAKaW5kZXggNjE1NWY0NDFmNWQ4YmIzYzQ0ZTUxNzkwODBkY2IxNzQ0
NWU4OTg3NC4uNjMwZmVhNWZmNDdlOWMzMjllMTY2MmI3NjA5ODY4YjcwMTlhMzcxNiAxMDA2NDQK
LS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwCisr
KyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcApAQCAt
NDQsNyArNDQsNiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0
aW9uQ29tcGxleFRleHRbXSA9ICItLWNvbXBsZXgtdGV4dCI7CiBzdGF0aWMgY29uc3QgY2hhciBv
cHRpb25EdW1wQWxsUGl4ZWxzW10gPSAiLS1kdW1wLWFsbC1waXhlbHMiOwogc3RhdGljIGNvbnN0
IGNoYXIgb3B0aW9uTm90cmVlW10gPSAiLS1ub3RyZWUiOwotc3RhdGljIGNvbnN0IGNoYXIgb3B0
aW9uUGl4ZWxUZXN0c1tdID0gIi0tcGl4ZWwtdGVzdHMiOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0
aW9uVGhyZWFkZWRbXSA9ICItLXRocmVhZGVkIjsKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkRl
YnVnUmVuZGVyVHJlZVtdID0gIi0tZGVidWctcmVuZGVyLXRyZWUiOwogc3RhdGljIGNvbnN0IGNo
YXIgb3B0aW9uRGVidWdMYXllclRyZWVbXSA9ICItLWRlYnVnLWxheWVyLXRyZWUiOwpAQCAtODUs
MTcgKzg0LDEyIEBAIHByaXZhdGU6CiAgICAgT3duUHRyPE1vY2tXZWJLaXRQbGF0Zm9ybVN1cHBv
cnQ+IG1fbW9ja1BsYXRmb3JtOwogfTsKIAotc3RhdGljIHZvaWQgcnVuVGVzdChUZXN0U2hlbGwm
IHNoZWxsLCBUZXN0UGFyYW1zJiBwYXJhbXMsIGNvbnN0IHN0cmluZyYgdGVzdE5hbWUpCitzdGF0
aWMgdm9pZCBydW5UZXN0KFRlc3RTaGVsbCYgc2hlbGwsIFRlc3RQYXJhbXMmIHBhcmFtcywgY29u
c3Qgc3RyaW5nJiBpbnB1dExpbmUpCiB7CiAgICAgaW50IG9sZFRpbWVvdXRNc2VjID0gc2hlbGwu
bGF5b3V0VGVzdFRpbWVvdXQoKTsKLSAgICBwYXJhbXMucGl4ZWxIYXNoID0gIiI7Ci0gICAgc3Ry
aW5nIHBhdGhPclVSTCA9IHRlc3ROYW1lOwotICAgIHN0cmluZzo6c2l6ZV90eXBlIHNlcGFyYXRv
clBvc2l0aW9uID0gcGF0aE9yVVJMLmZpbmQoIiciKTsKLSAgICBpZiAoc2VwYXJhdG9yUG9zaXRp
b24gIT0gc3RyaW5nOjpucG9zKSB7Ci0gICAgICAgIHBhcmFtcy5waXhlbEhhc2ggPSBwYXRoT3JV
Ukwuc3Vic3RyKHNlcGFyYXRvclBvc2l0aW9uICsgMSk7Ci0gICAgICAgIHBhdGhPclVSTC5lcmFz
ZShzZXBhcmF0b3JQb3NpdGlvbik7Ci0gICAgfQotICAgIHBhcmFtcy50ZXN0VXJsID0gd2Via2l0
X3N1cHBvcnQ6OkNyZWF0ZVVSTEZvclBhdGhPclVSTChwYXRoT3JVUkwpOworICAgIFRlc3RDb21t
YW5kIGNvbW1hbmQgPSBwYXJzZUlucHV0TGluZShpbnB1dExpbmUpOworICAgIHBhcmFtcy50ZXN0
VXJsID0gd2Via2l0X3N1cHBvcnQ6OkNyZWF0ZVVSTEZvclBhdGhPclVSTChjb21tYW5kLnBhdGhP
clVSTCk7CisgICAgcGFyYW1zLnBpeGVsSGFzaCA9IGNvbW1hbmQuc2hvdWxkRHVtcFBpeGVsczsK
ICAgICB3ZWJraXRfc3VwcG9ydDo6U2V0Q3VycmVudERpcmVjdG9yeUZvckZpbGVVUkwocGFyYW1z
LnRlc3RVcmwpOwogICAgIHY4OjpWODo6U2V0RmxhZ3NGcm9tU3RyaW5nKHNoZWxsLmphdmFTY3Jp
cHRGbGFncygpLmNfc3RyKCksIHNoZWxsLmphdmFTY3JpcHRGbGFncygpLmxlbmd0aCgpKTsKICAg
ICBpZiAoc2hlbGwuc3RyZXNzT3B0KCkgfHwgc2hlbGwuc3RyZXNzRGVvcHQoKSkgewpAQCAtMTA4
LDExICsxMDIsMTEgQEAgc3RhdGljIHZvaWQgcnVuVGVzdChUZXN0U2hlbGwmIHNoZWxsLCBUZXN0
UGFyYW1zJiBwYXJhbXMsIGNvbnN0IHN0cmluZyYgdGVzdE5hbWUKICAgICAgICAgICBib29sIGlz
TGFzdExvYWQgPSAoaSA9PSAodjg6OlRlc3Rpbmc6OkdldFN0cmVzc1J1bnMoKSAtIDEpKTsKICAg
ICAgICAgICBzaGVsbC5zZXREdW1wV2hlbkZpbmlzaGVkKGlzTGFzdExvYWQpOwogICAgICAgICAg
IHNoZWxsLnJlc2V0VGVzdENvbnRyb2xsZXIoKTsKLSAgICAgICAgICBzaGVsbC5ydW5GaWxlVGVz
dChwYXJhbXMpOworICAgICAgICAgIHNoZWxsLnJ1bkZpbGVUZXN0KHBhcmFtcywgY29tbWFuZC5z
aG91bGREdW1wUGl4ZWxzKTsKICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgc2hlbGwucmVz
ZXRUZXN0Q29udHJvbGxlcigpOwotICAgICAgc2hlbGwucnVuRmlsZVRlc3QocGFyYW1zKTsKKyAg
ICAgIHNoZWxsLnJ1bkZpbGVUZXN0KHBhcmFtcywgY29tbWFuZC5zaG91bGREdW1wUGl4ZWxzKTsK
ICAgICB9CiAgICAgc2hlbGwuc2V0TGF5b3V0VGVzdFRpbWVvdXQob2xkVGltZW91dE1zZWMpOwog
fQpAQCAtMTQ2LDggKzE0MCw2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAg
ICAgICAgICAgICBzZXJ2ZXJNb2RlID0gdHJ1ZTsKICAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQg
PT0gb3B0aW9uTm90cmVlKQogICAgICAgICAgICAgcGFyYW1zLmR1bXBUcmVlID0gZmFsc2U7Ci0g
ICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvblBpeGVsVGVzdHMpCi0gICAgICAgICAg
ICBwYXJhbXMuZHVtcFBpeGVscyA9IHRydWU7CiAgICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09
IG9wdGlvbkRlYnVnUmVuZGVyVHJlZSkKICAgICAgICAgICAgIHBhcmFtcy5kZWJ1Z1JlbmRlclRy
ZWUgPSB0cnVlOwogICAgICAgICBlbHNlIGlmIChhcmd1bWVudCA9PSBvcHRpb25EZWJ1Z0xheWVy
VHJlZSkKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVs
bC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCmluZGV4
IDZmOTkxZmYzMzU5Yzc3NDYxYTIzODc5NTE4ZDMwMGM1NmZhMGM3ZjMuLjE5NmFjZGFhZGQ4MTg3
NWM2YzZmMTg3NTYwNTllY2UyOTg4NGZjYjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFNoZWxsLmNwcApAQCAtMTAyLDcgKzEwMiw4IEBAIHN0YXRpYyB2b2lkIG1ha2VD
YW52YXNPcGFxdWUoU2tDYW52YXMqIGNhbnZhcykKIH0KIAogVGVzdFNoZWxsOjpUZXN0U2hlbGwo
KQotICAgIDogbV90ZXN0SXNQZW5kaW5nKGZhbHNlKQorICAgIDogbV9kdW1wUGl4ZWxzRm9yQ3Vy
cmVudFRlc3QoZmFsc2UpCisgICAgLCBtX3Rlc3RJc1BlbmRpbmcoZmFsc2UpCiAgICAgLCBtX3Rl
c3RJc1ByZXBhcmluZyhmYWxzZSkKICAgICAsIG1fZm9jdXNlZFdpZGdldCgwKQogICAgICwgbV9k
ZXZUb29scygwKQpAQCAtMjM3LDEzICsyMzgsMTYgQEAgdm9pZCBUZXN0U2hlbGw6OnJlc2V0V2Vi
U2V0dGluZ3MoV2ViVmlldyYgd2ViVmlldykKICAgICBtX3ByZWZzLmFwcGx5VG8oJndlYlZpZXcp
OwogfQogCi12b2lkIFRlc3RTaGVsbDo6cnVuRmlsZVRlc3QoY29uc3QgVGVzdFBhcmFtcyYgcGFy
YW1zKQordm9pZCBUZXN0U2hlbGw6OnJ1bkZpbGVUZXN0KGNvbnN0IFRlc3RQYXJhbXMmIHBhcmFt
cywgYm9vbCBzaG91bGREdW1wUGl4ZWxzKQogewogICAgIEFTU0VSVChwYXJhbXMudGVzdFVybC5p
c1ZhbGlkKCkpOworICAgIG1fZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gc2hvdWxkRHVtcFBp
eGVsczsKICAgICBtX3Rlc3RJc1ByZXBhcmluZyA9IHRydWU7CiAgICAgbV9wYXJhbXMgPSBwYXJh
bXM7CiAgICAgc3RyaW5nIHRlc3RVcmwgPSBtX3BhcmFtcy50ZXN0VXJsLnNwZWMoKTsKIAorICAg
IG1fbGF5b3V0VGVzdENvbnRyb2xsZXItPnNldFNob3VsZEdlbmVyYXRlUGl4ZWxSZXN1bHRzKHNo
b3VsZER1bXBQaXhlbHMpOworCiAgICAgaWYgKHRlc3RVcmwuZmluZCgibG9hZGluZy8iKSAhPSBz
dHJpbmc6Om5wb3MKICAgICAgICAgfHwgdGVzdFVybC5maW5kKCJsb2FkaW5nXFwiKSAhPSBzdHJp
bmc6Om5wb3MpCiAgICAgICAgIG1fbGF5b3V0VGVzdENvbnRyb2xsZXItPnNldFNob3VsZER1bXBG
cmFtZUxvYWRDYWxsYmFja3ModHJ1ZSk7CkBAIC02MDksNyArNjEzLDcgQEAgdm9pZCBUZXN0U2hl
bGw6OmR1bXAoKQogICAgIGlmIChkdW1wZWRBbnl0aGluZyAmJiBtX3BhcmFtcy5wcmludFNlcGFy
YXRvcnMpCiAgICAgICAgIG1fcHJpbnRlci5oYW5kbGVUZXh0Rm9vdGVyKCk7CiAKLSAgICBpZiAo
bV9wYXJhbXMuZHVtcFBpeGVscyAmJiBzaG91bGRHZW5lcmF0ZVBpeGVsUmVzdWx0cykgeworICAg
IGlmIChtX2R1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCAmJiBzaG91bGRHZW5lcmF0ZVBpeGVsUmVz
dWx0cykgewogICAgICAgICAvLyBJbWFnZSBvdXRwdXQ6IHdlIHdyaXRlIHRoZSBpbWFnZSBkYXRh
IHRvIHRoZSBmaWxlIGdpdmVuIG9uIHRoZQogICAgICAgICAvLyBjb21tYW5kIGxpbmUgKGZvciB0
aGUgZHVtcCBwaXhlbHMgYXJndW1lbnQpLCBhbmQgdGhlIE1ENSBzdW0gdG8KICAgICAgICAgLy8g
c3Rkb3V0LgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNo
ZWxsLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaAppbmRleCAw
Nzc4MTYzNmJhNzUwNzU5NTJiMmZmMzhjNGM0NzNkZDc2YzRjYjVjLi44YWY2YjkzNmQzNzgzNmE1
N2JhMWM0MzVkMjhmZDRiNGE2OGM0OTQ4IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0U2hlbGwuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0U2hlbGwuaApAQCAtNjQsNyArNjQsNiBAQCBjbGFzcyBXZWJQZXJtaXNzaW9uczsKIAog
c3RydWN0IFRlc3RQYXJhbXMgewogICAgIGJvb2wgZHVtcFRyZWU7Ci0gICAgYm9vbCBkdW1wUGl4
ZWxzOwogICAgIGJvb2wgZGVidWdSZW5kZXJUcmVlOwogICAgIGJvb2wgZGVidWdMYXllclRyZWU7
CiAgICAgYm9vbCBwcmludFNlcGFyYXRvcnM7CkBAIC03Myw3ICs3Miw2IEBAIHN0cnVjdCBUZXN0
UGFyYW1zIHsKIAogICAgIFRlc3RQYXJhbXMoKQogICAgICAgICA6IGR1bXBUcmVlKHRydWUpCi0g
ICAgICAgICwgZHVtcFBpeGVscyhmYWxzZSkKICAgICAgICAgLCBkZWJ1Z1JlbmRlclRyZWUoZmFs
c2UpCiAgICAgICAgICwgZGVidWdMYXllclRyZWUoZmFsc2UpCiAgICAgICAgICwgcHJpbnRTZXBh
cmF0b3JzKGZhbHNlKSB7IH0KQEAgLTEwNCw3ICsxMDIsNyBAQCBwdWJsaWM6CiAgICAgV2ViUGVy
bWlzc2lvbnMqIHdlYlBlcm1pc3Npb25zKCkgeyByZXR1cm4gbV93ZWJQZXJtaXNzaW9ucy5nZXQo
KTsgfQogCiAgICAgdm9pZCBiaW5kSlNPYmplY3RzVG9XaW5kb3coV2ViS2l0OjpXZWJGcmFtZSop
OwotICAgIHZvaWQgcnVuRmlsZVRlc3QoY29uc3QgVGVzdFBhcmFtcyYpOworICAgIHZvaWQgcnVu
RmlsZVRlc3QoY29uc3QgVGVzdFBhcmFtcyYsIGJvb2wgc2hvdWxkRHVtcFBpeGVsVGVzdHMpOwog
ICAgIHZvaWQgY2FsbEpTR0MoKTsKICAgICB2b2lkIHJlc2V0VGVzdENvbnRyb2xsZXIoKTsKICAg
ICB2b2lkIHdhaXRUZXN0RmluaXNoZWQoKTsKQEAgLTIyNiw2ICsyMjQsNyBAQCBwcml2YXRlOgog
I2VuZGlmCiAKICAgICBUZXN0UGFyYW1zIG1fcGFyYW1zOworICAgIGJvb2wgbV9kdW1wUGl4ZWxz
Rm9yQ3VycmVudFRlc3Q7CiAgICAgaW50IG1fdGltZW91dDsgLy8gdGltZW91dCB2YWx1ZSBpbiBt
aWxsaXNlY29uZAogICAgIGJvb2wgbV9hbGxvd0V4dGVybmFsUGFnZXM7CiAgICAgYm9vbCBtX2Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JWaWRlb0VuYWJsZWQ7CmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VMaXN0cy50eHQgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9l
ZmwvQ01ha2VMaXN0cy50eHQKaW5kZXggZTFkYWNmOTAxYmEwNjI1YTVhMWU4MDdlYzZiOTQ1MzQz
NDk4NGNhYS4uMDY3ZGJkMzJiN2FhOTFmNWE1NDdjYjdiZTU3ZmY0YmRmNTk5OTMyOSAxMDA2NDQK
LS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4dApAQCAtMSw0ICsxLDUgQEAKIFNFVChE
dW1wUmVuZGVyVHJlZV9TT1VSQ0VTCisgICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL0R1
bXBSZW5kZXJUcmVlQ29tbW9uLmNwcAogICAgICR7VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJlZS9D
eWNsaWNSZWR1bmRhbmN5Q2hlY2suY3BwCiAgICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVl
L0dDQ29udHJvbGxlci5jcHAKICAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvTGF5b3V0
VGVzdENvbnRyb2xsZXIuY3BwCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwv
RHVtcFJlbmRlclRyZWUuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJU
cmVlLmNwcAppbmRleCBjMmM5ZDcxYzBjNTE1Y2IwOGNkNDEyZDQyYWRkMGQxMDVjYTk3NTljLi4z
NDkzYjg3NGYwNGRjNmY1ZTRiY2U2ZDNiODYxMDgzMTI1MTQyODUwIDEwMDY0NAotLS0gYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWUuY3BwCisrKyBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZS5jcHAKQEAgLTY0LDcgKzY0LDcgQEAgZXh0ZXJu
IEV3a19IaXN0b3J5X0l0ZW0qIHByZXZUZXN0QkZJdGVtOwogUmVmUHRyPExheW91dFRlc3RDb250
cm9sbGVyPiBnTGF5b3V0VGVzdENvbnRyb2xsZXI7CiB2b2xhdGlsZSBib29sIGRvbmUgPSBmYWxz
ZTsKIAotc3RhdGljIGludCBkdW1wUGl4ZWxzID0gZmFsc2U7CitzdGF0aWMgYm9vbCBkdW1wUGl4
ZWxzRm9yQ3VycmVudFRlc3RGb3JDdXJyZW50VGVzdDsKIHN0YXRpYyBpbnQgZHVtcFRyZWUgPSB0
cnVlOwogc3RhdGljIGludCBwcmludFNlcGFyYXRvcnMgPSB0cnVlOwogc3RhdGljIGludCB1c2VY
MTFXaW5kb3cgPSBmYWxzZTsKQEAgLTE5Miw3ICsxOTIsNiBAQCBzdGF0aWMgYm9vbCBwYXJzZUNv
bW1hbmRMaW5lT3B0aW9ucyhpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7CiAgICAgc3RhdGljIGNv
bnN0IG9wdGlvbiBvcHRpb25zW10gPSB7CiAgICAgICAgIHsibm90cmVlIiwgbm9fYXJndW1lbnQs
ICZkdW1wVHJlZSwgZmFsc2V9LAotICAgICAgICB7InBpeGVsLXRlc3RzIiwgbm9fYXJndW1lbnQs
ICZkdW1wUGl4ZWxzLCB0cnVlfSwKICAgICAgICAgeyJ0cmVlIiwgbm9fYXJndW1lbnQsICZkdW1w
VHJlZSwgdHJ1ZX0sCiAgICAgICAgIHsiZ3VpIiwgbm9fYXJndW1lbnQsICZ1c2VYMTFXaW5kb3cs
IHRydWV9LAogICAgICAgICB7MCwgMCwgMCwgMH0KQEAgLTIxMCwzMiArMjA5LDYgQEAgc3RhdGlj
IGJvb2wgcGFyc2VDb21tYW5kTGluZU9wdGlvbnMoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAg
IHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgU3RyaW5nIGdldEZpbmFsVGVzdFVSTChjb25zdCBT
dHJpbmcmIHRlc3RVUkwpCi17Ci0gICAgY29uc3Qgc2l6ZV90IGhhc2hTZXBhcmF0b3JQb3MgPSB0
ZXN0VVJMLmZpbmQoIiciKTsKLSAgICBpZiAoaGFzaFNlcGFyYXRvclBvcyAhPSBub3RGb3VuZCkK
LSAgICAgICAgcmV0dXJuIGdldEZpbmFsVGVzdFVSTCh0ZXN0VVJMLmxlZnQoaGFzaFNlcGFyYXRv
clBvcykpOwotCi0gICAgLy8gQ29udmVydCB0aGUgcGF0aCBpbnRvIGEgZnVsbCBmaWxlIFVSTCBp
ZiBpdCBkb2VzIG5vdCBsb29rCi0gICAgLy8gbGlrZSBhbiBIVFRQL1MgVVJMIChkb2Vzbid0IHN0
YXJ0IHdpdGggaHR0cDovLyBvciBodHRwczovLykuCi0gICAgaWYgKCF0ZXN0VVJMLnN0YXJ0c1dp
dGgoImh0dHA6Ly8iKSAmJiAhdGVzdFVSTC5zdGFydHNXaXRoKCJodHRwczovLyIpKSB7Ci0gICAg
ICAgIGNoYXIqIGNGaWxlUGF0aCA9IGVjb3JlX2ZpbGVfcmVhbHBhdGgodGVzdFVSTC51dGY4KCku
ZGF0YSgpKTsKLSAgICAgICAgY29uc3QgU3RyaW5nIGZpbGVQYXRoID0gU3RyaW5nOjpmcm9tVVRG
OChjRmlsZVBhdGgpOwotICAgICAgICBmcmVlKGNGaWxlUGF0aCk7Ci0KLSAgICAgICAgaWYgKGVj
b3JlX2ZpbGVfZXhpc3RzKGZpbGVQYXRoLnV0ZjgoKS5kYXRhKCkpKQotICAgICAgICAgICAgcmV0
dXJuIFN0cmluZygiZmlsZTovLyIpICsgZmlsZVBhdGg7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRl
c3RVUkw7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgZ2V0RXhwZWN0ZWRQaXhlbEhhc2goY29uc3QgU3Ry
aW5nJiB0ZXN0VVJMKQotewotICAgIGNvbnN0IHNpemVfdCBoYXNoU2VwYXJhdG9yUG9zID0gdGVz
dFVSTC5maW5kKCInIik7Ci0gICAgcmV0dXJuIChoYXNoU2VwYXJhdG9yUG9zICE9IG5vdEZvdW5k
KSA/IHRlc3RVUkwuc3Vic3RyaW5nKGhhc2hTZXBhcmF0b3JQb3MgKyAxKSA6IFN0cmluZygpOwot
fQotCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNHbG9iYWxIaXN0b3J5VGVzdChjb25zdCBTdHJpbmcm
IGNUZXN0UGF0aE9yVVJMKQogewogICAgIHJldHVybiBjVGVzdFBhdGhPclVSTC5jb250YWlucygi
L2dsb2JhbGhpc3RvcnkvIik7CkBAIC0yNjcsMTMgKzI0MCwxMyBAQCBzdGF0aWMgdm9pZCBjcmVh
dGVMYXlvdXRUZXN0Q29udHJvbGxlcihjb25zdCBTdHJpbmcmIHRlc3RVUkwsIGNvbnN0IFN0cmlu
ZyYgZXhwZQogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBjaGFyKiBjVGVz
dFBhdGhPclVSTCkKK3N0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3QgY2hhciogaW5wdXRMaW5lKQog
ewotICAgIGNvbnN0IFN0cmluZyB0ZXN0UGF0aE9yVVJMID0gU3RyaW5nOjpmcm9tVVRGOChjVGVz
dFBhdGhPclVSTCk7Ci0gICAgQVNTRVJUKCF0ZXN0UGF0aE9yVVJMLmlzRW1wdHkoKSk7Ci0KLSAg
ICBjb25zdCBTdHJpbmcgdGVzdFVSTCA9IGdldEZpbmFsVGVzdFVSTCh0ZXN0UGF0aE9yVVJMKTsK
LSAgICBjb25zdCBTdHJpbmcgZXhwZWN0ZWRQaXhlbEhhc2ggPSBnZXRFeHBlY3RlZFBpeGVsSGFz
aCh0ZXN0UGF0aE9yVVJMKTsKKyAgICBUZXN0Q29tbWFuZCBjb21tYW5kID0gcGFyc2VJbnB1dExp
bmUoaW5wdXRMaW5lKTsKKyAgICBjb25zdCBTdHJpbmcgdGVzdFVSTChjb21tYW5kLnBhdGhPclVS
TC5jX3N0cigpKTsKKyAgICBBU1NFUlQoIXRlc3RVUkwuaXNFbXB0eSgpKTsKKyAgICBkdW1wUGl4
ZWxzRm9yQ3VycmVudFRlc3QgPSBjb21tYW5kLnNob3VsZER1bXBQaXhlbHM7CisgICAgY29uc3Qg
U3RyaW5nIGV4cGVjdGVkUGl4ZWxIYXNoKGNvbW1hbmQuZXhwZWN0ZWRQaXhlbEhhc2guY19zdHIo
KSk7CiAKICAgICBicm93c2VyLT5yZXNldERlZmF1bHRzVG9Db25zaXN0ZW50VmFsdWVzKCk7CiAg
ICAgY3JlYXRlTGF5b3V0VGVzdENvbnRyb2xsZXIodGVzdFVSTCwgZXhwZWN0ZWRQaXhlbEhhc2gp
OwpAQCAtMzUxLDcgKzMyNCw3IEBAIHN0YXRpYyBib29sIHNob3VsZER1bXBGcmFtZVNjcm9sbFBv
c2l0aW9uKCkKIAogc3RhdGljIGJvb2wgc2hvdWxkRHVtcFBpeGVsc0FuZENvbXBhcmVXaXRoRXhw
ZWN0ZWQoKQogewotICAgIHJldHVybiBkdW1wUGl4ZWxzICYmIGdMYXlvdXRUZXN0Q29udHJvbGxl
ci0+Z2VuZXJhdGVQaXhlbFJlc3VsdHMoKSAmJiAhZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1w
RE9NQXNXZWJBcmNoaXZlKCkgJiYgIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFNvdXJjZUFz
V2ViQXJjaGl2ZSgpOworICAgIHJldHVybiBkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgJiYgZ0xh
eW91dFRlc3RDb250cm9sbGVyLT5nZW5lcmF0ZVBpeGVsUmVzdWx0cygpICYmICFnTGF5b3V0VGVz
dENvbnRyb2xsZXItPmR1bXBET01Bc1dlYkFyY2hpdmUoKSAmJiAhZ0xheW91dFRlc3RDb250cm9s
bGVyLT5kdW1wU291cmNlQXNXZWJBcmNoaXZlKCk7CiB9CiAKIHN0YXRpYyBib29sIHNob3VsZER1
bXBCYWNrRm9yd2FyZExpc3QoKQpAQCAtNDU4LDcgKzQzMSw3IEBAIGludCBtYWluKGludCBhcmdj
LCBjaGFyKiogYXJndikKICAgICAgICAgcHJpbnRTZXBhcmF0b3JzID0gdHJ1ZTsKICAgICAgICAg
cnVuVGVzdGluZ1NlcnZlckxvb3AoKTsKICAgICB9IGVsc2UgewotICAgICAgICBwcmludFNlcGFy
YXRvcnMgPSAob3B0aW5kIDwgYXJnYyAtIDEgfHwgKGR1bXBQaXhlbHMgJiYgZHVtcFRyZWUpKTsK
KyAgICAgICAgcHJpbnRTZXBhcmF0b3JzID0gKG9wdGluZCA8IGFyZ2MgLSAxIHx8IChkdW1wUGl4
ZWxzRm9yQ3VycmVudFRlc3QgJiYgZHVtcFRyZWUpKTsKICAgICAgICAgZm9yIChpbnQgaSA9IG9w
dGluZDsgaSAhPSBhcmdjOyArK2kpCiAgICAgICAgICAgICBydW5UZXN0KGFyZ3ZbaV0pOwogICAg
IH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5j
cHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwCmluZGV4IDU3
Y2QwNTkxN2U4MjI1NThiNDgzNzZlMDEwMmQ4MDBhNmJjZmNjZGEuLjZlMGNlMTMwMGJmMzNkYmM0
NzNkYTAyZmVjMmM1NWVkNmNkNzQyYjQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0R1
bXBSZW5kZXJUcmVlLmNwcApAQCAtNzMsNyArNzMsNyBAQCBleHRlcm4gZ2NoYXIqIHdlYmtpdF93
ZWJfZnJhbWVfZ2V0X3Jlc3BvbnNlX21pbWVfdHlwZShXZWJLaXRXZWJGcmFtZSogZnJhbWUpOwog
CiB2b2xhdGlsZSBib29sIGRvbmU7CiBzdGF0aWMgYm9vbCBwcmludFNlcGFyYXRvcnM7Ci1zdGF0
aWMgaW50IGR1bXBQaXhlbHM7CitzdGF0aWMgYm9vbCBkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3Q7
CiBzdGF0aWMgaW50IGR1bXBUcmVlID0gMTsKIHN0YXRpYyBpbnQgdXNlVGltZW91dFdhdGNoZG9n
ID0gMTsKIApAQCAtNTQ0LDcgKzU0NCw2IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVHbG9iYWxz
RnJvbUNvbW1hbmRMaW5lT3B0aW9ucyhpbnQgYXJnYywgY2hhciAqYXJndltdKQogewogICAgIHN0
cnVjdCBvcHRpb24gb3B0aW9uc1tdID0gewogICAgICAgICB7Im5vdHJlZSIsIG5vX2FyZ3VtZW50
LCAmZHVtcFRyZWUsIGZhbHNlfSwKLSAgICAgICAgeyJwaXhlbC10ZXN0cyIsIG5vX2FyZ3VtZW50
LCAmZHVtcFBpeGVscywgdHJ1ZX0sCiAgICAgICAgIHsidHJlZSIsIG5vX2FyZ3VtZW50LCAmZHVt
cFRyZWUsIHRydWV9LAogICAgICAgICB7Im5vLXRpbWVvdXQiLCBub19hcmd1bWVudCwgJnVzZVRp
bWVvdXRXYXRjaGRvZywgZmFsc2V9LAogICAgICAgICB7TlVMTCwgMCwgTlVMTCwgMH0KQEAgLTYy
NCw3ICs2MjMsNyBAQCB2b2lkIGR1bXAoKQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGR1
bXBQaXhlbHMKKyAgICBpZiAoZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0CiAgICAgICYmIGdMYXlv
dXRUZXN0Q29udHJvbGxlci0+Z2VuZXJhdGVQaXhlbFJlc3VsdHMoKQogICAgICAmJiAhZ0xheW91
dFRlc3RDb250cm9sbGVyLT5kdW1wRE9NQXNXZWJBcmNoaXZlKCkKICAgICAgJiYgIWdMYXlvdXRU
ZXN0Q29udHJvbGxlci0+ZHVtcFNvdXJjZUFzV2ViQXJjaGl2ZSgpKSB7CkBAIC02ODcsMTggKzY4
NiwxMyBAQCBzdGF0aWMgdm9pZCBzZW5kUGl4ZWxSZXN1bHRzRU9GKCkKICAgICBmZmx1c2goc3Rk
ZXJyKTsKIH0KIAotc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIHRlc3RQYXRoT3JV
UkwpCitzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYgaW5wdXRMaW5lKQogewogICAg
IEFTU0VSVCghdGVzdFBhdGhPclVSTC5lbXB0eSgpKTsKIAotICAgIC8vIExvb2sgZm9yICInIiBh
cyBhIHNlcGFyYXRvciBiZXR3ZWVuIHRoZSBwYXRoIG9yIFVSTCwgYW5kIHRoZSBwaXhlbCBkdW1w
IGhhc2ggdGhhdCBmb2xsb3dzLgotICAgIHN0cmluZyB0ZXN0VVJMKHRlc3RQYXRoT3JVUkwpOwot
ICAgIHN0cmluZyBleHBlY3RlZFBpeGVsSGFzaDsKLSAgICBzaXplX3Qgc2VwYXJhdG9yUG9zID0g
dGVzdFVSTC5maW5kKCInIik7Ci0gICAgaWYgKHNlcGFyYXRvclBvcyAhPSBzdHJpbmc6Om5wb3Mp
IHsKLSAgICAgICAgdGVzdFVSTCA9IHN0cmluZyh0ZXN0UGF0aE9yVVJMLCAwLCBzZXBhcmF0b3JQ
b3MpOwotICAgICAgICBleHBlY3RlZFBpeGVsSGFzaCA9IHN0cmluZyh0ZXN0UGF0aE9yVVJMLCBz
ZXBhcmF0b3JQb3MgKyAxKTsKLSAgICB9CisgICAgVGVzdENvbW1hbmQgY29tbWFuZCA9IHBhcnNl
SW5wdXRMaW5lKGlucHV0TGluZSk7CisgICAgY29uc3Qgc3RyaW5nJiB0ZXN0VVJMID0gY29tbWFu
ZC5wYXRoT3JVUkw7CisgICAgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gY29tbWFuZC5zaG91
bGREdW1wUGl4ZWxzOwogCiAgICAgLy8gQ29udmVydCB0aGUgcGF0aCBpbnRvIGEgZnVsbCBmaWxl
IFVSTCBpZiBpdCBkb2VzIG5vdCBsb29rCiAgICAgLy8gbGlrZSBhbiBIVFRQL1MgVVJMIChkb2Vz
bid0IHN0YXJ0IHdpdGggaHR0cDovLyBvciBodHRwczovLykuCkBAIC03MTIsNyArNzA2LDcgQEAg
c3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIHRlc3RQYXRoT3JVUkwpCiAKICAgICBy
ZXNldERlZmF1bHRzVG9Db25zaXN0ZW50VmFsdWVzKCk7CiAKLSAgICBnTGF5b3V0VGVzdENvbnRy
b2xsZXIgPSBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y3JlYXRlKHRlc3RVUkwsIGV4cGVjdGVkUGl4
ZWxIYXNoKTsKKyAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXIgPSBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6Y3JlYXRlKHRlc3RVUkwsIGNvbW1hbmQuZXhwZWN0ZWRQaXhlbEhhc2gpOwogICAgIHRvcExv
YWRpbmdGcmFtZSA9IDA7CiAgICAgZG9uZSA9IGZhbHNlOwogCkBAIC0xNDQ3LDcgKzE0NDEsNyBA
QCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgICAgICBwcmludFNlcGFyYXRv
cnMgPSB0cnVlOwogICAgICAgICBydW5UZXN0aW5nU2VydmVyTG9vcCgpOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIHByaW50U2VwYXJhdG9ycyA9IChvcHRpbmQgPCBhcmdjLTEgfHwgKGR1bXBQaXhl
bHMgJiYgZHVtcFRyZWUpKTsKKyAgICAgICAgcHJpbnRTZXBhcmF0b3JzID0gKG9wdGluZCA8IGFy
Z2MtMSB8fCAoZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ICYmIGR1bXBUcmVlKSk7CiAgICAgICAg
IGZvciAoaW50IGkgPSBvcHRpbmQ7IGkgIT0gYXJnYzsgKytpKQogICAgICAgICAgICAgcnVuVGVz
dChhcmd2W2ldKTsKICAgICB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
RHVtcFJlbmRlclRyZWUubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRy
ZWUubW0KaW5kZXggYWJiYTUzNWVkZGM4OGEzOTQ5MDI5NGZkNDUxYTM5MTk2OGZjYzNkMS4uMzA2
NDEzM2FkZDY3Zjc2OTljZGZjOWU2ZGQ5ZTNhNzlmZjIxYTU4MSAxMDA2NDQKLS0tIGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQpAQCAtMTQwLDcgKzE0MCw3IEBAIHN0YXRpYyBI
aXN0b3J5RGVsZWdhdGUgKmhpc3RvcnlEZWxlZ2F0ZTsKIFBvbGljeURlbGVnYXRlICpwb2xpY3lE
ZWxlZ2F0ZTsKIFN0b3JhZ2VUcmFja2VyRGVsZWdhdGUgKnN0b3JhZ2VEZWxlZ2F0ZTsKIAotc3Rh
dGljIGludCBkdW1wUGl4ZWxzOworc3RhdGljIGJvb2wgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0
Owogc3RhdGljIGludCB0aHJlYWRlZDsKIHN0YXRpYyBpbnQgZHVtcFRyZWUgPSBZRVM7CiBzdGF0
aWMgaW50IHVzZVRpbWVvdXRXYXRjaGRvZyA9IFlFUzsKQEAgLTc4MCw3ICs3ODAsNiBAQCBzdGF0
aWMgdm9pZCBpbml0aWFsaXplR2xvYmFsc0Zyb21Db21tYW5kTGluZU9wdGlvbnMoaW50IGFyZ2Ms
IGNvbnN0IGNoYXIgKmFyZ3ZbXQogewogICAgIHN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0gewog
ICAgICAgICB7Im5vdHJlZSIsIG5vX2FyZ3VtZW50LCAmZHVtcFRyZWUsIE5PfSwKLSAgICAgICAg
eyJwaXhlbC10ZXN0cyIsIG5vX2FyZ3VtZW50LCAmZHVtcFBpeGVscywgWUVTfSwKICAgICAgICAg
eyJ0cmVlIiwgbm9fYXJndW1lbnQsICZkdW1wVHJlZSwgWUVTfSwKICAgICAgICAgeyJ0aHJlYWRl
ZCIsIG5vX2FyZ3VtZW50LCAmdGhyZWFkZWQsIFlFU30sCiAgICAgICAgIHsiY29tcGxleC10ZXh0
Iiwgbm9fYXJndW1lbnQsICZmb3JjZUNvbXBsZXhUZXh0LCBZRVN9LApAQCAtODQ5LDcgKzg0OCw3
IEBAIHZvaWQgZHVtcFJlbmRlclRyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkKICAg
ICBpbml0aWFsaXplR2xvYmFsc0Zyb21Db21tYW5kTGluZU9wdGlvbnMoYXJnYywgYXJndik7CiAg
ICAgcHJlcGFyZUNvbnNpc3RlbnRUZXN0aW5nRW52aXJvbm1lbnQoKTsKICAgICBhZGRUZXN0UGx1
Z2luc1RvUGx1Z2luU2VhcmNoUGF0aChhcmd2WzBdKTsKLSAgICBpZiAoZHVtcFBpeGVscykKKyAg
ICBpZiAoZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0KQogICAgICAgICBpbnN0YWxsU2lnbmFsSGFu
ZGxlcnMoKTsKIAogICAgIGlmIChmb3JjZUNvbXBsZXhUZXh0KQpAQCAtODc0LDcgKzg3Myw3IEBA
IHZvaWQgZHVtcFJlbmRlclRyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkKICAgICAg
ICAgcHJpbnRTZXBhcmF0b3JzID0gWUVTOwogICAgICAgICBydW5UZXN0aW5nU2VydmVyTG9vcCgp
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHByaW50U2VwYXJhdG9ycyA9IChvcHRpbmQgPCBhcmdj
LTEgfHwgKGR1bXBQaXhlbHMgJiYgZHVtcFRyZWUpKTsKKyAgICAgICAgcHJpbnRTZXBhcmF0b3Jz
ID0gKG9wdGluZCA8IGFyZ2MgLSAxIHx8IChkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgJiYgZHVt
cFRyZWUpOwogICAgICAgICBmb3IgKGludCBpID0gb3B0aW5kOyBpICE9IGFyZ2M7ICsraSkKICAg
ICAgICAgICAgIHJ1blRlc3QoYXJndltpXSk7CiAgICAgfQpAQCAtMTE5NSw3ICsxMTk0LDcgQEAg
dm9pZCBkdW1wKCkKICAgICAgICAgfSAgICAgICAgICAgIAogICAgIH0KIAotICAgIGlmIChkdW1w
UGl4ZWxzICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+Z2VuZXJhdGVQaXhlbFJlc3VsdHMoKSkK
KyAgICBpZiAoZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ICYmIGdMYXlvdXRUZXN0Q29udHJvbGxl
ci0+Z2VuZXJhdGVQaXhlbFJlc3VsdHMoKSkKICAgICAgICAgLy8gRklYTUU6IHdoZW4gaXNQcmlu
dGluZyBpcyBzZXQsIGR1bXAgdGhlIGltYWdlIHdpdGggcGFnZSBzZXBhcmF0b3JzLgogICAgICAg
ICBkdW1wV2ViVmlld0FzUGl4ZWxzQW5kQ29tcGFyZVdpdGhFeHBlY3RlZChnTGF5b3V0VGVzdENv
bnRyb2xsZXItPmV4cGVjdGVkUGl4ZWxIYXNoKCkpOwogCkBAIC0xMjc2LDE5ICsxMjc1LDEzIEBA
IHN0YXRpYyB2b2lkIHJlc2V0V2ViVmlld1RvQ29uc2lzdGVudFN0YXRlQmVmb3JlVGVzdGluZygp
CiAgICAgW21haW5GcmFtZSBfY2xlYXJPcGVuZXJdOwogfQogCi1zdGF0aWMgdm9pZCBydW5UZXN0
KGNvbnN0IHN0cmluZyYgdGVzdFBhdGhPclVSTCkKK3N0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qg
c3RyaW5nJiBpbnB1dExpbmUpCiB7CiAgICAgQVNTRVJUKCF0ZXN0UGF0aE9yVVJMLmVtcHR5KCkp
OwotICAgIAotICAgIC8vIExvb2sgZm9yICInIiBhcyBhIHNlcGFyYXRvciBiZXR3ZWVuIHRoZSBw
YXRoIG9yIFVSTCwgYW5kIHRoZSBwaXhlbCBkdW1wIGhhc2ggdGhhdCBmb2xsb3dzLgotICAgIHN0
cmluZyBwYXRoT3JVUkwodGVzdFBhdGhPclVSTCk7Ci0gICAgc3RyaW5nIGV4cGVjdGVkUGl4ZWxI
YXNoOwotICAgIAotICAgIHNpemVfdCBzZXBhcmF0b3JQb3MgPSBwYXRoT3JVUkwuZmluZCgiJyIp
OwotICAgIGlmIChzZXBhcmF0b3JQb3MgIT0gc3RyaW5nOjpucG9zKSB7Ci0gICAgICAgIHBhdGhP
clVSTCA9IHN0cmluZyh0ZXN0UGF0aE9yVVJMLCAwLCBzZXBhcmF0b3JQb3MpOwotICAgICAgICBl
eHBlY3RlZFBpeGVsSGFzaCA9IHN0cmluZyh0ZXN0UGF0aE9yVVJMLCBzZXBhcmF0b3JQb3MgKyAx
KTsKLSAgICB9CisKKyAgICBUZXN0Q29tbWFuZCBjb21tYW5kID0gcGFyc2VJbnB1dExpbmUoaW5w
dXRMaW5lKTsKKyAgICBjb25zdCBzdHJpbmcmIHBhdGhPclVSTCA9IGNvbW1hbmQucGF0aE9yVVJM
OworICAgIGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCA9IGNvbW1hbmQuc2hvdWxkRHVtcFBpeGVs
czsKIAogICAgIE5TU3RyaW5nICpwYXRoT3JVUkxTdHJpbmcgPSBbTlNTdHJpbmcgc3RyaW5nV2l0
aFVURjhTdHJpbmc6cGF0aE9yVVJMLmNfc3RyKCldOwogICAgIGlmICghcGF0aE9yVVJMU3RyaW5n
KSB7CkBAIC0xMzEwLDcgKzEzMDMsNyBAQCBzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmlu
ZyYgdGVzdFBhdGhPclVSTCkKICAgICAKICAgICByZXNldFdlYlZpZXdUb0NvbnNpc3RlbnRTdGF0
ZUJlZm9yZVRlc3RpbmcoKTsKIAotICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlciA9IExheW91dFRl
c3RDb250cm9sbGVyOjpjcmVhdGUodGVzdFVSTCwgZXhwZWN0ZWRQaXhlbEhhc2gpOworICAgIGdM
YXlvdXRUZXN0Q29udHJvbGxlciA9IExheW91dFRlc3RDb250cm9sbGVyOjpjcmVhdGUodGVzdFVS
TCwgY29tbWFuZC5leHBlY3RlZFBpeGVsSGFzaCk7CiAgICAgdG9wTG9hZGluZ0ZyYW1lID0gbmls
OwogICAgIEFTU0VSVCghZHJhZ2dpbmdJbmZvKTsgLy8gdGhlIHByZXZpb3VzIHRlc3Qgc2hvdWxk
IGhhdmUgY2FsbGVkIGV2ZW50U2VuZGVyLm1vdXNlVXAgdG8gZHJvcCEKICAgICByZWxlYXNlQW5k
WmVybygmZHJhZ2dpbmdJbmZvKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0
L0R1bXBSZW5kZXJUcmVlLnBybyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJU
cmVlLnBybwppbmRleCBmNDdmYjQzNDRiOWVmODNhNWFhNDZiYjU2ODNkOTIzMTQ5NGFhMTI1Li44
MzM4NzBiY2FjOWE4MmVkY2VlODFlZDVkYmEzMTkxMGFjZjBmMGYyIDEwMDY0NAotLS0gYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5wcm8KKysrIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvCkBAIC0yNSw2ICsyNSw3IEBAIGNvbnRhaW5z
KERFRklORVMsIEhBVkVfRk9OVENPTkZJRz0xKTogUEtHQ09ORklHICs9IGZvbnRjb25maWcKIAog
SEVBREVSUyArPSBcCiAgICAgJCRQV0QvLi4vV29ya1F1ZXVlLmggXAorICAgICQkUFdELy4uL0R1
bXBSZW5kZXJUcmVlLmggXAogICAgIER1bXBSZW5kZXJUcmVlUXQuaCBcCiAgICAgRXZlbnRTZW5k
ZXJRdC5oIFwKICAgICBUZXh0SW5wdXRDb250cm9sbGVyUXQuaCBcCkBAIC0zNiw2ICszNyw3IEBA
IEhFQURFUlMgKz0gXAogCiBTT1VSQ0VTICs9IFwKICAgICAkJFBXRC8uLi9Xb3JrUXVldWUuY3Bw
IFwKKyAgICAkJFBXRC8uLi9EdW1wUmVuZGVyVHJlZUNvbW1vbi5jcHAgXAogICAgIER1bXBSZW5k
ZXJUcmVlUXQuY3BwIFwKICAgICBFdmVudFNlbmRlclF0LmNwcCBcCiAgICAgVGV4dElucHV0Q29u
dHJvbGxlclF0LmNwcCBcCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1w
UmVuZGVyVHJlZVF0LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVl
UXQuY3BwCmluZGV4IDBlY2Y2MjJmM2Y4ZGRhNTZjNGM4OGNlZmNmMDhhM2M5OGNmMjM3YzQuLjVh
NWNiOTZhZGVjOTNjZDBlYjY4NTAwZTc2ZWMzMWVmZGRhMDk3YWYgMTAwNzU1Ci0tLSBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwCisrKyBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAgKi8K
IAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCiAKICNp
bmNsdWRlICJEdW1wUmVuZGVyVHJlZVF0LmgiCiAjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVTdXBw
b3J0UXQuaCIKQEAgLTY5MCw0NCArNjkxLDI3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWU6OmxvYWRO
ZXh0VGVzdEluU3RhbmRBbG9uZU1vZGUoKQogCiB2b2lkIER1bXBSZW5kZXJUcmVlOjpwcm9jZXNz
TGluZShjb25zdCBRU3RyaW5nICZpbnB1dCkKIHsKLSAgICBRU3RyaW5nIGxpbmUgPSBpbnB1dDsK
LQotICAgIG1fZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gZmFsc2U7Ci0gICAgbV9leHBlY3Rl
ZEhhc2ggPSBRU3RyaW5nKCk7Ci0gICAgLy8gc2luZ2xlIHF1b3RlIG1hcmtzIHRoZSBwaXhlbCBk
dW1wIGhhc2gKLSAgICBpbnQgaW5kZXhPZkZpcnN0U2VwYXJhdG9yID0gbGluZS5pbmRleE9mKCdc
JycpOwotICAgIGludCBpbmRleE9mU2Vjb25kU2VwYXJhdG9yID0gbGluZS5pbmRleE9mKCdcJycs
IGluZGV4T2ZGaXJzdFNlcGFyYXRvciArIDEpOwotICAgIGlmIChpbmRleE9mRmlyc3RTZXBhcmF0
b3IgPiAtMSkgewotICAgICAgICBpbnQgaW5kZXhPZlBpeGVsSGFzaCA9IGluZGV4T2ZGaXJzdFNl
cGFyYXRvciArIDE7Ci0KLSAgICAgICAgLy8gTlJXVCBwYXNzZXMgLS1waXhlbC10ZXN0IGlmIHdl
IHNob3VsZCBkdW1wIHBpeGVscyBmb3IgdGhlIHRlc3QuCi0gICAgICAgIGNvbnN0IFFTdHJpbmcg
ZXhwZWN0ZWRBcmcoUUxhdGluMVN0cmluZygiLS1waXhlbC10ZXN0IikpOwotICAgICAgICBRU3Ry
aW5nIGFyZ1Rlc3QgPSBsaW5lLm1pZChpbmRleE9mRmlyc3RTZXBhcmF0b3IgKyAxLCBleHBlY3Rl
ZEFyZy5sZW5ndGgoKSk7Ci0gICAgICAgIGlmIChhcmdUZXN0ID09IGV4cGVjdGVkQXJnKSB7Ci0g
ICAgICAgICAgICBtX2R1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCA9IHRydWU7Ci0gICAgICAgICAg
ICBpbmRleE9mUGl4ZWxIYXNoID0gaW5kZXhPZlNlY29uZFNlcGFyYXRvciA9PSAtMSA/IC0xIDog
aW5kZXhPZlNlY29uZFNlcGFyYXRvciArIDE7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGluZGV4
T2ZQaXhlbEhhc2ggIT0gLTEgJiYgaW5kZXhPZlBpeGVsSGFzaCA8IGxpbmUuc2l6ZSgpKQotICAg
ICAgICAgICAgbV9leHBlY3RlZEhhc2ggPSBsaW5lLm1pZChpbmRleE9mUGl4ZWxIYXNoKTsKLSAg
ICAgICAgbGluZS5yZW1vdmUoaW5kZXhPZkZpcnN0U2VwYXJhdG9yLCBsaW5lLmxlbmd0aCgpKTsK
LSAgICB9Ci0KLSAgICBpZiAobGluZS5zdGFydHNXaXRoKFFMYXRpbjFTdHJpbmcoImh0dHA6Iikp
Ci0gICAgICAgICAgICB8fCBsaW5lLnN0YXJ0c1dpdGgoUUxhdGluMVN0cmluZygiaHR0cHM6Iikp
Ci0gICAgICAgICAgICB8fCBsaW5lLnN0YXJ0c1dpdGgoUUxhdGluMVN0cmluZygiZmlsZToiKSkK
LSAgICAgICAgICAgIHx8IGxpbmUgPT0gUUxhdGluMVN0cmluZygiYWJvdXQ6YmxhbmsiKSkgewot
ICAgICAgICBvcGVuKFFVcmwobGluZSkpOworICAgIFRlc3RDb21tYW5kIGNvbW1hbmQgPSBwYXJz
ZUlucHV0TGluZShzdGQ6OnN0cmluZyhpbnB1dC50b0xhdGluMSgpLmNvbnN0RGF0YSgpKSk7Cisg
ICAgUVN0cmluZyBwYXRoT3JVUkwgPSBRTGF0aW4xU3RyaW5nKGNvbW1hbmQucGF0aE9yVVJMLmNf
c3RyKCkpOworICAgIG1fZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gY29tbWFuZC5zaG91bGRE
dW1wUGl4ZWxzOworICAgIG1fZXhwZWN0ZWRIYXNoID0gUUxhdGluMVN0cmluZyhjb21tYW5kLmV4
cGVjdGVkUGl4ZWxIYXNoLmNfc3RyKCkpOworCisgICAgaWYgKHBhdGhPclVSTC5zdGFydHNXaXRo
KFFMYXRpbjFTdHJpbmcoImh0dHA6IikpCisgICAgICAgICAgICB8fCBwYXRoT3JVUkwuc3RhcnRz
V2l0aChRTGF0aW4xU3RyaW5nKCJodHRwczoiKSkKKyAgICAgICAgICAgIHx8IHBhdGhPclVSTC5z
dGFydHNXaXRoKFFMYXRpbjFTdHJpbmcoImZpbGU6IikpCisgICAgICAgICAgICB8fCBwYXRoT3JV
UkwgPT0gUUxhdGluMVN0cmluZygiYWJvdXQ6YmxhbmsiKSkgeworICAgICAgICBvcGVuKFFVcmwo
cGF0aE9yVVJMKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgUUZpbGVJbmZvIGZpKGxpbmUpOwor
ICAgICAgICBRRmlsZUluZm8gZmkocGF0aE9yVVJMKTsKIAogICAgICAgICBpZiAoIWZpLmV4aXN0
cygpKSB7CiAgICAgICAgICAgICBRRGlyIGN1cnJlbnREaXIgPSBRRGlyOjpjdXJyZW50UGF0aCgp
OwogCiAgICAgICAgICAgICAvLyBUcnkgdG8gYmUgc21hcnQgYWJvdXQgd2hlcmUgdGhlIHRlc3Qg
aXMgbG9jYXRlZAogICAgICAgICAgICAgaWYgKGN1cnJlbnREaXIuZGlyTmFtZSgpID09IFFMYXRp
bjFTdHJpbmcoIkxheW91dFRlc3RzIikpCi0gICAgICAgICAgICAgICAgZmkgPSBRRmlsZUluZm8o
Y3VycmVudERpciwgbGluZS5yZXBsYWNlKFFSZWdFeHAoIi4qP0xheW91dFRlc3RzLyguKikiKSwg
IlxcMSIpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCFsaW5lLmNvbnRhaW5zKFFMYXRpbjFTdHJp
bmcoIkxheW91dFRlc3RzIikpKQotICAgICAgICAgICAgICAgIGZpID0gUUZpbGVJbmZvKGN1cnJl
bnREaXIsIGxpbmUucHJlcGVuZChRTGF0aW4xU3RyaW5nKCJMYXlvdXRUZXN0cy8iKSkpOworICAg
ICAgICAgICAgICAgIGZpID0gUUZpbGVJbmZvKGN1cnJlbnREaXIsIHBhdGhPclVSTC5yZXBsYWNl
KFFSZWdFeHAoIi4qP0xheW91dFRlc3RzLyguKikiKSwgIlxcMSIpKTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKCFwYXRoT3JVUkwuY29udGFpbnMoUUxhdGluMVN0cmluZygiTGF5b3V0VGVzdHMiKSkp
CisgICAgICAgICAgICAgICAgZmkgPSBRRmlsZUluZm8oY3VycmVudERpciwgcGF0aE9yVVJMLnBy
ZXBlbmQoUUxhdGluMVN0cmluZygiTGF5b3V0VGVzdHMvIikpKTsKIAogICAgICAgICAgICAgaWYg
KCFmaS5leGlzdHMoKSkgewogICAgICAgICAgICAgICAgIGVtaXQgcmVhZHkoKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwCmluZGV4IGY0MDJhMDJjYTM2MmM1
Mjc5ZGU1YTVjOGMxZTBjZTlkZjM2MmFiYWQuLjMxMjQzMGQ1Njk4OTU0OGJjM2VjYWQxM2Y4ZGYx
ODMwOTZjMTdjODUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVu
ZGVyVHJlZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVl
LmNwcApAQCAtODAsNyArODAsNyBAQCBzdGF0aWMgTFBDV1NUUiBmb250c0Vudmlyb25tZW50VmFy
aWFibGUgPSBMIldFQktJVF9URVNURk9OVFMiOwogY29uc3QgTFBDV1NUUiBrRHVtcFJlbmRlclRy
ZWVDbGFzc05hbWUgPSBMIkR1bXBSZW5kZXJUcmVlV2luZG93IjsKIAogc3RhdGljIGJvb2wgZHVt
cFRyZWUgPSB0cnVlOwotc3RhdGljIGJvb2wgZHVtcFBpeGVsczsKK3N0YXRpYyBib29sIGR1bXBQ
aXhlbHNGb3JDdXJyZW50VGVzdDsKIHN0YXRpYyBib29sIGR1bXBBbGxQaXhlbHM7CiBzdGF0aWMg
Ym9vbCBwcmludFNlcGFyYXRvcnM7CiBzdGF0aWMgYm9vbCBsZWFrQ2hlY2tpbmcgPSBmYWxzZTsK
QEAgLTc1OSw3ICs3NTksNyBAQCB2b2lkIGR1bXAoKQogICAgICAgICBmZmx1c2goc3RkZXJyKTsK
ICAgICB9CiAKLSAgICBpZiAoZHVtcFBpeGVscworICAgIGlmIChkdW1wUGl4ZWxzRm9yQ3VycmVu
dFRlc3QKICAgICAgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5nZW5lcmF0ZVBpeGVsUmVzdWx0
cygpCiAgICAgICYmICFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBET01Bc1dlYkFyY2hpdmUo
KQogICAgICAmJiAhZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wU291cmNlQXNXZWJBcmNoaXZl
KCkpCkBAIC05NDgsMjAgKzk0OCwxNCBAQCBzdGF0aWMgdm9pZCBzaXplV2ViVmlld0ZvckN1cnJl
bnRUZXN0KCkKICAgICA6OlNldFdpbmRvd1Bvcyh3ZWJWaWV3V2luZG93LCAwLCAwLCAwLCB3aWR0
aCwgaGVpZ2h0LCBTV1BfTk9NT1ZFKTsKIH0KIAotc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBz
dHJpbmcmIHRlc3RQYXRoT3JVUkwpCitzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYg
aW5wdXRMaW5lKQogeworICAgIFRlc3RDb21tYW5kIGNvbW1hbmQgPSBwYXJzZUlucHV0TGluZShp
bnB1dExpbmUpOworICAgIGNvbnN0IHN0cmluZyYgcGF0aE9yVVJMID0gY29tbWFuZC5wYXRoT3JV
Ukw7CisgICAgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gY29tbWFuZC5zaG91bGREdW1wUGl4
ZWxzOworCiAgICAgc3RhdGljIEJTVFIgbWV0aG9kQlN0ciA9IFN5c0FsbG9jU3RyaW5nKFRFWFQo
IkdFVCIpKTsKIAotICAgIC8vIExvb2sgZm9yICInIiBhcyBhIHNlcGFyYXRvciBiZXR3ZWVuIHRo
ZSBwYXRoIG9yIFVSTCwgYW5kIHRoZSBwaXhlbCBkdW1wIGhhc2ggdGhhdCBmb2xsb3dzLgotICAg
IHN0cmluZyBwYXRoT3JVUkwodGVzdFBhdGhPclVSTCk7Ci0gICAgc3RyaW5nIGV4cGVjdGVkUGl4
ZWxIYXNoOwotICAgIAotICAgIHNpemVfdCBzZXBhcmF0b3JQb3MgPSBwYXRoT3JVUkwuZmluZCgi
JyIpOwotICAgIGlmIChzZXBhcmF0b3JQb3MgIT0gc3RyaW5nOjpucG9zKSB7Ci0gICAgICAgIHBh
dGhPclVSTCA9IHN0cmluZyh0ZXN0UGF0aE9yVVJMLCAwLCBzZXBhcmF0b3JQb3MpOwotICAgICAg
ICBleHBlY3RlZFBpeGVsSGFzaCA9IHN0cmluZyh0ZXN0UGF0aE9yVVJMLCBzZXBhcmF0b3JQb3Mg
KyAxKTsKLSAgICB9Ci0gICAgCiAgICAgQlNUUiB1cmxCU3RyOwogIAogICAgIENGU3RyaW5nUmVm
IHN0ciA9IENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmcoMCwgcGF0aE9yVVJMLmNfc3RyKCksIGtD
RlN0cmluZ0VuY29kaW5nV2luZG93c0xhdGluMSk7CkBAIC05ODMsNyArOTc3LDcgQEAgc3RhdGlj
IHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIHRlc3RQYXRoT3JVUkwpCiAKICAgICBDRlJlbGVh
c2UodXJsKTsKIAotICAgIDo6Z0xheW91dFRlc3RDb250cm9sbGVyID0gTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmNyZWF0ZShwYXRoT3JVUkwsIGV4cGVjdGVkUGl4ZWxIYXNoKTsKKyAgICA6OmdMYXlv
dXRUZXN0Q29udHJvbGxlciA9IExheW91dFRlc3RDb250cm9sbGVyOjpjcmVhdGUocGF0aE9yVVJM
LCBjb21tYW5kLmV4cGVjdGVkUGl4ZWxIYXNoKTsKICAgICBkb25lID0gZmFsc2U7CiAgICAgdG9w
TG9hZGluZ0ZyYW1lID0gMDsKIApAQCAtMTMzNywxMSArMTMzMSw2IEBAIGV4dGVybiAiQyIgX19k
ZWNsc3BlYyhkbGxleHBvcnQpIGludCBXSU5BUEkgZGxsTGF1bmNoZXJFbnRyeVBvaW50KGludCBh
cmdjLCBjb25zCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlm
ICghc3RyaWNtcChhcmd2W2ldLCAiLS1waXhlbC10ZXN0cyIpKSB7Ci0gICAgICAgICAgICBkdW1w
UGl4ZWxzID0gdHJ1ZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KICAgICAg
ICAgaWYgKCFzdHJpY21wKGFyZ3ZbaV0sICItLWNvbXBsZXgtdGV4dCIpKSB7CiAgICAgICAgICAg
ICBmb3JjZUNvbXBsZXhUZXh0ID0gdHJ1ZTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLnZjcHJvaiBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS52Y3Byb2oKaW5kZXggNDg0M2Mz
OTBlN2M2YjUyZTI0ZTJiMzc3MDY1NDc4ZDA3NmMwOTdmYS4uN2UyNDJhMWNkZTRhMmZjY2MxYTI0
NzFiNjE2OWIzZTMzZWFkY2RjZCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L0R1bXBSZW5kZXJUcmVlLnZjcHJvagorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVt
cFJlbmRlclRyZWUudmNwcm9qCkBAIC01NjMsNiArNTYzLDEwIEBACiAJCQk+CiAJCTwvRmlsZT4K
IAkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cRHVtcFJlbmRlclRyZWVDb21tb24uY3BwIgor
CQkJPgorCQk8L0ZpbGU+CisJCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXER1bXBSZW5kZXJU
cmVlUHJlZml4LmgiCiAJCQk+CiAJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL3dzY3JpcHQgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93c2NyaXB0CmluZGV4IDY0NWM3
ZDY0MTU5OGFmZTJmMTRlMTYzYWQ0Y2NlZjI3YzUyOGI3NjQuLmIzMjkyOTQ1MGIyOGFhODg5MmMz
M2UzYmUwZDk2ZjBlNmUxMTM0MTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dz
Y3JpcHQKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd3NjcmlwdApAQCAtNDAsNiArNDAsNyBA
QCBpbmNsdWRlX3BhdGhzID0gWwogICAgICAgICAgICAgICAgICd3eCcKICAgICAgICAgICAgICAg
ICBdCiBzb3VyY2VzID0gWworICAgICAgICAgICAgJ0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcCcs
CiAgICAgICAgICAgICAnTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwJywKICAgICAgICAgICAgICdX
b3JrUXVldWUuY3BwJywKICAgICAgICAgICAgICd3eC9EdW1wUmVuZGVyVHJlZVd4LmNwcCcsCmRp
ZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93eC9EdW1wUmVuZGVyVHJlZVd4LmNwcCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0R1bXBSZW5kZXJUcmVlV3guY3BwCmluZGV4IDMxYWRk
MTFhMmViNzRkMWY0ZDgzMjk0NzlmNDE5ZjEwN2ZmYmE4OGYuLjQ1Yjg1MmQ4OGFiOWJkYTI5MWZi
MWVkMjc3YWNhNzUxZGZkMzUwOTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3d4
L0R1bXBSZW5kZXJUcmVlV3guY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0R1bXBS
ZW5kZXJUcmVlV3guY3BwCkBAIC01MCw3ICs1MCw3IEBACiB2b2xhdGlsZSBib29sIGRvbmUgPSB0
cnVlOwogdm9sYXRpbGUgYm9vbCBub3RpZmllZCA9IGZhbHNlOwogc3RhdGljIGJvb2wgcHJpbnRT
ZXBhcmF0b3JzID0gdHJ1ZTsKLXN0YXRpYyBpbnQgZHVtcFBpeGVsczsKK3N0YXRpYyBpbnQgZHVt
cFBpeGVsc0ZvckN1cnJlbnRUZXN0Owogc3RhdGljIGludCBkdW1wVHJlZSA9IDE7CiB0aW1lX3Qg
c3RhcnRUaW1lOyAvLyB0byBkZXRlY3QgdGltZW91dHMgLyBmYWlsZWQgdGVzdHMKIApAQCAtMjAz
LDcgKzIwMyw3IEBAIHZvaWQgZHVtcCgpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoZHVt
cFBpeGVscworICAgIGlmIChkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QKICAgICAgICAgJiYgZ0xh
eW91dFRlc3RDb250cm9sbGVyLT5nZW5lcmF0ZVBpeGVsUmVzdWx0cygpCiAgICAgICAgICYmICFn
TGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBET01Bc1dlYkFyY2hpdmUoKQogICAgICAgICAmJiAh
Z0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wU291cmNlQXNXZWJBcmNoaXZlKCkpIHsKQEAgLTIx
OCwyNiArMjE4LDIxIEBAIHZvaWQgZHVtcCgpCiAgICAgZ0xheW91dFRlc3RDb250cm9sbGVyLmNs
ZWFyKCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgd3hTdHJpbmcgdGVzdFBhdGhP
clVSTCkKK3N0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgd3hTdHJpbmcgaW5wdXRMaW5lKQogewog
ICAgIGRvbmUgPSBmYWxzZTsKICAgICB0aW1lKCZzdGFydFRpbWUpOwotICAgIHN0cmluZyBwYXRo
T3JVUkxTdHJpbmcodGVzdFBhdGhPclVSTC5jaGFyX3N0cigpKTsKLSAgICBzdHJpbmcgcGF0aE9y
VVJMKHBhdGhPclVSTFN0cmluZyk7Ci0gICAgc3RyaW5nIGV4cGVjdGVkUGl4ZWxIYXNoOwotCi0g
ICAgc2l6ZV90IHNlcGFyYXRvclBvcyA9IHBhdGhPclVSTC5maW5kKCInIik7Ci0gICAgaWYgKHNl
cGFyYXRvclBvcyAhPSBzdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgcGF0aE9yVVJMID0gc3RyaW5n
KHBhdGhPclVSTFN0cmluZywgMCwgc2VwYXJhdG9yUG9zKTsKLSAgICAgICAgZXhwZWN0ZWRQaXhl
bEhhc2ggPSBzdHJpbmcocGF0aE9yVVJMU3RyaW5nLCBzZXBhcmF0b3JQb3MgKyAxKTsKLSAgICB9
CisKKyAgICBUZXN0Q29tbWFuZCBjb21tYW5kID0gcGFyc2VJbnB1dExpbmUoc3RkOjpzdHJpbmco
aW5wdXRMaW5lLlRvQXNjaWkoKSkpOworICAgIHN0cmluZyYgcGF0aE9yVVJMID0gY29tbWFuZC5w
YXRoT3JVUkw7CisgICAgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gY29tbWFuZC5zaG91bGRE
dW1wUGl4ZWxzOwogICAgIAogICAgIC8vIENVUkwgaXNuJ3QgaGFwcHkgaWYgd2UgZG9uJ3QgaGF2
ZSBhIHByb3RvY29sLgogICAgIHNpemVfdCBodHRwID0gcGF0aE9yVVJMLmZpbmQoImh0dHA6Ly8i
KTsKICAgICBpZiAoaHR0cCA9PSBzdHJpbmc6Om5wb3MpCiAgICAgICAgIHBhdGhPclVSTC5pbnNl
cnQoMCwgImZpbGU6Ly8iKTsKICAgICAKLSAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXIgPSBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6Y3JlYXRlKHBhdGhPclVSTCwgZXhwZWN0ZWRQaXhlbEhhc2gpOwor
ICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlciA9IExheW91dFRlc3RDb250cm9sbGVyOjpjcmVhdGUo
cGF0aE9yVVJMLCBjb21tYW5kLmV4cGVjdGVkUGl4ZWxIYXNoKTsKICAgICBpZiAoIWdMYXlvdXRU
ZXN0Q29udHJvbGxlcikgewogICAgICAgICB3eFRoZUFwcC0+RXhpdE1haW5Mb29wKCk7CiAgICAg
fQpAQCAtMjgyLDExICsyNzcsNiBAQCBib29sIE15QXBwOjpPbkluaXQoKQogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICghb3B0aW9uLkNtcE5v
Q2FzZShfVCgiLS1waXhlbC10ZXN0cyIpKSkgewotICAgICAgICAgICAgZHVtcFBpeGVscyA9IHRy
dWU7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICAKICAgICAgICAg
aWYgKCFvcHRpb24uQ21wTm9DYXNlKF9UKCItLXRyZWUiKSkpIHsKICAgICAgICAgICAgIGR1bXBU
cmVlID0gdHJ1ZTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzIzLDcgKzMxMyw3IEBAIGJv
b2wgTXlBcHA6Ok9uSW5pdCgpCiAgICAgICAgIH0KICAgICAKICAgICB9IGVsc2UgewotICAgICAg
ICBwcmludFNlcGFyYXRvcnMgPSAob3B0aW5kIDwgYXJnYy0xIHx8IChkdW1wUGl4ZWxzICYmIGR1
bXBUcmVlKSk7CisgICAgICAgIHByaW50U2VwYXJhdG9ycyA9IChvcHRpbmQgPCBhcmdjIC0gMSB8
fCAoZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ICYmIGR1bXBUcmVlKSk7CiAgICAgICAgIGZvciAo
aW50IGkgPSBvcHRpbmQ7IGkgIT0gYXJnYzsgKytpKSB7CiAgICAgICAgICAgICBydW5UZXN0KHd4
VGhlQXBwLT5hcmd2WzFdKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvR05VbWFrZWZp
bGUuYW0gYi9Ub29scy9HTlVtYWtlZmlsZS5hbQppbmRleCBkZjlhNzFmMThmOTU4MDdlZjRmZDZm
N2Q3YzI3ZDMxMWZhMzIxYWMyLi5mODVhOWQxMmViNzQ1NDIzMTUyMjUxMTA2MmVlMjdmNWE0MDg5
ZDQyIDEwMDY0NAotLS0gYS9Ub29scy9HTlVtYWtlZmlsZS5hbQorKysgYi9Ub29scy9HTlVtYWtl
ZmlsZS5hbQpAQCAtMTA2LDYgKzEwNiw3IEBAIGVuZGlmCiAKIFByb2dyYW1zX0R1bXBSZW5kZXJU
cmVlX1NPVVJDRVMgPSBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuaCBc
CisJVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWVDb21tb24uY3BwIFwKIAlUb29s
cy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZVByZWZpeC5oIFwKIAlUb29scy9EdW1wUmVu
ZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAgXAogCVRvb2xzL0R1bXBSZW5kZXJU
cmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmggXApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy9vbGQtcnVuLXdlYmtpdC10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvb2xkLXJ1bi13ZWJraXQtdGVz
dHMKaW5kZXggMDk0NDNjODdjMDJmMWU4Y2Y1YmRlNmQxYjA0NWM0ZGI5YmFiMDg4Mi4uZjA5MWMx
OWJhYWI3M2ZlNWVmNDJjNTE2YmFjYzE0NTEzNmYyZGMyMCAxMDA3NTUKLS0tIGEvVG9vbHMvU2Ny
aXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0cworKysgYi9Ub29scy9TY3JpcHRzL29sZC1ydW4td2Vi
a2l0LXRlc3RzCkBAIC03NDgsMTIgKzc0OCwxNiBAQCBmb3IgbXkgJHRlc3QgKEB0ZXN0cykgewog
ICAgIHByaW50ICR0ZXN0c19ydW5fZmggIiR0ZXN0XG4iOwogCiAgICAgIyBUcnkgdG8gcmVhZCBl
eHBlY3RlZCBoYXNoIGZpbGUgZm9yIHBpeGVsIHRlc3RzCi0gICAgbXkgJHN1ZmZpeEV4cGVjdGVk
SGFzaCA9ICIiOwotICAgIGlmICgkcGl4ZWxUZXN0cyAmJiAhJHJlc2V0UmVzdWx0cykgewotICAg
ICAgICBteSAkZXhwZWN0ZWRQaXhlbERpciA9IGV4cGVjdGVkRGlyZWN0b3J5Rm9yVGVzdCgkYmFz
ZSwgMCwgInBuZyIpOwotICAgICAgICBpZiAobXkgJGV4cGVjdGVkSGFzaCA9IHJlYWRDaGVja3N1
bUZyb21QbmcoRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkZXhwZWN0ZWRQaXhlbERpciwgIiRiYXNlLSRl
eHBlY3RlZFRhZy5wbmciKSkpIHsKLSAgICAgICAgICAgICMgRm9ybWF0IGV4cGVjdGVkIGhhc2gg
aW50byBhIHN1ZmZpeCBzdHJpbmcgdGhhdCBpcyBhcHBlbmRlZCB0byB0aGUgcGF0aCAvIFVSTCBw
YXNzZWQgdG8gRFJULgotICAgICAgICAgICAgJHN1ZmZpeEV4cGVjdGVkSGFzaCA9ICInJGV4cGVj
dGVkSGFzaCI7CisgICAgbXkgJHN1ZmZpeFBpeGVsVGVzdCA9ICIiOworICAgIGlmICgkcGl4ZWxU
ZXN0cykgeworICAgICAgICAjIDogaXMgdGhlIHNlcGFyYXRvciBiZXR3ZWVuIGFyZ3VtZW50cy4K
KyAgICAgICAgJHN1ZmZpeFBpeGVsVGVzdCA9ICI6LS1waXhlbC10ZXN0IjsKKyAgICAgICAgaWYg
KCEkcmVzZXRSZXN1bHRzKSB7CisgICAgICAgICAgICBteSAkZXhwZWN0ZWRQaXhlbERpciA9IGV4
cGVjdGVkRGlyZWN0b3J5Rm9yVGVzdCgkYmFzZSwgMCwgInBuZyIpOworICAgICAgICAgICAgaWYg
KG15ICRleHBlY3RlZEhhc2ggPSByZWFkQ2hlY2tzdW1Gcm9tUG5nKEZpbGU6OlNwZWMtPmNhdGZp
bGUoJGV4cGVjdGVkUGl4ZWxEaXIsICIkYmFzZS0kZXhwZWN0ZWRUYWcucG5nIikpKSB7CisgICAg
ICAgICAgICAgICAgIyBGb3JtYXQgZXhwZWN0ZWQgaGFzaCBpbnRvIGEgc3VmZml4IHN0cmluZyB0
aGF0IGlzIGFwcGVuZGVkIHRvIHRoZSBwYXRoIC8gVVJMIHBhc3NlZCB0byBEUlQuCisgICAgICAg
ICAgICAgICAgJHN1ZmZpeFBpeGVsVGVzdCA9ICI6LS1waXhlbC10ZXN0OiRleHBlY3RlZEhhc2gi
OworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC03ODksMTEgKzc5MywxMSBA
QCBmb3IgbXkgJHRlc3QgKEB0ZXN0cykgewogICAgICAgICB9IGVsc2lmICgkdGVzdCAhfiAvXmh0
dHBcL3Rlc3RzXC9sb2NhbFwvLyAmJiAkdGVzdCAhfiAvXmh0dHBcL3Rlc3RzXC9zc2xcLy8pIHsK
ICAgICAgICAgICAgIG15ICRwYXRoID0gY2Fub25wYXRoKCR0ZXN0KTsKICAgICAgICAgICAgICRw
YXRoID1+IHMvXmh0dHBcL3Rlc3RzXC8vLzsKLSAgICAgICAgICAgIHByaW50IE9VVCAiaHR0cDov
LzEyNy4wLjAuMTokaHR0cGRQb3J0LyRwYXRoJHN1ZmZpeEV4cGVjdGVkSGFzaFxuIjsKKyAgICAg
ICAgICAgIHByaW50IE9VVCAiaHR0cDovLzEyNy4wLjAuMTokaHR0cGRQb3J0LyRwYXRoJHN1ZmZp
eFBpeGVsVGVzdFxuIjsKICAgICAgICAgfSBlbHNpZiAoJHRlc3QgPX4gL15odHRwXC90ZXN0c1wv
c3NsXC8vKSB7CiAgICAgICAgICAgICBteSAkcGF0aCA9IGNhbm9ucGF0aCgkdGVzdCk7CiAgICAg
ICAgICAgICAkcGF0aCA9fiBzL15odHRwXC90ZXN0c1wvLy87Ci0gICAgICAgICAgICBwcmludCBP
VVQgImh0dHBzOi8vMTI3LjAuMC4xOiRodHRwZFNTTFBvcnQvJHBhdGgkc3VmZml4RXhwZWN0ZWRI
YXNoXG4iOworICAgICAgICAgICAgcHJpbnQgT1VUICJodHRwczovLzEyNy4wLjAuMTokaHR0cGRT
U0xQb3J0LyRwYXRoJHN1ZmZpeFBpeGVsVGVzdFxuIjsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIG15ICR0ZXN0UGF0aCA9ICIkdGVzdERpcmVjdG9yeS8kdGVzdCI7CiAgICAgICAgICAg
ICBpZiAoaXNDeWd3aW4oKSkgewpAQCAtODAxLDcgKzgwNSw3IEBAIGZvciBteSAkdGVzdCAoQHRl
c3RzKSB7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICR0ZXN0UGF0aCA9
IGNhbm9ucGF0aCgkdGVzdFBhdGgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJpbnQg
T1VUICIkdGVzdFBhdGgkc3VmZml4RXhwZWN0ZWRIYXNoXG4iOworICAgICAgICAgICAgcHJpbnQg
T1VUICIkdGVzdFBhdGgkc3VmZml4UGl4ZWxUZXN0XG4iOwogICAgICAgICB9CiAgICAgfSBlbHNl
IHsKICAgICAgICAgbXkgJHRlc3RQYXRoID0gIiR0ZXN0RGlyZWN0b3J5LyR0ZXN0IjsKQEAgLTgx
MCw3ICs4MTQsNyBAQCBmb3IgbXkgJHRlc3QgKEB0ZXN0cykgewogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgJHRlc3RQYXRoID0gY2Fub25wYXRoKCR0ZXN0UGF0aCk7CiAgICAgICAgIH0K
LSAgICAgICAgcHJpbnQgT1VUICIkdGVzdFBhdGgkc3VmZml4RXhwZWN0ZWRIYXNoXG4iIGlmIGRl
ZmluZWQgJHRlc3RQYXRoOworICAgICAgICBwcmludCBPVVQgIiR0ZXN0UGF0aCRzdWZmaXhQaXhl
bFRlc3RcbiIgaWYgZGVmaW5lZCAkdGVzdFBhdGg7CiAgICAgfQogCiAgICAgIyBEdW1wUmVuZGVy
VHJlZSBpcyBleHBlY3RlZCB0byBkdW1wIHR3byAiYmxvY2tzIiB0byBzdGRvdXQgZm9yIGVhY2gg
dGVzdC4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvYmFzZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFz
ZS5weQppbmRleCBhZDcwZjA0MmRlOWVjYjYwMDYzYmVhNmY1MGMyODViZjllZmQ5YzEyLi45NDIx
NTYyNGZlMjdlYTQyNWFhNzNlODkxNTc3Y2M1ZTZlOTkwZTI5IDEwMDc1NQotLS0gYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CkBAIC0xMjc3LDIxICsxMjc3
LDkgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICAgICAgICAgIHJldHVybiBzdWl0ZS5h
cmdzCiAgICAgICAgIHJldHVybiBbXQogCi0gICAgZGVmIHN1cHBvcnRzX3N3aXRjaGluZ19waXhl
bF90ZXN0c19wZXJfdGVzdChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd3ZWJr
aXRfdGVzdF9ydW5uZXInKToKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVy
biBzZWxmLl9zdXBwb3J0c19zd2l0Y2hpbmdfcGl4ZWxfdGVzdHNfcGVyX3Rlc3QoKQotCi0gICAg
ZGVmIF9zdXBwb3J0c19zd2l0Y2hpbmdfcGl4ZWxfdGVzdHNfcGVyX3Rlc3Qoc2VsZik6Ci0gICAg
ICAgICMgRklYTUU6IGFsbCBwb3J0cyBzaG91bGQgc3VwcG9ydCBpdC4KLSAgICAgICAgcmV0dXJu
IEZhbHNlCi0KICAgICBkZWYgc2hvdWxkX3J1bl9hc19waXhlbF90ZXN0KHNlbGYsIHRlc3RfaW5w
dXQpOgogICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0czoKICAgICAgICAg
ICAgIHJldHVybiBGYWxzZQotICAgICAgICBpZiBub3Qgc2VsZi5zdXBwb3J0c19zd2l0Y2hpbmdf
cGl4ZWxfdGVzdHNfcGVyX3Rlc3QoKToKLSAgICAgICAgICAgICMgQ2Fubm90IGRvIG1vcmUgZmls
dGVyaW5nIHdpdGhvdXQgdGhpcy4KLSAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIGlm
IHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdF9kaXJlY3RvcmllczoKICAgICAgICAgICAgIHJldHVy
biBhbnkodGVzdF9pbnB1dC50ZXN0X25hbWUuc3RhcnRzd2l0aChkaXJlY3RvcnkpIGZvciBkaXJl
Y3RvcnkgaW4gc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0X2RpcmVjdG9yaWVzKQogICAgICAgICBy
ZXR1cm4gc2VsZi5fc2hvdWxkX3J1bl9hc19waXhlbF90ZXN0KHRlc3RfaW5wdXQpCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlci5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5CmluZGV4
IDc4MTgyM2I4ZDY3MGE2ZWI4ZTUyZTA3NjhiZTY2NGIxMWQ2MzAzM2MuLjJlYjFlMTRiNTJiY2Q3
MjM1ZjM1NWMxYTk3NDA2ODZmOTViY2M4ZDYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5CkBAIC0yOTMsOCArMjkzLDYgQEAgY2xh
c3MgRHJpdmVyKG9iamVjdCk6CiAKICAgICAgICAgY21kLmV4dGVuZChzZWxmLl9wb3J0LmdldF9v
cHRpb24oJ2FkZGl0aW9uYWxfZHJ0X2ZsYWcnLCBbXSkpCiAKLSAgICAgICAgaWYgcGl4ZWxfdGVz
dHMgYW5kIG5vdCBzZWxmLl9wb3J0LnN1cHBvcnRzX3N3aXRjaGluZ19waXhlbF90ZXN0c19wZXJf
dGVzdCgpOgotICAgICAgICAgICAgY21kLmFwcGVuZCgnLS1waXhlbC10ZXN0cycpCiAgICAgICAg
IGNtZC5leHRlbmQocGVyX3Rlc3RfYXJncykKIAogICAgICAgICBjbWQuYXBwZW5kKCctJykKQEAg
LTMzNiwxMiArMzM0LDkgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgIGFzc2VydCBu
b3QgZHJpdmVyX2lucHV0LmltYWdlX2hhc2ggb3IgZHJpdmVyX2lucHV0LnNob3VsZF9ydW5fcGl4
ZWxfdGVzdAogCiAgICAgICAgIGlmIGRyaXZlcl9pbnB1dC5zaG91bGRfcnVuX3BpeGVsX3Rlc3Q6
Ci0gICAgICAgICAgICBpZiBzZWxmLl9wb3J0LnN1cHBvcnRzX3N3aXRjaGluZ19waXhlbF90ZXN0
c19wZXJfdGVzdCgpOgotICAgICAgICAgICAgICAgICMgV2UgZGlkIG5vdCBzdGFydCB0aGUgZHJp
dmVyIHdpdGggLS1waXhlbC10ZXN0cywgaW5zdGVhZCB3ZSBzcGVjaWZ5IGl0IHBlciB0ZXN0Lgot
ICAgICAgICAgICAgICAgICMgIiciIGlzIHRoZSBzZXBhcmF0b3Igb2YgY29tbWFuZCBmaWVsZHMu
Ci0gICAgICAgICAgICAgICAgY29tbWFuZCArPSAiJyIgKyAnLS1waXhlbC10ZXN0JworICAgICAg
ICAgICAgY29tbWFuZCArPSAiOi0tcGl4ZWwtdGVzdCIKICAgICAgICAgaWYgZHJpdmVyX2lucHV0
LmltYWdlX2hhc2g6Ci0gICAgICAgICAgICBjb21tYW5kICs9ICInIiArIGRyaXZlcl9pbnB1dC5p
bWFnZV9oYXNoCisgICAgICAgICAgICBjb21tYW5kICs9ICI6IiArIGRyaXZlcl9pbnB1dC5pbWFn
ZV9oYXNoCiAgICAgICAgIHJldHVybiBjb21tYW5kICsgIlxuIgogCiAgICAgZGVmIF9yZWFkX2Zp
cnN0X2Jsb2NrKHNlbGYsIGRlYWRsaW5lKToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcXQucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L3F0LnB5CmluZGV4IGUyMzljN2UzYWFmNmY2MDJiMGMzNTFlYzIyZGNm
YTY4MDY0ZWEyNjkuLjZlN2IwOTg4ZDVhNzdlZmM1ZmMzNzJmYTc1MTY3ODM0MDBhNjlmMDggMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcXQucHkK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9xdC5weQpAQCAt
MTg0LDYgKzE4NCwzIEBAIGNsYXNzIFF0UG9ydChQb3J0KToKICAgICAgICAgICAgIHJldHVybiBG
YWxzZQogICAgICAgICByZXR1cm4gcmVzdWx0CiAKLSAgICBkZWYgX3N1cHBvcnRzX3N3aXRjaGlu
Z19waXhlbF90ZXN0c19wZXJfdGVzdChzZWxmKToKLSAgICAgICAgcmV0dXJuIFRydWUKLQpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5CmluZGV4
IDU3MTQ2NjFmZDIwMzY3NjgzOWQ2Yzc2ZjQ3MzViZWM4MTMyYjg5YjguLjBjZDE3MWYzYmNhNmFi
ZWJkYjIxYjk4ZTJhNDVjMjFhMTRhOTAxMTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkKQEAgLTUxMywxMCArNTEzLDYgQEAgY2xhc3Mg
VGVzdFBvcnQoUG9ydCk6CiAgICAgICAgICAgICBWaXJ0dWFsVGVzdFN1aXRlKCd2aXJ0dWFsL3Nr
aXBwZWQnLCAnZmFpbHVyZXMvZXhwZWN0ZWQnLCBbJy0tdmlydHVhbC1hcmcyJ10pLAogICAgICAg
ICBdCiAKLSAgICBkZWYgc3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Blcl90ZXN0KHNl
bGYpOgotICAgICAgICAjIExldCBpdCB0cnVlIHNvIHdlIGNhbiB0ZXN0IHRoZSAtLXBpeGVsLXRl
c3QtZGlyZWN0b3J5IG9wdGlvbi4KLSAgICAgICAgcmV0dXJuIFRydWUKLQogCiBjbGFzcyBUZXN0
RHJpdmVyKERyaXZlcik6CiAgICAgIiIiVGVzdC9EdW1teSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUg
RHVtcFJlbmRlclRyZWUgaW50ZXJmYWNlLiIiIgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RD
b250cm9sbGVyLmNwcAppbmRleCBkMDIzMjk5MjczMWQxYmM5NzEyNjhmYzM5MzFmNGI3MGFiMzY3
YWM3Li5mZjBlYjU0Zjc4ZmZkMDM5NDJkZTRmZGNlZDg2Y2IwNjI0MmNlN2FhIDEwMDY0NAotLS0g
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcApAQCAtMzUsNyArMzUsMTEgQEAKICNp
bmNsdWRlIDxXZWJLaXQyL1dLUGFnZVByaXZhdGUuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLUHJl
ZmVyZW5jZXNQcml2YXRlLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1JldGFpblB0ci5oPgorI2lu
Y2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxjc3RkaW8+CisjaW5jbHVkZSA8Y3R5cGUuaD4K
KyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTY3LDggKzcxLDcgQEAgVGVzdENv
bnRyb2xsZXImIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKQogfQogCiBUZXN0Q29udHJvbGxlcjo6
VGVzdENvbnRyb2xsZXIoaW50IGFyZ2MsIGNvbnN0IGNoYXIqIGFyZ3ZbXSkKLSAgICA6IG1fZHVt
cFBpeGVsc0ZvckFsbFRlc3RzKGZhbHNlKQotICAgICwgbV92ZXJib3NlKGZhbHNlKQorICAgIDog
bV92ZXJib3NlKGZhbHNlKQogICAgICwgbV9wcmludFNlcGFyYXRvcnMoZmFsc2UpCiAgICAgLCBt
X3VzaW5nU2VydmVyTW9kZShmYWxzZSkKICAgICAsIG1fZ2NCZXR3ZWVuVGVzdHMoZmFsc2UpCkBA
IC0yNjcsMTAgKzI3MCw2IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemUoaW50IGFy
Z2MsIGNvbnN0IGNoYXIqIGFyZ3ZbXSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKGFyZ3VtZW50ID09ICItLXBpeGVsLXRlc3RzIikgewotICAgICAgICAg
ICAgbV9kdW1wUGl4ZWxzRm9yQWxsVGVzdHMgPSB0cnVlOwotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0KICAgICAgICAgaWYgKGFyZ3VtZW50ID09ICItLXZlcmJvc2UiKSB7CiAgICAg
ICAgICAgICBtX3ZlcmJvc2UgPSB0cnVlOwogICAgICAgICAgICAgY29udGludWU7CkBAIC01MDQs
NyArNTAzLDg5IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRW
YWx1ZXMoKQogICAgIHJldHVybiBtX2RvbmVSZXNldHRpbmc7CiB9CiAKLWJvb2wgVGVzdENvbnRy
b2xsZXI6OnJ1blRlc3QoY29uc3QgY2hhciogdGVzdCkKK3N0cnVjdCBUZXN0Q29tbWFuZCB7Cisg
ICAgVGVzdENvbW1hbmQoKSA6IHNob3VsZER1bXBQaXhlbHMoZmFsc2UpIHsgfQorCisgICAgc3Rk
OjpzdHJpbmcgcGF0aE9yVVJMOworICAgIGJvb2wgc2hvdWxkRHVtcFBpeGVsczsKKyAgICBzdGQ6
OnN0cmluZyBleHBlY3RlZFBpeGVsSGFzaDsKK307CisKK2NsYXNzIENvbW1hbmRUb2tlbml6ZXIg
eworcHVibGljOgorICAgIENvbW1hbmRUb2tlbml6ZXIoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0
KQorICAgICAgICA6IG1faW5wdXQoaW5wdXQpCisgICAgICAgICwgbV9wb3NOZXh0U2VwYXJhdG9y
KDApCisgICAgeworICAgICAgICBwdW1wKCk7CisgICAgfQorCisgICAgYm9vbCBoYXNOZXh0KCkg
Y29uc3Q7CisgICAgc3RkOjpzdHJpbmcgbmV4dCgpOworCitwcml2YXRlOgorICAgIHZvaWQgcHVt
cCgpOworICAgIHN0YXRpYyBjb25zdCBjaGFyIGtTZXBhcmF0b3IgPSAnOic7CisgICAgY29uc3Qg
c3RkOjpzdHJpbmcmIG1faW5wdXQ7CisgICAgc3RkOjpzdHJpbmcgbV9uZXh0OworICAgIHNpemVf
dCBtX3Bvc05leHRTZXBhcmF0b3I7Cit9OworCit2b2lkIENvbW1hbmRUb2tlbml6ZXI6OnB1bXAo
KQoreworICAgIGlmIChtX3Bvc05leHRTZXBhcmF0b3IgPT0gc3RkOjpzdHJpbmc6Om5wb3MgfHwg
bV9wb3NOZXh0U2VwYXJhdG9yID09IG1faW5wdXQuc2l6ZSgpKSB7CisgICAgICAgIG1fbmV4dCA9
IHN0ZDo6c3RyaW5nKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2l6ZV90IHN0YXJ0
ID0gbV9wb3NOZXh0U2VwYXJhdG9yID8gbV9wb3NOZXh0U2VwYXJhdG9yICsgMSA6IDA7CisgICAg
bV9wb3NOZXh0U2VwYXJhdG9yID0gbV9pbnB1dC5maW5kKGtTZXBhcmF0b3IsIHN0YXJ0KTsKKyAg
ICBzaXplX3Qgc2l6ZSA9IG1fcG9zTmV4dFNlcGFyYXRvciA9PSBzdGQ6OnN0cmluZzo6bnBvcyA/
IHN0ZDo6c3RyaW5nOjpucG9zIDogbV9wb3NOZXh0U2VwYXJhdG9yIC0gc3RhcnQ7CisgICAgbV9u
ZXh0ID0gc3RkOjpzdHJpbmcobV9pbnB1dCwgc3RhcnQsIHNpemUpOworfQorCitzdGQ6OnN0cmlu
ZyBDb21tYW5kVG9rZW5pemVyOjpuZXh0KCkKK3sKKyAgICBBU1NFUlQoaGFzTmV4dCgpKTsKKwor
ICAgIHN0ZDo6c3RyaW5nIG9sZE5leHQgPSBtX25leHQ7CisgICAgcHVtcCgpOworICAgIHJldHVy
biBvbGROZXh0OworfQorCitib29sIENvbW1hbmRUb2tlbml6ZXI6Omhhc05leHQoKSBjb25zdAor
eworICAgIHJldHVybiBtX25leHQgIT0gc3RkOjpzdHJpbmcoKTsKK30KKworc3RhdGljIHZvaWQg
ZGllKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnB1dExpbmUpCit7CisgICAgZnByaW50ZihzdGRlcnIs
ICJVbmV4cGVjdGVkIGlucHV0IGxpbmU6ICVzXG4iLCBpbnB1dExpbmUuY19zdHIoKSk7CisgICAg
ZXhpdCgxKTsKK30KKworVGVzdENvbW1hbmQgcGFyc2VJbnB1dExpbmUoY29uc3Qgc3RkOjpzdHJp
bmcmIGlucHV0TGluZSkKK3sKKyAgICBUZXN0Q29tbWFuZCByZXN1bHQ7CisgICAgQ29tbWFuZFRv
a2VuaXplciB0b2tlbml6ZXIoaW5wdXRMaW5lKTsKKyAgICBpZiAoIXRva2VuaXplci5oYXNOZXh0
KCkpCisgICAgICAgIGRpZShpbnB1dExpbmUpOworCisgICAgcmVzdWx0LnBhdGhPclVSTCA9IHRv
a2VuaXplci5uZXh0KCk7CisgICAgaWYgKCF0b2tlbml6ZXIuaGFzTmV4dCgpKQorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworCisgICAgc3RkOjpzdHJpbmcgYXJnID0gdG9rZW5pemVyLm5leHQoKTsK
KyAgICBpZiAoYXJnICE9IHN0ZDo6c3RyaW5nKCItcCIpICYmIGFyZyAhPSBzdGQ6OnN0cmluZygi
LS1waXhlbC10ZXN0IikpCisgICAgICAgIGRpZShpbnB1dExpbmUpOworICAgIHJlc3VsdC5zaG91
bGREdW1wUGl4ZWxzID0gdHJ1ZTsKKworICAgIGlmICh0b2tlbml6ZXIuaGFzTmV4dCgpKQorICAg
ICAgICByZXN1bHQuZXhwZWN0ZWRQaXhlbEhhc2ggPSB0b2tlbml6ZXIubmV4dCgpOworCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBUZXN0Q29udHJvbGxlcjo6cnVuVGVzdChjb25zdCBj
aGFyKiBpbnB1dExpbmUpCiB7CiAgICAgaWYgKCFyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVz
KCkpIHsKICNpZiBQTEFURk9STShNQUMpCkBAIC01MTcsMzIgKzU5OCwxMyBAQCBib29sIFRlc3RD
b250cm9sbGVyOjpydW5UZXN0KGNvbnN0IGNoYXIqIHRlc3QpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKLSAgICBib29sIGR1bXBQaXhlbHNUZXN0ID0gbV9kdW1wUGl4ZWxzRm9yQWxs
VGVzdHM7Ci0gICAgc3RkOjpzdHJpbmcgY29tbWFuZCh0ZXN0KTsKLSAgICBzdGQ6OnN0cmluZyBw
YXRoT3JVUkwgPSBjb21tYW5kOwotICAgIHN0ZDo6c3RyaW5nIGV4cGVjdGVkUGl4ZWxIYXNoOwot
ICAgIHNpemVfdCBmaXJzdFNlcGFyYXRvclBvcyA9IGNvbW1hbmQuZmluZF9maXJzdF9vZignXCcn
KTsKLSAgICBzaXplX3Qgc2Vjb25kU2VwYXJhdG9yUG9zID0gY29tbWFuZC5maW5kX2ZpcnN0X29m
KCdcJycsIGZpcnN0U2VwYXJhdG9yUG9zICsgMSk7Ci0gICAgaWYgKGZpcnN0U2VwYXJhdG9yUG9z
ICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgICAgIHBhdGhPclVSTCA9IHN0ZDo6c3RyaW5n
KGNvbW1hbmQsIDAsIGZpcnN0U2VwYXJhdG9yUG9zKTsKLSAgICAgICAgc2l6ZV90IHBpeGVsSGFz
aFBvcyA9IGZpcnN0U2VwYXJhdG9yUG9zICsgMTsKLQotICAgICAgICAvLyBOUldUIHBhc3NlcyAt
LXBpeGVsLXRlc3QgaWYgd2Ugc2hvdWxkIGR1bXAgcGl4ZWxzIGZvciB0aGUgdGVzdC4KLSAgICAg
ICAgY29uc3Qgc3RkOjpzdHJpbmcgZXhwZWN0ZWRQaXhlbFRlc3RBcmcoIi0tcGl4ZWwtdGVzdCIp
OwotICAgICAgICBzdGQ6OnN0cmluZyBhcmdUZXN0ID0gc3RkOjpzdHJpbmcoY29tbWFuZCwgZmly
c3RTZXBhcmF0b3JQb3MgKyAxLCBleHBlY3RlZFBpeGVsVGVzdEFyZy5zaXplKCkpOwotICAgICAg
ICBpZiAoYXJnVGVzdCA9PSBleHBlY3RlZFBpeGVsVGVzdEFyZykgewotICAgICAgICAgICAgZHVt
cFBpeGVsc1Rlc3QgPSB0cnVlOwotICAgICAgICAgICAgcGl4ZWxIYXNoUG9zID0gc2Vjb25kU2Vw
YXJhdG9yUG9zID09IHN0ZDo6c3RyaW5nOjpucG9zID8gc3RkOjpzdHJpbmc6Om5wb3MgOiBzZWNv
bmRTZXBhcmF0b3JQb3MgKyAxOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwaXhlbEhhc2hQb3Mg
IT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYgcGl4ZWxIYXNoUG9zIDwgY29tbWFuZC5zaXplKCkpCi0g
ICAgICAgICAgICBleHBlY3RlZFBpeGVsSGFzaCA9IHN0ZDo6c3RyaW5nKGNvbW1hbmQsIHBpeGVs
SGFzaFBvcyk7Ci0gICAgfQorICAgIFRlc3RDb21tYW5kIGNvbW1hbmQgPSBwYXJzZUlucHV0TGlu
ZShzdGQ6OnN0cmluZyhpbnB1dExpbmUpKTsKIAogICAgIG1fc3RhdGUgPSBSdW5uaW5nVGVzdDsK
IAotICAgIG1fY3VycmVudEludm9jYXRpb24gPSBhZG9wdFB0cihuZXcgVGVzdEludm9jYXRpb24o
cGF0aE9yVVJMKSk7Ci0gICAgaWYgKGR1bXBQaXhlbHNUZXN0KQotICAgICAgICBtX2N1cnJlbnRJ
bnZvY2F0aW9uLT5zZXRJc1BpeGVsVGVzdChleHBlY3RlZFBpeGVsSGFzaCk7CisgICAgbV9jdXJy
ZW50SW52b2NhdGlvbiA9IGFkb3B0UHRyKG5ldyBUZXN0SW52b2NhdGlvbihjb21tYW5kLnBhdGhP
clVSTCkpOworICAgIGlmIChjb21tYW5kLnNob3VsZER1bXBQaXhlbHMpCisgICAgICAgIG1fY3Vy
cmVudEludm9jYXRpb24tPnNldElzUGl4ZWxUZXN0KGNvbW1hbmQuZXhwZWN0ZWRQaXhlbEhhc2gp
OwogCiAgICAgbV9jdXJyZW50SW52b2NhdGlvbi0+aW52b2tlKCk7CiAgICAgbV9jdXJyZW50SW52
b2NhdGlvbi5jbGVhcigpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
Q29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCmlu
ZGV4IGE5OWUxNmVhODcwMjdjMzRmMDdiODk2MmIwOThjMjMzNGQ5NDIxYmQuLjVlMjBkNjExYjQ2
OWRmMTg3YzM3OGVlNjJlZDBjYWMzMThkYWVkMjEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RDb250cm9sbGVyLmgKQEAgLTEwNCw3ICsxMDQsNiBAQCBwcml2YXRlOgogCiAgICAgT3duUHRy
PFRlc3RJbnZvY2F0aW9uPiBtX2N1cnJlbnRJbnZvY2F0aW9uOwogCi0gICAgYm9vbCBtX2R1bXBQ
aXhlbHNGb3JBbGxUZXN0czsKICAgICBib29sIG1fdmVyYm9zZTsKICAgICBib29sIG1fcHJpbnRT
ZXBhcmF0b3JzOwogICAgIGJvb2wgbV91c2luZ1NlcnZlck1vZGU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155489</attachid>
            <date>2012-07-31 04:30:44 -0700</date>
            <delta_ts>2012-07-31 06:14:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92398-20120731133011.patch</filename>
            <type>text/plain</type>
            <size>49976</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MTg0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNDEyY2IzYzRmY2RhODFiZDNjNjNmMDA4ZjBkNzJlZjY0
ODcxNDdiOS4uMGQ4MTViZDM4ZGM4OWYxNzYwNWUwYWYyYWRkNTc4NDVlYjVkMTI2NCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk3
IEBACisyMDEyLTA3LTMxICBCYWxhenMgS2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBBbGwgcG9ydHMgc2hvdWxkIHN1cHBvcnQgcGVyIHRlc3Qgc3dpdGNoaW5nIG9mIHBp
eGVsIHRlc3RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkyMzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGVhY2ggYWxsIHRlc3QgZHJpdmVycyB0byBhY2NlcHQgYSBwZXIgdGVzdCBjb250cm9sIG9m
IHdoZXRoZXIKKyAgICAgICAgdG8gZHVtcCBwaXhlbHMuIERyaXZlcnMgbm93IGFjY2VwdCBhIC1w
Ly0tcGl4ZWwtdGVzdCBhcmd1bWVudAorICAgICAgICBvbiB0aGUgc3RhbmRhcnQgaW5wdXQgdGhh
dCBtZWFucyB0aGF0IHJ1bm5pbmcgdGhlIGN1cnJlbnQKKyAgICAgICAgdGVzdCBhcyBwaXhlbCB0
ZXN0IGlzIGFsbG93ZWQgKGV2ZW4gaWYgdGhlIGV4cGVjdGVkIGhhc2ggaXMKKyAgICAgICAgbWlz
c2luZykuIFJlbW92ZWQgdGhlIC0tcGl4ZWwtdGVzdHMgY29tbWFuZCBsaW5lIG9wdGlvbiBzaW5j
ZQorICAgICAgICB0aGVyZSBpcyBubyBuZWVkIGZvciBpdCBhbnltb3JlLgorCisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaToKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9EdW1wUmVuZGVyVHJlZS5oOgorICAgICAgICAoVGVzdENvbW1hbmQ6OlRlc3RDb21tYW5k
KToKKyAgICAgICAgKFRlc3RDb21tYW5kKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9EdW1w
UmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcDogQWRkZWQuCisgICAgICAgIChDb21tYW5k
VG9rZW5pemVyKToKKyAgICAgICAgKENvbW1hbmRUb2tlbml6ZXI6OkNvbW1hbmRUb2tlbml6ZXIp
OgorICAgICAgICAoQ29tbWFuZFRva2VuaXplcjo6cHVtcCk6CisgICAgICAgIChDb21tYW5kVG9r
ZW5pemVyOjpuZXh0KToKKyAgICAgICAgKENvbW1hbmRUb2tlbml6ZXI6Omhhc05leHQpOgorICAg
ICAgICAoZGllKToKKyAgICAgICAgKHBhcnNlSW5wdXRMaW5lKToKKyAgICAgICAgQ29tbW9uIGxv
Z2ljIHRvIHBhcnNlIHRoZSBpbnB1dCBsaW5lIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IChvciBm
cm9tIHRoZSBjb21tYW5kIGxpbmUKKyAgICAgICAgaW4gc3RhbmRhbG9uZSBtb2RlKS4gTWFkZSBp
dCBzb21ld2hhdCBnZW5lcmFsIHNvIHdlIGNhbiBlYXNpbHkgYWRkIG1vcmUgYXJndW1lbnRzIGlm
CisgICAgICAgIHRoZXJlIGlzIGEgbmVlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9EdW1wUmVuZGVyVHJlZS5jcHA6CisgICAgICAgIChydW5UZXN0KToKKyAgICAgICAgKG1h
aW4pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHA6Cisg
ICAgICAgIChUZXN0U2hlbGw6OlRlc3RTaGVsbCk6CisgICAgICAgIChUZXN0U2hlbGw6OnJ1bkZp
bGVUZXN0KToKKyAgICAgICAgKFRlc3RTaGVsbDo6ZHVtcCk6CisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmg6CisgICAgICAgIChUZXN0UGFyYW1zOjpUZXN0UGFy
YW1zKToKKyAgICAgICAgKFRlc3RTaGVsbCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZWZs
L0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVy
VHJlZS5jcHA6CisgICAgICAgIChwYXJzZUNvbW1hbmRMaW5lT3B0aW9ucyk6CisgICAgICAgIChy
dW5UZXN0KToKKyAgICAgICAgKHNob3VsZER1bXBQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVk
KToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVu
ZGVyVHJlZS5jcHA6CisgICAgICAgIChpbml0aWFsaXplR2xvYmFsc0Zyb21Db21tYW5kTGluZU9w
dGlvbnMpOgorICAgICAgICAoZHVtcCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0R1
bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICAoaW5pdGlhbGl6ZUdsb2JhbHNGcm9tQ29tbWFuZExp
bmVPcHRpb25zKToKKyAgICAgICAgKGR1bXBSZW5kZXJUcmVlKToKKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5wcm86CisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
cXQvRHVtcFJlbmRlclRyZWVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEdW1wUmVuZGVyVHJl
ZTo6cHJvY2Vzc0xpbmUpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVy
VHJlZS5jcHA6CisgICAgICAgIChkdW1wKToKKyAgICAgICAgKHJ1blRlc3QpOgorICAgICAgICAo
ZGxsTGF1bmNoZXJFbnRyeVBvaW50KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRHVt
cFJlbmRlclRyZWUudmNwcm9qOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dzY3JpcHQ6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvd3gvRHVtcFJlbmRlclRyZWVXeC5jcHA6CisgICAgICAg
IChkdW1wKToKKyAgICAgICAgKHJ1blRlc3QpOgorICAgICAgICAoTXlBcHA6Ok9uSW5pdCk6Cisg
ICAgICAgICogU2NyaXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0czogUGFzcyAtLXBpeGVsLXRlc3Qg
YmVmb3JlIHRoZSBoYXNoLgorICAgICAgICBDaGFuZ2VkIHRoZSBzZXBhcmF0b3IgZm9ybSAnIHRv
IDogYmVjYXVzZSBpdCBkb24ndCBuZWVkIHRvIGJlIGVzY2FwZWQKKyAgICAgICAgd2hlbiBwYXNz
aW5nIG1hbnVhbGx5IG9uIHRoZSBjb21hbmQgbGluZS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHk6CisgICAgICAgIChQb3J0LnNob3VsZF9ydW5f
YXNfcGl4ZWxfdGVzdCk6IFJlbW92ZWQgbm93IHRoYXQgYWxsIHBvcnRzIHN1cHBvcnRzIGl0Lgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5Ogor
ICAgICAgICAoRHJpdmVyLmNtZF9saW5lKTogRG9uJ3QgcGFzcyAtLXBpeGVsLXRlc3RzIGFueW1v
cmUuCisgICAgICAgIChEcml2ZXIuX2NvbW1hbmRfZnJvbV9kcml2ZXJfaW5wdXQpOgorCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpUZXN0Q29udHJvbGxlcik6CisgICAgICAgIChXVFI6OlRlc3RDb250
cm9sbGVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdUUjo6VGVzdENvbW1hbmQ6OlRlc3RDb21t
YW5kKToKKyAgICAgICAgKFRlc3RDb21tYW5kKToKKyAgICAgICAgKFdUUik6CisgICAgICAgIChD
b21tYW5kVG9rZW5pemVyKToKKyAgICAgICAgKFdUUjo6Q29tbWFuZFRva2VuaXplcjo6Q29tbWFu
ZFRva2VuaXplcik6CisgICAgICAgIChXVFI6OkNvbW1hbmRUb2tlbml6ZXI6OnB1bXApOgorICAg
ICAgICAoV1RSOjpDb21tYW5kVG9rZW5pemVyOjpuZXh0KToKKyAgICAgICAgKFdUUjo6Q29tbWFu
ZFRva2VuaXplcjo6aGFzTmV4dCk6CisgICAgICAgIChXVFI6OmRpZSk6CisgICAgICAgIChXVFI6
OnBhcnNlSW5wdXRMaW5lKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJ1blRlc3Qp
OgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAg
KFRlc3RDb250cm9sbGVyKToKKyAgICAgICAgRHVwbGljYXRlIHRoZSBsb2dpYyBmb3IgcGFyc2lu
ZyB0aGUgY29tbWFuZCBsaW5lIGJlY2F1c2UKKyAgICAgICAgdW5mb3J0dW5hdGVseSB0aGVyZSBp
cyBubyB3YXkgdG8gc2hhcmUgY29kZSBiZXR3ZWVuCisgICAgICAgIFdlYktpdFRlc3RSdW5uZXIg
YW5kIER1bXBSZW5kZXJUcmVlLgorCiAyMDEyLTA3LTMxICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9i
aW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBbamhidWlsZF0gQWxzbyB0cnkgdG8gbG9hZCBq
aGJ1aWxkIFB5dGhvbiBtb2R1bGUgZnJvbSB0aGUgc291cmNlIGNoZWNrb3V0CmRpZmYgLS1naXQg
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaQppbmRleCBkY2UxZTM2MWQ2MDA2ZWRlMDc0MDE1
Y2QxY2Q2YmZhNmE0MDIxMWU4Li5kNmYwYWFiMWM5MDE5YzUyYTQzOTBkOWVlOTMyMGU2MWM1NzFj
MWM1IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBp
CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkKQEAgLTU2LDYg
KzU2LDggQEAKICAgICAgICAgICAgICdjaHJvbWl1bS9XZWJWaWV3SG9zdC5oJywKICAgICAgICAg
XSwKICAgICAgICAgJ3Rlc3RfcnVubmVyX2ZpbGVzJzogWworICAgICAgICAgICAgJ0R1bXBSZW5k
ZXJUcmVlLmgnLAorICAgICAgICAgICAgJ0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcCcsCiAgICAg
ICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAn
LAogICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50LmNwcCcsCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVy
VHJlZS5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuaAppbmRleCAwZTU5
OGJlNGFlM2RkNjI1ZjBiNDVlZmU2YjI4ZmEzNWY2N2Y1MmYyLi4xOGQ4Y2RhMGViMTdmYTgzYmVl
MjA4OWI2ZDQ4NWE2NDlkYmI4NjcwIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9E
dW1wUmVuZGVyVHJlZS5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVl
LmgKQEAgLTY1LDQgKzY1LDE0IEBAIGV4dGVybiBSZWZQdHI8TGF5b3V0VGVzdENvbnRyb2xsZXI+
IGdMYXlvdXRUZXN0Q29udHJvbGxlcjsKIHZvaWQgZHVtcCgpOwogdm9pZCBkaXNwbGF5V2ViVmll
dygpOwogCitzdHJ1Y3QgVGVzdENvbW1hbmQgeworICAgIFRlc3RDb21tYW5kKCkgOiBzaG91bGRE
dW1wUGl4ZWxzKGZhbHNlKSB7IH0KKworICAgIHN0ZDo6c3RyaW5nIHBhdGhPclVSTDsKKyAgICBi
b29sIHNob3VsZER1bXBQaXhlbHM7CisgICAgc3RkOjpzdHJpbmcgZXhwZWN0ZWRQaXhlbEhhc2g7
Cit9OworCitUZXN0Q29tbWFuZCBwYXJzZUlucHV0TGluZShjb25zdCBzdGQ6OnN0cmluZyYpOwor
CiAjZW5kaWYgLy8gRHVtcFJlbmRlclRyZWVfaApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggODNiZmZkNDQ4NDFhYTEyMmVlZGVkNDcyNTEzNGM2OTE1MjAwZGQ1ZS4uYWEzNGI5NzM4Y2Y1
NGZiMjI3NWY1ZGUzNGQxODFiZDQwMWFhODljMyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC0yODksNiArMjg5LDcgQEAKIAkJOENDREE4MUYxNTFBNTY1NTAwMDNGOTM3IC8qIFNhbXBs
ZUZvbnQuc2ZvbnQgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhtbDsgbmFtZSA9IFNhbXBsZUZvbnQuc2ZvbnQ7
IHBhdGggPSBmb250cy9TYW1wbGVGb250LnNmb250OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5MzM1NDM1RjAzRDc1NTAyMDA4NjM1Q0UgLyogV2ViS2l0LmZyYW1ld29yayAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3
b3JrOyBwYXRoID0gV2ViS2l0LmZyYW1ld29yazsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RT
X0RJUjsgfTsKIAkJOTM0MDk5NTQwODU0MENBRjAwN0YzQkM4IC8qIER1bXBSZW5kZXJUcmVlICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQu
bWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBEdW1wUmVuZGVy
VHJlZTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJOTgwNTExRDExNUM3
MDFFNTAwOENGRTdCIC8qIER1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IER1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwM0ZGNzQwOUNBQUQwODAwOUIyQTM3IC8qIER1bXBSZW5k
ZXJUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBEdW1wUmVuZGVyVHJl
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODE3MDkwMzA4QjE2NEQzMDBDQ0I5
RkIgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IHBhdGggPSBKYXZhU2Ny
aXB0Q29yZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJ
CUE4NEY2MDg5MDhCMTM2REEwMEU5NzQ1RiAvKiBDb2NvYS5mcmFtZXdvcmsgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsg
bmFtZSA9IENvY29hLmZyYW1ld29yazsgcGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtz
L0NvY29hLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKQEAgLTQyMSw2
ICs0MjIsNyBAQAogCQkwOEZCNzc5NEZFODQxNTVEQzAyQUFDMDcgLyogRHVtcFJlbmRlclRyZWUg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTk4MDUxMUQx
MTVDNzAxRTUwMDhDRkU3QiAvKiBEdW1wUmVuZGVyVHJlZUNvbW1vbi5jcHAgKi8sCiAJCQkJMzJB
NzBBQUIwMzcwNUUxRjAwQzkxNzgzIC8qIER1bXBSZW5kZXJUcmVlUHJlZml4LmggKi8sCiAJCQkJ
MTQyMkEyNzUwQUY2RjRCRDAwRTFBODgzIC8qIERlbGVnYXRlcyAqLywKIAkJCQkxNDIyQTI2OTBB
RjZGNDUyMDBFMUE4ODMgLyogQ29udHJvbGxlcnMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZUNvbW1vbi5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9EdW1wUmVuZGVyVHJlZUNvbW1vbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDMzNDlkYjIyMDY3ZTlhMDg0
MTdhMjNhZDhjYjEzYjQ1YjZkMjMxMAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcApAQCAtMCwwICsxLDgyIEBACisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKKworI2luY2x1ZGUgPGFs
Z29yaXRobT4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVk
ZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nPgorCitjbGFzcyBDb21tYW5kVG9rZW5pemVy
IHsKK3B1YmxpYzoKKyAgICBDb21tYW5kVG9rZW5pemVyKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnB1
dCkKKyAgICAgICAgOiBtX2lucHV0KGlucHV0KQorICAgICAgICAsIG1fcG9zTmV4dFNlcGFyYXRv
cigwKQorICAgIHsKKyAgICAgICAgcHVtcCgpOworICAgIH0KKworICAgIGJvb2wgaGFzTmV4dCgp
IGNvbnN0OworICAgIHN0ZDo6c3RyaW5nIG5leHQoKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHB1
bXAoKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciBrU2VwYXJhdG9yID0gJzonOworICAgIGNvbnN0
IHN0ZDo6c3RyaW5nJiBtX2lucHV0OworICAgIHN0ZDo6c3RyaW5nIG1fbmV4dDsKKyAgICBzaXpl
X3QgbV9wb3NOZXh0U2VwYXJhdG9yOworfTsKKwordm9pZCBDb21tYW5kVG9rZW5pemVyOjpwdW1w
KCkKK3sKKyAgICBpZiAobV9wb3NOZXh0U2VwYXJhdG9yID09IHN0ZDo6c3RyaW5nOjpucG9zIHx8
IG1fcG9zTmV4dFNlcGFyYXRvciA9PSBtX2lucHV0LnNpemUoKSkgeworICAgICAgICBtX25leHQg
PSBzdGQ6OnN0cmluZygpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHNpemVfdCBzdGFy
dCA9IG1fcG9zTmV4dFNlcGFyYXRvciA/IG1fcG9zTmV4dFNlcGFyYXRvciArIDEgOiAwOworICAg
IG1fcG9zTmV4dFNlcGFyYXRvciA9IG1faW5wdXQuZmluZChrU2VwYXJhdG9yLCBzdGFydCk7Cisg
ICAgc2l6ZV90IHNpemUgPSBtX3Bvc05leHRTZXBhcmF0b3IgPT0gc3RkOjpzdHJpbmc6Om5wb3Mg
PyBzdGQ6OnN0cmluZzo6bnBvcyA6IG1fcG9zTmV4dFNlcGFyYXRvciAtIHN0YXJ0OworICAgIG1f
bmV4dCA9IHN0ZDo6c3RyaW5nKG1faW5wdXQsIHN0YXJ0LCBzaXplKTsKK30KKworc3RkOjpzdHJp
bmcgQ29tbWFuZFRva2VuaXplcjo6bmV4dCgpCit7CisgICAgQVNTRVJUKGhhc05leHQoKSk7CisK
KyAgICBzdGQ6OnN0cmluZyBvbGROZXh0ID0gbV9uZXh0OworICAgIHB1bXAoKTsKKyAgICByZXR1
cm4gb2xkTmV4dDsKK30KKworYm9vbCBDb21tYW5kVG9rZW5pemVyOjpoYXNOZXh0KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9uZXh0ICE9IHN0ZDo6c3RyaW5nKCk7Cit9CisKK05PX1JFVFVSTiBz
dGF0aWMgdm9pZCBkaWUoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0TGluZSkKK3sKKyAgICBmcHJp
bnRmKHN0ZGVyciwgIlVuZXhwZWN0ZWQgaW5wdXQgbGluZTogJXNcbiIsIGlucHV0TGluZS5jX3N0
cigpKTsKKyAgICBleGl0KDEpOworfQorCitUZXN0Q29tbWFuZCBwYXJzZUlucHV0TGluZShjb25z
dCBzdGQ6OnN0cmluZyYgaW5wdXRMaW5lKQoreworICAgIFRlc3RDb21tYW5kIHJlc3VsdDsKKyAg
ICBDb21tYW5kVG9rZW5pemVyIHRva2VuaXplcihpbnB1dExpbmUpOworICAgIGlmICghdG9rZW5p
emVyLmhhc05leHQoKSkKKyAgICAgICAgZGllKGlucHV0TGluZSk7CisKKyAgICByZXN1bHQucGF0
aE9yVVJMID0gdG9rZW5pemVyLm5leHQoKTsKKyAgICBpZiAoIXRva2VuaXplci5oYXNOZXh0KCkp
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBzdGQ6OnN0cmluZyBhcmcgPSB0b2tlbml6
ZXIubmV4dCgpOworICAgIGlmIChhcmcgIT0gc3RkOjpzdHJpbmcoIi1wIikgJiYgYXJnICE9IHN0
ZDo6c3RyaW5nKCItLXBpeGVsLXRlc3QiKSkKKyAgICAgICAgZGllKGlucHV0TGluZSk7CisgICAg
cmVzdWx0LnNob3VsZER1bXBQaXhlbHMgPSB0cnVlOworCisgICAgaWYgKHRva2VuaXplci5oYXNO
ZXh0KCkpCisgICAgICAgIHJlc3VsdC5leHBlY3RlZFBpeGVsSGFzaCA9IHRva2VuaXplci5uZXh0
KCk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwCmluZGV4IDYxNTVmNDQxZjVkOGJiM2M0NGU1MTc5
MDgwZGNiMTc0NDVlODk4NzQuLmI1NTk0ODQzNmMyOGI1NGYyY2Y3NjliZTllZTkyNTdkMzAxOTIx
MzQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJU
cmVlLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EdW1wUmVuZGVyVHJl
ZS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKIAogI2luY2x1ZGUgIk1vY2tXZWJLaXRQbGF0Zm9ybVN1
cHBvcnQuaCIKICNpbmNsdWRlICJUZXN0U2hlbGwuaCIKQEAgLTQ0LDcgKzQ1LDYgQEAgdXNpbmcg
bmFtZXNwYWNlIHN0ZDsKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkNvbXBsZXhUZXh0W10gPSAi
LS1jb21wbGV4LXRleHQiOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uRHVtcEFsbFBpeGVsc1td
ID0gIi0tZHVtcC1hbGwtcGl4ZWxzIjsKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbk5vdHJlZVtd
ID0gIi0tbm90cmVlIjsKLXN0YXRpYyBjb25zdCBjaGFyIG9wdGlvblBpeGVsVGVzdHNbXSA9ICIt
LXBpeGVsLXRlc3RzIjsKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvblRocmVhZGVkW10gPSAiLS10
aHJlYWRlZCI7CiBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25EZWJ1Z1JlbmRlclRyZWVbXSA9ICIt
LWRlYnVnLXJlbmRlci10cmVlIjsKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkRlYnVnTGF5ZXJU
cmVlW10gPSAiLS1kZWJ1Zy1sYXllci10cmVlIjsKQEAgLTg1LDE3ICs4NSwxMiBAQCBwcml2YXRl
OgogICAgIE93blB0cjxNb2NrV2ViS2l0UGxhdGZvcm1TdXBwb3J0PiBtX21vY2tQbGF0Zm9ybTsK
IH07CiAKLXN0YXRpYyB2b2lkIHJ1blRlc3QoVGVzdFNoZWxsJiBzaGVsbCwgVGVzdFBhcmFtcyYg
cGFyYW1zLCBjb25zdCBzdHJpbmcmIHRlc3ROYW1lKQorc3RhdGljIHZvaWQgcnVuVGVzdChUZXN0
U2hlbGwmIHNoZWxsLCBUZXN0UGFyYW1zJiBwYXJhbXMsIGNvbnN0IHN0cmluZyYgaW5wdXRMaW5l
KQogewogICAgIGludCBvbGRUaW1lb3V0TXNlYyA9IHNoZWxsLmxheW91dFRlc3RUaW1lb3V0KCk7
Ci0gICAgcGFyYW1zLnBpeGVsSGFzaCA9ICIiOwotICAgIHN0cmluZyBwYXRoT3JVUkwgPSB0ZXN0
TmFtZTsKLSAgICBzdHJpbmc6OnNpemVfdHlwZSBzZXBhcmF0b3JQb3NpdGlvbiA9IHBhdGhPclVS
TC5maW5kKCInIik7Ci0gICAgaWYgKHNlcGFyYXRvclBvc2l0aW9uICE9IHN0cmluZzo6bnBvcykg
ewotICAgICAgICBwYXJhbXMucGl4ZWxIYXNoID0gcGF0aE9yVVJMLnN1YnN0cihzZXBhcmF0b3JQ
b3NpdGlvbiArIDEpOwotICAgICAgICBwYXRoT3JVUkwuZXJhc2Uoc2VwYXJhdG9yUG9zaXRpb24p
OwotICAgIH0KLSAgICBwYXJhbXMudGVzdFVybCA9IHdlYmtpdF9zdXBwb3J0OjpDcmVhdGVVUkxG
b3JQYXRoT3JVUkwocGF0aE9yVVJMKTsKKyAgICBUZXN0Q29tbWFuZCBjb21tYW5kID0gcGFyc2VJ
bnB1dExpbmUoaW5wdXRMaW5lKTsKKyAgICBwYXJhbXMudGVzdFVybCA9IHdlYmtpdF9zdXBwb3J0
OjpDcmVhdGVVUkxGb3JQYXRoT3JVUkwoY29tbWFuZC5wYXRoT3JVUkwpOworICAgIHBhcmFtcy5w
aXhlbEhhc2ggPSBjb21tYW5kLnNob3VsZER1bXBQaXhlbHM7CiAgICAgd2Via2l0X3N1cHBvcnQ6
OlNldEN1cnJlbnREaXJlY3RvcnlGb3JGaWxlVVJMKHBhcmFtcy50ZXN0VXJsKTsKICAgICB2ODo6
Vjg6OlNldEZsYWdzRnJvbVN0cmluZyhzaGVsbC5qYXZhU2NyaXB0RmxhZ3MoKS5jX3N0cigpLCBz
aGVsbC5qYXZhU2NyaXB0RmxhZ3MoKS5sZW5ndGgoKSk7CiAgICAgaWYgKHNoZWxsLnN0cmVzc09w
dCgpIHx8IHNoZWxsLnN0cmVzc0Rlb3B0KCkpIHsKQEAgLTEwOCwxMSArMTAzLDExIEBAIHN0YXRp
YyB2b2lkIHJ1blRlc3QoVGVzdFNoZWxsJiBzaGVsbCwgVGVzdFBhcmFtcyYgcGFyYW1zLCBjb25z
dCBzdHJpbmcmIHRlc3ROYW1lCiAgICAgICAgICAgYm9vbCBpc0xhc3RMb2FkID0gKGkgPT0gKHY4
OjpUZXN0aW5nOjpHZXRTdHJlc3NSdW5zKCkgLSAxKSk7CiAgICAgICAgICAgc2hlbGwuc2V0RHVt
cFdoZW5GaW5pc2hlZChpc0xhc3RMb2FkKTsKICAgICAgICAgICBzaGVsbC5yZXNldFRlc3RDb250
cm9sbGVyKCk7Ci0gICAgICAgICAgc2hlbGwucnVuRmlsZVRlc3QocGFyYW1zKTsKKyAgICAgICAg
ICBzaGVsbC5ydW5GaWxlVGVzdChwYXJhbXMsIGNvbW1hbmQuc2hvdWxkRHVtcFBpeGVscyk7CiAg
ICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgIHNoZWxsLnJlc2V0VGVzdENvbnRyb2xsZXIoKTsK
LSAgICAgIHNoZWxsLnJ1bkZpbGVUZXN0KHBhcmFtcyk7CisgICAgICBzaGVsbC5ydW5GaWxlVGVz
dChwYXJhbXMsIGNvbW1hbmQuc2hvdWxkRHVtcFBpeGVscyk7CiAgICAgfQogICAgIHNoZWxsLnNl
dExheW91dFRlc3RUaW1lb3V0KG9sZFRpbWVvdXRNc2VjKTsKIH0KQEAgLTE0Niw4ICsxNDEsNiBA
QCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgICAgICAgICAgc2VydmVyTW9k
ZSA9IHRydWU7CiAgICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvbk5vdHJlZSkKICAg
ICAgICAgICAgIHBhcmFtcy5kdW1wVHJlZSA9IGZhbHNlOwotICAgICAgICBlbHNlIGlmIChhcmd1
bWVudCA9PSBvcHRpb25QaXhlbFRlc3RzKQotICAgICAgICAgICAgcGFyYW1zLmR1bXBQaXhlbHMg
PSB0cnVlOwogICAgICAgICBlbHNlIGlmIChhcmd1bWVudCA9PSBvcHRpb25EZWJ1Z1JlbmRlclRy
ZWUpCiAgICAgICAgICAgICBwYXJhbXMuZGVidWdSZW5kZXJUcmVlID0gdHJ1ZTsKICAgICAgICAg
ZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uRGVidWdMYXllclRyZWUpCmRpZmYgLS1naXQgYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcAppbmRleCA2Zjk5MWZmMzM1OWM3NzQ2MWEy
Mzg3OTUxOGQzMDBjNTZmYTBjN2YzLi4xOTZhY2RhYWRkODE4NzVjNmM2ZjE4NzU2MDU5ZWNlMjk4
ODRmY2IyIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hl
bGwuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAK
QEAgLTEwMiw3ICsxMDIsOCBAQCBzdGF0aWMgdm9pZCBtYWtlQ2FudmFzT3BhcXVlKFNrQ2FudmFz
KiBjYW52YXMpCiB9CiAKIFRlc3RTaGVsbDo6VGVzdFNoZWxsKCkKLSAgICA6IG1fdGVzdElzUGVu
ZGluZyhmYWxzZSkKKyAgICA6IG1fZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0KGZhbHNlKQorICAg
ICwgbV90ZXN0SXNQZW5kaW5nKGZhbHNlKQogICAgICwgbV90ZXN0SXNQcmVwYXJpbmcoZmFsc2Up
CiAgICAgLCBtX2ZvY3VzZWRXaWRnZXQoMCkKICAgICAsIG1fZGV2VG9vbHMoMCkKQEAgLTIzNywx
MyArMjM4LDE2IEBAIHZvaWQgVGVzdFNoZWxsOjpyZXNldFdlYlNldHRpbmdzKFdlYlZpZXcmIHdl
YlZpZXcpCiAgICAgbV9wcmVmcy5hcHBseVRvKCZ3ZWJWaWV3KTsKIH0KIAotdm9pZCBUZXN0U2hl
bGw6OnJ1bkZpbGVUZXN0KGNvbnN0IFRlc3RQYXJhbXMmIHBhcmFtcykKK3ZvaWQgVGVzdFNoZWxs
OjpydW5GaWxlVGVzdChjb25zdCBUZXN0UGFyYW1zJiBwYXJhbXMsIGJvb2wgc2hvdWxkRHVtcFBp
eGVscykKIHsKICAgICBBU1NFUlQocGFyYW1zLnRlc3RVcmwuaXNWYWxpZCgpKTsKKyAgICBtX2R1
bXBQaXhlbHNGb3JDdXJyZW50VGVzdCA9IHNob3VsZER1bXBQaXhlbHM7CiAgICAgbV90ZXN0SXNQ
cmVwYXJpbmcgPSB0cnVlOwogICAgIG1fcGFyYW1zID0gcGFyYW1zOwogICAgIHN0cmluZyB0ZXN0
VXJsID0gbV9wYXJhbXMudGVzdFVybC5zcGVjKCk7CiAKKyAgICBtX2xheW91dFRlc3RDb250cm9s
bGVyLT5zZXRTaG91bGRHZW5lcmF0ZVBpeGVsUmVzdWx0cyhzaG91bGREdW1wUGl4ZWxzKTsKKwog
ICAgIGlmICh0ZXN0VXJsLmZpbmQoImxvYWRpbmcvIikgIT0gc3RyaW5nOjpucG9zCiAgICAgICAg
IHx8IHRlc3RVcmwuZmluZCgibG9hZGluZ1xcIikgIT0gc3RyaW5nOjpucG9zKQogICAgICAgICBt
X2xheW91dFRlc3RDb250cm9sbGVyLT5zZXRTaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKHRy
dWUpOwpAQCAtNjA5LDcgKzYxMyw3IEBAIHZvaWQgVGVzdFNoZWxsOjpkdW1wKCkKICAgICBpZiAo
ZHVtcGVkQW55dGhpbmcgJiYgbV9wYXJhbXMucHJpbnRTZXBhcmF0b3JzKQogICAgICAgICBtX3By
aW50ZXIuaGFuZGxlVGV4dEZvb3RlcigpOwogCi0gICAgaWYgKG1fcGFyYW1zLmR1bXBQaXhlbHMg
JiYgc2hvdWxkR2VuZXJhdGVQaXhlbFJlc3VsdHMpIHsKKyAgICBpZiAobV9kdW1wUGl4ZWxzRm9y
Q3VycmVudFRlc3QgJiYgc2hvdWxkR2VuZXJhdGVQaXhlbFJlc3VsdHMpIHsKICAgICAgICAgLy8g
SW1hZ2Ugb3V0cHV0OiB3ZSB3cml0ZSB0aGUgaW1hZ2UgZGF0YSB0byB0aGUgZmlsZSBnaXZlbiBv
biB0aGUKICAgICAgICAgLy8gY29tbWFuZCBsaW5lIChmb3IgdGhlIGR1bXAgcGl4ZWxzIGFyZ3Vt
ZW50KSwgYW5kIHRoZSBNRDUgc3VtIHRvCiAgICAgICAgIC8vIHN0ZG91dC4KZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgKaW5kZXggMDc3ODE2MzZiYTc1MDc1OTUyYjJm
ZjM4YzRjNDczZGQ3NmM0Y2I1Yy4uOGFmNmI5MzZkMzc4MzZhNTdiYTFjNDM1ZDI4ZmQ0YjRhNjhj
NDk0OCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxs
LmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgKQEAgLTY0
LDcgKzY0LDYgQEAgY2xhc3MgV2ViUGVybWlzc2lvbnM7CiAKIHN0cnVjdCBUZXN0UGFyYW1zIHsK
ICAgICBib29sIGR1bXBUcmVlOwotICAgIGJvb2wgZHVtcFBpeGVsczsKICAgICBib29sIGRlYnVn
UmVuZGVyVHJlZTsKICAgICBib29sIGRlYnVnTGF5ZXJUcmVlOwogICAgIGJvb2wgcHJpbnRTZXBh
cmF0b3JzOwpAQCAtNzMsNyArNzIsNiBAQCBzdHJ1Y3QgVGVzdFBhcmFtcyB7CiAKICAgICBUZXN0
UGFyYW1zKCkKICAgICAgICAgOiBkdW1wVHJlZSh0cnVlKQotICAgICAgICAsIGR1bXBQaXhlbHMo
ZmFsc2UpCiAgICAgICAgICwgZGVidWdSZW5kZXJUcmVlKGZhbHNlKQogICAgICAgICAsIGRlYnVn
TGF5ZXJUcmVlKGZhbHNlKQogICAgICAgICAsIHByaW50U2VwYXJhdG9ycyhmYWxzZSkgeyB9CkBA
IC0xMDQsNyArMTAyLDcgQEAgcHVibGljOgogICAgIFdlYlBlcm1pc3Npb25zKiB3ZWJQZXJtaXNz
aW9ucygpIHsgcmV0dXJuIG1fd2ViUGVybWlzc2lvbnMuZ2V0KCk7IH0KIAogICAgIHZvaWQgYmlu
ZEpTT2JqZWN0c1RvV2luZG93KFdlYktpdDo6V2ViRnJhbWUqKTsKLSAgICB2b2lkIHJ1bkZpbGVU
ZXN0KGNvbnN0IFRlc3RQYXJhbXMmKTsKKyAgICB2b2lkIHJ1bkZpbGVUZXN0KGNvbnN0IFRlc3RQ
YXJhbXMmLCBib29sIHNob3VsZER1bXBQaXhlbFRlc3RzKTsKICAgICB2b2lkIGNhbGxKU0dDKCk7
CiAgICAgdm9pZCByZXNldFRlc3RDb250cm9sbGVyKCk7CiAgICAgdm9pZCB3YWl0VGVzdEZpbmlz
aGVkKCk7CkBAIC0yMjYsNiArMjI0LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgVGVzdFBh
cmFtcyBtX3BhcmFtczsKKyAgICBib29sIG1fZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0OwogICAg
IGludCBtX3RpbWVvdXQ7IC8vIHRpbWVvdXQgdmFsdWUgaW4gbWlsbGlzZWNvbmQKICAgICBib29s
IG1fYWxsb3dFeHRlcm5hbFBhZ2VzOwogICAgIGJvb2wgbV9hY2NlbGVyYXRlZENvbXBvc2l0aW5n
Rm9yVmlkZW9FbmFibGVkOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0NN
YWtlTGlzdHMudHh0IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IGUxZGFjZjkwMWJhMDYyNWE1YTFlODA3ZWM2Yjk0NTM0MzQ5ODRjYWEuLjA2N2RiZDMyYjdh
YTkxZjVhNTQ3Y2I3YmU1N2ZmNGJkZjU5OTkzMjkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4dAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwv
Q01ha2VMaXN0cy50eHQKQEAgLTEsNCArMSw1IEBACiBTRVQoRHVtcFJlbmRlclRyZWVfU09VUkNF
UworICAgICR7VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZUNvbW1vbi5j
cHAKICAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvQ3ljbGljUmVkdW5kYW5jeUNoZWNr
LmNwcAogICAgICR7VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJlZS9HQ0NvbnRyb2xsZXIuY3BwCiAg
ICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcApk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlLmNwcCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZS5jcHAKaW5kZXggYzJjOWQ3
MWMwYzUxNWNiMDhjZDQxMmQ0MmFkZDBkMTA1Y2E5NzU5Yy4uNzYxM2Y0ZTRmZjBlNTY1MzU2Mjg4
ZDRjN2Q0NGZmMzlhODJlOTYzZSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZs
L0R1bXBSZW5kZXJUcmVlLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJl
bmRlclRyZWUuY3BwCkBAIC02NCw3ICs2NCw3IEBAIGV4dGVybiBFd2tfSGlzdG9yeV9JdGVtKiBw
cmV2VGVzdEJGSXRlbTsKIFJlZlB0cjxMYXlvdXRUZXN0Q29udHJvbGxlcj4gZ0xheW91dFRlc3RD
b250cm9sbGVyOwogdm9sYXRpbGUgYm9vbCBkb25lID0gZmFsc2U7CiAKLXN0YXRpYyBpbnQgZHVt
cFBpeGVscyA9IGZhbHNlOworc3RhdGljIGJvb2wgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0Owog
c3RhdGljIGludCBkdW1wVHJlZSA9IHRydWU7CiBzdGF0aWMgaW50IHByaW50U2VwYXJhdG9ycyA9
IHRydWU7CiBzdGF0aWMgaW50IHVzZVgxMVdpbmRvdyA9IGZhbHNlOwpAQCAtMTkyLDcgKzE5Miw2
IEBAIHN0YXRpYyBib29sIHBhcnNlQ29tbWFuZExpbmVPcHRpb25zKGludCBhcmdjLCBjaGFyKiog
YXJndikKIHsKICAgICBzdGF0aWMgY29uc3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKICAgICAgICAg
eyJub3RyZWUiLCBub19hcmd1bWVudCwgJmR1bXBUcmVlLCBmYWxzZX0sCi0gICAgICAgIHsicGl4
ZWwtdGVzdHMiLCBub19hcmd1bWVudCwgJmR1bXBQaXhlbHMsIHRydWV9LAogICAgICAgICB7InRy
ZWUiLCBub19hcmd1bWVudCwgJmR1bXBUcmVlLCB0cnVlfSwKICAgICAgICAgeyJndWkiLCBub19h
cmd1bWVudCwgJnVzZVgxMVdpbmRvdywgdHJ1ZX0sCiAgICAgICAgIHswLCAwLCAwLCAwfQpAQCAt
MjEwLDMyICsyMDksNiBAQCBzdGF0aWMgYm9vbCBwYXJzZUNvbW1hbmRMaW5lT3B0aW9ucyhpbnQg
YXJnYywgY2hhcioqIGFyZ3YpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBTdHJpbmcg
Z2V0RmluYWxUZXN0VVJMKGNvbnN0IFN0cmluZyYgdGVzdFVSTCkKLXsKLSAgICBjb25zdCBzaXpl
X3QgaGFzaFNlcGFyYXRvclBvcyA9IHRlc3RVUkwuZmluZCgiJyIpOwotICAgIGlmIChoYXNoU2Vw
YXJhdG9yUG9zICE9IG5vdEZvdW5kKQotICAgICAgICByZXR1cm4gZ2V0RmluYWxUZXN0VVJMKHRl
c3RVUkwubGVmdChoYXNoU2VwYXJhdG9yUG9zKSk7Ci0KLSAgICAvLyBDb252ZXJ0IHRoZSBwYXRo
IGludG8gYSBmdWxsIGZpbGUgVVJMIGlmIGl0IGRvZXMgbm90IGxvb2sKLSAgICAvLyBsaWtlIGFu
IEhUVFAvUyBVUkwgKGRvZXNuJ3Qgc3RhcnQgd2l0aCBodHRwOi8vIG9yIGh0dHBzOi8vKS4KLSAg
ICBpZiAoIXRlc3RVUkwuc3RhcnRzV2l0aCgiaHR0cDovLyIpICYmICF0ZXN0VVJMLnN0YXJ0c1dp
dGgoImh0dHBzOi8vIikpIHsKLSAgICAgICAgY2hhciogY0ZpbGVQYXRoID0gZWNvcmVfZmlsZV9y
ZWFscGF0aCh0ZXN0VVJMLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBjb25zdCBTdHJpbmcgZmls
ZVBhdGggPSBTdHJpbmc6OmZyb21VVEY4KGNGaWxlUGF0aCk7Ci0gICAgICAgIGZyZWUoY0ZpbGVQ
YXRoKTsKLQotICAgICAgICBpZiAoZWNvcmVfZmlsZV9leGlzdHMoZmlsZVBhdGgudXRmOCgpLmRh
dGEoKSkpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCJmaWxlOi8vIikgKyBmaWxlUGF0aDsK
LSAgICB9Ci0KLSAgICByZXR1cm4gdGVzdFVSTDsKLX0KLQotc3RhdGljIFN0cmluZyBnZXRFeHBl
Y3RlZFBpeGVsSGFzaChjb25zdCBTdHJpbmcmIHRlc3RVUkwpCi17Ci0gICAgY29uc3Qgc2l6ZV90
IGhhc2hTZXBhcmF0b3JQb3MgPSB0ZXN0VVJMLmZpbmQoIiciKTsKLSAgICByZXR1cm4gKGhhc2hT
ZXBhcmF0b3JQb3MgIT0gbm90Rm91bmQpID8gdGVzdFVSTC5zdWJzdHJpbmcoaGFzaFNlcGFyYXRv
clBvcyArIDEpIDogU3RyaW5nKCk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0dsb2JhbEhp
c3RvcnlUZXN0KGNvbnN0IFN0cmluZyYgY1Rlc3RQYXRoT3JVUkwpCiB7CiAgICAgcmV0dXJuIGNU
ZXN0UGF0aE9yVVJMLmNvbnRhaW5zKCIvZ2xvYmFsaGlzdG9yeS8iKTsKQEAgLTI2NywxMyArMjQw
LDEzIEBAIHN0YXRpYyB2b2lkIGNyZWF0ZUxheW91dFRlc3RDb250cm9sbGVyKGNvbnN0IFN0cmlu
ZyYgdGVzdFVSTCwgY29uc3QgU3RyaW5nJiBleHBlCiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBy
dW5UZXN0KGNvbnN0IGNoYXIqIGNUZXN0UGF0aE9yVVJMKQorc3RhdGljIHZvaWQgcnVuVGVzdChj
b25zdCBjaGFyKiBpbnB1dExpbmUpCiB7Ci0gICAgY29uc3QgU3RyaW5nIHRlc3RQYXRoT3JVUkwg
PSBTdHJpbmc6OmZyb21VVEY4KGNUZXN0UGF0aE9yVVJMKTsKLSAgICBBU1NFUlQoIXRlc3RQYXRo
T3JVUkwuaXNFbXB0eSgpKTsKLQotICAgIGNvbnN0IFN0cmluZyB0ZXN0VVJMID0gZ2V0RmluYWxU
ZXN0VVJMKHRlc3RQYXRoT3JVUkwpOwotICAgIGNvbnN0IFN0cmluZyBleHBlY3RlZFBpeGVsSGFz
aCA9IGdldEV4cGVjdGVkUGl4ZWxIYXNoKHRlc3RQYXRoT3JVUkwpOworICAgIFRlc3RDb21tYW5k
IGNvbW1hbmQgPSBwYXJzZUlucHV0TGluZShpbnB1dExpbmUpOworICAgIGNvbnN0IFN0cmluZyB0
ZXN0VVJMKGNvbW1hbmQucGF0aE9yVVJMLmNfc3RyKCkpOworICAgIEFTU0VSVCghdGVzdFVSTC5p
c0VtcHR5KCkpOworICAgIGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCA9IGNvbW1hbmQuc2hvdWxk
RHVtcFBpeGVsczsKKyAgICBjb25zdCBTdHJpbmcgZXhwZWN0ZWRQaXhlbEhhc2goY29tbWFuZC5l
eHBlY3RlZFBpeGVsSGFzaC5jX3N0cigpKTsKIAogICAgIGJyb3dzZXItPnJlc2V0RGVmYXVsdHNU
b0NvbnNpc3RlbnRWYWx1ZXMoKTsKICAgICBjcmVhdGVMYXlvdXRUZXN0Q29udHJvbGxlcih0ZXN0
VVJMLCBleHBlY3RlZFBpeGVsSGFzaCk7CkBAIC0zNTEsNyArMzI0LDcgQEAgc3RhdGljIGJvb2wg
c2hvdWxkRHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24oKQogCiBzdGF0aWMgYm9vbCBzaG91bGREdW1w
UGl4ZWxzQW5kQ29tcGFyZVdpdGhFeHBlY3RlZCgpCiB7Ci0gICAgcmV0dXJuIGR1bXBQaXhlbHMg
JiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5nZW5lcmF0ZVBpeGVsUmVzdWx0cygpICYmICFnTGF5
b3V0VGVzdENvbnRyb2xsZXItPmR1bXBET01Bc1dlYkFyY2hpdmUoKSAmJiAhZ0xheW91dFRlc3RD
b250cm9sbGVyLT5kdW1wU291cmNlQXNXZWJBcmNoaXZlKCk7CisgICAgcmV0dXJuIGR1bXBQaXhl
bHNGb3JDdXJyZW50VGVzdCAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmdlbmVyYXRlUGl4ZWxS
ZXN1bHRzKCkgJiYgIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcERPTUFzV2ViQXJjaGl2ZSgp
ICYmICFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBTb3VyY2VBc1dlYkFyY2hpdmUoKTsKIH0K
IAogc3RhdGljIGJvb2wgc2hvdWxkRHVtcEJhY2tGb3J3YXJkTGlzdCgpCkBAIC00NTgsNyArNDMx
LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgICAgICBwcmludFNlcGFy
YXRvcnMgPSB0cnVlOwogICAgICAgICBydW5UZXN0aW5nU2VydmVyTG9vcCgpOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIHByaW50U2VwYXJhdG9ycyA9IChvcHRpbmQgPCBhcmdjIC0gMSB8fCAoZHVt
cFBpeGVscyAmJiBkdW1wVHJlZSkpOworICAgICAgICBwcmludFNlcGFyYXRvcnMgPSAob3B0aW5k
IDwgYXJnYyAtIDEgfHwgKGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCAmJiBkdW1wVHJlZSkpOwog
ICAgICAgICBmb3IgKGludCBpID0gb3B0aW5kOyBpICE9IGFyZ2M7ICsraSkKICAgICAgICAgICAg
IHJ1blRlc3QoYXJndltpXSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1w
UmVuZGVyVHJlZS5jcHAKaW5kZXggNTdjZDA1OTE3ZTgyMjU1OGI0ODM3NmUwMTAyZDgwMGE2YmNm
Y2NkYS4uZWJkYTVjZmIyMzE4OWZjMmE3OTVjNGM5ODA1ZTBiY2JlYWY1Y2Y4NyAxMDA2NDQKLS0t
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcAorKysgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwCkBAIC03Myw3ICs3Myw3IEBA
IGV4dGVybiBnY2hhciogd2Via2l0X3dlYl9mcmFtZV9nZXRfcmVzcG9uc2VfbWltZV90eXBlKFdl
YktpdFdlYkZyYW1lKiBmcmFtZSk7CiAKIHZvbGF0aWxlIGJvb2wgZG9uZTsKIHN0YXRpYyBib29s
IHByaW50U2VwYXJhdG9yczsKLXN0YXRpYyBpbnQgZHVtcFBpeGVsczsKK3N0YXRpYyBib29sIGR1
bXBQaXhlbHNGb3JDdXJyZW50VGVzdDsKIHN0YXRpYyBpbnQgZHVtcFRyZWUgPSAxOwogc3RhdGlj
IGludCB1c2VUaW1lb3V0V2F0Y2hkb2cgPSAxOwogCkBAIC01NDQsNyArNTQ0LDYgQEAgc3RhdGlj
IHZvaWQgaW5pdGlhbGl6ZUdsb2JhbHNGcm9tQ29tbWFuZExpbmVPcHRpb25zKGludCBhcmdjLCBj
aGFyICphcmd2W10pCiB7CiAgICAgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CiAgICAgICAg
IHsibm90cmVlIiwgbm9fYXJndW1lbnQsICZkdW1wVHJlZSwgZmFsc2V9LAotICAgICAgICB7InBp
eGVsLXRlc3RzIiwgbm9fYXJndW1lbnQsICZkdW1wUGl4ZWxzLCB0cnVlfSwKICAgICAgICAgeyJ0
cmVlIiwgbm9fYXJndW1lbnQsICZkdW1wVHJlZSwgdHJ1ZX0sCiAgICAgICAgIHsibm8tdGltZW91
dCIsIG5vX2FyZ3VtZW50LCAmdXNlVGltZW91dFdhdGNoZG9nLCBmYWxzZX0sCiAgICAgICAgIHtO
VUxMLCAwLCBOVUxMLCAwfQpAQCAtNjI0LDcgKzYyMyw3IEBAIHZvaWQgZHVtcCgpCiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBpZiAoZHVtcFBpeGVscworICAgIGlmIChkdW1wUGl4ZWxzRm9yQ3Vy
cmVudFRlc3QKICAgICAgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5nZW5lcmF0ZVBpeGVsUmVz
dWx0cygpCiAgICAgICYmICFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBET01Bc1dlYkFyY2hp
dmUoKQogICAgICAmJiAhZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wU291cmNlQXNXZWJBcmNo
aXZlKCkpIHsKQEAgLTY4NywxOCArNjg2LDEzIEBAIHN0YXRpYyB2b2lkIHNlbmRQaXhlbFJlc3Vs
dHNFT0YoKQogICAgIGZmbHVzaChzdGRlcnIpOwogfQogCi1zdGF0aWMgdm9pZCBydW5UZXN0KGNv
bnN0IHN0cmluZyYgdGVzdFBhdGhPclVSTCkKK3N0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3Ry
aW5nJiBpbnB1dExpbmUpCiB7CiAgICAgQVNTRVJUKCF0ZXN0UGF0aE9yVVJMLmVtcHR5KCkpOwog
Ci0gICAgLy8gTG9vayBmb3IgIiciIGFzIGEgc2VwYXJhdG9yIGJldHdlZW4gdGhlIHBhdGggb3Ig
VVJMLCBhbmQgdGhlIHBpeGVsIGR1bXAgaGFzaCB0aGF0IGZvbGxvd3MuCi0gICAgc3RyaW5nIHRl
c3RVUkwodGVzdFBhdGhPclVSTCk7Ci0gICAgc3RyaW5nIGV4cGVjdGVkUGl4ZWxIYXNoOwotICAg
IHNpemVfdCBzZXBhcmF0b3JQb3MgPSB0ZXN0VVJMLmZpbmQoIiciKTsKLSAgICBpZiAoc2VwYXJh
dG9yUG9zICE9IHN0cmluZzo6bnBvcykgewotICAgICAgICB0ZXN0VVJMID0gc3RyaW5nKHRlc3RQ
YXRoT3JVUkwsIDAsIHNlcGFyYXRvclBvcyk7Ci0gICAgICAgIGV4cGVjdGVkUGl4ZWxIYXNoID0g
c3RyaW5nKHRlc3RQYXRoT3JVUkwsIHNlcGFyYXRvclBvcyArIDEpOwotICAgIH0KKyAgICBUZXN0
Q29tbWFuZCBjb21tYW5kID0gcGFyc2VJbnB1dExpbmUoaW5wdXRMaW5lKTsKKyAgICBzdHJpbmcm
IHRlc3RVUkwgPSBjb21tYW5kLnBhdGhPclVSTDsKKyAgICBkdW1wUGl4ZWxzRm9yQ3VycmVudFRl
c3QgPSBjb21tYW5kLnNob3VsZER1bXBQaXhlbHM7CiAKICAgICAvLyBDb252ZXJ0IHRoZSBwYXRo
IGludG8gYSBmdWxsIGZpbGUgVVJMIGlmIGl0IGRvZXMgbm90IGxvb2sKICAgICAvLyBsaWtlIGFu
IEhUVFAvUyBVUkwgKGRvZXNuJ3Qgc3RhcnQgd2l0aCBodHRwOi8vIG9yIGh0dHBzOi8vKS4KQEAg
LTcxMiw3ICs3MDYsNyBAQCBzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYgdGVzdFBh
dGhPclVSTCkKIAogICAgIHJlc2V0RGVmYXVsdHNUb0NvbnNpc3RlbnRWYWx1ZXMoKTsKIAotICAg
IGdMYXlvdXRUZXN0Q29udHJvbGxlciA9IExheW91dFRlc3RDb250cm9sbGVyOjpjcmVhdGUodGVz
dFVSTCwgZXhwZWN0ZWRQaXhlbEhhc2gpOworICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlciA9IExh
eW91dFRlc3RDb250cm9sbGVyOjpjcmVhdGUodGVzdFVSTCwgY29tbWFuZC5leHBlY3RlZFBpeGVs
SGFzaCk7CiAgICAgdG9wTG9hZGluZ0ZyYW1lID0gMDsKICAgICBkb25lID0gZmFsc2U7CiAKQEAg
LTE0NDcsNyArMTQ0MSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAgICAg
ICAgIHByaW50U2VwYXJhdG9ycyA9IHRydWU7CiAgICAgICAgIHJ1blRlc3RpbmdTZXJ2ZXJMb29w
KCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnRTZXBhcmF0b3JzID0gKG9wdGluZCA8IGFy
Z2MtMSB8fCAoZHVtcFBpeGVscyAmJiBkdW1wVHJlZSkpOworICAgICAgICBwcmludFNlcGFyYXRv
cnMgPSAob3B0aW5kIDwgYXJnYy0xIHx8IChkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgJiYgZHVt
cFRyZWUpKTsKICAgICAgICAgZm9yIChpbnQgaSA9IG9wdGluZDsgaSAhPSBhcmdjOyArK2kpCiAg
ICAgICAgICAgICBydW5UZXN0KGFyZ3ZbaV0pOwogICAgIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9EdW1wUmVuZGVyVHJlZS5tbQppbmRleCBhYmJhNTM1ZWRkYzg4YTM5NDkwMjk0ZmQ0NTFh
MzkxOTY4ZmNjM2QxLi4zZjlkNDI2NjQ1MWZhY2JlMTE1MDk2MjAzNTU5NzkwMzJiZWJlNmZiIDEw
MDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KKysr
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCkBAIC0xNDAsNyAr
MTQwLDcgQEAgc3RhdGljIEhpc3RvcnlEZWxlZ2F0ZSAqaGlzdG9yeURlbGVnYXRlOwogUG9saWN5
RGVsZWdhdGUgKnBvbGljeURlbGVnYXRlOwogU3RvcmFnZVRyYWNrZXJEZWxlZ2F0ZSAqc3RvcmFn
ZURlbGVnYXRlOwogCi1zdGF0aWMgaW50IGR1bXBQaXhlbHM7CitzdGF0aWMgYm9vbCBkdW1wUGl4
ZWxzRm9yQ3VycmVudFRlc3Q7CiBzdGF0aWMgaW50IHRocmVhZGVkOwogc3RhdGljIGludCBkdW1w
VHJlZSA9IFlFUzsKIHN0YXRpYyBpbnQgdXNlVGltZW91dFdhdGNoZG9nID0gWUVTOwpAQCAtNzgw
LDcgKzc4MCw2IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVHbG9iYWxzRnJvbUNvbW1hbmRMaW5l
T3B0aW9ucyhpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdCiB7CiAgICAgc3RydWN0IG9wdGlv
biBvcHRpb25zW10gPSB7CiAgICAgICAgIHsibm90cmVlIiwgbm9fYXJndW1lbnQsICZkdW1wVHJl
ZSwgTk99LAotICAgICAgICB7InBpeGVsLXRlc3RzIiwgbm9fYXJndW1lbnQsICZkdW1wUGl4ZWxz
LCBZRVN9LAogICAgICAgICB7InRyZWUiLCBub19hcmd1bWVudCwgJmR1bXBUcmVlLCBZRVN9LAog
ICAgICAgICB7InRocmVhZGVkIiwgbm9fYXJndW1lbnQsICZ0aHJlYWRlZCwgWUVTfSwKICAgICAg
ICAgeyJjb21wbGV4LXRleHQiLCBub19hcmd1bWVudCwgJmZvcmNlQ29tcGxleFRleHQsIFlFU30s
CkBAIC04NDksNyArODQ4LDcgQEAgdm9pZCBkdW1wUmVuZGVyVHJlZShpbnQgYXJnYywgY29uc3Qg
Y2hhciAqYXJndltdKQogICAgIGluaXRpYWxpemVHbG9iYWxzRnJvbUNvbW1hbmRMaW5lT3B0aW9u
cyhhcmdjLCBhcmd2KTsKICAgICBwcmVwYXJlQ29uc2lzdGVudFRlc3RpbmdFbnZpcm9ubWVudCgp
OwogICAgIGFkZFRlc3RQbHVnaW5zVG9QbHVnaW5TZWFyY2hQYXRoKGFyZ3ZbMF0pOwotICAgIGlm
IChkdW1wUGl4ZWxzKQorICAgIGlmIChkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QpCiAgICAgICAg
IGluc3RhbGxTaWduYWxIYW5kbGVycygpOwogCiAgICAgaWYgKGZvcmNlQ29tcGxleFRleHQpCkBA
IC04NzQsNyArODczLDcgQEAgdm9pZCBkdW1wUmVuZGVyVHJlZShpbnQgYXJnYywgY29uc3QgY2hh
ciAqYXJndltdKQogICAgICAgICBwcmludFNlcGFyYXRvcnMgPSBZRVM7CiAgICAgICAgIHJ1blRl
c3RpbmdTZXJ2ZXJMb29wKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnRTZXBhcmF0b3Jz
ID0gKG9wdGluZCA8IGFyZ2MtMSB8fCAoZHVtcFBpeGVscyAmJiBkdW1wVHJlZSkpOworICAgICAg
ICBwcmludFNlcGFyYXRvcnMgPSAob3B0aW5kIDwgYXJnYyAtIDEgfHwgKGR1bXBQaXhlbHNGb3JD
dXJyZW50VGVzdCAmJiBkdW1wVHJlZSkpOwogICAgICAgICBmb3IgKGludCBpID0gb3B0aW5kOyBp
ICE9IGFyZ2M7ICsraSkKICAgICAgICAgICAgIHJ1blRlc3QoYXJndltpXSk7CiAgICAgfQpAQCAt
MTE5NSw3ICsxMTk0LDcgQEAgdm9pZCBkdW1wKCkKICAgICAgICAgfSAgICAgICAgICAgIAogICAg
IH0KIAotICAgIGlmIChkdW1wUGl4ZWxzICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+Z2VuZXJh
dGVQaXhlbFJlc3VsdHMoKSkKKyAgICBpZiAoZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ICYmIGdM
YXlvdXRUZXN0Q29udHJvbGxlci0+Z2VuZXJhdGVQaXhlbFJlc3VsdHMoKSkKICAgICAgICAgLy8g
RklYTUU6IHdoZW4gaXNQcmludGluZyBpcyBzZXQsIGR1bXAgdGhlIGltYWdlIHdpdGggcGFnZSBz
ZXBhcmF0b3JzLgogICAgICAgICBkdW1wV2ViVmlld0FzUGl4ZWxzQW5kQ29tcGFyZVdpdGhFeHBl
Y3RlZChnTGF5b3V0VGVzdENvbnRyb2xsZXItPmV4cGVjdGVkUGl4ZWxIYXNoKCkpOwogCkBAIC0x
Mjc2LDE5ICsxMjc1LDEzIEBAIHN0YXRpYyB2b2lkIHJlc2V0V2ViVmlld1RvQ29uc2lzdGVudFN0
YXRlQmVmb3JlVGVzdGluZygpCiAgICAgW21haW5GcmFtZSBfY2xlYXJPcGVuZXJdOwogfQogCi1z
dGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYgdGVzdFBhdGhPclVSTCkKK3N0YXRpYyB2
b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBpbnB1dExpbmUpCiB7Ci0gICAgQVNTRVJUKCF0ZXN0
UGF0aE9yVVJMLmVtcHR5KCkpOwotICAgIAotICAgIC8vIExvb2sgZm9yICInIiBhcyBhIHNlcGFy
YXRvciBiZXR3ZWVuIHRoZSBwYXRoIG9yIFVSTCwgYW5kIHRoZSBwaXhlbCBkdW1wIGhhc2ggdGhh
dCBmb2xsb3dzLgotICAgIHN0cmluZyBwYXRoT3JVUkwodGVzdFBhdGhPclVSTCk7Ci0gICAgc3Ry
aW5nIGV4cGVjdGVkUGl4ZWxIYXNoOwotICAgIAotICAgIHNpemVfdCBzZXBhcmF0b3JQb3MgPSBw
YXRoT3JVUkwuZmluZCgiJyIpOwotICAgIGlmIChzZXBhcmF0b3JQb3MgIT0gc3RyaW5nOjpucG9z
KSB7Ci0gICAgICAgIHBhdGhPclVSTCA9IHN0cmluZyh0ZXN0UGF0aE9yVVJMLCAwLCBzZXBhcmF0
b3JQb3MpOwotICAgICAgICBleHBlY3RlZFBpeGVsSGFzaCA9IHN0cmluZyh0ZXN0UGF0aE9yVVJM
LCBzZXBhcmF0b3JQb3MgKyAxKTsKLSAgICB9CisgICAgQVNTRVJUKCFpbnB1dExpbmUuZW1wdHko
KSk7CisKKyAgICBUZXN0Q29tbWFuZCBjb21tYW5kID0gcGFyc2VJbnB1dExpbmUoaW5wdXRMaW5l
KTsKKyAgICBjb25zdCBzdHJpbmcmIHBhdGhPclVSTCA9IGNvbW1hbmQucGF0aE9yVVJMOworICAg
IGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCA9IGNvbW1hbmQuc2hvdWxkRHVtcFBpeGVsczsKIAog
ICAgIE5TU3RyaW5nICpwYXRoT3JVUkxTdHJpbmcgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhT
dHJpbmc6cGF0aE9yVVJMLmNfc3RyKCldOwogICAgIGlmICghcGF0aE9yVVJMU3RyaW5nKSB7CkBA
IC0xMzEwLDcgKzEzMDMsNyBAQCBzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYgdGVz
dFBhdGhPclVSTCkKICAgICAKICAgICByZXNldFdlYlZpZXdUb0NvbnNpc3RlbnRTdGF0ZUJlZm9y
ZVRlc3RpbmcoKTsKIAotICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlciA9IExheW91dFRlc3RDb250
cm9sbGVyOjpjcmVhdGUodGVzdFVSTCwgZXhwZWN0ZWRQaXhlbEhhc2gpOworICAgIGdMYXlvdXRU
ZXN0Q29udHJvbGxlciA9IExheW91dFRlc3RDb250cm9sbGVyOjpjcmVhdGUodGVzdFVSTCwgY29t
bWFuZC5leHBlY3RlZFBpeGVsSGFzaCk7CiAgICAgdG9wTG9hZGluZ0ZyYW1lID0gbmlsOwogICAg
IEFTU0VSVCghZHJhZ2dpbmdJbmZvKTsgLy8gdGhlIHByZXZpb3VzIHRlc3Qgc2hvdWxkIGhhdmUg
Y2FsbGVkIGV2ZW50U2VuZGVyLm1vdXNlVXAgdG8gZHJvcCEKICAgICByZWxlYXNlQW5kWmVybygm
ZHJhZ2dpbmdJbmZvKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBS
ZW5kZXJUcmVlLnBybyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlLnBy
bwppbmRleCBmNDdmYjQzNDRiOWVmODNhNWFhNDZiYjU2ODNkOTIzMTQ5NGFhMTI1Li44MzM4NzBi
Y2FjOWE4MmVkY2VlODFlZDVkYmEzMTkxMGFjZjBmMGYyIDEwMDY0NAotLS0gYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5wcm8KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvCkBAIC0yNSw2ICsyNSw3IEBAIGNvbnRhaW5zKERFRklO
RVMsIEhBVkVfRk9OVENPTkZJRz0xKTogUEtHQ09ORklHICs9IGZvbnRjb25maWcKIAogSEVBREVS
UyArPSBcCiAgICAgJCRQV0QvLi4vV29ya1F1ZXVlLmggXAorICAgICQkUFdELy4uL0R1bXBSZW5k
ZXJUcmVlLmggXAogICAgIER1bXBSZW5kZXJUcmVlUXQuaCBcCiAgICAgRXZlbnRTZW5kZXJRdC5o
IFwKICAgICBUZXh0SW5wdXRDb250cm9sbGVyUXQuaCBcCkBAIC0zNiw2ICszNyw3IEBAIEhFQURF
UlMgKz0gXAogCiBTT1VSQ0VTICs9IFwKICAgICAkJFBXRC8uLi9Xb3JrUXVldWUuY3BwIFwKKyAg
ICAkJFBXRC8uLi9EdW1wUmVuZGVyVHJlZUNvbW1vbi5jcHAgXAogICAgIER1bXBSZW5kZXJUcmVl
UXQuY3BwIFwKICAgICBFdmVudFNlbmRlclF0LmNwcCBcCiAgICAgVGV4dElucHV0Q29udHJvbGxl
clF0LmNwcCBcCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVy
VHJlZVF0LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3Bw
CmluZGV4IDBlY2Y2MjJmM2Y4ZGRhNTZjNGM4OGNlZmNmMDhhM2M5OGNmMjM3YzQuLjVhNWNiOTZh
ZGVjOTNjZDBlYjY4NTAwZTc2ZWMzMWVmZGRhMDk3YWYgMTAwNzU1Ci0tLSBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAgKi8KIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCiAKICNpbmNsdWRl
ICJEdW1wUmVuZGVyVHJlZVF0LmgiCiAjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQu
aCIKQEAgLTY5MCw0NCArNjkxLDI3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWU6OmxvYWROZXh0VGVz
dEluU3RhbmRBbG9uZU1vZGUoKQogCiB2b2lkIER1bXBSZW5kZXJUcmVlOjpwcm9jZXNzTGluZShj
b25zdCBRU3RyaW5nICZpbnB1dCkKIHsKLSAgICBRU3RyaW5nIGxpbmUgPSBpbnB1dDsKLQotICAg
IG1fZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gZmFsc2U7Ci0gICAgbV9leHBlY3RlZEhhc2gg
PSBRU3RyaW5nKCk7Ci0gICAgLy8gc2luZ2xlIHF1b3RlIG1hcmtzIHRoZSBwaXhlbCBkdW1wIGhh
c2gKLSAgICBpbnQgaW5kZXhPZkZpcnN0U2VwYXJhdG9yID0gbGluZS5pbmRleE9mKCdcJycpOwot
ICAgIGludCBpbmRleE9mU2Vjb25kU2VwYXJhdG9yID0gbGluZS5pbmRleE9mKCdcJycsIGluZGV4
T2ZGaXJzdFNlcGFyYXRvciArIDEpOwotICAgIGlmIChpbmRleE9mRmlyc3RTZXBhcmF0b3IgPiAt
MSkgewotICAgICAgICBpbnQgaW5kZXhPZlBpeGVsSGFzaCA9IGluZGV4T2ZGaXJzdFNlcGFyYXRv
ciArIDE7Ci0KLSAgICAgICAgLy8gTlJXVCBwYXNzZXMgLS1waXhlbC10ZXN0IGlmIHdlIHNob3Vs
ZCBkdW1wIHBpeGVscyBmb3IgdGhlIHRlc3QuCi0gICAgICAgIGNvbnN0IFFTdHJpbmcgZXhwZWN0
ZWRBcmcoUUxhdGluMVN0cmluZygiLS1waXhlbC10ZXN0IikpOwotICAgICAgICBRU3RyaW5nIGFy
Z1Rlc3QgPSBsaW5lLm1pZChpbmRleE9mRmlyc3RTZXBhcmF0b3IgKyAxLCBleHBlY3RlZEFyZy5s
ZW5ndGgoKSk7Ci0gICAgICAgIGlmIChhcmdUZXN0ID09IGV4cGVjdGVkQXJnKSB7Ci0gICAgICAg
ICAgICBtX2R1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCA9IHRydWU7Ci0gICAgICAgICAgICBpbmRl
eE9mUGl4ZWxIYXNoID0gaW5kZXhPZlNlY29uZFNlcGFyYXRvciA9PSAtMSA/IC0xIDogaW5kZXhP
ZlNlY29uZFNlcGFyYXRvciArIDE7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGluZGV4T2ZQaXhl
bEhhc2ggIT0gLTEgJiYgaW5kZXhPZlBpeGVsSGFzaCA8IGxpbmUuc2l6ZSgpKQotICAgICAgICAg
ICAgbV9leHBlY3RlZEhhc2ggPSBsaW5lLm1pZChpbmRleE9mUGl4ZWxIYXNoKTsKLSAgICAgICAg
bGluZS5yZW1vdmUoaW5kZXhPZkZpcnN0U2VwYXJhdG9yLCBsaW5lLmxlbmd0aCgpKTsKLSAgICB9
Ci0KLSAgICBpZiAobGluZS5zdGFydHNXaXRoKFFMYXRpbjFTdHJpbmcoImh0dHA6IikpCi0gICAg
ICAgICAgICB8fCBsaW5lLnN0YXJ0c1dpdGgoUUxhdGluMVN0cmluZygiaHR0cHM6IikpCi0gICAg
ICAgICAgICB8fCBsaW5lLnN0YXJ0c1dpdGgoUUxhdGluMVN0cmluZygiZmlsZToiKSkKLSAgICAg
ICAgICAgIHx8IGxpbmUgPT0gUUxhdGluMVN0cmluZygiYWJvdXQ6YmxhbmsiKSkgewotICAgICAg
ICBvcGVuKFFVcmwobGluZSkpOworICAgIFRlc3RDb21tYW5kIGNvbW1hbmQgPSBwYXJzZUlucHV0
TGluZShzdGQ6OnN0cmluZyhpbnB1dC50b0xhdGluMSgpLmNvbnN0RGF0YSgpKSk7CisgICAgUVN0
cmluZyBwYXRoT3JVUkwgPSBRTGF0aW4xU3RyaW5nKGNvbW1hbmQucGF0aE9yVVJMLmNfc3RyKCkp
OworICAgIG1fZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gY29tbWFuZC5zaG91bGREdW1wUGl4
ZWxzOworICAgIG1fZXhwZWN0ZWRIYXNoID0gUUxhdGluMVN0cmluZyhjb21tYW5kLmV4cGVjdGVk
UGl4ZWxIYXNoLmNfc3RyKCkpOworCisgICAgaWYgKHBhdGhPclVSTC5zdGFydHNXaXRoKFFMYXRp
bjFTdHJpbmcoImh0dHA6IikpCisgICAgICAgICAgICB8fCBwYXRoT3JVUkwuc3RhcnRzV2l0aChR
TGF0aW4xU3RyaW5nKCJodHRwczoiKSkKKyAgICAgICAgICAgIHx8IHBhdGhPclVSTC5zdGFydHNX
aXRoKFFMYXRpbjFTdHJpbmcoImZpbGU6IikpCisgICAgICAgICAgICB8fCBwYXRoT3JVUkwgPT0g
UUxhdGluMVN0cmluZygiYWJvdXQ6YmxhbmsiKSkgeworICAgICAgICBvcGVuKFFVcmwocGF0aE9y
VVJMKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgUUZpbGVJbmZvIGZpKGxpbmUpOworICAgICAg
ICBRRmlsZUluZm8gZmkocGF0aE9yVVJMKTsKIAogICAgICAgICBpZiAoIWZpLmV4aXN0cygpKSB7
CiAgICAgICAgICAgICBRRGlyIGN1cnJlbnREaXIgPSBRRGlyOjpjdXJyZW50UGF0aCgpOwogCiAg
ICAgICAgICAgICAvLyBUcnkgdG8gYmUgc21hcnQgYWJvdXQgd2hlcmUgdGhlIHRlc3QgaXMgbG9j
YXRlZAogICAgICAgICAgICAgaWYgKGN1cnJlbnREaXIuZGlyTmFtZSgpID09IFFMYXRpbjFTdHJp
bmcoIkxheW91dFRlc3RzIikpCi0gICAgICAgICAgICAgICAgZmkgPSBRRmlsZUluZm8oY3VycmVu
dERpciwgbGluZS5yZXBsYWNlKFFSZWdFeHAoIi4qP0xheW91dFRlc3RzLyguKikiKSwgIlxcMSIp
KTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCFsaW5lLmNvbnRhaW5zKFFMYXRpbjFTdHJpbmcoIkxh
eW91dFRlc3RzIikpKQotICAgICAgICAgICAgICAgIGZpID0gUUZpbGVJbmZvKGN1cnJlbnREaXIs
IGxpbmUucHJlcGVuZChRTGF0aW4xU3RyaW5nKCJMYXlvdXRUZXN0cy8iKSkpOworICAgICAgICAg
ICAgICAgIGZpID0gUUZpbGVJbmZvKGN1cnJlbnREaXIsIHBhdGhPclVSTC5yZXBsYWNlKFFSZWdF
eHAoIi4qP0xheW91dFRlc3RzLyguKikiKSwgIlxcMSIpKTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KCFwYXRoT3JVUkwuY29udGFpbnMoUUxhdGluMVN0cmluZygiTGF5b3V0VGVzdHMiKSkpCisgICAg
ICAgICAgICAgICAgZmkgPSBRRmlsZUluZm8oY3VycmVudERpciwgcGF0aE9yVVJMLnByZXBlbmQo
UUxhdGluMVN0cmluZygiTGF5b3V0VGVzdHMvIikpKTsKIAogICAgICAgICAgICAgaWYgKCFmaS5l
eGlzdHMoKSkgewogICAgICAgICAgICAgICAgIGVtaXQgcmVhZHkoKTsKZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwCmluZGV4IGY0MDJhMDJjYTM2MmM1Mjc5ZGU1
YTVjOGMxZTBjZTlkZjM2MmFiYWQuLjMxMjQzMGQ1Njk4OTU0OGJjM2VjYWQxM2Y4ZGYxODMwOTZj
MTdjODUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJl
ZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcApA
QCAtODAsNyArODAsNyBAQCBzdGF0aWMgTFBDV1NUUiBmb250c0Vudmlyb25tZW50VmFyaWFibGUg
PSBMIldFQktJVF9URVNURk9OVFMiOwogY29uc3QgTFBDV1NUUiBrRHVtcFJlbmRlclRyZWVDbGFz
c05hbWUgPSBMIkR1bXBSZW5kZXJUcmVlV2luZG93IjsKIAogc3RhdGljIGJvb2wgZHVtcFRyZWUg
PSB0cnVlOwotc3RhdGljIGJvb2wgZHVtcFBpeGVsczsKK3N0YXRpYyBib29sIGR1bXBQaXhlbHNG
b3JDdXJyZW50VGVzdDsKIHN0YXRpYyBib29sIGR1bXBBbGxQaXhlbHM7CiBzdGF0aWMgYm9vbCBw
cmludFNlcGFyYXRvcnM7CiBzdGF0aWMgYm9vbCBsZWFrQ2hlY2tpbmcgPSBmYWxzZTsKQEAgLTc1
OSw3ICs3NTksNyBAQCB2b2lkIGR1bXAoKQogICAgICAgICBmZmx1c2goc3RkZXJyKTsKICAgICB9
CiAKLSAgICBpZiAoZHVtcFBpeGVscworICAgIGlmIChkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QK
ICAgICAgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5nZW5lcmF0ZVBpeGVsUmVzdWx0cygpCiAg
ICAgICYmICFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBET01Bc1dlYkFyY2hpdmUoKQogICAg
ICAmJiAhZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wU291cmNlQXNXZWJBcmNoaXZlKCkpCkBA
IC05NDgsMjAgKzk0OCwxNCBAQCBzdGF0aWMgdm9pZCBzaXplV2ViVmlld0ZvckN1cnJlbnRUZXN0
KCkKICAgICA6OlNldFdpbmRvd1Bvcyh3ZWJWaWV3V2luZG93LCAwLCAwLCAwLCB3aWR0aCwgaGVp
Z2h0LCBTV1BfTk9NT1ZFKTsKIH0KIAotc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcm
IHRlc3RQYXRoT3JVUkwpCitzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYgaW5wdXRM
aW5lKQogeworICAgIFRlc3RDb21tYW5kIGNvbW1hbmQgPSBwYXJzZUlucHV0TGluZShpbnB1dExp
bmUpOworICAgIGNvbnN0IHN0cmluZyYgcGF0aE9yVVJMID0gY29tbWFuZC5wYXRoT3JVUkw7Cisg
ICAgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gY29tbWFuZC5zaG91bGREdW1wUGl4ZWxzOwor
CiAgICAgc3RhdGljIEJTVFIgbWV0aG9kQlN0ciA9IFN5c0FsbG9jU3RyaW5nKFRFWFQoIkdFVCIp
KTsKIAotICAgIC8vIExvb2sgZm9yICInIiBhcyBhIHNlcGFyYXRvciBiZXR3ZWVuIHRoZSBwYXRo
IG9yIFVSTCwgYW5kIHRoZSBwaXhlbCBkdW1wIGhhc2ggdGhhdCBmb2xsb3dzLgotICAgIHN0cmlu
ZyBwYXRoT3JVUkwodGVzdFBhdGhPclVSTCk7Ci0gICAgc3RyaW5nIGV4cGVjdGVkUGl4ZWxIYXNo
OwotICAgIAotICAgIHNpemVfdCBzZXBhcmF0b3JQb3MgPSBwYXRoT3JVUkwuZmluZCgiJyIpOwot
ICAgIGlmIChzZXBhcmF0b3JQb3MgIT0gc3RyaW5nOjpucG9zKSB7Ci0gICAgICAgIHBhdGhPclVS
TCA9IHN0cmluZyh0ZXN0UGF0aE9yVVJMLCAwLCBzZXBhcmF0b3JQb3MpOwotICAgICAgICBleHBl
Y3RlZFBpeGVsSGFzaCA9IHN0cmluZyh0ZXN0UGF0aE9yVVJMLCBzZXBhcmF0b3JQb3MgKyAxKTsK
LSAgICB9Ci0gICAgCiAgICAgQlNUUiB1cmxCU3RyOwogIAogICAgIENGU3RyaW5nUmVmIHN0ciA9
IENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmcoMCwgcGF0aE9yVVJMLmNfc3RyKCksIGtDRlN0cmlu
Z0VuY29kaW5nV2luZG93c0xhdGluMSk7CkBAIC05ODMsNyArOTc3LDcgQEAgc3RhdGljIHZvaWQg
cnVuVGVzdChjb25zdCBzdHJpbmcmIHRlc3RQYXRoT3JVUkwpCiAKICAgICBDRlJlbGVhc2UodXJs
KTsKIAotICAgIDo6Z0xheW91dFRlc3RDb250cm9sbGVyID0gTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmNyZWF0ZShwYXRoT3JVUkwsIGV4cGVjdGVkUGl4ZWxIYXNoKTsKKyAgICA6OmdMYXlvdXRUZXN0
Q29udHJvbGxlciA9IExheW91dFRlc3RDb250cm9sbGVyOjpjcmVhdGUocGF0aE9yVVJMLCBjb21t
YW5kLmV4cGVjdGVkUGl4ZWxIYXNoKTsKICAgICBkb25lID0gZmFsc2U7CiAgICAgdG9wTG9hZGlu
Z0ZyYW1lID0gMDsKIApAQCAtMTMzNywxMSArMTMzMSw2IEBAIGV4dGVybiAiQyIgX19kZWNsc3Bl
YyhkbGxleHBvcnQpIGludCBXSU5BUEkgZGxsTGF1bmNoZXJFbnRyeVBvaW50KGludCBhcmdjLCBj
b25zCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghc3Ry
aWNtcChhcmd2W2ldLCAiLS1waXhlbC10ZXN0cyIpKSB7Ci0gICAgICAgICAgICBkdW1wUGl4ZWxz
ID0gdHJ1ZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KICAgICAgICAgaWYg
KCFzdHJpY21wKGFyZ3ZbaV0sICItLWNvbXBsZXgtdGV4dCIpKSB7CiAgICAgICAgICAgICBmb3Jj
ZUNvbXBsZXhUZXh0ID0gdHJ1ZTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLnZjcHJvaiBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS52Y3Byb2oKaW5kZXggNDg0M2MzOTBlN2M2
YjUyZTI0ZTJiMzc3MDY1NDc4ZDA3NmMwOTdmYS4uN2UyNDJhMWNkZTRhMmZjY2MxYTI0NzFiNjE2
OWIzZTMzZWFkY2RjZCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBS
ZW5kZXJUcmVlLnZjcHJvagorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRl
clRyZWUudmNwcm9qCkBAIC01NjMsNiArNTYzLDEwIEBACiAJCQk+CiAJCTwvRmlsZT4KIAkJPEZp
bGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cRHVtcFJlbmRlclRyZWVDb21tb24uY3BwIgorCQkJPgor
CQk8L0ZpbGU+CisJCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXER1bXBSZW5kZXJUcmVlUHJl
Zml4LmgiCiAJCQk+CiAJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L3dzY3JpcHQgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93c2NyaXB0CmluZGV4IDY0NWM3ZDY0MTU5
OGFmZTJmMTRlMTYzYWQ0Y2NlZjI3YzUyOGI3NjQuLmIzMjkyOTQ1MGIyOGFhODg5MmMzM2UzYmUw
ZDk2ZjBlNmUxMTM0MTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dzY3JpcHQK
KysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd3NjcmlwdApAQCAtNDAsNiArNDAsNyBAQCBpbmNs
dWRlX3BhdGhzID0gWwogICAgICAgICAgICAgICAgICd3eCcKICAgICAgICAgICAgICAgICBdCiBz
b3VyY2VzID0gWworICAgICAgICAgICAgJ0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcCcsCiAgICAg
ICAgICAgICAnTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwJywKICAgICAgICAgICAgICdXb3JrUXVl
dWUuY3BwJywKICAgICAgICAgICAgICd3eC9EdW1wUmVuZGVyVHJlZVd4LmNwcCcsCmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93eC9EdW1wUmVuZGVyVHJlZVd4LmNwcCBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL3d4L0R1bXBSZW5kZXJUcmVlV3guY3BwCmluZGV4IDMxYWRkMTFhMmVi
NzRkMWY0ZDgzMjk0NzlmNDE5ZjEwN2ZmYmE4OGYuLjQ1Yjg1MmQ4OGFiOWJkYTI5MWZiMWVkMjc3
YWNhNzUxZGZkMzUwOTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0R1bXBS
ZW5kZXJUcmVlV3guY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0R1bXBSZW5kZXJU
cmVlV3guY3BwCkBAIC01MCw3ICs1MCw3IEBACiB2b2xhdGlsZSBib29sIGRvbmUgPSB0cnVlOwog
dm9sYXRpbGUgYm9vbCBub3RpZmllZCA9IGZhbHNlOwogc3RhdGljIGJvb2wgcHJpbnRTZXBhcmF0
b3JzID0gdHJ1ZTsKLXN0YXRpYyBpbnQgZHVtcFBpeGVsczsKK3N0YXRpYyBpbnQgZHVtcFBpeGVs
c0ZvckN1cnJlbnRUZXN0Owogc3RhdGljIGludCBkdW1wVHJlZSA9IDE7CiB0aW1lX3Qgc3RhcnRU
aW1lOyAvLyB0byBkZXRlY3QgdGltZW91dHMgLyBmYWlsZWQgdGVzdHMKIApAQCAtMjAzLDcgKzIw
Myw3IEBAIHZvaWQgZHVtcCgpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoZHVtcFBpeGVs
cworICAgIGlmIChkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QKICAgICAgICAgJiYgZ0xheW91dFRl
c3RDb250cm9sbGVyLT5nZW5lcmF0ZVBpeGVsUmVzdWx0cygpCiAgICAgICAgICYmICFnTGF5b3V0
VGVzdENvbnRyb2xsZXItPmR1bXBET01Bc1dlYkFyY2hpdmUoKQogICAgICAgICAmJiAhZ0xheW91
dFRlc3RDb250cm9sbGVyLT5kdW1wU291cmNlQXNXZWJBcmNoaXZlKCkpIHsKQEAgLTIxOCwyNiAr
MjE4LDIxIEBAIHZvaWQgZHVtcCgpCiAgICAgZ0xheW91dFRlc3RDb250cm9sbGVyLmNsZWFyKCk7
CiB9CiAKLXN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgd3hTdHJpbmcgdGVzdFBhdGhPclVSTCkK
K3N0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgd3hTdHJpbmcgaW5wdXRMaW5lKQogewogICAgIGRv
bmUgPSBmYWxzZTsKICAgICB0aW1lKCZzdGFydFRpbWUpOwotICAgIHN0cmluZyBwYXRoT3JVUkxT
dHJpbmcodGVzdFBhdGhPclVSTC5jaGFyX3N0cigpKTsKLSAgICBzdHJpbmcgcGF0aE9yVVJMKHBh
dGhPclVSTFN0cmluZyk7Ci0gICAgc3RyaW5nIGV4cGVjdGVkUGl4ZWxIYXNoOwotCi0gICAgc2l6
ZV90IHNlcGFyYXRvclBvcyA9IHBhdGhPclVSTC5maW5kKCInIik7Ci0gICAgaWYgKHNlcGFyYXRv
clBvcyAhPSBzdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgcGF0aE9yVVJMID0gc3RyaW5nKHBhdGhP
clVSTFN0cmluZywgMCwgc2VwYXJhdG9yUG9zKTsKLSAgICAgICAgZXhwZWN0ZWRQaXhlbEhhc2gg
PSBzdHJpbmcocGF0aE9yVVJMU3RyaW5nLCBzZXBhcmF0b3JQb3MgKyAxKTsKLSAgICB9CisKKyAg
ICBUZXN0Q29tbWFuZCBjb21tYW5kID0gcGFyc2VJbnB1dExpbmUoc3RkOjpzdHJpbmcoaW5wdXRM
aW5lLlRvQXNjaWkoKSkpOworICAgIHN0cmluZyYgcGF0aE9yVVJMID0gY29tbWFuZC5wYXRoT3JV
Ukw7CisgICAgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gY29tbWFuZC5zaG91bGREdW1wUGl4
ZWxzOwogICAgIAogICAgIC8vIENVUkwgaXNuJ3QgaGFwcHkgaWYgd2UgZG9uJ3QgaGF2ZSBhIHBy
b3RvY29sLgogICAgIHNpemVfdCBodHRwID0gcGF0aE9yVVJMLmZpbmQoImh0dHA6Ly8iKTsKICAg
ICBpZiAoaHR0cCA9PSBzdHJpbmc6Om5wb3MpCiAgICAgICAgIHBhdGhPclVSTC5pbnNlcnQoMCwg
ImZpbGU6Ly8iKTsKICAgICAKLSAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXIgPSBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6Y3JlYXRlKHBhdGhPclVSTCwgZXhwZWN0ZWRQaXhlbEhhc2gpOworICAgIGdM
YXlvdXRUZXN0Q29udHJvbGxlciA9IExheW91dFRlc3RDb250cm9sbGVyOjpjcmVhdGUocGF0aE9y
VVJMLCBjb21tYW5kLmV4cGVjdGVkUGl4ZWxIYXNoKTsKICAgICBpZiAoIWdMYXlvdXRUZXN0Q29u
dHJvbGxlcikgewogICAgICAgICB3eFRoZUFwcC0+RXhpdE1haW5Mb29wKCk7CiAgICAgfQpAQCAt
MjgyLDExICsyNzcsNiBAQCBib29sIE15QXBwOjpPbkluaXQoKQogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICghb3B0aW9uLkNtcE5vQ2FzZShf
VCgiLS1waXhlbC10ZXN0cyIpKSkgewotICAgICAgICAgICAgZHVtcFBpeGVscyA9IHRydWU7Ci0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICAKICAgICAgICAgaWYgKCFv
cHRpb24uQ21wTm9DYXNlKF9UKCItLXRyZWUiKSkpIHsKICAgICAgICAgICAgIGR1bXBUcmVlID0g
dHJ1ZTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzIzLDcgKzMxMyw3IEBAIGJvb2wgTXlB
cHA6Ok9uSW5pdCgpCiAgICAgICAgIH0KICAgICAKICAgICB9IGVsc2UgewotICAgICAgICBwcmlu
dFNlcGFyYXRvcnMgPSAob3B0aW5kIDwgYXJnYy0xIHx8IChkdW1wUGl4ZWxzICYmIGR1bXBUcmVl
KSk7CisgICAgICAgIHByaW50U2VwYXJhdG9ycyA9IChvcHRpbmQgPCBhcmdjIC0gMSB8fCAoZHVt
cFBpeGVsc0ZvckN1cnJlbnRUZXN0ICYmIGR1bXBUcmVlKSk7CiAgICAgICAgIGZvciAoaW50IGkg
PSBvcHRpbmQ7IGkgIT0gYXJnYzsgKytpKSB7CiAgICAgICAgICAgICBydW5UZXN0KHd4VGhlQXBw
LT5hcmd2WzFdKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvR05VbWFrZWZpbGUuYW0g
Yi9Ub29scy9HTlVtYWtlZmlsZS5hbQppbmRleCBkZjlhNzFmMThmOTU4MDdlZjRmZDZmN2Q3YzI3
ZDMxMWZhMzIxYWMyLi5mODVhOWQxMmViNzQ1NDIzMTUyMjUxMTA2MmVlMjdmNWE0MDg5ZDQyIDEw
MDY0NAotLS0gYS9Ub29scy9HTlVtYWtlZmlsZS5hbQorKysgYi9Ub29scy9HTlVtYWtlZmlsZS5h
bQpAQCAtMTA2LDYgKzEwNiw3IEBAIGVuZGlmCiAKIFByb2dyYW1zX0R1bXBSZW5kZXJUcmVlX1NP
VVJDRVMgPSBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuaCBcCisJVG9v
bHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWVDb21tb24uY3BwIFwKIAlUb29scy9EdW1w
UmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZVByZWZpeC5oIFwKIAlUb29scy9EdW1wUmVuZGVyVHJl
ZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAgXAogCVRvb2xzL0R1bXBSZW5kZXJUcmVlL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmggXApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9vbGQt
cnVuLXdlYmtpdC10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvb2xkLXJ1bi13ZWJraXQtdGVzdHMKaW5k
ZXggMDk0NDNjODdjMDJmMWU4Y2Y1YmRlNmQxYjA0NWM0ZGI5YmFiMDg4Mi4uZjA5MWMxOWJhYWI3
M2ZlNWVmNDJjNTE2YmFjYzE0NTEzNmYyZGMyMCAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9v
bGQtcnVuLXdlYmtpdC10ZXN0cworKysgYi9Ub29scy9TY3JpcHRzL29sZC1ydW4td2Via2l0LXRl
c3RzCkBAIC03NDgsMTIgKzc0OCwxNiBAQCBmb3IgbXkgJHRlc3QgKEB0ZXN0cykgewogICAgIHBy
aW50ICR0ZXN0c19ydW5fZmggIiR0ZXN0XG4iOwogCiAgICAgIyBUcnkgdG8gcmVhZCBleHBlY3Rl
ZCBoYXNoIGZpbGUgZm9yIHBpeGVsIHRlc3RzCi0gICAgbXkgJHN1ZmZpeEV4cGVjdGVkSGFzaCA9
ICIiOwotICAgIGlmICgkcGl4ZWxUZXN0cyAmJiAhJHJlc2V0UmVzdWx0cykgewotICAgICAgICBt
eSAkZXhwZWN0ZWRQaXhlbERpciA9IGV4cGVjdGVkRGlyZWN0b3J5Rm9yVGVzdCgkYmFzZSwgMCwg
InBuZyIpOwotICAgICAgICBpZiAobXkgJGV4cGVjdGVkSGFzaCA9IHJlYWRDaGVja3N1bUZyb21Q
bmcoRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkZXhwZWN0ZWRQaXhlbERpciwgIiRiYXNlLSRleHBlY3Rl
ZFRhZy5wbmciKSkpIHsKLSAgICAgICAgICAgICMgRm9ybWF0IGV4cGVjdGVkIGhhc2ggaW50byBh
IHN1ZmZpeCBzdHJpbmcgdGhhdCBpcyBhcHBlbmRlZCB0byB0aGUgcGF0aCAvIFVSTCBwYXNzZWQg
dG8gRFJULgotICAgICAgICAgICAgJHN1ZmZpeEV4cGVjdGVkSGFzaCA9ICInJGV4cGVjdGVkSGFz
aCI7CisgICAgbXkgJHN1ZmZpeFBpeGVsVGVzdCA9ICIiOworICAgIGlmICgkcGl4ZWxUZXN0cykg
eworICAgICAgICAjIDogaXMgdGhlIHNlcGFyYXRvciBiZXR3ZWVuIGFyZ3VtZW50cy4KKyAgICAg
ICAgJHN1ZmZpeFBpeGVsVGVzdCA9ICI6LS1waXhlbC10ZXN0IjsKKyAgICAgICAgaWYgKCEkcmVz
ZXRSZXN1bHRzKSB7CisgICAgICAgICAgICBteSAkZXhwZWN0ZWRQaXhlbERpciA9IGV4cGVjdGVk
RGlyZWN0b3J5Rm9yVGVzdCgkYmFzZSwgMCwgInBuZyIpOworICAgICAgICAgICAgaWYgKG15ICRl
eHBlY3RlZEhhc2ggPSByZWFkQ2hlY2tzdW1Gcm9tUG5nKEZpbGU6OlNwZWMtPmNhdGZpbGUoJGV4
cGVjdGVkUGl4ZWxEaXIsICIkYmFzZS0kZXhwZWN0ZWRUYWcucG5nIikpKSB7CisgICAgICAgICAg
ICAgICAgIyBGb3JtYXQgZXhwZWN0ZWQgaGFzaCBpbnRvIGEgc3VmZml4IHN0cmluZyB0aGF0IGlz
IGFwcGVuZGVkIHRvIHRoZSBwYXRoIC8gVVJMIHBhc3NlZCB0byBEUlQuCisgICAgICAgICAgICAg
ICAgJHN1ZmZpeFBpeGVsVGVzdCA9ICI6LS1waXhlbC10ZXN0OiRleHBlY3RlZEhhc2giOworICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC03ODksMTEgKzc5MywxMSBAQCBmb3Ig
bXkgJHRlc3QgKEB0ZXN0cykgewogICAgICAgICB9IGVsc2lmICgkdGVzdCAhfiAvXmh0dHBcL3Rl
c3RzXC9sb2NhbFwvLyAmJiAkdGVzdCAhfiAvXmh0dHBcL3Rlc3RzXC9zc2xcLy8pIHsKICAgICAg
ICAgICAgIG15ICRwYXRoID0gY2Fub25wYXRoKCR0ZXN0KTsKICAgICAgICAgICAgICRwYXRoID1+
IHMvXmh0dHBcL3Rlc3RzXC8vLzsKLSAgICAgICAgICAgIHByaW50IE9VVCAiaHR0cDovLzEyNy4w
LjAuMTokaHR0cGRQb3J0LyRwYXRoJHN1ZmZpeEV4cGVjdGVkSGFzaFxuIjsKKyAgICAgICAgICAg
IHByaW50IE9VVCAiaHR0cDovLzEyNy4wLjAuMTokaHR0cGRQb3J0LyRwYXRoJHN1ZmZpeFBpeGVs
VGVzdFxuIjsKICAgICAgICAgfSBlbHNpZiAoJHRlc3QgPX4gL15odHRwXC90ZXN0c1wvc3NsXC8v
KSB7CiAgICAgICAgICAgICBteSAkcGF0aCA9IGNhbm9ucGF0aCgkdGVzdCk7CiAgICAgICAgICAg
ICAkcGF0aCA9fiBzL15odHRwXC90ZXN0c1wvLy87Ci0gICAgICAgICAgICBwcmludCBPVVQgImh0
dHBzOi8vMTI3LjAuMC4xOiRodHRwZFNTTFBvcnQvJHBhdGgkc3VmZml4RXhwZWN0ZWRIYXNoXG4i
OworICAgICAgICAgICAgcHJpbnQgT1VUICJodHRwczovLzEyNy4wLjAuMTokaHR0cGRTU0xQb3J0
LyRwYXRoJHN1ZmZpeFBpeGVsVGVzdFxuIjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IG15ICR0ZXN0UGF0aCA9ICIkdGVzdERpcmVjdG9yeS8kdGVzdCI7CiAgICAgICAgICAgICBpZiAo
aXNDeWd3aW4oKSkgewpAQCAtODAxLDcgKzgwNSw3IEBAIGZvciBteSAkdGVzdCAoQHRlc3RzKSB7
CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICR0ZXN0UGF0aCA9IGNhbm9u
cGF0aCgkdGVzdFBhdGgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJpbnQgT1VUICIk
dGVzdFBhdGgkc3VmZml4RXhwZWN0ZWRIYXNoXG4iOworICAgICAgICAgICAgcHJpbnQgT1VUICIk
dGVzdFBhdGgkc3VmZml4UGl4ZWxUZXN0XG4iOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgbXkgJHRlc3RQYXRoID0gIiR0ZXN0RGlyZWN0b3J5LyR0ZXN0IjsKQEAgLTgxMCw3ICs4
MTQsNyBAQCBmb3IgbXkgJHRlc3QgKEB0ZXN0cykgewogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgJHRlc3RQYXRoID0gY2Fub25wYXRoKCR0ZXN0UGF0aCk7CiAgICAgICAgIH0KLSAgICAg
ICAgcHJpbnQgT1VUICIkdGVzdFBhdGgkc3VmZml4RXhwZWN0ZWRIYXNoXG4iIGlmIGRlZmluZWQg
JHRlc3RQYXRoOworICAgICAgICBwcmludCBPVVQgIiR0ZXN0UGF0aCRzdWZmaXhQaXhlbFRlc3Rc
biIgaWYgZGVmaW5lZCAkdGVzdFBhdGg7CiAgICAgfQogCiAgICAgIyBEdW1wUmVuZGVyVHJlZSBp
cyBleHBlY3RlZCB0byBkdW1wIHR3byAiYmxvY2tzIiB0byBzdGRvdXQgZm9yIGVhY2ggdGVzdC4K
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFz
ZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQpp
bmRleCBhZDcwZjA0MmRlOWVjYjYwMDYzYmVhNmY1MGMyODViZjllZmQ5YzEyLi45NDIxNTYyNGZl
MjdlYTQyNWFhNzNlODkxNTc3Y2M1ZTZlOTkwZTI5IDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CkBAIC0xMjc3LDIxICsxMjc3LDkgQEAg
Y2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICAgICAgICAgIHJldHVybiBzdWl0ZS5hcmdzCiAg
ICAgICAgIHJldHVybiBbXQogCi0gICAgZGVmIHN1cHBvcnRzX3N3aXRjaGluZ19waXhlbF90ZXN0
c19wZXJfdGVzdChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd3ZWJraXRfdGVz
dF9ydW5uZXInKToKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVybiBzZWxm
Ll9zdXBwb3J0c19zd2l0Y2hpbmdfcGl4ZWxfdGVzdHNfcGVyX3Rlc3QoKQotCi0gICAgZGVmIF9z
dXBwb3J0c19zd2l0Y2hpbmdfcGl4ZWxfdGVzdHNfcGVyX3Rlc3Qoc2VsZik6Ci0gICAgICAgICMg
RklYTUU6IGFsbCBwb3J0cyBzaG91bGQgc3VwcG9ydCBpdC4KLSAgICAgICAgcmV0dXJuIEZhbHNl
Ci0KICAgICBkZWYgc2hvdWxkX3J1bl9hc19waXhlbF90ZXN0KHNlbGYsIHRlc3RfaW5wdXQpOgog
ICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0czoKICAgICAgICAgICAgIHJl
dHVybiBGYWxzZQotICAgICAgICBpZiBub3Qgc2VsZi5zdXBwb3J0c19zd2l0Y2hpbmdfcGl4ZWxf
dGVzdHNfcGVyX3Rlc3QoKToKLSAgICAgICAgICAgICMgQ2Fubm90IGRvIG1vcmUgZmlsdGVyaW5n
IHdpdGhvdXQgdGhpcy4KLSAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIGlmIHNlbGYu
X29wdGlvbnMucGl4ZWxfdGVzdF9kaXJlY3RvcmllczoKICAgICAgICAgICAgIHJldHVybiBhbnko
dGVzdF9pbnB1dC50ZXN0X25hbWUuc3RhcnRzd2l0aChkaXJlY3RvcnkpIGZvciBkaXJlY3Rvcnkg
aW4gc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0X2RpcmVjdG9yaWVzKQogICAgICAgICByZXR1cm4g
c2VsZi5fc2hvdWxkX3J1bl9hc19waXhlbF90ZXN0KHRlc3RfaW5wdXQpCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlci5weSBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5CmluZGV4IDc4MTgy
M2I4ZDY3MGE2ZWI4ZTUyZTA3NjhiZTY2NGIxMWQ2MzAzM2MuLjJlYjFlMTRiNTJiY2Q3MjM1ZjM1
NWMxYTk3NDA2ODZmOTViY2M4ZDYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5CkBAIC0yOTMsOCArMjkzLDYgQEAgY2xhc3MgRHJp
dmVyKG9iamVjdCk6CiAKICAgICAgICAgY21kLmV4dGVuZChzZWxmLl9wb3J0LmdldF9vcHRpb24o
J2FkZGl0aW9uYWxfZHJ0X2ZsYWcnLCBbXSkpCiAKLSAgICAgICAgaWYgcGl4ZWxfdGVzdHMgYW5k
IG5vdCBzZWxmLl9wb3J0LnN1cHBvcnRzX3N3aXRjaGluZ19waXhlbF90ZXN0c19wZXJfdGVzdCgp
OgotICAgICAgICAgICAgY21kLmFwcGVuZCgnLS1waXhlbC10ZXN0cycpCiAgICAgICAgIGNtZC5l
eHRlbmQocGVyX3Rlc3RfYXJncykKIAogICAgICAgICBjbWQuYXBwZW5kKCctJykKQEAgLTMzNiwx
MiArMzM0LDkgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAgICAgICAgIGFzc2VydCBub3QgZHJp
dmVyX2lucHV0LmltYWdlX2hhc2ggb3IgZHJpdmVyX2lucHV0LnNob3VsZF9ydW5fcGl4ZWxfdGVz
dAogCiAgICAgICAgIGlmIGRyaXZlcl9pbnB1dC5zaG91bGRfcnVuX3BpeGVsX3Rlc3Q6Ci0gICAg
ICAgICAgICBpZiBzZWxmLl9wb3J0LnN1cHBvcnRzX3N3aXRjaGluZ19waXhlbF90ZXN0c19wZXJf
dGVzdCgpOgotICAgICAgICAgICAgICAgICMgV2UgZGlkIG5vdCBzdGFydCB0aGUgZHJpdmVyIHdp
dGggLS1waXhlbC10ZXN0cywgaW5zdGVhZCB3ZSBzcGVjaWZ5IGl0IHBlciB0ZXN0LgotICAgICAg
ICAgICAgICAgICMgIiciIGlzIHRoZSBzZXBhcmF0b3Igb2YgY29tbWFuZCBmaWVsZHMuCi0gICAg
ICAgICAgICAgICAgY29tbWFuZCArPSAiJyIgKyAnLS1waXhlbC10ZXN0JworICAgICAgICAgICAg
Y29tbWFuZCArPSAiOi0tcGl4ZWwtdGVzdCIKICAgICAgICAgaWYgZHJpdmVyX2lucHV0LmltYWdl
X2hhc2g6Ci0gICAgICAgICAgICBjb21tYW5kICs9ICInIiArIGRyaXZlcl9pbnB1dC5pbWFnZV9o
YXNoCisgICAgICAgICAgICBjb21tYW5kICs9ICI6IiArIGRyaXZlcl9pbnB1dC5pbWFnZV9oYXNo
CiAgICAgICAgIHJldHVybiBjb21tYW5kICsgIlxuIgogCiAgICAgZGVmIF9yZWFkX2ZpcnN0X2Js
b2NrKHNlbGYsIGRlYWRsaW5lKToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvcXQucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L3F0LnB5CmluZGV4IGUyMzljN2UzYWFmNmY2MDJiMGMzNTFlYzIyZGNmYTY4MDY0
ZWEyNjkuLjZlN2IwOTg4ZDVhNzdlZmM1ZmMzNzJmYTc1MTY3ODM0MDBhNjlmMDggMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcXQucHkKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9xdC5weQpAQCAtMTg0LDYg
KzE4NCwzIEBAIGNsYXNzIFF0UG9ydChQb3J0KToKICAgICAgICAgICAgIHJldHVybiBGYWxzZQog
ICAgICAgICByZXR1cm4gcmVzdWx0CiAKLSAgICBkZWYgX3N1cHBvcnRzX3N3aXRjaGluZ19waXhl
bF90ZXN0c19wZXJfdGVzdChzZWxmKToKLSAgICAgICAgcmV0dXJuIFRydWUKLQpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5CmluZGV4IDU3MTQ2
NjFmZDIwMzY3NjgzOWQ2Yzc2ZjQ3MzViZWM4MTMyYjg5YjguLjBjZDE3MWYzYmNhNmFiZWJkYjIx
Yjk4ZTJhNDVjMjFhMTRhOTAxMTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L3Rlc3QucHkKQEAgLTUxMywxMCArNTEzLDYgQEAgY2xhc3MgVGVzdFBv
cnQoUG9ydCk6CiAgICAgICAgICAgICBWaXJ0dWFsVGVzdFN1aXRlKCd2aXJ0dWFsL3NraXBwZWQn
LCAnZmFpbHVyZXMvZXhwZWN0ZWQnLCBbJy0tdmlydHVhbC1hcmcyJ10pLAogICAgICAgICBdCiAK
LSAgICBkZWYgc3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Blcl90ZXN0KHNlbGYpOgot
ICAgICAgICAjIExldCBpdCB0cnVlIHNvIHdlIGNhbiB0ZXN0IHRoZSAtLXBpeGVsLXRlc3QtZGly
ZWN0b3J5IG9wdGlvbi4KLSAgICAgICAgcmV0dXJuIFRydWUKLQogCiBjbGFzcyBUZXN0RHJpdmVy
KERyaXZlcik6CiAgICAgIiIiVGVzdC9EdW1teSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRHVtcFJl
bmRlclRyZWUgaW50ZXJmYWNlLiIiIgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmNwcAppbmRleCBkMDIzMjk5MjczMWQxYmM5NzEyNjhmYzM5MzFmNGI3MGFiMzY3YWM3Li4x
ZGUzYzllNmE2YWM4ZjMwMjlhYWEwMzE2YzQ4MWYwNGVhZTJmODhiIDEwMDY0NAotLS0gYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcApAQCAtMzUsNyArMzUsMTEgQEAKICNpbmNsdWRl
IDxXZWJLaXQyL1dLUGFnZVByaXZhdGUuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLUHJlZmVyZW5j
ZXNQcml2YXRlLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1JldGFpblB0ci5oPgorI2luY2x1ZGUg
PGFsZ29yaXRobT4KICNpbmNsdWRlIDxjc3RkaW8+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNs
dWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTY3LDggKzcxLDcgQEAgVGVzdENvbnRyb2xs
ZXImIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKQogfQogCiBUZXN0Q29udHJvbGxlcjo6VGVzdENv
bnRyb2xsZXIoaW50IGFyZ2MsIGNvbnN0IGNoYXIqIGFyZ3ZbXSkKLSAgICA6IG1fZHVtcFBpeGVs
c0ZvckFsbFRlc3RzKGZhbHNlKQotICAgICwgbV92ZXJib3NlKGZhbHNlKQorICAgIDogbV92ZXJi
b3NlKGZhbHNlKQogICAgICwgbV9wcmludFNlcGFyYXRvcnMoZmFsc2UpCiAgICAgLCBtX3VzaW5n
U2VydmVyTW9kZShmYWxzZSkKICAgICAsIG1fZ2NCZXR3ZWVuVGVzdHMoZmFsc2UpCkBAIC0yNjcs
MTAgKzI3MCw2IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemUoaW50IGFyZ2MsIGNv
bnN0IGNoYXIqIGFyZ3ZbXSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAg
ICAgICAgaWYgKGFyZ3VtZW50ID09ICItLXBpeGVsLXRlc3RzIikgewotICAgICAgICAgICAgbV9k
dW1wUGl4ZWxzRm9yQWxsVGVzdHMgPSB0cnVlOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KICAgICAgICAgaWYgKGFyZ3VtZW50ID09ICItLXZlcmJvc2UiKSB7CiAgICAgICAgICAg
ICBtX3ZlcmJvc2UgPSB0cnVlOwogICAgICAgICAgICAgY29udGludWU7CkBAIC01MDQsNyArNTAz
LDg5IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMo
KQogICAgIHJldHVybiBtX2RvbmVSZXNldHRpbmc7CiB9CiAKLWJvb2wgVGVzdENvbnRyb2xsZXI6
OnJ1blRlc3QoY29uc3QgY2hhciogdGVzdCkKK3N0cnVjdCBUZXN0Q29tbWFuZCB7CisgICAgVGVz
dENvbW1hbmQoKSA6IHNob3VsZER1bXBQaXhlbHMoZmFsc2UpIHsgfQorCisgICAgc3RkOjpzdHJp
bmcgcGF0aE9yVVJMOworICAgIGJvb2wgc2hvdWxkRHVtcFBpeGVsczsKKyAgICBzdGQ6OnN0cmlu
ZyBleHBlY3RlZFBpeGVsSGFzaDsKK307CisKK2NsYXNzIENvbW1hbmRUb2tlbml6ZXIgeworcHVi
bGljOgorICAgIENvbW1hbmRUb2tlbml6ZXIoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0KQorICAg
ICAgICA6IG1faW5wdXQoaW5wdXQpCisgICAgICAgICwgbV9wb3NOZXh0U2VwYXJhdG9yKDApCisg
ICAgeworICAgICAgICBwdW1wKCk7CisgICAgfQorCisgICAgYm9vbCBoYXNOZXh0KCkgY29uc3Q7
CisgICAgc3RkOjpzdHJpbmcgbmV4dCgpOworCitwcml2YXRlOgorICAgIHZvaWQgcHVtcCgpOwor
ICAgIHN0YXRpYyBjb25zdCBjaGFyIGtTZXBhcmF0b3IgPSAnOic7CisgICAgY29uc3Qgc3RkOjpz
dHJpbmcmIG1faW5wdXQ7CisgICAgc3RkOjpzdHJpbmcgbV9uZXh0OworICAgIHNpemVfdCBtX3Bv
c05leHRTZXBhcmF0b3I7Cit9OworCit2b2lkIENvbW1hbmRUb2tlbml6ZXI6OnB1bXAoKQorewor
ICAgIGlmIChtX3Bvc05leHRTZXBhcmF0b3IgPT0gc3RkOjpzdHJpbmc6Om5wb3MgfHwgbV9wb3NO
ZXh0U2VwYXJhdG9yID09IG1faW5wdXQuc2l6ZSgpKSB7CisgICAgICAgIG1fbmV4dCA9IHN0ZDo6
c3RyaW5nKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2l6ZV90IHN0YXJ0ID0gbV9w
b3NOZXh0U2VwYXJhdG9yID8gbV9wb3NOZXh0U2VwYXJhdG9yICsgMSA6IDA7CisgICAgbV9wb3NO
ZXh0U2VwYXJhdG9yID0gbV9pbnB1dC5maW5kKGtTZXBhcmF0b3IsIHN0YXJ0KTsKKyAgICBzaXpl
X3Qgc2l6ZSA9IG1fcG9zTmV4dFNlcGFyYXRvciA9PSBzdGQ6OnN0cmluZzo6bnBvcyA/IHN0ZDo6
c3RyaW5nOjpucG9zIDogbV9wb3NOZXh0U2VwYXJhdG9yIC0gc3RhcnQ7CisgICAgbV9uZXh0ID0g
c3RkOjpzdHJpbmcobV9pbnB1dCwgc3RhcnQsIHNpemUpOworfQorCitzdGQ6OnN0cmluZyBDb21t
YW5kVG9rZW5pemVyOjpuZXh0KCkKK3sKKyAgICBBU1NFUlQoaGFzTmV4dCgpKTsKKworICAgIHN0
ZDo6c3RyaW5nIG9sZE5leHQgPSBtX25leHQ7CisgICAgcHVtcCgpOworICAgIHJldHVybiBvbGRO
ZXh0OworfQorCitib29sIENvbW1hbmRUb2tlbml6ZXI6Omhhc05leHQoKSBjb25zdAoreworICAg
IHJldHVybiBtX25leHQgIT0gc3RkOjpzdHJpbmcoKTsKK30KKworTk9fUkVUVVJOIHN0YXRpYyB2
b2lkIGRpZShjb25zdCBzdGQ6OnN0cmluZyYgaW5wdXRMaW5lKQoreworICAgIGZwcmludGYoc3Rk
ZXJyLCAiVW5leHBlY3RlZCBpbnB1dCBsaW5lOiAlc1xuIiwgaW5wdXRMaW5lLmNfc3RyKCkpOwor
ICAgIGV4aXQoMSk7Cit9CisKK1Rlc3RDb21tYW5kIHBhcnNlSW5wdXRMaW5lKGNvbnN0IHN0ZDo6
c3RyaW5nJiBpbnB1dExpbmUpCit7CisgICAgVGVzdENvbW1hbmQgcmVzdWx0OworICAgIENvbW1h
bmRUb2tlbml6ZXIgdG9rZW5pemVyKGlucHV0TGluZSk7CisgICAgaWYgKCF0b2tlbml6ZXIuaGFz
TmV4dCgpKQorICAgICAgICBkaWUoaW5wdXRMaW5lKTsKKworICAgIHJlc3VsdC5wYXRoT3JVUkwg
PSB0b2tlbml6ZXIubmV4dCgpOworICAgIGlmICghdG9rZW5pemVyLmhhc05leHQoKSkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKworICAgIHN0ZDo6c3RyaW5nIGFyZyA9IHRva2VuaXplci5uZXh0
KCk7CisgICAgaWYgKGFyZyAhPSBzdGQ6OnN0cmluZygiLXAiKSAmJiBhcmcgIT0gc3RkOjpzdHJp
bmcoIi0tcGl4ZWwtdGVzdCIpKQorICAgICAgICBkaWUoaW5wdXRMaW5lKTsKKyAgICByZXN1bHQu
c2hvdWxkRHVtcFBpeGVscyA9IHRydWU7CisKKyAgICBpZiAodG9rZW5pemVyLmhhc05leHQoKSkK
KyAgICAgICAgcmVzdWx0LmV4cGVjdGVkUGl4ZWxIYXNoID0gdG9rZW5pemVyLm5leHQoKTsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgVGVzdENvbnRyb2xsZXI6OnJ1blRlc3QoY29u
c3QgY2hhciogaW5wdXRMaW5lKQogewogICAgIGlmICghcmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZh
bHVlcygpKSB7CiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtNTE3LDMyICs1OTgsMTMgQEAgYm9vbCBU
ZXN0Q29udHJvbGxlcjo6cnVuVGVzdChjb25zdCBjaGFyKiB0ZXN0KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgYm9vbCBkdW1wUGl4ZWxzVGVzdCA9IG1fZHVtcFBpeGVsc0Zv
ckFsbFRlc3RzOwotICAgIHN0ZDo6c3RyaW5nIGNvbW1hbmQodGVzdCk7Ci0gICAgc3RkOjpzdHJp
bmcgcGF0aE9yVVJMID0gY29tbWFuZDsKLSAgICBzdGQ6OnN0cmluZyBleHBlY3RlZFBpeGVsSGFz
aDsKLSAgICBzaXplX3QgZmlyc3RTZXBhcmF0b3JQb3MgPSBjb21tYW5kLmZpbmRfZmlyc3Rfb2Yo
J1wnJyk7Ci0gICAgc2l6ZV90IHNlY29uZFNlcGFyYXRvclBvcyA9IGNvbW1hbmQuZmluZF9maXJz
dF9vZignXCcnLCBmaXJzdFNlcGFyYXRvclBvcyArIDEpOwotICAgIGlmIChmaXJzdFNlcGFyYXRv
clBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgICAgICBwYXRoT3JVUkwgPSBzdGQ6OnN0
cmluZyhjb21tYW5kLCAwLCBmaXJzdFNlcGFyYXRvclBvcyk7Ci0gICAgICAgIHNpemVfdCBwaXhl
bEhhc2hQb3MgPSBmaXJzdFNlcGFyYXRvclBvcyArIDE7Ci0KLSAgICAgICAgLy8gTlJXVCBwYXNz
ZXMgLS1waXhlbC10ZXN0IGlmIHdlIHNob3VsZCBkdW1wIHBpeGVscyBmb3IgdGhlIHRlc3QuCi0g
ICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGV4cGVjdGVkUGl4ZWxUZXN0QXJnKCItLXBpeGVsLXRl
c3QiKTsKLSAgICAgICAgc3RkOjpzdHJpbmcgYXJnVGVzdCA9IHN0ZDo6c3RyaW5nKGNvbW1hbmQs
IGZpcnN0U2VwYXJhdG9yUG9zICsgMSwgZXhwZWN0ZWRQaXhlbFRlc3RBcmcuc2l6ZSgpKTsKLSAg
ICAgICAgaWYgKGFyZ1Rlc3QgPT0gZXhwZWN0ZWRQaXhlbFRlc3RBcmcpIHsKLSAgICAgICAgICAg
IGR1bXBQaXhlbHNUZXN0ID0gdHJ1ZTsKLSAgICAgICAgICAgIHBpeGVsSGFzaFBvcyA9IHNlY29u
ZFNlcGFyYXRvclBvcyA9PSBzdGQ6OnN0cmluZzo6bnBvcyA/IHN0ZDo6c3RyaW5nOjpucG9zIDog
c2Vjb25kU2VwYXJhdG9yUG9zICsgMTsKLSAgICAgICAgfQotICAgICAgICBpZiAocGl4ZWxIYXNo
UG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zICYmIHBpeGVsSGFzaFBvcyA8IGNvbW1hbmQuc2l6ZSgp
KQotICAgICAgICAgICAgZXhwZWN0ZWRQaXhlbEhhc2ggPSBzdGQ6OnN0cmluZyhjb21tYW5kLCBw
aXhlbEhhc2hQb3MpOwotICAgIH0KKyAgICBUZXN0Q29tbWFuZCBjb21tYW5kID0gcGFyc2VJbnB1
dExpbmUoc3RkOjpzdHJpbmcoaW5wdXRMaW5lKSk7CiAKICAgICBtX3N0YXRlID0gUnVubmluZ1Rl
c3Q7CiAKLSAgICBtX2N1cnJlbnRJbnZvY2F0aW9uID0gYWRvcHRQdHIobmV3IFRlc3RJbnZvY2F0
aW9uKHBhdGhPclVSTCkpOwotICAgIGlmIChkdW1wUGl4ZWxzVGVzdCkKLSAgICAgICAgbV9jdXJy
ZW50SW52b2NhdGlvbi0+c2V0SXNQaXhlbFRlc3QoZXhwZWN0ZWRQaXhlbEhhc2gpOworICAgIG1f
Y3VycmVudEludm9jYXRpb24gPSBhZG9wdFB0cihuZXcgVGVzdEludm9jYXRpb24oY29tbWFuZC5w
YXRoT3JVUkwpKTsKKyAgICBpZiAoY29tbWFuZC5zaG91bGREdW1wUGl4ZWxzKQorICAgICAgICBt
X2N1cnJlbnRJbnZvY2F0aW9uLT5zZXRJc1BpeGVsVGVzdChjb21tYW5kLmV4cGVjdGVkUGl4ZWxI
YXNoKTsKIAogICAgIG1fY3VycmVudEludm9jYXRpb24tPmludm9rZSgpOwogICAgIG1fY3VycmVu
dEludm9jYXRpb24uY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
VGVzdENvbnRyb2xsZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIu
aAppbmRleCBhOTllMTZlYTg3MDI3YzM0ZjA3Yjg5NjJiMDk4YzIzMzRkOTQyMWJkLi41ZTIwZDYx
MWI0NjlkZjE4N2MzNzhlZTYyZWQwY2FjMzE4ZGFlZDIxIDEwMDY0NAotLS0gYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0Q29udHJvbGxlci5oCkBAIC0xMDQsNyArMTA0LDYgQEAgcHJpdmF0ZToKIAogICAgIE93
blB0cjxUZXN0SW52b2NhdGlvbj4gbV9jdXJyZW50SW52b2NhdGlvbjsKIAotICAgIGJvb2wgbV9k
dW1wUGl4ZWxzRm9yQWxsVGVzdHM7CiAgICAgYm9vbCBtX3ZlcmJvc2U7CiAgICAgYm9vbCBtX3By
aW50U2VwYXJhdG9yczsKICAgICBib29sIG1fdXNpbmdTZXJ2ZXJNb2RlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155513</attachid>
            <date>2012-07-31 06:14:55 -0700</date>
            <delta_ts>2012-07-31 06:40:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92398-20120731152302.patch</filename>
            <type>text/plain</type>
            <size>51426</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MTkzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYzc0MDQyZTc2MGE5ZWRmMjNjYTRmZDIxZjI3OGNkNmIw
YmViMGEyOS4uY2E2MGIzOGNjYzhkMWNjMDdiYjBkOGIyOGU3YmM1ZTkzZDVlMjg1ZSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk3
IEBACisyMDEyLTA3LTMxICBCYWxhenMgS2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBBbGwgcG9ydHMgc2hvdWxkIHN1cHBvcnQgcGVyIHRlc3Qgc3dpdGNoaW5nIG9mIHBp
eGVsIHRlc3RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkyMzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGVhY2ggYWxsIHRlc3QgZHJpdmVycyB0byBhY2NlcHQgYSBwZXIgdGVzdCBjb250cm9sIG9m
IHdoZXRoZXIKKyAgICAgICAgdG8gZHVtcCBwaXhlbHMuIERyaXZlcnMgbm93IGFjY2VwdCBhIC1w
Ly0tcGl4ZWwtdGVzdCBhcmd1bWVudAorICAgICAgICBvbiB0aGUgc3RhbmRhcnQgaW5wdXQgdGhh
dCBtZWFucyB0aGF0IHJ1bm5pbmcgdGhlIGN1cnJlbnQKKyAgICAgICAgdGVzdCBhcyBwaXhlbCB0
ZXN0IGlzIGFsbG93ZWQgKGV2ZW4gaWYgdGhlIGV4cGVjdGVkIGhhc2ggaXMKKyAgICAgICAgbWlz
c2luZykuIFJlbW92ZWQgdGhlIC0tcGl4ZWwtdGVzdHMgY29tbWFuZCBsaW5lIG9wdGlvbiBzaW5j
ZQorICAgICAgICB0aGVyZSBpcyBubyBuZWVkIGZvciBpdCBhbnltb3JlLgorCisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaToKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9EdW1wUmVuZGVyVHJlZS5oOgorICAgICAgICAoVGVzdENvbW1hbmQ6OlRlc3RDb21tYW5k
KToKKyAgICAgICAgKFRlc3RDb21tYW5kKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9EdW1w
UmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcDogQWRkZWQuCisgICAgICAgIChDb21tYW5k
VG9rZW5pemVyKToKKyAgICAgICAgKENvbW1hbmRUb2tlbml6ZXI6OkNvbW1hbmRUb2tlbml6ZXIp
OgorICAgICAgICAoQ29tbWFuZFRva2VuaXplcjo6cHVtcCk6CisgICAgICAgIChDb21tYW5kVG9r
ZW5pemVyOjpuZXh0KToKKyAgICAgICAgKENvbW1hbmRUb2tlbml6ZXI6Omhhc05leHQpOgorICAg
ICAgICAoZGllKToKKyAgICAgICAgKHBhcnNlSW5wdXRMaW5lKToKKyAgICAgICAgQ29tbW9uIGxv
Z2ljIHRvIHBhcnNlIHRoZSBpbnB1dCBsaW5lIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IChvciBm
cm9tIHRoZSBjb21tYW5kIGxpbmUKKyAgICAgICAgaW4gc3RhbmRhbG9uZSBtb2RlKS4gTWFkZSBp
dCBzb21ld2hhdCBnZW5lcmFsIHNvIHdlIGNhbiBlYXNpbHkgYWRkIG1vcmUgYXJndW1lbnRzIGlm
CisgICAgICAgIHRoZXJlIGlzIGEgbmVlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9EdW1wUmVuZGVyVHJlZS5jcHA6CisgICAgICAgIChydW5UZXN0KToKKyAgICAgICAgKG1h
aW4pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHA6Cisg
ICAgICAgIChUZXN0U2hlbGw6OlRlc3RTaGVsbCk6CisgICAgICAgIChUZXN0U2hlbGw6OnJ1bkZp
bGVUZXN0KToKKyAgICAgICAgKFRlc3RTaGVsbDo6ZHVtcCk6CisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmg6CisgICAgICAgIChUZXN0UGFyYW1zOjpUZXN0UGFy
YW1zKToKKyAgICAgICAgKFRlc3RTaGVsbCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZWZs
L0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVy
VHJlZS5jcHA6CisgICAgICAgIChwYXJzZUNvbW1hbmRMaW5lT3B0aW9ucyk6CisgICAgICAgIChy
dW5UZXN0KToKKyAgICAgICAgKHNob3VsZER1bXBQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVk
KToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVu
ZGVyVHJlZS5jcHA6CisgICAgICAgIChpbml0aWFsaXplR2xvYmFsc0Zyb21Db21tYW5kTGluZU9w
dGlvbnMpOgorICAgICAgICAoZHVtcCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0R1
bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICAoaW5pdGlhbGl6ZUdsb2JhbHNGcm9tQ29tbWFuZExp
bmVPcHRpb25zKToKKyAgICAgICAgKGR1bXBSZW5kZXJUcmVlKToKKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5wcm86CisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
cXQvRHVtcFJlbmRlclRyZWVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEdW1wUmVuZGVyVHJl
ZTo6cHJvY2Vzc0xpbmUpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVy
VHJlZS5jcHA6CisgICAgICAgIChkdW1wKToKKyAgICAgICAgKHJ1blRlc3QpOgorICAgICAgICAo
ZGxsTGF1bmNoZXJFbnRyeVBvaW50KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRHVt
cFJlbmRlclRyZWUudmNwcm9qOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dzY3JpcHQ6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvd3gvRHVtcFJlbmRlclRyZWVXeC5jcHA6CisgICAgICAg
IChkdW1wKToKKyAgICAgICAgKHJ1blRlc3QpOgorICAgICAgICAoTXlBcHA6Ok9uSW5pdCk6Cisg
ICAgICAgICogU2NyaXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0czogUGFzcyAtLXBpeGVsLXRlc3Qg
YmVmb3JlIHRoZSBoYXNoLgorICAgICAgICBDaGFuZ2VkIHRoZSBzZXBhcmF0b3IgZm9ybSAnIHRv
IDogYmVjYXVzZSBpdCBkb24ndCBuZWVkIHRvIGJlIGVzY2FwZWQKKyAgICAgICAgd2hlbiBwYXNz
aW5nIG1hbnVhbGx5IG9uIHRoZSBjb21hbmQgbGluZS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHk6CisgICAgICAgIChQb3J0LnNob3VsZF9ydW5f
YXNfcGl4ZWxfdGVzdCk6IFJlbW92ZWQgbm93IHRoYXQgYWxsIHBvcnRzIHN1cHBvcnRzIGl0Lgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5Ogor
ICAgICAgICAoRHJpdmVyLmNtZF9saW5lKTogRG9uJ3QgcGFzcyAtLXBpeGVsLXRlc3RzIGFueW1v
cmUuCisgICAgICAgIChEcml2ZXIuX2NvbW1hbmRfZnJvbV9kcml2ZXJfaW5wdXQpOgorCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpUZXN0Q29udHJvbGxlcik6CisgICAgICAgIChXVFI6OlRlc3RDb250
cm9sbGVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdUUjo6VGVzdENvbW1hbmQ6OlRlc3RDb21t
YW5kKToKKyAgICAgICAgKFRlc3RDb21tYW5kKToKKyAgICAgICAgKFdUUik6CisgICAgICAgIChD
b21tYW5kVG9rZW5pemVyKToKKyAgICAgICAgKFdUUjo6Q29tbWFuZFRva2VuaXplcjo6Q29tbWFu
ZFRva2VuaXplcik6CisgICAgICAgIChXVFI6OkNvbW1hbmRUb2tlbml6ZXI6OnB1bXApOgorICAg
ICAgICAoV1RSOjpDb21tYW5kVG9rZW5pemVyOjpuZXh0KToKKyAgICAgICAgKFdUUjo6Q29tbWFu
ZFRva2VuaXplcjo6aGFzTmV4dCk6CisgICAgICAgIChXVFI6OmRpZSk6CisgICAgICAgIChXVFI6
OnBhcnNlSW5wdXRMaW5lKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJ1blRlc3Qp
OgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAg
KFRlc3RDb250cm9sbGVyKToKKyAgICAgICAgRHVwbGljYXRlIHRoZSBsb2dpYyBmb3IgcGFyc2lu
ZyB0aGUgY29tbWFuZCBsaW5lIGJlY2F1c2UKKyAgICAgICAgdW5mb3J0dW5hdGVseSB0aGVyZSBp
cyBubyB3YXkgdG8gc2hhcmUgY29kZSBiZXR3ZWVuCisgICAgICAgIFdlYktpdFRlc3RSdW5uZXIg
YW5kIER1bXBSZW5kZXJUcmVlLgorCiAyMDEyLTA3LTMxICBKb2NoZW4gRWlzaW5nZXIgIDxqb2No
ZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFVwZGF0ZSB3YXRjaGxpc3QK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpCmluZGV4IGRjZTFlMzYxZDYw
MDZlZGUwNzQwMTVjZDFjZDZiZmE2YTQwMjExZTguLmQ2ZjBhYWIxYzkwMTljNTJhNDM5MGQ5ZWU5
MzIwZTYxYzU3MWMxYzUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5k
ZXJUcmVlLmd5cGkKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lw
aQpAQCAtNTYsNiArNTYsOCBAQAogICAgICAgICAgICAgJ2Nocm9taXVtL1dlYlZpZXdIb3N0Lmgn
LAogICAgICAgICBdLAogICAgICAgICAndGVzdF9ydW5uZXJfZmlsZXMnOiBbCisgICAgICAgICAg
ICAnRHVtcFJlbmRlclRyZWUuaCcsCisgICAgICAgICAgICAnRHVtcFJlbmRlclRyZWVDb21tb24u
Y3BwJywKICAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVyLmNwcCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmls
aXR5Q29udHJvbGxlci5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vz
c2liaWxpdHlVSUVsZW1lbnQuY3BwJywKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L0R1bXBSZW5kZXJUcmVlLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5o
CmluZGV4IDBlNTk4YmU0YWUzZGQ2MjVmMGI0NWVmZTZiMjhmYTM1ZjY3ZjUyZjIuLjE4ZDhjZGEw
ZWIxN2ZhODNiZWUyMDg5YjZkNDg1YTY0OWRiYjg2NzAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVt
cFJlbmRlclRyZWUuaApAQCAtNjUsNCArNjUsMTQgQEAgZXh0ZXJuIFJlZlB0cjxMYXlvdXRUZXN0
Q29udHJvbGxlcj4gZ0xheW91dFRlc3RDb250cm9sbGVyOwogdm9pZCBkdW1wKCk7CiB2b2lkIGRp
c3BsYXlXZWJWaWV3KCk7CiAKK3N0cnVjdCBUZXN0Q29tbWFuZCB7CisgICAgVGVzdENvbW1hbmQo
KSA6IHNob3VsZER1bXBQaXhlbHMoZmFsc2UpIHsgfQorCisgICAgc3RkOjpzdHJpbmcgcGF0aE9y
VVJMOworICAgIGJvb2wgc2hvdWxkRHVtcFBpeGVsczsKKyAgICBzdGQ6OnN0cmluZyBleHBlY3Rl
ZFBpeGVsSGFzaDsKK307CisKK1Rlc3RDb21tYW5kIHBhcnNlSW5wdXRMaW5lKGNvbnN0IHN0ZDo6
c3RyaW5nJik7CisKICNlbmRpZiAvLyBEdW1wUmVuZGVyVHJlZV9oCmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCA4M2JmZmQ0NDg0MWFhMTIyZWVkZWQ0NzI1MTM0YzY5MTUyMDBkZDVlLi40
ODEwNjRlYjA1YjMzNWEzY2Y1NjBkMDBkY2E2MjZjOTNmMjhiOGU2IDEwMDY0NAotLS0gYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTg5LDYgKzg5LDcgQEAKIAkJOENDREE4MkExNTFBNzJEMTAwMDNGOTM3
IC8qIFNhbXBsZUZvbnQuc2ZvbnQgaW4gQ29weSBGb250IEZpbGVzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDhDQ0RBODFGMTUxQTU2NTUwMDAzRjkzNyAvKiBTYW1wbGVGb250
LnNmb250ICovOyB9OwogCQk5MzQwOTk0QzA4NTQwQ0FFMDA3RjNCQzggLyogRHVtcFJlbmRlclRy
ZWVQcmVmaXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDMyQTcwQUFCMDM3MDVFMUYwMEM5MTc4MyAvKiBEdW1wUmVuZGVyVHJlZVByZWZpeC5oICovOyB9
OwogCQk5MzQwOTk1MTA4NTQwQ0FFMDA3RjNCQzggLyogV2ViS2l0LmZyYW1ld29yayBpbiBGcmFt
ZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMzU0MzVGMDNENzU1
MDIwMDg2MzVDRSAvKiBXZWJLaXQuZnJhbWV3b3JrICovOyB9OworCQk5ODMwRjMxRjE1QzgxMTgx
MDA1QUIyMDYgLyogRHVtcFJlbmRlclRyZWVDb21tb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTgzMEYzMUUxNUM4MTE4MTAwNUFCMjA2IC8qIER1
bXBSZW5kZXJUcmVlQ29tbW9uLmNwcCAqLzsgfTsKIAkJQTgxNzA5MDAwOEIxNjNFRjAwQ0NCOUZC
IC8qIENvY29hLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE4NEY2MDg5MDhCMTM2REEwMEU5NzQ1RiAvKiBDb2NvYS5mcmFtZXdvcmsg
Ki87IH07CiAJCUE4MTcwOTA0MDhCMTY0RDMwMENDQjlGQiAvKiBKYXZhU2NyaXB0Q29yZS5mcmFt
ZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
ODE3MDkwMzA4QjE2NEQzMDBDQ0I5RkIgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovOyB9
OwogCQlBODRGNjA4QTA4QjEzNkRBMDBFOTc0NUYgLyogQ29jb2EuZnJhbWV3b3JrIGluIEZyYW1l
d29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg0RjYwODkwOEIxMzZE
QTAwRTk3NDVGIC8qIENvY29hLmZyYW1ld29yayAqLzsgfTsKQEAgLTI4OSw2ICsyOTAsNyBAQAog
CQk4Q0NEQTgxRjE1MUE1NjU1MDAwM0Y5MzcgLyogU2FtcGxlRm9udC5zZm9udCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQueG1sOyBuYW1lID0gU2FtcGxlRm9udC5zZm9udDsgcGF0aCA9IGZvbnRzL1NhbXBsZUZv
bnQuc2ZvbnQ7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMzU0MzVGMDNENzU1MDIw
MDg2MzVDRSAvKiBXZWJLaXQuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IHBhdGggPSBXZWJLaXQuZnJh
bWV3b3JrOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk5MzQwOTk1NDA4
NTQwQ0FGMDA3RjNCQzggLyogRHVtcFJlbmRlclRyZWUgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGlu
Y2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IER1bXBSZW5kZXJUcmVlOyBzb3VyY2VUcmVlID0gQlVJ
TFRfUFJPRFVDVFNfRElSOyB9OworCQk5ODMwRjMxRTE1QzgxMTgxMDA1QUIyMDYgLyogRHVtcFJl
bmRlclRyZWVDb21tb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RHVtcFJlbmRlclRyZWVDb21tb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
ODAzRkY3NDA5Q0FBRDA4MDA5QjJBMzcgLyogRHVtcFJlbmRlclRyZWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmls
ZUVuY29kaW5nID0gNDsgcGF0aCA9IER1bXBSZW5kZXJUcmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE4MTcwOTAzMDhCMTY0RDMwMENDQjlGQiAvKiBKYXZhU2NyaXB0Q29yZS5m
cmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSB3cmFwcGVyLmZyYW1ld29yazsgcGF0aCA9IEphdmFTY3JpcHRDb3JlLmZyYW1ld29yazsgc291
cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJQTg0RjYwODkwOEIxMzZEQTAwRTk3
NDVGIC8qIENvY29hLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gQ29jb2EuZnJhbWV3b3Jr
OyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29jb2EuZnJhbWV3b3JrOyBzb3Vy
Y2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwpAQCAtNDIxLDYgKzQyMyw3IEBACiAJCTA4RkI3Nzk0
RkU4NDE1NURDMDJBQUMwNyAvKiBEdW1wUmVuZGVyVHJlZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJOTgzMEYzMUUxNUM4MTE4MTAwNUFCMjA2IC8qIER1
bXBSZW5kZXJUcmVlQ29tbW9uLmNwcCAqLywKIAkJCQkzMkE3MEFBQjAzNzA1RTFGMDBDOTE3ODMg
LyogRHVtcFJlbmRlclRyZWVQcmVmaXguaCAqLywKIAkJCQkxNDIyQTI3NTBBRjZGNEJEMDBFMUE4
ODMgLyogRGVsZWdhdGVzICovLAogCQkJCTE0MjJBMjY5MEFGNkY0NTIwMEUxQTg4MyAvKiBDb250
cm9sbGVycyAqLywKQEAgLTk1NSw2ICs5NTgsNyBAQAogCQkJCTI5Q0ZCQTJFMTIyNzNBMTAwMEJD
MzBDMCAvKiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTNBNTYyNkNCMTMxQ0EwMkEwMDJCRTZEOSAvKiBTdG9yYWdlVHJhY2tlckRlbGVnYXRlLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODAwNDVBRUUxNDc3MThFNzAwODI5MEE4IC8qIEFjY2Vzc2liaWxp
dHlOb3RpZmljYXRpb25IYW5kbGVyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJOTgzMEYzMUYxNUM4
MTE4MTAwNUFCMjA2IC8qIER1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9Owpk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWVDb21tb24uY3Bw
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWVDb21tb24uY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjAzMzQ5ZGIyMjA2N2U5YTA4NDE3YTIzYWQ4Y2IxM2I0NWI2ZDIzMTAKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZUNvbW1vbi5jcHAKQEAg
LTAsMCArMSw4MiBAQAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkR1bXBSZW5kZXJU
cmVlLmgiCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNs
dWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZz4KKwor
Y2xhc3MgQ29tbWFuZFRva2VuaXplciB7CitwdWJsaWM6CisgICAgQ29tbWFuZFRva2VuaXplcihj
b25zdCBzdGQ6OnN0cmluZyYgaW5wdXQpCisgICAgICAgIDogbV9pbnB1dChpbnB1dCkKKyAgICAg
ICAgLCBtX3Bvc05leHRTZXBhcmF0b3IoMCkKKyAgICB7CisgICAgICAgIHB1bXAoKTsKKyAgICB9
CisKKyAgICBib29sIGhhc05leHQoKSBjb25zdDsKKyAgICBzdGQ6OnN0cmluZyBuZXh0KCk7CisK
K3ByaXZhdGU6CisgICAgdm9pZCBwdW1wKCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIga1NlcGFy
YXRvciA9ICc6JzsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgbV9pbnB1dDsKKyAgICBzdGQ6OnN0
cmluZyBtX25leHQ7CisgICAgc2l6ZV90IG1fcG9zTmV4dFNlcGFyYXRvcjsKK307CisKK3ZvaWQg
Q29tbWFuZFRva2VuaXplcjo6cHVtcCgpCit7CisgICAgaWYgKG1fcG9zTmV4dFNlcGFyYXRvciA9
PSBzdGQ6OnN0cmluZzo6bnBvcyB8fCBtX3Bvc05leHRTZXBhcmF0b3IgPT0gbV9pbnB1dC5zaXpl
KCkpIHsKKyAgICAgICAgbV9uZXh0ID0gc3RkOjpzdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBzaXplX3Qgc3RhcnQgPSBtX3Bvc05leHRTZXBhcmF0b3IgPyBtX3Bvc05leHRT
ZXBhcmF0b3IgKyAxIDogMDsKKyAgICBtX3Bvc05leHRTZXBhcmF0b3IgPSBtX2lucHV0LmZpbmQo
a1NlcGFyYXRvciwgc3RhcnQpOworICAgIHNpemVfdCBzaXplID0gbV9wb3NOZXh0U2VwYXJhdG9y
ID09IHN0ZDo6c3RyaW5nOjpucG9zID8gc3RkOjpzdHJpbmc6Om5wb3MgOiBtX3Bvc05leHRTZXBh
cmF0b3IgLSBzdGFydDsKKyAgICBtX25leHQgPSBzdGQ6OnN0cmluZyhtX2lucHV0LCBzdGFydCwg
c2l6ZSk7Cit9CisKK3N0ZDo6c3RyaW5nIENvbW1hbmRUb2tlbml6ZXI6Om5leHQoKQoreworICAg
IEFTU0VSVChoYXNOZXh0KCkpOworCisgICAgc3RkOjpzdHJpbmcgb2xkTmV4dCA9IG1fbmV4dDsK
KyAgICBwdW1wKCk7CisgICAgcmV0dXJuIG9sZE5leHQ7Cit9CisKK2Jvb2wgQ29tbWFuZFRva2Vu
aXplcjo6aGFzTmV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmV4dCAhPSBzdGQ6OnN0cmlu
ZygpOworfQorCitOT19SRVRVUk4gc3RhdGljIHZvaWQgZGllKGNvbnN0IHN0ZDo6c3RyaW5nJiBp
bnB1dExpbmUpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJVbmV4cGVjdGVkIGlucHV0IGxpbmU6
ICVzXG4iLCBpbnB1dExpbmUuY19zdHIoKSk7CisgICAgZXhpdCgxKTsKK30KKworVGVzdENvbW1h
bmQgcGFyc2VJbnB1dExpbmUoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0TGluZSkKK3sKKyAgICBU
ZXN0Q29tbWFuZCByZXN1bHQ7CisgICAgQ29tbWFuZFRva2VuaXplciB0b2tlbml6ZXIoaW5wdXRM
aW5lKTsKKyAgICBpZiAoIXRva2VuaXplci5oYXNOZXh0KCkpCisgICAgICAgIGRpZShpbnB1dExp
bmUpOworCisgICAgcmVzdWx0LnBhdGhPclVSTCA9IHRva2VuaXplci5uZXh0KCk7CisgICAgaWYg
KCF0b2tlbml6ZXIuaGFzTmV4dCgpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgc3Rk
OjpzdHJpbmcgYXJnID0gdG9rZW5pemVyLm5leHQoKTsKKyAgICBpZiAoYXJnICE9IHN0ZDo6c3Ry
aW5nKCItcCIpICYmIGFyZyAhPSBzdGQ6OnN0cmluZygiLS1waXhlbC10ZXN0IikpCisgICAgICAg
IGRpZShpbnB1dExpbmUpOworICAgIHJlc3VsdC5zaG91bGREdW1wUGl4ZWxzID0gdHJ1ZTsKKwor
ICAgIGlmICh0b2tlbml6ZXIuaGFzTmV4dCgpKQorICAgICAgICByZXN1bHQuZXhwZWN0ZWRQaXhl
bEhhc2ggPSB0b2tlbml6ZXIubmV4dCgpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcAppbmRleCA2
MTU1ZjQ0MWY1ZDhiYjNjNDRlNTE3OTA4MGRjYjE3NDQ1ZTg5ODc0Li5kMTUxNzE5OGJjMDM5Nzc4
M2Y2YzFmNzVhZmQ1NGZmNTY5MTA3OGMwIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9EdW1wUmVuZGVyVHJlZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAgKi8KIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIi4uL0R1bXBSZW5kZXJUcmVlLmgiCiAKICNpbmNs
dWRlICJNb2NrV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5jbHVkZSAiVGVzdFNoZWxsLmgi
CkBAIC00NCw3ICs0NSw2IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiBzdGF0aWMgY29uc3QgY2hh
ciBvcHRpb25Db21wbGV4VGV4dFtdID0gIi0tY29tcGxleC10ZXh0IjsKIHN0YXRpYyBjb25zdCBj
aGFyIG9wdGlvbkR1bXBBbGxQaXhlbHNbXSA9ICItLWR1bXAtYWxsLXBpeGVscyI7CiBzdGF0aWMg
Y29uc3QgY2hhciBvcHRpb25Ob3RyZWVbXSA9ICItLW5vdHJlZSI7Ci1zdGF0aWMgY29uc3QgY2hh
ciBvcHRpb25QaXhlbFRlc3RzW10gPSAiLS1waXhlbC10ZXN0cyI7CiBzdGF0aWMgY29uc3QgY2hh
ciBvcHRpb25UaHJlYWRlZFtdID0gIi0tdGhyZWFkZWQiOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0
aW9uRGVidWdSZW5kZXJUcmVlW10gPSAiLS1kZWJ1Zy1yZW5kZXItdHJlZSI7CiBzdGF0aWMgY29u
c3QgY2hhciBvcHRpb25EZWJ1Z0xheWVyVHJlZVtdID0gIi0tZGVidWctbGF5ZXItdHJlZSI7CkBA
IC04NSwxNyArODUsMTIgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8TW9ja1dlYktpdFBsYXRmb3Jt
U3VwcG9ydD4gbV9tb2NrUGxhdGZvcm07CiB9OwogCi1zdGF0aWMgdm9pZCBydW5UZXN0KFRlc3RT
aGVsbCYgc2hlbGwsIFRlc3RQYXJhbXMmIHBhcmFtcywgY29uc3Qgc3RyaW5nJiB0ZXN0TmFtZSkK
K3N0YXRpYyB2b2lkIHJ1blRlc3QoVGVzdFNoZWxsJiBzaGVsbCwgVGVzdFBhcmFtcyYgcGFyYW1z
LCBjb25zdCBzdHJpbmcmIGlucHV0TGluZSkKIHsKICAgICBpbnQgb2xkVGltZW91dE1zZWMgPSBz
aGVsbC5sYXlvdXRUZXN0VGltZW91dCgpOwotICAgIHBhcmFtcy5waXhlbEhhc2ggPSAiIjsKLSAg
ICBzdHJpbmcgcGF0aE9yVVJMID0gdGVzdE5hbWU7Ci0gICAgc3RyaW5nOjpzaXplX3R5cGUgc2Vw
YXJhdG9yUG9zaXRpb24gPSBwYXRoT3JVUkwuZmluZCgiJyIpOwotICAgIGlmIChzZXBhcmF0b3JQ
b3NpdGlvbiAhPSBzdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgcGFyYW1zLnBpeGVsSGFzaCA9IHBh
dGhPclVSTC5zdWJzdHIoc2VwYXJhdG9yUG9zaXRpb24gKyAxKTsKLSAgICAgICAgcGF0aE9yVVJM
LmVyYXNlKHNlcGFyYXRvclBvc2l0aW9uKTsKLSAgICB9Ci0gICAgcGFyYW1zLnRlc3RVcmwgPSB3
ZWJraXRfc3VwcG9ydDo6Q3JlYXRlVVJMRm9yUGF0aE9yVVJMKHBhdGhPclVSTCk7CisgICAgVGVz
dENvbW1hbmQgY29tbWFuZCA9IHBhcnNlSW5wdXRMaW5lKGlucHV0TGluZSk7CisgICAgcGFyYW1z
LnRlc3RVcmwgPSB3ZWJraXRfc3VwcG9ydDo6Q3JlYXRlVVJMRm9yUGF0aE9yVVJMKGNvbW1hbmQu
cGF0aE9yVVJMKTsKKyAgICBwYXJhbXMucGl4ZWxIYXNoID0gY29tbWFuZC5zaG91bGREdW1wUGl4
ZWxzOwogICAgIHdlYmtpdF9zdXBwb3J0OjpTZXRDdXJyZW50RGlyZWN0b3J5Rm9yRmlsZVVSTChw
YXJhbXMudGVzdFVybCk7CiAgICAgdjg6OlY4OjpTZXRGbGFnc0Zyb21TdHJpbmcoc2hlbGwuamF2
YVNjcmlwdEZsYWdzKCkuY19zdHIoKSwgc2hlbGwuamF2YVNjcmlwdEZsYWdzKCkubGVuZ3RoKCkp
OwogICAgIGlmIChzaGVsbC5zdHJlc3NPcHQoKSB8fCBzaGVsbC5zdHJlc3NEZW9wdCgpKSB7CkBA
IC0xMDgsMTEgKzEwMywxMSBAQCBzdGF0aWMgdm9pZCBydW5UZXN0KFRlc3RTaGVsbCYgc2hlbGws
IFRlc3RQYXJhbXMmIHBhcmFtcywgY29uc3Qgc3RyaW5nJiB0ZXN0TmFtZQogICAgICAgICAgIGJv
b2wgaXNMYXN0TG9hZCA9IChpID09ICh2ODo6VGVzdGluZzo6R2V0U3RyZXNzUnVucygpIC0gMSkp
OwogICAgICAgICAgIHNoZWxsLnNldER1bXBXaGVuRmluaXNoZWQoaXNMYXN0TG9hZCk7CiAgICAg
ICAgICAgc2hlbGwucmVzZXRUZXN0Q29udHJvbGxlcigpOwotICAgICAgICAgIHNoZWxsLnJ1bkZp
bGVUZXN0KHBhcmFtcyk7CisgICAgICAgICAgc2hlbGwucnVuRmlsZVRlc3QocGFyYW1zLCBjb21t
YW5kLnNob3VsZER1bXBQaXhlbHMpOwogICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICBzaGVs
bC5yZXNldFRlc3RDb250cm9sbGVyKCk7Ci0gICAgICBzaGVsbC5ydW5GaWxlVGVzdChwYXJhbXMp
OworICAgICAgc2hlbGwucnVuRmlsZVRlc3QocGFyYW1zLCBjb21tYW5kLnNob3VsZER1bXBQaXhl
bHMpOwogICAgIH0KICAgICBzaGVsbC5zZXRMYXlvdXRUZXN0VGltZW91dChvbGRUaW1lb3V0TXNl
Yyk7CiB9CkBAIC0xNDYsOCArMTQxLDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3Zb
XSkKICAgICAgICAgICAgIHNlcnZlck1vZGUgPSB0cnVlOwogICAgICAgICBlbHNlIGlmIChhcmd1
bWVudCA9PSBvcHRpb25Ob3RyZWUpCiAgICAgICAgICAgICBwYXJhbXMuZHVtcFRyZWUgPSBmYWxz
ZTsKLSAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uUGl4ZWxUZXN0cykKLSAgICAg
ICAgICAgIHBhcmFtcy5kdW1wUGl4ZWxzID0gdHJ1ZTsKICAgICAgICAgZWxzZSBpZiAoYXJndW1l
bnQgPT0gb3B0aW9uRGVidWdSZW5kZXJUcmVlKQogICAgICAgICAgICAgcGFyYW1zLmRlYnVnUmVu
ZGVyVHJlZSA9IHRydWU7CiAgICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvbkRlYnVn
TGF5ZXJUcmVlKQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFNoZWxsLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAK
aW5kZXggNmY5OTFmZjMzNTljNzc0NjFhMjM4Nzk1MThkMzAwYzU2ZmEwYzdmMy4uMTk2YWNkYWFk
ZDgxODc1YzZjNmYxODc1NjA1OWVjZTI5ODg0ZmNiMiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCkBAIC0xMDIsNyArMTAyLDggQEAgc3RhdGljIHZvaWQg
bWFrZUNhbnZhc09wYXF1ZShTa0NhbnZhcyogY2FudmFzKQogfQogCiBUZXN0U2hlbGw6OlRlc3RT
aGVsbCgpCi0gICAgOiBtX3Rlc3RJc1BlbmRpbmcoZmFsc2UpCisgICAgOiBtX2R1bXBQaXhlbHNG
b3JDdXJyZW50VGVzdChmYWxzZSkKKyAgICAsIG1fdGVzdElzUGVuZGluZyhmYWxzZSkKICAgICAs
IG1fdGVzdElzUHJlcGFyaW5nKGZhbHNlKQogICAgICwgbV9mb2N1c2VkV2lkZ2V0KDApCiAgICAg
LCBtX2RldlRvb2xzKDApCkBAIC0yMzcsMTMgKzIzOCwxNiBAQCB2b2lkIFRlc3RTaGVsbDo6cmVz
ZXRXZWJTZXR0aW5ncyhXZWJWaWV3JiB3ZWJWaWV3KQogICAgIG1fcHJlZnMuYXBwbHlUbygmd2Vi
Vmlldyk7CiB9CiAKLXZvaWQgVGVzdFNoZWxsOjpydW5GaWxlVGVzdChjb25zdCBUZXN0UGFyYW1z
JiBwYXJhbXMpCit2b2lkIFRlc3RTaGVsbDo6cnVuRmlsZVRlc3QoY29uc3QgVGVzdFBhcmFtcyYg
cGFyYW1zLCBib29sIHNob3VsZER1bXBQaXhlbHMpCiB7CiAgICAgQVNTRVJUKHBhcmFtcy50ZXN0
VXJsLmlzVmFsaWQoKSk7CisgICAgbV9kdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgPSBzaG91bGRE
dW1wUGl4ZWxzOwogICAgIG1fdGVzdElzUHJlcGFyaW5nID0gdHJ1ZTsKICAgICBtX3BhcmFtcyA9
IHBhcmFtczsKICAgICBzdHJpbmcgdGVzdFVybCA9IG1fcGFyYW1zLnRlc3RVcmwuc3BlYygpOwog
CisgICAgbV9sYXlvdXRUZXN0Q29udHJvbGxlci0+c2V0U2hvdWxkR2VuZXJhdGVQaXhlbFJlc3Vs
dHMoc2hvdWxkRHVtcFBpeGVscyk7CisKICAgICBpZiAodGVzdFVybC5maW5kKCJsb2FkaW5nLyIp
ICE9IHN0cmluZzo6bnBvcwogICAgICAgICB8fCB0ZXN0VXJsLmZpbmQoImxvYWRpbmdcXCIpICE9
IHN0cmluZzo6bnBvcykKICAgICAgICAgbV9sYXlvdXRUZXN0Q29udHJvbGxlci0+c2V0U2hvdWxk
RHVtcEZyYW1lTG9hZENhbGxiYWNrcyh0cnVlKTsKQEAgLTYwOSw3ICs2MTMsNyBAQCB2b2lkIFRl
c3RTaGVsbDo6ZHVtcCgpCiAgICAgaWYgKGR1bXBlZEFueXRoaW5nICYmIG1fcGFyYW1zLnByaW50
U2VwYXJhdG9ycykKICAgICAgICAgbV9wcmludGVyLmhhbmRsZVRleHRGb290ZXIoKTsKIAotICAg
IGlmIChtX3BhcmFtcy5kdW1wUGl4ZWxzICYmIHNob3VsZEdlbmVyYXRlUGl4ZWxSZXN1bHRzKSB7
CisgICAgaWYgKG1fZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ICYmIHNob3VsZEdlbmVyYXRlUGl4
ZWxSZXN1bHRzKSB7CiAgICAgICAgIC8vIEltYWdlIG91dHB1dDogd2Ugd3JpdGUgdGhlIGltYWdl
IGRhdGEgdG8gdGhlIGZpbGUgZ2l2ZW4gb24gdGhlCiAgICAgICAgIC8vIGNvbW1hbmQgbGluZSAo
Zm9yIHRoZSBkdW1wIHBpeGVscyBhcmd1bWVudCksIGFuZCB0aGUgTUQ1IHN1bSB0bwogICAgICAg
ICAvLyBzdGRvdXQuCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0U2hlbGwuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oCmlu
ZGV4IDA3NzgxNjM2YmE3NTA3NTk1MmIyZmYzOGM0YzQ3M2RkNzZjNGNiNWMuLjhhZjZiOTM2ZDM3
ODM2YTU3YmExYzQzNWQyOGZkNGI0YTY4YzQ5NDggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RTaGVsbC5oCkBAIC02NCw3ICs2NCw2IEBAIGNsYXNzIFdlYlBlcm1pc3Npb25z
OwogCiBzdHJ1Y3QgVGVzdFBhcmFtcyB7CiAgICAgYm9vbCBkdW1wVHJlZTsKLSAgICBib29sIGR1
bXBQaXhlbHM7CiAgICAgYm9vbCBkZWJ1Z1JlbmRlclRyZWU7CiAgICAgYm9vbCBkZWJ1Z0xheWVy
VHJlZTsKICAgICBib29sIHByaW50U2VwYXJhdG9yczsKQEAgLTczLDcgKzcyLDYgQEAgc3RydWN0
IFRlc3RQYXJhbXMgewogCiAgICAgVGVzdFBhcmFtcygpCiAgICAgICAgIDogZHVtcFRyZWUodHJ1
ZSkKLSAgICAgICAgLCBkdW1wUGl4ZWxzKGZhbHNlKQogICAgICAgICAsIGRlYnVnUmVuZGVyVHJl
ZShmYWxzZSkKICAgICAgICAgLCBkZWJ1Z0xheWVyVHJlZShmYWxzZSkKICAgICAgICAgLCBwcmlu
dFNlcGFyYXRvcnMoZmFsc2UpIHsgfQpAQCAtMTA0LDcgKzEwMiw3IEBAIHB1YmxpYzoKICAgICBX
ZWJQZXJtaXNzaW9ucyogd2ViUGVybWlzc2lvbnMoKSB7IHJldHVybiBtX3dlYlBlcm1pc3Npb25z
LmdldCgpOyB9CiAKICAgICB2b2lkIGJpbmRKU09iamVjdHNUb1dpbmRvdyhXZWJLaXQ6OldlYkZy
YW1lKik7Ci0gICAgdm9pZCBydW5GaWxlVGVzdChjb25zdCBUZXN0UGFyYW1zJik7CisgICAgdm9p
ZCBydW5GaWxlVGVzdChjb25zdCBUZXN0UGFyYW1zJiwgYm9vbCBzaG91bGREdW1wUGl4ZWxUZXN0
cyk7CiAgICAgdm9pZCBjYWxsSlNHQygpOwogICAgIHZvaWQgcmVzZXRUZXN0Q29udHJvbGxlcigp
OwogICAgIHZvaWQgd2FpdFRlc3RGaW5pc2hlZCgpOwpAQCAtMjI2LDYgKzIyNCw3IEBAIHByaXZh
dGU6CiAjZW5kaWYKIAogICAgIFRlc3RQYXJhbXMgbV9wYXJhbXM7CisgICAgYm9vbCBtX2R1bXBQ
aXhlbHNGb3JDdXJyZW50VGVzdDsKICAgICBpbnQgbV90aW1lb3V0OyAvLyB0aW1lb3V0IHZhbHVl
IGluIG1pbGxpc2Vjb25kCiAgICAgYm9vbCBtX2FsbG93RXh0ZXJuYWxQYWdlczsKICAgICBib29s
IG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclZpZGVvRW5hYmxlZDsKZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4dCBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2VmbC9DTWFrZUxpc3RzLnR4dAppbmRleCBlMWRhY2Y5MDFiYTA2MjVhNWExZTgwN2VjNmI5
NDUzNDM0OTg0Y2FhLi4wNjdkYmQzMmI3YWE5MWY1YTU0N2NiN2JlNTdmZjRiZGY1OTk5MzI5IDEw
MDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VMaXN0cy50eHQKKysrIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0NNYWtlTGlzdHMudHh0CkBAIC0xLDQgKzEsNSBAQAog
U0VUKER1bXBSZW5kZXJUcmVlX1NPVVJDRVMKKyAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRy
ZWUvRHVtcFJlbmRlclRyZWVDb21tb24uY3BwCiAgICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJU
cmVlL0N5Y2xpY1JlZHVuZGFuY3lDaGVjay5jcHAKICAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRl
clRyZWUvR0NDb250cm9sbGVyLmNwcAogICAgICR7VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJlZS9M
YXlvdXRUZXN0Q29udHJvbGxlci5jcHAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2VmbC9EdW1wUmVuZGVyVHJlZS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJl
bmRlclRyZWUuY3BwCmluZGV4IGMyYzlkNzFjMGM1MTVjYjA4Y2Q0MTJkNDJhZGQwZDEwNWNhOTc1
OWMuLjc2MTNmNGU0ZmYwZTU2NTM1NjI4OGQ0YzdkNDRmZjM5YTgyZTk2M2UgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZS5jcHAKKysrIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlLmNwcApAQCAtNjQsNyArNjQsNyBAQCBl
eHRlcm4gRXdrX0hpc3RvcnlfSXRlbSogcHJldlRlc3RCRkl0ZW07CiBSZWZQdHI8TGF5b3V0VGVz
dENvbnRyb2xsZXI+IGdMYXlvdXRUZXN0Q29udHJvbGxlcjsKIHZvbGF0aWxlIGJvb2wgZG9uZSA9
IGZhbHNlOwogCi1zdGF0aWMgaW50IGR1bXBQaXhlbHMgPSBmYWxzZTsKK3N0YXRpYyBib29sIGR1
bXBQaXhlbHNGb3JDdXJyZW50VGVzdDsKIHN0YXRpYyBpbnQgZHVtcFRyZWUgPSB0cnVlOwogc3Rh
dGljIGludCBwcmludFNlcGFyYXRvcnMgPSB0cnVlOwogc3RhdGljIGludCB1c2VYMTFXaW5kb3cg
PSBmYWxzZTsKQEAgLTE5Miw3ICsxOTIsNiBAQCBzdGF0aWMgYm9vbCBwYXJzZUNvbW1hbmRMaW5l
T3B0aW9ucyhpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7CiAgICAgc3RhdGljIGNvbnN0IG9wdGlv
biBvcHRpb25zW10gPSB7CiAgICAgICAgIHsibm90cmVlIiwgbm9fYXJndW1lbnQsICZkdW1wVHJl
ZSwgZmFsc2V9LAotICAgICAgICB7InBpeGVsLXRlc3RzIiwgbm9fYXJndW1lbnQsICZkdW1wUGl4
ZWxzLCB0cnVlfSwKICAgICAgICAgeyJ0cmVlIiwgbm9fYXJndW1lbnQsICZkdW1wVHJlZSwgdHJ1
ZX0sCiAgICAgICAgIHsiZ3VpIiwgbm9fYXJndW1lbnQsICZ1c2VYMTFXaW5kb3csIHRydWV9LAog
ICAgICAgICB7MCwgMCwgMCwgMH0KQEAgLTIxMCwzMiArMjA5LDYgQEAgc3RhdGljIGJvb2wgcGFy
c2VDb21tYW5kTGluZU9wdGlvbnMoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgIHJldHVybiB0
cnVlOwogfQogCi1zdGF0aWMgU3RyaW5nIGdldEZpbmFsVGVzdFVSTChjb25zdCBTdHJpbmcmIHRl
c3RVUkwpCi17Ci0gICAgY29uc3Qgc2l6ZV90IGhhc2hTZXBhcmF0b3JQb3MgPSB0ZXN0VVJMLmZp
bmQoIiciKTsKLSAgICBpZiAoaGFzaFNlcGFyYXRvclBvcyAhPSBub3RGb3VuZCkKLSAgICAgICAg
cmV0dXJuIGdldEZpbmFsVGVzdFVSTCh0ZXN0VVJMLmxlZnQoaGFzaFNlcGFyYXRvclBvcykpOwot
Ci0gICAgLy8gQ29udmVydCB0aGUgcGF0aCBpbnRvIGEgZnVsbCBmaWxlIFVSTCBpZiBpdCBkb2Vz
IG5vdCBsb29rCi0gICAgLy8gbGlrZSBhbiBIVFRQL1MgVVJMIChkb2Vzbid0IHN0YXJ0IHdpdGgg
aHR0cDovLyBvciBodHRwczovLykuCi0gICAgaWYgKCF0ZXN0VVJMLnN0YXJ0c1dpdGgoImh0dHA6
Ly8iKSAmJiAhdGVzdFVSTC5zdGFydHNXaXRoKCJodHRwczovLyIpKSB7Ci0gICAgICAgIGNoYXIq
IGNGaWxlUGF0aCA9IGVjb3JlX2ZpbGVfcmVhbHBhdGgodGVzdFVSTC51dGY4KCkuZGF0YSgpKTsK
LSAgICAgICAgY29uc3QgU3RyaW5nIGZpbGVQYXRoID0gU3RyaW5nOjpmcm9tVVRGOChjRmlsZVBh
dGgpOwotICAgICAgICBmcmVlKGNGaWxlUGF0aCk7Ci0KLSAgICAgICAgaWYgKGVjb3JlX2ZpbGVf
ZXhpc3RzKGZpbGVQYXRoLnV0ZjgoKS5kYXRhKCkpKQotICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZygiZmlsZTovLyIpICsgZmlsZVBhdGg7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRlc3RVUkw7Ci19
Ci0KLXN0YXRpYyBTdHJpbmcgZ2V0RXhwZWN0ZWRQaXhlbEhhc2goY29uc3QgU3RyaW5nJiB0ZXN0
VVJMKQotewotICAgIGNvbnN0IHNpemVfdCBoYXNoU2VwYXJhdG9yUG9zID0gdGVzdFVSTC5maW5k
KCInIik7Ci0gICAgcmV0dXJuIChoYXNoU2VwYXJhdG9yUG9zICE9IG5vdEZvdW5kKSA/IHRlc3RV
Ukwuc3Vic3RyaW5nKGhhc2hTZXBhcmF0b3JQb3MgKyAxKSA6IFN0cmluZygpOwotfQotCiBzdGF0
aWMgaW5saW5lIGJvb2wgaXNHbG9iYWxIaXN0b3J5VGVzdChjb25zdCBTdHJpbmcmIGNUZXN0UGF0
aE9yVVJMKQogewogICAgIHJldHVybiBjVGVzdFBhdGhPclVSTC5jb250YWlucygiL2dsb2JhbGhp
c3RvcnkvIik7CkBAIC0yNjcsMTMgKzI0MCwxMyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVMYXlvdXRU
ZXN0Q29udHJvbGxlcihjb25zdCBTdHJpbmcmIHRlc3RVUkwsIGNvbnN0IFN0cmluZyYgZXhwZQog
ICAgIH0KIH0KIAotc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBjaGFyKiBjVGVzdFBhdGhPclVS
TCkKK3N0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3QgY2hhciogaW5wdXRMaW5lKQogewotICAgIGNv
bnN0IFN0cmluZyB0ZXN0UGF0aE9yVVJMID0gU3RyaW5nOjpmcm9tVVRGOChjVGVzdFBhdGhPclVS
TCk7Ci0gICAgQVNTRVJUKCF0ZXN0UGF0aE9yVVJMLmlzRW1wdHkoKSk7Ci0KLSAgICBjb25zdCBT
dHJpbmcgdGVzdFVSTCA9IGdldEZpbmFsVGVzdFVSTCh0ZXN0UGF0aE9yVVJMKTsKLSAgICBjb25z
dCBTdHJpbmcgZXhwZWN0ZWRQaXhlbEhhc2ggPSBnZXRFeHBlY3RlZFBpeGVsSGFzaCh0ZXN0UGF0
aE9yVVJMKTsKKyAgICBUZXN0Q29tbWFuZCBjb21tYW5kID0gcGFyc2VJbnB1dExpbmUoaW5wdXRM
aW5lKTsKKyAgICBjb25zdCBTdHJpbmcgdGVzdFVSTChjb21tYW5kLnBhdGhPclVSTC5jX3N0cigp
KTsKKyAgICBBU1NFUlQoIXRlc3RVUkwuaXNFbXB0eSgpKTsKKyAgICBkdW1wUGl4ZWxzRm9yQ3Vy
cmVudFRlc3QgPSBjb21tYW5kLnNob3VsZER1bXBQaXhlbHM7CisgICAgY29uc3QgU3RyaW5nIGV4
cGVjdGVkUGl4ZWxIYXNoKGNvbW1hbmQuZXhwZWN0ZWRQaXhlbEhhc2guY19zdHIoKSk7CiAKICAg
ICBicm93c2VyLT5yZXNldERlZmF1bHRzVG9Db25zaXN0ZW50VmFsdWVzKCk7CiAgICAgY3JlYXRl
TGF5b3V0VGVzdENvbnRyb2xsZXIodGVzdFVSTCwgZXhwZWN0ZWRQaXhlbEhhc2gpOwpAQCAtMzUx
LDcgKzMyNCw3IEBAIHN0YXRpYyBib29sIHNob3VsZER1bXBGcmFtZVNjcm9sbFBvc2l0aW9uKCkK
IAogc3RhdGljIGJvb2wgc2hvdWxkRHVtcFBpeGVsc0FuZENvbXBhcmVXaXRoRXhwZWN0ZWQoKQog
ewotICAgIHJldHVybiBkdW1wUGl4ZWxzICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+Z2VuZXJh
dGVQaXhlbFJlc3VsdHMoKSAmJiAhZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRE9NQXNXZWJB
cmNoaXZlKCkgJiYgIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFNvdXJjZUFzV2ViQXJjaGl2
ZSgpOworICAgIHJldHVybiBkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgJiYgZ0xheW91dFRlc3RD
b250cm9sbGVyLT5nZW5lcmF0ZVBpeGVsUmVzdWx0cygpICYmICFnTGF5b3V0VGVzdENvbnRyb2xs
ZXItPmR1bXBET01Bc1dlYkFyY2hpdmUoKSAmJiAhZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1w
U291cmNlQXNXZWJBcmNoaXZlKCk7CiB9CiAKIHN0YXRpYyBib29sIHNob3VsZER1bXBCYWNrRm9y
d2FyZExpc3QoKQpAQCAtNDU4LDcgKzQzMSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiog
YXJndikKICAgICAgICAgcHJpbnRTZXBhcmF0b3JzID0gdHJ1ZTsKICAgICAgICAgcnVuVGVzdGlu
Z1NlcnZlckxvb3AoKTsKICAgICB9IGVsc2UgewotICAgICAgICBwcmludFNlcGFyYXRvcnMgPSAo
b3B0aW5kIDwgYXJnYyAtIDEgfHwgKGR1bXBQaXhlbHMgJiYgZHVtcFRyZWUpKTsKKyAgICAgICAg
cHJpbnRTZXBhcmF0b3JzID0gKG9wdGluZCA8IGFyZ2MgLSAxIHx8IChkdW1wUGl4ZWxzRm9yQ3Vy
cmVudFRlc3QgJiYgZHVtcFRyZWUpKTsKICAgICAgICAgZm9yIChpbnQgaSA9IG9wdGluZDsgaSAh
PSBhcmdjOyArK2kpCiAgICAgICAgICAgICBydW5UZXN0KGFyZ3ZbaV0pOwogICAgIH0KZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwCmluZGV4IDU3Y2QwNTkxN2U4
MjI1NThiNDgzNzZlMDEwMmQ4MDBhNmJjZmNjZGEuLmViZGE1Y2ZiMjMxODlmYzJhNzk1YzRjOTgw
NWUwYmNiZWFmNWNmODcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1w
UmVuZGVyVHJlZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJU
cmVlLmNwcApAQCAtNzMsNyArNzMsNyBAQCBleHRlcm4gZ2NoYXIqIHdlYmtpdF93ZWJfZnJhbWVf
Z2V0X3Jlc3BvbnNlX21pbWVfdHlwZShXZWJLaXRXZWJGcmFtZSogZnJhbWUpOwogCiB2b2xhdGls
ZSBib29sIGRvbmU7CiBzdGF0aWMgYm9vbCBwcmludFNlcGFyYXRvcnM7Ci1zdGF0aWMgaW50IGR1
bXBQaXhlbHM7CitzdGF0aWMgYm9vbCBkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3Q7CiBzdGF0aWMg
aW50IGR1bXBUcmVlID0gMTsKIHN0YXRpYyBpbnQgdXNlVGltZW91dFdhdGNoZG9nID0gMTsKIApA
QCAtNTQ0LDcgKzU0NCw2IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVHbG9iYWxzRnJvbUNvbW1h
bmRMaW5lT3B0aW9ucyhpbnQgYXJnYywgY2hhciAqYXJndltdKQogewogICAgIHN0cnVjdCBvcHRp
b24gb3B0aW9uc1tdID0gewogICAgICAgICB7Im5vdHJlZSIsIG5vX2FyZ3VtZW50LCAmZHVtcFRy
ZWUsIGZhbHNlfSwKLSAgICAgICAgeyJwaXhlbC10ZXN0cyIsIG5vX2FyZ3VtZW50LCAmZHVtcFBp
eGVscywgdHJ1ZX0sCiAgICAgICAgIHsidHJlZSIsIG5vX2FyZ3VtZW50LCAmZHVtcFRyZWUsIHRy
dWV9LAogICAgICAgICB7Im5vLXRpbWVvdXQiLCBub19hcmd1bWVudCwgJnVzZVRpbWVvdXRXYXRj
aGRvZywgZmFsc2V9LAogICAgICAgICB7TlVMTCwgMCwgTlVMTCwgMH0KQEAgLTYyNCw3ICs2MjMs
NyBAQCB2b2lkIGR1bXAoKQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGR1bXBQaXhlbHMK
KyAgICBpZiAoZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0CiAgICAgICYmIGdMYXlvdXRUZXN0Q29u
dHJvbGxlci0+Z2VuZXJhdGVQaXhlbFJlc3VsdHMoKQogICAgICAmJiAhZ0xheW91dFRlc3RDb250
cm9sbGVyLT5kdW1wRE9NQXNXZWJBcmNoaXZlKCkKICAgICAgJiYgIWdMYXlvdXRUZXN0Q29udHJv
bGxlci0+ZHVtcFNvdXJjZUFzV2ViQXJjaGl2ZSgpKSB7CkBAIC02ODcsMTggKzY4NiwxMyBAQCBz
dGF0aWMgdm9pZCBzZW5kUGl4ZWxSZXN1bHRzRU9GKCkKICAgICBmZmx1c2goc3RkZXJyKTsKIH0K
IAotc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIHRlc3RQYXRoT3JVUkwpCitzdGF0
aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYgaW5wdXRMaW5lKQogewogICAgIEFTU0VSVCgh
dGVzdFBhdGhPclVSTC5lbXB0eSgpKTsKIAotICAgIC8vIExvb2sgZm9yICInIiBhcyBhIHNlcGFy
YXRvciBiZXR3ZWVuIHRoZSBwYXRoIG9yIFVSTCwgYW5kIHRoZSBwaXhlbCBkdW1wIGhhc2ggdGhh
dCBmb2xsb3dzLgotICAgIHN0cmluZyB0ZXN0VVJMKHRlc3RQYXRoT3JVUkwpOwotICAgIHN0cmlu
ZyBleHBlY3RlZFBpeGVsSGFzaDsKLSAgICBzaXplX3Qgc2VwYXJhdG9yUG9zID0gdGVzdFVSTC5m
aW5kKCInIik7Ci0gICAgaWYgKHNlcGFyYXRvclBvcyAhPSBzdHJpbmc6Om5wb3MpIHsKLSAgICAg
ICAgdGVzdFVSTCA9IHN0cmluZyh0ZXN0UGF0aE9yVVJMLCAwLCBzZXBhcmF0b3JQb3MpOwotICAg
ICAgICBleHBlY3RlZFBpeGVsSGFzaCA9IHN0cmluZyh0ZXN0UGF0aE9yVVJMLCBzZXBhcmF0b3JQ
b3MgKyAxKTsKLSAgICB9CisgICAgVGVzdENvbW1hbmQgY29tbWFuZCA9IHBhcnNlSW5wdXRMaW5l
KGlucHV0TGluZSk7CisgICAgc3RyaW5nJiB0ZXN0VVJMID0gY29tbWFuZC5wYXRoT3JVUkw7Cisg
ICAgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gY29tbWFuZC5zaG91bGREdW1wUGl4ZWxzOwog
CiAgICAgLy8gQ29udmVydCB0aGUgcGF0aCBpbnRvIGEgZnVsbCBmaWxlIFVSTCBpZiBpdCBkb2Vz
IG5vdCBsb29rCiAgICAgLy8gbGlrZSBhbiBIVFRQL1MgVVJMIChkb2Vzbid0IHN0YXJ0IHdpdGgg
aHR0cDovLyBvciBodHRwczovLykuCkBAIC03MTIsNyArNzA2LDcgQEAgc3RhdGljIHZvaWQgcnVu
VGVzdChjb25zdCBzdHJpbmcmIHRlc3RQYXRoT3JVUkwpCiAKICAgICByZXNldERlZmF1bHRzVG9D
b25zaXN0ZW50VmFsdWVzKCk7CiAKLSAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXIgPSBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6Y3JlYXRlKHRlc3RVUkwsIGV4cGVjdGVkUGl4ZWxIYXNoKTsKKyAgICBn
TGF5b3V0VGVzdENvbnRyb2xsZXIgPSBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y3JlYXRlKHRlc3RV
UkwsIGNvbW1hbmQuZXhwZWN0ZWRQaXhlbEhhc2gpOwogICAgIHRvcExvYWRpbmdGcmFtZSA9IDA7
CiAgICAgZG9uZSA9IGZhbHNlOwogCkBAIC0xNDQ3LDcgKzE0NDEsNyBAQCBpbnQgbWFpbihpbnQg
YXJnYywgY2hhciogYXJndltdKQogICAgICAgICBwcmludFNlcGFyYXRvcnMgPSB0cnVlOwogICAg
ICAgICBydW5UZXN0aW5nU2VydmVyTG9vcCgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHByaW50
U2VwYXJhdG9ycyA9IChvcHRpbmQgPCBhcmdjLTEgfHwgKGR1bXBQaXhlbHMgJiYgZHVtcFRyZWUp
KTsKKyAgICAgICAgcHJpbnRTZXBhcmF0b3JzID0gKG9wdGluZCA8IGFyZ2MtMSB8fCAoZHVtcFBp
eGVsc0ZvckN1cnJlbnRUZXN0ICYmIGR1bXBUcmVlKSk7CiAgICAgICAgIGZvciAoaW50IGkgPSBv
cHRpbmQ7IGkgIT0gYXJnYzsgKytpKQogICAgICAgICAgICAgcnVuVGVzdChhcmd2W2ldKTsKICAg
ICB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUu
bW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KaW5kZXggYWJi
YTUzNWVkZGM4OGEzOTQ5MDI5NGZkNDUxYTM5MTk2OGZjYzNkMS4uM2Y5ZDQyNjY0NTFmYWNiZTEx
NTA5NjIwMzU1OTc5MDMyYmViZTZmYiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL0R1bXBSZW5kZXJUcmVlLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1w
UmVuZGVyVHJlZS5tbQpAQCAtMTQwLDcgKzE0MCw3IEBAIHN0YXRpYyBIaXN0b3J5RGVsZWdhdGUg
Kmhpc3RvcnlEZWxlZ2F0ZTsKIFBvbGljeURlbGVnYXRlICpwb2xpY3lEZWxlZ2F0ZTsKIFN0b3Jh
Z2VUcmFja2VyRGVsZWdhdGUgKnN0b3JhZ2VEZWxlZ2F0ZTsKIAotc3RhdGljIGludCBkdW1wUGl4
ZWxzOworc3RhdGljIGJvb2wgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0Owogc3RhdGljIGludCB0
aHJlYWRlZDsKIHN0YXRpYyBpbnQgZHVtcFRyZWUgPSBZRVM7CiBzdGF0aWMgaW50IHVzZVRpbWVv
dXRXYXRjaGRvZyA9IFlFUzsKQEAgLTc4MCw3ICs3ODAsNiBAQCBzdGF0aWMgdm9pZCBpbml0aWFs
aXplR2xvYmFsc0Zyb21Db21tYW5kTGluZU9wdGlvbnMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFy
Z3ZbXQogewogICAgIHN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0gewogICAgICAgICB7Im5vdHJl
ZSIsIG5vX2FyZ3VtZW50LCAmZHVtcFRyZWUsIE5PfSwKLSAgICAgICAgeyJwaXhlbC10ZXN0cyIs
IG5vX2FyZ3VtZW50LCAmZHVtcFBpeGVscywgWUVTfSwKICAgICAgICAgeyJ0cmVlIiwgbm9fYXJn
dW1lbnQsICZkdW1wVHJlZSwgWUVTfSwKICAgICAgICAgeyJ0aHJlYWRlZCIsIG5vX2FyZ3VtZW50
LCAmdGhyZWFkZWQsIFlFU30sCiAgICAgICAgIHsiY29tcGxleC10ZXh0Iiwgbm9fYXJndW1lbnQs
ICZmb3JjZUNvbXBsZXhUZXh0LCBZRVN9LApAQCAtODQ5LDcgKzg0OCw3IEBAIHZvaWQgZHVtcFJl
bmRlclRyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkKICAgICBpbml0aWFsaXplR2xv
YmFsc0Zyb21Db21tYW5kTGluZU9wdGlvbnMoYXJnYywgYXJndik7CiAgICAgcHJlcGFyZUNvbnNp
c3RlbnRUZXN0aW5nRW52aXJvbm1lbnQoKTsKICAgICBhZGRUZXN0UGx1Z2luc1RvUGx1Z2luU2Vh
cmNoUGF0aChhcmd2WzBdKTsKLSAgICBpZiAoZHVtcFBpeGVscykKKyAgICBpZiAoZHVtcFBpeGVs
c0ZvckN1cnJlbnRUZXN0KQogICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcnMoKTsKIAogICAg
IGlmIChmb3JjZUNvbXBsZXhUZXh0KQpAQCAtODc0LDcgKzg3Myw3IEBAIHZvaWQgZHVtcFJlbmRl
clRyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkKICAgICAgICAgcHJpbnRTZXBhcmF0
b3JzID0gWUVTOwogICAgICAgICBydW5UZXN0aW5nU2VydmVyTG9vcCgpOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIHByaW50U2VwYXJhdG9ycyA9IChvcHRpbmQgPCBhcmdjLTEgfHwgKGR1bXBQaXhl
bHMgJiYgZHVtcFRyZWUpKTsKKyAgICAgICAgcHJpbnRTZXBhcmF0b3JzID0gKG9wdGluZCA8IGFy
Z2MgLSAxIHx8IChkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgJiYgZHVtcFRyZWUpKTsKICAgICAg
ICAgZm9yIChpbnQgaSA9IG9wdGluZDsgaSAhPSBhcmdjOyArK2kpCiAgICAgICAgICAgICBydW5U
ZXN0KGFyZ3ZbaV0pOwogICAgIH0KQEAgLTExOTUsNyArMTE5NCw3IEBAIHZvaWQgZHVtcCgpCiAg
ICAgICAgIH0gICAgICAgICAgICAKICAgICB9CiAKLSAgICBpZiAoZHVtcFBpeGVscyAmJiBnTGF5
b3V0VGVzdENvbnRyb2xsZXItPmdlbmVyYXRlUGl4ZWxSZXN1bHRzKCkpCisgICAgaWYgKGR1bXBQ
aXhlbHNGb3JDdXJyZW50VGVzdCAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmdlbmVyYXRlUGl4
ZWxSZXN1bHRzKCkpCiAgICAgICAgIC8vIEZJWE1FOiB3aGVuIGlzUHJpbnRpbmcgaXMgc2V0LCBk
dW1wIHRoZSBpbWFnZSB3aXRoIHBhZ2Ugc2VwYXJhdG9ycy4KICAgICAgICAgZHVtcFdlYlZpZXdB
c1BpeGVsc0FuZENvbXBhcmVXaXRoRXhwZWN0ZWQoZ0xheW91dFRlc3RDb250cm9sbGVyLT5leHBl
Y3RlZFBpeGVsSGFzaCgpKTsKIApAQCAtMTI3NiwxOSArMTI3NSwxMyBAQCBzdGF0aWMgdm9pZCBy
ZXNldFdlYlZpZXdUb0NvbnNpc3RlbnRTdGF0ZUJlZm9yZVRlc3RpbmcoKQogICAgIFttYWluRnJh
bWUgX2NsZWFyT3BlbmVyXTsKIH0KIAotc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcm
IHRlc3RQYXRoT3JVUkwpCitzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYgaW5wdXRM
aW5lKQogewotICAgIEFTU0VSVCghdGVzdFBhdGhPclVSTC5lbXB0eSgpKTsKLSAgICAKLSAgICAv
LyBMb29rIGZvciAiJyIgYXMgYSBzZXBhcmF0b3IgYmV0d2VlbiB0aGUgcGF0aCBvciBVUkwsIGFu
ZCB0aGUgcGl4ZWwgZHVtcCBoYXNoIHRoYXQgZm9sbG93cy4KLSAgICBzdHJpbmcgcGF0aE9yVVJM
KHRlc3RQYXRoT3JVUkwpOwotICAgIHN0cmluZyBleHBlY3RlZFBpeGVsSGFzaDsKLSAgICAKLSAg
ICBzaXplX3Qgc2VwYXJhdG9yUG9zID0gcGF0aE9yVVJMLmZpbmQoIiciKTsKLSAgICBpZiAoc2Vw
YXJhdG9yUG9zICE9IHN0cmluZzo6bnBvcykgewotICAgICAgICBwYXRoT3JVUkwgPSBzdHJpbmco
dGVzdFBhdGhPclVSTCwgMCwgc2VwYXJhdG9yUG9zKTsKLSAgICAgICAgZXhwZWN0ZWRQaXhlbEhh
c2ggPSBzdHJpbmcodGVzdFBhdGhPclVSTCwgc2VwYXJhdG9yUG9zICsgMSk7Ci0gICAgfQorICAg
IEFTU0VSVCghaW5wdXRMaW5lLmVtcHR5KCkpOworCisgICAgVGVzdENvbW1hbmQgY29tbWFuZCA9
IHBhcnNlSW5wdXRMaW5lKGlucHV0TGluZSk7CisgICAgY29uc3Qgc3RyaW5nJiBwYXRoT3JVUkwg
PSBjb21tYW5kLnBhdGhPclVSTDsKKyAgICBkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgPSBjb21t
YW5kLnNob3VsZER1bXBQaXhlbHM7CiAKICAgICBOU1N0cmluZyAqcGF0aE9yVVJMU3RyaW5nID0g
W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnBhdGhPclVSTC5jX3N0cigpXTsKICAgICBp
ZiAoIXBhdGhPclVSTFN0cmluZykgewpAQCAtMTMxMCw3ICsxMzAzLDcgQEAgc3RhdGljIHZvaWQg
cnVuVGVzdChjb25zdCBzdHJpbmcmIHRlc3RQYXRoT3JVUkwpCiAgICAgCiAgICAgcmVzZXRXZWJW
aWV3VG9Db25zaXN0ZW50U3RhdGVCZWZvcmVUZXN0aW5nKCk7CiAKLSAgICBnTGF5b3V0VGVzdENv
bnRyb2xsZXIgPSBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y3JlYXRlKHRlc3RVUkwsIGV4cGVjdGVk
UGl4ZWxIYXNoKTsKKyAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXIgPSBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6Y3JlYXRlKHRlc3RVUkwsIGNvbW1hbmQuZXhwZWN0ZWRQaXhlbEhhc2gpOwogICAgIHRv
cExvYWRpbmdGcmFtZSA9IG5pbDsKICAgICBBU1NFUlQoIWRyYWdnaW5nSW5mbyk7IC8vIHRoZSBw
cmV2aW91cyB0ZXN0IHNob3VsZCBoYXZlIGNhbGxlZCBldmVudFNlbmRlci5tb3VzZVVwIHRvIGRy
b3AhCiAgICAgcmVsZWFzZUFuZFplcm8oJmRyYWdnaW5nSW5mbyk7CmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5wcm8gYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5wcm8KaW5kZXggZjQ3ZmI0MzQ0YjllZjgzYTVhYTQ2YmI1
NjgzZDkyMzE0OTRhYTEyNS4uODMzODcwYmNhYzlhODJlZGNlZTgxZWQ1ZGJhMzE5MTBhY2YwZjBm
MiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUucHJv
CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlLnBybwpAQCAtMjUs
NiArMjUsNyBAQCBjb250YWlucyhERUZJTkVTLCBIQVZFX0ZPTlRDT05GSUc9MSk6IFBLR0NPTkZJ
RyArPSBmb250Y29uZmlnCiAKIEhFQURFUlMgKz0gXAogICAgICQkUFdELy4uL1dvcmtRdWV1ZS5o
IFwKKyAgICAkJFBXRC8uLi9EdW1wUmVuZGVyVHJlZS5oIFwKICAgICBEdW1wUmVuZGVyVHJlZVF0
LmggXAogICAgIEV2ZW50U2VuZGVyUXQuaCBcCiAgICAgVGV4dElucHV0Q29udHJvbGxlclF0Lmgg
XApAQCAtMzYsNiArMzcsNyBAQCBIRUFERVJTICs9IFwKIAogU09VUkNFUyArPSBcCiAgICAgJCRQ
V0QvLi4vV29ya1F1ZXVlLmNwcCBcCisgICAgJCRQV0QvLi4vRHVtcFJlbmRlclRyZWVDb21tb24u
Y3BwIFwKICAgICBEdW1wUmVuZGVyVHJlZVF0LmNwcCBcCiAgICAgRXZlbnRTZW5kZXJRdC5jcHAg
XAogICAgIFRleHRJbnB1dENvbnRyb2xsZXJRdC5jcHAgXApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcAppbmRleCAwZWNmNjIyZjNmOGRkYTU2YzRjODhjZWZj
ZjA4YTNjOThjZjIzN2M0Li41YTVjYjk2YWRlYzkzY2QwZWI2ODUwMGU3NmVjMzFlZmRkYTA5N2Fm
IDEwMDc1NQotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNw
cAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcApAQCAt
MzAsNiArMzAsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEdW1w
UmVuZGVyVHJlZS5oIgogCiAjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVRdC5oIgogI2luY2x1ZGUg
IkR1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmgiCkBAIC02OTAsNDQgKzY5MSwyNyBAQCB2b2lkIER1
bXBSZW5kZXJUcmVlOjpsb2FkTmV4dFRlc3RJblN0YW5kQWxvbmVNb2RlKCkKIAogdm9pZCBEdW1w
UmVuZGVyVHJlZTo6cHJvY2Vzc0xpbmUoY29uc3QgUVN0cmluZyAmaW5wdXQpCiB7Ci0gICAgUVN0
cmluZyBsaW5lID0gaW5wdXQ7Ci0KLSAgICBtX2R1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCA9IGZh
bHNlOwotICAgIG1fZXhwZWN0ZWRIYXNoID0gUVN0cmluZygpOwotICAgIC8vIHNpbmdsZSBxdW90
ZSBtYXJrcyB0aGUgcGl4ZWwgZHVtcCBoYXNoCi0gICAgaW50IGluZGV4T2ZGaXJzdFNlcGFyYXRv
ciA9IGxpbmUuaW5kZXhPZignXCcnKTsKLSAgICBpbnQgaW5kZXhPZlNlY29uZFNlcGFyYXRvciA9
IGxpbmUuaW5kZXhPZignXCcnLCBpbmRleE9mRmlyc3RTZXBhcmF0b3IgKyAxKTsKLSAgICBpZiAo
aW5kZXhPZkZpcnN0U2VwYXJhdG9yID4gLTEpIHsKLSAgICAgICAgaW50IGluZGV4T2ZQaXhlbEhh
c2ggPSBpbmRleE9mRmlyc3RTZXBhcmF0b3IgKyAxOwotCi0gICAgICAgIC8vIE5SV1QgcGFzc2Vz
IC0tcGl4ZWwtdGVzdCBpZiB3ZSBzaG91bGQgZHVtcCBwaXhlbHMgZm9yIHRoZSB0ZXN0LgotICAg
ICAgICBjb25zdCBRU3RyaW5nIGV4cGVjdGVkQXJnKFFMYXRpbjFTdHJpbmcoIi0tcGl4ZWwtdGVz
dCIpKTsKLSAgICAgICAgUVN0cmluZyBhcmdUZXN0ID0gbGluZS5taWQoaW5kZXhPZkZpcnN0U2Vw
YXJhdG9yICsgMSwgZXhwZWN0ZWRBcmcubGVuZ3RoKCkpOwotICAgICAgICBpZiAoYXJnVGVzdCA9
PSBleHBlY3RlZEFyZykgewotICAgICAgICAgICAgbV9kdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3Qg
PSB0cnVlOwotICAgICAgICAgICAgaW5kZXhPZlBpeGVsSGFzaCA9IGluZGV4T2ZTZWNvbmRTZXBh
cmF0b3IgPT0gLTEgPyAtMSA6IGluZGV4T2ZTZWNvbmRTZXBhcmF0b3IgKyAxOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChpbmRleE9mUGl4ZWxIYXNoICE9IC0xICYmIGluZGV4T2ZQaXhlbEhhc2gg
PCBsaW5lLnNpemUoKSkKLSAgICAgICAgICAgIG1fZXhwZWN0ZWRIYXNoID0gbGluZS5taWQoaW5k
ZXhPZlBpeGVsSGFzaCk7Ci0gICAgICAgIGxpbmUucmVtb3ZlKGluZGV4T2ZGaXJzdFNlcGFyYXRv
ciwgbGluZS5sZW5ndGgoKSk7Ci0gICAgfQotCi0gICAgaWYgKGxpbmUuc3RhcnRzV2l0aChRTGF0
aW4xU3RyaW5nKCJodHRwOiIpKQotICAgICAgICAgICAgfHwgbGluZS5zdGFydHNXaXRoKFFMYXRp
bjFTdHJpbmcoImh0dHBzOiIpKQotICAgICAgICAgICAgfHwgbGluZS5zdGFydHNXaXRoKFFMYXRp
bjFTdHJpbmcoImZpbGU6IikpCi0gICAgICAgICAgICB8fCBsaW5lID09IFFMYXRpbjFTdHJpbmco
ImFib3V0OmJsYW5rIikpIHsKLSAgICAgICAgb3BlbihRVXJsKGxpbmUpKTsKKyAgICBUZXN0Q29t
bWFuZCBjb21tYW5kID0gcGFyc2VJbnB1dExpbmUoc3RkOjpzdHJpbmcoaW5wdXQudG9MYXRpbjEo
KS5jb25zdERhdGEoKSkpOworICAgIFFTdHJpbmcgcGF0aE9yVVJMID0gUUxhdGluMVN0cmluZyhj
b21tYW5kLnBhdGhPclVSTC5jX3N0cigpKTsKKyAgICBtX2R1bXBQaXhlbHNGb3JDdXJyZW50VGVz
dCA9IGNvbW1hbmQuc2hvdWxkRHVtcFBpeGVsczsKKyAgICBtX2V4cGVjdGVkSGFzaCA9IFFMYXRp
bjFTdHJpbmcoY29tbWFuZC5leHBlY3RlZFBpeGVsSGFzaC5jX3N0cigpKTsKKworICAgIGlmIChw
YXRoT3JVUkwuc3RhcnRzV2l0aChRTGF0aW4xU3RyaW5nKCJodHRwOiIpKQorICAgICAgICAgICAg
fHwgcGF0aE9yVVJMLnN0YXJ0c1dpdGgoUUxhdGluMVN0cmluZygiaHR0cHM6IikpCisgICAgICAg
ICAgICB8fCBwYXRoT3JVUkwuc3RhcnRzV2l0aChRTGF0aW4xU3RyaW5nKCJmaWxlOiIpKQorICAg
ICAgICAgICAgfHwgcGF0aE9yVVJMID09IFFMYXRpbjFTdHJpbmcoImFib3V0OmJsYW5rIikpIHsK
KyAgICAgICAgb3BlbihRVXJsKHBhdGhPclVSTCkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFFG
aWxlSW5mbyBmaShsaW5lKTsKKyAgICAgICAgUUZpbGVJbmZvIGZpKHBhdGhPclVSTCk7CiAKICAg
ICAgICAgaWYgKCFmaS5leGlzdHMoKSkgewogICAgICAgICAgICAgUURpciBjdXJyZW50RGlyID0g
UURpcjo6Y3VycmVudFBhdGgoKTsKIAogICAgICAgICAgICAgLy8gVHJ5IHRvIGJlIHNtYXJ0IGFi
b3V0IHdoZXJlIHRoZSB0ZXN0IGlzIGxvY2F0ZWQKICAgICAgICAgICAgIGlmIChjdXJyZW50RGly
LmRpck5hbWUoKSA9PSBRTGF0aW4xU3RyaW5nKCJMYXlvdXRUZXN0cyIpKQotICAgICAgICAgICAg
ICAgIGZpID0gUUZpbGVJbmZvKGN1cnJlbnREaXIsIGxpbmUucmVwbGFjZShRUmVnRXhwKCIuKj9M
YXlvdXRUZXN0cy8oLiopIiksICJcXDEiKSk7Ci0gICAgICAgICAgICBlbHNlIGlmICghbGluZS5j
b250YWlucyhRTGF0aW4xU3RyaW5nKCJMYXlvdXRUZXN0cyIpKSkKLSAgICAgICAgICAgICAgICBm
aSA9IFFGaWxlSW5mbyhjdXJyZW50RGlyLCBsaW5lLnByZXBlbmQoUUxhdGluMVN0cmluZygiTGF5
b3V0VGVzdHMvIikpKTsKKyAgICAgICAgICAgICAgICBmaSA9IFFGaWxlSW5mbyhjdXJyZW50RGly
LCBwYXRoT3JVUkwucmVwbGFjZShRUmVnRXhwKCIuKj9MYXlvdXRUZXN0cy8oLiopIiksICJcXDEi
KSk7CisgICAgICAgICAgICBlbHNlIGlmICghcGF0aE9yVVJMLmNvbnRhaW5zKFFMYXRpbjFTdHJp
bmcoIkxheW91dFRlc3RzIikpKQorICAgICAgICAgICAgICAgIGZpID0gUUZpbGVJbmZvKGN1cnJl
bnREaXIsIHBhdGhPclVSTC5wcmVwZW5kKFFMYXRpbjFTdHJpbmcoIkxheW91dFRlc3RzLyIpKSk7
CiAKICAgICAgICAgICAgIGlmICghZmkuZXhpc3RzKCkpIHsKICAgICAgICAgICAgICAgICBlbWl0
IHJlYWR5KCk7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRl
clRyZWUuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcApp
bmRleCBmNDAyYTAyY2EzNjJjNTI3OWRlNWE1YzhjMWUwY2U5ZGYzNjJhYmFkLi4zMTI0MzBkNTY5
ODk1NDhiYzNlY2FkMTNmOGRmMTgzMDk2YzE3Yzg1IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAKQEAgLTgwLDcgKzgwLDcgQEAgc3RhdGljIExQQ1dTVFIg
Zm9udHNFbnZpcm9ubWVudFZhcmlhYmxlID0gTCJXRUJLSVRfVEVTVEZPTlRTIjsKIGNvbnN0IExQ
Q1dTVFIga0R1bXBSZW5kZXJUcmVlQ2xhc3NOYW1lID0gTCJEdW1wUmVuZGVyVHJlZVdpbmRvdyI7
CiAKIHN0YXRpYyBib29sIGR1bXBUcmVlID0gdHJ1ZTsKLXN0YXRpYyBib29sIGR1bXBQaXhlbHM7
CitzdGF0aWMgYm9vbCBkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3Q7CiBzdGF0aWMgYm9vbCBkdW1w
QWxsUGl4ZWxzOwogc3RhdGljIGJvb2wgcHJpbnRTZXBhcmF0b3JzOwogc3RhdGljIGJvb2wgbGVh
a0NoZWNraW5nID0gZmFsc2U7CkBAIC03NTksNyArNzU5LDcgQEAgdm9pZCBkdW1wKCkKICAgICAg
ICAgZmZsdXNoKHN0ZGVycik7CiAgICAgfQogCi0gICAgaWYgKGR1bXBQaXhlbHMKKyAgICBpZiAo
ZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0CiAgICAgICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+
Z2VuZXJhdGVQaXhlbFJlc3VsdHMoKQogICAgICAmJiAhZ0xheW91dFRlc3RDb250cm9sbGVyLT5k
dW1wRE9NQXNXZWJBcmNoaXZlKCkKICAgICAgJiYgIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVt
cFNvdXJjZUFzV2ViQXJjaGl2ZSgpKQpAQCAtOTQ4LDIwICs5NDgsMTQgQEAgc3RhdGljIHZvaWQg
c2l6ZVdlYlZpZXdGb3JDdXJyZW50VGVzdCgpCiAgICAgOjpTZXRXaW5kb3dQb3Mod2ViVmlld1dp
bmRvdywgMCwgMCwgMCwgd2lkdGgsIGhlaWdodCwgU1dQX05PTU9WRSk7CiB9CiAKLXN0YXRpYyB2
b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiB0ZXN0UGF0aE9yVVJMKQorc3RhdGljIHZvaWQgcnVu
VGVzdChjb25zdCBzdHJpbmcmIGlucHV0TGluZSkKIHsKKyAgICBUZXN0Q29tbWFuZCBjb21tYW5k
ID0gcGFyc2VJbnB1dExpbmUoaW5wdXRMaW5lKTsKKyAgICBjb25zdCBzdHJpbmcmIHBhdGhPclVS
TCA9IGNvbW1hbmQucGF0aE9yVVJMOworICAgIGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCA9IGNv
bW1hbmQuc2hvdWxkRHVtcFBpeGVsczsKKwogICAgIHN0YXRpYyBCU1RSIG1ldGhvZEJTdHIgPSBT
eXNBbGxvY1N0cmluZyhURVhUKCJHRVQiKSk7CiAKLSAgICAvLyBMb29rIGZvciAiJyIgYXMgYSBz
ZXBhcmF0b3IgYmV0d2VlbiB0aGUgcGF0aCBvciBVUkwsIGFuZCB0aGUgcGl4ZWwgZHVtcCBoYXNo
IHRoYXQgZm9sbG93cy4KLSAgICBzdHJpbmcgcGF0aE9yVVJMKHRlc3RQYXRoT3JVUkwpOwotICAg
IHN0cmluZyBleHBlY3RlZFBpeGVsSGFzaDsKLSAgICAKLSAgICBzaXplX3Qgc2VwYXJhdG9yUG9z
ID0gcGF0aE9yVVJMLmZpbmQoIiciKTsKLSAgICBpZiAoc2VwYXJhdG9yUG9zICE9IHN0cmluZzo6
bnBvcykgewotICAgICAgICBwYXRoT3JVUkwgPSBzdHJpbmcodGVzdFBhdGhPclVSTCwgMCwgc2Vw
YXJhdG9yUG9zKTsKLSAgICAgICAgZXhwZWN0ZWRQaXhlbEhhc2ggPSBzdHJpbmcodGVzdFBhdGhP
clVSTCwgc2VwYXJhdG9yUG9zICsgMSk7Ci0gICAgfQotICAgIAogICAgIEJTVFIgdXJsQlN0cjsK
ICAKICAgICBDRlN0cmluZ1JlZiBzdHIgPSBDRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nKDAsIHBh
dGhPclVSTC5jX3N0cigpLCBrQ0ZTdHJpbmdFbmNvZGluZ1dpbmRvd3NMYXRpbjEpOwpAQCAtOTgz
LDcgKzk3Nyw3IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiB0ZXN0UGF0aE9y
VVJMKQogCiAgICAgQ0ZSZWxlYXNlKHVybCk7CiAKLSAgICA6OmdMYXlvdXRUZXN0Q29udHJvbGxl
ciA9IExheW91dFRlc3RDb250cm9sbGVyOjpjcmVhdGUocGF0aE9yVVJMLCBleHBlY3RlZFBpeGVs
SGFzaCk7CisgICAgOjpnTGF5b3V0VGVzdENvbnRyb2xsZXIgPSBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6Y3JlYXRlKHBhdGhPclVSTCwgY29tbWFuZC5leHBlY3RlZFBpeGVsSGFzaCk7CiAgICAgZG9u
ZSA9IGZhbHNlOwogICAgIHRvcExvYWRpbmdGcmFtZSA9IDA7CiAKQEAgLTEzMzcsMTEgKzEzMzEs
NiBAQCBleHRlcm4gIkMiIF9fZGVjbHNwZWMoZGxsZXhwb3J0KSBpbnQgV0lOQVBJIGRsbExhdW5j
aGVyRW50cnlQb2ludChpbnQgYXJnYywgY29ucwogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIH0KIAotICAgICAgICBpZiAoIXN0cmljbXAoYXJndltpXSwgIi0tcGl4ZWwtdGVzdHMiKSkg
ewotICAgICAgICAgICAgZHVtcFBpeGVscyA9IHRydWU7Ci0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgfQotCiAgICAgICAgIGlmICghc3RyaWNtcChhcmd2W2ldLCAiLS1jb21wbGV4LXRl
eHQiKSkgewogICAgICAgICAgICAgZm9yY2VDb21wbGV4VGV4dCA9IHRydWU7CiAgICAgICAgICAg
ICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVu
ZGVyVHJlZS52Y3Byb2ogYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUu
dmNwcm9qCmluZGV4IDQ4NDNjMzkwZTdjNmI1MmUyNGUyYjM3NzA2NTQ3OGQwNzZjMDk3ZmEuLjdl
MjQyYTFjZGU0YTJmY2NjMWEyNDcxYjYxNjliM2UzM2VhZGNkY2QgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS52Y3Byb2oKKysrIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLnZjcHJvagpAQCAtNTYzLDYgKzU2MywxMCBA
QAogCQkJPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXER1bXBSZW5k
ZXJUcmVlQ29tbW9uLmNwcCIKKwkJCT4KKwkJPC9GaWxlPgorCQk8RmlsZQogCQkJUmVsYXRpdmVQ
YXRoPSIuLlxEdW1wUmVuZGVyVHJlZVByZWZpeC5oIgogCQkJPgogCQk8L0ZpbGU+CmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93c2NyaXB0IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
d3NjcmlwdAppbmRleCA2NDVjN2Q2NDE1OThhZmUyZjE0ZTE2M2FkNGNjZWYyN2M1MjhiNzY0Li5i
MzI5Mjk0NTBiMjhhYTg4OTJjMzNlM2JlMGQ5NmYwZTZlMTEzNDE4IDEwMDY0NAotLS0gYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS93c2NyaXB0CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dzY3Jp
cHQKQEAgLTQwLDYgKzQwLDcgQEAgaW5jbHVkZV9wYXRocyA9IFsKICAgICAgICAgICAgICAgICAn
d3gnCiAgICAgICAgICAgICAgICAgXQogc291cmNlcyA9IFsKKyAgICAgICAgICAgICdEdW1wUmVu
ZGVyVHJlZUNvbW1vbi5jcHAnLAogICAgICAgICAgICAgJ0xheW91dFRlc3RDb250cm9sbGVyLmNw
cCcsCiAgICAgICAgICAgICAnV29ya1F1ZXVlLmNwcCcsCiAgICAgICAgICAgICAnd3gvRHVtcFJl
bmRlclRyZWVXeC5jcHAnLApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvRHVt
cFJlbmRlclRyZWVXeC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93eC9EdW1wUmVuZGVyVHJl
ZVd4LmNwcAppbmRleCAzMWFkZDExYTJlYjc0ZDFmNGQ4MzI5NDc5ZjQxOWYxMDdmZmJhODhmLi40
NWI4NTJkODhhYjliZGEyOTFmYjFlZDI3N2FjYTc1MWRmZDM1MDk3IDEwMDY0NAotLS0gYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS93eC9EdW1wUmVuZGVyVHJlZVd4LmNwcAorKysgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS93eC9EdW1wUmVuZGVyVHJlZVd4LmNwcApAQCAtNTAsNyArNTAsNyBAQAogdm9s
YXRpbGUgYm9vbCBkb25lID0gdHJ1ZTsKIHZvbGF0aWxlIGJvb2wgbm90aWZpZWQgPSBmYWxzZTsK
IHN0YXRpYyBib29sIHByaW50U2VwYXJhdG9ycyA9IHRydWU7Ci1zdGF0aWMgaW50IGR1bXBQaXhl
bHM7CitzdGF0aWMgaW50IGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdDsKIHN0YXRpYyBpbnQgZHVt
cFRyZWUgPSAxOwogdGltZV90IHN0YXJ0VGltZTsgLy8gdG8gZGV0ZWN0IHRpbWVvdXRzIC8gZmFp
bGVkIHRlc3RzCiAKQEAgLTIwMyw3ICsyMDMsNyBAQCB2b2lkIGR1bXAoKQogICAgICAgICB9CiAg
ICAgfQogCi0gICAgaWYgKGR1bXBQaXhlbHMKKyAgICBpZiAoZHVtcFBpeGVsc0ZvckN1cnJlbnRU
ZXN0CiAgICAgICAgICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+Z2VuZXJhdGVQaXhlbFJlc3Vs
dHMoKQogICAgICAgICAmJiAhZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRE9NQXNXZWJBcmNo
aXZlKCkKICAgICAgICAgJiYgIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFNvdXJjZUFzV2Vi
QXJjaGl2ZSgpKSB7CkBAIC0yMTgsMjYgKzIxOCwyMSBAQCB2b2lkIGR1bXAoKQogICAgIGdMYXlv
dXRUZXN0Q29udHJvbGxlci5jbGVhcigpOwogfQogCi1zdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0
IHd4U3RyaW5nIHRlc3RQYXRoT3JVUkwpCitzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHd4U3Ry
aW5nIGlucHV0TGluZSkKIHsKICAgICBkb25lID0gZmFsc2U7CiAgICAgdGltZSgmc3RhcnRUaW1l
KTsKLSAgICBzdHJpbmcgcGF0aE9yVVJMU3RyaW5nKHRlc3RQYXRoT3JVUkwuY2hhcl9zdHIoKSk7
Ci0gICAgc3RyaW5nIHBhdGhPclVSTChwYXRoT3JVUkxTdHJpbmcpOwotICAgIHN0cmluZyBleHBl
Y3RlZFBpeGVsSGFzaDsKLQotICAgIHNpemVfdCBzZXBhcmF0b3JQb3MgPSBwYXRoT3JVUkwuZmlu
ZCgiJyIpOwotICAgIGlmIChzZXBhcmF0b3JQb3MgIT0gc3RyaW5nOjpucG9zKSB7Ci0gICAgICAg
IHBhdGhPclVSTCA9IHN0cmluZyhwYXRoT3JVUkxTdHJpbmcsIDAsIHNlcGFyYXRvclBvcyk7Ci0g
ICAgICAgIGV4cGVjdGVkUGl4ZWxIYXNoID0gc3RyaW5nKHBhdGhPclVSTFN0cmluZywgc2VwYXJh
dG9yUG9zICsgMSk7Ci0gICAgfQorCisgICAgVGVzdENvbW1hbmQgY29tbWFuZCA9IHBhcnNlSW5w
dXRMaW5lKHN0ZDo6c3RyaW5nKGlucHV0TGluZS5Ub0FzY2lpKCkpKTsKKyAgICBzdHJpbmcmIHBh
dGhPclVSTCA9IGNvbW1hbmQucGF0aE9yVVJMOworICAgIGR1bXBQaXhlbHNGb3JDdXJyZW50VGVz
dCA9IGNvbW1hbmQuc2hvdWxkRHVtcFBpeGVsczsKICAgICAKICAgICAvLyBDVVJMIGlzbid0IGhh
cHB5IGlmIHdlIGRvbid0IGhhdmUgYSBwcm90b2NvbC4KICAgICBzaXplX3QgaHR0cCA9IHBhdGhP
clVSTC5maW5kKCJodHRwOi8vIik7CiAgICAgaWYgKGh0dHAgPT0gc3RyaW5nOjpucG9zKQogICAg
ICAgICBwYXRoT3JVUkwuaW5zZXJ0KDAsICJmaWxlOi8vIik7CiAgICAgCi0gICAgZ0xheW91dFRl
c3RDb250cm9sbGVyID0gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNyZWF0ZShwYXRoT3JVUkwsIGV4
cGVjdGVkUGl4ZWxIYXNoKTsKKyAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXIgPSBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6Y3JlYXRlKHBhdGhPclVSTCwgY29tbWFuZC5leHBlY3RlZFBpeGVsSGFzaCk7
CiAgICAgaWYgKCFnTGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKICAgICAgICAgd3hUaGVBcHAtPkV4
aXRNYWluTG9vcCgpOwogICAgIH0KQEAgLTI4MiwxMSArMjc3LDYgQEAgYm9vbCBNeUFwcDo6T25J
bml0KCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBpZiAoIW9wdGlvbi5DbXBOb0Nhc2UoX1QoIi0tcGl4ZWwtdGVzdHMiKSkpIHsKLSAgICAgICAg
ICAgIGR1bXBQaXhlbHMgPSB0cnVlOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0K
LSAgICAgICAgCiAgICAgICAgIGlmICghb3B0aW9uLkNtcE5vQ2FzZShfVCgiLS10cmVlIikpKSB7
CiAgICAgICAgICAgICBkdW1wVHJlZSA9IHRydWU7CiAgICAgICAgICAgICBjb250aW51ZTsKQEAg
LTMyMyw3ICszMTMsNyBAQCBib29sIE15QXBwOjpPbkluaXQoKQogICAgICAgICB9CiAgICAgCiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnRTZXBhcmF0b3JzID0gKG9wdGluZCA8IGFyZ2MtMSB8
fCAoZHVtcFBpeGVscyAmJiBkdW1wVHJlZSkpOworICAgICAgICBwcmludFNlcGFyYXRvcnMgPSAo
b3B0aW5kIDwgYXJnYyAtIDEgfHwgKGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCAmJiBkdW1wVHJl
ZSkpOwogICAgICAgICBmb3IgKGludCBpID0gb3B0aW5kOyBpICE9IGFyZ2M7ICsraSkgewogICAg
ICAgICAgICAgcnVuVGVzdCh3eFRoZUFwcC0+YXJndlsxXSk7CiAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1Rvb2xzL0dOVW1ha2VmaWxlLmFtIGIvVG9vbHMvR05VbWFrZWZpbGUuYW0KaW5kZXggZGY5
YTcxZjE4Zjk1ODA3ZWY0ZmQ2ZjdkN2MyN2QzMTFmYTMyMWFjMi4uZjg1YTlkMTJlYjc0NTQyMzE1
MjI1MTEwNjJlZTI3ZjVhNDA4OWQ0MiAxMDA2NDQKLS0tIGEvVG9vbHMvR05VbWFrZWZpbGUuYW0K
KysrIGIvVG9vbHMvR05VbWFrZWZpbGUuYW0KQEAgLTEwNiw2ICsxMDYsNyBAQCBlbmRpZgogCiBQ
cm9ncmFtc19EdW1wUmVuZGVyVHJlZV9TT1VSQ0VTID0gXAogCVRvb2xzL0R1bXBSZW5kZXJUcmVl
L0R1bXBSZW5kZXJUcmVlLmggXAorCVRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVl
Q29tbW9uLmNwcCBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWVQcmVmaXgu
aCBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwIFwK
IAlUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIFwKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvb2xkLXJ1bi13ZWJraXQtdGVzdHMgYi9Ub29scy9TY3JpcHRz
L29sZC1ydW4td2Via2l0LXRlc3RzCmluZGV4IDA5NDQzYzg3YzAyZjFlOGNmNWJkZTZkMWIwNDVj
NGRiOWJhYjA4ODIuLmYwOTFjMTliYWFiNzNmZTVlZjQyYzUxNmJhY2MxNDUxMzZmMmRjMjAgMTAw
NzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvb2xkLXJ1bi13ZWJraXQtdGVzdHMKKysrIGIvVG9vbHMv
U2NyaXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0cwpAQCAtNzQ4LDEyICs3NDgsMTYgQEAgZm9yIG15
ICR0ZXN0IChAdGVzdHMpIHsKICAgICBwcmludCAkdGVzdHNfcnVuX2ZoICIkdGVzdFxuIjsKIAog
ICAgICMgVHJ5IHRvIHJlYWQgZXhwZWN0ZWQgaGFzaCBmaWxlIGZvciBwaXhlbCB0ZXN0cwotICAg
IG15ICRzdWZmaXhFeHBlY3RlZEhhc2ggPSAiIjsKLSAgICBpZiAoJHBpeGVsVGVzdHMgJiYgISRy
ZXNldFJlc3VsdHMpIHsKLSAgICAgICAgbXkgJGV4cGVjdGVkUGl4ZWxEaXIgPSBleHBlY3RlZERp
cmVjdG9yeUZvclRlc3QoJGJhc2UsIDAsICJwbmciKTsKLSAgICAgICAgaWYgKG15ICRleHBlY3Rl
ZEhhc2ggPSByZWFkQ2hlY2tzdW1Gcm9tUG5nKEZpbGU6OlNwZWMtPmNhdGZpbGUoJGV4cGVjdGVk
UGl4ZWxEaXIsICIkYmFzZS0kZXhwZWN0ZWRUYWcucG5nIikpKSB7Ci0gICAgICAgICAgICAjIEZv
cm1hdCBleHBlY3RlZCBoYXNoIGludG8gYSBzdWZmaXggc3RyaW5nIHRoYXQgaXMgYXBwZW5kZWQg
dG8gdGhlIHBhdGggLyBVUkwgcGFzc2VkIHRvIERSVC4KLSAgICAgICAgICAgICRzdWZmaXhFeHBl
Y3RlZEhhc2ggPSAiJyRleHBlY3RlZEhhc2giOworICAgIG15ICRzdWZmaXhQaXhlbFRlc3QgPSAi
IjsKKyAgICBpZiAoJHBpeGVsVGVzdHMpIHsKKyAgICAgICAgIyA6IGlzIHRoZSBzZXBhcmF0b3Ig
YmV0d2VlbiBhcmd1bWVudHMuCisgICAgICAgICRzdWZmaXhQaXhlbFRlc3QgPSAiOi0tcGl4ZWwt
dGVzdCI7CisgICAgICAgIGlmICghJHJlc2V0UmVzdWx0cykgeworICAgICAgICAgICAgbXkgJGV4
cGVjdGVkUGl4ZWxEaXIgPSBleHBlY3RlZERpcmVjdG9yeUZvclRlc3QoJGJhc2UsIDAsICJwbmci
KTsKKyAgICAgICAgICAgIGlmIChteSAkZXhwZWN0ZWRIYXNoID0gcmVhZENoZWNrc3VtRnJvbVBu
ZyhGaWxlOjpTcGVjLT5jYXRmaWxlKCRleHBlY3RlZFBpeGVsRGlyLCAiJGJhc2UtJGV4cGVjdGVk
VGFnLnBuZyIpKSkgeworICAgICAgICAgICAgICAgICMgRm9ybWF0IGV4cGVjdGVkIGhhc2ggaW50
byBhIHN1ZmZpeCBzdHJpbmcgdGhhdCBpcyBhcHBlbmRlZCB0byB0aGUgcGF0aCAvIFVSTCBwYXNz
ZWQgdG8gRFJULgorICAgICAgICAgICAgICAgICRzdWZmaXhQaXhlbFRlc3QgPSAiOi0tcGl4ZWwt
dGVzdDokZXhwZWN0ZWRIYXNoIjsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApA
QCAtNzg5LDExICs3OTMsMTEgQEAgZm9yIG15ICR0ZXN0IChAdGVzdHMpIHsKICAgICAgICAgfSBl
bHNpZiAoJHRlc3QgIX4gL15odHRwXC90ZXN0c1wvbG9jYWxcLy8gJiYgJHRlc3QgIX4gL15odHRw
XC90ZXN0c1wvc3NsXC8vKSB7CiAgICAgICAgICAgICBteSAkcGF0aCA9IGNhbm9ucGF0aCgkdGVz
dCk7CiAgICAgICAgICAgICAkcGF0aCA9fiBzL15odHRwXC90ZXN0c1wvLy87Ci0gICAgICAgICAg
ICBwcmludCBPVVQgImh0dHA6Ly8xMjcuMC4wLjE6JGh0dHBkUG9ydC8kcGF0aCRzdWZmaXhFeHBl
Y3RlZEhhc2hcbiI7CisgICAgICAgICAgICBwcmludCBPVVQgImh0dHA6Ly8xMjcuMC4wLjE6JGh0
dHBkUG9ydC8kcGF0aCRzdWZmaXhQaXhlbFRlc3RcbiI7CiAgICAgICAgIH0gZWxzaWYgKCR0ZXN0
ID1+IC9eaHR0cFwvdGVzdHNcL3NzbFwvLykgewogICAgICAgICAgICAgbXkgJHBhdGggPSBjYW5v
bnBhdGgoJHRlc3QpOwogICAgICAgICAgICAgJHBhdGggPX4gcy9eaHR0cFwvdGVzdHNcLy8vOwot
ICAgICAgICAgICAgcHJpbnQgT1VUICJodHRwczovLzEyNy4wLjAuMTokaHR0cGRTU0xQb3J0LyRw
YXRoJHN1ZmZpeEV4cGVjdGVkSGFzaFxuIjsKKyAgICAgICAgICAgIHByaW50IE9VVCAiaHR0cHM6
Ly8xMjcuMC4wLjE6JGh0dHBkU1NMUG9ydC8kcGF0aCRzdWZmaXhQaXhlbFRlc3RcbiI7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBteSAkdGVzdFBhdGggPSAiJHRlc3REaXJlY3Rvcnkv
JHRlc3QiOwogICAgICAgICAgICAgaWYgKGlzQ3lnd2luKCkpIHsKQEAgLTgwMSw3ICs4MDUsNyBA
QCBmb3IgbXkgJHRlc3QgKEB0ZXN0cykgewogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAkdGVzdFBhdGggPSBjYW5vbnBhdGgoJHRlc3RQYXRoKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHByaW50IE9VVCAiJHRlc3RQYXRoJHN1ZmZpeEV4cGVjdGVkSGFzaFxuIjsK
KyAgICAgICAgICAgIHByaW50IE9VVCAiJHRlc3RQYXRoJHN1ZmZpeFBpeGVsVGVzdFxuIjsKICAg
ICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIG15ICR0ZXN0UGF0aCA9ICIkdGVzdERpcmVj
dG9yeS8kdGVzdCI7CkBAIC04MTAsNyArODE0LDcgQEAgZm9yIG15ICR0ZXN0IChAdGVzdHMpIHsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICR0ZXN0UGF0aCA9IGNhbm9ucGF0aCgkdGVz
dFBhdGgpOwogICAgICAgICB9Ci0gICAgICAgIHByaW50IE9VVCAiJHRlc3RQYXRoJHN1ZmZpeEV4
cGVjdGVkSGFzaFxuIiBpZiBkZWZpbmVkICR0ZXN0UGF0aDsKKyAgICAgICAgcHJpbnQgT1VUICIk
dGVzdFBhdGgkc3VmZml4UGl4ZWxUZXN0XG4iIGlmIGRlZmluZWQgJHRlc3RQYXRoOwogICAgIH0K
IAogICAgICMgRHVtcFJlbmRlclRyZWUgaXMgZXhwZWN0ZWQgdG8gZHVtcCB0d28gImJsb2NrcyIg
dG8gc3Rkb3V0IGZvciBlYWNoIHRlc3QuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKaW5kZXggYWQ3MGYwNDJkZTllY2I2MDA2M2JlYTZmNTBj
Mjg1YmY5ZWZkOWMxMi4uOTQyMTU2MjRmZTI3ZWE0MjVhYTczZTg5MTU3N2NjNWU2ZTk5MGUyOSAx
MDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNl
LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5w
eQpAQCAtMTI3NywyMSArMTI3Nyw5IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgICAg
ICAgICByZXR1cm4gc3VpdGUuYXJncwogICAgICAgICByZXR1cm4gW10KIAotICAgIGRlZiBzdXBw
b3J0c19zd2l0Y2hpbmdfcGl4ZWxfdGVzdHNfcGVyX3Rlc3Qoc2VsZik6Ci0gICAgICAgIGlmIHNl
bGYuZ2V0X29wdGlvbignd2Via2l0X3Rlc3RfcnVubmVyJyk6Ci0gICAgICAgICAgICByZXR1cm4g
VHJ1ZQotICAgICAgICByZXR1cm4gc2VsZi5fc3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3Rz
X3Blcl90ZXN0KCkKLQotICAgIGRlZiBfc3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Bl
cl90ZXN0KHNlbGYpOgotICAgICAgICAjIEZJWE1FOiBhbGwgcG9ydHMgc2hvdWxkIHN1cHBvcnQg
aXQuCi0gICAgICAgIHJldHVybiBGYWxzZQotCiAgICAgZGVmIHNob3VsZF9ydW5fYXNfcGl4ZWxf
dGVzdChzZWxmLCB0ZXN0X2lucHV0KToKICAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMucGl4
ZWxfdGVzdHM6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgaWYgbm90IHNlbGYu
c3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Blcl90ZXN0KCk6Ci0gICAgICAgICAgICAj
IENhbm5vdCBkbyBtb3JlIGZpbHRlcmluZyB3aXRob3V0IHRoaXMuCi0gICAgICAgICAgICByZXR1
cm4gVHJ1ZQogICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RfZGlyZWN0b3JpZXM6
CiAgICAgICAgICAgICByZXR1cm4gYW55KHRlc3RfaW5wdXQudGVzdF9uYW1lLnN0YXJ0c3dpdGgo
ZGlyZWN0b3J5KSBmb3IgZGlyZWN0b3J5IGluIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdF9kaXJl
Y3RvcmllcykKICAgICAgICAgcmV0dXJuIHNlbGYuX3Nob3VsZF9ydW5fYXNfcGl4ZWxfdGVzdCh0
ZXN0X2lucHV0KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9kcml2ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2RyaXZlci5weQppbmRleCA3ODE4MjNiOGQ2NzBhNmViOGU1MmUwNzY4YmU2NjRiMTFkNjMw
MzNjLi4yZWIxZTE0YjUyYmNkNzIzNWYzNTVjMWE5NzQwNjg2Zjk1YmNjOGQ2IDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlci5weQorKysg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlci5weQpAQCAt
MjkzLDggKzI5Myw2IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogCiAgICAgICAgIGNtZC5leHRl
bmQoc2VsZi5fcG9ydC5nZXRfb3B0aW9uKCdhZGRpdGlvbmFsX2RydF9mbGFnJywgW10pKQogCi0g
ICAgICAgIGlmIHBpeGVsX3Rlc3RzIGFuZCBub3Qgc2VsZi5fcG9ydC5zdXBwb3J0c19zd2l0Y2hp
bmdfcGl4ZWxfdGVzdHNfcGVyX3Rlc3QoKToKLSAgICAgICAgICAgIGNtZC5hcHBlbmQoJy0tcGl4
ZWwtdGVzdHMnKQogICAgICAgICBjbWQuZXh0ZW5kKHBlcl90ZXN0X2FyZ3MpCiAKICAgICAgICAg
Y21kLmFwcGVuZCgnLScpCkBAIC0zMzYsMTIgKzMzNCw5IEBAIGNsYXNzIERyaXZlcihvYmplY3Qp
OgogICAgICAgICBhc3NlcnQgbm90IGRyaXZlcl9pbnB1dC5pbWFnZV9oYXNoIG9yIGRyaXZlcl9p
bnB1dC5zaG91bGRfcnVuX3BpeGVsX3Rlc3QKIAogICAgICAgICBpZiBkcml2ZXJfaW5wdXQuc2hv
dWxkX3J1bl9waXhlbF90ZXN0OgotICAgICAgICAgICAgaWYgc2VsZi5fcG9ydC5zdXBwb3J0c19z
d2l0Y2hpbmdfcGl4ZWxfdGVzdHNfcGVyX3Rlc3QoKToKLSAgICAgICAgICAgICAgICAjIFdlIGRp
ZCBub3Qgc3RhcnQgdGhlIGRyaXZlciB3aXRoIC0tcGl4ZWwtdGVzdHMsIGluc3RlYWQgd2Ugc3Bl
Y2lmeSBpdCBwZXIgdGVzdC4KLSAgICAgICAgICAgICAgICAjICInIiBpcyB0aGUgc2VwYXJhdG9y
IG9mIGNvbW1hbmQgZmllbGRzLgotICAgICAgICAgICAgICAgIGNvbW1hbmQgKz0gIiciICsgJy0t
cGl4ZWwtdGVzdCcKKyAgICAgICAgICAgIGNvbW1hbmQgKz0gIjotLXBpeGVsLXRlc3QiCiAgICAg
ICAgIGlmIGRyaXZlcl9pbnB1dC5pbWFnZV9oYXNoOgotICAgICAgICAgICAgY29tbWFuZCArPSAi
JyIgKyBkcml2ZXJfaW5wdXQuaW1hZ2VfaGFzaAorICAgICAgICAgICAgY29tbWFuZCArPSAiOiIg
KyBkcml2ZXJfaW5wdXQuaW1hZ2VfaGFzaAogICAgICAgICByZXR1cm4gY29tbWFuZCArICJcbiIK
IAogICAgIGRlZiBfcmVhZF9maXJzdF9ibG9jayhzZWxmLCBkZWFkbGluZSk6CmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3F0LnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9xdC5weQppbmRleCBlMjM5YzdlM2Fh
ZjZmNjAyYjBjMzUxZWMyMmRjZmE2ODA2NGVhMjY5Li42ZTdiMDk4OGQ1YTc3ZWZjNWZjMzcyZmE3
NTE2NzgzNDAwYTY5ZjA4IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L3F0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvcXQucHkKQEAgLTE4NCw2ICsxODQsMyBAQCBjbGFzcyBRdFBvcnQoUG9ydCk6CiAg
ICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCi0gICAgZGVm
IF9zdXBwb3J0c19zd2l0Y2hpbmdfcGl4ZWxfdGVzdHNfcGVyX3Rlc3Qoc2VsZik6Ci0gICAgICAg
IHJldHVybiBUcnVlCi0KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvdGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvdGVzdC5weQppbmRleCA1NzE0NjYxZmQyMDM2NzY4MzlkNmM3NmY0NzM1YmVjODEzMmI4
OWI4Li4wY2QxNzFmM2JjYTZhYmViZGIyMWI5OGUyYTQ1YzIxYTE0YTkwMTEyIDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5CkBAIC01MTMs
MTAgKzUxMyw2IEBAIGNsYXNzIFRlc3RQb3J0KFBvcnQpOgogICAgICAgICAgICAgVmlydHVhbFRl
c3RTdWl0ZSgndmlydHVhbC9za2lwcGVkJywgJ2ZhaWx1cmVzL2V4cGVjdGVkJywgWyctLXZpcnR1
YWwtYXJnMiddKSwKICAgICAgICAgXQogCi0gICAgZGVmIHN1cHBvcnRzX3N3aXRjaGluZ19waXhl
bF90ZXN0c19wZXJfdGVzdChzZWxmKToKLSAgICAgICAgIyBMZXQgaXQgdHJ1ZSBzbyB3ZSBjYW4g
dGVzdCB0aGUgLS1waXhlbC10ZXN0LWRpcmVjdG9yeSBvcHRpb24uCi0gICAgICAgIHJldHVybiBU
cnVlCi0KIAogY2xhc3MgVGVzdERyaXZlcihEcml2ZXIpOgogICAgICIiIlRlc3QvRHVtbXkgaW1w
bGVtZW50YXRpb24gb2YgdGhlIER1bXBSZW5kZXJUcmVlIGludGVyZmFjZS4iIiIKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKaW5kZXggZDAyMzI5OTI3MzFkMWJjOTcx
MjY4ZmMzOTMxZjRiNzBhYjM2N2FjNy4uMWRlM2M5ZTZhNmFjOGYzMDI5YWFhMDMxNmM0ODFmMDRl
YWUyZjg4YiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxl
ci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKQEAg
LTM1LDcgKzM1LDExIEBACiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1BhZ2VQcml2YXRlLmg+CiAjaW5j
bHVkZSA8V2ViS2l0Mi9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oPgogI2luY2x1ZGUgPFdlYktpdDIv
V0tSZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8Y3N0ZGlvPgor
I2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5n
PgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKICNpZiBQTEFURk9STShNQUMpCkBAIC02
Nyw4ICs3MSw3IEBAIFRlc3RDb250cm9sbGVyJiBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkKIH0K
IAogVGVzdENvbnRyb2xsZXI6OlRlc3RDb250cm9sbGVyKGludCBhcmdjLCBjb25zdCBjaGFyKiBh
cmd2W10pCi0gICAgOiBtX2R1bXBQaXhlbHNGb3JBbGxUZXN0cyhmYWxzZSkKLSAgICAsIG1fdmVy
Ym9zZShmYWxzZSkKKyAgICA6IG1fdmVyYm9zZShmYWxzZSkKICAgICAsIG1fcHJpbnRTZXBhcmF0
b3JzKGZhbHNlKQogICAgICwgbV91c2luZ1NlcnZlck1vZGUoZmFsc2UpCiAgICAgLCBtX2djQmV0
d2VlblRlc3RzKGZhbHNlKQpAQCAtMjY3LDEwICsyNzAsNiBAQCB2b2lkIFRlc3RDb250cm9sbGVy
Ojppbml0aWFsaXplKGludCBhcmdjLCBjb25zdCBjaGFyKiBhcmd2W10pCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChhcmd1bWVudCA9PSAiLS1waXhlbC10
ZXN0cyIpIHsKLSAgICAgICAgICAgIG1fZHVtcFBpeGVsc0ZvckFsbFRlc3RzID0gdHJ1ZTsKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9CiAgICAgICAgIGlmIChhcmd1bWVudCA9PSAi
LS12ZXJib3NlIikgewogICAgICAgICAgICAgbV92ZXJib3NlID0gdHJ1ZTsKICAgICAgICAgICAg
IGNvbnRpbnVlOwpAQCAtNTA0LDcgKzUwMyw4OSBAQCBib29sIFRlc3RDb250cm9sbGVyOjpyZXNl
dFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKCkKICAgICByZXR1cm4gbV9kb25lUmVzZXR0aW5nOwog
fQogCi1ib29sIFRlc3RDb250cm9sbGVyOjpydW5UZXN0KGNvbnN0IGNoYXIqIHRlc3QpCitzdHJ1
Y3QgVGVzdENvbW1hbmQgeworICAgIFRlc3RDb21tYW5kKCkgOiBzaG91bGREdW1wUGl4ZWxzKGZh
bHNlKSB7IH0KKworICAgIHN0ZDo6c3RyaW5nIHBhdGhPclVSTDsKKyAgICBib29sIHNob3VsZER1
bXBQaXhlbHM7CisgICAgc3RkOjpzdHJpbmcgZXhwZWN0ZWRQaXhlbEhhc2g7Cit9OworCitjbGFz
cyBDb21tYW5kVG9rZW5pemVyIHsKK3B1YmxpYzoKKyAgICBDb21tYW5kVG9rZW5pemVyKGNvbnN0
IHN0ZDo6c3RyaW5nJiBpbnB1dCkKKyAgICAgICAgOiBtX2lucHV0KGlucHV0KQorICAgICAgICAs
IG1fcG9zTmV4dFNlcGFyYXRvcigwKQorICAgIHsKKyAgICAgICAgcHVtcCgpOworICAgIH0KKwor
ICAgIGJvb2wgaGFzTmV4dCgpIGNvbnN0OworICAgIHN0ZDo6c3RyaW5nIG5leHQoKTsKKworcHJp
dmF0ZToKKyAgICB2b2lkIHB1bXAoKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciBrU2VwYXJhdG9y
ID0gJzonOworICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBtX2lucHV0OworICAgIHN0ZDo6c3RyaW5n
IG1fbmV4dDsKKyAgICBzaXplX3QgbV9wb3NOZXh0U2VwYXJhdG9yOworfTsKKwordm9pZCBDb21t
YW5kVG9rZW5pemVyOjpwdW1wKCkKK3sKKyAgICBpZiAobV9wb3NOZXh0U2VwYXJhdG9yID09IHN0
ZDo6c3RyaW5nOjpucG9zIHx8IG1fcG9zTmV4dFNlcGFyYXRvciA9PSBtX2lucHV0LnNpemUoKSkg
eworICAgICAgICBtX25leHQgPSBzdGQ6OnN0cmluZygpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIHNpemVfdCBzdGFydCA9IG1fcG9zTmV4dFNlcGFyYXRvciA/IG1fcG9zTmV4dFNlcGFy
YXRvciArIDEgOiAwOworICAgIG1fcG9zTmV4dFNlcGFyYXRvciA9IG1faW5wdXQuZmluZChrU2Vw
YXJhdG9yLCBzdGFydCk7CisgICAgc2l6ZV90IHNpemUgPSBtX3Bvc05leHRTZXBhcmF0b3IgPT0g
c3RkOjpzdHJpbmc6Om5wb3MgPyBzdGQ6OnN0cmluZzo6bnBvcyA6IG1fcG9zTmV4dFNlcGFyYXRv
ciAtIHN0YXJ0OworICAgIG1fbmV4dCA9IHN0ZDo6c3RyaW5nKG1faW5wdXQsIHN0YXJ0LCBzaXpl
KTsKK30KKworc3RkOjpzdHJpbmcgQ29tbWFuZFRva2VuaXplcjo6bmV4dCgpCit7CisgICAgQVNT
RVJUKGhhc05leHQoKSk7CisKKyAgICBzdGQ6OnN0cmluZyBvbGROZXh0ID0gbV9uZXh0OworICAg
IHB1bXAoKTsKKyAgICByZXR1cm4gb2xkTmV4dDsKK30KKworYm9vbCBDb21tYW5kVG9rZW5pemVy
OjpoYXNOZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9uZXh0ICE9IHN0ZDo6c3RyaW5nKCk7
Cit9CisKK05PX1JFVFVSTiBzdGF0aWMgdm9pZCBkaWUoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0
TGluZSkKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlVuZXhwZWN0ZWQgaW5wdXQgbGluZTogJXNc
biIsIGlucHV0TGluZS5jX3N0cigpKTsKKyAgICBleGl0KDEpOworfQorCitUZXN0Q29tbWFuZCBw
YXJzZUlucHV0TGluZShjb25zdCBzdGQ6OnN0cmluZyYgaW5wdXRMaW5lKQoreworICAgIFRlc3RD
b21tYW5kIHJlc3VsdDsKKyAgICBDb21tYW5kVG9rZW5pemVyIHRva2VuaXplcihpbnB1dExpbmUp
OworICAgIGlmICghdG9rZW5pemVyLmhhc05leHQoKSkKKyAgICAgICAgZGllKGlucHV0TGluZSk7
CisKKyAgICByZXN1bHQucGF0aE9yVVJMID0gdG9rZW5pemVyLm5leHQoKTsKKyAgICBpZiAoIXRv
a2VuaXplci5oYXNOZXh0KCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBzdGQ6OnN0
cmluZyBhcmcgPSB0b2tlbml6ZXIubmV4dCgpOworICAgIGlmIChhcmcgIT0gc3RkOjpzdHJpbmco
Ii1wIikgJiYgYXJnICE9IHN0ZDo6c3RyaW5nKCItLXBpeGVsLXRlc3QiKSkKKyAgICAgICAgZGll
KGlucHV0TGluZSk7CisgICAgcmVzdWx0LnNob3VsZER1bXBQaXhlbHMgPSB0cnVlOworCisgICAg
aWYgKHRva2VuaXplci5oYXNOZXh0KCkpCisgICAgICAgIHJlc3VsdC5leHBlY3RlZFBpeGVsSGFz
aCA9IHRva2VuaXplci5uZXh0KCk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIFRl
c3RDb250cm9sbGVyOjpydW5UZXN0KGNvbnN0IGNoYXIqIGlucHV0TGluZSkKIHsKICAgICBpZiAo
IXJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMoKSkgewogI2lmIFBMQVRGT1JNKE1BQykKQEAg
LTUxNywzMiArNTk4LDEzIEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJ1blRlc3QoY29uc3QgY2hh
ciogdGVzdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGJvb2wgZHVtcFBp
eGVsc1Rlc3QgPSBtX2R1bXBQaXhlbHNGb3JBbGxUZXN0czsKLSAgICBzdGQ6OnN0cmluZyBjb21t
YW5kKHRlc3QpOwotICAgIHN0ZDo6c3RyaW5nIHBhdGhPclVSTCA9IGNvbW1hbmQ7Ci0gICAgc3Rk
OjpzdHJpbmcgZXhwZWN0ZWRQaXhlbEhhc2g7Ci0gICAgc2l6ZV90IGZpcnN0U2VwYXJhdG9yUG9z
ID0gY29tbWFuZC5maW5kX2ZpcnN0X29mKCdcJycpOwotICAgIHNpemVfdCBzZWNvbmRTZXBhcmF0
b3JQb3MgPSBjb21tYW5kLmZpbmRfZmlyc3Rfb2YoJ1wnJywgZmlyc3RTZXBhcmF0b3JQb3MgKyAx
KTsKLSAgICBpZiAoZmlyc3RTZXBhcmF0b3JQb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAg
ICAgICAgcGF0aE9yVVJMID0gc3RkOjpzdHJpbmcoY29tbWFuZCwgMCwgZmlyc3RTZXBhcmF0b3JQ
b3MpOwotICAgICAgICBzaXplX3QgcGl4ZWxIYXNoUG9zID0gZmlyc3RTZXBhcmF0b3JQb3MgKyAx
OwotCi0gICAgICAgIC8vIE5SV1QgcGFzc2VzIC0tcGl4ZWwtdGVzdCBpZiB3ZSBzaG91bGQgZHVt
cCBwaXhlbHMgZm9yIHRoZSB0ZXN0LgotICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBleHBlY3Rl
ZFBpeGVsVGVzdEFyZygiLS1waXhlbC10ZXN0Iik7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIGFyZ1Rl
c3QgPSBzdGQ6OnN0cmluZyhjb21tYW5kLCBmaXJzdFNlcGFyYXRvclBvcyArIDEsIGV4cGVjdGVk
UGl4ZWxUZXN0QXJnLnNpemUoKSk7Ci0gICAgICAgIGlmIChhcmdUZXN0ID09IGV4cGVjdGVkUGl4
ZWxUZXN0QXJnKSB7Ci0gICAgICAgICAgICBkdW1wUGl4ZWxzVGVzdCA9IHRydWU7Ci0gICAgICAg
ICAgICBwaXhlbEhhc2hQb3MgPSBzZWNvbmRTZXBhcmF0b3JQb3MgPT0gc3RkOjpzdHJpbmc6Om5w
b3MgPyBzdGQ6OnN0cmluZzo6bnBvcyA6IHNlY29uZFNlcGFyYXRvclBvcyArIDE7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKHBpeGVsSGFzaFBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcyAmJiBwaXhl
bEhhc2hQb3MgPCBjb21tYW5kLnNpemUoKSkKLSAgICAgICAgICAgIGV4cGVjdGVkUGl4ZWxIYXNo
ID0gc3RkOjpzdHJpbmcoY29tbWFuZCwgcGl4ZWxIYXNoUG9zKTsKLSAgICB9CisgICAgVGVzdENv
bW1hbmQgY29tbWFuZCA9IHBhcnNlSW5wdXRMaW5lKHN0ZDo6c3RyaW5nKGlucHV0TGluZSkpOwog
CiAgICAgbV9zdGF0ZSA9IFJ1bm5pbmdUZXN0OwogCi0gICAgbV9jdXJyZW50SW52b2NhdGlvbiA9
IGFkb3B0UHRyKG5ldyBUZXN0SW52b2NhdGlvbihwYXRoT3JVUkwpKTsKLSAgICBpZiAoZHVtcFBp
eGVsc1Rlc3QpCi0gICAgICAgIG1fY3VycmVudEludm9jYXRpb24tPnNldElzUGl4ZWxUZXN0KGV4
cGVjdGVkUGl4ZWxIYXNoKTsKKyAgICBtX2N1cnJlbnRJbnZvY2F0aW9uID0gYWRvcHRQdHIobmV3
IFRlc3RJbnZvY2F0aW9uKGNvbW1hbmQucGF0aE9yVVJMKSk7CisgICAgaWYgKGNvbW1hbmQuc2hv
dWxkRHVtcFBpeGVscykKKyAgICAgICAgbV9jdXJyZW50SW52b2NhdGlvbi0+c2V0SXNQaXhlbFRl
c3QoY29tbWFuZC5leHBlY3RlZFBpeGVsSGFzaCk7CiAKICAgICBtX2N1cnJlbnRJbnZvY2F0aW9u
LT5pbnZva2UoKTsKICAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLmNsZWFyKCk7CmRpZmYgLS1naXQg
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKaW5kZXggYTk5ZTE2ZWE4NzAyN2MzNGYwN2I4OTYy
YjA5OGMyMzM0ZDk0MjFiZC4uNWUyMGQ2MTFiNDY5ZGYxODdjMzc4ZWU2MmVkMGNhYzMxOGRhZWQy
MSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCisr
KyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaApAQCAtMTA0LDcgKzEw
NCw2IEBAIHByaXZhdGU6CiAKICAgICBPd25QdHI8VGVzdEludm9jYXRpb24+IG1fY3VycmVudElu
dm9jYXRpb247CiAKLSAgICBib29sIG1fZHVtcFBpeGVsc0ZvckFsbFRlc3RzOwogICAgIGJvb2wg
bV92ZXJib3NlOwogICAgIGJvb2wgbV9wcmludFNlcGFyYXRvcnM7CiAgICAgYm9vbCBtX3VzaW5n
U2VydmVyTW9kZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155519</attachid>
            <date>2012-07-31 06:40:14 -0700</date>
            <delta_ts>2012-07-31 09:38:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92398-20120731153941.patch</filename>
            <type>text/plain</type>
            <size>49966</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MTk2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMGVhZWQ3NTk5ODczMjE1MzI0MGZiYTkwZWE0ZTFlNmE4
OTI0MTBlMy4uYjk5ZWQ1NWY2MWQ2MTU2MGM5ZTU5MzZlZWY2OGY3MzcxNjNlYzE3OSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk3
IEBACisyMDEyLTA3LTMxICBCYWxhenMgS2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBBbGwgcG9ydHMgc2hvdWxkIHN1cHBvcnQgcGVyIHRlc3Qgc3dpdGNoaW5nIG9mIHBp
eGVsIHRlc3RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkyMzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGVhY2ggYWxsIHRlc3QgZHJpdmVycyB0byBhY2NlcHQgYSBwZXIgdGVzdCBjb250cm9sIG9m
IHdoZXRoZXIKKyAgICAgICAgdG8gZHVtcCBwaXhlbHMuIERyaXZlcnMgbm93IGFjY2VwdCBhIC1w
Ly0tcGl4ZWwtdGVzdCBhcmd1bWVudAorICAgICAgICBvbiB0aGUgc3RhbmRhcnQgaW5wdXQgdGhh
dCBtZWFucyB0aGF0IHJ1bm5pbmcgdGhlIGN1cnJlbnQKKyAgICAgICAgdGVzdCBhcyBwaXhlbCB0
ZXN0IGlzIGFsbG93ZWQgKGV2ZW4gaWYgdGhlIGV4cGVjdGVkIGhhc2ggaXMKKyAgICAgICAgbWlz
c2luZykuIFJlbW92ZWQgdGhlIC0tcGl4ZWwtdGVzdHMgY29tbWFuZCBsaW5lIG9wdGlvbiBzaW5j
ZQorICAgICAgICB0aGVyZSBpcyBubyBuZWVkIGZvciBpdCBhbnltb3JlLgorCisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaToKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9EdW1wUmVuZGVyVHJlZS5oOgorICAgICAgICAoVGVzdENvbW1hbmQ6OlRlc3RDb21tYW5k
KToKKyAgICAgICAgKFRlc3RDb21tYW5kKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9EdW1w
UmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcDogQWRkZWQuCisgICAgICAgIChDb21tYW5k
VG9rZW5pemVyKToKKyAgICAgICAgKENvbW1hbmRUb2tlbml6ZXI6OkNvbW1hbmRUb2tlbml6ZXIp
OgorICAgICAgICAoQ29tbWFuZFRva2VuaXplcjo6cHVtcCk6CisgICAgICAgIChDb21tYW5kVG9r
ZW5pemVyOjpuZXh0KToKKyAgICAgICAgKENvbW1hbmRUb2tlbml6ZXI6Omhhc05leHQpOgorICAg
ICAgICAoZGllKToKKyAgICAgICAgKHBhcnNlSW5wdXRMaW5lKToKKyAgICAgICAgQ29tbW9uIGxv
Z2ljIHRvIHBhcnNlIHRoZSBpbnB1dCBsaW5lIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IChvciBm
cm9tIHRoZSBjb21tYW5kIGxpbmUKKyAgICAgICAgaW4gc3RhbmRhbG9uZSBtb2RlKS4gTWFkZSBp
dCBzb21ld2hhdCBnZW5lcmFsIHNvIHdlIGNhbiBlYXNpbHkgYWRkIG1vcmUgYXJndW1lbnRzIGlm
CisgICAgICAgIHRoZXJlIGlzIGEgbmVlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9EdW1wUmVuZGVyVHJlZS5jcHA6CisgICAgICAgIChydW5UZXN0KToKKyAgICAgICAgKG1h
aW4pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHA6Cisg
ICAgICAgIChUZXN0U2hlbGw6OlRlc3RTaGVsbCk6CisgICAgICAgIChUZXN0U2hlbGw6OnJ1bkZp
bGVUZXN0KToKKyAgICAgICAgKFRlc3RTaGVsbDo6ZHVtcCk6CisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmg6CisgICAgICAgIChUZXN0UGFyYW1zOjpUZXN0UGFy
YW1zKToKKyAgICAgICAgKFRlc3RTaGVsbCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZWZs
L0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVy
VHJlZS5jcHA6CisgICAgICAgIChwYXJzZUNvbW1hbmRMaW5lT3B0aW9ucyk6CisgICAgICAgIChy
dW5UZXN0KToKKyAgICAgICAgKHNob3VsZER1bXBQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVk
KToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVu
ZGVyVHJlZS5jcHA6CisgICAgICAgIChpbml0aWFsaXplR2xvYmFsc0Zyb21Db21tYW5kTGluZU9w
dGlvbnMpOgorICAgICAgICAoZHVtcCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0R1
bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICAoaW5pdGlhbGl6ZUdsb2JhbHNGcm9tQ29tbWFuZExp
bmVPcHRpb25zKToKKyAgICAgICAgKGR1bXBSZW5kZXJUcmVlKToKKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5wcm86CisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
cXQvRHVtcFJlbmRlclRyZWVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEdW1wUmVuZGVyVHJl
ZTo6cHJvY2Vzc0xpbmUpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVy
VHJlZS5jcHA6CisgICAgICAgIChkdW1wKToKKyAgICAgICAgKHJ1blRlc3QpOgorICAgICAgICAo
ZGxsTGF1bmNoZXJFbnRyeVBvaW50KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRHVt
cFJlbmRlclRyZWUudmNwcm9qOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dzY3JpcHQ6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvd3gvRHVtcFJlbmRlclRyZWVXeC5jcHA6CisgICAgICAg
IChkdW1wKToKKyAgICAgICAgKHJ1blRlc3QpOgorICAgICAgICAoTXlBcHA6Ok9uSW5pdCk6Cisg
ICAgICAgICogU2NyaXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0czogUGFzcyAtLXBpeGVsLXRlc3Qg
YmVmb3JlIHRoZSBoYXNoLgorICAgICAgICBDaGFuZ2VkIHRoZSBzZXBhcmF0b3IgZm9ybSAnIHRv
IDogYmVjYXVzZSBpdCBkb24ndCBuZWVkIHRvIGJlIGVzY2FwZWQKKyAgICAgICAgd2hlbiBwYXNz
aW5nIG1hbnVhbGx5IG9uIHRoZSBjb21hbmQgbGluZS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHk6CisgICAgICAgIChQb3J0LnNob3VsZF9ydW5f
YXNfcGl4ZWxfdGVzdCk6IFJlbW92ZWQgbm93IHRoYXQgYWxsIHBvcnRzIHN1cHBvcnRzIGl0Lgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5Ogor
ICAgICAgICAoRHJpdmVyLmNtZF9saW5lKTogRG9uJ3QgcGFzcyAtLXBpeGVsLXRlc3RzIGFueW1v
cmUuCisgICAgICAgIChEcml2ZXIuX2NvbW1hbmRfZnJvbV9kcml2ZXJfaW5wdXQpOgorCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpUZXN0Q29udHJvbGxlcik6CisgICAgICAgIChXVFI6OlRlc3RDb250
cm9sbGVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdUUjo6VGVzdENvbW1hbmQ6OlRlc3RDb21t
YW5kKToKKyAgICAgICAgKFRlc3RDb21tYW5kKToKKyAgICAgICAgKFdUUik6CisgICAgICAgIChD
b21tYW5kVG9rZW5pemVyKToKKyAgICAgICAgKFdUUjo6Q29tbWFuZFRva2VuaXplcjo6Q29tbWFu
ZFRva2VuaXplcik6CisgICAgICAgIChXVFI6OkNvbW1hbmRUb2tlbml6ZXI6OnB1bXApOgorICAg
ICAgICAoV1RSOjpDb21tYW5kVG9rZW5pemVyOjpuZXh0KToKKyAgICAgICAgKFdUUjo6Q29tbWFu
ZFRva2VuaXplcjo6aGFzTmV4dCk6CisgICAgICAgIChXVFI6OmRpZSk6CisgICAgICAgIChXVFI6
OnBhcnNlSW5wdXRMaW5lKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJ1blRlc3Qp
OgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAg
KFRlc3RDb250cm9sbGVyKToKKyAgICAgICAgRHVwbGljYXRlIHRoZSBsb2dpYyBmb3IgcGFyc2lu
ZyB0aGUgY29tbWFuZCBsaW5lIGJlY2F1c2UKKyAgICAgICAgdW5mb3J0dW5hdGVseSB0aGVyZSBp
cyBubyB3YXkgdG8gc2hhcmUgY29kZSBiZXR3ZWVuCisgICAgICAgIFdlYktpdFRlc3RSdW5uZXIg
YW5kIER1bXBSZW5kZXJUcmVlLgorCiAyMDEyLTA3LTMxICBKb2NoZW4gRWlzaW5nZXIgIDxqb2No
ZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gbW92ZSBFdmVudFNlbmRlciBp
bnRvIFRlc3RSdW5uZXIuYQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJl
bmRlclRyZWUuZ3lwaSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkK
aW5kZXggZjJiYzczZDdiZGY2Zjc0ZDE0NTY3N2Q3ZGZjNDNhZTM1ZGQyYzZhNC4uNDE2YmIwNzMy
NTg4N2Q1N2I5MDllOTMxMjIzNTRmMDhiN2RmYmE0NiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9E
dW1wUmVuZGVyVHJlZS5neXBpCkBAIC01NCw2ICs1NCw4IEBACiAgICAgICAgICAgICAnY2hyb21p
dW0vV2ViVmlld0hvc3QuaCcsCiAgICAgICAgIF0sCiAgICAgICAgICd0ZXN0X3J1bm5lcl9maWxl
cyc6IFsKKyAgICAgICAgICAgICdEdW1wUmVuZGVyVHJlZS5oJywKKyAgICAgICAgICAgICdEdW1w
UmVuZGVyVHJlZUNvbW1vbi5jcHAnLAogICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIv
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwJywKICAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0
UnVubmVyL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVt
L1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAnLApkaWZmIC0tZ2l0IGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L0R1bXBSZW5kZXJUcmVlLmgKaW5kZXggMGU1OThiZTRhZTNkZDYyNWYwYjQ1ZWZlNmIyOGZhMzVm
NjdmNTJmMi4uMThkOGNkYTBlYjE3ZmE4M2JlZTIwODliNmQ0ODVhNjQ5ZGJiODY3MCAxMDA2NDQK
LS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuaAorKysgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5oCkBAIC02NSw0ICs2NSwxNCBAQCBleHRlcm4g
UmVmUHRyPExheW91dFRlc3RDb250cm9sbGVyPiBnTGF5b3V0VGVzdENvbnRyb2xsZXI7CiB2b2lk
IGR1bXAoKTsKIHZvaWQgZGlzcGxheVdlYlZpZXcoKTsKIAorc3RydWN0IFRlc3RDb21tYW5kIHsK
KyAgICBUZXN0Q29tbWFuZCgpIDogc2hvdWxkRHVtcFBpeGVscyhmYWxzZSkgeyB9CisKKyAgICBz
dGQ6OnN0cmluZyBwYXRoT3JVUkw7CisgICAgYm9vbCBzaG91bGREdW1wUGl4ZWxzOworICAgIHN0
ZDo6c3RyaW5nIGV4cGVjdGVkUGl4ZWxIYXNoOworfTsKKworVGVzdENvbW1hbmQgcGFyc2VJbnB1
dExpbmUoY29uc3Qgc3RkOjpzdHJpbmcmKTsKKwogI2VuZGlmIC8vIER1bXBSZW5kZXJUcmVlX2gK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDgzYmZmZDQ0ODQxYWExMjJlZWRlZDQ3MjUx
MzRjNjkxNTIwMGRkNWUuLmFhMzRiOTczOGNmNTRmYjIyNzVmNWRlMzRkMTgxYmQ0MDFhYTg5YzMg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRy
ZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjg5LDYgKzI4OSw3IEBACiAJCThDQ0RB
ODFGMTUxQTU2NTUwMDAzRjkzNyAvKiBTYW1wbGVGb250LnNmb250ICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54
bWw7IG5hbWUgPSBTYW1wbGVGb250LnNmb250OyBwYXRoID0gZm9udHMvU2FtcGxlRm9udC5zZm9u
dDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMzNTQzNUYwM0Q3NTUwMjAwODYzNUNF
IC8qIFdlYktpdC5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgcGF0aCA9IFdlYktpdC5mcmFtZXdvcms7
IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTkzNDA5OTU0MDg1NDBDQUYw
MDdGM0JDOCAvKiBEdW1wUmVuZGVyVHJlZSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBl
eHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUlu
SW5kZXggPSAwOyBwYXRoID0gRHVtcFJlbmRlclRyZWU7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9E
VUNUU19ESVI7IH07CisJCTk4MDUxMUQxMTVDNzAxRTUwMDhDRkU3QiAvKiBEdW1wUmVuZGVyVHJl
ZUNvbW1vbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEdW1wUmVu
ZGVyVHJlZUNvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4MDNGRjc0
MDlDQUFEMDgwMDlCMkEzNyAvKiBEdW1wUmVuZGVyVHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2Rp
bmcgPSA0OyBwYXRoID0gRHVtcFJlbmRlclRyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTgxNzA5MDMwOEIxNjREMzAwQ0NCOUZCIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29y
ayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBw
ZXIuZnJhbWV3b3JrOyBwYXRoID0gSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrOyBzb3VyY2VUcmVl
ID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlBODRGNjA4OTA4QjEzNkRBMDBFOTc0NUYgLyog
Q29jb2EuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBDb2NvYS5mcmFtZXdvcms7IHBhdGgg
PSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db2NvYS5mcmFtZXdvcms7IHNvdXJjZVRyZWUg
PSAiPGFic29sdXRlPiI7IH07CkBAIC00MjEsNiArNDIyLDcgQEAKIAkJMDhGQjc3OTRGRTg0MTU1
REMwMkFBQzA3IC8qIER1bXBSZW5kZXJUcmVlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKKwkJCQk5ODA1MTFEMTE1QzcwMUU1MDA4Q0ZFN0IgLyogRHVtcFJlbmRl
clRyZWVDb21tb24uY3BwICovLAogCQkJCTMyQTcwQUFCMDM3MDVFMUYwMEM5MTc4MyAvKiBEdW1w
UmVuZGVyVHJlZVByZWZpeC5oICovLAogCQkJCTE0MjJBMjc1MEFGNkY0QkQwMEUxQTg4MyAvKiBE
ZWxlZ2F0ZXMgKi8sCiAJCQkJMTQyMkEyNjkwQUY2RjQ1MjAwRTFBODgzIC8qIENvbnRyb2xsZXJz
ICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWVDb21t
b24uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWVDb21tb24uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjAzMzQ5ZGIyMjA2N2U5YTA4NDE3YTIzYWQ4Y2IxM2I0NWI2ZDIzMTAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZUNvbW1vbi5j
cHAKQEAgLTAsMCArMSw4MiBAQAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkR1bXBS
ZW5kZXJUcmVlLmgiCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Y3R5cGUuaD4K
KyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmlu
Zz4KKworY2xhc3MgQ29tbWFuZFRva2VuaXplciB7CitwdWJsaWM6CisgICAgQ29tbWFuZFRva2Vu
aXplcihjb25zdCBzdGQ6OnN0cmluZyYgaW5wdXQpCisgICAgICAgIDogbV9pbnB1dChpbnB1dCkK
KyAgICAgICAgLCBtX3Bvc05leHRTZXBhcmF0b3IoMCkKKyAgICB7CisgICAgICAgIHB1bXAoKTsK
KyAgICB9CisKKyAgICBib29sIGhhc05leHQoKSBjb25zdDsKKyAgICBzdGQ6OnN0cmluZyBuZXh0
KCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBwdW1wKCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIg
a1NlcGFyYXRvciA9ICc6JzsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgbV9pbnB1dDsKKyAgICBz
dGQ6OnN0cmluZyBtX25leHQ7CisgICAgc2l6ZV90IG1fcG9zTmV4dFNlcGFyYXRvcjsKK307CisK
K3ZvaWQgQ29tbWFuZFRva2VuaXplcjo6cHVtcCgpCit7CisgICAgaWYgKG1fcG9zTmV4dFNlcGFy
YXRvciA9PSBzdGQ6OnN0cmluZzo6bnBvcyB8fCBtX3Bvc05leHRTZXBhcmF0b3IgPT0gbV9pbnB1
dC5zaXplKCkpIHsKKyAgICAgICAgbV9uZXh0ID0gc3RkOjpzdHJpbmcoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBzaXplX3Qgc3RhcnQgPSBtX3Bvc05leHRTZXBhcmF0b3IgPyBtX3Bv
c05leHRTZXBhcmF0b3IgKyAxIDogMDsKKyAgICBtX3Bvc05leHRTZXBhcmF0b3IgPSBtX2lucHV0
LmZpbmQoa1NlcGFyYXRvciwgc3RhcnQpOworICAgIHNpemVfdCBzaXplID0gbV9wb3NOZXh0U2Vw
YXJhdG9yID09IHN0ZDo6c3RyaW5nOjpucG9zID8gc3RkOjpzdHJpbmc6Om5wb3MgOiBtX3Bvc05l
eHRTZXBhcmF0b3IgLSBzdGFydDsKKyAgICBtX25leHQgPSBzdGQ6OnN0cmluZyhtX2lucHV0LCBz
dGFydCwgc2l6ZSk7Cit9CisKK3N0ZDo6c3RyaW5nIENvbW1hbmRUb2tlbml6ZXI6Om5leHQoKQor
eworICAgIEFTU0VSVChoYXNOZXh0KCkpOworCisgICAgc3RkOjpzdHJpbmcgb2xkTmV4dCA9IG1f
bmV4dDsKKyAgICBwdW1wKCk7CisgICAgcmV0dXJuIG9sZE5leHQ7Cit9CisKK2Jvb2wgQ29tbWFu
ZFRva2VuaXplcjo6aGFzTmV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmV4dCAhPSBzdGQ6
OnN0cmluZygpOworfQorCitOT19SRVRVUk4gc3RhdGljIHZvaWQgZGllKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBpbnB1dExpbmUpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJVbmV4cGVjdGVkIGlucHV0
IGxpbmU6ICVzXG4iLCBpbnB1dExpbmUuY19zdHIoKSk7CisgICAgZXhpdCgxKTsKK30KKworVGVz
dENvbW1hbmQgcGFyc2VJbnB1dExpbmUoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0TGluZSkKK3sK
KyAgICBUZXN0Q29tbWFuZCByZXN1bHQ7CisgICAgQ29tbWFuZFRva2VuaXplciB0b2tlbml6ZXIo
aW5wdXRMaW5lKTsKKyAgICBpZiAoIXRva2VuaXplci5oYXNOZXh0KCkpCisgICAgICAgIGRpZShp
bnB1dExpbmUpOworCisgICAgcmVzdWx0LnBhdGhPclVSTCA9IHRva2VuaXplci5uZXh0KCk7Cisg
ICAgaWYgKCF0b2tlbml6ZXIuaGFzTmV4dCgpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisg
ICAgc3RkOjpzdHJpbmcgYXJnID0gdG9rZW5pemVyLm5leHQoKTsKKyAgICBpZiAoYXJnICE9IHN0
ZDo6c3RyaW5nKCItcCIpICYmIGFyZyAhPSBzdGQ6OnN0cmluZygiLS1waXhlbC10ZXN0IikpCisg
ICAgICAgIGRpZShpbnB1dExpbmUpOworICAgIHJlc3VsdC5zaG91bGREdW1wUGl4ZWxzID0gdHJ1
ZTsKKworICAgIGlmICh0b2tlbml6ZXIuaGFzTmV4dCgpKQorICAgICAgICByZXN1bHQuZXhwZWN0
ZWRQaXhlbEhhc2ggPSB0b2tlbml6ZXIubmV4dCgpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVl
LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcApp
bmRleCA2MTU1ZjQ0MWY1ZDhiYjNjNDRlNTE3OTA4MGRjYjE3NDQ1ZTg5ODc0Li5iNTU5NDg0MzZj
MjhiNTRmMmNmNzY5YmU5ZWU5MjU3ZDMwMTkyMTM0IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9EdW1wUmVuZGVyVHJlZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAgKi8K
IAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCiAKICNp
bmNsdWRlICJNb2NrV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5jbHVkZSAiVGVzdFNoZWxs
LmgiCkBAIC00NCw3ICs0NSw2IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiBzdGF0aWMgY29uc3Qg
Y2hhciBvcHRpb25Db21wbGV4VGV4dFtdID0gIi0tY29tcGxleC10ZXh0IjsKIHN0YXRpYyBjb25z
dCBjaGFyIG9wdGlvbkR1bXBBbGxQaXhlbHNbXSA9ICItLWR1bXAtYWxsLXBpeGVscyI7CiBzdGF0
aWMgY29uc3QgY2hhciBvcHRpb25Ob3RyZWVbXSA9ICItLW5vdHJlZSI7Ci1zdGF0aWMgY29uc3Qg
Y2hhciBvcHRpb25QaXhlbFRlc3RzW10gPSAiLS1waXhlbC10ZXN0cyI7CiBzdGF0aWMgY29uc3Qg
Y2hhciBvcHRpb25UaHJlYWRlZFtdID0gIi0tdGhyZWFkZWQiOwogc3RhdGljIGNvbnN0IGNoYXIg
b3B0aW9uRGVidWdSZW5kZXJUcmVlW10gPSAiLS1kZWJ1Zy1yZW5kZXItdHJlZSI7CiBzdGF0aWMg
Y29uc3QgY2hhciBvcHRpb25EZWJ1Z0xheWVyVHJlZVtdID0gIi0tZGVidWctbGF5ZXItdHJlZSI7
CkBAIC04NSwxNyArODUsMTIgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8TW9ja1dlYktpdFBsYXRm
b3JtU3VwcG9ydD4gbV9tb2NrUGxhdGZvcm07CiB9OwogCi1zdGF0aWMgdm9pZCBydW5UZXN0KFRl
c3RTaGVsbCYgc2hlbGwsIFRlc3RQYXJhbXMmIHBhcmFtcywgY29uc3Qgc3RyaW5nJiB0ZXN0TmFt
ZSkKK3N0YXRpYyB2b2lkIHJ1blRlc3QoVGVzdFNoZWxsJiBzaGVsbCwgVGVzdFBhcmFtcyYgcGFy
YW1zLCBjb25zdCBzdHJpbmcmIGlucHV0TGluZSkKIHsKICAgICBpbnQgb2xkVGltZW91dE1zZWMg
PSBzaGVsbC5sYXlvdXRUZXN0VGltZW91dCgpOwotICAgIHBhcmFtcy5waXhlbEhhc2ggPSAiIjsK
LSAgICBzdHJpbmcgcGF0aE9yVVJMID0gdGVzdE5hbWU7Ci0gICAgc3RyaW5nOjpzaXplX3R5cGUg
c2VwYXJhdG9yUG9zaXRpb24gPSBwYXRoT3JVUkwuZmluZCgiJyIpOwotICAgIGlmIChzZXBhcmF0
b3JQb3NpdGlvbiAhPSBzdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgcGFyYW1zLnBpeGVsSGFzaCA9
IHBhdGhPclVSTC5zdWJzdHIoc2VwYXJhdG9yUG9zaXRpb24gKyAxKTsKLSAgICAgICAgcGF0aE9y
VVJMLmVyYXNlKHNlcGFyYXRvclBvc2l0aW9uKTsKLSAgICB9Ci0gICAgcGFyYW1zLnRlc3RVcmwg
PSB3ZWJraXRfc3VwcG9ydDo6Q3JlYXRlVVJMRm9yUGF0aE9yVVJMKHBhdGhPclVSTCk7CisgICAg
VGVzdENvbW1hbmQgY29tbWFuZCA9IHBhcnNlSW5wdXRMaW5lKGlucHV0TGluZSk7CisgICAgcGFy
YW1zLnRlc3RVcmwgPSB3ZWJraXRfc3VwcG9ydDo6Q3JlYXRlVVJMRm9yUGF0aE9yVVJMKGNvbW1h
bmQucGF0aE9yVVJMKTsKKyAgICBwYXJhbXMucGl4ZWxIYXNoID0gY29tbWFuZC5zaG91bGREdW1w
UGl4ZWxzOwogICAgIHdlYmtpdF9zdXBwb3J0OjpTZXRDdXJyZW50RGlyZWN0b3J5Rm9yRmlsZVVS
TChwYXJhbXMudGVzdFVybCk7CiAgICAgdjg6OlY4OjpTZXRGbGFnc0Zyb21TdHJpbmcoc2hlbGwu
amF2YVNjcmlwdEZsYWdzKCkuY19zdHIoKSwgc2hlbGwuamF2YVNjcmlwdEZsYWdzKCkubGVuZ3Ro
KCkpOwogICAgIGlmIChzaGVsbC5zdHJlc3NPcHQoKSB8fCBzaGVsbC5zdHJlc3NEZW9wdCgpKSB7
CkBAIC0xMDgsMTEgKzEwMywxMSBAQCBzdGF0aWMgdm9pZCBydW5UZXN0KFRlc3RTaGVsbCYgc2hl
bGwsIFRlc3RQYXJhbXMmIHBhcmFtcywgY29uc3Qgc3RyaW5nJiB0ZXN0TmFtZQogICAgICAgICAg
IGJvb2wgaXNMYXN0TG9hZCA9IChpID09ICh2ODo6VGVzdGluZzo6R2V0U3RyZXNzUnVucygpIC0g
MSkpOwogICAgICAgICAgIHNoZWxsLnNldER1bXBXaGVuRmluaXNoZWQoaXNMYXN0TG9hZCk7CiAg
ICAgICAgICAgc2hlbGwucmVzZXRUZXN0Q29udHJvbGxlcigpOwotICAgICAgICAgIHNoZWxsLnJ1
bkZpbGVUZXN0KHBhcmFtcyk7CisgICAgICAgICAgc2hlbGwucnVuRmlsZVRlc3QocGFyYW1zLCBj
b21tYW5kLnNob3VsZER1bXBQaXhlbHMpOwogICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICBz
aGVsbC5yZXNldFRlc3RDb250cm9sbGVyKCk7Ci0gICAgICBzaGVsbC5ydW5GaWxlVGVzdChwYXJh
bXMpOworICAgICAgc2hlbGwucnVuRmlsZVRlc3QocGFyYW1zLCBjb21tYW5kLnNob3VsZER1bXBQ
aXhlbHMpOwogICAgIH0KICAgICBzaGVsbC5zZXRMYXlvdXRUZXN0VGltZW91dChvbGRUaW1lb3V0
TXNlYyk7CiB9CkBAIC0xNDYsOCArMTQxLDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFy
Z3ZbXSkKICAgICAgICAgICAgIHNlcnZlck1vZGUgPSB0cnVlOwogICAgICAgICBlbHNlIGlmIChh
cmd1bWVudCA9PSBvcHRpb25Ob3RyZWUpCiAgICAgICAgICAgICBwYXJhbXMuZHVtcFRyZWUgPSBm
YWxzZTsKLSAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uUGl4ZWxUZXN0cykKLSAg
ICAgICAgICAgIHBhcmFtcy5kdW1wUGl4ZWxzID0gdHJ1ZTsKICAgICAgICAgZWxzZSBpZiAoYXJn
dW1lbnQgPT0gb3B0aW9uRGVidWdSZW5kZXJUcmVlKQogICAgICAgICAgICAgcGFyYW1zLmRlYnVn
UmVuZGVyVHJlZSA9IHRydWU7CiAgICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvbkRl
YnVnTGF5ZXJUcmVlKQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFNoZWxsLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5j
cHAKaW5kZXggZjEyMmUxZDJiZWUzMmE1NDExNWEzMzNlYWYwYmRlYjY5Y2VlYmFkYy4uZTUzYTFm
MmQ4NzYzZjA2NDRjYzNiNjA3ZjYxMzk3Y2JmNmZlZWIyNSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCkBAIC0xMDYsNiArMTA2LDcgQEAgVGVzdFNoZWxs
OjpUZXN0U2hlbGwoKQogICAgICwgbV90ZXN0SXNQcmVwYXJpbmcoZmFsc2UpCiAgICAgLCBtX2Zv
Y3VzZWRXaWRnZXQoMCkKICAgICAsIG1fZGV2VG9vbHMoMCkKKyAgICAsIG1fZHVtcFBpeGVsc0Zv
ckN1cnJlbnRUZXN0KGZhbHNlKQogICAgICwgbV9hbGxvd0V4dGVybmFsUGFnZXMoZmFsc2UpCiAg
ICAgLCBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JWaWRlb0VuYWJsZWQoZmFsc2UpCiAgICAg
LCBtX3RocmVhZGVkQ29tcG9zaXRpbmdFbmFibGVkKGZhbHNlKQpAQCAtMjMyLDEzICsyMzMsMTYg
QEAgdm9pZCBUZXN0U2hlbGw6OnJlc2V0V2ViU2V0dGluZ3MoV2ViVmlldyYgd2ViVmlldykKICAg
ICBtX3ByZWZzLmFwcGx5VG8oJndlYlZpZXcpOwogfQogCi12b2lkIFRlc3RTaGVsbDo6cnVuRmls
ZVRlc3QoY29uc3QgVGVzdFBhcmFtcyYgcGFyYW1zKQordm9pZCBUZXN0U2hlbGw6OnJ1bkZpbGVU
ZXN0KGNvbnN0IFRlc3RQYXJhbXMmIHBhcmFtcywgYm9vbCBzaG91bGREdW1wUGl4ZWxzKQogewog
ICAgIEFTU0VSVChwYXJhbXMudGVzdFVybC5pc1ZhbGlkKCkpOworICAgIG1fZHVtcFBpeGVsc0Zv
ckN1cnJlbnRUZXN0ID0gc2hvdWxkRHVtcFBpeGVsczsKICAgICBtX3Rlc3RJc1ByZXBhcmluZyA9
IHRydWU7CiAgICAgbV9wYXJhbXMgPSBwYXJhbXM7CiAgICAgc3RyaW5nIHRlc3RVcmwgPSBtX3Bh
cmFtcy50ZXN0VXJsLnNwZWMoKTsKIAorICAgIG1fbGF5b3V0VGVzdENvbnRyb2xsZXItPnNldFNo
b3VsZEdlbmVyYXRlUGl4ZWxSZXN1bHRzKHNob3VsZER1bXBQaXhlbHMpOworCiAgICAgaWYgKHRl
c3RVcmwuZmluZCgibG9hZGluZy8iKSAhPSBzdHJpbmc6Om5wb3MKICAgICAgICAgfHwgdGVzdFVy
bC5maW5kKCJsb2FkaW5nXFwiKSAhPSBzdHJpbmc6Om5wb3MpCiAgICAgICAgIG1fbGF5b3V0VGVz
dENvbnRyb2xsZXItPnNldFNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3ModHJ1ZSk7CkBAIC02
MDMsNyArNjA3LDcgQEAgdm9pZCBUZXN0U2hlbGw6OmR1bXAoKQogICAgIGlmIChkdW1wZWRBbnl0
aGluZyAmJiBtX3BhcmFtcy5wcmludFNlcGFyYXRvcnMpCiAgICAgICAgIG1fcHJpbnRlci5oYW5k
bGVUZXh0Rm9vdGVyKCk7CiAKLSAgICBpZiAobV9wYXJhbXMuZHVtcFBpeGVscyAmJiBzaG91bGRH
ZW5lcmF0ZVBpeGVsUmVzdWx0cykgeworICAgIGlmIChtX2R1bXBQaXhlbHNGb3JDdXJyZW50VGVz
dCAmJiBzaG91bGRHZW5lcmF0ZVBpeGVsUmVzdWx0cykgewogICAgICAgICAvLyBJbWFnZSBvdXRw
dXQ6IHdlIHdyaXRlIHRoZSBpbWFnZSBkYXRhIHRvIHRoZSBmaWxlIGdpdmVuIG9uIHRoZQogICAg
ICAgICAvLyBjb21tYW5kIGxpbmUgKGZvciB0aGUgZHVtcCBwaXhlbHMgYXJndW1lbnQpLCBhbmQg
dGhlIE1ENSBzdW0gdG8KICAgICAgICAgLy8gc3Rkb3V0LgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0U2hlbGwuaAppbmRleCBkYmZjMWQxYzlhMTNiMWNjYzFlZDhjZjRhZThiZjk4
ZmViNjFiOTQyLi4yZTY1YzBkZGRjOGNiNzcxNWExNWYwYjkzMGQ4NGQ4YmYzM2EwMTRhIDEwMDY0
NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaAorKysgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaApAQCAtNjMsNyArNjMsNiBA
QCBjbGFzcyBXZWJQZXJtaXNzaW9uczsKIAogc3RydWN0IFRlc3RQYXJhbXMgewogICAgIGJvb2wg
ZHVtcFRyZWU7Ci0gICAgYm9vbCBkdW1wUGl4ZWxzOwogICAgIGJvb2wgZGVidWdSZW5kZXJUcmVl
OwogICAgIGJvb2wgZGVidWdMYXllclRyZWU7CiAgICAgYm9vbCBwcmludFNlcGFyYXRvcnM7CkBA
IC03Miw3ICs3MSw2IEBAIHN0cnVjdCBUZXN0UGFyYW1zIHsKIAogICAgIFRlc3RQYXJhbXMoKQog
ICAgICAgICA6IGR1bXBUcmVlKHRydWUpCi0gICAgICAgICwgZHVtcFBpeGVscyhmYWxzZSkKICAg
ICAgICAgLCBkZWJ1Z1JlbmRlclRyZWUoZmFsc2UpCiAgICAgICAgICwgZGVidWdMYXllclRyZWUo
ZmFsc2UpCiAgICAgICAgICwgcHJpbnRTZXBhcmF0b3JzKGZhbHNlKSB7IH0KQEAgLTEwMyw3ICsx
MDEsNyBAQCBwdWJsaWM6CiAgICAgV2ViUGVybWlzc2lvbnMqIHdlYlBlcm1pc3Npb25zKCkgeyBy
ZXR1cm4gbV93ZWJQZXJtaXNzaW9ucy5nZXQoKTsgfQogCiAgICAgdm9pZCBiaW5kSlNPYmplY3Rz
VG9XaW5kb3coV2ViS2l0OjpXZWJGcmFtZSopOwotICAgIHZvaWQgcnVuRmlsZVRlc3QoY29uc3Qg
VGVzdFBhcmFtcyYpOworICAgIHZvaWQgcnVuRmlsZVRlc3QoY29uc3QgVGVzdFBhcmFtcyYsIGJv
b2wgc2hvdWxkRHVtcFBpeGVsVGVzdHMpOwogICAgIHZvaWQgY2FsbEpTR0MoKTsKICAgICB2b2lk
IHJlc2V0VGVzdENvbnRyb2xsZXIoKTsKICAgICB2b2lkIHdhaXRUZXN0RmluaXNoZWQoKTsKQEAg
LTIyNCw2ICsyMjIsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBUZXN0UGFyYW1zIG1fcGFy
YW1zOworICAgIGJvb2wgbV9kdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3Q7CiAgICAgaW50IG1fdGlt
ZW91dDsgLy8gdGltZW91dCB2YWx1ZSBpbiBtaWxsaXNlY29uZAogICAgIGJvb2wgbV9hbGxvd0V4
dGVybmFsUGFnZXM7CiAgICAgYm9vbCBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JWaWRlb0Vu
YWJsZWQ7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VMaXN0cy50
eHQgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VMaXN0cy50eHQKaW5kZXggZTFkYWNm
OTAxYmEwNjI1YTVhMWU4MDdlYzZiOTQ1MzQzNDk4NGNhYS4uMDY3ZGJkMzJiN2FhOTFmNWE1NDdj
YjdiZTU3ZmY0YmRmNTk5OTMyOSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZs
L0NNYWtlTGlzdHMudHh0CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3Rz
LnR4dApAQCAtMSw0ICsxLDUgQEAKIFNFVChEdW1wUmVuZGVyVHJlZV9TT1VSQ0VTCisgICAgJHtU
T09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcAogICAgICR7
VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJlZS9DeWNsaWNSZWR1bmRhbmN5Q2hlY2suY3BwCiAgICAg
JHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5jcHAKICAgICAke1RPT0xT
X0RJUn0vRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCmRpZmYgLS1naXQg
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWUuY3BwIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlLmNwcAppbmRleCBjMmM5ZDcxYzBjNTE1Y2Iw
OGNkNDEyZDQyYWRkMGQxMDVjYTk3NTljLi43NjEzZjRlNGZmMGU1NjUzNTYyODhkNGM3ZDQ0ZmYz
OWE4MmU5NjNlIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRl
clRyZWUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZS5j
cHAKQEAgLTY0LDcgKzY0LDcgQEAgZXh0ZXJuIEV3a19IaXN0b3J5X0l0ZW0qIHByZXZUZXN0QkZJ
dGVtOwogUmVmUHRyPExheW91dFRlc3RDb250cm9sbGVyPiBnTGF5b3V0VGVzdENvbnRyb2xsZXI7
CiB2b2xhdGlsZSBib29sIGRvbmUgPSBmYWxzZTsKIAotc3RhdGljIGludCBkdW1wUGl4ZWxzID0g
ZmFsc2U7CitzdGF0aWMgYm9vbCBkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3Q7CiBzdGF0aWMgaW50
IGR1bXBUcmVlID0gdHJ1ZTsKIHN0YXRpYyBpbnQgcHJpbnRTZXBhcmF0b3JzID0gdHJ1ZTsKIHN0
YXRpYyBpbnQgdXNlWDExV2luZG93ID0gZmFsc2U7CkBAIC0xOTIsNyArMTkyLDYgQEAgc3RhdGlj
IGJvb2wgcGFyc2VDb21tYW5kTGluZU9wdGlvbnMoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewog
ICAgIHN0YXRpYyBjb25zdCBvcHRpb24gb3B0aW9uc1tdID0gewogICAgICAgICB7Im5vdHJlZSIs
IG5vX2FyZ3VtZW50LCAmZHVtcFRyZWUsIGZhbHNlfSwKLSAgICAgICAgeyJwaXhlbC10ZXN0cyIs
IG5vX2FyZ3VtZW50LCAmZHVtcFBpeGVscywgdHJ1ZX0sCiAgICAgICAgIHsidHJlZSIsIG5vX2Fy
Z3VtZW50LCAmZHVtcFRyZWUsIHRydWV9LAogICAgICAgICB7Imd1aSIsIG5vX2FyZ3VtZW50LCAm
dXNlWDExV2luZG93LCB0cnVlfSwKICAgICAgICAgezAsIDAsIDAsIDB9CkBAIC0yMTAsMzIgKzIw
OSw2IEBAIHN0YXRpYyBib29sIHBhcnNlQ29tbWFuZExpbmVPcHRpb25zKGludCBhcmdjLCBjaGFy
KiogYXJndikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIFN0cmluZyBnZXRGaW5hbFRl
c3RVUkwoY29uc3QgU3RyaW5nJiB0ZXN0VVJMKQotewotICAgIGNvbnN0IHNpemVfdCBoYXNoU2Vw
YXJhdG9yUG9zID0gdGVzdFVSTC5maW5kKCInIik7Ci0gICAgaWYgKGhhc2hTZXBhcmF0b3JQb3Mg
IT0gbm90Rm91bmQpCi0gICAgICAgIHJldHVybiBnZXRGaW5hbFRlc3RVUkwodGVzdFVSTC5sZWZ0
KGhhc2hTZXBhcmF0b3JQb3MpKTsKLQotICAgIC8vIENvbnZlcnQgdGhlIHBhdGggaW50byBhIGZ1
bGwgZmlsZSBVUkwgaWYgaXQgZG9lcyBub3QgbG9vawotICAgIC8vIGxpa2UgYW4gSFRUUC9TIFVS
TCAoZG9lc24ndCBzdGFydCB3aXRoIGh0dHA6Ly8gb3IgaHR0cHM6Ly8pLgotICAgIGlmICghdGVz
dFVSTC5zdGFydHNXaXRoKCJodHRwOi8vIikgJiYgIXRlc3RVUkwuc3RhcnRzV2l0aCgiaHR0cHM6
Ly8iKSkgewotICAgICAgICBjaGFyKiBjRmlsZVBhdGggPSBlY29yZV9maWxlX3JlYWxwYXRoKHRl
c3RVUkwudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGNvbnN0IFN0cmluZyBmaWxlUGF0aCA9IFN0
cmluZzo6ZnJvbVVURjgoY0ZpbGVQYXRoKTsKLSAgICAgICAgZnJlZShjRmlsZVBhdGgpOwotCi0g
ICAgICAgIGlmIChlY29yZV9maWxlX2V4aXN0cyhmaWxlUGF0aC51dGY4KCkuZGF0YSgpKSkKLSAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoImZpbGU6Ly8iKSArIGZpbGVQYXRoOwotICAgIH0KLQot
ICAgIHJldHVybiB0ZXN0VVJMOwotfQotCi1zdGF0aWMgU3RyaW5nIGdldEV4cGVjdGVkUGl4ZWxI
YXNoKGNvbnN0IFN0cmluZyYgdGVzdFVSTCkKLXsKLSAgICBjb25zdCBzaXplX3QgaGFzaFNlcGFy
YXRvclBvcyA9IHRlc3RVUkwuZmluZCgiJyIpOwotICAgIHJldHVybiAoaGFzaFNlcGFyYXRvclBv
cyAhPSBub3RGb3VuZCkgPyB0ZXN0VVJMLnN1YnN0cmluZyhoYXNoU2VwYXJhdG9yUG9zICsgMSkg
OiBTdHJpbmcoKTsKLX0KLQogc3RhdGljIGlubGluZSBib29sIGlzR2xvYmFsSGlzdG9yeVRlc3Qo
Y29uc3QgU3RyaW5nJiBjVGVzdFBhdGhPclVSTCkKIHsKICAgICByZXR1cm4gY1Rlc3RQYXRoT3JV
UkwuY29udGFpbnMoIi9nbG9iYWxoaXN0b3J5LyIpOwpAQCAtMjY3LDEzICsyNDAsMTMgQEAgc3Rh
dGljIHZvaWQgY3JlYXRlTGF5b3V0VGVzdENvbnRyb2xsZXIoY29uc3QgU3RyaW5nJiB0ZXN0VVJM
LCBjb25zdCBTdHJpbmcmIGV4cGUKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIHJ1blRlc3QoY29u
c3QgY2hhciogY1Rlc3RQYXRoT3JVUkwpCitzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IGNoYXIq
IGlucHV0TGluZSkKIHsKLSAgICBjb25zdCBTdHJpbmcgdGVzdFBhdGhPclVSTCA9IFN0cmluZzo6
ZnJvbVVURjgoY1Rlc3RQYXRoT3JVUkwpOwotICAgIEFTU0VSVCghdGVzdFBhdGhPclVSTC5pc0Vt
cHR5KCkpOwotCi0gICAgY29uc3QgU3RyaW5nIHRlc3RVUkwgPSBnZXRGaW5hbFRlc3RVUkwodGVz
dFBhdGhPclVSTCk7Ci0gICAgY29uc3QgU3RyaW5nIGV4cGVjdGVkUGl4ZWxIYXNoID0gZ2V0RXhw
ZWN0ZWRQaXhlbEhhc2godGVzdFBhdGhPclVSTCk7CisgICAgVGVzdENvbW1hbmQgY29tbWFuZCA9
IHBhcnNlSW5wdXRMaW5lKGlucHV0TGluZSk7CisgICAgY29uc3QgU3RyaW5nIHRlc3RVUkwoY29t
bWFuZC5wYXRoT3JVUkwuY19zdHIoKSk7CisgICAgQVNTRVJUKCF0ZXN0VVJMLmlzRW1wdHkoKSk7
CisgICAgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gY29tbWFuZC5zaG91bGREdW1wUGl4ZWxz
OworICAgIGNvbnN0IFN0cmluZyBleHBlY3RlZFBpeGVsSGFzaChjb21tYW5kLmV4cGVjdGVkUGl4
ZWxIYXNoLmNfc3RyKCkpOwogCiAgICAgYnJvd3Nlci0+cmVzZXREZWZhdWx0c1RvQ29uc2lzdGVu
dFZhbHVlcygpOwogICAgIGNyZWF0ZUxheW91dFRlc3RDb250cm9sbGVyKHRlc3RVUkwsIGV4cGVj
dGVkUGl4ZWxIYXNoKTsKQEAgLTM1MSw3ICszMjQsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGREdW1w
RnJhbWVTY3JvbGxQb3NpdGlvbigpCiAKIHN0YXRpYyBib29sIHNob3VsZER1bXBQaXhlbHNBbmRD
b21wYXJlV2l0aEV4cGVjdGVkKCkKIHsKLSAgICByZXR1cm4gZHVtcFBpeGVscyAmJiBnTGF5b3V0
VGVzdENvbnRyb2xsZXItPmdlbmVyYXRlUGl4ZWxSZXN1bHRzKCkgJiYgIWdMYXlvdXRUZXN0Q29u
dHJvbGxlci0+ZHVtcERPTUFzV2ViQXJjaGl2ZSgpICYmICFnTGF5b3V0VGVzdENvbnRyb2xsZXIt
PmR1bXBTb3VyY2VBc1dlYkFyY2hpdmUoKTsKKyAgICByZXR1cm4gZHVtcFBpeGVsc0ZvckN1cnJl
bnRUZXN0ICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+Z2VuZXJhdGVQaXhlbFJlc3VsdHMoKSAm
JiAhZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRE9NQXNXZWJBcmNoaXZlKCkgJiYgIWdMYXlv
dXRUZXN0Q29udHJvbGxlci0+ZHVtcFNvdXJjZUFzV2ViQXJjaGl2ZSgpOwogfQogCiBzdGF0aWMg
Ym9vbCBzaG91bGREdW1wQmFja0ZvcndhcmRMaXN0KCkKQEAgLTQ1OCw3ICs0MzEsNyBAQCBpbnQg
bWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgIHByaW50U2VwYXJhdG9ycyA9IHRy
dWU7CiAgICAgICAgIHJ1blRlc3RpbmdTZXJ2ZXJMb29wKCk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgcHJpbnRTZXBhcmF0b3JzID0gKG9wdGluZCA8IGFyZ2MgLSAxIHx8IChkdW1wUGl4ZWxzICYm
IGR1bXBUcmVlKSk7CisgICAgICAgIHByaW50U2VwYXJhdG9ycyA9IChvcHRpbmQgPCBhcmdjIC0g
MSB8fCAoZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ICYmIGR1bXBUcmVlKSk7CiAgICAgICAgIGZv
ciAoaW50IGkgPSBvcHRpbmQ7IGkgIT0gYXJnYzsgKytpKQogICAgICAgICAgICAgcnVuVGVzdChh
cmd2W2ldKTsKICAgICB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVt
cFJlbmRlclRyZWUuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVl
LmNwcAppbmRleCA1N2NkMDU5MTdlODIyNTU4YjQ4Mzc2ZTAxMDJkODAwYTZiY2ZjY2RhLi5lYmRh
NWNmYjIzMTg5ZmMyYTc5NWM0Yzk4MDVlMGJjYmVhZjVjZjg3IDEwMDY0NAotLS0gYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAKQEAgLTczLDcgKzczLDcgQEAgZXh0ZXJuIGdj
aGFyKiB3ZWJraXRfd2ViX2ZyYW1lX2dldF9yZXNwb25zZV9taW1lX3R5cGUoV2ViS2l0V2ViRnJh
bWUqIGZyYW1lKTsKIAogdm9sYXRpbGUgYm9vbCBkb25lOwogc3RhdGljIGJvb2wgcHJpbnRTZXBh
cmF0b3JzOwotc3RhdGljIGludCBkdW1wUGl4ZWxzOworc3RhdGljIGJvb2wgZHVtcFBpeGVsc0Zv
ckN1cnJlbnRUZXN0Owogc3RhdGljIGludCBkdW1wVHJlZSA9IDE7CiBzdGF0aWMgaW50IHVzZVRp
bWVvdXRXYXRjaGRvZyA9IDE7CiAKQEAgLTU0NCw3ICs1NDQsNiBAQCBzdGF0aWMgdm9pZCBpbml0
aWFsaXplR2xvYmFsc0Zyb21Db21tYW5kTGluZU9wdGlvbnMoaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb
XSkKIHsKICAgICBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKICAgICAgICAgeyJub3RyZWUi
LCBub19hcmd1bWVudCwgJmR1bXBUcmVlLCBmYWxzZX0sCi0gICAgICAgIHsicGl4ZWwtdGVzdHMi
LCBub19hcmd1bWVudCwgJmR1bXBQaXhlbHMsIHRydWV9LAogICAgICAgICB7InRyZWUiLCBub19h
cmd1bWVudCwgJmR1bXBUcmVlLCB0cnVlfSwKICAgICAgICAgeyJuby10aW1lb3V0Iiwgbm9fYXJn
dW1lbnQsICZ1c2VUaW1lb3V0V2F0Y2hkb2csIGZhbHNlfSwKICAgICAgICAge05VTEwsIDAsIE5V
TEwsIDB9CkBAIC02MjQsNyArNjIzLDcgQEAgdm9pZCBkdW1wKCkKICAgICAgICAgfQogICAgIH0K
IAotICAgIGlmIChkdW1wUGl4ZWxzCisgICAgaWYgKGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdAog
ICAgICAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmdlbmVyYXRlUGl4ZWxSZXN1bHRzKCkKICAg
ICAgJiYgIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcERPTUFzV2ViQXJjaGl2ZSgpCiAgICAg
ICYmICFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBTb3VyY2VBc1dlYkFyY2hpdmUoKSkgewpA
QCAtNjg3LDE4ICs2ODYsMTMgQEAgc3RhdGljIHZvaWQgc2VuZFBpeGVsUmVzdWx0c0VPRigpCiAg
ICAgZmZsdXNoKHN0ZGVycik7CiB9CiAKLXN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5n
JiB0ZXN0UGF0aE9yVVJMKQorc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIGlucHV0
TGluZSkKIHsKICAgICBBU1NFUlQoIXRlc3RQYXRoT3JVUkwuZW1wdHkoKSk7CiAKLSAgICAvLyBM
b29rIGZvciAiJyIgYXMgYSBzZXBhcmF0b3IgYmV0d2VlbiB0aGUgcGF0aCBvciBVUkwsIGFuZCB0
aGUgcGl4ZWwgZHVtcCBoYXNoIHRoYXQgZm9sbG93cy4KLSAgICBzdHJpbmcgdGVzdFVSTCh0ZXN0
UGF0aE9yVVJMKTsKLSAgICBzdHJpbmcgZXhwZWN0ZWRQaXhlbEhhc2g7Ci0gICAgc2l6ZV90IHNl
cGFyYXRvclBvcyA9IHRlc3RVUkwuZmluZCgiJyIpOwotICAgIGlmIChzZXBhcmF0b3JQb3MgIT0g
c3RyaW5nOjpucG9zKSB7Ci0gICAgICAgIHRlc3RVUkwgPSBzdHJpbmcodGVzdFBhdGhPclVSTCwg
MCwgc2VwYXJhdG9yUG9zKTsKLSAgICAgICAgZXhwZWN0ZWRQaXhlbEhhc2ggPSBzdHJpbmcodGVz
dFBhdGhPclVSTCwgc2VwYXJhdG9yUG9zICsgMSk7Ci0gICAgfQorICAgIFRlc3RDb21tYW5kIGNv
bW1hbmQgPSBwYXJzZUlucHV0TGluZShpbnB1dExpbmUpOworICAgIHN0cmluZyYgdGVzdFVSTCA9
IGNvbW1hbmQucGF0aE9yVVJMOworICAgIGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCA9IGNvbW1h
bmQuc2hvdWxkRHVtcFBpeGVsczsKIAogICAgIC8vIENvbnZlcnQgdGhlIHBhdGggaW50byBhIGZ1
bGwgZmlsZSBVUkwgaWYgaXQgZG9lcyBub3QgbG9vawogICAgIC8vIGxpa2UgYW4gSFRUUC9TIFVS
TCAoZG9lc24ndCBzdGFydCB3aXRoIGh0dHA6Ly8gb3IgaHR0cHM6Ly8pLgpAQCAtNzEyLDcgKzcw
Niw3IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiB0ZXN0UGF0aE9yVVJMKQog
CiAgICAgcmVzZXREZWZhdWx0c1RvQ29uc2lzdGVudFZhbHVlcygpOwogCi0gICAgZ0xheW91dFRl
c3RDb250cm9sbGVyID0gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNyZWF0ZSh0ZXN0VVJMLCBleHBl
Y3RlZFBpeGVsSGFzaCk7CisgICAgZ0xheW91dFRlc3RDb250cm9sbGVyID0gTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmNyZWF0ZSh0ZXN0VVJMLCBjb21tYW5kLmV4cGVjdGVkUGl4ZWxIYXNoKTsKICAg
ICB0b3BMb2FkaW5nRnJhbWUgPSAwOwogICAgIGRvbmUgPSBmYWxzZTsKIApAQCAtMTQ0Nyw3ICsx
NDQxLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICAgICAgcHJpbnRT
ZXBhcmF0b3JzID0gdHJ1ZTsKICAgICAgICAgcnVuVGVzdGluZ1NlcnZlckxvb3AoKTsKICAgICB9
IGVsc2UgewotICAgICAgICBwcmludFNlcGFyYXRvcnMgPSAob3B0aW5kIDwgYXJnYy0xIHx8IChk
dW1wUGl4ZWxzICYmIGR1bXBUcmVlKSk7CisgICAgICAgIHByaW50U2VwYXJhdG9ycyA9IChvcHRp
bmQgPCBhcmdjLTEgfHwgKGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCAmJiBkdW1wVHJlZSkpOwog
ICAgICAgICBmb3IgKGludCBpID0gb3B0aW5kOyBpICE9IGFyZ2M7ICsraSkKICAgICAgICAgICAg
IHJ1blRlc3QoYXJndltpXSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBS
ZW5kZXJUcmVlLm1tCmluZGV4IGFiYmE1MzVlZGRjODhhMzk0OTAyOTRmZDQ1MWEzOTE5NjhmY2Mz
ZDEuLjNmOWQ0MjY2NDUxZmFjYmUxMTUwOTYyMDM1NTk3OTAzMmJlYmU2ZmIgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQorKysgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KQEAgLTE0MCw3ICsxNDAsNyBAQCBz
dGF0aWMgSGlzdG9yeURlbGVnYXRlICpoaXN0b3J5RGVsZWdhdGU7CiBQb2xpY3lEZWxlZ2F0ZSAq
cG9saWN5RGVsZWdhdGU7CiBTdG9yYWdlVHJhY2tlckRlbGVnYXRlICpzdG9yYWdlRGVsZWdhdGU7
CiAKLXN0YXRpYyBpbnQgZHVtcFBpeGVsczsKK3N0YXRpYyBib29sIGR1bXBQaXhlbHNGb3JDdXJy
ZW50VGVzdDsKIHN0YXRpYyBpbnQgdGhyZWFkZWQ7CiBzdGF0aWMgaW50IGR1bXBUcmVlID0gWUVT
Owogc3RhdGljIGludCB1c2VUaW1lb3V0V2F0Y2hkb2cgPSBZRVM7CkBAIC03ODAsNyArNzgwLDYg
QEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUdsb2JhbHNGcm9tQ29tbWFuZExpbmVPcHRpb25zKGlu
dCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10KIHsKICAgICBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNb
XSA9IHsKICAgICAgICAgeyJub3RyZWUiLCBub19hcmd1bWVudCwgJmR1bXBUcmVlLCBOT30sCi0g
ICAgICAgIHsicGl4ZWwtdGVzdHMiLCBub19hcmd1bWVudCwgJmR1bXBQaXhlbHMsIFlFU30sCiAg
ICAgICAgIHsidHJlZSIsIG5vX2FyZ3VtZW50LCAmZHVtcFRyZWUsIFlFU30sCiAgICAgICAgIHsi
dGhyZWFkZWQiLCBub19hcmd1bWVudCwgJnRocmVhZGVkLCBZRVN9LAogICAgICAgICB7ImNvbXBs
ZXgtdGV4dCIsIG5vX2FyZ3VtZW50LCAmZm9yY2VDb21wbGV4VGV4dCwgWUVTfSwKQEAgLTg0OSw3
ICs4NDgsNyBAQCB2b2lkIGR1bXBSZW5kZXJUcmVlKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2
W10pCiAgICAgaW5pdGlhbGl6ZUdsb2JhbHNGcm9tQ29tbWFuZExpbmVPcHRpb25zKGFyZ2MsIGFy
Z3YpOwogICAgIHByZXBhcmVDb25zaXN0ZW50VGVzdGluZ0Vudmlyb25tZW50KCk7CiAgICAgYWRk
VGVzdFBsdWdpbnNUb1BsdWdpblNlYXJjaFBhdGgoYXJndlswXSk7Ci0gICAgaWYgKGR1bXBQaXhl
bHMpCisgICAgaWYgKGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCkKICAgICAgICAgaW5zdGFsbFNp
Z25hbEhhbmRsZXJzKCk7CiAKICAgICBpZiAoZm9yY2VDb21wbGV4VGV4dCkKQEAgLTg3NCw3ICs4
NzMsNyBAQCB2b2lkIGR1bXBSZW5kZXJUcmVlKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10p
CiAgICAgICAgIHByaW50U2VwYXJhdG9ycyA9IFlFUzsKICAgICAgICAgcnVuVGVzdGluZ1NlcnZl
ckxvb3AoKTsKICAgICB9IGVsc2UgewotICAgICAgICBwcmludFNlcGFyYXRvcnMgPSAob3B0aW5k
IDwgYXJnYy0xIHx8IChkdW1wUGl4ZWxzICYmIGR1bXBUcmVlKSk7CisgICAgICAgIHByaW50U2Vw
YXJhdG9ycyA9IChvcHRpbmQgPCBhcmdjIC0gMSB8fCAoZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0
ICYmIGR1bXBUcmVlKSk7CiAgICAgICAgIGZvciAoaW50IGkgPSBvcHRpbmQ7IGkgIT0gYXJnYzsg
KytpKQogICAgICAgICAgICAgcnVuVGVzdChhcmd2W2ldKTsKICAgICB9CkBAIC0xMTk1LDcgKzEx
OTQsNyBAQCB2b2lkIGR1bXAoKQogICAgICAgICB9ICAgICAgICAgICAgCiAgICAgfQogCi0gICAg
aWYgKGR1bXBQaXhlbHMgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5nZW5lcmF0ZVBpeGVsUmVz
dWx0cygpKQorICAgIGlmIChkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgJiYgZ0xheW91dFRlc3RD
b250cm9sbGVyLT5nZW5lcmF0ZVBpeGVsUmVzdWx0cygpKQogICAgICAgICAvLyBGSVhNRTogd2hl
biBpc1ByaW50aW5nIGlzIHNldCwgZHVtcCB0aGUgaW1hZ2Ugd2l0aCBwYWdlIHNlcGFyYXRvcnMu
CiAgICAgICAgIGR1bXBXZWJWaWV3QXNQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKGdMYXlv
dXRUZXN0Q29udHJvbGxlci0+ZXhwZWN0ZWRQaXhlbEhhc2goKSk7CiAKQEAgLTEyNzYsMTkgKzEy
NzUsMTMgQEAgc3RhdGljIHZvaWQgcmVzZXRXZWJWaWV3VG9Db25zaXN0ZW50U3RhdGVCZWZvcmVU
ZXN0aW5nKCkKICAgICBbbWFpbkZyYW1lIF9jbGVhck9wZW5lcl07CiB9CiAKLXN0YXRpYyB2b2lk
IHJ1blRlc3QoY29uc3Qgc3RyaW5nJiB0ZXN0UGF0aE9yVVJMKQorc3RhdGljIHZvaWQgcnVuVGVz
dChjb25zdCBzdHJpbmcmIGlucHV0TGluZSkKIHsKLSAgICBBU1NFUlQoIXRlc3RQYXRoT3JVUkwu
ZW1wdHkoKSk7Ci0gICAgCi0gICAgLy8gTG9vayBmb3IgIiciIGFzIGEgc2VwYXJhdG9yIGJldHdl
ZW4gdGhlIHBhdGggb3IgVVJMLCBhbmQgdGhlIHBpeGVsIGR1bXAgaGFzaCB0aGF0IGZvbGxvd3Mu
Ci0gICAgc3RyaW5nIHBhdGhPclVSTCh0ZXN0UGF0aE9yVVJMKTsKLSAgICBzdHJpbmcgZXhwZWN0
ZWRQaXhlbEhhc2g7Ci0gICAgCi0gICAgc2l6ZV90IHNlcGFyYXRvclBvcyA9IHBhdGhPclVSTC5m
aW5kKCInIik7Ci0gICAgaWYgKHNlcGFyYXRvclBvcyAhPSBzdHJpbmc6Om5wb3MpIHsKLSAgICAg
ICAgcGF0aE9yVVJMID0gc3RyaW5nKHRlc3RQYXRoT3JVUkwsIDAsIHNlcGFyYXRvclBvcyk7Ci0g
ICAgICAgIGV4cGVjdGVkUGl4ZWxIYXNoID0gc3RyaW5nKHRlc3RQYXRoT3JVUkwsIHNlcGFyYXRv
clBvcyArIDEpOwotICAgIH0KKyAgICBBU1NFUlQoIWlucHV0TGluZS5lbXB0eSgpKTsKKworICAg
IFRlc3RDb21tYW5kIGNvbW1hbmQgPSBwYXJzZUlucHV0TGluZShpbnB1dExpbmUpOworICAgIGNv
bnN0IHN0cmluZyYgcGF0aE9yVVJMID0gY29tbWFuZC5wYXRoT3JVUkw7CisgICAgZHVtcFBpeGVs
c0ZvckN1cnJlbnRUZXN0ID0gY29tbWFuZC5zaG91bGREdW1wUGl4ZWxzOwogCiAgICAgTlNTdHJp
bmcgKnBhdGhPclVSTFN0cmluZyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpwYXRo
T3JVUkwuY19zdHIoKV07CiAgICAgaWYgKCFwYXRoT3JVUkxTdHJpbmcpIHsKQEAgLTEzMTAsNyAr
MTMwMyw3IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiB0ZXN0UGF0aE9yVVJM
KQogICAgIAogICAgIHJlc2V0V2ViVmlld1RvQ29uc2lzdGVudFN0YXRlQmVmb3JlVGVzdGluZygp
OwogCi0gICAgZ0xheW91dFRlc3RDb250cm9sbGVyID0gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNy
ZWF0ZSh0ZXN0VVJMLCBleHBlY3RlZFBpeGVsSGFzaCk7CisgICAgZ0xheW91dFRlc3RDb250cm9s
bGVyID0gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNyZWF0ZSh0ZXN0VVJMLCBjb21tYW5kLmV4cGVj
dGVkUGl4ZWxIYXNoKTsKICAgICB0b3BMb2FkaW5nRnJhbWUgPSBuaWw7CiAgICAgQVNTRVJUKCFk
cmFnZ2luZ0luZm8pOyAvLyB0aGUgcHJldmlvdXMgdGVzdCBzaG91bGQgaGF2ZSBjYWxsZWQgZXZl
bnRTZW5kZXIubW91c2VVcCB0byBkcm9wIQogICAgIHJlbGVhc2VBbmRaZXJvKCZkcmFnZ2luZ0lu
Zm8pOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUu
cHJvIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvCmluZGV4IGY0
N2ZiNDM0NGI5ZWY4M2E1YWE0NmJiNTY4M2Q5MjMxNDk0YWExMjUuLjgzMzg3MGJjYWM5YTgyZWRj
ZWU4MWVkNWRiYTMxOTEwYWNmMGYwZjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L3F0L0R1bXBSZW5kZXJUcmVlLnBybworKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1w
UmVuZGVyVHJlZS5wcm8KQEAgLTI1LDYgKzI1LDcgQEAgY29udGFpbnMoREVGSU5FUywgSEFWRV9G
T05UQ09ORklHPTEpOiBQS0dDT05GSUcgKz0gZm9udGNvbmZpZwogCiBIRUFERVJTICs9IFwKICAg
ICAkJFBXRC8uLi9Xb3JrUXVldWUuaCBcCisgICAgJCRQV0QvLi4vRHVtcFJlbmRlclRyZWUuaCBc
CiAgICAgRHVtcFJlbmRlclRyZWVRdC5oIFwKICAgICBFdmVudFNlbmRlclF0LmggXAogICAgIFRl
eHRJbnB1dENvbnRyb2xsZXJRdC5oIFwKQEAgLTM2LDYgKzM3LDcgQEAgSEVBREVSUyArPSBcCiAK
IFNPVVJDRVMgKz0gXAogICAgICQkUFdELy4uL1dvcmtRdWV1ZS5jcHAgXAorICAgICQkUFdELy4u
L0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcCBcCiAgICAgRHVtcFJlbmRlclRyZWVRdC5jcHAgXAog
ICAgIEV2ZW50U2VuZGVyUXQuY3BwIFwKICAgICBUZXh0SW5wdXRDb250cm9sbGVyUXQuY3BwIFwK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3Bw
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAKaW5kZXggMGVj
ZjYyMmYzZjhkZGE1NmM0Yzg4Y2VmY2YwOGEzYzk4Y2YyMzdjNC4uNWE1Y2I5NmFkZWM5M2NkMGVi
Njg1MDBlNzZlYzMxZWZkZGEwOTdhZiAxMDA3NTUKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
cXQvRHVtcFJlbmRlclRyZWVRdC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVt
cFJlbmRlclRyZWVRdC5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKIAogI2luY2x1ZGUgIkR1bXBSZW5k
ZXJUcmVlUXQuaCIKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oIgpAQCAtNjkw
LDQ0ICs2OTEsMjcgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZTo6bG9hZE5leHRUZXN0SW5TdGFuZEFs
b25lTW9kZSgpCiAKIHZvaWQgRHVtcFJlbmRlclRyZWU6OnByb2Nlc3NMaW5lKGNvbnN0IFFTdHJp
bmcgJmlucHV0KQogewotICAgIFFTdHJpbmcgbGluZSA9IGlucHV0OwotCi0gICAgbV9kdW1wUGl4
ZWxzRm9yQ3VycmVudFRlc3QgPSBmYWxzZTsKLSAgICBtX2V4cGVjdGVkSGFzaCA9IFFTdHJpbmco
KTsKLSAgICAvLyBzaW5nbGUgcXVvdGUgbWFya3MgdGhlIHBpeGVsIGR1bXAgaGFzaAotICAgIGlu
dCBpbmRleE9mRmlyc3RTZXBhcmF0b3IgPSBsaW5lLmluZGV4T2YoJ1wnJyk7Ci0gICAgaW50IGlu
ZGV4T2ZTZWNvbmRTZXBhcmF0b3IgPSBsaW5lLmluZGV4T2YoJ1wnJywgaW5kZXhPZkZpcnN0U2Vw
YXJhdG9yICsgMSk7Ci0gICAgaWYgKGluZGV4T2ZGaXJzdFNlcGFyYXRvciA+IC0xKSB7Ci0gICAg
ICAgIGludCBpbmRleE9mUGl4ZWxIYXNoID0gaW5kZXhPZkZpcnN0U2VwYXJhdG9yICsgMTsKLQot
ICAgICAgICAvLyBOUldUIHBhc3NlcyAtLXBpeGVsLXRlc3QgaWYgd2Ugc2hvdWxkIGR1bXAgcGl4
ZWxzIGZvciB0aGUgdGVzdC4KLSAgICAgICAgY29uc3QgUVN0cmluZyBleHBlY3RlZEFyZyhRTGF0
aW4xU3RyaW5nKCItLXBpeGVsLXRlc3QiKSk7Ci0gICAgICAgIFFTdHJpbmcgYXJnVGVzdCA9IGxp
bmUubWlkKGluZGV4T2ZGaXJzdFNlcGFyYXRvciArIDEsIGV4cGVjdGVkQXJnLmxlbmd0aCgpKTsK
LSAgICAgICAgaWYgKGFyZ1Rlc3QgPT0gZXhwZWN0ZWRBcmcpIHsKLSAgICAgICAgICAgIG1fZHVt
cFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gdHJ1ZTsKLSAgICAgICAgICAgIGluZGV4T2ZQaXhlbEhh
c2ggPSBpbmRleE9mU2Vjb25kU2VwYXJhdG9yID09IC0xID8gLTEgOiBpbmRleE9mU2Vjb25kU2Vw
YXJhdG9yICsgMTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5kZXhPZlBpeGVsSGFzaCAhPSAt
MSAmJiBpbmRleE9mUGl4ZWxIYXNoIDwgbGluZS5zaXplKCkpCi0gICAgICAgICAgICBtX2V4cGVj
dGVkSGFzaCA9IGxpbmUubWlkKGluZGV4T2ZQaXhlbEhhc2gpOwotICAgICAgICBsaW5lLnJlbW92
ZShpbmRleE9mRmlyc3RTZXBhcmF0b3IsIGxpbmUubGVuZ3RoKCkpOwotICAgIH0KLQotICAgIGlm
IChsaW5lLnN0YXJ0c1dpdGgoUUxhdGluMVN0cmluZygiaHR0cDoiKSkKLSAgICAgICAgICAgIHx8
IGxpbmUuc3RhcnRzV2l0aChRTGF0aW4xU3RyaW5nKCJodHRwczoiKSkKLSAgICAgICAgICAgIHx8
IGxpbmUuc3RhcnRzV2l0aChRTGF0aW4xU3RyaW5nKCJmaWxlOiIpKQotICAgICAgICAgICAgfHwg
bGluZSA9PSBRTGF0aW4xU3RyaW5nKCJhYm91dDpibGFuayIpKSB7Ci0gICAgICAgIG9wZW4oUVVy
bChsaW5lKSk7CisgICAgVGVzdENvbW1hbmQgY29tbWFuZCA9IHBhcnNlSW5wdXRMaW5lKHN0ZDo6
c3RyaW5nKGlucHV0LnRvTGF0aW4xKCkuY29uc3REYXRhKCkpKTsKKyAgICBRU3RyaW5nIHBhdGhP
clVSTCA9IFFMYXRpbjFTdHJpbmcoY29tbWFuZC5wYXRoT3JVUkwuY19zdHIoKSk7CisgICAgbV9k
dW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgPSBjb21tYW5kLnNob3VsZER1bXBQaXhlbHM7CisgICAg
bV9leHBlY3RlZEhhc2ggPSBRTGF0aW4xU3RyaW5nKGNvbW1hbmQuZXhwZWN0ZWRQaXhlbEhhc2gu
Y19zdHIoKSk7CisKKyAgICBpZiAocGF0aE9yVVJMLnN0YXJ0c1dpdGgoUUxhdGluMVN0cmluZygi
aHR0cDoiKSkKKyAgICAgICAgICAgIHx8IHBhdGhPclVSTC5zdGFydHNXaXRoKFFMYXRpbjFTdHJp
bmcoImh0dHBzOiIpKQorICAgICAgICAgICAgfHwgcGF0aE9yVVJMLnN0YXJ0c1dpdGgoUUxhdGlu
MVN0cmluZygiZmlsZToiKSkKKyAgICAgICAgICAgIHx8IHBhdGhPclVSTCA9PSBRTGF0aW4xU3Ry
aW5nKCJhYm91dDpibGFuayIpKSB7CisgICAgICAgIG9wZW4oUVVybChwYXRoT3JVUkwpKTsKICAg
ICB9IGVsc2UgewotICAgICAgICBRRmlsZUluZm8gZmkobGluZSk7CisgICAgICAgIFFGaWxlSW5m
byBmaShwYXRoT3JVUkwpOwogCiAgICAgICAgIGlmICghZmkuZXhpc3RzKCkpIHsKICAgICAgICAg
ICAgIFFEaXIgY3VycmVudERpciA9IFFEaXI6OmN1cnJlbnRQYXRoKCk7CiAKICAgICAgICAgICAg
IC8vIFRyeSB0byBiZSBzbWFydCBhYm91dCB3aGVyZSB0aGUgdGVzdCBpcyBsb2NhdGVkCiAgICAg
ICAgICAgICBpZiAoY3VycmVudERpci5kaXJOYW1lKCkgPT0gUUxhdGluMVN0cmluZygiTGF5b3V0
VGVzdHMiKSkKLSAgICAgICAgICAgICAgICBmaSA9IFFGaWxlSW5mbyhjdXJyZW50RGlyLCBsaW5l
LnJlcGxhY2UoUVJlZ0V4cCgiLio/TGF5b3V0VGVzdHMvKC4qKSIpLCAiXFwxIikpOwotICAgICAg
ICAgICAgZWxzZSBpZiAoIWxpbmUuY29udGFpbnMoUUxhdGluMVN0cmluZygiTGF5b3V0VGVzdHMi
KSkpCi0gICAgICAgICAgICAgICAgZmkgPSBRRmlsZUluZm8oY3VycmVudERpciwgbGluZS5wcmVw
ZW5kKFFMYXRpbjFTdHJpbmcoIkxheW91dFRlc3RzLyIpKSk7CisgICAgICAgICAgICAgICAgZmkg
PSBRRmlsZUluZm8oY3VycmVudERpciwgcGF0aE9yVVJMLnJlcGxhY2UoUVJlZ0V4cCgiLio/TGF5
b3V0VGVzdHMvKC4qKSIpLCAiXFwxIikpOworICAgICAgICAgICAgZWxzZSBpZiAoIXBhdGhPclVS
TC5jb250YWlucyhRTGF0aW4xU3RyaW5nKCJMYXlvdXRUZXN0cyIpKSkKKyAgICAgICAgICAgICAg
ICBmaSA9IFFGaWxlSW5mbyhjdXJyZW50RGlyLCBwYXRoT3JVUkwucHJlcGVuZChRTGF0aW4xU3Ry
aW5nKCJMYXlvdXRUZXN0cy8iKSkpOwogCiAgICAgICAgICAgICBpZiAoIWZpLmV4aXN0cygpKSB7
CiAgICAgICAgICAgICAgICAgZW1pdCByZWFkeSgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dp
bi9EdW1wUmVuZGVyVHJlZS5jcHAKaW5kZXggZjQwMmEwMmNhMzYyYzUyNzlkZTVhNWM4YzFlMGNl
OWRmMzYyYWJhZC4uMzEyNDMwZDU2OTg5NTQ4YmMzZWNhZDEzZjhkZjE4MzA5NmMxN2M4NSAxMDA2
NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAorKysg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwCkBAIC04MCw3ICs4
MCw3IEBAIHN0YXRpYyBMUENXU1RSIGZvbnRzRW52aXJvbm1lbnRWYXJpYWJsZSA9IEwiV0VCS0lU
X1RFU1RGT05UUyI7CiBjb25zdCBMUENXU1RSIGtEdW1wUmVuZGVyVHJlZUNsYXNzTmFtZSA9IEwi
RHVtcFJlbmRlclRyZWVXaW5kb3ciOwogCiBzdGF0aWMgYm9vbCBkdW1wVHJlZSA9IHRydWU7Ci1z
dGF0aWMgYm9vbCBkdW1wUGl4ZWxzOworc3RhdGljIGJvb2wgZHVtcFBpeGVsc0ZvckN1cnJlbnRU
ZXN0Owogc3RhdGljIGJvb2wgZHVtcEFsbFBpeGVsczsKIHN0YXRpYyBib29sIHByaW50U2VwYXJh
dG9yczsKIHN0YXRpYyBib29sIGxlYWtDaGVja2luZyA9IGZhbHNlOwpAQCAtNzU5LDcgKzc1OSw3
IEBAIHZvaWQgZHVtcCgpCiAgICAgICAgIGZmbHVzaChzdGRlcnIpOwogICAgIH0KIAotICAgIGlm
IChkdW1wUGl4ZWxzCisgICAgaWYgKGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdAogICAgICAmJiBn
TGF5b3V0VGVzdENvbnRyb2xsZXItPmdlbmVyYXRlUGl4ZWxSZXN1bHRzKCkKICAgICAgJiYgIWdM
YXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcERPTUFzV2ViQXJjaGl2ZSgpCiAgICAgICYmICFnTGF5
b3V0VGVzdENvbnRyb2xsZXItPmR1bXBTb3VyY2VBc1dlYkFyY2hpdmUoKSkKQEAgLTk0OCwyMCAr
OTQ4LDE0IEBAIHN0YXRpYyB2b2lkIHNpemVXZWJWaWV3Rm9yQ3VycmVudFRlc3QoKQogICAgIDo6
U2V0V2luZG93UG9zKHdlYlZpZXdXaW5kb3csIDAsIDAsIDAsIHdpZHRoLCBoZWlnaHQsIFNXUF9O
T01PVkUpOwogfQogCi1zdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYgdGVzdFBhdGhP
clVSTCkKK3N0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBpbnB1dExpbmUpCiB7Cisg
ICAgVGVzdENvbW1hbmQgY29tbWFuZCA9IHBhcnNlSW5wdXRMaW5lKGlucHV0TGluZSk7CisgICAg
Y29uc3Qgc3RyaW5nJiBwYXRoT3JVUkwgPSBjb21tYW5kLnBhdGhPclVSTDsKKyAgICBkdW1wUGl4
ZWxzRm9yQ3VycmVudFRlc3QgPSBjb21tYW5kLnNob3VsZER1bXBQaXhlbHM7CisKICAgICBzdGF0
aWMgQlNUUiBtZXRob2RCU3RyID0gU3lzQWxsb2NTdHJpbmcoVEVYVCgiR0VUIikpOwogCi0gICAg
Ly8gTG9vayBmb3IgIiciIGFzIGEgc2VwYXJhdG9yIGJldHdlZW4gdGhlIHBhdGggb3IgVVJMLCBh
bmQgdGhlIHBpeGVsIGR1bXAgaGFzaCB0aGF0IGZvbGxvd3MuCi0gICAgc3RyaW5nIHBhdGhPclVS
TCh0ZXN0UGF0aE9yVVJMKTsKLSAgICBzdHJpbmcgZXhwZWN0ZWRQaXhlbEhhc2g7Ci0gICAgCi0g
ICAgc2l6ZV90IHNlcGFyYXRvclBvcyA9IHBhdGhPclVSTC5maW5kKCInIik7Ci0gICAgaWYgKHNl
cGFyYXRvclBvcyAhPSBzdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgcGF0aE9yVVJMID0gc3RyaW5n
KHRlc3RQYXRoT3JVUkwsIDAsIHNlcGFyYXRvclBvcyk7Ci0gICAgICAgIGV4cGVjdGVkUGl4ZWxI
YXNoID0gc3RyaW5nKHRlc3RQYXRoT3JVUkwsIHNlcGFyYXRvclBvcyArIDEpOwotICAgIH0KLSAg
ICAKICAgICBCU1RSIHVybEJTdHI7CiAgCiAgICAgQ0ZTdHJpbmdSZWYgc3RyID0gQ0ZTdHJpbmdD
cmVhdGVXaXRoQ1N0cmluZygwLCBwYXRoT3JVUkwuY19zdHIoKSwga0NGU3RyaW5nRW5jb2RpbmdX
aW5kb3dzTGF0aW4xKTsKQEAgLTk4Myw3ICs5NzcsNyBAQCBzdGF0aWMgdm9pZCBydW5UZXN0KGNv
bnN0IHN0cmluZyYgdGVzdFBhdGhPclVSTCkKIAogICAgIENGUmVsZWFzZSh1cmwpOwogCi0gICAg
OjpnTGF5b3V0VGVzdENvbnRyb2xsZXIgPSBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y3JlYXRlKHBh
dGhPclVSTCwgZXhwZWN0ZWRQaXhlbEhhc2gpOworICAgIDo6Z0xheW91dFRlc3RDb250cm9sbGVy
ID0gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNyZWF0ZShwYXRoT3JVUkwsIGNvbW1hbmQuZXhwZWN0
ZWRQaXhlbEhhc2gpOwogICAgIGRvbmUgPSBmYWxzZTsKICAgICB0b3BMb2FkaW5nRnJhbWUgPSAw
OwogCkBAIC0xMzM3LDExICsxMzMxLDYgQEAgZXh0ZXJuICJDIiBfX2RlY2xzcGVjKGRsbGV4cG9y
dCkgaW50IFdJTkFQSSBkbGxMYXVuY2hlckVudHJ5UG9pbnQoaW50IGFyZ2MsIGNvbnMKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFzdHJpY21wKGFyZ3Zb
aV0sICItLXBpeGVsLXRlc3RzIikpIHsKLSAgICAgICAgICAgIGR1bXBQaXhlbHMgPSB0cnVlOwot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQogICAgICAgICBpZiAoIXN0cmljbXAo
YXJndltpXSwgIi0tY29tcGxleC10ZXh0IikpIHsKICAgICAgICAgICAgIGZvcmNlQ29tcGxleFRl
eHQgPSB0cnVlOwogICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUudmNwcm9qIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvd2luL0R1bXBSZW5kZXJUcmVlLnZjcHJvagppbmRleCA0ODQzYzM5MGU3YzZiNTJlMjRlMmIz
NzcwNjU0NzhkMDc2YzA5N2ZhLi43ZTI0MmExY2RlNGEyZmNjYzFhMjQ3MWI2MTY5YjNlMzNlYWRj
ZGNkIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUu
dmNwcm9qCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS52Y3By
b2oKQEAgLTU2Myw2ICs1NjMsMTAgQEAKIAkJCT4KIAkJPC9GaWxlPgogCQk8RmlsZQorCQkJUmVs
YXRpdmVQYXRoPSIuLlxEdW1wUmVuZGVyVHJlZUNvbW1vbi5jcHAiCisJCQk+CisJCTwvRmlsZT4K
KwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cRHVtcFJlbmRlclRyZWVQcmVmaXguaCIKIAkJ
CT4KIAkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd3NjcmlwdCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dzY3JpcHQKaW5kZXggNjQ1YzdkNjQxNTk4YWZlMmYxNGUx
NjNhZDRjY2VmMjdjNTI4Yjc2NC4uYjMyOTI5NDUwYjI4YWE4ODkyYzMzZTNiZTBkOTZmMGU2ZTEx
MzQxOCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd3NjcmlwdAorKysgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS93c2NyaXB0CkBAIC00MCw2ICs0MCw3IEBAIGluY2x1ZGVfcGF0aHMg
PSBbCiAgICAgICAgICAgICAgICAgJ3d4JwogICAgICAgICAgICAgICAgIF0KIHNvdXJjZXMgPSBb
CisgICAgICAgICAgICAnRHVtcFJlbmRlclRyZWVDb21tb24uY3BwJywKICAgICAgICAgICAgICdM
YXlvdXRUZXN0Q29udHJvbGxlci5jcHAnLAogICAgICAgICAgICAgJ1dvcmtRdWV1ZS5jcHAnLAog
ICAgICAgICAgICAgJ3d4L0R1bXBSZW5kZXJUcmVlV3guY3BwJywKZGlmZiAtLWdpdCBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL3d4L0R1bXBSZW5kZXJUcmVlV3guY3BwIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvd3gvRHVtcFJlbmRlclRyZWVXeC5jcHAKaW5kZXggMzFhZGQxMWEyZWI3NGQxZjRkODMy
OTQ3OWY0MTlmMTA3ZmZiYTg4Zi4uNDViODUyZDg4YWI5YmRhMjkxZmIxZWQyNzdhY2E3NTFkZmQz
NTA5NyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvRHVtcFJlbmRlclRyZWVX
eC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvRHVtcFJlbmRlclRyZWVXeC5jcHAK
QEAgLTUwLDcgKzUwLDcgQEAKIHZvbGF0aWxlIGJvb2wgZG9uZSA9IHRydWU7CiB2b2xhdGlsZSBi
b29sIG5vdGlmaWVkID0gZmFsc2U7CiBzdGF0aWMgYm9vbCBwcmludFNlcGFyYXRvcnMgPSB0cnVl
Owotc3RhdGljIGludCBkdW1wUGl4ZWxzOworc3RhdGljIGludCBkdW1wUGl4ZWxzRm9yQ3VycmVu
dFRlc3Q7CiBzdGF0aWMgaW50IGR1bXBUcmVlID0gMTsKIHRpbWVfdCBzdGFydFRpbWU7IC8vIHRv
IGRldGVjdCB0aW1lb3V0cyAvIGZhaWxlZCB0ZXN0cwogCkBAIC0yMDMsNyArMjAzLDcgQEAgdm9p
ZCBkdW1wKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChkdW1wUGl4ZWxzCisgICAgaWYg
KGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdAogICAgICAgICAmJiBnTGF5b3V0VGVzdENvbnRyb2xs
ZXItPmdlbmVyYXRlUGl4ZWxSZXN1bHRzKCkKICAgICAgICAgJiYgIWdMYXlvdXRUZXN0Q29udHJv
bGxlci0+ZHVtcERPTUFzV2ViQXJjaGl2ZSgpCiAgICAgICAgICYmICFnTGF5b3V0VGVzdENvbnRy
b2xsZXItPmR1bXBTb3VyY2VBc1dlYkFyY2hpdmUoKSkgewpAQCAtMjE4LDI2ICsyMTgsMjEgQEAg
dm9pZCBkdW1wKCkKICAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXIuY2xlYXIoKTsKIH0KIAotc3Rh
dGljIHZvaWQgcnVuVGVzdChjb25zdCB3eFN0cmluZyB0ZXN0UGF0aE9yVVJMKQorc3RhdGljIHZv
aWQgcnVuVGVzdChjb25zdCB3eFN0cmluZyBpbnB1dExpbmUpCiB7CiAgICAgZG9uZSA9IGZhbHNl
OwogICAgIHRpbWUoJnN0YXJ0VGltZSk7Ci0gICAgc3RyaW5nIHBhdGhPclVSTFN0cmluZyh0ZXN0
UGF0aE9yVVJMLmNoYXJfc3RyKCkpOwotICAgIHN0cmluZyBwYXRoT3JVUkwocGF0aE9yVVJMU3Ry
aW5nKTsKLSAgICBzdHJpbmcgZXhwZWN0ZWRQaXhlbEhhc2g7Ci0KLSAgICBzaXplX3Qgc2VwYXJh
dG9yUG9zID0gcGF0aE9yVVJMLmZpbmQoIiciKTsKLSAgICBpZiAoc2VwYXJhdG9yUG9zICE9IHN0
cmluZzo6bnBvcykgewotICAgICAgICBwYXRoT3JVUkwgPSBzdHJpbmcocGF0aE9yVVJMU3RyaW5n
LCAwLCBzZXBhcmF0b3JQb3MpOwotICAgICAgICBleHBlY3RlZFBpeGVsSGFzaCA9IHN0cmluZyhw
YXRoT3JVUkxTdHJpbmcsIHNlcGFyYXRvclBvcyArIDEpOwotICAgIH0KKworICAgIFRlc3RDb21t
YW5kIGNvbW1hbmQgPSBwYXJzZUlucHV0TGluZShzdGQ6OnN0cmluZyhpbnB1dExpbmUuVG9Bc2Np
aSgpKSk7CisgICAgc3RyaW5nJiBwYXRoT3JVUkwgPSBjb21tYW5kLnBhdGhPclVSTDsKKyAgICBk
dW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgPSBjb21tYW5kLnNob3VsZER1bXBQaXhlbHM7CiAgICAg
CiAgICAgLy8gQ1VSTCBpc24ndCBoYXBweSBpZiB3ZSBkb24ndCBoYXZlIGEgcHJvdG9jb2wuCiAg
ICAgc2l6ZV90IGh0dHAgPSBwYXRoT3JVUkwuZmluZCgiaHR0cDovLyIpOwogICAgIGlmIChodHRw
ID09IHN0cmluZzo6bnBvcykKICAgICAgICAgcGF0aE9yVVJMLmluc2VydCgwLCAiZmlsZTovLyIp
OwogICAgIAotICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlciA9IExheW91dFRlc3RDb250cm9sbGVy
OjpjcmVhdGUocGF0aE9yVVJMLCBleHBlY3RlZFBpeGVsSGFzaCk7CisgICAgZ0xheW91dFRlc3RD
b250cm9sbGVyID0gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNyZWF0ZShwYXRoT3JVUkwsIGNvbW1h
bmQuZXhwZWN0ZWRQaXhlbEhhc2gpOwogICAgIGlmICghZ0xheW91dFRlc3RDb250cm9sbGVyKSB7
CiAgICAgICAgIHd4VGhlQXBwLT5FeGl0TWFpbkxvb3AoKTsKICAgICB9CkBAIC0yODIsMTEgKzI3
Nyw2IEBAIGJvb2wgTXlBcHA6Ok9uSW5pdCgpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKCFvcHRpb24uQ21wTm9DYXNlKF9UKCItLXBpeGVs
LXRlc3RzIikpKSB7Ci0gICAgICAgICAgICBkdW1wUGl4ZWxzID0gdHJ1ZTsKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICBpZiAoIW9wdGlvbi5DbXBO
b0Nhc2UoX1QoIi0tdHJlZSIpKSkgewogICAgICAgICAgICAgZHVtcFRyZWUgPSB0cnVlOwogICAg
ICAgICAgICAgY29udGludWU7CkBAIC0zMjMsNyArMzEzLDcgQEAgYm9vbCBNeUFwcDo6T25Jbml0
KCkKICAgICAgICAgfQogICAgIAogICAgIH0gZWxzZSB7Ci0gICAgICAgIHByaW50U2VwYXJhdG9y
cyA9IChvcHRpbmQgPCBhcmdjLTEgfHwgKGR1bXBQaXhlbHMgJiYgZHVtcFRyZWUpKTsKKyAgICAg
ICAgcHJpbnRTZXBhcmF0b3JzID0gKG9wdGluZCA8IGFyZ2MgLSAxIHx8IChkdW1wUGl4ZWxzRm9y
Q3VycmVudFRlc3QgJiYgZHVtcFRyZWUpKTsKICAgICAgICAgZm9yIChpbnQgaSA9IG9wdGluZDsg
aSAhPSBhcmdjOyArK2kpIHsKICAgICAgICAgICAgIHJ1blRlc3Qod3hUaGVBcHAtPmFyZ3ZbMV0p
OwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Ub29scy9HTlVtYWtlZmlsZS5hbSBiL1Rvb2xzL0dO
VW1ha2VmaWxlLmFtCmluZGV4IGRmOWE3MWYxOGY5NTgwN2VmNGZkNmY3ZDdjMjdkMzExZmEzMjFh
YzIuLmY4NWE5ZDEyZWI3NDU0MjMxNTIyNTExMDYyZWUyN2Y1YTQwODlkNDIgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0dOVW1ha2VmaWxlLmFtCisrKyBiL1Rvb2xzL0dOVW1ha2VmaWxlLmFtCkBAIC0xMDYs
NiArMTA2LDcgQEAgZW5kaWYKIAogUHJvZ3JhbXNfRHVtcFJlbmRlclRyZWVfU09VUkNFUyA9IFwK
IAlUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5oIFwKKwlUb29scy9EdW1wUmVu
ZGVyVHJlZS9EdW1wUmVuZGVyVHJlZUNvbW1vbi5jcHAgXAogCVRvb2xzL0R1bXBSZW5kZXJUcmVl
L0R1bXBSZW5kZXJUcmVlUHJlZml4LmggXAogCVRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmNwcCBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIuaCBcCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL29sZC1ydW4td2Via2l0
LXRlc3RzIGIvVG9vbHMvU2NyaXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0cwppbmRleCAwOTQ0M2M4
N2MwMmYxZThjZjViZGU2ZDFiMDQ1YzRkYjliYWIwODgyLi5mMDkxYzE5YmFhYjczZmU1ZWY0MmM1
MTZiYWNjMTQ1MTM2ZjJkYzIwIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL29sZC1ydW4td2Vi
a2l0LXRlc3RzCisrKyBiL1Rvb2xzL1NjcmlwdHMvb2xkLXJ1bi13ZWJraXQtdGVzdHMKQEAgLTc0
OCwxMiArNzQ4LDE2IEBAIGZvciBteSAkdGVzdCAoQHRlc3RzKSB7CiAgICAgcHJpbnQgJHRlc3Rz
X3J1bl9maCAiJHRlc3RcbiI7CiAKICAgICAjIFRyeSB0byByZWFkIGV4cGVjdGVkIGhhc2ggZmls
ZSBmb3IgcGl4ZWwgdGVzdHMKLSAgICBteSAkc3VmZml4RXhwZWN0ZWRIYXNoID0gIiI7Ci0gICAg
aWYgKCRwaXhlbFRlc3RzICYmICEkcmVzZXRSZXN1bHRzKSB7Ci0gICAgICAgIG15ICRleHBlY3Rl
ZFBpeGVsRGlyID0gZXhwZWN0ZWREaXJlY3RvcnlGb3JUZXN0KCRiYXNlLCAwLCAicG5nIik7Ci0g
ICAgICAgIGlmIChteSAkZXhwZWN0ZWRIYXNoID0gcmVhZENoZWNrc3VtRnJvbVBuZyhGaWxlOjpT
cGVjLT5jYXRmaWxlKCRleHBlY3RlZFBpeGVsRGlyLCAiJGJhc2UtJGV4cGVjdGVkVGFnLnBuZyIp
KSkgewotICAgICAgICAgICAgIyBGb3JtYXQgZXhwZWN0ZWQgaGFzaCBpbnRvIGEgc3VmZml4IHN0
cmluZyB0aGF0IGlzIGFwcGVuZGVkIHRvIHRoZSBwYXRoIC8gVVJMIHBhc3NlZCB0byBEUlQuCi0g
ICAgICAgICAgICAkc3VmZml4RXhwZWN0ZWRIYXNoID0gIickZXhwZWN0ZWRIYXNoIjsKKyAgICBt
eSAkc3VmZml4UGl4ZWxUZXN0ID0gIiI7CisgICAgaWYgKCRwaXhlbFRlc3RzKSB7CisgICAgICAg
ICMgOiBpcyB0aGUgc2VwYXJhdG9yIGJldHdlZW4gYXJndW1lbnRzLgorICAgICAgICAkc3VmZml4
UGl4ZWxUZXN0ID0gIjotLXBpeGVsLXRlc3QiOworICAgICAgICBpZiAoISRyZXNldFJlc3VsdHMp
IHsKKyAgICAgICAgICAgIG15ICRleHBlY3RlZFBpeGVsRGlyID0gZXhwZWN0ZWREaXJlY3RvcnlG
b3JUZXN0KCRiYXNlLCAwLCAicG5nIik7CisgICAgICAgICAgICBpZiAobXkgJGV4cGVjdGVkSGFz
aCA9IHJlYWRDaGVja3N1bUZyb21QbmcoRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkZXhwZWN0ZWRQaXhl
bERpciwgIiRiYXNlLSRleHBlY3RlZFRhZy5wbmciKSkpIHsKKyAgICAgICAgICAgICAgICAjIEZv
cm1hdCBleHBlY3RlZCBoYXNoIGludG8gYSBzdWZmaXggc3RyaW5nIHRoYXQgaXMgYXBwZW5kZWQg
dG8gdGhlIHBhdGggLyBVUkwgcGFzc2VkIHRvIERSVC4KKyAgICAgICAgICAgICAgICAkc3VmZml4
UGl4ZWxUZXN0ID0gIjotLXBpeGVsLXRlc3Q6JGV4cGVjdGVkSGFzaCI7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTc4OSwxMSArNzkzLDExIEBAIGZvciBteSAkdGVzdCAo
QHRlc3RzKSB7CiAgICAgICAgIH0gZWxzaWYgKCR0ZXN0ICF+IC9eaHR0cFwvdGVzdHNcL2xvY2Fs
XC8vICYmICR0ZXN0ICF+IC9eaHR0cFwvdGVzdHNcL3NzbFwvLykgewogICAgICAgICAgICAgbXkg
JHBhdGggPSBjYW5vbnBhdGgoJHRlc3QpOwogICAgICAgICAgICAgJHBhdGggPX4gcy9eaHR0cFwv
dGVzdHNcLy8vOwotICAgICAgICAgICAgcHJpbnQgT1VUICJodHRwOi8vMTI3LjAuMC4xOiRodHRw
ZFBvcnQvJHBhdGgkc3VmZml4RXhwZWN0ZWRIYXNoXG4iOworICAgICAgICAgICAgcHJpbnQgT1VU
ICJodHRwOi8vMTI3LjAuMC4xOiRodHRwZFBvcnQvJHBhdGgkc3VmZml4UGl4ZWxUZXN0XG4iOwog
ICAgICAgICB9IGVsc2lmICgkdGVzdCA9fiAvXmh0dHBcL3Rlc3RzXC9zc2xcLy8pIHsKICAgICAg
ICAgICAgIG15ICRwYXRoID0gY2Fub25wYXRoKCR0ZXN0KTsKICAgICAgICAgICAgICRwYXRoID1+
IHMvXmh0dHBcL3Rlc3RzXC8vLzsKLSAgICAgICAgICAgIHByaW50IE9VVCAiaHR0cHM6Ly8xMjcu
MC4wLjE6JGh0dHBkU1NMUG9ydC8kcGF0aCRzdWZmaXhFeHBlY3RlZEhhc2hcbiI7CisgICAgICAg
ICAgICBwcmludCBPVVQgImh0dHBzOi8vMTI3LjAuMC4xOiRodHRwZFNTTFBvcnQvJHBhdGgkc3Vm
Zml4UGl4ZWxUZXN0XG4iOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbXkgJHRlc3RQ
YXRoID0gIiR0ZXN0RGlyZWN0b3J5LyR0ZXN0IjsKICAgICAgICAgICAgIGlmIChpc0N5Z3dpbigp
KSB7CkBAIC04MDEsNyArODA1LDcgQEAgZm9yIG15ICR0ZXN0IChAdGVzdHMpIHsKICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgJHRlc3RQYXRoID0gY2Fub25wYXRoKCR0ZXN0
UGF0aCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmludCBPVVQgIiR0ZXN0UGF0aCRz
dWZmaXhFeHBlY3RlZEhhc2hcbiI7CisgICAgICAgICAgICBwcmludCBPVVQgIiR0ZXN0UGF0aCRz
dWZmaXhQaXhlbFRlc3RcbiI7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBteSAk
dGVzdFBhdGggPSAiJHRlc3REaXJlY3RvcnkvJHRlc3QiOwpAQCAtODEwLDcgKzgxNCw3IEBAIGZv
ciBteSAkdGVzdCAoQHRlc3RzKSB7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAkdGVz
dFBhdGggPSBjYW5vbnBhdGgoJHRlc3RQYXRoKTsKICAgICAgICAgfQotICAgICAgICBwcmludCBP
VVQgIiR0ZXN0UGF0aCRzdWZmaXhFeHBlY3RlZEhhc2hcbiIgaWYgZGVmaW5lZCAkdGVzdFBhdGg7
CisgICAgICAgIHByaW50IE9VVCAiJHRlc3RQYXRoJHN1ZmZpeFBpeGVsVGVzdFxuIiBpZiBkZWZp
bmVkICR0ZXN0UGF0aDsKICAgICB9CiAKICAgICAjIER1bXBSZW5kZXJUcmVlIGlzIGV4cGVjdGVk
IHRvIGR1bXAgdHdvICJibG9ja3MiIHRvIHN0ZG91dCBmb3IgZWFjaCB0ZXN0LgpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CmluZGV4IGFkNzBm
MDQyZGU5ZWNiNjAwNjNiZWE2ZjUwYzI4NWJmOWVmZDljMTIuLjk0MjE1NjI0ZmUyN2VhNDI1YWE3
M2U4OTE1NzdjYzVlNmU5OTBlMjkgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKQEAgLTEyNzcsMjEgKzEyNzcsOSBAQCBjbGFzcyBQb3J0
KG9iamVjdCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHN1aXRlLmFyZ3MKICAgICAgICAgcmV0
dXJuIFtdCiAKLSAgICBkZWYgc3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Blcl90ZXN0
KHNlbGYpOgotICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ3dlYmtpdF90ZXN0X3J1bm5lcicp
OgotICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIHNlbGYuX3N1cHBvcnRz
X3N3aXRjaGluZ19waXhlbF90ZXN0c19wZXJfdGVzdCgpCi0KLSAgICBkZWYgX3N1cHBvcnRzX3N3
aXRjaGluZ19waXhlbF90ZXN0c19wZXJfdGVzdChzZWxmKToKLSAgICAgICAgIyBGSVhNRTogYWxs
IHBvcnRzIHNob3VsZCBzdXBwb3J0IGl0LgotICAgICAgICByZXR1cm4gRmFsc2UKLQogICAgIGRl
ZiBzaG91bGRfcnVuX2FzX3BpeGVsX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCk6CiAgICAgICAgIGlm
IG5vdCBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzOgogICAgICAgICAgICAgcmV0dXJuIEZhbHNl
Ci0gICAgICAgIGlmIG5vdCBzZWxmLnN1cHBvcnRzX3N3aXRjaGluZ19waXhlbF90ZXN0c19wZXJf
dGVzdCgpOgotICAgICAgICAgICAgIyBDYW5ub3QgZG8gbW9yZSBmaWx0ZXJpbmcgd2l0aG91dCB0
aGlzLgotICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5w
aXhlbF90ZXN0X2RpcmVjdG9yaWVzOgogICAgICAgICAgICAgcmV0dXJuIGFueSh0ZXN0X2lucHV0
LnRlc3RfbmFtZS5zdGFydHN3aXRoKGRpcmVjdG9yeSkgZm9yIGRpcmVjdG9yeSBpbiBzZWxmLl9v
cHRpb25zLnBpeGVsX3Rlc3RfZGlyZWN0b3JpZXMpCiAgICAgICAgIHJldHVybiBzZWxmLl9zaG91
bGRfcnVuX2FzX3BpeGVsX3Rlc3QodGVzdF9pbnB1dCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXIucHkKaW5kZXggNzgxODIzYjhkNjcwYTZl
YjhlNTJlMDc2OGJlNjY0YjExZDYzMDMzYy4uMmViMWUxNGI1MmJjZDcyMzVmMzU1YzFhOTc0MDY4
NmY5NWJjYzhkNiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9kcml2ZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9kcml2ZXIucHkKQEAgLTI5Myw4ICsyOTMsNiBAQCBjbGFzcyBEcml2ZXIob2JqZWN0
KToKIAogICAgICAgICBjbWQuZXh0ZW5kKHNlbGYuX3BvcnQuZ2V0X29wdGlvbignYWRkaXRpb25h
bF9kcnRfZmxhZycsIFtdKSkKIAotICAgICAgICBpZiBwaXhlbF90ZXN0cyBhbmQgbm90IHNlbGYu
X3BvcnQuc3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Blcl90ZXN0KCk6Ci0gICAgICAg
ICAgICBjbWQuYXBwZW5kKCctLXBpeGVsLXRlc3RzJykKICAgICAgICAgY21kLmV4dGVuZChwZXJf
dGVzdF9hcmdzKQogCiAgICAgICAgIGNtZC5hcHBlbmQoJy0nKQpAQCAtMzM2LDEyICszMzQsOSBA
QCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAgICAgICAgYXNzZXJ0IG5vdCBkcml2ZXJfaW5wdXQu
aW1hZ2VfaGFzaCBvciBkcml2ZXJfaW5wdXQuc2hvdWxkX3J1bl9waXhlbF90ZXN0CiAKICAgICAg
ICAgaWYgZHJpdmVyX2lucHV0LnNob3VsZF9ydW5fcGl4ZWxfdGVzdDoKLSAgICAgICAgICAgIGlm
IHNlbGYuX3BvcnQuc3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Blcl90ZXN0KCk6Ci0g
ICAgICAgICAgICAgICAgIyBXZSBkaWQgbm90IHN0YXJ0IHRoZSBkcml2ZXIgd2l0aCAtLXBpeGVs
LXRlc3RzLCBpbnN0ZWFkIHdlIHNwZWNpZnkgaXQgcGVyIHRlc3QuCi0gICAgICAgICAgICAgICAg
IyAiJyIgaXMgdGhlIHNlcGFyYXRvciBvZiBjb21tYW5kIGZpZWxkcy4KLSAgICAgICAgICAgICAg
ICBjb21tYW5kICs9ICInIiArICctLXBpeGVsLXRlc3QnCisgICAgICAgICAgICBjb21tYW5kICs9
ICI6LS1waXhlbC10ZXN0IgogICAgICAgICBpZiBkcml2ZXJfaW5wdXQuaW1hZ2VfaGFzaDoKLSAg
ICAgICAgICAgIGNvbW1hbmQgKz0gIiciICsgZHJpdmVyX2lucHV0LmltYWdlX2hhc2gKKyAgICAg
ICAgICAgIGNvbW1hbmQgKz0gIjoiICsgZHJpdmVyX2lucHV0LmltYWdlX2hhc2gKICAgICAgICAg
cmV0dXJuIGNvbW1hbmQgKyAiXG4iCiAKICAgICBkZWYgX3JlYWRfZmlyc3RfYmxvY2soc2VsZiwg
ZGVhZGxpbmUpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9xdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
cXQucHkKaW5kZXggZTIzOWM3ZTNhYWY2ZjYwMmIwYzM1MWVjMjJkY2ZhNjgwNjRlYTI2OS4uNmU3
YjA5ODhkNWE3N2VmYzVmYzM3MmZhNzUxNjc4MzQwMGE2OWYwOCAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9xdC5weQorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3F0LnB5CkBAIC0xODQsNiArMTg0LDMgQEAg
Y2xhc3MgUXRQb3J0KFBvcnQpOgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIHJl
dHVybiByZXN1bHQKIAotICAgIGRlZiBfc3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Bl
cl90ZXN0KHNlbGYpOgotICAgICAgICByZXR1cm4gVHJ1ZQotCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkKaW5kZXggNTcxNDY2MWZkMjAzNjc2
ODM5ZDZjNzZmNDczNWJlYzgxMzJiODliOC4uMGNkMTcxZjNiY2E2YWJlYmRiMjFiOThlMmE0NWMy
MWExNGE5MDExMiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC90ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvdGVzdC5weQpAQCAtNTEzLDEwICs1MTMsNiBAQCBjbGFzcyBUZXN0UG9ydChQb3J0KToK
ICAgICAgICAgICAgIFZpcnR1YWxUZXN0U3VpdGUoJ3ZpcnR1YWwvc2tpcHBlZCcsICdmYWlsdXJl
cy9leHBlY3RlZCcsIFsnLS12aXJ0dWFsLWFyZzInXSksCiAgICAgICAgIF0KIAotICAgIGRlZiBz
dXBwb3J0c19zd2l0Y2hpbmdfcGl4ZWxfdGVzdHNfcGVyX3Rlc3Qoc2VsZik6Ci0gICAgICAgICMg
TGV0IGl0IHRydWUgc28gd2UgY2FuIHRlc3QgdGhlIC0tcGl4ZWwtdGVzdC1kaXJlY3Rvcnkgb3B0
aW9uLgotICAgICAgICByZXR1cm4gVHJ1ZQotCiAKIGNsYXNzIFRlc3REcml2ZXIoRHJpdmVyKToK
ICAgICAiIiJUZXN0L0R1bW15IGltcGxlbWVudGF0aW9uIG9mIHRoZSBEdW1wUmVuZGVyVHJlZSBp
bnRlcmZhY2UuIiIiCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250
cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmlu
ZGV4IGQwMjMyOTkyNzMxZDFiYzk3MTI2OGZjMzkzMWY0YjcwYWIzNjdhYzcuLjFkZTNjOWU2YTZh
YzhmMzAyOWFhYTAzMTZjNDgxZjA0ZWFlMmY4OGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
VGVzdENvbnRyb2xsZXIuY3BwCkBAIC0zNSw3ICszNSwxMSBAQAogI2luY2x1ZGUgPFdlYktpdDIv
V0tQYWdlUHJpdmF0ZS5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tQcmVmZXJlbmNlc1ByaXZhdGUu
aD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8YWxnb3JpdGht
PgogI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGxp
Yi5oPgorI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiAj
aWYgUExBVEZPUk0oTUFDKQpAQCAtNjcsOCArNzEsNyBAQCBUZXN0Q29udHJvbGxlciYgVGVzdENv
bnRyb2xsZXI6OnNoYXJlZCgpCiB9CiAKIFRlc3RDb250cm9sbGVyOjpUZXN0Q29udHJvbGxlcihp
bnQgYXJnYywgY29uc3QgY2hhciogYXJndltdKQotICAgIDogbV9kdW1wUGl4ZWxzRm9yQWxsVGVz
dHMoZmFsc2UpCi0gICAgLCBtX3ZlcmJvc2UoZmFsc2UpCisgICAgOiBtX3ZlcmJvc2UoZmFsc2Up
CiAgICAgLCBtX3ByaW50U2VwYXJhdG9ycyhmYWxzZSkKICAgICAsIG1fdXNpbmdTZXJ2ZXJNb2Rl
KGZhbHNlKQogICAgICwgbV9nY0JldHdlZW5UZXN0cyhmYWxzZSkKQEAgLTI2NywxMCArMjcwLDYg
QEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZShpbnQgYXJnYywgY29uc3QgY2hhciog
YXJndltdKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAo
YXJndW1lbnQgPT0gIi0tcGl4ZWwtdGVzdHMiKSB7Ci0gICAgICAgICAgICBtX2R1bXBQaXhlbHNG
b3JBbGxUZXN0cyA9IHRydWU7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQogICAg
ICAgICBpZiAoYXJndW1lbnQgPT0gIi0tdmVyYm9zZSIpIHsKICAgICAgICAgICAgIG1fdmVyYm9z
ZSA9IHRydWU7CiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTUwNCw3ICs1MDMsODkgQEAgYm9v
bCBUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcygpCiAgICAgcmV0
dXJuIG1fZG9uZVJlc2V0dGluZzsKIH0KIAotYm9vbCBUZXN0Q29udHJvbGxlcjo6cnVuVGVzdChj
b25zdCBjaGFyKiB0ZXN0KQorc3RydWN0IFRlc3RDb21tYW5kIHsKKyAgICBUZXN0Q29tbWFuZCgp
IDogc2hvdWxkRHVtcFBpeGVscyhmYWxzZSkgeyB9CisKKyAgICBzdGQ6OnN0cmluZyBwYXRoT3JV
Ukw7CisgICAgYm9vbCBzaG91bGREdW1wUGl4ZWxzOworICAgIHN0ZDo6c3RyaW5nIGV4cGVjdGVk
UGl4ZWxIYXNoOworfTsKKworY2xhc3MgQ29tbWFuZFRva2VuaXplciB7CitwdWJsaWM6CisgICAg
Q29tbWFuZFRva2VuaXplcihjb25zdCBzdGQ6OnN0cmluZyYgaW5wdXQpCisgICAgICAgIDogbV9p
bnB1dChpbnB1dCkKKyAgICAgICAgLCBtX3Bvc05leHRTZXBhcmF0b3IoMCkKKyAgICB7CisgICAg
ICAgIHB1bXAoKTsKKyAgICB9CisKKyAgICBib29sIGhhc05leHQoKSBjb25zdDsKKyAgICBzdGQ6
OnN0cmluZyBuZXh0KCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBwdW1wKCk7CisgICAgc3RhdGlj
IGNvbnN0IGNoYXIga1NlcGFyYXRvciA9ICc6JzsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgbV9p
bnB1dDsKKyAgICBzdGQ6OnN0cmluZyBtX25leHQ7CisgICAgc2l6ZV90IG1fcG9zTmV4dFNlcGFy
YXRvcjsKK307CisKK3ZvaWQgQ29tbWFuZFRva2VuaXplcjo6cHVtcCgpCit7CisgICAgaWYgKG1f
cG9zTmV4dFNlcGFyYXRvciA9PSBzdGQ6OnN0cmluZzo6bnBvcyB8fCBtX3Bvc05leHRTZXBhcmF0
b3IgPT0gbV9pbnB1dC5zaXplKCkpIHsKKyAgICAgICAgbV9uZXh0ID0gc3RkOjpzdHJpbmcoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzaXplX3Qgc3RhcnQgPSBtX3Bvc05leHRTZXBh
cmF0b3IgPyBtX3Bvc05leHRTZXBhcmF0b3IgKyAxIDogMDsKKyAgICBtX3Bvc05leHRTZXBhcmF0
b3IgPSBtX2lucHV0LmZpbmQoa1NlcGFyYXRvciwgc3RhcnQpOworICAgIHNpemVfdCBzaXplID0g
bV9wb3NOZXh0U2VwYXJhdG9yID09IHN0ZDo6c3RyaW5nOjpucG9zID8gc3RkOjpzdHJpbmc6Om5w
b3MgOiBtX3Bvc05leHRTZXBhcmF0b3IgLSBzdGFydDsKKyAgICBtX25leHQgPSBzdGQ6OnN0cmlu
ZyhtX2lucHV0LCBzdGFydCwgc2l6ZSk7Cit9CisKK3N0ZDo6c3RyaW5nIENvbW1hbmRUb2tlbml6
ZXI6Om5leHQoKQoreworICAgIEFTU0VSVChoYXNOZXh0KCkpOworCisgICAgc3RkOjpzdHJpbmcg
b2xkTmV4dCA9IG1fbmV4dDsKKyAgICBwdW1wKCk7CisgICAgcmV0dXJuIG9sZE5leHQ7Cit9CisK
K2Jvb2wgQ29tbWFuZFRva2VuaXplcjo6aGFzTmV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
bmV4dCAhPSBzdGQ6OnN0cmluZygpOworfQorCitOT19SRVRVUk4gc3RhdGljIHZvaWQgZGllKGNv
bnN0IHN0ZDo6c3RyaW5nJiBpbnB1dExpbmUpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJVbmV4
cGVjdGVkIGlucHV0IGxpbmU6ICVzXG4iLCBpbnB1dExpbmUuY19zdHIoKSk7CisgICAgZXhpdCgx
KTsKK30KKworVGVzdENvbW1hbmQgcGFyc2VJbnB1dExpbmUoY29uc3Qgc3RkOjpzdHJpbmcmIGlu
cHV0TGluZSkKK3sKKyAgICBUZXN0Q29tbWFuZCByZXN1bHQ7CisgICAgQ29tbWFuZFRva2VuaXpl
ciB0b2tlbml6ZXIoaW5wdXRMaW5lKTsKKyAgICBpZiAoIXRva2VuaXplci5oYXNOZXh0KCkpCisg
ICAgICAgIGRpZShpbnB1dExpbmUpOworCisgICAgcmVzdWx0LnBhdGhPclVSTCA9IHRva2VuaXpl
ci5uZXh0KCk7CisgICAgaWYgKCF0b2tlbml6ZXIuaGFzTmV4dCgpKQorICAgICAgICByZXR1cm4g
cmVzdWx0OworCisgICAgc3RkOjpzdHJpbmcgYXJnID0gdG9rZW5pemVyLm5leHQoKTsKKyAgICBp
ZiAoYXJnICE9IHN0ZDo6c3RyaW5nKCItcCIpICYmIGFyZyAhPSBzdGQ6OnN0cmluZygiLS1waXhl
bC10ZXN0IikpCisgICAgICAgIGRpZShpbnB1dExpbmUpOworICAgIHJlc3VsdC5zaG91bGREdW1w
UGl4ZWxzID0gdHJ1ZTsKKworICAgIGlmICh0b2tlbml6ZXIuaGFzTmV4dCgpKQorICAgICAgICBy
ZXN1bHQuZXhwZWN0ZWRQaXhlbEhhc2ggPSB0b2tlbml6ZXIubmV4dCgpOworCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworYm9vbCBUZXN0Q29udHJvbGxlcjo6cnVuVGVzdChjb25zdCBjaGFyKiBp
bnB1dExpbmUpCiB7CiAgICAgaWYgKCFyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKCkpIHsK
ICNpZiBQTEFURk9STShNQUMpCkBAIC01MTcsMzIgKzU5OCwxMyBAQCBib29sIFRlc3RDb250cm9s
bGVyOjpydW5UZXN0KGNvbnN0IGNoYXIqIHRlc3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKLSAgICBib29sIGR1bXBQaXhlbHNUZXN0ID0gbV9kdW1wUGl4ZWxzRm9yQWxsVGVzdHM7
Ci0gICAgc3RkOjpzdHJpbmcgY29tbWFuZCh0ZXN0KTsKLSAgICBzdGQ6OnN0cmluZyBwYXRoT3JV
UkwgPSBjb21tYW5kOwotICAgIHN0ZDo6c3RyaW5nIGV4cGVjdGVkUGl4ZWxIYXNoOwotICAgIHNp
emVfdCBmaXJzdFNlcGFyYXRvclBvcyA9IGNvbW1hbmQuZmluZF9maXJzdF9vZignXCcnKTsKLSAg
ICBzaXplX3Qgc2Vjb25kU2VwYXJhdG9yUG9zID0gY29tbWFuZC5maW5kX2ZpcnN0X29mKCdcJycs
IGZpcnN0U2VwYXJhdG9yUG9zICsgMSk7Ci0gICAgaWYgKGZpcnN0U2VwYXJhdG9yUG9zICE9IHN0
ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgICAgIHBhdGhPclVSTCA9IHN0ZDo6c3RyaW5nKGNvbW1h
bmQsIDAsIGZpcnN0U2VwYXJhdG9yUG9zKTsKLSAgICAgICAgc2l6ZV90IHBpeGVsSGFzaFBvcyA9
IGZpcnN0U2VwYXJhdG9yUG9zICsgMTsKLQotICAgICAgICAvLyBOUldUIHBhc3NlcyAtLXBpeGVs
LXRlc3QgaWYgd2Ugc2hvdWxkIGR1bXAgcGl4ZWxzIGZvciB0aGUgdGVzdC4KLSAgICAgICAgY29u
c3Qgc3RkOjpzdHJpbmcgZXhwZWN0ZWRQaXhlbFRlc3RBcmcoIi0tcGl4ZWwtdGVzdCIpOwotICAg
ICAgICBzdGQ6OnN0cmluZyBhcmdUZXN0ID0gc3RkOjpzdHJpbmcoY29tbWFuZCwgZmlyc3RTZXBh
cmF0b3JQb3MgKyAxLCBleHBlY3RlZFBpeGVsVGVzdEFyZy5zaXplKCkpOwotICAgICAgICBpZiAo
YXJnVGVzdCA9PSBleHBlY3RlZFBpeGVsVGVzdEFyZykgewotICAgICAgICAgICAgZHVtcFBpeGVs
c1Rlc3QgPSB0cnVlOwotICAgICAgICAgICAgcGl4ZWxIYXNoUG9zID0gc2Vjb25kU2VwYXJhdG9y
UG9zID09IHN0ZDo6c3RyaW5nOjpucG9zID8gc3RkOjpzdHJpbmc6Om5wb3MgOiBzZWNvbmRTZXBh
cmF0b3JQb3MgKyAxOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwaXhlbEhhc2hQb3MgIT0gc3Rk
OjpzdHJpbmc6Om5wb3MgJiYgcGl4ZWxIYXNoUG9zIDwgY29tbWFuZC5zaXplKCkpCi0gICAgICAg
ICAgICBleHBlY3RlZFBpeGVsSGFzaCA9IHN0ZDo6c3RyaW5nKGNvbW1hbmQsIHBpeGVsSGFzaFBv
cyk7Ci0gICAgfQorICAgIFRlc3RDb21tYW5kIGNvbW1hbmQgPSBwYXJzZUlucHV0TGluZShzdGQ6
OnN0cmluZyhpbnB1dExpbmUpKTsKIAogICAgIG1fc3RhdGUgPSBSdW5uaW5nVGVzdDsKIAotICAg
IG1fY3VycmVudEludm9jYXRpb24gPSBhZG9wdFB0cihuZXcgVGVzdEludm9jYXRpb24ocGF0aE9y
VVJMKSk7Ci0gICAgaWYgKGR1bXBQaXhlbHNUZXN0KQotICAgICAgICBtX2N1cnJlbnRJbnZvY2F0
aW9uLT5zZXRJc1BpeGVsVGVzdChleHBlY3RlZFBpeGVsSGFzaCk7CisgICAgbV9jdXJyZW50SW52
b2NhdGlvbiA9IGFkb3B0UHRyKG5ldyBUZXN0SW52b2NhdGlvbihjb21tYW5kLnBhdGhPclVSTCkp
OworICAgIGlmIChjb21tYW5kLnNob3VsZER1bXBQaXhlbHMpCisgICAgICAgIG1fY3VycmVudElu
dm9jYXRpb24tPnNldElzUGl4ZWxUZXN0KGNvbW1hbmQuZXhwZWN0ZWRQaXhlbEhhc2gpOwogCiAg
ICAgbV9jdXJyZW50SW52b2NhdGlvbi0+aW52b2tlKCk7CiAgICAgbV9jdXJyZW50SW52b2NhdGlv
bi5jbGVhcigpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCmluZGV4IGE5
OWUxNmVhODcwMjdjMzRmMDdiODk2MmIwOThjMjMzNGQ5NDIxYmQuLjVlMjBkNjExYjQ2OWRmMTg3
YzM3OGVlNjJlZDBjYWMzMThkYWVkMjEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvVGVzdENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250
cm9sbGVyLmgKQEAgLTEwNCw3ICsxMDQsNiBAQCBwcml2YXRlOgogCiAgICAgT3duUHRyPFRlc3RJ
bnZvY2F0aW9uPiBtX2N1cnJlbnRJbnZvY2F0aW9uOwogCi0gICAgYm9vbCBtX2R1bXBQaXhlbHNG
b3JBbGxUZXN0czsKICAgICBib29sIG1fdmVyYm9zZTsKICAgICBib29sIG1fcHJpbnRTZXBhcmF0
b3JzOwogICAgIGJvb2wgbV91c2luZ1NlcnZlck1vZGU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155569</attachid>
            <date>2012-07-31 09:38:35 -0700</date>
            <delta_ts>2012-07-31 10:19:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92398-20120731183817.patch</filename>
            <type>text/plain</type>
            <size>50567</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MjA5CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMGVhZWQ3NTk5ODczMjE1MzI0MGZiYTkwZWE0ZTFlNmE4
OTI0MTBlMy4uYjk5ZWQ1NWY2MWQ2MTU2MGM5ZTU5MzZlZWY2OGY3MzcxNjNlYzE3OSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk3
IEBACisyMDEyLTA3LTMxICBCYWxhenMgS2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBBbGwgcG9ydHMgc2hvdWxkIHN1cHBvcnQgcGVyIHRlc3Qgc3dpdGNoaW5nIG9mIHBp
eGVsIHRlc3RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkyMzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGVhY2ggYWxsIHRlc3QgZHJpdmVycyB0byBhY2NlcHQgYSBwZXIgdGVzdCBjb250cm9sIG9m
IHdoZXRoZXIKKyAgICAgICAgdG8gZHVtcCBwaXhlbHMuIERyaXZlcnMgbm93IGFjY2VwdCBhIC1w
Ly0tcGl4ZWwtdGVzdCBhcmd1bWVudAorICAgICAgICBvbiB0aGUgc3RhbmRhcnQgaW5wdXQgdGhh
dCBtZWFucyB0aGF0IHJ1bm5pbmcgdGhlIGN1cnJlbnQKKyAgICAgICAgdGVzdCBhcyBwaXhlbCB0
ZXN0IGlzIGFsbG93ZWQgKGV2ZW4gaWYgdGhlIGV4cGVjdGVkIGhhc2ggaXMKKyAgICAgICAgbWlz
c2luZykuIFJlbW92ZWQgdGhlIC0tcGl4ZWwtdGVzdHMgY29tbWFuZCBsaW5lIG9wdGlvbiBzaW5j
ZQorICAgICAgICB0aGVyZSBpcyBubyBuZWVkIGZvciBpdCBhbnltb3JlLgorCisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaToKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9EdW1wUmVuZGVyVHJlZS5oOgorICAgICAgICAoVGVzdENvbW1hbmQ6OlRlc3RDb21tYW5k
KToKKyAgICAgICAgKFRlc3RDb21tYW5kKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9EdW1w
UmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcDogQWRkZWQuCisgICAgICAgIChDb21tYW5k
VG9rZW5pemVyKToKKyAgICAgICAgKENvbW1hbmRUb2tlbml6ZXI6OkNvbW1hbmRUb2tlbml6ZXIp
OgorICAgICAgICAoQ29tbWFuZFRva2VuaXplcjo6cHVtcCk6CisgICAgICAgIChDb21tYW5kVG9r
ZW5pemVyOjpuZXh0KToKKyAgICAgICAgKENvbW1hbmRUb2tlbml6ZXI6Omhhc05leHQpOgorICAg
ICAgICAoZGllKToKKyAgICAgICAgKHBhcnNlSW5wdXRMaW5lKToKKyAgICAgICAgQ29tbW9uIGxv
Z2ljIHRvIHBhcnNlIHRoZSBpbnB1dCBsaW5lIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IChvciBm
cm9tIHRoZSBjb21tYW5kIGxpbmUKKyAgICAgICAgaW4gc3RhbmRhbG9uZSBtb2RlKS4gTWFkZSBp
dCBzb21ld2hhdCBnZW5lcmFsIHNvIHdlIGNhbiBlYXNpbHkgYWRkIG1vcmUgYXJndW1lbnRzIGlm
CisgICAgICAgIHRoZXJlIGlzIGEgbmVlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9EdW1wUmVuZGVyVHJlZS5jcHA6CisgICAgICAgIChydW5UZXN0KToKKyAgICAgICAgKG1h
aW4pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHA6Cisg
ICAgICAgIChUZXN0U2hlbGw6OlRlc3RTaGVsbCk6CisgICAgICAgIChUZXN0U2hlbGw6OnJ1bkZp
bGVUZXN0KToKKyAgICAgICAgKFRlc3RTaGVsbDo6ZHVtcCk6CisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmg6CisgICAgICAgIChUZXN0UGFyYW1zOjpUZXN0UGFy
YW1zKToKKyAgICAgICAgKFRlc3RTaGVsbCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZWZs
L0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVy
VHJlZS5jcHA6CisgICAgICAgIChwYXJzZUNvbW1hbmRMaW5lT3B0aW9ucyk6CisgICAgICAgIChy
dW5UZXN0KToKKyAgICAgICAgKHNob3VsZER1bXBQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVk
KToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVu
ZGVyVHJlZS5jcHA6CisgICAgICAgIChpbml0aWFsaXplR2xvYmFsc0Zyb21Db21tYW5kTGluZU9w
dGlvbnMpOgorICAgICAgICAoZHVtcCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0R1
bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICAoaW5pdGlhbGl6ZUdsb2JhbHNGcm9tQ29tbWFuZExp
bmVPcHRpb25zKToKKyAgICAgICAgKGR1bXBSZW5kZXJUcmVlKToKKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5wcm86CisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
cXQvRHVtcFJlbmRlclRyZWVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEdW1wUmVuZGVyVHJl
ZTo6cHJvY2Vzc0xpbmUpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVy
VHJlZS5jcHA6CisgICAgICAgIChkdW1wKToKKyAgICAgICAgKHJ1blRlc3QpOgorICAgICAgICAo
ZGxsTGF1bmNoZXJFbnRyeVBvaW50KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRHVt
cFJlbmRlclRyZWUudmNwcm9qOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dzY3JpcHQ6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvd3gvRHVtcFJlbmRlclRyZWVXeC5jcHA6CisgICAgICAg
IChkdW1wKToKKyAgICAgICAgKHJ1blRlc3QpOgorICAgICAgICAoTXlBcHA6Ok9uSW5pdCk6Cisg
ICAgICAgICogU2NyaXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0czogUGFzcyAtLXBpeGVsLXRlc3Qg
YmVmb3JlIHRoZSBoYXNoLgorICAgICAgICBDaGFuZ2VkIHRoZSBzZXBhcmF0b3IgZm9ybSAnIHRv
IDogYmVjYXVzZSBpdCBkb24ndCBuZWVkIHRvIGJlIGVzY2FwZWQKKyAgICAgICAgd2hlbiBwYXNz
aW5nIG1hbnVhbGx5IG9uIHRoZSBjb21hbmQgbGluZS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHk6CisgICAgICAgIChQb3J0LnNob3VsZF9ydW5f
YXNfcGl4ZWxfdGVzdCk6IFJlbW92ZWQgbm93IHRoYXQgYWxsIHBvcnRzIHN1cHBvcnRzIGl0Lgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5Ogor
ICAgICAgICAoRHJpdmVyLmNtZF9saW5lKTogRG9uJ3QgcGFzcyAtLXBpeGVsLXRlc3RzIGFueW1v
cmUuCisgICAgICAgIChEcml2ZXIuX2NvbW1hbmRfZnJvbV9kcml2ZXJfaW5wdXQpOgorCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpUZXN0Q29udHJvbGxlcik6CisgICAgICAgIChXVFI6OlRlc3RDb250
cm9sbGVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdUUjo6VGVzdENvbW1hbmQ6OlRlc3RDb21t
YW5kKToKKyAgICAgICAgKFRlc3RDb21tYW5kKToKKyAgICAgICAgKFdUUik6CisgICAgICAgIChD
b21tYW5kVG9rZW5pemVyKToKKyAgICAgICAgKFdUUjo6Q29tbWFuZFRva2VuaXplcjo6Q29tbWFu
ZFRva2VuaXplcik6CisgICAgICAgIChXVFI6OkNvbW1hbmRUb2tlbml6ZXI6OnB1bXApOgorICAg
ICAgICAoV1RSOjpDb21tYW5kVG9rZW5pemVyOjpuZXh0KToKKyAgICAgICAgKFdUUjo6Q29tbWFu
ZFRva2VuaXplcjo6aGFzTmV4dCk6CisgICAgICAgIChXVFI6OmRpZSk6CisgICAgICAgIChXVFI6
OnBhcnNlSW5wdXRMaW5lKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJ1blRlc3Qp
OgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAg
KFRlc3RDb250cm9sbGVyKToKKyAgICAgICAgRHVwbGljYXRlIHRoZSBsb2dpYyBmb3IgcGFyc2lu
ZyB0aGUgY29tbWFuZCBsaW5lIGJlY2F1c2UKKyAgICAgICAgdW5mb3J0dW5hdGVseSB0aGVyZSBp
cyBubyB3YXkgdG8gc2hhcmUgY29kZSBiZXR3ZWVuCisgICAgICAgIFdlYktpdFRlc3RSdW5uZXIg
YW5kIER1bXBSZW5kZXJUcmVlLgorCiAyMDEyLTA3LTMxICBKb2NoZW4gRWlzaW5nZXIgIDxqb2No
ZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gbW92ZSBFdmVudFNlbmRlciBp
bnRvIFRlc3RSdW5uZXIuYQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJl
bmRlclRyZWUuZ3lwL0R1bXBSZW5kZXJUcmVlLmd5cCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1
bXBSZW5kZXJUcmVlLmd5cC9EdW1wUmVuZGVyVHJlZS5neXAKaW5kZXggZTM4YzhkOGQ0OWNjMzFi
YTRkMTQ4MDA2NjJjOTUyODQ1M2Q0MWIyYy4uZGUwNmY3NzU5NzhmYmE4ZThkYjcyYThkMDk1OTI3
YTMwNDc2M2Y2NCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRy
ZWUuZ3lwL0R1bXBSZW5kZXJUcmVlLmd5cAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1w
UmVuZGVyVHJlZS5neXAvRHVtcFJlbmRlclRyZWUuZ3lwCkBAIC0xMzMsNiArMTMzLDcgQEAKICAg
ICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCiAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1f
c3JjX2RpciknLAogICAgICAgICAgICAgICAgICc8KHNvdXJjZV9kaXIpL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMnLAorICAgICAgICAgICAgICAgICcuLi8nCiAgICAgICAgICAgICAgICAgJzwoREVQ
VEgpJywKICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKZGlmZiAtLWdp
dCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpCmluZGV4IGYyYmM3M2Q3YmRmNmY3NGQxNDU2
NzdkN2RmYzQzYWUzNWRkMmM2YTQuLjQxNmJiMDczMjU4ODdkNTdiOTA5ZTkzMTIyMzU0ZjA4Yjdk
ZmJhNDYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5
cGkKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaQpAQCAtNTQs
NiArNTQsOCBAQAogICAgICAgICAgICAgJ2Nocm9taXVtL1dlYlZpZXdIb3N0LmgnLAogICAgICAg
ICBdLAogICAgICAgICAndGVzdF9ydW5uZXJfZmlsZXMnOiBbCisgICAgICAgICAgICAnRHVtcFJl
bmRlclRyZWUuaCcsCisgICAgICAgICAgICAnRHVtcFJlbmRlclRyZWVDb21tb24uY3BwJywKICAg
ICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNw
cCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnQuY3BwJywKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5k
ZXJUcmVlLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5oCmluZGV4IDBl
NTk4YmU0YWUzZGQ2MjVmMGI0NWVmZTZiMjhmYTM1ZjY3ZjUyZjIuLjE4ZDhjZGEwZWIxN2ZhODNi
ZWUyMDg5YjZkNDg1YTY0OWRiYjg2NzAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L0R1bXBSZW5kZXJUcmVlLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRy
ZWUuaApAQCAtNjUsNCArNjUsMTQgQEAgZXh0ZXJuIFJlZlB0cjxMYXlvdXRUZXN0Q29udHJvbGxl
cj4gZ0xheW91dFRlc3RDb250cm9sbGVyOwogdm9pZCBkdW1wKCk7CiB2b2lkIGRpc3BsYXlXZWJW
aWV3KCk7CiAKK3N0cnVjdCBUZXN0Q29tbWFuZCB7CisgICAgVGVzdENvbW1hbmQoKSA6IHNob3Vs
ZER1bXBQaXhlbHMoZmFsc2UpIHsgfQorCisgICAgc3RkOjpzdHJpbmcgcGF0aE9yVVJMOworICAg
IGJvb2wgc2hvdWxkRHVtcFBpeGVsczsKKyAgICBzdGQ6OnN0cmluZyBleHBlY3RlZFBpeGVsSGFz
aDsKK307CisKK1Rlc3RDb21tYW5kIHBhcnNlSW5wdXRMaW5lKGNvbnN0IHN0ZDo6c3RyaW5nJik7
CisKICNlbmRpZiAvLyBEdW1wUmVuZGVyVHJlZV9oCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCA4M2JmZmQ0NDg0MWFhMTIyZWVkZWQ0NzI1MTM0YzY5MTUyMDBkZDVlLi5hYTM0Yjk3Mzhj
ZjU0ZmIyMjc1ZjVkZTM0ZDE4MWJkNDAxYWE4OWMzIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTI4OSw2ICsyODksNyBAQAogCQk4Q0NEQTgxRjE1MUE1NjU1MDAwM0Y5MzcgLyogU2Ft
cGxlRm9udC5zZm9udCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueG1sOyBuYW1lID0gU2FtcGxlRm9udC5zZm9u
dDsgcGF0aCA9IGZvbnRzL1NhbXBsZUZvbnQuc2ZvbnQ7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkzMzU0MzVGMDNENzU1MDIwMDg2MzVDRSAvKiBXZWJLaXQuZnJhbWV3b3JrICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFt
ZXdvcms7IHBhdGggPSBXZWJLaXQuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVD
VFNfRElSOyB9OwogCQk5MzQwOTk1NDA4NTQwQ0FGMDA3RjNCQzggLyogRHVtcFJlbmRlclRyZWUg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxl
ZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IER1bXBSZW5k
ZXJUcmVlOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQk5ODA1MTFEMTE1
QzcwMUU1MDA4Q0ZFN0IgLyogRHVtcFJlbmRlclRyZWVDb21tb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRHVtcFJlbmRlclRyZWVDb21tb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBODAzRkY3NDA5Q0FBRDA4MDA5QjJBMzcgLyogRHVtcFJl
bmRlclRyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IER1bXBSZW5kZXJU
cmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4MTcwOTAzMDhCMTY0RDMwMEND
QjlGQiAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgcGF0aCA9IEphdmFT
Y3JpcHRDb3JlLmZyYW1ld29yazsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsK
IAkJQTg0RjYwODkwOEIxMzZEQTAwRTk3NDVGIC8qIENvY29hLmZyYW1ld29yayAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3Jr
OyBuYW1lID0gQ29jb2EuZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29y
a3MvQ29jb2EuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwpAQCAtNDIx
LDYgKzQyMiw3IEBACiAJCTA4RkI3Nzk0RkU4NDE1NURDMDJBQUMwNyAvKiBEdW1wUmVuZGVyVHJl
ZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJOTgwNTEx
RDExNUM3MDFFNTAwOENGRTdCIC8qIER1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcCAqLywKIAkJCQkz
MkE3MEFBQjAzNzA1RTFGMDBDOTE3ODMgLyogRHVtcFJlbmRlclRyZWVQcmVmaXguaCAqLywKIAkJ
CQkxNDIyQTI3NTBBRjZGNEJEMDBFMUE4ODMgLyogRGVsZWdhdGVzICovLAogCQkJCTE0MjJBMjY5
MEFGNkY0NTIwMEUxQTg4MyAvKiBDb250cm9sbGVycyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMzM0OWRiMjIwNjdlOWEw
ODQxN2EyM2FkOGNiMTNiNDViNmQyMzEwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvRHVtcFJlbmRlclRyZWVDb21tb24uY3BwCkBAIC0wLDAgKzEsODIgQEAKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgorCisjaW5jbHVkZSA8
YWxnb3JpdGhtPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNs
dWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisKK2NsYXNzIENvbW1hbmRUb2tlbml6
ZXIgeworcHVibGljOgorICAgIENvbW1hbmRUb2tlbml6ZXIoY29uc3Qgc3RkOjpzdHJpbmcmIGlu
cHV0KQorICAgICAgICA6IG1faW5wdXQoaW5wdXQpCisgICAgICAgICwgbV9wb3NOZXh0U2VwYXJh
dG9yKDApCisgICAgeworICAgICAgICBwdW1wKCk7CisgICAgfQorCisgICAgYm9vbCBoYXNOZXh0
KCkgY29uc3Q7CisgICAgc3RkOjpzdHJpbmcgbmV4dCgpOworCitwcml2YXRlOgorICAgIHZvaWQg
cHVtcCgpOworICAgIHN0YXRpYyBjb25zdCBjaGFyIGtTZXBhcmF0b3IgPSAnOic7CisgICAgY29u
c3Qgc3RkOjpzdHJpbmcmIG1faW5wdXQ7CisgICAgc3RkOjpzdHJpbmcgbV9uZXh0OworICAgIHNp
emVfdCBtX3Bvc05leHRTZXBhcmF0b3I7Cit9OworCit2b2lkIENvbW1hbmRUb2tlbml6ZXI6OnB1
bXAoKQoreworICAgIGlmIChtX3Bvc05leHRTZXBhcmF0b3IgPT0gc3RkOjpzdHJpbmc6Om5wb3Mg
fHwgbV9wb3NOZXh0U2VwYXJhdG9yID09IG1faW5wdXQuc2l6ZSgpKSB7CisgICAgICAgIG1fbmV4
dCA9IHN0ZDo6c3RyaW5nKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2l6ZV90IHN0
YXJ0ID0gbV9wb3NOZXh0U2VwYXJhdG9yID8gbV9wb3NOZXh0U2VwYXJhdG9yICsgMSA6IDA7Cisg
ICAgbV9wb3NOZXh0U2VwYXJhdG9yID0gbV9pbnB1dC5maW5kKGtTZXBhcmF0b3IsIHN0YXJ0KTsK
KyAgICBzaXplX3Qgc2l6ZSA9IG1fcG9zTmV4dFNlcGFyYXRvciA9PSBzdGQ6OnN0cmluZzo6bnBv
cyA/IHN0ZDo6c3RyaW5nOjpucG9zIDogbV9wb3NOZXh0U2VwYXJhdG9yIC0gc3RhcnQ7CisgICAg
bV9uZXh0ID0gc3RkOjpzdHJpbmcobV9pbnB1dCwgc3RhcnQsIHNpemUpOworfQorCitzdGQ6OnN0
cmluZyBDb21tYW5kVG9rZW5pemVyOjpuZXh0KCkKK3sKKyAgICBBU1NFUlQoaGFzTmV4dCgpKTsK
KworICAgIHN0ZDo6c3RyaW5nIG9sZE5leHQgPSBtX25leHQ7CisgICAgcHVtcCgpOworICAgIHJl
dHVybiBvbGROZXh0OworfQorCitib29sIENvbW1hbmRUb2tlbml6ZXI6Omhhc05leHQoKSBjb25z
dAoreworICAgIHJldHVybiBtX25leHQgIT0gc3RkOjpzdHJpbmcoKTsKK30KKworTk9fUkVUVVJO
IHN0YXRpYyB2b2lkIGRpZShjb25zdCBzdGQ6OnN0cmluZyYgaW5wdXRMaW5lKQoreworICAgIGZw
cmludGYoc3RkZXJyLCAiVW5leHBlY3RlZCBpbnB1dCBsaW5lOiAlc1xuIiwgaW5wdXRMaW5lLmNf
c3RyKCkpOworICAgIGV4aXQoMSk7Cit9CisKK1Rlc3RDb21tYW5kIHBhcnNlSW5wdXRMaW5lKGNv
bnN0IHN0ZDo6c3RyaW5nJiBpbnB1dExpbmUpCit7CisgICAgVGVzdENvbW1hbmQgcmVzdWx0Owor
ICAgIENvbW1hbmRUb2tlbml6ZXIgdG9rZW5pemVyKGlucHV0TGluZSk7CisgICAgaWYgKCF0b2tl
bml6ZXIuaGFzTmV4dCgpKQorICAgICAgICBkaWUoaW5wdXRMaW5lKTsKKworICAgIHJlc3VsdC5w
YXRoT3JVUkwgPSB0b2tlbml6ZXIubmV4dCgpOworICAgIGlmICghdG9rZW5pemVyLmhhc05leHQo
KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIHN0ZDo6c3RyaW5nIGFyZyA9IHRva2Vu
aXplci5uZXh0KCk7CisgICAgaWYgKGFyZyAhPSBzdGQ6OnN0cmluZygiLXAiKSAmJiBhcmcgIT0g
c3RkOjpzdHJpbmcoIi0tcGl4ZWwtdGVzdCIpKQorICAgICAgICBkaWUoaW5wdXRMaW5lKTsKKyAg
ICByZXN1bHQuc2hvdWxkRHVtcFBpeGVscyA9IHRydWU7CisKKyAgICBpZiAodG9rZW5pemVyLmhh
c05leHQoKSkKKyAgICAgICAgcmVzdWx0LmV4cGVjdGVkUGl4ZWxIYXNoID0gdG9rZW5pemVyLm5l
eHQoKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9EdW1wUmVuZGVyVHJlZS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9EdW1wUmVuZGVyVHJlZS5jcHAKaW5kZXggNjE1NWY0NDFmNWQ4YmIzYzQ0ZTUx
NzkwODBkY2IxNzQ0NWU4OTg3NC4uYjU1OTQ4NDM2YzI4YjU0ZjJjZjc2OWJlOWVlOTI1N2QzMDE5
MjEzNCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRl
clRyZWUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJU
cmVlLmNwcApAQCAtMjksNiArMjksNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgogCiAjaW5jbHVkZSAiTW9ja1dlYktpdFBsYXRmb3Jt
U3VwcG9ydC5oIgogI2luY2x1ZGUgIlRlc3RTaGVsbC5oIgpAQCAtNDQsNyArNDUsNiBAQCB1c2lu
ZyBuYW1lc3BhY2Ugc3RkOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uQ29tcGxleFRleHRbXSA9
ICItLWNvbXBsZXgtdGV4dCI7CiBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25EdW1wQWxsUGl4ZWxz
W10gPSAiLS1kdW1wLWFsbC1waXhlbHMiOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uTm90cmVl
W10gPSAiLS1ub3RyZWUiOwotc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uUGl4ZWxUZXN0c1tdID0g
Ii0tcGl4ZWwtdGVzdHMiOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uVGhyZWFkZWRbXSA9ICIt
LXRocmVhZGVkIjsKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkRlYnVnUmVuZGVyVHJlZVtdID0g
Ii0tZGVidWctcmVuZGVyLXRyZWUiOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uRGVidWdMYXll
clRyZWVbXSA9ICItLWRlYnVnLWxheWVyLXRyZWUiOwpAQCAtODUsMTcgKzg1LDEyIEBAIHByaXZh
dGU6CiAgICAgT3duUHRyPE1vY2tXZWJLaXRQbGF0Zm9ybVN1cHBvcnQ+IG1fbW9ja1BsYXRmb3Jt
OwogfTsKIAotc3RhdGljIHZvaWQgcnVuVGVzdChUZXN0U2hlbGwmIHNoZWxsLCBUZXN0UGFyYW1z
JiBwYXJhbXMsIGNvbnN0IHN0cmluZyYgdGVzdE5hbWUpCitzdGF0aWMgdm9pZCBydW5UZXN0KFRl
c3RTaGVsbCYgc2hlbGwsIFRlc3RQYXJhbXMmIHBhcmFtcywgY29uc3Qgc3RyaW5nJiBpbnB1dExp
bmUpCiB7CiAgICAgaW50IG9sZFRpbWVvdXRNc2VjID0gc2hlbGwubGF5b3V0VGVzdFRpbWVvdXQo
KTsKLSAgICBwYXJhbXMucGl4ZWxIYXNoID0gIiI7Ci0gICAgc3RyaW5nIHBhdGhPclVSTCA9IHRl
c3ROYW1lOwotICAgIHN0cmluZzo6c2l6ZV90eXBlIHNlcGFyYXRvclBvc2l0aW9uID0gcGF0aE9y
VVJMLmZpbmQoIiciKTsKLSAgICBpZiAoc2VwYXJhdG9yUG9zaXRpb24gIT0gc3RyaW5nOjpucG9z
KSB7Ci0gICAgICAgIHBhcmFtcy5waXhlbEhhc2ggPSBwYXRoT3JVUkwuc3Vic3RyKHNlcGFyYXRv
clBvc2l0aW9uICsgMSk7Ci0gICAgICAgIHBhdGhPclVSTC5lcmFzZShzZXBhcmF0b3JQb3NpdGlv
bik7Ci0gICAgfQotICAgIHBhcmFtcy50ZXN0VXJsID0gd2Via2l0X3N1cHBvcnQ6OkNyZWF0ZVVS
TEZvclBhdGhPclVSTChwYXRoT3JVUkwpOworICAgIFRlc3RDb21tYW5kIGNvbW1hbmQgPSBwYXJz
ZUlucHV0TGluZShpbnB1dExpbmUpOworICAgIHBhcmFtcy50ZXN0VXJsID0gd2Via2l0X3N1cHBv
cnQ6OkNyZWF0ZVVSTEZvclBhdGhPclVSTChjb21tYW5kLnBhdGhPclVSTCk7CisgICAgcGFyYW1z
LnBpeGVsSGFzaCA9IGNvbW1hbmQuc2hvdWxkRHVtcFBpeGVsczsKICAgICB3ZWJraXRfc3VwcG9y
dDo6U2V0Q3VycmVudERpcmVjdG9yeUZvckZpbGVVUkwocGFyYW1zLnRlc3RVcmwpOwogICAgIHY4
OjpWODo6U2V0RmxhZ3NGcm9tU3RyaW5nKHNoZWxsLmphdmFTY3JpcHRGbGFncygpLmNfc3RyKCks
IHNoZWxsLmphdmFTY3JpcHRGbGFncygpLmxlbmd0aCgpKTsKICAgICBpZiAoc2hlbGwuc3RyZXNz
T3B0KCkgfHwgc2hlbGwuc3RyZXNzRGVvcHQoKSkgewpAQCAtMTA4LDExICsxMDMsMTEgQEAgc3Rh
dGljIHZvaWQgcnVuVGVzdChUZXN0U2hlbGwmIHNoZWxsLCBUZXN0UGFyYW1zJiBwYXJhbXMsIGNv
bnN0IHN0cmluZyYgdGVzdE5hbWUKICAgICAgICAgICBib29sIGlzTGFzdExvYWQgPSAoaSA9PSAo
djg6OlRlc3Rpbmc6OkdldFN0cmVzc1J1bnMoKSAtIDEpKTsKICAgICAgICAgICBzaGVsbC5zZXRE
dW1wV2hlbkZpbmlzaGVkKGlzTGFzdExvYWQpOwogICAgICAgICAgIHNoZWxsLnJlc2V0VGVzdENv
bnRyb2xsZXIoKTsKLSAgICAgICAgICBzaGVsbC5ydW5GaWxlVGVzdChwYXJhbXMpOworICAgICAg
ICAgIHNoZWxsLnJ1bkZpbGVUZXN0KHBhcmFtcywgY29tbWFuZC5zaG91bGREdW1wUGl4ZWxzKTsK
ICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgc2hlbGwucmVzZXRUZXN0Q29udHJvbGxlcigp
OwotICAgICAgc2hlbGwucnVuRmlsZVRlc3QocGFyYW1zKTsKKyAgICAgIHNoZWxsLnJ1bkZpbGVU
ZXN0KHBhcmFtcywgY29tbWFuZC5zaG91bGREdW1wUGl4ZWxzKTsKICAgICB9CiAgICAgc2hlbGwu
c2V0TGF5b3V0VGVzdFRpbWVvdXQob2xkVGltZW91dE1zZWMpOwogfQpAQCAtMTQ2LDggKzE0MSw2
IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAgICAgICAgICAgICBzZXJ2ZXJN
b2RlID0gdHJ1ZTsKICAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uTm90cmVlKQog
ICAgICAgICAgICAgcGFyYW1zLmR1bXBUcmVlID0gZmFsc2U7Ci0gICAgICAgIGVsc2UgaWYgKGFy
Z3VtZW50ID09IG9wdGlvblBpeGVsVGVzdHMpCi0gICAgICAgICAgICBwYXJhbXMuZHVtcFBpeGVs
cyA9IHRydWU7CiAgICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvbkRlYnVnUmVuZGVy
VHJlZSkKICAgICAgICAgICAgIHBhcmFtcy5kZWJ1Z1JlbmRlclRyZWUgPSB0cnVlOwogICAgICAg
ICBlbHNlIGlmIChhcmd1bWVudCA9PSBvcHRpb25EZWJ1Z0xheWVyVHJlZSkKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCmluZGV4IGYxMjJlMWQyYmVlMzJhNTQx
MTVhMzMzZWFmMGJkZWI2OWNlZWJhZGMuLmU1M2ExZjJkODc2M2YwNjQ0Y2MzYjYwN2Y2MTM5N2Ni
ZjZmZWViMjUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RT
aGVsbC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNw
cApAQCAtMTA2LDYgKzEwNiw3IEBAIFRlc3RTaGVsbDo6VGVzdFNoZWxsKCkKICAgICAsIG1fdGVz
dElzUHJlcGFyaW5nKGZhbHNlKQogICAgICwgbV9mb2N1c2VkV2lkZ2V0KDApCiAgICAgLCBtX2Rl
dlRvb2xzKDApCisgICAgLCBtX2R1bXBQaXhlbHNGb3JDdXJyZW50VGVzdChmYWxzZSkKICAgICAs
IG1fYWxsb3dFeHRlcm5hbFBhZ2VzKGZhbHNlKQogICAgICwgbV9hY2NlbGVyYXRlZENvbXBvc2l0
aW5nRm9yVmlkZW9FbmFibGVkKGZhbHNlKQogICAgICwgbV90aHJlYWRlZENvbXBvc2l0aW5nRW5h
YmxlZChmYWxzZSkKQEAgLTIzMiwxMyArMjMzLDE2IEBAIHZvaWQgVGVzdFNoZWxsOjpyZXNldFdl
YlNldHRpbmdzKFdlYlZpZXcmIHdlYlZpZXcpCiAgICAgbV9wcmVmcy5hcHBseVRvKCZ3ZWJWaWV3
KTsKIH0KIAotdm9pZCBUZXN0U2hlbGw6OnJ1bkZpbGVUZXN0KGNvbnN0IFRlc3RQYXJhbXMmIHBh
cmFtcykKK3ZvaWQgVGVzdFNoZWxsOjpydW5GaWxlVGVzdChjb25zdCBUZXN0UGFyYW1zJiBwYXJh
bXMsIGJvb2wgc2hvdWxkRHVtcFBpeGVscykKIHsKICAgICBBU1NFUlQocGFyYW1zLnRlc3RVcmwu
aXNWYWxpZCgpKTsKKyAgICBtX2R1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCA9IHNob3VsZER1bXBQ
aXhlbHM7CiAgICAgbV90ZXN0SXNQcmVwYXJpbmcgPSB0cnVlOwogICAgIG1fcGFyYW1zID0gcGFy
YW1zOwogICAgIHN0cmluZyB0ZXN0VXJsID0gbV9wYXJhbXMudGVzdFVybC5zcGVjKCk7CiAKKyAg
ICBtX2xheW91dFRlc3RDb250cm9sbGVyLT5zZXRTaG91bGRHZW5lcmF0ZVBpeGVsUmVzdWx0cyhz
aG91bGREdW1wUGl4ZWxzKTsKKwogICAgIGlmICh0ZXN0VXJsLmZpbmQoImxvYWRpbmcvIikgIT0g
c3RyaW5nOjpucG9zCiAgICAgICAgIHx8IHRlc3RVcmwuZmluZCgibG9hZGluZ1xcIikgIT0gc3Ry
aW5nOjpucG9zKQogICAgICAgICBtX2xheW91dFRlc3RDb250cm9sbGVyLT5zZXRTaG91bGREdW1w
RnJhbWVMb2FkQ2FsbGJhY2tzKHRydWUpOwpAQCAtNjAzLDcgKzYwNyw3IEBAIHZvaWQgVGVzdFNo
ZWxsOjpkdW1wKCkKICAgICBpZiAoZHVtcGVkQW55dGhpbmcgJiYgbV9wYXJhbXMucHJpbnRTZXBh
cmF0b3JzKQogICAgICAgICBtX3ByaW50ZXIuaGFuZGxlVGV4dEZvb3RlcigpOwogCi0gICAgaWYg
KG1fcGFyYW1zLmR1bXBQaXhlbHMgJiYgc2hvdWxkR2VuZXJhdGVQaXhlbFJlc3VsdHMpIHsKKyAg
ICBpZiAobV9kdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgJiYgc2hvdWxkR2VuZXJhdGVQaXhlbFJl
c3VsdHMpIHsKICAgICAgICAgLy8gSW1hZ2Ugb3V0cHV0OiB3ZSB3cml0ZSB0aGUgaW1hZ2UgZGF0
YSB0byB0aGUgZmlsZSBnaXZlbiBvbiB0aGUKICAgICAgICAgLy8gY29tbWFuZCBsaW5lIChmb3Ig
dGhlIGR1bXAgcGl4ZWxzIGFyZ3VtZW50KSwgYW5kIHRoZSBNRDUgc3VtIHRvCiAgICAgICAgIC8v
IHN0ZG91dC4KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RT
aGVsbC5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgKaW5kZXgg
ZGJmYzFkMWM5YTEzYjFjY2MxZWQ4Y2Y0YWU4YmY5OGZlYjYxYjk0Mi4uMmU2NWMwZGRkYzhjYjc3
MTVhMTVmMGI5MzBkODRkOGJmMzNhMDE0YSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdFNoZWxsLmgKQEAgLTYzLDcgKzYzLDYgQEAgY2xhc3MgV2ViUGVybWlzc2lvbnM7CiAK
IHN0cnVjdCBUZXN0UGFyYW1zIHsKICAgICBib29sIGR1bXBUcmVlOwotICAgIGJvb2wgZHVtcFBp
eGVsczsKICAgICBib29sIGRlYnVnUmVuZGVyVHJlZTsKICAgICBib29sIGRlYnVnTGF5ZXJUcmVl
OwogICAgIGJvb2wgcHJpbnRTZXBhcmF0b3JzOwpAQCAtNzIsNyArNzEsNiBAQCBzdHJ1Y3QgVGVz
dFBhcmFtcyB7CiAKICAgICBUZXN0UGFyYW1zKCkKICAgICAgICAgOiBkdW1wVHJlZSh0cnVlKQot
ICAgICAgICAsIGR1bXBQaXhlbHMoZmFsc2UpCiAgICAgICAgICwgZGVidWdSZW5kZXJUcmVlKGZh
bHNlKQogICAgICAgICAsIGRlYnVnTGF5ZXJUcmVlKGZhbHNlKQogICAgICAgICAsIHByaW50U2Vw
YXJhdG9ycyhmYWxzZSkgeyB9CkBAIC0xMDMsNyArMTAxLDcgQEAgcHVibGljOgogICAgIFdlYlBl
cm1pc3Npb25zKiB3ZWJQZXJtaXNzaW9ucygpIHsgcmV0dXJuIG1fd2ViUGVybWlzc2lvbnMuZ2V0
KCk7IH0KIAogICAgIHZvaWQgYmluZEpTT2JqZWN0c1RvV2luZG93KFdlYktpdDo6V2ViRnJhbWUq
KTsKLSAgICB2b2lkIHJ1bkZpbGVUZXN0KGNvbnN0IFRlc3RQYXJhbXMmKTsKKyAgICB2b2lkIHJ1
bkZpbGVUZXN0KGNvbnN0IFRlc3RQYXJhbXMmLCBib29sIHNob3VsZER1bXBQaXhlbFRlc3RzKTsK
ICAgICB2b2lkIGNhbGxKU0dDKCk7CiAgICAgdm9pZCByZXNldFRlc3RDb250cm9sbGVyKCk7CiAg
ICAgdm9pZCB3YWl0VGVzdEZpbmlzaGVkKCk7CkBAIC0yMjQsNiArMjIyLDcgQEAgcHJpdmF0ZToK
ICNlbmRpZgogCiAgICAgVGVzdFBhcmFtcyBtX3BhcmFtczsKKyAgICBib29sIG1fZHVtcFBpeGVs
c0ZvckN1cnJlbnRUZXN0OwogICAgIGludCBtX3RpbWVvdXQ7IC8vIHRpbWVvdXQgdmFsdWUgaW4g
bWlsbGlzZWNvbmQKICAgICBib29sIG1fYWxsb3dFeHRlcm5hbFBhZ2VzOwogICAgIGJvb2wgbV9h
Y2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yVmlkZW9FbmFibGVkOwpkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvZWZsL0NNYWtlTGlzdHMudHh0IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
ZWZsL0NNYWtlTGlzdHMudHh0CmluZGV4IGUxZGFjZjkwMWJhMDYyNWE1YTFlODA3ZWM2Yjk0NTM0
MzQ5ODRjYWEuLjA2N2RiZDMyYjdhYTkxZjVhNTQ3Y2I3YmU1N2ZmNGJkZjU5OTkzMjkgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4dAorKysgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VMaXN0cy50eHQKQEAgLTEsNCArMSw1IEBACiBTRVQo
RHVtcFJlbmRlclRyZWVfU09VUkNFUworICAgICR7VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJlZS9E
dW1wUmVuZGVyVHJlZUNvbW1vbi5jcHAKICAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUv
Q3ljbGljUmVkdW5kYW5jeUNoZWNrLmNwcAogICAgICR7VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJl
ZS9HQ0NvbnRyb2xsZXIuY3BwCiAgICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL0xheW91
dFRlc3RDb250cm9sbGVyLmNwcApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZs
L0R1bXBSZW5kZXJUcmVlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVy
VHJlZS5jcHAKaW5kZXggYzJjOWQ3MWMwYzUxNWNiMDhjZDQxMmQ0MmFkZDBkMTA1Y2E5NzU5Yy4u
NzYxM2Y0ZTRmZjBlNTY1MzU2Mjg4ZDRjN2Q0NGZmMzlhODJlOTYzZSAxMDA2NDQKLS0tIGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlLmNwcAorKysgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWUuY3BwCkBAIC02NCw3ICs2NCw3IEBAIGV4dGVy
biBFd2tfSGlzdG9yeV9JdGVtKiBwcmV2VGVzdEJGSXRlbTsKIFJlZlB0cjxMYXlvdXRUZXN0Q29u
dHJvbGxlcj4gZ0xheW91dFRlc3RDb250cm9sbGVyOwogdm9sYXRpbGUgYm9vbCBkb25lID0gZmFs
c2U7CiAKLXN0YXRpYyBpbnQgZHVtcFBpeGVscyA9IGZhbHNlOworc3RhdGljIGJvb2wgZHVtcFBp
eGVsc0ZvckN1cnJlbnRUZXN0Owogc3RhdGljIGludCBkdW1wVHJlZSA9IHRydWU7CiBzdGF0aWMg
aW50IHByaW50U2VwYXJhdG9ycyA9IHRydWU7CiBzdGF0aWMgaW50IHVzZVgxMVdpbmRvdyA9IGZh
bHNlOwpAQCAtMTkyLDcgKzE5Miw2IEBAIHN0YXRpYyBib29sIHBhcnNlQ29tbWFuZExpbmVPcHRp
b25zKGludCBhcmdjLCBjaGFyKiogYXJndikKIHsKICAgICBzdGF0aWMgY29uc3Qgb3B0aW9uIG9w
dGlvbnNbXSA9IHsKICAgICAgICAgeyJub3RyZWUiLCBub19hcmd1bWVudCwgJmR1bXBUcmVlLCBm
YWxzZX0sCi0gICAgICAgIHsicGl4ZWwtdGVzdHMiLCBub19hcmd1bWVudCwgJmR1bXBQaXhlbHMs
IHRydWV9LAogICAgICAgICB7InRyZWUiLCBub19hcmd1bWVudCwgJmR1bXBUcmVlLCB0cnVlfSwK
ICAgICAgICAgeyJndWkiLCBub19hcmd1bWVudCwgJnVzZVgxMVdpbmRvdywgdHJ1ZX0sCiAgICAg
ICAgIHswLCAwLCAwLCAwfQpAQCAtMjEwLDMyICsyMDksNiBAQCBzdGF0aWMgYm9vbCBwYXJzZUNv
bW1hbmRMaW5lT3B0aW9ucyhpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXN0YXRpYyBTdHJpbmcgZ2V0RmluYWxUZXN0VVJMKGNvbnN0IFN0cmluZyYgdGVzdFVS
TCkKLXsKLSAgICBjb25zdCBzaXplX3QgaGFzaFNlcGFyYXRvclBvcyA9IHRlc3RVUkwuZmluZCgi
JyIpOwotICAgIGlmIChoYXNoU2VwYXJhdG9yUG9zICE9IG5vdEZvdW5kKQotICAgICAgICByZXR1
cm4gZ2V0RmluYWxUZXN0VVJMKHRlc3RVUkwubGVmdChoYXNoU2VwYXJhdG9yUG9zKSk7Ci0KLSAg
ICAvLyBDb252ZXJ0IHRoZSBwYXRoIGludG8gYSBmdWxsIGZpbGUgVVJMIGlmIGl0IGRvZXMgbm90
IGxvb2sKLSAgICAvLyBsaWtlIGFuIEhUVFAvUyBVUkwgKGRvZXNuJ3Qgc3RhcnQgd2l0aCBodHRw
Oi8vIG9yIGh0dHBzOi8vKS4KLSAgICBpZiAoIXRlc3RVUkwuc3RhcnRzV2l0aCgiaHR0cDovLyIp
ICYmICF0ZXN0VVJMLnN0YXJ0c1dpdGgoImh0dHBzOi8vIikpIHsKLSAgICAgICAgY2hhciogY0Zp
bGVQYXRoID0gZWNvcmVfZmlsZV9yZWFscGF0aCh0ZXN0VVJMLnV0ZjgoKS5kYXRhKCkpOwotICAg
ICAgICBjb25zdCBTdHJpbmcgZmlsZVBhdGggPSBTdHJpbmc6OmZyb21VVEY4KGNGaWxlUGF0aCk7
Ci0gICAgICAgIGZyZWUoY0ZpbGVQYXRoKTsKLQotICAgICAgICBpZiAoZWNvcmVfZmlsZV9leGlz
dHMoZmlsZVBhdGgudXRmOCgpLmRhdGEoKSkpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCJm
aWxlOi8vIikgKyBmaWxlUGF0aDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdGVzdFVSTDsKLX0KLQot
c3RhdGljIFN0cmluZyBnZXRFeHBlY3RlZFBpeGVsSGFzaChjb25zdCBTdHJpbmcmIHRlc3RVUkwp
Ci17Ci0gICAgY29uc3Qgc2l6ZV90IGhhc2hTZXBhcmF0b3JQb3MgPSB0ZXN0VVJMLmZpbmQoIici
KTsKLSAgICByZXR1cm4gKGhhc2hTZXBhcmF0b3JQb3MgIT0gbm90Rm91bmQpID8gdGVzdFVSTC5z
dWJzdHJpbmcoaGFzaFNlcGFyYXRvclBvcyArIDEpIDogU3RyaW5nKCk7Ci19Ci0KIHN0YXRpYyBp
bmxpbmUgYm9vbCBpc0dsb2JhbEhpc3RvcnlUZXN0KGNvbnN0IFN0cmluZyYgY1Rlc3RQYXRoT3JV
UkwpCiB7CiAgICAgcmV0dXJuIGNUZXN0UGF0aE9yVVJMLmNvbnRhaW5zKCIvZ2xvYmFsaGlzdG9y
eS8iKTsKQEAgLTI2NywxMyArMjQwLDEzIEBAIHN0YXRpYyB2b2lkIGNyZWF0ZUxheW91dFRlc3RD
b250cm9sbGVyKGNvbnN0IFN0cmluZyYgdGVzdFVSTCwgY29uc3QgU3RyaW5nJiBleHBlCiAgICAg
fQogfQogCi1zdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IGNoYXIqIGNUZXN0UGF0aE9yVVJMKQor
c3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBjaGFyKiBpbnB1dExpbmUpCiB7Ci0gICAgY29uc3Qg
U3RyaW5nIHRlc3RQYXRoT3JVUkwgPSBTdHJpbmc6OmZyb21VVEY4KGNUZXN0UGF0aE9yVVJMKTsK
LSAgICBBU1NFUlQoIXRlc3RQYXRoT3JVUkwuaXNFbXB0eSgpKTsKLQotICAgIGNvbnN0IFN0cmlu
ZyB0ZXN0VVJMID0gZ2V0RmluYWxUZXN0VVJMKHRlc3RQYXRoT3JVUkwpOwotICAgIGNvbnN0IFN0
cmluZyBleHBlY3RlZFBpeGVsSGFzaCA9IGdldEV4cGVjdGVkUGl4ZWxIYXNoKHRlc3RQYXRoT3JV
UkwpOworICAgIFRlc3RDb21tYW5kIGNvbW1hbmQgPSBwYXJzZUlucHV0TGluZShpbnB1dExpbmUp
OworICAgIGNvbnN0IFN0cmluZyB0ZXN0VVJMKGNvbW1hbmQucGF0aE9yVVJMLmNfc3RyKCkpOwor
ICAgIEFTU0VSVCghdGVzdFVSTC5pc0VtcHR5KCkpOworICAgIGR1bXBQaXhlbHNGb3JDdXJyZW50
VGVzdCA9IGNvbW1hbmQuc2hvdWxkRHVtcFBpeGVsczsKKyAgICBjb25zdCBTdHJpbmcgZXhwZWN0
ZWRQaXhlbEhhc2goY29tbWFuZC5leHBlY3RlZFBpeGVsSGFzaC5jX3N0cigpKTsKIAogICAgIGJy
b3dzZXItPnJlc2V0RGVmYXVsdHNUb0NvbnNpc3RlbnRWYWx1ZXMoKTsKICAgICBjcmVhdGVMYXlv
dXRUZXN0Q29udHJvbGxlcih0ZXN0VVJMLCBleHBlY3RlZFBpeGVsSGFzaCk7CkBAIC0zNTEsNyAr
MzI0LDcgQEAgc3RhdGljIGJvb2wgc2hvdWxkRHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24oKQogCiBz
dGF0aWMgYm9vbCBzaG91bGREdW1wUGl4ZWxzQW5kQ29tcGFyZVdpdGhFeHBlY3RlZCgpCiB7Ci0g
ICAgcmV0dXJuIGR1bXBQaXhlbHMgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5nZW5lcmF0ZVBp
eGVsUmVzdWx0cygpICYmICFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBET01Bc1dlYkFyY2hp
dmUoKSAmJiAhZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wU291cmNlQXNXZWJBcmNoaXZlKCk7
CisgICAgcmV0dXJuIGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCAmJiBnTGF5b3V0VGVzdENvbnRy
b2xsZXItPmdlbmVyYXRlUGl4ZWxSZXN1bHRzKCkgJiYgIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+
ZHVtcERPTUFzV2ViQXJjaGl2ZSgpICYmICFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBTb3Vy
Y2VBc1dlYkFyY2hpdmUoKTsKIH0KIAogc3RhdGljIGJvb2wgc2hvdWxkRHVtcEJhY2tGb3J3YXJk
TGlzdCgpCkBAIC00NTgsNyArNDMxLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2
KQogICAgICAgICBwcmludFNlcGFyYXRvcnMgPSB0cnVlOwogICAgICAgICBydW5UZXN0aW5nU2Vy
dmVyTG9vcCgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHByaW50U2VwYXJhdG9ycyA9IChvcHRp
bmQgPCBhcmdjIC0gMSB8fCAoZHVtcFBpeGVscyAmJiBkdW1wVHJlZSkpOworICAgICAgICBwcmlu
dFNlcGFyYXRvcnMgPSAob3B0aW5kIDwgYXJnYyAtIDEgfHwgKGR1bXBQaXhlbHNGb3JDdXJyZW50
VGVzdCAmJiBkdW1wVHJlZSkpOwogICAgICAgICBmb3IgKGludCBpID0gb3B0aW5kOyBpICE9IGFy
Z2M7ICsraSkKICAgICAgICAgICAgIHJ1blRlc3QoYXJndltpXSk7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcCBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAKaW5kZXggNTdjZDA1OTE3ZTgyMjU1
OGI0ODM3NmUwMTAyZDgwMGE2YmNmY2NkYS4uZWJkYTVjZmIyMzE4OWZjMmE3OTVjNGM5ODA1ZTBi
Y2JlYWY1Y2Y4NyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5k
ZXJUcmVlLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUu
Y3BwCkBAIC03Myw3ICs3Myw3IEBAIGV4dGVybiBnY2hhciogd2Via2l0X3dlYl9mcmFtZV9nZXRf
cmVzcG9uc2VfbWltZV90eXBlKFdlYktpdFdlYkZyYW1lKiBmcmFtZSk7CiAKIHZvbGF0aWxlIGJv
b2wgZG9uZTsKIHN0YXRpYyBib29sIHByaW50U2VwYXJhdG9yczsKLXN0YXRpYyBpbnQgZHVtcFBp
eGVsczsKK3N0YXRpYyBib29sIGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdDsKIHN0YXRpYyBpbnQg
ZHVtcFRyZWUgPSAxOwogc3RhdGljIGludCB1c2VUaW1lb3V0V2F0Y2hkb2cgPSAxOwogCkBAIC01
NDQsNyArNTQ0LDYgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUdsb2JhbHNGcm9tQ29tbWFuZExp
bmVPcHRpb25zKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CiAgICAgc3RydWN0IG9wdGlvbiBv
cHRpb25zW10gPSB7CiAgICAgICAgIHsibm90cmVlIiwgbm9fYXJndW1lbnQsICZkdW1wVHJlZSwg
ZmFsc2V9LAotICAgICAgICB7InBpeGVsLXRlc3RzIiwgbm9fYXJndW1lbnQsICZkdW1wUGl4ZWxz
LCB0cnVlfSwKICAgICAgICAgeyJ0cmVlIiwgbm9fYXJndW1lbnQsICZkdW1wVHJlZSwgdHJ1ZX0s
CiAgICAgICAgIHsibm8tdGltZW91dCIsIG5vX2FyZ3VtZW50LCAmdXNlVGltZW91dFdhdGNoZG9n
LCBmYWxzZX0sCiAgICAgICAgIHtOVUxMLCAwLCBOVUxMLCAwfQpAQCAtNjI0LDcgKzYyMyw3IEBA
IHZvaWQgZHVtcCgpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoZHVtcFBpeGVscworICAg
IGlmIChkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QKICAgICAgJiYgZ0xheW91dFRlc3RDb250cm9s
bGVyLT5nZW5lcmF0ZVBpeGVsUmVzdWx0cygpCiAgICAgICYmICFnTGF5b3V0VGVzdENvbnRyb2xs
ZXItPmR1bXBET01Bc1dlYkFyY2hpdmUoKQogICAgICAmJiAhZ0xheW91dFRlc3RDb250cm9sbGVy
LT5kdW1wU291cmNlQXNXZWJBcmNoaXZlKCkpIHsKQEAgLTY4NywxOCArNjg2LDEzIEBAIHN0YXRp
YyB2b2lkIHNlbmRQaXhlbFJlc3VsdHNFT0YoKQogICAgIGZmbHVzaChzdGRlcnIpOwogfQogCi1z
dGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYgdGVzdFBhdGhPclVSTCkKK3N0YXRpYyB2
b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBpbnB1dExpbmUpCiB7CiAgICAgQVNTRVJUKCF0ZXN0
UGF0aE9yVVJMLmVtcHR5KCkpOwogCi0gICAgLy8gTG9vayBmb3IgIiciIGFzIGEgc2VwYXJhdG9y
IGJldHdlZW4gdGhlIHBhdGggb3IgVVJMLCBhbmQgdGhlIHBpeGVsIGR1bXAgaGFzaCB0aGF0IGZv
bGxvd3MuCi0gICAgc3RyaW5nIHRlc3RVUkwodGVzdFBhdGhPclVSTCk7Ci0gICAgc3RyaW5nIGV4
cGVjdGVkUGl4ZWxIYXNoOwotICAgIHNpemVfdCBzZXBhcmF0b3JQb3MgPSB0ZXN0VVJMLmZpbmQo
IiciKTsKLSAgICBpZiAoc2VwYXJhdG9yUG9zICE9IHN0cmluZzo6bnBvcykgewotICAgICAgICB0
ZXN0VVJMID0gc3RyaW5nKHRlc3RQYXRoT3JVUkwsIDAsIHNlcGFyYXRvclBvcyk7Ci0gICAgICAg
IGV4cGVjdGVkUGl4ZWxIYXNoID0gc3RyaW5nKHRlc3RQYXRoT3JVUkwsIHNlcGFyYXRvclBvcyAr
IDEpOwotICAgIH0KKyAgICBUZXN0Q29tbWFuZCBjb21tYW5kID0gcGFyc2VJbnB1dExpbmUoaW5w
dXRMaW5lKTsKKyAgICBzdHJpbmcmIHRlc3RVUkwgPSBjb21tYW5kLnBhdGhPclVSTDsKKyAgICBk
dW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgPSBjb21tYW5kLnNob3VsZER1bXBQaXhlbHM7CiAKICAg
ICAvLyBDb252ZXJ0IHRoZSBwYXRoIGludG8gYSBmdWxsIGZpbGUgVVJMIGlmIGl0IGRvZXMgbm90
IGxvb2sKICAgICAvLyBsaWtlIGFuIEhUVFAvUyBVUkwgKGRvZXNuJ3Qgc3RhcnQgd2l0aCBodHRw
Oi8vIG9yIGh0dHBzOi8vKS4KQEAgLTcxMiw3ICs3MDYsNyBAQCBzdGF0aWMgdm9pZCBydW5UZXN0
KGNvbnN0IHN0cmluZyYgdGVzdFBhdGhPclVSTCkKIAogICAgIHJlc2V0RGVmYXVsdHNUb0NvbnNp
c3RlbnRWYWx1ZXMoKTsKIAotICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlciA9IExheW91dFRlc3RD
b250cm9sbGVyOjpjcmVhdGUodGVzdFVSTCwgZXhwZWN0ZWRQaXhlbEhhc2gpOworICAgIGdMYXlv
dXRUZXN0Q29udHJvbGxlciA9IExheW91dFRlc3RDb250cm9sbGVyOjpjcmVhdGUodGVzdFVSTCwg
Y29tbWFuZC5leHBlY3RlZFBpeGVsSGFzaCk7CiAgICAgdG9wTG9hZGluZ0ZyYW1lID0gMDsKICAg
ICBkb25lID0gZmFsc2U7CiAKQEAgLTE0NDcsNyArMTQ0MSw3IEBAIGludCBtYWluKGludCBhcmdj
LCBjaGFyKiBhcmd2W10pCiAgICAgICAgIHByaW50U2VwYXJhdG9ycyA9IHRydWU7CiAgICAgICAg
IHJ1blRlc3RpbmdTZXJ2ZXJMb29wKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnRTZXBh
cmF0b3JzID0gKG9wdGluZCA8IGFyZ2MtMSB8fCAoZHVtcFBpeGVscyAmJiBkdW1wVHJlZSkpOwor
ICAgICAgICBwcmludFNlcGFyYXRvcnMgPSAob3B0aW5kIDwgYXJnYy0xIHx8IChkdW1wUGl4ZWxz
Rm9yQ3VycmVudFRlc3QgJiYgZHVtcFRyZWUpKTsKICAgICAgICAgZm9yIChpbnQgaSA9IG9wdGlu
ZDsgaSAhPSBhcmdjOyArK2kpCiAgICAgICAgICAgICBydW5UZXN0KGFyZ3ZbaV0pOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbSBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQppbmRleCBhYmJhNTM1
ZWRkYzg4YTM5NDkwMjk0ZmQ0NTFhMzkxOTY4ZmNjM2QxLi4zZjlkNDI2NjQ1MWZhY2JlMTE1MDk2
MjAzNTU5NzkwMzJiZWJlNmZiIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
RHVtcFJlbmRlclRyZWUubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5k
ZXJUcmVlLm1tCkBAIC0xNDAsNyArMTQwLDcgQEAgc3RhdGljIEhpc3RvcnlEZWxlZ2F0ZSAqaGlz
dG9yeURlbGVnYXRlOwogUG9saWN5RGVsZWdhdGUgKnBvbGljeURlbGVnYXRlOwogU3RvcmFnZVRy
YWNrZXJEZWxlZ2F0ZSAqc3RvcmFnZURlbGVnYXRlOwogCi1zdGF0aWMgaW50IGR1bXBQaXhlbHM7
CitzdGF0aWMgYm9vbCBkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3Q7CiBzdGF0aWMgaW50IHRocmVh
ZGVkOwogc3RhdGljIGludCBkdW1wVHJlZSA9IFlFUzsKIHN0YXRpYyBpbnQgdXNlVGltZW91dFdh
dGNoZG9nID0gWUVTOwpAQCAtNzgwLDcgKzc4MCw2IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVH
bG9iYWxzRnJvbUNvbW1hbmRMaW5lT3B0aW9ucyhpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltd
CiB7CiAgICAgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CiAgICAgICAgIHsibm90cmVlIiwg
bm9fYXJndW1lbnQsICZkdW1wVHJlZSwgTk99LAotICAgICAgICB7InBpeGVsLXRlc3RzIiwgbm9f
YXJndW1lbnQsICZkdW1wUGl4ZWxzLCBZRVN9LAogICAgICAgICB7InRyZWUiLCBub19hcmd1bWVu
dCwgJmR1bXBUcmVlLCBZRVN9LAogICAgICAgICB7InRocmVhZGVkIiwgbm9fYXJndW1lbnQsICZ0
aHJlYWRlZCwgWUVTfSwKICAgICAgICAgeyJjb21wbGV4LXRleHQiLCBub19hcmd1bWVudCwgJmZv
cmNlQ29tcGxleFRleHQsIFlFU30sCkBAIC04NDksNyArODQ4LDcgQEAgdm9pZCBkdW1wUmVuZGVy
VHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdKQogICAgIGluaXRpYWxpemVHbG9iYWxz
RnJvbUNvbW1hbmRMaW5lT3B0aW9ucyhhcmdjLCBhcmd2KTsKICAgICBwcmVwYXJlQ29uc2lzdGVu
dFRlc3RpbmdFbnZpcm9ubWVudCgpOwogICAgIGFkZFRlc3RQbHVnaW5zVG9QbHVnaW5TZWFyY2hQ
YXRoKGFyZ3ZbMF0pOwotICAgIGlmIChkdW1wUGl4ZWxzKQorICAgIGlmIChkdW1wUGl4ZWxzRm9y
Q3VycmVudFRlc3QpCiAgICAgICAgIGluc3RhbGxTaWduYWxIYW5kbGVycygpOwogCiAgICAgaWYg
KGZvcmNlQ29tcGxleFRleHQpCkBAIC04NzQsNyArODczLDcgQEAgdm9pZCBkdW1wUmVuZGVyVHJl
ZShpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdKQogICAgICAgICBwcmludFNlcGFyYXRvcnMg
PSBZRVM7CiAgICAgICAgIHJ1blRlc3RpbmdTZXJ2ZXJMb29wKCk7CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgcHJpbnRTZXBhcmF0b3JzID0gKG9wdGluZCA8IGFyZ2MtMSB8fCAoZHVtcFBpeGVscyAm
JiBkdW1wVHJlZSkpOworICAgICAgICBwcmludFNlcGFyYXRvcnMgPSAob3B0aW5kIDwgYXJnYyAt
IDEgfHwgKGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCAmJiBkdW1wVHJlZSkpOwogICAgICAgICBm
b3IgKGludCBpID0gb3B0aW5kOyBpICE9IGFyZ2M7ICsraSkKICAgICAgICAgICAgIHJ1blRlc3Qo
YXJndltpXSk7CiAgICAgfQpAQCAtMTE5NSw3ICsxMTk0LDcgQEAgdm9pZCBkdW1wKCkKICAgICAg
ICAgfSAgICAgICAgICAgIAogICAgIH0KIAotICAgIGlmIChkdW1wUGl4ZWxzICYmIGdMYXlvdXRU
ZXN0Q29udHJvbGxlci0+Z2VuZXJhdGVQaXhlbFJlc3VsdHMoKSkKKyAgICBpZiAoZHVtcFBpeGVs
c0ZvckN1cnJlbnRUZXN0ICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+Z2VuZXJhdGVQaXhlbFJl
c3VsdHMoKSkKICAgICAgICAgLy8gRklYTUU6IHdoZW4gaXNQcmludGluZyBpcyBzZXQsIGR1bXAg
dGhlIGltYWdlIHdpdGggcGFnZSBzZXBhcmF0b3JzLgogICAgICAgICBkdW1wV2ViVmlld0FzUGl4
ZWxzQW5kQ29tcGFyZVdpdGhFeHBlY3RlZChnTGF5b3V0VGVzdENvbnRyb2xsZXItPmV4cGVjdGVk
UGl4ZWxIYXNoKCkpOwogCkBAIC0xMjc2LDE5ICsxMjc1LDEzIEBAIHN0YXRpYyB2b2lkIHJlc2V0
V2ViVmlld1RvQ29uc2lzdGVudFN0YXRlQmVmb3JlVGVzdGluZygpCiAgICAgW21haW5GcmFtZSBf
Y2xlYXJPcGVuZXJdOwogfQogCi1zdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYgdGVz
dFBhdGhPclVSTCkKK3N0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBpbnB1dExpbmUp
CiB7Ci0gICAgQVNTRVJUKCF0ZXN0UGF0aE9yVVJMLmVtcHR5KCkpOwotICAgIAotICAgIC8vIExv
b2sgZm9yICInIiBhcyBhIHNlcGFyYXRvciBiZXR3ZWVuIHRoZSBwYXRoIG9yIFVSTCwgYW5kIHRo
ZSBwaXhlbCBkdW1wIGhhc2ggdGhhdCBmb2xsb3dzLgotICAgIHN0cmluZyBwYXRoT3JVUkwodGVz
dFBhdGhPclVSTCk7Ci0gICAgc3RyaW5nIGV4cGVjdGVkUGl4ZWxIYXNoOwotICAgIAotICAgIHNp
emVfdCBzZXBhcmF0b3JQb3MgPSBwYXRoT3JVUkwuZmluZCgiJyIpOwotICAgIGlmIChzZXBhcmF0
b3JQb3MgIT0gc3RyaW5nOjpucG9zKSB7Ci0gICAgICAgIHBhdGhPclVSTCA9IHN0cmluZyh0ZXN0
UGF0aE9yVVJMLCAwLCBzZXBhcmF0b3JQb3MpOwotICAgICAgICBleHBlY3RlZFBpeGVsSGFzaCA9
IHN0cmluZyh0ZXN0UGF0aE9yVVJMLCBzZXBhcmF0b3JQb3MgKyAxKTsKLSAgICB9CisgICAgQVNT
RVJUKCFpbnB1dExpbmUuZW1wdHkoKSk7CisKKyAgICBUZXN0Q29tbWFuZCBjb21tYW5kID0gcGFy
c2VJbnB1dExpbmUoaW5wdXRMaW5lKTsKKyAgICBjb25zdCBzdHJpbmcmIHBhdGhPclVSTCA9IGNv
bW1hbmQucGF0aE9yVVJMOworICAgIGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCA9IGNvbW1hbmQu
c2hvdWxkRHVtcFBpeGVsczsKIAogICAgIE5TU3RyaW5nICpwYXRoT3JVUkxTdHJpbmcgPSBbTlNT
dHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6cGF0aE9yVVJMLmNfc3RyKCldOwogICAgIGlmICgh
cGF0aE9yVVJMU3RyaW5nKSB7CkBAIC0xMzEwLDcgKzEzMDMsNyBAQCBzdGF0aWMgdm9pZCBydW5U
ZXN0KGNvbnN0IHN0cmluZyYgdGVzdFBhdGhPclVSTCkKICAgICAKICAgICByZXNldFdlYlZpZXdU
b0NvbnNpc3RlbnRTdGF0ZUJlZm9yZVRlc3RpbmcoKTsKIAotICAgIGdMYXlvdXRUZXN0Q29udHJv
bGxlciA9IExheW91dFRlc3RDb250cm9sbGVyOjpjcmVhdGUodGVzdFVSTCwgZXhwZWN0ZWRQaXhl
bEhhc2gpOworICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlciA9IExheW91dFRlc3RDb250cm9sbGVy
OjpjcmVhdGUodGVzdFVSTCwgY29tbWFuZC5leHBlY3RlZFBpeGVsSGFzaCk7CiAgICAgdG9wTG9h
ZGluZ0ZyYW1lID0gbmlsOwogICAgIEFTU0VSVCghZHJhZ2dpbmdJbmZvKTsgLy8gdGhlIHByZXZp
b3VzIHRlc3Qgc2hvdWxkIGhhdmUgY2FsbGVkIGV2ZW50U2VuZGVyLm1vdXNlVXAgdG8gZHJvcCEK
ICAgICByZWxlYXNlQW5kWmVybygmZHJhZ2dpbmdJbmZvKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlLnBybyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L3F0L0R1bXBSZW5kZXJUcmVlLnBybwppbmRleCBmNDdmYjQzNDRiOWVmODNhNWFhNDZiYjU2ODNk
OTIzMTQ5NGFhMTI1Li44MzM4NzBiY2FjOWE4MmVkY2VlODFlZDVkYmEzMTkxMGFjZjBmMGYyIDEw
MDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5wcm8KKysr
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvCkBAIC0yNSw2ICsy
NSw3IEBAIGNvbnRhaW5zKERFRklORVMsIEhBVkVfRk9OVENPTkZJRz0xKTogUEtHQ09ORklHICs9
IGZvbnRjb25maWcKIAogSEVBREVSUyArPSBcCiAgICAgJCRQV0QvLi4vV29ya1F1ZXVlLmggXAor
ICAgICQkUFdELy4uL0R1bXBSZW5kZXJUcmVlLmggXAogICAgIER1bXBSZW5kZXJUcmVlUXQuaCBc
CiAgICAgRXZlbnRTZW5kZXJRdC5oIFwKICAgICBUZXh0SW5wdXRDb250cm9sbGVyUXQuaCBcCkBA
IC0zNiw2ICszNyw3IEBAIEhFQURFUlMgKz0gXAogCiBTT1VSQ0VTICs9IFwKICAgICAkJFBXRC8u
Li9Xb3JrUXVldWUuY3BwIFwKKyAgICAkJFBXRC8uLi9EdW1wUmVuZGVyVHJlZUNvbW1vbi5jcHAg
XAogICAgIER1bXBSZW5kZXJUcmVlUXQuY3BwIFwKICAgICBFdmVudFNlbmRlclF0LmNwcCBcCiAg
ICAgVGV4dElucHV0Q29udHJvbGxlclF0LmNwcCBcCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0
L0R1bXBSZW5kZXJUcmVlUXQuY3BwCmluZGV4IDBlY2Y2MjJmM2Y4ZGRhNTZjNGM4OGNlZmNmMDhh
M2M5OGNmMjM3YzQuLjVhNWNiOTZhZGVjOTNjZDBlYjY4NTAwZTc2ZWMzMWVmZGRhMDk3YWYgMTAw
NzU1Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwCisr
KyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwCkBAIC0zMCw2
ICszMCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkR1bXBSZW5k
ZXJUcmVlLmgiCiAKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZVF0LmgiCiAjaW5jbHVkZSAiRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQuaCIKQEAgLTY5MCw0NCArNjkxLDI3IEBAIHZvaWQgRHVtcFJl
bmRlclRyZWU6OmxvYWROZXh0VGVzdEluU3RhbmRBbG9uZU1vZGUoKQogCiB2b2lkIER1bXBSZW5k
ZXJUcmVlOjpwcm9jZXNzTGluZShjb25zdCBRU3RyaW5nICZpbnB1dCkKIHsKLSAgICBRU3RyaW5n
IGxpbmUgPSBpbnB1dDsKLQotICAgIG1fZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gZmFsc2U7
Ci0gICAgbV9leHBlY3RlZEhhc2ggPSBRU3RyaW5nKCk7Ci0gICAgLy8gc2luZ2xlIHF1b3RlIG1h
cmtzIHRoZSBwaXhlbCBkdW1wIGhhc2gKLSAgICBpbnQgaW5kZXhPZkZpcnN0U2VwYXJhdG9yID0g
bGluZS5pbmRleE9mKCdcJycpOwotICAgIGludCBpbmRleE9mU2Vjb25kU2VwYXJhdG9yID0gbGlu
ZS5pbmRleE9mKCdcJycsIGluZGV4T2ZGaXJzdFNlcGFyYXRvciArIDEpOwotICAgIGlmIChpbmRl
eE9mRmlyc3RTZXBhcmF0b3IgPiAtMSkgewotICAgICAgICBpbnQgaW5kZXhPZlBpeGVsSGFzaCA9
IGluZGV4T2ZGaXJzdFNlcGFyYXRvciArIDE7Ci0KLSAgICAgICAgLy8gTlJXVCBwYXNzZXMgLS1w
aXhlbC10ZXN0IGlmIHdlIHNob3VsZCBkdW1wIHBpeGVscyBmb3IgdGhlIHRlc3QuCi0gICAgICAg
IGNvbnN0IFFTdHJpbmcgZXhwZWN0ZWRBcmcoUUxhdGluMVN0cmluZygiLS1waXhlbC10ZXN0Iikp
OwotICAgICAgICBRU3RyaW5nIGFyZ1Rlc3QgPSBsaW5lLm1pZChpbmRleE9mRmlyc3RTZXBhcmF0
b3IgKyAxLCBleHBlY3RlZEFyZy5sZW5ndGgoKSk7Ci0gICAgICAgIGlmIChhcmdUZXN0ID09IGV4
cGVjdGVkQXJnKSB7Ci0gICAgICAgICAgICBtX2R1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCA9IHRy
dWU7Ci0gICAgICAgICAgICBpbmRleE9mUGl4ZWxIYXNoID0gaW5kZXhPZlNlY29uZFNlcGFyYXRv
ciA9PSAtMSA/IC0xIDogaW5kZXhPZlNlY29uZFNlcGFyYXRvciArIDE7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKGluZGV4T2ZQaXhlbEhhc2ggIT0gLTEgJiYgaW5kZXhPZlBpeGVsSGFzaCA8IGxp
bmUuc2l6ZSgpKQotICAgICAgICAgICAgbV9leHBlY3RlZEhhc2ggPSBsaW5lLm1pZChpbmRleE9m
UGl4ZWxIYXNoKTsKLSAgICAgICAgbGluZS5yZW1vdmUoaW5kZXhPZkZpcnN0U2VwYXJhdG9yLCBs
aW5lLmxlbmd0aCgpKTsKLSAgICB9Ci0KLSAgICBpZiAobGluZS5zdGFydHNXaXRoKFFMYXRpbjFT
dHJpbmcoImh0dHA6IikpCi0gICAgICAgICAgICB8fCBsaW5lLnN0YXJ0c1dpdGgoUUxhdGluMVN0
cmluZygiaHR0cHM6IikpCi0gICAgICAgICAgICB8fCBsaW5lLnN0YXJ0c1dpdGgoUUxhdGluMVN0
cmluZygiZmlsZToiKSkKLSAgICAgICAgICAgIHx8IGxpbmUgPT0gUUxhdGluMVN0cmluZygiYWJv
dXQ6YmxhbmsiKSkgewotICAgICAgICBvcGVuKFFVcmwobGluZSkpOworICAgIFRlc3RDb21tYW5k
IGNvbW1hbmQgPSBwYXJzZUlucHV0TGluZShzdGQ6OnN0cmluZyhpbnB1dC50b0xhdGluMSgpLmNv
bnN0RGF0YSgpKSk7CisgICAgUVN0cmluZyBwYXRoT3JVUkwgPSBRTGF0aW4xU3RyaW5nKGNvbW1h
bmQucGF0aE9yVVJMLmNfc3RyKCkpOworICAgIG1fZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0g
Y29tbWFuZC5zaG91bGREdW1wUGl4ZWxzOworICAgIG1fZXhwZWN0ZWRIYXNoID0gUUxhdGluMVN0
cmluZyhjb21tYW5kLmV4cGVjdGVkUGl4ZWxIYXNoLmNfc3RyKCkpOworCisgICAgaWYgKHBhdGhP
clVSTC5zdGFydHNXaXRoKFFMYXRpbjFTdHJpbmcoImh0dHA6IikpCisgICAgICAgICAgICB8fCBw
YXRoT3JVUkwuc3RhcnRzV2l0aChRTGF0aW4xU3RyaW5nKCJodHRwczoiKSkKKyAgICAgICAgICAg
IHx8IHBhdGhPclVSTC5zdGFydHNXaXRoKFFMYXRpbjFTdHJpbmcoImZpbGU6IikpCisgICAgICAg
ICAgICB8fCBwYXRoT3JVUkwgPT0gUUxhdGluMVN0cmluZygiYWJvdXQ6YmxhbmsiKSkgeworICAg
ICAgICBvcGVuKFFVcmwocGF0aE9yVVJMKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgUUZpbGVJ
bmZvIGZpKGxpbmUpOworICAgICAgICBRRmlsZUluZm8gZmkocGF0aE9yVVJMKTsKIAogICAgICAg
ICBpZiAoIWZpLmV4aXN0cygpKSB7CiAgICAgICAgICAgICBRRGlyIGN1cnJlbnREaXIgPSBRRGly
OjpjdXJyZW50UGF0aCgpOwogCiAgICAgICAgICAgICAvLyBUcnkgdG8gYmUgc21hcnQgYWJvdXQg
d2hlcmUgdGhlIHRlc3QgaXMgbG9jYXRlZAogICAgICAgICAgICAgaWYgKGN1cnJlbnREaXIuZGly
TmFtZSgpID09IFFMYXRpbjFTdHJpbmcoIkxheW91dFRlc3RzIikpCi0gICAgICAgICAgICAgICAg
ZmkgPSBRRmlsZUluZm8oY3VycmVudERpciwgbGluZS5yZXBsYWNlKFFSZWdFeHAoIi4qP0xheW91
dFRlc3RzLyguKikiKSwgIlxcMSIpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCFsaW5lLmNvbnRh
aW5zKFFMYXRpbjFTdHJpbmcoIkxheW91dFRlc3RzIikpKQotICAgICAgICAgICAgICAgIGZpID0g
UUZpbGVJbmZvKGN1cnJlbnREaXIsIGxpbmUucHJlcGVuZChRTGF0aW4xU3RyaW5nKCJMYXlvdXRU
ZXN0cy8iKSkpOworICAgICAgICAgICAgICAgIGZpID0gUUZpbGVJbmZvKGN1cnJlbnREaXIsIHBh
dGhPclVSTC5yZXBsYWNlKFFSZWdFeHAoIi4qP0xheW91dFRlc3RzLyguKikiKSwgIlxcMSIpKTsK
KyAgICAgICAgICAgIGVsc2UgaWYgKCFwYXRoT3JVUkwuY29udGFpbnMoUUxhdGluMVN0cmluZygi
TGF5b3V0VGVzdHMiKSkpCisgICAgICAgICAgICAgICAgZmkgPSBRRmlsZUluZm8oY3VycmVudERp
ciwgcGF0aE9yVVJMLnByZXBlbmQoUUxhdGluMVN0cmluZygiTGF5b3V0VGVzdHMvIikpKTsKIAog
ICAgICAgICAgICAgaWYgKCFmaS5leGlzdHMoKSkgewogICAgICAgICAgICAgICAgIGVtaXQgcmVh
ZHkoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJl
ZS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwCmluZGV4
IGY0MDJhMDJjYTM2MmM1Mjc5ZGU1YTVjOGMxZTBjZTlkZjM2MmFiYWQuLjMxMjQzMGQ1Njk4OTU0
OGJjM2VjYWQxM2Y4ZGYxODMwOTZjMTdjODUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L0R1bXBSZW5kZXJUcmVlLmNwcApAQCAtODAsNyArODAsNyBAQCBzdGF0aWMgTFBDV1NUUiBmb250
c0Vudmlyb25tZW50VmFyaWFibGUgPSBMIldFQktJVF9URVNURk9OVFMiOwogY29uc3QgTFBDV1NU
UiBrRHVtcFJlbmRlclRyZWVDbGFzc05hbWUgPSBMIkR1bXBSZW5kZXJUcmVlV2luZG93IjsKIAog
c3RhdGljIGJvb2wgZHVtcFRyZWUgPSB0cnVlOwotc3RhdGljIGJvb2wgZHVtcFBpeGVsczsKK3N0
YXRpYyBib29sIGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdDsKIHN0YXRpYyBib29sIGR1bXBBbGxQ
aXhlbHM7CiBzdGF0aWMgYm9vbCBwcmludFNlcGFyYXRvcnM7CiBzdGF0aWMgYm9vbCBsZWFrQ2hl
Y2tpbmcgPSBmYWxzZTsKQEAgLTc1OSw3ICs3NTksNyBAQCB2b2lkIGR1bXAoKQogICAgICAgICBm
Zmx1c2goc3RkZXJyKTsKICAgICB9CiAKLSAgICBpZiAoZHVtcFBpeGVscworICAgIGlmIChkdW1w
UGl4ZWxzRm9yQ3VycmVudFRlc3QKICAgICAgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5nZW5l
cmF0ZVBpeGVsUmVzdWx0cygpCiAgICAgICYmICFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBE
T01Bc1dlYkFyY2hpdmUoKQogICAgICAmJiAhZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wU291
cmNlQXNXZWJBcmNoaXZlKCkpCkBAIC05NDgsMjAgKzk0OCwxNCBAQCBzdGF0aWMgdm9pZCBzaXpl
V2ViVmlld0ZvckN1cnJlbnRUZXN0KCkKICAgICA6OlNldFdpbmRvd1Bvcyh3ZWJWaWV3V2luZG93
LCAwLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBTV1BfTk9NT1ZFKTsKIH0KIAotc3RhdGljIHZvaWQg
cnVuVGVzdChjb25zdCBzdHJpbmcmIHRlc3RQYXRoT3JVUkwpCitzdGF0aWMgdm9pZCBydW5UZXN0
KGNvbnN0IHN0cmluZyYgaW5wdXRMaW5lKQogeworICAgIFRlc3RDb21tYW5kIGNvbW1hbmQgPSBw
YXJzZUlucHV0TGluZShpbnB1dExpbmUpOworICAgIGNvbnN0IHN0cmluZyYgcGF0aE9yVVJMID0g
Y29tbWFuZC5wYXRoT3JVUkw7CisgICAgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gY29tbWFu
ZC5zaG91bGREdW1wUGl4ZWxzOworCiAgICAgc3RhdGljIEJTVFIgbWV0aG9kQlN0ciA9IFN5c0Fs
bG9jU3RyaW5nKFRFWFQoIkdFVCIpKTsKIAotICAgIC8vIExvb2sgZm9yICInIiBhcyBhIHNlcGFy
YXRvciBiZXR3ZWVuIHRoZSBwYXRoIG9yIFVSTCwgYW5kIHRoZSBwaXhlbCBkdW1wIGhhc2ggdGhh
dCBmb2xsb3dzLgotICAgIHN0cmluZyBwYXRoT3JVUkwodGVzdFBhdGhPclVSTCk7Ci0gICAgc3Ry
aW5nIGV4cGVjdGVkUGl4ZWxIYXNoOwotICAgIAotICAgIHNpemVfdCBzZXBhcmF0b3JQb3MgPSBw
YXRoT3JVUkwuZmluZCgiJyIpOwotICAgIGlmIChzZXBhcmF0b3JQb3MgIT0gc3RyaW5nOjpucG9z
KSB7Ci0gICAgICAgIHBhdGhPclVSTCA9IHN0cmluZyh0ZXN0UGF0aE9yVVJMLCAwLCBzZXBhcmF0
b3JQb3MpOwotICAgICAgICBleHBlY3RlZFBpeGVsSGFzaCA9IHN0cmluZyh0ZXN0UGF0aE9yVVJM
LCBzZXBhcmF0b3JQb3MgKyAxKTsKLSAgICB9Ci0gICAgCiAgICAgQlNUUiB1cmxCU3RyOwogIAog
ICAgIENGU3RyaW5nUmVmIHN0ciA9IENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmcoMCwgcGF0aE9y
VVJMLmNfc3RyKCksIGtDRlN0cmluZ0VuY29kaW5nV2luZG93c0xhdGluMSk7CkBAIC05ODMsNyAr
OTc3LDcgQEAgc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIHRlc3RQYXRoT3JVUkwp
CiAKICAgICBDRlJlbGVhc2UodXJsKTsKIAotICAgIDo6Z0xheW91dFRlc3RDb250cm9sbGVyID0g
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmNyZWF0ZShwYXRoT3JVUkwsIGV4cGVjdGVkUGl4ZWxIYXNo
KTsKKyAgICA6OmdMYXlvdXRUZXN0Q29udHJvbGxlciA9IExheW91dFRlc3RDb250cm9sbGVyOjpj
cmVhdGUocGF0aE9yVVJMLCBjb21tYW5kLmV4cGVjdGVkUGl4ZWxIYXNoKTsKICAgICBkb25lID0g
ZmFsc2U7CiAgICAgdG9wTG9hZGluZ0ZyYW1lID0gMDsKIApAQCAtMTMzNywxMSArMTMzMSw2IEBA
IGV4dGVybiAiQyIgX19kZWNsc3BlYyhkbGxleHBvcnQpIGludCBXSU5BUEkgZGxsTGF1bmNoZXJF
bnRyeVBvaW50KGludCBhcmdjLCBjb25zCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQogCi0gICAgICAgIGlmICghc3RyaWNtcChhcmd2W2ldLCAiLS1waXhlbC10ZXN0cyIpKSB7Ci0g
ICAgICAgICAgICBkdW1wUGl4ZWxzID0gdHJ1ZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICB9Ci0KICAgICAgICAgaWYgKCFzdHJpY21wKGFyZ3ZbaV0sICItLWNvbXBsZXgtdGV4dCIp
KSB7CiAgICAgICAgICAgICBmb3JjZUNvbXBsZXhUZXh0ID0gdHJ1ZTsKICAgICAgICAgICAgIGNv
bnRpbnVlOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJU
cmVlLnZjcHJvaiBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS52Y3By
b2oKaW5kZXggNDg0M2MzOTBlN2M2YjUyZTI0ZTJiMzc3MDY1NDc4ZDA3NmMwOTdmYS4uN2UyNDJh
MWNkZTRhMmZjY2MxYTI0NzFiNjE2OWIzZTMzZWFkY2RjZCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLnZjcHJvagorKysgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUudmNwcm9qCkBAIC01NjMsNiArNTYzLDEwIEBACiAJ
CQk+CiAJCTwvRmlsZT4KIAkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cRHVtcFJlbmRlclRy
ZWVDb21tb24uY3BwIgorCQkJPgorCQk8L0ZpbGU+CisJCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9
Ii4uXER1bXBSZW5kZXJUcmVlUHJlZml4LmgiCiAJCQk+CiAJCTwvRmlsZT4KZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dzY3JpcHQgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93c2Ny
aXB0CmluZGV4IDY0NWM3ZDY0MTU5OGFmZTJmMTRlMTYzYWQ0Y2NlZjI3YzUyOGI3NjQuLmIzMjky
OTQ1MGIyOGFhODg5MmMzM2UzYmUwZDk2ZjBlNmUxMTM0MTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL3dzY3JpcHQKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd3NjcmlwdApA
QCAtNDAsNiArNDAsNyBAQCBpbmNsdWRlX3BhdGhzID0gWwogICAgICAgICAgICAgICAgICd3eCcK
ICAgICAgICAgICAgICAgICBdCiBzb3VyY2VzID0gWworICAgICAgICAgICAgJ0R1bXBSZW5kZXJU
cmVlQ29tbW9uLmNwcCcsCiAgICAgICAgICAgICAnTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwJywK
ICAgICAgICAgICAgICdXb3JrUXVldWUuY3BwJywKICAgICAgICAgICAgICd3eC9EdW1wUmVuZGVy
VHJlZVd4LmNwcCcsCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93eC9EdW1wUmVu
ZGVyVHJlZVd4LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0R1bXBSZW5kZXJUcmVlV3gu
Y3BwCmluZGV4IDMxYWRkMTFhMmViNzRkMWY0ZDgzMjk0NzlmNDE5ZjEwN2ZmYmE4OGYuLjQ1Yjg1
MmQ4OGFiOWJkYTI5MWZiMWVkMjc3YWNhNzUxZGZkMzUwOTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL3d4L0R1bXBSZW5kZXJUcmVlV3guY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL3d4L0R1bXBSZW5kZXJUcmVlV3guY3BwCkBAIC01MCw3ICs1MCw3IEBACiB2b2xhdGls
ZSBib29sIGRvbmUgPSB0cnVlOwogdm9sYXRpbGUgYm9vbCBub3RpZmllZCA9IGZhbHNlOwogc3Rh
dGljIGJvb2wgcHJpbnRTZXBhcmF0b3JzID0gdHJ1ZTsKLXN0YXRpYyBpbnQgZHVtcFBpeGVsczsK
K3N0YXRpYyBpbnQgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0Owogc3RhdGljIGludCBkdW1wVHJl
ZSA9IDE7CiB0aW1lX3Qgc3RhcnRUaW1lOyAvLyB0byBkZXRlY3QgdGltZW91dHMgLyBmYWlsZWQg
dGVzdHMKIApAQCAtMjAzLDcgKzIwMyw3IEBAIHZvaWQgZHVtcCgpCiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBpZiAoZHVtcFBpeGVscworICAgIGlmIChkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QK
ICAgICAgICAgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5nZW5lcmF0ZVBpeGVsUmVzdWx0cygp
CiAgICAgICAgICYmICFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBET01Bc1dlYkFyY2hpdmUo
KQogICAgICAgICAmJiAhZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wU291cmNlQXNXZWJBcmNo
aXZlKCkpIHsKQEAgLTIxOCwyNiArMjE4LDIxIEBAIHZvaWQgZHVtcCgpCiAgICAgZ0xheW91dFRl
c3RDb250cm9sbGVyLmNsZWFyKCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgd3hT
dHJpbmcgdGVzdFBhdGhPclVSTCkKK3N0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgd3hTdHJpbmcg
aW5wdXRMaW5lKQogewogICAgIGRvbmUgPSBmYWxzZTsKICAgICB0aW1lKCZzdGFydFRpbWUpOwot
ICAgIHN0cmluZyBwYXRoT3JVUkxTdHJpbmcodGVzdFBhdGhPclVSTC5jaGFyX3N0cigpKTsKLSAg
ICBzdHJpbmcgcGF0aE9yVVJMKHBhdGhPclVSTFN0cmluZyk7Ci0gICAgc3RyaW5nIGV4cGVjdGVk
UGl4ZWxIYXNoOwotCi0gICAgc2l6ZV90IHNlcGFyYXRvclBvcyA9IHBhdGhPclVSTC5maW5kKCIn
Iik7Ci0gICAgaWYgKHNlcGFyYXRvclBvcyAhPSBzdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgcGF0
aE9yVVJMID0gc3RyaW5nKHBhdGhPclVSTFN0cmluZywgMCwgc2VwYXJhdG9yUG9zKTsKLSAgICAg
ICAgZXhwZWN0ZWRQaXhlbEhhc2ggPSBzdHJpbmcocGF0aE9yVVJMU3RyaW5nLCBzZXBhcmF0b3JQ
b3MgKyAxKTsKLSAgICB9CisKKyAgICBUZXN0Q29tbWFuZCBjb21tYW5kID0gcGFyc2VJbnB1dExp
bmUoc3RkOjpzdHJpbmcoaW5wdXRMaW5lLlRvQXNjaWkoKSkpOworICAgIHN0cmluZyYgcGF0aE9y
VVJMID0gY29tbWFuZC5wYXRoT3JVUkw7CisgICAgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0g
Y29tbWFuZC5zaG91bGREdW1wUGl4ZWxzOwogICAgIAogICAgIC8vIENVUkwgaXNuJ3QgaGFwcHkg
aWYgd2UgZG9uJ3QgaGF2ZSBhIHByb3RvY29sLgogICAgIHNpemVfdCBodHRwID0gcGF0aE9yVVJM
LmZpbmQoImh0dHA6Ly8iKTsKICAgICBpZiAoaHR0cCA9PSBzdHJpbmc6Om5wb3MpCiAgICAgICAg
IHBhdGhPclVSTC5pbnNlcnQoMCwgImZpbGU6Ly8iKTsKICAgICAKLSAgICBnTGF5b3V0VGVzdENv
bnRyb2xsZXIgPSBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y3JlYXRlKHBhdGhPclVSTCwgZXhwZWN0
ZWRQaXhlbEhhc2gpOworICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlciA9IExheW91dFRlc3RDb250
cm9sbGVyOjpjcmVhdGUocGF0aE9yVVJMLCBjb21tYW5kLmV4cGVjdGVkUGl4ZWxIYXNoKTsKICAg
ICBpZiAoIWdMYXlvdXRUZXN0Q29udHJvbGxlcikgewogICAgICAgICB3eFRoZUFwcC0+RXhpdE1h
aW5Mb29wKCk7CiAgICAgfQpAQCAtMjgyLDExICsyNzcsNiBAQCBib29sIE15QXBwOjpPbkluaXQo
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlm
ICghb3B0aW9uLkNtcE5vQ2FzZShfVCgiLS1waXhlbC10ZXN0cyIpKSkgewotICAgICAgICAgICAg
ZHVtcFBpeGVscyA9IHRydWU7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAg
ICAgICAKICAgICAgICAgaWYgKCFvcHRpb24uQ21wTm9DYXNlKF9UKCItLXRyZWUiKSkpIHsKICAg
ICAgICAgICAgIGR1bXBUcmVlID0gdHJ1ZTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzIz
LDcgKzMxMyw3IEBAIGJvb2wgTXlBcHA6Ok9uSW5pdCgpCiAgICAgICAgIH0KICAgICAKICAgICB9
IGVsc2UgewotICAgICAgICBwcmludFNlcGFyYXRvcnMgPSAob3B0aW5kIDwgYXJnYy0xIHx8IChk
dW1wUGl4ZWxzICYmIGR1bXBUcmVlKSk7CisgICAgICAgIHByaW50U2VwYXJhdG9ycyA9IChvcHRp
bmQgPCBhcmdjIC0gMSB8fCAoZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ICYmIGR1bXBUcmVlKSk7
CiAgICAgICAgIGZvciAoaW50IGkgPSBvcHRpbmQ7IGkgIT0gYXJnYzsgKytpKSB7CiAgICAgICAg
ICAgICBydW5UZXN0KHd4VGhlQXBwLT5hcmd2WzFdKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
VG9vbHMvR05VbWFrZWZpbGUuYW0gYi9Ub29scy9HTlVtYWtlZmlsZS5hbQppbmRleCBkZjlhNzFm
MThmOTU4MDdlZjRmZDZmN2Q3YzI3ZDMxMWZhMzIxYWMyLi5mODVhOWQxMmViNzQ1NDIzMTUyMjUx
MTA2MmVlMjdmNWE0MDg5ZDQyIDEwMDY0NAotLS0gYS9Ub29scy9HTlVtYWtlZmlsZS5hbQorKysg
Yi9Ub29scy9HTlVtYWtlZmlsZS5hbQpAQCAtMTA2LDYgKzEwNiw3IEBAIGVuZGlmCiAKIFByb2dy
YW1zX0R1bXBSZW5kZXJUcmVlX1NPVVJDRVMgPSBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVt
cFJlbmRlclRyZWUuaCBcCisJVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWVDb21t
b24uY3BwIFwKIAlUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZVByZWZpeC5oIFwK
IAlUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAgXAogCVRv
b2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmggXApkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvb2xk
LXJ1bi13ZWJraXQtdGVzdHMKaW5kZXggMDk0NDNjODdjMDJmMWU4Y2Y1YmRlNmQxYjA0NWM0ZGI5
YmFiMDg4Mi4uZjA5MWMxOWJhYWI3M2ZlNWVmNDJjNTE2YmFjYzE0NTEzNmYyZGMyMCAxMDA3NTUK
LS0tIGEvVG9vbHMvU2NyaXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0cworKysgYi9Ub29scy9TY3Jp
cHRzL29sZC1ydW4td2Via2l0LXRlc3RzCkBAIC03NDgsMTIgKzc0OCwxNiBAQCBmb3IgbXkgJHRl
c3QgKEB0ZXN0cykgewogICAgIHByaW50ICR0ZXN0c19ydW5fZmggIiR0ZXN0XG4iOwogCiAgICAg
IyBUcnkgdG8gcmVhZCBleHBlY3RlZCBoYXNoIGZpbGUgZm9yIHBpeGVsIHRlc3RzCi0gICAgbXkg
JHN1ZmZpeEV4cGVjdGVkSGFzaCA9ICIiOwotICAgIGlmICgkcGl4ZWxUZXN0cyAmJiAhJHJlc2V0
UmVzdWx0cykgewotICAgICAgICBteSAkZXhwZWN0ZWRQaXhlbERpciA9IGV4cGVjdGVkRGlyZWN0
b3J5Rm9yVGVzdCgkYmFzZSwgMCwgInBuZyIpOwotICAgICAgICBpZiAobXkgJGV4cGVjdGVkSGFz
aCA9IHJlYWRDaGVja3N1bUZyb21QbmcoRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkZXhwZWN0ZWRQaXhl
bERpciwgIiRiYXNlLSRleHBlY3RlZFRhZy5wbmciKSkpIHsKLSAgICAgICAgICAgICMgRm9ybWF0
IGV4cGVjdGVkIGhhc2ggaW50byBhIHN1ZmZpeCBzdHJpbmcgdGhhdCBpcyBhcHBlbmRlZCB0byB0
aGUgcGF0aCAvIFVSTCBwYXNzZWQgdG8gRFJULgotICAgICAgICAgICAgJHN1ZmZpeEV4cGVjdGVk
SGFzaCA9ICInJGV4cGVjdGVkSGFzaCI7CisgICAgbXkgJHN1ZmZpeFBpeGVsVGVzdCA9ICIiOwor
ICAgIGlmICgkcGl4ZWxUZXN0cykgeworICAgICAgICAjIDogaXMgdGhlIHNlcGFyYXRvciBiZXR3
ZWVuIGFyZ3VtZW50cy4KKyAgICAgICAgJHN1ZmZpeFBpeGVsVGVzdCA9ICI6LS1waXhlbC10ZXN0
IjsKKyAgICAgICAgaWYgKCEkcmVzZXRSZXN1bHRzKSB7CisgICAgICAgICAgICBteSAkZXhwZWN0
ZWRQaXhlbERpciA9IGV4cGVjdGVkRGlyZWN0b3J5Rm9yVGVzdCgkYmFzZSwgMCwgInBuZyIpOwor
ICAgICAgICAgICAgaWYgKG15ICRleHBlY3RlZEhhc2ggPSByZWFkQ2hlY2tzdW1Gcm9tUG5nKEZp
bGU6OlNwZWMtPmNhdGZpbGUoJGV4cGVjdGVkUGl4ZWxEaXIsICIkYmFzZS0kZXhwZWN0ZWRUYWcu
cG5nIikpKSB7CisgICAgICAgICAgICAgICAgIyBGb3JtYXQgZXhwZWN0ZWQgaGFzaCBpbnRvIGEg
c3VmZml4IHN0cmluZyB0aGF0IGlzIGFwcGVuZGVkIHRvIHRoZSBwYXRoIC8gVVJMIHBhc3NlZCB0
byBEUlQuCisgICAgICAgICAgICAgICAgJHN1ZmZpeFBpeGVsVGVzdCA9ICI6LS1waXhlbC10ZXN0
OiRleHBlY3RlZEhhc2giOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC03
ODksMTEgKzc5MywxMSBAQCBmb3IgbXkgJHRlc3QgKEB0ZXN0cykgewogICAgICAgICB9IGVsc2lm
ICgkdGVzdCAhfiAvXmh0dHBcL3Rlc3RzXC9sb2NhbFwvLyAmJiAkdGVzdCAhfiAvXmh0dHBcL3Rl
c3RzXC9zc2xcLy8pIHsKICAgICAgICAgICAgIG15ICRwYXRoID0gY2Fub25wYXRoKCR0ZXN0KTsK
ICAgICAgICAgICAgICRwYXRoID1+IHMvXmh0dHBcL3Rlc3RzXC8vLzsKLSAgICAgICAgICAgIHBy
aW50IE9VVCAiaHR0cDovLzEyNy4wLjAuMTokaHR0cGRQb3J0LyRwYXRoJHN1ZmZpeEV4cGVjdGVk
SGFzaFxuIjsKKyAgICAgICAgICAgIHByaW50IE9VVCAiaHR0cDovLzEyNy4wLjAuMTokaHR0cGRQ
b3J0LyRwYXRoJHN1ZmZpeFBpeGVsVGVzdFxuIjsKICAgICAgICAgfSBlbHNpZiAoJHRlc3QgPX4g
L15odHRwXC90ZXN0c1wvc3NsXC8vKSB7CiAgICAgICAgICAgICBteSAkcGF0aCA9IGNhbm9ucGF0
aCgkdGVzdCk7CiAgICAgICAgICAgICAkcGF0aCA9fiBzL15odHRwXC90ZXN0c1wvLy87Ci0gICAg
ICAgICAgICBwcmludCBPVVQgImh0dHBzOi8vMTI3LjAuMC4xOiRodHRwZFNTTFBvcnQvJHBhdGgk
c3VmZml4RXhwZWN0ZWRIYXNoXG4iOworICAgICAgICAgICAgcHJpbnQgT1VUICJodHRwczovLzEy
Ny4wLjAuMTokaHR0cGRTU0xQb3J0LyRwYXRoJHN1ZmZpeFBpeGVsVGVzdFxuIjsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIG15ICR0ZXN0UGF0aCA9ICIkdGVzdERpcmVjdG9yeS8kdGVz
dCI7CiAgICAgICAgICAgICBpZiAoaXNDeWd3aW4oKSkgewpAQCAtODAxLDcgKzgwNSw3IEBAIGZv
ciBteSAkdGVzdCAoQHRlc3RzKSB7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgICR0ZXN0UGF0aCA9IGNhbm9ucGF0aCgkdGVzdFBhdGgpOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcHJpbnQgT1VUICIkdGVzdFBhdGgkc3VmZml4RXhwZWN0ZWRIYXNoXG4iOworICAg
ICAgICAgICAgcHJpbnQgT1VUICIkdGVzdFBhdGgkc3VmZml4UGl4ZWxUZXN0XG4iOwogICAgICAg
ICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgbXkgJHRlc3RQYXRoID0gIiR0ZXN0RGlyZWN0b3J5
LyR0ZXN0IjsKQEAgLTgxMCw3ICs4MTQsNyBAQCBmb3IgbXkgJHRlc3QgKEB0ZXN0cykgewogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgJHRlc3RQYXRoID0gY2Fub25wYXRoKCR0ZXN0UGF0
aCk7CiAgICAgICAgIH0KLSAgICAgICAgcHJpbnQgT1VUICIkdGVzdFBhdGgkc3VmZml4RXhwZWN0
ZWRIYXNoXG4iIGlmIGRlZmluZWQgJHRlc3RQYXRoOworICAgICAgICBwcmludCBPVVQgIiR0ZXN0
UGF0aCRzdWZmaXhQaXhlbFRlc3RcbiIgaWYgZGVmaW5lZCAkdGVzdFBhdGg7CiAgICAgfQogCiAg
ICAgIyBEdW1wUmVuZGVyVHJlZSBpcyBleHBlY3RlZCB0byBkdW1wIHR3byAiYmxvY2tzIiB0byBz
dGRvdXQgZm9yIGVhY2ggdGVzdC4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvYmFzZS5weQppbmRleCBhZDcwZjA0MmRlOWVjYjYwMDYzYmVhNmY1MGMyODVi
ZjllZmQ5YzEyLi45NDIxNTYyNGZlMjdlYTQyNWFhNzNlODkxNTc3Y2M1ZTZlOTkwZTI5IDEwMDc1
NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CkBA
IC0xMjc3LDIxICsxMjc3LDkgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICAgICAgICAg
IHJldHVybiBzdWl0ZS5hcmdzCiAgICAgICAgIHJldHVybiBbXQogCi0gICAgZGVmIHN1cHBvcnRz
X3N3aXRjaGluZ19waXhlbF90ZXN0c19wZXJfdGVzdChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5n
ZXRfb3B0aW9uKCd3ZWJraXRfdGVzdF9ydW5uZXInKToKLSAgICAgICAgICAgIHJldHVybiBUcnVl
Ci0gICAgICAgIHJldHVybiBzZWxmLl9zdXBwb3J0c19zd2l0Y2hpbmdfcGl4ZWxfdGVzdHNfcGVy
X3Rlc3QoKQotCi0gICAgZGVmIF9zdXBwb3J0c19zd2l0Y2hpbmdfcGl4ZWxfdGVzdHNfcGVyX3Rl
c3Qoc2VsZik6Ci0gICAgICAgICMgRklYTUU6IGFsbCBwb3J0cyBzaG91bGQgc3VwcG9ydCBpdC4K
LSAgICAgICAgcmV0dXJuIEZhbHNlCi0KICAgICBkZWYgc2hvdWxkX3J1bl9hc19waXhlbF90ZXN0
KHNlbGYsIHRlc3RfaW5wdXQpOgogICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5waXhlbF90
ZXN0czoKICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBpZiBub3Qgc2VsZi5zdXBw
b3J0c19zd2l0Y2hpbmdfcGl4ZWxfdGVzdHNfcGVyX3Rlc3QoKToKLSAgICAgICAgICAgICMgQ2Fu
bm90IGRvIG1vcmUgZmlsdGVyaW5nIHdpdGhvdXQgdGhpcy4KLSAgICAgICAgICAgIHJldHVybiBU
cnVlCiAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdF9kaXJlY3RvcmllczoKICAg
ICAgICAgICAgIHJldHVybiBhbnkodGVzdF9pbnB1dC50ZXN0X25hbWUuc3RhcnRzd2l0aChkaXJl
Y3RvcnkpIGZvciBkaXJlY3RvcnkgaW4gc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0X2RpcmVjdG9y
aWVzKQogICAgICAgICByZXR1cm4gc2VsZi5fc2hvdWxkX3J1bl9hc19waXhlbF90ZXN0KHRlc3Rf
aW5wdXQpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2RyaXZlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
ZHJpdmVyLnB5CmluZGV4IDc4MTgyM2I4ZDY3MGE2ZWI4ZTUyZTA3NjhiZTY2NGIxMWQ2MzAzM2Mu
LjJlYjFlMTRiNTJiY2Q3MjM1ZjM1NWMxYTk3NDA2ODZmOTViY2M4ZDYgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5CisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5CkBAIC0yOTMs
OCArMjkzLDYgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAKICAgICAgICAgY21kLmV4dGVuZChz
ZWxmLl9wb3J0LmdldF9vcHRpb24oJ2FkZGl0aW9uYWxfZHJ0X2ZsYWcnLCBbXSkpCiAKLSAgICAg
ICAgaWYgcGl4ZWxfdGVzdHMgYW5kIG5vdCBzZWxmLl9wb3J0LnN1cHBvcnRzX3N3aXRjaGluZ19w
aXhlbF90ZXN0c19wZXJfdGVzdCgpOgotICAgICAgICAgICAgY21kLmFwcGVuZCgnLS1waXhlbC10
ZXN0cycpCiAgICAgICAgIGNtZC5leHRlbmQocGVyX3Rlc3RfYXJncykKIAogICAgICAgICBjbWQu
YXBwZW5kKCctJykKQEAgLTMzNiwxMiArMzM0LDkgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAg
ICAgICAgIGFzc2VydCBub3QgZHJpdmVyX2lucHV0LmltYWdlX2hhc2ggb3IgZHJpdmVyX2lucHV0
LnNob3VsZF9ydW5fcGl4ZWxfdGVzdAogCiAgICAgICAgIGlmIGRyaXZlcl9pbnB1dC5zaG91bGRf
cnVuX3BpeGVsX3Rlc3Q6Ci0gICAgICAgICAgICBpZiBzZWxmLl9wb3J0LnN1cHBvcnRzX3N3aXRj
aGluZ19waXhlbF90ZXN0c19wZXJfdGVzdCgpOgotICAgICAgICAgICAgICAgICMgV2UgZGlkIG5v
dCBzdGFydCB0aGUgZHJpdmVyIHdpdGggLS1waXhlbC10ZXN0cywgaW5zdGVhZCB3ZSBzcGVjaWZ5
IGl0IHBlciB0ZXN0LgotICAgICAgICAgICAgICAgICMgIiciIGlzIHRoZSBzZXBhcmF0b3Igb2Yg
Y29tbWFuZCBmaWVsZHMuCi0gICAgICAgICAgICAgICAgY29tbWFuZCArPSAiJyIgKyAnLS1waXhl
bC10ZXN0JworICAgICAgICAgICAgY29tbWFuZCArPSAiOi0tcGl4ZWwtdGVzdCIKICAgICAgICAg
aWYgZHJpdmVyX2lucHV0LmltYWdlX2hhc2g6Ci0gICAgICAgICAgICBjb21tYW5kICs9ICInIiAr
IGRyaXZlcl9pbnB1dC5pbWFnZV9oYXNoCisgICAgICAgICAgICBjb21tYW5kICs9ICI6IiArIGRy
aXZlcl9pbnB1dC5pbWFnZV9oYXNoCiAgICAgICAgIHJldHVybiBjb21tYW5kICsgIlxuIgogCiAg
ICAgZGVmIF9yZWFkX2ZpcnN0X2Jsb2NrKHNlbGYsIGRlYWRsaW5lKToKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcXQucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3F0LnB5CmluZGV4IGUyMzljN2UzYWFmNmY2
MDJiMGMzNTFlYzIyZGNmYTY4MDY0ZWEyNjkuLjZlN2IwOTg4ZDVhNzdlZmM1ZmMzNzJmYTc1MTY3
ODM0MDBhNjlmMDggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvcXQucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9xdC5weQpAQCAtMTg0LDYgKzE4NCwzIEBAIGNsYXNzIFF0UG9ydChQb3J0KToKICAgICAg
ICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICByZXR1cm4gcmVzdWx0CiAKLSAgICBkZWYgX3N1
cHBvcnRzX3N3aXRjaGluZ19waXhlbF90ZXN0c19wZXJfdGVzdChzZWxmKToKLSAgICAgICAgcmV0
dXJuIFRydWUKLQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC90ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC90ZXN0LnB5CmluZGV4IDU3MTQ2NjFmZDIwMzY3NjgzOWQ2Yzc2ZjQ3MzViZWM4MTMyYjg5Yjgu
LjBjZDE3MWYzYmNhNmFiZWJkYjIxYjk4ZTJhNDVjMjFhMTRhOTAxMTIgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQorKysgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkKQEAgLTUxMywxMCAr
NTEzLDYgQEAgY2xhc3MgVGVzdFBvcnQoUG9ydCk6CiAgICAgICAgICAgICBWaXJ0dWFsVGVzdFN1
aXRlKCd2aXJ0dWFsL3NraXBwZWQnLCAnZmFpbHVyZXMvZXhwZWN0ZWQnLCBbJy0tdmlydHVhbC1h
cmcyJ10pLAogICAgICAgICBdCiAKLSAgICBkZWYgc3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVsX3Rl
c3RzX3Blcl90ZXN0KHNlbGYpOgotICAgICAgICAjIExldCBpdCB0cnVlIHNvIHdlIGNhbiB0ZXN0
IHRoZSAtLXBpeGVsLXRlc3QtZGlyZWN0b3J5IG9wdGlvbi4KLSAgICAgICAgcmV0dXJuIFRydWUK
LQogCiBjbGFzcyBUZXN0RHJpdmVyKERyaXZlcik6CiAgICAgIiIiVGVzdC9EdW1teSBpbXBsZW1l
bnRhdGlvbiBvZiB0aGUgRHVtcFJlbmRlclRyZWUgaW50ZXJmYWNlLiIiIgpkaWZmIC0tZ2l0IGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAppbmRleCBkMDIzMjk5MjczMWQxYmM5NzEyNjhm
YzM5MzFmNGI3MGFiMzY3YWM3Li4xZGUzYzllNmE2YWM4ZjMwMjlhYWEwMzE2YzQ4MWYwNGVhZTJm
ODhiIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNw
cAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcApAQCAtMzUs
NyArMzUsMTEgQEAKICNpbmNsdWRlIDxXZWJLaXQyL1dLUGFnZVByaXZhdGUuaD4KICNpbmNsdWRl
IDxXZWJLaXQyL1dLUHJlZmVyZW5jZXNQcml2YXRlLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1Jl
dGFpblB0ci5oPgorI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxjc3RkaW8+CisjaW5j
bHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CiAj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTY3LDgg
KzcxLDcgQEAgVGVzdENvbnRyb2xsZXImIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKQogfQogCiBU
ZXN0Q29udHJvbGxlcjo6VGVzdENvbnRyb2xsZXIoaW50IGFyZ2MsIGNvbnN0IGNoYXIqIGFyZ3Zb
XSkKLSAgICA6IG1fZHVtcFBpeGVsc0ZvckFsbFRlc3RzKGZhbHNlKQotICAgICwgbV92ZXJib3Nl
KGZhbHNlKQorICAgIDogbV92ZXJib3NlKGZhbHNlKQogICAgICwgbV9wcmludFNlcGFyYXRvcnMo
ZmFsc2UpCiAgICAgLCBtX3VzaW5nU2VydmVyTW9kZShmYWxzZSkKICAgICAsIG1fZ2NCZXR3ZWVu
VGVzdHMoZmFsc2UpCkBAIC0yNjcsMTAgKzI3MCw2IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6Omlu
aXRpYWxpemUoaW50IGFyZ2MsIGNvbnN0IGNoYXIqIGFyZ3ZbXSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGFyZ3VtZW50ID09ICItLXBpeGVsLXRlc3Rz
IikgewotICAgICAgICAgICAgbV9kdW1wUGl4ZWxzRm9yQWxsVGVzdHMgPSB0cnVlOwotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIH0KICAgICAgICAgaWYgKGFyZ3VtZW50ID09ICItLXZl
cmJvc2UiKSB7CiAgICAgICAgICAgICBtX3ZlcmJvc2UgPSB0cnVlOwogICAgICAgICAgICAgY29u
dGludWU7CkBAIC01MDQsNyArNTAzLDg5IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3Rh
dGVUb0NvbnNpc3RlbnRWYWx1ZXMoKQogICAgIHJldHVybiBtX2RvbmVSZXNldHRpbmc7CiB9CiAK
LWJvb2wgVGVzdENvbnRyb2xsZXI6OnJ1blRlc3QoY29uc3QgY2hhciogdGVzdCkKK3N0cnVjdCBU
ZXN0Q29tbWFuZCB7CisgICAgVGVzdENvbW1hbmQoKSA6IHNob3VsZER1bXBQaXhlbHMoZmFsc2Up
IHsgfQorCisgICAgc3RkOjpzdHJpbmcgcGF0aE9yVVJMOworICAgIGJvb2wgc2hvdWxkRHVtcFBp
eGVsczsKKyAgICBzdGQ6OnN0cmluZyBleHBlY3RlZFBpeGVsSGFzaDsKK307CisKK2NsYXNzIENv
bW1hbmRUb2tlbml6ZXIgeworcHVibGljOgorICAgIENvbW1hbmRUb2tlbml6ZXIoY29uc3Qgc3Rk
OjpzdHJpbmcmIGlucHV0KQorICAgICAgICA6IG1faW5wdXQoaW5wdXQpCisgICAgICAgICwgbV9w
b3NOZXh0U2VwYXJhdG9yKDApCisgICAgeworICAgICAgICBwdW1wKCk7CisgICAgfQorCisgICAg
Ym9vbCBoYXNOZXh0KCkgY29uc3Q7CisgICAgc3RkOjpzdHJpbmcgbmV4dCgpOworCitwcml2YXRl
OgorICAgIHZvaWQgcHVtcCgpOworICAgIHN0YXRpYyBjb25zdCBjaGFyIGtTZXBhcmF0b3IgPSAn
Oic7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1faW5wdXQ7CisgICAgc3RkOjpzdHJpbmcgbV9u
ZXh0OworICAgIHNpemVfdCBtX3Bvc05leHRTZXBhcmF0b3I7Cit9OworCit2b2lkIENvbW1hbmRU
b2tlbml6ZXI6OnB1bXAoKQoreworICAgIGlmIChtX3Bvc05leHRTZXBhcmF0b3IgPT0gc3RkOjpz
dHJpbmc6Om5wb3MgfHwgbV9wb3NOZXh0U2VwYXJhdG9yID09IG1faW5wdXQuc2l6ZSgpKSB7Cisg
ICAgICAgIG1fbmV4dCA9IHN0ZDo6c3RyaW5nKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgc2l6ZV90IHN0YXJ0ID0gbV9wb3NOZXh0U2VwYXJhdG9yID8gbV9wb3NOZXh0U2VwYXJhdG9y
ICsgMSA6IDA7CisgICAgbV9wb3NOZXh0U2VwYXJhdG9yID0gbV9pbnB1dC5maW5kKGtTZXBhcmF0
b3IsIHN0YXJ0KTsKKyAgICBzaXplX3Qgc2l6ZSA9IG1fcG9zTmV4dFNlcGFyYXRvciA9PSBzdGQ6
OnN0cmluZzo6bnBvcyA/IHN0ZDo6c3RyaW5nOjpucG9zIDogbV9wb3NOZXh0U2VwYXJhdG9yIC0g
c3RhcnQ7CisgICAgbV9uZXh0ID0gc3RkOjpzdHJpbmcobV9pbnB1dCwgc3RhcnQsIHNpemUpOwor
fQorCitzdGQ6OnN0cmluZyBDb21tYW5kVG9rZW5pemVyOjpuZXh0KCkKK3sKKyAgICBBU1NFUlQo
aGFzTmV4dCgpKTsKKworICAgIHN0ZDo6c3RyaW5nIG9sZE5leHQgPSBtX25leHQ7CisgICAgcHVt
cCgpOworICAgIHJldHVybiBvbGROZXh0OworfQorCitib29sIENvbW1hbmRUb2tlbml6ZXI6Omhh
c05leHQoKSBjb25zdAoreworICAgIHJldHVybiBtX25leHQgIT0gc3RkOjpzdHJpbmcoKTsKK30K
KworTk9fUkVUVVJOIHN0YXRpYyB2b2lkIGRpZShjb25zdCBzdGQ6OnN0cmluZyYgaW5wdXRMaW5l
KQoreworICAgIGZwcmludGYoc3RkZXJyLCAiVW5leHBlY3RlZCBpbnB1dCBsaW5lOiAlc1xuIiwg
aW5wdXRMaW5lLmNfc3RyKCkpOworICAgIGV4aXQoMSk7Cit9CisKK1Rlc3RDb21tYW5kIHBhcnNl
SW5wdXRMaW5lKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnB1dExpbmUpCit7CisgICAgVGVzdENvbW1h
bmQgcmVzdWx0OworICAgIENvbW1hbmRUb2tlbml6ZXIgdG9rZW5pemVyKGlucHV0TGluZSk7Cisg
ICAgaWYgKCF0b2tlbml6ZXIuaGFzTmV4dCgpKQorICAgICAgICBkaWUoaW5wdXRMaW5lKTsKKwor
ICAgIHJlc3VsdC5wYXRoT3JVUkwgPSB0b2tlbml6ZXIubmV4dCgpOworICAgIGlmICghdG9rZW5p
emVyLmhhc05leHQoKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIHN0ZDo6c3RyaW5n
IGFyZyA9IHRva2VuaXplci5uZXh0KCk7CisgICAgaWYgKGFyZyAhPSBzdGQ6OnN0cmluZygiLXAi
KSAmJiBhcmcgIT0gc3RkOjpzdHJpbmcoIi0tcGl4ZWwtdGVzdCIpKQorICAgICAgICBkaWUoaW5w
dXRMaW5lKTsKKyAgICByZXN1bHQuc2hvdWxkRHVtcFBpeGVscyA9IHRydWU7CisKKyAgICBpZiAo
dG9rZW5pemVyLmhhc05leHQoKSkKKyAgICAgICAgcmVzdWx0LmV4cGVjdGVkUGl4ZWxIYXNoID0g
dG9rZW5pemVyLm5leHQoKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgVGVzdENv
bnRyb2xsZXI6OnJ1blRlc3QoY29uc3QgY2hhciogaW5wdXRMaW5lKQogewogICAgIGlmICghcmVz
ZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcygpKSB7CiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtNTE3
LDMyICs1OTgsMTMgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cnVuVGVzdChjb25zdCBjaGFyKiB0
ZXN0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYm9vbCBkdW1wUGl4ZWxz
VGVzdCA9IG1fZHVtcFBpeGVsc0ZvckFsbFRlc3RzOwotICAgIHN0ZDo6c3RyaW5nIGNvbW1hbmQo
dGVzdCk7Ci0gICAgc3RkOjpzdHJpbmcgcGF0aE9yVVJMID0gY29tbWFuZDsKLSAgICBzdGQ6OnN0
cmluZyBleHBlY3RlZFBpeGVsSGFzaDsKLSAgICBzaXplX3QgZmlyc3RTZXBhcmF0b3JQb3MgPSBj
b21tYW5kLmZpbmRfZmlyc3Rfb2YoJ1wnJyk7Ci0gICAgc2l6ZV90IHNlY29uZFNlcGFyYXRvclBv
cyA9IGNvbW1hbmQuZmluZF9maXJzdF9vZignXCcnLCBmaXJzdFNlcGFyYXRvclBvcyArIDEpOwot
ICAgIGlmIChmaXJzdFNlcGFyYXRvclBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgewotICAgICAg
ICBwYXRoT3JVUkwgPSBzdGQ6OnN0cmluZyhjb21tYW5kLCAwLCBmaXJzdFNlcGFyYXRvclBvcyk7
Ci0gICAgICAgIHNpemVfdCBwaXhlbEhhc2hQb3MgPSBmaXJzdFNlcGFyYXRvclBvcyArIDE7Ci0K
LSAgICAgICAgLy8gTlJXVCBwYXNzZXMgLS1waXhlbC10ZXN0IGlmIHdlIHNob3VsZCBkdW1wIHBp
eGVscyBmb3IgdGhlIHRlc3QuCi0gICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGV4cGVjdGVkUGl4
ZWxUZXN0QXJnKCItLXBpeGVsLXRlc3QiKTsKLSAgICAgICAgc3RkOjpzdHJpbmcgYXJnVGVzdCA9
IHN0ZDo6c3RyaW5nKGNvbW1hbmQsIGZpcnN0U2VwYXJhdG9yUG9zICsgMSwgZXhwZWN0ZWRQaXhl
bFRlc3RBcmcuc2l6ZSgpKTsKLSAgICAgICAgaWYgKGFyZ1Rlc3QgPT0gZXhwZWN0ZWRQaXhlbFRl
c3RBcmcpIHsKLSAgICAgICAgICAgIGR1bXBQaXhlbHNUZXN0ID0gdHJ1ZTsKLSAgICAgICAgICAg
IHBpeGVsSGFzaFBvcyA9IHNlY29uZFNlcGFyYXRvclBvcyA9PSBzdGQ6OnN0cmluZzo6bnBvcyA/
IHN0ZDo6c3RyaW5nOjpucG9zIDogc2Vjb25kU2VwYXJhdG9yUG9zICsgMTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAocGl4ZWxIYXNoUG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zICYmIHBpeGVsSGFz
aFBvcyA8IGNvbW1hbmQuc2l6ZSgpKQotICAgICAgICAgICAgZXhwZWN0ZWRQaXhlbEhhc2ggPSBz
dGQ6OnN0cmluZyhjb21tYW5kLCBwaXhlbEhhc2hQb3MpOwotICAgIH0KKyAgICBUZXN0Q29tbWFu
ZCBjb21tYW5kID0gcGFyc2VJbnB1dExpbmUoc3RkOjpzdHJpbmcoaW5wdXRMaW5lKSk7CiAKICAg
ICBtX3N0YXRlID0gUnVubmluZ1Rlc3Q7CiAKLSAgICBtX2N1cnJlbnRJbnZvY2F0aW9uID0gYWRv
cHRQdHIobmV3IFRlc3RJbnZvY2F0aW9uKHBhdGhPclVSTCkpOwotICAgIGlmIChkdW1wUGl4ZWxz
VGVzdCkKLSAgICAgICAgbV9jdXJyZW50SW52b2NhdGlvbi0+c2V0SXNQaXhlbFRlc3QoZXhwZWN0
ZWRQaXhlbEhhc2gpOworICAgIG1fY3VycmVudEludm9jYXRpb24gPSBhZG9wdFB0cihuZXcgVGVz
dEludm9jYXRpb24oY29tbWFuZC5wYXRoT3JVUkwpKTsKKyAgICBpZiAoY29tbWFuZC5zaG91bGRE
dW1wUGl4ZWxzKQorICAgICAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5zZXRJc1BpeGVsVGVzdChj
b21tYW5kLmV4cGVjdGVkUGl4ZWxIYXNoKTsKIAogICAgIG1fY3VycmVudEludm9jYXRpb24tPmlu
dm9rZSgpOwogICAgIG1fY3VycmVudEludm9jYXRpb24uY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuaAppbmRleCBhOTllMTZlYTg3MDI3YzM0ZjA3Yjg5NjJiMDk4
YzIzMzRkOTQyMWJkLi41ZTIwZDYxMWI0NjlkZjE4N2MzNzhlZTYyZWQwY2FjMzE4ZGFlZDIxIDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKKysrIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCkBAIC0xMDQsNyArMTA0LDYg
QEAgcHJpdmF0ZToKIAogICAgIE93blB0cjxUZXN0SW52b2NhdGlvbj4gbV9jdXJyZW50SW52b2Nh
dGlvbjsKIAotICAgIGJvb2wgbV9kdW1wUGl4ZWxzRm9yQWxsVGVzdHM7CiAgICAgYm9vbCBtX3Zl
cmJvc2U7CiAgICAgYm9vbCBtX3ByaW50U2VwYXJhdG9yczsKICAgICBib29sIG1fdXNpbmdTZXJ2
ZXJNb2RlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155580</attachid>
            <date>2012-07-31 10:19:47 -0700</date>
            <delta_ts>2012-08-02 02:05:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92398-20120731191929.patch</filename>
            <type>text/plain</type>
            <size>52060</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MjA5CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMGVhZWQ3NTk5ODczMjE1MzI0MGZiYTkwZWE0ZTFlNmE4
OTI0MTBlMy4uYjk5ZWQ1NWY2MWQ2MTU2MGM5ZTU5MzZlZWY2OGY3MzcxNjNlYzE3OSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk3
IEBACisyMDEyLTA3LTMxICBCYWxhenMgS2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBBbGwgcG9ydHMgc2hvdWxkIHN1cHBvcnQgcGVyIHRlc3Qgc3dpdGNoaW5nIG9mIHBp
eGVsIHRlc3RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkyMzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGVhY2ggYWxsIHRlc3QgZHJpdmVycyB0byBhY2NlcHQgYSBwZXIgdGVzdCBjb250cm9sIG9m
IHdoZXRoZXIKKyAgICAgICAgdG8gZHVtcCBwaXhlbHMuIERyaXZlcnMgbm93IGFjY2VwdCBhIC1w
Ly0tcGl4ZWwtdGVzdCBhcmd1bWVudAorICAgICAgICBvbiB0aGUgc3RhbmRhcnQgaW5wdXQgdGhh
dCBtZWFucyB0aGF0IHJ1bm5pbmcgdGhlIGN1cnJlbnQKKyAgICAgICAgdGVzdCBhcyBwaXhlbCB0
ZXN0IGlzIGFsbG93ZWQgKGV2ZW4gaWYgdGhlIGV4cGVjdGVkIGhhc2ggaXMKKyAgICAgICAgbWlz
c2luZykuIFJlbW92ZWQgdGhlIC0tcGl4ZWwtdGVzdHMgY29tbWFuZCBsaW5lIG9wdGlvbiBzaW5j
ZQorICAgICAgICB0aGVyZSBpcyBubyBuZWVkIGZvciBpdCBhbnltb3JlLgorCisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaToKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9EdW1wUmVuZGVyVHJlZS5oOgorICAgICAgICAoVGVzdENvbW1hbmQ6OlRlc3RDb21tYW5k
KToKKyAgICAgICAgKFRlc3RDb21tYW5kKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9EdW1w
UmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcDogQWRkZWQuCisgICAgICAgIChDb21tYW5k
VG9rZW5pemVyKToKKyAgICAgICAgKENvbW1hbmRUb2tlbml6ZXI6OkNvbW1hbmRUb2tlbml6ZXIp
OgorICAgICAgICAoQ29tbWFuZFRva2VuaXplcjo6cHVtcCk6CisgICAgICAgIChDb21tYW5kVG9r
ZW5pemVyOjpuZXh0KToKKyAgICAgICAgKENvbW1hbmRUb2tlbml6ZXI6Omhhc05leHQpOgorICAg
ICAgICAoZGllKToKKyAgICAgICAgKHBhcnNlSW5wdXRMaW5lKToKKyAgICAgICAgQ29tbW9uIGxv
Z2ljIHRvIHBhcnNlIHRoZSBpbnB1dCBsaW5lIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IChvciBm
cm9tIHRoZSBjb21tYW5kIGxpbmUKKyAgICAgICAgaW4gc3RhbmRhbG9uZSBtb2RlKS4gTWFkZSBp
dCBzb21ld2hhdCBnZW5lcmFsIHNvIHdlIGNhbiBlYXNpbHkgYWRkIG1vcmUgYXJndW1lbnRzIGlm
CisgICAgICAgIHRoZXJlIGlzIGEgbmVlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9EdW1wUmVuZGVyVHJlZS5jcHA6CisgICAgICAgIChydW5UZXN0KToKKyAgICAgICAgKG1h
aW4pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHA6Cisg
ICAgICAgIChUZXN0U2hlbGw6OlRlc3RTaGVsbCk6CisgICAgICAgIChUZXN0U2hlbGw6OnJ1bkZp
bGVUZXN0KToKKyAgICAgICAgKFRlc3RTaGVsbDo6ZHVtcCk6CisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmg6CisgICAgICAgIChUZXN0UGFyYW1zOjpUZXN0UGFy
YW1zKToKKyAgICAgICAgKFRlc3RTaGVsbCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZWZs
L0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVy
VHJlZS5jcHA6CisgICAgICAgIChwYXJzZUNvbW1hbmRMaW5lT3B0aW9ucyk6CisgICAgICAgIChy
dW5UZXN0KToKKyAgICAgICAgKHNob3VsZER1bXBQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVk
KToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVu
ZGVyVHJlZS5jcHA6CisgICAgICAgIChpbml0aWFsaXplR2xvYmFsc0Zyb21Db21tYW5kTGluZU9w
dGlvbnMpOgorICAgICAgICAoZHVtcCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0R1
bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICAoaW5pdGlhbGl6ZUdsb2JhbHNGcm9tQ29tbWFuZExp
bmVPcHRpb25zKToKKyAgICAgICAgKGR1bXBSZW5kZXJUcmVlKToKKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5wcm86CisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
cXQvRHVtcFJlbmRlclRyZWVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEdW1wUmVuZGVyVHJl
ZTo6cHJvY2Vzc0xpbmUpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVy
VHJlZS5jcHA6CisgICAgICAgIChkdW1wKToKKyAgICAgICAgKHJ1blRlc3QpOgorICAgICAgICAo
ZGxsTGF1bmNoZXJFbnRyeVBvaW50KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRHVt
cFJlbmRlclRyZWUudmNwcm9qOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dzY3JpcHQ6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvd3gvRHVtcFJlbmRlclRyZWVXeC5jcHA6CisgICAgICAg
IChkdW1wKToKKyAgICAgICAgKHJ1blRlc3QpOgorICAgICAgICAoTXlBcHA6Ok9uSW5pdCk6Cisg
ICAgICAgICogU2NyaXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0czogUGFzcyAtLXBpeGVsLXRlc3Qg
YmVmb3JlIHRoZSBoYXNoLgorICAgICAgICBDaGFuZ2VkIHRoZSBzZXBhcmF0b3IgZm9ybSAnIHRv
IDogYmVjYXVzZSBpdCBkb24ndCBuZWVkIHRvIGJlIGVzY2FwZWQKKyAgICAgICAgd2hlbiBwYXNz
aW5nIG1hbnVhbGx5IG9uIHRoZSBjb21hbmQgbGluZS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHk6CisgICAgICAgIChQb3J0LnNob3VsZF9ydW5f
YXNfcGl4ZWxfdGVzdCk6IFJlbW92ZWQgbm93IHRoYXQgYWxsIHBvcnRzIHN1cHBvcnRzIGl0Lgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5Ogor
ICAgICAgICAoRHJpdmVyLmNtZF9saW5lKTogRG9uJ3QgcGFzcyAtLXBpeGVsLXRlc3RzIGFueW1v
cmUuCisgICAgICAgIChEcml2ZXIuX2NvbW1hbmRfZnJvbV9kcml2ZXJfaW5wdXQpOgorCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpUZXN0Q29udHJvbGxlcik6CisgICAgICAgIChXVFI6OlRlc3RDb250
cm9sbGVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdUUjo6VGVzdENvbW1hbmQ6OlRlc3RDb21t
YW5kKToKKyAgICAgICAgKFRlc3RDb21tYW5kKToKKyAgICAgICAgKFdUUik6CisgICAgICAgIChD
b21tYW5kVG9rZW5pemVyKToKKyAgICAgICAgKFdUUjo6Q29tbWFuZFRva2VuaXplcjo6Q29tbWFu
ZFRva2VuaXplcik6CisgICAgICAgIChXVFI6OkNvbW1hbmRUb2tlbml6ZXI6OnB1bXApOgorICAg
ICAgICAoV1RSOjpDb21tYW5kVG9rZW5pemVyOjpuZXh0KToKKyAgICAgICAgKFdUUjo6Q29tbWFu
ZFRva2VuaXplcjo6aGFzTmV4dCk6CisgICAgICAgIChXVFI6OmRpZSk6CisgICAgICAgIChXVFI6
OnBhcnNlSW5wdXRMaW5lKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJ1blRlc3Qp
OgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAg
KFRlc3RDb250cm9sbGVyKToKKyAgICAgICAgRHVwbGljYXRlIHRoZSBsb2dpYyBmb3IgcGFyc2lu
ZyB0aGUgY29tbWFuZCBsaW5lIGJlY2F1c2UKKyAgICAgICAgdW5mb3J0dW5hdGVseSB0aGVyZSBp
cyBubyB3YXkgdG8gc2hhcmUgY29kZSBiZXR3ZWVuCisgICAgICAgIFdlYktpdFRlc3RSdW5uZXIg
YW5kIER1bXBSZW5kZXJUcmVlLgorCiAyMDEyLTA3LTMxICBKb2NoZW4gRWlzaW5nZXIgIDxqb2No
ZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gbW92ZSBFdmVudFNlbmRlciBp
bnRvIFRlc3RSdW5uZXIuYQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJl
bmRlclRyZWUuZ3lwL0R1bXBSZW5kZXJUcmVlLmd5cCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1
bXBSZW5kZXJUcmVlLmd5cC9EdW1wUmVuZGVyVHJlZS5neXAKaW5kZXggZTM4YzhkOGQ0OWNjMzFi
YTRkMTQ4MDA2NjJjOTUyODQ1M2Q0MWIyYy4uZGUwNmY3NzU5NzhmYmE4ZThkYjcyYThkMDk1OTI3
YTMwNDc2M2Y2NCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRy
ZWUuZ3lwL0R1bXBSZW5kZXJUcmVlLmd5cAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1w
UmVuZGVyVHJlZS5neXAvRHVtcFJlbmRlclRyZWUuZ3lwCkBAIC0xMzMsNiArMTMzLDcgQEAKICAg
ICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCiAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1f
c3JjX2RpciknLAogICAgICAgICAgICAgICAgICc8KHNvdXJjZV9kaXIpL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMnLAorICAgICAgICAgICAgICAgICcuLi8nCiAgICAgICAgICAgICAgICAgJzwoREVQ
VEgpJywKICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAnZGVmaW5lcyc6IFsKZGlmZiAtLWdp
dCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpCmluZGV4IGYyYmM3M2Q3YmRmNmY3NGQxNDU2
NzdkN2RmYzQzYWUzNWRkMmM2YTQuLjQxNmJiMDczMjU4ODdkNTdiOTA5ZTkzMTIyMzU0ZjA4Yjdk
ZmJhNDYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5
cGkKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaQpAQCAtNTQs
NiArNTQsOCBAQAogICAgICAgICAgICAgJ2Nocm9taXVtL1dlYlZpZXdIb3N0LmgnLAogICAgICAg
ICBdLAogICAgICAgICAndGVzdF9ydW5uZXJfZmlsZXMnOiBbCisgICAgICAgICAgICAnRHVtcFJl
bmRlclRyZWUuaCcsCisgICAgICAgICAgICAnRHVtcFJlbmRlclRyZWVDb21tb24uY3BwJywKICAg
ICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNw
cCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlci5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnQuY3BwJywKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5k
ZXJUcmVlLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5oCmluZGV4IDBl
NTk4YmU0YWUzZGQ2MjVmMGI0NWVmZTZiMjhmYTM1ZjY3ZjUyZjIuLjE4ZDhjZGEwZWIxN2ZhODNi
ZWUyMDg5YjZkNDg1YTY0OWRiYjg2NzAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L0R1bXBSZW5kZXJUcmVlLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRy
ZWUuaApAQCAtNjUsNCArNjUsMTQgQEAgZXh0ZXJuIFJlZlB0cjxMYXlvdXRUZXN0Q29udHJvbGxl
cj4gZ0xheW91dFRlc3RDb250cm9sbGVyOwogdm9pZCBkdW1wKCk7CiB2b2lkIGRpc3BsYXlXZWJW
aWV3KCk7CiAKK3N0cnVjdCBUZXN0Q29tbWFuZCB7CisgICAgVGVzdENvbW1hbmQoKSA6IHNob3Vs
ZER1bXBQaXhlbHMoZmFsc2UpIHsgfQorCisgICAgc3RkOjpzdHJpbmcgcGF0aE9yVVJMOworICAg
IGJvb2wgc2hvdWxkRHVtcFBpeGVsczsKKyAgICBzdGQ6OnN0cmluZyBleHBlY3RlZFBpeGVsSGFz
aDsKK307CisKK1Rlc3RDb21tYW5kIHBhcnNlSW5wdXRMaW5lKGNvbnN0IHN0ZDo6c3RyaW5nJik7
CisKICNlbmRpZiAvLyBEdW1wUmVuZGVyVHJlZV9oCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCA4M2JmZmQ0NDg0MWFhMTIyZWVkZWQ0NzI1MTM0YzY5MTUyMDBkZDVlLi40ODEwNjRlYjA1
YjMzNWEzY2Y1NjBkMDBkY2E2MjZjOTNmMjhiOGU2IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTg5LDYgKzg5LDcgQEAKIAkJOENDREE4MkExNTFBNzJEMTAwMDNGOTM3IC8qIFNhbXBs
ZUZvbnQuc2ZvbnQgaW4gQ29weSBGb250IEZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDhDQ0RBODFGMTUxQTU2NTUwMDAzRjkzNyAvKiBTYW1wbGVGb250LnNmb250ICov
OyB9OwogCQk5MzQwOTk0QzA4NTQwQ0FFMDA3RjNCQzggLyogRHVtcFJlbmRlclRyZWVQcmVmaXgu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMyQTcwQUFC
MDM3MDVFMUYwMEM5MTc4MyAvKiBEdW1wUmVuZGVyVHJlZVByZWZpeC5oICovOyB9OwogCQk5MzQw
OTk1MTA4NTQwQ0FFMDA3RjNCQzggLyogV2ViS2l0LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMzU0MzVGMDNENzU1MDIwMDg2MzVD
RSAvKiBXZWJLaXQuZnJhbWV3b3JrICovOyB9OworCQk5ODMwRjMxRjE1QzgxMTgxMDA1QUIyMDYg
LyogRHVtcFJlbmRlclRyZWVDb21tb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTgzMEYzMUUxNUM4MTE4MTAwNUFCMjA2IC8qIER1bXBSZW5kZXJU
cmVlQ29tbW9uLmNwcCAqLzsgfTsKIAkJQTgxNzA5MDAwOEIxNjNFRjAwQ0NCOUZCIC8qIENvY29h
LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE4NEY2MDg5MDhCMTM2REEwMEU5NzQ1RiAvKiBDb2NvYS5mcmFtZXdvcmsgKi87IH07CiAJ
CUE4MTcwOTA0MDhCMTY0RDMwMENDQjlGQiAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4g
RnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODE3MDkwMzA4
QjE2NEQzMDBDQ0I5RkIgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovOyB9OwogCQlBODRG
NjA4QTA4QjEzNkRBMDBFOTc0NUYgLyogQ29jb2EuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg0RjYwODkwOEIxMzZEQTAwRTk3NDVG
IC8qIENvY29hLmZyYW1ld29yayAqLzsgfTsKQEAgLTI4OSw2ICsyOTAsNyBAQAogCQk4Q0NEQTgx
RjE1MUE1NjU1MDAwM0Y5MzcgLyogU2FtcGxlRm9udC5zZm9udCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueG1s
OyBuYW1lID0gU2FtcGxlRm9udC5zZm9udDsgcGF0aCA9IGZvbnRzL1NhbXBsZUZvbnQuc2ZvbnQ7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMzU0MzVGMDNENzU1MDIwMDg2MzVDRSAv
KiBXZWJLaXQuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IHBhdGggPSBXZWJLaXQuZnJhbWV3b3JrOyBz
b3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk5MzQwOTk1NDA4NTQwQ0FGMDA3
RjNCQzggLyogRHVtcFJlbmRlclRyZWUgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbklu
ZGV4ID0gMDsgcGF0aCA9IER1bXBSZW5kZXJUcmVlOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVD
VFNfRElSOyB9OworCQk5ODMwRjMxRTE1QzgxMTgxMDA1QUIyMDYgLyogRHVtcFJlbmRlclRyZWVD
b21tb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRHVtcFJlbmRl
clRyZWVDb21tb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODAzRkY3NDA5
Q0FBRDA4MDA5QjJBMzcgLyogRHVtcFJlbmRlclRyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5n
ID0gNDsgcGF0aCA9IER1bXBSZW5kZXJUcmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE4MTcwOTAzMDhCMTY0RDMwMENDQjlGQiAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVy
LmZyYW1ld29yazsgcGF0aCA9IEphdmFTY3JpcHRDb3JlLmZyYW1ld29yazsgc291cmNlVHJlZSA9
IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJQTg0RjYwODkwOEIxMzZEQTAwRTk3NDVGIC8qIENv
Y29hLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gQ29jb2EuZnJhbWV3b3JrOyBwYXRoID0g
L1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29jb2EuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0g
IjxhYnNvbHV0ZT4iOyB9OwpAQCAtNDIxLDYgKzQyMyw3IEBACiAJCTA4RkI3Nzk0RkU4NDE1NURD
MDJBQUMwNyAvKiBEdW1wUmVuZGVyVHJlZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCisJCQkJOTgzMEYzMUUxNUM4MTE4MTAwNUFCMjA2IC8qIER1bXBSZW5kZXJU
cmVlQ29tbW9uLmNwcCAqLywKIAkJCQkzMkE3MEFBQjAzNzA1RTFGMDBDOTE3ODMgLyogRHVtcFJl
bmRlclRyZWVQcmVmaXguaCAqLywKIAkJCQkxNDIyQTI3NTBBRjZGNEJEMDBFMUE4ODMgLyogRGVs
ZWdhdGVzICovLAogCQkJCTE0MjJBMjY5MEFGNkY0NTIwMEUxQTg4MyAvKiBDb250cm9sbGVycyAq
LywKQEAgLTk1NSw2ICs5NTgsNyBAQAogCQkJCTI5Q0ZCQTJFMTIyNzNBMTAwMEJDMzBDMCAvKiBB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTNBNTYyNkNC
MTMxQ0EwMkEwMDJCRTZEOSAvKiBTdG9yYWdlVHJhY2tlckRlbGVnYXRlLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODAwNDVBRUUxNDc3MThFNzAwODI5MEE4IC8qIEFjY2Vzc2liaWxpdHlOb3RpZmlj
YXRpb25IYW5kbGVyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJOTgzMEYzMUYxNUM4MTE4MTAwNUFC
MjA2IC8qIER1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWVDb21tb24uY3BwIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWVDb21tb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAzMzQ5
ZGIyMjA2N2U5YTA4NDE3YTIzYWQ4Y2IxM2I0NWI2ZDIzMTAKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZUNvbW1vbi5jcHAKQEAgLTAsMCArMSw4
MiBAQAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCisK
KyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRp
by5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZz4KKworY2xhc3MgQ29t
bWFuZFRva2VuaXplciB7CitwdWJsaWM6CisgICAgQ29tbWFuZFRva2VuaXplcihjb25zdCBzdGQ6
OnN0cmluZyYgaW5wdXQpCisgICAgICAgIDogbV9pbnB1dChpbnB1dCkKKyAgICAgICAgLCBtX3Bv
c05leHRTZXBhcmF0b3IoMCkKKyAgICB7CisgICAgICAgIHB1bXAoKTsKKyAgICB9CisKKyAgICBi
b29sIGhhc05leHQoKSBjb25zdDsKKyAgICBzdGQ6OnN0cmluZyBuZXh0KCk7CisKK3ByaXZhdGU6
CisgICAgdm9pZCBwdW1wKCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIga1NlcGFyYXRvciA9ICc6
JzsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgbV9pbnB1dDsKKyAgICBzdGQ6OnN0cmluZyBtX25l
eHQ7CisgICAgc2l6ZV90IG1fcG9zTmV4dFNlcGFyYXRvcjsKK307CisKK3ZvaWQgQ29tbWFuZFRv
a2VuaXplcjo6cHVtcCgpCit7CisgICAgaWYgKG1fcG9zTmV4dFNlcGFyYXRvciA9PSBzdGQ6OnN0
cmluZzo6bnBvcyB8fCBtX3Bvc05leHRTZXBhcmF0b3IgPT0gbV9pbnB1dC5zaXplKCkpIHsKKyAg
ICAgICAgbV9uZXh0ID0gc3RkOjpzdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBzaXplX3Qgc3RhcnQgPSBtX3Bvc05leHRTZXBhcmF0b3IgPyBtX3Bvc05leHRTZXBhcmF0b3Ig
KyAxIDogMDsKKyAgICBtX3Bvc05leHRTZXBhcmF0b3IgPSBtX2lucHV0LmZpbmQoa1NlcGFyYXRv
ciwgc3RhcnQpOworICAgIHNpemVfdCBzaXplID0gbV9wb3NOZXh0U2VwYXJhdG9yID09IHN0ZDo6
c3RyaW5nOjpucG9zID8gc3RkOjpzdHJpbmc6Om5wb3MgOiBtX3Bvc05leHRTZXBhcmF0b3IgLSBz
dGFydDsKKyAgICBtX25leHQgPSBzdGQ6OnN0cmluZyhtX2lucHV0LCBzdGFydCwgc2l6ZSk7Cit9
CisKK3N0ZDo6c3RyaW5nIENvbW1hbmRUb2tlbml6ZXI6Om5leHQoKQoreworICAgIEFTU0VSVCho
YXNOZXh0KCkpOworCisgICAgc3RkOjpzdHJpbmcgb2xkTmV4dCA9IG1fbmV4dDsKKyAgICBwdW1w
KCk7CisgICAgcmV0dXJuIG9sZE5leHQ7Cit9CisKK2Jvb2wgQ29tbWFuZFRva2VuaXplcjo6aGFz
TmV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmV4dCAhPSBzdGQ6OnN0cmluZygpOworfQor
CitOT19SRVRVUk4gc3RhdGljIHZvaWQgZGllKGNvbnN0IHN0ZDo6c3RyaW5nJiBpbnB1dExpbmUp
Cit7CisgICAgZnByaW50ZihzdGRlcnIsICJVbmV4cGVjdGVkIGlucHV0IGxpbmU6ICVzXG4iLCBp
bnB1dExpbmUuY19zdHIoKSk7CisgICAgZXhpdCgxKTsKK30KKworVGVzdENvbW1hbmQgcGFyc2VJ
bnB1dExpbmUoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0TGluZSkKK3sKKyAgICBUZXN0Q29tbWFu
ZCByZXN1bHQ7CisgICAgQ29tbWFuZFRva2VuaXplciB0b2tlbml6ZXIoaW5wdXRMaW5lKTsKKyAg
ICBpZiAoIXRva2VuaXplci5oYXNOZXh0KCkpCisgICAgICAgIGRpZShpbnB1dExpbmUpOworCisg
ICAgcmVzdWx0LnBhdGhPclVSTCA9IHRva2VuaXplci5uZXh0KCk7CisgICAgaWYgKCF0b2tlbml6
ZXIuaGFzTmV4dCgpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgc3RkOjpzdHJpbmcg
YXJnID0gdG9rZW5pemVyLm5leHQoKTsKKyAgICBpZiAoYXJnICE9IHN0ZDo6c3RyaW5nKCItcCIp
ICYmIGFyZyAhPSBzdGQ6OnN0cmluZygiLS1waXhlbC10ZXN0IikpCisgICAgICAgIGRpZShpbnB1
dExpbmUpOworICAgIHJlc3VsdC5zaG91bGREdW1wUGl4ZWxzID0gdHJ1ZTsKKworICAgIGlmICh0
b2tlbml6ZXIuaGFzTmV4dCgpKQorICAgICAgICByZXN1bHQuZXhwZWN0ZWRQaXhlbEhhc2ggPSB0
b2tlbml6ZXIubmV4dCgpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcCBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcAppbmRleCA2MTU1ZjQ0MWY1
ZDhiYjNjNDRlNTE3OTA4MGRjYjE3NDQ1ZTg5ODc0Li5iNTU5NDg0MzZjMjhiNTRmMmNmNzY5YmU5
ZWU5MjU3ZDMwMTkyMTM0IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9EdW1wUmVuZGVyVHJlZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
RHVtcFJlbmRlclRyZWUuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCiAKICNpbmNsdWRlICJNb2NrV2Vi
S2l0UGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5jbHVkZSAiVGVzdFNoZWxsLmgiCkBAIC00NCw3ICs0
NSw2IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25Db21w
bGV4VGV4dFtdID0gIi0tY29tcGxleC10ZXh0IjsKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkR1
bXBBbGxQaXhlbHNbXSA9ICItLWR1bXAtYWxsLXBpeGVscyI7CiBzdGF0aWMgY29uc3QgY2hhciBv
cHRpb25Ob3RyZWVbXSA9ICItLW5vdHJlZSI7Ci1zdGF0aWMgY29uc3QgY2hhciBvcHRpb25QaXhl
bFRlc3RzW10gPSAiLS1waXhlbC10ZXN0cyI7CiBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25UaHJl
YWRlZFtdID0gIi0tdGhyZWFkZWQiOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uRGVidWdSZW5k
ZXJUcmVlW10gPSAiLS1kZWJ1Zy1yZW5kZXItdHJlZSI7CiBzdGF0aWMgY29uc3QgY2hhciBvcHRp
b25EZWJ1Z0xheWVyVHJlZVtdID0gIi0tZGVidWctbGF5ZXItdHJlZSI7CkBAIC04NSwxNyArODUs
MTIgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8TW9ja1dlYktpdFBsYXRmb3JtU3VwcG9ydD4gbV9t
b2NrUGxhdGZvcm07CiB9OwogCi1zdGF0aWMgdm9pZCBydW5UZXN0KFRlc3RTaGVsbCYgc2hlbGws
IFRlc3RQYXJhbXMmIHBhcmFtcywgY29uc3Qgc3RyaW5nJiB0ZXN0TmFtZSkKK3N0YXRpYyB2b2lk
IHJ1blRlc3QoVGVzdFNoZWxsJiBzaGVsbCwgVGVzdFBhcmFtcyYgcGFyYW1zLCBjb25zdCBzdHJp
bmcmIGlucHV0TGluZSkKIHsKICAgICBpbnQgb2xkVGltZW91dE1zZWMgPSBzaGVsbC5sYXlvdXRU
ZXN0VGltZW91dCgpOwotICAgIHBhcmFtcy5waXhlbEhhc2ggPSAiIjsKLSAgICBzdHJpbmcgcGF0
aE9yVVJMID0gdGVzdE5hbWU7Ci0gICAgc3RyaW5nOjpzaXplX3R5cGUgc2VwYXJhdG9yUG9zaXRp
b24gPSBwYXRoT3JVUkwuZmluZCgiJyIpOwotICAgIGlmIChzZXBhcmF0b3JQb3NpdGlvbiAhPSBz
dHJpbmc6Om5wb3MpIHsKLSAgICAgICAgcGFyYW1zLnBpeGVsSGFzaCA9IHBhdGhPclVSTC5zdWJz
dHIoc2VwYXJhdG9yUG9zaXRpb24gKyAxKTsKLSAgICAgICAgcGF0aE9yVVJMLmVyYXNlKHNlcGFy
YXRvclBvc2l0aW9uKTsKLSAgICB9Ci0gICAgcGFyYW1zLnRlc3RVcmwgPSB3ZWJraXRfc3VwcG9y
dDo6Q3JlYXRlVVJMRm9yUGF0aE9yVVJMKHBhdGhPclVSTCk7CisgICAgVGVzdENvbW1hbmQgY29t
bWFuZCA9IHBhcnNlSW5wdXRMaW5lKGlucHV0TGluZSk7CisgICAgcGFyYW1zLnRlc3RVcmwgPSB3
ZWJraXRfc3VwcG9ydDo6Q3JlYXRlVVJMRm9yUGF0aE9yVVJMKGNvbW1hbmQucGF0aE9yVVJMKTsK
KyAgICBwYXJhbXMucGl4ZWxIYXNoID0gY29tbWFuZC5zaG91bGREdW1wUGl4ZWxzOwogICAgIHdl
YmtpdF9zdXBwb3J0OjpTZXRDdXJyZW50RGlyZWN0b3J5Rm9yRmlsZVVSTChwYXJhbXMudGVzdFVy
bCk7CiAgICAgdjg6OlY4OjpTZXRGbGFnc0Zyb21TdHJpbmcoc2hlbGwuamF2YVNjcmlwdEZsYWdz
KCkuY19zdHIoKSwgc2hlbGwuamF2YVNjcmlwdEZsYWdzKCkubGVuZ3RoKCkpOwogICAgIGlmIChz
aGVsbC5zdHJlc3NPcHQoKSB8fCBzaGVsbC5zdHJlc3NEZW9wdCgpKSB7CkBAIC0xMDgsMTEgKzEw
MywxMSBAQCBzdGF0aWMgdm9pZCBydW5UZXN0KFRlc3RTaGVsbCYgc2hlbGwsIFRlc3RQYXJhbXMm
IHBhcmFtcywgY29uc3Qgc3RyaW5nJiB0ZXN0TmFtZQogICAgICAgICAgIGJvb2wgaXNMYXN0TG9h
ZCA9IChpID09ICh2ODo6VGVzdGluZzo6R2V0U3RyZXNzUnVucygpIC0gMSkpOwogICAgICAgICAg
IHNoZWxsLnNldER1bXBXaGVuRmluaXNoZWQoaXNMYXN0TG9hZCk7CiAgICAgICAgICAgc2hlbGwu
cmVzZXRUZXN0Q29udHJvbGxlcigpOwotICAgICAgICAgIHNoZWxsLnJ1bkZpbGVUZXN0KHBhcmFt
cyk7CisgICAgICAgICAgc2hlbGwucnVuRmlsZVRlc3QocGFyYW1zLCBjb21tYW5kLnNob3VsZER1
bXBQaXhlbHMpOwogICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICBzaGVsbC5yZXNldFRlc3RD
b250cm9sbGVyKCk7Ci0gICAgICBzaGVsbC5ydW5GaWxlVGVzdChwYXJhbXMpOworICAgICAgc2hl
bGwucnVuRmlsZVRlc3QocGFyYW1zLCBjb21tYW5kLnNob3VsZER1bXBQaXhlbHMpOwogICAgIH0K
ICAgICBzaGVsbC5zZXRMYXlvdXRUZXN0VGltZW91dChvbGRUaW1lb3V0TXNlYyk7CiB9CkBAIC0x
NDYsOCArMTQxLDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICAgICAg
ICAgIHNlcnZlck1vZGUgPSB0cnVlOwogICAgICAgICBlbHNlIGlmIChhcmd1bWVudCA9PSBvcHRp
b25Ob3RyZWUpCiAgICAgICAgICAgICBwYXJhbXMuZHVtcFRyZWUgPSBmYWxzZTsKLSAgICAgICAg
ZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uUGl4ZWxUZXN0cykKLSAgICAgICAgICAgIHBhcmFt
cy5kdW1wUGl4ZWxzID0gdHJ1ZTsKICAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9u
RGVidWdSZW5kZXJUcmVlKQogICAgICAgICAgICAgcGFyYW1zLmRlYnVnUmVuZGVyVHJlZSA9IHRy
dWU7CiAgICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvbkRlYnVnTGF5ZXJUcmVlKQpk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKaW5kZXggZjEyMmUx
ZDJiZWUzMmE1NDExNWEzMzNlYWYwYmRlYjY5Y2VlYmFkYy4uZTUzYTFmMmQ4NzYzZjA2NDRjYzNi
NjA3ZjYxMzk3Y2JmNmZlZWIyNSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFNoZWxsLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0U2hlbGwuY3BwCkBAIC0xMDYsNiArMTA2LDcgQEAgVGVzdFNoZWxsOjpUZXN0U2hlbGwoKQog
ICAgICwgbV90ZXN0SXNQcmVwYXJpbmcoZmFsc2UpCiAgICAgLCBtX2ZvY3VzZWRXaWRnZXQoMCkK
ICAgICAsIG1fZGV2VG9vbHMoMCkKKyAgICAsIG1fZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0KGZh
bHNlKQogICAgICwgbV9hbGxvd0V4dGVybmFsUGFnZXMoZmFsc2UpCiAgICAgLCBtX2FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdGb3JWaWRlb0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX3RocmVhZGVkQ29t
cG9zaXRpbmdFbmFibGVkKGZhbHNlKQpAQCAtMjMyLDEzICsyMzMsMTYgQEAgdm9pZCBUZXN0U2hl
bGw6OnJlc2V0V2ViU2V0dGluZ3MoV2ViVmlldyYgd2ViVmlldykKICAgICBtX3ByZWZzLmFwcGx5
VG8oJndlYlZpZXcpOwogfQogCi12b2lkIFRlc3RTaGVsbDo6cnVuRmlsZVRlc3QoY29uc3QgVGVz
dFBhcmFtcyYgcGFyYW1zKQordm9pZCBUZXN0U2hlbGw6OnJ1bkZpbGVUZXN0KGNvbnN0IFRlc3RQ
YXJhbXMmIHBhcmFtcywgYm9vbCBzaG91bGREdW1wUGl4ZWxzKQogewogICAgIEFTU0VSVChwYXJh
bXMudGVzdFVybC5pc1ZhbGlkKCkpOworICAgIG1fZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0g
c2hvdWxkRHVtcFBpeGVsczsKICAgICBtX3Rlc3RJc1ByZXBhcmluZyA9IHRydWU7CiAgICAgbV9w
YXJhbXMgPSBwYXJhbXM7CiAgICAgc3RyaW5nIHRlc3RVcmwgPSBtX3BhcmFtcy50ZXN0VXJsLnNw
ZWMoKTsKIAorICAgIG1fbGF5b3V0VGVzdENvbnRyb2xsZXItPnNldFNob3VsZEdlbmVyYXRlUGl4
ZWxSZXN1bHRzKHNob3VsZER1bXBQaXhlbHMpOworCiAgICAgaWYgKHRlc3RVcmwuZmluZCgibG9h
ZGluZy8iKSAhPSBzdHJpbmc6Om5wb3MKICAgICAgICAgfHwgdGVzdFVybC5maW5kKCJsb2FkaW5n
XFwiKSAhPSBzdHJpbmc6Om5wb3MpCiAgICAgICAgIG1fbGF5b3V0VGVzdENvbnRyb2xsZXItPnNl
dFNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3ModHJ1ZSk7CkBAIC02MDMsNyArNjA3LDcgQEAg
dm9pZCBUZXN0U2hlbGw6OmR1bXAoKQogICAgIGlmIChkdW1wZWRBbnl0aGluZyAmJiBtX3BhcmFt
cy5wcmludFNlcGFyYXRvcnMpCiAgICAgICAgIG1fcHJpbnRlci5oYW5kbGVUZXh0Rm9vdGVyKCk7
CiAKLSAgICBpZiAobV9wYXJhbXMuZHVtcFBpeGVscyAmJiBzaG91bGRHZW5lcmF0ZVBpeGVsUmVz
dWx0cykgeworICAgIGlmIChtX2R1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCAmJiBzaG91bGRHZW5l
cmF0ZVBpeGVsUmVzdWx0cykgewogICAgICAgICAvLyBJbWFnZSBvdXRwdXQ6IHdlIHdyaXRlIHRo
ZSBpbWFnZSBkYXRhIHRvIHRoZSBmaWxlIGdpdmVuIG9uIHRoZQogICAgICAgICAvLyBjb21tYW5k
IGxpbmUgKGZvciB0aGUgZHVtcCBwaXhlbHMgYXJndW1lbnQpLCBhbmQgdGhlIE1ENSBzdW0gdG8K
ICAgICAgICAgLy8gc3Rkb3V0LgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFNoZWxsLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hl
bGwuaAppbmRleCBkYmZjMWQxYzlhMTNiMWNjYzFlZDhjZjRhZThiZjk4ZmViNjFiOTQyLi4yZTY1
YzBkZGRjOGNiNzcxNWExNWYwYjkzMGQ4NGQ4YmYzM2EwMTRhIDEwMDY0NAotLS0gYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaAorKysgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaApAQCAtNjMsNyArNjMsNiBAQCBjbGFzcyBXZWJQZXJt
aXNzaW9uczsKIAogc3RydWN0IFRlc3RQYXJhbXMgewogICAgIGJvb2wgZHVtcFRyZWU7Ci0gICAg
Ym9vbCBkdW1wUGl4ZWxzOwogICAgIGJvb2wgZGVidWdSZW5kZXJUcmVlOwogICAgIGJvb2wgZGVi
dWdMYXllclRyZWU7CiAgICAgYm9vbCBwcmludFNlcGFyYXRvcnM7CkBAIC03Miw3ICs3MSw2IEBA
IHN0cnVjdCBUZXN0UGFyYW1zIHsKIAogICAgIFRlc3RQYXJhbXMoKQogICAgICAgICA6IGR1bXBU
cmVlKHRydWUpCi0gICAgICAgICwgZHVtcFBpeGVscyhmYWxzZSkKICAgICAgICAgLCBkZWJ1Z1Jl
bmRlclRyZWUoZmFsc2UpCiAgICAgICAgICwgZGVidWdMYXllclRyZWUoZmFsc2UpCiAgICAgICAg
ICwgcHJpbnRTZXBhcmF0b3JzKGZhbHNlKSB7IH0KQEAgLTEwMyw3ICsxMDEsNyBAQCBwdWJsaWM6
CiAgICAgV2ViUGVybWlzc2lvbnMqIHdlYlBlcm1pc3Npb25zKCkgeyByZXR1cm4gbV93ZWJQZXJt
aXNzaW9ucy5nZXQoKTsgfQogCiAgICAgdm9pZCBiaW5kSlNPYmplY3RzVG9XaW5kb3coV2ViS2l0
OjpXZWJGcmFtZSopOwotICAgIHZvaWQgcnVuRmlsZVRlc3QoY29uc3QgVGVzdFBhcmFtcyYpOwor
ICAgIHZvaWQgcnVuRmlsZVRlc3QoY29uc3QgVGVzdFBhcmFtcyYsIGJvb2wgc2hvdWxkRHVtcFBp
eGVsVGVzdHMpOwogICAgIHZvaWQgY2FsbEpTR0MoKTsKICAgICB2b2lkIHJlc2V0VGVzdENvbnRy
b2xsZXIoKTsKICAgICB2b2lkIHdhaXRUZXN0RmluaXNoZWQoKTsKQEAgLTIyNCw2ICsyMjIsNyBA
QCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBUZXN0UGFyYW1zIG1fcGFyYW1zOworICAgIGJvb2wg
bV9kdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3Q7CiAgICAgaW50IG1fdGltZW91dDsgLy8gdGltZW91
dCB2YWx1ZSBpbiBtaWxsaXNlY29uZAogICAgIGJvb2wgbV9hbGxvd0V4dGVybmFsUGFnZXM7CiAg
ICAgYm9vbCBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JWaWRlb0VuYWJsZWQ7CmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VMaXN0cy50eHQgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9lZmwvQ01ha2VMaXN0cy50eHQKaW5kZXggZTFkYWNmOTAxYmEwNjI1YTVhMWU4
MDdlYzZiOTQ1MzQzNDk4NGNhYS4uMDY3ZGJkMzJiN2FhOTFmNWE1NDdjYjdiZTU3ZmY0YmRmNTk5
OTMyOSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0NNYWtlTGlzdHMudHh0
CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4dApAQCAtMSw0ICsx
LDUgQEAKIFNFVChEdW1wUmVuZGVyVHJlZV9TT1VSQ0VTCisgICAgJHtUT09MU19ESVJ9L0R1bXBS
ZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcAogICAgICR7VE9PTFNfRElSfS9EdW1w
UmVuZGVyVHJlZS9DeWNsaWNSZWR1bmRhbmN5Q2hlY2suY3BwCiAgICAgJHtUT09MU19ESVJ9L0R1
bXBSZW5kZXJUcmVlL0dDQ29udHJvbGxlci5jcHAKICAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRl
clRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWUuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZs
L0R1bXBSZW5kZXJUcmVlLmNwcAppbmRleCBjMmM5ZDcxYzBjNTE1Y2IwOGNkNDEyZDQyYWRkMGQx
MDVjYTk3NTljLi43NjEzZjRlNGZmMGU1NjUzNTYyODhkNGM3ZDQ0ZmYzOWE4MmU5NjNlIDEwMDY0
NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWUuY3BwCisrKyBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZS5jcHAKQEAgLTY0LDcgKzY0
LDcgQEAgZXh0ZXJuIEV3a19IaXN0b3J5X0l0ZW0qIHByZXZUZXN0QkZJdGVtOwogUmVmUHRyPExh
eW91dFRlc3RDb250cm9sbGVyPiBnTGF5b3V0VGVzdENvbnRyb2xsZXI7CiB2b2xhdGlsZSBib29s
IGRvbmUgPSBmYWxzZTsKIAotc3RhdGljIGludCBkdW1wUGl4ZWxzID0gZmFsc2U7CitzdGF0aWMg
Ym9vbCBkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3Q7CiBzdGF0aWMgaW50IGR1bXBUcmVlID0gdHJ1
ZTsKIHN0YXRpYyBpbnQgcHJpbnRTZXBhcmF0b3JzID0gdHJ1ZTsKIHN0YXRpYyBpbnQgdXNlWDEx
V2luZG93ID0gZmFsc2U7CkBAIC0xOTIsNyArMTkyLDYgQEAgc3RhdGljIGJvb2wgcGFyc2VDb21t
YW5kTGluZU9wdGlvbnMoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewogICAgIHN0YXRpYyBjb25z
dCBvcHRpb24gb3B0aW9uc1tdID0gewogICAgICAgICB7Im5vdHJlZSIsIG5vX2FyZ3VtZW50LCAm
ZHVtcFRyZWUsIGZhbHNlfSwKLSAgICAgICAgeyJwaXhlbC10ZXN0cyIsIG5vX2FyZ3VtZW50LCAm
ZHVtcFBpeGVscywgdHJ1ZX0sCiAgICAgICAgIHsidHJlZSIsIG5vX2FyZ3VtZW50LCAmZHVtcFRy
ZWUsIHRydWV9LAogICAgICAgICB7Imd1aSIsIG5vX2FyZ3VtZW50LCAmdXNlWDExV2luZG93LCB0
cnVlfSwKICAgICAgICAgezAsIDAsIDAsIDB9CkBAIC0yMTAsMzIgKzIwOSw2IEBAIHN0YXRpYyBi
b29sIHBhcnNlQ29tbWFuZExpbmVPcHRpb25zKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIFN0cmluZyBnZXRGaW5hbFRlc3RVUkwoY29uc3QgU3Ry
aW5nJiB0ZXN0VVJMKQotewotICAgIGNvbnN0IHNpemVfdCBoYXNoU2VwYXJhdG9yUG9zID0gdGVz
dFVSTC5maW5kKCInIik7Ci0gICAgaWYgKGhhc2hTZXBhcmF0b3JQb3MgIT0gbm90Rm91bmQpCi0g
ICAgICAgIHJldHVybiBnZXRGaW5hbFRlc3RVUkwodGVzdFVSTC5sZWZ0KGhhc2hTZXBhcmF0b3JQ
b3MpKTsKLQotICAgIC8vIENvbnZlcnQgdGhlIHBhdGggaW50byBhIGZ1bGwgZmlsZSBVUkwgaWYg
aXQgZG9lcyBub3QgbG9vawotICAgIC8vIGxpa2UgYW4gSFRUUC9TIFVSTCAoZG9lc24ndCBzdGFy
dCB3aXRoIGh0dHA6Ly8gb3IgaHR0cHM6Ly8pLgotICAgIGlmICghdGVzdFVSTC5zdGFydHNXaXRo
KCJodHRwOi8vIikgJiYgIXRlc3RVUkwuc3RhcnRzV2l0aCgiaHR0cHM6Ly8iKSkgewotICAgICAg
ICBjaGFyKiBjRmlsZVBhdGggPSBlY29yZV9maWxlX3JlYWxwYXRoKHRlc3RVUkwudXRmOCgpLmRh
dGEoKSk7Ci0gICAgICAgIGNvbnN0IFN0cmluZyBmaWxlUGF0aCA9IFN0cmluZzo6ZnJvbVVURjgo
Y0ZpbGVQYXRoKTsKLSAgICAgICAgZnJlZShjRmlsZVBhdGgpOwotCi0gICAgICAgIGlmIChlY29y
ZV9maWxlX2V4aXN0cyhmaWxlUGF0aC51dGY4KCkuZGF0YSgpKSkKLSAgICAgICAgICAgIHJldHVy
biBTdHJpbmcoImZpbGU6Ly8iKSArIGZpbGVQYXRoOwotICAgIH0KLQotICAgIHJldHVybiB0ZXN0
VVJMOwotfQotCi1zdGF0aWMgU3RyaW5nIGdldEV4cGVjdGVkUGl4ZWxIYXNoKGNvbnN0IFN0cmlu
ZyYgdGVzdFVSTCkKLXsKLSAgICBjb25zdCBzaXplX3QgaGFzaFNlcGFyYXRvclBvcyA9IHRlc3RV
UkwuZmluZCgiJyIpOwotICAgIHJldHVybiAoaGFzaFNlcGFyYXRvclBvcyAhPSBub3RGb3VuZCkg
PyB0ZXN0VVJMLnN1YnN0cmluZyhoYXNoU2VwYXJhdG9yUG9zICsgMSkgOiBTdHJpbmcoKTsKLX0K
LQogc3RhdGljIGlubGluZSBib29sIGlzR2xvYmFsSGlzdG9yeVRlc3QoY29uc3QgU3RyaW5nJiBj
VGVzdFBhdGhPclVSTCkKIHsKICAgICByZXR1cm4gY1Rlc3RQYXRoT3JVUkwuY29udGFpbnMoIi9n
bG9iYWxoaXN0b3J5LyIpOwpAQCAtMjY3LDEzICsyNDAsMTMgQEAgc3RhdGljIHZvaWQgY3JlYXRl
TGF5b3V0VGVzdENvbnRyb2xsZXIoY29uc3QgU3RyaW5nJiB0ZXN0VVJMLCBjb25zdCBTdHJpbmcm
IGV4cGUKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3QgY2hhciogY1Rlc3RQ
YXRoT3JVUkwpCitzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IGNoYXIqIGlucHV0TGluZSkKIHsK
LSAgICBjb25zdCBTdHJpbmcgdGVzdFBhdGhPclVSTCA9IFN0cmluZzo6ZnJvbVVURjgoY1Rlc3RQ
YXRoT3JVUkwpOwotICAgIEFTU0VSVCghdGVzdFBhdGhPclVSTC5pc0VtcHR5KCkpOwotCi0gICAg
Y29uc3QgU3RyaW5nIHRlc3RVUkwgPSBnZXRGaW5hbFRlc3RVUkwodGVzdFBhdGhPclVSTCk7Ci0g
ICAgY29uc3QgU3RyaW5nIGV4cGVjdGVkUGl4ZWxIYXNoID0gZ2V0RXhwZWN0ZWRQaXhlbEhhc2go
dGVzdFBhdGhPclVSTCk7CisgICAgVGVzdENvbW1hbmQgY29tbWFuZCA9IHBhcnNlSW5wdXRMaW5l
KGlucHV0TGluZSk7CisgICAgY29uc3QgU3RyaW5nIHRlc3RVUkwoY29tbWFuZC5wYXRoT3JVUkwu
Y19zdHIoKSk7CisgICAgQVNTRVJUKCF0ZXN0VVJMLmlzRW1wdHkoKSk7CisgICAgZHVtcFBpeGVs
c0ZvckN1cnJlbnRUZXN0ID0gY29tbWFuZC5zaG91bGREdW1wUGl4ZWxzOworICAgIGNvbnN0IFN0
cmluZyBleHBlY3RlZFBpeGVsSGFzaChjb21tYW5kLmV4cGVjdGVkUGl4ZWxIYXNoLmNfc3RyKCkp
OwogCiAgICAgYnJvd3Nlci0+cmVzZXREZWZhdWx0c1RvQ29uc2lzdGVudFZhbHVlcygpOwogICAg
IGNyZWF0ZUxheW91dFRlc3RDb250cm9sbGVyKHRlc3RVUkwsIGV4cGVjdGVkUGl4ZWxIYXNoKTsK
QEAgLTM1MSw3ICszMjQsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGREdW1wRnJhbWVTY3JvbGxQb3Np
dGlvbigpCiAKIHN0YXRpYyBib29sIHNob3VsZER1bXBQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVj
dGVkKCkKIHsKLSAgICByZXR1cm4gZHVtcFBpeGVscyAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXIt
PmdlbmVyYXRlUGl4ZWxSZXN1bHRzKCkgJiYgIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcERP
TUFzV2ViQXJjaGl2ZSgpICYmICFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBTb3VyY2VBc1dl
YkFyY2hpdmUoKTsKKyAgICByZXR1cm4gZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ICYmIGdMYXlv
dXRUZXN0Q29udHJvbGxlci0+Z2VuZXJhdGVQaXhlbFJlc3VsdHMoKSAmJiAhZ0xheW91dFRlc3RD
b250cm9sbGVyLT5kdW1wRE9NQXNXZWJBcmNoaXZlKCkgJiYgIWdMYXlvdXRUZXN0Q29udHJvbGxl
ci0+ZHVtcFNvdXJjZUFzV2ViQXJjaGl2ZSgpOwogfQogCiBzdGF0aWMgYm9vbCBzaG91bGREdW1w
QmFja0ZvcndhcmRMaXN0KCkKQEAgLTQ1OCw3ICs0MzEsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCiAgICAgICAgIHByaW50U2VwYXJhdG9ycyA9IHRydWU7CiAgICAgICAgIHJ1
blRlc3RpbmdTZXJ2ZXJMb29wKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnRTZXBhcmF0
b3JzID0gKG9wdGluZCA8IGFyZ2MgLSAxIHx8IChkdW1wUGl4ZWxzICYmIGR1bXBUcmVlKSk7Cisg
ICAgICAgIHByaW50U2VwYXJhdG9ycyA9IChvcHRpbmQgPCBhcmdjIC0gMSB8fCAoZHVtcFBpeGVs
c0ZvckN1cnJlbnRUZXN0ICYmIGR1bXBUcmVlKSk7CiAgICAgICAgIGZvciAoaW50IGkgPSBvcHRp
bmQ7IGkgIT0gYXJnYzsgKytpKQogICAgICAgICAgICAgcnVuVGVzdChhcmd2W2ldKTsKICAgICB9
CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3Bw
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcAppbmRleCA1N2Nk
MDU5MTdlODIyNTU4YjQ4Mzc2ZTAxMDJkODAwYTZiY2ZjY2RhLi5lYmRhNWNmYjIzMTg5ZmMyYTc5
NWM0Yzk4MDVlMGJjYmVhZjVjZjg3IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9n
dGsvRHVtcFJlbmRlclRyZWUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1w
UmVuZGVyVHJlZS5jcHAKQEAgLTczLDcgKzczLDcgQEAgZXh0ZXJuIGdjaGFyKiB3ZWJraXRfd2Vi
X2ZyYW1lX2dldF9yZXNwb25zZV9taW1lX3R5cGUoV2ViS2l0V2ViRnJhbWUqIGZyYW1lKTsKIAog
dm9sYXRpbGUgYm9vbCBkb25lOwogc3RhdGljIGJvb2wgcHJpbnRTZXBhcmF0b3JzOwotc3RhdGlj
IGludCBkdW1wUGl4ZWxzOworc3RhdGljIGJvb2wgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0Owog
c3RhdGljIGludCBkdW1wVHJlZSA9IDE7CiBzdGF0aWMgaW50IHVzZVRpbWVvdXRXYXRjaGRvZyA9
IDE7CiAKQEAgLTU0NCw3ICs1NDQsNiBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplR2xvYmFsc0Zy
b21Db21tYW5kTGluZU9wdGlvbnMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKICAgICBzdHJ1
Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKICAgICAgICAgeyJub3RyZWUiLCBub19hcmd1bWVudCwg
JmR1bXBUcmVlLCBmYWxzZX0sCi0gICAgICAgIHsicGl4ZWwtdGVzdHMiLCBub19hcmd1bWVudCwg
JmR1bXBQaXhlbHMsIHRydWV9LAogICAgICAgICB7InRyZWUiLCBub19hcmd1bWVudCwgJmR1bXBU
cmVlLCB0cnVlfSwKICAgICAgICAgeyJuby10aW1lb3V0Iiwgbm9fYXJndW1lbnQsICZ1c2VUaW1l
b3V0V2F0Y2hkb2csIGZhbHNlfSwKICAgICAgICAge05VTEwsIDAsIE5VTEwsIDB9CkBAIC02MjQs
NyArNjIzLDcgQEAgdm9pZCBkdW1wKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChkdW1w
UGl4ZWxzCisgICAgaWYgKGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdAogICAgICAmJiBnTGF5b3V0
VGVzdENvbnRyb2xsZXItPmdlbmVyYXRlUGl4ZWxSZXN1bHRzKCkKICAgICAgJiYgIWdMYXlvdXRU
ZXN0Q29udHJvbGxlci0+ZHVtcERPTUFzV2ViQXJjaGl2ZSgpCiAgICAgICYmICFnTGF5b3V0VGVz
dENvbnRyb2xsZXItPmR1bXBTb3VyY2VBc1dlYkFyY2hpdmUoKSkgewpAQCAtNjg3LDE4ICs2ODYs
MTMgQEAgc3RhdGljIHZvaWQgc2VuZFBpeGVsUmVzdWx0c0VPRigpCiAgICAgZmZsdXNoKHN0ZGVy
cik7CiB9CiAKLXN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiB0ZXN0UGF0aE9yVVJM
KQorc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIGlucHV0TGluZSkKIHsKICAgICBB
U1NFUlQoIXRlc3RQYXRoT3JVUkwuZW1wdHkoKSk7CiAKLSAgICAvLyBMb29rIGZvciAiJyIgYXMg
YSBzZXBhcmF0b3IgYmV0d2VlbiB0aGUgcGF0aCBvciBVUkwsIGFuZCB0aGUgcGl4ZWwgZHVtcCBo
YXNoIHRoYXQgZm9sbG93cy4KLSAgICBzdHJpbmcgdGVzdFVSTCh0ZXN0UGF0aE9yVVJMKTsKLSAg
ICBzdHJpbmcgZXhwZWN0ZWRQaXhlbEhhc2g7Ci0gICAgc2l6ZV90IHNlcGFyYXRvclBvcyA9IHRl
c3RVUkwuZmluZCgiJyIpOwotICAgIGlmIChzZXBhcmF0b3JQb3MgIT0gc3RyaW5nOjpucG9zKSB7
Ci0gICAgICAgIHRlc3RVUkwgPSBzdHJpbmcodGVzdFBhdGhPclVSTCwgMCwgc2VwYXJhdG9yUG9z
KTsKLSAgICAgICAgZXhwZWN0ZWRQaXhlbEhhc2ggPSBzdHJpbmcodGVzdFBhdGhPclVSTCwgc2Vw
YXJhdG9yUG9zICsgMSk7Ci0gICAgfQorICAgIFRlc3RDb21tYW5kIGNvbW1hbmQgPSBwYXJzZUlu
cHV0TGluZShpbnB1dExpbmUpOworICAgIHN0cmluZyYgdGVzdFVSTCA9IGNvbW1hbmQucGF0aE9y
VVJMOworICAgIGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCA9IGNvbW1hbmQuc2hvdWxkRHVtcFBp
eGVsczsKIAogICAgIC8vIENvbnZlcnQgdGhlIHBhdGggaW50byBhIGZ1bGwgZmlsZSBVUkwgaWYg
aXQgZG9lcyBub3QgbG9vawogICAgIC8vIGxpa2UgYW4gSFRUUC9TIFVSTCAoZG9lc24ndCBzdGFy
dCB3aXRoIGh0dHA6Ly8gb3IgaHR0cHM6Ly8pLgpAQCAtNzEyLDcgKzcwNiw3IEBAIHN0YXRpYyB2
b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiB0ZXN0UGF0aE9yVVJMKQogCiAgICAgcmVzZXREZWZh
dWx0c1RvQ29uc2lzdGVudFZhbHVlcygpOwogCi0gICAgZ0xheW91dFRlc3RDb250cm9sbGVyID0g
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmNyZWF0ZSh0ZXN0VVJMLCBleHBlY3RlZFBpeGVsSGFzaCk7
CisgICAgZ0xheW91dFRlc3RDb250cm9sbGVyID0gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNyZWF0
ZSh0ZXN0VVJMLCBjb21tYW5kLmV4cGVjdGVkUGl4ZWxIYXNoKTsKICAgICB0b3BMb2FkaW5nRnJh
bWUgPSAwOwogICAgIGRvbmUgPSBmYWxzZTsKIApAQCAtMTQ0Nyw3ICsxNDQxLDcgQEAgaW50IG1h
aW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICAgICAgcHJpbnRTZXBhcmF0b3JzID0gdHJ1
ZTsKICAgICAgICAgcnVuVGVzdGluZ1NlcnZlckxvb3AoKTsKICAgICB9IGVsc2UgewotICAgICAg
ICBwcmludFNlcGFyYXRvcnMgPSAob3B0aW5kIDwgYXJnYy0xIHx8IChkdW1wUGl4ZWxzICYmIGR1
bXBUcmVlKSk7CisgICAgICAgIHByaW50U2VwYXJhdG9ycyA9IChvcHRpbmQgPCBhcmdjLTEgfHwg
KGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCAmJiBkdW1wVHJlZSkpOwogICAgICAgICBmb3IgKGlu
dCBpID0gb3B0aW5kOyBpICE9IGFyZ2M7ICsraSkKICAgICAgICAgICAgIHJ1blRlc3QoYXJndltp
XSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5k
ZXJUcmVlLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCmlu
ZGV4IGFiYmE1MzVlZGRjODhhMzk0OTAyOTRmZDQ1MWEzOTE5NjhmY2MzZDEuLjNmOWQ0MjY2NDUx
ZmFjYmUxMTUwOTYyMDM1NTk3OTAzMmJlYmU2ZmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9t
YWMvRHVtcFJlbmRlclRyZWUubW0KQEAgLTE0MCw3ICsxNDAsNyBAQCBzdGF0aWMgSGlzdG9yeURl
bGVnYXRlICpoaXN0b3J5RGVsZWdhdGU7CiBQb2xpY3lEZWxlZ2F0ZSAqcG9saWN5RGVsZWdhdGU7
CiBTdG9yYWdlVHJhY2tlckRlbGVnYXRlICpzdG9yYWdlRGVsZWdhdGU7CiAKLXN0YXRpYyBpbnQg
ZHVtcFBpeGVsczsKK3N0YXRpYyBib29sIGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdDsKIHN0YXRp
YyBpbnQgdGhyZWFkZWQ7CiBzdGF0aWMgaW50IGR1bXBUcmVlID0gWUVTOwogc3RhdGljIGludCB1
c2VUaW1lb3V0V2F0Y2hkb2cgPSBZRVM7CkBAIC03ODAsNyArNzgwLDYgQEAgc3RhdGljIHZvaWQg
aW5pdGlhbGl6ZUdsb2JhbHNGcm9tQ29tbWFuZExpbmVPcHRpb25zKGludCBhcmdjLCBjb25zdCBj
aGFyICphcmd2W10KIHsKICAgICBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKICAgICAgICAg
eyJub3RyZWUiLCBub19hcmd1bWVudCwgJmR1bXBUcmVlLCBOT30sCi0gICAgICAgIHsicGl4ZWwt
dGVzdHMiLCBub19hcmd1bWVudCwgJmR1bXBQaXhlbHMsIFlFU30sCiAgICAgICAgIHsidHJlZSIs
IG5vX2FyZ3VtZW50LCAmZHVtcFRyZWUsIFlFU30sCiAgICAgICAgIHsidGhyZWFkZWQiLCBub19h
cmd1bWVudCwgJnRocmVhZGVkLCBZRVN9LAogICAgICAgICB7ImNvbXBsZXgtdGV4dCIsIG5vX2Fy
Z3VtZW50LCAmZm9yY2VDb21wbGV4VGV4dCwgWUVTfSwKQEAgLTg0OSw3ICs4NDgsNyBAQCB2b2lk
IGR1bXBSZW5kZXJUcmVlKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pCiAgICAgaW5pdGlh
bGl6ZUdsb2JhbHNGcm9tQ29tbWFuZExpbmVPcHRpb25zKGFyZ2MsIGFyZ3YpOwogICAgIHByZXBh
cmVDb25zaXN0ZW50VGVzdGluZ0Vudmlyb25tZW50KCk7CiAgICAgYWRkVGVzdFBsdWdpbnNUb1Bs
dWdpblNlYXJjaFBhdGgoYXJndlswXSk7Ci0gICAgaWYgKGR1bXBQaXhlbHMpCisgICAgaWYgKGR1
bXBQaXhlbHNGb3JDdXJyZW50VGVzdCkKICAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXJzKCk7
CiAKICAgICBpZiAoZm9yY2VDb21wbGV4VGV4dCkKQEAgLTg3NCw3ICs4NzMsNyBAQCB2b2lkIGR1
bXBSZW5kZXJUcmVlKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pCiAgICAgICAgIHByaW50
U2VwYXJhdG9ycyA9IFlFUzsKICAgICAgICAgcnVuVGVzdGluZ1NlcnZlckxvb3AoKTsKICAgICB9
IGVsc2UgewotICAgICAgICBwcmludFNlcGFyYXRvcnMgPSAob3B0aW5kIDwgYXJnYy0xIHx8IChk
dW1wUGl4ZWxzICYmIGR1bXBUcmVlKSk7CisgICAgICAgIHByaW50U2VwYXJhdG9ycyA9IChvcHRp
bmQgPCBhcmdjIC0gMSB8fCAoZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ICYmIGR1bXBUcmVlKSk7
CiAgICAgICAgIGZvciAoaW50IGkgPSBvcHRpbmQ7IGkgIT0gYXJnYzsgKytpKQogICAgICAgICAg
ICAgcnVuVGVzdChhcmd2W2ldKTsKICAgICB9CkBAIC0xMTk1LDcgKzExOTQsNyBAQCB2b2lkIGR1
bXAoKQogICAgICAgICB9ICAgICAgICAgICAgCiAgICAgfQogCi0gICAgaWYgKGR1bXBQaXhlbHMg
JiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5nZW5lcmF0ZVBpeGVsUmVzdWx0cygpKQorICAgIGlm
IChkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5nZW5l
cmF0ZVBpeGVsUmVzdWx0cygpKQogICAgICAgICAvLyBGSVhNRTogd2hlbiBpc1ByaW50aW5nIGlz
IHNldCwgZHVtcCB0aGUgaW1hZ2Ugd2l0aCBwYWdlIHNlcGFyYXRvcnMuCiAgICAgICAgIGR1bXBX
ZWJWaWV3QXNQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKGdMYXlvdXRUZXN0Q29udHJvbGxl
ci0+ZXhwZWN0ZWRQaXhlbEhhc2goKSk7CiAKQEAgLTEyNzYsMTkgKzEyNzUsMTMgQEAgc3RhdGlj
IHZvaWQgcmVzZXRXZWJWaWV3VG9Db25zaXN0ZW50U3RhdGVCZWZvcmVUZXN0aW5nKCkKICAgICBb
bWFpbkZyYW1lIF9jbGVhck9wZW5lcl07CiB9CiAKLXN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qg
c3RyaW5nJiB0ZXN0UGF0aE9yVVJMKQorc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcm
IGlucHV0TGluZSkKIHsKLSAgICBBU1NFUlQoIXRlc3RQYXRoT3JVUkwuZW1wdHkoKSk7Ci0gICAg
Ci0gICAgLy8gTG9vayBmb3IgIiciIGFzIGEgc2VwYXJhdG9yIGJldHdlZW4gdGhlIHBhdGggb3Ig
VVJMLCBhbmQgdGhlIHBpeGVsIGR1bXAgaGFzaCB0aGF0IGZvbGxvd3MuCi0gICAgc3RyaW5nIHBh
dGhPclVSTCh0ZXN0UGF0aE9yVVJMKTsKLSAgICBzdHJpbmcgZXhwZWN0ZWRQaXhlbEhhc2g7Ci0g
ICAgCi0gICAgc2l6ZV90IHNlcGFyYXRvclBvcyA9IHBhdGhPclVSTC5maW5kKCInIik7Ci0gICAg
aWYgKHNlcGFyYXRvclBvcyAhPSBzdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgcGF0aE9yVVJMID0g
c3RyaW5nKHRlc3RQYXRoT3JVUkwsIDAsIHNlcGFyYXRvclBvcyk7Ci0gICAgICAgIGV4cGVjdGVk
UGl4ZWxIYXNoID0gc3RyaW5nKHRlc3RQYXRoT3JVUkwsIHNlcGFyYXRvclBvcyArIDEpOwotICAg
IH0KKyAgICBBU1NFUlQoIWlucHV0TGluZS5lbXB0eSgpKTsKKworICAgIFRlc3RDb21tYW5kIGNv
bW1hbmQgPSBwYXJzZUlucHV0TGluZShpbnB1dExpbmUpOworICAgIGNvbnN0IHN0cmluZyYgcGF0
aE9yVVJMID0gY29tbWFuZC5wYXRoT3JVUkw7CisgICAgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0
ID0gY29tbWFuZC5zaG91bGREdW1wUGl4ZWxzOwogCiAgICAgTlNTdHJpbmcgKnBhdGhPclVSTFN0
cmluZyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpwYXRoT3JVUkwuY19zdHIoKV07
CiAgICAgaWYgKCFwYXRoT3JVUkxTdHJpbmcpIHsKQEAgLTEzMTAsNyArMTMwMyw3IEBAIHN0YXRp
YyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiB0ZXN0UGF0aE9yVVJMKQogICAgIAogICAgIHJl
c2V0V2ViVmlld1RvQ29uc2lzdGVudFN0YXRlQmVmb3JlVGVzdGluZygpOwogCi0gICAgZ0xheW91
dFRlc3RDb250cm9sbGVyID0gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNyZWF0ZSh0ZXN0VVJMLCBl
eHBlY3RlZFBpeGVsSGFzaCk7CisgICAgZ0xheW91dFRlc3RDb250cm9sbGVyID0gTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmNyZWF0ZSh0ZXN0VVJMLCBjb21tYW5kLmV4cGVjdGVkUGl4ZWxIYXNoKTsK
ICAgICB0b3BMb2FkaW5nRnJhbWUgPSBuaWw7CiAgICAgQVNTRVJUKCFkcmFnZ2luZ0luZm8pOyAv
LyB0aGUgcHJldmlvdXMgdGVzdCBzaG91bGQgaGF2ZSBjYWxsZWQgZXZlbnRTZW5kZXIubW91c2VV
cCB0byBkcm9wIQogICAgIHJlbGVhc2VBbmRaZXJvKCZkcmFnZ2luZ0luZm8pOwpkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvCmluZGV4IGY0N2ZiNDM0NGI5ZWY4M2E1
YWE0NmJiNTY4M2Q5MjMxNDk0YWExMjUuLjgzMzg3MGJjYWM5YTgyZWRjZWU4MWVkNWRiYTMxOTEw
YWNmMGYwZjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJU
cmVlLnBybworKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5wcm8K
QEAgLTI1LDYgKzI1LDcgQEAgY29udGFpbnMoREVGSU5FUywgSEFWRV9GT05UQ09ORklHPTEpOiBQ
S0dDT05GSUcgKz0gZm9udGNvbmZpZwogCiBIRUFERVJTICs9IFwKICAgICAkJFBXRC8uLi9Xb3Jr
UXVldWUuaCBcCisgICAgJCRQV0QvLi4vRHVtcFJlbmRlclRyZWUuaCBcCiAgICAgRHVtcFJlbmRl
clRyZWVRdC5oIFwKICAgICBFdmVudFNlbmRlclF0LmggXAogICAgIFRleHRJbnB1dENvbnRyb2xs
ZXJRdC5oIFwKQEAgLTM2LDYgKzM3LDcgQEAgSEVBREVSUyArPSBcCiAKIFNPVVJDRVMgKz0gXAog
ICAgICQkUFdELy4uL1dvcmtRdWV1ZS5jcHAgXAorICAgICQkUFdELy4uL0R1bXBSZW5kZXJUcmVl
Q29tbW9uLmNwcCBcCiAgICAgRHVtcFJlbmRlclRyZWVRdC5jcHAgXAogICAgIEV2ZW50U2VuZGVy
UXQuY3BwIFwKICAgICBUZXh0SW5wdXRDb250cm9sbGVyUXQuY3BwIFwKZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAKaW5kZXggMGVjZjYyMmYzZjhkZGE1NmM0
Yzg4Y2VmY2YwOGEzYzk4Y2YyMzdjNC4uNWE1Y2I5NmFkZWM5M2NkMGViNjg1MDBlNzZlYzMxZWZk
ZGEwOTdhZiAxMDA3NTUKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRy
ZWVRdC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5j
cHAKQEAgLTMwLDYgKzMwLDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRHVtcFJlbmRlclRyZWUuaCIKIAogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlUXQuaCIKICNp
bmNsdWRlICJEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oIgpAQCAtNjkwLDQ0ICs2OTEsMjcgQEAg
dm9pZCBEdW1wUmVuZGVyVHJlZTo6bG9hZE5leHRUZXN0SW5TdGFuZEFsb25lTW9kZSgpCiAKIHZv
aWQgRHVtcFJlbmRlclRyZWU6OnByb2Nlc3NMaW5lKGNvbnN0IFFTdHJpbmcgJmlucHV0KQogewot
ICAgIFFTdHJpbmcgbGluZSA9IGlucHV0OwotCi0gICAgbV9kdW1wUGl4ZWxzRm9yQ3VycmVudFRl
c3QgPSBmYWxzZTsKLSAgICBtX2V4cGVjdGVkSGFzaCA9IFFTdHJpbmcoKTsKLSAgICAvLyBzaW5n
bGUgcXVvdGUgbWFya3MgdGhlIHBpeGVsIGR1bXAgaGFzaAotICAgIGludCBpbmRleE9mRmlyc3RT
ZXBhcmF0b3IgPSBsaW5lLmluZGV4T2YoJ1wnJyk7Ci0gICAgaW50IGluZGV4T2ZTZWNvbmRTZXBh
cmF0b3IgPSBsaW5lLmluZGV4T2YoJ1wnJywgaW5kZXhPZkZpcnN0U2VwYXJhdG9yICsgMSk7Ci0g
ICAgaWYgKGluZGV4T2ZGaXJzdFNlcGFyYXRvciA+IC0xKSB7Ci0gICAgICAgIGludCBpbmRleE9m
UGl4ZWxIYXNoID0gaW5kZXhPZkZpcnN0U2VwYXJhdG9yICsgMTsKLQotICAgICAgICAvLyBOUldU
IHBhc3NlcyAtLXBpeGVsLXRlc3QgaWYgd2Ugc2hvdWxkIGR1bXAgcGl4ZWxzIGZvciB0aGUgdGVz
dC4KLSAgICAgICAgY29uc3QgUVN0cmluZyBleHBlY3RlZEFyZyhRTGF0aW4xU3RyaW5nKCItLXBp
eGVsLXRlc3QiKSk7Ci0gICAgICAgIFFTdHJpbmcgYXJnVGVzdCA9IGxpbmUubWlkKGluZGV4T2ZG
aXJzdFNlcGFyYXRvciArIDEsIGV4cGVjdGVkQXJnLmxlbmd0aCgpKTsKLSAgICAgICAgaWYgKGFy
Z1Rlc3QgPT0gZXhwZWN0ZWRBcmcpIHsKLSAgICAgICAgICAgIG1fZHVtcFBpeGVsc0ZvckN1cnJl
bnRUZXN0ID0gdHJ1ZTsKLSAgICAgICAgICAgIGluZGV4T2ZQaXhlbEhhc2ggPSBpbmRleE9mU2Vj
b25kU2VwYXJhdG9yID09IC0xID8gLTEgOiBpbmRleE9mU2Vjb25kU2VwYXJhdG9yICsgMTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoaW5kZXhPZlBpeGVsSGFzaCAhPSAtMSAmJiBpbmRleE9mUGl4
ZWxIYXNoIDwgbGluZS5zaXplKCkpCi0gICAgICAgICAgICBtX2V4cGVjdGVkSGFzaCA9IGxpbmUu
bWlkKGluZGV4T2ZQaXhlbEhhc2gpOwotICAgICAgICBsaW5lLnJlbW92ZShpbmRleE9mRmlyc3RT
ZXBhcmF0b3IsIGxpbmUubGVuZ3RoKCkpOwotICAgIH0KLQotICAgIGlmIChsaW5lLnN0YXJ0c1dp
dGgoUUxhdGluMVN0cmluZygiaHR0cDoiKSkKLSAgICAgICAgICAgIHx8IGxpbmUuc3RhcnRzV2l0
aChRTGF0aW4xU3RyaW5nKCJodHRwczoiKSkKLSAgICAgICAgICAgIHx8IGxpbmUuc3RhcnRzV2l0
aChRTGF0aW4xU3RyaW5nKCJmaWxlOiIpKQotICAgICAgICAgICAgfHwgbGluZSA9PSBRTGF0aW4x
U3RyaW5nKCJhYm91dDpibGFuayIpKSB7Ci0gICAgICAgIG9wZW4oUVVybChsaW5lKSk7CisgICAg
VGVzdENvbW1hbmQgY29tbWFuZCA9IHBhcnNlSW5wdXRMaW5lKHN0ZDo6c3RyaW5nKGlucHV0LnRv
TGF0aW4xKCkuY29uc3REYXRhKCkpKTsKKyAgICBRU3RyaW5nIHBhdGhPclVSTCA9IFFMYXRpbjFT
dHJpbmcoY29tbWFuZC5wYXRoT3JVUkwuY19zdHIoKSk7CisgICAgbV9kdW1wUGl4ZWxzRm9yQ3Vy
cmVudFRlc3QgPSBjb21tYW5kLnNob3VsZER1bXBQaXhlbHM7CisgICAgbV9leHBlY3RlZEhhc2gg
PSBRTGF0aW4xU3RyaW5nKGNvbW1hbmQuZXhwZWN0ZWRQaXhlbEhhc2guY19zdHIoKSk7CisKKyAg
ICBpZiAocGF0aE9yVVJMLnN0YXJ0c1dpdGgoUUxhdGluMVN0cmluZygiaHR0cDoiKSkKKyAgICAg
ICAgICAgIHx8IHBhdGhPclVSTC5zdGFydHNXaXRoKFFMYXRpbjFTdHJpbmcoImh0dHBzOiIpKQor
ICAgICAgICAgICAgfHwgcGF0aE9yVVJMLnN0YXJ0c1dpdGgoUUxhdGluMVN0cmluZygiZmlsZToi
KSkKKyAgICAgICAgICAgIHx8IHBhdGhPclVSTCA9PSBRTGF0aW4xU3RyaW5nKCJhYm91dDpibGFu
ayIpKSB7CisgICAgICAgIG9wZW4oUVVybChwYXRoT3JVUkwpKTsKICAgICB9IGVsc2UgewotICAg
ICAgICBRRmlsZUluZm8gZmkobGluZSk7CisgICAgICAgIFFGaWxlSW5mbyBmaShwYXRoT3JVUkwp
OwogCiAgICAgICAgIGlmICghZmkuZXhpc3RzKCkpIHsKICAgICAgICAgICAgIFFEaXIgY3VycmVu
dERpciA9IFFEaXI6OmN1cnJlbnRQYXRoKCk7CiAKICAgICAgICAgICAgIC8vIFRyeSB0byBiZSBz
bWFydCBhYm91dCB3aGVyZSB0aGUgdGVzdCBpcyBsb2NhdGVkCiAgICAgICAgICAgICBpZiAoY3Vy
cmVudERpci5kaXJOYW1lKCkgPT0gUUxhdGluMVN0cmluZygiTGF5b3V0VGVzdHMiKSkKLSAgICAg
ICAgICAgICAgICBmaSA9IFFGaWxlSW5mbyhjdXJyZW50RGlyLCBsaW5lLnJlcGxhY2UoUVJlZ0V4
cCgiLio/TGF5b3V0VGVzdHMvKC4qKSIpLCAiXFwxIikpOwotICAgICAgICAgICAgZWxzZSBpZiAo
IWxpbmUuY29udGFpbnMoUUxhdGluMVN0cmluZygiTGF5b3V0VGVzdHMiKSkpCi0gICAgICAgICAg
ICAgICAgZmkgPSBRRmlsZUluZm8oY3VycmVudERpciwgbGluZS5wcmVwZW5kKFFMYXRpbjFTdHJp
bmcoIkxheW91dFRlc3RzLyIpKSk7CisgICAgICAgICAgICAgICAgZmkgPSBRRmlsZUluZm8oY3Vy
cmVudERpciwgcGF0aE9yVVJMLnJlcGxhY2UoUVJlZ0V4cCgiLio/TGF5b3V0VGVzdHMvKC4qKSIp
LCAiXFwxIikpOworICAgICAgICAgICAgZWxzZSBpZiAoIXBhdGhPclVSTC5jb250YWlucyhRTGF0
aW4xU3RyaW5nKCJMYXlvdXRUZXN0cyIpKSkKKyAgICAgICAgICAgICAgICBmaSA9IFFGaWxlSW5m
byhjdXJyZW50RGlyLCBwYXRoT3JVUkwucHJlcGVuZChRTGF0aW4xU3RyaW5nKCJMYXlvdXRUZXN0
cy8iKSkpOwogCiAgICAgICAgICAgICBpZiAoIWZpLmV4aXN0cygpKSB7CiAgICAgICAgICAgICAg
ICAgZW1pdCByZWFkeSgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1
bXBSZW5kZXJUcmVlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJl
ZS5jcHAKaW5kZXggZjQwMmEwMmNhMzYyYzUyNzlkZTVhNWM4YzFlMGNlOWRmMzYyYWJhZC4uMzEy
NDMwZDU2OTg5NTQ4YmMzZWNhZDEzZjhkZjE4MzA5NmMxN2M4NSAxMDA2NDQKLS0tIGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAorKysgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwCkBAIC04MCw3ICs4MCw3IEBAIHN0YXRpYyBM
UENXU1RSIGZvbnRzRW52aXJvbm1lbnRWYXJpYWJsZSA9IEwiV0VCS0lUX1RFU1RGT05UUyI7CiBj
b25zdCBMUENXU1RSIGtEdW1wUmVuZGVyVHJlZUNsYXNzTmFtZSA9IEwiRHVtcFJlbmRlclRyZWVX
aW5kb3ciOwogCiBzdGF0aWMgYm9vbCBkdW1wVHJlZSA9IHRydWU7Ci1zdGF0aWMgYm9vbCBkdW1w
UGl4ZWxzOworc3RhdGljIGJvb2wgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0Owogc3RhdGljIGJv
b2wgZHVtcEFsbFBpeGVsczsKIHN0YXRpYyBib29sIHByaW50U2VwYXJhdG9yczsKIHN0YXRpYyBi
b29sIGxlYWtDaGVja2luZyA9IGZhbHNlOwpAQCAtNzU5LDcgKzc1OSw3IEBAIHZvaWQgZHVtcCgp
CiAgICAgICAgIGZmbHVzaChzdGRlcnIpOwogICAgIH0KIAotICAgIGlmIChkdW1wUGl4ZWxzCisg
ICAgaWYgKGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdAogICAgICAmJiBnTGF5b3V0VGVzdENvbnRy
b2xsZXItPmdlbmVyYXRlUGl4ZWxSZXN1bHRzKCkKICAgICAgJiYgIWdMYXlvdXRUZXN0Q29udHJv
bGxlci0+ZHVtcERPTUFzV2ViQXJjaGl2ZSgpCiAgICAgICYmICFnTGF5b3V0VGVzdENvbnRyb2xs
ZXItPmR1bXBTb3VyY2VBc1dlYkFyY2hpdmUoKSkKQEAgLTk0OCwyMCArOTQ4LDE0IEBAIHN0YXRp
YyB2b2lkIHNpemVXZWJWaWV3Rm9yQ3VycmVudFRlc3QoKQogICAgIDo6U2V0V2luZG93UG9zKHdl
YlZpZXdXaW5kb3csIDAsIDAsIDAsIHdpZHRoLCBoZWlnaHQsIFNXUF9OT01PVkUpOwogfQogCi1z
dGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYgdGVzdFBhdGhPclVSTCkKK3N0YXRpYyB2
b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBpbnB1dExpbmUpCiB7CisgICAgVGVzdENvbW1hbmQg
Y29tbWFuZCA9IHBhcnNlSW5wdXRMaW5lKGlucHV0TGluZSk7CisgICAgY29uc3Qgc3RyaW5nJiBw
YXRoT3JVUkwgPSBjb21tYW5kLnBhdGhPclVSTDsKKyAgICBkdW1wUGl4ZWxzRm9yQ3VycmVudFRl
c3QgPSBjb21tYW5kLnNob3VsZER1bXBQaXhlbHM7CisKICAgICBzdGF0aWMgQlNUUiBtZXRob2RC
U3RyID0gU3lzQWxsb2NTdHJpbmcoVEVYVCgiR0VUIikpOwogCi0gICAgLy8gTG9vayBmb3IgIici
IGFzIGEgc2VwYXJhdG9yIGJldHdlZW4gdGhlIHBhdGggb3IgVVJMLCBhbmQgdGhlIHBpeGVsIGR1
bXAgaGFzaCB0aGF0IGZvbGxvd3MuCi0gICAgc3RyaW5nIHBhdGhPclVSTCh0ZXN0UGF0aE9yVVJM
KTsKLSAgICBzdHJpbmcgZXhwZWN0ZWRQaXhlbEhhc2g7Ci0gICAgCi0gICAgc2l6ZV90IHNlcGFy
YXRvclBvcyA9IHBhdGhPclVSTC5maW5kKCInIik7Ci0gICAgaWYgKHNlcGFyYXRvclBvcyAhPSBz
dHJpbmc6Om5wb3MpIHsKLSAgICAgICAgcGF0aE9yVVJMID0gc3RyaW5nKHRlc3RQYXRoT3JVUkws
IDAsIHNlcGFyYXRvclBvcyk7Ci0gICAgICAgIGV4cGVjdGVkUGl4ZWxIYXNoID0gc3RyaW5nKHRl
c3RQYXRoT3JVUkwsIHNlcGFyYXRvclBvcyArIDEpOwotICAgIH0KLSAgICAKICAgICBCU1RSIHVy
bEJTdHI7CiAgCiAgICAgQ0ZTdHJpbmdSZWYgc3RyID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ1N0cmlu
ZygwLCBwYXRoT3JVUkwuY19zdHIoKSwga0NGU3RyaW5nRW5jb2RpbmdXaW5kb3dzTGF0aW4xKTsK
QEAgLTk4Myw3ICs5NzcsNyBAQCBzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYgdGVz
dFBhdGhPclVSTCkKIAogICAgIENGUmVsZWFzZSh1cmwpOwogCi0gICAgOjpnTGF5b3V0VGVzdENv
bnRyb2xsZXIgPSBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y3JlYXRlKHBhdGhPclVSTCwgZXhwZWN0
ZWRQaXhlbEhhc2gpOworICAgIDo6Z0xheW91dFRlc3RDb250cm9sbGVyID0gTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmNyZWF0ZShwYXRoT3JVUkwsIGNvbW1hbmQuZXhwZWN0ZWRQaXhlbEhhc2gpOwog
ICAgIGRvbmUgPSBmYWxzZTsKICAgICB0b3BMb2FkaW5nRnJhbWUgPSAwOwogCkBAIC0xMzM3LDEx
ICsxMzMxLDYgQEAgZXh0ZXJuICJDIiBfX2RlY2xzcGVjKGRsbGV4cG9ydCkgaW50IFdJTkFQSSBk
bGxMYXVuY2hlckVudHJ5UG9pbnQoaW50IGFyZ2MsIGNvbnMKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFzdHJpY21wKGFyZ3ZbaV0sICItLXBpeGVsLXRl
c3RzIikpIHsKLSAgICAgICAgICAgIGR1bXBQaXhlbHMgPSB0cnVlOwotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLQogICAgICAgICBpZiAoIXN0cmljbXAoYXJndltpXSwgIi0tY29t
cGxleC10ZXh0IikpIHsKICAgICAgICAgICAgIGZvcmNlQ29tcGxleFRleHQgPSB0cnVlOwogICAg
ICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4v
RHVtcFJlbmRlclRyZWUudmNwcm9qIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5k
ZXJUcmVlLnZjcHJvagppbmRleCA0ODQzYzM5MGU3YzZiNTJlMjRlMmIzNzcwNjU0NzhkMDc2YzA5
N2ZhLi43ZTI0MmExY2RlNGEyZmNjYzFhMjQ3MWI2MTY5YjNlMzNlYWRjZGNkIDEwMDY0NAotLS0g
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUudmNwcm9qCisrKyBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS52Y3Byb2oKQEAgLTU2Myw2ICs1
NjMsMTAgQEAKIAkJCT4KIAkJPC9GaWxlPgogCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlxE
dW1wUmVuZGVyVHJlZUNvbW1vbi5jcHAiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJl
bGF0aXZlUGF0aD0iLi5cRHVtcFJlbmRlclRyZWVQcmVmaXguaCIKIAkJCT4KIAkJPC9GaWxlPgpk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd3NjcmlwdCBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL3dzY3JpcHQKaW5kZXggNjQ1YzdkNjQxNTk4YWZlMmYxNGUxNjNhZDRjY2VmMjdjNTI4
Yjc2NC4uYjMyOTI5NDUwYjI4YWE4ODkyYzMzZTNiZTBkOTZmMGU2ZTExMzQxOCAxMDA2NDQKLS0t
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd3NjcmlwdAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS93c2NyaXB0CkBAIC00MCw2ICs0MCw3IEBAIGluY2x1ZGVfcGF0aHMgPSBbCiAgICAgICAgICAg
ICAgICAgJ3d4JwogICAgICAgICAgICAgICAgIF0KIHNvdXJjZXMgPSBbCisgICAgICAgICAgICAn
RHVtcFJlbmRlclRyZWVDb21tb24uY3BwJywKICAgICAgICAgICAgICdMYXlvdXRUZXN0Q29udHJv
bGxlci5jcHAnLAogICAgICAgICAgICAgJ1dvcmtRdWV1ZS5jcHAnLAogICAgICAgICAgICAgJ3d4
L0R1bXBSZW5kZXJUcmVlV3guY3BwJywKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L3d4L0R1bXBSZW5kZXJUcmVlV3guY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvRHVtcFJl
bmRlclRyZWVXeC5jcHAKaW5kZXggMzFhZGQxMWEyZWI3NGQxZjRkODMyOTQ3OWY0MTlmMTA3ZmZi
YTg4Zi4uNDViODUyZDg4YWI5YmRhMjkxZmIxZWQyNzdhY2E3NTFkZmQzNTA5NyAxMDA2NDQKLS0t
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvRHVtcFJlbmRlclRyZWVXeC5jcHAKKysrIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvd3gvRHVtcFJlbmRlclRyZWVXeC5jcHAKQEAgLTUwLDcgKzUwLDcg
QEAKIHZvbGF0aWxlIGJvb2wgZG9uZSA9IHRydWU7CiB2b2xhdGlsZSBib29sIG5vdGlmaWVkID0g
ZmFsc2U7CiBzdGF0aWMgYm9vbCBwcmludFNlcGFyYXRvcnMgPSB0cnVlOwotc3RhdGljIGludCBk
dW1wUGl4ZWxzOworc3RhdGljIGludCBkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3Q7CiBzdGF0aWMg
aW50IGR1bXBUcmVlID0gMTsKIHRpbWVfdCBzdGFydFRpbWU7IC8vIHRvIGRldGVjdCB0aW1lb3V0
cyAvIGZhaWxlZCB0ZXN0cwogCkBAIC0yMDMsNyArMjAzLDcgQEAgdm9pZCBkdW1wKCkKICAgICAg
ICAgfQogICAgIH0KIAotICAgIGlmIChkdW1wUGl4ZWxzCisgICAgaWYgKGR1bXBQaXhlbHNGb3JD
dXJyZW50VGVzdAogICAgICAgICAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmdlbmVyYXRlUGl4
ZWxSZXN1bHRzKCkKICAgICAgICAgJiYgIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcERPTUFz
V2ViQXJjaGl2ZSgpCiAgICAgICAgICYmICFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBTb3Vy
Y2VBc1dlYkFyY2hpdmUoKSkgewpAQCAtMjE4LDI2ICsyMTgsMjEgQEAgdm9pZCBkdW1wKCkKICAg
ICBnTGF5b3V0VGVzdENvbnRyb2xsZXIuY2xlYXIoKTsKIH0KIAotc3RhdGljIHZvaWQgcnVuVGVz
dChjb25zdCB3eFN0cmluZyB0ZXN0UGF0aE9yVVJMKQorc3RhdGljIHZvaWQgcnVuVGVzdChjb25z
dCB3eFN0cmluZyBpbnB1dExpbmUpCiB7CiAgICAgZG9uZSA9IGZhbHNlOwogICAgIHRpbWUoJnN0
YXJ0VGltZSk7Ci0gICAgc3RyaW5nIHBhdGhPclVSTFN0cmluZyh0ZXN0UGF0aE9yVVJMLmNoYXJf
c3RyKCkpOwotICAgIHN0cmluZyBwYXRoT3JVUkwocGF0aE9yVVJMU3RyaW5nKTsKLSAgICBzdHJp
bmcgZXhwZWN0ZWRQaXhlbEhhc2g7Ci0KLSAgICBzaXplX3Qgc2VwYXJhdG9yUG9zID0gcGF0aE9y
VVJMLmZpbmQoIiciKTsKLSAgICBpZiAoc2VwYXJhdG9yUG9zICE9IHN0cmluZzo6bnBvcykgewot
ICAgICAgICBwYXRoT3JVUkwgPSBzdHJpbmcocGF0aE9yVVJMU3RyaW5nLCAwLCBzZXBhcmF0b3JQ
b3MpOwotICAgICAgICBleHBlY3RlZFBpeGVsSGFzaCA9IHN0cmluZyhwYXRoT3JVUkxTdHJpbmcs
IHNlcGFyYXRvclBvcyArIDEpOwotICAgIH0KKworICAgIFRlc3RDb21tYW5kIGNvbW1hbmQgPSBw
YXJzZUlucHV0TGluZShzdGQ6OnN0cmluZyhpbnB1dExpbmUuVG9Bc2NpaSgpKSk7CisgICAgc3Ry
aW5nJiBwYXRoT3JVUkwgPSBjb21tYW5kLnBhdGhPclVSTDsKKyAgICBkdW1wUGl4ZWxzRm9yQ3Vy
cmVudFRlc3QgPSBjb21tYW5kLnNob3VsZER1bXBQaXhlbHM7CiAgICAgCiAgICAgLy8gQ1VSTCBp
c24ndCBoYXBweSBpZiB3ZSBkb24ndCBoYXZlIGEgcHJvdG9jb2wuCiAgICAgc2l6ZV90IGh0dHAg
PSBwYXRoT3JVUkwuZmluZCgiaHR0cDovLyIpOwogICAgIGlmIChodHRwID09IHN0cmluZzo6bnBv
cykKICAgICAgICAgcGF0aE9yVVJMLmluc2VydCgwLCAiZmlsZTovLyIpOwogICAgIAotICAgIGdM
YXlvdXRUZXN0Q29udHJvbGxlciA9IExheW91dFRlc3RDb250cm9sbGVyOjpjcmVhdGUocGF0aE9y
VVJMLCBleHBlY3RlZFBpeGVsSGFzaCk7CisgICAgZ0xheW91dFRlc3RDb250cm9sbGVyID0gTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmNyZWF0ZShwYXRoT3JVUkwsIGNvbW1hbmQuZXhwZWN0ZWRQaXhl
bEhhc2gpOwogICAgIGlmICghZ0xheW91dFRlc3RDb250cm9sbGVyKSB7CiAgICAgICAgIHd4VGhl
QXBwLT5FeGl0TWFpbkxvb3AoKTsKICAgICB9CkBAIC0yODIsMTEgKzI3Nyw2IEBAIGJvb2wgTXlB
cHA6Ok9uSW5pdCgpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgaWYgKCFvcHRpb24uQ21wTm9DYXNlKF9UKCItLXBpeGVsLXRlc3RzIikpKSB7Ci0g
ICAgICAgICAgICBkdW1wUGl4ZWxzID0gdHJ1ZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICB9Ci0gICAgICAgIAogICAgICAgICBpZiAoIW9wdGlvbi5DbXBOb0Nhc2UoX1QoIi0tdHJl
ZSIpKSkgewogICAgICAgICAgICAgZHVtcFRyZWUgPSB0cnVlOwogICAgICAgICAgICAgY29udGlu
dWU7CkBAIC0zMjMsNyArMzEzLDcgQEAgYm9vbCBNeUFwcDo6T25Jbml0KCkKICAgICAgICAgfQog
ICAgIAogICAgIH0gZWxzZSB7Ci0gICAgICAgIHByaW50U2VwYXJhdG9ycyA9IChvcHRpbmQgPCBh
cmdjLTEgfHwgKGR1bXBQaXhlbHMgJiYgZHVtcFRyZWUpKTsKKyAgICAgICAgcHJpbnRTZXBhcmF0
b3JzID0gKG9wdGluZCA8IGFyZ2MgLSAxIHx8IChkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgJiYg
ZHVtcFRyZWUpKTsKICAgICAgICAgZm9yIChpbnQgaSA9IG9wdGluZDsgaSAhPSBhcmdjOyArK2kp
IHsKICAgICAgICAgICAgIHJ1blRlc3Qod3hUaGVBcHAtPmFyZ3ZbMV0pOwogICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Ub29scy9HTlVtYWtlZmlsZS5hbSBiL1Rvb2xzL0dOVW1ha2VmaWxlLmFtCmlu
ZGV4IGRmOWE3MWYxOGY5NTgwN2VmNGZkNmY3ZDdjMjdkMzExZmEzMjFhYzIuLmY4NWE5ZDEyZWI3
NDU0MjMxNTIyNTExMDYyZWUyN2Y1YTQwODlkNDIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0dOVW1ha2Vm
aWxlLmFtCisrKyBiL1Rvb2xzL0dOVW1ha2VmaWxlLmFtCkBAIC0xMDYsNiArMTA2LDcgQEAgZW5k
aWYKIAogUHJvZ3JhbXNfRHVtcFJlbmRlclRyZWVfU09VUkNFUyA9IFwKIAlUb29scy9EdW1wUmVu
ZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5oIFwKKwlUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVu
ZGVyVHJlZUNvbW1vbi5jcHAgXAogCVRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVl
UHJlZml4LmggXAogCVRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
LmNwcCBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaCBc
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL29sZC1ydW4td2Via2l0LXRlc3RzIGIvVG9vbHMv
U2NyaXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0cwppbmRleCAwOTQ0M2M4N2MwMmYxZThjZjViZGU2
ZDFiMDQ1YzRkYjliYWIwODgyLi5mMDkxYzE5YmFhYjczZmU1ZWY0MmM1MTZiYWNjMTQ1MTM2ZjJk
YzIwIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL29sZC1ydW4td2Via2l0LXRlc3RzCisrKyBi
L1Rvb2xzL1NjcmlwdHMvb2xkLXJ1bi13ZWJraXQtdGVzdHMKQEAgLTc0OCwxMiArNzQ4LDE2IEBA
IGZvciBteSAkdGVzdCAoQHRlc3RzKSB7CiAgICAgcHJpbnQgJHRlc3RzX3J1bl9maCAiJHRlc3Rc
biI7CiAKICAgICAjIFRyeSB0byByZWFkIGV4cGVjdGVkIGhhc2ggZmlsZSBmb3IgcGl4ZWwgdGVz
dHMKLSAgICBteSAkc3VmZml4RXhwZWN0ZWRIYXNoID0gIiI7Ci0gICAgaWYgKCRwaXhlbFRlc3Rz
ICYmICEkcmVzZXRSZXN1bHRzKSB7Ci0gICAgICAgIG15ICRleHBlY3RlZFBpeGVsRGlyID0gZXhw
ZWN0ZWREaXJlY3RvcnlGb3JUZXN0KCRiYXNlLCAwLCAicG5nIik7Ci0gICAgICAgIGlmIChteSAk
ZXhwZWN0ZWRIYXNoID0gcmVhZENoZWNrc3VtRnJvbVBuZyhGaWxlOjpTcGVjLT5jYXRmaWxlKCRl
eHBlY3RlZFBpeGVsRGlyLCAiJGJhc2UtJGV4cGVjdGVkVGFnLnBuZyIpKSkgewotICAgICAgICAg
ICAgIyBGb3JtYXQgZXhwZWN0ZWQgaGFzaCBpbnRvIGEgc3VmZml4IHN0cmluZyB0aGF0IGlzIGFw
cGVuZGVkIHRvIHRoZSBwYXRoIC8gVVJMIHBhc3NlZCB0byBEUlQuCi0gICAgICAgICAgICAkc3Vm
Zml4RXhwZWN0ZWRIYXNoID0gIickZXhwZWN0ZWRIYXNoIjsKKyAgICBteSAkc3VmZml4UGl4ZWxU
ZXN0ID0gIiI7CisgICAgaWYgKCRwaXhlbFRlc3RzKSB7CisgICAgICAgICMgOiBpcyB0aGUgc2Vw
YXJhdG9yIGJldHdlZW4gYXJndW1lbnRzLgorICAgICAgICAkc3VmZml4UGl4ZWxUZXN0ID0gIjot
LXBpeGVsLXRlc3QiOworICAgICAgICBpZiAoISRyZXNldFJlc3VsdHMpIHsKKyAgICAgICAgICAg
IG15ICRleHBlY3RlZFBpeGVsRGlyID0gZXhwZWN0ZWREaXJlY3RvcnlGb3JUZXN0KCRiYXNlLCAw
LCAicG5nIik7CisgICAgICAgICAgICBpZiAobXkgJGV4cGVjdGVkSGFzaCA9IHJlYWRDaGVja3N1
bUZyb21QbmcoRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkZXhwZWN0ZWRQaXhlbERpciwgIiRiYXNlLSRl
eHBlY3RlZFRhZy5wbmciKSkpIHsKKyAgICAgICAgICAgICAgICAjIEZvcm1hdCBleHBlY3RlZCBo
YXNoIGludG8gYSBzdWZmaXggc3RyaW5nIHRoYXQgaXMgYXBwZW5kZWQgdG8gdGhlIHBhdGggLyBV
UkwgcGFzc2VkIHRvIERSVC4KKyAgICAgICAgICAgICAgICAkc3VmZml4UGl4ZWxUZXN0ID0gIjot
LXBpeGVsLXRlc3Q6JGV4cGVjdGVkSGFzaCI7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9CiAKQEAgLTc4OSwxMSArNzkzLDExIEBAIGZvciBteSAkdGVzdCAoQHRlc3RzKSB7CiAgICAg
ICAgIH0gZWxzaWYgKCR0ZXN0ICF+IC9eaHR0cFwvdGVzdHNcL2xvY2FsXC8vICYmICR0ZXN0ICF+
IC9eaHR0cFwvdGVzdHNcL3NzbFwvLykgewogICAgICAgICAgICAgbXkgJHBhdGggPSBjYW5vbnBh
dGgoJHRlc3QpOwogICAgICAgICAgICAgJHBhdGggPX4gcy9eaHR0cFwvdGVzdHNcLy8vOwotICAg
ICAgICAgICAgcHJpbnQgT1VUICJodHRwOi8vMTI3LjAuMC4xOiRodHRwZFBvcnQvJHBhdGgkc3Vm
Zml4RXhwZWN0ZWRIYXNoXG4iOworICAgICAgICAgICAgcHJpbnQgT1VUICJodHRwOi8vMTI3LjAu
MC4xOiRodHRwZFBvcnQvJHBhdGgkc3VmZml4UGl4ZWxUZXN0XG4iOwogICAgICAgICB9IGVsc2lm
ICgkdGVzdCA9fiAvXmh0dHBcL3Rlc3RzXC9zc2xcLy8pIHsKICAgICAgICAgICAgIG15ICRwYXRo
ID0gY2Fub25wYXRoKCR0ZXN0KTsKICAgICAgICAgICAgICRwYXRoID1+IHMvXmh0dHBcL3Rlc3Rz
XC8vLzsKLSAgICAgICAgICAgIHByaW50IE9VVCAiaHR0cHM6Ly8xMjcuMC4wLjE6JGh0dHBkU1NM
UG9ydC8kcGF0aCRzdWZmaXhFeHBlY3RlZEhhc2hcbiI7CisgICAgICAgICAgICBwcmludCBPVVQg
Imh0dHBzOi8vMTI3LjAuMC4xOiRodHRwZFNTTFBvcnQvJHBhdGgkc3VmZml4UGl4ZWxUZXN0XG4i
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbXkgJHRlc3RQYXRoID0gIiR0ZXN0RGly
ZWN0b3J5LyR0ZXN0IjsKICAgICAgICAgICAgIGlmIChpc0N5Z3dpbigpKSB7CkBAIC04MDEsNyAr
ODA1LDcgQEAgZm9yIG15ICR0ZXN0IChAdGVzdHMpIHsKICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgJHRlc3RQYXRoID0gY2Fub25wYXRoKCR0ZXN0UGF0aCk7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBwcmludCBPVVQgIiR0ZXN0UGF0aCRzdWZmaXhFeHBlY3RlZEhh
c2hcbiI7CisgICAgICAgICAgICBwcmludCBPVVQgIiR0ZXN0UGF0aCRzdWZmaXhQaXhlbFRlc3Rc
biI7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBteSAkdGVzdFBhdGggPSAiJHRl
c3REaXJlY3RvcnkvJHRlc3QiOwpAQCAtODEwLDcgKzgxNCw3IEBAIGZvciBteSAkdGVzdCAoQHRl
c3RzKSB7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAkdGVzdFBhdGggPSBjYW5vbnBh
dGgoJHRlc3RQYXRoKTsKICAgICAgICAgfQotICAgICAgICBwcmludCBPVVQgIiR0ZXN0UGF0aCRz
dWZmaXhFeHBlY3RlZEhhc2hcbiIgaWYgZGVmaW5lZCAkdGVzdFBhdGg7CisgICAgICAgIHByaW50
IE9VVCAiJHRlc3RQYXRoJHN1ZmZpeFBpeGVsVGVzdFxuIiBpZiBkZWZpbmVkICR0ZXN0UGF0aDsK
ICAgICB9CiAKICAgICAjIER1bXBSZW5kZXJUcmVlIGlzIGV4cGVjdGVkIHRvIGR1bXAgdHdvICJi
bG9ja3MiIHRvIHN0ZG91dCBmb3IgZWFjaCB0ZXN0LgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CmluZGV4IGFkNzBmMDQyZGU5ZWNiNjAwNjNi
ZWE2ZjUwYzI4NWJmOWVmZDljMTIuLjk0MjE1NjI0ZmUyN2VhNDI1YWE3M2U4OTE1NzdjYzVlNmU5
OTBlMjkgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvYmFzZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2Jhc2UucHkKQEAgLTEyNzcsMjEgKzEyNzcsOSBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN1aXRlLmFyZ3MKICAgICAgICAgcmV0dXJuIFtdCiAKLSAgICBk
ZWYgc3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Blcl90ZXN0KHNlbGYpOgotICAgICAg
ICBpZiBzZWxmLmdldF9vcHRpb24oJ3dlYmtpdF90ZXN0X3J1bm5lcicpOgotICAgICAgICAgICAg
cmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIHNlbGYuX3N1cHBvcnRzX3N3aXRjaGluZ19waXhl
bF90ZXN0c19wZXJfdGVzdCgpCi0KLSAgICBkZWYgX3N1cHBvcnRzX3N3aXRjaGluZ19waXhlbF90
ZXN0c19wZXJfdGVzdChzZWxmKToKLSAgICAgICAgIyBGSVhNRTogYWxsIHBvcnRzIHNob3VsZCBz
dXBwb3J0IGl0LgotICAgICAgICByZXR1cm4gRmFsc2UKLQogICAgIGRlZiBzaG91bGRfcnVuX2Fz
X3BpeGVsX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCk6CiAgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRp
b25zLnBpeGVsX3Rlc3RzOgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIGlmIG5v
dCBzZWxmLnN1cHBvcnRzX3N3aXRjaGluZ19waXhlbF90ZXN0c19wZXJfdGVzdCgpOgotICAgICAg
ICAgICAgIyBDYW5ub3QgZG8gbW9yZSBmaWx0ZXJpbmcgd2l0aG91dCB0aGlzLgotICAgICAgICAg
ICAgcmV0dXJuIFRydWUKICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0X2RpcmVj
dG9yaWVzOgogICAgICAgICAgICAgcmV0dXJuIGFueSh0ZXN0X2lucHV0LnRlc3RfbmFtZS5zdGFy
dHN3aXRoKGRpcmVjdG9yeSkgZm9yIGRpcmVjdG9yeSBpbiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rl
c3RfZGlyZWN0b3JpZXMpCiAgICAgICAgIHJldHVybiBzZWxmLl9zaG91bGRfcnVuX2FzX3BpeGVs
X3Rlc3QodGVzdF9pbnB1dCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9kcml2ZXIucHkKaW5kZXggNzgxODIzYjhkNjcwYTZlYjhlNTJlMDc2OGJlNjY0
YjExZDYzMDMzYy4uMmViMWUxNGI1MmJjZDcyMzVmMzU1YzFhOTc0MDY4NmY5NWJjYzhkNiAxMDA2
NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXIu
cHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXIu
cHkKQEAgLTI5Myw4ICsyOTMsNiBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKIAogICAgICAgICBj
bWQuZXh0ZW5kKHNlbGYuX3BvcnQuZ2V0X29wdGlvbignYWRkaXRpb25hbF9kcnRfZmxhZycsIFtd
KSkKIAotICAgICAgICBpZiBwaXhlbF90ZXN0cyBhbmQgbm90IHNlbGYuX3BvcnQuc3VwcG9ydHNf
c3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Blcl90ZXN0KCk6Ci0gICAgICAgICAgICBjbWQuYXBwZW5k
KCctLXBpeGVsLXRlc3RzJykKICAgICAgICAgY21kLmV4dGVuZChwZXJfdGVzdF9hcmdzKQogCiAg
ICAgICAgIGNtZC5hcHBlbmQoJy0nKQpAQCAtMzM2LDEyICszMzQsOSBAQCBjbGFzcyBEcml2ZXIo
b2JqZWN0KToKICAgICAgICAgYXNzZXJ0IG5vdCBkcml2ZXJfaW5wdXQuaW1hZ2VfaGFzaCBvciBk
cml2ZXJfaW5wdXQuc2hvdWxkX3J1bl9waXhlbF90ZXN0CiAKICAgICAgICAgaWYgZHJpdmVyX2lu
cHV0LnNob3VsZF9ydW5fcGl4ZWxfdGVzdDoKLSAgICAgICAgICAgIGlmIHNlbGYuX3BvcnQuc3Vw
cG9ydHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Blcl90ZXN0KCk6Ci0gICAgICAgICAgICAgICAg
IyBXZSBkaWQgbm90IHN0YXJ0IHRoZSBkcml2ZXIgd2l0aCAtLXBpeGVsLXRlc3RzLCBpbnN0ZWFk
IHdlIHNwZWNpZnkgaXQgcGVyIHRlc3QuCi0gICAgICAgICAgICAgICAgIyAiJyIgaXMgdGhlIHNl
cGFyYXRvciBvZiBjb21tYW5kIGZpZWxkcy4KLSAgICAgICAgICAgICAgICBjb21tYW5kICs9ICIn
IiArICctLXBpeGVsLXRlc3QnCisgICAgICAgICAgICBjb21tYW5kICs9ICI6LS1waXhlbC10ZXN0
IgogICAgICAgICBpZiBkcml2ZXJfaW5wdXQuaW1hZ2VfaGFzaDoKLSAgICAgICAgICAgIGNvbW1h
bmQgKz0gIiciICsgZHJpdmVyX2lucHV0LmltYWdlX2hhc2gKKyAgICAgICAgICAgIGNvbW1hbmQg
Kz0gIjoiICsgZHJpdmVyX2lucHV0LmltYWdlX2hhc2gKICAgICAgICAgcmV0dXJuIGNvbW1hbmQg
KyAiXG4iCiAKICAgICBkZWYgX3JlYWRfZmlyc3RfYmxvY2soc2VsZiwgZGVhZGxpbmUpOgpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9xdC5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcXQucHkKaW5kZXggZTIz
OWM3ZTNhYWY2ZjYwMmIwYzM1MWVjMjJkY2ZhNjgwNjRlYTI2OS4uNmU3YjA5ODhkNWE3N2VmYzVm
YzM3MmZhNzUxNjc4MzQwMGE2OWYwOCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9xdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L3F0LnB5CkBAIC0xODQsNiArMTg0LDMgQEAgY2xhc3MgUXRQb3J0KFBv
cnQpOgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIHJldHVybiByZXN1bHQKIAot
ICAgIGRlZiBfc3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Blcl90ZXN0KHNlbGYpOgot
ICAgICAgICByZXR1cm4gVHJ1ZQotCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L3Rlc3QucHkKaW5kZXggNTcxNDY2MWZkMjAzNjc2ODM5ZDZjNzZmNDczNWJl
YzgxMzJiODliOC4uMGNkMTcxZjNiY2E2YWJlYmRiMjFiOThlMmE0NWMyMWExNGE5MDExMiAxMDA2
NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQpA
QCAtNTEzLDEwICs1MTMsNiBAQCBjbGFzcyBUZXN0UG9ydChQb3J0KToKICAgICAgICAgICAgIFZp
cnR1YWxUZXN0U3VpdGUoJ3ZpcnR1YWwvc2tpcHBlZCcsICdmYWlsdXJlcy9leHBlY3RlZCcsIFsn
LS12aXJ0dWFsLWFyZzInXSksCiAgICAgICAgIF0KIAotICAgIGRlZiBzdXBwb3J0c19zd2l0Y2hp
bmdfcGl4ZWxfdGVzdHNfcGVyX3Rlc3Qoc2VsZik6Ci0gICAgICAgICMgTGV0IGl0IHRydWUgc28g
d2UgY2FuIHRlc3QgdGhlIC0tcGl4ZWwtdGVzdC1kaXJlY3Rvcnkgb3B0aW9uLgotICAgICAgICBy
ZXR1cm4gVHJ1ZQotCiAKIGNsYXNzIFRlc3REcml2ZXIoRHJpdmVyKToKICAgICAiIiJUZXN0L0R1
bW15IGltcGxlbWVudGF0aW9uIG9mIHRoZSBEdW1wUmVuZGVyVHJlZSBpbnRlcmZhY2UuIiIiCmRp
ZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcCBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IGQwMjMyOTkyNzMx
ZDFiYzk3MTI2OGZjMzkzMWY0YjcwYWIzNjdhYzcuLjFkZTNjOWU2YTZhYzhmMzAyOWFhYTAzMTZj
NDgxZjA0ZWFlMmY4OGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIu
Y3BwCkBAIC0zNSw3ICszNSwxMSBAQAogI2luY2x1ZGUgPFdlYktpdDIvV0tQYWdlUHJpdmF0ZS5o
PgogI2luY2x1ZGUgPFdlYktpdDIvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaD4KICNpbmNsdWRlIDxX
ZWJLaXQyL1dLUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGNz
dGRpbz4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUg
PHN0cmluZz4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiAjaWYgUExBVEZPUk0oTUFD
KQpAQCAtNjcsOCArNzEsNyBAQCBUZXN0Q29udHJvbGxlciYgVGVzdENvbnRyb2xsZXI6OnNoYXJl
ZCgpCiB9CiAKIFRlc3RDb250cm9sbGVyOjpUZXN0Q29udHJvbGxlcihpbnQgYXJnYywgY29uc3Qg
Y2hhciogYXJndltdKQotICAgIDogbV9kdW1wUGl4ZWxzRm9yQWxsVGVzdHMoZmFsc2UpCi0gICAg
LCBtX3ZlcmJvc2UoZmFsc2UpCisgICAgOiBtX3ZlcmJvc2UoZmFsc2UpCiAgICAgLCBtX3ByaW50
U2VwYXJhdG9ycyhmYWxzZSkKICAgICAsIG1fdXNpbmdTZXJ2ZXJNb2RlKGZhbHNlKQogICAgICwg
bV9nY0JldHdlZW5UZXN0cyhmYWxzZSkKQEAgLTI2NywxMCArMjcwLDYgQEAgdm9pZCBUZXN0Q29u
dHJvbGxlcjo6aW5pdGlhbGl6ZShpbnQgYXJnYywgY29uc3QgY2hhciogYXJndltdKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoYXJndW1lbnQgPT0gIi0t
cGl4ZWwtdGVzdHMiKSB7Ci0gICAgICAgICAgICBtX2R1bXBQaXhlbHNGb3JBbGxUZXN0cyA9IHRy
dWU7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQogICAgICAgICBpZiAoYXJndW1l
bnQgPT0gIi0tdmVyYm9zZSIpIHsKICAgICAgICAgICAgIG1fdmVyYm9zZSA9IHRydWU7CiAgICAg
ICAgICAgICBjb250aW51ZTsKQEAgLTUwNCw3ICs1MDMsODkgQEAgYm9vbCBUZXN0Q29udHJvbGxl
cjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcygpCiAgICAgcmV0dXJuIG1fZG9uZVJlc2V0
dGluZzsKIH0KIAotYm9vbCBUZXN0Q29udHJvbGxlcjo6cnVuVGVzdChjb25zdCBjaGFyKiB0ZXN0
KQorc3RydWN0IFRlc3RDb21tYW5kIHsKKyAgICBUZXN0Q29tbWFuZCgpIDogc2hvdWxkRHVtcFBp
eGVscyhmYWxzZSkgeyB9CisKKyAgICBzdGQ6OnN0cmluZyBwYXRoT3JVUkw7CisgICAgYm9vbCBz
aG91bGREdW1wUGl4ZWxzOworICAgIHN0ZDo6c3RyaW5nIGV4cGVjdGVkUGl4ZWxIYXNoOworfTsK
KworY2xhc3MgQ29tbWFuZFRva2VuaXplciB7CitwdWJsaWM6CisgICAgQ29tbWFuZFRva2VuaXpl
cihjb25zdCBzdGQ6OnN0cmluZyYgaW5wdXQpCisgICAgICAgIDogbV9pbnB1dChpbnB1dCkKKyAg
ICAgICAgLCBtX3Bvc05leHRTZXBhcmF0b3IoMCkKKyAgICB7CisgICAgICAgIHB1bXAoKTsKKyAg
ICB9CisKKyAgICBib29sIGhhc05leHQoKSBjb25zdDsKKyAgICBzdGQ6OnN0cmluZyBuZXh0KCk7
CisKK3ByaXZhdGU6CisgICAgdm9pZCBwdW1wKCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIga1Nl
cGFyYXRvciA9ICc6JzsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgbV9pbnB1dDsKKyAgICBzdGQ6
OnN0cmluZyBtX25leHQ7CisgICAgc2l6ZV90IG1fcG9zTmV4dFNlcGFyYXRvcjsKK307CisKK3Zv
aWQgQ29tbWFuZFRva2VuaXplcjo6cHVtcCgpCit7CisgICAgaWYgKG1fcG9zTmV4dFNlcGFyYXRv
ciA9PSBzdGQ6OnN0cmluZzo6bnBvcyB8fCBtX3Bvc05leHRTZXBhcmF0b3IgPT0gbV9pbnB1dC5z
aXplKCkpIHsKKyAgICAgICAgbV9uZXh0ID0gc3RkOjpzdHJpbmcoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBzaXplX3Qgc3RhcnQgPSBtX3Bvc05leHRTZXBhcmF0b3IgPyBtX3Bvc05l
eHRTZXBhcmF0b3IgKyAxIDogMDsKKyAgICBtX3Bvc05leHRTZXBhcmF0b3IgPSBtX2lucHV0LmZp
bmQoa1NlcGFyYXRvciwgc3RhcnQpOworICAgIHNpemVfdCBzaXplID0gbV9wb3NOZXh0U2VwYXJh
dG9yID09IHN0ZDo6c3RyaW5nOjpucG9zID8gc3RkOjpzdHJpbmc6Om5wb3MgOiBtX3Bvc05leHRT
ZXBhcmF0b3IgLSBzdGFydDsKKyAgICBtX25leHQgPSBzdGQ6OnN0cmluZyhtX2lucHV0LCBzdGFy
dCwgc2l6ZSk7Cit9CisKK3N0ZDo6c3RyaW5nIENvbW1hbmRUb2tlbml6ZXI6Om5leHQoKQorewor
ICAgIEFTU0VSVChoYXNOZXh0KCkpOworCisgICAgc3RkOjpzdHJpbmcgb2xkTmV4dCA9IG1fbmV4
dDsKKyAgICBwdW1wKCk7CisgICAgcmV0dXJuIG9sZE5leHQ7Cit9CisKK2Jvb2wgQ29tbWFuZFRv
a2VuaXplcjo6aGFzTmV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmV4dCAhPSBzdGQ6OnN0
cmluZygpOworfQorCitOT19SRVRVUk4gc3RhdGljIHZvaWQgZGllKGNvbnN0IHN0ZDo6c3RyaW5n
JiBpbnB1dExpbmUpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJVbmV4cGVjdGVkIGlucHV0IGxp
bmU6ICVzXG4iLCBpbnB1dExpbmUuY19zdHIoKSk7CisgICAgZXhpdCgxKTsKK30KKworVGVzdENv
bW1hbmQgcGFyc2VJbnB1dExpbmUoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0TGluZSkKK3sKKyAg
ICBUZXN0Q29tbWFuZCByZXN1bHQ7CisgICAgQ29tbWFuZFRva2VuaXplciB0b2tlbml6ZXIoaW5w
dXRMaW5lKTsKKyAgICBpZiAoIXRva2VuaXplci5oYXNOZXh0KCkpCisgICAgICAgIGRpZShpbnB1
dExpbmUpOworCisgICAgcmVzdWx0LnBhdGhPclVSTCA9IHRva2VuaXplci5uZXh0KCk7CisgICAg
aWYgKCF0b2tlbml6ZXIuaGFzTmV4dCgpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAg
c3RkOjpzdHJpbmcgYXJnID0gdG9rZW5pemVyLm5leHQoKTsKKyAgICBpZiAoYXJnICE9IHN0ZDo6
c3RyaW5nKCItcCIpICYmIGFyZyAhPSBzdGQ6OnN0cmluZygiLS1waXhlbC10ZXN0IikpCisgICAg
ICAgIGRpZShpbnB1dExpbmUpOworICAgIHJlc3VsdC5zaG91bGREdW1wUGl4ZWxzID0gdHJ1ZTsK
KworICAgIGlmICh0b2tlbml6ZXIuaGFzTmV4dCgpKQorICAgICAgICByZXN1bHQuZXhwZWN0ZWRQ
aXhlbEhhc2ggPSB0b2tlbml6ZXIubmV4dCgpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
Ym9vbCBUZXN0Q29udHJvbGxlcjo6cnVuVGVzdChjb25zdCBjaGFyKiBpbnB1dExpbmUpCiB7CiAg
ICAgaWYgKCFyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKCkpIHsKICNpZiBQTEFURk9STShN
QUMpCkBAIC01MTcsMzIgKzU5OCwxMyBAQCBib29sIFRlc3RDb250cm9sbGVyOjpydW5UZXN0KGNv
bnN0IGNoYXIqIHRlc3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBib29s
IGR1bXBQaXhlbHNUZXN0ID0gbV9kdW1wUGl4ZWxzRm9yQWxsVGVzdHM7Ci0gICAgc3RkOjpzdHJp
bmcgY29tbWFuZCh0ZXN0KTsKLSAgICBzdGQ6OnN0cmluZyBwYXRoT3JVUkwgPSBjb21tYW5kOwot
ICAgIHN0ZDo6c3RyaW5nIGV4cGVjdGVkUGl4ZWxIYXNoOwotICAgIHNpemVfdCBmaXJzdFNlcGFy
YXRvclBvcyA9IGNvbW1hbmQuZmluZF9maXJzdF9vZignXCcnKTsKLSAgICBzaXplX3Qgc2Vjb25k
U2VwYXJhdG9yUG9zID0gY29tbWFuZC5maW5kX2ZpcnN0X29mKCdcJycsIGZpcnN0U2VwYXJhdG9y
UG9zICsgMSk7Ci0gICAgaWYgKGZpcnN0U2VwYXJhdG9yUG9zICE9IHN0ZDo6c3RyaW5nOjpucG9z
KSB7Ci0gICAgICAgIHBhdGhPclVSTCA9IHN0ZDo6c3RyaW5nKGNvbW1hbmQsIDAsIGZpcnN0U2Vw
YXJhdG9yUG9zKTsKLSAgICAgICAgc2l6ZV90IHBpeGVsSGFzaFBvcyA9IGZpcnN0U2VwYXJhdG9y
UG9zICsgMTsKLQotICAgICAgICAvLyBOUldUIHBhc3NlcyAtLXBpeGVsLXRlc3QgaWYgd2Ugc2hv
dWxkIGR1bXAgcGl4ZWxzIGZvciB0aGUgdGVzdC4KLSAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcg
ZXhwZWN0ZWRQaXhlbFRlc3RBcmcoIi0tcGl4ZWwtdGVzdCIpOwotICAgICAgICBzdGQ6OnN0cmlu
ZyBhcmdUZXN0ID0gc3RkOjpzdHJpbmcoY29tbWFuZCwgZmlyc3RTZXBhcmF0b3JQb3MgKyAxLCBl
eHBlY3RlZFBpeGVsVGVzdEFyZy5zaXplKCkpOwotICAgICAgICBpZiAoYXJnVGVzdCA9PSBleHBl
Y3RlZFBpeGVsVGVzdEFyZykgewotICAgICAgICAgICAgZHVtcFBpeGVsc1Rlc3QgPSB0cnVlOwot
ICAgICAgICAgICAgcGl4ZWxIYXNoUG9zID0gc2Vjb25kU2VwYXJhdG9yUG9zID09IHN0ZDo6c3Ry
aW5nOjpucG9zID8gc3RkOjpzdHJpbmc6Om5wb3MgOiBzZWNvbmRTZXBhcmF0b3JQb3MgKyAxOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChwaXhlbEhhc2hQb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3Mg
JiYgcGl4ZWxIYXNoUG9zIDwgY29tbWFuZC5zaXplKCkpCi0gICAgICAgICAgICBleHBlY3RlZFBp
eGVsSGFzaCA9IHN0ZDo6c3RyaW5nKGNvbW1hbmQsIHBpeGVsSGFzaFBvcyk7Ci0gICAgfQorICAg
IFRlc3RDb21tYW5kIGNvbW1hbmQgPSBwYXJzZUlucHV0TGluZShzdGQ6OnN0cmluZyhpbnB1dExp
bmUpKTsKIAogICAgIG1fc3RhdGUgPSBSdW5uaW5nVGVzdDsKIAotICAgIG1fY3VycmVudEludm9j
YXRpb24gPSBhZG9wdFB0cihuZXcgVGVzdEludm9jYXRpb24ocGF0aE9yVVJMKSk7Ci0gICAgaWYg
KGR1bXBQaXhlbHNUZXN0KQotICAgICAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5zZXRJc1BpeGVs
VGVzdChleHBlY3RlZFBpeGVsSGFzaCk7CisgICAgbV9jdXJyZW50SW52b2NhdGlvbiA9IGFkb3B0
UHRyKG5ldyBUZXN0SW52b2NhdGlvbihjb21tYW5kLnBhdGhPclVSTCkpOworICAgIGlmIChjb21t
YW5kLnNob3VsZER1bXBQaXhlbHMpCisgICAgICAgIG1fY3VycmVudEludm9jYXRpb24tPnNldElz
UGl4ZWxUZXN0KGNvbW1hbmQuZXhwZWN0ZWRQaXhlbEhhc2gpOwogCiAgICAgbV9jdXJyZW50SW52
b2NhdGlvbi0+aW52b2tlKCk7CiAgICAgbV9jdXJyZW50SW52b2NhdGlvbi5jbGVhcigpOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCmluZGV4IGE5OWUxNmVhODcwMjdjMzRm
MDdiODk2MmIwOThjMjMzNGQ5NDIxYmQuLjVlMjBkNjExYjQ2OWRmMTg3YzM3OGVlNjJlZDBjYWMz
MThkYWVkMjEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xs
ZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKQEAgLTEw
NCw3ICsxMDQsNiBAQCBwcml2YXRlOgogCiAgICAgT3duUHRyPFRlc3RJbnZvY2F0aW9uPiBtX2N1
cnJlbnRJbnZvY2F0aW9uOwogCi0gICAgYm9vbCBtX2R1bXBQaXhlbHNGb3JBbGxUZXN0czsKICAg
ICBib29sIG1fdmVyYm9zZTsKICAgICBib29sIG1fcHJpbnRTZXBhcmF0b3JzOwogICAgIGJvb2wg
bV91c2luZ1NlcnZlck1vZGU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156011</attachid>
            <date>2012-08-02 02:06:03 -0700</date>
            <delta_ts>2012-08-03 04:37:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92398-20120802110541.patch</filename>
            <type>text/plain</type>
            <size>158580</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MzI5CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMWRlZjc4YTM1NjJjYjkxOTU5MWMzNzdjMWNhYzUzNTdj
YmQ5YzI0My4uNzRkNmM4MTUzNzEyMDIwNzdhM2ZhMGQyNzg4YzIyZmY1MzlhYzQ4YyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEy
OCBAQAorMjAxMi0wOC0wMiAgQmFsYXpzIEtlbGVtZW4gIDxrYmFsYXpzQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgQWxsIHBvcnRzIHNob3VsZCBzdXBwb3J0IHBlciB0ZXN0IHN3aXRjaGluZyBvZiBw
aXhlbCB0ZXN0aW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05MjM5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRlYWNoIGFsbCB0ZXN0IGRyaXZlcnMgdG8gYWNjZXB0IGEgcGVyIHRlc3QgY29udHJvbCBv
ZiB3aGV0aGVyCisgICAgICAgIHRvIGR1bXAgcGl4ZWxzLiBEcml2ZXJzIG5vdyBhY2NlcHQgYSAt
cC8tLXBpeGVsLXRlc3QgYXJndW1lbnQKKyAgICAgICAgb24gdGhlIHN0YW5kYXJ0IGlucHV0IHRo
YXQgbWVhbnMgdGhhdCBydW5uaW5nIHRoZSBjdXJyZW50CisgICAgICAgIHRlc3QgYXMgcGl4ZWwg
dGVzdCBpcyBhbGxvd2VkIChldmVuIGlmIHRoZSBleHBlY3RlZCBoYXNoIGlzCisgICAgICAgIG1p
c3NpbmcpLiBSZW1vdmVkIHRoZSAtLXBpeGVsLXRlc3RzIGNvbW1hbmQgbGluZSBvcHRpb24gc2lu
Y2UKKyAgICAgICAgdGhlcmUgaXMgbm8gbmVlZCBmb3IgaXQgYW55bW9yZS4KKworICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cC9EdW1wUmVuZGVyVHJlZS5neXA6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaToKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5oOgorICAgICAgICAoVGVzdENvbW1hbmQ6OlRl
c3RDb21tYW5kKToKKyAgICAgICAgKFRlc3RDb21tYW5kKToKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcDogQWRkZWQuCisgICAgICAg
IChDb21tYW5kVG9rZW5pemVyKToKKyAgICAgICAgKENvbW1hbmRUb2tlbml6ZXI6OkNvbW1hbmRU
b2tlbml6ZXIpOgorICAgICAgICAoQ29tbWFuZFRva2VuaXplcjo6cHVtcCk6CisgICAgICAgIChD
b21tYW5kVG9rZW5pemVyOjpuZXh0KToKKyAgICAgICAgKENvbW1hbmRUb2tlbml6ZXI6Omhhc05l
eHQpOgorICAgICAgICAoZGllKToKKyAgICAgICAgKHBhcnNlSW5wdXRMaW5lKToKKyAgICAgICAg
Q29tbW9uIGxvZ2ljIHRvIHBhcnNlIHRoZSBpbnB1dCBsaW5lIGZyb20gdGhlIHN0YW5kYXJkIGlu
cHV0IChvciBmcm9tIHRoZSBjb21tYW5kIGxpbmUKKyAgICAgICAgaW4gc3RhbmRhbG9uZSBtb2Rl
KS4gTWFkZSBpdCBzb21ld2hhdCBnZW5lcmFsIHNvIHdlIGNhbiBlYXNpbHkgYWRkIG1vcmUgYXJn
dW1lbnRzIGlmCisgICAgICAgIHRoZXJlIGlzIGEgbmVlZC4KKworICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcDoKKyAgICAgICAgKHJ1blRlc3QpOgor
ICAgICAgICAobWFpbik6CisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
UnVubmVyL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0uY3BwOiBSZW5hbWVkIGZyb20g
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlci5jcHAuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5l
ci9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmg6IFJlbmFtZWQgZnJvbSBUb29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
LmguCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Q2hyb21pdW0uY3BwOiBSZW5hbWVkIGZyb20gVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcC4KKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnRDaHJvbWl1bS5oOiBSZW5hbWVkIGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmguCisgICAgICAgIFJlbmFt
ZWQgdGhlc2UgZmlsZXMgd2l0aCBhIENocm9taXVtIHN1ZmZpeCBiZWNhdXNlIHRoZXkgd2VyZSBj
bGFzaGluZyB3aXRoIHRoZSBjb21tb24gb25lcyB1c2VkIGJ5IG90aGVyIHBvcnRzIGFmdGVyIGFk
ZGluZyB0aGUgcm9vdAorICAgICAgICBEdW1wUmVuZGVyVHJlZSBkaXJlY3RvcnkgdG8gdGhlIGlu
Y2x1ZGUgcGF0aC4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5u
ZXIvVGVzdEludGVyZmFjZXMuY3BwOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RTaGVsbC5jcHA6CisgICAgICAgIChUZXN0U2hlbGw6OlRlc3RTaGVsbCk6CisgICAgICAg
IChUZXN0U2hlbGw6OnJ1bkZpbGVUZXN0KToKKyAgICAgICAgKFRlc3RTaGVsbDo6ZHVtcCk6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmg6CisgICAgICAgIChU
ZXN0UGFyYW1zOjpUZXN0UGFyYW1zKToKKyAgICAgICAgKFRlc3RTaGVsbCk6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvZWZsL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL2VmbC9EdW1wUmVuZGVyVHJlZS5jcHA6CisgICAgICAgIChwYXJzZUNvbW1hbmRMaW5lT3B0
aW9ucyk6CisgICAgICAgIChydW5UZXN0KToKKyAgICAgICAgKHNob3VsZER1bXBQaXhlbHNBbmRD
b21wYXJlV2l0aEV4cGVjdGVkKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHA6CisgICAgICAgIChpbml0aWFsaXplR2xvYmFs
c0Zyb21Db21tYW5kTGluZU9wdGlvbnMpOgorICAgICAgICAoZHVtcCk6CisgICAgICAgIChydW5U
ZXN0KToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9EdW1w
UmVuZGVyVHJlZS5tbToKKyAgICAgICAgKGluaXRpYWxpemVHbG9iYWxzRnJvbUNvbW1hbmRMaW5l
T3B0aW9ucyk6CisgICAgICAgIChkdW1wUmVuZGVyVHJlZSk6CisgICAgICAgIChkdW1wKToKKyAg
ICAgICAgKHJ1blRlc3QpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJU
cmVlLnBybzoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkR1bXBSZW5kZXJUcmVlOjpEdW1wUmVuZGVyVHJlZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEdW1wUmVuZGVyVHJlZTo6b3Blbik6CisgICAgICAgIChXZWJDb3Jl
OjpEdW1wUmVuZGVyVHJlZTo6cHJvY2Vzc0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6RHVtcFJl
bmRlclRyZWU6OmR1bXApOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJU
cmVlUXQuaDoKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlKToKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9xdC9tYWluLmNwcDoKKyAgICAgICAgKGlzT3B0aW9uKToKKyAgICAgICAgKHByaW50VXNh
Z2UpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0R1bXBS
ZW5kZXJUcmVlLmNwcDoKKyAgICAgICAgKGR1bXApOgorICAgICAgICAocnVuVGVzdCk6CisgICAg
ICAgIChkbGxMYXVuY2hlckVudHJ5UG9pbnQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dp
bi9EdW1wUmVuZGVyVHJlZS52Y3Byb2o6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd3Njcmlw
dDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93eC9EdW1wUmVuZGVyVHJlZVd4LmNwcDoKKyAg
ICAgICAgKGR1bXApOgorICAgICAgICAocnVuVGVzdCk6CisgICAgICAgIChNeUFwcDo6T25Jbml0
KToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKworICAgICAgICAqIFNjcmlwdHMvb2xkLXJ1
bi13ZWJraXQtdGVzdHM6CisgICAgICAgICogU2NyaXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0czoK
KyAgICAgICAgUGFzcyAtLXBpeGVsLXRlc3QgYmVmb3JlIHRoZSBoYXNoLgorCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5OgorICAgICAgICAoUG9y
dC5zaG91bGRfcnVuX2FzX3BpeGVsX3Rlc3QpOiBSZW1vdmVkIG5vdyB0aGF0IGFsbCBwb3J0cyBz
dXBwb3J0cyBpdC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2RyaXZlci5weToKKyAgICAgICAgKERyaXZlci5jbWRfbGluZSk6IERvbid0IHBhc3MgLS1waXhl
bC10ZXN0cyBhbnltb3JlLgorICAgICAgICAoRHJpdmVyLl9jb21tYW5kX2Zyb21fZHJpdmVyX2lu
cHV0KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3F0LnB5
OgorICAgICAgICAoUXRQb3J0LnNob3VsZF9ydW5fYXNfcGl4ZWxfdGVzdCk6CisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5OgorICAgICAgICAoVGVz
dFBvcnQuc2hvdWxkX3J1bl9hc19waXhlbF90ZXN0KToKKworICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6
VGVzdENvbnRyb2xsZXIpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6
ZSk6CisgICAgICAgIChXVFI6OlRlc3RDb21tYW5kOjpUZXN0Q29tbWFuZCk6CisgICAgICAgIChU
ZXN0Q29tbWFuZCk6CisgICAgICAgIChXVFIpOgorICAgICAgICAoQ29tbWFuZFRva2VuaXplcik6
CisgICAgICAgIChXVFI6OkNvbW1hbmRUb2tlbml6ZXI6OkNvbW1hbmRUb2tlbml6ZXIpOgorICAg
ICAgICAoV1RSOjpDb21tYW5kVG9rZW5pemVyOjpwdW1wKToKKyAgICAgICAgKFdUUjo6Q29tbWFu
ZFRva2VuaXplcjo6bmV4dCk6CisgICAgICAgIChXVFI6OkNvbW1hbmRUb2tlbml6ZXI6Omhhc05l
eHQpOgorICAgICAgICAoV1RSOjpkaWUpOgorICAgICAgICAoV1RSOjpwYXJzZUlucHV0TGluZSk6
CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpydW5UZXN0KToKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmg6CisgICAgICAgIChUZXN0Q29udHJvbGxlcik6
CisgICAgICAgIER1cGxpY2F0ZSB0aGUgbG9naWMgZm9yIHBhcnNpbmcgdGhlIGNvbW1hbmQgbGlu
ZSBiZWNhdXNlCisgICAgICAgIHVuZm9ydHVuYXRlbHkgdGhlcmUgaXMgbm8gd2F5IHRvIHNoYXJl
IGNvZGUgYmV0d2VlbgorICAgICAgICBXZWJLaXRUZXN0UnVubmVyIGFuZCBEdW1wUmVuZGVyVHJl
ZS4KKwogMjAxMi0wOC0wMSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5j
b20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEyNDMyNS4KZGlmZiAtLWdp
dCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cC9EdW1wUmVuZGVyVHJl
ZS5neXAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXAvRHVtcFJlbmRl
clRyZWUuZ3lwCmluZGV4IGUzOGM4ZDhkNDljYzMxYmE0ZDE0ODAwNjYyYzk1Mjg0NTNkNDFiMmMu
LmQ1NTBhNDdhODY0NTY0MDQ2MzA3MmM3NzZhZjA5Njk5OWNiYzM3OTQgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cC9EdW1wUmVuZGVyVHJlZS5neXAK
KysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwL0R1bXBSZW5kZXJU
cmVlLmd5cApAQCAtMTMzLDYgKzEzMyw3IEBACiAgICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzog
WwogICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpJywKICAgICAgICAgICAgICAg
ICAnPChzb3VyY2VfZGlyKS9XZWJLaXQvY2hyb21pdW0vcHVibGljJywKKyAgICAgICAgICAgICAg
ICAnPCh0b29sc19kaXIpL0R1bXBSZW5kZXJUcmVlJywKICAgICAgICAgICAgICAgICAnPChERVBU
SCknLAogICAgICAgICAgICAgXSwKICAgICAgICAgICAgICdkZWZpbmVzJzogWwpkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaSBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkKaW5kZXggZjJiYzczZDdiZGY2Zjc0ZDE0NTY3
N2Q3ZGZjNDNhZTM1ZGQyYzZhNC4uOTk2YzgzZDg3YjQ0YmYwNTdhZjQ4NThlNTBjMWVhOTdlMDU4
YzJhZSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lw
aQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpCkBAIC01NCwx
MCArNTQsMTIgQEAKICAgICAgICAgICAgICdjaHJvbWl1bS9XZWJWaWV3SG9zdC5oJywKICAgICAg
ICAgXSwKICAgICAgICAgJ3Rlc3RfcnVubmVyX2ZpbGVzJzogWwotICAgICAgICAgICAgJ2Nocm9t
aXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwJywKLSAgICAgICAgICAg
ICdjaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgnLAotICAgICAg
ICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAnLAot
ICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5o
JywKKyAgICAgICAgICAgICdEdW1wUmVuZGVyVHJlZS5oJywKKyAgICAgICAgICAgICdEdW1wUmVu
ZGVyVHJlZUNvbW1vbi5jcHAnLAorICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5jcHAnLAorICAgICAgICAgICAgJ2Nocm9taXVt
L1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5oJywKKyAgICAgICAg
ICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRDaHJvbWl1bS5j
cHAnLAorICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eVVJRWxl
bWVudENocm9taXVtLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvQ3BwQm91
bmRDbGFzcy5jcHAnLAogICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvQ3BwQm91bmRD
bGFzcy5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL0NwcFZhcmlhbnQuY3Bw
JywKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmggYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5oCmluZGV4IDBlNTk4YmU0YWUzZGQ2
MjVmMGI0NWVmZTZiMjhmYTM1ZjY3ZjUyZjIuLjE4ZDhjZGEwZWIxN2ZhODNiZWUyMDg5YjZkNDg1
YTY0OWRiYjg2NzAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJU
cmVlLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuaApAQCAtNjUs
NCArNjUsMTQgQEAgZXh0ZXJuIFJlZlB0cjxMYXlvdXRUZXN0Q29udHJvbGxlcj4gZ0xheW91dFRl
c3RDb250cm9sbGVyOwogdm9pZCBkdW1wKCk7CiB2b2lkIGRpc3BsYXlXZWJWaWV3KCk7CiAKK3N0
cnVjdCBUZXN0Q29tbWFuZCB7CisgICAgVGVzdENvbW1hbmQoKSA6IHNob3VsZER1bXBQaXhlbHMo
ZmFsc2UpIHsgfQorCisgICAgc3RkOjpzdHJpbmcgcGF0aE9yVVJMOworICAgIGJvb2wgc2hvdWxk
RHVtcFBpeGVsczsKKyAgICBzdGQ6OnN0cmluZyBleHBlY3RlZFBpeGVsSGFzaDsKK307CisKK1Rl
c3RDb21tYW5kIHBhcnNlSW5wdXRMaW5lKGNvbnN0IHN0ZDo6c3RyaW5nJik7CisKICNlbmRpZiAv
LyBEdW1wUmVuZGVyVHJlZV9oCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1w
UmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4M2JmZmQ0
NDg0MWFhMTIyZWVkZWQ0NzI1MTM0YzY5MTUyMDBkZDVlLi40ODEwNjRlYjA1YjMzNWEzY2Y1NjBk
MDBkY2E2MjZjOTNmMjhiOGU2IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1w
UmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTg5LDYg
Kzg5LDcgQEAKIAkJOENDREE4MkExNTFBNzJEMTAwMDNGOTM3IC8qIFNhbXBsZUZvbnQuc2ZvbnQg
aW4gQ29weSBGb250IEZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhD
Q0RBODFGMTUxQTU2NTUwMDAzRjkzNyAvKiBTYW1wbGVGb250LnNmb250ICovOyB9OwogCQk5MzQw
OTk0QzA4NTQwQ0FFMDA3RjNCQzggLyogRHVtcFJlbmRlclRyZWVQcmVmaXguaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMyQTcwQUFCMDM3MDVFMUYwMEM5
MTc4MyAvKiBEdW1wUmVuZGVyVHJlZVByZWZpeC5oICovOyB9OwogCQk5MzQwOTk1MTA4NTQwQ0FF
MDA3RjNCQzggLyogV2ViS2l0LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMzU0MzVGMDNENzU1MDIwMDg2MzVDRSAvKiBXZWJLaXQu
ZnJhbWV3b3JrICovOyB9OworCQk5ODMwRjMxRjE1QzgxMTgxMDA1QUIyMDYgLyogRHVtcFJlbmRl
clRyZWVDb21tb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTgzMEYzMUUxNUM4MTE4MTAwNUFCMjA2IC8qIER1bXBSZW5kZXJUcmVlQ29tbW9uLmNw
cCAqLzsgfTsKIAkJQTgxNzA5MDAwOEIxNjNFRjAwQ0NCOUZCIC8qIENvY29hLmZyYW1ld29yayBp
biBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NEY2MDg5
MDhCMTM2REEwMEU5NzQ1RiAvKiBDb2NvYS5mcmFtZXdvcmsgKi87IH07CiAJCUE4MTcwOTA0MDhC
MTY0RDMwMENDQjlGQiAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODE3MDkwMzA4QjE2NEQzMDBDQ0I5
RkIgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovOyB9OwogCQlBODRGNjA4QTA4QjEzNkRB
MDBFOTc0NUYgLyogQ29jb2EuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTg0RjYwODkwOEIxMzZEQTAwRTk3NDVGIC8qIENvY29hLmZy
YW1ld29yayAqLzsgfTsKQEAgLTI4OSw2ICsyOTAsNyBAQAogCQk4Q0NEQTgxRjE1MUE1NjU1MDAw
M0Y5MzcgLyogU2FtcGxlRm9udC5zZm9udCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueG1sOyBuYW1lID0gU2Ft
cGxlRm9udC5zZm9udDsgcGF0aCA9IGZvbnRzL1NhbXBsZUZvbnQuc2ZvbnQ7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTkzMzU0MzVGMDNENzU1MDIwMDg2MzVDRSAvKiBXZWJLaXQuZnJh
bWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
d3JhcHBlci5mcmFtZXdvcms7IHBhdGggPSBXZWJLaXQuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0g
QlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk5MzQwOTk1NDA4NTQwQ0FGMDA3RjNCQzggLyogRHVt
cFJlbmRlclRyZWUgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0
aCA9IER1bXBSZW5kZXJUcmVlOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9Owor
CQk5ODMwRjMxRTE1QzgxMTgxMDA1QUIyMDYgLyogRHVtcFJlbmRlclRyZWVDb21tb24uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRHVtcFJlbmRlclRyZWVDb21tb24u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODAzRkY3NDA5Q0FBRDA4MDA5QjJB
MzcgLyogRHVtcFJlbmRlclRyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9
IER1bXBSZW5kZXJUcmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4MTcwOTAz
MDhCMTY0RDMwMENDQjlGQiAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsg
cGF0aCA9IEphdmFTY3JpcHRDb3JlLmZyYW1ld29yazsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RV
Q1RTX0RJUjsgfTsKIAkJQTg0RjYwODkwOEIxMzZEQTAwRTk3NDVGIC8qIENvY29hLmZyYW1ld29y
ayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBw
ZXIuZnJhbWV3b3JrOyBuYW1lID0gQ29jb2EuZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJy
YXJ5L0ZyYW1ld29ya3MvQ29jb2EuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4i
OyB9OwpAQCAtNDIxLDYgKzQyMyw3IEBACiAJCTA4RkI3Nzk0RkU4NDE1NURDMDJBQUMwNyAvKiBE
dW1wUmVuZGVyVHJlZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJOTgzMEYzMUUxNUM4MTE4MTAwNUFCMjA2IC8qIER1bXBSZW5kZXJUcmVlQ29tbW9uLmNw
cCAqLywKIAkJCQkzMkE3MEFBQjAzNzA1RTFGMDBDOTE3ODMgLyogRHVtcFJlbmRlclRyZWVQcmVm
aXguaCAqLywKIAkJCQkxNDIyQTI3NTBBRjZGNEJEMDBFMUE4ODMgLyogRGVsZWdhdGVzICovLAog
CQkJCTE0MjJBMjY5MEFGNkY0NTIwMEUxQTg4MyAvKiBDb250cm9sbGVycyAqLywKQEAgLTk1NSw2
ICs5NTgsNyBAQAogCQkJCTI5Q0ZCQTJFMTIyNzNBMTAwMEJDMzBDMCAvKiBBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTNBNTYyNkNCMTMxQ0EwMkEwMDJC
RTZEOSAvKiBTdG9yYWdlVHJhY2tlckRlbGVnYXRlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODAw
NDVBRUUxNDc3MThFNzAwODI5MEE4IC8qIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVy
Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJOTgzMEYzMUYxNUM4MTE4MTAwNUFCMjA2IC8qIER1bXBS
ZW5kZXJUcmVlQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWVDb21tb24uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvRHVtcFJlbmRlclRyZWVDb21tb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4ZDgzMjI1OGIzODIxYzQ3
MTUwZjA3YTgwMzQ4MzYzOTVkNDIwMWUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9EdW1wUmVuZGVyVHJlZUNvbW1vbi5jcHAKQEAgLTAsMCArMSw4MiBAQAorI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCisKKyNpbmNsdWRlIDxh
bGdvcml0aG0+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1
ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZz4KKworY2xhc3MgQ29tbWFuZFRva2VuaXpl
ciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ29tbWFuZFRva2VuaXplcihjb25zdCBzdGQ6OnN0
cmluZyYgaW5wdXQpCisgICAgICAgIDogbV9pbnB1dChpbnB1dCkKKyAgICAgICAgLCBtX3Bvc05l
eHRTZXBhcmF0b3IoMCkKKyAgICB7CisgICAgICAgIHB1bXAoKTsKKyAgICB9CisKKyAgICBib29s
IGhhc05leHQoKSBjb25zdDsKKyAgICBzdGQ6OnN0cmluZyBuZXh0KCk7CisKK3ByaXZhdGU6Cisg
ICAgdm9pZCBwdW1wKCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIga1NlcGFyYXRvciA9ICdcJyc7
CisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1faW5wdXQ7CisgICAgc3RkOjpzdHJpbmcgbV9uZXh0
OworICAgIHNpemVfdCBtX3Bvc05leHRTZXBhcmF0b3I7Cit9OworCit2b2lkIENvbW1hbmRUb2tl
bml6ZXI6OnB1bXAoKQoreworICAgIGlmIChtX3Bvc05leHRTZXBhcmF0b3IgPT0gc3RkOjpzdHJp
bmc6Om5wb3MgfHwgbV9wb3NOZXh0U2VwYXJhdG9yID09IG1faW5wdXQuc2l6ZSgpKSB7CisgICAg
ICAgIG1fbmV4dCA9IHN0ZDo6c3RyaW5nKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
c2l6ZV90IHN0YXJ0ID0gbV9wb3NOZXh0U2VwYXJhdG9yID8gbV9wb3NOZXh0U2VwYXJhdG9yICsg
MSA6IDA7CisgICAgbV9wb3NOZXh0U2VwYXJhdG9yID0gbV9pbnB1dC5maW5kKGtTZXBhcmF0b3Is
IHN0YXJ0KTsKKyAgICBzaXplX3Qgc2l6ZSA9IG1fcG9zTmV4dFNlcGFyYXRvciA9PSBzdGQ6OnN0
cmluZzo6bnBvcyA/IHN0ZDo6c3RyaW5nOjpucG9zIDogbV9wb3NOZXh0U2VwYXJhdG9yIC0gc3Rh
cnQ7CisgICAgbV9uZXh0ID0gc3RkOjpzdHJpbmcobV9pbnB1dCwgc3RhcnQsIHNpemUpOworfQor
CitzdGQ6OnN0cmluZyBDb21tYW5kVG9rZW5pemVyOjpuZXh0KCkKK3sKKyAgICBBU1NFUlQoaGFz
TmV4dCgpKTsKKworICAgIHN0ZDo6c3RyaW5nIG9sZE5leHQgPSBtX25leHQ7CisgICAgcHVtcCgp
OworICAgIHJldHVybiBvbGROZXh0OworfQorCitib29sIENvbW1hbmRUb2tlbml6ZXI6Omhhc05l
eHQoKSBjb25zdAoreworICAgIHJldHVybiAhbV9uZXh0LmVtcHR5KCk7Cit9CisKK05PX1JFVFVS
TiBzdGF0aWMgdm9pZCBkaWUoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0TGluZSkKK3sKKyAgICBm
cHJpbnRmKHN0ZGVyciwgIlVuZXhwZWN0ZWQgaW5wdXQgbGluZTogJXNcbiIsIGlucHV0TGluZS5j
X3N0cigpKTsKKyAgICBleGl0KDEpOworfQorCitUZXN0Q29tbWFuZCBwYXJzZUlucHV0TGluZShj
b25zdCBzdGQ6OnN0cmluZyYgaW5wdXRMaW5lKQoreworICAgIFRlc3RDb21tYW5kIHJlc3VsdDsK
KyAgICBDb21tYW5kVG9rZW5pemVyIHRva2VuaXplcihpbnB1dExpbmUpOworICAgIGlmICghdG9r
ZW5pemVyLmhhc05leHQoKSkKKyAgICAgICAgZGllKGlucHV0TGluZSk7CisKKyAgICByZXN1bHQu
cGF0aE9yVVJMID0gdG9rZW5pemVyLm5leHQoKTsKKyAgICBpZiAoIXRva2VuaXplci5oYXNOZXh0
KCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBzdGQ6OnN0cmluZyBhcmcgPSB0b2tl
bml6ZXIubmV4dCgpOworICAgIGlmIChhcmcgIT0gc3RkOjpzdHJpbmcoIi1wIikgJiYgYXJnICE9
IHN0ZDo6c3RyaW5nKCItLXBpeGVsLXRlc3QiKSkKKyAgICAgICAgZGllKGlucHV0TGluZSk7Cisg
ICAgcmVzdWx0LnNob3VsZER1bXBQaXhlbHMgPSB0cnVlOworCisgICAgaWYgKHRva2VuaXplci5o
YXNOZXh0KCkpCisgICAgICAgIHJlc3VsdC5leHBlY3RlZFBpeGVsSGFzaCA9IHRva2VuaXplci5u
ZXh0KCk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwCmluZGV4IDYxNTVmNDQxZjVkOGJiM2M0NGU1
MTc5MDgwZGNiMTc0NDVlODk4NzQuLmI1NTk0ODQzNmMyOGI1NGYyY2Y3NjliZTllZTkyNTdkMzAx
OTIxMzQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0R1bXBSZW5k
ZXJUcmVlLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EdW1wUmVuZGVy
VHJlZS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKIAogI2luY2x1ZGUgIk1vY2tXZWJLaXRQbGF0Zm9y
bVN1cHBvcnQuaCIKICNpbmNsdWRlICJUZXN0U2hlbGwuaCIKQEAgLTQ0LDcgKzQ1LDYgQEAgdXNp
bmcgbmFtZXNwYWNlIHN0ZDsKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkNvbXBsZXhUZXh0W10g
PSAiLS1jb21wbGV4LXRleHQiOwogc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uRHVtcEFsbFBpeGVs
c1tdID0gIi0tZHVtcC1hbGwtcGl4ZWxzIjsKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbk5vdHJl
ZVtdID0gIi0tbm90cmVlIjsKLXN0YXRpYyBjb25zdCBjaGFyIG9wdGlvblBpeGVsVGVzdHNbXSA9
ICItLXBpeGVsLXRlc3RzIjsKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvblRocmVhZGVkW10gPSAi
LS10aHJlYWRlZCI7CiBzdGF0aWMgY29uc3QgY2hhciBvcHRpb25EZWJ1Z1JlbmRlclRyZWVbXSA9
ICItLWRlYnVnLXJlbmRlci10cmVlIjsKIHN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkRlYnVnTGF5
ZXJUcmVlW10gPSAiLS1kZWJ1Zy1sYXllci10cmVlIjsKQEAgLTg1LDE3ICs4NSwxMiBAQCBwcml2
YXRlOgogICAgIE93blB0cjxNb2NrV2ViS2l0UGxhdGZvcm1TdXBwb3J0PiBtX21vY2tQbGF0Zm9y
bTsKIH07CiAKLXN0YXRpYyB2b2lkIHJ1blRlc3QoVGVzdFNoZWxsJiBzaGVsbCwgVGVzdFBhcmFt
cyYgcGFyYW1zLCBjb25zdCBzdHJpbmcmIHRlc3ROYW1lKQorc3RhdGljIHZvaWQgcnVuVGVzdChU
ZXN0U2hlbGwmIHNoZWxsLCBUZXN0UGFyYW1zJiBwYXJhbXMsIGNvbnN0IHN0cmluZyYgaW5wdXRM
aW5lKQogewogICAgIGludCBvbGRUaW1lb3V0TXNlYyA9IHNoZWxsLmxheW91dFRlc3RUaW1lb3V0
KCk7Ci0gICAgcGFyYW1zLnBpeGVsSGFzaCA9ICIiOwotICAgIHN0cmluZyBwYXRoT3JVUkwgPSB0
ZXN0TmFtZTsKLSAgICBzdHJpbmc6OnNpemVfdHlwZSBzZXBhcmF0b3JQb3NpdGlvbiA9IHBhdGhP
clVSTC5maW5kKCInIik7Ci0gICAgaWYgKHNlcGFyYXRvclBvc2l0aW9uICE9IHN0cmluZzo6bnBv
cykgewotICAgICAgICBwYXJhbXMucGl4ZWxIYXNoID0gcGF0aE9yVVJMLnN1YnN0cihzZXBhcmF0
b3JQb3NpdGlvbiArIDEpOwotICAgICAgICBwYXRoT3JVUkwuZXJhc2Uoc2VwYXJhdG9yUG9zaXRp
b24pOwotICAgIH0KLSAgICBwYXJhbXMudGVzdFVybCA9IHdlYmtpdF9zdXBwb3J0OjpDcmVhdGVV
UkxGb3JQYXRoT3JVUkwocGF0aE9yVVJMKTsKKyAgICBUZXN0Q29tbWFuZCBjb21tYW5kID0gcGFy
c2VJbnB1dExpbmUoaW5wdXRMaW5lKTsKKyAgICBwYXJhbXMudGVzdFVybCA9IHdlYmtpdF9zdXBw
b3J0OjpDcmVhdGVVUkxGb3JQYXRoT3JVUkwoY29tbWFuZC5wYXRoT3JVUkwpOworICAgIHBhcmFt
cy5waXhlbEhhc2ggPSBjb21tYW5kLnNob3VsZER1bXBQaXhlbHM7CiAgICAgd2Via2l0X3N1cHBv
cnQ6OlNldEN1cnJlbnREaXJlY3RvcnlGb3JGaWxlVVJMKHBhcmFtcy50ZXN0VXJsKTsKICAgICB2
ODo6Vjg6OlNldEZsYWdzRnJvbVN0cmluZyhzaGVsbC5qYXZhU2NyaXB0RmxhZ3MoKS5jX3N0cigp
LCBzaGVsbC5qYXZhU2NyaXB0RmxhZ3MoKS5sZW5ndGgoKSk7CiAgICAgaWYgKHNoZWxsLnN0cmVz
c09wdCgpIHx8IHNoZWxsLnN0cmVzc0Rlb3B0KCkpIHsKQEAgLTEwOCwxMSArMTAzLDExIEBAIHN0
YXRpYyB2b2lkIHJ1blRlc3QoVGVzdFNoZWxsJiBzaGVsbCwgVGVzdFBhcmFtcyYgcGFyYW1zLCBj
b25zdCBzdHJpbmcmIHRlc3ROYW1lCiAgICAgICAgICAgYm9vbCBpc0xhc3RMb2FkID0gKGkgPT0g
KHY4OjpUZXN0aW5nOjpHZXRTdHJlc3NSdW5zKCkgLSAxKSk7CiAgICAgICAgICAgc2hlbGwuc2V0
RHVtcFdoZW5GaW5pc2hlZChpc0xhc3RMb2FkKTsKICAgICAgICAgICBzaGVsbC5yZXNldFRlc3RD
b250cm9sbGVyKCk7Ci0gICAgICAgICAgc2hlbGwucnVuRmlsZVRlc3QocGFyYW1zKTsKKyAgICAg
ICAgICBzaGVsbC5ydW5GaWxlVGVzdChwYXJhbXMsIGNvbW1hbmQuc2hvdWxkRHVtcFBpeGVscyk7
CiAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgIHNoZWxsLnJlc2V0VGVzdENvbnRyb2xsZXIo
KTsKLSAgICAgIHNoZWxsLnJ1bkZpbGVUZXN0KHBhcmFtcyk7CisgICAgICBzaGVsbC5ydW5GaWxl
VGVzdChwYXJhbXMsIGNvbW1hbmQuc2hvdWxkRHVtcFBpeGVscyk7CiAgICAgfQogICAgIHNoZWxs
LnNldExheW91dFRlc3RUaW1lb3V0KG9sZFRpbWVvdXRNc2VjKTsKIH0KQEAgLTE0Niw4ICsxNDEs
NiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgICAgICAgICAgc2VydmVy
TW9kZSA9IHRydWU7CiAgICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvbk5vdHJlZSkK
ICAgICAgICAgICAgIHBhcmFtcy5kdW1wVHJlZSA9IGZhbHNlOwotICAgICAgICBlbHNlIGlmIChh
cmd1bWVudCA9PSBvcHRpb25QaXhlbFRlc3RzKQotICAgICAgICAgICAgcGFyYW1zLmR1bXBQaXhl
bHMgPSB0cnVlOwogICAgICAgICBlbHNlIGlmIChhcmd1bWVudCA9PSBvcHRpb25EZWJ1Z1JlbmRl
clRyZWUpCiAgICAgICAgICAgICBwYXJhbXMuZGVidWdSZW5kZXJUcmVlID0gdHJ1ZTsKICAgICAg
ICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uRGVidWdMYXllclRyZWUpCmRpZmYgLS1naXQg
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIv
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBjNmU0NDA0YzJjMzQ3MmIzYjY4Y2YyMjA5YjA3YWZjNmY5NmEyY2JmLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMTQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuaCIKLQotI2luY2x1ZGUgIldlYkFjY2Vzc2liaWxpdHlPYmplY3Qu
aCIKLSNpbmNsdWRlICJXZWJGcmFtZS5oIgotI2luY2x1ZGUgIldlYlZpZXcuaCIKLSNpbmNsdWRl
ICJwbGF0Zm9ybS9XZWJTdHJpbmcuaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQotQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCkKLSAgICA6IG1f
bG9nQWNjZXNzaWJpbGl0eUV2ZW50cyhmYWxzZSkKLXsKLQotICAgIGJpbmRNZXRob2QoImxvZ0Fj
Y2Vzc2liaWxpdHlFdmVudHMiLCAmQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmxvZ0FjY2Vzc2li
aWxpdHlFdmVudHNDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgiYWRkTm90aWZpY2F0aW9uTGlz
dGVuZXIiLCAmQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVy
Q2FsbGJhY2spOwotICAgIGJpbmRNZXRob2QoInJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyIiwg
JkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lckNhbGxi
YWNrKTsKLQotICAgIGJpbmRQcm9wZXJ0eSgiZm9jdXNlZEVsZW1lbnQiLCAmQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXI6OmZvY3VzZWRFbGVtZW50R2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9w
ZXJ0eSgicm9vdEVsZW1lbnQiLCAmQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJvb3RFbGVtZW50
R2V0dGVyQ2FsbGJhY2spOwotCi0gICAgYmluZEZhbGxiYWNrTWV0aG9kKCZBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcjo6ZmFsbGJhY2tDYWxsYmFjayk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6OmJpbmRUb0phdmFzY3JpcHQoV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJTdHJp
bmcmIGNsYXNzbmFtZSkKLXsKLSAgICBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0OjplbmFibGVBY2Nl
c3NpYmlsaXR5KCk7Ci0gICAgQ3BwQm91bmRDbGFzczo6YmluZFRvSmF2YXNjcmlwdChmcmFtZSwg
Y2xhc3NuYW1lKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVzZXQoKQot
ewotICAgIG1fcm9vdEVsZW1lbnQgPSBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0KCk7Ci0gICAgbV9m
b2N1c2VkRWxlbWVudCA9IFdlYkFjY2Vzc2liaWxpdHlPYmplY3QoKTsKLSAgICBtX2VsZW1lbnRz
LmNsZWFyKCk7Ci0KLSAgICBtX2xvZ0FjY2Vzc2liaWxpdHlFdmVudHMgPSBmYWxzZTsKLX0KLQot
dm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c2V0Rm9jdXNlZEVsZW1lbnQoY29uc3QgV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdCYgZm9jdXNlZEVsZW1lbnQpCi17Ci0gICAgbV9mb2N1c2VkRWxl
bWVudCA9IGZvY3VzZWRFbGVtZW50OwotfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBBY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcjo6Z2V0Rm9jdXNlZEVsZW1lbnQoKQotewotICAgIGlmIChtX2Zv
Y3VzZWRFbGVtZW50LmlzTnVsbCgpKQotICAgICAgICBtX2ZvY3VzZWRFbGVtZW50ID0gbV93ZWJW
aWV3LT5hY2Nlc3NpYmlsaXR5T2JqZWN0KCk7Ci0gICAgcmV0dXJuIG1fZWxlbWVudHMuZ2V0T3JD
cmVhdGUobV9mb2N1c2VkRWxlbWVudCk7Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjpnZXRSb290RWxlbWVudCgpCi17Ci0gICAgaWYgKG1fcm9v
dEVsZW1lbnQuaXNOdWxsKCkpCi0gICAgICAgIG1fcm9vdEVsZW1lbnQgPSBtX3dlYlZpZXctPmFj
Y2Vzc2liaWxpdHlPYmplY3QoKTsKLSAgICByZXR1cm4gbV9lbGVtZW50cy5jcmVhdGVSb290KG1f
cm9vdEVsZW1lbnQpOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzaG91bGRM
b2dBY2Nlc3NpYmlsaXR5RXZlbnRzKCkKLXsKLSAgICByZXR1cm4gbV9sb2dBY2Nlc3NpYmlsaXR5
RXZlbnRzOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpub3RpZmljYXRpb25S
ZWNlaXZlZChjb25zdCBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3QmIHRhcmdldCwgY29u
c3QgY2hhciogbm90aWZpY2F0aW9uTmFtZSkKLXsKLSAgICAvLyBDYWxsIG5vdGlmaWNhdGlvbiBs
aXN0ZW5lcnMgb24gdGhlIGVsZW1lbnQuCi0gICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZWxl
bWVudCA9IG1fZWxlbWVudHMuZ2V0T3JDcmVhdGUodGFyZ2V0KTsKLSAgICBlbGVtZW50LT5ub3Rp
ZmljYXRpb25SZWNlaXZlZChub3RpZmljYXRpb25OYW1lKTsKLQotICAgIC8vIENhbGwgZ2xvYmFs
IG5vdGlmaWNhdGlvbiBsaXN0ZW5lcnMuCi0gICAgc2l6ZV90IGNhbGxiYWNrQ291bnQgPSBtX25v
dGlmaWNhdGlvbkNhbGxiYWNrcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
YWxsYmFja0NvdW50OyBpKyspIHsKLSAgICAgICAgQ3BwVmFyaWFudCBhcmd1bWVudHNbMl07Ci0g
ICAgICAgIGFyZ3VtZW50c1swXS5zZXQoKmVsZW1lbnQtPmdldEFzQ3BwVmFyaWFudCgpKTsKLSAg
ICAgICAgYXJndW1lbnRzWzFdLnNldChub3RpZmljYXRpb25OYW1lKTsKLSAgICAgICAgQ3BwVmFy
aWFudCBpbnZva2VSZXN1bHQ7Ci0gICAgICAgIG1fbm90aWZpY2F0aW9uQ2FsbGJhY2tzW2ldLmlu
dm9rZURlZmF1bHQoYXJndW1lbnRzLCAyLCBpbnZva2VSZXN1bHQpOwotICAgIH0KLX0KLQotdm9p
ZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6bG9nQWNjZXNzaWJpbGl0eUV2ZW50c0NhbGxiYWNr
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBtX2xv
Z0FjY2Vzc2liaWxpdHlFdmVudHMgPSB0cnVlOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQot
Ci12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lckNh
bGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAxIHx8ICFhcmd1bWVudHNbMF0uaXNP
YmplY3QoKSkgewotICAgICAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIG1fbm90aWZpY2F0aW9uQ2FsbGJhY2tzLnB1c2hfYmFjayhhcmd1bWVudHNb
MF0pOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyOjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRoaXMuCi0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6OmZvY3VzZWRFbGVtZW50R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0
KQotewotICAgIHJlc3VsdC0+c2V0KCooZ2V0Rm9jdXNlZEVsZW1lbnQoKS0+Z2V0QXNDcHBWYXJp
YW50KCkpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cm9vdEVsZW1lbnRH
ZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoKihn
ZXRSb290RWxlbWVudCgpLT5nZXRBc0NwcFZhcmlhbnQoKSkpOwotfQotCi12b2lkIEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjpmYWxsYmFja0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBwcmludGYoIkNPTlNPTEUgTUVTU0FHRTogSmF2
YVNjcmlwdCBFUlJPUjogdW5rbm93biBtZXRob2QgY2FsbGVkIG9uICIKLSAgICAgICAgICAgIkFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyXG4iKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggOTY3MjU5NTM2MDhiNDg3NDAzYzJhYTIxYTYyNGU4NjRmZDcwZWVlZC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcl9oCi0j
ZGVmaW5lIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyX2gKLQotI2luY2x1ZGUgIkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQuaCIKLSNpbmNsdWRlICJDcHBCb3VuZENsYXNzLmgiCi0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotY2xhc3MgV2ViQWNjZXNzaWJpbGl0eU9iamVjdDsKLWNsYXNzIFdlYkZyYW1lOwot
Y2xhc3MgV2ViVmlldzsKLX0KLQotY2xhc3MgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIgOiBwdWJs
aWMgQ3BwQm91bmRDbGFzcyB7Ci1wdWJsaWM6Ci0gICAgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIo
KTsKLQotICAgIC8vIFNoYWRvdyB0byBpbmNsdWRlIGFjY2Vzc2liaWxpdHkgaW5pdGlhbGl6YXRp
b24uCi0gICAgdm9pZCBiaW5kVG9KYXZhc2NyaXB0KFdlYktpdDo6V2ViRnJhbWUqLCBjb25zdCBX
ZWJLaXQ6OldlYlN0cmluZyYgY2xhc3NuYW1lKTsKLSAgICB2b2lkIHJlc2V0KCk7Ci0KLSAgICB2
b2lkIHNldEZvY3VzZWRFbGVtZW50KGNvbnN0IFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVj
dCYpOwotICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGdldEZvY3VzZWRFbGVtZW50KCk7Ci0g
ICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZ2V0Um9vdEVsZW1lbnQoKTsKLQotICAgIGJvb2wg
c2hvdWxkTG9nQWNjZXNzaWJpbGl0eUV2ZW50cygpOwotCi0gICAgdm9pZCBub3RpZmljYXRpb25S
ZWNlaXZlZChjb25zdCBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3QmIHRhcmdldCwgY29u
c3QgY2hhciogbm90aWZpY2F0aW9uTmFtZSk7Ci0KLSAgICB2b2lkIHNldFdlYlZpZXcoV2ViS2l0
OjpXZWJWaWV3KiB3ZWJWaWV3KSB7IG1fd2ViVmlldyA9IHdlYlZpZXc7IH0KLQotcHJpdmF0ZToK
LSAgICAvLyBJZiB0cnVlLCB3aWxsIGxvZyBhbGwgYWNjZXNzaWJpbGl0eSBub3RpZmljYXRpb25z
LgotICAgIGJvb2wgbV9sb2dBY2Nlc3NpYmlsaXR5RXZlbnRzOwotCi0gICAgLy8gQm91bmQgbWV0
aG9kcyBhbmQgcHJvcGVydGllcwotICAgIHZvaWQgbG9nQWNjZXNzaWJpbGl0eUV2ZW50c0NhbGxi
YWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGZhbGxi
YWNrQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZv
aWQgYWRkTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCByZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lckNhbGxi
YWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIHZvaWQgZm9j
dXNlZEVsZW1lbnRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCByb290RWxl
bWVudEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKLQotICAgIFdlYktpdDo6V2ViQWNjZXNz
aWJpbGl0eU9iamVjdCBtX2ZvY3VzZWRFbGVtZW50OwotICAgIFdlYktpdDo6V2ViQWNjZXNzaWJp
bGl0eU9iamVjdCBtX3Jvb3RFbGVtZW50OwotCi0gICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudExp
c3QgbV9lbGVtZW50czsKLQotICAgIHN0ZDo6dmVjdG9yPENwcFZhcmlhbnQ+IG1fbm90aWZpY2F0
aW9uQ2FsbGJhY2tzOwotCi0gICAgV2ViS2l0OjpXZWJWaWV3KiBtX3dlYlZpZXc7Ci19OwotCi0j
ZW5kaWYgLy8gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNo
cm9taXVtLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjFkMjk0OGFlYmFi
MzI5ODI0OTI3NTQ1ODI0NTgzMDczMTRiY2RlZAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJD
aHJvbWl1bS5jcHAKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5oIgorCisjaW5jbHVkZSAiV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdC5oIgorI2luY2x1ZGUgIldlYkZyYW1lLmgiCisjaW5jbHVkZSAiV2Vi
Vmlldy5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0cmluZy5oIgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OworCitBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6QWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIoKQorICAgIDogbV9sb2dBY2Nlc3NpYmlsaXR5RXZlbnRzKGZhbHNlKQoreworCisgICAg
YmluZE1ldGhvZCgibG9nQWNjZXNzaWJpbGl0eUV2ZW50cyIsICZBY2Nlc3NpYmlsaXR5Q29udHJv
bGxlcjo6bG9nQWNjZXNzaWJpbGl0eUV2ZW50c0NhbGxiYWNrKTsKKyAgICBiaW5kTWV0aG9kKCJh
ZGROb3RpZmljYXRpb25MaXN0ZW5lciIsICZBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWRkTm90
aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayk7CisgICAgYmluZE1ldGhvZCgicmVtb3ZlTm90aWZp
Y2F0aW9uTGlzdGVuZXIiLCAmQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92ZU5vdGlmaWNh
dGlvbkxpc3RlbmVyQ2FsbGJhY2spOworCisgICAgYmluZFByb3BlcnR5KCJmb2N1c2VkRWxlbWVu
dCIsICZBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Zm9jdXNlZEVsZW1lbnRHZXR0ZXJDYWxsYmFj
ayk7CisgICAgYmluZFByb3BlcnR5KCJyb290RWxlbWVudCIsICZBY2Nlc3NpYmlsaXR5Q29udHJv
bGxlcjo6cm9vdEVsZW1lbnRHZXR0ZXJDYWxsYmFjayk7CisKKyAgICBiaW5kRmFsbGJhY2tNZXRo
b2QoJkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpmYWxsYmFja0NhbGxiYWNrKTsKK30KKwordm9p
ZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YmluZFRvSmF2YXNjcmlwdChXZWJGcmFtZSogZnJh
bWUsIGNvbnN0IFdlYlN0cmluZyYgY2xhc3NuYW1lKQoreworICAgIFdlYkFjY2Vzc2liaWxpdHlP
YmplY3Q6OmVuYWJsZUFjY2Vzc2liaWxpdHkoKTsKKyAgICBDcHBCb3VuZENsYXNzOjpiaW5kVG9K
YXZhc2NyaXB0KGZyYW1lLCBjbGFzc25hbWUpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyOjpyZXNldCgpCit7CisgICAgbV9yb290RWxlbWVudCA9IFdlYkFjY2Vzc2liaWxpdHlP
YmplY3QoKTsKKyAgICBtX2ZvY3VzZWRFbGVtZW50ID0gV2ViQWNjZXNzaWJpbGl0eU9iamVjdCgp
OworICAgIG1fZWxlbWVudHMuY2xlYXIoKTsKKworICAgIG1fbG9nQWNjZXNzaWJpbGl0eUV2ZW50
cyA9IGZhbHNlOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzZXRGb2N1c2Vk
RWxlbWVudChjb25zdCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiBmb2N1c2VkRWxlbWVudCkKK3sK
KyAgICBtX2ZvY3VzZWRFbGVtZW50ID0gZm9jdXNlZEVsZW1lbnQ7Cit9CisKK0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnQqIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpnZXRGb2N1c2VkRWxlbWVudCgp
Cit7CisgICAgaWYgKG1fZm9jdXNlZEVsZW1lbnQuaXNOdWxsKCkpCisgICAgICAgIG1fZm9jdXNl
ZEVsZW1lbnQgPSBtX3dlYlZpZXctPmFjY2Vzc2liaWxpdHlPYmplY3QoKTsKKyAgICByZXR1cm4g
bV9lbGVtZW50cy5nZXRPckNyZWF0ZShtX2ZvY3VzZWRFbGVtZW50KTsKK30KKworQWNjZXNzaWJp
bGl0eVVJRWxlbWVudCogQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmdldFJvb3RFbGVtZW50KCkK
K3sKKyAgICBpZiAobV9yb290RWxlbWVudC5pc051bGwoKSkKKyAgICAgICAgbV9yb290RWxlbWVu
dCA9IG1fd2ViVmlldy0+YWNjZXNzaWJpbGl0eU9iamVjdCgpOworICAgIHJldHVybiBtX2VsZW1l
bnRzLmNyZWF0ZVJvb3QobV9yb290RWxlbWVudCk7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI6OnNob3VsZExvZ0FjY2Vzc2liaWxpdHlFdmVudHMoKQoreworICAgIHJldHVybiBt
X2xvZ0FjY2Vzc2liaWxpdHlFdmVudHM7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6Om5vdGlmaWNhdGlvblJlY2VpdmVkKGNvbnN0IFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9i
amVjdCYgdGFyZ2V0LCBjb25zdCBjaGFyKiBub3RpZmljYXRpb25OYW1lKQoreworICAgIC8vIENh
bGwgbm90aWZpY2F0aW9uIGxpc3RlbmVycyBvbiB0aGUgZWxlbWVudC4KKyAgICBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50KiBlbGVtZW50ID0gbV9lbGVtZW50cy5nZXRPckNyZWF0ZSh0YXJnZXQpOwor
ICAgIGVsZW1lbnQtPm5vdGlmaWNhdGlvblJlY2VpdmVkKG5vdGlmaWNhdGlvbk5hbWUpOworCisg
ICAgLy8gQ2FsbCBnbG9iYWwgbm90aWZpY2F0aW9uIGxpc3RlbmVycy4KKyAgICBzaXplX3QgY2Fs
bGJhY2tDb3VudCA9IG1fbm90aWZpY2F0aW9uQ2FsbGJhY2tzLnNpemUoKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGNhbGxiYWNrQ291bnQ7IGkrKykgeworICAgICAgICBDcHBWYXJpYW50
IGFyZ3VtZW50c1syXTsKKyAgICAgICAgYXJndW1lbnRzWzBdLnNldCgqZWxlbWVudC0+Z2V0QXND
cHBWYXJpYW50KCkpOworICAgICAgICBhcmd1bWVudHNbMV0uc2V0KG5vdGlmaWNhdGlvbk5hbWUp
OworICAgICAgICBDcHBWYXJpYW50IGludm9rZVJlc3VsdDsKKyAgICAgICAgbV9ub3RpZmljYXRp
b25DYWxsYmFja3NbaV0uaW52b2tlRGVmYXVsdChhcmd1bWVudHMsIDIsIGludm9rZVJlc3VsdCk7
CisgICAgfQorfQorCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpsb2dBY2Nlc3NpYmls
aXR5RXZlbnRzQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVz
dWx0KQoreworICAgIG1fbG9nQWNjZXNzaWJpbGl0eUV2ZW50cyA9IHRydWU7CisgICAgcmVzdWx0
LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFkZE5vdGlm
aWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMs
IENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDEgfHwg
IWFyZ3VtZW50c1swXS5pc09iamVjdCgpKSB7CisgICAgICAgIHJlc3VsdC0+c2V0TnVsbCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9ub3RpZmljYXRpb25DYWxsYmFja3MucHVz
aF9iYWNrKGFyZ3VtZW50c1swXSk7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQg
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJh
Y2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9p
ZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Zm9jdXNlZEVsZW1lbnRHZXR0ZXJDYWxsYmFjayhD
cHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXQoKihnZXRGb2N1c2VkRWxlbWVu
dCgpLT5nZXRBc0NwcFZhcmlhbnQoKSkpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyOjpyb290RWxlbWVudEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAg
ICByZXN1bHQtPnNldCgqKGdldFJvb3RFbGVtZW50KCktPmdldEFzQ3BwVmFyaWFudCgpKSk7Cit9
CisKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZhbGxiYWNrQ2FsbGJhY2soY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHByaW50ZigiQ09O
U09MRSBNRVNTQUdFOiBKYXZhU2NyaXB0IEVSUk9SOiB1bmtub3duIG1ldGhvZCBjYWxsZWQgb24g
IgorICAgICAgICAgICAiQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJcbiIpOworICAgIHJlc3VsdC0+
c2V0TnVsbCgpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmggYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hy
b21pdW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xMWMwODJiM2U4MDhjMWY2MzBlYjg1MTg0ZTZlOGZiM2U4MTZm
NDk4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFJ1bm5lci9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmgKQEAgLTAsMCArMSw4NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bV9oCisjZGVmaW5lIEFjY2Vz
c2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW1faAorCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudENocm9taXVtLmgiCisjaW5jbHVkZSAiQ3BwQm91bmRDbGFzcy5oIgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKK2NsYXNzIFdlYkFjY2Vzc2liaWxpdHlPYmplY3Q7CitjbGFzcyBXZWJGcmFt
ZTsKK2NsYXNzIFdlYlZpZXc7Cit9CisKK2NsYXNzIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyIDog
cHVibGljIENwcEJvdW5kQ2xhc3MgeworcHVibGljOgorICAgIEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyKCk7CisKKyAgICAvLyBTaGFkb3cgdG8gaW5jbHVkZSBhY2Nlc3NpYmlsaXR5IGluaXRpYWxp
emF0aW9uLgorICAgIHZvaWQgYmluZFRvSmF2YXNjcmlwdChXZWJLaXQ6OldlYkZyYW1lKiwgY29u
c3QgV2ViS2l0OjpXZWJTdHJpbmcmIGNsYXNzbmFtZSk7CisgICAgdm9pZCByZXNldCgpOworCisg
ICAgdm9pZCBzZXRGb2N1c2VkRWxlbWVudChjb25zdCBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlP
YmplY3QmKTsKKyAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBnZXRGb2N1c2VkRWxlbWVudCgp
OworICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGdldFJvb3RFbGVtZW50KCk7CisKKyAgICBi
b29sIHNob3VsZExvZ0FjY2Vzc2liaWxpdHlFdmVudHMoKTsKKworICAgIHZvaWQgbm90aWZpY2F0
aW9uUmVjZWl2ZWQoY29uc3QgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiB0YXJnZXQs
IGNvbnN0IGNoYXIqIG5vdGlmaWNhdGlvbk5hbWUpOworCisgICAgdm9pZCBzZXRXZWJWaWV3KFdl
YktpdDo6V2ViVmlldyogd2ViVmlldykgeyBtX3dlYlZpZXcgPSB3ZWJWaWV3OyB9CisKK3ByaXZh
dGU6CisgICAgLy8gSWYgdHJ1ZSwgd2lsbCBsb2cgYWxsIGFjY2Vzc2liaWxpdHkgbm90aWZpY2F0
aW9ucy4KKyAgICBib29sIG1fbG9nQWNjZXNzaWJpbGl0eUV2ZW50czsKKworICAgIC8vIEJvdW5k
IG1ldGhvZHMgYW5kIHByb3BlcnRpZXMKKyAgICB2b2lkIGxvZ0FjY2Vzc2liaWxpdHlFdmVudHND
YWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBm
YWxsYmFja0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAg
ICB2b2lkIGFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgcmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXJD
YWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisKKyAgICB2b2lk
IGZvY3VzZWRFbGVtZW50R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOworICAgIHZvaWQgcm9v
dEVsZW1lbnRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7CisKKyAgICBXZWJLaXQ6OldlYkFj
Y2Vzc2liaWxpdHlPYmplY3QgbV9mb2N1c2VkRWxlbWVudDsKKyAgICBXZWJLaXQ6OldlYkFjY2Vz
c2liaWxpdHlPYmplY3QgbV9yb290RWxlbWVudDsKKworICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnRMaXN0IG1fZWxlbWVudHM7CisKKyAgICBzdGQ6OnZlY3RvcjxDcHBWYXJpYW50PiBtX25vdGlm
aWNhdGlvbkNhbGxiYWNrczsKKworICAgIFdlYktpdDo6V2ViVmlldyogbV93ZWJWaWV3OworfTsK
KworI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW1faApkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDU4MzgwNjU4NWI0ODFlZTE0MWFiZTQ4NGI3ZTI0ODRlODg0N2VjMTguLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDg2MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQuaCIKLQotI2luY2x1ZGUgIldlYkFjY2Vzc2liaWxpdHlPYmplY3QuaCIK
LSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJDU3RyaW5nLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2Vi
UG9pbnQuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJSZWN0LmgiCi0jaW5jbHVkZSAicGxhdGZv
cm0vV2ViU3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLS8vIE1hcCByb2xlIHZhbHVl
IHRvIHN0cmluZywgbWF0Y2hpbmcgU2FmYXJpL01hYyBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbiB0
bwotLy8gYXZvaWQgcmViYXNlbGluaW5nIGxheW91dCB0ZXN0cy4KLXN0YXRpYyBzdHJpbmcgcm9s
ZVRvU3RyaW5nKFdlYkFjY2Vzc2liaWxpdHlSb2xlIHJvbGUpCi17Ci0gICAgc3RyaW5nIHJlc3Vs
dCA9ICJBWFJvbGU6IEFYIjsKLSAgICBzd2l0Y2ggKHJvbGUpIHsKLSAgICBjYXNlIFdlYkFjY2Vz
c2liaWxpdHlSb2xlQnV0dG9uOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQnV0dG9u
Iik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVJhZGlvQnV0dG9uOgotICAgICAgICBy
ZXR1cm4gcmVzdWx0LmFwcGVuZCgiUmFkaW9CdXR0b24iKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2li
aWxpdHlSb2xlQ2hlY2tCb3g6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJDaGVja0Jv
eCIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVTbGlkZXI6Ci0gICAgICAgIHJldHVy
biByZXN1bHQuYXBwZW5kKCJTbGlkZXIiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xl
VGFiR3JvdXA6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJUYWJHcm91cCIpOwotICAg
IGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVUZXh0RmllbGQ6Ci0gICAgICAgIHJldHVybiByZXN1
bHQuYXBwZW5kKCJUZXh0RmllbGQiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlU3Rh
dGljVGV4dDoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlN0YXRpY1RleHQiKTsKLSAg
ICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlVGV4dEFyZWE6Ci0gICAgICAgIHJldHVybiByZXN1
bHQuYXBwZW5kKCJUZXh0QXJlYSIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVTY3Jv
bGxBcmVhOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiU2Nyb2xsQXJlYSIpOwotICAg
IGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVQb3BVcEJ1dHRvbjoKLSAgICAgICAgcmV0dXJuIHJl
c3VsdC5hcHBlbmQoIlBvcFVwQnV0dG9uIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9s
ZU1lbnVCdXR0b246Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJNZW51QnV0dG9uIik7
Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVRhYmxlOgotICAgICAgICByZXR1cm4gcmVz
dWx0LmFwcGVuZCgiVGFibGUiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlQXBwbGlj
YXRpb246Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJBcHBsaWNhdGlvbiIpOwotICAg
IGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVHcm91cDoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5h
cHBlbmQoIkdyb3VwIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVJhZGlvR3JvdXA6
Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJSYWRpb0dyb3VwIik7Ci0gICAgY2FzZSBX
ZWJBY2Nlc3NpYmlsaXR5Um9sZUxpc3Q6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJM
aXN0Iik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVNjcm9sbEJhcjoKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC5hcHBlbmQoIlNjcm9sbEJhciIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJp
bGl0eVJvbGVWYWx1ZUluZGljYXRvcjoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlZh
bHVlSW5kaWNhdG9yIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUltYWdlOgotICAg
ICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiSW1hZ2UiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2li
aWxpdHlSb2xlTWVudUJhcjoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIk1lbnVCYXIi
KTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlTWVudToKLSAgICAgICAgcmV0dXJuIHJl
c3VsdC5hcHBlbmQoIk1lbnUiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlTWVudUl0
ZW06Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJNZW51SXRlbSIpOwotICAgIGNhc2Ug
V2ViQWNjZXNzaWJpbGl0eVJvbGVDb2x1bW46Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5k
KCJDb2x1bW4iKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlUm93OgotICAgICAgICBy
ZXR1cm4gcmVzdWx0LmFwcGVuZCgiUm93Iik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9s
ZVRvb2xiYXI6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJUb29sYmFyIik7Ci0gICAg
Y2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUJ1c3lJbmRpY2F0b3I6Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQuYXBwZW5kKCJCdXN5SW5kaWNhdG9yIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5
Um9sZVByb2dyZXNzSW5kaWNhdG9yOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiUHJv
Z3Jlc3NJbmRpY2F0b3IiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlV2luZG93Ogot
ICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiV2luZG93Iik7Ci0gICAgY2FzZSBXZWJBY2Nl
c3NpYmlsaXR5Um9sZURyYXdlcjoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkRyYXdl
ciIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVTeXN0ZW1XaWRlOgotICAgICAgICBy
ZXR1cm4gcmVzdWx0LmFwcGVuZCgiU3lzdGVtV2lkZSIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJp
bGl0eVJvbGVPdXRsaW5lOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiT3V0bGluZSIp
OwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVJbmNyZW1lbnRvcjoKLSAgICAgICAgcmV0
dXJuIHJlc3VsdC5hcHBlbmQoIkluY3JlbWVudG9yIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmls
aXR5Um9sZUJyb3dzZXI6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJCcm93c2VyIik7
Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUNvbWJvQm94OgotICAgICAgICByZXR1cm4g
cmVzdWx0LmFwcGVuZCgiQ29tYm9Cb3giKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xl
U3BsaXRHcm91cDoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlNwbGl0R3JvdXAiKTsK
LSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlU3BsaXR0ZXI6Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQuYXBwZW5kKCJTcGxpdHRlciIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVD
b2xvcldlbGw6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJDb2xvcldlbGwiKTsKLSAg
ICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlR3Jvd0FyZWE6Ci0gICAgICAgIHJldHVybiByZXN1
bHQuYXBwZW5kKCJHcm93QXJlYSIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVTaGVl
dDoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlNoZWV0Iik7Ci0gICAgY2FzZSBXZWJB
Y2Nlc3NpYmlsaXR5Um9sZUhlbHBUYWc6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJI
ZWxwVGFnIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZU1hdHRlOgotICAgICAgICBy
ZXR1cm4gcmVzdWx0LmFwcGVuZCgiTWF0dGUiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlS
b2xlUnVsZXI6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJSdWxlciIpOwotICAgIGNh
c2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVSdWxlck1hcmtlcjoKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dC5hcHBlbmQoIlJ1bGVyTWFya2VyIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxp
bms6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMaW5rIik7Ci0gICAgY2FzZSBXZWJB
Y2Nlc3NpYmlsaXR5Um9sZURpc2Nsb3N1cmVUcmlhbmdsZToKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dC5hcHBlbmQoIkRpc2Nsb3N1cmVUcmlhbmdsZSIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0
eVJvbGVHcmlkOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiR3JpZCIpOwotICAgIGNh
c2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVDZWxsOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVu
ZCgiQ2VsbCIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVDb2x1bW5IZWFkZXI6Ci0g
ICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJDb2x1bW5IZWFkZXIiKTsKLSAgICBjYXNlIFdl
YkFjY2Vzc2liaWxpdHlSb2xlUm93SGVhZGVyOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVu
ZCgiUm93SGVhZGVyIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVdlYkNvcmVMaW5r
OgotICAgICAgICAvLyBNYXBzIHRvIExpbmsgcm9sZS4KLSAgICAgICAgcmV0dXJuIHJlc3VsdC5h
cHBlbmQoIkxpbmsiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlSW1hZ2VNYXBMaW5r
OgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiSW1hZ2VNYXBMaW5rIik7Ci0gICAgY2Fz
ZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUltYWdlTWFwOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFw
cGVuZCgiSW1hZ2VNYXAiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlTGlzdE1hcmtl
cjoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkxpc3RNYXJrZXIiKTsKLSAgICBjYXNl
IFdlYkFjY2Vzc2liaWxpdHlSb2xlV2ViQXJlYToKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBl
bmQoIldlYkFyZWEiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlSGVhZGluZzoKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkhlYWRpbmciKTsKLSAgICBjYXNlIFdlYkFjY2Vz
c2liaWxpdHlSb2xlTGlzdEJveDoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkxpc3RC
b3giKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlTGlzdEJveE9wdGlvbjoKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkxpc3RCb3hPcHRpb24iKTsKLSAgICBjYXNlIFdlYkFj
Y2Vzc2liaWxpdHlSb2xlVGFibGVIZWFkZXJDb250YWluZXI6Ci0gICAgICAgIHJldHVybiByZXN1
bHQuYXBwZW5kKCJUYWJsZUhlYWRlckNvbnRhaW5lciIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJp
bGl0eVJvbGVEZWZpbml0aW9uTGlzdFRlcm06Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5k
KCJEZWZpbml0aW9uTGlzdFRlcm0iKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlRGVm
aW5pdGlvbkxpc3REZWZpbml0aW9uOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiRGVm
aW5pdGlvbkxpc3REZWZpbml0aW9uIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUFu
bm90YXRpb246Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJBbm5vdGF0aW9uIik7Ci0g
ICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVNsaWRlclRodW1iOgotICAgICAgICByZXR1cm4g
cmVzdWx0LmFwcGVuZCgiU2xpZGVyVGh1bWIiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlS
b2xlTGFuZG1hcmtBcHBsaWNhdGlvbjoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkxh
bmRtYXJrQXBwbGljYXRpb24iKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlTGFuZG1h
cmtCYW5uZXI6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMYW5kbWFya0Jhbm5lciIp
OwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVMYW5kbWFya0NvbXBsZW1lbnRhcnk6Ci0g
ICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMYW5kbWFya0NvbXBsZW1lbnRhcnkiKTsKLSAg
ICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlTGFuZG1hcmtDb250ZW50SW5mbzoKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC5hcHBlbmQoIkxhbmRtYXJrQ29udGVudEluZm8iKTsKLSAgICBjYXNlIFdl
YkFjY2Vzc2liaWxpdHlSb2xlTGFuZG1hcmtNYWluOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFw
cGVuZCgiTGFuZG1hcmtNYWluIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxhbmRt
YXJrTmF2aWdhdGlvbjoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkxhbmRtYXJrTmF2
aWdhdGlvbiIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVMYW5kbWFya1NlYXJjaDoK
LSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkxhbmRtYXJrU2VhcmNoIik7Ci0gICAgY2Fz
ZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUFwcGxpY2F0aW9uTG9nOgotICAgICAgICByZXR1cm4gcmVz
dWx0LmFwcGVuZCgiQXBwbGljYXRpb25Mb2ciKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlS
b2xlQXBwbGljYXRpb25NYXJxdWVlOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQXBw
bGljYXRpb25NYXJxdWVlIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUFwcGxpY2F0
aW9uU3RhdHVzOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQXBwbGljYXRpb25TdGF0
dXMiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlQXBwbGljYXRpb25UaW1lcjoKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkFwcGxpY2F0aW9uVGltZXIiKTsKLSAgICBjYXNl
IFdlYkFjY2Vzc2liaWxpdHlSb2xlRG9jdW1lbnQ6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBw
ZW5kKCJEb2N1bWVudCIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVEb2N1bWVudEFy
dGljbGU6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJEb2N1bWVudEFydGljbGUiKTsK
LSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlRG9jdW1lbnROb3RlOgotICAgICAgICByZXR1
cm4gcmVzdWx0LmFwcGVuZCgiRG9jdW1lbnROb3RlIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmls
aXR5Um9sZURvY3VtZW50UmVnaW9uOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiRG9j
dW1lbnRSZWdpb24iKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlVXNlckludGVyZmFj
ZVRvb2x0aXA6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJVc2VySW50ZXJmYWNlVG9v
bHRpcCIpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIEFsc28gbWF0Y2hlcyBXZWJBY2Nlc3Np
YmlsaXR5Um9sZVVua25vd24uCi0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJVbmtub3du
Iik7Ci0gICAgfQotfQotCi1zdHJpbmcgZ2V0RGVzY3JpcHRpb24oY29uc3QgV2ViQWNjZXNzaWJp
bGl0eU9iamVjdCYgb2JqZWN0KQotewotICAgIHN0cmluZyBkZXNjcmlwdGlvbiA9IG9iamVjdC5h
Y2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKS51dGY4KCk7Ci0gICAgcmV0dXJuIGRlc2NyaXB0aW9u
Lmluc2VydCgwLCAiQVhEZXNjcmlwdGlvbjogIik7Ci19Ci0KLXN0cmluZyBnZXRIZWxwVGV4dChj
b25zdCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpCi17Ci0gICAgc3RyaW5nIGhlbHBU
ZXh0ID0gb2JqZWN0LmhlbHBUZXh0KCkudXRmOCgpOwotICAgIHJldHVybiBoZWxwVGV4dC5pbnNl
cnQoMCwgIkFYSGVscDogIik7Ci19Ci0KLXN0cmluZyBnZXRTdHJpbmdWYWx1ZShjb25zdCBXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpCi17Ci0gICAgc3RyaW5nIHZhbHVlID0gb2JqZWN0
LnN0cmluZ1ZhbHVlKCkudXRmOCgpOwotICAgIHJldHVybiB2YWx1ZS5pbnNlcnQoMCwgIkFYVmFs
dWU6ICIpOwotfQotCi1zdHJpbmcgZ2V0Um9sZShjb25zdCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
JiBvYmplY3QpCi17Ci0gICAgcmV0dXJuIHJvbGVUb1N0cmluZyhvYmplY3Qucm9sZVZhbHVlKCkp
OwotfQotCi1zdHJpbmcgZ2V0VGl0bGUoY29uc3QgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCYgb2Jq
ZWN0KQotewotICAgIHN0cmluZyB0aXRsZSA9IG9iamVjdC50aXRsZSgpLnV0ZjgoKTsKLSAgICBy
ZXR1cm4gdGl0bGUuaW5zZXJ0KDAsICJBWFRpdGxlOiAiKTsKLX0KLQotc3RyaW5nIGdldE9yaWVu
dGF0aW9uKGNvbnN0IFdlYkFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkKLXsKLSAgICBpZiAo
b2JqZWN0LmlzVmVydGljYWwoKSkKLSAgICAgICAgcmV0dXJuICJBWE9yaWVudGF0aW9uOiBBWFZl
cnRpY2FsT3JpZW50YXRpb24iOwotCi0gICAgcmV0dXJuICJBWE9yaWVudGF0aW9uOiBBWEhvcml6
b250YWxPcmllbnRhdGlvbiI7Ci19Ci0KLXN0cmluZyBnZXRBdHRyaWJ1dGVzKGNvbnN0IFdlYkFj
Y2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkKLXsKLSAgICAvLyBGSVhNRTogQ29uY2F0ZW5hdGUg
YWxsIGF0dHJpYnV0ZXMgb2YgdGhlIEFjY2Vzc2liaWxpdHlPYmplY3QuCi0gICAgc3RyaW5nIGF0
dHJpYnV0ZXMoZ2V0VGl0bGUob2JqZWN0KSk7Ci0gICAgYXR0cmlidXRlcy5hcHBlbmQoIlxuIik7
Ci0gICAgYXR0cmlidXRlcy5hcHBlbmQoZ2V0Um9sZShvYmplY3QpKTsKLSAgICBhdHRyaWJ1dGVz
LmFwcGVuZCgiXG4iKTsKLSAgICBhdHRyaWJ1dGVzLmFwcGVuZChnZXREZXNjcmlwdGlvbihvYmpl
Y3QpKTsKLSAgICByZXR1cm4gYXR0cmlidXRlczsKLX0KLQotCi0vLyBDb2xsZWN0cyBhdHRyaWJ1
dGVzIGludG8gYSBzdHJpbmcsIGRlbGltaXRlZCBieSBkYXNoZXMuIFVzZWQgYnkgYWxsIG1ldGhv
ZHMKLS8vIHRoYXQgb3V0cHV0IGxpc3RzIG9mIGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXNPZkxpbmtl
ZFVJRWxlbWVudHNDYWxsYmFjaywKLS8vIEF0dHJpYnV0ZXNPZkNoaWxkcmVuQ2FsbGJhY2ssIGV0
Yy4KLWNsYXNzIEF0dHJpYnV0ZXNDb2xsZWN0b3IgewotcHVibGljOgotICAgIHZvaWQgY29sbGVj
dEF0dHJpYnV0ZXMoY29uc3QgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KQotICAgIHsK
LSAgICAgICAgbV9hdHRyaWJ1dGVzLmFwcGVuZCgiXG4tLS0tLS0tLS0tLS1cbiIpOwotICAgICAg
ICBtX2F0dHJpYnV0ZXMuYXBwZW5kKGdldEF0dHJpYnV0ZXMob2JqZWN0KSk7Ci0gICAgfQotCi0g
ICAgc3RyaW5nIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXM7IH0KLQot
cHJpdmF0ZToKLSAgICBzdHJpbmcgbV9hdHRyaWJ1dGVzOwotfTsKLQotQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudChjb25zdCBXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0JiBvYmplY3QsIEZhY3RvcnkqIGZhY3RvcnkpCi0gICAgOiBtX2FjY2Vzc2liaWxpdHlPYmpl
Y3Qob2JqZWN0KQotICAgICwgbV9mYWN0b3J5KGZhY3RvcnkpCi17Ci0KLSAgICBBU1NFUlQoZmFj
dG9yeSk7Ci0KLSAgICAvLwotICAgIC8vIFByb3BlcnRpZXMKLSAgICAvLwotCi0gICAgYmluZFBy
b3BlcnR5KCJyb2xlIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvbGVHZXR0ZXJDYWxsYmFj
ayk7Ci0gICAgYmluZFByb3BlcnR5KCJ0aXRsZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0
aXRsZUdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5kUHJvcGVydHkoImRlc2NyaXB0aW9uIiwgJkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlc2NyaXB0aW9uR2V0dGVyQ2FsbGJhY2spOwotICAgIGJp
bmRQcm9wZXJ0eSgiaGVscFRleHQiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVscFRleHRH
ZXR0ZXJDYWxsYmFjayk7Ci0gICAgYmluZFByb3BlcnR5KCJzdHJpbmdWYWx1ZSIsICZBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpzdHJpbmdWYWx1ZUdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5kUHJv
cGVydHkoIngiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6eEdldHRlckNhbGxiYWNrKTsKLSAg
ICBiaW5kUHJvcGVydHkoInkiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6eUdldHRlckNhbGxi
YWNrKTsKLSAgICBiaW5kUHJvcGVydHkoIndpZHRoIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OndpZHRoR2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgiaGVpZ2h0IiwgJkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmhlaWdodEdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5kUHJvcGVy
dHkoImludFZhbHVlIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmludFZhbHVlR2V0dGVyQ2Fs
bGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgibWluVmFsdWUiLCAmQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6bWluVmFsdWVHZXR0ZXJDYWxsYmFjayk7Ci0gICAgYmluZFByb3BlcnR5KCJtYXhWYWx1
ZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYXhWYWx1ZUdldHRlckNhbGxiYWNrKTsKLSAg
ICBiaW5kUHJvcGVydHkoImNoaWxkcmVuQ291bnQiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
Y2hpbGRyZW5Db3VudEdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5kUHJvcGVydHkoImluc2VydGlv
blBvaW50TGluZU51bWJlciIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnNlcnRpb25Qb2lu
dExpbmVOdW1iZXJHZXR0ZXJDYWxsYmFjayk7Ci0gICAgYmluZFByb3BlcnR5KCJzZWxlY3RlZFRl
eHRSYW5nZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRSYW5nZUdldHRl
ckNhbGxiYWNrKTsKLSAgICBiaW5kUHJvcGVydHkoImlzRW5hYmxlZCIsICZBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojppc0VuYWJsZWRHZXR0ZXJDYWxsYmFjayk7Ci0gICAgYmluZFByb3BlcnR5KCJp
c1JlcXVpcmVkIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzUmVxdWlyZWRHZXR0ZXJDYWxs
YmFjayk7Ci0gICAgYmluZFByb3BlcnR5KCJpc0ZvY3VzZWQiLCAmQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNGb2N1c2VkR2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgiaXNGb2N1
c2FibGUiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2FibGVHZXR0ZXJDYWxsYmFj
ayk7Ci0gICAgYmluZFByb3BlcnR5KCJpc1NlbGVjdGVkIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmlzU2VsZWN0ZWRHZXR0ZXJDYWxsYmFjayk7Ci0gICAgYmluZFByb3BlcnR5KCJpc1NlbGVj
dGFibGUiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RhYmxlR2V0dGVyQ2FsbGJh
Y2spOwotICAgIGJpbmRQcm9wZXJ0eSgiaXNNdWx0aVNlbGVjdGFibGUiLCAmQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNNdWx0aVNlbGVjdGFibGVHZXR0ZXJDYWxsYmFjayk7Ci0gICAgYmluZFBy
b3BlcnR5KCJpc1NlbGVjdGVkT3B0aW9uQWN0aXZlIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmlzU2VsZWN0ZWRPcHRpb25BY3RpdmVHZXR0ZXJDYWxsYmFjayk7Ci0gICAgYmluZFByb3BlcnR5
KCJpc0V4cGFuZGVkIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRXhwYW5kZWRHZXR0ZXJD
YWxsYmFjayk7Ci0gICAgYmluZFByb3BlcnR5KCJpc0NoZWNrZWQiLCAmQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNDaGVja2VkR2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgiaXNW
aXNpYmxlIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzVmlzaWJsZUdldHRlckNhbGxiYWNr
KTsKLSAgICBiaW5kUHJvcGVydHkoImlzT2ZmU2NyZWVuIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmlzT2ZmU2NyZWVuR2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgiaXNDb2xs
YXBzZWQiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDb2xsYXBzZWRHZXR0ZXJDYWxsYmFj
ayk7Ci0gICAgYmluZFByb3BlcnR5KCJoYXNQb3B1cCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpoYXNQb3B1cEdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5kUHJvcGVydHkoImlzVmFsaWQiLCAm
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNWYWxpZEdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5k
UHJvcGVydHkoIm9yaWVudGF0aW9uIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om9yaWVudGF0
aW9uR2V0dGVyQ2FsbGJhY2spOwotCi0gICAgLy8KLSAgICAvLyBNZXRob2RzCi0gICAgLy8KLQot
ICAgIGJpbmRNZXRob2QoImFsbEF0dHJpYnV0ZXMiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
YWxsQXR0cmlidXRlc0NhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJhdHRyaWJ1dGVzT2ZMaW5r
ZWRVSUVsZW1lbnRzIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtl
ZFVJRWxlbWVudHNDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgiYXR0cmlidXRlc09mRG9jdW1l
bnRMaW5rcyIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZEb2N1bWVudExp
bmtzQ2FsbGJhY2spOwotICAgIGJpbmRNZXRob2QoImF0dHJpYnV0ZXNPZkNoaWxkcmVuIiwgJkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuQ2FsbGJhY2spOwotICAg
IGJpbmRNZXRob2QoImxpbmVGb3JJbmRleCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5l
Rm9ySW5kZXhDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgiYm91bmRzRm9yUmFuZ2UiLCAmQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6Ym91bmRzRm9yUmFuZ2VDYWxsYmFjayk7Ci0gICAgYmluZE1l
dGhvZCgic3RyaW5nRm9yUmFuZ2UiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nRm9y
UmFuZ2VDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgiY2hpbGRBdEluZGV4IiwgJkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmNoaWxkQXRJbmRleENhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJl
bGVtZW50QXRQb2ludCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjplbGVtZW50QXRQb2ludENh
bGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJhdHRyaWJ1dGVzT2ZDb2x1bW5IZWFkZXJzIiwgJkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbkhlYWRlcnNDYWxsYmFjayk7
Ci0gICAgYmluZE1ldGhvZCgiYXR0cmlidXRlc09mUm93SGVhZGVycyIsICZBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dIZWFkZXJzQ2FsbGJhY2spOwotICAgIGJpbmRNZXRo
b2QoImF0dHJpYnV0ZXNPZkNvbHVtbnMiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmli
dXRlc09mQ29sdW1uc0NhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJhdHRyaWJ1dGVzT2ZSb3dz
IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd3NDYWxsYmFjayk7Ci0g
ICAgYmluZE1ldGhvZCgiYXR0cmlidXRlc09mVmlzaWJsZUNlbGxzIiwgJkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxsc0NhbGxiYWNrKTsKLSAgICBiaW5kTWV0
aG9kKCJhdHRyaWJ1dGVzT2ZIZWFkZXIiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmli
dXRlc09mSGVhZGVyQ2FsbGJhY2spOwotICAgIGJpbmRNZXRob2QoImluZGV4SW5UYWJsZSIsICZB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbmRleEluVGFibGVDYWxsYmFjayk7Ci0gICAgYmluZE1l
dGhvZCgicm93SW5kZXhSYW5nZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dJbmRleFJh
bmdlQ2FsbGJhY2spOwotICAgIGJpbmRNZXRob2QoImNvbHVtbkluZGV4UmFuZ2UiLCAmQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6Y29sdW1uSW5kZXhSYW5nZUNhbGxiYWNrKTsKLSAgICBiaW5kTWV0
aG9kKCJjZWxsRm9yQ29sdW1uQW5kUm93IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNlbGxG
b3JDb2x1bW5BbmRSb3dDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgidGl0bGVVSUVsZW1lbnQi
LCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGVVSUVsZW1lbnRDYWxsYmFjayk7Ci0gICAg
YmluZE1ldGhvZCgic2V0U2VsZWN0ZWRUZXh0UmFuZ2UiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2VDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgiYXR0cmli
dXRlVmFsdWUiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlVmFsdWVDYWxsYmFj
ayk7Ci0gICAgYmluZE1ldGhvZCgiaXNBdHRyaWJ1dGVTZXR0YWJsZSIsICZBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojppc0F0dHJpYnV0ZVNldHRhYmxlQ2FsbGJhY2spOwotICAgIGJpbmRNZXRob2Qo
ImlzQWN0aW9uU3VwcG9ydGVkIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQWN0aW9uU3Vw
cG9ydGVkQ2FsbGJhY2spOwotICAgIGJpbmRNZXRob2QoInBhcmVudEVsZW1lbnQiLCAmQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6cGFyZW50RWxlbWVudENhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9k
KCJpbmNyZW1lbnQiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5jcmVtZW50Q2FsbGJhY2sp
OwotICAgIGJpbmRNZXRob2QoImRlY3JlbWVudCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpk
ZWNyZW1lbnRDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgic2hvd01lbnUiLCAmQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6c2hvd01lbnVDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgicHJlc3Mi
LCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cHJlc3NDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhv
ZCgiaXNFcXVhbCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0VxdWFsQ2FsbGJhY2spOwot
ICAgIGJpbmRNZXRob2QoImFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyIiwgJkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2spOwotICAgIGJpbmRNZXRo
b2QoInJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2spOwotICAgIGJpbmRNZXRob2QoInRh
a2VGb2N1cyIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlRm9jdXNDYWxsYmFjayk7Ci0g
ICAgYmluZE1ldGhvZCgic2Nyb2xsVG9NYWtlVmlzaWJsZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlQ2FsbGJhY2spOwotICAgIGJpbmRNZXRob2QoInNjcm9s
bFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXMiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Ny
b2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1c0NhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJz
Y3JvbGxUb0dsb2JhbFBvaW50IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvR2xv
YmFsUG9pbnRDYWxsYmFjayk7Ci0KLSAgICBiaW5kRmFsbGJhY2tNZXRob2QoJkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmZhbGxiYWNrQ2FsbGJhY2spOwotfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50KiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZEF0SW5kZXgodW5zaWduZWQgaW5k
ZXgpCi17Ci0gICAgcmV0dXJuIG1fZmFjdG9yeS0+Z2V0T3JDcmVhdGUoYWNjZXNzaWJpbGl0eU9i
amVjdCgpLmNoaWxkQXQoaW5kZXgpKTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc0VxdWFsKGNvbnN0IFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVjdCYgb3RoZXIpCi17
Ci0gICAgcmV0dXJuIGFjY2Vzc2liaWxpdHlPYmplY3QoKS5lcXVhbHMob3RoZXIpOwotfQotCi12
b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om5vdGlmaWNhdGlvblJlY2VpdmVkKGNvbnN0IGNo
YXIqIG5vdGlmaWNhdGlvbk5hbWUpCi17Ci0gICAgc2l6ZV90IGNhbGxiYWNrQ291bnQgPSBtX25v
dGlmaWNhdGlvbkNhbGxiYWNrcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
YWxsYmFja0NvdW50OyBpKyspIHsKLSAgICAgICAgQ3BwVmFyaWFudCBub3RpZmljYXRpb25OYW1l
QXJndW1lbnQ7Ci0gICAgICAgIG5vdGlmaWNhdGlvbk5hbWVBcmd1bWVudC5zZXQobm90aWZpY2F0
aW9uTmFtZSk7Ci0gICAgICAgIENwcFZhcmlhbnQgaW52b2tlUmVzdWx0OwotICAgICAgICBtX25v
dGlmaWNhdGlvbkNhbGxiYWNrc1tpXS5pbnZva2VEZWZhdWx0KCZub3RpZmljYXRpb25OYW1lQXJn
dW1lbnQsIDEsIGludm9rZVJlc3VsdCk7Ci0gICAgfQotfQotCi0vLwotLy8gUHJvcGVydGllcwot
Ly8KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlR2V0dGVyQ2FsbGJhY2soQ3Bw
VmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KGdldFJvbGUoYWNjZXNzaWJpbGl0
eU9iamVjdCgpKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGVHZXR0
ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoZ2V0VGl0
bGUoYWNjZXNzaWJpbGl0eU9iamVjdCgpKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6ZGVzY3JpcHRpb25HZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0g
ICAgcmVzdWx0LT5zZXQoZ2V0RGVzY3JpcHRpb24oYWNjZXNzaWJpbGl0eU9iamVjdCgpKSk7Ci19
Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVscFRleHRHZXR0ZXJDYWxsYmFjayhD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoZ2V0SGVscFRleHQoYWNjZXNz
aWJpbGl0eU9iamVjdCgpKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3Ry
aW5nVmFsdWVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0
LT5zZXQoZ2V0U3RyaW5nVmFsdWUoYWNjZXNzaWJpbGl0eU9iamVjdCgpKSk7Ci19Ci0KLXZvaWQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6eEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3Vs
dCkKLXsKLSAgICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuYm91bmRpbmdCb3hS
ZWN0KCkueCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6eUdldHRlckNhbGxi
YWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5
T2JqZWN0KCkuYm91bmRpbmdCb3hSZWN0KCkueSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6d2lkdGhHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAg
cmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmJvdW5kaW5nQm94UmVjdCgpLndpZHRo
KTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoZWlnaHRHZXR0ZXJDYWxsYmFj
ayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9i
amVjdCgpLmJvdW5kaW5nQm94UmVjdCgpLmhlaWdodCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aW50VmFsdWVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17
Ci0gICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLnZhbHVlRm9yUmFuZ2UoKSk7
Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bWluVmFsdWVHZXR0ZXJDYWxsYmFj
ayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9i
amVjdCgpLm1pblZhbHVlRm9yUmFuZ2UoKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6bWF4VmFsdWVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAg
cmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLm1heFZhbHVlRm9yUmFuZ2UoKSk7Ci19
Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2hpbGRyZW5Db3VudEdldHRlckNhbGxi
YWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpbnQgY291bnQgPSAxOyAvLyBSb290IG9i
amVjdCBhbHdheXMgaGFzIG9ubHkgb25lIGNoaWxkLCB0aGUgV2ViVmlldy4KLSAgICBpZiAoIWlz
Um9vdCgpKQotICAgICAgICBjb3VudCA9IGFjY2Vzc2liaWxpdHlPYmplY3QoKS5jaGlsZENvdW50
KCk7Ci0gICAgcmVzdWx0LT5zZXQoY291bnQpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6Omluc2VydGlvblBvaW50TGluZU51bWJlckdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQq
IHJlc3VsdCkKLXsKLSAgICBXZWJWZWN0b3I8aW50PiBsaW5lQnJlYWtzOwotICAgIGFjY2Vzc2li
aWxpdHlPYmplY3QoKS5saW5lQnJlYWtzKGxpbmVCcmVha3MpOwotICAgIGludCBjdXJzb3IgPSBh
Y2Nlc3NpYmlsaXR5T2JqZWN0KCkuc2VsZWN0aW9uRW5kKCk7Ci0gICAgaW50IGxpbmUgPSAwOwot
ICAgIHdoaWxlIChsaW5lIDwgc3RhdGljX2Nhc3Q8aW50PihsaW5lQnJlYWtzLnNpemUoKSkgJiYg
bGluZUJyZWFrc1tsaW5lXSA8PSBjdXJzb3IpCi0gICAgICAgIGxpbmUrKzsKLSAgICByZXN1bHQt
PnNldChsaW5lKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRl
eHRSYW5nZUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHRoaXMuCi0gICAgcmVzdWx0LT5zZXQoc3RkOjpzdHJpbmcoKSk7Ci19Ci0K
LXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNFbmFibGVkR2V0dGVyQ2FsbGJhY2soQ3Bw
VmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmplY3Qo
KS5pc0VuYWJsZWQoKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNSZXF1
aXJlZEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNl
dChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuaXNSZXF1aXJlZCgpKTsKLX0KLQotdm9pZCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzZWRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1
bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmlzRm9jdXNlZCgp
KTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzYWJsZUdldHRlckNh
bGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChhY2Nlc3NpYmls
aXR5T2JqZWN0KCkuY2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3Vs
dCkKLXsKLSAgICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuaXNTZWxlY3RlZCgp
KTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGFibGVHZXR0ZXJD
YWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJp
bGl0eU9iamVjdCgpLmNhblNldFNlbGVjdGVkQXR0cmlidXRlKCkpOwotfQotCi12b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlTZWxlY3RhYmxlR2V0dGVyQ2FsbGJhY2soQ3BwVmFy
aWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5p
c011bHRpU2VsZWN0YWJsZSgpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
c1NlbGVjdGVkT3B0aW9uQWN0aXZlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQot
ewotICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5pc1NlbGVjdGVkT3B0aW9u
QWN0aXZlKCkpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRXhwYW5kZWRH
ZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoIWFj
Y2Vzc2liaWxpdHlPYmplY3QoKS5pc0NvbGxhcHNlZCgpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc0NoZWNrZWRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQp
Ci17Ci0gICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmlzQ2hlY2tlZCgpKTsK
LX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Zpc2libGVHZXR0ZXJDYWxsYmFj
ayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9i
amVjdCgpLmlzVmlzaWJsZSgpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
c09mZlNjcmVlbkdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1
bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuaXNPZmZTY3JlZW4oKSk7Ci19Ci0KLXZvaWQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDb2xsYXBzZWRHZXR0ZXJDYWxsYmFjayhDcHBWYXJp
YW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmlz
Q29sbGFwc2VkKCkpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omhhc1BvcHVw
R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KGFj
Y2Vzc2liaWxpdHlPYmplY3QoKS5hcmlhSGFzUG9wdXAoKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aXNWYWxpZEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkK
LXsKLSAgICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuaXNWYWxpZCgpKTsKLX0K
LQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpvcmllbnRhdGlvbkdldHRlckNhbGxiYWNr
KENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChnZXRPcmllbnRhdGlvbihh
Y2Nlc3NpYmlsaXR5T2JqZWN0KCkpKTsKLX0KLQotLy8KLS8vIE1ldGhvZHMKLS8vCi0KLXZvaWQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlc0NhbGxiYWNrKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChnZXRB
dHRyaWJ1dGVzKGFjY2Vzc2liaWxpdHlPYmplY3QoKSkpOwotfQotCi12b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHNDYWxsYmFjayhjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXRO
dWxsKCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mRG9j
dW1lbnRMaW5rc0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJl
c3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDaGlsZHJlbkNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgQXR0cmlidXRlc0Nv
bGxlY3RvciBjb2xsZWN0b3I7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IGFjY2Vzc2liaWxpdHlPYmpl
Y3QoKS5jaGlsZENvdW50KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsr
aSkKLSAgICAgICAgY29sbGVjdG9yLmNvbGxlY3RBdHRyaWJ1dGVzKGFjY2Vzc2liaWxpdHlPYmpl
Y3QoKS5jaGlsZEF0KGkpKTsKLSAgICByZXN1bHQtPnNldChjb2xsZWN0b3IuYXR0cmlidXRlcygp
KTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJhbWV0cml6ZWRBdHRyaWJ1
dGVOYW1lc0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpsaW5lRm9ySW5kZXhDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6Ym91bmRzRm9yUmFuZ2VDYWxsYmFjayhjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7
Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nRm9yUmFuZ2VDYWxsYmFj
ayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVz
dWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2hpbGRB
dEluZGV4Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoIWFyZ3VtZW50cy5zaXplKCkgfHwgIWFyZ3VtZW50c1sw
XS5pc051bWJlcigpKSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogY2hpbGQgPSBnZXRDaGls
ZEF0SW5kZXgoYXJndW1lbnRzWzBdLnRvSW50MzIoKSk7Ci0gICAgaWYgKCFjaGlsZCkgewotICAg
ICAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHJl
c3VsdC0+c2V0KCooY2hpbGQtPmdldEFzQ3BwVmFyaWFudCgpKSk7Ci19Ci0KLXZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6ZWxlbWVudEF0UG9pbnRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19
Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVy
c0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsK
LSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjphdHRyaWJ1dGVzT2ZSb3dIZWFkZXJzQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lk
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbnNDYWxsYmFjayhjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5z
ZXROdWxsKCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09m
Um93c0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkK
LXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjphdHRyaWJ1dGVzT2ZWaXNpYmxlQ2VsbHNDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0K
LXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mSGVhZGVyQ2FsbGJhY2so
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluZGV4SW5U
YWJsZUNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkK
LXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpyb3dJbmRleFJhbmdlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmNvbHVtbkluZGV4UmFuZ2VDYWxsYmFjayhjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7
Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2VsbEZvckNvbHVtbkFuZFJvd0Nh
bGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0
aXRsZVVJRWxlbWVudENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
IHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZUNhbGxiYWNrKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsK
LX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVWYWx1ZUNhbGxiYWNr
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1
bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0dHJp
YnV0ZVNldHRhYmxlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDEgJiYgIWFy
Z3VtZW50c1swXS5pc1N0cmluZygpKSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc3RyaW5nIGF0dHJpYnV0ZSA9IGFyZ3VtZW50c1sw
XS50b1N0cmluZygpOwotICAgIGJvb2wgc2V0dGFibGUgPSBmYWxzZTsKLSAgICBpZiAoYXR0cmli
dXRlID09ICJBWFZhbHVlIikKLSAgICAgICAgc2V0dGFibGUgPSBhY2Nlc3NpYmlsaXR5T2JqZWN0
KCkuY2FuU2V0VmFsdWVBdHRyaWJ1dGUoKTsKLSAgICByZXN1bHQtPnNldChzZXR0YWJsZSk7Ci19
Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNBY3Rpb25TdXBwb3J0ZWRDYWxsYmFj
ayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgLy8g
VGhpcyBvbmUgbWF5IGJlIHJlYWxseSBoYXJkIHRvIGltcGxlbWVudC4KLSAgICAvLyBOb3QgZXhw
b3NlZCBieSBBY2Nlc3NpYmlsaXR5T2JqZWN0LgotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQot
Ci12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmVudEVsZW1lbnRDYWxsYmFjayhjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5z
ZXROdWxsKCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5jcmVtZW50Q2Fs
bGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAg
IHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRl
Y3JlbWVudENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpzaG93TWVudUNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpwcmVzc0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBhY2Nlc3NpYmlsaXR5T2JqZWN0KCkucGVyZm9ybURl
ZmF1bHRBY3Rpb24oKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojppc0VxdWFsQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUo
KSA8IDEgfHwgIWFyZ3VtZW50c1swXS5pc09iamVjdCgpKSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0
TnVsbCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcmVzdWx0LT5zZXQoYXJndW1l
bnRzWzBdLmlzRXF1YWwoKmdldEFzQ3BwVmFyaWFudCgpKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayhjb25zdCBDcHBB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChh
cmd1bWVudHMuc2l6ZSgpIDwgMSB8fCAhYXJndW1lbnRzWzBdLmlzT2JqZWN0KCkpIHsKLSAgICAg
ICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX25v
dGlmaWNhdGlvbkNhbGxiYWNrcy5wdXNoX2JhY2soYXJndW1lbnRzWzBdKTsKLSAgICByZXN1bHQt
PnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVOb3Rp
ZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi0gICAgcmVzdWx0
LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZUZvY3Vz
Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewot
ICAgIGFjY2Vzc2liaWxpdHlPYmplY3QoKS5zZXRGb2N1c2VkKHRydWUpOwotICAgIHJlc3VsdC0+
c2V0TnVsbCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFr
ZVZpc2libGVDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1
bHQpCi17Ci0gICAgYWNjZXNzaWJpbGl0eU9iamVjdCgpLnNjcm9sbFRvTWFrZVZpc2libGUoKTsK
LSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNl
dE51bGwoKTsKLQotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDQKLSAgICAgICAgfHwgIWFy
Z3VtZW50c1swXS5pc051bWJlcigpCi0gICAgICAgIHx8ICFhcmd1bWVudHNbMV0uaXNOdW1iZXIo
KQotICAgICAgICB8fCAhYXJndW1lbnRzWzJdLmlzTnVtYmVyKCkKLSAgICAgICAgfHwgIWFyZ3Vt
ZW50c1szXS5pc051bWJlcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgeCA9IGFyZ3Vt
ZW50c1swXS50b0ludDMyKCk7Ci0gICAgaW50IHkgPSBhcmd1bWVudHNbMV0udG9JbnQzMigpOwot
ICAgIGludCB3aWR0aCA9IGFyZ3VtZW50c1syXS50b0ludDMyKCk7Ci0gICAgaW50IGhlaWdodCA9
IGFyZ3VtZW50c1szXS50b0ludDMyKCk7Ci0gICAgYWNjZXNzaWJpbGl0eU9iamVjdCgpLnNjcm9s
bFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXMoV2ViUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7
Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6c2Nyb2xsVG9HbG9iYWxQb2ludENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0K
LSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAyCi0gICAgICAgIHx8ICFhcmd1bWVudHNbMF0u
aXNOdW1iZXIoKQotICAgICAgICB8fCAhYXJndW1lbnRzWzFdLmlzTnVtYmVyKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGludCB4ID0gYXJndW1lbnRzWzBdLnRvSW50MzIoKTsKLSAgICBpbnQg
eSA9IGFyZ3VtZW50c1sxXS50b0ludDMyKCk7Ci0KLSAgICBhY2Nlc3NpYmlsaXR5T2JqZWN0KCku
c2Nyb2xsVG9HbG9iYWxQb2ludChXZWJQb2ludCh4LCB5KSk7Ci0gICAgcmVzdWx0LT5zZXROdWxs
KCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZmFsbGJhY2tDYWxsYmFjayhj
b25zdCBDcHBBcmd1bWVudExpc3QgJiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcy4KLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotUm9vdEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OlJvb3RBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGNvbnN0IFdl
YkFjY2Vzc2liaWxpdHlPYmplY3QgJm9iamVjdCwgRmFjdG9yeSAqZmFjdG9yeSkKLSAgICA6IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQob2JqZWN0LCBmYWN0b3J5KSB7IH0KLQotQWNjZXNzaWJpbGl0
eVVJRWxlbWVudCogUm9vdEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxkQXRJbmRleCh1
bnNpZ25lZCBpbmRleCkKLXsKLSAgICBpZiAoaW5kZXgpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgcmV0dXJuIGZhY3RvcnkoKS0+Z2V0T3JDcmVhdGUoYWNjZXNzaWJpbGl0eU9iamVjdCgpKTsK
LX0KLQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TGlzdCA6On5BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50TGlzdCgpCi17Ci0gICAgY2xlYXIoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50TGlzdDo6Y2xlYXIoKQotewotICAgIGZvciAoRWxlbWVudExpc3Q6Oml0ZXJhdG9yIGkgPSBt
X2VsZW1lbnRzLmJlZ2luKCk7IGkgIT0gbV9lbGVtZW50cy5lbmQoKTsgKytpKQotICAgICAgICBk
ZWxldGUgKCppKTsKLSAgICBtX2VsZW1lbnRzLmNsZWFyKCk7Ci19Ci0KLUFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQqIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnRMaXN0OjpnZXRPckNyZWF0ZShjb25zdCBX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpCi17Ci0gICAgaWYgKG9iamVjdC5pc051bGwo
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBzaXplX3QgZWxlbWVudENvdW50ID0gbV9lbGVt
ZW50cy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbGVtZW50Q291bnQ7IGkr
KykgewotICAgICAgICBpZiAobV9lbGVtZW50c1tpXS0+aXNFcXVhbChvYmplY3QpKQotICAgICAg
ICAgICAgcmV0dXJuIG1fZWxlbWVudHNbaV07Ci0gICAgfQotCi0gICAgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudCogZWxlbWVudCA9IG5ldyBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KG9iamVjdCwgdGhp
cyk7Ci0gICAgbV9lbGVtZW50cy5hcHBlbmQoZWxlbWVudCk7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7
Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnRMaXN0
OjpjcmVhdGVSb290KGNvbnN0IFdlYkFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkKLXsKLSAg
ICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBlbGVtZW50ID0gbmV3IFJvb3RBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50KG9iamVjdCwgdGhpcyk7Ci0gICAgbV9lbGVtZW50cy5hcHBlbmQoZWxlbWVudCk7
Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci19CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaCBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWU2ZDQxMmZmMTlkMWU5ZGIwMzNhOTUz
ZWI2NDAxZDU0N2M4OTkxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnRfaAotI2RlZmluZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50X2gK
LQotI2luY2x1ZGUgIkNwcEJvdW5kQ2xhc3MuaCIKLSNpbmNsdWRlICJXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0LmgiCi0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQot
Y2xhc3MgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCA6IHB1YmxpYyBDcHBCb3VuZENsYXNzIHsKLXB1
YmxpYzoKLSAgICBjbGFzcyBGYWN0b3J5IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwg
fkZhY3RvcnkoKSB7IH0KLSAgICAgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBn
ZXRPckNyZWF0ZShjb25zdCBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3QmKSA9IDA7Ci0g
ICAgfTsKLQotICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoY29uc3QgV2ViS2l0OjpXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0JiwgRmFjdG9yeSopOwotCi0gICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50KiBnZXRDaGlsZEF0SW5kZXgodW5zaWduZWQpOwotICAgIHZpcnR1YWwgYm9vbCBp
c1Jvb3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0VxdWFs
KGNvbnN0IFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVjdCYpOwotCi0gICAgdmlydHVhbCB2
b2lkIG5vdGlmaWNhdGlvblJlY2VpdmVkKGNvbnN0IGNoYXIgKm5vdGlmaWNhdGlvbk5hbWUpOwot
Ci1wcm90ZWN0ZWQ6Ci0gICAgY29uc3QgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiBh
Y2Nlc3NpYmlsaXR5T2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9hY2Nlc3NpYmlsaXR5T2JqZWN0
OyB9Ci0KLSAgICBGYWN0b3J5KiBmYWN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9mYWN0b3J5OyB9
Ci0KLXByaXZhdGU6Ci0gICAgLy8gQm91bmQgcHJvcGVydGllcy4KLSAgICB2b2lkIHJvbGVHZXR0
ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCB0aXRsZUdldHRlckNhbGxiYWNrKENw
cFZhcmlhbnQqKTsKLSAgICB2b2lkIGRlc2NyaXB0aW9uR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFu
dCopOwotICAgIHZvaWQgaGVscFRleHRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAg
dm9pZCBzdHJpbmdWYWx1ZUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHhH
ZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCB5R2V0dGVyQ2FsbGJhY2soQ3Bw
VmFyaWFudCopOwotICAgIHZvaWQgd2lkdGhHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0g
ICAgdm9pZCBoZWlnaHRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBpbnRW
YWx1ZUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIG1pblZhbHVlR2V0dGVy
Q2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZvaWQgbWF4VmFsdWVHZXR0ZXJDYWxsYmFjayhD
cHBWYXJpYW50Kik7Ci0gICAgdm9pZCBjaGlsZHJlbkNvdW50R2V0dGVyQ2FsbGJhY2soQ3BwVmFy
aWFudCopOwotICAgIHZvaWQgaW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyR2V0dGVyQ2FsbGJhY2so
Q3BwVmFyaWFudCopOwotICAgIHZvaWQgc2VsZWN0ZWRUZXh0UmFuZ2VHZXR0ZXJDYWxsYmFjayhD
cHBWYXJpYW50Kik7Ci0gICAgdm9pZCBpc0VuYWJsZWRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50
Kik7Ci0gICAgdm9pZCBpc1JlcXVpcmVkR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAg
IHZvaWQgaXNGb2N1c2VkR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZvaWQgaXNG
b2N1c2FibGVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBpc1NlbGVjdGVk
R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZvaWQgaXNTZWxlY3RhYmxlR2V0dGVy
Q2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZvaWQgaXNNdWx0aVNlbGVjdGFibGVHZXR0ZXJD
YWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBpc1NlbGVjdGVkT3B0aW9uQWN0aXZlR2V0
dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZvaWQgaXNFeHBhbmRlZEdldHRlckNhbGxi
YWNrKENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGlzQ2hlY2tlZEdldHRlckNhbGxiYWNrKENwcFZh
cmlhbnQqKTsKLSAgICB2b2lkIGlzVmlzaWJsZUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsK
LSAgICB2b2lkIGlzT2ZmU2NyZWVuR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZv
aWQgaXNDb2xsYXBzZWRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBoYXNQ
b3B1cEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGlzVmFsaWRHZXR0ZXJD
YWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBvcmllbnRhdGlvbkdldHRlckNhbGxiYWNr
KENwcFZhcmlhbnQqKTsKLQotICAgIC8vIEJvdW5kIG1ldGhvZHMuCi0gICAgdm9pZCBhbGxBdHRy
aWJ1dGVzQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAg
IHZvaWQgYXR0cmlidXRlc09mTGlua2VkVUlFbGVtZW50c0NhbGxiYWNrKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGF0dHJpYnV0ZXNPZkRvY3VtZW50TGlu
a3NDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9p
ZCBhdHRyaWJ1dGVzT2ZDaGlsZHJlbkNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKLSAgICB2b2lkIHBhcmFtZXRyaXplZEF0dHJpYnV0ZU5hbWVzQ2FsbGJhY2so
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgbGluZUZvcklu
ZGV4Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZv
aWQgYm91bmRzRm9yUmFuZ2VDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7Ci0gICAgdm9pZCBzdHJpbmdGb3JSYW5nZUNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGNoaWxkQXRJbmRleENhbGxiYWNrKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGVsZW1lbnRBdFBvaW50
Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQg
YXR0cmlidXRlc09mQ29sdW1uSGVhZGVyc0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGF0dHJpYnV0ZXNPZlJvd0hlYWRlcnNDYWxsYmFjayhj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBhdHRyaWJ1dGVz
T2ZDb2x1bW5zQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwot
ICAgIHZvaWQgYXR0cmlidXRlc09mUm93c0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGF0dHJpYnV0ZXNPZlZpc2libGVDZWxsc0NhbGxiYWNr
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGF0dHJpYnV0
ZXNPZkhlYWRlckNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
LSAgICB2b2lkIGluZGV4SW5UYWJsZUNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKLSAgICB2b2lkIHJvd0luZGV4UmFuZ2VDYWxsYmFjayhjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBjb2x1bW5JbmRleFJhbmdlQ2FsbGJh
Y2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgY2VsbEZv
ckNvbHVtbkFuZFJvd0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
KTsKLSAgICB2b2lkIHRpdGxlVUlFbGVtZW50Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgc2V0U2VsZWN0ZWRUZXh0UmFuZ2VDYWxsYmFjayhj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBhdHRyaWJ1dGVW
YWx1ZUNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2
b2lkIGlzQXR0cmlidXRlU2V0dGFibGVDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7Ci0gICAgdm9pZCBpc0FjdGlvblN1cHBvcnRlZENhbGxiYWNrKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHBhcmVudEVsZW1lbnRDYWxs
YmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBpbmNy
ZW1lbnRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAg
dm9pZCBkZWNyZW1lbnRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7Ci0gICAgdm9pZCBzaG93TWVudUNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKLSAgICB2b2lkIHByZXNzQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgaXNFcXVhbENhbGxiYWNrKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGFkZE5vdGlmaWNhdGlvbkxpc3RlbmVy
Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQg
cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCB0YWtlRm9jdXNDYWxsYmFjayhjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzY3JvbGxUb01ha2VWaXNpYmxlQ2Fs
bGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgc2Ny
b2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1c0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNjcm9sbFRvR2xvYmFsUG9pbnRDYWxsYmFjayhj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICB2b2lkIGZhbGxiYWNr
Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgV2Vi
S2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0IG1fYWNjZXNzaWJpbGl0eU9iamVjdDsKLSAgICBG
YWN0b3J5KiBtX2ZhY3Rvcnk7Ci0gICAgc3RkOjp2ZWN0b3I8Q3BwVmFyaWFudD4gbV9ub3RpZmlj
YXRpb25DYWxsYmFja3M7Ci19OwotCi0KLWNsYXNzIFJvb3RBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
IDogcHVibGljIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgewotcHVibGljOgotICAgIFJvb3RBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50KGNvbnN0IFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVjdCYs
IEZhY3RvcnkqKTsKLQotICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZ2V0Q2hp
bGRBdEluZGV4KHVuc2lnbmVkKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNSb290KCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQotfTsKLQotCi0vLyBQcm92aWRlcyBzaW1wbGUgbGlmZXRpbWUgbWFuYWdl
bWVudCBvZiB0aGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBpbnN0YW5jZXM6Ci0vLyBhbGwgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudHMgZXZlciBjcmVhdGVkIGZyb20gdGhlIGNvbnRyb2xsZXIgYXJl
IHN0b3JlZCBpbgotLy8gYSBsaXN0IGFuZCBjbGVhcmVkIGV4cGxpY2l0bHkuCi1jbGFzcyBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50TGlzdCA6IHB1YmxpYyBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpG
YWN0b3J5IHsKLXB1YmxpYzoKLSAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50TGlzdCgpIHsgfQot
ICAgIHZpcnR1YWwgfkFjY2Vzc2liaWxpdHlVSUVsZW1lbnRMaXN0KCk7Ci0KLSAgICB2b2lkIGNs
ZWFyKCk7Ci0gICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBnZXRPckNyZWF0ZShj
b25zdCBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3QmKTsKLSAgICBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50KiBjcmVhdGVSb290KGNvbnN0IFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVj
dCYpOwotCi1wcml2YXRlOgotICAgIHR5cGVkZWYgVmVjdG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQqPiBFbGVtZW50TGlzdDsKLSAgICBFbGVtZW50TGlzdCBtX2VsZW1lbnRzOwotfTsKLQotI2Vu
ZGlmIC8vIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnRfaApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Q2hyb21p
dW0uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Q2hyb21pdW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM1NmIxNTFlNjVhYWFhOWJh
YzFlOWU5YTE3YTQ4NzlmMjhkZDZiOGYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRDaHJvbWl1
bS5jcHAKQEAgLTAsMCArMSw4NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudENocm9taXVtLmgiCisKKyNpbmNsdWRlICJXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0LmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViQ1N0cmluZy5oIgorI2luY2x1ZGUg
InBsYXRmb3JtL1dlYlBvaW50LmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViUmVjdC5oIgorI2lu
Y2x1ZGUgInBsYXRmb3JtL1dlYlN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2Ugc3RkOworCisvLyBN
YXAgcm9sZSB2YWx1ZSB0byBzdHJpbmcsIG1hdGNoaW5nIFNhZmFyaS9NYWMgcGxhdGZvcm0gaW1w
bGVtZW50YXRpb24gdG8KKy8vIGF2b2lkIHJlYmFzZWxpbmluZyBsYXlvdXQgdGVzdHMuCitzdGF0
aWMgc3RyaW5nIHJvbGVUb1N0cmluZyhXZWJBY2Nlc3NpYmlsaXR5Um9sZSByb2xlKQoreworICAg
IHN0cmluZyByZXN1bHQgPSAiQVhSb2xlOiBBWCI7CisgICAgc3dpdGNoIChyb2xlKSB7CisgICAg
Y2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUJ1dHRvbjoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5h
cHBlbmQoIkJ1dHRvbiIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVSYWRpb0J1dHRv
bjoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlJhZGlvQnV0dG9uIik7CisgICAgY2Fz
ZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUNoZWNrQm94OgorICAgICAgICByZXR1cm4gcmVzdWx0LmFw
cGVuZCgiQ2hlY2tCb3giKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlU2xpZGVyOgor
ICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiU2xpZGVyIik7CisgICAgY2FzZSBXZWJBY2Nl
c3NpYmlsaXR5Um9sZVRhYkdyb3VwOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiVGFi
R3JvdXAiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlVGV4dEZpZWxkOgorICAgICAg
ICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiVGV4dEZpZWxkIik7CisgICAgY2FzZSBXZWJBY2Nlc3Np
YmlsaXR5Um9sZVN0YXRpY1RleHQ6CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJTdGF0
aWNUZXh0Iik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVRleHRBcmVhOgorICAgICAg
ICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiVGV4dEFyZWEiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2li
aWxpdHlSb2xlU2Nyb2xsQXJlYToKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlNjcm9s
bEFyZWEiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlUG9wVXBCdXR0b246CisgICAg
ICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJQb3BVcEJ1dHRvbiIpOworICAgIGNhc2UgV2ViQWNj
ZXNzaWJpbGl0eVJvbGVNZW51QnV0dG9uOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgi
TWVudUJ1dHRvbiIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVUYWJsZToKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlRhYmxlIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmls
aXR5Um9sZUFwcGxpY2F0aW9uOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQXBwbGlj
YXRpb24iKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlR3JvdXA6CisgICAgICAgIHJl
dHVybiByZXN1bHQuYXBwZW5kKCJHcm91cCIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJv
bGVSYWRpb0dyb3VwOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiUmFkaW9Hcm91cCIp
OworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVMaXN0OgorICAgICAgICByZXR1cm4gcmVz
dWx0LmFwcGVuZCgiTGlzdCIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVTY3JvbGxC
YXI6CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJTY3JvbGxCYXIiKTsKKyAgICBjYXNl
IFdlYkFjY2Vzc2liaWxpdHlSb2xlVmFsdWVJbmRpY2F0b3I6CisgICAgICAgIHJldHVybiByZXN1
bHQuYXBwZW5kKCJWYWx1ZUluZGljYXRvciIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJv
bGVJbWFnZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkltYWdlIik7CisgICAgY2Fz
ZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZU1lbnVCYXI6CisgICAgICAgIHJldHVybiByZXN1bHQuYXBw
ZW5kKCJNZW51QmFyIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZU1lbnU6CisgICAg
ICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJNZW51Iik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmls
aXR5Um9sZU1lbnVJdGVtOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiTWVudUl0ZW0i
KTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlQ29sdW1uOgorICAgICAgICByZXR1cm4g
cmVzdWx0LmFwcGVuZCgiQ29sdW1uIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVJv
dzoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlJvdyIpOworICAgIGNhc2UgV2ViQWNj
ZXNzaWJpbGl0eVJvbGVUb29sYmFyOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiVG9v
bGJhciIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVCdXN5SW5kaWNhdG9yOgorICAg
ICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQnVzeUluZGljYXRvciIpOworICAgIGNhc2UgV2Vi
QWNjZXNzaWJpbGl0eVJvbGVQcm9ncmVzc0luZGljYXRvcjoKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dC5hcHBlbmQoIlByb2dyZXNzSW5kaWNhdG9yIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5
Um9sZVdpbmRvdzoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIldpbmRvdyIpOworICAg
IGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVEcmF3ZXI6CisgICAgICAgIHJldHVybiByZXN1bHQu
YXBwZW5kKCJEcmF3ZXIiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlU3lzdGVtV2lk
ZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlN5c3RlbVdpZGUiKTsKKyAgICBjYXNl
IFdlYkFjY2Vzc2liaWxpdHlSb2xlT3V0bGluZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBl
bmQoIk91dGxpbmUiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlSW5jcmVtZW50b3I6
CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJJbmNyZW1lbnRvciIpOworICAgIGNhc2Ug
V2ViQWNjZXNzaWJpbGl0eVJvbGVCcm93c2VyOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVu
ZCgiQnJvd3NlciIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVDb21ib0JveDoKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkNvbWJvQm94Iik7CisgICAgY2FzZSBXZWJBY2Nl
c3NpYmlsaXR5Um9sZVNwbGl0R3JvdXA6CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJT
cGxpdEdyb3VwIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVNwbGl0dGVyOgorICAg
ICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiU3BsaXR0ZXIiKTsKKyAgICBjYXNlIFdlYkFjY2Vz
c2liaWxpdHlSb2xlQ29sb3JXZWxsOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQ29s
b3JXZWxsIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUdyb3dBcmVhOgorICAgICAg
ICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiR3Jvd0FyZWEiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2li
aWxpdHlSb2xlU2hlZXQ6CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJTaGVldCIpOwor
ICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVIZWxwVGFnOgorICAgICAgICByZXR1cm4gcmVz
dWx0LmFwcGVuZCgiSGVscFRhZyIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVNYXR0
ZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIk1hdHRlIik7CisgICAgY2FzZSBXZWJB
Y2Nlc3NpYmlsaXR5Um9sZVJ1bGVyOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiUnVs
ZXIiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlUnVsZXJNYXJrZXI6CisgICAgICAg
IHJldHVybiByZXN1bHQuYXBwZW5kKCJSdWxlck1hcmtlciIpOworICAgIGNhc2UgV2ViQWNjZXNz
aWJpbGl0eVJvbGVMaW5rOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiTGluayIpOwor
ICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVEaXNjbG9zdXJlVHJpYW5nbGU6CisgICAgICAg
IHJldHVybiByZXN1bHQuYXBwZW5kKCJEaXNjbG9zdXJlVHJpYW5nbGUiKTsKKyAgICBjYXNlIFdl
YkFjY2Vzc2liaWxpdHlSb2xlR3JpZDoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkdy
aWQiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlQ2VsbDoKKyAgICAgICAgcmV0dXJu
IHJlc3VsdC5hcHBlbmQoIkNlbGwiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlQ29s
dW1uSGVhZGVyOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQ29sdW1uSGVhZGVyIik7
CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVJvd0hlYWRlcjoKKyAgICAgICAgcmV0dXJu
IHJlc3VsdC5hcHBlbmQoIlJvd0hlYWRlciIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJv
bGVXZWJDb3JlTGluazoKKyAgICAgICAgLy8gTWFwcyB0byBMaW5rIHJvbGUuCisgICAgICAgIHJl
dHVybiByZXN1bHQuYXBwZW5kKCJMaW5rIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9s
ZUltYWdlTWFwTGluazoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkltYWdlTWFwTGlu
ayIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVJbWFnZU1hcDoKKyAgICAgICAgcmV0
dXJuIHJlc3VsdC5hcHBlbmQoIkltYWdlTWFwIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5
Um9sZUxpc3RNYXJrZXI6CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMaXN0TWFya2Vy
Iik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVdlYkFyZWE6CisgICAgICAgIHJldHVy
biByZXN1bHQuYXBwZW5kKCJXZWJBcmVhIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9s
ZUhlYWRpbmc6CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJIZWFkaW5nIik7CisgICAg
Y2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxpc3RCb3g6CisgICAgICAgIHJldHVybiByZXN1bHQu
YXBwZW5kKCJMaXN0Qm94Iik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxpc3RCb3hP
cHRpb246CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMaXN0Qm94T3B0aW9uIik7Cisg
ICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVRhYmxlSGVhZGVyQ29udGFpbmVyOgorICAgICAg
ICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiVGFibGVIZWFkZXJDb250YWluZXIiKTsKKyAgICBjYXNl
IFdlYkFjY2Vzc2liaWxpdHlSb2xlRGVmaW5pdGlvbkxpc3RUZXJtOgorICAgICAgICByZXR1cm4g
cmVzdWx0LmFwcGVuZCgiRGVmaW5pdGlvbkxpc3RUZXJtIik7CisgICAgY2FzZSBXZWJBY2Nlc3Np
YmlsaXR5Um9sZURlZmluaXRpb25MaXN0RGVmaW5pdGlvbjoKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dC5hcHBlbmQoIkRlZmluaXRpb25MaXN0RGVmaW5pdGlvbiIpOworICAgIGNhc2UgV2ViQWNjZXNz
aWJpbGl0eVJvbGVBbm5vdGF0aW9uOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQW5u
b3RhdGlvbiIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVTbGlkZXJUaHVtYjoKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlNsaWRlclRodW1iIik7CisgICAgY2FzZSBXZWJB
Y2Nlc3NpYmlsaXR5Um9sZUxhbmRtYXJrQXBwbGljYXRpb246CisgICAgICAgIHJldHVybiByZXN1
bHQuYXBwZW5kKCJMYW5kbWFya0FwcGxpY2F0aW9uIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmls
aXR5Um9sZUxhbmRtYXJrQmFubmVyOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiTGFu
ZG1hcmtCYW5uZXIiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlTGFuZG1hcmtDb21w
bGVtZW50YXJ5OgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiTGFuZG1hcmtDb21wbGVt
ZW50YXJ5Iik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxhbmRtYXJrQ29udGVudElu
Zm86CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMYW5kbWFya0NvbnRlbnRJbmZvIik7
CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxhbmRtYXJrTWFpbjoKKyAgICAgICAgcmV0
dXJuIHJlc3VsdC5hcHBlbmQoIkxhbmRtYXJrTWFpbiIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJp
bGl0eVJvbGVMYW5kbWFya05hdmlnYXRpb246CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5k
KCJMYW5kbWFya05hdmlnYXRpb24iKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlTGFu
ZG1hcmtTZWFyY2g6CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMYW5kbWFya1NlYXJj
aCIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVBcHBsaWNhdGlvbkxvZzoKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkFwcGxpY2F0aW9uTG9nIik7CisgICAgY2FzZSBXZWJB
Y2Nlc3NpYmlsaXR5Um9sZUFwcGxpY2F0aW9uTWFycXVlZToKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dC5hcHBlbmQoIkFwcGxpY2F0aW9uTWFycXVlZSIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0
eVJvbGVBcHBsaWNhdGlvblN0YXR1czoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkFw
cGxpY2F0aW9uU3RhdHVzIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUFwcGxpY2F0
aW9uVGltZXI6CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJBcHBsaWNhdGlvblRpbWVy
Iik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZURvY3VtZW50OgorICAgICAgICByZXR1
cm4gcmVzdWx0LmFwcGVuZCgiRG9jdW1lbnQiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlS
b2xlRG9jdW1lbnRBcnRpY2xlOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiRG9jdW1l
bnRBcnRpY2xlIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZURvY3VtZW50Tm90ZToK
KyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkRvY3VtZW50Tm90ZSIpOworICAgIGNhc2Ug
V2ViQWNjZXNzaWJpbGl0eVJvbGVEb2N1bWVudFJlZ2lvbjoKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dC5hcHBlbmQoIkRvY3VtZW50UmVnaW9uIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9s
ZVVzZXJJbnRlcmZhY2VUb29sdGlwOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiVXNl
ckludGVyZmFjZVRvb2x0aXAiKTsKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBBbHNvIG1hdGNo
ZXMgV2ViQWNjZXNzaWJpbGl0eVJvbGVVbmtub3duLgorICAgICAgICByZXR1cm4gcmVzdWx0LmFw
cGVuZCgiVW5rbm93biIpOworICAgIH0KK30KKworc3RyaW5nIGdldERlc2NyaXB0aW9uKGNvbnN0
IFdlYkFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkKK3sKKyAgICBzdHJpbmcgZGVzY3JpcHRp
b24gPSBvYmplY3QuYWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkudXRmOCgpOworICAgIHJldHVy
biBkZXNjcmlwdGlvbi5pbnNlcnQoMCwgIkFYRGVzY3JpcHRpb246ICIpOworfQorCitzdHJpbmcg
Z2V0SGVscFRleHQoY29uc3QgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KQoreworICAg
IHN0cmluZyBoZWxwVGV4dCA9IG9iamVjdC5oZWxwVGV4dCgpLnV0ZjgoKTsKKyAgICByZXR1cm4g
aGVscFRleHQuaW5zZXJ0KDAsICJBWEhlbHA6ICIpOworfQorCitzdHJpbmcgZ2V0U3RyaW5nVmFs
dWUoY29uc3QgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KQoreworICAgIHN0cmluZyB2
YWx1ZSA9IG9iamVjdC5zdHJpbmdWYWx1ZSgpLnV0ZjgoKTsKKyAgICByZXR1cm4gdmFsdWUuaW5z
ZXJ0KDAsICJBWFZhbHVlOiAiKTsKK30KKworc3RyaW5nIGdldFJvbGUoY29uc3QgV2ViQWNjZXNz
aWJpbGl0eU9iamVjdCYgb2JqZWN0KQoreworICAgIHJldHVybiByb2xlVG9TdHJpbmcob2JqZWN0
LnJvbGVWYWx1ZSgpKTsKK30KKworc3RyaW5nIGdldFRpdGxlKGNvbnN0IFdlYkFjY2Vzc2liaWxp
dHlPYmplY3QmIG9iamVjdCkKK3sKKyAgICBzdHJpbmcgdGl0bGUgPSBvYmplY3QudGl0bGUoKS51
dGY4KCk7CisgICAgcmV0dXJuIHRpdGxlLmluc2VydCgwLCAiQVhUaXRsZTogIik7Cit9CisKK3N0
cmluZyBnZXRPcmllbnRhdGlvbihjb25zdCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3Qp
Cit7CisgICAgaWYgKG9iamVjdC5pc1ZlcnRpY2FsKCkpCisgICAgICAgIHJldHVybiAiQVhPcmll
bnRhdGlvbjogQVhWZXJ0aWNhbE9yaWVudGF0aW9uIjsKKworICAgIHJldHVybiAiQVhPcmllbnRh
dGlvbjogQVhIb3Jpem9udGFsT3JpZW50YXRpb24iOworfQorCitzdHJpbmcgZ2V0QXR0cmlidXRl
cyhjb25zdCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpCit7CisgICAgLy8gRklYTUU6
IENvbmNhdGVuYXRlIGFsbCBhdHRyaWJ1dGVzIG9mIHRoZSBBY2Nlc3NpYmlsaXR5T2JqZWN0Lgor
ICAgIHN0cmluZyBhdHRyaWJ1dGVzKGdldFRpdGxlKG9iamVjdCkpOworICAgIGF0dHJpYnV0ZXMu
YXBwZW5kKCJcbiIpOworICAgIGF0dHJpYnV0ZXMuYXBwZW5kKGdldFJvbGUob2JqZWN0KSk7Cisg
ICAgYXR0cmlidXRlcy5hcHBlbmQoIlxuIik7CisgICAgYXR0cmlidXRlcy5hcHBlbmQoZ2V0RGVz
Y3JpcHRpb24ob2JqZWN0KSk7CisgICAgcmV0dXJuIGF0dHJpYnV0ZXM7Cit9CisKKworLy8gQ29s
bGVjdHMgYXR0cmlidXRlcyBpbnRvIGEgc3RyaW5nLCBkZWxpbWl0ZWQgYnkgZGFzaGVzLiBVc2Vk
IGJ5IGFsbCBtZXRob2RzCisvLyB0aGF0IG91dHB1dCBsaXN0cyBvZiBhdHRyaWJ1dGVzOiBhdHRy
aWJ1dGVzT2ZMaW5rZWRVSUVsZW1lbnRzQ2FsbGJhY2ssCisvLyBBdHRyaWJ1dGVzT2ZDaGlsZHJl
bkNhbGxiYWNrLCBldGMuCitjbGFzcyBBdHRyaWJ1dGVzQ29sbGVjdG9yIHsKK3B1YmxpYzoKKyAg
ICB2b2lkIGNvbGxlY3RBdHRyaWJ1dGVzKGNvbnN0IFdlYkFjY2Vzc2liaWxpdHlPYmplY3QmIG9i
amVjdCkKKyAgICB7CisgICAgICAgIG1fYXR0cmlidXRlcy5hcHBlbmQoIlxuLS0tLS0tLS0tLS0t
XG4iKTsKKyAgICAgICAgbV9hdHRyaWJ1dGVzLmFwcGVuZChnZXRBdHRyaWJ1dGVzKG9iamVjdCkp
OworICAgIH0KKworICAgIHN0cmluZyBhdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gbV9hdHRy
aWJ1dGVzOyB9CisKK3ByaXZhdGU6CisgICAgc3RyaW5nIG1fYXR0cmlidXRlczsKK307CisKK0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoY29uc3QgV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0LCBGYWN0b3J5KiBmYWN0b3J5KQorICAgIDogbV9hY2Nl
c3NpYmlsaXR5T2JqZWN0KG9iamVjdCkKKyAgICAsIG1fZmFjdG9yeShmYWN0b3J5KQoreworCisg
ICAgQVNTRVJUKGZhY3RvcnkpOworCisgICAgLy8KKyAgICAvLyBQcm9wZXJ0aWVzCisgICAgLy8K
KworICAgIGJpbmRQcm9wZXJ0eSgicm9sZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xl
R2V0dGVyQ2FsbGJhY2spOworICAgIGJpbmRQcm9wZXJ0eSgidGl0bGUiLCAmQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6dGl0bGVHZXR0ZXJDYWxsYmFjayk7CisgICAgYmluZFByb3BlcnR5KCJkZXNj
cmlwdGlvbiIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkZXNjcmlwdGlvbkdldHRlckNhbGxi
YWNrKTsKKyAgICBiaW5kUHJvcGVydHkoImhlbHBUZXh0IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmhlbHBUZXh0R2V0dGVyQ2FsbGJhY2spOworICAgIGJpbmRQcm9wZXJ0eSgic3RyaW5nVmFs
dWUiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nVmFsdWVHZXR0ZXJDYWxsYmFjayk7
CisgICAgYmluZFByb3BlcnR5KCJ4IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnhHZXR0ZXJD
YWxsYmFjayk7CisgICAgYmluZFByb3BlcnR5KCJ5IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnlHZXR0ZXJDYWxsYmFjayk7CisgICAgYmluZFByb3BlcnR5KCJ3aWR0aCIsICZBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojp3aWR0aEdldHRlckNhbGxiYWNrKTsKKyAgICBiaW5kUHJvcGVydHkoImhl
aWdodCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoZWlnaHRHZXR0ZXJDYWxsYmFjayk7Cisg
ICAgYmluZFByb3BlcnR5KCJpbnRWYWx1ZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRW
YWx1ZUdldHRlckNhbGxiYWNrKTsKKyAgICBiaW5kUHJvcGVydHkoIm1pblZhbHVlIiwgJkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6Om1pblZhbHVlR2V0dGVyQ2FsbGJhY2spOworICAgIGJpbmRQcm9w
ZXJ0eSgibWF4VmFsdWUiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bWF4VmFsdWVHZXR0ZXJD
YWxsYmFjayk7CisgICAgYmluZFByb3BlcnR5KCJjaGlsZHJlbkNvdW50IiwgJkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmNoaWxkcmVuQ291bnRHZXR0ZXJDYWxsYmFjayk7CisgICAgYmluZFByb3Bl
cnR5KCJpbnNlcnRpb25Qb2ludExpbmVOdW1iZXIiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyR2V0dGVyQ2FsbGJhY2spOworICAgIGJpbmRQcm9wZXJ0
eSgic2VsZWN0ZWRUZXh0UmFuZ2UiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRU
ZXh0UmFuZ2VHZXR0ZXJDYWxsYmFjayk7CisgICAgYmluZFByb3BlcnR5KCJpc0VuYWJsZWQiLCAm
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNFbmFibGVkR2V0dGVyQ2FsbGJhY2spOworICAgIGJp
bmRQcm9wZXJ0eSgiaXNSZXF1aXJlZCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1JlcXVp
cmVkR2V0dGVyQ2FsbGJhY2spOworICAgIGJpbmRQcm9wZXJ0eSgiaXNGb2N1c2VkIiwgJkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzRm9jdXNlZEdldHRlckNhbGxiYWNrKTsKKyAgICBiaW5kUHJv
cGVydHkoImlzRm9jdXNhYmxlIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRm9jdXNhYmxl
R2V0dGVyQ2FsbGJhY2spOworICAgIGJpbmRQcm9wZXJ0eSgiaXNTZWxlY3RlZCIsICZBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGVkR2V0dGVyQ2FsbGJhY2spOworICAgIGJpbmRQcm9w
ZXJ0eSgiaXNTZWxlY3RhYmxlIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0YWJs
ZUdldHRlckNhbGxiYWNrKTsKKyAgICBiaW5kUHJvcGVydHkoImlzTXVsdGlTZWxlY3RhYmxlIiwg
JkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlTZWxlY3RhYmxlR2V0dGVyQ2FsbGJhY2sp
OworICAgIGJpbmRQcm9wZXJ0eSgiaXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSIsICZBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc1NlbGVjdGVkT3B0aW9uQWN0aXZlR2V0dGVyQ2FsbGJhY2spOworICAg
IGJpbmRQcm9wZXJ0eSgiaXNFeHBhbmRlZCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0V4
cGFuZGVkR2V0dGVyQ2FsbGJhY2spOworICAgIGJpbmRQcm9wZXJ0eSgiaXNDaGVja2VkIiwgJkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQ2hlY2tlZEdldHRlckNhbGxiYWNrKTsKKyAgICBiaW5k
UHJvcGVydHkoImlzVmlzaWJsZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Zpc2libGVH
ZXR0ZXJDYWxsYmFjayk7CisgICAgYmluZFByb3BlcnR5KCJpc09mZlNjcmVlbiIsICZBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojppc09mZlNjcmVlbkdldHRlckNhbGxiYWNrKTsKKyAgICBiaW5kUHJv
cGVydHkoImlzQ29sbGFwc2VkIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQ29sbGFwc2Vk
R2V0dGVyQ2FsbGJhY2spOworICAgIGJpbmRQcm9wZXJ0eSgiaGFzUG9wdXAiLCAmQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aGFzUG9wdXBHZXR0ZXJDYWxsYmFjayk7CisgICAgYmluZFByb3BlcnR5
KCJpc1ZhbGlkIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzVmFsaWRHZXR0ZXJDYWxsYmFj
ayk7CisgICAgYmluZFByb3BlcnR5KCJvcmllbnRhdGlvbiIsICZBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpvcmllbnRhdGlvbkdldHRlckNhbGxiYWNrKTsKKworICAgIC8vCisgICAgLy8gTWV0aG9k
cworICAgIC8vCisKKyAgICBiaW5kTWV0aG9kKCJhbGxBdHRyaWJ1dGVzIiwgJkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmFsbEF0dHJpYnV0ZXNDYWxsYmFjayk7CisgICAgYmluZE1ldGhvZCgiYXR0
cmlidXRlc09mTGlua2VkVUlFbGVtZW50cyIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRy
aWJ1dGVzT2ZMaW5rZWRVSUVsZW1lbnRzQ2FsbGJhY2spOworICAgIGJpbmRNZXRob2QoImF0dHJp
YnV0ZXNPZkRvY3VtZW50TGlua3MiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRl
c09mRG9jdW1lbnRMaW5rc0NhbGxiYWNrKTsKKyAgICBiaW5kTWV0aG9kKCJhdHRyaWJ1dGVzT2ZD
aGlsZHJlbiIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDaGlsZHJlbkNh
bGxiYWNrKTsKKyAgICBiaW5kTWV0aG9kKCJsaW5lRm9ySW5kZXgiLCAmQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6bGluZUZvckluZGV4Q2FsbGJhY2spOworICAgIGJpbmRNZXRob2QoImJvdW5kc0Zv
clJhbmdlIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvdW5kc0ZvclJhbmdlQ2FsbGJhY2sp
OworICAgIGJpbmRNZXRob2QoInN0cmluZ0ZvclJhbmdlIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnN0cmluZ0ZvclJhbmdlQ2FsbGJhY2spOworICAgIGJpbmRNZXRob2QoImNoaWxkQXRJbmRl
eCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjaGlsZEF0SW5kZXhDYWxsYmFjayk7CisgICAg
YmluZE1ldGhvZCgiZWxlbWVudEF0UG9pbnQiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZWxl
bWVudEF0UG9pbnRDYWxsYmFjayk7CisgICAgYmluZE1ldGhvZCgiYXR0cmlidXRlc09mQ29sdW1u
SGVhZGVycyIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5IZWFk
ZXJzQ2FsbGJhY2spOworICAgIGJpbmRNZXRob2QoImF0dHJpYnV0ZXNPZlJvd0hlYWRlcnMiLCAm
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVhZGVyc0NhbGxiYWNrKTsK
KyAgICBiaW5kTWV0aG9kKCJhdHRyaWJ1dGVzT2ZDb2x1bW5zIiwgJkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbnNDYWxsYmFjayk7CisgICAgYmluZE1ldGhvZCgiYXR0
cmlidXRlc09mUm93cyIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dz
Q2FsbGJhY2spOworICAgIGJpbmRNZXRob2QoImF0dHJpYnV0ZXNPZlZpc2libGVDZWxscyIsICZB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZWaXNpYmxlQ2VsbHNDYWxsYmFjayk7
CisgICAgYmluZE1ldGhvZCgiYXR0cmlidXRlc09mSGVhZGVyIiwgJkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZXNPZkhlYWRlckNhbGxiYWNrKTsKKyAgICBiaW5kTWV0aG9kKCJpbmRl
eEluVGFibGUiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5kZXhJblRhYmxlQ2FsbGJhY2sp
OworICAgIGJpbmRNZXRob2QoInJvd0luZGV4UmFuZ2UiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6cm93SW5kZXhSYW5nZUNhbGxiYWNrKTsKKyAgICBiaW5kTWV0aG9kKCJjb2x1bW5JbmRleFJh
bmdlIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbHVtbkluZGV4UmFuZ2VDYWxsYmFjayk7
CisgICAgYmluZE1ldGhvZCgiY2VsbEZvckNvbHVtbkFuZFJvdyIsICZBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpjZWxsRm9yQ29sdW1uQW5kUm93Q2FsbGJhY2spOworICAgIGJpbmRNZXRob2QoInRp
dGxlVUlFbGVtZW50IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlVUlFbGVtZW50Q2Fs
bGJhY2spOworICAgIGJpbmRNZXRob2QoInNldFNlbGVjdGVkVGV4dFJhbmdlIiwgJkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dFJhbmdlQ2FsbGJhY2spOworICAgIGJpbmRN
ZXRob2QoImF0dHJpYnV0ZVZhbHVlIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0
ZVZhbHVlQ2FsbGJhY2spOworICAgIGJpbmRNZXRob2QoImlzQXR0cmlidXRlU2V0dGFibGUiLCAm
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNBdHRyaWJ1dGVTZXR0YWJsZUNhbGxiYWNrKTsKKyAg
ICBiaW5kTWV0aG9kKCJpc0FjdGlvblN1cHBvcnRlZCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc0FjdGlvblN1cHBvcnRlZENhbGxiYWNrKTsKKyAgICBiaW5kTWV0aG9kKCJwYXJlbnRFbGVt
ZW50IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmVudEVsZW1lbnRDYWxsYmFjayk7Cisg
ICAgYmluZE1ldGhvZCgiaW5jcmVtZW50IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluY3Jl
bWVudENhbGxiYWNrKTsKKyAgICBiaW5kTWV0aG9kKCJkZWNyZW1lbnQiLCAmQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6ZGVjcmVtZW50Q2FsbGJhY2spOworICAgIGJpbmRNZXRob2QoInNob3dNZW51
IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNob3dNZW51Q2FsbGJhY2spOworICAgIGJpbmRN
ZXRob2QoInByZXNzIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnByZXNzQ2FsbGJhY2spOwor
ICAgIGJpbmRNZXRob2QoImlzRXF1YWwiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNFcXVh
bENhbGxiYWNrKTsKKyAgICBiaW5kTWV0aG9kKCJhZGROb3RpZmljYXRpb25MaXN0ZW5lciIsICZB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphZGROb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKTsK
KyAgICBiaW5kTWV0aG9kKCJyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lciIsICZBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKTsKKyAgICBi
aW5kTWV0aG9kKCJ0YWtlRm9jdXMiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZUZvY3Vz
Q2FsbGJhY2spOworICAgIGJpbmRNZXRob2QoInNjcm9sbFRvTWFrZVZpc2libGUiLCAmQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZUNhbGxiYWNrKTsKKyAgICBiaW5k
TWV0aG9kKCJzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzIiwgJkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXNDYWxsYmFjayk7CisgICAg
YmluZE1ldGhvZCgic2Nyb2xsVG9HbG9iYWxQb2ludCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpzY3JvbGxUb0dsb2JhbFBvaW50Q2FsbGJhY2spOworCisgICAgYmluZEZhbGxiYWNrTWV0aG9k
KCZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpmYWxsYmFja0NhbGxiYWNrKTsKK30KKworQWNjZXNz
aWJpbGl0eVVJRWxlbWVudCogQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRBdEluZGV4
KHVuc2lnbmVkIGluZGV4KQoreworICAgIHJldHVybiBtX2ZhY3RvcnktPmdldE9yQ3JlYXRlKGFj
Y2Vzc2liaWxpdHlPYmplY3QoKS5jaGlsZEF0KGluZGV4KSk7Cit9CisKK2Jvb2wgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aXNFcXVhbChjb25zdCBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmpl
Y3QmIG90aGVyKQoreworICAgIHJldHVybiBhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuZXF1YWxzKG90
aGVyKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpub3RpZmljYXRpb25SZWNl
aXZlZChjb25zdCBjaGFyKiBub3RpZmljYXRpb25OYW1lKQoreworICAgIHNpemVfdCBjYWxsYmFj
a0NvdW50ID0gbV9ub3RpZmljYXRpb25DYWxsYmFja3Muc2l6ZSgpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY2FsbGJhY2tDb3VudDsgaSsrKSB7CisgICAgICAgIENwcFZhcmlhbnQgbm90
aWZpY2F0aW9uTmFtZUFyZ3VtZW50OworICAgICAgICBub3RpZmljYXRpb25OYW1lQXJndW1lbnQu
c2V0KG5vdGlmaWNhdGlvbk5hbWUpOworICAgICAgICBDcHBWYXJpYW50IGludm9rZVJlc3VsdDsK
KyAgICAgICAgbV9ub3RpZmljYXRpb25DYWxsYmFja3NbaV0uaW52b2tlRGVmYXVsdCgmbm90aWZp
Y2F0aW9uTmFtZUFyZ3VtZW50LCAxLCBpbnZva2VSZXN1bHQpOworICAgIH0KK30KKworLy8KKy8v
IFByb3BlcnRpZXMKKy8vCisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9sZUdldHRl
ckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldChnZXRSb2xl
KGFjY2Vzc2liaWxpdHlPYmplY3QoKSkpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnRpdGxlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3Vs
dC0+c2V0KGdldFRpdGxlKGFjY2Vzc2liaWxpdHlPYmplY3QoKSkpOworfQorCit2b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmRlc2NyaXB0aW9uR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCog
cmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KGdldERlc2NyaXB0aW9uKGFjY2Vzc2liaWxpdHlP
YmplY3QoKSkpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhlbHBUZXh0R2V0
dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KGdldEhl
bHBUZXh0KGFjY2Vzc2liaWxpdHlPYmplY3QoKSkpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnN0cmluZ1ZhbHVlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQor
eworICAgIHJlc3VsdC0+c2V0KGdldFN0cmluZ1ZhbHVlKGFjY2Vzc2liaWxpdHlPYmplY3QoKSkp
OworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnhHZXR0ZXJDYWxsYmFjayhDcHBW
YXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgp
LmJvdW5kaW5nQm94UmVjdCgpLngpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnlHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXQo
YWNjZXNzaWJpbGl0eU9iamVjdCgpLmJvdW5kaW5nQm94UmVjdCgpLnkpOworfQorCit2b2lkIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OndpZHRoR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVz
dWx0KQoreworICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5ib3VuZGluZ0Jv
eFJlY3QoKS53aWR0aCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVpZ2h0
R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KGFj
Y2Vzc2liaWxpdHlPYmplY3QoKS5ib3VuZGluZ0JveFJlY3QoKS5oZWlnaHQpOworfQorCit2b2lk
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmludFZhbHVlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFu
dCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS52YWx1
ZUZvclJhbmdlKCkpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1pblZhbHVl
R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KGFj
Y2Vzc2liaWxpdHlPYmplY3QoKS5taW5WYWx1ZUZvclJhbmdlKCkpOworfQorCit2b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6Om1heFZhbHVlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVz
dWx0KQoreworICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5tYXhWYWx1ZUZv
clJhbmdlKCkpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNoaWxkcmVuQ291
bnRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaW50IGNvdW50ID0g
MTsgLy8gUm9vdCBvYmplY3QgYWx3YXlzIGhhcyBvbmx5IG9uZSBjaGlsZCwgdGhlIFdlYlZpZXcu
CisgICAgaWYgKCFpc1Jvb3QoKSkKKyAgICAgICAgY291bnQgPSBhY2Nlc3NpYmlsaXR5T2JqZWN0
KCkuY2hpbGRDb3VudCgpOworICAgIHJlc3VsdC0+c2V0KGNvdW50KTsKK30KKwordm9pZCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjppbnNlcnRpb25Qb2ludExpbmVOdW1iZXJHZXR0ZXJDYWxsYmFj
ayhDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgV2ViVmVjdG9yPGludD4gbGluZUJyZWFrczsK
KyAgICBhY2Nlc3NpYmlsaXR5T2JqZWN0KCkubGluZUJyZWFrcyhsaW5lQnJlYWtzKTsKKyAgICBp
bnQgY3Vyc29yID0gYWNjZXNzaWJpbGl0eU9iamVjdCgpLnNlbGVjdGlvbkVuZCgpOworICAgIGlu
dCBsaW5lID0gMDsKKyAgICB3aGlsZSAobGluZSA8IHN0YXRpY19jYXN0PGludD4obGluZUJyZWFr
cy5zaXplKCkpICYmIGxpbmVCcmVha3NbbGluZV0gPD0gY3Vyc29yKQorICAgICAgICBsaW5lKys7
CisgICAgcmVzdWx0LT5zZXQobGluZSk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6c2VsZWN0ZWRUZXh0UmFuZ2VHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCit7
CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgIHJlc3VsdC0+c2V0KHN0ZDo6c3Ry
aW5nKCkpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRW5hYmxlZEdldHRl
ckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldChhY2Nlc3Np
YmlsaXR5T2JqZWN0KCkuaXNFbmFibGVkKCkpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmlzUmVxdWlyZWRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCit7Cisg
ICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmlzUmVxdWlyZWQoKSk7Cit9CisK
K3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2VkR2V0dGVyQ2FsbGJhY2soQ3Bw
VmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmplY3Qo
KS5pc0ZvY3VzZWQoKSk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1
c2FibGVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5z
ZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmNhblNldEZvY3VzQXR0cmlidXRlKCkpOworfQorCit2
b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0ZWRHZXR0ZXJDYWxsYmFjayhDcHBW
YXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgp
LmlzU2VsZWN0ZWQoKSk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxl
Y3RhYmxlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+
c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5jYW5TZXRTZWxlY3RlZEF0dHJpYnV0ZSgpKTsKK30K
Kwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpU2VsZWN0YWJsZUdldHRlckNh
bGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldChhY2Nlc3NpYmls
aXR5T2JqZWN0KCkuaXNNdWx0aVNlbGVjdGFibGUoKSk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZUdldHRlckNhbGxiYWNrKENwcFZhcmlh
bnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuaXNT
ZWxlY3RlZE9wdGlvbkFjdGl2ZSgpKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc0V4cGFuZGVkR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJl
c3VsdC0+c2V0KCFhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuaXNDb2xsYXBzZWQoKSk7Cit9CisKK3Zv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDaGVja2VkR2V0dGVyQ2FsbGJhY2soQ3BwVmFy
aWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5p
c0NoZWNrZWQoKSk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNWaXNpYmxl
R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KGFj
Y2Vzc2liaWxpdHlPYmplY3QoKS5pc1Zpc2libGUoKSk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNPZmZTY3JlZW5HZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQp
Cit7CisgICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmlzT2ZmU2NyZWVuKCkp
OworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQ29sbGFwc2VkR2V0dGVyQ2Fs
bGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxp
dHlPYmplY3QoKS5pc0NvbGxhcHNlZCgpKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpoYXNQb3B1cEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBy
ZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuYXJpYUhhc1BvcHVwKCkpOworfQorCit2
b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzVmFsaWRHZXR0ZXJDYWxsYmFjayhDcHBWYXJp
YW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmlz
VmFsaWQoKSk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6b3JpZW50YXRpb25H
ZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXQoZ2V0
T3JpZW50YXRpb24oYWNjZXNzaWJpbGl0eU9iamVjdCgpKSk7Cit9CisKKy8vCisvLyBNZXRob2Rz
CisvLworCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0dHJpYnV0ZXNDYWxsYmFj
ayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVz
dWx0LT5zZXQoZ2V0QXR0cmlidXRlcyhhY2Nlc3NpYmlsaXR5T2JqZWN0KCkpKTsKK30KKwordm9p
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZMaW5rZWRVSUVsZW1lbnRzQ2Fs
bGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAg
IHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0
dHJpYnV0ZXNPZkRvY3VtZW50TGlua3NDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW5DYWxsYmFjayhjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAg
IEF0dHJpYnV0ZXNDb2xsZWN0b3IgY29sbGVjdG9yOworICAgIHVuc2lnbmVkIHNpemUgPSBhY2Nl
c3NpYmlsaXR5T2JqZWN0KCkuY2hpbGRDb3VudCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaXplOyArK2kpCisgICAgICAgIGNvbGxlY3Rvci5jb2xsZWN0QXR0cmlidXRlcyhhY2Nl
c3NpYmlsaXR5T2JqZWN0KCkuY2hpbGRBdChpKSk7CisgICAgcmVzdWx0LT5zZXQoY29sbGVjdG9y
LmF0dHJpYnV0ZXMoKSk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYW1l
dHJpemVkQXR0cmlidXRlTmFtZXNDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6bGluZUZvckluZGV4Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOwor
fQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvdW5kc0ZvclJhbmdlQ2FsbGJhY2so
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0Zv
clJhbmdlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0
KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmNoaWxkQXRJbmRleENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKCFhcmd1bWVudHMuc2l6ZSgpIHx8
ICFhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSkgeworICAgICAgICByZXN1bHQtPnNldE51bGwoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGNo
aWxkID0gZ2V0Q2hpbGRBdEluZGV4KGFyZ3VtZW50c1swXS50b0ludDMyKCkpOworICAgIGlmICgh
Y2hpbGQpIHsKKyAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICByZXN1bHQtPnNldCgqKGNoaWxkLT5nZXRBc0NwcFZhcmlhbnQoKSkpOworfQor
Cit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmVsZW1lbnRBdFBvaW50Q2FsbGJhY2soY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+
c2V0TnVsbCgpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNP
ZkNvbHVtbkhlYWRlcnNDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVhZGVyc0NhbGxiYWNrKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwo
KTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5z
Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQorewor
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmF0dHJpYnV0ZXNPZlJvd3NDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mVmlzaWJsZUNlbGxzQ2FsbGJhY2soY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0
TnVsbCgpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkhl
YWRlckNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkK
K3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjppbmRleEluVGFibGVDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6cm93SW5kZXhSYW5nZUNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30K
Kwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5JbmRleFJhbmdlQ2FsbGJhY2so
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNlbGxGb3JD
b2x1bW5BbmRSb3dDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6dGl0bGVVSUVsZW1lbnRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3Zv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2VDYWxsYmFjayhj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0
LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRl
VmFsdWVDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQp
Cit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNBdHRyaWJ1dGVTZXR0YWJsZUNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXpl
KCkgPCAxICYmICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkgeworICAgICAgICByZXN1bHQtPnNl
dE51bGwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0cmluZyBhdHRyaWJ1dGUg
PSBhcmd1bWVudHNbMF0udG9TdHJpbmcoKTsKKyAgICBib29sIHNldHRhYmxlID0gZmFsc2U7Cisg
ICAgaWYgKGF0dHJpYnV0ZSA9PSAiQVhWYWx1ZSIpCisgICAgICAgIHNldHRhYmxlID0gYWNjZXNz
aWJpbGl0eU9iamVjdCgpLmNhblNldFZhbHVlQXR0cmlidXRlKCk7CisgICAgcmVzdWx0LT5zZXQo
c2V0dGFibGUpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQWN0aW9uU3Vw
cG9ydGVkQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0
KQoreworICAgIC8vIFRoaXMgb25lIG1heSBiZSByZWFsbHkgaGFyZCB0byBpbXBsZW1lbnQuCisg
ICAgLy8gTm90IGV4cG9zZWQgYnkgQWNjZXNzaWJpbGl0eU9iamVjdC4KKyAgICByZXN1bHQtPnNl
dE51bGwoKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJlbnRFbGVtZW50
Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQorewor
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmluY3JlbWVudENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJl
c3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpkZWNyZW1lbnRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6c2hvd01lbnVDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisK
K3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cHJlc3NDYWxsYmFjayhjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgYWNjZXNzaWJpbGl0eU9iamVj
dCgpLnBlcmZvcm1EZWZhdWx0QWN0aW9uKCk7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisK
K3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNFcXVhbENhbGxiYWNrKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFy
Z3VtZW50cy5zaXplKCkgPCAxIHx8ICFhcmd1bWVudHNbMF0uaXNPYmplY3QoKSkgeworICAgICAg
ICByZXN1bHQtPnNldE51bGwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHJlc3Vs
dC0+c2V0KGFyZ3VtZW50c1swXS5pc0VxdWFsKCpnZXRBc0NwcFZhcmlhbnQoKSkpOworfQorCit2
b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJh
Y2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
K3sKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDEgfHwgIWFyZ3VtZW50c1swXS5pc09iamVj
dCgpKSB7CisgICAgICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbV9ub3RpZmljYXRpb25DYWxsYmFja3MucHVzaF9iYWNrKGFyZ3VtZW50c1swXSk7
CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlz
LgorICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnRha2VGb2N1c0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
IHJlc3VsdCkKK3sKKyAgICBhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuc2V0Rm9jdXNlZCh0cnVlKTsK
KyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpzY3JvbGxUb01ha2VWaXNpYmxlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCogcmVzdWx0KQoreworICAgIGFjY2Vzc2liaWxpdHlPYmplY3QoKS5zY3JvbGxUb01h
a2VWaXNpYmxlKCk7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1c0NhbGxiYWNrKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7Cisg
ICAgcmVzdWx0LT5zZXROdWxsKCk7CisKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSA0Cisg
ICAgICAgIHx8ICFhcmd1bWVudHNbMF0uaXNOdW1iZXIoKQorICAgICAgICB8fCAhYXJndW1lbnRz
WzFdLmlzTnVtYmVyKCkKKyAgICAgICAgfHwgIWFyZ3VtZW50c1syXS5pc051bWJlcigpCisgICAg
ICAgIHx8ICFhcmd1bWVudHNbM10uaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aW50IHggPSBhcmd1bWVudHNbMF0udG9JbnQzMigpOworICAgIGludCB5ID0gYXJndW1lbnRzWzFd
LnRvSW50MzIoKTsKKyAgICBpbnQgd2lkdGggPSBhcmd1bWVudHNbMl0udG9JbnQzMigpOworICAg
IGludCBoZWlnaHQgPSBhcmd1bWVudHNbM10udG9JbnQzMigpOworICAgIGFjY2Vzc2liaWxpdHlP
YmplY3QoKS5zY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzKFdlYlJlY3QoeCwgeSwgd2lk
dGgsIGhlaWdodCkpOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvR2xvYmFsUG9pbnRDYWxsYmFjayhjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+
c2V0TnVsbCgpOworCisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gMgorICAgICAgICB8fCAh
YXJndW1lbnRzWzBdLmlzTnVtYmVyKCkKKyAgICAgICAgfHwgIWFyZ3VtZW50c1sxXS5pc051bWJl
cigpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgeCA9IGFyZ3VtZW50c1swXS50b0ludDMy
KCk7CisgICAgaW50IHkgPSBhcmd1bWVudHNbMV0udG9JbnQzMigpOworCisgICAgYWNjZXNzaWJp
bGl0eU9iamVjdCgpLnNjcm9sbFRvR2xvYmFsUG9pbnQoV2ViUG9pbnQoeCwgeSkpOworICAgIHJl
c3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmZhbGxi
YWNrQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0ICYsIENwcFZhcmlhbnQqIHJlc3VsdCkK
K3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgcmVzdWx0LT5zZXROdWxsKCk7
Cit9CisKK1Jvb3RBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpSb290QWNjZXNzaWJpbGl0eVVJRWxl
bWVudChjb25zdCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0ICZvYmplY3QsIEZhY3RvcnkgKmZhY3Rv
cnkpCisgICAgOiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KG9iamVjdCwgZmFjdG9yeSkgeyB9CisK
K0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIFJvb3RBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRD
aGlsZEF0SW5kZXgodW5zaWduZWQgaW5kZXgpCit7CisgICAgaWYgKGluZGV4KQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHJldHVybiBmYWN0b3J5KCktPmdldE9yQ3JlYXRlKGFjY2Vzc2liaWxp
dHlPYmplY3QoKSk7Cit9CisKKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudExpc3QgOjp+QWNjZXNz
aWJpbGl0eVVJRWxlbWVudExpc3QoKQoreworICAgIGNsZWFyKCk7Cit9CisKK3ZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudExpc3Q6OmNsZWFyKCkKK3sKKyAgICBmb3IgKEVsZW1lbnRMaXN0Ojpp
dGVyYXRvciBpID0gbV9lbGVtZW50cy5iZWdpbigpOyBpICE9IG1fZWxlbWVudHMuZW5kKCk7ICsr
aSkKKyAgICAgICAgZGVsZXRlICgqaSk7CisgICAgbV9lbGVtZW50cy5jbGVhcigpOworfQorCitB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50TGlzdDo6Z2V0T3JD
cmVhdGUoY29uc3QgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KQoreworICAgIGlmIChv
YmplY3QuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgc2l6ZV90IGVsZW1lbnRD
b3VudCA9IG1fZWxlbWVudHMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZWxl
bWVudENvdW50OyBpKyspIHsKKyAgICAgICAgaWYgKG1fZWxlbWVudHNbaV0tPmlzRXF1YWwob2Jq
ZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBtX2VsZW1lbnRzW2ldOworICAgIH0KKworICAgIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQqIGVsZW1lbnQgPSBuZXcgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dChvYmplY3QsIHRoaXMpOworICAgIG1fZWxlbWVudHMuYXBwZW5kKGVsZW1lbnQpOworICAgIHJl
dHVybiBlbGVtZW50OworfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50TGlzdDo6Y3JlYXRlUm9vdChjb25zdCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiBv
YmplY3QpCit7CisgICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZWxlbWVudCA9IG5ldyBSb290
QWNjZXNzaWJpbGl0eVVJRWxlbWVudChvYmplY3QsIHRoaXMpOworICAgIG1fZWxlbWVudHMuYXBw
ZW5kKGVsZW1lbnQpOworICAgIHJldHVybiBlbGVtZW50OworfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Q2hyb21pdW0uaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudENocm9taXVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWI0OGE1M2I2MDJlMzgx
ZTRlMTI5MjM1YWQ0MjU0MTVlY2I0MjczNgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eVVJRWxlbWVudENocm9t
aXVtLmgKQEAgLTAsMCArMSwxNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnRDaHJv
bWl1bV9oCisjZGVmaW5lIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnRDaHJvbWl1bV9oCisKKyNpbmNs
dWRlICJDcHBCb3VuZENsYXNzLmgiCisjaW5jbHVkZSAiV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5o
IgorI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK2NsYXNzIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQgOiBwdWJsaWMgQ3BwQm91bmRDbGFzcyB7CitwdWJsaWM6Cisg
ICAgY2xhc3MgRmFjdG9yeSB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5GYWN0b3J5
KCkgeyB9CisgICAgICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZ2V0T3JDcmVh
dGUoY29uc3QgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JikgPSAwOworICAgIH07CisK
KyAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGNvbnN0IFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0
eU9iamVjdCYsIEZhY3RvcnkqKTsKKworICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dCogZ2V0Q2hpbGRBdEluZGV4KHVuc2lnbmVkKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNSb290KCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNFcXVhbChjb25zdCBX
ZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3QmKTsKKworICAgIHZpcnR1YWwgdm9pZCBub3Rp
ZmljYXRpb25SZWNlaXZlZChjb25zdCBjaGFyICpub3RpZmljYXRpb25OYW1lKTsKKworcHJvdGVj
dGVkOgorICAgIGNvbnN0IFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVjdCYgYWNjZXNzaWJp
bGl0eU9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZXNzaWJpbGl0eU9iamVjdDsgfQorCisg
ICAgRmFjdG9yeSogZmFjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fZmFjdG9yeTsgfQorCitwcml2
YXRlOgorICAgIC8vIEJvdW5kIHByb3BlcnRpZXMuCisgICAgdm9pZCByb2xlR2V0dGVyQ2FsbGJh
Y2soQ3BwVmFyaWFudCopOworICAgIHZvaWQgdGl0bGVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50
Kik7CisgICAgdm9pZCBkZXNjcmlwdGlvbkdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKKyAg
ICB2b2lkIGhlbHBUZXh0R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOworICAgIHZvaWQgc3Ry
aW5nVmFsdWVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7CisgICAgdm9pZCB4R2V0dGVyQ2Fs
bGJhY2soQ3BwVmFyaWFudCopOworICAgIHZvaWQgeUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQq
KTsKKyAgICB2b2lkIHdpZHRoR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOworICAgIHZvaWQg
aGVpZ2h0R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOworICAgIHZvaWQgaW50VmFsdWVHZXR0
ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7CisgICAgdm9pZCBtaW5WYWx1ZUdldHRlckNhbGxiYWNr
KENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIG1heFZhbHVlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFu
dCopOworICAgIHZvaWQgY2hpbGRyZW5Db3VudEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsK
KyAgICB2b2lkIGluc2VydGlvblBvaW50TGluZU51bWJlckdldHRlckNhbGxiYWNrKENwcFZhcmlh
bnQqKTsKKyAgICB2b2lkIHNlbGVjdGVkVGV4dFJhbmdlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFu
dCopOworICAgIHZvaWQgaXNFbmFibGVkR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOworICAg
IHZvaWQgaXNSZXF1aXJlZEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGlz
Rm9jdXNlZEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGlzRm9jdXNhYmxl
R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOworICAgIHZvaWQgaXNTZWxlY3RlZEdldHRlckNh
bGxiYWNrKENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGlzU2VsZWN0YWJsZUdldHRlckNhbGxiYWNr
KENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGlzTXVsdGlTZWxlY3RhYmxlR2V0dGVyQ2FsbGJhY2so
Q3BwVmFyaWFudCopOworICAgIHZvaWQgaXNTZWxlY3RlZE9wdGlvbkFjdGl2ZUdldHRlckNhbGxi
YWNrKENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGlzRXhwYW5kZWRHZXR0ZXJDYWxsYmFjayhDcHBW
YXJpYW50Kik7CisgICAgdm9pZCBpc0NoZWNrZWRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7
CisgICAgdm9pZCBpc1Zpc2libGVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7CisgICAgdm9p
ZCBpc09mZlNjcmVlbkdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGlzQ29s
bGFwc2VkR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOworICAgIHZvaWQgaGFzUG9wdXBHZXR0
ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7CisgICAgdm9pZCBpc1ZhbGlkR2V0dGVyQ2FsbGJhY2so
Q3BwVmFyaWFudCopOworICAgIHZvaWQgb3JpZW50YXRpb25HZXR0ZXJDYWxsYmFjayhDcHBWYXJp
YW50Kik7CisKKyAgICAvLyBCb3VuZCBtZXRob2RzLgorICAgIHZvaWQgYWxsQXR0cmlidXRlc0Nh
bGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGF0
dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHNDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBhdHRyaWJ1dGVzT2ZEb2N1bWVudExpbmtzQ2FsbGJh
Y2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgYXR0cmli
dXRlc09mQ2hpbGRyZW5DYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7CisgICAgdm9pZCBwYXJhbWV0cml6ZWRBdHRyaWJ1dGVOYW1lc0NhbGxiYWNrKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGxpbmVGb3JJbmRleENhbGxi
YWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGJvdW5k
c0ZvclJhbmdlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwor
ICAgIHZvaWQgc3RyaW5nRm9yUmFuZ2VDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7CisgICAgdm9pZCBjaGlsZEF0SW5kZXhDYWxsYmFjayhjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBlbGVtZW50QXRQb2ludENhbGxiYWNr
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGF0dHJpYnV0
ZXNPZkNvbHVtbkhlYWRlcnNDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7CisgICAgdm9pZCBhdHRyaWJ1dGVzT2ZSb3dIZWFkZXJzQ2FsbGJhY2soY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgYXR0cmlidXRlc09mQ29sdW1u
c0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lk
IGF0dHJpYnV0ZXNPZlJvd3NDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7CisgICAgdm9pZCBhdHRyaWJ1dGVzT2ZWaXNpYmxlQ2VsbHNDYWxsYmFjayhjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBhdHRyaWJ1dGVzT2ZIZWFk
ZXJDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9p
ZCBpbmRleEluVGFibGVDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7CisgICAgdm9pZCByb3dJbmRleFJhbmdlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgY29sdW1uSW5kZXhSYW5nZUNhbGxiYWNrKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGNlbGxGb3JDb2x1bW5B
bmRSb3dDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAg
dm9pZCB0aXRsZVVJRWxlbWVudENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKKyAgICB2b2lkIHNldFNlbGVjdGVkVGV4dFJhbmdlQ2FsbGJhY2soY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgYXR0cmlidXRlVmFsdWVDYWxs
YmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBpc0F0
dHJpYnV0ZVNldHRhYmxlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOworICAgIHZvaWQgaXNBY3Rpb25TdXBwb3J0ZWRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBwYXJlbnRFbGVtZW50Q2FsbGJhY2soY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgaW5jcmVtZW50Q2Fs
bGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgZGVj
cmVtZW50Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAg
IHZvaWQgc2hvd01lbnVDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7CisgICAgdm9pZCBwcmVzc0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKKyAgICB2b2lkIGlzRXF1YWxDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBhZGROb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNr
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHJlbW92ZU5v
dGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOworICAgIHZvaWQgdGFrZUZvY3VzQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgc2Nyb2xsVG9NYWtlVmlzaWJsZUNhbGxiYWNrKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHNjcm9sbFRvTWFr
ZVZpc2libGVXaXRoU3ViRm9jdXNDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50Kik7CisgICAgdm9pZCBzY3JvbGxUb0dsb2JhbFBvaW50Q2FsbGJhY2soY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgdm9pZCBmYWxsYmFja0NhbGxiYWNr
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIFdlYktpdDo6V2Vi
QWNjZXNzaWJpbGl0eU9iamVjdCBtX2FjY2Vzc2liaWxpdHlPYmplY3Q7CisgICAgRmFjdG9yeSog
bV9mYWN0b3J5OworICAgIHN0ZDo6dmVjdG9yPENwcFZhcmlhbnQ+IG1fbm90aWZpY2F0aW9uQ2Fs
bGJhY2tzOworfTsKKworCitjbGFzcyBSb290QWNjZXNzaWJpbGl0eVVJRWxlbWVudCA6IHB1Ymxp
YyBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IHsKK3B1YmxpYzoKKyAgICBSb290QWNjZXNzaWJpbGl0
eVVJRWxlbWVudChjb25zdCBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3QmLCBGYWN0b3J5
Kik7CisKKyAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGdldENoaWxkQXRJbmRl
eCh1bnNpZ25lZCk7CisgICAgdmlydHVhbCBib29sIGlzUm9vdCgpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KK307CisKKworLy8gUHJvdmlkZXMgc2ltcGxlIGxpZmV0aW1lIG1hbmFnZW1lbnQgb2Yg
dGhlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgaW5zdGFuY2VzOgorLy8gYWxsIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnRzIGV2ZXIgY3JlYXRlZCBmcm9tIHRoZSBjb250cm9sbGVyIGFyZSBzdG9yZWQg
aW4KKy8vIGEgbGlzdCBhbmQgY2xlYXJlZCBleHBsaWNpdGx5LgorY2xhc3MgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudExpc3QgOiBwdWJsaWMgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6RmFjdG9yeSB7
CitwdWJsaWM6CisgICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudExpc3QoKSB7IH0KKyAgICB2aXJ0
dWFsIH5BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TGlzdCgpOworCisgICAgdm9pZCBjbGVhcigpOwor
ICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZ2V0T3JDcmVhdGUoY29uc3QgV2Vi
S2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0Jik7CisgICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dCogY3JlYXRlUm9vdChjb25zdCBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3QmKTsKKwor
cHJpdmF0ZToKKyAgICB0eXBlZGVmIFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Kj4gRWxl
bWVudExpc3Q7CisgICAgRWxlbWVudExpc3QgbV9lbGVtZW50czsKK307CisKKyNlbmRpZiAvLyBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Q2hyb21pdW1faApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9UZXN0SW50ZXJmYWNlcy5jcHAgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL1Rlc3RJbnRlcmZhY2VzLmNwcAppbmRl
eCA2YzIzYTI4NzM5YzY1MjFiNGExNmE3MjZjOWVkYzAzM2JkMTYwNWUwLi5jY2VjMDg2YWE1YWY2
NmQwNjUxNGE1MTVlNmFiNWQ3Yjc4ZjZmODFlIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL1Rlc3RJbnRlcmZhY2VzLmNwcAorKysgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL1Rlc3RJbnRlcmZhY2VzLmNwcApAQCAt
MzEsNyArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RJbnRlcmZh
Y2VzLmgiCiAKLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIgorI2luY2x1ZGUg
IkFjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJFdmVudFNlbmRl
ci5oIgogI2luY2x1ZGUgIkdhbWVwYWRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVGV4dElucHV0
Q29udHJvbGxlci5oIgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFNoZWxsLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5j
cHAKaW5kZXggZjEyMmUxZDJiZWUzMmE1NDExNWEzMzNlYWYwYmRlYjY5Y2VlYmFkYy4uZTUzYTFm
MmQ4NzYzZjA2NDRjYzNiNjA3ZjYxMzk3Y2JmNmZlZWIyNSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCkBAIC0xMDYsNiArMTA2LDcgQEAgVGVzdFNoZWxs
OjpUZXN0U2hlbGwoKQogICAgICwgbV90ZXN0SXNQcmVwYXJpbmcoZmFsc2UpCiAgICAgLCBtX2Zv
Y3VzZWRXaWRnZXQoMCkKICAgICAsIG1fZGV2VG9vbHMoMCkKKyAgICAsIG1fZHVtcFBpeGVsc0Zv
ckN1cnJlbnRUZXN0KGZhbHNlKQogICAgICwgbV9hbGxvd0V4dGVybmFsUGFnZXMoZmFsc2UpCiAg
ICAgLCBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JWaWRlb0VuYWJsZWQoZmFsc2UpCiAgICAg
LCBtX3RocmVhZGVkQ29tcG9zaXRpbmdFbmFibGVkKGZhbHNlKQpAQCAtMjMyLDEzICsyMzMsMTYg
QEAgdm9pZCBUZXN0U2hlbGw6OnJlc2V0V2ViU2V0dGluZ3MoV2ViVmlldyYgd2ViVmlldykKICAg
ICBtX3ByZWZzLmFwcGx5VG8oJndlYlZpZXcpOwogfQogCi12b2lkIFRlc3RTaGVsbDo6cnVuRmls
ZVRlc3QoY29uc3QgVGVzdFBhcmFtcyYgcGFyYW1zKQordm9pZCBUZXN0U2hlbGw6OnJ1bkZpbGVU
ZXN0KGNvbnN0IFRlc3RQYXJhbXMmIHBhcmFtcywgYm9vbCBzaG91bGREdW1wUGl4ZWxzKQogewog
ICAgIEFTU0VSVChwYXJhbXMudGVzdFVybC5pc1ZhbGlkKCkpOworICAgIG1fZHVtcFBpeGVsc0Zv
ckN1cnJlbnRUZXN0ID0gc2hvdWxkRHVtcFBpeGVsczsKICAgICBtX3Rlc3RJc1ByZXBhcmluZyA9
IHRydWU7CiAgICAgbV9wYXJhbXMgPSBwYXJhbXM7CiAgICAgc3RyaW5nIHRlc3RVcmwgPSBtX3Bh
cmFtcy50ZXN0VXJsLnNwZWMoKTsKIAorICAgIG1fbGF5b3V0VGVzdENvbnRyb2xsZXItPnNldFNo
b3VsZEdlbmVyYXRlUGl4ZWxSZXN1bHRzKHNob3VsZER1bXBQaXhlbHMpOworCiAgICAgaWYgKHRl
c3RVcmwuZmluZCgibG9hZGluZy8iKSAhPSBzdHJpbmc6Om5wb3MKICAgICAgICAgfHwgdGVzdFVy
bC5maW5kKCJsb2FkaW5nXFwiKSAhPSBzdHJpbmc6Om5wb3MpCiAgICAgICAgIG1fbGF5b3V0VGVz
dENvbnRyb2xsZXItPnNldFNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3ModHJ1ZSk7CkBAIC02
MDMsNyArNjA3LDcgQEAgdm9pZCBUZXN0U2hlbGw6OmR1bXAoKQogICAgIGlmIChkdW1wZWRBbnl0
aGluZyAmJiBtX3BhcmFtcy5wcmludFNlcGFyYXRvcnMpCiAgICAgICAgIG1fcHJpbnRlci5oYW5k
bGVUZXh0Rm9vdGVyKCk7CiAKLSAgICBpZiAobV9wYXJhbXMuZHVtcFBpeGVscyAmJiBzaG91bGRH
ZW5lcmF0ZVBpeGVsUmVzdWx0cykgeworICAgIGlmIChtX2R1bXBQaXhlbHNGb3JDdXJyZW50VGVz
dCAmJiBzaG91bGRHZW5lcmF0ZVBpeGVsUmVzdWx0cykgewogICAgICAgICAvLyBJbWFnZSBvdXRw
dXQ6IHdlIHdyaXRlIHRoZSBpbWFnZSBkYXRhIHRvIHRoZSBmaWxlIGdpdmVuIG9uIHRoZQogICAg
ICAgICAvLyBjb21tYW5kIGxpbmUgKGZvciB0aGUgZHVtcCBwaXhlbHMgYXJndW1lbnQpLCBhbmQg
dGhlIE1ENSBzdW0gdG8KICAgICAgICAgLy8gc3Rkb3V0LgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0U2hlbGwuaAppbmRleCBkYmZjMWQxYzlhMTNiMWNjYzFlZDhjZjRhZThiZjk4
ZmViNjFiOTQyLi4wMDVkMzc0YTI5YTYxYzUwZTBjNzE1YzllYjNmM2M4NTNiMDg4MzM4IDEwMDY0
NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaAorKysgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaApAQCAtMzEsNyArMzEsNyBA
QAogI2lmbmRlZiBUZXN0U2hlbGxfaAogI2RlZmluZSBUZXN0U2hlbGxfaAogCi0jaW5jbHVkZSAi
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Q29udHJv
bGxlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiR2FtZXBhZENvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIk5vdGlmaWNhdGlvblByZXNlbnRl
ci5oIgpAQCAtNjMsNyArNjMsNiBAQCBjbGFzcyBXZWJQZXJtaXNzaW9uczsKIAogc3RydWN0IFRl
c3RQYXJhbXMgewogICAgIGJvb2wgZHVtcFRyZWU7Ci0gICAgYm9vbCBkdW1wUGl4ZWxzOwogICAg
IGJvb2wgZGVidWdSZW5kZXJUcmVlOwogICAgIGJvb2wgZGVidWdMYXllclRyZWU7CiAgICAgYm9v
bCBwcmludFNlcGFyYXRvcnM7CkBAIC03Miw3ICs3MSw2IEBAIHN0cnVjdCBUZXN0UGFyYW1zIHsK
IAogICAgIFRlc3RQYXJhbXMoKQogICAgICAgICA6IGR1bXBUcmVlKHRydWUpCi0gICAgICAgICwg
ZHVtcFBpeGVscyhmYWxzZSkKICAgICAgICAgLCBkZWJ1Z1JlbmRlclRyZWUoZmFsc2UpCiAgICAg
ICAgICwgZGVidWdMYXllclRyZWUoZmFsc2UpCiAgICAgICAgICwgcHJpbnRTZXBhcmF0b3JzKGZh
bHNlKSB7IH0KQEAgLTEwMyw3ICsxMDEsNyBAQCBwdWJsaWM6CiAgICAgV2ViUGVybWlzc2lvbnMq
IHdlYlBlcm1pc3Npb25zKCkgeyByZXR1cm4gbV93ZWJQZXJtaXNzaW9ucy5nZXQoKTsgfQogCiAg
ICAgdm9pZCBiaW5kSlNPYmplY3RzVG9XaW5kb3coV2ViS2l0OjpXZWJGcmFtZSopOwotICAgIHZv
aWQgcnVuRmlsZVRlc3QoY29uc3QgVGVzdFBhcmFtcyYpOworICAgIHZvaWQgcnVuRmlsZVRlc3Qo
Y29uc3QgVGVzdFBhcmFtcyYsIGJvb2wgc2hvdWxkRHVtcFBpeGVsVGVzdHMpOwogICAgIHZvaWQg
Y2FsbEpTR0MoKTsKICAgICB2b2lkIHJlc2V0VGVzdENvbnRyb2xsZXIoKTsKICAgICB2b2lkIHdh
aXRUZXN0RmluaXNoZWQoKTsKQEAgLTIyNCw2ICsyMjIsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAK
ICAgICBUZXN0UGFyYW1zIG1fcGFyYW1zOworICAgIGJvb2wgbV9kdW1wUGl4ZWxzRm9yQ3VycmVu
dFRlc3Q7CiAgICAgaW50IG1fdGltZW91dDsgLy8gdGltZW91dCB2YWx1ZSBpbiBtaWxsaXNlY29u
ZAogICAgIGJvb2wgbV9hbGxvd0V4dGVybmFsUGFnZXM7CiAgICAgYm9vbCBtX2FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdGb3JWaWRlb0VuYWJsZWQ7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9lZmwvQ01ha2VMaXN0cy50eHQgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VM
aXN0cy50eHQKaW5kZXggZTFkYWNmOTAxYmEwNjI1YTVhMWU4MDdlYzZiOTQ1MzQzNDk4NGNhYS4u
MDY3ZGJkMzJiN2FhOTFmNWE1NDdjYjdiZTU3ZmY0YmRmNTk5OTMyOSAxMDA2NDQKLS0tIGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvZWZsL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4dApAQCAtMSw0ICsxLDUgQEAKIFNFVChEdW1wUmVuZGVy
VHJlZV9TT1VSQ0VTCisgICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJU
cmVlQ29tbW9uLmNwcAogICAgICR7VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJlZS9DeWNsaWNSZWR1
bmRhbmN5Q2hlY2suY3BwCiAgICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL0dDQ29udHJv
bGxlci5jcHAKICAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRy
b2xsZXIuY3BwCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRl
clRyZWUuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlLmNwcApp
bmRleCBkNjI1NWZkYzk5NzkzZDdhODA5MzRkZjI3M2JhODZmMDQzZmNmOTA3Li45YTQ3ZTQ0OGZi
N2YyYzA4YzE4MDA4MGE3NTFkNjgxMDYxNGNkNmZiIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2VmbC9EdW1wUmVuZGVyVHJlZS5jcHAKQEAgLTY1LDcgKzY1LDcgQEAgZXh0ZXJuIEV3a19IaXN0
b3J5X0l0ZW0qIHByZXZUZXN0QkZJdGVtOwogUmVmUHRyPExheW91dFRlc3RDb250cm9sbGVyPiBn
TGF5b3V0VGVzdENvbnRyb2xsZXI7CiB2b2xhdGlsZSBib29sIGRvbmUgPSBmYWxzZTsKIAotc3Rh
dGljIGludCBkdW1wUGl4ZWxzID0gZmFsc2U7CitzdGF0aWMgYm9vbCBkdW1wUGl4ZWxzRm9yQ3Vy
cmVudFRlc3Q7CiBzdGF0aWMgaW50IGR1bXBUcmVlID0gdHJ1ZTsKIHN0YXRpYyBpbnQgcHJpbnRT
ZXBhcmF0b3JzID0gdHJ1ZTsKIHN0YXRpYyBpbnQgdXNlWDExV2luZG93ID0gZmFsc2U7CkBAIC0x
OTMsNyArMTkzLDYgQEAgc3RhdGljIGJvb2wgcGFyc2VDb21tYW5kTGluZU9wdGlvbnMoaW50IGFy
Z2MsIGNoYXIqKiBhcmd2KQogewogICAgIHN0YXRpYyBjb25zdCBvcHRpb24gb3B0aW9uc1tdID0g
ewogICAgICAgICB7Im5vdHJlZSIsIG5vX2FyZ3VtZW50LCAmZHVtcFRyZWUsIGZhbHNlfSwKLSAg
ICAgICAgeyJwaXhlbC10ZXN0cyIsIG5vX2FyZ3VtZW50LCAmZHVtcFBpeGVscywgdHJ1ZX0sCiAg
ICAgICAgIHsidHJlZSIsIG5vX2FyZ3VtZW50LCAmZHVtcFRyZWUsIHRydWV9LAogICAgICAgICB7
Imd1aSIsIG5vX2FyZ3VtZW50LCAmdXNlWDExV2luZG93LCB0cnVlfSwKICAgICAgICAgezAsIDAs
IDAsIDB9CkBAIC0yMTEsMzIgKzIxMCw2IEBAIHN0YXRpYyBib29sIHBhcnNlQ29tbWFuZExpbmVP
cHRpb25zKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3Rh
dGljIFN0cmluZyBnZXRGaW5hbFRlc3RVUkwoY29uc3QgU3RyaW5nJiB0ZXN0VVJMKQotewotICAg
IGNvbnN0IHNpemVfdCBoYXNoU2VwYXJhdG9yUG9zID0gdGVzdFVSTC5maW5kKCInIik7Ci0gICAg
aWYgKGhhc2hTZXBhcmF0b3JQb3MgIT0gbm90Rm91bmQpCi0gICAgICAgIHJldHVybiBnZXRGaW5h
bFRlc3RVUkwodGVzdFVSTC5sZWZ0KGhhc2hTZXBhcmF0b3JQb3MpKTsKLQotICAgIC8vIENvbnZl
cnQgdGhlIHBhdGggaW50byBhIGZ1bGwgZmlsZSBVUkwgaWYgaXQgZG9lcyBub3QgbG9vawotICAg
IC8vIGxpa2UgYW4gSFRUUC9TIFVSTCAoZG9lc24ndCBzdGFydCB3aXRoIGh0dHA6Ly8gb3IgaHR0
cHM6Ly8pLgotICAgIGlmICghdGVzdFVSTC5zdGFydHNXaXRoKCJodHRwOi8vIikgJiYgIXRlc3RV
Ukwuc3RhcnRzV2l0aCgiaHR0cHM6Ly8iKSkgewotICAgICAgICBjaGFyKiBjRmlsZVBhdGggPSBl
Y29yZV9maWxlX3JlYWxwYXRoKHRlc3RVUkwudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGNvbnN0
IFN0cmluZyBmaWxlUGF0aCA9IFN0cmluZzo6ZnJvbVVURjgoY0ZpbGVQYXRoKTsKLSAgICAgICAg
ZnJlZShjRmlsZVBhdGgpOwotCi0gICAgICAgIGlmIChlY29yZV9maWxlX2V4aXN0cyhmaWxlUGF0
aC51dGY4KCkuZGF0YSgpKSkKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmcoImZpbGU6Ly8iKSAr
IGZpbGVQYXRoOwotICAgIH0KLQotICAgIHJldHVybiB0ZXN0VVJMOwotfQotCi1zdGF0aWMgU3Ry
aW5nIGdldEV4cGVjdGVkUGl4ZWxIYXNoKGNvbnN0IFN0cmluZyYgdGVzdFVSTCkKLXsKLSAgICBj
b25zdCBzaXplX3QgaGFzaFNlcGFyYXRvclBvcyA9IHRlc3RVUkwuZmluZCgiJyIpOwotICAgIHJl
dHVybiAoaGFzaFNlcGFyYXRvclBvcyAhPSBub3RGb3VuZCkgPyB0ZXN0VVJMLnN1YnN0cmluZyho
YXNoU2VwYXJhdG9yUG9zICsgMSkgOiBTdHJpbmcoKTsKLX0KLQogc3RhdGljIGlubGluZSBib29s
IGlzR2xvYmFsSGlzdG9yeVRlc3QoY29uc3QgU3RyaW5nJiBjVGVzdFBhdGhPclVSTCkKIHsKICAg
ICByZXR1cm4gY1Rlc3RQYXRoT3JVUkwuY29udGFpbnMoIi9nbG9iYWxoaXN0b3J5LyIpOwpAQCAt
MjY4LDEzICsyNDEsMTMgQEAgc3RhdGljIHZvaWQgY3JlYXRlTGF5b3V0VGVzdENvbnRyb2xsZXIo
Y29uc3QgU3RyaW5nJiB0ZXN0VVJMLCBjb25zdCBTdHJpbmcmIGV4cGUKICAgICB9CiB9CiAKLXN0
YXRpYyB2b2lkIHJ1blRlc3QoY29uc3QgY2hhciogY1Rlc3RQYXRoT3JVUkwpCitzdGF0aWMgdm9p
ZCBydW5UZXN0KGNvbnN0IGNoYXIqIGlucHV0TGluZSkKIHsKLSAgICBjb25zdCBTdHJpbmcgdGVz
dFBhdGhPclVSTCA9IFN0cmluZzo6ZnJvbVVURjgoY1Rlc3RQYXRoT3JVUkwpOwotICAgIEFTU0VS
VCghdGVzdFBhdGhPclVSTC5pc0VtcHR5KCkpOwotCi0gICAgY29uc3QgU3RyaW5nIHRlc3RVUkwg
PSBnZXRGaW5hbFRlc3RVUkwodGVzdFBhdGhPclVSTCk7Ci0gICAgY29uc3QgU3RyaW5nIGV4cGVj
dGVkUGl4ZWxIYXNoID0gZ2V0RXhwZWN0ZWRQaXhlbEhhc2godGVzdFBhdGhPclVSTCk7CisgICAg
VGVzdENvbW1hbmQgY29tbWFuZCA9IHBhcnNlSW5wdXRMaW5lKGlucHV0TGluZSk7CisgICAgY29u
c3QgU3RyaW5nIHRlc3RVUkwoY29tbWFuZC5wYXRoT3JVUkwuY19zdHIoKSk7CisgICAgQVNTRVJU
KCF0ZXN0VVJMLmlzRW1wdHkoKSk7CisgICAgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gY29t
bWFuZC5zaG91bGREdW1wUGl4ZWxzOworICAgIGNvbnN0IFN0cmluZyBleHBlY3RlZFBpeGVsSGFz
aChjb21tYW5kLmV4cGVjdGVkUGl4ZWxIYXNoLmNfc3RyKCkpOwogCiAgICAgYnJvd3Nlci0+cmVz
ZXREZWZhdWx0c1RvQ29uc2lzdGVudFZhbHVlcygpOwogICAgIGNyZWF0ZUxheW91dFRlc3RDb250
cm9sbGVyKHRlc3RVUkwsIGV4cGVjdGVkUGl4ZWxIYXNoKTsKQEAgLTM1Miw3ICszMjUsNyBAQCBz
dGF0aWMgYm9vbCBzaG91bGREdW1wRnJhbWVTY3JvbGxQb3NpdGlvbigpCiAKIHN0YXRpYyBib29s
IHNob3VsZER1bXBQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKCkKIHsKLSAgICByZXR1cm4g
ZHVtcFBpeGVscyAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmdlbmVyYXRlUGl4ZWxSZXN1bHRz
KCkgJiYgIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcERPTUFzV2ViQXJjaGl2ZSgpICYmICFn
TGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBTb3VyY2VBc1dlYkFyY2hpdmUoKTsKKyAgICByZXR1
cm4gZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+Z2Vu
ZXJhdGVQaXhlbFJlc3VsdHMoKSAmJiAhZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRE9NQXNX
ZWJBcmNoaXZlKCkgJiYgIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcFNvdXJjZUFzV2ViQXJj
aGl2ZSgpOwogfQogCiBzdGF0aWMgYm9vbCBzaG91bGREdW1wQmFja0ZvcndhcmRMaXN0KCkKQEAg
LTQ2MSw3ICs0MzQsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAg
IHByaW50U2VwYXJhdG9ycyA9IHRydWU7CiAgICAgICAgIHJ1blRlc3RpbmdTZXJ2ZXJMb29wKCk7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnRTZXBhcmF0b3JzID0gKG9wdGluZCA8IGFyZ2Mg
LSAxIHx8IChkdW1wUGl4ZWxzICYmIGR1bXBUcmVlKSk7CisgICAgICAgIHByaW50U2VwYXJhdG9y
cyA9IChvcHRpbmQgPCBhcmdjIC0gMSB8fCAoZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ICYmIGR1
bXBUcmVlKSk7CiAgICAgICAgIGZvciAoaW50IGkgPSBvcHRpbmQ7IGkgIT0gYXJnYzsgKytpKQog
ICAgICAgICAgICAgcnVuVGVzdChhcmd2W2ldKTsKICAgICB9CmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvZ3RrL0R1bXBSZW5kZXJUcmVlLmNwcAppbmRleCA1N2NkMDU5MTdlODIyNTU4YjQ4Mzc2ZTAx
MDJkODAwYTZiY2ZjY2RhLi5lYmRhNWNmYjIzMTg5ZmMyYTc5NWM0Yzk4MDVlMGJjYmVhZjVjZjg3
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWUuY3Bw
CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAKQEAgLTcz
LDcgKzczLDcgQEAgZXh0ZXJuIGdjaGFyKiB3ZWJraXRfd2ViX2ZyYW1lX2dldF9yZXNwb25zZV9t
aW1lX3R5cGUoV2ViS2l0V2ViRnJhbWUqIGZyYW1lKTsKIAogdm9sYXRpbGUgYm9vbCBkb25lOwog
c3RhdGljIGJvb2wgcHJpbnRTZXBhcmF0b3JzOwotc3RhdGljIGludCBkdW1wUGl4ZWxzOworc3Rh
dGljIGJvb2wgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0Owogc3RhdGljIGludCBkdW1wVHJlZSA9
IDE7CiBzdGF0aWMgaW50IHVzZVRpbWVvdXRXYXRjaGRvZyA9IDE7CiAKQEAgLTU0NCw3ICs1NDQs
NiBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplR2xvYmFsc0Zyb21Db21tYW5kTGluZU9wdGlvbnMo
aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKICAgICBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9
IHsKICAgICAgICAgeyJub3RyZWUiLCBub19hcmd1bWVudCwgJmR1bXBUcmVlLCBmYWxzZX0sCi0g
ICAgICAgIHsicGl4ZWwtdGVzdHMiLCBub19hcmd1bWVudCwgJmR1bXBQaXhlbHMsIHRydWV9LAog
ICAgICAgICB7InRyZWUiLCBub19hcmd1bWVudCwgJmR1bXBUcmVlLCB0cnVlfSwKICAgICAgICAg
eyJuby10aW1lb3V0Iiwgbm9fYXJndW1lbnQsICZ1c2VUaW1lb3V0V2F0Y2hkb2csIGZhbHNlfSwK
ICAgICAgICAge05VTEwsIDAsIE5VTEwsIDB9CkBAIC02MjQsNyArNjIzLDcgQEAgdm9pZCBkdW1w
KCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChkdW1wUGl4ZWxzCisgICAgaWYgKGR1bXBQ
aXhlbHNGb3JDdXJyZW50VGVzdAogICAgICAmJiBnTGF5b3V0VGVzdENvbnRyb2xsZXItPmdlbmVy
YXRlUGl4ZWxSZXN1bHRzKCkKICAgICAgJiYgIWdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcERP
TUFzV2ViQXJjaGl2ZSgpCiAgICAgICYmICFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBTb3Vy
Y2VBc1dlYkFyY2hpdmUoKSkgewpAQCAtNjg3LDE4ICs2ODYsMTMgQEAgc3RhdGljIHZvaWQgc2Vu
ZFBpeGVsUmVzdWx0c0VPRigpCiAgICAgZmZsdXNoKHN0ZGVycik7CiB9CiAKLXN0YXRpYyB2b2lk
IHJ1blRlc3QoY29uc3Qgc3RyaW5nJiB0ZXN0UGF0aE9yVVJMKQorc3RhdGljIHZvaWQgcnVuVGVz
dChjb25zdCBzdHJpbmcmIGlucHV0TGluZSkKIHsKICAgICBBU1NFUlQoIXRlc3RQYXRoT3JVUkwu
ZW1wdHkoKSk7CiAKLSAgICAvLyBMb29rIGZvciAiJyIgYXMgYSBzZXBhcmF0b3IgYmV0d2VlbiB0
aGUgcGF0aCBvciBVUkwsIGFuZCB0aGUgcGl4ZWwgZHVtcCBoYXNoIHRoYXQgZm9sbG93cy4KLSAg
ICBzdHJpbmcgdGVzdFVSTCh0ZXN0UGF0aE9yVVJMKTsKLSAgICBzdHJpbmcgZXhwZWN0ZWRQaXhl
bEhhc2g7Ci0gICAgc2l6ZV90IHNlcGFyYXRvclBvcyA9IHRlc3RVUkwuZmluZCgiJyIpOwotICAg
IGlmIChzZXBhcmF0b3JQb3MgIT0gc3RyaW5nOjpucG9zKSB7Ci0gICAgICAgIHRlc3RVUkwgPSBz
dHJpbmcodGVzdFBhdGhPclVSTCwgMCwgc2VwYXJhdG9yUG9zKTsKLSAgICAgICAgZXhwZWN0ZWRQ
aXhlbEhhc2ggPSBzdHJpbmcodGVzdFBhdGhPclVSTCwgc2VwYXJhdG9yUG9zICsgMSk7Ci0gICAg
fQorICAgIFRlc3RDb21tYW5kIGNvbW1hbmQgPSBwYXJzZUlucHV0TGluZShpbnB1dExpbmUpOwor
ICAgIHN0cmluZyYgdGVzdFVSTCA9IGNvbW1hbmQucGF0aE9yVVJMOworICAgIGR1bXBQaXhlbHNG
b3JDdXJyZW50VGVzdCA9IGNvbW1hbmQuc2hvdWxkRHVtcFBpeGVsczsKIAogICAgIC8vIENvbnZl
cnQgdGhlIHBhdGggaW50byBhIGZ1bGwgZmlsZSBVUkwgaWYgaXQgZG9lcyBub3QgbG9vawogICAg
IC8vIGxpa2UgYW4gSFRUUC9TIFVSTCAoZG9lc24ndCBzdGFydCB3aXRoIGh0dHA6Ly8gb3IgaHR0
cHM6Ly8pLgpAQCAtNzEyLDcgKzcwNiw3IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3Ry
aW5nJiB0ZXN0UGF0aE9yVVJMKQogCiAgICAgcmVzZXREZWZhdWx0c1RvQ29uc2lzdGVudFZhbHVl
cygpOwogCi0gICAgZ0xheW91dFRlc3RDb250cm9sbGVyID0gTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmNyZWF0ZSh0ZXN0VVJMLCBleHBlY3RlZFBpeGVsSGFzaCk7CisgICAgZ0xheW91dFRlc3RDb250
cm9sbGVyID0gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNyZWF0ZSh0ZXN0VVJMLCBjb21tYW5kLmV4
cGVjdGVkUGl4ZWxIYXNoKTsKICAgICB0b3BMb2FkaW5nRnJhbWUgPSAwOwogICAgIGRvbmUgPSBm
YWxzZTsKIApAQCAtMTQ0Nyw3ICsxNDQxLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFy
Z3ZbXSkKICAgICAgICAgcHJpbnRTZXBhcmF0b3JzID0gdHJ1ZTsKICAgICAgICAgcnVuVGVzdGlu
Z1NlcnZlckxvb3AoKTsKICAgICB9IGVsc2UgewotICAgICAgICBwcmludFNlcGFyYXRvcnMgPSAo
b3B0aW5kIDwgYXJnYy0xIHx8IChkdW1wUGl4ZWxzICYmIGR1bXBUcmVlKSk7CisgICAgICAgIHBy
aW50U2VwYXJhdG9ycyA9IChvcHRpbmQgPCBhcmdjLTEgfHwgKGR1bXBQaXhlbHNGb3JDdXJyZW50
VGVzdCAmJiBkdW1wVHJlZSkpOwogICAgICAgICBmb3IgKGludCBpID0gb3B0aW5kOyBpICE9IGFy
Z2M7ICsraSkKICAgICAgICAgICAgIHJ1blRlc3QoYXJndltpXSk7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCmluZGV4IGFiYmE1MzVlZGRjODhhMzk0
OTAyOTRmZDQ1MWEzOTE5NjhmY2MzZDEuLjNmOWQ0MjY2NDUxZmFjYmUxMTUwOTYyMDM1NTk3OTAz
MmJlYmU2ZmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVy
VHJlZS5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0K
QEAgLTE0MCw3ICsxNDAsNyBAQCBzdGF0aWMgSGlzdG9yeURlbGVnYXRlICpoaXN0b3J5RGVsZWdh
dGU7CiBQb2xpY3lEZWxlZ2F0ZSAqcG9saWN5RGVsZWdhdGU7CiBTdG9yYWdlVHJhY2tlckRlbGVn
YXRlICpzdG9yYWdlRGVsZWdhdGU7CiAKLXN0YXRpYyBpbnQgZHVtcFBpeGVsczsKK3N0YXRpYyBi
b29sIGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdDsKIHN0YXRpYyBpbnQgdGhyZWFkZWQ7CiBzdGF0
aWMgaW50IGR1bXBUcmVlID0gWUVTOwogc3RhdGljIGludCB1c2VUaW1lb3V0V2F0Y2hkb2cgPSBZ
RVM7CkBAIC03ODAsNyArNzgwLDYgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUdsb2JhbHNGcm9t
Q29tbWFuZExpbmVPcHRpb25zKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10KIHsKICAgICBz
dHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKICAgICAgICAgeyJub3RyZWUiLCBub19hcmd1bWVu
dCwgJmR1bXBUcmVlLCBOT30sCi0gICAgICAgIHsicGl4ZWwtdGVzdHMiLCBub19hcmd1bWVudCwg
JmR1bXBQaXhlbHMsIFlFU30sCiAgICAgICAgIHsidHJlZSIsIG5vX2FyZ3VtZW50LCAmZHVtcFRy
ZWUsIFlFU30sCiAgICAgICAgIHsidGhyZWFkZWQiLCBub19hcmd1bWVudCwgJnRocmVhZGVkLCBZ
RVN9LAogICAgICAgICB7ImNvbXBsZXgtdGV4dCIsIG5vX2FyZ3VtZW50LCAmZm9yY2VDb21wbGV4
VGV4dCwgWUVTfSwKQEAgLTg0OSw3ICs4NDgsNyBAQCB2b2lkIGR1bXBSZW5kZXJUcmVlKGludCBh
cmdjLCBjb25zdCBjaGFyICphcmd2W10pCiAgICAgaW5pdGlhbGl6ZUdsb2JhbHNGcm9tQ29tbWFu
ZExpbmVPcHRpb25zKGFyZ2MsIGFyZ3YpOwogICAgIHByZXBhcmVDb25zaXN0ZW50VGVzdGluZ0Vu
dmlyb25tZW50KCk7CiAgICAgYWRkVGVzdFBsdWdpbnNUb1BsdWdpblNlYXJjaFBhdGgoYXJndlsw
XSk7Ci0gICAgaWYgKGR1bXBQaXhlbHMpCisgICAgaWYgKGR1bXBQaXhlbHNGb3JDdXJyZW50VGVz
dCkKICAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXJzKCk7CiAKICAgICBpZiAoZm9yY2VDb21w
bGV4VGV4dCkKQEAgLTg3NCw3ICs4NzMsNyBAQCB2b2lkIGR1bXBSZW5kZXJUcmVlKGludCBhcmdj
LCBjb25zdCBjaGFyICphcmd2W10pCiAgICAgICAgIHByaW50U2VwYXJhdG9ycyA9IFlFUzsKICAg
ICAgICAgcnVuVGVzdGluZ1NlcnZlckxvb3AoKTsKICAgICB9IGVsc2UgewotICAgICAgICBwcmlu
dFNlcGFyYXRvcnMgPSAob3B0aW5kIDwgYXJnYy0xIHx8IChkdW1wUGl4ZWxzICYmIGR1bXBUcmVl
KSk7CisgICAgICAgIHByaW50U2VwYXJhdG9ycyA9IChvcHRpbmQgPCBhcmdjIC0gMSB8fCAoZHVt
cFBpeGVsc0ZvckN1cnJlbnRUZXN0ICYmIGR1bXBUcmVlKSk7CiAgICAgICAgIGZvciAoaW50IGkg
PSBvcHRpbmQ7IGkgIT0gYXJnYzsgKytpKQogICAgICAgICAgICAgcnVuVGVzdChhcmd2W2ldKTsK
ICAgICB9CkBAIC0xMTk1LDcgKzExOTQsNyBAQCB2b2lkIGR1bXAoKQogICAgICAgICB9ICAgICAg
ICAgICAgCiAgICAgfQogCi0gICAgaWYgKGR1bXBQaXhlbHMgJiYgZ0xheW91dFRlc3RDb250cm9s
bGVyLT5nZW5lcmF0ZVBpeGVsUmVzdWx0cygpKQorICAgIGlmIChkdW1wUGl4ZWxzRm9yQ3VycmVu
dFRlc3QgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5nZW5lcmF0ZVBpeGVsUmVzdWx0cygpKQog
ICAgICAgICAvLyBGSVhNRTogd2hlbiBpc1ByaW50aW5nIGlzIHNldCwgZHVtcCB0aGUgaW1hZ2Ug
d2l0aCBwYWdlIHNlcGFyYXRvcnMuCiAgICAgICAgIGR1bXBXZWJWaWV3QXNQaXhlbHNBbmRDb21w
YXJlV2l0aEV4cGVjdGVkKGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZXhwZWN0ZWRQaXhlbEhhc2go
KSk7CiAKQEAgLTEyNzYsMTkgKzEyNzUsMTMgQEAgc3RhdGljIHZvaWQgcmVzZXRXZWJWaWV3VG9D
b25zaXN0ZW50U3RhdGVCZWZvcmVUZXN0aW5nKCkKICAgICBbbWFpbkZyYW1lIF9jbGVhck9wZW5l
cl07CiB9CiAKLXN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiB0ZXN0UGF0aE9yVVJM
KQorc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIGlucHV0TGluZSkKIHsKLSAgICBB
U1NFUlQoIXRlc3RQYXRoT3JVUkwuZW1wdHkoKSk7Ci0gICAgCi0gICAgLy8gTG9vayBmb3IgIici
IGFzIGEgc2VwYXJhdG9yIGJldHdlZW4gdGhlIHBhdGggb3IgVVJMLCBhbmQgdGhlIHBpeGVsIGR1
bXAgaGFzaCB0aGF0IGZvbGxvd3MuCi0gICAgc3RyaW5nIHBhdGhPclVSTCh0ZXN0UGF0aE9yVVJM
KTsKLSAgICBzdHJpbmcgZXhwZWN0ZWRQaXhlbEhhc2g7Ci0gICAgCi0gICAgc2l6ZV90IHNlcGFy
YXRvclBvcyA9IHBhdGhPclVSTC5maW5kKCInIik7Ci0gICAgaWYgKHNlcGFyYXRvclBvcyAhPSBz
dHJpbmc6Om5wb3MpIHsKLSAgICAgICAgcGF0aE9yVVJMID0gc3RyaW5nKHRlc3RQYXRoT3JVUkws
IDAsIHNlcGFyYXRvclBvcyk7Ci0gICAgICAgIGV4cGVjdGVkUGl4ZWxIYXNoID0gc3RyaW5nKHRl
c3RQYXRoT3JVUkwsIHNlcGFyYXRvclBvcyArIDEpOwotICAgIH0KKyAgICBBU1NFUlQoIWlucHV0
TGluZS5lbXB0eSgpKTsKKworICAgIFRlc3RDb21tYW5kIGNvbW1hbmQgPSBwYXJzZUlucHV0TGlu
ZShpbnB1dExpbmUpOworICAgIGNvbnN0IHN0cmluZyYgcGF0aE9yVVJMID0gY29tbWFuZC5wYXRo
T3JVUkw7CisgICAgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gY29tbWFuZC5zaG91bGREdW1w
UGl4ZWxzOwogCiAgICAgTlNTdHJpbmcgKnBhdGhPclVSTFN0cmluZyA9IFtOU1N0cmluZyBzdHJp
bmdXaXRoVVRGOFN0cmluZzpwYXRoT3JVUkwuY19zdHIoKV07CiAgICAgaWYgKCFwYXRoT3JVUkxT
dHJpbmcpIHsKQEAgLTEzMTAsNyArMTMwMyw3IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qg
c3RyaW5nJiB0ZXN0UGF0aE9yVVJMKQogICAgIAogICAgIHJlc2V0V2ViVmlld1RvQ29uc2lzdGVu
dFN0YXRlQmVmb3JlVGVzdGluZygpOwogCi0gICAgZ0xheW91dFRlc3RDb250cm9sbGVyID0gTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmNyZWF0ZSh0ZXN0VVJMLCBleHBlY3RlZFBpeGVsSGFzaCk7Cisg
ICAgZ0xheW91dFRlc3RDb250cm9sbGVyID0gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNyZWF0ZSh0
ZXN0VVJMLCBjb21tYW5kLmV4cGVjdGVkUGl4ZWxIYXNoKTsKICAgICB0b3BMb2FkaW5nRnJhbWUg
PSBuaWw7CiAgICAgQVNTRVJUKCFkcmFnZ2luZ0luZm8pOyAvLyB0aGUgcHJldmlvdXMgdGVzdCBz
aG91bGQgaGF2ZSBjYWxsZWQgZXZlbnRTZW5kZXIubW91c2VVcCB0byBkcm9wIQogICAgIHJlbGVh
c2VBbmRaZXJvKCZkcmFnZ2luZ0luZm8pOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJl
bmRlclRyZWUucHJvCmluZGV4IGY0N2ZiNDM0NGI5ZWY4M2E1YWE0NmJiNTY4M2Q5MjMxNDk0YWEx
MjUuLjgzMzg3MGJjYWM5YTgyZWRjZWU4MWVkNWRiYTMxOTEwYWNmMGYwZjIgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlLnBybworKysgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5wcm8KQEAgLTI1LDYgKzI1LDcgQEAgY29u
dGFpbnMoREVGSU5FUywgSEFWRV9GT05UQ09ORklHPTEpOiBQS0dDT05GSUcgKz0gZm9udGNvbmZp
ZwogCiBIRUFERVJTICs9IFwKICAgICAkJFBXRC8uLi9Xb3JrUXVldWUuaCBcCisgICAgJCRQV0Qv
Li4vRHVtcFJlbmRlclRyZWUuaCBcCiAgICAgRHVtcFJlbmRlclRyZWVRdC5oIFwKICAgICBFdmVu
dFNlbmRlclF0LmggXAogICAgIFRleHRJbnB1dENvbnRyb2xsZXJRdC5oIFwKQEAgLTM2LDYgKzM3
LDcgQEAgSEVBREVSUyArPSBcCiAKIFNPVVJDRVMgKz0gXAogICAgICQkUFdELy4uL1dvcmtRdWV1
ZS5jcHAgXAorICAgICQkUFdELy4uL0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNwcCBcCiAgICAgRHVt
cFJlbmRlclRyZWVRdC5jcHAgXAogICAgIEV2ZW50U2VuZGVyUXQuY3BwIFwKICAgICBUZXh0SW5w
dXRDb250cm9sbGVyUXQuY3BwIFwKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0
L0R1bXBSZW5kZXJUcmVlUXQuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRl
clRyZWVRdC5jcHAKaW5kZXggMGVjZjYyMmYzZjhkZGE1NmM0Yzg4Y2VmY2YwOGEzYzk4Y2YyMzdj
NC4uOGE5Y2RhMTIxODM4ZmU2NDdlMDdiZWFiODMxZjM0ZmRhY2IyMWI3OSAxMDA3NTUKLS0tIGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAKKysrIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAKQEAgLTMwLDYgKzMwLDcgQEAK
ICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWUuaCIK
IAogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlUXQuaCIKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRRdC5oIgpAQCAtMzg4LDggKzM4OSw3IEBAIFdlYlZpZXdHcmFwaGljc0Jhc2VkOjpX
ZWJWaWV3R3JhcGhpY3NCYXNlZChRV2lkZ2V0KiBwYXJlbnQpCiB9CiAKIER1bXBSZW5kZXJUcmVl
OjpEdW1wUmVuZGVyVHJlZSgpCi0gICAgOiBtX2R1bXBQaXhlbHNGb3JBbGxUZXN0cyhmYWxzZSkK
LSAgICAsIG1fc3RkaW4oMCkKKyAgICA6IG1fc3RkaW4oMCkKICAgICAsIG1fZW5hYmxlVGV4dE91
dHB1dChmYWxzZSkKICAgICAsIG1fc3RhbmRBbG9uZU1vZGUoZmFsc2UpCiAgICAgLCBtX2dyYXBo
aWNzQmFzZWQoZmFsc2UpCkBAIC02MDQsMTAgKzYwNCw4IEBAIHZvaWQgRHVtcFJlbmRlclRyZWU6
Om9wZW4oY29uc3QgUVVybCYgdXJsKQogICAgIGlmIChpc1dlYkluc3BlY3RvclRlc3QodXJsKSkK
ICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvd1dlYkluc3BlY3RvcigpOwogCi0g
ICAgaWYgKGlzRHVtcEFzVGV4dFRlc3QodXJsKSkgeworICAgIGlmIChpc0R1bXBBc1RleHRUZXN0
KHVybCkpCiAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyKCktPmR1bXBBc1RleHQoKTsKLSAg
ICAgICAgc2V0RHVtcFBpeGVsc0ZvckFsbFRlc3RzKGZhbHNlKTsKLSAgICB9CiAKICAgICBpZiAo
aXNHbG9iYWxIaXN0b3J5VGVzdCh1cmwpKQogICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlcigp
LT5kdW1wSGlzdG9yeUNhbGxiYWNrcygpOwpAQCAtNjkwLDQ0ICs2ODgsMjcgQEAgdm9pZCBEdW1w
UmVuZGVyVHJlZTo6bG9hZE5leHRUZXN0SW5TdGFuZEFsb25lTW9kZSgpCiAKIHZvaWQgRHVtcFJl
bmRlclRyZWU6OnByb2Nlc3NMaW5lKGNvbnN0IFFTdHJpbmcgJmlucHV0KQogewotICAgIFFTdHJp
bmcgbGluZSA9IGlucHV0OwotCi0gICAgbV9kdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgPSBmYWxz
ZTsKLSAgICBtX2V4cGVjdGVkSGFzaCA9IFFTdHJpbmcoKTsKLSAgICAvLyBzaW5nbGUgcXVvdGUg
bWFya3MgdGhlIHBpeGVsIGR1bXAgaGFzaAotICAgIGludCBpbmRleE9mRmlyc3RTZXBhcmF0b3Ig
PSBsaW5lLmluZGV4T2YoJ1wnJyk7Ci0gICAgaW50IGluZGV4T2ZTZWNvbmRTZXBhcmF0b3IgPSBs
aW5lLmluZGV4T2YoJ1wnJywgaW5kZXhPZkZpcnN0U2VwYXJhdG9yICsgMSk7Ci0gICAgaWYgKGlu
ZGV4T2ZGaXJzdFNlcGFyYXRvciA+IC0xKSB7Ci0gICAgICAgIGludCBpbmRleE9mUGl4ZWxIYXNo
ID0gaW5kZXhPZkZpcnN0U2VwYXJhdG9yICsgMTsKLQotICAgICAgICAvLyBOUldUIHBhc3NlcyAt
LXBpeGVsLXRlc3QgaWYgd2Ugc2hvdWxkIGR1bXAgcGl4ZWxzIGZvciB0aGUgdGVzdC4KLSAgICAg
ICAgY29uc3QgUVN0cmluZyBleHBlY3RlZEFyZyhRTGF0aW4xU3RyaW5nKCItLXBpeGVsLXRlc3Qi
KSk7Ci0gICAgICAgIFFTdHJpbmcgYXJnVGVzdCA9IGxpbmUubWlkKGluZGV4T2ZGaXJzdFNlcGFy
YXRvciArIDEsIGV4cGVjdGVkQXJnLmxlbmd0aCgpKTsKLSAgICAgICAgaWYgKGFyZ1Rlc3QgPT0g
ZXhwZWN0ZWRBcmcpIHsKLSAgICAgICAgICAgIG1fZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0g
dHJ1ZTsKLSAgICAgICAgICAgIGluZGV4T2ZQaXhlbEhhc2ggPSBpbmRleE9mU2Vjb25kU2VwYXJh
dG9yID09IC0xID8gLTEgOiBpbmRleE9mU2Vjb25kU2VwYXJhdG9yICsgMTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoaW5kZXhPZlBpeGVsSGFzaCAhPSAtMSAmJiBpbmRleE9mUGl4ZWxIYXNoIDwg
bGluZS5zaXplKCkpCi0gICAgICAgICAgICBtX2V4cGVjdGVkSGFzaCA9IGxpbmUubWlkKGluZGV4
T2ZQaXhlbEhhc2gpOwotICAgICAgICBsaW5lLnJlbW92ZShpbmRleE9mRmlyc3RTZXBhcmF0b3Is
IGxpbmUubGVuZ3RoKCkpOwotICAgIH0KLQotICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoUUxhdGlu
MVN0cmluZygiaHR0cDoiKSkKLSAgICAgICAgICAgIHx8IGxpbmUuc3RhcnRzV2l0aChRTGF0aW4x
U3RyaW5nKCJodHRwczoiKSkKLSAgICAgICAgICAgIHx8IGxpbmUuc3RhcnRzV2l0aChRTGF0aW4x
U3RyaW5nKCJmaWxlOiIpKQotICAgICAgICAgICAgfHwgbGluZSA9PSBRTGF0aW4xU3RyaW5nKCJh
Ym91dDpibGFuayIpKSB7Ci0gICAgICAgIG9wZW4oUVVybChsaW5lKSk7CisgICAgVGVzdENvbW1h
bmQgY29tbWFuZCA9IHBhcnNlSW5wdXRMaW5lKHN0ZDo6c3RyaW5nKGlucHV0LnRvTGF0aW4xKCku
Y29uc3REYXRhKCkpKTsKKyAgICBRU3RyaW5nIHBhdGhPclVSTCA9IFFMYXRpbjFTdHJpbmcoY29t
bWFuZC5wYXRoT3JVUkwuY19zdHIoKSk7CisgICAgbV9kdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3Qg
PSBjb21tYW5kLnNob3VsZER1bXBQaXhlbHM7CisgICAgbV9leHBlY3RlZEhhc2ggPSBRTGF0aW4x
U3RyaW5nKGNvbW1hbmQuZXhwZWN0ZWRQaXhlbEhhc2guY19zdHIoKSk7CisKKyAgICBpZiAocGF0
aE9yVVJMLnN0YXJ0c1dpdGgoUUxhdGluMVN0cmluZygiaHR0cDoiKSkKKyAgICAgICAgICAgIHx8
IHBhdGhPclVSTC5zdGFydHNXaXRoKFFMYXRpbjFTdHJpbmcoImh0dHBzOiIpKQorICAgICAgICAg
ICAgfHwgcGF0aE9yVVJMLnN0YXJ0c1dpdGgoUUxhdGluMVN0cmluZygiZmlsZToiKSkKKyAgICAg
ICAgICAgIHx8IHBhdGhPclVSTCA9PSBRTGF0aW4xU3RyaW5nKCJhYm91dDpibGFuayIpKSB7Cisg
ICAgICAgIG9wZW4oUVVybChwYXRoT3JVUkwpKTsKICAgICB9IGVsc2UgewotICAgICAgICBRRmls
ZUluZm8gZmkobGluZSk7CisgICAgICAgIFFGaWxlSW5mbyBmaShwYXRoT3JVUkwpOwogCiAgICAg
ICAgIGlmICghZmkuZXhpc3RzKCkpIHsKICAgICAgICAgICAgIFFEaXIgY3VycmVudERpciA9IFFE
aXI6OmN1cnJlbnRQYXRoKCk7CiAKICAgICAgICAgICAgIC8vIFRyeSB0byBiZSBzbWFydCBhYm91
dCB3aGVyZSB0aGUgdGVzdCBpcyBsb2NhdGVkCiAgICAgICAgICAgICBpZiAoY3VycmVudERpci5k
aXJOYW1lKCkgPT0gUUxhdGluMVN0cmluZygiTGF5b3V0VGVzdHMiKSkKLSAgICAgICAgICAgICAg
ICBmaSA9IFFGaWxlSW5mbyhjdXJyZW50RGlyLCBsaW5lLnJlcGxhY2UoUVJlZ0V4cCgiLio/TGF5
b3V0VGVzdHMvKC4qKSIpLCAiXFwxIikpOwotICAgICAgICAgICAgZWxzZSBpZiAoIWxpbmUuY29u
dGFpbnMoUUxhdGluMVN0cmluZygiTGF5b3V0VGVzdHMiKSkpCi0gICAgICAgICAgICAgICAgZmkg
PSBRRmlsZUluZm8oY3VycmVudERpciwgbGluZS5wcmVwZW5kKFFMYXRpbjFTdHJpbmcoIkxheW91
dFRlc3RzLyIpKSk7CisgICAgICAgICAgICAgICAgZmkgPSBRRmlsZUluZm8oY3VycmVudERpciwg
cGF0aE9yVVJMLnJlcGxhY2UoUVJlZ0V4cCgiLio/TGF5b3V0VGVzdHMvKC4qKSIpLCAiXFwxIikp
OworICAgICAgICAgICAgZWxzZSBpZiAoIXBhdGhPclVSTC5jb250YWlucyhRTGF0aW4xU3RyaW5n
KCJMYXlvdXRUZXN0cyIpKSkKKyAgICAgICAgICAgICAgICBmaSA9IFFGaWxlSW5mbyhjdXJyZW50
RGlyLCBwYXRoT3JVUkwucHJlcGVuZChRTGF0aW4xU3RyaW5nKCJMYXlvdXRUZXN0cy8iKSkpOwog
CiAgICAgICAgICAgICBpZiAoIWZpLmV4aXN0cygpKSB7CiAgICAgICAgICAgICAgICAgZW1pdCBy
ZWFkeSgpOwpAQCAtNzQxLDExICs3MjIsNiBAQCB2b2lkIER1bXBSZW5kZXJUcmVlOjpwcm9jZXNz
TGluZShjb25zdCBRU3RyaW5nICZpbnB1dCkKICAgICBmZmx1c2goc3Rkb3V0KTsKIH0KIAotdm9p
ZCBEdW1wUmVuZGVyVHJlZTo6c2V0RHVtcFBpeGVsc0ZvckFsbFRlc3RzKGJvb2wgZHVtcCkKLXsK
LSAgICBtX2R1bXBQaXhlbHNGb3JBbGxUZXN0cyA9IGR1bXA7Ci19Ci0KIHZvaWQgRHVtcFJlbmRl
clRyZWU6OmNsb3NlUmVtYWluaW5nV2luZG93cygpCiB7CiAgICAgZm9yZWFjaCAoUU9iamVjdCog
d2lkZ2V0LCB3aW5kb3dzKQpAQCAtOTYxLDcgKzkzNyw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWU6
OmR1bXAoKQogICAgIGZwdXRzKCIjRU9GXG4iLCBzdGRvdXQpOwogICAgIGZwdXRzKCIjRU9GXG4i
LCBzdGRlcnIpOwogCi0gICAgaWYgKChtX2R1bXBQaXhlbHNGb3JBbGxUZXN0cyB8fCBtX2R1bXBQ
aXhlbHNGb3JDdXJyZW50VGVzdCkgJiYgIW1fY29udHJvbGxlci0+c2hvdWxkRHVtcEFzVGV4dCgp
KSB7CisgICAgaWYgKG1fZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ICYmICFtX2NvbnRyb2xsZXIt
PnNob3VsZER1bXBBc1RleHQoKSkgewogICAgICAgICBRSW1hZ2UgaW1hZ2U7CiAgICAgICAgIGlm
ICghbV9jb250cm9sbGVyLT5pc1ByaW50aW5nKCkpIHsKICAgICAgICAgICAgIGltYWdlID0gUUlt
YWdlKG1fcGFnZS0+dmlld3BvcnRTaXplKCksIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMik7CmRpZmYg
LS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmggYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmgKaW5kZXggYzRmOTI5ODNmOTE1
Y2NhNmE4ODk4YWRlZmI1NjJjOGQyZGQ5MWRhMC4uYTljZjNjZDczM2RiYTA3YWQxMWMxMDlkM2U0
YjBiN2VhOTdlMjgzYyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJl
bmRlclRyZWVRdC5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVl
UXQuaApAQCAtODIsOCArODIsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRHcmFwaGljc0Jhc2Vk
KGJvb2wgZmxhZykgeyBtX2dyYXBoaWNzQmFzZWQgPSBmbGFnOyB9CiAgICAgYm9vbCBpc0dyYXBo
aWNzQmFzZWQoKSB7IHJldHVybiBtX2dyYXBoaWNzQmFzZWQ7IH0KIAotICAgIHZvaWQgc2V0RHVt
cFBpeGVsc0ZvckFsbFRlc3RzKGJvb2wpOwotCiAgICAgdm9pZCBjbG9zZVJlbWFpbmluZ1dpbmRv
d3MoKTsKICAgICB2b2lkIHJlc2V0VG9Db25zaXN0ZW50U3RhdGVCZWZvcmVUZXN0aW5nKGNvbnN0
IFFVcmwmKTsKIApAQCAtMTQyLDcgKzE0MCw2IEBAIHByaXZhdGU6CiAgICAgUVN0cmluZyBkdW1w
RnJhbWVTY3JvbGxQb3NpdGlvbihRV2ViRnJhbWUqIGZyYW1lKTsKICAgICBMYXlvdXRUZXN0Q29u
dHJvbGxlciAqbV9jb250cm9sbGVyOwogCi0gICAgYm9vbCBtX2R1bXBQaXhlbHNGb3JBbGxUZXN0
czsKICAgICBib29sIG1fZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0OwogICAgIFFTdHJpbmcgbV9l
eHBlY3RlZEhhc2g7CiAgICAgUVN0cmluZ0xpc3QgbV9zdGFuZEFsb25lTW9kZVRlc3RMaXN0Owpk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvbWFpbi5jcHAgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9xdC9tYWluLmNwcAppbmRleCA2NGQyYjE2YjM3Y2U2MTQyMzc4ODM4MTQ2NGRl
M2Q0ZTI2NDAzMWM5Li42ODRjZmE4ZjcwZDc4YmVhNmNhMWE0ZmE2MTJjOTU5MWUxYjkyMzIyIDEw
MDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9tYWluLmNwcAorKysgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9xdC9tYWluLmNwcApAQCAtNjYsMTEgKzY2LDExIEBAIHZvaWQgbWVzc2Fn
ZUhhbmRsZXIoUXRNc2dUeXBlIHR5cGUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiAgICAgLy8gZG8g
bm90aGluZwogfQogCi0vLyBXZSBvbmx5IHN1cHBvcnQgLXYgb3IgLS1waXhlbC10ZXN0cyBvciAt
LXN0ZG91dCBvciAtLXN0ZGVyciBvciAtLCBhbGwgdGhlIG90aGVycyB3aWxsIGJlIAorLy8gV2Ug
b25seSBzdXBwb3J0IC12IG9yIC0tc3Rkb3V0IG9yIC0tc3RkZXJyIG9yIC0sIGFsbCB0aGUgb3Ro
ZXJzIHdpbGwgYmUKIC8vIHBhc3MgYXMgdGVzdCBjYXNlIG5hbWUgKGV2ZW4gLWFiYy5odG1sIGlz
IGEgdmFsaWQgdGVzdCBjYXNlIG5hbWUpCiBib29sIGlzT3B0aW9uKGNvbnN0IFFTdHJpbmcmIHN0
cikKIHsKLSAgICByZXR1cm4gc3RyID09IFFTdHJpbmcoIi12IikgfHwgc3RyID09IFFTdHJpbmco
Ii0tcGl4ZWwtdGVzdHMiKQorICAgIHJldHVybiBzdHIgPT0gUVN0cmluZygiLXYiKQogICAgICAg
ICAgICB8fCBzdHIgPT0gUVN0cmluZygiLS1zdGRvdXQiKSB8fCBzdHIgPT0gUVN0cmluZygiLS1z
dGRlcnIiKQogICAgICAgICAgICB8fCBzdHIgPT0gUVN0cmluZygiLS10aW1lb3V0IikgfHwgc3Ry
ID09IFFTdHJpbmcoIi0tbm8tdGltZW91dCIpCiAgICAgICAgICAgIHx8IHN0ciA9PSBRU3RyaW5n
KCItIik7CkBAIC04OSw4ICs4OSw4IEBAIFFTdHJpbmcgdGFrZU9wdGlvblZhbHVlKFFTdHJpbmdM
aXN0JiBhcmd1bWVudHMsIGludCBpbmRleCkKIAogdm9pZCBwcmludFVzYWdlKCkKIHsKLSAgICBm
cHJpbnRmKHN0ZGVyciwgIlVzYWdlOiBEdW1wUmVuZGVyVHJlZSBbLXZ8LS1waXhlbC10ZXN0c10g
Wy0tc3Rkb3V0IG91dHB1dF9maWxlbmFtZV0gWy1zdGRlcnIgZXJyb3JfZmlsZW5hbWVdIFstLW5v
LXRpbWVvdXRdIFstLXRpbWVvdXQgdGltZW91dF9NU10gZmlsZW5hbWUgW2ZpbGVuYW1lMi4ubl1c
biIpOwotICAgIGZwcmludGYoc3RkZXJyLCAiT3IgZm9sZGVyIGNvbnRhaW5pbmcgdGVzdCBmaWxl
czogRHVtcFJlbmRlclRyZWUgWy12fC0tcGl4ZWwtdGVzdHNdIGRpcnBhdGhcbiIpOworICAgIGZw
cmludGYoc3RkZXJyLCAiVXNhZ2U6IER1bXBSZW5kZXJUcmVlIFstdl0gWy0tc3Rkb3V0IG91dHB1
dF9maWxlbmFtZV0gWy1zdGRlcnIgZXJyb3JfZmlsZW5hbWVdIFstLW5vLXRpbWVvdXRdIFstLXRp
bWVvdXQgdGltZW91dF9NU10gZmlsZW5hbWUgW2ZpbGVuYW1lMi4ubl1cbiIpOworICAgIGZwcmlu
dGYoc3RkZXJyLCAiT3IgZm9sZGVyIGNvbnRhaW5pbmcgdGVzdCBmaWxlczogRHVtcFJlbmRlclRy
ZWUgWy12XSBkaXJwYXRoXG4iKTsKICAgICBmZmx1c2goc3RkZXJyKTsKIH0KIApAQCAtMTU4LDEz
ICsxNTgsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogCiAgICAgV2ViQ29y
ZTo6RHVtcFJlbmRlclRyZWUgZHVtcGVyOwogCi0gICAgaW50IGluZGV4ID0gYXJncy5pbmRleE9m
KFFMYXRpbjFTdHJpbmcoIi0tcGl4ZWwtdGVzdHMiKSk7Ci0gICAgaWYgKGluZGV4ICE9IC0xKSB7
Ci0gICAgICAgIGR1bXBlci5zZXREdW1wUGl4ZWxzRm9yQWxsVGVzdHModHJ1ZSk7Ci0gICAgICAg
IGFyZ3MucmVtb3ZlQXQoaW5kZXgpOwotICAgIH0KLQotICAgIGluZGV4ID0gYXJncy5pbmRleE9m
KFFMYXRpbjFTdHJpbmcoIi0tc3Rkb3V0IikpOworICAgIGludCBpbmRleCA9IGFyZ3MuaW5kZXhP
ZihRTGF0aW4xU3RyaW5nKCItLXN0ZG91dCIpKTsKICAgICBpZiAoaW5kZXggIT0gLTEpIHsKICAg
ICAgICAgUVN0cmluZyBmaWxlTmFtZSA9IHRha2VPcHRpb25WYWx1ZShhcmdzLCBpbmRleCk7CiAg
ICAgICAgIGR1bXBlci5zZXRSZWRpcmVjdE91dHB1dEZpbGVOYW1lKGZpbGVOYW1lKTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwCmluZGV4IGY0MDJhMDJjYTM2
MmM1Mjc5ZGU1YTVjOGMxZTBjZTlkZjM2MmFiYWQuLjMxMjQzMGQ1Njk4OTU0OGJjM2VjYWQxM2Y4
ZGYxODMwOTZjMTdjODUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1w
UmVuZGVyVHJlZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJU
cmVlLmNwcApAQCAtODAsNyArODAsNyBAQCBzdGF0aWMgTFBDV1NUUiBmb250c0Vudmlyb25tZW50
VmFyaWFibGUgPSBMIldFQktJVF9URVNURk9OVFMiOwogY29uc3QgTFBDV1NUUiBrRHVtcFJlbmRl
clRyZWVDbGFzc05hbWUgPSBMIkR1bXBSZW5kZXJUcmVlV2luZG93IjsKIAogc3RhdGljIGJvb2wg
ZHVtcFRyZWUgPSB0cnVlOwotc3RhdGljIGJvb2wgZHVtcFBpeGVsczsKK3N0YXRpYyBib29sIGR1
bXBQaXhlbHNGb3JDdXJyZW50VGVzdDsKIHN0YXRpYyBib29sIGR1bXBBbGxQaXhlbHM7CiBzdGF0
aWMgYm9vbCBwcmludFNlcGFyYXRvcnM7CiBzdGF0aWMgYm9vbCBsZWFrQ2hlY2tpbmcgPSBmYWxz
ZTsKQEAgLTc1OSw3ICs3NTksNyBAQCB2b2lkIGR1bXAoKQogICAgICAgICBmZmx1c2goc3RkZXJy
KTsKICAgICB9CiAKLSAgICBpZiAoZHVtcFBpeGVscworICAgIGlmIChkdW1wUGl4ZWxzRm9yQ3Vy
cmVudFRlc3QKICAgICAgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5nZW5lcmF0ZVBpeGVsUmVz
dWx0cygpCiAgICAgICYmICFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBET01Bc1dlYkFyY2hp
dmUoKQogICAgICAmJiAhZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wU291cmNlQXNXZWJBcmNo
aXZlKCkpCkBAIC05NDgsMjAgKzk0OCwxNCBAQCBzdGF0aWMgdm9pZCBzaXplV2ViVmlld0ZvckN1
cnJlbnRUZXN0KCkKICAgICA6OlNldFdpbmRvd1Bvcyh3ZWJWaWV3V2luZG93LCAwLCAwLCAwLCB3
aWR0aCwgaGVpZ2h0LCBTV1BfTk9NT1ZFKTsKIH0KIAotc3RhdGljIHZvaWQgcnVuVGVzdChjb25z
dCBzdHJpbmcmIHRlc3RQYXRoT3JVUkwpCitzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmlu
ZyYgaW5wdXRMaW5lKQogeworICAgIFRlc3RDb21tYW5kIGNvbW1hbmQgPSBwYXJzZUlucHV0TGlu
ZShpbnB1dExpbmUpOworICAgIGNvbnN0IHN0cmluZyYgcGF0aE9yVVJMID0gY29tbWFuZC5wYXRo
T3JVUkw7CisgICAgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gY29tbWFuZC5zaG91bGREdW1w
UGl4ZWxzOworCiAgICAgc3RhdGljIEJTVFIgbWV0aG9kQlN0ciA9IFN5c0FsbG9jU3RyaW5nKFRF
WFQoIkdFVCIpKTsKIAotICAgIC8vIExvb2sgZm9yICInIiBhcyBhIHNlcGFyYXRvciBiZXR3ZWVu
IHRoZSBwYXRoIG9yIFVSTCwgYW5kIHRoZSBwaXhlbCBkdW1wIGhhc2ggdGhhdCBmb2xsb3dzLgot
ICAgIHN0cmluZyBwYXRoT3JVUkwodGVzdFBhdGhPclVSTCk7Ci0gICAgc3RyaW5nIGV4cGVjdGVk
UGl4ZWxIYXNoOwotICAgIAotICAgIHNpemVfdCBzZXBhcmF0b3JQb3MgPSBwYXRoT3JVUkwuZmlu
ZCgiJyIpOwotICAgIGlmIChzZXBhcmF0b3JQb3MgIT0gc3RyaW5nOjpucG9zKSB7Ci0gICAgICAg
IHBhdGhPclVSTCA9IHN0cmluZyh0ZXN0UGF0aE9yVVJMLCAwLCBzZXBhcmF0b3JQb3MpOwotICAg
ICAgICBleHBlY3RlZFBpeGVsSGFzaCA9IHN0cmluZyh0ZXN0UGF0aE9yVVJMLCBzZXBhcmF0b3JQ
b3MgKyAxKTsKLSAgICB9Ci0gICAgCiAgICAgQlNUUiB1cmxCU3RyOwogIAogICAgIENGU3RyaW5n
UmVmIHN0ciA9IENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmcoMCwgcGF0aE9yVVJMLmNfc3RyKCks
IGtDRlN0cmluZ0VuY29kaW5nV2luZG93c0xhdGluMSk7CkBAIC05ODMsNyArOTc3LDcgQEAgc3Rh
dGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIHRlc3RQYXRoT3JVUkwpCiAKICAgICBDRlJl
bGVhc2UodXJsKTsKIAotICAgIDo6Z0xheW91dFRlc3RDb250cm9sbGVyID0gTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmNyZWF0ZShwYXRoT3JVUkwsIGV4cGVjdGVkUGl4ZWxIYXNoKTsKKyAgICA6OmdM
YXlvdXRUZXN0Q29udHJvbGxlciA9IExheW91dFRlc3RDb250cm9sbGVyOjpjcmVhdGUocGF0aE9y
VVJMLCBjb21tYW5kLmV4cGVjdGVkUGl4ZWxIYXNoKTsKICAgICBkb25lID0gZmFsc2U7CiAgICAg
dG9wTG9hZGluZ0ZyYW1lID0gMDsKIApAQCAtMTMzNywxMSArMTMzMSw2IEBAIGV4dGVybiAiQyIg
X19kZWNsc3BlYyhkbGxleHBvcnQpIGludCBXSU5BUEkgZGxsTGF1bmNoZXJFbnRyeVBvaW50KGlu
dCBhcmdjLCBjb25zCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAg
IGlmICghc3RyaWNtcChhcmd2W2ldLCAiLS1waXhlbC10ZXN0cyIpKSB7Ci0gICAgICAgICAgICBk
dW1wUGl4ZWxzID0gdHJ1ZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KICAg
ICAgICAgaWYgKCFzdHJpY21wKGFyZ3ZbaV0sICItLWNvbXBsZXgtdGV4dCIpKSB7CiAgICAgICAg
ICAgICBmb3JjZUNvbXBsZXhUZXh0ID0gdHJ1ZTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLnZjcHJvaiBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS52Y3Byb2oKaW5kZXggNDg0
M2MzOTBlN2M2YjUyZTI0ZTJiMzc3MDY1NDc4ZDA3NmMwOTdmYS4uN2UyNDJhMWNkZTRhMmZjY2Mx
YTI0NzFiNjE2OWIzZTMzZWFkY2RjZCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
d2luL0R1bXBSZW5kZXJUcmVlLnZjcHJvagorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4v
RHVtcFJlbmRlclRyZWUudmNwcm9qCkBAIC01NjMsNiArNTYzLDEwIEBACiAJCQk+CiAJCTwvRmls
ZT4KIAkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cRHVtcFJlbmRlclRyZWVDb21tb24uY3Bw
IgorCQkJPgorCQk8L0ZpbGU+CisJCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXER1bXBSZW5k
ZXJUcmVlUHJlZml4LmgiCiAJCQk+CiAJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL3dzY3JpcHQgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93c2NyaXB0CmluZGV4IDY0
NWM3ZDY0MTU5OGFmZTJmMTRlMTYzYWQ0Y2NlZjI3YzUyOGI3NjQuLmIzMjkyOTQ1MGIyOGFhODg5
MmMzM2UzYmUwZDk2ZjBlNmUxMTM0MTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L3dzY3JpcHQKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd3NjcmlwdApAQCAtNDAsNiArNDAs
NyBAQCBpbmNsdWRlX3BhdGhzID0gWwogICAgICAgICAgICAgICAgICd3eCcKICAgICAgICAgICAg
ICAgICBdCiBzb3VyY2VzID0gWworICAgICAgICAgICAgJ0R1bXBSZW5kZXJUcmVlQ29tbW9uLmNw
cCcsCiAgICAgICAgICAgICAnTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwJywKICAgICAgICAgICAg
ICdXb3JrUXVldWUuY3BwJywKICAgICAgICAgICAgICd3eC9EdW1wUmVuZGVyVHJlZVd4LmNwcCcs
CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93eC9EdW1wUmVuZGVyVHJlZVd4LmNw
cCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0R1bXBSZW5kZXJUcmVlV3guY3BwCmluZGV4IDMx
YWRkMTFhMmViNzRkMWY0ZDgzMjk0NzlmNDE5ZjEwN2ZmYmE4OGYuLjQ1Yjg1MmQ4OGFiOWJkYTI5
MWZiMWVkMjc3YWNhNzUxZGZkMzUwOTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L3d4L0R1bXBSZW5kZXJUcmVlV3guY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0R1
bXBSZW5kZXJUcmVlV3guY3BwCkBAIC01MCw3ICs1MCw3IEBACiB2b2xhdGlsZSBib29sIGRvbmUg
PSB0cnVlOwogdm9sYXRpbGUgYm9vbCBub3RpZmllZCA9IGZhbHNlOwogc3RhdGljIGJvb2wgcHJp
bnRTZXBhcmF0b3JzID0gdHJ1ZTsKLXN0YXRpYyBpbnQgZHVtcFBpeGVsczsKK3N0YXRpYyBpbnQg
ZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0Owogc3RhdGljIGludCBkdW1wVHJlZSA9IDE7CiB0aW1l
X3Qgc3RhcnRUaW1lOyAvLyB0byBkZXRlY3QgdGltZW91dHMgLyBmYWlsZWQgdGVzdHMKIApAQCAt
MjAzLDcgKzIwMyw3IEBAIHZvaWQgZHVtcCgpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAo
ZHVtcFBpeGVscworICAgIGlmIChkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QKICAgICAgICAgJiYg
Z0xheW91dFRlc3RDb250cm9sbGVyLT5nZW5lcmF0ZVBpeGVsUmVzdWx0cygpCiAgICAgICAgICYm
ICFnTGF5b3V0VGVzdENvbnRyb2xsZXItPmR1bXBET01Bc1dlYkFyY2hpdmUoKQogICAgICAgICAm
JiAhZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wU291cmNlQXNXZWJBcmNoaXZlKCkpIHsKQEAg
LTIxOCwyNiArMjE4LDIxIEBAIHZvaWQgZHVtcCgpCiAgICAgZ0xheW91dFRlc3RDb250cm9sbGVy
LmNsZWFyKCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgd3hTdHJpbmcgdGVzdFBh
dGhPclVSTCkKK3N0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgd3hTdHJpbmcgaW5wdXRMaW5lKQog
ewogICAgIGRvbmUgPSBmYWxzZTsKICAgICB0aW1lKCZzdGFydFRpbWUpOwotICAgIHN0cmluZyBw
YXRoT3JVUkxTdHJpbmcodGVzdFBhdGhPclVSTC5jaGFyX3N0cigpKTsKLSAgICBzdHJpbmcgcGF0
aE9yVVJMKHBhdGhPclVSTFN0cmluZyk7Ci0gICAgc3RyaW5nIGV4cGVjdGVkUGl4ZWxIYXNoOwot
Ci0gICAgc2l6ZV90IHNlcGFyYXRvclBvcyA9IHBhdGhPclVSTC5maW5kKCInIik7Ci0gICAgaWYg
KHNlcGFyYXRvclBvcyAhPSBzdHJpbmc6Om5wb3MpIHsKLSAgICAgICAgcGF0aE9yVVJMID0gc3Ry
aW5nKHBhdGhPclVSTFN0cmluZywgMCwgc2VwYXJhdG9yUG9zKTsKLSAgICAgICAgZXhwZWN0ZWRQ
aXhlbEhhc2ggPSBzdHJpbmcocGF0aE9yVVJMU3RyaW5nLCBzZXBhcmF0b3JQb3MgKyAxKTsKLSAg
ICB9CisKKyAgICBUZXN0Q29tbWFuZCBjb21tYW5kID0gcGFyc2VJbnB1dExpbmUoc3RkOjpzdHJp
bmcoaW5wdXRMaW5lLlRvQXNjaWkoKSkpOworICAgIHN0cmluZyYgcGF0aE9yVVJMID0gY29tbWFu
ZC5wYXRoT3JVUkw7CisgICAgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gY29tbWFuZC5zaG91
bGREdW1wUGl4ZWxzOwogICAgIAogICAgIC8vIENVUkwgaXNuJ3QgaGFwcHkgaWYgd2UgZG9uJ3Qg
aGF2ZSBhIHByb3RvY29sLgogICAgIHNpemVfdCBodHRwID0gcGF0aE9yVVJMLmZpbmQoImh0dHA6
Ly8iKTsKICAgICBpZiAoaHR0cCA9PSBzdHJpbmc6Om5wb3MpCiAgICAgICAgIHBhdGhPclVSTC5p
bnNlcnQoMCwgImZpbGU6Ly8iKTsKICAgICAKLSAgICBnTGF5b3V0VGVzdENvbnRyb2xsZXIgPSBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6Y3JlYXRlKHBhdGhPclVSTCwgZXhwZWN0ZWRQaXhlbEhhc2gp
OworICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlciA9IExheW91dFRlc3RDb250cm9sbGVyOjpjcmVh
dGUocGF0aE9yVVJMLCBjb21tYW5kLmV4cGVjdGVkUGl4ZWxIYXNoKTsKICAgICBpZiAoIWdMYXlv
dXRUZXN0Q29udHJvbGxlcikgewogICAgICAgICB3eFRoZUFwcC0+RXhpdE1haW5Mb29wKCk7CiAg
ICAgfQpAQCAtMjgyLDExICsyNzcsNiBAQCBib29sIE15QXBwOjpPbkluaXQoKQogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICghb3B0aW9uLkNt
cE5vQ2FzZShfVCgiLS1waXhlbC10ZXN0cyIpKSkgewotICAgICAgICAgICAgZHVtcFBpeGVscyA9
IHRydWU7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICAKICAgICAg
ICAgaWYgKCFvcHRpb24uQ21wTm9DYXNlKF9UKCItLXRyZWUiKSkpIHsKICAgICAgICAgICAgIGR1
bXBUcmVlID0gdHJ1ZTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzIzLDcgKzMxMyw3IEBA
IGJvb2wgTXlBcHA6Ok9uSW5pdCgpCiAgICAgICAgIH0KICAgICAKICAgICB9IGVsc2UgewotICAg
ICAgICBwcmludFNlcGFyYXRvcnMgPSAob3B0aW5kIDwgYXJnYy0xIHx8IChkdW1wUGl4ZWxzICYm
IGR1bXBUcmVlKSk7CisgICAgICAgIHByaW50U2VwYXJhdG9ycyA9IChvcHRpbmQgPCBhcmdjIC0g
MSB8fCAoZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ICYmIGR1bXBUcmVlKSk7CiAgICAgICAgIGZv
ciAoaW50IGkgPSBvcHRpbmQ7IGkgIT0gYXJnYzsgKytpKSB7CiAgICAgICAgICAgICBydW5UZXN0
KHd4VGhlQXBwLT5hcmd2WzFdKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvR05VbWFr
ZWZpbGUuYW0gYi9Ub29scy9HTlVtYWtlZmlsZS5hbQppbmRleCBkZjlhNzFmMThmOTU4MDdlZjRm
ZDZmN2Q3YzI3ZDMxMWZhMzIxYWMyLi5mODVhOWQxMmViNzQ1NDIzMTUyMjUxMTA2MmVlMjdmNWE0
MDg5ZDQyIDEwMDY0NAotLS0gYS9Ub29scy9HTlVtYWtlZmlsZS5hbQorKysgYi9Ub29scy9HTlVt
YWtlZmlsZS5hbQpAQCAtMTA2LDYgKzEwNiw3IEBAIGVuZGlmCiAKIFByb2dyYW1zX0R1bXBSZW5k
ZXJUcmVlX1NPVVJDRVMgPSBcCiAJVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUu
aCBcCisJVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWVDb21tb24uY3BwIFwKIAlU
b29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZVByZWZpeC5oIFwKIAlUb29scy9EdW1w
UmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAgXAogCVRvb2xzL0R1bXBSZW5k
ZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmggXApkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvb2xkLXJ1bi13ZWJraXQt
dGVzdHMKaW5kZXggMDk0NDNjODdjMDJmMWU4Y2Y1YmRlNmQxYjA0NWM0ZGI5YmFiMDg4Mi4uMThh
ZTA1NmExNTk0NjZhNTJmMzdlZTI2OTQ2NDVkYjNlODc0NjNlMiAxMDA3NTUKLS0tIGEvVG9vbHMv
U2NyaXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0cworKysgYi9Ub29scy9TY3JpcHRzL29sZC1ydW4t
d2Via2l0LXRlc3RzCkBAIC03NDgsMTIgKzc0OCwxNiBAQCBmb3IgbXkgJHRlc3QgKEB0ZXN0cykg
ewogICAgIHByaW50ICR0ZXN0c19ydW5fZmggIiR0ZXN0XG4iOwogCiAgICAgIyBUcnkgdG8gcmVh
ZCBleHBlY3RlZCBoYXNoIGZpbGUgZm9yIHBpeGVsIHRlc3RzCi0gICAgbXkgJHN1ZmZpeEV4cGVj
dGVkSGFzaCA9ICIiOwotICAgIGlmICgkcGl4ZWxUZXN0cyAmJiAhJHJlc2V0UmVzdWx0cykgewot
ICAgICAgICBteSAkZXhwZWN0ZWRQaXhlbERpciA9IGV4cGVjdGVkRGlyZWN0b3J5Rm9yVGVzdCgk
YmFzZSwgMCwgInBuZyIpOwotICAgICAgICBpZiAobXkgJGV4cGVjdGVkSGFzaCA9IHJlYWRDaGVj
a3N1bUZyb21QbmcoRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkZXhwZWN0ZWRQaXhlbERpciwgIiRiYXNl
LSRleHBlY3RlZFRhZy5wbmciKSkpIHsKLSAgICAgICAgICAgICMgRm9ybWF0IGV4cGVjdGVkIGhh
c2ggaW50byBhIHN1ZmZpeCBzdHJpbmcgdGhhdCBpcyBhcHBlbmRlZCB0byB0aGUgcGF0aCAvIFVS
TCBwYXNzZWQgdG8gRFJULgotICAgICAgICAgICAgJHN1ZmZpeEV4cGVjdGVkSGFzaCA9ICInJGV4
cGVjdGVkSGFzaCI7CisgICAgbXkgJHN1ZmZpeFBpeGVsVGVzdCA9ICIiOworICAgIGlmICgkcGl4
ZWxUZXN0cykgeworICAgICAgICAjICcgaXMgdGhlIHNlcGFyYXRvciBiZXR3ZWVuIGFyZ3VtZW50
cy4KKyAgICAgICAgJHN1ZmZpeFBpeGVsVGVzdCA9ICInLS1waXhlbC10ZXN0IjsKKyAgICAgICAg
aWYgKCEkcmVzZXRSZXN1bHRzKSB7CisgICAgICAgICAgICBteSAkZXhwZWN0ZWRQaXhlbERpciA9
IGV4cGVjdGVkRGlyZWN0b3J5Rm9yVGVzdCgkYmFzZSwgMCwgInBuZyIpOworICAgICAgICAgICAg
aWYgKG15ICRleHBlY3RlZEhhc2ggPSByZWFkQ2hlY2tzdW1Gcm9tUG5nKEZpbGU6OlNwZWMtPmNh
dGZpbGUoJGV4cGVjdGVkUGl4ZWxEaXIsICIkYmFzZS0kZXhwZWN0ZWRUYWcucG5nIikpKSB7Cisg
ICAgICAgICAgICAgICAgIyBGb3JtYXQgZXhwZWN0ZWQgaGFzaCBpbnRvIGEgc3VmZml4IHN0cmlu
ZyB0aGF0IGlzIGFwcGVuZGVkIHRvIHRoZSBwYXRoIC8gVVJMIHBhc3NlZCB0byBEUlQuCisgICAg
ICAgICAgICAgICAgJHN1ZmZpeFBpeGVsVGVzdCA9ICInLS1waXhlbC10ZXN0JyRleHBlY3RlZEhh
c2giOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC03ODksMTEgKzc5Mywx
MSBAQCBmb3IgbXkgJHRlc3QgKEB0ZXN0cykgewogICAgICAgICB9IGVsc2lmICgkdGVzdCAhfiAv
Xmh0dHBcL3Rlc3RzXC9sb2NhbFwvLyAmJiAkdGVzdCAhfiAvXmh0dHBcL3Rlc3RzXC9zc2xcLy8p
IHsKICAgICAgICAgICAgIG15ICRwYXRoID0gY2Fub25wYXRoKCR0ZXN0KTsKICAgICAgICAgICAg
ICRwYXRoID1+IHMvXmh0dHBcL3Rlc3RzXC8vLzsKLSAgICAgICAgICAgIHByaW50IE9VVCAiaHR0
cDovLzEyNy4wLjAuMTokaHR0cGRQb3J0LyRwYXRoJHN1ZmZpeEV4cGVjdGVkSGFzaFxuIjsKKyAg
ICAgICAgICAgIHByaW50IE9VVCAiaHR0cDovLzEyNy4wLjAuMTokaHR0cGRQb3J0LyRwYXRoJHN1
ZmZpeFBpeGVsVGVzdFxuIjsKICAgICAgICAgfSBlbHNpZiAoJHRlc3QgPX4gL15odHRwXC90ZXN0
c1wvc3NsXC8vKSB7CiAgICAgICAgICAgICBteSAkcGF0aCA9IGNhbm9ucGF0aCgkdGVzdCk7CiAg
ICAgICAgICAgICAkcGF0aCA9fiBzL15odHRwXC90ZXN0c1wvLy87Ci0gICAgICAgICAgICBwcmlu
dCBPVVQgImh0dHBzOi8vMTI3LjAuMC4xOiRodHRwZFNTTFBvcnQvJHBhdGgkc3VmZml4RXhwZWN0
ZWRIYXNoXG4iOworICAgICAgICAgICAgcHJpbnQgT1VUICJodHRwczovLzEyNy4wLjAuMTokaHR0
cGRTU0xQb3J0LyRwYXRoJHN1ZmZpeFBpeGVsVGVzdFxuIjsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIG15ICR0ZXN0UGF0aCA9ICIkdGVzdERpcmVjdG9yeS8kdGVzdCI7CiAgICAgICAg
ICAgICBpZiAoaXNDeWd3aW4oKSkgewpAQCAtODAxLDcgKzgwNSw3IEBAIGZvciBteSAkdGVzdCAo
QHRlc3RzKSB7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICR0ZXN0UGF0
aCA9IGNhbm9ucGF0aCgkdGVzdFBhdGgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJp
bnQgT1VUICIkdGVzdFBhdGgkc3VmZml4RXhwZWN0ZWRIYXNoXG4iOworICAgICAgICAgICAgcHJp
bnQgT1VUICIkdGVzdFBhdGgkc3VmZml4UGl4ZWxUZXN0XG4iOwogICAgICAgICB9CiAgICAgfSBl
bHNlIHsKICAgICAgICAgbXkgJHRlc3RQYXRoID0gIiR0ZXN0RGlyZWN0b3J5LyR0ZXN0IjsKQEAg
LTgxMCw3ICs4MTQsNyBAQCBmb3IgbXkgJHRlc3QgKEB0ZXN0cykgewogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgJHRlc3RQYXRoID0gY2Fub25wYXRoKCR0ZXN0UGF0aCk7CiAgICAgICAg
IH0KLSAgICAgICAgcHJpbnQgT1VUICIkdGVzdFBhdGgkc3VmZml4RXhwZWN0ZWRIYXNoXG4iIGlm
IGRlZmluZWQgJHRlc3RQYXRoOworICAgICAgICBwcmludCBPVVQgIiR0ZXN0UGF0aCRzdWZmaXhQ
aXhlbFRlc3RcbiIgaWYgZGVmaW5lZCAkdGVzdFBhdGg7CiAgICAgfQogCiAgICAgIyBEdW1wUmVu
ZGVyVHJlZSBpcyBleHBlY3RlZCB0byBkdW1wIHR3byAiYmxvY2tzIiB0byBzdGRvdXQgZm9yIGVh
Y2ggdGVzdC4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvYmFzZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
YmFzZS5weQppbmRleCBhZDcwZjA0MmRlOWVjYjYwMDYzYmVhNmY1MGMyODViZjllZmQ5YzEyLi45
NDIxNTYyNGZlMjdlYTQyNWFhNzNlODkxNTc3Y2M1ZTZlOTkwZTI5IDEwMDc1NQotLS0gYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CkBAIC0xMjc3LDIxICsx
Mjc3LDkgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICAgICAgICAgIHJldHVybiBzdWl0
ZS5hcmdzCiAgICAgICAgIHJldHVybiBbXQogCi0gICAgZGVmIHN1cHBvcnRzX3N3aXRjaGluZ19w
aXhlbF90ZXN0c19wZXJfdGVzdChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd3
ZWJraXRfdGVzdF9ydW5uZXInKToKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJl
dHVybiBzZWxmLl9zdXBwb3J0c19zd2l0Y2hpbmdfcGl4ZWxfdGVzdHNfcGVyX3Rlc3QoKQotCi0g
ICAgZGVmIF9zdXBwb3J0c19zd2l0Y2hpbmdfcGl4ZWxfdGVzdHNfcGVyX3Rlc3Qoc2VsZik6Ci0g
ICAgICAgICMgRklYTUU6IGFsbCBwb3J0cyBzaG91bGQgc3VwcG9ydCBpdC4KLSAgICAgICAgcmV0
dXJuIEZhbHNlCi0KICAgICBkZWYgc2hvdWxkX3J1bl9hc19waXhlbF90ZXN0KHNlbGYsIHRlc3Rf
aW5wdXQpOgogICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0czoKICAgICAg
ICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBpZiBub3Qgc2VsZi5zdXBwb3J0c19zd2l0Y2hp
bmdfcGl4ZWxfdGVzdHNfcGVyX3Rlc3QoKToKLSAgICAgICAgICAgICMgQ2Fubm90IGRvIG1vcmUg
ZmlsdGVyaW5nIHdpdGhvdXQgdGhpcy4KLSAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAg
IGlmIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdF9kaXJlY3RvcmllczoKICAgICAgICAgICAgIHJl
dHVybiBhbnkodGVzdF9pbnB1dC50ZXN0X25hbWUuc3RhcnRzd2l0aChkaXJlY3RvcnkpIGZvciBk
aXJlY3RvcnkgaW4gc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0X2RpcmVjdG9yaWVzKQogICAgICAg
ICByZXR1cm4gc2VsZi5fc2hvdWxkX3J1bl9hc19waXhlbF90ZXN0KHRlc3RfaW5wdXQpCmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlci5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5Cmlu
ZGV4IDc4MTgyM2I4ZDY3MGE2ZWI4ZTUyZTA3NjhiZTY2NGIxMWQ2MzAzM2MuLjIwMjE1ODdmYmI0
ZGE2ZDU5YmFmMjY3OGNmMDAwMmM0ZTE3MmQ2MDcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5CkBAIC0yOTMsOCArMjkzLDYgQEAg
Y2xhc3MgRHJpdmVyKG9iamVjdCk6CiAKICAgICAgICAgY21kLmV4dGVuZChzZWxmLl9wb3J0Lmdl
dF9vcHRpb24oJ2FkZGl0aW9uYWxfZHJ0X2ZsYWcnLCBbXSkpCiAKLSAgICAgICAgaWYgcGl4ZWxf
dGVzdHMgYW5kIG5vdCBzZWxmLl9wb3J0LnN1cHBvcnRzX3N3aXRjaGluZ19waXhlbF90ZXN0c19w
ZXJfdGVzdCgpOgotICAgICAgICAgICAgY21kLmFwcGVuZCgnLS1waXhlbC10ZXN0cycpCiAgICAg
ICAgIGNtZC5leHRlbmQocGVyX3Rlc3RfYXJncykKIAogICAgICAgICBjbWQuYXBwZW5kKCctJykK
QEAgLTMzNSwxMSArMzMzLDkgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAKICAgICAgICAgYXNz
ZXJ0IG5vdCBkcml2ZXJfaW5wdXQuaW1hZ2VfaGFzaCBvciBkcml2ZXJfaW5wdXQuc2hvdWxkX3J1
bl9waXhlbF90ZXN0CiAKKyAgICAgICAgIyAnIGlzIHRoZSBzZXBhcmF0b3IgYmV0d2VlbiBhcmd1
bWVudHMuCiAgICAgICAgIGlmIGRyaXZlcl9pbnB1dC5zaG91bGRfcnVuX3BpeGVsX3Rlc3Q6Ci0g
ICAgICAgICAgICBpZiBzZWxmLl9wb3J0LnN1cHBvcnRzX3N3aXRjaGluZ19waXhlbF90ZXN0c19w
ZXJfdGVzdCgpOgotICAgICAgICAgICAgICAgICMgV2UgZGlkIG5vdCBzdGFydCB0aGUgZHJpdmVy
IHdpdGggLS1waXhlbC10ZXN0cywgaW5zdGVhZCB3ZSBzcGVjaWZ5IGl0IHBlciB0ZXN0LgotICAg
ICAgICAgICAgICAgICMgIiciIGlzIHRoZSBzZXBhcmF0b3Igb2YgY29tbWFuZCBmaWVsZHMuCi0g
ICAgICAgICAgICAgICAgY29tbWFuZCArPSAiJyIgKyAnLS1waXhlbC10ZXN0JworICAgICAgICAg
ICAgY29tbWFuZCArPSAiJy0tcGl4ZWwtdGVzdCIKICAgICAgICAgaWYgZHJpdmVyX2lucHV0Lmlt
YWdlX2hhc2g6CiAgICAgICAgICAgICBjb21tYW5kICs9ICInIiArIGRyaXZlcl9pbnB1dC5pbWFn
ZV9oYXNoCiAgICAgICAgIHJldHVybiBjb21tYW5kICsgIlxuIgpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9xdC5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcXQucHkKaW5kZXggZTIzOWM3ZTNhYWY2ZjYwMmIw
YzM1MWVjMjJkY2ZhNjgwNjRlYTI2OS4uNmU3YjA5ODhkNWE3N2VmYzVmYzM3MmZhNzUxNjc4MzQw
MGE2OWYwOCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9xdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L3F0LnB5CkBAIC0xODQsNiArMTg0LDMgQEAgY2xhc3MgUXRQb3J0KFBvcnQpOgogICAgICAgICAg
ICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIHJldHVybiByZXN1bHQKIAotICAgIGRlZiBfc3VwcG9y
dHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Blcl90ZXN0KHNlbGYpOgotICAgICAgICByZXR1cm4g
VHJ1ZQotCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L3Rlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rl
c3QucHkKaW5kZXggNTcxNDY2MWZkMjAzNjc2ODM5ZDZjNzZmNDczNWJlYzgxMzJiODliOC4uMGNk
MTcxZjNiY2E2YWJlYmRiMjFiOThlMmE0NWMyMWExNGE5MDExMiAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5CisrKyBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQpAQCAtNTEzLDEwICs1MTMs
NiBAQCBjbGFzcyBUZXN0UG9ydChQb3J0KToKICAgICAgICAgICAgIFZpcnR1YWxUZXN0U3VpdGUo
J3ZpcnR1YWwvc2tpcHBlZCcsICdmYWlsdXJlcy9leHBlY3RlZCcsIFsnLS12aXJ0dWFsLWFyZzIn
XSksCiAgICAgICAgIF0KIAotICAgIGRlZiBzdXBwb3J0c19zd2l0Y2hpbmdfcGl4ZWxfdGVzdHNf
cGVyX3Rlc3Qoc2VsZik6Ci0gICAgICAgICMgTGV0IGl0IHRydWUgc28gd2UgY2FuIHRlc3QgdGhl
IC0tcGl4ZWwtdGVzdC1kaXJlY3Rvcnkgb3B0aW9uLgotICAgICAgICByZXR1cm4gVHJ1ZQotCiAK
IGNsYXNzIFRlc3REcml2ZXIoRHJpdmVyKToKICAgICAiIiJUZXN0L0R1bW15IGltcGxlbWVudGF0
aW9uIG9mIHRoZSBEdW1wUmVuZGVyVHJlZSBpbnRlcmZhY2UuIiIiCmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IGQwMjMyOTkyNzMxZDFiYzk3MTI2OGZjMzkz
MWY0YjcwYWIzNjdhYzcuLmUxZWQ1ZDlmODUyZmRkZTNiOTFiMjdhOGE0MDJlNDY0ZjgwYjU1Mjcg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCisr
KyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCkBAIC0zNSw3ICsz
NSwxMSBAQAogI2luY2x1ZGUgPFdlYktpdDIvV0tQYWdlUHJpdmF0ZS5oPgogI2luY2x1ZGUgPFdl
YktpdDIvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLUmV0YWlu
UHRyLmg+CisjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRl
IDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZz4KICNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtNjcsOCArNzEs
NyBAQCBUZXN0Q29udHJvbGxlciYgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpCiB9CiAKIFRlc3RD
b250cm9sbGVyOjpUZXN0Q29udHJvbGxlcihpbnQgYXJnYywgY29uc3QgY2hhciogYXJndltdKQot
ICAgIDogbV9kdW1wUGl4ZWxzRm9yQWxsVGVzdHMoZmFsc2UpCi0gICAgLCBtX3ZlcmJvc2UoZmFs
c2UpCisgICAgOiBtX3ZlcmJvc2UoZmFsc2UpCiAgICAgLCBtX3ByaW50U2VwYXJhdG9ycyhmYWxz
ZSkKICAgICAsIG1fdXNpbmdTZXJ2ZXJNb2RlKGZhbHNlKQogICAgICwgbV9nY0JldHdlZW5UZXN0
cyhmYWxzZSkKQEAgLTI2NywxMCArMjcwLDYgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6aW5pdGlh
bGl6ZShpbnQgYXJnYywgY29uc3QgY2hhciogYXJndltdKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoYXJndW1lbnQgPT0gIi0tcGl4ZWwtdGVzdHMiKSB7
Ci0gICAgICAgICAgICBtX2R1bXBQaXhlbHNGb3JBbGxUZXN0cyA9IHRydWU7Ci0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgfQogICAgICAgICBpZiAoYXJndW1lbnQgPT0gIi0tdmVyYm9z
ZSIpIHsKICAgICAgICAgICAgIG1fdmVyYm9zZSA9IHRydWU7CiAgICAgICAgICAgICBjb250aW51
ZTsKQEAgLTUwNCw3ICs1MDMsODkgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRv
Q29uc2lzdGVudFZhbHVlcygpCiAgICAgcmV0dXJuIG1fZG9uZVJlc2V0dGluZzsKIH0KIAotYm9v
bCBUZXN0Q29udHJvbGxlcjo6cnVuVGVzdChjb25zdCBjaGFyKiB0ZXN0KQorc3RydWN0IFRlc3RD
b21tYW5kIHsKKyAgICBUZXN0Q29tbWFuZCgpIDogc2hvdWxkRHVtcFBpeGVscyhmYWxzZSkgeyB9
CisKKyAgICBzdGQ6OnN0cmluZyBwYXRoT3JVUkw7CisgICAgYm9vbCBzaG91bGREdW1wUGl4ZWxz
OworICAgIHN0ZDo6c3RyaW5nIGV4cGVjdGVkUGl4ZWxIYXNoOworfTsKKworY2xhc3MgQ29tbWFu
ZFRva2VuaXplciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ29tbWFuZFRva2VuaXplcihjb25z
dCBzdGQ6OnN0cmluZyYgaW5wdXQpCisgICAgICAgIDogbV9pbnB1dChpbnB1dCkKKyAgICAgICAg
LCBtX3Bvc05leHRTZXBhcmF0b3IoMCkKKyAgICB7CisgICAgICAgIHB1bXAoKTsKKyAgICB9CisK
KyAgICBib29sIGhhc05leHQoKSBjb25zdDsKKyAgICBzdGQ6OnN0cmluZyBuZXh0KCk7CisKK3By
aXZhdGU6CisgICAgdm9pZCBwdW1wKCk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIga1NlcGFyYXRv
ciA9ICdcJyc7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG1faW5wdXQ7CisgICAgc3RkOjpzdHJp
bmcgbV9uZXh0OworICAgIHNpemVfdCBtX3Bvc05leHRTZXBhcmF0b3I7Cit9OworCit2b2lkIENv
bW1hbmRUb2tlbml6ZXI6OnB1bXAoKQoreworICAgIGlmIChtX3Bvc05leHRTZXBhcmF0b3IgPT0g
c3RkOjpzdHJpbmc6Om5wb3MgfHwgbV9wb3NOZXh0U2VwYXJhdG9yID09IG1faW5wdXQuc2l6ZSgp
KSB7CisgICAgICAgIG1fbmV4dCA9IHN0ZDo6c3RyaW5nKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgc2l6ZV90IHN0YXJ0ID0gbV9wb3NOZXh0U2VwYXJhdG9yID8gbV9wb3NOZXh0U2Vw
YXJhdG9yICsgMSA6IDA7CisgICAgbV9wb3NOZXh0U2VwYXJhdG9yID0gbV9pbnB1dC5maW5kKGtT
ZXBhcmF0b3IsIHN0YXJ0KTsKKyAgICBzaXplX3Qgc2l6ZSA9IG1fcG9zTmV4dFNlcGFyYXRvciA9
PSBzdGQ6OnN0cmluZzo6bnBvcyA/IHN0ZDo6c3RyaW5nOjpucG9zIDogbV9wb3NOZXh0U2VwYXJh
dG9yIC0gc3RhcnQ7CisgICAgbV9uZXh0ID0gc3RkOjpzdHJpbmcobV9pbnB1dCwgc3RhcnQsIHNp
emUpOworfQorCitzdGQ6OnN0cmluZyBDb21tYW5kVG9rZW5pemVyOjpuZXh0KCkKK3sKKyAgICBB
U1NFUlQoaGFzTmV4dCgpKTsKKworICAgIHN0ZDo6c3RyaW5nIG9sZE5leHQgPSBtX25leHQ7Cisg
ICAgcHVtcCgpOworICAgIHJldHVybiBvbGROZXh0OworfQorCitib29sIENvbW1hbmRUb2tlbml6
ZXI6Omhhc05leHQoKSBjb25zdAoreworICAgIHJldHVybiAhbV9uZXh0LmVtcHR5KCk7Cit9CisK
K05PX1JFVFVSTiBzdGF0aWMgdm9pZCBkaWUoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0TGluZSkK
K3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlVuZXhwZWN0ZWQgaW5wdXQgbGluZTogJXNcbiIsIGlu
cHV0TGluZS5jX3N0cigpKTsKKyAgICBleGl0KDEpOworfQorCitUZXN0Q29tbWFuZCBwYXJzZUlu
cHV0TGluZShjb25zdCBzdGQ6OnN0cmluZyYgaW5wdXRMaW5lKQoreworICAgIFRlc3RDb21tYW5k
IHJlc3VsdDsKKyAgICBDb21tYW5kVG9rZW5pemVyIHRva2VuaXplcihpbnB1dExpbmUpOworICAg
IGlmICghdG9rZW5pemVyLmhhc05leHQoKSkKKyAgICAgICAgZGllKGlucHV0TGluZSk7CisKKyAg
ICByZXN1bHQucGF0aE9yVVJMID0gdG9rZW5pemVyLm5leHQoKTsKKyAgICBpZiAoIXRva2VuaXpl
ci5oYXNOZXh0KCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBzdGQ6OnN0cmluZyBh
cmcgPSB0b2tlbml6ZXIubmV4dCgpOworICAgIGlmIChhcmcgIT0gc3RkOjpzdHJpbmcoIi1wIikg
JiYgYXJnICE9IHN0ZDo6c3RyaW5nKCItLXBpeGVsLXRlc3QiKSkKKyAgICAgICAgZGllKGlucHV0
TGluZSk7CisgICAgcmVzdWx0LnNob3VsZER1bXBQaXhlbHMgPSB0cnVlOworCisgICAgaWYgKHRv
a2VuaXplci5oYXNOZXh0KCkpCisgICAgICAgIHJlc3VsdC5leHBlY3RlZFBpeGVsSGFzaCA9IHRv
a2VuaXplci5uZXh0KCk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIFRlc3RDb250
cm9sbGVyOjpydW5UZXN0KGNvbnN0IGNoYXIqIGlucHV0TGluZSkKIHsKICAgICBpZiAoIXJlc2V0
U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMoKSkgewogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTUxNywz
MiArNTk4LDEzIEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJ1blRlc3QoY29uc3QgY2hhciogdGVz
dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGJvb2wgZHVtcFBpeGVsc1Rl
c3QgPSBtX2R1bXBQaXhlbHNGb3JBbGxUZXN0czsKLSAgICBzdGQ6OnN0cmluZyBjb21tYW5kKHRl
c3QpOwotICAgIHN0ZDo6c3RyaW5nIHBhdGhPclVSTCA9IGNvbW1hbmQ7Ci0gICAgc3RkOjpzdHJp
bmcgZXhwZWN0ZWRQaXhlbEhhc2g7Ci0gICAgc2l6ZV90IGZpcnN0U2VwYXJhdG9yUG9zID0gY29t
bWFuZC5maW5kX2ZpcnN0X29mKCdcJycpOwotICAgIHNpemVfdCBzZWNvbmRTZXBhcmF0b3JQb3Mg
PSBjb21tYW5kLmZpbmRfZmlyc3Rfb2YoJ1wnJywgZmlyc3RTZXBhcmF0b3JQb3MgKyAxKTsKLSAg
ICBpZiAoZmlyc3RTZXBhcmF0b3JQb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKLSAgICAgICAg
cGF0aE9yVVJMID0gc3RkOjpzdHJpbmcoY29tbWFuZCwgMCwgZmlyc3RTZXBhcmF0b3JQb3MpOwot
ICAgICAgICBzaXplX3QgcGl4ZWxIYXNoUG9zID0gZmlyc3RTZXBhcmF0b3JQb3MgKyAxOwotCi0g
ICAgICAgIC8vIE5SV1QgcGFzc2VzIC0tcGl4ZWwtdGVzdCBpZiB3ZSBzaG91bGQgZHVtcCBwaXhl
bHMgZm9yIHRoZSB0ZXN0LgotICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBleHBlY3RlZFBpeGVs
VGVzdEFyZygiLS1waXhlbC10ZXN0Iik7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIGFyZ1Rlc3QgPSBz
dGQ6OnN0cmluZyhjb21tYW5kLCBmaXJzdFNlcGFyYXRvclBvcyArIDEsIGV4cGVjdGVkUGl4ZWxU
ZXN0QXJnLnNpemUoKSk7Ci0gICAgICAgIGlmIChhcmdUZXN0ID09IGV4cGVjdGVkUGl4ZWxUZXN0
QXJnKSB7Ci0gICAgICAgICAgICBkdW1wUGl4ZWxzVGVzdCA9IHRydWU7Ci0gICAgICAgICAgICBw
aXhlbEhhc2hQb3MgPSBzZWNvbmRTZXBhcmF0b3JQb3MgPT0gc3RkOjpzdHJpbmc6Om5wb3MgPyBz
dGQ6OnN0cmluZzo6bnBvcyA6IHNlY29uZFNlcGFyYXRvclBvcyArIDE7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKHBpeGVsSGFzaFBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcyAmJiBwaXhlbEhhc2hQ
b3MgPCBjb21tYW5kLnNpemUoKSkKLSAgICAgICAgICAgIGV4cGVjdGVkUGl4ZWxIYXNoID0gc3Rk
OjpzdHJpbmcoY29tbWFuZCwgcGl4ZWxIYXNoUG9zKTsKLSAgICB9CisgICAgVGVzdENvbW1hbmQg
Y29tbWFuZCA9IHBhcnNlSW5wdXRMaW5lKHN0ZDo6c3RyaW5nKGlucHV0TGluZSkpOwogCiAgICAg
bV9zdGF0ZSA9IFJ1bm5pbmdUZXN0OwogCi0gICAgbV9jdXJyZW50SW52b2NhdGlvbiA9IGFkb3B0
UHRyKG5ldyBUZXN0SW52b2NhdGlvbihwYXRoT3JVUkwpKTsKLSAgICBpZiAoZHVtcFBpeGVsc1Rl
c3QpCi0gICAgICAgIG1fY3VycmVudEludm9jYXRpb24tPnNldElzUGl4ZWxUZXN0KGV4cGVjdGVk
UGl4ZWxIYXNoKTsKKyAgICBtX2N1cnJlbnRJbnZvY2F0aW9uID0gYWRvcHRQdHIobmV3IFRlc3RJ
bnZvY2F0aW9uKGNvbW1hbmQucGF0aE9yVVJMKSk7CisgICAgaWYgKGNvbW1hbmQuc2hvdWxkRHVt
cFBpeGVscykKKyAgICAgICAgbV9jdXJyZW50SW52b2NhdGlvbi0+c2V0SXNQaXhlbFRlc3QoY29t
bWFuZC5leHBlY3RlZFBpeGVsSGFzaCk7CiAKICAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5pbnZv
a2UoKTsKICAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL1Rlc3RDb250cm9sbGVyLmgKaW5kZXggYTk5ZTE2ZWE4NzAyN2MzNGYwN2I4OTYyYjA5OGMy
MzM0ZDk0MjFiZC4uNWUyMGQ2MTFiNDY5ZGYxODdjMzc4ZWU2MmVkMGNhYzMxOGRhZWQyMSAxMDA2
NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCisrKyBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaApAQCAtMTA0LDcgKzEwNCw2IEBA
IHByaXZhdGU6CiAKICAgICBPd25QdHI8VGVzdEludm9jYXRpb24+IG1fY3VycmVudEludm9jYXRp
b247CiAKLSAgICBib29sIG1fZHVtcFBpeGVsc0ZvckFsbFRlc3RzOwogICAgIGJvb2wgbV92ZXJi
b3NlOwogICAgIGJvb2wgbV9wcmludFNlcGFyYXRvcnM7CiAgICAgYm9vbCBtX3VzaW5nU2VydmVy
TW9kZTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>