<?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>217297</bug_id>
          
          <creation_ts>2020-10-04 09:29:58 -0700</creation_ts>
          <short_desc>[Testing] Add support for per-directory overriding of testing options via new TestOptions.txt files</short_desc>
          <delta_ts>2020-10-11 11:48:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>217390</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>ap</cc>
    
    <cc>clopez</cc>
    
    <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gsnedders</cc>
    
    <cc>hi</cc>
    
    <cc>jbedard</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1694546</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-04 09:29:58 -0700</bug_when>
    <thetext>[Testing] Add support for per-directory overriding of testing options via new TestOptions.txt files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1694552</commentid>
    <comment_count>1</comment_count>
      <attachid>410471</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-04 10:30:16 -0700</bug_when>
    <thetext>Created attachment 410471
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1694553</commentid>
    <comment_count>2</comment_count>
      <attachid>410472</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-04 10:36:02 -0700</bug_when>
    <thetext>Created attachment 410472
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1694554</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-04 10:58:59 -0700</bug_when>
    <thetext>Aw, bummer, looks like some of builders don&apos;t support &lt;filesystem&gt;. 

I guess I have two options. Add a &lt;filesystem&gt; shim like I have done in the past for &lt;optional&gt; and &lt;variant&gt; (among others), or just re-write the bit of this that uses &lt;filesystem&gt; to use something else. Going to probably try the shim.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1694556</commentid>
    <comment_count>4</comment_count>
      <attachid>410474</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-04 11:24:43 -0700</bug_when>
    <thetext>Created attachment 410474
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1694557</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-04 11:25:47 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #4)
&gt; Created attachment 410474 [details]
&gt; Patch

Proof of concept &lt;filesystem&gt; shim (should only ever be needed on macOS). If this works, will move it WTF in a separate change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1694559</commentid>
    <comment_count>6</comment_count>
      <attachid>410476</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-04 11:35:23 -0700</bug_when>
    <thetext>Created attachment 410476
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1694563</commentid>
    <comment_count>7</comment_count>
      <attachid>410479</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-04 12:17:36 -0700</bug_when>
    <thetext>Created attachment 410479
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1694566</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2020-10-04 13:11:08 -0700</bug_when>
    <thetext>Although I hate the general idea of special case directories, moving from C++ code in WebKitTestRunner to TestOptions.txt is an improvement.

One thing to consider here is to relaunch WebKitTestRunner and DumpRenderTree when moving to a directory with different options. There is fragile code in WKTR for re-creating a view and relaunching WebContent process when options change, which is also largely incompatible with DRT.

&gt; // This file is dual licensed under the MIT and the University of Illinois Open
&gt; // Source Licenses. See LICENSE.TXT for details.

Are these licenses allowed in our repo? They are not listed on the patch upload page:

If you are sending in a new file for inclusion in WebKit (no code copied from another source), the preferred license is BSD, but LGPL 2.1 is an option as well. Please include your copyright (name and year) and license preference (BSD or LGPL 2.1). By clicking below you agree that your file is licensed under either the BSD license or LGPL 2.1, as indicated in your file.

&gt; return pathContains(pathOrURL, &quot;viewport/&quot;) &amp;&amp; !pathContains(pathOrURL, &quot;visual-viewport/&quot;);

I&apos;m surprised that fast/visual-viewport tests are passing without TestOptions

&gt; webkit-test-runner [ isSVGTest=true ]

This needs a better name. SVG has nothing to do with the effect it has, and there are lots of SVG tests that don&apos;t need this option.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1694568</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-04 13:45:21 -0700</bug_when>
    <thetext>(In reply to Alexey Proskuryakov from comment #8)
&gt; Although I hate the general idea of special case directories, moving from
&gt; C++ code in WebKitTestRunner to TestOptions.txt is an improvement.

Yeah, I&apos;m not a fan of more manifests either. We may want to limit the use to only imported test suites, since all others should probably be able to use the comment based test headers.

&gt; 
&gt; One thing to consider here is to relaunch WebKitTestRunner and
&gt; DumpRenderTree when moving to a directory with different options. There is
&gt; fragile code in WKTR for re-creating a view and relaunching WebContent
&gt; process when options change, which is also largely incompatible with DRT.

This change only currently changes WTR, and only allows view/context reuse if the TestOptions match. It&apos;s almost the same as the old code, but a little more pessamistic since it no longer considers no value and default value to be the same thing. That said, it doesn&apos;t actually result in any change of view/context reuse in actual tests we have.

&gt; 
&gt; &gt; // This file is dual licensed under the MIT and the University of Illinois Open
&gt; &gt; // Source Licenses. See LICENSE.TXT for details.
&gt; 
&gt; Are these licenses allowed in our repo? They are not listed on the patch
&gt; upload page:
&gt; 
&gt; If you are sending in a new file for inclusion in WebKit (no code copied
&gt; from another source), the preferred license is BSD, but LGPL 2.1 is an
&gt; option as well. Please include your copyright (name and year) and license
&gt; preference (BSD or LGPL 2.1). By clicking below you agree that your file is
&gt; licensed under either the BSD license or LGPL 2.1, as indicated in your file.

The patch is not up for review yet (hence no r?). Just testing something out. That said, the MIT license is usually considered to be comparable with BSD in this regard, and I believe we have historically allowed copying code in from projects with MIT licenses (though I may be mistaken in my memory).

&gt; 
&gt; &gt; return pathContains(pathOrURL, &quot;viewport/&quot;) &amp;&amp; !pathContains(pathOrURL, &quot;visual-viewport/&quot;);
&gt; 
&gt; I&apos;m surprised that fast/visual-viewport tests are passing without TestOptions

Note the ! for visual-viewport/.

&gt; 
&gt; &gt; webkit-test-runner [ isSVGTest=true ]
&gt; 
&gt; This needs a better name. SVG has nothing to do with the effect it has, and
&gt; there are lots of SVG tests that don&apos;t need this option.

Yeah, it&apos;s a bad name. Should probably just add the ability to override width and height, which is what it actually wants.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1694569</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-04 13:52:54 -0700</bug_when>
    <thetext>&gt; &gt; &gt; // This file is dual licensed under the MIT and the University of Illinois Open
&gt; &gt; &gt; // Source Licenses. See LICENSE.TXT for details.
&gt; &gt; 
&gt; &gt; Are these licenses allowed in our repo? They are not listed on the patch
&gt; &gt; upload page:
&gt; &gt; 
&gt; &gt; If you are sending in a new file for inclusion in WebKit (no code copied
&gt; &gt; from another source), the preferred license is BSD, but LGPL 2.1 is an
&gt; &gt; option as well. Please include your copyright (name and year) and license
&gt; &gt; preference (BSD or LGPL 2.1). By clicking below you agree that your file is
&gt; &gt; licensed under either the BSD license or LGPL 2.1, as indicated in your file.
&gt; 
&gt; The patch is not up for review yet (hence no r?). Just testing something
&gt; out. That said, the MIT license is usually considered to be comparable with
&gt; BSD in this regard, and I believe we have historically allowed copying code
&gt; in from projects with MIT licenses (though I may be mistaken in my memory).

Doing a quip grep of the source code looks like we have a quite a bit of MIT source (see WebInspectorUI/UserInterface/External/CodeMirror, ThirdParty/ANGLE, ThirdParty/libwebrtc, etc.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1694570</commentid>
    <comment_count>11</comment_count>
      <attachid>410482</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-04 14:07:01 -0700</bug_when>
    <thetext>Created attachment 410482
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695168</commentid>
    <comment_count>12</comment_count>
      <attachid>410642</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-06 08:50:21 -0700</bug_when>
    <thetext>Created attachment 410642
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695176</commentid>
    <comment_count>13</comment_count>
      <attachid>410642</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-06 09:14:12 -0700</bug_when>
    <thetext>Comment on attachment 410642
Patch

Most of this is a refactor, so one option would be to just land the refactor, and then discuss the per-directory TestOptions.txt files in a different bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695181</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-06 09:29:22 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #13)
&gt; Most of this is a refactor, so one option would be to just land the
&gt; refactor, and then discuss the per-directory TestOptions.txt files in a
&gt; different bug.

I like that idea. (FWIW, I won’t have a chance to review this until this evening.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695188</commentid>
    <comment_count>15</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-06 09:52:49 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #14)
&gt; (In reply to Sam Weinig from comment #13)
&gt; &gt; Most of this is a refactor, so one option would be to just land the
&gt; &gt; refactor, and then discuss the per-directory TestOptions.txt files in a
&gt; &gt; different bug.
&gt; 
&gt; I like that idea. (FWIW, I won’t have a chance to review this until this
&gt; evening.)

Ok. Cool. I extracted most of it in a patch for https://bugs.webkit.org/show_bug.cgi?id=217390. No rush on a timeline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695588</commentid>
    <comment_count>16</comment_count>
      <attachid>410759</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-07 10:39:26 -0700</bug_when>
    <thetext>Created attachment 410759
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695589</commentid>
    <comment_count>17</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2020-10-07 10:40:12 -0700</bug_when>
    <thetext>This patch modifies the imported WPT tests. Please ensure that any changes on the tests (not coming from a WPT import) are exported to WPT. Please see https://trac.webkit.org/wiki/WPTExportProcess</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695592</commentid>
    <comment_count>18</comment_count>
      <attachid>410760</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-07 10:58:27 -0700</bug_when>
    <thetext>Created attachment 410760
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695594</commentid>
    <comment_count>19</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-07 11:02:52 -0700</bug_when>
    <thetext>Ok, the patch is now tiny (in comparison), so we can have a more concentrated conversation about the change.

There are two goals here:

1) Remove hardcoded, path based, configuration of tests that lives in WebKitTestRunner.
2) Add a way to set options on a test without modifying the test itself, for imported test cases like those from WPT that we don&apos;t want to modify.


Some of the changes for #1 we could do by modifying a bunch of tests (e.g. we could update all the tests in fast/viewports/ to specify useFlexibleViewport=true, and perhaps we should), but we couldn&apos;t do all of them, since the majority affect imported tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1695598</commentid>
    <comment_count>20</comment_count>
      <attachid>410761</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-07 11:05:08 -0700</bug_when>
    <thetext>Created attachment 410761
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696637</commentid>
    <comment_count>21</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-10-11 09:30:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/70183206&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1696667</commentid>
    <comment_count>22</comment_count>
      <attachid>411058</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-11 11:48:00 -0700</bug_when>
    <thetext>Created attachment 411058
Patch</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410471</attachid>
            <date>2020-10-04 10:30:16 -0700</date>
            <delta_ts>2020-10-04 10:37:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217297-20201004103016.patch</filename>
            <type>text/plain</type>
            <size>103754</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2Nzk0NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE4NCBAQAorMjAyMC0xMC0wNCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgW1Rlc3RpbmddIEFkZCBzdXBwb3J0IGZvciBwZXItZGlyZWN0b3J5IG92ZXJyaWRp
bmcgb2YgdGVzdGluZyBvcHRpb25zIHZpYSBuZXcgVGVzdE9wdGlvbnMudHh0IGZpbGVzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcyOTcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGludHJvZHVj
ZXMgYSBuZXcgY29uY2VwdCBmb3Igd2Via2l0IHRlc3RzICh0aG9zZSB3aXRoaW4gdGhlIExheW91
dFRlc3RzIGRpcmVjdG9yeSkKKyAgICAgICAgdGhhdCBleHRlbmRzIHRoZSBleGlzdGluZyB0ZXN0
LWhlYWRlciBiYXNlZCBjb25maWd1cmF0aW9uIG9mIHRlc3Qgb3B0aW9ucyAodGhvc2UgY29tbWVu
dHMKKyAgICAgICAgYXQgdGhlIHRvcCBvZiBzb21ldCB0ZXN0IGZpbGVzIHRoYXQgbG9vayBsaWtl
ICJ3ZWJraXQtdGVzdC1ydW5uZXIgWyAuLi4gXSIpIHRvIGFsc28gYWxsb3cKKyAgICAgICAgZGly
ZWN0b3J5IHdpZGUgb3ZlcnJpZGluZyBvZiB0ZXN0IG9wdGlvbnMgdmlhIGEgbmV3IFRlc3RPcHRp
b25zLnR4dCBmaWxlLiBUaGVzZSBmaWxlcyBhcmUKKyAgICAgICAgZm9yIG5vdyBleHBlY3RlZCB0
byB1c2UgdGhlIHNhbWUgIndlYmtpdC10ZXN0LXJ1bm5lciBbIC4uLiBdIiBzeW50YXggYXMgdGhl
IHRlc3QtaGVhZGVyIGJhc2VkCisgICAgICAgIG9uZXMgZm9yIGNvbnNpc3RlbmN5IGFuZCBzaW1w
bGljaXR5IG9mIGltcGxlbWVudGF0aW9uLCBidXQgaW4gdGhlIGZ1dHVyZSB3ZSBtYXkgZGVjaWRl
IGl0CisgICAgICAgIG1ha2VzIG1vcmUgc2Vuc2UgdG8gdXRpbGl6ZSB0aGUgYWRkaXRpb25hbCBz
cGFjZS4KKworICAgICAgICBOb3cgdGhhdCB3ZSBoYXZlIGV2ZW4gbW9yZSBzb3VyY2VzIG9mIHRl
c3Qgb3B0aW9ucyBjb21pbmcgaW4sIHdlIG5lZWQgdG8gaGF2ZSBhIGRlZmluZWQgc2V0CisgICAg
ICAgIG9mIHJ1bGVzIGZvciBpbiB3aGljaCBvcmRlciBvcHRpb25zIHRha2UgcHJlY2VkZW5jZS4g
VGhlIG9yZGVyIGlzIChmcm9tIGxlYXN0IHRvIG1vc3QpOgorICAgICAgICAKKyAgICAgICAgLSBH
bG9iYWwgZmVhdHVyZXMgcGFzc2VkIHRvIFdlYktpdFRlc3RSdW5uZXIgdmlhIHRoZSBjb21tYW5k
IGxpbmUgKGUuZy4gLS1zaG93LXRvdWNoZXMpCisgICAgICAgIC0gSGFyZGNvZGVkIGZlYXR1cmVz
IGJhc2VkIG9uIHRoZSBwYXRoIG9mIHRoZSB0ZXN0IGJlaW5nIHJ1biAoaG9wZWZ1bGx5IHdlIGNh
biByZW1vdmUgYWxsIHNvb24pCisgICAgICAgIC0gSGFyZGNvZGVkIHBsYXRmb3JtIHNwZWNpZmlj
IGRlZmF1bHRzIChjdXJyZW50bHkgb25seSB1c2VkIGJ5IG1hY09TIGZvciB1c2VUaHJlYWRlZFNj
cm9sbGluZykuCisgICAgICAgIC0gRmVhdHVyZXMgZnJvbSBUZXN0T3B0aW9ucy50eHQgZmlsZXMs
IHdpdGggdGhlIG1vc3QgZGlyZWN0b3JpZXMgY2xvc2VyIHRvIC4vTGF5b3V0VGVzdHMgdGFrZWlu
ZworICAgICAgICAgIGxlc3MgcHJlY2VkZW5jZSB0aGFuIHRob3NlIGNsb3NlciB0byB0aGUgdGVz
dCBmaWxlIChlLmcuIGFuIG9wdGlvbiBpbiAKKyAgICAgICAgICAuL0xheW91dFRlc3RzL2Zhc3Qv
Zm9ybXMvVGVzdE9wdGlvbnMudHh0IHdpbGwgd2luIG92ZXIgb25lIGluIC4vTGF5b3V0VGVzdHMv
ZmFzdC9UZXN0T3B0aW9ucy50eHQpLgorICAgICAgICAtIEZlYXR1cmVzIGZyb20gdGhlIHRlc3Qg
aGVhZGVycyB3aXRoaW4gdGhlIHRlc3QgaXRzZWxmLgorICAgICAgICAtIEZpbmFsbHksIGEgc2Vj
b25kIGNoYW5jZSBmb3IgbW9yZSBwbGF0Zm9ybSBzcGVjaWZpYyBkZWZhdWx0cyAoY3VycmVubHkg
b25seSB1c2VkIHRoZSBjb2NvYSBwb3J0cworICAgICAgICAgIGZvciBzZXR0aW5nIGVuYWJsZVBy
b2Nlc3NTd2FwT25OYXZpZ2F0aW9uIGFuZCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiBi
YXNlZCBvbiBOU1VzZXJEZWZhdWx0cy4pCisgICAgICAgIAorICAgICAgICBIb3BlZnVsbHkgaW4g
dGhlIGZ1dHVyZSwgd2Ugd2lsbCBiZSBhYmxlIHRvIHNpbXBsaWZ5IHRoYXQgYXMgd2UgcmVtb3Zl
IHNvbWUgb2YgdGhlc2UgbGV2ZWxzLCBwZXJoYXBzCisgICAgICAgIGJ5IGV4dGVuZGluZyBUZXN0
T3B0aW9ucy50eHQgdG8gYmUgYWJsZSB0byBzZXQgcGxhdGZvcm0gc3BlY2ZpYyBvdmVycmlkZXMu
CisKKyAgICAgICAgVG8gbWFrZSB0aGlzIGNoYW5nZSB3b3JrLCBhbmQgcGF2ZSB0aGUgd2F5IGZv
ciBmdXR1cmUgYXV0b2dlbmVyYXRpb24gb2Ygc29tZSBvZiB0aGVzZSB0ZXN0IG9wdGlvbnMsCisg
ICAgICAgIHRoZSBUZXN0T3B0aW9ucyBzdHJ1Y3QgKG5vdyBjbGFzcykgd2FzIG92ZXJoYXVsZWQu
IEluc3RlYWQgb2Ygc3RvcmluZyB0aGUgc3RhdGUgaXRzZWxmLCBpdCBUZXN0T3B0aW9ucworICAg
ICAgICBpcyBub3cgYW4gaW1tdXRhYmxlIG93bmVyIG9mIGEgVGVzdEZlYXR1cmVzIG9iamVjdC4g
VGVzdEZlYXR1cmVzIGlzIGEgc2ltcGxlIHN0cnVjdCB0aGF0IGNvbnRhaW5zIG1hcHMgCisgICAg
ICAgIG9mIG9wdGlvbiBrZXlzIHRvIHZhbHVlcyBhbmQgY2FuIGJlIG1lcmdlZCB3aXRoIG90aGVy
IFRlc3RGZWF0dXJlcyBvYmplY3RzLiBUZXN0T3B0aW9ucyB0YWtlcyBhIAorICAgICAgICBUZXN0
RmVhdHVyZXMgYXQgY29uc3RydWN0aW9uLCBhbmQgZXhwb3NlcyBnZXR0ZXJzIGZvciBhbGwga2V5
cywgYXMgd2VsbCBhcyBkZWZhdWx0cyBmb3Igd2hlbiB0aGV5IGFyZQorICAgICAgICBub3QgaW4g
dGhlIG1hcHMuIEluIGZ1dHVyZSBjaGFuZ2VzLCBJIHdvdWxkIGxpa2UgdG8gcmVtb3ZlIG1hbnkg
b2YgdGhlc2UgKHRoZSBvbmVzIHRoYXQgY29ycmVzcG9uZAorICAgICAgICB3aXRoIFdlYktpdCBw
cmVmZXJlbmNlcyBhbnl3YXkpIGFuZCBoYXZlIHRoZSBrZXlzIGFuZCB2YWx1ZXMgYXV0b21hdGlj
YWxseSBkZWFsdCB3aXRoIGJ5IFdLUHJlZmVyZW5jZXMuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL09wdGlvbnMuY3BwOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5o
OgorICAgICAgICBTd2l0Y2ggdG8gc3RkOjp1bm9yZGVyZWRfbWFwIGZvciBjb25zaXN0ZW5jeSBh
bmQgZWFzZSBvZiBjb252ZXJzaW9uLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9QbGF0
Zm9ybVdlYlZpZXcuaDoKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3Ojp2aWV3U3VwcG9y
dHNPcHRpb25zIGNvbnN0KToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3IFRlc3RPcHRpb25z
IGZ1bmN0aW9ucy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25z
Lmg6CisgICAgICAgIChXVFI6OnRvV0spOgorICAgICAgICAoV1RSOjp0b1dURlN0cmluZyk6Cisg
ICAgICAgIEFkZCBjb252ZXJzaW9ucyBmb3Igc3RkOjpzdHJpbmcuCisKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjppbml0
aWFsaXplKToKKyAgICAgICAgUmVwbGFjZSBzb21lIGJvb2xzIHdpdGggYSBuZXcgZ2xvYmFsIFRl
c3RGZWF0dXJlcyBpbnN0YW5jZSB0aGF0IGZvcm1zIHRoZSBiYXNlIG9mCisgICAgICAgIGFsbCBU
ZXN0RmVhdHVyZXMgbWVyZ2VzLgorICAgICAgICAKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xs
ZXI6OmdlbmVyYXRlQ29udGV4dENvbmZpZ3VyYXRpb24gY29uc3QpOgorICAgICAgICAoV1RSOjpU
ZXN0Q29udHJvbGxlcjo6Z2VuZXJhdGVQYWdlQ29uZmlndXJhdGlvbik6CisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpjcmVhdGVXZWJWaWV3V2l0aE9wdGlvbnMpOgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6ZW5zdXJlVmlld1N1cHBvcnRzT3B0aW9uc0ZvclRlc3QpOgorICAg
ICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRQcmVmZXJlbmNlc1RvQ29uc2lzdGVudFZh
bHVlcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0
ZW50VmFsdWVzKToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3IFRlc3RPcHRpb25zIGZ1bmN0
aW9ucy4KKyAgICAgICAgCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpjcmVhdGVUZXN0
VVJMKToKKyAgICAgICAgRXhwb3NlIGFzIGEgc3RhdGljIG1lbWJlciBmdW5jdGlvbiBvbiBUZXN0
Q29udHJvbGxlciBmb3IgdXNlIGluIG90aGVyIGZpbGVzLgorICAgICAgICAKKyAgICAgICAgKFdU
Ujo6VGVzdENvbnRyb2xsZXI6OnRlc3RPcHRpb25zRm9yVGVzdCBjb25zdCk6CisgICAgICAgIFJl
d29yayB0byBiZSBhIHNlcXVlbmNlIG9mIFRlc3RGZWF0dXJlcyBtZXJnZXMuCisgICAgICAgIAor
ICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6dXBkYXRlV2ViVmlld1NpemVGb3JUZXN0KToK
KyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnVwZGF0ZVdpbmRvd1NjYWxlRm9yVGVzdCk6
CisgICAgICAgIFVwZGF0ZSB0byBjYWxsIG5ldyBUZXN0T3B0aW9ucyBmdW5jdGlvbnMuCisgICAg
ICAgIAorICAgICAgICAoV1RSOjpjcmVhdGVUZXN0VVJMKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Ujo6cGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6
cGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1JlbGF0aXZlUGF0aCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVFI6OnBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNVUkwpOiBEZWxldGVkLgorICAg
ICAgICAoV1RSOjp1cGRhdGVUZXN0T3B0aW9uc0Zyb21UZXN0SGVhZGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRkVGVzdE9wdGlvbnMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICBNb3ZlZCBUZXN0T3B0aW9ucyBwYXJzaW5nIHRvIFRlc3RPcHRp
b25zLmNwcAorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6
CisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpjcmVhdGVUZXN0U2V0dGluZ3NEaWN0aW9u
YXJ5KToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3IFRlc3RPcHRpb25zIGZ1bmN0aW9ucy4K
KworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuaDoKKyAgICAgICAgUmV3
b3JrcyBUZXN0T3B0aW9ucyB0byBiZSBhbiBpbW11dGFibGUgb3duZXIgb2YgYSBUZXN0RmVhdHVy
ZXMgc3RydWN0LCB3aGljaCBpcyBhIHNldAorICAgICAgICBvZiBtYXBzIHRoYXQgbWFwIGZlYXR1
cmUgc3RyaW5nIGtleXMsIHRvIHZhbHVlcyBvZiB0eXBlIGJvb2wsIGRvdWJsZSwgc3RyaW5nIG9y
IHN0cmluZyB2ZWN0b3IuCisgICAgICAgIFJlLXVzZXMgZXhpc3RpbmcgdGVzdCBoZWFkZXIgcGFy
c2luZyBjb2RlIChtb3ZlZCBoZXJlIGZyb20gVGVzdENvbnRyb2xsZXIuY3BwKSB0byBhbHNvCisg
ICAgICAgIHBhcnNlIG5ldyBUZXN0T3B0aW9ucy50eHQgZmlsZXMuCisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5jcHA6CisgICAgICAgIChXVFI6OmR1bXBGZWF0dXJlcyk6
CisgICAgICAgIEhlbHBlciB0byBkdW1wIGZlYXR1cmVzIHRvIHN0ZGVyciwgdXNlZnVsIGZvciBk
ZWJ1Z2dpbmcuCisKKyAgICAgICAgKFdUUjo6a2V5VHlwZSk6CisgICAgICAgIEhlbHBlciBmb3Ig
cGFyc2VyIHRvIGtub3cgd2hpY2ggdmFsdWUgcGFyc2VyIHRvIHVzZS4KKworICAgICAgICAoV1RS
OjpwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUpOgorICAgICAgICAoV1RSOjpwYXJzZVN0cmlu
Z1Rlc3RIZWFkZXJWYWx1ZUFzUmVsYXRpdmVQYXRoKToKKyAgICAgICAgKFdUUjo6cGFyc2VTdHJp
bmdUZXN0SGVhZGVyVmFsdWVBc1VSTCk6CisgICAgICAgIFZhbHVlIHBhcnNlcnMgbW92ZWQgZnJv
bSBUZXN0Q29udHJvbGxlci5jcHAKKworICAgICAgICAoV1RSOjpwYXJzZVRlc3RIZWFkZXIpOgor
ICAgICAgICBIZWFkZXIgcGFyc2VyIG1vdmVkIGZyb20gVGVzdENvbnRyb2xsZXIuY3BwLiBVcGRh
dGUgdG8gbm93IHJldHVybgorICAgICAgICBhIFRlc3RGZWF0dXJlcyBvYmplY3QgYW5kIHVzZSBr
ZXlUeXBlIHRvIHBpY2sgdmFsdWUgcGFyc2VyIHJhdGhlcgorICAgICAgICB0aGFuIGlubGluaW5n
IHRoZSBpZiBzdGF0ZW1lbnRzLgorICAgICAgICAKKyAgICAgICAgKFdUUjo6aGFyZGNvZGVkRmVh
dHVyZXNCYXNlZE9uUGF0aEZvclRlc3QpOgorICAgICAgICAoV1RSOjpzaG91bGRNYWtlVmlld3Bv
cnRGbGV4aWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OnNob3VsZFVzZUZpeGVkTGF5b3V0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6aXNTVkdUZXN0UGF0aCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVFI6OnNob3VsZFVzZUVwaGVtZXJhbFNlc3Npb24pOiBEZWxldGVkLgorICAgICAgICBN
b3ZlZCBmcm9tIHRoZSBUZXN0T3B0aW9ucyBjb250cnVjdG9yIGFuZCByZW1vdmUgY2FzZXMgZm9y
IGZsZXhpYmxlTGF5b3V0LAorICAgICAgICBmaXhlZExheW91dCwgaXNTVkdUZXN0LCBhbmQgdXNl
RXBoZW1lcmFsU2Vzc2lvbiwgd2hpY2ggYXJlIGFsbCBlaXRoZXIgbm93CisgICAgICAgIGhhbmRs
ZWQgYnkgVGVzdE9wdGlvbnMudHh0IGZpbGVzIG9yIGFyZSBubyBsb25nZXIgbmVjZXNzYXJ5Lgor
CisgICAgICAgIChXVFI6Om1lcmdlKToKKyAgICAgICAgTWVyZ2VzIHR3byBUZXN0RmVhdHVyZXMg
b2JqZWN0cy4gSWYgYm90aCBjb250YWluIHRoZSBzYW1lIGtleSwgdGhlICdhZGRpdGlvbmFsJwor
ICAgICAgICBUZXN0RmVhdHVyZXMgb3ZlcnJpZGVzIHRoZSAnYmFzZScgVGVzdEZlYXR1cmVzLgor
CisgICAgICAgIChXVFI6OmZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0T3B0aW9uc0ZpbGVzRm9yVGVz
dCk6CisgICAgICAgIENyZWF0ZXMgYSBUZXN0RmVhdHVyZXMgb2JqZWN0IGJ5IGl0ZXJhdGluZyBh
bGwgdGhlIHN1YmRpcmVjdG9yaWVzIGZyb20gTGF5b3V0VGVzdHMKKyAgICAgICAgdG8gdGhlIGN1
cnJlbnQgdGVzdHMgZGlyZWN0b3J5LCBsb29raW5nIGZvciBUZXN0T3B0aW9ucy50eHQgZmlsZXMg
YW5kIG1lcmdpbmcKKyAgICAgICAgdGhlbSB0b2dldGhlci4KKworICAgICAgICAoV1RSOjpmZWF0
dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3QpOgorICAgICAgICBDcmVhdGVzIGEgVGVz
dEZlYXR1cmVzIGZvciB0aGUgdGVzdCBoZWFkZXJzIG9mIHRoZSBjdXJyZW50IHRlc3QuCisKKyAg
ICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW06Cisg
ICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZU92ZXJy
aWRlc0RlZmF1bHRzRm9yVGVzdCBjb25zdCk6CisgICAgICAgIFJld29ya2VkIHRvIG5vdyByZXR1
cm4gYSBUZXN0RmVhdHVyZXMgb2JqZWN0IHRoYXQgd2lsbCBiZSBtZXJnZWQsIHJhdGhlciB0aGFu
IHVwZGF0aW5nCisgICAgICAgIGEgVGVzdE9wdGlvbnMuIE1vdmVzIGVuYWJsZUluQXBwQnJvd3Nl
clByaXZhY3kgd29yayB0byBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1XaWxsUnVuVGVzdAorICAg
ICAgICB3aGVyZSBpdCBpcyBtb3JlIGFwcHJvcHJpYXRlLgorCisgICAgICAgIChXVFI6OlRlc3RD
b250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemVEYXRhU3RvcmUpOgorICAgICAgICAoV1RSOjpU
ZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1DcmVhdGVXZWJWaWV3KToKKyAgICAgICAgKFdUUjo6VGVz
dENvbnRyb2xsZXI6OmZpbmlzaENyZWF0aW5nUGxhdGZvcm1XZWJWaWV3KToKKyAgICAgICAgKFdU
Ujo6VGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcik6CisgICAg
ICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpjb2NvYVJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1
ZXMpOgorICAgICAgICAoV1RSOjpjb250ZW50TW9kZSk6CisgICAgICAgIFVwZGF0ZSB0byBjYWxs
IG5ldyBUZXN0T3B0aW9ucyBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6
OnBsYXRmb3JtUmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6CisgICAgICAgIChXVFI6OlRl
c3RDb250cm9sbGVyOjpwbGF0Zm9ybUNvbmZpZ3VyZVZpZXdGb3JUZXN0KToKKyAgICAgICAgVXBk
YXRlIHRvIGNhbGwgbmV3IFRlc3RPcHRpb25zIGZ1bmN0aW9ucy4KKyAgICAgICAgCisgICAgICAg
IChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1bHRzRm9y
VGVzdCBjb25zdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1cGRhdGVQbGF0Zm9y
bVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgTW92
ZWQgR2VuZXJhdGVkVG91Y2hlc0RlYnVnV2luZG93IHdvcmsgdG8gVGVzdENvbnRyb2xsZXI6OnBs
YXRmb3JtQ29uZmlndXJlVmlld0ZvclRlc3QKKyAgICAgICAgd2hlcmUgaXQgaXMgbW9yZSBhcHBy
b3ByaWF0ZSBhbmQgcmVtb3ZlZCBzaG91bGRTaG93VG91Y2hlcyBzZXR0aW5nIGFzIHRoYXQgaXMg
ZG9uZQorICAgICAgICBnbG9iYWxseSBub3cuIAorICAgICAgICAKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL21hYy9QbGF0Zm9ybVdlYlZpZXdNYWMubW06CisgICAgICAgIChXVFI6OlBsYXRm
b3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3
IFRlc3RPcHRpb25zIGZ1bmN0aW9ucy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvbWFj
L1Rlc3RDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QgY29uc3QpOgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9yVGVz
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIFJlbW92ZSBzaG91bGRVc2VSZW1vdGVMYXllclRy
ZWUgYW5kIHNob3VsZFNob3dXZWJWaWV3LCBhcyB0aG9zZSBhcmUgbm93IGRvbmUgZ2xvYmFsbHks
CisgICAgICAgIGFuZCByZS1pbXBsZW1lbnRlZCB1c2VUaHJlYWRlZFNjcm9sbGluZyB0byB1c2Ug
Ym9vbEZlYXR1cmVzLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci93aW4vVGVzdENvbnRy
b2xsZXJXaW4uY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1TcGVj
aWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QgY29uc3QpOgorICAgICAgICAoV1RSOjpUZXN0Q29u
dHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9yVGVzdCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIFVwZGF0ZWQgZm9yIG5ldyBzaWduYXR1cmUuCisKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL3dwZS9UZXN0Q29udHJvbGxlcldQRS5jcHA6CisgICAgICAgIChX
VFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1bHRzRm9yVGVz
dCBjb25zdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1cGRhdGVQbGF0Zm9ybVNw
ZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgVXBkYXRl
ZCBmb3IgbmV3IHNpZ25hdHVyZS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvZ3RrL1Rl
c3RDb250cm9sbGVyR1RLLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnBsYXRm
b3JtU3BlY2lmaWNGZWF0dXJlRGVmYXVsdHNGb3JUZXN0IGNvbnN0KToKKyAgICAgICAgKFdUUjo6
VGVzdENvbnRyb2xsZXI6OnVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNUZXN0T3B0aW9uc0ZvclRlc3Qg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICBVcGRhdGVkIGZvciBuZXcgc2lnbmF0dXJlLgorCiAy
MDIwLTEwLTAzICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgQWRkIGV4dHJhIHNsYXNoIGFmdGVyIGVtcHR5IGhvc3QgY29waWVkIGZyb20gYmFz
ZSBVUkwgaWYgcGF0aCBpcyBhbHNvIGVtcHR5CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVy
L09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvT3B0aW9u
cy5jcHAJKHJldmlzaW9uIDI2Nzg4NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvT3B0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCBzdGF0aWMgYm9vbCBoYW5k
bGVPcHRpb25BbGxvd2VkSG9zdChPcHRpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBi
b29sIHBhcnNlRmVhdHVyZShTdHJpbmcgZmVhdHVyZVN0cmluZywgSGFzaE1hcDxTdHJpbmcsIGJv
b2w+JiBmZWF0dXJlcykKK3N0YXRpYyBib29sIHBhcnNlRmVhdHVyZShTdHJpbmcgZmVhdHVyZVN0
cmluZywgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29sPiYgZmVhdHVyZXMpCiB7
CiAgICAgYXV0byBzdHJpbmdzID0gZmVhdHVyZVN0cmluZy5zcGxpdCgnPScpOwogICAgIGlmIChz
dHJpbmdzLmlzRW1wdHkoKSB8fCBzdHJpbmdzLnNpemUoKSA+IDIpCkBAIC0xMjIsNyArMTIyLDcg
QEAgc3RhdGljIGJvb2wgcGFyc2VGZWF0dXJlKFN0cmluZyBmZWF0dXJlUwogICAgIGF1dG8gZmVh
dHVyZU5hbWUgPSBzdHJpbmdzWzBdOwogICAgIGJvb2wgZW5hYmxlZCA9IHN0cmluZ3Muc2l6ZSgp
ID09IDEgfHwgc3RyaW5nc1sxXSA9PSAidHJ1ZSI7CiAKLSAgICBmZWF0dXJlcy5zZXQoZmVhdHVy
ZU5hbWUsIGVuYWJsZWQpOworICAgIGZlYXR1cmVzLmluc2VydCh7IGZlYXR1cmVOYW1lLnV0Zjgo
KS5kYXRhKCksIGVuYWJsZWQgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvT3B0aW9ucy5oCShyZXZpc2lvbiAyNjc4ODUpCisrKyBUb29scy9XZWJLaXRUZXN0
UnVubmVyL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEsOCBAQAogI2luY2x1
ZGUgPHNldD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRl
IDx1bm9yZGVyZWRfbWFwPgogI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdI
YXNoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC01Nyw4ICs1Nyw4IEBA
IHN0cnVjdCBPcHRpb25zIHsKICNlbmRpZgogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBw
YXRoczsKICAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gYWxsb3dlZEhvc3RzOwotICAgIEhhc2hN
YXA8U3RyaW5nLCBib29sPiBpbnRlcm5hbEZlYXR1cmVzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBi
b29sPiBleHBlcmltZW50YWxGZWF0dXJlczsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpz
dHJpbmcsIGJvb2w+IGludGVybmFsRmVhdHVyZXM7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0
ZDo6c3RyaW5nLCBib29sPiBleHBlcmltZW50YWxGZWF0dXJlczsKIH07CiAKIGNsYXNzIE9wdGlv
biB7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgJKHJldmlz
aW9uIDI2Nzg4NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1v
dmVGcm9tV2luZG93KCk7CiAgICAgdm9pZCBhZGRUb1dpbmRvdygpOwogCi0gICAgYm9vbCB2aWV3
U3VwcG9ydHNPcHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKSBjb25zdCB7IHJldHVy
biAhb3B0aW9ucy5ydW5TaW5nbHkgJiYgbV9vcHRpb25zLmhhc1NhbWVJbml0aWFsaXphdGlvbk9w
dGlvbnMob3B0aW9ucyk7IH0KKyAgICBib29sIHZpZXdTdXBwb3J0c09wdGlvbnMoY29uc3QgVGVz
dE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0IHsgcmV0dXJuICFvcHRpb25zLnJ1blNpbmdseSgpICYm
IG1fb3B0aW9ucy5oYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25zKG9wdGlvbnMpOyB9CiAKICAg
ICBQbGF0Zm9ybUltYWdlIHdpbmRvd1NuYXBzaG90SW1hZ2UoKTsKICAgICBjb25zdCBUZXN0T3B0
aW9ucyYgb3B0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW9uczsgfQpJbmRleDogVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oCShyZXZpc2lvbiAyNjc4ODUpCisrKyBU
b29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8V2ViS2l0L1dLU3RyaW5nUHJpdmF0ZS5oPgogI2lu
Y2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KICNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAj
aW5jbHVkZSA8d3RmL1VuaXF1ZUFycmF5Lmg+CkBAIC01OSw2ICs2MCwxMSBAQCBpbmxpbmUgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvV0soY29uCiAgICAgcmV0dXJuIGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RyaW5nKSk7CiB9CiAKK2lubGluZSBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gdG9XSyhjb25zdCBzdGQ6OnN0cmluZyYgc3RyaW5nKQoreworICAgIHJl
dHVybiB0b1dLKHN0cmluZy5jX3N0cigpKTsKK30KKwogaW5saW5lIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB0b1dLKGNvbnN0IFdURjo6U3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgcmV0dXJuIHRv
V0soc3RyaW5nLnV0ZjgoKS5kYXRhKCkpOwpAQCAtMTE0LDYgKzEyMCwxMSBAQCBpbmxpbmUgV1RG
OjpTdHJpbmcgdG9XVEZTdHJpbmcoY29uc3QgSlNSCiAgICAgcmV0dXJuIHRvV1RGU3RyaW5nKHN0
cmluZy5nZXQoKSk7CiB9CiAKK2lubGluZSBXVEY6OlN0cmluZyB0b1dURlN0cmluZyhjb25zdCBz
dGQ6OnN0cmluZyYgc3RyaW5nKQoreworICAgIHJldHVybiBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
c3RyaW5nLmNfc3RyKCkpOworfQorCiBpbmxpbmUgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRv
V0tTdHJpbmcoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCiB7CiAgICAg
cmV0dXJuIHRvV0soY3JlYXRlSlNTdHJpbmcoY29udGV4dCwgdmFsdWUpLmdldCgpKTsKQEAgLTEy
NSw0ICsxMzYsMjQgQEAgaW5saW5lIFdURjo6U3RyaW5nIHRvV1RGU3RyaW5nKEpTQ29udGV4dAog
ICAgIHJldHVybiB0b1dURlN0cmluZyhjcmVhdGVKU1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpOwog
fQogCitpbmxpbmUgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHNwbGl0KGNvbnN0IHN0ZDo6c3Ry
aW5nJiBzdHJpbmcsIGNoYXIgZGVsaW1pdGVyKQoreworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3Ry
aW5nPiByZXN1bHQ7CisKKyAgICBzaXplX3QgaSA9IDA7CisgICAgd2hpbGUgKGkgPCBzdHJpbmcu
c2l6ZSgpKSB7CisgICAgICAgIGF1dG8gZm91bmRJbmRleCA9IHN0cmluZy5maW5kX2ZpcnN0X29m
KGRlbGltaXRlciwgaSk7CisKKyAgICAgICAgaWYgKGZvdW5kSW5kZXggIT0gaSkKKyAgICAgICAg
ICAgIHJlc3VsdC5wdXNoX2JhY2soc3RyaW5nLnN1YnN0cihpLCBmb3VuZEluZGV4IC0gaSkpOwor
CisgICAgICAgIGlmIChmb3VuZEluZGV4ID09IHN0ZDo6c3RyaW5nX3ZpZXc6Om5wb3MpCisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBpID0gZm91bmRJbmRleCArIDE7CisgICAgfQorCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RSCkluZGV4OiBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjY3ODg1KQorKysg
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ2OSwxNSArNDY5LDE3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemUoaW50
IGFyZ2MKICAgICBtX3Nob3VsZER1bXBQaXhlbHNGb3JBbGxUZXN0cyA9IG9wdGlvbnMuc2hvdWxk
RHVtcFBpeGVsc0ZvckFsbFRlc3RzOwogICAgIG1fZm9yY2VDb21wbGV4VGV4dCA9IG9wdGlvbnMu
Zm9yY2VDb21wbGV4VGV4dDsKICAgICBtX3Nob3VsZFVzZUFjY2VsZXJhdGVkRHJhd2luZyA9IG9w
dGlvbnMuc2hvdWxkVXNlQWNjZWxlcmF0ZWREcmF3aW5nOwotICAgIG1fc2hvdWxkVXNlUmVtb3Rl
TGF5ZXJUcmVlID0gb3B0aW9ucy5zaG91bGRVc2VSZW1vdGVMYXllclRyZWU7CiAgICAgbV9wYXRo
cyA9IG9wdGlvbnMucGF0aHM7CiAgICAgbV9hbGxvd2VkSG9zdHMgPSBvcHRpb25zLmFsbG93ZWRI
b3N0czsKLSAgICBtX3Nob3VsZFNob3dXZWJWaWV3ID0gb3B0aW9ucy5zaG91bGRTaG93V2ViVmll
dzsKLSAgICBtX3Nob3VsZFNob3dUb3VjaGVzID0gb3B0aW9ucy5zaG91bGRTaG93VG91Y2hlczsK
ICAgICBtX2NoZWNrRm9yV29ybGRMZWFrcyA9IG9wdGlvbnMuY2hlY2tGb3JXb3JsZExlYWtzOwog
ICAgIG1fYWxsb3dBbnlIVFRQU0NlcnRpZmljYXRlRm9yQWxsb3dlZEhvc3RzID0gb3B0aW9ucy5h
bGxvd0FueUhUVFBTQ2VydGlmaWNhdGVGb3JBbGxvd2VkSG9zdHM7Ci0gICAgbV9pbnRlcm5hbEZl
YXR1cmVzID0gb3B0aW9ucy5pbnRlcm5hbEZlYXR1cmVzOwotICAgIG1fZXhwZXJpbWVudGFsRmVh
dHVyZXMgPSBvcHRpb25zLmV4cGVyaW1lbnRhbEZlYXR1cmVzOworICAgIAorICAgIG1fZ2xvYmFs
RmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzID0gb3B0aW9ucy5pbnRlcm5hbEZlYXR1cmVz
OworICAgIG1fZ2xvYmFsRmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMgPSBvcHRpb25zLmV4
cGVyaW1lbnRhbEZlYXR1cmVzOworICAgIG1fZ2xvYmFsRmVhdHVyZXMuYm9vbEZlYXR1cmVzLmlu
c2VydCh7ICJ1c2VSZW1vdGVMYXllclRyZWUiLCBvcHRpb25zLnNob3VsZFVzZVJlbW90ZUxheWVy
VHJlZSB9KTsKKyAgICBtX2dsb2JhbEZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAic2hv
dWxkU2hvd1dlYlZpZXciLCBvcHRpb25zLnNob3VsZFNob3dXZWJWaWV3IH0pOworICAgIG1fZ2xv
YmFsRmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJzaG91bGRTaG93VG91Y2hlcyIsIG9w
dGlvbnMuc2hvdWxkU2hvd1RvdWNoZXMgfSk7CisKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9J
U09MQVRFRF9UUkVFKQogICAgIG1fYWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1vZGUgPSBvcHRp
b25zLmFjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVNb2RlOwogI2VuZGlmCkBAIC00OTksNyArNTAx
LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZShpbnQgYXJnYwogICAgIG1fZXZl
bnRTZW5kZXJQcm94eSA9IG1ha2VVbmlxdWU8RXZlbnRTZW5kZXJQcm94eT4odGhpcyk7CiB9CiAK
LVdLUmV0YWluUHRyPFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWY+IFRlc3RDb250cm9sbGVyOjpn
ZW5lcmF0ZUNvbnRleHRDb25maWd1cmF0aW9uKGNvbnN0IFRlc3RPcHRpb25zOjpDb250ZXh0T3B0
aW9ucyYgb3B0aW9ucykgY29uc3QKK1dLUmV0YWluUHRyPFdLQ29udGV4dENvbmZpZ3VyYXRpb25S
ZWY+IFRlc3RDb250cm9sbGVyOjpnZW5lcmF0ZUNvbnRleHRDb25maWd1cmF0aW9uKGNvbnN0IENv
bnRleHRPcHRpb25zJiBvcHRpb25zKSBjb25zdAogewogICAgIGF1dG8gY29uZmlndXJhdGlvbiA9
IGFkb3B0V0soV0tDb250ZXh0Q29uZmlndXJhdGlvbkNyZWF0ZSgpKTsKICAgICBXS0NvbnRleHRD
b25maWd1cmF0aW9uU2V0SW5qZWN0ZWRCdW5kbGVQYXRoKGNvbmZpZ3VyYXRpb24uZ2V0KCksIGlu
amVjdGVkQnVuZGxlUGF0aCgpKTsKQEAgLTU2MiwxMCArNTY0LDExIEBAIFdLV2Vic2l0ZURhdGFT
dG9yZVJlZiBUZXN0Q29udHJvbGxlcjo6d2UKIAogV0tSZXRhaW5QdHI8V0tQYWdlQ29uZmlndXJh
dGlvblJlZj4gVGVzdENvbnRyb2xsZXI6OmdlbmVyYXRlUGFnZUNvbmZpZ3VyYXRpb24oY29uc3Qg
VGVzdE9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKCFtX2NvbnRleHQgfHwgIW1fY29udGV4
dE9wdGlvbnMtPmhhc1NhbWVJbml0aWFsaXphdGlvbk9wdGlvbnMob3B0aW9ucy5jb250ZXh0T3B0
aW9ucykpIHsKLSAgICAgICAgYXV0byBjb250ZXh0Q29uZmlndXJhdGlvbiA9IGdlbmVyYXRlQ29u
dGV4dENvbmZpZ3VyYXRpb24ob3B0aW9ucy5jb250ZXh0T3B0aW9ucyk7CisgICAgYXV0byBjb250
ZXh0T3B0aW9ucyA9IG9wdGlvbnMuY29udGV4dE9wdGlvbnMoKTsKKyAgICBpZiAoIW1fY29udGV4
dCB8fCAhbV9jb250ZXh0T3B0aW9ucy0+aGFzU2FtZUluaXRpYWxpemF0aW9uT3B0aW9ucyhjb250
ZXh0T3B0aW9ucykpIHsKKyAgICAgICAgYXV0byBjb250ZXh0Q29uZmlndXJhdGlvbiA9IGdlbmVy
YXRlQ29udGV4dENvbmZpZ3VyYXRpb24oY29udGV4dE9wdGlvbnMpOwogICAgICAgICBtX2NvbnRl
eHQgPSBwbGF0Zm9ybUFkanVzdENvbnRleHQoYWRvcHRXSyhXS0NvbnRleHRDcmVhdGVXaXRoQ29u
ZmlndXJhdGlvbihjb250ZXh0Q29uZmlndXJhdGlvbi5nZXQoKSkpLmdldCgpLCBjb250ZXh0Q29u
ZmlndXJhdGlvbi5nZXQoKSk7Ci0gICAgICAgIG1fY29udGV4dE9wdGlvbnMgPSBvcHRpb25zLmNv
bnRleHRPcHRpb25zOworICAgICAgICBtX2NvbnRleHRPcHRpb25zID0gY29udGV4dE9wdGlvbnM7
CiAKICAgICAgICAgbV9nZW9sb2NhdGlvblByb3ZpZGVyID0gbWFrZVVuaXF1ZTxHZW9sb2NhdGlv
blByb3ZpZGVyTW9jaz4obV9jb250ZXh0LmdldCgpKTsKIApAQCAtNjI3LDcgKzYzMCw3IEBAIFdL
UmV0YWluUHRyPFdLUGFnZUNvbmZpZ3VyYXRpb25SZWY+IFRlc3QKICAgICBXS1BhZ2VDb25maWd1
cmF0aW9uU2V0Q29udGV4dChwYWdlQ29uZmlndXJhdGlvbi5nZXQoKSwgbV9jb250ZXh0LmdldCgp
KTsKICAgICBXS1BhZ2VDb25maWd1cmF0aW9uU2V0UGFnZUdyb3VwKHBhZ2VDb25maWd1cmF0aW9u
LmdldCgpLCBtX3BhZ2VHcm91cC5nZXQoKSk7CiAgICAgCi0gICAgaWYgKG9wdGlvbnMudXNlRXBo
ZW1lcmFsU2Vzc2lvbikgeworICAgIGlmIChvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24oKSkg
ewogICAgICAgICBhdXRvIGVwaGVtZXJhbERhdGFTdG9yZSA9IGFkb3B0V0soV0tXZWJzaXRlRGF0
YVN0b3JlQ3JlYXRlTm9uUGVyc2lzdGVudERhdGFTdG9yZSgpKTsKICAgICAgICAgV0tQYWdlQ29u
ZmlndXJhdGlvblNldFdlYnNpdGVEYXRhU3RvcmUocGFnZUNvbmZpZ3VyYXRpb24uZ2V0KCksIGVw
aGVtZXJhbERhdGFTdG9yZS5nZXQoKSk7CiAgICAgfQpAQCAtNjM5LDExICs2NDIsMTIgQEAgV0tS
ZXRhaW5QdHI8V0tQYWdlQ29uZmlndXJhdGlvblJlZj4gVGVzdAogCiB2b2lkIFRlc3RDb250cm9s
bGVyOjpjcmVhdGVXZWJWaWV3V2l0aE9wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMp
CiB7CisgICAgYXV0byBhcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIgPSBvcHRpb25zLmFwcGxp
Y2F0aW9uQnVuZGxlSWRlbnRpZmllcigpOwogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmICgh
b3B0aW9ucy5hcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIuaXNFbXB0eSgpKSB7CisgICAgaWYg
KCFhcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIuZW1wdHkoKSkgewogICAgICAgICAvLyBUaGUg
YnVuZGxlIGlkZW50aWZpZXIgY2FuIG9ubHkgYmUgc2V0IG9uY2UgcGVyIHRlc3QsIGFuZCBpcyBj
bGVhcmVkIGJldHdlZW4gdGVzdHMuCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2hhc1NldEFw
cGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcik7Ci0gICAgICAgIHNldEFwcGxpY2F0aW9uQnVuZGxl
SWRlbnRpZmllcihvcHRpb25zLmFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcik7CisgICAgICAg
IHNldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcihhcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZp
ZXIpOwogICAgICAgICBtX2hhc1NldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllciA9IHRydWU7
CiAgICAgfQogI2VuZGlmCkBAIC02ODYsNyArNjkwLDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6
Y3JlYXRlV2ViVmlld1dpdGhPcAogICAgICAgICAwLCAvLyBkaWREcmF3CiAgICAgICAgIDAsIC8v
IHBhZ2VEaWRTY3JvbGwKICAgICAgICAgMCwgLy8gZXhjZWVkZWREYXRhYmFzZVF1b3RhLAotICAg
ICAgICBvcHRpb25zLnNob3VsZEhhbmRsZVJ1bk9wZW5QYW5lbCA/IHJ1bk9wZW5QYW5lbCA6IDAs
CisgICAgICAgIG9wdGlvbnMuc2hvdWxkSGFuZGxlUnVuT3BlblBhbmVsKCkgPyBydW5PcGVuUGFu
ZWwgOiAwLAogICAgICAgICBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0LAogICAgICAgICAwLCAvLyBoZWFkZXJIZWlnaHQKICAgICAgICAgMCwgLy8gZm9vdGVySGVp
Z2h0CkBAIC03OTUsOSArNzk5LDkgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6Y3JlYXRlV2ViVmll
d1dpdGhPcAogICAgIC8vIHNvbWV0aGluZyBlbHNlIGZvciBzcGVjaWZpYyB0ZXN0cyB0aGF0IG5l
ZWQgdG8gcnVuIGF0IGEgZGlmZmVyZW50IHdpbmRvdyBzY2FsZS4KICAgICBtX21haW5XZWJWaWV3
LT5jaGFuZ2VXaW5kb3dTY2FsZUlmTmVlZGVkKDEpOwogICAgIAotICAgIGlmICghb3B0aW9ucy5h
cHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIuaXNFbXB0eSgpKSB7CisgICAgaWYgKCFhcHBsaWNh
dGlvbkJ1bmRsZUlkZW50aWZpZXIuZW1wdHkoKSkgewogICAgICAgICByZWluaXRpYWxpemVBcHBC
b3VuZERvbWFpbnMoKTsKLSAgICAgICAgdXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1By
b2Nlc3Mob3B0aW9ucy5hcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIpOworICAgICAgICB1cGRh
dGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2VzcyhhcHBsaWNhdGlvbkJ1bmRsZUlkZW50
aWZpZXIpOwogICAgIH0KIH0KIApAQCAtODA5LDcgKzgxMyw3IEBAIHZvaWQgVGVzdENvbnRyb2xs
ZXI6OmVuc3VyZVZpZXdTdXBwb3J0c08KICAgICAgICAgLy8gSGF2aW5nIGNyZWF0ZWQgYW5vdGhl
ciBwYWdlICh2aWEgd2luZG93Lm9wZW4oKSkgcHJldmVudHMgcHJvY2VzcyBzd2FwcGluZyBvbiBu
YXZpZ2F0aW9uIGFuZCBpdCBtYXkgdGhlcmVmb3JlCiAgICAgICAgIC8vIGNhdXNlIGZsYWtpbmVz
cyB0byByZXVzZSB0aGUgdmlldy4gV2Ugc2hvdWxkIGFsc28gYWx3YXlzIG1ha2UgYSBuZXcgdmll
dyBpZiB0aGUgdGVzdCBpcyBtYXJrZWQgYXMgYXBwLWJvdW5kLCBiZWNhdXNlCiAgICAgICAgIC8v
IHRoZSB2aWV3IGNvbmZpZ3VyYXRpb24gbXVzdCBjaGFuZ2UuCi0gICAgICAgIGlmICghbV9jcmVh
dGVkT3RoZXJQYWdlICYmIG1fbWFpbldlYlZpZXctPnZpZXdTdXBwb3J0c09wdGlvbnMob3B0aW9u
cykgJiYgIW9wdGlvbnMuaXNBcHBCb3VuZFdlYlZpZXcpCisgICAgICAgIGlmICghbV9jcmVhdGVk
T3RoZXJQYWdlICYmIG1fbWFpbldlYlZpZXctPnZpZXdTdXBwb3J0c09wdGlvbnMob3B0aW9ucykg
JiYgIW9wdGlvbnMuaXNBcHBCb3VuZFdlYlZpZXcoKSkKICAgICAgICAgICAgIHJldHVybjsKIAog
ICAgICAgICB3aWxsRGVzdHJveVdlYlZpZXcoKTsKQEAgLTgzNiw4ICs4NDAsOCBAQCB2b2lkIFRl
c3RDb250cm9sbGVyOjpyZXNldFByZWZlcmVuY2VzVG9DCiAgICAgV0tQcmVmZXJlbmNlc1Jlc2V0
VGVzdFJ1bm5lck92ZXJyaWRlcyhwcmVmZXJlbmNlcyk7CiAKICAgICBXS1ByZWZlcmVuY2VzRW5h
YmxlQWxsRXhwZXJpbWVudGFsRmVhdHVyZXMocHJlZmVyZW5jZXMpOwotICAgIGZvciAoY29uc3Qg
YXV0byYgZXhwZXJpbWVudGFsRmVhdHVyZSA6IG9wdGlvbnMuZXhwZXJpbWVudGFsRmVhdHVyZXMp
Ci0gICAgICAgIFdLUHJlZmVyZW5jZXNTZXRFeHBlcmltZW50YWxGZWF0dXJlRm9yS2V5KHByZWZl
cmVuY2VzLCBleHBlcmltZW50YWxGZWF0dXJlLnZhbHVlLCB0b1dLKGV4cGVyaW1lbnRhbEZlYXR1
cmUua2V5KS5nZXQoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBba2V5LCB2YWx1ZV0gOiBvcHRp
b25zLmV4cGVyaW1lbnRhbEZlYXR1cmVzKCkpCisgICAgICAgIFdLUHJlZmVyZW5jZXNTZXRFeHBl
cmltZW50YWxGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB2YWx1ZSwgdG9XSyhrZXkpLmdldCgp
KTsKIAogICAgIFdLUHJlZmVyZW5jZXNSZXNldEFsbEludGVybmFsRGVidWdGZWF0dXJlcyhwcmVm
ZXJlbmNlcyk7CiAKQEAgLTg2MiwxNyArODY2LDE3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJl
c2V0UHJlZmVyZW5jZXNUb0MKICAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1
cmVGb3JLZXkocHJlZmVyZW5jZXMsIHRydWUsIHRvV0soIklucHV0VHlwZVdlZWtFbmFibGVkIiku
Z2V0KCkpOwogI2VuZGlmCiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGludGVybmFsRGVidWdGZWF0
dXJlIDogb3B0aW9ucy5pbnRlcm5hbERlYnVnRmVhdHVyZXMpCi0gICAgICAgIFdLUHJlZmVyZW5j
ZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgaW50ZXJuYWxEZWJ1
Z0ZlYXR1cmUudmFsdWUsIHRvV0soaW50ZXJuYWxEZWJ1Z0ZlYXR1cmUua2V5KS5nZXQoKSk7Cisg
ICAgZm9yIChjb25zdCBhdXRvJiBba2V5LCB2YWx1ZV0gIDogb3B0aW9ucy5pbnRlcm5hbERlYnVn
RmVhdHVyZXMoKSkKKyAgICAgICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJl
Rm9yS2V5KHByZWZlcmVuY2VzLCB2YWx1ZSwgdG9XSyhrZXkpLmdldCgpKTsKIAogI2lmIFBMQVRG
T1JNKENPQ09BKQotICAgIFdLUHJlZmVyZW5jZXNTZXRDYXB0dXJlVmlkZW9JblVJUHJvY2Vzc0Vu
YWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nlc3Mp
OwotICAgIFdLUHJlZmVyZW5jZXNTZXRDYXB0dXJlVmlkZW9JbkdQVVByb2Nlc3NFbmFibGVkKHBy
ZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2Vzcyk7Ci0gICAg
V0tQcmVmZXJlbmNlc1NldENhcHR1cmVBdWRpb0luVUlQcm9jZXNzRW5hYmxlZChwcmVmZXJlbmNl
cywgb3B0aW9ucy5lbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2Vzcyk7Ci0gICAgV0tQcmVmZXJl
bmNlc1NldENhcHR1cmVBdWRpb0luR1BVUHJvY2Vzc0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlv
bnMuZW5hYmxlQ2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0
Q2FwdHVyZVZpZGVvSW5VSVByb2Nlc3NFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJs
ZUNhcHR1cmVWaWRlb0luVUlQcm9jZXNzKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRDYXB0dXJl
VmlkZW9JbkdQVVByb2Nlc3NFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUNhcHR1
cmVWaWRlb0luR1BVUHJvY2VzcygpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0Q2FwdHVyZUF1ZGlv
SW5VSVByb2Nlc3NFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUNhcHR1cmVBdWRp
b0luVUlQcm9jZXNzKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRDYXB0dXJlQXVkaW9JbkdQVVBy
b2Nlc3NFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUNhcHR1cmVBdWRpb0luR1BV
UHJvY2VzcygpKTsKICNlbmRpZgotICAgIFdLUHJlZmVyZW5jZXNTZXRQcm9jZXNzU3dhcE9uTmF2
aWdhdGlvbkVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuY29udGV4dE9wdGlvbnMuc2hvdWxk
RW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24oKSk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldFBh
Z2VWaXNpYmlsaXR5QmFzZWRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHByZWZlcmVuY2VzLCBv
cHRpb25zLmVuYWJsZUFwcE5hcCk7CisgICAgV0tQcmVmZXJlbmNlc1NldFByb2Nlc3NTd2FwT25O
YXZpZ2F0aW9uRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5jb250ZXh0T3B0aW9ucygpLnNo
b3VsZEVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uKCkpOworICAgIFdLUHJlZmVyZW5jZXNT
ZXRQYWdlVmlzaWJpbGl0eUJhc2VkUHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChwcmVmZXJlbmNl
cywgb3B0aW9ucy5lbmFibGVBcHBOYXAoKSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldE9mZmxpbmVX
ZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZChwcmVmZXJlbmNlcywgdHJ1ZSk7CiAgICAgV0tQcmVm
ZXJlbmNlc1NldFN1YnBpeGVsQW50aWFsaWFzZWRMYXllclRleHRFbmFibGVkKHByZWZlcmVuY2Vz
LCBmYWxzZSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldFhTU0F1ZGl0b3JFbmFibGVkKHByZWZlcmVu
Y2VzLCBmYWxzZSk7CkBAIC04ODMsMTAgKzg4NywxMCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpy
ZXNldFByZWZlcmVuY2VzVG9DCiAgICAgV0tQcmVmZXJlbmNlc1NldEphdmFTY3JpcHRSdW50aW1l
RmxhZ3MocHJlZmVyZW5jZXMsIGtXS0phdmFTY3JpcHRSdW50aW1lRmxhZ3NBbGxFbmFibGVkKTsK
ICAgICBXS1ByZWZlcmVuY2VzU2V0SmF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxs
eShwcmVmZXJlbmNlcywgdHJ1ZSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldEphdmFTY3JpcHRDYW5B
Y2Nlc3NDbGlwYm9hcmQocHJlZmVyZW5jZXMsIHRydWUpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRE
T01QYXN0ZUFsbG93ZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZG9tUGFzdGVBbGxvd2VkKTsKKyAg
ICBXS1ByZWZlcmVuY2VzU2V0RE9NUGFzdGVBbGxvd2VkKHByZWZlcmVuY2VzLCBvcHRpb25zLmRv
bVBhc3RlQWxsb3dlZCgpKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0VW5pdmVyc2FsQWNjZXNzRnJv
bUZpbGVVUkxzQWxsb3dlZChwcmVmZXJlbmNlcywgdHJ1ZSk7CiAgICAgV0tQcmVmZXJlbmNlc1Nl
dEZpbGVBY2Nlc3NGcm9tRmlsZVVSTHNBbGxvd2VkKHByZWZlcmVuY2VzLCB0cnVlKTsKLSAgICBX
S1ByZWZlcmVuY2VzU2V0VG9wTmF2aWdhdGlvblRvRGF0YVVSTHNBbGxvd2VkKHByZWZlcmVuY2Vz
LCBvcHRpb25zLmFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMpOworICAgIFdLUHJlZmVyZW5j
ZXNTZXRUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMc0FsbG93ZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMu
YWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcygpKTsKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9B
UEkpCiAgICAgV0tQcmVmZXJlbmNlc1NldEZ1bGxTY3JlZW5FbmFibGVkKHByZWZlcmVuY2VzLCB0
cnVlKTsKICNlbmRpZgpAQCAtODk5LDE4ICs5MDMsMTggQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6
cmVzZXRQcmVmZXJlbmNlc1RvQwogICAgIFdLUHJlZmVyZW5jZXNTZXRDdXN0b21QYXN0ZWJvYXJk
RGF0YUVuYWJsZWQocHJlZmVyZW5jZXMsIHRydWUpOwogICAgIFdLUHJlZmVyZW5jZXNTZXREaWFs
b2dFbGVtZW50RW5hYmxlZChwcmVmZXJlbmNlcywgdHJ1ZSk7CiAKLSAgICBXS1ByZWZlcmVuY2Vz
U2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLnVzZU1vY2tTY3Jv
bGxiYXJzKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0TmVlZHNTaXRlU3BlY2lmaWNRdWlya3MocHJl
ZmVyZW5jZXMsIG9wdGlvbnMubmVlZHNTaXRlU3BlY2lmaWNRdWlya3MpOwotICAgIFdLUHJlZmVy
ZW5jZXNTZXRBdHRhY2htZW50RWxlbWVudEVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5h
YmxlQXR0YWNobWVudEVsZW1lbnQpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRNZW51SXRlbUVsZW1l
bnRFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZU1lbnVJdGVtRWxlbWVudCk7Ci0g
ICAgV0tQcmVmZXJlbmNlc1NldEtleWdlbkVsZW1lbnRFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRp
b25zLmVuYWJsZUtleWdlbkVsZW1lbnQpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRNb2Rlcm5NZWRp
YUNvbnRyb2xzRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVNb2Rlcm5NZWRpYUNv
bnRyb2xzKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0V2ViQXV0aGVudGljYXRpb25FbmFibGVkKHBy
ZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uKTsKLSAgICBXS1ByZWZl
cmVuY2VzU2V0V2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3JFbmFibGVkKHByZWZl
cmVuY2VzLCBvcHRpb25zLmVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9y
KTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0QWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNr
Rm9yQ3JlZGVudGlhbHMocHJlZmVyZW5jZXMsIG9wdGlvbnMuYWxsb3dDcm9zc09yaWdpblN1YnJl
c291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRDb2xvckZp
bHRlckVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQ29sb3JGaWx0ZXIpOwotICAg
IFdLUHJlZmVyZW5jZXNTZXRQdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlKHByZWZl
cmVuY2VzLCBvcHRpb25zLnB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUpOwotICAg
IFdLUHJlZmVyZW5jZXNTZXRQYWdlQ2FjaGVFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVu
YWJsZUJhY2tGb3J3YXJkQ2FjaGUpOworICAgIFdLUHJlZmVyZW5jZXNTZXRNb2NrU2Nyb2xsYmFy
c0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMudXNlTW9ja1Njcm9sbGJhcnMoKSk7CisgICAg
V0tQcmVmZXJlbmNlc1NldE5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKHByZWZlcmVuY2VzLCBvcHRp
b25zLm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRBdHRh
Y2htZW50RWxlbWVudEVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQXR0YWNobWVu
dEVsZW1lbnQoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldE1lbnVJdGVtRWxlbWVudEVuYWJsZWQo
cHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlTWVudUl0ZW1FbGVtZW50KCkpOworICAgIFdLUHJl
ZmVyZW5jZXNTZXRLZXlnZW5FbGVtZW50RW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFi
bGVLZXlnZW5FbGVtZW50KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRNb2Rlcm5NZWRpYUNvbnRy
b2xzRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xz
KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRXZWJBdXRoZW50aWNhdGlvbkVuYWJsZWQocHJlZmVy
ZW5jZXMsIG9wdGlvbnMuZW5hYmxlV2ViQXV0aGVudGljYXRpb24oKSk7CisgICAgV0tQcmVmZXJl
bmNlc1NldFdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yRW5hYmxlZChwcmVmZXJl
bmNlcywgb3B0aW9ucy5lbmFibGVXZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0aGVudGljYXRvcigp
KTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0QWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNr
Rm9yQ3JlZGVudGlhbHMocHJlZmVyZW5jZXMsIG9wdGlvbnMuYWxsb3dDcm9zc09yaWdpblN1YnJl
c291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldENvbG9y
RmlsdGVyRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVDb2xvckZpbHRlcigpKTsK
KyAgICBXS1ByZWZlcmVuY2VzU2V0UHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZShw
cmVmZXJlbmNlcywgb3B0aW9ucy5wdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlKCkp
OworICAgIFdLUHJlZmVyZW5jZXNTZXRQYWdlQ2FjaGVFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRp
b25zLmVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUoKSk7CiAKICAgICBXS1ByZWZlcmVuY2VzU2V0RGVm
YXVsdFRleHRFbmNvZGluZ05hbWUocHJlZmVyZW5jZXMsIHRvV0soIklTTy04ODU5LTEiKS5nZXQo
KSk7CiAKQEAgLTkzMiw3ICs5MzYsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldFByZWZl
cmVuY2VzVG9DCiAgICAgV0tQcmVmZXJlbmNlc1NldEhpZGRlblBhZ2VET01UaW1lclRocm90dGxp
bmdFbmFibGVkKHByZWZlcmVuY2VzLCBmYWxzZSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldEhpZGRl
blBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZChwcmVmZXJlbmNlcywgZmFsc2UpOwog
Ci0gICAgV0tQcmVmZXJlbmNlc1NldEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQocHJlZmVyZW5j
ZXMsIG1fc2hvdWxkVXNlQWNjZWxlcmF0ZWREcmF3aW5nIHx8IG9wdGlvbnMudXNlQWNjZWxlcmF0
ZWREcmF3aW5nKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0QWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxl
ZChwcmVmZXJlbmNlcywgbV9zaG91bGRVc2VBY2NlbGVyYXRlZERyYXdpbmcgfHwgb3B0aW9ucy51
c2VBY2NlbGVyYXRlZERyYXdpbmcoKSk7CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSB0ZXN0
aW5nIHRoZSBkZWZhdWx0LgogICAgIFdLUHJlZmVyZW5jZXNTZXRTdG9yYWdlQmxvY2tpbmdQb2xp
Y3kocHJlZmVyZW5jZXMsIGtXS0FsbG93QWxsU3RvcmFnZSk7CiAKQEAgLTk1Myw3ICs5NTcsNyBA
QCB2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldFByZWZlcmVuY2VzVG9DCiAgICAgCiAgICAgV0tQ
cmVmZXJlbmNlc1NldExhcmdlSW1hZ2VBc3luY0RlY29kaW5nRW5hYmxlZChwcmVmZXJlbmNlcywg
ZmFsc2UpOwogCi0gICAgV0tQcmVmZXJlbmNlc1NldEluc3BlY3RvckFkZGl0aW9uc0VuYWJsZWQo
cHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zKTsKKyAgICBXS1By
ZWZlcmVuY2VzU2V0SW5zcGVjdG9yQWRkaXRpb25zRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9u
cy5lbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMoKSk7CiAKICAgICBXS1ByZWZlcmVuY2VzU2V0U3Rv
cmFnZUFjY2Vzc0FQSUVuYWJsZWQocHJlZmVyZW5jZXMsIHRydWUpOwogICAgIApAQCAtOTcyLDcg
Kzk3Niw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0UHJlZmVyZW5jZXNUb0MKICAgICBX
S1ByZWZlcmVuY2VzU2V0QXVkaW9QbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmUocHJlZmVyZW5j
ZXMsIGZhbHNlKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JL
ZXkocHJlZmVyZW5jZXMsIGZhbHNlLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3Bl
YWtlclNlbGVjdGlvblJlcXVpcmVzVXNlckdlc3R1cmUiKSk7CiAKLSAgICBXS1ByZWZlcmVuY2Vz
U2V0U2hvdWxkVXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dChwcmVmZXJlbmNlcywgb3B0aW9u
cy5jb250ZXh0T3B0aW9ucy51c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0KTsKKyAgICBXS1By
ZWZlcmVuY2VzU2V0U2hvdWxkVXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dChwcmVmZXJlbmNl
cywgb3B0aW9ucy51c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0KCkpOwogCiAjaWYgRU5BQkxF
KEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKICAgICBXS1ByZWZlcmVuY2VzU2V0SXNBY2Nl
c3NpYmlsaXR5SXNvbGF0ZWRUcmVlRW5hYmxlZChwcmVmZXJlbmNlcywgYWNjZXNzaWJpbGl0eUlz
b2xhdGVkVHJlZU1vZGUoKSk7CkBAIC0xMDA2LDExICsxMDEwLDEyIEBAIGJvb2wgVGVzdENvbnRy
b2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3QKICAgICBzZXRWYWx1ZShyZXNldE1lc3NhZ2VCb2R5
LCAiQWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZSIsIG1fYWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJl
ZU1vZGUpOwogI2VuZGlmCiAKLSAgICBpZiAob3B0aW9ucy5qc2NPcHRpb25zLmxlbmd0aCgpKQot
ICAgICAgICBzZXRWYWx1ZShyZXNldE1lc3NhZ2VCb2R5LCAiSlNDT3B0aW9ucyIsIG9wdGlvbnMu
anNjT3B0aW9ucy5jX3N0cigpKTsKKyAgICBhdXRvIGpzY09wdGlvbnMgPSBvcHRpb25zLmpzY09w
dGlvbnMoKTsKKyAgICBpZiAoIWpzY09wdGlvbnMuZW1wdHkoKSkKKyAgICAgICAgc2V0VmFsdWUo
cmVzZXRNZXNzYWdlQm9keSwgIkpTQ09wdGlvbnMiLCBqc2NPcHRpb25zLmNfc3RyKCkpOwogCiAj
aWYgUExBVEZPUk0oQ09DT0EpCi0gICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRBZGRpdGlvbmFs
U3VwcG9ydGVkSW1hZ2VUeXBlc0ZvclRlc3Rpbmcob3B0aW9ucy5hZGRpdGlvbmFsU3VwcG9ydGVk
SW1hZ2VUeXBlcy5jX3N0cigpKTsKKyAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldEFkZGl0aW9u
YWxTdXBwb3J0ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyhvcHRpb25zLmFkZGl0aW9uYWxTdXBwb3J0
ZWRJbWFnZVR5cGVzKCkuY19zdHIoKSk7CiAjZW5kaWYKIAogICAgIFdLUGFnZVBvc3RNZXNzYWdl
VG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXco
KS0+cGFnZSgpLCB0b1dLKCJSZXNldCIpLmdldCgpLCByZXNldE1lc3NhZ2VCb2R5LmdldCgpKTsK
QEAgLTExMTgsNyArMTEyMyw3IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0Nv
bnNpc3QKIAogICAgIHNldE5hdmlnYXRpb25HZXN0dXJlc0VuYWJsZWQoZmFsc2UpOwogICAgIAot
ICAgIHNldElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKG9wdGlvbnMuaWdub3Jlc1ZpZXdwb3J0
U2NhbGVMaW1pdHMpOworICAgIHNldElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKG9wdGlvbnMu
aWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMoKSk7CiAKICAgICBtX29wZW5QYW5lbEZpbGVVUkxz
ID0gbnVsbHB0cjsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtMTMxOCw3ICsxMzIzLDcg
QEAgc3RhdGljIHN0ZDo6c3RyaW5nIHRlc3RQYXRoKFdLVVJMUmVmIHVybAogICAgIHJldHVybiBz
dGQ6OnN0cmluZygpOwogfQogCi1zdGF0aWMgV0tVUkxSZWYgY3JlYXRlVGVzdFVSTChjb25zdCBj
aGFyKiBwYXRoT3JVUkwpCitXS1VSTFJlZiBUZXN0Q29udHJvbGxlcjo6Y3JlYXRlVGVzdFVSTChj
b25zdCBjaGFyKiBwYXRoT3JVUkwpCiB7CiAgICAgaWYgKHN0cnN0cihwYXRoT3JVUkwsICJodHRw
Oi8vIikgfHwgc3Ryc3RyKHBhdGhPclVSTCwgImh0dHBzOi8vIikgfHwgc3Ryc3RyKHBhdGhPclVS
TCwgImZpbGU6Ly8iKSkKICAgICAgICAgcmV0dXJuIFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KHBhdGhPclVSTCk7CkBAIC0xMzU2LDIxMSArMTM2MSwyMyBAQCBzdGF0aWMgV0tVUkxSZWYgY3Jl
YXRlVGVzdFVSTChjb25zdCBjaGFyCiAgICAgcmV0dXJuIFdLVVJMQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKGJ1ZmZlci5nZXQoKSk7CiB9CiAKLXN0YXRpYyBib29sIHBhcnNlQm9vbGVhblRlc3RIZWFk
ZXJWYWx1ZShjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJ0
cnVlIikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHZhbHVlID09ICJmYWxzZSIpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIExPR19FUlJPUigiRm91bmQgdW5leHBlY3RlZCB2
YWx1ZSAnJXMnIGZvciBib29sZWFuIG9wdGlvbi4gRXhwZWN0ZWQgJ3RydWUnIG9yICdmYWxzZScu
IiwgdmFsdWUuY19zdHIoKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgc3RkOjpz
dHJpbmcgcGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1JlbGF0aXZlUGF0aChjb25zdCBzdGQ6
OnN0cmluZyYgdmFsdWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCi17Ci0gICAgYXV0
byBiYXNlVVJMID0gYWRvcHRXSyhjcmVhdGVUZXN0VVJMKHBhdGhPclVSTC5jX3N0cigpKSk7Ci0g
ICAgYXV0byByZWxhdGl2ZVVSTCA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoQmFzZVVSTChiYXNl
VVJMLmdldCgpLCB2YWx1ZS5jX3N0cigpKSk7Ci0gICAgcmV0dXJuIHRvU1REKGFkb3B0V0soV0tV
UkxDb3B5UGF0aChyZWxhdGl2ZVVSTC5nZXQoKSkpKTsKLX0KLQotc3RhdGljIHN0ZDo6c3RyaW5n
IHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNVUkwoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVl
KQotewotICAgIHJldHVybiB0b1NURChhZG9wdFdLKFdLVVJMQ29weVN0cmluZyhjcmVhdGVUZXN0
VVJMKHZhbHVlLmNfc3RyKCkpKSkpOwotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVUZXN0T3B0aW9u
c0Zyb21UZXN0SGVhZGVyKFRlc3RPcHRpb25zJiB0ZXN0T3B0aW9ucywgY29uc3Qgc3RkOjpzdHJp
bmcmIHBhdGhPclVSTCwgY29uc3Qgc3RkOjpzdHJpbmcmIGFic29sdXRlUGF0aCkKLXsKLSAgICBz
dGQ6OnN0cmluZyBmaWxlbmFtZSA9IGFic29sdXRlUGF0aDsKLSAgICBpZiAoZmlsZW5hbWUuZW1w
dHkoKSkgewotICAgICAgICAvLyBHcm9zcy4gTmVlZCB0byByZWR1Y2UgY29udmVyc2lvbnMgYmV0
d2VlbiBhbGwgdGhlIHN0cmluZyB0eXBlcyBhbmQgVVJMcy4KLSAgICAgICAgZmlsZW5hbWUgPSB0
ZXN0UGF0aChhZG9wdFdLKGNyZWF0ZVRlc3RVUkwocGF0aE9yVVJMLmNfc3RyKCkpKS5nZXQoKSk7
Ci0gICAgfQotCi0gICAgaWYgKGZpbGVuYW1lLmVtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHN0ZDo6c3RyaW5nIG9wdGlvbnM7Ci0gICAgc3RkOjppZnN0cmVhbSB0ZXN0RmlsZShmaWxl
bmFtZS5kYXRhKCkpOwotICAgIGlmICghdGVzdEZpbGUuZ29vZCgpKQotICAgICAgICByZXR1cm47
Ci0gICAgZ2V0bGluZSh0ZXN0RmlsZSwgb3B0aW9ucyk7Ci0gICAgc3RkOjpzdHJpbmcgYmVnaW5T
dHJpbmcoIndlYmtpdC10ZXN0LXJ1bm5lciBbICIpOwotICAgIHN0ZDo6c3RyaW5nIGVuZFN0cmlu
ZygiIF0iKTsKLSAgICBzaXplX3QgYmVnaW5Mb2NhdGlvbiA9IG9wdGlvbnMuZmluZChiZWdpblN0
cmluZyk7Ci0gICAgaWYgKGJlZ2luTG9jYXRpb24gPT0gc3RkOjpzdHJpbmc6Om5wb3MpCi0gICAg
ICAgIHJldHVybjsKLSAgICBzaXplX3QgZW5kTG9jYXRpb24gPSBvcHRpb25zLmZpbmQoZW5kU3Ry
aW5nLCBiZWdpbkxvY2F0aW9uKTsKLSAgICBpZiAoZW5kTG9jYXRpb24gPT0gc3RkOjpzdHJpbmc6
Om5wb3MpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgZmluZCBlbmQgb2YgdGVzdCBo
ZWFkZXIgaW4gJXMiLCBmaWxlbmFtZS5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBzdGQ6OnN0cmluZyBwYWlyU3RyaW5nID0gb3B0aW9ucy5zdWJzdHIoYmVnaW5Mb2NhdGlv
biArIGJlZ2luU3RyaW5nLnNpemUoKSwgZW5kTG9jYXRpb24gLSAoYmVnaW5Mb2NhdGlvbiArIGJl
Z2luU3RyaW5nLnNpemUoKSkpOwotICAgIHNpemVfdCBwYWlyU3RhcnQgPSAwOwotICAgIHdoaWxl
IChwYWlyU3RhcnQgPCBwYWlyU3RyaW5nLnNpemUoKSkgewotICAgICAgICBzaXplX3QgcGFpckVu
ZCA9IHBhaXJTdHJpbmcuZmluZCgiICIsIHBhaXJTdGFydCk7Ci0gICAgICAgIGlmIChwYWlyRW5k
ID09IHN0ZDo6c3RyaW5nOjpucG9zKQotICAgICAgICAgICAgcGFpckVuZCA9IHBhaXJTdHJpbmcu
c2l6ZSgpOwotICAgICAgICBzaXplX3QgZXF1YWxzTG9jYXRpb24gPSBwYWlyU3RyaW5nLmZpbmQo
Ij0iLCBwYWlyU3RhcnQpOwotICAgICAgICBpZiAoZXF1YWxzTG9jYXRpb24gPT0gc3RkOjpzdHJp
bmc6Om5wb3MpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiTWFsZm9ybWVkIG9wdGlvbiBpbiB0
ZXN0IGhlYWRlciAoY291bGQgbm90IGZpbmQgJz0nIGNoYXJhY3RlcikgaW4gJXMiLCBmaWxlbmFt
ZS5jX3N0cigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGF1dG8g
a2V5ID0gcGFpclN0cmluZy5zdWJzdHIocGFpclN0YXJ0LCBlcXVhbHNMb2NhdGlvbiAtIHBhaXJT
dGFydCk7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBwYWlyU3RyaW5nLnN1YnN0cihlcXVhbHNMb2Nh
dGlvbiArIDEsIHBhaXJFbmQgLSAoZXF1YWxzTG9jYXRpb24gKyAxKSk7Ci0KLSAgICAgICAgaWYg
KCFrZXkucmZpbmQoImV4cGVyaW1lbnRhbDoiKSkgewotICAgICAgICAgICAga2V5ID0ga2V5LnN1
YnN0cigxMyk7Ci0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5leHBlcmltZW50YWxGZWF0dXJlcy5h
ZGQoU3RyaW5nKGtleS5jX3N0cigpKSwgcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVl
KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWtleS5yZmluZCgiaW50ZXJuYWw6IikpIHsK
LSAgICAgICAgICAgIGtleSA9IGtleS5zdWJzdHIoOSk7Ci0gICAgICAgICAgICB0ZXN0T3B0aW9u
cy5pbnRlcm5hbERlYnVnRmVhdHVyZXMuYWRkKFN0cmluZyhrZXkuY19zdHIoKSksIHBhcnNlQm9v
bGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGtl
eSA9PSAibGFuZ3VhZ2UiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuY29udGV4dE9wdGlvbnMu
b3ZlcnJpZGVMYW5ndWFnZXMgPSBTdHJpbmcodmFsdWUuY19zdHIoKSkuc3BsaXQoJywnKTsKLSAg
ICAgICAgZWxzZSBpZiAoa2V5ID09ICJ1c2VUaHJlYWRlZFNjcm9sbGluZyIpCi0gICAgICAgICAg
ICB0ZXN0T3B0aW9ucy51c2VUaHJlYWRlZFNjcm9sbGluZyA9IHBhcnNlQm9vbGVhblRlc3RIZWFk
ZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAidXNlQWNjZWxlcmF0ZWRE
cmF3aW5nIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLnVzZUFjY2VsZXJhdGVkRHJhd2luZyA9
IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtl
eSA9PSAidXNlRmxleGlibGVWaWV3cG9ydCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy51c2VG
bGV4aWJsZVZpZXdwb3J0ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAg
ICAgICAgZWxzZSBpZiAoa2V5ID09ICJ1c2VEYXRhRGV0ZWN0aW9uIikKLSAgICAgICAgICAgIHRl
c3RPcHRpb25zLnVzZURhdGFEZXRlY3Rpb24gPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUo
dmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInVzZU1vY2tTY3JvbGxiYXJzIikKLSAg
ICAgICAgICAgIHRlc3RPcHRpb25zLnVzZU1vY2tTY3JvbGxiYXJzID0gcGFyc2VCb29sZWFuVGVz
dEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJuZWVkc1NpdGVT
cGVjaWZpY1F1aXJrcyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5uZWVkc1NpdGVTcGVjaWZp
Y1F1aXJrcyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVs
c2UgaWYgKGtleSA9PSAiaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMiKQotICAgICAgICAgICAg
dGVzdE9wdGlvbnMuaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMgPSBwYXJzZUJvb2xlYW5UZXN0
SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInVzZUNoYXJhY3Rl
clNlbGVjdGlvbkdyYW51bGFyaXR5IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLnVzZUNoYXJh
Y3RlclNlbGVjdGlvbkdyYW51bGFyaXR5ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZh
bHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVBdHRhY2htZW50RWxlbWVudCIp
Ci0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVBdHRhY2htZW50RWxlbWVudCA9IHBhcnNl
Qm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAi
ZW5hYmxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5h
YmxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFs
dWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInVzZUVwaGVtZXJhbFNlc3Npb24iKQotICAg
ICAgICAgICAgdGVzdE9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lvbiA9IHBhcnNlQm9vbGVhblRl
c3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlTWVu
dUl0ZW1FbGVtZW50IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZU1lbnVJdGVtRWxl
bWVudCA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2Ug
aWYgKGtleSA9PSAiZW5hYmxlS2V5Z2VuRWxlbWVudCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9u
cy5lbmFibGVLZXlnZW5FbGVtZW50ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVl
KTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzIikK
LSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMgPSBwYXJz
ZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0g
ImVuYWJsZVBvaW50ZXJMb2NrIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZVBvaW50
ZXJMb2NrID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxz
ZSBpZiAoa2V5ID09ICJlbmFibGVXZWJBdXRoZW50aWNhdGlvbiIpCi0gICAgICAgICAgICB0ZXN0
T3B0aW9ucy5lbmFibGVXZWJBdXRoZW50aWNhdGlvbiA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJW
YWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlV2ViQXV0aGVudGlj
YXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxl
V2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IgPSBwYXJzZUJvb2xlYW5UZXN0SGVh
ZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUluc3BlY3Rv
ckFkZGl0aW9ucyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVJbnNwZWN0b3JBZGRp
dGlvbnMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNl
IGlmIChrZXkgPT0gImR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIpCi0gICAgICAgICAgICB0ZXN0
T3B0aW9ucy5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVy
VmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImFwcGxpY2F0aW9uTWFuaWZl
c3QiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuYXBwbGljYXRpb25NYW5pZmVzdCA9IHBhcnNl
U3RyaW5nVGVzdEhlYWRlclZhbHVlQXNSZWxhdGl2ZVBhdGgodmFsdWUsIHBhdGhPclVSTCk7Ci0g
ICAgICAgIGVsc2UgaWYgKGtleSA9PSAiYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNr
Rm9yQ3JlZGVudGlhbHMiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuYWxsb3dDcm9zc09yaWdp
blN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVy
VmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImRvbVBhc3RlQWxsb3dlZCIp
Ci0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5kb21QYXN0ZUFsbG93ZWQgPSBwYXJzZUJvb2xlYW5U
ZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZVBy
b2Nlc3NTd2FwT25OYXZpZ2F0aW9uIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmNvbnRleHRP
cHRpb25zLmVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uID0gcGFyc2VCb29sZWFuVGVzdEhl
YWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVQcm9jZXNz
U3dhcE9uV2luZG93T3BlbiIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5jb250ZXh0T3B0aW9u
cy5lbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJW
YWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAidXNlU2VydmljZVdvcmtlclNo
b3J0VGltZW91dCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5jb250ZXh0T3B0aW9ucy51c2VT
ZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZh
bHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVDb2xvckZpbHRlciIpCi0gICAg
ICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVDb2xvckZpbHRlciA9IHBhcnNlQm9vbGVhblRlc3RI
ZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAicHVuY2hPdXRXaGl0
ZUJhY2tncm91bmRzSW5EYXJrTW9kZSIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5wdW5jaE91
dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVl
KHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJqc2NPcHRpb25zIikKLSAgICAgICAg
ICAgIHRlc3RPcHRpb25zLmpzY09wdGlvbnMgPSB2YWx1ZTsKLSAgICAgICAgZWxzZSBpZiAoa2V5
ID09ICJhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIpCi0gICAgICAgICAgICB0ZXN0T3B0
aW9ucy5hZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyA9IHZhbHVlOwotICAgICAgICBlbHNl
IGlmIChrZXkgPT0gInJ1blNpbmdseSIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5ydW5TaW5n
bHkgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlm
IChrZXkgPT0gInNob3VsZElnbm9yZU1ldGFWaWV3cG9ydCIpCi0gICAgICAgICAgICB0ZXN0T3B0
aW9ucy5zaG91bGRJZ25vcmVNZXRhVmlld3BvcnQgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFs
dWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInNwZWxsQ2hlY2tpbmdEb3RzIikK
LSAgICAgICAgICAgIHRlc3RPcHRpb25zLnNob3VsZFNob3dTcGVsbENoZWNraW5nRG90cyA9IHBh
cnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9
PSAiZW5hYmxlU2VydmljZUNvbnRyb2xzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJs
ZVNlcnZpY2VDb250cm9scyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0g
ICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZWRpdGFibGUiKQotICAgICAgICAgICAgdGVzdE9wdGlv
bnMuZWRpdGFibGUgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAg
ICBlbHNlIGlmIChrZXkgPT0gInNob3VsZEhhbmRsZVJ1bk9wZW5QYW5lbCIpCi0gICAgICAgICAg
ICB0ZXN0T3B0aW9ucy5zaG91bGRIYW5kbGVSdW5PcGVuUGFuZWwgPSBwYXJzZUJvb2xlYW5UZXN0
SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInNob3VsZFByZXNl
bnRQb3BvdmVycyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5zaG91bGRQcmVzZW50UG9wb3Zl
cnMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlm
IChrZXkgPT0gImNvbnRlbnRJbnNldC50b3AiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuY29u
dGVudEluc2V0VG9wID0gc3RkOjpzdG9kKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09
ICJpZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzIikKLSAgICAgICAgICAgIHRlc3RP
cHRpb25zLmNvbnRleHRPcHRpb25zLmlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMg
PSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChr
ZXkgPT0gImNvbnRlbnRNb2RlIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmNvbnRlbnRNb2Rl
ID0geyB2YWx1ZS5jX3N0cigpIH07Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiYXBwbGljYXRp
b25CdW5kbGVJZGVudGlmaWVyIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmFwcGxpY2F0aW9u
QnVuZGxlSWRlbnRpZmllciA9IHsgdmFsdWUuY19zdHIoKSB9OwotICAgICAgICBlbHNlIGlmIChr
ZXkgPT0gImVuYWJsZUFwcE5hcCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVBcHBO
YXAgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlm
IChrZXkgPT0gImVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUiKQotICAgICAgICAgICAgdGVzdE9wdGlv
bnMuZW5hYmxlQmFja0ZvcndhcmRDYWNoZSA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2
YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiYWxsb3dzTGlua1ByZXZpZXciKQotICAg
ICAgICAgICAgdGVzdE9wdGlvbnMuYWxsb3dzTGlua1ByZXZpZXcgPSBwYXJzZUJvb2xlYW5UZXN0
SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUNhcHR1
cmVWaWRlb0luVUlQcm9jZXNzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZUNhcHR1
cmVWaWRlb0luVUlQcm9jZXNzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsK
LSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVDYXB0dXJlVmlkZW9JbkdQVVByb2Nlc3Mi
KQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlQ2FwdHVyZVZpZGVvSW5HUFVQcm9jZXNz
ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAo
a2V5ID09ICJlbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcyIpCi0gICAgICAgICAgICB0ZXN0
T3B0aW9ucy5lbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcyA9IHBhcnNlQm9vbGVhblRlc3RI
ZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlQ2FwdHVy
ZUF1ZGlvSW5HUFVQcm9jZXNzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZUNhcHR1
cmVBdWRpb0luR1BVUHJvY2VzcyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7
Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyIp
Ci0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5hbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzID0g
cGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5
ID09ICJlbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25z
LmVuYWJsZUluQXBwQnJvd3NlclByaXZhY3kgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUo
dmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInN0YW5kYWxvbmVXZWJBcHBsaWNhdGlv
blVSTCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5zdGFuZGFsb25lV2ViQXBwbGljYXRpb25V
UkwgPSBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzVVJMKHZhbHVlKTsKLSAgICAgICAgZWxz
ZSBpZiAoa2V5ID09ICJpc0FwcEJvdW5kV2ViVmlldyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9u
cy5pc0FwcEJvdW5kV2ViVmlldyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7
Ci0gICAgICAgIHBhaXJTdGFydCA9IHBhaXJFbmQgKyAxOwotICAgIH0KLX0KLQogVGVzdE9wdGlv
bnMgVGVzdENvbnRyb2xsZXI6OnRlc3RPcHRpb25zRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYg
Y29tbWFuZCkgY29uc3QKIHsKLSAgICBUZXN0T3B0aW9ucyBvcHRpb25zKGNvbW1hbmQucGF0aE9y
VVJMKTsKLQotICAgIG9wdGlvbnMudXNlUmVtb3RlTGF5ZXJUcmVlID0gbV9zaG91bGRVc2VSZW1v
dGVMYXllclRyZWU7Ci0gICAgb3B0aW9ucy5zaG91bGRTaG93V2ViVmlldyA9IG1fc2hvdWxkU2hv
d1dlYlZpZXc7Ci0KLSAgICBmb3IgKGF1dG8mIGZlYXR1cmUgOiBtX2ludGVybmFsRmVhdHVyZXMp
Ci0gICAgICAgIG9wdGlvbnMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzLmFkZChmZWF0dXJlLmtleSwg
ZmVhdHVyZS52YWx1ZSk7Ci0gICAgZm9yIChhdXRvJiBmZWF0dXJlIDogbV9leHBlcmltZW50YWxG
ZWF0dXJlcykKLSAgICAgICAgb3B0aW9ucy5leHBlcmltZW50YWxGZWF0dXJlcy5hZGQoZmVhdHVy
ZS5rZXksIGZlYXR1cmUudmFsdWUpOwotCi0gICAgdXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RP
cHRpb25zRm9yVGVzdChvcHRpb25zLCBjb21tYW5kLnBhdGhPclVSTCk7Ci0gICAgdXBkYXRlVGVz
dE9wdGlvbnNGcm9tVGVzdEhlYWRlcihvcHRpb25zLCBjb21tYW5kLnBhdGhPclVSTCwgY29tbWFu
ZC5hYnNvbHV0ZVBhdGgpOwotICAgIHBsYXRmb3JtQWRkVGVzdE9wdGlvbnMob3B0aW9ucyk7Cisg
ICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVzID0gbV9nbG9iYWxGZWF0dXJlczsKKyAgICBtZXJnZShm
ZWF0dXJlcywgaGFyZGNvZGVkRmVhdHVyZXNCYXNlZE9uUGF0aEZvclRlc3QoY29tbWFuZCkpOwor
ICAgIG1lcmdlKGZlYXR1cmVzLCBwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1bHRzRm9yVGVz
dChjb21tYW5kKSk7CisgICAgbWVyZ2UoZmVhdHVyZXMsIGZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0
T3B0aW9uc0ZpbGVzRm9yVGVzdChjb21tYW5kKSk7CisgICAgbWVyZ2UoZmVhdHVyZXMsIGZlYXR1
cmVEZWZhdWx0c0Zyb21UZXN0SGVhZGVyRm9yVGVzdChjb21tYW5kKSk7CisgICAgbWVyZ2UoZmVh
dHVyZXMsIHBsYXRmb3JtU3BlY2lmaWNGZWF0dXJlT3ZlcnJpZGVzRGVmYXVsdHNGb3JUZXN0KGNv
bW1hbmQpKTsKIAotICAgIHJldHVybiBvcHRpb25zOworICAgIHJldHVybiBUZXN0T3B0aW9ucyB7
IGZlYXR1cmVzIH07CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnVwZGF0ZVdlYlZpZXdTaXpl
Rm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYgdGVzdCkKIHsKICAgICB1bnNpZ25lZCB3aWR0
aCA9IHZpZXdXaWR0aDsKICAgICB1bnNpZ25lZCBoZWlnaHQgPSB2aWV3SGVpZ2h0OwotICAgIGlm
ICh0ZXN0Lm9wdGlvbnMoKS5pc1NWR1Rlc3QpIHsKKyAgICBpZiAodGVzdC5vcHRpb25zKCkuaXNT
VkdUZXN0KCkpIHsKICAgICAgICAgd2lkdGggPSB3M2NTVkdWaWV3V2lkdGg7CiAgICAgICAgIGhl
aWdodCA9IHczY1NWR1ZpZXdIZWlnaHQ7CiAgICAgfQpAQCAtMTU3MCw3ICsxMzg3LDcgQEAgdm9p
ZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlV2ViVmlld1NpemVGbwogCiB2b2lkIFRlc3RDb250cm9s
bGVyOjp1cGRhdGVXaW5kb3dTY2FsZUZvclRlc3QoUGxhdGZvcm1XZWJWaWV3KiB2aWV3LCBjb25z
dCBUZXN0SW52b2NhdGlvbiYgdGVzdCkKIHsKLSAgICB2aWV3LT5jaGFuZ2VXaW5kb3dTY2FsZUlm
TmVlZGVkKHRlc3Qub3B0aW9ucygpLmRldmljZVNjYWxlRmFjdG9yKTsKKyAgICB2aWV3LT5jaGFu
Z2VXaW5kb3dTY2FsZUlmTmVlZGVkKHRlc3Qub3B0aW9ucygpLmRldmljZVNjYWxlRmFjdG9yKCkp
OwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpjb25maWd1cmVWaWV3Rm9yVGVzdChjb25zdCBU
ZXN0SW52b2NhdGlvbiYgdGVzdCkKQEAgLTE3NjYsNiArMTU4MywxMiBAQCBzdGF0aWMgVGVzdENv
bW1hbmQgcGFyc2VJbnB1dExpbmUoY29uc3QgCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGRp
ZShpbnB1dExpbmUpOwogICAgIH0KKyAgICAKKyAgICBpZiAocmVzdWx0LmFic29sdXRlUGF0aC5l
bXB0eSgpKSB7CisgICAgICAgIC8vIEdyb3NzLiBOZWVkIHRvIHJlZHVjZSBjb252ZXJzaW9ucyBi
ZXR3ZWVuIGFsbCB0aGUgc3RyaW5nIHR5cGVzIGFuZCBVUkxzLgorICAgICAgICByZXN1bHQuYWJz
b2x1dGVQYXRoID0gdGVzdFBhdGgoYWRvcHRXSyhUZXN0Q29udHJvbGxlcjo6Y3JlYXRlVGVzdFVS
TChyZXN1bHQucGF0aE9yVVJMLmNfc3RyKCkpKS5nZXQoKSk7CisgICAgfQorCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIApAQCAtMTc4OCw3ICsxNjExLDcgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6
cnVuVGVzdChjb25zdCBjaGFyKgogICAgIGlmIChjb21tYW5kLnRpbWVvdXQgPiAwX3MpCiAgICAg
ICAgIG1fY3VycmVudEludm9jYXRpb24tPnNldEN1c3RvbVRpbWVvdXQoY29tbWFuZC50aW1lb3V0
KTsKIAotICAgIG1fY3VycmVudEludm9jYXRpb24tPnNldER1bXBKU0NvbnNvbGVMb2dJblN0ZEVy
cihjb21tYW5kLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciB8fCBvcHRpb25zLmR1bXBKU0NvbnNv
bGVMb2dJblN0ZEVycik7CisgICAgbV9jdXJyZW50SW52b2NhdGlvbi0+c2V0RHVtcEpTQ29uc29s
ZUxvZ0luU3RkRXJyKGNvbW1hbmQuZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIHx8IG9wdGlvbnMu
ZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKCkpOwogCiAgICAgcGxhdGZvcm1XaWxsUnVuVGVzdCgq
bV9jdXJyZW50SW52b2NhdGlvbik7CiAKQEAgLTMwMDMsNyArMjgyNiw3IEBAIHZvaWQgVGVzdENv
bnRyb2xsZXI6OnBsYXRmb3JtV2lsbFJ1blRlc3QKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1Jbml0aWFsaXplRGF0YVN0b3JlKFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYgY29uZmlndXJh
dGlvbiwgY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKCFvcHRpb25zLnVz
ZUVwaGVtZXJhbFNlc3Npb24pCisgICAgaWYgKCFvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24o
KSkKICAgICAgICAgV0tQYWdlQ29uZmlndXJhdGlvblNldFdlYnNpdGVEYXRhU3RvcmUoY29uZmln
dXJhdGlvbiwgZGVmYXVsdFdlYnNpdGVEYXRhU3RvcmUoKSk7CiAKICAgICBtX3dlYnNpdGVEYXRh
U3RvcmUgPSBXS1BhZ2VDb25maWd1cmF0aW9uR2V0V2Vic2l0ZURhdGFTdG9yZShjb25maWd1cmF0
aW9uKTsKQEAgLTM4MTgsNyArMzY0MSw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlaW5pdGlh
bGl6ZUFwcEJvdW4KICAgICBXS1dlYnNpdGVEYXRhU3RvcmVSZWluaXRpYWxpemVBcHBCb3VuZERv
bWFpbnMoVGVzdENvbnRyb2xsZXI6OndlYnNpdGVEYXRhU3RvcmUoKSk7CiB9CiAKLXZvaWQgVGVz
dENvbnRyb2xsZXI6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKGNvbnN0
IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllcikKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnVwZGF0ZUJ1
bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKGNvbnN0IHN0ZDo6c3RyaW5nJiBidW5kbGVJ
ZGVudGlmaWVyKQogewogICAgIEluQXBwQnJvd3NlclByaXZhY3lDYWxsYmFja0NvbnRleHQgY29u
dGV4dCgqdGhpcyk7CiAgICAgV0tXZWJzaXRlRGF0YVN0b3JlVXBkYXRlQnVuZGxlSWRlbnRpZmll
ckluTmV0d29ya1Byb2Nlc3MoVGVzdENvbnRyb2xsZXI6OndlYnNpdGVEYXRhU3RvcmUoKSwgdG9X
SyhidW5kbGVJZGVudGlmaWVyKS5nZXQoKSwgJmNvbnRleHQsIGluQXBwQnJvd3NlclByaXZhY3lW
b2lkUmVzdWx0Q2FsbGJhY2spOwpAQCAtMzgzMyw4ICszNjU2LDkgQEAgdm9pZCBUZXN0Q29udHJv
bGxlcjo6Y2xlYXJCdW5kbGVJZGVudGlmaQogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQotdm9p
ZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1BZGRUZXN0T3B0aW9ucyhUZXN0T3B0aW9ucyYpIGNv
bnN0CitUZXN0RmVhdHVyZXMgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtU3BlY2lmaWNGZWF0dXJl
T3ZlcnJpZGVzRGVmYXVsdHNGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJikgY29uc3QKIHsKKyAg
ICByZXR1cm4geyB9CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmluamVjdFVzZXJTY3JpcHQo
V0tTdHJpbmdSZWYpCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5o
CShyZXZpc2lvbiAyNjc4ODUpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDEwIEBACiAjaW5jbHVkZSAiV2ViTm90
aWZpY2F0aW9uUHJvdmlkZXIuaCIKICNpbmNsdWRlICJXb3JrUXVldWVNYW5hZ2VyLmgiCiAjaW5j
bHVkZSA8V2ViS2l0L1dLUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8ZmlsZXN5c3RlbT4KICNpbmNs
dWRlIDxzZXQ+CiAjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CiAj
aW5jbHVkZSA8dmVjdG9yPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CkBAIC01MCwxMiArNTIsMTIgQEAgT0JKQ19DTEFTUyBXS1dlYlZpZXdD
b25maWd1cmF0aW9uOwogCiBuYW1lc3BhY2UgV1RSIHsKIAotY2xhc3MgVGVzdEludm9jYXRpb247
CitjbGFzcyBFdmVudFNlbmRlclByb3h5OwogY2xhc3MgT3JpZ2luU2V0dGluZ3M7CiBjbGFzcyBQ
bGF0Zm9ybVdlYlZpZXc7Ci1jbGFzcyBFdmVudFNlbmRlclByb3h5OworY2xhc3MgVGVzdEludm9j
YXRpb247CitjbGFzcyBUZXN0T3B0aW9uczsKIHN0cnVjdCBUZXN0Q29tbWFuZDsKLXN0cnVjdCBU
ZXN0T3B0aW9uczsKIAogY2xhc3MgQXN5bmNUYXNrIHsKIHB1YmxpYzoKQEAgLTkxLDYgKzkzLDgg
QEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGNvbmZpZ3VyZVdlYnNpdGVEYXRhU3RvcmVUZW1w
b3JhcnlEaXJlY3RvcmllcyhXS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uUmVmKTsKICAg
ICBzdGF0aWMgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRlZmF1bHRXZWJzaXRlRGF0YVN0b3JlKCk7
CiAKKyAgICBzdGF0aWMgV0tVUkxSZWYgY3JlYXRlVGVzdFVSTChjb25zdCBjaGFyKiBwYXRoT3JV
UkwpOworCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZpZXdXaWR0aDsKICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgdmlld0hlaWdodDsKIApAQCAtMTE1LDIwICsxMTksMTUgQEAgcHVibGlj
OgogICAgIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiB3ZWJzaXRlRGF0YVN0b3JlKCk7CiAKICAgICBF
dmVudFNlbmRlclByb3h5KiBldmVudFNlbmRlclByb3h5KCkgeyByZXR1cm4gbV9ldmVudFNlbmRl
clByb3h5LmdldCgpOyB9Ci0KLSAgICBib29sIHNob3VsZFVzZVJlbW90ZUxheWVyVHJlZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2hvdWxkVXNlUmVtb3RlTGF5ZXJUcmVlOyB9CiAgICAgCiAgICAgLy8g
UnVucyB0aGUgcnVuIGxvb3AgdW50aWwgYGRvbmVgIGlzIHRydWUgb3IgdGhlIHRpbWVvdXQgZWxh
cHNlcy4KICAgICBib29sIHVzZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKCkgeyByZXR1cm4gbV91
c2VXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcjsgfQogICAgIHZvaWQgcnVuVW50aWwoYm9vbCYgZG9u
ZSwgV1RGOjpTZWNvbmRzIHRpbWVvdXQpOwogICAgIHZvaWQgbm90aWZ5RG9uZSgpOwogCi0gICAg
Ym9vbCBzaG91bGRTaG93V2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkU2hvd1dlYlZp
ZXc7IH0KICAgICBib29sIHVzaW5nU2VydmVyTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNpbmdT
ZXJ2ZXJNb2RlOyB9CiAgICAgdm9pZCBjb25maWd1cmVWaWV3Rm9yVGVzdChjb25zdCBUZXN0SW52
b2NhdGlvbiYpOwotICAgIAotICAgIGJvb2wgc2hvdWxkU2hvd1RvdWNoZXMoKSBjb25zdCB7IHJl
dHVybiBtX3Nob3VsZFNob3dUb3VjaGVzOyB9Ci0gICAgCisKICAgICBib29sIGJlZm9yZVVubG9h
ZFJldHVyblZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9iZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZTsg
fQogICAgIHZvaWQgc2V0QmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUoYm9vbCB2YWx1ZSkgeyBtX2Jl
Zm9yZVVubG9hZFJldHVyblZhbHVlID0gdmFsdWU7IH0KIApAQCAtMjc1LDcgKzI3NCw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIGNsZWFyTG9hZGVkU3VicmVzb3VyY2VEb21haW5zKCk7CiAgICAgdm9p
ZCBjbGVhckFwcEJvdW5kU2Vzc2lvbigpOwogICAgIHZvaWQgcmVpbml0aWFsaXplQXBwQm91bmRE
b21haW5zKCk7Ci0gICAgdm9pZCB1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vz
cyhjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIpOworICAgIHZvaWQgdXBkYXRlQnVuZGxl
SWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MoY29uc3Qgc3RkOjpzdHJpbmcmIGJ1bmRsZUlkZW50
aWZpZXIpOwogICAgIHZvaWQgY2xlYXJCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcygp
OwogCiAgICAgV0tBcnJheVJlZiBvcGVuUGFuZWxGaWxlVVJMcygpIGNvbnN0IHsgcmV0dXJuIG1f
b3BlblBhbmVsRmlsZVVSTHMuZ2V0KCk7IH0KQEAgLTM2Miw3ICszNjEsNyBAQCBwdWJsaWM6CiAK
IHByaXZhdGU6CiAgICAgV0tSZXRhaW5QdHI8V0tQYWdlQ29uZmlndXJhdGlvblJlZj4gZ2VuZXJh
dGVQYWdlQ29uZmlndXJhdGlvbihjb25zdCBUZXN0T3B0aW9ucyYpOwotICAgIFdLUmV0YWluUHRy
PFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWY+IGdlbmVyYXRlQ29udGV4dENvbmZpZ3VyYXRpb24o
Y29uc3QgVGVzdE9wdGlvbnM6OkNvbnRleHRPcHRpb25zJikgY29uc3Q7CisgICAgV0tSZXRhaW5Q
dHI8V0tDb250ZXh0Q29uZmlndXJhdGlvblJlZj4gZ2VuZXJhdGVDb250ZXh0Q29uZmlndXJhdGlv
bihjb25zdCBDb250ZXh0T3B0aW9ucyYpIGNvbnN0OwogICAgIHZvaWQgaW5pdGlhbGl6ZShpbnQg
YXJnYywgY29uc3QgY2hhciogYXJndltdKTsKICAgICB2b2lkIGNyZWF0ZVdlYlZpZXdXaXRoT3B0
aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYpOwogICAgIHZvaWQgcnVuKCk7CkBAIC0zODAsNyArMzc5
LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtRGVzdHJveSgpOwogICAgIFdLQ29udGV4
dFJlZiBwbGF0Zm9ybUFkanVzdENvbnRleHQoV0tDb250ZXh0UmVmLCBXS0NvbnRleHRDb25maWd1
cmF0aW9uUmVmKTsKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZUNvbnRleHQoKTsKLSAgICB2
b2lkIHBsYXRmb3JtQWRkVGVzdE9wdGlvbnMoVGVzdE9wdGlvbnMmKSBjb25zdDsKICAgICB2b2lk
IHBsYXRmb3JtQ3JlYXRlV2ViVmlldyhXS1BhZ2VDb25maWd1cmF0aW9uUmVmLCBjb25zdCBUZXN0
T3B0aW9ucyYpOwogICAgIHN0YXRpYyBQbGF0Zm9ybVdlYlZpZXcqIHBsYXRmb3JtQ3JlYXRlT3Ro
ZXJQYWdlKFBsYXRmb3JtV2ViVmlldyogcGFyZW50VmlldywgV0tQYWdlQ29uZmlndXJhdGlvblJl
ZiwgY29uc3QgVGVzdE9wdGlvbnMmKTsKICAgICB2b2lkIHBsYXRmb3JtUmVzZXRQcmVmZXJlbmNl
c1RvQ29uc2lzdGVudFZhbHVlcygpOwpAQCAtMzg5LDcgKzM4Nyw3IEBAIHByaXZhdGU6CiAjaWYg
UExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBjb2NvYVBsYXRmb3JtSW5pdGlhbGl6ZSgpOwogICAg
IHZvaWQgY29jb2FSZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKGNvbnN0IFRlc3RPcHRpb25z
Jik7Ci0gICAgdm9pZCBzZXRBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5n
Jik7CisgICAgdm9pZCBzZXRBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoY29uc3Qgc3RkOjpz
dHJpbmcmKTsKICAgICB2b2lkIGNsZWFyQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyVGVzdGlu
Z092ZXJyaWRlKCk7CiAjZW5kaWYKICAgICB2b2lkIHBsYXRmb3JtQ29uZmlndXJlVmlld0ZvclRl
c3QoY29uc3QgVGVzdEludm9jYXRpb24mKTsKQEAgLTQwMyw3ICs0MDEsOSBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCBlbnN1cmVWaWV3U3VwcG9ydHNPcHRpb25zRm9yVGVzdChjb25zdCBUZXN0SW52
b2NhdGlvbiYpOwogICAgIFRlc3RPcHRpb25zIHRlc3RPcHRpb25zRm9yVGVzdChjb25zdCBUZXN0
Q29tbWFuZCYpIGNvbnN0OwotICAgIHZvaWQgdXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRp
b25zRm9yVGVzdChUZXN0T3B0aW9ucyYsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpIGNv
bnN0OworICAgIFRlc3RGZWF0dXJlcyBnbG9iYWxGZWF0dXJlRGVmYXVsdHNGb3JUZXN0KGNvbnN0
IFRlc3RDb21tYW5kJikgY29uc3Q7CisgICAgVGVzdEZlYXR1cmVzIHBsYXRmb3JtU3BlY2lmaWNG
ZWF0dXJlRGVmYXVsdHNGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJikgY29uc3Q7CisgICAgVGVz
dEZlYXR1cmVzIHBsYXRmb3JtU3BlY2lmaWNGZWF0dXJlT3ZlcnJpZGVzRGVmYXVsdHNGb3JUZXN0
KGNvbnN0IFRlc3RDb21tYW5kJikgY29uc3Q7CiAKICAgICB2b2lkIHVwZGF0ZVdlYlZpZXdTaXpl
Rm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYpOwogICAgIHZvaWQgdXBkYXRlV2luZG93U2Nh
bGVGb3JUZXN0KFBsYXRmb3JtV2ViVmlldyosIGNvbnN0IFRlc3RJbnZvY2F0aW9uJik7CkBAIC01
MzgsOCArNTM4LDEwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2NyZWF0ZWRPdGhlclBhZ2UgeyBm
YWxzZSB9OwogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBtX3BhdGhzOwogICAgIHN0ZDo6
c2V0PHN0ZDo6c3RyaW5nPiBtX2FsbG93ZWRIb3N0czsKLSAgICBIYXNoTWFwPFN0cmluZywgYm9v
bD4gbV9pbnRlcm5hbEZlYXR1cmVzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBib29sPiBtX2V4cGVy
aW1lbnRhbEZlYXR1cmVzOworICAgIFRlc3RGZWF0dXJlcyBtX2dsb2JhbEZlYXR1cmVzOworCisg
ICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29sPiBtX2ludGVybmFsRmVhdHVy
ZXM7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29sPiBtX2V4cGVyaW1l
bnRhbEZlYXR1cmVzOwogCiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1faW5qZWN0ZWRC
dW5kbGVQYXRoOwogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtX3Rlc3RQbHVnaW5EaXJl
Y3Rvcnk7CkBAIC01NDgsNyArNTUwLDcgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxQbGF0Zm9ybVdlYlZpZXc+IG1fbWFpbldlYlZpZXc7CiAgICAgV0tSZXRhaW5QdHI8V0tDb250
ZXh0UmVmPiBtX2NvbnRleHQ7Ci0gICAgT3B0aW9uYWw8VGVzdE9wdGlvbnM6OkNvbnRleHRPcHRp
b25zPiBtX2NvbnRleHRPcHRpb25zOworICAgIE9wdGlvbmFsPENvbnRleHRPcHRpb25zPiBtX2Nv
bnRleHRPcHRpb25zOwogICAgIFdLUmV0YWluUHRyPFdLUGFnZUdyb3VwUmVmPiBtX3BhZ2VHcm91
cDsKICAgICBXS1JldGFpblB0cjxXS1VzZXJDb250ZW50Q29udHJvbGxlclJlZj4gbV91c2VyQ29u
dGVudENvbnRyb2xsZXI7CiAKQEAgLTYwNSwxNCArNjA3LDEwIEBAIHByaXZhdGU6CiAKICAgICBi
b29sIG1fZm9yY2VDb21wbGV4VGV4dCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3Nob3VsZFVzZUFj
Y2VsZXJhdGVkRHJhd2luZyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3Nob3VsZFVzZVJlbW90ZUxh
eWVyVHJlZSB7IGZhbHNlIH07Ci0KKyAgICAKICAgICBib29sIG1fc2hvdWxkTG9nQ2FuQXV0aGVu
dGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3Nob3Vs
ZExvZ0Rvd25sb2FkQ2FsbGJhY2tzIHsgZmFsc2UgfTsKICAgICBib29sIG1fc2hvdWxkTG9nSGlz
dG9yeUNsaWVudENhbGxiYWNrcyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3Nob3VsZFNob3dXZWJW
aWV3IHsgZmFsc2UgfTsKLSAgICAKLSAgICBib29sIG1fc2hvdWxkU2hvd1RvdWNoZXMgeyBmYWxz
ZSB9OwogICAgIGJvb2wgbV9jaGVja0ZvcldvcmxkTGVha3MgeyBmYWxzZSB9OwogCiAgICAgYm9v
bCBtX2FsbG93QW55SFRUUFNDZXJ0aWZpY2F0ZUZvckFsbG93ZWRIb3N0cyB7IGZhbHNlIH07Cklu
ZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAkocmV2aXNpb24g
MjY3ODg1KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzMSwxMSArMTMxLDExIEBAIGJvb2wgVGVzdEludm9jYXRpb246OnNo
b3VsZExvZ0hpc3RvcnlDbGkKIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IFRl
c3RJbnZvY2F0aW9uOjpjcmVhdGVUZXN0U2V0dGluZ3NEaWN0aW9uYXJ5KCkKIHsKICAgICBhdXRv
IGJlZ2luVGVzdE1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0aW9uYXJ5Q3JlYXRl
KCkpOwotICAgIHNldFZhbHVlKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAiVXNlRmxleGlibGVWaWV3
cG9ydCIsIG9wdGlvbnMoKS51c2VGbGV4aWJsZVZpZXdwb3J0KTsKKyAgICBzZXRWYWx1ZShiZWdp
blRlc3RNZXNzYWdlQm9keSwgIlVzZUZsZXhpYmxlVmlld3BvcnQiLCBvcHRpb25zKCkudXNlRmxl
eGlibGVWaWV3cG9ydCgpKTsKICAgICBzZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgIkR1
bXBQaXhlbHMiLCBtX2R1bXBQaXhlbHMpOwogICAgIHNldFZhbHVlKGJlZ2luVGVzdE1lc3NhZ2VC
b2R5LCAiVGltZW91dCIsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihtX3RpbWVvdXQubWlsbGlzZWNv
bmRzKCkpKTsKICAgICBzZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgIkR1bXBKU0NvbnNv
bGVMb2dJblN0ZEVyciIsIG1fZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKTsKLSAgICBzZXRWYWx1
ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzIiwg
b3B0aW9ucygpLmFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzLmNfc3RyKCkpOworICAgIHNl
dFZhbHVlKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlw
ZXMiLCBvcHRpb25zKCkuYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMoKS5jX3N0cigpKTsK
ICAgICByZXR1cm4gYmVnaW5UZXN0TWVzc2FnZUJvZHk7CiB9CiAKSW5kZXg6IFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdE9wdGlvbnMuY3BwCShyZXZpc2lvbiAyNjc4ODUpCisrKyBUb29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RPcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNDggKzI2
LDI1NCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RPcHRpb25zLmgiCiAK
KyNpbmNsdWRlICJTdHJpbmdGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJUZXN0Q29udHJvbGxlci5o
IgorI2luY2x1ZGUgPGZpbGVzeXN0ZW0+CisjaW5jbHVkZSA8ZnN0cmVhbT4KKyNpbmNsdWRlIDxp
b3N0cmVhbT4KICNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKKyNkZWZpbmUgRFVNUF9GRUFUVVJFUyAw
CisKIG5hbWVzcGFjZSBXVFIgewogCi1zdGF0aWMgYm9vbCBwYXRoQ29udGFpbnMoY29uc3Qgc3Rk
OjpzdHJpbmcmIHBhdGhPclVSTCwgY29uc3QgY2hhciogc3Vic3RyaW5nKQorI2lmIERVTVBfRkVB
VFVSRVMKK3N0YXRpYyB2b2lkIGR1bXBGZWF0dXJlcyhjb25zdCBUZXN0RmVhdHVyZXMmIGZlYXR1
cmVzKQogewotICAgIFN0cmluZyBwYXRoKHBhdGhPclVSTC5jX3N0cigpKTsKLSAgICByZXR1cm4g
cGF0aC5jb250YWlucyhzdWJzdHJpbmcpOyAvLyBDYXNlLWluc2Vuc2l0aXZlLgorICAgIGlmIChm
ZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcy5lbXB0eSgpICYmIGZlYXR1cmVzLmludGVybmFs
RGVidWdGZWF0dXJlcy5lbXB0eSgpICYmIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5lbXB0eSgpICYm
IGZlYXR1cmVzLmRvdWJsZUZlYXR1cmVzLmVtcHR5KCkgJiYgZmVhdHVyZXMuc3RyaW5nRmVhdHVy
ZXMuZW1wdHkoKSAmJiBmZWF0dXJlcy5zdHJpbmdWZWN0b3JGZWF0dXJlcy5lbXB0eSgpKSB7Cisg
ICAgICAgIHN0ZDo6Y2VyciA8PCAiICBbRU1QVFldXG4iOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIGlmICghZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMuZW1wdHkoKSkg
eworICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgRXhwZXJpbWVudGFsIEZlYXR1cmVzOiBcbiI7Cisg
ICAgICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBmZWF0dXJlcy5leHBlcmltZW50YWxGZWF0
dXJlcykKKyAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAgICIgPDwga2V5IDw8ICI6ICIgPDwg
dmFsdWUgPDwgJ1xuJzsKKyAgICB9CisgICAgaWYgKCFmZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVh
dHVyZXMuZW1wdHkoKSkgeworICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgSW50ZXJuYWwgRmVhdHVy
ZXM6IFxuIjsKKyAgICAgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGZlYXR1cmVzLmludGVy
bmFsRGVidWdGZWF0dXJlcykKKyAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAgICIgPDwga2V5
IDw8ICI6ICIgPDwgdmFsdWUgPDwgJ1xuJzsKKyAgICB9CisgICAgaWYgKCFmZWF0dXJlcy5ib29s
RmVhdHVyZXMuZW1wdHkoKSkgeworICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgQm9vbCBGZWF0dXJl
czogXG4iOworICAgICAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVyZXMuYm9vbEZl
YXR1cmVzKQorICAgICAgICAgICAgc3RkOjpjZXJyIDw8ICIgICAgIiA8PCBrZXkgPDwgIjogIiA8
PCB2YWx1ZSA8PCAnXG4nOworICAgIH0KKyAgICBpZiAoIWZlYXR1cmVzLmRvdWJsZUZlYXR1cmVz
LmVtcHR5KCkpIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICIgIERvdWJsZSBGZWF0dXJlczogXG4i
OworICAgICAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVyZXMuZG91YmxlRmVhdHVy
ZXMpCisgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8PCAiOiAiIDw8IHZh
bHVlIDw8ICdcbic7CisgICAgfQorICAgIGlmICghZmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMuZW1w
dHkoKSkgeworICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgU3RyaW5nIEZlYXR1cmVzOiBcbiI7Cisg
ICAgICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBmZWF0dXJlcy5zdHJpbmdGZWF0dXJlcykK
KyAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAgICIgPDwga2V5IDw8ICI6ICIgPDwgdmFsdWUg
PDwgJ1xuJzsKKyAgICB9CisgICAgaWYgKCFmZWF0dXJlcy5zdHJpbmdWZWN0b3JGZWF0dXJlcy5l
bXB0eSgpKSB7CisgICAgICAgIHN0ZDo6Y2VyciA8PCAiICBTdHJpbmcgVmVjdG9yIEZlYXR1cmVz
OiBcbiI7CisgICAgICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBmZWF0dXJlcy5zdHJpbmdW
ZWN0b3JGZWF0dXJlcykKKyAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAgICIgPDwga2V5IDw8
ICI6IE51bWJlciBvZiBzdHJpbmdzICIgPDwgdmFsdWUuc2l6ZSgpIDw8ICdcbic7CisgICAgfQog
fQorI2VuZGlmCiAKLXN0YXRpYyBib29sIHNob3VsZE1ha2VWaWV3cG9ydEZsZXhpYmxlKGNvbnN0
IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCitlbnVtIGNsYXNzIEtleVR5cGUgeworICAgIEJvb2ws
CisgICAgRG91YmxlLAorICAgIFN0cmluZywKKyAgICBTdHJpbmdSZWxhdGl2ZVBhdGgsCisgICAg
U3RyaW5nVVJMLAorICAgIFN0cmluZ1ZlY3RvciwKKyAgICBVbmtub3duCit9OworCitzdGF0aWMg
S2V5VHlwZSBrZXlUeXBlKHN0ZDo6c3RyaW5nIGtleSkKIHsKLSAgICByZXR1cm4gcGF0aENvbnRh
aW5zKHBhdGhPclVSTCwgInZpZXdwb3J0LyIpICYmICFwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAi
dmlzdWFsLXZpZXdwb3J0LyIpOworICAgIHN0YXRpYyBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpz
dHJpbmcsIEtleVR5cGU+IGtleVR5cGVNYXAgeworICAgICAgICB7ICJ1c2VUaHJlYWRlZFNjcm9s
bGluZyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAidXNlQWNjZWxlcmF0ZWREcmF3aW5n
IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VSZW1vdGVMYXllclRyZWUiLCBLZXlU
eXBlOjpCb29sIH0sCisgICAgICAgIHsgInNob3VsZFNob3dXZWJWaWV3IiwgS2V5VHlwZTo6Qm9v
bCB9LAorICAgICAgICB7ICJ1c2VGbGV4aWJsZVZpZXdwb3J0IiwgS2V5VHlwZTo6Qm9vbCB9LAor
ICAgICAgICB7ICJpc1NWR1Rlc3QiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInVzZURh
dGFEZXRlY3Rpb24iLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInVzZU1vY2tTY3JvbGxi
YXJzIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJuZWVkc1NpdGVTcGVjaWZpY1F1aXJr
cyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1p
dHMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInVzZUNoYXJhY3RlclNlbGVjdGlvbkdy
YW51bGFyaXR5IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVBdHRhY2htZW50
RWxlbWVudCIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlSW50ZXJzZWN0aW9u
T2JzZXJ2ZXIiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInVzZUVwaGVtZXJhbFNlc3Np
b24iLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZU1lbnVJdGVtRWxlbWVudCIs
IEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlS2V5Z2VuRWxlbWVudCIsIEtleVR5
cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyIsIEtleVR5
cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlUG9pbnRlckxvY2siLCBLZXlUeXBlOjpCb29s
IH0sCisgICAgICAgIHsgImVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uIiwgS2V5VHlwZTo6Qm9vbCB9
LAorICAgICAgICB7ICJlbmFibGVXZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0aGVudGljYXRvciIs
IEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zIiwg
S2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJzaG91bGRTaG93VG91Y2hlcyIsIEtleVR5cGU6
OkJvb2wgfSwKKyAgICAgICAgeyAiZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIiwgS2V5VHlwZTo6
Qm9vbCB9LAorICAgICAgICB7ICJhbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JD
cmVkZW50aWFscyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZG9tUGFzdGVBbGxvd2Vk
IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVDb2xvckZpbHRlciIsIEtleVR5
cGU6OkJvb2wgfSwKKyAgICAgICAgeyAicHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9k
ZSIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAicnVuU2luZ2x5IiwgS2V5VHlwZTo6Qm9v
bCB9LAorICAgICAgICB7ICJjaGVja0ZvcldvcmxkTGVha3MiLCBLZXlUeXBlOjpCb29sIH0sCisg
ICAgICAgIHsgInNob3VsZElnbm9yZU1ldGFWaWV3cG9ydCIsIEtleVR5cGU6OkJvb2wgfSwKKyAg
ICAgICAgeyAic2hvdWxkU2hvd1NwZWxsQ2hlY2tpbmdEb3RzIiwgS2V5VHlwZTo6Qm9vbCB9LAor
ICAgICAgICB7ICJlbmFibGVTZXJ2aWNlQ29udHJvbHMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAg
ICAgIHsgImVkaXRhYmxlIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJzaG91bGRIYW5k
bGVSdW5PcGVuUGFuZWwiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInNob3VsZFByZXNl
bnRQb3BvdmVycyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQXBwTmFwIiwg
S2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVCYWNrRm9yd2FyZENhY2hlIiwgS2V5
VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJhbGxvd3NMaW5rUHJldmlldyIsIEtleVR5cGU6OkJv
b2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MiLCBLZXlUeXBl
OjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2VzcyIsIEtl
eVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQ2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3Mi
LCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUNhcHR1cmVBdWRpb0luR1BVUHJv
Y2VzcyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiYWxsb3dUb3BOYXZpZ2F0aW9uVG9E
YXRhVVJMcyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlSW5BcHBCcm93c2Vy
UHJpdmFjeSIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiaXNBcHBCb3VuZFdlYlZpZXci
LCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5n
VGltZW91dHMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZVByb2Nlc3NTd2Fw
T25OYXZpZ2F0aW9uIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVQcm9jZXNz
U3dhcE9uV2luZG93T3BlbiIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAidXNlU2Vydmlj
ZVdvcmtlclNob3J0VGltZW91dCIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAKKyAgICAgICAgeyAi
Y29udGVudEluc2V0LnRvcCIsIEtleVR5cGU6OkRvdWJsZSB9LAorICAgICAgICB7ICJkZXZpY2VT
Y2FsZUZhY3RvciIsIEtleVR5cGU6OkRvdWJsZSB9LAorCisgICAgICAgIHsgImpzY09wdGlvbnMi
LCBLZXlUeXBlOjpTdHJpbmcgfSwKKyAgICAgICAgeyAiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdl
VHlwZXMiLCBLZXlUeXBlOjpTdHJpbmcgfSwKKyAgICAgICAgeyAiY29udGVudE1vZGUiLCBLZXlU
eXBlOjpTdHJpbmcgfSwKKyAgICAgICAgeyAiYXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyIiwg
S2V5VHlwZTo6U3RyaW5nIH0sCisgICAgICAgIHsgImFwcGxpY2F0aW9uTWFuaWZlc3QiLCBLZXlU
eXBlOjpTdHJpbmdSZWxhdGl2ZVBhdGggfSwKKyAgICAgICAgeyAic3RhbmRhbG9uZVdlYkFwcGxp
Y2F0aW9uVVJMIiwgS2V5VHlwZTo6U3RyaW5nVVJMIH0sCisKKyAgICAgICAgeyAibGFuZ3VhZ2Ui
LCBLZXlUeXBlOjpTdHJpbmdWZWN0b3IgfSwKKyAgICB9OworICAgIAorICAgIGF1dG8gaXQgPSBr
ZXlUeXBlTWFwLmZpbmQoa2V5KTsKKyAgICBpZiAoaXQgPT0ga2V5VHlwZU1hcC5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuIEtleVR5cGU6OlVua25vd247CisgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CiB9
CiAKLXN0YXRpYyBib29sIHNob3VsZFVzZUZpeGVkTGF5b3V0KGNvbnN0IHN0ZDo6c3RyaW5nJiBw
YXRoT3JVUkwpCitzdGF0aWMgYm9vbCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUoY29uc3Qg
c3RkOjpzdHJpbmcmIHZhbHVlKQogewotI2lmIEVOQUJMRShDU1NfREVWSUNFX0FEQVBUQVRJT04p
Ci0gICAgaWYgKHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJkZXZpY2UtYWRhcHQvIikgfHwgcGF0
aENvbnRhaW5zKHBhdGhPclVSTCwgImRldmljZS1hZGFwdFxcIikpCisgICAgaWYgKHZhbHVlID09
ICJ0cnVlIikKICAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKKyAgICBpZiAodmFsdWUgPT0g
ImZhbHNlIikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTE9HX0VSUk9SKCJGb3VuZCB1
bmV4cGVjdGVkIHZhbHVlICclcycgZm9yIGJvb2xlYW4gb3B0aW9uLiBFeHBlY3RlZCAndHJ1ZScg
b3IgJ2ZhbHNlJy4iLCB2YWx1ZS5jX3N0cigpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0
YXRpYyBib29sIGlzU1ZHVGVzdFBhdGgoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKK3N0
YXRpYyBzdGQ6OnN0cmluZyBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzUmVsYXRpdmVQYXRo
KGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkK
K3sKKyAgICBhdXRvIGJhc2VVUkwgPSBhZG9wdFdLKFRlc3RDb250cm9sbGVyOjpjcmVhdGVUZXN0
VVJMKHBhdGhPclVSTC5jX3N0cigpKSk7CisgICAgYXV0byByZWxhdGl2ZVVSTCA9IGFkb3B0V0so
V0tVUkxDcmVhdGVXaXRoQmFzZVVSTChiYXNlVVJMLmdldCgpLCB2YWx1ZS5jX3N0cigpKSk7Cisg
ICAgcmV0dXJuIHRvU1REKGFkb3B0V0soV0tVUkxDb3B5UGF0aChyZWxhdGl2ZVVSTC5nZXQoKSkp
KTsKK30KKworc3RhdGljIHN0ZDo6c3RyaW5nIHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNV
UkwoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKQogewotICAgIHJldHVybiBwYXRoQ29udGFpbnMo
cGF0aE9yVVJMLCAic3ZnL1czQy1TVkctMS4xIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwg
InN2Z1xcVzNDLVNWRy0xLjEiKTsKKyAgICByZXR1cm4gdG9TVEQoYWRvcHRXSyhXS1VSTENvcHlT
dHJpbmcoVGVzdENvbnRyb2xsZXI6OmNyZWF0ZVRlc3RVUkwodmFsdWUuY19zdHIoKSkpKSk7CiB9
CiAKLXN0YXRpYyBib29sIHNob3VsZFVzZUVwaGVtZXJhbFNlc3Npb24oY29uc3Qgc3RkOjpzdHJp
bmcmIHBhdGhPclVSTCkKK3N0YXRpYyBUZXN0RmVhdHVyZXMgcGFyc2VUZXN0SGVhZGVyKHN0ZDo6
ZmlsZXN5c3RlbTo6cGF0aCBwYXRoLCBjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQogewot
ICAgIHJldHVybiBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAidzNjL0luZGV4ZWREQi1wcml2YXRl
LWJyb3dzaW5nIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInczY1xcSW5kZXhlZERCLXBy
aXZhdGUtYnJvd3NpbmciKTsKKyAgICBUZXN0RmVhdHVyZXMgZmVhdHVyZXM7CisgICAgaWYgKCFz
dGQ6OmZpbGVzeXN0ZW06OmV4aXN0cyhwYXRoKSkKKyAgICAgICAgcmV0dXJuIGZlYXR1cmVzOwor
CisgICAgc3RkOjppZnN0cmVhbSBmaWxlKHBhdGgpOworICAgIGlmICghZmlsZS5nb29kKCkpIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3Qgb3BlbiBmaWxlIHRvIGluc3BlY3QgdGVzdCBo
ZWFkZXJzIGluICVzIiwgcGF0aC5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIGZlYXR1cmVzOwor
ICAgIH0KKworICAgIHN0ZDo6c3RyaW5nIG9wdGlvbnM7CisgICAgZ2V0bGluZShmaWxlLCBvcHRp
b25zKTsKKyAgICBzdGQ6OnN0cmluZyBiZWdpblN0cmluZygid2Via2l0LXRlc3QtcnVubmVyIFsg
Iik7CisgICAgc3RkOjpzdHJpbmcgZW5kU3RyaW5nKCIgXSIpOworICAgIHNpemVfdCBiZWdpbkxv
Y2F0aW9uID0gb3B0aW9ucy5maW5kKGJlZ2luU3RyaW5nKTsKKyAgICBpZiAoYmVnaW5Mb2NhdGlv
biA9PSBzdGQ6OnN0cmluZzo6bnBvcykKKyAgICAgICAgcmV0dXJuIGZlYXR1cmVzOworICAgIHNp
emVfdCBlbmRMb2NhdGlvbiA9IG9wdGlvbnMuZmluZChlbmRTdHJpbmcsIGJlZ2luTG9jYXRpb24p
OworICAgIGlmIChlbmRMb2NhdGlvbiA9PSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgICBM
T0dfRVJST1IoIkNvdWxkIG5vdCBmaW5kIGVuZCBvZiB0ZXN0IGhlYWRlciBpbiAlcyIsIHBhdGgu
Y19zdHIoKSk7CisgICAgICAgIHJldHVybiBmZWF0dXJlczsKKyAgICB9CisgICAgc3RkOjpzdHJp
bmcgcGFpclN0cmluZyA9IG9wdGlvbnMuc3Vic3RyKGJlZ2luTG9jYXRpb24gKyBiZWdpblN0cmlu
Zy5zaXplKCksIGVuZExvY2F0aW9uIC0gKGJlZ2luTG9jYXRpb24gKyBiZWdpblN0cmluZy5zaXpl
KCkpKTsKKyAgICBzaXplX3QgcGFpclN0YXJ0ID0gMDsKKyAgICB3aGlsZSAocGFpclN0YXJ0IDwg
cGFpclN0cmluZy5zaXplKCkpIHsKKyAgICAgICAgc2l6ZV90IHBhaXJFbmQgPSBwYWlyU3RyaW5n
LmZpbmQoIiAiLCBwYWlyU3RhcnQpOworICAgICAgICBpZiAocGFpckVuZCA9PSBzdGQ6OnN0cmlu
Zzo6bnBvcykKKyAgICAgICAgICAgIHBhaXJFbmQgPSBwYWlyU3RyaW5nLnNpemUoKTsKKyAgICAg
ICAgc2l6ZV90IGVxdWFsc0xvY2F0aW9uID0gcGFpclN0cmluZy5maW5kKCI9IiwgcGFpclN0YXJ0
KTsKKyAgICAgICAgaWYgKGVxdWFsc0xvY2F0aW9uID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7Cisg
ICAgICAgICAgICBMT0dfRVJST1IoIk1hbGZvcm1lZCBvcHRpb24gaW4gdGVzdCBoZWFkZXIgKGNv
dWxkIG5vdCBmaW5kICc9JyBjaGFyYWN0ZXIpIGluICVzIiwgcGF0aC5jX3N0cigpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGF1dG8ga2V5ID0gcGFpclN0cmluZy5z
dWJzdHIocGFpclN0YXJ0LCBlcXVhbHNMb2NhdGlvbiAtIHBhaXJTdGFydCk7CisgICAgICAgIGF1
dG8gdmFsdWUgPSBwYWlyU3RyaW5nLnN1YnN0cihlcXVhbHNMb2NhdGlvbiArIDEsIHBhaXJFbmQg
LSAoZXF1YWxzTG9jYXRpb24gKyAxKSk7CisKKyAgICAgICAgaWYgKGtleS5yZmluZCgiZXhwZXJp
bWVudGFsOiIpID09IDApIHsKKyAgICAgICAgICAgIGtleSA9IGtleS5zdWJzdHIoMTMpOworICAg
ICAgICAgICAgZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBwYXJz
ZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpIH0pOworICAgICAgICB9IGVsc2UgaWYgKGtl
eS5yZmluZCgiaW50ZXJuYWw6IikgPT0gMCkgeworICAgICAgICAgICAga2V5ID0ga2V5LnN1YnN0
cig5KTsKKyAgICAgICAgICAgIGZlYXR1cmVzLmludGVybmFsRGVidWdGZWF0dXJlcy5pbnNlcnQo
eyBrZXksIHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSkgfSk7CisgICAgICAgIH0K
KworICAgICAgICBzd2l0Y2ggKGtleVR5cGUoa2V5KSkgeworICAgICAgICBjYXNlIEtleVR5cGU6
OkJvb2w6CisgICAgICAgICAgICBmZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBw
YXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpIH0pOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgS2V5VHlwZTo6RG91YmxlOgorICAgICAgICAgICAgZmVhdHVyZXMuZG91
YmxlRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBzdGQ6OnN0b2QodmFsdWUpIH0pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nOgorICAgICAgICAgICAgZmVh
dHVyZXMuc3RyaW5nRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCB2YWx1ZSB9KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEtleVR5cGU6OlN0cmluZ1JlbGF0aXZlUGF0aDoKKyAgICAg
ICAgICAgIGZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVzLmluc2VydCh7IGtleSwgcGFyc2VTdHJpbmdU
ZXN0SGVhZGVyVmFsdWVBc1JlbGF0aXZlUGF0aCh2YWx1ZSwgcGF0aE9yVVJMKSB9KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEtleVR5cGU6OlN0cmluZ1VSTDoKKyAgICAgICAg
ICAgIGZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVzLmluc2VydCh7IGtleSwgcGFyc2VTdHJpbmdUZXN0
SGVhZGVyVmFsdWVBc1VSTCh2YWx1ZSkgfSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBLZXlUeXBlOjpTdHJpbmdWZWN0b3I6CisgICAgICAgICAgICBmZWF0dXJlcy5zdHJpbmdW
ZWN0b3JGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHNwbGl0KHZhbHVlLCAnLCcpIH0pOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgS2V5VHlwZTo6VW5rbm93bjoKKyAgICAgICAgICAg
IExPR19FUlJPUigiVW5rbm93biBrZXksICclcywgaW4gdGVzdCBoZWFkZXIgaW4gJXMiLCBrZXku
Y19zdHIoKSwgcGF0aC5jX3N0cigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgcGFpclN0YXJ0ID0gcGFpckVuZCArIDE7CisgICAgfQorCisgICAgcmV0dXJuIGZl
YXR1cmVzOworfQorCitzdGF0aWMgYm9vbCBwYXRoQ29udGFpbnMoY29uc3Qgc3RkOjpzdHJpbmcm
IHBhdGhPclVSTCwgY29uc3QgY2hhciogc3Vic3RyaW5nKQoreworICAgIFN0cmluZyBwYXRoKHBh
dGhPclVSTC5jX3N0cigpKTsKKyAgICByZXR1cm4gcGF0aC5jb250YWlucyhzdWJzdHJpbmcpOyAv
LyBDYXNlLWluc2Vuc2l0aXZlLgogfQogCi1zdGF0aWMgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3JG
b3JUZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCitzdGF0aWMgT3B0aW9uYWw8ZG91
YmxlPiBkZXZpY2VTY2FsZUZhY3RvckZvclRlc3QoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVS
TCkKIHsKICAgICBpZiAocGF0aENvbnRhaW5zKHBhdGhPclVSTCwgIi9oaWRwaS0zeC0iKSkKICAg
ICAgICAgcmV0dXJuIDM7CiAgICAgaWYgKHBhdGhDb250YWlucyhwYXRoT3JVUkwsICIvaGlkcGkt
IikpCiAgICAgICAgIHJldHVybiAyOwotICAgIHJldHVybiAxOworICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiB9CiAKIHN0YXRpYyBib29sIHNob3VsZER1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihj
b25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQpAQCAtODMsMTQgKzI4OSw2NiBAQCBzdGF0aWMg
Ym9vbCBzaG91bGREdW1wSlNDb25zb2xlTG9nSW5TdGRFCiAgICAgICAgIHx8IHBhdGhDb250YWlu
cyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC93ZWJzb2NrZXRzIikgfHwgcGF0aENvbnRhaW5z
KHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3dlYnNvY2tldHMiKTsKIH0KIAotVGVzdE9wdGlv
bnM6OlRlc3RPcHRpb25zKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCi0gICAgOiB1c2VG
bGV4aWJsZVZpZXdwb3J0KHNob3VsZE1ha2VWaWV3cG9ydEZsZXhpYmxlKHBhdGhPclVSTCkpCi0g
ICAgLCB1c2VGaXhlZExheW91dChzaG91bGRVc2VGaXhlZExheW91dChwYXRoT3JVUkwpKQotICAg
ICwgaXNTVkdUZXN0KGlzU1ZHVGVzdFBhdGgocGF0aE9yVVJMKSkKLSAgICAsIHVzZUVwaGVtZXJh
bFNlc3Npb24oc2hvdWxkVXNlRXBoZW1lcmFsU2Vzc2lvbihwYXRoT3JVUkwpKQotICAgICwgZHVt
cEpTQ29uc29sZUxvZ0luU3RkRXJyKHNob3VsZER1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihwYXRo
T3JVUkwpKQotICAgICwgZGV2aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3JGb3JUZXN0
KHBhdGhPclVSTCkpCitUZXN0RmVhdHVyZXMgaGFyZGNvZGVkRmVhdHVyZXNCYXNlZE9uUGF0aEZv
clRlc3QoY29uc3QgVGVzdENvbW1hbmQmIGNvbW1hbmQpCit7CisgICAgVGVzdEZlYXR1cmVzIGZl
YXR1cmVzOworCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCB0cnkgdG8gcmVwbGFjZSB0aGUgcmVz
ZXQgb2YgdGhlc2Ugd2l0aCBUZXN0T3B0aW9ucy50eHQgYmFzZWQgc29sdXRpb25zLgorCisgICAg
aWYgKHNob3VsZER1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihjb21tYW5kLnBhdGhPclVSTCkpCisg
ICAgICAgIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAiZHVtcEpTQ29uc29sZUxvZ0lu
U3RkRXJyIiwgdHJ1ZSB9KTsKKyAgICBpZiAoYXV0byBkZXZpY2VTY2FsZUZhY3RvciA9IGRldmlj
ZVNjYWxlRmFjdG9yRm9yVGVzdChjb21tYW5kLnBhdGhPclVSTCk7IGRldmljZVNjYWxlRmFjdG9y
ICE9IFdURjo6bnVsbG9wdCkKKyAgICAgICAgZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMuaW5zZXJ0
KHsgImRldmljZVNjYWxlRmFjdG9yIiwgZGV2aWNlU2NhbGVGYWN0b3IudmFsdWUoKSB9KTsKKwor
ICAgIHJldHVybiBmZWF0dXJlczsKK30KKwordm9pZCBtZXJnZShUZXN0RmVhdHVyZXMmIGJhc2Us
IFRlc3RGZWF0dXJlcyBhZGRpdGlvbmFsKQoreworICAgIGFkZGl0aW9uYWwuZXhwZXJpbWVudGFs
RmVhdHVyZXMubWVyZ2UoYmFzZS5leHBlcmltZW50YWxGZWF0dXJlcyk7CisgICAgYWRkaXRpb25h
bC5pbnRlcm5hbERlYnVnRmVhdHVyZXMubWVyZ2UoYmFzZS5pbnRlcm5hbERlYnVnRmVhdHVyZXMp
OworICAgIGFkZGl0aW9uYWwuYm9vbEZlYXR1cmVzLm1lcmdlKGJhc2UuYm9vbEZlYXR1cmVzKTsK
KyAgICBhZGRpdGlvbmFsLmRvdWJsZUZlYXR1cmVzLm1lcmdlKGJhc2UuZG91YmxlRmVhdHVyZXMp
OworICAgIGFkZGl0aW9uYWwuc3RyaW5nRmVhdHVyZXMubWVyZ2UoYmFzZS5zdHJpbmdGZWF0dXJl
cyk7CisgICAgYWRkaXRpb25hbC5zdHJpbmdWZWN0b3JGZWF0dXJlcy5tZXJnZShiYXNlLnN0cmlu
Z1ZlY3RvckZlYXR1cmVzKTsKKyAgICBiYXNlID0gYWRkaXRpb25hbDsKK30KKworVGVzdEZlYXR1
cmVzIGZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0T3B0aW9uc0ZpbGVzRm9yVGVzdChjb25zdCBUZXN0
Q29tbWFuZCYgY29tbWFuZCkKK3sKKyAgICBzdGQ6OmZpbGVzeXN0ZW06OnBhdGggcGF0aCA9IGNv
bW1hbmQuYWJzb2x1dGVQYXRoOworCisgICAgLy8gR2F0aGVyIGRpcmVjdG9yaWVzIHRoYXQgbWF5
IGNvbnRhaW4gVGVzdEhlYWRlcnMgZmlsZXMuCisgICAgc3RkOjp2ZWN0b3I8c3RkOjpmaWxlc3lz
dGVtOjpwYXRoPiBkaXJlY3Rvcmllc1RvQ2hlY2s7CisgICAgZG8geworICAgICAgICBwYXRoID0g
cGF0aC5wYXJlbnRfcGF0aCgpOworICAgICAgICBkaXJlY3Rvcmllc1RvQ2hlY2sucHVzaF9iYWNr
KHBhdGgpOworICAgIH0gd2hpbGUgKHBhdGguZmlsZW5hbWUoKSAhPSAiTGF5b3V0VGVzdHMiKTsK
KworICAgIC8vIEl0ZXJhdGUgdGhlIGRpcmVjdG9yaWVzIHRoYXQgbWF5IGNvbnRhaW4gJ1Rlc3RP
cHRpb25zLnR4dCcgZmlsZXMgZnJvbSBsZWFzdCB0byBtb3N0CisgICAgLy8gc3BlY2lmaWMsIGFu
ZCBtZXJnZSBpbiBhbnkgZmVhdHVyZXMgZm91bmQuCisgICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVz
OworICAgIGZvciAoYXV0byBkaXJlY3RvcnlUb0NoZWNrIDogV1RGOjptYWtlUmV2ZXJzZWRSYW5n
ZShkaXJlY3Rvcmllc1RvQ2hlY2spKSB7CisgICAgICAgIGF1dG8gdGVzdEhlYWRlckZpbGUgPSBk
aXJlY3RvcnlUb0NoZWNrIC8gIlRlc3RPcHRpb25zLnR4dCI7CisgICAgICAgIGF1dG8gdGVzdE9w
dGlvbnNGZWF0dXJlcyA9IHBhcnNlVGVzdEhlYWRlcih0ZXN0SGVhZGVyRmlsZSwgY29tbWFuZC5w
YXRoT3JVUkwpOworICAgICAgICBtZXJnZShmZWF0dXJlcywgdGVzdE9wdGlvbnNGZWF0dXJlcyk7
CisgICAgfQorICAgIAorICAgIHJldHVybiBmZWF0dXJlczsKK30KKworVGVzdEZlYXR1cmVzIGZl
YXR1cmVEZWZhdWx0c0Zyb21UZXN0SGVhZGVyRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYgY29t
bWFuZCkKIHsKKyAgICByZXR1cm4gcGFyc2VUZXN0SGVhZGVyKGNvbW1hbmQuYWJzb2x1dGVQYXRo
LCBjb21tYW5kLnBhdGhPclVSTCk7Cit9CisKK1Rlc3RPcHRpb25zOjpUZXN0T3B0aW9ucyhUZXN0
RmVhdHVyZXMgZmVhdHVyZXMpCisgICAgOiBtX2ZlYXR1cmVzIHsgZmVhdHVyZXMgfQoreworI2lm
IERVTVBfRkVBVFVSRVMKKyAgICBzdGQ6OmNlcnIgPDwgIkRVTVBJTkcgRkVBVFVSRVNcbiI7Cisg
ICAgZHVtcEZlYXR1cmVzKG1fZmVhdHVyZXMpOworI2VuZGlmCiB9CiAKIH0KSW5kZXg6IFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RPcHRpb25zLmgJKHJldmlzaW9uIDI2Nzg4NSkKKysrIFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTY1ICsy
NSwxNzYgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8b3B0aW9uYWw+CisjaW5j
bHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisjaW5jbHVkZSA8dmVjdG9y
PgogCiBuYW1lc3BhY2UgV1RSIHsKIAotc3RydWN0IFRlc3RPcHRpb25zIHsKLSAgICBzdHJ1Y3Qg
Q29udGV4dE9wdGlvbnMgewotICAgICAgICBWZWN0b3I8U3RyaW5nPiBvdmVycmlkZUxhbmd1YWdl
czsKLSAgICAgICAgYm9vbCBpZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzIHsgZmFs
c2UgfTsKLSAgICAgICAgYm9vbCBlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbiB7IHRydWUg
fTsKLSAgICAgICAgYm9vbCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiB7IGZhbHNlIH07
Ci0gICAgICAgIGJvb2wgdXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dCB7IGZhbHNlIH07Ci0K
LSAgICAgICAgYm9vbCBoYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25zKGNvbnN0IENvbnRleHRP
cHRpb25zJiBvcHRpb25zKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaWdub3Jl
U3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0cyAhPSBvcHRpb25zLmlnbm9yZVN5bmNocm9ub3Vz
TWVzc2FnaW5nVGltZW91dHMKLSAgICAgICAgICAgICAgICB8fCBvdmVycmlkZUxhbmd1YWdlcyAh
PSBvcHRpb25zLm92ZXJyaWRlTGFuZ3VhZ2VzCi0gICAgICAgICAgICAgICAgfHwgZW5hYmxlUHJv
Y2Vzc1N3YXBPbk5hdmlnYXRpb24gIT0gb3B0aW9ucy5lbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdh
dGlvbgotICAgICAgICAgICAgICAgIHx8IGVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuICE9
IG9wdGlvbnMuZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW4KLSAgICAgICAgICAgICAgICB8
fCB1c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0ICE9IG9wdGlvbnMudXNlU2VydmljZVdvcmtl
clNob3J0VGltZW91dCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgc2hvdWxkRW5hYmxlUHJv
Y2Vzc1N3YXBPbk5hdmlnYXRpb24oKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24gfHwgZW5hYmxlUHJvY2Vzc1N3YXBPbldp
bmRvd09wZW47Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgYm9vbCB1c2VUaHJlYWRlZFNjcm9s
bGluZyB7IGZhbHNlIH07Ci0gICAgYm9vbCB1c2VBY2NlbGVyYXRlZERyYXdpbmcgeyBmYWxzZSB9
OwotICAgIGJvb2wgdXNlUmVtb3RlTGF5ZXJUcmVlIHsgZmFsc2UgfTsKLSAgICBib29sIHNob3Vs
ZFNob3dXZWJWaWV3IHsgZmFsc2UgfTsKLSAgICBib29sIHVzZUZsZXhpYmxlVmlld3BvcnQgeyBm
YWxzZSB9OwotICAgIGJvb2wgdXNlRml4ZWRMYXlvdXQgeyBmYWxzZSB9OwotICAgIGJvb2wgaXNT
VkdUZXN0IHsgZmFsc2UgfTsKLSAgICBib29sIHVzZURhdGFEZXRlY3Rpb24geyBmYWxzZSB9Owot
ICAgIGJvb2wgdXNlTW9ja1Njcm9sbGJhcnMgeyB0cnVlIH07Ci0gICAgYm9vbCBuZWVkc1NpdGVT
cGVjaWZpY1F1aXJrcyB7IGZhbHNlIH07Ci0gICAgYm9vbCBpZ25vcmVzVmlld3BvcnRTY2FsZUxp
bWl0cyB7IGZhbHNlIH07Ci0gICAgYm9vbCB1c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0
eSB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVBdHRhY2htZW50RWxlbWVudCB7IGZhbHNlIH07
Ci0gICAgYm9vbCBlbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciB7IGZhbHNlIH07Ci0gICAgYm9v
bCB1c2VFcGhlbWVyYWxTZXNzaW9uIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZU1lbnVJdGVt
RWxlbWVudCB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVLZXlnZW5FbGVtZW50IHsgZmFsc2Ug
fTsKLSAgICBib29sIGVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMgeyB0cnVlIH07Ci0gICAgYm9v
bCBlbmFibGVQb2ludGVyTG9jayB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVXZWJBdXRoZW50
aWNhdGlvbiB7IHRydWUgfTsKLSAgICBib29sIGVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxB
dXRoZW50aWNhdG9yIHsgdHJ1ZSB9OwotICAgIGJvb2wgZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25z
IHsgZmFsc2UgfTsKLSAgICBib29sIHNob3VsZFNob3dUb3VjaGVzIHsgZmFsc2UgfTsKLSAgICBi
b29sIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciB7IGZhbHNlIH07Ci0gICAgYm9vbCBhbGxvd0Ny
b3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyB7IGZhbHNlIH07Ci0gICAg
Ym9vbCBkb21QYXN0ZUFsbG93ZWQgeyB0cnVlIH07Ci0gICAgYm9vbCBlbmFibGVDb2xvckZpbHRl
ciB7IGZhbHNlIH07Ci0gICAgYm9vbCBwdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2Rl
IHsgZmFsc2UgfTsKLSAgICBib29sIHJ1blNpbmdseSB7IGZhbHNlIH07Ci0gICAgYm9vbCBjaGVj
a0ZvcldvcmxkTGVha3MgeyBmYWxzZSB9OwotICAgIGJvb2wgc2hvdWxkSWdub3JlTWV0YVZpZXdw
b3J0IHsgZmFsc2UgfTsKLSAgICBib29sIHNob3VsZFNob3dTcGVsbENoZWNraW5nRG90cyB7IGZh
bHNlIH07Ci0gICAgYm9vbCBlbmFibGVTZXJ2aWNlQ29udHJvbHMgeyBmYWxzZSB9OwotICAgIGJv
b2wgZWRpdGFibGUgeyBmYWxzZSB9OwotICAgIGJvb2wgc2hvdWxkSGFuZGxlUnVuT3BlblBhbmVs
IHsgdHJ1ZSB9OwotICAgIGJvb2wgc2hvdWxkUHJlc2VudFBvcG92ZXJzIHsgdHJ1ZSB9OwotICAg
IGJvb2wgZW5hYmxlQXBwTmFwIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUJhY2tGb3J3YXJk
Q2FjaGUgeyBmYWxzZSB9OwotICAgIGJvb2wgYWxsb3dzTGlua1ByZXZpZXcgeyB0cnVlIH07Ci0g
ICAgYm9vbCBlbmFibGVDYXB0dXJlVmlkZW9JblVJUHJvY2VzcyB7IGZhbHNlIH07Ci0gICAgYm9v
bCBlbmFibGVDYXB0dXJlVmlkZW9JbkdQVVByb2Nlc3MgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5h
YmxlQ2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3MgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlQ2Fw
dHVyZUF1ZGlvSW5HUFVQcm9jZXNzIHsgZmFsc2UgfTsKLSAgICBib29sIGFsbG93VG9wTmF2aWdh
dGlvblRvRGF0YVVSTHMgeyB0cnVlIH07Ci0gICAgYm9vbCBlbmFibGVJbkFwcEJyb3dzZXJQcml2
YWN5IHsgZmFsc2UgfTsKLSAgICBib29sIGlzQXBwQm91bmRXZWJWaWV3IHsgZmFsc2UgfTsKLQot
ICAgIGRvdWJsZSBjb250ZW50SW5zZXRUb3AgeyAwIH07Ci0KLSAgICBmbG9hdCBkZXZpY2VTY2Fs
ZUZhY3RvciB7IDEgfTsKLSAgICBzdGQ6OnN0cmluZyBhcHBsaWNhdGlvbk1hbmlmZXN0OwotICAg
IHN0ZDo6c3RyaW5nIGpzY09wdGlvbnM7Ci0gICAgc3RkOjpzdHJpbmcgYWRkaXRpb25hbFN1cHBv
cnRlZEltYWdlVHlwZXM7Ci0gICAgc3RkOjpzdHJpbmcgc3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9u
VVJMOwotICAgIEhhc2hNYXA8U3RyaW5nLCBib29sPiBleHBlcmltZW50YWxGZWF0dXJlczsKLSAg
ICBIYXNoTWFwPFN0cmluZywgYm9vbD4gaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzOwotICAgIFN0cmlu
ZyBjb250ZW50TW9kZTsKLSAgICBTdHJpbmcgYXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyOwot
ICAgIAotICAgIENvbnRleHRPcHRpb25zIGNvbnRleHRPcHRpb25zOwotCi0gICAgVGVzdE9wdGlv
bnMoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCk7Ci0KLSAgICAvLyBBZGQgaGVyZSBvcHRp
b25zIHRoYXQgY2FuIG9ubHkgYmUgc2V0IHVwb24gUGxhdGZvcm1XZWJWaWV3Ci0gICAgLy8gaW5p
dGlhbGl6YXRpb24gYW5kIG1ha2Ugc3VyZSBpdCdzIHVwIHRvIGRhdGUgd2hlbiBhZGRpbmcgbmV3
Ci0gICAgLy8gb3B0aW9ucyB0byB0aGlzIHN0cnVjdC4gT3RoZXJ3aXNlLCB0ZXN0cyB1c2luZyB0
aG9zZSBvcHRpb25zCi0gICAgLy8gbWlnaHQgZmFpbCBpZiBXVFIgaXMgcmV1c2luZyBhbiBleGlz
dGluZyBQbGF0Zm9ybVdlYlZpZXcuCi0gICAgYm9vbCBoYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRp
b25zKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKSBjb25zdAorc3RydWN0IFRlc3RDb21tYW5k
OworCitzdHJ1Y3QgVGVzdEZlYXR1cmVzIHsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpz
dHJpbmcsIGJvb2w+IGV4cGVyaW1lbnRhbEZlYXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21h
cDxzdGQ6OnN0cmluZywgYm9vbD4gaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzOworICAgIHN0ZDo6dW5v
cmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4gYm9vbEZlYXR1cmVzOworICAgIHN0ZDo6dW5v
cmRlcmVkX21hcDxzdGQ6OnN0cmluZywgZG91YmxlPiBkb3VibGVGZWF0dXJlczsKKyAgICBzdGQ6
OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBzdHJpbmdGZWF0dXJlczsK
KyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dmVjdG9yPHN0ZDo6c3Ry
aW5nPj4gc3RyaW5nVmVjdG9yRmVhdHVyZXM7Cit9OworCit2b2lkIG1lcmdlKFRlc3RGZWF0dXJl
cyYgYmFzZSwgVGVzdEZlYXR1cmVzIGFkZGl0aW9uYWwpOworCitUZXN0RmVhdHVyZXMgaGFyZGNv
ZGVkRmVhdHVyZXNCYXNlZE9uUGF0aEZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKTsKK1Rlc3RG
ZWF0dXJlcyBmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdE9wdGlvbnNGaWxlc0ZvclRlc3QoY29uc3Qg
VGVzdENvbW1hbmQmKTsKK1Rlc3RGZWF0dXJlcyBmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRl
ckZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKTsKKworc3RydWN0IENvbnRleHRPcHRpb25zIHsK
KyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3ZlcnJpZGVMYW5ndWFnZXM7CisgICAgYm9v
bCBpZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzOworICAgIGJvb2wgZW5hYmxlUHJv
Y2Vzc1N3YXBPbk5hdmlnYXRpb247CisgICAgYm9vbCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93
T3BlbjsKKyAgICBib29sIHVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQ7CisKKyAgICBib29s
IGhhc1NhbWVJbml0aWFsaXphdGlvbk9wdGlvbnMoY29uc3QgQ29udGV4dE9wdGlvbnMmIG9wdGlv
bnMpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAodXNlVGhyZWFkZWRTY3JvbGxpbmcgIT0gb3B0
aW9ucy51c2VUaHJlYWRlZFNjcm9sbGluZwotICAgICAgICAgICAgfHwgdXNlQWNjZWxlcmF0ZWRE
cmF3aW5nICE9IG9wdGlvbnMudXNlQWNjZWxlcmF0ZWREcmF3aW5nCi0gICAgICAgICAgICB8fCB1
c2VNb2NrU2Nyb2xsYmFycyAhPSBvcHRpb25zLnVzZU1vY2tTY3JvbGxiYXJzCi0gICAgICAgICAg
ICB8fCBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyAhPSBvcHRpb25zLm5lZWRzU2l0ZVNwZWNpZmlj
UXVpcmtzCi0gICAgICAgICAgICB8fCB1c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0eSAh
PSBvcHRpb25zLnVzZUNoYXJhY3RlclNlbGVjdGlvbkdyYW51bGFyaXR5Ci0gICAgICAgICAgICB8
fCBlbmFibGVBdHRhY2htZW50RWxlbWVudCAhPSBvcHRpb25zLmVuYWJsZUF0dGFjaG1lbnRFbGVt
ZW50Ci0gICAgICAgICAgICB8fCBlbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciAhPSBvcHRpb25z
LmVuYWJsZUludGVyc2VjdGlvbk9ic2VydmVyCi0gICAgICAgICAgICB8fCB1c2VFcGhlbWVyYWxT
ZXNzaW9uICE9IG9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lvbgotICAgICAgICAgICAgfHwgZW5h
YmxlTWVudUl0ZW1FbGVtZW50ICE9IG9wdGlvbnMuZW5hYmxlTWVudUl0ZW1FbGVtZW50Ci0gICAg
ICAgICAgICB8fCBlbmFibGVLZXlnZW5FbGVtZW50ICE9IG9wdGlvbnMuZW5hYmxlS2V5Z2VuRWxl
bWVudAotICAgICAgICAgICAgfHwgZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyAhPSBvcHRpb25z
LmVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMKLSAgICAgICAgICAgIHx8IGVuYWJsZVBvaW50ZXJM
b2NrICE9IG9wdGlvbnMuZW5hYmxlUG9pbnRlckxvY2sKLSAgICAgICAgICAgIHx8IGVuYWJsZVdl
YkF1dGhlbnRpY2F0aW9uICE9IG9wdGlvbnMuZW5hYmxlV2ViQXV0aGVudGljYXRpb24KLSAgICAg
ICAgICAgIHx8IGVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yICE9IG9w
dGlvbnMuZW5hYmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IKLSAgICAgICAg
ICAgIHx8IGVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyAhPSBvcHRpb25zLmVuYWJsZUluc3BlY3Rv
ckFkZGl0aW9ucwotICAgICAgICAgICAgfHwgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyICE9IG9w
dGlvbnMuZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyCi0gICAgICAgICAgICB8fCBhcHBsaWNhdGlv
bk1hbmlmZXN0ICE9IG9wdGlvbnMuYXBwbGljYXRpb25NYW5pZmVzdAotICAgICAgICAgICAgfHwg
YWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMgIT0gb3B0aW9u
cy5hbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscwotICAgICAg
ICAgICAgfHwgZG9tUGFzdGVBbGxvd2VkICE9IG9wdGlvbnMuZG9tUGFzdGVBbGxvd2VkCi0gICAg
ICAgICAgICB8fCBlbmFibGVDb2xvckZpbHRlciAhPSBvcHRpb25zLmVuYWJsZUNvbG9yRmlsdGVy
Ci0gICAgICAgICAgICB8fCBwdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlICE9IG9w
dGlvbnMucHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZQotICAgICAgICAgICAgfHwg
anNjT3B0aW9ucyAhPSBvcHRpb25zLmpzY09wdGlvbnMKLSAgICAgICAgICAgIHx8IGFkZGl0aW9u
YWxTdXBwb3J0ZWRJbWFnZVR5cGVzICE9IG9wdGlvbnMuYWRkaXRpb25hbFN1cHBvcnRlZEltYWdl
VHlwZXMKLSAgICAgICAgICAgIHx8IHJ1blNpbmdseSAhPSBvcHRpb25zLnJ1blNpbmdseQotICAg
ICAgICAgICAgfHwgY2hlY2tGb3JXb3JsZExlYWtzICE9IG9wdGlvbnMuY2hlY2tGb3JXb3JsZExl
YWtzCi0gICAgICAgICAgICB8fCBzaG91bGRTaG93U3BlbGxDaGVja2luZ0RvdHMgIT0gb3B0aW9u
cy5zaG91bGRTaG93U3BlbGxDaGVja2luZ0RvdHMKLSAgICAgICAgICAgIHx8IGVuYWJsZVNlcnZp
Y2VDb250cm9scyAhPSBvcHRpb25zLmVuYWJsZVNlcnZpY2VDb250cm9scwotICAgICAgICAgICAg
fHwgc2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0ICE9IG9wdGlvbnMuc2hvdWxkSWdub3JlTWV0YVZp
ZXdwb3J0Ci0gICAgICAgICAgICB8fCBlZGl0YWJsZSAhPSBvcHRpb25zLmVkaXRhYmxlCi0gICAg
ICAgICAgICB8fCBzaG91bGRIYW5kbGVSdW5PcGVuUGFuZWwgIT0gb3B0aW9ucy5zaG91bGRIYW5k
bGVSdW5PcGVuUGFuZWwKLSAgICAgICAgICAgIHx8IHNob3VsZFByZXNlbnRQb3BvdmVycyAhPSBv
cHRpb25zLnNob3VsZFByZXNlbnRQb3BvdmVycwotICAgICAgICAgICAgfHwgY29udGVudEluc2V0
VG9wICE9IG9wdGlvbnMuY29udGVudEluc2V0VG9wCi0gICAgICAgICAgICB8fCBjb250ZW50TW9k
ZSAhPSBvcHRpb25zLmNvbnRlbnRNb2RlCi0gICAgICAgICAgICB8fCBhcHBsaWNhdGlvbkJ1bmRs
ZUlkZW50aWZpZXIgIT0gb3B0aW9ucy5hcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIKLSAgICAg
ICAgICAgIHx8IGVuYWJsZUFwcE5hcCAhPSBvcHRpb25zLmVuYWJsZUFwcE5hcAotICAgICAgICAg
ICAgfHwgZW5hYmxlQmFja0ZvcndhcmRDYWNoZSAhPSBvcHRpb25zLmVuYWJsZUJhY2tGb3J3YXJk
Q2FjaGUKLSAgICAgICAgICAgIHx8IGFsbG93c0xpbmtQcmV2aWV3ICE9IG9wdGlvbnMuYWxsb3dz
TGlua1ByZXZpZXcKLSAgICAgICAgICAgIHx8IGVuYWJsZUNhcHR1cmVWaWRlb0luVUlQcm9jZXNz
ICE9IG9wdGlvbnMuZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MKLSAgICAgICAgICAgIHx8
IGVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2VzcyAhPSBvcHRpb25zLmVuYWJsZUNhcHR1cmVW
aWRlb0luR1BVUHJvY2VzcwotICAgICAgICAgICAgfHwgZW5hYmxlQ2FwdHVyZUF1ZGlvSW5VSVBy
b2Nlc3MgIT0gb3B0aW9ucy5lbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcwotICAgICAgICAg
ICAgfHwgZW5hYmxlQ2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzICE9IG9wdGlvbnMuZW5hYmxlQ2Fw
dHVyZUF1ZGlvSW5HUFVQcm9jZXNzCi0gICAgICAgICAgICB8fCBhbGxvd1RvcE5hdmlnYXRpb25U
b0RhdGFVUkxzICE9IG9wdGlvbnMuYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcwotICAgICAg
ICAgICAgfHwgZW5hYmxlSW5BcHBCcm93c2VyUHJpdmFjeSAhPSBvcHRpb25zLmVuYWJsZUluQXBw
QnJvd3NlclByaXZhY3kKLSAgICAgICAgICAgIHx8IHN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVS
TCAhPSBvcHRpb25zLnN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTAotICAgICAgICAgICAgfHwg
aXNBcHBCb3VuZFdlYlZpZXcgIT0gb3B0aW9ucy5pc0FwcEJvdW5kV2ViVmlldykKKyAgICAgICAg
aWYgKGlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMgIT0gb3B0aW9ucy5pZ25vcmVT
eW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzCisgICAgICAgICAgICB8fCBvdmVycmlkZUxhbmd1
YWdlcyAhPSBvcHRpb25zLm92ZXJyaWRlTGFuZ3VhZ2VzCisgICAgICAgICAgICB8fCBlbmFibGVQ
cm9jZXNzU3dhcE9uTmF2aWdhdGlvbiAhPSBvcHRpb25zLmVuYWJsZVByb2Nlc3NTd2FwT25OYXZp
Z2F0aW9uCisgICAgICAgICAgICB8fCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiAhPSBv
cHRpb25zLmVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuCisgICAgICAgICAgICB8fCB1c2VT
ZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0ICE9IG9wdGlvbnMudXNlU2VydmljZVdvcmtlclNob3J0
VGltZW91dCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQogCi0gICAgICAgIGlmICghY29udGV4dE9wdGlvbnMuaGFzU2FtZUluaXRpYWxpemF0
aW9uT3B0aW9ucyhvcHRpb25zLmNvbnRleHRPcHRpb25zKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBib29sIHNob3VsZEVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbiB8
fCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbjsKKyAgICB9Cit9OwogCi0gICAgICAgIGlm
IChleHBlcmltZW50YWxGZWF0dXJlcyAhPSBvcHRpb25zLmV4cGVyaW1lbnRhbEZlYXR1cmVzKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworY2xhc3MgVGVzdE9wdGlvbnMgeworcHVibGljOgor
ICAgIGV4cGxpY2l0IFRlc3RPcHRpb25zKFRlc3RGZWF0dXJlcyk7CiAKLSAgICAgICAgaWYgKGlu
dGVybmFsRGVidWdGZWF0dXJlcyAhPSBvcHRpb25zLmludGVybmFsRGVidWdGZWF0dXJlcykKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBDb250ZXh0T3B0aW9ucyBjb250ZXh0T3B0aW9u
cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgb3ZlcnJpZGVM
YW5ndWFnZXMoKSwKKyAgICAgICAgICAgIGlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91
dHMoKSwKKyAgICAgICAgICAgIGVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uKCksCisgICAg
ICAgICAgICBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbigpLAorICAgICAgICAgICAgdXNl
U2VydmljZVdvcmtlclNob3J0VGltZW91dCgpCisgICAgICAgIH07CisgICAgfQorCisgICAgYm9v
bCB1c2VUaHJlYWRlZFNjcm9sbGluZygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUo
InVzZVRocmVhZGVkU2Nyb2xsaW5nIiwgZmFsc2UpOyB9CisgICAgYm9vbCB1c2VBY2NlbGVyYXRl
ZERyYXdpbmcoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJ1c2VBY2NlbGVyYXRl
ZERyYXdpbmciLCBmYWxzZSk7IH0KKyAgICBib29sIHVzZVJlbW90ZUxheWVyVHJlZSgpIGNvbnN0
IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInVzZVJlbW90ZUxheWVyVHJlZSIsIGZhbHNlKTsg
fQorICAgIGJvb2wgc2hvdWxkU2hvd1dlYlZpZXcoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVy
ZVZhbHVlKCJzaG91bGRTaG93V2ViVmlldyIsIGZhbHNlKTsgfQorICAgIGJvb2wgdXNlRmxleGli
bGVWaWV3cG9ydCgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInVzZUZsZXhpYmxl
Vmlld3BvcnQiLCBmYWxzZSk7IH0KKyAgICBib29sIGlzU1ZHVGVzdCgpIGNvbnN0IHsgcmV0dXJu
IGJvb2xGZWF0dXJlVmFsdWUoImlzU1ZHVGVzdCIsIGZhbHNlKTsgfQorICAgIGJvb2wgdXNlRGF0
YURldGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInVzZURhdGFEZXRl
Y3Rpb24iLCBmYWxzZSk7IH0KKyAgICBib29sIHVzZU1vY2tTY3JvbGxiYXJzKCkgY29uc3QgeyBy
ZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgidXNlTW9ja1Njcm9sbGJhcnMiLCB0cnVlKTsgfQorICAg
IGJvb2wgbmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVy
ZVZhbHVlKCJuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyIsIGZhbHNlKTsgfQorICAgIGJvb2wgaWdu
b3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVl
KCJpZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyIsIGZhbHNlKTsgfQorICAgIGJvb2wgdXNlQ2hh
cmFjdGVyU2VsZWN0aW9uR3JhbnVsYXJpdHkoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZh
bHVlKCJ1c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0eSIsIGZhbHNlKTsgfQorICAgIGJv
b2wgZW5hYmxlQXR0YWNobWVudEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZh
bHVlKCJlbmFibGVBdHRhY2htZW50RWxlbWVudCIsIGZhbHNlKTsgfQorICAgIGJvb2wgZW5hYmxl
SW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJl
bmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciIsIGZhbHNlKTsgfQorICAgIGJvb2wgdXNlRXBoZW1l
cmFsU2Vzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInVzZUVwaGVtZXJh
bFNlc3Npb24iLCBmYWxzZSk7IH0KKyAgICBib29sIGVuYWJsZU1lbnVJdGVtRWxlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZU1lbnVJdGVtRWxlbWVudCIsIGZh
bHNlKTsgfQorICAgIGJvb2wgZW5hYmxlS2V5Z2VuRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGJv
b2xGZWF0dXJlVmFsdWUoImVuYWJsZUtleWdlbkVsZW1lbnQiLCBmYWxzZSk7IH0KKyAgICBib29s
IGVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZh
bHVlKCJlbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzIiwgdHJ1ZSk7IH0KKyAgICBib29sIGVuYWJs
ZVBvaW50ZXJMb2NrKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlUG9p
bnRlckxvY2siLCBmYWxzZSk7IH0KKyAgICBib29sIGVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uKCkg
Y29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlV2ViQXV0aGVudGljYXRpb24i
LCB0cnVlKTsgfQorICAgIGJvb2wgZW5hYmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRp
Y2F0b3IoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVXZWJBdXRoZW50
aWNhdGlvbkxvY2FsQXV0aGVudGljYXRvciIsIHRydWUpOyB9CisgICAgYm9vbCBlbmFibGVJbnNw
ZWN0b3JBZGRpdGlvbnMoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVJ
bnNwZWN0b3JBZGRpdGlvbnMiLCBmYWxzZSk7IH0KKyAgICBib29sIHNob3VsZFNob3dUb3VjaGVz
KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgic2hvdWxkU2hvd1RvdWNoZXMiLCBm
YWxzZSk7IH0KKyAgICBib29sIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycigpIGNvbnN0IHsgcmV0
dXJuIGJvb2xGZWF0dXJlVmFsdWUoImR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIsIGZhbHNlKTsg
fQorICAgIGJvb2wgYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlh
bHMoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJhbGxvd0Nyb3NzT3JpZ2luU3Vi
cmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyIsIGZhbHNlKTsgfQorICAgIGJvb2wgZG9tUGFz
dGVBbGxvd2VkKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZG9tUGFzdGVBbGxv
d2VkIiwgdHJ1ZSk7IH0KKyAgICBib29sIGVuYWJsZUNvbG9yRmlsdGVyKCkgY29uc3QgeyByZXR1
cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlQ29sb3JGaWx0ZXIiLCBmYWxzZSk7IH0KKyAgICBi
b29sIHB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUoKSBjb25zdCB7IHJldHVybiBi
b29sRmVhdHVyZVZhbHVlKCJwdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlIiwgZmFs
c2UpOyB9CisgICAgYm9vbCBydW5TaW5nbHkoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZh
bHVlKCJydW5TaW5nbHkiLCBmYWxzZSk7IH0KKyAgICBib29sIGNoZWNrRm9yV29ybGRMZWFrcygp
IGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImNoZWNrRm9yV29ybGRMZWFrcyIsIGZh
bHNlKTsgfQorICAgIGJvb2wgc2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0KCkgY29uc3QgeyByZXR1
cm4gYm9vbEZlYXR1cmVWYWx1ZSgic2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0IiwgZmFsc2UpOyB9
CisgICAgYm9vbCBzaG91bGRTaG93U3BlbGxDaGVja2luZ0RvdHMoKSBjb25zdCB7IHJldHVybiBi
b29sRmVhdHVyZVZhbHVlKCJzaG91bGRTaG93U3BlbGxDaGVja2luZ0RvdHMiLCBmYWxzZSk7IH0K
KyAgICBib29sIGVuYWJsZVNlcnZpY2VDb250cm9scygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0
dXJlVmFsdWUoImVuYWJsZVNlcnZpY2VDb250cm9scyIsIGZhbHNlKTsgfQorICAgIGJvb2wgZWRp
dGFibGUoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlZGl0YWJsZSIsIGZhbHNl
KTsgfQorICAgIGJvb2wgc2hvdWxkSGFuZGxlUnVuT3BlblBhbmVsKCkgY29uc3QgeyByZXR1cm4g
Ym9vbEZlYXR1cmVWYWx1ZSgic2hvdWxkSGFuZGxlUnVuT3BlblBhbmVsIiwgdHJ1ZSk7IH0KKyAg
ICBib29sIHNob3VsZFByZXNlbnRQb3BvdmVycygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJl
VmFsdWUoInNob3VsZFByZXNlbnRQb3BvdmVycyIsIHRydWUpOyB9CisgICAgYm9vbCBlbmFibGVB
cHBOYXAoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVBcHBOYXAiLCBm
YWxzZSk7IH0KKyAgICBib29sIGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUoKSBjb25zdCB7IHJldHVy
biBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVCYWNrRm9yd2FyZENhY2hlIiwgZmFsc2UpOyB9Cisg
ICAgYm9vbCBhbGxvd3NMaW5rUHJldmlldygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFs
dWUoImFsbG93c0xpbmtQcmV2aWV3IiwgdHJ1ZSk7IH0KKyAgICBib29sIGVuYWJsZUNhcHR1cmVW
aWRlb0luVUlQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxl
Q2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MiLCBmYWxzZSk7IH0KKyAgICBib29sIGVuYWJsZUNhcHR1
cmVWaWRlb0luR1BVUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVu
YWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2VzcyIsIGZhbHNlKTsgfQorICAgIGJvb2wgZW5hYmxl
Q2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVl
KCJlbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcyIsIGZhbHNlKTsgfQorICAgIGJvb2wgZW5h
YmxlQ2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVW
YWx1ZSgiZW5hYmxlQ2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzIiwgZmFsc2UpOyB9CisgICAgYm9v
bCBhbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1
cmVWYWx1ZSgiYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyIsIHRydWUpOyB9CisgICAgYm9v
bCBlbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVW
YWx1ZSgiZW5hYmxlSW5BcHBCcm93c2VyUHJpdmFjeSIsIGZhbHNlKTsgfQorICAgIGJvb2wgaXNB
cHBCb3VuZFdlYlZpZXcoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJpc0FwcEJv
dW5kV2ViVmlldyIsIGZhbHNlKTsgfQorICAgIGJvb2wgaWdub3JlU3luY2hyb25vdXNNZXNzYWdp
bmdUaW1lb3V0cygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImlnbm9yZVN5bmNo
cm9ub3VzTWVzc2FnaW5nVGltZW91dHMiLCBmYWxzZSk7IH0KKyAgICBib29sIGVuYWJsZVByb2Nl
c3NTd2FwT25OYXZpZ2F0aW9uKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5h
YmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24iLCB0cnVlKTsgfQorICAgIGJvb2wgZW5hYmxlUHJv
Y2Vzc1N3YXBPbldpbmRvd09wZW4oKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJl
bmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiIsIGZhbHNlKTsgfQorICAgIGJvb2wgdXNlU2Vy
dmljZVdvcmtlclNob3J0VGltZW91dCgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUo
InVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQiLCBmYWxzZSk7IH0KKyAgICBkb3VibGUgY29u
dGVudEluc2V0VG9wKCkgY29uc3QgeyByZXR1cm4gZG91YmxlRmVhdHVyZVZhbHVlKCJjb250ZW50
SW5zZXQudG9wIiwgMCk7IH0KKyAgICBkb3VibGUgZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdCB7
IHJldHVybiBkb3VibGVGZWF0dXJlVmFsdWUoImRldmljZVNjYWxlRmFjdG9yIiwgMSk7IH0KKyAg
ICBzdGQ6OnN0cmluZyBhcHBsaWNhdGlvbk1hbmlmZXN0KCkgY29uc3QgeyByZXR1cm4gc3RyaW5n
RmVhdHVyZVZhbHVlKCJhcHBsaWNhdGlvbk1hbmlmZXN0IiwgeyB9KTsgfQorICAgIHN0ZDo6c3Ry
aW5nIGpzY09wdGlvbnMoKSBjb25zdCB7IHJldHVybiBzdHJpbmdGZWF0dXJlVmFsdWUoImpzY09w
dGlvbnMiLCB7IH0pOyB9CisgICAgc3RkOjpzdHJpbmcgYWRkaXRpb25hbFN1cHBvcnRlZEltYWdl
VHlwZXMoKSBjb25zdCB7IHJldHVybiBzdHJpbmdGZWF0dXJlVmFsdWUoImFkZGl0aW9uYWxTdXBw
b3J0ZWRJbWFnZVR5cGVzIiwgeyB9KTsgfQorICAgIHN0ZDo6c3RyaW5nIHN0YW5kYWxvbmVXZWJB
cHBsaWNhdGlvblVSTCgpIGNvbnN0IHsgcmV0dXJuIHN0cmluZ0ZlYXR1cmVWYWx1ZSgic3RhbmRh
bG9uZVdlYkFwcGxpY2F0aW9uVVJMIiwgeyB9KTsgfQorICAgIHN0ZDo6c3RyaW5nIGNvbnRlbnRN
b2RlKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nRmVhdHVyZVZhbHVlKCJjb250ZW50TW9kZSIsIHsg
fSk7IH0KKyAgICBzdGQ6OnN0cmluZyBhcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKSBjb25z
dCB7IHJldHVybiBzdHJpbmdGZWF0dXJlVmFsdWUoImFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmll
ciIsIHsgfSk7IH0KKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3ZlcnJpZGVMYW5ndWFn
ZXMoKSBjb25zdCB7IHJldHVybiBzdHJpbmdWZWN0b3JGZWF0dXJlVmFsdWUoImxhbmd1YWdlIiwg
eyB9KTsgfQorCisgICAgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29s
PiYgZXhwZXJpbWVudGFsRmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLmV4cGVy
aW1lbnRhbEZlYXR1cmVzOyB9CisgICAgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3Ry
aW5nLCBib29sPiYgaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0
dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXM7IH0KIAorICAgIGJvb2wgaGFzU2FtZUluaXRpYWxp
emF0aW9uT3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmIChtX2ZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzICE9IG9wdGlvbnMubV9m
ZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgaWYgKG1fZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzICE9IG9wdGlvbnMu
bV9mZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGlmIChtX2ZlYXR1cmVzLmJvb2xGZWF0dXJlcyAhPSBvcHRpb25zLm1fZmVh
dHVyZXMuYm9vbEZlYXR1cmVzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBp
ZiAobV9mZWF0dXJlcy5kb3VibGVGZWF0dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuZG91Ymxl
RmVhdHVyZXMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX2ZlYXR1
cmVzLnN0cmluZ0ZlYXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJlcy5zdHJpbmdGZWF0dXJlcykK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG1fZmVhdHVyZXMuc3RyaW5n
VmVjdG9yRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2ZlYXR1cmVzLnN0cmluZ1ZlY3RvckZlYXR1cmVz
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUIGZlYXR1cmVWYWx1
ZShzdGQ6OnN0cmluZyBrZXksIFQgZGVmYXVsdFZhbHVlLCBjb25zdCBzdGQ6OnVub3JkZXJlZF9t
YXA8c3RkOjpzdHJpbmcsIFQ+JiBtYXApIGNvbnN0CisgICAgeworICAgICAgICBhdXRvIGl0ID0g
bWFwLmZpbmQoa2V5KTsKKyAgICAgICAgaWYgKGl0ICE9IG1hcC5lbmQoKSkKKyAgICAgICAgICAg
IHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOworICAgIH0K
KworICAgIGJvb2wgYm9vbEZlYXR1cmVWYWx1ZShzdGQ6OnN0cmluZyBrZXksIGJvb2wgZGVmYXVs
dFZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZlYXR1cmVWYWx1ZShrZXksIGRl
ZmF1bHRWYWx1ZSwgbV9mZWF0dXJlcy5ib29sRmVhdHVyZXMpOworICAgIH0KKyAgICBkb3VibGUg
ZG91YmxlRmVhdHVyZVZhbHVlKHN0ZDo6c3RyaW5nIGtleSwgZG91YmxlIGRlZmF1bHRWYWx1ZSkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmZWF0dXJlVmFsdWUoa2V5LCBkZWZhdWx0VmFs
dWUsIG1fZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMpOworICAgIH0KKyAgICBzdGQ6OnN0cmluZyBz
dHJpbmdGZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5LCBzdGQ6OnN0cmluZyBkZWZhdWx0VmFs
dWUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZmVhdHVyZVZhbHVlKGtleSwgZGVmYXVs
dFZhbHVlLCBtX2ZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVzKTsKKyAgICB9CisgICAgc3RkOjp2ZWN0
b3I8c3RkOjpzdHJpbmc+IHN0cmluZ1ZlY3RvckZlYXR1cmVWYWx1ZShzdGQ6OnN0cmluZyBrZXks
IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZWZhdWx0VmFsdWUpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gZmVhdHVyZVZhbHVlKGtleSwgZGVmYXVsdFZhbHVlLCBtX2ZlYXR1cmVzLnN0
cmluZ1ZlY3RvckZlYXR1cmVzKTsKKyAgICB9CisKKyAgICBUZXN0RmVhdHVyZXMgbV9mZWF0dXJl
czsKIH07CiAKIH0KSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRy
b2xsZXJDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29h
L1Rlc3RDb250cm9sbGVyQ29jb2EubW0JKHJldmlzaW9uIDI2Nzg4NSkKKysrIFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2NvYS5tbQkod29ya2luZyBjb3B5KQpA
QCAtMTE0LDI3ICsxMTQsMjggQEAgV0tQcmVmZXJlbmNlc1JlZiBUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcgogICAgIHJldHVybiAoX19icmlkZ2UgV0tQcmVmZXJlbmNlc1JlZilnbG9iYWxXZWJWaWV3
Q29uZmlndXJhdGlvbi5wcmVmZXJlbmNlczsKIH0KIAotdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1BZGRUZXN0T3B0aW9ucyhUZXN0T3B0aW9ucyYgb3B0aW9ucykgY29uc3QKK1Rlc3RGZWF0
dXJlcyBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVPdmVycmlkZXNEZWZh
dWx0c0ZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKSBjb25zdAogeworICAgIFRlc3RGZWF0dXJl
cyBmZWF0dXJlczsKKwogICAgIGlmIChbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1
bHRzXSBib29sRm9yS2V5OkAiRW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24iXSkKLSAgICAg
ICAgb3B0aW9ucy5jb250ZXh0T3B0aW9ucy5lbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbiA9
IHRydWU7CisgICAgICAgIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAiZW5hYmxlUHJv
Y2Vzc1N3YXBPbk5hdmlnYXRpb24iLCB0cnVlIH0pOwogICAgIGlmIChbW05TVXNlckRlZmF1bHRz
IHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5OkAiRW5hYmxlUHJvY2Vzc1N3YXBPbldp
bmRvd09wZW4iXSkKLSAgICAgICAgb3B0aW9ucy5jb250ZXh0T3B0aW9ucy5lbmFibGVQcm9jZXNz
U3dhcE9uV2luZG93T3BlbiA9IHRydWU7CisgICAgICAgIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5p
bnNlcnQoeyAiZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW4iLCB0cnVlIH0pOwogCi0jaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAob3B0aW9ucy5lbmFibGVJbkFwcEJyb3dzZXJQ
cml2YWN5KQotICAgICAgICBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBz
ZXRCb29sOllFUyBmb3JLZXk6QCJXZWJLaXREZWJ1Z0lzSW5BcHBCcm93c2VyUHJpdmFjeUVuYWJs
ZWQiXTsKLSNlbmRpZgorICAgIHJldHVybiBmZWF0dXJlczsKIH0KIAogdm9pZCBUZXN0Q29udHJv
bGxlcjo6cGxhdGZvcm1Jbml0aWFsaXplRGF0YVN0b3JlKFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYs
IGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChvcHRpb25zLnVzZUVwaGVt
ZXJhbFNlc3Npb24gfHwgb3B0aW9ucy5zdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwubGVuZ3Ro
KCkpIHsKLSAgICAgICAgYXV0byB3ZWJzaXRlRGF0YVN0b3JlQ29uZmlnID0gb3B0aW9ucy51c2VF
cGhlbWVyYWxTZXNzaW9uID8gW1tbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gYWxs
b2NdIGluaXROb25QZXJzaXN0ZW50Q29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdIDogW1tbX1dL
V2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsK
LSAgICAgICAgaWYgKCFvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24pCisgICAgYm9vbCB1c2VF
cGhlbWVyYWxTZXNzaW9uID0gb3B0aW9ucy51c2VFcGhlbWVyYWxTZXNzaW9uKCk7CisgICAgYXV0
byBzdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwgPSBvcHRpb25zLnN0YW5kYWxvbmVXZWJBcHBs
aWNhdGlvblVSTCgpOworICAgIGlmICh1c2VFcGhlbWVyYWxTZXNzaW9uIHx8IHN0YW5kYWxvbmVX
ZWJBcHBsaWNhdGlvblVSTC5sZW5ndGgoKSkgeworICAgICAgICBhdXRvIHdlYnNpdGVEYXRhU3Rv
cmVDb25maWcgPSB1c2VFcGhlbWVyYWxTZXNzaW9uID8gW1tbX1dLV2Vic2l0ZURhdGFTdG9yZUNv
bmZpZ3VyYXRpb24gYWxsb2NdIGluaXROb25QZXJzaXN0ZW50Q29uZmlndXJhdGlvbl0gYXV0b3Jl
bGVhc2VdIDogW1tbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRd
IGF1dG9yZWxlYXNlXTsKKyAgICAgICAgaWYgKCF1c2VFcGhlbWVyYWxTZXNzaW9uKQogICAgICAg
ICAgICAgY29uZmlndXJlV2Vic2l0ZURhdGFTdG9yZVRlbXBvcmFyeURpcmVjdG9yaWVzKChXS1dl
YnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uUmVmKXdlYnNpdGVEYXRhU3RvcmVDb25maWcpOwot
ICAgICAgICBpZiAob3B0aW9ucy5zdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwubGVuZ3RoKCkp
Ci0gICAgICAgICAgICBbd2Vic2l0ZURhdGFTdG9yZUNvbmZpZyBzZXRTdGFuZGFsb25lQXBwbGlj
YXRpb25VUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3Ry
aW5nOm9wdGlvbnMuc3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMLmNfc3RyKCldXV07CisgICAg
ICAgIGlmIChzdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwubGVuZ3RoKCkpCisgICAgICAgICAg
ICBbd2Vic2l0ZURhdGFTdG9yZUNvbmZpZyBzZXRTdGFuZGFsb25lQXBwbGljYXRpb25VUkw6W05T
VVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnN0YW5kYWxv
bmVXZWJBcHBsaWNhdGlvblVSTC5jX3N0cigpXV1dOwogICAgICAgICBtX3dlYnNpdGVEYXRhU3Rv
cmUgPSAoX19icmlkZ2UgV0tXZWJzaXRlRGF0YVN0b3JlUmVmKVtbW1dLV2Vic2l0ZURhdGFTdG9y
ZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjp3ZWJzaXRlRGF0YVN0b3JlQ29uZmlnXSBh
dXRvcmVsZWFzZV07CiAgICAgfSBlbHNlCiAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IChf
X2JyaWRnZSBXS1dlYnNpdGVEYXRhU3RvcmVSZWYpZ2xvYmFsV2ViVmlld0NvbmZpZ3VyYXRpb24u
d2Vic2l0ZURhdGFTdG9yZTsKQEAgLTE0NSwzMiArMTQ2LDMzIEBAIHZvaWQgVGVzdENvbnRyb2xs
ZXI6OnBsYXRmb3JtQ3JlYXRlV2ViVmkKICAgICBhdXRvIGNvcGllZENvbmZpZ3VyYXRpb24gPSBh
ZG9wdE5TKFtnbG9iYWxXZWJWaWV3Q29uZmlndXJhdGlvbiBjb3B5XSk7CiAKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgIGlmIChvcHRpb25zLnVzZURhdGFEZXRlY3Rpb24pCisgICAgaWYg
KG9wdGlvbnMudXNlRGF0YURldGVjdGlvbigpKQogICAgICAgICBbY29waWVkQ29uZmlndXJhdGlv
biBzZXREYXRhRGV0ZWN0b3JUeXBlczpXS0RhdGFEZXRlY3RvclR5cGVBbGxdOwotICAgIGlmIChv
cHRpb25zLmlnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKQorICAgIGlmIChvcHRpb25zLmlnbm9y
ZXNWaWV3cG9ydFNjYWxlTGltaXRzKCkpCiAgICAgICAgIFtjb3BpZWRDb25maWd1cmF0aW9uIHNl
dElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzOllFU107Ci0gICAgaWYgKG9wdGlvbnMudXNlQ2hh
cmFjdGVyU2VsZWN0aW9uR3JhbnVsYXJpdHkpCisgICAgaWYgKG9wdGlvbnMudXNlQ2hhcmFjdGVy
U2VsZWN0aW9uR3JhbnVsYXJpdHkoKSkKICAgICAgICAgW2NvcGllZENvbmZpZ3VyYXRpb24gc2V0
U2VsZWN0aW9uR3JhbnVsYXJpdHk6V0tTZWxlY3Rpb25HcmFudWxhcml0eUNoYXJhY3Rlcl07Ci0g
ICAgaWYgKG9wdGlvbnMuaXNBcHBCb3VuZFdlYlZpZXcpCisgICAgaWYgKG9wdGlvbnMuaXNBcHBC
b3VuZFdlYlZpZXcoKSkKICAgICAgICAgW2NvcGllZENvbmZpZ3VyYXRpb24gc2V0TGltaXRzTmF2
aWdhdGlvbnNUb0FwcEJvdW5kRG9tYWluczpZRVNdOwogI2Vsc2UKLSAgICBbY29waWVkQ29uZmln
dXJhdGlvbiBfc2V0U2VydmljZUNvbnRyb2xzRW5hYmxlZDpvcHRpb25zLmVuYWJsZVNlcnZpY2VD
b250cm9sc107CisgICAgW2NvcGllZENvbmZpZ3VyYXRpb24gX3NldFNlcnZpY2VDb250cm9sc0Vu
YWJsZWQ6b3B0aW9ucy5lbmFibGVTZXJ2aWNlQ29udHJvbHMoKV07CiAjZW5kaWYKIAotICAgIGlm
IChvcHRpb25zLmVuYWJsZUF0dGFjaG1lbnRFbGVtZW50KQorICAgIGlmIChvcHRpb25zLmVuYWJs
ZUF0dGFjaG1lbnRFbGVtZW50KCkpCiAgICAgICAgIFtjb3BpZWRDb25maWd1cmF0aW9uIF9zZXRB
dHRhY2htZW50RWxlbWVudEVuYWJsZWQ6WUVTXTsKIAotICAgIGlmIChvcHRpb25zLmVuYWJsZUNv
bG9yRmlsdGVyKQorICAgIGlmIChvcHRpb25zLmVuYWJsZUNvbG9yRmlsdGVyKCkpCiAgICAgICAg
IFtjb3BpZWRDb25maWd1cmF0aW9uIF9zZXRDb2xvckZpbHRlckVuYWJsZWQ6WUVTXTsKIAogICAg
IFtjb3BpZWRDb25maWd1cmF0aW9uIHNldFdlYnNpdGVEYXRhU3RvcmU6KFdLV2Vic2l0ZURhdGFT
dG9yZSAqKXdlYnNpdGVEYXRhU3RvcmUoKV07CiAKLSAgICBbY29waWVkQ29uZmlndXJhdGlvbiBf
c2V0QWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMczpvcHRpb25zLmFsbG93VG9wTmF2aWdhdGlv
blRvRGF0YVVSTHNdOworICAgIFtjb3BpZWRDb25maWd1cmF0aW9uIF9zZXRBbGxvd1RvcE5hdmln
YXRpb25Ub0RhdGFVUkxzOm9wdGlvbnMuYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcygpXTsK
IAogICAgIGNvbmZpZ3VyZUNvbnRlbnRNb2RlKGNvcGllZENvbmZpZ3VyYXRpb24uZ2V0KCksIG9w
dGlvbnMpOwogCi0gICAgaWYgKG9wdGlvbnMuYXBwbGljYXRpb25NYW5pZmVzdC5sZW5ndGgoKSkg
ewotICAgICAgICBhdXRvIG1hbmlmZXN0UGF0aCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0
cmluZzpvcHRpb25zLmFwcGxpY2F0aW9uTWFuaWZlc3QuY19zdHIoKV07CisgICAgYXV0byBhcHBs
aWNhdGlvbk1hbmlmZXN0ID0gb3B0aW9ucy5hcHBsaWNhdGlvbk1hbmlmZXN0KCk7CisgICAgaWYg
KGFwcGxpY2F0aW9uTWFuaWZlc3QubGVuZ3RoKCkpIHsKKyAgICAgICAgYXV0byBtYW5pZmVzdFBh
dGggPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6YXBwbGljYXRpb25NYW5pZmVzdC5j
X3N0cigpXTsKICAgICAgICAgTlNTdHJpbmcgKnRleHQgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENv
bnRlbnRzT2ZGaWxlOm1hbmlmZXN0UGF0aCB1c2VkRW5jb2Rpbmc6bnVsbHB0ciBlcnJvcjpudWxs
cHRyXTsKICAgICAgICAgW2NvcGllZENvbmZpZ3VyYXRpb24gX3NldEFwcGxpY2F0aW9uTWFuaWZl
c3Q6W19XS0FwcGxpY2F0aW9uTWFuaWZlc3QgYXBwbGljYXRpb25NYW5pZmVzdEZyb21KU09OOnRl
eHQgbWFuaWZlc3RVUkw6bmlsIGRvY3VtZW50VVJMOm5pbF1dOwogICAgIH0KQEAgLTE3OCwxMyAr
MTgwLDEzIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQ3JlYXRlV2ViVmkKICAgICBt
X21haW5XZWJWaWV3ID0gbWFrZVVuaXF1ZTxQbGF0Zm9ybVdlYlZpZXc+KGNvcGllZENvbmZpZ3Vy
YXRpb24uZ2V0KCksIG9wdGlvbnMpOwogICAgIGZpbmlzaENyZWF0aW5nUGxhdGZvcm1XZWJWaWV3
KG1fbWFpbldlYlZpZXcuZ2V0KCksIG9wdGlvbnMpOwogCi0gICAgaWYgKG9wdGlvbnMucHVuY2hP
dXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZSkKKyAgICBpZiAob3B0aW9ucy5wdW5jaE91dFdo
aXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlKCkpCiAgICAgICAgIG1fbWFpbldlYlZpZXctPnNldERy
YXdzQmFja2dyb3VuZChmYWxzZSk7CiAKLSAgICBpZiAob3B0aW9ucy5lZGl0YWJsZSkKKyAgICBp
ZiAob3B0aW9ucy5lZGl0YWJsZSgpKQogICAgICAgICBtX21haW5XZWJWaWV3LT5zZXRFZGl0YWJs
ZSh0cnVlKTsKIAotICAgIG1fbWFpbldlYlZpZXctPnBsYXRmb3JtVmlldygpLmFsbG93c0xpbmtQ
cmV2aWV3ID0gb3B0aW9ucy5hbGxvd3NMaW5rUHJldmlldzsKKyAgICBtX21haW5XZWJWaWV3LT5w
bGF0Zm9ybVZpZXcoKS5hbGxvd3NMaW5rUHJldmlldyA9IG9wdGlvbnMuYWxsb3dzTGlua1ByZXZp
ZXcoKTsKICAgICBbbV9tYWluV2ViVmlldy0+cGxhdGZvcm1WaWV3KCkgX3NldFNoYXJlU2hlZXRD
b21wbGV0ZXNJbW1lZGlhdGVseVdpdGhSZXNvbHV0aW9uRm9yVGVzdGluZzpZRVNdOwogfQogCkBA
IC0yMDMsNyArMjA1LDcgQEAgUGxhdGZvcm1XZWJWaWV3KiBUZXN0Q29udHJvbGxlcjo6cGxhdGZv
cgogdm9pZCBUZXN0Q29udHJvbGxlcjo6ZmluaXNoQ3JlYXRpbmdQbGF0Zm9ybVdlYlZpZXcoUGxh
dGZvcm1XZWJWaWV3KiB2aWV3LCBjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykKIHsKICNpZiBQ
TEFURk9STShNQUMpCi0gICAgaWYgKG9wdGlvbnMuc2hvdWxkU2hvd1dlYlZpZXcpCisgICAgaWYg
KG9wdGlvbnMuc2hvdWxkU2hvd1dlYlZpZXcoKSkKICAgICAgICAgW3ZpZXctPnBsYXRmb3JtV2lu
ZG93KCkgb3JkZXJGcm9udDpuaWxdOwogICAgIGVsc2UKICAgICAgICAgW3ZpZXctPnBsYXRmb3Jt
V2luZG93KCkgb3JkZXJCYWNrOm5pbF07CkBAIC0yNjMsMTIgKzI2NSwxMiBAQCB2b2lkIFRlc3RD
b250cm9sbGVyOjpyZXNldENvbnRlbnRFeHRlbnNpCiAgICAgfQogfQogCi12b2lkIFRlc3RDb250
cm9sbGVyOjpzZXRBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBidW5k
bGVJZGVudGlmaWVyKQordm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0QXBwbGljYXRpb25CdW5kbGVJ
ZGVudGlmaWVyKGNvbnN0IHN0ZDo6c3RyaW5nJiBidW5kbGVJZGVudGlmaWVyKQogewotICAgIGlm
IChidW5kbGVJZGVudGlmaWVyLmlzRW1wdHkoKSkKKyAgICBpZiAoYnVuZGxlSWRlbnRpZmllci5l
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgW1Rlc3RSdW5uZXJXS1dlYlZpZXcg
X3NldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcjooTlNTdHJpbmcgKilidW5kbGVJZGVudGlm
aWVyLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCldOworICAgIFtUZXN0UnVubmVyV0tXZWJWaWV3IF9z
ZXRBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXI6KE5TU3RyaW5nICopdG9XVEZTdHJpbmcoYnVu
ZGxlSWRlbnRpZmllcikuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV07CiB9CiAKIHZvaWQgVGVzdENv
bnRyb2xsZXI6OmNsZWFyQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyVGVzdGluZ092ZXJyaWRl
KCkKQEAgLTI4Niw3ICsyODgsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpjb2NvYVJlc2V0U3Rh
dGVUb0NvCiAgICAgICAgIFRlc3RSdW5uZXJXS1dlYlZpZXcgKnBsYXRmb3JtVmlldyA9IHdlYlZp
ZXctPnBsYXRmb3JtVmlldygpOwogICAgICAgICBwbGF0Zm9ybVZpZXcuX3ZpZXdTY2FsZSA9IDE7
CiAgICAgICAgIHBsYXRmb3JtVmlldy5fbWluaW11bUVmZmVjdGl2ZURldmljZVdpZHRoID0gMDsK
LSAgICAgICAgW3BsYXRmb3JtVmlldyBfc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
Rm9yVGVzdGluZzpvcHRpb25zLnNob3VsZFNob3dTcGVsbENoZWNraW5nRG90c107CisgICAgICAg
IFtwbGF0Zm9ybVZpZXcgX3NldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZEZvclRlc3Rp
bmc6b3B0aW9ucy5zaG91bGRTaG93U3BlbGxDaGVja2luZ0RvdHMoKV07CiAgICAgICAgIFtwbGF0
Zm9ybVZpZXcgcmVzZXRJbnRlcmFjdGlvbkNhbGxiYWNrc107CiAgICAgICAgIFtwbGF0Zm9ybVZp
ZXcgX3Jlc2V0TmF2aWdhdGlvbkdlc3R1cmVTdGF0ZUZvclRlc3RpbmddOwogICAgIH0KQEAgLTI5
Nyw2ICsyOTksMTEgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6Y29jb2FSZXNldFN0YXRlVG9Dbwog
dm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1XaWxsUnVuVGVzdChjb25zdCBUZXN0SW52b2Nh
dGlvbiYgdGVzdEludm9jYXRpb24pCiB7CiAgICAgc2V0Q3Jhc2hSZXBvcnRBcHBsaWNhdGlvblNw
ZWNpZmljSW5mb3JtYXRpb25Ub1VSTCh0ZXN0SW52b2NhdGlvbi51cmwoKSk7CisKKyNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQorICAgIGlmICh0ZXN0SW52b2NhdGlvbi5vcHRpb25zKCkuZW5hYmxl
SW5BcHBCcm93c2VyUHJpdmFjeSgpKQorICAgICAgICBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJk
VXNlckRlZmF1bHRzXSBzZXRCb29sOllFUyBmb3JLZXk6QCJXZWJLaXREZWJ1Z0lzSW5BcHBCcm93
c2VyUHJpdmFjeUVuYWJsZWQiXTsKKyNlbmRpZgogfQogCiBzdGF0aWMgTlNTdHJpbmcgKiBjb25z
dCBXZWJBcmNoaXZlUGJvYXJkVHlwZSA9IEAiQXBwbGUgV2ViIEFyY2hpdmUgcGFzdGVib2FyZCB0
eXBlIjsKQEAgLTQ4NywxMiArNDk0LDExIEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OmlzRG9pbmdN
ZWRpYUNhcHR1cmUKIAogc3RhdGljIFdLQ29udGVudE1vZGUgY29udGVudE1vZGUoY29uc3QgVGVz
dE9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKG9wdGlvbnMuY29udGVudE1vZGUgPT0gImRl
c2t0b3AiX3MpCisgICAgYXV0byBtb2RlID0gb3B0aW9ucy5jb250ZW50TW9kZSgpOworICAgIGlm
IChtb2RlID09ICJkZXNrdG9wIikKICAgICAgICAgcmV0dXJuIFdLQ29udGVudE1vZGVEZXNrdG9w
OwotCi0gICAgaWYgKG9wdGlvbnMuY29udGVudE1vZGUgPT0gIm1vYmlsZSJfcykKKyAgICBpZiAo
bW9kZSA9PSAibW9iaWxlIikKICAgICAgICAgcmV0dXJuIFdLQ29udGVudE1vZGVNb2JpbGU7Ci0K
ICAgICByZXR1cm4gV0tDb250ZW50TW9kZVJlY29tbWVuZGVkOwogfQogCkluZGV4OiBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0Q29udHJvbGxlckd0ay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvVGVzdENvbnRyb2xsZXJHdGsuY3BwCShyZXZpc2lv
biAyNjc4ODUpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0Q29udHJvbGxlckd0
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw5ICsxNTAsMTEgQEAgdm9pZCBUZXN0Q29udHJv
bGxlcjo6cGxhdGZvcm1SZXNldFByZWZlcgogICAgIG1fbWFpbldlYlZpZXctPmRpc21pc3NBbGxQ
b3B1cE1lbnVzKCk7CiB9CiAKLXZvaWQgVGVzdENvbnRyb2xsZXI6OnVwZGF0ZVBsYXRmb3JtU3Bl
Y2lmaWNUZXN0T3B0aW9uc0ZvclRlc3QoVGVzdE9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IHN0ZDo6
c3RyaW5nJikgY29uc3QKK1Rlc3RGZWF0dXJlcyBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1TcGVj
aWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKSBjb25zdAogewot
ICAgIG9wdGlvbnMuZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyA9IGZhbHNlOworICAgIFRlc3RG
ZWF0dXJlcyBmZWF0dXJlczsKKyAgICBmZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgImVu
YWJsZU1vZGVybk1lZGlhQ29udHJvbHMiLCBmYWxzZSB9KTsKKyAgICByZXR1cm4gZmVhdHVyZXM7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9p
b3MvVGVzdENvbnRyb2xsZXJJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0JKHJldmlzaW9uIDI2Nzg4NSkKKysrIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTAsNyArMTkwLDcgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1SZXNldFN0
YXRlVAogICAgIH0KIAogICAgIG1fcHJlc2VudFBvcG92ZXJTd2l6emxlcnMuY2xlYXIoKTsKLSAg
ICBpZiAoIW9wdGlvbnMuc2hvdWxkUHJlc2VudFBvcG92ZXJzKSB7CisgICAgaWYgKCFvcHRpb25z
LnNob3VsZFByZXNlbnRQb3BvdmVycygpKSB7CiAjaWYgVVNFKFVJQ09OVEVYVE1FTlUpCiAgICAg
ICAgIG1fcHJlc2VudFBvcG92ZXJTd2l6emxlcnMuYXBwZW5kKG1ha2VVbmlxdWU8SW5zdGFuY2VN
ZXRob2RTd2l6emxlcj4oW1VJQ29udGV4dE1lbnVJbnRlcmFjdGlvbiBjbGFzc10sIEBzZWxlY3Rv
cihfcHJlc2VudE1lbnVBdExvY2F0aW9uOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlk
ZVByZXNlbnRNZW51T3JQb3BvdmVyT3JWaWV3Q29udHJvbGxlcikpKTsKICNlbmRpZgpAQCAtMjEz
LDggKzIxMywxMCBAQCBib29sIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJlc2V0U3RhdGVUCiAg
ICAgICAgIFVJU2Nyb2xsVmlldyAqc2Nyb2xsVmlldyA9IHdlYlZpZXcuc2Nyb2xsVmlldzsKICAg
ICAgICAgW3Njcm9sbFZpZXcgX3JlbW92ZUFsbEFuaW1hdGlvbnM6WUVTXTsKICAgICAgICAgW3Nj
cm9sbFZpZXcgc2V0Wm9vbVNjYWxlOjEgYW5pbWF0ZWQ6Tk9dOwotICAgICAgICBzY3JvbGxWaWV3
LmNvbnRlbnRJbnNldCA9IFVJRWRnZUluc2V0c01ha2Uob3B0aW9ucy5jb250ZW50SW5zZXRUb3As
IDAsIDAsIDApOwotICAgICAgICBzY3JvbGxWaWV3LmNvbnRlbnRPZmZzZXQgPSBDR1BvaW50TWFr
ZSgwLCAtb3B0aW9ucy5jb250ZW50SW5zZXRUb3ApOworICAgICAgICAKKyAgICAgICAgYXV0byBj
b250ZW50SW5zZXRUb3AgPSBvcHRpb25zLmNvbnRlbnRJbnNldFRvcCgpOworICAgICAgICBzY3Jv
bGxWaWV3LmNvbnRlbnRJbnNldCA9IFVJRWRnZUluc2V0c01ha2UoY29udGVudEluc2V0VG9wLCAw
LCAwLCAwKTsKKyAgICAgICAgc2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0ID0gQ0dQb2ludE1ha2Uo
MCwgLWNvbnRlbnRJbnNldFRvcCk7CiAKICAgICAgICAgaWYgKHdlYlZpZXcuaW50ZXJhY3RpbmdX
aXRoRm9ybUNvbnRyb2wpCiAgICAgICAgICAgICBzaG91bGRSZXN0b3JlRmlyc3RSZXNwb25kZXIg
PSBbd2ViVmlldyByZXNpZ25GaXJzdFJlc3BvbmRlcl07CkBAIC0yNjUsMTIgKzI2NywxNCBAQCBi
b29sIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJlc2V0U3RhdGVUCiAKIHZvaWQgVGVzdENvbnRy
b2xsZXI6OnBsYXRmb3JtQ29uZmlndXJlVmlld0ZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24m
IHRlc3QpCiB7CisgICAgW1tHZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5kb3cgc2hhcmVkR2VuZXJh
dGVkVG91Y2hlc0RlYnVnV2luZG93XSBzZXRTaG91bGRTaG93VG91Y2hlczp0ZXN0Lm9wdGlvbnMo
KS5zaG91bGRTaG93VG91Y2hlcygpXTsKKwogICAgIFRlc3RSdW5uZXJXS1dlYlZpZXcgKndlYlZp
ZXcgPSBtYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKTsKIAotICAgIGlmICh0ZXN0Lm9wdGlv
bnMoKS5zaG91bGRJZ25vcmVNZXRhVmlld3BvcnQpCisgICAgaWYgKHRlc3Qub3B0aW9ucygpLnNo
b3VsZElnbm9yZU1ldGFWaWV3cG9ydCgpKQogICAgICAgICB3ZWJWaWV3LmNvbmZpZ3VyYXRpb24u
cHJlZmVyZW5jZXMuX3Nob3VsZElnbm9yZU1ldGFWaWV3cG9ydCA9IFlFUzsKIAotICAgIGlmICgh
dGVzdC5vcHRpb25zKCkudXNlRmxleGlibGVWaWV3cG9ydCkKKyAgICBpZiAoIXRlc3Qub3B0aW9u
cygpLnVzZUZsZXhpYmxlVmlld3BvcnQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0dSZWN0
IHNjcmVlbkJvdW5kcyA9IFtVSVNjcmVlbiBtYWluU2NyZWVuXS5ib3VuZHM7CkBAIC0yOTEsMTAg
KzI5NSw5IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQ29uZmlndXJlVmkKICAgICAv
LyBXS0J1bmRsZVBhZ2VTZXRVc2VUZXN0aW5nVmlld3BvcnRDb25maWd1cmF0aW9uKGZhbHNlKS4K
IH0KIAotdm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRp
b25zRm9yVGVzdChUZXN0T3B0aW9ucyYgb3B0aW9ucywgY29uc3Qgc3RkOjpzdHJpbmcmKSBjb25z
dAorVGVzdEZlYXR1cmVzIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURl
ZmF1bHRzRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYpIGNvbnN0CiB7Ci0gICAgb3B0aW9ucy5z
aG91bGRTaG93VG91Y2hlcyA9IHNob3VsZFNob3dUb3VjaGVzKCk7Ci0gICAgW1tHZW5lcmF0ZWRU
b3VjaGVzRGVidWdXaW5kb3cgc2hhcmVkR2VuZXJhdGVkVG91Y2hlc0RlYnVnV2luZG93XSBzZXRT
aG91bGRTaG93VG91Y2hlczpvcHRpb25zLnNob3VsZFNob3dUb3VjaGVzXTsKKyAgICByZXR1cm4g
eyB9OwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemVDb250ZXh0
KCkKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1BsYXRmb3JtV2ViVmlld01hYy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9QbGF0Zm9ybVdlYlZp
ZXdNYWMubW0JKHJldmlzaW9uIDI2Nzg4NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFj
L1BsYXRmb3JtV2ViVmlld01hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjEsMTggKzYxLDE4IEBA
IFBsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KFdLV2ViVmkKICAgICAsIG1fb3B0aW9u
cyhvcHRpb25zKQogewogICAgIC8vIEZJWE1FOiBOb3Qgc3VyZSB0aGlzIGlzIHRoZSBiZXN0IHBs
YWNlIGZvciB0aGlzOyBtYXliZSB3ZSBzaG91bGQgaGF2ZSBBUEkgdG8gc2V0IHRoaXMgc28gd2Ug
Y2FuIGRvIGl0IGZyb20gVGVzdENvbnRyb2xsZXI/Ci0gICAgaWYgKG1fb3B0aW9ucy51c2VSZW1v
dGVMYXllclRyZWUpCisgICAgaWYgKG1fb3B0aW9ucy51c2VSZW1vdGVMYXllclRyZWUoKSkKICAg
ICAgICAgW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gc2V0VmFsdWU6QFlF
UyBmb3JLZXk6QCJXZWJLaXQyVXNlUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEiXTsKIAogICAg
IGF1dG8gY29waWVkQ29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW2NvbmZpZ3VyYXRpb24gY29weV0p
OwotICAgIFdLUHJlZmVyZW5jZXNTZXRUaHJlYWRlZFNjcm9sbGluZ0VuYWJsZWQoKF9fYnJpZGdl
IFdLUHJlZmVyZW5jZXNSZWYpW2NvcGllZENvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdLCBtX29w
dGlvbnMudXNlVGhyZWFkZWRTY3JvbGxpbmcpOworICAgIFdLUHJlZmVyZW5jZXNTZXRUaHJlYWRl
ZFNjcm9sbGluZ0VuYWJsZWQoKF9fYnJpZGdlIFdLUHJlZmVyZW5jZXNSZWYpW2NvcGllZENvbmZp
Z3VyYXRpb24gcHJlZmVyZW5jZXNdLCBtX29wdGlvbnMudXNlVGhyZWFkZWRTY3JvbGxpbmcoKSk7
CiAKICAgICBOU1JlY3QgcmVjdCA9IE5TTWFrZVJlY3QoMCwgMCwgVGVzdENvbnRyb2xsZXI6OnZp
ZXdXaWR0aCwgVGVzdENvbnRyb2xsZXI6OnZpZXdIZWlnaHQpOwogICAgIG1fdmlldyA9IFtbVGVz
dFJ1bm5lcldLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpyZWN0IGNvbmZpZ3VyYXRpb246
Y29waWVkQ29uZmlndXJhdGlvbi5nZXQoKV07CiAgICAgW21fdmlldyBfc2V0V2luZG93T2NjbHVz
aW9uRGV0ZWN0aW9uRW5hYmxlZDpOT107CiAKICAgICBOU1NjcmVlbiAqZmlyc3RTY3JlZW4gPSBb
W05TU2NyZWVuIHNjcmVlbnNdIG9iamVjdEF0SW5kZXg6MF07Ci0gICAgTlNSZWN0IHdpbmRvd1Jl
Y3QgPSBtX29wdGlvbnMuc2hvdWxkU2hvd1dlYlZpZXcgPyBOU09mZnNldFJlY3QocmVjdCwgMTAw
LCAxMDApIDogTlNPZmZzZXRSZWN0KHJlY3QsIC0xMDAwMCwgW2ZpcnN0U2NyZWVuIGZyYW1lXS5z
aXplLmhlaWdodCAtIHJlY3Quc2l6ZS5oZWlnaHQgKyAxMDAwMCk7CisgICAgTlNSZWN0IHdpbmRv
d1JlY3QgPSBtX29wdGlvbnMuc2hvdWxkU2hvd1dlYlZpZXcoKSA/IE5TT2Zmc2V0UmVjdChyZWN0
LCAxMDAsIDEwMCkgOiBOU09mZnNldFJlY3QocmVjdCwgLTEwMDAwLCBbZmlyc3RTY3JlZW4gZnJh
bWVdLnNpemUuaGVpZ2h0IC0gcmVjdC5zaXplLmhlaWdodCArIDEwMDAwKTsKICAgICBtX3dpbmRv
dyA9IFtbV2ViS2l0VGVzdFJ1bm5lcldpbmRvdyBhbGxvY10gaW5pdFdpdGhDb250ZW50UmVjdDp3
aW5kb3dSZWN0IHN0eWxlTWFzazpOU1dpbmRvd1N0eWxlTWFza0JvcmRlcmxlc3MgYmFja2luZzoo
TlNCYWNraW5nU3RvcmVUeXBlKV9OU0JhY2tpbmdTdG9yZVVuYnVmZmVyZWQgZGVmZXI6WUVTXTsK
ICAgICBtX3dpbmRvdy5wbGF0Zm9ybVdlYlZpZXcgPSB0aGlzOwogICAgIFttX3dpbmRvdyBzZXRD
b2xvclNwYWNlOltmaXJzdFNjcmVlbiBjb2xvclNwYWNlXV07CkluZGV4OiBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL21hYy9UZXN0Q29udHJvbGxlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL21hYy9UZXN0Q29udHJvbGxlck1hYy5tbQkocmV2aXNpb24gMjY3ODg1
KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvVGVzdENvbnRyb2xsZXJNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTE3MiwxMSArMTcyLDExIEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnBs
YXRmb3JtUmVzZXRTdGF0ZVQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBUZXN0Q29udHJv
bGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9yVGVzdChUZXN0T3B0aW9u
cyYgb3B0aW9ucywgY29uc3Qgc3RkOjpzdHJpbmcmKSBjb25zdAorVGVzdEZlYXR1cmVzIFRlc3RD
b250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1bHRzRm9yVGVzdChjb25zdCBU
ZXN0Q29tbWFuZCYpIGNvbnN0CiB7Ci0gICAgb3B0aW9ucy51c2VUaHJlYWRlZFNjcm9sbGluZyA9
IHRydWU7Ci0gICAgb3B0aW9ucy51c2VSZW1vdGVMYXllclRyZWUgPSBzaG91bGRVc2VSZW1vdGVM
YXllclRyZWUoKTsKLSAgICBvcHRpb25zLnNob3VsZFNob3dXZWJWaWV3ID0gc2hvdWxkU2hvd1dl
YlZpZXcoKTsKKyAgICBUZXN0RmVhdHVyZXMgZmVhdHVyZXM7CisgICAgZmVhdHVyZXMuYm9vbEZl
YXR1cmVzLmluc2VydCh7ICJ1c2VUaHJlYWRlZFNjcm9sbGluZyIsIHRydWUgfSk7CisgICAgcmV0
dXJuIGZlYXR1cmVzOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpjb25maWd1cmVDb250ZW50
RXh0ZW5zaW9uRm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYgdGVzdCkKSW5kZXg6IFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvd2luL1Rlc3RDb250cm9sbGVyV2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9UZXN0Q29udHJvbGxlcldpbi5jcHAJKHJldmlz
aW9uIDI2Nzg4NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL1Rlc3RDb250cm9sbGVy
V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI3LDkgKzIyNyw5IEBAIHZvaWQgVGVzdENvbnRy
b2xsZXI6OnBsYXRmb3JtUmVzZXRQcmVmZXIKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12
b2lkIFRlc3RDb250cm9sbGVyOjp1cGRhdGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JU
ZXN0KFRlc3RPcHRpb25zJiwgY29uc3Qgc3RkOjpzdHJpbmcmKSBjb25zdAorVGVzdEZlYXR1cmVz
IFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1bHRzRm9yVGVzdChj
b25zdCBUZXN0Q29tbWFuZCYpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4geyB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVFIKSW5kZXg6IFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvd3BlL1Rlc3RDb250cm9sbGVyV1BFLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL3dwZS9UZXN0Q29udHJvbGxlcldQRS5jcHAJKHJldmlzaW9uIDI2Nzg4
NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd3BlL1Rlc3RDb250cm9sbGVyV1BFLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM2LDkgKzEzNiwxMSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpw
bGF0Zm9ybVJlc2V0UHJlZmVyCiB7CiB9CiAKLXZvaWQgVGVzdENvbnRyb2xsZXI6OnVwZGF0ZVBs
YXRmb3JtU3BlY2lmaWNUZXN0T3B0aW9uc0ZvclRlc3QoVGVzdE9wdGlvbnMmIG9wdGlvbnMsIGNv
bnN0IHN0ZDo6c3RyaW5nJikgY29uc3QKK1Rlc3RGZWF0dXJlcyBUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKSBj
b25zdAogewotICAgIG9wdGlvbnMuZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyA9IGZhbHNlOwor
ICAgIFRlc3RGZWF0dXJlcyBmZWF0dXJlczsKKyAgICBmZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5z
ZXJ0KHsgImVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMiLCBmYWxzZSB9KTsKKyAgICByZXR1cm4g
ZmVhdHVyZXM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpJbmRleDogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjY3
ODg1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTggQEAKKzIwMjAtMTAtMDQgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAg
ICAgIFtUZXN0aW5nXSBBZGQgc3VwcG9ydCBmb3IgcGVyLWRpcmVjdG9yeSBvdmVycmlkaW5nIG9m
IHRlc3Rpbmcgb3B0aW9ucyB2aWEgbmV3IFRlc3RPcHRpb25zLnR4dCBmaWxlcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3Mjk3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBkaXJlY3RvcnkgYmFz
ZWQgVGVzdE9wdGlvbnMudHh0IGZpbGVzIHRvIHJlcGxhY2UgaGFyZCBjb2RpbmcgaW4gV2ViS2l0
VGVzdFJ1bm5lcgorICAgICAgICBmb3Igb3B0aW9ucyBvdmVycmlkaW5nLgorCisgICAgICAgICog
ZmFzdC92aWV3cG9ydC9UZXN0T3B0aW9ucy50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2lwYWQvZmFzdC92aWV3cG9ydC9UZXN0T3B0aW9ucy50eHQ6IEFkZGVkLgorICAgICAgICAqIHN2
Zy9XM0MtU1ZHLTEuMS1TRS9UZXN0T3B0aW9ucy50eHQ6IEFkZGVkLgorICAgICAgICAqIHN2Zy9X
M0MtU1ZHLTEuMS9UZXN0T3B0aW9ucy50eHQ6IEFkZGVkLgorCiAyMDIwLTEwLTAyICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgY29kZSBiZWhpbmQgRU5B
QkxFKE1FRElBX1NFU1NJT04pLCBubyBwb3J0cyBlbmFibGUgaXQKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3Qvdmlld3BvcnQvVGVzdE9wdGlvbnMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3Qvdmlld3BvcnQvVGVzdE9wdGlvbnMudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRl
c3RzL2Zhc3Qvdmlld3BvcnQvVGVzdE9wdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEgQEAKK3dlYmtpdC10ZXN0LXJ1bm5lciBbIHVzZUZsZXhpYmxlVmlld3BvcnQ9dHJ1ZSBdCklu
ZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2Nzg4OCkKKysrIExh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNSBAQAorMjAyMC0xMC0wNCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAg
ICAgICAgW1Rlc3RpbmddIEFkZCBzdXBwb3J0IGZvciBwZXItZGlyZWN0b3J5IG92ZXJyaWRpbmcg
b2YgdGVzdGluZyBvcHRpb25zIHZpYSBuZXcgVGVzdE9wdGlvbnMudHh0IGZpbGVzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcyOTcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRzIGRpcmVjdG9yeSBi
YXNlZCBUZXN0T3B0aW9ucy50eHQgZmlsZXMgdG8gcmVwbGFjZSBoYXJkIGNvZGluZyBpbiBXZWJL
aXRUZXN0UnVubmVyCisgICAgICAgIGZvciBvcHRpb25zIG92ZXJyaWRpbmcuCisKKyAgICAgICAg
KiBJbmRleGVkREItcHJpdmF0ZS1icm93c2luZy9UZXN0T3B0aW9ucy50eHQ6IEFkZGVkLgorCiAy
MDIwLTA5LTMwICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgogCiAgICAgICAg
IEFkZCBub24tYW5pbWF0ZWQgc3VwcG9ydCBmb3IgdGhlIENTUyB0cmFuc2xhdGUgcHJvcGVydHkK
SW5kZXg6IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy9JbmRleGVkREItcHJpdmF0ZS1icm93c2lu
Zy9UZXN0T3B0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L0luZGV4ZWREQi1wcml2YXRlLWJyb3dzaW5nL1Rlc3RPcHRpb25zLnR4dAkobm9uZXhpc3RlbnQp
CisrKyBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvSW5kZXhlZERCLXByaXZhdGUtYnJvd3Npbmcv
VGVzdE9wdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtpdC10ZXN0
LXJ1bm5lciBbIHVzZUVwaGVtZXJhbFNlc3Npb249dHJ1ZSBdCkluZGV4OiBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9pcGFkL2Zhc3Qvdmlld3BvcnQvVGVzdE9wdGlvbnMudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3BsYXRmb3JtL2lwYWQvZmFzdC92aWV3cG9ydC9UZXN0T3B0aW9ucy50eHQJ
KG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vaXBhZC9mYXN0L3ZpZXdwb3J0
L1Rlc3RPcHRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3ZWJraXQtdGVz
dC1ydW5uZXIgWyB1c2VGbGV4aWJsZVZpZXdwb3J0PXRydWUgXQpJbmRleDogTGF5b3V0VGVzdHMv
c3ZnL1czQy1TVkctMS4xLVNFL1Rlc3RPcHRpb25zLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9zdmcvVzNDLVNWRy0xLjEtU0UvVGVzdE9wdGlvbnMudHh0CShub25leGlzdGVudCkKKysr
IExheW91dFRlc3RzL3N2Zy9XM0MtU1ZHLTEuMS1TRS9UZXN0T3B0aW9ucy50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSBAQAord2Via2l0LXRlc3QtcnVubmVyIFsgaXNTVkdUZXN0PXRydWUg
XQpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL1czQy1TVkctMS4xL1Rlc3RPcHRpb25zLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvVzNDLVNWRy0xLjEvVGVzdE9wdGlvbnMudHh0CShu
b25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3N2Zy9XM0MtU1ZHLTEuMS9UZXN0T3B0aW9ucy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSBAQAord2Via2l0LXRlc3QtcnVubmVyIFsgaXNT
VkdUZXN0PXRydWUgXQo=
</data>
<flag name="commit-queue"
          id="426419"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410472</attachid>
            <date>2020-10-04 10:36:02 -0700</date>
            <delta_ts>2020-10-04 11:52:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217297-20201004103601.patch</filename>
            <type>text/plain</type>
            <size>103735</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2Nzk0NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE4NCBAQAorMjAyMC0xMC0wNCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgW1Rlc3RpbmddIEFkZCBzdXBwb3J0IGZvciBwZXItZGlyZWN0b3J5IG92ZXJyaWRp
bmcgb2YgdGVzdGluZyBvcHRpb25zIHZpYSBuZXcgVGVzdE9wdGlvbnMudHh0IGZpbGVzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcyOTcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGludHJvZHVj
ZXMgYSBuZXcgY29uY2VwdCBmb3Igd2Via2l0IHRlc3RzICh0aG9zZSB3aXRoaW4gdGhlIExheW91
dFRlc3RzIGRpcmVjdG9yeSkKKyAgICAgICAgdGhhdCBleHRlbmRzIHRoZSBleGlzdGluZyB0ZXN0
LWhlYWRlciBiYXNlZCBjb25maWd1cmF0aW9uIG9mIHRlc3Qgb3B0aW9ucyAodGhvc2UgY29tbWVu
dHMKKyAgICAgICAgYXQgdGhlIHRvcCBvZiBzb21ldCB0ZXN0IGZpbGVzIHRoYXQgbG9vayBsaWtl
ICJ3ZWJraXQtdGVzdC1ydW5uZXIgWyAuLi4gXSIpIHRvIGFsc28gYWxsb3cKKyAgICAgICAgZGly
ZWN0b3J5IHdpZGUgb3ZlcnJpZGluZyBvZiB0ZXN0IG9wdGlvbnMgdmlhIGEgbmV3IFRlc3RPcHRp
b25zLnR4dCBmaWxlLiBUaGVzZSBmaWxlcyBhcmUKKyAgICAgICAgZm9yIG5vdyBleHBlY3RlZCB0
byB1c2UgdGhlIHNhbWUgIndlYmtpdC10ZXN0LXJ1bm5lciBbIC4uLiBdIiBzeW50YXggYXMgdGhl
IHRlc3QtaGVhZGVyIGJhc2VkCisgICAgICAgIG9uZXMgZm9yIGNvbnNpc3RlbmN5IGFuZCBzaW1w
bGljaXR5IG9mIGltcGxlbWVudGF0aW9uLCBidXQgaW4gdGhlIGZ1dHVyZSB3ZSBtYXkgZGVjaWRl
IGl0CisgICAgICAgIG1ha2VzIG1vcmUgc2Vuc2UgdG8gdXRpbGl6ZSB0aGUgYWRkaXRpb25hbCBz
cGFjZS4KKworICAgICAgICBOb3cgdGhhdCB3ZSBoYXZlIGV2ZW4gbW9yZSBzb3VyY2VzIG9mIHRl
c3Qgb3B0aW9ucyBjb21pbmcgaW4sIHdlIG5lZWQgdG8gaGF2ZSBhIGRlZmluZWQgc2V0CisgICAg
ICAgIG9mIHJ1bGVzIGZvciBpbiB3aGljaCBvcmRlciBvcHRpb25zIHRha2UgcHJlY2VkZW5jZS4g
VGhlIG9yZGVyIGlzIChmcm9tIGxlYXN0IHRvIG1vc3QpOgorICAgICAgICAKKyAgICAgICAgLSBH
bG9iYWwgZmVhdHVyZXMgcGFzc2VkIHRvIFdlYktpdFRlc3RSdW5uZXIgdmlhIHRoZSBjb21tYW5k
IGxpbmUgKGUuZy4gLS1zaG93LXRvdWNoZXMpCisgICAgICAgIC0gSGFyZGNvZGVkIGZlYXR1cmVz
IGJhc2VkIG9uIHRoZSBwYXRoIG9mIHRoZSB0ZXN0IGJlaW5nIHJ1biAoaG9wZWZ1bGx5IHdlIGNh
biByZW1vdmUgYWxsIHNvb24pCisgICAgICAgIC0gSGFyZGNvZGVkIHBsYXRmb3JtIHNwZWNpZmlj
IGRlZmF1bHRzIChjdXJyZW50bHkgb25seSB1c2VkIGJ5IG1hY09TIGZvciB1c2VUaHJlYWRlZFNj
cm9sbGluZykuCisgICAgICAgIC0gRmVhdHVyZXMgZnJvbSBUZXN0T3B0aW9ucy50eHQgZmlsZXMs
IHdpdGggdGhlIG1vc3QgZGlyZWN0b3JpZXMgY2xvc2VyIHRvIC4vTGF5b3V0VGVzdHMgdGFrZWlu
ZworICAgICAgICAgIGxlc3MgcHJlY2VkZW5jZSB0aGFuIHRob3NlIGNsb3NlciB0byB0aGUgdGVz
dCBmaWxlIChlLmcuIGFuIG9wdGlvbiBpbiAKKyAgICAgICAgICAuL0xheW91dFRlc3RzL2Zhc3Qv
Zm9ybXMvVGVzdE9wdGlvbnMudHh0IHdpbGwgd2luIG92ZXIgb25lIGluIC4vTGF5b3V0VGVzdHMv
ZmFzdC9UZXN0T3B0aW9ucy50eHQpLgorICAgICAgICAtIEZlYXR1cmVzIGZyb20gdGhlIHRlc3Qg
aGVhZGVycyB3aXRoaW4gdGhlIHRlc3QgaXRzZWxmLgorICAgICAgICAtIEZpbmFsbHksIGEgc2Vj
b25kIGNoYW5jZSBmb3IgbW9yZSBwbGF0Zm9ybSBzcGVjaWZpYyBkZWZhdWx0cyAoY3VycmVubHkg
b25seSB1c2VkIHRoZSBjb2NvYSBwb3J0cworICAgICAgICAgIGZvciBzZXR0aW5nIGVuYWJsZVBy
b2Nlc3NTd2FwT25OYXZpZ2F0aW9uIGFuZCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiBi
YXNlZCBvbiBOU1VzZXJEZWZhdWx0cy4pCisgICAgICAgIAorICAgICAgICBIb3BlZnVsbHkgaW4g
dGhlIGZ1dHVyZSwgd2Ugd2lsbCBiZSBhYmxlIHRvIHNpbXBsaWZ5IHRoYXQgYXMgd2UgcmVtb3Zl
IHNvbWUgb2YgdGhlc2UgbGV2ZWxzLCBwZXJoYXBzCisgICAgICAgIGJ5IGV4dGVuZGluZyBUZXN0
T3B0aW9ucy50eHQgdG8gYmUgYWJsZSB0byBzZXQgcGxhdGZvcm0gc3BlY2ZpYyBvdmVycmlkZXMu
CisKKyAgICAgICAgVG8gbWFrZSB0aGlzIGNoYW5nZSB3b3JrLCBhbmQgcGF2ZSB0aGUgd2F5IGZv
ciBmdXR1cmUgYXV0b2dlbmVyYXRpb24gb2Ygc29tZSBvZiB0aGVzZSB0ZXN0IG9wdGlvbnMsCisg
ICAgICAgIHRoZSBUZXN0T3B0aW9ucyBzdHJ1Y3QgKG5vdyBjbGFzcykgd2FzIG92ZXJoYXVsZWQu
IEluc3RlYWQgb2Ygc3RvcmluZyB0aGUgc3RhdGUgaXRzZWxmLCBpdCBUZXN0T3B0aW9ucworICAg
ICAgICBpcyBub3cgYW4gaW1tdXRhYmxlIG93bmVyIG9mIGEgVGVzdEZlYXR1cmVzIG9iamVjdC4g
VGVzdEZlYXR1cmVzIGlzIGEgc2ltcGxlIHN0cnVjdCB0aGF0IGNvbnRhaW5zIG1hcHMgCisgICAg
ICAgIG9mIG9wdGlvbiBrZXlzIHRvIHZhbHVlcyBhbmQgY2FuIGJlIG1lcmdlZCB3aXRoIG90aGVy
IFRlc3RGZWF0dXJlcyBvYmplY3RzLiBUZXN0T3B0aW9ucyB0YWtlcyBhIAorICAgICAgICBUZXN0
RmVhdHVyZXMgYXQgY29uc3RydWN0aW9uLCBhbmQgZXhwb3NlcyBnZXR0ZXJzIGZvciBhbGwga2V5
cywgYXMgd2VsbCBhcyBkZWZhdWx0cyBmb3Igd2hlbiB0aGV5IGFyZQorICAgICAgICBub3QgaW4g
dGhlIG1hcHMuIEluIGZ1dHVyZSBjaGFuZ2VzLCBJIHdvdWxkIGxpa2UgdG8gcmVtb3ZlIG1hbnkg
b2YgdGhlc2UgKHRoZSBvbmVzIHRoYXQgY29ycmVzcG9uZAorICAgICAgICB3aXRoIFdlYktpdCBw
cmVmZXJlbmNlcyBhbnl3YXkpIGFuZCBoYXZlIHRoZSBrZXlzIGFuZCB2YWx1ZXMgYXV0b21hdGlj
YWxseSBkZWFsdCB3aXRoIGJ5IFdLUHJlZmVyZW5jZXMuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL09wdGlvbnMuY3BwOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5o
OgorICAgICAgICBTd2l0Y2ggdG8gc3RkOjp1bm9yZGVyZWRfbWFwIGZvciBjb25zaXN0ZW5jeSBh
bmQgZWFzZSBvZiBjb252ZXJzaW9uLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9QbGF0
Zm9ybVdlYlZpZXcuaDoKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3Ojp2aWV3U3VwcG9y
dHNPcHRpb25zIGNvbnN0KToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3IFRlc3RPcHRpb25z
IGZ1bmN0aW9ucy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25z
Lmg6CisgICAgICAgIChXVFI6OnRvV0spOgorICAgICAgICAoV1RSOjp0b1dURlN0cmluZyk6Cisg
ICAgICAgIEFkZCBjb252ZXJzaW9ucyBmb3Igc3RkOjpzdHJpbmcuCisKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjppbml0
aWFsaXplKToKKyAgICAgICAgUmVwbGFjZSBzb21lIGJvb2xzIHdpdGggYSBuZXcgZ2xvYmFsIFRl
c3RGZWF0dXJlcyBpbnN0YW5jZSB0aGF0IGZvcm1zIHRoZSBiYXNlIG9mCisgICAgICAgIGFsbCBU
ZXN0RmVhdHVyZXMgbWVyZ2VzLgorICAgICAgICAKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xs
ZXI6OmdlbmVyYXRlQ29udGV4dENvbmZpZ3VyYXRpb24gY29uc3QpOgorICAgICAgICAoV1RSOjpU
ZXN0Q29udHJvbGxlcjo6Z2VuZXJhdGVQYWdlQ29uZmlndXJhdGlvbik6CisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpjcmVhdGVXZWJWaWV3V2l0aE9wdGlvbnMpOgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6ZW5zdXJlVmlld1N1cHBvcnRzT3B0aW9uc0ZvclRlc3QpOgorICAg
ICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRQcmVmZXJlbmNlc1RvQ29uc2lzdGVudFZh
bHVlcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0
ZW50VmFsdWVzKToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3IFRlc3RPcHRpb25zIGZ1bmN0
aW9ucy4KKyAgICAgICAgCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpjcmVhdGVUZXN0
VVJMKToKKyAgICAgICAgRXhwb3NlIGFzIGEgc3RhdGljIG1lbWJlciBmdW5jdGlvbiBvbiBUZXN0
Q29udHJvbGxlciBmb3IgdXNlIGluIG90aGVyIGZpbGVzLgorICAgICAgICAKKyAgICAgICAgKFdU
Ujo6VGVzdENvbnRyb2xsZXI6OnRlc3RPcHRpb25zRm9yVGVzdCBjb25zdCk6CisgICAgICAgIFJl
d29yayB0byBiZSBhIHNlcXVlbmNlIG9mIFRlc3RGZWF0dXJlcyBtZXJnZXMuCisgICAgICAgIAor
ICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6dXBkYXRlV2ViVmlld1NpemVGb3JUZXN0KToK
KyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnVwZGF0ZVdpbmRvd1NjYWxlRm9yVGVzdCk6
CisgICAgICAgIFVwZGF0ZSB0byBjYWxsIG5ldyBUZXN0T3B0aW9ucyBmdW5jdGlvbnMuCisgICAg
ICAgIAorICAgICAgICAoV1RSOjpjcmVhdGVUZXN0VVJMKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Ujo6cGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6
cGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1JlbGF0aXZlUGF0aCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVFI6OnBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNVUkwpOiBEZWxldGVkLgorICAg
ICAgICAoV1RSOjp1cGRhdGVUZXN0T3B0aW9uc0Zyb21UZXN0SGVhZGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRkVGVzdE9wdGlvbnMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICBNb3ZlZCBUZXN0T3B0aW9ucyBwYXJzaW5nIHRvIFRlc3RPcHRp
b25zLmNwcAorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6
CisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpjcmVhdGVUZXN0U2V0dGluZ3NEaWN0aW9u
YXJ5KToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3IFRlc3RPcHRpb25zIGZ1bmN0aW9ucy4K
KworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuaDoKKyAgICAgICAgUmV3
b3JrcyBUZXN0T3B0aW9ucyB0byBiZSBhbiBpbW11dGFibGUgb3duZXIgb2YgYSBUZXN0RmVhdHVy
ZXMgc3RydWN0LCB3aGljaCBpcyBhIHNldAorICAgICAgICBvZiBtYXBzIHRoYXQgbWFwIGZlYXR1
cmUgc3RyaW5nIGtleXMsIHRvIHZhbHVlcyBvZiB0eXBlIGJvb2wsIGRvdWJsZSwgc3RyaW5nIG9y
IHN0cmluZyB2ZWN0b3IuCisgICAgICAgIFJlLXVzZXMgZXhpc3RpbmcgdGVzdCBoZWFkZXIgcGFy
c2luZyBjb2RlIChtb3ZlZCBoZXJlIGZyb20gVGVzdENvbnRyb2xsZXIuY3BwKSB0byBhbHNvCisg
ICAgICAgIHBhcnNlIG5ldyBUZXN0T3B0aW9ucy50eHQgZmlsZXMuCisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5jcHA6CisgICAgICAgIChXVFI6OmR1bXBGZWF0dXJlcyk6
CisgICAgICAgIEhlbHBlciB0byBkdW1wIGZlYXR1cmVzIHRvIHN0ZGVyciwgdXNlZnVsIGZvciBk
ZWJ1Z2dpbmcuCisKKyAgICAgICAgKFdUUjo6a2V5VHlwZSk6CisgICAgICAgIEhlbHBlciBmb3Ig
cGFyc2VyIHRvIGtub3cgd2hpY2ggdmFsdWUgcGFyc2VyIHRvIHVzZS4KKworICAgICAgICAoV1RS
OjpwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUpOgorICAgICAgICAoV1RSOjpwYXJzZVN0cmlu
Z1Rlc3RIZWFkZXJWYWx1ZUFzUmVsYXRpdmVQYXRoKToKKyAgICAgICAgKFdUUjo6cGFyc2VTdHJp
bmdUZXN0SGVhZGVyVmFsdWVBc1VSTCk6CisgICAgICAgIFZhbHVlIHBhcnNlcnMgbW92ZWQgZnJv
bSBUZXN0Q29udHJvbGxlci5jcHAKKworICAgICAgICAoV1RSOjpwYXJzZVRlc3RIZWFkZXIpOgor
ICAgICAgICBIZWFkZXIgcGFyc2VyIG1vdmVkIGZyb20gVGVzdENvbnRyb2xsZXIuY3BwLiBVcGRh
dGUgdG8gbm93IHJldHVybgorICAgICAgICBhIFRlc3RGZWF0dXJlcyBvYmplY3QgYW5kIHVzZSBr
ZXlUeXBlIHRvIHBpY2sgdmFsdWUgcGFyc2VyIHJhdGhlcgorICAgICAgICB0aGFuIGlubGluaW5n
IHRoZSBpZiBzdGF0ZW1lbnRzLgorICAgICAgICAKKyAgICAgICAgKFdUUjo6aGFyZGNvZGVkRmVh
dHVyZXNCYXNlZE9uUGF0aEZvclRlc3QpOgorICAgICAgICAoV1RSOjpzaG91bGRNYWtlVmlld3Bv
cnRGbGV4aWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OnNob3VsZFVzZUZpeGVkTGF5b3V0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6aXNTVkdUZXN0UGF0aCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVFI6OnNob3VsZFVzZUVwaGVtZXJhbFNlc3Npb24pOiBEZWxldGVkLgorICAgICAgICBN
b3ZlZCBmcm9tIHRoZSBUZXN0T3B0aW9ucyBjb250cnVjdG9yIGFuZCByZW1vdmUgY2FzZXMgZm9y
IGZsZXhpYmxlTGF5b3V0LAorICAgICAgICBmaXhlZExheW91dCwgaXNTVkdUZXN0LCBhbmQgdXNl
RXBoZW1lcmFsU2Vzc2lvbiwgd2hpY2ggYXJlIGFsbCBlaXRoZXIgbm93CisgICAgICAgIGhhbmRs
ZWQgYnkgVGVzdE9wdGlvbnMudHh0IGZpbGVzIG9yIGFyZSBubyBsb25nZXIgbmVjZXNzYXJ5Lgor
CisgICAgICAgIChXVFI6Om1lcmdlKToKKyAgICAgICAgTWVyZ2VzIHR3byBUZXN0RmVhdHVyZXMg
b2JqZWN0cy4gSWYgYm90aCBjb250YWluIHRoZSBzYW1lIGtleSwgdGhlICdhZGRpdGlvbmFsJwor
ICAgICAgICBUZXN0RmVhdHVyZXMgb3ZlcnJpZGVzIHRoZSAnYmFzZScgVGVzdEZlYXR1cmVzLgor
CisgICAgICAgIChXVFI6OmZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0T3B0aW9uc0ZpbGVzRm9yVGVz
dCk6CisgICAgICAgIENyZWF0ZXMgYSBUZXN0RmVhdHVyZXMgb2JqZWN0IGJ5IGl0ZXJhdGluZyBh
bGwgdGhlIHN1YmRpcmVjdG9yaWVzIGZyb20gTGF5b3V0VGVzdHMKKyAgICAgICAgdG8gdGhlIGN1
cnJlbnQgdGVzdHMgZGlyZWN0b3J5LCBsb29raW5nIGZvciBUZXN0T3B0aW9ucy50eHQgZmlsZXMg
YW5kIG1lcmdpbmcKKyAgICAgICAgdGhlbSB0b2dldGhlci4KKworICAgICAgICAoV1RSOjpmZWF0
dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3QpOgorICAgICAgICBDcmVhdGVzIGEgVGVz
dEZlYXR1cmVzIGZvciB0aGUgdGVzdCBoZWFkZXJzIG9mIHRoZSBjdXJyZW50IHRlc3QuCisKKyAg
ICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW06Cisg
ICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZU92ZXJy
aWRlc0RlZmF1bHRzRm9yVGVzdCBjb25zdCk6CisgICAgICAgIFJld29ya2VkIHRvIG5vdyByZXR1
cm4gYSBUZXN0RmVhdHVyZXMgb2JqZWN0IHRoYXQgd2lsbCBiZSBtZXJnZWQsIHJhdGhlciB0aGFu
IHVwZGF0aW5nCisgICAgICAgIGEgVGVzdE9wdGlvbnMuIE1vdmVzIGVuYWJsZUluQXBwQnJvd3Nl
clByaXZhY3kgd29yayB0byBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1XaWxsUnVuVGVzdAorICAg
ICAgICB3aGVyZSBpdCBpcyBtb3JlIGFwcHJvcHJpYXRlLgorCisgICAgICAgIChXVFI6OlRlc3RD
b250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemVEYXRhU3RvcmUpOgorICAgICAgICAoV1RSOjpU
ZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1DcmVhdGVXZWJWaWV3KToKKyAgICAgICAgKFdUUjo6VGVz
dENvbnRyb2xsZXI6OmZpbmlzaENyZWF0aW5nUGxhdGZvcm1XZWJWaWV3KToKKyAgICAgICAgKFdU
Ujo6VGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcik6CisgICAg
ICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpjb2NvYVJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1
ZXMpOgorICAgICAgICAoV1RSOjpjb250ZW50TW9kZSk6CisgICAgICAgIFVwZGF0ZSB0byBjYWxs
IG5ldyBUZXN0T3B0aW9ucyBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6
OnBsYXRmb3JtUmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6CisgICAgICAgIChXVFI6OlRl
c3RDb250cm9sbGVyOjpwbGF0Zm9ybUNvbmZpZ3VyZVZpZXdGb3JUZXN0KToKKyAgICAgICAgVXBk
YXRlIHRvIGNhbGwgbmV3IFRlc3RPcHRpb25zIGZ1bmN0aW9ucy4KKyAgICAgICAgCisgICAgICAg
IChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1bHRzRm9y
VGVzdCBjb25zdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1cGRhdGVQbGF0Zm9y
bVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgTW92
ZWQgR2VuZXJhdGVkVG91Y2hlc0RlYnVnV2luZG93IHdvcmsgdG8gVGVzdENvbnRyb2xsZXI6OnBs
YXRmb3JtQ29uZmlndXJlVmlld0ZvclRlc3QKKyAgICAgICAgd2hlcmUgaXQgaXMgbW9yZSBhcHBy
b3ByaWF0ZSBhbmQgcmVtb3ZlZCBzaG91bGRTaG93VG91Y2hlcyBzZXR0aW5nIGFzIHRoYXQgaXMg
ZG9uZQorICAgICAgICBnbG9iYWxseSBub3cuIAorICAgICAgICAKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL21hYy9QbGF0Zm9ybVdlYlZpZXdNYWMubW06CisgICAgICAgIChXVFI6OlBsYXRm
b3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3
IFRlc3RPcHRpb25zIGZ1bmN0aW9ucy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvbWFj
L1Rlc3RDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QgY29uc3QpOgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9yVGVz
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIFJlbW92ZSBzaG91bGRVc2VSZW1vdGVMYXllclRy
ZWUgYW5kIHNob3VsZFNob3dXZWJWaWV3LCBhcyB0aG9zZSBhcmUgbm93IGRvbmUgZ2xvYmFsbHks
CisgICAgICAgIGFuZCByZS1pbXBsZW1lbnRlZCB1c2VUaHJlYWRlZFNjcm9sbGluZyB0byB1c2Ug
Ym9vbEZlYXR1cmVzLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci93aW4vVGVzdENvbnRy
b2xsZXJXaW4uY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1TcGVj
aWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QgY29uc3QpOgorICAgICAgICAoV1RSOjpUZXN0Q29u
dHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9yVGVzdCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIFVwZGF0ZWQgZm9yIG5ldyBzaWduYXR1cmUuCisKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL3dwZS9UZXN0Q29udHJvbGxlcldQRS5jcHA6CisgICAgICAgIChX
VFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1bHRzRm9yVGVz
dCBjb25zdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1cGRhdGVQbGF0Zm9ybVNw
ZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgVXBkYXRl
ZCBmb3IgbmV3IHNpZ25hdHVyZS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvZ3RrL1Rl
c3RDb250cm9sbGVyR1RLLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnBsYXRm
b3JtU3BlY2lmaWNGZWF0dXJlRGVmYXVsdHNGb3JUZXN0IGNvbnN0KToKKyAgICAgICAgKFdUUjo6
VGVzdENvbnRyb2xsZXI6OnVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNUZXN0T3B0aW9uc0ZvclRlc3Qg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICBVcGRhdGVkIGZvciBuZXcgc2lnbmF0dXJlLgorCiAy
MDIwLTEwLTAzICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgQWRkIGV4dHJhIHNsYXNoIGFmdGVyIGVtcHR5IGhvc3QgY29waWVkIGZyb20gYmFz
ZSBVUkwgaWYgcGF0aCBpcyBhbHNvIGVtcHR5CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVy
L09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvT3B0aW9u
cy5jcHAJKHJldmlzaW9uIDI2Nzg4NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvT3B0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCBzdGF0aWMgYm9vbCBoYW5k
bGVPcHRpb25BbGxvd2VkSG9zdChPcHRpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBi
b29sIHBhcnNlRmVhdHVyZShTdHJpbmcgZmVhdHVyZVN0cmluZywgSGFzaE1hcDxTdHJpbmcsIGJv
b2w+JiBmZWF0dXJlcykKK3N0YXRpYyBib29sIHBhcnNlRmVhdHVyZShTdHJpbmcgZmVhdHVyZVN0
cmluZywgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29sPiYgZmVhdHVyZXMpCiB7
CiAgICAgYXV0byBzdHJpbmdzID0gZmVhdHVyZVN0cmluZy5zcGxpdCgnPScpOwogICAgIGlmIChz
dHJpbmdzLmlzRW1wdHkoKSB8fCBzdHJpbmdzLnNpemUoKSA+IDIpCkBAIC0xMjIsNyArMTIyLDcg
QEAgc3RhdGljIGJvb2wgcGFyc2VGZWF0dXJlKFN0cmluZyBmZWF0dXJlUwogICAgIGF1dG8gZmVh
dHVyZU5hbWUgPSBzdHJpbmdzWzBdOwogICAgIGJvb2wgZW5hYmxlZCA9IHN0cmluZ3Muc2l6ZSgp
ID09IDEgfHwgc3RyaW5nc1sxXSA9PSAidHJ1ZSI7CiAKLSAgICBmZWF0dXJlcy5zZXQoZmVhdHVy
ZU5hbWUsIGVuYWJsZWQpOworICAgIGZlYXR1cmVzLmluc2VydCh7IGZlYXR1cmVOYW1lLnV0Zjgo
KS5kYXRhKCksIGVuYWJsZWQgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvT3B0aW9ucy5oCShyZXZpc2lvbiAyNjc4ODUpCisrKyBUb29scy9XZWJLaXRUZXN0
UnVubmVyL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEsOCBAQAogI2luY2x1
ZGUgPHNldD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRl
IDx1bm9yZGVyZWRfbWFwPgogI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdI
YXNoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC01Nyw4ICs1Nyw4IEBA
IHN0cnVjdCBPcHRpb25zIHsKICNlbmRpZgogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBw
YXRoczsKICAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gYWxsb3dlZEhvc3RzOwotICAgIEhhc2hN
YXA8U3RyaW5nLCBib29sPiBpbnRlcm5hbEZlYXR1cmVzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBi
b29sPiBleHBlcmltZW50YWxGZWF0dXJlczsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpz
dHJpbmcsIGJvb2w+IGludGVybmFsRmVhdHVyZXM7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0
ZDo6c3RyaW5nLCBib29sPiBleHBlcmltZW50YWxGZWF0dXJlczsKIH07CiAKIGNsYXNzIE9wdGlv
biB7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgJKHJldmlz
aW9uIDI2Nzg4NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1v
dmVGcm9tV2luZG93KCk7CiAgICAgdm9pZCBhZGRUb1dpbmRvdygpOwogCi0gICAgYm9vbCB2aWV3
U3VwcG9ydHNPcHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKSBjb25zdCB7IHJldHVy
biAhb3B0aW9ucy5ydW5TaW5nbHkgJiYgbV9vcHRpb25zLmhhc1NhbWVJbml0aWFsaXphdGlvbk9w
dGlvbnMob3B0aW9ucyk7IH0KKyAgICBib29sIHZpZXdTdXBwb3J0c09wdGlvbnMoY29uc3QgVGVz
dE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0IHsgcmV0dXJuICFvcHRpb25zLnJ1blNpbmdseSgpICYm
IG1fb3B0aW9ucy5oYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25zKG9wdGlvbnMpOyB9CiAKICAg
ICBQbGF0Zm9ybUltYWdlIHdpbmRvd1NuYXBzaG90SW1hZ2UoKTsKICAgICBjb25zdCBUZXN0T3B0
aW9ucyYgb3B0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW9uczsgfQpJbmRleDogVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oCShyZXZpc2lvbiAyNjc4ODUpCisrKyBU
b29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8V2ViS2l0L1dLU3RyaW5nUHJpdmF0ZS5oPgogI2lu
Y2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KICNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAj
aW5jbHVkZSA8d3RmL1VuaXF1ZUFycmF5Lmg+CkBAIC01OSw2ICs2MCwxMSBAQCBpbmxpbmUgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvV0soY29uCiAgICAgcmV0dXJuIGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RyaW5nKSk7CiB9CiAKK2lubGluZSBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gdG9XSyhjb25zdCBzdGQ6OnN0cmluZyYgc3RyaW5nKQoreworICAgIHJl
dHVybiB0b1dLKHN0cmluZy5jX3N0cigpKTsKK30KKwogaW5saW5lIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiB0b1dLKGNvbnN0IFdURjo6U3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgcmV0dXJuIHRv
V0soc3RyaW5nLnV0ZjgoKS5kYXRhKCkpOwpAQCAtMTE0LDYgKzEyMCwxMSBAQCBpbmxpbmUgV1RG
OjpTdHJpbmcgdG9XVEZTdHJpbmcoY29uc3QgSlNSCiAgICAgcmV0dXJuIHRvV1RGU3RyaW5nKHN0
cmluZy5nZXQoKSk7CiB9CiAKK2lubGluZSBXVEY6OlN0cmluZyB0b1dURlN0cmluZyhjb25zdCBz
dGQ6OnN0cmluZyYgc3RyaW5nKQoreworICAgIHJldHVybiBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
c3RyaW5nLmNfc3RyKCkpOworfQorCiBpbmxpbmUgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRv
V0tTdHJpbmcoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCiB7CiAgICAg
cmV0dXJuIHRvV0soY3JlYXRlSlNTdHJpbmcoY29udGV4dCwgdmFsdWUpLmdldCgpKTsKQEAgLTEy
NSw0ICsxMzYsMjQgQEAgaW5saW5lIFdURjo6U3RyaW5nIHRvV1RGU3RyaW5nKEpTQ29udGV4dAog
ICAgIHJldHVybiB0b1dURlN0cmluZyhjcmVhdGVKU1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpOwog
fQogCitpbmxpbmUgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHNwbGl0KGNvbnN0IHN0ZDo6c3Ry
aW5nJiBzdHJpbmcsIGNoYXIgZGVsaW1pdGVyKQoreworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3Ry
aW5nPiByZXN1bHQ7CisKKyAgICBzaXplX3QgaSA9IDA7CisgICAgd2hpbGUgKGkgPCBzdHJpbmcu
c2l6ZSgpKSB7CisgICAgICAgIGF1dG8gZm91bmRJbmRleCA9IHN0cmluZy5maW5kX2ZpcnN0X29m
KGRlbGltaXRlciwgaSk7CisKKyAgICAgICAgaWYgKGZvdW5kSW5kZXggIT0gaSkKKyAgICAgICAg
ICAgIHJlc3VsdC5wdXNoX2JhY2soc3RyaW5nLnN1YnN0cihpLCBmb3VuZEluZGV4IC0gaSkpOwor
CisgICAgICAgIGlmIChmb3VuZEluZGV4ID09IHN0ZDo6c3RyaW5nX3ZpZXc6Om5wb3MpCisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBpID0gZm91bmRJbmRleCArIDE7CisgICAgfQorCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RSCkluZGV4OiBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjY3ODg1KQorKysg
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ2OSwxNSArNDY5LDE3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemUoaW50
IGFyZ2MKICAgICBtX3Nob3VsZER1bXBQaXhlbHNGb3JBbGxUZXN0cyA9IG9wdGlvbnMuc2hvdWxk
RHVtcFBpeGVsc0ZvckFsbFRlc3RzOwogICAgIG1fZm9yY2VDb21wbGV4VGV4dCA9IG9wdGlvbnMu
Zm9yY2VDb21wbGV4VGV4dDsKICAgICBtX3Nob3VsZFVzZUFjY2VsZXJhdGVkRHJhd2luZyA9IG9w
dGlvbnMuc2hvdWxkVXNlQWNjZWxlcmF0ZWREcmF3aW5nOwotICAgIG1fc2hvdWxkVXNlUmVtb3Rl
TGF5ZXJUcmVlID0gb3B0aW9ucy5zaG91bGRVc2VSZW1vdGVMYXllclRyZWU7CiAgICAgbV9wYXRo
cyA9IG9wdGlvbnMucGF0aHM7CiAgICAgbV9hbGxvd2VkSG9zdHMgPSBvcHRpb25zLmFsbG93ZWRI
b3N0czsKLSAgICBtX3Nob3VsZFNob3dXZWJWaWV3ID0gb3B0aW9ucy5zaG91bGRTaG93V2ViVmll
dzsKLSAgICBtX3Nob3VsZFNob3dUb3VjaGVzID0gb3B0aW9ucy5zaG91bGRTaG93VG91Y2hlczsK
ICAgICBtX2NoZWNrRm9yV29ybGRMZWFrcyA9IG9wdGlvbnMuY2hlY2tGb3JXb3JsZExlYWtzOwog
ICAgIG1fYWxsb3dBbnlIVFRQU0NlcnRpZmljYXRlRm9yQWxsb3dlZEhvc3RzID0gb3B0aW9ucy5h
bGxvd0FueUhUVFBTQ2VydGlmaWNhdGVGb3JBbGxvd2VkSG9zdHM7Ci0gICAgbV9pbnRlcm5hbEZl
YXR1cmVzID0gb3B0aW9ucy5pbnRlcm5hbEZlYXR1cmVzOwotICAgIG1fZXhwZXJpbWVudGFsRmVh
dHVyZXMgPSBvcHRpb25zLmV4cGVyaW1lbnRhbEZlYXR1cmVzOworICAgIAorICAgIG1fZ2xvYmFs
RmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzID0gb3B0aW9ucy5pbnRlcm5hbEZlYXR1cmVz
OworICAgIG1fZ2xvYmFsRmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMgPSBvcHRpb25zLmV4
cGVyaW1lbnRhbEZlYXR1cmVzOworICAgIG1fZ2xvYmFsRmVhdHVyZXMuYm9vbEZlYXR1cmVzLmlu
c2VydCh7ICJ1c2VSZW1vdGVMYXllclRyZWUiLCBvcHRpb25zLnNob3VsZFVzZVJlbW90ZUxheWVy
VHJlZSB9KTsKKyAgICBtX2dsb2JhbEZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAic2hv
dWxkU2hvd1dlYlZpZXciLCBvcHRpb25zLnNob3VsZFNob3dXZWJWaWV3IH0pOworICAgIG1fZ2xv
YmFsRmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJzaG91bGRTaG93VG91Y2hlcyIsIG9w
dGlvbnMuc2hvdWxkU2hvd1RvdWNoZXMgfSk7CisKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9J
U09MQVRFRF9UUkVFKQogICAgIG1fYWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1vZGUgPSBvcHRp
b25zLmFjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVNb2RlOwogI2VuZGlmCkBAIC00OTksNyArNTAx
LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZShpbnQgYXJnYwogICAgIG1fZXZl
bnRTZW5kZXJQcm94eSA9IG1ha2VVbmlxdWU8RXZlbnRTZW5kZXJQcm94eT4odGhpcyk7CiB9CiAK
LVdLUmV0YWluUHRyPFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWY+IFRlc3RDb250cm9sbGVyOjpn
ZW5lcmF0ZUNvbnRleHRDb25maWd1cmF0aW9uKGNvbnN0IFRlc3RPcHRpb25zOjpDb250ZXh0T3B0
aW9ucyYgb3B0aW9ucykgY29uc3QKK1dLUmV0YWluUHRyPFdLQ29udGV4dENvbmZpZ3VyYXRpb25S
ZWY+IFRlc3RDb250cm9sbGVyOjpnZW5lcmF0ZUNvbnRleHRDb25maWd1cmF0aW9uKGNvbnN0IENv
bnRleHRPcHRpb25zJiBvcHRpb25zKSBjb25zdAogewogICAgIGF1dG8gY29uZmlndXJhdGlvbiA9
IGFkb3B0V0soV0tDb250ZXh0Q29uZmlndXJhdGlvbkNyZWF0ZSgpKTsKICAgICBXS0NvbnRleHRD
b25maWd1cmF0aW9uU2V0SW5qZWN0ZWRCdW5kbGVQYXRoKGNvbmZpZ3VyYXRpb24uZ2V0KCksIGlu
amVjdGVkQnVuZGxlUGF0aCgpKTsKQEAgLTU2MiwxMCArNTY0LDExIEBAIFdLV2Vic2l0ZURhdGFT
dG9yZVJlZiBUZXN0Q29udHJvbGxlcjo6d2UKIAogV0tSZXRhaW5QdHI8V0tQYWdlQ29uZmlndXJh
dGlvblJlZj4gVGVzdENvbnRyb2xsZXI6OmdlbmVyYXRlUGFnZUNvbmZpZ3VyYXRpb24oY29uc3Qg
VGVzdE9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKCFtX2NvbnRleHQgfHwgIW1fY29udGV4
dE9wdGlvbnMtPmhhc1NhbWVJbml0aWFsaXphdGlvbk9wdGlvbnMob3B0aW9ucy5jb250ZXh0T3B0
aW9ucykpIHsKLSAgICAgICAgYXV0byBjb250ZXh0Q29uZmlndXJhdGlvbiA9IGdlbmVyYXRlQ29u
dGV4dENvbmZpZ3VyYXRpb24ob3B0aW9ucy5jb250ZXh0T3B0aW9ucyk7CisgICAgYXV0byBjb250
ZXh0T3B0aW9ucyA9IG9wdGlvbnMuY29udGV4dE9wdGlvbnMoKTsKKyAgICBpZiAoIW1fY29udGV4
dCB8fCAhbV9jb250ZXh0T3B0aW9ucy0+aGFzU2FtZUluaXRpYWxpemF0aW9uT3B0aW9ucyhjb250
ZXh0T3B0aW9ucykpIHsKKyAgICAgICAgYXV0byBjb250ZXh0Q29uZmlndXJhdGlvbiA9IGdlbmVy
YXRlQ29udGV4dENvbmZpZ3VyYXRpb24oY29udGV4dE9wdGlvbnMpOwogICAgICAgICBtX2NvbnRl
eHQgPSBwbGF0Zm9ybUFkanVzdENvbnRleHQoYWRvcHRXSyhXS0NvbnRleHRDcmVhdGVXaXRoQ29u
ZmlndXJhdGlvbihjb250ZXh0Q29uZmlndXJhdGlvbi5nZXQoKSkpLmdldCgpLCBjb250ZXh0Q29u
ZmlndXJhdGlvbi5nZXQoKSk7Ci0gICAgICAgIG1fY29udGV4dE9wdGlvbnMgPSBvcHRpb25zLmNv
bnRleHRPcHRpb25zOworICAgICAgICBtX2NvbnRleHRPcHRpb25zID0gY29udGV4dE9wdGlvbnM7
CiAKICAgICAgICAgbV9nZW9sb2NhdGlvblByb3ZpZGVyID0gbWFrZVVuaXF1ZTxHZW9sb2NhdGlv
blByb3ZpZGVyTW9jaz4obV9jb250ZXh0LmdldCgpKTsKIApAQCAtNjI3LDcgKzYzMCw3IEBAIFdL
UmV0YWluUHRyPFdLUGFnZUNvbmZpZ3VyYXRpb25SZWY+IFRlc3QKICAgICBXS1BhZ2VDb25maWd1
cmF0aW9uU2V0Q29udGV4dChwYWdlQ29uZmlndXJhdGlvbi5nZXQoKSwgbV9jb250ZXh0LmdldCgp
KTsKICAgICBXS1BhZ2VDb25maWd1cmF0aW9uU2V0UGFnZUdyb3VwKHBhZ2VDb25maWd1cmF0aW9u
LmdldCgpLCBtX3BhZ2VHcm91cC5nZXQoKSk7CiAgICAgCi0gICAgaWYgKG9wdGlvbnMudXNlRXBo
ZW1lcmFsU2Vzc2lvbikgeworICAgIGlmIChvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24oKSkg
ewogICAgICAgICBhdXRvIGVwaGVtZXJhbERhdGFTdG9yZSA9IGFkb3B0V0soV0tXZWJzaXRlRGF0
YVN0b3JlQ3JlYXRlTm9uUGVyc2lzdGVudERhdGFTdG9yZSgpKTsKICAgICAgICAgV0tQYWdlQ29u
ZmlndXJhdGlvblNldFdlYnNpdGVEYXRhU3RvcmUocGFnZUNvbmZpZ3VyYXRpb24uZ2V0KCksIGVw
aGVtZXJhbERhdGFTdG9yZS5nZXQoKSk7CiAgICAgfQpAQCAtNjM5LDExICs2NDIsMTIgQEAgV0tS
ZXRhaW5QdHI8V0tQYWdlQ29uZmlndXJhdGlvblJlZj4gVGVzdAogCiB2b2lkIFRlc3RDb250cm9s
bGVyOjpjcmVhdGVXZWJWaWV3V2l0aE9wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMp
CiB7CisgICAgYXV0byBhcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIgPSBvcHRpb25zLmFwcGxp
Y2F0aW9uQnVuZGxlSWRlbnRpZmllcigpOwogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmICgh
b3B0aW9ucy5hcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIuaXNFbXB0eSgpKSB7CisgICAgaWYg
KCFhcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIuZW1wdHkoKSkgewogICAgICAgICAvLyBUaGUg
YnVuZGxlIGlkZW50aWZpZXIgY2FuIG9ubHkgYmUgc2V0IG9uY2UgcGVyIHRlc3QsIGFuZCBpcyBj
bGVhcmVkIGJldHdlZW4gdGVzdHMuCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2hhc1NldEFw
cGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcik7Ci0gICAgICAgIHNldEFwcGxpY2F0aW9uQnVuZGxl
SWRlbnRpZmllcihvcHRpb25zLmFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcik7CisgICAgICAg
IHNldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcihhcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZp
ZXIpOwogICAgICAgICBtX2hhc1NldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllciA9IHRydWU7
CiAgICAgfQogI2VuZGlmCkBAIC02ODYsNyArNjkwLDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6
Y3JlYXRlV2ViVmlld1dpdGhPcAogICAgICAgICAwLCAvLyBkaWREcmF3CiAgICAgICAgIDAsIC8v
IHBhZ2VEaWRTY3JvbGwKICAgICAgICAgMCwgLy8gZXhjZWVkZWREYXRhYmFzZVF1b3RhLAotICAg
ICAgICBvcHRpb25zLnNob3VsZEhhbmRsZVJ1bk9wZW5QYW5lbCA/IHJ1bk9wZW5QYW5lbCA6IDAs
CisgICAgICAgIG9wdGlvbnMuc2hvdWxkSGFuZGxlUnVuT3BlblBhbmVsKCkgPyBydW5PcGVuUGFu
ZWwgOiAwLAogICAgICAgICBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0LAogICAgICAgICAwLCAvLyBoZWFkZXJIZWlnaHQKICAgICAgICAgMCwgLy8gZm9vdGVySGVp
Z2h0CkBAIC03OTUsOSArNzk5LDkgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6Y3JlYXRlV2ViVmll
d1dpdGhPcAogICAgIC8vIHNvbWV0aGluZyBlbHNlIGZvciBzcGVjaWZpYyB0ZXN0cyB0aGF0IG5l
ZWQgdG8gcnVuIGF0IGEgZGlmZmVyZW50IHdpbmRvdyBzY2FsZS4KICAgICBtX21haW5XZWJWaWV3
LT5jaGFuZ2VXaW5kb3dTY2FsZUlmTmVlZGVkKDEpOwogICAgIAotICAgIGlmICghb3B0aW9ucy5h
cHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIuaXNFbXB0eSgpKSB7CisgICAgaWYgKCFhcHBsaWNh
dGlvbkJ1bmRsZUlkZW50aWZpZXIuZW1wdHkoKSkgewogICAgICAgICByZWluaXRpYWxpemVBcHBC
b3VuZERvbWFpbnMoKTsKLSAgICAgICAgdXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1By
b2Nlc3Mob3B0aW9ucy5hcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIpOworICAgICAgICB1cGRh
dGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2VzcyhhcHBsaWNhdGlvbkJ1bmRsZUlkZW50
aWZpZXIpOwogICAgIH0KIH0KIApAQCAtODA5LDcgKzgxMyw3IEBAIHZvaWQgVGVzdENvbnRyb2xs
ZXI6OmVuc3VyZVZpZXdTdXBwb3J0c08KICAgICAgICAgLy8gSGF2aW5nIGNyZWF0ZWQgYW5vdGhl
ciBwYWdlICh2aWEgd2luZG93Lm9wZW4oKSkgcHJldmVudHMgcHJvY2VzcyBzd2FwcGluZyBvbiBu
YXZpZ2F0aW9uIGFuZCBpdCBtYXkgdGhlcmVmb3JlCiAgICAgICAgIC8vIGNhdXNlIGZsYWtpbmVz
cyB0byByZXVzZSB0aGUgdmlldy4gV2Ugc2hvdWxkIGFsc28gYWx3YXlzIG1ha2UgYSBuZXcgdmll
dyBpZiB0aGUgdGVzdCBpcyBtYXJrZWQgYXMgYXBwLWJvdW5kLCBiZWNhdXNlCiAgICAgICAgIC8v
IHRoZSB2aWV3IGNvbmZpZ3VyYXRpb24gbXVzdCBjaGFuZ2UuCi0gICAgICAgIGlmICghbV9jcmVh
dGVkT3RoZXJQYWdlICYmIG1fbWFpbldlYlZpZXctPnZpZXdTdXBwb3J0c09wdGlvbnMob3B0aW9u
cykgJiYgIW9wdGlvbnMuaXNBcHBCb3VuZFdlYlZpZXcpCisgICAgICAgIGlmICghbV9jcmVhdGVk
T3RoZXJQYWdlICYmIG1fbWFpbldlYlZpZXctPnZpZXdTdXBwb3J0c09wdGlvbnMob3B0aW9ucykg
JiYgIW9wdGlvbnMuaXNBcHBCb3VuZFdlYlZpZXcoKSkKICAgICAgICAgICAgIHJldHVybjsKIAog
ICAgICAgICB3aWxsRGVzdHJveVdlYlZpZXcoKTsKQEAgLTgzNiw4ICs4NDAsOCBAQCB2b2lkIFRl
c3RDb250cm9sbGVyOjpyZXNldFByZWZlcmVuY2VzVG9DCiAgICAgV0tQcmVmZXJlbmNlc1Jlc2V0
VGVzdFJ1bm5lck92ZXJyaWRlcyhwcmVmZXJlbmNlcyk7CiAKICAgICBXS1ByZWZlcmVuY2VzRW5h
YmxlQWxsRXhwZXJpbWVudGFsRmVhdHVyZXMocHJlZmVyZW5jZXMpOwotICAgIGZvciAoY29uc3Qg
YXV0byYgZXhwZXJpbWVudGFsRmVhdHVyZSA6IG9wdGlvbnMuZXhwZXJpbWVudGFsRmVhdHVyZXMp
Ci0gICAgICAgIFdLUHJlZmVyZW5jZXNTZXRFeHBlcmltZW50YWxGZWF0dXJlRm9yS2V5KHByZWZl
cmVuY2VzLCBleHBlcmltZW50YWxGZWF0dXJlLnZhbHVlLCB0b1dLKGV4cGVyaW1lbnRhbEZlYXR1
cmUua2V5KS5nZXQoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBba2V5LCB2YWx1ZV0gOiBvcHRp
b25zLmV4cGVyaW1lbnRhbEZlYXR1cmVzKCkpCisgICAgICAgIFdLUHJlZmVyZW5jZXNTZXRFeHBl
cmltZW50YWxGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB2YWx1ZSwgdG9XSyhrZXkpLmdldCgp
KTsKIAogICAgIFdLUHJlZmVyZW5jZXNSZXNldEFsbEludGVybmFsRGVidWdGZWF0dXJlcyhwcmVm
ZXJlbmNlcyk7CiAKQEAgLTg2MiwxNyArODY2LDE3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJl
c2V0UHJlZmVyZW5jZXNUb0MKICAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1
cmVGb3JLZXkocHJlZmVyZW5jZXMsIHRydWUsIHRvV0soIklucHV0VHlwZVdlZWtFbmFibGVkIiku
Z2V0KCkpOwogI2VuZGlmCiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGludGVybmFsRGVidWdGZWF0
dXJlIDogb3B0aW9ucy5pbnRlcm5hbERlYnVnRmVhdHVyZXMpCi0gICAgICAgIFdLUHJlZmVyZW5j
ZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgaW50ZXJuYWxEZWJ1
Z0ZlYXR1cmUudmFsdWUsIHRvV0soaW50ZXJuYWxEZWJ1Z0ZlYXR1cmUua2V5KS5nZXQoKSk7Cisg
ICAgZm9yIChjb25zdCBhdXRvJiBba2V5LCB2YWx1ZV0gIDogb3B0aW9ucy5pbnRlcm5hbERlYnVn
RmVhdHVyZXMoKSkKKyAgICAgICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJl
Rm9yS2V5KHByZWZlcmVuY2VzLCB2YWx1ZSwgdG9XSyhrZXkpLmdldCgpKTsKIAogI2lmIFBMQVRG
T1JNKENPQ09BKQotICAgIFdLUHJlZmVyZW5jZXNTZXRDYXB0dXJlVmlkZW9JblVJUHJvY2Vzc0Vu
YWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nlc3Mp
OwotICAgIFdLUHJlZmVyZW5jZXNTZXRDYXB0dXJlVmlkZW9JbkdQVVByb2Nlc3NFbmFibGVkKHBy
ZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2Vzcyk7Ci0gICAg
V0tQcmVmZXJlbmNlc1NldENhcHR1cmVBdWRpb0luVUlQcm9jZXNzRW5hYmxlZChwcmVmZXJlbmNl
cywgb3B0aW9ucy5lbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2Vzcyk7Ci0gICAgV0tQcmVmZXJl
bmNlc1NldENhcHR1cmVBdWRpb0luR1BVUHJvY2Vzc0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlv
bnMuZW5hYmxlQ2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0
Q2FwdHVyZVZpZGVvSW5VSVByb2Nlc3NFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJs
ZUNhcHR1cmVWaWRlb0luVUlQcm9jZXNzKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRDYXB0dXJl
VmlkZW9JbkdQVVByb2Nlc3NFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUNhcHR1
cmVWaWRlb0luR1BVUHJvY2VzcygpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0Q2FwdHVyZUF1ZGlv
SW5VSVByb2Nlc3NFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUNhcHR1cmVBdWRp
b0luVUlQcm9jZXNzKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRDYXB0dXJlQXVkaW9JbkdQVVBy
b2Nlc3NFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUNhcHR1cmVBdWRpb0luR1BV
UHJvY2VzcygpKTsKICNlbmRpZgotICAgIFdLUHJlZmVyZW5jZXNTZXRQcm9jZXNzU3dhcE9uTmF2
aWdhdGlvbkVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuY29udGV4dE9wdGlvbnMuc2hvdWxk
RW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24oKSk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldFBh
Z2VWaXNpYmlsaXR5QmFzZWRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHByZWZlcmVuY2VzLCBv
cHRpb25zLmVuYWJsZUFwcE5hcCk7CisgICAgV0tQcmVmZXJlbmNlc1NldFByb2Nlc3NTd2FwT25O
YXZpZ2F0aW9uRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5jb250ZXh0T3B0aW9ucygpLnNo
b3VsZEVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uKCkpOworICAgIFdLUHJlZmVyZW5jZXNT
ZXRQYWdlVmlzaWJpbGl0eUJhc2VkUHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChwcmVmZXJlbmNl
cywgb3B0aW9ucy5lbmFibGVBcHBOYXAoKSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldE9mZmxpbmVX
ZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZChwcmVmZXJlbmNlcywgdHJ1ZSk7CiAgICAgV0tQcmVm
ZXJlbmNlc1NldFN1YnBpeGVsQW50aWFsaWFzZWRMYXllclRleHRFbmFibGVkKHByZWZlcmVuY2Vz
LCBmYWxzZSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldFhTU0F1ZGl0b3JFbmFibGVkKHByZWZlcmVu
Y2VzLCBmYWxzZSk7CkBAIC04ODMsMTAgKzg4NywxMCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpy
ZXNldFByZWZlcmVuY2VzVG9DCiAgICAgV0tQcmVmZXJlbmNlc1NldEphdmFTY3JpcHRSdW50aW1l
RmxhZ3MocHJlZmVyZW5jZXMsIGtXS0phdmFTY3JpcHRSdW50aW1lRmxhZ3NBbGxFbmFibGVkKTsK
ICAgICBXS1ByZWZlcmVuY2VzU2V0SmF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxs
eShwcmVmZXJlbmNlcywgdHJ1ZSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldEphdmFTY3JpcHRDYW5B
Y2Nlc3NDbGlwYm9hcmQocHJlZmVyZW5jZXMsIHRydWUpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRE
T01QYXN0ZUFsbG93ZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZG9tUGFzdGVBbGxvd2VkKTsKKyAg
ICBXS1ByZWZlcmVuY2VzU2V0RE9NUGFzdGVBbGxvd2VkKHByZWZlcmVuY2VzLCBvcHRpb25zLmRv
bVBhc3RlQWxsb3dlZCgpKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0VW5pdmVyc2FsQWNjZXNzRnJv
bUZpbGVVUkxzQWxsb3dlZChwcmVmZXJlbmNlcywgdHJ1ZSk7CiAgICAgV0tQcmVmZXJlbmNlc1Nl
dEZpbGVBY2Nlc3NGcm9tRmlsZVVSTHNBbGxvd2VkKHByZWZlcmVuY2VzLCB0cnVlKTsKLSAgICBX
S1ByZWZlcmVuY2VzU2V0VG9wTmF2aWdhdGlvblRvRGF0YVVSTHNBbGxvd2VkKHByZWZlcmVuY2Vz
LCBvcHRpb25zLmFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMpOworICAgIFdLUHJlZmVyZW5j
ZXNTZXRUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMc0FsbG93ZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMu
YWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcygpKTsKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9B
UEkpCiAgICAgV0tQcmVmZXJlbmNlc1NldEZ1bGxTY3JlZW5FbmFibGVkKHByZWZlcmVuY2VzLCB0
cnVlKTsKICNlbmRpZgpAQCAtODk5LDE4ICs5MDMsMTggQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6
cmVzZXRQcmVmZXJlbmNlc1RvQwogICAgIFdLUHJlZmVyZW5jZXNTZXRDdXN0b21QYXN0ZWJvYXJk
RGF0YUVuYWJsZWQocHJlZmVyZW5jZXMsIHRydWUpOwogICAgIFdLUHJlZmVyZW5jZXNTZXREaWFs
b2dFbGVtZW50RW5hYmxlZChwcmVmZXJlbmNlcywgdHJ1ZSk7CiAKLSAgICBXS1ByZWZlcmVuY2Vz
U2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLnVzZU1vY2tTY3Jv
bGxiYXJzKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0TmVlZHNTaXRlU3BlY2lmaWNRdWlya3MocHJl
ZmVyZW5jZXMsIG9wdGlvbnMubmVlZHNTaXRlU3BlY2lmaWNRdWlya3MpOwotICAgIFdLUHJlZmVy
ZW5jZXNTZXRBdHRhY2htZW50RWxlbWVudEVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5h
YmxlQXR0YWNobWVudEVsZW1lbnQpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRNZW51SXRlbUVsZW1l
bnRFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZU1lbnVJdGVtRWxlbWVudCk7Ci0g
ICAgV0tQcmVmZXJlbmNlc1NldEtleWdlbkVsZW1lbnRFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRp
b25zLmVuYWJsZUtleWdlbkVsZW1lbnQpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRNb2Rlcm5NZWRp
YUNvbnRyb2xzRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVNb2Rlcm5NZWRpYUNv
bnRyb2xzKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0V2ViQXV0aGVudGljYXRpb25FbmFibGVkKHBy
ZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uKTsKLSAgICBXS1ByZWZl
cmVuY2VzU2V0V2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3JFbmFibGVkKHByZWZl
cmVuY2VzLCBvcHRpb25zLmVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9y
KTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0QWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNr
Rm9yQ3JlZGVudGlhbHMocHJlZmVyZW5jZXMsIG9wdGlvbnMuYWxsb3dDcm9zc09yaWdpblN1YnJl
c291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRDb2xvckZp
bHRlckVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQ29sb3JGaWx0ZXIpOwotICAg
IFdLUHJlZmVyZW5jZXNTZXRQdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlKHByZWZl
cmVuY2VzLCBvcHRpb25zLnB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUpOwotICAg
IFdLUHJlZmVyZW5jZXNTZXRQYWdlQ2FjaGVFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVu
YWJsZUJhY2tGb3J3YXJkQ2FjaGUpOworICAgIFdLUHJlZmVyZW5jZXNTZXRNb2NrU2Nyb2xsYmFy
c0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMudXNlTW9ja1Njcm9sbGJhcnMoKSk7CisgICAg
V0tQcmVmZXJlbmNlc1NldE5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKHByZWZlcmVuY2VzLCBvcHRp
b25zLm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRBdHRh
Y2htZW50RWxlbWVudEVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQXR0YWNobWVu
dEVsZW1lbnQoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldE1lbnVJdGVtRWxlbWVudEVuYWJsZWQo
cHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlTWVudUl0ZW1FbGVtZW50KCkpOworICAgIFdLUHJl
ZmVyZW5jZXNTZXRLZXlnZW5FbGVtZW50RW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFi
bGVLZXlnZW5FbGVtZW50KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRNb2Rlcm5NZWRpYUNvbnRy
b2xzRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xz
KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRXZWJBdXRoZW50aWNhdGlvbkVuYWJsZWQocHJlZmVy
ZW5jZXMsIG9wdGlvbnMuZW5hYmxlV2ViQXV0aGVudGljYXRpb24oKSk7CisgICAgV0tQcmVmZXJl
bmNlc1NldFdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yRW5hYmxlZChwcmVmZXJl
bmNlcywgb3B0aW9ucy5lbmFibGVXZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0aGVudGljYXRvcigp
KTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0QWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNr
Rm9yQ3JlZGVudGlhbHMocHJlZmVyZW5jZXMsIG9wdGlvbnMuYWxsb3dDcm9zc09yaWdpblN1YnJl
c291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldENvbG9y
RmlsdGVyRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVDb2xvckZpbHRlcigpKTsK
KyAgICBXS1ByZWZlcmVuY2VzU2V0UHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZShw
cmVmZXJlbmNlcywgb3B0aW9ucy5wdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlKCkp
OworICAgIFdLUHJlZmVyZW5jZXNTZXRQYWdlQ2FjaGVFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRp
b25zLmVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUoKSk7CiAKICAgICBXS1ByZWZlcmVuY2VzU2V0RGVm
YXVsdFRleHRFbmNvZGluZ05hbWUocHJlZmVyZW5jZXMsIHRvV0soIklTTy04ODU5LTEiKS5nZXQo
KSk7CiAKQEAgLTkzMiw3ICs5MzYsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldFByZWZl
cmVuY2VzVG9DCiAgICAgV0tQcmVmZXJlbmNlc1NldEhpZGRlblBhZ2VET01UaW1lclRocm90dGxp
bmdFbmFibGVkKHByZWZlcmVuY2VzLCBmYWxzZSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldEhpZGRl
blBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZChwcmVmZXJlbmNlcywgZmFsc2UpOwog
Ci0gICAgV0tQcmVmZXJlbmNlc1NldEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQocHJlZmVyZW5j
ZXMsIG1fc2hvdWxkVXNlQWNjZWxlcmF0ZWREcmF3aW5nIHx8IG9wdGlvbnMudXNlQWNjZWxlcmF0
ZWREcmF3aW5nKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0QWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxl
ZChwcmVmZXJlbmNlcywgbV9zaG91bGRVc2VBY2NlbGVyYXRlZERyYXdpbmcgfHwgb3B0aW9ucy51
c2VBY2NlbGVyYXRlZERyYXdpbmcoKSk7CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSB0ZXN0
aW5nIHRoZSBkZWZhdWx0LgogICAgIFdLUHJlZmVyZW5jZXNTZXRTdG9yYWdlQmxvY2tpbmdQb2xp
Y3kocHJlZmVyZW5jZXMsIGtXS0FsbG93QWxsU3RvcmFnZSk7CiAKQEAgLTk1Myw3ICs5NTcsNyBA
QCB2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldFByZWZlcmVuY2VzVG9DCiAgICAgCiAgICAgV0tQ
cmVmZXJlbmNlc1NldExhcmdlSW1hZ2VBc3luY0RlY29kaW5nRW5hYmxlZChwcmVmZXJlbmNlcywg
ZmFsc2UpOwogCi0gICAgV0tQcmVmZXJlbmNlc1NldEluc3BlY3RvckFkZGl0aW9uc0VuYWJsZWQo
cHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zKTsKKyAgICBXS1By
ZWZlcmVuY2VzU2V0SW5zcGVjdG9yQWRkaXRpb25zRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9u
cy5lbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMoKSk7CiAKICAgICBXS1ByZWZlcmVuY2VzU2V0U3Rv
cmFnZUFjY2Vzc0FQSUVuYWJsZWQocHJlZmVyZW5jZXMsIHRydWUpOwogICAgIApAQCAtOTcyLDcg
Kzk3Niw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0UHJlZmVyZW5jZXNUb0MKICAgICBX
S1ByZWZlcmVuY2VzU2V0QXVkaW9QbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmUocHJlZmVyZW5j
ZXMsIGZhbHNlKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JL
ZXkocHJlZmVyZW5jZXMsIGZhbHNlLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3Bl
YWtlclNlbGVjdGlvblJlcXVpcmVzVXNlckdlc3R1cmUiKSk7CiAKLSAgICBXS1ByZWZlcmVuY2Vz
U2V0U2hvdWxkVXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dChwcmVmZXJlbmNlcywgb3B0aW9u
cy5jb250ZXh0T3B0aW9ucy51c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0KTsKKyAgICBXS1By
ZWZlcmVuY2VzU2V0U2hvdWxkVXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dChwcmVmZXJlbmNl
cywgb3B0aW9ucy51c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0KCkpOwogCiAjaWYgRU5BQkxF
KEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKICAgICBXS1ByZWZlcmVuY2VzU2V0SXNBY2Nl
c3NpYmlsaXR5SXNvbGF0ZWRUcmVlRW5hYmxlZChwcmVmZXJlbmNlcywgYWNjZXNzaWJpbGl0eUlz
b2xhdGVkVHJlZU1vZGUoKSk7CkBAIC0xMDA2LDExICsxMDEwLDEyIEBAIGJvb2wgVGVzdENvbnRy
b2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3QKICAgICBzZXRWYWx1ZShyZXNldE1lc3NhZ2VCb2R5
LCAiQWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZSIsIG1fYWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJl
ZU1vZGUpOwogI2VuZGlmCiAKLSAgICBpZiAob3B0aW9ucy5qc2NPcHRpb25zLmxlbmd0aCgpKQot
ICAgICAgICBzZXRWYWx1ZShyZXNldE1lc3NhZ2VCb2R5LCAiSlNDT3B0aW9ucyIsIG9wdGlvbnMu
anNjT3B0aW9ucy5jX3N0cigpKTsKKyAgICBhdXRvIGpzY09wdGlvbnMgPSBvcHRpb25zLmpzY09w
dGlvbnMoKTsKKyAgICBpZiAoIWpzY09wdGlvbnMuZW1wdHkoKSkKKyAgICAgICAgc2V0VmFsdWUo
cmVzZXRNZXNzYWdlQm9keSwgIkpTQ09wdGlvbnMiLCBqc2NPcHRpb25zLmNfc3RyKCkpOwogCiAj
aWYgUExBVEZPUk0oQ09DT0EpCi0gICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRBZGRpdGlvbmFs
U3VwcG9ydGVkSW1hZ2VUeXBlc0ZvclRlc3Rpbmcob3B0aW9ucy5hZGRpdGlvbmFsU3VwcG9ydGVk
SW1hZ2VUeXBlcy5jX3N0cigpKTsKKyAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldEFkZGl0aW9u
YWxTdXBwb3J0ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyhvcHRpb25zLmFkZGl0aW9uYWxTdXBwb3J0
ZWRJbWFnZVR5cGVzKCkuY19zdHIoKSk7CiAjZW5kaWYKIAogICAgIFdLUGFnZVBvc3RNZXNzYWdl
VG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXco
KS0+cGFnZSgpLCB0b1dLKCJSZXNldCIpLmdldCgpLCByZXNldE1lc3NhZ2VCb2R5LmdldCgpKTsK
QEAgLTExMTgsNyArMTEyMyw3IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0Nv
bnNpc3QKIAogICAgIHNldE5hdmlnYXRpb25HZXN0dXJlc0VuYWJsZWQoZmFsc2UpOwogICAgIAot
ICAgIHNldElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKG9wdGlvbnMuaWdub3Jlc1ZpZXdwb3J0
U2NhbGVMaW1pdHMpOworICAgIHNldElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKG9wdGlvbnMu
aWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMoKSk7CiAKICAgICBtX29wZW5QYW5lbEZpbGVVUkxz
ID0gbnVsbHB0cjsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtMTMxOCw3ICsxMzIzLDcg
QEAgc3RhdGljIHN0ZDo6c3RyaW5nIHRlc3RQYXRoKFdLVVJMUmVmIHVybAogICAgIHJldHVybiBz
dGQ6OnN0cmluZygpOwogfQogCi1zdGF0aWMgV0tVUkxSZWYgY3JlYXRlVGVzdFVSTChjb25zdCBj
aGFyKiBwYXRoT3JVUkwpCitXS1VSTFJlZiBUZXN0Q29udHJvbGxlcjo6Y3JlYXRlVGVzdFVSTChj
b25zdCBjaGFyKiBwYXRoT3JVUkwpCiB7CiAgICAgaWYgKHN0cnN0cihwYXRoT3JVUkwsICJodHRw
Oi8vIikgfHwgc3Ryc3RyKHBhdGhPclVSTCwgImh0dHBzOi8vIikgfHwgc3Ryc3RyKHBhdGhPclVS
TCwgImZpbGU6Ly8iKSkKICAgICAgICAgcmV0dXJuIFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KHBhdGhPclVSTCk7CkBAIC0xMzU2LDIxMSArMTM2MSwyMyBAQCBzdGF0aWMgV0tVUkxSZWYgY3Jl
YXRlVGVzdFVSTChjb25zdCBjaGFyCiAgICAgcmV0dXJuIFdLVVJMQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKGJ1ZmZlci5nZXQoKSk7CiB9CiAKLXN0YXRpYyBib29sIHBhcnNlQm9vbGVhblRlc3RIZWFk
ZXJWYWx1ZShjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJ0
cnVlIikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHZhbHVlID09ICJmYWxzZSIpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIExPR19FUlJPUigiRm91bmQgdW5leHBlY3RlZCB2
YWx1ZSAnJXMnIGZvciBib29sZWFuIG9wdGlvbi4gRXhwZWN0ZWQgJ3RydWUnIG9yICdmYWxzZScu
IiwgdmFsdWUuY19zdHIoKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgc3RkOjpz
dHJpbmcgcGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1JlbGF0aXZlUGF0aChjb25zdCBzdGQ6
OnN0cmluZyYgdmFsdWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCi17Ci0gICAgYXV0
byBiYXNlVVJMID0gYWRvcHRXSyhjcmVhdGVUZXN0VVJMKHBhdGhPclVSTC5jX3N0cigpKSk7Ci0g
ICAgYXV0byByZWxhdGl2ZVVSTCA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoQmFzZVVSTChiYXNl
VVJMLmdldCgpLCB2YWx1ZS5jX3N0cigpKSk7Ci0gICAgcmV0dXJuIHRvU1REKGFkb3B0V0soV0tV
UkxDb3B5UGF0aChyZWxhdGl2ZVVSTC5nZXQoKSkpKTsKLX0KLQotc3RhdGljIHN0ZDo6c3RyaW5n
IHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNVUkwoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVl
KQotewotICAgIHJldHVybiB0b1NURChhZG9wdFdLKFdLVVJMQ29weVN0cmluZyhjcmVhdGVUZXN0
VVJMKHZhbHVlLmNfc3RyKCkpKSkpOwotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVUZXN0T3B0aW9u
c0Zyb21UZXN0SGVhZGVyKFRlc3RPcHRpb25zJiB0ZXN0T3B0aW9ucywgY29uc3Qgc3RkOjpzdHJp
bmcmIHBhdGhPclVSTCwgY29uc3Qgc3RkOjpzdHJpbmcmIGFic29sdXRlUGF0aCkKLXsKLSAgICBz
dGQ6OnN0cmluZyBmaWxlbmFtZSA9IGFic29sdXRlUGF0aDsKLSAgICBpZiAoZmlsZW5hbWUuZW1w
dHkoKSkgewotICAgICAgICAvLyBHcm9zcy4gTmVlZCB0byByZWR1Y2UgY29udmVyc2lvbnMgYmV0
d2VlbiBhbGwgdGhlIHN0cmluZyB0eXBlcyBhbmQgVVJMcy4KLSAgICAgICAgZmlsZW5hbWUgPSB0
ZXN0UGF0aChhZG9wdFdLKGNyZWF0ZVRlc3RVUkwocGF0aE9yVVJMLmNfc3RyKCkpKS5nZXQoKSk7
Ci0gICAgfQotCi0gICAgaWYgKGZpbGVuYW1lLmVtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHN0ZDo6c3RyaW5nIG9wdGlvbnM7Ci0gICAgc3RkOjppZnN0cmVhbSB0ZXN0RmlsZShmaWxl
bmFtZS5kYXRhKCkpOwotICAgIGlmICghdGVzdEZpbGUuZ29vZCgpKQotICAgICAgICByZXR1cm47
Ci0gICAgZ2V0bGluZSh0ZXN0RmlsZSwgb3B0aW9ucyk7Ci0gICAgc3RkOjpzdHJpbmcgYmVnaW5T
dHJpbmcoIndlYmtpdC10ZXN0LXJ1bm5lciBbICIpOwotICAgIHN0ZDo6c3RyaW5nIGVuZFN0cmlu
ZygiIF0iKTsKLSAgICBzaXplX3QgYmVnaW5Mb2NhdGlvbiA9IG9wdGlvbnMuZmluZChiZWdpblN0
cmluZyk7Ci0gICAgaWYgKGJlZ2luTG9jYXRpb24gPT0gc3RkOjpzdHJpbmc6Om5wb3MpCi0gICAg
ICAgIHJldHVybjsKLSAgICBzaXplX3QgZW5kTG9jYXRpb24gPSBvcHRpb25zLmZpbmQoZW5kU3Ry
aW5nLCBiZWdpbkxvY2F0aW9uKTsKLSAgICBpZiAoZW5kTG9jYXRpb24gPT0gc3RkOjpzdHJpbmc6
Om5wb3MpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgZmluZCBlbmQgb2YgdGVzdCBo
ZWFkZXIgaW4gJXMiLCBmaWxlbmFtZS5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBzdGQ6OnN0cmluZyBwYWlyU3RyaW5nID0gb3B0aW9ucy5zdWJzdHIoYmVnaW5Mb2NhdGlv
biArIGJlZ2luU3RyaW5nLnNpemUoKSwgZW5kTG9jYXRpb24gLSAoYmVnaW5Mb2NhdGlvbiArIGJl
Z2luU3RyaW5nLnNpemUoKSkpOwotICAgIHNpemVfdCBwYWlyU3RhcnQgPSAwOwotICAgIHdoaWxl
IChwYWlyU3RhcnQgPCBwYWlyU3RyaW5nLnNpemUoKSkgewotICAgICAgICBzaXplX3QgcGFpckVu
ZCA9IHBhaXJTdHJpbmcuZmluZCgiICIsIHBhaXJTdGFydCk7Ci0gICAgICAgIGlmIChwYWlyRW5k
ID09IHN0ZDo6c3RyaW5nOjpucG9zKQotICAgICAgICAgICAgcGFpckVuZCA9IHBhaXJTdHJpbmcu
c2l6ZSgpOwotICAgICAgICBzaXplX3QgZXF1YWxzTG9jYXRpb24gPSBwYWlyU3RyaW5nLmZpbmQo
Ij0iLCBwYWlyU3RhcnQpOwotICAgICAgICBpZiAoZXF1YWxzTG9jYXRpb24gPT0gc3RkOjpzdHJp
bmc6Om5wb3MpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiTWFsZm9ybWVkIG9wdGlvbiBpbiB0
ZXN0IGhlYWRlciAoY291bGQgbm90IGZpbmQgJz0nIGNoYXJhY3RlcikgaW4gJXMiLCBmaWxlbmFt
ZS5jX3N0cigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGF1dG8g
a2V5ID0gcGFpclN0cmluZy5zdWJzdHIocGFpclN0YXJ0LCBlcXVhbHNMb2NhdGlvbiAtIHBhaXJT
dGFydCk7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBwYWlyU3RyaW5nLnN1YnN0cihlcXVhbHNMb2Nh
dGlvbiArIDEsIHBhaXJFbmQgLSAoZXF1YWxzTG9jYXRpb24gKyAxKSk7Ci0KLSAgICAgICAgaWYg
KCFrZXkucmZpbmQoImV4cGVyaW1lbnRhbDoiKSkgewotICAgICAgICAgICAga2V5ID0ga2V5LnN1
YnN0cigxMyk7Ci0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5leHBlcmltZW50YWxGZWF0dXJlcy5h
ZGQoU3RyaW5nKGtleS5jX3N0cigpKSwgcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVl
KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWtleS5yZmluZCgiaW50ZXJuYWw6IikpIHsK
LSAgICAgICAgICAgIGtleSA9IGtleS5zdWJzdHIoOSk7Ci0gICAgICAgICAgICB0ZXN0T3B0aW9u
cy5pbnRlcm5hbERlYnVnRmVhdHVyZXMuYWRkKFN0cmluZyhrZXkuY19zdHIoKSksIHBhcnNlQm9v
bGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGtl
eSA9PSAibGFuZ3VhZ2UiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuY29udGV4dE9wdGlvbnMu
b3ZlcnJpZGVMYW5ndWFnZXMgPSBTdHJpbmcodmFsdWUuY19zdHIoKSkuc3BsaXQoJywnKTsKLSAg
ICAgICAgZWxzZSBpZiAoa2V5ID09ICJ1c2VUaHJlYWRlZFNjcm9sbGluZyIpCi0gICAgICAgICAg
ICB0ZXN0T3B0aW9ucy51c2VUaHJlYWRlZFNjcm9sbGluZyA9IHBhcnNlQm9vbGVhblRlc3RIZWFk
ZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAidXNlQWNjZWxlcmF0ZWRE
cmF3aW5nIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLnVzZUFjY2VsZXJhdGVkRHJhd2luZyA9
IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtl
eSA9PSAidXNlRmxleGlibGVWaWV3cG9ydCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy51c2VG
bGV4aWJsZVZpZXdwb3J0ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAg
ICAgICAgZWxzZSBpZiAoa2V5ID09ICJ1c2VEYXRhRGV0ZWN0aW9uIikKLSAgICAgICAgICAgIHRl
c3RPcHRpb25zLnVzZURhdGFEZXRlY3Rpb24gPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUo
dmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInVzZU1vY2tTY3JvbGxiYXJzIikKLSAg
ICAgICAgICAgIHRlc3RPcHRpb25zLnVzZU1vY2tTY3JvbGxiYXJzID0gcGFyc2VCb29sZWFuVGVz
dEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJuZWVkc1NpdGVT
cGVjaWZpY1F1aXJrcyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5uZWVkc1NpdGVTcGVjaWZp
Y1F1aXJrcyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVs
c2UgaWYgKGtleSA9PSAiaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMiKQotICAgICAgICAgICAg
dGVzdE9wdGlvbnMuaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMgPSBwYXJzZUJvb2xlYW5UZXN0
SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInVzZUNoYXJhY3Rl
clNlbGVjdGlvbkdyYW51bGFyaXR5IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLnVzZUNoYXJh
Y3RlclNlbGVjdGlvbkdyYW51bGFyaXR5ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZh
bHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVBdHRhY2htZW50RWxlbWVudCIp
Ci0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVBdHRhY2htZW50RWxlbWVudCA9IHBhcnNl
Qm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAi
ZW5hYmxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5h
YmxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFs
dWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInVzZUVwaGVtZXJhbFNlc3Npb24iKQotICAg
ICAgICAgICAgdGVzdE9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lvbiA9IHBhcnNlQm9vbGVhblRl
c3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlTWVu
dUl0ZW1FbGVtZW50IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZU1lbnVJdGVtRWxl
bWVudCA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2Ug
aWYgKGtleSA9PSAiZW5hYmxlS2V5Z2VuRWxlbWVudCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9u
cy5lbmFibGVLZXlnZW5FbGVtZW50ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVl
KTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzIikK
LSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMgPSBwYXJz
ZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0g
ImVuYWJsZVBvaW50ZXJMb2NrIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZVBvaW50
ZXJMb2NrID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxz
ZSBpZiAoa2V5ID09ICJlbmFibGVXZWJBdXRoZW50aWNhdGlvbiIpCi0gICAgICAgICAgICB0ZXN0
T3B0aW9ucy5lbmFibGVXZWJBdXRoZW50aWNhdGlvbiA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJW
YWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlV2ViQXV0aGVudGlj
YXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxl
V2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IgPSBwYXJzZUJvb2xlYW5UZXN0SGVh
ZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUluc3BlY3Rv
ckFkZGl0aW9ucyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVJbnNwZWN0b3JBZGRp
dGlvbnMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNl
IGlmIChrZXkgPT0gImR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIpCi0gICAgICAgICAgICB0ZXN0
T3B0aW9ucy5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVy
VmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImFwcGxpY2F0aW9uTWFuaWZl
c3QiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuYXBwbGljYXRpb25NYW5pZmVzdCA9IHBhcnNl
U3RyaW5nVGVzdEhlYWRlclZhbHVlQXNSZWxhdGl2ZVBhdGgodmFsdWUsIHBhdGhPclVSTCk7Ci0g
ICAgICAgIGVsc2UgaWYgKGtleSA9PSAiYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNr
Rm9yQ3JlZGVudGlhbHMiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuYWxsb3dDcm9zc09yaWdp
blN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVy
VmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImRvbVBhc3RlQWxsb3dlZCIp
Ci0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5kb21QYXN0ZUFsbG93ZWQgPSBwYXJzZUJvb2xlYW5U
ZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZVBy
b2Nlc3NTd2FwT25OYXZpZ2F0aW9uIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmNvbnRleHRP
cHRpb25zLmVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uID0gcGFyc2VCb29sZWFuVGVzdEhl
YWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVQcm9jZXNz
U3dhcE9uV2luZG93T3BlbiIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5jb250ZXh0T3B0aW9u
cy5lbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJW
YWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAidXNlU2VydmljZVdvcmtlclNo
b3J0VGltZW91dCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5jb250ZXh0T3B0aW9ucy51c2VT
ZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZh
bHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVDb2xvckZpbHRlciIpCi0gICAg
ICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVDb2xvckZpbHRlciA9IHBhcnNlQm9vbGVhblRlc3RI
ZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAicHVuY2hPdXRXaGl0
ZUJhY2tncm91bmRzSW5EYXJrTW9kZSIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5wdW5jaE91
dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVl
KHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJqc2NPcHRpb25zIikKLSAgICAgICAg
ICAgIHRlc3RPcHRpb25zLmpzY09wdGlvbnMgPSB2YWx1ZTsKLSAgICAgICAgZWxzZSBpZiAoa2V5
ID09ICJhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIpCi0gICAgICAgICAgICB0ZXN0T3B0
aW9ucy5hZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyA9IHZhbHVlOwotICAgICAgICBlbHNl
IGlmIChrZXkgPT0gInJ1blNpbmdseSIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5ydW5TaW5n
bHkgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlm
IChrZXkgPT0gInNob3VsZElnbm9yZU1ldGFWaWV3cG9ydCIpCi0gICAgICAgICAgICB0ZXN0T3B0
aW9ucy5zaG91bGRJZ25vcmVNZXRhVmlld3BvcnQgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFs
dWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInNwZWxsQ2hlY2tpbmdEb3RzIikK
LSAgICAgICAgICAgIHRlc3RPcHRpb25zLnNob3VsZFNob3dTcGVsbENoZWNraW5nRG90cyA9IHBh
cnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9
PSAiZW5hYmxlU2VydmljZUNvbnRyb2xzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJs
ZVNlcnZpY2VDb250cm9scyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0g
ICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZWRpdGFibGUiKQotICAgICAgICAgICAgdGVzdE9wdGlv
bnMuZWRpdGFibGUgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAg
ICBlbHNlIGlmIChrZXkgPT0gInNob3VsZEhhbmRsZVJ1bk9wZW5QYW5lbCIpCi0gICAgICAgICAg
ICB0ZXN0T3B0aW9ucy5zaG91bGRIYW5kbGVSdW5PcGVuUGFuZWwgPSBwYXJzZUJvb2xlYW5UZXN0
SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInNob3VsZFByZXNl
bnRQb3BvdmVycyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5zaG91bGRQcmVzZW50UG9wb3Zl
cnMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlm
IChrZXkgPT0gImNvbnRlbnRJbnNldC50b3AiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuY29u
dGVudEluc2V0VG9wID0gc3RkOjpzdG9kKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09
ICJpZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzIikKLSAgICAgICAgICAgIHRlc3RP
cHRpb25zLmNvbnRleHRPcHRpb25zLmlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMg
PSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChr
ZXkgPT0gImNvbnRlbnRNb2RlIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmNvbnRlbnRNb2Rl
ID0geyB2YWx1ZS5jX3N0cigpIH07Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiYXBwbGljYXRp
b25CdW5kbGVJZGVudGlmaWVyIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmFwcGxpY2F0aW9u
QnVuZGxlSWRlbnRpZmllciA9IHsgdmFsdWUuY19zdHIoKSB9OwotICAgICAgICBlbHNlIGlmIChr
ZXkgPT0gImVuYWJsZUFwcE5hcCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVBcHBO
YXAgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlm
IChrZXkgPT0gImVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUiKQotICAgICAgICAgICAgdGVzdE9wdGlv
bnMuZW5hYmxlQmFja0ZvcndhcmRDYWNoZSA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2
YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiYWxsb3dzTGlua1ByZXZpZXciKQotICAg
ICAgICAgICAgdGVzdE9wdGlvbnMuYWxsb3dzTGlua1ByZXZpZXcgPSBwYXJzZUJvb2xlYW5UZXN0
SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUNhcHR1
cmVWaWRlb0luVUlQcm9jZXNzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZUNhcHR1
cmVWaWRlb0luVUlQcm9jZXNzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsK
LSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVDYXB0dXJlVmlkZW9JbkdQVVByb2Nlc3Mi
KQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlQ2FwdHVyZVZpZGVvSW5HUFVQcm9jZXNz
ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAo
a2V5ID09ICJlbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcyIpCi0gICAgICAgICAgICB0ZXN0
T3B0aW9ucy5lbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcyA9IHBhcnNlQm9vbGVhblRlc3RI
ZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlQ2FwdHVy
ZUF1ZGlvSW5HUFVQcm9jZXNzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZUNhcHR1
cmVBdWRpb0luR1BVUHJvY2VzcyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7
Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyIp
Ci0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5hbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzID0g
cGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5
ID09ICJlbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25z
LmVuYWJsZUluQXBwQnJvd3NlclByaXZhY3kgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUo
dmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInN0YW5kYWxvbmVXZWJBcHBsaWNhdGlv
blVSTCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5zdGFuZGFsb25lV2ViQXBwbGljYXRpb25V
UkwgPSBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzVVJMKHZhbHVlKTsKLSAgICAgICAgZWxz
ZSBpZiAoa2V5ID09ICJpc0FwcEJvdW5kV2ViVmlldyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9u
cy5pc0FwcEJvdW5kV2ViVmlldyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7
Ci0gICAgICAgIHBhaXJTdGFydCA9IHBhaXJFbmQgKyAxOwotICAgIH0KLX0KLQogVGVzdE9wdGlv
bnMgVGVzdENvbnRyb2xsZXI6OnRlc3RPcHRpb25zRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYg
Y29tbWFuZCkgY29uc3QKIHsKLSAgICBUZXN0T3B0aW9ucyBvcHRpb25zKGNvbW1hbmQucGF0aE9y
VVJMKTsKLQotICAgIG9wdGlvbnMudXNlUmVtb3RlTGF5ZXJUcmVlID0gbV9zaG91bGRVc2VSZW1v
dGVMYXllclRyZWU7Ci0gICAgb3B0aW9ucy5zaG91bGRTaG93V2ViVmlldyA9IG1fc2hvdWxkU2hv
d1dlYlZpZXc7Ci0KLSAgICBmb3IgKGF1dG8mIGZlYXR1cmUgOiBtX2ludGVybmFsRmVhdHVyZXMp
Ci0gICAgICAgIG9wdGlvbnMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzLmFkZChmZWF0dXJlLmtleSwg
ZmVhdHVyZS52YWx1ZSk7Ci0gICAgZm9yIChhdXRvJiBmZWF0dXJlIDogbV9leHBlcmltZW50YWxG
ZWF0dXJlcykKLSAgICAgICAgb3B0aW9ucy5leHBlcmltZW50YWxGZWF0dXJlcy5hZGQoZmVhdHVy
ZS5rZXksIGZlYXR1cmUudmFsdWUpOwotCi0gICAgdXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RP
cHRpb25zRm9yVGVzdChvcHRpb25zLCBjb21tYW5kLnBhdGhPclVSTCk7Ci0gICAgdXBkYXRlVGVz
dE9wdGlvbnNGcm9tVGVzdEhlYWRlcihvcHRpb25zLCBjb21tYW5kLnBhdGhPclVSTCwgY29tbWFu
ZC5hYnNvbHV0ZVBhdGgpOwotICAgIHBsYXRmb3JtQWRkVGVzdE9wdGlvbnMob3B0aW9ucyk7Cisg
ICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVzID0gbV9nbG9iYWxGZWF0dXJlczsKKyAgICBtZXJnZShm
ZWF0dXJlcywgaGFyZGNvZGVkRmVhdHVyZXNCYXNlZE9uUGF0aEZvclRlc3QoY29tbWFuZCkpOwor
ICAgIG1lcmdlKGZlYXR1cmVzLCBwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1bHRzRm9yVGVz
dChjb21tYW5kKSk7CisgICAgbWVyZ2UoZmVhdHVyZXMsIGZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0
T3B0aW9uc0ZpbGVzRm9yVGVzdChjb21tYW5kKSk7CisgICAgbWVyZ2UoZmVhdHVyZXMsIGZlYXR1
cmVEZWZhdWx0c0Zyb21UZXN0SGVhZGVyRm9yVGVzdChjb21tYW5kKSk7CisgICAgbWVyZ2UoZmVh
dHVyZXMsIHBsYXRmb3JtU3BlY2lmaWNGZWF0dXJlT3ZlcnJpZGVzRGVmYXVsdHNGb3JUZXN0KGNv
bW1hbmQpKTsKIAotICAgIHJldHVybiBvcHRpb25zOworICAgIHJldHVybiBUZXN0T3B0aW9ucyB7
IGZlYXR1cmVzIH07CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnVwZGF0ZVdlYlZpZXdTaXpl
Rm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYgdGVzdCkKIHsKICAgICB1bnNpZ25lZCB3aWR0
aCA9IHZpZXdXaWR0aDsKICAgICB1bnNpZ25lZCBoZWlnaHQgPSB2aWV3SGVpZ2h0OwotICAgIGlm
ICh0ZXN0Lm9wdGlvbnMoKS5pc1NWR1Rlc3QpIHsKKyAgICBpZiAodGVzdC5vcHRpb25zKCkuaXNT
VkdUZXN0KCkpIHsKICAgICAgICAgd2lkdGggPSB3M2NTVkdWaWV3V2lkdGg7CiAgICAgICAgIGhl
aWdodCA9IHczY1NWR1ZpZXdIZWlnaHQ7CiAgICAgfQpAQCAtMTU3MCw3ICsxMzg3LDcgQEAgdm9p
ZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlV2ViVmlld1NpemVGbwogCiB2b2lkIFRlc3RDb250cm9s
bGVyOjp1cGRhdGVXaW5kb3dTY2FsZUZvclRlc3QoUGxhdGZvcm1XZWJWaWV3KiB2aWV3LCBjb25z
dCBUZXN0SW52b2NhdGlvbiYgdGVzdCkKIHsKLSAgICB2aWV3LT5jaGFuZ2VXaW5kb3dTY2FsZUlm
TmVlZGVkKHRlc3Qub3B0aW9ucygpLmRldmljZVNjYWxlRmFjdG9yKTsKKyAgICB2aWV3LT5jaGFu
Z2VXaW5kb3dTY2FsZUlmTmVlZGVkKHRlc3Qub3B0aW9ucygpLmRldmljZVNjYWxlRmFjdG9yKCkp
OwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpjb25maWd1cmVWaWV3Rm9yVGVzdChjb25zdCBU
ZXN0SW52b2NhdGlvbiYgdGVzdCkKQEAgLTE3NjYsNiArMTU4MywxMiBAQCBzdGF0aWMgVGVzdENv
bW1hbmQgcGFyc2VJbnB1dExpbmUoY29uc3QgCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGRp
ZShpbnB1dExpbmUpOwogICAgIH0KKyAgICAKKyAgICBpZiAocmVzdWx0LmFic29sdXRlUGF0aC5l
bXB0eSgpKSB7CisgICAgICAgIC8vIEdyb3NzLiBOZWVkIHRvIHJlZHVjZSBjb252ZXJzaW9ucyBi
ZXR3ZWVuIGFsbCB0aGUgc3RyaW5nIHR5cGVzIGFuZCBVUkxzLgorICAgICAgICByZXN1bHQuYWJz
b2x1dGVQYXRoID0gdGVzdFBhdGgoYWRvcHRXSyhUZXN0Q29udHJvbGxlcjo6Y3JlYXRlVGVzdFVS
TChyZXN1bHQucGF0aE9yVVJMLmNfc3RyKCkpKS5nZXQoKSk7CisgICAgfQorCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIApAQCAtMTc4OCw3ICsxNjExLDcgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6
cnVuVGVzdChjb25zdCBjaGFyKgogICAgIGlmIChjb21tYW5kLnRpbWVvdXQgPiAwX3MpCiAgICAg
ICAgIG1fY3VycmVudEludm9jYXRpb24tPnNldEN1c3RvbVRpbWVvdXQoY29tbWFuZC50aW1lb3V0
KTsKIAotICAgIG1fY3VycmVudEludm9jYXRpb24tPnNldER1bXBKU0NvbnNvbGVMb2dJblN0ZEVy
cihjb21tYW5kLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciB8fCBvcHRpb25zLmR1bXBKU0NvbnNv
bGVMb2dJblN0ZEVycik7CisgICAgbV9jdXJyZW50SW52b2NhdGlvbi0+c2V0RHVtcEpTQ29uc29s
ZUxvZ0luU3RkRXJyKGNvbW1hbmQuZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIHx8IG9wdGlvbnMu
ZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKCkpOwogCiAgICAgcGxhdGZvcm1XaWxsUnVuVGVzdCgq
bV9jdXJyZW50SW52b2NhdGlvbik7CiAKQEAgLTMwMDMsNyArMjgyNiw3IEBAIHZvaWQgVGVzdENv
bnRyb2xsZXI6OnBsYXRmb3JtV2lsbFJ1blRlc3QKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1Jbml0aWFsaXplRGF0YVN0b3JlKFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYgY29uZmlndXJh
dGlvbiwgY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKCFvcHRpb25zLnVz
ZUVwaGVtZXJhbFNlc3Npb24pCisgICAgaWYgKCFvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24o
KSkKICAgICAgICAgV0tQYWdlQ29uZmlndXJhdGlvblNldFdlYnNpdGVEYXRhU3RvcmUoY29uZmln
dXJhdGlvbiwgZGVmYXVsdFdlYnNpdGVEYXRhU3RvcmUoKSk7CiAKICAgICBtX3dlYnNpdGVEYXRh
U3RvcmUgPSBXS1BhZ2VDb25maWd1cmF0aW9uR2V0V2Vic2l0ZURhdGFTdG9yZShjb25maWd1cmF0
aW9uKTsKQEAgLTM4MTgsNyArMzY0MSw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlaW5pdGlh
bGl6ZUFwcEJvdW4KICAgICBXS1dlYnNpdGVEYXRhU3RvcmVSZWluaXRpYWxpemVBcHBCb3VuZERv
bWFpbnMoVGVzdENvbnRyb2xsZXI6OndlYnNpdGVEYXRhU3RvcmUoKSk7CiB9CiAKLXZvaWQgVGVz
dENvbnRyb2xsZXI6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKGNvbnN0
IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllcikKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnVwZGF0ZUJ1
bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKGNvbnN0IHN0ZDo6c3RyaW5nJiBidW5kbGVJ
ZGVudGlmaWVyKQogewogICAgIEluQXBwQnJvd3NlclByaXZhY3lDYWxsYmFja0NvbnRleHQgY29u
dGV4dCgqdGhpcyk7CiAgICAgV0tXZWJzaXRlRGF0YVN0b3JlVXBkYXRlQnVuZGxlSWRlbnRpZmll
ckluTmV0d29ya1Byb2Nlc3MoVGVzdENvbnRyb2xsZXI6OndlYnNpdGVEYXRhU3RvcmUoKSwgdG9X
SyhidW5kbGVJZGVudGlmaWVyKS5nZXQoKSwgJmNvbnRleHQsIGluQXBwQnJvd3NlclByaXZhY3lW
b2lkUmVzdWx0Q2FsbGJhY2spOwpAQCAtMzgzMyw4ICszNjU2LDkgQEAgdm9pZCBUZXN0Q29udHJv
bGxlcjo6Y2xlYXJCdW5kbGVJZGVudGlmaQogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQotdm9p
ZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1BZGRUZXN0T3B0aW9ucyhUZXN0T3B0aW9ucyYpIGNv
bnN0CitUZXN0RmVhdHVyZXMgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtU3BlY2lmaWNGZWF0dXJl
T3ZlcnJpZGVzRGVmYXVsdHNGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJikgY29uc3QKIHsKKyAg
ICByZXR1cm4geyB9OwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjppbmplY3RVc2VyU2NyaXB0
KFdLU3RyaW5nUmVmKQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIu
aAkocmV2aXNpb24gMjY3ODg1KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCwxMCBAQAogI2luY2x1ZGUgIldlYk5v
dGlmaWNhdGlvblByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiV29ya1F1ZXVlTWFuYWdlci5oIgogI2lu
Y2x1ZGUgPFdlYktpdC9XS1JldGFpblB0ci5oPgorI2luY2x1ZGUgPGZpbGVzeXN0ZW0+CiAjaW5j
bHVkZSA8c2V0PgogI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgog
I2luY2x1ZGUgPHZlY3Rvcj4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgpAQCAtNTAsMTIgKzUyLDEyIEBAIE9CSkNfQ0xBU1MgV0tXZWJWaWV3
Q29uZmlndXJhdGlvbjsKIAogbmFtZXNwYWNlIFdUUiB7CiAKLWNsYXNzIFRlc3RJbnZvY2F0aW9u
OworY2xhc3MgRXZlbnRTZW5kZXJQcm94eTsKIGNsYXNzIE9yaWdpblNldHRpbmdzOwogY2xhc3Mg
UGxhdGZvcm1XZWJWaWV3OwotY2xhc3MgRXZlbnRTZW5kZXJQcm94eTsKK2NsYXNzIFRlc3RJbnZv
Y2F0aW9uOworY2xhc3MgVGVzdE9wdGlvbnM7CiBzdHJ1Y3QgVGVzdENvbW1hbmQ7Ci1zdHJ1Y3Qg
VGVzdE9wdGlvbnM7CiAKIGNsYXNzIEFzeW5jVGFzayB7CiBwdWJsaWM6CkBAIC05MSw2ICs5Myw4
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBjb25maWd1cmVXZWJzaXRlRGF0YVN0b3JlVGVt
cG9yYXJ5RGlyZWN0b3JpZXMoV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvblJlZik7CiAg
ICAgc3RhdGljIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkZWZhdWx0V2Vic2l0ZURhdGFTdG9yZSgp
OwogCisgICAgc3RhdGljIFdLVVJMUmVmIGNyZWF0ZVRlc3RVUkwoY29uc3QgY2hhciogcGF0aE9y
VVJMKTsKKwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2aWV3V2lkdGg7CiAgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIHZpZXdIZWlnaHQ7CiAKQEAgLTExNSwyMCArMTE5LDE1IEBAIHB1Ymxp
YzoKICAgICBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgd2Vic2l0ZURhdGFTdG9yZSgpOwogCiAgICAg
RXZlbnRTZW5kZXJQcm94eSogZXZlbnRTZW5kZXJQcm94eSgpIHsgcmV0dXJuIG1fZXZlbnRTZW5k
ZXJQcm94eS5nZXQoKTsgfQotCi0gICAgYm9vbCBzaG91bGRVc2VSZW1vdGVMYXllclRyZWUoKSBj
b25zdCB7IHJldHVybiBtX3Nob3VsZFVzZVJlbW90ZUxheWVyVHJlZTsgfQogICAgIAogICAgIC8v
IFJ1bnMgdGhlIHJ1biBsb29wIHVudGlsIGBkb25lYCBpcyB0cnVlIG9yIHRoZSB0aW1lb3V0IGVs
YXBzZXMuCiAgICAgYm9vbCB1c2VXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcigpIHsgcmV0dXJuIG1f
dXNlV2FpdFRvRHVtcFdhdGNoZG9nVGltZXI7IH0KICAgICB2b2lkIHJ1blVudGlsKGJvb2wmIGRv
bmUsIFdURjo6U2Vjb25kcyB0aW1lb3V0KTsKICAgICB2b2lkIG5vdGlmeURvbmUoKTsKIAotICAg
IGJvb2wgc2hvdWxkU2hvd1dlYlZpZXcoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFNob3dXZWJW
aWV3OyB9CiAgICAgYm9vbCB1c2luZ1NlcnZlck1vZGUoKSBjb25zdCB7IHJldHVybiBtX3VzaW5n
U2VydmVyTW9kZTsgfQogICAgIHZvaWQgY29uZmlndXJlVmlld0ZvclRlc3QoY29uc3QgVGVzdElu
dm9jYXRpb24mKTsKLSAgICAKLSAgICBib29sIHNob3VsZFNob3dUb3VjaGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaG91bGRTaG93VG91Y2hlczsgfQotICAgIAorCiAgICAgYm9vbCBiZWZvcmVVbmxv
YWRSZXR1cm5WYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmVmb3JlVW5sb2FkUmV0dXJuVmFsdWU7
IH0KICAgICB2b2lkIHNldEJlZm9yZVVubG9hZFJldHVyblZhbHVlKGJvb2wgdmFsdWUpIHsgbV9i
ZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSA9IHZhbHVlOyB9CiAKQEAgLTI3NSw3ICsyNzQsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBjbGVhckxvYWRlZFN1YnJlc291cmNlRG9tYWlucygpOwogICAgIHZv
aWQgY2xlYXJBcHBCb3VuZFNlc3Npb24oKTsKICAgICB2b2lkIHJlaW5pdGlhbGl6ZUFwcEJvdW5k
RG9tYWlucygpOwotICAgIHZvaWQgdXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nl
c3MoY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyKTsKKyAgICB2b2lkIHVwZGF0ZUJ1bmRs
ZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKGNvbnN0IHN0ZDo6c3RyaW5nJiBidW5kbGVJZGVu
dGlmaWVyKTsKICAgICB2b2lkIGNsZWFyQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3Mo
KTsKIAogICAgIFdLQXJyYXlSZWYgb3BlblBhbmVsRmlsZVVSTHMoKSBjb25zdCB7IHJldHVybiBt
X29wZW5QYW5lbEZpbGVVUkxzLmdldCgpOyB9CkBAIC0zNjIsNyArMzYxLDcgQEAgcHVibGljOgog
CiBwcml2YXRlOgogICAgIFdLUmV0YWluUHRyPFdLUGFnZUNvbmZpZ3VyYXRpb25SZWY+IGdlbmVy
YXRlUGFnZUNvbmZpZ3VyYXRpb24oY29uc3QgVGVzdE9wdGlvbnMmKTsKLSAgICBXS1JldGFpblB0
cjxXS0NvbnRleHRDb25maWd1cmF0aW9uUmVmPiBnZW5lcmF0ZUNvbnRleHRDb25maWd1cmF0aW9u
KGNvbnN0IFRlc3RPcHRpb25zOjpDb250ZXh0T3B0aW9ucyYpIGNvbnN0OworICAgIFdLUmV0YWlu
UHRyPFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWY+IGdlbmVyYXRlQ29udGV4dENvbmZpZ3VyYXRp
b24oY29uc3QgQ29udGV4dE9wdGlvbnMmKSBjb25zdDsKICAgICB2b2lkIGluaXRpYWxpemUoaW50
IGFyZ2MsIGNvbnN0IGNoYXIqIGFyZ3ZbXSk7CiAgICAgdm9pZCBjcmVhdGVXZWJWaWV3V2l0aE9w
dGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmKTsKICAgICB2b2lkIHJ1bigpOwpAQCAtMzgwLDcgKzM3
OSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKICAgICBXS0NvbnRl
eHRSZWYgcGxhdGZvcm1BZGp1c3RDb250ZXh0KFdLQ29udGV4dFJlZiwgV0tDb250ZXh0Q29uZmln
dXJhdGlvblJlZik7CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemVDb250ZXh0KCk7Ci0gICAg
dm9pZCBwbGF0Zm9ybUFkZFRlc3RPcHRpb25zKFRlc3RPcHRpb25zJikgY29uc3Q7CiAgICAgdm9p
ZCBwbGF0Zm9ybUNyZWF0ZVdlYlZpZXcoV0tQYWdlQ29uZmlndXJhdGlvblJlZiwgY29uc3QgVGVz
dE9wdGlvbnMmKTsKICAgICBzdGF0aWMgUGxhdGZvcm1XZWJWaWV3KiBwbGF0Zm9ybUNyZWF0ZU90
aGVyUGFnZShQbGF0Zm9ybVdlYlZpZXcqIHBhcmVudFZpZXcsIFdLUGFnZUNvbmZpZ3VyYXRpb25S
ZWYsIGNvbnN0IFRlc3RPcHRpb25zJik7CiAgICAgdm9pZCBwbGF0Zm9ybVJlc2V0UHJlZmVyZW5j
ZXNUb0NvbnNpc3RlbnRWYWx1ZXMoKTsKQEAgLTM4OSw3ICszODcsNyBAQCBwcml2YXRlOgogI2lm
IFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgY29jb2FQbGF0Zm9ybUluaXRpYWxpemUoKTsKICAg
ICB2b2lkIGNvY29hUmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyhjb25zdCBUZXN0T3B0aW9u
cyYpOwotICAgIHZvaWQgc2V0QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmlu
ZyYpOworICAgIHZvaWQgc2V0QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKGNvbnN0IHN0ZDo6
c3RyaW5nJik7CiAgICAgdm9pZCBjbGVhckFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllclRlc3Rp
bmdPdmVycmlkZSgpOwogI2VuZGlmCiAgICAgdm9pZCBwbGF0Zm9ybUNvbmZpZ3VyZVZpZXdGb3JU
ZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJik7CkBAIC00MDMsNyArNDAxLDkgQEAgcHJpdmF0ZToK
IAogICAgIHZvaWQgZW5zdXJlVmlld1N1cHBvcnRzT3B0aW9uc0ZvclRlc3QoY29uc3QgVGVzdElu
dm9jYXRpb24mKTsKICAgICBUZXN0T3B0aW9ucyB0ZXN0T3B0aW9uc0ZvclRlc3QoY29uc3QgVGVz
dENvbW1hbmQmKSBjb25zdDsKLSAgICB2b2lkIHVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNUZXN0T3B0
aW9uc0ZvclRlc3QoVGVzdE9wdGlvbnMmLCBjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKSBj
b25zdDsKKyAgICBUZXN0RmVhdHVyZXMgZ2xvYmFsRmVhdHVyZURlZmF1bHRzRm9yVGVzdChjb25z
dCBUZXN0Q29tbWFuZCYpIGNvbnN0OworICAgIFRlc3RGZWF0dXJlcyBwbGF0Zm9ybVNwZWNpZmlj
RmVhdHVyZURlZmF1bHRzRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYpIGNvbnN0OworICAgIFRl
c3RGZWF0dXJlcyBwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZU92ZXJyaWRlc0RlZmF1bHRzRm9yVGVz
dChjb25zdCBUZXN0Q29tbWFuZCYpIGNvbnN0OwogCiAgICAgdm9pZCB1cGRhdGVXZWJWaWV3U2l6
ZUZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mKTsKICAgICB2b2lkIHVwZGF0ZVdpbmRvd1Nj
YWxlRm9yVGVzdChQbGF0Zm9ybVdlYlZpZXcqLCBjb25zdCBUZXN0SW52b2NhdGlvbiYpOwpAQCAt
NTM4LDggKzUzOCwxMCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9jcmVhdGVkT3RoZXJQYWdlIHsg
ZmFsc2UgfTsKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbV9wYXRoczsKICAgICBzdGQ6
OnNldDxzdGQ6OnN0cmluZz4gbV9hbGxvd2VkSG9zdHM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIGJv
b2w+IG1faW50ZXJuYWxGZWF0dXJlczsKLSAgICBIYXNoTWFwPFN0cmluZywgYm9vbD4gbV9leHBl
cmltZW50YWxGZWF0dXJlczsKKyAgICBUZXN0RmVhdHVyZXMgbV9nbG9iYWxGZWF0dXJlczsKKwor
ICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4gbV9pbnRlcm5hbEZlYXR1
cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4gbV9leHBlcmlt
ZW50YWxGZWF0dXJlczsKIAogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtX2luamVjdGVk
QnVuZGxlUGF0aDsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbV90ZXN0UGx1Z2luRGly
ZWN0b3J5OwpAQCAtNTQ4LDcgKzU1MCw3IEBAIHByaXZhdGU6CiAKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8UGxhdGZvcm1XZWJWaWV3PiBtX21haW5XZWJWaWV3OwogICAgIFdLUmV0YWluUHRyPFdLQ29u
dGV4dFJlZj4gbV9jb250ZXh0OwotICAgIE9wdGlvbmFsPFRlc3RPcHRpb25zOjpDb250ZXh0T3B0
aW9ucz4gbV9jb250ZXh0T3B0aW9uczsKKyAgICBPcHRpb25hbDxDb250ZXh0T3B0aW9ucz4gbV9j
b250ZXh0T3B0aW9uczsKICAgICBXS1JldGFpblB0cjxXS1BhZ2VHcm91cFJlZj4gbV9wYWdlR3Jv
dXA7CiAgICAgV0tSZXRhaW5QdHI8V0tVc2VyQ29udGVudENvbnRyb2xsZXJSZWY+IG1fdXNlckNv
bnRlbnRDb250cm9sbGVyOwogCkBAIC02MDUsMTQgKzYwNywxMCBAQCBwcml2YXRlOgogCiAgICAg
Ym9vbCBtX2ZvcmNlQ29tcGxleFRleHQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9zaG91bGRVc2VB
Y2NlbGVyYXRlZERyYXdpbmcgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9zaG91bGRVc2VSZW1vdGVM
YXllclRyZWUgeyBmYWxzZSB9OwotCisgICAgCiAgICAgYm9vbCBtX3Nob3VsZExvZ0NhbkF1dGhl
bnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9zaG91
bGRMb2dEb3dubG9hZENhbGxiYWNrcyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3Nob3VsZExvZ0hp
c3RvcnlDbGllbnRDYWxsYmFja3MgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9zaG91bGRTaG93V2Vi
VmlldyB7IGZhbHNlIH07Ci0gICAgCi0gICAgYm9vbCBtX3Nob3VsZFNob3dUb3VjaGVzIHsgZmFs
c2UgfTsKICAgICBib29sIG1fY2hlY2tGb3JXb3JsZExlYWtzIHsgZmFsc2UgfTsKIAogICAgIGJv
b2wgbV9hbGxvd0FueUhUVFBTQ2VydGlmaWNhdGVGb3JBbGxvd2VkSG9zdHMgeyBmYWxzZSB9OwpJ
bmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAJKHJldmlzaW9u
IDI2Nzg4NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzEsMTEgKzEzMSwxMSBAQCBib29sIFRlc3RJbnZvY2F0aW9uOjpz
aG91bGRMb2dIaXN0b3J5Q2xpCiBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBU
ZXN0SW52b2NhdGlvbjo6Y3JlYXRlVGVzdFNldHRpbmdzRGljdGlvbmFyeSgpCiB7CiAgICAgYXV0
byBiZWdpblRlc3RNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlvbmFyeUNyZWF0
ZSgpKTsKLSAgICBzZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgIlVzZUZsZXhpYmxlVmll
d3BvcnQiLCBvcHRpb25zKCkudXNlRmxleGlibGVWaWV3cG9ydCk7CisgICAgc2V0VmFsdWUoYmVn
aW5UZXN0TWVzc2FnZUJvZHksICJVc2VGbGV4aWJsZVZpZXdwb3J0Iiwgb3B0aW9ucygpLnVzZUZs
ZXhpYmxlVmlld3BvcnQoKSk7CiAgICAgc2V0VmFsdWUoYmVnaW5UZXN0TWVzc2FnZUJvZHksICJE
dW1wUGl4ZWxzIiwgbV9kdW1wUGl4ZWxzKTsKICAgICBzZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdl
Qm9keSwgIlRpbWVvdXQiLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4obV90aW1lb3V0Lm1pbGxpc2Vj
b25kcygpKSk7CiAgICAgc2V0VmFsdWUoYmVnaW5UZXN0TWVzc2FnZUJvZHksICJEdW1wSlNDb25z
b2xlTG9nSW5TdGRFcnIiLCBtX2R1bXBKU0NvbnNvbGVMb2dJblN0ZEVycik7Ci0gICAgc2V0VmFs
dWUoYmVnaW5UZXN0TWVzc2FnZUJvZHksICJhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIs
IG9wdGlvbnMoKS5hZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcy5jX3N0cigpKTsKKyAgICBz
ZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5
cGVzIiwgb3B0aW9ucygpLmFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzKCkuY19zdHIoKSk7
CiAgICAgcmV0dXJuIGJlZ2luVGVzdE1lc3NhZ2VCb2R5OwogfQogCkluZGV4OiBUb29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RPcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL1Rlc3RPcHRpb25zLmNwcAkocmV2aXNpb24gMjY3ODg1KQorKysgVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDQ4ICsy
NiwyNTQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0T3B0aW9ucy5oIgog
CisjaW5jbHVkZSAiU3RyaW5nRnVuY3Rpb25zLmgiCisjaW5jbHVkZSAiVGVzdENvbnRyb2xsZXIu
aCIKKyNpbmNsdWRlIDxmaWxlc3lzdGVtPgorI2luY2x1ZGUgPGZzdHJlYW0+CisjaW5jbHVkZSA8
aW9zdHJlYW0+CiAjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCisjZGVmaW5lIERVTVBfRkVBVFVSRVMg
MAorCiBuYW1lc3BhY2UgV1RSIHsKIAotc3RhdGljIGJvb2wgcGF0aENvbnRhaW5zKGNvbnN0IHN0
ZDo6c3RyaW5nJiBwYXRoT3JVUkwsIGNvbnN0IGNoYXIqIHN1YnN0cmluZykKKyNpZiBEVU1QX0ZF
QVRVUkVTCitzdGF0aWMgdm9pZCBkdW1wRmVhdHVyZXMoY29uc3QgVGVzdEZlYXR1cmVzJiBmZWF0
dXJlcykKIHsKLSAgICBTdHJpbmcgcGF0aChwYXRoT3JVUkwuY19zdHIoKSk7Ci0gICAgcmV0dXJu
IHBhdGguY29udGFpbnMoc3Vic3RyaW5nKTsgLy8gQ2FzZS1pbnNlbnNpdGl2ZS4KKyAgICBpZiAo
ZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMuZW1wdHkoKSAmJiBmZWF0dXJlcy5pbnRlcm5h
bERlYnVnRmVhdHVyZXMuZW1wdHkoKSAmJiBmZWF0dXJlcy5ib29sRmVhdHVyZXMuZW1wdHkoKSAm
JiBmZWF0dXJlcy5kb3VibGVGZWF0dXJlcy5lbXB0eSgpICYmIGZlYXR1cmVzLnN0cmluZ0ZlYXR1
cmVzLmVtcHR5KCkgJiYgZmVhdHVyZXMuc3RyaW5nVmVjdG9yRmVhdHVyZXMuZW1wdHkoKSkgewor
ICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgW0VNUFRZXVxuIjsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBpZiAoIWZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzLmVtcHR5KCkp
IHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICIgIEV4cGVyaW1lbnRhbCBGZWF0dXJlczogXG4iOwor
ICAgICAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVh
dHVyZXMpCisgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8PCAiOiAiIDw8
IHZhbHVlIDw8ICdcbic7CisgICAgfQorICAgIGlmICghZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0Zl
YXR1cmVzLmVtcHR5KCkpIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICIgIEludGVybmFsIEZlYXR1
cmVzOiBcbiI7CisgICAgICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBmZWF0dXJlcy5pbnRl
cm5hbERlYnVnRmVhdHVyZXMpCisgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtl
eSA8PCAiOiAiIDw8IHZhbHVlIDw8ICdcbic7CisgICAgfQorICAgIGlmICghZmVhdHVyZXMuYm9v
bEZlYXR1cmVzLmVtcHR5KCkpIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICIgIEJvb2wgRmVhdHVy
ZXM6IFxuIjsKKyAgICAgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGZlYXR1cmVzLmJvb2xG
ZWF0dXJlcykKKyAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAgICIgPDwga2V5IDw8ICI6ICIg
PDwgdmFsdWUgPDwgJ1xuJzsKKyAgICB9CisgICAgaWYgKCFmZWF0dXJlcy5kb3VibGVGZWF0dXJl
cy5lbXB0eSgpKSB7CisgICAgICAgIHN0ZDo6Y2VyciA8PCAiICBEb3VibGUgRmVhdHVyZXM6IFxu
IjsKKyAgICAgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGZlYXR1cmVzLmRvdWJsZUZlYXR1
cmVzKQorICAgICAgICAgICAgc3RkOjpjZXJyIDw8ICIgICAgIiA8PCBrZXkgPDwgIjogIiA8PCB2
YWx1ZSA8PCAnXG4nOworICAgIH0KKyAgICBpZiAoIWZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVzLmVt
cHR5KCkpIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICIgIFN0cmluZyBGZWF0dXJlczogXG4iOwor
ICAgICAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMp
CisgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8PCAiOiAiIDw8IHZhbHVl
IDw8ICdcbic7CisgICAgfQorICAgIGlmICghZmVhdHVyZXMuc3RyaW5nVmVjdG9yRmVhdHVyZXMu
ZW1wdHkoKSkgeworICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgU3RyaW5nIFZlY3RvciBGZWF0dXJl
czogXG4iOworICAgICAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVyZXMuc3RyaW5n
VmVjdG9yRmVhdHVyZXMpCisgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8
PCAiOiBOdW1iZXIgb2Ygc3RyaW5ncyAiIDw8IHZhbHVlLnNpemUoKSA8PCAnXG4nOworICAgIH0K
IH0KKyNlbmRpZgogCi1zdGF0aWMgYm9vbCBzaG91bGRNYWtlVmlld3BvcnRGbGV4aWJsZShjb25z
dCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQorZW51bSBjbGFzcyBLZXlUeXBlIHsKKyAgICBCb29s
LAorICAgIERvdWJsZSwKKyAgICBTdHJpbmcsCisgICAgU3RyaW5nUmVsYXRpdmVQYXRoLAorICAg
IFN0cmluZ1VSTCwKKyAgICBTdHJpbmdWZWN0b3IsCisgICAgVW5rbm93bgorfTsKKworc3RhdGlj
IEtleVR5cGUga2V5VHlwZShzdGQ6OnN0cmluZyBrZXkpCiB7Ci0gICAgcmV0dXJuIHBhdGhDb250
YWlucyhwYXRoT3JVUkwsICJ2aWV3cG9ydC8iKSAmJiAhcGF0aENvbnRhaW5zKHBhdGhPclVSTCwg
InZpc3VhbC12aWV3cG9ydC8iKTsKKyAgICBzdGF0aWMgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6
c3RyaW5nLCBLZXlUeXBlPiBrZXlUeXBlTWFwIHsKKyAgICAgICAgeyAidXNlVGhyZWFkZWRTY3Jv
bGxpbmciLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInVzZUFjY2VsZXJhdGVkRHJhd2lu
ZyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAidXNlUmVtb3RlTGF5ZXJUcmVlIiwgS2V5
VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJzaG91bGRTaG93V2ViVmlldyIsIEtleVR5cGU6OkJv
b2wgfSwKKyAgICAgICAgeyAidXNlRmxleGlibGVWaWV3cG9ydCIsIEtleVR5cGU6OkJvb2wgfSwK
KyAgICAgICAgeyAiaXNTVkdUZXN0IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VE
YXRhRGV0ZWN0aW9uIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VNb2NrU2Nyb2xs
YmFycyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAibmVlZHNTaXRlU3BlY2lmaWNRdWly
a3MiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImlnbm9yZXNWaWV3cG9ydFNjYWxlTGlt
aXRzIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VDaGFyYWN0ZXJTZWxlY3Rpb25H
cmFudWxhcml0eSIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQXR0YWNobWVu
dEVsZW1lbnQiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUludGVyc2VjdGlv
bk9ic2VydmVyIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VFcGhlbWVyYWxTZXNz
aW9uIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVNZW51SXRlbUVsZW1lbnQi
LCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUtleWdlbkVsZW1lbnQiLCBLZXlU
eXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMiLCBLZXlU
eXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZVBvaW50ZXJMb2NrIiwgS2V5VHlwZTo6Qm9v
bCB9LAorICAgICAgICB7ICJlbmFibGVXZWJBdXRoZW50aWNhdGlvbiIsIEtleVR5cGU6OkJvb2wg
fSwKKyAgICAgICAgeyAiZW5hYmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3Ii
LCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyIs
IEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAic2hvdWxkU2hvd1RvdWNoZXMiLCBLZXlUeXBl
OjpCb29sIH0sCisgICAgICAgIHsgImR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIsIEtleVR5cGU6
OkJvb2wgfSwKKyAgICAgICAgeyAiYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9y
Q3JlZGVudGlhbHMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImRvbVBhc3RlQWxsb3dl
ZCIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQ29sb3JGaWx0ZXIiLCBLZXlU
eXBlOjpCb29sIH0sCisgICAgICAgIHsgInB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01v
ZGUiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInJ1blNpbmdseSIsIEtleVR5cGU6OkJv
b2wgfSwKKyAgICAgICAgeyAiY2hlY2tGb3JXb3JsZExlYWtzIiwgS2V5VHlwZTo6Qm9vbCB9LAor
ICAgICAgICB7ICJzaG91bGRJZ25vcmVNZXRhVmlld3BvcnQiLCBLZXlUeXBlOjpCb29sIH0sCisg
ICAgICAgIHsgInNwZWxsQ2hlY2tpbmdEb3RzIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7
ICJlbmFibGVTZXJ2aWNlQ29udHJvbHMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVk
aXRhYmxlIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJzaG91bGRIYW5kbGVSdW5PcGVu
UGFuZWwiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInNob3VsZFByZXNlbnRQb3BvdmVy
cyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQXBwTmFwIiwgS2V5VHlwZTo6
Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVCYWNrRm9yd2FyZENhY2hlIiwgS2V5VHlwZTo6Qm9v
bCB9LAorICAgICAgICB7ICJhbGxvd3NMaW5rUHJldmlldyIsIEtleVR5cGU6OkJvb2wgfSwKKyAg
ICAgICAgeyAiZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MiLCBLZXlUeXBlOjpCb29sIH0s
CisgICAgICAgIHsgImVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2VzcyIsIEtleVR5cGU6OkJv
b2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQ2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3MiLCBLZXlUeXBl
OjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUNhcHR1cmVBdWRpb0luR1BVUHJvY2VzcyIsIEtl
eVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyIs
IEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlSW5BcHBCcm93c2VyUHJpdmFjeSIs
IEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiaXNBcHBCb3VuZFdlYlZpZXciLCBLZXlUeXBl
OjpCb29sIH0sCisgICAgICAgIHsgImlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMi
LCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0
aW9uIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVQcm9jZXNzU3dhcE9uV2lu
ZG93T3BlbiIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAidXNlU2VydmljZVdvcmtlclNo
b3J0VGltZW91dCIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAKKyAgICAgICAgeyAiY29udGVudElu
c2V0LnRvcCIsIEtleVR5cGU6OkRvdWJsZSB9LAorICAgICAgICB7ICJkZXZpY2VTY2FsZUZhY3Rv
ciIsIEtleVR5cGU6OkRvdWJsZSB9LAorCisgICAgICAgIHsgImpzY09wdGlvbnMiLCBLZXlUeXBl
OjpTdHJpbmcgfSwKKyAgICAgICAgeyAiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMiLCBL
ZXlUeXBlOjpTdHJpbmcgfSwKKyAgICAgICAgeyAiY29udGVudE1vZGUiLCBLZXlUeXBlOjpTdHJp
bmcgfSwKKyAgICAgICAgeyAiYXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyIiwgS2V5VHlwZTo6
U3RyaW5nIH0sCisgICAgICAgIHsgImFwcGxpY2F0aW9uTWFuaWZlc3QiLCBLZXlUeXBlOjpTdHJp
bmdSZWxhdGl2ZVBhdGggfSwKKyAgICAgICAgeyAic3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJM
IiwgS2V5VHlwZTo6U3RyaW5nVVJMIH0sCisKKyAgICAgICAgeyAibGFuZ3VhZ2UiLCBLZXlUeXBl
OjpTdHJpbmdWZWN0b3IgfSwKKyAgICB9OworICAgIAorICAgIGF1dG8gaXQgPSBrZXlUeXBlTWFw
LmZpbmQoa2V5KTsKKyAgICBpZiAoaXQgPT0ga2V5VHlwZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0
dXJuIEtleVR5cGU6OlVua25vd247CisgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CiB9CiAKLXN0YXRp
YyBib29sIHNob3VsZFVzZUZpeGVkTGF5b3V0KGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwp
CitzdGF0aWMgYm9vbCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUoY29uc3Qgc3RkOjpzdHJp
bmcmIHZhbHVlKQogewotI2lmIEVOQUJMRShDU1NfREVWSUNFX0FEQVBUQVRJT04pCi0gICAgaWYg
KHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJkZXZpY2UtYWRhcHQvIikgfHwgcGF0aENvbnRhaW5z
KHBhdGhPclVSTCwgImRldmljZS1hZGFwdFxcIikpCisgICAgaWYgKHZhbHVlID09ICJ0cnVlIikK
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKKyAgICBpZiAodmFsdWUgPT0gImZhbHNlIikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTE9HX0VSUk9SKCJGb3VuZCB1bmV4cGVjdGVk
IHZhbHVlICclcycgZm9yIGJvb2xlYW4gb3B0aW9uLiBFeHBlY3RlZCAndHJ1ZScgb3IgJ2ZhbHNl
Jy4iLCB2YWx1ZS5jX3N0cigpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBib29s
IGlzU1ZHVGVzdFBhdGgoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKK3N0YXRpYyBzdGQ6
OnN0cmluZyBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzUmVsYXRpdmVQYXRoKGNvbnN0IHN0
ZDo6c3RyaW5nJiB2YWx1ZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKK3sKKyAgICBh
dXRvIGJhc2VVUkwgPSBhZG9wdFdLKFRlc3RDb250cm9sbGVyOjpjcmVhdGVUZXN0VVJMKHBhdGhP
clVSTC5jX3N0cigpKSk7CisgICAgYXV0byByZWxhdGl2ZVVSTCA9IGFkb3B0V0soV0tVUkxDcmVh
dGVXaXRoQmFzZVVSTChiYXNlVVJMLmdldCgpLCB2YWx1ZS5jX3N0cigpKSk7CisgICAgcmV0dXJu
IHRvU1REKGFkb3B0V0soV0tVUkxDb3B5UGF0aChyZWxhdGl2ZVVSTC5nZXQoKSkpKTsKK30KKwor
c3RhdGljIHN0ZDo6c3RyaW5nIHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNVUkwoY29uc3Qg
c3RkOjpzdHJpbmcmIHZhbHVlKQogewotICAgIHJldHVybiBwYXRoQ29udGFpbnMocGF0aE9yVVJM
LCAic3ZnL1czQy1TVkctMS4xIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInN2Z1xcVzND
LVNWRy0xLjEiKTsKKyAgICByZXR1cm4gdG9TVEQoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcoVGVz
dENvbnRyb2xsZXI6OmNyZWF0ZVRlc3RVUkwodmFsdWUuY19zdHIoKSkpKSk7CiB9CiAKLXN0YXRp
YyBib29sIHNob3VsZFVzZUVwaGVtZXJhbFNlc3Npb24oY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhP
clVSTCkKK3N0YXRpYyBUZXN0RmVhdHVyZXMgcGFyc2VUZXN0SGVhZGVyKHN0ZDo6ZmlsZXN5c3Rl
bTo6cGF0aCBwYXRoLCBjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQogewotICAgIHJldHVy
biBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAidzNjL0luZGV4ZWREQi1wcml2YXRlLWJyb3dzaW5n
IikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInczY1xcSW5kZXhlZERCLXByaXZhdGUtYnJv
d3NpbmciKTsKKyAgICBUZXN0RmVhdHVyZXMgZmVhdHVyZXM7CisgICAgaWYgKCFzdGQ6OmZpbGVz
eXN0ZW06OmV4aXN0cyhwYXRoKSkKKyAgICAgICAgcmV0dXJuIGZlYXR1cmVzOworCisgICAgc3Rk
OjppZnN0cmVhbSBmaWxlKHBhdGgpOworICAgIGlmICghZmlsZS5nb29kKCkpIHsKKyAgICAgICAg
TE9HX0VSUk9SKCJDb3VsZCBub3Qgb3BlbiBmaWxlIHRvIGluc3BlY3QgdGVzdCBoZWFkZXJzIGlu
ICVzIiwgcGF0aC5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIGZlYXR1cmVzOworICAgIH0KKwor
ICAgIHN0ZDo6c3RyaW5nIG9wdGlvbnM7CisgICAgZ2V0bGluZShmaWxlLCBvcHRpb25zKTsKKyAg
ICBzdGQ6OnN0cmluZyBiZWdpblN0cmluZygid2Via2l0LXRlc3QtcnVubmVyIFsgIik7CisgICAg
c3RkOjpzdHJpbmcgZW5kU3RyaW5nKCIgXSIpOworICAgIHNpemVfdCBiZWdpbkxvY2F0aW9uID0g
b3B0aW9ucy5maW5kKGJlZ2luU3RyaW5nKTsKKyAgICBpZiAoYmVnaW5Mb2NhdGlvbiA9PSBzdGQ6
OnN0cmluZzo6bnBvcykKKyAgICAgICAgcmV0dXJuIGZlYXR1cmVzOworICAgIHNpemVfdCBlbmRM
b2NhdGlvbiA9IG9wdGlvbnMuZmluZChlbmRTdHJpbmcsIGJlZ2luTG9jYXRpb24pOworICAgIGlm
IChlbmRMb2NhdGlvbiA9PSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgICBMT0dfRVJST1Io
IkNvdWxkIG5vdCBmaW5kIGVuZCBvZiB0ZXN0IGhlYWRlciBpbiAlcyIsIHBhdGguY19zdHIoKSk7
CisgICAgICAgIHJldHVybiBmZWF0dXJlczsKKyAgICB9CisgICAgc3RkOjpzdHJpbmcgcGFpclN0
cmluZyA9IG9wdGlvbnMuc3Vic3RyKGJlZ2luTG9jYXRpb24gKyBiZWdpblN0cmluZy5zaXplKCks
IGVuZExvY2F0aW9uIC0gKGJlZ2luTG9jYXRpb24gKyBiZWdpblN0cmluZy5zaXplKCkpKTsKKyAg
ICBzaXplX3QgcGFpclN0YXJ0ID0gMDsKKyAgICB3aGlsZSAocGFpclN0YXJ0IDwgcGFpclN0cmlu
Zy5zaXplKCkpIHsKKyAgICAgICAgc2l6ZV90IHBhaXJFbmQgPSBwYWlyU3RyaW5nLmZpbmQoIiAi
LCBwYWlyU3RhcnQpOworICAgICAgICBpZiAocGFpckVuZCA9PSBzdGQ6OnN0cmluZzo6bnBvcykK
KyAgICAgICAgICAgIHBhaXJFbmQgPSBwYWlyU3RyaW5nLnNpemUoKTsKKyAgICAgICAgc2l6ZV90
IGVxdWFsc0xvY2F0aW9uID0gcGFpclN0cmluZy5maW5kKCI9IiwgcGFpclN0YXJ0KTsKKyAgICAg
ICAgaWYgKGVxdWFsc0xvY2F0aW9uID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICAgICAg
ICBMT0dfRVJST1IoIk1hbGZvcm1lZCBvcHRpb24gaW4gdGVzdCBoZWFkZXIgKGNvdWxkIG5vdCBm
aW5kICc9JyBjaGFyYWN0ZXIpIGluICVzIiwgcGF0aC5jX3N0cigpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGF1dG8ga2V5ID0gcGFpclN0cmluZy5zdWJzdHIocGFp
clN0YXJ0LCBlcXVhbHNMb2NhdGlvbiAtIHBhaXJTdGFydCk7CisgICAgICAgIGF1dG8gdmFsdWUg
PSBwYWlyU3RyaW5nLnN1YnN0cihlcXVhbHNMb2NhdGlvbiArIDEsIHBhaXJFbmQgLSAoZXF1YWxz
TG9jYXRpb24gKyAxKSk7CisKKyAgICAgICAgaWYgKGtleS5yZmluZCgiZXhwZXJpbWVudGFsOiIp
ID09IDApIHsKKyAgICAgICAgICAgIGtleSA9IGtleS5zdWJzdHIoMTMpOworICAgICAgICAgICAg
ZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBwYXJzZUJvb2xlYW5U
ZXN0SGVhZGVyVmFsdWUodmFsdWUpIH0pOworICAgICAgICB9IGVsc2UgaWYgKGtleS5yZmluZCgi
aW50ZXJuYWw6IikgPT0gMCkgeworICAgICAgICAgICAga2V5ID0ga2V5LnN1YnN0cig5KTsKKyAg
ICAgICAgICAgIGZlYXR1cmVzLmludGVybmFsRGVidWdGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHBh
cnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSkgfSk7CisgICAgICAgIH0KKworICAgICAg
ICBzd2l0Y2ggKGtleVR5cGUoa2V5KSkgeworICAgICAgICBjYXNlIEtleVR5cGU6OkJvb2w6Cisg
ICAgICAgICAgICBmZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBwYXJzZUJvb2xl
YW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpIH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgS2V5VHlwZTo6RG91YmxlOgorICAgICAgICAgICAgZmVhdHVyZXMuZG91YmxlRmVhdHVy
ZXMuaW5zZXJ0KHsga2V5LCBzdGQ6OnN0b2QodmFsdWUpIH0pOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nOgorICAgICAgICAgICAgZmVhdHVyZXMuc3Ry
aW5nRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCB2YWx1ZSB9KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEtleVR5cGU6OlN0cmluZ1JlbGF0aXZlUGF0aDoKKyAgICAgICAgICAgIGZl
YXR1cmVzLnN0cmluZ0ZlYXR1cmVzLmluc2VydCh7IGtleSwgcGFyc2VTdHJpbmdUZXN0SGVhZGVy
VmFsdWVBc1JlbGF0aXZlUGF0aCh2YWx1ZSwgcGF0aE9yVVJMKSB9KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEtleVR5cGU6OlN0cmluZ1VSTDoKKyAgICAgICAgICAgIGZlYXR1
cmVzLnN0cmluZ0ZlYXR1cmVzLmluc2VydCh7IGtleSwgcGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFs
dWVBc1VSTCh2YWx1ZSkgfSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBLZXlU
eXBlOjpTdHJpbmdWZWN0b3I6CisgICAgICAgICAgICBmZWF0dXJlcy5zdHJpbmdWZWN0b3JGZWF0
dXJlcy5pbnNlcnQoeyBrZXksIHNwbGl0KHZhbHVlLCAnLCcpIH0pOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgS2V5VHlwZTo6VW5rbm93bjoKKyAgICAgICAgICAgIExPR19FUlJP
UigiVW5rbm93biBrZXksICclcywgaW4gdGVzdCBoZWFkZXIgaW4gJXMiLCBrZXkuY19zdHIoKSwg
cGF0aC5jX3N0cigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
cGFpclN0YXJ0ID0gcGFpckVuZCArIDE7CisgICAgfQorCisgICAgcmV0dXJuIGZlYXR1cmVzOwor
fQorCitzdGF0aWMgYm9vbCBwYXRoQ29udGFpbnMoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVS
TCwgY29uc3QgY2hhciogc3Vic3RyaW5nKQoreworICAgIFN0cmluZyBwYXRoKHBhdGhPclVSTC5j
X3N0cigpKTsKKyAgICByZXR1cm4gcGF0aC5jb250YWlucyhzdWJzdHJpbmcpOyAvLyBDYXNlLWlu
c2Vuc2l0aXZlLgogfQogCi1zdGF0aWMgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3JGb3JUZXN0KGNv
bnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCitzdGF0aWMgT3B0aW9uYWw8ZG91YmxlPiBkZXZp
Y2VTY2FsZUZhY3RvckZvclRlc3QoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKIHsKICAg
ICBpZiAocGF0aENvbnRhaW5zKHBhdGhPclVSTCwgIi9oaWRwaS0zeC0iKSkKICAgICAgICAgcmV0
dXJuIDM7CiAgICAgaWYgKHBhdGhDb250YWlucyhwYXRoT3JVUkwsICIvaGlkcGktIikpCiAgICAg
ICAgIHJldHVybiAyOwotICAgIHJldHVybiAxOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9
CiAKIHN0YXRpYyBib29sIHNob3VsZER1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihjb25zdCBzdGQ6
OnN0cmluZyYgcGF0aE9yVVJMKQpAQCAtODMsMTQgKzI4OSw2NiBAQCBzdGF0aWMgYm9vbCBzaG91
bGREdW1wSlNDb25zb2xlTG9nSW5TdGRFCiAgICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JV
UkwsICJsb2NhbGhvc3Q6ODgwMC93ZWJzb2NrZXRzIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVS
TCwgImxvY2FsaG9zdDo5NDQzL3dlYnNvY2tldHMiKTsKIH0KIAotVGVzdE9wdGlvbnM6OlRlc3RP
cHRpb25zKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCi0gICAgOiB1c2VGbGV4aWJsZVZp
ZXdwb3J0KHNob3VsZE1ha2VWaWV3cG9ydEZsZXhpYmxlKHBhdGhPclVSTCkpCi0gICAgLCB1c2VG
aXhlZExheW91dChzaG91bGRVc2VGaXhlZExheW91dChwYXRoT3JVUkwpKQotICAgICwgaXNTVkdU
ZXN0KGlzU1ZHVGVzdFBhdGgocGF0aE9yVVJMKSkKLSAgICAsIHVzZUVwaGVtZXJhbFNlc3Npb24o
c2hvdWxkVXNlRXBoZW1lcmFsU2Vzc2lvbihwYXRoT3JVUkwpKQotICAgICwgZHVtcEpTQ29uc29s
ZUxvZ0luU3RkRXJyKHNob3VsZER1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihwYXRoT3JVUkwpKQot
ICAgICwgZGV2aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3JGb3JUZXN0KHBhdGhPclVS
TCkpCitUZXN0RmVhdHVyZXMgaGFyZGNvZGVkRmVhdHVyZXNCYXNlZE9uUGF0aEZvclRlc3QoY29u
c3QgVGVzdENvbW1hbmQmIGNvbW1hbmQpCit7CisgICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVzOwor
CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCB0cnkgdG8gcmVwbGFjZSB0aGUgcmVzZXQgb2YgdGhl
c2Ugd2l0aCBUZXN0T3B0aW9ucy50eHQgYmFzZWQgc29sdXRpb25zLgorCisgICAgaWYgKHNob3Vs
ZER1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihjb21tYW5kLnBhdGhPclVSTCkpCisgICAgICAgIGZl
YXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAiZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIiwg
dHJ1ZSB9KTsKKyAgICBpZiAoYXV0byBkZXZpY2VTY2FsZUZhY3RvciA9IGRldmljZVNjYWxlRmFj
dG9yRm9yVGVzdChjb21tYW5kLnBhdGhPclVSTCk7IGRldmljZVNjYWxlRmFjdG9yICE9IFdURjo6
bnVsbG9wdCkKKyAgICAgICAgZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMuaW5zZXJ0KHsgImRldmlj
ZVNjYWxlRmFjdG9yIiwgZGV2aWNlU2NhbGVGYWN0b3IudmFsdWUoKSB9KTsKKworICAgIHJldHVy
biBmZWF0dXJlczsKK30KKwordm9pZCBtZXJnZShUZXN0RmVhdHVyZXMmIGJhc2UsIFRlc3RGZWF0
dXJlcyBhZGRpdGlvbmFsKQoreworICAgIGFkZGl0aW9uYWwuZXhwZXJpbWVudGFsRmVhdHVyZXMu
bWVyZ2UoYmFzZS5leHBlcmltZW50YWxGZWF0dXJlcyk7CisgICAgYWRkaXRpb25hbC5pbnRlcm5h
bERlYnVnRmVhdHVyZXMubWVyZ2UoYmFzZS5pbnRlcm5hbERlYnVnRmVhdHVyZXMpOworICAgIGFk
ZGl0aW9uYWwuYm9vbEZlYXR1cmVzLm1lcmdlKGJhc2UuYm9vbEZlYXR1cmVzKTsKKyAgICBhZGRp
dGlvbmFsLmRvdWJsZUZlYXR1cmVzLm1lcmdlKGJhc2UuZG91YmxlRmVhdHVyZXMpOworICAgIGFk
ZGl0aW9uYWwuc3RyaW5nRmVhdHVyZXMubWVyZ2UoYmFzZS5zdHJpbmdGZWF0dXJlcyk7CisgICAg
YWRkaXRpb25hbC5zdHJpbmdWZWN0b3JGZWF0dXJlcy5tZXJnZShiYXNlLnN0cmluZ1ZlY3RvckZl
YXR1cmVzKTsKKyAgICBiYXNlID0gYWRkaXRpb25hbDsKK30KKworVGVzdEZlYXR1cmVzIGZlYXR1
cmVEZWZhdWx0c0Zyb21UZXN0T3B0aW9uc0ZpbGVzRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYg
Y29tbWFuZCkKK3sKKyAgICBzdGQ6OmZpbGVzeXN0ZW06OnBhdGggcGF0aCA9IGNvbW1hbmQuYWJz
b2x1dGVQYXRoOworCisgICAgLy8gR2F0aGVyIGRpcmVjdG9yaWVzIHRoYXQgbWF5IGNvbnRhaW4g
VGVzdEhlYWRlcnMgZmlsZXMuCisgICAgc3RkOjp2ZWN0b3I8c3RkOjpmaWxlc3lzdGVtOjpwYXRo
PiBkaXJlY3Rvcmllc1RvQ2hlY2s7CisgICAgZG8geworICAgICAgICBwYXRoID0gcGF0aC5wYXJl
bnRfcGF0aCgpOworICAgICAgICBkaXJlY3Rvcmllc1RvQ2hlY2sucHVzaF9iYWNrKHBhdGgpOwor
ICAgIH0gd2hpbGUgKHBhdGguZmlsZW5hbWUoKSAhPSAiTGF5b3V0VGVzdHMiKTsKKworICAgIC8v
IEl0ZXJhdGUgdGhlIGRpcmVjdG9yaWVzIHRoYXQgbWF5IGNvbnRhaW4gJ1Rlc3RPcHRpb25zLnR4
dCcgZmlsZXMgZnJvbSBsZWFzdCB0byBtb3N0CisgICAgLy8gc3BlY2lmaWMsIGFuZCBtZXJnZSBp
biBhbnkgZmVhdHVyZXMgZm91bmQuCisgICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVzOworICAgIGZv
ciAoYXV0byBkaXJlY3RvcnlUb0NoZWNrIDogV1RGOjptYWtlUmV2ZXJzZWRSYW5nZShkaXJlY3Rv
cmllc1RvQ2hlY2spKSB7CisgICAgICAgIGF1dG8gdGVzdEhlYWRlckZpbGUgPSBkaXJlY3RvcnlU
b0NoZWNrIC8gIlRlc3RPcHRpb25zLnR4dCI7CisgICAgICAgIGF1dG8gdGVzdE9wdGlvbnNGZWF0
dXJlcyA9IHBhcnNlVGVzdEhlYWRlcih0ZXN0SGVhZGVyRmlsZSwgY29tbWFuZC5wYXRoT3JVUkwp
OworICAgICAgICBtZXJnZShmZWF0dXJlcywgdGVzdE9wdGlvbnNGZWF0dXJlcyk7CisgICAgfQor
ICAgIAorICAgIHJldHVybiBmZWF0dXJlczsKK30KKworVGVzdEZlYXR1cmVzIGZlYXR1cmVEZWZh
dWx0c0Zyb21UZXN0SGVhZGVyRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYgY29tbWFuZCkKIHsK
KyAgICByZXR1cm4gcGFyc2VUZXN0SGVhZGVyKGNvbW1hbmQuYWJzb2x1dGVQYXRoLCBjb21tYW5k
LnBhdGhPclVSTCk7Cit9CisKK1Rlc3RPcHRpb25zOjpUZXN0T3B0aW9ucyhUZXN0RmVhdHVyZXMg
ZmVhdHVyZXMpCisgICAgOiBtX2ZlYXR1cmVzIHsgZmVhdHVyZXMgfQoreworI2lmIERVTVBfRkVB
VFVSRVMKKyAgICBzdGQ6OmNlcnIgPDwgIkRVTVBJTkcgRkVBVFVSRVNcbiI7CisgICAgZHVtcEZl
YXR1cmVzKG1fZmVhdHVyZXMpOworI2VuZGlmCiB9CiAKIH0KSW5kZXg6IFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdE9wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL1Rlc3RPcHRpb25zLmgJKHJldmlzaW9uIDI2Nzg4NSkKKysrIFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdE9wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTY1ICsyNSwxNzYgQEAK
IAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8b3B0aW9uYWw+CisjaW5jbHVkZSA8c3Ry
aW5nPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisjaW5jbHVkZSA8dmVjdG9yPgogCiBuYW1l
c3BhY2UgV1RSIHsKIAotc3RydWN0IFRlc3RPcHRpb25zIHsKLSAgICBzdHJ1Y3QgQ29udGV4dE9w
dGlvbnMgewotICAgICAgICBWZWN0b3I8U3RyaW5nPiBvdmVycmlkZUxhbmd1YWdlczsKLSAgICAg
ICAgYm9vbCBpZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzIHsgZmFsc2UgfTsKLSAg
ICAgICAgYm9vbCBlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbiB7IHRydWUgfTsKLSAgICAg
ICAgYm9vbCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiB7IGZhbHNlIH07Ci0gICAgICAg
IGJvb2wgdXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dCB7IGZhbHNlIH07Ci0KLSAgICAgICAg
Ym9vbCBoYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25zKGNvbnN0IENvbnRleHRPcHRpb25zJiBv
cHRpb25zKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaWdub3JlU3luY2hyb25v
dXNNZXNzYWdpbmdUaW1lb3V0cyAhPSBvcHRpb25zLmlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5n
VGltZW91dHMKLSAgICAgICAgICAgICAgICB8fCBvdmVycmlkZUxhbmd1YWdlcyAhPSBvcHRpb25z
Lm92ZXJyaWRlTGFuZ3VhZ2VzCi0gICAgICAgICAgICAgICAgfHwgZW5hYmxlUHJvY2Vzc1N3YXBP
bk5hdmlnYXRpb24gIT0gb3B0aW9ucy5lbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbgotICAg
ICAgICAgICAgICAgIHx8IGVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuICE9IG9wdGlvbnMu
ZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW4KLSAgICAgICAgICAgICAgICB8fCB1c2VTZXJ2
aWNlV29ya2VyU2hvcnRUaW1lb3V0ICE9IG9wdGlvbnMudXNlU2VydmljZVdvcmtlclNob3J0VGlt
ZW91dCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgc2hvdWxkRW5hYmxlUHJvY2Vzc1N3YXBP
bk5hdmlnYXRpb24oKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZW5hYmxl
UHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24gfHwgZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW47
Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgYm9vbCB1c2VUaHJlYWRlZFNjcm9sbGluZyB7IGZh
bHNlIH07Ci0gICAgYm9vbCB1c2VBY2NlbGVyYXRlZERyYXdpbmcgeyBmYWxzZSB9OwotICAgIGJv
b2wgdXNlUmVtb3RlTGF5ZXJUcmVlIHsgZmFsc2UgfTsKLSAgICBib29sIHNob3VsZFNob3dXZWJW
aWV3IHsgZmFsc2UgfTsKLSAgICBib29sIHVzZUZsZXhpYmxlVmlld3BvcnQgeyBmYWxzZSB9Owot
ICAgIGJvb2wgdXNlRml4ZWRMYXlvdXQgeyBmYWxzZSB9OwotICAgIGJvb2wgaXNTVkdUZXN0IHsg
ZmFsc2UgfTsKLSAgICBib29sIHVzZURhdGFEZXRlY3Rpb24geyBmYWxzZSB9OwotICAgIGJvb2wg
dXNlTW9ja1Njcm9sbGJhcnMgeyB0cnVlIH07Ci0gICAgYm9vbCBuZWVkc1NpdGVTcGVjaWZpY1F1
aXJrcyB7IGZhbHNlIH07Ci0gICAgYm9vbCBpZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyB7IGZh
bHNlIH07Ci0gICAgYm9vbCB1c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0eSB7IGZhbHNl
IH07Ci0gICAgYm9vbCBlbmFibGVBdHRhY2htZW50RWxlbWVudCB7IGZhbHNlIH07Ci0gICAgYm9v
bCBlbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciB7IGZhbHNlIH07Ci0gICAgYm9vbCB1c2VFcGhl
bWVyYWxTZXNzaW9uIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZU1lbnVJdGVtRWxlbWVudCB7
IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVLZXlnZW5FbGVtZW50IHsgZmFsc2UgfTsKLSAgICBi
b29sIGVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMgeyB0cnVlIH07Ci0gICAgYm9vbCBlbmFibGVQ
b2ludGVyTG9jayB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVXZWJBdXRoZW50aWNhdGlvbiB7
IHRydWUgfTsKLSAgICBib29sIGVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNh
dG9yIHsgdHJ1ZSB9OwotICAgIGJvb2wgZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zIHsgZmFsc2Ug
fTsKLSAgICBib29sIHNob3VsZFNob3dUb3VjaGVzIHsgZmFsc2UgfTsKLSAgICBib29sIGR1bXBK
U0NvbnNvbGVMb2dJblN0ZEVyciB7IGZhbHNlIH07Ci0gICAgYm9vbCBhbGxvd0Nyb3NzT3JpZ2lu
U3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyB7IGZhbHNlIH07Ci0gICAgYm9vbCBkb21Q
YXN0ZUFsbG93ZWQgeyB0cnVlIH07Ci0gICAgYm9vbCBlbmFibGVDb2xvckZpbHRlciB7IGZhbHNl
IH07Ci0gICAgYm9vbCBwdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlIHsgZmFsc2Ug
fTsKLSAgICBib29sIHJ1blNpbmdseSB7IGZhbHNlIH07Ci0gICAgYm9vbCBjaGVja0Zvcldvcmxk
TGVha3MgeyBmYWxzZSB9OwotICAgIGJvb2wgc2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0IHsgZmFs
c2UgfTsKLSAgICBib29sIHNob3VsZFNob3dTcGVsbENoZWNraW5nRG90cyB7IGZhbHNlIH07Ci0g
ICAgYm9vbCBlbmFibGVTZXJ2aWNlQ29udHJvbHMgeyBmYWxzZSB9OwotICAgIGJvb2wgZWRpdGFi
bGUgeyBmYWxzZSB9OwotICAgIGJvb2wgc2hvdWxkSGFuZGxlUnVuT3BlblBhbmVsIHsgdHJ1ZSB9
OwotICAgIGJvb2wgc2hvdWxkUHJlc2VudFBvcG92ZXJzIHsgdHJ1ZSB9OwotICAgIGJvb2wgZW5h
YmxlQXBwTmFwIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUgeyBm
YWxzZSB9OwotICAgIGJvb2wgYWxsb3dzTGlua1ByZXZpZXcgeyB0cnVlIH07Ci0gICAgYm9vbCBl
bmFibGVDYXB0dXJlVmlkZW9JblVJUHJvY2VzcyB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVD
YXB0dXJlVmlkZW9JbkdQVVByb2Nlc3MgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlQ2FwdHVy
ZUF1ZGlvSW5VSVByb2Nlc3MgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlQ2FwdHVyZUF1ZGlv
SW5HUFVQcm9jZXNzIHsgZmFsc2UgfTsKLSAgICBib29sIGFsbG93VG9wTmF2aWdhdGlvblRvRGF0
YVVSTHMgeyB0cnVlIH07Ci0gICAgYm9vbCBlbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5IHsgZmFs
c2UgfTsKLSAgICBib29sIGlzQXBwQm91bmRXZWJWaWV3IHsgZmFsc2UgfTsKLQotICAgIGRvdWJs
ZSBjb250ZW50SW5zZXRUb3AgeyAwIH07Ci0KLSAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciB7
IDEgfTsKLSAgICBzdGQ6OnN0cmluZyBhcHBsaWNhdGlvbk1hbmlmZXN0OwotICAgIHN0ZDo6c3Ry
aW5nIGpzY09wdGlvbnM7Ci0gICAgc3RkOjpzdHJpbmcgYWRkaXRpb25hbFN1cHBvcnRlZEltYWdl
VHlwZXM7Ci0gICAgc3RkOjpzdHJpbmcgc3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMOwotICAg
IEhhc2hNYXA8U3RyaW5nLCBib29sPiBleHBlcmltZW50YWxGZWF0dXJlczsKLSAgICBIYXNoTWFw
PFN0cmluZywgYm9vbD4gaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzOwotICAgIFN0cmluZyBjb250ZW50
TW9kZTsKLSAgICBTdHJpbmcgYXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyOwotICAgIAotICAg
IENvbnRleHRPcHRpb25zIGNvbnRleHRPcHRpb25zOwotCi0gICAgVGVzdE9wdGlvbnMoY29uc3Qg
c3RkOjpzdHJpbmcmIHBhdGhPclVSTCk7Ci0KLSAgICAvLyBBZGQgaGVyZSBvcHRpb25zIHRoYXQg
Y2FuIG9ubHkgYmUgc2V0IHVwb24gUGxhdGZvcm1XZWJWaWV3Ci0gICAgLy8gaW5pdGlhbGl6YXRp
b24gYW5kIG1ha2Ugc3VyZSBpdCdzIHVwIHRvIGRhdGUgd2hlbiBhZGRpbmcgbmV3Ci0gICAgLy8g
b3B0aW9ucyB0byB0aGlzIHN0cnVjdC4gT3RoZXJ3aXNlLCB0ZXN0cyB1c2luZyB0aG9zZSBvcHRp
b25zCi0gICAgLy8gbWlnaHQgZmFpbCBpZiBXVFIgaXMgcmV1c2luZyBhbiBleGlzdGluZyBQbGF0
Zm9ybVdlYlZpZXcuCi0gICAgYm9vbCBoYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25zKGNvbnN0
IFRlc3RPcHRpb25zJiBvcHRpb25zKSBjb25zdAorc3RydWN0IFRlc3RDb21tYW5kOworCitzdHJ1
Y3QgVGVzdEZlYXR1cmVzIHsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJv
b2w+IGV4cGVyaW1lbnRhbEZlYXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0
cmluZywgYm9vbD4gaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21h
cDxzdGQ6OnN0cmluZywgYm9vbD4gYm9vbEZlYXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21h
cDxzdGQ6OnN0cmluZywgZG91YmxlPiBkb3VibGVGZWF0dXJlczsKKyAgICBzdGQ6OnVub3JkZXJl
ZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBzdHJpbmdGZWF0dXJlczsKKyAgICBzdGQ6
OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPj4gc3Ry
aW5nVmVjdG9yRmVhdHVyZXM7Cit9OworCit2b2lkIG1lcmdlKFRlc3RGZWF0dXJlcyYgYmFzZSwg
VGVzdEZlYXR1cmVzIGFkZGl0aW9uYWwpOworCitUZXN0RmVhdHVyZXMgaGFyZGNvZGVkRmVhdHVy
ZXNCYXNlZE9uUGF0aEZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKTsKK1Rlc3RGZWF0dXJlcyBm
ZWF0dXJlRGVmYXVsdHNGcm9tVGVzdE9wdGlvbnNGaWxlc0ZvclRlc3QoY29uc3QgVGVzdENvbW1h
bmQmKTsKK1Rlc3RGZWF0dXJlcyBmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3Qo
Y29uc3QgVGVzdENvbW1hbmQmKTsKKworc3RydWN0IENvbnRleHRPcHRpb25zIHsKKyAgICBzdGQ6
OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3ZlcnJpZGVMYW5ndWFnZXM7CisgICAgYm9vbCBpZ25vcmVT
eW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzOworICAgIGJvb2wgZW5hYmxlUHJvY2Vzc1N3YXBP
bk5hdmlnYXRpb247CisgICAgYm9vbCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbjsKKyAg
ICBib29sIHVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQ7CisKKyAgICBib29sIGhhc1NhbWVJ
bml0aWFsaXphdGlvbk9wdGlvbnMoY29uc3QgQ29udGV4dE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0
CiAgICAgewotICAgICAgICBpZiAodXNlVGhyZWFkZWRTY3JvbGxpbmcgIT0gb3B0aW9ucy51c2VU
aHJlYWRlZFNjcm9sbGluZwotICAgICAgICAgICAgfHwgdXNlQWNjZWxlcmF0ZWREcmF3aW5nICE9
IG9wdGlvbnMudXNlQWNjZWxlcmF0ZWREcmF3aW5nCi0gICAgICAgICAgICB8fCB1c2VNb2NrU2Ny
b2xsYmFycyAhPSBvcHRpb25zLnVzZU1vY2tTY3JvbGxiYXJzCi0gICAgICAgICAgICB8fCBuZWVk
c1NpdGVTcGVjaWZpY1F1aXJrcyAhPSBvcHRpb25zLm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzCi0g
ICAgICAgICAgICB8fCB1c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0eSAhPSBvcHRpb25z
LnVzZUNoYXJhY3RlclNlbGVjdGlvbkdyYW51bGFyaXR5Ci0gICAgICAgICAgICB8fCBlbmFibGVB
dHRhY2htZW50RWxlbWVudCAhPSBvcHRpb25zLmVuYWJsZUF0dGFjaG1lbnRFbGVtZW50Ci0gICAg
ICAgICAgICB8fCBlbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciAhPSBvcHRpb25zLmVuYWJsZUlu
dGVyc2VjdGlvbk9ic2VydmVyCi0gICAgICAgICAgICB8fCB1c2VFcGhlbWVyYWxTZXNzaW9uICE9
IG9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lvbgotICAgICAgICAgICAgfHwgZW5hYmxlTWVudUl0
ZW1FbGVtZW50ICE9IG9wdGlvbnMuZW5hYmxlTWVudUl0ZW1FbGVtZW50Ci0gICAgICAgICAgICB8
fCBlbmFibGVLZXlnZW5FbGVtZW50ICE9IG9wdGlvbnMuZW5hYmxlS2V5Z2VuRWxlbWVudAotICAg
ICAgICAgICAgfHwgZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyAhPSBvcHRpb25zLmVuYWJsZU1v
ZGVybk1lZGlhQ29udHJvbHMKLSAgICAgICAgICAgIHx8IGVuYWJsZVBvaW50ZXJMb2NrICE9IG9w
dGlvbnMuZW5hYmxlUG9pbnRlckxvY2sKLSAgICAgICAgICAgIHx8IGVuYWJsZVdlYkF1dGhlbnRp
Y2F0aW9uICE9IG9wdGlvbnMuZW5hYmxlV2ViQXV0aGVudGljYXRpb24KLSAgICAgICAgICAgIHx8
IGVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yICE9IG9wdGlvbnMuZW5h
YmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IKLSAgICAgICAgICAgIHx8IGVu
YWJsZUluc3BlY3RvckFkZGl0aW9ucyAhPSBvcHRpb25zLmVuYWJsZUluc3BlY3RvckFkZGl0aW9u
cwotICAgICAgICAgICAgfHwgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyICE9IG9wdGlvbnMuZHVt
cEpTQ29uc29sZUxvZ0luU3RkRXJyCi0gICAgICAgICAgICB8fCBhcHBsaWNhdGlvbk1hbmlmZXN0
ICE9IG9wdGlvbnMuYXBwbGljYXRpb25NYW5pZmVzdAotICAgICAgICAgICAgfHwgYWxsb3dDcm9z
c09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMgIT0gb3B0aW9ucy5hbGxvd0Ny
b3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscwotICAgICAgICAgICAgfHwg
ZG9tUGFzdGVBbGxvd2VkICE9IG9wdGlvbnMuZG9tUGFzdGVBbGxvd2VkCi0gICAgICAgICAgICB8
fCBlbmFibGVDb2xvckZpbHRlciAhPSBvcHRpb25zLmVuYWJsZUNvbG9yRmlsdGVyCi0gICAgICAg
ICAgICB8fCBwdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlICE9IG9wdGlvbnMucHVu
Y2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZQotICAgICAgICAgICAgfHwganNjT3B0aW9u
cyAhPSBvcHRpb25zLmpzY09wdGlvbnMKLSAgICAgICAgICAgIHx8IGFkZGl0aW9uYWxTdXBwb3J0
ZWRJbWFnZVR5cGVzICE9IG9wdGlvbnMuYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMKLSAg
ICAgICAgICAgIHx8IHJ1blNpbmdseSAhPSBvcHRpb25zLnJ1blNpbmdseQotICAgICAgICAgICAg
fHwgY2hlY2tGb3JXb3JsZExlYWtzICE9IG9wdGlvbnMuY2hlY2tGb3JXb3JsZExlYWtzCi0gICAg
ICAgICAgICB8fCBzaG91bGRTaG93U3BlbGxDaGVja2luZ0RvdHMgIT0gb3B0aW9ucy5zaG91bGRT
aG93U3BlbGxDaGVja2luZ0RvdHMKLSAgICAgICAgICAgIHx8IGVuYWJsZVNlcnZpY2VDb250cm9s
cyAhPSBvcHRpb25zLmVuYWJsZVNlcnZpY2VDb250cm9scwotICAgICAgICAgICAgfHwgc2hvdWxk
SWdub3JlTWV0YVZpZXdwb3J0ICE9IG9wdGlvbnMuc2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0Ci0g
ICAgICAgICAgICB8fCBlZGl0YWJsZSAhPSBvcHRpb25zLmVkaXRhYmxlCi0gICAgICAgICAgICB8
fCBzaG91bGRIYW5kbGVSdW5PcGVuUGFuZWwgIT0gb3B0aW9ucy5zaG91bGRIYW5kbGVSdW5PcGVu
UGFuZWwKLSAgICAgICAgICAgIHx8IHNob3VsZFByZXNlbnRQb3BvdmVycyAhPSBvcHRpb25zLnNo
b3VsZFByZXNlbnRQb3BvdmVycwotICAgICAgICAgICAgfHwgY29udGVudEluc2V0VG9wICE9IG9w
dGlvbnMuY29udGVudEluc2V0VG9wCi0gICAgICAgICAgICB8fCBjb250ZW50TW9kZSAhPSBvcHRp
b25zLmNvbnRlbnRNb2RlCi0gICAgICAgICAgICB8fCBhcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZp
ZXIgIT0gb3B0aW9ucy5hcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIKLSAgICAgICAgICAgIHx8
IGVuYWJsZUFwcE5hcCAhPSBvcHRpb25zLmVuYWJsZUFwcE5hcAotICAgICAgICAgICAgfHwgZW5h
YmxlQmFja0ZvcndhcmRDYWNoZSAhPSBvcHRpb25zLmVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUKLSAg
ICAgICAgICAgIHx8IGFsbG93c0xpbmtQcmV2aWV3ICE9IG9wdGlvbnMuYWxsb3dzTGlua1ByZXZp
ZXcKLSAgICAgICAgICAgIHx8IGVuYWJsZUNhcHR1cmVWaWRlb0luVUlQcm9jZXNzICE9IG9wdGlv
bnMuZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MKLSAgICAgICAgICAgIHx8IGVuYWJsZUNh
cHR1cmVWaWRlb0luR1BVUHJvY2VzcyAhPSBvcHRpb25zLmVuYWJsZUNhcHR1cmVWaWRlb0luR1BV
UHJvY2VzcwotICAgICAgICAgICAgfHwgZW5hYmxlQ2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3MgIT0g
b3B0aW9ucy5lbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcwotICAgICAgICAgICAgfHwgZW5h
YmxlQ2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzICE9IG9wdGlvbnMuZW5hYmxlQ2FwdHVyZUF1ZGlv
SW5HUFVQcm9jZXNzCi0gICAgICAgICAgICB8fCBhbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxz
ICE9IG9wdGlvbnMuYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcwotICAgICAgICAgICAgfHwg
ZW5hYmxlSW5BcHBCcm93c2VyUHJpdmFjeSAhPSBvcHRpb25zLmVuYWJsZUluQXBwQnJvd3NlclBy
aXZhY3kKLSAgICAgICAgICAgIHx8IHN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTCAhPSBvcHRp
b25zLnN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTAotICAgICAgICAgICAgfHwgaXNBcHBCb3Vu
ZFdlYlZpZXcgIT0gb3B0aW9ucy5pc0FwcEJvdW5kV2ViVmlldykKKyAgICAgICAgaWYgKGlnbm9y
ZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMgIT0gb3B0aW9ucy5pZ25vcmVTeW5jaHJvbm91
c01lc3NhZ2luZ1RpbWVvdXRzCisgICAgICAgICAgICB8fCBvdmVycmlkZUxhbmd1YWdlcyAhPSBv
cHRpb25zLm92ZXJyaWRlTGFuZ3VhZ2VzCisgICAgICAgICAgICB8fCBlbmFibGVQcm9jZXNzU3dh
cE9uTmF2aWdhdGlvbiAhPSBvcHRpb25zLmVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uCisg
ICAgICAgICAgICB8fCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiAhPSBvcHRpb25zLmVu
YWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuCisgICAgICAgICAgICB8fCB1c2VTZXJ2aWNlV29y
a2VyU2hvcnRUaW1lb3V0ICE9IG9wdGlvbnMudXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dCkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQog
Ci0gICAgICAgIGlmICghY29udGV4dE9wdGlvbnMuaGFzU2FtZUluaXRpYWxpemF0aW9uT3B0aW9u
cyhvcHRpb25zLmNvbnRleHRPcHRpb25zKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBib29sIHNob3VsZEVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbiB8fCBlbmFibGVQ
cm9jZXNzU3dhcE9uV2luZG93T3BlbjsKKyAgICB9Cit9OwogCi0gICAgICAgIGlmIChleHBlcmlt
ZW50YWxGZWF0dXJlcyAhPSBvcHRpb25zLmV4cGVyaW1lbnRhbEZlYXR1cmVzKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworY2xhc3MgVGVzdE9wdGlvbnMgeworcHVibGljOgorICAgIGV4cGxp
Y2l0IFRlc3RPcHRpb25zKFRlc3RGZWF0dXJlcyk7CiAKLSAgICAgICAgaWYgKGludGVybmFsRGVi
dWdGZWF0dXJlcyAhPSBvcHRpb25zLmludGVybmFsRGVidWdGZWF0dXJlcykKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBDb250ZXh0T3B0aW9ucyBjb250ZXh0T3B0aW9ucygpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgb3ZlcnJpZGVMYW5ndWFnZXMo
KSwKKyAgICAgICAgICAgIGlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMoKSwKKyAg
ICAgICAgICAgIGVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uKCksCisgICAgICAgICAgICBl
bmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbigpLAorICAgICAgICAgICAgdXNlU2VydmljZVdv
cmtlclNob3J0VGltZW91dCgpCisgICAgICAgIH07CisgICAgfQorCisgICAgYm9vbCB1c2VUaHJl
YWRlZFNjcm9sbGluZygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInVzZVRocmVh
ZGVkU2Nyb2xsaW5nIiwgZmFsc2UpOyB9CisgICAgYm9vbCB1c2VBY2NlbGVyYXRlZERyYXdpbmco
KSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJ1c2VBY2NlbGVyYXRlZERyYXdpbmci
LCBmYWxzZSk7IH0KKyAgICBib29sIHVzZVJlbW90ZUxheWVyVHJlZSgpIGNvbnN0IHsgcmV0dXJu
IGJvb2xGZWF0dXJlVmFsdWUoInVzZVJlbW90ZUxheWVyVHJlZSIsIGZhbHNlKTsgfQorICAgIGJv
b2wgc2hvdWxkU2hvd1dlYlZpZXcoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJz
aG91bGRTaG93V2ViVmlldyIsIGZhbHNlKTsgfQorICAgIGJvb2wgdXNlRmxleGlibGVWaWV3cG9y
dCgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInVzZUZsZXhpYmxlVmlld3BvcnQi
LCBmYWxzZSk7IH0KKyAgICBib29sIGlzU1ZHVGVzdCgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0
dXJlVmFsdWUoImlzU1ZHVGVzdCIsIGZhbHNlKTsgfQorICAgIGJvb2wgdXNlRGF0YURldGVjdGlv
bigpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInVzZURhdGFEZXRlY3Rpb24iLCBm
YWxzZSk7IH0KKyAgICBib29sIHVzZU1vY2tTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gYm9v
bEZlYXR1cmVWYWx1ZSgidXNlTW9ja1Njcm9sbGJhcnMiLCB0cnVlKTsgfQorICAgIGJvb2wgbmVl
ZHNTaXRlU3BlY2lmaWNRdWlya3MoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJu
ZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyIsIGZhbHNlKTsgfQorICAgIGJvb2wgaWdub3Jlc1ZpZXdw
b3J0U2NhbGVMaW1pdHMoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJpZ25vcmVz
Vmlld3BvcnRTY2FsZUxpbWl0cyIsIGZhbHNlKTsgfQorICAgIGJvb2wgdXNlQ2hhcmFjdGVyU2Vs
ZWN0aW9uR3JhbnVsYXJpdHkoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJ1c2VD
aGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0eSIsIGZhbHNlKTsgfQorICAgIGJvb2wgZW5hYmxl
QXR0YWNobWVudEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFi
bGVBdHRhY2htZW50RWxlbWVudCIsIGZhbHNlKTsgfQorICAgIGJvb2wgZW5hYmxlSW50ZXJzZWN0
aW9uT2JzZXJ2ZXIoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVJbnRl
cnNlY3Rpb25PYnNlcnZlciIsIGZhbHNlKTsgfQorICAgIGJvb2wgdXNlRXBoZW1lcmFsU2Vzc2lv
bigpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInVzZUVwaGVtZXJhbFNlc3Npb24i
LCBmYWxzZSk7IH0KKyAgICBib29sIGVuYWJsZU1lbnVJdGVtRWxlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZU1lbnVJdGVtRWxlbWVudCIsIGZhbHNlKTsgfQor
ICAgIGJvb2wgZW5hYmxlS2V5Z2VuRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJl
VmFsdWUoImVuYWJsZUtleWdlbkVsZW1lbnQiLCBmYWxzZSk7IH0KKyAgICBib29sIGVuYWJsZU1v
ZGVybk1lZGlhQ29udHJvbHMoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFi
bGVNb2Rlcm5NZWRpYUNvbnRyb2xzIiwgdHJ1ZSk7IH0KKyAgICBib29sIGVuYWJsZVBvaW50ZXJM
b2NrKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlUG9pbnRlckxvY2si
LCBmYWxzZSk7IH0KKyAgICBib29sIGVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlV2ViQXV0aGVudGljYXRpb24iLCB0cnVlKTsg
fQorICAgIGJvb2wgZW5hYmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IoKSBj
b25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVXZWJBdXRoZW50aWNhdGlvbkxv
Y2FsQXV0aGVudGljYXRvciIsIHRydWUpOyB9CisgICAgYm9vbCBlbmFibGVJbnNwZWN0b3JBZGRp
dGlvbnMoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVJbnNwZWN0b3JB
ZGRpdGlvbnMiLCBmYWxzZSk7IH0KKyAgICBib29sIHNob3VsZFNob3dUb3VjaGVzKCkgY29uc3Qg
eyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgic2hvdWxkU2hvd1RvdWNoZXMiLCBmYWxzZSk7IH0K
KyAgICBib29sIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycigpIGNvbnN0IHsgcmV0dXJuIGJvb2xG
ZWF0dXJlVmFsdWUoImR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIsIGZhbHNlKTsgfQorICAgIGJv
b2wgYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMoKSBjb25z
dCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJhbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2Vz
VG9Bc2tGb3JDcmVkZW50aWFscyIsIGZhbHNlKTsgfQorICAgIGJvb2wgZG9tUGFzdGVBbGxvd2Vk
KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZG9tUGFzdGVBbGxvd2VkIiwgdHJ1
ZSk7IH0KKyAgICBib29sIGVuYWJsZUNvbG9yRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gYm9vbEZl
YXR1cmVWYWx1ZSgiZW5hYmxlQ29sb3JGaWx0ZXIiLCBmYWxzZSk7IH0KKyAgICBib29sIHB1bmNo
T3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVy
ZVZhbHVlKCJwdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlIiwgZmFsc2UpOyB9Cisg
ICAgYm9vbCBydW5TaW5nbHkoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJydW5T
aW5nbHkiLCBmYWxzZSk7IH0KKyAgICBib29sIGNoZWNrRm9yV29ybGRMZWFrcygpIGNvbnN0IHsg
cmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImNoZWNrRm9yV29ybGRMZWFrcyIsIGZhbHNlKTsgfQor
ICAgIGJvb2wgc2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0KCkgY29uc3QgeyByZXR1cm4gYm9vbEZl
YXR1cmVWYWx1ZSgic2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0IiwgZmFsc2UpOyB9CisgICAgYm9v
bCBzaG91bGRTaG93U3BlbGxDaGVja2luZ0RvdHMoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVy
ZVZhbHVlKCJzcGVsbENoZWNraW5nRG90cyIsIGZhbHNlKTsgfQorICAgIGJvb2wgZW5hYmxlU2Vy
dmljZUNvbnRyb2xzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlU2Vy
dmljZUNvbnRyb2xzIiwgZmFsc2UpOyB9CisgICAgYm9vbCBlZGl0YWJsZSgpIGNvbnN0IHsgcmV0
dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVkaXRhYmxlIiwgZmFsc2UpOyB9CisgICAgYm9vbCBzaG91
bGRIYW5kbGVSdW5PcGVuUGFuZWwoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJz
aG91bGRIYW5kbGVSdW5PcGVuUGFuZWwiLCB0cnVlKTsgfQorICAgIGJvb2wgc2hvdWxkUHJlc2Vu
dFBvcG92ZXJzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgic2hvdWxkUHJlc2Vu
dFBvcG92ZXJzIiwgdHJ1ZSk7IH0KKyAgICBib29sIGVuYWJsZUFwcE5hcCgpIGNvbnN0IHsgcmV0
dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZUFwcE5hcCIsIGZhbHNlKTsgfQorICAgIGJvb2wg
ZW5hYmxlQmFja0ZvcndhcmRDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUo
ImVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUiLCBmYWxzZSk7IH0KKyAgICBib29sIGFsbG93c0xpbmtQ
cmV2aWV3KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiYWxsb3dzTGlua1ByZXZp
ZXciLCB0cnVlKTsgfQorICAgIGJvb2wgZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MoKSBj
b25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVDYXB0dXJlVmlkZW9JblVJUHJv
Y2VzcyIsIGZhbHNlKTsgfQorICAgIGJvb2wgZW5hYmxlQ2FwdHVyZVZpZGVvSW5HUFVQcm9jZXNz
KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlQ2FwdHVyZVZpZGVvSW5H
UFVQcm9jZXNzIiwgZmFsc2UpOyB9CisgICAgYm9vbCBlbmFibGVDYXB0dXJlQXVkaW9JblVJUHJv
Y2VzcygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZUNhcHR1cmVBdWRp
b0luVUlQcm9jZXNzIiwgZmFsc2UpOyB9CisgICAgYm9vbCBlbmFibGVDYXB0dXJlQXVkaW9JbkdQ
VVByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVDYXB0dXJl
QXVkaW9JbkdQVVByb2Nlc3MiLCBmYWxzZSk7IH0KKyAgICBib29sIGFsbG93VG9wTmF2aWdhdGlv
blRvRGF0YVVSTHMoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJhbGxvd1RvcE5h
dmlnYXRpb25Ub0RhdGFVUkxzIiwgdHJ1ZSk7IH0KKyAgICBib29sIGVuYWJsZUluQXBwQnJvd3Nl
clByaXZhY3koKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVJbkFwcEJy
b3dzZXJQcml2YWN5IiwgZmFsc2UpOyB9CisgICAgYm9vbCBpc0FwcEJvdW5kV2ViVmlldygpIGNv
bnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImlzQXBwQm91bmRXZWJWaWV3IiwgZmFsc2Up
OyB9CisgICAgYm9vbCBpZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzKCkgY29uc3Qg
eyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiaWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1l
b3V0cyIsIGZhbHNlKTsgfQorICAgIGJvb2wgZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24o
KSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVQcm9jZXNzU3dhcE9uTmF2
aWdhdGlvbiIsIHRydWUpOyB9CisgICAgYm9vbCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3Bl
bigpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZVByb2Nlc3NTd2FwT25X
aW5kb3dPcGVuIiwgZmFsc2UpOyB9CisgICAgYm9vbCB1c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1l
b3V0KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgidXNlU2VydmljZVdvcmtlclNo
b3J0VGltZW91dCIsIGZhbHNlKTsgfQorICAgIGRvdWJsZSBjb250ZW50SW5zZXRUb3AoKSBjb25z
dCB7IHJldHVybiBkb3VibGVGZWF0dXJlVmFsdWUoImNvbnRlbnRJbnNldC50b3AiLCAwKTsgfQor
ICAgIGRvdWJsZSBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIGRvdWJsZUZlYXR1
cmVWYWx1ZSgiZGV2aWNlU2NhbGVGYWN0b3IiLCAxKTsgfQorICAgIHN0ZDo6c3RyaW5nIGFwcGxp
Y2F0aW9uTWFuaWZlc3QoKSBjb25zdCB7IHJldHVybiBzdHJpbmdGZWF0dXJlVmFsdWUoImFwcGxp
Y2F0aW9uTWFuaWZlc3QiLCB7IH0pOyB9CisgICAgc3RkOjpzdHJpbmcganNjT3B0aW9ucygpIGNv
bnN0IHsgcmV0dXJuIHN0cmluZ0ZlYXR1cmVWYWx1ZSgianNjT3B0aW9ucyIsIHsgfSk7IH0KKyAg
ICBzdGQ6OnN0cmluZyBhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcygpIGNvbnN0IHsgcmV0
dXJuIHN0cmluZ0ZlYXR1cmVWYWx1ZSgiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMiLCB7
IH0pOyB9CisgICAgc3RkOjpzdHJpbmcgc3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMKCkgY29u
c3QgeyByZXR1cm4gc3RyaW5nRmVhdHVyZVZhbHVlKCJzdGFuZGFsb25lV2ViQXBwbGljYXRpb25V
UkwiLCB7IH0pOyB9CisgICAgc3RkOjpzdHJpbmcgY29udGVudE1vZGUoKSBjb25zdCB7IHJldHVy
biBzdHJpbmdGZWF0dXJlVmFsdWUoImNvbnRlbnRNb2RlIiwgeyB9KTsgfQorICAgIHN0ZDo6c3Ry
aW5nIGFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIHN0cmluZ0Zl
YXR1cmVWYWx1ZSgiYXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyIiwgeyB9KTsgfQorICAgIHN0
ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBvdmVycmlkZUxhbmd1YWdlcygpIGNvbnN0IHsgcmV0dXJu
IHN0cmluZ1ZlY3RvckZlYXR1cmVWYWx1ZSgibGFuZ3VhZ2UiLCB7IH0pOyB9CisKKyAgICBjb25z
dCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+JiBleHBlcmltZW50YWxGZWF0
dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXM7IH0K
KyAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+JiBpbnRlcm5h
bERlYnVnRmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLmludGVybmFsRGVidWdG
ZWF0dXJlczsgfQogCisgICAgYm9vbCBoYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25zKGNvbnN0
IFRlc3RPcHRpb25zJiBvcHRpb25zKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fZmVhdHVy
ZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2ZlYXR1cmVzLmV4cGVyaW1lbnRh
bEZlYXR1cmVzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobV9mZWF0
dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2ZlYXR1cmVzLmludGVybmFs
RGVidWdGZWF0dXJlcykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG1f
ZmVhdHVyZXMuYm9vbEZlYXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJlcy5ib29sRmVhdHVyZXMp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX2ZlYXR1cmVzLmRvdWJs
ZUZlYXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJlcy5kb3VibGVGZWF0dXJlcykKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG1fZmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMg
IT0gb3B0aW9ucy5tX2ZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVzKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBpZiAobV9mZWF0dXJlcy5zdHJpbmdWZWN0b3JGZWF0dXJlcyAhPSBv
cHRpb25zLm1fZmVhdHVyZXMuc3RyaW5nVmVjdG9yRmVhdHVyZXMpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKworcHJpdmF0ZToKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQgZmVhdHVyZVZhbHVlKHN0ZDo6c3RyaW5nIGtleSwg
VCBkZWZhdWx0VmFsdWUsIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgVD4m
IG1hcCkgY29uc3QKKyAgICB7CisgICAgICAgIGF1dG8gaXQgPSBtYXAuZmluZChrZXkpOworICAg
ICAgICBpZiAoaXQgIT0gbWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7
CisgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7CisgICAgfQorCisgICAgYm9vbCBib29sRmVh
dHVyZVZhbHVlKHN0ZDo6c3RyaW5nIGtleSwgYm9vbCBkZWZhdWx0VmFsdWUpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gZmVhdHVyZVZhbHVlKGtleSwgZGVmYXVsdFZhbHVlLCBtX2ZlYXR1
cmVzLmJvb2xGZWF0dXJlcyk7CisgICAgfQorICAgIGRvdWJsZSBkb3VibGVGZWF0dXJlVmFsdWUo
c3RkOjpzdHJpbmcga2V5LCBkb3VibGUgZGVmYXVsdFZhbHVlKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZlYXR1cmVWYWx1ZShrZXksIGRlZmF1bHRWYWx1ZSwgbV9mZWF0dXJlcy5kb3Vi
bGVGZWF0dXJlcyk7CisgICAgfQorICAgIHN0ZDo6c3RyaW5nIHN0cmluZ0ZlYXR1cmVWYWx1ZShz
dGQ6OnN0cmluZyBrZXksIHN0ZDo6c3RyaW5nIGRlZmF1bHRWYWx1ZSkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmZWF0dXJlVmFsdWUoa2V5LCBkZWZhdWx0VmFsdWUsIG1fZmVhdHVyZXMu
c3RyaW5nRmVhdHVyZXMpOworICAgIH0KKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc3Ry
aW5nVmVjdG9yRmVhdHVyZVZhbHVlKHN0ZDo6c3RyaW5nIGtleSwgc3RkOjp2ZWN0b3I8c3RkOjpz
dHJpbmc+IGRlZmF1bHRWYWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmZWF0dXJl
VmFsdWUoa2V5LCBkZWZhdWx0VmFsdWUsIG1fZmVhdHVyZXMuc3RyaW5nVmVjdG9yRmVhdHVyZXMp
OworICAgIH0KKworICAgIFRlc3RGZWF0dXJlcyBtX2ZlYXR1cmVzOwogfTsKIAogfQpJbmRleDog
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2Nv
YS5tbQkocmV2aXNpb24gMjY3ODg1KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9U
ZXN0Q29udHJvbGxlckNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMjcgKzExNCwyOCBA
QCBXS1ByZWZlcmVuY2VzUmVmIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9yCiAgICAgcmV0dXJuIChf
X2JyaWRnZSBXS1ByZWZlcmVuY2VzUmVmKWdsb2JhbFdlYlZpZXdDb25maWd1cmF0aW9uLnByZWZl
cmVuY2VzOwogfQogCi12b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUFkZFRlc3RPcHRpb25z
KFRlc3RPcHRpb25zJiBvcHRpb25zKSBjb25zdAorVGVzdEZlYXR1cmVzIFRlc3RDb250cm9sbGVy
OjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZU92ZXJyaWRlc0RlZmF1bHRzRm9yVGVzdChjb25zdCBU
ZXN0Q29tbWFuZCYpIGNvbnN0CiB7CisgICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVzOworCiAgICAg
aWYgKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6QCJF
bmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbiJdKQotICAgICAgICBvcHRpb25zLmNvbnRleHRP
cHRpb25zLmVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uID0gdHJ1ZTsKKyAgICAgICAgZmVh
dHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlv
biIsIHRydWUgfSk7CiAgICAgaWYgKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVs
dHNdIGJvb2xGb3JLZXk6QCJFbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiJdKQotICAgICAg
ICBvcHRpb25zLmNvbnRleHRPcHRpb25zLmVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuID0g
dHJ1ZTsKKyAgICAgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJlbmFibGVQcm9j
ZXNzU3dhcE9uV2luZG93T3BlbiIsIHRydWUgfSk7CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQotICAgIGlmIChvcHRpb25zLmVuYWJsZUluQXBwQnJvd3NlclByaXZhY3kpCi0gICAgICAgIFtb
TlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHNldEJvb2w6WUVTIGZvcktleTpA
IldlYktpdERlYnVnSXNJbkFwcEJyb3dzZXJQcml2YWN5RW5hYmxlZCJdOwotI2VuZGlmCisgICAg
cmV0dXJuIGZlYXR1cmVzOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUluaXRp
YWxpemVEYXRhU3RvcmUoV0tQYWdlQ29uZmlndXJhdGlvblJlZiwgY29uc3QgVGVzdE9wdGlvbnMm
IG9wdGlvbnMpCiB7Ci0gICAgaWYgKG9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lvbiB8fCBvcHRp
b25zLnN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTC5sZW5ndGgoKSkgewotICAgICAgICBhdXRv
IHdlYnNpdGVEYXRhU3RvcmVDb25maWcgPSBvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24gPyBb
W1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdE5vblBlcnNpc3Rl
bnRDb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV0gOiBbW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29u
ZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwotICAgICAgICBpZiAoIW9wdGlv
bnMudXNlRXBoZW1lcmFsU2Vzc2lvbikKKyAgICBib29sIHVzZUVwaGVtZXJhbFNlc3Npb24gPSBv
cHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24oKTsKKyAgICBhdXRvIHN0YW5kYWxvbmVXZWJBcHBs
aWNhdGlvblVSTCA9IG9wdGlvbnMuc3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMKCk7CisgICAg
aWYgKHVzZUVwaGVtZXJhbFNlc3Npb24gfHwgc3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMLmxl
bmd0aCgpKSB7CisgICAgICAgIGF1dG8gd2Vic2l0ZURhdGFTdG9yZUNvbmZpZyA9IHVzZUVwaGVt
ZXJhbFNlc3Npb24gPyBbW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxvY10g
aW5pdE5vblBlcnNpc3RlbnRDb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV0gOiBbW1tfV0tXZWJz
aXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAg
ICAgICBpZiAoIXVzZUVwaGVtZXJhbFNlc3Npb24pCiAgICAgICAgICAgICBjb25maWd1cmVXZWJz
aXRlRGF0YVN0b3JlVGVtcG9yYXJ5RGlyZWN0b3JpZXMoKFdLV2Vic2l0ZURhdGFTdG9yZUNvbmZp
Z3VyYXRpb25SZWYpd2Vic2l0ZURhdGFTdG9yZUNvbmZpZyk7Ci0gICAgICAgIGlmIChvcHRpb25z
LnN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTC5sZW5ndGgoKSkKLSAgICAgICAgICAgIFt3ZWJz
aXRlRGF0YVN0b3JlQ29uZmlnIHNldFN0YW5kYWxvbmVBcHBsaWNhdGlvblVSTDpbTlNVUkwgVVJM
V2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6b3B0aW9ucy5zdGFuZGFs
b25lV2ViQXBwbGljYXRpb25VUkwuY19zdHIoKV1dXTsKKyAgICAgICAgaWYgKHN0YW5kYWxvbmVX
ZWJBcHBsaWNhdGlvblVSTC5sZW5ndGgoKSkKKyAgICAgICAgICAgIFt3ZWJzaXRlRGF0YVN0b3Jl
Q29uZmlnIHNldFN0YW5kYWxvbmVBcHBsaWNhdGlvblVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpb
TlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6c3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJM
LmNfc3RyKCldXV07CiAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IChfX2JyaWRnZSBXS1dl
YnNpdGVEYXRhU3RvcmVSZWYpW1tbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhD
b25maWd1cmF0aW9uOndlYnNpdGVEYXRhU3RvcmVDb25maWddIGF1dG9yZWxlYXNlXTsKICAgICB9
IGVsc2UKICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gKF9fYnJpZGdlIFdLV2Vic2l0ZURh
dGFTdG9yZVJlZilnbG9iYWxXZWJWaWV3Q29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlOwpA
QCAtMTQ1LDMyICsxNDYsMzMgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1DcmVhdGVX
ZWJWaQogICAgIGF1dG8gY29waWVkQ29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW2dsb2JhbFdlYlZp
ZXdDb25maWd1cmF0aW9uIGNvcHldKTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
aWYgKG9wdGlvbnMudXNlRGF0YURldGVjdGlvbikKKyAgICBpZiAob3B0aW9ucy51c2VEYXRhRGV0
ZWN0aW9uKCkpCiAgICAgICAgIFtjb3BpZWRDb25maWd1cmF0aW9uIHNldERhdGFEZXRlY3RvclR5
cGVzOldLRGF0YURldGVjdG9yVHlwZUFsbF07Ci0gICAgaWYgKG9wdGlvbnMuaWdub3Jlc1ZpZXdw
b3J0U2NhbGVMaW1pdHMpCisgICAgaWYgKG9wdGlvbnMuaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1p
dHMoKSkKICAgICAgICAgW2NvcGllZENvbmZpZ3VyYXRpb24gc2V0SWdub3Jlc1ZpZXdwb3J0U2Nh
bGVMaW1pdHM6WUVTXTsKLSAgICBpZiAob3B0aW9ucy51c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFu
dWxhcml0eSkKKyAgICBpZiAob3B0aW9ucy51c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0
eSgpKQogICAgICAgICBbY29waWVkQ29uZmlndXJhdGlvbiBzZXRTZWxlY3Rpb25HcmFudWxhcml0
eTpXS1NlbGVjdGlvbkdyYW51bGFyaXR5Q2hhcmFjdGVyXTsKLSAgICBpZiAob3B0aW9ucy5pc0Fw
cEJvdW5kV2ViVmlldykKKyAgICBpZiAob3B0aW9ucy5pc0FwcEJvdW5kV2ViVmlldygpKQogICAg
ICAgICBbY29waWVkQ29uZmlndXJhdGlvbiBzZXRMaW1pdHNOYXZpZ2F0aW9uc1RvQXBwQm91bmRE
b21haW5zOllFU107CiAjZWxzZQotICAgIFtjb3BpZWRDb25maWd1cmF0aW9uIF9zZXRTZXJ2aWNl
Q29udHJvbHNFbmFibGVkOm9wdGlvbnMuZW5hYmxlU2VydmljZUNvbnRyb2xzXTsKKyAgICBbY29w
aWVkQ29uZmlndXJhdGlvbiBfc2V0U2VydmljZUNvbnRyb2xzRW5hYmxlZDpvcHRpb25zLmVuYWJs
ZVNlcnZpY2VDb250cm9scygpXTsKICNlbmRpZgogCi0gICAgaWYgKG9wdGlvbnMuZW5hYmxlQXR0
YWNobWVudEVsZW1lbnQpCisgICAgaWYgKG9wdGlvbnMuZW5hYmxlQXR0YWNobWVudEVsZW1lbnQo
KSkKICAgICAgICAgW2NvcGllZENvbmZpZ3VyYXRpb24gX3NldEF0dGFjaG1lbnRFbGVtZW50RW5h
YmxlZDpZRVNdOwogCi0gICAgaWYgKG9wdGlvbnMuZW5hYmxlQ29sb3JGaWx0ZXIpCisgICAgaWYg
KG9wdGlvbnMuZW5hYmxlQ29sb3JGaWx0ZXIoKSkKICAgICAgICAgW2NvcGllZENvbmZpZ3VyYXRp
b24gX3NldENvbG9yRmlsdGVyRW5hYmxlZDpZRVNdOwogCiAgICAgW2NvcGllZENvbmZpZ3VyYXRp
b24gc2V0V2Vic2l0ZURhdGFTdG9yZTooV0tXZWJzaXRlRGF0YVN0b3JlICopd2Vic2l0ZURhdGFT
dG9yZSgpXTsKIAotICAgIFtjb3BpZWRDb25maWd1cmF0aW9uIF9zZXRBbGxvd1RvcE5hdmlnYXRp
b25Ub0RhdGFVUkxzOm9wdGlvbnMuYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMc107CisgICAg
W2NvcGllZENvbmZpZ3VyYXRpb24gX3NldEFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHM6b3B0
aW9ucy5hbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzKCldOwogCiAgICAgY29uZmlndXJlQ29u
dGVudE1vZGUoY29waWVkQ29uZmlndXJhdGlvbi5nZXQoKSwgb3B0aW9ucyk7CiAKLSAgICBpZiAo
b3B0aW9ucy5hcHBsaWNhdGlvbk1hbmlmZXN0Lmxlbmd0aCgpKSB7Ci0gICAgICAgIGF1dG8gbWFu
aWZlc3RQYXRoID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOm9wdGlvbnMuYXBwbGlj
YXRpb25NYW5pZmVzdC5jX3N0cigpXTsKKyAgICBhdXRvIGFwcGxpY2F0aW9uTWFuaWZlc3QgPSBv
cHRpb25zLmFwcGxpY2F0aW9uTWFuaWZlc3QoKTsKKyAgICBpZiAoYXBwbGljYXRpb25NYW5pZmVz
dC5sZW5ndGgoKSkgeworICAgICAgICBhdXRvIG1hbmlmZXN0UGF0aCA9IFtOU1N0cmluZyBzdHJp
bmdXaXRoVVRGOFN0cmluZzphcHBsaWNhdGlvbk1hbmlmZXN0LmNfc3RyKCldOwogICAgICAgICBO
U1N0cmluZyAqdGV4dCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ29udGVudHNPZkZpbGU6bWFuaWZl
c3RQYXRoIHVzZWRFbmNvZGluZzpudWxscHRyIGVycm9yOm51bGxwdHJdOwogICAgICAgICBbY29w
aWVkQ29uZmlndXJhdGlvbiBfc2V0QXBwbGljYXRpb25NYW5pZmVzdDpbX1dLQXBwbGljYXRpb25N
YW5pZmVzdCBhcHBsaWNhdGlvbk1hbmlmZXN0RnJvbUpTT046dGV4dCBtYW5pZmVzdFVSTDpuaWwg
ZG9jdW1lbnRVUkw6bmlsXV07CiAgICAgfQpAQCAtMTc4LDEzICsxODAsMTMgQEAgdm9pZCBUZXN0
Q29udHJvbGxlcjo6cGxhdGZvcm1DcmVhdGVXZWJWaQogICAgIG1fbWFpbldlYlZpZXcgPSBtYWtl
VW5pcXVlPFBsYXRmb3JtV2ViVmlldz4oY29waWVkQ29uZmlndXJhdGlvbi5nZXQoKSwgb3B0aW9u
cyk7CiAgICAgZmluaXNoQ3JlYXRpbmdQbGF0Zm9ybVdlYlZpZXcobV9tYWluV2ViVmlldy5nZXQo
KSwgb3B0aW9ucyk7CiAKLSAgICBpZiAob3B0aW9ucy5wdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJ
bkRhcmtNb2RlKQorICAgIGlmIChvcHRpb25zLnB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFy
a01vZGUoKSkKICAgICAgICAgbV9tYWluV2ViVmlldy0+c2V0RHJhd3NCYWNrZ3JvdW5kKGZhbHNl
KTsKIAotICAgIGlmIChvcHRpb25zLmVkaXRhYmxlKQorICAgIGlmIChvcHRpb25zLmVkaXRhYmxl
KCkpCiAgICAgICAgIG1fbWFpbldlYlZpZXctPnNldEVkaXRhYmxlKHRydWUpOwogCi0gICAgbV9t
YWluV2ViVmlldy0+cGxhdGZvcm1WaWV3KCkuYWxsb3dzTGlua1ByZXZpZXcgPSBvcHRpb25zLmFs
bG93c0xpbmtQcmV2aWV3OworICAgIG1fbWFpbldlYlZpZXctPnBsYXRmb3JtVmlldygpLmFsbG93
c0xpbmtQcmV2aWV3ID0gb3B0aW9ucy5hbGxvd3NMaW5rUHJldmlldygpOwogICAgIFttX21haW5X
ZWJWaWV3LT5wbGF0Zm9ybVZpZXcoKSBfc2V0U2hhcmVTaGVldENvbXBsZXRlc0ltbWVkaWF0ZWx5
V2l0aFJlc29sdXRpb25Gb3JUZXN0aW5nOllFU107CiB9CiAKQEAgLTIwMyw3ICsyMDUsNyBAQCBQ
bGF0Zm9ybVdlYlZpZXcqIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9yCiB2b2lkIFRlc3RDb250cm9s
bGVyOjpmaW5pc2hDcmVhdGluZ1BsYXRmb3JtV2ViVmlldyhQbGF0Zm9ybVdlYlZpZXcqIHZpZXcs
IGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKQogewogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBp
ZiAob3B0aW9ucy5zaG91bGRTaG93V2ViVmlldykKKyAgICBpZiAob3B0aW9ucy5zaG91bGRTaG93
V2ViVmlldygpKQogICAgICAgICBbdmlldy0+cGxhdGZvcm1XaW5kb3coKSBvcmRlckZyb250Om5p
bF07CiAgICAgZWxzZQogICAgICAgICBbdmlldy0+cGxhdGZvcm1XaW5kb3coKSBvcmRlckJhY2s6
bmlsXTsKQEAgLTI2MywxMiArMjY1LDEyIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0Q29u
dGVudEV4dGVuc2kKICAgICB9CiB9CiAKLXZvaWQgVGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0
aW9uQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIpCit2b2lk
IFRlc3RDb250cm9sbGVyOjpzZXRBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoY29uc3Qgc3Rk
OjpzdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIpCiB7Ci0gICAgaWYgKGJ1bmRsZUlkZW50aWZpZXIu
aXNFbXB0eSgpKQorICAgIGlmIChidW5kbGVJZGVudGlmaWVyLmVtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKICAgICAKLSAgICBbVGVzdFJ1bm5lcldLV2ViVmlldyBfc2V0QXBwbGljYXRpb25CdW5k
bGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWJ1bmRsZUlkZW50aWZpZXIuY3JlYXRlQ0ZTdHJpbmco
KS5nZXQoKV07CisgICAgW1Rlc3RSdW5uZXJXS1dlYlZpZXcgX3NldEFwcGxpY2F0aW9uQnVuZGxl
SWRlbnRpZmllcjooTlNTdHJpbmcgKil0b1dURlN0cmluZyhidW5kbGVJZGVudGlmaWVyKS5jcmVh
dGVDRlN0cmluZygpLmdldCgpXTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6Y2xlYXJBcHBs
aWNhdGlvbkJ1bmRsZUlkZW50aWZpZXJUZXN0aW5nT3ZlcnJpZGUoKQpAQCAtMjg2LDcgKzI4OCw3
IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvY29hUmVzZXRTdGF0ZVRvQ28KICAgICAgICAgVGVz
dFJ1bm5lcldLV2ViVmlldyAqcGxhdGZvcm1WaWV3ID0gd2ViVmlldy0+cGxhdGZvcm1WaWV3KCk7
CiAgICAgICAgIHBsYXRmb3JtVmlldy5fdmlld1NjYWxlID0gMTsKICAgICAgICAgcGxhdGZvcm1W
aWV3Ll9taW5pbXVtRWZmZWN0aXZlRGV2aWNlV2lkdGggPSAwOwotICAgICAgICBbcGxhdGZvcm1W
aWV3IF9zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3JUZXN0aW5nOm9wdGlvbnMu
c2hvdWxkU2hvd1NwZWxsQ2hlY2tpbmdEb3RzXTsKKyAgICAgICAgW3BsYXRmb3JtVmlldyBfc2V0
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yVGVzdGluZzpvcHRpb25zLnNob3VsZFNo
b3dTcGVsbENoZWNraW5nRG90cygpXTsKICAgICAgICAgW3BsYXRmb3JtVmlldyByZXNldEludGVy
YWN0aW9uQ2FsbGJhY2tzXTsKICAgICAgICAgW3BsYXRmb3JtVmlldyBfcmVzZXROYXZpZ2F0aW9u
R2VzdHVyZVN0YXRlRm9yVGVzdGluZ107CiAgICAgfQpAQCAtMjk3LDYgKzI5OSwxMSBAQCB2b2lk
IFRlc3RDb250cm9sbGVyOjpjb2NvYVJlc2V0U3RhdGVUb0NvCiB2b2lkIFRlc3RDb250cm9sbGVy
OjpwbGF0Zm9ybVdpbGxSdW5UZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0SW52b2NhdGlv
bikKIHsKICAgICBzZXRDcmFzaFJlcG9ydEFwcGxpY2F0aW9uU3BlY2lmaWNJbmZvcm1hdGlvblRv
VVJMKHRlc3RJbnZvY2F0aW9uLnVybCgpKTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisg
ICAgaWYgKHRlc3RJbnZvY2F0aW9uLm9wdGlvbnMoKS5lbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5
KCkpCisgICAgICAgIFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHNldEJv
b2w6WUVTIGZvcktleTpAIldlYktpdERlYnVnSXNJbkFwcEJyb3dzZXJQcml2YWN5RW5hYmxlZCJd
OworI2VuZGlmCiB9CiAKIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFdlYkFyY2hpdmVQYm9hcmRU
eXBlID0gQCJBcHBsZSBXZWIgQXJjaGl2ZSBwYXN0ZWJvYXJkIHR5cGUiOwpAQCAtNDg3LDEyICs0
OTQsMTEgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6aXNEb2luZ01lZGlhQ2FwdHVyZQogCiBzdGF0
aWMgV0tDb250ZW50TW9kZSBjb250ZW50TW9kZShjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykK
IHsKLSAgICBpZiAob3B0aW9ucy5jb250ZW50TW9kZSA9PSAiZGVza3RvcCJfcykKKyAgICBhdXRv
IG1vZGUgPSBvcHRpb25zLmNvbnRlbnRNb2RlKCk7CisgICAgaWYgKG1vZGUgPT0gImRlc2t0b3Ai
KQogICAgICAgICByZXR1cm4gV0tDb250ZW50TW9kZURlc2t0b3A7Ci0KLSAgICBpZiAob3B0aW9u
cy5jb250ZW50TW9kZSA9PSAibW9iaWxlIl9zKQorICAgIGlmIChtb2RlID09ICJtb2JpbGUiKQog
ICAgICAgICByZXR1cm4gV0tDb250ZW50TW9kZU1vYmlsZTsKLQogICAgIHJldHVybiBXS0NvbnRl
bnRNb2RlUmVjb21tZW5kZWQ7CiB9CiAKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3Rr
L1Rlc3RDb250cm9sbGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL2d0ay9UZXN0Q29udHJvbGxlckd0ay5jcHAJKHJldmlzaW9uIDI2Nzg4NSkKKysrIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RDb250cm9sbGVyR3RrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTUwLDkgKzE1MCwxMSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJlc2V0
UHJlZmVyCiAgICAgbV9tYWluV2ViVmlldy0+ZGlzbWlzc0FsbFBvcHVwTWVudXMoKTsKIH0KIAot
dm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9y
VGVzdChUZXN0T3B0aW9ucyYgb3B0aW9ucywgY29uc3Qgc3RkOjpzdHJpbmcmKSBjb25zdAorVGVz
dEZlYXR1cmVzIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1bHRz
Rm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYpIGNvbnN0CiB7Ci0gICAgb3B0aW9ucy5lbmFibGVN
b2Rlcm5NZWRpYUNvbnRyb2xzID0gZmFsc2U7CisgICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVzOwor
ICAgIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAiZW5hYmxlTW9kZXJuTWVkaWFDb250
cm9scyIsIGZhbHNlIH0pOworICAgIHJldHVybiBmZWF0dXJlczsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV1RSCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklP
Uy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJv
bGxlcklPUy5tbQkocmV2aXNpb24gMjY3ODg1KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9p
b3MvVGVzdENvbnRyb2xsZXJJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTE5MCw3ICsxOTAsNyBA
QCBib29sIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJlc2V0U3RhdGVUCiAgICAgfQogCiAgICAg
bV9wcmVzZW50UG9wb3ZlclN3aXp6bGVycy5jbGVhcigpOwotICAgIGlmICghb3B0aW9ucy5zaG91
bGRQcmVzZW50UG9wb3ZlcnMpIHsKKyAgICBpZiAoIW9wdGlvbnMuc2hvdWxkUHJlc2VudFBvcG92
ZXJzKCkpIHsKICNpZiBVU0UoVUlDT05URVhUTUVOVSkKICAgICAgICAgbV9wcmVzZW50UG9wb3Zl
clN3aXp6bGVycy5hcHBlbmQobWFrZVVuaXF1ZTxJbnN0YW5jZU1ldGhvZFN3aXp6bGVyPihbVUlD
b250ZXh0TWVudUludGVyYWN0aW9uIGNsYXNzXSwgQHNlbGVjdG9yKF9wcmVzZW50TWVudUF0TG9j
YXRpb246KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlUHJlc2VudE1lbnVPclBvcG92
ZXJPclZpZXdDb250cm9sbGVyKSkpOwogI2VuZGlmCkBAIC0yMTMsOCArMjEzLDEwIEBAIGJvb2wg
VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRTdGF0ZVQKICAgICAgICAgVUlTY3JvbGxWaWV3
ICpzY3JvbGxWaWV3ID0gd2ViVmlldy5zY3JvbGxWaWV3OwogICAgICAgICBbc2Nyb2xsVmlldyBf
cmVtb3ZlQWxsQW5pbWF0aW9uczpZRVNdOwogICAgICAgICBbc2Nyb2xsVmlldyBzZXRab29tU2Nh
bGU6MSBhbmltYXRlZDpOT107Ci0gICAgICAgIHNjcm9sbFZpZXcuY29udGVudEluc2V0ID0gVUlF
ZGdlSW5zZXRzTWFrZShvcHRpb25zLmNvbnRlbnRJbnNldFRvcCwgMCwgMCwgMCk7Ci0gICAgICAg
IHNjcm9sbFZpZXcuY29udGVudE9mZnNldCA9IENHUG9pbnRNYWtlKDAsIC1vcHRpb25zLmNvbnRl
bnRJbnNldFRvcCk7CisgICAgICAgIAorICAgICAgICBhdXRvIGNvbnRlbnRJbnNldFRvcCA9IG9w
dGlvbnMuY29udGVudEluc2V0VG9wKCk7CisgICAgICAgIHNjcm9sbFZpZXcuY29udGVudEluc2V0
ID0gVUlFZGdlSW5zZXRzTWFrZShjb250ZW50SW5zZXRUb3AsIDAsIDAsIDApOworICAgICAgICBz
Y3JvbGxWaWV3LmNvbnRlbnRPZmZzZXQgPSBDR1BvaW50TWFrZSgwLCAtY29udGVudEluc2V0VG9w
KTsKIAogICAgICAgICBpZiAod2ViVmlldy5pbnRlcmFjdGluZ1dpdGhGb3JtQ29udHJvbCkKICAg
ICAgICAgICAgIHNob3VsZFJlc3RvcmVGaXJzdFJlc3BvbmRlciA9IFt3ZWJWaWV3IHJlc2lnbkZp
cnN0UmVzcG9uZGVyXTsKQEAgLTI2NSwxMiArMjY3LDE0IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6
OnBsYXRmb3JtUmVzZXRTdGF0ZVQKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1Db25m
aWd1cmVWaWV3Rm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYgdGVzdCkKIHsKKyAgICBbW0dl
bmVyYXRlZFRvdWNoZXNEZWJ1Z1dpbmRvdyBzaGFyZWRHZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5k
b3ddIHNldFNob3VsZFNob3dUb3VjaGVzOnRlc3Qub3B0aW9ucygpLnNob3VsZFNob3dUb3VjaGVz
KCldOworCiAgICAgVGVzdFJ1bm5lcldLV2ViVmlldyAqd2ViVmlldyA9IG1haW5XZWJWaWV3KCkt
PnBsYXRmb3JtVmlldygpOwogCi0gICAgaWYgKHRlc3Qub3B0aW9ucygpLnNob3VsZElnbm9yZU1l
dGFWaWV3cG9ydCkKKyAgICBpZiAodGVzdC5vcHRpb25zKCkuc2hvdWxkSWdub3JlTWV0YVZpZXdw
b3J0KCkpCiAgICAgICAgIHdlYlZpZXcuY29uZmlndXJhdGlvbi5wcmVmZXJlbmNlcy5fc2hvdWxk
SWdub3JlTWV0YVZpZXdwb3J0ID0gWUVTOwogCi0gICAgaWYgKCF0ZXN0Lm9wdGlvbnMoKS51c2VG
bGV4aWJsZVZpZXdwb3J0KQorICAgIGlmICghdGVzdC5vcHRpb25zKCkudXNlRmxleGlibGVWaWV3
cG9ydCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBDR1JlY3Qgc2NyZWVuQm91bmRzID0gW1VJ
U2NyZWVuIG1haW5TY3JlZW5dLmJvdW5kczsKQEAgLTI5MSwxMCArMjk1LDkgQEAgdm9pZCBUZXN0
Q29udHJvbGxlcjo6cGxhdGZvcm1Db25maWd1cmVWaQogICAgIC8vIFdLQnVuZGxlUGFnZVNldFVz
ZVRlc3RpbmdWaWV3cG9ydENvbmZpZ3VyYXRpb24oZmFsc2UpLgogfQogCi12b2lkIFRlc3RDb250
cm9sbGVyOjp1cGRhdGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0KFRlc3RPcHRp
b25zJiBvcHRpb25zLCBjb25zdCBzdGQ6OnN0cmluZyYpIGNvbnN0CitUZXN0RmVhdHVyZXMgVGVz
dENvbnRyb2xsZXI6OnBsYXRmb3JtU3BlY2lmaWNGZWF0dXJlRGVmYXVsdHNGb3JUZXN0KGNvbnN0
IFRlc3RDb21tYW5kJikgY29uc3QKIHsKLSAgICBvcHRpb25zLnNob3VsZFNob3dUb3VjaGVzID0g
c2hvdWxkU2hvd1RvdWNoZXMoKTsKLSAgICBbW0dlbmVyYXRlZFRvdWNoZXNEZWJ1Z1dpbmRvdyBz
aGFyZWRHZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5kb3ddIHNldFNob3VsZFNob3dUb3VjaGVzOm9w
dGlvbnMuc2hvdWxkU2hvd1RvdWNoZXNdOworICAgIHJldHVybiB7IH07CiB9CiAKIHZvaWQgVGVz
dENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZUNvbnRleHQoKQpJbmRleDogVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9tYWMvUGxhdGZvcm1XZWJWaWV3TWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1BsYXRmb3JtV2ViVmlld01hYy5tbQkocmV2aXNpb24g
MjY3ODg1KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvUGxhdGZvcm1XZWJWaWV3TWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MSwxOCArNjEsMTggQEAgUGxhdGZvcm1XZWJWaWV3OjpQ
bGF0Zm9ybVdlYlZpZXcoV0tXZWJWaQogICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCiB7CiAgICAg
Ly8gRklYTUU6IE5vdCBzdXJlIHRoaXMgaXMgdGhlIGJlc3QgcGxhY2UgZm9yIHRoaXM7IG1heWJl
IHdlIHNob3VsZCBoYXZlIEFQSSB0byBzZXQgdGhpcyBzbyB3ZSBjYW4gZG8gaXQgZnJvbSBUZXN0
Q29udHJvbGxlcj8KLSAgICBpZiAobV9vcHRpb25zLnVzZVJlbW90ZUxheWVyVHJlZSkKKyAgICBp
ZiAobV9vcHRpb25zLnVzZVJlbW90ZUxheWVyVHJlZSgpKQogICAgICAgICBbW05TVXNlckRlZmF1
bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBzZXRWYWx1ZTpAWUVTIGZvcktleTpAIldlYktpdDJV
c2VSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYSJdOwogCiAgICAgYXV0byBjb3BpZWRDb25maWd1
cmF0aW9uID0gYWRvcHROUyhbY29uZmlndXJhdGlvbiBjb3B5XSk7Ci0gICAgV0tQcmVmZXJlbmNl
c1NldFRocmVhZGVkU2Nyb2xsaW5nRW5hYmxlZCgoX19icmlkZ2UgV0tQcmVmZXJlbmNlc1JlZilb
Y29waWVkQ29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10sIG1fb3B0aW9ucy51c2VUaHJlYWRlZFNj
cm9sbGluZyk7CisgICAgV0tQcmVmZXJlbmNlc1NldFRocmVhZGVkU2Nyb2xsaW5nRW5hYmxlZCgo
X19icmlkZ2UgV0tQcmVmZXJlbmNlc1JlZilbY29waWVkQ29uZmlndXJhdGlvbiBwcmVmZXJlbmNl
c10sIG1fb3B0aW9ucy51c2VUaHJlYWRlZFNjcm9sbGluZygpKTsKIAogICAgIE5TUmVjdCByZWN0
ID0gTlNNYWtlUmVjdCgwLCAwLCBUZXN0Q29udHJvbGxlcjo6dmlld1dpZHRoLCBUZXN0Q29udHJv
bGxlcjo6dmlld0hlaWdodCk7CiAgICAgbV92aWV3ID0gW1tUZXN0UnVubmVyV0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOnJlY3QgY29uZmlndXJhdGlvbjpjb3BpZWRDb25maWd1cmF0aW9u
LmdldCgpXTsKICAgICBbbV92aWV3IF9zZXRXaW5kb3dPY2NsdXNpb25EZXRlY3Rpb25FbmFibGVk
Ok5PXTsKIAogICAgIE5TU2NyZWVuICpmaXJzdFNjcmVlbiA9IFtbTlNTY3JlZW4gc2NyZWVuc10g
b2JqZWN0QXRJbmRleDowXTsKLSAgICBOU1JlY3Qgd2luZG93UmVjdCA9IG1fb3B0aW9ucy5zaG91
bGRTaG93V2ViVmlldyA/IE5TT2Zmc2V0UmVjdChyZWN0LCAxMDAsIDEwMCkgOiBOU09mZnNldFJl
Y3QocmVjdCwgLTEwMDAwLCBbZmlyc3RTY3JlZW4gZnJhbWVdLnNpemUuaGVpZ2h0IC0gcmVjdC5z
aXplLmhlaWdodCArIDEwMDAwKTsKKyAgICBOU1JlY3Qgd2luZG93UmVjdCA9IG1fb3B0aW9ucy5z
aG91bGRTaG93V2ViVmlldygpID8gTlNPZmZzZXRSZWN0KHJlY3QsIDEwMCwgMTAwKSA6IE5TT2Zm
c2V0UmVjdChyZWN0LCAtMTAwMDAsIFtmaXJzdFNjcmVlbiBmcmFtZV0uc2l6ZS5oZWlnaHQgLSBy
ZWN0LnNpemUuaGVpZ2h0ICsgMTAwMDApOwogICAgIG1fd2luZG93ID0gW1tXZWJLaXRUZXN0UnVu
bmVyV2luZG93IGFsbG9jXSBpbml0V2l0aENvbnRlbnRSZWN0OndpbmRvd1JlY3Qgc3R5bGVNYXNr
Ok5TV2luZG93U3R5bGVNYXNrQm9yZGVybGVzcyBiYWNraW5nOihOU0JhY2tpbmdTdG9yZVR5cGUp
X05TQmFja2luZ1N0b3JlVW5idWZmZXJlZCBkZWZlcjpZRVNdOwogICAgIG1fd2luZG93LnBsYXRm
b3JtV2ViVmlldyA9IHRoaXM7CiAgICAgW21fd2luZG93IHNldENvbG9yU3BhY2U6W2ZpcnN0U2Ny
ZWVuIGNvbG9yU3BhY2VdXTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1Rlc3RD
b250cm9sbGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFj
L1Rlc3RDb250cm9sbGVyTWFjLm1tCShyZXZpc2lvbiAyNjc4ODUpCisrKyBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL21hYy9UZXN0Q29udHJvbGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTcy
LDExICsxNzIsMTEgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1SZXNldFN0YXRlVAog
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFRlc3RDb250cm9sbGVyOjp1cGRhdGVQbGF0Zm9y
bVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0KFRlc3RPcHRpb25zJiBvcHRpb25zLCBjb25zdCBz
dGQ6OnN0cmluZyYpIGNvbnN0CitUZXN0RmVhdHVyZXMgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3Jt
U3BlY2lmaWNGZWF0dXJlRGVmYXVsdHNGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJikgY29uc3QK
IHsKLSAgICBvcHRpb25zLnVzZVRocmVhZGVkU2Nyb2xsaW5nID0gdHJ1ZTsKLSAgICBvcHRpb25z
LnVzZVJlbW90ZUxheWVyVHJlZSA9IHNob3VsZFVzZVJlbW90ZUxheWVyVHJlZSgpOwotICAgIG9w
dGlvbnMuc2hvdWxkU2hvd1dlYlZpZXcgPSBzaG91bGRTaG93V2ViVmlldygpOworICAgIFRlc3RG
ZWF0dXJlcyBmZWF0dXJlczsKKyAgICBmZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgInVz
ZVRocmVhZGVkU2Nyb2xsaW5nIiwgdHJ1ZSB9KTsKKyAgICByZXR1cm4gZmVhdHVyZXM7CiB9CiAK
IHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyZUNvbnRlbnRFeHRlbnNpb25Gb3JUZXN0KGNv
bnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0KQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93
aW4vVGVzdENvbnRyb2xsZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvd2luL1Rlc3RDb250cm9sbGVyV2luLmNwcAkocmV2aXNpb24gMjY3ODg1KQorKysgVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci93aW4vVGVzdENvbnRyb2xsZXJXaW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMjcsOSArMjI3LDkgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1SZXNl
dFByZWZlcgogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgVGVzdENvbnRyb2xsZXI6
OnVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNUZXN0T3B0aW9uc0ZvclRlc3QoVGVzdE9wdGlvbnMmLCBj
b25zdCBzdGQ6OnN0cmluZyYpIGNvbnN0CitUZXN0RmVhdHVyZXMgVGVzdENvbnRyb2xsZXI6OnBs
YXRmb3JtU3BlY2lmaWNGZWF0dXJlRGVmYXVsdHNGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJikg
Y29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB7IH07CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdUUgpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93cGUvVGVzdENv
bnRyb2xsZXJXUEUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd3Bl
L1Rlc3RDb250cm9sbGVyV1BFLmNwcAkocmV2aXNpb24gMjY3ODg1KQorKysgVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci93cGUvVGVzdENvbnRyb2xsZXJXUEUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzYsOSArMTM2LDExIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRQcmVmZXIK
IHsKIH0KIAotdm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RP
cHRpb25zRm9yVGVzdChUZXN0T3B0aW9ucyYgb3B0aW9ucywgY29uc3Qgc3RkOjpzdHJpbmcmKSBj
b25zdAorVGVzdEZlYXR1cmVzIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVy
ZURlZmF1bHRzRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYpIGNvbnN0CiB7Ci0gICAgb3B0aW9u
cy5lbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzID0gZmFsc2U7CisgICAgVGVzdEZlYXR1cmVzIGZl
YXR1cmVzOworICAgIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAiZW5hYmxlTW9kZXJu
TWVkaWFDb250cm9scyIsIGZhbHNlIH0pOworICAgIHJldHVybiBmZWF0dXJlczsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV1RSCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjc4ODUpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAyMC0xMC0wNCAg
U2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgW1Rlc3RpbmddIEFkZCBz
dXBwb3J0IGZvciBwZXItZGlyZWN0b3J5IG92ZXJyaWRpbmcgb2YgdGVzdGluZyBvcHRpb25zIHZp
YSBuZXcgVGVzdE9wdGlvbnMudHh0IGZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcyOTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGRzIGRpcmVjdG9yeSBiYXNlZCBUZXN0T3B0aW9ucy50eHQg
ZmlsZXMgdG8gcmVwbGFjZSBoYXJkIGNvZGluZyBpbiBXZWJLaXRUZXN0UnVubmVyCisgICAgICAg
IGZvciBvcHRpb25zIG92ZXJyaWRpbmcuCisKKyAgICAgICAgKiBmYXN0L3ZpZXdwb3J0L1Rlc3RP
cHRpb25zLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaXBhZC9mYXN0L3ZpZXdwb3J0
L1Rlc3RPcHRpb25zLnR4dDogQWRkZWQuCisgICAgICAgICogc3ZnL1czQy1TVkctMS4xLVNFL1Rl
c3RPcHRpb25zLnR4dDogQWRkZWQuCisgICAgICAgICogc3ZnL1czQy1TVkctMS4xL1Rlc3RPcHRp
b25zLnR4dDogQWRkZWQuCisKIDIwMjAtMTAtMDIgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUu
Y29tPgogCiAgICAgICAgIFJlbW92ZSBjb2RlIGJlaGluZCBFTkFCTEUoTUVESUFfU0VTU0lPTiks
IG5vIHBvcnRzIGVuYWJsZSBpdApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC92aWV3cG9ydC9UZXN0
T3B0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC92aWV3cG9ydC9UZXN0
T3B0aW9ucy50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC92aWV3cG9ydC9U
ZXN0T3B0aW9ucy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSBAQAord2Via2l0LXRlc3Qt
cnVubmVyIFsgdXNlRmxleGlibGVWaWV3cG9ydD10cnVlIF0KSW5kZXg6IExheW91dFRlc3RzL2lt
cG9ydGVkL3czYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL0NoYW5nZUxvZwkocmV2aXNpb24gMjY3ODg4KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDIwLTEwLTA0
ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbVGVzdGluZ10gQWRk
IHN1cHBvcnQgZm9yIHBlci1kaXJlY3Rvcnkgb3ZlcnJpZGluZyBvZiB0ZXN0aW5nIG9wdGlvbnMg
dmlhIG5ldyBUZXN0T3B0aW9ucy50eHQgZmlsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzI5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgZGlyZWN0b3J5IGJhc2VkIFRlc3RPcHRpb25zLnR4
dCBmaWxlcyB0byByZXBsYWNlIGhhcmQgY29kaW5nIGluIFdlYktpdFRlc3RSdW5uZXIKKyAgICAg
ICAgZm9yIG9wdGlvbnMgb3ZlcnJpZGluZy4KKworICAgICAgICAqIEluZGV4ZWREQi1wcml2YXRl
LWJyb3dzaW5nL1Rlc3RPcHRpb25zLnR4dDogQWRkZWQuCisKIDIwMjAtMDktMzAgIEFudG9pbmUg
UXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkIG5vbi1hbmltYXRlZCBz
dXBwb3J0IGZvciB0aGUgQ1NTIHRyYW5zbGF0ZSBwcm9wZXJ0eQpJbmRleDogTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL0luZGV4ZWREQi1wcml2YXRlLWJyb3dzaW5nL1Rlc3RPcHRpb25zLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvSW5kZXhlZERCLXByaXZhdGUt
YnJvd3NpbmcvVGVzdE9wdGlvbnMudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2lt
cG9ydGVkL3czYy9JbmRleGVkREItcHJpdmF0ZS1icm93c2luZy9UZXN0T3B0aW9ucy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSBAQAord2Via2l0LXRlc3QtcnVubmVyIFsgdXNlRXBoZW1l
cmFsU2Vzc2lvbj10cnVlIF0KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2lwYWQvZmFzdC92
aWV3cG9ydC9UZXN0T3B0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZv
cm0vaXBhZC9mYXN0L3ZpZXdwb3J0L1Rlc3RPcHRpb25zLnR4dAkobm9uZXhpc3RlbnQpCisrKyBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9pcGFkL2Zhc3Qvdmlld3BvcnQvVGVzdE9wdGlvbnMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtpdC10ZXN0LXJ1bm5lciBbIHVzZUZsZXhp
YmxlVmlld3BvcnQ9dHJ1ZSBdCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvVzNDLVNWRy0xLjEtU0Uv
VGVzdE9wdGlvbnMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9XM0MtU1ZHLTEu
MS1TRS9UZXN0T3B0aW9ucy50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvc3ZnL1cz
Qy1TVkctMS4xLVNFL1Rlc3RPcHRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBA
Cit3ZWJraXQtdGVzdC1ydW5uZXIgWyBpc1NWR1Rlc3Q9dHJ1ZSBdCkluZGV4OiBMYXlvdXRUZXN0
cy9zdmcvVzNDLVNWRy0xLjEvVGVzdE9wdGlvbnMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3N2Zy9XM0MtU1ZHLTEuMS9UZXN0T3B0aW9ucy50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5
b3V0VGVzdHMvc3ZnL1czQy1TVkctMS4xL1Rlc3RPcHRpb25zLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxIEBACit3ZWJraXQtdGVzdC1ydW5uZXIgWyBpc1NWR1Rlc3Q9dHJ1ZSBdCg==
</data>
<flag name="commit-queue"
          id="426423"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410474</attachid>
            <date>2020-10-04 11:24:43 -0700</date>
            <delta_ts>2020-10-04 11:37:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217297-20201004112442.patch</filename>
            <type>text/plain</type>
            <size>273764</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2Nzk0NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE4NCBAQAorMjAyMC0xMC0wNCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgW1Rlc3RpbmddIEFkZCBzdXBwb3J0IGZvciBwZXItZGlyZWN0b3J5IG92ZXJyaWRp
bmcgb2YgdGVzdGluZyBvcHRpb25zIHZpYSBuZXcgVGVzdE9wdGlvbnMudHh0IGZpbGVzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcyOTcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGludHJvZHVj
ZXMgYSBuZXcgY29uY2VwdCBmb3Igd2Via2l0IHRlc3RzICh0aG9zZSB3aXRoaW4gdGhlIExheW91
dFRlc3RzIGRpcmVjdG9yeSkKKyAgICAgICAgdGhhdCBleHRlbmRzIHRoZSBleGlzdGluZyB0ZXN0
LWhlYWRlciBiYXNlZCBjb25maWd1cmF0aW9uIG9mIHRlc3Qgb3B0aW9ucyAodGhvc2UgY29tbWVu
dHMKKyAgICAgICAgYXQgdGhlIHRvcCBvZiBzb21ldCB0ZXN0IGZpbGVzIHRoYXQgbG9vayBsaWtl
ICJ3ZWJraXQtdGVzdC1ydW5uZXIgWyAuLi4gXSIpIHRvIGFsc28gYWxsb3cKKyAgICAgICAgZGly
ZWN0b3J5IHdpZGUgb3ZlcnJpZGluZyBvZiB0ZXN0IG9wdGlvbnMgdmlhIGEgbmV3IFRlc3RPcHRp
b25zLnR4dCBmaWxlLiBUaGVzZSBmaWxlcyBhcmUKKyAgICAgICAgZm9yIG5vdyBleHBlY3RlZCB0
byB1c2UgdGhlIHNhbWUgIndlYmtpdC10ZXN0LXJ1bm5lciBbIC4uLiBdIiBzeW50YXggYXMgdGhl
IHRlc3QtaGVhZGVyIGJhc2VkCisgICAgICAgIG9uZXMgZm9yIGNvbnNpc3RlbmN5IGFuZCBzaW1w
bGljaXR5IG9mIGltcGxlbWVudGF0aW9uLCBidXQgaW4gdGhlIGZ1dHVyZSB3ZSBtYXkgZGVjaWRl
IGl0CisgICAgICAgIG1ha2VzIG1vcmUgc2Vuc2UgdG8gdXRpbGl6ZSB0aGUgYWRkaXRpb25hbCBz
cGFjZS4KKworICAgICAgICBOb3cgdGhhdCB3ZSBoYXZlIGV2ZW4gbW9yZSBzb3VyY2VzIG9mIHRl
c3Qgb3B0aW9ucyBjb21pbmcgaW4sIHdlIG5lZWQgdG8gaGF2ZSBhIGRlZmluZWQgc2V0CisgICAg
ICAgIG9mIHJ1bGVzIGZvciBpbiB3aGljaCBvcmRlciBvcHRpb25zIHRha2UgcHJlY2VkZW5jZS4g
VGhlIG9yZGVyIGlzIChmcm9tIGxlYXN0IHRvIG1vc3QpOgorICAgICAgICAKKyAgICAgICAgLSBH
bG9iYWwgZmVhdHVyZXMgcGFzc2VkIHRvIFdlYktpdFRlc3RSdW5uZXIgdmlhIHRoZSBjb21tYW5k
IGxpbmUgKGUuZy4gLS1zaG93LXRvdWNoZXMpCisgICAgICAgIC0gSGFyZGNvZGVkIGZlYXR1cmVz
IGJhc2VkIG9uIHRoZSBwYXRoIG9mIHRoZSB0ZXN0IGJlaW5nIHJ1biAoaG9wZWZ1bGx5IHdlIGNh
biByZW1vdmUgYWxsIHNvb24pCisgICAgICAgIC0gSGFyZGNvZGVkIHBsYXRmb3JtIHNwZWNpZmlj
IGRlZmF1bHRzIChjdXJyZW50bHkgb25seSB1c2VkIGJ5IG1hY09TIGZvciB1c2VUaHJlYWRlZFNj
cm9sbGluZykuCisgICAgICAgIC0gRmVhdHVyZXMgZnJvbSBUZXN0T3B0aW9ucy50eHQgZmlsZXMs
IHdpdGggdGhlIG1vc3QgZGlyZWN0b3JpZXMgY2xvc2VyIHRvIC4vTGF5b3V0VGVzdHMgdGFrZWlu
ZworICAgICAgICAgIGxlc3MgcHJlY2VkZW5jZSB0aGFuIHRob3NlIGNsb3NlciB0byB0aGUgdGVz
dCBmaWxlIChlLmcuIGFuIG9wdGlvbiBpbiAKKyAgICAgICAgICAuL0xheW91dFRlc3RzL2Zhc3Qv
Zm9ybXMvVGVzdE9wdGlvbnMudHh0IHdpbGwgd2luIG92ZXIgb25lIGluIC4vTGF5b3V0VGVzdHMv
ZmFzdC9UZXN0T3B0aW9ucy50eHQpLgorICAgICAgICAtIEZlYXR1cmVzIGZyb20gdGhlIHRlc3Qg
aGVhZGVycyB3aXRoaW4gdGhlIHRlc3QgaXRzZWxmLgorICAgICAgICAtIEZpbmFsbHksIGEgc2Vj
b25kIGNoYW5jZSBmb3IgbW9yZSBwbGF0Zm9ybSBzcGVjaWZpYyBkZWZhdWx0cyAoY3VycmVubHkg
b25seSB1c2VkIHRoZSBjb2NvYSBwb3J0cworICAgICAgICAgIGZvciBzZXR0aW5nIGVuYWJsZVBy
b2Nlc3NTd2FwT25OYXZpZ2F0aW9uIGFuZCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiBi
YXNlZCBvbiBOU1VzZXJEZWZhdWx0cy4pCisgICAgICAgIAorICAgICAgICBIb3BlZnVsbHkgaW4g
dGhlIGZ1dHVyZSwgd2Ugd2lsbCBiZSBhYmxlIHRvIHNpbXBsaWZ5IHRoYXQgYXMgd2UgcmVtb3Zl
IHNvbWUgb2YgdGhlc2UgbGV2ZWxzLCBwZXJoYXBzCisgICAgICAgIGJ5IGV4dGVuZGluZyBUZXN0
T3B0aW9ucy50eHQgdG8gYmUgYWJsZSB0byBzZXQgcGxhdGZvcm0gc3BlY2ZpYyBvdmVycmlkZXMu
CisKKyAgICAgICAgVG8gbWFrZSB0aGlzIGNoYW5nZSB3b3JrLCBhbmQgcGF2ZSB0aGUgd2F5IGZv
ciBmdXR1cmUgYXV0b2dlbmVyYXRpb24gb2Ygc29tZSBvZiB0aGVzZSB0ZXN0IG9wdGlvbnMsCisg
ICAgICAgIHRoZSBUZXN0T3B0aW9ucyBzdHJ1Y3QgKG5vdyBjbGFzcykgd2FzIG92ZXJoYXVsZWQu
IEluc3RlYWQgb2Ygc3RvcmluZyB0aGUgc3RhdGUgaXRzZWxmLCBpdCBUZXN0T3B0aW9ucworICAg
ICAgICBpcyBub3cgYW4gaW1tdXRhYmxlIG93bmVyIG9mIGEgVGVzdEZlYXR1cmVzIG9iamVjdC4g
VGVzdEZlYXR1cmVzIGlzIGEgc2ltcGxlIHN0cnVjdCB0aGF0IGNvbnRhaW5zIG1hcHMgCisgICAg
ICAgIG9mIG9wdGlvbiBrZXlzIHRvIHZhbHVlcyBhbmQgY2FuIGJlIG1lcmdlZCB3aXRoIG90aGVy
IFRlc3RGZWF0dXJlcyBvYmplY3RzLiBUZXN0T3B0aW9ucyB0YWtlcyBhIAorICAgICAgICBUZXN0
RmVhdHVyZXMgYXQgY29uc3RydWN0aW9uLCBhbmQgZXhwb3NlcyBnZXR0ZXJzIGZvciBhbGwga2V5
cywgYXMgd2VsbCBhcyBkZWZhdWx0cyBmb3Igd2hlbiB0aGV5IGFyZQorICAgICAgICBub3QgaW4g
dGhlIG1hcHMuIEluIGZ1dHVyZSBjaGFuZ2VzLCBJIHdvdWxkIGxpa2UgdG8gcmVtb3ZlIG1hbnkg
b2YgdGhlc2UgKHRoZSBvbmVzIHRoYXQgY29ycmVzcG9uZAorICAgICAgICB3aXRoIFdlYktpdCBw
cmVmZXJlbmNlcyBhbnl3YXkpIGFuZCBoYXZlIHRoZSBrZXlzIGFuZCB2YWx1ZXMgYXV0b21hdGlj
YWxseSBkZWFsdCB3aXRoIGJ5IFdLUHJlZmVyZW5jZXMuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL09wdGlvbnMuY3BwOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5o
OgorICAgICAgICBTd2l0Y2ggdG8gc3RkOjp1bm9yZGVyZWRfbWFwIGZvciBjb25zaXN0ZW5jeSBh
bmQgZWFzZSBvZiBjb252ZXJzaW9uLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9QbGF0
Zm9ybVdlYlZpZXcuaDoKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3Ojp2aWV3U3VwcG9y
dHNPcHRpb25zIGNvbnN0KToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3IFRlc3RPcHRpb25z
IGZ1bmN0aW9ucy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25z
Lmg6CisgICAgICAgIChXVFI6OnRvV0spOgorICAgICAgICAoV1RSOjp0b1dURlN0cmluZyk6Cisg
ICAgICAgIEFkZCBjb252ZXJzaW9ucyBmb3Igc3RkOjpzdHJpbmcuCisKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjppbml0
aWFsaXplKToKKyAgICAgICAgUmVwbGFjZSBzb21lIGJvb2xzIHdpdGggYSBuZXcgZ2xvYmFsIFRl
c3RGZWF0dXJlcyBpbnN0YW5jZSB0aGF0IGZvcm1zIHRoZSBiYXNlIG9mCisgICAgICAgIGFsbCBU
ZXN0RmVhdHVyZXMgbWVyZ2VzLgorICAgICAgICAKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xs
ZXI6OmdlbmVyYXRlQ29udGV4dENvbmZpZ3VyYXRpb24gY29uc3QpOgorICAgICAgICAoV1RSOjpU
ZXN0Q29udHJvbGxlcjo6Z2VuZXJhdGVQYWdlQ29uZmlndXJhdGlvbik6CisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpjcmVhdGVXZWJWaWV3V2l0aE9wdGlvbnMpOgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6ZW5zdXJlVmlld1N1cHBvcnRzT3B0aW9uc0ZvclRlc3QpOgorICAg
ICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRQcmVmZXJlbmNlc1RvQ29uc2lzdGVudFZh
bHVlcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0
ZW50VmFsdWVzKToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3IFRlc3RPcHRpb25zIGZ1bmN0
aW9ucy4KKyAgICAgICAgCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpjcmVhdGVUZXN0
VVJMKToKKyAgICAgICAgRXhwb3NlIGFzIGEgc3RhdGljIG1lbWJlciBmdW5jdGlvbiBvbiBUZXN0
Q29udHJvbGxlciBmb3IgdXNlIGluIG90aGVyIGZpbGVzLgorICAgICAgICAKKyAgICAgICAgKFdU
Ujo6VGVzdENvbnRyb2xsZXI6OnRlc3RPcHRpb25zRm9yVGVzdCBjb25zdCk6CisgICAgICAgIFJl
d29yayB0byBiZSBhIHNlcXVlbmNlIG9mIFRlc3RGZWF0dXJlcyBtZXJnZXMuCisgICAgICAgIAor
ICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6dXBkYXRlV2ViVmlld1NpemVGb3JUZXN0KToK
KyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnVwZGF0ZVdpbmRvd1NjYWxlRm9yVGVzdCk6
CisgICAgICAgIFVwZGF0ZSB0byBjYWxsIG5ldyBUZXN0T3B0aW9ucyBmdW5jdGlvbnMuCisgICAg
ICAgIAorICAgICAgICAoV1RSOjpjcmVhdGVUZXN0VVJMKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Ujo6cGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6
cGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1JlbGF0aXZlUGF0aCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVFI6OnBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNVUkwpOiBEZWxldGVkLgorICAg
ICAgICAoV1RSOjp1cGRhdGVUZXN0T3B0aW9uc0Zyb21UZXN0SGVhZGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRkVGVzdE9wdGlvbnMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICBNb3ZlZCBUZXN0T3B0aW9ucyBwYXJzaW5nIHRvIFRlc3RPcHRp
b25zLmNwcAorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6
CisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpjcmVhdGVUZXN0U2V0dGluZ3NEaWN0aW9u
YXJ5KToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3IFRlc3RPcHRpb25zIGZ1bmN0aW9ucy4K
KworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuaDoKKyAgICAgICAgUmV3
b3JrcyBUZXN0T3B0aW9ucyB0byBiZSBhbiBpbW11dGFibGUgb3duZXIgb2YgYSBUZXN0RmVhdHVy
ZXMgc3RydWN0LCB3aGljaCBpcyBhIHNldAorICAgICAgICBvZiBtYXBzIHRoYXQgbWFwIGZlYXR1
cmUgc3RyaW5nIGtleXMsIHRvIHZhbHVlcyBvZiB0eXBlIGJvb2wsIGRvdWJsZSwgc3RyaW5nIG9y
IHN0cmluZyB2ZWN0b3IuCisgICAgICAgIFJlLXVzZXMgZXhpc3RpbmcgdGVzdCBoZWFkZXIgcGFy
c2luZyBjb2RlIChtb3ZlZCBoZXJlIGZyb20gVGVzdENvbnRyb2xsZXIuY3BwKSB0byBhbHNvCisg
ICAgICAgIHBhcnNlIG5ldyBUZXN0T3B0aW9ucy50eHQgZmlsZXMuCisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5jcHA6CisgICAgICAgIChXVFI6OmR1bXBGZWF0dXJlcyk6
CisgICAgICAgIEhlbHBlciB0byBkdW1wIGZlYXR1cmVzIHRvIHN0ZGVyciwgdXNlZnVsIGZvciBk
ZWJ1Z2dpbmcuCisKKyAgICAgICAgKFdUUjo6a2V5VHlwZSk6CisgICAgICAgIEhlbHBlciBmb3Ig
cGFyc2VyIHRvIGtub3cgd2hpY2ggdmFsdWUgcGFyc2VyIHRvIHVzZS4KKworICAgICAgICAoV1RS
OjpwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUpOgorICAgICAgICAoV1RSOjpwYXJzZVN0cmlu
Z1Rlc3RIZWFkZXJWYWx1ZUFzUmVsYXRpdmVQYXRoKToKKyAgICAgICAgKFdUUjo6cGFyc2VTdHJp
bmdUZXN0SGVhZGVyVmFsdWVBc1VSTCk6CisgICAgICAgIFZhbHVlIHBhcnNlcnMgbW92ZWQgZnJv
bSBUZXN0Q29udHJvbGxlci5jcHAKKworICAgICAgICAoV1RSOjpwYXJzZVRlc3RIZWFkZXIpOgor
ICAgICAgICBIZWFkZXIgcGFyc2VyIG1vdmVkIGZyb20gVGVzdENvbnRyb2xsZXIuY3BwLiBVcGRh
dGUgdG8gbm93IHJldHVybgorICAgICAgICBhIFRlc3RGZWF0dXJlcyBvYmplY3QgYW5kIHVzZSBr
ZXlUeXBlIHRvIHBpY2sgdmFsdWUgcGFyc2VyIHJhdGhlcgorICAgICAgICB0aGFuIGlubGluaW5n
IHRoZSBpZiBzdGF0ZW1lbnRzLgorICAgICAgICAKKyAgICAgICAgKFdUUjo6aGFyZGNvZGVkRmVh
dHVyZXNCYXNlZE9uUGF0aEZvclRlc3QpOgorICAgICAgICAoV1RSOjpzaG91bGRNYWtlVmlld3Bv
cnRGbGV4aWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OnNob3VsZFVzZUZpeGVkTGF5b3V0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6aXNTVkdUZXN0UGF0aCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVFI6OnNob3VsZFVzZUVwaGVtZXJhbFNlc3Npb24pOiBEZWxldGVkLgorICAgICAgICBN
b3ZlZCBmcm9tIHRoZSBUZXN0T3B0aW9ucyBjb250cnVjdG9yIGFuZCByZW1vdmUgY2FzZXMgZm9y
IGZsZXhpYmxlTGF5b3V0LAorICAgICAgICBmaXhlZExheW91dCwgaXNTVkdUZXN0LCBhbmQgdXNl
RXBoZW1lcmFsU2Vzc2lvbiwgd2hpY2ggYXJlIGFsbCBlaXRoZXIgbm93CisgICAgICAgIGhhbmRs
ZWQgYnkgVGVzdE9wdGlvbnMudHh0IGZpbGVzIG9yIGFyZSBubyBsb25nZXIgbmVjZXNzYXJ5Lgor
CisgICAgICAgIChXVFI6Om1lcmdlKToKKyAgICAgICAgTWVyZ2VzIHR3byBUZXN0RmVhdHVyZXMg
b2JqZWN0cy4gSWYgYm90aCBjb250YWluIHRoZSBzYW1lIGtleSwgdGhlICdhZGRpdGlvbmFsJwor
ICAgICAgICBUZXN0RmVhdHVyZXMgb3ZlcnJpZGVzIHRoZSAnYmFzZScgVGVzdEZlYXR1cmVzLgor
CisgICAgICAgIChXVFI6OmZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0T3B0aW9uc0ZpbGVzRm9yVGVz
dCk6CisgICAgICAgIENyZWF0ZXMgYSBUZXN0RmVhdHVyZXMgb2JqZWN0IGJ5IGl0ZXJhdGluZyBh
bGwgdGhlIHN1YmRpcmVjdG9yaWVzIGZyb20gTGF5b3V0VGVzdHMKKyAgICAgICAgdG8gdGhlIGN1
cnJlbnQgdGVzdHMgZGlyZWN0b3J5LCBsb29raW5nIGZvciBUZXN0T3B0aW9ucy50eHQgZmlsZXMg
YW5kIG1lcmdpbmcKKyAgICAgICAgdGhlbSB0b2dldGhlci4KKworICAgICAgICAoV1RSOjpmZWF0
dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3QpOgorICAgICAgICBDcmVhdGVzIGEgVGVz
dEZlYXR1cmVzIGZvciB0aGUgdGVzdCBoZWFkZXJzIG9mIHRoZSBjdXJyZW50IHRlc3QuCisKKyAg
ICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW06Cisg
ICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZU92ZXJy
aWRlc0RlZmF1bHRzRm9yVGVzdCBjb25zdCk6CisgICAgICAgIFJld29ya2VkIHRvIG5vdyByZXR1
cm4gYSBUZXN0RmVhdHVyZXMgb2JqZWN0IHRoYXQgd2lsbCBiZSBtZXJnZWQsIHJhdGhlciB0aGFu
IHVwZGF0aW5nCisgICAgICAgIGEgVGVzdE9wdGlvbnMuIE1vdmVzIGVuYWJsZUluQXBwQnJvd3Nl
clByaXZhY3kgd29yayB0byBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1XaWxsUnVuVGVzdAorICAg
ICAgICB3aGVyZSBpdCBpcyBtb3JlIGFwcHJvcHJpYXRlLgorCisgICAgICAgIChXVFI6OlRlc3RD
b250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemVEYXRhU3RvcmUpOgorICAgICAgICAoV1RSOjpU
ZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1DcmVhdGVXZWJWaWV3KToKKyAgICAgICAgKFdUUjo6VGVz
dENvbnRyb2xsZXI6OmZpbmlzaENyZWF0aW5nUGxhdGZvcm1XZWJWaWV3KToKKyAgICAgICAgKFdU
Ujo6VGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcik6CisgICAg
ICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpjb2NvYVJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1
ZXMpOgorICAgICAgICAoV1RSOjpjb250ZW50TW9kZSk6CisgICAgICAgIFVwZGF0ZSB0byBjYWxs
IG5ldyBUZXN0T3B0aW9ucyBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6
OnBsYXRmb3JtUmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6CisgICAgICAgIChXVFI6OlRl
c3RDb250cm9sbGVyOjpwbGF0Zm9ybUNvbmZpZ3VyZVZpZXdGb3JUZXN0KToKKyAgICAgICAgVXBk
YXRlIHRvIGNhbGwgbmV3IFRlc3RPcHRpb25zIGZ1bmN0aW9ucy4KKyAgICAgICAgCisgICAgICAg
IChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1bHRzRm9y
VGVzdCBjb25zdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1cGRhdGVQbGF0Zm9y
bVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgTW92
ZWQgR2VuZXJhdGVkVG91Y2hlc0RlYnVnV2luZG93IHdvcmsgdG8gVGVzdENvbnRyb2xsZXI6OnBs
YXRmb3JtQ29uZmlndXJlVmlld0ZvclRlc3QKKyAgICAgICAgd2hlcmUgaXQgaXMgbW9yZSBhcHBy
b3ByaWF0ZSBhbmQgcmVtb3ZlZCBzaG91bGRTaG93VG91Y2hlcyBzZXR0aW5nIGFzIHRoYXQgaXMg
ZG9uZQorICAgICAgICBnbG9iYWxseSBub3cuIAorICAgICAgICAKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL21hYy9QbGF0Zm9ybVdlYlZpZXdNYWMubW06CisgICAgICAgIChXVFI6OlBsYXRm
b3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3
IFRlc3RPcHRpb25zIGZ1bmN0aW9ucy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvbWFj
L1Rlc3RDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QgY29uc3QpOgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9yVGVz
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIFJlbW92ZSBzaG91bGRVc2VSZW1vdGVMYXllclRy
ZWUgYW5kIHNob3VsZFNob3dXZWJWaWV3LCBhcyB0aG9zZSBhcmUgbm93IGRvbmUgZ2xvYmFsbHks
CisgICAgICAgIGFuZCByZS1pbXBsZW1lbnRlZCB1c2VUaHJlYWRlZFNjcm9sbGluZyB0byB1c2Ug
Ym9vbEZlYXR1cmVzLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci93aW4vVGVzdENvbnRy
b2xsZXJXaW4uY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1TcGVj
aWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QgY29uc3QpOgorICAgICAgICAoV1RSOjpUZXN0Q29u
dHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9yVGVzdCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIFVwZGF0ZWQgZm9yIG5ldyBzaWduYXR1cmUuCisKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL3dwZS9UZXN0Q29udHJvbGxlcldQRS5jcHA6CisgICAgICAgIChX
VFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1bHRzRm9yVGVz
dCBjb25zdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1cGRhdGVQbGF0Zm9ybVNw
ZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgVXBkYXRl
ZCBmb3IgbmV3IHNpZ25hdHVyZS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvZ3RrL1Rl
c3RDb250cm9sbGVyR1RLLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnBsYXRm
b3JtU3BlY2lmaWNGZWF0dXJlRGVmYXVsdHNGb3JUZXN0IGNvbnN0KToKKyAgICAgICAgKFdUUjo6
VGVzdENvbnRyb2xsZXI6OnVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNUZXN0T3B0aW9uc0ZvclRlc3Qg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICBVcGRhdGVkIGZvciBuZXcgc2lnbmF0dXJlLgorCiAy
MDIwLTEwLTAzICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgQWRkIGV4dHJhIHNsYXNoIGFmdGVyIGVtcHR5IGhvc3QgY29waWVkIGZyb20gYmFz
ZSBVUkwgaWYgcGF0aCBpcyBhbHNvIGVtcHR5CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVy
L09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvT3B0aW9u
cy5jcHAJKHJldmlzaW9uIDI2Nzg4NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvT3B0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCBzdGF0aWMgYm9vbCBoYW5k
bGVPcHRpb25BbGxvd2VkSG9zdChPcHRpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBi
b29sIHBhcnNlRmVhdHVyZShTdHJpbmcgZmVhdHVyZVN0cmluZywgSGFzaE1hcDxTdHJpbmcsIGJv
b2w+JiBmZWF0dXJlcykKK3N0YXRpYyBib29sIHBhcnNlRmVhdHVyZShTdHJpbmcgZmVhdHVyZVN0
cmluZywgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29sPiYgZmVhdHVyZXMpCiB7
CiAgICAgYXV0byBzdHJpbmdzID0gZmVhdHVyZVN0cmluZy5zcGxpdCgnPScpOwogICAgIGlmIChz
dHJpbmdzLmlzRW1wdHkoKSB8fCBzdHJpbmdzLnNpemUoKSA+IDIpCkBAIC0xMjIsNyArMTIyLDcg
QEAgc3RhdGljIGJvb2wgcGFyc2VGZWF0dXJlKFN0cmluZyBmZWF0dXJlUwogICAgIGF1dG8gZmVh
dHVyZU5hbWUgPSBzdHJpbmdzWzBdOwogICAgIGJvb2wgZW5hYmxlZCA9IHN0cmluZ3Muc2l6ZSgp
ID09IDEgfHwgc3RyaW5nc1sxXSA9PSAidHJ1ZSI7CiAKLSAgICBmZWF0dXJlcy5zZXQoZmVhdHVy
ZU5hbWUsIGVuYWJsZWQpOworICAgIGZlYXR1cmVzLmluc2VydCh7IGZlYXR1cmVOYW1lLnV0Zjgo
KS5kYXRhKCksIGVuYWJsZWQgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvT3B0aW9ucy5oCShyZXZpc2lvbiAyNjc4ODUpCisrKyBUb29scy9XZWJLaXRUZXN0
UnVubmVyL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEsOCBAQAogI2luY2x1
ZGUgPHNldD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRl
IDx1bm9yZGVyZWRfbWFwPgogI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdI
YXNoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC01Nyw4ICs1Nyw4IEBA
IHN0cnVjdCBPcHRpb25zIHsKICNlbmRpZgogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBw
YXRoczsKICAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gYWxsb3dlZEhvc3RzOwotICAgIEhhc2hN
YXA8U3RyaW5nLCBib29sPiBpbnRlcm5hbEZlYXR1cmVzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBi
b29sPiBleHBlcmltZW50YWxGZWF0dXJlczsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpz
dHJpbmcsIGJvb2w+IGludGVybmFsRmVhdHVyZXM7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0
ZDo6c3RyaW5nLCBib29sPiBleHBlcmltZW50YWxGZWF0dXJlczsKIH07CiAKIGNsYXNzIE9wdGlv
biB7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgJKHJldmlz
aW9uIDI2Nzg4NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1v
dmVGcm9tV2luZG93KCk7CiAgICAgdm9pZCBhZGRUb1dpbmRvdygpOwogCi0gICAgYm9vbCB2aWV3
U3VwcG9ydHNPcHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKSBjb25zdCB7IHJldHVy
biAhb3B0aW9ucy5ydW5TaW5nbHkgJiYgbV9vcHRpb25zLmhhc1NhbWVJbml0aWFsaXphdGlvbk9w
dGlvbnMob3B0aW9ucyk7IH0KKyAgICBib29sIHZpZXdTdXBwb3J0c09wdGlvbnMoY29uc3QgVGVz
dE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0IHsgcmV0dXJuICFvcHRpb25zLnJ1blNpbmdseSgpICYm
IG1fb3B0aW9ucy5oYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25zKG9wdGlvbnMpOyB9CiAKICAg
ICBQbGF0Zm9ybUltYWdlIHdpbmRvd1NuYXBzaG90SW1hZ2UoKTsKICAgICBjb25zdCBUZXN0T3B0
aW9ucyYgb3B0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW9uczsgfQpJbmRleDogVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9TdGRGaWxlc3lzdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL1N0ZEZpbGVzeXN0ZW0uY3BwCShub25leGlzdGVudCkKKysrIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvU3RkRmlsZXN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyNTk5IEBACisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3RkRmlsZXN5c3Rl
bS5jcHAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworLy8KKy8vICAgICAgICAgICAg
ICAgICAgICAgVGhlIExMVk0gQ29tcGlsZXIgSW5mcmFzdHJ1Y3R1cmUKKy8vCisvLyBUaGlzIGZp
bGUgaXMgZHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGFuZCB0aGUgVW5pdmVyc2l0eSBvZiBJ
bGxpbm9pcyBPcGVuCisvLyBTb3VyY2UgTGljZW5zZXMuIFNlZSBMSUNFTlNFLlRYVCBmb3IgZGV0
YWlscy4KKy8vCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworCisvKiBJbXBvcnRzIGEgY29weSBv
ZiBmaWxlc3lzdGVtL2ZpbGVzeXN0ZW1fY29tbW9uLmgsIGZpbGVzeXN0ZW0vZGlyZWN0b3J5X2l0
ZXJhdG9yLmNwcCwKKyAgIGZpbGVzeXN0ZW0vaW50MTI4X2J1aWx0aW5zLmNwcCBhbmQgZmlsZXN5
c3RlbS9vcGVyYXRpb25zLmNwcCBmcm9tIHIzNDM4Mzggb2YgdGhlCisgICBsaWJjKysgcHJvamVj
dCBhbmQgaGFzIG1vZGlmaWVkIHRoZW0gdG8gd29yayBvdXRzaWRlIG9mIGEgYnVpbGQgb2YgbGli
YysrIGl0c2VsZi4gKi8KKworI2luY2x1ZGUgPEF2YWlsYWJpbGl0eS5oPgorCisjaWYgX19NQUNf
T1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8IF9fTUFDXzEwXzE1CisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJTdGRGaWxlc3lzdGVtLmgiCisKKworI2luY2x1ZGUgPF9fY29uZmln
PgorCisvKiAtLSBCRUdJTiBmaWxlc3lzdGVtL2ZpbGVzeXN0ZW1fY29tbW9uLmggLS0gKi8KKwor
I2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPGNocm9ubz4KKyNpbmNsdWRlIDxjc3RkbGliPgor
I2luY2x1ZGUgPGNsaW1pdHM+CisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMv
c3RhdC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0dmZzLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4g
Ly8gZm9yIDo6dXRpbWVzIGFzIHVzZWQgaW4gX19sYXN0X3dyaXRlX3RpbWUKKyNpbmNsdWRlIDxm
Y250bC5oPiAgICAvKiB2YWx1ZXMgZm9yIGZjaG1vZGF0ICovCisKKy8qICNpbmNsdWRlICIuLi9p
bmNsdWRlL2FwcGxlX2F2YWlsYWJpbGl0eS5oIiAqLworCisjaWYgIWRlZmluZWQoX19BUFBMRV9f
KQorLy8gV2UgY2FuIHVzZSB0aGUgcHJlc2VuY2Ugb2YgVVRJTUVfT01JVCB0byBkZXRlY3QgcGxh
dGZvcm1zIHRoYXQgcHJvdmlkZQorLy8gdXRpbWVuc2F0LgorI2lmIGRlZmluZWQoVVRJTUVfT01J
VCkKKyNkZWZpbmUgX0xJQkNQUF9VU0VfVVRJTUVOU0FUCisjZW5kaWYKKyNlbmRpZgorCisjaWYg
ZGVmaW5lZChfX0dOVUNfXykKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBH
Q0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1mdW5jdGlvbiIKKyNlbmRpZgorCitfTElC
Q1BQX0JFR0lOX05BTUVTUEFDRV9GSUxFU1lTVEVNCisKK25hbWVzcGFjZSBkZXRhaWwgeworbmFt
ZXNwYWNlIHsKKworc3RhdGljIHN0cmluZyBmb3JtYXRfc3RyaW5nX2ltcChjb25zdCBjaGFyKiBt
c2csIC4uLikgeworICAvLyB3ZSBtaWdodCBuZWVkIGEgc2Vjb25kIHNob3QgYXQgdGhpcywgc28g
cHJlLWVtcHRpdmx5IG1ha2UgYSBjb3B5CisgIHN0cnVjdCBHdWFyZFZBTGlzdCB7CisgICAgdmFf
bGlzdCYgdGFyZ2V0OworICAgIGJvb2wgYWN0aXZlID0gdHJ1ZTsKKyAgICBHdWFyZFZBTGlzdCh2
YV9saXN0JiB0YXJnZXQpIDogdGFyZ2V0KHRhcmdldCksIGFjdGl2ZSh0cnVlKSB7fQorICAgIHZv
aWQgY2xlYXIoKSB7CisgICAgICBpZiAoYWN0aXZlKQorICAgICAgICB2YV9lbmQodGFyZ2V0KTsK
KyAgICAgIGFjdGl2ZSA9IGZhbHNlOworICAgIH0KKyAgICB+R3VhcmRWQUxpc3QoKSB7CisgICAg
ICBpZiAoYWN0aXZlKQorICAgICAgICB2YV9lbmQodGFyZ2V0KTsKKyAgICB9CisgIH07CisgIHZh
X2xpc3QgYXJnczsKKyAgdmFfc3RhcnQoYXJncywgbXNnKTsKKyAgR3VhcmRWQUxpc3QgYXJnc19n
dWFyZChhcmdzKTsKKworICB2YV9saXN0IGFyZ3NfY3A7CisgIHZhX2NvcHkoYXJnc19jcCwgYXJn
cyk7CisgIEd1YXJkVkFMaXN0IGFyZ3NfY29weV9ndWFyZChhcmdzX2NwKTsKKworICBhcnJheTxj
aGFyLCAyNTY+IGxvY2FsX2J1ZmY7CisgIHNpemVfdCBzaXplID0gbG9jYWxfYnVmZi5zaXplKCk7
CisKKyNpZmRlZiBfX2NsYW5nX18KKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJh
Z21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdmb3JtYXQtbm9ubGl0ZXJhbCIKKyNlbmRp
ZgorICBhdXRvIHJldCA9IDo6dnNucHJpbnRmKGxvY2FsX2J1ZmYuZGF0YSgpLCBzaXplLCBtc2cs
IGFyZ3NfY3ApOworI2lmZGVmIF9fY2xhbmdfXworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBv
cAorI2VuZGlmCisKKyAgYXJnc19jb3B5X2d1YXJkLmNsZWFyKCk7CisKKyAgLy8gaGFuZGxlIGVt
cHR5IGV4cGFuc2lvbgorICBpZiAocmV0ID09IDApCisgICAgcmV0dXJuIHN0cmluZ3t9OworICBp
ZiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihyZXQpIDwgc2l6ZSkKKyAgICByZXR1cm4gc3RyaW5nKGxv
Y2FsX2J1ZmYuZGF0YSgpKTsKKworICAvLyB3ZSBkaWQgbm90IHByb3ZpZGUgYSBsb25nIGVub3Vn
aCBidWZmZXIgb24gb3VyIGZpcnN0IGF0dGVtcHQuCisgIC8vIGFkZCAxIHRvIHNpemUgdG8gYWNj
b3VudCBmb3IgbnVsbC1ieXRlIGluIHNpemUgY2FzdCB0byBwcmV2ZW50IG92ZXJmbG93CisgIHNp
emUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHJldCkgKyAxOworICBhdXRvIGJ1ZmZfcHRyID0gdW5p
cXVlX3B0cjxjaGFyW10+KG5ldyBjaGFyW3NpemVdKTsKKworI2lmZGVmIF9fY2xhbmdfXworI3By
YWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25v
cmVkICItV2Zvcm1hdC1ub25saXRlcmFsIgorI2VuZGlmCisgIHJldCA9IDo6dnNucHJpbnRmKGJ1
ZmZfcHRyLmdldCgpLCBzaXplLCBtc2csIGFyZ3MpOworI2lmZGVmIF9fY2xhbmdfXworI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIHBvcAorI2VuZGlmCisKKyAgcmV0dXJuIHN0cmluZyhidWZmX3B0
ci5nZXQoKSk7Cit9CisKK2NvbnN0IGNoYXIqIHVud3JhcChzdHJpbmcgY29uc3QmIHMpIHsgcmV0
dXJuIHMuY19zdHIoKTsgfQorY29uc3QgY2hhciogdW53cmFwKHBhdGggY29uc3QmIHApIHsgcmV0
dXJuIHAubmF0aXZlKCkuY19zdHIoKTsgfQordGVtcGxhdGUgPGNsYXNzIEFyZz4KK0FyZyBjb25z
dCYgdW53cmFwKEFyZyBjb25zdCYgYSkgeworICBzdGF0aWNfYXNzZXJ0KCFpc19jbGFzczxBcmc+
Ojp2YWx1ZSwgImNhbm5vdCBwYXNzIGNsYXNzIGhlcmUiKTsKKyAgcmV0dXJuIGE7Cit9CisKK3Rl
bXBsYXRlIDxjbGFzcy4uLiBBcmdzPgorc3RyaW5nIGZvcm1hdF9zdHJpbmcoY29uc3QgY2hhciog
Zm10LCBBcmdzIGNvbnN0Ji4uLiBhcmdzKSB7CisgIHJldHVybiBmb3JtYXRfc3RyaW5nX2ltcChm
bXQsIHVud3JhcChhcmdzKS4uLik7Cit9CisKK2Vycm9yX2NvZGUgY2FwdHVyZV9lcnJubygpIHsK
KyAgX0xJQkNQUF9BU1NFUlQoZXJybm8sICJFeHBlY3RlZCBlcnJubyB0byBiZSBub24temVybyIp
OworICByZXR1cm4gZXJyb3JfY29kZShlcnJubywgZ2VuZXJpY19jYXRlZ29yeSgpKTsKK30KKwor
dGVtcGxhdGUgPGNsYXNzIFQ+CitUIGVycm9yX3ZhbHVlKCk7Cit0ZW1wbGF0ZSA8PgorX0xJQkNQ
UF9DT05TVEVYUFJfQUZURVJfQ1hYMTEgdm9pZCBlcnJvcl92YWx1ZTx2b2lkPigpIHt9Cit0ZW1w
bGF0ZSA8PgorYm9vbCBlcnJvcl92YWx1ZTxib29sPigpIHsKKyAgcmV0dXJuIGZhbHNlOworfQor
dGVtcGxhdGUgPD4KK3VpbnRtYXhfdCBlcnJvcl92YWx1ZTx1aW50bWF4X3Q+KCkgeworICByZXR1
cm4gdWludG1heF90KC0xKTsKK30KK3RlbXBsYXRlIDw+CitfTElCQ1BQX0NPTlNURVhQUl9BRlRF
Ul9DWFgxMSBmaWxlX3RpbWVfdHlwZSBlcnJvcl92YWx1ZTxmaWxlX3RpbWVfdHlwZT4oKSB7Cisg
IHJldHVybiBmaWxlX3RpbWVfdHlwZTo6bWluKCk7Cit9Cit0ZW1wbGF0ZSA8PgorcGF0aCBlcnJv
cl92YWx1ZTxwYXRoPigpIHsKKyAgcmV0dXJuIHt9OworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVD4K
K3N0cnVjdCBFcnJvckhhbmRsZXIgeworICBjb25zdCBjaGFyKiBmdW5jX25hbWU7CisgIGVycm9y
X2NvZGUqIGVjID0gbnVsbHB0cjsKKyAgY29uc3QgcGF0aCogcDEgPSBudWxscHRyOworICBjb25z
dCBwYXRoKiBwMiA9IG51bGxwdHI7CisKKyAgRXJyb3JIYW5kbGVyKGNvbnN0IGNoYXIqIGZuYW1l
LCBlcnJvcl9jb2RlKiBlYywgY29uc3QgcGF0aCogcDEgPSBudWxscHRyLAorICAgICAgICAgICAg
ICAgY29uc3QgcGF0aCogcDIgPSBudWxscHRyKQorICAgICAgOiBmdW5jX25hbWUoZm5hbWUpLCBl
YyhlYyksIHAxKHAxKSwgcDIocDIpIHsKKyAgICBpZiAoZWMpCisgICAgICBlYy0+Y2xlYXIoKTsK
KyAgfQorCisgIFQgcmVwb3J0KGNvbnN0IGVycm9yX2NvZGUmIG1fZWMpIGNvbnN0IHsKKyAgICBp
ZiAoZWMpIHsKKyAgICAgICplYyA9IG1fZWM7CisgICAgICByZXR1cm4gZXJyb3JfdmFsdWU8VD4o
KTsKKyAgICB9CisgICAgc3RyaW5nIHdoYXQgPSBzdHJpbmcoImluICIpICsgZnVuY19uYW1lOwor
ICAgIHN3aXRjaCAoYm9vbChwMSkgKyBib29sKHAyKSkgeworICAgIGNhc2UgMDoKKyAgICAgIF9f
dGhyb3dfZmlsZXN5c3RlbV9lcnJvcih3aGF0LCBtX2VjKTsKKyAgICBjYXNlIDE6CisgICAgICBf
X3Rocm93X2ZpbGVzeXN0ZW1fZXJyb3Iod2hhdCwgKnAxLCBtX2VjKTsKKyAgICBjYXNlIDI6Cisg
ICAgICBfX3Rocm93X2ZpbGVzeXN0ZW1fZXJyb3Iod2hhdCwgKnAxLCAqcDIsIG1fZWMpOworICAg
IH0KKyAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3Mu
Li4gQXJncz4KKyAgVCByZXBvcnQoY29uc3QgZXJyb3JfY29kZSYgbV9lYywgY29uc3QgY2hhciog
bXNnLCBBcmdzIGNvbnN0Ji4uLiBhcmdzKSBjb25zdCB7CisgICAgaWYgKGVjKSB7CisgICAgICAq
ZWMgPSBtX2VjOworICAgICAgcmV0dXJuIGVycm9yX3ZhbHVlPFQ+KCk7CisgICAgfQorICAgIHN0
cmluZyB3aGF0ID0KKyAgICAgICAgc3RyaW5nKCJpbiAiKSArIGZ1bmNfbmFtZSArICI6ICIgKyBm
b3JtYXRfc3RyaW5nKG1zZywgYXJncy4uLik7CisgICAgc3dpdGNoIChib29sKHAxKSArIGJvb2wo
cDIpKSB7CisgICAgY2FzZSAwOgorICAgICAgX190aHJvd19maWxlc3lzdGVtX2Vycm9yKHdoYXQs
IG1fZWMpOworICAgIGNhc2UgMToKKyAgICAgIF9fdGhyb3dfZmlsZXN5c3RlbV9lcnJvcih3aGF0
LCAqcDEsIG1fZWMpOworICAgIGNhc2UgMjoKKyAgICAgIF9fdGhyb3dfZmlsZXN5c3RlbV9lcnJv
cih3aGF0LCAqcDEsICpwMiwgbV9lYyk7CisgICAgfQorICAgIF9MSUJDUFBfVU5SRUFDSEFCTEUo
KTsKKyAgfQorCisgIFQgcmVwb3J0KGVycmMgY29uc3QmIGVycikgY29uc3QgeyByZXR1cm4gcmVw
b3J0KG1ha2VfZXJyb3JfY29kZShlcnIpKTsgfQorCisgIHRlbXBsYXRlIDxjbGFzcy4uLiBBcmdz
PgorICBUIHJlcG9ydChlcnJjIGNvbnN0JiBlcnIsIGNvbnN0IGNoYXIqIG1zZywgQXJncyBjb25z
dCYuLi4gYXJncykgY29uc3QgeworICAgIHJldHVybiByZXBvcnQobWFrZV9lcnJvcl9jb2RlKGVy
ciksIG1zZywgYXJncy4uLik7CisgIH0KKworcHJpdmF0ZToKKyAgRXJyb3JIYW5kbGVyKEVycm9y
SGFuZGxlciBjb25zdCYpID0gZGVsZXRlOworICBFcnJvckhhbmRsZXImIG9wZXJhdG9yPShFcnJv
ckhhbmRsZXIgY29uc3QmKSA9IGRlbGV0ZTsKK307CisKK3VzaW5nIGNocm9ubzo6ZHVyYXRpb247
Cit1c2luZyBjaHJvbm86OmR1cmF0aW9uX2Nhc3Q7CisKK3VzaW5nIFRpbWVTcGVjID0gc3RydWN0
IDo6dGltZXNwZWM7Cit1c2luZyBTdGF0VCA9IHN0cnVjdCA6OnN0YXQ7CisKK3RlbXBsYXRlIDxj
bGFzcyBGaWxlVGltZVQsIGNsYXNzIFRpbWVULAorICAgICAgICAgIGJvb2wgSXNGbG9hdCA9IGlz
X2Zsb2F0aW5nX3BvaW50PHR5cGVuYW1lIEZpbGVUaW1lVDo6cmVwPjo6dmFsdWU+CitzdHJ1Y3Qg
dGltZV91dGlsX2Jhc2UgeworICB1c2luZyByZXAgPSB0eXBlbmFtZSBGaWxlVGltZVQ6OnJlcDsK
KyAgdXNpbmcgZnNfZHVyYXRpb24gPSB0eXBlbmFtZSBGaWxlVGltZVQ6OmR1cmF0aW9uOworICB1
c2luZyBmc19zZWNvbmRzID0gZHVyYXRpb248cmVwPjsKKyAgdXNpbmcgZnNfbmFub3NlY29uZHMg
PSBkdXJhdGlvbjxyZXAsIG5hbm8+OworICB1c2luZyBmc19taWNyb3NlY29uZHMgPSBkdXJhdGlv
bjxyZXAsIG1pY3JvPjsKKworICBzdGF0aWMgY29uc3RleHByIHJlcCBtYXhfc2Vjb25kcyA9Cisg
ICAgICBkdXJhdGlvbl9jYXN0PGZzX3NlY29uZHM+KEZpbGVUaW1lVDo6ZHVyYXRpb246Om1heCgp
KS5jb3VudCgpOworCisgIHN0YXRpYyBjb25zdGV4cHIgcmVwIG1heF9uc2VjID0KKyAgICAgIGR1
cmF0aW9uX2Nhc3Q8ZnNfbmFub3NlY29uZHM+KEZpbGVUaW1lVDo6ZHVyYXRpb246Om1heCgpIC0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZzX3NlY29uZHMobWF4X3NlY29u
ZHMpKQorICAgICAgICAgIC5jb3VudCgpOworCisgIHN0YXRpYyBjb25zdGV4cHIgcmVwIG1pbl9z
ZWNvbmRzID0KKyAgICAgIGR1cmF0aW9uX2Nhc3Q8ZnNfc2Vjb25kcz4oRmlsZVRpbWVUOjpkdXJh
dGlvbjo6bWluKCkpLmNvdW50KCk7CisKKyAgc3RhdGljIGNvbnN0ZXhwciByZXAgbWluX25zZWNf
dGltZXNwZWMgPQorICAgICAgZHVyYXRpb25fY2FzdDxmc19uYW5vc2Vjb25kcz4oCisgICAgICAg
ICAgKEZpbGVUaW1lVDo6ZHVyYXRpb246Om1pbigpIC0gZnNfc2Vjb25kcyhtaW5fc2Vjb25kcykp
ICsKKyAgICAgICAgICBmc19zZWNvbmRzKDEpKQorICAgICAgICAgIC5jb3VudCgpOworCitwcml2
YXRlOgorI2lmIF9MSUJDUFBfU1REX1ZFUiA+IDExICYmICFkZWZpbmVkKF9MSUJDUFBfSEFTX05P
X0NYWDE0X0NPTlNURVhQUikKKyAgc3RhdGljIGNvbnN0ZXhwciBmc19kdXJhdGlvbiBnZXRfbWlu
X25zZWNzKCkgeworICAgIHJldHVybiBkdXJhdGlvbl9jYXN0PGZzX2R1cmF0aW9uPigKKyAgICAg
ICAgZnNfbmFub3NlY29uZHMobWluX25zZWNfdGltZXNwZWMpIC0KKyAgICAgICAgZHVyYXRpb25f
Y2FzdDxmc19uYW5vc2Vjb25kcz4oZnNfc2Vjb25kcygxKSkpOworICB9CisgIC8vIFN0YXRpYyBh
c3NlcnQgdGhhdCB0aGVzZSB2YWx1ZXMgcHJvcGVybHkgcm91bmQgdHJpcC4KKyAgc3RhdGljX2Fz
c2VydChmc19zZWNvbmRzKG1pbl9zZWNvbmRzKSArIGdldF9taW5fbnNlY3MoKSA9PQorICAgICAg
ICAgICAgICAgICAgICBGaWxlVGltZVQ6OmR1cmF0aW9uOjptaW4oKSwKKyAgICAgICAgICAgICAg
ICAidmFsdWUgZG9lc24ndCByb3VuZHRyaXAiKTsKKworICBzdGF0aWMgY29uc3RleHByIGJvb2wg
Y2hlY2tfcmFuZ2UoKSB7CisgICAgLy8gVGhpcyBraW5kYSBzdWNrcywgYnV0IGl0J3Mgd2hhdCBo
YXBwZW5zIHdoZW4gd2UgZG9uJ3QgaGF2ZSBfX2ludDEyOF90LgorICAgIGlmIChzaXplb2YoVGlt
ZVQpID09IHNpemVvZihyZXApKSB7CisgICAgICB0eXBlZGVmIGR1cmF0aW9uPGxvbmcgbG9uZywg
cmF0aW88MzYwMCAqIDI0ICogMzY1PiA+IFllYXJzOworICAgICAgcmV0dXJuIGR1cmF0aW9uX2Nh
c3Q8WWVhcnM+KGZzX3NlY29uZHMobWF4X3NlY29uZHMpKSA+IFllYXJzKDI1MCkgJiYKKyAgICAg
ICAgICAgICBkdXJhdGlvbl9jYXN0PFllYXJzPihmc19zZWNvbmRzKG1pbl9zZWNvbmRzKSkgPCBZ
ZWFycygtMjUwKTsKKyAgICB9CisgICAgcmV0dXJuIG1heF9zZWNvbmRzID49IG51bWVyaWNfbGlt
aXRzPFRpbWVUPjo6bWF4KCkgJiYKKyAgICAgICAgICAgbWluX3NlY29uZHMgPD0gbnVtZXJpY19s
aW1pdHM8VGltZVQ+OjptaW4oKTsKKyAgfQorICBzdGF0aWNfYXNzZXJ0KGNoZWNrX3JhbmdlKCks
ICJ0aGUgcmVwcmVzZW50YWJsZSByYW5nZSBpcyB1bmFjY2VwdGFibGUgc21hbGwiKTsKKyNlbmRp
ZgorfTsKKwordGVtcGxhdGUgPGNsYXNzIEZpbGVUaW1lVCwgY2xhc3MgVGltZVQ+CitzdHJ1Y3Qg
dGltZV91dGlsX2Jhc2U8RmlsZVRpbWVULCBUaW1lVCwgdHJ1ZT4geworICB1c2luZyByZXAgPSB0
eXBlbmFtZSBGaWxlVGltZVQ6OnJlcDsKKyAgdXNpbmcgZnNfZHVyYXRpb24gPSB0eXBlbmFtZSBG
aWxlVGltZVQ6OmR1cmF0aW9uOworICB1c2luZyBmc19zZWNvbmRzID0gZHVyYXRpb248cmVwPjsK
KyAgdXNpbmcgZnNfbmFub3NlY29uZHMgPSBkdXJhdGlvbjxyZXAsIG5hbm8+OworICB1c2luZyBm
c19taWNyb3NlY29uZHMgPSBkdXJhdGlvbjxyZXAsIG1pY3JvPjsKKworICBzdGF0aWMgY29uc3Qg
cmVwIG1heF9zZWNvbmRzOworICBzdGF0aWMgY29uc3QgcmVwIG1heF9uc2VjOworICBzdGF0aWMg
Y29uc3QgcmVwIG1pbl9zZWNvbmRzOworICBzdGF0aWMgY29uc3QgcmVwIG1pbl9uc2VjX3RpbWVz
cGVjOworfTsKKwordGVtcGxhdGUgPGNsYXNzIEZpbGVUaW1lVCwgY2xhc3MgVGltZVQ+Citjb25z
dCB0eXBlbmFtZSBGaWxlVGltZVQ6OnJlcAorICAgIHRpbWVfdXRpbF9iYXNlPEZpbGVUaW1lVCwg
VGltZVQsIHRydWU+OjptYXhfc2Vjb25kcyA9CisgICAgICAgIGR1cmF0aW9uX2Nhc3Q8ZnNfc2Vj
b25kcz4oRmlsZVRpbWVUOjpkdXJhdGlvbjo6bWF4KCkpLmNvdW50KCk7CisKK3RlbXBsYXRlIDxj
bGFzcyBGaWxlVGltZVQsIGNsYXNzIFRpbWVUPgorY29uc3QgdHlwZW5hbWUgRmlsZVRpbWVUOjpy
ZXAgdGltZV91dGlsX2Jhc2U8RmlsZVRpbWVULCBUaW1lVCwgdHJ1ZT46Om1heF9uc2VjID0KKyAg
ICBkdXJhdGlvbl9jYXN0PGZzX25hbm9zZWNvbmRzPihGaWxlVGltZVQ6OmR1cmF0aW9uOjptYXgo
KSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnNfc2Vjb25kcyhtYXhfc2Vj
b25kcykpCisgICAgICAgIC5jb3VudCgpOworCit0ZW1wbGF0ZSA8Y2xhc3MgRmlsZVRpbWVULCBj
bGFzcyBUaW1lVD4KK2NvbnN0IHR5cGVuYW1lIEZpbGVUaW1lVDo6cmVwCisgICAgdGltZV91dGls
X2Jhc2U8RmlsZVRpbWVULCBUaW1lVCwgdHJ1ZT46Om1pbl9zZWNvbmRzID0KKyAgICAgICAgZHVy
YXRpb25fY2FzdDxmc19zZWNvbmRzPihGaWxlVGltZVQ6OmR1cmF0aW9uOjptaW4oKSkuY291bnQo
KTsKKwordGVtcGxhdGUgPGNsYXNzIEZpbGVUaW1lVCwgY2xhc3MgVGltZVQ+Citjb25zdCB0eXBl
bmFtZSBGaWxlVGltZVQ6OnJlcAorICAgIHRpbWVfdXRpbF9iYXNlPEZpbGVUaW1lVCwgVGltZVQs
IHRydWU+OjptaW5fbnNlY190aW1lc3BlYyA9CisgICAgICAgIGR1cmF0aW9uX2Nhc3Q8ZnNfbmFu
b3NlY29uZHM+KChGaWxlVGltZVQ6OmR1cmF0aW9uOjptaW4oKSAtCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmc19zZWNvbmRzKG1pbl9zZWNvbmRzKSkgKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmc19zZWNvbmRzKDEpKQorICAgICAgICAg
ICAgLmNvdW50KCk7CisKK3RlbXBsYXRlIDxjbGFzcyBGaWxlVGltZVQsIGNsYXNzIFRpbWVULCBj
bGFzcyBUaW1lU3BlY1Q+CitzdHJ1Y3QgdGltZV91dGlsIDogdGltZV91dGlsX2Jhc2U8RmlsZVRp
bWVULCBUaW1lVD4geworICB1c2luZyBCYXNlID0gdGltZV91dGlsX2Jhc2U8RmlsZVRpbWVULCBU
aW1lVD47CisgIHVzaW5nIEJhc2U6Om1heF9uc2VjOworICB1c2luZyBCYXNlOjptYXhfc2Vjb25k
czsKKyAgdXNpbmcgQmFzZTo6bWluX25zZWNfdGltZXNwZWM7CisgIHVzaW5nIEJhc2U6Om1pbl9z
ZWNvbmRzOworCisgIHVzaW5nIHR5cGVuYW1lIEJhc2U6OmZzX2R1cmF0aW9uOworICB1c2luZyB0
eXBlbmFtZSBCYXNlOjpmc19taWNyb3NlY29uZHM7CisgIHVzaW5nIHR5cGVuYW1lIEJhc2U6OmZz
X25hbm9zZWNvbmRzOworICB1c2luZyB0eXBlbmFtZSBCYXNlOjpmc19zZWNvbmRzOworCitwdWJs
aWM6CisgIHRlbXBsYXRlIDxjbGFzcyBDVHlwZSwgY2xhc3MgQ2hyb25vVHlwZT4KKyAgc3RhdGlj
IF9MSUJDUFBfQ09OU1RFWFBSX0FGVEVSX0NYWDExIGJvb2wgY2hlY2tlZF9zZXQoQ1R5cGUqIG91
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ2hyb25vVHlwZSB0aW1lKSB7CisgICAgdXNpbmcgTGltID0gbnVtZXJpY19saW1pdHM8Q1R5
cGU+OworICAgIGlmICh0aW1lID4gTGltOjptYXgoKSB8fCB0aW1lIDwgTGltOjptaW4oKSkKKyAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAqb3V0ID0gc3RhdGljX2Nhc3Q8Q1R5cGU+KHRpbWUpOwor
ICAgIHJldHVybiB0cnVlOworICB9CisKKyAgc3RhdGljIF9MSUJDUFBfQ09OU1RFWFBSX0FGVEVS
X0NYWDExIGJvb2wgaXNfcmVwcmVzZW50YWJsZShUaW1lU3BlY1QgdG0pIHsKKyAgICBpZiAodG0u
dHZfc2VjID49IDApIHsKKyAgICAgIHJldHVybiB0bS50dl9zZWMgPCBtYXhfc2Vjb25kcyB8fAor
ICAgICAgICAgICAgICh0bS50dl9zZWMgPT0gbWF4X3NlY29uZHMgJiYgdG0udHZfbnNlYyA8PSBt
YXhfbnNlYyk7CisgICAgfSBlbHNlIGlmICh0bS50dl9zZWMgPT0gKG1pbl9zZWNvbmRzIC0gMSkp
IHsKKyAgICAgIHJldHVybiB0bS50dl9uc2VjID49IG1pbl9uc2VjX3RpbWVzcGVjOworICAgIH0g
ZWxzZSB7CisgICAgICByZXR1cm4gdG0udHZfc2VjID49IG1pbl9zZWNvbmRzOworICAgIH0KKyAg
fQorCisgIHN0YXRpYyBfTElCQ1BQX0NPTlNURVhQUl9BRlRFUl9DWFgxMSBib29sIGlzX3JlcHJl
c2VudGFibGUoRmlsZVRpbWVUIHRtKSB7CisgICAgYXV0byBzZWNzID0gZHVyYXRpb25fY2FzdDxm
c19zZWNvbmRzPih0bS50aW1lX3NpbmNlX2Vwb2NoKCkpOworICAgIGF1dG8gbnNlY3MgPSBkdXJh
dGlvbl9jYXN0PGZzX25hbm9zZWNvbmRzPih0bS50aW1lX3NpbmNlX2Vwb2NoKCkgLSBzZWNzKTsK
KyAgICBpZiAobnNlY3MuY291bnQoKSA8IDApIHsKKyAgICAgIHNlY3MgPSBzZWNzICsgZnNfc2Vj
b25kcygxKTsKKyAgICAgIG5zZWNzID0gbnNlY3MgKyBmc19zZWNvbmRzKDEpOworICAgIH0KKyAg
ICB1c2luZyBUTGltID0gbnVtZXJpY19saW1pdHM8VGltZVQ+OworICAgIGlmIChzZWNzLmNvdW50
KCkgPj0gMCkKKyAgICAgIHJldHVybiBzZWNzLmNvdW50KCkgPD0gVExpbTo6bWF4KCk7CisgICAg
cmV0dXJuIHNlY3MuY291bnQoKSA+PSBUTGltOjptaW4oKTsKKyAgfQorCisgIHN0YXRpYyBfTElC
Q1BQX0NPTlNURVhQUl9BRlRFUl9DWFgxMSBGaWxlVGltZVQKKyAgY29udmVydF9mcm9tX3RpbWVz
cGVjKFRpbWVTcGVjVCB0bSkgeworICAgIGlmICh0bS50dl9zZWMgPj0gMCB8fCB0bS50dl9uc2Vj
ID09IDApIHsKKyAgICAgIHJldHVybiBGaWxlVGltZVQoZnNfc2Vjb25kcyh0bS50dl9zZWMpICsK
KyAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25fY2FzdDxmc19kdXJhdGlvbj4oZnNfbmFu
b3NlY29uZHModG0udHZfbnNlYykpKTsKKyAgICB9IGVsc2UgeyAvLyB0bS50dl9zZWMgPCAwCisg
ICAgICBhdXRvIGFkal9zdWJzZWMgPSBkdXJhdGlvbl9jYXN0PGZzX2R1cmF0aW9uPihmc19zZWNv
bmRzKDEpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZzX25hbm9zZWNvbmRzKHRtLnR2X25zZWMpKTsKKyAgICAgIGF1dG8gRHVyID0gZnNfc2Vj
b25kcyh0bS50dl9zZWMgKyAxKSAtIGFkal9zdWJzZWM7CisgICAgICByZXR1cm4gRmlsZVRpbWVU
KER1cik7CisgICAgfQorICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIFN1YlNlY1Q+CisgIHN0YXRp
YyBfTElCQ1BQX0NPTlNURVhQUl9BRlRFUl9DWFgxMSBib29sCisgIHNldF90aW1lc19jaGVja2Vk
KFRpbWVUKiBzZWNfb3V0LCBTdWJTZWNUKiBzdWJzZWNfb3V0LCBGaWxlVGltZVQgdHApIHsKKyAg
ICBhdXRvIGR1ciA9IHRwLnRpbWVfc2luY2VfZXBvY2goKTsKKyAgICBhdXRvIHNlY19kdXIgPSBk
dXJhdGlvbl9jYXN0PGZzX3NlY29uZHM+KGR1cik7CisgICAgYXV0byBzdWJzZWNfZHVyID0gZHVy
YXRpb25fY2FzdDxmc19uYW5vc2Vjb25kcz4oZHVyIC0gc2VjX2R1cik7CisgICAgLy8gVGhlIHR2
X25zZWMgYW5kIHR2X3VzZWMgZmllbGRzIG11c3Qgbm90IGJlIG5lZ2F0aXZlIHNvIGFkanVzdCBh
Y2NvcmRpbmdseQorICAgIGlmIChzdWJzZWNfZHVyLmNvdW50KCkgPCAwKSB7CisgICAgICBpZiAo
c2VjX2R1ci5jb3VudCgpID4gbWluX3NlY29uZHMpIHsKKyAgICAgICAgc2VjX2R1ciA9IHNlY19k
dXIgLSBmc19zZWNvbmRzKDEpOworICAgICAgICBzdWJzZWNfZHVyID0gc3Vic2VjX2R1ciArIGZz
X3NlY29uZHMoMSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBzdWJzZWNfZHVyID0gZnNfbmFu
b3NlY29uZHM6Onplcm8oKTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGNoZWNrZWRfc2V0
KHNlY19vdXQsIHNlY19kdXIuY291bnQoKSkgJiYKKyAgICAgICAgICAgY2hlY2tlZF9zZXQoc3Vi
c2VjX291dCwgc3Vic2VjX2R1ci5jb3VudCgpKTsKKyAgfQorICBzdGF0aWMgX0xJQkNQUF9DT05T
VEVYUFJfQUZURVJfQ1hYMTEgYm9vbCBjb252ZXJ0X3RvX3RpbWVzcGVjKFRpbWVTcGVjVCYgZGVz
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBGaWxlVGltZVQgdHApIHsKKyAgICBpZiAoIWlzX3JlcHJlc2VudGFibGUodHAp
KQorICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBzZXRfdGltZXNfY2hlY2tlZCgmZGVz
dC50dl9zZWMsICZkZXN0LnR2X25zZWMsIHRwKTsKKyAgfQorfTsKKwordXNpbmcgZnNfdGltZSA9
IHRpbWVfdXRpbDxmaWxlX3RpbWVfdHlwZSwgdGltZV90LCBUaW1lU3BlYz47CisKKyNpZiBkZWZp
bmVkKF9fQVBQTEVfXykKK1RpbWVTcGVjIGV4dHJhY3RfbXRpbWUoU3RhdFQgY29uc3QmIHN0KSB7
IHJldHVybiBzdC5zdF9tdGltZXNwZWM7IH0KK1RpbWVTcGVjIGV4dHJhY3RfYXRpbWUoU3RhdFQg
Y29uc3QmIHN0KSB7IHJldHVybiBzdC5zdF9hdGltZXNwZWM7IH0KKyNlbHNlCitUaW1lU3BlYyBl
eHRyYWN0X210aW1lKFN0YXRUIGNvbnN0JiBzdCkgeyByZXR1cm4gc3Quc3RfbXRpbTsgfQorVGlt
ZVNwZWMgZXh0cmFjdF9hdGltZShTdGF0VCBjb25zdCYgc3QpIHsgcmV0dXJuIHN0LnN0X2F0aW07
IH0KKyNlbmRpZgorCisvLyBhbGxvdyB0aGUgdXRpbWVzIGltcGxlbWVudGF0aW9uIHRvIGNvbXBp
bGUgZXZlbiBpdCB3ZSdyZSBub3QgZ29pbmcKKy8vIHRvIHVzZSBpdC4KKworYm9vbCBwb3NpeF91
dGltZXMoY29uc3QgcGF0aCYgcCwgc3RkOjphcnJheTxUaW1lU3BlYywgMj4gY29uc3QmIFRTLAor
ICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgZWMpIHsKKyAgdXNpbmcgbmFtZXNwYWNlIGNo
cm9ubzsKKyAgYXV0byBDb252ZXJ0ID0gW10obG9uZyBuc2VjKSB7CisgICAgdXNpbmcgaW50X3R5
cGUgPSBkZWNsdHlwZShzdGQ6OmRlY2x2YWw8IDo6dGltZXZhbD4oKS50dl91c2VjKTsKKyAgICBh
dXRvIGR1ciA9IGR1cmF0aW9uX2Nhc3Q8bWljcm9zZWNvbmRzPihuYW5vc2Vjb25kcyhuc2VjKSku
Y291bnQoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KGR1cik7CisgIH07Cisg
IHN0cnVjdCA6OnRpbWV2YWwgQ29udmVydGVkVFNbMl0gPSB7e1RTWzBdLnR2X3NlYywgQ29udmVy
dChUU1swXS50dl9uc2VjKX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
e1RTWzFdLnR2X3NlYywgQ29udmVydChUU1sxXS50dl9uc2VjKX19OworICBpZiAoOjp1dGltZXMo
cC5jX3N0cigpLCBDb252ZXJ0ZWRUUykgPT0gLTEpIHsKKyAgICBlYyA9IGNhcHR1cmVfZXJybm8o
KTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKKyNpZiBkZWZp
bmVkKF9MSUJDUFBfVVNFX1VUSU1FTlNBVCkKK2Jvb2wgcG9zaXhfdXRpbWVuc2F0KGNvbnN0IHBh
dGgmIHAsIHN0ZDo6YXJyYXk8VGltZVNwZWMsIDI+IGNvbnN0JiBUUywKKyAgICAgICAgICAgICAg
ICAgICAgIGVycm9yX2NvZGUmIGVjKSB7CisgIGlmICg6OnV0aW1lbnNhdChBVF9GRENXRCwgcC5j
X3N0cigpLCBUUy5kYXRhKCksIDApID09IC0xKSB7CisgICAgZWMgPSBjYXB0dXJlX2Vycm5vKCk7
CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKK2Jv
b2wgc2V0X2ZpbGVfdGltZXMoY29uc3QgcGF0aCYgcCwgc3RkOjphcnJheTxUaW1lU3BlYywgMj4g
Y29uc3QmIFRTLAorICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYykgeworI2lmICFk
ZWZpbmVkKF9MSUJDUFBfVVNFX1VUSU1FTlNBVCkKKyAgcmV0dXJuIHBvc2l4X3V0aW1lcyhwLCBU
UywgZWMpOworI2Vsc2UKKyAgcmV0dXJuIHBvc2l4X3V0aW1lbnNhdChwLCBUUywgZWMpOworI2Vu
ZGlmCit9CisKK30gLy8gbmFtZXNwYWNlCit9IC8vIGVuZCBuYW1lc3BhY2UgZGV0YWlsCisKK19M
SUJDUFBfRU5EX05BTUVTUEFDRV9GSUxFU1lTVEVNCisKKy8qIC0tIEVORCBmaWxlc3lzdGVtL2Zp
bGVzeXN0ZW1fY29tbW9uLmggLS0gKi8KKworLyogLS0gQkVHSU4gZmlsZXN5c3RlbS9kaXJlY3Rv
cnlfaXRlcmF0b3IuY3BwIC0tICovCisKKyNpZiBkZWZpbmVkKF9MSUJDUFBfV0lOMzJBUEkpCisj
ZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNpbmNsdWRlIDxXaW5kb3dzLmg+CisjZWxzZQor
I2luY2x1ZGUgPGRpcmVudC5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZXJybm8uaD4KKworLyogI2lu
Y2x1ZGUgImZpbGVzeXN0ZW1fY29tbW9uLmgiICovCisKK19MSUJDUFBfQkVHSU5fTkFNRVNQQUNF
X0ZJTEVTWVNURU0KKworbmFtZXNwYWNlIGRldGFpbCB7CituYW1lc3BhY2UgeworCisjaWYgIWRl
ZmluZWQoX0xJQkNQUF9XSU4zMkFQSSkKK3RlbXBsYXRlIDxjbGFzcyBEaXJFbnRULCBjbGFzcyA9
IGRlY2x0eXBlKERpckVudFQ6OmRfdHlwZSk+CitzdGF0aWMgZmlsZV90eXBlIGdldF9maWxlX3R5
cGUoRGlyRW50VCogZW50LCBpbnQpIHsKKyAgc3dpdGNoIChlbnQtPmRfdHlwZSkgeworICBjYXNl
IERUX0JMSzoKKyAgICByZXR1cm4gZmlsZV90eXBlOjpibG9jazsKKyAgY2FzZSBEVF9DSFI6Cisg
ICAgcmV0dXJuIGZpbGVfdHlwZTo6Y2hhcmFjdGVyOworICBjYXNlIERUX0RJUjoKKyAgICByZXR1
cm4gZmlsZV90eXBlOjpkaXJlY3Rvcnk7CisgIGNhc2UgRFRfRklGTzoKKyAgICByZXR1cm4gZmls
ZV90eXBlOjpmaWZvOworICBjYXNlIERUX0xOSzoKKyAgICByZXR1cm4gZmlsZV90eXBlOjpzeW1s
aW5rOworICBjYXNlIERUX1JFRzoKKyAgICByZXR1cm4gZmlsZV90eXBlOjpyZWd1bGFyOworICBj
YXNlIERUX1NPQ0s6CisgICAgcmV0dXJuIGZpbGVfdHlwZTo6c29ja2V0OworICAvLyBVbmxpa2Ug
aW4gbHN0YXQsIGhpdHRpbmcgInVua25vd24iIGhlcmUgc2ltcGx5IG1lYW5zIHRoYXQgdGhlIHVu
ZGVybHlpbmcKKyAgLy8gZmlsZXN5c3RlbSBkb2Vzbid0IHN1cHBvcnQgZF90eXBlLiBSZXBvcnQg
aXMgYXMgJ25vbmUnIHNvIHdlIGNvcnJlY3RseQorICAvLyBzZXQgdGhlIGNhY2hlIHRvIGVtcHR5
LgorICBjYXNlIERUX1VOS05PV046CisgICAgYnJlYWs7CisgIH0KKyAgcmV0dXJuIGZpbGVfdHlw
ZTo6bm9uZTsKK30KKwordGVtcGxhdGUgPGNsYXNzIERpckVudFQ+CitzdGF0aWMgZmlsZV90eXBl
IGdldF9maWxlX3R5cGUoRGlyRW50VCogZW50LCBsb25nKSB7CisgIHJldHVybiBmaWxlX3R5cGU6
Om5vbmU7Cit9CisKK3N0YXRpYyBwYWlyPHN0cmluZ192aWV3LCBmaWxlX3R5cGU+IHBvc2l4X3Jl
YWRkaXIoRElSKiBkaXJfc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYykgeworICBzdHJ1Y3QgZGlyZW50KiBkaXJf
ZW50cnlfcHRyID0gbnVsbHB0cjsKKyAgZXJybm8gPSAwOyAvLyB6ZXJvIGVycm5vIGluIG9yZGVy
IHRvIGRldGVjdCBlcnJvcnMKKyAgZWMuY2xlYXIoKTsKKyAgaWYgKChkaXJfZW50cnlfcHRyID0g
OjpyZWFkZGlyKGRpcl9zdHJlYW0pKSA9PSBudWxscHRyKSB7CisgICAgaWYgKGVycm5vKQorICAg
ICAgZWMgPSBjYXB0dXJlX2Vycm5vKCk7CisgICAgcmV0dXJuIHt9OworICB9IGVsc2UgeworICAg
IHJldHVybiB7ZGlyX2VudHJ5X3B0ci0+ZF9uYW1lLCBnZXRfZmlsZV90eXBlKGRpcl9lbnRyeV9w
dHIsIDApfTsKKyAgfQorfQorI2Vsc2UKKworc3RhdGljIGZpbGVfdHlwZSBnZXRfZmlsZV90eXBl
KGNvbnN0IFdJTjMyX0ZJTkRfREFUQSYgZGF0YSkgeworICAvL2F1dG8gYXR0cnMgPSBkYXRhLmR3
RmlsZUF0dHJpYnV0ZXM7CisgIC8vIEZJWE1FKEVyaWNXRikKKyAgcmV0dXJuIGZpbGVfdHlwZTo6
dW5rbm93bjsKK30KK3N0YXRpYyB1aW50bWF4X3QgZ2V0X2ZpbGVfc2l6ZShjb25zdCBXSU4zMl9G
SU5EX0RBVEEmIGRhdGEpIHsKKyAgcmV0dXJuIChkYXRhLm5GaWxlU2l6ZUhpZ2h0ICogKE1BWERX
T1JEICsgMSkpICsgZGF0YS5uRmlsZVNpemVMb3c7Cit9CitzdGF0aWMgZmlsZV90aW1lX3R5cGUg
Z2V0X3dyaXRlX3RpbWUoY29uc3QgV0lOMzJfRklORF9EQVRBJiBkYXRhKSB7CisgIFVMQVJHRV9J
TlRFR0VSIHRtcDsKKyAgRklMRVRJTUUmIHRpbWUgPSBkYXRhLmZ0TGFzdFdyaXRlVGltZTsKKyAg
dG1wLnUuTG93UGFydCA9IHRpbWUuZHdMb3dEYXRlVGltZTsKKyAgdG1wLnUuSGlnaFBhcnQgPSB0
aW1lLmR3SGlnaERhdGVUaW1lOworICByZXR1cm4gZmlsZV90aW1lX3R5cGUoZmlsZV90aW1lX3R5
cGU6OmR1cmF0aW9uKHRpbWUuUXVhZFBhcnQpKTsKK30KKworI2VuZGlmCisKK30gLy8gbmFtZXNw
YWNlCit9IC8vIG5hbWVzcGFjZSBkZXRhaWwKKwordXNpbmcgZGV0YWlsOjpFcnJvckhhbmRsZXI7
CisKKyNpZiBkZWZpbmVkKF9MSUJDUFBfV0lOMzJBUEkpCitjbGFzcyBfX2Rpcl9zdHJlYW0gewor
cHVibGljOgorICBfX2Rpcl9zdHJlYW0oKSA9IGRlbGV0ZTsKKyAgX19kaXJfc3RyZWFtJiBvcGVy
YXRvcj0oY29uc3QgX19kaXJfc3RyZWFtJikgPSBkZWxldGU7CisKKyAgX19kaXJfc3RyZWFtKF9f
ZGlyX3N0cmVhbSYmIF9fZHMpIG5vZXhjZXB0IDogX19zdHJlYW1fKF9fZHMuX19zdHJlYW1fKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yb290Xyht
b3ZlKF9fZHMuX19yb290XykpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2VudHJ5Xyhtb3ZlKF9fZHMuX19lbnRyeV8pKSB7CisgICAgX19kcy5fX3N0
cmVhbV8gPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKyAgfQorCisgIF9fZGlyX3N0cmVhbShjb25z
dCBwYXRoJiByb290LCBkaXJlY3Rvcnlfb3B0aW9ucyBvcHRzLCBlcnJvcl9jb2RlJiBlYykKKyAg
ICAgIDogX19zdHJlYW1fKElOVkFMSURfSEFORExFX1ZBTFVFKSwgX19yb290Xyhyb290KSB7Cisg
ICAgX19zdHJlYW1fID0gOjpGaW5kRmlyc3RGaWxlRXgocm9vdC5jX3N0cigpLCAmX19kYXRhXyk7
CisgICAgaWYgKF9fc3RyZWFtXyA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworICAgICAgZWMg
PSBlcnJvcl9jb2RlKDo6R2V0TGFzdEVycm9yKCksIGdlbmVyaWNfY2F0ZWdvcnkoKSk7CisgICAg
ICBjb25zdCBib29sIGlnbm9yZV9wZXJtaXNzaW9uX2RlbmllZCA9CisgICAgICAgICAgYm9vbChv
cHRzICYgZGlyZWN0b3J5X29wdGlvbnM6OnNraXBfcGVybWlzc2lvbl9kZW5pZWQpOworICAgICAg
aWYgKGlnbm9yZV9wZXJtaXNzaW9uX2RlbmllZCAmJiBlYy52YWx1ZSgpID09IEVSUk9SX0FDQ0VT
U19ERU5JRUQpCisgICAgICAgIGVjLmNsZWFyKCk7CisgICAgICByZXR1cm47CisgICAgfQorICB9
CisKKyAgfl9fZGlyX3N0cmVhbSgpIG5vZXhjZXB0IHsKKyAgICBpZiAoX19zdHJlYW1fID09IElO
VkFMSURfSEFORExFX1ZBTFVFKQorICAgICAgcmV0dXJuOworICAgIGNsb3NlKCk7CisgIH0KKwor
ICBib29sIGdvb2QoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfX3N0cmVhbV8gIT0gSU5WQUxJ
RF9IQU5ETEVfVkFMVUU7IH0KKworICBib29sIGFkdmFuY2UoZXJyb3JfY29kZSYgZWMpIHsKKyAg
ICB3aGlsZSAoOjpGaW5kTmV4dEZpbGUoX19zdHJlYW1fLCAmX19kYXRhXykpIHsKKyAgICAgIGlm
ICghc3RyY21wKF9fZGF0YV8uY0ZpbGVOYW1lLCAiLiIpIHx8IHN0cmNtcChfX2RhdGFfLmNGaWxl
TmFtZSwgIi4uIikpCisgICAgICAgIGNvbnRpbnVlOworICAgICAgLy8gRklYTUU6IENhY2hlIG1v
cmUgb2YgdGhpcworICAgICAgLy9kaXJlY3RvcnlfZW50cnk6Ol9fY2FjaGVkX2RhdGEgY2RhdGE7
CisgICAgICAvL2NkYXRhLl9fdHlwZV8gPSBnZXRfZmlsZV90eXBlKF9fZGF0YV8pOworICAgICAg
Ly9jZGF0YS5fX3NpemVfID0gZ2V0X2ZpbGVfc2l6ZShfX2RhdGFfKTsKKyAgICAgIC8vY2RhdGEu
X193cml0ZV90aW1lXyA9IGdldF93cml0ZV90aW1lKF9fZGF0YV8pOworICAgICAgX19lbnRyeV8u
X19hc3NpZ25faXRlcl9lbnRyeSgKKyAgICAgICAgICBfX3Jvb3RfIC8gX19kYXRhXy5jRmlsZU5h
bWUsCisgICAgICAgICAgZGlyZWN0b3J5X2VudHJ5OjpfX2NyZWF0ZV9pdGVyX3Jlc3VsdChnZXRf
ZmlsZV90eXBlKF9fZGF0YSkpKTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBlYyA9
IGVycm9yX2NvZGUoOjpHZXRMYXN0RXJyb3IoKSwgZ2VuZXJpY19jYXRlZ29yeSgpKTsKKyAgICBj
bG9zZSgpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCitwcml2YXRlOgorICBlcnJvcl9jb2Rl
IGNsb3NlKCkgbm9leGNlcHQgeworICAgIGVycm9yX2NvZGUgZWM7CisgICAgaWYgKCE6OkZpbmRD
bG9zZShfX3N0cmVhbV8pKQorICAgICAgZWMgPSBlcnJvcl9jb2RlKDo6R2V0TGFzdEVycm9yKCks
IGdlbmVyaWNfY2F0ZWdvcnkoKSk7CisgICAgX19zdHJlYW1fID0gSU5WQUxJRF9IQU5ETEVfVkFM
VUU7CisgICAgcmV0dXJuIGVjOworICB9CisKKyAgSEFORExFIF9fc3RyZWFtX3tJTlZBTElEX0hB
TkRMRV9WQUxVRX07CisgIFdJTjMyX0ZJTkRfREFUQSBfX2RhdGFfOworCitwdWJsaWM6CisgIHBh
dGggX19yb290XzsKKyAgZGlyZWN0b3J5X2VudHJ5IF9fZW50cnlfOworfTsKKyNlbHNlCitjbGFz
cyBfX2Rpcl9zdHJlYW0geworcHVibGljOgorICBfX2Rpcl9zdHJlYW0oKSA9IGRlbGV0ZTsKKyAg
X19kaXJfc3RyZWFtJiBvcGVyYXRvcj0oY29uc3QgX19kaXJfc3RyZWFtJikgPSBkZWxldGU7CisK
KyAgX19kaXJfc3RyZWFtKF9fZGlyX3N0cmVhbSYmIG90aGVyKSBub2V4Y2VwdCA6IF9fc3RyZWFt
XyhvdGhlci5fX3N0cmVhbV8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19yb290Xyhtb3ZlKG90aGVyLl9fcm9vdF8pKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZW50cnlfKG1vdmUob3RoZXIuX19l
bnRyeV8pKSB7CisgICAgb3RoZXIuX19zdHJlYW1fID0gbnVsbHB0cjsKKyAgfQorCisgIF9fZGly
X3N0cmVhbShjb25zdCBwYXRoJiByb290LCBkaXJlY3Rvcnlfb3B0aW9ucyBvcHRzLCBlcnJvcl9j
b2RlJiBlYykKKyAgICAgIDogX19zdHJlYW1fKG51bGxwdHIpLCBfX3Jvb3RfKHJvb3QpIHsKKyAg
ICBpZiAoKF9fc3RyZWFtXyA9IDo6b3BlbmRpcihyb290LmNfc3RyKCkpKSA9PSBudWxscHRyKSB7
CisgICAgICBlYyA9IGRldGFpbDo6Y2FwdHVyZV9lcnJubygpOworICAgICAgY29uc3QgYm9vbCBh
bGxvd19lYWNlc3MgPQorICAgICAgICAgIGJvb2wob3B0cyAmIGRpcmVjdG9yeV9vcHRpb25zOjpz
a2lwX3Blcm1pc3Npb25fZGVuaWVkKTsKKyAgICAgIGlmIChhbGxvd19lYWNlc3MgJiYgZWMudmFs
dWUoKSA9PSBFQUNDRVMpCisgICAgICAgIGVjLmNsZWFyKCk7CisgICAgICByZXR1cm47CisgICAg
fQorICAgIGFkdmFuY2UoZWMpOworICB9CisKKyAgfl9fZGlyX3N0cmVhbSgpIG5vZXhjZXB0IHsK
KyAgICBpZiAoX19zdHJlYW1fKQorICAgICAgY2xvc2UoKTsKKyAgfQorCisgIGJvb2wgZ29vZCgp
IGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIF9fc3RyZWFtXyAhPSBudWxscHRyOyB9CisKKyAgYm9v
bCBhZHZhbmNlKGVycm9yX2NvZGUmIGVjKSB7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgIGF1
dG8gc3RyX3R5cGVfcGFpciA9IGRldGFpbDo6cG9zaXhfcmVhZGRpcihfX3N0cmVhbV8sIGVjKTsK
KyAgICAgIGF1dG8mIHN0ciA9IHN0cl90eXBlX3BhaXIuZmlyc3Q7CisgICAgICBpZiAoc3RyID09
ICIuIiB8fCBzdHIgPT0gIi4uIikgeworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0gZWxzZSBp
ZiAoZWMgfHwgc3RyLmVtcHR5KCkpIHsKKyAgICAgICAgY2xvc2UoKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgX19lbnRyeV8uX19hc3NpZ25faXRlcl9l
bnRyeSgKKyAgICAgICAgICAgIF9fcm9vdF8gLyBzdHIsCisgICAgICAgICAgICBkaXJlY3Rvcnlf
ZW50cnk6Ol9fY3JlYXRlX2l0ZXJfcmVzdWx0KHN0cl90eXBlX3BhaXIuc2Vjb25kKSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgfQorICAgIH0KKyAgfQorCitwcml2YXRlOgorICBlcnJv
cl9jb2RlIGNsb3NlKCkgbm9leGNlcHQgeworICAgIGVycm9yX2NvZGUgbV9lYzsKKyAgICBpZiAo
OjpjbG9zZWRpcihfX3N0cmVhbV8pID09IC0xKQorICAgICAgbV9lYyA9IGRldGFpbDo6Y2FwdHVy
ZV9lcnJubygpOworICAgIF9fc3RyZWFtXyA9IG51bGxwdHI7CisgICAgcmV0dXJuIG1fZWM7Cisg
IH0KKworICBESVIqIF9fc3RyZWFtX3tudWxscHRyfTsKKworcHVibGljOgorICBwYXRoIF9fcm9v
dF87CisgIGRpcmVjdG9yeV9lbnRyeSBfX2VudHJ5XzsKK307CisjZW5kaWYKKworLy8gZGlyZWN0
b3J5X2l0ZXJhdG9yCisKK2RpcmVjdG9yeV9pdGVyYXRvcjo6ZGlyZWN0b3J5X2l0ZXJhdG9yKGNv
bnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGlyZWN0b3J5X29wdGlvbnMgb3B0cykgeworICBFcnJvckhhbmRsZXI8dm9p
ZD4gZXJyKCJkaXJlY3RvcnlfaXRlcmF0b3I6OmRpcmVjdG9yeV9pdGVyYXRvciguLi4pIiwgZWMs
ICZwKTsKKworICBlcnJvcl9jb2RlIG1fZWM7CisgIF9faW1wXyA9IG1ha2Vfc2hhcmVkPF9fZGly
X3N0cmVhbT4ocCwgb3B0cywgbV9lYyk7CisgIGlmIChlYykKKyAgICAqZWMgPSBtX2VjOworICBp
ZiAoIV9faW1wXy0+Z29vZCgpKSB7CisgICAgX19pbXBfLnJlc2V0KCk7CisgICAgaWYgKG1fZWMp
CisgICAgICBlcnIucmVwb3J0KG1fZWMpOworICB9Cit9CisKK2RpcmVjdG9yeV9pdGVyYXRvciYg
ZGlyZWN0b3J5X2l0ZXJhdG9yOjpfX2luY3JlbWVudChlcnJvcl9jb2RlKiBlYykgeworICBfTElC
Q1BQX0FTU0VSVChfX2ltcF8sICJBdHRlbXB0aW5nIHRvIGluY3JlbWVudCBhbiBpbnZhbGlkIGl0
ZXJhdG9yIik7CisgIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoImRpcmVjdG9yeV9pdGVyYXRvcjo6
b3BlcmF0b3IrKygpIiwgZWMpOworCisgIGVycm9yX2NvZGUgbV9lYzsKKyAgaWYgKCFfX2ltcF8t
PmFkdmFuY2UobV9lYykpIHsKKyAgICBwYXRoIHJvb3QgPSBtb3ZlKF9faW1wXy0+X19yb290Xyk7
CisgICAgX19pbXBfLnJlc2V0KCk7CisgICAgaWYgKG1fZWMpCisgICAgICBlcnIucmVwb3J0KG1f
ZWMsICJhdCByb290IFwiJXNcIiIsIHJvb3QpOworICB9CisgIHJldHVybiAqdGhpczsKK30KKwor
ZGlyZWN0b3J5X2VudHJ5IGNvbnN0JiBkaXJlY3RvcnlfaXRlcmF0b3I6Ol9fZGVyZWZlcmVuY2Uo
KSBjb25zdCB7CisgIF9MSUJDUFBfQVNTRVJUKF9faW1wXywgIkF0dGVtcHRpbmcgdG8gZGVyZWZl
cmVuY2UgYW4gaW52YWxpZCBpdGVyYXRvciIpOworICByZXR1cm4gX19pbXBfLT5fX2VudHJ5XzsK
K30KKworLy8gcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcgorCitzdHJ1Y3QgcmVjdXJzaXZl
X2RpcmVjdG9yeV9pdGVyYXRvcjo6X19zaGFyZWRfaW1wIHsKKyAgc3RhY2s8X19kaXJfc3RyZWFt
PiBfX3N0YWNrXzsKKyAgZGlyZWN0b3J5X29wdGlvbnMgX19vcHRpb25zXzsKK307CisKK3JlY3Vy
c2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I6OnJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IoCisg
ICAgY29uc3QgcGF0aCYgcCwgZGlyZWN0b3J5X29wdGlvbnMgb3B0LCBlcnJvcl9jb2RlKiBlYykK
KyAgICA6IF9faW1wXyhudWxscHRyKSwgX19yZWNfKHRydWUpIHsKKyAgRXJyb3JIYW5kbGVyPHZv
aWQ+IGVycigicmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciIsIGVjLCAmcCk7CisKKyAgZXJy
b3JfY29kZSBtX2VjOworICBfX2Rpcl9zdHJlYW0gbmV3X3MocCwgb3B0LCBtX2VjKTsKKyAgaWYg
KG1fZWMpCisgICAgZXJyLnJlcG9ydChtX2VjKTsKKyAgaWYgKG1fZWMgfHwgIW5ld19zLmdvb2Qo
KSkKKyAgICByZXR1cm47CisKKyAgX19pbXBfID0gbWFrZV9zaGFyZWQ8X19zaGFyZWRfaW1wPigp
OworICBfX2ltcF8tPl9fb3B0aW9uc18gPSBvcHQ7CisgIF9faW1wXy0+X19zdGFja18ucHVzaCht
b3ZlKG5ld19zKSk7Cit9CisKK3ZvaWQgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjo6X19w
b3AoZXJyb3JfY29kZSogZWMpIHsKKyAgX0xJQkNQUF9BU1NFUlQoX19pbXBfLCAiUG9wcGluZyB0
aGUgZW5kIGl0ZXJhdG9yIik7CisgIGlmIChlYykKKyAgICBlYy0+Y2xlYXIoKTsKKyAgX19pbXBf
LT5fX3N0YWNrXy5wb3AoKTsKKyAgaWYgKF9faW1wXy0+X19zdGFja18uc2l6ZSgpID09IDApCisg
ICAgX19pbXBfLnJlc2V0KCk7CisgIGVsc2UKKyAgICBfX2FkdmFuY2UoZWMpOworfQorCitkaXJl
Y3Rvcnlfb3B0aW9ucyByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yOjpvcHRpb25zKCkgY29u
c3QgeworICByZXR1cm4gX19pbXBfLT5fX29wdGlvbnNfOworfQorCitpbnQgcmVjdXJzaXZlX2Rp
cmVjdG9yeV9pdGVyYXRvcjo6ZGVwdGgoKSBjb25zdCB7CisgIHJldHVybiBfX2ltcF8tPl9fc3Rh
Y2tfLnNpemUoKSAtIDE7Cit9CisKK2NvbnN0IGRpcmVjdG9yeV9lbnRyeSYgcmVjdXJzaXZlX2Rp
cmVjdG9yeV9pdGVyYXRvcjo6X19kZXJlZmVyZW5jZSgpIGNvbnN0IHsKKyAgcmV0dXJuIF9faW1w
Xy0+X19zdGFja18udG9wKCkuX19lbnRyeV87Cit9CisKK3JlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRl
cmF0b3ImCityZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yOjpfX2luY3JlbWVudChlcnJvcl9j
b2RlKiBlYykgeworICBpZiAoZWMpCisgICAgZWMtPmNsZWFyKCk7CisgIGlmIChyZWN1cnNpb25f
cGVuZGluZygpKSB7CisgICAgaWYgKF9fdHJ5X3JlY3Vyc2lvbihlYykgfHwgKGVjICYmICplYykp
CisgICAgICByZXR1cm4gKnRoaXM7CisgIH0KKyAgX19yZWNfID0gdHJ1ZTsKKyAgX19hZHZhbmNl
KGVjKTsKKyAgcmV0dXJuICp0aGlzOworfQorCit2b2lkIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRl
cmF0b3I6Ol9fYWR2YW5jZShlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8dm9pZD4g
ZXJyKCJyZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yOjpvcGVyYXRvcisrKCkiLCBlYyk7CisK
KyAgY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9yIGVuZF9pdDsKKyAgYXV0byYgc3RhY2sgPSBfX2lt
cF8tPl9fc3RhY2tfOworICBlcnJvcl9jb2RlIG1fZWM7CisgIHdoaWxlIChzdGFjay5zaXplKCkg
PiAwKSB7CisgICAgaWYgKHN0YWNrLnRvcCgpLmFkdmFuY2UobV9lYykpCisgICAgICByZXR1cm47
CisgICAgaWYgKG1fZWMpCisgICAgICBicmVhazsKKyAgICBzdGFjay5wb3AoKTsKKyAgfQorCisg
IGlmIChtX2VjKSB7CisgICAgcGF0aCByb290ID0gbW92ZShzdGFjay50b3AoKS5fX3Jvb3RfKTsK
KyAgICBfX2ltcF8ucmVzZXQoKTsKKyAgICBlcnIucmVwb3J0KG1fZWMsICJhdCByb290IFwiJXNc
IiIsIHJvb3QpOworICB9IGVsc2UgeworICAgIF9faW1wXy5yZXNldCgpOworICB9Cit9CisKK2Jv
b2wgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjo6X190cnlfcmVjdXJzaW9uKGVycm9yX2Nv
ZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoInJlY3Vyc2l2ZV9kaXJlY3Rvcnlf
aXRlcmF0b3I6Om9wZXJhdG9yKysoKSIsIGVjKTsKKworICBib29sIHJlY19zeW0gPSBib29sKG9w
dGlvbnMoKSAmIGRpcmVjdG9yeV9vcHRpb25zOjpmb2xsb3dfZGlyZWN0b3J5X3N5bWxpbmspOwor
CisgIGF1dG8mIGN1cnJfaXQgPSBfX2ltcF8tPl9fc3RhY2tfLnRvcCgpOworCisgIGJvb2wgc2tp
cF9yZWMgPSBmYWxzZTsKKyAgZXJyb3JfY29kZSBtX2VjOworICBpZiAoIXJlY19zeW0pIHsKKyAg
ICBmaWxlX3N0YXR1cyBzdChjdXJyX2l0Ll9fZW50cnlfLl9fZ2V0X3N5bV9mdCgmbV9lYykpOwor
ICAgIGlmIChtX2VjICYmIHN0YXR1c19rbm93bihzdCkpCisgICAgICBtX2VjLmNsZWFyKCk7Cisg
ICAgaWYgKG1fZWMgfHwgaXNfc3ltbGluayhzdCkgfHwgIWlzX2RpcmVjdG9yeShzdCkpCisgICAg
ICBza2lwX3JlYyA9IHRydWU7CisgIH0gZWxzZSB7CisgICAgZmlsZV9zdGF0dXMgc3QoY3Vycl9p
dC5fX2VudHJ5Xy5fX2dldF9mdCgmbV9lYykpOworICAgIGlmIChtX2VjICYmIHN0YXR1c19rbm93
bihzdCkpCisgICAgICBtX2VjLmNsZWFyKCk7CisgICAgaWYgKG1fZWMgfHwgIWlzX2RpcmVjdG9y
eShzdCkpCisgICAgICBza2lwX3JlYyA9IHRydWU7CisgIH0KKworICBpZiAoIXNraXBfcmVjKSB7
CisgICAgX19kaXJfc3RyZWFtIG5ld19pdChjdXJyX2l0Ll9fZW50cnlfLnBhdGgoKSwgX19pbXBf
LT5fX29wdGlvbnNfLCBtX2VjKTsKKyAgICBpZiAobmV3X2l0Lmdvb2QoKSkgeworICAgICAgX19p
bXBfLT5fX3N0YWNrXy5wdXNoKG1vdmUobmV3X2l0KSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgIH0KKyAgaWYgKG1fZWMpIHsKKyAgICBjb25zdCBib29sIGFsbG93X2VhY2VzcyA9Cisg
ICAgICAgIGJvb2woX19pbXBfLT5fX29wdGlvbnNfICYgZGlyZWN0b3J5X29wdGlvbnM6OnNraXBf
cGVybWlzc2lvbl9kZW5pZWQpOworICAgIGlmIChtX2VjLnZhbHVlKCkgPT0gRUFDQ0VTICYmIGFs
bG93X2VhY2VzcykgeworICAgICAgaWYgKGVjKQorICAgICAgICBlYy0+Y2xlYXIoKTsKKyAgICB9
IGVsc2UgeworICAgICAgcGF0aCBhdF9lbnQgPSBtb3ZlKGN1cnJfaXQuX19lbnRyeV8uX19wXyk7
CisgICAgICBfX2ltcF8ucmVzZXQoKTsKKyAgICAgIGVyci5yZXBvcnQobV9lYywgImF0dGVtcHRp
bmcgcmVjdXJzaW9uIGludG8gXCIlc1wiIiwgYXRfZW50KTsKKyAgICB9CisgIH0KKyAgcmV0dXJu
IGZhbHNlOworfQorCitfTElCQ1BQX0VORF9OQU1FU1BBQ0VfRklMRVNZU1RFTQorCisvKiAtLSBF
TkQgZmlsZXN5c3RlbS9kaXJlY3RvcnlfaXRlcmF0b3IuY3BwIC0tICovCisKKy8qIC0tIEJFR0lO
IGZpbGVzeXN0ZW0vaW50MTI4X2J1aWx0aW5zLmNwcCAtLSAqLworCisvKiA9PT0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tPT09CisgKgorICogVGhpcyBmaWxlIGltcGxlbWVudHMgX19tdWxvdGk0LCBhbmQgaXMgc3Rv
bGVuIGZyb20gdGhlIGNvbXBpbGVyX3J0IGxpYnJhcnkuCisgKgorICogRklYTUU6IHdlIHN0ZWFs
IGFuZCByZS1jb21waWxlIGl0IGludG8gZmlsZXN5c3RlbSwgd2hpY2ggdXNlcyBfX2ludDEyOF90
LAorICogYW5kIHJlcXVpcmVzIHRoaXMgYnVpbHRpbiB3aGVuIHNhbml0aXplZC4gU2VlIGxsdm0u
b3JnL1BSMzA2NDMKKyAqCisgKiA9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09CisgKi8KKworLyogI2luY2x1
ZGUgIl9fY29uZmlnIiAqLworI2luY2x1ZGUgPGNsaW1pdHM+CisKKyNpZm5kZWYgX19TSVpFT0Zf
SU5UMTI4X18KKyNkZWZpbmUgX0xJQkNQUF9IQVNfTk9fSU5UMTI4CisjZW5kaWYKKworI2lmICFk
ZWZpbmVkKF9MSUJDUFBfSEFTX05PX0lOVDEyOCkKKworI2lmZGVmIF9fY2xhbmdfXworI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVk
ICItV21pc3NpbmctcHJvdG90eXBlcyIKKyNlbmRpZgorZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9f
KChub19zYW5pdGl6ZSgidW5kZWZpbmVkIikpKQorX19pbnQxMjhfdCBfX211bG90aTQoX19pbnQx
MjhfdCBhLCBfX2ludDEyOF90IGIsIGludCogb3ZlcmZsb3cpIHsKKyAgY29uc3QgaW50IE4gPSAo
aW50KShzaXplb2YoX19pbnQxMjhfdCkgKiBDSEFSX0JJVCk7CisgIGNvbnN0IF9faW50MTI4X3Qg
TUlOID0gKF9faW50MTI4X3QpMSA8PCAoTiAtIDEpOworICBjb25zdCBfX2ludDEyOF90IE1BWCA9
IH5NSU47CisgICpvdmVyZmxvdyA9IDA7CisgIF9faW50MTI4X3QgcmVzdWx0ID0gYSAqIGI7Cisg
IGlmIChhID09IE1JTikgeworICAgIGlmIChiICE9IDAgJiYgYiAhPSAxKQorICAgICAgKm92ZXJm
bG93ID0gMTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisgIGlmIChiID09IE1JTikgeworICAg
IGlmIChhICE9IDAgJiYgYSAhPSAxKQorICAgICAgKm92ZXJmbG93ID0gMTsKKyAgICByZXR1cm4g
cmVzdWx0OworICB9CisgIF9faW50MTI4X3Qgc2EgPSBhID4+IChOIC0gMSk7CisgIF9faW50MTI4
X3QgYWJzX2EgPSAoYSBeIHNhKSAtIHNhOworICBfX2ludDEyOF90IHNiID0gYiA+PiAoTiAtIDEp
OworICBfX2ludDEyOF90IGFic19iID0gKGIgXiBzYikgLSBzYjsKKyAgaWYgKGFic19hIDwgMiB8
fCBhYnNfYiA8IDIpCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgaWYgKHNhID09IHNiKSB7CisgICAg
aWYgKGFic19hID4gTUFYIC8gYWJzX2IpCisgICAgICAqb3ZlcmZsb3cgPSAxOworICB9IGVsc2Ug
eworICAgIGlmIChhYnNfYSA+IE1JTiAvIC1hYnNfYikKKyAgICAgICpvdmVyZmxvdyA9IDE7Cisg
IH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKyNpZmRlZiBfX2NsYW5nX18KKyNwcmFnbWEgY2xhbmcg
ZGlhZ25vc3RpYyBwb3AKKyNlbmRpZgorCisjZW5kaWYKKworLyogLS0gRU5EIGZpbGVzeXN0ZW0v
aW50MTI4X2J1aWx0aW5zLmNwcCAtLSAqLworCisvKiAtLSBCRUdJTiBmaWxlc3lzdGVtL29wZXJh
dGlvbnMuY3BwIC0tICovCisKKy8qICNpbmNsdWRlICJmaWxlc3lzdGVtIiAqLworI2luY2x1ZGUg
PGFycmF5PgorI2luY2x1ZGUgPGl0ZXJhdG9yPgorI2luY2x1ZGUgPGZzdHJlYW0+CisjaW5jbHVk
ZSA8cmFuZG9tPiAvKiBmb3IgdW5pcXVlX3BhdGggKi8KKyNpbmNsdWRlIDxzdHJpbmdfdmlldz4K
KyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8Y3N0
ZGxpYj4KKyNpbmNsdWRlIDxjbGltaXRzPgorCisvKiAjaW5jbHVkZSAiZmlsZXN5c3RlbV9jb21t
b24uaCIgKi8KKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Cisj
aW5jbHVkZSA8c3lzL3N0YXR2ZnMuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8ZmNu
dGwuaD4gLyogdmFsdWVzIGZvciBmY2htb2RhdCAqLworCisjaWYgZGVmaW5lZChfX2xpbnV4X18p
CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBL
RVJORUxfVkVSU0lPTigyLCA2LCAzMykKKyNpbmNsdWRlIDxzeXMvc2VuZGZpbGUuaD4KKyNkZWZp
bmUgX0xJQkNQUF9VU0VfU0VOREZJTEUKKyNlbmRpZgorI2VsaWYgZGVmaW5lZChfX0FQUExFX18p
IHx8IF9faGFzX2luY2x1ZGUoPGNvcHlmaWxlLmg+KQorI2luY2x1ZGUgPGNvcHlmaWxlLmg+Cisj
ZGVmaW5lIF9MSUJDUFBfVVNFX0NPUFlGSUxFCisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9fQVBQ
TEVfXykKKyNkZWZpbmUgX0xJQkNQUF9VU0VfQ0xPQ0tfR0VUVElNRQorI2VuZGlmCisKKyNpZiAh
ZGVmaW5lZChDTE9DS19SRUFMVElNRSkgfHwgIWRlZmluZWQoX0xJQkNQUF9VU0VfQ0xPQ0tfR0VU
VElNRSkKKyNpbmNsdWRlIDxzeXMvdGltZS5oPiAvLyBmb3IgZ2V0dGltZW9mZGF5IGFuZCB0aW1l
dmFsCisjZW5kaWYgICAgICAgICAgICAgICAgLy8gIWRlZmluZWQoQ0xPQ0tfUkVBTFRJTUUpCisK
KyNpZiBkZWZpbmVkKF9MSUJDUFBfQ09NUElMRVJfR0NDKQorI2lmIF9HTlVDX1ZFUiA8IDUwMAor
I3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3NpbmctZmllbGQtaW5pdGlhbGl6
ZXJzIgorI2VuZGlmCisjZW5kaWYKKworX0xJQkNQUF9CRUdJTl9OQU1FU1BBQ0VfRklMRVNZU1RF
TQorCituYW1lc3BhY2UgeworbmFtZXNwYWNlIHBhcnNlciB7CisKK3VzaW5nIHN0cmluZ192aWV3
X3QgPSBwYXRoOjpfX3N0cmluZ192aWV3OwordXNpbmcgc3RyaW5nX3ZpZXdfcGFpciA9IHBhaXI8
c3RyaW5nX3ZpZXdfdCwgc3RyaW5nX3ZpZXdfdD47Cit1c2luZyBQb3NQdHIgPSBwYXRoOjp2YWx1
ZV90eXBlIGNvbnN0KjsKKworc3RydWN0IFBhdGhQYXJzZXIgeworICBlbnVtIFBhcnNlclN0YXRl
IDogdW5zaWduZWQgY2hhciB7CisgICAgLy8gWmVybyBpcyBhIHNwZWNpYWwgc2VudGluZWwgdmFs
dWUgdXNlZCBieSBkZWZhdWx0IGNvbnN0cnVjdGVkIGl0ZXJhdG9ycy4KKyAgICBQU19CZWZvcmVC
ZWdpbiA9IHBhdGg6Oml0ZXJhdG9yOjpfQmVmb3JlQmVnaW4sCisgICAgUFNfSW5Sb290TmFtZSA9
IHBhdGg6Oml0ZXJhdG9yOjpfSW5Sb290TmFtZSwKKyAgICBQU19JblJvb3REaXIgPSBwYXRoOjpp
dGVyYXRvcjo6X0luUm9vdERpciwKKyAgICBQU19JbkZpbGVuYW1lcyA9IHBhdGg6Oml0ZXJhdG9y
OjpfSW5GaWxlbmFtZXMsCisgICAgUFNfSW5UcmFpbGluZ1NlcCA9IHBhdGg6Oml0ZXJhdG9yOjpf
SW5UcmFpbGluZ1NlcCwKKyAgICBQU19BdEVuZCA9IHBhdGg6Oml0ZXJhdG9yOjpfQXRFbmQKKyAg
fTsKKworICBjb25zdCBzdHJpbmdfdmlld190IFBhdGg7CisgIHN0cmluZ192aWV3X3QgUmF3RW50
cnk7CisgIFBhcnNlclN0YXRlIFN0YXRlOworCitwcml2YXRlOgorICBQYXRoUGFyc2VyKHN0cmlu
Z192aWV3X3QgUCwgUGFyc2VyU3RhdGUgU3RhdGUpIG5vZXhjZXB0IDogUGF0aChQKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0
YXRlKFN0YXRlKSB7fQorCitwdWJsaWM6CisgIFBhdGhQYXJzZXIoc3RyaW5nX3ZpZXdfdCBQLCBz
dHJpbmdfdmlld190IEUsIHVuc2lnbmVkIGNoYXIgUykKKyAgICAgIDogUGF0aChQKSwgUmF3RW50
cnkoRSksIFN0YXRlKHN0YXRpY19jYXN0PFBhcnNlclN0YXRlPihTKSkgeworICAgIC8vIFMgY2Fu
bm90IGJlICcwJyBvciBQU19CZWZvcmVCZWdpbi4KKyAgfQorCisgIHN0YXRpYyBQYXRoUGFyc2Vy
IENyZWF0ZUJlZ2luKHN0cmluZ192aWV3X3QgUCkgbm9leGNlcHQgeworICAgIFBhdGhQYXJzZXIg
UFAoUCwgUFNfQmVmb3JlQmVnaW4pOworICAgIFBQLmluY3JlbWVudCgpOworICAgIHJldHVybiBQ
UDsKKyAgfQorCisgIHN0YXRpYyBQYXRoUGFyc2VyIENyZWF0ZUVuZChzdHJpbmdfdmlld190IFAp
IG5vZXhjZXB0IHsKKyAgICBQYXRoUGFyc2VyIFBQKFAsIFBTX0F0RW5kKTsKKyAgICByZXR1cm4g
UFA7CisgIH0KKworICBQb3NQdHIgcGVlaygpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICBhdXRvIFRr
RW5kID0gZ2V0TmV4dFRva2VuU3RhcnRQb3MoKTsKKyAgICBhdXRvIEVuZCA9IGdldEFmdGVyQmFj
aygpOworICAgIHJldHVybiBUa0VuZCA9PSBFbmQgPyBudWxscHRyIDogVGtFbmQ7CisgIH0KKwor
ICB2b2lkIGluY3JlbWVudCgpIG5vZXhjZXB0IHsKKyAgICBjb25zdCBQb3NQdHIgRW5kID0gZ2V0
QWZ0ZXJCYWNrKCk7CisgICAgY29uc3QgUG9zUHRyIFN0YXJ0ID0gZ2V0TmV4dFRva2VuU3RhcnRQ
b3MoKTsKKyAgICBpZiAoU3RhcnQgPT0gRW5kKQorICAgICAgcmV0dXJuIG1ha2VTdGF0ZShQU19B
dEVuZCk7CisKKyAgICBzd2l0Y2ggKFN0YXRlKSB7CisgICAgY2FzZSBQU19CZWZvcmVCZWdpbjog
eworICAgICAgUG9zUHRyIFRrRW5kID0gY29uc3VtZVNlcGFyYXRvcihTdGFydCwgRW5kKTsKKyAg
ICAgIGlmIChUa0VuZCkKKyAgICAgICAgcmV0dXJuIG1ha2VTdGF0ZShQU19JblJvb3REaXIsIFN0
YXJ0LCBUa0VuZCk7CisgICAgICBlbHNlCisgICAgICAgIHJldHVybiBtYWtlU3RhdGUoUFNfSW5G
aWxlbmFtZXMsIFN0YXJ0LCBjb25zdW1lTmFtZShTdGFydCwgRW5kKSk7CisgICAgfQorICAgIGNh
c2UgUFNfSW5Sb290RGlyOgorICAgICAgcmV0dXJuIG1ha2VTdGF0ZShQU19JbkZpbGVuYW1lcywg
U3RhcnQsIGNvbnN1bWVOYW1lKFN0YXJ0LCBFbmQpKTsKKworICAgIGNhc2UgUFNfSW5GaWxlbmFt
ZXM6IHsKKyAgICAgIFBvc1B0ciBTZXBFbmQgPSBjb25zdW1lU2VwYXJhdG9yKFN0YXJ0LCBFbmQp
OworICAgICAgaWYgKFNlcEVuZCAhPSBFbmQpIHsKKyAgICAgICAgUG9zUHRyIFRrRW5kID0gY29u
c3VtZU5hbWUoU2VwRW5kLCBFbmQpOworICAgICAgICBpZiAoVGtFbmQpCisgICAgICAgICAgcmV0
dXJuIG1ha2VTdGF0ZShQU19JbkZpbGVuYW1lcywgU2VwRW5kLCBUa0VuZCk7CisgICAgICB9Cisg
ICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0luVHJhaWxpbmdTZXAsIFN0YXJ0LCBTZXBFbmQpOwor
ICAgIH0KKworICAgIGNhc2UgUFNfSW5UcmFpbGluZ1NlcDoKKyAgICAgIHJldHVybiBtYWtlU3Rh
dGUoUFNfQXRFbmQpOworCisgICAgY2FzZSBQU19JblJvb3ROYW1lOgorICAgIGNhc2UgUFNfQXRF
bmQ6CisgICAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7CisgICAgfQorICB9CisKKyAgdm9pZCBk
ZWNyZW1lbnQoKSBub2V4Y2VwdCB7CisgICAgY29uc3QgUG9zUHRyIFJFbmQgPSBnZXRCZWZvcmVG
cm9udCgpOworICAgIGNvbnN0IFBvc1B0ciBSU3RhcnQgPSBnZXRDdXJyZW50VG9rZW5TdGFydFBv
cygpIC0gMTsKKyAgICBpZiAoUlN0YXJ0ID09IFJFbmQpIC8vIHdlJ3JlIGRlY3JlbWVudGluZyB0
aGUgYmVnaW4KKyAgICAgIHJldHVybiBtYWtlU3RhdGUoUFNfQmVmb3JlQmVnaW4pOworCisgICAg
c3dpdGNoIChTdGF0ZSkgeworICAgIGNhc2UgUFNfQXRFbmQ6IHsKKyAgICAgIC8vIFRyeSB0byBj
b25zdW1lIGEgdHJhaWxpbmcgc2VwYXJhdG9yIG9yIHJvb3QgZGlyZWN0b3J5IGZpcnN0LgorICAg
ICAgaWYgKFBvc1B0ciBTZXBFbmQgPSBjb25zdW1lU2VwYXJhdG9yKFJTdGFydCwgUkVuZCkpIHsK
KyAgICAgICAgaWYgKFNlcEVuZCA9PSBSRW5kKQorICAgICAgICAgIHJldHVybiBtYWtlU3RhdGUo
UFNfSW5Sb290RGlyLCBQYXRoLmRhdGEoKSwgUlN0YXJ0ICsgMSk7CisgICAgICAgIHJldHVybiBt
YWtlU3RhdGUoUFNfSW5UcmFpbGluZ1NlcCwgU2VwRW5kICsgMSwgUlN0YXJ0ICsgMSk7CisgICAg
ICB9IGVsc2UgeworICAgICAgICBQb3NQdHIgVGtTdGFydCA9IGNvbnN1bWVOYW1lKFJTdGFydCwg
UkVuZCk7CisgICAgICAgIHJldHVybiBtYWtlU3RhdGUoUFNfSW5GaWxlbmFtZXMsIFRrU3RhcnQg
KyAxLCBSU3RhcnQgKyAxKTsKKyAgICAgIH0KKyAgICB9CisgICAgY2FzZSBQU19JblRyYWlsaW5n
U2VwOgorICAgICAgcmV0dXJuIG1ha2VTdGF0ZShQU19JbkZpbGVuYW1lcywgY29uc3VtZU5hbWUo
UlN0YXJ0LCBSRW5kKSArIDEsCisgICAgICAgICAgICAgICAgICAgICAgIFJTdGFydCArIDEpOwor
ICAgIGNhc2UgUFNfSW5GaWxlbmFtZXM6IHsKKyAgICAgIFBvc1B0ciBTZXBFbmQgPSBjb25zdW1l
U2VwYXJhdG9yKFJTdGFydCwgUkVuZCk7CisgICAgICBpZiAoU2VwRW5kID09IFJFbmQpCisgICAg
ICAgIHJldHVybiBtYWtlU3RhdGUoUFNfSW5Sb290RGlyLCBQYXRoLmRhdGEoKSwgUlN0YXJ0ICsg
MSk7CisgICAgICBQb3NQdHIgVGtFbmQgPSBjb25zdW1lTmFtZShTZXBFbmQsIFJFbmQpOworICAg
ICAgcmV0dXJuIG1ha2VTdGF0ZShQU19JbkZpbGVuYW1lcywgVGtFbmQgKyAxLCBTZXBFbmQgKyAx
KTsKKyAgICB9CisgICAgY2FzZSBQU19JblJvb3REaXI6CisgICAgICAvLyByZXR1cm4gbWFrZVN0
YXRlKFBTX0luUm9vdE5hbWUsIFBhdGguZGF0YSgpLCBSU3RhcnQgKyAxKTsKKyAgICBjYXNlIFBT
X0luUm9vdE5hbWU6CisgICAgY2FzZSBQU19CZWZvcmVCZWdpbjoKKyAgICAgIF9MSUJDUFBfVU5S
RUFDSEFCTEUoKTsKKyAgICB9CisgIH0KKworICAvLy8gXGJyaWVmIFJldHVybiBhIHZpZXcgd2l0
aCB0aGUgInByZWZlcnJlZCByZXByZXNlbnRhdGlvbiIgb2YgdGhlIGN1cnJlbnQKKyAgLy8vICAg
ZWxlbWVudC4gRm9yIGV4YW1wbGUgdHJhaWxpbmcgc2VwYXJhdG9ycyBhcmUgcmVwcmVzZW50ZWQg
YXMgYSAnLicKKyAgc3RyaW5nX3ZpZXdfdCBvcGVyYXRvciooKSBjb25zdCBub2V4Y2VwdCB7Cisg
ICAgc3dpdGNoIChTdGF0ZSkgeworICAgIGNhc2UgUFNfQmVmb3JlQmVnaW46CisgICAgY2FzZSBQ
U19BdEVuZDoKKyAgICAgIHJldHVybiAiIjsKKyAgICBjYXNlIFBTX0luUm9vdERpcjoKKyAgICAg
IHJldHVybiAiLyI7CisgICAgY2FzZSBQU19JblRyYWlsaW5nU2VwOgorICAgICAgcmV0dXJuICIi
OworICAgIGNhc2UgUFNfSW5Sb290TmFtZToKKyAgICBjYXNlIFBTX0luRmlsZW5hbWVzOgorICAg
ICAgcmV0dXJuIFJhd0VudHJ5OworICAgIH0KKyAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7Cisg
IH0KKworICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qgbm9leGNlcHQgeworICAgIHJl
dHVybiBTdGF0ZSAhPSBQU19CZWZvcmVCZWdpbiAmJiBTdGF0ZSAhPSBQU19BdEVuZDsKKyAgfQor
CisgIFBhdGhQYXJzZXImIG9wZXJhdG9yKysoKSBub2V4Y2VwdCB7CisgICAgaW5jcmVtZW50KCk7
CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgUGF0aFBhcnNlciYgb3BlcmF0b3ItLSgpIG5v
ZXhjZXB0IHsKKyAgICBkZWNyZW1lbnQoKTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICBi
b29sIGluUm9vdFBhdGgoKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIFN0YXRlID09IFBT
X0luUm9vdERpciB8fCBTdGF0ZSA9PSBQU19JblJvb3ROYW1lOworICB9CisKK3ByaXZhdGU6Cisg
IHZvaWQgbWFrZVN0YXRlKFBhcnNlclN0YXRlIE5ld1N0YXRlLCBQb3NQdHIgU3RhcnQsIFBvc1B0
ciBFbmQpIG5vZXhjZXB0IHsKKyAgICBTdGF0ZSA9IE5ld1N0YXRlOworICAgIFJhd0VudHJ5ID0g
c3RyaW5nX3ZpZXdfdChTdGFydCwgRW5kIC0gU3RhcnQpOworICB9CisgIHZvaWQgbWFrZVN0YXRl
KFBhcnNlclN0YXRlIE5ld1N0YXRlKSBub2V4Y2VwdCB7CisgICAgU3RhdGUgPSBOZXdTdGF0ZTsK
KyAgICBSYXdFbnRyeSA9IHt9OworICB9CisKKyAgUG9zUHRyIGdldEFmdGVyQmFjaygpIGNvbnN0
IG5vZXhjZXB0IHsgcmV0dXJuIFBhdGguZGF0YSgpICsgUGF0aC5zaXplKCk7IH0KKworICBQb3NQ
dHIgZ2V0QmVmb3JlRnJvbnQoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBQYXRoLmRhdGEoKSAt
IDE7IH0KKworICAvLy8gXGJyaWVmIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGNoYXJh
Y3RlciBhZnRlciB0aGUgY3VycmVudGx5CisgIC8vLyAgIGxleGVkIGVsZW1lbnQuCisgIFBvc1B0
ciBnZXROZXh0VG9rZW5TdGFydFBvcygpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICBzd2l0Y2ggKFN0
YXRlKSB7CisgICAgY2FzZSBQU19CZWZvcmVCZWdpbjoKKyAgICAgIHJldHVybiBQYXRoLmRhdGEo
KTsKKyAgICBjYXNlIFBTX0luUm9vdE5hbWU6CisgICAgY2FzZSBQU19JblJvb3REaXI6CisgICAg
Y2FzZSBQU19JbkZpbGVuYW1lczoKKyAgICAgIHJldHVybiAmUmF3RW50cnkuYmFjaygpICsgMTsK
KyAgICBjYXNlIFBTX0luVHJhaWxpbmdTZXA6CisgICAgY2FzZSBQU19BdEVuZDoKKyAgICAgIHJl
dHVybiBnZXRBZnRlckJhY2soKTsKKyAgICB9CisgICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOwor
ICB9CisKKyAgLy8vIFxicmllZiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBjaGFyYWN0
ZXIgaW4gdGhlIGN1cnJlbnRseSBsZXhlZAorICAvLy8gICBlbGVtZW50LgorICBQb3NQdHIgZ2V0
Q3VycmVudFRva2VuU3RhcnRQb3MoKSBjb25zdCBub2V4Y2VwdCB7CisgICAgc3dpdGNoIChTdGF0
ZSkgeworICAgIGNhc2UgUFNfQmVmb3JlQmVnaW46CisgICAgY2FzZSBQU19JblJvb3ROYW1lOgor
ICAgICAgcmV0dXJuICZQYXRoLmZyb250KCk7CisgICAgY2FzZSBQU19JblJvb3REaXI6CisgICAg
Y2FzZSBQU19JbkZpbGVuYW1lczoKKyAgICBjYXNlIFBTX0luVHJhaWxpbmdTZXA6CisgICAgICBy
ZXR1cm4gJlJhd0VudHJ5LmZyb250KCk7CisgICAgY2FzZSBQU19BdEVuZDoKKyAgICAgIHJldHVy
biAmUGF0aC5iYWNrKCkgKyAxOworICAgIH0KKyAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7Cisg
IH0KKworICBQb3NQdHIgY29uc3VtZVNlcGFyYXRvcihQb3NQdHIgUCwgUG9zUHRyIEVuZCkgY29u
c3Qgbm9leGNlcHQgeworICAgIGlmIChQID09IEVuZCB8fCAqUCAhPSAnLycpCisgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICBjb25zdCBpbnQgSW5jID0gUCA8IEVuZCA/IDEgOiAtMTsKKyAgICBQ
ICs9IEluYzsKKyAgICB3aGlsZSAoUCAhPSBFbmQgJiYgKlAgPT0gJy8nKQorICAgICAgUCArPSBJ
bmM7CisgICAgcmV0dXJuIFA7CisgIH0KKworICBQb3NQdHIgY29uc3VtZU5hbWUoUG9zUHRyIFAs
IFBvc1B0ciBFbmQpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICBpZiAoUCA9PSBFbmQgfHwgKlAgPT0g
Jy8nKQorICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgY29uc3QgaW50IEluYyA9IFAgPCBFbmQg
PyAxIDogLTE7CisgICAgUCArPSBJbmM7CisgICAgd2hpbGUgKFAgIT0gRW5kICYmICpQICE9ICcv
JykKKyAgICAgIFAgKz0gSW5jOworICAgIHJldHVybiBQOworICB9Cit9OworCitzdGF0aWMgc3Ry
aW5nX3ZpZXdfcGFpciBzZXBhcmF0ZV9maWxlbmFtZShzdHJpbmdfdmlld190IGNvbnN0JiBzKSB7
CisgIGlmIChzID09ICIuIiB8fCBzID09ICIuLiIgfHwgcy5lbXB0eSgpKQorICAgIHJldHVybiBz
dHJpbmdfdmlld19wYWlye3MsICIifTsKKyAgYXV0byBwb3MgPSBzLmZpbmRfbGFzdF9vZignLicp
OworICBpZiAocG9zID09IHN0cmluZ192aWV3X3Q6Om5wb3MgfHwgcG9zID09IDApCisgICAgcmV0
dXJuIHN0cmluZ192aWV3X3BhaXJ7cywgc3RyaW5nX3ZpZXdfdHt9fTsKKyAgcmV0dXJuIHN0cmlu
Z192aWV3X3BhaXJ7cy5zdWJzdHIoMCwgcG9zKSwgcy5zdWJzdHIocG9zKX07Cit9CisKK3N0YXRp
YyBzdHJpbmdfdmlld190IGNyZWF0ZVZpZXcoUG9zUHRyIFMsIFBvc1B0ciBFKSBub2V4Y2VwdCB7
CisgIHJldHVybiB7Uywgc3RhdGljX2Nhc3Q8c2l6ZV90PihFIC0gUykgKyAxfTsKK30KKworfSAv
LyBuYW1lc3BhY2UgcGFyc2VyCit9IC8vIG5hbWVzcGFjZQorCisvLyAgICAgICAgICAgICAgICAg
ICAgICAgUE9TSVggSEVMUEVSUworCituYW1lc3BhY2UgZGV0YWlsIHsKK25hbWVzcGFjZSB7CisK
K3VzaW5nIHZhbHVlX3R5cGUgPSBwYXRoOjp2YWx1ZV90eXBlOwordXNpbmcgc3RyaW5nX3R5cGUg
PSBwYXRoOjpzdHJpbmdfdHlwZTsKKworc3RydWN0IEZpbGVEZXNjcmlwdG9yIHsKKyAgY29uc3Qg
cGF0aCYgbmFtZTsKKyAgaW50IGZkID0gLTE7CisgIFN0YXRUIG1fc3RhdDsKKyAgZmlsZV9zdGF0
dXMgbV9zdGF0dXM7CisKKyAgdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+CisgIHN0YXRpYyBGaWxl
RGVzY3JpcHRvciBjcmVhdGUoY29uc3QgcGF0aCogcCwgZXJyb3JfY29kZSYgZWMsIEFyZ3MuLi4g
YXJncykgeworICAgIGVjLmNsZWFyKCk7CisgICAgaW50IGZkOworICAgIGlmICgoZmQgPSA6Om9w
ZW4ocC0+Y19zdHIoKSwgYXJncy4uLikpID09IC0xKSB7CisgICAgICBlYyA9IGNhcHR1cmVfZXJy
bm8oKTsKKyAgICAgIHJldHVybiBGaWxlRGVzY3JpcHRvcntwfTsKKyAgICB9CisgICAgcmV0dXJu
IEZpbGVEZXNjcmlwdG9yKHAsIGZkKTsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcy4uLiBBcmdz
PgorICBzdGF0aWMgRmlsZURlc2NyaXB0b3IgY3JlYXRlX3dpdGhfc3RhdHVzKGNvbnN0IHBhdGgq
IHAsIGVycm9yX2NvZGUmIGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFyZ3MuLi4gYXJncykgeworICAgIEZpbGVEZXNjcmlwdG9yIGZkID0gY3JlYXRlKHAs
IGVjLCBhcmdzLi4uKTsKKyAgICBpZiAoIWVjKQorICAgICAgZmQucmVmcmVzaF9zdGF0dXMoZWMp
OworCisgICAgcmV0dXJuIGZkOworICB9CisKKyAgZmlsZV9zdGF0dXMgZ2V0X3N0YXR1cygpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CisgIFN0YXRUIGNvbnN0JiBnZXRfc3RhdCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdDsgfQorCisgIGJvb2wgc3RhdHVzX2tub3duKCkgY29uc3QgeyByZXR1
cm4gX1ZTVERfRlM6OnN0YXR1c19rbm93bihtX3N0YXR1cyk7IH0KKworICBmaWxlX3N0YXR1cyBy
ZWZyZXNoX3N0YXR1cyhlcnJvcl9jb2RlJiBlYyk7CisKKyAgdm9pZCBjbG9zZSgpIG5vZXhjZXB0
IHsKKyAgICBpZiAoZmQgIT0gLTEpCisgICAgICA6OmNsb3NlKGZkKTsKKyAgICBmZCA9IC0xOwor
ICB9CisKKyAgRmlsZURlc2NyaXB0b3IoRmlsZURlc2NyaXB0b3ImJiBvdGhlcikKKyAgICAgIDog
bmFtZShvdGhlci5uYW1lKSwgZmQob3RoZXIuZmQpLCBtX3N0YXQob3RoZXIubV9zdGF0KSwKKyAg
ICAgICAgbV9zdGF0dXMob3RoZXIubV9zdGF0dXMpIHsKKyAgICBvdGhlci5mZCA9IC0xOworICAg
IG90aGVyLm1fc3RhdHVzID0gZmlsZV9zdGF0dXN7fTsKKyAgfQorCisgIH5GaWxlRGVzY3JpcHRv
cigpIHsgY2xvc2UoKTsgfQorCisgIEZpbGVEZXNjcmlwdG9yKEZpbGVEZXNjcmlwdG9yIGNvbnN0
JikgPSBkZWxldGU7CisgIEZpbGVEZXNjcmlwdG9yJiBvcGVyYXRvcj0oRmlsZURlc2NyaXB0b3Ig
Y29uc3QmKSA9IGRlbGV0ZTsKKworcHJpdmF0ZToKKyAgZXhwbGljaXQgRmlsZURlc2NyaXB0b3Io
Y29uc3QgcGF0aCogcCwgaW50IGZkID0gLTEpIDogbmFtZSgqcCksIGZkKGZkKSB7fQorfTsKKwor
cGVybXMgcG9zaXhfZ2V0X3Blcm1zKGNvbnN0IFN0YXRUJiBzdCkgbm9leGNlcHQgeworICByZXR1
cm4gc3RhdGljX2Nhc3Q8cGVybXM+KHN0LnN0X21vZGUpICYgcGVybXM6Om1hc2s7Cit9CisKKzo6
bW9kZV90IHBvc2l4X2NvbnZlcnRfcGVybXMocGVybXMgcHJtcykgeworICByZXR1cm4gc3RhdGlj
X2Nhc3Q8IDo6bW9kZV90Pihwcm1zICYgcGVybXM6Om1hc2spOworfQorCitmaWxlX3N0YXR1cyBj
cmVhdGVfZmlsZV9zdGF0dXMoZXJyb3JfY29kZSYgbV9lYywgcGF0aCBjb25zdCYgcCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdGF0VCYgcGF0aF9zdGF0LCBlcnJvcl9j
b2RlKiBlYykgeworICBpZiAoZWMpCisgICAgKmVjID0gbV9lYzsKKyAgaWYgKG1fZWMgJiYgKG1f
ZWMudmFsdWUoKSA9PSBFTk9FTlQgfHwgbV9lYy52YWx1ZSgpID09IEVOT1RESVIpKSB7CisgICAg
cmV0dXJuIGZpbGVfc3RhdHVzKGZpbGVfdHlwZTo6bm90X2ZvdW5kKTsKKyAgfSBlbHNlIGlmICht
X2VjKSB7CisgICAgRXJyb3JIYW5kbGVyPHZvaWQ+IGVycigicG9zaXhfc3RhdCIsIGVjLCAmcCk7
CisgICAgZXJyLnJlcG9ydChtX2VjLCAiZmFpbGVkIHRvIGRldGVybWluZSBhdHRyaWJ1dGVzIGZv
ciB0aGUgc3BlY2lmaWVkIHBhdGgiKTsKKyAgICByZXR1cm4gZmlsZV9zdGF0dXMoZmlsZV90eXBl
Ojpub25lKTsKKyAgfQorICAvLyBlbHNlCisKKyAgZmlsZV9zdGF0dXMgZnNfdG1wOworICBhdXRv
IGNvbnN0IG1vZGUgPSBwYXRoX3N0YXQuc3RfbW9kZTsKKyAgaWYgKFNfSVNMTksobW9kZSkpCisg
ICAgZnNfdG1wLnR5cGUoZmlsZV90eXBlOjpzeW1saW5rKTsKKyAgZWxzZSBpZiAoU19JU1JFRyht
b2RlKSkKKyAgICBmc190bXAudHlwZShmaWxlX3R5cGU6OnJlZ3VsYXIpOworICBlbHNlIGlmIChT
X0lTRElSKG1vZGUpKQorICAgIGZzX3RtcC50eXBlKGZpbGVfdHlwZTo6ZGlyZWN0b3J5KTsKKyAg
ZWxzZSBpZiAoU19JU0JMSyhtb2RlKSkKKyAgICBmc190bXAudHlwZShmaWxlX3R5cGU6OmJsb2Nr
KTsKKyAgZWxzZSBpZiAoU19JU0NIUihtb2RlKSkKKyAgICBmc190bXAudHlwZShmaWxlX3R5cGU6
OmNoYXJhY3Rlcik7CisgIGVsc2UgaWYgKFNfSVNGSUZPKG1vZGUpKQorICAgIGZzX3RtcC50eXBl
KGZpbGVfdHlwZTo6Zmlmbyk7CisgIGVsc2UgaWYgKFNfSVNTT0NLKG1vZGUpKQorICAgIGZzX3Rt
cC50eXBlKGZpbGVfdHlwZTo6c29ja2V0KTsKKyAgZWxzZQorICAgIGZzX3RtcC50eXBlKGZpbGVf
dHlwZTo6dW5rbm93bik7CisKKyAgZnNfdG1wLnBlcm1pc3Npb25zKGRldGFpbDo6cG9zaXhfZ2V0
X3Blcm1zKHBhdGhfc3RhdCkpOworICByZXR1cm4gZnNfdG1wOworfQorCitmaWxlX3N0YXR1cyBw
b3NpeF9zdGF0KHBhdGggY29uc3QmIHAsIFN0YXRUJiBwYXRoX3N0YXQsIGVycm9yX2NvZGUqIGVj
KSB7CisgIGVycm9yX2NvZGUgbV9lYzsKKyAgaWYgKDo6c3RhdChwLmNfc3RyKCksICZwYXRoX3N0
YXQpID09IC0xKQorICAgIG1fZWMgPSBkZXRhaWw6OmNhcHR1cmVfZXJybm8oKTsKKyAgcmV0dXJu
IGNyZWF0ZV9maWxlX3N0YXR1cyhtX2VjLCBwLCBwYXRoX3N0YXQsIGVjKTsKK30KKworZmlsZV9z
dGF0dXMgcG9zaXhfc3RhdChwYXRoIGNvbnN0JiBwLCBlcnJvcl9jb2RlKiBlYykgeworICBTdGF0
VCBwYXRoX3N0YXQ7CisgIHJldHVybiBwb3NpeF9zdGF0KHAsIHBhdGhfc3RhdCwgZWMpOworfQor
CitmaWxlX3N0YXR1cyBwb3NpeF9sc3RhdChwYXRoIGNvbnN0JiBwLCBTdGF0VCYgcGF0aF9zdGF0
LCBlcnJvcl9jb2RlKiBlYykgeworICBlcnJvcl9jb2RlIG1fZWM7CisgIGlmICg6OmxzdGF0KHAu
Y19zdHIoKSwgJnBhdGhfc3RhdCkgPT0gLTEpCisgICAgbV9lYyA9IGRldGFpbDo6Y2FwdHVyZV9l
cnJubygpOworICByZXR1cm4gY3JlYXRlX2ZpbGVfc3RhdHVzKG1fZWMsIHAsIHBhdGhfc3RhdCwg
ZWMpOworfQorCitmaWxlX3N0YXR1cyBwb3NpeF9sc3RhdChwYXRoIGNvbnN0JiBwLCBlcnJvcl9j
b2RlKiBlYykgeworICBTdGF0VCBwYXRoX3N0YXQ7CisgIHJldHVybiBwb3NpeF9sc3RhdChwLCBw
YXRoX3N0YXQsIGVjKTsKK30KKworYm9vbCBwb3NpeF9mdHJ1bmNhdGUoY29uc3QgRmlsZURlc2Ny
aXB0b3ImIGZkLCBzaXplX3QgdG9fc2l6ZSwgZXJyb3JfY29kZSYgZWMpIHsKKyAgaWYgKDo6ZnRy
dW5jYXRlKGZkLmZkLCB0b19zaXplKSA9PSAtMSkgeworICAgIGVjID0gY2FwdHVyZV9lcnJubygp
OworICAgIHJldHVybiB0cnVlOworICB9CisgIGVjLmNsZWFyKCk7CisgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBwb3NpeF9mY2htb2QoY29uc3QgRmlsZURlc2NyaXB0b3ImIGZkLCBjb25zdCBT
dGF0VCYgc3QsIGVycm9yX2NvZGUmIGVjKSB7CisgIGlmICg6OmZjaG1vZChmZC5mZCwgc3Quc3Rf
bW9kZSkgPT0gLTEpIHsKKyAgICBlYyA9IGNhcHR1cmVfZXJybm8oKTsKKyAgICByZXR1cm4gdHJ1
ZTsKKyAgfQorICBlYy5jbGVhcigpOworICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgc3RhdF9l
cXVpdmFsZW50KGNvbnN0IFN0YXRUJiBzdDEsIGNvbnN0IFN0YXRUJiBzdDIpIHsKKyAgcmV0dXJu
IChzdDEuc3RfZGV2ID09IHN0Mi5zdF9kZXYgJiYgc3QxLnN0X2lubyA9PSBzdDIuc3RfaW5vKTsK
K30KKworZmlsZV9zdGF0dXMgRmlsZURlc2NyaXB0b3I6OnJlZnJlc2hfc3RhdHVzKGVycm9yX2Nv
ZGUmIGVjKSB7CisgIC8vIEZEIG11c3QgYmUgb3BlbiBhbmQgZ29vZC4KKyAgbV9zdGF0dXMgPSBm
aWxlX3N0YXR1c3t9OworICBtX3N0YXQgPSB7fTsKKyAgZXJyb3JfY29kZSBtX2VjOworICBpZiAo
Ojpmc3RhdChmZCwgJm1fc3RhdCkgPT0gLTEpCisgICAgbV9lYyA9IGNhcHR1cmVfZXJybm8oKTsK
KyAgbV9zdGF0dXMgPSBjcmVhdGVfZmlsZV9zdGF0dXMobV9lYywgbmFtZSwgbV9zdGF0LCAmZWMp
OworICByZXR1cm4gbV9zdGF0dXM7Cit9Cit9IC8vIG5hbWVzcGFjZQorfSAvLyBlbmQgbmFtZXNw
YWNlIGRldGFpbAorCit1c2luZyBkZXRhaWw6OmNhcHR1cmVfZXJybm87Cit1c2luZyBkZXRhaWw6
OkVycm9ySGFuZGxlcjsKK3VzaW5nIGRldGFpbDo6U3RhdFQ7Cit1c2luZyBkZXRhaWw6OlRpbWVT
cGVjOwordXNpbmcgcGFyc2VyOjpjcmVhdGVWaWV3OwordXNpbmcgcGFyc2VyOjpQYXRoUGFyc2Vy
OwordXNpbmcgcGFyc2VyOjpzdHJpbmdfdmlld190OworCitjb25zdCBib29sIF9GaWxlc3lzdGVt
Q2xvY2s6OmlzX3N0ZWFkeTsKKworX0ZpbGVzeXN0ZW1DbG9jazo6dGltZV9wb2ludCBfRmlsZXN5
c3RlbUNsb2NrOjpub3coKSBub2V4Y2VwdCB7CisgIHR5cGVkZWYgY2hyb25vOjpkdXJhdGlvbjxy
ZXA+IF9fc2VjczsKKyNpZiBkZWZpbmVkKF9MSUJDUFBfVVNFX0NMT0NLX0dFVFRJTUUpICYmIGRl
ZmluZWQoQ0xPQ0tfUkVBTFRJTUUpCisgIHR5cGVkZWYgY2hyb25vOjpkdXJhdGlvbjxyZXAsIG5h
bm8+IF9fbnNlY3M7CisgIHN0cnVjdCB0aW1lc3BlYyB0cDsKKyAgaWYgKDAgIT0gY2xvY2tfZ2V0
dGltZShDTE9DS19SRUFMVElNRSwgJnRwKSkKKyAgICBfX3Rocm93X3N5c3RlbV9lcnJvcihlcnJu
bywgImNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUpIGZhaWxlZCIpOworICByZXR1cm4gdGlt
ZV9wb2ludChfX3NlY3ModHAudHZfc2VjKSArCisgICAgICAgICAgICAgICAgICAgIGNocm9ubzo6
ZHVyYXRpb25fY2FzdDxkdXJhdGlvbj4oX19uc2Vjcyh0cC50dl9uc2VjKSkpOworI2Vsc2UKKyAg
dHlwZWRlZiBjaHJvbm86OmR1cmF0aW9uPHJlcCwgbWljcm8+IF9fbWljcm9zZWNzOworICB0aW1l
dmFsIHR2OworICBnZXR0aW1lb2ZkYXkoJnR2LCAwKTsKKyAgcmV0dXJuIHRpbWVfcG9pbnQoX19z
ZWNzKHR2LnR2X3NlYykgKyBfX21pY3Jvc2Vjcyh0di50dl91c2VjKSk7CisjZW5kaWYgLy8gX0xJ
QkNQUF9VU0VfQ0xPQ0tfR0VUVElNRSAmJiBDTE9DS19SRUFMVElNRQorfQorCitmaWxlc3lzdGVt
X2Vycm9yOjp+ZmlsZXN5c3RlbV9lcnJvcigpIHt9CisKK3ZvaWQgZmlsZXN5c3RlbV9lcnJvcjo6
X19jcmVhdGVfd2hhdChpbnQgX19udW1fcGF0aHMpIHsKKyAgY29uc3QgY2hhciogZGVyaXZlZF93
aGF0ID0gc3lzdGVtX2Vycm9yOjp3aGF0KCk7CisgIF9fc3RvcmFnZV8tPl9fd2hhdF8gPSBbJl0o
KSAtPiBzdHJpbmcgeworICAgIGNvbnN0IGNoYXIqIHAxID0gcGF0aDEoKS5uYXRpdmUoKS5lbXB0
eSgpID8gIlwiXCIiIDogcGF0aDEoKS5jX3N0cigpOworICAgIGNvbnN0IGNoYXIqIHAyID0gcGF0
aDIoKS5uYXRpdmUoKS5lbXB0eSgpID8gIlwiXCIiIDogcGF0aDIoKS5jX3N0cigpOworICAgIHN3
aXRjaCAoX19udW1fcGF0aHMpIHsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGRldGFpbDo6
Zm9ybWF0X3N0cmluZygiZmlsZXN5c3RlbSBlcnJvcjogJXMiLCBkZXJpdmVkX3doYXQpOworICAg
IGNhc2UgMToKKyAgICAgIHJldHVybiBkZXRhaWw6OmZvcm1hdF9zdHJpbmcoImZpbGVzeXN0ZW0g
ZXJyb3I6ICVzIFslc10iLCBkZXJpdmVkX3doYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHAxKTsKKyAgICBjYXNlIDI6CisgICAgICByZXR1cm4gZGV0YWlsOjpmb3JtYXRf
c3RyaW5nKCJmaWxlc3lzdGVtIGVycm9yOiAlcyBbJXNdIFslc10iLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZXJpdmVkX3doYXQsIHAxLCBwMik7CisgICAgfQorICB9KCk7
Cit9CisKK3N0YXRpYyBwYXRoIF9fZG9fYWJzb2x1dGUoY29uc3QgcGF0aCYgcCwgcGF0aCogY3dk
LCBlcnJvcl9jb2RlKiBlYykgeworICBpZiAoZWMpCisgICAgZWMtPmNsZWFyKCk7CisgIGlmIChw
LmlzX2Fic29sdXRlKCkpCisgICAgcmV0dXJuIHA7CisgICpjd2QgPSBfX2N1cnJlbnRfcGF0aChl
Yyk7CisgIGlmIChlYyAmJiAqZWMpCisgICAgcmV0dXJuIHt9OworICByZXR1cm4gKCpjd2QpIC8g
cDsKK30KKworcGF0aCBfX2Fic29sdXRlKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjKSB7
CisgIHBhdGggY3dkOworICByZXR1cm4gX19kb19hYnNvbHV0ZShwLCAmY3dkLCBlYyk7Cit9CisK
K3BhdGggX19jYW5vbmljYWwocGF0aCBjb25zdCYgb3JpZ19wLCBlcnJvcl9jb2RlKiBlYykgewor
ICBwYXRoIGN3ZDsKKyAgRXJyb3JIYW5kbGVyPHBhdGg+IGVycigiY2Fub25pY2FsIiwgZWMsICZv
cmlnX3AsICZjd2QpOworCisgIHBhdGggcCA9IF9fZG9fYWJzb2x1dGUob3JpZ19wLCAmY3dkLCBl
Yyk7CisgIGNoYXIgYnVmZltQQVRIX01BWCArIDFdOworICBjaGFyKiByZXQ7CisgIGlmICgocmV0
ID0gOjpyZWFscGF0aChwLmNfc3RyKCksIGJ1ZmYpKSA9PSBudWxscHRyKQorICAgIHJldHVybiBl
cnIucmVwb3J0KGNhcHR1cmVfZXJybm8oKSk7CisgIHJldHVybiB7cmV0fTsKK30KKwordm9pZCBf
X2NvcHkoY29uc3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8sIGNvcHlfb3B0aW9ucyBvcHRp
b25zLAorICAgICAgICAgICAgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHZvaWQ+
IGVycigiY29weSIsIGVjLCAmZnJvbSwgJnRvKTsKKworICBjb25zdCBib29sIHN5bV9zdGF0dXMg
PSBib29sKAorICAgICAgb3B0aW9ucyAmIChjb3B5X29wdGlvbnM6OmNyZWF0ZV9zeW1saW5rcyB8
IGNvcHlfb3B0aW9uczo6c2tpcF9zeW1saW5rcykpOworCisgIGNvbnN0IGJvb2wgc3ltX3N0YXR1
czIgPSBib29sKG9wdGlvbnMgJiBjb3B5X29wdGlvbnM6OmNvcHlfc3ltbGlua3MpOworCisgIGVy
cm9yX2NvZGUgbV9lYzE7CisgIFN0YXRUIGZfc3QgPSB7fTsKKyAgY29uc3QgZmlsZV9zdGF0dXMg
ZiA9IHN5bV9zdGF0dXMgfHwgc3ltX3N0YXR1czIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA/IGRldGFpbDo6cG9zaXhfbHN0YXQoZnJvbSwgZl9zdCwgJm1fZWMxKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDogZGV0YWlsOjpwb3NpeF9zdGF0KGZyb20sIGZfc3QsICZtX2VjMSk7
CisgIGlmIChtX2VjMSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjMSk7CisKKyAgU3RhdFQg
dF9zdCA9IHt9OworICBjb25zdCBmaWxlX3N0YXR1cyB0ID0gc3ltX3N0YXR1cyA/IGRldGFpbDo6
cG9zaXhfbHN0YXQodG8sIHRfc3QsICZtX2VjMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOiBkZXRhaWw6OnBvc2l4X3N0YXQodG8sIHRfc3QsICZtX2VjMSk7CisKKyAgaWYg
KG5vdCBzdGF0dXNfa25vd24odCkpCisgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYzEpOworCisg
IGlmICghZXhpc3RzKGYpIHx8IGlzX290aGVyKGYpIHx8IGlzX290aGVyKHQpIHx8CisgICAgICAo
aXNfZGlyZWN0b3J5KGYpICYmIGlzX3JlZ3VsYXJfZmlsZSh0KSkgfHwKKyAgICAgIGRldGFpbDo6
c3RhdF9lcXVpdmFsZW50KGZfc3QsIHRfc3QpKSB7CisgICAgcmV0dXJuIGVyci5yZXBvcnQoZXJy
Yzo6ZnVuY3Rpb25fbm90X3N1cHBvcnRlZCk7CisgIH0KKworICBpZiAoZWMpCisgICAgZWMtPmNs
ZWFyKCk7CisKKyAgaWYgKGlzX3N5bWxpbmsoZikpIHsKKyAgICBpZiAoYm9vbChjb3B5X29wdGlv
bnM6OnNraXBfc3ltbGlua3MgJiBvcHRpb25zKSkgeworICAgICAgLy8gZG8gbm90aGluZworICAg
IH0gZWxzZSBpZiAobm90IGV4aXN0cyh0KSkgeworICAgICAgX19jb3B5X3N5bWxpbmsoZnJvbSwg
dG8sIGVjKTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6Zmls
ZV9leGlzdHMpOworICAgIH0KKyAgICByZXR1cm47CisgIH0gZWxzZSBpZiAoaXNfcmVndWxhcl9m
aWxlKGYpKSB7CisgICAgaWYgKGJvb2woY29weV9vcHRpb25zOjpkaXJlY3Rvcmllc19vbmx5ICYg
b3B0aW9ucykpIHsKKyAgICAgIC8vIGRvIG5vdGhpbmcKKyAgICB9IGVsc2UgaWYgKGJvb2woY29w
eV9vcHRpb25zOjpjcmVhdGVfc3ltbGlua3MgJiBvcHRpb25zKSkgeworICAgICAgX19jcmVhdGVf
c3ltbGluayhmcm9tLCB0bywgZWMpOworICAgIH0gZWxzZSBpZiAoYm9vbChjb3B5X29wdGlvbnM6
OmNyZWF0ZV9oYXJkX2xpbmtzICYgb3B0aW9ucykpIHsKKyAgICAgIF9fY3JlYXRlX2hhcmRfbGlu
ayhmcm9tLCB0bywgZWMpOworICAgIH0gZWxzZSBpZiAoaXNfZGlyZWN0b3J5KHQpKSB7CisgICAg
ICBfX2NvcHlfZmlsZShmcm9tLCB0byAvIGZyb20uZmlsZW5hbWUoKSwgb3B0aW9ucywgZWMpOwor
ICAgIH0gZWxzZSB7CisgICAgICBfX2NvcHlfZmlsZShmcm9tLCB0bywgb3B0aW9ucywgZWMpOwor
ICAgIH0KKyAgICByZXR1cm47CisgIH0gZWxzZSBpZiAoaXNfZGlyZWN0b3J5KGYpICYmIGJvb2wo
Y29weV9vcHRpb25zOjpjcmVhdGVfc3ltbGlua3MgJiBvcHRpb25zKSkgeworICAgIHJldHVybiBl
cnIucmVwb3J0KGVycmM6OmlzX2FfZGlyZWN0b3J5KTsKKyAgfSBlbHNlIGlmIChpc19kaXJlY3Rv
cnkoZikgJiYgKGJvb2woY29weV9vcHRpb25zOjpyZWN1cnNpdmUgJiBvcHRpb25zKSB8fAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weV9vcHRpb25zOjpub25lID09IG9wdGlv
bnMpKSB7CisKKyAgICBpZiAoIWV4aXN0cyh0KSkgeworICAgICAgLy8gY3JlYXRlIGRpcmVjdG9y
eSB0byB3aXRoIGF0dHJpYnV0ZXMgZnJvbSAnZnJvbScuCisgICAgICBfX2NyZWF0ZV9kaXJlY3Rv
cnkodG8sIGZyb20sIGVjKTsKKyAgICAgIGlmIChlYyAmJiAqZWMpIHsKKyAgICAgICAgcmV0dXJu
OworICAgICAgfQorICAgIH0KKyAgICBkaXJlY3RvcnlfaXRlcmF0b3IgaXQgPQorICAgICAgICBl
YyA/IGRpcmVjdG9yeV9pdGVyYXRvcihmcm9tLCAqZWMpIDogZGlyZWN0b3J5X2l0ZXJhdG9yKGZy
b20pOworICAgIGlmIChlYyAmJiAqZWMpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgZXJy
b3JfY29kZSBtX2VjMjsKKyAgICBmb3IgKDsgaXQgIT0gZGlyZWN0b3J5X2l0ZXJhdG9yKCk7IGl0
LmluY3JlbWVudChtX2VjMikpIHsKKyAgICAgIGlmIChtX2VjMikgeworICAgICAgICByZXR1cm4g
ZXJyLnJlcG9ydChtX2VjMik7CisgICAgICB9CisgICAgICBfX2NvcHkoaXQtPnBhdGgoKSwgdG8g
LyBpdC0+cGF0aCgpLmZpbGVuYW1lKCksCisgICAgICAgICAgICAgb3B0aW9ucyB8IGNvcHlfb3B0
aW9uczo6X19pbl9yZWN1cnNpdmVfY29weSwgZWMpOworICAgICAgaWYgKGVjICYmICplYykgewor
ICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgfQorICB9Cit9CisKK25hbWVzcGFjZSBkZXRh
aWwgeworbmFtZXNwYWNlIHsKKworI2lmZGVmIF9MSUJDUFBfVVNFX1NFTkRGSUxFCitib29sIGNv
cHlfZmlsZV9pbXBsX3NlbmRmaWxlKEZpbGVEZXNjcmlwdG9yJiByZWFkX2ZkLCBGaWxlRGVzY3Jp
cHRvciYgd3JpdGVfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUm
IGVjKSB7CisKKyAgc2l6ZV90IGNvdW50ID0gcmVhZF9mZC5nZXRfc3RhdCgpLnN0X3NpemU7Cisg
IGRvIHsKKyAgICBzc2l6ZV90IHJlczsKKyAgICBpZiAoKHJlcyA9IDo6c2VuZGZpbGUod3JpdGVf
ZmQuZmQsIHJlYWRfZmQuZmQsIG51bGxwdHIsIGNvdW50KSkgPT0gLTEpIHsKKyAgICAgIGVjID0g
Y2FwdHVyZV9lcnJubygpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBjb3VudCAt
PSByZXM7CisgIH0gd2hpbGUgKGNvdW50ID4gMCk7CisKKyAgZWMuY2xlYXIoKTsKKworICByZXR1
cm4gdHJ1ZTsKK30KKyNlbGlmIGRlZmluZWQoX0xJQkNQUF9VU0VfQ09QWUZJTEUpCitib29sIGNv
cHlfZmlsZV9pbXBsX2NvcHlmaWxlKEZpbGVEZXNjcmlwdG9yJiByZWFkX2ZkLCBGaWxlRGVzY3Jp
cHRvciYgd3JpdGVfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUm
IGVjKSB7CisgIHN0cnVjdCBDb3B5RmlsZVN0YXRlIHsKKyAgICBjb3B5ZmlsZV9zdGF0ZV90IHN0
YXRlOworICAgIENvcHlGaWxlU3RhdGUoKSB7IHN0YXRlID0gY29weWZpbGVfc3RhdGVfYWxsb2Mo
KTsgfQorICAgIH5Db3B5RmlsZVN0YXRlKCkgeyBjb3B5ZmlsZV9zdGF0ZV9mcmVlKHN0YXRlKTsg
fQorCisgIHByaXZhdGU6CisgICAgQ29weUZpbGVTdGF0ZShDb3B5RmlsZVN0YXRlIGNvbnN0Jikg
PSBkZWxldGU7CisgICAgQ29weUZpbGVTdGF0ZSYgb3BlcmF0b3I9KENvcHlGaWxlU3RhdGUgY29u
c3QmKSA9IGRlbGV0ZTsKKyAgfTsKKworICBDb3B5RmlsZVN0YXRlIGNmczsKKyAgaWYgKGZjb3B5
ZmlsZShyZWFkX2ZkLmZkLCB3cml0ZV9mZC5mZCwgY2ZzLnN0YXRlLCBDT1BZRklMRV9EQVRBKSA8
IDApIHsKKyAgICBlYyA9IGNhcHR1cmVfZXJybm8oKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0K
KworICBlYy5jbGVhcigpOworICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCisvLyBUaGlzIGZ1
bmN0aW9uIGlzIGd1YXJkZWQgYnkgaWZkZWYncyBpbiBKdW5pcGVyIGR1ZSB0byB0aGUgY3VycmVu
dAorLy8gY2xhbmcgbm90IHN1cHBvcnRpbmcgYW4gX19vcGVuIGZ1bmN0aW9uIG9uIGlmc3RyZWFt
IGFuZCBvZnN0cmVhbS4KKyNpZiAhZGVmaW5lZChfTElCQ1BQX1VTRV9TRU5ERklMRSkgJiYgIWRl
ZmluZWQoX0xJQkNQUF9VU0VfQ09QWUZJTEUpCisvLyBOb3RlOiBUaGlzIGZ1bmN0aW9uIGlzbid0
IGd1YXJkZWQgYnkgaWZkZWYncyBldmVuIHRob3VnaCBpdCBtYXkgYmUgdW51c2VkCisvLyBpbiBv
cmRlciB0byBhc3N1cmUgaXQgc3RpbGwgY29tcGlsZXMuCitfX2F0dHJpYnV0ZV9fKCh1bnVzZWQp
KSBib29sIGNvcHlfZmlsZV9pbXBsX2RlZmF1bHQoRmlsZURlc2NyaXB0b3ImIHJlYWRfZmQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZURl
c2NyaXB0b3ImIHdyaXRlX2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKSB7CisgIGlmc3RyZWFtIGluOworICBpbi5f
X29wZW4ocmVhZF9mZC5mZCwgaW9zOjpiaW5hcnkpOworICBpZiAoIWluLmlzX29wZW4oKSkgewor
ICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IF9fb3BlbiBkaWRuJ3QgcmVzZXQgdGhlIGVycm9yIGNv
ZGUuCisgICAgZWMgPSBjYXB0dXJlX2Vycm5vKCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9Cisg
IG9mc3RyZWFtIG91dDsKKyAgb3V0Ll9fb3Blbih3cml0ZV9mZC5mZCwgaW9zOjpiaW5hcnkpOwor
ICBpZiAoIW91dC5pc19vcGVuKCkpIHsKKyAgICBlYyA9IGNhcHR1cmVfZXJybm8oKTsKKyAgICBy
ZXR1cm4gZmFsc2U7CisgIH0KKworICBpZiAoaW4uZ29vZCgpICYmIG91dC5nb29kKCkpIHsKKyAg
ICB1c2luZyBJbkl0ID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPjsKKyAgICB1c2luZyBPdXRJ
dCA9IG9zdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj47CisgICAgSW5JdCBiaW4oaW4pOworICAgIElu
SXQgZWluOworICAgIE91dEl0IGJvdXQob3V0KTsKKyAgICBjb3B5KGJpbiwgZWluLCBib3V0KTsK
KyAgfQorICBpZiAob3V0LmZhaWwoKSB8fCBpbi5mYWlsKCkpIHsKKyAgICBlYyA9IG1ha2VfZXJy
b3JfY29kZShlcnJjOjppb19lcnJvcik7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgZWMu
Y2xlYXIoKTsKKyAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKworYm9vbCBjb3B5X2ZpbGVfaW1w
bChGaWxlRGVzY3JpcHRvciYgZnJvbSwgRmlsZURlc2NyaXB0b3ImIHRvLCBlcnJvcl9jb2RlJiBl
YykgeworI2lmIGRlZmluZWQoX0xJQkNQUF9VU0VfU0VOREZJTEUpCisgIHJldHVybiBjb3B5X2Zp
bGVfaW1wbF9zZW5kZmlsZShmcm9tLCB0bywgZWMpOworI2VsaWYgZGVmaW5lZChfTElCQ1BQX1VT
RV9DT1BZRklMRSkKKyAgcmV0dXJuIGNvcHlfZmlsZV9pbXBsX2NvcHlmaWxlKGZyb20sIHRvLCBl
Yyk7CisjZWxzZQorICByZXR1cm4gY29weV9maWxlX2ltcGxfZGVmYXVsdChmcm9tLCB0bywgZWMp
OworI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlCit9IC8vIG5hbWVzcGFjZSBkZXRhaWwKKwor
Ym9vbCBfX2NvcHlfZmlsZShjb25zdCBwYXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0bywgY29weV9v
cHRpb25zIG9wdGlvbnMsCisgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUqIGVjKSB7CisgIHVz
aW5nIGRldGFpbDo6RmlsZURlc2NyaXB0b3I7CisgIEVycm9ySGFuZGxlcjxib29sPiBlcnIoImNv
cHlfZmlsZSIsIGVjLCAmdG8sICZmcm9tKTsKKworICBlcnJvcl9jb2RlIG1fZWM7CisgIEZpbGVE
ZXNjcmlwdG9yIGZyb21fZmQgPQorICAgICAgRmlsZURlc2NyaXB0b3I6OmNyZWF0ZV93aXRoX3N0
YXR1cygmZnJvbSwgbV9lYywgT19SRE9OTFkgfCBPX05PTkJMT0NLKTsKKyAgaWYgKG1fZWMpCisg
ICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7CisKKyAgYXV0byBmcm9tX3N0ID0gZnJvbV9mZC5n
ZXRfc3RhdHVzKCk7CisgIFN0YXRUIGNvbnN0JiBmcm9tX3N0YXQgPSBmcm9tX2ZkLmdldF9zdGF0
KCk7CisgIGlmICghaXNfcmVndWxhcl9maWxlKGZyb21fc3QpKSB7CisgICAgaWYgKG5vdCBtX2Vj
KQorICAgICAgbV9lYyA9IG1ha2VfZXJyb3JfY29kZShlcnJjOjpub3Rfc3VwcG9ydGVkKTsKKyAg
ICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKKyAgfQorCisgIGNvbnN0IGJvb2wgc2tpcF9leGlz
dGluZyA9IGJvb2woY29weV9vcHRpb25zOjpza2lwX2V4aXN0aW5nICYgb3B0aW9ucyk7CisgIGNv
bnN0IGJvb2wgdXBkYXRlX2V4aXN0aW5nID0gYm9vbChjb3B5X29wdGlvbnM6OnVwZGF0ZV9leGlz
dGluZyAmIG9wdGlvbnMpOworICBjb25zdCBib29sIG92ZXJ3cml0ZV9leGlzdGluZyA9CisgICAg
ICBib29sKGNvcHlfb3B0aW9uczo6b3ZlcndyaXRlX2V4aXN0aW5nICYgb3B0aW9ucyk7CisKKyAg
U3RhdFQgdG9fc3RhdF9wYXRoOworICBmaWxlX3N0YXR1cyB0b19zdCA9IGRldGFpbDo6cG9zaXhf
c3RhdCh0bywgdG9fc3RhdF9wYXRoLCAmbV9lYyk7CisgIGlmICghc3RhdHVzX2tub3duKHRvX3N0
KSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKKworICBjb25zdCBib29sIHRvX2V4aXN0
cyA9IGV4aXN0cyh0b19zdCk7CisgIGlmICh0b19leGlzdHMgJiYgIWlzX3JlZ3VsYXJfZmlsZSh0
b19zdCkpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6bm90X3N1cHBvcnRlZCk7CisKKyAg
aWYgKHRvX2V4aXN0cyAmJiBkZXRhaWw6OnN0YXRfZXF1aXZhbGVudChmcm9tX3N0YXQsIHRvX3N0
YXRfcGF0aCkpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6ZmlsZV9leGlzdHMpOworCisg
IGlmICh0b19leGlzdHMgJiYgc2tpcF9leGlzdGluZykKKyAgICByZXR1cm4gZmFsc2U7CisKKyAg
Ym9vbCBTaG91bGRDb3B5ID0gWyZdKCkgeworICAgIGlmICh0b19leGlzdHMgJiYgdXBkYXRlX2V4
aXN0aW5nKSB7CisgICAgICBhdXRvIGZyb21fdGltZSA9IGRldGFpbDo6ZXh0cmFjdF9tdGltZShm
cm9tX3N0YXQpOworICAgICAgYXV0byB0b190aW1lID0gZGV0YWlsOjpleHRyYWN0X210aW1lKHRv
X3N0YXRfcGF0aCk7CisgICAgICBpZiAoZnJvbV90aW1lLnR2X3NlYyA8IHRvX3RpbWUudHZfc2Vj
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBpZiAoZnJvbV90aW1lLnR2X3NlYyA9PSB0
b190aW1lLnR2X3NlYyAmJgorICAgICAgICAgIGZyb21fdGltZS50dl9uc2VjIDw9IHRvX3RpbWUu
dHZfbnNlYykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIGlmICghdG9fZXhpc3RzIHx8IG92ZXJ3cml0ZV9leGlzdGluZykKKyAgICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBlcnIucmVwb3J0KGVycmM6OmZpbGVfZXhpc3RzKTsKKyAgfSgp
OworICBpZiAoIVNob3VsZENvcHkpCisgICAgcmV0dXJuIGZhbHNlOworCisgIC8vIERvbid0IHRy
dW5jYXRlIHJpZ2h0IGF3YXkuIFdlIG1heSBub3QgYmUgb3BlbmluZyB0aGUgZmlsZSB3ZSBvcmln
aW5hbGx5CisgIC8vIGxvb2tlZCBhdDsgd2UnbGwgY2hlY2sgdGhpcyBsYXRlci4KKyAgaW50IHRv
X29wZW5fZmxhZ3MgPSBPX1dST05MWTsKKyAgaWYgKCF0b19leGlzdHMpCisgICAgdG9fb3Blbl9m
bGFncyB8PSBPX0NSRUFUOworICBGaWxlRGVzY3JpcHRvciB0b19mZCA9IEZpbGVEZXNjcmlwdG9y
OjpjcmVhdGVfd2l0aF9zdGF0dXMoCisgICAgICAmdG8sIG1fZWMsIHRvX29wZW5fZmxhZ3MsIGZy
b21fc3RhdC5zdF9tb2RlKTsKKyAgaWYgKG1fZWMpCisgICAgcmV0dXJuIGVyci5yZXBvcnQobV9l
Yyk7CisKKyAgaWYgKHRvX2V4aXN0cykgeworICAgIC8vIENoZWNrIHRoYXQgdGhlIGZpbGUgd2Ug
aW5pdGlhbGx5IHN0YXQnZWQgaXMgZXF1aXZhbGVudCB0byB0aGUgb25lCisgICAgLy8gd2Ugb3Bl
bmVkLgorICAgIC8vIEZJWE1FOiByZXBvcnQgdGhpcyBiZXR0ZXIuCisgICAgaWYgKCFkZXRhaWw6
OnN0YXRfZXF1aXZhbGVudCh0b19zdGF0X3BhdGgsIHRvX2ZkLmdldF9zdGF0KCkpKQorICAgICAg
cmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6YmFkX2ZpbGVfZGVzY3JpcHRvcik7CisKKyAgICAvLyBT
ZXQgdGhlIHBlcm1pc3Npb25zIGFuZCB0cnVuY2F0ZSB0aGUgZmlsZSB3ZSBvcGVuZWQuCisgICAg
aWYgKGRldGFpbDo6cG9zaXhfZmNobW9kKHRvX2ZkLCBmcm9tX3N0YXQsIG1fZWMpKQorICAgICAg
cmV0dXJuIGVyci5yZXBvcnQobV9lYyk7CisgICAgaWYgKGRldGFpbDo6cG9zaXhfZnRydW5jYXRl
KHRvX2ZkLCAwLCBtX2VjKSkKKyAgICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMpOworICB9CisK
KyAgaWYgKCFjb3B5X2ZpbGVfaW1wbChmcm9tX2ZkLCB0b19mZCwgbV9lYykpIHsKKyAgICAvLyBG
SVhNRTogUmVtb3ZlIHRoZSBkZXN0IGZpbGUgaWYgd2UgZmFpbGVkLCBhbmQgaXQgZGlkbid0IGV4
aXN0IHByZXZpb3VzbHkuCisgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7CisgIH0KKworICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBfX2NvcHlfc3ltbGluayhjb25zdCBwYXRoJiBleGlzdGlu
Z19zeW1saW5rLCBjb25zdCBwYXRoJiBuZXdfc3ltbGluaywKKyAgICAgICAgICAgICAgICAgICAg
ZXJyb3JfY29kZSogZWMpIHsKKyAgY29uc3QgcGF0aCByZWFsX3BhdGgoX19yZWFkX3N5bWxpbmso
ZXhpc3Rpbmdfc3ltbGluaywgZWMpKTsKKyAgaWYgKGVjICYmICplYykgeworICAgIHJldHVybjsK
KyAgfQorICAvLyBOT1RFOiBwcm9wb3NhbCBzYXlzIHlvdSBzaG91bGQgZGV0ZWN0IGlmIHlvdSBz
aG91bGQgY2FsbAorICAvLyBjcmVhdGVfc3ltbGluayBvciBjcmVhdGVfZGlyZWN0b3J5X3N5bWxp
bmsuIEkgZG9uJ3QgdGhpbmsgdGhpcworICAvLyBpcyBuZWVkZWQgd2l0aCBQT1NJWAorICBfX2Ny
ZWF0ZV9zeW1saW5rKHJlYWxfcGF0aCwgbmV3X3N5bWxpbmssIGVjKTsKK30KKworYm9vbCBfX2Ny
ZWF0ZV9kaXJlY3Rvcmllcyhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJv
ckhhbmRsZXI8Ym9vbD4gZXJyKCJjcmVhdGVfZGlyZWN0b3JpZXMiLCBlYywgJnApOworCisgIGVy
cm9yX2NvZGUgbV9lYzsKKyAgYXV0byBjb25zdCBzdCA9IGRldGFpbDo6cG9zaXhfc3RhdChwLCAm
bV9lYyk7CisgIGlmICghc3RhdHVzX2tub3duKHN0KSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydCht
X2VjKTsKKyAgZWxzZSBpZiAoaXNfZGlyZWN0b3J5KHN0KSkKKyAgICByZXR1cm4gZmFsc2U7Cisg
IGVsc2UgaWYgKGV4aXN0cyhzdCkpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6ZmlsZV9l
eGlzdHMpOworCisgIGNvbnN0IHBhdGggcGFyZW50ID0gcC5wYXJlbnRfcGF0aCgpOworICBpZiAo
IXBhcmVudC5lbXB0eSgpKSB7CisgICAgY29uc3QgZmlsZV9zdGF0dXMgcGFyZW50X3N0ID0gc3Rh
dHVzKHBhcmVudCwgbV9lYyk7CisgICAgaWYgKG5vdCBzdGF0dXNfa25vd24ocGFyZW50X3N0KSkK
KyAgICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMpOworICAgIGlmIChub3QgZXhpc3RzKHBhcmVu
dF9zdCkpIHsKKyAgICAgIF9fY3JlYXRlX2RpcmVjdG9yaWVzKHBhcmVudCwgZWMpOworICAgICAg
aWYgKGVjICYmICplYykgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgfQor
ICB9CisgIHJldHVybiBfX2NyZWF0ZV9kaXJlY3RvcnkocCwgZWMpOworfQorCitib29sIF9fY3Jl
YXRlX2RpcmVjdG9yeShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhh
bmRsZXI8Ym9vbD4gZXJyKCJjcmVhdGVfZGlyZWN0b3J5IiwgZWMsICZwKTsKKworICBpZiAoOjpt
a2RpcihwLmNfc3RyKCksIHN0YXRpY19jYXN0PGludD4ocGVybXM6OmFsbCkpID09IDApCisgICAg
cmV0dXJuIHRydWU7CisgIGlmIChlcnJubyAhPSBFRVhJU1QpCisgICAgZXJyLnJlcG9ydChjYXB0
dXJlX2Vycm5vKCkpOworICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgX19jcmVhdGVfZGlyZWN0
b3J5KHBhdGggY29uc3QmIHAsIHBhdGggY29uc3QmIGF0dHJpYnV0ZXMsIGVycm9yX2NvZGUqIGVj
KSB7CisgIEVycm9ySGFuZGxlcjxib29sPiBlcnIoImNyZWF0ZV9kaXJlY3RvcnkiLCBlYywgJnAs
ICZhdHRyaWJ1dGVzKTsKKworICBTdGF0VCBhdHRyX3N0YXQ7CisgIGVycm9yX2NvZGUgbWVjOwor
ICBhdXRvIHN0ID0gZGV0YWlsOjpwb3NpeF9zdGF0KGF0dHJpYnV0ZXMsIGF0dHJfc3RhdCwgJm1l
Yyk7CisgIGlmICghc3RhdHVzX2tub3duKHN0KSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChtZWMp
OworICBpZiAoIWlzX2RpcmVjdG9yeShzdCkpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6
bm90X2FfZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICJ0aGUgc3BlY2lmaWVkIGF0
dHJpYnV0ZSBwYXRoIGlzIGludmFsaWQiKTsKKworICBpZiAoOjpta2RpcihwLmNfc3RyKCksIGF0
dHJfc3RhdC5zdF9tb2RlKSA9PSAwKQorICAgIHJldHVybiB0cnVlOworICBpZiAoZXJybm8gIT0g
RUVYSVNUKQorICAgIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJubygpKTsKKyAgcmV0dXJuIGZhbHNl
OworfQorCit2b2lkIF9fY3JlYXRlX2RpcmVjdG9yeV9zeW1saW5rKHBhdGggY29uc3QmIGZyb20s
IHBhdGggY29uc3QmIHRvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9j
b2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJjcmVhdGVfZGlyZWN0b3J5X3N5
bWxpbmsiLCBlYywgJmZyb20sICZ0byk7CisgIGlmICg6OnN5bWxpbmsoZnJvbS5jX3N0cigpLCB0
by5jX3N0cigpKSAhPSAwKQorICAgIHJldHVybiBlcnIucmVwb3J0KGNhcHR1cmVfZXJybm8oKSk7
Cit9CisKK3ZvaWQgX19jcmVhdGVfaGFyZF9saW5rKGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBh
dGgmIHRvLCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJjcmVh
dGVfaGFyZF9saW5rIiwgZWMsICZmcm9tLCAmdG8pOworICBpZiAoOjpsaW5rKGZyb20uY19zdHIo
KSwgdG8uY19zdHIoKSkgPT0gLTEpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJu
bygpKTsKK30KKwordm9pZCBfX2NyZWF0ZV9zeW1saW5rKHBhdGggY29uc3QmIGZyb20sIHBhdGgg
Y29uc3QmIHRvLCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJj
cmVhdGVfc3ltbGluayIsIGVjLCAmZnJvbSwgJnRvKTsKKyAgaWYgKDo6c3ltbGluayhmcm9tLmNf
c3RyKCksIHRvLmNfc3RyKCkpID09IC0xKQorICAgIHJldHVybiBlcnIucmVwb3J0KGNhcHR1cmVf
ZXJybm8oKSk7Cit9CisKK3BhdGggX19jdXJyZW50X3BhdGgoZXJyb3JfY29kZSogZWMpIHsKKyAg
RXJyb3JIYW5kbGVyPHBhdGg+IGVycigiY3VycmVudF9wYXRoIiwgZWMpOworCisgIGF1dG8gc2l6
ZSA9IDo6cGF0aGNvbmYoIi4iLCBfUENfUEFUSF9NQVgpOworICBfTElCQ1BQX0FTU0VSVChzaXpl
ID49IDAsICJwYXRoY29uZiByZXR1cm5lZCBhIDAgYXMgbWF4IHNpemUiKTsKKworICBhdXRvIGJ1
ZmYgPSB1bmlxdWVfcHRyPGNoYXJbXT4obmV3IGNoYXJbc2l6ZSArIDFdKTsKKyAgY2hhciogcmV0
OworICBpZiAoKHJldCA9IDo6Z2V0Y3dkKGJ1ZmYuZ2V0KCksIHN0YXRpY19jYXN0PHNpemVfdD4o
c2l6ZSkpKSA9PSBudWxscHRyKQorICAgIHJldHVybiBlcnIucmVwb3J0KGNhcHR1cmVfZXJybm8o
KSwgImNhbGwgdG8gZ2V0Y3dkIGZhaWxlZCIpOworCisgIHJldHVybiB7YnVmZi5nZXQoKX07Cit9
CisKK3ZvaWQgX19jdXJyZW50X3BhdGgoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMpIHsK
KyAgRXJyb3JIYW5kbGVyPHZvaWQ+IGVycigiY3VycmVudF9wYXRoIiwgZWMsICZwKTsKKyAgaWYg
KDo6Y2hkaXIocC5jX3N0cigpKSA9PSAtMSkKKyAgICBlcnIucmVwb3J0KGNhcHR1cmVfZXJybm8o
KSk7Cit9CisKK2Jvb2wgX19lcXVpdmFsZW50KGNvbnN0IHBhdGgmIHAxLCBjb25zdCBwYXRoJiBw
MiwgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPGJvb2w+IGVycigiZXF1aXZhbGVu
dCIsIGVjLCAmcDEsICZwMik7CisKKyAgZXJyb3JfY29kZSBlYzEsIGVjMjsKKyAgU3RhdFQgc3Qx
ID0ge30sIHN0MiA9IHt9OworICBhdXRvIHMxID0gZGV0YWlsOjpwb3NpeF9zdGF0KHAxLm5hdGl2
ZSgpLCBzdDEsICZlYzEpOworICBpZiAoIWV4aXN0cyhzMSkpCisgICAgcmV0dXJuIGVyci5yZXBv
cnQoZXJyYzo6bm90X3N1cHBvcnRlZCk7CisgIGF1dG8gczIgPSBkZXRhaWw6OnBvc2l4X3N0YXQo
cDIubmF0aXZlKCksIHN0MiwgJmVjMik7CisgIGlmICghZXhpc3RzKHMyKSkKKyAgICByZXR1cm4g
ZXJyLnJlcG9ydChlcnJjOjpub3Rfc3VwcG9ydGVkKTsKKworICByZXR1cm4gZGV0YWlsOjpzdGF0
X2VxdWl2YWxlbnQoc3QxLCBzdDIpOworfQorCit1aW50bWF4X3QgX19maWxlX3NpemUoY29uc3Qg
cGF0aCYgcCwgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHVpbnRtYXhfdD4gZXJy
KCJmaWxlX3NpemUiLCBlYywgJnApOworCisgIGVycm9yX2NvZGUgbV9lYzsKKyAgU3RhdFQgc3Q7
CisgIGZpbGVfc3RhdHVzIGZzdCA9IGRldGFpbDo6cG9zaXhfc3RhdChwLCBzdCwgJm1fZWMpOwor
ICBpZiAoIWV4aXN0cyhmc3QpIHx8ICFpc19yZWd1bGFyX2ZpbGUoZnN0KSkgeworICAgIGVycmMg
ZXJyb3Jfa2luZCA9CisgICAgICAgIGlzX2RpcmVjdG9yeShmc3QpID8gZXJyYzo6aXNfYV9kaXJl
Y3RvcnkgOiBlcnJjOjpub3Rfc3VwcG9ydGVkOworICAgIGlmICghbV9lYykKKyAgICAgIG1fZWMg
PSBtYWtlX2Vycm9yX2NvZGUoZXJyb3Jfa2luZCk7CisgICAgcmV0dXJuIGVyci5yZXBvcnQobV9l
Yyk7CisgIH0KKyAgLy8gaXNfcmVndWxhcl9maWxlKHApID09IHRydWUKKyAgcmV0dXJuIHN0YXRp
Y19jYXN0PHVpbnRtYXhfdD4oc3Quc3Rfc2l6ZSk7Cit9CisKK3VpbnRtYXhfdCBfX2hhcmRfbGlu
a19jb3VudChjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8
dWludG1heF90PiBlcnIoImhhcmRfbGlua19jb3VudCIsIGVjLCAmcCk7CisKKyAgZXJyb3JfY29k
ZSBtX2VjOworICBTdGF0VCBzdDsKKyAgZGV0YWlsOjpwb3NpeF9zdGF0KHAsIHN0LCAmbV9lYyk7
CisgIGlmIChtX2VjKQorICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMpOworICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dWludG1heF90PihzdC5zdF9ubGluayk7Cit9CisKK2Jvb2wgX19mc19pc19lbXB0
eShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8Ym9vbD4g
ZXJyKCJpc19lbXB0eSIsIGVjLCAmcCk7CisKKyAgZXJyb3JfY29kZSBtX2VjOworICBTdGF0VCBw
c3Q7CisgIGF1dG8gc3QgPSBkZXRhaWw6OnBvc2l4X3N0YXQocCwgcHN0LCAmbV9lYyk7CisgIGlm
IChtX2VjKQorICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMpOworICBlbHNlIGlmICghaXNfZGly
ZWN0b3J5KHN0KSAmJiAhaXNfcmVndWxhcl9maWxlKHN0KSkKKyAgICByZXR1cm4gZXJyLnJlcG9y
dChlcnJjOjpub3Rfc3VwcG9ydGVkKTsKKyAgZWxzZSBpZiAoaXNfZGlyZWN0b3J5KHN0KSkgewor
ICAgIGF1dG8gaXQgPSBlYyA/IGRpcmVjdG9yeV9pdGVyYXRvcihwLCAqZWMpIDogZGlyZWN0b3J5
X2l0ZXJhdG9yKHApOworICAgIGlmIChlYyAmJiAqZWMpCisgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIGl0ID09IGRpcmVjdG9yeV9pdGVyYXRvcnt9OworICB9IGVsc2UgaWYgKGlzX3Jl
Z3VsYXJfZmlsZShzdCkpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnRtYXhfdD4ocHN0LnN0
X3NpemUpID09IDA7CisKKyAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOworfQorCitzdGF0aWMgZmls
ZV90aW1lX3R5cGUgX19leHRyYWN0X2xhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBwLCBjb25z
dCBTdGF0VCYgc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlcnJvcl9jb2RlKiBlYykgeworICB1c2luZyBkZXRhaWw6OmZzX3RpbWU7CisgIEVycm9y
SGFuZGxlcjxmaWxlX3RpbWVfdHlwZT4gZXJyKCJsYXN0X3dyaXRlX3RpbWUiLCBlYywgJnApOwor
CisgIGF1dG8gdHMgPSBkZXRhaWw6OmV4dHJhY3RfbXRpbWUoc3QpOworICBpZiAoIWZzX3RpbWU6
OmlzX3JlcHJlc2VudGFibGUodHMpKQorICAgIHJldHVybiBlcnIucmVwb3J0KGVycmM6OnZhbHVl
X3Rvb19sYXJnZSk7CisKKyAgcmV0dXJuIGZzX3RpbWU6OmNvbnZlcnRfZnJvbV90aW1lc3BlYyh0
cyk7Cit9CisKK2ZpbGVfdGltZV90eXBlIF9fbGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgmIHAs
IGVycm9yX2NvZGUqIGVjKSB7CisgIHVzaW5nIG5hbWVzcGFjZSBjaHJvbm87CisgIEVycm9ySGFu
ZGxlcjxmaWxlX3RpbWVfdHlwZT4gZXJyKCJsYXN0X3dyaXRlX3RpbWUiLCBlYywgJnApOworCisg
IGVycm9yX2NvZGUgbV9lYzsKKyAgU3RhdFQgc3Q7CisgIGRldGFpbDo6cG9zaXhfc3RhdChwLCBz
dCwgJm1fZWMpOworICBpZiAobV9lYykKKyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKKyAg
cmV0dXJuIF9fZXh0cmFjdF9sYXN0X3dyaXRlX3RpbWUocCwgc3QsIGVjKTsKK30KKwordm9pZCBf
X2xhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBwLCBmaWxlX3RpbWVfdHlwZSBuZXdfdGltZSwg
ZXJyb3JfY29kZSogZWMpIHsKKyAgdXNpbmcgZGV0YWlsOjpmc190aW1lOworICBFcnJvckhhbmRs
ZXI8dm9pZD4gZXJyKCJsYXN0X3dyaXRlX3RpbWUiLCBlYywgJnApOworCisgIGVycm9yX2NvZGUg
bV9lYzsKKyAgYXJyYXk8VGltZVNwZWMsIDI+IHRidWY7CisjaWYgIWRlZmluZWQoX0xJQkNQUF9V
U0VfVVRJTUVOU0FUKQorICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIGhhcyBhIHJhY2UgY29uZGl0
aW9uIGJldHdlZW4gZGV0ZXJtaW5pbmcgdGhlCisgIC8vIGxhc3QgYWNjZXNzIHRpbWUgYW5kIGF0
dGVtcHRpbmcgdG8gc2V0IGl0IHRvIHRoZSBzYW1lIHZhbHVlIHVzaW5nCisgIC8vIDo6dXRpbWVz
CisgIFN0YXRUIHN0OworICBmaWxlX3N0YXR1cyBmc3QgPSBkZXRhaWw6OnBvc2l4X3N0YXQocCwg
c3QsICZtX2VjKTsKKyAgaWYgKG1fZWMpCisgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7Cisg
IHRidWZbMF0gPSBkZXRhaWw6OmV4dHJhY3RfYXRpbWUoc3QpOworI2Vsc2UKKyAgdGJ1ZlswXS50
dl9zZWMgPSAwOworICB0YnVmWzBdLnR2X25zZWMgPSBVVElNRV9PTUlUOworI2VuZGlmCisgIGlm
ICghZnNfdGltZTo6Y29udmVydF90b190aW1lc3BlYyh0YnVmWzFdLCBuZXdfdGltZSkpCisgICAg
cmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6dmFsdWVfdG9vX2xhcmdlKTsKKworICBkZXRhaWw6OnNl
dF9maWxlX3RpbWVzKHAsIHRidWYsIG1fZWMpOworICBpZiAobV9lYykKKyAgICByZXR1cm4gZXJy
LnJlcG9ydChtX2VjKTsKK30KKwordm9pZCBfX3Blcm1pc3Npb25zKGNvbnN0IHBhdGgmIHAsIHBl
cm1zIHBybXMsIHBlcm1fb3B0aW9ucyBvcHRzLAorICAgICAgICAgICAgICAgICAgIGVycm9yX2Nv
ZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoInBlcm1pc3Npb25zIiwgZWMsICZw
KTsKKworICBhdXRvIGhhc19vcHQgPSBbJl0ocGVybV9vcHRpb25zIG8pIHsgcmV0dXJuIGJvb2wo
byAmIG9wdHMpOyB9OworICBjb25zdCBib29sIHJlc29sdmVfc3ltbGlua3MgPSAhaGFzX29wdChw
ZXJtX29wdGlvbnM6Om5vZm9sbG93KTsKKyAgY29uc3QgYm9vbCBhZGRfcGVybXMgPSBoYXNfb3B0
KHBlcm1fb3B0aW9uczo6YWRkKTsKKyAgY29uc3QgYm9vbCByZW1vdmVfcGVybXMgPSBoYXNfb3B0
KHBlcm1fb3B0aW9uczo6cmVtb3ZlKTsKKyAgX0xJQkNQUF9BU1NFUlQoCisgICAgICAoYWRkX3Bl
cm1zICsgcmVtb3ZlX3Blcm1zICsgaGFzX29wdChwZXJtX29wdGlvbnM6OnJlcGxhY2UpKSA9PSAx
LAorICAgICAgIk9uZSBhbmQgb25seSBvbmUgb2YgdGhlIHBlcm1fb3B0aW9ucyBjb25zdGFudHMg
cmVwbGFjZSwgYWRkLCBvciByZW1vdmUgIgorICAgICAgImlzIHByZXNlbnQgaW4gb3B0cyIpOwor
CisgIGJvb2wgc2V0X3N5bV9wZXJtcyA9IGZhbHNlOworICBwcm1zICY9IHBlcm1zOjptYXNrOwor
ICBpZiAoIXJlc29sdmVfc3ltbGlua3MgfHwgKGFkZF9wZXJtcyB8fCByZW1vdmVfcGVybXMpKSB7
CisgICAgZXJyb3JfY29kZSBtX2VjOworICAgIGZpbGVfc3RhdHVzIHN0ID0gcmVzb2x2ZV9zeW1s
aW5rcyA/IGRldGFpbDo6cG9zaXhfc3RhdChwLCAmbV9lYykKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOiBkZXRhaWw6OnBvc2l4X2xzdGF0KHAsICZtX2VjKTsKKyAgICBz
ZXRfc3ltX3Blcm1zID0gaXNfc3ltbGluayhzdCk7CisgICAgaWYgKG1fZWMpCisgICAgICByZXR1
cm4gZXJyLnJlcG9ydChtX2VjKTsKKyAgICBfTElCQ1BQX0FTU0VSVChzdC5wZXJtaXNzaW9ucygp
ICE9IHBlcm1zOjp1bmtub3duLAorICAgICAgICAgICAgICAgICAgICJQZXJtaXNzaW9ucyB1bmV4
cGVjdGVkbHkgdW5rbm93biIpOworICAgIGlmIChhZGRfcGVybXMpCisgICAgICBwcm1zIHw9IHN0
LnBlcm1pc3Npb25zKCk7CisgICAgZWxzZSBpZiAocmVtb3ZlX3Blcm1zKQorICAgICAgcHJtcyA9
IHN0LnBlcm1pc3Npb25zKCkgJiB+cHJtczsKKyAgfQorICBjb25zdCBhdXRvIHJlYWxfcGVybXMg
PSBkZXRhaWw6OnBvc2l4X2NvbnZlcnRfcGVybXMocHJtcyk7CisKKyNpZiBkZWZpbmVkKEFUX1NZ
TUxJTktfTk9GT0xMT1cpICYmIGRlZmluZWQoQVRfRkRDV0QpCisgIGNvbnN0IGludCBmbGFncyA9
IHNldF9zeW1fcGVybXMgPyBBVF9TWU1MSU5LX05PRk9MTE9XIDogMDsKKyAgaWYgKDo6ZmNobW9k
YXQoQVRfRkRDV0QsIHAuY19zdHIoKSwgcmVhbF9wZXJtcywgZmxhZ3MpID09IC0xKSB7CisgICAg
cmV0dXJuIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJubygpKTsKKyAgfQorI2Vsc2UKKyAgaWYgKHNl
dF9zeW1fcGVybXMpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6b3BlcmF0aW9uX25vdF9z
dXBwb3J0ZWQpOworICBpZiAoOjpjaG1vZChwLmNfc3RyKCksIHJlYWxfcGVybXMpID09IC0xKSB7
CisgICAgcmV0dXJuIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJubygpKTsKKyAgfQorI2VuZGlmCit9
CisKK3BhdGggX19yZWFkX3N5bWxpbmsoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMpIHsK
KyAgRXJyb3JIYW5kbGVyPHBhdGg+IGVycigicmVhZF9zeW1saW5rIiwgZWMsICZwKTsKKworICBj
aGFyIGJ1ZmZbUEFUSF9NQVggKyAxXTsKKyAgZXJyb3JfY29kZSBtX2VjOworICA6OnNzaXplX3Qg
cmV0OworICBpZiAoKHJldCA9IDo6cmVhZGxpbmsocC5jX3N0cigpLCBidWZmLCBQQVRIX01BWCkp
ID09IC0xKSB7CisgICAgcmV0dXJuIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJubygpKTsKKyAgfQor
ICBfTElCQ1BQX0FTU0VSVChyZXQgPD0gUEFUSF9NQVgsICJUT0RPIik7CisgIF9MSUJDUFBfQVNT
RVJUKHJldCA+IDAsICJUT0RPIik7CisgIGJ1ZmZbcmV0XSA9IDA7CisgIHJldHVybiB7YnVmZn07
Cit9CisKK2Jvb2wgX19yZW1vdmUoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMpIHsKKyAg
RXJyb3JIYW5kbGVyPGJvb2w+IGVycigicmVtb3ZlIiwgZWMsICZwKTsKKyAgaWYgKDo6cmVtb3Zl
KHAuY19zdHIoKSkgPT0gLTEpIHsKKyAgICBpZiAoZXJybm8gIT0gRU5PRU5UKQorICAgICAgZXJy
LnJlcG9ydChjYXB0dXJlX2Vycm5vKCkpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICByZXR1
cm4gdHJ1ZTsKK30KKworbmFtZXNwYWNlIHsKKwordWludG1heF90IHJlbW92ZV9hbGxfaW1wbChw
YXRoIGNvbnN0JiBwLCBlcnJvcl9jb2RlJiBlYykgeworICBjb25zdCBhdXRvIG5wb3MgPSBzdGF0
aWNfY2FzdDx1aW50bWF4X3Q+KC0xKTsKKyAgY29uc3QgZmlsZV9zdGF0dXMgc3QgPSBfX3N5bWxp
bmtfc3RhdHVzKHAsICZlYyk7CisgIGlmIChlYykKKyAgICByZXR1cm4gbnBvczsKKyAgdWludG1h
eF90IGNvdW50ID0gMTsKKyAgaWYgKGlzX2RpcmVjdG9yeShzdCkpIHsKKyAgICBmb3IgKGRpcmVj
dG9yeV9pdGVyYXRvciBpdChwLCBlYyk7ICFlYyAmJiBpdCAhPSBkaXJlY3RvcnlfaXRlcmF0b3Io
KTsKKyAgICAgICAgIGl0LmluY3JlbWVudChlYykpIHsKKyAgICAgIGF1dG8gb3RoZXJfY291bnQg
PSByZW1vdmVfYWxsX2ltcGwoaXQtPnBhdGgoKSwgZWMpOworICAgICAgaWYgKGVjKQorICAgICAg
ICByZXR1cm4gbnBvczsKKyAgICAgIGNvdW50ICs9IG90aGVyX2NvdW50OworICAgIH0KKyAgICBp
ZiAoZWMpCisgICAgICByZXR1cm4gbnBvczsKKyAgfQorICBpZiAoIV9fcmVtb3ZlKHAsICZlYykp
CisgICAgcmV0dXJuIG5wb3M7CisgIHJldHVybiBjb3VudDsKK30KKworfSAvLyBlbmQgbmFtZXNw
YWNlCisKK3VpbnRtYXhfdCBfX3JlbW92ZV9hbGwoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSog
ZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHVpbnRtYXhfdD4gZXJyKCJyZW1vdmVfYWxsIiwgZWMsICZw
KTsKKworICBlcnJvcl9jb2RlIG1lYzsKKyAgYXV0byBjb3VudCA9IHJlbW92ZV9hbGxfaW1wbChw
LCBtZWMpOworICBpZiAobWVjKSB7CisgICAgaWYgKG1lYyA9PSBlcnJjOjpub19zdWNoX2ZpbGVf
b3JfZGlyZWN0b3J5KQorICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGVyci5yZXBvcnQobWVj
KTsKKyAgfQorICByZXR1cm4gY291bnQ7Cit9CisKK3ZvaWQgX19yZW5hbWUoY29uc3QgcGF0aCYg
ZnJvbSwgY29uc3QgcGF0aCYgdG8sIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjx2
b2lkPiBlcnIoInJlbmFtZSIsIGVjLCAmZnJvbSwgJnRvKTsKKyAgaWYgKDo6cmVuYW1lKGZyb20u
Y19zdHIoKSwgdG8uY19zdHIoKSkgPT0gLTEpCisgICAgZXJyLnJlcG9ydChjYXB0dXJlX2Vycm5v
KCkpOworfQorCit2b2lkIF9fcmVzaXplX2ZpbGUoY29uc3QgcGF0aCYgcCwgdWludG1heF90IHNp
emUsIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoInJlc2l6ZV9m
aWxlIiwgZWMsICZwKTsKKyAgaWYgKDo6dHJ1bmNhdGUocC5jX3N0cigpLCBzdGF0aWNfY2FzdDwg
OjpvZmZfdD4oc2l6ZSkpID09IC0xKQorICAgIHJldHVybiBlcnIucmVwb3J0KGNhcHR1cmVfZXJy
bm8oKSk7Cit9CisKK3NwYWNlX2luZm8gX19zcGFjZShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2Rl
KiBlYykgeworICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJzcGFjZSIsIGVjLCAmcCk7CisgIHNw
YWNlX2luZm8gc2k7CisgIHN0cnVjdCBzdGF0dmZzIG1fc3ZmcyA9IHt9OworICBpZiAoOjpzdGF0
dmZzKHAuY19zdHIoKSwgJm1fc3ZmcykgPT0gLTEpIHsKKyAgICBlcnIucmVwb3J0KGNhcHR1cmVf
ZXJybm8oKSk7CisgICAgc2kuY2FwYWNpdHkgPSBzaS5mcmVlID0gc2kuYXZhaWxhYmxlID0gc3Rh
dGljX2Nhc3Q8dWludG1heF90PigtMSk7CisgICAgcmV0dXJuIHNpOworICB9CisgIC8vIE11bHRp
cGx5IHdpdGggb3ZlcmZsb3cgY2hlY2tpbmcuCisgIGF1dG8gZG9fbXVsdCA9IFsmXSh1aW50bWF4
X3QmIG91dCwgdWludG1heF90IG90aGVyKSB7CisgICAgb3V0ID0gb3RoZXIgKiBtX3N2ZnMuZl9m
cnNpemU7CisgICAgaWYgKG90aGVyID09IDAgfHwgb3V0IC8gb3RoZXIgIT0gbV9zdmZzLmZfZnJz
aXplKQorICAgICAgb3V0ID0gc3RhdGljX2Nhc3Q8dWludG1heF90PigtMSk7CisgIH07CisgIGRv
X211bHQoc2kuY2FwYWNpdHksIG1fc3Zmcy5mX2Jsb2Nrcyk7CisgIGRvX211bHQoc2kuZnJlZSwg
bV9zdmZzLmZfYmZyZWUpOworICBkb19tdWx0KHNpLmF2YWlsYWJsZSwgbV9zdmZzLmZfYmF2YWls
KTsKKyAgcmV0dXJuIHNpOworfQorCitmaWxlX3N0YXR1cyBfX3N0YXR1cyhjb25zdCBwYXRoJiBw
LCBlcnJvcl9jb2RlKiBlYykgeworICByZXR1cm4gZGV0YWlsOjpwb3NpeF9zdGF0KHAsIGVjKTsK
K30KKworZmlsZV9zdGF0dXMgX19zeW1saW5rX3N0YXR1cyhjb25zdCBwYXRoJiBwLCBlcnJvcl9j
b2RlKiBlYykgeworICByZXR1cm4gZGV0YWlsOjpwb3NpeF9sc3RhdChwLCBlYyk7Cit9CisKK3Bh
dGggX190ZW1wX2RpcmVjdG9yeV9wYXRoKGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxl
cjxwYXRoPiBlcnIoInRlbXBfZGlyZWN0b3J5X3BhdGgiLCBlYyk7CisKKyAgY29uc3QgY2hhciog
ZW52X3BhdGhzW10gPSB7IlRNUERJUiIsICJUTVAiLCAiVEVNUCIsICJURU1QRElSIn07CisgIGNv
bnN0IGNoYXIqIHJldCA9IG51bGxwdHI7CisKKyAgZm9yIChhdXRvJiBlcCA6IGVudl9wYXRocykK
KyAgICBpZiAoKHJldCA9IGdldGVudihlcCkpKQorICAgICAgYnJlYWs7CisgIGlmIChyZXQgPT0g
bnVsbHB0cikKKyAgICByZXQgPSAiL3RtcCI7CisKKyAgcGF0aCBwKHJldCk7CisgIGVycm9yX2Nv
ZGUgbV9lYzsKKyAgZmlsZV9zdGF0dXMgc3QgPSBkZXRhaWw6OnBvc2l4X3N0YXQocCwgJm1fZWMp
OworICBpZiAoIXN0YXR1c19rbm93bihzdCkpCisgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYywg
ImNhbm5vdCBhY2Nlc3MgcGF0aCBcIiVzXCIiLCBwKTsKKworICBpZiAoIWV4aXN0cyhzdCkgfHwg
IWlzX2RpcmVjdG9yeShzdCkpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6bm90X2FfZGly
ZWN0b3J5LCAicGF0aCBcIiVzXCIgaXMgbm90IGEgZGlyZWN0b3J5IiwKKyAgICAgICAgICAgICAg
ICAgICAgICBwKTsKKworICByZXR1cm4gcDsKK30KKworcGF0aCBfX3dlYWtseV9jYW5vbmljYWwo
Y29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHBhdGg+IGVy
cigid2Vha2x5X2Nhbm9uaWNhbCIsIGVjLCAmcCk7CisKKyAgaWYgKHAuZW1wdHkoKSkKKyAgICBy
ZXR1cm4gX19jYW5vbmljYWwoIiIsIGVjKTsKKworICBwYXRoIHJlc3VsdDsKKyAgcGF0aCB0bXA7
CisgIHRtcC5fX3Jlc2VydmUocC5uYXRpdmUoKS5zaXplKCkpOworICBhdXRvIFBQID0gUGF0aFBh
cnNlcjo6Q3JlYXRlRW5kKHAubmF0aXZlKCkpOworICAtLVBQOworICB2ZWN0b3I8c3RyaW5nX3Zp
ZXdfdD4gRE5FUGFydHM7CisKKyAgd2hpbGUgKFBQLlN0YXRlICE9IFBhdGhQYXJzZXI6OlBTX0Jl
Zm9yZUJlZ2luKSB7CisgICAgdG1wLmFzc2lnbihjcmVhdGVWaWV3KHAubmF0aXZlKCkuZGF0YSgp
LCAmUFAuUmF3RW50cnkuYmFjaygpKSk7CisgICAgZXJyb3JfY29kZSBtX2VjOworICAgIGZpbGVf
c3RhdHVzIHN0ID0gX19zdGF0dXModG1wLCAmbV9lYyk7CisgICAgaWYgKCFzdGF0dXNfa25vd24o
c3QpKSB7CisgICAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKKyAgICB9IGVsc2UgaWYgKGV4
aXN0cyhzdCkpIHsKKyAgICAgIHJlc3VsdCA9IF9fY2Fub25pY2FsKHRtcCwgZWMpOworICAgICAg
YnJlYWs7CisgICAgfQorICAgIERORVBhcnRzLnB1c2hfYmFjaygqUFApOworICAgIC0tUFA7Cisg
IH0KKyAgaWYgKFBQLlN0YXRlID09IFBhdGhQYXJzZXI6OlBTX0JlZm9yZUJlZ2luKQorICAgIHJl
c3VsdCA9IF9fY2Fub25pY2FsKCIiLCBlYyk7CisgIGlmIChlYykKKyAgICBlYy0+Y2xlYXIoKTsK
KyAgaWYgKERORVBhcnRzLmVtcHR5KCkpCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgZm9yIChhdXRv
IEl0ID0gRE5FUGFydHMucmJlZ2luKCk7IEl0ICE9IERORVBhcnRzLnJlbmQoKTsgKytJdCkKKyAg
ICByZXN1bHQgLz0gKkl0OworICByZXR1cm4gcmVzdWx0LmxleGljYWxseV9ub3JtYWwoKTsKK30K
KworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGF0aCBkZWZpbml0aW9ucworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitjb25zdGV4cHIgcGF0
aDo6dmFsdWVfdHlwZSBwYXRoOjpwcmVmZXJyZWRfc2VwYXJhdG9yOworCitwYXRoJiBwYXRoOjpy
ZXBsYWNlX2V4dGVuc2lvbihwYXRoIGNvbnN0JiByZXBsYWNlbWVudCkgeworICBwYXRoIHAgPSBl
eHRlbnNpb24oKTsKKyAgaWYgKG5vdCBwLmVtcHR5KCkpIHsKKyAgICBfX3BuXy5lcmFzZShfX3Bu
Xy5zaXplKCkgLSBwLm5hdGl2ZSgpLnNpemUoKSk7CisgIH0KKyAgaWYgKCFyZXBsYWNlbWVudC5l
bXB0eSgpKSB7CisgICAgaWYgKHJlcGxhY2VtZW50Lm5hdGl2ZSgpWzBdICE9ICcuJykgeworICAg
ICAgX19wbl8gKz0gIi4iOworICAgIH0KKyAgICBfX3BuXy5hcHBlbmQocmVwbGFjZW1lbnQuX19w
bl8pOworICB9CisgIHJldHVybiAqdGhpczsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor
Ly8gcGF0aC5kZWNvbXBvc2UKKworc3RyaW5nX3ZpZXdfdCBwYXRoOjpfX3Jvb3RfbmFtZSgpIGNv
bnN0IHsKKyAgYXV0byBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKF9fcG5fKTsKKyAgaWYg
KFBQLlN0YXRlID09IFBhdGhQYXJzZXI6OlBTX0luUm9vdE5hbWUpCisgICAgcmV0dXJuICpQUDsK
KyAgcmV0dXJuIHt9OworfQorCitzdHJpbmdfdmlld190IHBhdGg6Ol9fcm9vdF9kaXJlY3Rvcnko
KSBjb25zdCB7CisgIGF1dG8gUFAgPSBQYXRoUGFyc2VyOjpDcmVhdGVCZWdpbihfX3BuXyk7Cisg
IGlmIChQUC5TdGF0ZSA9PSBQYXRoUGFyc2VyOjpQU19JblJvb3ROYW1lKQorICAgICsrUFA7Cisg
IGlmIChQUC5TdGF0ZSA9PSBQYXRoUGFyc2VyOjpQU19JblJvb3REaXIpCisgICAgcmV0dXJuICpQ
UDsKKyAgcmV0dXJuIHt9OworfQorCitzdHJpbmdfdmlld190IHBhdGg6Ol9fcm9vdF9wYXRoX3Jh
dygpIGNvbnN0IHsKKyAgYXV0byBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKF9fcG5fKTsK
KyAgaWYgKFBQLlN0YXRlID09IFBhdGhQYXJzZXI6OlBTX0luUm9vdE5hbWUpIHsKKyAgICBhdXRv
IE5leHRDaCA9IFBQLnBlZWsoKTsKKyAgICBpZiAoTmV4dENoICYmICpOZXh0Q2ggPT0gJy8nKSB7
CisgICAgICArK1BQOworICAgICAgcmV0dXJuIGNyZWF0ZVZpZXcoX19wbl8uZGF0YSgpLCAmUFAu
UmF3RW50cnkuYmFjaygpKTsKKyAgICB9CisgICAgcmV0dXJuIFBQLlJhd0VudHJ5OworICB9Cisg
IGlmIChQUC5TdGF0ZSA9PSBQYXRoUGFyc2VyOjpQU19JblJvb3REaXIpCisgICAgcmV0dXJuICpQ
UDsKKyAgcmV0dXJuIHt9OworfQorCitzdGF0aWMgYm9vbCBDb25zdW1lUm9vdERpcihQYXRoUGFy
c2VyKiBQUCkgeworICB3aGlsZSAoUFAtPlN0YXRlIDw9IFBhdGhQYXJzZXI6OlBTX0luUm9vdERp
cikKKyAgICArKygqUFApOworICByZXR1cm4gUFAtPlN0YXRlID09IFBhdGhQYXJzZXI6OlBTX0F0
RW5kOworfQorCitzdHJpbmdfdmlld190IHBhdGg6Ol9fcmVsYXRpdmVfcGF0aCgpIGNvbnN0IHsK
KyAgYXV0byBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKF9fcG5fKTsKKyAgaWYgKENvbnN1
bWVSb290RGlyKCZQUCkpCisgICAgcmV0dXJuIHt9OworICByZXR1cm4gY3JlYXRlVmlldyhQUC5S
YXdFbnRyeS5kYXRhKCksICZfX3BuXy5iYWNrKCkpOworfQorCitzdHJpbmdfdmlld190IHBhdGg6
Ol9fcGFyZW50X3BhdGgoKSBjb25zdCB7CisgIGlmIChlbXB0eSgpKQorICAgIHJldHVybiB7fTsK
KyAgLy8gRGV0ZXJtaW5lIGlmIHdlIGhhdmUgYSByb290IHBhdGggYnV0IG5vdCBhIHJlbGF0aXZl
IHBhdGguIEluIHRoYXQgY2FzZQorICAvLyByZXR1cm4gKnRoaXMuCisgIHsKKyAgICBhdXRvIFBQ
ID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oX19wbl8pOworICAgIGlmIChDb25zdW1lUm9vdERp
cigmUFApKQorICAgICAgcmV0dXJuIF9fcG5fOworICB9CisgIC8vIE90aGVyd2lzZSByZW1vdmUg
YSBzaW5nbGUgZWxlbWVudCBmcm9tIHRoZSBlbmQgb2YgdGhlIHBhdGgsIGFuZCByZXR1cm4KKyAg
Ly8gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoYXQgcGF0aAorICB7CisgICAgYXV0byBQUCA9IFBh
dGhQYXJzZXI6OkNyZWF0ZUVuZChfX3BuXyk7CisgICAgLS1QUDsKKyAgICBpZiAoUFAuUmF3RW50
cnkuZGF0YSgpID09IF9fcG5fLmRhdGEoKSkKKyAgICAgIHJldHVybiB7fTsKKyAgICAtLVBQOwor
ICAgIHJldHVybiBjcmVhdGVWaWV3KF9fcG5fLmRhdGEoKSwgJlBQLlJhd0VudHJ5LmJhY2soKSk7
CisgIH0KK30KKworc3RyaW5nX3ZpZXdfdCBwYXRoOjpfX2ZpbGVuYW1lKCkgY29uc3QgeworICBp
ZiAoZW1wdHkoKSkKKyAgICByZXR1cm4ge307CisgIHsKKyAgICBQYXRoUGFyc2VyIFBQID0gUGF0
aFBhcnNlcjo6Q3JlYXRlQmVnaW4oX19wbl8pOworICAgIGlmIChDb25zdW1lUm9vdERpcigmUFAp
KQorICAgICAgcmV0dXJuIHt9OworICB9CisgIHJldHVybiAqKC0tUGF0aFBhcnNlcjo6Q3JlYXRl
RW5kKF9fcG5fKSk7Cit9CisKK3N0cmluZ192aWV3X3QgcGF0aDo6X19zdGVtKCkgY29uc3Qgewor
ICByZXR1cm4gcGFyc2VyOjpzZXBhcmF0ZV9maWxlbmFtZShfX2ZpbGVuYW1lKCkpLmZpcnN0Owor
fQorCitzdHJpbmdfdmlld190IHBhdGg6Ol9fZXh0ZW5zaW9uKCkgY29uc3QgeworICByZXR1cm4g
cGFyc2VyOjpzZXBhcmF0ZV9maWxlbmFtZShfX2ZpbGVuYW1lKCkpLnNlY29uZDsKK30KKworLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLworLy8gcGF0aC5nZW4KKworZW51bSBQYXRoUGFydEtpbmQgOiB1bnNp
Z25lZCBjaGFyIHsKKyAgUEtfTm9uZSwKKyAgUEtfUm9vdFNlcCwKKyAgUEtfRmlsZW5hbWUsCisg
IFBLX0RvdCwKKyAgUEtfRG90RG90LAorICBQS19UcmFpbGluZ1NlcAorfTsKKworc3RhdGljIFBh
dGhQYXJ0S2luZCBDbGFzc2lmeVBhdGhQYXJ0KHN0cmluZ192aWV3X3QgUGFydCkgeworICBpZiAo
UGFydC5lbXB0eSgpKQorICAgIHJldHVybiBQS19UcmFpbGluZ1NlcDsKKyAgaWYgKFBhcnQgPT0g
Ii4iKQorICAgIHJldHVybiBQS19Eb3Q7CisgIGlmIChQYXJ0ID09ICIuLiIpCisgICAgcmV0dXJu
IFBLX0RvdERvdDsKKyAgaWYgKFBhcnQgPT0gIi8iKQorICAgIHJldHVybiBQS19Sb290U2VwOwor
ICByZXR1cm4gUEtfRmlsZW5hbWU7Cit9CisKK3BhdGggcGF0aDo6bGV4aWNhbGx5X25vcm1hbCgp
IGNvbnN0IHsKKyAgaWYgKF9fcG5fLmVtcHR5KCkpCisgICAgcmV0dXJuICp0aGlzOworCisgIHVz
aW5nIFBhcnRLaW5kUGFpciA9IHBhaXI8c3RyaW5nX3ZpZXdfdCwgUGF0aFBhcnRLaW5kPjsKKyAg
dmVjdG9yPFBhcnRLaW5kUGFpcj4gUGFydHM7CisgIC8vIEd1ZXNzIGFzIHRvIGhvdyBtYW55IGVs
ZW1lbnRzIHRoZSBwYXRoIGhhcyB0byBhdm9pZCByZWFsbG9jYXRpbmcuCisgIFBhcnRzLnJlc2Vy
dmUoMzIpOworCisgIC8vIFRyYWNrIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBwYXJ0cyBhcyB3ZSBj
b2xsZWN0IHRoZW0uIFRoaXMgYWxsb3dzIHRoZQorICAvLyByZXN1bHRpbmcgcGF0aCB0byByZXNl
cnZlIHRoZSBjb3JyZWN0IGFtb3VudCBvZiBtZW1vcnkuCisgIHNpemVfdCBOZXdQYXRoU2l6ZSA9
IDA7CisgIGF1dG8gQWRkUGFydCA9IFsmXShQYXRoUGFydEtpbmQgSywgc3RyaW5nX3ZpZXdfdCBQ
KSB7CisgICAgTmV3UGF0aFNpemUgKz0gUC5zaXplKCk7CisgICAgUGFydHMuZW1wbGFjZV9iYWNr
KFAsIEspOworICB9OworICBhdXRvIExhc3RQYXJ0S2luZCA9IFsmXSgpIHsKKyAgICBpZiAoUGFy
dHMuZW1wdHkoKSkKKyAgICAgIHJldHVybiBQS19Ob25lOworICAgIHJldHVybiBQYXJ0cy5iYWNr
KCkuc2Vjb25kOworICB9OworCisgIGJvb2wgTWF5YmVOZWVkVHJhaWxpbmdTZXAgPSBmYWxzZTsK
KyAgLy8gQnVpbGQgYSBzdGFjayBjb250YWluaW5nIHRoZSByZW1haW5pbmcgZWxlbWVudHMgb2Yg
dGhlIHBhdGgsIHBvcHBpbmcgb2ZmCisgIC8vIGVsZW1lbnRzIHdoaWNoIG9jY3VyIGJlZm9yZSBh
ICcuLicgZW50cnkuCisgIGZvciAoYXV0byBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKF9f
cG5fKTsgUFA7ICsrUFApIHsKKyAgICBhdXRvIFBhcnQgPSAqUFA7CisgICAgUGF0aFBhcnRLaW5k
IEtpbmQgPSBDbGFzc2lmeVBhdGhQYXJ0KFBhcnQpOworICAgIHN3aXRjaCAoS2luZCkgeworICAg
IGNhc2UgUEtfRmlsZW5hbWU6CisgICAgY2FzZSBQS19Sb290U2VwOiB7CisgICAgICAvLyBBZGQg
YWxsIG5vbi1kb3QgYW5kIG5vbi1kb3QtZG90IGVsZW1lbnRzIHRvIHRoZSBzdGFjayBvZiBlbGVt
ZW50cy4KKyAgICAgIEFkZFBhcnQoS2luZCwgUGFydCk7CisgICAgICBNYXliZU5lZWRUcmFpbGlu
Z1NlcCA9IGZhbHNlOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUEtfRG90RG90OiB7
CisgICAgICAvLyBPbmx5IHB1c2ggYSAiLi4iIGVsZW1lbnQgaWYgdGhlcmUgYXJlIG5vIGVsZW1l
bnRzIHByZWNlZGluZyB0aGUgIi4uIiwKKyAgICAgIC8vIG9yIGlmIHRoZSBwcmVjZWRpbmcgZWxl
bWVudCBpcyBpdHNlbGYgIi4uIi4KKyAgICAgIGF1dG8gTGFzdEtpbmQgPSBMYXN0UGFydEtpbmQo
KTsKKyAgICAgIGlmIChMYXN0S2luZCA9PSBQS19GaWxlbmFtZSkgeworICAgICAgICBOZXdQYXRo
U2l6ZSAtPSBQYXJ0cy5iYWNrKCkuZmlyc3Quc2l6ZSgpOworICAgICAgICBQYXJ0cy5wb3BfYmFj
aygpOworICAgICAgfSBlbHNlIGlmIChMYXN0S2luZCAhPSBQS19Sb290U2VwKQorICAgICAgICBB
ZGRQYXJ0KFBLX0RvdERvdCwgIi4uIik7CisgICAgICBNYXliZU5lZWRUcmFpbGluZ1NlcCA9IExh
c3RLaW5kID09IFBLX0ZpbGVuYW1lOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUEtf
RG90OgorICAgIGNhc2UgUEtfVHJhaWxpbmdTZXA6IHsKKyAgICAgIE1heWJlTmVlZFRyYWlsaW5n
U2VwID0gdHJ1ZTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBLX05vbmU6CisgICAg
ICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7CisgICAgfQorICB9CisgIC8vIFtmcy5wYXRoLmdlbmVy
aWNdcDYuODogSWYgdGhlIHBhdGggaXMgZW1wdHksIGFkZCBhIGRvdC4KKyAgaWYgKFBhcnRzLmVt
cHR5KCkpCisgICAgcmV0dXJuICIuIjsKKworICAvLyBbZnMucGF0aC5nZW5lcmljXXA2Ljc6IElm
IHRoZSBsYXN0IGZpbGVuYW1lIGlzIGRvdC1kb3QsIHJlbW92ZSBhbnkKKyAgLy8gdHJhaWxpbmcg
ZGlyZWN0b3J5LXNlcGFyYXRvci4KKyAgYm9vbCBOZWVkVHJhaWxpbmdTZXAgPSBNYXliZU5lZWRU
cmFpbGluZ1NlcCAmJiBMYXN0UGFydEtpbmQoKSA9PSBQS19GaWxlbmFtZTsKKworICBwYXRoIFJl
c3VsdDsKKyAgUmVzdWx0Ll9fcG5fLnJlc2VydmUoUGFydHMuc2l6ZSgpICsgTmV3UGF0aFNpemUg
KyBOZWVkVHJhaWxpbmdTZXApOworICBmb3IgKGF1dG8mIFBLIDogUGFydHMpCisgICAgUmVzdWx0
IC89IFBLLmZpcnN0OworCisgIGlmIChOZWVkVHJhaWxpbmdTZXApCisgICAgUmVzdWx0IC89ICIi
OworCisgIHJldHVybiBSZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgRGV0ZXJtaW5lTGV4aWNhbEVs
ZW1lbnRDb3VudChQYXRoUGFyc2VyIFBQKSB7CisgIGludCBDb3VudCA9IDA7CisgIGZvciAoOyBQ
UDsgKytQUCkgeworICAgIGF1dG8gRWxlbSA9ICpQUDsKKyAgICBpZiAoRWxlbSA9PSAiLi4iKQor
ICAgICAgLS1Db3VudDsKKyAgICBlbHNlIGlmIChFbGVtICE9ICIuIikKKyAgICAgICsrQ291bnQ7
CisgIH0KKyAgcmV0dXJuIENvdW50OworfQorCitwYXRoIHBhdGg6OmxleGljYWxseV9yZWxhdGl2
ZShjb25zdCBwYXRoJiBiYXNlKSBjb25zdCB7CisgIHsgLy8gcGVyZm9ybSByb290LW5hbWUvcm9v
dC1kaXJlY3RvcnkgbWlzbWF0Y2ggY2hlY2tzCisgICAgYXV0byBQUCA9IFBhdGhQYXJzZXI6OkNy
ZWF0ZUJlZ2luKF9fcG5fKTsKKyAgICBhdXRvIFBQQmFzZSA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJl
Z2luKGJhc2UuX19wbl8pOworICAgIGF1dG8gQ2hlY2tJdGVyTWlzbWF0Y2hBdEJhc2UgPSBbJl0o
KSB7CisgICAgICByZXR1cm4gUFAuU3RhdGUgIT0gUFBCYXNlLlN0YXRlICYmCisgICAgICAgICAg
ICAgKFBQLmluUm9vdFBhdGgoKSB8fCBQUEJhc2UuaW5Sb290UGF0aCgpKTsKKyAgICB9OworICAg
IGlmIChQUC5TdGF0ZSA9PSBQYXRoUGFyc2VyOjpQU19JblJvb3ROYW1lICYmCisgICAgICAgIFBQ
QmFzZS5TdGF0ZSA9PSBQYXRoUGFyc2VyOjpQU19JblJvb3ROYW1lKSB7CisgICAgICBpZiAoKlBQ
ICE9ICpQUEJhc2UpCisgICAgICAgIHJldHVybiB7fTsKKyAgICB9IGVsc2UgaWYgKENoZWNrSXRl
ck1pc21hdGNoQXRCYXNlKCkpCisgICAgICByZXR1cm4ge307CisKKyAgICBpZiAoUFAuaW5Sb290
UGF0aCgpKQorICAgICAgKytQUDsKKyAgICBpZiAoUFBCYXNlLmluUm9vdFBhdGgoKSkKKyAgICAg
ICsrUFBCYXNlOworICAgIGlmIChDaGVja0l0ZXJNaXNtYXRjaEF0QmFzZSgpKQorICAgICAgcmV0
dXJuIHt9OworICB9CisKKyAgLy8gRmluZCB0aGUgZmlyc3QgbWlzbWF0Y2hpbmcgZWxlbWVudAor
ICBhdXRvIFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oX19wbl8pOworICBhdXRvIFBQQmFz
ZSA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKGJhc2UuX19wbl8pOworICB3aGlsZSAoUFAgJiYg
UFBCYXNlICYmIFBQLlN0YXRlID09IFBQQmFzZS5TdGF0ZSAmJiAqUFAgPT0gKlBQQmFzZSkgewor
ICAgICsrUFA7CisgICAgKytQUEJhc2U7CisgIH0KKworICAvLyBJZiB0aGVyZSBpcyBubyBtaXNt
YXRjaCwgcmV0dXJuICIuIi4KKyAgaWYgKCFQUCAmJiAhUFBCYXNlKQorICAgIHJldHVybiAiLiI7
CisKKyAgLy8gT3RoZXJ3aXNlLCBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBlbGVtZW50cywgJ24n
LCB3aGljaCBhcmUgbm90IGRvdCBvcgorICAvLyBkb3QtZG90IG1pbnVzIHRoZSBudW1iZXIgb2Yg
ZG90LWRvdCBlbGVtZW50cy4KKyAgaW50IEVsZW1Db3VudCA9IERldGVybWluZUxleGljYWxFbGVt
ZW50Q291bnQoUFBCYXNlKTsKKyAgaWYgKEVsZW1Db3VudCA8IDApCisgICAgcmV0dXJuIHt9Owor
CisgIC8vIHJldHVybiBhIHBhdGggY29uc3RydWN0ZWQgd2l0aCAnbicgZG90LWRvdCBlbGVtZW50
cywgZm9sbG93ZWQgYnkgdGhlIHRoZQorICAvLyBlbGVtZW50cyBvZiAnKnRoaXMnIGFmdGVyIHRo
ZSBtaXNtYXRjaC4KKyAgcGF0aCBSZXN1bHQ7CisgIC8vIEZJWE1FOiBSZXNlcnZlIGVub3VnaCBy
b29tIGluIFJlc3VsdCB0aGF0IGl0IHdvbid0IGhhdmUgdG8gcmUtYWxsb2NhdGUuCisgIHdoaWxl
IChFbGVtQ291bnQtLSkKKyAgICBSZXN1bHQgLz0gIi4uIjsKKyAgZm9yICg7IFBQOyArK1BQKQor
ICAgIFJlc3VsdCAvPSAqUFA7CisgIHJldHVybiBSZXN1bHQ7Cit9CisKKy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KKy8vIHBhdGguY29tcGFyaXNvbnMKK2ludCBwYXRoOjpfX2NvbXBhcmUoc3RyaW5nX3Zp
ZXdfdCBfX3MpIGNvbnN0IHsKKyAgYXV0byBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKF9f
cG5fKTsKKyAgYXV0byBQUDIgPSBQYXRoUGFyc2VyOjpDcmVhdGVCZWdpbihfX3MpOworICB3aGls
ZSAoUFAgJiYgUFAyKSB7CisgICAgaW50IHJlcyA9ICgqUFApLmNvbXBhcmUoKlBQMik7CisgICAg
aWYgKHJlcyAhPSAwKQorICAgICAgcmV0dXJuIHJlczsKKyAgICArK1BQOworICAgICsrUFAyOwor
ICB9CisgIGlmIChQUC5TdGF0ZSA9PSBQUDIuU3RhdGUgJiYgIVBQKQorICAgIHJldHVybiAwOwor
ICBpZiAoIVBQKQorICAgIHJldHVybiAtMTsKKyAgcmV0dXJuIDE7Cit9CisKKy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KKy8vIHBhdGgubm9ubWVtYmVycworc2l6ZV90IGhhc2hfdmFsdWUoY29uc3QgcGF0
aCYgX19wKSBub2V4Y2VwdCB7CisgIGF1dG8gUFAgPSBQYXRoUGFyc2VyOjpDcmVhdGVCZWdpbihf
X3AubmF0aXZlKCkpOworICBzaXplX3QgaGFzaF92YWx1ZSA9IDA7CisgIGhhc2g8c3RyaW5nX3Zp
ZXdfdD4gaGFzaGVyOworICB3aGlsZSAoUFApIHsKKyAgICBoYXNoX3ZhbHVlID0gX19oYXNoX2Nv
bWJpbmUoaGFzaF92YWx1ZSwgaGFzaGVyKCpQUCkpOworICAgICsrUFA7CisgIH0KKyAgcmV0dXJu
IGhhc2hfdmFsdWU7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIHBhdGguaXRyCitwYXRo
OjppdGVyYXRvciBwYXRoOjpiZWdpbigpIGNvbnN0IHsKKyAgYXV0byBQUCA9IFBhdGhQYXJzZXI6
OkNyZWF0ZUJlZ2luKF9fcG5fKTsKKyAgaXRlcmF0b3IgaXQ7CisgIGl0Ll9fcGF0aF9wdHJfID0g
dGhpczsKKyAgaXQuX19zdGF0ZV8gPSBzdGF0aWNfY2FzdDxwYXRoOjppdGVyYXRvcjo6X1BhcnNl
clN0YXRlPihQUC5TdGF0ZSk7CisgIGl0Ll9fZW50cnlfID0gUFAuUmF3RW50cnk7CisgIGl0Ll9f
c3Rhc2hlZF9lbGVtXy5fX2Fzc2lnbl92aWV3KCpQUCk7CisgIHJldHVybiBpdDsKK30KKworcGF0
aDo6aXRlcmF0b3IgcGF0aDo6ZW5kKCkgY29uc3QgeworICBpdGVyYXRvciBpdHt9OworICBpdC5f
X3N0YXRlXyA9IHBhdGg6Oml0ZXJhdG9yOjpfQXRFbmQ7CisgIGl0Ll9fcGF0aF9wdHJfID0gdGhp
czsKKyAgcmV0dXJuIGl0OworfQorCitwYXRoOjppdGVyYXRvciYgcGF0aDo6aXRlcmF0b3I6Ol9f
aW5jcmVtZW50KCkgeworICBQYXRoUGFyc2VyIFBQKF9fcGF0aF9wdHJfLT5uYXRpdmUoKSwgX19l
bnRyeV8sIF9fc3RhdGVfKTsKKyAgKytQUDsKKyAgX19zdGF0ZV8gPSBzdGF0aWNfY2FzdDxfUGFy
c2VyU3RhdGU+KFBQLlN0YXRlKTsKKyAgX19lbnRyeV8gPSBQUC5SYXdFbnRyeTsKKyAgX19zdGFz
aGVkX2VsZW1fLl9fYXNzaWduX3ZpZXcoKlBQKTsKKyAgcmV0dXJuICp0aGlzOworfQorCitwYXRo
OjppdGVyYXRvciYgcGF0aDo6aXRlcmF0b3I6Ol9fZGVjcmVtZW50KCkgeworICBQYXRoUGFyc2Vy
IFBQKF9fcGF0aF9wdHJfLT5uYXRpdmUoKSwgX19lbnRyeV8sIF9fc3RhdGVfKTsKKyAgLS1QUDsK
KyAgX19zdGF0ZV8gPSBzdGF0aWNfY2FzdDxfUGFyc2VyU3RhdGU+KFBQLlN0YXRlKTsKKyAgX19l
bnRyeV8gPSBQUC5SYXdFbnRyeTsKKyAgX19zdGFzaGVkX2VsZW1fLl9fYXNzaWduX3ZpZXcoKlBQ
KTsKKyAgcmV0dXJuICp0aGlzOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBlbnRyeSBkZWZpbml0aW9ucworLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLworCisjaWZuZGVmIF9MSUJDUFBfV0lOMzJBUEkKK2Vycm9yX2NvZGUg
ZGlyZWN0b3J5X2VudHJ5OjpfX2RvX3JlZnJlc2goKSBub2V4Y2VwdCB7CisgIF9fZGF0YV8uX19y
ZXNldCgpOworICBlcnJvcl9jb2RlIGZhaWx1cmVfZWM7CisKKyAgU3RhdFQgZnVsbF9zdDsKKyAg
ZmlsZV9zdGF0dXMgc3QgPSBkZXRhaWw6OnBvc2l4X2xzdGF0KF9fcF8sIGZ1bGxfc3QsICZmYWls
dXJlX2VjKTsKKyAgaWYgKCFzdGF0dXNfa25vd24oc3QpKSB7CisgICAgX19kYXRhXy5fX3Jlc2V0
KCk7CisgICAgcmV0dXJuIGZhaWx1cmVfZWM7CisgIH0KKworICBpZiAoIV9WU1REX0ZTOjpleGlz
dHMoc3QpIHx8ICFfVlNURF9GUzo6aXNfc3ltbGluayhzdCkpIHsKKyAgICBfX2RhdGFfLl9fY2Fj
aGVfdHlwZV8gPSBkaXJlY3RvcnlfZW50cnk6Ol9SZWZyZXNoTm9uU3ltbGluazsKKyAgICBfX2Rh
dGFfLl9fdHlwZV8gPSBzdC50eXBlKCk7CisgICAgX19kYXRhXy5fX25vbl9zeW1fcGVybXNfID0g
c3QucGVybWlzc2lvbnMoKTsKKyAgfSBlbHNlIHsgLy8gd2UgaGF2ZSBhIHN5bWxpbmsKKyAgICBf
X2RhdGFfLl9fc3ltX3Blcm1zXyA9IHN0LnBlcm1pc3Npb25zKCk7CisgICAgLy8gR2V0IHRoZSBp
bmZvcm1hdGlvbiBhYm91dCB0aGUgbGlua2VkIGVudGl0eS4KKyAgICAvLyBJZ25vcmUgZXJyb3Jz
IGZyb20gc3RhdCwgc2luY2Ugd2UgZG9uJ3Qgd2FudCBlcnJvcnMgcmVnYXJkaW5nIHN5bWxpbmsK
KyAgICAvLyByZXNvbHV0aW9uIHRvIGJlIHJlcG9ydGVkIHRvIHRoZSB1c2VyLgorICAgIGVycm9y
X2NvZGUgaWdub3JlZF9lYzsKKyAgICBzdCA9IGRldGFpbDo6cG9zaXhfc3RhdChfX3BfLCBmdWxs
X3N0LCAmaWdub3JlZF9lYyk7CisKKyAgICBfX2RhdGFfLl9fdHlwZV8gPSBzdC50eXBlKCk7Cisg
ICAgX19kYXRhXy5fX25vbl9zeW1fcGVybXNfID0gc3QucGVybWlzc2lvbnMoKTsKKworICAgIC8v
IElmIHdlIGZhaWxlZCB0byByZXNvbHZlIHRoZSBsaW5rLCB0aGVuIG9ubHkgcGFydGlhbGx5IHBv
cHVsYXRlIHRoZQorICAgIC8vIGNhY2hlLgorICAgIGlmICghc3RhdHVzX2tub3duKHN0KSkgewor
ICAgICAgX19kYXRhXy5fX2NhY2hlX3R5cGVfID0gZGlyZWN0b3J5X2VudHJ5OjpfUmVmcmVzaFN5
bWxpbmtVbnJlc29sdmVkOworICAgICAgcmV0dXJuIGVycm9yX2NvZGV7fTsKKyAgICB9CisgICAg
Ly8gT3RoZXJ3aXNlLCB3ZSByZXNvbHZlZCB0aGUgbGluaywgcG90ZW50aWFsbHkgYXMgbm90IGV4
aXN0aW5nLgorICAgIC8vIFRoYXQncyBPSy4KKyAgICBfX2RhdGFfLl9fY2FjaGVfdHlwZV8gPSBk
aXJlY3RvcnlfZW50cnk6Ol9SZWZyZXNoU3ltbGluazsKKyAgfQorCisgIGlmIChfVlNURF9GUzo6
aXNfcmVndWxhcl9maWxlKHN0KSkKKyAgICBfX2RhdGFfLl9fc2l6ZV8gPSBzdGF0aWNfY2FzdDx1
aW50bWF4X3Q+KGZ1bGxfc3Quc3Rfc2l6ZSk7CisKKyAgaWYgKF9WU1REX0ZTOjpleGlzdHMoc3Qp
KSB7CisgICAgX19kYXRhXy5fX25saW5rXyA9IHN0YXRpY19jYXN0PHVpbnRtYXhfdD4oZnVsbF9z
dC5zdF9ubGluayk7CisKKyAgICAvLyBBdHRlbXB0IHRvIGV4dHJhY3QgdGhlIG10aW1lLCBhbmQg
ZmFpbCBpZiBpdCdzIG5vdCByZXByZXNlbnRhYmxlIHVzaW5nCisgICAgLy8gZmlsZV90aW1lX3R5
cGUuIEZvciBub3cgd2UgaWdub3JlIHRoZSBlcnJvciwgYXMgd2UnbGwgcmVwb3J0IGl0IHdoZW4K
KyAgICAvLyB0aGUgdmFsdWUgaXMgYWN0dWFsbHkgdXNlZC4KKyAgICBlcnJvcl9jb2RlIGlnbm9y
ZWRfZWM7CisgICAgX19kYXRhXy5fX3dyaXRlX3RpbWVfID0KKyAgICAgICAgX19leHRyYWN0X2xh
c3Rfd3JpdGVfdGltZShfX3BfLCBmdWxsX3N0LCAmaWdub3JlZF9lYyk7CisgIH0KKworICByZXR1
cm4gZmFpbHVyZV9lYzsKK30KKyNlbHNlCitlcnJvcl9jb2RlIGRpcmVjdG9yeV9lbnRyeTo6X19k
b19yZWZyZXNoKCkgbm9leGNlcHQgeworICBfX2RhdGFfLl9fcmVzZXQoKTsKKyAgZXJyb3JfY29k
ZSBmYWlsdXJlX2VjOworCisgIGZpbGVfc3RhdHVzIHN0ID0gX1ZTVERfRlM6OnN5bWxpbmtfc3Rh
dHVzKF9fcF8sIGZhaWx1cmVfZWMpOworICBpZiAoIXN0YXR1c19rbm93bihzdCkpIHsKKyAgICBf
X2RhdGFfLl9fcmVzZXQoKTsKKyAgICByZXR1cm4gZmFpbHVyZV9lYzsKKyAgfQorCisgIGlmICgh
X1ZTVERfRlM6OmV4aXN0cyhzdCkgfHwgIV9WU1REX0ZTOjppc19zeW1saW5rKHN0KSkgeworICAg
IF9fZGF0YV8uX19jYWNoZV90eXBlXyA9IGRpcmVjdG9yeV9lbnRyeTo6X1JlZnJlc2hOb25TeW1s
aW5rOworICAgIF9fZGF0YV8uX190eXBlXyA9IHN0LnR5cGUoKTsKKyAgICBfX2RhdGFfLl9fbm9u
X3N5bV9wZXJtc18gPSBzdC5wZXJtaXNzaW9ucygpOworICB9IGVsc2UgeyAvLyB3ZSBoYXZlIGEg
c3ltbGluaworICAgIF9fZGF0YV8uX19zeW1fcGVybXNfID0gc3QucGVybWlzc2lvbnMoKTsKKyAg
ICAvLyBHZXQgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsaW5rZWQgZW50aXR5LgorICAgIC8v
IElnbm9yZSBlcnJvcnMgZnJvbSBzdGF0LCBzaW5jZSB3ZSBkb24ndCB3YW50IGVycm9ycyByZWdh
cmRpbmcgc3ltbGluaworICAgIC8vIHJlc29sdXRpb24gdG8gYmUgcmVwb3J0ZWQgdG8gdGhlIHVz
ZXIuCisgICAgZXJyb3JfY29kZSBpZ25vcmVkX2VjOworICAgIHN0ID0gX1ZTVERfRlM6OnN0YXR1
cyhfX3BfLCBpZ25vcmVkX2VjKTsKKworICAgIF9fZGF0YV8uX190eXBlXyA9IHN0LnR5cGUoKTsK
KyAgICBfX2RhdGFfLl9fbm9uX3N5bV9wZXJtc18gPSBzdC5wZXJtaXNzaW9ucygpOworCisgICAg
Ly8gSWYgd2UgZmFpbGVkIHRvIHJlc29sdmUgdGhlIGxpbmssIHRoZW4gb25seSBwYXJ0aWFsbHkg
cG9wdWxhdGUgdGhlCisgICAgLy8gY2FjaGUuCisgICAgaWYgKCFzdGF0dXNfa25vd24oc3QpKSB7
CisgICAgICBfX2RhdGFfLl9fY2FjaGVfdHlwZV8gPSBkaXJlY3RvcnlfZW50cnk6Ol9SZWZyZXNo
U3ltbGlua1VucmVzb2x2ZWQ7CisgICAgICByZXR1cm4gZXJyb3JfY29kZXt9OworICAgIH0KKyAg
ICBfX2RhdGFfLl9fY2FjaGVfdHlwZV8gPSBkaXJlY3RvcnlfZW50cnk6Ol9SZWZyZXNoU3ltbGlu
azsKKyAgfQorCisgIC8vIEZJWE1FOiBUaGlzIGlzIGN1cnJlbnRseSBicm9rZW4sIGFuZCB0aGUg
aW1wbGVtZW50YXRpb24gb25seSBhIHBsYWNlaG9sZGVyLgorICAvLyBXZSBuZWVkIHRvIGNhY2hl
IGxhc3Rfd3JpdGVfdGltZSwgZmlsZV9zaXplLCBhbmQgaGFyZF9saW5rX2NvdW50IGhlcmUgYmVm
b3JlCisgIC8vIHRoZSBpbXBsZW1lbnRhdGlvbiBhY3R1YWxseSB3b3Jrcy4KKworICByZXR1cm4g
ZmFpbHVyZV9lYzsKK30KKyNlbmRpZgorCitfTElCQ1BQX0VORF9OQU1FU1BBQ0VfRklMRVNZU1RF
TQorCisvKiAtLSBFTkQgZmlsZXN5c3RlbS9vcGVyYXRpb25zLmNwcCAtLSAqLworCisjZW5kaWYg
Ly8gX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8IF9fTUFDXzEwXzE1CkluZGV4OiBU
b29scy9XZWJLaXRUZXN0UnVubmVyL1N0ZEZpbGVzeXN0ZW0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL1N0ZEZpbGVzeXN0ZW0uaAkobm9uZXhpc3RlbnQpCisrKyBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL1N0ZEZpbGVzeXN0ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDI3MDAgQEAKKy8vIC0qLSBDKysgLSotCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBmaWxlc3lzdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworLy8K
Ky8vICAgICAgICAgICAgICAgICAgICAgVGhlIExMVk0gQ29tcGlsZXIgSW5mcmFzdHJ1Y3R1cmUK
Ky8vCisvLyBUaGlzIGZpbGUgaXMgZHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGFuZCB0aGUg
VW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuCisvLyBTb3VyY2UgTGljZW5zZXMuIFNlZSBMSUNF
TlNFLlRYVCBmb3IgZGV0YWlscy4KKy8vCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworCisjaWYg
X19oYXNfaW5jbHVkZSg8ZmlsZXN5c3RlbT4pCisjaW5jbHVkZSA8ZmlsZXN5c3RlbT4KKyNlbHNl
CisKKy8qIEltcG9ydHMgYSBjb3B5IG9mIDxmaWxlc3lzdGVtPiBmcm9tIHIzNDM4Mzggb2YgdGhl
IGxpYmMrKyBwcm9qZWN0LiAqLworCisjaWZuZGVmIF9MSUJDUFBfRklMRVNZU1RFTQorI2RlZmlu
ZSBfTElCQ1BQX0ZJTEVTWVNURU0KKy8qCisgICAgZmlsZXN5c3RlbSBzeW5vcHNpcworCisgICAg
bmFtZXNwYWNlIHN0ZCB7IG5hbWVzcGFjZSBmaWxlc3lzdGVtIHsKKworICAgIGNsYXNzIHBhdGg7
CisKKyAgICB2b2lkIHN3YXAocGF0aCYgbGhzLCBwYXRoJiByaHMpIG5vZXhjZXB0OworICAgIHNp
emVfdCBoYXNoX3ZhbHVlKGNvbnN0IHBhdGgmIHApIG5vZXhjZXB0OworCisgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IHBhdGgmIGxocywgY29uc3QgcGF0aCYgcmhzKSBub2V4Y2VwdDsKKyAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgcGF0aCYgbGhzLCBjb25zdCBwYXRoJiByaHMpIG5vZXhjZXB0
OworICAgIGJvb2wgb3BlcmF0b3I8IChjb25zdCBwYXRoJiBsaHMsIGNvbnN0IHBhdGgmIHJocykg
bm9leGNlcHQ7CisgICAgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IHBhdGgmIGxocywgY29uc3QgcGF0
aCYgcmhzKSBub2V4Y2VwdDsKKyAgICBib29sIG9wZXJhdG9yPiAoY29uc3QgcGF0aCYgbGhzLCBj
b25zdCBwYXRoJiByaHMpIG5vZXhjZXB0OworICAgIGJvb2wgb3BlcmF0b3I+PShjb25zdCBwYXRo
JiBsaHMsIGNvbnN0IHBhdGgmIHJocykgbm9leGNlcHQ7CisKKyAgICBwYXRoIG9wZXJhdG9yLyAo
Y29uc3QgcGF0aCYgbGhzLCBjb25zdCBwYXRoJiByaHMpOworCisgICAgLy8gZnMucGF0aC5pbyBv
cGVyYXRvcnMgYXJlIGZyaWVuZHMgb2YgcGF0aC4KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQs
IGNsYXNzIHRyYWl0cz4KKyAgICBmcmllbmQgYmFzaWNfb3N0cmVhbTxjaGFyVCwgdHJhaXRzPiYK
KyAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhclQsIHRyYWl0cz4mIG9zLCBjb25zdCBw
YXRoJiBwKTsKKworICAgIHRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzPgorICAg
IGZyaWVuZCBiYXNpY19pc3RyZWFtPGNoYXJULCB0cmFpdHM+JgorICAgIG9wZXJhdG9yPj4oYmFz
aWNfaXN0cmVhbTxjaGFyVCwgdHJhaXRzPiYgaXMsIHBhdGgmIHApOworCisgICAgdGVtcGxhdGUg
PGNsYXNzIFNvdXJjZT4KKyAgICAgIHBhdGggdThwYXRoKGNvbnN0IFNvdXJjZSYgc291cmNlKTsK
KyAgICB0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KKyAgICAgIHBhdGggdThwYXRoKElu
cHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCk7CisKKyAgICBjbGFzcyBmaWxl
c3lzdGVtX2Vycm9yOworICAgIGNsYXNzIGRpcmVjdG9yeV9lbnRyeTsKKworICAgIGNsYXNzIGRp
cmVjdG9yeV9pdGVyYXRvcjsKKworICAgIC8vIGVuYWJsZSBkaXJlY3RvcnlfaXRlcmF0b3IgcmFu
Z2UtYmFzZWQgZm9yIHN0YXRlbWVudHMKKyAgICBkaXJlY3RvcnlfaXRlcmF0b3IgYmVnaW4oZGly
ZWN0b3J5X2l0ZXJhdG9yIGl0ZXIpIG5vZXhjZXB0OworICAgIGRpcmVjdG9yeV9pdGVyYXRvciBl
bmQoY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9yJikgbm9leGNlcHQ7CisKKyAgICBjbGFzcyByZWN1
cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yOworCisgICAgLy8gZW5hYmxlIHJlY3Vyc2l2ZV9kaXJl
Y3RvcnlfaXRlcmF0b3IgcmFuZ2UtYmFzZWQgZm9yIHN0YXRlbWVudHMKKyAgICByZWN1cnNpdmVf
ZGlyZWN0b3J5X2l0ZXJhdG9yIGJlZ2luKHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IgaXRl
cikgbm9leGNlcHQ7CisgICAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciBlbmQoY29uc3Qg
cmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYpIG5vZXhjZXB0OworCisgICAgY2xhc3MgZmls
ZV9zdGF0dXM7CisKKyAgICBzdHJ1Y3Qgc3BhY2VfaW5mbworICAgIHsKKyAgICAgIHVpbnRtYXhf
dCBjYXBhY2l0eTsKKyAgICAgIHVpbnRtYXhfdCBmcmVlOworICAgICAgdWludG1heF90IGF2YWls
YWJsZTsKKyAgICB9OworCisgICAgZW51bSBjbGFzcyBmaWxlX3R5cGU7CisgICAgZW51bSBjbGFz
cyBwZXJtczsKKyAgICBlbnVtIGNsYXNzIHBlcm1fb3B0aW9uczsKKyAgICBlbnVtIGNsYXNzIGNv
cHlfb3B0aW9uczsKKyAgICBlbnVtIGNsYXNzIGRpcmVjdG9yeV9vcHRpb25zOworCisgICAgdHlw
ZWRlZiBjaHJvbm86OnRpbWVfcG9pbnQ8dHJpdmlhbC1jbG9jaz4gIGZpbGVfdGltZV90eXBlOwor
CisgICAgLy8gb3BlcmF0aW9uYWwgZnVuY3Rpb25zCisKKyAgICBwYXRoIGFic29sdXRlKGNvbnN0
IHBhdGgmIHApOworICAgIHBhdGggYWJzb2x1dGUoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSAm
ZWMpOworCisgICAgcGF0aCBjYW5vbmljYWwoY29uc3QgcGF0aCYgcCk7CisgICAgcGF0aCBjYW5v
bmljYWwoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpOworCisgICAgdm9pZCBjb3B5KGNv
bnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvKTsKKyAgICB2b2lkIGNvcHkoY29uc3QgcGF0
aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8sIGVycm9yX2NvZGUmIGVjKTsKKyAgICB2b2lkIGNvcHko
Y29uc3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8sIGNvcHlfb3B0aW9ucyBvcHRpb25zKTsK
KyAgICB2b2lkIGNvcHkoY29uc3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8sIGNvcHlfb3B0
aW9ucyBvcHRpb25zLAorICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKTsKKworICAg
IGJvb2wgY29weV9maWxlKGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvKTsKKyAgICBi
b29sIGNvcHlfZmlsZShjb25zdCBwYXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0bywgZXJyb3JfY29k
ZSYgZWMpOworICAgIGJvb2wgY29weV9maWxlKGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgm
IHRvLCBjb3B5X29wdGlvbnMgb3B0aW9uKTsKKyAgICBib29sIGNvcHlfZmlsZShjb25zdCBwYXRo
JiBmcm9tLCBjb25zdCBwYXRoJiB0bywgY29weV9vcHRpb25zIG9wdGlvbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKTsKKworICAgIHZvaWQgY29weV9zeW1saW5r
KGNvbnN0IHBhdGgmIGV4aXN0aW5nX3N5bWxpbmssIGNvbnN0IHBhdGgmIG5ld19zeW1saW5rKTsK
KyAgICB2b2lkIGNvcHlfc3ltbGluayhjb25zdCBwYXRoJiBleGlzdGluZ19zeW1saW5rLCBjb25z
dCBwYXRoJiBuZXdfc3ltbGluaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9y
X2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIGJvb2wgY3JlYXRlX2RpcmVjdG9yaWVzKGNvbnN0
IHBhdGgmIHApOworICAgIGJvb2wgY3JlYXRlX2RpcmVjdG9yaWVzKGNvbnN0IHBhdGgmIHAsIGVy
cm9yX2NvZGUmIGVjKTsKKworICAgIGJvb2wgY3JlYXRlX2RpcmVjdG9yeShjb25zdCBwYXRoJiBw
KTsKKyAgICBib29sIGNyZWF0ZV9kaXJlY3RvcnkoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYg
ZWMpIG5vZXhjZXB0OworCisgICAgYm9vbCBjcmVhdGVfZGlyZWN0b3J5KGNvbnN0IHBhdGgmIHAs
IGNvbnN0IHBhdGgmIGF0dHJpYnV0ZXMpOworICAgIGJvb2wgY3JlYXRlX2RpcmVjdG9yeShjb25z
dCBwYXRoJiBwLCBjb25zdCBwYXRoJiBhdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIHZvaWQgY3JlYXRl
X2RpcmVjdG9yeV9zeW1saW5rKGNvbnN0IHBhdGgmIHRvLCBjb25zdCBwYXRoJiBuZXdfc3ltbGlu
ayk7CisgICAgdm9pZCBjcmVhdGVfZGlyZWN0b3J5X3N5bWxpbmsoY29uc3QgcGF0aCYgdG8sIGNv
bnN0IHBhdGgmIG5ld19zeW1saW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgdm9pZCBjcmVhdGVfaGFy
ZF9saW5rKGNvbnN0IHBhdGgmIHRvLCBjb25zdCBwYXRoJiBuZXdfaGFyZF9saW5rKTsKKyAgICB2
b2lkIGNyZWF0ZV9oYXJkX2xpbmsoY29uc3QgcGF0aCYgdG8sIGNvbnN0IHBhdGgmIG5ld19oYXJk
X2xpbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgZWMp
IG5vZXhjZXB0OworCisgICAgdm9pZCBjcmVhdGVfc3ltbGluayhjb25zdCBwYXRoJiB0bywgY29u
c3QgcGF0aCYgbmV3X3N5bWxpbmspOworICAgIHZvaWQgY3JlYXRlX3N5bWxpbmsoY29uc3QgcGF0
aCYgdG8sIGNvbnN0IHBhdGgmIG5ld19zeW1saW5rLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBwYXRoIGN1cnJlbnRfcGF0
aCgpOworICAgIHBhdGggY3VycmVudF9wYXRoKGVycm9yX2NvZGUmIGVjKTsKKyAgICB2b2lkIGN1
cnJlbnRfcGF0aChjb25zdCBwYXRoJiBwKTsKKyAgICB2b2lkIGN1cnJlbnRfcGF0aChjb25zdCBw
YXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29sIGV4aXN0cyhmaWxl
X3N0YXR1cyBzKSBub2V4Y2VwdDsKKyAgICBib29sIGV4aXN0cyhjb25zdCBwYXRoJiBwKTsKKyAg
ICBib29sIGV4aXN0cyhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisK
KyAgICBib29sIGVxdWl2YWxlbnQoY29uc3QgcGF0aCYgcDEsIGNvbnN0IHBhdGgmIHAyKTsKKyAg
ICBib29sIGVxdWl2YWxlbnQoY29uc3QgcGF0aCYgcDEsIGNvbnN0IHBhdGgmIHAyLCBlcnJvcl9j
b2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICB1aW50bWF4X3QgICAgZmlsZV9zaXplKGNvbnN0IHBh
dGgmIHApOworICAgIHVpbnRtYXhfdCAgICBmaWxlX3NpemUoY29uc3QgcGF0aCYgcCwgZXJyb3Jf
Y29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgdWludG1heF90ICAgIGhhcmRfbGlua19jb3VudChj
b25zdCBwYXRoJiBwKTsKKyAgICB1aW50bWF4X3QgICAgaGFyZF9saW5rX2NvdW50KGNvbnN0IHBh
dGgmIHAsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIGJvb2wgaXNfYmxvY2tfZmls
ZShmaWxlX3N0YXR1cyBzKSBub2V4Y2VwdDsKKyAgICBib29sIGlzX2Jsb2NrX2ZpbGUoY29uc3Qg
cGF0aCYgcCk7CisgICAgYm9vbCBpc19ibG9ja19maWxlKGNvbnN0IHBhdGgmIHAsIGVycm9yX2Nv
ZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIGJvb2wgaXNfY2hhcmFjdGVyX2ZpbGUoZmlsZV9zdGF0
dXMgcykgbm9leGNlcHQ7CisgICAgYm9vbCBpc19jaGFyYWN0ZXJfZmlsZShjb25zdCBwYXRoJiBw
KTsKKyAgICBib29sIGlzX2NoYXJhY3Rlcl9maWxlKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUm
IGVjKSBub2V4Y2VwdDsKKworICAgIGJvb2wgaXNfZGlyZWN0b3J5KGZpbGVfc3RhdHVzIHMpIG5v
ZXhjZXB0OworICAgIGJvb2wgaXNfZGlyZWN0b3J5KGNvbnN0IHBhdGgmIHApOworICAgIGJvb2wg
aXNfZGlyZWN0b3J5KGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKwor
ICAgIGJvb2wgaXNfZW1wdHkoY29uc3QgcGF0aCYgcCk7CisgICAgYm9vbCBpc19lbXB0eShjb25z
dCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29sIGlzX2ZpZm8o
ZmlsZV9zdGF0dXMgcykgbm9leGNlcHQ7CisgICAgYm9vbCBpc19maWZvKGNvbnN0IHBhdGgmIHAp
OworICAgIGJvb2wgaXNfZmlmbyhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNl
cHQ7CisKKyAgICBib29sIGlzX290aGVyKGZpbGVfc3RhdHVzIHMpIG5vZXhjZXB0OworICAgIGJv
b2wgaXNfb3RoZXIoY29uc3QgcGF0aCYgcCk7CisgICAgYm9vbCBpc19vdGhlcihjb25zdCBwYXRo
JiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29sIGlzX3JlZ3VsYXJfZmls
ZShmaWxlX3N0YXR1cyBzKSBub2V4Y2VwdDsKKyAgICBib29sIGlzX3JlZ3VsYXJfZmlsZShjb25z
dCBwYXRoJiBwKTsKKyAgICBib29sIGlzX3JlZ3VsYXJfZmlsZShjb25zdCBwYXRoJiBwLCBlcnJv
cl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29sIGlzX3NvY2tldChmaWxlX3N0YXR1cyBz
KSBub2V4Y2VwdDsKKyAgICBib29sIGlzX3NvY2tldChjb25zdCBwYXRoJiBwKTsKKyAgICBib29s
IGlzX3NvY2tldChjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAg
ICBib29sIGlzX3N5bWxpbmsoZmlsZV9zdGF0dXMgcykgbm9leGNlcHQ7CisgICAgYm9vbCBpc19z
eW1saW5rKGNvbnN0IHBhdGgmIHApOworICAgIGJvb2wgaXNfc3ltbGluayhjb25zdCBwYXRoJiBw
LCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBmaWxlX3RpbWVfdHlwZSAgbGFzdF93
cml0ZV90aW1lKGNvbnN0IHBhdGgmIHApOworICAgIGZpbGVfdGltZV90eXBlICBsYXN0X3dyaXRl
X3RpbWUoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworICAgIHZvaWQg
bGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgmIHAsIGZpbGVfdGltZV90eXBlIG5ld190aW1lKTsK
KyAgICB2b2lkIGxhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBwLCBmaWxlX3RpbWVfdHlwZSBu
ZXdfdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVj
KSBub2V4Y2VwdDsKKworICAgIHZvaWQgcGVybWlzc2lvbnMoY29uc3QgcGF0aCYgcCwgcGVybXMg
cHJtcywKKyAgICAgICAgICAgICAgICAgICAgIHBlcm1fb3B0aW9ucyBvcHRzPXBlcm1fb3B0aW9u
czo6cmVwbGFjZSk7CisgICAgdm9pZCBwZXJtaXNzaW9ucyhjb25zdCBwYXRoJiBwLCBwZXJtcyBw
cm1zLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisgICAgdm9pZCBwZXJtaXNzaW9ucyhjb25z
dCBwYXRoJiBwLCBwZXJtcyBwcm1zLCBwZXJtX29wdGlvbnMgb3B0cywKKyAgICAgICAgICAgICAg
ICAgICAgIGVycm9yX2NvZGUmIGVjKTsKKworICAgIHBhdGggcHJveGltYXRlKGNvbnN0IHBhdGgm
IHAsIGVycm9yX2NvZGUmIGVjKTsKKyAgICBwYXRoIHByb3hpbWF0ZShjb25zdCBwYXRoJiBwLCBj
b25zdCBwYXRoJiBiYXNlID0gY3VycmVudF9wYXRoKCkpOworICAgIHBhdGggcHJveGltYXRlKGNv
bnN0IHBhdGgmIHAsIGNvbnN0IHBhdGgmIGJhc2UsIGVycm9yX2NvZGUgJmVjKTsKKworICAgIHBh
dGggcmVhZF9zeW1saW5rKGNvbnN0IHBhdGgmIHApOworICAgIHBhdGggcmVhZF9zeW1saW5rKGNv
bnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKTsKKworICAgIHBhdGggcmVsYXRpdmUoY29uc3Qg
cGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpOworICAgIHBhdGggcmVsYXRpdmUoY29uc3QgcGF0aCYg
cCwgY29uc3QgcGF0aCYgYmFzZT1jdXJyZW50X3BhdGgoKSk7CisgICAgcGF0aCByZWxhdGl2ZShj
b25zdCBwYXRoJiBwLCBjb25zdCBwYXRoJiBiYXNlLCBlcnJvcl9jb2RlJiBlYyk7CisKKyAgICBi
b29sIHJlbW92ZShjb25zdCBwYXRoJiBwKTsKKyAgICBib29sIHJlbW92ZShjb25zdCBwYXRoJiBw
LCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICB1aW50bWF4X3QgICAgcmVtb3ZlX2Fs
bChjb25zdCBwYXRoJiBwKTsKKyAgICB1aW50bWF4X3QgICAgcmVtb3ZlX2FsbChjb25zdCBwYXRo
JiBwLCBlcnJvcl9jb2RlJiBlYyk7CisKKyAgICB2b2lkIHJlbmFtZShjb25zdCBwYXRoJiBmcm9t
LCBjb25zdCBwYXRoJiB0byk7CisgICAgdm9pZCByZW5hbWUoY29uc3QgcGF0aCYgZnJvbSwgY29u
c3QgcGF0aCYgdG8sIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIHZvaWQgcmVzaXpl
X2ZpbGUoY29uc3QgcGF0aCYgcCwgdWludG1heF90IHNpemUpOworICAgIHZvaWQgcmVzaXplX2Zp
bGUoY29uc3QgcGF0aCYgcCwgdWludG1heF90IHNpemUsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2Vw
dDsKKworICAgIHNwYWNlX2luZm8gICBzcGFjZShjb25zdCBwYXRoJiBwKTsKKyAgICBzcGFjZV9p
bmZvICAgc3BhY2UoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisg
ICAgZmlsZV9zdGF0dXMgIHN0YXR1cyhjb25zdCBwYXRoJiBwKTsKKyAgICBmaWxlX3N0YXR1cyAg
c3RhdHVzKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIGJv
b2wgc3RhdHVzX2tub3duKGZpbGVfc3RhdHVzIHMpIG5vZXhjZXB0OworCisgICAgZmlsZV9zdGF0
dXMgIHN5bWxpbmtfc3RhdHVzKGNvbnN0IHBhdGgmIHApOworICAgIGZpbGVfc3RhdHVzICBzeW1s
aW5rX3N0YXR1cyhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAg
ICBwYXRoIHRlbXBfZGlyZWN0b3J5X3BhdGgoKTsKKyAgICBwYXRoIHRlbXBfZGlyZWN0b3J5X3Bh
dGgoZXJyb3JfY29kZSYgZWMpOworCisgICAgcGF0aCB3ZWFrbHlfY2Fub25pY2FsKHBhdGggY29u
c3QmIHApOworICAgIHBhdGggd2Vha2x5X2Nhbm9uaWNhbChwYXRoIGNvbnN0JiBwLCBlcnJvcl9j
b2RlJiBlYyk7CisKKworfSB9ICAvLyBuYW1lc3BhY2VzIHN0ZDo6ZmlsZXN5c3RlbQorCisqLwor
CisjaW5jbHVkZSA8X19jb25maWc+CisjaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDxjc3Rk
bGliPgorI2luY2x1ZGUgPGNocm9ubz4KKyNpbmNsdWRlIDxpdGVyYXRvcj4KKyNpbmNsdWRlIDxp
b3Nmd2Q+CisjaW5jbHVkZSA8bG9jYWxlPgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxz
dGFjaz4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8c3lzdGVtX2Vycm9yPgorI2luY2x1
ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8aW9tYW5pcD4gLy8gZm9yIHF1b3RlZAorI2luY2x1ZGUg
PHN0cmluZ192aWV3PgorLyogI2luY2x1ZGUgPHZlcnNpb24+ICovCisKKyNpbmNsdWRlIDxfX2Rl
YnVnPgorCisjaWYgX0xJQkNQUF9TVERfVkVSID49IDE3CisjZGVmaW5lIF9MSUJDUFBfQkVHSU5f
TkFNRVNQQUNFX0ZJTEVTWVNURU0gXAorICBfTElCQ1BQX0JFR0lOX05BTUVTUEFDRV9TVEQgaW5s
aW5lIG5hbWVzcGFjZSBfX2ZzIHsgbmFtZXNwYWNlIGZpbGVzeXN0ZW0geworI2Vsc2UKKyNkZWZp
bmUgX0xJQkNQUF9CRUdJTl9OQU1FU1BBQ0VfRklMRVNZU1RFTSBcCisgIF9MSUJDUFBfQkVHSU5f
TkFNRVNQQUNFX1NURCBuYW1lc3BhY2UgX19mcyB7IG5hbWVzcGFjZSBmaWxlc3lzdGVtIHsKKyNl
bmRpZgorCisjZGVmaW5lIF9MSUJDUFBfRU5EX05BTUVTUEFDRV9GSUxFU1lTVEVNIFwKKyAgX0xJ
QkNQUF9FTkRfTkFNRVNQQUNFX1NURCB9IH0KKworI2RlZmluZSBfVlNURF9GUyBfVlNURDo6X19m
czo6ZmlsZXN5c3RlbQorCisjaWYgIWRlZmluZWQoX0xJQkNQUF9IQVNfTk9fUFJBR01BX1NZU1RF
TV9IRUFERVIpCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisjZW5kaWYKKworX0xJQkNQUF9Q
VVNIX01BQ1JPUworI2luY2x1ZGUgPF9fdW5kZWZfbWFjcm9zPgorCisjaWZuZGVmIF9MSUJDUFBf
Q1hYMDNfTEFORworCitfTElCQ1BQX0JFR0lOX05BTUVTUEFDRV9GSUxFU1lTVEVNCisKK3N0cnVj
dCBfRmlsZXN5c3RlbUNsb2NrIHsKKyNpZiAhZGVmaW5lZChfTElCQ1BQX0hBU19OT19JTlQxMjgp
CisgIHR5cGVkZWYgX19pbnQxMjhfdCByZXA7CisgIHR5cGVkZWYgbmFubyBwZXJpb2Q7CisjZWxz
ZQorICB0eXBlZGVmIGxvbmcgbG9uZyByZXA7CisgIHR5cGVkZWYgbmFubyBwZXJpb2Q7CisjZW5k
aWYKKworICB0eXBlZGVmIGNocm9ubzo6ZHVyYXRpb248cmVwLCBwZXJpb2Q+IGR1cmF0aW9uOwor
ICB0eXBlZGVmIGNocm9ubzo6dGltZV9wb2ludDxfRmlsZXN5c3RlbUNsb2NrPiB0aW1lX3BvaW50
OworCisgIHN0YXRpYyBfTElCQ1BQX0NPTlNURVhQUl9BRlRFUl9DWFgxMSBjb25zdCBib29sIGlz
X3N0ZWFkeSA9IGZhbHNlOworCisgIF9MSUJDUFBfRlVOQ19WSVMgc3RhdGljIHRpbWVfcG9pbnQg
bm93KCkgbm9leGNlcHQ7CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBzdGF0aWMg
dGltZV90IHRvX3RpbWVfdChjb25zdCB0aW1lX3BvaW50JiBfX3QpIG5vZXhjZXB0IHsKKyAgICB0
eXBlZGVmIGNocm9ubzo6ZHVyYXRpb248cmVwPiBfX3NlY3M7CisgICAgcmV0dXJuIHRpbWVfdCgK
KyAgICAgICAgY2hyb25vOjpkdXJhdGlvbl9jYXN0PF9fc2Vjcz4oX190LnRpbWVfc2luY2VfZXBv
Y2goKSkuY291bnQoKSk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHN0
YXRpYyB0aW1lX3BvaW50IGZyb21fdGltZV90KHRpbWVfdCBfX3QpIG5vZXhjZXB0IHsKKyAgICB0
eXBlZGVmIGNocm9ubzo6ZHVyYXRpb248cmVwPiBfX3NlY3M7CisgICAgcmV0dXJuIHRpbWVfcG9p
bnQoX19zZWNzKF9fdCkpOworICB9Cit9OworCit0eXBlZGVmIGNocm9ubzo6dGltZV9wb2ludDxf
RmlsZXN5c3RlbUNsb2NrPiBmaWxlX3RpbWVfdHlwZTsKKworc3RydWN0IF9MSUJDUFBfVFlQRV9W
SVMgc3BhY2VfaW5mbyB7CisgIHVpbnRtYXhfdCBjYXBhY2l0eTsKKyAgdWludG1heF90IGZyZWU7
CisgIHVpbnRtYXhfdCBhdmFpbGFibGU7Cit9OworCitlbnVtIGNsYXNzIF9MSUJDUFBfRU5VTV9W
SVMgZmlsZV90eXBlIDogc2lnbmVkIGNoYXIgeworICBub25lID0gMCwKKyAgbm90X2ZvdW5kID0g
LTEsCisgIHJlZ3VsYXIgPSAxLAorICBkaXJlY3RvcnkgPSAyLAorICBzeW1saW5rID0gMywKKyAg
YmxvY2sgPSA0LAorICBjaGFyYWN0ZXIgPSA1LAorICBmaWZvID0gNiwKKyAgc29ja2V0ID0gNywK
KyAgdW5rbm93biA9IDgKK307CisKK2VudW0gY2xhc3MgX0xJQkNQUF9FTlVNX1ZJUyBwZXJtcyA6
IHVuc2lnbmVkIHsKKyAgbm9uZSA9IDAsCisKKyAgb3duZXJfcmVhZCA9IDA0MDAsCisgIG93bmVy
X3dyaXRlID0gMDIwMCwKKyAgb3duZXJfZXhlYyA9IDAxMDAsCisgIG93bmVyX2FsbCA9IDA3MDAs
CisKKyAgZ3JvdXBfcmVhZCA9IDA0MCwKKyAgZ3JvdXBfd3JpdGUgPSAwMjAsCisgIGdyb3VwX2V4
ZWMgPSAwMTAsCisgIGdyb3VwX2FsbCA9IDA3MCwKKworICBvdGhlcnNfcmVhZCA9IDA0LAorICBv
dGhlcnNfd3JpdGUgPSAwMiwKKyAgb3RoZXJzX2V4ZWMgPSAwMSwKKyAgb3RoZXJzX2FsbCA9IDA3
LAorCisgIGFsbCA9IDA3NzcsCisKKyAgc2V0X3VpZCA9IDA0MDAwLAorICBzZXRfZ2lkID0gMDIw
MDAsCisgIHN0aWNreV9iaXQgPSAwMTAwMCwKKyAgbWFzayA9IDA3Nzc3LAorICB1bmtub3duID0g
MHhGRkZGLAorfTsKKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhw
ciBwZXJtcyBvcGVyYXRvciYocGVybXMgX0xIUywgcGVybXMgX1JIUykgeworICByZXR1cm4gc3Rh
dGljX2Nhc3Q8cGVybXM+KHN0YXRpY19jYXN0PHVuc2lnbmVkPihfTEhTKSAmCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KF9SSFMpKTsKK30KKworX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhwciBwZXJtcyBvcGVyYXRvcnwo
cGVybXMgX0xIUywgcGVybXMgX1JIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8cGVybXM+KHN0
YXRpY19jYXN0PHVuc2lnbmVkPihfTEhTKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KF9SSFMpKTsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQoraW5saW5lIGNvbnN0ZXhwciBwZXJtcyBvcGVyYXRvcl4ocGVybXMgX0xIUywgcGVybXMg
X1JIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8cGVybXM+KHN0YXRpY19jYXN0PHVuc2lnbmVk
PihfTEhTKSBeCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KF9SSFMpKTsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0
ZXhwciBwZXJtcyBvcGVyYXRvcn4ocGVybXMgX0xIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8
cGVybXM+KH5zdGF0aWNfY2FzdDx1bnNpZ25lZD4oX0xIUykpOworfQorCitfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZCitpbmxpbmUgcGVybXMmIG9wZXJhdG9yJj0ocGVybXMmIF9MSFMsIHBlcm1z
IF9SSFMpIHsgcmV0dXJuIF9MSFMgPSBfTEhTICYgX1JIUzsgfQorCitfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZCitpbmxpbmUgcGVybXMmIG9wZXJhdG9yfD0ocGVybXMmIF9MSFMsIHBlcm1zIF9S
SFMpIHsgcmV0dXJuIF9MSFMgPSBfTEhTIHwgX1JIUzsgfQorCitfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZCitpbmxpbmUgcGVybXMmIG9wZXJhdG9yXj0ocGVybXMmIF9MSFMsIHBlcm1zIF9SSFMp
IHsgcmV0dXJuIF9MSFMgPSBfTEhTIF4gX1JIUzsgfQorCitlbnVtIGNsYXNzIF9MSUJDUFBfRU5V
TV9WSVMgcGVybV9vcHRpb25zIDogdW5zaWduZWQgY2hhciB7CisgIHJlcGxhY2UgPSAxLAorICBh
ZGQgPSAyLAorICByZW1vdmUgPSA0LAorICBub2ZvbGxvdyA9IDgKK307CisKK19MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIgcGVybV9vcHRpb25zIG9wZXJhdG9yJihw
ZXJtX29wdGlvbnMgX0xIUywgcGVybV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19j
YXN0PHBlcm1fb3B0aW9ucz4oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KF9MSFMpICYKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KF9SSFMpKTsK
K30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhwciBwZXJtX29w
dGlvbnMgb3BlcmF0b3J8KHBlcm1fb3B0aW9ucyBfTEhTLCBwZXJtX29wdGlvbnMgX1JIUykgewor
ICByZXR1cm4gc3RhdGljX2Nhc3Q8cGVybV9vcHRpb25zPihzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
X0xIUykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oX1JIUykpOworfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUg
Y29uc3RleHByIHBlcm1fb3B0aW9ucyBvcGVyYXRvcl4ocGVybV9vcHRpb25zIF9MSFMsIHBlcm1f
b3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxwZXJtX29wdGlvbnM+KHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihfTEhTKSBeCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihfUkhTKSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIgcGVybV9vcHRpb25zIG9wZXJhdG9yfihwZXJtX29w
dGlvbnMgX0xIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8cGVybV9vcHRpb25zPih+c3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KF9MSFMpKTsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQor
aW5saW5lIHBlcm1fb3B0aW9ucyYgb3BlcmF0b3ImPShwZXJtX29wdGlvbnMmIF9MSFMsIHBlcm1f
b3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBfTEhTID0gX0xIUyAmIF9SSFM7Cit9CisKK19MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBwZXJtX29wdGlvbnMmIG9wZXJhdG9yfD0ocGVy
bV9vcHRpb25zJiBfTEhTLCBwZXJtX29wdGlvbnMgX1JIUykgeworICByZXR1cm4gX0xIUyA9IF9M
SFMgfCBfUkhTOworfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgcGVybV9v
cHRpb25zJiBvcGVyYXRvcl49KHBlcm1fb3B0aW9ucyYgX0xIUywgcGVybV9vcHRpb25zIF9SSFMp
IHsKKyAgcmV0dXJuIF9MSFMgPSBfTEhTIF4gX1JIUzsKK30KKworZW51bSBjbGFzcyBfTElCQ1BQ
X0VOVU1fVklTIGNvcHlfb3B0aW9ucyA6IHVuc2lnbmVkIHNob3J0IHsKKyAgbm9uZSA9IDAsCisg
IHNraXBfZXhpc3RpbmcgPSAxLAorICBvdmVyd3JpdGVfZXhpc3RpbmcgPSAyLAorICB1cGRhdGVf
ZXhpc3RpbmcgPSA0LAorICByZWN1cnNpdmUgPSA4LAorICBjb3B5X3N5bWxpbmtzID0gMTYsCisg
IHNraXBfc3ltbGlua3MgPSAzMiwKKyAgZGlyZWN0b3JpZXNfb25seSA9IDY0LAorICBjcmVhdGVf
c3ltbGlua3MgPSAxMjgsCisgIGNyZWF0ZV9oYXJkX2xpbmtzID0gMjU2LAorICBfX2luX3JlY3Vy
c2l2ZV9jb3B5ID0gNTEyLAorfTsKKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5l
IGNvbnN0ZXhwciBjb3B5X29wdGlvbnMgb3BlcmF0b3ImKGNvcHlfb3B0aW9ucyBfTEhTLCBjb3B5
X29wdGlvbnMgX1JIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29weV9vcHRpb25zPihzdGF0
aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX0xIUykgJgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX1JIUykpOworfQorCitfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgY29uc3RleHByIGNvcHlfb3B0aW9ucyBvcGVy
YXRvcnwoY29weV9vcHRpb25zIF9MSFMsIGNvcHlfb3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBz
dGF0aWNfY2FzdDxjb3B5X29wdGlvbnM+KHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfTEhT
KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2ln
bmVkIHNob3J0PihfUkhTKSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGlu
ZSBjb25zdGV4cHIgY29weV9vcHRpb25zIG9wZXJhdG9yXihjb3B5X29wdGlvbnMgX0xIUywgY29w
eV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PGNvcHlfb3B0aW9ucz4oc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9MSFMpIF4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9SSFMpKTsKK30KKworX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhwciBjb3B5X29wdGlvbnMgb3Bl
cmF0b3J+KGNvcHlfb3B0aW9ucyBfTEhTKSB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxjb3B5X29w
dGlvbnM+KH5zdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX0xIUykpOworfQorCitfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgY29weV9vcHRpb25zJiBvcGVyYXRvciY9KGNvcHlf
b3B0aW9ucyYgX0xIUywgY29weV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIF9MSFMgPSBfTEhT
ICYgX1JIUzsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvcHlfb3B0
aW9ucyYgb3BlcmF0b3J8PShjb3B5X29wdGlvbnMmIF9MSFMsIGNvcHlfb3B0aW9ucyBfUkhTKSB7
CisgIHJldHVybiBfTEhTID0gX0xIUyB8IF9SSFM7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKK2lubGluZSBjb3B5X29wdGlvbnMmIG9wZXJhdG9yXj0oY29weV9vcHRpb25zJiBfTEhT
LCBjb3B5X29wdGlvbnMgX1JIUykgeworICByZXR1cm4gX0xIUyA9IF9MSFMgXiBfUkhTOworfQor
CitlbnVtIGNsYXNzIF9MSUJDUFBfRU5VTV9WSVMgZGlyZWN0b3J5X29wdGlvbnMgOiB1bnNpZ25l
ZCBjaGFyIHsKKyAgbm9uZSA9IDAsCisgIGZvbGxvd19kaXJlY3Rvcnlfc3ltbGluayA9IDEsCisg
IHNraXBfcGVybWlzc2lvbl9kZW5pZWQgPSAyCit9OworCitfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZCitpbmxpbmUgY29uc3RleHByIGRpcmVjdG9yeV9vcHRpb25zIG9wZXJhdG9yJihkaXJlY3Rv
cnlfb3B0aW9ucyBfTEhTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGlyZWN0b3J5X29wdGlvbnMgX1JIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8ZGly
ZWN0b3J5X29wdGlvbnM+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9MSFMpICYKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyPihfUkhTKSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25z
dGV4cHIgZGlyZWN0b3J5X29wdGlvbnMgb3BlcmF0b3J8KGRpcmVjdG9yeV9vcHRpb25zIF9MSFMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnlf
b3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxkaXJlY3Rvcnlfb3B0aW9ucz4o
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX0xIUykgfAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9SSFMpKTsKK30K
KworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhwciBkaXJlY3Rvcnlf
b3B0aW9ucyBvcGVyYXRvcl4oZGlyZWN0b3J5X29wdGlvbnMgX0xIUywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeV9vcHRpb25zIF9SSFMpIHsK
KyAgcmV0dXJuIHN0YXRpY19jYXN0PGRpcmVjdG9yeV9vcHRpb25zPihzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyPihfTEhTKSBeCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX1JIUykpOworfQorCitfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZCitpbmxpbmUgY29uc3RleHByIGRpcmVjdG9yeV9vcHRpb25zIG9wZXJhdG9y
fihkaXJlY3Rvcnlfb3B0aW9ucyBfTEhTKSB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxkaXJlY3Rv
cnlfb3B0aW9ucz4ofnN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9MSFMpKTsKK30KKworX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGRpcmVjdG9yeV9vcHRpb25zJiBvcGVyYXRv
ciY9KGRpcmVjdG9yeV9vcHRpb25zJiBfTEhTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRpcmVjdG9yeV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIF9MSFMgPSBfTEhT
ICYgX1JIUzsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGRpcmVjdG9y
eV9vcHRpb25zJiBvcGVyYXRvcnw9KGRpcmVjdG9yeV9vcHRpb25zJiBfTEhTLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeV9vcHRpb25zIF9SSFMpIHsKKyAg
cmV0dXJuIF9MSFMgPSBfTEhTIHwgX1JIUzsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQoraW5saW5lIGRpcmVjdG9yeV9vcHRpb25zJiBvcGVyYXRvcl49KGRpcmVjdG9yeV9vcHRpb25z
JiBfTEhTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeV9v
cHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIF9MSFMgPSBfTEhTIF4gX1JIUzsKK30KKworY2xhc3Mg
X0xJQkNQUF9UWVBFX1ZJUyBmaWxlX3N0YXR1cyB7CitwdWJsaWM6CisgIC8vIGNvbnN0cnVjdG9y
cworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVfc3RhdHVzKCkgbm9leGNlcHQg
OiBmaWxlX3N0YXR1cyhmaWxlX3R5cGU6Om5vbmUpIHt9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKKyAgZXhwbGljaXQgZmlsZV9zdGF0dXMoZmlsZV90eXBlIF9fZnQsIHBlcm1zIF9fcHJt
cyA9IHBlcm1zOjp1bmtub3duKSBub2V4Y2VwdAorICAgICAgOiBfX2Z0XyhfX2Z0KSwKKyAgICAg
ICAgX19wcm1zXyhfX3BybXMpIHt9CisKKyAgZmlsZV9zdGF0dXMoY29uc3QgZmlsZV9zdGF0dXMm
KSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgIGZpbGVfc3RhdHVzKGZpbGVfc3RhdHVzJiYpIG5vZXhj
ZXB0ID0gZGVmYXVsdDsKKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIH5maWxlX3N0
YXR1cygpIHt9CisKKyAgZmlsZV9zdGF0dXMmIG9wZXJhdG9yPShjb25zdCBmaWxlX3N0YXR1cyYp
IG5vZXhjZXB0ID0gZGVmYXVsdDsKKyAgZmlsZV9zdGF0dXMmIG9wZXJhdG9yPShmaWxlX3N0YXR1
cyYmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisKKyAgLy8gb2JzZXJ2ZXJzCisgIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV90eXBlIHR5cGUoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVy
biBfX2Z0XzsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGVybXMgcGVybWlz
c2lvbnMoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfX3BybXNfOyB9CisKKyAgLy8gbW9kaWZp
ZXJzCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdm9pZCB0eXBlKGZpbGVfdHlwZSBf
X2Z0KSBub2V4Y2VwdCB7IF9fZnRfID0gX19mdDsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKKyAgdm9pZCBwZXJtaXNzaW9ucyhwZXJtcyBfX3ApIG5vZXhjZXB0IHsgX19wcm1zXyA9
IF9fcDsgfQorCitwcml2YXRlOgorICBmaWxlX3R5cGUgX19mdF87CisgIHBlcm1zIF9fcHJtc187
Cit9OworCitjbGFzcyBfTElCQ1BQX1RZUEVfVklTIGRpcmVjdG9yeV9lbnRyeTsKKwordGVtcGxh
dGUgPGNsYXNzIF9UcD4KK3N0cnVjdCBfX2Nhbl9jb252ZXJ0X2NoYXIgeworICBzdGF0aWMgY29u
c3QgYm9vbCB2YWx1ZSA9IGZhbHNlOworfTsKK3RlbXBsYXRlIDxjbGFzcyBfVHA+CitzdHJ1Y3Qg
X19jYW5fY29udmVydF9jaGFyPGNvbnN0IF9UcD4gOiBwdWJsaWMgX19jYW5fY29udmVydF9jaGFy
PF9UcD4ge307Cit0ZW1wbGF0ZSA8Pgorc3RydWN0IF9fY2FuX2NvbnZlcnRfY2hhcjxjaGFyPiB7
CisgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsKKyAgdXNpbmcgX19jaGFyX3R5cGUg
PSBjaGFyOworfTsKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgX19jYW5fY29udmVydF9jaGFyPHdjaGFy
X3Q+IHsKKyAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOworICB1c2luZyBfX2NoYXJf
dHlwZSA9IHdjaGFyX3Q7Cit9OwordGVtcGxhdGUgPD4KK3N0cnVjdCBfX2Nhbl9jb252ZXJ0X2No
YXI8Y2hhcjE2X3Q+IHsKKyAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOworICB1c2lu
ZyBfX2NoYXJfdHlwZSA9IGNoYXIxNl90OworfTsKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgX19jYW5f
Y29udmVydF9jaGFyPGNoYXIzMl90PiB7CisgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1
ZTsKKyAgdXNpbmcgX19jaGFyX3R5cGUgPSBjaGFyMzJfdDsKK307CisKK3RlbXBsYXRlIDxjbGFz
cyBfRUNoYXJUPgordHlwZW5hbWUgZW5hYmxlX2lmPF9fY2FuX2NvbnZlcnRfY2hhcjxfRUNoYXJU
Pjo6dmFsdWUsIGJvb2w+Ojp0eXBlCitfX2lzX3NlcGFyYXRvcihfRUNoYXJUIF9fZSkgeworICBy
ZXR1cm4gX19lID09IF9FQ2hhclQoJy8nKTsKK30KKworc3RydWN0IF9OdWxsU2VudGluYWwge307
CisKK3RlbXBsYXRlIDxjbGFzcyBfVHA+Cit1c2luZyBfVm9pZCA9IHZvaWQ7CisKK3RlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzID0gdm9pZD4KK3N0cnVjdCBfX2lzX3BhdGhhYmxlX3N0cmluZyA6
IHB1YmxpYyBmYWxzZV90eXBlIHt9OworCit0ZW1wbGF0ZSA8Y2xhc3MgX0VDaGFyVCwgY2xhc3Mg
X1RyYWl0cywgY2xhc3MgX0FsbG9jPgorc3RydWN0IF9faXNfcGF0aGFibGVfc3RyaW5nPAorICAg
IGJhc2ljX3N0cmluZzxfRUNoYXJULCBfVHJhaXRzLCBfQWxsb2M+LAorICAgIF9Wb2lkPHR5cGVu
YW1lIF9fY2FuX2NvbnZlcnRfY2hhcjxfRUNoYXJUPjo6X19jaGFyX3R5cGU+ID4KKyAgICA6IHB1
YmxpYyBfX2Nhbl9jb252ZXJ0X2NoYXI8X0VDaGFyVD4geworICB1c2luZyBfU3RyID0gYmFzaWNf
c3RyaW5nPF9FQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz47CisgIHVzaW5nIF9CYXNlID0gX19jYW5f
Y29udmVydF9jaGFyPF9FQ2hhclQ+OworICBzdGF0aWMgX0VDaGFyVCBjb25zdCogX19yYW5nZV9i
ZWdpbihfU3RyIGNvbnN0JiBfX3MpIHsgcmV0dXJuIF9fcy5kYXRhKCk7IH0KKyAgc3RhdGljIF9F
Q2hhclQgY29uc3QqIF9fcmFuZ2VfZW5kKF9TdHIgY29uc3QmIF9fcykgeworICAgIHJldHVybiBf
X3MuZGF0YSgpICsgX19zLmxlbmd0aCgpOworICB9CisgIHN0YXRpYyBfRUNoYXJUIF9fZmlyc3Rf
b3JfbnVsbChfU3RyIGNvbnN0JiBfX3MpIHsKKyAgICByZXR1cm4gX19zLmVtcHR5KCkgPyBfRUNo
YXJUe30gOiBfX3NbMF07CisgIH0KK307CisKK3RlbXBsYXRlIDxjbGFzcyBfRUNoYXJULCBjbGFz
cyBfVHJhaXRzPgorc3RydWN0IF9faXNfcGF0aGFibGVfc3RyaW5nPAorICAgIGJhc2ljX3N0cmlu
Z192aWV3PF9FQ2hhclQsIF9UcmFpdHM+LAorICAgIF9Wb2lkPHR5cGVuYW1lIF9fY2FuX2NvbnZl
cnRfY2hhcjxfRUNoYXJUPjo6X19jaGFyX3R5cGU+ID4KKyAgICA6IHB1YmxpYyBfX2Nhbl9jb252
ZXJ0X2NoYXI8X0VDaGFyVD4geworICB1c2luZyBfU3RyID0gYmFzaWNfc3RyaW5nX3ZpZXc8X0VD
aGFyVCwgX1RyYWl0cz47CisgIHVzaW5nIF9CYXNlID0gX19jYW5fY29udmVydF9jaGFyPF9FQ2hh
clQ+OworICBzdGF0aWMgX0VDaGFyVCBjb25zdCogX19yYW5nZV9iZWdpbihfU3RyIGNvbnN0JiBf
X3MpIHsgcmV0dXJuIF9fcy5kYXRhKCk7IH0KKyAgc3RhdGljIF9FQ2hhclQgY29uc3QqIF9fcmFu
Z2VfZW5kKF9TdHIgY29uc3QmIF9fcykgeworICAgIHJldHVybiBfX3MuZGF0YSgpICsgX19zLmxl
bmd0aCgpOworICB9CisgIHN0YXRpYyBfRUNoYXJUIF9fZmlyc3Rfb3JfbnVsbChfU3RyIGNvbnN0
JiBfX3MpIHsKKyAgICByZXR1cm4gX19zLmVtcHR5KCkgPyBfRUNoYXJUe30gOiBfX3NbMF07Cisg
IH0KK307CisKK3RlbXBsYXRlIDxjbGFzcyBfU291cmNlLCBjbGFzcyBfRFMgPSB0eXBlbmFtZSBk
ZWNheTxfU291cmNlPjo6dHlwZSwKKyAgICAgICAgICBjbGFzcyBfVW5xdWFsUHRyVHlwZSA9Cisg
ICAgICAgICAgICAgIHR5cGVuYW1lIHJlbW92ZV9jb25zdDx0eXBlbmFtZSByZW1vdmVfcG9pbnRl
cjxfRFM+Ojp0eXBlPjo6dHlwZSwKKyAgICAgICAgICBib29sIF9Jc0NoYXJQdHIgPSBpc19wb2lu
dGVyPF9EUz46OnZhbHVlJiYKKyAgICAgICAgICAgICAgX19jYW5fY29udmVydF9jaGFyPF9VbnF1
YWxQdHJUeXBlPjo6dmFsdWU+CitzdHJ1Y3QgX19pc19wYXRoYWJsZV9jaGFyX2FycmF5IDogZmFs
c2VfdHlwZSB7fTsKKwordGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2UsIGNsYXNzIF9FQ2hhclQsIGNs
YXNzIF9VUHRyPgorc3RydWN0IF9faXNfcGF0aGFibGVfY2hhcl9hcnJheTxfU291cmNlLCBfRUNo
YXJUKiwgX1VQdHIsIHRydWU+CisgICAgOiBfX2Nhbl9jb252ZXJ0X2NoYXI8dHlwZW5hbWUgcmVt
b3ZlX2NvbnN0PF9FQ2hhclQ+Ojp0eXBlPiB7CisgIHVzaW5nIF9CYXNlID0gX19jYW5fY29udmVy
dF9jaGFyPHR5cGVuYW1lIHJlbW92ZV9jb25zdDxfRUNoYXJUPjo6dHlwZT47CisKKyAgc3RhdGlj
IF9FQ2hhclQgY29uc3QqIF9fcmFuZ2VfYmVnaW4oY29uc3QgX0VDaGFyVCogX19iKSB7IHJldHVy
biBfX2I7IH0KKyAgc3RhdGljIF9FQ2hhclQgY29uc3QqIF9fcmFuZ2VfZW5kKGNvbnN0IF9FQ2hh
clQqIF9fYikgeworICAgIHVzaW5nIF9JdGVyID0gY29uc3QgX0VDaGFyVCo7CisgICAgY29uc3Qg
X0VDaGFyVCBfX3NlbnRpbmFsID0gX0VDaGFyVHt9OworICAgIF9JdGVyIF9fZSA9IF9fYjsKKyAg
ICBmb3IgKDsgKl9fZSAhPSBfX3NlbnRpbmFsOyArK19fZSkKKyAgICAgIDsKKyAgICByZXR1cm4g
X19lOworICB9CisKKyAgc3RhdGljIF9FQ2hhclQgX19maXJzdF9vcl9udWxsKGNvbnN0IF9FQ2hh
clQqIF9fYikgeyByZXR1cm4gKl9fYjsgfQorfTsKKwordGVtcGxhdGUgPGNsYXNzIF9JdGVyLCBi
b29sIF9Jc0l0ID0gX19pc19pbnB1dF9pdGVyYXRvcjxfSXRlcj46OnZhbHVlLAorICAgICAgICAg
IGNsYXNzID0gdm9pZD4KK3N0cnVjdCBfX2lzX3BhdGhhYmxlX2l0ZXIgOiBmYWxzZV90eXBlIHt9
OworCit0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CitzdHJ1Y3QgX19pc19wYXRoYWJsZV9pdGVyPAor
ICAgIF9JdGVyLCB0cnVlLAorICAgIF9Wb2lkPHR5cGVuYW1lIF9fY2FuX2NvbnZlcnRfY2hhcjwK
KyAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZT46Ol9f
Y2hhcl90eXBlPiA+CisgICAgOiBfX2Nhbl9jb252ZXJ0X2NoYXI8dHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZT4geworICB1c2luZyBfRUNoYXJUID0gdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZTsKKyAgdXNpbmcgX0Jhc2UgPSBfX2Nh
bl9jb252ZXJ0X2NoYXI8X0VDaGFyVD47CisKKyAgc3RhdGljIF9JdGVyIF9fcmFuZ2VfYmVnaW4o
X0l0ZXIgX19iKSB7IHJldHVybiBfX2I7IH0KKyAgc3RhdGljIF9OdWxsU2VudGluYWwgX19yYW5n
ZV9lbmQoX0l0ZXIpIHsgcmV0dXJuIF9OdWxsU2VudGluYWx7fTsgfQorCisgIHN0YXRpYyBfRUNo
YXJUIF9fZmlyc3Rfb3JfbnVsbChfSXRlciBfX2IpIHsgcmV0dXJuICpfX2I7IH0KK307CisKK3Rl
bXBsYXRlIDxjbGFzcyBfVHAsIGJvb2wgX0lzU3RyaW5nVCA9IF9faXNfcGF0aGFibGVfc3RyaW5n
PF9UcD46OnZhbHVlLAorICAgICAgICAgIGJvb2wgX0lzQ2hhckl0ZXJUID0gX19pc19wYXRoYWJs
ZV9jaGFyX2FycmF5PF9UcD46OnZhbHVlLAorICAgICAgICAgIGJvb2wgX0lzSXRlclQgPSAhX0lz
Q2hhckl0ZXJUICYmIF9faXNfcGF0aGFibGVfaXRlcjxfVHA+Ojp2YWx1ZT4KK3N0cnVjdCBfX2lz
X3BhdGhhYmxlIDogZmFsc2VfdHlwZSB7CisgIHN0YXRpY19hc3NlcnQoIV9Jc1N0cmluZ1QgJiYg
IV9Jc0NoYXJJdGVyVCAmJiAhX0lzSXRlclQsICJNdXN0IGFsbCBiZSBmYWxzZSIpOworfTsKKwor
dGVtcGxhdGUgPGNsYXNzIF9UcD4KK3N0cnVjdCBfX2lzX3BhdGhhYmxlPF9UcCwgdHJ1ZSwgZmFs
c2UsIGZhbHNlPiA6IF9faXNfcGF0aGFibGVfc3RyaW5nPF9UcD4ge307CisKK3RlbXBsYXRlIDxj
bGFzcyBfVHA+CitzdHJ1Y3QgX19pc19wYXRoYWJsZTxfVHAsIGZhbHNlLCB0cnVlLCBmYWxzZT4g
OiBfX2lzX3BhdGhhYmxlX2NoYXJfYXJyYXk8X1RwPiB7Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPgorc3RydWN0IF9faXNfcGF0aGFibGU8X1RwLCBmYWxzZSwgZmFsc2UsIHRydWU+IDogX19p
c19wYXRoYWJsZV9pdGVyPF9UcD4ge307CisKK3RlbXBsYXRlIDxjbGFzcyBfRUNoYXJUPgorc3Ry
dWN0IF9QYXRoQ1ZUIHsKKyAgc3RhdGljX2Fzc2VydChfX2Nhbl9jb252ZXJ0X2NoYXI8X0VDaGFy
VD46OnZhbHVlLAorICAgICAgICAgICAgICAgICJDaGFyIHR5cGUgbm90IGNvbnZlcnRpYmxlIik7
CisKKyAgdHlwZWRlZiBfX25hcnJvd190b191dGY4PHNpemVvZihfRUNoYXJUKSAqIF9fQ0hBUl9C
SVRfXz4gX05hcnJvd2VyOworCisgIHN0YXRpYyB2b2lkIF9fYXBwZW5kX3JhbmdlKHN0cmluZyYg
X19kZXN0LCBfRUNoYXJUIGNvbnN0KiBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9FQ2hhclQgY29uc3QqIF9fZSkgeworICAgIF9OYXJyb3dlcigpKGJhY2tfaW5zZXJ0ZXIoX19k
ZXN0KSwgX19iLCBfX2UpOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgorICBzdGF0
aWMgdm9pZCBfX2FwcGVuZF9yYW5nZShzdHJpbmcmIF9fZGVzdCwgX0l0ZXIgX19iLCBfSXRlciBf
X2UpIHsKKyAgICBzdGF0aWNfYXNzZXJ0KCFpc19zYW1lPF9JdGVyLCBfRUNoYXJUKj46OnZhbHVl
LCAiQ2FsbCBjb25zdCBvdmVybG9hZCIpOworICAgIGlmIChfX2IgPT0gX19lKQorICAgICAgcmV0
dXJuOworICAgIGJhc2ljX3N0cmluZzxfRUNoYXJUPiBfX3RtcChfX2IsIF9fZSk7CisgICAgX05h
cnJvd2VyKCkoYmFja19pbnNlcnRlcihfX2Rlc3QpLCBfX3RtcC5kYXRhKCksCisgICAgICAgICAg
ICAgICAgX190bXAuZGF0YSgpICsgX190bXAubGVuZ3RoKCkpOworICB9CisKKyAgdGVtcGxhdGUg
PGNsYXNzIF9JdGVyPgorICBzdGF0aWMgdm9pZCBfX2FwcGVuZF9yYW5nZShzdHJpbmcmIF9fZGVz
dCwgX0l0ZXIgX19iLCBfTnVsbFNlbnRpbmFsKSB7CisgICAgc3RhdGljX2Fzc2VydCghaXNfc2Ft
ZTxfSXRlciwgX0VDaGFyVCo+Ojp2YWx1ZSwgIkNhbGwgY29uc3Qgb3ZlcmxvYWQiKTsKKyAgICBj
b25zdCBfRUNoYXJUIF9fc2VudGluYWwgPSBfRUNoYXJUe307CisgICAgaWYgKCpfX2IgPT0gX19z
ZW50aW5hbCkKKyAgICAgIHJldHVybjsKKyAgICBiYXNpY19zdHJpbmc8X0VDaGFyVD4gX190bXA7
CisgICAgZm9yICg7ICpfX2IgIT0gX19zZW50aW5hbDsgKytfX2IpCisgICAgICBfX3RtcC5wdXNo
X2JhY2soKl9fYik7CisgICAgX05hcnJvd2VyKCkoYmFja19pbnNlcnRlcihfX2Rlc3QpLCBfX3Rt
cC5kYXRhKCksCisgICAgICAgICAgICAgICAgX190bXAuZGF0YSgpICsgX190bXAubGVuZ3RoKCkp
OworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2U+CisgIHN0YXRpYyB2b2lkIF9fYXBw
ZW5kX3NvdXJjZShzdHJpbmcmIF9fZGVzdCwgX1NvdXJjZSBjb25zdCYgX19zKSB7CisgICAgdXNp
bmcgX1RyYWl0cyA9IF9faXNfcGF0aGFibGU8X1NvdXJjZT47CisgICAgX19hcHBlbmRfcmFuZ2Uo
X19kZXN0LCBfVHJhaXRzOjpfX3JhbmdlX2JlZ2luKF9fcyksCisgICAgICAgICAgICAgICAgICAg
X1RyYWl0czo6X19yYW5nZV9lbmQoX19zKSk7CisgIH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1
Y3QgX1BhdGhDVlQ8Y2hhcj4geworCisgIHRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KKyAgc3RhdGlj
IHR5cGVuYW1lIGVuYWJsZV9pZjxfX2lzX2V4YWN0bHlfaW5wdXRfaXRlcmF0b3I8X0l0ZXI+Ojp2
YWx1ZT46OnR5cGUKKyAgX19hcHBlbmRfcmFuZ2Uoc3RyaW5nJiBfX2Rlc3QsIF9JdGVyIF9fYiwg
X0l0ZXIgX19lKSB7CisgICAgZm9yICg7IF9fYiAhPSBfX2U7ICsrX19iKQorICAgICAgX19kZXN0
LnB1c2hfYmFjaygqX19iKTsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KKyAgc3Rh
dGljIHR5cGVuYW1lIGVuYWJsZV9pZjxfX2lzX2ZvcndhcmRfaXRlcmF0b3I8X0l0ZXI+Ojp2YWx1
ZT46OnR5cGUKKyAgX19hcHBlbmRfcmFuZ2Uoc3RyaW5nJiBfX2Rlc3QsIF9JdGVyIF9fYiwgX0l0
ZXIgX19lKSB7CisgICAgX19kZXN0Ll9fYXBwZW5kX2ZvcndhcmRfdW5zYWZlKF9fYiwgX19lKTsK
KyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KKyAgc3RhdGljIHZvaWQgX19hcHBlbmRf
cmFuZ2Uoc3RyaW5nJiBfX2Rlc3QsIF9JdGVyIF9fYiwgX051bGxTZW50aW5hbCkgeworICAgIGNv
bnN0IGNoYXIgX19zZW50aW5hbCA9IGNoYXJ7fTsKKyAgICBmb3IgKDsgKl9fYiAhPSBfX3NlbnRp
bmFsOyArK19fYikKKyAgICAgIF9fZGVzdC5wdXNoX2JhY2soKl9fYik7CisgIH0KKworICB0ZW1w
bGF0ZSA8Y2xhc3MgX1NvdXJjZT4KKyAgc3RhdGljIHZvaWQgX19hcHBlbmRfc291cmNlKHN0cmlu
ZyYgX19kZXN0LCBfU291cmNlIGNvbnN0JiBfX3MpIHsKKyAgICB1c2luZyBfVHJhaXRzID0gX19p
c19wYXRoYWJsZTxfU291cmNlPjsKKyAgICBfX2FwcGVuZF9yYW5nZShfX2Rlc3QsIF9UcmFpdHM6
Ol9fcmFuZ2VfYmVnaW4oX19zKSwKKyAgICAgICAgICAgICAgICAgICBfVHJhaXRzOjpfX3Jhbmdl
X2VuZChfX3MpKTsKKyAgfQorfTsKKworY2xhc3MgX0xJQkNQUF9UWVBFX1ZJUyBwYXRoIHsKKyAg
dGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2VPckl0ZXIsIGNsYXNzIF9UcCA9IHBhdGgmPgorICB1c2lu
ZyBfRW5hYmxlSWZQYXRoYWJsZSA9CisgICAgICB0eXBlbmFtZSBlbmFibGVfaWY8X19pc19wYXRo
YWJsZTxfU291cmNlT3JJdGVyPjo6dmFsdWUsIF9UcD46OnR5cGU7CisKKyAgdGVtcGxhdGUgPGNs
YXNzIF9UcD4KKyAgdXNpbmcgX1NvdXJjZUNoYXIgPSB0eXBlbmFtZSBfX2lzX3BhdGhhYmxlPF9U
cD46Ol9fY2hhcl90eXBlOworCisgIHRlbXBsYXRlIDxjbGFzcyBfVHA+CisgIHVzaW5nIF9Tb3Vy
Y2VDVlQgPSBfUGF0aENWVDxfU291cmNlQ2hhcjxfVHA+ID47CisKK3B1YmxpYzoKKyAgdHlwZWRl
ZiBjaGFyIHZhbHVlX3R5cGU7CisgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPHZhbHVlX3R5cGU+IHN0
cmluZ190eXBlOworICB0eXBlZGVmIF9WU1REOjpzdHJpbmdfdmlldyBfX3N0cmluZ192aWV3Owor
ICBzdGF0aWMgY29uc3RleHByIHZhbHVlX3R5cGUgcHJlZmVycmVkX3NlcGFyYXRvciA9ICcvJzsK
KworICBlbnVtIGNsYXNzIF9MSUJDUFBfRU5VTV9WSVMgZm9ybWF0IDogdW5zaWduZWQgY2hhciB7
CisgICAgYXV0b19mb3JtYXQsCisgICAgbmF0aXZlX2Zvcm1hdCwKKyAgICBnZW5lcmljX2Zvcm1h
dAorICB9OworCisgIC8vIGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcgorICBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZIHBhdGgoKSBub2V4Y2VwdCB7fQorICBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIHBhdGgoY29uc3QgcGF0aCYgX19wKSA6IF9fcG5fKF9fcC5fX3BuXykge30KKyAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoKHBhdGgmJiBfX3ApIG5vZXhjZXB0CisgICAgICA6
IF9fcG5fKF9WU1REOjptb3ZlKF9fcC5fX3BuXykpIHt9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWQorICBwYXRoKHN0cmluZ190eXBlJiYgX19zLCBmb3JtYXQgPSBmb3JtYXQ6OmF1dG9f
Zm9ybWF0KSBub2V4Y2VwdAorICAgICAgOiBfX3BuXyhfVlNURDo6bW92ZShfX3MpKSB7fQorCisg
IHRlbXBsYXRlIDxjbGFzcyBfU291cmNlLCBjbGFzcyA9IF9FbmFibGVJZlBhdGhhYmxlPF9Tb3Vy
Y2UsIHZvaWQ+ID4KKyAgcGF0aChjb25zdCBfU291cmNlJiBfX3NyYywgZm9ybWF0ID0gZm9ybWF0
OjphdXRvX2Zvcm1hdCkgeworICAgIF9Tb3VyY2VDVlQ8X1NvdXJjZT46Ol9fYXBwZW5kX3NvdXJj
ZShfX3BuXywgX19zcmMpOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0PgorICBw
YXRoKF9JbnB1dEl0IF9fZmlyc3QsIF9JbnB1dEl0IF9fbGFzdCwgZm9ybWF0ID0gZm9ybWF0Ojph
dXRvX2Zvcm1hdCkgeworICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1
dEl0Pjo6dmFsdWVfdHlwZSBfSXRWYWw7CisgICAgX1BhdGhDVlQ8X0l0VmFsPjo6X19hcHBlbmRf
cmFuZ2UoX19wbl8sIF9fZmlyc3QsIF9fbGFzdCk7CisgIH0KKworICAvLyBUT0RPIEltcGxlbWVu
dCBsb2NhbGUgY29udmVyc2lvbnMuCisgIHRlbXBsYXRlIDxjbGFzcyBfU291cmNlLCBjbGFzcyA9
IF9FbmFibGVJZlBhdGhhYmxlPF9Tb3VyY2UsIHZvaWQ+ID4KKyAgcGF0aChjb25zdCBfU291cmNl
JiBfX3NyYywgY29uc3QgbG9jYWxlJiBfX2xvYywgZm9ybWF0ID0gZm9ybWF0OjphdXRvX2Zvcm1h
dCk7CisgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdD4KKyAgcGF0aChfSW5wdXRJdCBfX2ZpcnN0
LCBfSW5wdXRJdCBfbGFzdCwgY29uc3QgbG9jYWxlJiBfX2xvYywKKyAgICAgICBmb3JtYXQgPSBm
b3JtYXQ6OmF1dG9fZm9ybWF0KTsKKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIH5w
YXRoKCkgPSBkZWZhdWx0OworCisgIC8vIGFzc2lnbm1lbnRzCisgIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkKKyAgcGF0aCYgb3BlcmF0b3I9KGNvbnN0IHBhdGgmIF9fcCkgeworICAgIF9fcG5f
ID0gX19wLl9fcG5fOworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkKKyAgcGF0aCYgb3BlcmF0b3I9KHBhdGgmJiBfX3ApIG5vZXhjZXB0IHsKKyAg
ICBfX3BuXyA9IF9WU1REOjptb3ZlKF9fcC5fX3BuXyk7CisgICAgcmV0dXJuICp0aGlzOworICB9
CisKKyAgdGVtcGxhdGUgPGNsYXNzID0gdm9pZD4KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBwYXRoJiBvcGVyYXRvcj0oc3RyaW5nX3R5cGUmJiBfX3MpIG5vZXhjZXB0IHsKKyAgICBfX3Bu
XyA9IF9WU1REOjptb3ZlKF9fcyk7CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWQorICBwYXRoJiBhc3NpZ24oc3RyaW5nX3R5cGUmJiBfX3MpIG5v
ZXhjZXB0IHsKKyAgICBfX3BuXyA9IF9WU1REOjptb3ZlKF9fcyk7CisgICAgcmV0dXJuICp0aGlz
OworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2U+CisgIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgX0VuYWJsZUlmUGF0aGFibGU8X1NvdXJjZT4KKyAgb3BlcmF0b3I9KGNvbnN0IF9T
b3VyY2UmIF9fc3JjKSB7CisgICAgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3NyYyk7CisgIH0KKwor
ICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZT4KKyAgX0VuYWJsZUlmUGF0aGFibGU8X1NvdXJjZT4g
YXNzaWduKGNvbnN0IF9Tb3VyY2UmIF9fc3JjKSB7CisgICAgX19wbl8uY2xlYXIoKTsKKyAgICBf
U291cmNlQ1ZUPF9Tb3VyY2U+OjpfX2FwcGVuZF9zb3VyY2UoX19wbl8sIF9fc3JjKTsKKyAgICBy
ZXR1cm4gKnRoaXM7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXQ+CisgIHBhdGgm
IGFzc2lnbihfSW5wdXRJdCBfX2ZpcnN0LCBfSW5wdXRJdCBfX2xhc3QpIHsKKyAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdD46OnZhbHVlX3R5cGUgX0l0VmFsOwor
ICAgIF9fcG5fLmNsZWFyKCk7CisgICAgX1BhdGhDVlQ8X0l0VmFsPjo6X19hcHBlbmRfcmFuZ2Uo
X19wbl8sIF9fZmlyc3QsIF9fbGFzdCk7CisgICAgcmV0dXJuICp0aGlzOworICB9CisKK3ByaXZh
dGU6CisgIHRlbXBsYXRlIDxjbGFzcyBfRUNoYXJUPgorICBzdGF0aWMgYm9vbCBfX3NvdXJjZV9p
c19hYnNvbHV0ZShfRUNoYXJUIF9fZmlyc3Rfb3JfbnVsbCkgeworICAgIHJldHVybiBfX2lzX3Nl
cGFyYXRvcihfX2ZpcnN0X29yX251bGwpOworICB9CisKK3B1YmxpYzoKKyAgLy8gYXBwZW5kcwor
ICBwYXRoJiBvcGVyYXRvci89KGNvbnN0IHBhdGgmIF9fcCkgeworICAgIGlmIChfX3AuaXNfYWJz
b2x1dGUoKSkgeworICAgICAgX19wbl8gPSBfX3AuX19wbl87CisgICAgICByZXR1cm4gKnRoaXM7
CisgICAgfQorICAgIGlmIChoYXNfZmlsZW5hbWUoKSkKKyAgICAgIF9fcG5fICs9IHByZWZlcnJl
ZF9zZXBhcmF0b3I7CisgICAgX19wbl8gKz0gX19wLm5hdGl2ZSgpOworICAgIHJldHVybiAqdGhp
czsKKyAgfQorCisgIC8vIEZJWE1FOiBVc2UgX0xJQkNQUF9ESUFHTk9TRV9XQVJOSU5HIHRvIHBy
b2R1Y2UgYSBkaWFnbm9zdGljIHdoZW4gX19zcmMKKyAgLy8gaXMga25vd24gYXQgY29tcGlsZSB0
aW1lIHRvIGJlICIvJyBzaW5jZSB0aGUgdXNlciBhbG1vc3QgY2VydGFpbmx5IGludGVuZGVkCisg
IC8vIHRvIGFwcGVuZCBhIHNlcGFyYXRvciBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIHRoZSBwYXRo
IHdpdGggIi8iCisgIHRlbXBsYXRlIDxjbGFzcyBfU291cmNlPgorICBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZIF9FbmFibGVJZlBhdGhhYmxlPF9Tb3VyY2U+CisgIG9wZXJhdG9yLz0oY29uc3Qg
X1NvdXJjZSYgX19zcmMpIHsKKyAgICByZXR1cm4gdGhpcy0+YXBwZW5kKF9fc3JjKTsKKyAgfQor
CisgIHRlbXBsYXRlIDxjbGFzcyBfU291cmNlPgorICBfRW5hYmxlSWZQYXRoYWJsZTxfU291cmNl
PiBhcHBlbmQoY29uc3QgX1NvdXJjZSYgX19zcmMpIHsKKyAgICB1c2luZyBfVHJhaXRzID0gX19p
c19wYXRoYWJsZTxfU291cmNlPjsKKyAgICB1c2luZyBfQ1ZUID0gX1BhdGhDVlQ8X1NvdXJjZUNo
YXI8X1NvdXJjZT4gPjsKKyAgICBpZiAoX19zb3VyY2VfaXNfYWJzb2x1dGUoX1RyYWl0czo6X19m
aXJzdF9vcl9udWxsKF9fc3JjKSkpCisgICAgICBfX3BuXy5jbGVhcigpOworICAgIGVsc2UgaWYg
KGhhc19maWxlbmFtZSgpKQorICAgICAgX19wbl8gKz0gcHJlZmVycmVkX3NlcGFyYXRvcjsKKyAg
ICBfQ1ZUOjpfX2FwcGVuZF9zb3VyY2UoX19wbl8sIF9fc3JjKTsKKyAgICByZXR1cm4gKnRoaXM7
CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXQ+CisgIHBhdGgmIGFwcGVuZChfSW5w
dXRJdCBfX2ZpcnN0LCBfSW5wdXRJdCBfX2xhc3QpIHsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSW5wdXRJdD46OnZhbHVlX3R5cGUgX0l0VmFsOworICAgIHN0YXRpY19h
c3NlcnQoX19jYW5fY29udmVydF9jaGFyPF9JdFZhbD46OnZhbHVlLCAiTXVzdCBjb252ZXJ0aWJs
ZSIpOworICAgIHVzaW5nIF9DVlQgPSBfUGF0aENWVDxfSXRWYWw+OworICAgIGlmIChfX2ZpcnN0
ICE9IF9fbGFzdCAmJiBfX3NvdXJjZV9pc19hYnNvbHV0ZSgqX19maXJzdCkpCisgICAgICBfX3Bu
Xy5jbGVhcigpOworICAgIGVsc2UgaWYgKGhhc19maWxlbmFtZSgpKQorICAgICAgX19wbl8gKz0g
cHJlZmVycmVkX3NlcGFyYXRvcjsKKyAgICBfQ1ZUOjpfX2FwcGVuZF9yYW5nZShfX3BuXywgX19m
aXJzdCwgX19sYXN0KTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICAvLyBjb25jYXRlbmF0
aW9uCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGF0aCYgb3BlcmF0b3IrPShjb25z
dCBwYXRoJiBfX3gpIHsKKyAgICBfX3BuXyArPSBfX3guX19wbl87CisgICAgcmV0dXJuICp0aGlz
OworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBwYXRoJiBvcGVyYXRvcis9
KGNvbnN0IHN0cmluZ190eXBlJiBfX3gpIHsKKyAgICBfX3BuXyArPSBfX3g7CisgICAgcmV0dXJu
ICp0aGlzOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBwYXRoJiBvcGVy
YXRvcis9KF9fc3RyaW5nX3ZpZXcgX194KSB7CisgICAgX19wbl8gKz0gX194OworICAgIHJldHVy
biAqdGhpczsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGF0aCYgb3Bl
cmF0b3IrPShjb25zdCB2YWx1ZV90eXBlKiBfX3gpIHsKKyAgICBfX3BuXyArPSBfX3g7CisgICAg
cmV0dXJuICp0aGlzOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBwYXRo
JiBvcGVyYXRvcis9KHZhbHVlX3R5cGUgX194KSB7CisgICAgX19wbl8gKz0gX194OworICAgIHJl
dHVybiAqdGhpczsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfRUNoYXJUPgorICB0eXBlbmFt
ZSBlbmFibGVfaWY8X19jYW5fY29udmVydF9jaGFyPF9FQ2hhclQ+Ojp2YWx1ZSwgcGF0aCY+Ojp0
eXBlCisgIG9wZXJhdG9yKz0oX0VDaGFyVCBfX3gpIHsKKyAgICBiYXNpY19zdHJpbmc8X0VDaGFy
VD4gX190bXA7CisgICAgX190bXAgKz0gX194OworICAgIF9QYXRoQ1ZUPF9FQ2hhclQ+OjpfX2Fw
cGVuZF9zb3VyY2UoX19wbl8sIF9fdG1wKTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICB0
ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZT4KKyAgX0VuYWJsZUlmUGF0aGFibGU8X1NvdXJjZT4gb3Bl
cmF0b3IrPShjb25zdCBfU291cmNlJiBfX3gpIHsKKyAgICByZXR1cm4gdGhpcy0+Y29uY2F0KF9f
eCk7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZT4KKyAgX0VuYWJsZUlmUGF0aGFi
bGU8X1NvdXJjZT4gY29uY2F0KGNvbnN0IF9Tb3VyY2UmIF9feCkgeworICAgIF9Tb3VyY2VDVlQ8
X1NvdXJjZT46Ol9fYXBwZW5kX3NvdXJjZShfX3BuXywgX194KTsKKyAgICByZXR1cm4gKnRoaXM7
CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXQ+CisgIHBhdGgmIGNvbmNhdChfSW5w
dXRJdCBfX2ZpcnN0LCBfSW5wdXRJdCBfX2xhc3QpIHsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSW5wdXRJdD46OnZhbHVlX3R5cGUgX0l0VmFsOworICAgIF9QYXRoQ1ZU
PF9JdFZhbD46Ol9fYXBwZW5kX3JhbmdlKF9fcG5fLCBfX2ZpcnN0LCBfX2xhc3QpOworICAgIHJl
dHVybiAqdGhpczsKKyAgfQorCisgIC8vIG1vZGlmaWVycworICBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZCisgIHZvaWQgY2xlYXIoKSBub2V4Y2VwdCB7IF9fcG5fLmNsZWFyKCk7IH0KKworICBw
YXRoJiBtYWtlX3ByZWZlcnJlZCgpIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWQorICBwYXRoJiByZW1vdmVfZmlsZW5hbWUoKSB7CisgICAgYXV0byBfX2Zu
YW1lID0gX19maWxlbmFtZSgpOworICAgIGlmICghX19mbmFtZS5lbXB0eSgpKQorICAgICAgX19w
bl8uZXJhc2UoX19mbmFtZS5kYXRhKCkgLSBfX3BuXy5kYXRhKCkpOworICAgIHJldHVybiAqdGhp
czsKKyAgfQorCisgIHBhdGgmIHJlcGxhY2VfZmlsZW5hbWUoY29uc3QgcGF0aCYgX19yZXBsYWNl
bWVudCkgeworICAgIHJlbW92ZV9maWxlbmFtZSgpOworICAgIHJldHVybiAoKnRoaXMgLz0gX19y
ZXBsYWNlbWVudCk7CisgIH0KKworICBwYXRoJiByZXBsYWNlX2V4dGVuc2lvbihjb25zdCBwYXRo
JiBfX3JlcGxhY2VtZW50ID0gcGF0aCgpKTsKKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
CisgIHZvaWQgc3dhcChwYXRoJiBfX3Jocykgbm9leGNlcHQgeyBfX3BuXy5zd2FwKF9fcmhzLl9f
cG5fKTsgfQorCisgIC8vIHByaXZhdGUgaGVscGVyIHRvIGFsbG93IHJlc2VydmluZyBtZW1vcnkg
aW4gdGhlIHBhdGgKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB2b2lkIF9fcmVzZXJ2
ZShzaXplX3QgX19zKSB7IF9fcG5fLnJlc2VydmUoX19zKTsgfQorCisgIC8vIG5hdGl2ZSBmb3Jt
YXQgb2JzZXJ2ZXJzCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgY29uc3Qgc3RyaW5n
X3R5cGUmIG5hdGl2ZSgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIF9fcG5fOyB9CisKKyAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBjb25zdCB2YWx1ZV90eXBlKiBjX3N0cigpIGNvbnN0
IG5vZXhjZXB0IHsgcmV0dXJuIF9fcG5fLmNfc3RyKCk7IH0KKworICBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZIG9wZXJhdG9yIHN0cmluZ190eXBlKCkgY29uc3QgeyByZXR1cm4gX19wbl87IH0K
KworICB0ZW1wbGF0ZSA8Y2xhc3MgX0VDaGFyVCwgY2xhc3MgX1RyYWl0cyA9IGNoYXJfdHJhaXRz
PF9FQ2hhclQ+LAorICAgICAgICAgICAgY2xhc3MgX0FsbG9jYXRvciA9IGFsbG9jYXRvcjxfRUNo
YXJUPiA+CisgIGJhc2ljX3N0cmluZzxfRUNoYXJULCBfVHJhaXRzLCBfQWxsb2NhdG9yPgorICBz
dHJpbmcoY29uc3QgX0FsbG9jYXRvciYgX19hID0gX0FsbG9jYXRvcigpKSBjb25zdCB7CisgICAg
dXNpbmcgX0NWVCA9IF9fd2lkZW5fZnJvbV91dGY4PHNpemVvZihfRUNoYXJUKSAqIF9fQ0hBUl9C
SVRfXz47CisgICAgdXNpbmcgX1N0ciA9IGJhc2ljX3N0cmluZzxfRUNoYXJULCBfVHJhaXRzLCBf
QWxsb2NhdG9yPjsKKyAgICBfU3RyIF9fcyhfX2EpOworICAgIF9fcy5yZXNlcnZlKF9fcG5fLnNp
emUoKSk7CisgICAgX0NWVCgpKGJhY2tfaW5zZXJ0ZXIoX19zKSwgX19wbl8uZGF0YSgpLCBfX3Bu
Xy5kYXRhKCkgKyBfX3BuXy5zaXplKCkpOworICAgIHJldHVybiBfX3M7CisgIH0KKworICBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZIHN0ZDo6c3RyaW5nIHN0cmluZygpIGNvbnN0IHsgcmV0dXJu
IF9fcG5fOyB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3RkOjp3c3RyaW5nIHdzdHJp
bmcoKSBjb25zdCB7CisgICAgcmV0dXJuIHN0cmluZzx3Y2hhcl90PigpOworICB9CisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3RkOjpzdHJpbmcgdThzdHJpbmcoKSBjb25zdCB7IHJldHVy
biBfX3BuXzsgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0ZDo6dTE2c3RyaW5nIHUx
NnN0cmluZygpIGNvbnN0IHsKKyAgICByZXR1cm4gc3RyaW5nPGNoYXIxNl90PigpOworICB9Cisg
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3RkOjp1MzJzdHJpbmcgdTMyc3RyaW5nKCkgY29u
c3QgeworICAgIHJldHVybiBzdHJpbmc8Y2hhcjMyX3Q+KCk7CisgIH0KKworICAvLyBnZW5lcmlj
IGZvcm1hdCBvYnNlcnZlcnMKKyAgdGVtcGxhdGUgPGNsYXNzIF9FQ2hhclQsIGNsYXNzIF9UcmFp
dHMgPSBjaGFyX3RyYWl0czxfRUNoYXJUPiwKKyAgICAgICAgICAgIGNsYXNzIF9BbGxvY2F0b3Ig
PSBhbGxvY2F0b3I8X0VDaGFyVD4gPgorICBiYXNpY19zdHJpbmc8X0VDaGFyVCwgX1RyYWl0cywg
X0FsbG9jYXRvcj4KKyAgZ2VuZXJpY19zdHJpbmcoY29uc3QgX0FsbG9jYXRvciYgX19hID0gX0Fs
bG9jYXRvcigpKSBjb25zdCB7CisgICAgcmV0dXJuIHN0cmluZzxfRUNoYXJULCBfVHJhaXRzLCBf
QWxsb2NhdG9yPihfX2EpOworICB9CisKKyAgc3RkOjpzdHJpbmcgZ2VuZXJpY19zdHJpbmcoKSBj
b25zdCB7IHJldHVybiBfX3BuXzsgfQorICBzdGQ6OndzdHJpbmcgZ2VuZXJpY193c3RyaW5nKCkg
Y29uc3QgeyByZXR1cm4gc3RyaW5nPHdjaGFyX3Q+KCk7IH0KKyAgc3RkOjpzdHJpbmcgZ2VuZXJp
Y191OHN0cmluZygpIGNvbnN0IHsgcmV0dXJuIF9fcG5fOyB9CisgIHN0ZDo6dTE2c3RyaW5nIGdl
bmVyaWNfdTE2c3RyaW5nKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nPGNoYXIxNl90PigpOyB9Cisg
IHN0ZDo6dTMyc3RyaW5nIGdlbmVyaWNfdTMyc3RyaW5nKCkgY29uc3QgeyByZXR1cm4gc3RyaW5n
PGNoYXIzMl90PigpOyB9CisKK3ByaXZhdGU6CisgIGludCBfX2NvbXBhcmUoX19zdHJpbmdfdmll
dykgY29uc3Q7CisgIF9fc3RyaW5nX3ZpZXcgX19yb290X25hbWUoKSBjb25zdDsKKyAgX19zdHJp
bmdfdmlldyBfX3Jvb3RfZGlyZWN0b3J5KCkgY29uc3Q7CisgIF9fc3RyaW5nX3ZpZXcgX19yb290
X3BhdGhfcmF3KCkgY29uc3Q7CisgIF9fc3RyaW5nX3ZpZXcgX19yZWxhdGl2ZV9wYXRoKCkgY29u
c3Q7CisgIF9fc3RyaW5nX3ZpZXcgX19wYXJlbnRfcGF0aCgpIGNvbnN0OworICBfX3N0cmluZ192
aWV3IF9fZmlsZW5hbWUoKSBjb25zdDsKKyAgX19zdHJpbmdfdmlldyBfX3N0ZW0oKSBjb25zdDsK
KyAgX19zdHJpbmdfdmlldyBfX2V4dGVuc2lvbigpIGNvbnN0OworCitwdWJsaWM6CisgIC8vIGNv
bXBhcmUKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBpbnQgY29tcGFyZShjb25zdCBwYXRo
JiBfX3ApIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19jb21wYXJlKF9fcC5fX3BuXyk7
CisgIH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBpbnQgY29tcGFyZShjb25zdCBzdHJp
bmdfdHlwZSYgX19zKSBjb25zdCB7CisgICAgcmV0dXJuIF9fY29tcGFyZShfX3MpOworICB9Cisg
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgaW50IGNvbXBhcmUoX19zdHJpbmdfdmlldyBfX3Mp
IGNvbnN0IHsKKyAgICByZXR1cm4gX19jb21wYXJlKF9fcyk7CisgIH0KKyAgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBpbnQgY29tcGFyZShjb25zdCB2YWx1ZV90eXBlKiBfX3MpIGNvbnN0IHsK
KyAgICByZXR1cm4gX19jb21wYXJlKF9fcyk7CisgIH0KKworICAvLyBkZWNvbXBvc2l0aW9uCisg
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCByb290X25hbWUoKSBjb25zdCB7CisgICAg
cmV0dXJuIHN0cmluZ190eXBlKF9fcm9vdF9uYW1lKCkpOworICB9CisgIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkgcGF0aCByb290X2RpcmVjdG9yeSgpIGNvbnN0IHsKKyAgICByZXR1cm4gc3Ry
aW5nX3R5cGUoX19yb290X2RpcmVjdG9yeSgpKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIHBhdGggcm9vdF9wYXRoKCkgY29uc3QgeworICAgIHJldHVybiByb290X25hbWUoKS5h
cHBlbmQoc3RyaW5nX3R5cGUoX19yb290X2RpcmVjdG9yeSgpKSk7CisgIH0KKyAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWSBwYXRoIHJlbGF0aXZlX3BhdGgoKSBjb25zdCB7CisgICAgcmV0dXJu
IHN0cmluZ190eXBlKF9fcmVsYXRpdmVfcGF0aCgpKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZIHBhdGggcGFyZW50X3BhdGgoKSBjb25zdCB7CisgICAgcmV0dXJuIHN0cmluZ190
eXBlKF9fcGFyZW50X3BhdGgoKSk7CisgIH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBw
YXRoIGZpbGVuYW1lKCkgY29uc3QgeworICAgIHJldHVybiBzdHJpbmdfdHlwZShfX2ZpbGVuYW1l
KCkpOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCBzdGVtKCkgY29uc3Qg
eyByZXR1cm4gc3RyaW5nX3R5cGUoX19zdGVtKCkpOyB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkgcGF0aCBleHRlbnNpb24oKSBjb25zdCB7CisgICAgcmV0dXJuIHN0cmluZ190eXBlKF9f
ZXh0ZW5zaW9uKCkpOworICB9CisKKyAgLy8gcXVlcnkKKyAgX0xJQkNQUF9OT0RJU0NBUkRfQUZU
RVJfQ1hYMTcgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sCisgIGVtcHR5KCkgY29uc3Qg
bm9leGNlcHQgeworICAgIHJldHVybiBfX3BuXy5lbXB0eSgpOworICB9CisKKyAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWSBib29sIGhhc19yb290X25hbWUoKSBjb25zdCB7CisgICAgcmV0dXJu
ICFfX3Jvb3RfbmFtZSgpLmVtcHR5KCk7CisgIH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBib29sIGhhc19yb290X2RpcmVjdG9yeSgpIGNvbnN0IHsKKyAgICByZXR1cm4gIV9fcm9vdF9k
aXJlY3RvcnkoKS5lbXB0eSgpOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9v
bCBoYXNfcm9vdF9wYXRoKCkgY29uc3QgeworICAgIHJldHVybiAhX19yb290X3BhdGhfcmF3KCku
ZW1wdHkoKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaGFzX3JlbGF0
aXZlX3BhdGgoKSBjb25zdCB7CisgICAgcmV0dXJuICFfX3JlbGF0aXZlX3BhdGgoKS5lbXB0eSgp
OworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBoYXNfcGFyZW50X3BhdGgo
KSBjb25zdCB7CisgICAgcmV0dXJuICFfX3BhcmVudF9wYXRoKCkuZW1wdHkoKTsKKyAgfQorICBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaGFzX2ZpbGVuYW1lKCkgY29uc3QgeworICAg
IHJldHVybiAhX19maWxlbmFtZSgpLmVtcHR5KCk7CisgIH0KKyAgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWSBib29sIGhhc19zdGVtKCkgY29uc3QgeyByZXR1cm4gIV9fc3RlbSgpLmVtcHR5KCk7
IH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGhhc19leHRlbnNpb24oKSBjb25z
dCB7CisgICAgcmV0dXJuICFfX2V4dGVuc2lvbigpLmVtcHR5KCk7CisgIH0KKworICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfYWJzb2x1dGUoKSBjb25zdCB7CisgICAgcmV0dXJu
IGhhc19yb290X2RpcmVjdG9yeSgpOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkg
Ym9vbCBpc19yZWxhdGl2ZSgpIGNvbnN0IHsgcmV0dXJuICFpc19hYnNvbHV0ZSgpOyB9CisKKyAg
Ly8gcmVsYXRpdmUgcGF0aHMKKyAgcGF0aCBsZXhpY2FsbHlfbm9ybWFsKCkgY29uc3Q7CisgIHBh
dGggbGV4aWNhbGx5X3JlbGF0aXZlKGNvbnN0IHBhdGgmIF9fYmFzZSkgY29uc3Q7CisKKyAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIGxleGljYWxseV9wcm94aW1hdGUoY29uc3QgcGF0
aCYgX19iYXNlKSBjb25zdCB7CisgICAgcGF0aCBfX3Jlc3VsdCA9IHRoaXMtPmxleGljYWxseV9y
ZWxhdGl2ZShfX2Jhc2UpOworICAgIGlmIChfX3Jlc3VsdC5uYXRpdmUoKS5lbXB0eSgpKQorICAg
ICAgcmV0dXJuICp0aGlzOworICAgIHJldHVybiBfX3Jlc3VsdDsKKyAgfQorCisgIC8vIGl0ZXJh
dG9ycworICBjbGFzcyBfTElCQ1BQX1RZUEVfVklTIGl0ZXJhdG9yOworICB0eXBlZGVmIGl0ZXJh
dG9yIGNvbnN0X2l0ZXJhdG9yOworCisgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3Q7CisgIGl0ZXJh
dG9yIGVuZCgpIGNvbnN0OworCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFp
dHM+CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgZnJpZW5kCisgICAgICB0eXBlbmFtZSBl
bmFibGVfaWY8aXNfc2FtZTxfQ2hhclQsIGNoYXI+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpc19zYW1lPF9UcmFpdHMsIGNoYXJfdHJhaXRzPGNoYXI+ID46OnZhbHVl
LAorICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
PiY+Ojp0eXBlCisgICAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYgX19vcywgY29uc3QgcGF0aCYgX19wKSB7CisgICAgX19vcyA8PCBzdGQ6Ol9fcXVvdGVkKF9f
cC5uYXRpdmUoKSk7CisgICAgcmV0dXJuIF9fb3M7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0NoYXJULCBjbGFzcyBfVHJhaXRzPgorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGZyaWVu
ZAorICAgICAgdHlwZW5hbWUgZW5hYmxlX2lmPCFpc19zYW1lPF9DaGFyVCwgY2hhcj46OnZhbHVl
IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpc19zYW1lPF9UcmFpdHMsIGNoYXJf
dHJhaXRzPGNoYXI+ID46OnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiY+Ojp0eXBlCisgICAgICBvcGVyYXRvcjw8KGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywgY29uc3QgcGF0aCYgX19wKSB7CisgICAgX19v
cyA8PCBzdGQ6Ol9fcXVvdGVkKF9fcC5zdHJpbmc8X0NoYXJULCBfVHJhaXRzPigpKTsKKyAgICBy
ZXR1cm4gX19vczsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFp
dHM+CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgZnJpZW5kIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPiYKKyAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mIF9faXMsIHBhdGgmIF9fcCkgeworICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHM+
IF9fdG1wOworICAgIF9faXMgPj4gX19xdW90ZWQoX190bXApOworICAgIF9fcCA9IF9fdG1wOwor
ICAgIHJldHVybiBfX2lzOworICB9CisKK3ByaXZhdGU6CisgIGlubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIHBhdGgmCisgIF9fYXNzaWduX3ZpZXcoX19zdHJpbmdfdmlldyBjb25zdCYg
X19zKSBub2V4Y2VwdCB7CisgICAgX19wbl8gPSBzdHJpbmdfdHlwZShfX3MpOworICAgIHJldHVy
biAqdGhpczsKKyAgfQorICBzdHJpbmdfdHlwZSBfX3BuXzsKK307CisKK2lubGluZSBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIHZvaWQgc3dhcChwYXRoJiBfX2xocywgcGF0aCYgX19yaHMpIG5v
ZXhjZXB0IHsKKyAgX19saHMuc3dhcChfX3Jocyk7Cit9CisKK19MSUJDUFBfRlVOQ19WSVMKK3Np
emVfdCBoYXNoX3ZhbHVlKGNvbnN0IHBhdGgmIF9fcCkgbm9leGNlcHQ7CisKK2lubGluZSBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgb3BlcmF0b3I9PShjb25zdCBwYXRoJiBfX2xocywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBw
YXRoJiBfX3Jocykgbm9leGNlcHQgeworICByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0g
MDsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IHBhdGgmIF9fbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9fcmhzKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX2xo
cy5jb21wYXJlKF9fcmhzKSAhPSAwOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWSBib29sIG9wZXJhdG9yPChjb25zdCBwYXRoJiBfX2xocywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9fcmhzKSBub2V4Y2Vw
dCB7CisgIHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7Cit9CisKK2lubGluZSBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgb3BlcmF0b3I8PShjb25zdCBwYXRoJiBfX2xocywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBw
YXRoJiBfX3Jocykgbm9leGNlcHQgeworICByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPD0g
MDsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBvcGVyYXRvcj4o
Y29uc3QgcGF0aCYgX19saHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBwYXRoJiBfX3Jocykgbm9leGNlcHQgeworICByZXR1cm4gX19saHMu
Y29tcGFyZShfX3JocykgPiAwOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBib29sIG9wZXJhdG9yPj0oY29uc3QgcGF0aCYgX19saHMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX19yaHMpIG5vZXhjZXB0
IHsKKyAgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7Cit9CisKK2lubGluZSBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggb3BlcmF0b3IvKGNvbnN0IHBhdGgmIF9fbGhzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0
aCYgX19yaHMpIHsKKyAgcGF0aCBfX3Jlc3VsdChfX2xocyk7CisgIF9fcmVzdWx0IC89IF9fcmhz
OworICByZXR1cm4gX19yZXN1bHQ7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBfU291cmNlPgorX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQorICAgIHR5cGVuYW1lIGVuYWJsZV9pZjxfX2lzX3BhdGhh
YmxlPF9Tb3VyY2U+Ojp2YWx1ZSwgcGF0aD46OnR5cGUKKyAgICB1OHBhdGgoY29uc3QgX1NvdXJj
ZSYgX19zKSB7CisgIHN0YXRpY19hc3NlcnQoCisgICAgICBpc19zYW1lPHR5cGVuYW1lIF9faXNf
cGF0aGFibGU8X1NvdXJjZT46Ol9fY2hhcl90eXBlLCBjaGFyPjo6dmFsdWUsCisgICAgICAidThw
YXRoKFNvdXJjZSBjb25zdCYpIHJlcXVpcmVzIFNvdXJjZSBoYXZlIGEgY2hhcmFjdGVyIHR5cGUg
b2YgdHlwZSAiCisgICAgICAiJ2NoYXInIik7CisgIHJldHVybiBwYXRoKF9fcyk7Cit9CisKK3Rl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdD4KK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgICB0
eXBlbmFtZSBlbmFibGVfaWY8X19pc19wYXRoYWJsZTxfSW5wdXRJdD46OnZhbHVlLCBwYXRoPjo6
dHlwZQorICAgIHU4cGF0aChfSW5wdXRJdCBfX2YsIF9JbnB1dEl0IF9fbCkgeworICBzdGF0aWNf
YXNzZXJ0KAorICAgICAgaXNfc2FtZTx0eXBlbmFtZSBfX2lzX3BhdGhhYmxlPF9JbnB1dEl0Pjo6
X19jaGFyX3R5cGUsIGNoYXI+Ojp2YWx1ZSwKKyAgICAgICJ1OHBhdGgoSXRlciwgSXRlcikgcmVx
dWlyZXMgSXRlciBoYXZlIGEgdmFsdWVfdHlwZSBvZiB0eXBlICdjaGFyJyIpOworICByZXR1cm4g
cGF0aChfX2YsIF9fbCk7Cit9CisKK2NsYXNzIF9MSUJDUFBfVFlQRV9WSVMgcGF0aDo6aXRlcmF0
b3IgeworcHVibGljOgorICBlbnVtIF9QYXJzZXJTdGF0ZSA6IHVuc2lnbmVkIGNoYXIgeworICAg
IF9TaW5ndWxhciwKKyAgICBfQmVmb3JlQmVnaW4sCisgICAgX0luUm9vdE5hbWUsCisgICAgX0lu
Um9vdERpciwKKyAgICBfSW5GaWxlbmFtZXMsCisgICAgX0luVHJhaWxpbmdTZXAsCisgICAgX0F0
RW5kCisgIH07CisKK3B1YmxpYzoKKyAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3Rh
ZyBpdGVyYXRvcl9jYXRlZ29yeTsKKworICB0eXBlZGVmIHBhdGggdmFsdWVfdHlwZTsKKyAgdHlw
ZWRlZiBzdGQ6OnB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CisgIHR5cGVkZWYgY29uc3QgcGF0
aCogcG9pbnRlcjsKKyAgdHlwZWRlZiBjb25zdCBwYXRoJiByZWZlcmVuY2U7CisKKyAgdHlwZWRl
ZiB2b2lkCisgICAgICBfX3N0YXNoaW5nX2l0ZXJhdG9yX3RhZzsgLy8gU2VlIHJldmVyc2VfaXRl
cmF0b3IgYW5kIF9faXNfc3Rhc2hpbmdfaXRlcmF0b3IKKworcHVibGljOgorICBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZCisgIGl0ZXJhdG9yKCkKKyAgICAgIDogX19zdGFzaGVkX2VsZW1fKCks
IF9fcGF0aF9wdHJfKG51bGxwdHIpLCBfX2VudHJ5XygpLAorICAgICAgICBfX3N0YXRlXyhfU2lu
Z3VsYXIpIHt9CisKKyAgaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImKSA9IGRlZmF1bHQ7CisgIH5p
dGVyYXRvcigpID0gZGVmYXVsdDsKKworICBpdGVyYXRvciYgb3BlcmF0b3I9KGNvbnN0IGl0ZXJh
dG9yJikgPSBkZWZhdWx0OworCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcmVmZXJl
bmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIF9fc3Rhc2hlZF9lbGVtXzsgfQorCisgIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyBy
ZXR1cm4gJl9fc3Rhc2hlZF9lbGVtXzsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
KyAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7CisgICAgX0xJQkNQUF9BU1NFUlQoX19zdGF0ZV8g
IT0gX1Npbmd1bGFyLAorICAgICAgICAgICAgICAgICAgICJhdHRlbXB0aW5nIHRvIGluY3JlbWVu
dCBhIHNpbmd1bGFyIGl0ZXJhdG9yIik7CisgICAgX0xJQkNQUF9BU1NFUlQoX19zdGF0ZV8gIT0g
X0F0RW5kLAorICAgICAgICAgICAgICAgICAgICJhdHRlbXB0aW5nIHRvIGluY3JlbWVudCB0aGUg
ZW5kIGl0ZXJhdG9yIik7CisgICAgcmV0dXJuIF9faW5jcmVtZW50KCk7CisgIH0KKworICBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZCisgIGl0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7CisgICAg
aXRlcmF0b3IgX19pdCgqdGhpcyk7CisgICAgdGhpcy0+b3BlcmF0b3IrKygpOworICAgIHJldHVy
biBfX2l0OworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBpdGVyYXRvciYg
b3BlcmF0b3ItLSgpIHsKKyAgICBfTElCQ1BQX0FTU0VSVChfX3N0YXRlXyAhPSBfU2luZ3VsYXIs
CisgICAgICAgICAgICAgICAgICAgImF0dGVtcHRpbmcgdG8gZGVjcmVtZW50IGEgc2luZ3VsYXIg
aXRlcmF0b3IiKTsKKyAgICBfTElCQ1BQX0FTU0VSVChfX2VudHJ5Xy5kYXRhKCkgIT0gX19wYXRo
X3B0cl8tPm5hdGl2ZSgpLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAiYXR0ZW1wdGluZyB0
byBkZWNyZW1lbnQgdGhlIGJlZ2luIGl0ZXJhdG9yIik7CisgICAgcmV0dXJuIF9fZGVjcmVtZW50
KCk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGl0ZXJhdG9yIG9wZXJh
dG9yLS0oaW50KSB7CisgICAgaXRlcmF0b3IgX19pdCgqdGhpcyk7CisgICAgdGhpcy0+b3BlcmF0
b3ItLSgpOworICAgIHJldHVybiBfX2l0OworICB9CisKK3ByaXZhdGU6CisgIGZyaWVuZCBjbGFz
cyBwYXRoOworCisgIGlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGZyaWVuZCBib29s
IG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZXJhdG9yJik7CisKKyAgaXRl
cmF0b3ImIF9faW5jcmVtZW50KCk7CisgIGl0ZXJhdG9yJiBfX2RlY3JlbWVudCgpOworCisgIHBh
dGggX19zdGFzaGVkX2VsZW1fOworICBjb25zdCBwYXRoKiBfX3BhdGhfcHRyXzsKKyAgcGF0aDo6
X19zdHJpbmdfdmlldyBfX2VudHJ5XzsKKyAgX1BhcnNlclN0YXRlIF9fc3RhdGVfOworfTsKKwor
aW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHBh
dGg6Oml0ZXJhdG9yJiBfX2xocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBwYXRoOjppdGVyYXRvciYgX19yaHMpIHsKKyAgcmV0dXJuIF9f
bGhzLl9fcGF0aF9wdHJfID09IF9fcmhzLl9fcGF0aF9wdHJfICYmCisgICAgICAgICBfX2xocy5f
X2VudHJ5Xy5kYXRhKCkgPT0gX19yaHMuX19lbnRyeV8uZGF0YSgpOworfQorCitpbmxpbmUgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIG9wZXJhdG9yIT0oY29uc3QgcGF0aDo6aXRlcmF0
b3ImIF9fbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHBhdGg6Oml0ZXJhdG9yJiBfX3JocykgeworICByZXR1cm4gIShfX2xocyA9PSBf
X3Jocyk7Cit9CisKK2NsYXNzIF9MSUJDUFBfRVhDRVBUSU9OX0FCSSBmaWxlc3lzdGVtX2Vycm9y
IDogcHVibGljIHN5c3RlbV9lcnJvciB7CitwdWJsaWM6CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKKyAgZmlsZXN5c3RlbV9lcnJvcihjb25zdCBzdHJpbmcmIF9fd2hhdCwgZXJyb3JfY29k
ZSBfX2VjKQorICAgICAgOiBzeXN0ZW1fZXJyb3IoX19lYywgX193aGF0KSwKKyAgICAgICAgX19z
dG9yYWdlXyhtYWtlX3NoYXJlZDxfU3RvcmFnZT4ocGF0aCgpLCBwYXRoKCkpKSB7CisgICAgX19j
cmVhdGVfd2hhdCgwKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZmls
ZXN5c3RlbV9lcnJvcihjb25zdCBzdHJpbmcmIF9fd2hhdCwgY29uc3QgcGF0aCYgX19wMSwgZXJy
b3JfY29kZSBfX2VjKQorICAgICAgOiBzeXN0ZW1fZXJyb3IoX19lYywgX193aGF0KSwKKyAgICAg
ICAgX19zdG9yYWdlXyhtYWtlX3NoYXJlZDxfU3RvcmFnZT4oX19wMSwgcGF0aCgpKSkgeworICAg
IF9fY3JlYXRlX3doYXQoMSk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisg
IGZpbGVzeXN0ZW1fZXJyb3IoY29uc3Qgc3RyaW5nJiBfX3doYXQsIGNvbnN0IHBhdGgmIF9fcDEs
IGNvbnN0IHBhdGgmIF9fcDIsCisgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSBfX2VjKQor
ICAgICAgOiBzeXN0ZW1fZXJyb3IoX19lYywgX193aGF0KSwKKyAgICAgICAgX19zdG9yYWdlXyht
YWtlX3NoYXJlZDxfU3RvcmFnZT4oX19wMSwgX19wMikpIHsKKyAgICBfX2NyZWF0ZV93aGF0KDIp
OworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBjb25zdCBwYXRoJiBwYXRo
MSgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIF9fc3RvcmFnZV8tPl9fcDFfOyB9CisKKyAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBjb25zdCBwYXRoJiBwYXRoMigpIGNvbnN0IG5vZXhj
ZXB0IHsgcmV0dXJuIF9fc3RvcmFnZV8tPl9fcDJfOyB9CisKKyAgfmZpbGVzeXN0ZW1fZXJyb3Io
KSBvdmVycmlkZTsgLy8ga2V5IGZ1bmN0aW9uCisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQorICBjb25zdCBjaGFyKiB3aGF0KCkgY29uc3Qgbm9leGNlcHQgb3ZlcnJpZGUgeworICAgIHJl
dHVybiBfX3N0b3JhZ2VfLT5fX3doYXRfLmNfc3RyKCk7CisgIH0KKworICBfTElCQ1BQX0ZVTkNf
VklTCisgIHZvaWQgX19jcmVhdGVfd2hhdChpbnQgX19udW1fcGF0aHMpOworCitwcml2YXRlOgor
ICBzdHJ1Y3QgX1N0b3JhZ2UgeworICAgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgICBf
U3RvcmFnZShjb25zdCBwYXRoJiBfX3AxLCBjb25zdCBwYXRoJiBfX3AyKSA6IF9fcDFfKF9fcDEp
LCBfX3AyXyhfX3AyKSB7fQorCisgICAgcGF0aCBfX3AxXzsKKyAgICBwYXRoIF9fcDJfOworICAg
IHN0cmluZyBfX3doYXRfOworICB9OworICBzaGFyZWRfcHRyPF9TdG9yYWdlPiBfX3N0b3JhZ2Vf
OworfTsKKwordGVtcGxhdGUgPGNsYXNzLi4uIF9BcmdzPgorX0xJQkNQUF9OT1JFVFVSTiBpbmxp
bmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorI2lmbmRlZiBfTElCQ1BQX05PX0VYQ0VQVElP
TlMKKyAgICB2b2lkCisgICAgX190aHJvd19maWxlc3lzdGVtX2Vycm9yKF9BcmdzJiYuLi4gX19h
cmdzKSB7CisgIHRocm93IGZpbGVzeXN0ZW1fZXJyb3Ioc3RkOjpmb3J3YXJkPF9BcmdzPihfX2Fy
Z3MpLi4uKTsKK30KKyNlbHNlCisgICAgdm9pZAorICAgIF9fdGhyb3dfZmlsZXN5c3RlbV9lcnJv
cihfQXJncyYmLi4uKSB7CisgIF9WU1REOjphYm9ydCgpOworfQorI2VuZGlmCisKKy8vIG9wZXJh
dGlvbmFsIGZ1bmN0aW9ucworCitfTElCQ1BQX0ZVTkNfVklTCitwYXRoIF9fYWJzb2x1dGUoY29u
c3QgcGF0aCYsIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMK
K3BhdGggX19jYW5vbmljYWwoY29uc3QgcGF0aCYsIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRy
KTsKK19MSUJDUFBfRlVOQ19WSVMKK3ZvaWQgX19jb3B5KGNvbnN0IHBhdGgmIF9fZnJvbSwgY29u
c3QgcGF0aCYgX190bywgY29weV9vcHRpb25zIF9fb3B0LAorICAgICAgICAgICAgZXJyb3JfY29k
ZSogX19lYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUworYm9vbCBfX2NvcHlfZmlsZShj
b25zdCBwYXRoJiBfX2Zyb20sIGNvbnN0IHBhdGgmIF9fdG8sIGNvcHlfb3B0aW9ucyBfX29wdCwK
KyAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworX0xJQkNQUF9G
VU5DX1ZJUwordm9pZCBfX2NvcHlfc3ltbGluayhjb25zdCBwYXRoJiBfX2V4aXN0aW5nX3N5bWxp
bmssIGNvbnN0IHBhdGgmIF9fbmV3X3N5bWxpbmssCisgICAgICAgICAgICAgICAgICAgIGVycm9y
X2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK2Jvb2wgX19jcmVhdGVf
ZGlyZWN0b3JpZXMoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMgPSBudWxscHRyKTsKK19M
SUJDUFBfRlVOQ19WSVMKK2Jvb2wgX19jcmVhdGVfZGlyZWN0b3J5KGNvbnN0IHBhdGgmIHAsIGVy
cm9yX2NvZGUqIGVjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCitib29sIF9fY3JlYXRl
X2RpcmVjdG9yeShjb25zdCBwYXRoJiBwLCBjb25zdCBwYXRoJiBhdHRyaWJ1dGVzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSogZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVO
Q19WSVMKK3ZvaWQgX19jcmVhdGVfZGlyZWN0b3J5X3N5bWxpbmsoY29uc3QgcGF0aCYgX190bywg
Y29uc3QgcGF0aCYgX19uZXdfc3ltbGluaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUwordm9pZCBf
X2NyZWF0ZV9oYXJkX2xpbmsoY29uc3QgcGF0aCYgX190bywgY29uc3QgcGF0aCYgX19uZXdfaGFy
ZF9saW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSogX19lYyA9IG51bGxw
dHIpOworX0xJQkNQUF9GVU5DX1ZJUwordm9pZCBfX2NyZWF0ZV9zeW1saW5rKGNvbnN0IHBhdGgm
IF9fdG8sIGNvbnN0IHBhdGgmIF9fbmV3X3N5bWxpbmssCisgICAgICAgICAgICAgICAgICAgICAg
ZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUworcGF0aCBfX2N1
cnJlbnRfcGF0aChlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklT
Cit2b2lkIF9fY3VycmVudF9wYXRoKGNvbnN0IHBhdGgmLCBlcnJvcl9jb2RlKiBfX2VjID0gbnVs
bHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCitib29sIF9fZXF1aXZhbGVudChjb25zdCBwYXRoJiwg
Y29uc3QgcGF0aCYsIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19W
SVMKK3VpbnRtYXhfdCBfX2ZpbGVfc2l6ZShjb25zdCBwYXRoJiwgZXJyb3JfY29kZSogX19lYyA9
IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUwordWludG1heF90IF9faGFyZF9saW5rX2NvdW50
KGNvbnN0IHBhdGgmLCBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNf
VklTCitib29sIF9fZnNfaXNfZW1wdHkoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMgPSBu
dWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK2ZpbGVfdGltZV90eXBlIF9fbGFzdF93cml0ZV90
aW1lKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZV
TkNfVklTCit2b2lkIF9fbGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgmIHAsIGZpbGVfdGltZV90
eXBlIG5ld190aW1lLAorICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlKiBlYyA9IG51
bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUwordm9pZCBfX3Blcm1pc3Npb25zKGNvbnN0IHBhdGgm
LCBwZXJtcywgcGVybV9vcHRpb25zLCBlcnJvcl9jb2RlKiA9IG51bGxwdHIpOworX0xJQkNQUF9G
VU5DX1ZJUworcGF0aCBfX3JlYWRfc3ltbGluayhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBl
YyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUworYm9vbCBfX3JlbW92ZShjb25zdCBwYXRo
JiBwLCBlcnJvcl9jb2RlKiBlYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUwordWludG1h
eF90IF9fcmVtb3ZlX2FsbChjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYyA9IG51bGxwdHIp
OworX0xJQkNQUF9GVU5DX1ZJUwordm9pZCBfX3JlbmFtZShjb25zdCBwYXRoJiBmcm9tLCBjb25z
dCBwYXRoJiB0bywgZXJyb3JfY29kZSogZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMK
K3ZvaWQgX19yZXNpemVfZmlsZShjb25zdCBwYXRoJiBwLCB1aW50bWF4X3Qgc2l6ZSwgZXJyb3Jf
Y29kZSogZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3NwYWNlX2luZm8gX19zcGFj
ZShjb25zdCBwYXRoJiwgZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5D
X1ZJUworZmlsZV9zdGF0dXMgX19zdGF0dXMoY29uc3QgcGF0aCYsIGVycm9yX2NvZGUqIF9fZWMg
PSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK2ZpbGVfc3RhdHVzIF9fc3ltbGlua19zdGF0
dXMoY29uc3QgcGF0aCYsIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVO
Q19WSVMKK3BhdGggX19zeXN0ZW1fY29tcGxldGUoY29uc3QgcGF0aCYsIGVycm9yX2NvZGUqIF9f
ZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3BhdGggX190ZW1wX2RpcmVjdG9yeV9w
YXRoKGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3BhdGgg
X193ZWFrbHlfY2Fub25pY2FsKHBhdGggY29uc3QmIF9fcCwgZXJyb3JfY29kZSogX19lYyA9IG51
bGxwdHIpOworCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIGN1cnJlbnRf
cGF0aCgpIHsKKyAgcmV0dXJuIF9fY3VycmVudF9wYXRoKCk7Cit9CisKK2lubGluZSBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIHBhdGggY3VycmVudF9wYXRoKGVycm9yX2NvZGUmIF9fZWMpIHsK
KyAgcmV0dXJuIF9fY3VycmVudF9wYXRoKCZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkgdm9pZCBjdXJyZW50X3BhdGgoY29uc3QgcGF0aCYgX19wKSB7CisgIF9f
Y3VycmVudF9wYXRoKF9fcCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IHZvaWQgY3VycmVudF9wYXRoKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0
IHsKKyAgX19jdXJyZW50X3BhdGgoX19wLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZIHBhdGggYWJzb2x1dGUoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVy
biBfX2Fic29sdXRlKF9fcCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IHBhdGggYWJzb2x1dGUoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7CisgIHJldHVybiBfX2Fi
c29sdXRlKF9fcCwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBwYXRoIGNhbm9uaWNhbChjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIF9fY2Fub25pY2Fs
KF9fcCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggY2Fub25p
Y2FsKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIHsKKyAgcmV0dXJuIF9fY2Fub25pY2FsKF9f
cCwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIGNv
cHkoY29uc3QgcGF0aCYgX19mcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHBhdGgmIF9fdG8pIHsKKyAgX19jb3B5KF9fZnJvbSwgX190bywgY29w
eV9vcHRpb25zOjpub25lKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkg
dm9pZCBjb3B5KGNvbnN0IHBhdGgmIF9fZnJvbSwgY29uc3QgcGF0aCYgX190bywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7Cisg
IF9fY29weShfX2Zyb20sIF9fdG8sIGNvcHlfb3B0aW9uczo6bm9uZSwgJl9fZWMpOworfQorCitp
bmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIGNvcHkoY29uc3QgcGF0aCYgX19m
cm9tLCBjb25zdCBwYXRoJiBfX3RvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvcHlfb3B0aW9ucyBfX29wdCkgeworICBfX2NvcHkoX19mcm9tLCBfX3RvLCBf
X29wdCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQgY29weShj
b25zdCBwYXRoJiBfX2Zyb20sIGNvbnN0IHBhdGgmIF9fdG8sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29weV9vcHRpb25zIF9fb3B0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIHsKKyAgX19j
b3B5KF9fZnJvbSwgX190bywgX19vcHQsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkgYm9vbCBjb3B5X2ZpbGUoY29uc3QgcGF0aCYgX19mcm9tLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX190
bykgeworICByZXR1cm4gX19jb3B5X2ZpbGUoX19mcm9tLCBfX3RvLCBjb3B5X29wdGlvbnM6Om5v
bmUpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sCitjb3B5X2Zp
bGUoY29uc3QgcGF0aCYgX19mcm9tLCBjb25zdCBwYXRoJiBfX3RvLCBlcnJvcl9jb2RlJiBfX2Vj
KSB7CisgIHJldHVybiBfX2NvcHlfZmlsZShfX2Zyb20sIF9fdG8sIGNvcHlfb3B0aW9uczo6bm9u
ZSwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sCitj
b3B5X2ZpbGUoY29uc3QgcGF0aCYgX19mcm9tLCBjb25zdCBwYXRoJiBfX3RvLCBjb3B5X29wdGlv
bnMgX19vcHQpIHsKKyAgcmV0dXJuIF9fY29weV9maWxlKF9fZnJvbSwgX190bywgX19vcHQpOwor
fQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGNvcHlfZmlsZShjb25z
dCBwYXRoJiBfX2Zyb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBwYXRoJiBfX3RvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29weV9vcHRpb25zIF9fb3B0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgeworICByZXR1
cm4gX19jb3B5X2ZpbGUoX19mcm9tLCBfX3RvLCBfX29wdCwgJl9fZWMpOworfQorCitpbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIGNvcHlfc3ltbGluayhjb25zdCBwYXRoJiBf
X2V4aXN0aW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgcGF0aCYgX19uZXcpIHsKKyAgX19jb3B5X3N5bWxpbmsoX19leGlzdGluZywg
X19uZXcpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkCitjb3B5
X3N5bWxpbmsoY29uc3QgcGF0aCYgX19leHQsIGNvbnN0IHBhdGgmIF9fbmV3LCBlcnJvcl9jb2Rl
JiBfX2VjKSBub2V4Y2VwdCB7CisgIF9fY29weV9zeW1saW5rKF9fZXh0LCBfX25ldywgJl9fZWMp
OworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGNyZWF0ZV9kaXJl
Y3Rvcmllcyhjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIF9fY3JlYXRlX2RpcmVjdG9yaWVz
KF9fcCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgY3JlYXRl
X2RpcmVjdG9yaWVzKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIHsKKyAgcmV0
dXJuIF9fY3JlYXRlX2RpcmVjdG9yaWVzKF9fcCwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSBib29sIGNyZWF0ZV9kaXJlY3RvcnkoY29uc3QgcGF0aCYgX19w
KSB7CisgIHJldHVybiBfX2NyZWF0ZV9kaXJlY3RvcnkoX19wKTsKK30KKworaW5saW5lIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbAorY3JlYXRlX2RpcmVjdG9yeShjb25zdCBwYXRoJiBf
X3AsIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fY3JlYXRlX2RpcmVj
dG9yeShfX3AsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkg
Ym9vbCBjcmVhdGVfZGlyZWN0b3J5KGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX2F0dHJz
KSB7CisgIHJldHVybiBfX2NyZWF0ZV9kaXJlY3RvcnkoX19wLCBfX2F0dHJzKTsKK30KKworaW5s
aW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbAorY3JlYXRlX2RpcmVjdG9yeShjb25z
dCBwYXRoJiBfX3AsIGNvbnN0IHBhdGgmIF9fYXR0cnMsCisgICAgICAgICAgICAgICAgIGVycm9y
X2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fY3JlYXRlX2RpcmVjdG9yeShfX3As
IF9fYXR0cnMsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkg
dm9pZAorY3JlYXRlX2RpcmVjdG9yeV9zeW1saW5rKGNvbnN0IHBhdGgmIF9fdG8sIGNvbnN0IHBh
dGgmIF9fbmV3KSB7CisgIF9fY3JlYXRlX2RpcmVjdG9yeV9zeW1saW5rKF9fdG8sIF9fbmV3KTsK
K30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZAorY3JlYXRlX2RpcmVj
dG9yeV9zeW1saW5rKGNvbnN0IHBhdGgmIF9fdG8sIGNvbnN0IHBhdGgmIF9fbmV3LAorICAgICAg
ICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgX19jcmVh
dGVfZGlyZWN0b3J5X3N5bWxpbmsoX190bywgX19uZXcsICZfX2VjKTsKK30KKworaW5saW5lIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCBjcmVhdGVfaGFyZF9saW5rKGNvbnN0IHBhdGgm
IF9fdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgcGF0aCYgX19uZXcpIHsKKyAgX19jcmVhdGVfaGFyZF9saW5rKF9fdG8sIF9f
bmV3KTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZAorY3JlYXRl
X2hhcmRfbGluayhjb25zdCBwYXRoJiBfX3RvLCBjb25zdCBwYXRoJiBfX25ldywKKyAgICAgICAg
ICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICBfX2NyZWF0ZV9oYXJkX2xp
bmsoX190bywgX19uZXcsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkgdm9pZCBjcmVhdGVfc3ltbGluayhjb25zdCBwYXRoJiBfX3RvLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX25l
dykgeworICBfX2NyZWF0ZV9zeW1saW5rKF9fdG8sIF9fbmV3KTsKK30KKworaW5saW5lIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZAorY3JlYXRlX3N5bWxpbmsoY29uc3QgcGF0aCYgX190
bywgY29uc3QgcGF0aCYgX19uZXcsIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0
dXJuIF9fY3JlYXRlX3N5bWxpbmsoX190bywgX19uZXcsICZfX2VjKTsKK30KKworaW5saW5lIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBzdGF0dXNfa25vd24oZmlsZV9zdGF0dXMgX19z
KSBub2V4Y2VwdCB7CisgIHJldHVybiBfX3MudHlwZSgpICE9IGZpbGVfdHlwZTo6bm9uZTsKK30K
KworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBleGlzdHMoZmlsZV9zdGF0
dXMgX19zKSBub2V4Y2VwdCB7CisgIHJldHVybiBzdGF0dXNfa25vd24oX19zKSAmJiBfX3MudHlw
ZSgpICE9IGZpbGVfdHlwZTo6bm90X2ZvdW5kOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWSBib29sIGV4aXN0cyhjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIGV4aXN0
cyhfX3N0YXR1cyhfX3ApKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkg
Ym9vbCBleGlzdHMoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICBhdXRvIF9f
cyA9IF9fc3RhdHVzKF9fcCwgJl9fZWMpOworICBpZiAoc3RhdHVzX2tub3duKF9fcykpCisgICAg
X19lYy5jbGVhcigpOworICByZXR1cm4gZXhpc3RzKF9fcyk7Cit9CisKK2lubGluZSBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIGJvb2wgZXF1aXZhbGVudChjb25zdCBwYXRoJiBfX3AxLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGgm
IF9fcDIpIHsKKyAgcmV0dXJuIF9fZXF1aXZhbGVudChfX3AxLCBfX3AyKTsKK30KKworaW5saW5l
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbAorZXF1aXZhbGVudChjb25zdCBwYXRoJiBf
X3AxLCBjb25zdCBwYXRoJiBfX3AyLCBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJl
dHVybiBfX2VxdWl2YWxlbnQoX19wMSwgX19wMiwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSB1aW50bWF4X3QgZmlsZV9zaXplKGNvbnN0IHBhdGgmIF9fcCkg
eworICByZXR1cm4gX19maWxlX3NpemUoX19wKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkgdWludG1heF90CitmaWxlX3NpemUoY29uc3QgcGF0aCYgX19wLCBlcnJvcl9j
b2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX2ZpbGVfc2l6ZShfX3AsICZfX2VjKTsK
K30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdWludG1heF90IGhhcmRfbGlu
a19jb3VudChjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIF9faGFyZF9saW5rX2NvdW50KF9f
cCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHVpbnRtYXhfdAoraGFy
ZF9saW5rX2NvdW50KGNvbnN0IHBhdGgmIF9fcCwgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQg
eworICByZXR1cm4gX19oYXJkX2xpbmtfY291bnQoX19wLCAmX19lYyk7Cit9CisKK2lubGluZSBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfYmxvY2tfZmlsZShmaWxlX3N0YXR1cyBf
X3MpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fcy50eXBlKCkgPT0gZmlsZV90eXBlOjpibG9jazsK
K30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19ibG9ja19maWxl
KGNvbnN0IHBhdGgmIF9fcCkgeworICByZXR1cm4gaXNfYmxvY2tfZmlsZShfX3N0YXR1cyhfX3Ap
KTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19ibG9ja19m
aWxlKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBp
c19ibG9ja19maWxlKF9fc3RhdHVzKF9fcCwgJl9fZWMpKTsKK30KKworaW5saW5lIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkgYm9vbAoraXNfY2hhcmFjdGVyX2ZpbGUoZmlsZV9zdGF0dXMgX19z
KSBub2V4Y2VwdCB7CisgIHJldHVybiBfX3MudHlwZSgpID09IGZpbGVfdHlwZTo6Y2hhcmFjdGVy
OworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX2NoYXJhY3Rl
cl9maWxlKGNvbnN0IHBhdGgmIF9fcCkgeworICByZXR1cm4gaXNfY2hhcmFjdGVyX2ZpbGUoX19z
dGF0dXMoX19wKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wK
K2lzX2NoYXJhY3Rlcl9maWxlKGNvbnN0IHBhdGgmIF9fcCwgZXJyb3JfY29kZSYgX19lYykgbm9l
eGNlcHQgeworICByZXR1cm4gaXNfY2hhcmFjdGVyX2ZpbGUoX19zdGF0dXMoX19wLCAmX19lYykp
OworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX2RpcmVjdG9y
eShmaWxlX3N0YXR1cyBfX3MpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fcy50eXBlKCkgPT0gZmls
ZV90eXBlOjpkaXJlY3Rvcnk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IGJvb2wgaXNfZGlyZWN0b3J5KGNvbnN0IHBhdGgmIF9fcCkgeworICByZXR1cm4gaXNfZGlyZWN0
b3J5KF9fc3RhdHVzKF9fcCkpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBib29sIGlzX2RpcmVjdG9yeShjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2Vw
dCB7CisgIHJldHVybiBpc19kaXJlY3RvcnkoX19zdGF0dXMoX19wLCAmX19lYykpOworfQorCitp
bmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX2VtcHR5KGNvbnN0IHBhdGgm
IF9fcCkgeworICByZXR1cm4gX19mc19pc19lbXB0eShfX3ApOworfQorCitpbmxpbmUgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX2VtcHR5KGNvbnN0IHBhdGgmIF9fcCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19l
YykgeworICByZXR1cm4gX19mc19pc19lbXB0eShfX3AsICZfX2VjKTsKK30KKworaW5saW5lIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19maWZvKGZpbGVfc3RhdHVzIF9fcykgbm9l
eGNlcHQgeworICByZXR1cm4gX19zLnR5cGUoKSA9PSBmaWxlX3R5cGU6OmZpZm87Cit9Citpbmxp
bmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX2ZpZm8oY29uc3QgcGF0aCYgX19w
KSB7CisgIHJldHVybiBpc19maWZvKF9fc3RhdHVzKF9fcCkpOworfQorCitpbmxpbmUgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX2ZpZm8oY29uc3QgcGF0aCYgX19wLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMp
IG5vZXhjZXB0IHsKKyAgcmV0dXJuIGlzX2ZpZm8oX19zdGF0dXMoX19wLCAmX19lYykpOworfQor
CitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sCitpc19yZWd1bGFyX2ZpbGUo
ZmlsZV9zdGF0dXMgX19zKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX3MudHlwZSgpID09IGZpbGVf
dHlwZTo6cmVndWxhcjsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9v
bCBpc19yZWd1bGFyX2ZpbGUoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBpc19yZWd1bGFy
X2ZpbGUoX19zdGF0dXMoX19wKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIGJvb2wKK2lzX3JlZ3VsYXJfZmlsZShjb25zdCBwYXRoJiBfX3AsIGVycm9yX2NvZGUmIF9f
ZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIGlzX3JlZ3VsYXJfZmlsZShfX3N0YXR1cyhfX3AsICZf
X2VjKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfc29j
a2V0KGZpbGVfc3RhdHVzIF9fcykgbm9leGNlcHQgeworICByZXR1cm4gX19zLnR5cGUoKSA9PSBm
aWxlX3R5cGU6OnNvY2tldDsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkg
Ym9vbCBpc19zb2NrZXQoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBpc19zb2NrZXQoX19z
dGF0dXMoX19wKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wg
aXNfc29ja2V0KGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJu
IGlzX3NvY2tldChfX3N0YXR1cyhfX3AsICZfX2VjKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZIGJvb2wgaXNfc3ltbGluayhmaWxlX3N0YXR1cyBfX3MpIG5vZXhjZXB0
IHsKKyAgcmV0dXJuIF9fcy50eXBlKCkgPT0gZmlsZV90eXBlOjpzeW1saW5rOworfQorCitpbmxp
bmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX3N5bWxpbmsoY29uc3QgcGF0aCYg
X19wKSB7CisgIHJldHVybiBpc19zeW1saW5rKF9fc3ltbGlua19zdGF0dXMoX19wKSk7Cit9CisK
K2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfc3ltbGluayhjb25zdCBw
YXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICByZXR1cm4gaXNfc3ltbGluayhfX3N5
bWxpbmtfc3RhdHVzKF9fcCwgJl9fZWMpKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgYm9vbCBpc19vdGhlcihmaWxlX3N0YXR1cyBfX3MpIG5vZXhjZXB0IHsKKyAgcmV0
dXJuIGV4aXN0cyhfX3MpICYmICFpc19yZWd1bGFyX2ZpbGUoX19zKSAmJiAhaXNfZGlyZWN0b3J5
KF9fcykgJiYKKyAgICAgICAgICFpc19zeW1saW5rKF9fcyk7Cit9CisKK2lubGluZSBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfb3RoZXIoY29uc3QgcGF0aCYgX19wKSB7CisgIHJl
dHVybiBpc19vdGhlcihfX3N0YXR1cyhfX3ApKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkgYm9vbCBpc19vdGhlcihjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhj
ZXB0IHsKKyAgcmV0dXJuIGlzX290aGVyKF9fc3RhdHVzKF9fcCwgJl9fZWMpKTsKK30KKworaW5s
aW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgZmlsZV90aW1lX3R5cGUKK2xhc3Rfd3JpdGVf
dGltZShjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIF9fbGFzdF93cml0ZV90aW1lKF9fcCk7
Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGZpbGVfdGltZV90eXBlCits
YXN0X3dyaXRlX3RpbWUoY29uc3QgcGF0aCYgX19wLCBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2Vw
dCB7CisgIHJldHVybiBfX2xhc3Rfd3JpdGVfdGltZShfX3AsICZfX2VjKTsKK30KKworaW5saW5l
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCBsYXN0X3dyaXRlX3RpbWUoY29uc3QgcGF0
aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmlsZV90aW1lX3R5cGUgX190KSB7CisgIF9fbGFzdF93cml0ZV90aW1lKF9fcCwgX190
KTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZAorbGFzdF93cml0
ZV90aW1lKGNvbnN0IHBhdGgmIF9fcCwgZmlsZV90aW1lX3R5cGUgX190LAorICAgICAgICAgICAg
ICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgX19sYXN0X3dyaXRlX3RpbWUoX19w
LCBfX3QsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9p
ZAorcGVybWlzc2lvbnMoY29uc3QgcGF0aCYgX19wLCBwZXJtcyBfX3BybXMsCisgICAgICAgICAg
ICBwZXJtX29wdGlvbnMgX19vcHRzID0gcGVybV9vcHRpb25zOjpyZXBsYWNlKSB7CisgIF9fcGVy
bWlzc2lvbnMoX19wLCBfX3BybXMsIF9fb3B0cyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIHZvaWQgcGVybWlzc2lvbnMoY29uc3QgcGF0aCYgX19wLCBwZXJtcyBfX3By
bXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVy
cm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgX19wZXJtaXNzaW9ucyhfX3AsIF9fcHJtcywg
cGVybV9vcHRpb25zOjpyZXBsYWNlLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIHZvaWQgcGVybWlzc2lvbnMoY29uc3QgcGF0aCYgX19wLCBwZXJtcyBfX3By
bXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBl
cm1fb3B0aW9ucyBfX29wdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIHsKKyAgX19wZXJtaXNzaW9ucyhfX3AsIF9f
cHJtcywgX19vcHRzLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIHBhdGggcHJveGltYXRlKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9fYmFzZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMp
IHsKKyAgcGF0aCBfX3RtcCA9IF9fd2Vha2x5X2Nhbm9uaWNhbChfX3AsICZfX2VjKTsKKyAgaWYg
KF9fZWMpCisgICAgcmV0dXJuIHt9OworICBwYXRoIF9fdG1wX2Jhc2UgPSBfX3dlYWtseV9jYW5v
bmljYWwoX19iYXNlLCAmX19lYyk7CisgIGlmIChfX2VjKQorICAgIHJldHVybiB7fTsKKyAgcmV0
dXJuIF9fdG1wLmxleGljYWxseV9wcm94aW1hdGUoX190bXBfYmFzZSk7Cit9CisKK2lubGluZSBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggcHJveGltYXRlKGNvbnN0IHBhdGgmIF9fcCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2Nv
ZGUmIF9fZWMpIHsKKyAgcmV0dXJuIHByb3hpbWF0ZShfX3AsIGN1cnJlbnRfcGF0aCgpLCBfX2Vj
KTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aAorcHJveGltYXRl
KGNvbnN0IHBhdGgmIF9fcCwgY29uc3QgcGF0aCYgX19iYXNlID0gY3VycmVudF9wYXRoKCkpIHsK
KyAgcmV0dXJuIF9fd2Vha2x5X2Nhbm9uaWNhbChfX3ApLmxleGljYWxseV9wcm94aW1hdGUoCisg
ICAgICBfX3dlYWtseV9jYW5vbmljYWwoX19iYXNlKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZIHBhdGggcmVhZF9zeW1saW5rKGNvbnN0IHBhdGgmIF9fcCkgeworICBy
ZXR1cm4gX19yZWFkX3N5bWxpbmsoX19wKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgcGF0aCByZWFkX3N5bWxpbmsoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykg
eworICByZXR1cm4gX19yZWFkX3N5bWxpbmsoX19wLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggcmVsYXRpdmUoY29uc3QgcGF0aCYgX19wLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBf
X2Jhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVy
cm9yX2NvZGUmIF9fZWMpIHsKKyAgcGF0aCBfX3RtcCA9IF9fd2Vha2x5X2Nhbm9uaWNhbChfX3As
ICZfX2VjKTsKKyAgaWYgKF9fZWMpCisgICAgcmV0dXJuIHBhdGgoKTsKKyAgcGF0aCBfX3RtcGJh
c2UgPSBfX3dlYWtseV9jYW5vbmljYWwoX19iYXNlLCAmX19lYyk7CisgIGlmIChfX2VjKQorICAg
IHJldHVybiBwYXRoKCk7CisgIHJldHVybiBfX3RtcC5sZXhpY2FsbHlfcmVsYXRpdmUoX190bXBi
YXNlKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCByZWxhdGl2
ZShjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIHsKKyAgcmV0dXJuIHJlbGF0aXZlKF9fcCwgY3Vy
cmVudF9wYXRoKCksIF9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBwYXRoCityZWxhdGl2ZShjb25zdCBwYXRoJiBfX3AsIGNvbnN0IHBhdGgmIF9fYmFzZSA9IGN1
cnJlbnRfcGF0aCgpKSB7CisgIHJldHVybiBfX3dlYWtseV9jYW5vbmljYWwoX19wKS5sZXhpY2Fs
bHlfcmVsYXRpdmUoX193ZWFrbHlfY2Fub25pY2FsKF9fYmFzZSkpOworfQorCitpbmxpbmUgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIHJlbW92ZShjb25zdCBwYXRoJiBfX3ApIHsKKyAg
cmV0dXJuIF9fcmVtb3ZlKF9fcCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIGJvb2wgcmVtb3ZlKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0
dXJuIF9fcmVtb3ZlKF9fcCwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWSB1aW50bWF4X3QgcmVtb3ZlX2FsbChjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJu
IF9fcmVtb3ZlX2FsbChfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSB1aW50bWF4X3QgcmVtb3ZlX2FsbChjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7
CisgIHJldHVybiBfX3JlbW92ZV9hbGwoX19wLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIHZvaWQgcmVuYW1lKGNvbnN0IHBhdGgmIF9fZnJvbSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9fdG8p
IHsKKyAgcmV0dXJuIF9fcmVuYW1lKF9fZnJvbSwgX190byk7Cit9CisKK2lubGluZSBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIHZvaWQKK3JlbmFtZShjb25zdCBwYXRoJiBfX2Zyb20sIGNvbnN0
IHBhdGgmIF9fdG8sIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fcmVu
YW1lKF9fZnJvbSwgX190bywgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWSB2b2lkIHJlc2l6ZV9maWxlKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludG1heF90IF9fbnMpIHsKKyAg
cmV0dXJuIF9fcmVzaXplX2ZpbGUoX19wLCBfX25zKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkgdm9pZAorcmVzaXplX2ZpbGUoY29uc3QgcGF0aCYgX19wLCB1aW50bWF4
X3QgX19ucywgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICByZXR1cm4gX19yZXNpemVf
ZmlsZShfX3AsIF9fbnMsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkgc3BhY2VfaW5mbyBzcGFjZShjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIF9fc3Bh
Y2UoX19wKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3BhY2VfaW5m
byBzcGFjZShjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJu
IF9fc3BhY2UoX19wLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIGZpbGVfc3RhdHVzIHN0YXR1cyhjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIF9fc3Rh
dHVzKF9fcCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGZpbGVfc3Rh
dHVzIHN0YXR1cyhjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICBy
ZXR1cm4gX19zdGF0dXMoX19wLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZIGZpbGVfc3RhdHVzIHN5bWxpbmtfc3RhdHVzKGNvbnN0IHBhdGgmIF9fcCkgewor
ICByZXR1cm4gX19zeW1saW5rX3N0YXR1cyhfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBmaWxlX3N0YXR1cworc3ltbGlua19zdGF0dXMoY29uc3QgcGF0aCYgX19w
LCBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX3N5bWxpbmtfc3RhdHVz
KF9fcCwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRo
IHRlbXBfZGlyZWN0b3J5X3BhdGgoKSB7CisgIHJldHVybiBfX3RlbXBfZGlyZWN0b3J5X3BhdGgo
KTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCB0ZW1wX2RpcmVj
dG9yeV9wYXRoKGVycm9yX2NvZGUmIF9fZWMpIHsKKyAgcmV0dXJuIF9fdGVtcF9kaXJlY3Rvcnlf
cGF0aCgmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGgg
d2Vha2x5X2Nhbm9uaWNhbChwYXRoIGNvbnN0JiBfX3ApIHsKKyAgcmV0dXJuIF9fd2Vha2x5X2Nh
bm9uaWNhbChfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRo
IHdlYWtseV9jYW5vbmljYWwocGF0aCBjb25zdCYgX19wLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIHsKKyAg
cmV0dXJuIF9fd2Vha2x5X2Nhbm9uaWNhbChfX3AsICZfX2VjKTsKK30KKworY2xhc3MgZGlyZWN0
b3J5X2l0ZXJhdG9yOworY2xhc3MgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjsKK2NsYXNz
IF9fZGlyX3N0cmVhbTsKKworY2xhc3MgZGlyZWN0b3J5X2VudHJ5IHsKKyAgdHlwZWRlZiBfVlNU
RF9GUzo6cGF0aCBfUGF0aDsKKworcHVibGljOgorICAvLyBjb25zdHJ1Y3RvcnMgYW5kIGRlc3Ry
dWN0b3JzCisgIGRpcmVjdG9yeV9lbnRyeSgpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKyAgZGlyZWN0
b3J5X2VudHJ5KGRpcmVjdG9yeV9lbnRyeSBjb25zdCYpID0gZGVmYXVsdDsKKyAgZGlyZWN0b3J5
X2VudHJ5KGRpcmVjdG9yeV9lbnRyeSYmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisKKyAgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWQorICBleHBsaWNpdCBkaXJlY3RvcnlfZW50cnkoX1BhdGggY29u
c3QmIF9fcCkgOiBfX3BfKF9fcCkgeworICAgIGVycm9yX2NvZGUgX19lYzsKKyAgICBfX3JlZnJl
c2goJl9fZWMpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBkaXJlY3Rv
cnlfZW50cnkoX1BhdGggY29uc3QmIF9fcCwgZXJyb3JfY29kZSYgX19lYykgOiBfX3BfKF9fcCkg
eworICAgIF9fcmVmcmVzaCgmX19lYyk7CisgIH0KKworICB+ZGlyZWN0b3J5X2VudHJ5KCkge30K
KworICBkaXJlY3RvcnlfZW50cnkmIG9wZXJhdG9yPShkaXJlY3RvcnlfZW50cnkgY29uc3QmKSA9
IGRlZmF1bHQ7CisgIGRpcmVjdG9yeV9lbnRyeSYgb3BlcmF0b3I9KGRpcmVjdG9yeV9lbnRyeSYm
KSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB2
b2lkIGFzc2lnbihfUGF0aCBjb25zdCYgX19wKSB7CisgICAgX19wXyA9IF9fcDsKKyAgICBlcnJv
cl9jb2RlIF9fZWM7CisgICAgX19yZWZyZXNoKCZfX2VjKTsKKyAgfQorCisgIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkKKyAgdm9pZCBhc3NpZ24oX1BhdGggY29uc3QmIF9fcCwgZXJyb3JfY29k
ZSYgX19lYykgeworICAgIF9fcF8gPSBfX3A7CisgICAgX19yZWZyZXNoKCZfX2VjKTsKKyAgfQor
CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdm9pZCByZXBsYWNlX2ZpbGVuYW1lKF9Q
YXRoIGNvbnN0JiBfX3ApIHsKKyAgICBfX3BfLnJlcGxhY2VfZmlsZW5hbWUoX19wKTsKKyAgICBl
cnJvcl9jb2RlIF9fZWM7CisgICAgX19yZWZyZXNoKCZfX2VjKTsKKyAgfQorCisgIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkKKyAgdm9pZCByZXBsYWNlX2ZpbGVuYW1lKF9QYXRoIGNvbnN0JiBf
X3AsIGVycm9yX2NvZGUmIF9fZWMpIHsKKyAgICBfX3BfID0gX19wXy5wYXJlbnRfcGF0aCgpIC8g
X19wOworICAgIF9fcmVmcmVzaCgmX19lYyk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZCisgIHZvaWQgcmVmcmVzaCgpIHsgX19yZWZyZXNoKCk7IH0KKworICBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZCisgIHZvaWQgcmVmcmVzaChlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2Vw
dCB7IF9fcmVmcmVzaCgmX19lYyk7IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisg
IF9QYXRoIGNvbnN0JiBwYXRoKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gX19wXzsgfQorCisg
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgb3BlcmF0b3IgY29uc3QgX1BhdGgmKCkgY29u
c3Qgbm9leGNlcHQgeyByZXR1cm4gX19wXzsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkKKyAgYm9vbCBleGlzdHMoKSBjb25zdCB7IHJldHVybiBfVlNURF9GUzo6ZXhpc3RzKGZpbGVf
c3RhdHVze19fZ2V0X2Z0KCl9KTsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAg
Ym9vbCBleGlzdHMoZXJyb3JfY29kZSYgX19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVy
biBfVlNURF9GUzo6ZXhpc3RzKGZpbGVfc3RhdHVze19fZ2V0X2Z0KCZfX2VjKX0pOworICB9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIGlzX2Jsb2NrX2ZpbGUoKSBjb25z
dCB7IHJldHVybiBfX2dldF9mdCgpID09IGZpbGVfdHlwZTo6YmxvY2s7IH0KKworICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgaXNfYmxvY2tfZmlsZShlcnJvcl9jb2RlJiBfX2Vj
KSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X2Z0KCZfX2VjKSA9PSBmaWxlX3R5
cGU6OmJsb2NrOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIGlz
X2NoYXJhY3Rlcl9maWxlKCkgY29uc3QgeyByZXR1cm4gX19nZXRfZnQoKSA9PSBmaWxlX3R5cGU6
OmNoYXJhY3RlcjsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19j
aGFyYWN0ZXJfZmlsZShlcnJvcl9jb2RlJiBfX2VjKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0
dXJuIF9fZ2V0X2Z0KCZfX2VjKSA9PSBmaWxlX3R5cGU6OmNoYXJhY3RlcjsKKyAgfQorCisgIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19kaXJlY3RvcnkoKSBjb25zdCB7IHJl
dHVybiBfX2dldF9mdCgpID09IGZpbGVfdHlwZTo6ZGlyZWN0b3J5OyB9CisKKyAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWQorICBib29sIGlzX2RpcmVjdG9yeShlcnJvcl9jb2RlJiBfX2VjKSBj
b25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X2Z0KCZfX2VjKSA9PSBmaWxlX3R5cGU6
OmRpcmVjdG9yeTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBp
c19maWZvKCkgY29uc3QgeyByZXR1cm4gX19nZXRfZnQoKSA9PSBmaWxlX3R5cGU6OmZpZm87IH0K
KworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgaXNfZmlmbyhlcnJvcl9jb2Rl
JiBfX2VjKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X2Z0KCZfX2VjKSA9PSBm
aWxlX3R5cGU6OmZpZm87CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJv
b2wgaXNfb3RoZXIoKSBjb25zdCB7IHJldHVybiBfVlNURF9GUzo6aXNfb3RoZXIoZmlsZV9zdGF0
dXN7X19nZXRfZnQoKX0pOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29s
IGlzX290aGVyKGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4g
X1ZTVERfRlM6OmlzX290aGVyKGZpbGVfc3RhdHVze19fZ2V0X2Z0KCZfX2VjKX0pOworICB9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIGlzX3JlZ3VsYXJfZmlsZSgpIGNv
bnN0IHsgcmV0dXJuIF9fZ2V0X2Z0KCkgPT0gZmlsZV90eXBlOjpyZWd1bGFyOyB9CisKKyAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIGlzX3JlZ3VsYXJfZmlsZShlcnJvcl9jb2Rl
JiBfX2VjKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X2Z0KCZfX2VjKSA9PSBm
aWxlX3R5cGU6OnJlZ3VsYXI7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisg
IGJvb2wgaXNfc29ja2V0KCkgY29uc3QgeyByZXR1cm4gX19nZXRfZnQoKSA9PSBmaWxlX3R5cGU6
OnNvY2tldDsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19zb2Nr
ZXQoZXJyb3JfY29kZSYgX19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX2dldF9m
dCgmX19lYykgPT0gZmlsZV90eXBlOjpzb2NrZXQ7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZCisgIGJvb2wgaXNfc3ltbGluaygpIGNvbnN0IHsgcmV0dXJuIF9fZ2V0X3N5bV9m
dCgpID09IGZpbGVfdHlwZTo6c3ltbGluazsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkKKyAgYm9vbCBpc19zeW1saW5rKGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0IG5vZXhjZXB0IHsK
KyAgICByZXR1cm4gX19nZXRfc3ltX2Z0KCZfX2VjKSA9PSBmaWxlX3R5cGU6OnN5bWxpbms7Cisg
IH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB1aW50bWF4X3QgZmlsZV9zaXplKCkg
Y29uc3QgeyByZXR1cm4gX19nZXRfc2l6ZSgpOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQorICB1aW50bWF4X3QgZmlsZV9zaXplKGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0IG5vZXhj
ZXB0IHsKKyAgICByZXR1cm4gX19nZXRfc2l6ZSgmX19lYyk7CisgIH0KKworICBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZCisgIHVpbnRtYXhfdCBoYXJkX2xpbmtfY291bnQoKSBjb25zdCB7IHJl
dHVybiBfX2dldF9ubGluaygpOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB1
aW50bWF4X3QgaGFyZF9saW5rX2NvdW50KGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0IG5vZXhjZXB0
IHsKKyAgICByZXR1cm4gX19nZXRfbmxpbmsoJl9fZWMpOworICB9CisKKyAgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWQorICBmaWxlX3RpbWVfdHlwZSBsYXN0X3dyaXRlX3RpbWUoKSBjb25zdCB7
IHJldHVybiBfX2dldF93cml0ZV90aW1lKCk7IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZCisgIGZpbGVfdGltZV90eXBlIGxhc3Rfd3JpdGVfdGltZShlcnJvcl9jb2RlJiBfX2VjKSBj
b25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X3dyaXRlX3RpbWUoJl9fZWMpOworICB9
CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBmaWxlX3N0YXR1cyBzdGF0dXMoKSBj
b25zdCB7IHJldHVybiBfX2dldF9zdGF0dXMoKTsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKKyAgZmlsZV9zdGF0dXMgc3RhdHVzKGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0IG5vZXhj
ZXB0IHsKKyAgICByZXR1cm4gX19nZXRfc3RhdHVzKCZfX2VjKTsKKyAgfQorCisgIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV9zdGF0dXMgc3ltbGlua19zdGF0dXMoKSBjb25zdCB7
IHJldHVybiBfX2dldF9zeW1saW5rX3N0YXR1cygpOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWQorICBmaWxlX3N0YXR1cyBzeW1saW5rX3N0YXR1cyhlcnJvcl9jb2RlJiBfX2VjKSBj
b25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X3N5bWxpbmtfc3RhdHVzKCZfX2VjKTsK
KyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBvcGVyYXRvcjwoZGly
ZWN0b3J5X2VudHJ5IGNvbnN0JiBfX3JocykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBf
X3BfIDwgX19yaHMuX19wXzsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAg
Ym9vbCBvcGVyYXRvcj09KGRpcmVjdG9yeV9lbnRyeSBjb25zdCYgX19yaHMpIGNvbnN0IG5vZXhj
ZXB0IHsKKyAgICByZXR1cm4gX19wXyA9PSBfX3Jocy5fX3BfOworICB9CisKKyAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWQorICBib29sIG9wZXJhdG9yIT0oZGlyZWN0b3J5X2VudHJ5IGNvbnN0
JiBfX3JocykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX3BfICE9IF9fcmhzLl9fcF87
CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgb3BlcmF0b3I8PShk
aXJlY3RvcnlfZW50cnkgY29uc3QmIF9fcmhzKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJu
IF9fcF8gPD0gX19yaHMuX19wXzsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
KyAgYm9vbCBvcGVyYXRvcj4oZGlyZWN0b3J5X2VudHJ5IGNvbnN0JiBfX3JocykgY29uc3Qgbm9l
eGNlcHQgeworICAgIHJldHVybiBfX3BfID4gX19yaHMuX19wXzsKKyAgfQorCisgIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBvcGVyYXRvcj49KGRpcmVjdG9yeV9lbnRyeSBjb25z
dCYgX19yaHMpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19wXyA+PSBfX3Jocy5fX3Bf
OworICB9CisKK3ByaXZhdGU6CisgIGZyaWVuZCBjbGFzcyBkaXJlY3RvcnlfaXRlcmF0b3I7Cisg
IGZyaWVuZCBjbGFzcyByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yOworICBmcmllbmQgY2xh
c3MgX19kaXJfc3RyZWFtOworCisgIGVudW0gX0NhY2hlVHlwZSA6IHVuc2lnbmVkIGNoYXIgewor
ICAgIF9FbXB0eSwKKyAgICBfSXRlclN5bWxpbmssCisgICAgX0l0ZXJOb25TeW1saW5rLAorICAg
IF9SZWZyZXNoU3ltbGluaywKKyAgICBfUmVmcmVzaFN5bWxpbmtVbnJlc29sdmVkLAorICAgIF9S
ZWZyZXNoTm9uU3ltbGluaworICB9OworCisgIHN0cnVjdCBfX2NhY2hlZF9kYXRhIHsKKyAgICB1
aW50bWF4X3QgX19zaXplXzsKKyAgICB1aW50bWF4X3QgX19ubGlua187CisgICAgZmlsZV90aW1l
X3R5cGUgX193cml0ZV90aW1lXzsKKyAgICBwZXJtcyBfX3N5bV9wZXJtc187CisgICAgcGVybXMg
X19ub25fc3ltX3Blcm1zXzsKKyAgICBmaWxlX3R5cGUgX190eXBlXzsKKyAgICBfQ2FjaGVUeXBl
IF9fY2FjaGVfdHlwZV87CisKKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgICAgX19j
YWNoZWRfZGF0YSgpIG5vZXhjZXB0IHsgX19yZXNldCgpOyB9CisKKyAgICBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZCisgICAgdm9pZCBfX3Jlc2V0KCkgeworICAgICAgX19jYWNoZV90eXBlXyA9
IF9FbXB0eTsKKyAgICAgIF9fdHlwZV8gPSBmaWxlX3R5cGU6Om5vbmU7CisgICAgICBfX3N5bV9w
ZXJtc18gPSBfX25vbl9zeW1fcGVybXNfID0gcGVybXM6OnVua25vd247CisgICAgICBfX3NpemVf
ID0gX19ubGlua18gPSB1aW50bWF4X3QoLTEpOworICAgICAgX193cml0ZV90aW1lXyA9IGZpbGVf
dGltZV90eXBlOjptaW4oKTsKKyAgICB9CisgIH07CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQorICBzdGF0aWMgX19jYWNoZWRfZGF0YSBfX2NyZWF0ZV9pdGVyX3Jlc3VsdChmaWxlX3R5
cGUgX19mdCkgeworICAgIF9fY2FjaGVkX2RhdGEgX19kYXRhOworICAgIF9fZGF0YS5fX3R5cGVf
ID0gX19mdDsKKyAgICBfX2RhdGEuX19jYWNoZV90eXBlXyA9IFsmXSgpIHsKKyAgICAgIHN3aXRj
aCAoX19mdCkgeworICAgICAgY2FzZSBmaWxlX3R5cGU6Om5vbmU6CisgICAgICAgIHJldHVybiBf
RW1wdHk7CisgICAgICBjYXNlIGZpbGVfdHlwZTo6c3ltbGluazoKKyAgICAgICAgcmV0dXJuIF9J
dGVyU3ltbGluazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBfSXRlck5vblN5bWxp
bms7CisgICAgICB9CisgICAgfSgpOworICAgIHJldHVybiBfX2RhdGE7CisgIH0KKworICBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgX19hc3NpZ25faXRlcl9lbnRyeShfUGF0aCYm
IF9fcCwgX19jYWNoZWRfZGF0YSBfX2R0KSB7CisgICAgX19wXyA9IHN0ZDo6bW92ZShfX3ApOwor
ICAgIF9fZGF0YV8gPSBfX2R0OworICB9CisKKyAgX0xJQkNQUF9GVU5DX1ZJUworICBlcnJvcl9j
b2RlIF9fZG9fcmVmcmVzaCgpIG5vZXhjZXB0OworCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkKKyAgc3RhdGljIGJvb2wgX19pc19kbmVfZXJyb3IoZXJyb3JfY29kZSBjb25zdCYgX19lYykg
eworICAgIGlmICghX19lYykKKyAgICAgIHJldHVybiB0cnVlOworICAgIHN3aXRjaCAoc3RhdGlj
X2Nhc3Q8ZXJyYz4oX19lYy52YWx1ZSgpKSkgeworICAgIGNhc2UgZXJyYzo6bm9fc3VjaF9maWxl
X29yX2RpcmVjdG9yeToKKyAgICBjYXNlIGVycmM6Om5vdF9hX2RpcmVjdG9yeToKKyAgICAgIHJl
dHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9
CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB2b2lkIF9faGFuZGxlX2Vycm9yKGNv
bnN0IGNoYXIqIF9fbXNnLCBlcnJvcl9jb2RlKiBfX2Rlc3RfZWMsCisgICAgICAgICAgICAgICAg
ICAgICAgZXJyb3JfY29kZSBjb25zdCYgX19lYywgYm9vbCBfX2FsbG93X2RuZSA9IGZhbHNlKSBj
b25zdCB7CisgICAgaWYgKF9fZGVzdF9lYykgeworICAgICAgKl9fZGVzdF9lYyA9IF9fZWM7Cisg
ICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChfX2VjICYmICghX19hbGxvd19kbmUgfHwgIV9f
aXNfZG5lX2Vycm9yKF9fZWMpKSkKKyAgICAgIF9fdGhyb3dfZmlsZXN5c3RlbV9lcnJvcihfX21z
ZywgX19wXywgX19lYyk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZv
aWQgX19yZWZyZXNoKGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKSB7CisgICAgX19oYW5kbGVf
ZXJyb3IoImluIGRpcmVjdG9yeV9lbnRyeTo6cmVmcmVzaCIsIF9fZWMsIF9fZG9fcmVmcmVzaCgp
LAorICAgICAgICAgICAgICAgICAgIC8qYWxsb3dfZG5lKi8gdHJ1ZSk7CisgIH0KKworICBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVfdHlwZSBfX2dldF9zeW1fZnQoZXJyb3JfY29k
ZSogX19lYyA9IG51bGxwdHIpIGNvbnN0IHsKKyAgICBzd2l0Y2ggKF9fZGF0YV8uX19jYWNoZV90
eXBlXykgeworICAgIGNhc2UgX0VtcHR5OgorICAgICAgcmV0dXJuIF9fc3ltbGlua19zdGF0dXMo
X19wXywgX19lYykudHlwZSgpOworICAgIGNhc2UgX0l0ZXJTeW1saW5rOgorICAgIGNhc2UgX1Jl
ZnJlc2hTeW1saW5rOgorICAgIGNhc2UgX1JlZnJlc2hTeW1saW5rVW5yZXNvbHZlZDoKKyAgICAg
IGlmIChfX2VjKQorICAgICAgICBfX2VjLT5jbGVhcigpOworICAgICAgcmV0dXJuIGZpbGVfdHlw
ZTo6c3ltbGluazsKKyAgICBjYXNlIF9JdGVyTm9uU3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNo
Tm9uU3ltbGluazoKKyAgICAgIGZpbGVfc3RhdHVzIF9fc3QoX19kYXRhXy5fX3R5cGVfKTsKKyAg
ICAgIGlmIChfX2VjICYmICFfVlNURF9GUzo6ZXhpc3RzKF9fc3QpKQorICAgICAgICAqX19lYyA9
IG1ha2VfZXJyb3JfY29kZShlcnJjOjpub19zdWNoX2ZpbGVfb3JfZGlyZWN0b3J5KTsKKyAgICAg
IGVsc2UgaWYgKF9fZWMpCisgICAgICAgIF9fZWMtPmNsZWFyKCk7CisgICAgICByZXR1cm4gX19k
YXRhXy5fX3R5cGVfOworICAgIH0KKyAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7CisgIH0KKwor
ICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVfdHlwZSBfX2dldF9mdChlcnJvcl9j
b2RlKiBfX2VjID0gbnVsbHB0cikgY29uc3QgeworICAgIHN3aXRjaCAoX19kYXRhXy5fX2NhY2hl
X3R5cGVfKSB7CisgICAgY2FzZSBfRW1wdHk6CisgICAgY2FzZSBfSXRlclN5bWxpbms6CisgICAg
Y2FzZSBfUmVmcmVzaFN5bWxpbmtVbnJlc29sdmVkOgorICAgICAgcmV0dXJuIF9fc3RhdHVzKF9f
cF8sIF9fZWMpLnR5cGUoKTsKKyAgICBjYXNlIF9JdGVyTm9uU3ltbGluazoKKyAgICBjYXNlIF9S
ZWZyZXNoTm9uU3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGluazogeworICAgICAgZmls
ZV9zdGF0dXMgX19zdChfX2RhdGFfLl9fdHlwZV8pOworICAgICAgaWYgKF9fZWMgJiYgIV9WU1RE
X0ZTOjpleGlzdHMoX19zdCkpCisgICAgICAgICpfX2VjID0gbWFrZV9lcnJvcl9jb2RlKGVycmM6
Om5vX3N1Y2hfZmlsZV9vcl9kaXJlY3RvcnkpOworICAgICAgZWxzZSBpZiAoX19lYykKKyAgICAg
ICAgX19lYy0+Y2xlYXIoKTsKKyAgICAgIHJldHVybiBfX2RhdGFfLl9fdHlwZV87CisgICAgfQor
ICAgIH0KKyAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7CisgIH0KKworICBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZCisgIGZpbGVfc3RhdHVzIF9fZ2V0X3N0YXR1cyhlcnJvcl9jb2RlKiBfX2Vj
ID0gbnVsbHB0cikgY29uc3QgeworICAgIHN3aXRjaCAoX19kYXRhXy5fX2NhY2hlX3R5cGVfKSB7
CisgICAgY2FzZSBfRW1wdHk6CisgICAgY2FzZSBfSXRlck5vblN5bWxpbms6CisgICAgY2FzZSBf
SXRlclN5bWxpbms6CisgICAgY2FzZSBfUmVmcmVzaFN5bWxpbmtVbnJlc29sdmVkOgorICAgICAg
cmV0dXJuIF9fc3RhdHVzKF9fcF8sIF9fZWMpOworICAgIGNhc2UgX1JlZnJlc2hOb25TeW1saW5r
OgorICAgIGNhc2UgX1JlZnJlc2hTeW1saW5rOgorICAgICAgcmV0dXJuIGZpbGVfc3RhdHVzKF9f
Z2V0X2Z0KF9fZWMpLCBfX2RhdGFfLl9fbm9uX3N5bV9wZXJtc18pOworICAgIH0KKyAgICBfTElC
Q1BQX1VOUkVBQ0hBQkxFKCk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisg
IGZpbGVfc3RhdHVzIF9fZ2V0X3N5bWxpbmtfc3RhdHVzKGVycm9yX2NvZGUqIF9fZWMgPSBudWxs
cHRyKSBjb25zdCB7CisgICAgc3dpdGNoIChfX2RhdGFfLl9fY2FjaGVfdHlwZV8pIHsKKyAgICBj
YXNlIF9FbXB0eToKKyAgICBjYXNlIF9JdGVyTm9uU3ltbGluazoKKyAgICBjYXNlIF9JdGVyU3lt
bGluazoKKyAgICAgIHJldHVybiBfX3N5bWxpbmtfc3RhdHVzKF9fcF8sIF9fZWMpOworICAgIGNh
c2UgX1JlZnJlc2hOb25TeW1saW5rOgorICAgICAgcmV0dXJuIGZpbGVfc3RhdHVzKF9fZ2V0X3N5
bV9mdChfX2VjKSwgX19kYXRhXy5fX25vbl9zeW1fcGVybXNfKTsKKyAgICBjYXNlIF9SZWZyZXNo
U3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGlua1VucmVzb2x2ZWQ6CisgICAgICByZXR1
cm4gZmlsZV9zdGF0dXMoX19nZXRfc3ltX2Z0KF9fZWMpLCBfX2RhdGFfLl9fc3ltX3Blcm1zXyk7
CisgICAgfQorICAgIF9MSUJDUFBfVU5SRUFDSEFCTEUoKTsKKyAgfQorCisgIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkKKyAgdWludG1heF90IF9fZ2V0X3NpemUoZXJyb3JfY29kZSogX19lYyA9
IG51bGxwdHIpIGNvbnN0IHsKKyAgICBzd2l0Y2ggKF9fZGF0YV8uX19jYWNoZV90eXBlXykgewor
ICAgIGNhc2UgX0VtcHR5OgorICAgIGNhc2UgX0l0ZXJOb25TeW1saW5rOgorICAgIGNhc2UgX0l0
ZXJTeW1saW5rOgorICAgIGNhc2UgX1JlZnJlc2hTeW1saW5rVW5yZXNvbHZlZDoKKyAgICAgIHJl
dHVybiBfVlNURF9GUzo6X19maWxlX3NpemUoX19wXywgX19lYyk7CisgICAgY2FzZSBfUmVmcmVz
aFN5bWxpbms6CisgICAgY2FzZSBfUmVmcmVzaE5vblN5bWxpbms6IHsKKyAgICAgIGVycm9yX2Nv
ZGUgX19tX2VjOworICAgICAgZmlsZV9zdGF0dXMgX19zdChfX2dldF9mdCgmX19tX2VjKSk7Cisg
ICAgICBfX2hhbmRsZV9lcnJvcigiaW4gZGlyZWN0b3J5X2VudHJ5OjpmaWxlX3NpemUiLCBfX2Vj
LCBfX21fZWMpOworICAgICAgaWYgKF9WU1REX0ZTOjpleGlzdHMoX19zdCkgJiYgIV9WU1REX0ZT
Ojppc19yZWd1bGFyX2ZpbGUoX19zdCkpIHsKKyAgICAgICAgZXJyYyBfX2Vycl9raW5kID0gX1ZT
VERfRlM6OmlzX2RpcmVjdG9yeShfX3N0KSA/IGVycmM6OmlzX2FfZGlyZWN0b3J5CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlcnJjOjpu
b3Rfc3VwcG9ydGVkOworICAgICAgICBfX2hhbmRsZV9lcnJvcigiaW4gZGlyZWN0b3J5X2VudHJ5
OjpmaWxlX3NpemUiLCBfX2VjLAorICAgICAgICAgICAgICAgICAgICAgICBtYWtlX2Vycm9yX2Nv
ZGUoX19lcnJfa2luZCkpOworICAgICAgfQorICAgICAgcmV0dXJuIF9fZGF0YV8uX19zaXplXzsK
KyAgICB9CisgICAgfQorICAgIF9MSUJDUFBfVU5SRUFDSEFCTEUoKTsKKyAgfQorCisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdWludG1heF90IF9fZ2V0X25saW5rKGVycm9yX2NvZGUq
IF9fZWMgPSBudWxscHRyKSBjb25zdCB7CisgICAgc3dpdGNoIChfX2RhdGFfLl9fY2FjaGVfdHlw
ZV8pIHsKKyAgICBjYXNlIF9FbXB0eToKKyAgICBjYXNlIF9JdGVyTm9uU3ltbGluazoKKyAgICBj
YXNlIF9JdGVyU3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGlua1VucmVzb2x2ZWQ6Cisg
ICAgICByZXR1cm4gX1ZTVERfRlM6Ol9faGFyZF9saW5rX2NvdW50KF9fcF8sIF9fZWMpOworICAg
IGNhc2UgX1JlZnJlc2hTeW1saW5rOgorICAgIGNhc2UgX1JlZnJlc2hOb25TeW1saW5rOiB7Cisg
ICAgICBlcnJvcl9jb2RlIF9fbV9lYzsKKyAgICAgICh2b2lkKV9fZ2V0X2Z0KCZfX21fZWMpOwor
ICAgICAgX19oYW5kbGVfZXJyb3IoImluIGRpcmVjdG9yeV9lbnRyeTo6aGFyZF9saW5rX2NvdW50
IiwgX19lYywgX19tX2VjKTsKKyAgICAgIHJldHVybiBfX2RhdGFfLl9fbmxpbmtfOworICAgIH0K
KyAgICB9CisgICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOworICB9CisKKyAgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWQorICBmaWxlX3RpbWVfdHlwZSBfX2dldF93cml0ZV90aW1lKGVycm9yX2Nv
ZGUqIF9fZWMgPSBudWxscHRyKSBjb25zdCB7CisgICAgc3dpdGNoIChfX2RhdGFfLl9fY2FjaGVf
dHlwZV8pIHsKKyAgICBjYXNlIF9FbXB0eToKKyAgICBjYXNlIF9JdGVyTm9uU3ltbGluazoKKyAg
ICBjYXNlIF9JdGVyU3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGlua1VucmVzb2x2ZWQ6
CisgICAgICByZXR1cm4gX1ZTVERfRlM6Ol9fbGFzdF93cml0ZV90aW1lKF9fcF8sIF9fZWMpOwor
ICAgIGNhc2UgX1JlZnJlc2hTeW1saW5rOgorICAgIGNhc2UgX1JlZnJlc2hOb25TeW1saW5rOiB7
CisgICAgICBlcnJvcl9jb2RlIF9fbV9lYzsKKyAgICAgIGZpbGVfc3RhdHVzIF9fc3QoX19nZXRf
ZnQoJl9fbV9lYykpOworICAgICAgX19oYW5kbGVfZXJyb3IoImluIGRpcmVjdG9yeV9lbnRyeTo6
bGFzdF93cml0ZV90aW1lIiwgX19lYywgX19tX2VjKTsKKyAgICAgIGlmIChfVlNURF9GUzo6ZXhp
c3RzKF9fc3QpICYmCisgICAgICAgICAgX19kYXRhXy5fX3dyaXRlX3RpbWVfID09IGZpbGVfdGlt
ZV90eXBlOjptaW4oKSkKKyAgICAgICAgX19oYW5kbGVfZXJyb3IoImluIGRpcmVjdG9yeV9lbnRy
eTo6bGFzdF93cml0ZV90aW1lIiwgX19lYywKKyAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9l
cnJvcl9jb2RlKGVycmM6OnZhbHVlX3Rvb19sYXJnZSkpOworICAgICAgcmV0dXJuIF9fZGF0YV8u
X193cml0ZV90aW1lXzsKKyAgICB9CisgICAgfQorICAgIF9MSUJDUFBfVU5SRUFDSEFCTEUoKTsK
KyAgfQorCitwcml2YXRlOgorICBfUGF0aCBfX3BfOworICBfX2NhY2hlZF9kYXRhIF9fZGF0YV87
Cit9OworCitjbGFzcyBfX2Rpcl9lbGVtZW50X3Byb3h5IHsKK3B1YmxpYzoKKyAgaW5saW5lIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgZGlyZWN0b3J5X2VudHJ5IG9wZXJhdG9yKigpIHsKKyAg
ICByZXR1cm4gX1ZTVEQ6Om1vdmUoX19lbGVtXyk7CisgIH0KKworcHJpdmF0ZToKKyAgZnJpZW5k
IGNsYXNzIGRpcmVjdG9yeV9pdGVyYXRvcjsKKyAgZnJpZW5kIGNsYXNzIHJlY3Vyc2l2ZV9kaXJl
Y3RvcnlfaXRlcmF0b3I7CisgIGV4cGxpY2l0IF9fZGlyX2VsZW1lbnRfcHJveHkoZGlyZWN0b3J5
X2VudHJ5IGNvbnN0JiBfX2UpIDogX19lbGVtXyhfX2UpIHt9CisgIF9fZGlyX2VsZW1lbnRfcHJv
eHkoX19kaXJfZWxlbWVudF9wcm94eSYmIF9fbykKKyAgICAgIDogX19lbGVtXyhfVlNURDo6bW92
ZShfX28uX19lbGVtXykpIHt9CisgIGRpcmVjdG9yeV9lbnRyeSBfX2VsZW1fOworfTsKKworY2xh
c3MgZGlyZWN0b3J5X2l0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgdHlwZWRlZiBkaXJlY3RvcnlfZW50
cnkgdmFsdWVfdHlwZTsKKyAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOworICB0
eXBlZGVmIHZhbHVlX3R5cGUgY29uc3QqIHBvaW50ZXI7CisgIHR5cGVkZWYgdmFsdWVfdHlwZSBj
b25zdCYgcmVmZXJlbmNlOworICB0eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9j
YXRlZ29yeTsKKworcHVibGljOgorICAvL2N0b3IgJiBkdG9yCisgIGRpcmVjdG9yeV9pdGVyYXRv
cigpIG5vZXhjZXB0IHt9CisKKyAgZXhwbGljaXQgZGlyZWN0b3J5X2l0ZXJhdG9yKGNvbnN0IHBh
dGgmIF9fcCkKKyAgICAgIDogZGlyZWN0b3J5X2l0ZXJhdG9yKF9fcCwgbnVsbHB0cikge30KKwor
ICBkaXJlY3RvcnlfaXRlcmF0b3IoY29uc3QgcGF0aCYgX19wLCBkaXJlY3Rvcnlfb3B0aW9ucyBf
X29wdHMpCisgICAgICA6IGRpcmVjdG9yeV9pdGVyYXRvcihfX3AsIG51bGxwdHIsIF9fb3B0cykg
e30KKworICBkaXJlY3RvcnlfaXRlcmF0b3IoY29uc3QgcGF0aCYgX19wLCBlcnJvcl9jb2RlJiBf
X2VjKQorICAgICAgOiBkaXJlY3RvcnlfaXRlcmF0b3IoX19wLCAmX19lYykge30KKworICBkaXJl
Y3RvcnlfaXRlcmF0b3IoY29uc3QgcGF0aCYgX19wLCBkaXJlY3Rvcnlfb3B0aW9ucyBfX29wdHMs
CisgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKQorICAgICAgOiBkaXJlY3Rv
cnlfaXRlcmF0b3IoX19wLCAmX19lYywgX19vcHRzKSB7fQorCisgIGRpcmVjdG9yeV9pdGVyYXRv
cihjb25zdCBkaXJlY3RvcnlfaXRlcmF0b3ImKSA9IGRlZmF1bHQ7CisgIGRpcmVjdG9yeV9pdGVy
YXRvcihkaXJlY3RvcnlfaXRlcmF0b3ImJikgPSBkZWZhdWx0OworICBkaXJlY3RvcnlfaXRlcmF0
b3ImIG9wZXJhdG9yPShjb25zdCBkaXJlY3RvcnlfaXRlcmF0b3ImKSA9IGRlZmF1bHQ7CisKKyAg
ZGlyZWN0b3J5X2l0ZXJhdG9yJiBvcGVyYXRvcj0oZGlyZWN0b3J5X2l0ZXJhdG9yJiYgX19vKSBu
b2V4Y2VwdCB7CisgICAgLy8gbm9uLWRlZmF1bHQgaW1wbGVtZW50YXRpb24gcHJvdmlkZWQgdG8g
c3VwcG9ydCBzZWxmLW1vdmUgYXNzaWduLgorICAgIGlmICh0aGlzICE9ICZfX28pIHsKKyAgICAg
IF9faW1wXyA9IF9WU1REOjptb3ZlKF9fby5fX2ltcF8pOworICAgIH0KKyAgICByZXR1cm4gKnRo
aXM7CisgIH0KKworICB+ZGlyZWN0b3J5X2l0ZXJhdG9yKCkgPSBkZWZhdWx0OworCisgIGNvbnN0
IGRpcmVjdG9yeV9lbnRyeSYgb3BlcmF0b3IqKCkgY29uc3QgeworICAgIF9MSUJDUFBfQVNTRVJU
KF9faW1wXywgIlRoZSBlbmQgaXRlcmF0b3IgY2Fubm90IGJlIGRlcmVmZXJlbmNlZCIpOworICAg
IHJldHVybiBfX2RlcmVmZXJlbmNlKCk7CisgIH0KKworICBjb25zdCBkaXJlY3RvcnlfZW50cnkq
IG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKip0aGlzOyB9CisKKyAgZGlyZWN0b3J5X2l0
ZXJhdG9yJiBvcGVyYXRvcisrKCkgeyByZXR1cm4gX19pbmNyZW1lbnQoKTsgfQorCisgIF9fZGly
X2VsZW1lbnRfcHJveHkgb3BlcmF0b3IrKyhpbnQpIHsKKyAgICBfX2Rpcl9lbGVtZW50X3Byb3h5
IF9fcCgqKnRoaXMpOworICAgIF9faW5jcmVtZW50KCk7CisgICAgcmV0dXJuIF9fcDsKKyAgfQor
CisgIGRpcmVjdG9yeV9pdGVyYXRvciYgaW5jcmVtZW50KGVycm9yX2NvZGUmIF9fZWMpIHsgcmV0
dXJuIF9faW5jcmVtZW50KCZfX2VjKTsgfQorCitwcml2YXRlOgorICBpbmxpbmUgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWSBmcmllbmQgYm9vbAorICBvcGVyYXRvcj09KGNvbnN0IGRpcmVjdG9y
eV9pdGVyYXRvciYgX19saHMsCisgICAgICAgICAgICAgY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9y
JiBfX3Jocykgbm9leGNlcHQ7CisKKyAgLy8gY29uc3RydWN0IHRoZSBkaXJfc3RyZWFtCisgIF9M
SUJDUFBfRlVOQ19WSVMKKyAgZGlyZWN0b3J5X2l0ZXJhdG9yKGNvbnN0IHBhdGgmLCBlcnJvcl9j
b2RlKiwKKyAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeV9vcHRpb25zID0gZGlyZWN0b3J5
X29wdGlvbnM6Om5vbmUpOworCisgIF9MSUJDUFBfRlVOQ19WSVMKKyAgZGlyZWN0b3J5X2l0ZXJh
dG9yJiBfX2luY3JlbWVudChlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CisKKyAgX0xJQkNQ
UF9GVU5DX1ZJUworICBjb25zdCBkaXJlY3RvcnlfZW50cnkmIF9fZGVyZWZlcmVuY2UoKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgc2hhcmVkX3B0cjxfX2Rpcl9zdHJlYW0+IF9faW1wXzsKK307CisK
K2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wKK29wZXJhdG9yPT0oY29uc3Qg
ZGlyZWN0b3J5X2l0ZXJhdG9yJiBfX2xocywKKyAgICAgICAgICAgY29uc3QgZGlyZWN0b3J5X2l0
ZXJhdG9yJiBfX3Jocykgbm9leGNlcHQgeworICByZXR1cm4gX19saHMuX19pbXBfID09IF9fcmhz
Ll9faW1wXzsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbAorb3Bl
cmF0b3IhPShjb25zdCBkaXJlY3RvcnlfaXRlcmF0b3ImIF9fbGhzLAorICAgICAgICAgICBjb25z
dCBkaXJlY3RvcnlfaXRlcmF0b3ImIF9fcmhzKSBub2V4Y2VwdCB7CisgIHJldHVybiAhKF9fbGhz
ID09IF9fcmhzKTsKK30KKworLy8gZW5hYmxlIGRpcmVjdG9yeV9pdGVyYXRvciByYW5nZS1iYXNl
ZCBmb3Igc3RhdGVtZW50cworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgZGlyZWN0
b3J5X2l0ZXJhdG9yCitiZWdpbihkaXJlY3RvcnlfaXRlcmF0b3IgX19pdGVyKSBub2V4Y2VwdCB7
CisgIHJldHVybiBfX2l0ZXI7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IGRpcmVjdG9yeV9pdGVyYXRvcgorZW5kKGNvbnN0IGRpcmVjdG9yeV9pdGVyYXRvciYpIG5vZXhj
ZXB0IHsKKyAgcmV0dXJuIGRpcmVjdG9yeV9pdGVyYXRvcigpOworfQorCitjbGFzcyByZWN1cnNp
dmVfZGlyZWN0b3J5X2l0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgdXNpbmcgdmFsdWVfdHlwZSA9IGRp
cmVjdG9yeV9lbnRyeTsKKyAgdXNpbmcgZGlmZmVyZW5jZV90eXBlID0gc3RkOjpwdHJkaWZmX3Q7
CisgIHVzaW5nIHBvaW50ZXIgPSBkaXJlY3RvcnlfZW50cnkgY29uc3QqOworICB1c2luZyByZWZl
cmVuY2UgPSBkaXJlY3RvcnlfZW50cnkgY29uc3QmOworICB1c2luZyBpdGVyYXRvcl9jYXRlZ29y
eSA9IHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnOworCitwdWJsaWM6CisgIC8vIGNvbnN0cnVjdG9y
cyBhbmQgZGVzdHJ1Y3RvcgorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHJlY3Vyc2l2
ZV9kaXJlY3RvcnlfaXRlcmF0b3IoKSBub2V4Y2VwdCA6IF9fcmVjXyhmYWxzZSkge30KKworICBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGV4cGxpY2l0IHJlY3Vyc2l2ZV9kaXJlY3Rvcnlf
aXRlcmF0b3IoCisgICAgICBjb25zdCBwYXRoJiBfX3AsIGRpcmVjdG9yeV9vcHRpb25zIF9feG9w
dGlvbnMgPSBkaXJlY3Rvcnlfb3B0aW9uczo6bm9uZSkKKyAgICAgIDogcmVjdXJzaXZlX2RpcmVj
dG9yeV9pdGVyYXRvcihfX3AsIF9feG9wdGlvbnMsIG51bGxwdHIpIHt9CisKKyAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWQorICByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yKGNvbnN0IHBh
dGgmIF9fcCwgZGlyZWN0b3J5X29wdGlvbnMgX194b3B0aW9ucywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKQorICAgICAgOiByZWN1cnNpdmVfZGlyZWN0
b3J5X2l0ZXJhdG9yKF9fcCwgX194b3B0aW9ucywgJl9fZWMpIHt9CisKKyAgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWQorICByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yKGNvbnN0IHBhdGgm
IF9fcCwgZXJyb3JfY29kZSYgX19lYykKKyAgICAgIDogcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVy
YXRvcihfX3AsIGRpcmVjdG9yeV9vcHRpb25zOjpub25lLCAmX19lYykge30KKworICByZWN1cnNp
dmVfZGlyZWN0b3J5X2l0ZXJhdG9yKGNvbnN0IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3Im
KSA9IGRlZmF1bHQ7CisgIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IocmVjdXJzaXZlX2Rp
cmVjdG9yeV9pdGVyYXRvciYmKSA9IGRlZmF1bHQ7CisKKyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9p
dGVyYXRvciYKKyAgb3BlcmF0b3I9KGNvbnN0IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3Im
KSA9IGRlZmF1bHQ7CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICByZWN1cnNpdmVf
ZGlyZWN0b3J5X2l0ZXJhdG9yJgorICBvcGVyYXRvcj0ocmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVy
YXRvciYmIF9fbykgbm9leGNlcHQgeworICAgIC8vIG5vbi1kZWZhdWx0IGltcGxlbWVudGF0aW9u
IHByb3ZpZGVkIHRvIHN1cHBvcnQgc2VsZi1tb3ZlIGFzc2lnbi4KKyAgICBpZiAodGhpcyAhPSAm
X19vKSB7CisgICAgICBfX2ltcF8gPSBfVlNURDo6bW92ZShfX28uX19pbXBfKTsKKyAgICAgIF9f
cmVjXyA9IF9fby5fX3JlY187CisgICAgfQorICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIH5y
ZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yKCkgPSBkZWZhdWx0OworCisgIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkKKyAgY29uc3QgZGlyZWN0b3J5X2VudHJ5JiBvcGVyYXRvciooKSBjb25z
dCB7IHJldHVybiBfX2RlcmVmZXJlbmNlKCk7IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZCisgIGNvbnN0IGRpcmVjdG9yeV9lbnRyeSogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJu
ICZfX2RlcmVmZXJlbmNlKCk7IH0KKworICByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yJiBv
cGVyYXRvcisrKCkgeyByZXR1cm4gX19pbmNyZW1lbnQoKTsgfQorCisgIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkKKyAgX19kaXJfZWxlbWVudF9wcm94eSBvcGVyYXRvcisrKGludCkgeworICAg
IF9fZGlyX2VsZW1lbnRfcHJveHkgX19wKCoqdGhpcyk7CisgICAgX19pbmNyZW1lbnQoKTsKKyAg
ICByZXR1cm4gX19wOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICByZWN1
cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yJiBpbmNyZW1lbnQoZXJyb3JfY29kZSYgX19lYykgewor
ICAgIHJldHVybiBfX2luY3JlbWVudCgmX19lYyk7CisgIH0KKworICBfTElCQ1BQX0ZVTkNfVklT
IGRpcmVjdG9yeV9vcHRpb25zIG9wdGlvbnMoKSBjb25zdDsKKyAgX0xJQkNQUF9GVU5DX1ZJUyBp
bnQgZGVwdGgoKSBjb25zdDsKKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQg
cG9wKCkgeyBfX3BvcCgpOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB2b2lk
IHBvcChlcnJvcl9jb2RlJiBfX2VjKSB7IF9fcG9wKCZfX2VjKTsgfQorCisgIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCByZWN1cnNpb25fcGVuZGluZygpIGNvbnN0IHsgcmV0dXJu
IF9fcmVjXzsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdm9pZCBkaXNhYmxl
X3JlY3Vyc2lvbl9wZW5kaW5nKCkgeyBfX3JlY18gPSBmYWxzZTsgfQorCitwcml2YXRlOgorICBy
ZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yKGNvbnN0IHBhdGgmIF9fcCwgZGlyZWN0b3J5X29w
dGlvbnMgX19vcHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSog
X19lYyk7CisKKyAgX0xJQkNQUF9GVU5DX1ZJUworICBjb25zdCBkaXJlY3RvcnlfZW50cnkmIF9f
ZGVyZWZlcmVuY2UoKSBjb25zdDsKKworICBfTElCQ1BQX0ZVTkNfVklTCisgIGJvb2wgX190cnlf
cmVjdXJzaW9uKGVycm9yX2NvZGUqIF9fZWMpOworCisgIF9MSUJDUFBfRlVOQ19WSVMKKyAgdm9p
ZCBfX2FkdmFuY2UoZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworCisgIF9MSUJDUFBfRlVO
Q19WSVMKKyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYgX19pbmNyZW1lbnQoZXJyb3Jf
Y29kZSogX19lYyA9IG51bGxwdHIpOworCisgIF9MSUJDUFBfRlVOQ19WSVMKKyAgdm9pZCBfX3Bv
cChlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CisKKyAgaW5saW5lIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkgZnJpZW5kIGJvb2wKKyAgb3BlcmF0b3I9PShjb25zdCByZWN1cnNpdmVfZGly
ZWN0b3J5X2l0ZXJhdG9yJiwKKyAgICAgICAgICAgICBjb25zdCByZWN1cnNpdmVfZGlyZWN0b3J5
X2l0ZXJhdG9yJikgbm9leGNlcHQ7CisKKyAgc3RydWN0IF9fc2hhcmVkX2ltcDsKKyAgc2hhcmVk
X3B0cjxfX3NoYXJlZF9pbXA+IF9faW1wXzsKKyAgYm9vbCBfX3JlY187Cit9OyAvLyBjbGFzcyBy
ZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yCisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIGJvb2wKK29wZXJhdG9yPT0oY29uc3QgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRv
ciYgX19saHMsCisgICAgICAgICAgIGNvbnN0IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3Im
IF9fcmhzKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX2xocy5fX2ltcF8gPT0gX19yaHMuX19pbXBf
OworfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3ImIF9fbGhzLAorICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yJiBfX3Jocykgbm9l
eGNlcHQgeworICByZXR1cm4gIShfX2xocyA9PSBfX3Jocyk7Cit9CisvLyBlbmFibGUgcmVjdXJz
aXZlX2RpcmVjdG9yeV9pdGVyYXRvciByYW5nZS1iYXNlZCBmb3Igc3RhdGVtZW50cworaW5saW5l
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcgor
YmVnaW4ocmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciBfX2l0ZXIpIG5vZXhjZXB0IHsKKyAg
cmV0dXJuIF9faXRlcjsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcmVj
dXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcgorZW5kKGNvbnN0IHJlY3Vyc2l2ZV9kaXJlY3Rvcnlf
aXRlcmF0b3ImKSBub2V4Y2VwdCB7CisgIHJldHVybiByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJh
dG9yKCk7Cit9CisKK19MSUJDUFBfRU5EX05BTUVTUEFDRV9GSUxFU1lTVEVNCisKKyNlbmRpZiAv
LyAhX0xJQkNQUF9DWFgwM19MQU5HCisKK19MSUJDUFBfUE9QX01BQ1JPUworCisjZW5kaWYgLy8g
X0xJQkNQUF9GSUxFU1lTVEVNCisjZW5kaWYKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
U3RyaW5nRnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9T
dHJpbmdGdW5jdGlvbnMuaAkocmV2aXNpb24gMjY3ODg1KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9TdHJpbmdGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgPFdlYktpdC9XS1N0cmluZ1ByaXZhdGUuaD4KICNpbmNsdWRlIDxzc3RyZWFtPgog
I2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CiAjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9Vbmlx
dWVBcnJheS5oPgpAQCAtNTksNiArNjAsMTEgQEAgaW5saW5lIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB0b1dLKGNvbgogICAgIHJldHVybiBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKHN0cmluZykpOwogfQogCitpbmxpbmUgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRv
V0soY29uc3Qgc3RkOjpzdHJpbmcmIHN0cmluZykKK3sKKyAgICByZXR1cm4gdG9XSyhzdHJpbmcu
Y19zdHIoKSk7Cit9CisKIGlubGluZSBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9XSyhjb25z
dCBXVEY6OlN0cmluZyYgc3RyaW5nKQogewogICAgIHJldHVybiB0b1dLKHN0cmluZy51dGY4KCku
ZGF0YSgpKTsKQEAgLTExNCw2ICsxMjAsMTEgQEAgaW5saW5lIFdURjo6U3RyaW5nIHRvV1RGU3Ry
aW5nKGNvbnN0IEpTUgogICAgIHJldHVybiB0b1dURlN0cmluZyhzdHJpbmcuZ2V0KCkpOwogfQog
CitpbmxpbmUgV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmcoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cmlu
ZykKK3sKKyAgICByZXR1cm4gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0cmluZy5jX3N0cigpKTsK
K30KKwogaW5saW5lIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dLU3RyaW5nKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQogewogICAgIHJldHVybiB0b1dLKGNyZWF0
ZUpTU3RyaW5nKGNvbnRleHQsIHZhbHVlKS5nZXQoKSk7CkBAIC0xMjUsNCArMTM2LDI0IEBAIGlu
bGluZSBXVEY6OlN0cmluZyB0b1dURlN0cmluZyhKU0NvbnRleHQKICAgICByZXR1cm4gdG9XVEZT
dHJpbmcoY3JlYXRlSlNTdHJpbmcoY29udGV4dCwgdmFsdWUpKTsKIH0KIAoraW5saW5lIHN0ZDo6
dmVjdG9yPHN0ZDo6c3RyaW5nPiBzcGxpdChjb25zdCBzdGQ6OnN0cmluZyYgc3RyaW5nLCBjaGFy
IGRlbGltaXRlcikKK3sKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcmVzdWx0OworCisg
ICAgc2l6ZV90IGkgPSAwOworICAgIHdoaWxlIChpIDwgc3RyaW5nLnNpemUoKSkgeworICAgICAg
ICBhdXRvIGZvdW5kSW5kZXggPSBzdHJpbmcuZmluZF9maXJzdF9vZihkZWxpbWl0ZXIsIGkpOwor
CisgICAgICAgIGlmIChmb3VuZEluZGV4ICE9IGkpCisgICAgICAgICAgICByZXN1bHQucHVzaF9i
YWNrKHN0cmluZy5zdWJzdHIoaSwgZm91bmRJbmRleCAtIGkpKTsKKworICAgICAgICBpZiAoZm91
bmRJbmRleCA9PSBzdGQ6OnN0cmluZ192aWV3OjpucG9zKQorICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgaSA9IGZvdW5kSW5kZXggKyAxOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdUUgpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDI2Nzg4NSkKKysrIFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjksMTUgKzQ2OSwx
NyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjppbml0aWFsaXplKGludCBhcmdjCiAgICAgbV9zaG91
bGREdW1wUGl4ZWxzRm9yQWxsVGVzdHMgPSBvcHRpb25zLnNob3VsZER1bXBQaXhlbHNGb3JBbGxU
ZXN0czsKICAgICBtX2ZvcmNlQ29tcGxleFRleHQgPSBvcHRpb25zLmZvcmNlQ29tcGxleFRleHQ7
CiAgICAgbV9zaG91bGRVc2VBY2NlbGVyYXRlZERyYXdpbmcgPSBvcHRpb25zLnNob3VsZFVzZUFj
Y2VsZXJhdGVkRHJhd2luZzsKLSAgICBtX3Nob3VsZFVzZVJlbW90ZUxheWVyVHJlZSA9IG9wdGlv
bnMuc2hvdWxkVXNlUmVtb3RlTGF5ZXJUcmVlOwogICAgIG1fcGF0aHMgPSBvcHRpb25zLnBhdGhz
OwogICAgIG1fYWxsb3dlZEhvc3RzID0gb3B0aW9ucy5hbGxvd2VkSG9zdHM7Ci0gICAgbV9zaG91
bGRTaG93V2ViVmlldyA9IG9wdGlvbnMuc2hvdWxkU2hvd1dlYlZpZXc7Ci0gICAgbV9zaG91bGRT
aG93VG91Y2hlcyA9IG9wdGlvbnMuc2hvdWxkU2hvd1RvdWNoZXM7CiAgICAgbV9jaGVja0Zvcldv
cmxkTGVha3MgPSBvcHRpb25zLmNoZWNrRm9yV29ybGRMZWFrczsKICAgICBtX2FsbG93QW55SFRU
UFNDZXJ0aWZpY2F0ZUZvckFsbG93ZWRIb3N0cyA9IG9wdGlvbnMuYWxsb3dBbnlIVFRQU0NlcnRp
ZmljYXRlRm9yQWxsb3dlZEhvc3RzOwotICAgIG1faW50ZXJuYWxGZWF0dXJlcyA9IG9wdGlvbnMu
aW50ZXJuYWxGZWF0dXJlczsKLSAgICBtX2V4cGVyaW1lbnRhbEZlYXR1cmVzID0gb3B0aW9ucy5l
eHBlcmltZW50YWxGZWF0dXJlczsKKyAgICAKKyAgICBtX2dsb2JhbEZlYXR1cmVzLmludGVybmFs
RGVidWdGZWF0dXJlcyA9IG9wdGlvbnMuaW50ZXJuYWxGZWF0dXJlczsKKyAgICBtX2dsb2JhbEZl
YXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzID0gb3B0aW9ucy5leHBlcmltZW50YWxGZWF0dXJl
czsKKyAgICBtX2dsb2JhbEZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAidXNlUmVtb3Rl
TGF5ZXJUcmVlIiwgb3B0aW9ucy5zaG91bGRVc2VSZW1vdGVMYXllclRyZWUgfSk7CisgICAgbV9n
bG9iYWxGZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgInNob3VsZFNob3dXZWJWaWV3Iiwg
b3B0aW9ucy5zaG91bGRTaG93V2ViVmlldyB9KTsKKyAgICBtX2dsb2JhbEZlYXR1cmVzLmJvb2xG
ZWF0dXJlcy5pbnNlcnQoeyAic2hvdWxkU2hvd1RvdWNoZXMiLCBvcHRpb25zLnNob3VsZFNob3dU
b3VjaGVzIH0pOworCiAjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKICAg
ICBtX2FjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVNb2RlID0gb3B0aW9ucy5hY2Nlc3NpYmlsaXR5
SXNvbGF0ZWRUcmVlTW9kZTsKICNlbmRpZgpAQCAtNDk5LDcgKzUwMSw3IEBAIHZvaWQgVGVzdENv
bnRyb2xsZXI6OmluaXRpYWxpemUoaW50IGFyZ2MKICAgICBtX2V2ZW50U2VuZGVyUHJveHkgPSBt
YWtlVW5pcXVlPEV2ZW50U2VuZGVyUHJveHk+KHRoaXMpOwogfQogCi1XS1JldGFpblB0cjxXS0Nv
bnRleHRDb25maWd1cmF0aW9uUmVmPiBUZXN0Q29udHJvbGxlcjo6Z2VuZXJhdGVDb250ZXh0Q29u
ZmlndXJhdGlvbihjb25zdCBUZXN0T3B0aW9uczo6Q29udGV4dE9wdGlvbnMmIG9wdGlvbnMpIGNv
bnN0CitXS1JldGFpblB0cjxXS0NvbnRleHRDb25maWd1cmF0aW9uUmVmPiBUZXN0Q29udHJvbGxl
cjo6Z2VuZXJhdGVDb250ZXh0Q29uZmlndXJhdGlvbihjb25zdCBDb250ZXh0T3B0aW9ucyYgb3B0
aW9ucykgY29uc3QKIHsKICAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdFdLKFdLQ29udGV4
dENvbmZpZ3VyYXRpb25DcmVhdGUoKSk7CiAgICAgV0tDb250ZXh0Q29uZmlndXJhdGlvblNldElu
amVjdGVkQnVuZGxlUGF0aChjb25maWd1cmF0aW9uLmdldCgpLCBpbmplY3RlZEJ1bmRsZVBhdGgo
KSk7CkBAIC01NjIsMTAgKzU2NCwxMSBAQCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgVGVzdENvbnRy
b2xsZXI6OndlCiAKIFdLUmV0YWluUHRyPFdLUGFnZUNvbmZpZ3VyYXRpb25SZWY+IFRlc3RDb250
cm9sbGVyOjpnZW5lcmF0ZVBhZ2VDb25maWd1cmF0aW9uKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRp
b25zKQogewotICAgIGlmICghbV9jb250ZXh0IHx8ICFtX2NvbnRleHRPcHRpb25zLT5oYXNTYW1l
SW5pdGlhbGl6YXRpb25PcHRpb25zKG9wdGlvbnMuY29udGV4dE9wdGlvbnMpKSB7Ci0gICAgICAg
IGF1dG8gY29udGV4dENvbmZpZ3VyYXRpb24gPSBnZW5lcmF0ZUNvbnRleHRDb25maWd1cmF0aW9u
KG9wdGlvbnMuY29udGV4dE9wdGlvbnMpOworICAgIGF1dG8gY29udGV4dE9wdGlvbnMgPSBvcHRp
b25zLmNvbnRleHRPcHRpb25zKCk7CisgICAgaWYgKCFtX2NvbnRleHQgfHwgIW1fY29udGV4dE9w
dGlvbnMtPmhhc1NhbWVJbml0aWFsaXphdGlvbk9wdGlvbnMoY29udGV4dE9wdGlvbnMpKSB7Cisg
ICAgICAgIGF1dG8gY29udGV4dENvbmZpZ3VyYXRpb24gPSBnZW5lcmF0ZUNvbnRleHRDb25maWd1
cmF0aW9uKGNvbnRleHRPcHRpb25zKTsKICAgICAgICAgbV9jb250ZXh0ID0gcGxhdGZvcm1BZGp1
c3RDb250ZXh0KGFkb3B0V0soV0tDb250ZXh0Q3JlYXRlV2l0aENvbmZpZ3VyYXRpb24oY29udGV4
dENvbmZpZ3VyYXRpb24uZ2V0KCkpKS5nZXQoKSwgY29udGV4dENvbmZpZ3VyYXRpb24uZ2V0KCkp
OwotICAgICAgICBtX2NvbnRleHRPcHRpb25zID0gb3B0aW9ucy5jb250ZXh0T3B0aW9uczsKKyAg
ICAgICAgbV9jb250ZXh0T3B0aW9ucyA9IGNvbnRleHRPcHRpb25zOwogCiAgICAgICAgIG1fZ2Vv
bG9jYXRpb25Qcm92aWRlciA9IG1ha2VVbmlxdWU8R2VvbG9jYXRpb25Qcm92aWRlck1vY2s+KG1f
Y29udGV4dC5nZXQoKSk7CiAKQEAgLTYyNyw3ICs2MzAsNyBAQCBXS1JldGFpblB0cjxXS1BhZ2VD
b25maWd1cmF0aW9uUmVmPiBUZXN0CiAgICAgV0tQYWdlQ29uZmlndXJhdGlvblNldENvbnRleHQo
cGFnZUNvbmZpZ3VyYXRpb24uZ2V0KCksIG1fY29udGV4dC5nZXQoKSk7CiAgICAgV0tQYWdlQ29u
ZmlndXJhdGlvblNldFBhZ2VHcm91cChwYWdlQ29uZmlndXJhdGlvbi5nZXQoKSwgbV9wYWdlR3Jv
dXAuZ2V0KCkpOwogICAgIAotICAgIGlmIChvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24pIHsK
KyAgICBpZiAob3B0aW9ucy51c2VFcGhlbWVyYWxTZXNzaW9uKCkpIHsKICAgICAgICAgYXV0byBl
cGhlbWVyYWxEYXRhU3RvcmUgPSBhZG9wdFdLKFdLV2Vic2l0ZURhdGFTdG9yZUNyZWF0ZU5vblBl
cnNpc3RlbnREYXRhU3RvcmUoKSk7CiAgICAgICAgIFdLUGFnZUNvbmZpZ3VyYXRpb25TZXRXZWJz
aXRlRGF0YVN0b3JlKHBhZ2VDb25maWd1cmF0aW9uLmdldCgpLCBlcGhlbWVyYWxEYXRhU3RvcmUu
Z2V0KCkpOwogICAgIH0KQEAgLTYzOSwxMSArNjQyLDEyIEBAIFdLUmV0YWluUHRyPFdLUGFnZUNv
bmZpZ3VyYXRpb25SZWY+IFRlc3QKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6Y3JlYXRlV2ViVmll
d1dpdGhPcHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKQogeworICAgIGF1dG8gYXBw
bGljYXRpb25CdW5kbGVJZGVudGlmaWVyID0gb3B0aW9ucy5hcHBsaWNhdGlvbkJ1bmRsZUlkZW50
aWZpZXIoKTsKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBpZiAoIW9wdGlvbnMuYXBwbGljYXRp
b25CdW5kbGVJZGVudGlmaWVyLmlzRW1wdHkoKSkgeworICAgIGlmICghYXBwbGljYXRpb25CdW5k
bGVJZGVudGlmaWVyLmVtcHR5KCkpIHsKICAgICAgICAgLy8gVGhlIGJ1bmRsZSBpZGVudGlmaWVy
IGNhbiBvbmx5IGJlIHNldCBvbmNlIHBlciB0ZXN0LCBhbmQgaXMgY2xlYXJlZCBiZXR3ZWVuIHRl
c3RzLgogICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9oYXNTZXRBcHBsaWNhdGlvbkJ1bmRsZUlk
ZW50aWZpZXIpOwotICAgICAgICBzZXRBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIob3B0aW9u
cy5hcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIpOworICAgICAgICBzZXRBcHBsaWNhdGlvbkJ1
bmRsZUlkZW50aWZpZXIoYXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKTsKICAgICAgICAgbV9o
YXNTZXRBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIgPSB0cnVlOwogICAgIH0KICNlbmRpZgpA
QCAtNjg2LDcgKzY5MCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNyZWF0ZVdlYlZpZXdXaXRo
T3AKICAgICAgICAgMCwgLy8gZGlkRHJhdwogICAgICAgICAwLCAvLyBwYWdlRGlkU2Nyb2xsCiAg
ICAgICAgIDAsIC8vIGV4Y2VlZGVkRGF0YWJhc2VRdW90YSwKLSAgICAgICAgb3B0aW9ucy5zaG91
bGRIYW5kbGVSdW5PcGVuUGFuZWwgPyBydW5PcGVuUGFuZWwgOiAwLAorICAgICAgICBvcHRpb25z
LnNob3VsZEhhbmRsZVJ1bk9wZW5QYW5lbCgpID8gcnVuT3BlblBhbmVsIDogMCwKICAgICAgICAg
ZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdCwKICAgICAgICAgMCwg
Ly8gaGVhZGVySGVpZ2h0CiAgICAgICAgIDAsIC8vIGZvb3RlckhlaWdodApAQCAtNzk1LDkgKzc5
OSw5IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNyZWF0ZVdlYlZpZXdXaXRoT3AKICAgICAvLyBz
b21ldGhpbmcgZWxzZSBmb3Igc3BlY2lmaWMgdGVzdHMgdGhhdCBuZWVkIHRvIHJ1biBhdCBhIGRp
ZmZlcmVudCB3aW5kb3cgc2NhbGUuCiAgICAgbV9tYWluV2ViVmlldy0+Y2hhbmdlV2luZG93U2Nh
bGVJZk5lZWRlZCgxKTsKICAgICAKLSAgICBpZiAoIW9wdGlvbnMuYXBwbGljYXRpb25CdW5kbGVJ
ZGVudGlmaWVyLmlzRW1wdHkoKSkgeworICAgIGlmICghYXBwbGljYXRpb25CdW5kbGVJZGVudGlm
aWVyLmVtcHR5KCkpIHsKICAgICAgICAgcmVpbml0aWFsaXplQXBwQm91bmREb21haW5zKCk7Ci0g
ICAgICAgIHVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKG9wdGlvbnMuYXBw
bGljYXRpb25CdW5kbGVJZGVudGlmaWVyKTsKKyAgICAgICAgdXBkYXRlQnVuZGxlSWRlbnRpZmll
ckluTmV0d29ya1Byb2Nlc3MoYXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKTsKICAgICB9CiB9
CiAKQEAgLTgwOSw3ICs4MTMsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjplbnN1cmVWaWV3U3Vw
cG9ydHNPCiAgICAgICAgIC8vIEhhdmluZyBjcmVhdGVkIGFub3RoZXIgcGFnZSAodmlhIHdpbmRv
dy5vcGVuKCkpIHByZXZlbnRzIHByb2Nlc3Mgc3dhcHBpbmcgb24gbmF2aWdhdGlvbiBhbmQgaXQg
bWF5IHRoZXJlZm9yZQogICAgICAgICAvLyBjYXVzZSBmbGFraW5lc3MgdG8gcmV1c2UgdGhlIHZp
ZXcuIFdlIHNob3VsZCBhbHNvIGFsd2F5cyBtYWtlIGEgbmV3IHZpZXcgaWYgdGhlIHRlc3QgaXMg
bWFya2VkIGFzIGFwcC1ib3VuZCwgYmVjYXVzZQogICAgICAgICAvLyB0aGUgdmlldyBjb25maWd1
cmF0aW9uIG11c3QgY2hhbmdlLgotICAgICAgICBpZiAoIW1fY3JlYXRlZE90aGVyUGFnZSAmJiBt
X21haW5XZWJWaWV3LT52aWV3U3VwcG9ydHNPcHRpb25zKG9wdGlvbnMpICYmICFvcHRpb25zLmlz
QXBwQm91bmRXZWJWaWV3KQorICAgICAgICBpZiAoIW1fY3JlYXRlZE90aGVyUGFnZSAmJiBtX21h
aW5XZWJWaWV3LT52aWV3U3VwcG9ydHNPcHRpb25zKG9wdGlvbnMpICYmICFvcHRpb25zLmlzQXBw
Qm91bmRXZWJWaWV3KCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgd2lsbERlc3Ry
b3lXZWJWaWV3KCk7CkBAIC04MzYsOCArODQwLDggQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVz
ZXRQcmVmZXJlbmNlc1RvQwogICAgIFdLUHJlZmVyZW5jZXNSZXNldFRlc3RSdW5uZXJPdmVycmlk
ZXMocHJlZmVyZW5jZXMpOwogCiAgICAgV0tQcmVmZXJlbmNlc0VuYWJsZUFsbEV4cGVyaW1lbnRh
bEZlYXR1cmVzKHByZWZlcmVuY2VzKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGV4cGVyaW1lbnRh
bEZlYXR1cmUgOiBvcHRpb25zLmV4cGVyaW1lbnRhbEZlYXR1cmVzKQotICAgICAgICBXS1ByZWZl
cmVuY2VzU2V0RXhwZXJpbWVudGFsRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgZXhwZXJpbWVu
dGFsRmVhdHVyZS52YWx1ZSwgdG9XSyhleHBlcmltZW50YWxGZWF0dXJlLmtleSkuZ2V0KCkpOwor
ICAgIGZvciAoY29uc3QgYXV0byYgW2tleSwgdmFsdWVdIDogb3B0aW9ucy5leHBlcmltZW50YWxG
ZWF0dXJlcygpKQorICAgICAgICBXS1ByZWZlcmVuY2VzU2V0RXhwZXJpbWVudGFsRmVhdHVyZUZv
cktleShwcmVmZXJlbmNlcywgdmFsdWUsIHRvV0soa2V5KS5nZXQoKSk7CiAKICAgICBXS1ByZWZl
cmVuY2VzUmVzZXRBbGxJbnRlcm5hbERlYnVnRmVhdHVyZXMocHJlZmVyZW5jZXMpOwogCkBAIC04
NjIsMTcgKzg2NiwxNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldFByZWZlcmVuY2VzVG9D
CiAgICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVu
Y2VzLCB0cnVlLCB0b1dLKCJJbnB1dFR5cGVXZWVrRW5hYmxlZCIpLmdldCgpKTsKICNlbmRpZgog
Ci0gICAgZm9yIChjb25zdCBhdXRvJiBpbnRlcm5hbERlYnVnRmVhdHVyZSA6IG9wdGlvbnMuaW50
ZXJuYWxEZWJ1Z0ZlYXR1cmVzKQotICAgICAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1
Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIGludGVybmFsRGVidWdGZWF0dXJlLnZhbHVlLCB0
b1dLKGludGVybmFsRGVidWdGZWF0dXJlLmtleSkuZ2V0KCkpOworICAgIGZvciAoY29uc3QgYXV0
byYgW2tleSwgdmFsdWVdICA6IG9wdGlvbnMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKCkpCisgICAg
ICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNl
cywgdmFsdWUsIHRvV0soa2V5KS5nZXQoKSk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBX
S1ByZWZlcmVuY2VzU2V0Q2FwdHVyZVZpZGVvSW5VSVByb2Nlc3NFbmFibGVkKHByZWZlcmVuY2Vz
LCBvcHRpb25zLmVuYWJsZUNhcHR1cmVWaWRlb0luVUlQcm9jZXNzKTsKLSAgICBXS1ByZWZlcmVu
Y2VzU2V0Q2FwdHVyZVZpZGVvSW5HUFVQcm9jZXNzRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9u
cy5lbmFibGVDYXB0dXJlVmlkZW9JbkdQVVByb2Nlc3MpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRD
YXB0dXJlQXVkaW9JblVJUHJvY2Vzc0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxl
Q2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3MpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRDYXB0dXJlQXVk
aW9JbkdQVVByb2Nlc3NFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUNhcHR1cmVB
dWRpb0luR1BVUHJvY2Vzcyk7CisgICAgV0tQcmVmZXJlbmNlc1NldENhcHR1cmVWaWRlb0luVUlQ
cm9jZXNzRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVDYXB0dXJlVmlkZW9JblVJ
UHJvY2VzcygpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0Q2FwdHVyZVZpZGVvSW5HUFVQcm9jZXNz
RW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVDYXB0dXJlVmlkZW9JbkdQVVByb2Nl
c3MoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldENhcHR1cmVBdWRpb0luVUlQcm9jZXNzRW5hYmxl
ZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcygpKTsK
KyAgICBXS1ByZWZlcmVuY2VzU2V0Q2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzRW5hYmxlZChwcmVm
ZXJlbmNlcywgb3B0aW9ucy5lbmFibGVDYXB0dXJlQXVkaW9JbkdQVVByb2Nlc3MoKSk7CiAjZW5k
aWYKLSAgICBXS1ByZWZlcmVuY2VzU2V0UHJvY2Vzc1N3YXBPbk5hdmlnYXRpb25FbmFibGVkKHBy
ZWZlcmVuY2VzLCBvcHRpb25zLmNvbnRleHRPcHRpb25zLnNob3VsZEVuYWJsZVByb2Nlc3NTd2Fw
T25OYXZpZ2F0aW9uKCkpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRQYWdlVmlzaWJpbGl0eUJhc2Vk
UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVBcHBO
YXApOworICAgIFdLUHJlZmVyZW5jZXNTZXRQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbkVuYWJsZWQo
cHJlZmVyZW5jZXMsIG9wdGlvbnMuY29udGV4dE9wdGlvbnMoKS5zaG91bGRFbmFibGVQcm9jZXNz
U3dhcE9uTmF2aWdhdGlvbigpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0UGFnZVZpc2liaWxpdHlC
YXNlZFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxl
QXBwTmFwKCkpOwogICAgIFdLUHJlZmVyZW5jZXNTZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNo
ZUVuYWJsZWQocHJlZmVyZW5jZXMsIHRydWUpOwogICAgIFdLUHJlZmVyZW5jZXNTZXRTdWJwaXhl
bEFudGlhbGlhc2VkTGF5ZXJUZXh0RW5hYmxlZChwcmVmZXJlbmNlcywgZmFsc2UpOwogICAgIFdL
UHJlZmVyZW5jZXNTZXRYU1NBdWRpdG9yRW5hYmxlZChwcmVmZXJlbmNlcywgZmFsc2UpOwpAQCAt
ODgzLDEwICs4ODcsMTAgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRQcmVmZXJlbmNlc1Rv
QwogICAgIFdLUHJlZmVyZW5jZXNTZXRKYXZhU2NyaXB0UnVudGltZUZsYWdzKHByZWZlcmVuY2Vz
LCBrV0tKYXZhU2NyaXB0UnVudGltZUZsYWdzQWxsRW5hYmxlZCk7CiAgICAgV0tQcmVmZXJlbmNl
c1NldEphdmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9tYXRpY2FsbHkocHJlZmVyZW5jZXMsIHRy
dWUpOwogICAgIFdLUHJlZmVyZW5jZXNTZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKHBy
ZWZlcmVuY2VzLCB0cnVlKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0RE9NUGFzdGVBbGxvd2VkKHBy
ZWZlcmVuY2VzLCBvcHRpb25zLmRvbVBhc3RlQWxsb3dlZCk7CisgICAgV0tQcmVmZXJlbmNlc1Nl
dERPTVBhc3RlQWxsb3dlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5kb21QYXN0ZUFsbG93ZWQoKSk7
CiAgICAgV0tQcmVmZXJlbmNlc1NldFVuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMc0FsbG93ZWQo
cHJlZmVyZW5jZXMsIHRydWUpOwogICAgIFdLUHJlZmVyZW5jZXNTZXRGaWxlQWNjZXNzRnJvbUZp
bGVVUkxzQWxsb3dlZChwcmVmZXJlbmNlcywgdHJ1ZSk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldFRv
cE5hdmlnYXRpb25Ub0RhdGFVUkxzQWxsb3dlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5hbGxvd1Rv
cE5hdmlnYXRpb25Ub0RhdGFVUkxzKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0VG9wTmF2aWdhdGlv
blRvRGF0YVVSTHNBbGxvd2VkKHByZWZlcmVuY2VzLCBvcHRpb25zLmFsbG93VG9wTmF2aWdhdGlv
blRvRGF0YVVSTHMoKSk7CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgIFdLUHJlZmVy
ZW5jZXNTZXRGdWxsU2NyZWVuRW5hYmxlZChwcmVmZXJlbmNlcywgdHJ1ZSk7CiAjZW5kaWYKQEAg
LTg5OSwxOCArOTAzLDE4IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0UHJlZmVyZW5jZXNU
b0MKICAgICBXS1ByZWZlcmVuY2VzU2V0Q3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkKHByZWZl
cmVuY2VzLCB0cnVlKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0RGlhbG9nRWxlbWVudEVuYWJsZWQo
cHJlZmVyZW5jZXMsIHRydWUpOwogCi0gICAgV0tQcmVmZXJlbmNlc1NldE1vY2tTY3JvbGxiYXJz
RW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy51c2VNb2NrU2Nyb2xsYmFycyk7Ci0gICAgV0tQ
cmVmZXJlbmNlc1NldE5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKHByZWZlcmVuY2VzLCBvcHRpb25z
Lm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0QXR0YWNobWVu
dEVsZW1lbnRFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUF0dGFjaG1lbnRFbGVt
ZW50KTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0TWVudUl0ZW1FbGVtZW50RW5hYmxlZChwcmVmZXJl
bmNlcywgb3B0aW9ucy5lbmFibGVNZW51SXRlbUVsZW1lbnQpOwotICAgIFdLUHJlZmVyZW5jZXNT
ZXRLZXlnZW5FbGVtZW50RW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVLZXlnZW5F
bGVtZW50KTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQo
cHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyk7Ci0gICAgV0tQ
cmVmZXJlbmNlc1NldFdlYkF1dGhlbnRpY2F0aW9uRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9u
cy5lbmFibGVXZWJBdXRoZW50aWNhdGlvbik7Ci0gICAgV0tQcmVmZXJlbmNlc1NldFdlYkF1dGhl
bnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5l
bmFibGVXZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0aGVudGljYXRvcik7Ci0gICAgV0tQcmVmZXJl
bmNlc1NldEFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzKHBy
ZWZlcmVuY2VzLCBvcHRpb25zLmFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNy
ZWRlbnRpYWxzKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0Q29sb3JGaWx0ZXJFbmFibGVkKHByZWZl
cmVuY2VzLCBvcHRpb25zLmVuYWJsZUNvbG9yRmlsdGVyKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0
UHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZShwcmVmZXJlbmNlcywgb3B0aW9ucy5w
dW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0
UGFnZUNhY2hlRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVCYWNrRm9yd2FyZENh
Y2hlKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKHByZWZlcmVu
Y2VzLCBvcHRpb25zLnVzZU1vY2tTY3JvbGxiYXJzKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRO
ZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyhwcmVmZXJlbmNlcywgb3B0aW9ucy5uZWVkc1NpdGVTcGVj
aWZpY1F1aXJrcygpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0QXR0YWNobWVudEVsZW1lbnRFbmFi
bGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUF0dGFjaG1lbnRFbGVtZW50KCkpOworICAg
IFdLUHJlZmVyZW5jZXNTZXRNZW51SXRlbUVsZW1lbnRFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRp
b25zLmVuYWJsZU1lbnVJdGVtRWxlbWVudCgpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0S2V5Z2Vu
RWxlbWVudEVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlS2V5Z2VuRWxlbWVudCgp
KTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQocHJlZmVy
ZW5jZXMsIG9wdGlvbnMuZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scygpKTsKKyAgICBXS1ByZWZl
cmVuY2VzU2V0V2ViQXV0aGVudGljYXRpb25FbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVu
YWJsZVdlYkF1dGhlbnRpY2F0aW9uKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRXZWJBdXRoZW50
aWNhdGlvbkxvY2FsQXV0aGVudGljYXRvckVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5h
YmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IoKSk7CisgICAgV0tQcmVmZXJl
bmNlc1NldEFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzKHBy
ZWZlcmVuY2VzLCBvcHRpb25zLmFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNy
ZWRlbnRpYWxzKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRDb2xvckZpbHRlckVuYWJsZWQocHJl
ZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQ29sb3JGaWx0ZXIoKSk7CisgICAgV0tQcmVmZXJlbmNl
c1NldFB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUocHJlZmVyZW5jZXMsIG9wdGlv
bnMucHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZSgpKTsKKyAgICBXS1ByZWZlcmVu
Y2VzU2V0UGFnZUNhY2hlRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVCYWNrRm9y
d2FyZENhY2hlKCkpOwogCiAgICAgV0tQcmVmZXJlbmNlc1NldERlZmF1bHRUZXh0RW5jb2RpbmdO
YW1lKHByZWZlcmVuY2VzLCB0b1dLKCJJU08tODg1OS0xIikuZ2V0KCkpOwogCkBAIC05MzIsNyAr
OTM2LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRQcmVmZXJlbmNlc1RvQwogICAgIFdL
UHJlZmVyZW5jZXNTZXRIaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nRW5hYmxlZChwcmVmZXJl
bmNlcywgZmFsc2UpOwogICAgIFdLUHJlZmVyZW5jZXNTZXRIaWRkZW5QYWdlQ1NTQW5pbWF0aW9u
U3VzcGVuc2lvbkVuYWJsZWQocHJlZmVyZW5jZXMsIGZhbHNlKTsKIAotICAgIFdLUHJlZmVyZW5j
ZXNTZXRBY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKHByZWZlcmVuY2VzLCBtX3Nob3VsZFVzZUFj
Y2VsZXJhdGVkRHJhd2luZyB8fCBvcHRpb25zLnVzZUFjY2VsZXJhdGVkRHJhd2luZyk7CisgICAg
V0tQcmVmZXJlbmNlc1NldEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQocHJlZmVyZW5jZXMsIG1f
c2hvdWxkVXNlQWNjZWxlcmF0ZWREcmF3aW5nIHx8IG9wdGlvbnMudXNlQWNjZWxlcmF0ZWREcmF3
aW5nKCkpOwogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgdGVzdGluZyB0aGUgZGVmYXVsdC4K
ICAgICBXS1ByZWZlcmVuY2VzU2V0U3RvcmFnZUJsb2NraW5nUG9saWN5KHByZWZlcmVuY2VzLCBr
V0tBbGxvd0FsbFN0b3JhZ2UpOwogCkBAIC05NTMsNyArOTU3LDcgQEAgdm9pZCBUZXN0Q29udHJv
bGxlcjo6cmVzZXRQcmVmZXJlbmNlc1RvQwogICAgIAogICAgIFdLUHJlZmVyZW5jZXNTZXRMYXJn
ZUltYWdlQXN5bmNEZWNvZGluZ0VuYWJsZWQocHJlZmVyZW5jZXMsIGZhbHNlKTsKIAotICAgIFdL
UHJlZmVyZW5jZXNTZXRJbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRp
b25zLmVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyk7CisgICAgV0tQcmVmZXJlbmNlc1NldEluc3Bl
Y3RvckFkZGl0aW9uc0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlSW5zcGVjdG9y
QWRkaXRpb25zKCkpOwogCiAgICAgV0tQcmVmZXJlbmNlc1NldFN0b3JhZ2VBY2Nlc3NBUElFbmFi
bGVkKHByZWZlcmVuY2VzLCB0cnVlKTsKICAgICAKQEAgLTk3Miw3ICs5NzYsNyBAQCB2b2lkIFRl
c3RDb250cm9sbGVyOjpyZXNldFByZWZlcmVuY2VzVG9DCiAgICAgV0tQcmVmZXJlbmNlc1NldEF1
ZGlvUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKHByZWZlcmVuY2VzLCBmYWxzZSk7CiAgICAg
V0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCBm
YWxzZSwgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNwZWFrZXJTZWxlY3Rpb25SZXF1
aXJlc1VzZXJHZXN0dXJlIikpOwogCi0gICAgV0tQcmVmZXJlbmNlc1NldFNob3VsZFVzZVNlcnZp
Y2VXb3JrZXJTaG9ydFRpbWVvdXQocHJlZmVyZW5jZXMsIG9wdGlvbnMuY29udGV4dE9wdGlvbnMu
dXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dCk7CisgICAgV0tQcmVmZXJlbmNlc1NldFNob3Vs
ZFVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQocHJlZmVyZW5jZXMsIG9wdGlvbnMudXNlU2Vy
dmljZVdvcmtlclNob3J0VGltZW91dCgpKTsKIAogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lT
T0xBVEVEX1RSRUUpCiAgICAgV0tQcmVmZXJlbmNlc1NldElzQWNjZXNzaWJpbGl0eUlzb2xhdGVk
VHJlZUVuYWJsZWQocHJlZmVyZW5jZXMsIGFjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVNb2RlKCkp
OwpAQCAtMTAwNiwxMSArMTAxMCwxMiBAQCBib29sIFRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRl
VG9Db25zaXN0CiAgICAgc2V0VmFsdWUocmVzZXRNZXNzYWdlQm9keSwgIkFjY2Vzc2liaWxpdHlJ
c29sYXRlZFRyZWUiLCBtX2FjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVNb2RlKTsKICNlbmRpZgog
Ci0gICAgaWYgKG9wdGlvbnMuanNjT3B0aW9ucy5sZW5ndGgoKSkKLSAgICAgICAgc2V0VmFsdWUo
cmVzZXRNZXNzYWdlQm9keSwgIkpTQ09wdGlvbnMiLCBvcHRpb25zLmpzY09wdGlvbnMuY19zdHIo
KSk7CisgICAgYXV0byBqc2NPcHRpb25zID0gb3B0aW9ucy5qc2NPcHRpb25zKCk7CisgICAgaWYg
KCFqc2NPcHRpb25zLmVtcHR5KCkpCisgICAgICAgIHNldFZhbHVlKHJlc2V0TWVzc2FnZUJvZHks
ICJKU0NPcHRpb25zIiwganNjT3B0aW9ucy5jX3N0cigpKTsKIAogI2lmIFBMQVRGT1JNKENPQ09B
KQotICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0QWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlw
ZXNGb3JUZXN0aW5nKG9wdGlvbnMuYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMuY19zdHIo
KSk7CisgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRBZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VU
eXBlc0ZvclRlc3Rpbmcob3B0aW9ucy5hZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcygpLmNf
c3RyKCkpOwogI2VuZGlmCiAKICAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUo
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgdG9XSygi
UmVzZXQiKS5nZXQoKSwgcmVzZXRNZXNzYWdlQm9keS5nZXQoKSk7CkBAIC0xMTE4LDcgKzExMjMs
NyBAQCBib29sIFRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0CiAKICAgICBzZXRO
YXZpZ2F0aW9uR2VzdHVyZXNFbmFibGVkKGZhbHNlKTsKICAgICAKLSAgICBzZXRJZ25vcmVzVmll
d3BvcnRTY2FsZUxpbWl0cyhvcHRpb25zLmlnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKTsKKyAg
ICBzZXRJZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyhvcHRpb25zLmlnbm9yZXNWaWV3cG9ydFNj
YWxlTGltaXRzKCkpOwogCiAgICAgbV9vcGVuUGFuZWxGaWxlVVJMcyA9IG51bGxwdHI7CiAjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTEzMTgsNyArMTMyMyw3IEBAIHN0YXRpYyBzdGQ6OnN0
cmluZyB0ZXN0UGF0aChXS1VSTFJlZiB1cmwKICAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKIH0K
IAotc3RhdGljIFdLVVJMUmVmIGNyZWF0ZVRlc3RVUkwoY29uc3QgY2hhciogcGF0aE9yVVJMKQor
V0tVUkxSZWYgVGVzdENvbnRyb2xsZXI6OmNyZWF0ZVRlc3RVUkwoY29uc3QgY2hhciogcGF0aE9y
VVJMKQogewogICAgIGlmIChzdHJzdHIocGF0aE9yVVJMLCAiaHR0cDovLyIpIHx8IHN0cnN0cihw
YXRoT3JVUkwsICJodHRwczovLyIpIHx8IHN0cnN0cihwYXRoT3JVUkwsICJmaWxlOi8vIikpCiAg
ICAgICAgIHJldHVybiBXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyhwYXRoT3JVUkwpOwpAQCAt
MTM1NiwyMTEgKzEzNjEsMjMgQEAgc3RhdGljIFdLVVJMUmVmIGNyZWF0ZVRlc3RVUkwoY29uc3Qg
Y2hhcgogICAgIHJldHVybiBXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyhidWZmZXIuZ2V0KCkp
OwogfQogCi1zdGF0aWMgYm9vbCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUoY29uc3Qgc3Rk
OjpzdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAidHJ1ZSIpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIGlmICh2YWx1ZSA9PSAiZmFsc2UiKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBMT0dfRVJST1IoIkZvdW5kIHVuZXhwZWN0ZWQgdmFsdWUgJyVzJyBmb3IgYm9v
bGVhbiBvcHRpb24uIEV4cGVjdGVkICd0cnVlJyBvciAnZmFsc2UnLiIsIHZhbHVlLmNfc3RyKCkp
OwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHN0ZDo6c3RyaW5nIHBhcnNlU3RyaW5n
VGVzdEhlYWRlclZhbHVlQXNSZWxhdGl2ZVBhdGgoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLCBj
b25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQotewotICAgIGF1dG8gYmFzZVVSTCA9IGFkb3B0
V0soY3JlYXRlVGVzdFVSTChwYXRoT3JVUkwuY19zdHIoKSkpOwotICAgIGF1dG8gcmVsYXRpdmVV
UkwgPSBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aEJhc2VVUkwoYmFzZVVSTC5nZXQoKSwgdmFsdWUu
Y19zdHIoKSkpOwotICAgIHJldHVybiB0b1NURChhZG9wdFdLKFdLVVJMQ29weVBhdGgocmVsYXRp
dmVVUkwuZ2V0KCkpKSk7Ci19Ci0KLXN0YXRpYyBzdGQ6OnN0cmluZyBwYXJzZVN0cmluZ1Rlc3RI
ZWFkZXJWYWx1ZUFzVVJMKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4g
dG9TVEQoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcoY3JlYXRlVGVzdFVSTCh2YWx1ZS5jX3N0cigp
KSkpKTsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRlVGVzdE9wdGlvbnNGcm9tVGVzdEhlYWRlcihU
ZXN0T3B0aW9ucyYgdGVzdE9wdGlvbnMsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwsIGNv
bnN0IHN0ZDo6c3RyaW5nJiBhYnNvbHV0ZVBhdGgpCi17Ci0gICAgc3RkOjpzdHJpbmcgZmlsZW5h
bWUgPSBhYnNvbHV0ZVBhdGg7Ci0gICAgaWYgKGZpbGVuYW1lLmVtcHR5KCkpIHsKLSAgICAgICAg
Ly8gR3Jvc3MuIE5lZWQgdG8gcmVkdWNlIGNvbnZlcnNpb25zIGJldHdlZW4gYWxsIHRoZSBzdHJp
bmcgdHlwZXMgYW5kIFVSTHMuCi0gICAgICAgIGZpbGVuYW1lID0gdGVzdFBhdGgoYWRvcHRXSyhj
cmVhdGVUZXN0VVJMKHBhdGhPclVSTC5jX3N0cigpKSkuZ2V0KCkpOwotICAgIH0KLQotICAgIGlm
IChmaWxlbmFtZS5lbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGQ6OnN0cmluZyBv
cHRpb25zOwotICAgIHN0ZDo6aWZzdHJlYW0gdGVzdEZpbGUoZmlsZW5hbWUuZGF0YSgpKTsKLSAg
ICBpZiAoIXRlc3RGaWxlLmdvb2QoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGdldGxpbmUodGVz
dEZpbGUsIG9wdGlvbnMpOwotICAgIHN0ZDo6c3RyaW5nIGJlZ2luU3RyaW5nKCJ3ZWJraXQtdGVz
dC1ydW5uZXIgWyAiKTsKLSAgICBzdGQ6OnN0cmluZyBlbmRTdHJpbmcoIiBdIik7Ci0gICAgc2l6
ZV90IGJlZ2luTG9jYXRpb24gPSBvcHRpb25zLmZpbmQoYmVnaW5TdHJpbmcpOwotICAgIGlmIChi
ZWdpbkxvY2F0aW9uID09IHN0ZDo6c3RyaW5nOjpucG9zKQotICAgICAgICByZXR1cm47Ci0gICAg
c2l6ZV90IGVuZExvY2F0aW9uID0gb3B0aW9ucy5maW5kKGVuZFN0cmluZywgYmVnaW5Mb2NhdGlv
bik7Ci0gICAgaWYgKGVuZExvY2F0aW9uID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgICAg
IExPR19FUlJPUigiQ291bGQgbm90IGZpbmQgZW5kIG9mIHRlc3QgaGVhZGVyIGluICVzIiwgZmls
ZW5hbWUuY19zdHIoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3RkOjpzdHJpbmcg
cGFpclN0cmluZyA9IG9wdGlvbnMuc3Vic3RyKGJlZ2luTG9jYXRpb24gKyBiZWdpblN0cmluZy5z
aXplKCksIGVuZExvY2F0aW9uIC0gKGJlZ2luTG9jYXRpb24gKyBiZWdpblN0cmluZy5zaXplKCkp
KTsKLSAgICBzaXplX3QgcGFpclN0YXJ0ID0gMDsKLSAgICB3aGlsZSAocGFpclN0YXJ0IDwgcGFp
clN0cmluZy5zaXplKCkpIHsKLSAgICAgICAgc2l6ZV90IHBhaXJFbmQgPSBwYWlyU3RyaW5nLmZp
bmQoIiAiLCBwYWlyU3RhcnQpOwotICAgICAgICBpZiAocGFpckVuZCA9PSBzdGQ6OnN0cmluZzo6
bnBvcykKLSAgICAgICAgICAgIHBhaXJFbmQgPSBwYWlyU3RyaW5nLnNpemUoKTsKLSAgICAgICAg
c2l6ZV90IGVxdWFsc0xvY2F0aW9uID0gcGFpclN0cmluZy5maW5kKCI9IiwgcGFpclN0YXJ0KTsK
LSAgICAgICAgaWYgKGVxdWFsc0xvY2F0aW9uID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAg
ICAgICAgICBMT0dfRVJST1IoIk1hbGZvcm1lZCBvcHRpb24gaW4gdGVzdCBoZWFkZXIgKGNvdWxk
IG5vdCBmaW5kICc9JyBjaGFyYWN0ZXIpIGluICVzIiwgZmlsZW5hbWUuY19zdHIoKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBhdXRvIGtleSA9IHBhaXJTdHJpbmcu
c3Vic3RyKHBhaXJTdGFydCwgZXF1YWxzTG9jYXRpb24gLSBwYWlyU3RhcnQpOwotICAgICAgICBh
dXRvIHZhbHVlID0gcGFpclN0cmluZy5zdWJzdHIoZXF1YWxzTG9jYXRpb24gKyAxLCBwYWlyRW5k
IC0gKGVxdWFsc0xvY2F0aW9uICsgMSkpOwotCi0gICAgICAgIGlmICgha2V5LnJmaW5kKCJleHBl
cmltZW50YWw6IikpIHsKLSAgICAgICAgICAgIGtleSA9IGtleS5zdWJzdHIoMTMpOwotICAgICAg
ICAgICAgdGVzdE9wdGlvbnMuZXhwZXJpbWVudGFsRmVhdHVyZXMuYWRkKFN0cmluZyhrZXkuY19z
dHIoKSksIHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSkpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKCFrZXkucmZpbmQoImludGVybmFsOiIpKSB7Ci0gICAgICAgICAgICBrZXkg
PSBrZXkuc3Vic3RyKDkpOwotICAgICAgICAgICAgdGVzdE9wdGlvbnMuaW50ZXJuYWxEZWJ1Z0Zl
YXR1cmVzLmFkZChTdHJpbmcoa2V5LmNfc3RyKCkpLCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFs
dWUodmFsdWUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChrZXkgPT0gImxhbmd1YWdlIikK
LSAgICAgICAgICAgIHRlc3RPcHRpb25zLmNvbnRleHRPcHRpb25zLm92ZXJyaWRlTGFuZ3VhZ2Vz
ID0gU3RyaW5nKHZhbHVlLmNfc3RyKCkpLnNwbGl0KCcsJyk7Ci0gICAgICAgIGVsc2UgaWYgKGtl
eSA9PSAidXNlVGhyZWFkZWRTY3JvbGxpbmciKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMudXNl
VGhyZWFkZWRTY3JvbGxpbmcgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwot
ICAgICAgICBlbHNlIGlmIChrZXkgPT0gInVzZUFjY2VsZXJhdGVkRHJhd2luZyIpCi0gICAgICAg
ICAgICB0ZXN0T3B0aW9ucy51c2VBY2NlbGVyYXRlZERyYXdpbmcgPSBwYXJzZUJvb2xlYW5UZXN0
SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInVzZUZsZXhpYmxl
Vmlld3BvcnQiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMudXNlRmxleGlibGVWaWV3cG9ydCA9
IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtl
eSA9PSAidXNlRGF0YURldGVjdGlvbiIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy51c2VEYXRh
RGV0ZWN0aW9uID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAg
ZWxzZSBpZiAoa2V5ID09ICJ1c2VNb2NrU2Nyb2xsYmFycyIpCi0gICAgICAgICAgICB0ZXN0T3B0
aW9ucy51c2VNb2NrU2Nyb2xsYmFycyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1
ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAibmVlZHNTaXRlU3BlY2lmaWNRdWlya3MiKQot
ICAgICAgICAgICAgdGVzdE9wdGlvbnMubmVlZHNTaXRlU3BlY2lmaWNRdWlya3MgPSBwYXJzZUJv
b2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImln
bm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmlnbm9y
ZXNWaWV3cG9ydFNjYWxlTGltaXRzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVl
KTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJ1c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxh
cml0eSIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy51c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFu
dWxhcml0eSA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVs
c2UgaWYgKGtleSA9PSAiZW5hYmxlQXR0YWNobWVudEVsZW1lbnQiKQotICAgICAgICAgICAgdGVz
dE9wdGlvbnMuZW5hYmxlQXR0YWNobWVudEVsZW1lbnQgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVy
VmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUludGVyc2VjdGlv
bk9ic2VydmVyIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZUludGVyc2VjdGlvbk9i
c2VydmVyID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxz
ZSBpZiAoa2V5ID09ICJ1c2VFcGhlbWVyYWxTZXNzaW9uIikKLSAgICAgICAgICAgIHRlc3RPcHRp
b25zLnVzZUVwaGVtZXJhbFNlc3Npb24gPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFs
dWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZU1lbnVJdGVtRWxlbWVudCIpCi0g
ICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVNZW51SXRlbUVsZW1lbnQgPSBwYXJzZUJvb2xl
YW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJs
ZUtleWdlbkVsZW1lbnQiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlS2V5Z2VuRWxl
bWVudCA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2Ug
aWYgKGtleSA9PSAiZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyIpCi0gICAgICAgICAgICB0ZXN0
T3B0aW9ucy5lbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRl
clZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVQb2ludGVyTG9j
ayIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVQb2ludGVyTG9jayA9IHBhcnNlQm9v
bGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5h
YmxlV2ViQXV0aGVudGljYXRpb24iKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlV2Vi
QXV0aGVudGljYXRpb24gPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAg
ICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50
aWNhdG9yIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZVdlYkF1dGhlbnRpY2F0aW9u
TG9jYWxBdXRoZW50aWNhdG9yID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsK
LSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMiKQotICAg
ICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zID0gcGFyc2VCb29s
ZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJkdW1w
SlNDb25zb2xlTG9nSW5TdGRFcnIiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZHVtcEpTQ29u
c29sZUxvZ0luU3RkRXJyID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAg
ICAgICAgZWxzZSBpZiAoa2V5ID09ICJhcHBsaWNhdGlvbk1hbmlmZXN0IikKLSAgICAgICAgICAg
IHRlc3RPcHRpb25zLmFwcGxpY2F0aW9uTWFuaWZlc3QgPSBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJW
YWx1ZUFzUmVsYXRpdmVQYXRoKHZhbHVlLCBwYXRoT3JVUkwpOwotICAgICAgICBlbHNlIGlmIChr
ZXkgPT0gImFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzIikK
LSAgICAgICAgICAgIHRlc3RPcHRpb25zLmFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fz
a0ZvckNyZWRlbnRpYWxzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAg
ICAgICAgZWxzZSBpZiAoa2V5ID09ICJkb21QYXN0ZUFsbG93ZWQiKQotICAgICAgICAgICAgdGVz
dE9wdGlvbnMuZG9tUGFzdGVBbGxvd2VkID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZh
bHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdh
dGlvbiIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5jb250ZXh0T3B0aW9ucy5lbmFibGVQcm9j
ZXNzU3dhcE9uTmF2aWdhdGlvbiA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7
Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW4i
KQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuY29udGV4dE9wdGlvbnMuZW5hYmxlUHJvY2Vzc1N3
YXBPbldpbmRvd09wZW4gPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAg
ICAgICBlbHNlIGlmIChrZXkgPT0gInVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQiKQotICAg
ICAgICAgICAgdGVzdE9wdGlvbnMuY29udGV4dE9wdGlvbnMudXNlU2VydmljZVdvcmtlclNob3J0
VGltZW91dCA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVs
c2UgaWYgKGtleSA9PSAiZW5hYmxlQ29sb3JGaWx0ZXIiKQotICAgICAgICAgICAgdGVzdE9wdGlv
bnMuZW5hYmxlQ29sb3JGaWx0ZXIgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUp
OwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFy
a01vZGUiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMucHVuY2hPdXRXaGl0ZUJhY2tncm91bmRz
SW5EYXJrTW9kZSA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAg
IGVsc2UgaWYgKGtleSA9PSAianNjT3B0aW9ucyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5q
c2NPcHRpb25zID0gdmFsdWU7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiYWRkaXRpb25hbFN1
cHBvcnRlZEltYWdlVHlwZXMiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuYWRkaXRpb25hbFN1
cHBvcnRlZEltYWdlVHlwZXMgPSB2YWx1ZTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJydW5T
aW5nbHkiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMucnVuU2luZ2x5ID0gcGFyc2VCb29sZWFu
VGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJzaG91bGRJ
Z25vcmVNZXRhVmlld3BvcnQiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuc2hvdWxkSWdub3Jl
TWV0YVZpZXdwb3J0ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAg
ICAgZWxzZSBpZiAoa2V5ID09ICJzcGVsbENoZWNraW5nRG90cyIpCi0gICAgICAgICAgICB0ZXN0
T3B0aW9ucy5zaG91bGRTaG93U3BlbGxDaGVja2luZ0RvdHMgPSBwYXJzZUJvb2xlYW5UZXN0SGVh
ZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZVNlcnZpY2VD
b250cm9scyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVTZXJ2aWNlQ29udHJvbHMg
PSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChr
ZXkgPT0gImVkaXRhYmxlIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVkaXRhYmxlID0gcGFy
c2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09
ICJzaG91bGRIYW5kbGVSdW5PcGVuUGFuZWwiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuc2hv
dWxkSGFuZGxlUnVuT3BlblBhbmVsID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVl
KTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJzaG91bGRQcmVzZW50UG9wb3ZlcnMiKQotICAg
ICAgICAgICAgdGVzdE9wdGlvbnMuc2hvdWxkUHJlc2VudFBvcG92ZXJzID0gcGFyc2VCb29sZWFu
VGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJjb250ZW50
SW5zZXQudG9wIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmNvbnRlbnRJbnNldFRvcCA9IHN0
ZDo6c3RvZCh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiaWdub3JlU3luY2hyb25v
dXNNZXNzYWdpbmdUaW1lb3V0cyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5jb250ZXh0T3B0
aW9ucy5pZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzID0gcGFyc2VCb29sZWFuVGVz
dEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJjb250ZW50TW9k
ZSIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5jb250ZW50TW9kZSA9IHsgdmFsdWUuY19zdHIo
KSB9OwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmll
ciIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5hcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIg
PSB7IHZhbHVlLmNfc3RyKCkgfTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVBcHBO
YXAiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlQXBwTmFwID0gcGFyc2VCb29sZWFu
VGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVC
YWNrRm9yd2FyZENhY2hlIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZUJhY2tGb3J3
YXJkQ2FjaGUgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBl
bHNlIGlmIChrZXkgPT0gImFsbG93c0xpbmtQcmV2aWV3IikKLSAgICAgICAgICAgIHRlc3RPcHRp
b25zLmFsbG93c0xpbmtQcmV2aWV3ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVl
KTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVDYXB0dXJlVmlkZW9JblVJUHJvY2Vz
cyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVDYXB0dXJlVmlkZW9JblVJUHJvY2Vz
cyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYg
KGtleSA9PSAiZW5hYmxlQ2FwdHVyZVZpZGVvSW5HUFVQcm9jZXNzIikKLSAgICAgICAgICAgIHRl
c3RPcHRpb25zLmVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2VzcyA9IHBhcnNlQm9vbGVhblRl
c3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlQ2Fw
dHVyZUF1ZGlvSW5VSVByb2Nlc3MiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlQ2Fw
dHVyZUF1ZGlvSW5VSVByb2Nlc3MgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUp
OwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUNhcHR1cmVBdWRpb0luR1BVUHJvY2Vz
cyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVDYXB0dXJlQXVkaW9JbkdQVVByb2Nl
c3MgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlm
IChrZXkgPT0gImFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMiKQotICAgICAgICAgICAgdGVz
dE9wdGlvbnMuYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyA9IHBhcnNlQm9vbGVhblRlc3RI
ZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlSW5BcHBC
cm93c2VyUHJpdmFjeSIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVJbkFwcEJyb3dz
ZXJQcml2YWN5ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAg
ZWxzZSBpZiAoa2V5ID09ICJzdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwiKQotICAgICAgICAg
ICAgdGVzdE9wdGlvbnMuc3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMID0gcGFyc2VTdHJpbmdU
ZXN0SGVhZGVyVmFsdWVBc1VSTCh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiaXNB
cHBCb3VuZFdlYlZpZXciKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuaXNBcHBCb3VuZFdlYlZp
ZXcgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBwYWlyU3Rh
cnQgPSBwYWlyRW5kICsgMTsKLSAgICB9Ci19Ci0KIFRlc3RPcHRpb25zIFRlc3RDb250cm9sbGVy
Ojp0ZXN0T3B0aW9uc0ZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmIGNvbW1hbmQpIGNvbnN0CiB7
Ci0gICAgVGVzdE9wdGlvbnMgb3B0aW9ucyhjb21tYW5kLnBhdGhPclVSTCk7Ci0KLSAgICBvcHRp
b25zLnVzZVJlbW90ZUxheWVyVHJlZSA9IG1fc2hvdWxkVXNlUmVtb3RlTGF5ZXJUcmVlOwotICAg
IG9wdGlvbnMuc2hvdWxkU2hvd1dlYlZpZXcgPSBtX3Nob3VsZFNob3dXZWJWaWV3OwotCi0gICAg
Zm9yIChhdXRvJiBmZWF0dXJlIDogbV9pbnRlcm5hbEZlYXR1cmVzKQotICAgICAgICBvcHRpb25z
LmludGVybmFsRGVidWdGZWF0dXJlcy5hZGQoZmVhdHVyZS5rZXksIGZlYXR1cmUudmFsdWUpOwot
ICAgIGZvciAoYXV0byYgZmVhdHVyZSA6IG1fZXhwZXJpbWVudGFsRmVhdHVyZXMpCi0gICAgICAg
IG9wdGlvbnMuZXhwZXJpbWVudGFsRmVhdHVyZXMuYWRkKGZlYXR1cmUua2V5LCBmZWF0dXJlLnZh
bHVlKTsKLQotICAgIHVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNUZXN0T3B0aW9uc0ZvclRlc3Qob3B0
aW9ucywgY29tbWFuZC5wYXRoT3JVUkwpOwotICAgIHVwZGF0ZVRlc3RPcHRpb25zRnJvbVRlc3RI
ZWFkZXIob3B0aW9ucywgY29tbWFuZC5wYXRoT3JVUkwsIGNvbW1hbmQuYWJzb2x1dGVQYXRoKTsK
LSAgICBwbGF0Zm9ybUFkZFRlc3RPcHRpb25zKG9wdGlvbnMpOworICAgIFRlc3RGZWF0dXJlcyBm
ZWF0dXJlcyA9IG1fZ2xvYmFsRmVhdHVyZXM7CisgICAgbWVyZ2UoZmVhdHVyZXMsIGhhcmRjb2Rl
ZEZlYXR1cmVzQmFzZWRPblBhdGhGb3JUZXN0KGNvbW1hbmQpKTsKKyAgICBtZXJnZShmZWF0dXJl
cywgcGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QoY29tbWFuZCkpOworICAg
IG1lcmdlKGZlYXR1cmVzLCBmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdE9wdGlvbnNGaWxlc0ZvclRl
c3QoY29tbWFuZCkpOworICAgIG1lcmdlKGZlYXR1cmVzLCBmZWF0dXJlRGVmYXVsdHNGcm9tVGVz
dEhlYWRlckZvclRlc3QoY29tbWFuZCkpOworICAgIG1lcmdlKGZlYXR1cmVzLCBwbGF0Zm9ybVNw
ZWNpZmljRmVhdHVyZU92ZXJyaWRlc0RlZmF1bHRzRm9yVGVzdChjb21tYW5kKSk7CiAKLSAgICBy
ZXR1cm4gb3B0aW9uczsKKyAgICByZXR1cm4gVGVzdE9wdGlvbnMgeyBmZWF0dXJlcyB9OwogfQog
CiB2b2lkIFRlc3RDb250cm9sbGVyOjp1cGRhdGVXZWJWaWV3U2l6ZUZvclRlc3QoY29uc3QgVGVz
dEludm9jYXRpb24mIHRlc3QpCiB7CiAgICAgdW5zaWduZWQgd2lkdGggPSB2aWV3V2lkdGg7CiAg
ICAgdW5zaWduZWQgaGVpZ2h0ID0gdmlld0hlaWdodDsKLSAgICBpZiAodGVzdC5vcHRpb25zKCku
aXNTVkdUZXN0KSB7CisgICAgaWYgKHRlc3Qub3B0aW9ucygpLmlzU1ZHVGVzdCgpKSB7CiAgICAg
ICAgIHdpZHRoID0gdzNjU1ZHVmlld1dpZHRoOwogICAgICAgICBoZWlnaHQgPSB3M2NTVkdWaWV3
SGVpZ2h0OwogICAgIH0KQEAgLTE1NzAsNyArMTM4Nyw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6
OnVwZGF0ZVdlYlZpZXdTaXplRm8KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlV2luZG93
U2NhbGVGb3JUZXN0KFBsYXRmb3JtV2ViVmlldyogdmlldywgY29uc3QgVGVzdEludm9jYXRpb24m
IHRlc3QpCiB7Ci0gICAgdmlldy0+Y2hhbmdlV2luZG93U2NhbGVJZk5lZWRlZCh0ZXN0Lm9wdGlv
bnMoKS5kZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgdmlldy0+Y2hhbmdlV2luZG93U2NhbGVJZk5l
ZWRlZCh0ZXN0Lm9wdGlvbnMoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKIH0KIAogdm9pZCBUZXN0
Q29udHJvbGxlcjo6Y29uZmlndXJlVmlld0ZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mIHRl
c3QpCkBAIC0xNzY2LDYgKzE1ODMsMTIgQEAgc3RhdGljIFRlc3RDb21tYW5kIHBhcnNlSW5wdXRM
aW5lKGNvbnN0IAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBkaWUoaW5wdXRMaW5lKTsKICAg
ICB9CisgICAgCisgICAgaWYgKHJlc3VsdC5hYnNvbHV0ZVBhdGguZW1wdHkoKSkgeworICAgICAg
ICAvLyBHcm9zcy4gTmVlZCB0byByZWR1Y2UgY29udmVyc2lvbnMgYmV0d2VlbiBhbGwgdGhlIHN0
cmluZyB0eXBlcyBhbmQgVVJMcy4KKyAgICAgICAgcmVzdWx0LmFic29sdXRlUGF0aCA9IHRlc3RQ
YXRoKGFkb3B0V0soVGVzdENvbnRyb2xsZXI6OmNyZWF0ZVRlc3RVUkwocmVzdWx0LnBhdGhPclVS
TC5jX3N0cigpKSkuZ2V0KCkpOworICAgIH0KKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAg
LTE3ODgsNyArMTYxMSw3IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJ1blRlc3QoY29uc3QgY2hh
cioKICAgICBpZiAoY29tbWFuZC50aW1lb3V0ID4gMF9zKQogICAgICAgICBtX2N1cnJlbnRJbnZv
Y2F0aW9uLT5zZXRDdXN0b21UaW1lb3V0KGNvbW1hbmQudGltZW91dCk7CiAKLSAgICBtX2N1cnJl
bnRJbnZvY2F0aW9uLT5zZXREdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIoY29tbWFuZC5kdW1wSlND
b25zb2xlTG9nSW5TdGRFcnIgfHwgb3B0aW9ucy5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIpOwor
ICAgIG1fY3VycmVudEludm9jYXRpb24tPnNldER1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihjb21t
YW5kLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciB8fCBvcHRpb25zLmR1bXBKU0NvbnNvbGVMb2dJ
blN0ZEVycigpKTsKIAogICAgIHBsYXRmb3JtV2lsbFJ1blRlc3QoKm1fY3VycmVudEludm9jYXRp
b24pOwogCkBAIC0zMDAzLDcgKzI4MjYsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9y
bVdpbGxSdW5UZXN0CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZURh
dGFTdG9yZShXS1BhZ2VDb25maWd1cmF0aW9uUmVmIGNvbmZpZ3VyYXRpb24sIGNvbnN0IFRlc3RP
cHRpb25zJiBvcHRpb25zKQogewotICAgIGlmICghb3B0aW9ucy51c2VFcGhlbWVyYWxTZXNzaW9u
KQorICAgIGlmICghb3B0aW9ucy51c2VFcGhlbWVyYWxTZXNzaW9uKCkpCiAgICAgICAgIFdLUGFn
ZUNvbmZpZ3VyYXRpb25TZXRXZWJzaXRlRGF0YVN0b3JlKGNvbmZpZ3VyYXRpb24sIGRlZmF1bHRX
ZWJzaXRlRGF0YVN0b3JlKCkpOwogCiAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV0tQYWdlQ29u
ZmlndXJhdGlvbkdldFdlYnNpdGVEYXRhU3RvcmUoY29uZmlndXJhdGlvbik7CkBAIC0zODE4LDcg
KzM2NDEsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpyZWluaXRpYWxpemVBcHBCb3VuCiAgICAg
V0tXZWJzaXRlRGF0YVN0b3JlUmVpbml0aWFsaXplQXBwQm91bmREb21haW5zKFRlc3RDb250cm9s
bGVyOjp3ZWJzaXRlRGF0YVN0b3JlKCkpOwogfQogCi12b2lkIFRlc3RDb250cm9sbGVyOjp1cGRh
dGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyhjb25zdCBTdHJpbmcmIGJ1bmRsZUlk
ZW50aWZpZXIpCit2b2lkIFRlc3RDb250cm9sbGVyOjp1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5O
ZXR3b3JrUHJvY2Vzcyhjb25zdCBzdGQ6OnN0cmluZyYgYnVuZGxlSWRlbnRpZmllcikKIHsKICAg
ICBJbkFwcEJyb3dzZXJQcml2YWN5Q2FsbGJhY2tDb250ZXh0IGNvbnRleHQoKnRoaXMpOwogICAg
IFdLV2Vic2l0ZURhdGFTdG9yZVVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNz
KFRlc3RDb250cm9sbGVyOjp3ZWJzaXRlRGF0YVN0b3JlKCksIHRvV0soYnVuZGxlSWRlbnRpZmll
cikuZ2V0KCksICZjb250ZXh0LCBpbkFwcEJyb3dzZXJQcml2YWN5Vm9pZFJlc3VsdENhbGxiYWNr
KTsKQEAgLTM4MzMsOCArMzY1Niw5IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNsZWFyQnVuZGxl
SWRlbnRpZmkKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKLXZvaWQgVGVzdENvbnRyb2xsZXI6
OnBsYXRmb3JtQWRkVGVzdE9wdGlvbnMoVGVzdE9wdGlvbnMmKSBjb25zdAorVGVzdEZlYXR1cmVz
IFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZU92ZXJyaWRlc0RlZmF1bHRz
Rm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYpIGNvbnN0CiB7CisgICAgcmV0dXJuIHsgfTsKIH0K
IAogdm9pZCBUZXN0Q29udHJvbGxlcjo6aW5qZWN0VXNlclNjcmlwdChXS1N0cmluZ1JlZikKSW5k
ZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgJKHJldmlzaW9uIDI2Nzg4
NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPFdlYktpdC9XS1JldGFpblB0ci5oPgog
I2luY2x1ZGUgPHNldD4KICNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dW5vcmRlcmVkX21h
cD4KICNpbmNsdWRlIDx2ZWN0b3I+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KQEAgLTUwLDEyICs1MSwxMiBAQCBPQkpDX0NMQVNTIFdLV2Vi
Vmlld0NvbmZpZ3VyYXRpb247CiAKIG5hbWVzcGFjZSBXVFIgewogCi1jbGFzcyBUZXN0SW52b2Nh
dGlvbjsKK2NsYXNzIEV2ZW50U2VuZGVyUHJveHk7CiBjbGFzcyBPcmlnaW5TZXR0aW5nczsKIGNs
YXNzIFBsYXRmb3JtV2ViVmlldzsKLWNsYXNzIEV2ZW50U2VuZGVyUHJveHk7CitjbGFzcyBUZXN0
SW52b2NhdGlvbjsKK2NsYXNzIFRlc3RPcHRpb25zOwogc3RydWN0IFRlc3RDb21tYW5kOwotc3Ry
dWN0IFRlc3RPcHRpb25zOwogCiBjbGFzcyBBc3luY1Rhc2sgewogcHVibGljOgpAQCAtOTEsNiAr
OTIsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgY29uZmlndXJlV2Vic2l0ZURhdGFTdG9y
ZVRlbXBvcmFyeURpcmVjdG9yaWVzKFdLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb25SZWYp
OwogICAgIHN0YXRpYyBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGVmYXVsdFdlYnNpdGVEYXRhU3Rv
cmUoKTsKIAorICAgIHN0YXRpYyBXS1VSTFJlZiBjcmVhdGVUZXN0VVJMKGNvbnN0IGNoYXIqIHBh
dGhPclVSTCk7CisKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmlld1dpZHRoOwogICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCB2aWV3SGVpZ2h0OwogCkBAIC0xMTUsMjAgKzExOCwxNSBAQCBw
dWJsaWM6CiAgICAgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIHdlYnNpdGVEYXRhU3RvcmUoKTsKIAog
ICAgIEV2ZW50U2VuZGVyUHJveHkqIGV2ZW50U2VuZGVyUHJveHkoKSB7IHJldHVybiBtX2V2ZW50
U2VuZGVyUHJveHkuZ2V0KCk7IH0KLQotICAgIGJvb2wgc2hvdWxkVXNlUmVtb3RlTGF5ZXJUcmVl
KCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRVc2VSZW1vdGVMYXllclRyZWU7IH0KICAgICAKICAg
ICAvLyBSdW5zIHRoZSBydW4gbG9vcCB1bnRpbCBgZG9uZWAgaXMgdHJ1ZSBvciB0aGUgdGltZW91
dCBlbGFwc2VzLgogICAgIGJvb2wgdXNlV2FpdFRvRHVtcFdhdGNoZG9nVGltZXIoKSB7IHJldHVy
biBtX3VzZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyOyB9CiAgICAgdm9pZCBydW5VbnRpbChib29s
JiBkb25lLCBXVEY6OlNlY29uZHMgdGltZW91dCk7CiAgICAgdm9pZCBub3RpZnlEb25lKCk7CiAK
LSAgICBib29sIHNob3VsZFNob3dXZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRTaG93
V2ViVmlldzsgfQogICAgIGJvb2wgdXNpbmdTZXJ2ZXJNb2RlKCkgY29uc3QgeyByZXR1cm4gbV91
c2luZ1NlcnZlck1vZGU7IH0KICAgICB2b2lkIGNvbmZpZ3VyZVZpZXdGb3JUZXN0KGNvbnN0IFRl
c3RJbnZvY2F0aW9uJik7Ci0gICAgCi0gICAgYm9vbCBzaG91bGRTaG93VG91Y2hlcygpIGNvbnN0
IHsgcmV0dXJuIG1fc2hvdWxkU2hvd1RvdWNoZXM7IH0KLSAgICAKKwogICAgIGJvb2wgYmVmb3Jl
VW5sb2FkUmV0dXJuVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2JlZm9yZVVubG9hZFJldHVyblZh
bHVlOyB9CiAgICAgdm9pZCBzZXRCZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZShib29sIHZhbHVlKSB7
IG1fYmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUgPSB2YWx1ZTsgfQogCkBAIC0yNzUsNyArMjczLDcg
QEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJMb2FkZWRTdWJyZXNvdXJjZURvbWFpbnMoKTsKICAg
ICB2b2lkIGNsZWFyQXBwQm91bmRTZXNzaW9uKCk7CiAgICAgdm9pZCByZWluaXRpYWxpemVBcHBC
b3VuZERvbWFpbnMoKTsKLSAgICB2b2lkIHVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQ
cm9jZXNzKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllcik7CisgICAgdm9pZCB1cGRhdGVC
dW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyhjb25zdCBzdGQ6OnN0cmluZyYgYnVuZGxl
SWRlbnRpZmllcik7CiAgICAgdm9pZCBjbGVhckJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9j
ZXNzKCk7CiAKICAgICBXS0FycmF5UmVmIG9wZW5QYW5lbEZpbGVVUkxzKCkgY29uc3QgeyByZXR1
cm4gbV9vcGVuUGFuZWxGaWxlVVJMcy5nZXQoKTsgfQpAQCAtMzYyLDcgKzM2MCw3IEBAIHB1Ymxp
YzoKIAogcHJpdmF0ZToKICAgICBXS1JldGFpblB0cjxXS1BhZ2VDb25maWd1cmF0aW9uUmVmPiBn
ZW5lcmF0ZVBhZ2VDb25maWd1cmF0aW9uKGNvbnN0IFRlc3RPcHRpb25zJik7Ci0gICAgV0tSZXRh
aW5QdHI8V0tDb250ZXh0Q29uZmlndXJhdGlvblJlZj4gZ2VuZXJhdGVDb250ZXh0Q29uZmlndXJh
dGlvbihjb25zdCBUZXN0T3B0aW9uczo6Q29udGV4dE9wdGlvbnMmKSBjb25zdDsKKyAgICBXS1Jl
dGFpblB0cjxXS0NvbnRleHRDb25maWd1cmF0aW9uUmVmPiBnZW5lcmF0ZUNvbnRleHRDb25maWd1
cmF0aW9uKGNvbnN0IENvbnRleHRPcHRpb25zJikgY29uc3Q7CiAgICAgdm9pZCBpbml0aWFsaXpl
KGludCBhcmdjLCBjb25zdCBjaGFyKiBhcmd2W10pOwogICAgIHZvaWQgY3JlYXRlV2ViVmlld1dp
dGhPcHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJik7CiAgICAgdm9pZCBydW4oKTsKQEAgLTM4MCw3
ICszNzgsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CiAgICAgV0tD
b250ZXh0UmVmIHBsYXRmb3JtQWRqdXN0Q29udGV4dChXS0NvbnRleHRSZWYsIFdLQ29udGV4dENv
bmZpZ3VyYXRpb25SZWYpOwogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplQ29udGV4dCgpOwot
ICAgIHZvaWQgcGxhdGZvcm1BZGRUZXN0T3B0aW9ucyhUZXN0T3B0aW9ucyYpIGNvbnN0OwogICAg
IHZvaWQgcGxhdGZvcm1DcmVhdGVXZWJWaWV3KFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYsIGNvbnN0
IFRlc3RPcHRpb25zJik7CiAgICAgc3RhdGljIFBsYXRmb3JtV2ViVmlldyogcGxhdGZvcm1DcmVh
dGVPdGhlclBhZ2UoUGxhdGZvcm1XZWJWaWV3KiBwYXJlbnRWaWV3LCBXS1BhZ2VDb25maWd1cmF0
aW9uUmVmLCBjb25zdCBUZXN0T3B0aW9ucyYpOwogICAgIHZvaWQgcGxhdGZvcm1SZXNldFByZWZl
cmVuY2VzVG9Db25zaXN0ZW50VmFsdWVzKCk7CkBAIC0zODksNyArMzg2LDcgQEAgcHJpdmF0ZToK
ICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIGNvY29hUGxhdGZvcm1Jbml0aWFsaXplKCk7
CiAgICAgdm9pZCBjb2NvYVJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMoY29uc3QgVGVzdE9w
dGlvbnMmKTsKLSAgICB2b2lkIHNldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcihjb25zdCBT
dHJpbmcmKTsKKyAgICB2b2lkIHNldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcihjb25zdCBz
dGQ6OnN0cmluZyYpOwogICAgIHZvaWQgY2xlYXJBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXJU
ZXN0aW5nT3ZlcnJpZGUoKTsKICNlbmRpZgogICAgIHZvaWQgcGxhdGZvcm1Db25maWd1cmVWaWV3
Rm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYpOwpAQCAtNDAzLDcgKzQwMCw5IEBAIHByaXZh
dGU6CiAKICAgICB2b2lkIGVuc3VyZVZpZXdTdXBwb3J0c09wdGlvbnNGb3JUZXN0KGNvbnN0IFRl
c3RJbnZvY2F0aW9uJik7CiAgICAgVGVzdE9wdGlvbnMgdGVzdE9wdGlvbnNGb3JUZXN0KGNvbnN0
IFRlc3RDb21tYW5kJikgY29uc3Q7Ci0gICAgdm9pZCB1cGRhdGVQbGF0Zm9ybVNwZWNpZmljVGVz
dE9wdGlvbnNGb3JUZXN0KFRlc3RPcHRpb25zJiwgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVS
TCkgY29uc3Q7CisgICAgVGVzdEZlYXR1cmVzIGdsb2JhbEZlYXR1cmVEZWZhdWx0c0ZvclRlc3Qo
Y29uc3QgVGVzdENvbW1hbmQmKSBjb25zdDsKKyAgICBUZXN0RmVhdHVyZXMgcGxhdGZvcm1TcGVj
aWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKSBjb25zdDsKKyAg
ICBUZXN0RmVhdHVyZXMgcGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVPdmVycmlkZXNEZWZhdWx0c0Zv
clRlc3QoY29uc3QgVGVzdENvbW1hbmQmKSBjb25zdDsKIAogICAgIHZvaWQgdXBkYXRlV2ViVmll
d1NpemVGb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJik7CiAgICAgdm9pZCB1cGRhdGVXaW5k
b3dTY2FsZUZvclRlc3QoUGxhdGZvcm1XZWJWaWV3KiwgY29uc3QgVGVzdEludm9jYXRpb24mKTsK
QEAgLTUzOCw4ICs1MzcsMTAgQEAgcHJpdmF0ZToKICAgICBib29sIG1fY3JlYXRlZE90aGVyUGFn
ZSB7IGZhbHNlIH07CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG1fcGF0aHM7CiAgICAg
c3RkOjpzZXQ8c3RkOjpzdHJpbmc+IG1fYWxsb3dlZEhvc3RzOwotICAgIEhhc2hNYXA8U3RyaW5n
LCBib29sPiBtX2ludGVybmFsRmVhdHVyZXM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIGJvb2w+IG1f
ZXhwZXJpbWVudGFsRmVhdHVyZXM7CisgICAgVGVzdEZlYXR1cmVzIG1fZ2xvYmFsRmVhdHVyZXM7
CisKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+IG1faW50ZXJuYWxG
ZWF0dXJlczsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+IG1fZXhw
ZXJpbWVudGFsRmVhdHVyZXM7CiAKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbV9pbmpl
Y3RlZEJ1bmRsZVBhdGg7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1fdGVzdFBsdWdp
bkRpcmVjdG9yeTsKQEAgLTU0OCw3ICs1NDksNyBAQCBwcml2YXRlOgogCiAgICAgc3RkOjp1bmlx
dWVfcHRyPFBsYXRmb3JtV2ViVmlldz4gbV9tYWluV2ViVmlldzsKICAgICBXS1JldGFpblB0cjxX
S0NvbnRleHRSZWY+IG1fY29udGV4dDsKLSAgICBPcHRpb25hbDxUZXN0T3B0aW9uczo6Q29udGV4
dE9wdGlvbnM+IG1fY29udGV4dE9wdGlvbnM7CisgICAgT3B0aW9uYWw8Q29udGV4dE9wdGlvbnM+
IG1fY29udGV4dE9wdGlvbnM7CiAgICAgV0tSZXRhaW5QdHI8V0tQYWdlR3JvdXBSZWY+IG1fcGFn
ZUdyb3VwOwogICAgIFdLUmV0YWluUHRyPFdLVXNlckNvbnRlbnRDb250cm9sbGVyUmVmPiBtX3Vz
ZXJDb250ZW50Q29udHJvbGxlcjsKIApAQCAtNjA1LDE0ICs2MDYsMTAgQEAgcHJpdmF0ZToKIAog
ICAgIGJvb2wgbV9mb3JjZUNvbXBsZXhUZXh0IHsgZmFsc2UgfTsKICAgICBib29sIG1fc2hvdWxk
VXNlQWNjZWxlcmF0ZWREcmF3aW5nIHsgZmFsc2UgfTsKLSAgICBib29sIG1fc2hvdWxkVXNlUmVt
b3RlTGF5ZXJUcmVlIHsgZmFsc2UgfTsKLQorICAgIAogICAgIGJvb2wgbV9zaG91bGRMb2dDYW5B
dXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlIHsgZmFsc2UgfTsKICAgICBib29sIG1f
c2hvdWxkTG9nRG93bmxvYWRDYWxsYmFja3MgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9zaG91bGRM
b2dIaXN0b3J5Q2xpZW50Q2FsbGJhY2tzIHsgZmFsc2UgfTsKLSAgICBib29sIG1fc2hvdWxkU2hv
d1dlYlZpZXcgeyBmYWxzZSB9OwotICAgIAotICAgIGJvb2wgbV9zaG91bGRTaG93VG91Y2hlcyB7
IGZhbHNlIH07CiAgICAgYm9vbCBtX2NoZWNrRm9yV29ybGRMZWFrcyB7IGZhbHNlIH07CiAKICAg
ICBib29sIG1fYWxsb3dBbnlIVFRQU0NlcnRpZmljYXRlRm9yQWxsb3dlZEhvc3RzIHsgZmFsc2Ug
fTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCShyZXZp
c2lvbiAyNjc4ODUpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDExICsxMzEsMTEgQEAgYm9vbCBUZXN0SW52b2NhdGlv
bjo6c2hvdWxkTG9nSGlzdG9yeUNsaQogV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJl
Zj4gVGVzdEludm9jYXRpb246OmNyZWF0ZVRlc3RTZXR0aW5nc0RpY3Rpb25hcnkoKQogewogICAg
IGF1dG8gYmVnaW5UZXN0TWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlD
cmVhdGUoKSk7Ci0gICAgc2V0VmFsdWUoYmVnaW5UZXN0TWVzc2FnZUJvZHksICJVc2VGbGV4aWJs
ZVZpZXdwb3J0Iiwgb3B0aW9ucygpLnVzZUZsZXhpYmxlVmlld3BvcnQpOworICAgIHNldFZhbHVl
KGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAiVXNlRmxleGlibGVWaWV3cG9ydCIsIG9wdGlvbnMoKS51
c2VGbGV4aWJsZVZpZXdwb3J0KCkpOwogICAgIHNldFZhbHVlKGJlZ2luVGVzdE1lc3NhZ2VCb2R5
LCAiRHVtcFBpeGVscyIsIG1fZHVtcFBpeGVscyk7CiAgICAgc2V0VmFsdWUoYmVnaW5UZXN0TWVz
c2FnZUJvZHksICJUaW1lb3V0Iiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1fdGltZW91dC5taWxs
aXNlY29uZHMoKSkpOwogICAgIHNldFZhbHVlKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAiRHVtcEpT
Q29uc29sZUxvZ0luU3RkRXJyIiwgbV9kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIpOwotICAgIHNl
dFZhbHVlKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlw
ZXMiLCBvcHRpb25zKCkuYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMuY19zdHIoKSk7Cisg
ICAgc2V0VmFsdWUoYmVnaW5UZXN0TWVzc2FnZUJvZHksICJhZGRpdGlvbmFsU3VwcG9ydGVkSW1h
Z2VUeXBlcyIsIG9wdGlvbnMoKS5hZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcygpLmNfc3Ry
KCkpOwogICAgIHJldHVybiBiZWdpblRlc3RNZXNzYWdlQm9keTsKIH0KIApJbmRleDogVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5jcHAJKHJldmlzaW9uIDI2Nzg4NSkKKysrIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw0
OCArMjYsMjU0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdE9wdGlvbnMu
aCIKIAorI2luY2x1ZGUgIlN0cmluZ0Z1bmN0aW9ucy5oIgorI2luY2x1ZGUgIlRlc3RDb250cm9s
bGVyLmgiCisjaW5jbHVkZSAiU3RkRmlsZXN5c3RlbS5oIgorI2luY2x1ZGUgPGZzdHJlYW0+Cisj
aW5jbHVkZSA8aW9zdHJlYW0+CiAjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCisjZGVmaW5lIERVTVBf
RkVBVFVSRVMgMAorCiBuYW1lc3BhY2UgV1RSIHsKIAotc3RhdGljIGJvb2wgcGF0aENvbnRhaW5z
KGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwsIGNvbnN0IGNoYXIqIHN1YnN0cmluZykKKyNp
ZiBEVU1QX0ZFQVRVUkVTCitzdGF0aWMgdm9pZCBkdW1wRmVhdHVyZXMoY29uc3QgVGVzdEZlYXR1
cmVzJiBmZWF0dXJlcykKIHsKLSAgICBTdHJpbmcgcGF0aChwYXRoT3JVUkwuY19zdHIoKSk7Ci0g
ICAgcmV0dXJuIHBhdGguY29udGFpbnMoc3Vic3RyaW5nKTsgLy8gQ2FzZS1pbnNlbnNpdGl2ZS4K
KyAgICBpZiAoZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMuZW1wdHkoKSAmJiBmZWF0dXJl
cy5pbnRlcm5hbERlYnVnRmVhdHVyZXMuZW1wdHkoKSAmJiBmZWF0dXJlcy5ib29sRmVhdHVyZXMu
ZW1wdHkoKSAmJiBmZWF0dXJlcy5kb3VibGVGZWF0dXJlcy5lbXB0eSgpICYmIGZlYXR1cmVzLnN0
cmluZ0ZlYXR1cmVzLmVtcHR5KCkgJiYgZmVhdHVyZXMuc3RyaW5nVmVjdG9yRmVhdHVyZXMuZW1w
dHkoKSkgeworICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgW0VNUFRZXVxuIjsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoIWZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVz
LmVtcHR5KCkpIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICIgIEV4cGVyaW1lbnRhbCBGZWF0dXJl
czogXG4iOworICAgICAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVyZXMuZXhwZXJp
bWVudGFsRmVhdHVyZXMpCisgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8
PCAiOiAiIDw8IHZhbHVlIDw8ICdcbic7CisgICAgfQorICAgIGlmICghZmVhdHVyZXMuaW50ZXJu
YWxEZWJ1Z0ZlYXR1cmVzLmVtcHR5KCkpIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICIgIEludGVy
bmFsIEZlYXR1cmVzOiBcbiI7CisgICAgICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBmZWF0
dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMpCisgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAg
ICAiIDw8IGtleSA8PCAiOiAiIDw8IHZhbHVlIDw8ICdcbic7CisgICAgfQorICAgIGlmICghZmVh
dHVyZXMuYm9vbEZlYXR1cmVzLmVtcHR5KCkpIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICIgIEJv
b2wgRmVhdHVyZXM6IFxuIjsKKyAgICAgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGZlYXR1
cmVzLmJvb2xGZWF0dXJlcykKKyAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAgICIgPDwga2V5
IDw8ICI6ICIgPDwgdmFsdWUgPDwgJ1xuJzsKKyAgICB9CisgICAgaWYgKCFmZWF0dXJlcy5kb3Vi
bGVGZWF0dXJlcy5lbXB0eSgpKSB7CisgICAgICAgIHN0ZDo6Y2VyciA8PCAiICBEb3VibGUgRmVh
dHVyZXM6IFxuIjsKKyAgICAgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGZlYXR1cmVzLmRv
dWJsZUZlYXR1cmVzKQorICAgICAgICAgICAgc3RkOjpjZXJyIDw8ICIgICAgIiA8PCBrZXkgPDwg
IjogIiA8PCB2YWx1ZSA8PCAnXG4nOworICAgIH0KKyAgICBpZiAoIWZlYXR1cmVzLnN0cmluZ0Zl
YXR1cmVzLmVtcHR5KCkpIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICIgIFN0cmluZyBGZWF0dXJl
czogXG4iOworICAgICAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVyZXMuc3RyaW5n
RmVhdHVyZXMpCisgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8PCAiOiAi
IDw8IHZhbHVlIDw8ICdcbic7CisgICAgfQorICAgIGlmICghZmVhdHVyZXMuc3RyaW5nVmVjdG9y
RmVhdHVyZXMuZW1wdHkoKSkgeworICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgU3RyaW5nIFZlY3Rv
ciBGZWF0dXJlczogXG4iOworICAgICAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVy
ZXMuc3RyaW5nVmVjdG9yRmVhdHVyZXMpCisgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgICAi
IDw8IGtleSA8PCAiOiBOdW1iZXIgb2Ygc3RyaW5ncyAiIDw8IHZhbHVlLnNpemUoKSA8PCAnXG4n
OworICAgIH0KIH0KKyNlbmRpZgogCi1zdGF0aWMgYm9vbCBzaG91bGRNYWtlVmlld3BvcnRGbGV4
aWJsZShjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQorZW51bSBjbGFzcyBLZXlUeXBlIHsK
KyAgICBCb29sLAorICAgIERvdWJsZSwKKyAgICBTdHJpbmcsCisgICAgU3RyaW5nUmVsYXRpdmVQ
YXRoLAorICAgIFN0cmluZ1VSTCwKKyAgICBTdHJpbmdWZWN0b3IsCisgICAgVW5rbm93bgorfTsK
Kworc3RhdGljIEtleVR5cGUga2V5VHlwZShzdGQ6OnN0cmluZyBrZXkpCiB7Ci0gICAgcmV0dXJu
IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJ2aWV3cG9ydC8iKSAmJiAhcGF0aENvbnRhaW5zKHBh
dGhPclVSTCwgInZpc3VhbC12aWV3cG9ydC8iKTsKKyAgICBzdGF0aWMgc3RkOjp1bm9yZGVyZWRf
bWFwPHN0ZDo6c3RyaW5nLCBLZXlUeXBlPiBrZXlUeXBlTWFwIHsKKyAgICAgICAgeyAidXNlVGhy
ZWFkZWRTY3JvbGxpbmciLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInVzZUFjY2VsZXJh
dGVkRHJhd2luZyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAidXNlUmVtb3RlTGF5ZXJU
cmVlIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJzaG91bGRTaG93V2ViVmlldyIsIEtl
eVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAidXNlRmxleGlibGVWaWV3cG9ydCIsIEtleVR5cGU6
OkJvb2wgfSwKKyAgICAgICAgeyAiaXNTVkdUZXN0IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAg
ICB7ICJ1c2VEYXRhRGV0ZWN0aW9uIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VN
b2NrU2Nyb2xsYmFycyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAibmVlZHNTaXRlU3Bl
Y2lmaWNRdWlya3MiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImlnbm9yZXNWaWV3cG9y
dFNjYWxlTGltaXRzIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VDaGFyYWN0ZXJT
ZWxlY3Rpb25HcmFudWxhcml0eSIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxl
QXR0YWNobWVudEVsZW1lbnQiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUlu
dGVyc2VjdGlvbk9ic2VydmVyIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VFcGhl
bWVyYWxTZXNzaW9uIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVNZW51SXRl
bUVsZW1lbnQiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUtleWdlbkVsZW1l
bnQiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZU1vZGVybk1lZGlhQ29udHJv
bHMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZVBvaW50ZXJMb2NrIiwgS2V5
VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVXZWJBdXRoZW50aWNhdGlvbiIsIEtleVR5
cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhl
bnRpY2F0b3IiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUluc3BlY3RvckFk
ZGl0aW9ucyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAic2hvdWxkU2hvd1RvdWNoZXMi
LCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIs
IEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNl
c1RvQXNrRm9yQ3JlZGVudGlhbHMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImRvbVBh
c3RlQWxsb3dlZCIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQ29sb3JGaWx0
ZXIiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5k
c0luRGFya01vZGUiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInJ1blNpbmdseSIsIEtl
eVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiY2hlY2tGb3JXb3JsZExlYWtzIiwgS2V5VHlwZTo6
Qm9vbCB9LAorICAgICAgICB7ICJzaG91bGRJZ25vcmVNZXRhVmlld3BvcnQiLCBLZXlUeXBlOjpC
b29sIH0sCisgICAgICAgIHsgInNwZWxsQ2hlY2tpbmdEb3RzIiwgS2V5VHlwZTo6Qm9vbCB9LAor
ICAgICAgICB7ICJlbmFibGVTZXJ2aWNlQ29udHJvbHMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAg
ICAgIHsgImVkaXRhYmxlIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJzaG91bGRIYW5k
bGVSdW5PcGVuUGFuZWwiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInNob3VsZFByZXNl
bnRQb3BvdmVycyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQXBwTmFwIiwg
S2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVCYWNrRm9yd2FyZENhY2hlIiwgS2V5
VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJhbGxvd3NMaW5rUHJldmlldyIsIEtleVR5cGU6OkJv
b2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MiLCBLZXlUeXBl
OjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2VzcyIsIEtl
eVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQ2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3Mi
LCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUNhcHR1cmVBdWRpb0luR1BVUHJv
Y2VzcyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiYWxsb3dUb3BOYXZpZ2F0aW9uVG9E
YXRhVVJMcyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlSW5BcHBCcm93c2Vy
UHJpdmFjeSIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiaXNBcHBCb3VuZFdlYlZpZXci
LCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5n
VGltZW91dHMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZVByb2Nlc3NTd2Fw
T25OYXZpZ2F0aW9uIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVQcm9jZXNz
U3dhcE9uV2luZG93T3BlbiIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAidXNlU2Vydmlj
ZVdvcmtlclNob3J0VGltZW91dCIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAKKyAgICAgICAgeyAi
Y29udGVudEluc2V0LnRvcCIsIEtleVR5cGU6OkRvdWJsZSB9LAorICAgICAgICB7ICJkZXZpY2VT
Y2FsZUZhY3RvciIsIEtleVR5cGU6OkRvdWJsZSB9LAorCisgICAgICAgIHsgImpzY09wdGlvbnMi
LCBLZXlUeXBlOjpTdHJpbmcgfSwKKyAgICAgICAgeyAiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdl
VHlwZXMiLCBLZXlUeXBlOjpTdHJpbmcgfSwKKyAgICAgICAgeyAiY29udGVudE1vZGUiLCBLZXlU
eXBlOjpTdHJpbmcgfSwKKyAgICAgICAgeyAiYXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyIiwg
S2V5VHlwZTo6U3RyaW5nIH0sCisgICAgICAgIHsgImFwcGxpY2F0aW9uTWFuaWZlc3QiLCBLZXlU
eXBlOjpTdHJpbmdSZWxhdGl2ZVBhdGggfSwKKyAgICAgICAgeyAic3RhbmRhbG9uZVdlYkFwcGxp
Y2F0aW9uVVJMIiwgS2V5VHlwZTo6U3RyaW5nVVJMIH0sCisKKyAgICAgICAgeyAibGFuZ3VhZ2Ui
LCBLZXlUeXBlOjpTdHJpbmdWZWN0b3IgfSwKKyAgICB9OworICAgIAorICAgIGF1dG8gaXQgPSBr
ZXlUeXBlTWFwLmZpbmQoa2V5KTsKKyAgICBpZiAoaXQgPT0ga2V5VHlwZU1hcC5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuIEtleVR5cGU6OlVua25vd247CisgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CiB9
CiAKLXN0YXRpYyBib29sIHNob3VsZFVzZUZpeGVkTGF5b3V0KGNvbnN0IHN0ZDo6c3RyaW5nJiBw
YXRoT3JVUkwpCitzdGF0aWMgYm9vbCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUoY29uc3Qg
c3RkOjpzdHJpbmcmIHZhbHVlKQogewotI2lmIEVOQUJMRShDU1NfREVWSUNFX0FEQVBUQVRJT04p
Ci0gICAgaWYgKHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJkZXZpY2UtYWRhcHQvIikgfHwgcGF0
aENvbnRhaW5zKHBhdGhPclVSTCwgImRldmljZS1hZGFwdFxcIikpCisgICAgaWYgKHZhbHVlID09
ICJ0cnVlIikKICAgICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKKyAgICBpZiAodmFsdWUgPT0g
ImZhbHNlIikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTE9HX0VSUk9SKCJGb3VuZCB1
bmV4cGVjdGVkIHZhbHVlICclcycgZm9yIGJvb2xlYW4gb3B0aW9uLiBFeHBlY3RlZCAndHJ1ZScg
b3IgJ2ZhbHNlJy4iLCB2YWx1ZS5jX3N0cigpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0
YXRpYyBib29sIGlzU1ZHVGVzdFBhdGgoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKK3N0
YXRpYyBzdGQ6OnN0cmluZyBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzUmVsYXRpdmVQYXRo
KGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkK
K3sKKyAgICBhdXRvIGJhc2VVUkwgPSBhZG9wdFdLKFRlc3RDb250cm9sbGVyOjpjcmVhdGVUZXN0
VVJMKHBhdGhPclVSTC5jX3N0cigpKSk7CisgICAgYXV0byByZWxhdGl2ZVVSTCA9IGFkb3B0V0so
V0tVUkxDcmVhdGVXaXRoQmFzZVVSTChiYXNlVVJMLmdldCgpLCB2YWx1ZS5jX3N0cigpKSk7Cisg
ICAgcmV0dXJuIHRvU1REKGFkb3B0V0soV0tVUkxDb3B5UGF0aChyZWxhdGl2ZVVSTC5nZXQoKSkp
KTsKK30KKworc3RhdGljIHN0ZDo6c3RyaW5nIHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNV
UkwoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKQogewotICAgIHJldHVybiBwYXRoQ29udGFpbnMo
cGF0aE9yVVJMLCAic3ZnL1czQy1TVkctMS4xIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwg
InN2Z1xcVzNDLVNWRy0xLjEiKTsKKyAgICByZXR1cm4gdG9TVEQoYWRvcHRXSyhXS1VSTENvcHlT
dHJpbmcoVGVzdENvbnRyb2xsZXI6OmNyZWF0ZVRlc3RVUkwodmFsdWUuY19zdHIoKSkpKSk7CiB9
CiAKLXN0YXRpYyBib29sIHNob3VsZFVzZUVwaGVtZXJhbFNlc3Npb24oY29uc3Qgc3RkOjpzdHJp
bmcmIHBhdGhPclVSTCkKK3N0YXRpYyBUZXN0RmVhdHVyZXMgcGFyc2VUZXN0SGVhZGVyKHN0ZDo6
ZmlsZXN5c3RlbTo6cGF0aCBwYXRoLCBjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQogewot
ICAgIHJldHVybiBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAidzNjL0luZGV4ZWREQi1wcml2YXRl
LWJyb3dzaW5nIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInczY1xcSW5kZXhlZERCLXBy
aXZhdGUtYnJvd3NpbmciKTsKKyAgICBUZXN0RmVhdHVyZXMgZmVhdHVyZXM7CisgICAgaWYgKCFz
dGQ6OmZpbGVzeXN0ZW06OmV4aXN0cyhwYXRoKSkKKyAgICAgICAgcmV0dXJuIGZlYXR1cmVzOwor
CisgICAgc3RkOjppZnN0cmVhbSBmaWxlKHBhdGgpOworICAgIGlmICghZmlsZS5nb29kKCkpIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3Qgb3BlbiBmaWxlIHRvIGluc3BlY3QgdGVzdCBo
ZWFkZXJzIGluICVzIiwgcGF0aC5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIGZlYXR1cmVzOwor
ICAgIH0KKworICAgIHN0ZDo6c3RyaW5nIG9wdGlvbnM7CisgICAgZ2V0bGluZShmaWxlLCBvcHRp
b25zKTsKKyAgICBzdGQ6OnN0cmluZyBiZWdpblN0cmluZygid2Via2l0LXRlc3QtcnVubmVyIFsg
Iik7CisgICAgc3RkOjpzdHJpbmcgZW5kU3RyaW5nKCIgXSIpOworICAgIHNpemVfdCBiZWdpbkxv
Y2F0aW9uID0gb3B0aW9ucy5maW5kKGJlZ2luU3RyaW5nKTsKKyAgICBpZiAoYmVnaW5Mb2NhdGlv
biA9PSBzdGQ6OnN0cmluZzo6bnBvcykKKyAgICAgICAgcmV0dXJuIGZlYXR1cmVzOworICAgIHNp
emVfdCBlbmRMb2NhdGlvbiA9IG9wdGlvbnMuZmluZChlbmRTdHJpbmcsIGJlZ2luTG9jYXRpb24p
OworICAgIGlmIChlbmRMb2NhdGlvbiA9PSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgICBM
T0dfRVJST1IoIkNvdWxkIG5vdCBmaW5kIGVuZCBvZiB0ZXN0IGhlYWRlciBpbiAlcyIsIHBhdGgu
Y19zdHIoKSk7CisgICAgICAgIHJldHVybiBmZWF0dXJlczsKKyAgICB9CisgICAgc3RkOjpzdHJp
bmcgcGFpclN0cmluZyA9IG9wdGlvbnMuc3Vic3RyKGJlZ2luTG9jYXRpb24gKyBiZWdpblN0cmlu
Zy5zaXplKCksIGVuZExvY2F0aW9uIC0gKGJlZ2luTG9jYXRpb24gKyBiZWdpblN0cmluZy5zaXpl
KCkpKTsKKyAgICBzaXplX3QgcGFpclN0YXJ0ID0gMDsKKyAgICB3aGlsZSAocGFpclN0YXJ0IDwg
cGFpclN0cmluZy5zaXplKCkpIHsKKyAgICAgICAgc2l6ZV90IHBhaXJFbmQgPSBwYWlyU3RyaW5n
LmZpbmQoIiAiLCBwYWlyU3RhcnQpOworICAgICAgICBpZiAocGFpckVuZCA9PSBzdGQ6OnN0cmlu
Zzo6bnBvcykKKyAgICAgICAgICAgIHBhaXJFbmQgPSBwYWlyU3RyaW5nLnNpemUoKTsKKyAgICAg
ICAgc2l6ZV90IGVxdWFsc0xvY2F0aW9uID0gcGFpclN0cmluZy5maW5kKCI9IiwgcGFpclN0YXJ0
KTsKKyAgICAgICAgaWYgKGVxdWFsc0xvY2F0aW9uID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7Cisg
ICAgICAgICAgICBMT0dfRVJST1IoIk1hbGZvcm1lZCBvcHRpb24gaW4gdGVzdCBoZWFkZXIgKGNv
dWxkIG5vdCBmaW5kICc9JyBjaGFyYWN0ZXIpIGluICVzIiwgcGF0aC5jX3N0cigpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGF1dG8ga2V5ID0gcGFpclN0cmluZy5z
dWJzdHIocGFpclN0YXJ0LCBlcXVhbHNMb2NhdGlvbiAtIHBhaXJTdGFydCk7CisgICAgICAgIGF1
dG8gdmFsdWUgPSBwYWlyU3RyaW5nLnN1YnN0cihlcXVhbHNMb2NhdGlvbiArIDEsIHBhaXJFbmQg
LSAoZXF1YWxzTG9jYXRpb24gKyAxKSk7CisKKyAgICAgICAgaWYgKGtleS5yZmluZCgiZXhwZXJp
bWVudGFsOiIpID09IDApIHsKKyAgICAgICAgICAgIGtleSA9IGtleS5zdWJzdHIoMTMpOworICAg
ICAgICAgICAgZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBwYXJz
ZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpIH0pOworICAgICAgICB9IGVsc2UgaWYgKGtl
eS5yZmluZCgiaW50ZXJuYWw6IikgPT0gMCkgeworICAgICAgICAgICAga2V5ID0ga2V5LnN1YnN0
cig5KTsKKyAgICAgICAgICAgIGZlYXR1cmVzLmludGVybmFsRGVidWdGZWF0dXJlcy5pbnNlcnQo
eyBrZXksIHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSkgfSk7CisgICAgICAgIH0K
KworICAgICAgICBzd2l0Y2ggKGtleVR5cGUoa2V5KSkgeworICAgICAgICBjYXNlIEtleVR5cGU6
OkJvb2w6CisgICAgICAgICAgICBmZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBw
YXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpIH0pOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgS2V5VHlwZTo6RG91YmxlOgorICAgICAgICAgICAgZmVhdHVyZXMuZG91
YmxlRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBzdGQ6OnN0b2QodmFsdWUpIH0pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nOgorICAgICAgICAgICAgZmVh
dHVyZXMuc3RyaW5nRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCB2YWx1ZSB9KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEtleVR5cGU6OlN0cmluZ1JlbGF0aXZlUGF0aDoKKyAgICAg
ICAgICAgIGZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVzLmluc2VydCh7IGtleSwgcGFyc2VTdHJpbmdU
ZXN0SGVhZGVyVmFsdWVBc1JlbGF0aXZlUGF0aCh2YWx1ZSwgcGF0aE9yVVJMKSB9KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEtleVR5cGU6OlN0cmluZ1VSTDoKKyAgICAgICAg
ICAgIGZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVzLmluc2VydCh7IGtleSwgcGFyc2VTdHJpbmdUZXN0
SGVhZGVyVmFsdWVBc1VSTCh2YWx1ZSkgfSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBLZXlUeXBlOjpTdHJpbmdWZWN0b3I6CisgICAgICAgICAgICBmZWF0dXJlcy5zdHJpbmdW
ZWN0b3JGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHNwbGl0KHZhbHVlLCAnLCcpIH0pOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgS2V5VHlwZTo6VW5rbm93bjoKKyAgICAgICAgICAg
IExPR19FUlJPUigiVW5rbm93biBrZXksICclcywgaW4gdGVzdCBoZWFkZXIgaW4gJXMiLCBrZXku
Y19zdHIoKSwgcGF0aC5jX3N0cigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgcGFpclN0YXJ0ID0gcGFpckVuZCArIDE7CisgICAgfQorCisgICAgcmV0dXJuIGZl
YXR1cmVzOworfQorCitzdGF0aWMgYm9vbCBwYXRoQ29udGFpbnMoY29uc3Qgc3RkOjpzdHJpbmcm
IHBhdGhPclVSTCwgY29uc3QgY2hhciogc3Vic3RyaW5nKQoreworICAgIFN0cmluZyBwYXRoKHBh
dGhPclVSTC5jX3N0cigpKTsKKyAgICByZXR1cm4gcGF0aC5jb250YWlucyhzdWJzdHJpbmcpOyAv
LyBDYXNlLWluc2Vuc2l0aXZlLgogfQogCi1zdGF0aWMgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3JG
b3JUZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCitzdGF0aWMgT3B0aW9uYWw8ZG91
YmxlPiBkZXZpY2VTY2FsZUZhY3RvckZvclRlc3QoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVS
TCkKIHsKICAgICBpZiAocGF0aENvbnRhaW5zKHBhdGhPclVSTCwgIi9oaWRwaS0zeC0iKSkKICAg
ICAgICAgcmV0dXJuIDM7CiAgICAgaWYgKHBhdGhDb250YWlucyhwYXRoT3JVUkwsICIvaGlkcGkt
IikpCiAgICAgICAgIHJldHVybiAyOwotICAgIHJldHVybiAxOworICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiB9CiAKIHN0YXRpYyBib29sIHNob3VsZER1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihj
b25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQpAQCAtODMsMTQgKzI4OSw2NiBAQCBzdGF0aWMg
Ym9vbCBzaG91bGREdW1wSlNDb25zb2xlTG9nSW5TdGRFCiAgICAgICAgIHx8IHBhdGhDb250YWlu
cyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC93ZWJzb2NrZXRzIikgfHwgcGF0aENvbnRhaW5z
KHBhdGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3dlYnNvY2tldHMiKTsKIH0KIAotVGVzdE9wdGlv
bnM6OlRlc3RPcHRpb25zKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCi0gICAgOiB1c2VG
bGV4aWJsZVZpZXdwb3J0KHNob3VsZE1ha2VWaWV3cG9ydEZsZXhpYmxlKHBhdGhPclVSTCkpCi0g
ICAgLCB1c2VGaXhlZExheW91dChzaG91bGRVc2VGaXhlZExheW91dChwYXRoT3JVUkwpKQotICAg
ICwgaXNTVkdUZXN0KGlzU1ZHVGVzdFBhdGgocGF0aE9yVVJMKSkKLSAgICAsIHVzZUVwaGVtZXJh
bFNlc3Npb24oc2hvdWxkVXNlRXBoZW1lcmFsU2Vzc2lvbihwYXRoT3JVUkwpKQotICAgICwgZHVt
cEpTQ29uc29sZUxvZ0luU3RkRXJyKHNob3VsZER1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihwYXRo
T3JVUkwpKQotICAgICwgZGV2aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3JGb3JUZXN0
KHBhdGhPclVSTCkpCitUZXN0RmVhdHVyZXMgaGFyZGNvZGVkRmVhdHVyZXNCYXNlZE9uUGF0aEZv
clRlc3QoY29uc3QgVGVzdENvbW1hbmQmIGNvbW1hbmQpCit7CisgICAgVGVzdEZlYXR1cmVzIGZl
YXR1cmVzOworCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCB0cnkgdG8gcmVwbGFjZSB0aGUgcmVz
ZXQgb2YgdGhlc2Ugd2l0aCBUZXN0T3B0aW9ucy50eHQgYmFzZWQgc29sdXRpb25zLgorCisgICAg
aWYgKHNob3VsZER1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihjb21tYW5kLnBhdGhPclVSTCkpCisg
ICAgICAgIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAiZHVtcEpTQ29uc29sZUxvZ0lu
U3RkRXJyIiwgdHJ1ZSB9KTsKKyAgICBpZiAoYXV0byBkZXZpY2VTY2FsZUZhY3RvciA9IGRldmlj
ZVNjYWxlRmFjdG9yRm9yVGVzdChjb21tYW5kLnBhdGhPclVSTCk7IGRldmljZVNjYWxlRmFjdG9y
ICE9IFdURjo6bnVsbG9wdCkKKyAgICAgICAgZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMuaW5zZXJ0
KHsgImRldmljZVNjYWxlRmFjdG9yIiwgZGV2aWNlU2NhbGVGYWN0b3IudmFsdWUoKSB9KTsKKwor
ICAgIHJldHVybiBmZWF0dXJlczsKK30KKwordm9pZCBtZXJnZShUZXN0RmVhdHVyZXMmIGJhc2Us
IFRlc3RGZWF0dXJlcyBhZGRpdGlvbmFsKQoreworICAgIGFkZGl0aW9uYWwuZXhwZXJpbWVudGFs
RmVhdHVyZXMubWVyZ2UoYmFzZS5leHBlcmltZW50YWxGZWF0dXJlcyk7CisgICAgYWRkaXRpb25h
bC5pbnRlcm5hbERlYnVnRmVhdHVyZXMubWVyZ2UoYmFzZS5pbnRlcm5hbERlYnVnRmVhdHVyZXMp
OworICAgIGFkZGl0aW9uYWwuYm9vbEZlYXR1cmVzLm1lcmdlKGJhc2UuYm9vbEZlYXR1cmVzKTsK
KyAgICBhZGRpdGlvbmFsLmRvdWJsZUZlYXR1cmVzLm1lcmdlKGJhc2UuZG91YmxlRmVhdHVyZXMp
OworICAgIGFkZGl0aW9uYWwuc3RyaW5nRmVhdHVyZXMubWVyZ2UoYmFzZS5zdHJpbmdGZWF0dXJl
cyk7CisgICAgYWRkaXRpb25hbC5zdHJpbmdWZWN0b3JGZWF0dXJlcy5tZXJnZShiYXNlLnN0cmlu
Z1ZlY3RvckZlYXR1cmVzKTsKKyAgICBiYXNlID0gYWRkaXRpb25hbDsKK30KKworVGVzdEZlYXR1
cmVzIGZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0T3B0aW9uc0ZpbGVzRm9yVGVzdChjb25zdCBUZXN0
Q29tbWFuZCYgY29tbWFuZCkKK3sKKyAgICBzdGQ6OmZpbGVzeXN0ZW06OnBhdGggcGF0aCA9IGNv
bW1hbmQuYWJzb2x1dGVQYXRoOworCisgICAgLy8gR2F0aGVyIGRpcmVjdG9yaWVzIHRoYXQgbWF5
IGNvbnRhaW4gVGVzdEhlYWRlcnMgZmlsZXMuCisgICAgc3RkOjp2ZWN0b3I8c3RkOjpmaWxlc3lz
dGVtOjpwYXRoPiBkaXJlY3Rvcmllc1RvQ2hlY2s7CisgICAgZG8geworICAgICAgICBwYXRoID0g
cGF0aC5wYXJlbnRfcGF0aCgpOworICAgICAgICBkaXJlY3Rvcmllc1RvQ2hlY2sucHVzaF9iYWNr
KHBhdGgpOworICAgIH0gd2hpbGUgKHBhdGguZmlsZW5hbWUoKSAhPSAiTGF5b3V0VGVzdHMiKTsK
KworICAgIC8vIEl0ZXJhdGUgdGhlIGRpcmVjdG9yaWVzIHRoYXQgbWF5IGNvbnRhaW4gJ1Rlc3RP
cHRpb25zLnR4dCcgZmlsZXMgZnJvbSBsZWFzdCB0byBtb3N0CisgICAgLy8gc3BlY2lmaWMsIGFu
ZCBtZXJnZSBpbiBhbnkgZmVhdHVyZXMgZm91bmQuCisgICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVz
OworICAgIGZvciAoYXV0byBkaXJlY3RvcnlUb0NoZWNrIDogV1RGOjptYWtlUmV2ZXJzZWRSYW5n
ZShkaXJlY3Rvcmllc1RvQ2hlY2spKSB7CisgICAgICAgIGF1dG8gdGVzdEhlYWRlckZpbGUgPSBk
aXJlY3RvcnlUb0NoZWNrIC8gIlRlc3RPcHRpb25zLnR4dCI7CisgICAgICAgIGF1dG8gdGVzdE9w
dGlvbnNGZWF0dXJlcyA9IHBhcnNlVGVzdEhlYWRlcih0ZXN0SGVhZGVyRmlsZSwgY29tbWFuZC5w
YXRoT3JVUkwpOworICAgICAgICBtZXJnZShmZWF0dXJlcywgdGVzdE9wdGlvbnNGZWF0dXJlcyk7
CisgICAgfQorICAgIAorICAgIHJldHVybiBmZWF0dXJlczsKK30KKworVGVzdEZlYXR1cmVzIGZl
YXR1cmVEZWZhdWx0c0Zyb21UZXN0SGVhZGVyRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYgY29t
bWFuZCkKIHsKKyAgICByZXR1cm4gcGFyc2VUZXN0SGVhZGVyKGNvbW1hbmQuYWJzb2x1dGVQYXRo
LCBjb21tYW5kLnBhdGhPclVSTCk7Cit9CisKK1Rlc3RPcHRpb25zOjpUZXN0T3B0aW9ucyhUZXN0
RmVhdHVyZXMgZmVhdHVyZXMpCisgICAgOiBtX2ZlYXR1cmVzIHsgZmVhdHVyZXMgfQoreworI2lm
IERVTVBfRkVBVFVSRVMKKyAgICBzdGQ6OmNlcnIgPDwgIkRVTVBJTkcgRkVBVFVSRVNcbiI7Cisg
ICAgZHVtcEZlYXR1cmVzKG1fZmVhdHVyZXMpOworI2VuZGlmCiB9CiAKIH0KSW5kZXg6IFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RPcHRpb25zLmgJKHJldmlzaW9uIDI2Nzg4NSkKKysrIFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTY1ICsy
NSwxNzYgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8b3B0aW9uYWw+CisjaW5j
bHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisjaW5jbHVkZSA8dmVjdG9y
PgogCiBuYW1lc3BhY2UgV1RSIHsKIAotc3RydWN0IFRlc3RPcHRpb25zIHsKLSAgICBzdHJ1Y3Qg
Q29udGV4dE9wdGlvbnMgewotICAgICAgICBWZWN0b3I8U3RyaW5nPiBvdmVycmlkZUxhbmd1YWdl
czsKLSAgICAgICAgYm9vbCBpZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzIHsgZmFs
c2UgfTsKLSAgICAgICAgYm9vbCBlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbiB7IHRydWUg
fTsKLSAgICAgICAgYm9vbCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiB7IGZhbHNlIH07
Ci0gICAgICAgIGJvb2wgdXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dCB7IGZhbHNlIH07Ci0K
LSAgICAgICAgYm9vbCBoYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25zKGNvbnN0IENvbnRleHRP
cHRpb25zJiBvcHRpb25zKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaWdub3Jl
U3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0cyAhPSBvcHRpb25zLmlnbm9yZVN5bmNocm9ub3Vz
TWVzc2FnaW5nVGltZW91dHMKLSAgICAgICAgICAgICAgICB8fCBvdmVycmlkZUxhbmd1YWdlcyAh
PSBvcHRpb25zLm92ZXJyaWRlTGFuZ3VhZ2VzCi0gICAgICAgICAgICAgICAgfHwgZW5hYmxlUHJv
Y2Vzc1N3YXBPbk5hdmlnYXRpb24gIT0gb3B0aW9ucy5lbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdh
dGlvbgotICAgICAgICAgICAgICAgIHx8IGVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuICE9
IG9wdGlvbnMuZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW4KLSAgICAgICAgICAgICAgICB8
fCB1c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0ICE9IG9wdGlvbnMudXNlU2VydmljZVdvcmtl
clNob3J0VGltZW91dCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgc2hvdWxkRW5hYmxlUHJv
Y2Vzc1N3YXBPbk5hdmlnYXRpb24oKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24gfHwgZW5hYmxlUHJvY2Vzc1N3YXBPbldp
bmRvd09wZW47Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgYm9vbCB1c2VUaHJlYWRlZFNjcm9s
bGluZyB7IGZhbHNlIH07Ci0gICAgYm9vbCB1c2VBY2NlbGVyYXRlZERyYXdpbmcgeyBmYWxzZSB9
OwotICAgIGJvb2wgdXNlUmVtb3RlTGF5ZXJUcmVlIHsgZmFsc2UgfTsKLSAgICBib29sIHNob3Vs
ZFNob3dXZWJWaWV3IHsgZmFsc2UgfTsKLSAgICBib29sIHVzZUZsZXhpYmxlVmlld3BvcnQgeyBm
YWxzZSB9OwotICAgIGJvb2wgdXNlRml4ZWRMYXlvdXQgeyBmYWxzZSB9OwotICAgIGJvb2wgaXNT
VkdUZXN0IHsgZmFsc2UgfTsKLSAgICBib29sIHVzZURhdGFEZXRlY3Rpb24geyBmYWxzZSB9Owot
ICAgIGJvb2wgdXNlTW9ja1Njcm9sbGJhcnMgeyB0cnVlIH07Ci0gICAgYm9vbCBuZWVkc1NpdGVT
cGVjaWZpY1F1aXJrcyB7IGZhbHNlIH07Ci0gICAgYm9vbCBpZ25vcmVzVmlld3BvcnRTY2FsZUxp
bWl0cyB7IGZhbHNlIH07Ci0gICAgYm9vbCB1c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0
eSB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVBdHRhY2htZW50RWxlbWVudCB7IGZhbHNlIH07
Ci0gICAgYm9vbCBlbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciB7IGZhbHNlIH07Ci0gICAgYm9v
bCB1c2VFcGhlbWVyYWxTZXNzaW9uIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZU1lbnVJdGVt
RWxlbWVudCB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVLZXlnZW5FbGVtZW50IHsgZmFsc2Ug
fTsKLSAgICBib29sIGVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMgeyB0cnVlIH07Ci0gICAgYm9v
bCBlbmFibGVQb2ludGVyTG9jayB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVXZWJBdXRoZW50
aWNhdGlvbiB7IHRydWUgfTsKLSAgICBib29sIGVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxB
dXRoZW50aWNhdG9yIHsgdHJ1ZSB9OwotICAgIGJvb2wgZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25z
IHsgZmFsc2UgfTsKLSAgICBib29sIHNob3VsZFNob3dUb3VjaGVzIHsgZmFsc2UgfTsKLSAgICBi
b29sIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciB7IGZhbHNlIH07Ci0gICAgYm9vbCBhbGxvd0Ny
b3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyB7IGZhbHNlIH07Ci0gICAg
Ym9vbCBkb21QYXN0ZUFsbG93ZWQgeyB0cnVlIH07Ci0gICAgYm9vbCBlbmFibGVDb2xvckZpbHRl
ciB7IGZhbHNlIH07Ci0gICAgYm9vbCBwdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2Rl
IHsgZmFsc2UgfTsKLSAgICBib29sIHJ1blNpbmdseSB7IGZhbHNlIH07Ci0gICAgYm9vbCBjaGVj
a0ZvcldvcmxkTGVha3MgeyBmYWxzZSB9OwotICAgIGJvb2wgc2hvdWxkSWdub3JlTWV0YVZpZXdw
b3J0IHsgZmFsc2UgfTsKLSAgICBib29sIHNob3VsZFNob3dTcGVsbENoZWNraW5nRG90cyB7IGZh
bHNlIH07Ci0gICAgYm9vbCBlbmFibGVTZXJ2aWNlQ29udHJvbHMgeyBmYWxzZSB9OwotICAgIGJv
b2wgZWRpdGFibGUgeyBmYWxzZSB9OwotICAgIGJvb2wgc2hvdWxkSGFuZGxlUnVuT3BlblBhbmVs
IHsgdHJ1ZSB9OwotICAgIGJvb2wgc2hvdWxkUHJlc2VudFBvcG92ZXJzIHsgdHJ1ZSB9OwotICAg
IGJvb2wgZW5hYmxlQXBwTmFwIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUJhY2tGb3J3YXJk
Q2FjaGUgeyBmYWxzZSB9OwotICAgIGJvb2wgYWxsb3dzTGlua1ByZXZpZXcgeyB0cnVlIH07Ci0g
ICAgYm9vbCBlbmFibGVDYXB0dXJlVmlkZW9JblVJUHJvY2VzcyB7IGZhbHNlIH07Ci0gICAgYm9v
bCBlbmFibGVDYXB0dXJlVmlkZW9JbkdQVVByb2Nlc3MgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5h
YmxlQ2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3MgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlQ2Fw
dHVyZUF1ZGlvSW5HUFVQcm9jZXNzIHsgZmFsc2UgfTsKLSAgICBib29sIGFsbG93VG9wTmF2aWdh
dGlvblRvRGF0YVVSTHMgeyB0cnVlIH07Ci0gICAgYm9vbCBlbmFibGVJbkFwcEJyb3dzZXJQcml2
YWN5IHsgZmFsc2UgfTsKLSAgICBib29sIGlzQXBwQm91bmRXZWJWaWV3IHsgZmFsc2UgfTsKLQot
ICAgIGRvdWJsZSBjb250ZW50SW5zZXRUb3AgeyAwIH07Ci0KLSAgICBmbG9hdCBkZXZpY2VTY2Fs
ZUZhY3RvciB7IDEgfTsKLSAgICBzdGQ6OnN0cmluZyBhcHBsaWNhdGlvbk1hbmlmZXN0OwotICAg
IHN0ZDo6c3RyaW5nIGpzY09wdGlvbnM7Ci0gICAgc3RkOjpzdHJpbmcgYWRkaXRpb25hbFN1cHBv
cnRlZEltYWdlVHlwZXM7Ci0gICAgc3RkOjpzdHJpbmcgc3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9u
VVJMOwotICAgIEhhc2hNYXA8U3RyaW5nLCBib29sPiBleHBlcmltZW50YWxGZWF0dXJlczsKLSAg
ICBIYXNoTWFwPFN0cmluZywgYm9vbD4gaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzOwotICAgIFN0cmlu
ZyBjb250ZW50TW9kZTsKLSAgICBTdHJpbmcgYXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyOwot
ICAgIAotICAgIENvbnRleHRPcHRpb25zIGNvbnRleHRPcHRpb25zOwotCi0gICAgVGVzdE9wdGlv
bnMoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCk7Ci0KLSAgICAvLyBBZGQgaGVyZSBvcHRp
b25zIHRoYXQgY2FuIG9ubHkgYmUgc2V0IHVwb24gUGxhdGZvcm1XZWJWaWV3Ci0gICAgLy8gaW5p
dGlhbGl6YXRpb24gYW5kIG1ha2Ugc3VyZSBpdCdzIHVwIHRvIGRhdGUgd2hlbiBhZGRpbmcgbmV3
Ci0gICAgLy8gb3B0aW9ucyB0byB0aGlzIHN0cnVjdC4gT3RoZXJ3aXNlLCB0ZXN0cyB1c2luZyB0
aG9zZSBvcHRpb25zCi0gICAgLy8gbWlnaHQgZmFpbCBpZiBXVFIgaXMgcmV1c2luZyBhbiBleGlz
dGluZyBQbGF0Zm9ybVdlYlZpZXcuCi0gICAgYm9vbCBoYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRp
b25zKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKSBjb25zdAorc3RydWN0IFRlc3RDb21tYW5k
OworCitzdHJ1Y3QgVGVzdEZlYXR1cmVzIHsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpz
dHJpbmcsIGJvb2w+IGV4cGVyaW1lbnRhbEZlYXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21h
cDxzdGQ6OnN0cmluZywgYm9vbD4gaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzOworICAgIHN0ZDo6dW5v
cmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4gYm9vbEZlYXR1cmVzOworICAgIHN0ZDo6dW5v
cmRlcmVkX21hcDxzdGQ6OnN0cmluZywgZG91YmxlPiBkb3VibGVGZWF0dXJlczsKKyAgICBzdGQ6
OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBzdHJpbmdGZWF0dXJlczsK
KyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dmVjdG9yPHN0ZDo6c3Ry
aW5nPj4gc3RyaW5nVmVjdG9yRmVhdHVyZXM7Cit9OworCit2b2lkIG1lcmdlKFRlc3RGZWF0dXJl
cyYgYmFzZSwgVGVzdEZlYXR1cmVzIGFkZGl0aW9uYWwpOworCitUZXN0RmVhdHVyZXMgaGFyZGNv
ZGVkRmVhdHVyZXNCYXNlZE9uUGF0aEZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKTsKK1Rlc3RG
ZWF0dXJlcyBmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdE9wdGlvbnNGaWxlc0ZvclRlc3QoY29uc3Qg
VGVzdENvbW1hbmQmKTsKK1Rlc3RGZWF0dXJlcyBmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRl
ckZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKTsKKworc3RydWN0IENvbnRleHRPcHRpb25zIHsK
KyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3ZlcnJpZGVMYW5ndWFnZXM7CisgICAgYm9v
bCBpZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzOworICAgIGJvb2wgZW5hYmxlUHJv
Y2Vzc1N3YXBPbk5hdmlnYXRpb247CisgICAgYm9vbCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93
T3BlbjsKKyAgICBib29sIHVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQ7CisKKyAgICBib29s
IGhhc1NhbWVJbml0aWFsaXphdGlvbk9wdGlvbnMoY29uc3QgQ29udGV4dE9wdGlvbnMmIG9wdGlv
bnMpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAodXNlVGhyZWFkZWRTY3JvbGxpbmcgIT0gb3B0
aW9ucy51c2VUaHJlYWRlZFNjcm9sbGluZwotICAgICAgICAgICAgfHwgdXNlQWNjZWxlcmF0ZWRE
cmF3aW5nICE9IG9wdGlvbnMudXNlQWNjZWxlcmF0ZWREcmF3aW5nCi0gICAgICAgICAgICB8fCB1
c2VNb2NrU2Nyb2xsYmFycyAhPSBvcHRpb25zLnVzZU1vY2tTY3JvbGxiYXJzCi0gICAgICAgICAg
ICB8fCBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyAhPSBvcHRpb25zLm5lZWRzU2l0ZVNwZWNpZmlj
UXVpcmtzCi0gICAgICAgICAgICB8fCB1c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0eSAh
PSBvcHRpb25zLnVzZUNoYXJhY3RlclNlbGVjdGlvbkdyYW51bGFyaXR5Ci0gICAgICAgICAgICB8
fCBlbmFibGVBdHRhY2htZW50RWxlbWVudCAhPSBvcHRpb25zLmVuYWJsZUF0dGFjaG1lbnRFbGVt
ZW50Ci0gICAgICAgICAgICB8fCBlbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciAhPSBvcHRpb25z
LmVuYWJsZUludGVyc2VjdGlvbk9ic2VydmVyCi0gICAgICAgICAgICB8fCB1c2VFcGhlbWVyYWxT
ZXNzaW9uICE9IG9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lvbgotICAgICAgICAgICAgfHwgZW5h
YmxlTWVudUl0ZW1FbGVtZW50ICE9IG9wdGlvbnMuZW5hYmxlTWVudUl0ZW1FbGVtZW50Ci0gICAg
ICAgICAgICB8fCBlbmFibGVLZXlnZW5FbGVtZW50ICE9IG9wdGlvbnMuZW5hYmxlS2V5Z2VuRWxl
bWVudAotICAgICAgICAgICAgfHwgZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyAhPSBvcHRpb25z
LmVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMKLSAgICAgICAgICAgIHx8IGVuYWJsZVBvaW50ZXJM
b2NrICE9IG9wdGlvbnMuZW5hYmxlUG9pbnRlckxvY2sKLSAgICAgICAgICAgIHx8IGVuYWJsZVdl
YkF1dGhlbnRpY2F0aW9uICE9IG9wdGlvbnMuZW5hYmxlV2ViQXV0aGVudGljYXRpb24KLSAgICAg
ICAgICAgIHx8IGVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yICE9IG9w
dGlvbnMuZW5hYmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IKLSAgICAgICAg
ICAgIHx8IGVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyAhPSBvcHRpb25zLmVuYWJsZUluc3BlY3Rv
ckFkZGl0aW9ucwotICAgICAgICAgICAgfHwgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyICE9IG9w
dGlvbnMuZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyCi0gICAgICAgICAgICB8fCBhcHBsaWNhdGlv
bk1hbmlmZXN0ICE9IG9wdGlvbnMuYXBwbGljYXRpb25NYW5pZmVzdAotICAgICAgICAgICAgfHwg
YWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMgIT0gb3B0aW9u
cy5hbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscwotICAgICAg
ICAgICAgfHwgZG9tUGFzdGVBbGxvd2VkICE9IG9wdGlvbnMuZG9tUGFzdGVBbGxvd2VkCi0gICAg
ICAgICAgICB8fCBlbmFibGVDb2xvckZpbHRlciAhPSBvcHRpb25zLmVuYWJsZUNvbG9yRmlsdGVy
Ci0gICAgICAgICAgICB8fCBwdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlICE9IG9w
dGlvbnMucHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZQotICAgICAgICAgICAgfHwg
anNjT3B0aW9ucyAhPSBvcHRpb25zLmpzY09wdGlvbnMKLSAgICAgICAgICAgIHx8IGFkZGl0aW9u
YWxTdXBwb3J0ZWRJbWFnZVR5cGVzICE9IG9wdGlvbnMuYWRkaXRpb25hbFN1cHBvcnRlZEltYWdl
VHlwZXMKLSAgICAgICAgICAgIHx8IHJ1blNpbmdseSAhPSBvcHRpb25zLnJ1blNpbmdseQotICAg
ICAgICAgICAgfHwgY2hlY2tGb3JXb3JsZExlYWtzICE9IG9wdGlvbnMuY2hlY2tGb3JXb3JsZExl
YWtzCi0gICAgICAgICAgICB8fCBzaG91bGRTaG93U3BlbGxDaGVja2luZ0RvdHMgIT0gb3B0aW9u
cy5zaG91bGRTaG93U3BlbGxDaGVja2luZ0RvdHMKLSAgICAgICAgICAgIHx8IGVuYWJsZVNlcnZp
Y2VDb250cm9scyAhPSBvcHRpb25zLmVuYWJsZVNlcnZpY2VDb250cm9scwotICAgICAgICAgICAg
fHwgc2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0ICE9IG9wdGlvbnMuc2hvdWxkSWdub3JlTWV0YVZp
ZXdwb3J0Ci0gICAgICAgICAgICB8fCBlZGl0YWJsZSAhPSBvcHRpb25zLmVkaXRhYmxlCi0gICAg
ICAgICAgICB8fCBzaG91bGRIYW5kbGVSdW5PcGVuUGFuZWwgIT0gb3B0aW9ucy5zaG91bGRIYW5k
bGVSdW5PcGVuUGFuZWwKLSAgICAgICAgICAgIHx8IHNob3VsZFByZXNlbnRQb3BvdmVycyAhPSBv
cHRpb25zLnNob3VsZFByZXNlbnRQb3BvdmVycwotICAgICAgICAgICAgfHwgY29udGVudEluc2V0
VG9wICE9IG9wdGlvbnMuY29udGVudEluc2V0VG9wCi0gICAgICAgICAgICB8fCBjb250ZW50TW9k
ZSAhPSBvcHRpb25zLmNvbnRlbnRNb2RlCi0gICAgICAgICAgICB8fCBhcHBsaWNhdGlvbkJ1bmRs
ZUlkZW50aWZpZXIgIT0gb3B0aW9ucy5hcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIKLSAgICAg
ICAgICAgIHx8IGVuYWJsZUFwcE5hcCAhPSBvcHRpb25zLmVuYWJsZUFwcE5hcAotICAgICAgICAg
ICAgfHwgZW5hYmxlQmFja0ZvcndhcmRDYWNoZSAhPSBvcHRpb25zLmVuYWJsZUJhY2tGb3J3YXJk
Q2FjaGUKLSAgICAgICAgICAgIHx8IGFsbG93c0xpbmtQcmV2aWV3ICE9IG9wdGlvbnMuYWxsb3dz
TGlua1ByZXZpZXcKLSAgICAgICAgICAgIHx8IGVuYWJsZUNhcHR1cmVWaWRlb0luVUlQcm9jZXNz
ICE9IG9wdGlvbnMuZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MKLSAgICAgICAgICAgIHx8
IGVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2VzcyAhPSBvcHRpb25zLmVuYWJsZUNhcHR1cmVW
aWRlb0luR1BVUHJvY2VzcwotICAgICAgICAgICAgfHwgZW5hYmxlQ2FwdHVyZUF1ZGlvSW5VSVBy
b2Nlc3MgIT0gb3B0aW9ucy5lbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcwotICAgICAgICAg
ICAgfHwgZW5hYmxlQ2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzICE9IG9wdGlvbnMuZW5hYmxlQ2Fw
dHVyZUF1ZGlvSW5HUFVQcm9jZXNzCi0gICAgICAgICAgICB8fCBhbGxvd1RvcE5hdmlnYXRpb25U
b0RhdGFVUkxzICE9IG9wdGlvbnMuYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcwotICAgICAg
ICAgICAgfHwgZW5hYmxlSW5BcHBCcm93c2VyUHJpdmFjeSAhPSBvcHRpb25zLmVuYWJsZUluQXBw
QnJvd3NlclByaXZhY3kKLSAgICAgICAgICAgIHx8IHN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVS
TCAhPSBvcHRpb25zLnN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTAotICAgICAgICAgICAgfHwg
aXNBcHBCb3VuZFdlYlZpZXcgIT0gb3B0aW9ucy5pc0FwcEJvdW5kV2ViVmlldykKKyAgICAgICAg
aWYgKGlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMgIT0gb3B0aW9ucy5pZ25vcmVT
eW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzCisgICAgICAgICAgICB8fCBvdmVycmlkZUxhbmd1
YWdlcyAhPSBvcHRpb25zLm92ZXJyaWRlTGFuZ3VhZ2VzCisgICAgICAgICAgICB8fCBlbmFibGVQ
cm9jZXNzU3dhcE9uTmF2aWdhdGlvbiAhPSBvcHRpb25zLmVuYWJsZVByb2Nlc3NTd2FwT25OYXZp
Z2F0aW9uCisgICAgICAgICAgICB8fCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiAhPSBv
cHRpb25zLmVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuCisgICAgICAgICAgICB8fCB1c2VT
ZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0ICE9IG9wdGlvbnMudXNlU2VydmljZVdvcmtlclNob3J0
VGltZW91dCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQogCi0gICAgICAgIGlmICghY29udGV4dE9wdGlvbnMuaGFzU2FtZUluaXRpYWxpemF0
aW9uT3B0aW9ucyhvcHRpb25zLmNvbnRleHRPcHRpb25zKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBib29sIHNob3VsZEVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbiB8
fCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbjsKKyAgICB9Cit9OwogCi0gICAgICAgIGlm
IChleHBlcmltZW50YWxGZWF0dXJlcyAhPSBvcHRpb25zLmV4cGVyaW1lbnRhbEZlYXR1cmVzKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworY2xhc3MgVGVzdE9wdGlvbnMgeworcHVibGljOgor
ICAgIGV4cGxpY2l0IFRlc3RPcHRpb25zKFRlc3RGZWF0dXJlcyk7CiAKLSAgICAgICAgaWYgKGlu
dGVybmFsRGVidWdGZWF0dXJlcyAhPSBvcHRpb25zLmludGVybmFsRGVidWdGZWF0dXJlcykKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBDb250ZXh0T3B0aW9ucyBjb250ZXh0T3B0aW9u
cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgb3ZlcnJpZGVM
YW5ndWFnZXMoKSwKKyAgICAgICAgICAgIGlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91
dHMoKSwKKyAgICAgICAgICAgIGVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uKCksCisgICAg
ICAgICAgICBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbigpLAorICAgICAgICAgICAgdXNl
U2VydmljZVdvcmtlclNob3J0VGltZW91dCgpCisgICAgICAgIH07CisgICAgfQorCisgICAgYm9v
bCB1c2VUaHJlYWRlZFNjcm9sbGluZygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUo
InVzZVRocmVhZGVkU2Nyb2xsaW5nIiwgZmFsc2UpOyB9CisgICAgYm9vbCB1c2VBY2NlbGVyYXRl
ZERyYXdpbmcoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJ1c2VBY2NlbGVyYXRl
ZERyYXdpbmciLCBmYWxzZSk7IH0KKyAgICBib29sIHVzZVJlbW90ZUxheWVyVHJlZSgpIGNvbnN0
IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInVzZVJlbW90ZUxheWVyVHJlZSIsIGZhbHNlKTsg
fQorICAgIGJvb2wgc2hvdWxkU2hvd1dlYlZpZXcoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVy
ZVZhbHVlKCJzaG91bGRTaG93V2ViVmlldyIsIGZhbHNlKTsgfQorICAgIGJvb2wgdXNlRmxleGli
bGVWaWV3cG9ydCgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInVzZUZsZXhpYmxl
Vmlld3BvcnQiLCBmYWxzZSk7IH0KKyAgICBib29sIGlzU1ZHVGVzdCgpIGNvbnN0IHsgcmV0dXJu
IGJvb2xGZWF0dXJlVmFsdWUoImlzU1ZHVGVzdCIsIGZhbHNlKTsgfQorICAgIGJvb2wgdXNlRGF0
YURldGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInVzZURhdGFEZXRl
Y3Rpb24iLCBmYWxzZSk7IH0KKyAgICBib29sIHVzZU1vY2tTY3JvbGxiYXJzKCkgY29uc3QgeyBy
ZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgidXNlTW9ja1Njcm9sbGJhcnMiLCB0cnVlKTsgfQorICAg
IGJvb2wgbmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVy
ZVZhbHVlKCJuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyIsIGZhbHNlKTsgfQorICAgIGJvb2wgaWdu
b3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVl
KCJpZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyIsIGZhbHNlKTsgfQorICAgIGJvb2wgdXNlQ2hh
cmFjdGVyU2VsZWN0aW9uR3JhbnVsYXJpdHkoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZh
bHVlKCJ1c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0eSIsIGZhbHNlKTsgfQorICAgIGJv
b2wgZW5hYmxlQXR0YWNobWVudEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZh
bHVlKCJlbmFibGVBdHRhY2htZW50RWxlbWVudCIsIGZhbHNlKTsgfQorICAgIGJvb2wgZW5hYmxl
SW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJl
bmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciIsIGZhbHNlKTsgfQorICAgIGJvb2wgdXNlRXBoZW1l
cmFsU2Vzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInVzZUVwaGVtZXJh
bFNlc3Npb24iLCBmYWxzZSk7IH0KKyAgICBib29sIGVuYWJsZU1lbnVJdGVtRWxlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZU1lbnVJdGVtRWxlbWVudCIsIGZh
bHNlKTsgfQorICAgIGJvb2wgZW5hYmxlS2V5Z2VuRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGJv
b2xGZWF0dXJlVmFsdWUoImVuYWJsZUtleWdlbkVsZW1lbnQiLCBmYWxzZSk7IH0KKyAgICBib29s
IGVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZh
bHVlKCJlbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzIiwgdHJ1ZSk7IH0KKyAgICBib29sIGVuYWJs
ZVBvaW50ZXJMb2NrKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlUG9p
bnRlckxvY2siLCBmYWxzZSk7IH0KKyAgICBib29sIGVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uKCkg
Y29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlV2ViQXV0aGVudGljYXRpb24i
LCB0cnVlKTsgfQorICAgIGJvb2wgZW5hYmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRp
Y2F0b3IoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVXZWJBdXRoZW50
aWNhdGlvbkxvY2FsQXV0aGVudGljYXRvciIsIHRydWUpOyB9CisgICAgYm9vbCBlbmFibGVJbnNw
ZWN0b3JBZGRpdGlvbnMoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVJ
bnNwZWN0b3JBZGRpdGlvbnMiLCBmYWxzZSk7IH0KKyAgICBib29sIHNob3VsZFNob3dUb3VjaGVz
KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgic2hvdWxkU2hvd1RvdWNoZXMiLCBm
YWxzZSk7IH0KKyAgICBib29sIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycigpIGNvbnN0IHsgcmV0
dXJuIGJvb2xGZWF0dXJlVmFsdWUoImR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIsIGZhbHNlKTsg
fQorICAgIGJvb2wgYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlh
bHMoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJhbGxvd0Nyb3NzT3JpZ2luU3Vi
cmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyIsIGZhbHNlKTsgfQorICAgIGJvb2wgZG9tUGFz
dGVBbGxvd2VkKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZG9tUGFzdGVBbGxv
d2VkIiwgdHJ1ZSk7IH0KKyAgICBib29sIGVuYWJsZUNvbG9yRmlsdGVyKCkgY29uc3QgeyByZXR1
cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlQ29sb3JGaWx0ZXIiLCBmYWxzZSk7IH0KKyAgICBi
b29sIHB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUoKSBjb25zdCB7IHJldHVybiBi
b29sRmVhdHVyZVZhbHVlKCJwdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlIiwgZmFs
c2UpOyB9CisgICAgYm9vbCBydW5TaW5nbHkoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZh
bHVlKCJydW5TaW5nbHkiLCBmYWxzZSk7IH0KKyAgICBib29sIGNoZWNrRm9yV29ybGRMZWFrcygp
IGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImNoZWNrRm9yV29ybGRMZWFrcyIsIGZh
bHNlKTsgfQorICAgIGJvb2wgc2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0KCkgY29uc3QgeyByZXR1
cm4gYm9vbEZlYXR1cmVWYWx1ZSgic2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0IiwgZmFsc2UpOyB9
CisgICAgYm9vbCBzaG91bGRTaG93U3BlbGxDaGVja2luZ0RvdHMoKSBjb25zdCB7IHJldHVybiBi
b29sRmVhdHVyZVZhbHVlKCJzcGVsbENoZWNraW5nRG90cyIsIGZhbHNlKTsgfQorICAgIGJvb2wg
ZW5hYmxlU2VydmljZUNvbnRyb2xzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgi
ZW5hYmxlU2VydmljZUNvbnRyb2xzIiwgZmFsc2UpOyB9CisgICAgYm9vbCBlZGl0YWJsZSgpIGNv
bnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVkaXRhYmxlIiwgZmFsc2UpOyB9CisgICAg
Ym9vbCBzaG91bGRIYW5kbGVSdW5PcGVuUGFuZWwoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVy
ZVZhbHVlKCJzaG91bGRIYW5kbGVSdW5PcGVuUGFuZWwiLCB0cnVlKTsgfQorICAgIGJvb2wgc2hv
dWxkUHJlc2VudFBvcG92ZXJzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgic2hv
dWxkUHJlc2VudFBvcG92ZXJzIiwgdHJ1ZSk7IH0KKyAgICBib29sIGVuYWJsZUFwcE5hcCgpIGNv
bnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZUFwcE5hcCIsIGZhbHNlKTsgfQor
ICAgIGJvb2wgZW5hYmxlQmFja0ZvcndhcmRDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0
dXJlVmFsdWUoImVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUiLCBmYWxzZSk7IH0KKyAgICBib29sIGFs
bG93c0xpbmtQcmV2aWV3KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiYWxsb3dz
TGlua1ByZXZpZXciLCB0cnVlKTsgfQorICAgIGJvb2wgZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVBy
b2Nlc3MoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVDYXB0dXJlVmlk
ZW9JblVJUHJvY2VzcyIsIGZhbHNlKTsgfQorICAgIGJvb2wgZW5hYmxlQ2FwdHVyZVZpZGVvSW5H
UFVQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlQ2FwdHVy
ZVZpZGVvSW5HUFVQcm9jZXNzIiwgZmFsc2UpOyB9CisgICAgYm9vbCBlbmFibGVDYXB0dXJlQXVk
aW9JblVJUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZUNh
cHR1cmVBdWRpb0luVUlQcm9jZXNzIiwgZmFsc2UpOyB9CisgICAgYm9vbCBlbmFibGVDYXB0dXJl
QXVkaW9JbkdQVVByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFi
bGVDYXB0dXJlQXVkaW9JbkdQVVByb2Nlc3MiLCBmYWxzZSk7IH0KKyAgICBib29sIGFsbG93VG9w
TmF2aWdhdGlvblRvRGF0YVVSTHMoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJh
bGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzIiwgdHJ1ZSk7IH0KKyAgICBib29sIGVuYWJsZUlu
QXBwQnJvd3NlclByaXZhY3koKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFi
bGVJbkFwcEJyb3dzZXJQcml2YWN5IiwgZmFsc2UpOyB9CisgICAgYm9vbCBpc0FwcEJvdW5kV2Vi
VmlldygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImlzQXBwQm91bmRXZWJWaWV3
IiwgZmFsc2UpOyB9CisgICAgYm9vbCBpZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRz
KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiaWdub3JlU3luY2hyb25vdXNNZXNz
YWdpbmdUaW1lb3V0cyIsIGZhbHNlKTsgfQorICAgIGJvb2wgZW5hYmxlUHJvY2Vzc1N3YXBPbk5h
dmlnYXRpb24oKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVQcm9jZXNz
U3dhcE9uTmF2aWdhdGlvbiIsIHRydWUpOyB9CisgICAgYm9vbCBlbmFibGVQcm9jZXNzU3dhcE9u
V2luZG93T3BlbigpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZVByb2Nl
c3NTd2FwT25XaW5kb3dPcGVuIiwgZmFsc2UpOyB9CisgICAgYm9vbCB1c2VTZXJ2aWNlV29ya2Vy
U2hvcnRUaW1lb3V0KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgidXNlU2Vydmlj
ZVdvcmtlclNob3J0VGltZW91dCIsIGZhbHNlKTsgfQorICAgIGRvdWJsZSBjb250ZW50SW5zZXRU
b3AoKSBjb25zdCB7IHJldHVybiBkb3VibGVGZWF0dXJlVmFsdWUoImNvbnRlbnRJbnNldC50b3Ai
LCAwKTsgfQorICAgIGRvdWJsZSBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIGRv
dWJsZUZlYXR1cmVWYWx1ZSgiZGV2aWNlU2NhbGVGYWN0b3IiLCAxKTsgfQorICAgIHN0ZDo6c3Ry
aW5nIGFwcGxpY2F0aW9uTWFuaWZlc3QoKSBjb25zdCB7IHJldHVybiBzdHJpbmdGZWF0dXJlVmFs
dWUoImFwcGxpY2F0aW9uTWFuaWZlc3QiLCB7IH0pOyB9CisgICAgc3RkOjpzdHJpbmcganNjT3B0
aW9ucygpIGNvbnN0IHsgcmV0dXJuIHN0cmluZ0ZlYXR1cmVWYWx1ZSgianNjT3B0aW9ucyIsIHsg
fSk7IH0KKyAgICBzdGQ6OnN0cmluZyBhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcygpIGNv
bnN0IHsgcmV0dXJuIHN0cmluZ0ZlYXR1cmVWYWx1ZSgiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdl
VHlwZXMiLCB7IH0pOyB9CisgICAgc3RkOjpzdHJpbmcgc3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9u
VVJMKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nRmVhdHVyZVZhbHVlKCJzdGFuZGFsb25lV2ViQXBw
bGljYXRpb25VUkwiLCB7IH0pOyB9CisgICAgc3RkOjpzdHJpbmcgY29udGVudE1vZGUoKSBjb25z
dCB7IHJldHVybiBzdHJpbmdGZWF0dXJlVmFsdWUoImNvbnRlbnRNb2RlIiwgeyB9KTsgfQorICAg
IHN0ZDo6c3RyaW5nIGFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJu
IHN0cmluZ0ZlYXR1cmVWYWx1ZSgiYXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyIiwgeyB9KTsg
fQorICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBvdmVycmlkZUxhbmd1YWdlcygpIGNvbnN0
IHsgcmV0dXJuIHN0cmluZ1ZlY3RvckZlYXR1cmVWYWx1ZSgibGFuZ3VhZ2UiLCB7IH0pOyB9CisK
KyAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+JiBleHBlcmlt
ZW50YWxGZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVh
dHVyZXM7IH0KKyAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+
JiBpbnRlcm5hbERlYnVnRmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLmludGVy
bmFsRGVidWdGZWF0dXJlczsgfQogCisgICAgYm9vbCBoYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRp
b25zKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KG1fZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2ZlYXR1cmVzLmV4
cGVyaW1lbnRhbEZlYXR1cmVzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBp
ZiAobV9mZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2ZlYXR1cmVz
LmludGVybmFsRGVidWdGZWF0dXJlcykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgaWYgKG1fZmVhdHVyZXMuYm9vbEZlYXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJlcy5ib29s
RmVhdHVyZXMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX2ZlYXR1
cmVzLmRvdWJsZUZlYXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJlcy5kb3VibGVGZWF0dXJlcykK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG1fZmVhdHVyZXMuc3RyaW5n
RmVhdHVyZXMgIT0gb3B0aW9ucy5tX2ZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVzKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobV9mZWF0dXJlcy5zdHJpbmdWZWN0b3JGZWF0
dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuc3RyaW5nVmVjdG9yRmVhdHVyZXMpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKworcHJpdmF0
ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQgZmVhdHVyZVZhbHVlKHN0ZDo6c3Ry
aW5nIGtleSwgVCBkZWZhdWx0VmFsdWUsIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0
cmluZywgVD4mIG1hcCkgY29uc3QKKyAgICB7CisgICAgICAgIGF1dG8gaXQgPSBtYXAuZmluZChr
ZXkpOworICAgICAgICBpZiAoaXQgIT0gbWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGl0
LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7CisgICAgfQorCisgICAgYm9v
bCBib29sRmVhdHVyZVZhbHVlKHN0ZDo6c3RyaW5nIGtleSwgYm9vbCBkZWZhdWx0VmFsdWUpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gZmVhdHVyZVZhbHVlKGtleSwgZGVmYXVsdFZhbHVl
LCBtX2ZlYXR1cmVzLmJvb2xGZWF0dXJlcyk7CisgICAgfQorICAgIGRvdWJsZSBkb3VibGVGZWF0
dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5LCBkb3VibGUgZGVmYXVsdFZhbHVlKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZlYXR1cmVWYWx1ZShrZXksIGRlZmF1bHRWYWx1ZSwgbV9mZWF0
dXJlcy5kb3VibGVGZWF0dXJlcyk7CisgICAgfQorICAgIHN0ZDo6c3RyaW5nIHN0cmluZ0ZlYXR1
cmVWYWx1ZShzdGQ6OnN0cmluZyBrZXksIHN0ZDo6c3RyaW5nIGRlZmF1bHRWYWx1ZSkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBmZWF0dXJlVmFsdWUoa2V5LCBkZWZhdWx0VmFsdWUsIG1f
ZmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMpOworICAgIH0KKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0
cmluZz4gc3RyaW5nVmVjdG9yRmVhdHVyZVZhbHVlKHN0ZDo6c3RyaW5nIGtleSwgc3RkOjp2ZWN0
b3I8c3RkOjpzdHJpbmc+IGRlZmF1bHRWYWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBmZWF0dXJlVmFsdWUoa2V5LCBkZWZhdWx0VmFsdWUsIG1fZmVhdHVyZXMuc3RyaW5nVmVjdG9y
RmVhdHVyZXMpOworICAgIH0KKworICAgIFRlc3RGZWF0dXJlcyBtX2ZlYXR1cmVzOwogfTsKIAog
fQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9X
ZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2Nzg4
NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNiArMTIwLDggQEAKIAkJNjUx
MEE3OEIxMUVDNjQzODAwNDEwODY3IC8qIFdlYktpdFdlaWdodFdhdGNoZXI4MDAudHRmIGluIFJl
c291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTEwQTc4MDExRUM2
NDM4MDA0MTA4NjcgLyogV2ViS2l0V2VpZ2h0V2F0Y2hlcjgwMC50dGYgKi87IH07CiAJCTY1MTBB
NzhDMTFFQzY0MzgwMDQxMDg2NyAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyOTAwLnR0ZiBpbiBSZXNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUxMEE3ODExMUVDNjQz
ODAwNDEwODY3IC8qIFdlYktpdFdlaWdodFdhdGNoZXI5MDAudHRmICovOyB9OwogCQk2NUVCODVB
MDExRUM2N0NDMDAzNEQzMDAgLyogQWN0aXZhdGVGb250c0NvY29hLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVFQjg1OUYxMUVDNjdDQzAwMzREMzAw
IC8qIEFjdGl2YXRlRm9udHNDb2NvYS5tbSAqLzsgfTsKKwkJN0M3ODI1NTEyNTJBNDdFNzAwMTkx
Qjg3IC8qIFN0ZEZpbGVzeXN0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdDNzgyNTRGMjUyQTQ3RTcwMDE5MUI4NyAvKiBTdGRGaWxlc3lzdGVtLmgg
Ki87IH07CisJCTdDNzgyNTUyMjUyQTQ3RTcwMDE5MUI4NyAvKiBTdGRGaWxlc3lzdGVtLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNzgyNTUwMjUy
QTQ3RTcwMDE5MUI4NyAvKiBTdGRGaWxlc3lzdGVtLmNwcCAqLzsgfTsKIAkJODAzNEM2NjIxNDg3
NjM2NDAwQUMzMkU5IC8qIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODAzNEM2NjExNDg3NjM2NDAwQUMz
MkU5IC8qIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tICovOyB9OwogCQk4MDk3MzM4QTE0
ODc0QTVBMDA4MTU2RDkgLyogQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MDk3MzM4OTE0ODc0
QTVBMDA4MTU2RDkgLyogQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0gKi87IH07
CiAJCTkzNzY0MTdBMjEwRDczNzIwMEEzREFBRSAvKiBXZWJLaXRUZXN0UnVubmVyV2luZG93Lm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM3NjQxNzYy
MTBENzM2MDAwQTNEQUFFIC8qIFdlYktpdFRlc3RSdW5uZXJXaW5kb3cubW0gKi87IH07CkBAIC0z
NDksMTMgKzM1MSwxNCBAQAogCQk2NTEwQTc4MTExRUM2NDM4MDA0MTA4NjcgLyogV2ViS2l0V2Vp
Z2h0V2F0Y2hlcjkwMC50dGYgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBmaWxlOyBuYW1lID0gV2ViS2l0V2VpZ2h0V2F0Y2hlcjkwMC50dGY7IHBhdGgg
PSBmb250cy9XZWJLaXRXZWlnaHRXYXRjaGVyOTAwLnR0Zjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNjVFQjg1OUQxMUVDNjdDQzAwMzREMzAwIC8qIEFjdGl2YXRlRm9udHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWN0aXZhdGVGb250cy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk2NUVCODU5RjExRUM2N0NDMDAzNEQzMDAgLyogQWN0aXZhdGVG
b250c0NvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQWN0
aXZhdGVGb250c0NvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Qzc4MjU0
RjI1MkE0N0U3MDAxOTFCODcgLyogU3RkRmlsZXN5c3RlbS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGRG
aWxlc3lzdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDNzgyNTUwMjUyQTQ3
RTcwMDE5MUI4NyAvKiBTdGRGaWxlc3lzdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0ZEZp
bGVzeXN0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MDM0QzY2MTE0ODc2
MzY0MDBBQzMyRTkgLyogQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODA5NzMzODgxNDg3NEE1QTAwODE1NkQ5
IC8qIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmg7IHBhdGgg
PSBtYWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODA5NzMzODkxNDg3NEE1QTAwODE1NkQ5IC8qIEFjY2Vzc2liaWxpdHlO
b3RpZmljYXRpb25IYW5kbGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBu
YW1lID0gQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW07IHBhdGggPSBtYWMvQWNj
ZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTg0MUNDMDBEMTgxMTg1QkYwMDQyRTlCNiAvKiBPcHRpb25zLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9wdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4NDFDQzAwRTE4MTE4NUJGMDA0MkU5QjYgLyogT3B0aW9ucy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCThERDc2RkExMDQ4NkFBNzYwMEQ5NkI1RSAvKiBXZWJLaXRUZXN0UnVubmVy
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGls
ZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBXZWJLaXRU
ZXN0UnVubmVyOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQk5MzM4RDFC
QTI1MEE3OUVCMDBFODI3RjYgLyogSlNCYXNpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNCYXNpY3Mu
aDsgcGF0aCA9IC4uL1Rlc3RSdW5uZXJTaGFyZWQvQmluZGluZ3MvSlNCYXNpY3MuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMzOEQxQkUyNTBCRDlERDAwRTgyN0Y2IC8qIERpY3Rp
b25hcnlGdW5jdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGljdGlvbmFyeUZ1bmN0aW9ucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5Mzc2NDE3NjIxMEQ3MzYwMDBBM0RBQUUgLyog
V2ViS2l0VGVzdFJ1bm5lcldpbmRvdy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFdlYktpdFRlc3RSdW5uZXJXaW5kb3cubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzNzY0MTc3MjEwRDczNjEwMEEzREFBRSAvKiBXZWJLaXRUZXN0UnVubmVyV2lu
ZG93LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdFRlc3RSdW5uZXJX
aW5kb3cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg5Nyw2ICs5MDAsOCBAQAog
CQkJCTkzMzhEMUJFMjUwQkQ5REQwMEU4MjdGNiAvKiBEaWN0aW9uYXJ5RnVuY3Rpb25zLmggKi8s
CiAJCQkJQkM5OUE0ODQxMjA4OTAxQTAwN0U5RjA4IC8qIFN0cmluZ0Z1bmN0aW9ucy5oICovLAog
CQkJCTlCMzZBMjcwMjA5NDUzQTAwMDNFMDY1MSAvKiBXaGF0VG9EdW1wLmggKi8sCisJCQkJN0M3
ODI1NEYyNTJBNDdFNzAwMTkxQjg3IC8qIFN0ZEZpbGVzeXN0ZW0uaCAqLywKKwkJCQk3Qzc4MjU1
MDI1MkE0N0U3MDAxOTFCODcgLyogU3RkRmlsZXN5c3RlbS5jcHAgKi8sCiAJCQkpOwogCQkJbmFt
ZSA9IFNoYXJlZDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC05MzcsNiArOTQyLDcg
QEAKIAkJCQkyREI2MTg3RTFEN0Q1OEQ0MDA5NzhEMTkgLyogQ29yZUdyYXBoaWNzVGVzdFNQSS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMkRENEM0OUExRDZFN0QzQjAwMDczNzlDIC8qIEV2ZW50U2Vy
aWFsaXplck1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3M0I1NTIxQkE3ODk2ODAwNEIzRUY0
IC8qIEpTVUlTY3JpcHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3Qzc4MjU1MTI1
MkE0N0U3MDAxOTFCODcgLyogU3RkRmlsZXN5c3RlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRG
QTk4NDgxRDdGNzBDRjAwQUZGMkM5IC8qIFNoYXJlZEV2ZW50U3RyZWFtc01hYy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMkQwNThFMDkyMkUyRUUyMjAwRTRDMTQ1IC8qIFVJU2NyaXB0Q29udHJvbGxl
ckNvY29hLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDA1OEUwQjIyRTJFRjZEMDBFNEMxNDUgLyog
VUlTY3JpcHRDb250cm9sbGVyTWFjLmggaW4gSGVhZGVycyAqLywKQEAgLTEyMjAsNiArMTIyNiw3
IEBACiAJCQkJRjQ2MjQwQjEyMTcwMTNFNTAwOTE3QjE2IC8qIFVJU2NyaXB0Q29udHJvbGxlckNv
Y29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMjc3Q0NFREQyNTBGMzAwQTAwNTBDNTcyIC8qIFVJ
U2NyaXB0Q29udHJvbGxlckNvbW1vbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjczQjU1QzFC
QTg5MDQyMDA0QjNFRjQgLyogVUlTY3JpcHRDb250cm9sbGVySU9TLm1tIGluIFNvdXJjZXMgKi8s
CisJCQkJN0M3ODI1NTIyNTJBNDdFNzAwMTkxQjg3IC8qIFN0ZEZpbGVzeXN0ZW0uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYxOEU2RTYxRDZCOUJBMjAwMjdFNTQ3IC8qIFVJU2NyaXB0Q29udHJv
bGxlclNoYXJlZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTg1MTA0MzFCOUFFMTQ1MDA3NDRB
RUIgLyogV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE4
NTEwNDQxQjlBRTE0QTAwNzQ0QUVCIC8qIFdvcmtRdWV1ZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29j
b2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29u
dHJvbGxlckNvY29hLm1tCShyZXZpc2lvbiAyNjc4ODUpCisrKyBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTExNCwy
NyArMTE0LDI4IEBAIFdLUHJlZmVyZW5jZXNSZWYgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3IKICAg
ICByZXR1cm4gKF9fYnJpZGdlIFdLUHJlZmVyZW5jZXNSZWYpZ2xvYmFsV2ViVmlld0NvbmZpZ3Vy
YXRpb24ucHJlZmVyZW5jZXM7CiB9CiAKLXZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRk
VGVzdE9wdGlvbnMoVGVzdE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0CitUZXN0RmVhdHVyZXMgVGVz
dENvbnRyb2xsZXI6OnBsYXRmb3JtU3BlY2lmaWNGZWF0dXJlT3ZlcnJpZGVzRGVmYXVsdHNGb3JU
ZXN0KGNvbnN0IFRlc3RDb21tYW5kJikgY29uc3QKIHsKKyAgICBUZXN0RmVhdHVyZXMgZmVhdHVy
ZXM7CisKICAgICBpZiAoW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9v
bEZvcktleTpAIkVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uIl0pCi0gICAgICAgIG9wdGlv
bnMuY29udGV4dE9wdGlvbnMuZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24gPSB0cnVlOwor
ICAgICAgICBmZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgImVuYWJsZVByb2Nlc3NTd2Fw
T25OYXZpZ2F0aW9uIiwgdHJ1ZSB9KTsKICAgICBpZiAoW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFy
ZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpAIkVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVu
Il0pCi0gICAgICAgIG9wdGlvbnMuY29udGV4dE9wdGlvbnMuZW5hYmxlUHJvY2Vzc1N3YXBPbldp
bmRvd09wZW4gPSB0cnVlOworICAgICAgICBmZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsg
ImVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuIiwgdHJ1ZSB9KTsKIAotI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCi0gICAgaWYgKG9wdGlvbnMuZW5hYmxlSW5BcHBCcm93c2VyUHJpdmFjeSkK
LSAgICAgICAgW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gc2V0Qm9vbDpZ
RVMgZm9yS2V5OkAiV2ViS2l0RGVidWdJc0luQXBwQnJvd3NlclByaXZhY3lFbmFibGVkIl07Ci0j
ZW5kaWYKKyAgICByZXR1cm4gZmVhdHVyZXM7CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBs
YXRmb3JtSW5pdGlhbGl6ZURhdGFTdG9yZShXS1BhZ2VDb25maWd1cmF0aW9uUmVmLCBjb25zdCBU
ZXN0T3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAob3B0aW9ucy51c2VFcGhlbWVyYWxTZXNz
aW9uIHx8IG9wdGlvbnMuc3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMLmxlbmd0aCgpKSB7Ci0g
ICAgICAgIGF1dG8gd2Vic2l0ZURhdGFTdG9yZUNvbmZpZyA9IG9wdGlvbnMudXNlRXBoZW1lcmFs
U2Vzc2lvbiA/IFtbW19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0
Tm9uUGVyc2lzdGVudENvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXSA6IFtbW19XS1dlYnNpdGVE
YXRhU3RvcmVDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07Ci0gICAgICAg
IGlmICghb3B0aW9ucy51c2VFcGhlbWVyYWxTZXNzaW9uKQorICAgIGJvb2wgdXNlRXBoZW1lcmFs
U2Vzc2lvbiA9IG9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lvbigpOworICAgIGF1dG8gc3RhbmRh
bG9uZVdlYkFwcGxpY2F0aW9uVVJMID0gb3B0aW9ucy5zdGFuZGFsb25lV2ViQXBwbGljYXRpb25V
UkwoKTsKKyAgICBpZiAodXNlRXBoZW1lcmFsU2Vzc2lvbiB8fCBzdGFuZGFsb25lV2ViQXBwbGlj
YXRpb25VUkwubGVuZ3RoKCkpIHsKKyAgICAgICAgYXV0byB3ZWJzaXRlRGF0YVN0b3JlQ29uZmln
ID0gdXNlRXBoZW1lcmFsU2Vzc2lvbiA/IFtbW19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0
aW9uIGFsbG9jXSBpbml0Tm9uUGVyc2lzdGVudENvbmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXSA6
IFtbW19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRvcmVs
ZWFzZV07CisgICAgICAgIGlmICghdXNlRXBoZW1lcmFsU2Vzc2lvbikKICAgICAgICAgICAgIGNv
bmZpZ3VyZVdlYnNpdGVEYXRhU3RvcmVUZW1wb3JhcnlEaXJlY3RvcmllcygoV0tXZWJzaXRlRGF0
YVN0b3JlQ29uZmlndXJhdGlvblJlZil3ZWJzaXRlRGF0YVN0b3JlQ29uZmlnKTsKLSAgICAgICAg
aWYgKG9wdGlvbnMuc3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMLmxlbmd0aCgpKQotICAgICAg
ICAgICAgW3dlYnNpdGVEYXRhU3RvcmVDb25maWcgc2V0U3RhbmRhbG9uZUFwcGxpY2F0aW9uVVJM
OltOU1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpvcHRp
b25zLnN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTC5jX3N0cigpXV1dOworICAgICAgICBpZiAo
c3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMLmxlbmd0aCgpKQorICAgICAgICAgICAgW3dlYnNp
dGVEYXRhU3RvcmVDb25maWcgc2V0U3RhbmRhbG9uZUFwcGxpY2F0aW9uVVJMOltOU1VSTCBVUkxX
aXRoU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpzdGFuZGFsb25lV2ViQXBw
bGljYXRpb25VUkwuY19zdHIoKV1dXTsKICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gKF9f
YnJpZGdlIFdLV2Vic2l0ZURhdGFTdG9yZVJlZilbW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2Nd
IF9pbml0V2l0aENvbmZpZ3VyYXRpb246d2Vic2l0ZURhdGFTdG9yZUNvbmZpZ10gYXV0b3JlbGVh
c2VdOwogICAgIH0gZWxzZQogICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUgPSAoX19icmlkZ2Ug
V0tXZWJzaXRlRGF0YVN0b3JlUmVmKWdsb2JhbFdlYlZpZXdDb25maWd1cmF0aW9uLndlYnNpdGVE
YXRhU3RvcmU7CkBAIC0xNDUsMzIgKzE0NiwzMyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0
Zm9ybUNyZWF0ZVdlYlZpCiAgICAgYXV0byBjb3BpZWRDb25maWd1cmF0aW9uID0gYWRvcHROUyhb
Z2xvYmFsV2ViVmlld0NvbmZpZ3VyYXRpb24gY29weV0pOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICBpZiAob3B0aW9ucy51c2VEYXRhRGV0ZWN0aW9uKQorICAgIGlmIChvcHRpb25z
LnVzZURhdGFEZXRlY3Rpb24oKSkKICAgICAgICAgW2NvcGllZENvbmZpZ3VyYXRpb24gc2V0RGF0
YURldGVjdG9yVHlwZXM6V0tEYXRhRGV0ZWN0b3JUeXBlQWxsXTsKLSAgICBpZiAob3B0aW9ucy5p
Z25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cykKKyAgICBpZiAob3B0aW9ucy5pZ25vcmVzVmlld3Bv
cnRTY2FsZUxpbWl0cygpKQogICAgICAgICBbY29waWVkQ29uZmlndXJhdGlvbiBzZXRJZ25vcmVz
Vmlld3BvcnRTY2FsZUxpbWl0czpZRVNdOwotICAgIGlmIChvcHRpb25zLnVzZUNoYXJhY3RlclNl
bGVjdGlvbkdyYW51bGFyaXR5KQorICAgIGlmIChvcHRpb25zLnVzZUNoYXJhY3RlclNlbGVjdGlv
bkdyYW51bGFyaXR5KCkpCiAgICAgICAgIFtjb3BpZWRDb25maWd1cmF0aW9uIHNldFNlbGVjdGlv
bkdyYW51bGFyaXR5OldLU2VsZWN0aW9uR3JhbnVsYXJpdHlDaGFyYWN0ZXJdOwotICAgIGlmIChv
cHRpb25zLmlzQXBwQm91bmRXZWJWaWV3KQorICAgIGlmIChvcHRpb25zLmlzQXBwQm91bmRXZWJW
aWV3KCkpCiAgICAgICAgIFtjb3BpZWRDb25maWd1cmF0aW9uIHNldExpbWl0c05hdmlnYXRpb25z
VG9BcHBCb3VuZERvbWFpbnM6WUVTXTsKICNlbHNlCi0gICAgW2NvcGllZENvbmZpZ3VyYXRpb24g
X3NldFNlcnZpY2VDb250cm9sc0VuYWJsZWQ6b3B0aW9ucy5lbmFibGVTZXJ2aWNlQ29udHJvbHNd
OworICAgIFtjb3BpZWRDb25maWd1cmF0aW9uIF9zZXRTZXJ2aWNlQ29udHJvbHNFbmFibGVkOm9w
dGlvbnMuZW5hYmxlU2VydmljZUNvbnRyb2xzKCldOwogI2VuZGlmCiAKLSAgICBpZiAob3B0aW9u
cy5lbmFibGVBdHRhY2htZW50RWxlbWVudCkKKyAgICBpZiAob3B0aW9ucy5lbmFibGVBdHRhY2ht
ZW50RWxlbWVudCgpKQogICAgICAgICBbY29waWVkQ29uZmlndXJhdGlvbiBfc2V0QXR0YWNobWVu
dEVsZW1lbnRFbmFibGVkOllFU107CiAKLSAgICBpZiAob3B0aW9ucy5lbmFibGVDb2xvckZpbHRl
cikKKyAgICBpZiAob3B0aW9ucy5lbmFibGVDb2xvckZpbHRlcigpKQogICAgICAgICBbY29waWVk
Q29uZmlndXJhdGlvbiBfc2V0Q29sb3JGaWx0ZXJFbmFibGVkOllFU107CiAKICAgICBbY29waWVk
Q29uZmlndXJhdGlvbiBzZXRXZWJzaXRlRGF0YVN0b3JlOihXS1dlYnNpdGVEYXRhU3RvcmUgKil3
ZWJzaXRlRGF0YVN0b3JlKCldOwogCi0gICAgW2NvcGllZENvbmZpZ3VyYXRpb24gX3NldEFsbG93
VG9wTmF2aWdhdGlvblRvRGF0YVVSTHM6b3B0aW9ucy5hbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFV
UkxzXTsKKyAgICBbY29waWVkQ29uZmlndXJhdGlvbiBfc2V0QWxsb3dUb3BOYXZpZ2F0aW9uVG9E
YXRhVVJMczpvcHRpb25zLmFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMoKV07CiAKICAgICBj
b25maWd1cmVDb250ZW50TW9kZShjb3BpZWRDb25maWd1cmF0aW9uLmdldCgpLCBvcHRpb25zKTsK
IAotICAgIGlmIChvcHRpb25zLmFwcGxpY2F0aW9uTWFuaWZlc3QubGVuZ3RoKCkpIHsKLSAgICAg
ICAgYXV0byBtYW5pZmVzdFBhdGggPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6b3B0
aW9ucy5hcHBsaWNhdGlvbk1hbmlmZXN0LmNfc3RyKCldOworICAgIGF1dG8gYXBwbGljYXRpb25N
YW5pZmVzdCA9IG9wdGlvbnMuYXBwbGljYXRpb25NYW5pZmVzdCgpOworICAgIGlmIChhcHBsaWNh
dGlvbk1hbmlmZXN0Lmxlbmd0aCgpKSB7CisgICAgICAgIGF1dG8gbWFuaWZlc3RQYXRoID0gW05T
U3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmFwcGxpY2F0aW9uTWFuaWZlc3QuY19zdHIoKV07
CiAgICAgICAgIE5TU3RyaW5nICp0ZXh0ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09m
RmlsZTptYW5pZmVzdFBhdGggdXNlZEVuY29kaW5nOm51bGxwdHIgZXJyb3I6bnVsbHB0cl07CiAg
ICAgICAgIFtjb3BpZWRDb25maWd1cmF0aW9uIF9zZXRBcHBsaWNhdGlvbk1hbmlmZXN0OltfV0tB
cHBsaWNhdGlvbk1hbmlmZXN0IGFwcGxpY2F0aW9uTWFuaWZlc3RGcm9tSlNPTjp0ZXh0IG1hbmlm
ZXN0VVJMOm5pbCBkb2N1bWVudFVSTDpuaWxdXTsKICAgICB9CkBAIC0xNzgsMTMgKzE4MCwxMyBA
QCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUNyZWF0ZVdlYlZpCiAgICAgbV9tYWluV2Vi
VmlldyA9IG1ha2VVbmlxdWU8UGxhdGZvcm1XZWJWaWV3Pihjb3BpZWRDb25maWd1cmF0aW9uLmdl
dCgpLCBvcHRpb25zKTsKICAgICBmaW5pc2hDcmVhdGluZ1BsYXRmb3JtV2ViVmlldyhtX21haW5X
ZWJWaWV3LmdldCgpLCBvcHRpb25zKTsKIAotICAgIGlmIChvcHRpb25zLnB1bmNoT3V0V2hpdGVC
YWNrZ3JvdW5kc0luRGFya01vZGUpCisgICAgaWYgKG9wdGlvbnMucHVuY2hPdXRXaGl0ZUJhY2tn
cm91bmRzSW5EYXJrTW9kZSgpKQogICAgICAgICBtX21haW5XZWJWaWV3LT5zZXREcmF3c0JhY2tn
cm91bmQoZmFsc2UpOwogCi0gICAgaWYgKG9wdGlvbnMuZWRpdGFibGUpCisgICAgaWYgKG9wdGlv
bnMuZWRpdGFibGUoKSkKICAgICAgICAgbV9tYWluV2ViVmlldy0+c2V0RWRpdGFibGUodHJ1ZSk7
CiAKLSAgICBtX21haW5XZWJWaWV3LT5wbGF0Zm9ybVZpZXcoKS5hbGxvd3NMaW5rUHJldmlldyA9
IG9wdGlvbnMuYWxsb3dzTGlua1ByZXZpZXc7CisgICAgbV9tYWluV2ViVmlldy0+cGxhdGZvcm1W
aWV3KCkuYWxsb3dzTGlua1ByZXZpZXcgPSBvcHRpb25zLmFsbG93c0xpbmtQcmV2aWV3KCk7CiAg
ICAgW21fbWFpbldlYlZpZXctPnBsYXRmb3JtVmlldygpIF9zZXRTaGFyZVNoZWV0Q29tcGxldGVz
SW1tZWRpYXRlbHlXaXRoUmVzb2x1dGlvbkZvclRlc3Rpbmc6WUVTXTsKIH0KIApAQCAtMjAzLDcg
KzIwNSw3IEBAIFBsYXRmb3JtV2ViVmlldyogVGVzdENvbnRyb2xsZXI6OnBsYXRmb3IKIHZvaWQg
VGVzdENvbnRyb2xsZXI6OmZpbmlzaENyZWF0aW5nUGxhdGZvcm1XZWJWaWV3KFBsYXRmb3JtV2Vi
VmlldyogdmlldywgY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpCiB7CiAjaWYgUExBVEZPUk0o
TUFDKQotICAgIGlmIChvcHRpb25zLnNob3VsZFNob3dXZWJWaWV3KQorICAgIGlmIChvcHRpb25z
LnNob3VsZFNob3dXZWJWaWV3KCkpCiAgICAgICAgIFt2aWV3LT5wbGF0Zm9ybVdpbmRvdygpIG9y
ZGVyRnJvbnQ6bmlsXTsKICAgICBlbHNlCiAgICAgICAgIFt2aWV3LT5wbGF0Zm9ybVdpbmRvdygp
IG9yZGVyQmFjazpuaWxdOwpAQCAtMjYzLDEyICsyNjUsMTIgQEAgdm9pZCBUZXN0Q29udHJvbGxl
cjo6cmVzZXRDb250ZW50RXh0ZW5zaQogICAgIH0KIH0KIAotdm9pZCBUZXN0Q29udHJvbGxlcjo6
c2V0QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRp
ZmllcikKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmll
cihjb25zdCBzdGQ6OnN0cmluZyYgYnVuZGxlSWRlbnRpZmllcikKIHsKLSAgICBpZiAoYnVuZGxl
SWRlbnRpZmllci5pc0VtcHR5KCkpCisgICAgaWYgKGJ1bmRsZUlkZW50aWZpZXIuZW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFtUZXN0UnVubmVyV0tXZWJWaWV3IF9zZXRBcHBs
aWNhdGlvbkJ1bmRsZUlkZW50aWZpZXI6KE5TU3RyaW5nICopYnVuZGxlSWRlbnRpZmllci5jcmVh
dGVDRlN0cmluZygpLmdldCgpXTsKKyAgICBbVGVzdFJ1bm5lcldLV2ViVmlldyBfc2V0QXBwbGlj
YXRpb25CdW5kbGVJZGVudGlmaWVyOihOU1N0cmluZyAqKXRvV1RGU3RyaW5nKGJ1bmRsZUlkZW50
aWZpZXIpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCldOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVy
OjpjbGVhckFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllclRlc3RpbmdPdmVycmlkZSgpCkBAIC0y
ODYsNyArMjg4LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6Y29jb2FSZXNldFN0YXRlVG9Dbwog
ICAgICAgICBUZXN0UnVubmVyV0tXZWJWaWV3ICpwbGF0Zm9ybVZpZXcgPSB3ZWJWaWV3LT5wbGF0
Zm9ybVZpZXcoKTsKICAgICAgICAgcGxhdGZvcm1WaWV3Ll92aWV3U2NhbGUgPSAxOwogICAgICAg
ICBwbGF0Zm9ybVZpZXcuX21pbmltdW1FZmZlY3RpdmVEZXZpY2VXaWR0aCA9IDA7Ci0gICAgICAg
IFtwbGF0Zm9ybVZpZXcgX3NldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZEZvclRlc3Rp
bmc6b3B0aW9ucy5zaG91bGRTaG93U3BlbGxDaGVja2luZ0RvdHNdOworICAgICAgICBbcGxhdGZv
cm1WaWV3IF9zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3JUZXN0aW5nOm9wdGlv
bnMuc2hvdWxkU2hvd1NwZWxsQ2hlY2tpbmdEb3RzKCldOwogICAgICAgICBbcGxhdGZvcm1WaWV3
IHJlc2V0SW50ZXJhY3Rpb25DYWxsYmFja3NdOwogICAgICAgICBbcGxhdGZvcm1WaWV3IF9yZXNl
dE5hdmlnYXRpb25HZXN0dXJlU3RhdGVGb3JUZXN0aW5nXTsKICAgICB9CkBAIC0yOTcsNiArMjk5
LDExIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvY29hUmVzZXRTdGF0ZVRvQ28KIHZvaWQgVGVz
dENvbnRyb2xsZXI6OnBsYXRmb3JtV2lsbFJ1blRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mIHRl
c3RJbnZvY2F0aW9uKQogewogICAgIHNldENyYXNoUmVwb3J0QXBwbGljYXRpb25TcGVjaWZpY0lu
Zm9ybWF0aW9uVG9VUkwodGVzdEludm9jYXRpb24udXJsKCkpOworCisjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKKyAgICBpZiAodGVzdEludm9jYXRpb24ub3B0aW9ucygpLmVuYWJsZUluQXBwQnJv
d3NlclByaXZhY3koKSkKKyAgICAgICAgW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZh
dWx0c10gc2V0Qm9vbDpZRVMgZm9yS2V5OkAiV2ViS2l0RGVidWdJc0luQXBwQnJvd3NlclByaXZh
Y3lFbmFibGVkIl07CisjZW5kaWYKIH0KIAogc3RhdGljIE5TU3RyaW5nICogY29uc3QgV2ViQXJj
aGl2ZVBib2FyZFR5cGUgPSBAIkFwcGxlIFdlYiBBcmNoaXZlIHBhc3RlYm9hcmQgdHlwZSI7CkBA
IC00ODcsMTIgKzQ5NCwxMSBAQCBib29sIFRlc3RDb250cm9sbGVyOjppc0RvaW5nTWVkaWFDYXB0
dXJlCiAKIHN0YXRpYyBXS0NvbnRlbnRNb2RlIGNvbnRlbnRNb2RlKGNvbnN0IFRlc3RPcHRpb25z
JiBvcHRpb25zKQogewotICAgIGlmIChvcHRpb25zLmNvbnRlbnRNb2RlID09ICJkZXNrdG9wIl9z
KQorICAgIGF1dG8gbW9kZSA9IG9wdGlvbnMuY29udGVudE1vZGUoKTsKKyAgICBpZiAobW9kZSA9
PSAiZGVza3RvcCIpCiAgICAgICAgIHJldHVybiBXS0NvbnRlbnRNb2RlRGVza3RvcDsKLQotICAg
IGlmIChvcHRpb25zLmNvbnRlbnRNb2RlID09ICJtb2JpbGUiX3MpCisgICAgaWYgKG1vZGUgPT0g
Im1vYmlsZSIpCiAgICAgICAgIHJldHVybiBXS0NvbnRlbnRNb2RlTW9iaWxlOwotCiAgICAgcmV0
dXJuIFdLQ29udGVudE1vZGVSZWNvbW1lbmRlZDsKIH0KIApJbmRleDogVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9ndGsvVGVzdENvbnRyb2xsZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RDb250cm9sbGVyR3RrLmNwcAkocmV2aXNpb24gMjY3ODg1
KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvVGVzdENvbnRyb2xsZXJHdGsuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTAsOSArMTUwLDExIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBs
YXRmb3JtUmVzZXRQcmVmZXIKICAgICBtX21haW5XZWJWaWV3LT5kaXNtaXNzQWxsUG9wdXBNZW51
cygpOwogfQogCi12b2lkIFRlc3RDb250cm9sbGVyOjp1cGRhdGVQbGF0Zm9ybVNwZWNpZmljVGVz
dE9wdGlvbnNGb3JUZXN0KFRlc3RPcHRpb25zJiBvcHRpb25zLCBjb25zdCBzdGQ6OnN0cmluZyYp
IGNvbnN0CitUZXN0RmVhdHVyZXMgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtU3BlY2lmaWNGZWF0
dXJlRGVmYXVsdHNGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJikgY29uc3QKIHsKLSAgICBvcHRp
b25zLmVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMgPSBmYWxzZTsKKyAgICBUZXN0RmVhdHVyZXMg
ZmVhdHVyZXM7CisgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJlbmFibGVNb2Rl
cm5NZWRpYUNvbnRyb2xzIiwgZmFsc2UgfSk7CisgICAgcmV0dXJuIGZlYXR1cmVzOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXVFIKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RD
b250cm9sbGVySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9z
L1Rlc3RDb250cm9sbGVySU9TLm1tCShyZXZpc2lvbiAyNjc4ODUpCisrKyBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTkw
LDcgKzE5MCw3IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRTdGF0ZVQKICAg
ICB9CiAKICAgICBtX3ByZXNlbnRQb3BvdmVyU3dpenpsZXJzLmNsZWFyKCk7Ci0gICAgaWYgKCFv
cHRpb25zLnNob3VsZFByZXNlbnRQb3BvdmVycykgeworICAgIGlmICghb3B0aW9ucy5zaG91bGRQ
cmVzZW50UG9wb3ZlcnMoKSkgewogI2lmIFVTRShVSUNPTlRFWFRNRU5VKQogICAgICAgICBtX3By
ZXNlbnRQb3BvdmVyU3dpenpsZXJzLmFwcGVuZChtYWtlVW5pcXVlPEluc3RhbmNlTWV0aG9kU3dp
enpsZXI+KFtVSUNvbnRleHRNZW51SW50ZXJhY3Rpb24gY2xhc3NdLCBAc2VsZWN0b3IoX3ByZXNl
bnRNZW51QXRMb2NhdGlvbjopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVQcmVzZW50
TWVudU9yUG9wb3Zlck9yVmlld0NvbnRyb2xsZXIpKSk7CiAjZW5kaWYKQEAgLTIxMyw4ICsyMTMs
MTAgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1SZXNldFN0YXRlVAogICAgICAgICBV
SVNjcm9sbFZpZXcgKnNjcm9sbFZpZXcgPSB3ZWJWaWV3LnNjcm9sbFZpZXc7CiAgICAgICAgIFtz
Y3JvbGxWaWV3IF9yZW1vdmVBbGxBbmltYXRpb25zOllFU107CiAgICAgICAgIFtzY3JvbGxWaWV3
IHNldFpvb21TY2FsZToxIGFuaW1hdGVkOk5PXTsKLSAgICAgICAgc2Nyb2xsVmlldy5jb250ZW50
SW5zZXQgPSBVSUVkZ2VJbnNldHNNYWtlKG9wdGlvbnMuY29udGVudEluc2V0VG9wLCAwLCAwLCAw
KTsKLSAgICAgICAgc2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0ID0gQ0dQb2ludE1ha2UoMCwgLW9w
dGlvbnMuY29udGVudEluc2V0VG9wKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gY29udGVudElu
c2V0VG9wID0gb3B0aW9ucy5jb250ZW50SW5zZXRUb3AoKTsKKyAgICAgICAgc2Nyb2xsVmlldy5j
b250ZW50SW5zZXQgPSBVSUVkZ2VJbnNldHNNYWtlKGNvbnRlbnRJbnNldFRvcCwgMCwgMCwgMCk7
CisgICAgICAgIHNjcm9sbFZpZXcuY29udGVudE9mZnNldCA9IENHUG9pbnRNYWtlKDAsIC1jb250
ZW50SW5zZXRUb3ApOwogCiAgICAgICAgIGlmICh3ZWJWaWV3LmludGVyYWN0aW5nV2l0aEZvcm1D
b250cm9sKQogICAgICAgICAgICAgc2hvdWxkUmVzdG9yZUZpcnN0UmVzcG9uZGVyID0gW3dlYlZp
ZXcgcmVzaWduRmlyc3RSZXNwb25kZXJdOwpAQCAtMjY1LDEyICsyNjcsMTQgQEAgYm9vbCBUZXN0
Q29udHJvbGxlcjo6cGxhdGZvcm1SZXNldFN0YXRlVAogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpw
bGF0Zm9ybUNvbmZpZ3VyZVZpZXdGb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0KQog
eworICAgIFtbR2VuZXJhdGVkVG91Y2hlc0RlYnVnV2luZG93IHNoYXJlZEdlbmVyYXRlZFRvdWNo
ZXNEZWJ1Z1dpbmRvd10gc2V0U2hvdWxkU2hvd1RvdWNoZXM6dGVzdC5vcHRpb25zKCkuc2hvdWxk
U2hvd1RvdWNoZXMoKV07CisKICAgICBUZXN0UnVubmVyV0tXZWJWaWV3ICp3ZWJWaWV3ID0gbWFp
bldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCk7CiAKLSAgICBpZiAodGVzdC5vcHRpb25zKCkuc2hv
dWxkSWdub3JlTWV0YVZpZXdwb3J0KQorICAgIGlmICh0ZXN0Lm9wdGlvbnMoKS5zaG91bGRJZ25v
cmVNZXRhVmlld3BvcnQoKSkKICAgICAgICAgd2ViVmlldy5jb25maWd1cmF0aW9uLnByZWZlcmVu
Y2VzLl9zaG91bGRJZ25vcmVNZXRhVmlld3BvcnQgPSBZRVM7CiAKLSAgICBpZiAoIXRlc3Qub3B0
aW9ucygpLnVzZUZsZXhpYmxlVmlld3BvcnQpCisgICAgaWYgKCF0ZXN0Lm9wdGlvbnMoKS51c2VG
bGV4aWJsZVZpZXdwb3J0KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIENHUmVjdCBzY3JlZW5C
b3VuZHMgPSBbVUlTY3JlZW4gbWFpblNjcmVlbl0uYm91bmRzOwpAQCAtMjkxLDEwICsyOTUsOSBA
QCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUNvbmZpZ3VyZVZpCiAgICAgLy8gV0tCdW5k
bGVQYWdlU2V0VXNlVGVzdGluZ1ZpZXdwb3J0Q29uZmlndXJhdGlvbihmYWxzZSkuCiB9CiAKLXZv
aWQgVGVzdENvbnRyb2xsZXI6OnVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNUZXN0T3B0aW9uc0ZvclRl
c3QoVGVzdE9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IHN0ZDo6c3RyaW5nJikgY29uc3QKK1Rlc3RG
ZWF0dXJlcyBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0Zv
clRlc3QoY29uc3QgVGVzdENvbW1hbmQmKSBjb25zdAogewotICAgIG9wdGlvbnMuc2hvdWxkU2hv
d1RvdWNoZXMgPSBzaG91bGRTaG93VG91Y2hlcygpOwotICAgIFtbR2VuZXJhdGVkVG91Y2hlc0Rl
YnVnV2luZG93IHNoYXJlZEdlbmVyYXRlZFRvdWNoZXNEZWJ1Z1dpbmRvd10gc2V0U2hvdWxkU2hv
d1RvdWNoZXM6b3B0aW9ucy5zaG91bGRTaG93VG91Y2hlc107CisgICAgcmV0dXJuIHsgfTsKIH0K
IAogdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1Jbml0aWFsaXplQ29udGV4dCgpCkluZGV4
OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9QbGF0Zm9ybVdlYlZpZXdNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvUGxhdGZvcm1XZWJWaWV3TWFjLm1t
CShyZXZpc2lvbiAyNjc4ODUpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9QbGF0Zm9y
bVdlYlZpZXdNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTYxLDE4ICs2MSwxOCBAQCBQbGF0Zm9y
bVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyhXS1dlYlZpCiAgICAgLCBtX29wdGlvbnMob3B0aW9u
cykKIHsKICAgICAvLyBGSVhNRTogTm90IHN1cmUgdGhpcyBpcyB0aGUgYmVzdCBwbGFjZSBmb3Ig
dGhpczsgbWF5YmUgd2Ugc2hvdWxkIGhhdmUgQVBJIHRvIHNldCB0aGlzIHNvIHdlIGNhbiBkbyBp
dCBmcm9tIFRlc3RDb250cm9sbGVyPwotICAgIGlmIChtX29wdGlvbnMudXNlUmVtb3RlTGF5ZXJU
cmVlKQorICAgIGlmIChtX29wdGlvbnMudXNlUmVtb3RlTGF5ZXJUcmVlKCkpCiAgICAgICAgIFtb
TlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHNldFZhbHVlOkBZRVMgZm9yS2V5
OkAiV2ViS2l0MlVzZVJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhIl07CiAKICAgICBhdXRvIGNv
cGllZENvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtjb25maWd1cmF0aW9uIGNvcHldKTsKLSAgICBX
S1ByZWZlcmVuY2VzU2V0VGhyZWFkZWRTY3JvbGxpbmdFbmFibGVkKChfX2JyaWRnZSBXS1ByZWZl
cmVuY2VzUmVmKVtjb3BpZWRDb25maWd1cmF0aW9uIHByZWZlcmVuY2VzXSwgbV9vcHRpb25zLnVz
ZVRocmVhZGVkU2Nyb2xsaW5nKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0VGhyZWFkZWRTY3JvbGxp
bmdFbmFibGVkKChfX2JyaWRnZSBXS1ByZWZlcmVuY2VzUmVmKVtjb3BpZWRDb25maWd1cmF0aW9u
IHByZWZlcmVuY2VzXSwgbV9vcHRpb25zLnVzZVRocmVhZGVkU2Nyb2xsaW5nKCkpOwogCiAgICAg
TlNSZWN0IHJlY3QgPSBOU01ha2VSZWN0KDAsIDAsIFRlc3RDb250cm9sbGVyOjp2aWV3V2lkdGgs
IFRlc3RDb250cm9sbGVyOjp2aWV3SGVpZ2h0KTsKICAgICBtX3ZpZXcgPSBbW1Rlc3RSdW5uZXJX
S1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6cmVjdCBjb25maWd1cmF0aW9uOmNvcGllZENv
bmZpZ3VyYXRpb24uZ2V0KCldOwogICAgIFttX3ZpZXcgX3NldFdpbmRvd09jY2x1c2lvbkRldGVj
dGlvbkVuYWJsZWQ6Tk9dOwogCiAgICAgTlNTY3JlZW4gKmZpcnN0U2NyZWVuID0gW1tOU1NjcmVl
biBzY3JlZW5zXSBvYmplY3RBdEluZGV4OjBdOwotICAgIE5TUmVjdCB3aW5kb3dSZWN0ID0gbV9v
cHRpb25zLnNob3VsZFNob3dXZWJWaWV3ID8gTlNPZmZzZXRSZWN0KHJlY3QsIDEwMCwgMTAwKSA6
IE5TT2Zmc2V0UmVjdChyZWN0LCAtMTAwMDAsIFtmaXJzdFNjcmVlbiBmcmFtZV0uc2l6ZS5oZWln
aHQgLSByZWN0LnNpemUuaGVpZ2h0ICsgMTAwMDApOworICAgIE5TUmVjdCB3aW5kb3dSZWN0ID0g
bV9vcHRpb25zLnNob3VsZFNob3dXZWJWaWV3KCkgPyBOU09mZnNldFJlY3QocmVjdCwgMTAwLCAx
MDApIDogTlNPZmZzZXRSZWN0KHJlY3QsIC0xMDAwMCwgW2ZpcnN0U2NyZWVuIGZyYW1lXS5zaXpl
LmhlaWdodCAtIHJlY3Quc2l6ZS5oZWlnaHQgKyAxMDAwMCk7CiAgICAgbV93aW5kb3cgPSBbW1dl
YktpdFRlc3RSdW5uZXJXaW5kb3cgYWxsb2NdIGluaXRXaXRoQ29udGVudFJlY3Q6d2luZG93UmVj
dCBzdHlsZU1hc2s6TlNXaW5kb3dTdHlsZU1hc2tCb3JkZXJsZXNzIGJhY2tpbmc6KE5TQmFja2lu
Z1N0b3JlVHlwZSlfTlNCYWNraW5nU3RvcmVVbmJ1ZmZlcmVkIGRlZmVyOllFU107CiAgICAgbV93
aW5kb3cucGxhdGZvcm1XZWJWaWV3ID0gdGhpczsKICAgICBbbV93aW5kb3cgc2V0Q29sb3JTcGFj
ZTpbZmlyc3RTY3JlZW4gY29sb3JTcGFjZV1dOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9tYWMvVGVzdENvbnRyb2xsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9tYWMvVGVzdENvbnRyb2xsZXJNYWMubW0JKHJldmlzaW9uIDI2Nzg4NSkKKysrIFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1Rlc3RDb250cm9sbGVyTWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzIsMTEgKzE3MiwxMSBAQCBib29sIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJl
c2V0U3RhdGVUCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgVGVzdENvbnRyb2xsZXI6OnVw
ZGF0ZVBsYXRmb3JtU3BlY2lmaWNUZXN0T3B0aW9uc0ZvclRlc3QoVGVzdE9wdGlvbnMmIG9wdGlv
bnMsIGNvbnN0IHN0ZDo6c3RyaW5nJikgY29uc3QKK1Rlc3RGZWF0dXJlcyBUZXN0Q29udHJvbGxl
cjo6cGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QoY29uc3QgVGVzdENvbW1h
bmQmKSBjb25zdAogewotICAgIG9wdGlvbnMudXNlVGhyZWFkZWRTY3JvbGxpbmcgPSB0cnVlOwot
ICAgIG9wdGlvbnMudXNlUmVtb3RlTGF5ZXJUcmVlID0gc2hvdWxkVXNlUmVtb3RlTGF5ZXJUcmVl
KCk7Ci0gICAgb3B0aW9ucy5zaG91bGRTaG93V2ViVmlldyA9IHNob3VsZFNob3dXZWJWaWV3KCk7
CisgICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVzOworICAgIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5p
bnNlcnQoeyAidXNlVGhyZWFkZWRTY3JvbGxpbmciLCB0cnVlIH0pOworICAgIHJldHVybiBmZWF0
dXJlczsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJlQ29udGVudEV4dGVuc2lv
bkZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mIHRlc3QpCkluZGV4OiBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL3dpbi9QbGF0Zm9ybVdlYlZpZXdXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvd2luL1BsYXRmb3JtV2ViVmlld1dpbi5jcHAJKHJldmlzaW9uIDI2
Nzg4NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL1BsYXRmb3JtV2ViVmlld1dpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw3ICsxNDQsNyBAQCB2b2lkIFBsYXRmb3JtV2ViVmll
dzo6c2V0V2luZG93RnJhbWUoV0tSCiAgICAgICAgIFNXUF9OT01PVkUgfCBTV1BfTk9aT1JERVIg
fCBTV1BfTk9BQ1RJVkFURSB8IFNXUF9OT0NPUFlCSVRTKTsKIAogICAgIFVJTlQgZmxhZ3MgPSBT
V1BfTk9aT1JERVIgfCBTV1BfTk9BQ1RJVkFURSB8IFNXUF9OT0NPUFlCSVRTOwotICAgIGlmICht
X29wdGlvbnMuc2hvdWxkU2hvd1dlYlZpZXcpCisgICAgaWYgKG1fb3B0aW9ucy5zaG91bGRTaG93
V2ViVmlldygpKQogICAgICAgICBmbGFncyB8PSBTV1BfTk9NT1ZFOwogICAgIDo6U2V0V2luZG93
UG9zKAogICAgICAgICBtX3dpbmRvdywKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2lu
L1Rlc3RDb250cm9sbGVyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL3dpbi9UZXN0Q29udHJvbGxlcldpbi5jcHAJKHJldmlzaW9uIDI2Nzg4NSkKKysrIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvd2luL1Rlc3RDb250cm9sbGVyV2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjI3LDkgKzIyNyw5IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRQ
cmVmZXIKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFRlc3RDb250cm9sbGVyOjp1
cGRhdGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0KFRlc3RPcHRpb25zJiwgY29u
c3Qgc3RkOjpzdHJpbmcmKSBjb25zdAorVGVzdEZlYXR1cmVzIFRlc3RDb250cm9sbGVyOjpwbGF0
Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1bHRzRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYpIGNv
bnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4geyB9OwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXVFIKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd3BlL1Rlc3RDb250
cm9sbGVyV1BFLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL3dwZS9U
ZXN0Q29udHJvbGxlcldQRS5jcHAJKHJldmlzaW9uIDI2Nzg4NSkKKysrIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvd3BlL1Rlc3RDb250cm9sbGVyV1BFLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2
LDkgKzEzNiwxMSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJlc2V0UHJlZmVyCiB7
CiB9CiAKLXZvaWQgVGVzdENvbnRyb2xsZXI6OnVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNUZXN0T3B0
aW9uc0ZvclRlc3QoVGVzdE9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IHN0ZDo6c3RyaW5nJikgY29u
c3QKK1Rlc3RGZWF0dXJlcyBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVE
ZWZhdWx0c0ZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKSBjb25zdAogewotICAgIG9wdGlvbnMu
ZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyA9IGZhbHNlOworICAgIFRlc3RGZWF0dXJlcyBmZWF0
dXJlczsKKyAgICBmZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgImVuYWJsZU1vZGVybk1l
ZGlhQ29udHJvbHMiLCBmYWxzZSB9KTsKKyAgICByZXR1cm4gZmVhdHVyZXM7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdUUgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjY3ODg1KQorKysgTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMjAtMTAtMDQgIFNh
bSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFtUZXN0aW5nXSBBZGQgc3Vw
cG9ydCBmb3IgcGVyLWRpcmVjdG9yeSBvdmVycmlkaW5nIG9mIHRlc3Rpbmcgb3B0aW9ucyB2aWEg
bmV3IFRlc3RPcHRpb25zLnR4dCBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE3Mjk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkcyBkaXJlY3RvcnkgYmFzZWQgVGVzdE9wdGlvbnMudHh0IGZp
bGVzIHRvIHJlcGxhY2UgaGFyZCBjb2RpbmcgaW4gV2ViS2l0VGVzdFJ1bm5lcgorICAgICAgICBm
b3Igb3B0aW9ucyBvdmVycmlkaW5nLgorCisgICAgICAgICogZmFzdC92aWV3cG9ydC9UZXN0T3B0
aW9ucy50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lwYWQvZmFzdC92aWV3cG9ydC9U
ZXN0T3B0aW9ucy50eHQ6IEFkZGVkLgorICAgICAgICAqIHN2Zy9XM0MtU1ZHLTEuMS1TRS9UZXN0
T3B0aW9ucy50eHQ6IEFkZGVkLgorICAgICAgICAqIHN2Zy9XM0MtU1ZHLTEuMS9UZXN0T3B0aW9u
cy50eHQ6IEFkZGVkLgorCiAyMDIwLTEwLTAyICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZW1vdmUgY29kZSBiZWhpbmQgRU5BQkxFKE1FRElBX1NFU1NJT04pLCBu
byBwb3J0cyBlbmFibGUgaXQKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvdmlld3BvcnQvVGVzdE9w
dGlvbnMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvdmlld3BvcnQvVGVzdE9w
dGlvbnMudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3Qvdmlld3BvcnQvVGVz
dE9wdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtpdC10ZXN0LXJ1
bm5lciBbIHVzZUZsZXhpYmxlVmlld3BvcnQ9dHJ1ZSBdCkluZGV4OiBMYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2MvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2Nzg4OCkKKysrIExheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAyMC0xMC0wNCAg
U2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgW1Rlc3RpbmddIEFkZCBz
dXBwb3J0IGZvciBwZXItZGlyZWN0b3J5IG92ZXJyaWRpbmcgb2YgdGVzdGluZyBvcHRpb25zIHZp
YSBuZXcgVGVzdE9wdGlvbnMudHh0IGZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcyOTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGRzIGRpcmVjdG9yeSBiYXNlZCBUZXN0T3B0aW9ucy50eHQg
ZmlsZXMgdG8gcmVwbGFjZSBoYXJkIGNvZGluZyBpbiBXZWJLaXRUZXN0UnVubmVyCisgICAgICAg
IGZvciBvcHRpb25zIG92ZXJyaWRpbmcuCisKKyAgICAgICAgKiBJbmRleGVkREItcHJpdmF0ZS1i
cm93c2luZy9UZXN0T3B0aW9ucy50eHQ6IEFkZGVkLgorCiAyMDIwLTA5LTMwICBBbnRvaW5lIFF1
aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgogCiAgICAgICAgIEFkZCBub24tYW5pbWF0ZWQgc3Vw
cG9ydCBmb3IgdGhlIENTUyB0cmFuc2xhdGUgcHJvcGVydHkKSW5kZXg6IExheW91dFRlc3RzL2lt
cG9ydGVkL3czYy9JbmRleGVkREItcHJpdmF0ZS1icm93c2luZy9UZXN0T3B0aW9ucy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0luZGV4ZWREQi1wcml2YXRlLWJy
b3dzaW5nL1Rlc3RPcHRpb25zLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2MvSW5kZXhlZERCLXByaXZhdGUtYnJvd3NpbmcvVGVzdE9wdGlvbnMudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtpdC10ZXN0LXJ1bm5lciBbIHVzZUVwaGVtZXJh
bFNlc3Npb249dHJ1ZSBdCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9pcGFkL2Zhc3Qvdmll
d3BvcnQvVGVzdE9wdGlvbnMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3Jt
L2lwYWQvZmFzdC92aWV3cG9ydC9UZXN0T3B0aW9ucy50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5
b3V0VGVzdHMvcGxhdGZvcm0vaXBhZC9mYXN0L3ZpZXdwb3J0L1Rlc3RPcHRpb25zLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3ZWJraXQtdGVzdC1ydW5uZXIgWyB1c2VGbGV4aWJs
ZVZpZXdwb3J0PXRydWUgXQpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL1czQy1TVkctMS4xLVNFL1Rl
c3RPcHRpb25zLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvVzNDLVNWRy0xLjEt
U0UvVGVzdE9wdGlvbnMudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3N2Zy9XM0Mt
U1ZHLTEuMS1TRS9UZXN0T3B0aW9ucy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSBAQAor
d2Via2l0LXRlc3QtcnVubmVyIFsgaXNTVkdUZXN0PXRydWUgXQpJbmRleDogTGF5b3V0VGVzdHMv
c3ZnL1czQy1TVkctMS4xL1Rlc3RPcHRpb25zLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9zdmcvVzNDLVNWRy0xLjEvVGVzdE9wdGlvbnMudHh0CShub25leGlzdGVudCkKKysrIExheW91
dFRlc3RzL3N2Zy9XM0MtU1ZHLTEuMS9UZXN0T3B0aW9ucy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSBAQAord2Via2l0LXRlc3QtcnVubmVyIFsgaXNTVkdUZXN0PXRydWUgXQo=
</data>
<flag name="commit-queue"
          id="426422"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410476</attachid>
            <date>2020-10-04 11:35:23 -0700</date>
            <delta_ts>2020-10-04 12:21:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217297-20201004113522.patch</filename>
            <type>text/plain</type>
            <size>273828</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2Nzk0NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE4NCBAQAorMjAyMC0xMC0wNCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgW1Rlc3RpbmddIEFkZCBzdXBwb3J0IGZvciBwZXItZGlyZWN0b3J5IG92ZXJyaWRp
bmcgb2YgdGVzdGluZyBvcHRpb25zIHZpYSBuZXcgVGVzdE9wdGlvbnMudHh0IGZpbGVzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcyOTcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGludHJvZHVj
ZXMgYSBuZXcgY29uY2VwdCBmb3Igd2Via2l0IHRlc3RzICh0aG9zZSB3aXRoaW4gdGhlIExheW91
dFRlc3RzIGRpcmVjdG9yeSkKKyAgICAgICAgdGhhdCBleHRlbmRzIHRoZSBleGlzdGluZyB0ZXN0
LWhlYWRlciBiYXNlZCBjb25maWd1cmF0aW9uIG9mIHRlc3Qgb3B0aW9ucyAodGhvc2UgY29tbWVu
dHMKKyAgICAgICAgYXQgdGhlIHRvcCBvZiBzb21ldCB0ZXN0IGZpbGVzIHRoYXQgbG9vayBsaWtl
ICJ3ZWJraXQtdGVzdC1ydW5uZXIgWyAuLi4gXSIpIHRvIGFsc28gYWxsb3cKKyAgICAgICAgZGly
ZWN0b3J5IHdpZGUgb3ZlcnJpZGluZyBvZiB0ZXN0IG9wdGlvbnMgdmlhIGEgbmV3IFRlc3RPcHRp
b25zLnR4dCBmaWxlLiBUaGVzZSBmaWxlcyBhcmUKKyAgICAgICAgZm9yIG5vdyBleHBlY3RlZCB0
byB1c2UgdGhlIHNhbWUgIndlYmtpdC10ZXN0LXJ1bm5lciBbIC4uLiBdIiBzeW50YXggYXMgdGhl
IHRlc3QtaGVhZGVyIGJhc2VkCisgICAgICAgIG9uZXMgZm9yIGNvbnNpc3RlbmN5IGFuZCBzaW1w
bGljaXR5IG9mIGltcGxlbWVudGF0aW9uLCBidXQgaW4gdGhlIGZ1dHVyZSB3ZSBtYXkgZGVjaWRl
IGl0CisgICAgICAgIG1ha2VzIG1vcmUgc2Vuc2UgdG8gdXRpbGl6ZSB0aGUgYWRkaXRpb25hbCBz
cGFjZS4KKworICAgICAgICBOb3cgdGhhdCB3ZSBoYXZlIGV2ZW4gbW9yZSBzb3VyY2VzIG9mIHRl
c3Qgb3B0aW9ucyBjb21pbmcgaW4sIHdlIG5lZWQgdG8gaGF2ZSBhIGRlZmluZWQgc2V0CisgICAg
ICAgIG9mIHJ1bGVzIGZvciBpbiB3aGljaCBvcmRlciBvcHRpb25zIHRha2UgcHJlY2VkZW5jZS4g
VGhlIG9yZGVyIGlzIChmcm9tIGxlYXN0IHRvIG1vc3QpOgorICAgICAgICAKKyAgICAgICAgLSBH
bG9iYWwgZmVhdHVyZXMgcGFzc2VkIHRvIFdlYktpdFRlc3RSdW5uZXIgdmlhIHRoZSBjb21tYW5k
IGxpbmUgKGUuZy4gLS1zaG93LXRvdWNoZXMpCisgICAgICAgIC0gSGFyZGNvZGVkIGZlYXR1cmVz
IGJhc2VkIG9uIHRoZSBwYXRoIG9mIHRoZSB0ZXN0IGJlaW5nIHJ1biAoaG9wZWZ1bGx5IHdlIGNh
biByZW1vdmUgYWxsIHNvb24pCisgICAgICAgIC0gSGFyZGNvZGVkIHBsYXRmb3JtIHNwZWNpZmlj
IGRlZmF1bHRzIChjdXJyZW50bHkgb25seSB1c2VkIGJ5IG1hY09TIGZvciB1c2VUaHJlYWRlZFNj
cm9sbGluZykuCisgICAgICAgIC0gRmVhdHVyZXMgZnJvbSBUZXN0T3B0aW9ucy50eHQgZmlsZXMs
IHdpdGggdGhlIG1vc3QgZGlyZWN0b3JpZXMgY2xvc2VyIHRvIC4vTGF5b3V0VGVzdHMgdGFrZWlu
ZworICAgICAgICAgIGxlc3MgcHJlY2VkZW5jZSB0aGFuIHRob3NlIGNsb3NlciB0byB0aGUgdGVz
dCBmaWxlIChlLmcuIGFuIG9wdGlvbiBpbiAKKyAgICAgICAgICAuL0xheW91dFRlc3RzL2Zhc3Qv
Zm9ybXMvVGVzdE9wdGlvbnMudHh0IHdpbGwgd2luIG92ZXIgb25lIGluIC4vTGF5b3V0VGVzdHMv
ZmFzdC9UZXN0T3B0aW9ucy50eHQpLgorICAgICAgICAtIEZlYXR1cmVzIGZyb20gdGhlIHRlc3Qg
aGVhZGVycyB3aXRoaW4gdGhlIHRlc3QgaXRzZWxmLgorICAgICAgICAtIEZpbmFsbHksIGEgc2Vj
b25kIGNoYW5jZSBmb3IgbW9yZSBwbGF0Zm9ybSBzcGVjaWZpYyBkZWZhdWx0cyAoY3VycmVubHkg
b25seSB1c2VkIHRoZSBjb2NvYSBwb3J0cworICAgICAgICAgIGZvciBzZXR0aW5nIGVuYWJsZVBy
b2Nlc3NTd2FwT25OYXZpZ2F0aW9uIGFuZCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiBi
YXNlZCBvbiBOU1VzZXJEZWZhdWx0cy4pCisgICAgICAgIAorICAgICAgICBIb3BlZnVsbHkgaW4g
dGhlIGZ1dHVyZSwgd2Ugd2lsbCBiZSBhYmxlIHRvIHNpbXBsaWZ5IHRoYXQgYXMgd2UgcmVtb3Zl
IHNvbWUgb2YgdGhlc2UgbGV2ZWxzLCBwZXJoYXBzCisgICAgICAgIGJ5IGV4dGVuZGluZyBUZXN0
T3B0aW9ucy50eHQgdG8gYmUgYWJsZSB0byBzZXQgcGxhdGZvcm0gc3BlY2ZpYyBvdmVycmlkZXMu
CisKKyAgICAgICAgVG8gbWFrZSB0aGlzIGNoYW5nZSB3b3JrLCBhbmQgcGF2ZSB0aGUgd2F5IGZv
ciBmdXR1cmUgYXV0b2dlbmVyYXRpb24gb2Ygc29tZSBvZiB0aGVzZSB0ZXN0IG9wdGlvbnMsCisg
ICAgICAgIHRoZSBUZXN0T3B0aW9ucyBzdHJ1Y3QgKG5vdyBjbGFzcykgd2FzIG92ZXJoYXVsZWQu
IEluc3RlYWQgb2Ygc3RvcmluZyB0aGUgc3RhdGUgaXRzZWxmLCBpdCBUZXN0T3B0aW9ucworICAg
ICAgICBpcyBub3cgYW4gaW1tdXRhYmxlIG93bmVyIG9mIGEgVGVzdEZlYXR1cmVzIG9iamVjdC4g
VGVzdEZlYXR1cmVzIGlzIGEgc2ltcGxlIHN0cnVjdCB0aGF0IGNvbnRhaW5zIG1hcHMgCisgICAg
ICAgIG9mIG9wdGlvbiBrZXlzIHRvIHZhbHVlcyBhbmQgY2FuIGJlIG1lcmdlZCB3aXRoIG90aGVy
IFRlc3RGZWF0dXJlcyBvYmplY3RzLiBUZXN0T3B0aW9ucyB0YWtlcyBhIAorICAgICAgICBUZXN0
RmVhdHVyZXMgYXQgY29uc3RydWN0aW9uLCBhbmQgZXhwb3NlcyBnZXR0ZXJzIGZvciBhbGwga2V5
cywgYXMgd2VsbCBhcyBkZWZhdWx0cyBmb3Igd2hlbiB0aGV5IGFyZQorICAgICAgICBub3QgaW4g
dGhlIG1hcHMuIEluIGZ1dHVyZSBjaGFuZ2VzLCBJIHdvdWxkIGxpa2UgdG8gcmVtb3ZlIG1hbnkg
b2YgdGhlc2UgKHRoZSBvbmVzIHRoYXQgY29ycmVzcG9uZAorICAgICAgICB3aXRoIFdlYktpdCBw
cmVmZXJlbmNlcyBhbnl3YXkpIGFuZCBoYXZlIHRoZSBrZXlzIGFuZCB2YWx1ZXMgYXV0b21hdGlj
YWxseSBkZWFsdCB3aXRoIGJ5IFdLUHJlZmVyZW5jZXMuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL09wdGlvbnMuY3BwOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5o
OgorICAgICAgICBTd2l0Y2ggdG8gc3RkOjp1bm9yZGVyZWRfbWFwIGZvciBjb25zaXN0ZW5jeSBh
bmQgZWFzZSBvZiBjb252ZXJzaW9uLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9QbGF0
Zm9ybVdlYlZpZXcuaDoKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3Ojp2aWV3U3VwcG9y
dHNPcHRpb25zIGNvbnN0KToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3IFRlc3RPcHRpb25z
IGZ1bmN0aW9ucy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25z
Lmg6CisgICAgICAgIChXVFI6OnRvV0spOgorICAgICAgICAoV1RSOjp0b1dURlN0cmluZyk6Cisg
ICAgICAgIEFkZCBjb252ZXJzaW9ucyBmb3Igc3RkOjpzdHJpbmcuCisKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjppbml0
aWFsaXplKToKKyAgICAgICAgUmVwbGFjZSBzb21lIGJvb2xzIHdpdGggYSBuZXcgZ2xvYmFsIFRl
c3RGZWF0dXJlcyBpbnN0YW5jZSB0aGF0IGZvcm1zIHRoZSBiYXNlIG9mCisgICAgICAgIGFsbCBU
ZXN0RmVhdHVyZXMgbWVyZ2VzLgorICAgICAgICAKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xs
ZXI6OmdlbmVyYXRlQ29udGV4dENvbmZpZ3VyYXRpb24gY29uc3QpOgorICAgICAgICAoV1RSOjpU
ZXN0Q29udHJvbGxlcjo6Z2VuZXJhdGVQYWdlQ29uZmlndXJhdGlvbik6CisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpjcmVhdGVXZWJWaWV3V2l0aE9wdGlvbnMpOgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6ZW5zdXJlVmlld1N1cHBvcnRzT3B0aW9uc0ZvclRlc3QpOgorICAg
ICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRQcmVmZXJlbmNlc1RvQ29uc2lzdGVudFZh
bHVlcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0
ZW50VmFsdWVzKToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3IFRlc3RPcHRpb25zIGZ1bmN0
aW9ucy4KKyAgICAgICAgCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpjcmVhdGVUZXN0
VVJMKToKKyAgICAgICAgRXhwb3NlIGFzIGEgc3RhdGljIG1lbWJlciBmdW5jdGlvbiBvbiBUZXN0
Q29udHJvbGxlciBmb3IgdXNlIGluIG90aGVyIGZpbGVzLgorICAgICAgICAKKyAgICAgICAgKFdU
Ujo6VGVzdENvbnRyb2xsZXI6OnRlc3RPcHRpb25zRm9yVGVzdCBjb25zdCk6CisgICAgICAgIFJl
d29yayB0byBiZSBhIHNlcXVlbmNlIG9mIFRlc3RGZWF0dXJlcyBtZXJnZXMuCisgICAgICAgIAor
ICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6dXBkYXRlV2ViVmlld1NpemVGb3JUZXN0KToK
KyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnVwZGF0ZVdpbmRvd1NjYWxlRm9yVGVzdCk6
CisgICAgICAgIFVwZGF0ZSB0byBjYWxsIG5ldyBUZXN0T3B0aW9ucyBmdW5jdGlvbnMuCisgICAg
ICAgIAorICAgICAgICAoV1RSOjpjcmVhdGVUZXN0VVJMKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Ujo6cGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6
cGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1JlbGF0aXZlUGF0aCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVFI6OnBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNVUkwpOiBEZWxldGVkLgorICAg
ICAgICAoV1RSOjp1cGRhdGVUZXN0T3B0aW9uc0Zyb21UZXN0SGVhZGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRkVGVzdE9wdGlvbnMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICBNb3ZlZCBUZXN0T3B0aW9ucyBwYXJzaW5nIHRvIFRlc3RPcHRp
b25zLmNwcAorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6
CisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpjcmVhdGVUZXN0U2V0dGluZ3NEaWN0aW9u
YXJ5KToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3IFRlc3RPcHRpb25zIGZ1bmN0aW9ucy4K
KworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuaDoKKyAgICAgICAgUmV3
b3JrcyBUZXN0T3B0aW9ucyB0byBiZSBhbiBpbW11dGFibGUgb3duZXIgb2YgYSBUZXN0RmVhdHVy
ZXMgc3RydWN0LCB3aGljaCBpcyBhIHNldAorICAgICAgICBvZiBtYXBzIHRoYXQgbWFwIGZlYXR1
cmUgc3RyaW5nIGtleXMsIHRvIHZhbHVlcyBvZiB0eXBlIGJvb2wsIGRvdWJsZSwgc3RyaW5nIG9y
IHN0cmluZyB2ZWN0b3IuCisgICAgICAgIFJlLXVzZXMgZXhpc3RpbmcgdGVzdCBoZWFkZXIgcGFy
c2luZyBjb2RlIChtb3ZlZCBoZXJlIGZyb20gVGVzdENvbnRyb2xsZXIuY3BwKSB0byBhbHNvCisg
ICAgICAgIHBhcnNlIG5ldyBUZXN0T3B0aW9ucy50eHQgZmlsZXMuCisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5jcHA6CisgICAgICAgIChXVFI6OmR1bXBGZWF0dXJlcyk6
CisgICAgICAgIEhlbHBlciB0byBkdW1wIGZlYXR1cmVzIHRvIHN0ZGVyciwgdXNlZnVsIGZvciBk
ZWJ1Z2dpbmcuCisKKyAgICAgICAgKFdUUjo6a2V5VHlwZSk6CisgICAgICAgIEhlbHBlciBmb3Ig
cGFyc2VyIHRvIGtub3cgd2hpY2ggdmFsdWUgcGFyc2VyIHRvIHVzZS4KKworICAgICAgICAoV1RS
OjpwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUpOgorICAgICAgICAoV1RSOjpwYXJzZVN0cmlu
Z1Rlc3RIZWFkZXJWYWx1ZUFzUmVsYXRpdmVQYXRoKToKKyAgICAgICAgKFdUUjo6cGFyc2VTdHJp
bmdUZXN0SGVhZGVyVmFsdWVBc1VSTCk6CisgICAgICAgIFZhbHVlIHBhcnNlcnMgbW92ZWQgZnJv
bSBUZXN0Q29udHJvbGxlci5jcHAKKworICAgICAgICAoV1RSOjpwYXJzZVRlc3RIZWFkZXIpOgor
ICAgICAgICBIZWFkZXIgcGFyc2VyIG1vdmVkIGZyb20gVGVzdENvbnRyb2xsZXIuY3BwLiBVcGRh
dGUgdG8gbm93IHJldHVybgorICAgICAgICBhIFRlc3RGZWF0dXJlcyBvYmplY3QgYW5kIHVzZSBr
ZXlUeXBlIHRvIHBpY2sgdmFsdWUgcGFyc2VyIHJhdGhlcgorICAgICAgICB0aGFuIGlubGluaW5n
IHRoZSBpZiBzdGF0ZW1lbnRzLgorICAgICAgICAKKyAgICAgICAgKFdUUjo6aGFyZGNvZGVkRmVh
dHVyZXNCYXNlZE9uUGF0aEZvclRlc3QpOgorICAgICAgICAoV1RSOjpzaG91bGRNYWtlVmlld3Bv
cnRGbGV4aWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OnNob3VsZFVzZUZpeGVkTGF5b3V0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6aXNTVkdUZXN0UGF0aCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVFI6OnNob3VsZFVzZUVwaGVtZXJhbFNlc3Npb24pOiBEZWxldGVkLgorICAgICAgICBN
b3ZlZCBmcm9tIHRoZSBUZXN0T3B0aW9ucyBjb250cnVjdG9yIGFuZCByZW1vdmUgY2FzZXMgZm9y
IGZsZXhpYmxlTGF5b3V0LAorICAgICAgICBmaXhlZExheW91dCwgaXNTVkdUZXN0LCBhbmQgdXNl
RXBoZW1lcmFsU2Vzc2lvbiwgd2hpY2ggYXJlIGFsbCBlaXRoZXIgbm93CisgICAgICAgIGhhbmRs
ZWQgYnkgVGVzdE9wdGlvbnMudHh0IGZpbGVzIG9yIGFyZSBubyBsb25nZXIgbmVjZXNzYXJ5Lgor
CisgICAgICAgIChXVFI6Om1lcmdlKToKKyAgICAgICAgTWVyZ2VzIHR3byBUZXN0RmVhdHVyZXMg
b2JqZWN0cy4gSWYgYm90aCBjb250YWluIHRoZSBzYW1lIGtleSwgdGhlICdhZGRpdGlvbmFsJwor
ICAgICAgICBUZXN0RmVhdHVyZXMgb3ZlcnJpZGVzIHRoZSAnYmFzZScgVGVzdEZlYXR1cmVzLgor
CisgICAgICAgIChXVFI6OmZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0T3B0aW9uc0ZpbGVzRm9yVGVz
dCk6CisgICAgICAgIENyZWF0ZXMgYSBUZXN0RmVhdHVyZXMgb2JqZWN0IGJ5IGl0ZXJhdGluZyBh
bGwgdGhlIHN1YmRpcmVjdG9yaWVzIGZyb20gTGF5b3V0VGVzdHMKKyAgICAgICAgdG8gdGhlIGN1
cnJlbnQgdGVzdHMgZGlyZWN0b3J5LCBsb29raW5nIGZvciBUZXN0T3B0aW9ucy50eHQgZmlsZXMg
YW5kIG1lcmdpbmcKKyAgICAgICAgdGhlbSB0b2dldGhlci4KKworICAgICAgICAoV1RSOjpmZWF0
dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3QpOgorICAgICAgICBDcmVhdGVzIGEgVGVz
dEZlYXR1cmVzIGZvciB0aGUgdGVzdCBoZWFkZXJzIG9mIHRoZSBjdXJyZW50IHRlc3QuCisKKyAg
ICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW06Cisg
ICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZU92ZXJy
aWRlc0RlZmF1bHRzRm9yVGVzdCBjb25zdCk6CisgICAgICAgIFJld29ya2VkIHRvIG5vdyByZXR1
cm4gYSBUZXN0RmVhdHVyZXMgb2JqZWN0IHRoYXQgd2lsbCBiZSBtZXJnZWQsIHJhdGhlciB0aGFu
IHVwZGF0aW5nCisgICAgICAgIGEgVGVzdE9wdGlvbnMuIE1vdmVzIGVuYWJsZUluQXBwQnJvd3Nl
clByaXZhY3kgd29yayB0byBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1XaWxsUnVuVGVzdAorICAg
ICAgICB3aGVyZSBpdCBpcyBtb3JlIGFwcHJvcHJpYXRlLgorCisgICAgICAgIChXVFI6OlRlc3RD
b250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemVEYXRhU3RvcmUpOgorICAgICAgICAoV1RSOjpU
ZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1DcmVhdGVXZWJWaWV3KToKKyAgICAgICAgKFdUUjo6VGVz
dENvbnRyb2xsZXI6OmZpbmlzaENyZWF0aW5nUGxhdGZvcm1XZWJWaWV3KToKKyAgICAgICAgKFdU
Ujo6VGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcik6CisgICAg
ICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpjb2NvYVJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1
ZXMpOgorICAgICAgICAoV1RSOjpjb250ZW50TW9kZSk6CisgICAgICAgIFVwZGF0ZSB0byBjYWxs
IG5ldyBUZXN0T3B0aW9ucyBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6
OnBsYXRmb3JtUmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6CisgICAgICAgIChXVFI6OlRl
c3RDb250cm9sbGVyOjpwbGF0Zm9ybUNvbmZpZ3VyZVZpZXdGb3JUZXN0KToKKyAgICAgICAgVXBk
YXRlIHRvIGNhbGwgbmV3IFRlc3RPcHRpb25zIGZ1bmN0aW9ucy4KKyAgICAgICAgCisgICAgICAg
IChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1bHRzRm9y
VGVzdCBjb25zdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1cGRhdGVQbGF0Zm9y
bVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgTW92
ZWQgR2VuZXJhdGVkVG91Y2hlc0RlYnVnV2luZG93IHdvcmsgdG8gVGVzdENvbnRyb2xsZXI6OnBs
YXRmb3JtQ29uZmlndXJlVmlld0ZvclRlc3QKKyAgICAgICAgd2hlcmUgaXQgaXMgbW9yZSBhcHBy
b3ByaWF0ZSBhbmQgcmVtb3ZlZCBzaG91bGRTaG93VG91Y2hlcyBzZXR0aW5nIGFzIHRoYXQgaXMg
ZG9uZQorICAgICAgICBnbG9iYWxseSBub3cuIAorICAgICAgICAKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL21hYy9QbGF0Zm9ybVdlYlZpZXdNYWMubW06CisgICAgICAgIChXVFI6OlBsYXRm
b3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3
IFRlc3RPcHRpb25zIGZ1bmN0aW9ucy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvbWFj
L1Rlc3RDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QgY29uc3QpOgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9yVGVz
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIFJlbW92ZSBzaG91bGRVc2VSZW1vdGVMYXllclRy
ZWUgYW5kIHNob3VsZFNob3dXZWJWaWV3LCBhcyB0aG9zZSBhcmUgbm93IGRvbmUgZ2xvYmFsbHks
CisgICAgICAgIGFuZCByZS1pbXBsZW1lbnRlZCB1c2VUaHJlYWRlZFNjcm9sbGluZyB0byB1c2Ug
Ym9vbEZlYXR1cmVzLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci93aW4vVGVzdENvbnRy
b2xsZXJXaW4uY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1TcGVj
aWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QgY29uc3QpOgorICAgICAgICAoV1RSOjpUZXN0Q29u
dHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9yVGVzdCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIFVwZGF0ZWQgZm9yIG5ldyBzaWduYXR1cmUuCisKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL3dwZS9UZXN0Q29udHJvbGxlcldQRS5jcHA6CisgICAgICAgIChX
VFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1bHRzRm9yVGVz
dCBjb25zdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1cGRhdGVQbGF0Zm9ybVNw
ZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgVXBkYXRl
ZCBmb3IgbmV3IHNpZ25hdHVyZS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvZ3RrL1Rl
c3RDb250cm9sbGVyR1RLLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnBsYXRm
b3JtU3BlY2lmaWNGZWF0dXJlRGVmYXVsdHNGb3JUZXN0IGNvbnN0KToKKyAgICAgICAgKFdUUjo6
VGVzdENvbnRyb2xsZXI6OnVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNUZXN0T3B0aW9uc0ZvclRlc3Qg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICBVcGRhdGVkIGZvciBuZXcgc2lnbmF0dXJlLgorCiAy
MDIwLTEwLTAzICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgQWRkIGV4dHJhIHNsYXNoIGFmdGVyIGVtcHR5IGhvc3QgY29waWVkIGZyb20gYmFz
ZSBVUkwgaWYgcGF0aCBpcyBhbHNvIGVtcHR5CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVy
L09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvT3B0aW9u
cy5jcHAJKHJldmlzaW9uIDI2Nzg4NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvT3B0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCBzdGF0aWMgYm9vbCBoYW5k
bGVPcHRpb25BbGxvd2VkSG9zdChPcHRpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBi
b29sIHBhcnNlRmVhdHVyZShTdHJpbmcgZmVhdHVyZVN0cmluZywgSGFzaE1hcDxTdHJpbmcsIGJv
b2w+JiBmZWF0dXJlcykKK3N0YXRpYyBib29sIHBhcnNlRmVhdHVyZShTdHJpbmcgZmVhdHVyZVN0
cmluZywgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29sPiYgZmVhdHVyZXMpCiB7
CiAgICAgYXV0byBzdHJpbmdzID0gZmVhdHVyZVN0cmluZy5zcGxpdCgnPScpOwogICAgIGlmIChz
dHJpbmdzLmlzRW1wdHkoKSB8fCBzdHJpbmdzLnNpemUoKSA+IDIpCkBAIC0xMjIsNyArMTIyLDcg
QEAgc3RhdGljIGJvb2wgcGFyc2VGZWF0dXJlKFN0cmluZyBmZWF0dXJlUwogICAgIGF1dG8gZmVh
dHVyZU5hbWUgPSBzdHJpbmdzWzBdOwogICAgIGJvb2wgZW5hYmxlZCA9IHN0cmluZ3Muc2l6ZSgp
ID09IDEgfHwgc3RyaW5nc1sxXSA9PSAidHJ1ZSI7CiAKLSAgICBmZWF0dXJlcy5zZXQoZmVhdHVy
ZU5hbWUsIGVuYWJsZWQpOworICAgIGZlYXR1cmVzLmluc2VydCh7IGZlYXR1cmVOYW1lLnV0Zjgo
KS5kYXRhKCksIGVuYWJsZWQgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvT3B0aW9ucy5oCShyZXZpc2lvbiAyNjc4ODUpCisrKyBUb29scy9XZWJLaXRUZXN0
UnVubmVyL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEsOCBAQAogI2luY2x1
ZGUgPHNldD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRl
IDx1bm9yZGVyZWRfbWFwPgogI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdI
YXNoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC01Nyw4ICs1Nyw4IEBA
IHN0cnVjdCBPcHRpb25zIHsKICNlbmRpZgogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBw
YXRoczsKICAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gYWxsb3dlZEhvc3RzOwotICAgIEhhc2hN
YXA8U3RyaW5nLCBib29sPiBpbnRlcm5hbEZlYXR1cmVzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBi
b29sPiBleHBlcmltZW50YWxGZWF0dXJlczsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpz
dHJpbmcsIGJvb2w+IGludGVybmFsRmVhdHVyZXM7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0
ZDo6c3RyaW5nLCBib29sPiBleHBlcmltZW50YWxGZWF0dXJlczsKIH07CiAKIGNsYXNzIE9wdGlv
biB7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgJKHJldmlz
aW9uIDI2Nzg4NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1v
dmVGcm9tV2luZG93KCk7CiAgICAgdm9pZCBhZGRUb1dpbmRvdygpOwogCi0gICAgYm9vbCB2aWV3
U3VwcG9ydHNPcHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKSBjb25zdCB7IHJldHVy
biAhb3B0aW9ucy5ydW5TaW5nbHkgJiYgbV9vcHRpb25zLmhhc1NhbWVJbml0aWFsaXphdGlvbk9w
dGlvbnMob3B0aW9ucyk7IH0KKyAgICBib29sIHZpZXdTdXBwb3J0c09wdGlvbnMoY29uc3QgVGVz
dE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0IHsgcmV0dXJuICFvcHRpb25zLnJ1blNpbmdseSgpICYm
IG1fb3B0aW9ucy5oYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25zKG9wdGlvbnMpOyB9CiAKICAg
ICBQbGF0Zm9ybUltYWdlIHdpbmRvd1NuYXBzaG90SW1hZ2UoKTsKICAgICBjb25zdCBUZXN0T3B0
aW9ucyYgb3B0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW9uczsgfQpJbmRleDogVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9TdGRGaWxlc3lzdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL1N0ZEZpbGVzeXN0ZW0uY3BwCShub25leGlzdGVudCkKKysrIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvU3RkRmlsZXN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyNjA0IEBACisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3RkRmlsZXN5c3Rl
bS5jcHAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworLy8KKy8vICAgICAgICAgICAg
ICAgICAgICAgVGhlIExMVk0gQ29tcGlsZXIgSW5mcmFzdHJ1Y3R1cmUKKy8vCisvLyBUaGlzIGZp
bGUgaXMgZHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGFuZCB0aGUgVW5pdmVyc2l0eSBvZiBJ
bGxpbm9pcyBPcGVuCisvLyBTb3VyY2UgTGljZW5zZXMuIFNlZSBMSUNFTlNFLlRYVCBmb3IgZGV0
YWlscy4KKy8vCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworCisvKiBJbXBvcnRzIGEgY29weSBv
ZiBmaWxlc3lzdGVtL2ZpbGVzeXN0ZW1fY29tbW9uLmgsIGZpbGVzeXN0ZW0vZGlyZWN0b3J5X2l0
ZXJhdG9yLmNwcCwKKyAgIGZpbGVzeXN0ZW0vaW50MTI4X2J1aWx0aW5zLmNwcCBhbmQgZmlsZXN5
c3RlbS9vcGVyYXRpb25zLmNwcCBmcm9tIHIzNDM4Mzggb2YgdGhlCisgICBsaWJjKysgcHJvamVj
dCBhbmQgaGFzIG1vZGlmaWVkIHRoZW0gdG8gd29yayBvdXRzaWRlIG9mIGEgYnVpbGQgb2YgbGli
YysrIGl0c2VsZi4gKi8KKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBQTEFURk9S
TShNQUMpCisKKyNpbmNsdWRlIDxBdmFpbGFiaWxpdHkuaD4KKworI2lmIF9fTUFDX09TX1hfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPCAxMDE1MDAKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlN0ZEZpbGVzeXN0ZW0uaCIKKworCisjaW5jbHVkZSA8X19jb25maWc+CisKKy8qIC0tIEJF
R0lOIGZpbGVzeXN0ZW0vZmlsZXN5c3RlbV9jb21tb24uaCAtLSAqLworCisjaW5jbHVkZSA8YXJy
YXk+CisjaW5jbHVkZSA8Y2hyb25vPgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8Y2xp
bWl0cz4KKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5j
bHVkZSA8c3lzL3N0YXR2ZnMuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPiAvLyBmb3IgOjp1dGlt
ZXMgYXMgdXNlZCBpbiBfX2xhc3Rfd3JpdGVfdGltZQorI2luY2x1ZGUgPGZjbnRsLmg+ICAgIC8q
IHZhbHVlcyBmb3IgZmNobW9kYXQgKi8KKworLyogI2luY2x1ZGUgIi4uL2luY2x1ZGUvYXBwbGVf
YXZhaWxhYmlsaXR5LmgiICovCisKKyNpZiAhZGVmaW5lZChfX0FQUExFX18pCisvLyBXZSBjYW4g
dXNlIHRoZSBwcmVzZW5jZSBvZiBVVElNRV9PTUlUIHRvIGRldGVjdCBwbGF0Zm9ybXMgdGhhdCBw
cm92aWRlCisvLyB1dGltZW5zYXQuCisjaWYgZGVmaW5lZChVVElNRV9PTUlUKQorI2RlZmluZSBf
TElCQ1BQX1VTRV9VVElNRU5TQVQKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fR05V
Q19fKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIEdDQyBkaWFnbm9zdGlj
IGlnbm9yZWQgIi1XdW51c2VkLWZ1bmN0aW9uIgorI2VuZGlmCisKK19MSUJDUFBfQkVHSU5fTkFN
RVNQQUNFX0ZJTEVTWVNURU0KKworbmFtZXNwYWNlIGRldGFpbCB7CituYW1lc3BhY2UgeworCitz
dGF0aWMgc3RyaW5nIGZvcm1hdF9zdHJpbmdfaW1wKGNvbnN0IGNoYXIqIG1zZywgLi4uKSB7Cisg
IC8vIHdlIG1pZ2h0IG5lZWQgYSBzZWNvbmQgc2hvdCBhdCB0aGlzLCBzbyBwcmUtZW1wdGl2bHkg
bWFrZSBhIGNvcHkKKyAgc3RydWN0IEd1YXJkVkFMaXN0IHsKKyAgICB2YV9saXN0JiB0YXJnZXQ7
CisgICAgYm9vbCBhY3RpdmUgPSB0cnVlOworICAgIEd1YXJkVkFMaXN0KHZhX2xpc3QmIHRhcmdl
dCkgOiB0YXJnZXQodGFyZ2V0KSwgYWN0aXZlKHRydWUpIHt9CisgICAgdm9pZCBjbGVhcigpIHsK
KyAgICAgIGlmIChhY3RpdmUpCisgICAgICAgIHZhX2VuZCh0YXJnZXQpOworICAgICAgYWN0aXZl
ID0gZmFsc2U7CisgICAgfQorICAgIH5HdWFyZFZBTGlzdCgpIHsKKyAgICAgIGlmIChhY3RpdmUp
CisgICAgICAgIHZhX2VuZCh0YXJnZXQpOworICAgIH0KKyAgfTsKKyAgdmFfbGlzdCBhcmdzOwor
ICB2YV9zdGFydChhcmdzLCBtc2cpOworICBHdWFyZFZBTGlzdCBhcmdzX2d1YXJkKGFyZ3MpOwor
CisgIHZhX2xpc3QgYXJnc19jcDsKKyAgdmFfY29weShhcmdzX2NwLCBhcmdzKTsKKyAgR3VhcmRW
QUxpc3QgYXJnc19jb3B5X2d1YXJkKGFyZ3NfY3ApOworCisgIGFycmF5PGNoYXIsIDI1Nj4gbG9j
YWxfYnVmZjsKKyAgc2l6ZV90IHNpemUgPSBsb2NhbF9idWZmLnNpemUoKTsKKworI2lmZGVmIF9f
Y2xhbmdfXworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlh
Z25vc3RpYyBpZ25vcmVkICItV2Zvcm1hdC1ub25saXRlcmFsIgorI2VuZGlmCisgIGF1dG8gcmV0
ID0gOjp2c25wcmludGYobG9jYWxfYnVmZi5kYXRhKCksIHNpemUsIG1zZywgYXJnc19jcCk7Cisj
aWZkZWYgX19jbGFuZ19fCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisjZW5kaWYKKwor
ICBhcmdzX2NvcHlfZ3VhcmQuY2xlYXIoKTsKKworICAvLyBoYW5kbGUgZW1wdHkgZXhwYW5zaW9u
CisgIGlmIChyZXQgPT0gMCkKKyAgICByZXR1cm4gc3RyaW5ne307CisgIGlmIChzdGF0aWNfY2Fz
dDxzaXplX3Q+KHJldCkgPCBzaXplKQorICAgIHJldHVybiBzdHJpbmcobG9jYWxfYnVmZi5kYXRh
KCkpOworCisgIC8vIHdlIGRpZCBub3QgcHJvdmlkZSBhIGxvbmcgZW5vdWdoIGJ1ZmZlciBvbiBv
dXIgZmlyc3QgYXR0ZW1wdC4KKyAgLy8gYWRkIDEgdG8gc2l6ZSB0byBhY2NvdW50IGZvciBudWxs
LWJ5dGUgaW4gc2l6ZSBjYXN0IHRvIHByZXZlbnQgb3ZlcmZsb3cKKyAgc2l6ZSA9IHN0YXRpY19j
YXN0PHNpemVfdD4ocmV0KSArIDE7CisgIGF1dG8gYnVmZl9wdHIgPSB1bmlxdWVfcHRyPGNoYXJb
XT4obmV3IGNoYXJbc2l6ZV0pOworCisjaWZkZWYgX19jbGFuZ19fCisjcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZm9ybWF0
LW5vbmxpdGVyYWwiCisjZW5kaWYKKyAgcmV0ID0gOjp2c25wcmludGYoYnVmZl9wdHIuZ2V0KCks
IHNpemUsIG1zZywgYXJncyk7CisjaWZkZWYgX19jbGFuZ19fCisjcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgcG9wCisjZW5kaWYKKworICByZXR1cm4gc3RyaW5nKGJ1ZmZfcHRyLmdldCgpKTsKK30K
KworY29uc3QgY2hhciogdW53cmFwKHN0cmluZyBjb25zdCYgcykgeyByZXR1cm4gcy5jX3N0cigp
OyB9Citjb25zdCBjaGFyKiB1bndyYXAocGF0aCBjb25zdCYgcCkgeyByZXR1cm4gcC5uYXRpdmUo
KS5jX3N0cigpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgQXJnPgorQXJnIGNvbnN0JiB1bndyYXAoQXJn
IGNvbnN0JiBhKSB7CisgIHN0YXRpY19hc3NlcnQoIWlzX2NsYXNzPEFyZz46OnZhbHVlLCAiY2Fu
bm90IHBhc3MgY2xhc3MgaGVyZSIpOworICByZXR1cm4gYTsKK30KKwordGVtcGxhdGUgPGNsYXNz
Li4uIEFyZ3M+CitzdHJpbmcgZm9ybWF0X3N0cmluZyhjb25zdCBjaGFyKiBmbXQsIEFyZ3MgY29u
c3QmLi4uIGFyZ3MpIHsKKyAgcmV0dXJuIGZvcm1hdF9zdHJpbmdfaW1wKGZtdCwgdW53cmFwKGFy
Z3MpLi4uKTsKK30KKworZXJyb3JfY29kZSBjYXB0dXJlX2Vycm5vKCkgeworICBfTElCQ1BQX0FT
U0VSVChlcnJubywgIkV4cGVjdGVkIGVycm5vIHRvIGJlIG5vbi16ZXJvIik7CisgIHJldHVybiBl
cnJvcl9jb2RlKGVycm5vLCBnZW5lcmljX2NhdGVnb3J5KCkpOworfQorCit0ZW1wbGF0ZSA8Y2xh
c3MgVD4KK1QgZXJyb3JfdmFsdWUoKTsKK3RlbXBsYXRlIDw+CitfTElCQ1BQX0NPTlNURVhQUl9B
RlRFUl9DWFgxMSB2b2lkIGVycm9yX3ZhbHVlPHZvaWQ+KCkge30KK3RlbXBsYXRlIDw+Citib29s
IGVycm9yX3ZhbHVlPGJvb2w+KCkgeworICByZXR1cm4gZmFsc2U7Cit9Cit0ZW1wbGF0ZSA8Pgor
dWludG1heF90IGVycm9yX3ZhbHVlPHVpbnRtYXhfdD4oKSB7CisgIHJldHVybiB1aW50bWF4X3Qo
LTEpOworfQordGVtcGxhdGUgPD4KK19MSUJDUFBfQ09OU1RFWFBSX0FGVEVSX0NYWDExIGZpbGVf
dGltZV90eXBlIGVycm9yX3ZhbHVlPGZpbGVfdGltZV90eXBlPigpIHsKKyAgcmV0dXJuIGZpbGVf
dGltZV90eXBlOjptaW4oKTsKK30KK3RlbXBsYXRlIDw+CitwYXRoIGVycm9yX3ZhbHVlPHBhdGg+
KCkgeworICByZXR1cm4ge307Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUPgorc3RydWN0IEVycm9y
SGFuZGxlciB7CisgIGNvbnN0IGNoYXIqIGZ1bmNfbmFtZTsKKyAgZXJyb3JfY29kZSogZWMgPSBu
dWxscHRyOworICBjb25zdCBwYXRoKiBwMSA9IG51bGxwdHI7CisgIGNvbnN0IHBhdGgqIHAyID0g
bnVsbHB0cjsKKworICBFcnJvckhhbmRsZXIoY29uc3QgY2hhciogZm5hbWUsIGVycm9yX2NvZGUq
IGVjLCBjb25zdCBwYXRoKiBwMSA9IG51bGxwdHIsCisgICAgICAgICAgICAgICBjb25zdCBwYXRo
KiBwMiA9IG51bGxwdHIpCisgICAgICA6IGZ1bmNfbmFtZShmbmFtZSksIGVjKGVjKSwgcDEocDEp
LCBwMihwMikgeworICAgIGlmIChlYykKKyAgICAgIGVjLT5jbGVhcigpOworICB9CisKKyAgVCBy
ZXBvcnQoY29uc3QgZXJyb3JfY29kZSYgbV9lYykgY29uc3QgeworICAgIGlmIChlYykgeworICAg
ICAgKmVjID0gbV9lYzsKKyAgICAgIHJldHVybiBlcnJvcl92YWx1ZTxUPigpOworICAgIH0KKyAg
ICBzdHJpbmcgd2hhdCA9IHN0cmluZygiaW4gIikgKyBmdW5jX25hbWU7CisgICAgc3dpdGNoIChi
b29sKHAxKSArIGJvb2wocDIpKSB7CisgICAgY2FzZSAwOgorICAgICAgX190aHJvd19maWxlc3lz
dGVtX2Vycm9yKHdoYXQsIG1fZWMpOworICAgIGNhc2UgMToKKyAgICAgIF9fdGhyb3dfZmlsZXN5
c3RlbV9lcnJvcih3aGF0LCAqcDEsIG1fZWMpOworICAgIGNhc2UgMjoKKyAgICAgIF9fdGhyb3df
ZmlsZXN5c3RlbV9lcnJvcih3aGF0LCAqcDEsICpwMiwgbV9lYyk7CisgICAgfQorICAgIF9MSUJD
UFBfVU5SRUFDSEFCTEUoKTsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPgorICBU
IHJlcG9ydChjb25zdCBlcnJvcl9jb2RlJiBtX2VjLCBjb25zdCBjaGFyKiBtc2csIEFyZ3MgY29u
c3QmLi4uIGFyZ3MpIGNvbnN0IHsKKyAgICBpZiAoZWMpIHsKKyAgICAgICplYyA9IG1fZWM7Cisg
ICAgICByZXR1cm4gZXJyb3JfdmFsdWU8VD4oKTsKKyAgICB9CisgICAgc3RyaW5nIHdoYXQgPQor
ICAgICAgICBzdHJpbmcoImluICIpICsgZnVuY19uYW1lICsgIjogIiArIGZvcm1hdF9zdHJpbmco
bXNnLCBhcmdzLi4uKTsKKyAgICBzd2l0Y2ggKGJvb2wocDEpICsgYm9vbChwMikpIHsKKyAgICBj
YXNlIDA6CisgICAgICBfX3Rocm93X2ZpbGVzeXN0ZW1fZXJyb3Iod2hhdCwgbV9lYyk7CisgICAg
Y2FzZSAxOgorICAgICAgX190aHJvd19maWxlc3lzdGVtX2Vycm9yKHdoYXQsICpwMSwgbV9lYyk7
CisgICAgY2FzZSAyOgorICAgICAgX190aHJvd19maWxlc3lzdGVtX2Vycm9yKHdoYXQsICpwMSwg
KnAyLCBtX2VjKTsKKyAgICB9CisgICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOworICB9CisKKyAg
VCByZXBvcnQoZXJyYyBjb25zdCYgZXJyKSBjb25zdCB7IHJldHVybiByZXBvcnQobWFrZV9lcnJv
cl9jb2RlKGVycikpOyB9CisKKyAgdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+CisgIFQgcmVwb3J0
KGVycmMgY29uc3QmIGVyciwgY29uc3QgY2hhciogbXNnLCBBcmdzIGNvbnN0Ji4uLiBhcmdzKSBj
b25zdCB7CisgICAgcmV0dXJuIHJlcG9ydChtYWtlX2Vycm9yX2NvZGUoZXJyKSwgbXNnLCBhcmdz
Li4uKTsKKyAgfQorCitwcml2YXRlOgorICBFcnJvckhhbmRsZXIoRXJyb3JIYW5kbGVyIGNvbnN0
JikgPSBkZWxldGU7CisgIEVycm9ySGFuZGxlciYgb3BlcmF0b3I9KEVycm9ySGFuZGxlciBjb25z
dCYpID0gZGVsZXRlOworfTsKKwordXNpbmcgY2hyb25vOjpkdXJhdGlvbjsKK3VzaW5nIGNocm9u
bzo6ZHVyYXRpb25fY2FzdDsKKwordXNpbmcgVGltZVNwZWMgPSBzdHJ1Y3QgOjp0aW1lc3BlYzsK
K3VzaW5nIFN0YXRUID0gc3RydWN0IDo6c3RhdDsKKwordGVtcGxhdGUgPGNsYXNzIEZpbGVUaW1l
VCwgY2xhc3MgVGltZVQsCisgICAgICAgICAgYm9vbCBJc0Zsb2F0ID0gaXNfZmxvYXRpbmdfcG9p
bnQ8dHlwZW5hbWUgRmlsZVRpbWVUOjpyZXA+Ojp2YWx1ZT4KK3N0cnVjdCB0aW1lX3V0aWxfYmFz
ZSB7CisgIHVzaW5nIHJlcCA9IHR5cGVuYW1lIEZpbGVUaW1lVDo6cmVwOworICB1c2luZyBmc19k
dXJhdGlvbiA9IHR5cGVuYW1lIEZpbGVUaW1lVDo6ZHVyYXRpb247CisgIHVzaW5nIGZzX3NlY29u
ZHMgPSBkdXJhdGlvbjxyZXA+OworICB1c2luZyBmc19uYW5vc2Vjb25kcyA9IGR1cmF0aW9uPHJl
cCwgbmFubz47CisgIHVzaW5nIGZzX21pY3Jvc2Vjb25kcyA9IGR1cmF0aW9uPHJlcCwgbWljcm8+
OworCisgIHN0YXRpYyBjb25zdGV4cHIgcmVwIG1heF9zZWNvbmRzID0KKyAgICAgIGR1cmF0aW9u
X2Nhc3Q8ZnNfc2Vjb25kcz4oRmlsZVRpbWVUOjpkdXJhdGlvbjo6bWF4KCkpLmNvdW50KCk7CisK
KyAgc3RhdGljIGNvbnN0ZXhwciByZXAgbWF4X25zZWMgPQorICAgICAgZHVyYXRpb25fY2FzdDxm
c19uYW5vc2Vjb25kcz4oRmlsZVRpbWVUOjpkdXJhdGlvbjo6bWF4KCkgLQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZnNfc2Vjb25kcyhtYXhfc2Vjb25kcykpCisgICAgICAg
ICAgLmNvdW50KCk7CisKKyAgc3RhdGljIGNvbnN0ZXhwciByZXAgbWluX3NlY29uZHMgPQorICAg
ICAgZHVyYXRpb25fY2FzdDxmc19zZWNvbmRzPihGaWxlVGltZVQ6OmR1cmF0aW9uOjptaW4oKSku
Y291bnQoKTsKKworICBzdGF0aWMgY29uc3RleHByIHJlcCBtaW5fbnNlY190aW1lc3BlYyA9Cisg
ICAgICBkdXJhdGlvbl9jYXN0PGZzX25hbm9zZWNvbmRzPigKKyAgICAgICAgICAoRmlsZVRpbWVU
OjpkdXJhdGlvbjo6bWluKCkgLSBmc19zZWNvbmRzKG1pbl9zZWNvbmRzKSkgKworICAgICAgICAg
IGZzX3NlY29uZHMoMSkpCisgICAgICAgICAgLmNvdW50KCk7CisKK3ByaXZhdGU6CisjaWYgX0xJ
QkNQUF9TVERfVkVSID4gMTEgJiYgIWRlZmluZWQoX0xJQkNQUF9IQVNfTk9fQ1hYMTRfQ09OU1RF
WFBSKQorICBzdGF0aWMgY29uc3RleHByIGZzX2R1cmF0aW9uIGdldF9taW5fbnNlY3MoKSB7Cisg
ICAgcmV0dXJuIGR1cmF0aW9uX2Nhc3Q8ZnNfZHVyYXRpb24+KAorICAgICAgICBmc19uYW5vc2Vj
b25kcyhtaW5fbnNlY190aW1lc3BlYykgLQorICAgICAgICBkdXJhdGlvbl9jYXN0PGZzX25hbm9z
ZWNvbmRzPihmc19zZWNvbmRzKDEpKSk7CisgIH0KKyAgLy8gU3RhdGljIGFzc2VydCB0aGF0IHRo
ZXNlIHZhbHVlcyBwcm9wZXJseSByb3VuZCB0cmlwLgorICBzdGF0aWNfYXNzZXJ0KGZzX3NlY29u
ZHMobWluX3NlY29uZHMpICsgZ2V0X21pbl9uc2VjcygpID09CisgICAgICAgICAgICAgICAgICAg
IEZpbGVUaW1lVDo6ZHVyYXRpb246Om1pbigpLAorICAgICAgICAgICAgICAgICJ2YWx1ZSBkb2Vz
bid0IHJvdW5kdHJpcCIpOworCisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBjaGVja19yYW5nZSgp
IHsKKyAgICAvLyBUaGlzIGtpbmRhIHN1Y2tzLCBidXQgaXQncyB3aGF0IGhhcHBlbnMgd2hlbiB3
ZSBkb24ndCBoYXZlIF9faW50MTI4X3QuCisgICAgaWYgKHNpemVvZihUaW1lVCkgPT0gc2l6ZW9m
KHJlcCkpIHsKKyAgICAgIHR5cGVkZWYgZHVyYXRpb248bG9uZyBsb25nLCByYXRpbzwzNjAwICog
MjQgKiAzNjU+ID4gWWVhcnM7CisgICAgICByZXR1cm4gZHVyYXRpb25fY2FzdDxZZWFycz4oZnNf
c2Vjb25kcyhtYXhfc2Vjb25kcykpID4gWWVhcnMoMjUwKSAmJgorICAgICAgICAgICAgIGR1cmF0
aW9uX2Nhc3Q8WWVhcnM+KGZzX3NlY29uZHMobWluX3NlY29uZHMpKSA8IFllYXJzKC0yNTApOwor
ICAgIH0KKyAgICByZXR1cm4gbWF4X3NlY29uZHMgPj0gbnVtZXJpY19saW1pdHM8VGltZVQ+Ojpt
YXgoKSAmJgorICAgICAgICAgICBtaW5fc2Vjb25kcyA8PSBudW1lcmljX2xpbWl0czxUaW1lVD46
Om1pbigpOworICB9CisgIHN0YXRpY19hc3NlcnQoY2hlY2tfcmFuZ2UoKSwgInRoZSByZXByZXNl
bnRhYmxlIHJhbmdlIGlzIHVuYWNjZXB0YWJsZSBzbWFsbCIpOworI2VuZGlmCit9OworCit0ZW1w
bGF0ZSA8Y2xhc3MgRmlsZVRpbWVULCBjbGFzcyBUaW1lVD4KK3N0cnVjdCB0aW1lX3V0aWxfYmFz
ZTxGaWxlVGltZVQsIFRpbWVULCB0cnVlPiB7CisgIHVzaW5nIHJlcCA9IHR5cGVuYW1lIEZpbGVU
aW1lVDo6cmVwOworICB1c2luZyBmc19kdXJhdGlvbiA9IHR5cGVuYW1lIEZpbGVUaW1lVDo6ZHVy
YXRpb247CisgIHVzaW5nIGZzX3NlY29uZHMgPSBkdXJhdGlvbjxyZXA+OworICB1c2luZyBmc19u
YW5vc2Vjb25kcyA9IGR1cmF0aW9uPHJlcCwgbmFubz47CisgIHVzaW5nIGZzX21pY3Jvc2Vjb25k
cyA9IGR1cmF0aW9uPHJlcCwgbWljcm8+OworCisgIHN0YXRpYyBjb25zdCByZXAgbWF4X3NlY29u
ZHM7CisgIHN0YXRpYyBjb25zdCByZXAgbWF4X25zZWM7CisgIHN0YXRpYyBjb25zdCByZXAgbWlu
X3NlY29uZHM7CisgIHN0YXRpYyBjb25zdCByZXAgbWluX25zZWNfdGltZXNwZWM7Cit9OworCit0
ZW1wbGF0ZSA8Y2xhc3MgRmlsZVRpbWVULCBjbGFzcyBUaW1lVD4KK2NvbnN0IHR5cGVuYW1lIEZp
bGVUaW1lVDo6cmVwCisgICAgdGltZV91dGlsX2Jhc2U8RmlsZVRpbWVULCBUaW1lVCwgdHJ1ZT46
Om1heF9zZWNvbmRzID0KKyAgICAgICAgZHVyYXRpb25fY2FzdDxmc19zZWNvbmRzPihGaWxlVGlt
ZVQ6OmR1cmF0aW9uOjptYXgoKSkuY291bnQoKTsKKwordGVtcGxhdGUgPGNsYXNzIEZpbGVUaW1l
VCwgY2xhc3MgVGltZVQ+Citjb25zdCB0eXBlbmFtZSBGaWxlVGltZVQ6OnJlcCB0aW1lX3V0aWxf
YmFzZTxGaWxlVGltZVQsIFRpbWVULCB0cnVlPjo6bWF4X25zZWMgPQorICAgIGR1cmF0aW9uX2Nh
c3Q8ZnNfbmFub3NlY29uZHM+KEZpbGVUaW1lVDo6ZHVyYXRpb246Om1heCgpIC0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmc19zZWNvbmRzKG1heF9zZWNvbmRzKSkKKyAgICAg
ICAgLmNvdW50KCk7CisKK3RlbXBsYXRlIDxjbGFzcyBGaWxlVGltZVQsIGNsYXNzIFRpbWVUPgor
Y29uc3QgdHlwZW5hbWUgRmlsZVRpbWVUOjpyZXAKKyAgICB0aW1lX3V0aWxfYmFzZTxGaWxlVGlt
ZVQsIFRpbWVULCB0cnVlPjo6bWluX3NlY29uZHMgPQorICAgICAgICBkdXJhdGlvbl9jYXN0PGZz
X3NlY29uZHM+KEZpbGVUaW1lVDo6ZHVyYXRpb246Om1pbigpKS5jb3VudCgpOworCit0ZW1wbGF0
ZSA8Y2xhc3MgRmlsZVRpbWVULCBjbGFzcyBUaW1lVD4KK2NvbnN0IHR5cGVuYW1lIEZpbGVUaW1l
VDo6cmVwCisgICAgdGltZV91dGlsX2Jhc2U8RmlsZVRpbWVULCBUaW1lVCwgdHJ1ZT46Om1pbl9u
c2VjX3RpbWVzcGVjID0KKyAgICAgICAgZHVyYXRpb25fY2FzdDxmc19uYW5vc2Vjb25kcz4oKEZp
bGVUaW1lVDo6ZHVyYXRpb246Om1pbigpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZzX3NlY29uZHMobWluX3NlY29uZHMpKSArCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZzX3NlY29uZHMoMSkpCisgICAgICAgICAgICAuY291bnQoKTsK
KwordGVtcGxhdGUgPGNsYXNzIEZpbGVUaW1lVCwgY2xhc3MgVGltZVQsIGNsYXNzIFRpbWVTcGVj
VD4KK3N0cnVjdCB0aW1lX3V0aWwgOiB0aW1lX3V0aWxfYmFzZTxGaWxlVGltZVQsIFRpbWVUPiB7
CisgIHVzaW5nIEJhc2UgPSB0aW1lX3V0aWxfYmFzZTxGaWxlVGltZVQsIFRpbWVUPjsKKyAgdXNp
bmcgQmFzZTo6bWF4X25zZWM7CisgIHVzaW5nIEJhc2U6Om1heF9zZWNvbmRzOworICB1c2luZyBC
YXNlOjptaW5fbnNlY190aW1lc3BlYzsKKyAgdXNpbmcgQmFzZTo6bWluX3NlY29uZHM7CisKKyAg
dXNpbmcgdHlwZW5hbWUgQmFzZTo6ZnNfZHVyYXRpb247CisgIHVzaW5nIHR5cGVuYW1lIEJhc2U6
OmZzX21pY3Jvc2Vjb25kczsKKyAgdXNpbmcgdHlwZW5hbWUgQmFzZTo6ZnNfbmFub3NlY29uZHM7
CisgIHVzaW5nIHR5cGVuYW1lIEJhc2U6OmZzX3NlY29uZHM7CisKK3B1YmxpYzoKKyAgdGVtcGxh
dGUgPGNsYXNzIENUeXBlLCBjbGFzcyBDaHJvbm9UeXBlPgorICBzdGF0aWMgX0xJQkNQUF9DT05T
VEVYUFJfQUZURVJfQ1hYMTEgYm9vbCBjaGVja2VkX3NldChDVHlwZSogb3V0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaHJvbm9UeXBl
IHRpbWUpIHsKKyAgICB1c2luZyBMaW0gPSBudW1lcmljX2xpbWl0czxDVHlwZT47CisgICAgaWYg
KHRpbWUgPiBMaW06Om1heCgpIHx8IHRpbWUgPCBMaW06Om1pbigpKQorICAgICAgcmV0dXJuIGZh
bHNlOworICAgICpvdXQgPSBzdGF0aWNfY2FzdDxDVHlwZT4odGltZSk7CisgICAgcmV0dXJuIHRy
dWU7CisgIH0KKworICBzdGF0aWMgX0xJQkNQUF9DT05TVEVYUFJfQUZURVJfQ1hYMTEgYm9vbCBp
c19yZXByZXNlbnRhYmxlKFRpbWVTcGVjVCB0bSkgeworICAgIGlmICh0bS50dl9zZWMgPj0gMCkg
eworICAgICAgcmV0dXJuIHRtLnR2X3NlYyA8IG1heF9zZWNvbmRzIHx8CisgICAgICAgICAgICAg
KHRtLnR2X3NlYyA9PSBtYXhfc2Vjb25kcyAmJiB0bS50dl9uc2VjIDw9IG1heF9uc2VjKTsKKyAg
ICB9IGVsc2UgaWYgKHRtLnR2X3NlYyA9PSAobWluX3NlY29uZHMgLSAxKSkgeworICAgICAgcmV0
dXJuIHRtLnR2X25zZWMgPj0gbWluX25zZWNfdGltZXNwZWM7CisgICAgfSBlbHNlIHsKKyAgICAg
IHJldHVybiB0bS50dl9zZWMgPj0gbWluX3NlY29uZHM7CisgICAgfQorICB9CisKKyAgc3RhdGlj
IF9MSUJDUFBfQ09OU1RFWFBSX0FGVEVSX0NYWDExIGJvb2wgaXNfcmVwcmVzZW50YWJsZShGaWxl
VGltZVQgdG0pIHsKKyAgICBhdXRvIHNlY3MgPSBkdXJhdGlvbl9jYXN0PGZzX3NlY29uZHM+KHRt
LnRpbWVfc2luY2VfZXBvY2goKSk7CisgICAgYXV0byBuc2VjcyA9IGR1cmF0aW9uX2Nhc3Q8ZnNf
bmFub3NlY29uZHM+KHRtLnRpbWVfc2luY2VfZXBvY2goKSAtIHNlY3MpOworICAgIGlmIChuc2Vj
cy5jb3VudCgpIDwgMCkgeworICAgICAgc2VjcyA9IHNlY3MgKyBmc19zZWNvbmRzKDEpOworICAg
ICAgbnNlY3MgPSBuc2VjcyArIGZzX3NlY29uZHMoMSk7CisgICAgfQorICAgIHVzaW5nIFRMaW0g
PSBudW1lcmljX2xpbWl0czxUaW1lVD47CisgICAgaWYgKHNlY3MuY291bnQoKSA+PSAwKQorICAg
ICAgcmV0dXJuIHNlY3MuY291bnQoKSA8PSBUTGltOjptYXgoKTsKKyAgICByZXR1cm4gc2Vjcy5j
b3VudCgpID49IFRMaW06Om1pbigpOworICB9CisKKyAgc3RhdGljIF9MSUJDUFBfQ09OU1RFWFBS
X0FGVEVSX0NYWDExIEZpbGVUaW1lVAorICBjb252ZXJ0X2Zyb21fdGltZXNwZWMoVGltZVNwZWNU
IHRtKSB7CisgICAgaWYgKHRtLnR2X3NlYyA+PSAwIHx8IHRtLnR2X25zZWMgPT0gMCkgeworICAg
ICAgcmV0dXJuIEZpbGVUaW1lVChmc19zZWNvbmRzKHRtLnR2X3NlYykgKworICAgICAgICAgICAg
ICAgICAgICAgICBkdXJhdGlvbl9jYXN0PGZzX2R1cmF0aW9uPihmc19uYW5vc2Vjb25kcyh0bS50
dl9uc2VjKSkpOworICAgIH0gZWxzZSB7IC8vIHRtLnR2X3NlYyA8IDAKKyAgICAgIGF1dG8gYWRq
X3N1YnNlYyA9IGR1cmF0aW9uX2Nhc3Q8ZnNfZHVyYXRpb24+KGZzX3NlY29uZHMoMSkgLQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnNfbmFub3Nl
Y29uZHModG0udHZfbnNlYykpOworICAgICAgYXV0byBEdXIgPSBmc19zZWNvbmRzKHRtLnR2X3Nl
YyArIDEpIC0gYWRqX3N1YnNlYzsKKyAgICAgIHJldHVybiBGaWxlVGltZVQoRHVyKTsKKyAgICB9
CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgU3ViU2VjVD4KKyAgc3RhdGljIF9MSUJDUFBfQ09O
U1RFWFBSX0FGVEVSX0NYWDExIGJvb2wKKyAgc2V0X3RpbWVzX2NoZWNrZWQoVGltZVQqIHNlY19v
dXQsIFN1YlNlY1QqIHN1YnNlY19vdXQsIEZpbGVUaW1lVCB0cCkgeworICAgIGF1dG8gZHVyID0g
dHAudGltZV9zaW5jZV9lcG9jaCgpOworICAgIGF1dG8gc2VjX2R1ciA9IGR1cmF0aW9uX2Nhc3Q8
ZnNfc2Vjb25kcz4oZHVyKTsKKyAgICBhdXRvIHN1YnNlY19kdXIgPSBkdXJhdGlvbl9jYXN0PGZz
X25hbm9zZWNvbmRzPihkdXIgLSBzZWNfZHVyKTsKKyAgICAvLyBUaGUgdHZfbnNlYyBhbmQgdHZf
dXNlYyBmaWVsZHMgbXVzdCBub3QgYmUgbmVnYXRpdmUgc28gYWRqdXN0IGFjY29yZGluZ2x5Cisg
ICAgaWYgKHN1YnNlY19kdXIuY291bnQoKSA8IDApIHsKKyAgICAgIGlmIChzZWNfZHVyLmNvdW50
KCkgPiBtaW5fc2Vjb25kcykgeworICAgICAgICBzZWNfZHVyID0gc2VjX2R1ciAtIGZzX3NlY29u
ZHMoMSk7CisgICAgICAgIHN1YnNlY19kdXIgPSBzdWJzZWNfZHVyICsgZnNfc2Vjb25kcygxKTsK
KyAgICAgIH0gZWxzZSB7CisgICAgICAgIHN1YnNlY19kdXIgPSBmc19uYW5vc2Vjb25kczo6emVy
bygpOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gY2hlY2tlZF9zZXQoc2VjX291dCwgc2Vj
X2R1ci5jb3VudCgpKSAmJgorICAgICAgICAgICBjaGVja2VkX3NldChzdWJzZWNfb3V0LCBzdWJz
ZWNfZHVyLmNvdW50KCkpOworICB9CisgIHN0YXRpYyBfTElCQ1BQX0NPTlNURVhQUl9BRlRFUl9D
WFgxMSBib29sIGNvbnZlcnRfdG9fdGltZXNwZWMoVGltZVNwZWNUJiBkZXN0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZp
bGVUaW1lVCB0cCkgeworICAgIGlmICghaXNfcmVwcmVzZW50YWJsZSh0cCkpCisgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIHNldF90aW1lc19jaGVja2VkKCZkZXN0LnR2X3NlYywgJmRl
c3QudHZfbnNlYywgdHApOworICB9Cit9OworCit1c2luZyBmc190aW1lID0gdGltZV91dGlsPGZp
bGVfdGltZV90eXBlLCB0aW1lX3QsIFRpbWVTcGVjPjsKKworI2lmIGRlZmluZWQoX19BUFBMRV9f
KQorVGltZVNwZWMgZXh0cmFjdF9tdGltZShTdGF0VCBjb25zdCYgc3QpIHsgcmV0dXJuIHN0LnN0
X210aW1lc3BlYzsgfQorVGltZVNwZWMgZXh0cmFjdF9hdGltZShTdGF0VCBjb25zdCYgc3QpIHsg
cmV0dXJuIHN0LnN0X2F0aW1lc3BlYzsgfQorI2Vsc2UKK1RpbWVTcGVjIGV4dHJhY3RfbXRpbWUo
U3RhdFQgY29uc3QmIHN0KSB7IHJldHVybiBzdC5zdF9tdGltOyB9CitUaW1lU3BlYyBleHRyYWN0
X2F0aW1lKFN0YXRUIGNvbnN0JiBzdCkgeyByZXR1cm4gc3Quc3RfYXRpbTsgfQorI2VuZGlmCisK
Ky8vIGFsbG93IHRoZSB1dGltZXMgaW1wbGVtZW50YXRpb24gdG8gY29tcGlsZSBldmVuIGl0IHdl
J3JlIG5vdCBnb2luZworLy8gdG8gdXNlIGl0LgorCitib29sIHBvc2l4X3V0aW1lcyhjb25zdCBw
YXRoJiBwLCBzdGQ6OmFycmF5PFRpbWVTcGVjLCAyPiBjb25zdCYgVFMsCisgICAgICAgICAgICAg
ICAgICBlcnJvcl9jb2RlJiBlYykgeworICB1c2luZyBuYW1lc3BhY2UgY2hyb25vOworICBhdXRv
IENvbnZlcnQgPSBbXShsb25nIG5zZWMpIHsKKyAgICB1c2luZyBpbnRfdHlwZSA9IGRlY2x0eXBl
KHN0ZDo6ZGVjbHZhbDwgOjp0aW1ldmFsPigpLnR2X3VzZWMpOworICAgIGF1dG8gZHVyID0gZHVy
YXRpb25fY2FzdDxtaWNyb3NlY29uZHM+KG5hbm9zZWNvbmRzKG5zZWMpKS5jb3VudCgpOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oZHVyKTsKKyAgfTsKKyAgc3RydWN0IDo6dGlt
ZXZhbCBDb252ZXJ0ZWRUU1syXSA9IHt7VFNbMF0udHZfc2VjLCBDb252ZXJ0KFRTWzBdLnR2X25z
ZWMpfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7VFNbMV0udHZfc2Vj
LCBDb252ZXJ0KFRTWzFdLnR2X25zZWMpfX07CisgIGlmICg6OnV0aW1lcyhwLmNfc3RyKCksIENv
bnZlcnRlZFRTKSA9PSAtMSkgeworICAgIGVjID0gY2FwdHVyZV9lcnJubygpOworICAgIHJldHVy
biB0cnVlOworICB9CisgIHJldHVybiBmYWxzZTsKK30KKworI2lmIGRlZmluZWQoX0xJQkNQUF9V
U0VfVVRJTUVOU0FUKQorYm9vbCBwb3NpeF91dGltZW5zYXQoY29uc3QgcGF0aCYgcCwgc3RkOjph
cnJheTxUaW1lU3BlYywgMj4gY29uc3QmIFRTLAorICAgICAgICAgICAgICAgICAgICAgZXJyb3Jf
Y29kZSYgZWMpIHsKKyAgaWYgKDo6dXRpbWVuc2F0KEFUX0ZEQ1dELCBwLmNfc3RyKCksIFRTLmRh
dGEoKSwgMCkgPT0gLTEpIHsKKyAgICBlYyA9IGNhcHR1cmVfZXJybm8oKTsKKyAgICByZXR1cm4g
dHJ1ZTsKKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKworYm9vbCBzZXRfZmlsZV90
aW1lcyhjb25zdCBwYXRoJiBwLCBzdGQ6OmFycmF5PFRpbWVTcGVjLCAyPiBjb25zdCYgVFMsCisg
ICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKSB7CisjaWYgIWRlZmluZWQoX0xJQkNQ
UF9VU0VfVVRJTUVOU0FUKQorICByZXR1cm4gcG9zaXhfdXRpbWVzKHAsIFRTLCBlYyk7CisjZWxz
ZQorICByZXR1cm4gcG9zaXhfdXRpbWVuc2F0KHAsIFRTLCBlYyk7CisjZW5kaWYKK30KKworfSAv
LyBuYW1lc3BhY2UKK30gLy8gZW5kIG5hbWVzcGFjZSBkZXRhaWwKKworX0xJQkNQUF9FTkRfTkFN
RVNQQUNFX0ZJTEVTWVNURU0KKworLyogLS0gRU5EIGZpbGVzeXN0ZW0vZmlsZXN5c3RlbV9jb21t
b24uaCAtLSAqLworCisvKiAtLSBCRUdJTiBmaWxlc3lzdGVtL2RpcmVjdG9yeV9pdGVyYXRvci5j
cHAgLS0gKi8KKworI2lmIGRlZmluZWQoX0xJQkNQUF9XSU4zMkFQSSkKKyNkZWZpbmUgV0lOMzJf
TEVBTl9BTkRfTUVBTgorI2luY2x1ZGUgPFdpbmRvd3MuaD4KKyNlbHNlCisjaW5jbHVkZSA8ZGly
ZW50Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxlcnJuby5oPgorCisvKiAjaW5jbHVkZSAiZmlsZXN5
c3RlbV9jb21tb24uaCIgKi8KKworX0xJQkNQUF9CRUdJTl9OQU1FU1BBQ0VfRklMRVNZU1RFTQor
CituYW1lc3BhY2UgZGV0YWlsIHsKK25hbWVzcGFjZSB7CisKKyNpZiAhZGVmaW5lZChfTElCQ1BQ
X1dJTjMyQVBJKQordGVtcGxhdGUgPGNsYXNzIERpckVudFQsIGNsYXNzID0gZGVjbHR5cGUoRGly
RW50VDo6ZF90eXBlKT4KK3N0YXRpYyBmaWxlX3R5cGUgZ2V0X2ZpbGVfdHlwZShEaXJFbnRUKiBl
bnQsIGludCkgeworICBzd2l0Y2ggKGVudC0+ZF90eXBlKSB7CisgIGNhc2UgRFRfQkxLOgorICAg
IHJldHVybiBmaWxlX3R5cGU6OmJsb2NrOworICBjYXNlIERUX0NIUjoKKyAgICByZXR1cm4gZmls
ZV90eXBlOjpjaGFyYWN0ZXI7CisgIGNhc2UgRFRfRElSOgorICAgIHJldHVybiBmaWxlX3R5cGU6
OmRpcmVjdG9yeTsKKyAgY2FzZSBEVF9GSUZPOgorICAgIHJldHVybiBmaWxlX3R5cGU6OmZpZm87
CisgIGNhc2UgRFRfTE5LOgorICAgIHJldHVybiBmaWxlX3R5cGU6OnN5bWxpbms7CisgIGNhc2Ug
RFRfUkVHOgorICAgIHJldHVybiBmaWxlX3R5cGU6OnJlZ3VsYXI7CisgIGNhc2UgRFRfU09DSzoK
KyAgICByZXR1cm4gZmlsZV90eXBlOjpzb2NrZXQ7CisgIC8vIFVubGlrZSBpbiBsc3RhdCwgaGl0
dGluZyAidW5rbm93biIgaGVyZSBzaW1wbHkgbWVhbnMgdGhhdCB0aGUgdW5kZXJseWluZworICAv
LyBmaWxlc3lzdGVtIGRvZXNuJ3Qgc3VwcG9ydCBkX3R5cGUuIFJlcG9ydCBpcyBhcyAnbm9uZScg
c28gd2UgY29ycmVjdGx5CisgIC8vIHNldCB0aGUgY2FjaGUgdG8gZW1wdHkuCisgIGNhc2UgRFRf
VU5LTk9XTjoKKyAgICBicmVhazsKKyAgfQorICByZXR1cm4gZmlsZV90eXBlOjpub25lOworfQor
Cit0ZW1wbGF0ZSA8Y2xhc3MgRGlyRW50VD4KK3N0YXRpYyBmaWxlX3R5cGUgZ2V0X2ZpbGVfdHlw
ZShEaXJFbnRUKiBlbnQsIGxvbmcpIHsKKyAgcmV0dXJuIGZpbGVfdHlwZTo6bm9uZTsKK30KKwor
c3RhdGljIHBhaXI8c3RyaW5nX3ZpZXcsIGZpbGVfdHlwZT4gcG9zaXhfcmVhZGRpcihESVIqIGRp
cl9zdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVycm9yX2NvZGUmIGVjKSB7CisgIHN0cnVjdCBkaXJlbnQqIGRpcl9lbnRyeV9wdHIgPSBu
dWxscHRyOworICBlcnJubyA9IDA7IC8vIHplcm8gZXJybm8gaW4gb3JkZXIgdG8gZGV0ZWN0IGVy
cm9ycworICBlYy5jbGVhcigpOworICBpZiAoKGRpcl9lbnRyeV9wdHIgPSA6OnJlYWRkaXIoZGly
X3N0cmVhbSkpID09IG51bGxwdHIpIHsKKyAgICBpZiAoZXJybm8pCisgICAgICBlYyA9IGNhcHR1
cmVfZXJybm8oKTsKKyAgICByZXR1cm4ge307CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIHtkaXJf
ZW50cnlfcHRyLT5kX25hbWUsIGdldF9maWxlX3R5cGUoZGlyX2VudHJ5X3B0ciwgMCl9OworICB9
Cit9CisjZWxzZQorCitzdGF0aWMgZmlsZV90eXBlIGdldF9maWxlX3R5cGUoY29uc3QgV0lOMzJf
RklORF9EQVRBJiBkYXRhKSB7CisgIC8vYXV0byBhdHRycyA9IGRhdGEuZHdGaWxlQXR0cmlidXRl
czsKKyAgLy8gRklYTUUoRXJpY1dGKQorICByZXR1cm4gZmlsZV90eXBlOjp1bmtub3duOworfQor
c3RhdGljIHVpbnRtYXhfdCBnZXRfZmlsZV9zaXplKGNvbnN0IFdJTjMyX0ZJTkRfREFUQSYgZGF0
YSkgeworICByZXR1cm4gKGRhdGEubkZpbGVTaXplSGlnaHQgKiAoTUFYRFdPUkQgKyAxKSkgKyBk
YXRhLm5GaWxlU2l6ZUxvdzsKK30KK3N0YXRpYyBmaWxlX3RpbWVfdHlwZSBnZXRfd3JpdGVfdGlt
ZShjb25zdCBXSU4zMl9GSU5EX0RBVEEmIGRhdGEpIHsKKyAgVUxBUkdFX0lOVEVHRVIgdG1wOwor
ICBGSUxFVElNRSYgdGltZSA9IGRhdGEuZnRMYXN0V3JpdGVUaW1lOworICB0bXAudS5Mb3dQYXJ0
ID0gdGltZS5kd0xvd0RhdGVUaW1lOworICB0bXAudS5IaWdoUGFydCA9IHRpbWUuZHdIaWdoRGF0
ZVRpbWU7CisgIHJldHVybiBmaWxlX3RpbWVfdHlwZShmaWxlX3RpbWVfdHlwZTo6ZHVyYXRpb24o
dGltZS5RdWFkUGFydCkpOworfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UKK30gLy8gbmFt
ZXNwYWNlIGRldGFpbAorCit1c2luZyBkZXRhaWw6OkVycm9ySGFuZGxlcjsKKworI2lmIGRlZmlu
ZWQoX0xJQkNQUF9XSU4zMkFQSSkKK2NsYXNzIF9fZGlyX3N0cmVhbSB7CitwdWJsaWM6CisgIF9f
ZGlyX3N0cmVhbSgpID0gZGVsZXRlOworICBfX2Rpcl9zdHJlYW0mIG9wZXJhdG9yPShjb25zdCBf
X2Rpcl9zdHJlYW0mKSA9IGRlbGV0ZTsKKworICBfX2Rpcl9zdHJlYW0oX19kaXJfc3RyZWFtJiYg
X19kcykgbm9leGNlcHQgOiBfX3N0cmVhbV8oX19kcy5fX3N0cmVhbV8pLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jvb3RfKG1vdmUoX19kcy5fX3Jv
b3RfKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
ZW50cnlfKG1vdmUoX19kcy5fX2VudHJ5XykpIHsKKyAgICBfX2RzLl9fc3RyZWFtXyA9IElOVkFM
SURfSEFORExFX1ZBTFVFOworICB9CisKKyAgX19kaXJfc3RyZWFtKGNvbnN0IHBhdGgmIHJvb3Qs
IGRpcmVjdG9yeV9vcHRpb25zIG9wdHMsIGVycm9yX2NvZGUmIGVjKQorICAgICAgOiBfX3N0cmVh
bV8oSU5WQUxJRF9IQU5ETEVfVkFMVUUpLCBfX3Jvb3RfKHJvb3QpIHsKKyAgICBfX3N0cmVhbV8g
PSA6OkZpbmRGaXJzdEZpbGVFeChyb290LmNfc3RyKCksICZfX2RhdGFfKTsKKyAgICBpZiAoX19z
dHJlYW1fID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisgICAgICBlYyA9IGVycm9yX2NvZGUo
OjpHZXRMYXN0RXJyb3IoKSwgZ2VuZXJpY19jYXRlZ29yeSgpKTsKKyAgICAgIGNvbnN0IGJvb2wg
aWdub3JlX3Blcm1pc3Npb25fZGVuaWVkID0KKyAgICAgICAgICBib29sKG9wdHMgJiBkaXJlY3Rv
cnlfb3B0aW9uczo6c2tpcF9wZXJtaXNzaW9uX2RlbmllZCk7CisgICAgICBpZiAoaWdub3JlX3Bl
cm1pc3Npb25fZGVuaWVkICYmIGVjLnZhbHVlKCkgPT0gRVJST1JfQUNDRVNTX0RFTklFRCkKKyAg
ICAgICAgZWMuY2xlYXIoKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIH0KKworICB+X19kaXJf
c3RyZWFtKCkgbm9leGNlcHQgeworICAgIGlmIChfX3N0cmVhbV8gPT0gSU5WQUxJRF9IQU5ETEVf
VkFMVUUpCisgICAgICByZXR1cm47CisgICAgY2xvc2UoKTsKKyAgfQorCisgIGJvb2wgZ29vZCgp
IGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIF9fc3RyZWFtXyAhPSBJTlZBTElEX0hBTkRMRV9WQUxV
RTsgfQorCisgIGJvb2wgYWR2YW5jZShlcnJvcl9jb2RlJiBlYykgeworICAgIHdoaWxlICg6OkZp
bmROZXh0RmlsZShfX3N0cmVhbV8sICZfX2RhdGFfKSkgeworICAgICAgaWYgKCFzdHJjbXAoX19k
YXRhXy5jRmlsZU5hbWUsICIuIikgfHwgc3RyY21wKF9fZGF0YV8uY0ZpbGVOYW1lLCAiLi4iKSkK
KyAgICAgICAgY29udGludWU7CisgICAgICAvLyBGSVhNRTogQ2FjaGUgbW9yZSBvZiB0aGlzCisg
ICAgICAvL2RpcmVjdG9yeV9lbnRyeTo6X19jYWNoZWRfZGF0YSBjZGF0YTsKKyAgICAgIC8vY2Rh
dGEuX190eXBlXyA9IGdldF9maWxlX3R5cGUoX19kYXRhXyk7CisgICAgICAvL2NkYXRhLl9fc2l6
ZV8gPSBnZXRfZmlsZV9zaXplKF9fZGF0YV8pOworICAgICAgLy9jZGF0YS5fX3dyaXRlX3RpbWVf
ID0gZ2V0X3dyaXRlX3RpbWUoX19kYXRhXyk7CisgICAgICBfX2VudHJ5Xy5fX2Fzc2lnbl9pdGVy
X2VudHJ5KAorICAgICAgICAgIF9fcm9vdF8gLyBfX2RhdGFfLmNGaWxlTmFtZSwKKyAgICAgICAg
ICBkaXJlY3RvcnlfZW50cnk6Ol9fY3JlYXRlX2l0ZXJfcmVzdWx0KGdldF9maWxlX3R5cGUoX19k
YXRhKSkpOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGVjID0gZXJyb3JfY29kZSg6
OkdldExhc3RFcnJvcigpLCBnZW5lcmljX2NhdGVnb3J5KCkpOworICAgIGNsb3NlKCk7CisgICAg
cmV0dXJuIGZhbHNlOworICB9CisKK3ByaXZhdGU6CisgIGVycm9yX2NvZGUgY2xvc2UoKSBub2V4
Y2VwdCB7CisgICAgZXJyb3JfY29kZSBlYzsKKyAgICBpZiAoITo6RmluZENsb3NlKF9fc3RyZWFt
XykpCisgICAgICBlYyA9IGVycm9yX2NvZGUoOjpHZXRMYXN0RXJyb3IoKSwgZ2VuZXJpY19jYXRl
Z29yeSgpKTsKKyAgICBfX3N0cmVhbV8gPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKyAgICByZXR1
cm4gZWM7CisgIH0KKworICBIQU5ETEUgX19zdHJlYW1fe0lOVkFMSURfSEFORExFX1ZBTFVFfTsK
KyAgV0lOMzJfRklORF9EQVRBIF9fZGF0YV87CisKK3B1YmxpYzoKKyAgcGF0aCBfX3Jvb3RfOwor
ICBkaXJlY3RvcnlfZW50cnkgX19lbnRyeV87Cit9OworI2Vsc2UKK2NsYXNzIF9fZGlyX3N0cmVh
bSB7CitwdWJsaWM6CisgIF9fZGlyX3N0cmVhbSgpID0gZGVsZXRlOworICBfX2Rpcl9zdHJlYW0m
IG9wZXJhdG9yPShjb25zdCBfX2Rpcl9zdHJlYW0mKSA9IGRlbGV0ZTsKKworICBfX2Rpcl9zdHJl
YW0oX19kaXJfc3RyZWFtJiYgb3RoZXIpIG5vZXhjZXB0IDogX19zdHJlYW1fKG90aGVyLl9fc3Ry
ZWFtXyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X3Jvb3RfKG1vdmUob3RoZXIuX19yb290XykpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19lbnRyeV8obW92ZShvdGhlci5fX2VudHJ5XykpIHsKKyAg
ICBvdGhlci5fX3N0cmVhbV8gPSBudWxscHRyOworICB9CisKKyAgX19kaXJfc3RyZWFtKGNvbnN0
IHBhdGgmIHJvb3QsIGRpcmVjdG9yeV9vcHRpb25zIG9wdHMsIGVycm9yX2NvZGUmIGVjKQorICAg
ICAgOiBfX3N0cmVhbV8obnVsbHB0ciksIF9fcm9vdF8ocm9vdCkgeworICAgIGlmICgoX19zdHJl
YW1fID0gOjpvcGVuZGlyKHJvb3QuY19zdHIoKSkpID09IG51bGxwdHIpIHsKKyAgICAgIGVjID0g
ZGV0YWlsOjpjYXB0dXJlX2Vycm5vKCk7CisgICAgICBjb25zdCBib29sIGFsbG93X2VhY2VzcyA9
CisgICAgICAgICAgYm9vbChvcHRzICYgZGlyZWN0b3J5X29wdGlvbnM6OnNraXBfcGVybWlzc2lv
bl9kZW5pZWQpOworICAgICAgaWYgKGFsbG93X2VhY2VzcyAmJiBlYy52YWx1ZSgpID09IEVBQ0NF
UykKKyAgICAgICAgZWMuY2xlYXIoKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgYWR2YW5j
ZShlYyk7CisgIH0KKworICB+X19kaXJfc3RyZWFtKCkgbm9leGNlcHQgeworICAgIGlmIChfX3N0
cmVhbV8pCisgICAgICBjbG9zZSgpOworICB9CisKKyAgYm9vbCBnb29kKCkgY29uc3Qgbm9leGNl
cHQgeyByZXR1cm4gX19zdHJlYW1fICE9IG51bGxwdHI7IH0KKworICBib29sIGFkdmFuY2UoZXJy
b3JfY29kZSYgZWMpIHsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgYXV0byBzdHJfdHlwZV9w
YWlyID0gZGV0YWlsOjpwb3NpeF9yZWFkZGlyKF9fc3RyZWFtXywgZWMpOworICAgICAgYXV0byYg
c3RyID0gc3RyX3R5cGVfcGFpci5maXJzdDsKKyAgICAgIGlmIChzdHIgPT0gIi4iIHx8IHN0ciA9
PSAiLi4iKSB7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfSBlbHNlIGlmIChlYyB8fCBzdHIu
ZW1wdHkoKSkgeworICAgICAgICBjbG9zZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICB9IGVsc2UgeworICAgICAgICBfX2VudHJ5Xy5fX2Fzc2lnbl9pdGVyX2VudHJ5KAorICAgICAg
ICAgICAgX19yb290XyAvIHN0ciwKKyAgICAgICAgICAgIGRpcmVjdG9yeV9lbnRyeTo6X19jcmVh
dGVfaXRlcl9yZXN1bHQoc3RyX3R5cGVfcGFpci5zZWNvbmQpKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICB9CisgICAgfQorICB9CisKK3ByaXZhdGU6CisgIGVycm9yX2NvZGUgY2xvc2Uo
KSBub2V4Y2VwdCB7CisgICAgZXJyb3JfY29kZSBtX2VjOworICAgIGlmICg6OmNsb3NlZGlyKF9f
c3RyZWFtXykgPT0gLTEpCisgICAgICBtX2VjID0gZGV0YWlsOjpjYXB0dXJlX2Vycm5vKCk7Cisg
ICAgX19zdHJlYW1fID0gbnVsbHB0cjsKKyAgICByZXR1cm4gbV9lYzsKKyAgfQorCisgIERJUiog
X19zdHJlYW1fe251bGxwdHJ9OworCitwdWJsaWM6CisgIHBhdGggX19yb290XzsKKyAgZGlyZWN0
b3J5X2VudHJ5IF9fZW50cnlfOworfTsKKyNlbmRpZgorCisvLyBkaXJlY3RvcnlfaXRlcmF0b3IK
KworZGlyZWN0b3J5X2l0ZXJhdG9yOjpkaXJlY3RvcnlfaXRlcmF0b3IoY29uc3QgcGF0aCYgcCwg
ZXJyb3JfY29kZSogZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
aXJlY3Rvcnlfb3B0aW9ucyBvcHRzKSB7CisgIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoImRpcmVj
dG9yeV9pdGVyYXRvcjo6ZGlyZWN0b3J5X2l0ZXJhdG9yKC4uLikiLCBlYywgJnApOworCisgIGVy
cm9yX2NvZGUgbV9lYzsKKyAgX19pbXBfID0gbWFrZV9zaGFyZWQ8X19kaXJfc3RyZWFtPihwLCBv
cHRzLCBtX2VjKTsKKyAgaWYgKGVjKQorICAgICplYyA9IG1fZWM7CisgIGlmICghX19pbXBfLT5n
b29kKCkpIHsKKyAgICBfX2ltcF8ucmVzZXQoKTsKKyAgICBpZiAobV9lYykKKyAgICAgIGVyci5y
ZXBvcnQobV9lYyk7CisgIH0KK30KKworZGlyZWN0b3J5X2l0ZXJhdG9yJiBkaXJlY3RvcnlfaXRl
cmF0b3I6Ol9faW5jcmVtZW50KGVycm9yX2NvZGUqIGVjKSB7CisgIF9MSUJDUFBfQVNTRVJUKF9f
aW1wXywgIkF0dGVtcHRpbmcgdG8gaW5jcmVtZW50IGFuIGludmFsaWQgaXRlcmF0b3IiKTsKKyAg
RXJyb3JIYW5kbGVyPHZvaWQ+IGVycigiZGlyZWN0b3J5X2l0ZXJhdG9yOjpvcGVyYXRvcisrKCki
LCBlYyk7CisKKyAgZXJyb3JfY29kZSBtX2VjOworICBpZiAoIV9faW1wXy0+YWR2YW5jZShtX2Vj
KSkgeworICAgIHBhdGggcm9vdCA9IG1vdmUoX19pbXBfLT5fX3Jvb3RfKTsKKyAgICBfX2ltcF8u
cmVzZXQoKTsKKyAgICBpZiAobV9lYykKKyAgICAgIGVyci5yZXBvcnQobV9lYywgImF0IHJvb3Qg
XCIlc1wiIiwgcm9vdCk7CisgIH0KKyAgcmV0dXJuICp0aGlzOworfQorCitkaXJlY3RvcnlfZW50
cnkgY29uc3QmIGRpcmVjdG9yeV9pdGVyYXRvcjo6X19kZXJlZmVyZW5jZSgpIGNvbnN0IHsKKyAg
X0xJQkNQUF9BU1NFUlQoX19pbXBfLCAiQXR0ZW1wdGluZyB0byBkZXJlZmVyZW5jZSBhbiBpbnZh
bGlkIGl0ZXJhdG9yIik7CisgIHJldHVybiBfX2ltcF8tPl9fZW50cnlfOworfQorCisvLyByZWN1
cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yCisKK3N0cnVjdCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0
ZXJhdG9yOjpfX3NoYXJlZF9pbXAgeworICBzdGFjazxfX2Rpcl9zdHJlYW0+IF9fc3RhY2tfOwor
ICBkaXJlY3Rvcnlfb3B0aW9ucyBfX29wdGlvbnNfOworfTsKKworcmVjdXJzaXZlX2RpcmVjdG9y
eV9pdGVyYXRvcjo6cmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcigKKyAgICBjb25zdCBwYXRo
JiBwLCBkaXJlY3Rvcnlfb3B0aW9ucyBvcHQsIGVycm9yX2NvZGUqIGVjKQorICAgIDogX19pbXBf
KG51bGxwdHIpLCBfX3JlY18odHJ1ZSkgeworICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJyZWN1
cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yIiwgZWMsICZwKTsKKworICBlcnJvcl9jb2RlIG1fZWM7
CisgIF9fZGlyX3N0cmVhbSBuZXdfcyhwLCBvcHQsIG1fZWMpOworICBpZiAobV9lYykKKyAgICBl
cnIucmVwb3J0KG1fZWMpOworICBpZiAobV9lYyB8fCAhbmV3X3MuZ29vZCgpKQorICAgIHJldHVy
bjsKKworICBfX2ltcF8gPSBtYWtlX3NoYXJlZDxfX3NoYXJlZF9pbXA+KCk7CisgIF9faW1wXy0+
X19vcHRpb25zXyA9IG9wdDsKKyAgX19pbXBfLT5fX3N0YWNrXy5wdXNoKG1vdmUobmV3X3MpKTsK
K30KKwordm9pZCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yOjpfX3BvcChlcnJvcl9jb2Rl
KiBlYykgeworICBfTElCQ1BQX0FTU0VSVChfX2ltcF8sICJQb3BwaW5nIHRoZSBlbmQgaXRlcmF0
b3IiKTsKKyAgaWYgKGVjKQorICAgIGVjLT5jbGVhcigpOworICBfX2ltcF8tPl9fc3RhY2tfLnBv
cCgpOworICBpZiAoX19pbXBfLT5fX3N0YWNrXy5zaXplKCkgPT0gMCkKKyAgICBfX2ltcF8ucmVz
ZXQoKTsKKyAgZWxzZQorICAgIF9fYWR2YW5jZShlYyk7Cit9CisKK2RpcmVjdG9yeV9vcHRpb25z
IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I6Om9wdGlvbnMoKSBjb25zdCB7CisgIHJldHVy
biBfX2ltcF8tPl9fb3B0aW9uc187Cit9CisKK2ludCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJh
dG9yOjpkZXB0aCgpIGNvbnN0IHsKKyAgcmV0dXJuIF9faW1wXy0+X19zdGFja18uc2l6ZSgpIC0g
MTsKK30KKworY29uc3QgZGlyZWN0b3J5X2VudHJ5JiByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJh
dG9yOjpfX2RlcmVmZXJlbmNlKCkgY29uc3QgeworICByZXR1cm4gX19pbXBfLT5fX3N0YWNrXy50
b3AoKS5fX2VudHJ5XzsKK30KKworcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYKK3JlY3Vy
c2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I6Ol9faW5jcmVtZW50KGVycm9yX2NvZGUqIGVjKSB7Cisg
IGlmIChlYykKKyAgICBlYy0+Y2xlYXIoKTsKKyAgaWYgKHJlY3Vyc2lvbl9wZW5kaW5nKCkpIHsK
KyAgICBpZiAoX190cnlfcmVjdXJzaW9uKGVjKSB8fCAoZWMgJiYgKmVjKSkKKyAgICAgIHJldHVy
biAqdGhpczsKKyAgfQorICBfX3JlY18gPSB0cnVlOworICBfX2FkdmFuY2UoZWMpOworICByZXR1
cm4gKnRoaXM7Cit9CisKK3ZvaWQgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjo6X19hZHZh
bmNlKGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoInJlY3Vyc2l2
ZV9kaXJlY3RvcnlfaXRlcmF0b3I6Om9wZXJhdG9yKysoKSIsIGVjKTsKKworICBjb25zdCBkaXJl
Y3RvcnlfaXRlcmF0b3IgZW5kX2l0OworICBhdXRvJiBzdGFjayA9IF9faW1wXy0+X19zdGFja187
CisgIGVycm9yX2NvZGUgbV9lYzsKKyAgd2hpbGUgKHN0YWNrLnNpemUoKSA+IDApIHsKKyAgICBp
ZiAoc3RhY2sudG9wKCkuYWR2YW5jZShtX2VjKSkKKyAgICAgIHJldHVybjsKKyAgICBpZiAobV9l
YykKKyAgICAgIGJyZWFrOworICAgIHN0YWNrLnBvcCgpOworICB9CisKKyAgaWYgKG1fZWMpIHsK
KyAgICBwYXRoIHJvb3QgPSBtb3ZlKHN0YWNrLnRvcCgpLl9fcm9vdF8pOworICAgIF9faW1wXy5y
ZXNldCgpOworICAgIGVyci5yZXBvcnQobV9lYywgImF0IHJvb3QgXCIlc1wiIiwgcm9vdCk7Cisg
IH0gZWxzZSB7CisgICAgX19pbXBfLnJlc2V0KCk7CisgIH0KK30KKworYm9vbCByZWN1cnNpdmVf
ZGlyZWN0b3J5X2l0ZXJhdG9yOjpfX3RyeV9yZWN1cnNpb24oZXJyb3JfY29kZSogZWMpIHsKKyAg
RXJyb3JIYW5kbGVyPHZvaWQ+IGVycigicmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjo6b3Bl
cmF0b3IrKygpIiwgZWMpOworCisgIGJvb2wgcmVjX3N5bSA9IGJvb2wob3B0aW9ucygpICYgZGly
ZWN0b3J5X29wdGlvbnM6OmZvbGxvd19kaXJlY3Rvcnlfc3ltbGluayk7CisKKyAgYXV0byYgY3Vy
cl9pdCA9IF9faW1wXy0+X19zdGFja18udG9wKCk7CisKKyAgYm9vbCBza2lwX3JlYyA9IGZhbHNl
OworICBlcnJvcl9jb2RlIG1fZWM7CisgIGlmICghcmVjX3N5bSkgeworICAgIGZpbGVfc3RhdHVz
IHN0KGN1cnJfaXQuX19lbnRyeV8uX19nZXRfc3ltX2Z0KCZtX2VjKSk7CisgICAgaWYgKG1fZWMg
JiYgc3RhdHVzX2tub3duKHN0KSkKKyAgICAgIG1fZWMuY2xlYXIoKTsKKyAgICBpZiAobV9lYyB8
fCBpc19zeW1saW5rKHN0KSB8fCAhaXNfZGlyZWN0b3J5KHN0KSkKKyAgICAgIHNraXBfcmVjID0g
dHJ1ZTsKKyAgfSBlbHNlIHsKKyAgICBmaWxlX3N0YXR1cyBzdChjdXJyX2l0Ll9fZW50cnlfLl9f
Z2V0X2Z0KCZtX2VjKSk7CisgICAgaWYgKG1fZWMgJiYgc3RhdHVzX2tub3duKHN0KSkKKyAgICAg
IG1fZWMuY2xlYXIoKTsKKyAgICBpZiAobV9lYyB8fCAhaXNfZGlyZWN0b3J5KHN0KSkKKyAgICAg
IHNraXBfcmVjID0gdHJ1ZTsKKyAgfQorCisgIGlmICghc2tpcF9yZWMpIHsKKyAgICBfX2Rpcl9z
dHJlYW0gbmV3X2l0KGN1cnJfaXQuX19lbnRyeV8ucGF0aCgpLCBfX2ltcF8tPl9fb3B0aW9uc18s
IG1fZWMpOworICAgIGlmIChuZXdfaXQuZ29vZCgpKSB7CisgICAgICBfX2ltcF8tPl9fc3RhY2tf
LnB1c2gobW92ZShuZXdfaXQpKTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgfQorICBp
ZiAobV9lYykgeworICAgIGNvbnN0IGJvb2wgYWxsb3dfZWFjZXNzID0KKyAgICAgICAgYm9vbChf
X2ltcF8tPl9fb3B0aW9uc18gJiBkaXJlY3Rvcnlfb3B0aW9uczo6c2tpcF9wZXJtaXNzaW9uX2Rl
bmllZCk7CisgICAgaWYgKG1fZWMudmFsdWUoKSA9PSBFQUNDRVMgJiYgYWxsb3dfZWFjZXNzKSB7
CisgICAgICBpZiAoZWMpCisgICAgICAgIGVjLT5jbGVhcigpOworICAgIH0gZWxzZSB7CisgICAg
ICBwYXRoIGF0X2VudCA9IG1vdmUoY3Vycl9pdC5fX2VudHJ5Xy5fX3BfKTsKKyAgICAgIF9faW1w
Xy5yZXNldCgpOworICAgICAgZXJyLnJlcG9ydChtX2VjLCAiYXR0ZW1wdGluZyByZWN1cnNpb24g
aW50byBcIiVzXCIiLCBhdF9lbnQpOworICAgIH0KKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisK
K19MSUJDUFBfRU5EX05BTUVTUEFDRV9GSUxFU1lTVEVNCisKKy8qIC0tIEVORCBmaWxlc3lzdGVt
L2RpcmVjdG9yeV9pdGVyYXRvci5jcHAgLS0gKi8KKworLyogLS0gQkVHSU4gZmlsZXN5c3RlbS9p
bnQxMjhfYnVpbHRpbnMuY3BwIC0tICovCisKKy8qID09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisg
KiBUaGlzIGZpbGUgaW1wbGVtZW50cyBfX211bG90aTQsIGFuZCBpcyBzdG9sZW4gZnJvbSB0aGUg
Y29tcGlsZXJfcnQgbGlicmFyeS4KKyAqCisgKiBGSVhNRTogd2Ugc3RlYWwgYW5kIHJlLWNvbXBp
bGUgaXQgaW50byBmaWxlc3lzdGVtLCB3aGljaCB1c2VzIF9faW50MTI4X3QsCisgKiBhbmQgcmVx
dWlyZXMgdGhpcyBidWlsdGluIHdoZW4gc2FuaXRpemVkLiBTZWUgbGx2bS5vcmcvUFIzMDY0Mwor
ICoKKyAqID09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisvKiAjaW5jbHVkZSAiX19jb25maWci
ICovCisjaW5jbHVkZSA8Y2xpbWl0cz4KKworI2lmbmRlZiBfX1NJWkVPRl9JTlQxMjhfXworI2Rl
ZmluZSBfTElCQ1BQX0hBU19OT19JTlQxMjgKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX0xJQkNQ
UF9IQVNfTk9fSU5UMTI4KQorCisjaWZkZWYgX19jbGFuZ19fCisjcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWlzc2luZy1w
cm90b3R5cGVzIgorI2VuZGlmCitleHRlcm4gIkMiIF9fYXR0cmlidXRlX18oKG5vX3Nhbml0aXpl
KCJ1bmRlZmluZWQiKSkpCitfX2ludDEyOF90IF9fbXVsb3RpNChfX2ludDEyOF90IGEsIF9faW50
MTI4X3QgYiwgaW50KiBvdmVyZmxvdykgeworICBjb25zdCBpbnQgTiA9IChpbnQpKHNpemVvZihf
X2ludDEyOF90KSAqIENIQVJfQklUKTsKKyAgY29uc3QgX19pbnQxMjhfdCBNSU4gPSAoX19pbnQx
MjhfdCkxIDw8IChOIC0gMSk7CisgIGNvbnN0IF9faW50MTI4X3QgTUFYID0gfk1JTjsKKyAgKm92
ZXJmbG93ID0gMDsKKyAgX19pbnQxMjhfdCByZXN1bHQgPSBhICogYjsKKyAgaWYgKGEgPT0gTUlO
KSB7CisgICAgaWYgKGIgIT0gMCAmJiBiICE9IDEpCisgICAgICAqb3ZlcmZsb3cgPSAxOworICAg
IHJldHVybiByZXN1bHQ7CisgIH0KKyAgaWYgKGIgPT0gTUlOKSB7CisgICAgaWYgKGEgIT0gMCAm
JiBhICE9IDEpCisgICAgICAqb3ZlcmZsb3cgPSAxOworICAgIHJldHVybiByZXN1bHQ7CisgIH0K
KyAgX19pbnQxMjhfdCBzYSA9IGEgPj4gKE4gLSAxKTsKKyAgX19pbnQxMjhfdCBhYnNfYSA9IChh
IF4gc2EpIC0gc2E7CisgIF9faW50MTI4X3Qgc2IgPSBiID4+IChOIC0gMSk7CisgIF9faW50MTI4
X3QgYWJzX2IgPSAoYiBeIHNiKSAtIHNiOworICBpZiAoYWJzX2EgPCAyIHx8IGFic19iIDwgMikK
KyAgICByZXR1cm4gcmVzdWx0OworICBpZiAoc2EgPT0gc2IpIHsKKyAgICBpZiAoYWJzX2EgPiBN
QVggLyBhYnNfYikKKyAgICAgICpvdmVyZmxvdyA9IDE7CisgIH0gZWxzZSB7CisgICAgaWYgKGFi
c19hID4gTUlOIC8gLWFic19iKQorICAgICAgKm92ZXJmbG93ID0gMTsKKyAgfQorICByZXR1cm4g
cmVzdWx0OworfQorI2lmZGVmIF9fY2xhbmdfXworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBv
cAorI2VuZGlmCisKKyNlbmRpZgorCisvKiAtLSBFTkQgZmlsZXN5c3RlbS9pbnQxMjhfYnVpbHRp
bnMuY3BwIC0tICovCisKKy8qIC0tIEJFR0lOIGZpbGVzeXN0ZW0vb3BlcmF0aW9ucy5jcHAgLS0g
Ki8KKworLyogI2luY2x1ZGUgImZpbGVzeXN0ZW0iICovCisjaW5jbHVkZSA8YXJyYXk+CisjaW5j
bHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8ZnN0cmVhbT4KKyNpbmNsdWRlIDxyYW5kb20+IC8q
IGZvciB1bmlxdWVfcGF0aCAqLworI2luY2x1ZGUgPHN0cmluZ192aWV3PgorI2luY2x1ZGUgPHR5
cGVfdHJhaXRzPgorI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1
ZGUgPGNsaW1pdHM+CisKKy8qICNpbmNsdWRlICJmaWxlc3lzdGVtX2NvbW1vbi5oIiAqLworCisj
aW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMv
c3RhdHZmcy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxmY250bC5oPiAvKiB2YWx1
ZXMgZm9yIGZjaG1vZGF0ICovCisKKyNpZiBkZWZpbmVkKF9fbGludXhfXykKKyNpbmNsdWRlIDxs
aW51eC92ZXJzaW9uLmg+CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9O
KDIsIDYsIDMzKQorI2luY2x1ZGUgPHN5cy9zZW5kZmlsZS5oPgorI2RlZmluZSBfTElCQ1BQX1VT
RV9TRU5ERklMRQorI2VuZGlmCisjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgX19oYXNfaW5j
bHVkZSg8Y29weWZpbGUuaD4pCisjaW5jbHVkZSA8Y29weWZpbGUuaD4KKyNkZWZpbmUgX0xJQkNQ
UF9VU0VfQ09QWUZJTEUKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX19BUFBMRV9fKQorI2RlZmlu
ZSBfTElCQ1BQX1VTRV9DTE9DS19HRVRUSU1FCisjZW5kaWYKKworI2lmICFkZWZpbmVkKENMT0NL
X1JFQUxUSU1FKSB8fCAhZGVmaW5lZChfTElCQ1BQX1VTRV9DTE9DS19HRVRUSU1FKQorI2luY2x1
ZGUgPHN5cy90aW1lLmg+IC8vIGZvciBnZXR0aW1lb2ZkYXkgYW5kIHRpbWV2YWwKKyNlbmRpZiAg
ICAgICAgICAgICAgICAvLyAhZGVmaW5lZChDTE9DS19SRUFMVElNRSkKKworI2lmIGRlZmluZWQo
X0xJQkNQUF9DT01QSUxFUl9HQ0MpCisjaWYgX0dOVUNfVkVSIDwgNTAwCisjcHJhZ21hIEdDQyBk
aWFnbm9zdGljIGlnbm9yZWQgIi1XbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMiCisjZW5kaWYK
KyNlbmRpZgorCitfTElCQ1BQX0JFR0lOX05BTUVTUEFDRV9GSUxFU1lTVEVNCisKK25hbWVzcGFj
ZSB7CituYW1lc3BhY2UgcGFyc2VyIHsKKwordXNpbmcgc3RyaW5nX3ZpZXdfdCA9IHBhdGg6Ol9f
c3RyaW5nX3ZpZXc7Cit1c2luZyBzdHJpbmdfdmlld19wYWlyID0gcGFpcjxzdHJpbmdfdmlld190
LCBzdHJpbmdfdmlld190PjsKK3VzaW5nIFBvc1B0ciA9IHBhdGg6OnZhbHVlX3R5cGUgY29uc3Qq
OworCitzdHJ1Y3QgUGF0aFBhcnNlciB7CisgIGVudW0gUGFyc2VyU3RhdGUgOiB1bnNpZ25lZCBj
aGFyIHsKKyAgICAvLyBaZXJvIGlzIGEgc3BlY2lhbCBzZW50aW5lbCB2YWx1ZSB1c2VkIGJ5IGRl
ZmF1bHQgY29uc3RydWN0ZWQgaXRlcmF0b3JzLgorICAgIFBTX0JlZm9yZUJlZ2luID0gcGF0aDo6
aXRlcmF0b3I6Ol9CZWZvcmVCZWdpbiwKKyAgICBQU19JblJvb3ROYW1lID0gcGF0aDo6aXRlcmF0
b3I6Ol9JblJvb3ROYW1lLAorICAgIFBTX0luUm9vdERpciA9IHBhdGg6Oml0ZXJhdG9yOjpfSW5S
b290RGlyLAorICAgIFBTX0luRmlsZW5hbWVzID0gcGF0aDo6aXRlcmF0b3I6Ol9JbkZpbGVuYW1l
cywKKyAgICBQU19JblRyYWlsaW5nU2VwID0gcGF0aDo6aXRlcmF0b3I6Ol9JblRyYWlsaW5nU2Vw
LAorICAgIFBTX0F0RW5kID0gcGF0aDo6aXRlcmF0b3I6Ol9BdEVuZAorICB9OworCisgIGNvbnN0
IHN0cmluZ192aWV3X3QgUGF0aDsKKyAgc3RyaW5nX3ZpZXdfdCBSYXdFbnRyeTsKKyAgUGFyc2Vy
U3RhdGUgU3RhdGU7CisKK3ByaXZhdGU6CisgIFBhdGhQYXJzZXIoc3RyaW5nX3ZpZXdfdCBQLCBQ
YXJzZXJTdGF0ZSBTdGF0ZSkgbm9leGNlcHQgOiBQYXRoKFApLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUoU3RhdGUpIHt9
CisKK3B1YmxpYzoKKyAgUGF0aFBhcnNlcihzdHJpbmdfdmlld190IFAsIHN0cmluZ192aWV3X3Qg
RSwgdW5zaWduZWQgY2hhciBTKQorICAgICAgOiBQYXRoKFApLCBSYXdFbnRyeShFKSwgU3RhdGUo
c3RhdGljX2Nhc3Q8UGFyc2VyU3RhdGU+KFMpKSB7CisgICAgLy8gUyBjYW5ub3QgYmUgJzAnIG9y
IFBTX0JlZm9yZUJlZ2luLgorICB9CisKKyAgc3RhdGljIFBhdGhQYXJzZXIgQ3JlYXRlQmVnaW4o
c3RyaW5nX3ZpZXdfdCBQKSBub2V4Y2VwdCB7CisgICAgUGF0aFBhcnNlciBQUChQLCBQU19CZWZv
cmVCZWdpbik7CisgICAgUFAuaW5jcmVtZW50KCk7CisgICAgcmV0dXJuIFBQOworICB9CisKKyAg
c3RhdGljIFBhdGhQYXJzZXIgQ3JlYXRlRW5kKHN0cmluZ192aWV3X3QgUCkgbm9leGNlcHQgewor
ICAgIFBhdGhQYXJzZXIgUFAoUCwgUFNfQXRFbmQpOworICAgIHJldHVybiBQUDsKKyAgfQorCisg
IFBvc1B0ciBwZWVrKCkgY29uc3Qgbm9leGNlcHQgeworICAgIGF1dG8gVGtFbmQgPSBnZXROZXh0
VG9rZW5TdGFydFBvcygpOworICAgIGF1dG8gRW5kID0gZ2V0QWZ0ZXJCYWNrKCk7CisgICAgcmV0
dXJuIFRrRW5kID09IEVuZCA/IG51bGxwdHIgOiBUa0VuZDsKKyAgfQorCisgIHZvaWQgaW5jcmVt
ZW50KCkgbm9leGNlcHQgeworICAgIGNvbnN0IFBvc1B0ciBFbmQgPSBnZXRBZnRlckJhY2soKTsK
KyAgICBjb25zdCBQb3NQdHIgU3RhcnQgPSBnZXROZXh0VG9rZW5TdGFydFBvcygpOworICAgIGlm
IChTdGFydCA9PSBFbmQpCisgICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0F0RW5kKTsKKworICAg
IHN3aXRjaCAoU3RhdGUpIHsKKyAgICBjYXNlIFBTX0JlZm9yZUJlZ2luOiB7CisgICAgICBQb3NQ
dHIgVGtFbmQgPSBjb25zdW1lU2VwYXJhdG9yKFN0YXJ0LCBFbmQpOworICAgICAgaWYgKFRrRW5k
KQorICAgICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0luUm9vdERpciwgU3RhcnQsIFRrRW5kKTsK
KyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIG1ha2VTdGF0ZShQU19JbkZpbGVuYW1lcywgU3Rh
cnQsIGNvbnN1bWVOYW1lKFN0YXJ0LCBFbmQpKTsKKyAgICB9CisgICAgY2FzZSBQU19JblJvb3RE
aXI6CisgICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0luRmlsZW5hbWVzLCBTdGFydCwgY29uc3Vt
ZU5hbWUoU3RhcnQsIEVuZCkpOworCisgICAgY2FzZSBQU19JbkZpbGVuYW1lczogeworICAgICAg
UG9zUHRyIFNlcEVuZCA9IGNvbnN1bWVTZXBhcmF0b3IoU3RhcnQsIEVuZCk7CisgICAgICBpZiAo
U2VwRW5kICE9IEVuZCkgeworICAgICAgICBQb3NQdHIgVGtFbmQgPSBjb25zdW1lTmFtZShTZXBF
bmQsIEVuZCk7CisgICAgICAgIGlmIChUa0VuZCkKKyAgICAgICAgICByZXR1cm4gbWFrZVN0YXRl
KFBTX0luRmlsZW5hbWVzLCBTZXBFbmQsIFRrRW5kKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBt
YWtlU3RhdGUoUFNfSW5UcmFpbGluZ1NlcCwgU3RhcnQsIFNlcEVuZCk7CisgICAgfQorCisgICAg
Y2FzZSBQU19JblRyYWlsaW5nU2VwOgorICAgICAgcmV0dXJuIG1ha2VTdGF0ZShQU19BdEVuZCk7
CisKKyAgICBjYXNlIFBTX0luUm9vdE5hbWU6CisgICAgY2FzZSBQU19BdEVuZDoKKyAgICAgIF9M
SUJDUFBfVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgIH0KKworICB2b2lkIGRlY3JlbWVudCgpIG5v
ZXhjZXB0IHsKKyAgICBjb25zdCBQb3NQdHIgUkVuZCA9IGdldEJlZm9yZUZyb250KCk7CisgICAg
Y29uc3QgUG9zUHRyIFJTdGFydCA9IGdldEN1cnJlbnRUb2tlblN0YXJ0UG9zKCkgLSAxOworICAg
IGlmIChSU3RhcnQgPT0gUkVuZCkgLy8gd2UncmUgZGVjcmVtZW50aW5nIHRoZSBiZWdpbgorICAg
ICAgcmV0dXJuIG1ha2VTdGF0ZShQU19CZWZvcmVCZWdpbik7CisKKyAgICBzd2l0Y2ggKFN0YXRl
KSB7CisgICAgY2FzZSBQU19BdEVuZDogeworICAgICAgLy8gVHJ5IHRvIGNvbnN1bWUgYSB0cmFp
bGluZyBzZXBhcmF0b3Igb3Igcm9vdCBkaXJlY3RvcnkgZmlyc3QuCisgICAgICBpZiAoUG9zUHRy
IFNlcEVuZCA9IGNvbnN1bWVTZXBhcmF0b3IoUlN0YXJ0LCBSRW5kKSkgeworICAgICAgICBpZiAo
U2VwRW5kID09IFJFbmQpCisgICAgICAgICAgcmV0dXJuIG1ha2VTdGF0ZShQU19JblJvb3REaXIs
IFBhdGguZGF0YSgpLCBSU3RhcnQgKyAxKTsKKyAgICAgICAgcmV0dXJuIG1ha2VTdGF0ZShQU19J
blRyYWlsaW5nU2VwLCBTZXBFbmQgKyAxLCBSU3RhcnQgKyAxKTsKKyAgICAgIH0gZWxzZSB7Cisg
ICAgICAgIFBvc1B0ciBUa1N0YXJ0ID0gY29uc3VtZU5hbWUoUlN0YXJ0LCBSRW5kKTsKKyAgICAg
ICAgcmV0dXJuIG1ha2VTdGF0ZShQU19JbkZpbGVuYW1lcywgVGtTdGFydCArIDEsIFJTdGFydCAr
IDEpOworICAgICAgfQorICAgIH0KKyAgICBjYXNlIFBTX0luVHJhaWxpbmdTZXA6CisgICAgICBy
ZXR1cm4gbWFrZVN0YXRlKFBTX0luRmlsZW5hbWVzLCBjb25zdW1lTmFtZShSU3RhcnQsIFJFbmQp
ICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgUlN0YXJ0ICsgMSk7CisgICAgY2FzZSBQU19J
bkZpbGVuYW1lczogeworICAgICAgUG9zUHRyIFNlcEVuZCA9IGNvbnN1bWVTZXBhcmF0b3IoUlN0
YXJ0LCBSRW5kKTsKKyAgICAgIGlmIChTZXBFbmQgPT0gUkVuZCkKKyAgICAgICAgcmV0dXJuIG1h
a2VTdGF0ZShQU19JblJvb3REaXIsIFBhdGguZGF0YSgpLCBSU3RhcnQgKyAxKTsKKyAgICAgIFBv
c1B0ciBUa0VuZCA9IGNvbnN1bWVOYW1lKFNlcEVuZCwgUkVuZCk7CisgICAgICByZXR1cm4gbWFr
ZVN0YXRlKFBTX0luRmlsZW5hbWVzLCBUa0VuZCArIDEsIFNlcEVuZCArIDEpOworICAgIH0KKyAg
ICBjYXNlIFBTX0luUm9vdERpcjoKKyAgICAgIC8vIHJldHVybiBtYWtlU3RhdGUoUFNfSW5Sb290
TmFtZSwgUGF0aC5kYXRhKCksIFJTdGFydCArIDEpOworICAgIGNhc2UgUFNfSW5Sb290TmFtZToK
KyAgICBjYXNlIFBTX0JlZm9yZUJlZ2luOgorICAgICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOwor
ICAgIH0KKyAgfQorCisgIC8vLyBcYnJpZWYgUmV0dXJuIGEgdmlldyB3aXRoIHRoZSAicHJlZmVy
cmVkIHJlcHJlc2VudGF0aW9uIiBvZiB0aGUgY3VycmVudAorICAvLy8gICBlbGVtZW50LiBGb3Ig
ZXhhbXBsZSB0cmFpbGluZyBzZXBhcmF0b3JzIGFyZSByZXByZXNlbnRlZCBhcyBhICcuJworICBz
dHJpbmdfdmlld190IG9wZXJhdG9yKigpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICBzd2l0Y2ggKFN0
YXRlKSB7CisgICAgY2FzZSBQU19CZWZvcmVCZWdpbjoKKyAgICBjYXNlIFBTX0F0RW5kOgorICAg
ICAgcmV0dXJuICIiOworICAgIGNhc2UgUFNfSW5Sb290RGlyOgorICAgICAgcmV0dXJuICIvIjsK
KyAgICBjYXNlIFBTX0luVHJhaWxpbmdTZXA6CisgICAgICByZXR1cm4gIiI7CisgICAgY2FzZSBQ
U19JblJvb3ROYW1lOgorICAgIGNhc2UgUFNfSW5GaWxlbmFtZXM6CisgICAgICByZXR1cm4gUmF3
RW50cnk7CisgICAgfQorICAgIF9MSUJDUFBfVU5SRUFDSEFCTEUoKTsKKyAgfQorCisgIGV4cGxp
Y2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIFN0YXRlICE9
IFBTX0JlZm9yZUJlZ2luICYmIFN0YXRlICE9IFBTX0F0RW5kOworICB9CisKKyAgUGF0aFBhcnNl
ciYgb3BlcmF0b3IrKygpIG5vZXhjZXB0IHsKKyAgICBpbmNyZW1lbnQoKTsKKyAgICByZXR1cm4g
KnRoaXM7CisgIH0KKworICBQYXRoUGFyc2VyJiBvcGVyYXRvci0tKCkgbm9leGNlcHQgeworICAg
IGRlY3JlbWVudCgpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIGJvb2wgaW5Sb290UGF0
aCgpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gU3RhdGUgPT0gUFNfSW5Sb290RGlyIHx8
IFN0YXRlID09IFBTX0luUm9vdE5hbWU7CisgIH0KKworcHJpdmF0ZToKKyAgdm9pZCBtYWtlU3Rh
dGUoUGFyc2VyU3RhdGUgTmV3U3RhdGUsIFBvc1B0ciBTdGFydCwgUG9zUHRyIEVuZCkgbm9leGNl
cHQgeworICAgIFN0YXRlID0gTmV3U3RhdGU7CisgICAgUmF3RW50cnkgPSBzdHJpbmdfdmlld190
KFN0YXJ0LCBFbmQgLSBTdGFydCk7CisgIH0KKyAgdm9pZCBtYWtlU3RhdGUoUGFyc2VyU3RhdGUg
TmV3U3RhdGUpIG5vZXhjZXB0IHsKKyAgICBTdGF0ZSA9IE5ld1N0YXRlOworICAgIFJhd0VudHJ5
ID0ge307CisgIH0KKworICBQb3NQdHIgZ2V0QWZ0ZXJCYWNrKCkgY29uc3Qgbm9leGNlcHQgeyBy
ZXR1cm4gUGF0aC5kYXRhKCkgKyBQYXRoLnNpemUoKTsgfQorCisgIFBvc1B0ciBnZXRCZWZvcmVG
cm9udCgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIFBhdGguZGF0YSgpIC0gMTsgfQorCisgIC8v
LyBcYnJpZWYgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRo
ZSBjdXJyZW50bHkKKyAgLy8vICAgbGV4ZWQgZWxlbWVudC4KKyAgUG9zUHRyIGdldE5leHRUb2tl
blN0YXJ0UG9zKCkgY29uc3Qgbm9leGNlcHQgeworICAgIHN3aXRjaCAoU3RhdGUpIHsKKyAgICBj
YXNlIFBTX0JlZm9yZUJlZ2luOgorICAgICAgcmV0dXJuIFBhdGguZGF0YSgpOworICAgIGNhc2Ug
UFNfSW5Sb290TmFtZToKKyAgICBjYXNlIFBTX0luUm9vdERpcjoKKyAgICBjYXNlIFBTX0luRmls
ZW5hbWVzOgorICAgICAgcmV0dXJuICZSYXdFbnRyeS5iYWNrKCkgKyAxOworICAgIGNhc2UgUFNf
SW5UcmFpbGluZ1NlcDoKKyAgICBjYXNlIFBTX0F0RW5kOgorICAgICAgcmV0dXJuIGdldEFmdGVy
QmFjaygpOworICAgIH0KKyAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7CisgIH0KKworICAvLy8g
XGJyaWVmIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgY3Vy
cmVudGx5IGxleGVkCisgIC8vLyAgIGVsZW1lbnQuCisgIFBvc1B0ciBnZXRDdXJyZW50VG9rZW5T
dGFydFBvcygpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICBzd2l0Y2ggKFN0YXRlKSB7CisgICAgY2Fz
ZSBQU19CZWZvcmVCZWdpbjoKKyAgICBjYXNlIFBTX0luUm9vdE5hbWU6CisgICAgICByZXR1cm4g
JlBhdGguZnJvbnQoKTsKKyAgICBjYXNlIFBTX0luUm9vdERpcjoKKyAgICBjYXNlIFBTX0luRmls
ZW5hbWVzOgorICAgIGNhc2UgUFNfSW5UcmFpbGluZ1NlcDoKKyAgICAgIHJldHVybiAmUmF3RW50
cnkuZnJvbnQoKTsKKyAgICBjYXNlIFBTX0F0RW5kOgorICAgICAgcmV0dXJuICZQYXRoLmJhY2so
KSArIDE7CisgICAgfQorICAgIF9MSUJDUFBfVU5SRUFDSEFCTEUoKTsKKyAgfQorCisgIFBvc1B0
ciBjb25zdW1lU2VwYXJhdG9yKFBvc1B0ciBQLCBQb3NQdHIgRW5kKSBjb25zdCBub2V4Y2VwdCB7
CisgICAgaWYgKFAgPT0gRW5kIHx8ICpQICE9ICcvJykKKyAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIGNvbnN0IGludCBJbmMgPSBQIDwgRW5kID8gMSA6IC0xOworICAgIFAgKz0gSW5jOworICAg
IHdoaWxlIChQICE9IEVuZCAmJiAqUCA9PSAnLycpCisgICAgICBQICs9IEluYzsKKyAgICByZXR1
cm4gUDsKKyAgfQorCisgIFBvc1B0ciBjb25zdW1lTmFtZShQb3NQdHIgUCwgUG9zUHRyIEVuZCkg
Y29uc3Qgbm9leGNlcHQgeworICAgIGlmIChQID09IEVuZCB8fCAqUCA9PSAnLycpCisgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICBjb25zdCBpbnQgSW5jID0gUCA8IEVuZCA/IDEgOiAtMTsKKyAg
ICBQICs9IEluYzsKKyAgICB3aGlsZSAoUCAhPSBFbmQgJiYgKlAgIT0gJy8nKQorICAgICAgUCAr
PSBJbmM7CisgICAgcmV0dXJuIFA7CisgIH0KK307CisKK3N0YXRpYyBzdHJpbmdfdmlld19wYWly
IHNlcGFyYXRlX2ZpbGVuYW1lKHN0cmluZ192aWV3X3QgY29uc3QmIHMpIHsKKyAgaWYgKHMgPT0g
Ii4iIHx8IHMgPT0gIi4uIiB8fCBzLmVtcHR5KCkpCisgICAgcmV0dXJuIHN0cmluZ192aWV3X3Bh
aXJ7cywgIiJ9OworICBhdXRvIHBvcyA9IHMuZmluZF9sYXN0X29mKCcuJyk7CisgIGlmIChwb3Mg
PT0gc3RyaW5nX3ZpZXdfdDo6bnBvcyB8fCBwb3MgPT0gMCkKKyAgICByZXR1cm4gc3RyaW5nX3Zp
ZXdfcGFpcntzLCBzdHJpbmdfdmlld190e319OworICByZXR1cm4gc3RyaW5nX3ZpZXdfcGFpcntz
LnN1YnN0cigwLCBwb3MpLCBzLnN1YnN0cihwb3MpfTsKK30KKworc3RhdGljIHN0cmluZ192aWV3
X3QgY3JlYXRlVmlldyhQb3NQdHIgUywgUG9zUHRyIEUpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIHtT
LCBzdGF0aWNfY2FzdDxzaXplX3Q+KEUgLSBTKSArIDF9OworfQorCit9IC8vIG5hbWVzcGFjZSBw
YXJzZXIKK30gLy8gbmFtZXNwYWNlCisKKy8vICAgICAgICAgICAgICAgICAgICAgICBQT1NJWCBI
RUxQRVJTCisKK25hbWVzcGFjZSBkZXRhaWwgeworbmFtZXNwYWNlIHsKKwordXNpbmcgdmFsdWVf
dHlwZSA9IHBhdGg6OnZhbHVlX3R5cGU7Cit1c2luZyBzdHJpbmdfdHlwZSA9IHBhdGg6OnN0cmlu
Z190eXBlOworCitzdHJ1Y3QgRmlsZURlc2NyaXB0b3IgeworICBjb25zdCBwYXRoJiBuYW1lOwor
ICBpbnQgZmQgPSAtMTsKKyAgU3RhdFQgbV9zdGF0OworICBmaWxlX3N0YXR1cyBtX3N0YXR1czsK
KworICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gQXJncz4KKyAgc3RhdGljIEZpbGVEZXNjcmlwdG9yIGNy
ZWF0ZShjb25zdCBwYXRoKiBwLCBlcnJvcl9jb2RlJiBlYywgQXJncy4uLiBhcmdzKSB7CisgICAg
ZWMuY2xlYXIoKTsKKyAgICBpbnQgZmQ7CisgICAgaWYgKChmZCA9IDo6b3BlbihwLT5jX3N0cigp
LCBhcmdzLi4uKSkgPT0gLTEpIHsKKyAgICAgIGVjID0gY2FwdHVyZV9lcnJubygpOworICAgICAg
cmV0dXJuIEZpbGVEZXNjcmlwdG9ye3B9OworICAgIH0KKyAgICByZXR1cm4gRmlsZURlc2NyaXB0
b3IocCwgZmQpOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+CisgIHN0YXRpYyBG
aWxlRGVzY3JpcHRvciBjcmVhdGVfd2l0aF9zdGF0dXMoY29uc3QgcGF0aCogcCwgZXJyb3JfY29k
ZSYgZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJncy4u
LiBhcmdzKSB7CisgICAgRmlsZURlc2NyaXB0b3IgZmQgPSBjcmVhdGUocCwgZWMsIGFyZ3MuLi4p
OworICAgIGlmICghZWMpCisgICAgICBmZC5yZWZyZXNoX3N0YXR1cyhlYyk7CisKKyAgICByZXR1
cm4gZmQ7CisgIH0KKworICBmaWxlX3N0YXR1cyBnZXRfc3RhdHVzKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0dXM7IH0KKyAgU3RhdFQgY29uc3QmIGdldF9zdGF0KCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0OyB9CisKKyAgYm9vbCBzdGF0dXNfa25vd24oKSBjb25zdCB7IHJldHVybiBfVlNURF9GUzo6
c3RhdHVzX2tub3duKG1fc3RhdHVzKTsgfQorCisgIGZpbGVfc3RhdHVzIHJlZnJlc2hfc3RhdHVz
KGVycm9yX2NvZGUmIGVjKTsKKworICB2b2lkIGNsb3NlKCkgbm9leGNlcHQgeworICAgIGlmIChm
ZCAhPSAtMSkKKyAgICAgIDo6Y2xvc2UoZmQpOworICAgIGZkID0gLTE7CisgIH0KKworICBGaWxl
RGVzY3JpcHRvcihGaWxlRGVzY3JpcHRvciYmIG90aGVyKQorICAgICAgOiBuYW1lKG90aGVyLm5h
bWUpLCBmZChvdGhlci5mZCksIG1fc3RhdChvdGhlci5tX3N0YXQpLAorICAgICAgICBtX3N0YXR1
cyhvdGhlci5tX3N0YXR1cykgeworICAgIG90aGVyLmZkID0gLTE7CisgICAgb3RoZXIubV9zdGF0
dXMgPSBmaWxlX3N0YXR1c3t9OworICB9CisKKyAgfkZpbGVEZXNjcmlwdG9yKCkgeyBjbG9zZSgp
OyB9CisKKyAgRmlsZURlc2NyaXB0b3IoRmlsZURlc2NyaXB0b3IgY29uc3QmKSA9IGRlbGV0ZTsK
KyAgRmlsZURlc2NyaXB0b3ImIG9wZXJhdG9yPShGaWxlRGVzY3JpcHRvciBjb25zdCYpID0gZGVs
ZXRlOworCitwcml2YXRlOgorICBleHBsaWNpdCBGaWxlRGVzY3JpcHRvcihjb25zdCBwYXRoKiBw
LCBpbnQgZmQgPSAtMSkgOiBuYW1lKCpwKSwgZmQoZmQpIHt9Cit9OworCitwZXJtcyBwb3NpeF9n
ZXRfcGVybXMoY29uc3QgU3RhdFQmIHN0KSBub2V4Y2VwdCB7CisgIHJldHVybiBzdGF0aWNfY2Fz
dDxwZXJtcz4oc3Quc3RfbW9kZSkgJiBwZXJtczo6bWFzazsKK30KKworOjptb2RlX3QgcG9zaXhf
Y29udmVydF9wZXJtcyhwZXJtcyBwcm1zKSB7CisgIHJldHVybiBzdGF0aWNfY2FzdDwgOjptb2Rl
X3Q+KHBybXMgJiBwZXJtczo6bWFzayk7Cit9CisKK2ZpbGVfc3RhdHVzIGNyZWF0ZV9maWxlX3N0
YXR1cyhlcnJvcl9jb2RlJiBtX2VjLCBwYXRoIGNvbnN0JiBwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFN0YXRUJiBwYXRoX3N0YXQsIGVycm9yX2NvZGUqIGVjKSB7Cisg
IGlmIChlYykKKyAgICAqZWMgPSBtX2VjOworICBpZiAobV9lYyAmJiAobV9lYy52YWx1ZSgpID09
IEVOT0VOVCB8fCBtX2VjLnZhbHVlKCkgPT0gRU5PVERJUikpIHsKKyAgICByZXR1cm4gZmlsZV9z
dGF0dXMoZmlsZV90eXBlOjpub3RfZm91bmQpOworICB9IGVsc2UgaWYgKG1fZWMpIHsKKyAgICBF
cnJvckhhbmRsZXI8dm9pZD4gZXJyKCJwb3NpeF9zdGF0IiwgZWMsICZwKTsKKyAgICBlcnIucmVw
b3J0KG1fZWMsICJmYWlsZWQgdG8gZGV0ZXJtaW5lIGF0dHJpYnV0ZXMgZm9yIHRoZSBzcGVjaWZp
ZWQgcGF0aCIpOworICAgIHJldHVybiBmaWxlX3N0YXR1cyhmaWxlX3R5cGU6Om5vbmUpOworICB9
CisgIC8vIGVsc2UKKworICBmaWxlX3N0YXR1cyBmc190bXA7CisgIGF1dG8gY29uc3QgbW9kZSA9
IHBhdGhfc3RhdC5zdF9tb2RlOworICBpZiAoU19JU0xOSyhtb2RlKSkKKyAgICBmc190bXAudHlw
ZShmaWxlX3R5cGU6OnN5bWxpbmspOworICBlbHNlIGlmIChTX0lTUkVHKG1vZGUpKQorICAgIGZz
X3RtcC50eXBlKGZpbGVfdHlwZTo6cmVndWxhcik7CisgIGVsc2UgaWYgKFNfSVNESVIobW9kZSkp
CisgICAgZnNfdG1wLnR5cGUoZmlsZV90eXBlOjpkaXJlY3RvcnkpOworICBlbHNlIGlmIChTX0lT
QkxLKG1vZGUpKQorICAgIGZzX3RtcC50eXBlKGZpbGVfdHlwZTo6YmxvY2spOworICBlbHNlIGlm
IChTX0lTQ0hSKG1vZGUpKQorICAgIGZzX3RtcC50eXBlKGZpbGVfdHlwZTo6Y2hhcmFjdGVyKTsK
KyAgZWxzZSBpZiAoU19JU0ZJRk8obW9kZSkpCisgICAgZnNfdG1wLnR5cGUoZmlsZV90eXBlOjpm
aWZvKTsKKyAgZWxzZSBpZiAoU19JU1NPQ0sobW9kZSkpCisgICAgZnNfdG1wLnR5cGUoZmlsZV90
eXBlOjpzb2NrZXQpOworICBlbHNlCisgICAgZnNfdG1wLnR5cGUoZmlsZV90eXBlOjp1bmtub3du
KTsKKworICBmc190bXAucGVybWlzc2lvbnMoZGV0YWlsOjpwb3NpeF9nZXRfcGVybXMocGF0aF9z
dGF0KSk7CisgIHJldHVybiBmc190bXA7Cit9CisKK2ZpbGVfc3RhdHVzIHBvc2l4X3N0YXQocGF0
aCBjb25zdCYgcCwgU3RhdFQmIHBhdGhfc3RhdCwgZXJyb3JfY29kZSogZWMpIHsKKyAgZXJyb3Jf
Y29kZSBtX2VjOworICBpZiAoOjpzdGF0KHAuY19zdHIoKSwgJnBhdGhfc3RhdCkgPT0gLTEpCisg
ICAgbV9lYyA9IGRldGFpbDo6Y2FwdHVyZV9lcnJubygpOworICByZXR1cm4gY3JlYXRlX2ZpbGVf
c3RhdHVzKG1fZWMsIHAsIHBhdGhfc3RhdCwgZWMpOworfQorCitmaWxlX3N0YXR1cyBwb3NpeF9z
dGF0KHBhdGggY29uc3QmIHAsIGVycm9yX2NvZGUqIGVjKSB7CisgIFN0YXRUIHBhdGhfc3RhdDsK
KyAgcmV0dXJuIHBvc2l4X3N0YXQocCwgcGF0aF9zdGF0LCBlYyk7Cit9CisKK2ZpbGVfc3RhdHVz
IHBvc2l4X2xzdGF0KHBhdGggY29uc3QmIHAsIFN0YXRUJiBwYXRoX3N0YXQsIGVycm9yX2NvZGUq
IGVjKSB7CisgIGVycm9yX2NvZGUgbV9lYzsKKyAgaWYgKDo6bHN0YXQocC5jX3N0cigpLCAmcGF0
aF9zdGF0KSA9PSAtMSkKKyAgICBtX2VjID0gZGV0YWlsOjpjYXB0dXJlX2Vycm5vKCk7CisgIHJl
dHVybiBjcmVhdGVfZmlsZV9zdGF0dXMobV9lYywgcCwgcGF0aF9zdGF0LCBlYyk7Cit9CisKK2Zp
bGVfc3RhdHVzIHBvc2l4X2xzdGF0KHBhdGggY29uc3QmIHAsIGVycm9yX2NvZGUqIGVjKSB7Cisg
IFN0YXRUIHBhdGhfc3RhdDsKKyAgcmV0dXJuIHBvc2l4X2xzdGF0KHAsIHBhdGhfc3RhdCwgZWMp
OworfQorCitib29sIHBvc2l4X2Z0cnVuY2F0ZShjb25zdCBGaWxlRGVzY3JpcHRvciYgZmQsIHNp
emVfdCB0b19zaXplLCBlcnJvcl9jb2RlJiBlYykgeworICBpZiAoOjpmdHJ1bmNhdGUoZmQuZmQs
IHRvX3NpemUpID09IC0xKSB7CisgICAgZWMgPSBjYXB0dXJlX2Vycm5vKCk7CisgICAgcmV0dXJu
IHRydWU7CisgIH0KKyAgZWMuY2xlYXIoKTsKKyAgcmV0dXJuIGZhbHNlOworfQorCitib29sIHBv
c2l4X2ZjaG1vZChjb25zdCBGaWxlRGVzY3JpcHRvciYgZmQsIGNvbnN0IFN0YXRUJiBzdCwgZXJy
b3JfY29kZSYgZWMpIHsKKyAgaWYgKDo6ZmNobW9kKGZkLmZkLCBzdC5zdF9tb2RlKSA9PSAtMSkg
eworICAgIGVjID0gY2FwdHVyZV9lcnJubygpOworICAgIHJldHVybiB0cnVlOworICB9CisgIGVj
LmNsZWFyKCk7CisgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBzdGF0X2VxdWl2YWxlbnQoY29u
c3QgU3RhdFQmIHN0MSwgY29uc3QgU3RhdFQmIHN0MikgeworICByZXR1cm4gKHN0MS5zdF9kZXYg
PT0gc3QyLnN0X2RldiAmJiBzdDEuc3RfaW5vID09IHN0Mi5zdF9pbm8pOworfQorCitmaWxlX3N0
YXR1cyBGaWxlRGVzY3JpcHRvcjo6cmVmcmVzaF9zdGF0dXMoZXJyb3JfY29kZSYgZWMpIHsKKyAg
Ly8gRkQgbXVzdCBiZSBvcGVuIGFuZCBnb29kLgorICBtX3N0YXR1cyA9IGZpbGVfc3RhdHVze307
CisgIG1fc3RhdCA9IHt9OworICBlcnJvcl9jb2RlIG1fZWM7CisgIGlmICg6OmZzdGF0KGZkLCAm
bV9zdGF0KSA9PSAtMSkKKyAgICBtX2VjID0gY2FwdHVyZV9lcnJubygpOworICBtX3N0YXR1cyA9
IGNyZWF0ZV9maWxlX3N0YXR1cyhtX2VjLCBuYW1lLCBtX3N0YXQsICZlYyk7CisgIHJldHVybiBt
X3N0YXR1czsKK30KK30gLy8gbmFtZXNwYWNlCit9IC8vIGVuZCBuYW1lc3BhY2UgZGV0YWlsCisK
K3VzaW5nIGRldGFpbDo6Y2FwdHVyZV9lcnJubzsKK3VzaW5nIGRldGFpbDo6RXJyb3JIYW5kbGVy
OwordXNpbmcgZGV0YWlsOjpTdGF0VDsKK3VzaW5nIGRldGFpbDo6VGltZVNwZWM7Cit1c2luZyBw
YXJzZXI6OmNyZWF0ZVZpZXc7Cit1c2luZyBwYXJzZXI6OlBhdGhQYXJzZXI7Cit1c2luZyBwYXJz
ZXI6OnN0cmluZ192aWV3X3Q7CisKK2NvbnN0IGJvb2wgX0ZpbGVzeXN0ZW1DbG9jazo6aXNfc3Rl
YWR5OworCitfRmlsZXN5c3RlbUNsb2NrOjp0aW1lX3BvaW50IF9GaWxlc3lzdGVtQ2xvY2s6Om5v
dygpIG5vZXhjZXB0IHsKKyAgdHlwZWRlZiBjaHJvbm86OmR1cmF0aW9uPHJlcD4gX19zZWNzOwor
I2lmIGRlZmluZWQoX0xJQkNQUF9VU0VfQ0xPQ0tfR0VUVElNRSkgJiYgZGVmaW5lZChDTE9DS19S
RUFMVElNRSkKKyAgdHlwZWRlZiBjaHJvbm86OmR1cmF0aW9uPHJlcCwgbmFubz4gX19uc2VjczsK
KyAgc3RydWN0IHRpbWVzcGVjIHRwOworICBpZiAoMCAhPSBjbG9ja19nZXR0aW1lKENMT0NLX1JF
QUxUSU1FLCAmdHApKQorICAgIF9fdGhyb3dfc3lzdGVtX2Vycm9yKGVycm5vLCAiY2xvY2tfZ2V0
dGltZShDTE9DS19SRUFMVElNRSkgZmFpbGVkIik7CisgIHJldHVybiB0aW1lX3BvaW50KF9fc2Vj
cyh0cC50dl9zZWMpICsKKyAgICAgICAgICAgICAgICAgICAgY2hyb25vOjpkdXJhdGlvbl9jYXN0
PGR1cmF0aW9uPihfX25zZWNzKHRwLnR2X25zZWMpKSk7CisjZWxzZQorICB0eXBlZGVmIGNocm9u
bzo6ZHVyYXRpb248cmVwLCBtaWNybz4gX19taWNyb3NlY3M7CisgIHRpbWV2YWwgdHY7CisgIGdl
dHRpbWVvZmRheSgmdHYsIDApOworICByZXR1cm4gdGltZV9wb2ludChfX3NlY3ModHYudHZfc2Vj
KSArIF9fbWljcm9zZWNzKHR2LnR2X3VzZWMpKTsKKyNlbmRpZiAvLyBfTElCQ1BQX1VTRV9DTE9D
S19HRVRUSU1FICYmIENMT0NLX1JFQUxUSU1FCit9CisKK2ZpbGVzeXN0ZW1fZXJyb3I6On5maWxl
c3lzdGVtX2Vycm9yKCkge30KKwordm9pZCBmaWxlc3lzdGVtX2Vycm9yOjpfX2NyZWF0ZV93aGF0
KGludCBfX251bV9wYXRocykgeworICBjb25zdCBjaGFyKiBkZXJpdmVkX3doYXQgPSBzeXN0ZW1f
ZXJyb3I6OndoYXQoKTsKKyAgX19zdG9yYWdlXy0+X193aGF0XyA9IFsmXSgpIC0+IHN0cmluZyB7
CisgICAgY29uc3QgY2hhciogcDEgPSBwYXRoMSgpLm5hdGl2ZSgpLmVtcHR5KCkgPyAiXCJcIiIg
OiBwYXRoMSgpLmNfc3RyKCk7CisgICAgY29uc3QgY2hhciogcDIgPSBwYXRoMigpLm5hdGl2ZSgp
LmVtcHR5KCkgPyAiXCJcIiIgOiBwYXRoMigpLmNfc3RyKCk7CisgICAgc3dpdGNoIChfX251bV9w
YXRocykgeworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gZGV0YWlsOjpmb3JtYXRfc3RyaW5n
KCJmaWxlc3lzdGVtIGVycm9yOiAlcyIsIGRlcml2ZWRfd2hhdCk7CisgICAgY2FzZSAxOgorICAg
ICAgcmV0dXJuIGRldGFpbDo6Zm9ybWF0X3N0cmluZygiZmlsZXN5c3RlbSBlcnJvcjogJXMgWyVz
XSIsIGRlcml2ZWRfd2hhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcDEp
OworICAgIGNhc2UgMjoKKyAgICAgIHJldHVybiBkZXRhaWw6OmZvcm1hdF9zdHJpbmcoImZpbGVz
eXN0ZW0gZXJyb3I6ICVzIFslc10gWyVzXSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlcml2ZWRfd2hhdCwgcDEsIHAyKTsKKyAgICB9CisgIH0oKTsKK30KKworc3RhdGlj
IHBhdGggX19kb19hYnNvbHV0ZShjb25zdCBwYXRoJiBwLCBwYXRoKiBjd2QsIGVycm9yX2NvZGUq
IGVjKSB7CisgIGlmIChlYykKKyAgICBlYy0+Y2xlYXIoKTsKKyAgaWYgKHAuaXNfYWJzb2x1dGUo
KSkKKyAgICByZXR1cm4gcDsKKyAgKmN3ZCA9IF9fY3VycmVudF9wYXRoKGVjKTsKKyAgaWYgKGVj
ICYmICplYykKKyAgICByZXR1cm4ge307CisgIHJldHVybiAoKmN3ZCkgLyBwOworfQorCitwYXRo
IF9fYWJzb2x1dGUoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMpIHsKKyAgcGF0aCBjd2Q7
CisgIHJldHVybiBfX2RvX2Fic29sdXRlKHAsICZjd2QsIGVjKTsKK30KKworcGF0aCBfX2Nhbm9u
aWNhbChwYXRoIGNvbnN0JiBvcmlnX3AsIGVycm9yX2NvZGUqIGVjKSB7CisgIHBhdGggY3dkOwor
ICBFcnJvckhhbmRsZXI8cGF0aD4gZXJyKCJjYW5vbmljYWwiLCBlYywgJm9yaWdfcCwgJmN3ZCk7
CisKKyAgcGF0aCBwID0gX19kb19hYnNvbHV0ZShvcmlnX3AsICZjd2QsIGVjKTsKKyAgY2hhciBi
dWZmW1BBVEhfTUFYICsgMV07CisgIGNoYXIqIHJldDsKKyAgaWYgKChyZXQgPSA6OnJlYWxwYXRo
KHAuY19zdHIoKSwgYnVmZikpID09IG51bGxwdHIpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoY2Fw
dHVyZV9lcnJubygpKTsKKyAgcmV0dXJuIHtyZXR9OworfQorCit2b2lkIF9fY29weShjb25zdCBw
YXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0bywgY29weV9vcHRpb25zIG9wdGlvbnMsCisgICAgICAg
ICAgICBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJjb3B5Iiwg
ZWMsICZmcm9tLCAmdG8pOworCisgIGNvbnN0IGJvb2wgc3ltX3N0YXR1cyA9IGJvb2woCisgICAg
ICBvcHRpb25zICYgKGNvcHlfb3B0aW9uczo6Y3JlYXRlX3N5bWxpbmtzIHwgY29weV9vcHRpb25z
Ojpza2lwX3N5bWxpbmtzKSk7CisKKyAgY29uc3QgYm9vbCBzeW1fc3RhdHVzMiA9IGJvb2wob3B0
aW9ucyAmIGNvcHlfb3B0aW9uczo6Y29weV9zeW1saW5rcyk7CisKKyAgZXJyb3JfY29kZSBtX2Vj
MTsKKyAgU3RhdFQgZl9zdCA9IHt9OworICBjb25zdCBmaWxlX3N0YXR1cyBmID0gc3ltX3N0YXR1
cyB8fCBzeW1fc3RhdHVzMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZGV0YWlsOjpw
b3NpeF9sc3RhdChmcm9tLCBmX3N0LCAmbV9lYzEpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOiBkZXRhaWw6OnBvc2l4X3N0YXQoZnJvbSwgZl9zdCwgJm1fZWMxKTsKKyAgaWYgKG1fZWMx
KQorICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMxKTsKKworICBTdGF0VCB0X3N0ID0ge307Cisg
IGNvbnN0IGZpbGVfc3RhdHVzIHQgPSBzeW1fc3RhdHVzID8gZGV0YWlsOjpwb3NpeF9sc3RhdCh0
bywgdF9zdCwgJm1fZWMxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGRl
dGFpbDo6cG9zaXhfc3RhdCh0bywgdF9zdCwgJm1fZWMxKTsKKworICBpZiAobm90IHN0YXR1c19r
bm93bih0KSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjMSk7CisKKyAgaWYgKCFleGlzdHMo
ZikgfHwgaXNfb3RoZXIoZikgfHwgaXNfb3RoZXIodCkgfHwKKyAgICAgIChpc19kaXJlY3Rvcnko
ZikgJiYgaXNfcmVndWxhcl9maWxlKHQpKSB8fAorICAgICAgZGV0YWlsOjpzdGF0X2VxdWl2YWxl
bnQoZl9zdCwgdF9zdCkpIHsKKyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpmdW5jdGlvbl9u
b3Rfc3VwcG9ydGVkKTsKKyAgfQorCisgIGlmIChlYykKKyAgICBlYy0+Y2xlYXIoKTsKKworICBp
ZiAoaXNfc3ltbGluayhmKSkgeworICAgIGlmIChib29sKGNvcHlfb3B0aW9uczo6c2tpcF9zeW1s
aW5rcyAmIG9wdGlvbnMpKSB7CisgICAgICAvLyBkbyBub3RoaW5nCisgICAgfSBlbHNlIGlmIChu
b3QgZXhpc3RzKHQpKSB7CisgICAgICBfX2NvcHlfc3ltbGluayhmcm9tLCB0bywgZWMpOworICAg
IH0gZWxzZSB7CisgICAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpmaWxlX2V4aXN0cyk7Cisg
ICAgfQorICAgIHJldHVybjsKKyAgfSBlbHNlIGlmIChpc19yZWd1bGFyX2ZpbGUoZikpIHsKKyAg
ICBpZiAoYm9vbChjb3B5X29wdGlvbnM6OmRpcmVjdG9yaWVzX29ubHkgJiBvcHRpb25zKSkgewor
ICAgICAgLy8gZG8gbm90aGluZworICAgIH0gZWxzZSBpZiAoYm9vbChjb3B5X29wdGlvbnM6OmNy
ZWF0ZV9zeW1saW5rcyAmIG9wdGlvbnMpKSB7CisgICAgICBfX2NyZWF0ZV9zeW1saW5rKGZyb20s
IHRvLCBlYyk7CisgICAgfSBlbHNlIGlmIChib29sKGNvcHlfb3B0aW9uczo6Y3JlYXRlX2hhcmRf
bGlua3MgJiBvcHRpb25zKSkgeworICAgICAgX19jcmVhdGVfaGFyZF9saW5rKGZyb20sIHRvLCBl
Yyk7CisgICAgfSBlbHNlIGlmIChpc19kaXJlY3RvcnkodCkpIHsKKyAgICAgIF9fY29weV9maWxl
KGZyb20sIHRvIC8gZnJvbS5maWxlbmFtZSgpLCBvcHRpb25zLCBlYyk7CisgICAgfSBlbHNlIHsK
KyAgICAgIF9fY29weV9maWxlKGZyb20sIHRvLCBvcHRpb25zLCBlYyk7CisgICAgfQorICAgIHJl
dHVybjsKKyAgfSBlbHNlIGlmIChpc19kaXJlY3RvcnkoZikgJiYgYm9vbChjb3B5X29wdGlvbnM6
OmNyZWF0ZV9zeW1saW5rcyAmIG9wdGlvbnMpKSB7CisgICAgcmV0dXJuIGVyci5yZXBvcnQoZXJy
Yzo6aXNfYV9kaXJlY3RvcnkpOworICB9IGVsc2UgaWYgKGlzX2RpcmVjdG9yeShmKSAmJiAoYm9v
bChjb3B5X29wdGlvbnM6OnJlY3Vyc2l2ZSAmIG9wdGlvbnMpIHx8CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb3B5X29wdGlvbnM6Om5vbmUgPT0gb3B0aW9ucykpIHsKKworICAg
IGlmICghZXhpc3RzKHQpKSB7CisgICAgICAvLyBjcmVhdGUgZGlyZWN0b3J5IHRvIHdpdGggYXR0
cmlidXRlcyBmcm9tICdmcm9tJy4KKyAgICAgIF9fY3JlYXRlX2RpcmVjdG9yeSh0bywgZnJvbSwg
ZWMpOworICAgICAgaWYgKGVjICYmICplYykgeworICAgICAgICByZXR1cm47CisgICAgICB9Cisg
ICAgfQorICAgIGRpcmVjdG9yeV9pdGVyYXRvciBpdCA9CisgICAgICAgIGVjID8gZGlyZWN0b3J5
X2l0ZXJhdG9yKGZyb20sICplYykgOiBkaXJlY3RvcnlfaXRlcmF0b3IoZnJvbSk7CisgICAgaWYg
KGVjICYmICplYykgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlcnJvcl9jb2RlIG1fZWMy
OworICAgIGZvciAoOyBpdCAhPSBkaXJlY3RvcnlfaXRlcmF0b3IoKTsgaXQuaW5jcmVtZW50KG1f
ZWMyKSkgeworICAgICAgaWYgKG1fZWMyKSB7CisgICAgICAgIHJldHVybiBlcnIucmVwb3J0KG1f
ZWMyKTsKKyAgICAgIH0KKyAgICAgIF9fY29weShpdC0+cGF0aCgpLCB0byAvIGl0LT5wYXRoKCku
ZmlsZW5hbWUoKSwKKyAgICAgICAgICAgICBvcHRpb25zIHwgY29weV9vcHRpb25zOjpfX2luX3Jl
Y3Vyc2l2ZV9jb3B5LCBlYyk7CisgICAgICBpZiAoZWMgJiYgKmVjKSB7CisgICAgICAgIHJldHVy
bjsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworbmFtZXNwYWNlIGRldGFpbCB7CituYW1lc3Bh
Y2UgeworCisjaWZkZWYgX0xJQkNQUF9VU0VfU0VOREZJTEUKK2Jvb2wgY29weV9maWxlX2ltcGxf
c2VuZGZpbGUoRmlsZURlc2NyaXB0b3ImIHJlYWRfZmQsIEZpbGVEZXNjcmlwdG9yJiB3cml0ZV9m
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgZWMpIHsKKworICBz
aXplX3QgY291bnQgPSByZWFkX2ZkLmdldF9zdGF0KCkuc3Rfc2l6ZTsKKyAgZG8geworICAgIHNz
aXplX3QgcmVzOworICAgIGlmICgocmVzID0gOjpzZW5kZmlsZSh3cml0ZV9mZC5mZCwgcmVhZF9m
ZC5mZCwgbnVsbHB0ciwgY291bnQpKSA9PSAtMSkgeworICAgICAgZWMgPSBjYXB0dXJlX2Vycm5v
KCk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGNvdW50IC09IHJlczsKKyAgfSB3
aGlsZSAoY291bnQgPiAwKTsKKworICBlYy5jbGVhcigpOworCisgIHJldHVybiB0cnVlOworfQor
I2VsaWYgZGVmaW5lZChfTElCQ1BQX1VTRV9DT1BZRklMRSkKK2Jvb2wgY29weV9maWxlX2ltcGxf
Y29weWZpbGUoRmlsZURlc2NyaXB0b3ImIHJlYWRfZmQsIEZpbGVEZXNjcmlwdG9yJiB3cml0ZV9m
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgZWMpIHsKKyAgc3Ry
dWN0IENvcHlGaWxlU3RhdGUgeworICAgIGNvcHlmaWxlX3N0YXRlX3Qgc3RhdGU7CisgICAgQ29w
eUZpbGVTdGF0ZSgpIHsgc3RhdGUgPSBjb3B5ZmlsZV9zdGF0ZV9hbGxvYygpOyB9CisgICAgfkNv
cHlGaWxlU3RhdGUoKSB7IGNvcHlmaWxlX3N0YXRlX2ZyZWUoc3RhdGUpOyB9CisKKyAgcHJpdmF0
ZToKKyAgICBDb3B5RmlsZVN0YXRlKENvcHlGaWxlU3RhdGUgY29uc3QmKSA9IGRlbGV0ZTsKKyAg
ICBDb3B5RmlsZVN0YXRlJiBvcGVyYXRvcj0oQ29weUZpbGVTdGF0ZSBjb25zdCYpID0gZGVsZXRl
OworICB9OworCisgIENvcHlGaWxlU3RhdGUgY2ZzOworICBpZiAoZmNvcHlmaWxlKHJlYWRfZmQu
ZmQsIHdyaXRlX2ZkLmZkLCBjZnMuc3RhdGUsIENPUFlGSUxFX0RBVEEpIDwgMCkgeworICAgIGVj
ID0gY2FwdHVyZV9lcnJubygpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIGVjLmNsZWFy
KCk7CisgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKKy8vIFRoaXMgZnVuY3Rpb24gaXMgZ3Vh
cmRlZCBieSBpZmRlZidzIGluIEp1bmlwZXIgZHVlIHRvIHRoZSBjdXJyZW50CisvLyBjbGFuZyBu
b3Qgc3VwcG9ydGluZyBhbiBfX29wZW4gZnVuY3Rpb24gb24gaWZzdHJlYW0gYW5kIG9mc3RyZWFt
LgorI2lmICFkZWZpbmVkKF9MSUJDUFBfVVNFX1NFTkRGSUxFKSAmJiAhZGVmaW5lZChfTElCQ1BQ
X1VTRV9DT1BZRklMRSkKKy8vIE5vdGU6IFRoaXMgZnVuY3Rpb24gaXNuJ3QgZ3VhcmRlZCBieSBp
ZmRlZidzIGV2ZW4gdGhvdWdoIGl0IG1heSBiZSB1bnVzZWQKKy8vIGluIG9yZGVyIHRvIGFzc3Vy
ZSBpdCBzdGlsbCBjb21waWxlcy4KK19fYXR0cmlidXRlX18oKHVudXNlZCkpIGJvb2wgY29weV9m
aWxlX2ltcGxfZGVmYXVsdChGaWxlRGVzY3JpcHRvciYgcmVhZF9mZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlRGVzY3JpcHRvciYgd3Jp
dGVfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXJyb3JfY29kZSYgZWMpIHsKKyAgaWZzdHJlYW0gaW47CisgIGluLl9fb3BlbihyZWFkX2Zk
LmZkLCBpb3M6OmJpbmFyeSk7CisgIGlmICghaW4uaXNfb3BlbigpKSB7CisgICAgLy8gVGhpcyBh
c3N1bWVzIHRoYXQgX19vcGVuIGRpZG4ndCByZXNldCB0aGUgZXJyb3IgY29kZS4KKyAgICBlYyA9
IGNhcHR1cmVfZXJybm8oKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgb2ZzdHJlYW0gb3V0
OworICBvdXQuX19vcGVuKHdyaXRlX2ZkLmZkLCBpb3M6OmJpbmFyeSk7CisgIGlmICghb3V0Lmlz
X29wZW4oKSkgeworICAgIGVjID0gY2FwdHVyZV9lcnJubygpOworICAgIHJldHVybiBmYWxzZTsK
KyAgfQorCisgIGlmIChpbi5nb29kKCkgJiYgb3V0Lmdvb2QoKSkgeworICAgIHVzaW5nIEluSXQg
PSBpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+OworICAgIHVzaW5nIE91dEl0ID0gb3N0cmVhbWJ1
Zl9pdGVyYXRvcjxjaGFyPjsKKyAgICBJbkl0IGJpbihpbik7CisgICAgSW5JdCBlaW47CisgICAg
T3V0SXQgYm91dChvdXQpOworICAgIGNvcHkoYmluLCBlaW4sIGJvdXQpOworICB9CisgIGlmIChv
dXQuZmFpbCgpIHx8IGluLmZhaWwoKSkgeworICAgIGVjID0gbWFrZV9lcnJvcl9jb2RlKGVycmM6
OmlvX2Vycm9yKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBlYy5jbGVhcigpOworICBy
ZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCitib29sIGNvcHlfZmlsZV9pbXBsKEZpbGVEZXNjcmlw
dG9yJiBmcm9tLCBGaWxlRGVzY3JpcHRvciYgdG8sIGVycm9yX2NvZGUmIGVjKSB7CisjaWYgZGVm
aW5lZChfTElCQ1BQX1VTRV9TRU5ERklMRSkKKyAgcmV0dXJuIGNvcHlfZmlsZV9pbXBsX3NlbmRm
aWxlKGZyb20sIHRvLCBlYyk7CisjZWxpZiBkZWZpbmVkKF9MSUJDUFBfVVNFX0NPUFlGSUxFKQor
ICByZXR1cm4gY29weV9maWxlX2ltcGxfY29weWZpbGUoZnJvbSwgdG8sIGVjKTsKKyNlbHNlCisg
IHJldHVybiBjb3B5X2ZpbGVfaW1wbF9kZWZhdWx0KGZyb20sIHRvLCBlYyk7CisjZW5kaWYKK30K
KworfSAvLyBuYW1lc3BhY2UKK30gLy8gbmFtZXNwYWNlIGRldGFpbAorCitib29sIF9fY29weV9m
aWxlKGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvLCBjb3B5X29wdGlvbnMgb3B0aW9u
cywKKyAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSogZWMpIHsKKyAgdXNpbmcgZGV0YWlsOjpG
aWxlRGVzY3JpcHRvcjsKKyAgRXJyb3JIYW5kbGVyPGJvb2w+IGVycigiY29weV9maWxlIiwgZWMs
ICZ0bywgJmZyb20pOworCisgIGVycm9yX2NvZGUgbV9lYzsKKyAgRmlsZURlc2NyaXB0b3IgZnJv
bV9mZCA9CisgICAgICBGaWxlRGVzY3JpcHRvcjo6Y3JlYXRlX3dpdGhfc3RhdHVzKCZmcm9tLCBt
X2VjLCBPX1JET05MWSB8IE9fTk9OQkxPQ0spOworICBpZiAobV9lYykKKyAgICByZXR1cm4gZXJy
LnJlcG9ydChtX2VjKTsKKworICBhdXRvIGZyb21fc3QgPSBmcm9tX2ZkLmdldF9zdGF0dXMoKTsK
KyAgU3RhdFQgY29uc3QmIGZyb21fc3RhdCA9IGZyb21fZmQuZ2V0X3N0YXQoKTsKKyAgaWYgKCFp
c19yZWd1bGFyX2ZpbGUoZnJvbV9zdCkpIHsKKyAgICBpZiAobm90IG1fZWMpCisgICAgICBtX2Vj
ID0gbWFrZV9lcnJvcl9jb2RlKGVycmM6Om5vdF9zdXBwb3J0ZWQpOworICAgIHJldHVybiBlcnIu
cmVwb3J0KG1fZWMpOworICB9CisKKyAgY29uc3QgYm9vbCBza2lwX2V4aXN0aW5nID0gYm9vbChj
b3B5X29wdGlvbnM6OnNraXBfZXhpc3RpbmcgJiBvcHRpb25zKTsKKyAgY29uc3QgYm9vbCB1cGRh
dGVfZXhpc3RpbmcgPSBib29sKGNvcHlfb3B0aW9uczo6dXBkYXRlX2V4aXN0aW5nICYgb3B0aW9u
cyk7CisgIGNvbnN0IGJvb2wgb3ZlcndyaXRlX2V4aXN0aW5nID0KKyAgICAgIGJvb2woY29weV9v
cHRpb25zOjpvdmVyd3JpdGVfZXhpc3RpbmcgJiBvcHRpb25zKTsKKworICBTdGF0VCB0b19zdGF0
X3BhdGg7CisgIGZpbGVfc3RhdHVzIHRvX3N0ID0gZGV0YWlsOjpwb3NpeF9zdGF0KHRvLCB0b19z
dGF0X3BhdGgsICZtX2VjKTsKKyAgaWYgKCFzdGF0dXNfa25vd24odG9fc3QpKQorICAgIHJldHVy
biBlcnIucmVwb3J0KG1fZWMpOworCisgIGNvbnN0IGJvb2wgdG9fZXhpc3RzID0gZXhpc3RzKHRv
X3N0KTsKKyAgaWYgKHRvX2V4aXN0cyAmJiAhaXNfcmVndWxhcl9maWxlKHRvX3N0KSkKKyAgICBy
ZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpub3Rfc3VwcG9ydGVkKTsKKworICBpZiAodG9fZXhpc3Rz
ICYmIGRldGFpbDo6c3RhdF9lcXVpdmFsZW50KGZyb21fc3RhdCwgdG9fc3RhdF9wYXRoKSkKKyAg
ICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpmaWxlX2V4aXN0cyk7CisKKyAgaWYgKHRvX2V4aXN0
cyAmJiBza2lwX2V4aXN0aW5nKQorICAgIHJldHVybiBmYWxzZTsKKworICBib29sIFNob3VsZENv
cHkgPSBbJl0oKSB7CisgICAgaWYgKHRvX2V4aXN0cyAmJiB1cGRhdGVfZXhpc3RpbmcpIHsKKyAg
ICAgIGF1dG8gZnJvbV90aW1lID0gZGV0YWlsOjpleHRyYWN0X210aW1lKGZyb21fc3RhdCk7Cisg
ICAgICBhdXRvIHRvX3RpbWUgPSBkZXRhaWw6OmV4dHJhY3RfbXRpbWUodG9fc3RhdF9wYXRoKTsK
KyAgICAgIGlmIChmcm9tX3RpbWUudHZfc2VjIDwgdG9fdGltZS50dl9zZWMpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgIGlmIChmcm9tX3RpbWUudHZfc2VjID09IHRvX3RpbWUudHZfc2Vj
ICYmCisgICAgICAgICAgZnJvbV90aW1lLnR2X25zZWMgPD0gdG9fdGltZS50dl9uc2VjKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCF0
b19leGlzdHMgfHwgb3ZlcndyaXRlX2V4aXN0aW5nKQorICAgICAgcmV0dXJuIHRydWU7CisgICAg
cmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6ZmlsZV9leGlzdHMpOworICB9KCk7CisgIGlmICghU2hv
dWxkQ29weSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgLy8gRG9uJ3QgdHJ1bmNhdGUgcmlnaHQg
YXdheS4gV2UgbWF5IG5vdCBiZSBvcGVuaW5nIHRoZSBmaWxlIHdlIG9yaWdpbmFsbHkKKyAgLy8g
bG9va2VkIGF0OyB3ZSdsbCBjaGVjayB0aGlzIGxhdGVyLgorICBpbnQgdG9fb3Blbl9mbGFncyA9
IE9fV1JPTkxZOworICBpZiAoIXRvX2V4aXN0cykKKyAgICB0b19vcGVuX2ZsYWdzIHw9IE9fQ1JF
QVQ7CisgIEZpbGVEZXNjcmlwdG9yIHRvX2ZkID0gRmlsZURlc2NyaXB0b3I6OmNyZWF0ZV93aXRo
X3N0YXR1cygKKyAgICAgICZ0bywgbV9lYywgdG9fb3Blbl9mbGFncywgZnJvbV9zdGF0LnN0X21v
ZGUpOworICBpZiAobV9lYykKKyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKKworICBpZiAo
dG9fZXhpc3RzKSB7CisgICAgLy8gQ2hlY2sgdGhhdCB0aGUgZmlsZSB3ZSBpbml0aWFsbHkgc3Rh
dCdlZCBpcyBlcXVpdmFsZW50IHRvIHRoZSBvbmUKKyAgICAvLyB3ZSBvcGVuZWQuCisgICAgLy8g
RklYTUU6IHJlcG9ydCB0aGlzIGJldHRlci4KKyAgICBpZiAoIWRldGFpbDo6c3RhdF9lcXVpdmFs
ZW50KHRvX3N0YXRfcGF0aCwgdG9fZmQuZ2V0X3N0YXQoKSkpCisgICAgICByZXR1cm4gZXJyLnJl
cG9ydChlcnJjOjpiYWRfZmlsZV9kZXNjcmlwdG9yKTsKKworICAgIC8vIFNldCB0aGUgcGVybWlz
c2lvbnMgYW5kIHRydW5jYXRlIHRoZSBmaWxlIHdlIG9wZW5lZC4KKyAgICBpZiAoZGV0YWlsOjpw
b3NpeF9mY2htb2QodG9fZmQsIGZyb21fc3RhdCwgbV9lYykpCisgICAgICByZXR1cm4gZXJyLnJl
cG9ydChtX2VjKTsKKyAgICBpZiAoZGV0YWlsOjpwb3NpeF9mdHJ1bmNhdGUodG9fZmQsIDAsIG1f
ZWMpKQorICAgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7CisgIH0KKworICBpZiAoIWNvcHlf
ZmlsZV9pbXBsKGZyb21fZmQsIHRvX2ZkLCBtX2VjKSkgeworICAgIC8vIEZJWE1FOiBSZW1vdmUg
dGhlIGRlc3QgZmlsZSBpZiB3ZSBmYWlsZWQsIGFuZCBpdCBkaWRuJ3QgZXhpc3QgcHJldmlvdXNs
eS4KKyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKKyAgfQorCisgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIF9fY29weV9zeW1saW5rKGNvbnN0IHBhdGgmIGV4aXN0aW5nX3N5bWxpbmssIGNv
bnN0IHBhdGgmIG5ld19zeW1saW5rLAorICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlKiBl
YykgeworICBjb25zdCBwYXRoIHJlYWxfcGF0aChfX3JlYWRfc3ltbGluayhleGlzdGluZ19zeW1s
aW5rLCBlYykpOworICBpZiAoZWMgJiYgKmVjKSB7CisgICAgcmV0dXJuOworICB9CisgIC8vIE5P
VEU6IHByb3Bvc2FsIHNheXMgeW91IHNob3VsZCBkZXRlY3QgaWYgeW91IHNob3VsZCBjYWxsCisg
IC8vIGNyZWF0ZV9zeW1saW5rIG9yIGNyZWF0ZV9kaXJlY3Rvcnlfc3ltbGluay4gSSBkb24ndCB0
aGluayB0aGlzCisgIC8vIGlzIG5lZWRlZCB3aXRoIFBPU0lYCisgIF9fY3JlYXRlX3N5bWxpbmso
cmVhbF9wYXRoLCBuZXdfc3ltbGluaywgZWMpOworfQorCitib29sIF9fY3JlYXRlX2RpcmVjdG9y
aWVzKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjxib29s
PiBlcnIoImNyZWF0ZV9kaXJlY3RvcmllcyIsIGVjLCAmcCk7CisKKyAgZXJyb3JfY29kZSBtX2Vj
OworICBhdXRvIGNvbnN0IHN0ID0gZGV0YWlsOjpwb3NpeF9zdGF0KHAsICZtX2VjKTsKKyAgaWYg
KCFzdGF0dXNfa25vd24oc3QpKQorICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMpOworICBlbHNl
IGlmIChpc19kaXJlY3Rvcnkoc3QpKQorICAgIHJldHVybiBmYWxzZTsKKyAgZWxzZSBpZiAoZXhp
c3RzKHN0KSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpmaWxlX2V4aXN0cyk7CisKKyAg
Y29uc3QgcGF0aCBwYXJlbnQgPSBwLnBhcmVudF9wYXRoKCk7CisgIGlmICghcGFyZW50LmVtcHR5
KCkpIHsKKyAgICBjb25zdCBmaWxlX3N0YXR1cyBwYXJlbnRfc3QgPSBzdGF0dXMocGFyZW50LCBt
X2VjKTsKKyAgICBpZiAobm90IHN0YXR1c19rbm93bihwYXJlbnRfc3QpKQorICAgICAgcmV0dXJu
IGVyci5yZXBvcnQobV9lYyk7CisgICAgaWYgKG5vdCBleGlzdHMocGFyZW50X3N0KSkgeworICAg
ICAgX19jcmVhdGVfZGlyZWN0b3JpZXMocGFyZW50LCBlYyk7CisgICAgICBpZiAoZWMgJiYgKmVj
KSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJu
IF9fY3JlYXRlX2RpcmVjdG9yeShwLCBlYyk7Cit9CisKK2Jvb2wgX19jcmVhdGVfZGlyZWN0b3J5
KGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjxib29sPiBl
cnIoImNyZWF0ZV9kaXJlY3RvcnkiLCBlYywgJnApOworCisgIGlmICg6Om1rZGlyKHAuY19zdHIo
KSwgc3RhdGljX2Nhc3Q8aW50PihwZXJtczo6YWxsKSkgPT0gMCkKKyAgICByZXR1cm4gdHJ1ZTsK
KyAgaWYgKGVycm5vICE9IEVFWElTVCkKKyAgICBlcnIucmVwb3J0KGNhcHR1cmVfZXJybm8oKSk7
CisgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBfX2NyZWF0ZV9kaXJlY3RvcnkocGF0aCBjb25z
dCYgcCwgcGF0aCBjb25zdCYgYXR0cmlidXRlcywgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JI
YW5kbGVyPGJvb2w+IGVycigiY3JlYXRlX2RpcmVjdG9yeSIsIGVjLCAmcCwgJmF0dHJpYnV0ZXMp
OworCisgIFN0YXRUIGF0dHJfc3RhdDsKKyAgZXJyb3JfY29kZSBtZWM7CisgIGF1dG8gc3QgPSBk
ZXRhaWw6OnBvc2l4X3N0YXQoYXR0cmlidXRlcywgYXR0cl9zdGF0LCAmbWVjKTsKKyAgaWYgKCFz
dGF0dXNfa25vd24oc3QpKQorICAgIHJldHVybiBlcnIucmVwb3J0KG1lYyk7CisgIGlmICghaXNf
ZGlyZWN0b3J5KHN0KSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpub3RfYV9kaXJlY3Rv
cnksCisgICAgICAgICAgICAgICAgICAgICAgInRoZSBzcGVjaWZpZWQgYXR0cmlidXRlIHBhdGgg
aXMgaW52YWxpZCIpOworCisgIGlmICg6Om1rZGlyKHAuY19zdHIoKSwgYXR0cl9zdGF0LnN0X21v
ZGUpID09IDApCisgICAgcmV0dXJuIHRydWU7CisgIGlmIChlcnJubyAhPSBFRVhJU1QpCisgICAg
ZXJyLnJlcG9ydChjYXB0dXJlX2Vycm5vKCkpOworICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQg
X19jcmVhdGVfZGlyZWN0b3J5X3N5bWxpbmsocGF0aCBjb25zdCYgZnJvbSwgcGF0aCBjb25zdCYg
dG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUqIGVjKSB7Cisg
IEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoImNyZWF0ZV9kaXJlY3Rvcnlfc3ltbGluayIsIGVjLCAm
ZnJvbSwgJnRvKTsKKyAgaWYgKDo6c3ltbGluayhmcm9tLmNfc3RyKCksIHRvLmNfc3RyKCkpICE9
IDApCisgICAgcmV0dXJuIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJubygpKTsKK30KKwordm9pZCBf
X2NyZWF0ZV9oYXJkX2xpbmsoY29uc3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8sIGVycm9y
X2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoImNyZWF0ZV9oYXJkX2xpbmsi
LCBlYywgJmZyb20sICZ0byk7CisgIGlmICg6OmxpbmsoZnJvbS5jX3N0cigpLCB0by5jX3N0cigp
KSA9PSAtMSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChjYXB0dXJlX2Vycm5vKCkpOworfQorCit2
b2lkIF9fY3JlYXRlX3N5bWxpbmsocGF0aCBjb25zdCYgZnJvbSwgcGF0aCBjb25zdCYgdG8sIGVy
cm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoImNyZWF0ZV9zeW1saW5r
IiwgZWMsICZmcm9tLCAmdG8pOworICBpZiAoOjpzeW1saW5rKGZyb20uY19zdHIoKSwgdG8uY19z
dHIoKSkgPT0gLTEpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJubygpKTsKK30K
KworcGF0aCBfX2N1cnJlbnRfcGF0aChlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8
cGF0aD4gZXJyKCJjdXJyZW50X3BhdGgiLCBlYyk7CisKKyAgYXV0byBzaXplID0gOjpwYXRoY29u
ZigiLiIsIF9QQ19QQVRIX01BWCk7CisgIF9MSUJDUFBfQVNTRVJUKHNpemUgPj0gMCwgInBhdGhj
b25mIHJldHVybmVkIGEgMCBhcyBtYXggc2l6ZSIpOworCisgIGF1dG8gYnVmZiA9IHVuaXF1ZV9w
dHI8Y2hhcltdPihuZXcgY2hhcltzaXplICsgMV0pOworICBjaGFyKiByZXQ7CisgIGlmICgocmV0
ID0gOjpnZXRjd2QoYnVmZi5nZXQoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihzaXplKSkpID09IG51
bGxwdHIpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJubygpLCAiY2FsbCB0byBn
ZXRjd2QgZmFpbGVkIik7CisKKyAgcmV0dXJuIHtidWZmLmdldCgpfTsKK30KKwordm9pZCBfX2N1
cnJlbnRfcGF0aChjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRs
ZXI8dm9pZD4gZXJyKCJjdXJyZW50X3BhdGgiLCBlYywgJnApOworICBpZiAoOjpjaGRpcihwLmNf
c3RyKCkpID09IC0xKQorICAgIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJubygpKTsKK30KKworYm9v
bCBfX2VxdWl2YWxlbnQoY29uc3QgcGF0aCYgcDEsIGNvbnN0IHBhdGgmIHAyLCBlcnJvcl9jb2Rl
KiBlYykgeworICBFcnJvckhhbmRsZXI8Ym9vbD4gZXJyKCJlcXVpdmFsZW50IiwgZWMsICZwMSwg
JnAyKTsKKworICBlcnJvcl9jb2RlIGVjMSwgZWMyOworICBTdGF0VCBzdDEgPSB7fSwgc3QyID0g
e307CisgIGF1dG8gczEgPSBkZXRhaWw6OnBvc2l4X3N0YXQocDEubmF0aXZlKCksIHN0MSwgJmVj
MSk7CisgIGlmICghZXhpc3RzKHMxKSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpub3Rf
c3VwcG9ydGVkKTsKKyAgYXV0byBzMiA9IGRldGFpbDo6cG9zaXhfc3RhdChwMi5uYXRpdmUoKSwg
c3QyLCAmZWMyKTsKKyAgaWYgKCFleGlzdHMoczIpKQorICAgIHJldHVybiBlcnIucmVwb3J0KGVy
cmM6Om5vdF9zdXBwb3J0ZWQpOworCisgIHJldHVybiBkZXRhaWw6OnN0YXRfZXF1aXZhbGVudChz
dDEsIHN0Mik7Cit9CisKK3VpbnRtYXhfdCBfX2ZpbGVfc2l6ZShjb25zdCBwYXRoJiBwLCBlcnJv
cl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8dWludG1heF90PiBlcnIoImZpbGVfc2l6ZSIs
IGVjLCAmcCk7CisKKyAgZXJyb3JfY29kZSBtX2VjOworICBTdGF0VCBzdDsKKyAgZmlsZV9zdGF0
dXMgZnN0ID0gZGV0YWlsOjpwb3NpeF9zdGF0KHAsIHN0LCAmbV9lYyk7CisgIGlmICghZXhpc3Rz
KGZzdCkgfHwgIWlzX3JlZ3VsYXJfZmlsZShmc3QpKSB7CisgICAgZXJyYyBlcnJvcl9raW5kID0K
KyAgICAgICAgaXNfZGlyZWN0b3J5KGZzdCkgPyBlcnJjOjppc19hX2RpcmVjdG9yeSA6IGVycmM6
Om5vdF9zdXBwb3J0ZWQ7CisgICAgaWYgKCFtX2VjKQorICAgICAgbV9lYyA9IG1ha2VfZXJyb3Jf
Y29kZShlcnJvcl9raW5kKTsKKyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKKyAgfQorICAv
LyBpc19yZWd1bGFyX2ZpbGUocCkgPT0gdHJ1ZQorICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludG1h
eF90PihzdC5zdF9zaXplKTsKK30KKwordWludG1heF90IF9faGFyZF9saW5rX2NvdW50KGNvbnN0
IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjx1aW50bWF4X3Q+IGVy
cigiaGFyZF9saW5rX2NvdW50IiwgZWMsICZwKTsKKworICBlcnJvcl9jb2RlIG1fZWM7CisgIFN0
YXRUIHN0OworICBkZXRhaWw6OnBvc2l4X3N0YXQocCwgc3QsICZtX2VjKTsKKyAgaWYgKG1fZWMp
CisgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7CisgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50
bWF4X3Q+KHN0LnN0X25saW5rKTsKK30KKworYm9vbCBfX2ZzX2lzX2VtcHR5KGNvbnN0IHBhdGgm
IHAsIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjxib29sPiBlcnIoImlzX2VtcHR5
IiwgZWMsICZwKTsKKworICBlcnJvcl9jb2RlIG1fZWM7CisgIFN0YXRUIHBzdDsKKyAgYXV0byBz
dCA9IGRldGFpbDo6cG9zaXhfc3RhdChwLCBwc3QsICZtX2VjKTsKKyAgaWYgKG1fZWMpCisgICAg
cmV0dXJuIGVyci5yZXBvcnQobV9lYyk7CisgIGVsc2UgaWYgKCFpc19kaXJlY3Rvcnkoc3QpICYm
ICFpc19yZWd1bGFyX2ZpbGUoc3QpKQorICAgIHJldHVybiBlcnIucmVwb3J0KGVycmM6Om5vdF9z
dXBwb3J0ZWQpOworICBlbHNlIGlmIChpc19kaXJlY3Rvcnkoc3QpKSB7CisgICAgYXV0byBpdCA9
IGVjID8gZGlyZWN0b3J5X2l0ZXJhdG9yKHAsICplYykgOiBkaXJlY3RvcnlfaXRlcmF0b3IocCk7
CisgICAgaWYgKGVjICYmICplYykKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gaXQg
PT0gZGlyZWN0b3J5X2l0ZXJhdG9ye307CisgIH0gZWxzZSBpZiAoaXNfcmVndWxhcl9maWxlKHN0
KSkKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludG1heF90Pihwc3Quc3Rfc2l6ZSkgPT0gMDsK
KworICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7Cit9CisKK3N0YXRpYyBmaWxlX3RpbWVfdHlwZSBf
X2V4dHJhY3RfbGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgmIHAsIGNvbnN0IFN0YXRUJiBzdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2Nv
ZGUqIGVjKSB7CisgIHVzaW5nIGRldGFpbDo6ZnNfdGltZTsKKyAgRXJyb3JIYW5kbGVyPGZpbGVf
dGltZV90eXBlPiBlcnIoImxhc3Rfd3JpdGVfdGltZSIsIGVjLCAmcCk7CisKKyAgYXV0byB0cyA9
IGRldGFpbDo6ZXh0cmFjdF9tdGltZShzdCk7CisgIGlmICghZnNfdGltZTo6aXNfcmVwcmVzZW50
YWJsZSh0cykpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6dmFsdWVfdG9vX2xhcmdlKTsK
KworICByZXR1cm4gZnNfdGltZTo6Y29udmVydF9mcm9tX3RpbWVzcGVjKHRzKTsKK30KKworZmls
ZV90aW1lX3R5cGUgX19sYXN0X3dyaXRlX3RpbWUoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSog
ZWMpIHsKKyAgdXNpbmcgbmFtZXNwYWNlIGNocm9ubzsKKyAgRXJyb3JIYW5kbGVyPGZpbGVfdGlt
ZV90eXBlPiBlcnIoImxhc3Rfd3JpdGVfdGltZSIsIGVjLCAmcCk7CisKKyAgZXJyb3JfY29kZSBt
X2VjOworICBTdGF0VCBzdDsKKyAgZGV0YWlsOjpwb3NpeF9zdGF0KHAsIHN0LCAmbV9lYyk7Cisg
IGlmIChtX2VjKQorICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMpOworICByZXR1cm4gX19leHRy
YWN0X2xhc3Rfd3JpdGVfdGltZShwLCBzdCwgZWMpOworfQorCit2b2lkIF9fbGFzdF93cml0ZV90
aW1lKGNvbnN0IHBhdGgmIHAsIGZpbGVfdGltZV90eXBlIG5ld190aW1lLCBlcnJvcl9jb2RlKiBl
YykgeworICB1c2luZyBkZXRhaWw6OmZzX3RpbWU7CisgIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIo
Imxhc3Rfd3JpdGVfdGltZSIsIGVjLCAmcCk7CisKKyAgZXJyb3JfY29kZSBtX2VjOworICBhcnJh
eTxUaW1lU3BlYywgMj4gdGJ1ZjsKKyNpZiAhZGVmaW5lZChfTElCQ1BQX1VTRV9VVElNRU5TQVQp
CisgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gaGFzIGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBk
ZXRlcm1pbmluZyB0aGUKKyAgLy8gbGFzdCBhY2Nlc3MgdGltZSBhbmQgYXR0ZW1wdGluZyB0byBz
ZXQgaXQgdG8gdGhlIHNhbWUgdmFsdWUgdXNpbmcKKyAgLy8gOjp1dGltZXMKKyAgU3RhdFQgc3Q7
CisgIGZpbGVfc3RhdHVzIGZzdCA9IGRldGFpbDo6cG9zaXhfc3RhdChwLCBzdCwgJm1fZWMpOwor
ICBpZiAobV9lYykKKyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKKyAgdGJ1ZlswXSA9IGRl
dGFpbDo6ZXh0cmFjdF9hdGltZShzdCk7CisjZWxzZQorICB0YnVmWzBdLnR2X3NlYyA9IDA7Cisg
IHRidWZbMF0udHZfbnNlYyA9IFVUSU1FX09NSVQ7CisjZW5kaWYKKyAgaWYgKCFmc190aW1lOjpj
b252ZXJ0X3RvX3RpbWVzcGVjKHRidWZbMV0sIG5ld190aW1lKSkKKyAgICByZXR1cm4gZXJyLnJl
cG9ydChlcnJjOjp2YWx1ZV90b29fbGFyZ2UpOworCisgIGRldGFpbDo6c2V0X2ZpbGVfdGltZXMo
cCwgdGJ1ZiwgbV9lYyk7CisgIGlmIChtX2VjKQorICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMp
OworfQorCit2b2lkIF9fcGVybWlzc2lvbnMoY29uc3QgcGF0aCYgcCwgcGVybXMgcHJtcywgcGVy
bV9vcHRpb25zIG9wdHMsCisgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSogZWMpIHsKKyAg
RXJyb3JIYW5kbGVyPHZvaWQ+IGVycigicGVybWlzc2lvbnMiLCBlYywgJnApOworCisgIGF1dG8g
aGFzX29wdCA9IFsmXShwZXJtX29wdGlvbnMgbykgeyByZXR1cm4gYm9vbChvICYgb3B0cyk7IH07
CisgIGNvbnN0IGJvb2wgcmVzb2x2ZV9zeW1saW5rcyA9ICFoYXNfb3B0KHBlcm1fb3B0aW9uczo6
bm9mb2xsb3cpOworICBjb25zdCBib29sIGFkZF9wZXJtcyA9IGhhc19vcHQocGVybV9vcHRpb25z
OjphZGQpOworICBjb25zdCBib29sIHJlbW92ZV9wZXJtcyA9IGhhc19vcHQocGVybV9vcHRpb25z
OjpyZW1vdmUpOworICBfTElCQ1BQX0FTU0VSVCgKKyAgICAgIChhZGRfcGVybXMgKyByZW1vdmVf
cGVybXMgKyBoYXNfb3B0KHBlcm1fb3B0aW9uczo6cmVwbGFjZSkpID09IDEsCisgICAgICAiT25l
IGFuZCBvbmx5IG9uZSBvZiB0aGUgcGVybV9vcHRpb25zIGNvbnN0YW50cyByZXBsYWNlLCBhZGQs
IG9yIHJlbW92ZSAiCisgICAgICAiaXMgcHJlc2VudCBpbiBvcHRzIik7CisKKyAgYm9vbCBzZXRf
c3ltX3Blcm1zID0gZmFsc2U7CisgIHBybXMgJj0gcGVybXM6Om1hc2s7CisgIGlmICghcmVzb2x2
ZV9zeW1saW5rcyB8fCAoYWRkX3Blcm1zIHx8IHJlbW92ZV9wZXJtcykpIHsKKyAgICBlcnJvcl9j
b2RlIG1fZWM7CisgICAgZmlsZV9zdGF0dXMgc3QgPSByZXNvbHZlX3N5bWxpbmtzID8gZGV0YWls
Ojpwb3NpeF9zdGF0KHAsICZtX2VjKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IGRldGFpbDo6cG9zaXhfbHN0YXQocCwgJm1fZWMpOworICAgIHNldF9zeW1fcGVybXMg
PSBpc19zeW1saW5rKHN0KTsKKyAgICBpZiAobV9lYykKKyAgICAgIHJldHVybiBlcnIucmVwb3J0
KG1fZWMpOworICAgIF9MSUJDUFBfQVNTRVJUKHN0LnBlcm1pc3Npb25zKCkgIT0gcGVybXM6OnVu
a25vd24sCisgICAgICAgICAgICAgICAgICAgIlBlcm1pc3Npb25zIHVuZXhwZWN0ZWRseSB1bmtu
b3duIik7CisgICAgaWYgKGFkZF9wZXJtcykKKyAgICAgIHBybXMgfD0gc3QucGVybWlzc2lvbnMo
KTsKKyAgICBlbHNlIGlmIChyZW1vdmVfcGVybXMpCisgICAgICBwcm1zID0gc3QucGVybWlzc2lv
bnMoKSAmIH5wcm1zOworICB9CisgIGNvbnN0IGF1dG8gcmVhbF9wZXJtcyA9IGRldGFpbDo6cG9z
aXhfY29udmVydF9wZXJtcyhwcm1zKTsKKworI2lmIGRlZmluZWQoQVRfU1lNTElOS19OT0ZPTExP
VykgJiYgZGVmaW5lZChBVF9GRENXRCkKKyAgY29uc3QgaW50IGZsYWdzID0gc2V0X3N5bV9wZXJt
cyA/IEFUX1NZTUxJTktfTk9GT0xMT1cgOiAwOworICBpZiAoOjpmY2htb2RhdChBVF9GRENXRCwg
cC5jX3N0cigpLCByZWFsX3Blcm1zLCBmbGFncykgPT0gLTEpIHsKKyAgICByZXR1cm4gZXJyLnJl
cG9ydChjYXB0dXJlX2Vycm5vKCkpOworICB9CisjZWxzZQorICBpZiAoc2V0X3N5bV9wZXJtcykK
KyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpvcGVyYXRpb25fbm90X3N1cHBvcnRlZCk7Cisg
IGlmICg6OmNobW9kKHAuY19zdHIoKSwgcmVhbF9wZXJtcykgPT0gLTEpIHsKKyAgICByZXR1cm4g
ZXJyLnJlcG9ydChjYXB0dXJlX2Vycm5vKCkpOworICB9CisjZW5kaWYKK30KKworcGF0aCBfX3Jl
YWRfc3ltbGluayhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRs
ZXI8cGF0aD4gZXJyKCJyZWFkX3N5bWxpbmsiLCBlYywgJnApOworCisgIGNoYXIgYnVmZltQQVRI
X01BWCArIDFdOworICBlcnJvcl9jb2RlIG1fZWM7CisgIDo6c3NpemVfdCByZXQ7CisgIGlmICgo
cmV0ID0gOjpyZWFkbGluayhwLmNfc3RyKCksIGJ1ZmYsIFBBVEhfTUFYKSkgPT0gLTEpIHsKKyAg
ICByZXR1cm4gZXJyLnJlcG9ydChjYXB0dXJlX2Vycm5vKCkpOworICB9CisgIF9MSUJDUFBfQVNT
RVJUKHJldCA8PSBQQVRIX01BWCwgIlRPRE8iKTsKKyAgX0xJQkNQUF9BU1NFUlQocmV0ID4gMCwg
IlRPRE8iKTsKKyAgYnVmZltyZXRdID0gMDsKKyAgcmV0dXJuIHtidWZmfTsKK30KKworYm9vbCBf
X3JlbW92ZShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8
Ym9vbD4gZXJyKCJyZW1vdmUiLCBlYywgJnApOworICBpZiAoOjpyZW1vdmUocC5jX3N0cigpKSA9
PSAtMSkgeworICAgIGlmIChlcnJubyAhPSBFTk9FTlQpCisgICAgICBlcnIucmVwb3J0KGNhcHR1
cmVfZXJybm8oKSk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIHJldHVybiB0cnVlOworfQor
CituYW1lc3BhY2UgeworCit1aW50bWF4X3QgcmVtb3ZlX2FsbF9pbXBsKHBhdGggY29uc3QmIHAs
IGVycm9yX2NvZGUmIGVjKSB7CisgIGNvbnN0IGF1dG8gbnBvcyA9IHN0YXRpY19jYXN0PHVpbnRt
YXhfdD4oLTEpOworICBjb25zdCBmaWxlX3N0YXR1cyBzdCA9IF9fc3ltbGlua19zdGF0dXMocCwg
JmVjKTsKKyAgaWYgKGVjKQorICAgIHJldHVybiBucG9zOworICB1aW50bWF4X3QgY291bnQgPSAx
OworICBpZiAoaXNfZGlyZWN0b3J5KHN0KSkgeworICAgIGZvciAoZGlyZWN0b3J5X2l0ZXJhdG9y
IGl0KHAsIGVjKTsgIWVjICYmIGl0ICE9IGRpcmVjdG9yeV9pdGVyYXRvcigpOworICAgICAgICAg
aXQuaW5jcmVtZW50KGVjKSkgeworICAgICAgYXV0byBvdGhlcl9jb3VudCA9IHJlbW92ZV9hbGxf
aW1wbChpdC0+cGF0aCgpLCBlYyk7CisgICAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiBucG9z
OworICAgICAgY291bnQgKz0gb3RoZXJfY291bnQ7CisgICAgfQorICAgIGlmIChlYykKKyAgICAg
IHJldHVybiBucG9zOworICB9CisgIGlmICghX19yZW1vdmUocCwgJmVjKSkKKyAgICByZXR1cm4g
bnBvczsKKyAgcmV0dXJuIGNvdW50OworfQorCit9IC8vIGVuZCBuYW1lc3BhY2UKKwordWludG1h
eF90IF9fcmVtb3ZlX2FsbChjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJv
ckhhbmRsZXI8dWludG1heF90PiBlcnIoInJlbW92ZV9hbGwiLCBlYywgJnApOworCisgIGVycm9y
X2NvZGUgbWVjOworICBhdXRvIGNvdW50ID0gcmVtb3ZlX2FsbF9pbXBsKHAsIG1lYyk7CisgIGlm
IChtZWMpIHsKKyAgICBpZiAobWVjID09IGVycmM6Om5vX3N1Y2hfZmlsZV9vcl9kaXJlY3Rvcnkp
CisgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZXJyLnJlcG9ydChtZWMpOworICB9CisgIHJl
dHVybiBjb3VudDsKK30KKwordm9pZCBfX3JlbmFtZShjb25zdCBwYXRoJiBmcm9tLCBjb25zdCBw
YXRoJiB0bywgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHZvaWQ+IGVycigicmVu
YW1lIiwgZWMsICZmcm9tLCAmdG8pOworICBpZiAoOjpyZW5hbWUoZnJvbS5jX3N0cigpLCB0by5j
X3N0cigpKSA9PSAtMSkKKyAgICBlcnIucmVwb3J0KGNhcHR1cmVfZXJybm8oKSk7Cit9CisKK3Zv
aWQgX19yZXNpemVfZmlsZShjb25zdCBwYXRoJiBwLCB1aW50bWF4X3Qgc2l6ZSwgZXJyb3JfY29k
ZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHZvaWQ+IGVycigicmVzaXplX2ZpbGUiLCBlYywgJnAp
OworICBpZiAoOjp0cnVuY2F0ZShwLmNfc3RyKCksIHN0YXRpY19jYXN0PCA6Om9mZl90PihzaXpl
KSkgPT0gLTEpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJubygpKTsKK30KKwor
c3BhY2VfaW5mbyBfX3NwYWNlKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjKSB7CisgIEVy
cm9ySGFuZGxlcjx2b2lkPiBlcnIoInNwYWNlIiwgZWMsICZwKTsKKyAgc3BhY2VfaW5mbyBzaTsK
KyAgc3RydWN0IHN0YXR2ZnMgbV9zdmZzID0ge307CisgIGlmICg6OnN0YXR2ZnMocC5jX3N0cigp
LCAmbV9zdmZzKSA9PSAtMSkgeworICAgIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJubygpKTsKKyAg
ICBzaS5jYXBhY2l0eSA9IHNpLmZyZWUgPSBzaS5hdmFpbGFibGUgPSBzdGF0aWNfY2FzdDx1aW50
bWF4X3Q+KC0xKTsKKyAgICByZXR1cm4gc2k7CisgIH0KKyAgLy8gTXVsdGlwbHkgd2l0aCBvdmVy
ZmxvdyBjaGVja2luZy4KKyAgYXV0byBkb19tdWx0ID0gWyZdKHVpbnRtYXhfdCYgb3V0LCB1aW50
bWF4X3Qgb3RoZXIpIHsKKyAgICBvdXQgPSBvdGhlciAqIG1fc3Zmcy5mX2Zyc2l6ZTsKKyAgICBp
ZiAob3RoZXIgPT0gMCB8fCBvdXQgLyBvdGhlciAhPSBtX3N2ZnMuZl9mcnNpemUpCisgICAgICBv
dXQgPSBzdGF0aWNfY2FzdDx1aW50bWF4X3Q+KC0xKTsKKyAgfTsKKyAgZG9fbXVsdChzaS5jYXBh
Y2l0eSwgbV9zdmZzLmZfYmxvY2tzKTsKKyAgZG9fbXVsdChzaS5mcmVlLCBtX3N2ZnMuZl9iZnJl
ZSk7CisgIGRvX211bHQoc2kuYXZhaWxhYmxlLCBtX3N2ZnMuZl9iYXZhaWwpOworICByZXR1cm4g
c2k7Cit9CisKK2ZpbGVfc3RhdHVzIF9fc3RhdHVzKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUq
IGVjKSB7CisgIHJldHVybiBkZXRhaWw6OnBvc2l4X3N0YXQocCwgZWMpOworfQorCitmaWxlX3N0
YXR1cyBfX3N5bWxpbmtfc3RhdHVzKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjKSB7Cisg
IHJldHVybiBkZXRhaWw6OnBvc2l4X2xzdGF0KHAsIGVjKTsKK30KKworcGF0aCBfX3RlbXBfZGly
ZWN0b3J5X3BhdGgoZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHBhdGg+IGVycigi
dGVtcF9kaXJlY3RvcnlfcGF0aCIsIGVjKTsKKworICBjb25zdCBjaGFyKiBlbnZfcGF0aHNbXSA9
IHsiVE1QRElSIiwgIlRNUCIsICJURU1QIiwgIlRFTVBESVIifTsKKyAgY29uc3QgY2hhciogcmV0
ID0gbnVsbHB0cjsKKworICBmb3IgKGF1dG8mIGVwIDogZW52X3BhdGhzKQorICAgIGlmICgocmV0
ID0gZ2V0ZW52KGVwKSkpCisgICAgICBicmVhazsKKyAgaWYgKHJldCA9PSBudWxscHRyKQorICAg
IHJldCA9ICIvdG1wIjsKKworICBwYXRoIHAocmV0KTsKKyAgZXJyb3JfY29kZSBtX2VjOworICBm
aWxlX3N0YXR1cyBzdCA9IGRldGFpbDo6cG9zaXhfc3RhdChwLCAmbV9lYyk7CisgIGlmICghc3Rh
dHVzX2tub3duKHN0KSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjLCAiY2Fubm90IGFjY2Vz
cyBwYXRoIFwiJXNcIiIsIHApOworCisgIGlmICghZXhpc3RzKHN0KSB8fCAhaXNfZGlyZWN0b3J5
KHN0KSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpub3RfYV9kaXJlY3RvcnksICJwYXRo
IFwiJXNcIiBpcyBub3QgYSBkaXJlY3RvcnkiLAorICAgICAgICAgICAgICAgICAgICAgIHApOwor
CisgIHJldHVybiBwOworfQorCitwYXRoIF9fd2Vha2x5X2Nhbm9uaWNhbChjb25zdCBwYXRoJiBw
LCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8cGF0aD4gZXJyKCJ3ZWFrbHlfY2Fu
b25pY2FsIiwgZWMsICZwKTsKKworICBpZiAocC5lbXB0eSgpKQorICAgIHJldHVybiBfX2Nhbm9u
aWNhbCgiIiwgZWMpOworCisgIHBhdGggcmVzdWx0OworICBwYXRoIHRtcDsKKyAgdG1wLl9fcmVz
ZXJ2ZShwLm5hdGl2ZSgpLnNpemUoKSk7CisgIGF1dG8gUFAgPSBQYXRoUGFyc2VyOjpDcmVhdGVF
bmQocC5uYXRpdmUoKSk7CisgIC0tUFA7CisgIHZlY3RvcjxzdHJpbmdfdmlld190PiBETkVQYXJ0
czsKKworICB3aGlsZSAoUFAuU3RhdGUgIT0gUGF0aFBhcnNlcjo6UFNfQmVmb3JlQmVnaW4pIHsK
KyAgICB0bXAuYXNzaWduKGNyZWF0ZVZpZXcocC5uYXRpdmUoKS5kYXRhKCksICZQUC5SYXdFbnRy
eS5iYWNrKCkpKTsKKyAgICBlcnJvcl9jb2RlIG1fZWM7CisgICAgZmlsZV9zdGF0dXMgc3QgPSBf
X3N0YXR1cyh0bXAsICZtX2VjKTsKKyAgICBpZiAoIXN0YXR1c19rbm93bihzdCkpIHsKKyAgICAg
IHJldHVybiBlcnIucmVwb3J0KG1fZWMpOworICAgIH0gZWxzZSBpZiAoZXhpc3RzKHN0KSkgewor
ICAgICAgcmVzdWx0ID0gX19jYW5vbmljYWwodG1wLCBlYyk7CisgICAgICBicmVhazsKKyAgICB9
CisgICAgRE5FUGFydHMucHVzaF9iYWNrKCpQUCk7CisgICAgLS1QUDsKKyAgfQorICBpZiAoUFAu
U3RhdGUgPT0gUGF0aFBhcnNlcjo6UFNfQmVmb3JlQmVnaW4pCisgICAgcmVzdWx0ID0gX19jYW5v
bmljYWwoIiIsIGVjKTsKKyAgaWYgKGVjKQorICAgIGVjLT5jbGVhcigpOworICBpZiAoRE5FUGFy
dHMuZW1wdHkoKSkKKyAgICByZXR1cm4gcmVzdWx0OworICBmb3IgKGF1dG8gSXQgPSBETkVQYXJ0
cy5yYmVnaW4oKTsgSXQgIT0gRE5FUGFydHMucmVuZCgpOyArK0l0KQorICAgIHJlc3VsdCAvPSAq
SXQ7CisgIHJldHVybiByZXN1bHQubGV4aWNhbGx5X25vcm1hbCgpOworfQorCisvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoIGRlZmluaXRp
b25zCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2NvbnN0ZXhwciBwYXRoOjp2YWx1ZV90eXBl
IHBhdGg6OnByZWZlcnJlZF9zZXBhcmF0b3I7CisKK3BhdGgmIHBhdGg6OnJlcGxhY2VfZXh0ZW5z
aW9uKHBhdGggY29uc3QmIHJlcGxhY2VtZW50KSB7CisgIHBhdGggcCA9IGV4dGVuc2lvbigpOwor
ICBpZiAobm90IHAuZW1wdHkoKSkgeworICAgIF9fcG5fLmVyYXNlKF9fcG5fLnNpemUoKSAtIHAu
bmF0aXZlKCkuc2l6ZSgpKTsKKyAgfQorICBpZiAoIXJlcGxhY2VtZW50LmVtcHR5KCkpIHsKKyAg
ICBpZiAocmVwbGFjZW1lbnQubmF0aXZlKClbMF0gIT0gJy4nKSB7CisgICAgICBfX3BuXyArPSAi
LiI7CisgICAgfQorICAgIF9fcG5fLmFwcGVuZChyZXBsYWNlbWVudC5fX3BuXyk7CisgIH0KKyAg
cmV0dXJuICp0aGlzOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBwYXRoLmRlY29t
cG9zZQorCitzdHJpbmdfdmlld190IHBhdGg6Ol9fcm9vdF9uYW1lKCkgY29uc3QgeworICBhdXRv
IFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oX19wbl8pOworICBpZiAoUFAuU3RhdGUgPT0g
UGF0aFBhcnNlcjo6UFNfSW5Sb290TmFtZSkKKyAgICByZXR1cm4gKlBQOworICByZXR1cm4ge307
Cit9CisKK3N0cmluZ192aWV3X3QgcGF0aDo6X19yb290X2RpcmVjdG9yeSgpIGNvbnN0IHsKKyAg
YXV0byBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKF9fcG5fKTsKKyAgaWYgKFBQLlN0YXRl
ID09IFBhdGhQYXJzZXI6OlBTX0luUm9vdE5hbWUpCisgICAgKytQUDsKKyAgaWYgKFBQLlN0YXRl
ID09IFBhdGhQYXJzZXI6OlBTX0luUm9vdERpcikKKyAgICByZXR1cm4gKlBQOworICByZXR1cm4g
e307Cit9CisKK3N0cmluZ192aWV3X3QgcGF0aDo6X19yb290X3BhdGhfcmF3KCkgY29uc3Qgewor
ICBhdXRvIFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oX19wbl8pOworICBpZiAoUFAuU3Rh
dGUgPT0gUGF0aFBhcnNlcjo6UFNfSW5Sb290TmFtZSkgeworICAgIGF1dG8gTmV4dENoID0gUFAu
cGVlaygpOworICAgIGlmIChOZXh0Q2ggJiYgKk5leHRDaCA9PSAnLycpIHsKKyAgICAgICsrUFA7
CisgICAgICByZXR1cm4gY3JlYXRlVmlldyhfX3BuXy5kYXRhKCksICZQUC5SYXdFbnRyeS5iYWNr
KCkpOworICAgIH0KKyAgICByZXR1cm4gUFAuUmF3RW50cnk7CisgIH0KKyAgaWYgKFBQLlN0YXRl
ID09IFBhdGhQYXJzZXI6OlBTX0luUm9vdERpcikKKyAgICByZXR1cm4gKlBQOworICByZXR1cm4g
e307Cit9CisKK3N0YXRpYyBib29sIENvbnN1bWVSb290RGlyKFBhdGhQYXJzZXIqIFBQKSB7Cisg
IHdoaWxlIChQUC0+U3RhdGUgPD0gUGF0aFBhcnNlcjo6UFNfSW5Sb290RGlyKQorICAgICsrKCpQ
UCk7CisgIHJldHVybiBQUC0+U3RhdGUgPT0gUGF0aFBhcnNlcjo6UFNfQXRFbmQ7Cit9CisKK3N0
cmluZ192aWV3X3QgcGF0aDo6X19yZWxhdGl2ZV9wYXRoKCkgY29uc3QgeworICBhdXRvIFBQID0g
UGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oX19wbl8pOworICBpZiAoQ29uc3VtZVJvb3REaXIoJlBQ
KSkKKyAgICByZXR1cm4ge307CisgIHJldHVybiBjcmVhdGVWaWV3KFBQLlJhd0VudHJ5LmRhdGEo
KSwgJl9fcG5fLmJhY2soKSk7Cit9CisKK3N0cmluZ192aWV3X3QgcGF0aDo6X19wYXJlbnRfcGF0
aCgpIGNvbnN0IHsKKyAgaWYgKGVtcHR5KCkpCisgICAgcmV0dXJuIHt9OworICAvLyBEZXRlcm1p
bmUgaWYgd2UgaGF2ZSBhIHJvb3QgcGF0aCBidXQgbm90IGEgcmVsYXRpdmUgcGF0aC4gSW4gdGhh
dCBjYXNlCisgIC8vIHJldHVybiAqdGhpcy4KKyAgeworICAgIGF1dG8gUFAgPSBQYXRoUGFyc2Vy
OjpDcmVhdGVCZWdpbihfX3BuXyk7CisgICAgaWYgKENvbnN1bWVSb290RGlyKCZQUCkpCisgICAg
ICByZXR1cm4gX19wbl87CisgIH0KKyAgLy8gT3RoZXJ3aXNlIHJlbW92ZSBhIHNpbmdsZSBlbGVt
ZW50IGZyb20gdGhlIGVuZCBvZiB0aGUgcGF0aCwgYW5kIHJldHVybgorICAvLyBhIHN0cmluZyBy
ZXByZXNlbnRpbmcgdGhhdCBwYXRoCisgIHsKKyAgICBhdXRvIFBQID0gUGF0aFBhcnNlcjo6Q3Jl
YXRlRW5kKF9fcG5fKTsKKyAgICAtLVBQOworICAgIGlmIChQUC5SYXdFbnRyeS5kYXRhKCkgPT0g
X19wbl8uZGF0YSgpKQorICAgICAgcmV0dXJuIHt9OworICAgIC0tUFA7CisgICAgcmV0dXJuIGNy
ZWF0ZVZpZXcoX19wbl8uZGF0YSgpLCAmUFAuUmF3RW50cnkuYmFjaygpKTsKKyAgfQorfQorCitz
dHJpbmdfdmlld190IHBhdGg6Ol9fZmlsZW5hbWUoKSBjb25zdCB7CisgIGlmIChlbXB0eSgpKQor
ICAgIHJldHVybiB7fTsKKyAgeworICAgIFBhdGhQYXJzZXIgUFAgPSBQYXRoUGFyc2VyOjpDcmVh
dGVCZWdpbihfX3BuXyk7CisgICAgaWYgKENvbnN1bWVSb290RGlyKCZQUCkpCisgICAgICByZXR1
cm4ge307CisgIH0KKyAgcmV0dXJuICooLS1QYXRoUGFyc2VyOjpDcmVhdGVFbmQoX19wbl8pKTsK
K30KKworc3RyaW5nX3ZpZXdfdCBwYXRoOjpfX3N0ZW0oKSBjb25zdCB7CisgIHJldHVybiBwYXJz
ZXI6OnNlcGFyYXRlX2ZpbGVuYW1lKF9fZmlsZW5hbWUoKSkuZmlyc3Q7Cit9CisKK3N0cmluZ192
aWV3X3QgcGF0aDo6X19leHRlbnNpb24oKSBjb25zdCB7CisgIHJldHVybiBwYXJzZXI6OnNlcGFy
YXRlX2ZpbGVuYW1lKF9fZmlsZW5hbWUoKSkuc2Vjb25kOworfQorCisvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCisvLyBwYXRoLmdlbgorCitlbnVtIFBhdGhQYXJ0S2luZCA6IHVuc2lnbmVkIGNoYXIgewor
ICBQS19Ob25lLAorICBQS19Sb290U2VwLAorICBQS19GaWxlbmFtZSwKKyAgUEtfRG90LAorICBQ
S19Eb3REb3QsCisgIFBLX1RyYWlsaW5nU2VwCit9OworCitzdGF0aWMgUGF0aFBhcnRLaW5kIENs
YXNzaWZ5UGF0aFBhcnQoc3RyaW5nX3ZpZXdfdCBQYXJ0KSB7CisgIGlmIChQYXJ0LmVtcHR5KCkp
CisgICAgcmV0dXJuIFBLX1RyYWlsaW5nU2VwOworICBpZiAoUGFydCA9PSAiLiIpCisgICAgcmV0
dXJuIFBLX0RvdDsKKyAgaWYgKFBhcnQgPT0gIi4uIikKKyAgICByZXR1cm4gUEtfRG90RG90Owor
ICBpZiAoUGFydCA9PSAiLyIpCisgICAgcmV0dXJuIFBLX1Jvb3RTZXA7CisgIHJldHVybiBQS19G
aWxlbmFtZTsKK30KKworcGF0aCBwYXRoOjpsZXhpY2FsbHlfbm9ybWFsKCkgY29uc3QgeworICBp
ZiAoX19wbl8uZW1wdHkoKSkKKyAgICByZXR1cm4gKnRoaXM7CisKKyAgdXNpbmcgUGFydEtpbmRQ
YWlyID0gcGFpcjxzdHJpbmdfdmlld190LCBQYXRoUGFydEtpbmQ+OworICB2ZWN0b3I8UGFydEtp
bmRQYWlyPiBQYXJ0czsKKyAgLy8gR3Vlc3MgYXMgdG8gaG93IG1hbnkgZWxlbWVudHMgdGhlIHBh
dGggaGFzIHRvIGF2b2lkIHJlYWxsb2NhdGluZy4KKyAgUGFydHMucmVzZXJ2ZSgzMik7CisKKyAg
Ly8gVHJhY2sgdGhlIHRvdGFsIHNpemUgb2YgdGhlIHBhcnRzIGFzIHdlIGNvbGxlY3QgdGhlbS4g
VGhpcyBhbGxvd3MgdGhlCisgIC8vIHJlc3VsdGluZyBwYXRoIHRvIHJlc2VydmUgdGhlIGNvcnJl
Y3QgYW1vdW50IG9mIG1lbW9yeS4KKyAgc2l6ZV90IE5ld1BhdGhTaXplID0gMDsKKyAgYXV0byBB
ZGRQYXJ0ID0gWyZdKFBhdGhQYXJ0S2luZCBLLCBzdHJpbmdfdmlld190IFApIHsKKyAgICBOZXdQ
YXRoU2l6ZSArPSBQLnNpemUoKTsKKyAgICBQYXJ0cy5lbXBsYWNlX2JhY2soUCwgSyk7CisgIH07
CisgIGF1dG8gTGFzdFBhcnRLaW5kID0gWyZdKCkgeworICAgIGlmIChQYXJ0cy5lbXB0eSgpKQor
ICAgICAgcmV0dXJuIFBLX05vbmU7CisgICAgcmV0dXJuIFBhcnRzLmJhY2soKS5zZWNvbmQ7Cisg
IH07CisKKyAgYm9vbCBNYXliZU5lZWRUcmFpbGluZ1NlcCA9IGZhbHNlOworICAvLyBCdWlsZCBh
IHN0YWNrIGNvbnRhaW5pbmcgdGhlIHJlbWFpbmluZyBlbGVtZW50cyBvZiB0aGUgcGF0aCwgcG9w
cGluZyBvZmYKKyAgLy8gZWxlbWVudHMgd2hpY2ggb2NjdXIgYmVmb3JlIGEgJy4uJyBlbnRyeS4K
KyAgZm9yIChhdXRvIFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oX19wbl8pOyBQUDsgKytQ
UCkgeworICAgIGF1dG8gUGFydCA9ICpQUDsKKyAgICBQYXRoUGFydEtpbmQgS2luZCA9IENsYXNz
aWZ5UGF0aFBhcnQoUGFydCk7CisgICAgc3dpdGNoIChLaW5kKSB7CisgICAgY2FzZSBQS19GaWxl
bmFtZToKKyAgICBjYXNlIFBLX1Jvb3RTZXA6IHsKKyAgICAgIC8vIEFkZCBhbGwgbm9uLWRvdCBh
bmQgbm9uLWRvdC1kb3QgZWxlbWVudHMgdG8gdGhlIHN0YWNrIG9mIGVsZW1lbnRzLgorICAgICAg
QWRkUGFydChLaW5kLCBQYXJ0KTsKKyAgICAgIE1heWJlTmVlZFRyYWlsaW5nU2VwID0gZmFsc2U7
CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQS19Eb3REb3Q6IHsKKyAgICAgIC8vIE9u
bHkgcHVzaCBhICIuLiIgZWxlbWVudCBpZiB0aGVyZSBhcmUgbm8gZWxlbWVudHMgcHJlY2VkaW5n
IHRoZSAiLi4iLAorICAgICAgLy8gb3IgaWYgdGhlIHByZWNlZGluZyBlbGVtZW50IGlzIGl0c2Vs
ZiAiLi4iLgorICAgICAgYXV0byBMYXN0S2luZCA9IExhc3RQYXJ0S2luZCgpOworICAgICAgaWYg
KExhc3RLaW5kID09IFBLX0ZpbGVuYW1lKSB7CisgICAgICAgIE5ld1BhdGhTaXplIC09IFBhcnRz
LmJhY2soKS5maXJzdC5zaXplKCk7CisgICAgICAgIFBhcnRzLnBvcF9iYWNrKCk7CisgICAgICB9
IGVsc2UgaWYgKExhc3RLaW5kICE9IFBLX1Jvb3RTZXApCisgICAgICAgIEFkZFBhcnQoUEtfRG90
RG90LCAiLi4iKTsKKyAgICAgIE1heWJlTmVlZFRyYWlsaW5nU2VwID0gTGFzdEtpbmQgPT0gUEtf
RmlsZW5hbWU7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQS19Eb3Q6CisgICAgY2Fz
ZSBQS19UcmFpbGluZ1NlcDogeworICAgICAgTWF5YmVOZWVkVHJhaWxpbmdTZXAgPSB0cnVlOwor
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUEtfTm9uZToKKyAgICAgIF9MSUJDUFBfVU5S
RUFDSEFCTEUoKTsKKyAgICB9CisgIH0KKyAgLy8gW2ZzLnBhdGguZ2VuZXJpY11wNi44OiBJZiB0
aGUgcGF0aCBpcyBlbXB0eSwgYWRkIGEgZG90LgorICBpZiAoUGFydHMuZW1wdHkoKSkKKyAgICBy
ZXR1cm4gIi4iOworCisgIC8vIFtmcy5wYXRoLmdlbmVyaWNdcDYuNzogSWYgdGhlIGxhc3QgZmls
ZW5hbWUgaXMgZG90LWRvdCwgcmVtb3ZlIGFueQorICAvLyB0cmFpbGluZyBkaXJlY3Rvcnktc2Vw
YXJhdG9yLgorICBib29sIE5lZWRUcmFpbGluZ1NlcCA9IE1heWJlTmVlZFRyYWlsaW5nU2VwICYm
IExhc3RQYXJ0S2luZCgpID09IFBLX0ZpbGVuYW1lOworCisgIHBhdGggUmVzdWx0OworICBSZXN1
bHQuX19wbl8ucmVzZXJ2ZShQYXJ0cy5zaXplKCkgKyBOZXdQYXRoU2l6ZSArIE5lZWRUcmFpbGlu
Z1NlcCk7CisgIGZvciAoYXV0byYgUEsgOiBQYXJ0cykKKyAgICBSZXN1bHQgLz0gUEsuZmlyc3Q7
CisKKyAgaWYgKE5lZWRUcmFpbGluZ1NlcCkKKyAgICBSZXN1bHQgLz0gIiI7CisKKyAgcmV0dXJu
IFJlc3VsdDsKK30KKworc3RhdGljIGludCBEZXRlcm1pbmVMZXhpY2FsRWxlbWVudENvdW50KFBh
dGhQYXJzZXIgUFApIHsKKyAgaW50IENvdW50ID0gMDsKKyAgZm9yICg7IFBQOyArK1BQKSB7Cisg
ICAgYXV0byBFbGVtID0gKlBQOworICAgIGlmIChFbGVtID09ICIuLiIpCisgICAgICAtLUNvdW50
OworICAgIGVsc2UgaWYgKEVsZW0gIT0gIi4iKQorICAgICAgKytDb3VudDsKKyAgfQorICByZXR1
cm4gQ291bnQ7Cit9CisKK3BhdGggcGF0aDo6bGV4aWNhbGx5X3JlbGF0aXZlKGNvbnN0IHBhdGgm
IGJhc2UpIGNvbnN0IHsKKyAgeyAvLyBwZXJmb3JtIHJvb3QtbmFtZS9yb290LWRpcmVjdG9yeSBt
aXNtYXRjaCBjaGVja3MKKyAgICBhdXRvIFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oX19w
bl8pOworICAgIGF1dG8gUFBCYXNlID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oYmFzZS5fX3Bu
Xyk7CisgICAgYXV0byBDaGVja0l0ZXJNaXNtYXRjaEF0QmFzZSA9IFsmXSgpIHsKKyAgICAgIHJl
dHVybiBQUC5TdGF0ZSAhPSBQUEJhc2UuU3RhdGUgJiYKKyAgICAgICAgICAgICAoUFAuaW5Sb290
UGF0aCgpIHx8IFBQQmFzZS5pblJvb3RQYXRoKCkpOworICAgIH07CisgICAgaWYgKFBQLlN0YXRl
ID09IFBhdGhQYXJzZXI6OlBTX0luUm9vdE5hbWUgJiYKKyAgICAgICAgUFBCYXNlLlN0YXRlID09
IFBhdGhQYXJzZXI6OlBTX0luUm9vdE5hbWUpIHsKKyAgICAgIGlmICgqUFAgIT0gKlBQQmFzZSkK
KyAgICAgICAgcmV0dXJuIHt9OworICAgIH0gZWxzZSBpZiAoQ2hlY2tJdGVyTWlzbWF0Y2hBdEJh
c2UoKSkKKyAgICAgIHJldHVybiB7fTsKKworICAgIGlmIChQUC5pblJvb3RQYXRoKCkpCisgICAg
ICArK1BQOworICAgIGlmIChQUEJhc2UuaW5Sb290UGF0aCgpKQorICAgICAgKytQUEJhc2U7Cisg
ICAgaWYgKENoZWNrSXRlck1pc21hdGNoQXRCYXNlKCkpCisgICAgICByZXR1cm4ge307CisgIH0K
KworICAvLyBGaW5kIHRoZSBmaXJzdCBtaXNtYXRjaGluZyBlbGVtZW50CisgIGF1dG8gUFAgPSBQ
YXRoUGFyc2VyOjpDcmVhdGVCZWdpbihfX3BuXyk7CisgIGF1dG8gUFBCYXNlID0gUGF0aFBhcnNl
cjo6Q3JlYXRlQmVnaW4oYmFzZS5fX3BuXyk7CisgIHdoaWxlIChQUCAmJiBQUEJhc2UgJiYgUFAu
U3RhdGUgPT0gUFBCYXNlLlN0YXRlICYmICpQUCA9PSAqUFBCYXNlKSB7CisgICAgKytQUDsKKyAg
ICArK1BQQmFzZTsKKyAgfQorCisgIC8vIElmIHRoZXJlIGlzIG5vIG1pc21hdGNoLCByZXR1cm4g
Ii4iLgorICBpZiAoIVBQICYmICFQUEJhc2UpCisgICAgcmV0dXJuICIuIjsKKworICAvLyBPdGhl
cndpc2UsIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzLCAnbicsIHdoaWNoIGFyZSBu
b3QgZG90IG9yCisgIC8vIGRvdC1kb3QgbWludXMgdGhlIG51bWJlciBvZiBkb3QtZG90IGVsZW1l
bnRzLgorICBpbnQgRWxlbUNvdW50ID0gRGV0ZXJtaW5lTGV4aWNhbEVsZW1lbnRDb3VudChQUEJh
c2UpOworICBpZiAoRWxlbUNvdW50IDwgMCkKKyAgICByZXR1cm4ge307CisKKyAgLy8gcmV0dXJu
IGEgcGF0aCBjb25zdHJ1Y3RlZCB3aXRoICduJyBkb3QtZG90IGVsZW1lbnRzLCBmb2xsb3dlZCBi
eSB0aGUgdGhlCisgIC8vIGVsZW1lbnRzIG9mICcqdGhpcycgYWZ0ZXIgdGhlIG1pc21hdGNoLgor
ICBwYXRoIFJlc3VsdDsKKyAgLy8gRklYTUU6IFJlc2VydmUgZW5vdWdoIHJvb20gaW4gUmVzdWx0
IHRoYXQgaXQgd29uJ3QgaGF2ZSB0byByZS1hbGxvY2F0ZS4KKyAgd2hpbGUgKEVsZW1Db3VudC0t
KQorICAgIFJlc3VsdCAvPSAiLi4iOworICBmb3IgKDsgUFA7ICsrUFApCisgICAgUmVzdWx0IC89
ICpQUDsKKyAgcmV0dXJuIFJlc3VsdDsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gcGF0
aC5jb21wYXJpc29ucworaW50IHBhdGg6Ol9fY29tcGFyZShzdHJpbmdfdmlld190IF9fcykgY29u
c3QgeworICBhdXRvIFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oX19wbl8pOworICBhdXRv
IFBQMiA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKF9fcyk7CisgIHdoaWxlIChQUCAmJiBQUDIp
IHsKKyAgICBpbnQgcmVzID0gKCpQUCkuY29tcGFyZSgqUFAyKTsKKyAgICBpZiAocmVzICE9IDAp
CisgICAgICByZXR1cm4gcmVzOworICAgICsrUFA7CisgICAgKytQUDI7CisgIH0KKyAgaWYgKFBQ
LlN0YXRlID09IFBQMi5TdGF0ZSAmJiAhUFApCisgICAgcmV0dXJuIDA7CisgIGlmICghUFApCisg
ICAgcmV0dXJuIC0xOworICByZXR1cm4gMTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8g
cGF0aC5ub25tZW1iZXJzCitzaXplX3QgaGFzaF92YWx1ZShjb25zdCBwYXRoJiBfX3ApIG5vZXhj
ZXB0IHsKKyAgYXV0byBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKF9fcC5uYXRpdmUoKSk7
CisgIHNpemVfdCBoYXNoX3ZhbHVlID0gMDsKKyAgaGFzaDxzdHJpbmdfdmlld190PiBoYXNoZXI7
CisgIHdoaWxlIChQUCkgeworICAgIGhhc2hfdmFsdWUgPSBfX2hhc2hfY29tYmluZShoYXNoX3Zh
bHVlLCBoYXNoZXIoKlBQKSk7CisgICAgKytQUDsKKyAgfQorICByZXR1cm4gaGFzaF92YWx1ZTsK
K30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gcGF0aC5pdHIKK3BhdGg6Oml0ZXJhdG9yIHBh
dGg6OmJlZ2luKCkgY29uc3QgeworICBhdXRvIFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4o
X19wbl8pOworICBpdGVyYXRvciBpdDsKKyAgaXQuX19wYXRoX3B0cl8gPSB0aGlzOworICBpdC5f
X3N0YXRlXyA9IHN0YXRpY19jYXN0PHBhdGg6Oml0ZXJhdG9yOjpfUGFyc2VyU3RhdGU+KFBQLlN0
YXRlKTsKKyAgaXQuX19lbnRyeV8gPSBQUC5SYXdFbnRyeTsKKyAgaXQuX19zdGFzaGVkX2VsZW1f
Ll9fYXNzaWduX3ZpZXcoKlBQKTsKKyAgcmV0dXJuIGl0OworfQorCitwYXRoOjppdGVyYXRvciBw
YXRoOjplbmQoKSBjb25zdCB7CisgIGl0ZXJhdG9yIGl0e307CisgIGl0Ll9fc3RhdGVfID0gcGF0
aDo6aXRlcmF0b3I6Ol9BdEVuZDsKKyAgaXQuX19wYXRoX3B0cl8gPSB0aGlzOworICByZXR1cm4g
aXQ7Cit9CisKK3BhdGg6Oml0ZXJhdG9yJiBwYXRoOjppdGVyYXRvcjo6X19pbmNyZW1lbnQoKSB7
CisgIFBhdGhQYXJzZXIgUFAoX19wYXRoX3B0cl8tPm5hdGl2ZSgpLCBfX2VudHJ5XywgX19zdGF0
ZV8pOworICArK1BQOworICBfX3N0YXRlXyA9IHN0YXRpY19jYXN0PF9QYXJzZXJTdGF0ZT4oUFAu
U3RhdGUpOworICBfX2VudHJ5XyA9IFBQLlJhd0VudHJ5OworICBfX3N0YXNoZWRfZWxlbV8uX19h
c3NpZ25fdmlldygqUFApOworICByZXR1cm4gKnRoaXM7Cit9CisKK3BhdGg6Oml0ZXJhdG9yJiBw
YXRoOjppdGVyYXRvcjo6X19kZWNyZW1lbnQoKSB7CisgIFBhdGhQYXJzZXIgUFAoX19wYXRoX3B0
cl8tPm5hdGl2ZSgpLCBfX2VudHJ5XywgX19zdGF0ZV8pOworICAtLVBQOworICBfX3N0YXRlXyA9
IHN0YXRpY19jYXN0PF9QYXJzZXJTdGF0ZT4oUFAuU3RhdGUpOworICBfX2VudHJ5XyA9IFBQLlJh
d0VudHJ5OworICBfX3N0YXNoZWRfZWxlbV8uX19hc3NpZ25fdmlldygqUFApOworICByZXR1cm4g
KnRoaXM7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGlyZWN0b3J5IGVudHJ5IGRlZmluaXRpb25zCisvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCisKKyNpZm5kZWYgX0xJQkNQUF9XSU4zMkFQSQorZXJyb3JfY29kZSBkaXJlY3RvcnlfZW50
cnk6Ol9fZG9fcmVmcmVzaCgpIG5vZXhjZXB0IHsKKyAgX19kYXRhXy5fX3Jlc2V0KCk7CisgIGVy
cm9yX2NvZGUgZmFpbHVyZV9lYzsKKworICBTdGF0VCBmdWxsX3N0OworICBmaWxlX3N0YXR1cyBz
dCA9IGRldGFpbDo6cG9zaXhfbHN0YXQoX19wXywgZnVsbF9zdCwgJmZhaWx1cmVfZWMpOworICBp
ZiAoIXN0YXR1c19rbm93bihzdCkpIHsKKyAgICBfX2RhdGFfLl9fcmVzZXQoKTsKKyAgICByZXR1
cm4gZmFpbHVyZV9lYzsKKyAgfQorCisgIGlmICghX1ZTVERfRlM6OmV4aXN0cyhzdCkgfHwgIV9W
U1REX0ZTOjppc19zeW1saW5rKHN0KSkgeworICAgIF9fZGF0YV8uX19jYWNoZV90eXBlXyA9IGRp
cmVjdG9yeV9lbnRyeTo6X1JlZnJlc2hOb25TeW1saW5rOworICAgIF9fZGF0YV8uX190eXBlXyA9
IHN0LnR5cGUoKTsKKyAgICBfX2RhdGFfLl9fbm9uX3N5bV9wZXJtc18gPSBzdC5wZXJtaXNzaW9u
cygpOworICB9IGVsc2UgeyAvLyB3ZSBoYXZlIGEgc3ltbGluaworICAgIF9fZGF0YV8uX19zeW1f
cGVybXNfID0gc3QucGVybWlzc2lvbnMoKTsKKyAgICAvLyBHZXQgdGhlIGluZm9ybWF0aW9uIGFi
b3V0IHRoZSBsaW5rZWQgZW50aXR5LgorICAgIC8vIElnbm9yZSBlcnJvcnMgZnJvbSBzdGF0LCBz
aW5jZSB3ZSBkb24ndCB3YW50IGVycm9ycyByZWdhcmRpbmcgc3ltbGluaworICAgIC8vIHJlc29s
dXRpb24gdG8gYmUgcmVwb3J0ZWQgdG8gdGhlIHVzZXIuCisgICAgZXJyb3JfY29kZSBpZ25vcmVk
X2VjOworICAgIHN0ID0gZGV0YWlsOjpwb3NpeF9zdGF0KF9fcF8sIGZ1bGxfc3QsICZpZ25vcmVk
X2VjKTsKKworICAgIF9fZGF0YV8uX190eXBlXyA9IHN0LnR5cGUoKTsKKyAgICBfX2RhdGFfLl9f
bm9uX3N5bV9wZXJtc18gPSBzdC5wZXJtaXNzaW9ucygpOworCisgICAgLy8gSWYgd2UgZmFpbGVk
IHRvIHJlc29sdmUgdGhlIGxpbmssIHRoZW4gb25seSBwYXJ0aWFsbHkgcG9wdWxhdGUgdGhlCisg
ICAgLy8gY2FjaGUuCisgICAgaWYgKCFzdGF0dXNfa25vd24oc3QpKSB7CisgICAgICBfX2RhdGFf
Ll9fY2FjaGVfdHlwZV8gPSBkaXJlY3RvcnlfZW50cnk6Ol9SZWZyZXNoU3ltbGlua1VucmVzb2x2
ZWQ7CisgICAgICByZXR1cm4gZXJyb3JfY29kZXt9OworICAgIH0KKyAgICAvLyBPdGhlcndpc2Us
IHdlIHJlc29sdmVkIHRoZSBsaW5rLCBwb3RlbnRpYWxseSBhcyBub3QgZXhpc3RpbmcuCisgICAg
Ly8gVGhhdCdzIE9LLgorICAgIF9fZGF0YV8uX19jYWNoZV90eXBlXyA9IGRpcmVjdG9yeV9lbnRy
eTo6X1JlZnJlc2hTeW1saW5rOworICB9CisKKyAgaWYgKF9WU1REX0ZTOjppc19yZWd1bGFyX2Zp
bGUoc3QpKQorICAgIF9fZGF0YV8uX19zaXplXyA9IHN0YXRpY19jYXN0PHVpbnRtYXhfdD4oZnVs
bF9zdC5zdF9zaXplKTsKKworICBpZiAoX1ZTVERfRlM6OmV4aXN0cyhzdCkpIHsKKyAgICBfX2Rh
dGFfLl9fbmxpbmtfID0gc3RhdGljX2Nhc3Q8dWludG1heF90PihmdWxsX3N0LnN0X25saW5rKTsK
KworICAgIC8vIEF0dGVtcHQgdG8gZXh0cmFjdCB0aGUgbXRpbWUsIGFuZCBmYWlsIGlmIGl0J3Mg
bm90IHJlcHJlc2VudGFibGUgdXNpbmcKKyAgICAvLyBmaWxlX3RpbWVfdHlwZS4gRm9yIG5vdyB3
ZSBpZ25vcmUgdGhlIGVycm9yLCBhcyB3ZSdsbCByZXBvcnQgaXQgd2hlbgorICAgIC8vIHRoZSB2
YWx1ZSBpcyBhY3R1YWxseSB1c2VkLgorICAgIGVycm9yX2NvZGUgaWdub3JlZF9lYzsKKyAgICBf
X2RhdGFfLl9fd3JpdGVfdGltZV8gPQorICAgICAgICBfX2V4dHJhY3RfbGFzdF93cml0ZV90aW1l
KF9fcF8sIGZ1bGxfc3QsICZpZ25vcmVkX2VjKTsKKyAgfQorCisgIHJldHVybiBmYWlsdXJlX2Vj
OworfQorI2Vsc2UKK2Vycm9yX2NvZGUgZGlyZWN0b3J5X2VudHJ5OjpfX2RvX3JlZnJlc2goKSBu
b2V4Y2VwdCB7CisgIF9fZGF0YV8uX19yZXNldCgpOworICBlcnJvcl9jb2RlIGZhaWx1cmVfZWM7
CisKKyAgZmlsZV9zdGF0dXMgc3QgPSBfVlNURF9GUzo6c3ltbGlua19zdGF0dXMoX19wXywgZmFp
bHVyZV9lYyk7CisgIGlmICghc3RhdHVzX2tub3duKHN0KSkgeworICAgIF9fZGF0YV8uX19yZXNl
dCgpOworICAgIHJldHVybiBmYWlsdXJlX2VjOworICB9CisKKyAgaWYgKCFfVlNURF9GUzo6ZXhp
c3RzKHN0KSB8fCAhX1ZTVERfRlM6OmlzX3N5bWxpbmsoc3QpKSB7CisgICAgX19kYXRhXy5fX2Nh
Y2hlX3R5cGVfID0gZGlyZWN0b3J5X2VudHJ5OjpfUmVmcmVzaE5vblN5bWxpbms7CisgICAgX19k
YXRhXy5fX3R5cGVfID0gc3QudHlwZSgpOworICAgIF9fZGF0YV8uX19ub25fc3ltX3Blcm1zXyA9
IHN0LnBlcm1pc3Npb25zKCk7CisgIH0gZWxzZSB7IC8vIHdlIGhhdmUgYSBzeW1saW5rCisgICAg
X19kYXRhXy5fX3N5bV9wZXJtc18gPSBzdC5wZXJtaXNzaW9ucygpOworICAgIC8vIEdldCB0aGUg
aW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpbmtlZCBlbnRpdHkuCisgICAgLy8gSWdub3JlIGVycm9y
cyBmcm9tIHN0YXQsIHNpbmNlIHdlIGRvbid0IHdhbnQgZXJyb3JzIHJlZ2FyZGluZyBzeW1saW5r
CisgICAgLy8gcmVzb2x1dGlvbiB0byBiZSByZXBvcnRlZCB0byB0aGUgdXNlci4KKyAgICBlcnJv
cl9jb2RlIGlnbm9yZWRfZWM7CisgICAgc3QgPSBfVlNURF9GUzo6c3RhdHVzKF9fcF8sIGlnbm9y
ZWRfZWMpOworCisgICAgX19kYXRhXy5fX3R5cGVfID0gc3QudHlwZSgpOworICAgIF9fZGF0YV8u
X19ub25fc3ltX3Blcm1zXyA9IHN0LnBlcm1pc3Npb25zKCk7CisKKyAgICAvLyBJZiB3ZSBmYWls
ZWQgdG8gcmVzb2x2ZSB0aGUgbGluaywgdGhlbiBvbmx5IHBhcnRpYWxseSBwb3B1bGF0ZSB0aGUK
KyAgICAvLyBjYWNoZS4KKyAgICBpZiAoIXN0YXR1c19rbm93bihzdCkpIHsKKyAgICAgIF9fZGF0
YV8uX19jYWNoZV90eXBlXyA9IGRpcmVjdG9yeV9lbnRyeTo6X1JlZnJlc2hTeW1saW5rVW5yZXNv
bHZlZDsKKyAgICAgIHJldHVybiBlcnJvcl9jb2Rle307CisgICAgfQorICAgIF9fZGF0YV8uX19j
YWNoZV90eXBlXyA9IGRpcmVjdG9yeV9lbnRyeTo6X1JlZnJlc2hTeW1saW5rOworICB9CisKKyAg
Ly8gRklYTUU6IFRoaXMgaXMgY3VycmVudGx5IGJyb2tlbiwgYW5kIHRoZSBpbXBsZW1lbnRhdGlv
biBvbmx5IGEgcGxhY2Vob2xkZXIuCisgIC8vIFdlIG5lZWQgdG8gY2FjaGUgbGFzdF93cml0ZV90
aW1lLCBmaWxlX3NpemUsIGFuZCBoYXJkX2xpbmtfY291bnQgaGVyZSBiZWZvcmUKKyAgLy8gdGhl
IGltcGxlbWVudGF0aW9uIGFjdHVhbGx5IHdvcmtzLgorCisgIHJldHVybiBmYWlsdXJlX2VjOwor
fQorI2VuZGlmCisKK19MSUJDUFBfRU5EX05BTUVTUEFDRV9GSUxFU1lTVEVNCisKKy8qIC0tIEVO
RCBmaWxlc3lzdGVtL29wZXJhdGlvbnMuY3BwIC0tICovCisKKyNlbmRpZiAvLyBfX01BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgMTAxNTAwCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpJ
bmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdGRGaWxlc3lzdGVtLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdGRGaWxlc3lzdGVtLmgJKG5vbmV4aXN0ZW50KQor
KysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdGRGaWxlc3lzdGVtLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyNzAwIEBACisvLyAtKi0gQysrIC0qLQorLy89PT0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gZmlsZXN5c3RlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09
Ly8KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJhc3Ry
dWN0dXJlCisvLworLy8gVGhpcyBmaWxlIGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBh
bmQgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbgorLy8gU291cmNlIExpY2Vuc2VzLiBT
ZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8K
KworI2lmIF9faGFzX2luY2x1ZGUoPGZpbGVzeXN0ZW0+KQorI2luY2x1ZGUgPGZpbGVzeXN0ZW0+
CisjZWxzZQorCisvKiBJbXBvcnRzIGEgY29weSBvZiA8ZmlsZXN5c3RlbT4gZnJvbSByMzQzODM4
IG9mIHRoZSBsaWJjKysgcHJvamVjdC4gKi8KKworI2lmbmRlZiBfTElCQ1BQX0ZJTEVTWVNURU0K
KyNkZWZpbmUgX0xJQkNQUF9GSUxFU1lTVEVNCisvKgorICAgIGZpbGVzeXN0ZW0gc3lub3BzaXMK
KworICAgIG5hbWVzcGFjZSBzdGQgeyBuYW1lc3BhY2UgZmlsZXN5c3RlbSB7CisKKyAgICBjbGFz
cyBwYXRoOworCisgICAgdm9pZCBzd2FwKHBhdGgmIGxocywgcGF0aCYgcmhzKSBub2V4Y2VwdDsK
KyAgICBzaXplX3QgaGFzaF92YWx1ZShjb25zdCBwYXRoJiBwKSBub2V4Y2VwdDsKKworICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBwYXRoJiBsaHMsIGNvbnN0IHBhdGgmIHJocykgbm9leGNlcHQ7
CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHBhdGgmIGxocywgY29uc3QgcGF0aCYgcmhzKSBu
b2V4Y2VwdDsKKyAgICBib29sIG9wZXJhdG9yPCAoY29uc3QgcGF0aCYgbGhzLCBjb25zdCBwYXRo
JiByaHMpIG5vZXhjZXB0OworICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBwYXRoJiBsaHMsIGNv
bnN0IHBhdGgmIHJocykgbm9leGNlcHQ7CisgICAgYm9vbCBvcGVyYXRvcj4gKGNvbnN0IHBhdGgm
IGxocywgY29uc3QgcGF0aCYgcmhzKSBub2V4Y2VwdDsKKyAgICBib29sIG9wZXJhdG9yPj0oY29u
c3QgcGF0aCYgbGhzLCBjb25zdCBwYXRoJiByaHMpIG5vZXhjZXB0OworCisgICAgcGF0aCBvcGVy
YXRvci8gKGNvbnN0IHBhdGgmIGxocywgY29uc3QgcGF0aCYgcmhzKTsKKworICAgIC8vIGZzLnBh
dGguaW8gb3BlcmF0b3JzIGFyZSBmcmllbmRzIG9mIHBhdGguCisgICAgdGVtcGxhdGUgPGNsYXNz
IGNoYXJULCBjbGFzcyB0cmFpdHM+CisgICAgZnJpZW5kIGJhc2ljX29zdHJlYW08Y2hhclQsIHRy
YWl0cz4mCisgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXJULCB0cmFpdHM+JiBvcywg
Y29uc3QgcGF0aCYgcCk7CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0
cz4KKyAgICBmcmllbmQgYmFzaWNfaXN0cmVhbTxjaGFyVCwgdHJhaXRzPiYKKyAgICBvcGVyYXRv
cj4+KGJhc2ljX2lzdHJlYW08Y2hhclQsIHRyYWl0cz4mIGlzLCBwYXRoJiBwKTsKKworICAgIHRl
bXBsYXRlIDxjbGFzcyBTb3VyY2U+CisgICAgICBwYXRoIHU4cGF0aChjb25zdCBTb3VyY2UmIHNv
dXJjZSk7CisgICAgdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3I+CisgICAgICBwYXRoIHU4
cGF0aChJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QpOworCisgICAgY2xh
c3MgZmlsZXN5c3RlbV9lcnJvcjsKKyAgICBjbGFzcyBkaXJlY3RvcnlfZW50cnk7CisKKyAgICBj
bGFzcyBkaXJlY3RvcnlfaXRlcmF0b3I7CisKKyAgICAvLyBlbmFibGUgZGlyZWN0b3J5X2l0ZXJh
dG9yIHJhbmdlLWJhc2VkIGZvciBzdGF0ZW1lbnRzCisgICAgZGlyZWN0b3J5X2l0ZXJhdG9yIGJl
Z2luKGRpcmVjdG9yeV9pdGVyYXRvciBpdGVyKSBub2V4Y2VwdDsKKyAgICBkaXJlY3RvcnlfaXRl
cmF0b3IgZW5kKGNvbnN0IGRpcmVjdG9yeV9pdGVyYXRvciYpIG5vZXhjZXB0OworCisgICAgY2xh
c3MgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjsKKworICAgIC8vIGVuYWJsZSByZWN1cnNp
dmVfZGlyZWN0b3J5X2l0ZXJhdG9yIHJhbmdlLWJhc2VkIGZvciBzdGF0ZW1lbnRzCisgICAgcmVj
dXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciBiZWdpbihyZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJh
dG9yIGl0ZXIpIG5vZXhjZXB0OworICAgIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IgZW5k
KGNvbnN0IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3ImKSBub2V4Y2VwdDsKKworICAgIGNs
YXNzIGZpbGVfc3RhdHVzOworCisgICAgc3RydWN0IHNwYWNlX2luZm8KKyAgICB7CisgICAgICB1
aW50bWF4X3QgY2FwYWNpdHk7CisgICAgICB1aW50bWF4X3QgZnJlZTsKKyAgICAgIHVpbnRtYXhf
dCBhdmFpbGFibGU7CisgICAgfTsKKworICAgIGVudW0gY2xhc3MgZmlsZV90eXBlOworICAgIGVu
dW0gY2xhc3MgcGVybXM7CisgICAgZW51bSBjbGFzcyBwZXJtX29wdGlvbnM7CisgICAgZW51bSBj
bGFzcyBjb3B5X29wdGlvbnM7CisgICAgZW51bSBjbGFzcyBkaXJlY3Rvcnlfb3B0aW9uczsKKwor
ICAgIHR5cGVkZWYgY2hyb25vOjp0aW1lX3BvaW50PHRyaXZpYWwtY2xvY2s+ICBmaWxlX3RpbWVf
dHlwZTsKKworICAgIC8vIG9wZXJhdGlvbmFsIGZ1bmN0aW9ucworCisgICAgcGF0aCBhYnNvbHV0
ZShjb25zdCBwYXRoJiBwKTsKKyAgICBwYXRoIGFic29sdXRlKGNvbnN0IHBhdGgmIHAsIGVycm9y
X2NvZGUgJmVjKTsKKworICAgIHBhdGggY2Fub25pY2FsKGNvbnN0IHBhdGgmIHApOworICAgIHBh
dGggY2Fub25pY2FsKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKTsKKworICAgIHZvaWQg
Y29weShjb25zdCBwYXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0byk7CisgICAgdm9pZCBjb3B5KGNv
bnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvLCBlcnJvcl9jb2RlJiBlYyk7CisgICAgdm9p
ZCBjb3B5KGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvLCBjb3B5X29wdGlvbnMgb3B0
aW9ucyk7CisgICAgdm9pZCBjb3B5KGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvLCBj
b3B5X29wdGlvbnMgb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYyk7
CisKKyAgICBib29sIGNvcHlfZmlsZShjb25zdCBwYXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0byk7
CisgICAgYm9vbCBjb3B5X2ZpbGUoY29uc3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8sIGVy
cm9yX2NvZGUmIGVjKTsKKyAgICBib29sIGNvcHlfZmlsZShjb25zdCBwYXRoJiBmcm9tLCBjb25z
dCBwYXRoJiB0bywgY29weV9vcHRpb25zIG9wdGlvbik7CisgICAgYm9vbCBjb3B5X2ZpbGUoY29u
c3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8sIGNvcHlfb3B0aW9ucyBvcHRpb24sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYyk7CisKKyAgICB2b2lkIGNvcHlf
c3ltbGluayhjb25zdCBwYXRoJiBleGlzdGluZ19zeW1saW5rLCBjb25zdCBwYXRoJiBuZXdfc3lt
bGluayk7CisgICAgdm9pZCBjb3B5X3N5bWxpbmsoY29uc3QgcGF0aCYgZXhpc3Rpbmdfc3ltbGlu
aywgY29uc3QgcGF0aCYgbmV3X3N5bWxpbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29sIGNyZWF0ZV9kaXJlY3Rvcmll
cyhjb25zdCBwYXRoJiBwKTsKKyAgICBib29sIGNyZWF0ZV9kaXJlY3Rvcmllcyhjb25zdCBwYXRo
JiBwLCBlcnJvcl9jb2RlJiBlYyk7CisKKyAgICBib29sIGNyZWF0ZV9kaXJlY3RvcnkoY29uc3Qg
cGF0aCYgcCk7CisgICAgYm9vbCBjcmVhdGVfZGlyZWN0b3J5KGNvbnN0IHBhdGgmIHAsIGVycm9y
X2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIGJvb2wgY3JlYXRlX2RpcmVjdG9yeShjb25zdCBw
YXRoJiBwLCBjb25zdCBwYXRoJiBhdHRyaWJ1dGVzKTsKKyAgICBib29sIGNyZWF0ZV9kaXJlY3Rv
cnkoY29uc3QgcGF0aCYgcCwgY29uc3QgcGF0aCYgYXR0cmlidXRlcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICB2b2lk
IGNyZWF0ZV9kaXJlY3Rvcnlfc3ltbGluayhjb25zdCBwYXRoJiB0bywgY29uc3QgcGF0aCYgbmV3
X3N5bWxpbmspOworICAgIHZvaWQgY3JlYXRlX2RpcmVjdG9yeV9zeW1saW5rKGNvbnN0IHBhdGgm
IHRvLCBjb25zdCBwYXRoJiBuZXdfc3ltbGluaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIHZvaWQgY3Jl
YXRlX2hhcmRfbGluayhjb25zdCBwYXRoJiB0bywgY29uc3QgcGF0aCYgbmV3X2hhcmRfbGluayk7
CisgICAgdm9pZCBjcmVhdGVfaGFyZF9saW5rKGNvbnN0IHBhdGgmIHRvLCBjb25zdCBwYXRoJiBu
ZXdfaGFyZF9saW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2Nv
ZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIHZvaWQgY3JlYXRlX3N5bWxpbmsoY29uc3QgcGF0aCYg
dG8sIGNvbnN0IHBhdGgmIG5ld19zeW1saW5rKTsKKyAgICB2b2lkIGNyZWF0ZV9zeW1saW5rKGNv
bnN0IHBhdGgmIHRvLCBjb25zdCBwYXRoJiBuZXdfc3ltbGluaywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgcGF0aCBjdXJy
ZW50X3BhdGgoKTsKKyAgICBwYXRoIGN1cnJlbnRfcGF0aChlcnJvcl9jb2RlJiBlYyk7CisgICAg
dm9pZCBjdXJyZW50X3BhdGgoY29uc3QgcGF0aCYgcCk7CisgICAgdm9pZCBjdXJyZW50X3BhdGgo
Y29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgYm9vbCBleGlz
dHMoZmlsZV9zdGF0dXMgcykgbm9leGNlcHQ7CisgICAgYm9vbCBleGlzdHMoY29uc3QgcGF0aCYg
cCk7CisgICAgYm9vbCBleGlzdHMoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhj
ZXB0OworCisgICAgYm9vbCBlcXVpdmFsZW50KGNvbnN0IHBhdGgmIHAxLCBjb25zdCBwYXRoJiBw
Mik7CisgICAgYm9vbCBlcXVpdmFsZW50KGNvbnN0IHBhdGgmIHAxLCBjb25zdCBwYXRoJiBwMiwg
ZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgdWludG1heF90ICAgIGZpbGVfc2l6ZShj
b25zdCBwYXRoJiBwKTsKKyAgICB1aW50bWF4X3QgICAgZmlsZV9zaXplKGNvbnN0IHBhdGgmIHAs
IGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIHVpbnRtYXhfdCAgICBoYXJkX2xpbmtf
Y291bnQoY29uc3QgcGF0aCYgcCk7CisgICAgdWludG1heF90ICAgIGhhcmRfbGlua19jb3VudChj
b25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29sIGlzX2Js
b2NrX2ZpbGUoZmlsZV9zdGF0dXMgcykgbm9leGNlcHQ7CisgICAgYm9vbCBpc19ibG9ja19maWxl
KGNvbnN0IHBhdGgmIHApOworICAgIGJvb2wgaXNfYmxvY2tfZmlsZShjb25zdCBwYXRoJiBwLCBl
cnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29sIGlzX2NoYXJhY3Rlcl9maWxlKGZp
bGVfc3RhdHVzIHMpIG5vZXhjZXB0OworICAgIGJvb2wgaXNfY2hhcmFjdGVyX2ZpbGUoY29uc3Qg
cGF0aCYgcCk7CisgICAgYm9vbCBpc19jaGFyYWN0ZXJfZmlsZShjb25zdCBwYXRoJiBwLCBlcnJv
cl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29sIGlzX2RpcmVjdG9yeShmaWxlX3N0YXR1
cyBzKSBub2V4Y2VwdDsKKyAgICBib29sIGlzX2RpcmVjdG9yeShjb25zdCBwYXRoJiBwKTsKKyAg
ICBib29sIGlzX2RpcmVjdG9yeShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNl
cHQ7CisKKyAgICBib29sIGlzX2VtcHR5KGNvbnN0IHBhdGgmIHApOworICAgIGJvb2wgaXNfZW1w
dHkoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgYm9vbCBp
c19maWZvKGZpbGVfc3RhdHVzIHMpIG5vZXhjZXB0OworICAgIGJvb2wgaXNfZmlmbyhjb25zdCBw
YXRoJiBwKTsKKyAgICBib29sIGlzX2ZpZm8oY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMp
IG5vZXhjZXB0OworCisgICAgYm9vbCBpc19vdGhlcihmaWxlX3N0YXR1cyBzKSBub2V4Y2VwdDsK
KyAgICBib29sIGlzX290aGVyKGNvbnN0IHBhdGgmIHApOworICAgIGJvb2wgaXNfb3RoZXIoY29u
c3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgYm9vbCBpc19yZWd1
bGFyX2ZpbGUoZmlsZV9zdGF0dXMgcykgbm9leGNlcHQ7CisgICAgYm9vbCBpc19yZWd1bGFyX2Zp
bGUoY29uc3QgcGF0aCYgcCk7CisgICAgYm9vbCBpc19yZWd1bGFyX2ZpbGUoY29uc3QgcGF0aCYg
cCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgYm9vbCBpc19zb2NrZXQoZmlsZV9z
dGF0dXMgcykgbm9leGNlcHQ7CisgICAgYm9vbCBpc19zb2NrZXQoY29uc3QgcGF0aCYgcCk7Cisg
ICAgYm9vbCBpc19zb2NrZXQoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0
OworCisgICAgYm9vbCBpc19zeW1saW5rKGZpbGVfc3RhdHVzIHMpIG5vZXhjZXB0OworICAgIGJv
b2wgaXNfc3ltbGluayhjb25zdCBwYXRoJiBwKTsKKyAgICBib29sIGlzX3N5bWxpbmsoY29uc3Qg
cGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgZmlsZV90aW1lX3R5cGUg
IGxhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBwKTsKKyAgICBmaWxlX3RpbWVfdHlwZSAgbGFz
dF93cml0ZV90aW1lKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKyAg
ICB2b2lkIGxhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBwLCBmaWxlX3RpbWVfdHlwZSBuZXdf
dGltZSk7CisgICAgdm9pZCBsYXN0X3dyaXRlX3RpbWUoY29uc3QgcGF0aCYgcCwgZmlsZV90aW1l
X3R5cGUgbmV3X3RpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9j
b2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICB2b2lkIHBlcm1pc3Npb25zKGNvbnN0IHBhdGgmIHAs
IHBlcm1zIHBybXMsCisgICAgICAgICAgICAgICAgICAgICBwZXJtX29wdGlvbnMgb3B0cz1wZXJt
X29wdGlvbnM6OnJlcGxhY2UpOworICAgIHZvaWQgcGVybWlzc2lvbnMoY29uc3QgcGF0aCYgcCwg
cGVybXMgcHJtcywgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworICAgIHZvaWQgcGVybWlzc2lv
bnMoY29uc3QgcGF0aCYgcCwgcGVybXMgcHJtcywgcGVybV9vcHRpb25zIG9wdHMsCisgICAgICAg
ICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYyk7CisKKyAgICBwYXRoIHByb3hpbWF0ZShjb25z
dCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYyk7CisgICAgcGF0aCBwcm94aW1hdGUoY29uc3QgcGF0
aCYgcCwgY29uc3QgcGF0aCYgYmFzZSA9IGN1cnJlbnRfcGF0aCgpKTsKKyAgICBwYXRoIHByb3hp
bWF0ZShjb25zdCBwYXRoJiBwLCBjb25zdCBwYXRoJiBiYXNlLCBlcnJvcl9jb2RlICZlYyk7CisK
KyAgICBwYXRoIHJlYWRfc3ltbGluayhjb25zdCBwYXRoJiBwKTsKKyAgICBwYXRoIHJlYWRfc3lt
bGluayhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYyk7CisKKyAgICBwYXRoIHJlbGF0aXZl
KGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKTsKKyAgICBwYXRoIHJlbGF0aXZlKGNvbnN0
IHBhdGgmIHAsIGNvbnN0IHBhdGgmIGJhc2U9Y3VycmVudF9wYXRoKCkpOworICAgIHBhdGggcmVs
YXRpdmUoY29uc3QgcGF0aCYgcCwgY29uc3QgcGF0aCYgYmFzZSwgZXJyb3JfY29kZSYgZWMpOwor
CisgICAgYm9vbCByZW1vdmUoY29uc3QgcGF0aCYgcCk7CisgICAgYm9vbCByZW1vdmUoY29uc3Qg
cGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgdWludG1heF90ICAgIHJl
bW92ZV9hbGwoY29uc3QgcGF0aCYgcCk7CisgICAgdWludG1heF90ICAgIHJlbW92ZV9hbGwoY29u
c3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpOworCisgICAgdm9pZCByZW5hbWUoY29uc3QgcGF0
aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8pOworICAgIHZvaWQgcmVuYW1lKGNvbnN0IHBhdGgmIGZy
b20sIGNvbnN0IHBhdGgmIHRvLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICB2b2lk
IHJlc2l6ZV9maWxlKGNvbnN0IHBhdGgmIHAsIHVpbnRtYXhfdCBzaXplKTsKKyAgICB2b2lkIHJl
c2l6ZV9maWxlKGNvbnN0IHBhdGgmIHAsIHVpbnRtYXhfdCBzaXplLCBlcnJvcl9jb2RlJiBlYykg
bm9leGNlcHQ7CisKKyAgICBzcGFjZV9pbmZvICAgc3BhY2UoY29uc3QgcGF0aCYgcCk7CisgICAg
c3BhY2VfaW5mbyAgIHNwYWNlKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2Vw
dDsKKworICAgIGZpbGVfc3RhdHVzICBzdGF0dXMoY29uc3QgcGF0aCYgcCk7CisgICAgZmlsZV9z
dGF0dXMgIHN0YXR1cyhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisK
KyAgICBib29sIHN0YXR1c19rbm93bihmaWxlX3N0YXR1cyBzKSBub2V4Y2VwdDsKKworICAgIGZp
bGVfc3RhdHVzICBzeW1saW5rX3N0YXR1cyhjb25zdCBwYXRoJiBwKTsKKyAgICBmaWxlX3N0YXR1
cyAgc3ltbGlua19zdGF0dXMoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0
OworCisgICAgcGF0aCB0ZW1wX2RpcmVjdG9yeV9wYXRoKCk7CisgICAgcGF0aCB0ZW1wX2RpcmVj
dG9yeV9wYXRoKGVycm9yX2NvZGUmIGVjKTsKKworICAgIHBhdGggd2Vha2x5X2Nhbm9uaWNhbChw
YXRoIGNvbnN0JiBwKTsKKyAgICBwYXRoIHdlYWtseV9jYW5vbmljYWwocGF0aCBjb25zdCYgcCwg
ZXJyb3JfY29kZSYgZWMpOworCisKK30gfSAgLy8gbmFtZXNwYWNlcyBzdGQ6OmZpbGVzeXN0ZW0K
KworKi8KKworI2luY2x1ZGUgPF9fY29uZmlnPgorI2luY2x1ZGUgPGNzdGRkZWY+CisjaW5jbHVk
ZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxjaHJvbm8+CisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5j
bHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPGxvY2FsZT4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5j
bHVkZSA8c3RhY2s+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHN5c3RlbV9lcnJvcj4K
KyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPGlvbWFuaXA+IC8vIGZvciBxdW90ZWQKKyNp
bmNsdWRlIDxzdHJpbmdfdmlldz4KKy8qICNpbmNsdWRlIDx2ZXJzaW9uPiAqLworCisjaW5jbHVk
ZSA8X19kZWJ1Zz4KKworI2lmIF9MSUJDUFBfU1REX1ZFUiA+PSAxNworI2RlZmluZSBfTElCQ1BQ
X0JFR0lOX05BTUVTUEFDRV9GSUxFU1lTVEVNIFwKKyAgX0xJQkNQUF9CRUdJTl9OQU1FU1BBQ0Vf
U1REIGlubGluZSBuYW1lc3BhY2UgX19mcyB7IG5hbWVzcGFjZSBmaWxlc3lzdGVtIHsKKyNlbHNl
CisjZGVmaW5lIF9MSUJDUFBfQkVHSU5fTkFNRVNQQUNFX0ZJTEVTWVNURU0gXAorICBfTElCQ1BQ
X0JFR0lOX05BTUVTUEFDRV9TVEQgbmFtZXNwYWNlIF9fZnMgeyBuYW1lc3BhY2UgZmlsZXN5c3Rl
bSB7CisjZW5kaWYKKworI2RlZmluZSBfTElCQ1BQX0VORF9OQU1FU1BBQ0VfRklMRVNZU1RFTSBc
CisgIF9MSUJDUFBfRU5EX05BTUVTUEFDRV9TVEQgfSB9CisKKyNkZWZpbmUgX1ZTVERfRlMgX1ZT
VEQ6Ol9fZnM6OmZpbGVzeXN0ZW0KKworI2lmICFkZWZpbmVkKF9MSUJDUFBfSEFTX05PX1BSQUdN
QV9TWVNURU1fSEVBREVSKQorI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorI2VuZGlmCisKK19M
SUJDUFBfUFVTSF9NQUNST1MKKyNpbmNsdWRlIDxfX3VuZGVmX21hY3Jvcz4KKworI2lmbmRlZiBf
TElCQ1BQX0NYWDAzX0xBTkcKKworX0xJQkNQUF9CRUdJTl9OQU1FU1BBQ0VfRklMRVNZU1RFTQor
CitzdHJ1Y3QgX0ZpbGVzeXN0ZW1DbG9jayB7CisjaWYgIWRlZmluZWQoX0xJQkNQUF9IQVNfTk9f
SU5UMTI4KQorICB0eXBlZGVmIF9faW50MTI4X3QgcmVwOworICB0eXBlZGVmIG5hbm8gcGVyaW9k
OworI2Vsc2UKKyAgdHlwZWRlZiBsb25nIGxvbmcgcmVwOworICB0eXBlZGVmIG5hbm8gcGVyaW9k
OworI2VuZGlmCisKKyAgdHlwZWRlZiBjaHJvbm86OmR1cmF0aW9uPHJlcCwgcGVyaW9kPiBkdXJh
dGlvbjsKKyAgdHlwZWRlZiBjaHJvbm86OnRpbWVfcG9pbnQ8X0ZpbGVzeXN0ZW1DbG9jaz4gdGlt
ZV9wb2ludDsKKworICBzdGF0aWMgX0xJQkNQUF9DT05TVEVYUFJfQUZURVJfQ1hYMTEgY29uc3Qg
Ym9vbCBpc19zdGVhZHkgPSBmYWxzZTsKKworICBfTElCQ1BQX0ZVTkNfVklTIHN0YXRpYyB0aW1l
X3BvaW50IG5vdygpIG5vZXhjZXB0OworCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAg
c3RhdGljIHRpbWVfdCB0b190aW1lX3QoY29uc3QgdGltZV9wb2ludCYgX190KSBub2V4Y2VwdCB7
CisgICAgdHlwZWRlZiBjaHJvbm86OmR1cmF0aW9uPHJlcD4gX19zZWNzOworICAgIHJldHVybiB0
aW1lX3QoCisgICAgICAgIGNocm9ubzo6ZHVyYXRpb25fY2FzdDxfX3NlY3M+KF9fdC50aW1lX3Np
bmNlX2Vwb2NoKCkpLmNvdW50KCkpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQorICBzdGF0aWMgdGltZV9wb2ludCBmcm9tX3RpbWVfdCh0aW1lX3QgX190KSBub2V4Y2VwdCB7
CisgICAgdHlwZWRlZiBjaHJvbm86OmR1cmF0aW9uPHJlcD4gX19zZWNzOworICAgIHJldHVybiB0
aW1lX3BvaW50KF9fc2VjcyhfX3QpKTsKKyAgfQorfTsKKwordHlwZWRlZiBjaHJvbm86OnRpbWVf
cG9pbnQ8X0ZpbGVzeXN0ZW1DbG9jaz4gZmlsZV90aW1lX3R5cGU7CisKK3N0cnVjdCBfTElCQ1BQ
X1RZUEVfVklTIHNwYWNlX2luZm8geworICB1aW50bWF4X3QgY2FwYWNpdHk7CisgIHVpbnRtYXhf
dCBmcmVlOworICB1aW50bWF4X3QgYXZhaWxhYmxlOworfTsKKworZW51bSBjbGFzcyBfTElCQ1BQ
X0VOVU1fVklTIGZpbGVfdHlwZSA6IHNpZ25lZCBjaGFyIHsKKyAgbm9uZSA9IDAsCisgIG5vdF9m
b3VuZCA9IC0xLAorICByZWd1bGFyID0gMSwKKyAgZGlyZWN0b3J5ID0gMiwKKyAgc3ltbGluayA9
IDMsCisgIGJsb2NrID0gNCwKKyAgY2hhcmFjdGVyID0gNSwKKyAgZmlmbyA9IDYsCisgIHNvY2tl
dCA9IDcsCisgIHVua25vd24gPSA4Cit9OworCitlbnVtIGNsYXNzIF9MSUJDUFBfRU5VTV9WSVMg
cGVybXMgOiB1bnNpZ25lZCB7CisgIG5vbmUgPSAwLAorCisgIG93bmVyX3JlYWQgPSAwNDAwLAor
ICBvd25lcl93cml0ZSA9IDAyMDAsCisgIG93bmVyX2V4ZWMgPSAwMTAwLAorICBvd25lcl9hbGwg
PSAwNzAwLAorCisgIGdyb3VwX3JlYWQgPSAwNDAsCisgIGdyb3VwX3dyaXRlID0gMDIwLAorICBn
cm91cF9leGVjID0gMDEwLAorICBncm91cF9hbGwgPSAwNzAsCisKKyAgb3RoZXJzX3JlYWQgPSAw
NCwKKyAgb3RoZXJzX3dyaXRlID0gMDIsCisgIG90aGVyc19leGVjID0gMDEsCisgIG90aGVyc19h
bGwgPSAwNywKKworICBhbGwgPSAwNzc3LAorCisgIHNldF91aWQgPSAwNDAwMCwKKyAgc2V0X2dp
ZCA9IDAyMDAwLAorICBzdGlja3lfYml0ID0gMDEwMDAsCisgIG1hc2sgPSAwNzc3NywKKyAgdW5r
bm93biA9IDB4RkZGRiwKK307CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBj
b25zdGV4cHIgcGVybXMgb3BlcmF0b3ImKHBlcm1zIF9MSFMsIHBlcm1zIF9SSFMpIHsKKyAgcmV0
dXJuIHN0YXRpY19jYXN0PHBlcm1zPihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oX0xIUykgJgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihfUkhTKSk7Cit9
CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIgcGVybXMgb3Bl
cmF0b3J8KHBlcm1zIF9MSFMsIHBlcm1zIF9SSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHBl
cm1zPihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oX0xIUykgfAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihfUkhTKSk7Cit9CisKK19MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIgcGVybXMgb3BlcmF0b3JeKHBlcm1zIF9MSFMs
IHBlcm1zIF9SSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHBlcm1zPihzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oX0xIUykgXgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihfUkhTKSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGlu
ZSBjb25zdGV4cHIgcGVybXMgb3BlcmF0b3J+KHBlcm1zIF9MSFMpIHsKKyAgcmV0dXJuIHN0YXRp
Y19jYXN0PHBlcm1zPih+c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KF9MSFMpKTsKK30KKworX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIHBlcm1zJiBvcGVyYXRvciY9KHBlcm1zJiBfTEhT
LCBwZXJtcyBfUkhTKSB7IHJldHVybiBfTEhTID0gX0xIUyAmIF9SSFM7IH0KKworX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWQoraW5saW5lIHBlcm1zJiBvcGVyYXRvcnw9KHBlcm1zJiBfTEhTLCBw
ZXJtcyBfUkhTKSB7IHJldHVybiBfTEhTID0gX0xIUyB8IF9SSFM7IH0KKworX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWQoraW5saW5lIHBlcm1zJiBvcGVyYXRvcl49KHBlcm1zJiBfTEhTLCBwZXJt
cyBfUkhTKSB7IHJldHVybiBfTEhTID0gX0xIUyBeIF9SSFM7IH0KKworZW51bSBjbGFzcyBfTElC
Q1BQX0VOVU1fVklTIHBlcm1fb3B0aW9ucyA6IHVuc2lnbmVkIGNoYXIgeworICByZXBsYWNlID0g
MSwKKyAgYWRkID0gMiwKKyAgcmVtb3ZlID0gNCwKKyAgbm9mb2xsb3cgPSA4Cit9OworCitfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgY29uc3RleHByIHBlcm1fb3B0aW9ucyBvcGVy
YXRvciYocGVybV9vcHRpb25zIF9MSFMsIHBlcm1fb3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBz
dGF0aWNfY2FzdDxwZXJtX29wdGlvbnM+KHN0YXRpY19jYXN0PHVuc2lnbmVkPihfTEhTKSAmCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihf
UkhTKSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIg
cGVybV9vcHRpb25zIG9wZXJhdG9yfChwZXJtX29wdGlvbnMgX0xIUywgcGVybV9vcHRpb25zIF9S
SFMpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHBlcm1fb3B0aW9ucz4oc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KF9MSFMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KF9SSFMpKTsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQor
aW5saW5lIGNvbnN0ZXhwciBwZXJtX29wdGlvbnMgb3BlcmF0b3JeKHBlcm1fb3B0aW9ucyBfTEhT
LCBwZXJtX29wdGlvbnMgX1JIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8cGVybV9vcHRpb25z
PihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oX0xIUykgXgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oX1JIUykpOworfQorCitfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZCitpbmxpbmUgY29uc3RleHByIHBlcm1fb3B0aW9ucyBvcGVyYXRvcn4o
cGVybV9vcHRpb25zIF9MSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHBlcm1fb3B0aW9ucz4o
fnN0YXRpY19jYXN0PHVuc2lnbmVkPihfTEhTKSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKK2lubGluZSBwZXJtX29wdGlvbnMmIG9wZXJhdG9yJj0ocGVybV9vcHRpb25zJiBfTEhT
LCBwZXJtX29wdGlvbnMgX1JIUykgeworICByZXR1cm4gX0xIUyA9IF9MSFMgJiBfUkhTOworfQor
CitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgcGVybV9vcHRpb25zJiBvcGVyYXRv
cnw9KHBlcm1fb3B0aW9ucyYgX0xIUywgcGVybV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIF9M
SFMgPSBfTEhTIHwgX1JIUzsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5l
IHBlcm1fb3B0aW9ucyYgb3BlcmF0b3JePShwZXJtX29wdGlvbnMmIF9MSFMsIHBlcm1fb3B0aW9u
cyBfUkhTKSB7CisgIHJldHVybiBfTEhTID0gX0xIUyBeIF9SSFM7Cit9CisKK2VudW0gY2xhc3Mg
X0xJQkNQUF9FTlVNX1ZJUyBjb3B5X29wdGlvbnMgOiB1bnNpZ25lZCBzaG9ydCB7CisgIG5vbmUg
PSAwLAorICBza2lwX2V4aXN0aW5nID0gMSwKKyAgb3ZlcndyaXRlX2V4aXN0aW5nID0gMiwKKyAg
dXBkYXRlX2V4aXN0aW5nID0gNCwKKyAgcmVjdXJzaXZlID0gOCwKKyAgY29weV9zeW1saW5rcyA9
IDE2LAorICBza2lwX3N5bWxpbmtzID0gMzIsCisgIGRpcmVjdG9yaWVzX29ubHkgPSA2NCwKKyAg
Y3JlYXRlX3N5bWxpbmtzID0gMTI4LAorICBjcmVhdGVfaGFyZF9saW5rcyA9IDI1NiwKKyAgX19p
bl9yZWN1cnNpdmVfY29weSA9IDUxMiwKK307CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
K2lubGluZSBjb25zdGV4cHIgY29weV9vcHRpb25zIG9wZXJhdG9yJihjb3B5X29wdGlvbnMgX0xI
UywgY29weV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PGNvcHlfb3B0aW9u
cz4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9MSFMpICYKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9SSFMpKTsKK30K
KworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhwciBjb3B5X29wdGlv
bnMgb3BlcmF0b3J8KGNvcHlfb3B0aW9ucyBfTEhTLCBjb3B5X29wdGlvbnMgX1JIUykgeworICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y29weV9vcHRpb25zPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9y
dD4oX0xIUykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBzaG9ydD4oX1JIUykpOworfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
CitpbmxpbmUgY29uc3RleHByIGNvcHlfb3B0aW9ucyBvcGVyYXRvcl4oY29weV9vcHRpb25zIF9M
SFMsIGNvcHlfb3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxjb3B5X29wdGlv
bnM+KHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfTEhTKSBeCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfUkhTKSk7Cit9
CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIgY29weV9vcHRp
b25zIG9wZXJhdG9yfihjb3B5X29wdGlvbnMgX0xIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y29weV9vcHRpb25zPih+c3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9MSFMpKTsKK30KKwor
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvcHlfb3B0aW9ucyYgb3BlcmF0b3Im
PShjb3B5X29wdGlvbnMmIF9MSFMsIGNvcHlfb3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBfTEhT
ID0gX0xIUyAmIF9SSFM7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBj
b3B5X29wdGlvbnMmIG9wZXJhdG9yfD0oY29weV9vcHRpb25zJiBfTEhTLCBjb3B5X29wdGlvbnMg
X1JIUykgeworICByZXR1cm4gX0xIUyA9IF9MSFMgfCBfUkhTOworfQorCitfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZCitpbmxpbmUgY29weV9vcHRpb25zJiBvcGVyYXRvcl49KGNvcHlfb3B0aW9u
cyYgX0xIUywgY29weV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIF9MSFMgPSBfTEhTIF4gX1JI
UzsKK30KKworZW51bSBjbGFzcyBfTElCQ1BQX0VOVU1fVklTIGRpcmVjdG9yeV9vcHRpb25zIDog
dW5zaWduZWQgY2hhciB7CisgIG5vbmUgPSAwLAorICBmb2xsb3dfZGlyZWN0b3J5X3N5bWxpbmsg
PSAxLAorICBza2lwX3Blcm1pc3Npb25fZGVuaWVkID0gMgorfTsKKworX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhwciBkaXJlY3Rvcnlfb3B0aW9ucyBvcGVyYXRvciYo
ZGlyZWN0b3J5X29wdGlvbnMgX0xIUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRpcmVjdG9yeV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19j
YXN0PGRpcmVjdG9yeV9vcHRpb25zPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfTEhTKSAm
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4oX1JIUykpOworfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxp
bmUgY29uc3RleHByIGRpcmVjdG9yeV9vcHRpb25zIG9wZXJhdG9yfChkaXJlY3Rvcnlfb3B0aW9u
cyBfTEhTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGly
ZWN0b3J5X29wdGlvbnMgX1JIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8ZGlyZWN0b3J5X29w
dGlvbnM+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9MSFMpIHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfUkhT
KSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIgZGly
ZWN0b3J5X29wdGlvbnMgb3BlcmF0b3JeKGRpcmVjdG9yeV9vcHRpb25zIF9MSFMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnlfb3B0aW9ucyBf
UkhTKSB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxkaXJlY3Rvcnlfb3B0aW9ucz4oc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4oX0xIUykgXgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9SSFMpKTsKK30KKworX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhwciBkaXJlY3Rvcnlfb3B0aW9ucyBv
cGVyYXRvcn4oZGlyZWN0b3J5X29wdGlvbnMgX0xIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8
ZGlyZWN0b3J5X29wdGlvbnM+KH5zdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfTEhTKSk7Cit9
CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBkaXJlY3Rvcnlfb3B0aW9ucyYg
b3BlcmF0b3ImPShkaXJlY3Rvcnlfb3B0aW9ucyYgX0xIUywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkaXJlY3Rvcnlfb3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBfTEhT
ID0gX0xIUyAmIF9SSFM7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBk
aXJlY3Rvcnlfb3B0aW9ucyYgb3BlcmF0b3J8PShkaXJlY3Rvcnlfb3B0aW9ucyYgX0xIUywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnlfb3B0aW9ucyBfUkhT
KSB7CisgIHJldHVybiBfTEhTID0gX0xIUyB8IF9SSFM7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkKK2lubGluZSBkaXJlY3Rvcnlfb3B0aW9ucyYgb3BlcmF0b3JePShkaXJlY3Rvcnlf
b3B0aW9ucyYgX0xIUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJl
Y3Rvcnlfb3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBfTEhTID0gX0xIUyBeIF9SSFM7Cit9CisK
K2NsYXNzIF9MSUJDUFBfVFlQRV9WSVMgZmlsZV9zdGF0dXMgeworcHVibGljOgorICAvLyBjb25z
dHJ1Y3RvcnMKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBmaWxlX3N0YXR1cygpIG5v
ZXhjZXB0IDogZmlsZV9zdGF0dXMoZmlsZV90eXBlOjpub25lKSB7fQorICBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZCisgIGV4cGxpY2l0IGZpbGVfc3RhdHVzKGZpbGVfdHlwZSBfX2Z0LCBwZXJt
cyBfX3BybXMgPSBwZXJtczo6dW5rbm93bikgbm9leGNlcHQKKyAgICAgIDogX19mdF8oX19mdCks
CisgICAgICAgIF9fcHJtc18oX19wcm1zKSB7fQorCisgIGZpbGVfc3RhdHVzKGNvbnN0IGZpbGVf
c3RhdHVzJikgbm9leGNlcHQgPSBkZWZhdWx0OworICBmaWxlX3N0YXR1cyhmaWxlX3N0YXR1cyYm
KSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB+
ZmlsZV9zdGF0dXMoKSB7fQorCisgIGZpbGVfc3RhdHVzJiBvcGVyYXRvcj0oY29uc3QgZmlsZV9z
dGF0dXMmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgIGZpbGVfc3RhdHVzJiBvcGVyYXRvcj0oZmls
ZV9zdGF0dXMmJikgbm9leGNlcHQgPSBkZWZhdWx0OworCisgIC8vIG9ic2VydmVycworICBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVfdHlwZSB0eXBlKCkgY29uc3Qgbm9leGNlcHQg
eyByZXR1cm4gX19mdF87IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHBlcm1z
IHBlcm1pc3Npb25zKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gX19wcm1zXzsgfQorCisgIC8v
IG1vZGlmaWVycworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgdHlwZShmaWxl
X3R5cGUgX19mdCkgbm9leGNlcHQgeyBfX2Z0XyA9IF9fZnQ7IH0KKworICBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZCisgIHZvaWQgcGVybWlzc2lvbnMocGVybXMgX19wKSBub2V4Y2VwdCB7IF9f
cHJtc18gPSBfX3A7IH0KKworcHJpdmF0ZToKKyAgZmlsZV90eXBlIF9fZnRfOworICBwZXJtcyBf
X3BybXNfOworfTsKKworY2xhc3MgX0xJQkNQUF9UWVBFX1ZJUyBkaXJlY3RvcnlfZW50cnk7CisK
K3RlbXBsYXRlIDxjbGFzcyBfVHA+CitzdHJ1Y3QgX19jYW5fY29udmVydF9jaGFyIHsKKyAgc3Rh
dGljIGNvbnN0IGJvb2wgdmFsdWUgPSBmYWxzZTsKK307Cit0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgor
c3RydWN0IF9fY2FuX2NvbnZlcnRfY2hhcjxjb25zdCBfVHA+IDogcHVibGljIF9fY2FuX2NvbnZl
cnRfY2hhcjxfVHA+IHt9OwordGVtcGxhdGUgPD4KK3N0cnVjdCBfX2Nhbl9jb252ZXJ0X2NoYXI8
Y2hhcj4geworICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7CisgIHVzaW5nIF9fY2hh
cl90eXBlID0gY2hhcjsKK307Cit0ZW1wbGF0ZSA8Pgorc3RydWN0IF9fY2FuX2NvbnZlcnRfY2hh
cjx3Y2hhcl90PiB7CisgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsKKyAgdXNpbmcg
X19jaGFyX3R5cGUgPSB3Y2hhcl90OworfTsKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgX19jYW5fY29u
dmVydF9jaGFyPGNoYXIxNl90PiB7CisgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsK
KyAgdXNpbmcgX19jaGFyX3R5cGUgPSBjaGFyMTZfdDsKK307Cit0ZW1wbGF0ZSA8Pgorc3RydWN0
IF9fY2FuX2NvbnZlcnRfY2hhcjxjaGFyMzJfdD4geworICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1
ZSA9IHRydWU7CisgIHVzaW5nIF9fY2hhcl90eXBlID0gY2hhcjMyX3Q7Cit9OworCit0ZW1wbGF0
ZSA8Y2xhc3MgX0VDaGFyVD4KK3R5cGVuYW1lIGVuYWJsZV9pZjxfX2Nhbl9jb252ZXJ0X2NoYXI8
X0VDaGFyVD46OnZhbHVlLCBib29sPjo6dHlwZQorX19pc19zZXBhcmF0b3IoX0VDaGFyVCBfX2Up
IHsKKyAgcmV0dXJuIF9fZSA9PSBfRUNoYXJUKCcvJyk7Cit9CisKK3N0cnVjdCBfTnVsbFNlbnRp
bmFsIHt9OworCit0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgordXNpbmcgX1ZvaWQgPSB2b2lkOworCit0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyA9IHZvaWQ+CitzdHJ1Y3QgX19pc19wYXRoYWJsZV9z
dHJpbmcgOiBwdWJsaWMgZmFsc2VfdHlwZSB7fTsKKwordGVtcGxhdGUgPGNsYXNzIF9FQ2hhclQs
IGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KK3N0cnVjdCBfX2lzX3BhdGhhYmxlX3N0cmlu
ZzwKKyAgICBiYXNpY19zdHJpbmc8X0VDaGFyVCwgX1RyYWl0cywgX0FsbG9jPiwKKyAgICBfVm9p
ZDx0eXBlbmFtZSBfX2Nhbl9jb252ZXJ0X2NoYXI8X0VDaGFyVD46Ol9fY2hhcl90eXBlPiA+Cisg
ICAgOiBwdWJsaWMgX19jYW5fY29udmVydF9jaGFyPF9FQ2hhclQ+IHsKKyAgdXNpbmcgX1N0ciA9
IGJhc2ljX3N0cmluZzxfRUNoYXJULCBfVHJhaXRzLCBfQWxsb2M+OworICB1c2luZyBfQmFzZSA9
IF9fY2FuX2NvbnZlcnRfY2hhcjxfRUNoYXJUPjsKKyAgc3RhdGljIF9FQ2hhclQgY29uc3QqIF9f
cmFuZ2VfYmVnaW4oX1N0ciBjb25zdCYgX19zKSB7IHJldHVybiBfX3MuZGF0YSgpOyB9CisgIHN0
YXRpYyBfRUNoYXJUIGNvbnN0KiBfX3JhbmdlX2VuZChfU3RyIGNvbnN0JiBfX3MpIHsKKyAgICBy
ZXR1cm4gX19zLmRhdGEoKSArIF9fcy5sZW5ndGgoKTsKKyAgfQorICBzdGF0aWMgX0VDaGFyVCBf
X2ZpcnN0X29yX251bGwoX1N0ciBjb25zdCYgX19zKSB7CisgICAgcmV0dXJuIF9fcy5lbXB0eSgp
ID8gX0VDaGFyVHt9IDogX19zWzBdOworICB9Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgX0VDaGFy
VCwgY2xhc3MgX1RyYWl0cz4KK3N0cnVjdCBfX2lzX3BhdGhhYmxlX3N0cmluZzwKKyAgICBiYXNp
Y19zdHJpbmdfdmlldzxfRUNoYXJULCBfVHJhaXRzPiwKKyAgICBfVm9pZDx0eXBlbmFtZSBfX2Nh
bl9jb252ZXJ0X2NoYXI8X0VDaGFyVD46Ol9fY2hhcl90eXBlPiA+CisgICAgOiBwdWJsaWMgX19j
YW5fY29udmVydF9jaGFyPF9FQ2hhclQ+IHsKKyAgdXNpbmcgX1N0ciA9IGJhc2ljX3N0cmluZ192
aWV3PF9FQ2hhclQsIF9UcmFpdHM+OworICB1c2luZyBfQmFzZSA9IF9fY2FuX2NvbnZlcnRfY2hh
cjxfRUNoYXJUPjsKKyAgc3RhdGljIF9FQ2hhclQgY29uc3QqIF9fcmFuZ2VfYmVnaW4oX1N0ciBj
b25zdCYgX19zKSB7IHJldHVybiBfX3MuZGF0YSgpOyB9CisgIHN0YXRpYyBfRUNoYXJUIGNvbnN0
KiBfX3JhbmdlX2VuZChfU3RyIGNvbnN0JiBfX3MpIHsKKyAgICByZXR1cm4gX19zLmRhdGEoKSAr
IF9fcy5sZW5ndGgoKTsKKyAgfQorICBzdGF0aWMgX0VDaGFyVCBfX2ZpcnN0X29yX251bGwoX1N0
ciBjb25zdCYgX19zKSB7CisgICAgcmV0dXJuIF9fcy5lbXB0eSgpID8gX0VDaGFyVHt9IDogX19z
WzBdOworICB9Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZSwgY2xhc3MgX0RTID0gdHlw
ZW5hbWUgZGVjYXk8X1NvdXJjZT46OnR5cGUsCisgICAgICAgICAgY2xhc3MgX1VucXVhbFB0clR5
cGUgPQorICAgICAgICAgICAgICB0eXBlbmFtZSByZW1vdmVfY29uc3Q8dHlwZW5hbWUgcmVtb3Zl
X3BvaW50ZXI8X0RTPjo6dHlwZT46OnR5cGUsCisgICAgICAgICAgYm9vbCBfSXNDaGFyUHRyID0g
aXNfcG9pbnRlcjxfRFM+Ojp2YWx1ZSYmCisgICAgICAgICAgICAgIF9fY2FuX2NvbnZlcnRfY2hh
cjxfVW5xdWFsUHRyVHlwZT46OnZhbHVlPgorc3RydWN0IF9faXNfcGF0aGFibGVfY2hhcl9hcnJh
eSA6IGZhbHNlX3R5cGUge307CisKK3RlbXBsYXRlIDxjbGFzcyBfU291cmNlLCBjbGFzcyBfRUNo
YXJULCBjbGFzcyBfVVB0cj4KK3N0cnVjdCBfX2lzX3BhdGhhYmxlX2NoYXJfYXJyYXk8X1NvdXJj
ZSwgX0VDaGFyVCosIF9VUHRyLCB0cnVlPgorICAgIDogX19jYW5fY29udmVydF9jaGFyPHR5cGVu
YW1lIHJlbW92ZV9jb25zdDxfRUNoYXJUPjo6dHlwZT4geworICB1c2luZyBfQmFzZSA9IF9fY2Fu
X2NvbnZlcnRfY2hhcjx0eXBlbmFtZSByZW1vdmVfY29uc3Q8X0VDaGFyVD46OnR5cGU+OworCisg
IHN0YXRpYyBfRUNoYXJUIGNvbnN0KiBfX3JhbmdlX2JlZ2luKGNvbnN0IF9FQ2hhclQqIF9fYikg
eyByZXR1cm4gX19iOyB9CisgIHN0YXRpYyBfRUNoYXJUIGNvbnN0KiBfX3JhbmdlX2VuZChjb25z
dCBfRUNoYXJUKiBfX2IpIHsKKyAgICB1c2luZyBfSXRlciA9IGNvbnN0IF9FQ2hhclQqOworICAg
IGNvbnN0IF9FQ2hhclQgX19zZW50aW5hbCA9IF9FQ2hhclR7fTsKKyAgICBfSXRlciBfX2UgPSBf
X2I7CisgICAgZm9yICg7ICpfX2UgIT0gX19zZW50aW5hbDsgKytfX2UpCisgICAgICA7CisgICAg
cmV0dXJuIF9fZTsKKyAgfQorCisgIHN0YXRpYyBfRUNoYXJUIF9fZmlyc3Rfb3JfbnVsbChjb25z
dCBfRUNoYXJUKiBfX2IpIHsgcmV0dXJuICpfX2I7IH0KK307CisKK3RlbXBsYXRlIDxjbGFzcyBf
SXRlciwgYm9vbCBfSXNJdCA9IF9faXNfaW5wdXRfaXRlcmF0b3I8X0l0ZXI+Ojp2YWx1ZSwKKyAg
ICAgICAgICBjbGFzcyA9IHZvaWQ+CitzdHJ1Y3QgX19pc19wYXRoYWJsZV9pdGVyIDogZmFsc2Vf
dHlwZSB7fTsKKwordGVtcGxhdGUgPGNsYXNzIF9JdGVyPgorc3RydWN0IF9faXNfcGF0aGFibGVf
aXRlcjwKKyAgICBfSXRlciwgdHJ1ZSwKKyAgICBfVm9pZDx0eXBlbmFtZSBfX2Nhbl9jb252ZXJ0
X2NoYXI8CisgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5
cGU+OjpfX2NoYXJfdHlwZT4gPgorICAgIDogX19jYW5fY29udmVydF9jaGFyPHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGU+IHsKKyAgdXNpbmcgX0VDaGFyVCA9IHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGU7CisgIHVzaW5nIF9CYXNl
ID0gX19jYW5fY29udmVydF9jaGFyPF9FQ2hhclQ+OworCisgIHN0YXRpYyBfSXRlciBfX3Jhbmdl
X2JlZ2luKF9JdGVyIF9fYikgeyByZXR1cm4gX19iOyB9CisgIHN0YXRpYyBfTnVsbFNlbnRpbmFs
IF9fcmFuZ2VfZW5kKF9JdGVyKSB7IHJldHVybiBfTnVsbFNlbnRpbmFse307IH0KKworICBzdGF0
aWMgX0VDaGFyVCBfX2ZpcnN0X29yX251bGwoX0l0ZXIgX19iKSB7IHJldHVybiAqX19iOyB9Cit9
OworCit0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBib29sIF9Jc1N0cmluZ1QgPSBfX2lzX3BhdGhhYmxl
X3N0cmluZzxfVHA+Ojp2YWx1ZSwKKyAgICAgICAgICBib29sIF9Jc0NoYXJJdGVyVCA9IF9faXNf
cGF0aGFibGVfY2hhcl9hcnJheTxfVHA+Ojp2YWx1ZSwKKyAgICAgICAgICBib29sIF9Jc0l0ZXJU
ID0gIV9Jc0NoYXJJdGVyVCAmJiBfX2lzX3BhdGhhYmxlX2l0ZXI8X1RwPjo6dmFsdWU+CitzdHJ1
Y3QgX19pc19wYXRoYWJsZSA6IGZhbHNlX3R5cGUgeworICBzdGF0aWNfYXNzZXJ0KCFfSXNTdHJp
bmdUICYmICFfSXNDaGFySXRlclQgJiYgIV9Jc0l0ZXJULCAiTXVzdCBhbGwgYmUgZmFsc2UiKTsK
K307CisKK3RlbXBsYXRlIDxjbGFzcyBfVHA+CitzdHJ1Y3QgX19pc19wYXRoYWJsZTxfVHAsIHRy
dWUsIGZhbHNlLCBmYWxzZT4gOiBfX2lzX3BhdGhhYmxlX3N0cmluZzxfVHA+IHt9OworCit0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgorc3RydWN0IF9faXNfcGF0aGFibGU8X1RwLCBmYWxzZSwgdHJ1ZSwg
ZmFsc2U+IDogX19pc19wYXRoYWJsZV9jaGFyX2FycmF5PF9UcD4geworfTsKKwordGVtcGxhdGUg
PGNsYXNzIF9UcD4KK3N0cnVjdCBfX2lzX3BhdGhhYmxlPF9UcCwgZmFsc2UsIGZhbHNlLCB0cnVl
PiA6IF9faXNfcGF0aGFibGVfaXRlcjxfVHA+IHt9OworCit0ZW1wbGF0ZSA8Y2xhc3MgX0VDaGFy
VD4KK3N0cnVjdCBfUGF0aENWVCB7CisgIHN0YXRpY19hc3NlcnQoX19jYW5fY29udmVydF9jaGFy
PF9FQ2hhclQ+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAiQ2hhciB0eXBlIG5vdCBjb252ZXJ0
aWJsZSIpOworCisgIHR5cGVkZWYgX19uYXJyb3dfdG9fdXRmODxzaXplb2YoX0VDaGFyVCkgKiBf
X0NIQVJfQklUX18+IF9OYXJyb3dlcjsKKworICBzdGF0aWMgdm9pZCBfX2FwcGVuZF9yYW5nZShz
dHJpbmcmIF9fZGVzdCwgX0VDaGFyVCBjb25zdCogX19iLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfRUNoYXJUIGNvbnN0KiBfX2UpIHsKKyAgICBfTmFycm93ZXIoKShiYWNrX2luc2Vy
dGVyKF9fZGVzdCksIF9fYiwgX19lKTsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfSXRlcj4K
KyAgc3RhdGljIHZvaWQgX19hcHBlbmRfcmFuZ2Uoc3RyaW5nJiBfX2Rlc3QsIF9JdGVyIF9fYiwg
X0l0ZXIgX19lKSB7CisgICAgc3RhdGljX2Fzc2VydCghaXNfc2FtZTxfSXRlciwgX0VDaGFyVCo+
Ojp2YWx1ZSwgIkNhbGwgY29uc3Qgb3ZlcmxvYWQiKTsKKyAgICBpZiAoX19iID09IF9fZSkKKyAg
ICAgIHJldHVybjsKKyAgICBiYXNpY19zdHJpbmc8X0VDaGFyVD4gX190bXAoX19iLCBfX2UpOwor
ICAgIF9OYXJyb3dlcigpKGJhY2tfaW5zZXJ0ZXIoX19kZXN0KSwgX190bXAuZGF0YSgpLAorICAg
ICAgICAgICAgICAgIF9fdG1wLmRhdGEoKSArIF9fdG1wLmxlbmd0aCgpKTsKKyAgfQorCisgIHRl
bXBsYXRlIDxjbGFzcyBfSXRlcj4KKyAgc3RhdGljIHZvaWQgX19hcHBlbmRfcmFuZ2Uoc3RyaW5n
JiBfX2Rlc3QsIF9JdGVyIF9fYiwgX051bGxTZW50aW5hbCkgeworICAgIHN0YXRpY19hc3NlcnQo
IWlzX3NhbWU8X0l0ZXIsIF9FQ2hhclQqPjo6dmFsdWUsICJDYWxsIGNvbnN0IG92ZXJsb2FkIik7
CisgICAgY29uc3QgX0VDaGFyVCBfX3NlbnRpbmFsID0gX0VDaGFyVHt9OworICAgIGlmICgqX19i
ID09IF9fc2VudGluYWwpCisgICAgICByZXR1cm47CisgICAgYmFzaWNfc3RyaW5nPF9FQ2hhclQ+
IF9fdG1wOworICAgIGZvciAoOyAqX19iICE9IF9fc2VudGluYWw7ICsrX19iKQorICAgICAgX190
bXAucHVzaF9iYWNrKCpfX2IpOworICAgIF9OYXJyb3dlcigpKGJhY2tfaW5zZXJ0ZXIoX19kZXN0
KSwgX190bXAuZGF0YSgpLAorICAgICAgICAgICAgICAgIF9fdG1wLmRhdGEoKSArIF9fdG1wLmxl
bmd0aCgpKTsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfU291cmNlPgorICBzdGF0aWMgdm9p
ZCBfX2FwcGVuZF9zb3VyY2Uoc3RyaW5nJiBfX2Rlc3QsIF9Tb3VyY2UgY29uc3QmIF9fcykgewor
ICAgIHVzaW5nIF9UcmFpdHMgPSBfX2lzX3BhdGhhYmxlPF9Tb3VyY2U+OworICAgIF9fYXBwZW5k
X3JhbmdlKF9fZGVzdCwgX1RyYWl0czo6X19yYW5nZV9iZWdpbihfX3MpLAorICAgICAgICAgICAg
ICAgICAgIF9UcmFpdHM6Ol9fcmFuZ2VfZW5kKF9fcykpOworICB9Cit9OworCit0ZW1wbGF0ZSA8
Pgorc3RydWN0IF9QYXRoQ1ZUPGNoYXI+IHsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+Cisg
IHN0YXRpYyB0eXBlbmFtZSBlbmFibGVfaWY8X19pc19leGFjdGx5X2lucHV0X2l0ZXJhdG9yPF9J
dGVyPjo6dmFsdWU+Ojp0eXBlCisgIF9fYXBwZW5kX3JhbmdlKHN0cmluZyYgX19kZXN0LCBfSXRl
ciBfX2IsIF9JdGVyIF9fZSkgeworICAgIGZvciAoOyBfX2IgIT0gX19lOyArK19fYikKKyAgICAg
IF9fZGVzdC5wdXNoX2JhY2soKl9fYik7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+
CisgIHN0YXRpYyB0eXBlbmFtZSBlbmFibGVfaWY8X19pc19mb3J3YXJkX2l0ZXJhdG9yPF9JdGVy
Pjo6dmFsdWU+Ojp0eXBlCisgIF9fYXBwZW5kX3JhbmdlKHN0cmluZyYgX19kZXN0LCBfSXRlciBf
X2IsIF9JdGVyIF9fZSkgeworICAgIF9fZGVzdC5fX2FwcGVuZF9mb3J3YXJkX3Vuc2FmZShfX2Is
IF9fZSk7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CisgIHN0YXRpYyB2b2lkIF9f
YXBwZW5kX3JhbmdlKHN0cmluZyYgX19kZXN0LCBfSXRlciBfX2IsIF9OdWxsU2VudGluYWwpIHsK
KyAgICBjb25zdCBjaGFyIF9fc2VudGluYWwgPSBjaGFye307CisgICAgZm9yICg7ICpfX2IgIT0g
X19zZW50aW5hbDsgKytfX2IpCisgICAgICBfX2Rlc3QucHVzaF9iYWNrKCpfX2IpOworICB9CisK
KyAgdGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2U+CisgIHN0YXRpYyB2b2lkIF9fYXBwZW5kX3NvdXJj
ZShzdHJpbmcmIF9fZGVzdCwgX1NvdXJjZSBjb25zdCYgX19zKSB7CisgICAgdXNpbmcgX1RyYWl0
cyA9IF9faXNfcGF0aGFibGU8X1NvdXJjZT47CisgICAgX19hcHBlbmRfcmFuZ2UoX19kZXN0LCBf
VHJhaXRzOjpfX3JhbmdlX2JlZ2luKF9fcyksCisgICAgICAgICAgICAgICAgICAgX1RyYWl0czo6
X19yYW5nZV9lbmQoX19zKSk7CisgIH0KK307CisKK2NsYXNzIF9MSUJDUFBfVFlQRV9WSVMgcGF0
aCB7CisgIHRlbXBsYXRlIDxjbGFzcyBfU291cmNlT3JJdGVyLCBjbGFzcyBfVHAgPSBwYXRoJj4K
KyAgdXNpbmcgX0VuYWJsZUlmUGF0aGFibGUgPQorICAgICAgdHlwZW5hbWUgZW5hYmxlX2lmPF9f
aXNfcGF0aGFibGU8X1NvdXJjZU9ySXRlcj46OnZhbHVlLCBfVHA+Ojp0eXBlOworCisgIHRlbXBs
YXRlIDxjbGFzcyBfVHA+CisgIHVzaW5nIF9Tb3VyY2VDaGFyID0gdHlwZW5hbWUgX19pc19wYXRo
YWJsZTxfVHA+OjpfX2NoYXJfdHlwZTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorICB1c2lu
ZyBfU291cmNlQ1ZUID0gX1BhdGhDVlQ8X1NvdXJjZUNoYXI8X1RwPiA+OworCitwdWJsaWM6Cisg
IHR5cGVkZWYgY2hhciB2YWx1ZV90eXBlOworICB0eXBlZGVmIGJhc2ljX3N0cmluZzx2YWx1ZV90
eXBlPiBzdHJpbmdfdHlwZTsKKyAgdHlwZWRlZiBfVlNURDo6c3RyaW5nX3ZpZXcgX19zdHJpbmdf
dmlldzsKKyAgc3RhdGljIGNvbnN0ZXhwciB2YWx1ZV90eXBlIHByZWZlcnJlZF9zZXBhcmF0b3Ig
PSAnLyc7CisKKyAgZW51bSBjbGFzcyBfTElCQ1BQX0VOVU1fVklTIGZvcm1hdCA6IHVuc2lnbmVk
IGNoYXIgeworICAgIGF1dG9fZm9ybWF0LAorICAgIG5hdGl2ZV9mb3JtYXQsCisgICAgZ2VuZXJp
Y19mb3JtYXQKKyAgfTsKKworICAvLyBjb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3IKKyAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoKCkgbm9leGNlcHQge30KKyAgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBwYXRoKGNvbnN0IHBhdGgmIF9fcCkgOiBfX3BuXyhfX3AuX19wbl8pIHt9
CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aChwYXRoJiYgX19wKSBub2V4Y2VwdAor
ICAgICAgOiBfX3BuXyhfVlNURDo6bW92ZShfX3AuX19wbl8pKSB7fQorCisgIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkKKyAgcGF0aChzdHJpbmdfdHlwZSYmIF9fcywgZm9ybWF0ID0gZm9ybWF0
OjphdXRvX2Zvcm1hdCkgbm9leGNlcHQKKyAgICAgIDogX19wbl8oX1ZTVEQ6Om1vdmUoX19zKSkg
e30KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZSwgY2xhc3MgPSBfRW5hYmxlSWZQYXRoYWJs
ZTxfU291cmNlLCB2b2lkPiA+CisgIHBhdGgoY29uc3QgX1NvdXJjZSYgX19zcmMsIGZvcm1hdCA9
IGZvcm1hdDo6YXV0b19mb3JtYXQpIHsKKyAgICBfU291cmNlQ1ZUPF9Tb3VyY2U+OjpfX2FwcGVu
ZF9zb3VyY2UoX19wbl8sIF9fc3JjKTsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dD4KKyAgcGF0aChfSW5wdXRJdCBfX2ZpcnN0LCBfSW5wdXRJdCBfX2xhc3QsIGZvcm1hdCA9IGZv
cm1hdDo6YXV0b19mb3JtYXQpIHsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSW5wdXRJdD46OnZhbHVlX3R5cGUgX0l0VmFsOworICAgIF9QYXRoQ1ZUPF9JdFZhbD46Ol9f
YXBwZW5kX3JhbmdlKF9fcG5fLCBfX2ZpcnN0LCBfX2xhc3QpOworICB9CisKKyAgLy8gVE9ETyBJ
bXBsZW1lbnQgbG9jYWxlIGNvbnZlcnNpb25zLgorICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZSwg
Y2xhc3MgPSBfRW5hYmxlSWZQYXRoYWJsZTxfU291cmNlLCB2b2lkPiA+CisgIHBhdGgoY29uc3Qg
X1NvdXJjZSYgX19zcmMsIGNvbnN0IGxvY2FsZSYgX19sb2MsIGZvcm1hdCA9IGZvcm1hdDo6YXV0
b19mb3JtYXQpOworICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXQ+CisgIHBhdGgoX0lucHV0SXQg
X19maXJzdCwgX0lucHV0SXQgX2xhc3QsIGNvbnN0IGxvY2FsZSYgX19sb2MsCisgICAgICAgZm9y
bWF0ID0gZm9ybWF0OjphdXRvX2Zvcm1hdCk7CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQorICB+cGF0aCgpID0gZGVmYXVsdDsKKworICAvLyBhc3NpZ25tZW50cworICBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZCisgIHBhdGgmIG9wZXJhdG9yPShjb25zdCBwYXRoJiBfX3ApIHsKKyAg
ICBfX3BuXyA9IF9fcC5fX3BuXzsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZCisgIHBhdGgmIG9wZXJhdG9yPShwYXRoJiYgX19wKSBub2V4Y2Vw
dCB7CisgICAgX19wbl8gPSBfVlNURDo6bW92ZShfX3AuX19wbl8pOworICAgIHJldHVybiAqdGhp
czsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyA9IHZvaWQ+CisgIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgcGF0aCYgb3BlcmF0b3I9KHN0cmluZ190eXBlJiYgX19zKSBub2V4Y2VwdCB7Cisg
ICAgX19wbl8gPSBfVlNURDo6bW92ZShfX3MpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisg
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGF0aCYgYXNzaWduKHN0cmluZ190eXBlJiYg
X19zKSBub2V4Y2VwdCB7CisgICAgX19wbl8gPSBfVlNURDo6bW92ZShfX3MpOworICAgIHJldHVy
biAqdGhpczsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfU291cmNlPgorICBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZIF9FbmFibGVJZlBhdGhhYmxlPF9Tb3VyY2U+CisgIG9wZXJhdG9yPShj
b25zdCBfU291cmNlJiBfX3NyYykgeworICAgIHJldHVybiB0aGlzLT5hc3NpZ24oX19zcmMpOwor
ICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2U+CisgIF9FbmFibGVJZlBhdGhhYmxlPF9T
b3VyY2U+IGFzc2lnbihjb25zdCBfU291cmNlJiBfX3NyYykgeworICAgIF9fcG5fLmNsZWFyKCk7
CisgICAgX1NvdXJjZUNWVDxfU291cmNlPjo6X19hcHBlbmRfc291cmNlKF9fcG5fLCBfX3NyYyk7
CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0Pgor
ICBwYXRoJiBhc3NpZ24oX0lucHV0SXQgX19maXJzdCwgX0lucHV0SXQgX19sYXN0KSB7CisgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXQ+Ojp2YWx1ZV90eXBlIF9J
dFZhbDsKKyAgICBfX3BuXy5jbGVhcigpOworICAgIF9QYXRoQ1ZUPF9JdFZhbD46Ol9fYXBwZW5k
X3JhbmdlKF9fcG5fLCBfX2ZpcnN0LCBfX2xhc3QpOworICAgIHJldHVybiAqdGhpczsKKyAgfQor
Citwcml2YXRlOgorICB0ZW1wbGF0ZSA8Y2xhc3MgX0VDaGFyVD4KKyAgc3RhdGljIGJvb2wgX19z
b3VyY2VfaXNfYWJzb2x1dGUoX0VDaGFyVCBfX2ZpcnN0X29yX251bGwpIHsKKyAgICByZXR1cm4g
X19pc19zZXBhcmF0b3IoX19maXJzdF9vcl9udWxsKTsKKyAgfQorCitwdWJsaWM6CisgIC8vIGFw
cGVuZHMKKyAgcGF0aCYgb3BlcmF0b3IvPShjb25zdCBwYXRoJiBfX3ApIHsKKyAgICBpZiAoX19w
LmlzX2Fic29sdXRlKCkpIHsKKyAgICAgIF9fcG5fID0gX19wLl9fcG5fOworICAgICAgcmV0dXJu
ICp0aGlzOworICAgIH0KKyAgICBpZiAoaGFzX2ZpbGVuYW1lKCkpCisgICAgICBfX3BuXyArPSBw
cmVmZXJyZWRfc2VwYXJhdG9yOworICAgIF9fcG5fICs9IF9fcC5uYXRpdmUoKTsKKyAgICByZXR1
cm4gKnRoaXM7CisgIH0KKworICAvLyBGSVhNRTogVXNlIF9MSUJDUFBfRElBR05PU0VfV0FSTklO
RyB0byBwcm9kdWNlIGEgZGlhZ25vc3RpYyB3aGVuIF9fc3JjCisgIC8vIGlzIGtub3duIGF0IGNv
bXBpbGUgdGltZSB0byBiZSAiLycgc2luY2UgdGhlIHVzZXIgYWxtb3N0IGNlcnRhaW5seSBpbnRl
bmRlZAorICAvLyB0byBhcHBlbmQgYSBzZXBhcmF0b3IgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyB0
aGUgcGF0aCB3aXRoICIvIgorICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZT4KKyAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWSBfRW5hYmxlSWZQYXRoYWJsZTxfU291cmNlPgorICBvcGVyYXRvci89
KGNvbnN0IF9Tb3VyY2UmIF9fc3JjKSB7CisgICAgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3NyYyk7
CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZT4KKyAgX0VuYWJsZUlmUGF0aGFibGU8
X1NvdXJjZT4gYXBwZW5kKGNvbnN0IF9Tb3VyY2UmIF9fc3JjKSB7CisgICAgdXNpbmcgX1RyYWl0
cyA9IF9faXNfcGF0aGFibGU8X1NvdXJjZT47CisgICAgdXNpbmcgX0NWVCA9IF9QYXRoQ1ZUPF9T
b3VyY2VDaGFyPF9Tb3VyY2U+ID47CisgICAgaWYgKF9fc291cmNlX2lzX2Fic29sdXRlKF9UcmFp
dHM6Ol9fZmlyc3Rfb3JfbnVsbChfX3NyYykpKQorICAgICAgX19wbl8uY2xlYXIoKTsKKyAgICBl
bHNlIGlmIChoYXNfZmlsZW5hbWUoKSkKKyAgICAgIF9fcG5fICs9IHByZWZlcnJlZF9zZXBhcmF0
b3I7CisgICAgX0NWVDo6X19hcHBlbmRfc291cmNlKF9fcG5fLCBfX3NyYyk7CisgICAgcmV0dXJu
ICp0aGlzOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0PgorICBwYXRoJiBhcHBl
bmQoX0lucHV0SXQgX19maXJzdCwgX0lucHV0SXQgX19sYXN0KSB7CisgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXQ+Ojp2YWx1ZV90eXBlIF9JdFZhbDsKKyAgICBz
dGF0aWNfYXNzZXJ0KF9fY2FuX2NvbnZlcnRfY2hhcjxfSXRWYWw+Ojp2YWx1ZSwgIk11c3QgY29u
dmVydGlibGUiKTsKKyAgICB1c2luZyBfQ1ZUID0gX1BhdGhDVlQ8X0l0VmFsPjsKKyAgICBpZiAo
X19maXJzdCAhPSBfX2xhc3QgJiYgX19zb3VyY2VfaXNfYWJzb2x1dGUoKl9fZmlyc3QpKQorICAg
ICAgX19wbl8uY2xlYXIoKTsKKyAgICBlbHNlIGlmIChoYXNfZmlsZW5hbWUoKSkKKyAgICAgIF9f
cG5fICs9IHByZWZlcnJlZF9zZXBhcmF0b3I7CisgICAgX0NWVDo6X19hcHBlbmRfcmFuZ2UoX19w
bl8sIF9fZmlyc3QsIF9fbGFzdCk7CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgLy8gY29u
Y2F0ZW5hdGlvbgorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHBhdGgmIG9wZXJhdG9y
Kz0oY29uc3QgcGF0aCYgX194KSB7CisgICAgX19wbl8gKz0gX194Ll9fcG5fOworICAgIHJldHVy
biAqdGhpczsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGF0aCYgb3Bl
cmF0b3IrPShjb25zdCBzdHJpbmdfdHlwZSYgX194KSB7CisgICAgX19wbl8gKz0gX194OworICAg
IHJldHVybiAqdGhpczsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGF0
aCYgb3BlcmF0b3IrPShfX3N0cmluZ192aWV3IF9feCkgeworICAgIF9fcG5fICs9IF9feDsKKyAg
ICByZXR1cm4gKnRoaXM7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHBh
dGgmIG9wZXJhdG9yKz0oY29uc3QgdmFsdWVfdHlwZSogX194KSB7CisgICAgX19wbl8gKz0gX194
OworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
KyAgcGF0aCYgb3BlcmF0b3IrPSh2YWx1ZV90eXBlIF9feCkgeworICAgIF9fcG5fICs9IF9feDsK
KyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0VDaGFyVD4KKyAg
dHlwZW5hbWUgZW5hYmxlX2lmPF9fY2FuX2NvbnZlcnRfY2hhcjxfRUNoYXJUPjo6dmFsdWUsIHBh
dGgmPjo6dHlwZQorICBvcGVyYXRvcis9KF9FQ2hhclQgX194KSB7CisgICAgYmFzaWNfc3RyaW5n
PF9FQ2hhclQ+IF9fdG1wOworICAgIF9fdG1wICs9IF9feDsKKyAgICBfUGF0aENWVDxfRUNoYXJU
Pjo6X19hcHBlbmRfc291cmNlKF9fcG5fLCBfX3RtcCk7CisgICAgcmV0dXJuICp0aGlzOworICB9
CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2U+CisgIF9FbmFibGVJZlBhdGhhYmxlPF9Tb3Vy
Y2U+IG9wZXJhdG9yKz0oY29uc3QgX1NvdXJjZSYgX194KSB7CisgICAgcmV0dXJuIHRoaXMtPmNv
bmNhdChfX3gpOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2U+CisgIF9FbmFibGVJ
ZlBhdGhhYmxlPF9Tb3VyY2U+IGNvbmNhdChjb25zdCBfU291cmNlJiBfX3gpIHsKKyAgICBfU291
cmNlQ1ZUPF9Tb3VyY2U+OjpfX2FwcGVuZF9zb3VyY2UoX19wbl8sIF9feCk7CisgICAgcmV0dXJu
ICp0aGlzOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0PgorICBwYXRoJiBjb25j
YXQoX0lucHV0SXQgX19maXJzdCwgX0lucHV0SXQgX19sYXN0KSB7CisgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXQ+Ojp2YWx1ZV90eXBlIF9JdFZhbDsKKyAgICBf
UGF0aENWVDxfSXRWYWw+OjpfX2FwcGVuZF9yYW5nZShfX3BuXywgX19maXJzdCwgX19sYXN0KTsK
KyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICAvLyBtb2RpZmllcnMKKyAgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWQorICB2b2lkIGNsZWFyKCkgbm9leGNlcHQgeyBfX3BuXy5jbGVhcigpOyB9
CisKKyAgcGF0aCYgbWFrZV9wcmVmZXJyZWQoKSB7IHJldHVybiAqdGhpczsgfQorCisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGF0aCYgcmVtb3ZlX2ZpbGVuYW1lKCkgeworICAgIGF1
dG8gX19mbmFtZSA9IF9fZmlsZW5hbWUoKTsKKyAgICBpZiAoIV9fZm5hbWUuZW1wdHkoKSkKKyAg
ICAgIF9fcG5fLmVyYXNlKF9fZm5hbWUuZGF0YSgpIC0gX19wbl8uZGF0YSgpKTsKKyAgICByZXR1
cm4gKnRoaXM7CisgIH0KKworICBwYXRoJiByZXBsYWNlX2ZpbGVuYW1lKGNvbnN0IHBhdGgmIF9f
cmVwbGFjZW1lbnQpIHsKKyAgICByZW1vdmVfZmlsZW5hbWUoKTsKKyAgICByZXR1cm4gKCp0aGlz
IC89IF9fcmVwbGFjZW1lbnQpOworICB9CisKKyAgcGF0aCYgcmVwbGFjZV9leHRlbnNpb24oY29u
c3QgcGF0aCYgX19yZXBsYWNlbWVudCA9IHBhdGgoKSk7CisKKyAgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWQorICB2b2lkIHN3YXAocGF0aCYgX19yaHMpIG5vZXhjZXB0IHsgX19wbl8uc3dhcChf
X3Jocy5fX3BuXyk7IH0KKworICAvLyBwcml2YXRlIGhlbHBlciB0byBhbGxvdyByZXNlcnZpbmcg
bWVtb3J5IGluIHRoZSBwYXRoCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdm9pZCBf
X3Jlc2VydmUoc2l6ZV90IF9fcykgeyBfX3BuXy5yZXNlcnZlKF9fcyk7IH0KKworICAvLyBuYXRp
dmUgZm9ybWF0IG9ic2VydmVycworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGNvbnN0
IHN0cmluZ190eXBlJiBuYXRpdmUoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfX3BuXzsgfQor
CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgY29uc3QgdmFsdWVfdHlwZSogY19zdHIo
KSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfX3BuXy5jX3N0cigpOyB9CisKKyAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWSBvcGVyYXRvciBzdHJpbmdfdHlwZSgpIGNvbnN0IHsgcmV0dXJuIF9f
cG5fOyB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9FQ2hhclQsIGNsYXNzIF9UcmFpdHMgPSBjaGFy
X3RyYWl0czxfRUNoYXJUPiwKKyAgICAgICAgICAgIGNsYXNzIF9BbGxvY2F0b3IgPSBhbGxvY2F0
b3I8X0VDaGFyVD4gPgorICBiYXNpY19zdHJpbmc8X0VDaGFyVCwgX1RyYWl0cywgX0FsbG9jYXRv
cj4KKyAgc3RyaW5nKGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkgY29uc3Qg
eworICAgIHVzaW5nIF9DVlQgPSBfX3dpZGVuX2Zyb21fdXRmODxzaXplb2YoX0VDaGFyVCkgKiBf
X0NIQVJfQklUX18+OworICAgIHVzaW5nIF9TdHIgPSBiYXNpY19zdHJpbmc8X0VDaGFyVCwgX1Ry
YWl0cywgX0FsbG9jYXRvcj47CisgICAgX1N0ciBfX3MoX19hKTsKKyAgICBfX3MucmVzZXJ2ZShf
X3BuXy5zaXplKCkpOworICAgIF9DVlQoKShiYWNrX2luc2VydGVyKF9fcyksIF9fcG5fLmRhdGEo
KSwgX19wbl8uZGF0YSgpICsgX19wbl8uc2l6ZSgpKTsKKyAgICByZXR1cm4gX19zOworICB9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGQ6OnN0cmluZyBzdHJpbmcoKSBjb25zdCB7
IHJldHVybiBfX3BuXzsgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0ZDo6d3N0cmlu
ZyB3c3RyaW5nKCkgY29uc3QgeworICAgIHJldHVybiBzdHJpbmc8d2NoYXJfdD4oKTsKKyAgfQor
ICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0ZDo6c3RyaW5nIHU4c3RyaW5nKCkgY29uc3Qg
eyByZXR1cm4gX19wbl87IH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGQ6OnUxNnN0
cmluZyB1MTZzdHJpbmcoKSBjb25zdCB7CisgICAgcmV0dXJuIHN0cmluZzxjaGFyMTZfdD4oKTsK
KyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0ZDo6dTMyc3RyaW5nIHUzMnN0cmlu
ZygpIGNvbnN0IHsKKyAgICByZXR1cm4gc3RyaW5nPGNoYXIzMl90PigpOworICB9CisKKyAgLy8g
Z2VuZXJpYyBmb3JtYXQgb2JzZXJ2ZXJzCisgIHRlbXBsYXRlIDxjbGFzcyBfRUNoYXJULCBjbGFz
cyBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0VDaGFyVD4sCisgICAgICAgICAgICBjbGFzcyBfQWxs
b2NhdG9yID0gYWxsb2NhdG9yPF9FQ2hhclQ+ID4KKyAgYmFzaWNfc3RyaW5nPF9FQ2hhclQsIF9U
cmFpdHMsIF9BbGxvY2F0b3I+CisgIGdlbmVyaWNfc3RyaW5nKGNvbnN0IF9BbGxvY2F0b3ImIF9f
YSA9IF9BbGxvY2F0b3IoKSkgY29uc3QgeworICAgIHJldHVybiBzdHJpbmc8X0VDaGFyVCwgX1Ry
YWl0cywgX0FsbG9jYXRvcj4oX19hKTsKKyAgfQorCisgIHN0ZDo6c3RyaW5nIGdlbmVyaWNfc3Ry
aW5nKCkgY29uc3QgeyByZXR1cm4gX19wbl87IH0KKyAgc3RkOjp3c3RyaW5nIGdlbmVyaWNfd3N0
cmluZygpIGNvbnN0IHsgcmV0dXJuIHN0cmluZzx3Y2hhcl90PigpOyB9CisgIHN0ZDo6c3RyaW5n
IGdlbmVyaWNfdThzdHJpbmcoKSBjb25zdCB7IHJldHVybiBfX3BuXzsgfQorICBzdGQ6OnUxNnN0
cmluZyBnZW5lcmljX3UxNnN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHN0cmluZzxjaGFyMTZfdD4o
KTsgfQorICBzdGQ6OnUzMnN0cmluZyBnZW5lcmljX3UzMnN0cmluZygpIGNvbnN0IHsgcmV0dXJu
IHN0cmluZzxjaGFyMzJfdD4oKTsgfQorCitwcml2YXRlOgorICBpbnQgX19jb21wYXJlKF9fc3Ry
aW5nX3ZpZXcpIGNvbnN0OworICBfX3N0cmluZ192aWV3IF9fcm9vdF9uYW1lKCkgY29uc3Q7Cisg
IF9fc3RyaW5nX3ZpZXcgX19yb290X2RpcmVjdG9yeSgpIGNvbnN0OworICBfX3N0cmluZ192aWV3
IF9fcm9vdF9wYXRoX3JhdygpIGNvbnN0OworICBfX3N0cmluZ192aWV3IF9fcmVsYXRpdmVfcGF0
aCgpIGNvbnN0OworICBfX3N0cmluZ192aWV3IF9fcGFyZW50X3BhdGgoKSBjb25zdDsKKyAgX19z
dHJpbmdfdmlldyBfX2ZpbGVuYW1lKCkgY29uc3Q7CisgIF9fc3RyaW5nX3ZpZXcgX19zdGVtKCkg
Y29uc3Q7CisgIF9fc3RyaW5nX3ZpZXcgX19leHRlbnNpb24oKSBjb25zdDsKKworcHVibGljOgor
ICAvLyBjb21wYXJlCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgaW50IGNvbXBhcmUoY29u
c3QgcGF0aCYgX19wKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fY29tcGFyZShfX3Au
X19wbl8pOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgaW50IGNvbXBhcmUoY29u
c3Qgc3RyaW5nX3R5cGUmIF9fcykgY29uc3QgeworICAgIHJldHVybiBfX2NvbXBhcmUoX19zKTsK
KyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGludCBjb21wYXJlKF9fc3RyaW5nX3Zp
ZXcgX19zKSBjb25zdCB7CisgICAgcmV0dXJuIF9fY29tcGFyZShfX3MpOworICB9CisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgaW50IGNvbXBhcmUoY29uc3QgdmFsdWVfdHlwZSogX19zKSBj
b25zdCB7CisgICAgcmV0dXJuIF9fY29tcGFyZShfX3MpOworICB9CisKKyAgLy8gZGVjb21wb3Np
dGlvbgorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggcm9vdF9uYW1lKCkgY29uc3Qg
eworICAgIHJldHVybiBzdHJpbmdfdHlwZShfX3Jvb3RfbmFtZSgpKTsKKyAgfQorICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIHBhdGggcm9vdF9kaXJlY3RvcnkoKSBjb25zdCB7CisgICAgcmV0
dXJuIHN0cmluZ190eXBlKF9fcm9vdF9kaXJlY3RvcnkoKSk7CisgIH0KKyAgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBwYXRoIHJvb3RfcGF0aCgpIGNvbnN0IHsKKyAgICByZXR1cm4gcm9vdF9u
YW1lKCkuYXBwZW5kKHN0cmluZ190eXBlKF9fcm9vdF9kaXJlY3RvcnkoKSkpOworICB9CisgIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCByZWxhdGl2ZV9wYXRoKCkgY29uc3QgeworICAg
IHJldHVybiBzdHJpbmdfdHlwZShfX3JlbGF0aXZlX3BhdGgoKSk7CisgIH0KKyAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWSBwYXRoIHBhcmVudF9wYXRoKCkgY29uc3QgeworICAgIHJldHVybiBz
dHJpbmdfdHlwZShfX3BhcmVudF9wYXRoKCkpOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkgcGF0aCBmaWxlbmFtZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gc3RyaW5nX3R5cGUoX19m
aWxlbmFtZSgpKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggc3RlbSgp
IGNvbnN0IHsgcmV0dXJuIHN0cmluZ190eXBlKF9fc3RlbSgpKTsgfQorICBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIHBhdGggZXh0ZW5zaW9uKCkgY29uc3QgeworICAgIHJldHVybiBzdHJpbmdf
dHlwZShfX2V4dGVuc2lvbigpKTsKKyAgfQorCisgIC8vIHF1ZXJ5CisgIF9MSUJDUFBfTk9ESVND
QVJEX0FGVEVSX0NYWDE3IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbAorICBlbXB0eSgp
IGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19wbl8uZW1wdHkoKTsKKyAgfQorCisgIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBoYXNfcm9vdF9uYW1lKCkgY29uc3QgeworICAg
IHJldHVybiAhX19yb290X25hbWUoKS5lbXB0eSgpOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgYm9vbCBoYXNfcm9vdF9kaXJlY3RvcnkoKSBjb25zdCB7CisgICAgcmV0dXJuICFf
X3Jvb3RfZGlyZWN0b3J5KCkuZW1wdHkoKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIGJvb2wgaGFzX3Jvb3RfcGF0aCgpIGNvbnN0IHsKKyAgICByZXR1cm4gIV9fcm9vdF9wYXRo
X3JhdygpLmVtcHR5KCk7CisgIH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGhh
c19yZWxhdGl2ZV9wYXRoKCkgY29uc3QgeworICAgIHJldHVybiAhX19yZWxhdGl2ZV9wYXRoKCku
ZW1wdHkoKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaGFzX3BhcmVu
dF9wYXRoKCkgY29uc3QgeworICAgIHJldHVybiAhX19wYXJlbnRfcGF0aCgpLmVtcHR5KCk7Cisg
IH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGhhc19maWxlbmFtZSgpIGNvbnN0
IHsKKyAgICByZXR1cm4gIV9fZmlsZW5hbWUoKS5lbXB0eSgpOworICB9CisgIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkgYm9vbCBoYXNfc3RlbSgpIGNvbnN0IHsgcmV0dXJuICFfX3N0ZW0oKS5l
bXB0eSgpOyB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBoYXNfZXh0ZW5zaW9u
KCkgY29uc3QgeworICAgIHJldHVybiAhX19leHRlbnNpb24oKS5lbXB0eSgpOworICB9CisKKyAg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX2Fic29sdXRlKCkgY29uc3QgeworICAg
IHJldHVybiBoYXNfcm9vdF9kaXJlY3RvcnkoKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIGJvb2wgaXNfcmVsYXRpdmUoKSBjb25zdCB7IHJldHVybiAhaXNfYWJzb2x1dGUoKTsg
fQorCisgIC8vIHJlbGF0aXZlIHBhdGhzCisgIHBhdGggbGV4aWNhbGx5X25vcm1hbCgpIGNvbnN0
OworICBwYXRoIGxleGljYWxseV9yZWxhdGl2ZShjb25zdCBwYXRoJiBfX2Jhc2UpIGNvbnN0Owor
CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCBsZXhpY2FsbHlfcHJveGltYXRlKGNv
bnN0IHBhdGgmIF9fYmFzZSkgY29uc3QgeworICAgIHBhdGggX19yZXN1bHQgPSB0aGlzLT5sZXhp
Y2FsbHlfcmVsYXRpdmUoX19iYXNlKTsKKyAgICBpZiAoX19yZXN1bHQubmF0aXZlKCkuZW1wdHko
KSkKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICByZXR1cm4gX19yZXN1bHQ7CisgIH0KKworICAv
LyBpdGVyYXRvcnMKKyAgY2xhc3MgX0xJQkNQUF9UWVBFX1ZJUyBpdGVyYXRvcjsKKyAgdHlwZWRl
ZiBpdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKworICBpdGVyYXRvciBiZWdpbigpIGNvbnN0Owor
ICBpdGVyYXRvciBlbmQoKSBjb25zdDsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFz
cyBfVHJhaXRzPgorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGZyaWVuZAorICAgICAgdHlw
ZW5hbWUgZW5hYmxlX2lmPGlzX3NhbWU8X0NoYXJULCBjaGFyPjo6dmFsdWUgJiYKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaXNfc2FtZTxfVHJhaXRzLCBjaGFyX3RyYWl0czxjaGFyPiA+
Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mPjo6dHlwZQorICAgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mIF9fb3MsIGNvbnN0IHBhdGgmIF9fcCkgeworICAgIF9fb3MgPDwgc3RkOjpfX3F1
b3RlZChfX3AubmF0aXZlKCkpOworICAgIHJldHVybiBfX29zOworICB9CisKKyAgdGVtcGxhdGUg
PGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBmcmllbmQKKyAgICAgIHR5cGVuYW1lIGVuYWJsZV9pZjwhaXNfc2FtZTxfQ2hhclQsIGNoYXI+
Ojp2YWx1ZSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaXNfc2FtZTxfVHJhaXRz
LCBjaGFyX3RyYWl0czxjaGFyPiA+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mPjo6dHlwZQorICAgICAgb3BlcmF0b3I8PChi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsIGNvbnN0IHBhdGgmIF9fcCkgewor
ICAgIF9fb3MgPDwgc3RkOjpfX3F1b3RlZChfX3Auc3RyaW5nPF9DaGFyVCwgX1RyYWl0cz4oKSk7
CisgICAgcmV0dXJuIF9fb3M7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFz
cyBfVHJhaXRzPgorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGZyaWVuZCBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+JiBfX2lzLCBwYXRoJiBfX3ApIHsKKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzPiBfX3RtcDsKKyAgICBfX2lzID4+IF9fcXVvdGVkKF9fdG1wKTsKKyAgICBfX3AgPSBf
X3RtcDsKKyAgICByZXR1cm4gX19pczsKKyAgfQorCitwcml2YXRlOgorICBpbmxpbmUgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSBwYXRoJgorICBfX2Fzc2lnbl92aWV3KF9fc3RyaW5nX3ZpZXcg
Y29uc3QmIF9fcykgbm9leGNlcHQgeworICAgIF9fcG5fID0gc3RyaW5nX3R5cGUoX19zKTsKKyAg
ICByZXR1cm4gKnRoaXM7CisgIH0KKyAgc3RyaW5nX3R5cGUgX19wbl87Cit9OworCitpbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIHN3YXAocGF0aCYgX19saHMsIHBhdGgmIF9f
cmhzKSBub2V4Y2VwdCB7CisgIF9fbGhzLnN3YXAoX19yaHMpOworfQorCitfTElCQ1BQX0ZVTkNf
VklTCitzaXplX3QgaGFzaF92YWx1ZShjb25zdCBwYXRoJiBfX3ApIG5vZXhjZXB0OworCitpbmxp
bmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIG9wZXJhdG9yPT0oY29uc3QgcGF0aCYg
X19saHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgcGF0aCYgX19yaHMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19y
aHMpID09IDA7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBwYXRoJiBfX2xocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX3Jocykgbm9leGNlcHQgeworICByZXR1
cm4gX19saHMuY29tcGFyZShfX3JocykgIT0gMDsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkgYm9vbCBvcGVyYXRvcjwoY29uc3QgcGF0aCYgX19saHMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX3Jocykg
bm9leGNlcHQgeworICByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPCAwOworfQorCitpbmxp
bmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIG9wZXJhdG9yPD0oY29uc3QgcGF0aCYg
X19saHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgcGF0aCYgX19yaHMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19y
aHMpIDw9IDA7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgb3Bl
cmF0b3I+KGNvbnN0IHBhdGgmIF9fbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX19yaHMpIG5vZXhjZXB0IHsKKyAgcmV0dXJu
IF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHBhdGgmIF9fbGhzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9fcmhzKSBu
b2V4Y2VwdCB7CisgIHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOworfQorCitpbmxp
bmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIG9wZXJhdG9yLyhjb25zdCBwYXRoJiBf
X2xocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHBhdGgmIF9fcmhzKSB7CisgIHBhdGggX19yZXN1bHQoX19saHMpOworICBfX3Jlc3VsdCAv
PSBfX3JoczsKKyAgcmV0dXJuIF9fcmVzdWx0OworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJj
ZT4KK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgICB0eXBlbmFtZSBlbmFibGVfaWY8X19p
c19wYXRoYWJsZTxfU291cmNlPjo6dmFsdWUsIHBhdGg+Ojp0eXBlCisgICAgdThwYXRoKGNvbnN0
IF9Tb3VyY2UmIF9fcykgeworICBzdGF0aWNfYXNzZXJ0KAorICAgICAgaXNfc2FtZTx0eXBlbmFt
ZSBfX2lzX3BhdGhhYmxlPF9Tb3VyY2U+OjpfX2NoYXJfdHlwZSwgY2hhcj46OnZhbHVlLAorICAg
ICAgInU4cGF0aChTb3VyY2UgY29uc3QmKSByZXF1aXJlcyBTb3VyY2UgaGF2ZSBhIGNoYXJhY3Rl
ciB0eXBlIG9mIHR5cGUgIgorICAgICAgIidjaGFyJyIpOworICByZXR1cm4gcGF0aChfX3MpOwor
fQorCit0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXQ+CitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
CisgICAgdHlwZW5hbWUgZW5hYmxlX2lmPF9faXNfcGF0aGFibGU8X0lucHV0SXQ+Ojp2YWx1ZSwg
cGF0aD46OnR5cGUKKyAgICB1OHBhdGgoX0lucHV0SXQgX19mLCBfSW5wdXRJdCBfX2wpIHsKKyAg
c3RhdGljX2Fzc2VydCgKKyAgICAgIGlzX3NhbWU8dHlwZW5hbWUgX19pc19wYXRoYWJsZTxfSW5w
dXRJdD46Ol9fY2hhcl90eXBlLCBjaGFyPjo6dmFsdWUsCisgICAgICAidThwYXRoKEl0ZXIsIEl0
ZXIpIHJlcXVpcmVzIEl0ZXIgaGF2ZSBhIHZhbHVlX3R5cGUgb2YgdHlwZSAnY2hhciciKTsKKyAg
cmV0dXJuIHBhdGgoX19mLCBfX2wpOworfQorCitjbGFzcyBfTElCQ1BQX1RZUEVfVklTIHBhdGg6
Oml0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgZW51bSBfUGFyc2VyU3RhdGUgOiB1bnNpZ25lZCBjaGFy
IHsKKyAgICBfU2luZ3VsYXIsCisgICAgX0JlZm9yZUJlZ2luLAorICAgIF9JblJvb3ROYW1lLAor
ICAgIF9JblJvb3REaXIsCisgICAgX0luRmlsZW5hbWVzLAorICAgIF9JblRyYWlsaW5nU2VwLAor
ICAgIF9BdEVuZAorICB9OworCitwdWJsaWM6CisgIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVy
YXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisKKyAgdHlwZWRlZiBwYXRoIHZhbHVlX3R5cGU7
CisgIHR5cGVkZWYgc3RkOjpwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOworICB0eXBlZGVmIGNv
bnN0IHBhdGgqIHBvaW50ZXI7CisgIHR5cGVkZWYgY29uc3QgcGF0aCYgcmVmZXJlbmNlOworCisg
IHR5cGVkZWYgdm9pZAorICAgICAgX19zdGFzaGluZ19pdGVyYXRvcl90YWc7IC8vIFNlZSByZXZl
cnNlX2l0ZXJhdG9yIGFuZCBfX2lzX3N0YXNoaW5nX2l0ZXJhdG9yCisKK3B1YmxpYzoKKyAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBpdGVyYXRvcigpCisgICAgICA6IF9fc3Rhc2hlZF9l
bGVtXygpLCBfX3BhdGhfcHRyXyhudWxscHRyKSwgX19lbnRyeV8oKSwKKyAgICAgICAgX19zdGF0
ZV8oX1Npbmd1bGFyKSB7fQorCisgIGl0ZXJhdG9yKGNvbnN0IGl0ZXJhdG9yJikgPSBkZWZhdWx0
OworICB+aXRlcmF0b3IoKSA9IGRlZmF1bHQ7CisKKyAgaXRlcmF0b3ImIG9wZXJhdG9yPShjb25z
dCBpdGVyYXRvciYpID0gZGVmYXVsdDsKKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisg
IHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBfX3N0YXNoZWRfZWxlbV87IH0K
KworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNv
bnN0IHsgcmV0dXJuICZfX3N0YXNoZWRfZWxlbV87IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZCisgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkgeworICAgIF9MSUJDUFBfQVNTRVJUKF9f
c3RhdGVfICE9IF9TaW5ndWxhciwKKyAgICAgICAgICAgICAgICAgICAiYXR0ZW1wdGluZyB0byBp
bmNyZW1lbnQgYSBzaW5ndWxhciBpdGVyYXRvciIpOworICAgIF9MSUJDUFBfQVNTRVJUKF9fc3Rh
dGVfICE9IF9BdEVuZCwKKyAgICAgICAgICAgICAgICAgICAiYXR0ZW1wdGluZyB0byBpbmNyZW1l
bnQgdGhlIGVuZCBpdGVyYXRvciIpOworICAgIHJldHVybiBfX2luY3JlbWVudCgpOworICB9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBpdGVyYXRvciBvcGVyYXRvcisrKGludCkg
eworICAgIGl0ZXJhdG9yIF9faXQoKnRoaXMpOworICAgIHRoaXMtPm9wZXJhdG9yKysoKTsKKyAg
ICByZXR1cm4gX19pdDsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgaXRl
cmF0b3ImIG9wZXJhdG9yLS0oKSB7CisgICAgX0xJQkNQUF9BU1NFUlQoX19zdGF0ZV8gIT0gX1Np
bmd1bGFyLAorICAgICAgICAgICAgICAgICAgICJhdHRlbXB0aW5nIHRvIGRlY3JlbWVudCBhIHNp
bmd1bGFyIGl0ZXJhdG9yIik7CisgICAgX0xJQkNQUF9BU1NFUlQoX19lbnRyeV8uZGF0YSgpICE9
IF9fcGF0aF9wdHJfLT5uYXRpdmUoKS5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgImF0dGVt
cHRpbmcgdG8gZGVjcmVtZW50IHRoZSBiZWdpbiBpdGVyYXRvciIpOworICAgIHJldHVybiBfX2Rl
Y3JlbWVudCgpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBpdGVyYXRv
ciBvcGVyYXRvci0tKGludCkgeworICAgIGl0ZXJhdG9yIF9faXQoKnRoaXMpOworICAgIHRoaXMt
Pm9wZXJhdG9yLS0oKTsKKyAgICByZXR1cm4gX19pdDsKKyAgfQorCitwcml2YXRlOgorICBmcmll
bmQgY2xhc3MgcGF0aDsKKworICBpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBmcmll
bmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVyYXRvciYpOwor
CisgIGl0ZXJhdG9yJiBfX2luY3JlbWVudCgpOworICBpdGVyYXRvciYgX19kZWNyZW1lbnQoKTsK
KworICBwYXRoIF9fc3Rhc2hlZF9lbGVtXzsKKyAgY29uc3QgcGF0aCogX19wYXRoX3B0cl87Cisg
IHBhdGg6Ol9fc3RyaW5nX3ZpZXcgX19lbnRyeV87CisgIF9QYXJzZXJTdGF0ZSBfX3N0YXRlXzsK
K307CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBwYXRoOjppdGVyYXRvciYgX19saHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aDo6aXRlcmF0b3ImIF9fcmhzKSB7CisgIHJl
dHVybiBfX2xocy5fX3BhdGhfcHRyXyA9PSBfX3Jocy5fX3BhdGhfcHRyXyAmJgorICAgICAgICAg
X19saHMuX19lbnRyeV8uZGF0YSgpID09IF9fcmhzLl9fZW50cnlfLmRhdGEoKTsKK30KKworaW5s
aW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHBhdGg6
Oml0ZXJhdG9yJiBfX2xocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBwYXRoOjppdGVyYXRvciYgX19yaHMpIHsKKyAgcmV0dXJuICEoX19s
aHMgPT0gX19yaHMpOworfQorCitjbGFzcyBfTElCQ1BQX0VYQ0VQVElPTl9BQkkgZmlsZXN5c3Rl
bV9lcnJvciA6IHB1YmxpYyBzeXN0ZW1fZXJyb3IgeworcHVibGljOgorICBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZCisgIGZpbGVzeXN0ZW1fZXJyb3IoY29uc3Qgc3RyaW5nJiBfX3doYXQsIGVy
cm9yX2NvZGUgX19lYykKKyAgICAgIDogc3lzdGVtX2Vycm9yKF9fZWMsIF9fd2hhdCksCisgICAg
ICAgIF9fc3RvcmFnZV8obWFrZV9zaGFyZWQ8X1N0b3JhZ2U+KHBhdGgoKSwgcGF0aCgpKSkgewor
ICAgIF9fY3JlYXRlX3doYXQoMCk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
CisgIGZpbGVzeXN0ZW1fZXJyb3IoY29uc3Qgc3RyaW5nJiBfX3doYXQsIGNvbnN0IHBhdGgmIF9f
cDEsIGVycm9yX2NvZGUgX19lYykKKyAgICAgIDogc3lzdGVtX2Vycm9yKF9fZWMsIF9fd2hhdCks
CisgICAgICAgIF9fc3RvcmFnZV8obWFrZV9zaGFyZWQ8X1N0b3JhZ2U+KF9fcDEsIHBhdGgoKSkp
IHsKKyAgICBfX2NyZWF0ZV93aGF0KDEpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQorICBmaWxlc3lzdGVtX2Vycm9yKGNvbnN0IHN0cmluZyYgX193aGF0LCBjb25zdCBwYXRo
JiBfX3AxLCBjb25zdCBwYXRoJiBfX3AyLAorICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUg
X19lYykKKyAgICAgIDogc3lzdGVtX2Vycm9yKF9fZWMsIF9fd2hhdCksCisgICAgICAgIF9fc3Rv
cmFnZV8obWFrZV9zaGFyZWQ8X1N0b3JhZ2U+KF9fcDEsIF9fcDIpKSB7CisgICAgX19jcmVhdGVf
d2hhdCgyKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgY29uc3QgcGF0
aCYgcGF0aDEoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfX3N0b3JhZ2VfLT5fX3AxXzsgfQor
CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgY29uc3QgcGF0aCYgcGF0aDIoKSBjb25z
dCBub2V4Y2VwdCB7IHJldHVybiBfX3N0b3JhZ2VfLT5fX3AyXzsgfQorCisgIH5maWxlc3lzdGVt
X2Vycm9yKCkgb3ZlcnJpZGU7IC8vIGtleSBmdW5jdGlvbgorCisgIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkKKyAgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IG5vZXhjZXB0IG92ZXJyaWRlIHsK
KyAgICByZXR1cm4gX19zdG9yYWdlXy0+X193aGF0Xy5jX3N0cigpOworICB9CisKKyAgX0xJQkNQ
UF9GVU5DX1ZJUworICB2b2lkIF9fY3JlYXRlX3doYXQoaW50IF9fbnVtX3BhdGhzKTsKKworcHJp
dmF0ZToKKyAgc3RydWN0IF9TdG9yYWdlIHsKKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
CisgICAgX1N0b3JhZ2UoY29uc3QgcGF0aCYgX19wMSwgY29uc3QgcGF0aCYgX19wMikgOiBfX3Ax
XyhfX3AxKSwgX19wMl8oX19wMikge30KKworICAgIHBhdGggX19wMV87CisgICAgcGF0aCBfX3Ay
XzsKKyAgICBzdHJpbmcgX193aGF0XzsKKyAgfTsKKyAgc2hhcmVkX3B0cjxfU3RvcmFnZT4gX19z
dG9yYWdlXzsKK307CisKK3RlbXBsYXRlIDxjbGFzcy4uLiBfQXJncz4KK19MSUJDUFBfTk9SRVRV
Uk4gaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyNpZm5kZWYgX0xJQkNQUF9OT19F
WENFUFRJT05TCisgICAgdm9pZAorICAgIF9fdGhyb3dfZmlsZXN5c3RlbV9lcnJvcihfQXJncyYm
Li4uIF9fYXJncykgeworICB0aHJvdyBmaWxlc3lzdGVtX2Vycm9yKHN0ZDo6Zm9yd2FyZDxfQXJn
cz4oX19hcmdzKS4uLik7Cit9CisjZWxzZQorICAgIHZvaWQKKyAgICBfX3Rocm93X2ZpbGVzeXN0
ZW1fZXJyb3IoX0FyZ3MmJi4uLikgeworICBfVlNURDo6YWJvcnQoKTsKK30KKyNlbmRpZgorCisv
LyBvcGVyYXRpb25hbCBmdW5jdGlvbnMKKworX0xJQkNQUF9GVU5DX1ZJUworcGF0aCBfX2Fic29s
dXRlKGNvbnN0IHBhdGgmLCBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZV
TkNfVklTCitwYXRoIF9fY2Fub25pY2FsKGNvbnN0IHBhdGgmLCBlcnJvcl9jb2RlKiBfX2VjID0g
bnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCit2b2lkIF9fY29weShjb25zdCBwYXRoJiBfX2Zy
b20sIGNvbnN0IHBhdGgmIF9fdG8sIGNvcHlfb3B0aW9ucyBfX29wdCwKKyAgICAgICAgICAgIGVy
cm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK2Jvb2wgX19jb3B5
X2ZpbGUoY29uc3QgcGF0aCYgX19mcm9tLCBjb25zdCBwYXRoJiBfX3RvLCBjb3B5X29wdGlvbnMg
X19vcHQsCisgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19M
SUJDUFBfRlVOQ19WSVMKK3ZvaWQgX19jb3B5X3N5bWxpbmsoY29uc3QgcGF0aCYgX19leGlzdGlu
Z19zeW1saW5rLCBjb25zdCBwYXRoJiBfX25ld19zeW1saW5rLAorICAgICAgICAgICAgICAgICAg
ICBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCitib29sIF9f
Y3JlYXRlX2RpcmVjdG9yaWVzKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjID0gbnVsbHB0
cik7CitfTElCQ1BQX0ZVTkNfVklTCitib29sIF9fY3JlYXRlX2RpcmVjdG9yeShjb25zdCBwYXRo
JiBwLCBlcnJvcl9jb2RlKiBlYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUworYm9vbCBf
X2NyZWF0ZV9kaXJlY3RvcnkoY29uc3QgcGF0aCYgcCwgY29uc3QgcGF0aCYgYXR0cmlidXRlcywK
KyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUqIGVjID0gbnVsbHB0cik7CitfTElC
Q1BQX0ZVTkNfVklTCit2b2lkIF9fY3JlYXRlX2RpcmVjdG9yeV9zeW1saW5rKGNvbnN0IHBhdGgm
IF9fdG8sIGNvbnN0IHBhdGgmIF9fbmV3X3N5bWxpbmssCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMK
K3ZvaWQgX19jcmVhdGVfaGFyZF9saW5rKGNvbnN0IHBhdGgmIF9fdG8sIGNvbnN0IHBhdGgmIF9f
bmV3X2hhcmRfbGluaywKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUqIF9fZWMg
PSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3ZvaWQgX19jcmVhdGVfc3ltbGluayhjb25z
dCBwYXRoJiBfX3RvLCBjb25zdCBwYXRoJiBfX25ld19zeW1saW5rLAorICAgICAgICAgICAgICAg
ICAgICAgIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3Bh
dGggX19jdXJyZW50X3BhdGgoZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworX0xJQkNQUF9G
VU5DX1ZJUwordm9pZCBfX2N1cnJlbnRfcGF0aChjb25zdCBwYXRoJiwgZXJyb3JfY29kZSogX19l
YyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUworYm9vbCBfX2VxdWl2YWxlbnQoY29uc3Qg
cGF0aCYsIGNvbnN0IHBhdGgmLCBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQ
X0ZVTkNfVklTCit1aW50bWF4X3QgX19maWxlX3NpemUoY29uc3QgcGF0aCYsIGVycm9yX2NvZGUq
IF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3VpbnRtYXhfdCBfX2hhcmRfbGlu
a19jb3VudChjb25zdCBwYXRoJiwgZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworX0xJQkNQ
UF9GVU5DX1ZJUworYm9vbCBfX2ZzX2lzX2VtcHR5KGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUq
IGVjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCitmaWxlX3RpbWVfdHlwZSBfX2xhc3Rf
d3JpdGVfdGltZShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYyA9IG51bGxwdHIpOworX0xJ
QkNQUF9GVU5DX1ZJUwordm9pZCBfX2xhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBwLCBmaWxl
X3RpbWVfdHlwZSBuZXdfdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSog
ZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3ZvaWQgX19wZXJtaXNzaW9ucyhjb25z
dCBwYXRoJiwgcGVybXMsIHBlcm1fb3B0aW9ucywgZXJyb3JfY29kZSogPSBudWxscHRyKTsKK19M
SUJDUFBfRlVOQ19WSVMKK3BhdGggX19yZWFkX3N5bWxpbmsoY29uc3QgcGF0aCYgcCwgZXJyb3Jf
Y29kZSogZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK2Jvb2wgX19yZW1vdmUoY29u
c3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMK
K3VpbnRtYXhfdCBfX3JlbW92ZV9hbGwoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMgPSBu
dWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3ZvaWQgX19yZW5hbWUoY29uc3QgcGF0aCYgZnJv
bSwgY29uc3QgcGF0aCYgdG8sIGVycm9yX2NvZGUqIGVjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZV
TkNfVklTCit2b2lkIF9fcmVzaXplX2ZpbGUoY29uc3QgcGF0aCYgcCwgdWludG1heF90IHNpemUs
IGVycm9yX2NvZGUqIGVjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCitzcGFjZV9pbmZv
IF9fc3BhY2UoY29uc3QgcGF0aCYsIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJD
UFBfRlVOQ19WSVMKK2ZpbGVfc3RhdHVzIF9fc3RhdHVzKGNvbnN0IHBhdGgmLCBlcnJvcl9jb2Rl
KiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCitmaWxlX3N0YXR1cyBfX3N5bWxp
bmtfc3RhdHVzKGNvbnN0IHBhdGgmLCBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElC
Q1BQX0ZVTkNfVklTCitwYXRoIF9fc3lzdGVtX2NvbXBsZXRlKGNvbnN0IHBhdGgmLCBlcnJvcl9j
b2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCitwYXRoIF9fdGVtcF9kaXJl
Y3RvcnlfcGF0aChlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklT
CitwYXRoIF9fd2Vha2x5X2Nhbm9uaWNhbChwYXRoIGNvbnN0JiBfX3AsIGVycm9yX2NvZGUqIF9f
ZWMgPSBudWxscHRyKTsKKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCBj
dXJyZW50X3BhdGgoKSB7CisgIHJldHVybiBfX2N1cnJlbnRfcGF0aCgpOworfQorCitpbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIGN1cnJlbnRfcGF0aChlcnJvcl9jb2RlJiBf
X2VjKSB7CisgIHJldHVybiBfX2N1cnJlbnRfcGF0aCgmX19lYyk7Cit9CisKK2lubGluZSBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQgY3VycmVudF9wYXRoKGNvbnN0IHBhdGgmIF9fcCkg
eworICBfX2N1cnJlbnRfcGF0aChfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWSB2b2lkIGN1cnJlbnRfcGF0aChjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBu
b2V4Y2VwdCB7CisgIF9fY3VycmVudF9wYXRoKF9fcCwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIGFic29sdXRlKGNvbnN0IHBhdGgmIF9fcCkgewor
ICByZXR1cm4gX19hYnNvbHV0ZShfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWSBwYXRoIGFic29sdXRlKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgeworICByZXR1
cm4gX19hYnNvbHV0ZShfX3AsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgcGF0aCBjYW5vbmljYWwoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBfX2Nh
bm9uaWNhbChfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRo
IGNhbm9uaWNhbChjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7CisgIHJldHVybiBfX2Nhbm9u
aWNhbChfX3AsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkg
dm9pZCBjb3B5KGNvbnN0IHBhdGgmIF9fZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX3RvKSB7CisgIF9fY29weShfX2Zyb20sIF9f
dG8sIGNvcHlfb3B0aW9uczo6bm9uZSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIHZvaWQgY29weShjb25zdCBwYXRoJiBfX2Zyb20sIGNvbnN0IHBhdGgmIF9fdG8sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19l
YykgeworICBfX2NvcHkoX19mcm9tLCBfX3RvLCBjb3B5X29wdGlvbnM6Om5vbmUsICZfX2VjKTsK
K30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCBjb3B5KGNvbnN0IHBh
dGgmIF9fZnJvbSwgY29uc3QgcGF0aCYgX190bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb3B5X29wdGlvbnMgX19vcHQpIHsKKyAgX19jb3B5KF9fZnJvbSwg
X190bywgX19vcHQpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lk
IGNvcHkoY29uc3QgcGF0aCYgX19mcm9tLCBjb25zdCBwYXRoJiBfX3RvLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlfb3B0aW9ucyBfX29wdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7
CisgIF9fY29weShfX2Zyb20sIF9fdG8sIF9fb3B0LCAmX19lYyk7Cit9CisKK2lubGluZSBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgY29weV9maWxlKGNvbnN0IHBhdGgmIF9fZnJvbSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBh
dGgmIF9fdG8pIHsKKyAgcmV0dXJuIF9fY29weV9maWxlKF9fZnJvbSwgX190bywgY29weV9vcHRp
b25zOjpub25lKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbAor
Y29weV9maWxlKGNvbnN0IHBhdGgmIF9fZnJvbSwgY29uc3QgcGF0aCYgX190bywgZXJyb3JfY29k
ZSYgX19lYykgeworICByZXR1cm4gX19jb3B5X2ZpbGUoX19mcm9tLCBfX3RvLCBjb3B5X29wdGlv
bnM6Om5vbmUsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkg
Ym9vbAorY29weV9maWxlKGNvbnN0IHBhdGgmIF9fZnJvbSwgY29uc3QgcGF0aCYgX190bywgY29w
eV9vcHRpb25zIF9fb3B0KSB7CisgIHJldHVybiBfX2NvcHlfZmlsZShfX2Zyb20sIF9fdG8sIF9f
b3B0KTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBjb3B5X2Zp
bGUoY29uc3QgcGF0aCYgX19mcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX190bywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlfb3B0aW9ucyBfX29wdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIHsK
KyAgcmV0dXJuIF9fY29weV9maWxlKF9fZnJvbSwgX190bywgX19vcHQsICZfX2VjKTsKK30KKwor
aW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCBjb3B5X3N5bWxpbmsoY29uc3Qg
cGF0aCYgX19leGlzdGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9fbmV3KSB7CisgIF9fY29weV9zeW1saW5rKF9fZXhp
c3RpbmcsIF9fbmV3KTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9p
ZAorY29weV9zeW1saW5rKGNvbnN0IHBhdGgmIF9fZXh0LCBjb25zdCBwYXRoJiBfX25ldywgZXJy
b3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICBfX2NvcHlfc3ltbGluayhfX2V4dCwgX19uZXcs
ICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBjcmVh
dGVfZGlyZWN0b3JpZXMoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBfX2NyZWF0ZV9kaXJl
Y3RvcmllcyhfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29s
IGNyZWF0ZV9kaXJlY3Rvcmllcyhjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7
CisgIHJldHVybiBfX2NyZWF0ZV9kaXJlY3RvcmllcyhfX3AsICZfX2VjKTsKK30KKworaW5saW5l
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBjcmVhdGVfZGlyZWN0b3J5KGNvbnN0IHBh
dGgmIF9fcCkgeworICByZXR1cm4gX19jcmVhdGVfZGlyZWN0b3J5KF9fcCk7Cit9CisKK2lubGlu
ZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wKK2NyZWF0ZV9kaXJlY3RvcnkoY29uc3Qg
cGF0aCYgX19wLCBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX2NyZWF0
ZV9kaXJlY3RvcnkoX19wLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIGJvb2wgY3JlYXRlX2RpcmVjdG9yeShjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCYg
X19hdHRycykgeworICByZXR1cm4gX19jcmVhdGVfZGlyZWN0b3J5KF9fcCwgX19hdHRycyk7Cit9
CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wKK2NyZWF0ZV9kaXJlY3Rv
cnkoY29uc3QgcGF0aCYgX19wLCBjb25zdCBwYXRoJiBfX2F0dHJzLAorICAgICAgICAgICAgICAg
ICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX2NyZWF0ZV9kaXJlY3Rv
cnkoX19wLCBfX2F0dHJzLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIHZvaWQKK2NyZWF0ZV9kaXJlY3Rvcnlfc3ltbGluayhjb25zdCBwYXRoJiBfX3RvLCBj
b25zdCBwYXRoJiBfX25ldykgeworICBfX2NyZWF0ZV9kaXJlY3Rvcnlfc3ltbGluayhfX3RvLCBf
X25ldyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQKK2NyZWF0
ZV9kaXJlY3Rvcnlfc3ltbGluayhjb25zdCBwYXRoJiBfX3RvLCBjb25zdCBwYXRoJiBfX25ldywK
KyAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7Cisg
IF9fY3JlYXRlX2RpcmVjdG9yeV9zeW1saW5rKF9fdG8sIF9fbmV3LCAmX19lYyk7Cit9CisKK2lu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQgY3JlYXRlX2hhcmRfbGluayhjb25z
dCBwYXRoJiBfX3RvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9fbmV3KSB7CisgIF9fY3JlYXRlX2hhcmRfbGluayhf
X3RvLCBfX25ldyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQK
K2NyZWF0ZV9oYXJkX2xpbmsoY29uc3QgcGF0aCYgX190bywgY29uc3QgcGF0aCYgX19uZXcsCisg
ICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgX19jcmVhdGVf
aGFyZF9saW5rKF9fdG8sIF9fbmV3LCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIHZvaWQgY3JlYXRlX3N5bWxpbmsoY29uc3QgcGF0aCYgX190bywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0
aCYgX19uZXcpIHsKKyAgX19jcmVhdGVfc3ltbGluayhfX3RvLCBfX25ldyk7Cit9CisKK2lubGlu
ZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQKK2NyZWF0ZV9zeW1saW5rKGNvbnN0IHBh
dGgmIF9fdG8sIGNvbnN0IHBhdGgmIF9fbmV3LCBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7
CisgIHJldHVybiBfX2NyZWF0ZV9zeW1saW5rKF9fdG8sIF9fbmV3LCAmX19lYyk7Cit9CisKK2lu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgc3RhdHVzX2tub3duKGZpbGVfc3Rh
dHVzIF9fcykgbm9leGNlcHQgeworICByZXR1cm4gX19zLnR5cGUoKSAhPSBmaWxlX3R5cGU6Om5v
bmU7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgZXhpc3RzKGZp
bGVfc3RhdHVzIF9fcykgbm9leGNlcHQgeworICByZXR1cm4gc3RhdHVzX2tub3duKF9fcykgJiYg
X19zLnR5cGUoKSAhPSBmaWxlX3R5cGU6Om5vdF9mb3VuZDsKK30KKworaW5saW5lIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBleGlzdHMoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVy
biBleGlzdHMoX19zdGF0dXMoX19wKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIGJvb2wgZXhpc3RzKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAg
YXV0byBfX3MgPSBfX3N0YXR1cyhfX3AsICZfX2VjKTsKKyAgaWYgKHN0YXR1c19rbm93bihfX3Mp
KQorICAgIF9fZWMuY2xlYXIoKTsKKyAgcmV0dXJuIGV4aXN0cyhfX3MpOworfQorCitpbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGVxdWl2YWxlbnQoY29uc3QgcGF0aCYgX19w
MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBwYXRoJiBfX3AyKSB7CisgIHJldHVybiBfX2VxdWl2YWxlbnQoX19wMSwgX19wMik7Cit9CisK
K2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wKK2VxdWl2YWxlbnQoY29uc3Qg
cGF0aCYgX19wMSwgY29uc3QgcGF0aCYgX19wMiwgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQg
eworICByZXR1cm4gX19lcXVpdmFsZW50KF9fcDEsIF9fcDIsICZfX2VjKTsKK30KKworaW5saW5l
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdWludG1heF90IGZpbGVfc2l6ZShjb25zdCBwYXRo
JiBfX3ApIHsKKyAgcmV0dXJuIF9fZmlsZV9zaXplKF9fcCk7Cit9CisKK2lubGluZSBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIHVpbnRtYXhfdAorZmlsZV9zaXplKGNvbnN0IHBhdGgmIF9fcCwg
ZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICByZXR1cm4gX19maWxlX3NpemUoX19wLCAm
X19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHVpbnRtYXhfdCBo
YXJkX2xpbmtfY291bnQoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBfX2hhcmRfbGlua19j
b3VudChfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB1aW50bWF4
X3QKK2hhcmRfbGlua19jb3VudChjb25zdCBwYXRoJiBfX3AsIGVycm9yX2NvZGUmIF9fZWMpIG5v
ZXhjZXB0IHsKKyAgcmV0dXJuIF9faGFyZF9saW5rX2NvdW50KF9fcCwgJl9fZWMpOworfQorCitp
bmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX2Jsb2NrX2ZpbGUoZmlsZV9z
dGF0dXMgX19zKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX3MudHlwZSgpID09IGZpbGVfdHlwZTo6
YmxvY2s7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfYmxv
Y2tfZmlsZShjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIGlzX2Jsb2NrX2ZpbGUoX19zdGF0
dXMoX19wKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNf
YmxvY2tfZmlsZShjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICBy
ZXR1cm4gaXNfYmxvY2tfZmlsZShfX3N0YXR1cyhfX3AsICZfX2VjKSk7Cit9CisKK2lubGluZSBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wKK2lzX2NoYXJhY3Rlcl9maWxlKGZpbGVfc3Rh
dHVzIF9fcykgbm9leGNlcHQgeworICByZXR1cm4gX19zLnR5cGUoKSA9PSBmaWxlX3R5cGU6OmNo
YXJhY3RlcjsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19j
aGFyYWN0ZXJfZmlsZShjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIGlzX2NoYXJhY3Rlcl9m
aWxlKF9fc3RhdHVzKF9fcCkpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBib29sCitpc19jaGFyYWN0ZXJfZmlsZShjb25zdCBwYXRoJiBfX3AsIGVycm9yX2NvZGUmIF9f
ZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIGlzX2NoYXJhY3Rlcl9maWxlKF9fc3RhdHVzKF9fcCwg
Jl9fZWMpKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19k
aXJlY3RvcnkoZmlsZV9zdGF0dXMgX19zKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX3MudHlwZSgp
ID09IGZpbGVfdHlwZTo6ZGlyZWN0b3J5OworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWSBib29sIGlzX2RpcmVjdG9yeShjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIGlz
X2RpcmVjdG9yeShfX3N0YXR1cyhfX3ApKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgYm9vbCBpc19kaXJlY3RvcnkoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykg
bm9leGNlcHQgeworICByZXR1cm4gaXNfZGlyZWN0b3J5KF9fc3RhdHVzKF9fcCwgJl9fZWMpKTsK
K30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19lbXB0eShjb25z
dCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIF9fZnNfaXNfZW1wdHkoX19wKTsKK30KKworaW5saW5l
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19lbXB0eShjb25zdCBwYXRoJiBfX3As
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2Nv
ZGUmIF9fZWMpIHsKKyAgcmV0dXJuIF9fZnNfaXNfZW1wdHkoX19wLCAmX19lYyk7Cit9CisKK2lu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfZmlmbyhmaWxlX3N0YXR1cyBf
X3MpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fcy50eXBlKCkgPT0gZmlsZV90eXBlOjpmaWZvOwor
fQoraW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19maWZvKGNvbnN0IHBh
dGgmIF9fcCkgeworICByZXR1cm4gaXNfZmlmbyhfX3N0YXR1cyhfX3ApKTsKK30KKworaW5saW5l
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19maWZvKGNvbnN0IHBhdGgmIF9fcCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2Rl
JiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBpc19maWZvKF9fc3RhdHVzKF9fcCwgJl9fZWMp
KTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbAoraXNfcmVndWxh
cl9maWxlKGZpbGVfc3RhdHVzIF9fcykgbm9leGNlcHQgeworICByZXR1cm4gX19zLnR5cGUoKSA9
PSBmaWxlX3R5cGU6OnJlZ3VsYXI7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIGJvb2wgaXNfcmVndWxhcl9maWxlKGNvbnN0IHBhdGgmIF9fcCkgeworICByZXR1cm4gaXNf
cmVndWxhcl9maWxlKF9fc3RhdHVzKF9fcCkpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWSBib29sCitpc19yZWd1bGFyX2ZpbGUoY29uc3QgcGF0aCYgX19wLCBlcnJvcl9j
b2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBpc19yZWd1bGFyX2ZpbGUoX19zdGF0dXMo
X19wLCAmX19lYykpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29s
IGlzX3NvY2tldChmaWxlX3N0YXR1cyBfX3MpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fcy50eXBl
KCkgPT0gZmlsZV90eXBlOjpzb2NrZXQ7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIGJvb2wgaXNfc29ja2V0KGNvbnN0IHBhdGgmIF9fcCkgeworICByZXR1cm4gaXNfc29j
a2V0KF9fc3RhdHVzKF9fcCkpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBib29sIGlzX3NvY2tldChjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7Cisg
IHJldHVybiBpc19zb2NrZXQoX19zdGF0dXMoX19wLCAmX19lYykpOworfQorCitpbmxpbmUgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX3N5bWxpbmsoZmlsZV9zdGF0dXMgX19zKSBu
b2V4Y2VwdCB7CisgIHJldHVybiBfX3MudHlwZSgpID09IGZpbGVfdHlwZTo6c3ltbGluazsKK30K
KworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19zeW1saW5rKGNvbnN0
IHBhdGgmIF9fcCkgeworICByZXR1cm4gaXNfc3ltbGluayhfX3N5bWxpbmtfc3RhdHVzKF9fcCkp
OworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX3N5bWxpbmso
Y29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIGlzX3N5bWxp
bmsoX19zeW1saW5rX3N0YXR1cyhfX3AsICZfX2VjKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZIGJvb2wgaXNfb3RoZXIoZmlsZV9zdGF0dXMgX19zKSBub2V4Y2VwdCB7
CisgIHJldHVybiBleGlzdHMoX19zKSAmJiAhaXNfcmVndWxhcl9maWxlKF9fcykgJiYgIWlzX2Rp
cmVjdG9yeShfX3MpICYmCisgICAgICAgICAhaXNfc3ltbGluayhfX3MpOworfQorCitpbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX290aGVyKGNvbnN0IHBhdGgmIF9fcCkg
eworICByZXR1cm4gaXNfb3RoZXIoX19zdGF0dXMoX19wKSk7Cit9CisKK2lubGluZSBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfb3RoZXIoY29uc3QgcGF0aCYgX19wLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2Vj
KSBub2V4Y2VwdCB7CisgIHJldHVybiBpc19vdGhlcihfX3N0YXR1cyhfX3AsICZfX2VjKSk7Cit9
CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGZpbGVfdGltZV90eXBlCitsYXN0
X3dyaXRlX3RpbWUoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBfX2xhc3Rfd3JpdGVfdGlt
ZShfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBmaWxlX3RpbWVf
dHlwZQorbGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgmIF9fcCwgZXJyb3JfY29kZSYgX19lYykg
bm9leGNlcHQgeworICByZXR1cm4gX19sYXN0X3dyaXRlX3RpbWUoX19wLCAmX19lYyk7Cit9CisK
K2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQgbGFzdF93cml0ZV90aW1lKGNv
bnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZpbGVfdGltZV90eXBlIF9fdCkgeworICBfX2xhc3Rfd3JpdGVfdGltZShf
X3AsIF9fdCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQKK2xh
c3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBfX3AsIGZpbGVfdGltZV90eXBlIF9fdCwKKyAgICAg
ICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIF9fbGFzdF93cml0ZV90
aW1lKF9fcCwgX190LCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIHZvaWQKK3Blcm1pc3Npb25zKGNvbnN0IHBhdGgmIF9fcCwgcGVybXMgX19wcm1zLAorICAg
ICAgICAgICAgcGVybV9vcHRpb25zIF9fb3B0cyA9IHBlcm1fb3B0aW9uczo6cmVwbGFjZSkgewor
ICBfX3Blcm1pc3Npb25zKF9fcCwgX19wcm1zLCBfX29wdHMpOworfQorCitpbmxpbmUgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIHBlcm1pc3Npb25zKGNvbnN0IHBhdGgmIF9fcCwgcGVy
bXMgX19wcm1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIF9fcGVybWlzc2lvbnMoX19wLCBf
X3BybXMsIHBlcm1fb3B0aW9uczo6cmVwbGFjZSwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIHBlcm1pc3Npb25zKGNvbnN0IHBhdGgmIF9fcCwgcGVy
bXMgX19wcm1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwZXJtX29wdGlvbnMgX19vcHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7CisgIF9fcGVybWlzc2lvbnMo
X19wLCBfX3BybXMsIF9fb3B0cywgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWSBwYXRoIHByb3hpbWF0ZShjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX2Jhc2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2Rl
JiBfX2VjKSB7CisgIHBhdGggX190bXAgPSBfX3dlYWtseV9jYW5vbmljYWwoX19wLCAmX19lYyk7
CisgIGlmIChfX2VjKQorICAgIHJldHVybiB7fTsKKyAgcGF0aCBfX3RtcF9iYXNlID0gX193ZWFr
bHlfY2Fub25pY2FsKF9fYmFzZSwgJl9fZWMpOworICBpZiAoX19lYykKKyAgICByZXR1cm4ge307
CisgIHJldHVybiBfX3RtcC5sZXhpY2FsbHlfcHJveGltYXRlKF9fdG1wX2Jhc2UpOworfQorCitp
bmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIHByb3hpbWF0ZShjb25zdCBwYXRo
JiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
cnJvcl9jb2RlJiBfX2VjKSB7CisgIHJldHVybiBwcm94aW1hdGUoX19wLCBjdXJyZW50X3BhdGgo
KSwgX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGgKK3By
b3hpbWF0ZShjb25zdCBwYXRoJiBfX3AsIGNvbnN0IHBhdGgmIF9fYmFzZSA9IGN1cnJlbnRfcGF0
aCgpKSB7CisgIHJldHVybiBfX3dlYWtseV9jYW5vbmljYWwoX19wKS5sZXhpY2FsbHlfcHJveGlt
YXRlKAorICAgICAgX193ZWFrbHlfY2Fub25pY2FsKF9fYmFzZSkpOworfQorCitpbmxpbmUgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIHJlYWRfc3ltbGluayhjb25zdCBwYXRoJiBfX3Ap
IHsKKyAgcmV0dXJuIF9fcmVhZF9zeW1saW5rKF9fcCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZIHBhdGggcmVhZF9zeW1saW5rKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUm
IF9fZWMpIHsKKyAgcmV0dXJuIF9fcmVhZF9zeW1saW5rKF9fcCwgJl9fZWMpOworfQorCitpbmxp
bmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIHJlbGF0aXZlKGNvbnN0IHBhdGgmIF9f
cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
cGF0aCYgX19iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7CisgIHBhdGggX190bXAgPSBfX3dlYWtseV9jYW5vbmlj
YWwoX19wLCAmX19lYyk7CisgIGlmIChfX2VjKQorICAgIHJldHVybiBwYXRoKCk7CisgIHBhdGgg
X190bXBiYXNlID0gX193ZWFrbHlfY2Fub25pY2FsKF9fYmFzZSwgJl9fZWMpOworICBpZiAoX19l
YykKKyAgICByZXR1cm4gcGF0aCgpOworICByZXR1cm4gX190bXAubGV4aWNhbGx5X3JlbGF0aXZl
KF9fdG1wYmFzZSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGgg
cmVsYXRpdmUoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7CisgIHJldHVybiByZWxhdGl2ZShf
X3AsIGN1cnJlbnRfcGF0aCgpLCBfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgcGF0aAorcmVsYXRpdmUoY29uc3QgcGF0aCYgX19wLCBjb25zdCBwYXRoJiBfX2Jh
c2UgPSBjdXJyZW50X3BhdGgoKSkgeworICByZXR1cm4gX193ZWFrbHlfY2Fub25pY2FsKF9fcCku
bGV4aWNhbGx5X3JlbGF0aXZlKF9fd2Vha2x5X2Nhbm9uaWNhbChfX2Jhc2UpKTsKK30KKworaW5s
aW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCByZW1vdmUoY29uc3QgcGF0aCYgX19w
KSB7CisgIHJldHVybiBfX3JlbW92ZShfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWSBib29sIHJlbW92ZShjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7
CisgIHJldHVybiBfX3JlbW92ZShfX3AsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkgdWludG1heF90IHJlbW92ZV9hbGwoY29uc3QgcGF0aCYgX19wKSB7Cisg
IHJldHVybiBfX3JlbW92ZV9hbGwoX19wKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgdWludG1heF90IHJlbW92ZV9hbGwoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYg
X19lYykgeworICByZXR1cm4gX19yZW1vdmVfYWxsKF9fcCwgJl9fZWMpOworfQorCitpbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIHJlbmFtZShjb25zdCBwYXRoJiBfX2Zyb20s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRo
JiBfX3RvKSB7CisgIHJldHVybiBfX3JlbmFtZShfX2Zyb20sIF9fdG8pOworfQorCitpbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkCityZW5hbWUoY29uc3QgcGF0aCYgX19mcm9t
LCBjb25zdCBwYXRoJiBfX3RvLCBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVy
biBfX3JlbmFtZShfX2Zyb20sIF9fdG8sICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkgdm9pZCByZXNpemVfZmlsZShjb25zdCBwYXRoJiBfX3AsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnRtYXhfdCBfX25z
KSB7CisgIHJldHVybiBfX3Jlc2l6ZV9maWxlKF9fcCwgX19ucyk7Cit9CisKK2lubGluZSBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQKK3Jlc2l6ZV9maWxlKGNvbnN0IHBhdGgmIF9fcCwg
dWludG1heF90IF9fbnMsIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9f
cmVzaXplX2ZpbGUoX19wLCBfX25zLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIHNwYWNlX2luZm8gc3BhY2UoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVy
biBfX3NwYWNlKF9fcCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHNw
YWNlX2luZm8gc3BhY2UoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7Cisg
IHJldHVybiBfX3NwYWNlKF9fcCwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWSBmaWxlX3N0YXR1cyBzdGF0dXMoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVy
biBfX3N0YXR1cyhfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBm
aWxlX3N0YXR1cyBzdGF0dXMoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0
IHsKKyAgcmV0dXJuIF9fc3RhdHVzKF9fcCwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWSBmaWxlX3N0YXR1cyBzeW1saW5rX3N0YXR1cyhjb25zdCBwYXRoJiBf
X3ApIHsKKyAgcmV0dXJuIF9fc3ltbGlua19zdGF0dXMoX19wKTsKK30KKworaW5saW5lIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgZmlsZV9zdGF0dXMKK3N5bWxpbmtfc3RhdHVzKGNvbnN0IHBh
dGgmIF9fcCwgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICByZXR1cm4gX19zeW1saW5r
X3N0YXR1cyhfX3AsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkgcGF0aCB0ZW1wX2RpcmVjdG9yeV9wYXRoKCkgeworICByZXR1cm4gX190ZW1wX2RpcmVjdG9y
eV9wYXRoKCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggdGVt
cF9kaXJlY3RvcnlfcGF0aChlcnJvcl9jb2RlJiBfX2VjKSB7CisgIHJldHVybiBfX3RlbXBfZGly
ZWN0b3J5X3BhdGgoJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBwYXRoIHdlYWtseV9jYW5vbmljYWwocGF0aCBjb25zdCYgX19wKSB7CisgIHJldHVybiBfX3dl
YWtseV9jYW5vbmljYWwoX19wKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkgcGF0aCB3ZWFrbHlfY2Fub25pY2FsKHBhdGggY29uc3QmIF9fcCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2Vj
KSB7CisgIHJldHVybiBfX3dlYWtseV9jYW5vbmljYWwoX19wLCAmX19lYyk7Cit9CisKK2NsYXNz
IGRpcmVjdG9yeV9pdGVyYXRvcjsKK2NsYXNzIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I7
CitjbGFzcyBfX2Rpcl9zdHJlYW07CisKK2NsYXNzIGRpcmVjdG9yeV9lbnRyeSB7CisgIHR5cGVk
ZWYgX1ZTVERfRlM6OnBhdGggX1BhdGg7CisKK3B1YmxpYzoKKyAgLy8gY29uc3RydWN0b3JzIGFu
ZCBkZXN0cnVjdG9ycworICBkaXJlY3RvcnlfZW50cnkoKSBub2V4Y2VwdCA9IGRlZmF1bHQ7Cisg
IGRpcmVjdG9yeV9lbnRyeShkaXJlY3RvcnlfZW50cnkgY29uc3QmKSA9IGRlZmF1bHQ7CisgIGRp
cmVjdG9yeV9lbnRyeShkaXJlY3RvcnlfZW50cnkmJikgbm9leGNlcHQgPSBkZWZhdWx0OworCisg
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZXhwbGljaXQgZGlyZWN0b3J5X2VudHJ5KF9Q
YXRoIGNvbnN0JiBfX3ApIDogX19wXyhfX3ApIHsKKyAgICBlcnJvcl9jb2RlIF9fZWM7CisgICAg
X19yZWZyZXNoKCZfX2VjKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAg
ZGlyZWN0b3J5X2VudHJ5KF9QYXRoIGNvbnN0JiBfX3AsIGVycm9yX2NvZGUmIF9fZWMpIDogX19w
XyhfX3ApIHsKKyAgICBfX3JlZnJlc2goJl9fZWMpOworICB9CisKKyAgfmRpcmVjdG9yeV9lbnRy
eSgpIHt9CisKKyAgZGlyZWN0b3J5X2VudHJ5JiBvcGVyYXRvcj0oZGlyZWN0b3J5X2VudHJ5IGNv
bnN0JikgPSBkZWZhdWx0OworICBkaXJlY3RvcnlfZW50cnkmIG9wZXJhdG9yPShkaXJlY3Rvcnlf
ZW50cnkmJikgbm9leGNlcHQgPSBkZWZhdWx0OworCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkKKyAgdm9pZCBhc3NpZ24oX1BhdGggY29uc3QmIF9fcCkgeworICAgIF9fcF8gPSBfX3A7Cisg
ICAgZXJyb3JfY29kZSBfX2VjOworICAgIF9fcmVmcmVzaCgmX19lYyk7CisgIH0KKworICBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgYXNzaWduKF9QYXRoIGNvbnN0JiBfX3AsIGVy
cm9yX2NvZGUmIF9fZWMpIHsKKyAgICBfX3BfID0gX19wOworICAgIF9fcmVmcmVzaCgmX19lYyk7
CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgcmVwbGFjZV9maWxl
bmFtZShfUGF0aCBjb25zdCYgX19wKSB7CisgICAgX19wXy5yZXBsYWNlX2ZpbGVuYW1lKF9fcCk7
CisgICAgZXJyb3JfY29kZSBfX2VjOworICAgIF9fcmVmcmVzaCgmX19lYyk7CisgIH0KKworICBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgcmVwbGFjZV9maWxlbmFtZShfUGF0aCBj
b25zdCYgX19wLCBlcnJvcl9jb2RlJiBfX2VjKSB7CisgICAgX19wXyA9IF9fcF8ucGFyZW50X3Bh
dGgoKSAvIF9fcDsKKyAgICBfX3JlZnJlc2goJl9fZWMpOworICB9CisKKyAgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWQorICB2b2lkIHJlZnJlc2goKSB7IF9fcmVmcmVzaCgpOyB9CisKKyAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB2b2lkIHJlZnJlc2goZXJyb3JfY29kZSYgX19lYykg
bm9leGNlcHQgeyBfX3JlZnJlc2goJl9fZWMpOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQorICBfUGF0aCBjb25zdCYgcGF0aCgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIF9fcF87
IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIG9wZXJhdG9yIGNvbnN0IF9QYXRo
JigpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIF9fcF87IH0KKworICBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZCisgIGJvb2wgZXhpc3RzKCkgY29uc3QgeyByZXR1cm4gX1ZTVERfRlM6OmV4aXN0
cyhmaWxlX3N0YXR1c3tfX2dldF9mdCgpfSk7IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZCisgIGJvb2wgZXhpc3RzKGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0IG5vZXhjZXB0IHsKKyAg
ICByZXR1cm4gX1ZTVERfRlM6OmV4aXN0cyhmaWxlX3N0YXR1c3tfX2dldF9mdCgmX19lYyl9KTsK
KyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19ibG9ja19maWxl
KCkgY29uc3QgeyByZXR1cm4gX19nZXRfZnQoKSA9PSBmaWxlX3R5cGU6OmJsb2NrOyB9CisKKyAg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIGlzX2Jsb2NrX2ZpbGUoZXJyb3JfY29k
ZSYgX19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX2dldF9mdCgmX19lYykgPT0g
ZmlsZV90eXBlOjpibG9jazsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAg
Ym9vbCBpc19jaGFyYWN0ZXJfZmlsZSgpIGNvbnN0IHsgcmV0dXJuIF9fZ2V0X2Z0KCkgPT0gZmls
ZV90eXBlOjpjaGFyYWN0ZXI7IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJv
b2wgaXNfY2hhcmFjdGVyX2ZpbGUoZXJyb3JfY29kZSYgX19lYykgY29uc3Qgbm9leGNlcHQgewor
ICAgIHJldHVybiBfX2dldF9mdCgmX19lYykgPT0gZmlsZV90eXBlOjpjaGFyYWN0ZXI7CisgIH0K
KworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgaXNfZGlyZWN0b3J5KCkgY29u
c3QgeyByZXR1cm4gX19nZXRfZnQoKSA9PSBmaWxlX3R5cGU6OmRpcmVjdG9yeTsgfQorCisgIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19kaXJlY3RvcnkoZXJyb3JfY29kZSYg
X19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX2dldF9mdCgmX19lYykgPT0gZmls
ZV90eXBlOjpkaXJlY3Rvcnk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisg
IGJvb2wgaXNfZmlmbygpIGNvbnN0IHsgcmV0dXJuIF9fZ2V0X2Z0KCkgPT0gZmlsZV90eXBlOjpm
aWZvOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIGlzX2ZpZm8oZXJy
b3JfY29kZSYgX19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX2dldF9mdCgmX19l
YykgPT0gZmlsZV90eXBlOjpmaWZvOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQorICBib29sIGlzX290aGVyKCkgY29uc3QgeyByZXR1cm4gX1ZTVERfRlM6OmlzX290aGVyKGZp
bGVfc3RhdHVze19fZ2V0X2Z0KCl9KTsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
KyAgYm9vbCBpc19vdGhlcihlcnJvcl9jb2RlJiBfX2VjKSBjb25zdCBub2V4Y2VwdCB7CisgICAg
cmV0dXJuIF9WU1REX0ZTOjppc19vdGhlcihmaWxlX3N0YXR1c3tfX2dldF9mdCgmX19lYyl9KTsK
KyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19yZWd1bGFyX2Zp
bGUoKSBjb25zdCB7IHJldHVybiBfX2dldF9mdCgpID09IGZpbGVfdHlwZTo6cmVndWxhcjsgfQor
CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19yZWd1bGFyX2ZpbGUoZXJy
b3JfY29kZSYgX19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX2dldF9mdCgmX19l
YykgPT0gZmlsZV90eXBlOjpyZWd1bGFyOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQorICBib29sIGlzX3NvY2tldCgpIGNvbnN0IHsgcmV0dXJuIF9fZ2V0X2Z0KCkgPT0gZmls
ZV90eXBlOjpzb2NrZXQ7IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wg
aXNfc29ja2V0KGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4g
X19nZXRfZnQoJl9fZWMpID09IGZpbGVfdHlwZTo6c29ja2V0OworICB9CisKKyAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWQorICBib29sIGlzX3N5bWxpbmsoKSBjb25zdCB7IHJldHVybiBfX2dl
dF9zeW1fZnQoKSA9PSBmaWxlX3R5cGU6OnN5bWxpbms7IH0KKworICBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZCisgIGJvb2wgaXNfc3ltbGluayhlcnJvcl9jb2RlJiBfX2VjKSBjb25zdCBub2V4
Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X3N5bV9mdCgmX19lYykgPT0gZmlsZV90eXBlOjpzeW1s
aW5rOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdWludG1heF90IGZpbGVf
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9fZ2V0X3NpemUoKTsgfQorCisgIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkKKyAgdWludG1heF90IGZpbGVfc2l6ZShlcnJvcl9jb2RlJiBfX2VjKSBjb25z
dCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X3NpemUoJl9fZWMpOworICB9CisKKyAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB1aW50bWF4X3QgaGFyZF9saW5rX2NvdW50KCkgY29u
c3QgeyByZXR1cm4gX19nZXRfbmxpbmsoKTsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkKKyAgdWludG1heF90IGhhcmRfbGlua19jb3VudChlcnJvcl9jb2RlJiBfX2VjKSBjb25zdCBu
b2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X25saW5rKCZfX2VjKTsKKyAgfQorCisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV90aW1lX3R5cGUgbGFzdF93cml0ZV90aW1lKCkg
Y29uc3QgeyByZXR1cm4gX19nZXRfd3JpdGVfdGltZSgpOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWQorICBmaWxlX3RpbWVfdHlwZSBsYXN0X3dyaXRlX3RpbWUoZXJyb3JfY29kZSYg
X19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX2dldF93cml0ZV90aW1lKCZfX2Vj
KTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV9zdGF0dXMgc3Rh
dHVzKCkgY29uc3QgeyByZXR1cm4gX19nZXRfc3RhdHVzKCk7IH0KKworICBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZCisgIGZpbGVfc3RhdHVzIHN0YXR1cyhlcnJvcl9jb2RlJiBfX2VjKSBjb25z
dCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X3N0YXR1cygmX19lYyk7CisgIH0KKworICBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVfc3RhdHVzIHN5bWxpbmtfc3RhdHVzKCkg
Y29uc3QgeyByZXR1cm4gX19nZXRfc3ltbGlua19zdGF0dXMoKTsgfQorCisgIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV9zdGF0dXMgc3ltbGlua19zdGF0dXMoZXJyb3JfY29kZSYg
X19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX2dldF9zeW1saW5rX3N0YXR1cygm
X19lYyk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgb3BlcmF0
b3I8KGRpcmVjdG9yeV9lbnRyeSBjb25zdCYgX19yaHMpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICBy
ZXR1cm4gX19wXyA8IF9fcmhzLl9fcF87CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZCisgIGJvb2wgb3BlcmF0b3I9PShkaXJlY3RvcnlfZW50cnkgY29uc3QmIF9fcmhzKSBjb25z
dCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fcF8gPT0gX19yaHMuX19wXzsKKyAgfQorCisgIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBvcGVyYXRvciE9KGRpcmVjdG9yeV9lbnRy
eSBjb25zdCYgX19yaHMpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19wXyAhPSBfX3Jo
cy5fX3BfOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIG9wZXJh
dG9yPD0oZGlyZWN0b3J5X2VudHJ5IGNvbnN0JiBfX3JocykgY29uc3Qgbm9leGNlcHQgeworICAg
IHJldHVybiBfX3BfIDw9IF9fcmhzLl9fcF87CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZCisgIGJvb2wgb3BlcmF0b3I+KGRpcmVjdG9yeV9lbnRyeSBjb25zdCYgX19yaHMpIGNv
bnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19wXyA+IF9fcmhzLl9fcF87CisgIH0KKworICBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgb3BlcmF0b3I+PShkaXJlY3RvcnlfZW50
cnkgY29uc3QmIF9fcmhzKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fcF8gPj0gX19y
aHMuX19wXzsKKyAgfQorCitwcml2YXRlOgorICBmcmllbmQgY2xhc3MgZGlyZWN0b3J5X2l0ZXJh
dG9yOworICBmcmllbmQgY2xhc3MgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjsKKyAgZnJp
ZW5kIGNsYXNzIF9fZGlyX3N0cmVhbTsKKworICBlbnVtIF9DYWNoZVR5cGUgOiB1bnNpZ25lZCBj
aGFyIHsKKyAgICBfRW1wdHksCisgICAgX0l0ZXJTeW1saW5rLAorICAgIF9JdGVyTm9uU3ltbGlu
aywKKyAgICBfUmVmcmVzaFN5bWxpbmssCisgICAgX1JlZnJlc2hTeW1saW5rVW5yZXNvbHZlZCwK
KyAgICBfUmVmcmVzaE5vblN5bWxpbmsKKyAgfTsKKworICBzdHJ1Y3QgX19jYWNoZWRfZGF0YSB7
CisgICAgdWludG1heF90IF9fc2l6ZV87CisgICAgdWludG1heF90IF9fbmxpbmtfOworICAgIGZp
bGVfdGltZV90eXBlIF9fd3JpdGVfdGltZV87CisgICAgcGVybXMgX19zeW1fcGVybXNfOworICAg
IHBlcm1zIF9fbm9uX3N5bV9wZXJtc187CisgICAgZmlsZV90eXBlIF9fdHlwZV87CisgICAgX0Nh
Y2hlVHlwZSBfX2NhY2hlX3R5cGVfOworCisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQor
ICAgIF9fY2FjaGVkX2RhdGEoKSBub2V4Y2VwdCB7IF9fcmVzZXQoKTsgfQorCisgICAgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWQorICAgIHZvaWQgX19yZXNldCgpIHsKKyAgICAgIF9fY2FjaGVf
dHlwZV8gPSBfRW1wdHk7CisgICAgICBfX3R5cGVfID0gZmlsZV90eXBlOjpub25lOworICAgICAg
X19zeW1fcGVybXNfID0gX19ub25fc3ltX3Blcm1zXyA9IHBlcm1zOjp1bmtub3duOworICAgICAg
X19zaXplXyA9IF9fbmxpbmtfID0gdWludG1heF90KC0xKTsKKyAgICAgIF9fd3JpdGVfdGltZV8g
PSBmaWxlX3RpbWVfdHlwZTo6bWluKCk7CisgICAgfQorICB9OworCisgIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkKKyAgc3RhdGljIF9fY2FjaGVkX2RhdGEgX19jcmVhdGVfaXRlcl9yZXN1bHQo
ZmlsZV90eXBlIF9fZnQpIHsKKyAgICBfX2NhY2hlZF9kYXRhIF9fZGF0YTsKKyAgICBfX2RhdGEu
X190eXBlXyA9IF9fZnQ7CisgICAgX19kYXRhLl9fY2FjaGVfdHlwZV8gPSBbJl0oKSB7CisgICAg
ICBzd2l0Y2ggKF9fZnQpIHsKKyAgICAgIGNhc2UgZmlsZV90eXBlOjpub25lOgorICAgICAgICBy
ZXR1cm4gX0VtcHR5OworICAgICAgY2FzZSBmaWxlX3R5cGU6OnN5bWxpbms6CisgICAgICAgIHJl
dHVybiBfSXRlclN5bWxpbms7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gX0l0ZXJO
b25TeW1saW5rOworICAgICAgfQorICAgIH0oKTsKKyAgICByZXR1cm4gX19kYXRhOworICB9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB2b2lkIF9fYXNzaWduX2l0ZXJfZW50cnko
X1BhdGgmJiBfX3AsIF9fY2FjaGVkX2RhdGEgX19kdCkgeworICAgIF9fcF8gPSBzdGQ6Om1vdmUo
X19wKTsKKyAgICBfX2RhdGFfID0gX19kdDsKKyAgfQorCisgIF9MSUJDUFBfRlVOQ19WSVMKKyAg
ZXJyb3JfY29kZSBfX2RvX3JlZnJlc2goKSBub2V4Y2VwdDsKKworICBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZCisgIHN0YXRpYyBib29sIF9faXNfZG5lX2Vycm9yKGVycm9yX2NvZGUgY29uc3Qm
IF9fZWMpIHsKKyAgICBpZiAoIV9fZWMpCisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBzd2l0Y2gg
KHN0YXRpY19jYXN0PGVycmM+KF9fZWMudmFsdWUoKSkpIHsKKyAgICBjYXNlIGVycmM6Om5vX3N1
Y2hfZmlsZV9vcl9kaXJlY3Rvcnk6CisgICAgY2FzZSBlcnJjOjpub3RfYV9kaXJlY3Rvcnk6Cisg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdm9pZCBfX2hhbmRsZV9l
cnJvcihjb25zdCBjaGFyKiBfX21zZywgZXJyb3JfY29kZSogX19kZXN0X2VjLAorICAgICAgICAg
ICAgICAgICAgICAgIGVycm9yX2NvZGUgY29uc3QmIF9fZWMsIGJvb2wgX19hbGxvd19kbmUgPSBm
YWxzZSkgY29uc3QgeworICAgIGlmIChfX2Rlc3RfZWMpIHsKKyAgICAgICpfX2Rlc3RfZWMgPSBf
X2VjOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoX19lYyAmJiAoIV9fYWxsb3dfZG5l
IHx8ICFfX2lzX2RuZV9lcnJvcihfX2VjKSkpCisgICAgICBfX3Rocm93X2ZpbGVzeXN0ZW1fZXJy
b3IoX19tc2csIF9fcF8sIF9fZWMpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQorICB2b2lkIF9fcmVmcmVzaChlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cikgeworICAgIF9f
aGFuZGxlX2Vycm9yKCJpbiBkaXJlY3RvcnlfZW50cnk6OnJlZnJlc2giLCBfX2VjLCBfX2RvX3Jl
ZnJlc2goKSwKKyAgICAgICAgICAgICAgICAgICAvKmFsbG93X2RuZSovIHRydWUpOworICB9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBmaWxlX3R5cGUgX19nZXRfc3ltX2Z0KGVy
cm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKSBjb25zdCB7CisgICAgc3dpdGNoIChfX2RhdGFfLl9f
Y2FjaGVfdHlwZV8pIHsKKyAgICBjYXNlIF9FbXB0eToKKyAgICAgIHJldHVybiBfX3N5bWxpbmtf
c3RhdHVzKF9fcF8sIF9fZWMpLnR5cGUoKTsKKyAgICBjYXNlIF9JdGVyU3ltbGluazoKKyAgICBj
YXNlIF9SZWZyZXNoU3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGlua1VucmVzb2x2ZWQ6
CisgICAgICBpZiAoX19lYykKKyAgICAgICAgX19lYy0+Y2xlYXIoKTsKKyAgICAgIHJldHVybiBm
aWxlX3R5cGU6OnN5bWxpbms7CisgICAgY2FzZSBfSXRlck5vblN5bWxpbms6CisgICAgY2FzZSBf
UmVmcmVzaE5vblN5bWxpbms6CisgICAgICBmaWxlX3N0YXR1cyBfX3N0KF9fZGF0YV8uX190eXBl
Xyk7CisgICAgICBpZiAoX19lYyAmJiAhX1ZTVERfRlM6OmV4aXN0cyhfX3N0KSkKKyAgICAgICAg
Kl9fZWMgPSBtYWtlX2Vycm9yX2NvZGUoZXJyYzo6bm9fc3VjaF9maWxlX29yX2RpcmVjdG9yeSk7
CisgICAgICBlbHNlIGlmIChfX2VjKQorICAgICAgICBfX2VjLT5jbGVhcigpOworICAgICAgcmV0
dXJuIF9fZGF0YV8uX190eXBlXzsKKyAgICB9CisgICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOwor
ICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBmaWxlX3R5cGUgX19nZXRfZnQo
ZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpIGNvbnN0IHsKKyAgICBzd2l0Y2ggKF9fZGF0YV8u
X19jYWNoZV90eXBlXykgeworICAgIGNhc2UgX0VtcHR5OgorICAgIGNhc2UgX0l0ZXJTeW1saW5r
OgorICAgIGNhc2UgX1JlZnJlc2hTeW1saW5rVW5yZXNvbHZlZDoKKyAgICAgIHJldHVybiBfX3N0
YXR1cyhfX3BfLCBfX2VjKS50eXBlKCk7CisgICAgY2FzZSBfSXRlck5vblN5bWxpbms6CisgICAg
Y2FzZSBfUmVmcmVzaE5vblN5bWxpbms6CisgICAgY2FzZSBfUmVmcmVzaFN5bWxpbms6IHsKKyAg
ICAgIGZpbGVfc3RhdHVzIF9fc3QoX19kYXRhXy5fX3R5cGVfKTsKKyAgICAgIGlmIChfX2VjICYm
ICFfVlNURF9GUzo6ZXhpc3RzKF9fc3QpKQorICAgICAgICAqX19lYyA9IG1ha2VfZXJyb3JfY29k
ZShlcnJjOjpub19zdWNoX2ZpbGVfb3JfZGlyZWN0b3J5KTsKKyAgICAgIGVsc2UgaWYgKF9fZWMp
CisgICAgICAgIF9fZWMtPmNsZWFyKCk7CisgICAgICByZXR1cm4gX19kYXRhXy5fX3R5cGVfOwor
ICAgIH0KKyAgICB9CisgICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOworICB9CisKKyAgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWQorICBmaWxlX3N0YXR1cyBfX2dldF9zdGF0dXMoZXJyb3JfY29k
ZSogX19lYyA9IG51bGxwdHIpIGNvbnN0IHsKKyAgICBzd2l0Y2ggKF9fZGF0YV8uX19jYWNoZV90
eXBlXykgeworICAgIGNhc2UgX0VtcHR5OgorICAgIGNhc2UgX0l0ZXJOb25TeW1saW5rOgorICAg
IGNhc2UgX0l0ZXJTeW1saW5rOgorICAgIGNhc2UgX1JlZnJlc2hTeW1saW5rVW5yZXNvbHZlZDoK
KyAgICAgIHJldHVybiBfX3N0YXR1cyhfX3BfLCBfX2VjKTsKKyAgICBjYXNlIF9SZWZyZXNoTm9u
U3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGluazoKKyAgICAgIHJldHVybiBmaWxlX3N0
YXR1cyhfX2dldF9mdChfX2VjKSwgX19kYXRhXy5fX25vbl9zeW1fcGVybXNfKTsKKyAgICB9Cisg
ICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQorICBmaWxlX3N0YXR1cyBfX2dldF9zeW1saW5rX3N0YXR1cyhlcnJvcl9jb2RlKiBfX2Vj
ID0gbnVsbHB0cikgY29uc3QgeworICAgIHN3aXRjaCAoX19kYXRhXy5fX2NhY2hlX3R5cGVfKSB7
CisgICAgY2FzZSBfRW1wdHk6CisgICAgY2FzZSBfSXRlck5vblN5bWxpbms6CisgICAgY2FzZSBf
SXRlclN5bWxpbms6CisgICAgICByZXR1cm4gX19zeW1saW5rX3N0YXR1cyhfX3BfLCBfX2VjKTsK
KyAgICBjYXNlIF9SZWZyZXNoTm9uU3ltbGluazoKKyAgICAgIHJldHVybiBmaWxlX3N0YXR1cyhf
X2dldF9zeW1fZnQoX19lYyksIF9fZGF0YV8uX19ub25fc3ltX3Blcm1zXyk7CisgICAgY2FzZSBf
UmVmcmVzaFN5bWxpbms6CisgICAgY2FzZSBfUmVmcmVzaFN5bWxpbmtVbnJlc29sdmVkOgorICAg
ICAgcmV0dXJuIGZpbGVfc3RhdHVzKF9fZ2V0X3N5bV9mdChfX2VjKSwgX19kYXRhXy5fX3N5bV9w
ZXJtc18pOworICAgIH0KKyAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7CisgIH0KKworICBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZCisgIHVpbnRtYXhfdCBfX2dldF9zaXplKGVycm9yX2NvZGUq
IF9fZWMgPSBudWxscHRyKSBjb25zdCB7CisgICAgc3dpdGNoIChfX2RhdGFfLl9fY2FjaGVfdHlw
ZV8pIHsKKyAgICBjYXNlIF9FbXB0eToKKyAgICBjYXNlIF9JdGVyTm9uU3ltbGluazoKKyAgICBj
YXNlIF9JdGVyU3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGlua1VucmVzb2x2ZWQ6Cisg
ICAgICByZXR1cm4gX1ZTVERfRlM6Ol9fZmlsZV9zaXplKF9fcF8sIF9fZWMpOworICAgIGNhc2Ug
X1JlZnJlc2hTeW1saW5rOgorICAgIGNhc2UgX1JlZnJlc2hOb25TeW1saW5rOiB7CisgICAgICBl
cnJvcl9jb2RlIF9fbV9lYzsKKyAgICAgIGZpbGVfc3RhdHVzIF9fc3QoX19nZXRfZnQoJl9fbV9l
YykpOworICAgICAgX19oYW5kbGVfZXJyb3IoImluIGRpcmVjdG9yeV9lbnRyeTo6ZmlsZV9zaXpl
IiwgX19lYywgX19tX2VjKTsKKyAgICAgIGlmIChfVlNURF9GUzo6ZXhpc3RzKF9fc3QpICYmICFf
VlNURF9GUzo6aXNfcmVndWxhcl9maWxlKF9fc3QpKSB7CisgICAgICAgIGVycmMgX19lcnJfa2lu
ZCA9IF9WU1REX0ZTOjppc19kaXJlY3RvcnkoX19zdCkgPyBlcnJjOjppc19hX2RpcmVjdG9yeQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog
ZXJyYzo6bm90X3N1cHBvcnRlZDsKKyAgICAgICAgX19oYW5kbGVfZXJyb3IoImluIGRpcmVjdG9y
eV9lbnRyeTo6ZmlsZV9zaXplIiwgX19lYywKKyAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9l
cnJvcl9jb2RlKF9fZXJyX2tpbmQpKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBfX2RhdGFfLl9f
c2l6ZV87CisgICAgfQorICAgIH0KKyAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7CisgIH0KKwor
ICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHVpbnRtYXhfdCBfX2dldF9ubGluayhlcnJv
cl9jb2RlKiBfX2VjID0gbnVsbHB0cikgY29uc3QgeworICAgIHN3aXRjaCAoX19kYXRhXy5fX2Nh
Y2hlX3R5cGVfKSB7CisgICAgY2FzZSBfRW1wdHk6CisgICAgY2FzZSBfSXRlck5vblN5bWxpbms6
CisgICAgY2FzZSBfSXRlclN5bWxpbms6CisgICAgY2FzZSBfUmVmcmVzaFN5bWxpbmtVbnJlc29s
dmVkOgorICAgICAgcmV0dXJuIF9WU1REX0ZTOjpfX2hhcmRfbGlua19jb3VudChfX3BfLCBfX2Vj
KTsKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoTm9uU3ltbGlu
azogeworICAgICAgZXJyb3JfY29kZSBfX21fZWM7CisgICAgICAodm9pZClfX2dldF9mdCgmX19t
X2VjKTsKKyAgICAgIF9faGFuZGxlX2Vycm9yKCJpbiBkaXJlY3RvcnlfZW50cnk6OmhhcmRfbGlu
a19jb3VudCIsIF9fZWMsIF9fbV9lYyk7CisgICAgICByZXR1cm4gX19kYXRhXy5fX25saW5rXzsK
KyAgICB9CisgICAgfQorICAgIF9MSUJDUFBfVU5SRUFDSEFCTEUoKTsKKyAgfQorCisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV90aW1lX3R5cGUgX19nZXRfd3JpdGVfdGltZShl
cnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cikgY29uc3QgeworICAgIHN3aXRjaCAoX19kYXRhXy5f
X2NhY2hlX3R5cGVfKSB7CisgICAgY2FzZSBfRW1wdHk6CisgICAgY2FzZSBfSXRlck5vblN5bWxp
bms6CisgICAgY2FzZSBfSXRlclN5bWxpbms6CisgICAgY2FzZSBfUmVmcmVzaFN5bWxpbmtVbnJl
c29sdmVkOgorICAgICAgcmV0dXJuIF9WU1REX0ZTOjpfX2xhc3Rfd3JpdGVfdGltZShfX3BfLCBf
X2VjKTsKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoTm9uU3lt
bGluazogeworICAgICAgZXJyb3JfY29kZSBfX21fZWM7CisgICAgICBmaWxlX3N0YXR1cyBfX3N0
KF9fZ2V0X2Z0KCZfX21fZWMpKTsKKyAgICAgIF9faGFuZGxlX2Vycm9yKCJpbiBkaXJlY3Rvcnlf
ZW50cnk6Omxhc3Rfd3JpdGVfdGltZSIsIF9fZWMsIF9fbV9lYyk7CisgICAgICBpZiAoX1ZTVERf
RlM6OmV4aXN0cyhfX3N0KSAmJgorICAgICAgICAgIF9fZGF0YV8uX193cml0ZV90aW1lXyA9PSBm
aWxlX3RpbWVfdHlwZTo6bWluKCkpCisgICAgICAgIF9faGFuZGxlX2Vycm9yKCJpbiBkaXJlY3Rv
cnlfZW50cnk6Omxhc3Rfd3JpdGVfdGltZSIsIF9fZWMsCisgICAgICAgICAgICAgICAgICAgICAg
IG1ha2VfZXJyb3JfY29kZShlcnJjOjp2YWx1ZV90b29fbGFyZ2UpKTsKKyAgICAgIHJldHVybiBf
X2RhdGFfLl9fd3JpdGVfdGltZV87CisgICAgfQorICAgIH0KKyAgICBfTElCQ1BQX1VOUkVBQ0hB
QkxFKCk7CisgIH0KKworcHJpdmF0ZToKKyAgX1BhdGggX19wXzsKKyAgX19jYWNoZWRfZGF0YSBf
X2RhdGFfOworfTsKKworY2xhc3MgX19kaXJfZWxlbWVudF9wcm94eSB7CitwdWJsaWM6CisgIGlu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGRpcmVjdG9yeV9lbnRyeSBvcGVyYXRvcioo
KSB7CisgICAgcmV0dXJuIF9WU1REOjptb3ZlKF9fZWxlbV8pOworICB9CisKK3ByaXZhdGU6Cisg
IGZyaWVuZCBjbGFzcyBkaXJlY3RvcnlfaXRlcmF0b3I7CisgIGZyaWVuZCBjbGFzcyByZWN1cnNp
dmVfZGlyZWN0b3J5X2l0ZXJhdG9yOworICBleHBsaWNpdCBfX2Rpcl9lbGVtZW50X3Byb3h5KGRp
cmVjdG9yeV9lbnRyeSBjb25zdCYgX19lKSA6IF9fZWxlbV8oX19lKSB7fQorICBfX2Rpcl9lbGVt
ZW50X3Byb3h5KF9fZGlyX2VsZW1lbnRfcHJveHkmJiBfX28pCisgICAgICA6IF9fZWxlbV8oX1ZT
VEQ6Om1vdmUoX19vLl9fZWxlbV8pKSB7fQorICBkaXJlY3RvcnlfZW50cnkgX19lbGVtXzsKK307
CisKK2NsYXNzIGRpcmVjdG9yeV9pdGVyYXRvciB7CitwdWJsaWM6CisgIHR5cGVkZWYgZGlyZWN0
b3J5X2VudHJ5IHZhbHVlX3R5cGU7CisgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlw
ZTsKKyAgdHlwZWRlZiB2YWx1ZV90eXBlIGNvbnN0KiBwb2ludGVyOworICB0eXBlZGVmIHZhbHVl
X3R5cGUgY29uc3QmIHJlZmVyZW5jZTsKKyAgdHlwZWRlZiBpbnB1dF9pdGVyYXRvcl90YWcgaXRl
cmF0b3JfY2F0ZWdvcnk7CisKK3B1YmxpYzoKKyAgLy9jdG9yICYgZHRvcgorICBkaXJlY3Rvcnlf
aXRlcmF0b3IoKSBub2V4Y2VwdCB7fQorCisgIGV4cGxpY2l0IGRpcmVjdG9yeV9pdGVyYXRvcihj
b25zdCBwYXRoJiBfX3ApCisgICAgICA6IGRpcmVjdG9yeV9pdGVyYXRvcihfX3AsIG51bGxwdHIp
IHt9CisKKyAgZGlyZWN0b3J5X2l0ZXJhdG9yKGNvbnN0IHBhdGgmIF9fcCwgZGlyZWN0b3J5X29w
dGlvbnMgX19vcHRzKQorICAgICAgOiBkaXJlY3RvcnlfaXRlcmF0b3IoX19wLCBudWxscHRyLCBf
X29wdHMpIHt9CisKKyAgZGlyZWN0b3J5X2l0ZXJhdG9yKGNvbnN0IHBhdGgmIF9fcCwgZXJyb3Jf
Y29kZSYgX19lYykKKyAgICAgIDogZGlyZWN0b3J5X2l0ZXJhdG9yKF9fcCwgJl9fZWMpIHt9CisK
KyAgZGlyZWN0b3J5X2l0ZXJhdG9yKGNvbnN0IHBhdGgmIF9fcCwgZGlyZWN0b3J5X29wdGlvbnMg
X19vcHRzLAorICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykKKyAgICAgIDog
ZGlyZWN0b3J5X2l0ZXJhdG9yKF9fcCwgJl9fZWMsIF9fb3B0cykge30KKworICBkaXJlY3Rvcnlf
aXRlcmF0b3IoY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9yJikgPSBkZWZhdWx0OworICBkaXJlY3Rv
cnlfaXRlcmF0b3IoZGlyZWN0b3J5X2l0ZXJhdG9yJiYpID0gZGVmYXVsdDsKKyAgZGlyZWN0b3J5
X2l0ZXJhdG9yJiBvcGVyYXRvcj0oY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9yJikgPSBkZWZhdWx0
OworCisgIGRpcmVjdG9yeV9pdGVyYXRvciYgb3BlcmF0b3I9KGRpcmVjdG9yeV9pdGVyYXRvciYm
IF9fbykgbm9leGNlcHQgeworICAgIC8vIG5vbi1kZWZhdWx0IGltcGxlbWVudGF0aW9uIHByb3Zp
ZGVkIHRvIHN1cHBvcnQgc2VsZi1tb3ZlIGFzc2lnbi4KKyAgICBpZiAodGhpcyAhPSAmX19vKSB7
CisgICAgICBfX2ltcF8gPSBfVlNURDo6bW92ZShfX28uX19pbXBfKTsKKyAgICB9CisgICAgcmV0
dXJuICp0aGlzOworICB9CisKKyAgfmRpcmVjdG9yeV9pdGVyYXRvcigpID0gZGVmYXVsdDsKKwor
ICBjb25zdCBkaXJlY3RvcnlfZW50cnkmIG9wZXJhdG9yKigpIGNvbnN0IHsKKyAgICBfTElCQ1BQ
X0FTU0VSVChfX2ltcF8sICJUaGUgZW5kIGl0ZXJhdG9yIGNhbm5vdCBiZSBkZXJlZmVyZW5jZWQi
KTsKKyAgICByZXR1cm4gX19kZXJlZmVyZW5jZSgpOworICB9CisKKyAgY29uc3QgZGlyZWN0b3J5
X2VudHJ5KiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJioqdGhpczsgfQorCisgIGRpcmVj
dG9yeV9pdGVyYXRvciYgb3BlcmF0b3IrKygpIHsgcmV0dXJuIF9faW5jcmVtZW50KCk7IH0KKwor
ICBfX2Rpcl9lbGVtZW50X3Byb3h5IG9wZXJhdG9yKysoaW50KSB7CisgICAgX19kaXJfZWxlbWVu
dF9wcm94eSBfX3AoKip0aGlzKTsKKyAgICBfX2luY3JlbWVudCgpOworICAgIHJldHVybiBfX3A7
CisgIH0KKworICBkaXJlY3RvcnlfaXRlcmF0b3ImIGluY3JlbWVudChlcnJvcl9jb2RlJiBfX2Vj
KSB7IHJldHVybiBfX2luY3JlbWVudCgmX19lYyk7IH0KKworcHJpdmF0ZToKKyAgaW5saW5lIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgZnJpZW5kIGJvb2wKKyAgb3BlcmF0b3I9PShjb25zdCBk
aXJlY3RvcnlfaXRlcmF0b3ImIF9fbGhzLAorICAgICAgICAgICAgIGNvbnN0IGRpcmVjdG9yeV9p
dGVyYXRvciYgX19yaHMpIG5vZXhjZXB0OworCisgIC8vIGNvbnN0cnVjdCB0aGUgZGlyX3N0cmVh
bQorICBfTElCQ1BQX0ZVTkNfVklTCisgIGRpcmVjdG9yeV9pdGVyYXRvcihjb25zdCBwYXRoJiwg
ZXJyb3JfY29kZSosCisgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnlfb3B0aW9ucyA9IGRp
cmVjdG9yeV9vcHRpb25zOjpub25lKTsKKworICBfTElCQ1BQX0ZVTkNfVklTCisgIGRpcmVjdG9y
eV9pdGVyYXRvciYgX19pbmNyZW1lbnQoZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworCisg
IF9MSUJDUFBfRlVOQ19WSVMKKyAgY29uc3QgZGlyZWN0b3J5X2VudHJ5JiBfX2RlcmVmZXJlbmNl
KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgIHNoYXJlZF9wdHI8X19kaXJfc3RyZWFtPiBfX2ltcF87
Cit9OworCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sCitvcGVyYXRvcj09
KGNvbnN0IGRpcmVjdG9yeV9pdGVyYXRvciYgX19saHMsCisgICAgICAgICAgIGNvbnN0IGRpcmVj
dG9yeV9pdGVyYXRvciYgX19yaHMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fbGhzLl9faW1wXyA9
PSBfX3Jocy5fX2ltcF87Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJv
b2wKK29wZXJhdG9yIT0oY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9yJiBfX2xocywKKyAgICAgICAg
ICAgY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9yJiBfX3Jocykgbm9leGNlcHQgeworICByZXR1cm4g
IShfX2xocyA9PSBfX3Jocyk7Cit9CisKKy8vIGVuYWJsZSBkaXJlY3RvcnlfaXRlcmF0b3IgcmFu
Z2UtYmFzZWQgZm9yIHN0YXRlbWVudHMKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IGRpcmVjdG9yeV9pdGVyYXRvcgorYmVnaW4oZGlyZWN0b3J5X2l0ZXJhdG9yIF9faXRlcikgbm9l
eGNlcHQgeworICByZXR1cm4gX19pdGVyOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWSBkaXJlY3RvcnlfaXRlcmF0b3IKK2VuZChjb25zdCBkaXJlY3RvcnlfaXRlcmF0b3Im
KSBub2V4Y2VwdCB7CisgIHJldHVybiBkaXJlY3RvcnlfaXRlcmF0b3IoKTsKK30KKworY2xhc3Mg
cmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciB7CitwdWJsaWM6CisgIHVzaW5nIHZhbHVlX3R5
cGUgPSBkaXJlY3RvcnlfZW50cnk7CisgIHVzaW5nIGRpZmZlcmVuY2VfdHlwZSA9IHN0ZDo6cHRy
ZGlmZl90OworICB1c2luZyBwb2ludGVyID0gZGlyZWN0b3J5X2VudHJ5IGNvbnN0KjsKKyAgdXNp
bmcgcmVmZXJlbmNlID0gZGlyZWN0b3J5X2VudHJ5IGNvbnN0JjsKKyAgdXNpbmcgaXRlcmF0b3Jf
Y2F0ZWdvcnkgPSBzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZzsKKworcHVibGljOgorICAvLyBjb25z
dHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3IKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBy
ZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yKCkgbm9leGNlcHQgOiBfX3JlY18oZmFsc2UpIHt9
CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBleHBsaWNpdCByZWN1cnNpdmVfZGly
ZWN0b3J5X2l0ZXJhdG9yKAorICAgICAgY29uc3QgcGF0aCYgX19wLCBkaXJlY3Rvcnlfb3B0aW9u
cyBfX3hvcHRpb25zID0gZGlyZWN0b3J5X29wdGlvbnM6Om5vbmUpCisgICAgICA6IHJlY3Vyc2l2
ZV9kaXJlY3RvcnlfaXRlcmF0b3IoX19wLCBfX3hvcHRpb25zLCBudWxscHRyKSB7fQorCisgIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcihj
b25zdCBwYXRoJiBfX3AsIGRpcmVjdG9yeV9vcHRpb25zIF9feG9wdGlvbnMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykKKyAgICAgIDogcmVjdXJzaXZl
X2RpcmVjdG9yeV9pdGVyYXRvcihfX3AsIF9feG9wdGlvbnMsICZfX2VjKSB7fQorCisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcihjb25z
dCBwYXRoJiBfX3AsIGVycm9yX2NvZGUmIF9fZWMpCisgICAgICA6IHJlY3Vyc2l2ZV9kaXJlY3Rv
cnlfaXRlcmF0b3IoX19wLCBkaXJlY3Rvcnlfb3B0aW9uczo6bm9uZSwgJl9fZWMpIHt9CisKKyAg
cmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcihjb25zdCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0
ZXJhdG9yJikgPSBkZWZhdWx0OworICByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yKHJlY3Vy
c2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3ImJikgPSBkZWZhdWx0OworCisgIHJlY3Vyc2l2ZV9kaXJl
Y3RvcnlfaXRlcmF0b3ImCisgIG9wZXJhdG9yPShjb25zdCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0
ZXJhdG9yJikgPSBkZWZhdWx0OworCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcmVj
dXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYKKyAgb3BlcmF0b3I9KHJlY3Vyc2l2ZV9kaXJlY3Rv
cnlfaXRlcmF0b3ImJiBfX28pIG5vZXhjZXB0IHsKKyAgICAvLyBub24tZGVmYXVsdCBpbXBsZW1l
bnRhdGlvbiBwcm92aWRlZCB0byBzdXBwb3J0IHNlbGYtbW92ZSBhc3NpZ24uCisgICAgaWYgKHRo
aXMgIT0gJl9fbykgeworICAgICAgX19pbXBfID0gX1ZTVEQ6Om1vdmUoX19vLl9faW1wXyk7Cisg
ICAgICBfX3JlY18gPSBfX28uX19yZWNfOworICAgIH0KKyAgICByZXR1cm4gKnRoaXM7CisgIH0K
KworICB+cmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcigpID0gZGVmYXVsdDsKKworICBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZCisgIGNvbnN0IGRpcmVjdG9yeV9lbnRyeSYgb3BlcmF0b3Iq
KCkgY29uc3QgeyByZXR1cm4gX19kZXJlZmVyZW5jZSgpOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWQorICBjb25zdCBkaXJlY3RvcnlfZW50cnkqIG9wZXJhdG9yLT4oKSBjb25zdCB7
IHJldHVybiAmX19kZXJlZmVyZW5jZSgpOyB9CisKKyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVy
YXRvciYgb3BlcmF0b3IrKygpIHsgcmV0dXJuIF9faW5jcmVtZW50KCk7IH0KKworICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZCisgIF9fZGlyX2VsZW1lbnRfcHJveHkgb3BlcmF0b3IrKyhpbnQp
IHsKKyAgICBfX2Rpcl9lbGVtZW50X3Byb3h5IF9fcCgqKnRoaXMpOworICAgIF9faW5jcmVtZW50
KCk7CisgICAgcmV0dXJuIF9fcDsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
KyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYgaW5jcmVtZW50KGVycm9yX2NvZGUmIF9f
ZWMpIHsKKyAgICByZXR1cm4gX19pbmNyZW1lbnQoJl9fZWMpOworICB9CisKKyAgX0xJQkNQUF9G
VU5DX1ZJUyBkaXJlY3Rvcnlfb3B0aW9ucyBvcHRpb25zKCkgY29uc3Q7CisgIF9MSUJDUFBfRlVO
Q19WSVMgaW50IGRlcHRoKCkgY29uc3Q7CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQor
ICB2b2lkIHBvcCgpIHsgX19wb3AoKTsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
KyAgdm9pZCBwb3AoZXJyb3JfY29kZSYgX19lYykgeyBfX3BvcCgmX19lYyk7IH0KKworICBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgcmVjdXJzaW9uX3BlbmRpbmcoKSBjb25zdCB7
IHJldHVybiBfX3JlY187IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQg
ZGlzYWJsZV9yZWN1cnNpb25fcGVuZGluZygpIHsgX19yZWNfID0gZmFsc2U7IH0KKworcHJpdmF0
ZToKKyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcihjb25zdCBwYXRoJiBfX3AsIGRpcmVj
dG9yeV9vcHRpb25zIF9fb3B0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9y
X2NvZGUqIF9fZWMpOworCisgIF9MSUJDUFBfRlVOQ19WSVMKKyAgY29uc3QgZGlyZWN0b3J5X2Vu
dHJ5JiBfX2RlcmVmZXJlbmNlKCkgY29uc3Q7CisKKyAgX0xJQkNQUF9GVU5DX1ZJUworICBib29s
IF9fdHJ5X3JlY3Vyc2lvbihlcnJvcl9jb2RlKiBfX2VjKTsKKworICBfTElCQ1BQX0ZVTkNfVklT
CisgIHZvaWQgX19hZHZhbmNlKGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKKworICBfTElC
Q1BQX0ZVTkNfVklTCisgIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3ImIF9faW5jcmVtZW50
KGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKKworICBfTElCQ1BQX0ZVTkNfVklTCisgIHZv
aWQgX19wb3AoZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworCisgIGlubGluZSBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIGZyaWVuZCBib29sCisgIG9wZXJhdG9yPT0oY29uc3QgcmVjdXJz
aXZlX2RpcmVjdG9yeV9pdGVyYXRvciYsCisgICAgICAgICAgICAgY29uc3QgcmVjdXJzaXZlX2Rp
cmVjdG9yeV9pdGVyYXRvciYpIG5vZXhjZXB0OworCisgIHN0cnVjdCBfX3NoYXJlZF9pbXA7Cisg
IHNoYXJlZF9wdHI8X19zaGFyZWRfaW1wPiBfX2ltcF87CisgIGJvb2wgX19yZWNfOworfTsgLy8g
Y2xhc3MgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcgorCitpbmxpbmUgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBib29sCitvcGVyYXRvcj09KGNvbnN0IHJlY3Vyc2l2ZV9kaXJlY3Rvcnlf
aXRlcmF0b3ImIF9fbGhzLAorICAgICAgICAgICBjb25zdCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0
ZXJhdG9yJiBfX3Jocykgbm9leGNlcHQgeworICByZXR1cm4gX19saHMuX19pbXBfID09IF9fcmhz
Ll9faW1wXzsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yJiBfX2xocywKKyAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYgX19y
aHMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuICEoX19saHMgPT0gX19yaHMpOworfQorLy8gZW5hYmxl
IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IgcmFuZ2UtYmFzZWQgZm9yIHN0YXRlbWVudHMK
K2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRl
cmF0b3IKK2JlZ2luKHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IgX19pdGVyKSBub2V4Y2Vw
dCB7CisgIHJldHVybiBfX2l0ZXI7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IKK2VuZChjb25zdCByZWN1cnNpdmVfZGly
ZWN0b3J5X2l0ZXJhdG9yJikgbm9leGNlcHQgeworICByZXR1cm4gcmVjdXJzaXZlX2RpcmVjdG9y
eV9pdGVyYXRvcigpOworfQorCitfTElCQ1BQX0VORF9OQU1FU1BBQ0VfRklMRVNZU1RFTQorCisj
ZW5kaWYgLy8gIV9MSUJDUFBfQ1hYMDNfTEFORworCitfTElCQ1BQX1BPUF9NQUNST1MKKworI2Vu
ZGlmIC8vIF9MSUJDUFBfRklMRVNZU1RFTQorI2VuZGlmCkluZGV4OiBUb29scy9XZWJLaXRUZXN0
UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvU3RyaW5nRnVuY3Rpb25zLmgJKHJldmlzaW9uIDI2Nzg4NSkKKysrIFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMy
LDcgQEAKICNpbmNsdWRlIDxXZWJLaXQvV0tTdHJpbmdQcml2YXRlLmg+CiAjaW5jbHVkZSA8c3N0
cmVhbT4KICNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgogI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3
dGYvVW5pcXVlQXJyYXkuaD4KQEAgLTU5LDYgKzYwLDExIEBAIGlubGluZSBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gdG9XSyhjb24KICAgICByZXR1cm4gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZyhzdHJpbmcpKTsKIH0KIAoraW5saW5lIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB0b1dLKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHJpbmcpCit7CisgICAgcmV0dXJuIHRvV0so
c3RyaW5nLmNfc3RyKCkpOworfQorCiBpbmxpbmUgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRv
V0soY29uc3QgV1RGOjpTdHJpbmcmIHN0cmluZykKIHsKICAgICByZXR1cm4gdG9XSyhzdHJpbmcu
dXRmOCgpLmRhdGEoKSk7CkBAIC0xMTQsNiArMTIwLDExIEBAIGlubGluZSBXVEY6OlN0cmluZyB0
b1dURlN0cmluZyhjb25zdCBKU1IKICAgICByZXR1cm4gdG9XVEZTdHJpbmcoc3RyaW5nLmdldCgp
KTsKIH0KIAoraW5saW5lIFdURjo6U3RyaW5nIHRvV1RGU3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5n
JiBzdHJpbmcpCit7CisgICAgcmV0dXJuIFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJpbmcuY19z
dHIoKSk7Cit9CisKIGlubGluZSBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9XS1N0cmluZyhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKIHsKICAgICByZXR1cm4gdG9X
SyhjcmVhdGVKU1N0cmluZyhjb250ZXh0LCB2YWx1ZSkuZ2V0KCkpOwpAQCAtMTI1LDQgKzEzNiwy
NCBAQCBpbmxpbmUgV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmcoSlNDb250ZXh0CiAgICAgcmV0dXJu
IHRvV1RGU3RyaW5nKGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIHZhbHVlKSk7CiB9CiAKK2lubGlu
ZSBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc3BsaXQoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cmlu
ZywgY2hhciBkZWxpbWl0ZXIpCit7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHJlc3Vs
dDsKKworICAgIHNpemVfdCBpID0gMDsKKyAgICB3aGlsZSAoaSA8IHN0cmluZy5zaXplKCkpIHsK
KyAgICAgICAgYXV0byBmb3VuZEluZGV4ID0gc3RyaW5nLmZpbmRfZmlyc3Rfb2YoZGVsaW1pdGVy
LCBpKTsKKworICAgICAgICBpZiAoZm91bmRJbmRleCAhPSBpKQorICAgICAgICAgICAgcmVzdWx0
LnB1c2hfYmFjayhzdHJpbmcuc3Vic3RyKGksIGZvdW5kSW5kZXggLSBpKSk7CisKKyAgICAgICAg
aWYgKGZvdW5kSW5kZXggPT0gc3RkOjpzdHJpbmdfdmlldzo6bnBvcykKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGkgPSBmb3VuZEluZGV4ICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCiB9IC8vIG5hbWVzcGFjZSBXVFIKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyNjc4ODUpCisrKyBUb29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY5LDE1
ICs0NjksMTcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZShpbnQgYXJnYwogICAg
IG1fc2hvdWxkRHVtcFBpeGVsc0ZvckFsbFRlc3RzID0gb3B0aW9ucy5zaG91bGREdW1wUGl4ZWxz
Rm9yQWxsVGVzdHM7CiAgICAgbV9mb3JjZUNvbXBsZXhUZXh0ID0gb3B0aW9ucy5mb3JjZUNvbXBs
ZXhUZXh0OwogICAgIG1fc2hvdWxkVXNlQWNjZWxlcmF0ZWREcmF3aW5nID0gb3B0aW9ucy5zaG91
bGRVc2VBY2NlbGVyYXRlZERyYXdpbmc7Ci0gICAgbV9zaG91bGRVc2VSZW1vdGVMYXllclRyZWUg
PSBvcHRpb25zLnNob3VsZFVzZVJlbW90ZUxheWVyVHJlZTsKICAgICBtX3BhdGhzID0gb3B0aW9u
cy5wYXRoczsKICAgICBtX2FsbG93ZWRIb3N0cyA9IG9wdGlvbnMuYWxsb3dlZEhvc3RzOwotICAg
IG1fc2hvdWxkU2hvd1dlYlZpZXcgPSBvcHRpb25zLnNob3VsZFNob3dXZWJWaWV3OwotICAgIG1f
c2hvdWxkU2hvd1RvdWNoZXMgPSBvcHRpb25zLnNob3VsZFNob3dUb3VjaGVzOwogICAgIG1fY2hl
Y2tGb3JXb3JsZExlYWtzID0gb3B0aW9ucy5jaGVja0ZvcldvcmxkTGVha3M7CiAgICAgbV9hbGxv
d0FueUhUVFBTQ2VydGlmaWNhdGVGb3JBbGxvd2VkSG9zdHMgPSBvcHRpb25zLmFsbG93QW55SFRU
UFNDZXJ0aWZpY2F0ZUZvckFsbG93ZWRIb3N0czsKLSAgICBtX2ludGVybmFsRmVhdHVyZXMgPSBv
cHRpb25zLmludGVybmFsRmVhdHVyZXM7Ci0gICAgbV9leHBlcmltZW50YWxGZWF0dXJlcyA9IG9w
dGlvbnMuZXhwZXJpbWVudGFsRmVhdHVyZXM7CisgICAgCisgICAgbV9nbG9iYWxGZWF0dXJlcy5p
bnRlcm5hbERlYnVnRmVhdHVyZXMgPSBvcHRpb25zLmludGVybmFsRmVhdHVyZXM7CisgICAgbV9n
bG9iYWxGZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyA9IG9wdGlvbnMuZXhwZXJpbWVudGFs
RmVhdHVyZXM7CisgICAgbV9nbG9iYWxGZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgInVz
ZVJlbW90ZUxheWVyVHJlZSIsIG9wdGlvbnMuc2hvdWxkVXNlUmVtb3RlTGF5ZXJUcmVlIH0pOwor
ICAgIG1fZ2xvYmFsRmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJzaG91bGRTaG93V2Vi
VmlldyIsIG9wdGlvbnMuc2hvdWxkU2hvd1dlYlZpZXcgfSk7CisgICAgbV9nbG9iYWxGZWF0dXJl
cy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgInNob3VsZFNob3dUb3VjaGVzIiwgb3B0aW9ucy5zaG91
bGRTaG93VG91Y2hlcyB9KTsKKwogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RS
RUUpCiAgICAgbV9hY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlTW9kZSA9IG9wdGlvbnMuYWNjZXNz
aWJpbGl0eUlzb2xhdGVkVHJlZU1vZGU7CiAjZW5kaWYKQEAgLTQ5OSw3ICs1MDEsNyBAQCB2b2lk
IFRlc3RDb250cm9sbGVyOjppbml0aWFsaXplKGludCBhcmdjCiAgICAgbV9ldmVudFNlbmRlclBy
b3h5ID0gbWFrZVVuaXF1ZTxFdmVudFNlbmRlclByb3h5Pih0aGlzKTsKIH0KIAotV0tSZXRhaW5Q
dHI8V0tDb250ZXh0Q29uZmlndXJhdGlvblJlZj4gVGVzdENvbnRyb2xsZXI6OmdlbmVyYXRlQ29u
dGV4dENvbmZpZ3VyYXRpb24oY29uc3QgVGVzdE9wdGlvbnM6OkNvbnRleHRPcHRpb25zJiBvcHRp
b25zKSBjb25zdAorV0tSZXRhaW5QdHI8V0tDb250ZXh0Q29uZmlndXJhdGlvblJlZj4gVGVzdENv
bnRyb2xsZXI6OmdlbmVyYXRlQ29udGV4dENvbmZpZ3VyYXRpb24oY29uc3QgQ29udGV4dE9wdGlv
bnMmIG9wdGlvbnMpIGNvbnN0CiB7CiAgICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHRXSyhX
S0NvbnRleHRDb25maWd1cmF0aW9uQ3JlYXRlKCkpOwogICAgIFdLQ29udGV4dENvbmZpZ3VyYXRp
b25TZXRJbmplY3RlZEJ1bmRsZVBhdGgoY29uZmlndXJhdGlvbi5nZXQoKSwgaW5qZWN0ZWRCdW5k
bGVQYXRoKCkpOwpAQCAtNTYyLDEwICs1NjQsMTEgQEAgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIFRl
c3RDb250cm9sbGVyOjp3ZQogCiBXS1JldGFpblB0cjxXS1BhZ2VDb25maWd1cmF0aW9uUmVmPiBU
ZXN0Q29udHJvbGxlcjo6Z2VuZXJhdGVQYWdlQ29uZmlndXJhdGlvbihjb25zdCBUZXN0T3B0aW9u
cyYgb3B0aW9ucykKIHsKLSAgICBpZiAoIW1fY29udGV4dCB8fCAhbV9jb250ZXh0T3B0aW9ucy0+
aGFzU2FtZUluaXRpYWxpemF0aW9uT3B0aW9ucyhvcHRpb25zLmNvbnRleHRPcHRpb25zKSkgewot
ICAgICAgICBhdXRvIGNvbnRleHRDb25maWd1cmF0aW9uID0gZ2VuZXJhdGVDb250ZXh0Q29uZmln
dXJhdGlvbihvcHRpb25zLmNvbnRleHRPcHRpb25zKTsKKyAgICBhdXRvIGNvbnRleHRPcHRpb25z
ID0gb3B0aW9ucy5jb250ZXh0T3B0aW9ucygpOworICAgIGlmICghbV9jb250ZXh0IHx8ICFtX2Nv
bnRleHRPcHRpb25zLT5oYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25zKGNvbnRleHRPcHRpb25z
KSkgeworICAgICAgICBhdXRvIGNvbnRleHRDb25maWd1cmF0aW9uID0gZ2VuZXJhdGVDb250ZXh0
Q29uZmlndXJhdGlvbihjb250ZXh0T3B0aW9ucyk7CiAgICAgICAgIG1fY29udGV4dCA9IHBsYXRm
b3JtQWRqdXN0Q29udGV4dChhZG9wdFdLKFdLQ29udGV4dENyZWF0ZVdpdGhDb25maWd1cmF0aW9u
KGNvbnRleHRDb25maWd1cmF0aW9uLmdldCgpKSkuZ2V0KCksIGNvbnRleHRDb25maWd1cmF0aW9u
LmdldCgpKTsKLSAgICAgICAgbV9jb250ZXh0T3B0aW9ucyA9IG9wdGlvbnMuY29udGV4dE9wdGlv
bnM7CisgICAgICAgIG1fY29udGV4dE9wdGlvbnMgPSBjb250ZXh0T3B0aW9uczsKIAogICAgICAg
ICBtX2dlb2xvY2F0aW9uUHJvdmlkZXIgPSBtYWtlVW5pcXVlPEdlb2xvY2F0aW9uUHJvdmlkZXJN
b2NrPihtX2NvbnRleHQuZ2V0KCkpOwogCkBAIC02MjcsNyArNjMwLDcgQEAgV0tSZXRhaW5QdHI8
V0tQYWdlQ29uZmlndXJhdGlvblJlZj4gVGVzdAogICAgIFdLUGFnZUNvbmZpZ3VyYXRpb25TZXRD
b250ZXh0KHBhZ2VDb25maWd1cmF0aW9uLmdldCgpLCBtX2NvbnRleHQuZ2V0KCkpOwogICAgIFdL
UGFnZUNvbmZpZ3VyYXRpb25TZXRQYWdlR3JvdXAocGFnZUNvbmZpZ3VyYXRpb24uZ2V0KCksIG1f
cGFnZUdyb3VwLmdldCgpKTsKICAgICAKLSAgICBpZiAob3B0aW9ucy51c2VFcGhlbWVyYWxTZXNz
aW9uKSB7CisgICAgaWYgKG9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lvbigpKSB7CiAgICAgICAg
IGF1dG8gZXBoZW1lcmFsRGF0YVN0b3JlID0gYWRvcHRXSyhXS1dlYnNpdGVEYXRhU3RvcmVDcmVh
dGVOb25QZXJzaXN0ZW50RGF0YVN0b3JlKCkpOwogICAgICAgICBXS1BhZ2VDb25maWd1cmF0aW9u
U2V0V2Vic2l0ZURhdGFTdG9yZShwYWdlQ29uZmlndXJhdGlvbi5nZXQoKSwgZXBoZW1lcmFsRGF0
YVN0b3JlLmdldCgpKTsKICAgICB9CkBAIC02MzksMTEgKzY0MiwxMiBAQCBXS1JldGFpblB0cjxX
S1BhZ2VDb25maWd1cmF0aW9uUmVmPiBUZXN0CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNyZWF0
ZVdlYlZpZXdXaXRoT3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykKIHsKKyAgICBh
dXRvIGFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllciA9IG9wdGlvbnMuYXBwbGljYXRpb25CdW5k
bGVJZGVudGlmaWVyKCk7CiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKCFvcHRpb25zLmFw
cGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllci5pc0VtcHR5KCkpIHsKKyAgICBpZiAoIWFwcGxpY2F0
aW9uQnVuZGxlSWRlbnRpZmllci5lbXB0eSgpKSB7CiAgICAgICAgIC8vIFRoZSBidW5kbGUgaWRl
bnRpZmllciBjYW4gb25seSBiZSBzZXQgb25jZSBwZXIgdGVzdCwgYW5kIGlzIGNsZWFyZWQgYmV0
d2VlbiB0ZXN0cy4KICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1faGFzU2V0QXBwbGljYXRpb25C
dW5kbGVJZGVudGlmaWVyKTsKLSAgICAgICAgc2V0QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVy
KG9wdGlvbnMuYXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKTsKKyAgICAgICAgc2V0QXBwbGlj
YXRpb25CdW5kbGVJZGVudGlmaWVyKGFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcik7CiAgICAg
ICAgIG1faGFzU2V0QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyID0gdHJ1ZTsKICAgICB9CiAj
ZW5kaWYKQEAgLTY4Niw3ICs2OTAsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpjcmVhdGVXZWJW
aWV3V2l0aE9wCiAgICAgICAgIDAsIC8vIGRpZERyYXcKICAgICAgICAgMCwgLy8gcGFnZURpZFNj
cm9sbAogICAgICAgICAwLCAvLyBleGNlZWRlZERhdGFiYXNlUXVvdGEsCi0gICAgICAgIG9wdGlv
bnMuc2hvdWxkSGFuZGxlUnVuT3BlblBhbmVsID8gcnVuT3BlblBhbmVsIDogMCwKKyAgICAgICAg
b3B0aW9ucy5zaG91bGRIYW5kbGVSdW5PcGVuUGFuZWwoKSA/IHJ1bk9wZW5QYW5lbCA6IDAsCiAg
ICAgICAgIGRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QsCiAgICAg
ICAgIDAsIC8vIGhlYWRlckhlaWdodAogICAgICAgICAwLCAvLyBmb290ZXJIZWlnaHQKQEAgLTc5
NSw5ICs3OTksOSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpjcmVhdGVXZWJWaWV3V2l0aE9wCiAg
ICAgLy8gc29tZXRoaW5nIGVsc2UgZm9yIHNwZWNpZmljIHRlc3RzIHRoYXQgbmVlZCB0byBydW4g
YXQgYSBkaWZmZXJlbnQgd2luZG93IHNjYWxlLgogICAgIG1fbWFpbldlYlZpZXctPmNoYW5nZVdp
bmRvd1NjYWxlSWZOZWVkZWQoMSk7CiAgICAgCi0gICAgaWYgKCFvcHRpb25zLmFwcGxpY2F0aW9u
QnVuZGxlSWRlbnRpZmllci5pc0VtcHR5KCkpIHsKKyAgICBpZiAoIWFwcGxpY2F0aW9uQnVuZGxl
SWRlbnRpZmllci5lbXB0eSgpKSB7CiAgICAgICAgIHJlaW5pdGlhbGl6ZUFwcEJvdW5kRG9tYWlu
cygpOwotICAgICAgICB1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2VzcyhvcHRp
b25zLmFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcik7CisgICAgICAgIHVwZGF0ZUJ1bmRsZUlk
ZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKGFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcik7CiAg
ICAgfQogfQogCkBAIC04MDksNyArODEzLDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZW5zdXJl
Vmlld1N1cHBvcnRzTwogICAgICAgICAvLyBIYXZpbmcgY3JlYXRlZCBhbm90aGVyIHBhZ2UgKHZp
YSB3aW5kb3cub3BlbigpKSBwcmV2ZW50cyBwcm9jZXNzIHN3YXBwaW5nIG9uIG5hdmlnYXRpb24g
YW5kIGl0IG1heSB0aGVyZWZvcmUKICAgICAgICAgLy8gY2F1c2UgZmxha2luZXNzIHRvIHJldXNl
IHRoZSB2aWV3LiBXZSBzaG91bGQgYWxzbyBhbHdheXMgbWFrZSBhIG5ldyB2aWV3IGlmIHRoZSB0
ZXN0IGlzIG1hcmtlZCBhcyBhcHAtYm91bmQsIGJlY2F1c2UKICAgICAgICAgLy8gdGhlIHZpZXcg
Y29uZmlndXJhdGlvbiBtdXN0IGNoYW5nZS4KLSAgICAgICAgaWYgKCFtX2NyZWF0ZWRPdGhlclBh
Z2UgJiYgbV9tYWluV2ViVmlldy0+dmlld1N1cHBvcnRzT3B0aW9ucyhvcHRpb25zKSAmJiAhb3B0
aW9ucy5pc0FwcEJvdW5kV2ViVmlldykKKyAgICAgICAgaWYgKCFtX2NyZWF0ZWRPdGhlclBhZ2Ug
JiYgbV9tYWluV2ViVmlldy0+dmlld1N1cHBvcnRzT3B0aW9ucyhvcHRpb25zKSAmJiAhb3B0aW9u
cy5pc0FwcEJvdW5kV2ViVmlldygpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHdp
bGxEZXN0cm95V2ViVmlldygpOwpAQCAtODM2LDggKzg0MCw4IEBAIHZvaWQgVGVzdENvbnRyb2xs
ZXI6OnJlc2V0UHJlZmVyZW5jZXNUb0MKICAgICBXS1ByZWZlcmVuY2VzUmVzZXRUZXN0UnVubmVy
T3ZlcnJpZGVzKHByZWZlcmVuY2VzKTsKIAogICAgIFdLUHJlZmVyZW5jZXNFbmFibGVBbGxFeHBl
cmltZW50YWxGZWF0dXJlcyhwcmVmZXJlbmNlcyk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBleHBl
cmltZW50YWxGZWF0dXJlIDogb3B0aW9ucy5leHBlcmltZW50YWxGZWF0dXJlcykKLSAgICAgICAg
V0tQcmVmZXJlbmNlc1NldEV4cGVyaW1lbnRhbEZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIGV4
cGVyaW1lbnRhbEZlYXR1cmUudmFsdWUsIHRvV0soZXhwZXJpbWVudGFsRmVhdHVyZS5rZXkpLmdl
dCgpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIFtrZXksIHZhbHVlXSA6IG9wdGlvbnMuZXhwZXJp
bWVudGFsRmVhdHVyZXMoKSkKKyAgICAgICAgV0tQcmVmZXJlbmNlc1NldEV4cGVyaW1lbnRhbEZl
YXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIHZhbHVlLCB0b1dLKGtleSkuZ2V0KCkpOwogCiAgICAg
V0tQcmVmZXJlbmNlc1Jlc2V0QWxsSW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKHByZWZlcmVuY2VzKTsK
IApAQCAtODYyLDE3ICs4NjYsMTcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRQcmVmZXJl
bmNlc1RvQwogICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShw
cmVmZXJlbmNlcywgdHJ1ZSwgdG9XSygiSW5wdXRUeXBlV2Vla0VuYWJsZWQiKS5nZXQoKSk7CiAj
ZW5kaWYKIAotICAgIGZvciAoY29uc3QgYXV0byYgaW50ZXJuYWxEZWJ1Z0ZlYXR1cmUgOiBvcHRp
b25zLmludGVybmFsRGVidWdGZWF0dXJlcykKLSAgICAgICAgV0tQcmVmZXJlbmNlc1NldEludGVy
bmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCBpbnRlcm5hbERlYnVnRmVhdHVyZS52
YWx1ZSwgdG9XSyhpbnRlcm5hbERlYnVnRmVhdHVyZS5rZXkpLmdldCgpKTsKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIFtrZXksIHZhbHVlXSAgOiBvcHRpb25zLmludGVybmFsRGVidWdGZWF0dXJlcygp
KQorICAgICAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJl
ZmVyZW5jZXMsIHZhbHVlLCB0b1dLKGtleSkuZ2V0KCkpOwogCiAjaWYgUExBVEZPUk0oQ09DT0Ep
Ci0gICAgV0tQcmVmZXJlbmNlc1NldENhcHR1cmVWaWRlb0luVUlQcm9jZXNzRW5hYmxlZChwcmVm
ZXJlbmNlcywgb3B0aW9ucy5lbmFibGVDYXB0dXJlVmlkZW9JblVJUHJvY2Vzcyk7Ci0gICAgV0tQ
cmVmZXJlbmNlc1NldENhcHR1cmVWaWRlb0luR1BVUHJvY2Vzc0VuYWJsZWQocHJlZmVyZW5jZXMs
IG9wdGlvbnMuZW5hYmxlQ2FwdHVyZVZpZGVvSW5HUFVQcm9jZXNzKTsKLSAgICBXS1ByZWZlcmVu
Y2VzU2V0Q2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3NFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25z
LmVuYWJsZUNhcHR1cmVBdWRpb0luVUlQcm9jZXNzKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0Q2Fw
dHVyZUF1ZGlvSW5HUFVQcm9jZXNzRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVD
YXB0dXJlQXVkaW9JbkdQVVByb2Nlc3MpOworICAgIFdLUHJlZmVyZW5jZXNTZXRDYXB0dXJlVmlk
ZW9JblVJUHJvY2Vzc0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQ2FwdHVyZVZp
ZGVvSW5VSVByb2Nlc3MoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldENhcHR1cmVWaWRlb0luR1BV
UHJvY2Vzc0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQ2FwdHVyZVZpZGVvSW5H
UFVQcm9jZXNzKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRDYXB0dXJlQXVkaW9JblVJUHJvY2Vz
c0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQ2FwdHVyZUF1ZGlvSW5VSVByb2Nl
c3MoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldENhcHR1cmVBdWRpb0luR1BVUHJvY2Vzc0VuYWJs
ZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQ2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzKCkp
OwogI2VuZGlmCi0gICAgV0tQcmVmZXJlbmNlc1NldFByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uRW5h
YmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5jb250ZXh0T3B0aW9ucy5zaG91bGRFbmFibGVQcm9j
ZXNzU3dhcE9uTmF2aWdhdGlvbigpKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0UGFnZVZpc2liaWxp
dHlCYXNlZFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5h
YmxlQXBwTmFwKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0UHJvY2Vzc1N3YXBPbk5hdmlnYXRpb25F
bmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmNvbnRleHRPcHRpb25zKCkuc2hvdWxkRW5hYmxl
UHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24oKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldFBhZ2VWaXNp
YmlsaXR5QmFzZWRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25z
LmVuYWJsZUFwcE5hcCgpKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0T2ZmbGluZVdlYkFwcGxpY2F0
aW9uQ2FjaGVFbmFibGVkKHByZWZlcmVuY2VzLCB0cnVlKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0
U3VicGl4ZWxBbnRpYWxpYXNlZExheWVyVGV4dEVuYWJsZWQocHJlZmVyZW5jZXMsIGZhbHNlKTsK
ICAgICBXS1ByZWZlcmVuY2VzU2V0WFNTQXVkaXRvckVuYWJsZWQocHJlZmVyZW5jZXMsIGZhbHNl
KTsKQEAgLTg4MywxMCArODg3LDEwIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0UHJlZmVy
ZW5jZXNUb0MKICAgICBXS1ByZWZlcmVuY2VzU2V0SmF2YVNjcmlwdFJ1bnRpbWVGbGFncyhwcmVm
ZXJlbmNlcywga1dLSmF2YVNjcmlwdFJ1bnRpbWVGbGFnc0FsbEVuYWJsZWQpOwogICAgIFdLUHJl
ZmVyZW5jZXNTZXRKYXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5KHByZWZlcmVu
Y2VzLCB0cnVlKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBi
b2FyZChwcmVmZXJlbmNlcywgdHJ1ZSk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldERPTVBhc3RlQWxs
b3dlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5kb21QYXN0ZUFsbG93ZWQpOworICAgIFdLUHJlZmVy
ZW5jZXNTZXRET01QYXN0ZUFsbG93ZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZG9tUGFzdGVBbGxv
d2VkKCkpOwogICAgIFdLUHJlZmVyZW5jZXNTZXRVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHNB
bGxvd2VkKHByZWZlcmVuY2VzLCB0cnVlKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0RmlsZUFjY2Vz
c0Zyb21GaWxlVVJMc0FsbG93ZWQocHJlZmVyZW5jZXMsIHRydWUpOwotICAgIFdLUHJlZmVyZW5j
ZXNTZXRUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMc0FsbG93ZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMu
YWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyk7CisgICAgV0tQcmVmZXJlbmNlc1NldFRvcE5h
dmlnYXRpb25Ub0RhdGFVUkxzQWxsb3dlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5hbGxvd1RvcE5h
dmlnYXRpb25Ub0RhdGFVUkxzKCkpOwogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICBX
S1ByZWZlcmVuY2VzU2V0RnVsbFNjcmVlbkVuYWJsZWQocHJlZmVyZW5jZXMsIHRydWUpOwogI2Vu
ZGlmCkBAIC04OTksMTggKzkwMywxOCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldFByZWZl
cmVuY2VzVG9DCiAgICAgV0tQcmVmZXJlbmNlc1NldEN1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxl
ZChwcmVmZXJlbmNlcywgdHJ1ZSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldERpYWxvZ0VsZW1lbnRF
bmFibGVkKHByZWZlcmVuY2VzLCB0cnVlKTsKIAotICAgIFdLUHJlZmVyZW5jZXNTZXRNb2NrU2Ny
b2xsYmFyc0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMudXNlTW9ja1Njcm9sbGJhcnMpOwot
ICAgIFdLUHJlZmVyZW5jZXNTZXROZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyhwcmVmZXJlbmNlcywg
b3B0aW9ucy5uZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldEF0
dGFjaG1lbnRFbGVtZW50RW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVBdHRhY2ht
ZW50RWxlbWVudCk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldE1lbnVJdGVtRWxlbWVudEVuYWJsZWQo
cHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlTWVudUl0ZW1FbGVtZW50KTsKLSAgICBXS1ByZWZl
cmVuY2VzU2V0S2V5Z2VuRWxlbWVudEVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxl
S2V5Z2VuRWxlbWVudCk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldE1vZGVybk1lZGlhQ29udHJvbHNF
bmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMpOwot
ICAgIFdLUHJlZmVyZW5jZXNTZXRXZWJBdXRoZW50aWNhdGlvbkVuYWJsZWQocHJlZmVyZW5jZXMs
IG9wdGlvbnMuZW5hYmxlV2ViQXV0aGVudGljYXRpb24pOwotICAgIFdLUHJlZmVyZW5jZXNTZXRX
ZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0aGVudGljYXRvckVuYWJsZWQocHJlZmVyZW5jZXMsIG9w
dGlvbnMuZW5hYmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IpOwotICAgIFdL
UHJlZmVyZW5jZXNTZXRBbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50
aWFscyhwcmVmZXJlbmNlcywgb3B0aW9ucy5hbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9B
c2tGb3JDcmVkZW50aWFscyk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldENvbG9yRmlsdGVyRW5hYmxl
ZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVDb2xvckZpbHRlcik7Ci0gICAgV0tQcmVmZXJl
bmNlc1NldFB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUocHJlZmVyZW5jZXMsIG9w
dGlvbnMucHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZSk7Ci0gICAgV0tQcmVmZXJl
bmNlc1NldFBhZ2VDYWNoZUVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQmFja0Zv
cndhcmRDYWNoZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldE1vY2tTY3JvbGxiYXJzRW5hYmxlZChw
cmVmZXJlbmNlcywgb3B0aW9ucy51c2VNb2NrU2Nyb2xsYmFycygpKTsKKyAgICBXS1ByZWZlcmVu
Y2VzU2V0TmVlZHNTaXRlU3BlY2lmaWNRdWlya3MocHJlZmVyZW5jZXMsIG9wdGlvbnMubmVlZHNT
aXRlU3BlY2lmaWNRdWlya3MoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEF0dGFjaG1lbnRFbGVt
ZW50RW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVBdHRhY2htZW50RWxlbWVudCgp
KTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0TWVudUl0ZW1FbGVtZW50RW5hYmxlZChwcmVmZXJlbmNl
cywgb3B0aW9ucy5lbmFibGVNZW51SXRlbUVsZW1lbnQoKSk7CisgICAgV0tQcmVmZXJlbmNlc1Nl
dEtleWdlbkVsZW1lbnRFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUtleWdlbkVs
ZW1lbnQoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVk
KHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMoKSk7CisgICAg
V0tQcmVmZXJlbmNlc1NldFdlYkF1dGhlbnRpY2F0aW9uRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0
aW9ucy5lbmFibGVXZWJBdXRoZW50aWNhdGlvbigpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0V2Vi
QXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3JFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRp
b25zLmVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yKCkpOworICAgIFdL
UHJlZmVyZW5jZXNTZXRBbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50
aWFscyhwcmVmZXJlbmNlcywgb3B0aW9ucy5hbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9B
c2tGb3JDcmVkZW50aWFscygpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0Q29sb3JGaWx0ZXJFbmFi
bGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUNvbG9yRmlsdGVyKCkpOworICAgIFdLUHJl
ZmVyZW5jZXNTZXRQdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlKHByZWZlcmVuY2Vz
LCBvcHRpb25zLnB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUoKSk7CisgICAgV0tQ
cmVmZXJlbmNlc1NldFBhZ2VDYWNoZUVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxl
QmFja0ZvcndhcmRDYWNoZSgpKTsKIAogICAgIFdLUHJlZmVyZW5jZXNTZXREZWZhdWx0VGV4dEVu
Y29kaW5nTmFtZShwcmVmZXJlbmNlcywgdG9XSygiSVNPLTg4NTktMSIpLmdldCgpKTsKIApAQCAt
OTMyLDcgKzkzNiw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0UHJlZmVyZW5jZXNUb0MK
ICAgICBXS1ByZWZlcmVuY2VzU2V0SGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQo
cHJlZmVyZW5jZXMsIGZhbHNlKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0SGlkZGVuUGFnZUNTU0Fu
aW1hdGlvblN1c3BlbnNpb25FbmFibGVkKHByZWZlcmVuY2VzLCBmYWxzZSk7CiAKLSAgICBXS1By
ZWZlcmVuY2VzU2V0QWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZChwcmVmZXJlbmNlcywgbV9zaG91
bGRVc2VBY2NlbGVyYXRlZERyYXdpbmcgfHwgb3B0aW9ucy51c2VBY2NlbGVyYXRlZERyYXdpbmcp
OworICAgIFdLUHJlZmVyZW5jZXNTZXRBY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKHByZWZlcmVu
Y2VzLCBtX3Nob3VsZFVzZUFjY2VsZXJhdGVkRHJhd2luZyB8fCBvcHRpb25zLnVzZUFjY2VsZXJh
dGVkRHJhd2luZygpKTsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIHRlc3RpbmcgdGhlIGRl
ZmF1bHQuCiAgICAgV0tQcmVmZXJlbmNlc1NldFN0b3JhZ2VCbG9ja2luZ1BvbGljeShwcmVmZXJl
bmNlcywga1dLQWxsb3dBbGxTdG9yYWdlKTsKIApAQCAtOTUzLDcgKzk1Nyw3IEBAIHZvaWQgVGVz
dENvbnRyb2xsZXI6OnJlc2V0UHJlZmVyZW5jZXNUb0MKICAgICAKICAgICBXS1ByZWZlcmVuY2Vz
U2V0TGFyZ2VJbWFnZUFzeW5jRGVjb2RpbmdFbmFibGVkKHByZWZlcmVuY2VzLCBmYWxzZSk7CiAK
LSAgICBXS1ByZWZlcmVuY2VzU2V0SW5zcGVjdG9yQWRkaXRpb25zRW5hYmxlZChwcmVmZXJlbmNl
cywgb3B0aW9ucy5lbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMpOworICAgIFdLUHJlZmVyZW5jZXNT
ZXRJbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUlu
c3BlY3RvckFkZGl0aW9ucygpKTsKIAogICAgIFdLUHJlZmVyZW5jZXNTZXRTdG9yYWdlQWNjZXNz
QVBJRW5hYmxlZChwcmVmZXJlbmNlcywgdHJ1ZSk7CiAgICAgCkBAIC05NzIsNyArOTc2LDcgQEAg
dm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRQcmVmZXJlbmNlc1RvQwogICAgIFdLUHJlZmVyZW5j
ZXNTZXRBdWRpb1BsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZShwcmVmZXJlbmNlcywgZmFsc2Up
OwogICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJl
bmNlcywgZmFsc2UsIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTcGVha2VyU2VsZWN0
aW9uUmVxdWlyZXNVc2VyR2VzdHVyZSIpKTsKIAotICAgIFdLUHJlZmVyZW5jZXNTZXRTaG91bGRV
c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0KHByZWZlcmVuY2VzLCBvcHRpb25zLmNvbnRleHRP
cHRpb25zLnVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQpOworICAgIFdLUHJlZmVyZW5jZXNT
ZXRTaG91bGRVc2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0KHByZWZlcmVuY2VzLCBvcHRpb25z
LnVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQoKSk7CiAKICNpZiBFTkFCTEUoQUNDRVNTSUJJ
TElUWV9JU09MQVRFRF9UUkVFKQogICAgIFdLUHJlZmVyZW5jZXNTZXRJc0FjY2Vzc2liaWxpdHlJ
c29sYXRlZFRyZWVFbmFibGVkKHByZWZlcmVuY2VzLCBhY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVl
TW9kZSgpKTsKQEAgLTEwMDYsMTEgKzEwMTAsMTIgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cmVz
ZXRTdGF0ZVRvQ29uc2lzdAogICAgIHNldFZhbHVlKHJlc2V0TWVzc2FnZUJvZHksICJBY2Nlc3Np
YmlsaXR5SXNvbGF0ZWRUcmVlIiwgbV9hY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlTW9kZSk7CiAj
ZW5kaWYKIAotICAgIGlmIChvcHRpb25zLmpzY09wdGlvbnMubGVuZ3RoKCkpCi0gICAgICAgIHNl
dFZhbHVlKHJlc2V0TWVzc2FnZUJvZHksICJKU0NPcHRpb25zIiwgb3B0aW9ucy5qc2NPcHRpb25z
LmNfc3RyKCkpOworICAgIGF1dG8ganNjT3B0aW9ucyA9IG9wdGlvbnMuanNjT3B0aW9ucygpOwor
ICAgIGlmICghanNjT3B0aW9ucy5lbXB0eSgpKQorICAgICAgICBzZXRWYWx1ZShyZXNldE1lc3Nh
Z2VCb2R5LCAiSlNDT3B0aW9ucyIsIGpzY09wdGlvbnMuY19zdHIoKSk7CiAKICNpZiBQTEFURk9S
TShDT0NPQSkKLSAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldEFkZGl0aW9uYWxTdXBwb3J0ZWRJ
bWFnZVR5cGVzRm9yVGVzdGluZyhvcHRpb25zLmFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVz
LmNfc3RyKCkpOworICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0QWRkaXRpb25hbFN1cHBvcnRl
ZEltYWdlVHlwZXNGb3JUZXN0aW5nKG9wdGlvbnMuYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlw
ZXMoKS5jX3N0cigpKTsKICNlbmRpZgogCiAgICAgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVk
QnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCks
IHRvV0soIlJlc2V0IikuZ2V0KCksIHJlc2V0TWVzc2FnZUJvZHkuZ2V0KCkpOwpAQCAtMTExOCw3
ICsxMTIzLDcgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdAogCiAg
ICAgc2V0TmF2aWdhdGlvbkdlc3R1cmVzRW5hYmxlZChmYWxzZSk7CiAgICAgCi0gICAgc2V0SWdu
b3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMob3B0aW9ucy5pZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0
cyk7CisgICAgc2V0SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMob3B0aW9ucy5pZ25vcmVzVmll
d3BvcnRTY2FsZUxpbWl0cygpKTsKIAogICAgIG1fb3BlblBhbmVsRmlsZVVSTHMgPSBudWxscHRy
OwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC0xMzE4LDcgKzEzMjMsNyBAQCBzdGF0aWMg
c3RkOjpzdHJpbmcgdGVzdFBhdGgoV0tVUkxSZWYgdXJsCiAgICAgcmV0dXJuIHN0ZDo6c3RyaW5n
KCk7CiB9CiAKLXN0YXRpYyBXS1VSTFJlZiBjcmVhdGVUZXN0VVJMKGNvbnN0IGNoYXIqIHBhdGhP
clVSTCkKK1dLVVJMUmVmIFRlc3RDb250cm9sbGVyOjpjcmVhdGVUZXN0VVJMKGNvbnN0IGNoYXIq
IHBhdGhPclVSTCkKIHsKICAgICBpZiAoc3Ryc3RyKHBhdGhPclVSTCwgImh0dHA6Ly8iKSB8fCBz
dHJzdHIocGF0aE9yVVJMLCAiaHR0cHM6Ly8iKSB8fCBzdHJzdHIocGF0aE9yVVJMLCAiZmlsZTov
LyIpKQogICAgICAgICByZXR1cm4gV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJpbmcocGF0aE9yVVJM
KTsKQEAgLTEzNTYsMjExICsxMzYxLDIzIEBAIHN0YXRpYyBXS1VSTFJlZiBjcmVhdGVUZXN0VVJM
KGNvbnN0IGNoYXIKICAgICByZXR1cm4gV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJpbmcoYnVmZmVy
LmdldCgpKTsKIH0KIAotc3RhdGljIGJvb2wgcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKGNv
bnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUgPT0gInRydWUiKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAodmFsdWUgPT0gImZhbHNlIikKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgTE9HX0VSUk9SKCJGb3VuZCB1bmV4cGVjdGVkIHZhbHVlICclcycg
Zm9yIGJvb2xlYW4gb3B0aW9uLiBFeHBlY3RlZCAndHJ1ZScgb3IgJ2ZhbHNlJy4iLCB2YWx1ZS5j
X3N0cigpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBzdGQ6OnN0cmluZyBwYXJz
ZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzUmVsYXRpdmVQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiB2
YWx1ZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKLXsKLSAgICBhdXRvIGJhc2VVUkwg
PSBhZG9wdFdLKGNyZWF0ZVRlc3RVUkwocGF0aE9yVVJMLmNfc3RyKCkpKTsKLSAgICBhdXRvIHJl
bGF0aXZlVVJMID0gYWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhCYXNlVVJMKGJhc2VVUkwuZ2V0KCks
IHZhbHVlLmNfc3RyKCkpKTsKLSAgICByZXR1cm4gdG9TVEQoYWRvcHRXSyhXS1VSTENvcHlQYXRo
KHJlbGF0aXZlVVJMLmdldCgpKSkpOwotfQotCi1zdGF0aWMgc3RkOjpzdHJpbmcgcGFyc2VTdHJp
bmdUZXN0SGVhZGVyVmFsdWVBc1VSTChjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpCi17Ci0gICAg
cmV0dXJuIHRvU1REKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKGNyZWF0ZVRlc3RVUkwodmFsdWUu
Y19zdHIoKSkpKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZVRlc3RPcHRpb25zRnJvbVRlc3RI
ZWFkZXIoVGVzdE9wdGlvbnMmIHRlc3RPcHRpb25zLCBjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9y
VVJMLCBjb25zdCBzdGQ6OnN0cmluZyYgYWJzb2x1dGVQYXRoKQotewotICAgIHN0ZDo6c3RyaW5n
IGZpbGVuYW1lID0gYWJzb2x1dGVQYXRoOwotICAgIGlmIChmaWxlbmFtZS5lbXB0eSgpKSB7Ci0g
ICAgICAgIC8vIEdyb3NzLiBOZWVkIHRvIHJlZHVjZSBjb252ZXJzaW9ucyBiZXR3ZWVuIGFsbCB0
aGUgc3RyaW5nIHR5cGVzIGFuZCBVUkxzLgotICAgICAgICBmaWxlbmFtZSA9IHRlc3RQYXRoKGFk
b3B0V0soY3JlYXRlVGVzdFVSTChwYXRoT3JVUkwuY19zdHIoKSkpLmdldCgpKTsKLSAgICB9Ci0K
LSAgICBpZiAoZmlsZW5hbWUuZW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3RkOjpz
dHJpbmcgb3B0aW9uczsKLSAgICBzdGQ6Omlmc3RyZWFtIHRlc3RGaWxlKGZpbGVuYW1lLmRhdGEo
KSk7Ci0gICAgaWYgKCF0ZXN0RmlsZS5nb29kKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBnZXRs
aW5lKHRlc3RGaWxlLCBvcHRpb25zKTsKLSAgICBzdGQ6OnN0cmluZyBiZWdpblN0cmluZygid2Vi
a2l0LXRlc3QtcnVubmVyIFsgIik7Ci0gICAgc3RkOjpzdHJpbmcgZW5kU3RyaW5nKCIgXSIpOwot
ICAgIHNpemVfdCBiZWdpbkxvY2F0aW9uID0gb3B0aW9ucy5maW5kKGJlZ2luU3RyaW5nKTsKLSAg
ICBpZiAoYmVnaW5Mb2NhdGlvbiA9PSBzdGQ6OnN0cmluZzo6bnBvcykKLSAgICAgICAgcmV0dXJu
OwotICAgIHNpemVfdCBlbmRMb2NhdGlvbiA9IG9wdGlvbnMuZmluZChlbmRTdHJpbmcsIGJlZ2lu
TG9jYXRpb24pOwotICAgIGlmIChlbmRMb2NhdGlvbiA9PSBzdGQ6OnN0cmluZzo6bnBvcykgewot
ICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBmaW5kIGVuZCBvZiB0ZXN0IGhlYWRlciBpbiAl
cyIsIGZpbGVuYW1lLmNfc3RyKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHN0ZDo6
c3RyaW5nIHBhaXJTdHJpbmcgPSBvcHRpb25zLnN1YnN0cihiZWdpbkxvY2F0aW9uICsgYmVnaW5T
dHJpbmcuc2l6ZSgpLCBlbmRMb2NhdGlvbiAtIChiZWdpbkxvY2F0aW9uICsgYmVnaW5TdHJpbmcu
c2l6ZSgpKSk7Ci0gICAgc2l6ZV90IHBhaXJTdGFydCA9IDA7Ci0gICAgd2hpbGUgKHBhaXJTdGFy
dCA8IHBhaXJTdHJpbmcuc2l6ZSgpKSB7Ci0gICAgICAgIHNpemVfdCBwYWlyRW5kID0gcGFpclN0
cmluZy5maW5kKCIgIiwgcGFpclN0YXJ0KTsKLSAgICAgICAgaWYgKHBhaXJFbmQgPT0gc3RkOjpz
dHJpbmc6Om5wb3MpCi0gICAgICAgICAgICBwYWlyRW5kID0gcGFpclN0cmluZy5zaXplKCk7Ci0g
ICAgICAgIHNpemVfdCBlcXVhbHNMb2NhdGlvbiA9IHBhaXJTdHJpbmcuZmluZCgiPSIsIHBhaXJT
dGFydCk7Ci0gICAgICAgIGlmIChlcXVhbHNMb2NhdGlvbiA9PSBzdGQ6OnN0cmluZzo6bnBvcykg
ewotICAgICAgICAgICAgTE9HX0VSUk9SKCJNYWxmb3JtZWQgb3B0aW9uIGluIHRlc3QgaGVhZGVy
IChjb3VsZCBub3QgZmluZCAnPScgY2hhcmFjdGVyKSBpbiAlcyIsIGZpbGVuYW1lLmNfc3RyKCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYXV0byBrZXkgPSBwYWly
U3RyaW5nLnN1YnN0cihwYWlyU3RhcnQsIGVxdWFsc0xvY2F0aW9uIC0gcGFpclN0YXJ0KTsKLSAg
ICAgICAgYXV0byB2YWx1ZSA9IHBhaXJTdHJpbmcuc3Vic3RyKGVxdWFsc0xvY2F0aW9uICsgMSwg
cGFpckVuZCAtIChlcXVhbHNMb2NhdGlvbiArIDEpKTsKLQotICAgICAgICBpZiAoIWtleS5yZmlu
ZCgiZXhwZXJpbWVudGFsOiIpKSB7Ci0gICAgICAgICAgICBrZXkgPSBrZXkuc3Vic3RyKDEzKTsK
LSAgICAgICAgICAgIHRlc3RPcHRpb25zLmV4cGVyaW1lbnRhbEZlYXR1cmVzLmFkZChTdHJpbmco
a2V5LmNfc3RyKCkpLCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICgha2V5LnJmaW5kKCJpbnRlcm5hbDoiKSkgewotICAgICAgICAg
ICAga2V5ID0ga2V5LnN1YnN0cig5KTsKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmludGVybmFs
RGVidWdGZWF0dXJlcy5hZGQoU3RyaW5nKGtleS5jX3N0cigpKSwgcGFyc2VCb29sZWFuVGVzdEhl
YWRlclZhbHVlKHZhbHVlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoa2V5ID09ICJsYW5n
dWFnZSIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5jb250ZXh0T3B0aW9ucy5vdmVycmlkZUxh
bmd1YWdlcyA9IFN0cmluZyh2YWx1ZS5jX3N0cigpKS5zcGxpdCgnLCcpOwotICAgICAgICBlbHNl
IGlmIChrZXkgPT0gInVzZVRocmVhZGVkU2Nyb2xsaW5nIikKLSAgICAgICAgICAgIHRlc3RPcHRp
b25zLnVzZVRocmVhZGVkU2Nyb2xsaW5nID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZh
bHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJ1c2VBY2NlbGVyYXRlZERyYXdpbmciKQot
ICAgICAgICAgICAgdGVzdE9wdGlvbnMudXNlQWNjZWxlcmF0ZWREcmF3aW5nID0gcGFyc2VCb29s
ZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJ1c2VG
bGV4aWJsZVZpZXdwb3J0IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLnVzZUZsZXhpYmxlVmll
d3BvcnQgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNl
IGlmIChrZXkgPT0gInVzZURhdGFEZXRlY3Rpb24iKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMu
dXNlRGF0YURldGVjdGlvbiA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0g
ICAgICAgIGVsc2UgaWYgKGtleSA9PSAidXNlTW9ja1Njcm9sbGJhcnMiKQotICAgICAgICAgICAg
dGVzdE9wdGlvbnMudXNlTW9ja1Njcm9sbGJhcnMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFs
dWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gIm5lZWRzU2l0ZVNwZWNpZmljUXVp
cmtzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzID0g
cGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5
ID09ICJpZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9u
cy5pZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1
ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAidXNlQ2hhcmFjdGVyU2VsZWN0aW9u
R3JhbnVsYXJpdHkiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMudXNlQ2hhcmFjdGVyU2VsZWN0
aW9uR3JhbnVsYXJpdHkgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAg
ICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUF0dGFjaG1lbnRFbGVtZW50IikKLSAgICAgICAg
ICAgIHRlc3RPcHRpb25zLmVuYWJsZUF0dGFjaG1lbnRFbGVtZW50ID0gcGFyc2VCb29sZWFuVGVz
dEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVJbnRl
cnNlY3Rpb25PYnNlcnZlciIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVJbnRlcnNl
Y3Rpb25PYnNlcnZlciA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAg
ICAgIGVsc2UgaWYgKGtleSA9PSAidXNlRXBoZW1lcmFsU2Vzc2lvbiIpCi0gICAgICAgICAgICB0
ZXN0T3B0aW9ucy51c2VFcGhlbWVyYWxTZXNzaW9uID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZh
bHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVNZW51SXRlbUVsZW1l
bnQiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlTWVudUl0ZW1FbGVtZW50ID0gcGFy
c2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09
ICJlbmFibGVLZXlnZW5FbGVtZW50IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZUtl
eWdlbkVsZW1lbnQgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAg
ICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMiKQotICAgICAgICAg
ICAgdGVzdE9wdGlvbnMuZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyA9IHBhcnNlQm9vbGVhblRl
c3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlUG9p
bnRlckxvY2siKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlUG9pbnRlckxvY2sgPSBw
YXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkg
PT0gImVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVu
YWJsZVdlYkF1dGhlbnRpY2F0aW9uID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVl
KTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVXZWJBdXRoZW50aWNhdGlvbkxvY2Fs
QXV0aGVudGljYXRvciIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVXZWJBdXRoZW50
aWNhdGlvbkxvY2FsQXV0aGVudGljYXRvciA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2
YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25z
IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyA9IHBh
cnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9
PSAiZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmR1
bXBKU0NvbnNvbGVMb2dJblN0ZEVyciA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1
ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiYXBwbGljYXRpb25NYW5pZmVzdCIpCi0gICAg
ICAgICAgICB0ZXN0T3B0aW9ucy5hcHBsaWNhdGlvbk1hbmlmZXN0ID0gcGFyc2VTdHJpbmdUZXN0
SGVhZGVyVmFsdWVBc1JlbGF0aXZlUGF0aCh2YWx1ZSwgcGF0aE9yVVJMKTsKLSAgICAgICAgZWxz
ZSBpZiAoa2V5ID09ICJhbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50
aWFscyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5hbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3Vy
Y2VzVG9Bc2tGb3JDcmVkZW50aWFscyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1
ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZG9tUGFzdGVBbGxvd2VkIikKLSAgICAgICAg
ICAgIHRlc3RPcHRpb25zLmRvbVBhc3RlQWxsb3dlZCA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJW
YWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlUHJvY2Vzc1N3YXBP
bk5hdmlnYXRpb24iKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuY29udGV4dE9wdGlvbnMuZW5h
YmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24gPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUo
dmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZVByb2Nlc3NTd2FwT25XaW5k
b3dPcGVuIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmNvbnRleHRPcHRpb25zLmVuYWJsZVBy
b2Nlc3NTd2FwT25XaW5kb3dPcGVuID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVl
KTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJ1c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0
IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmNvbnRleHRPcHRpb25zLnVzZVNlcnZpY2VXb3Jr
ZXJTaG9ydFRpbWVvdXQgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAg
ICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUNvbG9yRmlsdGVyIikKLSAgICAgICAgICAgIHRl
c3RPcHRpb25zLmVuYWJsZUNvbG9yRmlsdGVyID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVl
KHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJwdW5jaE91dFdoaXRlQmFja2dyb3Vu
ZHNJbkRhcmtNb2RlIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLnB1bmNoT3V0V2hpdGVCYWNr
Z3JvdW5kc0luRGFya01vZGUgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwot
ICAgICAgICBlbHNlIGlmIChrZXkgPT0gImpzY09wdGlvbnMiKQotICAgICAgICAgICAgdGVzdE9w
dGlvbnMuanNjT3B0aW9ucyA9IHZhbHVlOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImFkZGl0
aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmFkZGl0
aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzID0gdmFsdWU7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9
PSAicnVuU2luZ2x5IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLnJ1blNpbmdseSA9IHBhcnNl
Qm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAi
c2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLnNob3Vs
ZElnbm9yZU1ldGFWaWV3cG9ydCA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7
Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAic3BlbGxDaGVja2luZ0RvdHMiKQotICAgICAgICAg
ICAgdGVzdE9wdGlvbnMuc2hvdWxkU2hvd1NwZWxsQ2hlY2tpbmdEb3RzID0gcGFyc2VCb29sZWFu
VGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVT
ZXJ2aWNlQ29udHJvbHMiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlU2VydmljZUNv
bnRyb2xzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxz
ZSBpZiAoa2V5ID09ICJlZGl0YWJsZSIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lZGl0YWJs
ZSA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYg
KGtleSA9PSAic2hvdWxkSGFuZGxlUnVuT3BlblBhbmVsIikKLSAgICAgICAgICAgIHRlc3RPcHRp
b25zLnNob3VsZEhhbmRsZVJ1bk9wZW5QYW5lbCA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1
ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAic2hvdWxkUHJlc2VudFBvcG92ZXJz
IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLnNob3VsZFByZXNlbnRQb3BvdmVycyA9IHBhcnNl
Qm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAi
Y29udGVudEluc2V0LnRvcCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5jb250ZW50SW5zZXRU
b3AgPSBzdGQ6OnN0b2QodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImlnbm9yZVN5
bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuY29u
dGV4dE9wdGlvbnMuaWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0cyA9IHBhcnNlQm9v
bGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiY29u
dGVudE1vZGUiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuY29udGVudE1vZGUgPSB7IHZhbHVl
LmNfc3RyKCkgfTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJhcHBsaWNhdGlvbkJ1bmRsZUlk
ZW50aWZpZXIiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuYXBwbGljYXRpb25CdW5kbGVJZGVu
dGlmaWVyID0geyB2YWx1ZS5jX3N0cigpIH07Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5h
YmxlQXBwTmFwIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZUFwcE5hcCA9IHBhcnNl
Qm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAi
ZW5hYmxlQmFja0ZvcndhcmRDYWNoZSIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVC
YWNrRm9yd2FyZENhY2hlID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAg
ICAgICAgZWxzZSBpZiAoa2V5ID09ICJhbGxvd3NMaW5rUHJldmlldyIpCi0gICAgICAgICAgICB0
ZXN0T3B0aW9ucy5hbGxvd3NMaW5rUHJldmlldyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1
ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlQ2FwdHVyZVZpZGVvSW5V
SVByb2Nlc3MiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlQ2FwdHVyZVZpZGVvSW5V
SVByb2Nlc3MgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBl
bHNlIGlmIChrZXkgPT0gImVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2VzcyIpCi0gICAgICAg
ICAgICB0ZXN0T3B0aW9ucy5lbmFibGVDYXB0dXJlVmlkZW9JbkdQVVByb2Nlc3MgPSBwYXJzZUJv
b2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVu
YWJsZUNhcHR1cmVBdWRpb0luVUlQcm9jZXNzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVu
YWJsZUNhcHR1cmVBdWRpb0luVUlQcm9jZXNzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVl
KHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVDYXB0dXJlQXVkaW9JbkdQ
VVByb2Nlc3MiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlQ2FwdHVyZUF1ZGlvSW5H
UFVQcm9jZXNzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAg
ZWxzZSBpZiAoa2V5ID09ICJhbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzIikKLSAgICAgICAg
ICAgIHRlc3RPcHRpb25zLmFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMgPSBwYXJzZUJvb2xl
YW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJs
ZUluQXBwQnJvd3NlclByaXZhY3kiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlSW5B
cHBCcm93c2VyUHJpdmFjeSA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0g
ICAgICAgIGVsc2UgaWYgKGtleSA9PSAic3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMIikKLSAg
ICAgICAgICAgIHRlc3RPcHRpb25zLnN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTCA9IHBhcnNl
U3RyaW5nVGVzdEhlYWRlclZhbHVlQXNVUkwodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkg
PT0gImlzQXBwQm91bmRXZWJWaWV3IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmlzQXBwQm91
bmRXZWJWaWV3ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAg
cGFpclN0YXJ0ID0gcGFpckVuZCArIDE7Ci0gICAgfQotfQotCiBUZXN0T3B0aW9ucyBUZXN0Q29u
dHJvbGxlcjo6dGVzdE9wdGlvbnNGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJiBjb21tYW5kKSBj
b25zdAogewotICAgIFRlc3RPcHRpb25zIG9wdGlvbnMoY29tbWFuZC5wYXRoT3JVUkwpOwotCi0g
ICAgb3B0aW9ucy51c2VSZW1vdGVMYXllclRyZWUgPSBtX3Nob3VsZFVzZVJlbW90ZUxheWVyVHJl
ZTsKLSAgICBvcHRpb25zLnNob3VsZFNob3dXZWJWaWV3ID0gbV9zaG91bGRTaG93V2ViVmlldzsK
LQotICAgIGZvciAoYXV0byYgZmVhdHVyZSA6IG1faW50ZXJuYWxGZWF0dXJlcykKLSAgICAgICAg
b3B0aW9ucy5pbnRlcm5hbERlYnVnRmVhdHVyZXMuYWRkKGZlYXR1cmUua2V5LCBmZWF0dXJlLnZh
bHVlKTsKLSAgICBmb3IgKGF1dG8mIGZlYXR1cmUgOiBtX2V4cGVyaW1lbnRhbEZlYXR1cmVzKQot
ICAgICAgICBvcHRpb25zLmV4cGVyaW1lbnRhbEZlYXR1cmVzLmFkZChmZWF0dXJlLmtleSwgZmVh
dHVyZS52YWx1ZSk7Ci0KLSAgICB1cGRhdGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JU
ZXN0KG9wdGlvbnMsIGNvbW1hbmQucGF0aE9yVVJMKTsKLSAgICB1cGRhdGVUZXN0T3B0aW9uc0Zy
b21UZXN0SGVhZGVyKG9wdGlvbnMsIGNvbW1hbmQucGF0aE9yVVJMLCBjb21tYW5kLmFic29sdXRl
UGF0aCk7Ci0gICAgcGxhdGZvcm1BZGRUZXN0T3B0aW9ucyhvcHRpb25zKTsKKyAgICBUZXN0RmVh
dHVyZXMgZmVhdHVyZXMgPSBtX2dsb2JhbEZlYXR1cmVzOworICAgIG1lcmdlKGZlYXR1cmVzLCBo
YXJkY29kZWRGZWF0dXJlc0Jhc2VkT25QYXRoRm9yVGVzdChjb21tYW5kKSk7CisgICAgbWVyZ2Uo
ZmVhdHVyZXMsIHBsYXRmb3JtU3BlY2lmaWNGZWF0dXJlRGVmYXVsdHNGb3JUZXN0KGNvbW1hbmQp
KTsKKyAgICBtZXJnZShmZWF0dXJlcywgZmVhdHVyZURlZmF1bHRzRnJvbVRlc3RPcHRpb25zRmls
ZXNGb3JUZXN0KGNvbW1hbmQpKTsKKyAgICBtZXJnZShmZWF0dXJlcywgZmVhdHVyZURlZmF1bHRz
RnJvbVRlc3RIZWFkZXJGb3JUZXN0KGNvbW1hbmQpKTsKKyAgICBtZXJnZShmZWF0dXJlcywgcGxh
dGZvcm1TcGVjaWZpY0ZlYXR1cmVPdmVycmlkZXNEZWZhdWx0c0ZvclRlc3QoY29tbWFuZCkpOwog
Ci0gICAgcmV0dXJuIG9wdGlvbnM7CisgICAgcmV0dXJuIFRlc3RPcHRpb25zIHsgZmVhdHVyZXMg
fTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlV2ViVmlld1NpemVGb3JUZXN0KGNv
bnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0KQogewogICAgIHVuc2lnbmVkIHdpZHRoID0gdmlld1dp
ZHRoOwogICAgIHVuc2lnbmVkIGhlaWdodCA9IHZpZXdIZWlnaHQ7Ci0gICAgaWYgKHRlc3Qub3B0
aW9ucygpLmlzU1ZHVGVzdCkgeworICAgIGlmICh0ZXN0Lm9wdGlvbnMoKS5pc1NWR1Rlc3QoKSkg
ewogICAgICAgICB3aWR0aCA9IHczY1NWR1ZpZXdXaWR0aDsKICAgICAgICAgaGVpZ2h0ID0gdzNj
U1ZHVmlld0hlaWdodDsKICAgICB9CkBAIC0xNTcwLDcgKzEzODcsNyBAQCB2b2lkIFRlc3RDb250
cm9sbGVyOjp1cGRhdGVXZWJWaWV3U2l6ZUZvCiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnVwZGF0
ZVdpbmRvd1NjYWxlRm9yVGVzdChQbGF0Zm9ybVdlYlZpZXcqIHZpZXcsIGNvbnN0IFRlc3RJbnZv
Y2F0aW9uJiB0ZXN0KQogewotICAgIHZpZXctPmNoYW5nZVdpbmRvd1NjYWxlSWZOZWVkZWQodGVz
dC5vcHRpb25zKCkuZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIHZpZXctPmNoYW5nZVdpbmRvd1Nj
YWxlSWZOZWVkZWQodGVzdC5vcHRpb25zKCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiB9CiAKIHZv
aWQgVGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyZVZpZXdGb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0
aW9uJiB0ZXN0KQpAQCAtMTc2Niw2ICsxNTgzLDEyIEBAIHN0YXRpYyBUZXN0Q29tbWFuZCBwYXJz
ZUlucHV0TGluZShjb25zdCAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZGllKGlucHV0TGlu
ZSk7CiAgICAgfQorICAgIAorICAgIGlmIChyZXN1bHQuYWJzb2x1dGVQYXRoLmVtcHR5KCkpIHsK
KyAgICAgICAgLy8gR3Jvc3MuIE5lZWQgdG8gcmVkdWNlIGNvbnZlcnNpb25zIGJldHdlZW4gYWxs
IHRoZSBzdHJpbmcgdHlwZXMgYW5kIFVSTHMuCisgICAgICAgIHJlc3VsdC5hYnNvbHV0ZVBhdGgg
PSB0ZXN0UGF0aChhZG9wdFdLKFRlc3RDb250cm9sbGVyOjpjcmVhdGVUZXN0VVJMKHJlc3VsdC5w
YXRoT3JVUkwuY19zdHIoKSkpLmdldCgpKTsKKyAgICB9CisKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCkBAIC0xNzg4LDcgKzE2MTEsNyBAQCBib29sIFRlc3RDb250cm9sbGVyOjpydW5UZXN0KGNv
bnN0IGNoYXIqCiAgICAgaWYgKGNvbW1hbmQudGltZW91dCA+IDBfcykKICAgICAgICAgbV9jdXJy
ZW50SW52b2NhdGlvbi0+c2V0Q3VzdG9tVGltZW91dChjb21tYW5kLnRpbWVvdXQpOwogCi0gICAg
bV9jdXJyZW50SW52b2NhdGlvbi0+c2V0RHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKGNvbW1hbmQu
ZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIHx8IG9wdGlvbnMuZHVtcEpTQ29uc29sZUxvZ0luU3Rk
RXJyKTsKKyAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5zZXREdW1wSlNDb25zb2xlTG9nSW5TdGRF
cnIoY29tbWFuZC5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgfHwgb3B0aW9ucy5kdW1wSlNDb25z
b2xlTG9nSW5TdGRFcnIoKSk7CiAKICAgICBwbGF0Zm9ybVdpbGxSdW5UZXN0KCptX2N1cnJlbnRJ
bnZvY2F0aW9uKTsKIApAQCAtMzAwMyw3ICsyODI2LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6
cGxhdGZvcm1XaWxsUnVuVGVzdAogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUluaXRp
YWxpemVEYXRhU3RvcmUoV0tQYWdlQ29uZmlndXJhdGlvblJlZiBjb25maWd1cmF0aW9uLCBjb25z
dCBUZXN0T3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAoIW9wdGlvbnMudXNlRXBoZW1lcmFs
U2Vzc2lvbikKKyAgICBpZiAoIW9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lvbigpKQogICAgICAg
ICBXS1BhZ2VDb25maWd1cmF0aW9uU2V0V2Vic2l0ZURhdGFTdG9yZShjb25maWd1cmF0aW9uLCBk
ZWZhdWx0V2Vic2l0ZURhdGFTdG9yZSgpKTsKIAogICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdL
UGFnZUNvbmZpZ3VyYXRpb25HZXRXZWJzaXRlRGF0YVN0b3JlKGNvbmZpZ3VyYXRpb24pOwpAQCAt
MzgxOCw3ICszNjQxLDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVpbml0aWFsaXplQXBwQm91
bgogICAgIFdLV2Vic2l0ZURhdGFTdG9yZVJlaW5pdGlhbGl6ZUFwcEJvdW5kRG9tYWlucyhUZXN0
Q29udHJvbGxlcjo6d2Vic2l0ZURhdGFTdG9yZSgpKTsKIH0KIAotdm9pZCBUZXN0Q29udHJvbGxl
cjo6dXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MoY29uc3QgU3RyaW5nJiBi
dW5kbGVJZGVudGlmaWVyKQordm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlQnVuZGxlSWRlbnRp
ZmllckluTmV0d29ya1Byb2Nlc3MoY29uc3Qgc3RkOjpzdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIp
CiB7CiAgICAgSW5BcHBCcm93c2VyUHJpdmFjeUNhbGxiYWNrQ29udGV4dCBjb250ZXh0KCp0aGlz
KTsKICAgICBXS1dlYnNpdGVEYXRhU3RvcmVVcGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3Jr
UHJvY2VzcyhUZXN0Q29udHJvbGxlcjo6d2Vic2l0ZURhdGFTdG9yZSgpLCB0b1dLKGJ1bmRsZUlk
ZW50aWZpZXIpLmdldCgpLCAmY29udGV4dCwgaW5BcHBCcm93c2VyUHJpdmFjeVZvaWRSZXN1bHRD
YWxsYmFjayk7CkBAIC0zODMzLDggKzM2NTYsOSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpjbGVh
ckJ1bmRsZUlkZW50aWZpCiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCi12b2lkIFRlc3RDb250
cm9sbGVyOjpwbGF0Zm9ybUFkZFRlc3RPcHRpb25zKFRlc3RPcHRpb25zJikgY29uc3QKK1Rlc3RG
ZWF0dXJlcyBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVPdmVycmlkZXNE
ZWZhdWx0c0ZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKSBjb25zdAogeworICAgIHJldHVybiB7
IH07CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmluamVjdFVzZXJTY3JpcHQoV0tTdHJpbmdS
ZWYpCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCShyZXZpc2lv
biAyNjc4ODUpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxXZWJLaXQvV0tSZXRhaW5Q
dHIuaD4KICNpbmNsdWRlIDxzZXQ+CiAjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHVub3Jk
ZXJlZF9tYXA+CiAjaW5jbHVkZSA8dmVjdG9yPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAj
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC01MCwxMiArNTEsMTIgQEAgT0JKQ19DTEFT
UyBXS1dlYlZpZXdDb25maWd1cmF0aW9uOwogCiBuYW1lc3BhY2UgV1RSIHsKIAotY2xhc3MgVGVz
dEludm9jYXRpb247CitjbGFzcyBFdmVudFNlbmRlclByb3h5OwogY2xhc3MgT3JpZ2luU2V0dGlu
Z3M7CiBjbGFzcyBQbGF0Zm9ybVdlYlZpZXc7Ci1jbGFzcyBFdmVudFNlbmRlclByb3h5OworY2xh
c3MgVGVzdEludm9jYXRpb247CitjbGFzcyBUZXN0T3B0aW9uczsKIHN0cnVjdCBUZXN0Q29tbWFu
ZDsKLXN0cnVjdCBUZXN0T3B0aW9uczsKIAogY2xhc3MgQXN5bmNUYXNrIHsKIHB1YmxpYzoKQEAg
LTkxLDYgKzkyLDggQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGNvbmZpZ3VyZVdlYnNpdGVE
YXRhU3RvcmVUZW1wb3JhcnlEaXJlY3RvcmllcyhXS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0
aW9uUmVmKTsKICAgICBzdGF0aWMgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIGRlZmF1bHRXZWJzaXRl
RGF0YVN0b3JlKCk7CiAKKyAgICBzdGF0aWMgV0tVUkxSZWYgY3JlYXRlVGVzdFVSTChjb25zdCBj
aGFyKiBwYXRoT3JVUkwpOworCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZpZXdXaWR0aDsK
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmlld0hlaWdodDsKIApAQCAtMTE1LDIwICsxMTgs
MTUgQEAgcHVibGljOgogICAgIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiB3ZWJzaXRlRGF0YVN0b3Jl
KCk7CiAKICAgICBFdmVudFNlbmRlclByb3h5KiBldmVudFNlbmRlclByb3h5KCkgeyByZXR1cm4g
bV9ldmVudFNlbmRlclByb3h5LmdldCgpOyB9Ci0KLSAgICBib29sIHNob3VsZFVzZVJlbW90ZUxh
eWVyVHJlZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkVXNlUmVtb3RlTGF5ZXJUcmVlOyB9CiAg
ICAgCiAgICAgLy8gUnVucyB0aGUgcnVuIGxvb3AgdW50aWwgYGRvbmVgIGlzIHRydWUgb3IgdGhl
IHRpbWVvdXQgZWxhcHNlcy4KICAgICBib29sIHVzZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKCkg
eyByZXR1cm4gbV91c2VXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcjsgfQogICAgIHZvaWQgcnVuVW50
aWwoYm9vbCYgZG9uZSwgV1RGOjpTZWNvbmRzIHRpbWVvdXQpOwogICAgIHZvaWQgbm90aWZ5RG9u
ZSgpOwogCi0gICAgYm9vbCBzaG91bGRTaG93V2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIG1fc2hv
dWxkU2hvd1dlYlZpZXc7IH0KICAgICBib29sIHVzaW5nU2VydmVyTW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdXNpbmdTZXJ2ZXJNb2RlOyB9CiAgICAgdm9pZCBjb25maWd1cmVWaWV3Rm9yVGVzdChj
b25zdCBUZXN0SW52b2NhdGlvbiYpOwotICAgIAotICAgIGJvb2wgc2hvdWxkU2hvd1RvdWNoZXMo
KSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFNob3dUb3VjaGVzOyB9Ci0gICAgCisKICAgICBib29s
IGJlZm9yZVVubG9hZFJldHVyblZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9iZWZvcmVVbmxvYWRS
ZXR1cm5WYWx1ZTsgfQogICAgIHZvaWQgc2V0QmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUoYm9vbCB2
YWx1ZSkgeyBtX2JlZm9yZVVubG9hZFJldHVyblZhbHVlID0gdmFsdWU7IH0KIApAQCAtMjc1LDcg
KzI3Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyTG9hZGVkU3VicmVzb3VyY2VEb21haW5z
KCk7CiAgICAgdm9pZCBjbGVhckFwcEJvdW5kU2Vzc2lvbigpOwogICAgIHZvaWQgcmVpbml0aWFs
aXplQXBwQm91bmREb21haW5zKCk7Ci0gICAgdm9pZCB1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5O
ZXR3b3JrUHJvY2Vzcyhjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIpOworICAgIHZvaWQg
dXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MoY29uc3Qgc3RkOjpzdHJpbmcm
IGJ1bmRsZUlkZW50aWZpZXIpOwogICAgIHZvaWQgY2xlYXJCdW5kbGVJZGVudGlmaWVySW5OZXR3
b3JrUHJvY2VzcygpOwogCiAgICAgV0tBcnJheVJlZiBvcGVuUGFuZWxGaWxlVVJMcygpIGNvbnN0
IHsgcmV0dXJuIG1fb3BlblBhbmVsRmlsZVVSTHMuZ2V0KCk7IH0KQEAgLTM2Miw3ICszNjAsNyBA
QCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgV0tSZXRhaW5QdHI8V0tQYWdlQ29uZmlndXJhdGlv
blJlZj4gZ2VuZXJhdGVQYWdlQ29uZmlndXJhdGlvbihjb25zdCBUZXN0T3B0aW9ucyYpOwotICAg
IFdLUmV0YWluUHRyPFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWY+IGdlbmVyYXRlQ29udGV4dENv
bmZpZ3VyYXRpb24oY29uc3QgVGVzdE9wdGlvbnM6OkNvbnRleHRPcHRpb25zJikgY29uc3Q7Cisg
ICAgV0tSZXRhaW5QdHI8V0tDb250ZXh0Q29uZmlndXJhdGlvblJlZj4gZ2VuZXJhdGVDb250ZXh0
Q29uZmlndXJhdGlvbihjb25zdCBDb250ZXh0T3B0aW9ucyYpIGNvbnN0OwogICAgIHZvaWQgaW5p
dGlhbGl6ZShpbnQgYXJnYywgY29uc3QgY2hhciogYXJndltdKTsKICAgICB2b2lkIGNyZWF0ZVdl
YlZpZXdXaXRoT3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYpOwogICAgIHZvaWQgcnVuKCk7CkBA
IC0zODAsNyArMzc4LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtRGVzdHJveSgpOwog
ICAgIFdLQ29udGV4dFJlZiBwbGF0Zm9ybUFkanVzdENvbnRleHQoV0tDb250ZXh0UmVmLCBXS0Nv
bnRleHRDb25maWd1cmF0aW9uUmVmKTsKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZUNvbnRl
eHQoKTsKLSAgICB2b2lkIHBsYXRmb3JtQWRkVGVzdE9wdGlvbnMoVGVzdE9wdGlvbnMmKSBjb25z
dDsKICAgICB2b2lkIHBsYXRmb3JtQ3JlYXRlV2ViVmlldyhXS1BhZ2VDb25maWd1cmF0aW9uUmVm
LCBjb25zdCBUZXN0T3B0aW9ucyYpOwogICAgIHN0YXRpYyBQbGF0Zm9ybVdlYlZpZXcqIHBsYXRm
b3JtQ3JlYXRlT3RoZXJQYWdlKFBsYXRmb3JtV2ViVmlldyogcGFyZW50VmlldywgV0tQYWdlQ29u
ZmlndXJhdGlvblJlZiwgY29uc3QgVGVzdE9wdGlvbnMmKTsKICAgICB2b2lkIHBsYXRmb3JtUmVz
ZXRQcmVmZXJlbmNlc1RvQ29uc2lzdGVudFZhbHVlcygpOwpAQCAtMzg5LDcgKzM4Niw3IEBAIHBy
aXZhdGU6CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBjb2NvYVBsYXRmb3JtSW5pdGlh
bGl6ZSgpOwogICAgIHZvaWQgY29jb2FSZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKGNvbnN0
IFRlc3RPcHRpb25zJik7Ci0gICAgdm9pZCBzZXRBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIo
Y29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBzZXRBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIo
Y29uc3Qgc3RkOjpzdHJpbmcmKTsKICAgICB2b2lkIGNsZWFyQXBwbGljYXRpb25CdW5kbGVJZGVu
dGlmaWVyVGVzdGluZ092ZXJyaWRlKCk7CiAjZW5kaWYKICAgICB2b2lkIHBsYXRmb3JtQ29uZmln
dXJlVmlld0ZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mKTsKQEAgLTQwMyw3ICs0MDAsOSBA
QCBwcml2YXRlOgogCiAgICAgdm9pZCBlbnN1cmVWaWV3U3VwcG9ydHNPcHRpb25zRm9yVGVzdChj
b25zdCBUZXN0SW52b2NhdGlvbiYpOwogICAgIFRlc3RPcHRpb25zIHRlc3RPcHRpb25zRm9yVGVz
dChjb25zdCBUZXN0Q29tbWFuZCYpIGNvbnN0OwotICAgIHZvaWQgdXBkYXRlUGxhdGZvcm1TcGVj
aWZpY1Rlc3RPcHRpb25zRm9yVGVzdChUZXN0T3B0aW9ucyYsIGNvbnN0IHN0ZDo6c3RyaW5nJiBw
YXRoT3JVUkwpIGNvbnN0OworICAgIFRlc3RGZWF0dXJlcyBnbG9iYWxGZWF0dXJlRGVmYXVsdHNG
b3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJikgY29uc3Q7CisgICAgVGVzdEZlYXR1cmVzIHBsYXRm
b3JtU3BlY2lmaWNGZWF0dXJlRGVmYXVsdHNGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJikgY29u
c3Q7CisgICAgVGVzdEZlYXR1cmVzIHBsYXRmb3JtU3BlY2lmaWNGZWF0dXJlT3ZlcnJpZGVzRGVm
YXVsdHNGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJikgY29uc3Q7CiAKICAgICB2b2lkIHVwZGF0
ZVdlYlZpZXdTaXplRm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYpOwogICAgIHZvaWQgdXBk
YXRlV2luZG93U2NhbGVGb3JUZXN0KFBsYXRmb3JtV2ViVmlldyosIGNvbnN0IFRlc3RJbnZvY2F0
aW9uJik7CkBAIC01MzgsOCArNTM3LDEwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2NyZWF0ZWRP
dGhlclBhZ2UgeyBmYWxzZSB9OwogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBtX3BhdGhz
OwogICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBtX2FsbG93ZWRIb3N0czsKLSAgICBIYXNoTWFw
PFN0cmluZywgYm9vbD4gbV9pbnRlcm5hbEZlYXR1cmVzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBi
b29sPiBtX2V4cGVyaW1lbnRhbEZlYXR1cmVzOworICAgIFRlc3RGZWF0dXJlcyBtX2dsb2JhbEZl
YXR1cmVzOworCisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29sPiBtX2lu
dGVybmFsRmVhdHVyZXM7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29s
PiBtX2V4cGVyaW1lbnRhbEZlYXR1cmVzOwogCiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1faW5qZWN0ZWRCdW5kbGVQYXRoOwogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtX3Rl
c3RQbHVnaW5EaXJlY3Rvcnk7CkBAIC01NDgsNyArNTQ5LDcgQEAgcHJpdmF0ZToKIAogICAgIHN0
ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVdlYlZpZXc+IG1fbWFpbldlYlZpZXc7CiAgICAgV0tSZXRh
aW5QdHI8V0tDb250ZXh0UmVmPiBtX2NvbnRleHQ7Ci0gICAgT3B0aW9uYWw8VGVzdE9wdGlvbnM6
OkNvbnRleHRPcHRpb25zPiBtX2NvbnRleHRPcHRpb25zOworICAgIE9wdGlvbmFsPENvbnRleHRP
cHRpb25zPiBtX2NvbnRleHRPcHRpb25zOwogICAgIFdLUmV0YWluUHRyPFdLUGFnZUdyb3VwUmVm
PiBtX3BhZ2VHcm91cDsKICAgICBXS1JldGFpblB0cjxXS1VzZXJDb250ZW50Q29udHJvbGxlclJl
Zj4gbV91c2VyQ29udGVudENvbnRyb2xsZXI7CiAKQEAgLTYwNSwxNCArNjA2LDEwIEBAIHByaXZh
dGU6CiAKICAgICBib29sIG1fZm9yY2VDb21wbGV4VGV4dCB7IGZhbHNlIH07CiAgICAgYm9vbCBt
X3Nob3VsZFVzZUFjY2VsZXJhdGVkRHJhd2luZyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3Nob3Vs
ZFVzZVJlbW90ZUxheWVyVHJlZSB7IGZhbHNlIH07Ci0KKyAgICAKICAgICBib29sIG1fc2hvdWxk
TG9nQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSB7IGZhbHNlIH07CiAgICAg
Ym9vbCBtX3Nob3VsZExvZ0Rvd25sb2FkQ2FsbGJhY2tzIHsgZmFsc2UgfTsKICAgICBib29sIG1f
c2hvdWxkTG9nSGlzdG9yeUNsaWVudENhbGxiYWNrcyB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3No
b3VsZFNob3dXZWJWaWV3IHsgZmFsc2UgfTsKLSAgICAKLSAgICBib29sIG1fc2hvdWxkU2hvd1Rv
dWNoZXMgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9jaGVja0ZvcldvcmxkTGVha3MgeyBmYWxzZSB9
OwogCiAgICAgYm9vbCBtX2FsbG93QW55SFRUUFNDZXJ0aWZpY2F0ZUZvckFsbG93ZWRIb3N0cyB7
IGZhbHNlIH07CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNw
cAkocmV2aXNpb24gMjY3ODg1KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2Nh
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSwxMSArMTMxLDExIEBAIGJvb2wgVGVzdElu
dm9jYXRpb246OnNob3VsZExvZ0hpc3RvcnlDbGkKIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rp
b25hcnlSZWY+IFRlc3RJbnZvY2F0aW9uOjpjcmVhdGVUZXN0U2V0dGluZ3NEaWN0aW9uYXJ5KCkK
IHsKICAgICBhdXRvIGJlZ2luVGVzdE1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS011dGFibGVEaWN0
aW9uYXJ5Q3JlYXRlKCkpOwotICAgIHNldFZhbHVlKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAiVXNl
RmxleGlibGVWaWV3cG9ydCIsIG9wdGlvbnMoKS51c2VGbGV4aWJsZVZpZXdwb3J0KTsKKyAgICBz
ZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgIlVzZUZsZXhpYmxlVmlld3BvcnQiLCBvcHRp
b25zKCkudXNlRmxleGlibGVWaWV3cG9ydCgpKTsKICAgICBzZXRWYWx1ZShiZWdpblRlc3RNZXNz
YWdlQm9keSwgIkR1bXBQaXhlbHMiLCBtX2R1bXBQaXhlbHMpOwogICAgIHNldFZhbHVlKGJlZ2lu
VGVzdE1lc3NhZ2VCb2R5LCAiVGltZW91dCIsIHN0YXRpY19jYXN0PHVpbnQ2NF90PihtX3RpbWVv
dXQubWlsbGlzZWNvbmRzKCkpKTsKICAgICBzZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwg
IkR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIsIG1fZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKTsK
LSAgICBzZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgImFkZGl0aW9uYWxTdXBwb3J0ZWRJ
bWFnZVR5cGVzIiwgb3B0aW9ucygpLmFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzLmNfc3Ry
KCkpOworICAgIHNldFZhbHVlKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAiYWRkaXRpb25hbFN1cHBv
cnRlZEltYWdlVHlwZXMiLCBvcHRpb25zKCkuYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMo
KS5jX3N0cigpKTsKICAgICByZXR1cm4gYmVnaW5UZXN0TWVzc2FnZUJvZHk7CiB9CiAKSW5kZXg6
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuY3BwCShyZXZpc2lvbiAyNjc4ODUpCisr
KyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RPcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNDggKzI2LDI1NCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RP
cHRpb25zLmgiCiAKKyNpbmNsdWRlICJTdHJpbmdGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJUZXN0
Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlN0ZEZpbGVzeXN0ZW0uaCIKKyNpbmNsdWRlIDxmc3Ry
ZWFtPgorI2luY2x1ZGUgPGlvc3RyZWFtPgogI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAorI2RlZmlu
ZSBEVU1QX0ZFQVRVUkVTIDAKKwogbmFtZXNwYWNlIFdUUiB7CiAKLXN0YXRpYyBib29sIHBhdGhD
b250YWlucyhjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMLCBjb25zdCBjaGFyKiBzdWJzdHJp
bmcpCisjaWYgRFVNUF9GRUFUVVJFUworc3RhdGljIHZvaWQgZHVtcEZlYXR1cmVzKGNvbnN0IFRl
c3RGZWF0dXJlcyYgZmVhdHVyZXMpCiB7Ci0gICAgU3RyaW5nIHBhdGgocGF0aE9yVVJMLmNfc3Ry
KCkpOwotICAgIHJldHVybiBwYXRoLmNvbnRhaW5zKHN1YnN0cmluZyk7IC8vIENhc2UtaW5zZW5z
aXRpdmUuCisgICAgaWYgKGZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzLmVtcHR5KCkgJiYg
ZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzLmVtcHR5KCkgJiYgZmVhdHVyZXMuYm9vbEZl
YXR1cmVzLmVtcHR5KCkgJiYgZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMuZW1wdHkoKSAmJiBmZWF0
dXJlcy5zdHJpbmdGZWF0dXJlcy5lbXB0eSgpICYmIGZlYXR1cmVzLnN0cmluZ1ZlY3RvckZlYXR1
cmVzLmVtcHR5KCkpIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICIgIFtFTVBUWV1cbiI7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCFmZWF0dXJlcy5leHBlcmltZW50YWxG
ZWF0dXJlcy5lbXB0eSgpKSB7CisgICAgICAgIHN0ZDo6Y2VyciA8PCAiICBFeHBlcmltZW50YWwg
RmVhdHVyZXM6IFxuIjsKKyAgICAgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGZlYXR1cmVz
LmV4cGVyaW1lbnRhbEZlYXR1cmVzKQorICAgICAgICAgICAgc3RkOjpjZXJyIDw8ICIgICAgIiA8
PCBrZXkgPDwgIjogIiA8PCB2YWx1ZSA8PCAnXG4nOworICAgIH0KKyAgICBpZiAoIWZlYXR1cmVz
LmludGVybmFsRGVidWdGZWF0dXJlcy5lbXB0eSgpKSB7CisgICAgICAgIHN0ZDo6Y2VyciA8PCAi
ICBJbnRlcm5hbCBGZWF0dXJlczogXG4iOworICAgICAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVd
IDogZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKQorICAgICAgICAgICAgc3RkOjpjZXJy
IDw8ICIgICAgIiA8PCBrZXkgPDwgIjogIiA8PCB2YWx1ZSA8PCAnXG4nOworICAgIH0KKyAgICBp
ZiAoIWZlYXR1cmVzLmJvb2xGZWF0dXJlcy5lbXB0eSgpKSB7CisgICAgICAgIHN0ZDo6Y2VyciA8
PCAiICBCb29sIEZlYXR1cmVzOiBcbiI7CisgICAgICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0g
OiBmZWF0dXJlcy5ib29sRmVhdHVyZXMpCisgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgICAi
IDw8IGtleSA8PCAiOiAiIDw8IHZhbHVlIDw8ICdcbic7CisgICAgfQorICAgIGlmICghZmVhdHVy
ZXMuZG91YmxlRmVhdHVyZXMuZW1wdHkoKSkgeworICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgRG91
YmxlIEZlYXR1cmVzOiBcbiI7CisgICAgICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBmZWF0
dXJlcy5kb3VibGVGZWF0dXJlcykKKyAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAgICIgPDwg
a2V5IDw8ICI6ICIgPDwgdmFsdWUgPDwgJ1xuJzsKKyAgICB9CisgICAgaWYgKCFmZWF0dXJlcy5z
dHJpbmdGZWF0dXJlcy5lbXB0eSgpKSB7CisgICAgICAgIHN0ZDo6Y2VyciA8PCAiICBTdHJpbmcg
RmVhdHVyZXM6IFxuIjsKKyAgICAgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGZlYXR1cmVz
LnN0cmluZ0ZlYXR1cmVzKQorICAgICAgICAgICAgc3RkOjpjZXJyIDw8ICIgICAgIiA8PCBrZXkg
PDwgIjogIiA8PCB2YWx1ZSA8PCAnXG4nOworICAgIH0KKyAgICBpZiAoIWZlYXR1cmVzLnN0cmlu
Z1ZlY3RvckZlYXR1cmVzLmVtcHR5KCkpIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICIgIFN0cmlu
ZyBWZWN0b3IgRmVhdHVyZXM6IFxuIjsKKyAgICAgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6
IGZlYXR1cmVzLnN0cmluZ1ZlY3RvckZlYXR1cmVzKQorICAgICAgICAgICAgc3RkOjpjZXJyIDw8
ICIgICAgIiA8PCBrZXkgPDwgIjogTnVtYmVyIG9mIHN0cmluZ3MgIiA8PCB2YWx1ZS5zaXplKCkg
PDwgJ1xuJzsKKyAgICB9CiB9CisjZW5kaWYKIAotc3RhdGljIGJvb2wgc2hvdWxkTWFrZVZpZXdw
b3J0RmxleGlibGUoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKK2VudW0gY2xhc3MgS2V5
VHlwZSB7CisgICAgQm9vbCwKKyAgICBEb3VibGUsCisgICAgU3RyaW5nLAorICAgIFN0cmluZ1Jl
bGF0aXZlUGF0aCwKKyAgICBTdHJpbmdVUkwsCisgICAgU3RyaW5nVmVjdG9yLAorICAgIFVua25v
d24KK307CisKK3N0YXRpYyBLZXlUeXBlIGtleVR5cGUoc3RkOjpzdHJpbmcga2V5KQogewotICAg
IHJldHVybiBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAidmlld3BvcnQvIikgJiYgIXBhdGhDb250
YWlucyhwYXRoT3JVUkwsICJ2aXN1YWwtdmlld3BvcnQvIik7CisgICAgc3RhdGljIHN0ZDo6dW5v
cmRlcmVkX21hcDxzdGQ6OnN0cmluZywgS2V5VHlwZT4ga2V5VHlwZU1hcCB7CisgICAgICAgIHsg
InVzZVRocmVhZGVkU2Nyb2xsaW5nIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VB
Y2NlbGVyYXRlZERyYXdpbmciLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInVzZVJlbW90
ZUxheWVyVHJlZSIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAic2hvdWxkU2hvd1dlYlZp
ZXciLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInVzZUZsZXhpYmxlVmlld3BvcnQiLCBL
ZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImlzU1ZHVGVzdCIsIEtleVR5cGU6OkJvb2wgfSwK
KyAgICAgICAgeyAidXNlRGF0YURldGVjdGlvbiIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAg
eyAidXNlTW9ja1Njcm9sbGJhcnMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgIm5lZWRz
U2l0ZVNwZWNpZmljUXVpcmtzIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJpZ25vcmVz
Vmlld3BvcnRTY2FsZUxpbWl0cyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAidXNlQ2hh
cmFjdGVyU2VsZWN0aW9uR3JhbnVsYXJpdHkiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsg
ImVuYWJsZUF0dGFjaG1lbnRFbGVtZW50IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJl
bmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAi
dXNlRXBoZW1lcmFsU2Vzc2lvbiIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxl
TWVudUl0ZW1FbGVtZW50IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVLZXln
ZW5FbGVtZW50IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVNb2Rlcm5NZWRp
YUNvbnRyb2xzIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVQb2ludGVyTG9j
ayIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlV2ViQXV0aGVudGljYXRpb24i
LCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9j
YWxBdXRoZW50aWNhdG9yIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVJbnNw
ZWN0b3JBZGRpdGlvbnMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInNob3VsZFNob3dU
b3VjaGVzIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJkdW1wSlNDb25zb2xlTG9nSW5T
dGRFcnIiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImFsbG93Q3Jvc3NPcmlnaW5TdWJy
ZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7
ICJkb21QYXN0ZUFsbG93ZWQiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUNv
bG9yRmlsdGVyIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJwdW5jaE91dFdoaXRlQmFj
a2dyb3VuZHNJbkRhcmtNb2RlIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJydW5TaW5n
bHkiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImNoZWNrRm9yV29ybGRMZWFrcyIsIEtl
eVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAic2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0IiwgS2V5
VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJzcGVsbENoZWNraW5nRG90cyIsIEtleVR5cGU6OkJv
b2wgfSwKKyAgICAgICAgeyAiZW5hYmxlU2VydmljZUNvbnRyb2xzIiwgS2V5VHlwZTo6Qm9vbCB9
LAorICAgICAgICB7ICJlZGl0YWJsZSIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAic2hv
dWxkSGFuZGxlUnVuT3BlblBhbmVsIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJzaG91
bGRQcmVzZW50UG9wb3ZlcnMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUFw
cE5hcCIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQmFja0ZvcndhcmRDYWNo
ZSIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiYWxsb3dzTGlua1ByZXZpZXciLCBLZXlU
eXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUNhcHR1cmVWaWRlb0luVUlQcm9jZXNzIiwg
S2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVDYXB0dXJlVmlkZW9JbkdQVVByb2Nl
c3MiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUNhcHR1cmVBdWRpb0luVUlQ
cm9jZXNzIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVDYXB0dXJlQXVkaW9J
bkdQVVByb2Nlc3MiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImFsbG93VG9wTmF2aWdh
dGlvblRvRGF0YVVSTHMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUluQXBw
QnJvd3NlclByaXZhY3kiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImlzQXBwQm91bmRX
ZWJWaWV3IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJpZ25vcmVTeW5jaHJvbm91c01l
c3NhZ2luZ1RpbWVvdXRzIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVQcm9j
ZXNzU3dhcE9uTmF2aWdhdGlvbiIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxl
UHJvY2Vzc1N3YXBPbldpbmRvd09wZW4iLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInVz
ZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgCisgICAg
ICAgIHsgImNvbnRlbnRJbnNldC50b3AiLCBLZXlUeXBlOjpEb3VibGUgfSwKKyAgICAgICAgeyAi
ZGV2aWNlU2NhbGVGYWN0b3IiLCBLZXlUeXBlOjpEb3VibGUgfSwKKworICAgICAgICB7ICJqc2NP
cHRpb25zIiwgS2V5VHlwZTo6U3RyaW5nIH0sCisgICAgICAgIHsgImFkZGl0aW9uYWxTdXBwb3J0
ZWRJbWFnZVR5cGVzIiwgS2V5VHlwZTo6U3RyaW5nIH0sCisgICAgICAgIHsgImNvbnRlbnRNb2Rl
IiwgS2V5VHlwZTo6U3RyaW5nIH0sCisgICAgICAgIHsgImFwcGxpY2F0aW9uQnVuZGxlSWRlbnRp
ZmllciIsIEtleVR5cGU6OlN0cmluZyB9LAorICAgICAgICB7ICJhcHBsaWNhdGlvbk1hbmlmZXN0
IiwgS2V5VHlwZTo6U3RyaW5nUmVsYXRpdmVQYXRoIH0sCisgICAgICAgIHsgInN0YW5kYWxvbmVX
ZWJBcHBsaWNhdGlvblVSTCIsIEtleVR5cGU6OlN0cmluZ1VSTCB9LAorCisgICAgICAgIHsgImxh
bmd1YWdlIiwgS2V5VHlwZTo6U3RyaW5nVmVjdG9yIH0sCisgICAgfTsKKyAgICAKKyAgICBhdXRv
IGl0ID0ga2V5VHlwZU1hcC5maW5kKGtleSk7CisgICAgaWYgKGl0ID09IGtleVR5cGVNYXAuZW5k
KCkpCisgICAgICAgIHJldHVybiBLZXlUeXBlOjpVbmtub3duOworICAgIHJldHVybiBpdC0+c2Vj
b25kOwogfQogCi1zdGF0aWMgYm9vbCBzaG91bGRVc2VGaXhlZExheW91dChjb25zdCBzdGQ6OnN0
cmluZyYgcGF0aE9yVVJMKQorc3RhdGljIGJvb2wgcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVl
KGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkKIHsKLSNpZiBFTkFCTEUoQ1NTX0RFVklDRV9BREFQ
VEFUSU9OKQotICAgIGlmIChwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAiZGV2aWNlLWFkYXB0LyIp
IHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJkZXZpY2UtYWRhcHRcXCIpKQorICAgIGlmICh2
YWx1ZSA9PSAidHJ1ZSIpCiAgICAgICAgIHJldHVybiB0cnVlOwotI2VuZGlmCisgICAgaWYgKHZh
bHVlID09ICJmYWxzZSIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIExPR19FUlJPUigi
Rm91bmQgdW5leHBlY3RlZCB2YWx1ZSAnJXMnIGZvciBib29sZWFuIG9wdGlvbi4gRXhwZWN0ZWQg
J3RydWUnIG9yICdmYWxzZScuIiwgdmFsdWUuY19zdHIoKSk7CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1zdGF0aWMgYm9vbCBpc1NWR1Rlc3RQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JV
UkwpCitzdGF0aWMgc3RkOjpzdHJpbmcgcGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1JlbGF0
aXZlUGF0aChjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRo
T3JVUkwpCit7CisgICAgYXV0byBiYXNlVVJMID0gYWRvcHRXSyhUZXN0Q29udHJvbGxlcjo6Y3Jl
YXRlVGVzdFVSTChwYXRoT3JVUkwuY19zdHIoKSkpOworICAgIGF1dG8gcmVsYXRpdmVVUkwgPSBh
ZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aEJhc2VVUkwoYmFzZVVSTC5nZXQoKSwgdmFsdWUuY19zdHIo
KSkpOworICAgIHJldHVybiB0b1NURChhZG9wdFdLKFdLVVJMQ29weVBhdGgocmVsYXRpdmVVUkwu
Z2V0KCkpKSk7Cit9CisKK3N0YXRpYyBzdGQ6OnN0cmluZyBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJW
YWx1ZUFzVVJMKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gcGF0aENv
bnRhaW5zKHBhdGhPclVSTCwgInN2Zy9XM0MtU1ZHLTEuMSIpIHx8IHBhdGhDb250YWlucyhwYXRo
T3JVUkwsICJzdmdcXFczQy1TVkctMS4xIik7CisgICAgcmV0dXJuIHRvU1REKGFkb3B0V0soV0tV
UkxDb3B5U3RyaW5nKFRlc3RDb250cm9sbGVyOjpjcmVhdGVUZXN0VVJMKHZhbHVlLmNfc3RyKCkp
KSkpOwogfQogCi1zdGF0aWMgYm9vbCBzaG91bGRVc2VFcGhlbWVyYWxTZXNzaW9uKGNvbnN0IHN0
ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCitzdGF0aWMgVGVzdEZlYXR1cmVzIHBhcnNlVGVzdEhlYWRl
cihzdGQ6OmZpbGVzeXN0ZW06OnBhdGggcGF0aCwgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVS
TCkKIHsKLSAgICByZXR1cm4gcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInczYy9JbmRleGVkREIt
cHJpdmF0ZS1icm93c2luZyIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJ3M2NcXEluZGV4
ZWREQi1wcml2YXRlLWJyb3dzaW5nIik7CisgICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVzOworICAg
IGlmICghc3RkOjpmaWxlc3lzdGVtOjpleGlzdHMocGF0aCkpCisgICAgICAgIHJldHVybiBmZWF0
dXJlczsKKworICAgIHN0ZDo6aWZzdHJlYW0gZmlsZShwYXRoKTsKKyAgICBpZiAoIWZpbGUuZ29v
ZCgpKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IG9wZW4gZmlsZSB0byBpbnNwZWN0
IHRlc3QgaGVhZGVycyBpbiAlcyIsIHBhdGguY19zdHIoKSk7CisgICAgICAgIHJldHVybiBmZWF0
dXJlczsKKyAgICB9CisKKyAgICBzdGQ6OnN0cmluZyBvcHRpb25zOworICAgIGdldGxpbmUoZmls
ZSwgb3B0aW9ucyk7CisgICAgc3RkOjpzdHJpbmcgYmVnaW5TdHJpbmcoIndlYmtpdC10ZXN0LXJ1
bm5lciBbICIpOworICAgIHN0ZDo6c3RyaW5nIGVuZFN0cmluZygiIF0iKTsKKyAgICBzaXplX3Qg
YmVnaW5Mb2NhdGlvbiA9IG9wdGlvbnMuZmluZChiZWdpblN0cmluZyk7CisgICAgaWYgKGJlZ2lu
TG9jYXRpb24gPT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAgICAgIHJldHVybiBmZWF0dXJlczsK
KyAgICBzaXplX3QgZW5kTG9jYXRpb24gPSBvcHRpb25zLmZpbmQoZW5kU3RyaW5nLCBiZWdpbkxv
Y2F0aW9uKTsKKyAgICBpZiAoZW5kTG9jYXRpb24gPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAg
ICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgZmluZCBlbmQgb2YgdGVzdCBoZWFkZXIgaW4gJXMi
LCBwYXRoLmNfc3RyKCkpOworICAgICAgICByZXR1cm4gZmVhdHVyZXM7CisgICAgfQorICAgIHN0
ZDo6c3RyaW5nIHBhaXJTdHJpbmcgPSBvcHRpb25zLnN1YnN0cihiZWdpbkxvY2F0aW9uICsgYmVn
aW5TdHJpbmcuc2l6ZSgpLCBlbmRMb2NhdGlvbiAtIChiZWdpbkxvY2F0aW9uICsgYmVnaW5TdHJp
bmcuc2l6ZSgpKSk7CisgICAgc2l6ZV90IHBhaXJTdGFydCA9IDA7CisgICAgd2hpbGUgKHBhaXJT
dGFydCA8IHBhaXJTdHJpbmcuc2l6ZSgpKSB7CisgICAgICAgIHNpemVfdCBwYWlyRW5kID0gcGFp
clN0cmluZy5maW5kKCIgIiwgcGFpclN0YXJ0KTsKKyAgICAgICAgaWYgKHBhaXJFbmQgPT0gc3Rk
OjpzdHJpbmc6Om5wb3MpCisgICAgICAgICAgICBwYWlyRW5kID0gcGFpclN0cmluZy5zaXplKCk7
CisgICAgICAgIHNpemVfdCBlcXVhbHNMb2NhdGlvbiA9IHBhaXJTdHJpbmcuZmluZCgiPSIsIHBh
aXJTdGFydCk7CisgICAgICAgIGlmIChlcXVhbHNMb2NhdGlvbiA9PSBzdGQ6OnN0cmluZzo6bnBv
cykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJNYWxmb3JtZWQgb3B0aW9uIGluIHRlc3QgaGVh
ZGVyIChjb3VsZCBub3QgZmluZCAnPScgY2hhcmFjdGVyKSBpbiAlcyIsIHBhdGguY19zdHIoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBhdXRvIGtleSA9IHBhaXJT
dHJpbmcuc3Vic3RyKHBhaXJTdGFydCwgZXF1YWxzTG9jYXRpb24gLSBwYWlyU3RhcnQpOworICAg
ICAgICBhdXRvIHZhbHVlID0gcGFpclN0cmluZy5zdWJzdHIoZXF1YWxzTG9jYXRpb24gKyAxLCBw
YWlyRW5kIC0gKGVxdWFsc0xvY2F0aW9uICsgMSkpOworCisgICAgICAgIGlmIChrZXkucmZpbmQo
ImV4cGVyaW1lbnRhbDoiKSA9PSAwKSB7CisgICAgICAgICAgICBrZXkgPSBrZXkuc3Vic3RyKDEz
KTsKKyAgICAgICAgICAgIGZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzLmluc2VydCh7IGtl
eSwgcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKSB9KTsKKyAgICAgICAgfSBlbHNl
IGlmIChrZXkucmZpbmQoImludGVybmFsOiIpID09IDApIHsKKyAgICAgICAgICAgIGtleSA9IGtl
eS5zdWJzdHIoOSk7CisgICAgICAgICAgICBmZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMu
aW5zZXJ0KHsga2V5LCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpIH0pOworICAg
ICAgICB9CisKKyAgICAgICAgc3dpdGNoIChrZXlUeXBlKGtleSkpIHsKKyAgICAgICAgY2FzZSBL
ZXlUeXBlOjpCb29sOgorICAgICAgICAgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7
IGtleSwgcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKSB9KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEtleVR5cGU6OkRvdWJsZToKKyAgICAgICAgICAgIGZlYXR1
cmVzLmRvdWJsZUZlYXR1cmVzLmluc2VydCh7IGtleSwgc3RkOjpzdG9kKHZhbHVlKSB9KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEtleVR5cGU6OlN0cmluZzoKKyAgICAgICAg
ICAgIGZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVzLmluc2VydCh7IGtleSwgdmFsdWUgfSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmdSZWxhdGl2ZVBhdGg6
CisgICAgICAgICAgICBmZWF0dXJlcy5zdHJpbmdGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHBhcnNl
U3RyaW5nVGVzdEhlYWRlclZhbHVlQXNSZWxhdGl2ZVBhdGgodmFsdWUsIHBhdGhPclVSTCkgfSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmdVUkw6Cisg
ICAgICAgICAgICBmZWF0dXJlcy5zdHJpbmdGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHBhcnNlU3Ry
aW5nVGVzdEhlYWRlclZhbHVlQXNVUkwodmFsdWUpIH0pOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nVmVjdG9yOgorICAgICAgICAgICAgZmVhdHVyZXMu
c3RyaW5nVmVjdG9yRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBzcGxpdCh2YWx1ZSwgJywnKSB9KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEtleVR5cGU6OlVua25vd246CisgICAg
ICAgICAgICBMT0dfRVJST1IoIlVua25vd24ga2V5LCAnJXMsIGluIHRlc3QgaGVhZGVyIGluICVz
Iiwga2V5LmNfc3RyKCksIHBhdGguY19zdHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIHBhaXJTdGFydCA9IHBhaXJFbmQgKyAxOworICAgIH0KKworICAgIHJl
dHVybiBmZWF0dXJlczsKK30KKworc3RhdGljIGJvb2wgcGF0aENvbnRhaW5zKGNvbnN0IHN0ZDo6
c3RyaW5nJiBwYXRoT3JVUkwsIGNvbnN0IGNoYXIqIHN1YnN0cmluZykKK3sKKyAgICBTdHJpbmcg
cGF0aChwYXRoT3JVUkwuY19zdHIoKSk7CisgICAgcmV0dXJuIHBhdGguY29udGFpbnMoc3Vic3Ry
aW5nKTsgLy8gQ2FzZS1pbnNlbnNpdGl2ZS4KIH0KIAotc3RhdGljIGZsb2F0IGRldmljZVNjYWxl
RmFjdG9yRm9yVGVzdChjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQorc3RhdGljIE9wdGlv
bmFsPGRvdWJsZT4gZGV2aWNlU2NhbGVGYWN0b3JGb3JUZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBw
YXRoT3JVUkwpCiB7CiAgICAgaWYgKHBhdGhDb250YWlucyhwYXRoT3JVUkwsICIvaGlkcGktM3gt
IikpCiAgICAgICAgIHJldHVybiAzOwogICAgIGlmIChwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAi
L2hpZHBpLSIpKQogICAgICAgICByZXR1cm4gMjsKLSAgICByZXR1cm4gMTsKKyAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogfQogCiBzdGF0aWMgYm9vbCBzaG91bGREdW1wSlNDb25zb2xlTG9nSW5T
dGRFcnIoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKQEAgLTgzLDE0ICsyODksNjYgQEAg
c3RhdGljIGJvb2wgc2hvdWxkRHVtcEpTQ29uc29sZUxvZ0luU3RkRQogICAgICAgICB8fCBwYXRo
Q29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvd2Vic29ja2V0cyIpIHx8IHBhdGhD
b250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My93ZWJzb2NrZXRzIik7CiB9CiAKLVRl
c3RPcHRpb25zOjpUZXN0T3B0aW9ucyhjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQotICAg
IDogdXNlRmxleGlibGVWaWV3cG9ydChzaG91bGRNYWtlVmlld3BvcnRGbGV4aWJsZShwYXRoT3JV
UkwpKQotICAgICwgdXNlRml4ZWRMYXlvdXQoc2hvdWxkVXNlRml4ZWRMYXlvdXQocGF0aE9yVVJM
KSkKLSAgICAsIGlzU1ZHVGVzdChpc1NWR1Rlc3RQYXRoKHBhdGhPclVSTCkpCi0gICAgLCB1c2VF
cGhlbWVyYWxTZXNzaW9uKHNob3VsZFVzZUVwaGVtZXJhbFNlc3Npb24ocGF0aE9yVVJMKSkKLSAg
ICAsIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihzaG91bGREdW1wSlNDb25zb2xlTG9nSW5TdGRF
cnIocGF0aE9yVVJMKSkKLSAgICAsIGRldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9y
Rm9yVGVzdChwYXRoT3JVUkwpKQorVGVzdEZlYXR1cmVzIGhhcmRjb2RlZEZlYXR1cmVzQmFzZWRP
blBhdGhGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJiBjb21tYW5kKQoreworICAgIFRlc3RGZWF0
dXJlcyBmZWF0dXJlczsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdHJ5IHRvIHJlcGxhY2Ug
dGhlIHJlc2V0IG9mIHRoZXNlIHdpdGggVGVzdE9wdGlvbnMudHh0IGJhc2VkIHNvbHV0aW9ucy4K
KworICAgIGlmIChzaG91bGREdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIoY29tbWFuZC5wYXRoT3JV
UkwpKQorICAgICAgICBmZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgImR1bXBKU0NvbnNv
bGVMb2dJblN0ZEVyciIsIHRydWUgfSk7CisgICAgaWYgKGF1dG8gZGV2aWNlU2NhbGVGYWN0b3Ig
PSBkZXZpY2VTY2FsZUZhY3RvckZvclRlc3QoY29tbWFuZC5wYXRoT3JVUkwpOyBkZXZpY2VTY2Fs
ZUZhY3RvciAhPSBXVEY6Om51bGxvcHQpCisgICAgICAgIGZlYXR1cmVzLmRvdWJsZUZlYXR1cmVz
Lmluc2VydCh7ICJkZXZpY2VTY2FsZUZhY3RvciIsIGRldmljZVNjYWxlRmFjdG9yLnZhbHVlKCkg
fSk7CisKKyAgICByZXR1cm4gZmVhdHVyZXM7Cit9CisKK3ZvaWQgbWVyZ2UoVGVzdEZlYXR1cmVz
JiBiYXNlLCBUZXN0RmVhdHVyZXMgYWRkaXRpb25hbCkKK3sKKyAgICBhZGRpdGlvbmFsLmV4cGVy
aW1lbnRhbEZlYXR1cmVzLm1lcmdlKGJhc2UuZXhwZXJpbWVudGFsRmVhdHVyZXMpOworICAgIGFk
ZGl0aW9uYWwuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzLm1lcmdlKGJhc2UuaW50ZXJuYWxEZWJ1Z0Zl
YXR1cmVzKTsKKyAgICBhZGRpdGlvbmFsLmJvb2xGZWF0dXJlcy5tZXJnZShiYXNlLmJvb2xGZWF0
dXJlcyk7CisgICAgYWRkaXRpb25hbC5kb3VibGVGZWF0dXJlcy5tZXJnZShiYXNlLmRvdWJsZUZl
YXR1cmVzKTsKKyAgICBhZGRpdGlvbmFsLnN0cmluZ0ZlYXR1cmVzLm1lcmdlKGJhc2Uuc3RyaW5n
RmVhdHVyZXMpOworICAgIGFkZGl0aW9uYWwuc3RyaW5nVmVjdG9yRmVhdHVyZXMubWVyZ2UoYmFz
ZS5zdHJpbmdWZWN0b3JGZWF0dXJlcyk7CisgICAgYmFzZSA9IGFkZGl0aW9uYWw7Cit9CisKK1Rl
c3RGZWF0dXJlcyBmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdE9wdGlvbnNGaWxlc0ZvclRlc3QoY29u
c3QgVGVzdENvbW1hbmQmIGNvbW1hbmQpCit7CisgICAgc3RkOjpmaWxlc3lzdGVtOjpwYXRoIHBh
dGggPSBjb21tYW5kLmFic29sdXRlUGF0aDsKKworICAgIC8vIEdhdGhlciBkaXJlY3RvcmllcyB0
aGF0IG1heSBjb250YWluIFRlc3RIZWFkZXJzIGZpbGVzLgorICAgIHN0ZDo6dmVjdG9yPHN0ZDo6
ZmlsZXN5c3RlbTo6cGF0aD4gZGlyZWN0b3JpZXNUb0NoZWNrOworICAgIGRvIHsKKyAgICAgICAg
cGF0aCA9IHBhdGgucGFyZW50X3BhdGgoKTsKKyAgICAgICAgZGlyZWN0b3JpZXNUb0NoZWNrLnB1
c2hfYmFjayhwYXRoKTsKKyAgICB9IHdoaWxlIChwYXRoLmZpbGVuYW1lKCkgIT0gIkxheW91dFRl
c3RzIik7CisKKyAgICAvLyBJdGVyYXRlIHRoZSBkaXJlY3RvcmllcyB0aGF0IG1heSBjb250YWlu
ICdUZXN0T3B0aW9ucy50eHQnIGZpbGVzIGZyb20gbGVhc3QgdG8gbW9zdAorICAgIC8vIHNwZWNp
ZmljLCBhbmQgbWVyZ2UgaW4gYW55IGZlYXR1cmVzIGZvdW5kLgorICAgIFRlc3RGZWF0dXJlcyBm
ZWF0dXJlczsKKyAgICBmb3IgKGF1dG8gZGlyZWN0b3J5VG9DaGVjayA6IFdURjo6bWFrZVJldmVy
c2VkUmFuZ2UoZGlyZWN0b3JpZXNUb0NoZWNrKSkgeworICAgICAgICBhdXRvIHRlc3RIZWFkZXJG
aWxlID0gZGlyZWN0b3J5VG9DaGVjayAvICJUZXN0T3B0aW9ucy50eHQiOworICAgICAgICBhdXRv
IHRlc3RPcHRpb25zRmVhdHVyZXMgPSBwYXJzZVRlc3RIZWFkZXIodGVzdEhlYWRlckZpbGUsIGNv
bW1hbmQucGF0aE9yVVJMKTsKKyAgICAgICAgbWVyZ2UoZmVhdHVyZXMsIHRlc3RPcHRpb25zRmVh
dHVyZXMpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmVhdHVyZXM7Cit9CisKK1Rlc3RGZWF0
dXJlcyBmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3QoY29uc3QgVGVzdENvbW1h
bmQmIGNvbW1hbmQpCiB7CisgICAgcmV0dXJuIHBhcnNlVGVzdEhlYWRlcihjb21tYW5kLmFic29s
dXRlUGF0aCwgY29tbWFuZC5wYXRoT3JVUkwpOworfQorCitUZXN0T3B0aW9uczo6VGVzdE9wdGlv
bnMoVGVzdEZlYXR1cmVzIGZlYXR1cmVzKQorICAgIDogbV9mZWF0dXJlcyB7IGZlYXR1cmVzIH0K
K3sKKyNpZiBEVU1QX0ZFQVRVUkVTCisgICAgc3RkOjpjZXJyIDw8ICJEVU1QSU5HIEZFQVRVUkVT
XG4iOworICAgIGR1bXBGZWF0dXJlcyhtX2ZlYXR1cmVzKTsKKyNlbmRpZgogfQogCiB9CkluZGV4
OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RPcHRpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5oCShyZXZpc2lvbiAyNjc4ODUpCisrKyBU
b29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RPcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDE2NSArMjUsMTc2IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFz
aC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPG9wdGlvbmFs
PgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorI2luY2x1ZGUg
PHZlY3Rvcj4KIAogbmFtZXNwYWNlIFdUUiB7CiAKLXN0cnVjdCBUZXN0T3B0aW9ucyB7Ci0gICAg
c3RydWN0IENvbnRleHRPcHRpb25zIHsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gb3ZlcnJpZGVM
YW5ndWFnZXM7Ci0gICAgICAgIGJvb2wgaWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0
cyB7IGZhbHNlIH07Ci0gICAgICAgIGJvb2wgZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24g
eyB0cnVlIH07Ci0gICAgICAgIGJvb2wgZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW4geyBm
YWxzZSB9OwotICAgICAgICBib29sIHVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQgeyBmYWxz
ZSB9OwotCi0gICAgICAgIGJvb2wgaGFzU2FtZUluaXRpYWxpemF0aW9uT3B0aW9ucyhjb25zdCBD
b250ZXh0T3B0aW9ucyYgb3B0aW9ucykgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KGlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMgIT0gb3B0aW9ucy5pZ25vcmVTeW5j
aHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzCi0gICAgICAgICAgICAgICAgfHwgb3ZlcnJpZGVMYW5n
dWFnZXMgIT0gb3B0aW9ucy5vdmVycmlkZUxhbmd1YWdlcwotICAgICAgICAgICAgICAgIHx8IGVu
YWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uICE9IG9wdGlvbnMuZW5hYmxlUHJvY2Vzc1N3YXBP
bk5hdmlnYXRpb24KLSAgICAgICAgICAgICAgICB8fCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93
T3BlbiAhPSBvcHRpb25zLmVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuCi0gICAgICAgICAg
ICAgICAgfHwgdXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dCAhPSBvcHRpb25zLnVzZVNlcnZp
Y2VXb3JrZXJTaG9ydFRpbWVvdXQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIHNob3VsZEVu
YWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uIHx8IGVuYWJsZVByb2Nlc3NT
d2FwT25XaW5kb3dPcGVuOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGJvb2wgdXNlVGhyZWFk
ZWRTY3JvbGxpbmcgeyBmYWxzZSB9OwotICAgIGJvb2wgdXNlQWNjZWxlcmF0ZWREcmF3aW5nIHsg
ZmFsc2UgfTsKLSAgICBib29sIHVzZVJlbW90ZUxheWVyVHJlZSB7IGZhbHNlIH07Ci0gICAgYm9v
bCBzaG91bGRTaG93V2ViVmlldyB7IGZhbHNlIH07Ci0gICAgYm9vbCB1c2VGbGV4aWJsZVZpZXdw
b3J0IHsgZmFsc2UgfTsKLSAgICBib29sIHVzZUZpeGVkTGF5b3V0IHsgZmFsc2UgfTsKLSAgICBi
b29sIGlzU1ZHVGVzdCB7IGZhbHNlIH07Ci0gICAgYm9vbCB1c2VEYXRhRGV0ZWN0aW9uIHsgZmFs
c2UgfTsKLSAgICBib29sIHVzZU1vY2tTY3JvbGxiYXJzIHsgdHJ1ZSB9OwotICAgIGJvb2wgbmVl
ZHNTaXRlU3BlY2lmaWNRdWlya3MgeyBmYWxzZSB9OwotICAgIGJvb2wgaWdub3Jlc1ZpZXdwb3J0
U2NhbGVMaW1pdHMgeyBmYWxzZSB9OwotICAgIGJvb2wgdXNlQ2hhcmFjdGVyU2VsZWN0aW9uR3Jh
bnVsYXJpdHkgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlQXR0YWNobWVudEVsZW1lbnQgeyBm
YWxzZSB9OwotICAgIGJvb2wgZW5hYmxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgeyBmYWxzZSB9Owot
ICAgIGJvb2wgdXNlRXBoZW1lcmFsU2Vzc2lvbiB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVN
ZW51SXRlbUVsZW1lbnQgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlS2V5Z2VuRWxlbWVudCB7
IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzIHsgdHJ1ZSB9Owot
ICAgIGJvb2wgZW5hYmxlUG9pbnRlckxvY2sgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlV2Vi
QXV0aGVudGljYXRpb24geyB0cnVlIH07Ci0gICAgYm9vbCBlbmFibGVXZWJBdXRoZW50aWNhdGlv
bkxvY2FsQXV0aGVudGljYXRvciB7IHRydWUgfTsKLSAgICBib29sIGVuYWJsZUluc3BlY3RvckFk
ZGl0aW9ucyB7IGZhbHNlIH07Ci0gICAgYm9vbCBzaG91bGRTaG93VG91Y2hlcyB7IGZhbHNlIH07
Ci0gICAgYm9vbCBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgeyBmYWxzZSB9OwotICAgIGJvb2wg
YWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMgeyBmYWxzZSB9
OwotICAgIGJvb2wgZG9tUGFzdGVBbGxvd2VkIHsgdHJ1ZSB9OwotICAgIGJvb2wgZW5hYmxlQ29s
b3JGaWx0ZXIgeyBmYWxzZSB9OwotICAgIGJvb2wgcHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5E
YXJrTW9kZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBydW5TaW5nbHkgeyBmYWxzZSB9OwotICAgIGJv
b2wgY2hlY2tGb3JXb3JsZExlYWtzIHsgZmFsc2UgfTsKLSAgICBib29sIHNob3VsZElnbm9yZU1l
dGFWaWV3cG9ydCB7IGZhbHNlIH07Ci0gICAgYm9vbCBzaG91bGRTaG93U3BlbGxDaGVja2luZ0Rv
dHMgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlU2VydmljZUNvbnRyb2xzIHsgZmFsc2UgfTsK
LSAgICBib29sIGVkaXRhYmxlIHsgZmFsc2UgfTsKLSAgICBib29sIHNob3VsZEhhbmRsZVJ1bk9w
ZW5QYW5lbCB7IHRydWUgfTsKLSAgICBib29sIHNob3VsZFByZXNlbnRQb3BvdmVycyB7IHRydWUg
fTsKLSAgICBib29sIGVuYWJsZUFwcE5hcCB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVCYWNr
Rm9yd2FyZENhY2hlIHsgZmFsc2UgfTsKLSAgICBib29sIGFsbG93c0xpbmtQcmV2aWV3IHsgdHJ1
ZSB9OwotICAgIGJvb2wgZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MgeyBmYWxzZSB9Owot
ICAgIGJvb2wgZW5hYmxlQ2FwdHVyZVZpZGVvSW5HUFVQcm9jZXNzIHsgZmFsc2UgfTsKLSAgICBi
b29sIGVuYWJsZUNhcHR1cmVBdWRpb0luVUlQcm9jZXNzIHsgZmFsc2UgfTsKLSAgICBib29sIGVu
YWJsZUNhcHR1cmVBdWRpb0luR1BVUHJvY2VzcyB7IGZhbHNlIH07Ci0gICAgYm9vbCBhbGxvd1Rv
cE5hdmlnYXRpb25Ub0RhdGFVUkxzIHsgdHJ1ZSB9OwotICAgIGJvb2wgZW5hYmxlSW5BcHBCcm93
c2VyUHJpdmFjeSB7IGZhbHNlIH07Ci0gICAgYm9vbCBpc0FwcEJvdW5kV2ViVmlldyB7IGZhbHNl
IH07Ci0KLSAgICBkb3VibGUgY29udGVudEluc2V0VG9wIHsgMCB9OwotCi0gICAgZmxvYXQgZGV2
aWNlU2NhbGVGYWN0b3IgeyAxIH07Ci0gICAgc3RkOjpzdHJpbmcgYXBwbGljYXRpb25NYW5pZmVz
dDsKLSAgICBzdGQ6OnN0cmluZyBqc2NPcHRpb25zOwotICAgIHN0ZDo6c3RyaW5nIGFkZGl0aW9u
YWxTdXBwb3J0ZWRJbWFnZVR5cGVzOwotICAgIHN0ZDo6c3RyaW5nIHN0YW5kYWxvbmVXZWJBcHBs
aWNhdGlvblVSTDsKLSAgICBIYXNoTWFwPFN0cmluZywgYm9vbD4gZXhwZXJpbWVudGFsRmVhdHVy
ZXM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIGJvb2w+IGludGVybmFsRGVidWdGZWF0dXJlczsKLSAg
ICBTdHJpbmcgY29udGVudE1vZGU7Ci0gICAgU3RyaW5nIGFwcGxpY2F0aW9uQnVuZGxlSWRlbnRp
ZmllcjsKLSAgICAKLSAgICBDb250ZXh0T3B0aW9ucyBjb250ZXh0T3B0aW9uczsKLQotICAgIFRl
c3RPcHRpb25zKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpOwotCi0gICAgLy8gQWRkIGhl
cmUgb3B0aW9ucyB0aGF0IGNhbiBvbmx5IGJlIHNldCB1cG9uIFBsYXRmb3JtV2ViVmlldwotICAg
IC8vIGluaXRpYWxpemF0aW9uIGFuZCBtYWtlIHN1cmUgaXQncyB1cCB0byBkYXRlIHdoZW4gYWRk
aW5nIG5ldwotICAgIC8vIG9wdGlvbnMgdG8gdGhpcyBzdHJ1Y3QuIE90aGVyd2lzZSwgdGVzdHMg
dXNpbmcgdGhvc2Ugb3B0aW9ucwotICAgIC8vIG1pZ2h0IGZhaWwgaWYgV1RSIGlzIHJldXNpbmcg
YW4gZXhpc3RpbmcgUGxhdGZvcm1XZWJWaWV3LgotICAgIGJvb2wgaGFzU2FtZUluaXRpYWxpemF0
aW9uT3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykgY29uc3QKK3N0cnVjdCBUZXN0
Q29tbWFuZDsKKworc3RydWN0IFRlc3RGZWF0dXJlcyB7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFw
PHN0ZDo6c3RyaW5nLCBib29sPiBleHBlcmltZW50YWxGZWF0dXJlczsKKyAgICBzdGQ6OnVub3Jk
ZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+IGludGVybmFsRGVidWdGZWF0dXJlczsKKyAgICBz
dGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+IGJvb2xGZWF0dXJlczsKKyAgICBz
dGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGRvdWJsZT4gZG91YmxlRmVhdHVyZXM7Cisg
ICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4gc3RyaW5nRmVh
dHVyZXM7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3Rvcjxz
dGQ6OnN0cmluZz4+IHN0cmluZ1ZlY3RvckZlYXR1cmVzOworfTsKKwordm9pZCBtZXJnZShUZXN0
RmVhdHVyZXMmIGJhc2UsIFRlc3RGZWF0dXJlcyBhZGRpdGlvbmFsKTsKKworVGVzdEZlYXR1cmVz
IGhhcmRjb2RlZEZlYXR1cmVzQmFzZWRPblBhdGhGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJik7
CitUZXN0RmVhdHVyZXMgZmVhdHVyZURlZmF1bHRzRnJvbVRlc3RPcHRpb25zRmlsZXNGb3JUZXN0
KGNvbnN0IFRlc3RDb21tYW5kJik7CitUZXN0RmVhdHVyZXMgZmVhdHVyZURlZmF1bHRzRnJvbVRl
c3RIZWFkZXJGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJik7CisKK3N0cnVjdCBDb250ZXh0T3B0
aW9ucyB7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG92ZXJyaWRlTGFuZ3VhZ2VzOwor
ICAgIGJvb2wgaWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0czsKKyAgICBib29sIGVu
YWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uOworICAgIGJvb2wgZW5hYmxlUHJvY2Vzc1N3YXBP
bldpbmRvd09wZW47CisgICAgYm9vbCB1c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0OworCisg
ICAgYm9vbCBoYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25zKGNvbnN0IENvbnRleHRPcHRpb25z
JiBvcHRpb25zKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKHVzZVRocmVhZGVkU2Nyb2xsaW5n
ICE9IG9wdGlvbnMudXNlVGhyZWFkZWRTY3JvbGxpbmcKLSAgICAgICAgICAgIHx8IHVzZUFjY2Vs
ZXJhdGVkRHJhd2luZyAhPSBvcHRpb25zLnVzZUFjY2VsZXJhdGVkRHJhd2luZwotICAgICAgICAg
ICAgfHwgdXNlTW9ja1Njcm9sbGJhcnMgIT0gb3B0aW9ucy51c2VNb2NrU2Nyb2xsYmFycwotICAg
ICAgICAgICAgfHwgbmVlZHNTaXRlU3BlY2lmaWNRdWlya3MgIT0gb3B0aW9ucy5uZWVkc1NpdGVT
cGVjaWZpY1F1aXJrcwotICAgICAgICAgICAgfHwgdXNlQ2hhcmFjdGVyU2VsZWN0aW9uR3JhbnVs
YXJpdHkgIT0gb3B0aW9ucy51c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0eQotICAgICAg
ICAgICAgfHwgZW5hYmxlQXR0YWNobWVudEVsZW1lbnQgIT0gb3B0aW9ucy5lbmFibGVBdHRhY2ht
ZW50RWxlbWVudAotICAgICAgICAgICAgfHwgZW5hYmxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgIT0g
b3B0aW9ucy5lbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlcgotICAgICAgICAgICAgfHwgdXNlRXBo
ZW1lcmFsU2Vzc2lvbiAhPSBvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24KLSAgICAgICAgICAg
IHx8IGVuYWJsZU1lbnVJdGVtRWxlbWVudCAhPSBvcHRpb25zLmVuYWJsZU1lbnVJdGVtRWxlbWVu
dAotICAgICAgICAgICAgfHwgZW5hYmxlS2V5Z2VuRWxlbWVudCAhPSBvcHRpb25zLmVuYWJsZUtl
eWdlbkVsZW1lbnQKLSAgICAgICAgICAgIHx8IGVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMgIT0g
b3B0aW9ucy5lbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzCi0gICAgICAgICAgICB8fCBlbmFibGVQ
b2ludGVyTG9jayAhPSBvcHRpb25zLmVuYWJsZVBvaW50ZXJMb2NrCi0gICAgICAgICAgICB8fCBl
bmFibGVXZWJBdXRoZW50aWNhdGlvbiAhPSBvcHRpb25zLmVuYWJsZVdlYkF1dGhlbnRpY2F0aW9u
Ci0gICAgICAgICAgICB8fCBlbmFibGVXZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0aGVudGljYXRv
ciAhPSBvcHRpb25zLmVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yCi0g
ICAgICAgICAgICB8fCBlbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMgIT0gb3B0aW9ucy5lbmFibGVJ
bnNwZWN0b3JBZGRpdGlvbnMKLSAgICAgICAgICAgIHx8IGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVy
ciAhPSBvcHRpb25zLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycgotICAgICAgICAgICAgfHwgYXBw
bGljYXRpb25NYW5pZmVzdCAhPSBvcHRpb25zLmFwcGxpY2F0aW9uTWFuaWZlc3QKLSAgICAgICAg
ICAgIHx8IGFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzICE9
IG9wdGlvbnMuYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMK
LSAgICAgICAgICAgIHx8IGRvbVBhc3RlQWxsb3dlZCAhPSBvcHRpb25zLmRvbVBhc3RlQWxsb3dl
ZAotICAgICAgICAgICAgfHwgZW5hYmxlQ29sb3JGaWx0ZXIgIT0gb3B0aW9ucy5lbmFibGVDb2xv
ckZpbHRlcgotICAgICAgICAgICAgfHwgcHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9k
ZSAhPSBvcHRpb25zLnB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUKLSAgICAgICAg
ICAgIHx8IGpzY09wdGlvbnMgIT0gb3B0aW9ucy5qc2NPcHRpb25zCi0gICAgICAgICAgICB8fCBh
ZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyAhPSBvcHRpb25zLmFkZGl0aW9uYWxTdXBwb3J0
ZWRJbWFnZVR5cGVzCi0gICAgICAgICAgICB8fCBydW5TaW5nbHkgIT0gb3B0aW9ucy5ydW5TaW5n
bHkKLSAgICAgICAgICAgIHx8IGNoZWNrRm9yV29ybGRMZWFrcyAhPSBvcHRpb25zLmNoZWNrRm9y
V29ybGRMZWFrcwotICAgICAgICAgICAgfHwgc2hvdWxkU2hvd1NwZWxsQ2hlY2tpbmdEb3RzICE9
IG9wdGlvbnMuc2hvdWxkU2hvd1NwZWxsQ2hlY2tpbmdEb3RzCi0gICAgICAgICAgICB8fCBlbmFi
bGVTZXJ2aWNlQ29udHJvbHMgIT0gb3B0aW9ucy5lbmFibGVTZXJ2aWNlQ29udHJvbHMKLSAgICAg
ICAgICAgIHx8IHNob3VsZElnbm9yZU1ldGFWaWV3cG9ydCAhPSBvcHRpb25zLnNob3VsZElnbm9y
ZU1ldGFWaWV3cG9ydAotICAgICAgICAgICAgfHwgZWRpdGFibGUgIT0gb3B0aW9ucy5lZGl0YWJs
ZQotICAgICAgICAgICAgfHwgc2hvdWxkSGFuZGxlUnVuT3BlblBhbmVsICE9IG9wdGlvbnMuc2hv
dWxkSGFuZGxlUnVuT3BlblBhbmVsCi0gICAgICAgICAgICB8fCBzaG91bGRQcmVzZW50UG9wb3Zl
cnMgIT0gb3B0aW9ucy5zaG91bGRQcmVzZW50UG9wb3ZlcnMKLSAgICAgICAgICAgIHx8IGNvbnRl
bnRJbnNldFRvcCAhPSBvcHRpb25zLmNvbnRlbnRJbnNldFRvcAotICAgICAgICAgICAgfHwgY29u
dGVudE1vZGUgIT0gb3B0aW9ucy5jb250ZW50TW9kZQotICAgICAgICAgICAgfHwgYXBwbGljYXRp
b25CdW5kbGVJZGVudGlmaWVyICE9IG9wdGlvbnMuYXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVy
Ci0gICAgICAgICAgICB8fCBlbmFibGVBcHBOYXAgIT0gb3B0aW9ucy5lbmFibGVBcHBOYXAKLSAg
ICAgICAgICAgIHx8IGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUgIT0gb3B0aW9ucy5lbmFibGVCYWNr
Rm9yd2FyZENhY2hlCi0gICAgICAgICAgICB8fCBhbGxvd3NMaW5rUHJldmlldyAhPSBvcHRpb25z
LmFsbG93c0xpbmtQcmV2aWV3Ci0gICAgICAgICAgICB8fCBlbmFibGVDYXB0dXJlVmlkZW9JblVJ
UHJvY2VzcyAhPSBvcHRpb25zLmVuYWJsZUNhcHR1cmVWaWRlb0luVUlQcm9jZXNzCi0gICAgICAg
ICAgICB8fCBlbmFibGVDYXB0dXJlVmlkZW9JbkdQVVByb2Nlc3MgIT0gb3B0aW9ucy5lbmFibGVD
YXB0dXJlVmlkZW9JbkdQVVByb2Nlc3MKLSAgICAgICAgICAgIHx8IGVuYWJsZUNhcHR1cmVBdWRp
b0luVUlQcm9jZXNzICE9IG9wdGlvbnMuZW5hYmxlQ2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3MKLSAg
ICAgICAgICAgIHx8IGVuYWJsZUNhcHR1cmVBdWRpb0luR1BVUHJvY2VzcyAhPSBvcHRpb25zLmVu
YWJsZUNhcHR1cmVBdWRpb0luR1BVUHJvY2VzcwotICAgICAgICAgICAgfHwgYWxsb3dUb3BOYXZp
Z2F0aW9uVG9EYXRhVVJMcyAhPSBvcHRpb25zLmFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMK
LSAgICAgICAgICAgIHx8IGVuYWJsZUluQXBwQnJvd3NlclByaXZhY3kgIT0gb3B0aW9ucy5lbmFi
bGVJbkFwcEJyb3dzZXJQcml2YWN5Ci0gICAgICAgICAgICB8fCBzdGFuZGFsb25lV2ViQXBwbGlj
YXRpb25VUkwgIT0gb3B0aW9ucy5zdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwKLSAgICAgICAg
ICAgIHx8IGlzQXBwQm91bmRXZWJWaWV3ICE9IG9wdGlvbnMuaXNBcHBCb3VuZFdlYlZpZXcpCisg
ICAgICAgIGlmIChpZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzICE9IG9wdGlvbnMu
aWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0cworICAgICAgICAgICAgfHwgb3ZlcnJp
ZGVMYW5ndWFnZXMgIT0gb3B0aW9ucy5vdmVycmlkZUxhbmd1YWdlcworICAgICAgICAgICAgfHwg
ZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24gIT0gb3B0aW9ucy5lbmFibGVQcm9jZXNzU3dh
cE9uTmF2aWdhdGlvbgorICAgICAgICAgICAgfHwgZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09w
ZW4gIT0gb3B0aW9ucy5lbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbgorICAgICAgICAgICAg
fHwgdXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dCAhPSBvcHRpb25zLnVzZVNlcnZpY2VXb3Jr
ZXJTaG9ydFRpbWVvdXQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KIAotICAgICAgICBpZiAoIWNvbnRleHRPcHRpb25zLmhhc1NhbWVJbml0
aWFsaXphdGlvbk9wdGlvbnMob3B0aW9ucy5jb250ZXh0T3B0aW9ucykpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgYm9vbCBzaG91bGRFbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlv
bigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmln
YXRpb24gfHwgZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW47CisgICAgfQorfTsKIAotICAg
ICAgICBpZiAoZXhwZXJpbWVudGFsRmVhdHVyZXMgIT0gb3B0aW9ucy5leHBlcmltZW50YWxGZWF0
dXJlcykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKK2NsYXNzIFRlc3RPcHRpb25zIHsKK3B1
YmxpYzoKKyAgICBleHBsaWNpdCBUZXN0T3B0aW9ucyhUZXN0RmVhdHVyZXMpOwogCi0gICAgICAg
IGlmIChpbnRlcm5hbERlYnVnRmVhdHVyZXMgIT0gb3B0aW9ucy5pbnRlcm5hbERlYnVnRmVhdHVy
ZXMpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQ29udGV4dE9wdGlvbnMgY29udGV4
dE9wdGlvbnMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIG92
ZXJyaWRlTGFuZ3VhZ2VzKCksCisgICAgICAgICAgICBpZ25vcmVTeW5jaHJvbm91c01lc3NhZ2lu
Z1RpbWVvdXRzKCksCisgICAgICAgICAgICBlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbigp
LAorICAgICAgICAgICAgZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW4oKSwKKyAgICAgICAg
ICAgIHVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQoKQorICAgICAgICB9OworICAgIH0KKwor
ICAgIGJvb2wgdXNlVGhyZWFkZWRTY3JvbGxpbmcoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVy
ZVZhbHVlKCJ1c2VUaHJlYWRlZFNjcm9sbGluZyIsIGZhbHNlKTsgfQorICAgIGJvb2wgdXNlQWNj
ZWxlcmF0ZWREcmF3aW5nKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgidXNlQWNj
ZWxlcmF0ZWREcmF3aW5nIiwgZmFsc2UpOyB9CisgICAgYm9vbCB1c2VSZW1vdGVMYXllclRyZWUo
KSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJ1c2VSZW1vdGVMYXllclRyZWUiLCBm
YWxzZSk7IH0KKyAgICBib29sIHNob3VsZFNob3dXZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gYm9v
bEZlYXR1cmVWYWx1ZSgic2hvdWxkU2hvd1dlYlZpZXciLCBmYWxzZSk7IH0KKyAgICBib29sIHVz
ZUZsZXhpYmxlVmlld3BvcnQoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJ1c2VG
bGV4aWJsZVZpZXdwb3J0IiwgZmFsc2UpOyB9CisgICAgYm9vbCBpc1NWR1Rlc3QoKSBjb25zdCB7
IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJpc1NWR1Rlc3QiLCBmYWxzZSk7IH0KKyAgICBib29s
IHVzZURhdGFEZXRlY3Rpb24oKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJ1c2VE
YXRhRGV0ZWN0aW9uIiwgZmFsc2UpOyB9CisgICAgYm9vbCB1c2VNb2NrU2Nyb2xsYmFycygpIGNv
bnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInVzZU1vY2tTY3JvbGxiYXJzIiwgdHJ1ZSk7
IH0KKyAgICBib29sIG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKCkgY29uc3QgeyByZXR1cm4gYm9v
bEZlYXR1cmVWYWx1ZSgibmVlZHNTaXRlU3BlY2lmaWNRdWlya3MiLCBmYWxzZSk7IH0KKyAgICBi
b29sIGlnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1
cmVWYWx1ZSgiaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMiLCBmYWxzZSk7IH0KKyAgICBib29s
IHVzZUNoYXJhY3RlclNlbGVjdGlvbkdyYW51bGFyaXR5KCkgY29uc3QgeyByZXR1cm4gYm9vbEZl
YXR1cmVWYWx1ZSgidXNlQ2hhcmFjdGVyU2VsZWN0aW9uR3JhbnVsYXJpdHkiLCBmYWxzZSk7IH0K
KyAgICBib29sIGVuYWJsZUF0dGFjaG1lbnRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gYm9vbEZl
YXR1cmVWYWx1ZSgiZW5hYmxlQXR0YWNobWVudEVsZW1lbnQiLCBmYWxzZSk7IH0KKyAgICBib29s
IGVuYWJsZUludGVyc2VjdGlvbk9ic2VydmVyKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVW
YWx1ZSgiZW5hYmxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCBmYWxzZSk7IH0KKyAgICBib29sIHVz
ZUVwaGVtZXJhbFNlc3Npb24oKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJ1c2VF
cGhlbWVyYWxTZXNzaW9uIiwgZmFsc2UpOyB9CisgICAgYm9vbCBlbmFibGVNZW51SXRlbUVsZW1l
bnQoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVNZW51SXRlbUVsZW1l
bnQiLCBmYWxzZSk7IH0KKyAgICBib29sIGVuYWJsZUtleWdlbkVsZW1lbnQoKSBjb25zdCB7IHJl
dHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVLZXlnZW5FbGVtZW50IiwgZmFsc2UpOyB9Cisg
ICAgYm9vbCBlbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZl
YXR1cmVWYWx1ZSgiZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyIsIHRydWUpOyB9CisgICAgYm9v
bCBlbmFibGVQb2ludGVyTG9jaygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVu
YWJsZVBvaW50ZXJMb2NrIiwgZmFsc2UpOyB9CisgICAgYm9vbCBlbmFibGVXZWJBdXRoZW50aWNh
dGlvbigpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZVdlYkF1dGhlbnRp
Y2F0aW9uIiwgdHJ1ZSk7IH0KKyAgICBib29sIGVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxB
dXRoZW50aWNhdG9yKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlV2Vi
QXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IiLCB0cnVlKTsgfQorICAgIGJvb2wgZW5h
YmxlSW5zcGVjdG9yQWRkaXRpb25zKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgi
ZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zIiwgZmFsc2UpOyB9CisgICAgYm9vbCBzaG91bGRTaG93
VG91Y2hlcygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInNob3VsZFNob3dUb3Vj
aGVzIiwgZmFsc2UpOyB9CisgICAgYm9vbCBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIoKSBjb25z
dCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiLCBm
YWxzZSk7IH0KKyAgICBib29sIGFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNy
ZWRlbnRpYWxzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiYWxsb3dDcm9zc09y
aWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMiLCBmYWxzZSk7IH0KKyAgICBib29s
IGRvbVBhc3RlQWxsb3dlZCgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImRvbVBh
c3RlQWxsb3dlZCIsIHRydWUpOyB9CisgICAgYm9vbCBlbmFibGVDb2xvckZpbHRlcigpIGNvbnN0
IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZUNvbG9yRmlsdGVyIiwgZmFsc2UpOyB9
CisgICAgYm9vbCBwdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlKCkgY29uc3QgeyBy
ZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgicHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9k
ZSIsIGZhbHNlKTsgfQorICAgIGJvb2wgcnVuU2luZ2x5KCkgY29uc3QgeyByZXR1cm4gYm9vbEZl
YXR1cmVWYWx1ZSgicnVuU2luZ2x5IiwgZmFsc2UpOyB9CisgICAgYm9vbCBjaGVja0Zvcldvcmxk
TGVha3MoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJjaGVja0ZvcldvcmxkTGVh
a3MiLCBmYWxzZSk7IH0KKyAgICBib29sIHNob3VsZElnbm9yZU1ldGFWaWV3cG9ydCgpIGNvbnN0
IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInNob3VsZElnbm9yZU1ldGFWaWV3cG9ydCIsIGZh
bHNlKTsgfQorICAgIGJvb2wgc2hvdWxkU2hvd1NwZWxsQ2hlY2tpbmdEb3RzKCkgY29uc3QgeyBy
ZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgic3BlbGxDaGVja2luZ0RvdHMiLCBmYWxzZSk7IH0KKyAg
ICBib29sIGVuYWJsZVNlcnZpY2VDb250cm9scygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJl
VmFsdWUoImVuYWJsZVNlcnZpY2VDb250cm9scyIsIGZhbHNlKTsgfQorICAgIGJvb2wgZWRpdGFi
bGUoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlZGl0YWJsZSIsIGZhbHNlKTsg
fQorICAgIGJvb2wgc2hvdWxkSGFuZGxlUnVuT3BlblBhbmVsKCkgY29uc3QgeyByZXR1cm4gYm9v
bEZlYXR1cmVWYWx1ZSgic2hvdWxkSGFuZGxlUnVuT3BlblBhbmVsIiwgdHJ1ZSk7IH0KKyAgICBi
b29sIHNob3VsZFByZXNlbnRQb3BvdmVycygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFs
dWUoInNob3VsZFByZXNlbnRQb3BvdmVycyIsIHRydWUpOyB9CisgICAgYm9vbCBlbmFibGVBcHBO
YXAoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVBcHBOYXAiLCBmYWxz
ZSk7IH0KKyAgICBib29sIGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUoKSBjb25zdCB7IHJldHVybiBi
b29sRmVhdHVyZVZhbHVlKCJlbmFibGVCYWNrRm9yd2FyZENhY2hlIiwgZmFsc2UpOyB9CisgICAg
Ym9vbCBhbGxvd3NMaW5rUHJldmlldygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUo
ImFsbG93c0xpbmtQcmV2aWV3IiwgdHJ1ZSk7IH0KKyAgICBib29sIGVuYWJsZUNhcHR1cmVWaWRl
b0luVUlQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlQ2Fw
dHVyZVZpZGVvSW5VSVByb2Nlc3MiLCBmYWxzZSk7IH0KKyAgICBib29sIGVuYWJsZUNhcHR1cmVW
aWRlb0luR1BVUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJs
ZUNhcHR1cmVWaWRlb0luR1BVUHJvY2VzcyIsIGZhbHNlKTsgfQorICAgIGJvb2wgZW5hYmxlQ2Fw
dHVyZUF1ZGlvSW5VSVByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJl
bmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcyIsIGZhbHNlKTsgfQorICAgIGJvb2wgZW5hYmxl
Q2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1
ZSgiZW5hYmxlQ2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzIiwgZmFsc2UpOyB9CisgICAgYm9vbCBh
bGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVW
YWx1ZSgiYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyIsIHRydWUpOyB9CisgICAgYm9vbCBl
bmFibGVJbkFwcEJyb3dzZXJQcml2YWN5KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1
ZSgiZW5hYmxlSW5BcHBCcm93c2VyUHJpdmFjeSIsIGZhbHNlKTsgfQorICAgIGJvb2wgaXNBcHBC
b3VuZFdlYlZpZXcoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJpc0FwcEJvdW5k
V2ViVmlldyIsIGZhbHNlKTsgfQorICAgIGJvb2wgaWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdU
aW1lb3V0cygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImlnbm9yZVN5bmNocm9u
b3VzTWVzc2FnaW5nVGltZW91dHMiLCBmYWxzZSk7IH0KKyAgICBib29sIGVuYWJsZVByb2Nlc3NT
d2FwT25OYXZpZ2F0aW9uKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxl
UHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24iLCB0cnVlKTsgfQorICAgIGJvb2wgZW5hYmxlUHJvY2Vz
c1N3YXBPbldpbmRvd09wZW4oKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFi
bGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiIsIGZhbHNlKTsgfQorICAgIGJvb2wgdXNlU2Vydmlj
ZVdvcmtlclNob3J0VGltZW91dCgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInVz
ZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQiLCBmYWxzZSk7IH0KKyAgICBkb3VibGUgY29udGVu
dEluc2V0VG9wKCkgY29uc3QgeyByZXR1cm4gZG91YmxlRmVhdHVyZVZhbHVlKCJjb250ZW50SW5z
ZXQudG9wIiwgMCk7IH0KKyAgICBkb3VibGUgZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJl
dHVybiBkb3VibGVGZWF0dXJlVmFsdWUoImRldmljZVNjYWxlRmFjdG9yIiwgMSk7IH0KKyAgICBz
dGQ6OnN0cmluZyBhcHBsaWNhdGlvbk1hbmlmZXN0KCkgY29uc3QgeyByZXR1cm4gc3RyaW5nRmVh
dHVyZVZhbHVlKCJhcHBsaWNhdGlvbk1hbmlmZXN0IiwgeyB9KTsgfQorICAgIHN0ZDo6c3RyaW5n
IGpzY09wdGlvbnMoKSBjb25zdCB7IHJldHVybiBzdHJpbmdGZWF0dXJlVmFsdWUoImpzY09wdGlv
bnMiLCB7IH0pOyB9CisgICAgc3RkOjpzdHJpbmcgYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlw
ZXMoKSBjb25zdCB7IHJldHVybiBzdHJpbmdGZWF0dXJlVmFsdWUoImFkZGl0aW9uYWxTdXBwb3J0
ZWRJbWFnZVR5cGVzIiwgeyB9KTsgfQorICAgIHN0ZDo6c3RyaW5nIHN0YW5kYWxvbmVXZWJBcHBs
aWNhdGlvblVSTCgpIGNvbnN0IHsgcmV0dXJuIHN0cmluZ0ZlYXR1cmVWYWx1ZSgic3RhbmRhbG9u
ZVdlYkFwcGxpY2F0aW9uVVJMIiwgeyB9KTsgfQorICAgIHN0ZDo6c3RyaW5nIGNvbnRlbnRNb2Rl
KCkgY29uc3QgeyByZXR1cm4gc3RyaW5nRmVhdHVyZVZhbHVlKCJjb250ZW50TW9kZSIsIHsgfSk7
IH0KKyAgICBzdGQ6OnN0cmluZyBhcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKSBjb25zdCB7
IHJldHVybiBzdHJpbmdGZWF0dXJlVmFsdWUoImFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllciIs
IHsgfSk7IH0KKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3ZlcnJpZGVMYW5ndWFnZXMo
KSBjb25zdCB7IHJldHVybiBzdHJpbmdWZWN0b3JGZWF0dXJlVmFsdWUoImxhbmd1YWdlIiwgeyB9
KTsgfQorCisgICAgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29sPiYg
ZXhwZXJpbWVudGFsRmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzLmV4cGVyaW1l
bnRhbEZlYXR1cmVzOyB9CisgICAgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5n
LCBib29sPiYgaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJl
cy5pbnRlcm5hbERlYnVnRmVhdHVyZXM7IH0KIAorICAgIGJvb2wgaGFzU2FtZUluaXRpYWxpemF0
aW9uT3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmIChtX2ZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzICE9IG9wdGlvbnMubV9mZWF0
dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgaWYgKG1fZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzICE9IG9wdGlvbnMubV9m
ZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGlmIChtX2ZlYXR1cmVzLmJvb2xGZWF0dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVy
ZXMuYm9vbEZlYXR1cmVzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
bV9mZWF0dXJlcy5kb3VibGVGZWF0dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuZG91YmxlRmVh
dHVyZXMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX2ZlYXR1cmVz
LnN0cmluZ0ZlYXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJlcy5zdHJpbmdGZWF0dXJlcykKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG1fZmVhdHVyZXMuc3RyaW5nVmVj
dG9yRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2ZlYXR1cmVzLnN0cmluZ1ZlY3RvckZlYXR1cmVzKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisK
K3ByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUIGZlYXR1cmVWYWx1ZShz
dGQ6OnN0cmluZyBrZXksIFQgZGVmYXVsdFZhbHVlLCBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8
c3RkOjpzdHJpbmcsIFQ+JiBtYXApIGNvbnN0CisgICAgeworICAgICAgICBhdXRvIGl0ID0gbWFw
LmZpbmQoa2V5KTsKKyAgICAgICAgaWYgKGl0ICE9IG1hcC5lbmQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOworICAgIH0KKwor
ICAgIGJvb2wgYm9vbEZlYXR1cmVWYWx1ZShzdGQ6OnN0cmluZyBrZXksIGJvb2wgZGVmYXVsdFZh
bHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZlYXR1cmVWYWx1ZShrZXksIGRlZmF1
bHRWYWx1ZSwgbV9mZWF0dXJlcy5ib29sRmVhdHVyZXMpOworICAgIH0KKyAgICBkb3VibGUgZG91
YmxlRmVhdHVyZVZhbHVlKHN0ZDo6c3RyaW5nIGtleSwgZG91YmxlIGRlZmF1bHRWYWx1ZSkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBmZWF0dXJlVmFsdWUoa2V5LCBkZWZhdWx0VmFsdWUs
IG1fZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMpOworICAgIH0KKyAgICBzdGQ6OnN0cmluZyBzdHJp
bmdGZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5LCBzdGQ6OnN0cmluZyBkZWZhdWx0VmFsdWUp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZmVhdHVyZVZhbHVlKGtleSwgZGVmYXVsdFZh
bHVlLCBtX2ZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVzKTsKKyAgICB9CisgICAgc3RkOjp2ZWN0b3I8
c3RkOjpzdHJpbmc+IHN0cmluZ1ZlY3RvckZlYXR1cmVWYWx1ZShzdGQ6OnN0cmluZyBrZXksIHN0
ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBkZWZhdWx0VmFsdWUpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gZmVhdHVyZVZhbHVlKGtleSwgZGVmYXVsdFZhbHVlLCBtX2ZlYXR1cmVzLnN0cmlu
Z1ZlY3RvckZlYXR1cmVzKTsKKyAgICB9CisKKyAgICBUZXN0RmVhdHVyZXMgbV9mZWF0dXJlczsK
IH07CiAKIH0KSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAyNjc4ODUpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTIwLDYgKzEyMCw4IEBA
CiAJCTY1MTBBNzhCMTFFQzY0MzgwMDQxMDg2NyAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyODAwLnR0
ZiBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUxMEE3
ODAxMUVDNjQzODAwNDEwODY3IC8qIFdlYktpdFdlaWdodFdhdGNoZXI4MDAudHRmICovOyB9Owog
CQk2NTEwQTc4QzExRUM2NDM4MDA0MTA4NjcgLyogV2ViS2l0V2VpZ2h0V2F0Y2hlcjkwMC50dGYg
aW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MTBBNzgx
MTFFQzY0MzgwMDQxMDg2NyAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyOTAwLnR0ZiAqLzsgfTsKIAkJ
NjVFQjg1QTAxMUVDNjdDQzAwMzREMzAwIC8qIEFjdGl2YXRlRm9udHNDb2NvYS5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1RUI4NTlGMTFFQzY3Q0Mw
MDM0RDMwMCAvKiBBY3RpdmF0ZUZvbnRzQ29jb2EubW0gKi87IH07CisJCTdDNzgyNTUxMjUyQTQ3
RTcwMDE5MUI4NyAvKiBTdGRGaWxlc3lzdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzc4MjU0RjI1MkE0N0U3MDAxOTFCODcgLyogU3RkRmlsZXN5
c3RlbS5oICovOyB9OworCQk3Qzc4MjU1MjI1MkE0N0U3MDAxOTFCODcgLyogU3RkRmlsZXN5c3Rl
bS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzc4
MjU1MDI1MkE0N0U3MDAxOTFCODcgLyogU3RkRmlsZXN5c3RlbS5jcHAgKi87IH07CiAJCTgwMzRD
NjYyMTQ4NzYzNjQwMEFDMzJFOSAvKiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgwMzRDNjYxMTQ4NzYz
NjQwMEFDMzJFOSAvKiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbSAqLzsgfTsKIAkJODA5
NzMzOEExNDg3NEE1QTAwODE1NkQ5IC8qIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVy
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODA5NzMz
ODkxNDg3NEE1QTAwODE1NkQ5IC8qIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1t
ICovOyB9OwogCQk5Mzc2NDE3QTIxMEQ3MzcyMDBBM0RBQUUgLyogV2ViS2l0VGVzdFJ1bm5lcldp
bmRvdy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkz
NzY0MTc2MjEwRDczNjAwMEEzREFBRSAvKiBXZWJLaXRUZXN0UnVubmVyV2luZG93Lm1tICovOyB9
OwpAQCAtMzQ5LDEzICszNTEsMTQgQEAKIAkJNjUxMEE3ODExMUVDNjQzODAwNDEwODY3IC8qIFdl
YktpdFdlaWdodFdhdGNoZXI5MDAudHRmICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gZmlsZTsgbmFtZSA9IFdlYktpdFdlaWdodFdhdGNoZXI5MDAudHRm
OyBwYXRoID0gZm9udHMvV2ViS2l0V2VpZ2h0V2F0Y2hlcjkwMC50dGY7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTY1RUI4NTlEMTFFQzY3Q0MwMDM0RDMwMCAvKiBBY3RpdmF0ZUZvbnRz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjdGl2YXRlRm9udHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjVFQjg1OUYxMUVDNjdDQzAwMzREMzAwIC8qIEFj
dGl2YXRlRm9udHNDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IEFjdGl2YXRlRm9udHNDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
N0M3ODI1NEYyNTJBNDdFNzAwMTkxQjg3IC8qIFN0ZEZpbGVzeXN0ZW0uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3RkRmlsZXN5c3RlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Qzc4MjU1
MDI1MkE0N0U3MDAxOTFCODcgLyogU3RkRmlsZXN5c3RlbS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTdGRGaWxlc3lzdGVtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODAzNEM2
NjExNDg3NjM2NDAwQUMzMkU5IC8qIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgwOTczMzg4MTQ4NzRBNUEw
MDgxNTZEOSAvKiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5o
OyBwYXRoID0gbWFjL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgwOTczMzg5MTQ4NzRBNUEwMDgxNTZEOSAvKiBBY2Nlc3Np
YmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgbmFtZSA9IEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tOyBwYXRoID0g
bWFjL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4NDFDQzAwRDE4MTE4NUJGMDA0MkU5QjYgLyogT3B0aW9ucy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcHRpb25zLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQxQ0MwMEUxODExODVCRjAwNDJFOUI2IC8qIE9wdGlvbnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9ucy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk4REQ3NkZBMTA0ODZBQTc2MDBEOTZCNUUgLyogV2ViS2l0VGVz
dFJ1bm5lciAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0g
ImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0g
V2ViS2l0VGVzdFJ1bm5lcjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJ
OTMzOEQxQkEyNTBBNzlFQjAwRTgyN0Y2IC8qIEpTQmFzaWNzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpT
QmFzaWNzLmg7IHBhdGggPSAuLi9UZXN0UnVubmVyU2hhcmVkL0JpbmRpbmdzL0pTQmFzaWNzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMzhEMUJFMjUwQkQ5REQwMEU4MjdGNiAv
KiBEaWN0aW9uYXJ5RnVuY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpY3Rpb25hcnlGdW5jdGlv
bnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM3NjQxNzYyMTBENzM2MDAwQTNE
QUFFIC8qIFdlYktpdFRlc3RSdW5uZXJXaW5kb3cubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBXZWJLaXRUZXN0UnVubmVyV2luZG93Lm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5Mzc2NDE3NzIxMEQ3MzYxMDBBM0RBQUUgLyogV2ViS2l0VGVzdFJ1
bm5lcldpbmRvdy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRUZXN0
UnVubmVyV2luZG93Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04OTcsNiArOTAw
LDggQEAKIAkJCQk5MzM4RDFCRTI1MEJEOUREMDBFODI3RjYgLyogRGljdGlvbmFyeUZ1bmN0aW9u
cy5oICovLAogCQkJCUJDOTlBNDg0MTIwODkwMUEwMDdFOUYwOCAvKiBTdHJpbmdGdW5jdGlvbnMu
aCAqLywKIAkJCQk5QjM2QTI3MDIwOTQ1M0EwMDAzRTA2NTEgLyogV2hhdFRvRHVtcC5oICovLAor
CQkJCTdDNzgyNTRGMjUyQTQ3RTcwMDE5MUI4NyAvKiBTdGRGaWxlc3lzdGVtLmggKi8sCisJCQkJ
N0M3ODI1NTAyNTJBNDdFNzAwMTkxQjg3IC8qIFN0ZEZpbGVzeXN0ZW0uY3BwICovLAogCQkJKTsK
IAkJCW5hbWUgPSBTaGFyZWQ7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtOTM3LDYg
Kzk0Miw3IEBACiAJCQkJMkRCNjE4N0UxRDdENThENDAwOTc4RDE5IC8qIENvcmVHcmFwaGljc1Rl
c3RTUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCTJERDRDNDlBMUQ2RTdEM0IwMDA3Mzc5QyAvKiBF
dmVudFNlcmlhbGl6ZXJNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzNCNTUyMUJBNzg5Njgw
MDRCM0VGNCAvKiBKU1VJU2NyaXB0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0M3
ODI1NTEyNTJBNDdFNzAwMTkxQjg3IC8qIFN0ZEZpbGVzeXN0ZW0uaCBpbiBIZWFkZXJzICovLAog
CQkJCTJERkE5ODQ4MUQ3RjcwQ0YwMEFGRjJDOSAvKiBTaGFyZWRFdmVudFN0cmVhbXNNYWMuaCBp
biBIZWFkZXJzICovLAogCQkJCTJEMDU4RTA5MjJFMkVFMjIwMEU0QzE0NSAvKiBVSVNjcmlwdENv
bnRyb2xsZXJDb2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQwNThFMEIyMkUyRUY2RDAwRTRD
MTQ1IC8qIFVJU2NyaXB0Q29udHJvbGxlck1hYy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMjIwLDYg
KzEyMjYsNyBAQAogCQkJCUY0NjI0MEIxMjE3MDEzRTUwMDkxN0IxNiAvKiBVSVNjcmlwdENvbnRy
b2xsZXJDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTI3N0NDRUREMjUwRjMwMEEwMDUwQzU3
MiAvKiBVSVNjcmlwdENvbnRyb2xsZXJDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3
M0I1NUMxQkE4OTA0MjAwNEIzRUY0IC8qIFVJU2NyaXB0Q29udHJvbGxlcklPUy5tbSBpbiBTb3Vy
Y2VzICovLAorCQkJCTdDNzgyNTUyMjUyQTQ3RTcwMDE5MUI4NyAvKiBTdGRGaWxlc3lzdGVtLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMThFNkU2MUQ2QjlCQTIwMDI3RTU0NyAvKiBVSVNjcmlw
dENvbnRyb2xsZXJTaGFyZWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE4NTEwNDMxQjlBRTE0
NTAwNzQ0QUVCIC8qIFdlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUExODUxMDQ0MUI5QUUxNEEwMDc0NEFFQiAvKiBXb3JrUXVldWVNYW5hZ2VyLmNwcCBpbiBT
b3VyY2VzICovLApJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJv
bGxlckNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2Ev
VGVzdENvbnRyb2xsZXJDb2NvYS5tbQkocmV2aXNpb24gMjY3ODg1KQorKysgVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTQsMjcgKzExNCwyOCBAQCBXS1ByZWZlcmVuY2VzUmVmIFRlc3RDb250cm9sbGVyOjpwbGF0
Zm9yCiAgICAgcmV0dXJuIChfX2JyaWRnZSBXS1ByZWZlcmVuY2VzUmVmKWdsb2JhbFdlYlZpZXdD
b25maWd1cmF0aW9uLnByZWZlcmVuY2VzOwogfQogCi12b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0
Zm9ybUFkZFRlc3RPcHRpb25zKFRlc3RPcHRpb25zJiBvcHRpb25zKSBjb25zdAorVGVzdEZlYXR1
cmVzIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZU92ZXJyaWRlc0RlZmF1
bHRzRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYpIGNvbnN0CiB7CisgICAgVGVzdEZlYXR1cmVz
IGZlYXR1cmVzOworCiAgICAgaWYgKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVs
dHNdIGJvb2xGb3JLZXk6QCJFbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbiJdKQotICAgICAg
ICBvcHRpb25zLmNvbnRleHRPcHRpb25zLmVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uID0g
dHJ1ZTsKKyAgICAgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJlbmFibGVQcm9j
ZXNzU3dhcE9uTmF2aWdhdGlvbiIsIHRydWUgfSk7CiAgICAgaWYgKFtbTlNVc2VyRGVmYXVsdHMg
c3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6QCJFbmFibGVQcm9jZXNzU3dhcE9uV2lu
ZG93T3BlbiJdKQotICAgICAgICBvcHRpb25zLmNvbnRleHRPcHRpb25zLmVuYWJsZVByb2Nlc3NT
d2FwT25XaW5kb3dPcGVuID0gdHJ1ZTsKKyAgICAgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmlu
c2VydCh7ICJlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiIsIHRydWUgfSk7CiAKLSNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmIChvcHRpb25zLmVuYWJsZUluQXBwQnJvd3NlclBy
aXZhY3kpCi0gICAgICAgIFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHNl
dEJvb2w6WUVTIGZvcktleTpAIldlYktpdERlYnVnSXNJbkFwcEJyb3dzZXJQcml2YWN5RW5hYmxl
ZCJdOwotI2VuZGlmCisgICAgcmV0dXJuIGZlYXR1cmVzOwogfQogCiB2b2lkIFRlc3RDb250cm9s
bGVyOjpwbGF0Zm9ybUluaXRpYWxpemVEYXRhU3RvcmUoV0tQYWdlQ29uZmlndXJhdGlvblJlZiwg
Y29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKG9wdGlvbnMudXNlRXBoZW1l
cmFsU2Vzc2lvbiB8fCBvcHRpb25zLnN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTC5sZW5ndGgo
KSkgewotICAgICAgICBhdXRvIHdlYnNpdGVEYXRhU3RvcmVDb25maWcgPSBvcHRpb25zLnVzZUVw
aGVtZXJhbFNlc3Npb24gPyBbW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxv
Y10gaW5pdE5vblBlcnNpc3RlbnRDb25maWd1cmF0aW9uXSBhdXRvcmVsZWFzZV0gOiBbW1tfV0tX
ZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwot
ICAgICAgICBpZiAoIW9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lvbikKKyAgICBib29sIHVzZUVw
aGVtZXJhbFNlc3Npb24gPSBvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24oKTsKKyAgICBhdXRv
IHN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTCA9IG9wdGlvbnMuc3RhbmRhbG9uZVdlYkFwcGxp
Y2F0aW9uVVJMKCk7CisgICAgaWYgKHVzZUVwaGVtZXJhbFNlc3Npb24gfHwgc3RhbmRhbG9uZVdl
YkFwcGxpY2F0aW9uVVJMLmxlbmd0aCgpKSB7CisgICAgICAgIGF1dG8gd2Vic2l0ZURhdGFTdG9y
ZUNvbmZpZyA9IHVzZUVwaGVtZXJhbFNlc3Npb24gPyBbW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29u
ZmlndXJhdGlvbiBhbGxvY10gaW5pdE5vblBlcnNpc3RlbnRDb25maWd1cmF0aW9uXSBhdXRvcmVs
ZWFzZV0gOiBbW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0g
YXV0b3JlbGVhc2VdOworICAgICAgICBpZiAoIXVzZUVwaGVtZXJhbFNlc3Npb24pCiAgICAgICAg
ICAgICBjb25maWd1cmVXZWJzaXRlRGF0YVN0b3JlVGVtcG9yYXJ5RGlyZWN0b3JpZXMoKFdLV2Vi
c2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb25SZWYpd2Vic2l0ZURhdGFTdG9yZUNvbmZpZyk7Ci0g
ICAgICAgIGlmIChvcHRpb25zLnN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTC5sZW5ndGgoKSkK
LSAgICAgICAgICAgIFt3ZWJzaXRlRGF0YVN0b3JlQ29uZmlnIHNldFN0YW5kYWxvbmVBcHBsaWNh
dGlvblVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJp
bmc6b3B0aW9ucy5zdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwuY19zdHIoKV1dXTsKKyAgICAg
ICAgaWYgKHN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTC5sZW5ndGgoKSkKKyAgICAgICAgICAg
IFt3ZWJzaXRlRGF0YVN0b3JlQ29uZmlnIHNldFN0YW5kYWxvbmVBcHBsaWNhdGlvblVSTDpbTlNV
UkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6c3RhbmRhbG9u
ZVdlYkFwcGxpY2F0aW9uVVJMLmNfc3RyKCldXV07CiAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9y
ZSA9IChfX2JyaWRnZSBXS1dlYnNpdGVEYXRhU3RvcmVSZWYpW1tbV0tXZWJzaXRlRGF0YVN0b3Jl
IGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOndlYnNpdGVEYXRhU3RvcmVDb25maWddIGF1
dG9yZWxlYXNlXTsKICAgICB9IGVsc2UKICAgICAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gKF9f
YnJpZGdlIFdLV2Vic2l0ZURhdGFTdG9yZVJlZilnbG9iYWxXZWJWaWV3Q29uZmlndXJhdGlvbi53
ZWJzaXRlRGF0YVN0b3JlOwpAQCAtMTQ1LDMyICsxNDYsMzMgQEAgdm9pZCBUZXN0Q29udHJvbGxl
cjo6cGxhdGZvcm1DcmVhdGVXZWJWaQogICAgIGF1dG8gY29waWVkQ29uZmlndXJhdGlvbiA9IGFk
b3B0TlMoW2dsb2JhbFdlYlZpZXdDb25maWd1cmF0aW9uIGNvcHldKTsKIAogI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCi0gICAgaWYgKG9wdGlvbnMudXNlRGF0YURldGVjdGlvbikKKyAgICBpZiAo
b3B0aW9ucy51c2VEYXRhRGV0ZWN0aW9uKCkpCiAgICAgICAgIFtjb3BpZWRDb25maWd1cmF0aW9u
IHNldERhdGFEZXRlY3RvclR5cGVzOldLRGF0YURldGVjdG9yVHlwZUFsbF07Ci0gICAgaWYgKG9w
dGlvbnMuaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMpCisgICAgaWYgKG9wdGlvbnMuaWdub3Jl
c1ZpZXdwb3J0U2NhbGVMaW1pdHMoKSkKICAgICAgICAgW2NvcGllZENvbmZpZ3VyYXRpb24gc2V0
SWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHM6WUVTXTsKLSAgICBpZiAob3B0aW9ucy51c2VDaGFy
YWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0eSkKKyAgICBpZiAob3B0aW9ucy51c2VDaGFyYWN0ZXJT
ZWxlY3Rpb25HcmFudWxhcml0eSgpKQogICAgICAgICBbY29waWVkQ29uZmlndXJhdGlvbiBzZXRT
ZWxlY3Rpb25HcmFudWxhcml0eTpXS1NlbGVjdGlvbkdyYW51bGFyaXR5Q2hhcmFjdGVyXTsKLSAg
ICBpZiAob3B0aW9ucy5pc0FwcEJvdW5kV2ViVmlldykKKyAgICBpZiAob3B0aW9ucy5pc0FwcEJv
dW5kV2ViVmlldygpKQogICAgICAgICBbY29waWVkQ29uZmlndXJhdGlvbiBzZXRMaW1pdHNOYXZp
Z2F0aW9uc1RvQXBwQm91bmREb21haW5zOllFU107CiAjZWxzZQotICAgIFtjb3BpZWRDb25maWd1
cmF0aW9uIF9zZXRTZXJ2aWNlQ29udHJvbHNFbmFibGVkOm9wdGlvbnMuZW5hYmxlU2VydmljZUNv
bnRyb2xzXTsKKyAgICBbY29waWVkQ29uZmlndXJhdGlvbiBfc2V0U2VydmljZUNvbnRyb2xzRW5h
YmxlZDpvcHRpb25zLmVuYWJsZVNlcnZpY2VDb250cm9scygpXTsKICNlbmRpZgogCi0gICAgaWYg
KG9wdGlvbnMuZW5hYmxlQXR0YWNobWVudEVsZW1lbnQpCisgICAgaWYgKG9wdGlvbnMuZW5hYmxl
QXR0YWNobWVudEVsZW1lbnQoKSkKICAgICAgICAgW2NvcGllZENvbmZpZ3VyYXRpb24gX3NldEF0
dGFjaG1lbnRFbGVtZW50RW5hYmxlZDpZRVNdOwogCi0gICAgaWYgKG9wdGlvbnMuZW5hYmxlQ29s
b3JGaWx0ZXIpCisgICAgaWYgKG9wdGlvbnMuZW5hYmxlQ29sb3JGaWx0ZXIoKSkKICAgICAgICAg
W2NvcGllZENvbmZpZ3VyYXRpb24gX3NldENvbG9yRmlsdGVyRW5hYmxlZDpZRVNdOwogCiAgICAg
W2NvcGllZENvbmZpZ3VyYXRpb24gc2V0V2Vic2l0ZURhdGFTdG9yZTooV0tXZWJzaXRlRGF0YVN0
b3JlICopd2Vic2l0ZURhdGFTdG9yZSgpXTsKIAotICAgIFtjb3BpZWRDb25maWd1cmF0aW9uIF9z
ZXRBbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzOm9wdGlvbnMuYWxsb3dUb3BOYXZpZ2F0aW9u
VG9EYXRhVVJMc107CisgICAgW2NvcGllZENvbmZpZ3VyYXRpb24gX3NldEFsbG93VG9wTmF2aWdh
dGlvblRvRGF0YVVSTHM6b3B0aW9ucy5hbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzKCldOwog
CiAgICAgY29uZmlndXJlQ29udGVudE1vZGUoY29waWVkQ29uZmlndXJhdGlvbi5nZXQoKSwgb3B0
aW9ucyk7CiAKLSAgICBpZiAob3B0aW9ucy5hcHBsaWNhdGlvbk1hbmlmZXN0Lmxlbmd0aCgpKSB7
Ci0gICAgICAgIGF1dG8gbWFuaWZlc3RQYXRoID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3Ry
aW5nOm9wdGlvbnMuYXBwbGljYXRpb25NYW5pZmVzdC5jX3N0cigpXTsKKyAgICBhdXRvIGFwcGxp
Y2F0aW9uTWFuaWZlc3QgPSBvcHRpb25zLmFwcGxpY2F0aW9uTWFuaWZlc3QoKTsKKyAgICBpZiAo
YXBwbGljYXRpb25NYW5pZmVzdC5sZW5ndGgoKSkgeworICAgICAgICBhdXRvIG1hbmlmZXN0UGF0
aCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzphcHBsaWNhdGlvbk1hbmlmZXN0LmNf
c3RyKCldOwogICAgICAgICBOU1N0cmluZyAqdGV4dCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ29u
dGVudHNPZkZpbGU6bWFuaWZlc3RQYXRoIHVzZWRFbmNvZGluZzpudWxscHRyIGVycm9yOm51bGxw
dHJdOwogICAgICAgICBbY29waWVkQ29uZmlndXJhdGlvbiBfc2V0QXBwbGljYXRpb25NYW5pZmVz
dDpbX1dLQXBwbGljYXRpb25NYW5pZmVzdCBhcHBsaWNhdGlvbk1hbmlmZXN0RnJvbUpTT046dGV4
dCBtYW5pZmVzdFVSTDpuaWwgZG9jdW1lbnRVUkw6bmlsXV07CiAgICAgfQpAQCAtMTc4LDEzICsx
ODAsMTMgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1DcmVhdGVXZWJWaQogICAgIG1f
bWFpbldlYlZpZXcgPSBtYWtlVW5pcXVlPFBsYXRmb3JtV2ViVmlldz4oY29waWVkQ29uZmlndXJh
dGlvbi5nZXQoKSwgb3B0aW9ucyk7CiAgICAgZmluaXNoQ3JlYXRpbmdQbGF0Zm9ybVdlYlZpZXco
bV9tYWluV2ViVmlldy5nZXQoKSwgb3B0aW9ucyk7CiAKLSAgICBpZiAob3B0aW9ucy5wdW5jaE91
dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlKQorICAgIGlmIChvcHRpb25zLnB1bmNoT3V0V2hp
dGVCYWNrZ3JvdW5kc0luRGFya01vZGUoKSkKICAgICAgICAgbV9tYWluV2ViVmlldy0+c2V0RHJh
d3NCYWNrZ3JvdW5kKGZhbHNlKTsKIAotICAgIGlmIChvcHRpb25zLmVkaXRhYmxlKQorICAgIGlm
IChvcHRpb25zLmVkaXRhYmxlKCkpCiAgICAgICAgIG1fbWFpbldlYlZpZXctPnNldEVkaXRhYmxl
KHRydWUpOwogCi0gICAgbV9tYWluV2ViVmlldy0+cGxhdGZvcm1WaWV3KCkuYWxsb3dzTGlua1By
ZXZpZXcgPSBvcHRpb25zLmFsbG93c0xpbmtQcmV2aWV3OworICAgIG1fbWFpbldlYlZpZXctPnBs
YXRmb3JtVmlldygpLmFsbG93c0xpbmtQcmV2aWV3ID0gb3B0aW9ucy5hbGxvd3NMaW5rUHJldmll
dygpOwogICAgIFttX21haW5XZWJWaWV3LT5wbGF0Zm9ybVZpZXcoKSBfc2V0U2hhcmVTaGVldENv
bXBsZXRlc0ltbWVkaWF0ZWx5V2l0aFJlc29sdXRpb25Gb3JUZXN0aW5nOllFU107CiB9CiAKQEAg
LTIwMyw3ICsyMDUsNyBAQCBQbGF0Zm9ybVdlYlZpZXcqIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9y
CiB2b2lkIFRlc3RDb250cm9sbGVyOjpmaW5pc2hDcmVhdGluZ1BsYXRmb3JtV2ViVmlldyhQbGF0
Zm9ybVdlYlZpZXcqIHZpZXcsIGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKQogewogI2lmIFBM
QVRGT1JNKE1BQykKLSAgICBpZiAob3B0aW9ucy5zaG91bGRTaG93V2ViVmlldykKKyAgICBpZiAo
b3B0aW9ucy5zaG91bGRTaG93V2ViVmlldygpKQogICAgICAgICBbdmlldy0+cGxhdGZvcm1XaW5k
b3coKSBvcmRlckZyb250Om5pbF07CiAgICAgZWxzZQogICAgICAgICBbdmlldy0+cGxhdGZvcm1X
aW5kb3coKSBvcmRlckJhY2s6bmlsXTsKQEAgLTI2MywxMiArMjY1LDEyIEBAIHZvaWQgVGVzdENv
bnRyb2xsZXI6OnJlc2V0Q29udGVudEV4dGVuc2kKICAgICB9CiB9CiAKLXZvaWQgVGVzdENvbnRy
b2xsZXI6OnNldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGJ1bmRs
ZUlkZW50aWZpZXIpCit2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRBcHBsaWNhdGlvbkJ1bmRsZUlk
ZW50aWZpZXIoY29uc3Qgc3RkOjpzdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIpCiB7Ci0gICAgaWYg
KGJ1bmRsZUlkZW50aWZpZXIuaXNFbXB0eSgpKQorICAgIGlmIChidW5kbGVJZGVudGlmaWVyLmVt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBbVGVzdFJ1bm5lcldLV2ViVmlldyBf
c2V0QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWJ1bmRsZUlkZW50aWZp
ZXIuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV07CisgICAgW1Rlc3RSdW5uZXJXS1dlYlZpZXcgX3Nl
dEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcjooTlNTdHJpbmcgKil0b1dURlN0cmluZyhidW5k
bGVJZGVudGlmaWVyKS5jcmVhdGVDRlN0cmluZygpLmdldCgpXTsKIH0KIAogdm9pZCBUZXN0Q29u
dHJvbGxlcjo6Y2xlYXJBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXJUZXN0aW5nT3ZlcnJpZGUo
KQpAQCAtMjg2LDcgKzI4OCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvY29hUmVzZXRTdGF0
ZVRvQ28KICAgICAgICAgVGVzdFJ1bm5lcldLV2ViVmlldyAqcGxhdGZvcm1WaWV3ID0gd2ViVmll
dy0+cGxhdGZvcm1WaWV3KCk7CiAgICAgICAgIHBsYXRmb3JtVmlldy5fdmlld1NjYWxlID0gMTsK
ICAgICAgICAgcGxhdGZvcm1WaWV3Ll9taW5pbXVtRWZmZWN0aXZlRGV2aWNlV2lkdGggPSAwOwot
ICAgICAgICBbcGxhdGZvcm1WaWV3IF9zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRG
b3JUZXN0aW5nOm9wdGlvbnMuc2hvdWxkU2hvd1NwZWxsQ2hlY2tpbmdEb3RzXTsKKyAgICAgICAg
W3BsYXRmb3JtVmlldyBfc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yVGVzdGlu
ZzpvcHRpb25zLnNob3VsZFNob3dTcGVsbENoZWNraW5nRG90cygpXTsKICAgICAgICAgW3BsYXRm
b3JtVmlldyByZXNldEludGVyYWN0aW9uQ2FsbGJhY2tzXTsKICAgICAgICAgW3BsYXRmb3JtVmll
dyBfcmVzZXROYXZpZ2F0aW9uR2VzdHVyZVN0YXRlRm9yVGVzdGluZ107CiAgICAgfQpAQCAtMjk3
LDYgKzI5OSwxMSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpjb2NvYVJlc2V0U3RhdGVUb0NvCiB2
b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVdpbGxSdW5UZXN0KGNvbnN0IFRlc3RJbnZvY2F0
aW9uJiB0ZXN0SW52b2NhdGlvbikKIHsKICAgICBzZXRDcmFzaFJlcG9ydEFwcGxpY2F0aW9uU3Bl
Y2lmaWNJbmZvcm1hdGlvblRvVVJMKHRlc3RJbnZvY2F0aW9uLnVybCgpKTsKKworI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCisgICAgaWYgKHRlc3RJbnZvY2F0aW9uLm9wdGlvbnMoKS5lbmFibGVJ
bkFwcEJyb3dzZXJQcml2YWN5KCkpCisgICAgICAgIFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRV
c2VyRGVmYXVsdHNdIHNldEJvb2w6WUVTIGZvcktleTpAIldlYktpdERlYnVnSXNJbkFwcEJyb3dz
ZXJQcml2YWN5RW5hYmxlZCJdOworI2VuZGlmCiB9CiAKIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0
IFdlYkFyY2hpdmVQYm9hcmRUeXBlID0gQCJBcHBsZSBXZWIgQXJjaGl2ZSBwYXN0ZWJvYXJkIHR5
cGUiOwpAQCAtNDg3LDEyICs0OTQsMTEgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6aXNEb2luZ01l
ZGlhQ2FwdHVyZQogCiBzdGF0aWMgV0tDb250ZW50TW9kZSBjb250ZW50TW9kZShjb25zdCBUZXN0
T3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAob3B0aW9ucy5jb250ZW50TW9kZSA9PSAiZGVz
a3RvcCJfcykKKyAgICBhdXRvIG1vZGUgPSBvcHRpb25zLmNvbnRlbnRNb2RlKCk7CisgICAgaWYg
KG1vZGUgPT0gImRlc2t0b3AiKQogICAgICAgICByZXR1cm4gV0tDb250ZW50TW9kZURlc2t0b3A7
Ci0KLSAgICBpZiAob3B0aW9ucy5jb250ZW50TW9kZSA9PSAibW9iaWxlIl9zKQorICAgIGlmICht
b2RlID09ICJtb2JpbGUiKQogICAgICAgICByZXR1cm4gV0tDb250ZW50TW9kZU1vYmlsZTsKLQog
ICAgIHJldHVybiBXS0NvbnRlbnRNb2RlUmVjb21tZW5kZWQ7CiB9CiAKSW5kZXg6IFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RDb250cm9sbGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0Q29udHJvbGxlckd0ay5jcHAJKHJldmlzaW9u
IDI2Nzg4NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RDb250cm9sbGVyR3Rr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDkgKzE1MCwxMSBAQCB2b2lkIFRlc3RDb250cm9s
bGVyOjpwbGF0Zm9ybVJlc2V0UHJlZmVyCiAgICAgbV9tYWluV2ViVmlldy0+ZGlzbWlzc0FsbFBv
cHVwTWVudXMoKTsKIH0KIAotdm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVj
aWZpY1Rlc3RPcHRpb25zRm9yVGVzdChUZXN0T3B0aW9ucyYgb3B0aW9ucywgY29uc3Qgc3RkOjpz
dHJpbmcmKSBjb25zdAorVGVzdEZlYXR1cmVzIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNp
ZmljRmVhdHVyZURlZmF1bHRzRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYpIGNvbnN0CiB7Ci0g
ICAgb3B0aW9ucy5lbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzID0gZmFsc2U7CisgICAgVGVzdEZl
YXR1cmVzIGZlYXR1cmVzOworICAgIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAiZW5h
YmxlTW9kZXJuTWVkaWFDb250cm9scyIsIGZhbHNlIH0pOworICAgIHJldHVybiBmZWF0dXJlczsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV1RSCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lv
cy9UZXN0Q29udHJvbGxlcklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbQkocmV2aXNpb24gMjY3ODg1KQorKysgVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0JKHdvcmtpbmcgY29weSkK
QEAgLTE5MCw3ICsxOTAsNyBAQCBib29sIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJlc2V0U3Rh
dGVUCiAgICAgfQogCiAgICAgbV9wcmVzZW50UG9wb3ZlclN3aXp6bGVycy5jbGVhcigpOwotICAg
IGlmICghb3B0aW9ucy5zaG91bGRQcmVzZW50UG9wb3ZlcnMpIHsKKyAgICBpZiAoIW9wdGlvbnMu
c2hvdWxkUHJlc2VudFBvcG92ZXJzKCkpIHsKICNpZiBVU0UoVUlDT05URVhUTUVOVSkKICAgICAg
ICAgbV9wcmVzZW50UG9wb3ZlclN3aXp6bGVycy5hcHBlbmQobWFrZVVuaXF1ZTxJbnN0YW5jZU1l
dGhvZFN3aXp6bGVyPihbVUlDb250ZXh0TWVudUludGVyYWN0aW9uIGNsYXNzXSwgQHNlbGVjdG9y
KF9wcmVzZW50TWVudUF0TG9jYXRpb246KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRl
UHJlc2VudE1lbnVPclBvcG92ZXJPclZpZXdDb250cm9sbGVyKSkpOwogI2VuZGlmCkBAIC0yMTMs
OCArMjEzLDEwIEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRTdGF0ZVQKICAg
ICAgICAgVUlTY3JvbGxWaWV3ICpzY3JvbGxWaWV3ID0gd2ViVmlldy5zY3JvbGxWaWV3OwogICAg
ICAgICBbc2Nyb2xsVmlldyBfcmVtb3ZlQWxsQW5pbWF0aW9uczpZRVNdOwogICAgICAgICBbc2Ny
b2xsVmlldyBzZXRab29tU2NhbGU6MSBhbmltYXRlZDpOT107Ci0gICAgICAgIHNjcm9sbFZpZXcu
Y29udGVudEluc2V0ID0gVUlFZGdlSW5zZXRzTWFrZShvcHRpb25zLmNvbnRlbnRJbnNldFRvcCwg
MCwgMCwgMCk7Ci0gICAgICAgIHNjcm9sbFZpZXcuY29udGVudE9mZnNldCA9IENHUG9pbnRNYWtl
KDAsIC1vcHRpb25zLmNvbnRlbnRJbnNldFRvcCk7CisgICAgICAgIAorICAgICAgICBhdXRvIGNv
bnRlbnRJbnNldFRvcCA9IG9wdGlvbnMuY29udGVudEluc2V0VG9wKCk7CisgICAgICAgIHNjcm9s
bFZpZXcuY29udGVudEluc2V0ID0gVUlFZGdlSW5zZXRzTWFrZShjb250ZW50SW5zZXRUb3AsIDAs
IDAsIDApOworICAgICAgICBzY3JvbGxWaWV3LmNvbnRlbnRPZmZzZXQgPSBDR1BvaW50TWFrZSgw
LCAtY29udGVudEluc2V0VG9wKTsKIAogICAgICAgICBpZiAod2ViVmlldy5pbnRlcmFjdGluZ1dp
dGhGb3JtQ29udHJvbCkKICAgICAgICAgICAgIHNob3VsZFJlc3RvcmVGaXJzdFJlc3BvbmRlciA9
IFt3ZWJWaWV3IHJlc2lnbkZpcnN0UmVzcG9uZGVyXTsKQEAgLTI2NSwxMiArMjY3LDE0IEBAIGJv
b2wgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRTdGF0ZVQKIAogdm9pZCBUZXN0Q29udHJv
bGxlcjo6cGxhdGZvcm1Db25maWd1cmVWaWV3Rm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYg
dGVzdCkKIHsKKyAgICBbW0dlbmVyYXRlZFRvdWNoZXNEZWJ1Z1dpbmRvdyBzaGFyZWRHZW5lcmF0
ZWRUb3VjaGVzRGVidWdXaW5kb3ddIHNldFNob3VsZFNob3dUb3VjaGVzOnRlc3Qub3B0aW9ucygp
LnNob3VsZFNob3dUb3VjaGVzKCldOworCiAgICAgVGVzdFJ1bm5lcldLV2ViVmlldyAqd2ViVmll
dyA9IG1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpOwogCi0gICAgaWYgKHRlc3Qub3B0aW9u
cygpLnNob3VsZElnbm9yZU1ldGFWaWV3cG9ydCkKKyAgICBpZiAodGVzdC5vcHRpb25zKCkuc2hv
dWxkSWdub3JlTWV0YVZpZXdwb3J0KCkpCiAgICAgICAgIHdlYlZpZXcuY29uZmlndXJhdGlvbi5w
cmVmZXJlbmNlcy5fc2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0ID0gWUVTOwogCi0gICAgaWYgKCF0
ZXN0Lm9wdGlvbnMoKS51c2VGbGV4aWJsZVZpZXdwb3J0KQorICAgIGlmICghdGVzdC5vcHRpb25z
KCkudXNlRmxleGlibGVWaWV3cG9ydCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBDR1JlY3Qg
c2NyZWVuQm91bmRzID0gW1VJU2NyZWVuIG1haW5TY3JlZW5dLmJvdW5kczsKQEAgLTI5MSwxMCAr
Mjk1LDkgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1Db25maWd1cmVWaQogICAgIC8v
IFdLQnVuZGxlUGFnZVNldFVzZVRlc3RpbmdWaWV3cG9ydENvbmZpZ3VyYXRpb24oZmFsc2UpLgog
fQogCi12b2lkIFRlc3RDb250cm9sbGVyOjp1cGRhdGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlv
bnNGb3JUZXN0KFRlc3RPcHRpb25zJiBvcHRpb25zLCBjb25zdCBzdGQ6OnN0cmluZyYpIGNvbnN0
CitUZXN0RmVhdHVyZXMgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtU3BlY2lmaWNGZWF0dXJlRGVm
YXVsdHNGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJikgY29uc3QKIHsKLSAgICBvcHRpb25zLnNo
b3VsZFNob3dUb3VjaGVzID0gc2hvdWxkU2hvd1RvdWNoZXMoKTsKLSAgICBbW0dlbmVyYXRlZFRv
dWNoZXNEZWJ1Z1dpbmRvdyBzaGFyZWRHZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5kb3ddIHNldFNo
b3VsZFNob3dUb3VjaGVzOm9wdGlvbnMuc2hvdWxkU2hvd1RvdWNoZXNdOworICAgIHJldHVybiB7
IH07CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZUNvbnRleHQo
KQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvUGxhdGZvcm1XZWJWaWV3TWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1BsYXRmb3JtV2ViVmll
d01hYy5tbQkocmV2aXNpb24gMjY3ODg1KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMv
UGxhdGZvcm1XZWJWaWV3TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MSwxOCArNjEsMTggQEAg
UGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tXZWJWaQogICAgICwgbV9vcHRpb25z
KG9wdGlvbnMpCiB7CiAgICAgLy8gRklYTUU6IE5vdCBzdXJlIHRoaXMgaXMgdGhlIGJlc3QgcGxh
Y2UgZm9yIHRoaXM7IG1heWJlIHdlIHNob3VsZCBoYXZlIEFQSSB0byBzZXQgdGhpcyBzbyB3ZSBj
YW4gZG8gaXQgZnJvbSBUZXN0Q29udHJvbGxlcj8KLSAgICBpZiAobV9vcHRpb25zLnVzZVJlbW90
ZUxheWVyVHJlZSkKKyAgICBpZiAobV9vcHRpb25zLnVzZVJlbW90ZUxheWVyVHJlZSgpKQogICAg
ICAgICBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBzZXRWYWx1ZTpAWUVT
IGZvcktleTpAIldlYktpdDJVc2VSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYSJdOwogCiAgICAg
YXV0byBjb3BpZWRDb25maWd1cmF0aW9uID0gYWRvcHROUyhbY29uZmlndXJhdGlvbiBjb3B5XSk7
Ci0gICAgV0tQcmVmZXJlbmNlc1NldFRocmVhZGVkU2Nyb2xsaW5nRW5hYmxlZCgoX19icmlkZ2Ug
V0tQcmVmZXJlbmNlc1JlZilbY29waWVkQ29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10sIG1fb3B0
aW9ucy51c2VUaHJlYWRlZFNjcm9sbGluZyk7CisgICAgV0tQcmVmZXJlbmNlc1NldFRocmVhZGVk
U2Nyb2xsaW5nRW5hYmxlZCgoX19icmlkZ2UgV0tQcmVmZXJlbmNlc1JlZilbY29waWVkQ29uZmln
dXJhdGlvbiBwcmVmZXJlbmNlc10sIG1fb3B0aW9ucy51c2VUaHJlYWRlZFNjcm9sbGluZygpKTsK
IAogICAgIE5TUmVjdCByZWN0ID0gTlNNYWtlUmVjdCgwLCAwLCBUZXN0Q29udHJvbGxlcjo6dmll
d1dpZHRoLCBUZXN0Q29udHJvbGxlcjo6dmlld0hlaWdodCk7CiAgICAgbV92aWV3ID0gW1tUZXN0
UnVubmVyV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOnJlY3QgY29uZmlndXJhdGlvbjpj
b3BpZWRDb25maWd1cmF0aW9uLmdldCgpXTsKICAgICBbbV92aWV3IF9zZXRXaW5kb3dPY2NsdXNp
b25EZXRlY3Rpb25FbmFibGVkOk5PXTsKIAogICAgIE5TU2NyZWVuICpmaXJzdFNjcmVlbiA9IFtb
TlNTY3JlZW4gc2NyZWVuc10gb2JqZWN0QXRJbmRleDowXTsKLSAgICBOU1JlY3Qgd2luZG93UmVj
dCA9IG1fb3B0aW9ucy5zaG91bGRTaG93V2ViVmlldyA/IE5TT2Zmc2V0UmVjdChyZWN0LCAxMDAs
IDEwMCkgOiBOU09mZnNldFJlY3QocmVjdCwgLTEwMDAwLCBbZmlyc3RTY3JlZW4gZnJhbWVdLnNp
emUuaGVpZ2h0IC0gcmVjdC5zaXplLmhlaWdodCArIDEwMDAwKTsKKyAgICBOU1JlY3Qgd2luZG93
UmVjdCA9IG1fb3B0aW9ucy5zaG91bGRTaG93V2ViVmlldygpID8gTlNPZmZzZXRSZWN0KHJlY3Qs
IDEwMCwgMTAwKSA6IE5TT2Zmc2V0UmVjdChyZWN0LCAtMTAwMDAsIFtmaXJzdFNjcmVlbiBmcmFt
ZV0uc2l6ZS5oZWlnaHQgLSByZWN0LnNpemUuaGVpZ2h0ICsgMTAwMDApOwogICAgIG1fd2luZG93
ID0gW1tXZWJLaXRUZXN0UnVubmVyV2luZG93IGFsbG9jXSBpbml0V2l0aENvbnRlbnRSZWN0Ondp
bmRvd1JlY3Qgc3R5bGVNYXNrOk5TV2luZG93U3R5bGVNYXNrQm9yZGVybGVzcyBiYWNraW5nOihO
U0JhY2tpbmdTdG9yZVR5cGUpX05TQmFja2luZ1N0b3JlVW5idWZmZXJlZCBkZWZlcjpZRVNdOwog
ICAgIG1fd2luZG93LnBsYXRmb3JtV2ViVmlldyA9IHRoaXM7CiAgICAgW21fd2luZG93IHNldENv
bG9yU3BhY2U6W2ZpcnN0U2NyZWVuIGNvbG9yU3BhY2VdXTsKSW5kZXg6IFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvbWFjL1Rlc3RDb250cm9sbGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvbWFjL1Rlc3RDb250cm9sbGVyTWFjLm1tCShyZXZpc2lvbiAyNjc4ODUp
CisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9UZXN0Q29udHJvbGxlck1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTcyLDExICsxNzIsMTEgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1SZXNldFN0YXRlVAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFRlc3RDb250cm9s
bGVyOjp1cGRhdGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0KFRlc3RPcHRpb25z
JiBvcHRpb25zLCBjb25zdCBzdGQ6OnN0cmluZyYpIGNvbnN0CitUZXN0RmVhdHVyZXMgVGVzdENv
bnRyb2xsZXI6OnBsYXRmb3JtU3BlY2lmaWNGZWF0dXJlRGVmYXVsdHNGb3JUZXN0KGNvbnN0IFRl
c3RDb21tYW5kJikgY29uc3QKIHsKLSAgICBvcHRpb25zLnVzZVRocmVhZGVkU2Nyb2xsaW5nID0g
dHJ1ZTsKLSAgICBvcHRpb25zLnVzZVJlbW90ZUxheWVyVHJlZSA9IHNob3VsZFVzZVJlbW90ZUxh
eWVyVHJlZSgpOwotICAgIG9wdGlvbnMuc2hvdWxkU2hvd1dlYlZpZXcgPSBzaG91bGRTaG93V2Vi
VmlldygpOworICAgIFRlc3RGZWF0dXJlcyBmZWF0dXJlczsKKyAgICBmZWF0dXJlcy5ib29sRmVh
dHVyZXMuaW5zZXJ0KHsgInVzZVRocmVhZGVkU2Nyb2xsaW5nIiwgdHJ1ZSB9KTsKKyAgICByZXR1
cm4gZmVhdHVyZXM7CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyZUNvbnRlbnRF
eHRlbnNpb25Gb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0KQpJbmRleDogVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci93aW4vUGxhdGZvcm1XZWJWaWV3V2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9QbGF0Zm9ybVdlYlZpZXdXaW4uY3BwCShyZXZp
c2lvbiAyNjc4ODUpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9QbGF0Zm9ybVdlYlZp
ZXdXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAgdm9pZCBQbGF0Zm9y
bVdlYlZpZXc6OnNldFdpbmRvd0ZyYW1lKFdLUgogICAgICAgICBTV1BfTk9NT1ZFIHwgU1dQX05P
Wk9SREVSIHwgU1dQX05PQUNUSVZBVEUgfCBTV1BfTk9DT1BZQklUUyk7CiAKICAgICBVSU5UIGZs
YWdzID0gU1dQX05PWk9SREVSIHwgU1dQX05PQUNUSVZBVEUgfCBTV1BfTk9DT1BZQklUUzsKLSAg
ICBpZiAobV9vcHRpb25zLnNob3VsZFNob3dXZWJWaWV3KQorICAgIGlmIChtX29wdGlvbnMuc2hv
dWxkU2hvd1dlYlZpZXcoKSkKICAgICAgICAgZmxhZ3MgfD0gU1dQX05PTU9WRTsKICAgICA6OlNl
dFdpbmRvd1BvcygKICAgICAgICAgbV93aW5kb3csCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL3dpbi9UZXN0Q29udHJvbGxlcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci93aW4vVGVzdENvbnRyb2xsZXJXaW4uY3BwCShyZXZpc2lvbiAyNjc4ODUpCisr
KyBUb29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9UZXN0Q29udHJvbGxlcldpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyNyw5ICsyMjcsOSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9y
bVJlc2V0UHJlZmVyCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBUZXN0Q29udHJv
bGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9yVGVzdChUZXN0T3B0aW9u
cyYsIGNvbnN0IHN0ZDo6c3RyaW5nJikgY29uc3QKK1Rlc3RGZWF0dXJlcyBUZXN0Q29udHJvbGxl
cjo6cGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QoY29uc3QgVGVzdENvbW1h
bmQmKSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHsgfTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV1RSCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL3dwZS9U
ZXN0Q29udHJvbGxlcldQRS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci93cGUvVGVzdENvbnRyb2xsZXJXUEUuY3BwCShyZXZpc2lvbiAyNjc4ODUpCisrKyBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL3dwZS9UZXN0Q29udHJvbGxlcldQRS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzNiw5ICsxMzYsMTEgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1SZXNldFBy
ZWZlcgogewogfQogCi12b2lkIFRlc3RDb250cm9sbGVyOjp1cGRhdGVQbGF0Zm9ybVNwZWNpZmlj
VGVzdE9wdGlvbnNGb3JUZXN0KFRlc3RPcHRpb25zJiBvcHRpb25zLCBjb25zdCBzdGQ6OnN0cmlu
ZyYpIGNvbnN0CitUZXN0RmVhdHVyZXMgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtU3BlY2lmaWNG
ZWF0dXJlRGVmYXVsdHNGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJikgY29uc3QKIHsKLSAgICBv
cHRpb25zLmVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMgPSBmYWxzZTsKKyAgICBUZXN0RmVhdHVy
ZXMgZmVhdHVyZXM7CisgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJlbmFibGVN
b2Rlcm5NZWRpYUNvbnRyb2xzIiwgZmFsc2UgfSk7CisgICAgcmV0dXJuIGZlYXR1cmVzOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXVFIKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2Nzg4NSkKKysrIExheW91
dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDIwLTEw
LTA0ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbVGVzdGluZ10g
QWRkIHN1cHBvcnQgZm9yIHBlci1kaXJlY3Rvcnkgb3ZlcnJpZGluZyBvZiB0ZXN0aW5nIG9wdGlv
bnMgdmlhIG5ldyBUZXN0T3B0aW9ucy50eHQgZmlsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzI5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgZGlyZWN0b3J5IGJhc2VkIFRlc3RPcHRpb25z
LnR4dCBmaWxlcyB0byByZXBsYWNlIGhhcmQgY29kaW5nIGluIFdlYktpdFRlc3RSdW5uZXIKKyAg
ICAgICAgZm9yIG9wdGlvbnMgb3ZlcnJpZGluZy4KKworICAgICAgICAqIGZhc3Qvdmlld3BvcnQv
VGVzdE9wdGlvbnMudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pcGFkL2Zhc3Qvdmll
d3BvcnQvVGVzdE9wdGlvbnMudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdmcvVzNDLVNWRy0xLjEt
U0UvVGVzdE9wdGlvbnMudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdmcvVzNDLVNWRy0xLjEvVGVz
dE9wdGlvbnMudHh0OiBBZGRlZC4KKwogMjAyMC0xMC0wMiAgU2FtIFdlaW5pZyAgPHdlaW5pZ0Bh
cHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIGNvZGUgYmVoaW5kIEVOQUJMRShNRURJQV9TRVNT
SU9OKSwgbm8gcG9ydHMgZW5hYmxlIGl0CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3ZpZXdwb3J0
L1Rlc3RPcHRpb25zLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3ZpZXdwb3J0
L1Rlc3RPcHRpb25zLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L3ZpZXdw
b3J0L1Rlc3RPcHRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3ZWJraXQt
dGVzdC1ydW5uZXIgWyB1c2VGbGV4aWJsZVZpZXdwb3J0PXRydWUgXQpJbmRleDogTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2MvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjc4ODgpCisrKyBMYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2MvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjAt
MTAtMDQgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFtUZXN0aW5n
XSBBZGQgc3VwcG9ydCBmb3IgcGVyLWRpcmVjdG9yeSBvdmVycmlkaW5nIG9mIHRlc3Rpbmcgb3B0
aW9ucyB2aWEgbmV3IFRlc3RPcHRpb25zLnR4dCBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3Mjk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBkaXJlY3RvcnkgYmFzZWQgVGVzdE9wdGlv
bnMudHh0IGZpbGVzIHRvIHJlcGxhY2UgaGFyZCBjb2RpbmcgaW4gV2ViS2l0VGVzdFJ1bm5lcgor
ICAgICAgICBmb3Igb3B0aW9ucyBvdmVycmlkaW5nLgorCisgICAgICAgICogSW5kZXhlZERCLXBy
aXZhdGUtYnJvd3NpbmcvVGVzdE9wdGlvbnMudHh0OiBBZGRlZC4KKwogMjAyMC0wOS0zMCAgQW50
b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgbm9uLWFuaW1h
dGVkIHN1cHBvcnQgZm9yIHRoZSBDU1MgdHJhbnNsYXRlIHByb3BlcnR5CkluZGV4OiBMYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2MvSW5kZXhlZERCLXByaXZhdGUtYnJvd3NpbmcvVGVzdE9wdGlvbnMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy9JbmRleGVkREItcHJp
dmF0ZS1icm93c2luZy9UZXN0T3B0aW9ucy50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL0luZGV4ZWREQi1wcml2YXRlLWJyb3dzaW5nL1Rlc3RPcHRpb25zLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3ZWJraXQtdGVzdC1ydW5uZXIgWyB1c2VF
cGhlbWVyYWxTZXNzaW9uPXRydWUgXQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vaXBhZC9m
YXN0L3ZpZXdwb3J0L1Rlc3RPcHRpb25zLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9pcGFkL2Zhc3Qvdmlld3BvcnQvVGVzdE9wdGlvbnMudHh0CShub25leGlzdGVudCkK
KysrIExheW91dFRlc3RzL3BsYXRmb3JtL2lwYWQvZmFzdC92aWV3cG9ydC9UZXN0T3B0aW9ucy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSBAQAord2Via2l0LXRlc3QtcnVubmVyIFsgdXNl
RmxleGlibGVWaWV3cG9ydD10cnVlIF0KSW5kZXg6IExheW91dFRlc3RzL3N2Zy9XM0MtU1ZHLTEu
MS1TRS9UZXN0T3B0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL1czQy1T
VkctMS4xLVNFL1Rlc3RPcHRpb25zLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9z
dmcvVzNDLVNWRy0xLjEtU0UvVGVzdE9wdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEgQEAKK3dlYmtpdC10ZXN0LXJ1bm5lciBbIGlzU1ZHVGVzdD10cnVlIF0KSW5kZXg6IExheW91
dFRlc3RzL3N2Zy9XM0MtU1ZHLTEuMS9UZXN0T3B0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvc3ZnL1czQy1TVkctMS4xL1Rlc3RPcHRpb25zLnR4dAkobm9uZXhpc3RlbnQpCisr
KyBMYXlvdXRUZXN0cy9zdmcvVzNDLVNWRy0xLjEvVGVzdE9wdGlvbnMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtpdC10ZXN0LXJ1bm5lciBbIGlzU1ZHVGVzdD10cnVlIF0K
</data>
<flag name="commit-queue"
          id="426426"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410479</attachid>
            <date>2020-10-04 12:17:36 -0700</date>
            <delta_ts>2020-10-04 14:06:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217297-20201004121735.patch</filename>
            <type>text/plain</type>
            <size>264198</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9PcHRpb25zLmNwcAkocmV2aXNpb24gMjY3OTQ4KQorKysg
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEz
LDcgKzExMyw3IEBAIHN0YXRpYyBib29sIGhhbmRsZU9wdGlvbkFsbG93ZWRIb3N0KE9wdGkKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgcGFyc2VGZWF0dXJlKFN0cmluZyBmZWF0
dXJlU3RyaW5nLCBIYXNoTWFwPFN0cmluZywgYm9vbD4mIGZlYXR1cmVzKQorc3RhdGljIGJvb2wg
cGFyc2VGZWF0dXJlKFN0cmluZyBmZWF0dXJlU3RyaW5nLCBzdGQ6OnVub3JkZXJlZF9tYXA8c3Rk
OjpzdHJpbmcsIGJvb2w+JiBmZWF0dXJlcykKIHsKICAgICBhdXRvIHN0cmluZ3MgPSBmZWF0dXJl
U3RyaW5nLnNwbGl0KCc9Jyk7CiAgICAgaWYgKHN0cmluZ3MuaXNFbXB0eSgpIHx8IHN0cmluZ3Mu
c2l6ZSgpID4gMikKQEAgLTEyMiw3ICsxMjIsNyBAQCBzdGF0aWMgYm9vbCBwYXJzZUZlYXR1cmUo
U3RyaW5nIGZlYXR1cmVTCiAgICAgYXV0byBmZWF0dXJlTmFtZSA9IHN0cmluZ3NbMF07CiAgICAg
Ym9vbCBlbmFibGVkID0gc3RyaW5ncy5zaXplKCkgPT0gMSB8fCBzdHJpbmdzWzFdID09ICJ0cnVl
IjsKIAotICAgIGZlYXR1cmVzLnNldChmZWF0dXJlTmFtZSwgZW5hYmxlZCk7CisgICAgZmVhdHVy
ZXMuaW5zZXJ0KHsgZmVhdHVyZU5hbWUudXRmOCgpLmRhdGEoKSwgZW5hYmxlZCB9KTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9PcHRpb25zLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9PcHRpb25zLmgJKHJldmlzaW9u
IDI2Nzk0OCkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw4ICszMSw4IEBACiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPHN0ZGlvLmg+
CiAjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CiAjaW5jbHVkZSA8
dmVjdG9yPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KQEAgLTU3LDggKzU3LDggQEAgc3RydWN0IE9wdGlvbnMgewogI2VuZGlmCiAg
ICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHBhdGhzOwogICAgIHN0ZDo6c2V0PHN0ZDo6c3Ry
aW5nPiBhbGxvd2VkSG9zdHM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIGJvb2w+IGludGVybmFsRmVh
dHVyZXM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIGJvb2w+IGV4cGVyaW1lbnRhbEZlYXR1cmVzOwor
ICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4gaW50ZXJuYWxGZWF0dXJl
czsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+IGV4cGVyaW1lbnRh
bEZlYXR1cmVzOwogfTsKIAogY2xhc3MgT3B0aW9uIHsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9QbGF0Zm9ybVdlYlZpZXcuaAkocmV2aXNpb24gMjY3OTQ4KQorKysgVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDcgKzEx
NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZUZyb21XaW5kb3coKTsKICAgICB2b2lkIGFk
ZFRvV2luZG93KCk7CiAKLSAgICBib29sIHZpZXdTdXBwb3J0c09wdGlvbnMoY29uc3QgVGVzdE9w
dGlvbnMmIG9wdGlvbnMpIGNvbnN0IHsgcmV0dXJuICFvcHRpb25zLnJ1blNpbmdseSAmJiBtX29w
dGlvbnMuaGFzU2FtZUluaXRpYWxpemF0aW9uT3B0aW9ucyhvcHRpb25zKTsgfQorICAgIGJvb2wg
dmlld1N1cHBvcnRzT3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykgY29uc3QgeyBy
ZXR1cm4gIW9wdGlvbnMucnVuU2luZ2x5KCkgJiYgbV9vcHRpb25zLmhhc1NhbWVJbml0aWFsaXph
dGlvbk9wdGlvbnMob3B0aW9ucyk7IH0KIAogICAgIFBsYXRmb3JtSW1hZ2Ugd2luZG93U25hcHNo
b3RJbWFnZSgpOwogICAgIGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKCkgY29uc3QgeyByZXR1
cm4gbV9vcHRpb25zOyB9CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1N0ZEZpbGVzeXN0
ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvU3RkRmlsZXN5c3Rl
bS5jcHAJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdGRGaWxlc3lz
dGVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2MDQgQEAKKy8vPT09LS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBTdGRGaWxlc3lzdGVtLmNwcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLT09PS8vCisvLworLy8gICAgICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJ
bmZyYXN0cnVjdHVyZQorLy8KKy8vIFRoaXMgZmlsZSBpcyBkdWFsIGxpY2Vuc2VkIHVuZGVyIHRo
ZSBNSVQgYW5kIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4KKy8vIFNvdXJjZSBMaWNl
bnNlcy4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgorLy8KKy8vPT09LS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LT09PS8vCisKKy8qIEltcG9ydHMgYSBjb3B5IG9mIGZpbGVzeXN0ZW0vZmlsZXN5c3RlbV9jb21t
b24uaCwgZmlsZXN5c3RlbS9kaXJlY3RvcnlfaXRlcmF0b3IuY3BwLAorICAgZmlsZXN5c3RlbS9p
bnQxMjhfYnVpbHRpbnMuY3BwIGFuZCBmaWxlc3lzdGVtL29wZXJhdGlvbnMuY3BwIGZyb20gcjM0
MzgzOCBvZiB0aGUKKyAgIGxpYmMrKyBwcm9qZWN0IGFuZCBoYXMgbW9kaWZpZWQgdGhlbSB0byB3
b3JrIG91dHNpZGUgb2YgYSBidWlsZCBvZiBsaWJjKysgaXRzZWxmLiAqLworCisjaW1wb3J0IDx3
dGYvUGxhdGZvcm0uaD4KKworI2lmIFBMQVRGT1JNKE1BQykKKworI2luY2x1ZGUgPEF2YWlsYWJp
bGl0eS5oPgorCisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8IDEwMTUwMAor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3RkRmlsZXN5c3RlbS5oIgorCisKKyNp
bmNsdWRlIDxfX2NvbmZpZz4KKworLyogLS0gQkVHSU4gZmlsZXN5c3RlbS9maWxlc3lzdGVtX2Nv
bW1vbi5oIC0tICovCisKKyNpbmNsdWRlIDxhcnJheT4KKyNpbmNsdWRlIDxjaHJvbm8+CisjaW5j
bHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxjbGltaXRzPgorCisjaW5jbHVkZSA8dW5pc3RkLmg+
CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdHZmcy5oPgorI2luY2x1
ZGUgPHN5cy90aW1lLmg+IC8vIGZvciA6OnV0aW1lcyBhcyB1c2VkIGluIF9fbGFzdF93cml0ZV90
aW1lCisjaW5jbHVkZSA8ZmNudGwuaD4gICAgLyogdmFsdWVzIGZvciBmY2htb2RhdCAqLworCisv
KiAjaW5jbHVkZSAiLi4vaW5jbHVkZS9hcHBsZV9hdmFpbGFiaWxpdHkuaCIgKi8KKworI2lmICFk
ZWZpbmVkKF9fQVBQTEVfXykKKy8vIFdlIGNhbiB1c2UgdGhlIHByZXNlbmNlIG9mIFVUSU1FX09N
SVQgdG8gZGV0ZWN0IHBsYXRmb3JtcyB0aGF0IHByb3ZpZGUKKy8vIHV0aW1lbnNhdC4KKyNpZiBk
ZWZpbmVkKFVUSU1FX09NSVQpCisjZGVmaW5lIF9MSUJDUFBfVVNFX1VUSU1FTlNBVAorI2VuZGlm
CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19HTlVDX18pCisjcHJhZ21hIEdDQyBkaWFnbm9zdGlj
IHB1c2gKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtZnVuY3Rpb24i
CisjZW5kaWYKKworX0xJQkNQUF9CRUdJTl9OQU1FU1BBQ0VfRklMRVNZU1RFTQorCituYW1lc3Bh
Y2UgZGV0YWlsIHsKK25hbWVzcGFjZSB7CisKK3N0YXRpYyBzdHJpbmcgZm9ybWF0X3N0cmluZ19p
bXAoY29uc3QgY2hhciogbXNnLCAuLi4pIHsKKyAgLy8gd2UgbWlnaHQgbmVlZCBhIHNlY29uZCBz
aG90IGF0IHRoaXMsIHNvIHByZS1lbXB0aXZseSBtYWtlIGEgY29weQorICBzdHJ1Y3QgR3VhcmRW
QUxpc3QgeworICAgIHZhX2xpc3QmIHRhcmdldDsKKyAgICBib29sIGFjdGl2ZSA9IHRydWU7Cisg
ICAgR3VhcmRWQUxpc3QodmFfbGlzdCYgdGFyZ2V0KSA6IHRhcmdldCh0YXJnZXQpLCBhY3RpdmUo
dHJ1ZSkge30KKyAgICB2b2lkIGNsZWFyKCkgeworICAgICAgaWYgKGFjdGl2ZSkKKyAgICAgICAg
dmFfZW5kKHRhcmdldCk7CisgICAgICBhY3RpdmUgPSBmYWxzZTsKKyAgICB9CisgICAgfkd1YXJk
VkFMaXN0KCkgeworICAgICAgaWYgKGFjdGl2ZSkKKyAgICAgICAgdmFfZW5kKHRhcmdldCk7Cisg
ICAgfQorICB9OworICB2YV9saXN0IGFyZ3M7CisgIHZhX3N0YXJ0KGFyZ3MsIG1zZyk7CisgIEd1
YXJkVkFMaXN0IGFyZ3NfZ3VhcmQoYXJncyk7CisKKyAgdmFfbGlzdCBhcmdzX2NwOworICB2YV9j
b3B5KGFyZ3NfY3AsIGFyZ3MpOworICBHdWFyZFZBTGlzdCBhcmdzX2NvcHlfZ3VhcmQoYXJnc19j
cCk7CisKKyAgYXJyYXk8Y2hhciwgMjU2PiBsb2NhbF9idWZmOworICBzaXplX3Qgc2l6ZSA9IGxv
Y2FsX2J1ZmYuc2l6ZSgpOworCisjaWZkZWYgX19jbGFuZ19fCisjcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZm9ybWF0LW5v
bmxpdGVyYWwiCisjZW5kaWYKKyAgYXV0byByZXQgPSA6OnZzbnByaW50Zihsb2NhbF9idWZmLmRh
dGEoKSwgc2l6ZSwgbXNnLCBhcmdzX2NwKTsKKyNpZmRlZiBfX2NsYW5nX18KKyNwcmFnbWEgY2xh
bmcgZGlhZ25vc3RpYyBwb3AKKyNlbmRpZgorCisgIGFyZ3NfY29weV9ndWFyZC5jbGVhcigpOwor
CisgIC8vIGhhbmRsZSBlbXB0eSBleHBhbnNpb24KKyAgaWYgKHJldCA9PSAwKQorICAgIHJldHVy
biBzdHJpbmd7fTsKKyAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4ocmV0KSA8IHNpemUpCisgICAg
cmV0dXJuIHN0cmluZyhsb2NhbF9idWZmLmRhdGEoKSk7CisKKyAgLy8gd2UgZGlkIG5vdCBwcm92
aWRlIGEgbG9uZyBlbm91Z2ggYnVmZmVyIG9uIG91ciBmaXJzdCBhdHRlbXB0LgorICAvLyBhZGQg
MSB0byBzaXplIHRvIGFjY291bnQgZm9yIG51bGwtYnl0ZSBpbiBzaXplIGNhc3QgdG8gcHJldmVu
dCBvdmVyZmxvdworICBzaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihyZXQpICsgMTsKKyAgYXV0
byBidWZmX3B0ciA9IHVuaXF1ZV9wdHI8Y2hhcltdPihuZXcgY2hhcltzaXplXSk7CisKKyNpZmRl
ZiBfX2NsYW5nX18KKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5n
IGRpYWdub3N0aWMgaWdub3JlZCAiLVdmb3JtYXQtbm9ubGl0ZXJhbCIKKyNlbmRpZgorICByZXQg
PSA6OnZzbnByaW50ZihidWZmX3B0ci5nZXQoKSwgc2l6ZSwgbXNnLCBhcmdzKTsKKyNpZmRlZiBf
X2NsYW5nX18KKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKKyNlbmRpZgorCisgIHJldHVy
biBzdHJpbmcoYnVmZl9wdHIuZ2V0KCkpOworfQorCitjb25zdCBjaGFyKiB1bndyYXAoc3RyaW5n
IGNvbnN0JiBzKSB7IHJldHVybiBzLmNfc3RyKCk7IH0KK2NvbnN0IGNoYXIqIHVud3JhcChwYXRo
IGNvbnN0JiBwKSB7IHJldHVybiBwLm5hdGl2ZSgpLmNfc3RyKCk7IH0KK3RlbXBsYXRlIDxjbGFz
cyBBcmc+CitBcmcgY29uc3QmIHVud3JhcChBcmcgY29uc3QmIGEpIHsKKyAgc3RhdGljX2Fzc2Vy
dCghaXNfY2xhc3M8QXJnPjo6dmFsdWUsICJjYW5ub3QgcGFzcyBjbGFzcyBoZXJlIik7CisgIHJl
dHVybiBhOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MuLi4gQXJncz4KK3N0cmluZyBmb3JtYXRfc3Ry
aW5nKGNvbnN0IGNoYXIqIGZtdCwgQXJncyBjb25zdCYuLi4gYXJncykgeworICByZXR1cm4gZm9y
bWF0X3N0cmluZ19pbXAoZm10LCB1bndyYXAoYXJncykuLi4pOworfQorCitlcnJvcl9jb2RlIGNh
cHR1cmVfZXJybm8oKSB7CisgIF9MSUJDUFBfQVNTRVJUKGVycm5vLCAiRXhwZWN0ZWQgZXJybm8g
dG8gYmUgbm9uLXplcm8iKTsKKyAgcmV0dXJuIGVycm9yX2NvZGUoZXJybm8sIGdlbmVyaWNfY2F0
ZWdvcnkoKSk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUPgorVCBlcnJvcl92YWx1ZSgpOwordGVt
cGxhdGUgPD4KK19MSUJDUFBfQ09OU1RFWFBSX0FGVEVSX0NYWDExIHZvaWQgZXJyb3JfdmFsdWU8
dm9pZD4oKSB7fQordGVtcGxhdGUgPD4KK2Jvb2wgZXJyb3JfdmFsdWU8Ym9vbD4oKSB7CisgIHJl
dHVybiBmYWxzZTsKK30KK3RlbXBsYXRlIDw+Cit1aW50bWF4X3QgZXJyb3JfdmFsdWU8dWludG1h
eF90PigpIHsKKyAgcmV0dXJuIHVpbnRtYXhfdCgtMSk7Cit9Cit0ZW1wbGF0ZSA8PgorX0xJQkNQ
UF9DT05TVEVYUFJfQUZURVJfQ1hYMTEgZmlsZV90aW1lX3R5cGUgZXJyb3JfdmFsdWU8ZmlsZV90
aW1lX3R5cGU+KCkgeworICByZXR1cm4gZmlsZV90aW1lX3R5cGU6Om1pbigpOworfQordGVtcGxh
dGUgPD4KK3BhdGggZXJyb3JfdmFsdWU8cGF0aD4oKSB7CisgIHJldHVybiB7fTsKK30KKwordGVt
cGxhdGUgPGNsYXNzIFQ+CitzdHJ1Y3QgRXJyb3JIYW5kbGVyIHsKKyAgY29uc3QgY2hhciogZnVu
Y19uYW1lOworICBlcnJvcl9jb2RlKiBlYyA9IG51bGxwdHI7CisgIGNvbnN0IHBhdGgqIHAxID0g
bnVsbHB0cjsKKyAgY29uc3QgcGF0aCogcDIgPSBudWxscHRyOworCisgIEVycm9ySGFuZGxlcihj
b25zdCBjaGFyKiBmbmFtZSwgZXJyb3JfY29kZSogZWMsIGNvbnN0IHBhdGgqIHAxID0gbnVsbHB0
ciwKKyAgICAgICAgICAgICAgIGNvbnN0IHBhdGgqIHAyID0gbnVsbHB0cikKKyAgICAgIDogZnVu
Y19uYW1lKGZuYW1lKSwgZWMoZWMpLCBwMShwMSksIHAyKHAyKSB7CisgICAgaWYgKGVjKQorICAg
ICAgZWMtPmNsZWFyKCk7CisgIH0KKworICBUIHJlcG9ydChjb25zdCBlcnJvcl9jb2RlJiBtX2Vj
KSBjb25zdCB7CisgICAgaWYgKGVjKSB7CisgICAgICAqZWMgPSBtX2VjOworICAgICAgcmV0dXJu
IGVycm9yX3ZhbHVlPFQ+KCk7CisgICAgfQorICAgIHN0cmluZyB3aGF0ID0gc3RyaW5nKCJpbiAi
KSArIGZ1bmNfbmFtZTsKKyAgICBzd2l0Y2ggKGJvb2wocDEpICsgYm9vbChwMikpIHsKKyAgICBj
YXNlIDA6CisgICAgICBfX3Rocm93X2ZpbGVzeXN0ZW1fZXJyb3Iod2hhdCwgbV9lYyk7CisgICAg
Y2FzZSAxOgorICAgICAgX190aHJvd19maWxlc3lzdGVtX2Vycm9yKHdoYXQsICpwMSwgbV9lYyk7
CisgICAgY2FzZSAyOgorICAgICAgX190aHJvd19maWxlc3lzdGVtX2Vycm9yKHdoYXQsICpwMSwg
KnAyLCBtX2VjKTsKKyAgICB9CisgICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOworICB9CisKKyAg
dGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+CisgIFQgcmVwb3J0KGNvbnN0IGVycm9yX2NvZGUmIG1f
ZWMsIGNvbnN0IGNoYXIqIG1zZywgQXJncyBjb25zdCYuLi4gYXJncykgY29uc3QgeworICAgIGlm
IChlYykgeworICAgICAgKmVjID0gbV9lYzsKKyAgICAgIHJldHVybiBlcnJvcl92YWx1ZTxUPigp
OworICAgIH0KKyAgICBzdHJpbmcgd2hhdCA9CisgICAgICAgIHN0cmluZygiaW4gIikgKyBmdW5j
X25hbWUgKyAiOiAiICsgZm9ybWF0X3N0cmluZyhtc2csIGFyZ3MuLi4pOworICAgIHN3aXRjaCAo
Ym9vbChwMSkgKyBib29sKHAyKSkgeworICAgIGNhc2UgMDoKKyAgICAgIF9fdGhyb3dfZmlsZXN5
c3RlbV9lcnJvcih3aGF0LCBtX2VjKTsKKyAgICBjYXNlIDE6CisgICAgICBfX3Rocm93X2ZpbGVz
eXN0ZW1fZXJyb3Iod2hhdCwgKnAxLCBtX2VjKTsKKyAgICBjYXNlIDI6CisgICAgICBfX3Rocm93
X2ZpbGVzeXN0ZW1fZXJyb3Iod2hhdCwgKnAxLCAqcDIsIG1fZWMpOworICAgIH0KKyAgICBfTElC
Q1BQX1VOUkVBQ0hBQkxFKCk7CisgIH0KKworICBUIHJlcG9ydChlcnJjIGNvbnN0JiBlcnIpIGNv
bnN0IHsgcmV0dXJuIHJlcG9ydChtYWtlX2Vycm9yX2NvZGUoZXJyKSk7IH0KKworICB0ZW1wbGF0
ZSA8Y2xhc3MuLi4gQXJncz4KKyAgVCByZXBvcnQoZXJyYyBjb25zdCYgZXJyLCBjb25zdCBjaGFy
KiBtc2csIEFyZ3MgY29uc3QmLi4uIGFyZ3MpIGNvbnN0IHsKKyAgICByZXR1cm4gcmVwb3J0KG1h
a2VfZXJyb3JfY29kZShlcnIpLCBtc2csIGFyZ3MuLi4pOworICB9CisKK3ByaXZhdGU6CisgIEVy
cm9ySGFuZGxlcihFcnJvckhhbmRsZXIgY29uc3QmKSA9IGRlbGV0ZTsKKyAgRXJyb3JIYW5kbGVy
JiBvcGVyYXRvcj0oRXJyb3JIYW5kbGVyIGNvbnN0JikgPSBkZWxldGU7Cit9OworCit1c2luZyBj
aHJvbm86OmR1cmF0aW9uOwordXNpbmcgY2hyb25vOjpkdXJhdGlvbl9jYXN0OworCit1c2luZyBU
aW1lU3BlYyA9IHN0cnVjdCA6OnRpbWVzcGVjOwordXNpbmcgU3RhdFQgPSBzdHJ1Y3QgOjpzdGF0
OworCit0ZW1wbGF0ZSA8Y2xhc3MgRmlsZVRpbWVULCBjbGFzcyBUaW1lVCwKKyAgICAgICAgICBi
b29sIElzRmxvYXQgPSBpc19mbG9hdGluZ19wb2ludDx0eXBlbmFtZSBGaWxlVGltZVQ6OnJlcD46
OnZhbHVlPgorc3RydWN0IHRpbWVfdXRpbF9iYXNlIHsKKyAgdXNpbmcgcmVwID0gdHlwZW5hbWUg
RmlsZVRpbWVUOjpyZXA7CisgIHVzaW5nIGZzX2R1cmF0aW9uID0gdHlwZW5hbWUgRmlsZVRpbWVU
OjpkdXJhdGlvbjsKKyAgdXNpbmcgZnNfc2Vjb25kcyA9IGR1cmF0aW9uPHJlcD47CisgIHVzaW5n
IGZzX25hbm9zZWNvbmRzID0gZHVyYXRpb248cmVwLCBuYW5vPjsKKyAgdXNpbmcgZnNfbWljcm9z
ZWNvbmRzID0gZHVyYXRpb248cmVwLCBtaWNybz47CisKKyAgc3RhdGljIGNvbnN0ZXhwciByZXAg
bWF4X3NlY29uZHMgPQorICAgICAgZHVyYXRpb25fY2FzdDxmc19zZWNvbmRzPihGaWxlVGltZVQ6
OmR1cmF0aW9uOjptYXgoKSkuY291bnQoKTsKKworICBzdGF0aWMgY29uc3RleHByIHJlcCBtYXhf
bnNlYyA9CisgICAgICBkdXJhdGlvbl9jYXN0PGZzX25hbm9zZWNvbmRzPihGaWxlVGltZVQ6OmR1
cmF0aW9uOjptYXgoKSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmc19z
ZWNvbmRzKG1heF9zZWNvbmRzKSkKKyAgICAgICAgICAuY291bnQoKTsKKworICBzdGF0aWMgY29u
c3RleHByIHJlcCBtaW5fc2Vjb25kcyA9CisgICAgICBkdXJhdGlvbl9jYXN0PGZzX3NlY29uZHM+
KEZpbGVUaW1lVDo6ZHVyYXRpb246Om1pbigpKS5jb3VudCgpOworCisgIHN0YXRpYyBjb25zdGV4
cHIgcmVwIG1pbl9uc2VjX3RpbWVzcGVjID0KKyAgICAgIGR1cmF0aW9uX2Nhc3Q8ZnNfbmFub3Nl
Y29uZHM+KAorICAgICAgICAgIChGaWxlVGltZVQ6OmR1cmF0aW9uOjptaW4oKSAtIGZzX3NlY29u
ZHMobWluX3NlY29uZHMpKSArCisgICAgICAgICAgZnNfc2Vjb25kcygxKSkKKyAgICAgICAgICAu
Y291bnQoKTsKKworcHJpdmF0ZToKKyNpZiBfTElCQ1BQX1NURF9WRVIgPiAxMSAmJiAhZGVmaW5l
ZChfTElCQ1BQX0hBU19OT19DWFgxNF9DT05TVEVYUFIpCisgIHN0YXRpYyBjb25zdGV4cHIgZnNf
ZHVyYXRpb24gZ2V0X21pbl9uc2VjcygpIHsKKyAgICByZXR1cm4gZHVyYXRpb25fY2FzdDxmc19k
dXJhdGlvbj4oCisgICAgICAgIGZzX25hbm9zZWNvbmRzKG1pbl9uc2VjX3RpbWVzcGVjKSAtCisg
ICAgICAgIGR1cmF0aW9uX2Nhc3Q8ZnNfbmFub3NlY29uZHM+KGZzX3NlY29uZHMoMSkpKTsKKyAg
fQorICAvLyBTdGF0aWMgYXNzZXJ0IHRoYXQgdGhlc2UgdmFsdWVzIHByb3Blcmx5IHJvdW5kIHRy
aXAuCisgIHN0YXRpY19hc3NlcnQoZnNfc2Vjb25kcyhtaW5fc2Vjb25kcykgKyBnZXRfbWluX25z
ZWNzKCkgPT0KKyAgICAgICAgICAgICAgICAgICAgRmlsZVRpbWVUOjpkdXJhdGlvbjo6bWluKCks
CisgICAgICAgICAgICAgICAgInZhbHVlIGRvZXNuJ3Qgcm91bmR0cmlwIik7CisKKyAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGNoZWNrX3JhbmdlKCkgeworICAgIC8vIFRoaXMga2luZGEgc3Vja3Ms
IGJ1dCBpdCdzIHdoYXQgaGFwcGVucyB3aGVuIHdlIGRvbid0IGhhdmUgX19pbnQxMjhfdC4KKyAg
ICBpZiAoc2l6ZW9mKFRpbWVUKSA9PSBzaXplb2YocmVwKSkgeworICAgICAgdHlwZWRlZiBkdXJh
dGlvbjxsb25nIGxvbmcsIHJhdGlvPDM2MDAgKiAyNCAqIDM2NT4gPiBZZWFyczsKKyAgICAgIHJl
dHVybiBkdXJhdGlvbl9jYXN0PFllYXJzPihmc19zZWNvbmRzKG1heF9zZWNvbmRzKSkgPiBZZWFy
cygyNTApICYmCisgICAgICAgICAgICAgZHVyYXRpb25fY2FzdDxZZWFycz4oZnNfc2Vjb25kcyht
aW5fc2Vjb25kcykpIDwgWWVhcnMoLTI1MCk7CisgICAgfQorICAgIHJldHVybiBtYXhfc2Vjb25k
cyA+PSBudW1lcmljX2xpbWl0czxUaW1lVD46Om1heCgpICYmCisgICAgICAgICAgIG1pbl9zZWNv
bmRzIDw9IG51bWVyaWNfbGltaXRzPFRpbWVUPjo6bWluKCk7CisgIH0KKyAgc3RhdGljX2Fzc2Vy
dChjaGVja19yYW5nZSgpLCAidGhlIHJlcHJlc2VudGFibGUgcmFuZ2UgaXMgdW5hY2NlcHRhYmxl
IHNtYWxsIik7CisjZW5kaWYKK307CisKK3RlbXBsYXRlIDxjbGFzcyBGaWxlVGltZVQsIGNsYXNz
IFRpbWVUPgorc3RydWN0IHRpbWVfdXRpbF9iYXNlPEZpbGVUaW1lVCwgVGltZVQsIHRydWU+IHsK
KyAgdXNpbmcgcmVwID0gdHlwZW5hbWUgRmlsZVRpbWVUOjpyZXA7CisgIHVzaW5nIGZzX2R1cmF0
aW9uID0gdHlwZW5hbWUgRmlsZVRpbWVUOjpkdXJhdGlvbjsKKyAgdXNpbmcgZnNfc2Vjb25kcyA9
IGR1cmF0aW9uPHJlcD47CisgIHVzaW5nIGZzX25hbm9zZWNvbmRzID0gZHVyYXRpb248cmVwLCBu
YW5vPjsKKyAgdXNpbmcgZnNfbWljcm9zZWNvbmRzID0gZHVyYXRpb248cmVwLCBtaWNybz47CisK
KyAgc3RhdGljIGNvbnN0IHJlcCBtYXhfc2Vjb25kczsKKyAgc3RhdGljIGNvbnN0IHJlcCBtYXhf
bnNlYzsKKyAgc3RhdGljIGNvbnN0IHJlcCBtaW5fc2Vjb25kczsKKyAgc3RhdGljIGNvbnN0IHJl
cCBtaW5fbnNlY190aW1lc3BlYzsKK307CisKK3RlbXBsYXRlIDxjbGFzcyBGaWxlVGltZVQsIGNs
YXNzIFRpbWVUPgorY29uc3QgdHlwZW5hbWUgRmlsZVRpbWVUOjpyZXAKKyAgICB0aW1lX3V0aWxf
YmFzZTxGaWxlVGltZVQsIFRpbWVULCB0cnVlPjo6bWF4X3NlY29uZHMgPQorICAgICAgICBkdXJh
dGlvbl9jYXN0PGZzX3NlY29uZHM+KEZpbGVUaW1lVDo6ZHVyYXRpb246Om1heCgpKS5jb3VudCgp
OworCit0ZW1wbGF0ZSA8Y2xhc3MgRmlsZVRpbWVULCBjbGFzcyBUaW1lVD4KK2NvbnN0IHR5cGVu
YW1lIEZpbGVUaW1lVDo6cmVwIHRpbWVfdXRpbF9iYXNlPEZpbGVUaW1lVCwgVGltZVQsIHRydWU+
OjptYXhfbnNlYyA9CisgICAgZHVyYXRpb25fY2FzdDxmc19uYW5vc2Vjb25kcz4oRmlsZVRpbWVU
OjpkdXJhdGlvbjo6bWF4KCkgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZz
X3NlY29uZHMobWF4X3NlY29uZHMpKQorICAgICAgICAuY291bnQoKTsKKwordGVtcGxhdGUgPGNs
YXNzIEZpbGVUaW1lVCwgY2xhc3MgVGltZVQ+Citjb25zdCB0eXBlbmFtZSBGaWxlVGltZVQ6OnJl
cAorICAgIHRpbWVfdXRpbF9iYXNlPEZpbGVUaW1lVCwgVGltZVQsIHRydWU+OjptaW5fc2Vjb25k
cyA9CisgICAgICAgIGR1cmF0aW9uX2Nhc3Q8ZnNfc2Vjb25kcz4oRmlsZVRpbWVUOjpkdXJhdGlv
bjo6bWluKCkpLmNvdW50KCk7CisKK3RlbXBsYXRlIDxjbGFzcyBGaWxlVGltZVQsIGNsYXNzIFRp
bWVUPgorY29uc3QgdHlwZW5hbWUgRmlsZVRpbWVUOjpyZXAKKyAgICB0aW1lX3V0aWxfYmFzZTxG
aWxlVGltZVQsIFRpbWVULCB0cnVlPjo6bWluX25zZWNfdGltZXNwZWMgPQorICAgICAgICBkdXJh
dGlvbl9jYXN0PGZzX25hbm9zZWNvbmRzPigoRmlsZVRpbWVUOjpkdXJhdGlvbjo6bWluKCkgLQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnNfc2Vjb25kcyhtaW5fc2Vj
b25kcykpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnNfc2Vjb25k
cygxKSkKKyAgICAgICAgICAgIC5jb3VudCgpOworCit0ZW1wbGF0ZSA8Y2xhc3MgRmlsZVRpbWVU
LCBjbGFzcyBUaW1lVCwgY2xhc3MgVGltZVNwZWNUPgorc3RydWN0IHRpbWVfdXRpbCA6IHRpbWVf
dXRpbF9iYXNlPEZpbGVUaW1lVCwgVGltZVQ+IHsKKyAgdXNpbmcgQmFzZSA9IHRpbWVfdXRpbF9i
YXNlPEZpbGVUaW1lVCwgVGltZVQ+OworICB1c2luZyBCYXNlOjptYXhfbnNlYzsKKyAgdXNpbmcg
QmFzZTo6bWF4X3NlY29uZHM7CisgIHVzaW5nIEJhc2U6Om1pbl9uc2VjX3RpbWVzcGVjOworICB1
c2luZyBCYXNlOjptaW5fc2Vjb25kczsKKworICB1c2luZyB0eXBlbmFtZSBCYXNlOjpmc19kdXJh
dGlvbjsKKyAgdXNpbmcgdHlwZW5hbWUgQmFzZTo6ZnNfbWljcm9zZWNvbmRzOworICB1c2luZyB0
eXBlbmFtZSBCYXNlOjpmc19uYW5vc2Vjb25kczsKKyAgdXNpbmcgdHlwZW5hbWUgQmFzZTo6ZnNf
c2Vjb25kczsKKworcHVibGljOgorICB0ZW1wbGF0ZSA8Y2xhc3MgQ1R5cGUsIGNsYXNzIENocm9u
b1R5cGU+CisgIHN0YXRpYyBfTElCQ1BQX0NPTlNURVhQUl9BRlRFUl9DWFgxMSBib29sIGNoZWNr
ZWRfc2V0KENUeXBlKiBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENocm9ub1R5cGUgdGltZSkgeworICAgIHVzaW5nIExpbSA9IG51
bWVyaWNfbGltaXRzPENUeXBlPjsKKyAgICBpZiAodGltZSA+IExpbTo6bWF4KCkgfHwgdGltZSA8
IExpbTo6bWluKCkpCisgICAgICByZXR1cm4gZmFsc2U7CisgICAgKm91dCA9IHN0YXRpY19jYXN0
PENUeXBlPih0aW1lKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIHN0YXRpYyBfTElCQ1BQ
X0NPTlNURVhQUl9BRlRFUl9DWFgxMSBib29sIGlzX3JlcHJlc2VudGFibGUoVGltZVNwZWNUIHRt
KSB7CisgICAgaWYgKHRtLnR2X3NlYyA+PSAwKSB7CisgICAgICByZXR1cm4gdG0udHZfc2VjIDwg
bWF4X3NlY29uZHMgfHwKKyAgICAgICAgICAgICAodG0udHZfc2VjID09IG1heF9zZWNvbmRzICYm
IHRtLnR2X25zZWMgPD0gbWF4X25zZWMpOworICAgIH0gZWxzZSBpZiAodG0udHZfc2VjID09ICht
aW5fc2Vjb25kcyAtIDEpKSB7CisgICAgICByZXR1cm4gdG0udHZfbnNlYyA+PSBtaW5fbnNlY190
aW1lc3BlYzsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIHRtLnR2X3NlYyA+PSBtaW5fc2Vj
b25kczsKKyAgICB9CisgIH0KKworICBzdGF0aWMgX0xJQkNQUF9DT05TVEVYUFJfQUZURVJfQ1hY
MTEgYm9vbCBpc19yZXByZXNlbnRhYmxlKEZpbGVUaW1lVCB0bSkgeworICAgIGF1dG8gc2VjcyA9
IGR1cmF0aW9uX2Nhc3Q8ZnNfc2Vjb25kcz4odG0udGltZV9zaW5jZV9lcG9jaCgpKTsKKyAgICBh
dXRvIG5zZWNzID0gZHVyYXRpb25fY2FzdDxmc19uYW5vc2Vjb25kcz4odG0udGltZV9zaW5jZV9l
cG9jaCgpIC0gc2Vjcyk7CisgICAgaWYgKG5zZWNzLmNvdW50KCkgPCAwKSB7CisgICAgICBzZWNz
ID0gc2VjcyArIGZzX3NlY29uZHMoMSk7CisgICAgICBuc2VjcyA9IG5zZWNzICsgZnNfc2Vjb25k
cygxKTsKKyAgICB9CisgICAgdXNpbmcgVExpbSA9IG51bWVyaWNfbGltaXRzPFRpbWVUPjsKKyAg
ICBpZiAoc2Vjcy5jb3VudCgpID49IDApCisgICAgICByZXR1cm4gc2Vjcy5jb3VudCgpIDw9IFRM
aW06Om1heCgpOworICAgIHJldHVybiBzZWNzLmNvdW50KCkgPj0gVExpbTo6bWluKCk7CisgIH0K
KworICBzdGF0aWMgX0xJQkNQUF9DT05TVEVYUFJfQUZURVJfQ1hYMTEgRmlsZVRpbWVUCisgIGNv
bnZlcnRfZnJvbV90aW1lc3BlYyhUaW1lU3BlY1QgdG0pIHsKKyAgICBpZiAodG0udHZfc2VjID49
IDAgfHwgdG0udHZfbnNlYyA9PSAwKSB7CisgICAgICByZXR1cm4gRmlsZVRpbWVUKGZzX3NlY29u
ZHModG0udHZfc2VjKSArCisgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uX2Nhc3Q8ZnNf
ZHVyYXRpb24+KGZzX25hbm9zZWNvbmRzKHRtLnR2X25zZWMpKSk7CisgICAgfSBlbHNlIHsgLy8g
dG0udHZfc2VjIDwgMAorICAgICAgYXV0byBhZGpfc3Vic2VjID0gZHVyYXRpb25fY2FzdDxmc19k
dXJhdGlvbj4oZnNfc2Vjb25kcygxKSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmc19uYW5vc2Vjb25kcyh0bS50dl9uc2VjKSk7CisgICAgICBh
dXRvIER1ciA9IGZzX3NlY29uZHModG0udHZfc2VjICsgMSkgLSBhZGpfc3Vic2VjOworICAgICAg
cmV0dXJuIEZpbGVUaW1lVChEdXIpOworICAgIH0KKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBT
dWJTZWNUPgorICBzdGF0aWMgX0xJQkNQUF9DT05TVEVYUFJfQUZURVJfQ1hYMTEgYm9vbAorICBz
ZXRfdGltZXNfY2hlY2tlZChUaW1lVCogc2VjX291dCwgU3ViU2VjVCogc3Vic2VjX291dCwgRmls
ZVRpbWVUIHRwKSB7CisgICAgYXV0byBkdXIgPSB0cC50aW1lX3NpbmNlX2Vwb2NoKCk7CisgICAg
YXV0byBzZWNfZHVyID0gZHVyYXRpb25fY2FzdDxmc19zZWNvbmRzPihkdXIpOworICAgIGF1dG8g
c3Vic2VjX2R1ciA9IGR1cmF0aW9uX2Nhc3Q8ZnNfbmFub3NlY29uZHM+KGR1ciAtIHNlY19kdXIp
OworICAgIC8vIFRoZSB0dl9uc2VjIGFuZCB0dl91c2VjIGZpZWxkcyBtdXN0IG5vdCBiZSBuZWdh
dGl2ZSBzbyBhZGp1c3QgYWNjb3JkaW5nbHkKKyAgICBpZiAoc3Vic2VjX2R1ci5jb3VudCgpIDwg
MCkgeworICAgICAgaWYgKHNlY19kdXIuY291bnQoKSA+IG1pbl9zZWNvbmRzKSB7CisgICAgICAg
IHNlY19kdXIgPSBzZWNfZHVyIC0gZnNfc2Vjb25kcygxKTsKKyAgICAgICAgc3Vic2VjX2R1ciA9
IHN1YnNlY19kdXIgKyBmc19zZWNvbmRzKDEpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgc3Vi
c2VjX2R1ciA9IGZzX25hbm9zZWNvbmRzOjp6ZXJvKCk7CisgICAgICB9CisgICAgfQorICAgIHJl
dHVybiBjaGVja2VkX3NldChzZWNfb3V0LCBzZWNfZHVyLmNvdW50KCkpICYmCisgICAgICAgICAg
IGNoZWNrZWRfc2V0KHN1YnNlY19vdXQsIHN1YnNlY19kdXIuY291bnQoKSk7CisgIH0KKyAgc3Rh
dGljIF9MSUJDUFBfQ09OU1RFWFBSX0FGVEVSX0NYWDExIGJvb2wgY29udmVydF90b190aW1lc3Bl
YyhUaW1lU3BlY1QmIGRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZVRpbWVUIHRwKSB7CisgICAgaWYgKCFpc19y
ZXByZXNlbnRhYmxlKHRwKSkKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gc2V0X3Rp
bWVzX2NoZWNrZWQoJmRlc3QudHZfc2VjLCAmZGVzdC50dl9uc2VjLCB0cCk7CisgIH0KK307CisK
K3VzaW5nIGZzX3RpbWUgPSB0aW1lX3V0aWw8ZmlsZV90aW1lX3R5cGUsIHRpbWVfdCwgVGltZVNw
ZWM+OworCisjaWYgZGVmaW5lZChfX0FQUExFX18pCitUaW1lU3BlYyBleHRyYWN0X210aW1lKFN0
YXRUIGNvbnN0JiBzdCkgeyByZXR1cm4gc3Quc3RfbXRpbWVzcGVjOyB9CitUaW1lU3BlYyBleHRy
YWN0X2F0aW1lKFN0YXRUIGNvbnN0JiBzdCkgeyByZXR1cm4gc3Quc3RfYXRpbWVzcGVjOyB9Cisj
ZWxzZQorVGltZVNwZWMgZXh0cmFjdF9tdGltZShTdGF0VCBjb25zdCYgc3QpIHsgcmV0dXJuIHN0
LnN0X210aW07IH0KK1RpbWVTcGVjIGV4dHJhY3RfYXRpbWUoU3RhdFQgY29uc3QmIHN0KSB7IHJl
dHVybiBzdC5zdF9hdGltOyB9CisjZW5kaWYKKworLy8gYWxsb3cgdGhlIHV0aW1lcyBpbXBsZW1l
bnRhdGlvbiB0byBjb21waWxlIGV2ZW4gaXQgd2UncmUgbm90IGdvaW5nCisvLyB0byB1c2UgaXQu
CisKK2Jvb2wgcG9zaXhfdXRpbWVzKGNvbnN0IHBhdGgmIHAsIHN0ZDo6YXJyYXk8VGltZVNwZWMs
IDI+IGNvbnN0JiBUUywKKyAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKSB7CisgIHVz
aW5nIG5hbWVzcGFjZSBjaHJvbm87CisgIGF1dG8gQ29udmVydCA9IFtdKGxvbmcgbnNlYykgewor
ICAgIHVzaW5nIGludF90eXBlID0gZGVjbHR5cGUoc3RkOjpkZWNsdmFsPCA6OnRpbWV2YWw+KCku
dHZfdXNlYyk7CisgICAgYXV0byBkdXIgPSBkdXJhdGlvbl9jYXN0PG1pY3Jvc2Vjb25kcz4obmFu
b3NlY29uZHMobnNlYykpLmNvdW50KCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBl
PihkdXIpOworICB9OworICBzdHJ1Y3QgOjp0aW1ldmFsIENvbnZlcnRlZFRTWzJdID0ge3tUU1sw
XS50dl9zZWMsIENvbnZlcnQoVFNbMF0udHZfbnNlYyl9LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHtUU1sxXS50dl9zZWMsIENvbnZlcnQoVFNbMV0udHZfbnNlYyl9fTsK
KyAgaWYgKDo6dXRpbWVzKHAuY19zdHIoKSwgQ29udmVydGVkVFMpID09IC0xKSB7CisgICAgZWMg
PSBjYXB0dXJlX2Vycm5vKCk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgcmV0dXJuIGZhbHNl
OworfQorCisjaWYgZGVmaW5lZChfTElCQ1BQX1VTRV9VVElNRU5TQVQpCitib29sIHBvc2l4X3V0
aW1lbnNhdChjb25zdCBwYXRoJiBwLCBzdGQ6OmFycmF5PFRpbWVTcGVjLCAyPiBjb25zdCYgVFMs
CisgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYykgeworICBpZiAoOjp1dGltZW5z
YXQoQVRfRkRDV0QsIHAuY19zdHIoKSwgVFMuZGF0YSgpLCAwKSA9PSAtMSkgeworICAgIGVjID0g
Y2FwdHVyZV9lcnJubygpOworICAgIHJldHVybiB0cnVlOworICB9CisgIHJldHVybiBmYWxzZTsK
K30KKyNlbmRpZgorCitib29sIHNldF9maWxlX3RpbWVzKGNvbnN0IHBhdGgmIHAsIHN0ZDo6YXJy
YXk8VGltZVNwZWMsIDI+IGNvbnN0JiBUUywKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29k
ZSYgZWMpIHsKKyNpZiAhZGVmaW5lZChfTElCQ1BQX1VTRV9VVElNRU5TQVQpCisgIHJldHVybiBw
b3NpeF91dGltZXMocCwgVFMsIGVjKTsKKyNlbHNlCisgIHJldHVybiBwb3NpeF91dGltZW5zYXQo
cCwgVFMsIGVjKTsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZQorfSAvLyBlbmQgbmFtZXNw
YWNlIGRldGFpbAorCitfTElCQ1BQX0VORF9OQU1FU1BBQ0VfRklMRVNZU1RFTQorCisvKiAtLSBF
TkQgZmlsZXN5c3RlbS9maWxlc3lzdGVtX2NvbW1vbi5oIC0tICovCisKKy8qIC0tIEJFR0lOIGZp
bGVzeXN0ZW0vZGlyZWN0b3J5X2l0ZXJhdG9yLmNwcCAtLSAqLworCisjaWYgZGVmaW5lZChfTElC
Q1BQX1dJTjMyQVBJKQorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjaW5jbHVkZSA8V2lu
ZG93cy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGVy
cm5vLmg+CisKKy8qICNpbmNsdWRlICJmaWxlc3lzdGVtX2NvbW1vbi5oIiAqLworCitfTElCQ1BQ
X0JFR0lOX05BTUVTUEFDRV9GSUxFU1lTVEVNCisKK25hbWVzcGFjZSBkZXRhaWwgeworbmFtZXNw
YWNlIHsKKworI2lmICFkZWZpbmVkKF9MSUJDUFBfV0lOMzJBUEkpCit0ZW1wbGF0ZSA8Y2xhc3Mg
RGlyRW50VCwgY2xhc3MgPSBkZWNsdHlwZShEaXJFbnRUOjpkX3R5cGUpPgorc3RhdGljIGZpbGVf
dHlwZSBnZXRfZmlsZV90eXBlKERpckVudFQqIGVudCwgaW50KSB7CisgIHN3aXRjaCAoZW50LT5k
X3R5cGUpIHsKKyAgY2FzZSBEVF9CTEs6CisgICAgcmV0dXJuIGZpbGVfdHlwZTo6YmxvY2s7Cisg
IGNhc2UgRFRfQ0hSOgorICAgIHJldHVybiBmaWxlX3R5cGU6OmNoYXJhY3RlcjsKKyAgY2FzZSBE
VF9ESVI6CisgICAgcmV0dXJuIGZpbGVfdHlwZTo6ZGlyZWN0b3J5OworICBjYXNlIERUX0ZJRk86
CisgICAgcmV0dXJuIGZpbGVfdHlwZTo6ZmlmbzsKKyAgY2FzZSBEVF9MTks6CisgICAgcmV0dXJu
IGZpbGVfdHlwZTo6c3ltbGluazsKKyAgY2FzZSBEVF9SRUc6CisgICAgcmV0dXJuIGZpbGVfdHlw
ZTo6cmVndWxhcjsKKyAgY2FzZSBEVF9TT0NLOgorICAgIHJldHVybiBmaWxlX3R5cGU6OnNvY2tl
dDsKKyAgLy8gVW5saWtlIGluIGxzdGF0LCBoaXR0aW5nICJ1bmtub3duIiBoZXJlIHNpbXBseSBt
ZWFucyB0aGF0IHRoZSB1bmRlcmx5aW5nCisgIC8vIGZpbGVzeXN0ZW0gZG9lc24ndCBzdXBwb3J0
IGRfdHlwZS4gUmVwb3J0IGlzIGFzICdub25lJyBzbyB3ZSBjb3JyZWN0bHkKKyAgLy8gc2V0IHRo
ZSBjYWNoZSB0byBlbXB0eS4KKyAgY2FzZSBEVF9VTktOT1dOOgorICAgIGJyZWFrOworICB9Cisg
IHJldHVybiBmaWxlX3R5cGU6Om5vbmU7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBEaXJFbnRUPgor
c3RhdGljIGZpbGVfdHlwZSBnZXRfZmlsZV90eXBlKERpckVudFQqIGVudCwgbG9uZykgeworICBy
ZXR1cm4gZmlsZV90eXBlOjpub25lOworfQorCitzdGF0aWMgcGFpcjxzdHJpbmdfdmlldywgZmls
ZV90eXBlPiBwb3NpeF9yZWFkZGlyKERJUiogZGlyX3N0cmVhbSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgZWMpIHsKKyAgc3Ry
dWN0IGRpcmVudCogZGlyX2VudHJ5X3B0ciA9IG51bGxwdHI7CisgIGVycm5vID0gMDsgLy8gemVy
byBlcnJubyBpbiBvcmRlciB0byBkZXRlY3QgZXJyb3JzCisgIGVjLmNsZWFyKCk7CisgIGlmICgo
ZGlyX2VudHJ5X3B0ciA9IDo6cmVhZGRpcihkaXJfc3RyZWFtKSkgPT0gbnVsbHB0cikgeworICAg
IGlmIChlcnJubykKKyAgICAgIGVjID0gY2FwdHVyZV9lcnJubygpOworICAgIHJldHVybiB7fTsK
KyAgfSBlbHNlIHsKKyAgICByZXR1cm4ge2Rpcl9lbnRyeV9wdHItPmRfbmFtZSwgZ2V0X2ZpbGVf
dHlwZShkaXJfZW50cnlfcHRyLCAwKX07CisgIH0KK30KKyNlbHNlCisKK3N0YXRpYyBmaWxlX3R5
cGUgZ2V0X2ZpbGVfdHlwZShjb25zdCBXSU4zMl9GSU5EX0RBVEEmIGRhdGEpIHsKKyAgLy9hdXRv
IGF0dHJzID0gZGF0YS5kd0ZpbGVBdHRyaWJ1dGVzOworICAvLyBGSVhNRShFcmljV0YpCisgIHJl
dHVybiBmaWxlX3R5cGU6OnVua25vd247Cit9CitzdGF0aWMgdWludG1heF90IGdldF9maWxlX3Np
emUoY29uc3QgV0lOMzJfRklORF9EQVRBJiBkYXRhKSB7CisgIHJldHVybiAoZGF0YS5uRmlsZVNp
emVIaWdodCAqIChNQVhEV09SRCArIDEpKSArIGRhdGEubkZpbGVTaXplTG93OworfQorc3RhdGlj
IGZpbGVfdGltZV90eXBlIGdldF93cml0ZV90aW1lKGNvbnN0IFdJTjMyX0ZJTkRfREFUQSYgZGF0
YSkgeworICBVTEFSR0VfSU5URUdFUiB0bXA7CisgIEZJTEVUSU1FJiB0aW1lID0gZGF0YS5mdExh
c3RXcml0ZVRpbWU7CisgIHRtcC51Lkxvd1BhcnQgPSB0aW1lLmR3TG93RGF0ZVRpbWU7CisgIHRt
cC51LkhpZ2hQYXJ0ID0gdGltZS5kd0hpZ2hEYXRlVGltZTsKKyAgcmV0dXJuIGZpbGVfdGltZV90
eXBlKGZpbGVfdGltZV90eXBlOjpkdXJhdGlvbih0aW1lLlF1YWRQYXJ0KSk7Cit9CisKKyNlbmRp
ZgorCit9IC8vIG5hbWVzcGFjZQorfSAvLyBuYW1lc3BhY2UgZGV0YWlsCisKK3VzaW5nIGRldGFp
bDo6RXJyb3JIYW5kbGVyOworCisjaWYgZGVmaW5lZChfTElCQ1BQX1dJTjMyQVBJKQorY2xhc3Mg
X19kaXJfc3RyZWFtIHsKK3B1YmxpYzoKKyAgX19kaXJfc3RyZWFtKCkgPSBkZWxldGU7CisgIF9f
ZGlyX3N0cmVhbSYgb3BlcmF0b3I9KGNvbnN0IF9fZGlyX3N0cmVhbSYpID0gZGVsZXRlOworCisg
IF9fZGlyX3N0cmVhbShfX2Rpcl9zdHJlYW0mJiBfX2RzKSBub2V4Y2VwdCA6IF9fc3RyZWFtXyhf
X2RzLl9fc3RyZWFtXyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fcm9vdF8obW92ZShfX2RzLl9fcm9vdF8pKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lbnRyeV8obW92ZShfX2RzLl9fZW50cnlfKSkg
eworICAgIF9fZHMuX19zdHJlYW1fID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisgIH0KKworICBf
X2Rpcl9zdHJlYW0oY29uc3QgcGF0aCYgcm9vdCwgZGlyZWN0b3J5X29wdGlvbnMgb3B0cywgZXJy
b3JfY29kZSYgZWMpCisgICAgICA6IF9fc3RyZWFtXyhJTlZBTElEX0hBTkRMRV9WQUxVRSksIF9f
cm9vdF8ocm9vdCkgeworICAgIF9fc3RyZWFtXyA9IDo6RmluZEZpcnN0RmlsZUV4KHJvb3QuY19z
dHIoKSwgJl9fZGF0YV8pOworICAgIGlmIChfX3N0cmVhbV8gPT0gSU5WQUxJRF9IQU5ETEVfVkFM
VUUpIHsKKyAgICAgIGVjID0gZXJyb3JfY29kZSg6OkdldExhc3RFcnJvcigpLCBnZW5lcmljX2Nh
dGVnb3J5KCkpOworICAgICAgY29uc3QgYm9vbCBpZ25vcmVfcGVybWlzc2lvbl9kZW5pZWQgPQor
ICAgICAgICAgIGJvb2wob3B0cyAmIGRpcmVjdG9yeV9vcHRpb25zOjpza2lwX3Blcm1pc3Npb25f
ZGVuaWVkKTsKKyAgICAgIGlmIChpZ25vcmVfcGVybWlzc2lvbl9kZW5pZWQgJiYgZWMudmFsdWUo
KSA9PSBFUlJPUl9BQ0NFU1NfREVOSUVEKQorICAgICAgICBlYy5jbGVhcigpOworICAgICAgcmV0
dXJuOworICAgIH0KKyAgfQorCisgIH5fX2Rpcl9zdHJlYW0oKSBub2V4Y2VwdCB7CisgICAgaWYg
KF9fc3RyZWFtXyA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKyAgICAgIHJldHVybjsKKyAgICBj
bG9zZSgpOworICB9CisKKyAgYm9vbCBnb29kKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gX19z
dHJlYW1fICE9IElOVkFMSURfSEFORExFX1ZBTFVFOyB9CisKKyAgYm9vbCBhZHZhbmNlKGVycm9y
X2NvZGUmIGVjKSB7CisgICAgd2hpbGUgKDo6RmluZE5leHRGaWxlKF9fc3RyZWFtXywgJl9fZGF0
YV8pKSB7CisgICAgICBpZiAoIXN0cmNtcChfX2RhdGFfLmNGaWxlTmFtZSwgIi4iKSB8fCBzdHJj
bXAoX19kYXRhXy5jRmlsZU5hbWUsICIuLiIpKQorICAgICAgICBjb250aW51ZTsKKyAgICAgIC8v
IEZJWE1FOiBDYWNoZSBtb3JlIG9mIHRoaXMKKyAgICAgIC8vZGlyZWN0b3J5X2VudHJ5OjpfX2Nh
Y2hlZF9kYXRhIGNkYXRhOworICAgICAgLy9jZGF0YS5fX3R5cGVfID0gZ2V0X2ZpbGVfdHlwZShf
X2RhdGFfKTsKKyAgICAgIC8vY2RhdGEuX19zaXplXyA9IGdldF9maWxlX3NpemUoX19kYXRhXyk7
CisgICAgICAvL2NkYXRhLl9fd3JpdGVfdGltZV8gPSBnZXRfd3JpdGVfdGltZShfX2RhdGFfKTsK
KyAgICAgIF9fZW50cnlfLl9fYXNzaWduX2l0ZXJfZW50cnkoCisgICAgICAgICAgX19yb290XyAv
IF9fZGF0YV8uY0ZpbGVOYW1lLAorICAgICAgICAgIGRpcmVjdG9yeV9lbnRyeTo6X19jcmVhdGVf
aXRlcl9yZXN1bHQoZ2V0X2ZpbGVfdHlwZShfX2RhdGEpKSk7CisgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgZWMgPSBlcnJvcl9jb2RlKDo6R2V0TGFzdEVycm9yKCksIGdlbmVyaWNfY2F0
ZWdvcnkoKSk7CisgICAgY2xvc2UoKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworcHJpdmF0
ZToKKyAgZXJyb3JfY29kZSBjbG9zZSgpIG5vZXhjZXB0IHsKKyAgICBlcnJvcl9jb2RlIGVjOwor
ICAgIGlmICghOjpGaW5kQ2xvc2UoX19zdHJlYW1fKSkKKyAgICAgIGVjID0gZXJyb3JfY29kZSg6
OkdldExhc3RFcnJvcigpLCBnZW5lcmljX2NhdGVnb3J5KCkpOworICAgIF9fc3RyZWFtXyA9IElO
VkFMSURfSEFORExFX1ZBTFVFOworICAgIHJldHVybiBlYzsKKyAgfQorCisgIEhBTkRMRSBfX3N0
cmVhbV97SU5WQUxJRF9IQU5ETEVfVkFMVUV9OworICBXSU4zMl9GSU5EX0RBVEEgX19kYXRhXzsK
KworcHVibGljOgorICBwYXRoIF9fcm9vdF87CisgIGRpcmVjdG9yeV9lbnRyeSBfX2VudHJ5XzsK
K307CisjZWxzZQorY2xhc3MgX19kaXJfc3RyZWFtIHsKK3B1YmxpYzoKKyAgX19kaXJfc3RyZWFt
KCkgPSBkZWxldGU7CisgIF9fZGlyX3N0cmVhbSYgb3BlcmF0b3I9KGNvbnN0IF9fZGlyX3N0cmVh
bSYpID0gZGVsZXRlOworCisgIF9fZGlyX3N0cmVhbShfX2Rpcl9zdHJlYW0mJiBvdGhlcikgbm9l
eGNlcHQgOiBfX3N0cmVhbV8ob3RoZXIuX19zdHJlYW1fKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcm9vdF8obW92ZShvdGhlci5fX3Jvb3RfKSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2VudHJ5
Xyhtb3ZlKG90aGVyLl9fZW50cnlfKSkgeworICAgIG90aGVyLl9fc3RyZWFtXyA9IG51bGxwdHI7
CisgIH0KKworICBfX2Rpcl9zdHJlYW0oY29uc3QgcGF0aCYgcm9vdCwgZGlyZWN0b3J5X29wdGlv
bnMgb3B0cywgZXJyb3JfY29kZSYgZWMpCisgICAgICA6IF9fc3RyZWFtXyhudWxscHRyKSwgX19y
b290Xyhyb290KSB7CisgICAgaWYgKChfX3N0cmVhbV8gPSA6Om9wZW5kaXIocm9vdC5jX3N0cigp
KSkgPT0gbnVsbHB0cikgeworICAgICAgZWMgPSBkZXRhaWw6OmNhcHR1cmVfZXJybm8oKTsKKyAg
ICAgIGNvbnN0IGJvb2wgYWxsb3dfZWFjZXNzID0KKyAgICAgICAgICBib29sKG9wdHMgJiBkaXJl
Y3Rvcnlfb3B0aW9uczo6c2tpcF9wZXJtaXNzaW9uX2RlbmllZCk7CisgICAgICBpZiAoYWxsb3df
ZWFjZXNzICYmIGVjLnZhbHVlKCkgPT0gRUFDQ0VTKQorICAgICAgICBlYy5jbGVhcigpOworICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBhZHZhbmNlKGVjKTsKKyAgfQorCisgIH5fX2Rpcl9zdHJl
YW0oKSBub2V4Y2VwdCB7CisgICAgaWYgKF9fc3RyZWFtXykKKyAgICAgIGNsb3NlKCk7CisgIH0K
KworICBib29sIGdvb2QoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfX3N0cmVhbV8gIT0gbnVs
bHB0cjsgfQorCisgIGJvb2wgYWR2YW5jZShlcnJvcl9jb2RlJiBlYykgeworICAgIHdoaWxlICh0
cnVlKSB7CisgICAgICBhdXRvIHN0cl90eXBlX3BhaXIgPSBkZXRhaWw6OnBvc2l4X3JlYWRkaXIo
X19zdHJlYW1fLCBlYyk7CisgICAgICBhdXRvJiBzdHIgPSBzdHJfdHlwZV9wYWlyLmZpcnN0Owor
ICAgICAgaWYgKHN0ciA9PSAiLiIgfHwgc3RyID09ICIuLiIpIHsKKyAgICAgICAgY29udGludWU7
CisgICAgICB9IGVsc2UgaWYgKGVjIHx8IHN0ci5lbXB0eSgpKSB7CisgICAgICAgIGNsb3NlKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIF9fZW50cnlf
Ll9fYXNzaWduX2l0ZXJfZW50cnkoCisgICAgICAgICAgICBfX3Jvb3RfIC8gc3RyLAorICAgICAg
ICAgICAgZGlyZWN0b3J5X2VudHJ5OjpfX2NyZWF0ZV9pdGVyX3Jlc3VsdChzdHJfdHlwZV9wYWly
LnNlY29uZCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICB9CisgIH0KKwor
cHJpdmF0ZToKKyAgZXJyb3JfY29kZSBjbG9zZSgpIG5vZXhjZXB0IHsKKyAgICBlcnJvcl9jb2Rl
IG1fZWM7CisgICAgaWYgKDo6Y2xvc2VkaXIoX19zdHJlYW1fKSA9PSAtMSkKKyAgICAgIG1fZWMg
PSBkZXRhaWw6OmNhcHR1cmVfZXJybm8oKTsKKyAgICBfX3N0cmVhbV8gPSBudWxscHRyOworICAg
IHJldHVybiBtX2VjOworICB9CisKKyAgRElSKiBfX3N0cmVhbV97bnVsbHB0cn07CisKK3B1Ymxp
YzoKKyAgcGF0aCBfX3Jvb3RfOworICBkaXJlY3RvcnlfZW50cnkgX19lbnRyeV87Cit9OworI2Vu
ZGlmCisKKy8vIGRpcmVjdG9yeV9pdGVyYXRvcgorCitkaXJlY3RvcnlfaXRlcmF0b3I6OmRpcmVj
dG9yeV9pdGVyYXRvcihjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeV9vcHRpb25zIG9wdHMpIHsKKyAg
RXJyb3JIYW5kbGVyPHZvaWQ+IGVycigiZGlyZWN0b3J5X2l0ZXJhdG9yOjpkaXJlY3RvcnlfaXRl
cmF0b3IoLi4uKSIsIGVjLCAmcCk7CisKKyAgZXJyb3JfY29kZSBtX2VjOworICBfX2ltcF8gPSBt
YWtlX3NoYXJlZDxfX2Rpcl9zdHJlYW0+KHAsIG9wdHMsIG1fZWMpOworICBpZiAoZWMpCisgICAg
KmVjID0gbV9lYzsKKyAgaWYgKCFfX2ltcF8tPmdvb2QoKSkgeworICAgIF9faW1wXy5yZXNldCgp
OworICAgIGlmIChtX2VjKQorICAgICAgZXJyLnJlcG9ydChtX2VjKTsKKyAgfQorfQorCitkaXJl
Y3RvcnlfaXRlcmF0b3ImIGRpcmVjdG9yeV9pdGVyYXRvcjo6X19pbmNyZW1lbnQoZXJyb3JfY29k
ZSogZWMpIHsKKyAgX0xJQkNQUF9BU1NFUlQoX19pbXBfLCAiQXR0ZW1wdGluZyB0byBpbmNyZW1l
bnQgYW4gaW52YWxpZCBpdGVyYXRvciIpOworICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJkaXJl
Y3RvcnlfaXRlcmF0b3I6Om9wZXJhdG9yKysoKSIsIGVjKTsKKworICBlcnJvcl9jb2RlIG1fZWM7
CisgIGlmICghX19pbXBfLT5hZHZhbmNlKG1fZWMpKSB7CisgICAgcGF0aCByb290ID0gbW92ZShf
X2ltcF8tPl9fcm9vdF8pOworICAgIF9faW1wXy5yZXNldCgpOworICAgIGlmIChtX2VjKQorICAg
ICAgZXJyLnJlcG9ydChtX2VjLCAiYXQgcm9vdCBcIiVzXCIiLCByb290KTsKKyAgfQorICByZXR1
cm4gKnRoaXM7Cit9CisKK2RpcmVjdG9yeV9lbnRyeSBjb25zdCYgZGlyZWN0b3J5X2l0ZXJhdG9y
OjpfX2RlcmVmZXJlbmNlKCkgY29uc3QgeworICBfTElCQ1BQX0FTU0VSVChfX2ltcF8sICJBdHRl
bXB0aW5nIHRvIGRlcmVmZXJlbmNlIGFuIGludmFsaWQgaXRlcmF0b3IiKTsKKyAgcmV0dXJuIF9f
aW1wXy0+X19lbnRyeV87Cit9CisKKy8vIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IKKwor
c3RydWN0IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I6Ol9fc2hhcmVkX2ltcCB7CisgIHN0
YWNrPF9fZGlyX3N0cmVhbT4gX19zdGFja187CisgIGRpcmVjdG9yeV9vcHRpb25zIF9fb3B0aW9u
c187Cit9OworCityZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yOjpyZWN1cnNpdmVfZGlyZWN0
b3J5X2l0ZXJhdG9yKAorICAgIGNvbnN0IHBhdGgmIHAsIGRpcmVjdG9yeV9vcHRpb25zIG9wdCwg
ZXJyb3JfY29kZSogZWMpCisgICAgOiBfX2ltcF8obnVsbHB0ciksIF9fcmVjXyh0cnVlKSB7Cisg
IEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoInJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IiLCBl
YywgJnApOworCisgIGVycm9yX2NvZGUgbV9lYzsKKyAgX19kaXJfc3RyZWFtIG5ld19zKHAsIG9w
dCwgbV9lYyk7CisgIGlmIChtX2VjKQorICAgIGVyci5yZXBvcnQobV9lYyk7CisgIGlmIChtX2Vj
IHx8ICFuZXdfcy5nb29kKCkpCisgICAgcmV0dXJuOworCisgIF9faW1wXyA9IG1ha2Vfc2hhcmVk
PF9fc2hhcmVkX2ltcD4oKTsKKyAgX19pbXBfLT5fX29wdGlvbnNfID0gb3B0OworICBfX2ltcF8t
Pl9fc3RhY2tfLnB1c2gobW92ZShuZXdfcykpOworfQorCit2b2lkIHJlY3Vyc2l2ZV9kaXJlY3Rv
cnlfaXRlcmF0b3I6Ol9fcG9wKGVycm9yX2NvZGUqIGVjKSB7CisgIF9MSUJDUFBfQVNTRVJUKF9f
aW1wXywgIlBvcHBpbmcgdGhlIGVuZCBpdGVyYXRvciIpOworICBpZiAoZWMpCisgICAgZWMtPmNs
ZWFyKCk7CisgIF9faW1wXy0+X19zdGFja18ucG9wKCk7CisgIGlmIChfX2ltcF8tPl9fc3RhY2tf
LnNpemUoKSA9PSAwKQorICAgIF9faW1wXy5yZXNldCgpOworICBlbHNlCisgICAgX19hZHZhbmNl
KGVjKTsKK30KKworZGlyZWN0b3J5X29wdGlvbnMgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRv
cjo6b3B0aW9ucygpIGNvbnN0IHsKKyAgcmV0dXJuIF9faW1wXy0+X19vcHRpb25zXzsKK30KKwor
aW50IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I6OmRlcHRoKCkgY29uc3QgeworICByZXR1
cm4gX19pbXBfLT5fX3N0YWNrXy5zaXplKCkgLSAxOworfQorCitjb25zdCBkaXJlY3RvcnlfZW50
cnkmIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I6Ol9fZGVyZWZlcmVuY2UoKSBjb25zdCB7
CisgIHJldHVybiBfX2ltcF8tPl9fc3RhY2tfLnRvcCgpLl9fZW50cnlfOworfQorCityZWN1cnNp
dmVfZGlyZWN0b3J5X2l0ZXJhdG9yJgorcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjo6X19p
bmNyZW1lbnQoZXJyb3JfY29kZSogZWMpIHsKKyAgaWYgKGVjKQorICAgIGVjLT5jbGVhcigpOwor
ICBpZiAocmVjdXJzaW9uX3BlbmRpbmcoKSkgeworICAgIGlmIChfX3RyeV9yZWN1cnNpb24oZWMp
IHx8IChlYyAmJiAqZWMpKQorICAgICAgcmV0dXJuICp0aGlzOworICB9CisgIF9fcmVjXyA9IHRy
dWU7CisgIF9fYWR2YW5jZShlYyk7CisgIHJldHVybiAqdGhpczsKK30KKwordm9pZCByZWN1cnNp
dmVfZGlyZWN0b3J5X2l0ZXJhdG9yOjpfX2FkdmFuY2UoZXJyb3JfY29kZSogZWMpIHsKKyAgRXJy
b3JIYW5kbGVyPHZvaWQ+IGVycigicmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjo6b3BlcmF0
b3IrKygpIiwgZWMpOworCisgIGNvbnN0IGRpcmVjdG9yeV9pdGVyYXRvciBlbmRfaXQ7CisgIGF1
dG8mIHN0YWNrID0gX19pbXBfLT5fX3N0YWNrXzsKKyAgZXJyb3JfY29kZSBtX2VjOworICB3aGls
ZSAoc3RhY2suc2l6ZSgpID4gMCkgeworICAgIGlmIChzdGFjay50b3AoKS5hZHZhbmNlKG1fZWMp
KQorICAgICAgcmV0dXJuOworICAgIGlmIChtX2VjKQorICAgICAgYnJlYWs7CisgICAgc3RhY2su
cG9wKCk7CisgIH0KKworICBpZiAobV9lYykgeworICAgIHBhdGggcm9vdCA9IG1vdmUoc3RhY2su
dG9wKCkuX19yb290Xyk7CisgICAgX19pbXBfLnJlc2V0KCk7CisgICAgZXJyLnJlcG9ydChtX2Vj
LCAiYXQgcm9vdCBcIiVzXCIiLCByb290KTsKKyAgfSBlbHNlIHsKKyAgICBfX2ltcF8ucmVzZXQo
KTsKKyAgfQorfQorCitib29sIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I6Ol9fdHJ5X3Jl
Y3Vyc2lvbihlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJyZWN1
cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yOjpvcGVyYXRvcisrKCkiLCBlYyk7CisKKyAgYm9vbCBy
ZWNfc3ltID0gYm9vbChvcHRpb25zKCkgJiBkaXJlY3Rvcnlfb3B0aW9uczo6Zm9sbG93X2RpcmVj
dG9yeV9zeW1saW5rKTsKKworICBhdXRvJiBjdXJyX2l0ID0gX19pbXBfLT5fX3N0YWNrXy50b3Ao
KTsKKworICBib29sIHNraXBfcmVjID0gZmFsc2U7CisgIGVycm9yX2NvZGUgbV9lYzsKKyAgaWYg
KCFyZWNfc3ltKSB7CisgICAgZmlsZV9zdGF0dXMgc3QoY3Vycl9pdC5fX2VudHJ5Xy5fX2dldF9z
eW1fZnQoJm1fZWMpKTsKKyAgICBpZiAobV9lYyAmJiBzdGF0dXNfa25vd24oc3QpKQorICAgICAg
bV9lYy5jbGVhcigpOworICAgIGlmIChtX2VjIHx8IGlzX3N5bWxpbmsoc3QpIHx8ICFpc19kaXJl
Y3Rvcnkoc3QpKQorICAgICAgc2tpcF9yZWMgPSB0cnVlOworICB9IGVsc2UgeworICAgIGZpbGVf
c3RhdHVzIHN0KGN1cnJfaXQuX19lbnRyeV8uX19nZXRfZnQoJm1fZWMpKTsKKyAgICBpZiAobV9l
YyAmJiBzdGF0dXNfa25vd24oc3QpKQorICAgICAgbV9lYy5jbGVhcigpOworICAgIGlmIChtX2Vj
IHx8ICFpc19kaXJlY3Rvcnkoc3QpKQorICAgICAgc2tpcF9yZWMgPSB0cnVlOworICB9CisKKyAg
aWYgKCFza2lwX3JlYykgeworICAgIF9fZGlyX3N0cmVhbSBuZXdfaXQoY3Vycl9pdC5fX2VudHJ5
Xy5wYXRoKCksIF9faW1wXy0+X19vcHRpb25zXywgbV9lYyk7CisgICAgaWYgKG5ld19pdC5nb29k
KCkpIHsKKyAgICAgIF9faW1wXy0+X19zdGFja18ucHVzaChtb3ZlKG5ld19pdCkpOworICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICB9CisgIGlmIChtX2VjKSB7CisgICAgY29uc3QgYm9vbCBh
bGxvd19lYWNlc3MgPQorICAgICAgICBib29sKF9faW1wXy0+X19vcHRpb25zXyAmIGRpcmVjdG9y
eV9vcHRpb25zOjpza2lwX3Blcm1pc3Npb25fZGVuaWVkKTsKKyAgICBpZiAobV9lYy52YWx1ZSgp
ID09IEVBQ0NFUyAmJiBhbGxvd19lYWNlc3MpIHsKKyAgICAgIGlmIChlYykKKyAgICAgICAgZWMt
PmNsZWFyKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHBhdGggYXRfZW50ID0gbW92ZShjdXJyX2l0
Ll9fZW50cnlfLl9fcF8pOworICAgICAgX19pbXBfLnJlc2V0KCk7CisgICAgICBlcnIucmVwb3J0
KG1fZWMsICJhdHRlbXB0aW5nIHJlY3Vyc2lvbiBpbnRvIFwiJXNcIiIsIGF0X2VudCk7CisgICAg
fQorICB9CisgIHJldHVybiBmYWxzZTsKK30KKworX0xJQkNQUF9FTkRfTkFNRVNQQUNFX0ZJTEVT
WVNURU0KKworLyogLS0gRU5EIGZpbGVzeXN0ZW0vZGlyZWN0b3J5X2l0ZXJhdG9yLmNwcCAtLSAq
LworCisvKiAtLSBCRUdJTiBmaWxlc3lzdGVtL2ludDEyOF9idWlsdGlucy5jcHAgLS0gKi8KKwor
LyogPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLT09PQorICoKKyAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIF9fbXVs
b3RpNCwgYW5kIGlzIHN0b2xlbiBmcm9tIHRoZSBjb21waWxlcl9ydCBsaWJyYXJ5LgorICoKKyAq
IEZJWE1FOiB3ZSBzdGVhbCBhbmQgcmUtY29tcGlsZSBpdCBpbnRvIGZpbGVzeXN0ZW0sIHdoaWNo
IHVzZXMgX19pbnQxMjhfdCwKKyAqIGFuZCByZXF1aXJlcyB0aGlzIGJ1aWx0aW4gd2hlbiBzYW5p
dGl6ZWQuIFNlZSBsbHZtLm9yZy9QUjMwNjQzCisgKgorICogPT09LS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PQor
ICovCisKKy8qICNpbmNsdWRlICJfX2NvbmZpZyIgKi8KKyNpbmNsdWRlIDxjbGltaXRzPgorCisj
aWZuZGVmIF9fU0laRU9GX0lOVDEyOF9fCisjZGVmaW5lIF9MSUJDUFBfSEFTX05PX0lOVDEyOAor
I2VuZGlmCisKKyNpZiAhZGVmaW5lZChfTElCQ1BQX0hBU19OT19JTlQxMjgpCisKKyNpZmRlZiBf
X2NsYW5nX18KKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLXByb3RvdHlwZXMiCisjZW5kaWYKK2V4dGVybiAi
QyIgX19hdHRyaWJ1dGVfXygobm9fc2FuaXRpemUoInVuZGVmaW5lZCIpKSkKK19faW50MTI4X3Qg
X19tdWxvdGk0KF9faW50MTI4X3QgYSwgX19pbnQxMjhfdCBiLCBpbnQqIG92ZXJmbG93KSB7Cisg
IGNvbnN0IGludCBOID0gKGludCkoc2l6ZW9mKF9faW50MTI4X3QpICogQ0hBUl9CSVQpOworICBj
b25zdCBfX2ludDEyOF90IE1JTiA9IChfX2ludDEyOF90KTEgPDwgKE4gLSAxKTsKKyAgY29uc3Qg
X19pbnQxMjhfdCBNQVggPSB+TUlOOworICAqb3ZlcmZsb3cgPSAwOworICBfX2ludDEyOF90IHJl
c3VsdCA9IGEgKiBiOworICBpZiAoYSA9PSBNSU4pIHsKKyAgICBpZiAoYiAhPSAwICYmIGIgIT0g
MSkKKyAgICAgICpvdmVyZmxvdyA9IDE7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorICBpZiAo
YiA9PSBNSU4pIHsKKyAgICBpZiAoYSAhPSAwICYmIGEgIT0gMSkKKyAgICAgICpvdmVyZmxvdyA9
IDE7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorICBfX2ludDEyOF90IHNhID0gYSA+PiAoTiAt
IDEpOworICBfX2ludDEyOF90IGFic19hID0gKGEgXiBzYSkgLSBzYTsKKyAgX19pbnQxMjhfdCBz
YiA9IGIgPj4gKE4gLSAxKTsKKyAgX19pbnQxMjhfdCBhYnNfYiA9IChiIF4gc2IpIC0gc2I7Cisg
IGlmIChhYnNfYSA8IDIgfHwgYWJzX2IgPCAyKQorICAgIHJldHVybiByZXN1bHQ7CisgIGlmIChz
YSA9PSBzYikgeworICAgIGlmIChhYnNfYSA+IE1BWCAvIGFic19iKQorICAgICAgKm92ZXJmbG93
ID0gMTsKKyAgfSBlbHNlIHsKKyAgICBpZiAoYWJzX2EgPiBNSU4gLyAtYWJzX2IpCisgICAgICAq
b3ZlcmZsb3cgPSAxOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisjaWZkZWYgX19jbGFuZ19f
CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisjZW5kaWYKKworI2VuZGlmCisKKy8qIC0t
IEVORCBmaWxlc3lzdGVtL2ludDEyOF9idWlsdGlucy5jcHAgLS0gKi8KKworLyogLS0gQkVHSU4g
ZmlsZXN5c3RlbS9vcGVyYXRpb25zLmNwcCAtLSAqLworCisvKiAjaW5jbHVkZSAiZmlsZXN5c3Rl
bSIgKi8KKyNpbmNsdWRlIDxhcnJheT4KKyNpbmNsdWRlIDxpdGVyYXRvcj4KKyNpbmNsdWRlIDxm
c3RyZWFtPgorI2luY2x1ZGUgPHJhbmRvbT4gLyogZm9yIHVuaXF1ZV9wYXRoICovCisjaW5jbHVk
ZSA8c3RyaW5nX3ZpZXc+CisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisjaW5jbHVkZSA8dmVjdG9y
PgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8Y2xpbWl0cz4KKworLyogI2luY2x1ZGUg
ImZpbGVzeXN0ZW1fY29tbW9uLmgiICovCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRl
IDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0dmZzLmg+CisjaW5jbHVkZSA8dGltZS5o
PgorI2luY2x1ZGUgPGZjbnRsLmg+IC8qIHZhbHVlcyBmb3IgZmNobW9kYXQgKi8KKworI2lmIGRl
ZmluZWQoX19saW51eF9fKQorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpZiBMSU5VWF9W
RVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMzMpCisjaW5jbHVkZSA8c3lzL3Nl
bmRmaWxlLmg+CisjZGVmaW5lIF9MSUJDUFBfVVNFX1NFTkRGSUxFCisjZW5kaWYKKyNlbGlmIGRl
ZmluZWQoX19BUFBMRV9fKSB8fCBfX2hhc19pbmNsdWRlKDxjb3B5ZmlsZS5oPikKKyNpbmNsdWRl
IDxjb3B5ZmlsZS5oPgorI2RlZmluZSBfTElCQ1BQX1VTRV9DT1BZRklMRQorI2VuZGlmCisKKyNp
ZiAhZGVmaW5lZChfX0FQUExFX18pCisjZGVmaW5lIF9MSUJDUFBfVVNFX0NMT0NLX0dFVFRJTUUK
KyNlbmRpZgorCisjaWYgIWRlZmluZWQoQ0xPQ0tfUkVBTFRJTUUpIHx8ICFkZWZpbmVkKF9MSUJD
UFBfVVNFX0NMT0NLX0dFVFRJTUUpCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4gLy8gZm9yIGdldHRp
bWVvZmRheSBhbmQgdGltZXZhbAorI2VuZGlmICAgICAgICAgICAgICAgIC8vICFkZWZpbmVkKENM
T0NLX1JFQUxUSU1FKQorCisjaWYgZGVmaW5lZChfTElCQ1BQX0NPTVBJTEVSX0dDQykKKyNpZiBf
R05VQ19WRVIgPCA1MDAKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5n
LWZpZWxkLWluaXRpYWxpemVycyIKKyNlbmRpZgorI2VuZGlmCisKK19MSUJDUFBfQkVHSU5fTkFN
RVNQQUNFX0ZJTEVTWVNURU0KKworbmFtZXNwYWNlIHsKK25hbWVzcGFjZSBwYXJzZXIgeworCit1
c2luZyBzdHJpbmdfdmlld190ID0gcGF0aDo6X19zdHJpbmdfdmlldzsKK3VzaW5nIHN0cmluZ192
aWV3X3BhaXIgPSBwYWlyPHN0cmluZ192aWV3X3QsIHN0cmluZ192aWV3X3Q+OwordXNpbmcgUG9z
UHRyID0gcGF0aDo6dmFsdWVfdHlwZSBjb25zdCo7CisKK3N0cnVjdCBQYXRoUGFyc2VyIHsKKyAg
ZW51bSBQYXJzZXJTdGF0ZSA6IHVuc2lnbmVkIGNoYXIgeworICAgIC8vIFplcm8gaXMgYSBzcGVj
aWFsIHNlbnRpbmVsIHZhbHVlIHVzZWQgYnkgZGVmYXVsdCBjb25zdHJ1Y3RlZCBpdGVyYXRvcnMu
CisgICAgUFNfQmVmb3JlQmVnaW4gPSBwYXRoOjppdGVyYXRvcjo6X0JlZm9yZUJlZ2luLAorICAg
IFBTX0luUm9vdE5hbWUgPSBwYXRoOjppdGVyYXRvcjo6X0luUm9vdE5hbWUsCisgICAgUFNfSW5S
b290RGlyID0gcGF0aDo6aXRlcmF0b3I6Ol9JblJvb3REaXIsCisgICAgUFNfSW5GaWxlbmFtZXMg
PSBwYXRoOjppdGVyYXRvcjo6X0luRmlsZW5hbWVzLAorICAgIFBTX0luVHJhaWxpbmdTZXAgPSBw
YXRoOjppdGVyYXRvcjo6X0luVHJhaWxpbmdTZXAsCisgICAgUFNfQXRFbmQgPSBwYXRoOjppdGVy
YXRvcjo6X0F0RW5kCisgIH07CisKKyAgY29uc3Qgc3RyaW5nX3ZpZXdfdCBQYXRoOworICBzdHJp
bmdfdmlld190IFJhd0VudHJ5OworICBQYXJzZXJTdGF0ZSBTdGF0ZTsKKworcHJpdmF0ZToKKyAg
UGF0aFBhcnNlcihzdHJpbmdfdmlld190IFAsIFBhcnNlclN0YXRlIFN0YXRlKSBub2V4Y2VwdCA6
IFBhdGgoUCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTdGF0ZShTdGF0ZSkge30KKworcHVibGljOgorICBQYXRoUGFyc2VyKHN0
cmluZ192aWV3X3QgUCwgc3RyaW5nX3ZpZXdfdCBFLCB1bnNpZ25lZCBjaGFyIFMpCisgICAgICA6
IFBhdGgoUCksIFJhd0VudHJ5KEUpLCBTdGF0ZShzdGF0aWNfY2FzdDxQYXJzZXJTdGF0ZT4oUykp
IHsKKyAgICAvLyBTIGNhbm5vdCBiZSAnMCcgb3IgUFNfQmVmb3JlQmVnaW4uCisgIH0KKworICBz
dGF0aWMgUGF0aFBhcnNlciBDcmVhdGVCZWdpbihzdHJpbmdfdmlld190IFApIG5vZXhjZXB0IHsK
KyAgICBQYXRoUGFyc2VyIFBQKFAsIFBTX0JlZm9yZUJlZ2luKTsKKyAgICBQUC5pbmNyZW1lbnQo
KTsKKyAgICByZXR1cm4gUFA7CisgIH0KKworICBzdGF0aWMgUGF0aFBhcnNlciBDcmVhdGVFbmQo
c3RyaW5nX3ZpZXdfdCBQKSBub2V4Y2VwdCB7CisgICAgUGF0aFBhcnNlciBQUChQLCBQU19BdEVu
ZCk7CisgICAgcmV0dXJuIFBQOworICB9CisKKyAgUG9zUHRyIHBlZWsoKSBjb25zdCBub2V4Y2Vw
dCB7CisgICAgYXV0byBUa0VuZCA9IGdldE5leHRUb2tlblN0YXJ0UG9zKCk7CisgICAgYXV0byBF
bmQgPSBnZXRBZnRlckJhY2soKTsKKyAgICByZXR1cm4gVGtFbmQgPT0gRW5kID8gbnVsbHB0ciA6
IFRrRW5kOworICB9CisKKyAgdm9pZCBpbmNyZW1lbnQoKSBub2V4Y2VwdCB7CisgICAgY29uc3Qg
UG9zUHRyIEVuZCA9IGdldEFmdGVyQmFjaygpOworICAgIGNvbnN0IFBvc1B0ciBTdGFydCA9IGdl
dE5leHRUb2tlblN0YXJ0UG9zKCk7CisgICAgaWYgKFN0YXJ0ID09IEVuZCkKKyAgICAgIHJldHVy
biBtYWtlU3RhdGUoUFNfQXRFbmQpOworCisgICAgc3dpdGNoIChTdGF0ZSkgeworICAgIGNhc2Ug
UFNfQmVmb3JlQmVnaW46IHsKKyAgICAgIFBvc1B0ciBUa0VuZCA9IGNvbnN1bWVTZXBhcmF0b3Io
U3RhcnQsIEVuZCk7CisgICAgICBpZiAoVGtFbmQpCisgICAgICAgIHJldHVybiBtYWtlU3RhdGUo
UFNfSW5Sb290RGlyLCBTdGFydCwgVGtFbmQpOworICAgICAgZWxzZQorICAgICAgICByZXR1cm4g
bWFrZVN0YXRlKFBTX0luRmlsZW5hbWVzLCBTdGFydCwgY29uc3VtZU5hbWUoU3RhcnQsIEVuZCkp
OworICAgIH0KKyAgICBjYXNlIFBTX0luUm9vdERpcjoKKyAgICAgIHJldHVybiBtYWtlU3RhdGUo
UFNfSW5GaWxlbmFtZXMsIFN0YXJ0LCBjb25zdW1lTmFtZShTdGFydCwgRW5kKSk7CisKKyAgICBj
YXNlIFBTX0luRmlsZW5hbWVzOiB7CisgICAgICBQb3NQdHIgU2VwRW5kID0gY29uc3VtZVNlcGFy
YXRvcihTdGFydCwgRW5kKTsKKyAgICAgIGlmIChTZXBFbmQgIT0gRW5kKSB7CisgICAgICAgIFBv
c1B0ciBUa0VuZCA9IGNvbnN1bWVOYW1lKFNlcEVuZCwgRW5kKTsKKyAgICAgICAgaWYgKFRrRW5k
KQorICAgICAgICAgIHJldHVybiBtYWtlU3RhdGUoUFNfSW5GaWxlbmFtZXMsIFNlcEVuZCwgVGtF
bmQpOworICAgICAgfQorICAgICAgcmV0dXJuIG1ha2VTdGF0ZShQU19JblRyYWlsaW5nU2VwLCBT
dGFydCwgU2VwRW5kKTsKKyAgICB9CisKKyAgICBjYXNlIFBTX0luVHJhaWxpbmdTZXA6CisgICAg
ICByZXR1cm4gbWFrZVN0YXRlKFBTX0F0RW5kKTsKKworICAgIGNhc2UgUFNfSW5Sb290TmFtZToK
KyAgICBjYXNlIFBTX0F0RW5kOgorICAgICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOworICAgIH0K
KyAgfQorCisgIHZvaWQgZGVjcmVtZW50KCkgbm9leGNlcHQgeworICAgIGNvbnN0IFBvc1B0ciBS
RW5kID0gZ2V0QmVmb3JlRnJvbnQoKTsKKyAgICBjb25zdCBQb3NQdHIgUlN0YXJ0ID0gZ2V0Q3Vy
cmVudFRva2VuU3RhcnRQb3MoKSAtIDE7CisgICAgaWYgKFJTdGFydCA9PSBSRW5kKSAvLyB3ZSdy
ZSBkZWNyZW1lbnRpbmcgdGhlIGJlZ2luCisgICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0JlZm9y
ZUJlZ2luKTsKKworICAgIHN3aXRjaCAoU3RhdGUpIHsKKyAgICBjYXNlIFBTX0F0RW5kOiB7Cisg
ICAgICAvLyBUcnkgdG8gY29uc3VtZSBhIHRyYWlsaW5nIHNlcGFyYXRvciBvciByb290IGRpcmVj
dG9yeSBmaXJzdC4KKyAgICAgIGlmIChQb3NQdHIgU2VwRW5kID0gY29uc3VtZVNlcGFyYXRvcihS
U3RhcnQsIFJFbmQpKSB7CisgICAgICAgIGlmIChTZXBFbmQgPT0gUkVuZCkKKyAgICAgICAgICBy
ZXR1cm4gbWFrZVN0YXRlKFBTX0luUm9vdERpciwgUGF0aC5kYXRhKCksIFJTdGFydCArIDEpOwor
ICAgICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0luVHJhaWxpbmdTZXAsIFNlcEVuZCArIDEsIFJT
dGFydCArIDEpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgUG9zUHRyIFRrU3RhcnQgPSBjb25z
dW1lTmFtZShSU3RhcnQsIFJFbmQpOworICAgICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0luRmls
ZW5hbWVzLCBUa1N0YXJ0ICsgMSwgUlN0YXJ0ICsgMSk7CisgICAgICB9CisgICAgfQorICAgIGNh
c2UgUFNfSW5UcmFpbGluZ1NlcDoKKyAgICAgIHJldHVybiBtYWtlU3RhdGUoUFNfSW5GaWxlbmFt
ZXMsIGNvbnN1bWVOYW1lKFJTdGFydCwgUkVuZCkgKyAxLAorICAgICAgICAgICAgICAgICAgICAg
ICBSU3RhcnQgKyAxKTsKKyAgICBjYXNlIFBTX0luRmlsZW5hbWVzOiB7CisgICAgICBQb3NQdHIg
U2VwRW5kID0gY29uc3VtZVNlcGFyYXRvcihSU3RhcnQsIFJFbmQpOworICAgICAgaWYgKFNlcEVu
ZCA9PSBSRW5kKQorICAgICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0luUm9vdERpciwgUGF0aC5k
YXRhKCksIFJTdGFydCArIDEpOworICAgICAgUG9zUHRyIFRrRW5kID0gY29uc3VtZU5hbWUoU2Vw
RW5kLCBSRW5kKTsKKyAgICAgIHJldHVybiBtYWtlU3RhdGUoUFNfSW5GaWxlbmFtZXMsIFRrRW5k
ICsgMSwgU2VwRW5kICsgMSk7CisgICAgfQorICAgIGNhc2UgUFNfSW5Sb290RGlyOgorICAgICAg
Ly8gcmV0dXJuIG1ha2VTdGF0ZShQU19JblJvb3ROYW1lLCBQYXRoLmRhdGEoKSwgUlN0YXJ0ICsg
MSk7CisgICAgY2FzZSBQU19JblJvb3ROYW1lOgorICAgIGNhc2UgUFNfQmVmb3JlQmVnaW46Cisg
ICAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7CisgICAgfQorICB9CisKKyAgLy8vIFxicmllZiBS
ZXR1cm4gYSB2aWV3IHdpdGggdGhlICJwcmVmZXJyZWQgcmVwcmVzZW50YXRpb24iIG9mIHRoZSBj
dXJyZW50CisgIC8vLyAgIGVsZW1lbnQuIEZvciBleGFtcGxlIHRyYWlsaW5nIHNlcGFyYXRvcnMg
YXJlIHJlcHJlc2VudGVkIGFzIGEgJy4nCisgIHN0cmluZ192aWV3X3Qgb3BlcmF0b3IqKCkgY29u
c3Qgbm9leGNlcHQgeworICAgIHN3aXRjaCAoU3RhdGUpIHsKKyAgICBjYXNlIFBTX0JlZm9yZUJl
Z2luOgorICAgIGNhc2UgUFNfQXRFbmQ6CisgICAgICByZXR1cm4gIiI7CisgICAgY2FzZSBQU19J
blJvb3REaXI6CisgICAgICByZXR1cm4gIi8iOworICAgIGNhc2UgUFNfSW5UcmFpbGluZ1NlcDoK
KyAgICAgIHJldHVybiAiIjsKKyAgICBjYXNlIFBTX0luUm9vdE5hbWU6CisgICAgY2FzZSBQU19J
bkZpbGVuYW1lczoKKyAgICAgIHJldHVybiBSYXdFbnRyeTsKKyAgICB9CisgICAgX0xJQkNQUF9V
TlJFQUNIQUJMRSgpOworICB9CisKKyAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IG5v
ZXhjZXB0IHsKKyAgICByZXR1cm4gU3RhdGUgIT0gUFNfQmVmb3JlQmVnaW4gJiYgU3RhdGUgIT0g
UFNfQXRFbmQ7CisgIH0KKworICBQYXRoUGFyc2VyJiBvcGVyYXRvcisrKCkgbm9leGNlcHQgewor
ICAgIGluY3JlbWVudCgpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIFBhdGhQYXJzZXIm
IG9wZXJhdG9yLS0oKSBub2V4Y2VwdCB7CisgICAgZGVjcmVtZW50KCk7CisgICAgcmV0dXJuICp0
aGlzOworICB9CisKKyAgYm9vbCBpblJvb3RQYXRoKCkgY29uc3Qgbm9leGNlcHQgeworICAgIHJl
dHVybiBTdGF0ZSA9PSBQU19JblJvb3REaXIgfHwgU3RhdGUgPT0gUFNfSW5Sb290TmFtZTsKKyAg
fQorCitwcml2YXRlOgorICB2b2lkIG1ha2VTdGF0ZShQYXJzZXJTdGF0ZSBOZXdTdGF0ZSwgUG9z
UHRyIFN0YXJ0LCBQb3NQdHIgRW5kKSBub2V4Y2VwdCB7CisgICAgU3RhdGUgPSBOZXdTdGF0ZTsK
KyAgICBSYXdFbnRyeSA9IHN0cmluZ192aWV3X3QoU3RhcnQsIEVuZCAtIFN0YXJ0KTsKKyAgfQor
ICB2b2lkIG1ha2VTdGF0ZShQYXJzZXJTdGF0ZSBOZXdTdGF0ZSkgbm9leGNlcHQgeworICAgIFN0
YXRlID0gTmV3U3RhdGU7CisgICAgUmF3RW50cnkgPSB7fTsKKyAgfQorCisgIFBvc1B0ciBnZXRB
ZnRlckJhY2soKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBQYXRoLmRhdGEoKSArIFBhdGguc2l6
ZSgpOyB9CisKKyAgUG9zUHRyIGdldEJlZm9yZUZyb250KCkgY29uc3Qgbm9leGNlcHQgeyByZXR1
cm4gUGF0aC5kYXRhKCkgLSAxOyB9CisKKyAgLy8vIFxicmllZiBSZXR1cm4gYSBwb2ludGVyIHRv
IHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGN1cnJlbnRseQorICAvLy8gICBsZXhlZCBl
bGVtZW50LgorICBQb3NQdHIgZ2V0TmV4dFRva2VuU3RhcnRQb3MoKSBjb25zdCBub2V4Y2VwdCB7
CisgICAgc3dpdGNoIChTdGF0ZSkgeworICAgIGNhc2UgUFNfQmVmb3JlQmVnaW46CisgICAgICBy
ZXR1cm4gUGF0aC5kYXRhKCk7CisgICAgY2FzZSBQU19JblJvb3ROYW1lOgorICAgIGNhc2UgUFNf
SW5Sb290RGlyOgorICAgIGNhc2UgUFNfSW5GaWxlbmFtZXM6CisgICAgICByZXR1cm4gJlJhd0Vu
dHJ5LmJhY2soKSArIDE7CisgICAgY2FzZSBQU19JblRyYWlsaW5nU2VwOgorICAgIGNhc2UgUFNf
QXRFbmQ6CisgICAgICByZXR1cm4gZ2V0QWZ0ZXJCYWNrKCk7CisgICAgfQorICAgIF9MSUJDUFBf
VU5SRUFDSEFCTEUoKTsKKyAgfQorCisgIC8vLyBcYnJpZWYgUmV0dXJuIGEgcG9pbnRlciB0byB0
aGUgZmlyc3QgY2hhcmFjdGVyIGluIHRoZSBjdXJyZW50bHkgbGV4ZWQKKyAgLy8vICAgZWxlbWVu
dC4KKyAgUG9zUHRyIGdldEN1cnJlbnRUb2tlblN0YXJ0UG9zKCkgY29uc3Qgbm9leGNlcHQgewor
ICAgIHN3aXRjaCAoU3RhdGUpIHsKKyAgICBjYXNlIFBTX0JlZm9yZUJlZ2luOgorICAgIGNhc2Ug
UFNfSW5Sb290TmFtZToKKyAgICAgIHJldHVybiAmUGF0aC5mcm9udCgpOworICAgIGNhc2UgUFNf
SW5Sb290RGlyOgorICAgIGNhc2UgUFNfSW5GaWxlbmFtZXM6CisgICAgY2FzZSBQU19JblRyYWls
aW5nU2VwOgorICAgICAgcmV0dXJuICZSYXdFbnRyeS5mcm9udCgpOworICAgIGNhc2UgUFNfQXRF
bmQ6CisgICAgICByZXR1cm4gJlBhdGguYmFjaygpICsgMTsKKyAgICB9CisgICAgX0xJQkNQUF9V
TlJFQUNIQUJMRSgpOworICB9CisKKyAgUG9zUHRyIGNvbnN1bWVTZXBhcmF0b3IoUG9zUHRyIFAs
IFBvc1B0ciBFbmQpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICBpZiAoUCA9PSBFbmQgfHwgKlAgIT0g
Jy8nKQorICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgY29uc3QgaW50IEluYyA9IFAgPCBFbmQg
PyAxIDogLTE7CisgICAgUCArPSBJbmM7CisgICAgd2hpbGUgKFAgIT0gRW5kICYmICpQID09ICcv
JykKKyAgICAgIFAgKz0gSW5jOworICAgIHJldHVybiBQOworICB9CisKKyAgUG9zUHRyIGNvbnN1
bWVOYW1lKFBvc1B0ciBQLCBQb3NQdHIgRW5kKSBjb25zdCBub2V4Y2VwdCB7CisgICAgaWYgKFAg
PT0gRW5kIHx8ICpQID09ICcvJykKKyAgICAgIHJldHVybiBudWxscHRyOworICAgIGNvbnN0IGlu
dCBJbmMgPSBQIDwgRW5kID8gMSA6IC0xOworICAgIFAgKz0gSW5jOworICAgIHdoaWxlIChQICE9
IEVuZCAmJiAqUCAhPSAnLycpCisgICAgICBQICs9IEluYzsKKyAgICByZXR1cm4gUDsKKyAgfQor
fTsKKworc3RhdGljIHN0cmluZ192aWV3X3BhaXIgc2VwYXJhdGVfZmlsZW5hbWUoc3RyaW5nX3Zp
ZXdfdCBjb25zdCYgcykgeworICBpZiAocyA9PSAiLiIgfHwgcyA9PSAiLi4iIHx8IHMuZW1wdHko
KSkKKyAgICByZXR1cm4gc3RyaW5nX3ZpZXdfcGFpcntzLCAiIn07CisgIGF1dG8gcG9zID0gcy5m
aW5kX2xhc3Rfb2YoJy4nKTsKKyAgaWYgKHBvcyA9PSBzdHJpbmdfdmlld190OjpucG9zIHx8IHBv
cyA9PSAwKQorICAgIHJldHVybiBzdHJpbmdfdmlld19wYWlye3MsIHN0cmluZ192aWV3X3R7fX07
CisgIHJldHVybiBzdHJpbmdfdmlld19wYWlye3Muc3Vic3RyKDAsIHBvcyksIHMuc3Vic3RyKHBv
cyl9OworfQorCitzdGF0aWMgc3RyaW5nX3ZpZXdfdCBjcmVhdGVWaWV3KFBvc1B0ciBTLCBQb3NQ
dHIgRSkgbm9leGNlcHQgeworICByZXR1cm4ge1MsIHN0YXRpY19jYXN0PHNpemVfdD4oRSAtIFMp
ICsgMX07Cit9CisKK30gLy8gbmFtZXNwYWNlIHBhcnNlcgorfSAvLyBuYW1lc3BhY2UKKworLy8g
ICAgICAgICAgICAgICAgICAgICAgIFBPU0lYIEhFTFBFUlMKKworbmFtZXNwYWNlIGRldGFpbCB7
CituYW1lc3BhY2UgeworCit1c2luZyB2YWx1ZV90eXBlID0gcGF0aDo6dmFsdWVfdHlwZTsKK3Vz
aW5nIHN0cmluZ190eXBlID0gcGF0aDo6c3RyaW5nX3R5cGU7CisKK3N0cnVjdCBGaWxlRGVzY3Jp
cHRvciB7CisgIGNvbnN0IHBhdGgmIG5hbWU7CisgIGludCBmZCA9IC0xOworICBTdGF0VCBtX3N0
YXQ7CisgIGZpbGVfc3RhdHVzIG1fc3RhdHVzOworCisgIHRlbXBsYXRlIDxjbGFzcy4uLiBBcmdz
PgorICBzdGF0aWMgRmlsZURlc2NyaXB0b3IgY3JlYXRlKGNvbnN0IHBhdGgqIHAsIGVycm9yX2Nv
ZGUmIGVjLCBBcmdzLi4uIGFyZ3MpIHsKKyAgICBlYy5jbGVhcigpOworICAgIGludCBmZDsKKyAg
ICBpZiAoKGZkID0gOjpvcGVuKHAtPmNfc3RyKCksIGFyZ3MuLi4pKSA9PSAtMSkgeworICAgICAg
ZWMgPSBjYXB0dXJlX2Vycm5vKCk7CisgICAgICByZXR1cm4gRmlsZURlc2NyaXB0b3J7cH07Cisg
ICAgfQorICAgIHJldHVybiBGaWxlRGVzY3JpcHRvcihwLCBmZCk7CisgIH0KKworICB0ZW1wbGF0
ZSA8Y2xhc3MuLi4gQXJncz4KKyAgc3RhdGljIEZpbGVEZXNjcmlwdG9yIGNyZWF0ZV93aXRoX3N0
YXR1cyhjb25zdCBwYXRoKiBwLCBlcnJvcl9jb2RlJiBlYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBcmdzLi4uIGFyZ3MpIHsKKyAgICBGaWxlRGVzY3JpcHRv
ciBmZCA9IGNyZWF0ZShwLCBlYywgYXJncy4uLik7CisgICAgaWYgKCFlYykKKyAgICAgIGZkLnJl
ZnJlc2hfc3RhdHVzKGVjKTsKKworICAgIHJldHVybiBmZDsKKyAgfQorCisgIGZpbGVfc3RhdHVz
IGdldF9zdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQorICBTdGF0VCBjb25zdCYg
Z2V0X3N0YXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXQ7IH0KKworICBib29sIHN0YXR1c19rbm93
bigpIGNvbnN0IHsgcmV0dXJuIF9WU1REX0ZTOjpzdGF0dXNfa25vd24obV9zdGF0dXMpOyB9CisK
KyAgZmlsZV9zdGF0dXMgcmVmcmVzaF9zdGF0dXMoZXJyb3JfY29kZSYgZWMpOworCisgIHZvaWQg
Y2xvc2UoKSBub2V4Y2VwdCB7CisgICAgaWYgKGZkICE9IC0xKQorICAgICAgOjpjbG9zZShmZCk7
CisgICAgZmQgPSAtMTsKKyAgfQorCisgIEZpbGVEZXNjcmlwdG9yKEZpbGVEZXNjcmlwdG9yJiYg
b3RoZXIpCisgICAgICA6IG5hbWUob3RoZXIubmFtZSksIGZkKG90aGVyLmZkKSwgbV9zdGF0KG90
aGVyLm1fc3RhdCksCisgICAgICAgIG1fc3RhdHVzKG90aGVyLm1fc3RhdHVzKSB7CisgICAgb3Ro
ZXIuZmQgPSAtMTsKKyAgICBvdGhlci5tX3N0YXR1cyA9IGZpbGVfc3RhdHVze307CisgIH0KKwor
ICB+RmlsZURlc2NyaXB0b3IoKSB7IGNsb3NlKCk7IH0KKworICBGaWxlRGVzY3JpcHRvcihGaWxl
RGVzY3JpcHRvciBjb25zdCYpID0gZGVsZXRlOworICBGaWxlRGVzY3JpcHRvciYgb3BlcmF0b3I9
KEZpbGVEZXNjcmlwdG9yIGNvbnN0JikgPSBkZWxldGU7CisKK3ByaXZhdGU6CisgIGV4cGxpY2l0
IEZpbGVEZXNjcmlwdG9yKGNvbnN0IHBhdGgqIHAsIGludCBmZCA9IC0xKSA6IG5hbWUoKnApLCBm
ZChmZCkge30KK307CisKK3Blcm1zIHBvc2l4X2dldF9wZXJtcyhjb25zdCBTdGF0VCYgc3QpIG5v
ZXhjZXB0IHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHBlcm1zPihzdC5zdF9tb2RlKSAmIHBlcm1z
OjptYXNrOworfQorCis6Om1vZGVfdCBwb3NpeF9jb252ZXJ0X3Blcm1zKHBlcm1zIHBybXMpIHsK
KyAgcmV0dXJuIHN0YXRpY19jYXN0PCA6Om1vZGVfdD4ocHJtcyAmIHBlcm1zOjptYXNrKTsKK30K
KworZmlsZV9zdGF0dXMgY3JlYXRlX2ZpbGVfc3RhdHVzKGVycm9yX2NvZGUmIG1fZWMsIHBhdGgg
Y29uc3QmIHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RhdFQmIHBh
dGhfc3RhdCwgZXJyb3JfY29kZSogZWMpIHsKKyAgaWYgKGVjKQorICAgICplYyA9IG1fZWM7Cisg
IGlmIChtX2VjICYmIChtX2VjLnZhbHVlKCkgPT0gRU5PRU5UIHx8IG1fZWMudmFsdWUoKSA9PSBF
Tk9URElSKSkgeworICAgIHJldHVybiBmaWxlX3N0YXR1cyhmaWxlX3R5cGU6Om5vdF9mb3VuZCk7
CisgIH0gZWxzZSBpZiAobV9lYykgeworICAgIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoInBvc2l4
X3N0YXQiLCBlYywgJnApOworICAgIGVyci5yZXBvcnQobV9lYywgImZhaWxlZCB0byBkZXRlcm1p
bmUgYXR0cmlidXRlcyBmb3IgdGhlIHNwZWNpZmllZCBwYXRoIik7CisgICAgcmV0dXJuIGZpbGVf
c3RhdHVzKGZpbGVfdHlwZTo6bm9uZSk7CisgIH0KKyAgLy8gZWxzZQorCisgIGZpbGVfc3RhdHVz
IGZzX3RtcDsKKyAgYXV0byBjb25zdCBtb2RlID0gcGF0aF9zdGF0LnN0X21vZGU7CisgIGlmIChT
X0lTTE5LKG1vZGUpKQorICAgIGZzX3RtcC50eXBlKGZpbGVfdHlwZTo6c3ltbGluayk7CisgIGVs
c2UgaWYgKFNfSVNSRUcobW9kZSkpCisgICAgZnNfdG1wLnR5cGUoZmlsZV90eXBlOjpyZWd1bGFy
KTsKKyAgZWxzZSBpZiAoU19JU0RJUihtb2RlKSkKKyAgICBmc190bXAudHlwZShmaWxlX3R5cGU6
OmRpcmVjdG9yeSk7CisgIGVsc2UgaWYgKFNfSVNCTEsobW9kZSkpCisgICAgZnNfdG1wLnR5cGUo
ZmlsZV90eXBlOjpibG9jayk7CisgIGVsc2UgaWYgKFNfSVNDSFIobW9kZSkpCisgICAgZnNfdG1w
LnR5cGUoZmlsZV90eXBlOjpjaGFyYWN0ZXIpOworICBlbHNlIGlmIChTX0lTRklGTyhtb2RlKSkK
KyAgICBmc190bXAudHlwZShmaWxlX3R5cGU6OmZpZm8pOworICBlbHNlIGlmIChTX0lTU09DSyht
b2RlKSkKKyAgICBmc190bXAudHlwZShmaWxlX3R5cGU6OnNvY2tldCk7CisgIGVsc2UKKyAgICBm
c190bXAudHlwZShmaWxlX3R5cGU6OnVua25vd24pOworCisgIGZzX3RtcC5wZXJtaXNzaW9ucyhk
ZXRhaWw6OnBvc2l4X2dldF9wZXJtcyhwYXRoX3N0YXQpKTsKKyAgcmV0dXJuIGZzX3RtcDsKK30K
KworZmlsZV9zdGF0dXMgcG9zaXhfc3RhdChwYXRoIGNvbnN0JiBwLCBTdGF0VCYgcGF0aF9zdGF0
LCBlcnJvcl9jb2RlKiBlYykgeworICBlcnJvcl9jb2RlIG1fZWM7CisgIGlmICg6OnN0YXQocC5j
X3N0cigpLCAmcGF0aF9zdGF0KSA9PSAtMSkKKyAgICBtX2VjID0gZGV0YWlsOjpjYXB0dXJlX2Vy
cm5vKCk7CisgIHJldHVybiBjcmVhdGVfZmlsZV9zdGF0dXMobV9lYywgcCwgcGF0aF9zdGF0LCBl
Yyk7Cit9CisKK2ZpbGVfc3RhdHVzIHBvc2l4X3N0YXQocGF0aCBjb25zdCYgcCwgZXJyb3JfY29k
ZSogZWMpIHsKKyAgU3RhdFQgcGF0aF9zdGF0OworICByZXR1cm4gcG9zaXhfc3RhdChwLCBwYXRo
X3N0YXQsIGVjKTsKK30KKworZmlsZV9zdGF0dXMgcG9zaXhfbHN0YXQocGF0aCBjb25zdCYgcCwg
U3RhdFQmIHBhdGhfc3RhdCwgZXJyb3JfY29kZSogZWMpIHsKKyAgZXJyb3JfY29kZSBtX2VjOwor
ICBpZiAoOjpsc3RhdChwLmNfc3RyKCksICZwYXRoX3N0YXQpID09IC0xKQorICAgIG1fZWMgPSBk
ZXRhaWw6OmNhcHR1cmVfZXJybm8oKTsKKyAgcmV0dXJuIGNyZWF0ZV9maWxlX3N0YXR1cyhtX2Vj
LCBwLCBwYXRoX3N0YXQsIGVjKTsKK30KKworZmlsZV9zdGF0dXMgcG9zaXhfbHN0YXQocGF0aCBj
b25zdCYgcCwgZXJyb3JfY29kZSogZWMpIHsKKyAgU3RhdFQgcGF0aF9zdGF0OworICByZXR1cm4g
cG9zaXhfbHN0YXQocCwgcGF0aF9zdGF0LCBlYyk7Cit9CisKK2Jvb2wgcG9zaXhfZnRydW5jYXRl
KGNvbnN0IEZpbGVEZXNjcmlwdG9yJiBmZCwgc2l6ZV90IHRvX3NpemUsIGVycm9yX2NvZGUmIGVj
KSB7CisgIGlmICg6OmZ0cnVuY2F0ZShmZC5mZCwgdG9fc2l6ZSkgPT0gLTEpIHsKKyAgICBlYyA9
IGNhcHR1cmVfZXJybm8oKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICBlYy5jbGVhcigpOwor
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgcG9zaXhfZmNobW9kKGNvbnN0IEZpbGVEZXNjcmlw
dG9yJiBmZCwgY29uc3QgU3RhdFQmIHN0LCBlcnJvcl9jb2RlJiBlYykgeworICBpZiAoOjpmY2ht
b2QoZmQuZmQsIHN0LnN0X21vZGUpID09IC0xKSB7CisgICAgZWMgPSBjYXB0dXJlX2Vycm5vKCk7
CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgZWMuY2xlYXIoKTsKKyAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIHN0YXRfZXF1aXZhbGVudChjb25zdCBTdGF0VCYgc3QxLCBjb25zdCBTdGF0VCYg
c3QyKSB7CisgIHJldHVybiAoc3QxLnN0X2RldiA9PSBzdDIuc3RfZGV2ICYmIHN0MS5zdF9pbm8g
PT0gc3QyLnN0X2lubyk7Cit9CisKK2ZpbGVfc3RhdHVzIEZpbGVEZXNjcmlwdG9yOjpyZWZyZXNo
X3N0YXR1cyhlcnJvcl9jb2RlJiBlYykgeworICAvLyBGRCBtdXN0IGJlIG9wZW4gYW5kIGdvb2Qu
CisgIG1fc3RhdHVzID0gZmlsZV9zdGF0dXN7fTsKKyAgbV9zdGF0ID0ge307CisgIGVycm9yX2Nv
ZGUgbV9lYzsKKyAgaWYgKDo6ZnN0YXQoZmQsICZtX3N0YXQpID09IC0xKQorICAgIG1fZWMgPSBj
YXB0dXJlX2Vycm5vKCk7CisgIG1fc3RhdHVzID0gY3JlYXRlX2ZpbGVfc3RhdHVzKG1fZWMsIG5h
bWUsIG1fc3RhdCwgJmVjKTsKKyAgcmV0dXJuIG1fc3RhdHVzOworfQorfSAvLyBuYW1lc3BhY2UK
K30gLy8gZW5kIG5hbWVzcGFjZSBkZXRhaWwKKwordXNpbmcgZGV0YWlsOjpjYXB0dXJlX2Vycm5v
OwordXNpbmcgZGV0YWlsOjpFcnJvckhhbmRsZXI7Cit1c2luZyBkZXRhaWw6OlN0YXRUOwordXNp
bmcgZGV0YWlsOjpUaW1lU3BlYzsKK3VzaW5nIHBhcnNlcjo6Y3JlYXRlVmlldzsKK3VzaW5nIHBh
cnNlcjo6UGF0aFBhcnNlcjsKK3VzaW5nIHBhcnNlcjo6c3RyaW5nX3ZpZXdfdDsKKworY29uc3Qg
Ym9vbCBfRmlsZXN5c3RlbUNsb2NrOjppc19zdGVhZHk7CisKK19GaWxlc3lzdGVtQ2xvY2s6OnRp
bWVfcG9pbnQgX0ZpbGVzeXN0ZW1DbG9jazo6bm93KCkgbm9leGNlcHQgeworICB0eXBlZGVmIGNo
cm9ubzo6ZHVyYXRpb248cmVwPiBfX3NlY3M7CisjaWYgZGVmaW5lZChfTElCQ1BQX1VTRV9DTE9D
S19HRVRUSU1FKSAmJiBkZWZpbmVkKENMT0NLX1JFQUxUSU1FKQorICB0eXBlZGVmIGNocm9ubzo6
ZHVyYXRpb248cmVwLCBuYW5vPiBfX25zZWNzOworICBzdHJ1Y3QgdGltZXNwZWMgdHA7CisgIGlm
ICgwICE9IGNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZ0cCkpCisgICAgX190aHJvd19z
eXN0ZW1fZXJyb3IoZXJybm8sICJjbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FKSBmYWlsZWQi
KTsKKyAgcmV0dXJuIHRpbWVfcG9pbnQoX19zZWNzKHRwLnR2X3NlYykgKworICAgICAgICAgICAg
ICAgICAgICBjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8ZHVyYXRpb24+KF9fbnNlY3ModHAudHZfbnNl
YykpKTsKKyNlbHNlCisgIHR5cGVkZWYgY2hyb25vOjpkdXJhdGlvbjxyZXAsIG1pY3JvPiBfX21p
Y3Jvc2VjczsKKyAgdGltZXZhbCB0djsKKyAgZ2V0dGltZW9mZGF5KCZ0diwgMCk7CisgIHJldHVy
biB0aW1lX3BvaW50KF9fc2Vjcyh0di50dl9zZWMpICsgX19taWNyb3NlY3ModHYudHZfdXNlYykp
OworI2VuZGlmIC8vIF9MSUJDUFBfVVNFX0NMT0NLX0dFVFRJTUUgJiYgQ0xPQ0tfUkVBTFRJTUUK
K30KKworZmlsZXN5c3RlbV9lcnJvcjo6fmZpbGVzeXN0ZW1fZXJyb3IoKSB7fQorCit2b2lkIGZp
bGVzeXN0ZW1fZXJyb3I6Ol9fY3JlYXRlX3doYXQoaW50IF9fbnVtX3BhdGhzKSB7CisgIGNvbnN0
IGNoYXIqIGRlcml2ZWRfd2hhdCA9IHN5c3RlbV9lcnJvcjo6d2hhdCgpOworICBfX3N0b3JhZ2Vf
LT5fX3doYXRfID0gWyZdKCkgLT4gc3RyaW5nIHsKKyAgICBjb25zdCBjaGFyKiBwMSA9IHBhdGgx
KCkubmF0aXZlKCkuZW1wdHkoKSA/ICJcIlwiIiA6IHBhdGgxKCkuY19zdHIoKTsKKyAgICBjb25z
dCBjaGFyKiBwMiA9IHBhdGgyKCkubmF0aXZlKCkuZW1wdHkoKSA/ICJcIlwiIiA6IHBhdGgyKCku
Y19zdHIoKTsKKyAgICBzd2l0Y2ggKF9fbnVtX3BhdGhzKSB7CisgICAgZGVmYXVsdDoKKyAgICAg
IHJldHVybiBkZXRhaWw6OmZvcm1hdF9zdHJpbmcoImZpbGVzeXN0ZW0gZXJyb3I6ICVzIiwgZGVy
aXZlZF93aGF0KTsKKyAgICBjYXNlIDE6CisgICAgICByZXR1cm4gZGV0YWlsOjpmb3JtYXRfc3Ry
aW5nKCJmaWxlc3lzdGVtIGVycm9yOiAlcyBbJXNdIiwgZGVyaXZlZF93aGF0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwMSk7CisgICAgY2FzZSAyOgorICAgICAgcmV0dXJu
IGRldGFpbDo6Zm9ybWF0X3N0cmluZygiZmlsZXN5c3RlbSBlcnJvcjogJXMgWyVzXSBbJXNdIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVyaXZlZF93aGF0LCBwMSwgcDIp
OworICAgIH0KKyAgfSgpOworfQorCitzdGF0aWMgcGF0aCBfX2RvX2Fic29sdXRlKGNvbnN0IHBh
dGgmIHAsIHBhdGgqIGN3ZCwgZXJyb3JfY29kZSogZWMpIHsKKyAgaWYgKGVjKQorICAgIGVjLT5j
bGVhcigpOworICBpZiAocC5pc19hYnNvbHV0ZSgpKQorICAgIHJldHVybiBwOworICAqY3dkID0g
X19jdXJyZW50X3BhdGgoZWMpOworICBpZiAoZWMgJiYgKmVjKQorICAgIHJldHVybiB7fTsKKyAg
cmV0dXJuICgqY3dkKSAvIHA7Cit9CisKK3BhdGggX19hYnNvbHV0ZShjb25zdCBwYXRoJiBwLCBl
cnJvcl9jb2RlKiBlYykgeworICBwYXRoIGN3ZDsKKyAgcmV0dXJuIF9fZG9fYWJzb2x1dGUocCwg
JmN3ZCwgZWMpOworfQorCitwYXRoIF9fY2Fub25pY2FsKHBhdGggY29uc3QmIG9yaWdfcCwgZXJy
b3JfY29kZSogZWMpIHsKKyAgcGF0aCBjd2Q7CisgIEVycm9ySGFuZGxlcjxwYXRoPiBlcnIoImNh
bm9uaWNhbCIsIGVjLCAmb3JpZ19wLCAmY3dkKTsKKworICBwYXRoIHAgPSBfX2RvX2Fic29sdXRl
KG9yaWdfcCwgJmN3ZCwgZWMpOworICBjaGFyIGJ1ZmZbUEFUSF9NQVggKyAxXTsKKyAgY2hhciog
cmV0OworICBpZiAoKHJldCA9IDo6cmVhbHBhdGgocC5jX3N0cigpLCBidWZmKSkgPT0gbnVsbHB0
cikKKyAgICByZXR1cm4gZXJyLnJlcG9ydChjYXB0dXJlX2Vycm5vKCkpOworICByZXR1cm4ge3Jl
dH07Cit9CisKK3ZvaWQgX19jb3B5KGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvLCBj
b3B5X29wdGlvbnMgb3B0aW9ucywKKyAgICAgICAgICAgIGVycm9yX2NvZGUqIGVjKSB7CisgIEVy
cm9ySGFuZGxlcjx2b2lkPiBlcnIoImNvcHkiLCBlYywgJmZyb20sICZ0byk7CisKKyAgY29uc3Qg
Ym9vbCBzeW1fc3RhdHVzID0gYm9vbCgKKyAgICAgIG9wdGlvbnMgJiAoY29weV9vcHRpb25zOjpj
cmVhdGVfc3ltbGlua3MgfCBjb3B5X29wdGlvbnM6OnNraXBfc3ltbGlua3MpKTsKKworICBjb25z
dCBib29sIHN5bV9zdGF0dXMyID0gYm9vbChvcHRpb25zICYgY29weV9vcHRpb25zOjpjb3B5X3N5
bWxpbmtzKTsKKworICBlcnJvcl9jb2RlIG1fZWMxOworICBTdGF0VCBmX3N0ID0ge307CisgIGNv
bnN0IGZpbGVfc3RhdHVzIGYgPSBzeW1fc3RhdHVzIHx8IHN5bV9zdGF0dXMyCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPyBkZXRhaWw6OnBvc2l4X2xzdGF0KGZyb20sIGZfc3QsICZtX2Vj
MSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGRldGFpbDo6cG9zaXhfc3RhdChmcm9t
LCBmX3N0LCAmbV9lYzEpOworICBpZiAobV9lYzEpCisgICAgcmV0dXJuIGVyci5yZXBvcnQobV9l
YzEpOworCisgIFN0YXRUIHRfc3QgPSB7fTsKKyAgY29uc3QgZmlsZV9zdGF0dXMgdCA9IHN5bV9z
dGF0dXMgPyBkZXRhaWw6OnBvc2l4X2xzdGF0KHRvLCB0X3N0LCAmbV9lYzEpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDogZGV0YWlsOjpwb3NpeF9zdGF0KHRvLCB0X3N0LCAm
bV9lYzEpOworCisgIGlmIChub3Qgc3RhdHVzX2tub3duKHQpKQorICAgIHJldHVybiBlcnIucmVw
b3J0KG1fZWMxKTsKKworICBpZiAoIWV4aXN0cyhmKSB8fCBpc19vdGhlcihmKSB8fCBpc19vdGhl
cih0KSB8fAorICAgICAgKGlzX2RpcmVjdG9yeShmKSAmJiBpc19yZWd1bGFyX2ZpbGUodCkpIHx8
CisgICAgICBkZXRhaWw6OnN0YXRfZXF1aXZhbGVudChmX3N0LCB0X3N0KSkgeworICAgIHJldHVy
biBlcnIucmVwb3J0KGVycmM6OmZ1bmN0aW9uX25vdF9zdXBwb3J0ZWQpOworICB9CisKKyAgaWYg
KGVjKQorICAgIGVjLT5jbGVhcigpOworCisgIGlmIChpc19zeW1saW5rKGYpKSB7CisgICAgaWYg
KGJvb2woY29weV9vcHRpb25zOjpza2lwX3N5bWxpbmtzICYgb3B0aW9ucykpIHsKKyAgICAgIC8v
IGRvIG5vdGhpbmcKKyAgICB9IGVsc2UgaWYgKG5vdCBleGlzdHModCkpIHsKKyAgICAgIF9fY29w
eV9zeW1saW5rKGZyb20sIHRvLCBlYyk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBlcnIu
cmVwb3J0KGVycmM6OmZpbGVfZXhpc3RzKTsKKyAgICB9CisgICAgcmV0dXJuOworICB9IGVsc2Ug
aWYgKGlzX3JlZ3VsYXJfZmlsZShmKSkgeworICAgIGlmIChib29sKGNvcHlfb3B0aW9uczo6ZGly
ZWN0b3JpZXNfb25seSAmIG9wdGlvbnMpKSB7CisgICAgICAvLyBkbyBub3RoaW5nCisgICAgfSBl
bHNlIGlmIChib29sKGNvcHlfb3B0aW9uczo6Y3JlYXRlX3N5bWxpbmtzICYgb3B0aW9ucykpIHsK
KyAgICAgIF9fY3JlYXRlX3N5bWxpbmsoZnJvbSwgdG8sIGVjKTsKKyAgICB9IGVsc2UgaWYgKGJv
b2woY29weV9vcHRpb25zOjpjcmVhdGVfaGFyZF9saW5rcyAmIG9wdGlvbnMpKSB7CisgICAgICBf
X2NyZWF0ZV9oYXJkX2xpbmsoZnJvbSwgdG8sIGVjKTsKKyAgICB9IGVsc2UgaWYgKGlzX2RpcmVj
dG9yeSh0KSkgeworICAgICAgX19jb3B5X2ZpbGUoZnJvbSwgdG8gLyBmcm9tLmZpbGVuYW1lKCks
IG9wdGlvbnMsIGVjKTsKKyAgICB9IGVsc2UgeworICAgICAgX19jb3B5X2ZpbGUoZnJvbSwgdG8s
IG9wdGlvbnMsIGVjKTsKKyAgICB9CisgICAgcmV0dXJuOworICB9IGVsc2UgaWYgKGlzX2RpcmVj
dG9yeShmKSAmJiBib29sKGNvcHlfb3B0aW9uczo6Y3JlYXRlX3N5bWxpbmtzICYgb3B0aW9ucykp
IHsKKyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjppc19hX2RpcmVjdG9yeSk7CisgIH0gZWxz
ZSBpZiAoaXNfZGlyZWN0b3J5KGYpICYmIChib29sKGNvcHlfb3B0aW9uczo6cmVjdXJzaXZlICYg
b3B0aW9ucykgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlfb3B0aW9u
czo6bm9uZSA9PSBvcHRpb25zKSkgeworCisgICAgaWYgKCFleGlzdHModCkpIHsKKyAgICAgIC8v
IGNyZWF0ZSBkaXJlY3RvcnkgdG8gd2l0aCBhdHRyaWJ1dGVzIGZyb20gJ2Zyb20nLgorICAgICAg
X19jcmVhdGVfZGlyZWN0b3J5KHRvLCBmcm9tLCBlYyk7CisgICAgICBpZiAoZWMgJiYgKmVjKSB7
CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICB9CisgICAgZGlyZWN0b3J5X2l0ZXJhdG9y
IGl0ID0KKyAgICAgICAgZWMgPyBkaXJlY3RvcnlfaXRlcmF0b3IoZnJvbSwgKmVjKSA6IGRpcmVj
dG9yeV9pdGVyYXRvcihmcm9tKTsKKyAgICBpZiAoZWMgJiYgKmVjKSB7CisgICAgICByZXR1cm47
CisgICAgfQorICAgIGVycm9yX2NvZGUgbV9lYzI7CisgICAgZm9yICg7IGl0ICE9IGRpcmVjdG9y
eV9pdGVyYXRvcigpOyBpdC5pbmNyZW1lbnQobV9lYzIpKSB7CisgICAgICBpZiAobV9lYzIpIHsK
KyAgICAgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYzIpOworICAgICAgfQorICAgICAgX19jb3B5
KGl0LT5wYXRoKCksIHRvIC8gaXQtPnBhdGgoKS5maWxlbmFtZSgpLAorICAgICAgICAgICAgIG9w
dGlvbnMgfCBjb3B5X29wdGlvbnM6Ol9faW5fcmVjdXJzaXZlX2NvcHksIGVjKTsKKyAgICAgIGlm
IChlYyAmJiAqZWMpIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgIH0KKyAgfQorfQor
CituYW1lc3BhY2UgZGV0YWlsIHsKK25hbWVzcGFjZSB7CisKKyNpZmRlZiBfTElCQ1BQX1VTRV9T
RU5ERklMRQorYm9vbCBjb3B5X2ZpbGVfaW1wbF9zZW5kZmlsZShGaWxlRGVzY3JpcHRvciYgcmVh
ZF9mZCwgRmlsZURlc2NyaXB0b3ImIHdyaXRlX2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlcnJvcl9jb2RlJiBlYykgeworCisgIHNpemVfdCBjb3VudCA9IHJlYWRfZmQuZ2V0X3N0
YXQoKS5zdF9zaXplOworICBkbyB7CisgICAgc3NpemVfdCByZXM7CisgICAgaWYgKChyZXMgPSA6
OnNlbmRmaWxlKHdyaXRlX2ZkLmZkLCByZWFkX2ZkLmZkLCBudWxscHRyLCBjb3VudCkpID09IC0x
KSB7CisgICAgICBlYyA9IGNhcHR1cmVfZXJybm8oKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgY291bnQgLT0gcmVzOworICB9IHdoaWxlIChjb3VudCA+IDApOworCisgIGVjLmNs
ZWFyKCk7CisKKyAgcmV0dXJuIHRydWU7Cit9CisjZWxpZiBkZWZpbmVkKF9MSUJDUFBfVVNFX0NP
UFlGSUxFKQorYm9vbCBjb3B5X2ZpbGVfaW1wbF9jb3B5ZmlsZShGaWxlRGVzY3JpcHRvciYgcmVh
ZF9mZCwgRmlsZURlc2NyaXB0b3ImIHdyaXRlX2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlcnJvcl9jb2RlJiBlYykgeworICBzdHJ1Y3QgQ29weUZpbGVTdGF0ZSB7CisgICAgY29w
eWZpbGVfc3RhdGVfdCBzdGF0ZTsKKyAgICBDb3B5RmlsZVN0YXRlKCkgeyBzdGF0ZSA9IGNvcHlm
aWxlX3N0YXRlX2FsbG9jKCk7IH0KKyAgICB+Q29weUZpbGVTdGF0ZSgpIHsgY29weWZpbGVfc3Rh
dGVfZnJlZShzdGF0ZSk7IH0KKworICBwcml2YXRlOgorICAgIENvcHlGaWxlU3RhdGUoQ29weUZp
bGVTdGF0ZSBjb25zdCYpID0gZGVsZXRlOworICAgIENvcHlGaWxlU3RhdGUmIG9wZXJhdG9yPShD
b3B5RmlsZVN0YXRlIGNvbnN0JikgPSBkZWxldGU7CisgIH07CisKKyAgQ29weUZpbGVTdGF0ZSBj
ZnM7CisgIGlmIChmY29weWZpbGUocmVhZF9mZC5mZCwgd3JpdGVfZmQuZmQsIGNmcy5zdGF0ZSwg
Q09QWUZJTEVfREFUQSkgPCAwKSB7CisgICAgZWMgPSBjYXB0dXJlX2Vycm5vKCk7CisgICAgcmV0
dXJuIGZhbHNlOworICB9CisKKyAgZWMuY2xlYXIoKTsKKyAgcmV0dXJuIHRydWU7Cit9CisjZW5k
aWYKKworLy8gVGhpcyBmdW5jdGlvbiBpcyBndWFyZGVkIGJ5IGlmZGVmJ3MgaW4gSnVuaXBlciBk
dWUgdG8gdGhlIGN1cnJlbnQKKy8vIGNsYW5nIG5vdCBzdXBwb3J0aW5nIGFuIF9fb3BlbiBmdW5j
dGlvbiBvbiBpZnN0cmVhbSBhbmQgb2ZzdHJlYW0uCisjaWYgIWRlZmluZWQoX0xJQkNQUF9VU0Vf
U0VOREZJTEUpICYmICFkZWZpbmVkKF9MSUJDUFBfVVNFX0NPUFlGSUxFKQorLy8gTm90ZTogVGhp
cyBmdW5jdGlvbiBpc24ndCBndWFyZGVkIGJ5IGlmZGVmJ3MgZXZlbiB0aG91Z2ggaXQgbWF5IGJl
IHVudXNlZAorLy8gaW4gb3JkZXIgdG8gYXNzdXJlIGl0IHN0aWxsIGNvbXBpbGVzLgorX19hdHRy
aWJ1dGVfXygodW51c2VkKSkgYm9vbCBjb3B5X2ZpbGVfaW1wbF9kZWZhdWx0KEZpbGVEZXNjcmlw
dG9yJiByZWFkX2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEZpbGVEZXNjcmlwdG9yJiB3cml0ZV9mZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYykgeworICBpZnN0
cmVhbSBpbjsKKyAgaW4uX19vcGVuKHJlYWRfZmQuZmQsIGlvczo6YmluYXJ5KTsKKyAgaWYgKCFp
bi5pc19vcGVuKCkpIHsKKyAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCBfX29wZW4gZGlkbid0IHJl
c2V0IHRoZSBlcnJvciBjb2RlLgorICAgIGVjID0gY2FwdHVyZV9lcnJubygpOworICAgIHJldHVy
biBmYWxzZTsKKyAgfQorICBvZnN0cmVhbSBvdXQ7CisgIG91dC5fX29wZW4od3JpdGVfZmQuZmQs
IGlvczo6YmluYXJ5KTsKKyAgaWYgKCFvdXQuaXNfb3BlbigpKSB7CisgICAgZWMgPSBjYXB0dXJl
X2Vycm5vKCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgaWYgKGluLmdvb2QoKSAmJiBv
dXQuZ29vZCgpKSB7CisgICAgdXNpbmcgSW5JdCA9IGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj47
CisgICAgdXNpbmcgT3V0SXQgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+OworICAgIEluSXQg
YmluKGluKTsKKyAgICBJbkl0IGVpbjsKKyAgICBPdXRJdCBib3V0KG91dCk7CisgICAgY29weShi
aW4sIGVpbiwgYm91dCk7CisgIH0KKyAgaWYgKG91dC5mYWlsKCkgfHwgaW4uZmFpbCgpKSB7Cisg
ICAgZWMgPSBtYWtlX2Vycm9yX2NvZGUoZXJyYzo6aW9fZXJyb3IpOworICAgIHJldHVybiBmYWxz
ZTsKKyAgfQorCisgIGVjLmNsZWFyKCk7CisgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKK2Jv
b2wgY29weV9maWxlX2ltcGwoRmlsZURlc2NyaXB0b3ImIGZyb20sIEZpbGVEZXNjcmlwdG9yJiB0
bywgZXJyb3JfY29kZSYgZWMpIHsKKyNpZiBkZWZpbmVkKF9MSUJDUFBfVVNFX1NFTkRGSUxFKQor
ICByZXR1cm4gY29weV9maWxlX2ltcGxfc2VuZGZpbGUoZnJvbSwgdG8sIGVjKTsKKyNlbGlmIGRl
ZmluZWQoX0xJQkNQUF9VU0VfQ09QWUZJTEUpCisgIHJldHVybiBjb3B5X2ZpbGVfaW1wbF9jb3B5
ZmlsZShmcm9tLCB0bywgZWMpOworI2Vsc2UKKyAgcmV0dXJuIGNvcHlfZmlsZV9pbXBsX2RlZmF1
bHQoZnJvbSwgdG8sIGVjKTsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZQorfSAvLyBuYW1l
c3BhY2UgZGV0YWlsCisKK2Jvb2wgX19jb3B5X2ZpbGUoY29uc3QgcGF0aCYgZnJvbSwgY29uc3Qg
cGF0aCYgdG8sIGNvcHlfb3B0aW9ucyBvcHRpb25zLAorICAgICAgICAgICAgICAgICBlcnJvcl9j
b2RlKiBlYykgeworICB1c2luZyBkZXRhaWw6OkZpbGVEZXNjcmlwdG9yOworICBFcnJvckhhbmRs
ZXI8Ym9vbD4gZXJyKCJjb3B5X2ZpbGUiLCBlYywgJnRvLCAmZnJvbSk7CisKKyAgZXJyb3JfY29k
ZSBtX2VjOworICBGaWxlRGVzY3JpcHRvciBmcm9tX2ZkID0KKyAgICAgIEZpbGVEZXNjcmlwdG9y
OjpjcmVhdGVfd2l0aF9zdGF0dXMoJmZyb20sIG1fZWMsIE9fUkRPTkxZIHwgT19OT05CTE9DSyk7
CisgIGlmIChtX2VjKQorICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMpOworCisgIGF1dG8gZnJv
bV9zdCA9IGZyb21fZmQuZ2V0X3N0YXR1cygpOworICBTdGF0VCBjb25zdCYgZnJvbV9zdGF0ID0g
ZnJvbV9mZC5nZXRfc3RhdCgpOworICBpZiAoIWlzX3JlZ3VsYXJfZmlsZShmcm9tX3N0KSkgewor
ICAgIGlmIChub3QgbV9lYykKKyAgICAgIG1fZWMgPSBtYWtlX2Vycm9yX2NvZGUoZXJyYzo6bm90
X3N1cHBvcnRlZCk7CisgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7CisgIH0KKworICBjb25z
dCBib29sIHNraXBfZXhpc3RpbmcgPSBib29sKGNvcHlfb3B0aW9uczo6c2tpcF9leGlzdGluZyAm
IG9wdGlvbnMpOworICBjb25zdCBib29sIHVwZGF0ZV9leGlzdGluZyA9IGJvb2woY29weV9vcHRp
b25zOjp1cGRhdGVfZXhpc3RpbmcgJiBvcHRpb25zKTsKKyAgY29uc3QgYm9vbCBvdmVyd3JpdGVf
ZXhpc3RpbmcgPQorICAgICAgYm9vbChjb3B5X29wdGlvbnM6Om92ZXJ3cml0ZV9leGlzdGluZyAm
IG9wdGlvbnMpOworCisgIFN0YXRUIHRvX3N0YXRfcGF0aDsKKyAgZmlsZV9zdGF0dXMgdG9fc3Qg
PSBkZXRhaWw6OnBvc2l4X3N0YXQodG8sIHRvX3N0YXRfcGF0aCwgJm1fZWMpOworICBpZiAoIXN0
YXR1c19rbm93bih0b19zdCkpCisgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7CisKKyAgY29u
c3QgYm9vbCB0b19leGlzdHMgPSBleGlzdHModG9fc3QpOworICBpZiAodG9fZXhpc3RzICYmICFp
c19yZWd1bGFyX2ZpbGUodG9fc3QpKQorICAgIHJldHVybiBlcnIucmVwb3J0KGVycmM6Om5vdF9z
dXBwb3J0ZWQpOworCisgIGlmICh0b19leGlzdHMgJiYgZGV0YWlsOjpzdGF0X2VxdWl2YWxlbnQo
ZnJvbV9zdGF0LCB0b19zdGF0X3BhdGgpKQorICAgIHJldHVybiBlcnIucmVwb3J0KGVycmM6OmZp
bGVfZXhpc3RzKTsKKworICBpZiAodG9fZXhpc3RzICYmIHNraXBfZXhpc3RpbmcpCisgICAgcmV0
dXJuIGZhbHNlOworCisgIGJvb2wgU2hvdWxkQ29weSA9IFsmXSgpIHsKKyAgICBpZiAodG9fZXhp
c3RzICYmIHVwZGF0ZV9leGlzdGluZykgeworICAgICAgYXV0byBmcm9tX3RpbWUgPSBkZXRhaWw6
OmV4dHJhY3RfbXRpbWUoZnJvbV9zdGF0KTsKKyAgICAgIGF1dG8gdG9fdGltZSA9IGRldGFpbDo6
ZXh0cmFjdF9tdGltZSh0b19zdGF0X3BhdGgpOworICAgICAgaWYgKGZyb21fdGltZS50dl9zZWMg
PCB0b190aW1lLnR2X3NlYykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgaWYgKGZyb21f
dGltZS50dl9zZWMgPT0gdG9fdGltZS50dl9zZWMgJiYKKyAgICAgICAgICBmcm9tX3RpbWUudHZf
bnNlYyA8PSB0b190aW1lLnR2X25zZWMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICBpZiAoIXRvX2V4aXN0cyB8fCBvdmVyd3JpdGVfZXhpc3Rp
bmcpCisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpmaWxl
X2V4aXN0cyk7CisgIH0oKTsKKyAgaWYgKCFTaG91bGRDb3B5KQorICAgIHJldHVybiBmYWxzZTsK
KworICAvLyBEb24ndCB0cnVuY2F0ZSByaWdodCBhd2F5LiBXZSBtYXkgbm90IGJlIG9wZW5pbmcg
dGhlIGZpbGUgd2Ugb3JpZ2luYWxseQorICAvLyBsb29rZWQgYXQ7IHdlJ2xsIGNoZWNrIHRoaXMg
bGF0ZXIuCisgIGludCB0b19vcGVuX2ZsYWdzID0gT19XUk9OTFk7CisgIGlmICghdG9fZXhpc3Rz
KQorICAgIHRvX29wZW5fZmxhZ3MgfD0gT19DUkVBVDsKKyAgRmlsZURlc2NyaXB0b3IgdG9fZmQg
PSBGaWxlRGVzY3JpcHRvcjo6Y3JlYXRlX3dpdGhfc3RhdHVzKAorICAgICAgJnRvLCBtX2VjLCB0
b19vcGVuX2ZsYWdzLCBmcm9tX3N0YXQuc3RfbW9kZSk7CisgIGlmIChtX2VjKQorICAgIHJldHVy
biBlcnIucmVwb3J0KG1fZWMpOworCisgIGlmICh0b19leGlzdHMpIHsKKyAgICAvLyBDaGVjayB0
aGF0IHRoZSBmaWxlIHdlIGluaXRpYWxseSBzdGF0J2VkIGlzIGVxdWl2YWxlbnQgdG8gdGhlIG9u
ZQorICAgIC8vIHdlIG9wZW5lZC4KKyAgICAvLyBGSVhNRTogcmVwb3J0IHRoaXMgYmV0dGVyLgor
ICAgIGlmICghZGV0YWlsOjpzdGF0X2VxdWl2YWxlbnQodG9fc3RhdF9wYXRoLCB0b19mZC5nZXRf
c3RhdCgpKSkKKyAgICAgIHJldHVybiBlcnIucmVwb3J0KGVycmM6OmJhZF9maWxlX2Rlc2NyaXB0
b3IpOworCisgICAgLy8gU2V0IHRoZSBwZXJtaXNzaW9ucyBhbmQgdHJ1bmNhdGUgdGhlIGZpbGUg
d2Ugb3BlbmVkLgorICAgIGlmIChkZXRhaWw6OnBvc2l4X2ZjaG1vZCh0b19mZCwgZnJvbV9zdGF0
LCBtX2VjKSkKKyAgICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMpOworICAgIGlmIChkZXRhaWw6
OnBvc2l4X2Z0cnVuY2F0ZSh0b19mZCwgMCwgbV9lYykpCisgICAgICByZXR1cm4gZXJyLnJlcG9y
dChtX2VjKTsKKyAgfQorCisgIGlmICghY29weV9maWxlX2ltcGwoZnJvbV9mZCwgdG9fZmQsIG1f
ZWMpKSB7CisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgZGVzdCBmaWxlIGlmIHdlIGZhaWxlZCwg
YW5kIGl0IGRpZG4ndCBleGlzdCBwcmV2aW91c2x5LgorICAgIHJldHVybiBlcnIucmVwb3J0KG1f
ZWMpOworICB9CisKKyAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgX19jb3B5X3N5bWxpbmsoY29u
c3QgcGF0aCYgZXhpc3Rpbmdfc3ltbGluaywgY29uc3QgcGF0aCYgbmV3X3N5bWxpbmssCisgICAg
ICAgICAgICAgICAgICAgIGVycm9yX2NvZGUqIGVjKSB7CisgIGNvbnN0IHBhdGggcmVhbF9wYXRo
KF9fcmVhZF9zeW1saW5rKGV4aXN0aW5nX3N5bWxpbmssIGVjKSk7CisgIGlmIChlYyAmJiAqZWMp
IHsKKyAgICByZXR1cm47CisgIH0KKyAgLy8gTk9URTogcHJvcG9zYWwgc2F5cyB5b3Ugc2hvdWxk
IGRldGVjdCBpZiB5b3Ugc2hvdWxkIGNhbGwKKyAgLy8gY3JlYXRlX3N5bWxpbmsgb3IgY3JlYXRl
X2RpcmVjdG9yeV9zeW1saW5rLiBJIGRvbid0IHRoaW5rIHRoaXMKKyAgLy8gaXMgbmVlZGVkIHdp
dGggUE9TSVgKKyAgX19jcmVhdGVfc3ltbGluayhyZWFsX3BhdGgsIG5ld19zeW1saW5rLCBlYyk7
Cit9CisKK2Jvb2wgX19jcmVhdGVfZGlyZWN0b3JpZXMoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29k
ZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPGJvb2w+IGVycigiY3JlYXRlX2RpcmVjdG9yaWVzIiwg
ZWMsICZwKTsKKworICBlcnJvcl9jb2RlIG1fZWM7CisgIGF1dG8gY29uc3Qgc3QgPSBkZXRhaWw6
OnBvc2l4X3N0YXQocCwgJm1fZWMpOworICBpZiAoIXN0YXR1c19rbm93bihzdCkpCisgICAgcmV0
dXJuIGVyci5yZXBvcnQobV9lYyk7CisgIGVsc2UgaWYgKGlzX2RpcmVjdG9yeShzdCkpCisgICAg
cmV0dXJuIGZhbHNlOworICBlbHNlIGlmIChleGlzdHMoc3QpKQorICAgIHJldHVybiBlcnIucmVw
b3J0KGVycmM6OmZpbGVfZXhpc3RzKTsKKworICBjb25zdCBwYXRoIHBhcmVudCA9IHAucGFyZW50
X3BhdGgoKTsKKyAgaWYgKCFwYXJlbnQuZW1wdHkoKSkgeworICAgIGNvbnN0IGZpbGVfc3RhdHVz
IHBhcmVudF9zdCA9IHN0YXR1cyhwYXJlbnQsIG1fZWMpOworICAgIGlmIChub3Qgc3RhdHVzX2tu
b3duKHBhcmVudF9zdCkpCisgICAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKKyAgICBpZiAo
bm90IGV4aXN0cyhwYXJlbnRfc3QpKSB7CisgICAgICBfX2NyZWF0ZV9kaXJlY3RvcmllcyhwYXJl
bnQsIGVjKTsKKyAgICAgIGlmIChlYyAmJiAqZWMpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gX19jcmVhdGVfZGlyZWN0b3J5KHAsIGVjKTsK
K30KKworYm9vbCBfX2NyZWF0ZV9kaXJlY3RvcnkoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSog
ZWMpIHsKKyAgRXJyb3JIYW5kbGVyPGJvb2w+IGVycigiY3JlYXRlX2RpcmVjdG9yeSIsIGVjLCAm
cCk7CisKKyAgaWYgKDo6bWtkaXIocC5jX3N0cigpLCBzdGF0aWNfY2FzdDxpbnQ+KHBlcm1zOjph
bGwpKSA9PSAwKQorICAgIHJldHVybiB0cnVlOworICBpZiAoZXJybm8gIT0gRUVYSVNUKQorICAg
IGVyci5yZXBvcnQoY2FwdHVyZV9lcnJubygpKTsKKyAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IF9fY3JlYXRlX2RpcmVjdG9yeShwYXRoIGNvbnN0JiBwLCBwYXRoIGNvbnN0JiBhdHRyaWJ1dGVz
LCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8Ym9vbD4gZXJyKCJjcmVhdGVfZGly
ZWN0b3J5IiwgZWMsICZwLCAmYXR0cmlidXRlcyk7CisKKyAgU3RhdFQgYXR0cl9zdGF0OworICBl
cnJvcl9jb2RlIG1lYzsKKyAgYXV0byBzdCA9IGRldGFpbDo6cG9zaXhfc3RhdChhdHRyaWJ1dGVz
LCBhdHRyX3N0YXQsICZtZWMpOworICBpZiAoIXN0YXR1c19rbm93bihzdCkpCisgICAgcmV0dXJu
IGVyci5yZXBvcnQobWVjKTsKKyAgaWYgKCFpc19kaXJlY3Rvcnkoc3QpKQorICAgIHJldHVybiBl
cnIucmVwb3J0KGVycmM6Om5vdF9hX2RpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAi
dGhlIHNwZWNpZmllZCBhdHRyaWJ1dGUgcGF0aCBpcyBpbnZhbGlkIik7CisKKyAgaWYgKDo6bWtk
aXIocC5jX3N0cigpLCBhdHRyX3N0YXQuc3RfbW9kZSkgPT0gMCkKKyAgICByZXR1cm4gdHJ1ZTsK
KyAgaWYgKGVycm5vICE9IEVFWElTVCkKKyAgICBlcnIucmVwb3J0KGNhcHR1cmVfZXJybm8oKSk7
CisgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBfX2NyZWF0ZV9kaXJlY3Rvcnlfc3ltbGluayhw
YXRoIGNvbnN0JiBmcm9tLCBwYXRoIGNvbnN0JiB0bywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHZvaWQ+IGVycigiY3Jl
YXRlX2RpcmVjdG9yeV9zeW1saW5rIiwgZWMsICZmcm9tLCAmdG8pOworICBpZiAoOjpzeW1saW5r
KGZyb20uY19zdHIoKSwgdG8uY19zdHIoKSkgIT0gMCkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChj
YXB0dXJlX2Vycm5vKCkpOworfQorCit2b2lkIF9fY3JlYXRlX2hhcmRfbGluayhjb25zdCBwYXRo
JiBmcm9tLCBjb25zdCBwYXRoJiB0bywgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVy
PHZvaWQ+IGVycigiY3JlYXRlX2hhcmRfbGluayIsIGVjLCAmZnJvbSwgJnRvKTsKKyAgaWYgKDo6
bGluayhmcm9tLmNfc3RyKCksIHRvLmNfc3RyKCkpID09IC0xKQorICAgIHJldHVybiBlcnIucmVw
b3J0KGNhcHR1cmVfZXJybm8oKSk7Cit9CisKK3ZvaWQgX19jcmVhdGVfc3ltbGluayhwYXRoIGNv
bnN0JiBmcm9tLCBwYXRoIGNvbnN0JiB0bywgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5k
bGVyPHZvaWQ+IGVycigiY3JlYXRlX3N5bWxpbmsiLCBlYywgJmZyb20sICZ0byk7CisgIGlmICg6
OnN5bWxpbmsoZnJvbS5jX3N0cigpLCB0by5jX3N0cigpKSA9PSAtMSkKKyAgICByZXR1cm4gZXJy
LnJlcG9ydChjYXB0dXJlX2Vycm5vKCkpOworfQorCitwYXRoIF9fY3VycmVudF9wYXRoKGVycm9y
X2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjxwYXRoPiBlcnIoImN1cnJlbnRfcGF0aCIsIGVj
KTsKKworICBhdXRvIHNpemUgPSA6OnBhdGhjb25mKCIuIiwgX1BDX1BBVEhfTUFYKTsKKyAgX0xJ
QkNQUF9BU1NFUlQoc2l6ZSA+PSAwLCAicGF0aGNvbmYgcmV0dXJuZWQgYSAwIGFzIG1heCBzaXpl
Iik7CisKKyAgYXV0byBidWZmID0gdW5pcXVlX3B0cjxjaGFyW10+KG5ldyBjaGFyW3NpemUgKyAx
XSk7CisgIGNoYXIqIHJldDsKKyAgaWYgKChyZXQgPSA6OmdldGN3ZChidWZmLmdldCgpLCBzdGF0
aWNfY2FzdDxzaXplX3Q+KHNpemUpKSkgPT0gbnVsbHB0cikKKyAgICByZXR1cm4gZXJyLnJlcG9y
dChjYXB0dXJlX2Vycm5vKCksICJjYWxsIHRvIGdldGN3ZCBmYWlsZWQiKTsKKworICByZXR1cm4g
e2J1ZmYuZ2V0KCl9OworfQorCit2b2lkIF9fY3VycmVudF9wYXRoKGNvbnN0IHBhdGgmIHAsIGVy
cm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoImN1cnJlbnRfcGF0aCIs
IGVjLCAmcCk7CisgIGlmICg6OmNoZGlyKHAuY19zdHIoKSkgPT0gLTEpCisgICAgZXJyLnJlcG9y
dChjYXB0dXJlX2Vycm5vKCkpOworfQorCitib29sIF9fZXF1aXZhbGVudChjb25zdCBwYXRoJiBw
MSwgY29uc3QgcGF0aCYgcDIsIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjxib29s
PiBlcnIoImVxdWl2YWxlbnQiLCBlYywgJnAxLCAmcDIpOworCisgIGVycm9yX2NvZGUgZWMxLCBl
YzI7CisgIFN0YXRUIHN0MSA9IHt9LCBzdDIgPSB7fTsKKyAgYXV0byBzMSA9IGRldGFpbDo6cG9z
aXhfc3RhdChwMS5uYXRpdmUoKSwgc3QxLCAmZWMxKTsKKyAgaWYgKCFleGlzdHMoczEpKQorICAg
IHJldHVybiBlcnIucmVwb3J0KGVycmM6Om5vdF9zdXBwb3J0ZWQpOworICBhdXRvIHMyID0gZGV0
YWlsOjpwb3NpeF9zdGF0KHAyLm5hdGl2ZSgpLCBzdDIsICZlYzIpOworICBpZiAoIWV4aXN0cyhz
MikpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6bm90X3N1cHBvcnRlZCk7CisKKyAgcmV0
dXJuIGRldGFpbDo6c3RhdF9lcXVpdmFsZW50KHN0MSwgc3QyKTsKK30KKwordWludG1heF90IF9f
ZmlsZV9zaXplKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxl
cjx1aW50bWF4X3Q+IGVycigiZmlsZV9zaXplIiwgZWMsICZwKTsKKworICBlcnJvcl9jb2RlIG1f
ZWM7CisgIFN0YXRUIHN0OworICBmaWxlX3N0YXR1cyBmc3QgPSBkZXRhaWw6OnBvc2l4X3N0YXQo
cCwgc3QsICZtX2VjKTsKKyAgaWYgKCFleGlzdHMoZnN0KSB8fCAhaXNfcmVndWxhcl9maWxlKGZz
dCkpIHsKKyAgICBlcnJjIGVycm9yX2tpbmQgPQorICAgICAgICBpc19kaXJlY3RvcnkoZnN0KSA/
IGVycmM6OmlzX2FfZGlyZWN0b3J5IDogZXJyYzo6bm90X3N1cHBvcnRlZDsKKyAgICBpZiAoIW1f
ZWMpCisgICAgICBtX2VjID0gbWFrZV9lcnJvcl9jb2RlKGVycm9yX2tpbmQpOworICAgIHJldHVy
biBlcnIucmVwb3J0KG1fZWMpOworICB9CisgIC8vIGlzX3JlZ3VsYXJfZmlsZShwKSA9PSB0cnVl
CisgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50bWF4X3Q+KHN0LnN0X3NpemUpOworfQorCit1aW50
bWF4X3QgX19oYXJkX2xpbmtfY291bnQoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMpIHsK
KyAgRXJyb3JIYW5kbGVyPHVpbnRtYXhfdD4gZXJyKCJoYXJkX2xpbmtfY291bnQiLCBlYywgJnAp
OworCisgIGVycm9yX2NvZGUgbV9lYzsKKyAgU3RhdFQgc3Q7CisgIGRldGFpbDo6cG9zaXhfc3Rh
dChwLCBzdCwgJm1fZWMpOworICBpZiAobV9lYykKKyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2Vj
KTsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnRtYXhfdD4oc3Quc3RfbmxpbmspOworfQorCiti
b29sIF9fZnNfaXNfZW1wdHkoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJy
b3JIYW5kbGVyPGJvb2w+IGVycigiaXNfZW1wdHkiLCBlYywgJnApOworCisgIGVycm9yX2NvZGUg
bV9lYzsKKyAgU3RhdFQgcHN0OworICBhdXRvIHN0ID0gZGV0YWlsOjpwb3NpeF9zdGF0KHAsIHBz
dCwgJm1fZWMpOworICBpZiAobV9lYykKKyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKKyAg
ZWxzZSBpZiAoIWlzX2RpcmVjdG9yeShzdCkgJiYgIWlzX3JlZ3VsYXJfZmlsZShzdCkpCisgICAg
cmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6bm90X3N1cHBvcnRlZCk7CisgIGVsc2UgaWYgKGlzX2Rp
cmVjdG9yeShzdCkpIHsKKyAgICBhdXRvIGl0ID0gZWMgPyBkaXJlY3RvcnlfaXRlcmF0b3IocCwg
KmVjKSA6IGRpcmVjdG9yeV9pdGVyYXRvcihwKTsKKyAgICBpZiAoZWMgJiYgKmVjKQorICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiBpdCA9PSBkaXJlY3RvcnlfaXRlcmF0b3J7fTsKKyAg
fSBlbHNlIGlmIChpc19yZWd1bGFyX2ZpbGUoc3QpKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDx1
aW50bWF4X3Q+KHBzdC5zdF9zaXplKSA9PSAwOworCisgIF9MSUJDUFBfVU5SRUFDSEFCTEUoKTsK
K30KKworc3RhdGljIGZpbGVfdGltZV90eXBlIF9fZXh0cmFjdF9sYXN0X3dyaXRlX3RpbWUoY29u
c3QgcGF0aCYgcCwgY29uc3QgU3RhdFQmIHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSogZWMpIHsKKyAgdXNpbmcgZGV0YWlsOjpm
c190aW1lOworICBFcnJvckhhbmRsZXI8ZmlsZV90aW1lX3R5cGU+IGVycigibGFzdF93cml0ZV90
aW1lIiwgZWMsICZwKTsKKworICBhdXRvIHRzID0gZGV0YWlsOjpleHRyYWN0X210aW1lKHN0KTsK
KyAgaWYgKCFmc190aW1lOjppc19yZXByZXNlbnRhYmxlKHRzKSkKKyAgICByZXR1cm4gZXJyLnJl
cG9ydChlcnJjOjp2YWx1ZV90b29fbGFyZ2UpOworCisgIHJldHVybiBmc190aW1lOjpjb252ZXJ0
X2Zyb21fdGltZXNwZWModHMpOworfQorCitmaWxlX3RpbWVfdHlwZSBfX2xhc3Rfd3JpdGVfdGlt
ZShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYykgeworICB1c2luZyBuYW1lc3BhY2UgY2hy
b25vOworICBFcnJvckhhbmRsZXI8ZmlsZV90aW1lX3R5cGU+IGVycigibGFzdF93cml0ZV90aW1l
IiwgZWMsICZwKTsKKworICBlcnJvcl9jb2RlIG1fZWM7CisgIFN0YXRUIHN0OworICBkZXRhaWw6
OnBvc2l4X3N0YXQocCwgc3QsICZtX2VjKTsKKyAgaWYgKG1fZWMpCisgICAgcmV0dXJuIGVyci5y
ZXBvcnQobV9lYyk7CisgIHJldHVybiBfX2V4dHJhY3RfbGFzdF93cml0ZV90aW1lKHAsIHN0LCBl
Yyk7Cit9CisKK3ZvaWQgX19sYXN0X3dyaXRlX3RpbWUoY29uc3QgcGF0aCYgcCwgZmlsZV90aW1l
X3R5cGUgbmV3X3RpbWUsIGVycm9yX2NvZGUqIGVjKSB7CisgIHVzaW5nIGRldGFpbDo6ZnNfdGlt
ZTsKKyAgRXJyb3JIYW5kbGVyPHZvaWQ+IGVycigibGFzdF93cml0ZV90aW1lIiwgZWMsICZwKTsK
KworICBlcnJvcl9jb2RlIG1fZWM7CisgIGFycmF5PFRpbWVTcGVjLCAyPiB0YnVmOworI2lmICFk
ZWZpbmVkKF9MSUJDUFBfVVNFX1VUSU1FTlNBVCkKKyAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBo
YXMgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGRldGVybWluaW5nIHRoZQorICAvLyBsYXN0IGFj
Y2VzcyB0aW1lIGFuZCBhdHRlbXB0aW5nIHRvIHNldCBpdCB0byB0aGUgc2FtZSB2YWx1ZSB1c2lu
ZworICAvLyA6OnV0aW1lcworICBTdGF0VCBzdDsKKyAgZmlsZV9zdGF0dXMgZnN0ID0gZGV0YWls
Ojpwb3NpeF9zdGF0KHAsIHN0LCAmbV9lYyk7CisgIGlmIChtX2VjKQorICAgIHJldHVybiBlcnIu
cmVwb3J0KG1fZWMpOworICB0YnVmWzBdID0gZGV0YWlsOjpleHRyYWN0X2F0aW1lKHN0KTsKKyNl
bHNlCisgIHRidWZbMF0udHZfc2VjID0gMDsKKyAgdGJ1ZlswXS50dl9uc2VjID0gVVRJTUVfT01J
VDsKKyNlbmRpZgorICBpZiAoIWZzX3RpbWU6OmNvbnZlcnRfdG9fdGltZXNwZWModGJ1ZlsxXSwg
bmV3X3RpbWUpKQorICAgIHJldHVybiBlcnIucmVwb3J0KGVycmM6OnZhbHVlX3Rvb19sYXJnZSk7
CisKKyAgZGV0YWlsOjpzZXRfZmlsZV90aW1lcyhwLCB0YnVmLCBtX2VjKTsKKyAgaWYgKG1fZWMp
CisgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7Cit9CisKK3ZvaWQgX19wZXJtaXNzaW9ucyhj
b25zdCBwYXRoJiBwLCBwZXJtcyBwcm1zLCBwZXJtX29wdGlvbnMgb3B0cywKKyAgICAgICAgICAg
ICAgICAgICBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJwZXJt
aXNzaW9ucyIsIGVjLCAmcCk7CisKKyAgYXV0byBoYXNfb3B0ID0gWyZdKHBlcm1fb3B0aW9ucyBv
KSB7IHJldHVybiBib29sKG8gJiBvcHRzKTsgfTsKKyAgY29uc3QgYm9vbCByZXNvbHZlX3N5bWxp
bmtzID0gIWhhc19vcHQocGVybV9vcHRpb25zOjpub2ZvbGxvdyk7CisgIGNvbnN0IGJvb2wgYWRk
X3Blcm1zID0gaGFzX29wdChwZXJtX29wdGlvbnM6OmFkZCk7CisgIGNvbnN0IGJvb2wgcmVtb3Zl
X3Blcm1zID0gaGFzX29wdChwZXJtX29wdGlvbnM6OnJlbW92ZSk7CisgIF9MSUJDUFBfQVNTRVJU
KAorICAgICAgKGFkZF9wZXJtcyArIHJlbW92ZV9wZXJtcyArIGhhc19vcHQocGVybV9vcHRpb25z
OjpyZXBsYWNlKSkgPT0gMSwKKyAgICAgICJPbmUgYW5kIG9ubHkgb25lIG9mIHRoZSBwZXJtX29w
dGlvbnMgY29uc3RhbnRzIHJlcGxhY2UsIGFkZCwgb3IgcmVtb3ZlICIKKyAgICAgICJpcyBwcmVz
ZW50IGluIG9wdHMiKTsKKworICBib29sIHNldF9zeW1fcGVybXMgPSBmYWxzZTsKKyAgcHJtcyAm
PSBwZXJtczo6bWFzazsKKyAgaWYgKCFyZXNvbHZlX3N5bWxpbmtzIHx8IChhZGRfcGVybXMgfHwg
cmVtb3ZlX3Blcm1zKSkgeworICAgIGVycm9yX2NvZGUgbV9lYzsKKyAgICBmaWxlX3N0YXR1cyBz
dCA9IHJlc29sdmVfc3ltbGlua3MgPyBkZXRhaWw6OnBvc2l4X3N0YXQocCwgJm1fZWMpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZGV0YWlsOjpwb3NpeF9sc3RhdChw
LCAmbV9lYyk7CisgICAgc2V0X3N5bV9wZXJtcyA9IGlzX3N5bWxpbmsoc3QpOworICAgIGlmICht
X2VjKQorICAgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7CisgICAgX0xJQkNQUF9BU1NFUlQo
c3QucGVybWlzc2lvbnMoKSAhPSBwZXJtczo6dW5rbm93biwKKyAgICAgICAgICAgICAgICAgICAi
UGVybWlzc2lvbnMgdW5leHBlY3RlZGx5IHVua25vd24iKTsKKyAgICBpZiAoYWRkX3Blcm1zKQor
ICAgICAgcHJtcyB8PSBzdC5wZXJtaXNzaW9ucygpOworICAgIGVsc2UgaWYgKHJlbW92ZV9wZXJt
cykKKyAgICAgIHBybXMgPSBzdC5wZXJtaXNzaW9ucygpICYgfnBybXM7CisgIH0KKyAgY29uc3Qg
YXV0byByZWFsX3Blcm1zID0gZGV0YWlsOjpwb3NpeF9jb252ZXJ0X3Blcm1zKHBybXMpOworCisj
aWYgZGVmaW5lZChBVF9TWU1MSU5LX05PRk9MTE9XKSAmJiBkZWZpbmVkKEFUX0ZEQ1dEKQorICBj
b25zdCBpbnQgZmxhZ3MgPSBzZXRfc3ltX3Blcm1zID8gQVRfU1lNTElOS19OT0ZPTExPVyA6IDA7
CisgIGlmICg6OmZjaG1vZGF0KEFUX0ZEQ1dELCBwLmNfc3RyKCksIHJlYWxfcGVybXMsIGZsYWdz
KSA9PSAtMSkgeworICAgIHJldHVybiBlcnIucmVwb3J0KGNhcHR1cmVfZXJybm8oKSk7CisgIH0K
KyNlbHNlCisgIGlmIChzZXRfc3ltX3Blcm1zKQorICAgIHJldHVybiBlcnIucmVwb3J0KGVycmM6
Om9wZXJhdGlvbl9ub3Rfc3VwcG9ydGVkKTsKKyAgaWYgKDo6Y2htb2QocC5jX3N0cigpLCByZWFs
X3Blcm1zKSA9PSAtMSkgeworICAgIHJldHVybiBlcnIucmVwb3J0KGNhcHR1cmVfZXJybm8oKSk7
CisgIH0KKyNlbmRpZgorfQorCitwYXRoIF9fcmVhZF9zeW1saW5rKGNvbnN0IHBhdGgmIHAsIGVy
cm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjxwYXRoPiBlcnIoInJlYWRfc3ltbGluayIs
IGVjLCAmcCk7CisKKyAgY2hhciBidWZmW1BBVEhfTUFYICsgMV07CisgIGVycm9yX2NvZGUgbV9l
YzsKKyAgOjpzc2l6ZV90IHJldDsKKyAgaWYgKChyZXQgPSA6OnJlYWRsaW5rKHAuY19zdHIoKSwg
YnVmZiwgUEFUSF9NQVgpKSA9PSAtMSkgeworICAgIHJldHVybiBlcnIucmVwb3J0KGNhcHR1cmVf
ZXJybm8oKSk7CisgIH0KKyAgX0xJQkNQUF9BU1NFUlQocmV0IDw9IFBBVEhfTUFYLCAiVE9ETyIp
OworICBfTElCQ1BQX0FTU0VSVChyZXQgPiAwLCAiVE9ETyIpOworICBidWZmW3JldF0gPSAwOwor
ICByZXR1cm4ge2J1ZmZ9OworfQorCitib29sIF9fcmVtb3ZlKGNvbnN0IHBhdGgmIHAsIGVycm9y
X2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjxib29sPiBlcnIoInJlbW92ZSIsIGVjLCAmcCk7
CisgIGlmICg6OnJlbW92ZShwLmNfc3RyKCkpID09IC0xKSB7CisgICAgaWYgKGVycm5vICE9IEVO
T0VOVCkKKyAgICAgIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJubygpKTsKKyAgICByZXR1cm4gZmFs
c2U7CisgIH0KKyAgcmV0dXJuIHRydWU7Cit9CisKK25hbWVzcGFjZSB7CisKK3VpbnRtYXhfdCBy
ZW1vdmVfYWxsX2ltcGwocGF0aCBjb25zdCYgcCwgZXJyb3JfY29kZSYgZWMpIHsKKyAgY29uc3Qg
YXV0byBucG9zID0gc3RhdGljX2Nhc3Q8dWludG1heF90PigtMSk7CisgIGNvbnN0IGZpbGVfc3Rh
dHVzIHN0ID0gX19zeW1saW5rX3N0YXR1cyhwLCAmZWMpOworICBpZiAoZWMpCisgICAgcmV0dXJu
IG5wb3M7CisgIHVpbnRtYXhfdCBjb3VudCA9IDE7CisgIGlmIChpc19kaXJlY3Rvcnkoc3QpKSB7
CisgICAgZm9yIChkaXJlY3RvcnlfaXRlcmF0b3IgaXQocCwgZWMpOyAhZWMgJiYgaXQgIT0gZGly
ZWN0b3J5X2l0ZXJhdG9yKCk7CisgICAgICAgICBpdC5pbmNyZW1lbnQoZWMpKSB7CisgICAgICBh
dXRvIG90aGVyX2NvdW50ID0gcmVtb3ZlX2FsbF9pbXBsKGl0LT5wYXRoKCksIGVjKTsKKyAgICAg
IGlmIChlYykKKyAgICAgICAgcmV0dXJuIG5wb3M7CisgICAgICBjb3VudCArPSBvdGhlcl9jb3Vu
dDsKKyAgICB9CisgICAgaWYgKGVjKQorICAgICAgcmV0dXJuIG5wb3M7CisgIH0KKyAgaWYgKCFf
X3JlbW92ZShwLCAmZWMpKQorICAgIHJldHVybiBucG9zOworICByZXR1cm4gY291bnQ7Cit9CisK
K30gLy8gZW5kIG5hbWVzcGFjZQorCit1aW50bWF4X3QgX19yZW1vdmVfYWxsKGNvbnN0IHBhdGgm
IHAsIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjx1aW50bWF4X3Q+IGVycigicmVt
b3ZlX2FsbCIsIGVjLCAmcCk7CisKKyAgZXJyb3JfY29kZSBtZWM7CisgIGF1dG8gY291bnQgPSBy
ZW1vdmVfYWxsX2ltcGwocCwgbWVjKTsKKyAgaWYgKG1lYykgeworICAgIGlmIChtZWMgPT0gZXJy
Yzo6bm9fc3VjaF9maWxlX29yX2RpcmVjdG9yeSkKKyAgICAgIHJldHVybiAwOworICAgIHJldHVy
biBlcnIucmVwb3J0KG1lYyk7CisgIH0KKyAgcmV0dXJuIGNvdW50OworfQorCit2b2lkIF9fcmVu
YW1lKGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvLCBlcnJvcl9jb2RlKiBlYykgewor
ICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJyZW5hbWUiLCBlYywgJmZyb20sICZ0byk7CisgIGlm
ICg6OnJlbmFtZShmcm9tLmNfc3RyKCksIHRvLmNfc3RyKCkpID09IC0xKQorICAgIGVyci5yZXBv
cnQoY2FwdHVyZV9lcnJubygpKTsKK30KKwordm9pZCBfX3Jlc2l6ZV9maWxlKGNvbnN0IHBhdGgm
IHAsIHVpbnRtYXhfdCBzaXplLCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8dm9p
ZD4gZXJyKCJyZXNpemVfZmlsZSIsIGVjLCAmcCk7CisgIGlmICg6OnRydW5jYXRlKHAuY19zdHIo
KSwgc3RhdGljX2Nhc3Q8IDo6b2ZmX3Q+KHNpemUpKSA9PSAtMSkKKyAgICByZXR1cm4gZXJyLnJl
cG9ydChjYXB0dXJlX2Vycm5vKCkpOworfQorCitzcGFjZV9pbmZvIF9fc3BhY2UoY29uc3QgcGF0
aCYgcCwgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHZvaWQ+IGVycigic3BhY2Ui
LCBlYywgJnApOworICBzcGFjZV9pbmZvIHNpOworICBzdHJ1Y3Qgc3RhdHZmcyBtX3N2ZnMgPSB7
fTsKKyAgaWYgKDo6c3RhdHZmcyhwLmNfc3RyKCksICZtX3N2ZnMpID09IC0xKSB7CisgICAgZXJy
LnJlcG9ydChjYXB0dXJlX2Vycm5vKCkpOworICAgIHNpLmNhcGFjaXR5ID0gc2kuZnJlZSA9IHNp
LmF2YWlsYWJsZSA9IHN0YXRpY19jYXN0PHVpbnRtYXhfdD4oLTEpOworICAgIHJldHVybiBzaTsK
KyAgfQorICAvLyBNdWx0aXBseSB3aXRoIG92ZXJmbG93IGNoZWNraW5nLgorICBhdXRvIGRvX211
bHQgPSBbJl0odWludG1heF90JiBvdXQsIHVpbnRtYXhfdCBvdGhlcikgeworICAgIG91dCA9IG90
aGVyICogbV9zdmZzLmZfZnJzaXplOworICAgIGlmIChvdGhlciA9PSAwIHx8IG91dCAvIG90aGVy
ICE9IG1fc3Zmcy5mX2Zyc2l6ZSkKKyAgICAgIG91dCA9IHN0YXRpY19jYXN0PHVpbnRtYXhfdD4o
LTEpOworICB9OworICBkb19tdWx0KHNpLmNhcGFjaXR5LCBtX3N2ZnMuZl9ibG9ja3MpOworICBk
b19tdWx0KHNpLmZyZWUsIG1fc3Zmcy5mX2JmcmVlKTsKKyAgZG9fbXVsdChzaS5hdmFpbGFibGUs
IG1fc3Zmcy5mX2JhdmFpbCk7CisgIHJldHVybiBzaTsKK30KKworZmlsZV9zdGF0dXMgX19zdGF0
dXMoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMpIHsKKyAgcmV0dXJuIGRldGFpbDo6cG9z
aXhfc3RhdChwLCBlYyk7Cit9CisKK2ZpbGVfc3RhdHVzIF9fc3ltbGlua19zdGF0dXMoY29uc3Qg
cGF0aCYgcCwgZXJyb3JfY29kZSogZWMpIHsKKyAgcmV0dXJuIGRldGFpbDo6cG9zaXhfbHN0YXQo
cCwgZWMpOworfQorCitwYXRoIF9fdGVtcF9kaXJlY3RvcnlfcGF0aChlcnJvcl9jb2RlKiBlYykg
eworICBFcnJvckhhbmRsZXI8cGF0aD4gZXJyKCJ0ZW1wX2RpcmVjdG9yeV9wYXRoIiwgZWMpOwor
CisgIGNvbnN0IGNoYXIqIGVudl9wYXRoc1tdID0geyJUTVBESVIiLCAiVE1QIiwgIlRFTVAiLCAi
VEVNUERJUiJ9OworICBjb25zdCBjaGFyKiByZXQgPSBudWxscHRyOworCisgIGZvciAoYXV0byYg
ZXAgOiBlbnZfcGF0aHMpCisgICAgaWYgKChyZXQgPSBnZXRlbnYoZXApKSkKKyAgICAgIGJyZWFr
OworICBpZiAocmV0ID09IG51bGxwdHIpCisgICAgcmV0ID0gIi90bXAiOworCisgIHBhdGggcChy
ZXQpOworICBlcnJvcl9jb2RlIG1fZWM7CisgIGZpbGVfc3RhdHVzIHN0ID0gZGV0YWlsOjpwb3Np
eF9zdGF0KHAsICZtX2VjKTsKKyAgaWYgKCFzdGF0dXNfa25vd24oc3QpKQorICAgIHJldHVybiBl
cnIucmVwb3J0KG1fZWMsICJjYW5ub3QgYWNjZXNzIHBhdGggXCIlc1wiIiwgcCk7CisKKyAgaWYg
KCFleGlzdHMoc3QpIHx8ICFpc19kaXJlY3Rvcnkoc3QpKQorICAgIHJldHVybiBlcnIucmVwb3J0
KGVycmM6Om5vdF9hX2RpcmVjdG9yeSwgInBhdGggXCIlc1wiIGlzIG5vdCBhIGRpcmVjdG9yeSIs
CisgICAgICAgICAgICAgICAgICAgICAgcCk7CisKKyAgcmV0dXJuIHA7Cit9CisKK3BhdGggX193
ZWFrbHlfY2Fub25pY2FsKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9y
SGFuZGxlcjxwYXRoPiBlcnIoIndlYWtseV9jYW5vbmljYWwiLCBlYywgJnApOworCisgIGlmIChw
LmVtcHR5KCkpCisgICAgcmV0dXJuIF9fY2Fub25pY2FsKCIiLCBlYyk7CisKKyAgcGF0aCByZXN1
bHQ7CisgIHBhdGggdG1wOworICB0bXAuX19yZXNlcnZlKHAubmF0aXZlKCkuc2l6ZSgpKTsKKyAg
YXV0byBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUVuZChwLm5hdGl2ZSgpKTsKKyAgLS1QUDsKKyAg
dmVjdG9yPHN0cmluZ192aWV3X3Q+IERORVBhcnRzOworCisgIHdoaWxlIChQUC5TdGF0ZSAhPSBQ
YXRoUGFyc2VyOjpQU19CZWZvcmVCZWdpbikgeworICAgIHRtcC5hc3NpZ24oY3JlYXRlVmlldyhw
Lm5hdGl2ZSgpLmRhdGEoKSwgJlBQLlJhd0VudHJ5LmJhY2soKSkpOworICAgIGVycm9yX2NvZGUg
bV9lYzsKKyAgICBmaWxlX3N0YXR1cyBzdCA9IF9fc3RhdHVzKHRtcCwgJm1fZWMpOworICAgIGlm
ICghc3RhdHVzX2tub3duKHN0KSkgeworICAgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7Cisg
ICAgfSBlbHNlIGlmIChleGlzdHMoc3QpKSB7CisgICAgICByZXN1bHQgPSBfX2Nhbm9uaWNhbCh0
bXAsIGVjKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBETkVQYXJ0cy5wdXNoX2JhY2soKlBQ
KTsKKyAgICAtLVBQOworICB9CisgIGlmIChQUC5TdGF0ZSA9PSBQYXRoUGFyc2VyOjpQU19CZWZv
cmVCZWdpbikKKyAgICByZXN1bHQgPSBfX2Nhbm9uaWNhbCgiIiwgZWMpOworICBpZiAoZWMpCisg
ICAgZWMtPmNsZWFyKCk7CisgIGlmIChETkVQYXJ0cy5lbXB0eSgpKQorICAgIHJldHVybiByZXN1
bHQ7CisgIGZvciAoYXV0byBJdCA9IERORVBhcnRzLnJiZWdpbigpOyBJdCAhPSBETkVQYXJ0cy5y
ZW5kKCk7ICsrSXQpCisgICAgcmVzdWx0IC89ICpJdDsKKyAgcmV0dXJuIHJlc3VsdC5sZXhpY2Fs
bHlfbm9ybWFsKCk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhdGggZGVmaW5pdGlvbnMKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
KworY29uc3RleHByIHBhdGg6OnZhbHVlX3R5cGUgcGF0aDo6cHJlZmVycmVkX3NlcGFyYXRvcjsK
KworcGF0aCYgcGF0aDo6cmVwbGFjZV9leHRlbnNpb24ocGF0aCBjb25zdCYgcmVwbGFjZW1lbnQp
IHsKKyAgcGF0aCBwID0gZXh0ZW5zaW9uKCk7CisgIGlmIChub3QgcC5lbXB0eSgpKSB7CisgICAg
X19wbl8uZXJhc2UoX19wbl8uc2l6ZSgpIC0gcC5uYXRpdmUoKS5zaXplKCkpOworICB9CisgIGlm
ICghcmVwbGFjZW1lbnQuZW1wdHkoKSkgeworICAgIGlmIChyZXBsYWNlbWVudC5uYXRpdmUoKVsw
XSAhPSAnLicpIHsKKyAgICAgIF9fcG5fICs9ICIuIjsKKyAgICB9CisgICAgX19wbl8uYXBwZW5k
KHJlcGxhY2VtZW50Ll9fcG5fKTsKKyAgfQorICByZXR1cm4gKnRoaXM7Cit9CisKKy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KKy8vIHBhdGguZGVjb21wb3NlCisKK3N0cmluZ192aWV3X3QgcGF0aDo6
X19yb290X25hbWUoKSBjb25zdCB7CisgIGF1dG8gUFAgPSBQYXRoUGFyc2VyOjpDcmVhdGVCZWdp
bihfX3BuXyk7CisgIGlmIChQUC5TdGF0ZSA9PSBQYXRoUGFyc2VyOjpQU19JblJvb3ROYW1lKQor
ICAgIHJldHVybiAqUFA7CisgIHJldHVybiB7fTsKK30KKworc3RyaW5nX3ZpZXdfdCBwYXRoOjpf
X3Jvb3RfZGlyZWN0b3J5KCkgY29uc3QgeworICBhdXRvIFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRl
QmVnaW4oX19wbl8pOworICBpZiAoUFAuU3RhdGUgPT0gUGF0aFBhcnNlcjo6UFNfSW5Sb290TmFt
ZSkKKyAgICArK1BQOworICBpZiAoUFAuU3RhdGUgPT0gUGF0aFBhcnNlcjo6UFNfSW5Sb290RGly
KQorICAgIHJldHVybiAqUFA7CisgIHJldHVybiB7fTsKK30KKworc3RyaW5nX3ZpZXdfdCBwYXRo
OjpfX3Jvb3RfcGF0aF9yYXcoKSBjb25zdCB7CisgIGF1dG8gUFAgPSBQYXRoUGFyc2VyOjpDcmVh
dGVCZWdpbihfX3BuXyk7CisgIGlmIChQUC5TdGF0ZSA9PSBQYXRoUGFyc2VyOjpQU19JblJvb3RO
YW1lKSB7CisgICAgYXV0byBOZXh0Q2ggPSBQUC5wZWVrKCk7CisgICAgaWYgKE5leHRDaCAmJiAq
TmV4dENoID09ICcvJykgeworICAgICAgKytQUDsKKyAgICAgIHJldHVybiBjcmVhdGVWaWV3KF9f
cG5fLmRhdGEoKSwgJlBQLlJhd0VudHJ5LmJhY2soKSk7CisgICAgfQorICAgIHJldHVybiBQUC5S
YXdFbnRyeTsKKyAgfQorICBpZiAoUFAuU3RhdGUgPT0gUGF0aFBhcnNlcjo6UFNfSW5Sb290RGly
KQorICAgIHJldHVybiAqUFA7CisgIHJldHVybiB7fTsKK30KKworc3RhdGljIGJvb2wgQ29uc3Vt
ZVJvb3REaXIoUGF0aFBhcnNlciogUFApIHsKKyAgd2hpbGUgKFBQLT5TdGF0ZSA8PSBQYXRoUGFy
c2VyOjpQU19JblJvb3REaXIpCisgICAgKysoKlBQKTsKKyAgcmV0dXJuIFBQLT5TdGF0ZSA9PSBQ
YXRoUGFyc2VyOjpQU19BdEVuZDsKK30KKworc3RyaW5nX3ZpZXdfdCBwYXRoOjpfX3JlbGF0aXZl
X3BhdGgoKSBjb25zdCB7CisgIGF1dG8gUFAgPSBQYXRoUGFyc2VyOjpDcmVhdGVCZWdpbihfX3Bu
Xyk7CisgIGlmIChDb25zdW1lUm9vdERpcigmUFApKQorICAgIHJldHVybiB7fTsKKyAgcmV0dXJu
IGNyZWF0ZVZpZXcoUFAuUmF3RW50cnkuZGF0YSgpLCAmX19wbl8uYmFjaygpKTsKK30KKworc3Ry
aW5nX3ZpZXdfdCBwYXRoOjpfX3BhcmVudF9wYXRoKCkgY29uc3QgeworICBpZiAoZW1wdHkoKSkK
KyAgICByZXR1cm4ge307CisgIC8vIERldGVybWluZSBpZiB3ZSBoYXZlIGEgcm9vdCBwYXRoIGJ1
dCBub3QgYSByZWxhdGl2ZSBwYXRoLiBJbiB0aGF0IGNhc2UKKyAgLy8gcmV0dXJuICp0aGlzLgor
ICB7CisgICAgYXV0byBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKF9fcG5fKTsKKyAgICBp
ZiAoQ29uc3VtZVJvb3REaXIoJlBQKSkKKyAgICAgIHJldHVybiBfX3BuXzsKKyAgfQorICAvLyBP
dGhlcndpc2UgcmVtb3ZlIGEgc2luZ2xlIGVsZW1lbnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBwYXRo
LCBhbmQgcmV0dXJuCisgIC8vIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGF0IHBhdGgKKyAgewor
ICAgIGF1dG8gUFAgPSBQYXRoUGFyc2VyOjpDcmVhdGVFbmQoX19wbl8pOworICAgIC0tUFA7Cisg
ICAgaWYgKFBQLlJhd0VudHJ5LmRhdGEoKSA9PSBfX3BuXy5kYXRhKCkpCisgICAgICByZXR1cm4g
e307CisgICAgLS1QUDsKKyAgICByZXR1cm4gY3JlYXRlVmlldyhfX3BuXy5kYXRhKCksICZQUC5S
YXdFbnRyeS5iYWNrKCkpOworICB9Cit9CisKK3N0cmluZ192aWV3X3QgcGF0aDo6X19maWxlbmFt
ZSgpIGNvbnN0IHsKKyAgaWYgKGVtcHR5KCkpCisgICAgcmV0dXJuIHt9OworICB7CisgICAgUGF0
aFBhcnNlciBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKF9fcG5fKTsKKyAgICBpZiAoQ29u
c3VtZVJvb3REaXIoJlBQKSkKKyAgICAgIHJldHVybiB7fTsKKyAgfQorICByZXR1cm4gKigtLVBh
dGhQYXJzZXI6OkNyZWF0ZUVuZChfX3BuXykpOworfQorCitzdHJpbmdfdmlld190IHBhdGg6Ol9f
c3RlbSgpIGNvbnN0IHsKKyAgcmV0dXJuIHBhcnNlcjo6c2VwYXJhdGVfZmlsZW5hbWUoX19maWxl
bmFtZSgpKS5maXJzdDsKK30KKworc3RyaW5nX3ZpZXdfdCBwYXRoOjpfX2V4dGVuc2lvbigpIGNv
bnN0IHsKKyAgcmV0dXJuIHBhcnNlcjo6c2VwYXJhdGVfZmlsZW5hbWUoX19maWxlbmFtZSgpKS5z
ZWNvbmQ7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIHBhdGguZ2VuCisKK2VudW0gUGF0
aFBhcnRLaW5kIDogdW5zaWduZWQgY2hhciB7CisgIFBLX05vbmUsCisgIFBLX1Jvb3RTZXAsCisg
IFBLX0ZpbGVuYW1lLAorICBQS19Eb3QsCisgIFBLX0RvdERvdCwKKyAgUEtfVHJhaWxpbmdTZXAK
K307CisKK3N0YXRpYyBQYXRoUGFydEtpbmQgQ2xhc3NpZnlQYXRoUGFydChzdHJpbmdfdmlld190
IFBhcnQpIHsKKyAgaWYgKFBhcnQuZW1wdHkoKSkKKyAgICByZXR1cm4gUEtfVHJhaWxpbmdTZXA7
CisgIGlmIChQYXJ0ID09ICIuIikKKyAgICByZXR1cm4gUEtfRG90OworICBpZiAoUGFydCA9PSAi
Li4iKQorICAgIHJldHVybiBQS19Eb3REb3Q7CisgIGlmIChQYXJ0ID09ICIvIikKKyAgICByZXR1
cm4gUEtfUm9vdFNlcDsKKyAgcmV0dXJuIFBLX0ZpbGVuYW1lOworfQorCitwYXRoIHBhdGg6Omxl
eGljYWxseV9ub3JtYWwoKSBjb25zdCB7CisgIGlmIChfX3BuXy5lbXB0eSgpKQorICAgIHJldHVy
biAqdGhpczsKKworICB1c2luZyBQYXJ0S2luZFBhaXIgPSBwYWlyPHN0cmluZ192aWV3X3QsIFBh
dGhQYXJ0S2luZD47CisgIHZlY3RvcjxQYXJ0S2luZFBhaXI+IFBhcnRzOworICAvLyBHdWVzcyBh
cyB0byBob3cgbWFueSBlbGVtZW50cyB0aGUgcGF0aCBoYXMgdG8gYXZvaWQgcmVhbGxvY2F0aW5n
LgorICBQYXJ0cy5yZXNlcnZlKDMyKTsKKworICAvLyBUcmFjayB0aGUgdG90YWwgc2l6ZSBvZiB0
aGUgcGFydHMgYXMgd2UgY29sbGVjdCB0aGVtLiBUaGlzIGFsbG93cyB0aGUKKyAgLy8gcmVzdWx0
aW5nIHBhdGggdG8gcmVzZXJ2ZSB0aGUgY29ycmVjdCBhbW91bnQgb2YgbWVtb3J5LgorICBzaXpl
X3QgTmV3UGF0aFNpemUgPSAwOworICBhdXRvIEFkZFBhcnQgPSBbJl0oUGF0aFBhcnRLaW5kIEss
IHN0cmluZ192aWV3X3QgUCkgeworICAgIE5ld1BhdGhTaXplICs9IFAuc2l6ZSgpOworICAgIFBh
cnRzLmVtcGxhY2VfYmFjayhQLCBLKTsKKyAgfTsKKyAgYXV0byBMYXN0UGFydEtpbmQgPSBbJl0o
KSB7CisgICAgaWYgKFBhcnRzLmVtcHR5KCkpCisgICAgICByZXR1cm4gUEtfTm9uZTsKKyAgICBy
ZXR1cm4gUGFydHMuYmFjaygpLnNlY29uZDsKKyAgfTsKKworICBib29sIE1heWJlTmVlZFRyYWls
aW5nU2VwID0gZmFsc2U7CisgIC8vIEJ1aWxkIGEgc3RhY2sgY29udGFpbmluZyB0aGUgcmVtYWlu
aW5nIGVsZW1lbnRzIG9mIHRoZSBwYXRoLCBwb3BwaW5nIG9mZgorICAvLyBlbGVtZW50cyB3aGlj
aCBvY2N1ciBiZWZvcmUgYSAnLi4nIGVudHJ5LgorICBmb3IgKGF1dG8gUFAgPSBQYXRoUGFyc2Vy
OjpDcmVhdGVCZWdpbihfX3BuXyk7IFBQOyArK1BQKSB7CisgICAgYXV0byBQYXJ0ID0gKlBQOwor
ICAgIFBhdGhQYXJ0S2luZCBLaW5kID0gQ2xhc3NpZnlQYXRoUGFydChQYXJ0KTsKKyAgICBzd2l0
Y2ggKEtpbmQpIHsKKyAgICBjYXNlIFBLX0ZpbGVuYW1lOgorICAgIGNhc2UgUEtfUm9vdFNlcDog
eworICAgICAgLy8gQWRkIGFsbCBub24tZG90IGFuZCBub24tZG90LWRvdCBlbGVtZW50cyB0byB0
aGUgc3RhY2sgb2YgZWxlbWVudHMuCisgICAgICBBZGRQYXJ0KEtpbmQsIFBhcnQpOworICAgICAg
TWF5YmVOZWVkVHJhaWxpbmdTZXAgPSBmYWxzZTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIFBLX0RvdERvdDogeworICAgICAgLy8gT25seSBwdXNoIGEgIi4uIiBlbGVtZW50IGlmIHRo
ZXJlIGFyZSBubyBlbGVtZW50cyBwcmVjZWRpbmcgdGhlICIuLiIsCisgICAgICAvLyBvciBpZiB0
aGUgcHJlY2VkaW5nIGVsZW1lbnQgaXMgaXRzZWxmICIuLiIuCisgICAgICBhdXRvIExhc3RLaW5k
ID0gTGFzdFBhcnRLaW5kKCk7CisgICAgICBpZiAoTGFzdEtpbmQgPT0gUEtfRmlsZW5hbWUpIHsK
KyAgICAgICAgTmV3UGF0aFNpemUgLT0gUGFydHMuYmFjaygpLmZpcnN0LnNpemUoKTsKKyAgICAg
ICAgUGFydHMucG9wX2JhY2soKTsKKyAgICAgIH0gZWxzZSBpZiAoTGFzdEtpbmQgIT0gUEtfUm9v
dFNlcCkKKyAgICAgICAgQWRkUGFydChQS19Eb3REb3QsICIuLiIpOworICAgICAgTWF5YmVOZWVk
VHJhaWxpbmdTZXAgPSBMYXN0S2luZCA9PSBQS19GaWxlbmFtZTsKKyAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIFBLX0RvdDoKKyAgICBjYXNlIFBLX1RyYWlsaW5nU2VwOiB7CisgICAgICBN
YXliZU5lZWRUcmFpbGluZ1NlcCA9IHRydWU7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2Fz
ZSBQS19Ob25lOgorICAgICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOworICAgIH0KKyAgfQorICAv
LyBbZnMucGF0aC5nZW5lcmljXXA2Ljg6IElmIHRoZSBwYXRoIGlzIGVtcHR5LCBhZGQgYSBkb3Qu
CisgIGlmIChQYXJ0cy5lbXB0eSgpKQorICAgIHJldHVybiAiLiI7CisKKyAgLy8gW2ZzLnBhdGgu
Z2VuZXJpY11wNi43OiBJZiB0aGUgbGFzdCBmaWxlbmFtZSBpcyBkb3QtZG90LCByZW1vdmUgYW55
CisgIC8vIHRyYWlsaW5nIGRpcmVjdG9yeS1zZXBhcmF0b3IuCisgIGJvb2wgTmVlZFRyYWlsaW5n
U2VwID0gTWF5YmVOZWVkVHJhaWxpbmdTZXAgJiYgTGFzdFBhcnRLaW5kKCkgPT0gUEtfRmlsZW5h
bWU7CisKKyAgcGF0aCBSZXN1bHQ7CisgIFJlc3VsdC5fX3BuXy5yZXNlcnZlKFBhcnRzLnNpemUo
KSArIE5ld1BhdGhTaXplICsgTmVlZFRyYWlsaW5nU2VwKTsKKyAgZm9yIChhdXRvJiBQSyA6IFBh
cnRzKQorICAgIFJlc3VsdCAvPSBQSy5maXJzdDsKKworICBpZiAoTmVlZFRyYWlsaW5nU2VwKQor
ICAgIFJlc3VsdCAvPSAiIjsKKworICByZXR1cm4gUmVzdWx0OworfQorCitzdGF0aWMgaW50IERl
dGVybWluZUxleGljYWxFbGVtZW50Q291bnQoUGF0aFBhcnNlciBQUCkgeworICBpbnQgQ291bnQg
PSAwOworICBmb3IgKDsgUFA7ICsrUFApIHsKKyAgICBhdXRvIEVsZW0gPSAqUFA7CisgICAgaWYg
KEVsZW0gPT0gIi4uIikKKyAgICAgIC0tQ291bnQ7CisgICAgZWxzZSBpZiAoRWxlbSAhPSAiLiIp
CisgICAgICArK0NvdW50OworICB9CisgIHJldHVybiBDb3VudDsKK30KKworcGF0aCBwYXRoOjps
ZXhpY2FsbHlfcmVsYXRpdmUoY29uc3QgcGF0aCYgYmFzZSkgY29uc3QgeworICB7IC8vIHBlcmZv
cm0gcm9vdC1uYW1lL3Jvb3QtZGlyZWN0b3J5IG1pc21hdGNoIGNoZWNrcworICAgIGF1dG8gUFAg
PSBQYXRoUGFyc2VyOjpDcmVhdGVCZWdpbihfX3BuXyk7CisgICAgYXV0byBQUEJhc2UgPSBQYXRo
UGFyc2VyOjpDcmVhdGVCZWdpbihiYXNlLl9fcG5fKTsKKyAgICBhdXRvIENoZWNrSXRlck1pc21h
dGNoQXRCYXNlID0gWyZdKCkgeworICAgICAgcmV0dXJuIFBQLlN0YXRlICE9IFBQQmFzZS5TdGF0
ZSAmJgorICAgICAgICAgICAgIChQUC5pblJvb3RQYXRoKCkgfHwgUFBCYXNlLmluUm9vdFBhdGgo
KSk7CisgICAgfTsKKyAgICBpZiAoUFAuU3RhdGUgPT0gUGF0aFBhcnNlcjo6UFNfSW5Sb290TmFt
ZSAmJgorICAgICAgICBQUEJhc2UuU3RhdGUgPT0gUGF0aFBhcnNlcjo6UFNfSW5Sb290TmFtZSkg
eworICAgICAgaWYgKCpQUCAhPSAqUFBCYXNlKQorICAgICAgICByZXR1cm4ge307CisgICAgfSBl
bHNlIGlmIChDaGVja0l0ZXJNaXNtYXRjaEF0QmFzZSgpKQorICAgICAgcmV0dXJuIHt9OworCisg
ICAgaWYgKFBQLmluUm9vdFBhdGgoKSkKKyAgICAgICsrUFA7CisgICAgaWYgKFBQQmFzZS5pblJv
b3RQYXRoKCkpCisgICAgICArK1BQQmFzZTsKKyAgICBpZiAoQ2hlY2tJdGVyTWlzbWF0Y2hBdEJh
c2UoKSkKKyAgICAgIHJldHVybiB7fTsKKyAgfQorCisgIC8vIEZpbmQgdGhlIGZpcnN0IG1pc21h
dGNoaW5nIGVsZW1lbnQKKyAgYXV0byBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKF9fcG5f
KTsKKyAgYXV0byBQUEJhc2UgPSBQYXRoUGFyc2VyOjpDcmVhdGVCZWdpbihiYXNlLl9fcG5fKTsK
KyAgd2hpbGUgKFBQICYmIFBQQmFzZSAmJiBQUC5TdGF0ZSA9PSBQUEJhc2UuU3RhdGUgJiYgKlBQ
ID09ICpQUEJhc2UpIHsKKyAgICArK1BQOworICAgICsrUFBCYXNlOworICB9CisKKyAgLy8gSWYg
dGhlcmUgaXMgbm8gbWlzbWF0Y2gsIHJldHVybiAiLiIuCisgIGlmICghUFAgJiYgIVBQQmFzZSkK
KyAgICByZXR1cm4gIi4iOworCisgIC8vIE90aGVyd2lzZSwgZGV0ZXJtaW5lIHRoZSBudW1iZXIg
b2YgZWxlbWVudHMsICduJywgd2hpY2ggYXJlIG5vdCBkb3Qgb3IKKyAgLy8gZG90LWRvdCBtaW51
cyB0aGUgbnVtYmVyIG9mIGRvdC1kb3QgZWxlbWVudHMuCisgIGludCBFbGVtQ291bnQgPSBEZXRl
cm1pbmVMZXhpY2FsRWxlbWVudENvdW50KFBQQmFzZSk7CisgIGlmIChFbGVtQ291bnQgPCAwKQor
ICAgIHJldHVybiB7fTsKKworICAvLyByZXR1cm4gYSBwYXRoIGNvbnN0cnVjdGVkIHdpdGggJ24n
IGRvdC1kb3QgZWxlbWVudHMsIGZvbGxvd2VkIGJ5IHRoZSB0aGUKKyAgLy8gZWxlbWVudHMgb2Yg
Jyp0aGlzJyBhZnRlciB0aGUgbWlzbWF0Y2guCisgIHBhdGggUmVzdWx0OworICAvLyBGSVhNRTog
UmVzZXJ2ZSBlbm91Z2ggcm9vbSBpbiBSZXN1bHQgdGhhdCBpdCB3b24ndCBoYXZlIHRvIHJlLWFs
bG9jYXRlLgorICB3aGlsZSAoRWxlbUNvdW50LS0pCisgICAgUmVzdWx0IC89ICIuLiI7CisgIGZv
ciAoOyBQUDsgKytQUCkKKyAgICBSZXN1bHQgLz0gKlBQOworICByZXR1cm4gUmVzdWx0OworfQor
CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBwYXRoLmNvbXBhcmlzb25zCitpbnQgcGF0aDo6X19j
b21wYXJlKHN0cmluZ192aWV3X3QgX19zKSBjb25zdCB7CisgIGF1dG8gUFAgPSBQYXRoUGFyc2Vy
OjpDcmVhdGVCZWdpbihfX3BuXyk7CisgIGF1dG8gUFAyID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVn
aW4oX19zKTsKKyAgd2hpbGUgKFBQICYmIFBQMikgeworICAgIGludCByZXMgPSAoKlBQKS5jb21w
YXJlKCpQUDIpOworICAgIGlmIChyZXMgIT0gMCkKKyAgICAgIHJldHVybiByZXM7CisgICAgKytQ
UDsKKyAgICArK1BQMjsKKyAgfQorICBpZiAoUFAuU3RhdGUgPT0gUFAyLlN0YXRlICYmICFQUCkK
KyAgICByZXR1cm4gMDsKKyAgaWYgKCFQUCkKKyAgICByZXR1cm4gLTE7CisgIHJldHVybiAxOwor
fQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBwYXRoLm5vbm1lbWJlcnMKK3NpemVfdCBoYXNo
X3ZhbHVlKGNvbnN0IHBhdGgmIF9fcCkgbm9leGNlcHQgeworICBhdXRvIFBQID0gUGF0aFBhcnNl
cjo6Q3JlYXRlQmVnaW4oX19wLm5hdGl2ZSgpKTsKKyAgc2l6ZV90IGhhc2hfdmFsdWUgPSAwOwor
ICBoYXNoPHN0cmluZ192aWV3X3Q+IGhhc2hlcjsKKyAgd2hpbGUgKFBQKSB7CisgICAgaGFzaF92
YWx1ZSA9IF9faGFzaF9jb21iaW5lKGhhc2hfdmFsdWUsIGhhc2hlcigqUFApKTsKKyAgICArK1BQ
OworICB9CisgIHJldHVybiBoYXNoX3ZhbHVlOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisv
LyBwYXRoLml0cgorcGF0aDo6aXRlcmF0b3IgcGF0aDo6YmVnaW4oKSBjb25zdCB7CisgIGF1dG8g
UFAgPSBQYXRoUGFyc2VyOjpDcmVhdGVCZWdpbihfX3BuXyk7CisgIGl0ZXJhdG9yIGl0OworICBp
dC5fX3BhdGhfcHRyXyA9IHRoaXM7CisgIGl0Ll9fc3RhdGVfID0gc3RhdGljX2Nhc3Q8cGF0aDo6
aXRlcmF0b3I6Ol9QYXJzZXJTdGF0ZT4oUFAuU3RhdGUpOworICBpdC5fX2VudHJ5XyA9IFBQLlJh
d0VudHJ5OworICBpdC5fX3N0YXNoZWRfZWxlbV8uX19hc3NpZ25fdmlldygqUFApOworICByZXR1
cm4gaXQ7Cit9CisKK3BhdGg6Oml0ZXJhdG9yIHBhdGg6OmVuZCgpIGNvbnN0IHsKKyAgaXRlcmF0
b3IgaXR7fTsKKyAgaXQuX19zdGF0ZV8gPSBwYXRoOjppdGVyYXRvcjo6X0F0RW5kOworICBpdC5f
X3BhdGhfcHRyXyA9IHRoaXM7CisgIHJldHVybiBpdDsKK30KKworcGF0aDo6aXRlcmF0b3ImIHBh
dGg6Oml0ZXJhdG9yOjpfX2luY3JlbWVudCgpIHsKKyAgUGF0aFBhcnNlciBQUChfX3BhdGhfcHRy
Xy0+bmF0aXZlKCksIF9fZW50cnlfLCBfX3N0YXRlXyk7CisgICsrUFA7CisgIF9fc3RhdGVfID0g
c3RhdGljX2Nhc3Q8X1BhcnNlclN0YXRlPihQUC5TdGF0ZSk7CisgIF9fZW50cnlfID0gUFAuUmF3
RW50cnk7CisgIF9fc3Rhc2hlZF9lbGVtXy5fX2Fzc2lnbl92aWV3KCpQUCk7CisgIHJldHVybiAq
dGhpczsKK30KKworcGF0aDo6aXRlcmF0b3ImIHBhdGg6Oml0ZXJhdG9yOjpfX2RlY3JlbWVudCgp
IHsKKyAgUGF0aFBhcnNlciBQUChfX3BhdGhfcHRyXy0+bmF0aXZlKCksIF9fZW50cnlfLCBfX3N0
YXRlXyk7CisgIC0tUFA7CisgIF9fc3RhdGVfID0gc3RhdGljX2Nhc3Q8X1BhcnNlclN0YXRlPihQ
UC5TdGF0ZSk7CisgIF9fZW50cnlfID0gUFAuUmF3RW50cnk7CisgIF9fc3Rhc2hlZF9lbGVtXy5f
X2Fzc2lnbl92aWV3KCpQUCk7CisgIHJldHVybiAqdGhpczsKK30KKworLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgZW50cnkgZGVm
aW5pdGlvbnMKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworI2lmbmRlZiBfTElCQ1BQX1dJTjMy
QVBJCitlcnJvcl9jb2RlIGRpcmVjdG9yeV9lbnRyeTo6X19kb19yZWZyZXNoKCkgbm9leGNlcHQg
eworICBfX2RhdGFfLl9fcmVzZXQoKTsKKyAgZXJyb3JfY29kZSBmYWlsdXJlX2VjOworCisgIFN0
YXRUIGZ1bGxfc3Q7CisgIGZpbGVfc3RhdHVzIHN0ID0gZGV0YWlsOjpwb3NpeF9sc3RhdChfX3Bf
LCBmdWxsX3N0LCAmZmFpbHVyZV9lYyk7CisgIGlmICghc3RhdHVzX2tub3duKHN0KSkgeworICAg
IF9fZGF0YV8uX19yZXNldCgpOworICAgIHJldHVybiBmYWlsdXJlX2VjOworICB9CisKKyAgaWYg
KCFfVlNURF9GUzo6ZXhpc3RzKHN0KSB8fCAhX1ZTVERfRlM6OmlzX3N5bWxpbmsoc3QpKSB7Cisg
ICAgX19kYXRhXy5fX2NhY2hlX3R5cGVfID0gZGlyZWN0b3J5X2VudHJ5OjpfUmVmcmVzaE5vblN5
bWxpbms7CisgICAgX19kYXRhXy5fX3R5cGVfID0gc3QudHlwZSgpOworICAgIF9fZGF0YV8uX19u
b25fc3ltX3Blcm1zXyA9IHN0LnBlcm1pc3Npb25zKCk7CisgIH0gZWxzZSB7IC8vIHdlIGhhdmUg
YSBzeW1saW5rCisgICAgX19kYXRhXy5fX3N5bV9wZXJtc18gPSBzdC5wZXJtaXNzaW9ucygpOwor
ICAgIC8vIEdldCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpbmtlZCBlbnRpdHkuCisgICAg
Ly8gSWdub3JlIGVycm9ycyBmcm9tIHN0YXQsIHNpbmNlIHdlIGRvbid0IHdhbnQgZXJyb3JzIHJl
Z2FyZGluZyBzeW1saW5rCisgICAgLy8gcmVzb2x1dGlvbiB0byBiZSByZXBvcnRlZCB0byB0aGUg
dXNlci4KKyAgICBlcnJvcl9jb2RlIGlnbm9yZWRfZWM7CisgICAgc3QgPSBkZXRhaWw6OnBvc2l4
X3N0YXQoX19wXywgZnVsbF9zdCwgJmlnbm9yZWRfZWMpOworCisgICAgX19kYXRhXy5fX3R5cGVf
ID0gc3QudHlwZSgpOworICAgIF9fZGF0YV8uX19ub25fc3ltX3Blcm1zXyA9IHN0LnBlcm1pc3Np
b25zKCk7CisKKyAgICAvLyBJZiB3ZSBmYWlsZWQgdG8gcmVzb2x2ZSB0aGUgbGluaywgdGhlbiBv
bmx5IHBhcnRpYWxseSBwb3B1bGF0ZSB0aGUKKyAgICAvLyBjYWNoZS4KKyAgICBpZiAoIXN0YXR1
c19rbm93bihzdCkpIHsKKyAgICAgIF9fZGF0YV8uX19jYWNoZV90eXBlXyA9IGRpcmVjdG9yeV9l
bnRyeTo6X1JlZnJlc2hTeW1saW5rVW5yZXNvbHZlZDsKKyAgICAgIHJldHVybiBlcnJvcl9jb2Rl
e307CisgICAgfQorICAgIC8vIE90aGVyd2lzZSwgd2UgcmVzb2x2ZWQgdGhlIGxpbmssIHBvdGVu
dGlhbGx5IGFzIG5vdCBleGlzdGluZy4KKyAgICAvLyBUaGF0J3MgT0suCisgICAgX19kYXRhXy5f
X2NhY2hlX3R5cGVfID0gZGlyZWN0b3J5X2VudHJ5OjpfUmVmcmVzaFN5bWxpbms7CisgIH0KKwor
ICBpZiAoX1ZTVERfRlM6OmlzX3JlZ3VsYXJfZmlsZShzdCkpCisgICAgX19kYXRhXy5fX3NpemVf
ID0gc3RhdGljX2Nhc3Q8dWludG1heF90PihmdWxsX3N0LnN0X3NpemUpOworCisgIGlmIChfVlNU
RF9GUzo6ZXhpc3RzKHN0KSkgeworICAgIF9fZGF0YV8uX19ubGlua18gPSBzdGF0aWNfY2FzdDx1
aW50bWF4X3Q+KGZ1bGxfc3Quc3RfbmxpbmspOworCisgICAgLy8gQXR0ZW1wdCB0byBleHRyYWN0
IHRoZSBtdGltZSwgYW5kIGZhaWwgaWYgaXQncyBub3QgcmVwcmVzZW50YWJsZSB1c2luZworICAg
IC8vIGZpbGVfdGltZV90eXBlLiBGb3Igbm93IHdlIGlnbm9yZSB0aGUgZXJyb3IsIGFzIHdlJ2xs
IHJlcG9ydCBpdCB3aGVuCisgICAgLy8gdGhlIHZhbHVlIGlzIGFjdHVhbGx5IHVzZWQuCisgICAg
ZXJyb3JfY29kZSBpZ25vcmVkX2VjOworICAgIF9fZGF0YV8uX193cml0ZV90aW1lXyA9CisgICAg
ICAgIF9fZXh0cmFjdF9sYXN0X3dyaXRlX3RpbWUoX19wXywgZnVsbF9zdCwgJmlnbm9yZWRfZWMp
OworICB9CisKKyAgcmV0dXJuIGZhaWx1cmVfZWM7Cit9CisjZWxzZQorZXJyb3JfY29kZSBkaXJl
Y3RvcnlfZW50cnk6Ol9fZG9fcmVmcmVzaCgpIG5vZXhjZXB0IHsKKyAgX19kYXRhXy5fX3Jlc2V0
KCk7CisgIGVycm9yX2NvZGUgZmFpbHVyZV9lYzsKKworICBmaWxlX3N0YXR1cyBzdCA9IF9WU1RE
X0ZTOjpzeW1saW5rX3N0YXR1cyhfX3BfLCBmYWlsdXJlX2VjKTsKKyAgaWYgKCFzdGF0dXNfa25v
d24oc3QpKSB7CisgICAgX19kYXRhXy5fX3Jlc2V0KCk7CisgICAgcmV0dXJuIGZhaWx1cmVfZWM7
CisgIH0KKworICBpZiAoIV9WU1REX0ZTOjpleGlzdHMoc3QpIHx8ICFfVlNURF9GUzo6aXNfc3lt
bGluayhzdCkpIHsKKyAgICBfX2RhdGFfLl9fY2FjaGVfdHlwZV8gPSBkaXJlY3RvcnlfZW50cnk6
Ol9SZWZyZXNoTm9uU3ltbGluazsKKyAgICBfX2RhdGFfLl9fdHlwZV8gPSBzdC50eXBlKCk7Cisg
ICAgX19kYXRhXy5fX25vbl9zeW1fcGVybXNfID0gc3QucGVybWlzc2lvbnMoKTsKKyAgfSBlbHNl
IHsgLy8gd2UgaGF2ZSBhIHN5bWxpbmsKKyAgICBfX2RhdGFfLl9fc3ltX3Blcm1zXyA9IHN0LnBl
cm1pc3Npb25zKCk7CisgICAgLy8gR2V0IHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbGlua2Vk
IGVudGl0eS4KKyAgICAvLyBJZ25vcmUgZXJyb3JzIGZyb20gc3RhdCwgc2luY2Ugd2UgZG9uJ3Qg
d2FudCBlcnJvcnMgcmVnYXJkaW5nIHN5bWxpbmsKKyAgICAvLyByZXNvbHV0aW9uIHRvIGJlIHJl
cG9ydGVkIHRvIHRoZSB1c2VyLgorICAgIGVycm9yX2NvZGUgaWdub3JlZF9lYzsKKyAgICBzdCA9
IF9WU1REX0ZTOjpzdGF0dXMoX19wXywgaWdub3JlZF9lYyk7CisKKyAgICBfX2RhdGFfLl9fdHlw
ZV8gPSBzdC50eXBlKCk7CisgICAgX19kYXRhXy5fX25vbl9zeW1fcGVybXNfID0gc3QucGVybWlz
c2lvbnMoKTsKKworICAgIC8vIElmIHdlIGZhaWxlZCB0byByZXNvbHZlIHRoZSBsaW5rLCB0aGVu
IG9ubHkgcGFydGlhbGx5IHBvcHVsYXRlIHRoZQorICAgIC8vIGNhY2hlLgorICAgIGlmICghc3Rh
dHVzX2tub3duKHN0KSkgeworICAgICAgX19kYXRhXy5fX2NhY2hlX3R5cGVfID0gZGlyZWN0b3J5
X2VudHJ5OjpfUmVmcmVzaFN5bWxpbmtVbnJlc29sdmVkOworICAgICAgcmV0dXJuIGVycm9yX2Nv
ZGV7fTsKKyAgICB9CisgICAgX19kYXRhXy5fX2NhY2hlX3R5cGVfID0gZGlyZWN0b3J5X2VudHJ5
OjpfUmVmcmVzaFN5bWxpbms7CisgIH0KKworICAvLyBGSVhNRTogVGhpcyBpcyBjdXJyZW50bHkg
YnJva2VuLCBhbmQgdGhlIGltcGxlbWVudGF0aW9uIG9ubHkgYSBwbGFjZWhvbGRlci4KKyAgLy8g
V2UgbmVlZCB0byBjYWNoZSBsYXN0X3dyaXRlX3RpbWUsIGZpbGVfc2l6ZSwgYW5kIGhhcmRfbGlu
a19jb3VudCBoZXJlIGJlZm9yZQorICAvLyB0aGUgaW1wbGVtZW50YXRpb24gYWN0dWFsbHkgd29y
a3MuCisKKyAgcmV0dXJuIGZhaWx1cmVfZWM7Cit9CisjZW5kaWYKKworX0xJQkNQUF9FTkRfTkFN
RVNQQUNFX0ZJTEVTWVNURU0KKworLyogLS0gRU5EIGZpbGVzeXN0ZW0vb3BlcmF0aW9ucy5jcHAg
LS0gKi8KKworI2VuZGlmIC8vIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDE1
MDAKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVy
L1N0ZEZpbGVzeXN0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1N0
ZEZpbGVzeXN0ZW0uaAkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1N0
ZEZpbGVzeXN0ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI3MDAgQEAKKy8vIC0qLSBD
KysgLSotCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBmaWxlc3lzdGVtIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworLy8KKy8vICAgICAgICAgICAgICAgICAg
ICAgVGhlIExMVk0gQ29tcGlsZXIgSW5mcmFzdHJ1Y3R1cmUKKy8vCisvLyBUaGlzIGZpbGUgaXMg
ZHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGFuZCB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9p
cyBPcGVuCisvLyBTb3VyY2UgTGljZW5zZXMuIFNlZSBMSUNFTlNFLlRYVCBmb3IgZGV0YWlscy4K
Ky8vCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworCisjaWYgX19oYXNfaW5jbHVkZSg8ZmlsZXN5
c3RlbT4pCisjaW5jbHVkZSA8ZmlsZXN5c3RlbT4KKyNlbHNlCisKKy8qIEltcG9ydHMgYSBjb3B5
IG9mIDxmaWxlc3lzdGVtPiBmcm9tIHIzNDM4Mzggb2YgdGhlIGxpYmMrKyBwcm9qZWN0LiAqLwor
CisjaWZuZGVmIF9MSUJDUFBfRklMRVNZU1RFTQorI2RlZmluZSBfTElCQ1BQX0ZJTEVTWVNURU0K
Ky8qCisgICAgZmlsZXN5c3RlbSBzeW5vcHNpcworCisgICAgbmFtZXNwYWNlIHN0ZCB7IG5hbWVz
cGFjZSBmaWxlc3lzdGVtIHsKKworICAgIGNsYXNzIHBhdGg7CisKKyAgICB2b2lkIHN3YXAocGF0
aCYgbGhzLCBwYXRoJiByaHMpIG5vZXhjZXB0OworICAgIHNpemVfdCBoYXNoX3ZhbHVlKGNvbnN0
IHBhdGgmIHApIG5vZXhjZXB0OworCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHBhdGgmIGxo
cywgY29uc3QgcGF0aCYgcmhzKSBub2V4Y2VwdDsKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
cGF0aCYgbGhzLCBjb25zdCBwYXRoJiByaHMpIG5vZXhjZXB0OworICAgIGJvb2wgb3BlcmF0b3I8
IChjb25zdCBwYXRoJiBsaHMsIGNvbnN0IHBhdGgmIHJocykgbm9leGNlcHQ7CisgICAgYm9vbCBv
cGVyYXRvcjw9KGNvbnN0IHBhdGgmIGxocywgY29uc3QgcGF0aCYgcmhzKSBub2V4Y2VwdDsKKyAg
ICBib29sIG9wZXJhdG9yPiAoY29uc3QgcGF0aCYgbGhzLCBjb25zdCBwYXRoJiByaHMpIG5vZXhj
ZXB0OworICAgIGJvb2wgb3BlcmF0b3I+PShjb25zdCBwYXRoJiBsaHMsIGNvbnN0IHBhdGgmIHJo
cykgbm9leGNlcHQ7CisKKyAgICBwYXRoIG9wZXJhdG9yLyAoY29uc3QgcGF0aCYgbGhzLCBjb25z
dCBwYXRoJiByaHMpOworCisgICAgLy8gZnMucGF0aC5pbyBvcGVyYXRvcnMgYXJlIGZyaWVuZHMg
b2YgcGF0aC4KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cz4KKyAgICBm
cmllbmQgYmFzaWNfb3N0cmVhbTxjaGFyVCwgdHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KGJhc2lj
X29zdHJlYW08Y2hhclQsIHRyYWl0cz4mIG9zLCBjb25zdCBwYXRoJiBwKTsKKworICAgIHRlbXBs
YXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzPgorICAgIGZyaWVuZCBiYXNpY19pc3RyZWFt
PGNoYXJULCB0cmFpdHM+JgorICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyVCwgdHJh
aXRzPiYgaXMsIHBhdGgmIHApOworCisgICAgdGVtcGxhdGUgPGNsYXNzIFNvdXJjZT4KKyAgICAg
IHBhdGggdThwYXRoKGNvbnN0IFNvdXJjZSYgc291cmNlKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
SW5wdXRJdGVyYXRvcj4KKyAgICAgIHBhdGggdThwYXRoKElucHV0SXRlcmF0b3IgZmlyc3QsIElu
cHV0SXRlcmF0b3IgbGFzdCk7CisKKyAgICBjbGFzcyBmaWxlc3lzdGVtX2Vycm9yOworICAgIGNs
YXNzIGRpcmVjdG9yeV9lbnRyeTsKKworICAgIGNsYXNzIGRpcmVjdG9yeV9pdGVyYXRvcjsKKwor
ICAgIC8vIGVuYWJsZSBkaXJlY3RvcnlfaXRlcmF0b3IgcmFuZ2UtYmFzZWQgZm9yIHN0YXRlbWVu
dHMKKyAgICBkaXJlY3RvcnlfaXRlcmF0b3IgYmVnaW4oZGlyZWN0b3J5X2l0ZXJhdG9yIGl0ZXIp
IG5vZXhjZXB0OworICAgIGRpcmVjdG9yeV9pdGVyYXRvciBlbmQoY29uc3QgZGlyZWN0b3J5X2l0
ZXJhdG9yJikgbm9leGNlcHQ7CisKKyAgICBjbGFzcyByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJh
dG9yOworCisgICAgLy8gZW5hYmxlIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IgcmFuZ2Ut
YmFzZWQgZm9yIHN0YXRlbWVudHMKKyAgICByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yIGJl
Z2luKHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IgaXRlcikgbm9leGNlcHQ7CisgICAgcmVj
dXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciBlbmQoY29uc3QgcmVjdXJzaXZlX2RpcmVjdG9yeV9p
dGVyYXRvciYpIG5vZXhjZXB0OworCisgICAgY2xhc3MgZmlsZV9zdGF0dXM7CisKKyAgICBzdHJ1
Y3Qgc3BhY2VfaW5mbworICAgIHsKKyAgICAgIHVpbnRtYXhfdCBjYXBhY2l0eTsKKyAgICAgIHVp
bnRtYXhfdCBmcmVlOworICAgICAgdWludG1heF90IGF2YWlsYWJsZTsKKyAgICB9OworCisgICAg
ZW51bSBjbGFzcyBmaWxlX3R5cGU7CisgICAgZW51bSBjbGFzcyBwZXJtczsKKyAgICBlbnVtIGNs
YXNzIHBlcm1fb3B0aW9uczsKKyAgICBlbnVtIGNsYXNzIGNvcHlfb3B0aW9uczsKKyAgICBlbnVt
IGNsYXNzIGRpcmVjdG9yeV9vcHRpb25zOworCisgICAgdHlwZWRlZiBjaHJvbm86OnRpbWVfcG9p
bnQ8dHJpdmlhbC1jbG9jaz4gIGZpbGVfdGltZV90eXBlOworCisgICAgLy8gb3BlcmF0aW9uYWwg
ZnVuY3Rpb25zCisKKyAgICBwYXRoIGFic29sdXRlKGNvbnN0IHBhdGgmIHApOworICAgIHBhdGgg
YWJzb2x1dGUoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSAmZWMpOworCisgICAgcGF0aCBjYW5v
bmljYWwoY29uc3QgcGF0aCYgcCk7CisgICAgcGF0aCBjYW5vbmljYWwoY29uc3QgcGF0aCYgcCwg
ZXJyb3JfY29kZSYgZWMpOworCisgICAgdm9pZCBjb3B5KGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0
IHBhdGgmIHRvKTsKKyAgICB2b2lkIGNvcHkoY29uc3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYg
dG8sIGVycm9yX2NvZGUmIGVjKTsKKyAgICB2b2lkIGNvcHkoY29uc3QgcGF0aCYgZnJvbSwgY29u
c3QgcGF0aCYgdG8sIGNvcHlfb3B0aW9ucyBvcHRpb25zKTsKKyAgICB2b2lkIGNvcHkoY29uc3Qg
cGF0aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8sIGNvcHlfb3B0aW9ucyBvcHRpb25zLAorICAgICAg
ICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKTsKKworICAgIGJvb2wgY29weV9maWxlKGNvbnN0
IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvKTsKKyAgICBib29sIGNvcHlfZmlsZShjb25zdCBw
YXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0bywgZXJyb3JfY29kZSYgZWMpOworICAgIGJvb2wgY29w
eV9maWxlKGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvLCBjb3B5X29wdGlvbnMgb3B0
aW9uKTsKKyAgICBib29sIGNvcHlfZmlsZShjb25zdCBwYXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0
bywgY29weV9vcHRpb25zIG9wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9y
X2NvZGUmIGVjKTsKKworICAgIHZvaWQgY29weV9zeW1saW5rKGNvbnN0IHBhdGgmIGV4aXN0aW5n
X3N5bWxpbmssIGNvbnN0IHBhdGgmIG5ld19zeW1saW5rKTsKKyAgICB2b2lkIGNvcHlfc3ltbGlu
ayhjb25zdCBwYXRoJiBleGlzdGluZ19zeW1saW5rLCBjb25zdCBwYXRoJiBuZXdfc3ltbGluaywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsK
KworICAgIGJvb2wgY3JlYXRlX2RpcmVjdG9yaWVzKGNvbnN0IHBhdGgmIHApOworICAgIGJvb2wg
Y3JlYXRlX2RpcmVjdG9yaWVzKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKTsKKworICAg
IGJvb2wgY3JlYXRlX2RpcmVjdG9yeShjb25zdCBwYXRoJiBwKTsKKyAgICBib29sIGNyZWF0ZV9k
aXJlY3RvcnkoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAg
Ym9vbCBjcmVhdGVfZGlyZWN0b3J5KGNvbnN0IHBhdGgmIHAsIGNvbnN0IHBhdGgmIGF0dHJpYnV0
ZXMpOworICAgIGJvb2wgY3JlYXRlX2RpcmVjdG9yeShjb25zdCBwYXRoJiBwLCBjb25zdCBwYXRo
JiBhdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2Nv
ZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIHZvaWQgY3JlYXRlX2RpcmVjdG9yeV9zeW1saW5rKGNv
bnN0IHBhdGgmIHRvLCBjb25zdCBwYXRoJiBuZXdfc3ltbGluayk7CisgICAgdm9pZCBjcmVhdGVf
ZGlyZWN0b3J5X3N5bWxpbmsoY29uc3QgcGF0aCYgdG8sIGNvbnN0IHBhdGgmIG5ld19zeW1saW5r
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYg
ZWMpIG5vZXhjZXB0OworCisgICAgdm9pZCBjcmVhdGVfaGFyZF9saW5rKGNvbnN0IHBhdGgmIHRv
LCBjb25zdCBwYXRoJiBuZXdfaGFyZF9saW5rKTsKKyAgICB2b2lkIGNyZWF0ZV9oYXJkX2xpbmso
Y29uc3QgcGF0aCYgdG8sIGNvbnN0IHBhdGgmIG5ld19oYXJkX2xpbmssCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgdm9p
ZCBjcmVhdGVfc3ltbGluayhjb25zdCBwYXRoJiB0bywgY29uc3QgcGF0aCYgbmV3X3N5bWxpbmsp
OworICAgIHZvaWQgY3JlYXRlX3N5bWxpbmsoY29uc3QgcGF0aCYgdG8sIGNvbnN0IHBhdGgmIG5l
d19zeW1saW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBl
Yykgbm9leGNlcHQ7CisKKyAgICBwYXRoIGN1cnJlbnRfcGF0aCgpOworICAgIHBhdGggY3VycmVu
dF9wYXRoKGVycm9yX2NvZGUmIGVjKTsKKyAgICB2b2lkIGN1cnJlbnRfcGF0aChjb25zdCBwYXRo
JiBwKTsKKyAgICB2b2lkIGN1cnJlbnRfcGF0aChjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBl
Yykgbm9leGNlcHQ7CisKKyAgICBib29sIGV4aXN0cyhmaWxlX3N0YXR1cyBzKSBub2V4Y2VwdDsK
KyAgICBib29sIGV4aXN0cyhjb25zdCBwYXRoJiBwKTsKKyAgICBib29sIGV4aXN0cyhjb25zdCBw
YXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29sIGVxdWl2YWxlbnQo
Y29uc3QgcGF0aCYgcDEsIGNvbnN0IHBhdGgmIHAyKTsKKyAgICBib29sIGVxdWl2YWxlbnQoY29u
c3QgcGF0aCYgcDEsIGNvbnN0IHBhdGgmIHAyLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisK
KyAgICB1aW50bWF4X3QgICAgZmlsZV9zaXplKGNvbnN0IHBhdGgmIHApOworICAgIHVpbnRtYXhf
dCAgICBmaWxlX3NpemUoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0Owor
CisgICAgdWludG1heF90ICAgIGhhcmRfbGlua19jb3VudChjb25zdCBwYXRoJiBwKTsKKyAgICB1
aW50bWF4X3QgICAgaGFyZF9saW5rX2NvdW50KGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVj
KSBub2V4Y2VwdDsKKworICAgIGJvb2wgaXNfYmxvY2tfZmlsZShmaWxlX3N0YXR1cyBzKSBub2V4
Y2VwdDsKKyAgICBib29sIGlzX2Jsb2NrX2ZpbGUoY29uc3QgcGF0aCYgcCk7CisgICAgYm9vbCBp
c19ibG9ja19maWxlKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKwor
ICAgIGJvb2wgaXNfY2hhcmFjdGVyX2ZpbGUoZmlsZV9zdGF0dXMgcykgbm9leGNlcHQ7CisgICAg
Ym9vbCBpc19jaGFyYWN0ZXJfZmlsZShjb25zdCBwYXRoJiBwKTsKKyAgICBib29sIGlzX2NoYXJh
Y3Rlcl9maWxlKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAg
IGJvb2wgaXNfZGlyZWN0b3J5KGZpbGVfc3RhdHVzIHMpIG5vZXhjZXB0OworICAgIGJvb2wgaXNf
ZGlyZWN0b3J5KGNvbnN0IHBhdGgmIHApOworICAgIGJvb2wgaXNfZGlyZWN0b3J5KGNvbnN0IHBh
dGgmIHAsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIGJvb2wgaXNfZW1wdHkoY29u
c3QgcGF0aCYgcCk7CisgICAgYm9vbCBpc19lbXB0eShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2Rl
JiBlYykgbm9leGNlcHQ7CisKKyAgICBib29sIGlzX2ZpZm8oZmlsZV9zdGF0dXMgcykgbm9leGNl
cHQ7CisgICAgYm9vbCBpc19maWZvKGNvbnN0IHBhdGgmIHApOworICAgIGJvb2wgaXNfZmlmbyhj
b25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29sIGlzX290
aGVyKGZpbGVfc3RhdHVzIHMpIG5vZXhjZXB0OworICAgIGJvb2wgaXNfb3RoZXIoY29uc3QgcGF0
aCYgcCk7CisgICAgYm9vbCBpc19vdGhlcihjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykg
bm9leGNlcHQ7CisKKyAgICBib29sIGlzX3JlZ3VsYXJfZmlsZShmaWxlX3N0YXR1cyBzKSBub2V4
Y2VwdDsKKyAgICBib29sIGlzX3JlZ3VsYXJfZmlsZShjb25zdCBwYXRoJiBwKTsKKyAgICBib29s
IGlzX3JlZ3VsYXJfZmlsZShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7
CisKKyAgICBib29sIGlzX3NvY2tldChmaWxlX3N0YXR1cyBzKSBub2V4Y2VwdDsKKyAgICBib29s
IGlzX3NvY2tldChjb25zdCBwYXRoJiBwKTsKKyAgICBib29sIGlzX3NvY2tldChjb25zdCBwYXRo
JiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29sIGlzX3N5bWxpbmsoZmls
ZV9zdGF0dXMgcykgbm9leGNlcHQ7CisgICAgYm9vbCBpc19zeW1saW5rKGNvbnN0IHBhdGgmIHAp
OworICAgIGJvb2wgaXNfc3ltbGluayhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9l
eGNlcHQ7CisKKyAgICBmaWxlX3RpbWVfdHlwZSAgbGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgm
IHApOworICAgIGZpbGVfdGltZV90eXBlICBsYXN0X3dyaXRlX3RpbWUoY29uc3QgcGF0aCYgcCwg
ZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworICAgIHZvaWQgbGFzdF93cml0ZV90aW1lKGNvbnN0
IHBhdGgmIHAsIGZpbGVfdGltZV90eXBlIG5ld190aW1lKTsKKyAgICB2b2lkIGxhc3Rfd3JpdGVf
dGltZShjb25zdCBwYXRoJiBwLCBmaWxlX3RpbWVfdHlwZSBuZXdfdGltZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIHZv
aWQgcGVybWlzc2lvbnMoY29uc3QgcGF0aCYgcCwgcGVybXMgcHJtcywKKyAgICAgICAgICAgICAg
ICAgICAgIHBlcm1fb3B0aW9ucyBvcHRzPXBlcm1fb3B0aW9uczo6cmVwbGFjZSk7CisgICAgdm9p
ZCBwZXJtaXNzaW9ucyhjb25zdCBwYXRoJiBwLCBwZXJtcyBwcm1zLCBlcnJvcl9jb2RlJiBlYykg
bm9leGNlcHQ7CisgICAgdm9pZCBwZXJtaXNzaW9ucyhjb25zdCBwYXRoJiBwLCBwZXJtcyBwcm1z
LCBwZXJtX29wdGlvbnMgb3B0cywKKyAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVj
KTsKKworICAgIHBhdGggcHJveGltYXRlKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKTsK
KyAgICBwYXRoIHByb3hpbWF0ZShjb25zdCBwYXRoJiBwLCBjb25zdCBwYXRoJiBiYXNlID0gY3Vy
cmVudF9wYXRoKCkpOworICAgIHBhdGggcHJveGltYXRlKGNvbnN0IHBhdGgmIHAsIGNvbnN0IHBh
dGgmIGJhc2UsIGVycm9yX2NvZGUgJmVjKTsKKworICAgIHBhdGggcmVhZF9zeW1saW5rKGNvbnN0
IHBhdGgmIHApOworICAgIHBhdGggcmVhZF9zeW1saW5rKGNvbnN0IHBhdGgmIHAsIGVycm9yX2Nv
ZGUmIGVjKTsKKworICAgIHBhdGggcmVsYXRpdmUoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYg
ZWMpOworICAgIHBhdGggcmVsYXRpdmUoY29uc3QgcGF0aCYgcCwgY29uc3QgcGF0aCYgYmFzZT1j
dXJyZW50X3BhdGgoKSk7CisgICAgcGF0aCByZWxhdGl2ZShjb25zdCBwYXRoJiBwLCBjb25zdCBw
YXRoJiBiYXNlLCBlcnJvcl9jb2RlJiBlYyk7CisKKyAgICBib29sIHJlbW92ZShjb25zdCBwYXRo
JiBwKTsKKyAgICBib29sIHJlbW92ZShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9l
eGNlcHQ7CisKKyAgICB1aW50bWF4X3QgICAgcmVtb3ZlX2FsbChjb25zdCBwYXRoJiBwKTsKKyAg
ICB1aW50bWF4X3QgICAgcmVtb3ZlX2FsbChjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYyk7
CisKKyAgICB2b2lkIHJlbmFtZShjb25zdCBwYXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0byk7Cisg
ICAgdm9pZCByZW5hbWUoY29uc3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8sIGVycm9yX2Nv
ZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIHZvaWQgcmVzaXplX2ZpbGUoY29uc3QgcGF0aCYgcCwg
dWludG1heF90IHNpemUpOworICAgIHZvaWQgcmVzaXplX2ZpbGUoY29uc3QgcGF0aCYgcCwgdWlu
dG1heF90IHNpemUsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIHNwYWNlX2luZm8g
ICBzcGFjZShjb25zdCBwYXRoJiBwKTsKKyAgICBzcGFjZV9pbmZvICAgc3BhY2UoY29uc3QgcGF0
aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgZmlsZV9zdGF0dXMgIHN0YXR1
cyhjb25zdCBwYXRoJiBwKTsKKyAgICBmaWxlX3N0YXR1cyAgc3RhdHVzKGNvbnN0IHBhdGgmIHAs
IGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIGJvb2wgc3RhdHVzX2tub3duKGZpbGVf
c3RhdHVzIHMpIG5vZXhjZXB0OworCisgICAgZmlsZV9zdGF0dXMgIHN5bWxpbmtfc3RhdHVzKGNv
bnN0IHBhdGgmIHApOworICAgIGZpbGVfc3RhdHVzICBzeW1saW5rX3N0YXR1cyhjb25zdCBwYXRo
JiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBwYXRoIHRlbXBfZGlyZWN0b3J5
X3BhdGgoKTsKKyAgICBwYXRoIHRlbXBfZGlyZWN0b3J5X3BhdGgoZXJyb3JfY29kZSYgZWMpOwor
CisgICAgcGF0aCB3ZWFrbHlfY2Fub25pY2FsKHBhdGggY29uc3QmIHApOworICAgIHBhdGggd2Vh
a2x5X2Nhbm9uaWNhbChwYXRoIGNvbnN0JiBwLCBlcnJvcl9jb2RlJiBlYyk7CisKKworfSB9ICAv
LyBuYW1lc3BhY2VzIHN0ZDo6ZmlsZXN5c3RlbQorCisqLworCisjaW5jbHVkZSA8X19jb25maWc+
CisjaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPGNocm9u
bz4KKyNpbmNsdWRlIDxpdGVyYXRvcj4KKyNpbmNsdWRlIDxpb3Nmd2Q+CisjaW5jbHVkZSA8bG9j
YWxlPgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxzdGFjaz4KKyNpbmNsdWRlIDxzdHJp
bmc+CisjaW5jbHVkZSA8c3lzdGVtX2Vycm9yPgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVk
ZSA8aW9tYW5pcD4gLy8gZm9yIHF1b3RlZAorI2luY2x1ZGUgPHN0cmluZ192aWV3PgorLyogI2lu
Y2x1ZGUgPHZlcnNpb24+ICovCisKKyNpbmNsdWRlIDxfX2RlYnVnPgorCisjaWYgX0xJQkNQUF9T
VERfVkVSID49IDE3CisjZGVmaW5lIF9MSUJDUFBfQkVHSU5fTkFNRVNQQUNFX0ZJTEVTWVNURU0g
XAorICBfTElCQ1BQX0JFR0lOX05BTUVTUEFDRV9TVEQgaW5saW5lIG5hbWVzcGFjZSBfX2ZzIHsg
bmFtZXNwYWNlIGZpbGVzeXN0ZW0geworI2Vsc2UKKyNkZWZpbmUgX0xJQkNQUF9CRUdJTl9OQU1F
U1BBQ0VfRklMRVNZU1RFTSBcCisgIF9MSUJDUFBfQkVHSU5fTkFNRVNQQUNFX1NURCBuYW1lc3Bh
Y2UgX19mcyB7IG5hbWVzcGFjZSBmaWxlc3lzdGVtIHsKKyNlbmRpZgorCisjZGVmaW5lIF9MSUJD
UFBfRU5EX05BTUVTUEFDRV9GSUxFU1lTVEVNIFwKKyAgX0xJQkNQUF9FTkRfTkFNRVNQQUNFX1NU
RCB9IH0KKworI2RlZmluZSBfVlNURF9GUyBfVlNURDo6X19mczo6ZmlsZXN5c3RlbQorCisjaWYg
IWRlZmluZWQoX0xJQkNQUF9IQVNfTk9fUFJBR01BX1NZU1RFTV9IRUFERVIpCisjcHJhZ21hIEdD
QyBzeXN0ZW1faGVhZGVyCisjZW5kaWYKKworX0xJQkNQUF9QVVNIX01BQ1JPUworI2luY2x1ZGUg
PF9fdW5kZWZfbWFjcm9zPgorCisjaWZuZGVmIF9MSUJDUFBfQ1hYMDNfTEFORworCitfTElCQ1BQ
X0JFR0lOX05BTUVTUEFDRV9GSUxFU1lTVEVNCisKK3N0cnVjdCBfRmlsZXN5c3RlbUNsb2NrIHsK
KyNpZiAhZGVmaW5lZChfTElCQ1BQX0hBU19OT19JTlQxMjgpCisgIHR5cGVkZWYgX19pbnQxMjhf
dCByZXA7CisgIHR5cGVkZWYgbmFubyBwZXJpb2Q7CisjZWxzZQorICB0eXBlZGVmIGxvbmcgbG9u
ZyByZXA7CisgIHR5cGVkZWYgbmFubyBwZXJpb2Q7CisjZW5kaWYKKworICB0eXBlZGVmIGNocm9u
bzo6ZHVyYXRpb248cmVwLCBwZXJpb2Q+IGR1cmF0aW9uOworICB0eXBlZGVmIGNocm9ubzo6dGlt
ZV9wb2ludDxfRmlsZXN5c3RlbUNsb2NrPiB0aW1lX3BvaW50OworCisgIHN0YXRpYyBfTElCQ1BQ
X0NPTlNURVhQUl9BRlRFUl9DWFgxMSBjb25zdCBib29sIGlzX3N0ZWFkeSA9IGZhbHNlOworCisg
IF9MSUJDUFBfRlVOQ19WSVMgc3RhdGljIHRpbWVfcG9pbnQgbm93KCkgbm9leGNlcHQ7CisKKyAg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBzdGF0aWMgdGltZV90IHRvX3RpbWVfdChjb25z
dCB0aW1lX3BvaW50JiBfX3QpIG5vZXhjZXB0IHsKKyAgICB0eXBlZGVmIGNocm9ubzo6ZHVyYXRp
b248cmVwPiBfX3NlY3M7CisgICAgcmV0dXJuIHRpbWVfdCgKKyAgICAgICAgY2hyb25vOjpkdXJh
dGlvbl9jYXN0PF9fc2Vjcz4oX190LnRpbWVfc2luY2VfZXBvY2goKSkuY291bnQoKSk7CisgIH0K
KworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHN0YXRpYyB0aW1lX3BvaW50IGZyb21f
dGltZV90KHRpbWVfdCBfX3QpIG5vZXhjZXB0IHsKKyAgICB0eXBlZGVmIGNocm9ubzo6ZHVyYXRp
b248cmVwPiBfX3NlY3M7CisgICAgcmV0dXJuIHRpbWVfcG9pbnQoX19zZWNzKF9fdCkpOworICB9
Cit9OworCit0eXBlZGVmIGNocm9ubzo6dGltZV9wb2ludDxfRmlsZXN5c3RlbUNsb2NrPiBmaWxl
X3RpbWVfdHlwZTsKKworc3RydWN0IF9MSUJDUFBfVFlQRV9WSVMgc3BhY2VfaW5mbyB7CisgIHVp
bnRtYXhfdCBjYXBhY2l0eTsKKyAgdWludG1heF90IGZyZWU7CisgIHVpbnRtYXhfdCBhdmFpbGFi
bGU7Cit9OworCitlbnVtIGNsYXNzIF9MSUJDUFBfRU5VTV9WSVMgZmlsZV90eXBlIDogc2lnbmVk
IGNoYXIgeworICBub25lID0gMCwKKyAgbm90X2ZvdW5kID0gLTEsCisgIHJlZ3VsYXIgPSAxLAor
ICBkaXJlY3RvcnkgPSAyLAorICBzeW1saW5rID0gMywKKyAgYmxvY2sgPSA0LAorICBjaGFyYWN0
ZXIgPSA1LAorICBmaWZvID0gNiwKKyAgc29ja2V0ID0gNywKKyAgdW5rbm93biA9IDgKK307CisK
K2VudW0gY2xhc3MgX0xJQkNQUF9FTlVNX1ZJUyBwZXJtcyA6IHVuc2lnbmVkIHsKKyAgbm9uZSA9
IDAsCisKKyAgb3duZXJfcmVhZCA9IDA0MDAsCisgIG93bmVyX3dyaXRlID0gMDIwMCwKKyAgb3du
ZXJfZXhlYyA9IDAxMDAsCisgIG93bmVyX2FsbCA9IDA3MDAsCisKKyAgZ3JvdXBfcmVhZCA9IDA0
MCwKKyAgZ3JvdXBfd3JpdGUgPSAwMjAsCisgIGdyb3VwX2V4ZWMgPSAwMTAsCisgIGdyb3VwX2Fs
bCA9IDA3MCwKKworICBvdGhlcnNfcmVhZCA9IDA0LAorICBvdGhlcnNfd3JpdGUgPSAwMiwKKyAg
b3RoZXJzX2V4ZWMgPSAwMSwKKyAgb3RoZXJzX2FsbCA9IDA3LAorCisgIGFsbCA9IDA3NzcsCisK
KyAgc2V0X3VpZCA9IDA0MDAwLAorICBzZXRfZ2lkID0gMDIwMDAsCisgIHN0aWNreV9iaXQgPSAw
MTAwMCwKKyAgbWFzayA9IDA3Nzc3LAorICB1bmtub3duID0gMHhGRkZGLAorfTsKKworX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhwciBwZXJtcyBvcGVyYXRvciYocGVy
bXMgX0xIUywgcGVybXMgX1JIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8cGVybXM+KHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihfTEhTKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KF9SSFMpKTsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQoraW5saW5lIGNvbnN0ZXhwciBwZXJtcyBvcGVyYXRvcnwocGVybXMgX0xIUywgcGVybXMgX1JI
UykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8cGVybXM+KHN0YXRpY19jYXN0PHVuc2lnbmVkPihf
TEhTKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KF9SSFMpKTsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhw
ciBwZXJtcyBvcGVyYXRvcl4ocGVybXMgX0xIUywgcGVybXMgX1JIUykgeworICByZXR1cm4gc3Rh
dGljX2Nhc3Q8cGVybXM+KHN0YXRpY19jYXN0PHVuc2lnbmVkPihfTEhTKSBeCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KF9SSFMpKTsKK30KKworX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhwciBwZXJtcyBvcGVyYXRvcn4o
cGVybXMgX0xIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8cGVybXM+KH5zdGF0aWNfY2FzdDx1
bnNpZ25lZD4oX0xIUykpOworfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUg
cGVybXMmIG9wZXJhdG9yJj0ocGVybXMmIF9MSFMsIHBlcm1zIF9SSFMpIHsgcmV0dXJuIF9MSFMg
PSBfTEhTICYgX1JIUzsgfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgcGVy
bXMmIG9wZXJhdG9yfD0ocGVybXMmIF9MSFMsIHBlcm1zIF9SSFMpIHsgcmV0dXJuIF9MSFMgPSBf
TEhTIHwgX1JIUzsgfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgcGVybXMm
IG9wZXJhdG9yXj0ocGVybXMmIF9MSFMsIHBlcm1zIF9SSFMpIHsgcmV0dXJuIF9MSFMgPSBfTEhT
IF4gX1JIUzsgfQorCitlbnVtIGNsYXNzIF9MSUJDUFBfRU5VTV9WSVMgcGVybV9vcHRpb25zIDog
dW5zaWduZWQgY2hhciB7CisgIHJlcGxhY2UgPSAxLAorICBhZGQgPSAyLAorICByZW1vdmUgPSA0
LAorICBub2ZvbGxvdyA9IDgKK307CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGlu
ZSBjb25zdGV4cHIgcGVybV9vcHRpb25zIG9wZXJhdG9yJihwZXJtX29wdGlvbnMgX0xIUywgcGVy
bV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHBlcm1fb3B0aW9ucz4oc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KF9MSFMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KF9SSFMpKTsKK30KKworX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhwciBwZXJtX29wdGlvbnMgb3BlcmF0b3J8KHBlcm1f
b3B0aW9ucyBfTEhTLCBwZXJtX29wdGlvbnMgX1JIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8
cGVybV9vcHRpb25zPihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oX0xIUykgfAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oX1JIUykpOworfQor
CitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgY29uc3RleHByIHBlcm1fb3B0aW9u
cyBvcGVyYXRvcl4ocGVybV9vcHRpb25zIF9MSFMsIHBlcm1fb3B0aW9ucyBfUkhTKSB7CisgIHJl
dHVybiBzdGF0aWNfY2FzdDxwZXJtX29wdGlvbnM+KHN0YXRpY19jYXN0PHVuc2lnbmVkPihfTEhT
KSBeCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihfUkhTKSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25z
dGV4cHIgcGVybV9vcHRpb25zIG9wZXJhdG9yfihwZXJtX29wdGlvbnMgX0xIUykgeworICByZXR1
cm4gc3RhdGljX2Nhc3Q8cGVybV9vcHRpb25zPih+c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KF9MSFMp
KTsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIHBlcm1fb3B0aW9ucyYg
b3BlcmF0b3ImPShwZXJtX29wdGlvbnMmIF9MSFMsIHBlcm1fb3B0aW9ucyBfUkhTKSB7CisgIHJl
dHVybiBfTEhTID0gX0xIUyAmIF9SSFM7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
K2lubGluZSBwZXJtX29wdGlvbnMmIG9wZXJhdG9yfD0ocGVybV9vcHRpb25zJiBfTEhTLCBwZXJt
X29wdGlvbnMgX1JIUykgeworICByZXR1cm4gX0xIUyA9IF9MSFMgfCBfUkhTOworfQorCitfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgcGVybV9vcHRpb25zJiBvcGVyYXRvcl49KHBl
cm1fb3B0aW9ucyYgX0xIUywgcGVybV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIF9MSFMgPSBf
TEhTIF4gX1JIUzsKK30KKworZW51bSBjbGFzcyBfTElCQ1BQX0VOVU1fVklTIGNvcHlfb3B0aW9u
cyA6IHVuc2lnbmVkIHNob3J0IHsKKyAgbm9uZSA9IDAsCisgIHNraXBfZXhpc3RpbmcgPSAxLAor
ICBvdmVyd3JpdGVfZXhpc3RpbmcgPSAyLAorICB1cGRhdGVfZXhpc3RpbmcgPSA0LAorICByZWN1
cnNpdmUgPSA4LAorICBjb3B5X3N5bWxpbmtzID0gMTYsCisgIHNraXBfc3ltbGlua3MgPSAzMiwK
KyAgZGlyZWN0b3JpZXNfb25seSA9IDY0LAorICBjcmVhdGVfc3ltbGlua3MgPSAxMjgsCisgIGNy
ZWF0ZV9oYXJkX2xpbmtzID0gMjU2LAorICBfX2luX3JlY3Vyc2l2ZV9jb3B5ID0gNTEyLAorfTsK
KworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhwciBjb3B5X29wdGlv
bnMgb3BlcmF0b3ImKGNvcHlfb3B0aW9ucyBfTEhTLCBjb3B5X29wdGlvbnMgX1JIUykgeworICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y29weV9vcHRpb25zPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9y
dD4oX0xIUykgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBzaG9ydD4oX1JIUykpOworfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
CitpbmxpbmUgY29uc3RleHByIGNvcHlfb3B0aW9ucyBvcGVyYXRvcnwoY29weV9vcHRpb25zIF9M
SFMsIGNvcHlfb3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxjb3B5X29wdGlv
bnM+KHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfTEhTKSB8CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfUkhTKSk7Cit9
CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIgY29weV9vcHRp
b25zIG9wZXJhdG9yXihjb3B5X29wdGlvbnMgX0xIUywgY29weV9vcHRpb25zIF9SSFMpIHsKKyAg
cmV0dXJuIHN0YXRpY19jYXN0PGNvcHlfb3B0aW9ucz4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hv
cnQ+KF9MSFMpIF4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8dW5zaWduZWQgc2hvcnQ+KF9SSFMpKTsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQoraW5saW5lIGNvbnN0ZXhwciBjb3B5X29wdGlvbnMgb3BlcmF0b3J+KGNvcHlfb3B0aW9ucyBf
TEhTKSB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxjb3B5X29wdGlvbnM+KH5zdGF0aWNfY2FzdDx1
bnNpZ25lZCBzaG9ydD4oX0xIUykpOworfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitp
bmxpbmUgY29weV9vcHRpb25zJiBvcGVyYXRvciY9KGNvcHlfb3B0aW9ucyYgX0xIUywgY29weV9v
cHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIF9MSFMgPSBfTEhTICYgX1JIUzsKK30KKworX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvcHlfb3B0aW9ucyYgb3BlcmF0b3J8PShjb3B5
X29wdGlvbnMmIF9MSFMsIGNvcHlfb3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBfTEhTID0gX0xI
UyB8IF9SSFM7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb3B5X29w
dGlvbnMmIG9wZXJhdG9yXj0oY29weV9vcHRpb25zJiBfTEhTLCBjb3B5X29wdGlvbnMgX1JIUykg
eworICByZXR1cm4gX0xIUyA9IF9MSFMgXiBfUkhTOworfQorCitlbnVtIGNsYXNzIF9MSUJDUFBf
RU5VTV9WSVMgZGlyZWN0b3J5X29wdGlvbnMgOiB1bnNpZ25lZCBjaGFyIHsKKyAgbm9uZSA9IDAs
CisgIGZvbGxvd19kaXJlY3Rvcnlfc3ltbGluayA9IDEsCisgIHNraXBfcGVybWlzc2lvbl9kZW5p
ZWQgPSAyCit9OworCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgY29uc3RleHBy
IGRpcmVjdG9yeV9vcHRpb25zIG9wZXJhdG9yJihkaXJlY3Rvcnlfb3B0aW9ucyBfTEhTLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5X29wdGlv
bnMgX1JIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8ZGlyZWN0b3J5X29wdGlvbnM+KHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXI+KF9MSFMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfUkhTKSk7Cit9CisKK19M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIgZGlyZWN0b3J5X29wdGlv
bnMgb3BlcmF0b3J8KGRpcmVjdG9yeV9vcHRpb25zIF9MSFMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnlfb3B0aW9ucyBfUkhTKSB7CisgIHJl
dHVybiBzdGF0aWNfY2FzdDxkaXJlY3Rvcnlfb3B0aW9ucz4oc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcj4oX0xIUykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9SSFMpKTsKK30KKworX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWQoraW5saW5lIGNvbnN0ZXhwciBkaXJlY3Rvcnlfb3B0aW9ucyBvcGVyYXRvcl4oZGly
ZWN0b3J5X29wdGlvbnMgX0xIUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRpcmVjdG9yeV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0
PGRpcmVjdG9yeV9vcHRpb25zPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfTEhTKSBeCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcj4oX1JIUykpOworfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUg
Y29uc3RleHByIGRpcmVjdG9yeV9vcHRpb25zIG9wZXJhdG9yfihkaXJlY3Rvcnlfb3B0aW9ucyBf
TEhTKSB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxkaXJlY3Rvcnlfb3B0aW9ucz4ofnN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXI+KF9MSFMpKTsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQoraW5saW5lIGRpcmVjdG9yeV9vcHRpb25zJiBvcGVyYXRvciY9KGRpcmVjdG9yeV9vcHRpb25z
JiBfTEhTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeV9v
cHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIF9MSFMgPSBfTEhTICYgX1JIUzsKK30KKworX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGRpcmVjdG9yeV9vcHRpb25zJiBvcGVyYXRvcnw9
KGRpcmVjdG9yeV9vcHRpb25zJiBfTEhTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRpcmVjdG9yeV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIF9MSFMgPSBfTEhTIHwg
X1JIUzsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGRpcmVjdG9yeV9v
cHRpb25zJiBvcGVyYXRvcl49KGRpcmVjdG9yeV9vcHRpb25zJiBfTEhTLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0
dXJuIF9MSFMgPSBfTEhTIF4gX1JIUzsKK30KKworY2xhc3MgX0xJQkNQUF9UWVBFX1ZJUyBmaWxl
X3N0YXR1cyB7CitwdWJsaWM6CisgIC8vIGNvbnN0cnVjdG9ycworICBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZCisgIGZpbGVfc3RhdHVzKCkgbm9leGNlcHQgOiBmaWxlX3N0YXR1cyhmaWxlX3R5
cGU6Om5vbmUpIHt9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZXhwbGljaXQgZmls
ZV9zdGF0dXMoZmlsZV90eXBlIF9fZnQsIHBlcm1zIF9fcHJtcyA9IHBlcm1zOjp1bmtub3duKSBu
b2V4Y2VwdAorICAgICAgOiBfX2Z0XyhfX2Z0KSwKKyAgICAgICAgX19wcm1zXyhfX3BybXMpIHt9
CisKKyAgZmlsZV9zdGF0dXMoY29uc3QgZmlsZV9zdGF0dXMmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7
CisgIGZpbGVfc3RhdHVzKGZpbGVfc3RhdHVzJiYpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKworICBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIH5maWxlX3N0YXR1cygpIHt9CisKKyAgZmlsZV9z
dGF0dXMmIG9wZXJhdG9yPShjb25zdCBmaWxlX3N0YXR1cyYpIG5vZXhjZXB0ID0gZGVmYXVsdDsK
KyAgZmlsZV9zdGF0dXMmIG9wZXJhdG9yPShmaWxlX3N0YXR1cyYmKSBub2V4Y2VwdCA9IGRlZmF1
bHQ7CisKKyAgLy8gb2JzZXJ2ZXJzCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZmls
ZV90eXBlIHR5cGUoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfX2Z0XzsgfQorCisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGVybXMgcGVybWlzc2lvbnMoKSBjb25zdCBub2V4Y2Vw
dCB7IHJldHVybiBfX3BybXNfOyB9CisKKyAgLy8gbW9kaWZpZXJzCisgIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkKKyAgdm9pZCB0eXBlKGZpbGVfdHlwZSBfX2Z0KSBub2V4Y2VwdCB7IF9fZnRf
ID0gX19mdDsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdm9pZCBwZXJtaXNz
aW9ucyhwZXJtcyBfX3ApIG5vZXhjZXB0IHsgX19wcm1zXyA9IF9fcDsgfQorCitwcml2YXRlOgor
ICBmaWxlX3R5cGUgX19mdF87CisgIHBlcm1zIF9fcHJtc187Cit9OworCitjbGFzcyBfTElCQ1BQ
X1RZUEVfVklTIGRpcmVjdG9yeV9lbnRyeTsKKwordGVtcGxhdGUgPGNsYXNzIF9UcD4KK3N0cnVj
dCBfX2Nhbl9jb252ZXJ0X2NoYXIgeworICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IGZhbHNl
OworfTsKK3RlbXBsYXRlIDxjbGFzcyBfVHA+CitzdHJ1Y3QgX19jYW5fY29udmVydF9jaGFyPGNv
bnN0IF9UcD4gOiBwdWJsaWMgX19jYW5fY29udmVydF9jaGFyPF9UcD4ge307Cit0ZW1wbGF0ZSA8
Pgorc3RydWN0IF9fY2FuX2NvbnZlcnRfY2hhcjxjaGFyPiB7CisgIHN0YXRpYyBjb25zdCBib29s
IHZhbHVlID0gdHJ1ZTsKKyAgdXNpbmcgX19jaGFyX3R5cGUgPSBjaGFyOworfTsKK3RlbXBsYXRl
IDw+CitzdHJ1Y3QgX19jYW5fY29udmVydF9jaGFyPHdjaGFyX3Q+IHsKKyAgc3RhdGljIGNvbnN0
IGJvb2wgdmFsdWUgPSB0cnVlOworICB1c2luZyBfX2NoYXJfdHlwZSA9IHdjaGFyX3Q7Cit9Owor
dGVtcGxhdGUgPD4KK3N0cnVjdCBfX2Nhbl9jb252ZXJ0X2NoYXI8Y2hhcjE2X3Q+IHsKKyAgc3Rh
dGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOworICB1c2luZyBfX2NoYXJfdHlwZSA9IGNoYXIx
Nl90OworfTsKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgX19jYW5fY29udmVydF9jaGFyPGNoYXIzMl90
PiB7CisgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsKKyAgdXNpbmcgX19jaGFyX3R5
cGUgPSBjaGFyMzJfdDsKK307CisKK3RlbXBsYXRlIDxjbGFzcyBfRUNoYXJUPgordHlwZW5hbWUg
ZW5hYmxlX2lmPF9fY2FuX2NvbnZlcnRfY2hhcjxfRUNoYXJUPjo6dmFsdWUsIGJvb2w+Ojp0eXBl
CitfX2lzX3NlcGFyYXRvcihfRUNoYXJUIF9fZSkgeworICByZXR1cm4gX19lID09IF9FQ2hhclQo
Jy8nKTsKK30KKworc3RydWN0IF9OdWxsU2VudGluYWwge307CisKK3RlbXBsYXRlIDxjbGFzcyBf
VHA+Cit1c2luZyBfVm9pZCA9IHZvaWQ7CisKK3RlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzID0g
dm9pZD4KK3N0cnVjdCBfX2lzX3BhdGhhYmxlX3N0cmluZyA6IHB1YmxpYyBmYWxzZV90eXBlIHt9
OworCit0ZW1wbGF0ZSA8Y2xhc3MgX0VDaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9j
Pgorc3RydWN0IF9faXNfcGF0aGFibGVfc3RyaW5nPAorICAgIGJhc2ljX3N0cmluZzxfRUNoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+LAorICAgIF9Wb2lkPHR5cGVuYW1lIF9fY2FuX2NvbnZlcnRfY2hh
cjxfRUNoYXJUPjo6X19jaGFyX3R5cGU+ID4KKyAgICA6IHB1YmxpYyBfX2Nhbl9jb252ZXJ0X2No
YXI8X0VDaGFyVD4geworICB1c2luZyBfU3RyID0gYmFzaWNfc3RyaW5nPF9FQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz47CisgIHVzaW5nIF9CYXNlID0gX19jYW5fY29udmVydF9jaGFyPF9FQ2hhclQ+
OworICBzdGF0aWMgX0VDaGFyVCBjb25zdCogX19yYW5nZV9iZWdpbihfU3RyIGNvbnN0JiBfX3Mp
IHsgcmV0dXJuIF9fcy5kYXRhKCk7IH0KKyAgc3RhdGljIF9FQ2hhclQgY29uc3QqIF9fcmFuZ2Vf
ZW5kKF9TdHIgY29uc3QmIF9fcykgeworICAgIHJldHVybiBfX3MuZGF0YSgpICsgX19zLmxlbmd0
aCgpOworICB9CisgIHN0YXRpYyBfRUNoYXJUIF9fZmlyc3Rfb3JfbnVsbChfU3RyIGNvbnN0JiBf
X3MpIHsKKyAgICByZXR1cm4gX19zLmVtcHR5KCkgPyBfRUNoYXJUe30gOiBfX3NbMF07CisgIH0K
K307CisKK3RlbXBsYXRlIDxjbGFzcyBfRUNoYXJULCBjbGFzcyBfVHJhaXRzPgorc3RydWN0IF9f
aXNfcGF0aGFibGVfc3RyaW5nPAorICAgIGJhc2ljX3N0cmluZ192aWV3PF9FQ2hhclQsIF9UcmFp
dHM+LAorICAgIF9Wb2lkPHR5cGVuYW1lIF9fY2FuX2NvbnZlcnRfY2hhcjxfRUNoYXJUPjo6X19j
aGFyX3R5cGU+ID4KKyAgICA6IHB1YmxpYyBfX2Nhbl9jb252ZXJ0X2NoYXI8X0VDaGFyVD4gewor
ICB1c2luZyBfU3RyID0gYmFzaWNfc3RyaW5nX3ZpZXc8X0VDaGFyVCwgX1RyYWl0cz47CisgIHVz
aW5nIF9CYXNlID0gX19jYW5fY29udmVydF9jaGFyPF9FQ2hhclQ+OworICBzdGF0aWMgX0VDaGFy
VCBjb25zdCogX19yYW5nZV9iZWdpbihfU3RyIGNvbnN0JiBfX3MpIHsgcmV0dXJuIF9fcy5kYXRh
KCk7IH0KKyAgc3RhdGljIF9FQ2hhclQgY29uc3QqIF9fcmFuZ2VfZW5kKF9TdHIgY29uc3QmIF9f
cykgeworICAgIHJldHVybiBfX3MuZGF0YSgpICsgX19zLmxlbmd0aCgpOworICB9CisgIHN0YXRp
YyBfRUNoYXJUIF9fZmlyc3Rfb3JfbnVsbChfU3RyIGNvbnN0JiBfX3MpIHsKKyAgICByZXR1cm4g
X19zLmVtcHR5KCkgPyBfRUNoYXJUe30gOiBfX3NbMF07CisgIH0KK307CisKK3RlbXBsYXRlIDxj
bGFzcyBfU291cmNlLCBjbGFzcyBfRFMgPSB0eXBlbmFtZSBkZWNheTxfU291cmNlPjo6dHlwZSwK
KyAgICAgICAgICBjbGFzcyBfVW5xdWFsUHRyVHlwZSA9CisgICAgICAgICAgICAgIHR5cGVuYW1l
IHJlbW92ZV9jb25zdDx0eXBlbmFtZSByZW1vdmVfcG9pbnRlcjxfRFM+Ojp0eXBlPjo6dHlwZSwK
KyAgICAgICAgICBib29sIF9Jc0NoYXJQdHIgPSBpc19wb2ludGVyPF9EUz46OnZhbHVlJiYKKyAg
ICAgICAgICAgICAgX19jYW5fY29udmVydF9jaGFyPF9VbnF1YWxQdHJUeXBlPjo6dmFsdWU+Citz
dHJ1Y3QgX19pc19wYXRoYWJsZV9jaGFyX2FycmF5IDogZmFsc2VfdHlwZSB7fTsKKwordGVtcGxh
dGUgPGNsYXNzIF9Tb3VyY2UsIGNsYXNzIF9FQ2hhclQsIGNsYXNzIF9VUHRyPgorc3RydWN0IF9f
aXNfcGF0aGFibGVfY2hhcl9hcnJheTxfU291cmNlLCBfRUNoYXJUKiwgX1VQdHIsIHRydWU+Cisg
ICAgOiBfX2Nhbl9jb252ZXJ0X2NoYXI8dHlwZW5hbWUgcmVtb3ZlX2NvbnN0PF9FQ2hhclQ+Ojp0
eXBlPiB7CisgIHVzaW5nIF9CYXNlID0gX19jYW5fY29udmVydF9jaGFyPHR5cGVuYW1lIHJlbW92
ZV9jb25zdDxfRUNoYXJUPjo6dHlwZT47CisKKyAgc3RhdGljIF9FQ2hhclQgY29uc3QqIF9fcmFu
Z2VfYmVnaW4oY29uc3QgX0VDaGFyVCogX19iKSB7IHJldHVybiBfX2I7IH0KKyAgc3RhdGljIF9F
Q2hhclQgY29uc3QqIF9fcmFuZ2VfZW5kKGNvbnN0IF9FQ2hhclQqIF9fYikgeworICAgIHVzaW5n
IF9JdGVyID0gY29uc3QgX0VDaGFyVCo7CisgICAgY29uc3QgX0VDaGFyVCBfX3NlbnRpbmFsID0g
X0VDaGFyVHt9OworICAgIF9JdGVyIF9fZSA9IF9fYjsKKyAgICBmb3IgKDsgKl9fZSAhPSBfX3Nl
bnRpbmFsOyArK19fZSkKKyAgICAgIDsKKyAgICByZXR1cm4gX19lOworICB9CisKKyAgc3RhdGlj
IF9FQ2hhclQgX19maXJzdF9vcl9udWxsKGNvbnN0IF9FQ2hhclQqIF9fYikgeyByZXR1cm4gKl9f
YjsgfQorfTsKKwordGVtcGxhdGUgPGNsYXNzIF9JdGVyLCBib29sIF9Jc0l0ID0gX19pc19pbnB1
dF9pdGVyYXRvcjxfSXRlcj46OnZhbHVlLAorICAgICAgICAgIGNsYXNzID0gdm9pZD4KK3N0cnVj
dCBfX2lzX3BhdGhhYmxlX2l0ZXIgOiBmYWxzZV90eXBlIHt9OworCit0ZW1wbGF0ZSA8Y2xhc3Mg
X0l0ZXI+CitzdHJ1Y3QgX19pc19wYXRoYWJsZV9pdGVyPAorICAgIF9JdGVyLCB0cnVlLAorICAg
IF9Wb2lkPHR5cGVuYW1lIF9fY2FuX2NvbnZlcnRfY2hhcjwKKyAgICAgICAgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZT46Ol9fY2hhcl90eXBlPiA+CisgICAgOiBf
X2Nhbl9jb252ZXJ0X2NoYXI8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVf
dHlwZT4geworICB1c2luZyBfRUNoYXJUID0gdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVy
Pjo6dmFsdWVfdHlwZTsKKyAgdXNpbmcgX0Jhc2UgPSBfX2Nhbl9jb252ZXJ0X2NoYXI8X0VDaGFy
VD47CisKKyAgc3RhdGljIF9JdGVyIF9fcmFuZ2VfYmVnaW4oX0l0ZXIgX19iKSB7IHJldHVybiBf
X2I7IH0KKyAgc3RhdGljIF9OdWxsU2VudGluYWwgX19yYW5nZV9lbmQoX0l0ZXIpIHsgcmV0dXJu
IF9OdWxsU2VudGluYWx7fTsgfQorCisgIHN0YXRpYyBfRUNoYXJUIF9fZmlyc3Rfb3JfbnVsbChf
SXRlciBfX2IpIHsgcmV0dXJuICpfX2I7IH0KK307CisKK3RlbXBsYXRlIDxjbGFzcyBfVHAsIGJv
b2wgX0lzU3RyaW5nVCA9IF9faXNfcGF0aGFibGVfc3RyaW5nPF9UcD46OnZhbHVlLAorICAgICAg
ICAgIGJvb2wgX0lzQ2hhckl0ZXJUID0gX19pc19wYXRoYWJsZV9jaGFyX2FycmF5PF9UcD46OnZh
bHVlLAorICAgICAgICAgIGJvb2wgX0lzSXRlclQgPSAhX0lzQ2hhckl0ZXJUICYmIF9faXNfcGF0
aGFibGVfaXRlcjxfVHA+Ojp2YWx1ZT4KK3N0cnVjdCBfX2lzX3BhdGhhYmxlIDogZmFsc2VfdHlw
ZSB7CisgIHN0YXRpY19hc3NlcnQoIV9Jc1N0cmluZ1QgJiYgIV9Jc0NoYXJJdGVyVCAmJiAhX0lz
SXRlclQsICJNdXN0IGFsbCBiZSBmYWxzZSIpOworfTsKKwordGVtcGxhdGUgPGNsYXNzIF9UcD4K
K3N0cnVjdCBfX2lzX3BhdGhhYmxlPF9UcCwgdHJ1ZSwgZmFsc2UsIGZhbHNlPiA6IF9faXNfcGF0
aGFibGVfc3RyaW5nPF9UcD4ge307CisKK3RlbXBsYXRlIDxjbGFzcyBfVHA+CitzdHJ1Y3QgX19p
c19wYXRoYWJsZTxfVHAsIGZhbHNlLCB0cnVlLCBmYWxzZT4gOiBfX2lzX3BhdGhhYmxlX2NoYXJf
YXJyYXk8X1RwPiB7Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorc3RydWN0IF9faXNfcGF0
aGFibGU8X1RwLCBmYWxzZSwgZmFsc2UsIHRydWU+IDogX19pc19wYXRoYWJsZV9pdGVyPF9UcD4g
e307CisKK3RlbXBsYXRlIDxjbGFzcyBfRUNoYXJUPgorc3RydWN0IF9QYXRoQ1ZUIHsKKyAgc3Rh
dGljX2Fzc2VydChfX2Nhbl9jb252ZXJ0X2NoYXI8X0VDaGFyVD46OnZhbHVlLAorICAgICAgICAg
ICAgICAgICJDaGFyIHR5cGUgbm90IGNvbnZlcnRpYmxlIik7CisKKyAgdHlwZWRlZiBfX25hcnJv
d190b191dGY4PHNpemVvZihfRUNoYXJUKSAqIF9fQ0hBUl9CSVRfXz4gX05hcnJvd2VyOworCisg
IHN0YXRpYyB2b2lkIF9fYXBwZW5kX3JhbmdlKHN0cmluZyYgX19kZXN0LCBfRUNoYXJUIGNvbnN0
KiBfX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9FQ2hhclQgY29uc3QqIF9fZSkg
eworICAgIF9OYXJyb3dlcigpKGJhY2tfaW5zZXJ0ZXIoX19kZXN0KSwgX19iLCBfX2UpOworICB9
CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgorICBzdGF0aWMgdm9pZCBfX2FwcGVuZF9yYW5n
ZShzdHJpbmcmIF9fZGVzdCwgX0l0ZXIgX19iLCBfSXRlciBfX2UpIHsKKyAgICBzdGF0aWNfYXNz
ZXJ0KCFpc19zYW1lPF9JdGVyLCBfRUNoYXJUKj46OnZhbHVlLCAiQ2FsbCBjb25zdCBvdmVybG9h
ZCIpOworICAgIGlmIChfX2IgPT0gX19lKQorICAgICAgcmV0dXJuOworICAgIGJhc2ljX3N0cmlu
ZzxfRUNoYXJUPiBfX3RtcChfX2IsIF9fZSk7CisgICAgX05hcnJvd2VyKCkoYmFja19pbnNlcnRl
cihfX2Rlc3QpLCBfX3RtcC5kYXRhKCksCisgICAgICAgICAgICAgICAgX190bXAuZGF0YSgpICsg
X190bXAubGVuZ3RoKCkpOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgorICBzdGF0
aWMgdm9pZCBfX2FwcGVuZF9yYW5nZShzdHJpbmcmIF9fZGVzdCwgX0l0ZXIgX19iLCBfTnVsbFNl
bnRpbmFsKSB7CisgICAgc3RhdGljX2Fzc2VydCghaXNfc2FtZTxfSXRlciwgX0VDaGFyVCo+Ojp2
YWx1ZSwgIkNhbGwgY29uc3Qgb3ZlcmxvYWQiKTsKKyAgICBjb25zdCBfRUNoYXJUIF9fc2VudGlu
YWwgPSBfRUNoYXJUe307CisgICAgaWYgKCpfX2IgPT0gX19zZW50aW5hbCkKKyAgICAgIHJldHVy
bjsKKyAgICBiYXNpY19zdHJpbmc8X0VDaGFyVD4gX190bXA7CisgICAgZm9yICg7ICpfX2IgIT0g
X19zZW50aW5hbDsgKytfX2IpCisgICAgICBfX3RtcC5wdXNoX2JhY2soKl9fYik7CisgICAgX05h
cnJvd2VyKCkoYmFja19pbnNlcnRlcihfX2Rlc3QpLCBfX3RtcC5kYXRhKCksCisgICAgICAgICAg
ICAgICAgX190bXAuZGF0YSgpICsgX190bXAubGVuZ3RoKCkpOworICB9CisKKyAgdGVtcGxhdGUg
PGNsYXNzIF9Tb3VyY2U+CisgIHN0YXRpYyB2b2lkIF9fYXBwZW5kX3NvdXJjZShzdHJpbmcmIF9f
ZGVzdCwgX1NvdXJjZSBjb25zdCYgX19zKSB7CisgICAgdXNpbmcgX1RyYWl0cyA9IF9faXNfcGF0
aGFibGU8X1NvdXJjZT47CisgICAgX19hcHBlbmRfcmFuZ2UoX19kZXN0LCBfVHJhaXRzOjpfX3Jh
bmdlX2JlZ2luKF9fcyksCisgICAgICAgICAgICAgICAgICAgX1RyYWl0czo6X19yYW5nZV9lbmQo
X19zKSk7CisgIH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgX1BhdGhDVlQ8Y2hhcj4gewor
CisgIHRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KKyAgc3RhdGljIHR5cGVuYW1lIGVuYWJsZV9pZjxf
X2lzX2V4YWN0bHlfaW5wdXRfaXRlcmF0b3I8X0l0ZXI+Ojp2YWx1ZT46OnR5cGUKKyAgX19hcHBl
bmRfcmFuZ2Uoc3RyaW5nJiBfX2Rlc3QsIF9JdGVyIF9fYiwgX0l0ZXIgX19lKSB7CisgICAgZm9y
ICg7IF9fYiAhPSBfX2U7ICsrX19iKQorICAgICAgX19kZXN0LnB1c2hfYmFjaygqX19iKTsKKyAg
fQorCisgIHRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KKyAgc3RhdGljIHR5cGVuYW1lIGVuYWJsZV9p
ZjxfX2lzX2ZvcndhcmRfaXRlcmF0b3I8X0l0ZXI+Ojp2YWx1ZT46OnR5cGUKKyAgX19hcHBlbmRf
cmFuZ2Uoc3RyaW5nJiBfX2Rlc3QsIF9JdGVyIF9fYiwgX0l0ZXIgX19lKSB7CisgICAgX19kZXN0
Ll9fYXBwZW5kX2ZvcndhcmRfdW5zYWZlKF9fYiwgX19lKTsKKyAgfQorCisgIHRlbXBsYXRlIDxj
bGFzcyBfSXRlcj4KKyAgc3RhdGljIHZvaWQgX19hcHBlbmRfcmFuZ2Uoc3RyaW5nJiBfX2Rlc3Qs
IF9JdGVyIF9fYiwgX051bGxTZW50aW5hbCkgeworICAgIGNvbnN0IGNoYXIgX19zZW50aW5hbCA9
IGNoYXJ7fTsKKyAgICBmb3IgKDsgKl9fYiAhPSBfX3NlbnRpbmFsOyArK19fYikKKyAgICAgIF9f
ZGVzdC5wdXNoX2JhY2soKl9fYik7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZT4K
KyAgc3RhdGljIHZvaWQgX19hcHBlbmRfc291cmNlKHN0cmluZyYgX19kZXN0LCBfU291cmNlIGNv
bnN0JiBfX3MpIHsKKyAgICB1c2luZyBfVHJhaXRzID0gX19pc19wYXRoYWJsZTxfU291cmNlPjsK
KyAgICBfX2FwcGVuZF9yYW5nZShfX2Rlc3QsIF9UcmFpdHM6Ol9fcmFuZ2VfYmVnaW4oX19zKSwK
KyAgICAgICAgICAgICAgICAgICBfVHJhaXRzOjpfX3JhbmdlX2VuZChfX3MpKTsKKyAgfQorfTsK
KworY2xhc3MgX0xJQkNQUF9UWVBFX1ZJUyBwYXRoIHsKKyAgdGVtcGxhdGUgPGNsYXNzIF9Tb3Vy
Y2VPckl0ZXIsIGNsYXNzIF9UcCA9IHBhdGgmPgorICB1c2luZyBfRW5hYmxlSWZQYXRoYWJsZSA9
CisgICAgICB0eXBlbmFtZSBlbmFibGVfaWY8X19pc19wYXRoYWJsZTxfU291cmNlT3JJdGVyPjo6
dmFsdWUsIF9UcD46OnR5cGU7CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KKyAgdXNpbmcgX1Nv
dXJjZUNoYXIgPSB0eXBlbmFtZSBfX2lzX3BhdGhhYmxlPF9UcD46Ol9fY2hhcl90eXBlOworCisg
IHRlbXBsYXRlIDxjbGFzcyBfVHA+CisgIHVzaW5nIF9Tb3VyY2VDVlQgPSBfUGF0aENWVDxfU291
cmNlQ2hhcjxfVHA+ID47CisKK3B1YmxpYzoKKyAgdHlwZWRlZiBjaGFyIHZhbHVlX3R5cGU7Cisg
IHR5cGVkZWYgYmFzaWNfc3RyaW5nPHZhbHVlX3R5cGU+IHN0cmluZ190eXBlOworICB0eXBlZGVm
IF9WU1REOjpzdHJpbmdfdmlldyBfX3N0cmluZ192aWV3OworICBzdGF0aWMgY29uc3RleHByIHZh
bHVlX3R5cGUgcHJlZmVycmVkX3NlcGFyYXRvciA9ICcvJzsKKworICBlbnVtIGNsYXNzIF9MSUJD
UFBfRU5VTV9WSVMgZm9ybWF0IDogdW5zaWduZWQgY2hhciB7CisgICAgYXV0b19mb3JtYXQsCisg
ICAgbmF0aXZlX2Zvcm1hdCwKKyAgICBnZW5lcmljX2Zvcm1hdAorICB9OworCisgIC8vIGNvbnN0
cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcgorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGgo
KSBub2V4Y2VwdCB7fQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGgoY29uc3QgcGF0
aCYgX19wKSA6IF9fcG5fKF9fcC5fX3BuXykge30KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBwYXRoKHBhdGgmJiBfX3ApIG5vZXhjZXB0CisgICAgICA6IF9fcG5fKF9WU1REOjptb3ZlKF9f
cC5fX3BuXykpIHt9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBwYXRoKHN0cmlu
Z190eXBlJiYgX19zLCBmb3JtYXQgPSBmb3JtYXQ6OmF1dG9fZm9ybWF0KSBub2V4Y2VwdAorICAg
ICAgOiBfX3BuXyhfVlNURDo6bW92ZShfX3MpKSB7fQorCisgIHRlbXBsYXRlIDxjbGFzcyBfU291
cmNlLCBjbGFzcyA9IF9FbmFibGVJZlBhdGhhYmxlPF9Tb3VyY2UsIHZvaWQ+ID4KKyAgcGF0aChj
b25zdCBfU291cmNlJiBfX3NyYywgZm9ybWF0ID0gZm9ybWF0OjphdXRvX2Zvcm1hdCkgeworICAg
IF9Tb3VyY2VDVlQ8X1NvdXJjZT46Ol9fYXBwZW5kX3NvdXJjZShfX3BuXywgX19zcmMpOworICB9
CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0PgorICBwYXRoKF9JbnB1dEl0IF9fZmlyc3Qs
IF9JbnB1dEl0IF9fbGFzdCwgZm9ybWF0ID0gZm9ybWF0OjphdXRvX2Zvcm1hdCkgeworICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0Pjo6dmFsdWVfdHlwZSBfSXRW
YWw7CisgICAgX1BhdGhDVlQ8X0l0VmFsPjo6X19hcHBlbmRfcmFuZ2UoX19wbl8sIF9fZmlyc3Qs
IF9fbGFzdCk7CisgIH0KKworICAvLyBUT0RPIEltcGxlbWVudCBsb2NhbGUgY29udmVyc2lvbnMu
CisgIHRlbXBsYXRlIDxjbGFzcyBfU291cmNlLCBjbGFzcyA9IF9FbmFibGVJZlBhdGhhYmxlPF9T
b3VyY2UsIHZvaWQ+ID4KKyAgcGF0aChjb25zdCBfU291cmNlJiBfX3NyYywgY29uc3QgbG9jYWxl
JiBfX2xvYywgZm9ybWF0ID0gZm9ybWF0OjphdXRvX2Zvcm1hdCk7CisgIHRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdD4KKyAgcGF0aChfSW5wdXRJdCBfX2ZpcnN0LCBfSW5wdXRJdCBfbGFzdCwgY29u
c3QgbG9jYWxlJiBfX2xvYywKKyAgICAgICBmb3JtYXQgPSBmb3JtYXQ6OmF1dG9fZm9ybWF0KTsK
KworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIH5wYXRoKCkgPSBkZWZhdWx0OworCisg
IC8vIGFzc2lnbm1lbnRzCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGF0aCYgb3Bl
cmF0b3I9KGNvbnN0IHBhdGgmIF9fcCkgeworICAgIF9fcG5fID0gX19wLl9fcG5fOworICAgIHJl
dHVybiAqdGhpczsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGF0aCYg
b3BlcmF0b3I9KHBhdGgmJiBfX3ApIG5vZXhjZXB0IHsKKyAgICBfX3BuXyA9IF9WU1REOjptb3Zl
KF9fcC5fX3BuXyk7CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNz
ID0gdm9pZD4KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoJiBvcGVyYXRvcj0oc3Ry
aW5nX3R5cGUmJiBfX3MpIG5vZXhjZXB0IHsKKyAgICBfX3BuXyA9IF9WU1REOjptb3ZlKF9fcyk7
CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQor
ICBwYXRoJiBhc3NpZ24oc3RyaW5nX3R5cGUmJiBfX3MpIG5vZXhjZXB0IHsKKyAgICBfX3BuXyA9
IF9WU1REOjptb3ZlKF9fcyk7CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgdGVtcGxhdGUg
PGNsYXNzIF9Tb3VyY2U+CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgX0VuYWJsZUlmUGF0
aGFibGU8X1NvdXJjZT4KKyAgb3BlcmF0b3I9KGNvbnN0IF9Tb3VyY2UmIF9fc3JjKSB7CisgICAg
cmV0dXJuIHRoaXMtPmFzc2lnbihfX3NyYyk7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1Nv
dXJjZT4KKyAgX0VuYWJsZUlmUGF0aGFibGU8X1NvdXJjZT4gYXNzaWduKGNvbnN0IF9Tb3VyY2Um
IF9fc3JjKSB7CisgICAgX19wbl8uY2xlYXIoKTsKKyAgICBfU291cmNlQ1ZUPF9Tb3VyY2U+Ojpf
X2FwcGVuZF9zb3VyY2UoX19wbl8sIF9fc3JjKTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKwor
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXQ+CisgIHBhdGgmIGFzc2lnbihfSW5wdXRJdCBfX2Zp
cnN0LCBfSW5wdXRJdCBfX2xhc3QpIHsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSW5wdXRJdD46OnZhbHVlX3R5cGUgX0l0VmFsOworICAgIF9fcG5fLmNsZWFyKCk7Cisg
ICAgX1BhdGhDVlQ8X0l0VmFsPjo6X19hcHBlbmRfcmFuZ2UoX19wbl8sIF9fZmlyc3QsIF9fbGFz
dCk7CisgICAgcmV0dXJuICp0aGlzOworICB9CisKK3ByaXZhdGU6CisgIHRlbXBsYXRlIDxjbGFz
cyBfRUNoYXJUPgorICBzdGF0aWMgYm9vbCBfX3NvdXJjZV9pc19hYnNvbHV0ZShfRUNoYXJUIF9f
Zmlyc3Rfb3JfbnVsbCkgeworICAgIHJldHVybiBfX2lzX3NlcGFyYXRvcihfX2ZpcnN0X29yX251
bGwpOworICB9CisKK3B1YmxpYzoKKyAgLy8gYXBwZW5kcworICBwYXRoJiBvcGVyYXRvci89KGNv
bnN0IHBhdGgmIF9fcCkgeworICAgIGlmIChfX3AuaXNfYWJzb2x1dGUoKSkgeworICAgICAgX19w
bl8gPSBfX3AuX19wbl87CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIGlmIChoYXNf
ZmlsZW5hbWUoKSkKKyAgICAgIF9fcG5fICs9IHByZWZlcnJlZF9zZXBhcmF0b3I7CisgICAgX19w
bl8gKz0gX19wLm5hdGl2ZSgpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIC8vIEZJWE1F
OiBVc2UgX0xJQkNQUF9ESUFHTk9TRV9XQVJOSU5HIHRvIHByb2R1Y2UgYSBkaWFnbm9zdGljIHdo
ZW4gX19zcmMKKyAgLy8gaXMga25vd24gYXQgY29tcGlsZSB0aW1lIHRvIGJlICIvJyBzaW5jZSB0
aGUgdXNlciBhbG1vc3QgY2VydGFpbmx5IGludGVuZGVkCisgIC8vIHRvIGFwcGVuZCBhIHNlcGFy
YXRvciBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIHRoZSBwYXRoIHdpdGggIi8iCisgIHRlbXBsYXRl
IDxjbGFzcyBfU291cmNlPgorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIF9FbmFibGVJZlBh
dGhhYmxlPF9Tb3VyY2U+CisgIG9wZXJhdG9yLz0oY29uc3QgX1NvdXJjZSYgX19zcmMpIHsKKyAg
ICByZXR1cm4gdGhpcy0+YXBwZW5kKF9fc3JjKTsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBf
U291cmNlPgorICBfRW5hYmxlSWZQYXRoYWJsZTxfU291cmNlPiBhcHBlbmQoY29uc3QgX1NvdXJj
ZSYgX19zcmMpIHsKKyAgICB1c2luZyBfVHJhaXRzID0gX19pc19wYXRoYWJsZTxfU291cmNlPjsK
KyAgICB1c2luZyBfQ1ZUID0gX1BhdGhDVlQ8X1NvdXJjZUNoYXI8X1NvdXJjZT4gPjsKKyAgICBp
ZiAoX19zb3VyY2VfaXNfYWJzb2x1dGUoX1RyYWl0czo6X19maXJzdF9vcl9udWxsKF9fc3JjKSkp
CisgICAgICBfX3BuXy5jbGVhcigpOworICAgIGVsc2UgaWYgKGhhc19maWxlbmFtZSgpKQorICAg
ICAgX19wbl8gKz0gcHJlZmVycmVkX3NlcGFyYXRvcjsKKyAgICBfQ1ZUOjpfX2FwcGVuZF9zb3Vy
Y2UoX19wbl8sIF9fc3JjKTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICB0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXQ+CisgIHBhdGgmIGFwcGVuZChfSW5wdXRJdCBfX2ZpcnN0LCBfSW5wdXRJ
dCBfX2xhc3QpIHsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ
dD46OnZhbHVlX3R5cGUgX0l0VmFsOworICAgIHN0YXRpY19hc3NlcnQoX19jYW5fY29udmVydF9j
aGFyPF9JdFZhbD46OnZhbHVlLCAiTXVzdCBjb252ZXJ0aWJsZSIpOworICAgIHVzaW5nIF9DVlQg
PSBfUGF0aENWVDxfSXRWYWw+OworICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3NvdXJj
ZV9pc19hYnNvbHV0ZSgqX19maXJzdCkpCisgICAgICBfX3BuXy5jbGVhcigpOworICAgIGVsc2Ug
aWYgKGhhc19maWxlbmFtZSgpKQorICAgICAgX19wbl8gKz0gcHJlZmVycmVkX3NlcGFyYXRvcjsK
KyAgICBfQ1ZUOjpfX2FwcGVuZF9yYW5nZShfX3BuXywgX19maXJzdCwgX19sYXN0KTsKKyAgICBy
ZXR1cm4gKnRoaXM7CisgIH0KKworICAvLyBjb25jYXRlbmF0aW9uCisgIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkKKyAgcGF0aCYgb3BlcmF0b3IrPShjb25zdCBwYXRoJiBfX3gpIHsKKyAgICBf
X3BuXyArPSBfX3guX19wbl87CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWQorICBwYXRoJiBvcGVyYXRvcis9KGNvbnN0IHN0cmluZ190eXBlJiBf
X3gpIHsKKyAgICBfX3BuXyArPSBfX3g7CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBwYXRoJiBvcGVyYXRvcis9KF9fc3RyaW5nX3ZpZXcg
X194KSB7CisgICAgX19wbl8gKz0gX194OworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGF0aCYgb3BlcmF0b3IrPShjb25zdCB2YWx1ZV90
eXBlKiBfX3gpIHsKKyAgICBfX3BuXyArPSBfX3g7CisgICAgcmV0dXJuICp0aGlzOworICB9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBwYXRoJiBvcGVyYXRvcis9KHZhbHVlX3R5
cGUgX194KSB7CisgICAgX19wbl8gKz0gX194OworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisg
IHRlbXBsYXRlIDxjbGFzcyBfRUNoYXJUPgorICB0eXBlbmFtZSBlbmFibGVfaWY8X19jYW5fY29u
dmVydF9jaGFyPF9FQ2hhclQ+Ojp2YWx1ZSwgcGF0aCY+Ojp0eXBlCisgIG9wZXJhdG9yKz0oX0VD
aGFyVCBfX3gpIHsKKyAgICBiYXNpY19zdHJpbmc8X0VDaGFyVD4gX190bXA7CisgICAgX190bXAg
Kz0gX194OworICAgIF9QYXRoQ1ZUPF9FQ2hhclQ+OjpfX2FwcGVuZF9zb3VyY2UoX19wbl8sIF9f
dG1wKTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJj
ZT4KKyAgX0VuYWJsZUlmUGF0aGFibGU8X1NvdXJjZT4gb3BlcmF0b3IrPShjb25zdCBfU291cmNl
JiBfX3gpIHsKKyAgICByZXR1cm4gdGhpcy0+Y29uY2F0KF9feCk7CisgIH0KKworICB0ZW1wbGF0
ZSA8Y2xhc3MgX1NvdXJjZT4KKyAgX0VuYWJsZUlmUGF0aGFibGU8X1NvdXJjZT4gY29uY2F0KGNv
bnN0IF9Tb3VyY2UmIF9feCkgeworICAgIF9Tb3VyY2VDVlQ8X1NvdXJjZT46Ol9fYXBwZW5kX3Nv
dXJjZShfX3BuXywgX194KTsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICB0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXQ+CisgIHBhdGgmIGNvbmNhdChfSW5wdXRJdCBfX2ZpcnN0LCBfSW5wdXRJ
dCBfX2xhc3QpIHsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ
dD46OnZhbHVlX3R5cGUgX0l0VmFsOworICAgIF9QYXRoQ1ZUPF9JdFZhbD46Ol9fYXBwZW5kX3Jh
bmdlKF9fcG5fLCBfX2ZpcnN0LCBfX2xhc3QpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisg
IC8vIG1vZGlmaWVycworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgY2xlYXIo
KSBub2V4Y2VwdCB7IF9fcG5fLmNsZWFyKCk7IH0KKworICBwYXRoJiBtYWtlX3ByZWZlcnJlZCgp
IHsgcmV0dXJuICp0aGlzOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBwYXRo
JiByZW1vdmVfZmlsZW5hbWUoKSB7CisgICAgYXV0byBfX2ZuYW1lID0gX19maWxlbmFtZSgpOwor
ICAgIGlmICghX19mbmFtZS5lbXB0eSgpKQorICAgICAgX19wbl8uZXJhc2UoX19mbmFtZS5kYXRh
KCkgLSBfX3BuXy5kYXRhKCkpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIHBhdGgmIHJl
cGxhY2VfZmlsZW5hbWUoY29uc3QgcGF0aCYgX19yZXBsYWNlbWVudCkgeworICAgIHJlbW92ZV9m
aWxlbmFtZSgpOworICAgIHJldHVybiAoKnRoaXMgLz0gX19yZXBsYWNlbWVudCk7CisgIH0KKwor
ICBwYXRoJiByZXBsYWNlX2V4dGVuc2lvbihjb25zdCBwYXRoJiBfX3JlcGxhY2VtZW50ID0gcGF0
aCgpKTsKKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgc3dhcChwYXRoJiBf
X3Jocykgbm9leGNlcHQgeyBfX3BuXy5zd2FwKF9fcmhzLl9fcG5fKTsgfQorCisgIC8vIHByaXZh
dGUgaGVscGVyIHRvIGFsbG93IHJlc2VydmluZyBtZW1vcnkgaW4gdGhlIHBhdGgKKyAgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWQorICB2b2lkIF9fcmVzZXJ2ZShzaXplX3QgX19zKSB7IF9fcG5f
LnJlc2VydmUoX19zKTsgfQorCisgIC8vIG5hdGl2ZSBmb3JtYXQgb2JzZXJ2ZXJzCisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgY29uc3Qgc3RyaW5nX3R5cGUmIG5hdGl2ZSgpIGNvbnN0
IG5vZXhjZXB0IHsgcmV0dXJuIF9fcG5fOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQorICBjb25zdCB2YWx1ZV90eXBlKiBjX3N0cigpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIF9f
cG5fLmNfc3RyKCk7IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIG9wZXJhdG9yIHN0
cmluZ190eXBlKCkgY29uc3QgeyByZXR1cm4gX19wbl87IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0VDaGFyVCwgY2xhc3MgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9FQ2hhclQ+LAorICAgICAgICAg
ICAgY2xhc3MgX0FsbG9jYXRvciA9IGFsbG9jYXRvcjxfRUNoYXJUPiA+CisgIGJhc2ljX3N0cmlu
ZzxfRUNoYXJULCBfVHJhaXRzLCBfQWxsb2NhdG9yPgorICBzdHJpbmcoY29uc3QgX0FsbG9jYXRv
ciYgX19hID0gX0FsbG9jYXRvcigpKSBjb25zdCB7CisgICAgdXNpbmcgX0NWVCA9IF9fd2lkZW5f
ZnJvbV91dGY4PHNpemVvZihfRUNoYXJUKSAqIF9fQ0hBUl9CSVRfXz47CisgICAgdXNpbmcgX1N0
ciA9IGJhc2ljX3N0cmluZzxfRUNoYXJULCBfVHJhaXRzLCBfQWxsb2NhdG9yPjsKKyAgICBfU3Ry
IF9fcyhfX2EpOworICAgIF9fcy5yZXNlcnZlKF9fcG5fLnNpemUoKSk7CisgICAgX0NWVCgpKGJh
Y2tfaW5zZXJ0ZXIoX19zKSwgX19wbl8uZGF0YSgpLCBfX3BuXy5kYXRhKCkgKyBfX3BuXy5zaXpl
KCkpOworICAgIHJldHVybiBfX3M7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IHN0ZDo6c3RyaW5nIHN0cmluZygpIGNvbnN0IHsgcmV0dXJuIF9fcG5fOyB9CisgIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkgc3RkOjp3c3RyaW5nIHdzdHJpbmcoKSBjb25zdCB7CisgICAgcmV0
dXJuIHN0cmluZzx3Y2hhcl90PigpOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkg
c3RkOjpzdHJpbmcgdThzdHJpbmcoKSBjb25zdCB7IHJldHVybiBfX3BuXzsgfQorICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIHN0ZDo6dTE2c3RyaW5nIHUxNnN0cmluZygpIGNvbnN0IHsKKyAg
ICByZXR1cm4gc3RyaW5nPGNoYXIxNl90PigpOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkgc3RkOjp1MzJzdHJpbmcgdTMyc3RyaW5nKCkgY29uc3QgeworICAgIHJldHVybiBzdHJp
bmc8Y2hhcjMyX3Q+KCk7CisgIH0KKworICAvLyBnZW5lcmljIGZvcm1hdCBvYnNlcnZlcnMKKyAg
dGVtcGxhdGUgPGNsYXNzIF9FQ2hhclQsIGNsYXNzIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfRUNo
YXJUPiwKKyAgICAgICAgICAgIGNsYXNzIF9BbGxvY2F0b3IgPSBhbGxvY2F0b3I8X0VDaGFyVD4g
PgorICBiYXNpY19zdHJpbmc8X0VDaGFyVCwgX1RyYWl0cywgX0FsbG9jYXRvcj4KKyAgZ2VuZXJp
Y19zdHJpbmcoY29uc3QgX0FsbG9jYXRvciYgX19hID0gX0FsbG9jYXRvcigpKSBjb25zdCB7Cisg
ICAgcmV0dXJuIHN0cmluZzxfRUNoYXJULCBfVHJhaXRzLCBfQWxsb2NhdG9yPihfX2EpOworICB9
CisKKyAgc3RkOjpzdHJpbmcgZ2VuZXJpY19zdHJpbmcoKSBjb25zdCB7IHJldHVybiBfX3BuXzsg
fQorICBzdGQ6OndzdHJpbmcgZ2VuZXJpY193c3RyaW5nKCkgY29uc3QgeyByZXR1cm4gc3RyaW5n
PHdjaGFyX3Q+KCk7IH0KKyAgc3RkOjpzdHJpbmcgZ2VuZXJpY191OHN0cmluZygpIGNvbnN0IHsg
cmV0dXJuIF9fcG5fOyB9CisgIHN0ZDo6dTE2c3RyaW5nIGdlbmVyaWNfdTE2c3RyaW5nKCkgY29u
c3QgeyByZXR1cm4gc3RyaW5nPGNoYXIxNl90PigpOyB9CisgIHN0ZDo6dTMyc3RyaW5nIGdlbmVy
aWNfdTMyc3RyaW5nKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nPGNoYXIzMl90PigpOyB9CisKK3By
aXZhdGU6CisgIGludCBfX2NvbXBhcmUoX19zdHJpbmdfdmlldykgY29uc3Q7CisgIF9fc3RyaW5n
X3ZpZXcgX19yb290X25hbWUoKSBjb25zdDsKKyAgX19zdHJpbmdfdmlldyBfX3Jvb3RfZGlyZWN0
b3J5KCkgY29uc3Q7CisgIF9fc3RyaW5nX3ZpZXcgX19yb290X3BhdGhfcmF3KCkgY29uc3Q7Cisg
IF9fc3RyaW5nX3ZpZXcgX19yZWxhdGl2ZV9wYXRoKCkgY29uc3Q7CisgIF9fc3RyaW5nX3ZpZXcg
X19wYXJlbnRfcGF0aCgpIGNvbnN0OworICBfX3N0cmluZ192aWV3IF9fZmlsZW5hbWUoKSBjb25z
dDsKKyAgX19zdHJpbmdfdmlldyBfX3N0ZW0oKSBjb25zdDsKKyAgX19zdHJpbmdfdmlldyBfX2V4
dGVuc2lvbigpIGNvbnN0OworCitwdWJsaWM6CisgIC8vIGNvbXBhcmUKKyAgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBpbnQgY29tcGFyZShjb25zdCBwYXRoJiBfX3ApIGNvbnN0IG5vZXhjZXB0
IHsKKyAgICByZXR1cm4gX19jb21wYXJlKF9fcC5fX3BuXyk7CisgIH0KKyAgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBpbnQgY29tcGFyZShjb25zdCBzdHJpbmdfdHlwZSYgX19zKSBjb25zdCB7
CisgICAgcmV0dXJuIF9fY29tcGFyZShfX3MpOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkgaW50IGNvbXBhcmUoX19zdHJpbmdfdmlldyBfX3MpIGNvbnN0IHsKKyAgICByZXR1cm4g
X19jb21wYXJlKF9fcyk7CisgIH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBpbnQgY29t
cGFyZShjb25zdCB2YWx1ZV90eXBlKiBfX3MpIGNvbnN0IHsKKyAgICByZXR1cm4gX19jb21wYXJl
KF9fcyk7CisgIH0KKworICAvLyBkZWNvbXBvc2l0aW9uCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkgcGF0aCByb290X25hbWUoKSBjb25zdCB7CisgICAgcmV0dXJuIHN0cmluZ190eXBlKF9f
cm9vdF9uYW1lKCkpOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCByb290
X2RpcmVjdG9yeSgpIGNvbnN0IHsKKyAgICByZXR1cm4gc3RyaW5nX3R5cGUoX19yb290X2RpcmVj
dG9yeSgpKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggcm9vdF9wYXRo
KCkgY29uc3QgeworICAgIHJldHVybiByb290X25hbWUoKS5hcHBlbmQoc3RyaW5nX3R5cGUoX19y
b290X2RpcmVjdG9yeSgpKSk7CisgIH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRo
IHJlbGF0aXZlX3BhdGgoKSBjb25zdCB7CisgICAgcmV0dXJuIHN0cmluZ190eXBlKF9fcmVsYXRp
dmVfcGF0aCgpKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggcGFyZW50
X3BhdGgoKSBjb25zdCB7CisgICAgcmV0dXJuIHN0cmluZ190eXBlKF9fcGFyZW50X3BhdGgoKSk7
CisgIH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIGZpbGVuYW1lKCkgY29uc3Qg
eworICAgIHJldHVybiBzdHJpbmdfdHlwZShfX2ZpbGVuYW1lKCkpOworICB9CisgIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCBzdGVtKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nX3R5cGUo
X19zdGVtKCkpOyB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCBleHRlbnNpb24o
KSBjb25zdCB7CisgICAgcmV0dXJuIHN0cmluZ190eXBlKF9fZXh0ZW5zaW9uKCkpOworICB9CisK
KyAgLy8gcXVlcnkKKyAgX0xJQkNQUF9OT0RJU0NBUkRfQUZURVJfQ1hYMTcgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBib29sCisgIGVtcHR5KCkgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVy
biBfX3BuXy5lbXB0eSgpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29s
IGhhc19yb290X25hbWUoKSBjb25zdCB7CisgICAgcmV0dXJuICFfX3Jvb3RfbmFtZSgpLmVtcHR5
KCk7CisgIH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGhhc19yb290X2RpcmVj
dG9yeSgpIGNvbnN0IHsKKyAgICByZXR1cm4gIV9fcm9vdF9kaXJlY3RvcnkoKS5lbXB0eSgpOwor
ICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBoYXNfcm9vdF9wYXRoKCkgY29u
c3QgeworICAgIHJldHVybiAhX19yb290X3BhdGhfcmF3KCkuZW1wdHkoKTsKKyAgfQorICBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaGFzX3JlbGF0aXZlX3BhdGgoKSBjb25zdCB7Cisg
ICAgcmV0dXJuICFfX3JlbGF0aXZlX3BhdGgoKS5lbXB0eSgpOworICB9CisgIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkgYm9vbCBoYXNfcGFyZW50X3BhdGgoKSBjb25zdCB7CisgICAgcmV0dXJu
ICFfX3BhcmVudF9wYXRoKCkuZW1wdHkoKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIGJvb2wgaGFzX2ZpbGVuYW1lKCkgY29uc3QgeworICAgIHJldHVybiAhX19maWxlbmFtZSgp
LmVtcHR5KCk7CisgIH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGhhc19zdGVt
KCkgY29uc3QgeyByZXR1cm4gIV9fc3RlbSgpLmVtcHR5KCk7IH0KKyAgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWSBib29sIGhhc19leHRlbnNpb24oKSBjb25zdCB7CisgICAgcmV0dXJuICFfX2V4
dGVuc2lvbigpLmVtcHR5KCk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJv
b2wgaXNfYWJzb2x1dGUoKSBjb25zdCB7CisgICAgcmV0dXJuIGhhc19yb290X2RpcmVjdG9yeSgp
OworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19yZWxhdGl2ZSgpIGNv
bnN0IHsgcmV0dXJuICFpc19hYnNvbHV0ZSgpOyB9CisKKyAgLy8gcmVsYXRpdmUgcGF0aHMKKyAg
cGF0aCBsZXhpY2FsbHlfbm9ybWFsKCkgY29uc3Q7CisgIHBhdGggbGV4aWNhbGx5X3JlbGF0aXZl
KGNvbnN0IHBhdGgmIF9fYmFzZSkgY29uc3Q7CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBwYXRoIGxleGljYWxseV9wcm94aW1hdGUoY29uc3QgcGF0aCYgX19iYXNlKSBjb25zdCB7Cisg
ICAgcGF0aCBfX3Jlc3VsdCA9IHRoaXMtPmxleGljYWxseV9yZWxhdGl2ZShfX2Jhc2UpOworICAg
IGlmIChfX3Jlc3VsdC5uYXRpdmUoKS5lbXB0eSgpKQorICAgICAgcmV0dXJuICp0aGlzOworICAg
IHJldHVybiBfX3Jlc3VsdDsKKyAgfQorCisgIC8vIGl0ZXJhdG9ycworICBjbGFzcyBfTElCQ1BQ
X1RZUEVfVklTIGl0ZXJhdG9yOworICB0eXBlZGVmIGl0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwor
CisgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3Q7CisgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0OworCisg
IHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CisgIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkgZnJpZW5kCisgICAgICB0eXBlbmFtZSBlbmFibGVfaWY8aXNfc2FtZTxfQ2hh
clQsIGNoYXI+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19zYW1l
PF9UcmFpdHMsIGNoYXJfdHJhaXRzPGNoYXI+ID46OnZhbHVlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiY+Ojp0eXBlCisgICAgICBvcGVy
YXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywgY29uc3QgcGF0aCYg
X19wKSB7CisgICAgX19vcyA8PCBzdGQ6Ol9fcXVvdGVkKF9fcC5uYXRpdmUoKSk7CisgICAgcmV0
dXJuIF9fb3M7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRz
PgorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGZyaWVuZAorICAgICAgdHlwZW5hbWUgZW5h
YmxlX2lmPCFpc19zYW1lPF9DaGFyVCwgY2hhcj46OnZhbHVlIHx8CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICFpc19zYW1lPF9UcmFpdHMsIGNoYXJfdHJhaXRzPGNoYXI+ID46OnZhbHVl
LAorICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
PiY+Ojp0eXBlCisgICAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYgX19vcywgY29uc3QgcGF0aCYgX19wKSB7CisgICAgX19vcyA8PCBzdGQ6Ol9fcXVvdGVkKF9f
cC5zdHJpbmc8X0NoYXJULCBfVHJhaXRzPigpKTsKKyAgICByZXR1cm4gX19vczsKKyAgfQorCisg
IHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CisgIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkgZnJpZW5kIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgb3Bl
cmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsIHBhdGgmIF9fcCkg
eworICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHM+IF9fdG1wOworICAgIF9faXMgPj4g
X19xdW90ZWQoX190bXApOworICAgIF9fcCA9IF9fdG1wOworICAgIHJldHVybiBfX2lzOworICB9
CisKK3ByaXZhdGU6CisgIGlubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGgmCisg
IF9fYXNzaWduX3ZpZXcoX19zdHJpbmdfdmlldyBjb25zdCYgX19zKSBub2V4Y2VwdCB7CisgICAg
X19wbl8gPSBzdHJpbmdfdHlwZShfX3MpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorICBzdHJp
bmdfdHlwZSBfX3BuXzsKK307CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZv
aWQgc3dhcChwYXRoJiBfX2xocywgcGF0aCYgX19yaHMpIG5vZXhjZXB0IHsKKyAgX19saHMuc3dh
cChfX3Jocyk7Cit9CisKK19MSUJDUFBfRlVOQ19WSVMKK3NpemVfdCBoYXNoX3ZhbHVlKGNvbnN0
IHBhdGgmIF9fcCkgbm9leGNlcHQ7CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBwYXRoJiBfX2xocywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX3Jocykgbm9leGNlcHQg
eworICByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0gMDsKK30KKworaW5saW5lIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHBhdGgmIF9fbGhzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBh
dGgmIF9fcmhzKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSAhPSAw
OworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIG9wZXJhdG9yPChj
b25zdCBwYXRoJiBfX2xocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHBhdGgmIF9fcmhzKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX2xocy5j
b21wYXJlKF9fcmhzKSA8IDA7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IGJvb2wgb3BlcmF0b3I8PShjb25zdCBwYXRoJiBfX2xocywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX3Jocykgbm9leGNlcHQg
eworICByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPD0gMDsKK30KKworaW5saW5lIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBvcGVyYXRvcj4oY29uc3QgcGF0aCYgX19saHMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRo
JiBfX3Jocykgbm9leGNlcHQgeworICByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPiAwOwor
fQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIG9wZXJhdG9yPj0oY29u
c3QgcGF0aCYgX19saHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgcGF0aCYgX19yaHMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fbGhzLmNv
bXBhcmUoX19yaHMpID49IDA7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IHBhdGggb3BlcmF0b3IvKGNvbnN0IHBhdGgmIF9fbGhzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX19yaHMpIHsKKyAgcGF0aCBf
X3Jlc3VsdChfX2xocyk7CisgIF9fcmVzdWx0IC89IF9fcmhzOworICByZXR1cm4gX19yZXN1bHQ7
Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBfU291cmNlPgorX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQorICAgIHR5cGVuYW1lIGVuYWJsZV9pZjxfX2lzX3BhdGhhYmxlPF9Tb3VyY2U+Ojp2YWx1ZSwg
cGF0aD46OnR5cGUKKyAgICB1OHBhdGgoY29uc3QgX1NvdXJjZSYgX19zKSB7CisgIHN0YXRpY19h
c3NlcnQoCisgICAgICBpc19zYW1lPHR5cGVuYW1lIF9faXNfcGF0aGFibGU8X1NvdXJjZT46Ol9f
Y2hhcl90eXBlLCBjaGFyPjo6dmFsdWUsCisgICAgICAidThwYXRoKFNvdXJjZSBjb25zdCYpIHJl
cXVpcmVzIFNvdXJjZSBoYXZlIGEgY2hhcmFjdGVyIHR5cGUgb2YgdHlwZSAiCisgICAgICAiJ2No
YXInIik7CisgIHJldHVybiBwYXRoKF9fcyk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dD4KK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgICB0eXBlbmFtZSBlbmFibGVfaWY8X19p
c19wYXRoYWJsZTxfSW5wdXRJdD46OnZhbHVlLCBwYXRoPjo6dHlwZQorICAgIHU4cGF0aChfSW5w
dXRJdCBfX2YsIF9JbnB1dEl0IF9fbCkgeworICBzdGF0aWNfYXNzZXJ0KAorICAgICAgaXNfc2Ft
ZTx0eXBlbmFtZSBfX2lzX3BhdGhhYmxlPF9JbnB1dEl0Pjo6X19jaGFyX3R5cGUsIGNoYXI+Ojp2
YWx1ZSwKKyAgICAgICJ1OHBhdGgoSXRlciwgSXRlcikgcmVxdWlyZXMgSXRlciBoYXZlIGEgdmFs
dWVfdHlwZSBvZiB0eXBlICdjaGFyJyIpOworICByZXR1cm4gcGF0aChfX2YsIF9fbCk7Cit9CisK
K2NsYXNzIF9MSUJDUFBfVFlQRV9WSVMgcGF0aDo6aXRlcmF0b3IgeworcHVibGljOgorICBlbnVt
IF9QYXJzZXJTdGF0ZSA6IHVuc2lnbmVkIGNoYXIgeworICAgIF9TaW5ndWxhciwKKyAgICBfQmVm
b3JlQmVnaW4sCisgICAgX0luUm9vdE5hbWUsCisgICAgX0luUm9vdERpciwKKyAgICBfSW5GaWxl
bmFtZXMsCisgICAgX0luVHJhaWxpbmdTZXAsCisgICAgX0F0RW5kCisgIH07CisKK3B1YmxpYzoK
KyAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsK
KworICB0eXBlZGVmIHBhdGggdmFsdWVfdHlwZTsKKyAgdHlwZWRlZiBzdGQ6OnB0cmRpZmZfdCBk
aWZmZXJlbmNlX3R5cGU7CisgIHR5cGVkZWYgY29uc3QgcGF0aCogcG9pbnRlcjsKKyAgdHlwZWRl
ZiBjb25zdCBwYXRoJiByZWZlcmVuY2U7CisKKyAgdHlwZWRlZiB2b2lkCisgICAgICBfX3N0YXNo
aW5nX2l0ZXJhdG9yX3RhZzsgLy8gU2VlIHJldmVyc2VfaXRlcmF0b3IgYW5kIF9faXNfc3Rhc2hp
bmdfaXRlcmF0b3IKKworcHVibGljOgorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGl0
ZXJhdG9yKCkKKyAgICAgIDogX19zdGFzaGVkX2VsZW1fKCksIF9fcGF0aF9wdHJfKG51bGxwdHIp
LCBfX2VudHJ5XygpLAorICAgICAgICBfX3N0YXRlXyhfU2luZ3VsYXIpIHt9CisKKyAgaXRlcmF0
b3IoY29uc3QgaXRlcmF0b3ImKSA9IGRlZmF1bHQ7CisgIH5pdGVyYXRvcigpID0gZGVmYXVsdDsK
KworICBpdGVyYXRvciYgb3BlcmF0b3I9KGNvbnN0IGl0ZXJhdG9yJikgPSBkZWZhdWx0OworCisg
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0
IHsgcmV0dXJuIF9fc3Rhc2hlZF9lbGVtXzsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkKKyAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJl9fc3Rhc2hlZF9lbGVt
XzsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgaXRlcmF0b3ImIG9wZXJhdG9y
KysoKSB7CisgICAgX0xJQkNQUF9BU1NFUlQoX19zdGF0ZV8gIT0gX1Npbmd1bGFyLAorICAgICAg
ICAgICAgICAgICAgICJhdHRlbXB0aW5nIHRvIGluY3JlbWVudCBhIHNpbmd1bGFyIGl0ZXJhdG9y
Iik7CisgICAgX0xJQkNQUF9BU1NFUlQoX19zdGF0ZV8gIT0gX0F0RW5kLAorICAgICAgICAgICAg
ICAgICAgICJhdHRlbXB0aW5nIHRvIGluY3JlbWVudCB0aGUgZW5kIGl0ZXJhdG9yIik7CisgICAg
cmV0dXJuIF9faW5jcmVtZW50KCk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
CisgIGl0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7CisgICAgaXRlcmF0b3IgX19pdCgqdGhpcyk7
CisgICAgdGhpcy0+b3BlcmF0b3IrKygpOworICAgIHJldHVybiBfX2l0OworICB9CisKKyAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBpdGVyYXRvciYgb3BlcmF0b3ItLSgpIHsKKyAgICBf
TElCQ1BQX0FTU0VSVChfX3N0YXRlXyAhPSBfU2luZ3VsYXIsCisgICAgICAgICAgICAgICAgICAg
ImF0dGVtcHRpbmcgdG8gZGVjcmVtZW50IGEgc2luZ3VsYXIgaXRlcmF0b3IiKTsKKyAgICBfTElC
Q1BQX0FTU0VSVChfX2VudHJ5Xy5kYXRhKCkgIT0gX19wYXRoX3B0cl8tPm5hdGl2ZSgpLmRhdGEo
KSwKKyAgICAgICAgICAgICAgICAgICAiYXR0ZW1wdGluZyB0byBkZWNyZW1lbnQgdGhlIGJlZ2lu
IGl0ZXJhdG9yIik7CisgICAgcmV0dXJuIF9fZGVjcmVtZW50KCk7CisgIH0KKworICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZCisgIGl0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KSB7CisgICAgaXRl
cmF0b3IgX19pdCgqdGhpcyk7CisgICAgdGhpcy0+b3BlcmF0b3ItLSgpOworICAgIHJldHVybiBf
X2l0OworICB9CisKK3ByaXZhdGU6CisgIGZyaWVuZCBjbGFzcyBwYXRoOworCisgIGlubGluZSBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRl
cmF0b3ImLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGl0ZXJhdG9yJik7CisKKyAgaXRlcmF0b3ImIF9faW5jcmVtZW50KCk7
CisgIGl0ZXJhdG9yJiBfX2RlY3JlbWVudCgpOworCisgIHBhdGggX19zdGFzaGVkX2VsZW1fOwor
ICBjb25zdCBwYXRoKiBfX3BhdGhfcHRyXzsKKyAgcGF0aDo6X19zdHJpbmdfdmlldyBfX2VudHJ5
XzsKKyAgX1BhcnNlclN0YXRlIF9fc3RhdGVfOworfTsKKworaW5saW5lIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHBhdGg6Oml0ZXJhdG9yJiBfX2xocywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBw
YXRoOjppdGVyYXRvciYgX19yaHMpIHsKKyAgcmV0dXJuIF9fbGhzLl9fcGF0aF9wdHJfID09IF9f
cmhzLl9fcGF0aF9wdHJfICYmCisgICAgICAgICBfX2xocy5fX2VudHJ5Xy5kYXRhKCkgPT0gX19y
aHMuX19lbnRyeV8uZGF0YSgpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBib29sIG9wZXJhdG9yIT0oY29uc3QgcGF0aDo6aXRlcmF0b3ImIF9fbGhzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGg6Oml0ZXJh
dG9yJiBfX3JocykgeworICByZXR1cm4gIShfX2xocyA9PSBfX3Jocyk7Cit9CisKK2NsYXNzIF9M
SUJDUFBfRVhDRVBUSU9OX0FCSSBmaWxlc3lzdGVtX2Vycm9yIDogcHVibGljIHN5c3RlbV9lcnJv
ciB7CitwdWJsaWM6CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZmlsZXN5c3RlbV9l
cnJvcihjb25zdCBzdHJpbmcmIF9fd2hhdCwgZXJyb3JfY29kZSBfX2VjKQorICAgICAgOiBzeXN0
ZW1fZXJyb3IoX19lYywgX193aGF0KSwKKyAgICAgICAgX19zdG9yYWdlXyhtYWtlX3NoYXJlZDxf
U3RvcmFnZT4ocGF0aCgpLCBwYXRoKCkpKSB7CisgICAgX19jcmVhdGVfd2hhdCgwKTsKKyAgfQor
CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZmlsZXN5c3RlbV9lcnJvcihjb25zdCBz
dHJpbmcmIF9fd2hhdCwgY29uc3QgcGF0aCYgX19wMSwgZXJyb3JfY29kZSBfX2VjKQorICAgICAg
OiBzeXN0ZW1fZXJyb3IoX19lYywgX193aGF0KSwKKyAgICAgICAgX19zdG9yYWdlXyhtYWtlX3No
YXJlZDxfU3RvcmFnZT4oX19wMSwgcGF0aCgpKSkgeworICAgIF9fY3JlYXRlX3doYXQoMSk7Cisg
IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVzeXN0ZW1fZXJyb3IoY29u
c3Qgc3RyaW5nJiBfX3doYXQsIGNvbnN0IHBhdGgmIF9fcDEsIGNvbnN0IHBhdGgmIF9fcDIsCisg
ICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSBfX2VjKQorICAgICAgOiBzeXN0ZW1fZXJyb3Io
X19lYywgX193aGF0KSwKKyAgICAgICAgX19zdG9yYWdlXyhtYWtlX3NoYXJlZDxfU3RvcmFnZT4o
X19wMSwgX19wMikpIHsKKyAgICBfX2NyZWF0ZV93aGF0KDIpOworICB9CisKKyAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWQorICBjb25zdCBwYXRoJiBwYXRoMSgpIGNvbnN0IG5vZXhjZXB0IHsg
cmV0dXJuIF9fc3RvcmFnZV8tPl9fcDFfOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQorICBjb25zdCBwYXRoJiBwYXRoMigpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIF9fc3RvcmFn
ZV8tPl9fcDJfOyB9CisKKyAgfmZpbGVzeXN0ZW1fZXJyb3IoKSBvdmVycmlkZTsgLy8ga2V5IGZ1
bmN0aW9uCisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBjb25zdCBjaGFyKiB3aGF0
KCkgY29uc3Qgbm9leGNlcHQgb3ZlcnJpZGUgeworICAgIHJldHVybiBfX3N0b3JhZ2VfLT5fX3do
YXRfLmNfc3RyKCk7CisgIH0KKworICBfTElCQ1BQX0ZVTkNfVklTCisgIHZvaWQgX19jcmVhdGVf
d2hhdChpbnQgX19udW1fcGF0aHMpOworCitwcml2YXRlOgorICBzdHJ1Y3QgX1N0b3JhZ2Ugewor
ICAgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgICBfU3RvcmFnZShjb25zdCBwYXRoJiBf
X3AxLCBjb25zdCBwYXRoJiBfX3AyKSA6IF9fcDFfKF9fcDEpLCBfX3AyXyhfX3AyKSB7fQorCisg
ICAgcGF0aCBfX3AxXzsKKyAgICBwYXRoIF9fcDJfOworICAgIHN0cmluZyBfX3doYXRfOworICB9
OworICBzaGFyZWRfcHRyPF9TdG9yYWdlPiBfX3N0b3JhZ2VfOworfTsKKwordGVtcGxhdGUgPGNs
YXNzLi4uIF9BcmdzPgorX0xJQkNQUF9OT1JFVFVSTiBpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWQorI2lmbmRlZiBfTElCQ1BQX05PX0VYQ0VQVElPTlMKKyAgICB2b2lkCisgICAgX190
aHJvd19maWxlc3lzdGVtX2Vycm9yKF9BcmdzJiYuLi4gX19hcmdzKSB7CisgIHRocm93IGZpbGVz
eXN0ZW1fZXJyb3Ioc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKK30KKyNlbHNlCisg
ICAgdm9pZAorICAgIF9fdGhyb3dfZmlsZXN5c3RlbV9lcnJvcihfQXJncyYmLi4uKSB7CisgIF9W
U1REOjphYm9ydCgpOworfQorI2VuZGlmCisKKy8vIG9wZXJhdGlvbmFsIGZ1bmN0aW9ucworCitf
TElCQ1BQX0ZVTkNfVklTCitwYXRoIF9fYWJzb2x1dGUoY29uc3QgcGF0aCYsIGVycm9yX2NvZGUq
IF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3BhdGggX19jYW5vbmljYWwoY29u
c3QgcGF0aCYsIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMK
K3ZvaWQgX19jb3B5KGNvbnN0IHBhdGgmIF9fZnJvbSwgY29uc3QgcGF0aCYgX190bywgY29weV9v
cHRpb25zIF9fb3B0LAorICAgICAgICAgICAgZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOwor
X0xJQkNQUF9GVU5DX1ZJUworYm9vbCBfX2NvcHlfZmlsZShjb25zdCBwYXRoJiBfX2Zyb20sIGNv
bnN0IHBhdGgmIF9fdG8sIGNvcHlfb3B0aW9ucyBfX29wdCwKKyAgICAgICAgICAgICAgICAgZXJy
b3JfY29kZSogX19lYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUwordm9pZCBfX2NvcHlf
c3ltbGluayhjb25zdCBwYXRoJiBfX2V4aXN0aW5nX3N5bWxpbmssIGNvbnN0IHBhdGgmIF9fbmV3
X3N5bWxpbmssCisgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRy
KTsKK19MSUJDUFBfRlVOQ19WSVMKK2Jvb2wgX19jcmVhdGVfZGlyZWN0b3JpZXMoY29uc3QgcGF0
aCYgcCwgZXJyb3JfY29kZSogZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK2Jvb2wg
X19jcmVhdGVfZGlyZWN0b3J5KGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjID0gbnVsbHB0
cik7CitfTElCQ1BQX0ZVTkNfVklTCitib29sIF9fY3JlYXRlX2RpcmVjdG9yeShjb25zdCBwYXRo
JiBwLCBjb25zdCBwYXRoJiBhdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgZXJy
b3JfY29kZSogZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3ZvaWQgX19jcmVhdGVf
ZGlyZWN0b3J5X3N5bWxpbmsoY29uc3QgcGF0aCYgX190bywgY29uc3QgcGF0aCYgX19uZXdfc3lt
bGluaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSogX19lYyA9
IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUwordm9pZCBfX2NyZWF0ZV9oYXJkX2xpbmsoY29u
c3QgcGF0aCYgX190bywgY29uc3QgcGF0aCYgX19uZXdfaGFyZF9saW5rLAorICAgICAgICAgICAg
ICAgICAgICAgICAgZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJ
Uwordm9pZCBfX2NyZWF0ZV9zeW1saW5rKGNvbnN0IHBhdGgmIF9fdG8sIGNvbnN0IHBhdGgmIF9f
bmV3X3N5bWxpbmssCisgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSogX19lYyA9IG51
bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUworcGF0aCBfX2N1cnJlbnRfcGF0aChlcnJvcl9jb2Rl
KiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCit2b2lkIF9fY3VycmVudF9wYXRo
KGNvbnN0IHBhdGgmLCBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNf
VklTCitib29sIF9fZXF1aXZhbGVudChjb25zdCBwYXRoJiwgY29uc3QgcGF0aCYsIGVycm9yX2Nv
ZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3VpbnRtYXhfdCBfX2ZpbGVf
c2l6ZShjb25zdCBwYXRoJiwgZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworX0xJQkNQUF9G
VU5DX1ZJUwordWludG1heF90IF9faGFyZF9saW5rX2NvdW50KGNvbnN0IHBhdGgmLCBlcnJvcl9j
b2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCitib29sIF9fZnNfaXNfZW1w
dHkoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVO
Q19WSVMKK2ZpbGVfdGltZV90eXBlIF9fbGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgmIHAsIGVy
cm9yX2NvZGUqIGVjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCit2b2lkIF9fbGFzdF93
cml0ZV90aW1lKGNvbnN0IHBhdGgmIHAsIGZpbGVfdGltZV90eXBlIG5ld190aW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlKiBlYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5D
X1ZJUwordm9pZCBfX3Blcm1pc3Npb25zKGNvbnN0IHBhdGgmLCBwZXJtcywgcGVybV9vcHRpb25z
LCBlcnJvcl9jb2RlKiA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUworcGF0aCBfX3JlYWRf
c3ltbGluayhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYyA9IG51bGxwdHIpOworX0xJQkNQ
UF9GVU5DX1ZJUworYm9vbCBfX3JlbW92ZShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYyA9
IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUwordWludG1heF90IF9fcmVtb3ZlX2FsbChjb25z
dCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUwor
dm9pZCBfX3JlbmFtZShjb25zdCBwYXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0bywgZXJyb3JfY29k
ZSogZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3ZvaWQgX19yZXNpemVfZmlsZShj
b25zdCBwYXRoJiBwLCB1aW50bWF4X3Qgc2l6ZSwgZXJyb3JfY29kZSogZWMgPSBudWxscHRyKTsK
K19MSUJDUFBfRlVOQ19WSVMKK3NwYWNlX2luZm8gX19zcGFjZShjb25zdCBwYXRoJiwgZXJyb3Jf
Y29kZSogX19lYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUworZmlsZV9zdGF0dXMgX19z
dGF0dXMoY29uc3QgcGF0aCYsIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBf
RlVOQ19WSVMKK2ZpbGVfc3RhdHVzIF9fc3ltbGlua19zdGF0dXMoY29uc3QgcGF0aCYsIGVycm9y
X2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3BhdGggX19zeXN0ZW1f
Y29tcGxldGUoY29uc3QgcGF0aCYsIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJD
UFBfRlVOQ19WSVMKK3BhdGggX190ZW1wX2RpcmVjdG9yeV9wYXRoKGVycm9yX2NvZGUqIF9fZWMg
PSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3BhdGggX193ZWFrbHlfY2Fub25pY2FsKHBh
dGggY29uc3QmIF9fcCwgZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworCitpbmxpbmUgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIGN1cnJlbnRfcGF0aCgpIHsKKyAgcmV0dXJuIF9f
Y3VycmVudF9wYXRoKCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBh
dGggY3VycmVudF9wYXRoKGVycm9yX2NvZGUmIF9fZWMpIHsKKyAgcmV0dXJuIF9fY3VycmVudF9w
YXRoKCZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCBj
dXJyZW50X3BhdGgoY29uc3QgcGF0aCYgX19wKSB7CisgIF9fY3VycmVudF9wYXRoKF9fcCk7Cit9
CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQgY3VycmVudF9wYXRoKGNv
bnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgX19jdXJyZW50X3BhdGgo
X19wLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGgg
YWJzb2x1dGUoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBfX2Fic29sdXRlKF9fcCk7Cit9
CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggYWJzb2x1dGUoY29uc3Qg
cGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlcnJvcl9jb2RlJiBfX2VjKSB7CisgIHJldHVybiBfX2Fic29sdXRlKF9fcCwgJl9fZWMpOwor
fQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIGNhbm9uaWNhbChjb25z
dCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIF9fY2Fub25pY2FsKF9fcCk7Cit9CisKK2lubGluZSBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggY2Fub25pY2FsKGNvbnN0IHBhdGgmIF9fcCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2Nv
ZGUmIF9fZWMpIHsKKyAgcmV0dXJuIF9fY2Fub25pY2FsKF9fcCwgJl9fZWMpOworfQorCitpbmxp
bmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIGNvcHkoY29uc3QgcGF0aCYgX19mcm9t
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGgm
IF9fdG8pIHsKKyAgX19jb3B5KF9fZnJvbSwgX190bywgY29weV9vcHRpb25zOjpub25lKTsKK30K
KworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCBjb3B5KGNvbnN0IHBhdGgm
IF9fZnJvbSwgY29uc3QgcGF0aCYgX190bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7CisgIF9fY29weShfX2Zyb20sIF9fdG8s
IGNvcHlfb3B0aW9uczo6bm9uZSwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWSB2b2lkIGNvcHkoY29uc3QgcGF0aCYgX19mcm9tLCBjb25zdCBwYXRoJiBfX3Rv
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlfb3B0aW9u
cyBfX29wdCkgeworICBfX2NvcHkoX19mcm9tLCBfX3RvLCBfX29wdCk7Cit9CisKK2lubGluZSBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQgY29weShjb25zdCBwYXRoJiBfX2Zyb20sIGNv
bnN0IHBhdGgmIF9fdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29weV9vcHRpb25zIF9fb3B0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIHsKKyAgX19jb3B5KF9fZnJvbSwgX190bywgX19v
cHQsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBj
b3B5X2ZpbGUoY29uc3QgcGF0aCYgX19mcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX190bykgeworICByZXR1cm4gX19jb3B5
X2ZpbGUoX19mcm9tLCBfX3RvLCBjb3B5X29wdGlvbnM6Om5vbmUpOworfQorCitpbmxpbmUgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sCitjb3B5X2ZpbGUoY29uc3QgcGF0aCYgX19mcm9t
LCBjb25zdCBwYXRoJiBfX3RvLCBlcnJvcl9jb2RlJiBfX2VjKSB7CisgIHJldHVybiBfX2NvcHlf
ZmlsZShfX2Zyb20sIF9fdG8sIGNvcHlfb3B0aW9uczo6bm9uZSwgJl9fZWMpOworfQorCitpbmxp
bmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sCitjb3B5X2ZpbGUoY29uc3QgcGF0aCYg
X19mcm9tLCBjb25zdCBwYXRoJiBfX3RvLCBjb3B5X29wdGlvbnMgX19vcHQpIHsKKyAgcmV0dXJu
IF9fY29weV9maWxlKF9fZnJvbSwgX190bywgX19vcHQpOworfQorCitpbmxpbmUgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWSBib29sIGNvcHlfZmlsZShjb25zdCBwYXRoJiBfX2Zyb20sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBf
X3RvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29w
eV9vcHRpb25zIF9fb3B0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgeworICByZXR1cm4gX19jb3B5X2ZpbGUoX19mcm9t
LCBfX3RvLCBfX29wdCwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWSB2b2lkIGNvcHlfc3ltbGluayhjb25zdCBwYXRoJiBfX2V4aXN0aW5nLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX19u
ZXcpIHsKKyAgX19jb3B5X3N5bWxpbmsoX19leGlzdGluZywgX19uZXcpOworfQorCitpbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkCitjb3B5X3N5bWxpbmsoY29uc3QgcGF0aCYg
X19leHQsIGNvbnN0IHBhdGgmIF9fbmV3LCBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7Cisg
IF9fY29weV9zeW1saW5rKF9fZXh0LCBfX25ldywgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSBib29sIGNyZWF0ZV9kaXJlY3Rvcmllcyhjb25zdCBwYXRoJiBf
X3ApIHsKKyAgcmV0dXJuIF9fY3JlYXRlX2RpcmVjdG9yaWVzKF9fcCk7Cit9CisKK2lubGluZSBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgY3JlYXRlX2RpcmVjdG9yaWVzKGNvbnN0IHBh
dGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIHsKKyAgcmV0dXJuIF9fY3JlYXRlX2RpcmVjdG9y
aWVzKF9fcCwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBi
b29sIGNyZWF0ZV9kaXJlY3RvcnkoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBfX2NyZWF0
ZV9kaXJlY3RvcnkoX19wKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkg
Ym9vbAorY3JlYXRlX2RpcmVjdG9yeShjb25zdCBwYXRoJiBfX3AsIGVycm9yX2NvZGUmIF9fZWMp
IG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fY3JlYXRlX2RpcmVjdG9yeShfX3AsICZfX2VjKTsKK30K
KworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBjcmVhdGVfZGlyZWN0b3J5
KGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX2F0dHJzKSB7CisgIHJldHVybiBfX2NyZWF0
ZV9kaXJlY3RvcnkoX19wLCBfX2F0dHJzKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgYm9vbAorY3JlYXRlX2RpcmVjdG9yeShjb25zdCBwYXRoJiBfX3AsIGNvbnN0IHBh
dGgmIF9fYXR0cnMsCisgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0
IHsKKyAgcmV0dXJuIF9fY3JlYXRlX2RpcmVjdG9yeShfX3AsIF9fYXR0cnMsICZfX2VjKTsKK30K
KworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZAorY3JlYXRlX2RpcmVjdG9y
eV9zeW1saW5rKGNvbnN0IHBhdGgmIF9fdG8sIGNvbnN0IHBhdGgmIF9fbmV3KSB7CisgIF9fY3Jl
YXRlX2RpcmVjdG9yeV9zeW1saW5rKF9fdG8sIF9fbmV3KTsKK30KKworaW5saW5lIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkgdm9pZAorY3JlYXRlX2RpcmVjdG9yeV9zeW1saW5rKGNvbnN0IHBh
dGgmIF9fdG8sIGNvbnN0IHBhdGgmIF9fbmV3LAorICAgICAgICAgICAgICAgICAgICAgICAgIGVy
cm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgX19jcmVhdGVfZGlyZWN0b3J5X3N5bWxpbmso
X190bywgX19uZXcsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkgdm9pZCBjcmVhdGVfaGFyZF9saW5rKGNvbnN0IHBhdGgmIF9fdG8sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX19u
ZXcpIHsKKyAgX19jcmVhdGVfaGFyZF9saW5rKF9fdG8sIF9fbmV3KTsKK30KKworaW5saW5lIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZAorY3JlYXRlX2hhcmRfbGluayhjb25zdCBwYXRo
JiBfX3RvLCBjb25zdCBwYXRoJiBfX25ldywKKyAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYg
X19lYykgbm9leGNlcHQgeworICBfX2NyZWF0ZV9oYXJkX2xpbmsoX190bywgX19uZXcsICZfX2Vj
KTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCBjcmVhdGVfc3lt
bGluayhjb25zdCBwYXRoJiBfX3RvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX25ldykgeworICBfX2NyZWF0ZV9zeW1s
aW5rKF9fdG8sIF9fbmV3KTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkg
dm9pZAorY3JlYXRlX3N5bWxpbmsoY29uc3QgcGF0aCYgX190bywgY29uc3QgcGF0aCYgX19uZXcs
IGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fY3JlYXRlX3N5bWxpbmso
X190bywgX19uZXcsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkgYm9vbCBzdGF0dXNfa25vd24oZmlsZV9zdGF0dXMgX19zKSBub2V4Y2VwdCB7CisgIHJldHVy
biBfX3MudHlwZSgpICE9IGZpbGVfdHlwZTo6bm9uZTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkgYm9vbCBleGlzdHMoZmlsZV9zdGF0dXMgX19zKSBub2V4Y2VwdCB7Cisg
IHJldHVybiBzdGF0dXNfa25vd24oX19zKSAmJiBfX3MudHlwZSgpICE9IGZpbGVfdHlwZTo6bm90
X2ZvdW5kOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGV4aXN0
cyhjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIGV4aXN0cyhfX3N0YXR1cyhfX3ApKTsKK30K
KworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBleGlzdHMoY29uc3QgcGF0
aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJy
b3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICBhdXRvIF9fcyA9IF9fc3RhdHVzKF9fcCwgJl9f
ZWMpOworICBpZiAoc3RhdHVzX2tub3duKF9fcykpCisgICAgX19lYy5jbGVhcigpOworICByZXR1
cm4gZXhpc3RzKF9fcyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJv
b2wgZXF1aXZhbGVudChjb25zdCBwYXRoJiBfX3AxLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9fcDIpIHsKKyAgcmV0dXJuIF9f
ZXF1aXZhbGVudChfX3AxLCBfX3AyKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkgYm9vbAorZXF1aXZhbGVudChjb25zdCBwYXRoJiBfX3AxLCBjb25zdCBwYXRoJiBfX3Ay
LCBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX2VxdWl2YWxlbnQoX19w
MSwgX19wMiwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB1
aW50bWF4X3QgZmlsZV9zaXplKGNvbnN0IHBhdGgmIF9fcCkgeworICByZXR1cm4gX19maWxlX3Np
emUoX19wKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdWludG1heF90
CitmaWxlX3NpemUoY29uc3QgcGF0aCYgX19wLCBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7
CisgIHJldHVybiBfX2ZpbGVfc2l6ZShfX3AsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkgdWludG1heF90IGhhcmRfbGlua19jb3VudChjb25zdCBwYXRoJiBf
X3ApIHsKKyAgcmV0dXJuIF9faGFyZF9saW5rX2NvdW50KF9fcCk7Cit9CisKK2lubGluZSBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZIHVpbnRtYXhfdAoraGFyZF9saW5rX2NvdW50KGNvbnN0IHBh
dGgmIF9fcCwgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICByZXR1cm4gX19oYXJkX2xp
bmtfY291bnQoX19wLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIGJvb2wgaXNfYmxvY2tfZmlsZShmaWxlX3N0YXR1cyBfX3MpIG5vZXhjZXB0IHsKKyAgcmV0
dXJuIF9fcy50eXBlKCkgPT0gZmlsZV90eXBlOjpibG9jazsKK30KKworaW5saW5lIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19ibG9ja19maWxlKGNvbnN0IHBhdGgmIF9fcCkgewor
ICByZXR1cm4gaXNfYmxvY2tfZmlsZShfX3N0YXR1cyhfX3ApKTsKK30KKworaW5saW5lIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19ibG9ja19maWxlKGNvbnN0IHBhdGgmIF9fcCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJv
cl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBpc19ibG9ja19maWxlKF9fc3RhdHVz
KF9fcCwgJl9fZWMpKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9v
bAoraXNfY2hhcmFjdGVyX2ZpbGUoZmlsZV9zdGF0dXMgX19zKSBub2V4Y2VwdCB7CisgIHJldHVy
biBfX3MudHlwZSgpID09IGZpbGVfdHlwZTo6Y2hhcmFjdGVyOworfQorCitpbmxpbmUgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX2NoYXJhY3Rlcl9maWxlKGNvbnN0IHBhdGgmIF9f
cCkgeworICByZXR1cm4gaXNfY2hhcmFjdGVyX2ZpbGUoX19zdGF0dXMoX19wKSk7Cit9CisKK2lu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wKK2lzX2NoYXJhY3Rlcl9maWxlKGNv
bnN0IHBhdGgmIF9fcCwgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICByZXR1cm4gaXNf
Y2hhcmFjdGVyX2ZpbGUoX19zdGF0dXMoX19wLCAmX19lYykpOworfQorCitpbmxpbmUgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX2RpcmVjdG9yeShmaWxlX3N0YXR1cyBfX3MpIG5v
ZXhjZXB0IHsKKyAgcmV0dXJuIF9fcy50eXBlKCkgPT0gZmlsZV90eXBlOjpkaXJlY3Rvcnk7Cit9
CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfZGlyZWN0b3J5KGNv
bnN0IHBhdGgmIF9fcCkgeworICByZXR1cm4gaXNfZGlyZWN0b3J5KF9fc3RhdHVzKF9fcCkpOwor
fQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX2RpcmVjdG9yeShj
b25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBpc19kaXJl
Y3RvcnkoX19zdGF0dXMoX19wLCAmX19lYykpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWSBib29sIGlzX2VtcHR5KGNvbnN0IHBhdGgmIF9fcCkgeworICByZXR1cm4gX19m
c19pc19lbXB0eShfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBi
b29sIGlzX2VtcHR5KGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgeworICByZXR1cm4gX19mc19p
c19lbXB0eShfX3AsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkgYm9vbCBpc19maWZvKGZpbGVfc3RhdHVzIF9fcykgbm9leGNlcHQgeworICByZXR1cm4gX19z
LnR5cGUoKSA9PSBmaWxlX3R5cGU6OmZpZm87Cit9CitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWSBib29sIGlzX2ZpZm8oY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBpc19maWZv
KF9fc3RhdHVzKF9fcCkpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBi
b29sIGlzX2ZpZm8oY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJu
IGlzX2ZpZm8oX19zdGF0dXMoX19wLCAmX19lYykpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBib29sCitpc19yZWd1bGFyX2ZpbGUoZmlsZV9zdGF0dXMgX19zKSBub2V4
Y2VwdCB7CisgIHJldHVybiBfX3MudHlwZSgpID09IGZpbGVfdHlwZTo6cmVndWxhcjsKK30KKwor
aW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19yZWd1bGFyX2ZpbGUoY29u
c3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBpc19yZWd1bGFyX2ZpbGUoX19zdGF0dXMoX19wKSk7
Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wKK2lzX3JlZ3VsYXJf
ZmlsZShjb25zdCBwYXRoJiBfX3AsIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0
dXJuIGlzX3JlZ3VsYXJfZmlsZShfX3N0YXR1cyhfX3AsICZfX2VjKSk7Cit9CisKK2lubGluZSBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfc29ja2V0KGZpbGVfc3RhdHVzIF9fcykg
bm9leGNlcHQgeworICByZXR1cm4gX19zLnR5cGUoKSA9PSBmaWxlX3R5cGU6OnNvY2tldDsKK30K
KworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19zb2NrZXQoY29uc3Qg
cGF0aCYgX19wKSB7CisgIHJldHVybiBpc19zb2NrZXQoX19zdGF0dXMoX19wKSk7Cit9CisKK2lu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfc29ja2V0KGNvbnN0IHBhdGgm
IF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVy
cm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIGlzX3NvY2tldChfX3N0YXR1cyhf
X3AsICZfX2VjKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wg
aXNfc3ltbGluayhmaWxlX3N0YXR1cyBfX3MpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fcy50eXBl
KCkgPT0gZmlsZV90eXBlOjpzeW1saW5rOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWSBib29sIGlzX3N5bWxpbmsoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBpc19z
eW1saW5rKF9fc3ltbGlua19zdGF0dXMoX19wKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIGJvb2wgaXNfc3ltbGluayhjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykg
bm9leGNlcHQgeworICByZXR1cm4gaXNfc3ltbGluayhfX3N5bWxpbmtfc3RhdHVzKF9fcCwgJl9f
ZWMpKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19vdGhl
cihmaWxlX3N0YXR1cyBfX3MpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIGV4aXN0cyhfX3MpICYmICFp
c19yZWd1bGFyX2ZpbGUoX19zKSAmJiAhaXNfZGlyZWN0b3J5KF9fcykgJiYKKyAgICAgICAgICFp
c19zeW1saW5rKF9fcyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJv
b2wgaXNfb3RoZXIoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBpc19vdGhlcihfX3N0YXR1
cyhfX3ApKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19v
dGhlcihjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIGlzX290
aGVyKF9fc3RhdHVzKF9fcCwgJl9fZWMpKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgZmlsZV90aW1lX3R5cGUKK2xhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBfX3Ap
IHsKKyAgcmV0dXJuIF9fbGFzdF93cml0ZV90aW1lKF9fcCk7Cit9CisKK2lubGluZSBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIGZpbGVfdGltZV90eXBlCitsYXN0X3dyaXRlX3RpbWUoY29uc3Qg
cGF0aCYgX19wLCBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX2xhc3Rf
d3JpdGVfdGltZShfX3AsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkgdm9pZCBsYXN0X3dyaXRlX3RpbWUoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV90aW1lX3R5cGUg
X190KSB7CisgIF9fbGFzdF93cml0ZV90aW1lKF9fcCwgX190KTsKK30KKworaW5saW5lIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZAorbGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgmIF9f
cCwgZmlsZV90aW1lX3R5cGUgX190LAorICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMp
IG5vZXhjZXB0IHsKKyAgX19sYXN0X3dyaXRlX3RpbWUoX19wLCBfX3QsICZfX2VjKTsKK30KKwor
aW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZAorcGVybWlzc2lvbnMoY29uc3Qg
cGF0aCYgX19wLCBwZXJtcyBfX3BybXMsCisgICAgICAgICAgICBwZXJtX29wdGlvbnMgX19vcHRz
ID0gcGVybV9vcHRpb25zOjpyZXBsYWNlKSB7CisgIF9fcGVybWlzc2lvbnMoX19wLCBfX3BybXMs
IF9fb3B0cyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQgcGVy
bWlzc2lvbnMoY29uc3QgcGF0aCYgX19wLCBwZXJtcyBfX3BybXMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhj
ZXB0IHsKKyAgX19wZXJtaXNzaW9ucyhfX3AsIF9fcHJtcywgcGVybV9vcHRpb25zOjpyZXBsYWNl
LCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQgcGVy
bWlzc2lvbnMoY29uc3QgcGF0aCYgX19wLCBwZXJtcyBfX3BybXMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1fb3B0aW9ucyBfX29wdHMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2Nv
ZGUmIF9fZWMpIHsKKyAgX19wZXJtaXNzaW9ucyhfX3AsIF9fcHJtcywgX19vcHRzLCAmX19lYyk7
Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggcHJveGltYXRlKGNv
bnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHBhdGgmIF9fYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIHsKKyAgcGF0aCBfX3RtcCA9IF9f
d2Vha2x5X2Nhbm9uaWNhbChfX3AsICZfX2VjKTsKKyAgaWYgKF9fZWMpCisgICAgcmV0dXJuIHt9
OworICBwYXRoIF9fdG1wX2Jhc2UgPSBfX3dlYWtseV9jYW5vbmljYWwoX19iYXNlLCAmX19lYyk7
CisgIGlmIChfX2VjKQorICAgIHJldHVybiB7fTsKKyAgcmV0dXJuIF9fdG1wLmxleGljYWxseV9w
cm94aW1hdGUoX190bXBfYmFzZSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIHBhdGggcHJveGltYXRlKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIHsKKyAgcmV0dXJu
IHByb3hpbWF0ZShfX3AsIGN1cnJlbnRfcGF0aCgpLCBfX2VjKTsKK30KKworaW5saW5lIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aAorcHJveGltYXRlKGNvbnN0IHBhdGgmIF9fcCwgY29u
c3QgcGF0aCYgX19iYXNlID0gY3VycmVudF9wYXRoKCkpIHsKKyAgcmV0dXJuIF9fd2Vha2x5X2Nh
bm9uaWNhbChfX3ApLmxleGljYWxseV9wcm94aW1hdGUoCisgICAgICBfX3dlYWtseV9jYW5vbmlj
YWwoX19iYXNlKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGgg
cmVhZF9zeW1saW5rKGNvbnN0IHBhdGgmIF9fcCkgeworICByZXR1cm4gX19yZWFkX3N5bWxpbmso
X19wKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCByZWFkX3N5
bWxpbmsoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgeworICByZXR1cm4gX19yZWFkX3N5
bWxpbmsoX19wLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IHBhdGggcmVsYXRpdmUoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX2Jhc2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIHsKKyAg
cGF0aCBfX3RtcCA9IF9fd2Vha2x5X2Nhbm9uaWNhbChfX3AsICZfX2VjKTsKKyAgaWYgKF9fZWMp
CisgICAgcmV0dXJuIHBhdGgoKTsKKyAgcGF0aCBfX3RtcGJhc2UgPSBfX3dlYWtseV9jYW5vbmlj
YWwoX19iYXNlLCAmX19lYyk7CisgIGlmIChfX2VjKQorICAgIHJldHVybiBwYXRoKCk7CisgIHJl
dHVybiBfX3RtcC5sZXhpY2FsbHlfcmVsYXRpdmUoX190bXBiYXNlKTsKK30KKworaW5saW5lIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCByZWxhdGl2ZShjb25zdCBwYXRoJiBfX3AsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUm
IF9fZWMpIHsKKyAgcmV0dXJuIHJlbGF0aXZlKF9fcCwgY3VycmVudF9wYXRoKCksIF9fZWMpOwor
fQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoCityZWxhdGl2ZShjb25z
dCBwYXRoJiBfX3AsIGNvbnN0IHBhdGgmIF9fYmFzZSA9IGN1cnJlbnRfcGF0aCgpKSB7CisgIHJl
dHVybiBfX3dlYWtseV9jYW5vbmljYWwoX19wKS5sZXhpY2FsbHlfcmVsYXRpdmUoX193ZWFrbHlf
Y2Fub25pY2FsKF9fYmFzZSkpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBib29sIHJlbW92ZShjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIF9fcmVtb3ZlKF9fcCk7
Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgcmVtb3ZlKGNvbnN0
IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fcmVtb3ZlKF9fcCwgJl9f
ZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB1aW50bWF4X3QgcmVt
b3ZlX2FsbChjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIF9fcmVtb3ZlX2FsbChfX3ApOwor
fQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB1aW50bWF4X3QgcmVtb3ZlX2Fs
bChjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7CisgIHJldHVybiBfX3JlbW92ZV9h
bGwoX19wLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZv
aWQgcmVuYW1lKGNvbnN0IHBhdGgmIF9fZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9fdG8pIHsKKyAgcmV0dXJuIF9fcmVuYW1l
KF9fZnJvbSwgX190byk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZv
aWQKK3JlbmFtZShjb25zdCBwYXRoJiBfX2Zyb20sIGNvbnN0IHBhdGgmIF9fdG8sIGVycm9yX2Nv
ZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fcmVuYW1lKF9fZnJvbSwgX190bywgJl9f
ZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIHJlc2l6ZV9m
aWxlKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdWludG1heF90IF9fbnMpIHsKKyAgcmV0dXJuIF9fcmVzaXplX2ZpbGUo
X19wLCBfX25zKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZAor
cmVzaXplX2ZpbGUoY29uc3QgcGF0aCYgX19wLCB1aW50bWF4X3QgX19ucywgZXJyb3JfY29kZSYg
X19lYykgbm9leGNlcHQgeworICByZXR1cm4gX19yZXNpemVfZmlsZShfX3AsIF9fbnMsICZfX2Vj
KTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3BhY2VfaW5mbyBzcGFj
ZShjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIF9fc3BhY2UoX19wKTsKK30KKworaW5saW5l
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgc3BhY2VfaW5mbyBzcGFjZShjb25zdCBwYXRoJiBf
X3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVy
cm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fc3BhY2UoX19wLCAmX19lYyk7
Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGZpbGVfc3RhdHVzIHN0YXR1
cyhjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIF9fc3RhdHVzKF9fcCk7Cit9CisKK2lubGlu
ZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGZpbGVfc3RhdHVzIHN0YXR1cyhjb25zdCBwYXRo
JiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICByZXR1cm4gX19zdGF0dXMoX19wLCAm
X19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGZpbGVfc3RhdHVz
IHN5bWxpbmtfc3RhdHVzKGNvbnN0IHBhdGgmIF9fcCkgeworICByZXR1cm4gX19zeW1saW5rX3N0
YXR1cyhfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBmaWxlX3N0
YXR1cworc3ltbGlua19zdGF0dXMoY29uc3QgcGF0aCYgX19wLCBlcnJvcl9jb2RlJiBfX2VjKSBu
b2V4Y2VwdCB7CisgIHJldHVybiBfX3N5bWxpbmtfc3RhdHVzKF9fcCwgJl9fZWMpOworfQorCitp
bmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIHRlbXBfZGlyZWN0b3J5X3BhdGgo
KSB7CisgIHJldHVybiBfX3RlbXBfZGlyZWN0b3J5X3BhdGgoKTsKK30KKworaW5saW5lIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCB0ZW1wX2RpcmVjdG9yeV9wYXRoKGVycm9yX2NvZGUm
IF9fZWMpIHsKKyAgcmV0dXJuIF9fdGVtcF9kaXJlY3RvcnlfcGF0aCgmX19lYyk7Cit9CisKK2lu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggd2Vha2x5X2Nhbm9uaWNhbChwYXRo
IGNvbnN0JiBfX3ApIHsKKyAgcmV0dXJuIF9fd2Vha2x5X2Nhbm9uaWNhbChfX3ApOworfQorCitp
bmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIHdlYWtseV9jYW5vbmljYWwocGF0
aCBjb25zdCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIHsKKyAgcmV0dXJuIF9fd2Vha2x5X2Nhbm9u
aWNhbChfX3AsICZfX2VjKTsKK30KKworY2xhc3MgZGlyZWN0b3J5X2l0ZXJhdG9yOworY2xhc3Mg
cmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjsKK2NsYXNzIF9fZGlyX3N0cmVhbTsKKworY2xh
c3MgZGlyZWN0b3J5X2VudHJ5IHsKKyAgdHlwZWRlZiBfVlNURF9GUzo6cGF0aCBfUGF0aDsKKwor
cHVibGljOgorICAvLyBjb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3JzCisgIGRpcmVjdG9yeV9l
bnRyeSgpIG5vZXhjZXB0ID0gZGVmYXVsdDsKKyAgZGlyZWN0b3J5X2VudHJ5KGRpcmVjdG9yeV9l
bnRyeSBjb25zdCYpID0gZGVmYXVsdDsKKyAgZGlyZWN0b3J5X2VudHJ5KGRpcmVjdG9yeV9lbnRy
eSYmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQor
ICBleHBsaWNpdCBkaXJlY3RvcnlfZW50cnkoX1BhdGggY29uc3QmIF9fcCkgOiBfX3BfKF9fcCkg
eworICAgIGVycm9yX2NvZGUgX19lYzsKKyAgICBfX3JlZnJlc2goJl9fZWMpOworICB9CisKKyAg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBkaXJlY3RvcnlfZW50cnkoX1BhdGggY29uc3Qm
IF9fcCwgZXJyb3JfY29kZSYgX19lYykgOiBfX3BfKF9fcCkgeworICAgIF9fcmVmcmVzaCgmX19l
Yyk7CisgIH0KKworICB+ZGlyZWN0b3J5X2VudHJ5KCkge30KKworICBkaXJlY3RvcnlfZW50cnkm
IG9wZXJhdG9yPShkaXJlY3RvcnlfZW50cnkgY29uc3QmKSA9IGRlZmF1bHQ7CisgIGRpcmVjdG9y
eV9lbnRyeSYgb3BlcmF0b3I9KGRpcmVjdG9yeV9lbnRyeSYmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7
CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB2b2lkIGFzc2lnbihfUGF0aCBjb25z
dCYgX19wKSB7CisgICAgX19wXyA9IF9fcDsKKyAgICBlcnJvcl9jb2RlIF9fZWM7CisgICAgX19y
ZWZyZXNoKCZfX2VjKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdm9p
ZCBhc3NpZ24oX1BhdGggY29uc3QmIF9fcCwgZXJyb3JfY29kZSYgX19lYykgeworICAgIF9fcF8g
PSBfX3A7CisgICAgX19yZWZyZXNoKCZfX2VjKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkKKyAgdm9pZCByZXBsYWNlX2ZpbGVuYW1lKF9QYXRoIGNvbnN0JiBfX3ApIHsKKyAg
ICBfX3BfLnJlcGxhY2VfZmlsZW5hbWUoX19wKTsKKyAgICBlcnJvcl9jb2RlIF9fZWM7CisgICAg
X19yZWZyZXNoKCZfX2VjKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAg
dm9pZCByZXBsYWNlX2ZpbGVuYW1lKF9QYXRoIGNvbnN0JiBfX3AsIGVycm9yX2NvZGUmIF9fZWMp
IHsKKyAgICBfX3BfID0gX19wXy5wYXJlbnRfcGF0aCgpIC8gX19wOworICAgIF9fcmVmcmVzaCgm
X19lYyk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgcmVmcmVz
aCgpIHsgX19yZWZyZXNoKCk7IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZv
aWQgcmVmcmVzaChlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7IF9fcmVmcmVzaCgmX19lYyk7
IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIF9QYXRoIGNvbnN0JiBwYXRoKCkg
Y29uc3Qgbm9leGNlcHQgeyByZXR1cm4gX19wXzsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKKyAgb3BlcmF0b3IgY29uc3QgX1BhdGgmKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4g
X19wXzsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBleGlzdHMoKSBj
b25zdCB7IHJldHVybiBfVlNURF9GUzo6ZXhpc3RzKGZpbGVfc3RhdHVze19fZ2V0X2Z0KCl9KTsg
fQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBleGlzdHMoZXJyb3JfY29k
ZSYgX19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfVlNURF9GUzo6ZXhpc3RzKGZp
bGVfc3RhdHVze19fZ2V0X2Z0KCZfX2VjKX0pOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWQorICBib29sIGlzX2Jsb2NrX2ZpbGUoKSBjb25zdCB7IHJldHVybiBfX2dldF9mdCgp
ID09IGZpbGVfdHlwZTo6YmxvY2s7IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisg
IGJvb2wgaXNfYmxvY2tfZmlsZShlcnJvcl9jb2RlJiBfX2VjKSBjb25zdCBub2V4Y2VwdCB7Cisg
ICAgcmV0dXJuIF9fZ2V0X2Z0KCZfX2VjKSA9PSBmaWxlX3R5cGU6OmJsb2NrOworICB9CisKKyAg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIGlzX2NoYXJhY3Rlcl9maWxlKCkgY29u
c3QgeyByZXR1cm4gX19nZXRfZnQoKSA9PSBmaWxlX3R5cGU6OmNoYXJhY3RlcjsgfQorCisgIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19jaGFyYWN0ZXJfZmlsZShlcnJvcl9j
b2RlJiBfX2VjKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X2Z0KCZfX2VjKSA9
PSBmaWxlX3R5cGU6OmNoYXJhY3RlcjsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkKKyAgYm9vbCBpc19kaXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiBfX2dldF9mdCgpID09IGZp
bGVfdHlwZTo6ZGlyZWN0b3J5OyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBi
b29sIGlzX2RpcmVjdG9yeShlcnJvcl9jb2RlJiBfX2VjKSBjb25zdCBub2V4Y2VwdCB7CisgICAg
cmV0dXJuIF9fZ2V0X2Z0KCZfX2VjKSA9PSBmaWxlX3R5cGU6OmRpcmVjdG9yeTsKKyAgfQorCisg
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19maWZvKCkgY29uc3QgeyByZXR1
cm4gX19nZXRfZnQoKSA9PSBmaWxlX3R5cGU6OmZpZm87IH0KKworICBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZCisgIGJvb2wgaXNfZmlmbyhlcnJvcl9jb2RlJiBfX2VjKSBjb25zdCBub2V4Y2Vw
dCB7CisgICAgcmV0dXJuIF9fZ2V0X2Z0KCZfX2VjKSA9PSBmaWxlX3R5cGU6OmZpZm87CisgIH0K
KworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgaXNfb3RoZXIoKSBjb25zdCB7
IHJldHVybiBfVlNURF9GUzo6aXNfb3RoZXIoZmlsZV9zdGF0dXN7X19nZXRfZnQoKX0pOyB9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIGlzX290aGVyKGVycm9yX2NvZGUm
IF9fZWMpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX1ZTVERfRlM6OmlzX290aGVyKGZp
bGVfc3RhdHVze19fZ2V0X2Z0KCZfX2VjKX0pOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWQorICBib29sIGlzX3JlZ3VsYXJfZmlsZSgpIGNvbnN0IHsgcmV0dXJuIF9fZ2V0X2Z0
KCkgPT0gZmlsZV90eXBlOjpyZWd1bGFyOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQorICBib29sIGlzX3JlZ3VsYXJfZmlsZShlcnJvcl9jb2RlJiBfX2VjKSBjb25zdCBub2V4Y2Vw
dCB7CisgICAgcmV0dXJuIF9fZ2V0X2Z0KCZfX2VjKSA9PSBmaWxlX3R5cGU6OnJlZ3VsYXI7Cisg
IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgaXNfc29ja2V0KCkgY29u
c3QgeyByZXR1cm4gX19nZXRfZnQoKSA9PSBmaWxlX3R5cGU6OnNvY2tldDsgfQorCisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19zb2NrZXQoZXJyb3JfY29kZSYgX19lYykg
Y29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX2dldF9mdCgmX19lYykgPT0gZmlsZV90eXBl
Ojpzb2NrZXQ7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgaXNf
c3ltbGluaygpIGNvbnN0IHsgcmV0dXJuIF9fZ2V0X3N5bV9mdCgpID09IGZpbGVfdHlwZTo6c3lt
bGluazsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19zeW1saW5r
KGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19nZXRfc3lt
X2Z0KCZfX2VjKSA9PSBmaWxlX3R5cGU6OnN5bWxpbms7CisgIH0KKyAgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWQorICB1aW50bWF4X3QgZmlsZV9zaXplKCkgY29uc3QgeyByZXR1cm4gX19nZXRf
c2l6ZSgpOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB1aW50bWF4X3QgZmls
ZV9zaXplKGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19n
ZXRfc2l6ZSgmX19lYyk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHVp
bnRtYXhfdCBoYXJkX2xpbmtfY291bnQoKSBjb25zdCB7IHJldHVybiBfX2dldF9ubGluaygpOyB9
CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB1aW50bWF4X3QgaGFyZF9saW5rX2Nv
dW50KGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19nZXRf
bmxpbmsoJl9fZWMpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBmaWxl
X3RpbWVfdHlwZSBsYXN0X3dyaXRlX3RpbWUoKSBjb25zdCB7IHJldHVybiBfX2dldF93cml0ZV90
aW1lKCk7IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVfdGltZV90eXBl
IGxhc3Rfd3JpdGVfdGltZShlcnJvcl9jb2RlJiBfX2VjKSBjb25zdCBub2V4Y2VwdCB7CisgICAg
cmV0dXJuIF9fZ2V0X3dyaXRlX3RpbWUoJl9fZWMpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWQorICBmaWxlX3N0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBfX2dldF9z
dGF0dXMoKTsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV9zdGF0dXMg
c3RhdHVzKGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19n
ZXRfc3RhdHVzKCZfX2VjKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAg
ZmlsZV9zdGF0dXMgc3ltbGlua19zdGF0dXMoKSBjb25zdCB7IHJldHVybiBfX2dldF9zeW1saW5r
X3N0YXR1cygpOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBmaWxlX3N0YXR1
cyBzeW1saW5rX3N0YXR1cyhlcnJvcl9jb2RlJiBfX2VjKSBjb25zdCBub2V4Y2VwdCB7CisgICAg
cmV0dXJuIF9fZ2V0X3N5bWxpbmtfc3RhdHVzKCZfX2VjKTsKKyAgfQorCisgIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBvcGVyYXRvcjwoZGlyZWN0b3J5X2VudHJ5IGNvbnN0JiBf
X3JocykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX3BfIDwgX19yaHMuX19wXzsKKyAg
fQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBvcGVyYXRvcj09KGRpcmVj
dG9yeV9lbnRyeSBjb25zdCYgX19yaHMpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19w
XyA9PSBfX3Jocy5fX3BfOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBi
b29sIG9wZXJhdG9yIT0oZGlyZWN0b3J5X2VudHJ5IGNvbnN0JiBfX3JocykgY29uc3Qgbm9leGNl
cHQgeworICAgIHJldHVybiBfX3BfICE9IF9fcmhzLl9fcF87CisgIH0KKworICBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZCisgIGJvb2wgb3BlcmF0b3I8PShkaXJlY3RvcnlfZW50cnkgY29uc3Qm
IF9fcmhzKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fcF8gPD0gX19yaHMuX19wXzsK
KyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBvcGVyYXRvcj4oZGly
ZWN0b3J5X2VudHJ5IGNvbnN0JiBfX3JocykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBf
X3BfID4gX19yaHMuX19wXzsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAg
Ym9vbCBvcGVyYXRvcj49KGRpcmVjdG9yeV9lbnRyeSBjb25zdCYgX19yaHMpIGNvbnN0IG5vZXhj
ZXB0IHsKKyAgICByZXR1cm4gX19wXyA+PSBfX3Jocy5fX3BfOworICB9CisKK3ByaXZhdGU6Cisg
IGZyaWVuZCBjbGFzcyBkaXJlY3RvcnlfaXRlcmF0b3I7CisgIGZyaWVuZCBjbGFzcyByZWN1cnNp
dmVfZGlyZWN0b3J5X2l0ZXJhdG9yOworICBmcmllbmQgY2xhc3MgX19kaXJfc3RyZWFtOworCisg
IGVudW0gX0NhY2hlVHlwZSA6IHVuc2lnbmVkIGNoYXIgeworICAgIF9FbXB0eSwKKyAgICBfSXRl
clN5bWxpbmssCisgICAgX0l0ZXJOb25TeW1saW5rLAorICAgIF9SZWZyZXNoU3ltbGluaywKKyAg
ICBfUmVmcmVzaFN5bWxpbmtVbnJlc29sdmVkLAorICAgIF9SZWZyZXNoTm9uU3ltbGluaworICB9
OworCisgIHN0cnVjdCBfX2NhY2hlZF9kYXRhIHsKKyAgICB1aW50bWF4X3QgX19zaXplXzsKKyAg
ICB1aW50bWF4X3QgX19ubGlua187CisgICAgZmlsZV90aW1lX3R5cGUgX193cml0ZV90aW1lXzsK
KyAgICBwZXJtcyBfX3N5bV9wZXJtc187CisgICAgcGVybXMgX19ub25fc3ltX3Blcm1zXzsKKyAg
ICBmaWxlX3R5cGUgX190eXBlXzsKKyAgICBfQ2FjaGVUeXBlIF9fY2FjaGVfdHlwZV87CisKKyAg
ICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgICAgX19jYWNoZWRfZGF0YSgpIG5vZXhjZXB0
IHsgX19yZXNldCgpOyB9CisKKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgICAgdm9p
ZCBfX3Jlc2V0KCkgeworICAgICAgX19jYWNoZV90eXBlXyA9IF9FbXB0eTsKKyAgICAgIF9fdHlw
ZV8gPSBmaWxlX3R5cGU6Om5vbmU7CisgICAgICBfX3N5bV9wZXJtc18gPSBfX25vbl9zeW1fcGVy
bXNfID0gcGVybXM6OnVua25vd247CisgICAgICBfX3NpemVfID0gX19ubGlua18gPSB1aW50bWF4
X3QoLTEpOworICAgICAgX193cml0ZV90aW1lXyA9IGZpbGVfdGltZV90eXBlOjptaW4oKTsKKyAg
ICB9CisgIH07CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBzdGF0aWMgX19jYWNo
ZWRfZGF0YSBfX2NyZWF0ZV9pdGVyX3Jlc3VsdChmaWxlX3R5cGUgX19mdCkgeworICAgIF9fY2Fj
aGVkX2RhdGEgX19kYXRhOworICAgIF9fZGF0YS5fX3R5cGVfID0gX19mdDsKKyAgICBfX2RhdGEu
X19jYWNoZV90eXBlXyA9IFsmXSgpIHsKKyAgICAgIHN3aXRjaCAoX19mdCkgeworICAgICAgY2Fz
ZSBmaWxlX3R5cGU6Om5vbmU6CisgICAgICAgIHJldHVybiBfRW1wdHk7CisgICAgICBjYXNlIGZp
bGVfdHlwZTo6c3ltbGluazoKKyAgICAgICAgcmV0dXJuIF9JdGVyU3ltbGluazsKKyAgICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBfSXRlck5vblN5bWxpbms7CisgICAgICB9CisgICAgfSgp
OworICAgIHJldHVybiBfX2RhdGE7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
CisgIHZvaWQgX19hc3NpZ25faXRlcl9lbnRyeShfUGF0aCYmIF9fcCwgX19jYWNoZWRfZGF0YSBf
X2R0KSB7CisgICAgX19wXyA9IHN0ZDo6bW92ZShfX3ApOworICAgIF9fZGF0YV8gPSBfX2R0Owor
ICB9CisKKyAgX0xJQkNQUF9GVU5DX1ZJUworICBlcnJvcl9jb2RlIF9fZG9fcmVmcmVzaCgpIG5v
ZXhjZXB0OworCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgc3RhdGljIGJvb2wgX19p
c19kbmVfZXJyb3IoZXJyb3JfY29kZSBjb25zdCYgX19lYykgeworICAgIGlmICghX19lYykKKyAg
ICAgIHJldHVybiB0cnVlOworICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8ZXJyYz4oX19lYy52YWx1
ZSgpKSkgeworICAgIGNhc2UgZXJyYzo6bm9fc3VjaF9maWxlX29yX2RpcmVjdG9yeToKKyAgICBj
YXNlIGVycmM6Om5vdF9hX2RpcmVjdG9yeToKKyAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1
bHQ6CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9CisKKyAgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWQorICB2b2lkIF9faGFuZGxlX2Vycm9yKGNvbnN0IGNoYXIqIF9fbXNnLCBlcnJv
cl9jb2RlKiBfX2Rlc3RfZWMsCisgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSBjb25z
dCYgX19lYywgYm9vbCBfX2FsbG93X2RuZSA9IGZhbHNlKSBjb25zdCB7CisgICAgaWYgKF9fZGVz
dF9lYykgeworICAgICAgKl9fZGVzdF9lYyA9IF9fZWM7CisgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmIChfX2VjICYmICghX19hbGxvd19kbmUgfHwgIV9faXNfZG5lX2Vycm9yKF9fZWMpKSkK
KyAgICAgIF9fdGhyb3dfZmlsZXN5c3RlbV9lcnJvcihfX21zZywgX19wXywgX19lYyk7CisgIH0K
KworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgX19yZWZyZXNoKGVycm9yX2Nv
ZGUqIF9fZWMgPSBudWxscHRyKSB7CisgICAgX19oYW5kbGVfZXJyb3IoImluIGRpcmVjdG9yeV9l
bnRyeTo6cmVmcmVzaCIsIF9fZWMsIF9fZG9fcmVmcmVzaCgpLAorICAgICAgICAgICAgICAgICAg
IC8qYWxsb3dfZG5lKi8gdHJ1ZSk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
CisgIGZpbGVfdHlwZSBfX2dldF9zeW1fZnQoZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpIGNv
bnN0IHsKKyAgICBzd2l0Y2ggKF9fZGF0YV8uX19jYWNoZV90eXBlXykgeworICAgIGNhc2UgX0Vt
cHR5OgorICAgICAgcmV0dXJuIF9fc3ltbGlua19zdGF0dXMoX19wXywgX19lYykudHlwZSgpOwor
ICAgIGNhc2UgX0l0ZXJTeW1saW5rOgorICAgIGNhc2UgX1JlZnJlc2hTeW1saW5rOgorICAgIGNh
c2UgX1JlZnJlc2hTeW1saW5rVW5yZXNvbHZlZDoKKyAgICAgIGlmIChfX2VjKQorICAgICAgICBf
X2VjLT5jbGVhcigpOworICAgICAgcmV0dXJuIGZpbGVfdHlwZTo6c3ltbGluazsKKyAgICBjYXNl
IF9JdGVyTm9uU3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoTm9uU3ltbGluazoKKyAgICAgIGZp
bGVfc3RhdHVzIF9fc3QoX19kYXRhXy5fX3R5cGVfKTsKKyAgICAgIGlmIChfX2VjICYmICFfVlNU
RF9GUzo6ZXhpc3RzKF9fc3QpKQorICAgICAgICAqX19lYyA9IG1ha2VfZXJyb3JfY29kZShlcnJj
Ojpub19zdWNoX2ZpbGVfb3JfZGlyZWN0b3J5KTsKKyAgICAgIGVsc2UgaWYgKF9fZWMpCisgICAg
ICAgIF9fZWMtPmNsZWFyKCk7CisgICAgICByZXR1cm4gX19kYXRhXy5fX3R5cGVfOworICAgIH0K
KyAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZCisgIGZpbGVfdHlwZSBfX2dldF9mdChlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cikg
Y29uc3QgeworICAgIHN3aXRjaCAoX19kYXRhXy5fX2NhY2hlX3R5cGVfKSB7CisgICAgY2FzZSBf
RW1wdHk6CisgICAgY2FzZSBfSXRlclN5bWxpbms6CisgICAgY2FzZSBfUmVmcmVzaFN5bWxpbmtV
bnJlc29sdmVkOgorICAgICAgcmV0dXJuIF9fc3RhdHVzKF9fcF8sIF9fZWMpLnR5cGUoKTsKKyAg
ICBjYXNlIF9JdGVyTm9uU3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoTm9uU3ltbGluazoKKyAg
ICBjYXNlIF9SZWZyZXNoU3ltbGluazogeworICAgICAgZmlsZV9zdGF0dXMgX19zdChfX2RhdGFf
Ll9fdHlwZV8pOworICAgICAgaWYgKF9fZWMgJiYgIV9WU1REX0ZTOjpleGlzdHMoX19zdCkpCisg
ICAgICAgICpfX2VjID0gbWFrZV9lcnJvcl9jb2RlKGVycmM6Om5vX3N1Y2hfZmlsZV9vcl9kaXJl
Y3RvcnkpOworICAgICAgZWxzZSBpZiAoX19lYykKKyAgICAgICAgX19lYy0+Y2xlYXIoKTsKKyAg
ICAgIHJldHVybiBfX2RhdGFfLl9fdHlwZV87CisgICAgfQorICAgIH0KKyAgICBfTElCQ1BQX1VO
UkVBQ0hBQkxFKCk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVf
c3RhdHVzIF9fZ2V0X3N0YXR1cyhlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cikgY29uc3Qgewor
ICAgIHN3aXRjaCAoX19kYXRhXy5fX2NhY2hlX3R5cGVfKSB7CisgICAgY2FzZSBfRW1wdHk6Cisg
ICAgY2FzZSBfSXRlck5vblN5bWxpbms6CisgICAgY2FzZSBfSXRlclN5bWxpbms6CisgICAgY2Fz
ZSBfUmVmcmVzaFN5bWxpbmtVbnJlc29sdmVkOgorICAgICAgcmV0dXJuIF9fc3RhdHVzKF9fcF8s
IF9fZWMpOworICAgIGNhc2UgX1JlZnJlc2hOb25TeW1saW5rOgorICAgIGNhc2UgX1JlZnJlc2hT
eW1saW5rOgorICAgICAgcmV0dXJuIGZpbGVfc3RhdHVzKF9fZ2V0X2Z0KF9fZWMpLCBfX2RhdGFf
Ll9fbm9uX3N5bV9wZXJtc18pOworICAgIH0KKyAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7Cisg
IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVfc3RhdHVzIF9fZ2V0X3N5
bWxpbmtfc3RhdHVzKGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKSBjb25zdCB7CisgICAgc3dp
dGNoIChfX2RhdGFfLl9fY2FjaGVfdHlwZV8pIHsKKyAgICBjYXNlIF9FbXB0eToKKyAgICBjYXNl
IF9JdGVyTm9uU3ltbGluazoKKyAgICBjYXNlIF9JdGVyU3ltbGluazoKKyAgICAgIHJldHVybiBf
X3N5bWxpbmtfc3RhdHVzKF9fcF8sIF9fZWMpOworICAgIGNhc2UgX1JlZnJlc2hOb25TeW1saW5r
OgorICAgICAgcmV0dXJuIGZpbGVfc3RhdHVzKF9fZ2V0X3N5bV9mdChfX2VjKSwgX19kYXRhXy5f
X25vbl9zeW1fcGVybXNfKTsKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGluazoKKyAgICBjYXNlIF9S
ZWZyZXNoU3ltbGlua1VucmVzb2x2ZWQ6CisgICAgICByZXR1cm4gZmlsZV9zdGF0dXMoX19nZXRf
c3ltX2Z0KF9fZWMpLCBfX2RhdGFfLl9fc3ltX3Blcm1zXyk7CisgICAgfQorICAgIF9MSUJDUFBf
VU5SRUFDSEFCTEUoKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdWlu
dG1heF90IF9fZ2V0X3NpemUoZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpIGNvbnN0IHsKKyAg
ICBzd2l0Y2ggKF9fZGF0YV8uX19jYWNoZV90eXBlXykgeworICAgIGNhc2UgX0VtcHR5OgorICAg
IGNhc2UgX0l0ZXJOb25TeW1saW5rOgorICAgIGNhc2UgX0l0ZXJTeW1saW5rOgorICAgIGNhc2Ug
X1JlZnJlc2hTeW1saW5rVW5yZXNvbHZlZDoKKyAgICAgIHJldHVybiBfVlNURF9GUzo6X19maWxl
X3NpemUoX19wXywgX19lYyk7CisgICAgY2FzZSBfUmVmcmVzaFN5bWxpbms6CisgICAgY2FzZSBf
UmVmcmVzaE5vblN5bWxpbms6IHsKKyAgICAgIGVycm9yX2NvZGUgX19tX2VjOworICAgICAgZmls
ZV9zdGF0dXMgX19zdChfX2dldF9mdCgmX19tX2VjKSk7CisgICAgICBfX2hhbmRsZV9lcnJvcigi
aW4gZGlyZWN0b3J5X2VudHJ5OjpmaWxlX3NpemUiLCBfX2VjLCBfX21fZWMpOworICAgICAgaWYg
KF9WU1REX0ZTOjpleGlzdHMoX19zdCkgJiYgIV9WU1REX0ZTOjppc19yZWd1bGFyX2ZpbGUoX19z
dCkpIHsKKyAgICAgICAgZXJyYyBfX2Vycl9raW5kID0gX1ZTVERfRlM6OmlzX2RpcmVjdG9yeShf
X3N0KSA/IGVycmM6OmlzX2FfZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlcnJjOjpub3Rfc3VwcG9ydGVkOworICAgICAg
ICBfX2hhbmRsZV9lcnJvcigiaW4gZGlyZWN0b3J5X2VudHJ5OjpmaWxlX3NpemUiLCBfX2VjLAor
ICAgICAgICAgICAgICAgICAgICAgICBtYWtlX2Vycm9yX2NvZGUoX19lcnJfa2luZCkpOworICAg
ICAgfQorICAgICAgcmV0dXJuIF9fZGF0YV8uX19zaXplXzsKKyAgICB9CisgICAgfQorICAgIF9M
SUJDUFBfVU5SRUFDSEFCTEUoKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
KyAgdWludG1heF90IF9fZ2V0X25saW5rKGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKSBjb25z
dCB7CisgICAgc3dpdGNoIChfX2RhdGFfLl9fY2FjaGVfdHlwZV8pIHsKKyAgICBjYXNlIF9FbXB0
eToKKyAgICBjYXNlIF9JdGVyTm9uU3ltbGluazoKKyAgICBjYXNlIF9JdGVyU3ltbGluazoKKyAg
ICBjYXNlIF9SZWZyZXNoU3ltbGlua1VucmVzb2x2ZWQ6CisgICAgICByZXR1cm4gX1ZTVERfRlM6
Ol9faGFyZF9saW5rX2NvdW50KF9fcF8sIF9fZWMpOworICAgIGNhc2UgX1JlZnJlc2hTeW1saW5r
OgorICAgIGNhc2UgX1JlZnJlc2hOb25TeW1saW5rOiB7CisgICAgICBlcnJvcl9jb2RlIF9fbV9l
YzsKKyAgICAgICh2b2lkKV9fZ2V0X2Z0KCZfX21fZWMpOworICAgICAgX19oYW5kbGVfZXJyb3Io
ImluIGRpcmVjdG9yeV9lbnRyeTo6aGFyZF9saW5rX2NvdW50IiwgX19lYywgX19tX2VjKTsKKyAg
ICAgIHJldHVybiBfX2RhdGFfLl9fbmxpbmtfOworICAgIH0KKyAgICB9CisgICAgX0xJQkNQUF9V
TlJFQUNIQUJMRSgpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBmaWxl
X3RpbWVfdHlwZSBfX2dldF93cml0ZV90aW1lKGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKSBj
b25zdCB7CisgICAgc3dpdGNoIChfX2RhdGFfLl9fY2FjaGVfdHlwZV8pIHsKKyAgICBjYXNlIF9F
bXB0eToKKyAgICBjYXNlIF9JdGVyTm9uU3ltbGluazoKKyAgICBjYXNlIF9JdGVyU3ltbGluazoK
KyAgICBjYXNlIF9SZWZyZXNoU3ltbGlua1VucmVzb2x2ZWQ6CisgICAgICByZXR1cm4gX1ZTVERf
RlM6Ol9fbGFzdF93cml0ZV90aW1lKF9fcF8sIF9fZWMpOworICAgIGNhc2UgX1JlZnJlc2hTeW1s
aW5rOgorICAgIGNhc2UgX1JlZnJlc2hOb25TeW1saW5rOiB7CisgICAgICBlcnJvcl9jb2RlIF9f
bV9lYzsKKyAgICAgIGZpbGVfc3RhdHVzIF9fc3QoX19nZXRfZnQoJl9fbV9lYykpOworICAgICAg
X19oYW5kbGVfZXJyb3IoImluIGRpcmVjdG9yeV9lbnRyeTo6bGFzdF93cml0ZV90aW1lIiwgX19l
YywgX19tX2VjKTsKKyAgICAgIGlmIChfVlNURF9GUzo6ZXhpc3RzKF9fc3QpICYmCisgICAgICAg
ICAgX19kYXRhXy5fX3dyaXRlX3RpbWVfID09IGZpbGVfdGltZV90eXBlOjptaW4oKSkKKyAgICAg
ICAgX19oYW5kbGVfZXJyb3IoImluIGRpcmVjdG9yeV9lbnRyeTo6bGFzdF93cml0ZV90aW1lIiwg
X19lYywKKyAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9lcnJvcl9jb2RlKGVycmM6OnZhbHVl
X3Rvb19sYXJnZSkpOworICAgICAgcmV0dXJuIF9fZGF0YV8uX193cml0ZV90aW1lXzsKKyAgICB9
CisgICAgfQorICAgIF9MSUJDUFBfVU5SRUFDSEFCTEUoKTsKKyAgfQorCitwcml2YXRlOgorICBf
UGF0aCBfX3BfOworICBfX2NhY2hlZF9kYXRhIF9fZGF0YV87Cit9OworCitjbGFzcyBfX2Rpcl9l
bGVtZW50X3Byb3h5IHsKK3B1YmxpYzoKKyAgaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkgZGlyZWN0b3J5X2VudHJ5IG9wZXJhdG9yKigpIHsKKyAgICByZXR1cm4gX1ZTVEQ6Om1vdmUo
X19lbGVtXyk7CisgIH0KKworcHJpdmF0ZToKKyAgZnJpZW5kIGNsYXNzIGRpcmVjdG9yeV9pdGVy
YXRvcjsKKyAgZnJpZW5kIGNsYXNzIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I7CisgIGV4
cGxpY2l0IF9fZGlyX2VsZW1lbnRfcHJveHkoZGlyZWN0b3J5X2VudHJ5IGNvbnN0JiBfX2UpIDog
X19lbGVtXyhfX2UpIHt9CisgIF9fZGlyX2VsZW1lbnRfcHJveHkoX19kaXJfZWxlbWVudF9wcm94
eSYmIF9fbykKKyAgICAgIDogX19lbGVtXyhfVlNURDo6bW92ZShfX28uX19lbGVtXykpIHt9Cisg
IGRpcmVjdG9yeV9lbnRyeSBfX2VsZW1fOworfTsKKworY2xhc3MgZGlyZWN0b3J5X2l0ZXJhdG9y
IHsKK3B1YmxpYzoKKyAgdHlwZWRlZiBkaXJlY3RvcnlfZW50cnkgdmFsdWVfdHlwZTsKKyAgdHlw
ZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOworICB0eXBlZGVmIHZhbHVlX3R5cGUgY29u
c3QqIHBvaW50ZXI7CisgIHR5cGVkZWYgdmFsdWVfdHlwZSBjb25zdCYgcmVmZXJlbmNlOworICB0
eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKKworcHVibGljOgor
ICAvL2N0b3IgJiBkdG9yCisgIGRpcmVjdG9yeV9pdGVyYXRvcigpIG5vZXhjZXB0IHt9CisKKyAg
ZXhwbGljaXQgZGlyZWN0b3J5X2l0ZXJhdG9yKGNvbnN0IHBhdGgmIF9fcCkKKyAgICAgIDogZGly
ZWN0b3J5X2l0ZXJhdG9yKF9fcCwgbnVsbHB0cikge30KKworICBkaXJlY3RvcnlfaXRlcmF0b3Io
Y29uc3QgcGF0aCYgX19wLCBkaXJlY3Rvcnlfb3B0aW9ucyBfX29wdHMpCisgICAgICA6IGRpcmVj
dG9yeV9pdGVyYXRvcihfX3AsIG51bGxwdHIsIF9fb3B0cykge30KKworICBkaXJlY3RvcnlfaXRl
cmF0b3IoY29uc3QgcGF0aCYgX19wLCBlcnJvcl9jb2RlJiBfX2VjKQorICAgICAgOiBkaXJlY3Rv
cnlfaXRlcmF0b3IoX19wLCAmX19lYykge30KKworICBkaXJlY3RvcnlfaXRlcmF0b3IoY29uc3Qg
cGF0aCYgX19wLCBkaXJlY3Rvcnlfb3B0aW9ucyBfX29wdHMsCisgICAgICAgICAgICAgICAgICAg
ICBlcnJvcl9jb2RlJiBfX2VjKQorICAgICAgOiBkaXJlY3RvcnlfaXRlcmF0b3IoX19wLCAmX19l
YywgX19vcHRzKSB7fQorCisgIGRpcmVjdG9yeV9pdGVyYXRvcihjb25zdCBkaXJlY3RvcnlfaXRl
cmF0b3ImKSA9IGRlZmF1bHQ7CisgIGRpcmVjdG9yeV9pdGVyYXRvcihkaXJlY3RvcnlfaXRlcmF0
b3ImJikgPSBkZWZhdWx0OworICBkaXJlY3RvcnlfaXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBk
aXJlY3RvcnlfaXRlcmF0b3ImKSA9IGRlZmF1bHQ7CisKKyAgZGlyZWN0b3J5X2l0ZXJhdG9yJiBv
cGVyYXRvcj0oZGlyZWN0b3J5X2l0ZXJhdG9yJiYgX19vKSBub2V4Y2VwdCB7CisgICAgLy8gbm9u
LWRlZmF1bHQgaW1wbGVtZW50YXRpb24gcHJvdmlkZWQgdG8gc3VwcG9ydCBzZWxmLW1vdmUgYXNz
aWduLgorICAgIGlmICh0aGlzICE9ICZfX28pIHsKKyAgICAgIF9faW1wXyA9IF9WU1REOjptb3Zl
KF9fby5fX2ltcF8pOworICAgIH0KKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICB+ZGlyZWN0
b3J5X2l0ZXJhdG9yKCkgPSBkZWZhdWx0OworCisgIGNvbnN0IGRpcmVjdG9yeV9lbnRyeSYgb3Bl
cmF0b3IqKCkgY29uc3QgeworICAgIF9MSUJDUFBfQVNTRVJUKF9faW1wXywgIlRoZSBlbmQgaXRl
cmF0b3IgY2Fubm90IGJlIGRlcmVmZXJlbmNlZCIpOworICAgIHJldHVybiBfX2RlcmVmZXJlbmNl
KCk7CisgIH0KKworICBjb25zdCBkaXJlY3RvcnlfZW50cnkqIG9wZXJhdG9yLT4oKSBjb25zdCB7
IHJldHVybiAmKip0aGlzOyB9CisKKyAgZGlyZWN0b3J5X2l0ZXJhdG9yJiBvcGVyYXRvcisrKCkg
eyByZXR1cm4gX19pbmNyZW1lbnQoKTsgfQorCisgIF9fZGlyX2VsZW1lbnRfcHJveHkgb3BlcmF0
b3IrKyhpbnQpIHsKKyAgICBfX2Rpcl9lbGVtZW50X3Byb3h5IF9fcCgqKnRoaXMpOworICAgIF9f
aW5jcmVtZW50KCk7CisgICAgcmV0dXJuIF9fcDsKKyAgfQorCisgIGRpcmVjdG9yeV9pdGVyYXRv
ciYgaW5jcmVtZW50KGVycm9yX2NvZGUmIF9fZWMpIHsgcmV0dXJuIF9faW5jcmVtZW50KCZfX2Vj
KTsgfQorCitwcml2YXRlOgorICBpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBmcmll
bmQgYm9vbAorICBvcGVyYXRvcj09KGNvbnN0IGRpcmVjdG9yeV9pdGVyYXRvciYgX19saHMsCisg
ICAgICAgICAgICAgY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9yJiBfX3Jocykgbm9leGNlcHQ7CisK
KyAgLy8gY29uc3RydWN0IHRoZSBkaXJfc3RyZWFtCisgIF9MSUJDUFBfRlVOQ19WSVMKKyAgZGly
ZWN0b3J5X2l0ZXJhdG9yKGNvbnN0IHBhdGgmLCBlcnJvcl9jb2RlKiwKKyAgICAgICAgICAgICAg
ICAgICAgIGRpcmVjdG9yeV9vcHRpb25zID0gZGlyZWN0b3J5X29wdGlvbnM6Om5vbmUpOworCisg
IF9MSUJDUFBfRlVOQ19WSVMKKyAgZGlyZWN0b3J5X2l0ZXJhdG9yJiBfX2luY3JlbWVudChlcnJv
cl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CisKKyAgX0xJQkNQUF9GVU5DX1ZJUworICBjb25zdCBk
aXJlY3RvcnlfZW50cnkmIF9fZGVyZWZlcmVuY2UoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgc2hh
cmVkX3B0cjxfX2Rpcl9zdHJlYW0+IF9faW1wXzsKK307CisKK2lubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIGJvb2wKK29wZXJhdG9yPT0oY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9yJiBf
X2xocywKKyAgICAgICAgICAgY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9yJiBfX3Jocykgbm9leGNl
cHQgeworICByZXR1cm4gX19saHMuX19pbXBfID09IF9fcmhzLl9faW1wXzsKK30KKworaW5saW5l
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbAorb3BlcmF0b3IhPShjb25zdCBkaXJlY3Rv
cnlfaXRlcmF0b3ImIF9fbGhzLAorICAgICAgICAgICBjb25zdCBkaXJlY3RvcnlfaXRlcmF0b3Im
IF9fcmhzKSBub2V4Y2VwdCB7CisgIHJldHVybiAhKF9fbGhzID09IF9fcmhzKTsKK30KKworLy8g
ZW5hYmxlIGRpcmVjdG9yeV9pdGVyYXRvciByYW5nZS1iYXNlZCBmb3Igc3RhdGVtZW50cworaW5s
aW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgZGlyZWN0b3J5X2l0ZXJhdG9yCitiZWdpbihk
aXJlY3RvcnlfaXRlcmF0b3IgX19pdGVyKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX2l0ZXI7Cit9
CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGRpcmVjdG9yeV9pdGVyYXRvcgor
ZW5kKGNvbnN0IGRpcmVjdG9yeV9pdGVyYXRvciYpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIGRpcmVj
dG9yeV9pdGVyYXRvcigpOworfQorCitjbGFzcyByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9y
IHsKK3B1YmxpYzoKKyAgdXNpbmcgdmFsdWVfdHlwZSA9IGRpcmVjdG9yeV9lbnRyeTsKKyAgdXNp
bmcgZGlmZmVyZW5jZV90eXBlID0gc3RkOjpwdHJkaWZmX3Q7CisgIHVzaW5nIHBvaW50ZXIgPSBk
aXJlY3RvcnlfZW50cnkgY29uc3QqOworICB1c2luZyByZWZlcmVuY2UgPSBkaXJlY3RvcnlfZW50
cnkgY29uc3QmOworICB1c2luZyBpdGVyYXRvcl9jYXRlZ29yeSA9IHN0ZDo6aW5wdXRfaXRlcmF0
b3JfdGFnOworCitwdWJsaWM6CisgIC8vIGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcgorICBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3Io
KSBub2V4Y2VwdCA6IF9fcmVjXyhmYWxzZSkge30KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZCisgIGV4cGxpY2l0IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IoCisgICAgICBjb25z
dCBwYXRoJiBfX3AsIGRpcmVjdG9yeV9vcHRpb25zIF9feG9wdGlvbnMgPSBkaXJlY3Rvcnlfb3B0
aW9uczo6bm9uZSkKKyAgICAgIDogcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcihfX3AsIF9f
eG9wdGlvbnMsIG51bGxwdHIpIHt9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBy
ZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yKGNvbnN0IHBhdGgmIF9fcCwgZGlyZWN0b3J5X29w
dGlvbnMgX194b3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9j
b2RlJiBfX2VjKQorICAgICAgOiByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yKF9fcCwgX194
b3B0aW9ucywgJl9fZWMpIHt9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICByZWN1
cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yKGNvbnN0IHBhdGgmIF9fcCwgZXJyb3JfY29kZSYgX19l
YykKKyAgICAgIDogcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcihfX3AsIGRpcmVjdG9yeV9v
cHRpb25zOjpub25lLCAmX19lYykge30KKworICByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9y
KGNvbnN0IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3ImKSA9IGRlZmF1bHQ7CisgIHJlY3Vy
c2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IocmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYmKSA9
IGRlZmF1bHQ7CisKKyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYKKyAgb3BlcmF0b3I9
KGNvbnN0IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3ImKSA9IGRlZmF1bHQ7CisKKyAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQorICByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yJgor
ICBvcGVyYXRvcj0ocmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYmIF9fbykgbm9leGNlcHQg
eworICAgIC8vIG5vbi1kZWZhdWx0IGltcGxlbWVudGF0aW9uIHByb3ZpZGVkIHRvIHN1cHBvcnQg
c2VsZi1tb3ZlIGFzc2lnbi4KKyAgICBpZiAodGhpcyAhPSAmX19vKSB7CisgICAgICBfX2ltcF8g
PSBfVlNURDo6bW92ZShfX28uX19pbXBfKTsKKyAgICAgIF9fcmVjXyA9IF9fby5fX3JlY187Cisg
ICAgfQorICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIH5yZWN1cnNpdmVfZGlyZWN0b3J5X2l0
ZXJhdG9yKCkgPSBkZWZhdWx0OworCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgY29u
c3QgZGlyZWN0b3J5X2VudHJ5JiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBfX2RlcmVmZXJl
bmNlKCk7IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGNvbnN0IGRpcmVjdG9y
eV9lbnRyeSogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICZfX2RlcmVmZXJlbmNlKCk7IH0K
KworICByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yJiBvcGVyYXRvcisrKCkgeyByZXR1cm4g
X19pbmNyZW1lbnQoKTsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgX19kaXJf
ZWxlbWVudF9wcm94eSBvcGVyYXRvcisrKGludCkgeworICAgIF9fZGlyX2VsZW1lbnRfcHJveHkg
X19wKCoqdGhpcyk7CisgICAgX19pbmNyZW1lbnQoKTsKKyAgICByZXR1cm4gX19wOworICB9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJh
dG9yJiBpbmNyZW1lbnQoZXJyb3JfY29kZSYgX19lYykgeworICAgIHJldHVybiBfX2luY3JlbWVu
dCgmX19lYyk7CisgIH0KKworICBfTElCQ1BQX0ZVTkNfVklTIGRpcmVjdG9yeV9vcHRpb25zIG9w
dGlvbnMoKSBjb25zdDsKKyAgX0xJQkNQUF9GVU5DX1ZJUyBpbnQgZGVwdGgoKSBjb25zdDsKKwor
ICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgcG9wKCkgeyBfX3BvcCgpOyB9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB2b2lkIHBvcChlcnJvcl9jb2RlJiBfX2Vj
KSB7IF9fcG9wKCZfX2VjKTsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9v
bCByZWN1cnNpb25fcGVuZGluZygpIGNvbnN0IHsgcmV0dXJuIF9fcmVjXzsgfQorCisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdm9pZCBkaXNhYmxlX3JlY3Vyc2lvbl9wZW5kaW5nKCkg
eyBfX3JlY18gPSBmYWxzZTsgfQorCitwcml2YXRlOgorICByZWN1cnNpdmVfZGlyZWN0b3J5X2l0
ZXJhdG9yKGNvbnN0IHBhdGgmIF9fcCwgZGlyZWN0b3J5X29wdGlvbnMgX19vcHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSogX19lYyk7CisKKyAgX0xJQkNQUF9G
VU5DX1ZJUworICBjb25zdCBkaXJlY3RvcnlfZW50cnkmIF9fZGVyZWZlcmVuY2UoKSBjb25zdDsK
KworICBfTElCQ1BQX0ZVTkNfVklTCisgIGJvb2wgX190cnlfcmVjdXJzaW9uKGVycm9yX2NvZGUq
IF9fZWMpOworCisgIF9MSUJDUFBfRlVOQ19WSVMKKyAgdm9pZCBfX2FkdmFuY2UoZXJyb3JfY29k
ZSogX19lYyA9IG51bGxwdHIpOworCisgIF9MSUJDUFBfRlVOQ19WSVMKKyAgcmVjdXJzaXZlX2Rp
cmVjdG9yeV9pdGVyYXRvciYgX19pbmNyZW1lbnQoZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIp
OworCisgIF9MSUJDUFBfRlVOQ19WSVMKKyAgdm9pZCBfX3BvcChlcnJvcl9jb2RlKiBfX2VjID0g
bnVsbHB0cik7CisKKyAgaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgZnJpZW5kIGJv
b2wKKyAgb3BlcmF0b3I9PShjb25zdCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yJiwKKyAg
ICAgICAgICAgICBjb25zdCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yJikgbm9leGNlcHQ7
CisKKyAgc3RydWN0IF9fc2hhcmVkX2ltcDsKKyAgc2hhcmVkX3B0cjxfX3NoYXJlZF9pbXA+IF9f
aW1wXzsKKyAgYm9vbCBfX3JlY187Cit9OyAvLyBjbGFzcyByZWN1cnNpdmVfZGlyZWN0b3J5X2l0
ZXJhdG9yCisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wKK29wZXJhdG9y
PT0oY29uc3QgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYgX19saHMsCisgICAgICAgICAg
IGNvbnN0IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3ImIF9fcmhzKSBub2V4Y2VwdCB7Cisg
IHJldHVybiBfX2xocy5fX2ltcF8gPT0gX19yaHMuX19pbXBfOworfQorCitfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHJlY3Vyc2l2ZV9kaXJl
Y3RvcnlfaXRlcmF0b3ImIF9fbGhzLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWN1
cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yJiBfX3Jocykgbm9leGNlcHQgeworICByZXR1cm4gIShf
X2xocyA9PSBfX3Jocyk7Cit9CisvLyBlbmFibGUgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRv
ciByYW5nZS1iYXNlZCBmb3Igc3RhdGVtZW50cworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcgorYmVnaW4ocmVjdXJzaXZlX2RpcmVj
dG9yeV9pdGVyYXRvciBfX2l0ZXIpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9faXRlcjsKK30KKwor
aW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVy
YXRvcgorZW5kKGNvbnN0IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3ImKSBub2V4Y2VwdCB7
CisgIHJldHVybiByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yKCk7Cit9CisKK19MSUJDUFBf
RU5EX05BTUVTUEFDRV9GSUxFU1lTVEVNCisKKyNlbmRpZiAvLyAhX0xJQkNQUF9DWFgwM19MQU5H
CisKK19MSUJDUFBfUE9QX01BQ1JPUworCisjZW5kaWYgLy8gX0xJQkNQUF9GSUxFU1lTVEVNCisj
ZW5kaWYKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaAkocmV2
aXNpb24gMjY3OTQ4KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPFdlYktpdC9XS1N0
cmluZ1ByaXZhdGUuaD4KICNpbmNsdWRlIDxzc3RyZWFtPgogI2luY2x1ZGUgPHN0cmluZz4KKyNp
bmNsdWRlIDx2ZWN0b3I+CiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVBcnJheS5oPgpAQCAtNTksNiAr
NjAsMTEgQEAgaW5saW5lIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dLKGNvbgogICAgIHJl
dHVybiBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0cmluZykpOwogfQog
CitpbmxpbmUgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvV0soY29uc3Qgc3RkOjpzdHJpbmcm
IHN0cmluZykKK3sKKyAgICByZXR1cm4gdG9XSyhzdHJpbmcuY19zdHIoKSk7Cit9CisKIGlubGlu
ZSBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9XSyhjb25zdCBXVEY6OlN0cmluZyYgc3RyaW5n
KQogewogICAgIHJldHVybiB0b1dLKHN0cmluZy51dGY4KCkuZGF0YSgpKTsKQEAgLTExNCw2ICsx
MjAsMTEgQEAgaW5saW5lIFdURjo6U3RyaW5nIHRvV1RGU3RyaW5nKGNvbnN0IEpTUgogICAgIHJl
dHVybiB0b1dURlN0cmluZyhzdHJpbmcuZ2V0KCkpOwogfQogCitpbmxpbmUgV1RGOjpTdHJpbmcg
dG9XVEZTdHJpbmcoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cmluZykKK3sKKyAgICByZXR1cm4gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KHN0cmluZy5jX3N0cigpKTsKK30KKwogaW5saW5lIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiB0b1dLU3RyaW5nKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVl
UmVmIHZhbHVlKQogewogICAgIHJldHVybiB0b1dLKGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIHZh
bHVlKS5nZXQoKSk7CkBAIC0xMjUsNCArMTM2LDI0IEBAIGlubGluZSBXVEY6OlN0cmluZyB0b1dU
RlN0cmluZyhKU0NvbnRleHQKICAgICByZXR1cm4gdG9XVEZTdHJpbmcoY3JlYXRlSlNTdHJpbmco
Y29udGV4dCwgdmFsdWUpKTsKIH0KIAoraW5saW5lIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBz
cGxpdChjb25zdCBzdGQ6OnN0cmluZyYgc3RyaW5nLCBjaGFyIGRlbGltaXRlcikKK3sKKyAgICBz
dGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcmVzdWx0OworCisgICAgc2l6ZV90IGkgPSAwOworICAg
IHdoaWxlIChpIDwgc3RyaW5nLnNpemUoKSkgeworICAgICAgICBhdXRvIGZvdW5kSW5kZXggPSBz
dHJpbmcuZmluZF9maXJzdF9vZihkZWxpbWl0ZXIsIGkpOworCisgICAgICAgIGlmIChmb3VuZElu
ZGV4ICE9IGkpCisgICAgICAgICAgICByZXN1bHQucHVzaF9iYWNrKHN0cmluZy5zdWJzdHIoaSwg
Zm91bmRJbmRleCAtIGkpKTsKKworICAgICAgICBpZiAoZm91bmRJbmRleCA9PSBzdGQ6OnN0cmlu
Z192aWV3OjpucG9zKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaSA9IGZvdW5kSW5k
ZXggKyAxOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdUUgpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHJl
dmlzaW9uIDI2Nzk0OCkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjksMTUgKzQ2OSwxNyBAQCB2b2lkIFRlc3RDb250cm9s
bGVyOjppbml0aWFsaXplKGludCBhcmdjCiAgICAgbV9zaG91bGREdW1wUGl4ZWxzRm9yQWxsVGVz
dHMgPSBvcHRpb25zLnNob3VsZER1bXBQaXhlbHNGb3JBbGxUZXN0czsKICAgICBtX2ZvcmNlQ29t
cGxleFRleHQgPSBvcHRpb25zLmZvcmNlQ29tcGxleFRleHQ7CiAgICAgbV9zaG91bGRVc2VBY2Nl
bGVyYXRlZERyYXdpbmcgPSBvcHRpb25zLnNob3VsZFVzZUFjY2VsZXJhdGVkRHJhd2luZzsKLSAg
ICBtX3Nob3VsZFVzZVJlbW90ZUxheWVyVHJlZSA9IG9wdGlvbnMuc2hvdWxkVXNlUmVtb3RlTGF5
ZXJUcmVlOwogICAgIG1fcGF0aHMgPSBvcHRpb25zLnBhdGhzOwogICAgIG1fYWxsb3dlZEhvc3Rz
ID0gb3B0aW9ucy5hbGxvd2VkSG9zdHM7Ci0gICAgbV9zaG91bGRTaG93V2ViVmlldyA9IG9wdGlv
bnMuc2hvdWxkU2hvd1dlYlZpZXc7Ci0gICAgbV9zaG91bGRTaG93VG91Y2hlcyA9IG9wdGlvbnMu
c2hvdWxkU2hvd1RvdWNoZXM7CiAgICAgbV9jaGVja0ZvcldvcmxkTGVha3MgPSBvcHRpb25zLmNo
ZWNrRm9yV29ybGRMZWFrczsKICAgICBtX2FsbG93QW55SFRUUFNDZXJ0aWZpY2F0ZUZvckFsbG93
ZWRIb3N0cyA9IG9wdGlvbnMuYWxsb3dBbnlIVFRQU0NlcnRpZmljYXRlRm9yQWxsb3dlZEhvc3Rz
OwotICAgIG1faW50ZXJuYWxGZWF0dXJlcyA9IG9wdGlvbnMuaW50ZXJuYWxGZWF0dXJlczsKLSAg
ICBtX2V4cGVyaW1lbnRhbEZlYXR1cmVzID0gb3B0aW9ucy5leHBlcmltZW50YWxGZWF0dXJlczsK
KyAgICAKKyAgICBtX2dsb2JhbEZlYXR1cmVzLmludGVybmFsRGVidWdGZWF0dXJlcyA9IG9wdGlv
bnMuaW50ZXJuYWxGZWF0dXJlczsKKyAgICBtX2dsb2JhbEZlYXR1cmVzLmV4cGVyaW1lbnRhbEZl
YXR1cmVzID0gb3B0aW9ucy5leHBlcmltZW50YWxGZWF0dXJlczsKKyAgICBtX2dsb2JhbEZlYXR1
cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAidXNlUmVtb3RlTGF5ZXJUcmVlIiwgb3B0aW9ucy5z
aG91bGRVc2VSZW1vdGVMYXllclRyZWUgfSk7CisgICAgbV9nbG9iYWxGZWF0dXJlcy5ib29sRmVh
dHVyZXMuaW5zZXJ0KHsgInNob3VsZFNob3dXZWJWaWV3Iiwgb3B0aW9ucy5zaG91bGRTaG93V2Vi
VmlldyB9KTsKKyAgICBtX2dsb2JhbEZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAic2hv
dWxkU2hvd1RvdWNoZXMiLCBvcHRpb25zLnNob3VsZFNob3dUb3VjaGVzIH0pOworCiAjaWYgRU5B
QkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKICAgICBtX2FjY2Vzc2liaWxpdHlJc29s
YXRlZFRyZWVNb2RlID0gb3B0aW9ucy5hY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlTW9kZTsKICNl
bmRpZgpAQCAtNDk5LDcgKzUwMSw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemUo
aW50IGFyZ2MKICAgICBtX2V2ZW50U2VuZGVyUHJveHkgPSBtYWtlVW5pcXVlPEV2ZW50U2VuZGVy
UHJveHk+KHRoaXMpOwogfQogCi1XS1JldGFpblB0cjxXS0NvbnRleHRDb25maWd1cmF0aW9uUmVm
PiBUZXN0Q29udHJvbGxlcjo6Z2VuZXJhdGVDb250ZXh0Q29uZmlndXJhdGlvbihjb25zdCBUZXN0
T3B0aW9uczo6Q29udGV4dE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0CitXS1JldGFpblB0cjxXS0Nv
bnRleHRDb25maWd1cmF0aW9uUmVmPiBUZXN0Q29udHJvbGxlcjo6Z2VuZXJhdGVDb250ZXh0Q29u
ZmlndXJhdGlvbihjb25zdCBDb250ZXh0T3B0aW9ucyYgb3B0aW9ucykgY29uc3QKIHsKICAgICBh
dXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdFdLKFdLQ29udGV4dENvbmZpZ3VyYXRpb25DcmVhdGUo
KSk7CiAgICAgV0tDb250ZXh0Q29uZmlndXJhdGlvblNldEluamVjdGVkQnVuZGxlUGF0aChjb25m
aWd1cmF0aW9uLmdldCgpLCBpbmplY3RlZEJ1bmRsZVBhdGgoKSk7CkBAIC01NjIsMTAgKzU2NCwx
MSBAQCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgVGVzdENvbnRyb2xsZXI6OndlCiAKIFdLUmV0YWlu
UHRyPFdLUGFnZUNvbmZpZ3VyYXRpb25SZWY+IFRlc3RDb250cm9sbGVyOjpnZW5lcmF0ZVBhZ2VD
b25maWd1cmF0aW9uKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmICghbV9j
b250ZXh0IHx8ICFtX2NvbnRleHRPcHRpb25zLT5oYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25z
KG9wdGlvbnMuY29udGV4dE9wdGlvbnMpKSB7Ci0gICAgICAgIGF1dG8gY29udGV4dENvbmZpZ3Vy
YXRpb24gPSBnZW5lcmF0ZUNvbnRleHRDb25maWd1cmF0aW9uKG9wdGlvbnMuY29udGV4dE9wdGlv
bnMpOworICAgIGF1dG8gY29udGV4dE9wdGlvbnMgPSBvcHRpb25zLmNvbnRleHRPcHRpb25zKCk7
CisgICAgaWYgKCFtX2NvbnRleHQgfHwgIW1fY29udGV4dE9wdGlvbnMtPmhhc1NhbWVJbml0aWFs
aXphdGlvbk9wdGlvbnMoY29udGV4dE9wdGlvbnMpKSB7CisgICAgICAgIGF1dG8gY29udGV4dENv
bmZpZ3VyYXRpb24gPSBnZW5lcmF0ZUNvbnRleHRDb25maWd1cmF0aW9uKGNvbnRleHRPcHRpb25z
KTsKICAgICAgICAgbV9jb250ZXh0ID0gcGxhdGZvcm1BZGp1c3RDb250ZXh0KGFkb3B0V0soV0tD
b250ZXh0Q3JlYXRlV2l0aENvbmZpZ3VyYXRpb24oY29udGV4dENvbmZpZ3VyYXRpb24uZ2V0KCkp
KS5nZXQoKSwgY29udGV4dENvbmZpZ3VyYXRpb24uZ2V0KCkpOwotICAgICAgICBtX2NvbnRleHRP
cHRpb25zID0gb3B0aW9ucy5jb250ZXh0T3B0aW9uczsKKyAgICAgICAgbV9jb250ZXh0T3B0aW9u
cyA9IGNvbnRleHRPcHRpb25zOwogCiAgICAgICAgIG1fZ2VvbG9jYXRpb25Qcm92aWRlciA9IG1h
a2VVbmlxdWU8R2VvbG9jYXRpb25Qcm92aWRlck1vY2s+KG1fY29udGV4dC5nZXQoKSk7CiAKQEAg
LTYyNyw3ICs2MzAsNyBAQCBXS1JldGFpblB0cjxXS1BhZ2VDb25maWd1cmF0aW9uUmVmPiBUZXN0
CiAgICAgV0tQYWdlQ29uZmlndXJhdGlvblNldENvbnRleHQocGFnZUNvbmZpZ3VyYXRpb24uZ2V0
KCksIG1fY29udGV4dC5nZXQoKSk7CiAgICAgV0tQYWdlQ29uZmlndXJhdGlvblNldFBhZ2VHcm91
cChwYWdlQ29uZmlndXJhdGlvbi5nZXQoKSwgbV9wYWdlR3JvdXAuZ2V0KCkpOwogICAgIAotICAg
IGlmIChvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24pIHsKKyAgICBpZiAob3B0aW9ucy51c2VF
cGhlbWVyYWxTZXNzaW9uKCkpIHsKICAgICAgICAgYXV0byBlcGhlbWVyYWxEYXRhU3RvcmUgPSBh
ZG9wdFdLKFdLV2Vic2l0ZURhdGFTdG9yZUNyZWF0ZU5vblBlcnNpc3RlbnREYXRhU3RvcmUoKSk7
CiAgICAgICAgIFdLUGFnZUNvbmZpZ3VyYXRpb25TZXRXZWJzaXRlRGF0YVN0b3JlKHBhZ2VDb25m
aWd1cmF0aW9uLmdldCgpLCBlcGhlbWVyYWxEYXRhU3RvcmUuZ2V0KCkpOwogICAgIH0KQEAgLTYz
OSwxMSArNjQyLDEyIEBAIFdLUmV0YWluUHRyPFdLUGFnZUNvbmZpZ3VyYXRpb25SZWY+IFRlc3QK
IAogdm9pZCBUZXN0Q29udHJvbGxlcjo6Y3JlYXRlV2ViVmlld1dpdGhPcHRpb25zKGNvbnN0IFRl
c3RPcHRpb25zJiBvcHRpb25zKQogeworICAgIGF1dG8gYXBwbGljYXRpb25CdW5kbGVJZGVudGlm
aWVyID0gb3B0aW9ucy5hcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoKTsKICNpZiBQTEFURk9S
TShDT0NPQSkKLSAgICBpZiAoIW9wdGlvbnMuYXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyLmlz
RW1wdHkoKSkgeworICAgIGlmICghYXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyLmVtcHR5KCkp
IHsKICAgICAgICAgLy8gVGhlIGJ1bmRsZSBpZGVudGlmaWVyIGNhbiBvbmx5IGJlIHNldCBvbmNl
IHBlciB0ZXN0LCBhbmQgaXMgY2xlYXJlZCBiZXR3ZWVuIHRlc3RzLgogICAgICAgICBSRUxFQVNF
X0FTU0VSVCghbV9oYXNTZXRBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIpOwotICAgICAgICBz
ZXRBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIob3B0aW9ucy5hcHBsaWNhdGlvbkJ1bmRsZUlk
ZW50aWZpZXIpOworICAgICAgICBzZXRBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoYXBwbGlj
YXRpb25CdW5kbGVJZGVudGlmaWVyKTsKICAgICAgICAgbV9oYXNTZXRBcHBsaWNhdGlvbkJ1bmRs
ZUlkZW50aWZpZXIgPSB0cnVlOwogICAgIH0KICNlbmRpZgpAQCAtNjg2LDcgKzY5MCw3IEBAIHZv
aWQgVGVzdENvbnRyb2xsZXI6OmNyZWF0ZVdlYlZpZXdXaXRoT3AKICAgICAgICAgMCwgLy8gZGlk
RHJhdwogICAgICAgICAwLCAvLyBwYWdlRGlkU2Nyb2xsCiAgICAgICAgIDAsIC8vIGV4Y2VlZGVk
RGF0YWJhc2VRdW90YSwKLSAgICAgICAgb3B0aW9ucy5zaG91bGRIYW5kbGVSdW5PcGVuUGFuZWwg
PyBydW5PcGVuUGFuZWwgOiAwLAorICAgICAgICBvcHRpb25zLnNob3VsZEhhbmRsZVJ1bk9wZW5Q
YW5lbCgpID8gcnVuT3BlblBhbmVsIDogMCwKICAgICAgICAgZGVjaWRlUG9saWN5Rm9yR2VvbG9j
YXRpb25QZXJtaXNzaW9uUmVxdWVzdCwKICAgICAgICAgMCwgLy8gaGVhZGVySGVpZ2h0CiAgICAg
ICAgIDAsIC8vIGZvb3RlckhlaWdodApAQCAtNzk1LDkgKzc5OSw5IEBAIHZvaWQgVGVzdENvbnRy
b2xsZXI6OmNyZWF0ZVdlYlZpZXdXaXRoT3AKICAgICAvLyBzb21ldGhpbmcgZWxzZSBmb3Igc3Bl
Y2lmaWMgdGVzdHMgdGhhdCBuZWVkIHRvIHJ1biBhdCBhIGRpZmZlcmVudCB3aW5kb3cgc2NhbGUu
CiAgICAgbV9tYWluV2ViVmlldy0+Y2hhbmdlV2luZG93U2NhbGVJZk5lZWRlZCgxKTsKICAgICAK
LSAgICBpZiAoIW9wdGlvbnMuYXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyLmlzRW1wdHkoKSkg
eworICAgIGlmICghYXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyLmVtcHR5KCkpIHsKICAgICAg
ICAgcmVpbml0aWFsaXplQXBwQm91bmREb21haW5zKCk7Ci0gICAgICAgIHVwZGF0ZUJ1bmRsZUlk
ZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKG9wdGlvbnMuYXBwbGljYXRpb25CdW5kbGVJZGVudGlm
aWVyKTsKKyAgICAgICAgdXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MoYXBw
bGljYXRpb25CdW5kbGVJZGVudGlmaWVyKTsKICAgICB9CiB9CiAKQEAgLTgwOSw3ICs4MTMsNyBA
QCB2b2lkIFRlc3RDb250cm9sbGVyOjplbnN1cmVWaWV3U3VwcG9ydHNPCiAgICAgICAgIC8vIEhh
dmluZyBjcmVhdGVkIGFub3RoZXIgcGFnZSAodmlhIHdpbmRvdy5vcGVuKCkpIHByZXZlbnRzIHBy
b2Nlc3Mgc3dhcHBpbmcgb24gbmF2aWdhdGlvbiBhbmQgaXQgbWF5IHRoZXJlZm9yZQogICAgICAg
ICAvLyBjYXVzZSBmbGFraW5lc3MgdG8gcmV1c2UgdGhlIHZpZXcuIFdlIHNob3VsZCBhbHNvIGFs
d2F5cyBtYWtlIGEgbmV3IHZpZXcgaWYgdGhlIHRlc3QgaXMgbWFya2VkIGFzIGFwcC1ib3VuZCwg
YmVjYXVzZQogICAgICAgICAvLyB0aGUgdmlldyBjb25maWd1cmF0aW9uIG11c3QgY2hhbmdlLgot
ICAgICAgICBpZiAoIW1fY3JlYXRlZE90aGVyUGFnZSAmJiBtX21haW5XZWJWaWV3LT52aWV3U3Vw
cG9ydHNPcHRpb25zKG9wdGlvbnMpICYmICFvcHRpb25zLmlzQXBwQm91bmRXZWJWaWV3KQorICAg
ICAgICBpZiAoIW1fY3JlYXRlZE90aGVyUGFnZSAmJiBtX21haW5XZWJWaWV3LT52aWV3U3VwcG9y
dHNPcHRpb25zKG9wdGlvbnMpICYmICFvcHRpb25zLmlzQXBwQm91bmRXZWJWaWV3KCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgd2lsbERlc3Ryb3lXZWJWaWV3KCk7CkBAIC04MzYs
OCArODQwLDggQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRQcmVmZXJlbmNlc1RvQwogICAg
IFdLUHJlZmVyZW5jZXNSZXNldFRlc3RSdW5uZXJPdmVycmlkZXMocHJlZmVyZW5jZXMpOwogCiAg
ICAgV0tQcmVmZXJlbmNlc0VuYWJsZUFsbEV4cGVyaW1lbnRhbEZlYXR1cmVzKHByZWZlcmVuY2Vz
KTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGV4cGVyaW1lbnRhbEZlYXR1cmUgOiBvcHRpb25zLmV4
cGVyaW1lbnRhbEZlYXR1cmVzKQotICAgICAgICBXS1ByZWZlcmVuY2VzU2V0RXhwZXJpbWVudGFs
RmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgZXhwZXJpbWVudGFsRmVhdHVyZS52YWx1ZSwgdG9X
SyhleHBlcmltZW50YWxGZWF0dXJlLmtleSkuZ2V0KCkpOworICAgIGZvciAoY29uc3QgYXV0byYg
W2tleSwgdmFsdWVdIDogb3B0aW9ucy5leHBlcmltZW50YWxGZWF0dXJlcygpKQorICAgICAgICBX
S1ByZWZlcmVuY2VzU2V0RXhwZXJpbWVudGFsRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgdmFs
dWUsIHRvV0soa2V5KS5nZXQoKSk7CiAKICAgICBXS1ByZWZlcmVuY2VzUmVzZXRBbGxJbnRlcm5h
bERlYnVnRmVhdHVyZXMocHJlZmVyZW5jZXMpOwogCkBAIC04NjIsMTcgKzg2NiwxNyBAQCB2b2lk
IFRlc3RDb250cm9sbGVyOjpyZXNldFByZWZlcmVuY2VzVG9DCiAgICAgV0tQcmVmZXJlbmNlc1Nl
dEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB0cnVlLCB0b1dLKCJJbnB1
dFR5cGVXZWVrRW5hYmxlZCIpLmdldCgpKTsKICNlbmRpZgogCi0gICAgZm9yIChjb25zdCBhdXRv
JiBpbnRlcm5hbERlYnVnRmVhdHVyZSA6IG9wdGlvbnMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKQot
ICAgICAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXkocHJlZmVy
ZW5jZXMsIGludGVybmFsRGVidWdGZWF0dXJlLnZhbHVlLCB0b1dLKGludGVybmFsRGVidWdGZWF0
dXJlLmtleSkuZ2V0KCkpOworICAgIGZvciAoY29uc3QgYXV0byYgW2tleSwgdmFsdWVdICA6IG9w
dGlvbnMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKCkpCisgICAgICAgIFdLUHJlZmVyZW5jZXNTZXRJ
bnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgdmFsdWUsIHRvV0soa2V5KS5n
ZXQoKSk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBXS1ByZWZlcmVuY2VzU2V0Q2FwdHVy
ZVZpZGVvSW5VSVByb2Nlc3NFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUNhcHR1
cmVWaWRlb0luVUlQcm9jZXNzKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0Q2FwdHVyZVZpZGVvSW5H
UFVQcm9jZXNzRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVDYXB0dXJlVmlkZW9J
bkdQVVByb2Nlc3MpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRDYXB0dXJlQXVkaW9JblVJUHJvY2Vz
c0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQ2FwdHVyZUF1ZGlvSW5VSVByb2Nl
c3MpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRDYXB0dXJlQXVkaW9JbkdQVVByb2Nlc3NFbmFibGVk
KHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUNhcHR1cmVBdWRpb0luR1BVUHJvY2Vzcyk7Cisg
ICAgV0tQcmVmZXJlbmNlc1NldENhcHR1cmVWaWRlb0luVUlQcm9jZXNzRW5hYmxlZChwcmVmZXJl
bmNlcywgb3B0aW9ucy5lbmFibGVDYXB0dXJlVmlkZW9JblVJUHJvY2VzcygpKTsKKyAgICBXS1By
ZWZlcmVuY2VzU2V0Q2FwdHVyZVZpZGVvSW5HUFVQcm9jZXNzRW5hYmxlZChwcmVmZXJlbmNlcywg
b3B0aW9ucy5lbmFibGVDYXB0dXJlVmlkZW9JbkdQVVByb2Nlc3MoKSk7CisgICAgV0tQcmVmZXJl
bmNlc1NldENhcHR1cmVBdWRpb0luVUlQcm9jZXNzRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9u
cy5lbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcygpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0
Q2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFi
bGVDYXB0dXJlQXVkaW9JbkdQVVByb2Nlc3MoKSk7CiAjZW5kaWYKLSAgICBXS1ByZWZlcmVuY2Vz
U2V0UHJvY2Vzc1N3YXBPbk5hdmlnYXRpb25FbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmNv
bnRleHRPcHRpb25zLnNob3VsZEVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uKCkpOwotICAg
IFdLUHJlZmVyZW5jZXNTZXRQYWdlVmlzaWJpbGl0eUJhc2VkUHJvY2Vzc1N1cHByZXNzaW9uRW5h
YmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVBcHBOYXApOworICAgIFdLUHJlZmVyZW5j
ZXNTZXRQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbkVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMu
Y29udGV4dE9wdGlvbnMoKS5zaG91bGRFbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbigpKTsK
KyAgICBXS1ByZWZlcmVuY2VzU2V0UGFnZVZpc2liaWxpdHlCYXNlZFByb2Nlc3NTdXBwcmVzc2lv
bkVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQXBwTmFwKCkpOwogICAgIFdLUHJl
ZmVyZW5jZXNTZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQocHJlZmVyZW5jZXMs
IHRydWUpOwogICAgIFdLUHJlZmVyZW5jZXNTZXRTdWJwaXhlbEFudGlhbGlhc2VkTGF5ZXJUZXh0
RW5hYmxlZChwcmVmZXJlbmNlcywgZmFsc2UpOwogICAgIFdLUHJlZmVyZW5jZXNTZXRYU1NBdWRp
dG9yRW5hYmxlZChwcmVmZXJlbmNlcywgZmFsc2UpOwpAQCAtODgzLDEwICs4ODcsMTAgQEAgdm9p
ZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRQcmVmZXJlbmNlc1RvQwogICAgIFdLUHJlZmVyZW5jZXNT
ZXRKYXZhU2NyaXB0UnVudGltZUZsYWdzKHByZWZlcmVuY2VzLCBrV0tKYXZhU2NyaXB0UnVudGlt
ZUZsYWdzQWxsRW5hYmxlZCk7CiAgICAgV0tQcmVmZXJlbmNlc1NldEphdmFTY3JpcHRDYW5PcGVu
V2luZG93c0F1dG9tYXRpY2FsbHkocHJlZmVyZW5jZXMsIHRydWUpOwogICAgIFdLUHJlZmVyZW5j
ZXNTZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKHByZWZlcmVuY2VzLCB0cnVlKTsKLSAg
ICBXS1ByZWZlcmVuY2VzU2V0RE9NUGFzdGVBbGxvd2VkKHByZWZlcmVuY2VzLCBvcHRpb25zLmRv
bVBhc3RlQWxsb3dlZCk7CisgICAgV0tQcmVmZXJlbmNlc1NldERPTVBhc3RlQWxsb3dlZChwcmVm
ZXJlbmNlcywgb3B0aW9ucy5kb21QYXN0ZUFsbG93ZWQoKSk7CiAgICAgV0tQcmVmZXJlbmNlc1Nl
dFVuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMc0FsbG93ZWQocHJlZmVyZW5jZXMsIHRydWUpOwog
ICAgIFdLUHJlZmVyZW5jZXNTZXRGaWxlQWNjZXNzRnJvbUZpbGVVUkxzQWxsb3dlZChwcmVmZXJl
bmNlcywgdHJ1ZSk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldFRvcE5hdmlnYXRpb25Ub0RhdGFVUkxz
QWxsb3dlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5hbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxz
KTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0VG9wTmF2aWdhdGlvblRvRGF0YVVSTHNBbGxvd2VkKHBy
ZWZlcmVuY2VzLCBvcHRpb25zLmFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMoKSk7CiAjaWYg
RU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgIFdLUHJlZmVyZW5jZXNTZXRGdWxsU2NyZWVuRW5h
YmxlZChwcmVmZXJlbmNlcywgdHJ1ZSk7CiAjZW5kaWYKQEAgLTg5OSwxOCArOTAzLDE4IEBAIHZv
aWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0UHJlZmVyZW5jZXNUb0MKICAgICBXS1ByZWZlcmVuY2Vz
U2V0Q3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkKHByZWZlcmVuY2VzLCB0cnVlKTsKICAgICBX
S1ByZWZlcmVuY2VzU2V0RGlhbG9nRWxlbWVudEVuYWJsZWQocHJlZmVyZW5jZXMsIHRydWUpOwog
Ci0gICAgV0tQcmVmZXJlbmNlc1NldE1vY2tTY3JvbGxiYXJzRW5hYmxlZChwcmVmZXJlbmNlcywg
b3B0aW9ucy51c2VNb2NrU2Nyb2xsYmFycyk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldE5lZWRzU2l0
ZVNwZWNpZmljUXVpcmtzKHByZWZlcmVuY2VzLCBvcHRpb25zLm5lZWRzU2l0ZVNwZWNpZmljUXVp
cmtzKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0QXR0YWNobWVudEVsZW1lbnRFbmFibGVkKHByZWZl
cmVuY2VzLCBvcHRpb25zLmVuYWJsZUF0dGFjaG1lbnRFbGVtZW50KTsKLSAgICBXS1ByZWZlcmVu
Y2VzU2V0TWVudUl0ZW1FbGVtZW50RW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVN
ZW51SXRlbUVsZW1lbnQpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRLZXlnZW5FbGVtZW50RW5hYmxl
ZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVLZXlnZW5FbGVtZW50KTsKLSAgICBXS1ByZWZl
cmVuY2VzU2V0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMu
ZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldFdlYkF1dGhl
bnRpY2F0aW9uRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVXZWJBdXRoZW50aWNh
dGlvbik7Ci0gICAgV0tQcmVmZXJlbmNlc1NldFdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50
aWNhdG9yRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVXZWJBdXRoZW50aWNhdGlv
bkxvY2FsQXV0aGVudGljYXRvcik7Ci0gICAgV0tQcmVmZXJlbmNlc1NldEFsbG93Q3Jvc3NPcmln
aW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzKHByZWZlcmVuY2VzLCBvcHRpb25zLmFs
bG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzKTsKLSAgICBXS1By
ZWZlcmVuY2VzU2V0Q29sb3JGaWx0ZXJFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJs
ZUNvbG9yRmlsdGVyKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0UHVuY2hPdXRXaGl0ZUJhY2tncm91
bmRzSW5EYXJrTW9kZShwcmVmZXJlbmNlcywgb3B0aW9ucy5wdW5jaE91dFdoaXRlQmFja2dyb3Vu
ZHNJbkRhcmtNb2RlKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0UGFnZUNhY2hlRW5hYmxlZChwcmVm
ZXJlbmNlcywgb3B0aW9ucy5lbmFibGVCYWNrRm9yd2FyZENhY2hlKTsKKyAgICBXS1ByZWZlcmVu
Y2VzU2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLnVzZU1vY2tT
Y3JvbGxiYXJzKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXROZWVkc1NpdGVTcGVjaWZpY1F1aXJr
cyhwcmVmZXJlbmNlcywgb3B0aW9ucy5uZWVkc1NpdGVTcGVjaWZpY1F1aXJrcygpKTsKKyAgICBX
S1ByZWZlcmVuY2VzU2V0QXR0YWNobWVudEVsZW1lbnRFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRp
b25zLmVuYWJsZUF0dGFjaG1lbnRFbGVtZW50KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRNZW51
SXRlbUVsZW1lbnRFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZU1lbnVJdGVtRWxl
bWVudCgpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0S2V5Z2VuRWxlbWVudEVuYWJsZWQocHJlZmVy
ZW5jZXMsIG9wdGlvbnMuZW5hYmxlS2V5Z2VuRWxlbWVudCgpKTsKKyAgICBXS1ByZWZlcmVuY2Vz
U2V0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxl
TW9kZXJuTWVkaWFDb250cm9scygpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0V2ViQXV0aGVudGlj
YXRpb25FbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZVdlYkF1dGhlbnRpY2F0aW9u
KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRXZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0aGVudGlj
YXRvckVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlV2ViQXV0aGVudGljYXRpb25M
b2NhbEF1dGhlbnRpY2F0b3IoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEFsbG93Q3Jvc3NPcmln
aW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzKHByZWZlcmVuY2VzLCBvcHRpb25zLmFs
bG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzKCkpOworICAgIFdL
UHJlZmVyZW5jZXNTZXRDb2xvckZpbHRlckVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5h
YmxlQ29sb3JGaWx0ZXIoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldFB1bmNoT3V0V2hpdGVCYWNr
Z3JvdW5kc0luRGFya01vZGUocHJlZmVyZW5jZXMsIG9wdGlvbnMucHVuY2hPdXRXaGl0ZUJhY2tn
cm91bmRzSW5EYXJrTW9kZSgpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0UGFnZUNhY2hlRW5hYmxl
ZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVCYWNrRm9yd2FyZENhY2hlKCkpOwogCiAgICAg
V0tQcmVmZXJlbmNlc1NldERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKHByZWZlcmVuY2VzLCB0b1dL
KCJJU08tODg1OS0xIikuZ2V0KCkpOwogCkBAIC05MzIsNyArOTM2LDcgQEAgdm9pZCBUZXN0Q29u
dHJvbGxlcjo6cmVzZXRQcmVmZXJlbmNlc1RvQwogICAgIFdLUHJlZmVyZW5jZXNTZXRIaWRkZW5Q
YWdlRE9NVGltZXJUaHJvdHRsaW5nRW5hYmxlZChwcmVmZXJlbmNlcywgZmFsc2UpOwogICAgIFdL
UHJlZmVyZW5jZXNTZXRIaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQocHJl
ZmVyZW5jZXMsIGZhbHNlKTsKIAotICAgIFdLUHJlZmVyZW5jZXNTZXRBY2NlbGVyYXRlZERyYXdp
bmdFbmFibGVkKHByZWZlcmVuY2VzLCBtX3Nob3VsZFVzZUFjY2VsZXJhdGVkRHJhd2luZyB8fCBv
cHRpb25zLnVzZUFjY2VsZXJhdGVkRHJhd2luZyk7CisgICAgV0tQcmVmZXJlbmNlc1NldEFjY2Vs
ZXJhdGVkRHJhd2luZ0VuYWJsZWQocHJlZmVyZW5jZXMsIG1fc2hvdWxkVXNlQWNjZWxlcmF0ZWRE
cmF3aW5nIHx8IG9wdGlvbnMudXNlQWNjZWxlcmF0ZWREcmF3aW5nKCkpOwogICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgYmUgdGVzdGluZyB0aGUgZGVmYXVsdC4KICAgICBXS1ByZWZlcmVuY2VzU2V0
U3RvcmFnZUJsb2NraW5nUG9saWN5KHByZWZlcmVuY2VzLCBrV0tBbGxvd0FsbFN0b3JhZ2UpOwog
CkBAIC05NTMsNyArOTU3LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRQcmVmZXJlbmNl
c1RvQwogICAgIAogICAgIFdLUHJlZmVyZW5jZXNTZXRMYXJnZUltYWdlQXN5bmNEZWNvZGluZ0Vu
YWJsZWQocHJlZmVyZW5jZXMsIGZhbHNlKTsKIAotICAgIFdLUHJlZmVyZW5jZXNTZXRJbnNwZWN0
b3JBZGRpdGlvbnNFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUluc3BlY3RvckFk
ZGl0aW9ucyk7CisgICAgV0tQcmVmZXJlbmNlc1NldEluc3BlY3RvckFkZGl0aW9uc0VuYWJsZWQo
cHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zKCkpOwogCiAgICAg
V0tQcmVmZXJlbmNlc1NldFN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKHByZWZlcmVuY2VzLCB0cnVl
KTsKICAgICAKQEAgLTk3Miw3ICs5NzYsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldFBy
ZWZlcmVuY2VzVG9DCiAgICAgV0tQcmVmZXJlbmNlc1NldEF1ZGlvUGxheWJhY2tSZXF1aXJlc1Vz
ZXJHZXN0dXJlKHByZWZlcmVuY2VzLCBmYWxzZSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldEludGVy
bmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCBmYWxzZSwgV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlNwZWFrZXJTZWxlY3Rpb25SZXF1aXJlc1VzZXJHZXN0dXJlIikpOwog
Ci0gICAgV0tQcmVmZXJlbmNlc1NldFNob3VsZFVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQo
cHJlZmVyZW5jZXMsIG9wdGlvbnMuY29udGV4dE9wdGlvbnMudXNlU2VydmljZVdvcmtlclNob3J0
VGltZW91dCk7CisgICAgV0tQcmVmZXJlbmNlc1NldFNob3VsZFVzZVNlcnZpY2VXb3JrZXJTaG9y
dFRpbWVvdXQocHJlZmVyZW5jZXMsIG9wdGlvbnMudXNlU2VydmljZVdvcmtlclNob3J0VGltZW91
dCgpKTsKIAogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCiAgICAgV0tQ
cmVmZXJlbmNlc1NldElzQWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZUVuYWJsZWQocHJlZmVyZW5j
ZXMsIGFjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVNb2RlKCkpOwpAQCAtMTAwNiwxMSArMTAxMCwx
MiBAQCBib29sIFRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0CiAgICAgc2V0VmFs
dWUocmVzZXRNZXNzYWdlQm9keSwgIkFjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWUiLCBtX2FjY2Vz
c2liaWxpdHlJc29sYXRlZFRyZWVNb2RlKTsKICNlbmRpZgogCi0gICAgaWYgKG9wdGlvbnMuanNj
T3B0aW9ucy5sZW5ndGgoKSkKLSAgICAgICAgc2V0VmFsdWUocmVzZXRNZXNzYWdlQm9keSwgIkpT
Q09wdGlvbnMiLCBvcHRpb25zLmpzY09wdGlvbnMuY19zdHIoKSk7CisgICAgYXV0byBqc2NPcHRp
b25zID0gb3B0aW9ucy5qc2NPcHRpb25zKCk7CisgICAgaWYgKCFqc2NPcHRpb25zLmVtcHR5KCkp
CisgICAgICAgIHNldFZhbHVlKHJlc2V0TWVzc2FnZUJvZHksICJKU0NPcHRpb25zIiwganNjT3B0
aW9ucy5jX3N0cigpKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIFdlYkNvcmVUZXN0U3Vw
cG9ydDo6c2V0QWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXNGb3JUZXN0aW5nKG9wdGlvbnMu
YWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMuY19zdHIoKSk7CisgICAgV2ViQ29yZVRlc3RT
dXBwb3J0OjpzZXRBZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlc0ZvclRlc3Rpbmcob3B0aW9u
cy5hZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcygpLmNfc3RyKCkpOwogI2VuZGlmCiAKICAg
ICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgdG9XSygiUmVzZXQiKS5nZXQoKSwgcmVzZXRN
ZXNzYWdlQm9keS5nZXQoKSk7CkBAIC0xMTE4LDcgKzExMjMsNyBAQCBib29sIFRlc3RDb250cm9s
bGVyOjpyZXNldFN0YXRlVG9Db25zaXN0CiAKICAgICBzZXROYXZpZ2F0aW9uR2VzdHVyZXNFbmFi
bGVkKGZhbHNlKTsKICAgICAKLSAgICBzZXRJZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyhvcHRp
b25zLmlnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKTsKKyAgICBzZXRJZ25vcmVzVmlld3BvcnRT
Y2FsZUxpbWl0cyhvcHRpb25zLmlnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKCkpOwogCiAgICAg
bV9vcGVuUGFuZWxGaWxlVVJMcyA9IG51bGxwdHI7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
QEAgLTEzMTgsNyArMTMyMyw3IEBAIHN0YXRpYyBzdGQ6OnN0cmluZyB0ZXN0UGF0aChXS1VSTFJl
ZiB1cmwKICAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKIH0KIAotc3RhdGljIFdLVVJMUmVmIGNy
ZWF0ZVRlc3RVUkwoY29uc3QgY2hhciogcGF0aE9yVVJMKQorV0tVUkxSZWYgVGVzdENvbnRyb2xs
ZXI6OmNyZWF0ZVRlc3RVUkwoY29uc3QgY2hhciogcGF0aE9yVVJMKQogewogICAgIGlmIChzdHJz
dHIocGF0aE9yVVJMLCAiaHR0cDovLyIpIHx8IHN0cnN0cihwYXRoT3JVUkwsICJodHRwczovLyIp
IHx8IHN0cnN0cihwYXRoT3JVUkwsICJmaWxlOi8vIikpCiAgICAgICAgIHJldHVybiBXS1VSTENy
ZWF0ZVdpdGhVVEY4Q1N0cmluZyhwYXRoT3JVUkwpOwpAQCAtMTM1NiwyMTEgKzEzNjEsMjMgQEAg
c3RhdGljIFdLVVJMUmVmIGNyZWF0ZVRlc3RVUkwoY29uc3QgY2hhcgogICAgIHJldHVybiBXS1VS
TENyZWF0ZVdpdGhVVEY4Q1N0cmluZyhidWZmZXIuZ2V0KCkpOwogfQogCi1zdGF0aWMgYm9vbCBw
YXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKQotewot
ICAgIGlmICh2YWx1ZSA9PSAidHJ1ZSIpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICh2
YWx1ZSA9PSAiZmFsc2UiKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBMT0dfRVJST1Io
IkZvdW5kIHVuZXhwZWN0ZWQgdmFsdWUgJyVzJyBmb3IgYm9vbGVhbiBvcHRpb24uIEV4cGVjdGVk
ICd0cnVlJyBvciAnZmFsc2UnLiIsIHZhbHVlLmNfc3RyKCkpOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotc3RhdGljIHN0ZDo6c3RyaW5nIHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNSZWxh
dGl2ZVBhdGgoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLCBjb25zdCBzdGQ6OnN0cmluZyYgcGF0
aE9yVVJMKQotewotICAgIGF1dG8gYmFzZVVSTCA9IGFkb3B0V0soY3JlYXRlVGVzdFVSTChwYXRo
T3JVUkwuY19zdHIoKSkpOwotICAgIGF1dG8gcmVsYXRpdmVVUkwgPSBhZG9wdFdLKFdLVVJMQ3Jl
YXRlV2l0aEJhc2VVUkwoYmFzZVVSTC5nZXQoKSwgdmFsdWUuY19zdHIoKSkpOwotICAgIHJldHVy
biB0b1NURChhZG9wdFdLKFdLVVJMQ29weVBhdGgocmVsYXRpdmVVUkwuZ2V0KCkpKSk7Ci19Ci0K
LXN0YXRpYyBzdGQ6OnN0cmluZyBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzVVJMKGNvbnN0
IHN0ZDo6c3RyaW5nJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TVEQoYWRvcHRXSyhXS1VSTENv
cHlTdHJpbmcoY3JlYXRlVGVzdFVSTCh2YWx1ZS5jX3N0cigpKSkpKTsKLX0KLQotc3RhdGljIHZv
aWQgdXBkYXRlVGVzdE9wdGlvbnNGcm9tVGVzdEhlYWRlcihUZXN0T3B0aW9ucyYgdGVzdE9wdGlv
bnMsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBhYnNv
bHV0ZVBhdGgpCi17Ci0gICAgc3RkOjpzdHJpbmcgZmlsZW5hbWUgPSBhYnNvbHV0ZVBhdGg7Ci0g
ICAgaWYgKGZpbGVuYW1lLmVtcHR5KCkpIHsKLSAgICAgICAgLy8gR3Jvc3MuIE5lZWQgdG8gcmVk
dWNlIGNvbnZlcnNpb25zIGJldHdlZW4gYWxsIHRoZSBzdHJpbmcgdHlwZXMgYW5kIFVSTHMuCi0g
ICAgICAgIGZpbGVuYW1lID0gdGVzdFBhdGgoYWRvcHRXSyhjcmVhdGVUZXN0VVJMKHBhdGhPclVS
TC5jX3N0cigpKSkuZ2V0KCkpOwotICAgIH0KLQotICAgIGlmIChmaWxlbmFtZS5lbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBzdGQ6OnN0cmluZyBvcHRpb25zOwotICAgIHN0ZDo6aWZz
dHJlYW0gdGVzdEZpbGUoZmlsZW5hbWUuZGF0YSgpKTsKLSAgICBpZiAoIXRlc3RGaWxlLmdvb2Qo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGdldGxpbmUodGVzdEZpbGUsIG9wdGlvbnMpOwotICAg
IHN0ZDo6c3RyaW5nIGJlZ2luU3RyaW5nKCJ3ZWJraXQtdGVzdC1ydW5uZXIgWyAiKTsKLSAgICBz
dGQ6OnN0cmluZyBlbmRTdHJpbmcoIiBdIik7Ci0gICAgc2l6ZV90IGJlZ2luTG9jYXRpb24gPSBv
cHRpb25zLmZpbmQoYmVnaW5TdHJpbmcpOwotICAgIGlmIChiZWdpbkxvY2F0aW9uID09IHN0ZDo6
c3RyaW5nOjpucG9zKQotICAgICAgICByZXR1cm47Ci0gICAgc2l6ZV90IGVuZExvY2F0aW9uID0g
b3B0aW9ucy5maW5kKGVuZFN0cmluZywgYmVnaW5Mb2NhdGlvbik7Ci0gICAgaWYgKGVuZExvY2F0
aW9uID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgICAgIExPR19FUlJPUigiQ291bGQgbm90
IGZpbmQgZW5kIG9mIHRlc3QgaGVhZGVyIGluICVzIiwgZmlsZW5hbWUuY19zdHIoKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3RkOjpzdHJpbmcgcGFpclN0cmluZyA9IG9wdGlvbnMu
c3Vic3RyKGJlZ2luTG9jYXRpb24gKyBiZWdpblN0cmluZy5zaXplKCksIGVuZExvY2F0aW9uIC0g
KGJlZ2luTG9jYXRpb24gKyBiZWdpblN0cmluZy5zaXplKCkpKTsKLSAgICBzaXplX3QgcGFpclN0
YXJ0ID0gMDsKLSAgICB3aGlsZSAocGFpclN0YXJ0IDwgcGFpclN0cmluZy5zaXplKCkpIHsKLSAg
ICAgICAgc2l6ZV90IHBhaXJFbmQgPSBwYWlyU3RyaW5nLmZpbmQoIiAiLCBwYWlyU3RhcnQpOwot
ICAgICAgICBpZiAocGFpckVuZCA9PSBzdGQ6OnN0cmluZzo6bnBvcykKLSAgICAgICAgICAgIHBh
aXJFbmQgPSBwYWlyU3RyaW5nLnNpemUoKTsKLSAgICAgICAgc2l6ZV90IGVxdWFsc0xvY2F0aW9u
ID0gcGFpclN0cmluZy5maW5kKCI9IiwgcGFpclN0YXJ0KTsKLSAgICAgICAgaWYgKGVxdWFsc0xv
Y2F0aW9uID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIk1h
bGZvcm1lZCBvcHRpb24gaW4gdGVzdCBoZWFkZXIgKGNvdWxkIG5vdCBmaW5kICc9JyBjaGFyYWN0
ZXIpIGluICVzIiwgZmlsZW5hbWUuY19zdHIoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBhdXRvIGtleSA9IHBhaXJTdHJpbmcuc3Vic3RyKHBhaXJTdGFydCwgZXF1
YWxzTG9jYXRpb24gLSBwYWlyU3RhcnQpOwotICAgICAgICBhdXRvIHZhbHVlID0gcGFpclN0cmlu
Zy5zdWJzdHIoZXF1YWxzTG9jYXRpb24gKyAxLCBwYWlyRW5kIC0gKGVxdWFsc0xvY2F0aW9uICsg
MSkpOwotCi0gICAgICAgIGlmICgha2V5LnJmaW5kKCJleHBlcmltZW50YWw6IikpIHsKLSAgICAg
ICAgICAgIGtleSA9IGtleS5zdWJzdHIoMTMpOwotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZXhw
ZXJpbWVudGFsRmVhdHVyZXMuYWRkKFN0cmluZyhrZXkuY19zdHIoKSksIHBhcnNlQm9vbGVhblRl
c3RIZWFkZXJWYWx1ZSh2YWx1ZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFrZXkucmZp
bmQoImludGVybmFsOiIpKSB7Ci0gICAgICAgICAgICBrZXkgPSBrZXkuc3Vic3RyKDkpOwotICAg
ICAgICAgICAgdGVzdE9wdGlvbnMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzLmFkZChTdHJpbmcoa2V5
LmNfc3RyKCkpLCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChrZXkgPT0gImxhbmd1YWdlIikKLSAgICAgICAgICAgIHRlc3RPcHRp
b25zLmNvbnRleHRPcHRpb25zLm92ZXJyaWRlTGFuZ3VhZ2VzID0gU3RyaW5nKHZhbHVlLmNfc3Ry
KCkpLnNwbGl0KCcsJyk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAidXNlVGhyZWFkZWRTY3Jv
bGxpbmciKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMudXNlVGhyZWFkZWRTY3JvbGxpbmcgPSBw
YXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkg
PT0gInVzZUFjY2VsZXJhdGVkRHJhd2luZyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy51c2VB
Y2NlbGVyYXRlZERyYXdpbmcgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwot
ICAgICAgICBlbHNlIGlmIChrZXkgPT0gInVzZUZsZXhpYmxlVmlld3BvcnQiKQotICAgICAgICAg
ICAgdGVzdE9wdGlvbnMudXNlRmxleGlibGVWaWV3cG9ydCA9IHBhcnNlQm9vbGVhblRlc3RIZWFk
ZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAidXNlRGF0YURldGVjdGlv
biIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy51c2VEYXRhRGV0ZWN0aW9uID0gcGFyc2VCb29s
ZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJ1c2VN
b2NrU2Nyb2xsYmFycyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy51c2VNb2NrU2Nyb2xsYmFy
cyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYg
KGtleSA9PSAibmVlZHNTaXRlU3BlY2lmaWNRdWlya3MiKQotICAgICAgICAgICAgdGVzdE9wdGlv
bnMubmVlZHNTaXRlU3BlY2lmaWNRdWlya3MgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUo
dmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImlnbm9yZXNWaWV3cG9ydFNjYWxlTGlt
aXRzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmlnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRz
ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAo
a2V5ID09ICJ1c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0eSIpCi0gICAgICAgICAgICB0
ZXN0T3B0aW9ucy51c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0eSA9IHBhcnNlQm9vbGVh
blRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxl
QXR0YWNobWVudEVsZW1lbnQiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlQXR0YWNo
bWVudEVsZW1lbnQgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAg
ICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUludGVyc2VjdGlvbk9ic2VydmVyIikKLSAgICAgICAg
ICAgIHRlc3RPcHRpb25zLmVuYWJsZUludGVyc2VjdGlvbk9ic2VydmVyID0gcGFyc2VCb29sZWFu
VGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJ1c2VFcGhl
bWVyYWxTZXNzaW9uIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Np
b24gPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlm
IChrZXkgPT0gImVuYWJsZU1lbnVJdGVtRWxlbWVudCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9u
cy5lbmFibGVNZW51SXRlbUVsZW1lbnQgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFs
dWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUtleWdlbkVsZW1lbnQiKQotICAg
ICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlS2V5Z2VuRWxlbWVudCA9IHBhcnNlQm9vbGVhblRl
c3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlTW9k
ZXJuTWVkaWFDb250cm9scyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVNb2Rlcm5N
ZWRpYUNvbnRyb2xzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAg
ICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVQb2ludGVyTG9jayIpCi0gICAgICAgICAgICB0ZXN0
T3B0aW9ucy5lbmFibGVQb2ludGVyTG9jayA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2
YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlV2ViQXV0aGVudGljYXRpb24i
KQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlV2ViQXV0aGVudGljYXRpb24gPSBwYXJz
ZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0g
ImVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yIikKLSAgICAgICAgICAg
IHRlc3RPcHRpb25zLmVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yID0g
cGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5
ID09ICJlbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMu
ZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZh
bHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIi
KQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyID0gcGFy
c2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09
ICJhcHBsaWNhdGlvbk1hbmlmZXN0IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmFwcGxpY2F0
aW9uTWFuaWZlc3QgPSBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzUmVsYXRpdmVQYXRoKHZh
bHVlLCBwYXRoT3JVUkwpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImFsbG93Q3Jvc3NPcmln
aW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzIikKLSAgICAgICAgICAgIHRlc3RPcHRp
b25zLmFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzID0gcGFy
c2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09
ICJkb21QYXN0ZUFsbG93ZWQiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZG9tUGFzdGVBbGxv
d2VkID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBp
ZiAoa2V5ID09ICJlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbiIpCi0gICAgICAgICAgICB0
ZXN0T3B0aW9ucy5jb250ZXh0T3B0aW9ucy5lbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbiA9
IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtl
eSA9PSAiZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW4iKQotICAgICAgICAgICAgdGVzdE9w
dGlvbnMuY29udGV4dE9wdGlvbnMuZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW4gPSBwYXJz
ZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0g
InVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMu
Y29udGV4dE9wdGlvbnMudXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dCA9IHBhcnNlQm9vbGVh
blRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxl
Q29sb3JGaWx0ZXIiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlQ29sb3JGaWx0ZXIg
PSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChr
ZXkgPT0gInB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUiKQotICAgICAgICAgICAg
dGVzdE9wdGlvbnMucHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZSA9IHBhcnNlQm9v
bGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAianNj
T3B0aW9ucyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5qc2NPcHRpb25zID0gdmFsdWU7Ci0g
ICAgICAgIGVsc2UgaWYgKGtleSA9PSAiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMiKQot
ICAgICAgICAgICAgdGVzdE9wdGlvbnMuYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMgPSB2
YWx1ZTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJydW5TaW5nbHkiKQotICAgICAgICAgICAg
dGVzdE9wdGlvbnMucnVuU2luZ2x5ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVl
KTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJzaG91bGRJZ25vcmVNZXRhVmlld3BvcnQiKQot
ICAgICAgICAgICAgdGVzdE9wdGlvbnMuc2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0ID0gcGFyc2VC
b29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJz
cGVsbENoZWNraW5nRG90cyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5zaG91bGRTaG93U3Bl
bGxDaGVja2luZ0RvdHMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAg
ICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZVNlcnZpY2VDb250cm9scyIpCi0gICAgICAgICAg
ICB0ZXN0T3B0aW9ucy5lbmFibGVTZXJ2aWNlQ29udHJvbHMgPSBwYXJzZUJvb2xlYW5UZXN0SGVh
ZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVkaXRhYmxlIikKLSAg
ICAgICAgICAgIHRlc3RPcHRpb25zLmVkaXRhYmxlID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZh
bHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJzaG91bGRIYW5kbGVSdW5PcGVu
UGFuZWwiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuc2hvdWxkSGFuZGxlUnVuT3BlblBhbmVs
ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAo
a2V5ID09ICJzaG91bGRQcmVzZW50UG9wb3ZlcnMiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMu
c2hvdWxkUHJlc2VudFBvcG92ZXJzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVl
KTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJjb250ZW50SW5zZXQudG9wIikKLSAgICAgICAg
ICAgIHRlc3RPcHRpb25zLmNvbnRlbnRJbnNldFRvcCA9IHN0ZDo6c3RvZCh2YWx1ZSk7Ci0gICAg
ICAgIGVsc2UgaWYgKGtleSA9PSAiaWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0cyIp
Ci0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5jb250ZXh0T3B0aW9ucy5pZ25vcmVTeW5jaHJvbm91
c01lc3NhZ2luZ1RpbWVvdXRzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsK
LSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJjb250ZW50TW9kZSIpCi0gICAgICAgICAgICB0ZXN0
T3B0aW9ucy5jb250ZW50TW9kZSA9IHsgdmFsdWUuY19zdHIoKSB9OwotICAgICAgICBlbHNlIGlm
IChrZXkgPT0gImFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllciIpCi0gICAgICAgICAgICB0ZXN0
T3B0aW9ucy5hcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIgPSB7IHZhbHVlLmNfc3RyKCkgfTsK
LSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVBcHBOYXAiKQotICAgICAgICAgICAgdGVz
dE9wdGlvbnMuZW5hYmxlQXBwTmFwID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVl
KTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVCYWNrRm9yd2FyZENhY2hlIikKLSAg
ICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUgPSBwYXJzZUJvb2xl
YW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImFsbG93
c0xpbmtQcmV2aWV3IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmFsbG93c0xpbmtQcmV2aWV3
ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAo
a2V5ID09ICJlbmFibGVDYXB0dXJlVmlkZW9JblVJUHJvY2VzcyIpCi0gICAgICAgICAgICB0ZXN0
T3B0aW9ucy5lbmFibGVDYXB0dXJlVmlkZW9JblVJUHJvY2VzcyA9IHBhcnNlQm9vbGVhblRlc3RI
ZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlQ2FwdHVy
ZVZpZGVvSW5HUFVQcm9jZXNzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZUNhcHR1
cmVWaWRlb0luR1BVUHJvY2VzcyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7
Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlQ2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3Mi
KQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlQ2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3Mg
PSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChr
ZXkgPT0gImVuYWJsZUNhcHR1cmVBdWRpb0luR1BVUHJvY2VzcyIpCi0gICAgICAgICAgICB0ZXN0
T3B0aW9ucy5lbmFibGVDYXB0dXJlQXVkaW9JbkdQVVByb2Nlc3MgPSBwYXJzZUJvb2xlYW5UZXN0
SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImFsbG93VG9wTmF2
aWdhdGlvblRvRGF0YVVSTHMiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuYWxsb3dUb3BOYXZp
Z2F0aW9uVG9EYXRhVVJMcyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0g
ICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlSW5BcHBCcm93c2VyUHJpdmFjeSIpCi0gICAg
ICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5ID0gcGFyc2VCb29s
ZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJzdGFu
ZGFsb25lV2ViQXBwbGljYXRpb25VUkwiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuc3RhbmRh
bG9uZVdlYkFwcGxpY2F0aW9uVVJMID0gcGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1VSTCh2
YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiaXNBcHBCb3VuZFdlYlZpZXciKQotICAg
ICAgICAgICAgdGVzdE9wdGlvbnMuaXNBcHBCb3VuZFdlYlZpZXcgPSBwYXJzZUJvb2xlYW5UZXN0
SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBwYWlyU3RhcnQgPSBwYWlyRW5kICsgMTsKLSAg
ICB9Ci19Ci0KIFRlc3RPcHRpb25zIFRlc3RDb250cm9sbGVyOjp0ZXN0T3B0aW9uc0ZvclRlc3Qo
Y29uc3QgVGVzdENvbW1hbmQmIGNvbW1hbmQpIGNvbnN0CiB7Ci0gICAgVGVzdE9wdGlvbnMgb3B0
aW9ucyhjb21tYW5kLnBhdGhPclVSTCk7Ci0KLSAgICBvcHRpb25zLnVzZVJlbW90ZUxheWVyVHJl
ZSA9IG1fc2hvdWxkVXNlUmVtb3RlTGF5ZXJUcmVlOwotICAgIG9wdGlvbnMuc2hvdWxkU2hvd1dl
YlZpZXcgPSBtX3Nob3VsZFNob3dXZWJWaWV3OwotCi0gICAgZm9yIChhdXRvJiBmZWF0dXJlIDog
bV9pbnRlcm5hbEZlYXR1cmVzKQotICAgICAgICBvcHRpb25zLmludGVybmFsRGVidWdGZWF0dXJl
cy5hZGQoZmVhdHVyZS5rZXksIGZlYXR1cmUudmFsdWUpOwotICAgIGZvciAoYXV0byYgZmVhdHVy
ZSA6IG1fZXhwZXJpbWVudGFsRmVhdHVyZXMpCi0gICAgICAgIG9wdGlvbnMuZXhwZXJpbWVudGFs
RmVhdHVyZXMuYWRkKGZlYXR1cmUua2V5LCBmZWF0dXJlLnZhbHVlKTsKLQotICAgIHVwZGF0ZVBs
YXRmb3JtU3BlY2lmaWNUZXN0T3B0aW9uc0ZvclRlc3Qob3B0aW9ucywgY29tbWFuZC5wYXRoT3JV
UkwpOwotICAgIHVwZGF0ZVRlc3RPcHRpb25zRnJvbVRlc3RIZWFkZXIob3B0aW9ucywgY29tbWFu
ZC5wYXRoT3JVUkwsIGNvbW1hbmQuYWJzb2x1dGVQYXRoKTsKLSAgICBwbGF0Zm9ybUFkZFRlc3RP
cHRpb25zKG9wdGlvbnMpOworICAgIFRlc3RGZWF0dXJlcyBmZWF0dXJlcyA9IG1fZ2xvYmFsRmVh
dHVyZXM7CisgICAgbWVyZ2UoZmVhdHVyZXMsIGhhcmRjb2RlZEZlYXR1cmVzQmFzZWRPblBhdGhG
b3JUZXN0KGNvbW1hbmQpKTsKKyAgICBtZXJnZShmZWF0dXJlcywgcGxhdGZvcm1TcGVjaWZpY0Zl
YXR1cmVEZWZhdWx0c0ZvclRlc3QoY29tbWFuZCkpOworICAgIG1lcmdlKGZlYXR1cmVzLCBmZWF0
dXJlRGVmYXVsdHNGcm9tVGVzdE9wdGlvbnNGaWxlc0ZvclRlc3QoY29tbWFuZCkpOworICAgIG1l
cmdlKGZlYXR1cmVzLCBmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3QoY29tbWFu
ZCkpOworICAgIG1lcmdlKGZlYXR1cmVzLCBwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZU92ZXJyaWRl
c0RlZmF1bHRzRm9yVGVzdChjb21tYW5kKSk7CiAKLSAgICByZXR1cm4gb3B0aW9uczsKKyAgICBy
ZXR1cm4gVGVzdE9wdGlvbnMgeyBmZWF0dXJlcyB9OwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVy
Ojp1cGRhdGVXZWJWaWV3U2l6ZUZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mIHRlc3QpCiB7
CiAgICAgdW5zaWduZWQgd2lkdGggPSB2aWV3V2lkdGg7CiAgICAgdW5zaWduZWQgaGVpZ2h0ID0g
dmlld0hlaWdodDsKLSAgICBpZiAodGVzdC5vcHRpb25zKCkuaXNTVkdUZXN0KSB7CisgICAgaWYg
KHRlc3Qub3B0aW9ucygpLmlzU1ZHVGVzdCgpKSB7CiAgICAgICAgIHdpZHRoID0gdzNjU1ZHVmll
d1dpZHRoOwogICAgICAgICBoZWlnaHQgPSB3M2NTVkdWaWV3SGVpZ2h0OwogICAgIH0KQEAgLTE1
NzAsNyArMTM4Nyw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnVwZGF0ZVdlYlZpZXdTaXplRm8K
IAogdm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlV2luZG93U2NhbGVGb3JUZXN0KFBsYXRmb3Jt
V2ViVmlldyogdmlldywgY29uc3QgVGVzdEludm9jYXRpb24mIHRlc3QpCiB7Ci0gICAgdmlldy0+
Y2hhbmdlV2luZG93U2NhbGVJZk5lZWRlZCh0ZXN0Lm9wdGlvbnMoKS5kZXZpY2VTY2FsZUZhY3Rv
cik7CisgICAgdmlldy0+Y2hhbmdlV2luZG93U2NhbGVJZk5lZWRlZCh0ZXN0Lm9wdGlvbnMoKS5k
ZXZpY2VTY2FsZUZhY3RvcigpKTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJl
Vmlld0ZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mIHRlc3QpCkBAIC0xNzY2LDYgKzE1ODMs
MTIgQEAgc3RhdGljIFRlc3RDb21tYW5kIHBhcnNlSW5wdXRMaW5lKGNvbnN0IAogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBkaWUoaW5wdXRMaW5lKTsKICAgICB9CisgICAgCisgICAgaWYgKHJl
c3VsdC5hYnNvbHV0ZVBhdGguZW1wdHkoKSkgeworICAgICAgICAvLyBHcm9zcy4gTmVlZCB0byBy
ZWR1Y2UgY29udmVyc2lvbnMgYmV0d2VlbiBhbGwgdGhlIHN0cmluZyB0eXBlcyBhbmQgVVJMcy4K
KyAgICAgICAgcmVzdWx0LmFic29sdXRlUGF0aCA9IHRlc3RQYXRoKGFkb3B0V0soVGVzdENvbnRy
b2xsZXI6OmNyZWF0ZVRlc3RVUkwocmVzdWx0LnBhdGhPclVSTC5jX3N0cigpKSkuZ2V0KCkpOwor
ICAgIH0KKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE3ODgsNyArMTYxMSw3IEBAIGJv
b2wgVGVzdENvbnRyb2xsZXI6OnJ1blRlc3QoY29uc3QgY2hhcioKICAgICBpZiAoY29tbWFuZC50
aW1lb3V0ID4gMF9zKQogICAgICAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5zZXRDdXN0b21UaW1l
b3V0KGNvbW1hbmQudGltZW91dCk7CiAKLSAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5zZXREdW1w
SlNDb25zb2xlTG9nSW5TdGRFcnIoY29tbWFuZC5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgfHwg
b3B0aW9ucy5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIpOworICAgIG1fY3VycmVudEludm9jYXRp
b24tPnNldER1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihjb21tYW5kLmR1bXBKU0NvbnNvbGVMb2dJ
blN0ZEVyciB8fCBvcHRpb25zLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycigpKTsKIAogICAgIHBs
YXRmb3JtV2lsbFJ1blRlc3QoKm1fY3VycmVudEludm9jYXRpb24pOwogCkBAIC0zMDAzLDcgKzI4
MjYsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVdpbGxSdW5UZXN0CiAKIHZvaWQg
VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZURhdGFTdG9yZShXS1BhZ2VDb25maWd1
cmF0aW9uUmVmIGNvbmZpZ3VyYXRpb24sIGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKQogewot
ICAgIGlmICghb3B0aW9ucy51c2VFcGhlbWVyYWxTZXNzaW9uKQorICAgIGlmICghb3B0aW9ucy51
c2VFcGhlbWVyYWxTZXNzaW9uKCkpCiAgICAgICAgIFdLUGFnZUNvbmZpZ3VyYXRpb25TZXRXZWJz
aXRlRGF0YVN0b3JlKGNvbmZpZ3VyYXRpb24sIGRlZmF1bHRXZWJzaXRlRGF0YVN0b3JlKCkpOwog
CiAgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV0tQYWdlQ29uZmlndXJhdGlvbkdldFdlYnNpdGVE
YXRhU3RvcmUoY29uZmlndXJhdGlvbik7CkBAIC0zODE4LDcgKzM2NDEsNyBAQCB2b2lkIFRlc3RD
b250cm9sbGVyOjpyZWluaXRpYWxpemVBcHBCb3VuCiAgICAgV0tXZWJzaXRlRGF0YVN0b3JlUmVp
bml0aWFsaXplQXBwQm91bmREb21haW5zKFRlc3RDb250cm9sbGVyOjp3ZWJzaXRlRGF0YVN0b3Jl
KCkpOwogfQogCi12b2lkIFRlc3RDb250cm9sbGVyOjp1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5O
ZXR3b3JrUHJvY2Vzcyhjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIpCit2b2lkIFRlc3RD
b250cm9sbGVyOjp1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyhjb25zdCBz
dGQ6OnN0cmluZyYgYnVuZGxlSWRlbnRpZmllcikKIHsKICAgICBJbkFwcEJyb3dzZXJQcml2YWN5
Q2FsbGJhY2tDb250ZXh0IGNvbnRleHQoKnRoaXMpOwogICAgIFdLV2Vic2l0ZURhdGFTdG9yZVVw
ZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKFRlc3RDb250cm9sbGVyOjp3ZWJz
aXRlRGF0YVN0b3JlKCksIHRvV0soYnVuZGxlSWRlbnRpZmllcikuZ2V0KCksICZjb250ZXh0LCBp
bkFwcEJyb3dzZXJQcml2YWN5Vm9pZFJlc3VsdENhbGxiYWNrKTsKQEAgLTM4MzMsOCArMzY1Niw5
IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNsZWFyQnVuZGxlSWRlbnRpZmkKIH0KIAogI2lmICFQ
TEFURk9STShDT0NPQSkKLXZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRkVGVzdE9wdGlv
bnMoVGVzdE9wdGlvbnMmKSBjb25zdAorVGVzdEZlYXR1cmVzIFRlc3RDb250cm9sbGVyOjpwbGF0
Zm9ybVNwZWNpZmljRmVhdHVyZU92ZXJyaWRlc0RlZmF1bHRzRm9yVGVzdChjb25zdCBUZXN0Q29t
bWFuZCYpIGNvbnN0CiB7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxl
cjo6aW5qZWN0VXNlclNjcmlwdChXS1N0cmluZ1JlZikKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL1Rlc3RDb250cm9sbGVyLmgJKHJldmlzaW9uIDI2Nzk0OCkKKysrIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBA
QAogI2luY2x1ZGUgPFdlYktpdC9XS1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHNldD4KICNpbmNs
dWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KICNpbmNsdWRlIDx2ZWN0b3I+
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
QEAgLTUwLDEyICs1MSwxMiBAQCBPQkpDX0NMQVNTIFdLV2ViVmlld0NvbmZpZ3VyYXRpb247CiAK
IG5hbWVzcGFjZSBXVFIgewogCi1jbGFzcyBUZXN0SW52b2NhdGlvbjsKK2NsYXNzIEV2ZW50U2Vu
ZGVyUHJveHk7CiBjbGFzcyBPcmlnaW5TZXR0aW5nczsKIGNsYXNzIFBsYXRmb3JtV2ViVmlldzsK
LWNsYXNzIEV2ZW50U2VuZGVyUHJveHk7CitjbGFzcyBUZXN0SW52b2NhdGlvbjsKK2NsYXNzIFRl
c3RPcHRpb25zOwogc3RydWN0IFRlc3RDb21tYW5kOwotc3RydWN0IFRlc3RPcHRpb25zOwogCiBj
bGFzcyBBc3luY1Rhc2sgewogcHVibGljOgpAQCAtOTEsNiArOTIsOCBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgY29uZmlndXJlV2Vic2l0ZURhdGFTdG9yZVRlbXBvcmFyeURpcmVjdG9yaWVz
KFdLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb25SZWYpOwogICAgIHN0YXRpYyBXS1dlYnNp
dGVEYXRhU3RvcmVSZWYgZGVmYXVsdFdlYnNpdGVEYXRhU3RvcmUoKTsKIAorICAgIHN0YXRpYyBX
S1VSTFJlZiBjcmVhdGVUZXN0VVJMKGNvbnN0IGNoYXIqIHBhdGhPclVSTCk7CisKICAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgdmlld1dpZHRoOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2
aWV3SGVpZ2h0OwogCkBAIC0xMTUsMjAgKzExOCwxNSBAQCBwdWJsaWM6CiAgICAgV0tXZWJzaXRl
RGF0YVN0b3JlUmVmIHdlYnNpdGVEYXRhU3RvcmUoKTsKIAogICAgIEV2ZW50U2VuZGVyUHJveHkq
IGV2ZW50U2VuZGVyUHJveHkoKSB7IHJldHVybiBtX2V2ZW50U2VuZGVyUHJveHkuZ2V0KCk7IH0K
LQotICAgIGJvb2wgc2hvdWxkVXNlUmVtb3RlTGF5ZXJUcmVlKCkgY29uc3QgeyByZXR1cm4gbV9z
aG91bGRVc2VSZW1vdGVMYXllclRyZWU7IH0KICAgICAKICAgICAvLyBSdW5zIHRoZSBydW4gbG9v
cCB1bnRpbCBgZG9uZWAgaXMgdHJ1ZSBvciB0aGUgdGltZW91dCBlbGFwc2VzLgogICAgIGJvb2wg
dXNlV2FpdFRvRHVtcFdhdGNoZG9nVGltZXIoKSB7IHJldHVybiBtX3VzZVdhaXRUb0R1bXBXYXRj
aGRvZ1RpbWVyOyB9CiAgICAgdm9pZCBydW5VbnRpbChib29sJiBkb25lLCBXVEY6OlNlY29uZHMg
dGltZW91dCk7CiAgICAgdm9pZCBub3RpZnlEb25lKCk7CiAKLSAgICBib29sIHNob3VsZFNob3dX
ZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRTaG93V2ViVmlldzsgfQogICAgIGJvb2wg
dXNpbmdTZXJ2ZXJNb2RlKCkgY29uc3QgeyByZXR1cm4gbV91c2luZ1NlcnZlck1vZGU7IH0KICAg
ICB2b2lkIGNvbmZpZ3VyZVZpZXdGb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJik7Ci0gICAg
Ci0gICAgYm9vbCBzaG91bGRTaG93VG91Y2hlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkU2hv
d1RvdWNoZXM7IH0KLSAgICAKKwogICAgIGJvb2wgYmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUoKSBj
b25zdCB7IHJldHVybiBtX2JlZm9yZVVubG9hZFJldHVyblZhbHVlOyB9CiAgICAgdm9pZCBzZXRC
ZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZShib29sIHZhbHVlKSB7IG1fYmVmb3JlVW5sb2FkUmV0dXJu
VmFsdWUgPSB2YWx1ZTsgfQogCkBAIC0yNzUsNyArMjczLDcgQEAgcHVibGljOgogICAgIHZvaWQg
Y2xlYXJMb2FkZWRTdWJyZXNvdXJjZURvbWFpbnMoKTsKICAgICB2b2lkIGNsZWFyQXBwQm91bmRT
ZXNzaW9uKCk7CiAgICAgdm9pZCByZWluaXRpYWxpemVBcHBCb3VuZERvbWFpbnMoKTsKLSAgICB2
b2lkIHVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKGNvbnN0IFN0cmluZyYg
YnVuZGxlSWRlbnRpZmllcik7CisgICAgdm9pZCB1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3
b3JrUHJvY2Vzcyhjb25zdCBzdGQ6OnN0cmluZyYgYnVuZGxlSWRlbnRpZmllcik7CiAgICAgdm9p
ZCBjbGVhckJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKCk7CiAKICAgICBXS0FycmF5
UmVmIG9wZW5QYW5lbEZpbGVVUkxzKCkgY29uc3QgeyByZXR1cm4gbV9vcGVuUGFuZWxGaWxlVVJM
cy5nZXQoKTsgfQpAQCAtMzYyLDcgKzM2MCw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBX
S1JldGFpblB0cjxXS1BhZ2VDb25maWd1cmF0aW9uUmVmPiBnZW5lcmF0ZVBhZ2VDb25maWd1cmF0
aW9uKGNvbnN0IFRlc3RPcHRpb25zJik7Ci0gICAgV0tSZXRhaW5QdHI8V0tDb250ZXh0Q29uZmln
dXJhdGlvblJlZj4gZ2VuZXJhdGVDb250ZXh0Q29uZmlndXJhdGlvbihjb25zdCBUZXN0T3B0aW9u
czo6Q29udGV4dE9wdGlvbnMmKSBjb25zdDsKKyAgICBXS1JldGFpblB0cjxXS0NvbnRleHRDb25m
aWd1cmF0aW9uUmVmPiBnZW5lcmF0ZUNvbnRleHRDb25maWd1cmF0aW9uKGNvbnN0IENvbnRleHRP
cHRpb25zJikgY29uc3Q7CiAgICAgdm9pZCBpbml0aWFsaXplKGludCBhcmdjLCBjb25zdCBjaGFy
KiBhcmd2W10pOwogICAgIHZvaWQgY3JlYXRlV2ViVmlld1dpdGhPcHRpb25zKGNvbnN0IFRlc3RP
cHRpb25zJik7CiAgICAgdm9pZCBydW4oKTsKQEAgLTM4MCw3ICszNzgsNiBAQCBwcml2YXRlOgog
ICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CiAgICAgV0tDb250ZXh0UmVmIHBsYXRmb3JtQWRq
dXN0Q29udGV4dChXS0NvbnRleHRSZWYsIFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYpOwogICAg
IHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplQ29udGV4dCgpOwotICAgIHZvaWQgcGxhdGZvcm1BZGRU
ZXN0T3B0aW9ucyhUZXN0T3B0aW9ucyYpIGNvbnN0OwogICAgIHZvaWQgcGxhdGZvcm1DcmVhdGVX
ZWJWaWV3KFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYsIGNvbnN0IFRlc3RPcHRpb25zJik7CiAgICAg
c3RhdGljIFBsYXRmb3JtV2ViVmlldyogcGxhdGZvcm1DcmVhdGVPdGhlclBhZ2UoUGxhdGZvcm1X
ZWJWaWV3KiBwYXJlbnRWaWV3LCBXS1BhZ2VDb25maWd1cmF0aW9uUmVmLCBjb25zdCBUZXN0T3B0
aW9ucyYpOwogICAgIHZvaWQgcGxhdGZvcm1SZXNldFByZWZlcmVuY2VzVG9Db25zaXN0ZW50VmFs
dWVzKCk7CkBAIC0zODksNyArMzg2LDcgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShDT0NPQSkK
ICAgICB2b2lkIGNvY29hUGxhdGZvcm1Jbml0aWFsaXplKCk7CiAgICAgdm9pZCBjb2NvYVJlc2V0
U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmKTsKLSAgICB2b2lkIHNl
dEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHNl
dEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcihjb25zdCBzdGQ6OnN0cmluZyYpOwogICAgIHZv
aWQgY2xlYXJBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXJUZXN0aW5nT3ZlcnJpZGUoKTsKICNl
bmRpZgogICAgIHZvaWQgcGxhdGZvcm1Db25maWd1cmVWaWV3Rm9yVGVzdChjb25zdCBUZXN0SW52
b2NhdGlvbiYpOwpAQCAtNDAzLDcgKzQwMCw5IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGVuc3Vy
ZVZpZXdTdXBwb3J0c09wdGlvbnNGb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJik7CiAgICAg
VGVzdE9wdGlvbnMgdGVzdE9wdGlvbnNGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJikgY29uc3Q7
Ci0gICAgdm9pZCB1cGRhdGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0KFRlc3RP
cHRpb25zJiwgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkgY29uc3Q7CisgICAgVGVzdEZl
YXR1cmVzIGdsb2JhbEZlYXR1cmVEZWZhdWx0c0ZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKSBj
b25zdDsKKyAgICBUZXN0RmVhdHVyZXMgcGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0Zv
clRlc3QoY29uc3QgVGVzdENvbW1hbmQmKSBjb25zdDsKKyAgICBUZXN0RmVhdHVyZXMgcGxhdGZv
cm1TcGVjaWZpY0ZlYXR1cmVPdmVycmlkZXNEZWZhdWx0c0ZvclRlc3QoY29uc3QgVGVzdENvbW1h
bmQmKSBjb25zdDsKIAogICAgIHZvaWQgdXBkYXRlV2ViVmlld1NpemVGb3JUZXN0KGNvbnN0IFRl
c3RJbnZvY2F0aW9uJik7CiAgICAgdm9pZCB1cGRhdGVXaW5kb3dTY2FsZUZvclRlc3QoUGxhdGZv
cm1XZWJWaWV3KiwgY29uc3QgVGVzdEludm9jYXRpb24mKTsKQEAgLTUzOCw4ICs1MzcsMTAgQEAg
cHJpdmF0ZToKICAgICBib29sIG1fY3JlYXRlZE90aGVyUGFnZSB7IGZhbHNlIH07CiAgICAgc3Rk
Ojp2ZWN0b3I8c3RkOjpzdHJpbmc+IG1fcGF0aHM7CiAgICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+
IG1fYWxsb3dlZEhvc3RzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBib29sPiBtX2ludGVybmFsRmVh
dHVyZXM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIGJvb2w+IG1fZXhwZXJpbWVudGFsRmVhdHVyZXM7
CisgICAgVGVzdEZlYXR1cmVzIG1fZ2xvYmFsRmVhdHVyZXM7CisKKyAgICBzdGQ6OnVub3JkZXJl
ZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+IG1faW50ZXJuYWxGZWF0dXJlczsKKyAgICBzdGQ6OnVu
b3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+IG1fZXhwZXJpbWVudGFsRmVhdHVyZXM7CiAK
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbV9pbmplY3RlZEJ1bmRsZVBhdGg7CiAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1fdGVzdFBsdWdpbkRpcmVjdG9yeTsKQEAgLTU0OCw3
ICs1NDksNyBAQCBwcml2YXRlOgogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtV2ViVmll
dz4gbV9tYWluV2ViVmlldzsKICAgICBXS1JldGFpblB0cjxXS0NvbnRleHRSZWY+IG1fY29udGV4
dDsKLSAgICBPcHRpb25hbDxUZXN0T3B0aW9uczo6Q29udGV4dE9wdGlvbnM+IG1fY29udGV4dE9w
dGlvbnM7CisgICAgT3B0aW9uYWw8Q29udGV4dE9wdGlvbnM+IG1fY29udGV4dE9wdGlvbnM7CiAg
ICAgV0tSZXRhaW5QdHI8V0tQYWdlR3JvdXBSZWY+IG1fcGFnZUdyb3VwOwogICAgIFdLUmV0YWlu
UHRyPFdLVXNlckNvbnRlbnRDb250cm9sbGVyUmVmPiBtX3VzZXJDb250ZW50Q29udHJvbGxlcjsK
IApAQCAtNjA1LDE0ICs2MDYsMTAgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9mb3JjZUNvbXBs
ZXhUZXh0IHsgZmFsc2UgfTsKICAgICBib29sIG1fc2hvdWxkVXNlQWNjZWxlcmF0ZWREcmF3aW5n
IHsgZmFsc2UgfTsKLSAgICBib29sIG1fc2hvdWxkVXNlUmVtb3RlTGF5ZXJUcmVlIHsgZmFsc2Ug
fTsKLQorICAgIAogICAgIGJvb2wgbV9zaG91bGRMb2dDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJv
dGVjdGlvblNwYWNlIHsgZmFsc2UgfTsKICAgICBib29sIG1fc2hvdWxkTG9nRG93bmxvYWRDYWxs
YmFja3MgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9zaG91bGRMb2dIaXN0b3J5Q2xpZW50Q2FsbGJh
Y2tzIHsgZmFsc2UgfTsKLSAgICBib29sIG1fc2hvdWxkU2hvd1dlYlZpZXcgeyBmYWxzZSB9Owot
ICAgIAotICAgIGJvb2wgbV9zaG91bGRTaG93VG91Y2hlcyB7IGZhbHNlIH07CiAgICAgYm9vbCBt
X2NoZWNrRm9yV29ybGRMZWFrcyB7IGZhbHNlIH07CiAKICAgICBib29sIG1fYWxsb3dBbnlIVFRQ
U0NlcnRpZmljYXRlRm9yQWxsb3dlZEhvc3RzIHsgZmFsc2UgfTsKSW5kZXg6IFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCShyZXZpc2lvbiAyNjc5NDgpCisrKyBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTMxLDExICsxMzEsMTEgQEAgYm9vbCBUZXN0SW52b2NhdGlvbjo6c2hvdWxkTG9nSGlzdG9yeUNs
aQogV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gVGVzdEludm9jYXRpb246OmNy
ZWF0ZVRlc3RTZXR0aW5nc0RpY3Rpb25hcnkoKQogewogICAgIGF1dG8gYmVnaW5UZXN0TWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7Ci0gICAgc2V0VmFs
dWUoYmVnaW5UZXN0TWVzc2FnZUJvZHksICJVc2VGbGV4aWJsZVZpZXdwb3J0Iiwgb3B0aW9ucygp
LnVzZUZsZXhpYmxlVmlld3BvcnQpOworICAgIHNldFZhbHVlKGJlZ2luVGVzdE1lc3NhZ2VCb2R5
LCAiVXNlRmxleGlibGVWaWV3cG9ydCIsIG9wdGlvbnMoKS51c2VGbGV4aWJsZVZpZXdwb3J0KCkp
OwogICAgIHNldFZhbHVlKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAiRHVtcFBpeGVscyIsIG1fZHVt
cFBpeGVscyk7CiAgICAgc2V0VmFsdWUoYmVnaW5UZXN0TWVzc2FnZUJvZHksICJUaW1lb3V0Iiwg
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1fdGltZW91dC5taWxsaXNlY29uZHMoKSkpOwogICAgIHNl
dFZhbHVlKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAiRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIiwg
bV9kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIpOwotICAgIHNldFZhbHVlKGJlZ2luVGVzdE1lc3Nh
Z2VCb2R5LCAiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMiLCBvcHRpb25zKCkuYWRkaXRp
b25hbFN1cHBvcnRlZEltYWdlVHlwZXMuY19zdHIoKSk7CisgICAgc2V0VmFsdWUoYmVnaW5UZXN0
TWVzc2FnZUJvZHksICJhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIsIG9wdGlvbnMoKS5h
ZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcygpLmNfc3RyKCkpOwogICAgIHJldHVybiBiZWdp
blRlc3RNZXNzYWdlQm9keTsKIH0KIApJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
T3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0T3B0
aW9ucy5jcHAJKHJldmlzaW9uIDI2Nzk0OCkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dE9wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw0OCArMjYsMjU0IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdE9wdGlvbnMuaCIKIAorI2luY2x1ZGUgIlN0cmlu
Z0Z1bmN0aW9ucy5oIgorI2luY2x1ZGUgIlRlc3RDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiU3Rk
RmlsZXN5c3RlbS5oIgorI2luY2x1ZGUgPGZzdHJlYW0+CisjaW5jbHVkZSA8aW9zdHJlYW0+CiAj
aW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCisjZGVmaW5lIERVTVBfRkVBVFVSRVMgMAorCiBuYW1lc3Bh
Y2UgV1RSIHsKIAotc3RhdGljIGJvb2wgcGF0aENvbnRhaW5zKGNvbnN0IHN0ZDo6c3RyaW5nJiBw
YXRoT3JVUkwsIGNvbnN0IGNoYXIqIHN1YnN0cmluZykKKyNpZiBEVU1QX0ZFQVRVUkVTCitzdGF0
aWMgdm9pZCBkdW1wRmVhdHVyZXMoY29uc3QgVGVzdEZlYXR1cmVzJiBmZWF0dXJlcykKIHsKLSAg
ICBTdHJpbmcgcGF0aChwYXRoT3JVUkwuY19zdHIoKSk7Ci0gICAgcmV0dXJuIHBhdGguY29udGFp
bnMoc3Vic3RyaW5nKTsgLy8gQ2FzZS1pbnNlbnNpdGl2ZS4KKyAgICBpZiAoZmVhdHVyZXMuZXhw
ZXJpbWVudGFsRmVhdHVyZXMuZW1wdHkoKSAmJiBmZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVy
ZXMuZW1wdHkoKSAmJiBmZWF0dXJlcy5ib29sRmVhdHVyZXMuZW1wdHkoKSAmJiBmZWF0dXJlcy5k
b3VibGVGZWF0dXJlcy5lbXB0eSgpICYmIGZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVzLmVtcHR5KCkg
JiYgZmVhdHVyZXMuc3RyaW5nVmVjdG9yRmVhdHVyZXMuZW1wdHkoKSkgeworICAgICAgICBzdGQ6
OmNlcnIgPDwgIiAgW0VNUFRZXVxuIjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBpZiAoIWZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzLmVtcHR5KCkpIHsKKyAgICAgICAg
c3RkOjpjZXJyIDw8ICIgIEV4cGVyaW1lbnRhbCBGZWF0dXJlczogXG4iOworICAgICAgICBmb3Ig
KGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMpCisgICAg
ICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8PCAiOiAiIDw8IHZhbHVlIDw8ICdc
bic7CisgICAgfQorICAgIGlmICghZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzLmVtcHR5
KCkpIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICIgIEludGVybmFsIEZlYXR1cmVzOiBcbiI7Cisg
ICAgICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBmZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVh
dHVyZXMpCisgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8PCAiOiAiIDw8
IHZhbHVlIDw8ICdcbic7CisgICAgfQorICAgIGlmICghZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmVt
cHR5KCkpIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICIgIEJvb2wgRmVhdHVyZXM6IFxuIjsKKyAg
ICAgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGZlYXR1cmVzLmJvb2xGZWF0dXJlcykKKyAg
ICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAgICIgPDwga2V5IDw8ICI6ICIgPDwgdmFsdWUgPDwg
J1xuJzsKKyAgICB9CisgICAgaWYgKCFmZWF0dXJlcy5kb3VibGVGZWF0dXJlcy5lbXB0eSgpKSB7
CisgICAgICAgIHN0ZDo6Y2VyciA8PCAiICBEb3VibGUgRmVhdHVyZXM6IFxuIjsKKyAgICAgICAg
Zm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGZlYXR1cmVzLmRvdWJsZUZlYXR1cmVzKQorICAgICAg
ICAgICAgc3RkOjpjZXJyIDw8ICIgICAgIiA8PCBrZXkgPDwgIjogIiA8PCB2YWx1ZSA8PCAnXG4n
OworICAgIH0KKyAgICBpZiAoIWZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVzLmVtcHR5KCkpIHsKKyAg
ICAgICAgc3RkOjpjZXJyIDw8ICIgIFN0cmluZyBGZWF0dXJlczogXG4iOworICAgICAgICBmb3Ig
KGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMpCisgICAgICAgICAg
ICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8PCAiOiAiIDw8IHZhbHVlIDw8ICdcbic7Cisg
ICAgfQorICAgIGlmICghZmVhdHVyZXMuc3RyaW5nVmVjdG9yRmVhdHVyZXMuZW1wdHkoKSkgewor
ICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgU3RyaW5nIFZlY3RvciBGZWF0dXJlczogXG4iOworICAg
ICAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVyZXMuc3RyaW5nVmVjdG9yRmVhdHVy
ZXMpCisgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8PCAiOiBOdW1iZXIg
b2Ygc3RyaW5ncyAiIDw8IHZhbHVlLnNpemUoKSA8PCAnXG4nOworICAgIH0KIH0KKyNlbmRpZgog
Ci1zdGF0aWMgYm9vbCBzaG91bGRNYWtlVmlld3BvcnRGbGV4aWJsZShjb25zdCBzdGQ6OnN0cmlu
ZyYgcGF0aE9yVVJMKQorZW51bSBjbGFzcyBLZXlUeXBlIHsKKyAgICBCb29sLAorICAgIERvdWJs
ZSwKKyAgICBTdHJpbmcsCisgICAgU3RyaW5nUmVsYXRpdmVQYXRoLAorICAgIFN0cmluZ1VSTCwK
KyAgICBTdHJpbmdWZWN0b3IsCisgICAgVW5rbm93bgorfTsKKworc3RhdGljIEtleVR5cGUga2V5
VHlwZShzdGQ6OnN0cmluZyBrZXkpCiB7Ci0gICAgcmV0dXJuIHBhdGhDb250YWlucyhwYXRoT3JV
UkwsICJ2aWV3cG9ydC8iKSAmJiAhcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInZpc3VhbC12aWV3
cG9ydC8iKTsKKyAgICBzdGF0aWMgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBLZXlU
eXBlPiBrZXlUeXBlTWFwIHsKKyAgICAgICAgeyAidXNlVGhyZWFkZWRTY3JvbGxpbmciLCBLZXlU
eXBlOjpCb29sIH0sCisgICAgICAgIHsgInVzZUFjY2VsZXJhdGVkRHJhd2luZyIsIEtleVR5cGU6
OkJvb2wgfSwKKyAgICAgICAgeyAidXNlUmVtb3RlTGF5ZXJUcmVlIiwgS2V5VHlwZTo6Qm9vbCB9
LAorICAgICAgICB7ICJzaG91bGRTaG93V2ViVmlldyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAg
ICAgeyAidXNlRmxleGlibGVWaWV3cG9ydCIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAi
aXNTVkdUZXN0IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VEYXRhRGV0ZWN0aW9u
IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VNb2NrU2Nyb2xsYmFycyIsIEtleVR5
cGU6OkJvb2wgfSwKKyAgICAgICAgeyAibmVlZHNTaXRlU3BlY2lmaWNRdWlya3MiLCBLZXlUeXBl
OjpCb29sIH0sCisgICAgICAgIHsgImlnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzIiwgS2V5VHlw
ZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0eSIs
IEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQXR0YWNobWVudEVsZW1lbnQiLCBL
ZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUludGVyc2VjdGlvbk9ic2VydmVyIiwg
S2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJ1c2VFcGhlbWVyYWxTZXNzaW9uIiwgS2V5VHlw
ZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVNZW51SXRlbUVsZW1lbnQiLCBLZXlUeXBlOjpC
b29sIH0sCisgICAgICAgIHsgImVuYWJsZUtleWdlbkVsZW1lbnQiLCBLZXlUeXBlOjpCb29sIH0s
CisgICAgICAgIHsgImVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMiLCBLZXlUeXBlOjpCb29sIH0s
CisgICAgICAgIHsgImVuYWJsZVBvaW50ZXJMb2NrIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAg
ICB7ICJlbmFibGVXZWJBdXRoZW50aWNhdGlvbiIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAg
eyAiZW5hYmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IiLCBLZXlUeXBlOjpC
b29sIH0sCisgICAgICAgIHsgImVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyIsIEtleVR5cGU6OkJv
b2wgfSwKKyAgICAgICAgeyAic2hvdWxkU2hvd1RvdWNoZXMiLCBLZXlUeXBlOjpCb29sIH0sCisg
ICAgICAgIHsgImR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIsIEtleVR5cGU6OkJvb2wgfSwKKyAg
ICAgICAgeyAiYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMi
LCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImRvbVBhc3RlQWxsb3dlZCIsIEtleVR5cGU6
OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQ29sb3JGaWx0ZXIiLCBLZXlUeXBlOjpCb29sIH0s
CisgICAgICAgIHsgInB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUiLCBLZXlUeXBl
OjpCb29sIH0sCisgICAgICAgIHsgInJ1blNpbmdseSIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAg
ICAgeyAiY2hlY2tGb3JXb3JsZExlYWtzIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJz
aG91bGRJZ25vcmVNZXRhVmlld3BvcnQiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInNw
ZWxsQ2hlY2tpbmdEb3RzIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVTZXJ2
aWNlQ29udHJvbHMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVkaXRhYmxlIiwgS2V5
VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJzaG91bGRIYW5kbGVSdW5PcGVuUGFuZWwiLCBLZXlU
eXBlOjpCb29sIH0sCisgICAgICAgIHsgInNob3VsZFByZXNlbnRQb3BvdmVycyIsIEtleVR5cGU6
OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQXBwTmFwIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAg
ICAgICB7ICJlbmFibGVCYWNrRm9yd2FyZENhY2hlIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAg
ICB7ICJhbGxvd3NMaW5rUHJldmlldyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5h
YmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsg
ImVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2VzcyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAg
ICAgeyAiZW5hYmxlQ2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3MiLCBLZXlUeXBlOjpCb29sIH0sCisg
ICAgICAgIHsgImVuYWJsZUNhcHR1cmVBdWRpb0luR1BVUHJvY2VzcyIsIEtleVR5cGU6OkJvb2wg
fSwKKyAgICAgICAgeyAiYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyIsIEtleVR5cGU6OkJv
b2wgfSwKKyAgICAgICAgeyAiZW5hYmxlSW5BcHBCcm93c2VyUHJpdmFjeSIsIEtleVR5cGU6OkJv
b2wgfSwKKyAgICAgICAgeyAiaXNBcHBCb3VuZFdlYlZpZXciLCBLZXlUeXBlOjpCb29sIH0sCisg
ICAgICAgIHsgImlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMiLCBLZXlUeXBlOjpC
b29sIH0sCisgICAgICAgIHsgImVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uIiwgS2V5VHlw
ZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiIsIEtl
eVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAidXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dCIs
IEtleVR5cGU6OkJvb2wgfSwKKyAgICAKKyAgICAgICAgeyAiY29udGVudEluc2V0LnRvcCIsIEtl
eVR5cGU6OkRvdWJsZSB9LAorICAgICAgICB7ICJkZXZpY2VTY2FsZUZhY3RvciIsIEtleVR5cGU6
OkRvdWJsZSB9LAorCisgICAgICAgIHsgImpzY09wdGlvbnMiLCBLZXlUeXBlOjpTdHJpbmcgfSwK
KyAgICAgICAgeyAiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMiLCBLZXlUeXBlOjpTdHJp
bmcgfSwKKyAgICAgICAgeyAiY29udGVudE1vZGUiLCBLZXlUeXBlOjpTdHJpbmcgfSwKKyAgICAg
ICAgeyAiYXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyIiwgS2V5VHlwZTo6U3RyaW5nIH0sCisg
ICAgICAgIHsgImFwcGxpY2F0aW9uTWFuaWZlc3QiLCBLZXlUeXBlOjpTdHJpbmdSZWxhdGl2ZVBh
dGggfSwKKyAgICAgICAgeyAic3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMIiwgS2V5VHlwZTo6
U3RyaW5nVVJMIH0sCisKKyAgICAgICAgeyAibGFuZ3VhZ2UiLCBLZXlUeXBlOjpTdHJpbmdWZWN0
b3IgfSwKKyAgICB9OworICAgIAorICAgIGF1dG8gaXQgPSBrZXlUeXBlTWFwLmZpbmQoa2V5KTsK
KyAgICBpZiAoaXQgPT0ga2V5VHlwZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIEtleVR5cGU6
OlVua25vd247CisgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CiB9CiAKLXN0YXRpYyBib29sIHNob3Vs
ZFVzZUZpeGVkTGF5b3V0KGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCitzdGF0aWMgYm9v
bCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKQog
ewotI2lmIEVOQUJMRShDU1NfREVWSUNFX0FEQVBUQVRJT04pCi0gICAgaWYgKHBhdGhDb250YWlu
cyhwYXRoT3JVUkwsICJkZXZpY2UtYWRhcHQvIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwg
ImRldmljZS1hZGFwdFxcIikpCisgICAgaWYgKHZhbHVlID09ICJ0cnVlIikKICAgICAgICAgcmV0
dXJuIHRydWU7Ci0jZW5kaWYKKyAgICBpZiAodmFsdWUgPT0gImZhbHNlIikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgTE9HX0VSUk9SKCJGb3VuZCB1bmV4cGVjdGVkIHZhbHVlICclcycg
Zm9yIGJvb2xlYW4gb3B0aW9uLiBFeHBlY3RlZCAndHJ1ZScgb3IgJ2ZhbHNlJy4iLCB2YWx1ZS5j
X3N0cigpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBib29sIGlzU1ZHVGVzdFBh
dGgoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKK3N0YXRpYyBzdGQ6OnN0cmluZyBwYXJz
ZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzUmVsYXRpdmVQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiB2
YWx1ZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKK3sKKyAgICBhdXRvIGJhc2VVUkwg
PSBhZG9wdFdLKFRlc3RDb250cm9sbGVyOjpjcmVhdGVUZXN0VVJMKHBhdGhPclVSTC5jX3N0cigp
KSk7CisgICAgYXV0byByZWxhdGl2ZVVSTCA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoQmFzZVVS
TChiYXNlVVJMLmdldCgpLCB2YWx1ZS5jX3N0cigpKSk7CisgICAgcmV0dXJuIHRvU1REKGFkb3B0
V0soV0tVUkxDb3B5UGF0aChyZWxhdGl2ZVVSTC5nZXQoKSkpKTsKK30KKworc3RhdGljIHN0ZDo6
c3RyaW5nIHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNVUkwoY29uc3Qgc3RkOjpzdHJpbmcm
IHZhbHVlKQogewotICAgIHJldHVybiBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAic3ZnL1czQy1T
VkctMS4xIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInN2Z1xcVzNDLVNWRy0xLjEiKTsK
KyAgICByZXR1cm4gdG9TVEQoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcoVGVzdENvbnRyb2xsZXI6
OmNyZWF0ZVRlc3RVUkwodmFsdWUuY19zdHIoKSkpKSk7CiB9CiAKLXN0YXRpYyBib29sIHNob3Vs
ZFVzZUVwaGVtZXJhbFNlc3Npb24oY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKK3N0YXRp
YyBUZXN0RmVhdHVyZXMgcGFyc2VUZXN0SGVhZGVyKHN0ZDo6ZmlsZXN5c3RlbTo6cGF0aCBwYXRo
LCBjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQogewotICAgIHJldHVybiBwYXRoQ29udGFp
bnMocGF0aE9yVVJMLCAidzNjL0luZGV4ZWREQi1wcml2YXRlLWJyb3dzaW5nIikgfHwgcGF0aENv
bnRhaW5zKHBhdGhPclVSTCwgInczY1xcSW5kZXhlZERCLXByaXZhdGUtYnJvd3NpbmciKTsKKyAg
ICBUZXN0RmVhdHVyZXMgZmVhdHVyZXM7CisgICAgaWYgKCFzdGQ6OmZpbGVzeXN0ZW06OmV4aXN0
cyhwYXRoKSkKKyAgICAgICAgcmV0dXJuIGZlYXR1cmVzOworCisgICAgc3RkOjppZnN0cmVhbSBm
aWxlKHBhdGgpOworICAgIGlmICghZmlsZS5nb29kKCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJD
b3VsZCBub3Qgb3BlbiBmaWxlIHRvIGluc3BlY3QgdGVzdCBoZWFkZXJzIGluICVzIiwgcGF0aC5j
X3N0cigpKTsKKyAgICAgICAgcmV0dXJuIGZlYXR1cmVzOworICAgIH0KKworICAgIHN0ZDo6c3Ry
aW5nIG9wdGlvbnM7CisgICAgZ2V0bGluZShmaWxlLCBvcHRpb25zKTsKKyAgICBzdGQ6OnN0cmlu
ZyBiZWdpblN0cmluZygid2Via2l0LXRlc3QtcnVubmVyIFsgIik7CisgICAgc3RkOjpzdHJpbmcg
ZW5kU3RyaW5nKCIgXSIpOworICAgIHNpemVfdCBiZWdpbkxvY2F0aW9uID0gb3B0aW9ucy5maW5k
KGJlZ2luU3RyaW5nKTsKKyAgICBpZiAoYmVnaW5Mb2NhdGlvbiA9PSBzdGQ6OnN0cmluZzo6bnBv
cykKKyAgICAgICAgcmV0dXJuIGZlYXR1cmVzOworICAgIHNpemVfdCBlbmRMb2NhdGlvbiA9IG9w
dGlvbnMuZmluZChlbmRTdHJpbmcsIGJlZ2luTG9jYXRpb24pOworICAgIGlmIChlbmRMb2NhdGlv
biA9PSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBm
aW5kIGVuZCBvZiB0ZXN0IGhlYWRlciBpbiAlcyIsIHBhdGguY19zdHIoKSk7CisgICAgICAgIHJl
dHVybiBmZWF0dXJlczsKKyAgICB9CisgICAgc3RkOjpzdHJpbmcgcGFpclN0cmluZyA9IG9wdGlv
bnMuc3Vic3RyKGJlZ2luTG9jYXRpb24gKyBiZWdpblN0cmluZy5zaXplKCksIGVuZExvY2F0aW9u
IC0gKGJlZ2luTG9jYXRpb24gKyBiZWdpblN0cmluZy5zaXplKCkpKTsKKyAgICBzaXplX3QgcGFp
clN0YXJ0ID0gMDsKKyAgICB3aGlsZSAocGFpclN0YXJ0IDwgcGFpclN0cmluZy5zaXplKCkpIHsK
KyAgICAgICAgc2l6ZV90IHBhaXJFbmQgPSBwYWlyU3RyaW5nLmZpbmQoIiAiLCBwYWlyU3RhcnQp
OworICAgICAgICBpZiAocGFpckVuZCA9PSBzdGQ6OnN0cmluZzo6bnBvcykKKyAgICAgICAgICAg
IHBhaXJFbmQgPSBwYWlyU3RyaW5nLnNpemUoKTsKKyAgICAgICAgc2l6ZV90IGVxdWFsc0xvY2F0
aW9uID0gcGFpclN0cmluZy5maW5kKCI9IiwgcGFpclN0YXJ0KTsKKyAgICAgICAgaWYgKGVxdWFs
c0xvY2F0aW9uID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICAgICAgICBMT0dfRVJST1Io
Ik1hbGZvcm1lZCBvcHRpb24gaW4gdGVzdCBoZWFkZXIgKGNvdWxkIG5vdCBmaW5kICc9JyBjaGFy
YWN0ZXIpIGluICVzIiwgcGF0aC5jX3N0cigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGF1dG8ga2V5ID0gcGFpclN0cmluZy5zdWJzdHIocGFpclN0YXJ0LCBlcXVh
bHNMb2NhdGlvbiAtIHBhaXJTdGFydCk7CisgICAgICAgIGF1dG8gdmFsdWUgPSBwYWlyU3RyaW5n
LnN1YnN0cihlcXVhbHNMb2NhdGlvbiArIDEsIHBhaXJFbmQgLSAoZXF1YWxzTG9jYXRpb24gKyAx
KSk7CisKKyAgICAgICAgaWYgKGtleS5yZmluZCgiZXhwZXJpbWVudGFsOiIpID09IDApIHsKKyAg
ICAgICAgICAgIGtleSA9IGtleS5zdWJzdHIoMTMpOworICAgICAgICAgICAgZmVhdHVyZXMuZXhw
ZXJpbWVudGFsRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFs
dWUodmFsdWUpIH0pOworICAgICAgICB9IGVsc2UgaWYgKGtleS5yZmluZCgiaW50ZXJuYWw6Iikg
PT0gMCkgeworICAgICAgICAgICAga2V5ID0ga2V5LnN1YnN0cig5KTsKKyAgICAgICAgICAgIGZl
YXR1cmVzLmludGVybmFsRGVidWdGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHBhcnNlQm9vbGVhblRl
c3RIZWFkZXJWYWx1ZSh2YWx1ZSkgfSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGtl
eVR5cGUoa2V5KSkgeworICAgICAgICBjYXNlIEtleVR5cGU6OkJvb2w6CisgICAgICAgICAgICBm
ZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVy
VmFsdWUodmFsdWUpIH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgS2V5VHlw
ZTo6RG91YmxlOgorICAgICAgICAgICAgZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMuaW5zZXJ0KHsg
a2V5LCBzdGQ6OnN0b2QodmFsdWUpIH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgS2V5VHlwZTo6U3RyaW5nOgorICAgICAgICAgICAgZmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMu
aW5zZXJ0KHsga2V5LCB2YWx1ZSB9KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEtleVR5cGU6OlN0cmluZ1JlbGF0aXZlUGF0aDoKKyAgICAgICAgICAgIGZlYXR1cmVzLnN0cmlu
Z0ZlYXR1cmVzLmluc2VydCh7IGtleSwgcGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1JlbGF0
aXZlUGF0aCh2YWx1ZSwgcGF0aE9yVVJMKSB9KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEtleVR5cGU6OlN0cmluZ1VSTDoKKyAgICAgICAgICAgIGZlYXR1cmVzLnN0cmluZ0Zl
YXR1cmVzLmluc2VydCh7IGtleSwgcGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1VSTCh2YWx1
ZSkgfSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmdW
ZWN0b3I6CisgICAgICAgICAgICBmZWF0dXJlcy5zdHJpbmdWZWN0b3JGZWF0dXJlcy5pbnNlcnQo
eyBrZXksIHNwbGl0KHZhbHVlLCAnLCcpIH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgS2V5VHlwZTo6VW5rbm93bjoKKyAgICAgICAgICAgIExPR19FUlJPUigiVW5rbm93biBr
ZXksICclcywgaW4gdGVzdCBoZWFkZXIgaW4gJXMiLCBrZXkuY19zdHIoKSwgcGF0aC5jX3N0cigp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcGFpclN0YXJ0ID0g
cGFpckVuZCArIDE7CisgICAgfQorCisgICAgcmV0dXJuIGZlYXR1cmVzOworfQorCitzdGF0aWMg
Ym9vbCBwYXRoQ29udGFpbnMoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCwgY29uc3QgY2hh
ciogc3Vic3RyaW5nKQoreworICAgIFN0cmluZyBwYXRoKHBhdGhPclVSTC5jX3N0cigpKTsKKyAg
ICByZXR1cm4gcGF0aC5jb250YWlucyhzdWJzdHJpbmcpOyAvLyBDYXNlLWluc2Vuc2l0aXZlLgog
fQogCi1zdGF0aWMgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3JGb3JUZXN0KGNvbnN0IHN0ZDo6c3Ry
aW5nJiBwYXRoT3JVUkwpCitzdGF0aWMgT3B0aW9uYWw8ZG91YmxlPiBkZXZpY2VTY2FsZUZhY3Rv
ckZvclRlc3QoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKIHsKICAgICBpZiAocGF0aENv
bnRhaW5zKHBhdGhPclVSTCwgIi9oaWRwaS0zeC0iKSkKICAgICAgICAgcmV0dXJuIDM7CiAgICAg
aWYgKHBhdGhDb250YWlucyhwYXRoT3JVUkwsICIvaGlkcGktIikpCiAgICAgICAgIHJldHVybiAy
OwotICAgIHJldHVybiAxOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIHN0YXRpYyBi
b29sIHNob3VsZER1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihjb25zdCBzdGQ6OnN0cmluZyYgcGF0
aE9yVVJMKQpAQCAtODMsMTQgKzI4OSw3OSBAQCBzdGF0aWMgYm9vbCBzaG91bGREdW1wSlNDb25z
b2xlTG9nSW5TdGRFCiAgICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhv
c3Q6ODgwMC93ZWJzb2NrZXRzIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9z
dDo5NDQzL3dlYnNvY2tldHMiKTsKIH0KIAotVGVzdE9wdGlvbnM6OlRlc3RPcHRpb25zKGNvbnN0
IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCi0gICAgOiB1c2VGbGV4aWJsZVZpZXdwb3J0KHNob3Vs
ZE1ha2VWaWV3cG9ydEZsZXhpYmxlKHBhdGhPclVSTCkpCi0gICAgLCB1c2VGaXhlZExheW91dChz
aG91bGRVc2VGaXhlZExheW91dChwYXRoT3JVUkwpKQotICAgICwgaXNTVkdUZXN0KGlzU1ZHVGVz
dFBhdGgocGF0aE9yVVJMKSkKLSAgICAsIHVzZUVwaGVtZXJhbFNlc3Npb24oc2hvdWxkVXNlRXBo
ZW1lcmFsU2Vzc2lvbihwYXRoT3JVUkwpKQotICAgICwgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJy
KHNob3VsZER1bXBKU0NvbnNvbGVMb2dJblN0ZEVycihwYXRoT3JVUkwpKQotICAgICwgZGV2aWNl
U2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3JGb3JUZXN0KHBhdGhPclVSTCkpCitUZXN0RmVh
dHVyZXMgaGFyZGNvZGVkRmVhdHVyZXNCYXNlZE9uUGF0aEZvclRlc3QoY29uc3QgVGVzdENvbW1h
bmQmIGNvbW1hbmQpCit7CisgICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVzOworCisgICAgLy8gRklY
TUU6IFdlIHNob3VsZCB0cnkgdG8gcmVwbGFjZSB0aGUgcmVzZXQgb2YgdGhlc2Ugd2l0aCBUZXN0
T3B0aW9ucy50eHQgYmFzZWQgc29sdXRpb25zLgorCisgICAgaWYgKHNob3VsZER1bXBKU0NvbnNv
bGVMb2dJblN0ZEVycihjb21tYW5kLnBhdGhPclVSTCkpCisgICAgICAgIGZlYXR1cmVzLmJvb2xG
ZWF0dXJlcy5pbnNlcnQoeyAiZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIiwgdHJ1ZSB9KTsKKyAg
ICBpZiAoYXV0byBkZXZpY2VTY2FsZUZhY3RvciA9IGRldmljZVNjYWxlRmFjdG9yRm9yVGVzdChj
b21tYW5kLnBhdGhPclVSTCk7IGRldmljZVNjYWxlRmFjdG9yICE9IFdURjo6bnVsbG9wdCkKKyAg
ICAgICAgZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMuaW5zZXJ0KHsgImRldmljZVNjYWxlRmFjdG9y
IiwgZGV2aWNlU2NhbGVGYWN0b3IudmFsdWUoKSB9KTsKKworICAgIHJldHVybiBmZWF0dXJlczsK
K30KKwordm9pZCBtZXJnZShUZXN0RmVhdHVyZXMmIGJhc2UsIFRlc3RGZWF0dXJlcyBhZGRpdGlv
bmFsKQoreworLy8gICAgYWRkaXRpb25hbC5leHBlcmltZW50YWxGZWF0dXJlcy5tZXJnZShiYXNl
LmV4cGVyaW1lbnRhbEZlYXR1cmVzKTsKKy8vICAgIGFkZGl0aW9uYWwuaW50ZXJuYWxEZWJ1Z0Zl
YXR1cmVzLm1lcmdlKGJhc2UuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKTsKKy8vICAgIGFkZGl0aW9u
YWwuYm9vbEZlYXR1cmVzLm1lcmdlKGJhc2UuYm9vbEZlYXR1cmVzKTsKKy8vICAgIGFkZGl0aW9u
YWwuZG91YmxlRmVhdHVyZXMubWVyZ2UoYmFzZS5kb3VibGVGZWF0dXJlcyk7CisvLyAgICBhZGRp
dGlvbmFsLnN0cmluZ0ZlYXR1cmVzLm1lcmdlKGJhc2Uuc3RyaW5nRmVhdHVyZXMpOworLy8gICAg
YWRkaXRpb25hbC5zdHJpbmdWZWN0b3JGZWF0dXJlcy5tZXJnZShiYXNlLnN0cmluZ1ZlY3RvckZl
YXR1cmVzKTsKKy8vICAgIGJhc2UgPSBhZGRpdGlvbmFsOworCisgICAgZm9yIChhdXRvIFtrZXks
IHZhbHVlXSA6IGFkZGl0aW9uYWwuZXhwZXJpbWVudGFsRmVhdHVyZXMpCisgICAgICAgIGJhc2Uu
ZXhwZXJpbWVudGFsRmVhdHVyZXMuaW5zZXJ0X29yX2Fzc2lnbihrZXksIHZhbHVlKTsKKyAgICBm
b3IgKGF1dG8gW2tleSwgdmFsdWVdIDogYWRkaXRpb25hbC5pbnRlcm5hbERlYnVnRmVhdHVyZXMp
CisgICAgICAgIGJhc2UuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzLmluc2VydF9vcl9hc3NpZ24oa2V5
LCB2YWx1ZSk7CisgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGFkZGl0aW9uYWwuYm9vbEZl
YXR1cmVzKQorICAgICAgICBiYXNlLmJvb2xGZWF0dXJlcy5pbnNlcnRfb3JfYXNzaWduKGtleSwg
dmFsdWUpOworICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBhZGRpdGlvbmFsLmRvdWJsZUZl
YXR1cmVzKQorICAgICAgICBiYXNlLmRvdWJsZUZlYXR1cmVzLmluc2VydF9vcl9hc3NpZ24oa2V5
LCB2YWx1ZSk7CisgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGFkZGl0aW9uYWwuc3RyaW5n
RmVhdHVyZXMpCisgICAgICAgIGJhc2Uuc3RyaW5nRmVhdHVyZXMuaW5zZXJ0X29yX2Fzc2lnbihr
ZXksIHZhbHVlKTsKKyAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogYWRkaXRpb25hbC5zdHJp
bmdWZWN0b3JGZWF0dXJlcykKKyAgICAgICAgYmFzZS5zdHJpbmdWZWN0b3JGZWF0dXJlcy5pbnNl
cnRfb3JfYXNzaWduKGtleSwgdmFsdWUpOworfQorCitUZXN0RmVhdHVyZXMgZmVhdHVyZURlZmF1
bHRzRnJvbVRlc3RPcHRpb25zRmlsZXNGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJiBjb21tYW5k
KQoreworICAgIHN0ZDo6ZmlsZXN5c3RlbTo6cGF0aCBwYXRoID0gY29tbWFuZC5hYnNvbHV0ZVBh
dGg7CisKKyAgICAvLyBHYXRoZXIgZGlyZWN0b3JpZXMgdGhhdCBtYXkgY29udGFpbiBUZXN0SGVh
ZGVycyBmaWxlcy4KKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OmZpbGVzeXN0ZW06OnBhdGg+IGRpcmVj
dG9yaWVzVG9DaGVjazsKKyAgICBkbyB7CisgICAgICAgIHBhdGggPSBwYXRoLnBhcmVudF9wYXRo
KCk7CisgICAgICAgIGRpcmVjdG9yaWVzVG9DaGVjay5wdXNoX2JhY2socGF0aCk7CisgICAgfSB3
aGlsZSAocGF0aC5maWxlbmFtZSgpICE9ICJMYXlvdXRUZXN0cyIpOworCisgICAgLy8gSXRlcmF0
ZSB0aGUgZGlyZWN0b3JpZXMgdGhhdCBtYXkgY29udGFpbiAnVGVzdE9wdGlvbnMudHh0JyBmaWxl
cyBmcm9tIGxlYXN0IHRvIG1vc3QKKyAgICAvLyBzcGVjaWZpYywgYW5kIG1lcmdlIGluIGFueSBm
ZWF0dXJlcyBmb3VuZC4KKyAgICBUZXN0RmVhdHVyZXMgZmVhdHVyZXM7CisgICAgZm9yIChhdXRv
IGRpcmVjdG9yeVRvQ2hlY2sgOiBXVEY6Om1ha2VSZXZlcnNlZFJhbmdlKGRpcmVjdG9yaWVzVG9D
aGVjaykpIHsKKyAgICAgICAgYXV0byB0ZXN0SGVhZGVyRmlsZSA9IGRpcmVjdG9yeVRvQ2hlY2sg
LyAiVGVzdE9wdGlvbnMudHh0IjsKKyAgICAgICAgYXV0byB0ZXN0T3B0aW9uc0ZlYXR1cmVzID0g
cGFyc2VUZXN0SGVhZGVyKHRlc3RIZWFkZXJGaWxlLCBjb21tYW5kLnBhdGhPclVSTCk7CisgICAg
ICAgIG1lcmdlKGZlYXR1cmVzLCB0ZXN0T3B0aW9uc0ZlYXR1cmVzKTsKKyAgICB9CisgICAgCisg
ICAgcmV0dXJuIGZlYXR1cmVzOworfQorCitUZXN0RmVhdHVyZXMgZmVhdHVyZURlZmF1bHRzRnJv
bVRlc3RIZWFkZXJGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJiBjb21tYW5kKQogeworICAgIHJl
dHVybiBwYXJzZVRlc3RIZWFkZXIoY29tbWFuZC5hYnNvbHV0ZVBhdGgsIGNvbW1hbmQucGF0aE9y
VVJMKTsKK30KKworVGVzdE9wdGlvbnM6OlRlc3RPcHRpb25zKFRlc3RGZWF0dXJlcyBmZWF0dXJl
cykKKyAgICA6IG1fZmVhdHVyZXMgeyBmZWF0dXJlcyB9Cit7CisjaWYgRFVNUF9GRUFUVVJFUwor
ICAgIHN0ZDo6Y2VyciA8PCAiRFVNUElORyBGRUFUVVJFU1xuIjsKKyAgICBkdW1wRmVhdHVyZXMo
bV9mZWF0dXJlcyk7CisjZW5kaWYKIH0KIAogfQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0T3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dE9wdGlvbnMuaAkocmV2aXNpb24gMjY3OTQ4KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0T3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxNjUgKzI1LDE3NiBAQAogCiAjcHJh
Z21hIG9uY2UKIAotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDxvcHRpb25hbD4KKyNpbmNsdWRlIDxzdHJpbmc+Cisj
aW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKyNpbmNsdWRlIDx2ZWN0b3I+CiAKIG5hbWVzcGFjZSBX
VFIgewogCi1zdHJ1Y3QgVGVzdE9wdGlvbnMgewotICAgIHN0cnVjdCBDb250ZXh0T3B0aW9ucyB7
Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IG92ZXJyaWRlTGFuZ3VhZ2VzOwotICAgICAgICBib29s
IGlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMgeyBmYWxzZSB9OwotICAgICAgICBi
b29sIGVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uIHsgdHJ1ZSB9OwotICAgICAgICBib29s
IGVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuIHsgZmFsc2UgfTsKLSAgICAgICAgYm9vbCB1
c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0IHsgZmFsc2UgfTsKLQotICAgICAgICBib29sIGhh
c1NhbWVJbml0aWFsaXphdGlvbk9wdGlvbnMoY29uc3QgQ29udGV4dE9wdGlvbnMmIG9wdGlvbnMp
IGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpZ25vcmVTeW5jaHJvbm91c01lc3Nh
Z2luZ1RpbWVvdXRzICE9IG9wdGlvbnMuaWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0
cwotICAgICAgICAgICAgICAgIHx8IG92ZXJyaWRlTGFuZ3VhZ2VzICE9IG9wdGlvbnMub3ZlcnJp
ZGVMYW5ndWFnZXMKLSAgICAgICAgICAgICAgICB8fCBlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdh
dGlvbiAhPSBvcHRpb25zLmVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uCi0gICAgICAgICAg
ICAgICAgfHwgZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW4gIT0gb3B0aW9ucy5lbmFibGVQ
cm9jZXNzU3dhcE9uV2luZG93T3BlbgotICAgICAgICAgICAgICAgIHx8IHVzZVNlcnZpY2VXb3Jr
ZXJTaG9ydFRpbWVvdXQgIT0gb3B0aW9ucy51c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0KQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBzaG91bGRFbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdh
dGlvbigpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlbmFibGVQcm9jZXNz
U3dhcE9uTmF2aWdhdGlvbiB8fCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbjsKLSAgICAg
ICAgfQotICAgIH07Ci0KLSAgICBib29sIHVzZVRocmVhZGVkU2Nyb2xsaW5nIHsgZmFsc2UgfTsK
LSAgICBib29sIHVzZUFjY2VsZXJhdGVkRHJhd2luZyB7IGZhbHNlIH07Ci0gICAgYm9vbCB1c2VS
ZW1vdGVMYXllclRyZWUgeyBmYWxzZSB9OwotICAgIGJvb2wgc2hvdWxkU2hvd1dlYlZpZXcgeyBm
YWxzZSB9OwotICAgIGJvb2wgdXNlRmxleGlibGVWaWV3cG9ydCB7IGZhbHNlIH07Ci0gICAgYm9v
bCB1c2VGaXhlZExheW91dCB7IGZhbHNlIH07Ci0gICAgYm9vbCBpc1NWR1Rlc3QgeyBmYWxzZSB9
OwotICAgIGJvb2wgdXNlRGF0YURldGVjdGlvbiB7IGZhbHNlIH07Ci0gICAgYm9vbCB1c2VNb2Nr
U2Nyb2xsYmFycyB7IHRydWUgfTsKLSAgICBib29sIG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzIHsg
ZmFsc2UgfTsKLSAgICBib29sIGlnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzIHsgZmFsc2UgfTsK
LSAgICBib29sIHVzZUNoYXJhY3RlclNlbGVjdGlvbkdyYW51bGFyaXR5IHsgZmFsc2UgfTsKLSAg
ICBib29sIGVuYWJsZUF0dGFjaG1lbnRFbGVtZW50IHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJs
ZUludGVyc2VjdGlvbk9ic2VydmVyIHsgZmFsc2UgfTsKLSAgICBib29sIHVzZUVwaGVtZXJhbFNl
c3Npb24geyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlTWVudUl0ZW1FbGVtZW50IHsgZmFsc2Ug
fTsKLSAgICBib29sIGVuYWJsZUtleWdlbkVsZW1lbnQgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5h
YmxlTW9kZXJuTWVkaWFDb250cm9scyB7IHRydWUgfTsKLSAgICBib29sIGVuYWJsZVBvaW50ZXJM
b2NrIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uIHsgdHJ1ZSB9
OwotICAgIGJvb2wgZW5hYmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IgeyB0
cnVlIH07Ci0gICAgYm9vbCBlbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMgeyBmYWxzZSB9OwotICAg
IGJvb2wgc2hvdWxkU2hvd1RvdWNoZXMgeyBmYWxzZSB9OwotICAgIGJvb2wgZHVtcEpTQ29uc29s
ZUxvZ0luU3RkRXJyIHsgZmFsc2UgfTsKLSAgICBib29sIGFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNv
dXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzIHsgZmFsc2UgfTsKLSAgICBib29sIGRvbVBhc3RlQWxs
b3dlZCB7IHRydWUgfTsKLSAgICBib29sIGVuYWJsZUNvbG9yRmlsdGVyIHsgZmFsc2UgfTsKLSAg
ICBib29sIHB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUgeyBmYWxzZSB9OwotICAg
IGJvb2wgcnVuU2luZ2x5IHsgZmFsc2UgfTsKLSAgICBib29sIGNoZWNrRm9yV29ybGRMZWFrcyB7
IGZhbHNlIH07Ci0gICAgYm9vbCBzaG91bGRJZ25vcmVNZXRhVmlld3BvcnQgeyBmYWxzZSB9Owot
ICAgIGJvb2wgc2hvdWxkU2hvd1NwZWxsQ2hlY2tpbmdEb3RzIHsgZmFsc2UgfTsKLSAgICBib29s
IGVuYWJsZVNlcnZpY2VDb250cm9scyB7IGZhbHNlIH07Ci0gICAgYm9vbCBlZGl0YWJsZSB7IGZh
bHNlIH07Ci0gICAgYm9vbCBzaG91bGRIYW5kbGVSdW5PcGVuUGFuZWwgeyB0cnVlIH07Ci0gICAg
Ym9vbCBzaG91bGRQcmVzZW50UG9wb3ZlcnMgeyB0cnVlIH07Ci0gICAgYm9vbCBlbmFibGVBcHBO
YXAgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlQmFja0ZvcndhcmRDYWNoZSB7IGZhbHNlIH07
Ci0gICAgYm9vbCBhbGxvd3NMaW5rUHJldmlldyB7IHRydWUgfTsKLSAgICBib29sIGVuYWJsZUNh
cHR1cmVWaWRlb0luVUlQcm9jZXNzIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUNhcHR1cmVW
aWRlb0luR1BVUHJvY2VzcyB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVDYXB0dXJlQXVkaW9J
blVJUHJvY2VzcyB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVDYXB0dXJlQXVkaW9JbkdQVVBy
b2Nlc3MgeyBmYWxzZSB9OwotICAgIGJvb2wgYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyB7
IHRydWUgfTsKLSAgICBib29sIGVuYWJsZUluQXBwQnJvd3NlclByaXZhY3kgeyBmYWxzZSB9Owot
ICAgIGJvb2wgaXNBcHBCb3VuZFdlYlZpZXcgeyBmYWxzZSB9OwotCi0gICAgZG91YmxlIGNvbnRl
bnRJbnNldFRvcCB7IDAgfTsKLQotICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yIHsgMSB9Owot
ICAgIHN0ZDo6c3RyaW5nIGFwcGxpY2F0aW9uTWFuaWZlc3Q7Ci0gICAgc3RkOjpzdHJpbmcganNj
T3B0aW9uczsKLSAgICBzdGQ6OnN0cmluZyBhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlczsK
LSAgICBzdGQ6OnN0cmluZyBzdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkw7Ci0gICAgSGFzaE1h
cDxTdHJpbmcsIGJvb2w+IGV4cGVyaW1lbnRhbEZlYXR1cmVzOwotICAgIEhhc2hNYXA8U3RyaW5n
LCBib29sPiBpbnRlcm5hbERlYnVnRmVhdHVyZXM7Ci0gICAgU3RyaW5nIGNvbnRlbnRNb2RlOwot
ICAgIFN0cmluZyBhcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXI7Ci0gICAgCi0gICAgQ29udGV4
dE9wdGlvbnMgY29udGV4dE9wdGlvbnM7Ci0KLSAgICBUZXN0T3B0aW9ucyhjb25zdCBzdGQ6OnN0
cmluZyYgcGF0aE9yVVJMKTsKLQotICAgIC8vIEFkZCBoZXJlIG9wdGlvbnMgdGhhdCBjYW4gb25s
eSBiZSBzZXQgdXBvbiBQbGF0Zm9ybVdlYlZpZXcKLSAgICAvLyBpbml0aWFsaXphdGlvbiBhbmQg
bWFrZSBzdXJlIGl0J3MgdXAgdG8gZGF0ZSB3aGVuIGFkZGluZyBuZXcKLSAgICAvLyBvcHRpb25z
IHRvIHRoaXMgc3RydWN0LiBPdGhlcndpc2UsIHRlc3RzIHVzaW5nIHRob3NlIG9wdGlvbnMKLSAg
ICAvLyBtaWdodCBmYWlsIGlmIFdUUiBpcyByZXVzaW5nIGFuIGV4aXN0aW5nIFBsYXRmb3JtV2Vi
Vmlldy4KLSAgICBib29sIGhhc1NhbWVJbml0aWFsaXphdGlvbk9wdGlvbnMoY29uc3QgVGVzdE9w
dGlvbnMmIG9wdGlvbnMpIGNvbnN0CitzdHJ1Y3QgVGVzdENvbW1hbmQ7CisKK3N0cnVjdCBUZXN0
RmVhdHVyZXMgeworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4gZXhw
ZXJpbWVudGFsRmVhdHVyZXM7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBi
b29sPiBpbnRlcm5hbERlYnVnRmVhdHVyZXM7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6
c3RyaW5nLCBib29sPiBib29sRmVhdHVyZXM7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6
c3RyaW5nLCBkb3VibGU+IGRvdWJsZUZlYXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxz
dGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+IHN0cmluZ0ZlYXR1cmVzOworICAgIHN0ZDo6dW5vcmRl
cmVkX21hcDxzdGQ6OnN0cmluZywgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+PiBzdHJpbmdWZWN0
b3JGZWF0dXJlczsKK307CisKK3ZvaWQgbWVyZ2UoVGVzdEZlYXR1cmVzJiBiYXNlLCBUZXN0RmVh
dHVyZXMgYWRkaXRpb25hbCk7CisKK1Rlc3RGZWF0dXJlcyBoYXJkY29kZWRGZWF0dXJlc0Jhc2Vk
T25QYXRoRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYpOworVGVzdEZlYXR1cmVzIGZlYXR1cmVE
ZWZhdWx0c0Zyb21UZXN0T3B0aW9uc0ZpbGVzRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYpOwor
VGVzdEZlYXR1cmVzIGZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0SGVhZGVyRm9yVGVzdChjb25zdCBU
ZXN0Q29tbWFuZCYpOworCitzdHJ1Y3QgQ29udGV4dE9wdGlvbnMgeworICAgIHN0ZDo6dmVjdG9y
PHN0ZDo6c3RyaW5nPiBvdmVycmlkZUxhbmd1YWdlczsKKyAgICBib29sIGlnbm9yZVN5bmNocm9u
b3VzTWVzc2FnaW5nVGltZW91dHM7CisgICAgYm9vbCBlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdh
dGlvbjsKKyAgICBib29sIGVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuOworICAgIGJvb2wg
dXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dDsKKworICAgIGJvb2wgaGFzU2FtZUluaXRpYWxp
emF0aW9uT3B0aW9ucyhjb25zdCBDb250ZXh0T3B0aW9ucyYgb3B0aW9ucykgY29uc3QKICAgICB7
Ci0gICAgICAgIGlmICh1c2VUaHJlYWRlZFNjcm9sbGluZyAhPSBvcHRpb25zLnVzZVRocmVhZGVk
U2Nyb2xsaW5nCi0gICAgICAgICAgICB8fCB1c2VBY2NlbGVyYXRlZERyYXdpbmcgIT0gb3B0aW9u
cy51c2VBY2NlbGVyYXRlZERyYXdpbmcKLSAgICAgICAgICAgIHx8IHVzZU1vY2tTY3JvbGxiYXJz
ICE9IG9wdGlvbnMudXNlTW9ja1Njcm9sbGJhcnMKLSAgICAgICAgICAgIHx8IG5lZWRzU2l0ZVNw
ZWNpZmljUXVpcmtzICE9IG9wdGlvbnMubmVlZHNTaXRlU3BlY2lmaWNRdWlya3MKLSAgICAgICAg
ICAgIHx8IHVzZUNoYXJhY3RlclNlbGVjdGlvbkdyYW51bGFyaXR5ICE9IG9wdGlvbnMudXNlQ2hh
cmFjdGVyU2VsZWN0aW9uR3JhbnVsYXJpdHkKLSAgICAgICAgICAgIHx8IGVuYWJsZUF0dGFjaG1l
bnRFbGVtZW50ICE9IG9wdGlvbnMuZW5hYmxlQXR0YWNobWVudEVsZW1lbnQKLSAgICAgICAgICAg
IHx8IGVuYWJsZUludGVyc2VjdGlvbk9ic2VydmVyICE9IG9wdGlvbnMuZW5hYmxlSW50ZXJzZWN0
aW9uT2JzZXJ2ZXIKLSAgICAgICAgICAgIHx8IHVzZUVwaGVtZXJhbFNlc3Npb24gIT0gb3B0aW9u
cy51c2VFcGhlbWVyYWxTZXNzaW9uCi0gICAgICAgICAgICB8fCBlbmFibGVNZW51SXRlbUVsZW1l
bnQgIT0gb3B0aW9ucy5lbmFibGVNZW51SXRlbUVsZW1lbnQKLSAgICAgICAgICAgIHx8IGVuYWJs
ZUtleWdlbkVsZW1lbnQgIT0gb3B0aW9ucy5lbmFibGVLZXlnZW5FbGVtZW50Ci0gICAgICAgICAg
ICB8fCBlbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzICE9IG9wdGlvbnMuZW5hYmxlTW9kZXJuTWVk
aWFDb250cm9scwotICAgICAgICAgICAgfHwgZW5hYmxlUG9pbnRlckxvY2sgIT0gb3B0aW9ucy5l
bmFibGVQb2ludGVyTG9jawotICAgICAgICAgICAgfHwgZW5hYmxlV2ViQXV0aGVudGljYXRpb24g
IT0gb3B0aW9ucy5lbmFibGVXZWJBdXRoZW50aWNhdGlvbgotICAgICAgICAgICAgfHwgZW5hYmxl
V2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IgIT0gb3B0aW9ucy5lbmFibGVXZWJB
dXRoZW50aWNhdGlvbkxvY2FsQXV0aGVudGljYXRvcgotICAgICAgICAgICAgfHwgZW5hYmxlSW5z
cGVjdG9yQWRkaXRpb25zICE9IG9wdGlvbnMuZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zCi0gICAg
ICAgICAgICB8fCBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgIT0gb3B0aW9ucy5kdW1wSlNDb25z
b2xlTG9nSW5TdGRFcnIKLSAgICAgICAgICAgIHx8IGFwcGxpY2F0aW9uTWFuaWZlc3QgIT0gb3B0
aW9ucy5hcHBsaWNhdGlvbk1hbmlmZXN0Ci0gICAgICAgICAgICB8fCBhbGxvd0Nyb3NzT3JpZ2lu
U3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyAhPSBvcHRpb25zLmFsbG93Q3Jvc3NPcmln
aW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzCi0gICAgICAgICAgICB8fCBkb21QYXN0
ZUFsbG93ZWQgIT0gb3B0aW9ucy5kb21QYXN0ZUFsbG93ZWQKLSAgICAgICAgICAgIHx8IGVuYWJs
ZUNvbG9yRmlsdGVyICE9IG9wdGlvbnMuZW5hYmxlQ29sb3JGaWx0ZXIKLSAgICAgICAgICAgIHx8
IHB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUgIT0gb3B0aW9ucy5wdW5jaE91dFdo
aXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlCi0gICAgICAgICAgICB8fCBqc2NPcHRpb25zICE9IG9w
dGlvbnMuanNjT3B0aW9ucwotICAgICAgICAgICAgfHwgYWRkaXRpb25hbFN1cHBvcnRlZEltYWdl
VHlwZXMgIT0gb3B0aW9ucy5hZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcwotICAgICAgICAg
ICAgfHwgcnVuU2luZ2x5ICE9IG9wdGlvbnMucnVuU2luZ2x5Ci0gICAgICAgICAgICB8fCBjaGVj
a0ZvcldvcmxkTGVha3MgIT0gb3B0aW9ucy5jaGVja0ZvcldvcmxkTGVha3MKLSAgICAgICAgICAg
IHx8IHNob3VsZFNob3dTcGVsbENoZWNraW5nRG90cyAhPSBvcHRpb25zLnNob3VsZFNob3dTcGVs
bENoZWNraW5nRG90cwotICAgICAgICAgICAgfHwgZW5hYmxlU2VydmljZUNvbnRyb2xzICE9IG9w
dGlvbnMuZW5hYmxlU2VydmljZUNvbnRyb2xzCi0gICAgICAgICAgICB8fCBzaG91bGRJZ25vcmVN
ZXRhVmlld3BvcnQgIT0gb3B0aW9ucy5zaG91bGRJZ25vcmVNZXRhVmlld3BvcnQKLSAgICAgICAg
ICAgIHx8IGVkaXRhYmxlICE9IG9wdGlvbnMuZWRpdGFibGUKLSAgICAgICAgICAgIHx8IHNob3Vs
ZEhhbmRsZVJ1bk9wZW5QYW5lbCAhPSBvcHRpb25zLnNob3VsZEhhbmRsZVJ1bk9wZW5QYW5lbAot
ICAgICAgICAgICAgfHwgc2hvdWxkUHJlc2VudFBvcG92ZXJzICE9IG9wdGlvbnMuc2hvdWxkUHJl
c2VudFBvcG92ZXJzCi0gICAgICAgICAgICB8fCBjb250ZW50SW5zZXRUb3AgIT0gb3B0aW9ucy5j
b250ZW50SW5zZXRUb3AKLSAgICAgICAgICAgIHx8IGNvbnRlbnRNb2RlICE9IG9wdGlvbnMuY29u
dGVudE1vZGUKLSAgICAgICAgICAgIHx8IGFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllciAhPSBv
cHRpb25zLmFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcgotICAgICAgICAgICAgfHwgZW5hYmxl
QXBwTmFwICE9IG9wdGlvbnMuZW5hYmxlQXBwTmFwCi0gICAgICAgICAgICB8fCBlbmFibGVCYWNr
Rm9yd2FyZENhY2hlICE9IG9wdGlvbnMuZW5hYmxlQmFja0ZvcndhcmRDYWNoZQotICAgICAgICAg
ICAgfHwgYWxsb3dzTGlua1ByZXZpZXcgIT0gb3B0aW9ucy5hbGxvd3NMaW5rUHJldmlldwotICAg
ICAgICAgICAgfHwgZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MgIT0gb3B0aW9ucy5lbmFi
bGVDYXB0dXJlVmlkZW9JblVJUHJvY2VzcwotICAgICAgICAgICAgfHwgZW5hYmxlQ2FwdHVyZVZp
ZGVvSW5HUFVQcm9jZXNzICE9IG9wdGlvbnMuZW5hYmxlQ2FwdHVyZVZpZGVvSW5HUFVQcm9jZXNz
Ci0gICAgICAgICAgICB8fCBlbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcyAhPSBvcHRpb25z
LmVuYWJsZUNhcHR1cmVBdWRpb0luVUlQcm9jZXNzCi0gICAgICAgICAgICB8fCBlbmFibGVDYXB0
dXJlQXVkaW9JbkdQVVByb2Nlc3MgIT0gb3B0aW9ucy5lbmFibGVDYXB0dXJlQXVkaW9JbkdQVVBy
b2Nlc3MKLSAgICAgICAgICAgIHx8IGFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMgIT0gb3B0
aW9ucy5hbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzCi0gICAgICAgICAgICB8fCBlbmFibGVJ
bkFwcEJyb3dzZXJQcml2YWN5ICE9IG9wdGlvbnMuZW5hYmxlSW5BcHBCcm93c2VyUHJpdmFjeQot
ICAgICAgICAgICAgfHwgc3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMICE9IG9wdGlvbnMuc3Rh
bmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMCi0gICAgICAgICAgICB8fCBpc0FwcEJvdW5kV2ViVmll
dyAhPSBvcHRpb25zLmlzQXBwQm91bmRXZWJWaWV3KQorICAgICAgICBpZiAoaWdub3JlU3luY2hy
b25vdXNNZXNzYWdpbmdUaW1lb3V0cyAhPSBvcHRpb25zLmlnbm9yZVN5bmNocm9ub3VzTWVzc2Fn
aW5nVGltZW91dHMKKyAgICAgICAgICAgIHx8IG92ZXJyaWRlTGFuZ3VhZ2VzICE9IG9wdGlvbnMu
b3ZlcnJpZGVMYW5ndWFnZXMKKyAgICAgICAgICAgIHx8IGVuYWJsZVByb2Nlc3NTd2FwT25OYXZp
Z2F0aW9uICE9IG9wdGlvbnMuZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24KKyAgICAgICAg
ICAgIHx8IGVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuICE9IG9wdGlvbnMuZW5hYmxlUHJv
Y2Vzc1N3YXBPbldpbmRvd09wZW4KKyAgICAgICAgICAgIHx8IHVzZVNlcnZpY2VXb3JrZXJTaG9y
dFRpbWVvdXQgIT0gb3B0aW9ucy51c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0KQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAKLSAgICAg
ICAgaWYgKCFjb250ZXh0T3B0aW9ucy5oYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25zKG9wdGlv
bnMuY29udGV4dE9wdGlvbnMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGJvb2wg
c2hvdWxkRW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24oKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uIHx8IGVuYWJsZVByb2Nlc3NT
d2FwT25XaW5kb3dPcGVuOworICAgIH0KK307CiAKLSAgICAgICAgaWYgKGV4cGVyaW1lbnRhbEZl
YXR1cmVzICE9IG9wdGlvbnMuZXhwZXJpbWVudGFsRmVhdHVyZXMpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CitjbGFzcyBUZXN0T3B0aW9ucyB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgVGVz
dE9wdGlvbnMoVGVzdEZlYXR1cmVzKTsKIAotICAgICAgICBpZiAoaW50ZXJuYWxEZWJ1Z0ZlYXR1
cmVzICE9IG9wdGlvbnMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIENvbnRleHRPcHRpb25zIGNvbnRleHRPcHRpb25zKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBvdmVycmlkZUxhbmd1YWdlcygpLAorICAg
ICAgICAgICAgaWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0cygpLAorICAgICAgICAg
ICAgZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24oKSwKKyAgICAgICAgICAgIGVuYWJsZVBy
b2Nlc3NTd2FwT25XaW5kb3dPcGVuKCksCisgICAgICAgICAgICB1c2VTZXJ2aWNlV29ya2VyU2hv
cnRUaW1lb3V0KCkKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBib29sIHVzZVRocmVhZGVkU2Ny
b2xsaW5nKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgidXNlVGhyZWFkZWRTY3Jv
bGxpbmciLCBmYWxzZSk7IH0KKyAgICBib29sIHVzZUFjY2VsZXJhdGVkRHJhd2luZygpIGNvbnN0
IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInVzZUFjY2VsZXJhdGVkRHJhd2luZyIsIGZhbHNl
KTsgfQorICAgIGJvb2wgdXNlUmVtb3RlTGF5ZXJUcmVlKCkgY29uc3QgeyByZXR1cm4gYm9vbEZl
YXR1cmVWYWx1ZSgidXNlUmVtb3RlTGF5ZXJUcmVlIiwgZmFsc2UpOyB9CisgICAgYm9vbCBzaG91
bGRTaG93V2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInNob3VsZFNo
b3dXZWJWaWV3IiwgZmFsc2UpOyB9CisgICAgYm9vbCB1c2VGbGV4aWJsZVZpZXdwb3J0KCkgY29u
c3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgidXNlRmxleGlibGVWaWV3cG9ydCIsIGZhbHNl
KTsgfQorICAgIGJvb2wgaXNTVkdUZXN0KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1
ZSgiaXNTVkdUZXN0IiwgZmFsc2UpOyB9CisgICAgYm9vbCB1c2VEYXRhRGV0ZWN0aW9uKCkgY29u
c3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgidXNlRGF0YURldGVjdGlvbiIsIGZhbHNlKTsg
fQorICAgIGJvb2wgdXNlTW9ja1Njcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVy
ZVZhbHVlKCJ1c2VNb2NrU2Nyb2xsYmFycyIsIHRydWUpOyB9CisgICAgYm9vbCBuZWVkc1NpdGVT
cGVjaWZpY1F1aXJrcygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoIm5lZWRzU2l0
ZVNwZWNpZmljUXVpcmtzIiwgZmFsc2UpOyB9CisgICAgYm9vbCBpZ25vcmVzVmlld3BvcnRTY2Fs
ZUxpbWl0cygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImlnbm9yZXNWaWV3cG9y
dFNjYWxlTGltaXRzIiwgZmFsc2UpOyB9CisgICAgYm9vbCB1c2VDaGFyYWN0ZXJTZWxlY3Rpb25H
cmFudWxhcml0eSgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInVzZUNoYXJhY3Rl
clNlbGVjdGlvbkdyYW51bGFyaXR5IiwgZmFsc2UpOyB9CisgICAgYm9vbCBlbmFibGVBdHRhY2ht
ZW50RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZUF0dGFj
aG1lbnRFbGVtZW50IiwgZmFsc2UpOyB9CisgICAgYm9vbCBlbmFibGVJbnRlcnNlY3Rpb25PYnNl
cnZlcigpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZUludGVyc2VjdGlv
bk9ic2VydmVyIiwgZmFsc2UpOyB9CisgICAgYm9vbCB1c2VFcGhlbWVyYWxTZXNzaW9uKCkgY29u
c3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgidXNlRXBoZW1lcmFsU2Vzc2lvbiIsIGZhbHNl
KTsgfQorICAgIGJvb2wgZW5hYmxlTWVudUl0ZW1FbGVtZW50KCkgY29uc3QgeyByZXR1cm4gYm9v
bEZlYXR1cmVWYWx1ZSgiZW5hYmxlTWVudUl0ZW1FbGVtZW50IiwgZmFsc2UpOyB9CisgICAgYm9v
bCBlbmFibGVLZXlnZW5FbGVtZW50KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgi
ZW5hYmxlS2V5Z2VuRWxlbWVudCIsIGZhbHNlKTsgfQorICAgIGJvb2wgZW5hYmxlTW9kZXJuTWVk
aWFDb250cm9scygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZU1vZGVy
bk1lZGlhQ29udHJvbHMiLCB0cnVlKTsgfQorICAgIGJvb2wgZW5hYmxlUG9pbnRlckxvY2soKSBj
b25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVQb2ludGVyTG9jayIsIGZhbHNl
KTsgfQorICAgIGJvb2wgZW5hYmxlV2ViQXV0aGVudGljYXRpb24oKSBjb25zdCB7IHJldHVybiBi
b29sRmVhdHVyZVZhbHVlKCJlbmFibGVXZWJBdXRoZW50aWNhdGlvbiIsIHRydWUpOyB9CisgICAg
Ym9vbCBlbmFibGVXZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0aGVudGljYXRvcigpIGNvbnN0IHsg
cmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRo
ZW50aWNhdG9yIiwgdHJ1ZSk7IH0KKyAgICBib29sIGVuYWJsZUluc3BlY3RvckFkZGl0aW9ucygp
IGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZUluc3BlY3RvckFkZGl0aW9u
cyIsIGZhbHNlKTsgfQorICAgIGJvb2wgc2hvdWxkU2hvd1RvdWNoZXMoKSBjb25zdCB7IHJldHVy
biBib29sRmVhdHVyZVZhbHVlKCJzaG91bGRTaG93VG91Y2hlcyIsIGZhbHNlKTsgfQorICAgIGJv
b2wgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVW
YWx1ZSgiZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIiwgZmFsc2UpOyB9CisgICAgYm9vbCBhbGxv
d0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscygpIGNvbnN0IHsgcmV0
dXJuIGJvb2xGZWF0dXJlVmFsdWUoImFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0Zv
ckNyZWRlbnRpYWxzIiwgZmFsc2UpOyB9CisgICAgYm9vbCBkb21QYXN0ZUFsbG93ZWQoKSBjb25z
dCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJkb21QYXN0ZUFsbG93ZWQiLCB0cnVlKTsgfQor
ICAgIGJvb2wgZW5hYmxlQ29sb3JGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZh
bHVlKCJlbmFibGVDb2xvckZpbHRlciIsIGZhbHNlKTsgfQorICAgIGJvb2wgcHVuY2hPdXRXaGl0
ZUJhY2tncm91bmRzSW5EYXJrTW9kZSgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUo
InB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUiLCBmYWxzZSk7IH0KKyAgICBib29s
IHJ1blNpbmdseSgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInJ1blNpbmdseSIs
IGZhbHNlKTsgfQorICAgIGJvb2wgY2hlY2tGb3JXb3JsZExlYWtzKCkgY29uc3QgeyByZXR1cm4g
Ym9vbEZlYXR1cmVWYWx1ZSgiY2hlY2tGb3JXb3JsZExlYWtzIiwgZmFsc2UpOyB9CisgICAgYm9v
bCBzaG91bGRJZ25vcmVNZXRhVmlld3BvcnQoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZh
bHVlKCJzaG91bGRJZ25vcmVNZXRhVmlld3BvcnQiLCBmYWxzZSk7IH0KKyAgICBib29sIHNob3Vs
ZFNob3dTcGVsbENoZWNraW5nRG90cygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUo
InNwZWxsQ2hlY2tpbmdEb3RzIiwgZmFsc2UpOyB9CisgICAgYm9vbCBlbmFibGVTZXJ2aWNlQ29u
dHJvbHMoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVTZXJ2aWNlQ29u
dHJvbHMiLCBmYWxzZSk7IH0KKyAgICBib29sIGVkaXRhYmxlKCkgY29uc3QgeyByZXR1cm4gYm9v
bEZlYXR1cmVWYWx1ZSgiZWRpdGFibGUiLCBmYWxzZSk7IH0KKyAgICBib29sIHNob3VsZEhhbmRs
ZVJ1bk9wZW5QYW5lbCgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInNob3VsZEhh
bmRsZVJ1bk9wZW5QYW5lbCIsIHRydWUpOyB9CisgICAgYm9vbCBzaG91bGRQcmVzZW50UG9wb3Zl
cnMoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJzaG91bGRQcmVzZW50UG9wb3Zl
cnMiLCB0cnVlKTsgfQorICAgIGJvb2wgZW5hYmxlQXBwTmFwKCkgY29uc3QgeyByZXR1cm4gYm9v
bEZlYXR1cmVWYWx1ZSgiZW5hYmxlQXBwTmFwIiwgZmFsc2UpOyB9CisgICAgYm9vbCBlbmFibGVC
YWNrRm9yd2FyZENhY2hlKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxl
QmFja0ZvcndhcmRDYWNoZSIsIGZhbHNlKTsgfQorICAgIGJvb2wgYWxsb3dzTGlua1ByZXZpZXco
KSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJhbGxvd3NMaW5rUHJldmlldyIsIHRy
dWUpOyB9CisgICAgYm9vbCBlbmFibGVDYXB0dXJlVmlkZW9JblVJUHJvY2VzcygpIGNvbnN0IHsg
cmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZUNhcHR1cmVWaWRlb0luVUlQcm9jZXNzIiwg
ZmFsc2UpOyB9CisgICAgYm9vbCBlbmFibGVDYXB0dXJlVmlkZW9JbkdQVVByb2Nlc3MoKSBjb25z
dCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVDYXB0dXJlVmlkZW9JbkdQVVByb2Nl
c3MiLCBmYWxzZSk7IH0KKyAgICBib29sIGVuYWJsZUNhcHR1cmVBdWRpb0luVUlQcm9jZXNzKCkg
Y29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlQ2FwdHVyZUF1ZGlvSW5VSVBy
b2Nlc3MiLCBmYWxzZSk7IH0KKyAgICBib29sIGVuYWJsZUNhcHR1cmVBdWRpb0luR1BVUHJvY2Vz
cygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZUNhcHR1cmVBdWRpb0lu
R1BVUHJvY2VzcyIsIGZhbHNlKTsgfQorICAgIGJvb2wgYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRh
VVJMcygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImFsbG93VG9wTmF2aWdhdGlv
blRvRGF0YVVSTHMiLCB0cnVlKTsgfQorICAgIGJvb2wgZW5hYmxlSW5BcHBCcm93c2VyUHJpdmFj
eSgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZUluQXBwQnJvd3NlclBy
aXZhY3kiLCBmYWxzZSk7IH0KKyAgICBib29sIGlzQXBwQm91bmRXZWJWaWV3KCkgY29uc3QgeyBy
ZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiaXNBcHBCb3VuZFdlYlZpZXciLCBmYWxzZSk7IH0KKyAg
ICBib29sIGlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMoKSBjb25zdCB7IHJldHVy
biBib29sRmVhdHVyZVZhbHVlKCJpZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzIiwg
ZmFsc2UpOyB9CisgICAgYm9vbCBlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9u
IiwgdHJ1ZSk7IH0KKyAgICBib29sIGVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuKCkgY29u
c3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09w
ZW4iLCBmYWxzZSk7IH0KKyAgICBib29sIHVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQoKSBj
b25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJ1c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1l
b3V0IiwgZmFsc2UpOyB9CisgICAgZG91YmxlIGNvbnRlbnRJbnNldFRvcCgpIGNvbnN0IHsgcmV0
dXJuIGRvdWJsZUZlYXR1cmVWYWx1ZSgiY29udGVudEluc2V0LnRvcCIsIDApOyB9CisgICAgZG91
YmxlIGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gZG91YmxlRmVhdHVyZVZhbHVl
KCJkZXZpY2VTY2FsZUZhY3RvciIsIDEpOyB9CisgICAgc3RkOjpzdHJpbmcgYXBwbGljYXRpb25N
YW5pZmVzdCgpIGNvbnN0IHsgcmV0dXJuIHN0cmluZ0ZlYXR1cmVWYWx1ZSgiYXBwbGljYXRpb25N
YW5pZmVzdCIsIHsgfSk7IH0KKyAgICBzdGQ6OnN0cmluZyBqc2NPcHRpb25zKCkgY29uc3QgeyBy
ZXR1cm4gc3RyaW5nRmVhdHVyZVZhbHVlKCJqc2NPcHRpb25zIiwgeyB9KTsgfQorICAgIHN0ZDo6
c3RyaW5nIGFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzKCkgY29uc3QgeyByZXR1cm4gc3Ry
aW5nRmVhdHVyZVZhbHVlKCJhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIsIHsgfSk7IH0K
KyAgICBzdGQ6OnN0cmluZyBzdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwoKSBjb25zdCB7IHJl
dHVybiBzdHJpbmdGZWF0dXJlVmFsdWUoInN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTCIsIHsg
fSk7IH0KKyAgICBzdGQ6OnN0cmluZyBjb250ZW50TW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0cmlu
Z0ZlYXR1cmVWYWx1ZSgiY29udGVudE1vZGUiLCB7IH0pOyB9CisgICAgc3RkOjpzdHJpbmcgYXBw
bGljYXRpb25CdW5kbGVJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nRmVhdHVyZVZh
bHVlKCJhcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIiLCB7IH0pOyB9CisgICAgc3RkOjp2ZWN0
b3I8c3RkOjpzdHJpbmc+IG92ZXJyaWRlTGFuZ3VhZ2VzKCkgY29uc3QgeyByZXR1cm4gc3RyaW5n
VmVjdG9yRmVhdHVyZVZhbHVlKCJsYW5ndWFnZSIsIHsgfSk7IH0KKworICAgIGNvbnN0IHN0ZDo6
dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4mIGV4cGVyaW1lbnRhbEZlYXR1cmVzKCkg
Y29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlczsgfQorICAgIGNv
bnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4mIGludGVybmFsRGVidWdG
ZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVz
OyB9CiAKKyAgICBib29sIGhhc1NhbWVJbml0aWFsaXphdGlvbk9wdGlvbnMoY29uc3QgVGVzdE9w
dGlvbnMmIG9wdGlvbnMpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9mZWF0dXJlcy5leHBl
cmltZW50YWxGZWF0dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVy
ZXMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX2ZlYXR1cmVzLmlu
dGVybmFsRGVidWdGZWF0dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0Zl
YXR1cmVzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobV9mZWF0dXJl
cy5ib29sRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2ZlYXR1cmVzLmJvb2xGZWF0dXJlcykKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG1fZmVhdHVyZXMuZG91YmxlRmVhdHVy
ZXMgIT0gb3B0aW9ucy5tX2ZlYXR1cmVzLmRvdWJsZUZlYXR1cmVzKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBpZiAobV9mZWF0dXJlcy5zdHJpbmdGZWF0dXJlcyAhPSBvcHRp
b25zLm1fZmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGlmIChtX2ZlYXR1cmVzLnN0cmluZ1ZlY3RvckZlYXR1cmVzICE9IG9wdGlvbnMu
bV9mZWF0dXJlcy5zdHJpbmdWZWN0b3JGZWF0dXJlcykKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorCitwcml2YXRlOgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CisgICAgVCBmZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5LCBUIGRlZmF1
bHRWYWx1ZSwgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBUPiYgbWFwKSBj
b25zdAorICAgIHsKKyAgICAgICAgYXV0byBpdCA9IG1hcC5maW5kKGtleSk7CisgICAgICAgIGlm
IChpdCAhPSBtYXAuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAg
ICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKKyAgICB9CisKKyAgICBib29sIGJvb2xGZWF0dXJlVmFs
dWUoc3RkOjpzdHJpbmcga2V5LCBib29sIGRlZmF1bHRWYWx1ZSkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBmZWF0dXJlVmFsdWUoa2V5LCBkZWZhdWx0VmFsdWUsIG1fZmVhdHVyZXMuYm9v
bEZlYXR1cmVzKTsKKyAgICB9CisgICAgZG91YmxlIGRvdWJsZUZlYXR1cmVWYWx1ZShzdGQ6OnN0
cmluZyBrZXksIGRvdWJsZSBkZWZhdWx0VmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gZmVhdHVyZVZhbHVlKGtleSwgZGVmYXVsdFZhbHVlLCBtX2ZlYXR1cmVzLmRvdWJsZUZlYXR1
cmVzKTsKKyAgICB9CisgICAgc3RkOjpzdHJpbmcgc3RyaW5nRmVhdHVyZVZhbHVlKHN0ZDo6c3Ry
aW5nIGtleSwgc3RkOjpzdHJpbmcgZGVmYXVsdFZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZlYXR1cmVWYWx1ZShrZXksIGRlZmF1bHRWYWx1ZSwgbV9mZWF0dXJlcy5zdHJpbmdG
ZWF0dXJlcyk7CisgICAgfQorICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzdHJpbmdWZWN0
b3JGZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5LCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4g
ZGVmYXVsdFZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZlYXR1cmVWYWx1ZShr
ZXksIGRlZmF1bHRWYWx1ZSwgbV9mZWF0dXJlcy5zdHJpbmdWZWN0b3JGZWF0dXJlcyk7CisgICAg
fQorCisgICAgVGVzdEZlYXR1cmVzIG1fZmVhdHVyZXM7CiB9OwogCiB9CkluZGV4OiBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjY3OTQ4KQorKysgVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTEyMCw2ICsxMjAsOCBAQAogCQk2NTEwQTc4QjExRUM2NDM4MDA0
MTA4NjcgLyogV2ViS2l0V2VpZ2h0V2F0Y2hlcjgwMC50dGYgaW4gUmVzb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MTBBNzgwMTFFQzY0MzgwMDQxMDg2NyAvKiBX
ZWJLaXRXZWlnaHRXYXRjaGVyODAwLnR0ZiAqLzsgfTsKIAkJNjUxMEE3OEMxMUVDNjQzODAwNDEw
ODY3IC8qIFdlYktpdFdlaWdodFdhdGNoZXI5MDAudHRmIGluIFJlc291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTEwQTc4MTExRUM2NDM4MDA0MTA4NjcgLyogV2Vi
S2l0V2VpZ2h0V2F0Y2hlcjkwMC50dGYgKi87IH07CiAJCTY1RUI4NUEwMTFFQzY3Q0MwMDM0RDMw
MCAvKiBBY3RpdmF0ZUZvbnRzQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NUVCODU5RjExRUM2N0NDMDAzNEQzMDAgLyogQWN0aXZhdGVGb250
c0NvY29hLm1tICovOyB9OworCQk3Qzc4MjU1MTI1MkE0N0U3MDAxOTFCODcgLyogU3RkRmlsZXN5
c3RlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M3
ODI1NEYyNTJBNDdFNzAwMTkxQjg3IC8qIFN0ZEZpbGVzeXN0ZW0uaCAqLzsgfTsKKwkJN0M3ODI1
NTIyNTJBNDdFNzAwMTkxQjg3IC8qIFN0ZEZpbGVzeXN0ZW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M3ODI1NTAyNTJBNDdFNzAwMTkxQjg3IC8q
IFN0ZEZpbGVzeXN0ZW0uY3BwICovOyB9OwogCQk4MDM0QzY2MjE0ODc2MzY0MDBBQzMyRTkgLyog
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4MDM0QzY2MTE0ODc2MzY0MDBBQzMyRTkgLyogQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXJNYWMubW0gKi87IH07CiAJCTgwOTczMzhBMTQ4NzRBNUEwMDgxNTZEOSAv
KiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgwOTczMzg5MTQ4NzRBNUEwMDgxNTZEOSAvKiBB
Y2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbSAqLzsgfTsKIAkJOTM3NjQxN0EyMTBE
NzM3MjAwQTNEQUFFIC8qIFdlYktpdFRlc3RSdW5uZXJXaW5kb3cubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Mzc2NDE3NjIxMEQ3MzYwMDBBM0RBQUUg
LyogV2ViS2l0VGVzdFJ1bm5lcldpbmRvdy5tbSAqLzsgfTsKQEAgLTM0OSwxMyArMzUxLDE0IEBA
CiAJCTY1MTBBNzgxMTFFQzY0MzgwMDQxMDg2NyAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyOTAwLnR0
ZiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7
IG5hbWUgPSBXZWJLaXRXZWlnaHRXYXRjaGVyOTAwLnR0ZjsgcGF0aCA9IGZvbnRzL1dlYktpdFdl
aWdodFdhdGNoZXI5MDAudHRmOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NUVCODU5
RDExRUM2N0NDMDAzNEQzMDAgLyogQWN0aXZhdGVGb250cy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBBY3RpdmF0ZUZvbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTY1RUI4NTlGMTFFQzY3Q0MwMDM0RDMwMCAvKiBBY3RpdmF0ZUZvbnRzQ29jb2EubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBY3RpdmF0ZUZvbnRzQ29jb2Eu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDNzgyNTRGMjUyQTQ3RTcwMDE5MUI4
NyAvKiBTdGRGaWxlc3lzdGVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0ZEZpbGVzeXN0ZW0uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M3ODI1NTAyNTJBNDdFNzAwMTkxQjg3IC8qIFN0
ZEZpbGVzeXN0ZW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RkRmlsZXN5c3RlbS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgwMzRDNjYxMTQ4NzYzNjQwMEFDMzJFOSAvKiBB
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4MDk3MzM4ODE0ODc0QTVBMDA4MTU2RDkgLyogQWNjZXNzaWJpbGl0
eU5vdGlmaWNhdGlvbkhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaDsgcGF0aCA9IG1hYy9BY2Nlc3NpYmls
aXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
MDk3MzM4OTE0ODc0QTVBMDA4MTU2RDkgLyogQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRs
ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBBY2Nlc3NpYmls
aXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbTsgcGF0aCA9IG1hYy9BY2Nlc3NpYmlsaXR5Tm90aWZp
Y2F0aW9uSGFuZGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODQxQ0MwMEQx
ODExODVCRjAwNDJFOUI2IC8qIE9wdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gT3B0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0
MUNDMDBFMTgxMTg1QkYwMDQyRTlCNiAvKiBPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOERE
NzZGQTEwNDg2QUE3NjAwRDk2QjVFIC8qIFdlYktpdFRlc3RSdW5uZXIgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0
YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IFdlYktpdFRlc3RSdW5uZXI7IHNvdXJj
ZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07Ci0JCTkzMzhEMUJBMjUwQTc5RUIwMEU4MjdG
NiAvKiBKU0Jhc2ljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU0Jhc2ljcy5oOyBwYXRoID0gLi4vVGVz
dFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2ljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5MzM4RDFCRTI1MEJEOUREMDBFODI3RjYgLyogRGljdGlvbmFyeUZ1bmN0aW9ucy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEaWN0aW9uYXJ5RnVuY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTkzNzY0MTc2MjEwRDczNjAwMEEzREFBRSAvKiBXZWJLaXRUZXN0UnVubmVy
V2luZG93Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViS2l0
VGVzdFJ1bm5lcldpbmRvdy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM3NjQx
NzcyMTBENzM2MTAwQTNEQUFFIC8qIFdlYktpdFRlc3RSdW5uZXJXaW5kb3cuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViS2l0VGVzdFJ1bm5lcldpbmRvdy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtODk3LDYgKzkwMCw4IEBACiAJCQkJOTMzOEQxQkUyNTBC
RDlERDAwRTgyN0Y2IC8qIERpY3Rpb25hcnlGdW5jdGlvbnMuaCAqLywKIAkJCQlCQzk5QTQ4NDEy
MDg5MDFBMDA3RTlGMDggLyogU3RyaW5nRnVuY3Rpb25zLmggKi8sCiAJCQkJOUIzNkEyNzAyMDk0
NTNBMDAwM0UwNjUxIC8qIFdoYXRUb0R1bXAuaCAqLywKKwkJCQk3Qzc4MjU0RjI1MkE0N0U3MDAx
OTFCODcgLyogU3RkRmlsZXN5c3RlbS5oICovLAorCQkJCTdDNzgyNTUwMjUyQTQ3RTcwMDE5MUI4
NyAvKiBTdGRGaWxlc3lzdGVtLmNwcCAqLywKIAkJCSk7CiAJCQluYW1lID0gU2hhcmVkOwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTkzNyw2ICs5NDIsNyBAQAogCQkJCTJEQjYxODdF
MUQ3RDU4RDQwMDk3OEQxOSAvKiBDb3JlR3JhcGhpY3NUZXN0U1BJLmggaW4gSGVhZGVycyAqLywK
IAkJCQkyREQ0QzQ5QTFENkU3RDNCMDAwNzM3OUMgLyogRXZlbnRTZXJpYWxpemVyTWFjLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjczQjU1MjFCQTc4OTY4MDA0QjNFRjQgLyogSlNVSVNjcmlwdENv
bnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDNzgyNTUxMjUyQTQ3RTcwMDE5MUI4NyAv
KiBTdGRGaWxlc3lzdGVtLmggaW4gSGVhZGVycyAqLywKIAkJCQkyREZBOTg0ODFEN0Y3MENGMDBB
RkYyQzkgLyogU2hhcmVkRXZlbnRTdHJlYW1zTWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDA1
OEUwOTIyRTJFRTIyMDBFNEMxNDUgLyogVUlTY3JpcHRDb250cm9sbGVyQ29jb2EuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTJEMDU4RTBCMjJFMkVGNkQwMEU0QzE0NSAvKiBVSVNjcmlwdENvbnRyb2xs
ZXJNYWMuaCBpbiBIZWFkZXJzICovLApAQCAtMTIyMCw2ICsxMjI2LDcgQEAKIAkJCQlGNDYyNDBC
MTIxNzAxM0U1MDA5MTdCMTYgLyogVUlTY3JpcHRDb250cm9sbGVyQ29jb2EubW0gaW4gU291cmNl
cyAqLywKIAkJCQkyNzdDQ0VERDI1MEYzMDBBMDA1MEM1NzIgLyogVUlTY3JpcHRDb250cm9sbGVy
Q29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzNCNTVDMUJBODkwNDIwMDRCM0VGNCAv
KiBVSVNjcmlwdENvbnRyb2xsZXJJT1MubW0gaW4gU291cmNlcyAqLywKKwkJCQk3Qzc4MjU1MjI1
MkE0N0U3MDAxOTFCODcgLyogU3RkRmlsZXN5c3RlbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjE4RTZFNjFENkI5QkEyMDAyN0U1NDcgLyogVUlTY3JpcHRDb250cm9sbGVyU2hhcmVkLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUExODUxMDQzMUI5QUUxNDUwMDc0NEFFQiAvKiBXZWJOb3RpZmlj
YXRpb25Qcm92aWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTg1MTA0NDFCOUFFMTRBMDA3
NDRBRUIgLyogV29ya1F1ZXVlTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2NvYS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0J
KHJldmlzaW9uIDI2Nzk0OCkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENv
bnRyb2xsZXJDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTE0LDI3ICsxMTQsMjggQEAgV0tQ
cmVmZXJlbmNlc1JlZiBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcgogICAgIHJldHVybiAoX19icmlk
Z2UgV0tQcmVmZXJlbmNlc1JlZilnbG9iYWxXZWJWaWV3Q29uZmlndXJhdGlvbi5wcmVmZXJlbmNl
czsKIH0KIAotdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1BZGRUZXN0T3B0aW9ucyhUZXN0
T3B0aW9ucyYgb3B0aW9ucykgY29uc3QKK1Rlc3RGZWF0dXJlcyBUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1TcGVjaWZpY0ZlYXR1cmVPdmVycmlkZXNEZWZhdWx0c0ZvclRlc3QoY29uc3QgVGVzdENv
bW1hbmQmKSBjb25zdAogeworICAgIFRlc3RGZWF0dXJlcyBmZWF0dXJlczsKKwogICAgIGlmIChb
W05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5OkAiRW5hYmxl
UHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24iXSkKLSAgICAgICAgb3B0aW9ucy5jb250ZXh0T3B0aW9u
cy5lbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbiA9IHRydWU7CisgICAgICAgIGZlYXR1cmVz
LmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAiZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24iLCB0
cnVlIH0pOwogICAgIGlmIChbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBi
b29sRm9yS2V5OkAiRW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW4iXSkKLSAgICAgICAgb3B0
aW9ucy5jb250ZXh0T3B0aW9ucy5lbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiA9IHRydWU7
CisgICAgICAgIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAiZW5hYmxlUHJvY2Vzc1N3
YXBPbldpbmRvd09wZW4iLCB0cnVlIH0pOwogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAg
ICBpZiAob3B0aW9ucy5lbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5KQotICAgICAgICBbW05TVXNl
ckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBzZXRCb29sOllFUyBmb3JLZXk6QCJXZWJL
aXREZWJ1Z0lzSW5BcHBCcm93c2VyUHJpdmFjeUVuYWJsZWQiXTsKLSNlbmRpZgorICAgIHJldHVy
biBmZWF0dXJlczsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1Jbml0aWFsaXpl
RGF0YVN0b3JlKFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYsIGNvbnN0IFRlc3RPcHRpb25zJiBvcHRp
b25zKQogewotICAgIGlmIChvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24gfHwgb3B0aW9ucy5z
dGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwubGVuZ3RoKCkpIHsKLSAgICAgICAgYXV0byB3ZWJz
aXRlRGF0YVN0b3JlQ29uZmlnID0gb3B0aW9ucy51c2VFcGhlbWVyYWxTZXNzaW9uID8gW1tbX1dL
V2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXROb25QZXJzaXN0ZW50Q29u
ZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdIDogW1tbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3Vy
YXRpb24gYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKLSAgICAgICAgaWYgKCFvcHRpb25zLnVz
ZUVwaGVtZXJhbFNlc3Npb24pCisgICAgYm9vbCB1c2VFcGhlbWVyYWxTZXNzaW9uID0gb3B0aW9u
cy51c2VFcGhlbWVyYWxTZXNzaW9uKCk7CisgICAgYXV0byBzdGFuZGFsb25lV2ViQXBwbGljYXRp
b25VUkwgPSBvcHRpb25zLnN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTCgpOworICAgIGlmICh1
c2VFcGhlbWVyYWxTZXNzaW9uIHx8IHN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTC5sZW5ndGgo
KSkgeworICAgICAgICBhdXRvIHdlYnNpdGVEYXRhU3RvcmVDb25maWcgPSB1c2VFcGhlbWVyYWxT
ZXNzaW9uID8gW1tbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRO
b25QZXJzaXN0ZW50Q29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdIDogW1tbX1dLV2Vic2l0ZURh
dGFTdG9yZUNvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAg
aWYgKCF1c2VFcGhlbWVyYWxTZXNzaW9uKQogICAgICAgICAgICAgY29uZmlndXJlV2Vic2l0ZURh
dGFTdG9yZVRlbXBvcmFyeURpcmVjdG9yaWVzKChXS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0
aW9uUmVmKXdlYnNpdGVEYXRhU3RvcmVDb25maWcpOwotICAgICAgICBpZiAob3B0aW9ucy5zdGFu
ZGFsb25lV2ViQXBwbGljYXRpb25VUkwubGVuZ3RoKCkpCi0gICAgICAgICAgICBbd2Vic2l0ZURh
dGFTdG9yZUNvbmZpZyBzZXRTdGFuZGFsb25lQXBwbGljYXRpb25VUkw6W05TVVJMIFVSTFdpdGhT
dHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOm9wdGlvbnMuc3RhbmRhbG9uZVdl
YkFwcGxpY2F0aW9uVVJMLmNfc3RyKCldXV07CisgICAgICAgIGlmIChzdGFuZGFsb25lV2ViQXBw
bGljYXRpb25VUkwubGVuZ3RoKCkpCisgICAgICAgICAgICBbd2Vic2l0ZURhdGFTdG9yZUNvbmZp
ZyBzZXRTdGFuZGFsb25lQXBwbGljYXRpb25VUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3Ry
aW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTC5jX3N0
cigpXV1dOwogICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUgPSAoX19icmlkZ2UgV0tXZWJzaXRl
RGF0YVN0b3JlUmVmKVtbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmln
dXJhdGlvbjp3ZWJzaXRlRGF0YVN0b3JlQ29uZmlnXSBhdXRvcmVsZWFzZV07CiAgICAgfSBlbHNl
CiAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IChfX2JyaWRnZSBXS1dlYnNpdGVEYXRhU3Rv
cmVSZWYpZ2xvYmFsV2ViVmlld0NvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZTsKQEAgLTE0
NSwzMiArMTQ2LDMzIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQ3JlYXRlV2ViVmkK
ICAgICBhdXRvIGNvcGllZENvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtnbG9iYWxXZWJWaWV3Q29u
ZmlndXJhdGlvbiBjb3B5XSk7CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmIChv
cHRpb25zLnVzZURhdGFEZXRlY3Rpb24pCisgICAgaWYgKG9wdGlvbnMudXNlRGF0YURldGVjdGlv
bigpKQogICAgICAgICBbY29waWVkQ29uZmlndXJhdGlvbiBzZXREYXRhRGV0ZWN0b3JUeXBlczpX
S0RhdGFEZXRlY3RvclR5cGVBbGxdOwotICAgIGlmIChvcHRpb25zLmlnbm9yZXNWaWV3cG9ydFNj
YWxlTGltaXRzKQorICAgIGlmIChvcHRpb25zLmlnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKCkp
CiAgICAgICAgIFtjb3BpZWRDb25maWd1cmF0aW9uIHNldElnbm9yZXNWaWV3cG9ydFNjYWxlTGlt
aXRzOllFU107Ci0gICAgaWYgKG9wdGlvbnMudXNlQ2hhcmFjdGVyU2VsZWN0aW9uR3JhbnVsYXJp
dHkpCisgICAgaWYgKG9wdGlvbnMudXNlQ2hhcmFjdGVyU2VsZWN0aW9uR3JhbnVsYXJpdHkoKSkK
ICAgICAgICAgW2NvcGllZENvbmZpZ3VyYXRpb24gc2V0U2VsZWN0aW9uR3JhbnVsYXJpdHk6V0tT
ZWxlY3Rpb25HcmFudWxhcml0eUNoYXJhY3Rlcl07Ci0gICAgaWYgKG9wdGlvbnMuaXNBcHBCb3Vu
ZFdlYlZpZXcpCisgICAgaWYgKG9wdGlvbnMuaXNBcHBCb3VuZFdlYlZpZXcoKSkKICAgICAgICAg
W2NvcGllZENvbmZpZ3VyYXRpb24gc2V0TGltaXRzTmF2aWdhdGlvbnNUb0FwcEJvdW5kRG9tYWlu
czpZRVNdOwogI2Vsc2UKLSAgICBbY29waWVkQ29uZmlndXJhdGlvbiBfc2V0U2VydmljZUNvbnRy
b2xzRW5hYmxlZDpvcHRpb25zLmVuYWJsZVNlcnZpY2VDb250cm9sc107CisgICAgW2NvcGllZENv
bmZpZ3VyYXRpb24gX3NldFNlcnZpY2VDb250cm9sc0VuYWJsZWQ6b3B0aW9ucy5lbmFibGVTZXJ2
aWNlQ29udHJvbHMoKV07CiAjZW5kaWYKIAotICAgIGlmIChvcHRpb25zLmVuYWJsZUF0dGFjaG1l
bnRFbGVtZW50KQorICAgIGlmIChvcHRpb25zLmVuYWJsZUF0dGFjaG1lbnRFbGVtZW50KCkpCiAg
ICAgICAgIFtjb3BpZWRDb25maWd1cmF0aW9uIF9zZXRBdHRhY2htZW50RWxlbWVudEVuYWJsZWQ6
WUVTXTsKIAotICAgIGlmIChvcHRpb25zLmVuYWJsZUNvbG9yRmlsdGVyKQorICAgIGlmIChvcHRp
b25zLmVuYWJsZUNvbG9yRmlsdGVyKCkpCiAgICAgICAgIFtjb3BpZWRDb25maWd1cmF0aW9uIF9z
ZXRDb2xvckZpbHRlckVuYWJsZWQ6WUVTXTsKIAogICAgIFtjb3BpZWRDb25maWd1cmF0aW9uIHNl
dFdlYnNpdGVEYXRhU3RvcmU6KFdLV2Vic2l0ZURhdGFTdG9yZSAqKXdlYnNpdGVEYXRhU3RvcmUo
KV07CiAKLSAgICBbY29waWVkQ29uZmlndXJhdGlvbiBfc2V0QWxsb3dUb3BOYXZpZ2F0aW9uVG9E
YXRhVVJMczpvcHRpb25zLmFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHNdOworICAgIFtjb3Bp
ZWRDb25maWd1cmF0aW9uIF9zZXRBbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzOm9wdGlvbnMu
YWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcygpXTsKIAogICAgIGNvbmZpZ3VyZUNvbnRlbnRN
b2RlKGNvcGllZENvbmZpZ3VyYXRpb24uZ2V0KCksIG9wdGlvbnMpOwogCi0gICAgaWYgKG9wdGlv
bnMuYXBwbGljYXRpb25NYW5pZmVzdC5sZW5ndGgoKSkgewotICAgICAgICBhdXRvIG1hbmlmZXN0
UGF0aCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpvcHRpb25zLmFwcGxpY2F0aW9u
TWFuaWZlc3QuY19zdHIoKV07CisgICAgYXV0byBhcHBsaWNhdGlvbk1hbmlmZXN0ID0gb3B0aW9u
cy5hcHBsaWNhdGlvbk1hbmlmZXN0KCk7CisgICAgaWYgKGFwcGxpY2F0aW9uTWFuaWZlc3QubGVu
Z3RoKCkpIHsKKyAgICAgICAgYXV0byBtYW5pZmVzdFBhdGggPSBbTlNTdHJpbmcgc3RyaW5nV2l0
aFVURjhTdHJpbmc6YXBwbGljYXRpb25NYW5pZmVzdC5jX3N0cigpXTsKICAgICAgICAgTlNTdHJp
bmcgKnRleHQgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENvbnRlbnRzT2ZGaWxlOm1hbmlmZXN0UGF0
aCB1c2VkRW5jb2Rpbmc6bnVsbHB0ciBlcnJvcjpudWxscHRyXTsKICAgICAgICAgW2NvcGllZENv
bmZpZ3VyYXRpb24gX3NldEFwcGxpY2F0aW9uTWFuaWZlc3Q6W19XS0FwcGxpY2F0aW9uTWFuaWZl
c3QgYXBwbGljYXRpb25NYW5pZmVzdEZyb21KU09OOnRleHQgbWFuaWZlc3RVUkw6bmlsIGRvY3Vt
ZW50VVJMOm5pbF1dOwogICAgIH0KQEAgLTE3OCwxMyArMTgwLDEzIEBAIHZvaWQgVGVzdENvbnRy
b2xsZXI6OnBsYXRmb3JtQ3JlYXRlV2ViVmkKICAgICBtX21haW5XZWJWaWV3ID0gbWFrZVVuaXF1
ZTxQbGF0Zm9ybVdlYlZpZXc+KGNvcGllZENvbmZpZ3VyYXRpb24uZ2V0KCksIG9wdGlvbnMpOwog
ICAgIGZpbmlzaENyZWF0aW5nUGxhdGZvcm1XZWJWaWV3KG1fbWFpbldlYlZpZXcuZ2V0KCksIG9w
dGlvbnMpOwogCi0gICAgaWYgKG9wdGlvbnMucHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJr
TW9kZSkKKyAgICBpZiAob3B0aW9ucy5wdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2Rl
KCkpCiAgICAgICAgIG1fbWFpbldlYlZpZXctPnNldERyYXdzQmFja2dyb3VuZChmYWxzZSk7CiAK
LSAgICBpZiAob3B0aW9ucy5lZGl0YWJsZSkKKyAgICBpZiAob3B0aW9ucy5lZGl0YWJsZSgpKQog
ICAgICAgICBtX21haW5XZWJWaWV3LT5zZXRFZGl0YWJsZSh0cnVlKTsKIAotICAgIG1fbWFpbldl
YlZpZXctPnBsYXRmb3JtVmlldygpLmFsbG93c0xpbmtQcmV2aWV3ID0gb3B0aW9ucy5hbGxvd3NM
aW5rUHJldmlldzsKKyAgICBtX21haW5XZWJWaWV3LT5wbGF0Zm9ybVZpZXcoKS5hbGxvd3NMaW5r
UHJldmlldyA9IG9wdGlvbnMuYWxsb3dzTGlua1ByZXZpZXcoKTsKICAgICBbbV9tYWluV2ViVmll
dy0+cGxhdGZvcm1WaWV3KCkgX3NldFNoYXJlU2hlZXRDb21wbGV0ZXNJbW1lZGlhdGVseVdpdGhS
ZXNvbHV0aW9uRm9yVGVzdGluZzpZRVNdOwogfQogCkBAIC0yMDMsNyArMjA1LDcgQEAgUGxhdGZv
cm1XZWJWaWV3KiBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcgogdm9pZCBUZXN0Q29udHJvbGxlcjo6
ZmluaXNoQ3JlYXRpbmdQbGF0Zm9ybVdlYlZpZXcoUGxhdGZvcm1XZWJWaWV3KiB2aWV3LCBjb25z
dCBUZXN0T3B0aW9ucyYgb3B0aW9ucykKIHsKICNpZiBQTEFURk9STShNQUMpCi0gICAgaWYgKG9w
dGlvbnMuc2hvdWxkU2hvd1dlYlZpZXcpCisgICAgaWYgKG9wdGlvbnMuc2hvdWxkU2hvd1dlYlZp
ZXcoKSkKICAgICAgICAgW3ZpZXctPnBsYXRmb3JtV2luZG93KCkgb3JkZXJGcm9udDpuaWxdOwog
ICAgIGVsc2UKICAgICAgICAgW3ZpZXctPnBsYXRmb3JtV2luZG93KCkgb3JkZXJCYWNrOm5pbF07
CkBAIC0yNjMsMTIgKzI2NSwxMiBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldENvbnRlbnRF
eHRlbnNpCiAgICAgfQogfQogCi12b2lkIFRlc3RDb250cm9sbGVyOjpzZXRBcHBsaWNhdGlvbkJ1
bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyKQordm9pZCBUZXN0
Q29udHJvbGxlcjo6c2V0QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBidW5kbGVJZGVudGlmaWVyKQogewotICAgIGlmIChidW5kbGVJZGVudGlmaWVyLmlzRW1w
dHkoKSkKKyAgICBpZiAoYnVuZGxlSWRlbnRpZmllci5lbXB0eSgpKQogICAgICAgICByZXR1cm47
CiAgICAgCi0gICAgW1Rlc3RSdW5uZXJXS1dlYlZpZXcgX3NldEFwcGxpY2F0aW9uQnVuZGxlSWRl
bnRpZmllcjooTlNTdHJpbmcgKilidW5kbGVJZGVudGlmaWVyLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0
KCldOworICAgIFtUZXN0UnVubmVyV0tXZWJWaWV3IF9zZXRBcHBsaWNhdGlvbkJ1bmRsZUlkZW50
aWZpZXI6KE5TU3RyaW5nICopdG9XVEZTdHJpbmcoYnVuZGxlSWRlbnRpZmllcikuY3JlYXRlQ0ZT
dHJpbmcoKS5nZXQoKV07CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNsZWFyQXBwbGljYXRp
b25CdW5kbGVJZGVudGlmaWVyVGVzdGluZ092ZXJyaWRlKCkKQEAgLTI4Niw3ICsyODgsNyBAQCB2
b2lkIFRlc3RDb250cm9sbGVyOjpjb2NvYVJlc2V0U3RhdGVUb0NvCiAgICAgICAgIFRlc3RSdW5u
ZXJXS1dlYlZpZXcgKnBsYXRmb3JtVmlldyA9IHdlYlZpZXctPnBsYXRmb3JtVmlldygpOwogICAg
ICAgICBwbGF0Zm9ybVZpZXcuX3ZpZXdTY2FsZSA9IDE7CiAgICAgICAgIHBsYXRmb3JtVmlldy5f
bWluaW11bUVmZmVjdGl2ZURldmljZVdpZHRoID0gMDsKLSAgICAgICAgW3BsYXRmb3JtVmlldyBf
c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yVGVzdGluZzpvcHRpb25zLnNob3Vs
ZFNob3dTcGVsbENoZWNraW5nRG90c107CisgICAgICAgIFtwbGF0Zm9ybVZpZXcgX3NldENvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZEZvclRlc3Rpbmc6b3B0aW9ucy5zaG91bGRTaG93U3Bl
bGxDaGVja2luZ0RvdHMoKV07CiAgICAgICAgIFtwbGF0Zm9ybVZpZXcgcmVzZXRJbnRlcmFjdGlv
bkNhbGxiYWNrc107CiAgICAgICAgIFtwbGF0Zm9ybVZpZXcgX3Jlc2V0TmF2aWdhdGlvbkdlc3R1
cmVTdGF0ZUZvclRlc3RpbmddOwogICAgIH0KQEAgLTI5Nyw2ICsyOTksMTEgQEAgdm9pZCBUZXN0
Q29udHJvbGxlcjo6Y29jb2FSZXNldFN0YXRlVG9Dbwogdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1XaWxsUnVuVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYgdGVzdEludm9jYXRpb24pCiB7
CiAgICAgc2V0Q3Jhc2hSZXBvcnRBcHBsaWNhdGlvblNwZWNpZmljSW5mb3JtYXRpb25Ub1VSTCh0
ZXN0SW52b2NhdGlvbi51cmwoKSk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGlm
ICh0ZXN0SW52b2NhdGlvbi5vcHRpb25zKCkuZW5hYmxlSW5BcHBCcm93c2VyUHJpdmFjeSgpKQor
ICAgICAgICBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBzZXRCb29sOllF
UyBmb3JLZXk6QCJXZWJLaXREZWJ1Z0lzSW5BcHBCcm93c2VyUHJpdmFjeUVuYWJsZWQiXTsKKyNl
bmRpZgogfQogCiBzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBXZWJBcmNoaXZlUGJvYXJkVHlwZSA9
IEAiQXBwbGUgV2ViIEFyY2hpdmUgcGFzdGVib2FyZCB0eXBlIjsKQEAgLTQ4NywxMiArNDk0LDEx
IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OmlzRG9pbmdNZWRpYUNhcHR1cmUKIAogc3RhdGljIFdL
Q29udGVudE1vZGUgY29udGVudE1vZGUoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0g
ICAgaWYgKG9wdGlvbnMuY29udGVudE1vZGUgPT0gImRlc2t0b3AiX3MpCisgICAgYXV0byBtb2Rl
ID0gb3B0aW9ucy5jb250ZW50TW9kZSgpOworICAgIGlmIChtb2RlID09ICJkZXNrdG9wIikKICAg
ICAgICAgcmV0dXJuIFdLQ29udGVudE1vZGVEZXNrdG9wOwotCi0gICAgaWYgKG9wdGlvbnMuY29u
dGVudE1vZGUgPT0gIm1vYmlsZSJfcykKKyAgICBpZiAobW9kZSA9PSAibW9iaWxlIikKICAgICAg
ICAgcmV0dXJuIFdLQ29udGVudE1vZGVNb2JpbGU7Ci0KICAgICByZXR1cm4gV0tDb250ZW50TW9k
ZVJlY29tbWVuZGVkOwogfQogCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0
Q29udHJvbGxlckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9n
dGsvVGVzdENvbnRyb2xsZXJHdGsuY3BwCShyZXZpc2lvbiAyNjc5NDgpCisrKyBUb29scy9XZWJL
aXRUZXN0UnVubmVyL2d0ay9UZXN0Q29udHJvbGxlckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1MCw5ICsxNTAsMTEgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1SZXNldFByZWZl
cgogICAgIG1fbWFpbldlYlZpZXctPmRpc21pc3NBbGxQb3B1cE1lbnVzKCk7CiB9CiAKLXZvaWQg
VGVzdENvbnRyb2xsZXI6OnVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNUZXN0T3B0aW9uc0ZvclRlc3Qo
VGVzdE9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IHN0ZDo6c3RyaW5nJikgY29uc3QKK1Rlc3RGZWF0
dXJlcyBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRl
c3QoY29uc3QgVGVzdENvbW1hbmQmKSBjb25zdAogewotICAgIG9wdGlvbnMuZW5hYmxlTW9kZXJu
TWVkaWFDb250cm9scyA9IGZhbHNlOworICAgIFRlc3RGZWF0dXJlcyBmZWF0dXJlczsKKyAgICBm
ZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgImVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMi
LCBmYWxzZSB9KTsKKyAgICByZXR1cm4gZmVhdHVyZXM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdU
UgpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJ
T1MubW0JKHJldmlzaW9uIDI2Nzk0OCkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rl
c3RDb250cm9sbGVySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNyArMTkwLDcgQEAgYm9v
bCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1SZXNldFN0YXRlVAogICAgIH0KIAogICAgIG1fcHJl
c2VudFBvcG92ZXJTd2l6emxlcnMuY2xlYXIoKTsKLSAgICBpZiAoIW9wdGlvbnMuc2hvdWxkUHJl
c2VudFBvcG92ZXJzKSB7CisgICAgaWYgKCFvcHRpb25zLnNob3VsZFByZXNlbnRQb3BvdmVycygp
KSB7CiAjaWYgVVNFKFVJQ09OVEVYVE1FTlUpCiAgICAgICAgIG1fcHJlc2VudFBvcG92ZXJTd2l6
emxlcnMuYXBwZW5kKG1ha2VVbmlxdWU8SW5zdGFuY2VNZXRob2RTd2l6emxlcj4oW1VJQ29udGV4
dE1lbnVJbnRlcmFjdGlvbiBjbGFzc10sIEBzZWxlY3RvcihfcHJlc2VudE1lbnVBdExvY2F0aW9u
OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZVByZXNlbnRNZW51T3JQb3BvdmVyT3JW
aWV3Q29udHJvbGxlcikpKTsKICNlbmRpZgpAQCAtMjEzLDggKzIxMywxMCBAQCBib29sIFRlc3RD
b250cm9sbGVyOjpwbGF0Zm9ybVJlc2V0U3RhdGVUCiAgICAgICAgIFVJU2Nyb2xsVmlldyAqc2Ny
b2xsVmlldyA9IHdlYlZpZXcuc2Nyb2xsVmlldzsKICAgICAgICAgW3Njcm9sbFZpZXcgX3JlbW92
ZUFsbEFuaW1hdGlvbnM6WUVTXTsKICAgICAgICAgW3Njcm9sbFZpZXcgc2V0Wm9vbVNjYWxlOjEg
YW5pbWF0ZWQ6Tk9dOwotICAgICAgICBzY3JvbGxWaWV3LmNvbnRlbnRJbnNldCA9IFVJRWRnZUlu
c2V0c01ha2Uob3B0aW9ucy5jb250ZW50SW5zZXRUb3AsIDAsIDAsIDApOwotICAgICAgICBzY3Jv
bGxWaWV3LmNvbnRlbnRPZmZzZXQgPSBDR1BvaW50TWFrZSgwLCAtb3B0aW9ucy5jb250ZW50SW5z
ZXRUb3ApOworICAgICAgICAKKyAgICAgICAgYXV0byBjb250ZW50SW5zZXRUb3AgPSBvcHRpb25z
LmNvbnRlbnRJbnNldFRvcCgpOworICAgICAgICBzY3JvbGxWaWV3LmNvbnRlbnRJbnNldCA9IFVJ
RWRnZUluc2V0c01ha2UoY29udGVudEluc2V0VG9wLCAwLCAwLCAwKTsKKyAgICAgICAgc2Nyb2xs
Vmlldy5jb250ZW50T2Zmc2V0ID0gQ0dQb2ludE1ha2UoMCwgLWNvbnRlbnRJbnNldFRvcCk7CiAK
ICAgICAgICAgaWYgKHdlYlZpZXcuaW50ZXJhY3RpbmdXaXRoRm9ybUNvbnRyb2wpCiAgICAgICAg
ICAgICBzaG91bGRSZXN0b3JlRmlyc3RSZXNwb25kZXIgPSBbd2ViVmlldyByZXNpZ25GaXJzdFJl
c3BvbmRlcl07CkBAIC0yNjUsMTIgKzI2NywxNCBAQCBib29sIFRlc3RDb250cm9sbGVyOjpwbGF0
Zm9ybVJlc2V0U3RhdGVUCiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQ29uZmlndXJl
Vmlld0ZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mIHRlc3QpCiB7CisgICAgW1tHZW5lcmF0
ZWRUb3VjaGVzRGVidWdXaW5kb3cgc2hhcmVkR2VuZXJhdGVkVG91Y2hlc0RlYnVnV2luZG93XSBz
ZXRTaG91bGRTaG93VG91Y2hlczp0ZXN0Lm9wdGlvbnMoKS5zaG91bGRTaG93VG91Y2hlcygpXTsK
KwogICAgIFRlc3RSdW5uZXJXS1dlYlZpZXcgKndlYlZpZXcgPSBtYWluV2ViVmlldygpLT5wbGF0
Zm9ybVZpZXcoKTsKIAotICAgIGlmICh0ZXN0Lm9wdGlvbnMoKS5zaG91bGRJZ25vcmVNZXRhVmll
d3BvcnQpCisgICAgaWYgKHRlc3Qub3B0aW9ucygpLnNob3VsZElnbm9yZU1ldGFWaWV3cG9ydCgp
KQogICAgICAgICB3ZWJWaWV3LmNvbmZpZ3VyYXRpb24ucHJlZmVyZW5jZXMuX3Nob3VsZElnbm9y
ZU1ldGFWaWV3cG9ydCA9IFlFUzsKIAotICAgIGlmICghdGVzdC5vcHRpb25zKCkudXNlRmxleGli
bGVWaWV3cG9ydCkKKyAgICBpZiAoIXRlc3Qub3B0aW9ucygpLnVzZUZsZXhpYmxlVmlld3BvcnQo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0dSZWN0IHNjcmVlbkJvdW5kcyA9IFtVSVNjcmVl
biBtYWluU2NyZWVuXS5ib3VuZHM7CkBAIC0yOTEsMTAgKzI5NSw5IEBAIHZvaWQgVGVzdENvbnRy
b2xsZXI6OnBsYXRmb3JtQ29uZmlndXJlVmkKICAgICAvLyBXS0J1bmRsZVBhZ2VTZXRVc2VUZXN0
aW5nVmlld3BvcnRDb25maWd1cmF0aW9uKGZhbHNlKS4KIH0KIAotdm9pZCBUZXN0Q29udHJvbGxl
cjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9yVGVzdChUZXN0T3B0aW9ucyYg
b3B0aW9ucywgY29uc3Qgc3RkOjpzdHJpbmcmKSBjb25zdAorVGVzdEZlYXR1cmVzIFRlc3RDb250
cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1bHRzRm9yVGVzdChjb25zdCBUZXN0
Q29tbWFuZCYpIGNvbnN0CiB7Ci0gICAgb3B0aW9ucy5zaG91bGRTaG93VG91Y2hlcyA9IHNob3Vs
ZFNob3dUb3VjaGVzKCk7Ci0gICAgW1tHZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5kb3cgc2hhcmVk
R2VuZXJhdGVkVG91Y2hlc0RlYnVnV2luZG93XSBzZXRTaG91bGRTaG93VG91Y2hlczpvcHRpb25z
LnNob3VsZFNob3dUb3VjaGVzXTsKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIFRlc3RDb250
cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemVDb250ZXh0KCkKSW5kZXg6IFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvbWFjL1BsYXRmb3JtV2ViVmlld01hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL21hYy9QbGF0Zm9ybVdlYlZpZXdNYWMubW0JKHJldmlzaW9uIDI2Nzk0
OCkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1BsYXRmb3JtV2ViVmlld01hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtNjEsMTggKzYxLDE4IEBAIFBsYXRmb3JtV2ViVmlldzo6UGxhdGZv
cm1XZWJWaWV3KFdLV2ViVmkKICAgICAsIG1fb3B0aW9ucyhvcHRpb25zKQogewogICAgIC8vIEZJ
WE1FOiBOb3Qgc3VyZSB0aGlzIGlzIHRoZSBiZXN0IHBsYWNlIGZvciB0aGlzOyBtYXliZSB3ZSBz
aG91bGQgaGF2ZSBBUEkgdG8gc2V0IHRoaXMgc28gd2UgY2FuIGRvIGl0IGZyb20gVGVzdENvbnRy
b2xsZXI/Ci0gICAgaWYgKG1fb3B0aW9ucy51c2VSZW1vdGVMYXllclRyZWUpCisgICAgaWYgKG1f
b3B0aW9ucy51c2VSZW1vdGVMYXllclRyZWUoKSkKICAgICAgICAgW1tOU1VzZXJEZWZhdWx0cyBz
dGFuZGFyZFVzZXJEZWZhdWx0c10gc2V0VmFsdWU6QFlFUyBmb3JLZXk6QCJXZWJLaXQyVXNlUmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEiXTsKIAogICAgIGF1dG8gY29waWVkQ29uZmlndXJhdGlv
biA9IGFkb3B0TlMoW2NvbmZpZ3VyYXRpb24gY29weV0pOwotICAgIFdLUHJlZmVyZW5jZXNTZXRU
aHJlYWRlZFNjcm9sbGluZ0VuYWJsZWQoKF9fYnJpZGdlIFdLUHJlZmVyZW5jZXNSZWYpW2NvcGll
ZENvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdLCBtX29wdGlvbnMudXNlVGhyZWFkZWRTY3JvbGxp
bmcpOworICAgIFdLUHJlZmVyZW5jZXNTZXRUaHJlYWRlZFNjcm9sbGluZ0VuYWJsZWQoKF9fYnJp
ZGdlIFdLUHJlZmVyZW5jZXNSZWYpW2NvcGllZENvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdLCBt
X29wdGlvbnMudXNlVGhyZWFkZWRTY3JvbGxpbmcoKSk7CiAKICAgICBOU1JlY3QgcmVjdCA9IE5T
TWFrZVJlY3QoMCwgMCwgVGVzdENvbnRyb2xsZXI6OnZpZXdXaWR0aCwgVGVzdENvbnRyb2xsZXI6
OnZpZXdIZWlnaHQpOwogICAgIG1fdmlldyA9IFtbVGVzdFJ1bm5lcldLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpyZWN0IGNvbmZpZ3VyYXRpb246Y29waWVkQ29uZmlndXJhdGlvbi5nZXQo
KV07CiAgICAgW21fdmlldyBfc2V0V2luZG93T2NjbHVzaW9uRGV0ZWN0aW9uRW5hYmxlZDpOT107
CiAKICAgICBOU1NjcmVlbiAqZmlyc3RTY3JlZW4gPSBbW05TU2NyZWVuIHNjcmVlbnNdIG9iamVj
dEF0SW5kZXg6MF07Ci0gICAgTlNSZWN0IHdpbmRvd1JlY3QgPSBtX29wdGlvbnMuc2hvdWxkU2hv
d1dlYlZpZXcgPyBOU09mZnNldFJlY3QocmVjdCwgMTAwLCAxMDApIDogTlNPZmZzZXRSZWN0KHJl
Y3QsIC0xMDAwMCwgW2ZpcnN0U2NyZWVuIGZyYW1lXS5zaXplLmhlaWdodCAtIHJlY3Quc2l6ZS5o
ZWlnaHQgKyAxMDAwMCk7CisgICAgTlNSZWN0IHdpbmRvd1JlY3QgPSBtX29wdGlvbnMuc2hvdWxk
U2hvd1dlYlZpZXcoKSA/IE5TT2Zmc2V0UmVjdChyZWN0LCAxMDAsIDEwMCkgOiBOU09mZnNldFJl
Y3QocmVjdCwgLTEwMDAwLCBbZmlyc3RTY3JlZW4gZnJhbWVdLnNpemUuaGVpZ2h0IC0gcmVjdC5z
aXplLmhlaWdodCArIDEwMDAwKTsKICAgICBtX3dpbmRvdyA9IFtbV2ViS2l0VGVzdFJ1bm5lcldp
bmRvdyBhbGxvY10gaW5pdFdpdGhDb250ZW50UmVjdDp3aW5kb3dSZWN0IHN0eWxlTWFzazpOU1dp
bmRvd1N0eWxlTWFza0JvcmRlcmxlc3MgYmFja2luZzooTlNCYWNraW5nU3RvcmVUeXBlKV9OU0Jh
Y2tpbmdTdG9yZVVuYnVmZmVyZWQgZGVmZXI6WUVTXTsKICAgICBtX3dpbmRvdy5wbGF0Zm9ybVdl
YlZpZXcgPSB0aGlzOwogICAgIFttX3dpbmRvdyBzZXRDb2xvclNwYWNlOltmaXJzdFNjcmVlbiBj
b2xvclNwYWNlXV07CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9UZXN0Q29udHJv
bGxlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9UZXN0
Q29udHJvbGxlck1hYy5tbQkocmV2aXNpb24gMjY3OTQ4KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9tYWMvVGVzdENvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE3MiwxMSAr
MTcyLDExIEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRTdGF0ZVQKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVj
aWZpY1Rlc3RPcHRpb25zRm9yVGVzdChUZXN0T3B0aW9ucyYgb3B0aW9ucywgY29uc3Qgc3RkOjpz
dHJpbmcmKSBjb25zdAorVGVzdEZlYXR1cmVzIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNp
ZmljRmVhdHVyZURlZmF1bHRzRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYpIGNvbnN0CiB7Ci0g
ICAgb3B0aW9ucy51c2VUaHJlYWRlZFNjcm9sbGluZyA9IHRydWU7Ci0gICAgb3B0aW9ucy51c2VS
ZW1vdGVMYXllclRyZWUgPSBzaG91bGRVc2VSZW1vdGVMYXllclRyZWUoKTsKLSAgICBvcHRpb25z
LnNob3VsZFNob3dXZWJWaWV3ID0gc2hvdWxkU2hvd1dlYlZpZXcoKTsKKyAgICBUZXN0RmVhdHVy
ZXMgZmVhdHVyZXM7CisgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJ1c2VUaHJl
YWRlZFNjcm9sbGluZyIsIHRydWUgfSk7CisgICAgcmV0dXJuIGZlYXR1cmVzOwogfQogCiB2b2lk
IFRlc3RDb250cm9sbGVyOjpjb25maWd1cmVDb250ZW50RXh0ZW5zaW9uRm9yVGVzdChjb25zdCBU
ZXN0SW52b2NhdGlvbiYgdGVzdCkKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL1Bs
YXRmb3JtV2ViVmlld1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci93aW4vUGxhdGZvcm1XZWJWaWV3V2luLmNwcAkocmV2aXNpb24gMjY3OTQ4KQorKysgVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci93aW4vUGxhdGZvcm1XZWJWaWV3V2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQ0LDcgKzE0NCw3IEBAIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzZXRXaW5kb3dGcmFt
ZShXS1IKICAgICAgICAgU1dQX05PTU9WRSB8IFNXUF9OT1pPUkRFUiB8IFNXUF9OT0FDVElWQVRF
IHwgU1dQX05PQ09QWUJJVFMpOwogCiAgICAgVUlOVCBmbGFncyA9IFNXUF9OT1pPUkRFUiB8IFNX
UF9OT0FDVElWQVRFIHwgU1dQX05PQ09QWUJJVFM7Ci0gICAgaWYgKG1fb3B0aW9ucy5zaG91bGRT
aG93V2ViVmlldykKKyAgICBpZiAobV9vcHRpb25zLnNob3VsZFNob3dXZWJWaWV3KCkpCiAgICAg
ICAgIGZsYWdzIHw9IFNXUF9OT01PVkU7CiAgICAgOjpTZXRXaW5kb3dQb3MoCiAgICAgICAgIG1f
d2luZG93LApJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93aW4vVGVzdENvbnRyb2xsZXJX
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL1Rlc3RDb250
cm9sbGVyV2luLmNwcAkocmV2aXNpb24gMjY3OTQ4KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci93aW4vVGVzdENvbnRyb2xsZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjcsOSArMjI3
LDkgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1SZXNldFByZWZlcgogICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgVGVzdENvbnRyb2xsZXI6OnVwZGF0ZVBsYXRmb3JtU3Bl
Y2lmaWNUZXN0T3B0aW9uc0ZvclRlc3QoVGVzdE9wdGlvbnMmLCBjb25zdCBzdGQ6OnN0cmluZyYp
IGNvbnN0CitUZXN0RmVhdHVyZXMgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtU3BlY2lmaWNGZWF0
dXJlRGVmYXVsdHNGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJikgY29uc3QKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiB7IH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpJ
bmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93cGUvVGVzdENvbnRyb2xsZXJXUEUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd3BlL1Rlc3RDb250cm9sbGVyV1BF
LmNwcAkocmV2aXNpb24gMjY3OTQ4KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93cGUvVGVz
dENvbnRyb2xsZXJXUEUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsOSArMTM2LDExIEBAIHZv
aWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRQcmVmZXIKIHsKIH0KIAotdm9pZCBUZXN0
Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9yVGVzdChUZXN0
T3B0aW9ucyYgb3B0aW9ucywgY29uc3Qgc3RkOjpzdHJpbmcmKSBjb25zdAorVGVzdEZlYXR1cmVz
IFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1bHRzRm9yVGVzdChj
b25zdCBUZXN0Q29tbWFuZCYpIGNvbnN0CiB7Ci0gICAgb3B0aW9ucy5lbmFibGVNb2Rlcm5NZWRp
YUNvbnRyb2xzID0gZmFsc2U7CisgICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVzOworICAgIGZlYXR1
cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAiZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyIsIGZh
bHNlIH0pOworICAgIHJldHVybiBmZWF0dXJlczsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RSCklu
ZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjc5NDgpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAyMC0xMC0wNCAgU2FtIFdlaW5pZyAgPHdlaW5p
Z0BhcHBsZS5jb20+CisKKyAgICAgICAgW1Rlc3RpbmddIEFkZCBzdXBwb3J0IGZvciBwZXItZGly
ZWN0b3J5IG92ZXJyaWRpbmcgb2YgdGVzdGluZyBvcHRpb25zIHZpYSBuZXcgVGVzdE9wdGlvbnMu
dHh0IGZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTcyOTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRzIGRpcmVjdG9yeSBiYXNlZCBUZXN0T3B0aW9ucy50eHQgZmlsZXMgdG8gcmVwbGFjZSBo
YXJkIGNvZGluZyBpbiBXZWJLaXRUZXN0UnVubmVyCisgICAgICAgIGZvciBvcHRpb25zIG92ZXJy
aWRpbmcuCisKKyAgICAgICAgKiBmYXN0L3ZpZXdwb3J0L1Rlc3RPcHRpb25zLnR4dDogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vaXBhZC9mYXN0L3ZpZXdwb3J0L1Rlc3RPcHRpb25zLnR4dDog
QWRkZWQuCisgICAgICAgICogc3ZnL1czQy1TVkctMS4xLVNFL1Rlc3RPcHRpb25zLnR4dDogQWRk
ZWQuCisgICAgICAgICogc3ZnL1czQy1TVkctMS4xL1Rlc3RPcHRpb25zLnR4dDogQWRkZWQuCisK
IDIwMjAtMTAtMDQgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBb
TEZDXVtJbnRlZ3JhdGlvbl0gRW5hYmxlIHNvZnQgaHlwaGVuCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L3ZpZXdwb3J0L1Rlc3RPcHRpb25zLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L3ZpZXdwb3J0L1Rlc3RPcHRpb25zLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0
cy9mYXN0L3ZpZXdwb3J0L1Rlc3RPcHRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
IEBACit3ZWJraXQtdGVzdC1ydW5uZXIgWyB1c2VGbGV4aWJsZVZpZXdwb3J0PXRydWUgXQpJbmRl
eDogTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjc5NDgpCisrKyBMYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTUgQEAKKzIwMjAtMTAtMDQgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAg
ICAgIFtUZXN0aW5nXSBBZGQgc3VwcG9ydCBmb3IgcGVyLWRpcmVjdG9yeSBvdmVycmlkaW5nIG9m
IHRlc3Rpbmcgb3B0aW9ucyB2aWEgbmV3IFRlc3RPcHRpb25zLnR4dCBmaWxlcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3Mjk3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBkaXJlY3RvcnkgYmFz
ZWQgVGVzdE9wdGlvbnMudHh0IGZpbGVzIHRvIHJlcGxhY2UgaGFyZCBjb2RpbmcgaW4gV2ViS2l0
VGVzdFJ1bm5lcgorICAgICAgICBmb3Igb3B0aW9ucyBvdmVycmlkaW5nLgorCisgICAgICAgICog
SW5kZXhlZERCLXByaXZhdGUtYnJvd3NpbmcvVGVzdE9wdGlvbnMudHh0OiBBZGRlZC4KKwogMjAy
MC0xMC0wMyAgT3Jpb2wgQnJ1ZmF1ICA8b2JydWZhdUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtj
c3MtbGlzdHNdIEltcGxlbWVudCBsaXN0LXN0eWxlLXR5cGU6IDxzdHJpbmc+CkluZGV4OiBMYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2MvSW5kZXhlZERCLXByaXZhdGUtYnJvd3NpbmcvVGVzdE9wdGlv
bnMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy9JbmRleGVkREIt
cHJpdmF0ZS1icm93c2luZy9UZXN0T3B0aW9ucy50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL0luZGV4ZWREQi1wcml2YXRlLWJyb3dzaW5nL1Rlc3RPcHRpb25z
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3ZWJraXQtdGVzdC1ydW5uZXIgWyB1
c2VFcGhlbWVyYWxTZXNzaW9uPXRydWUgXQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vaXBh
ZC9mYXN0L3ZpZXdwb3J0L1Rlc3RPcHRpb25zLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9pcGFkL2Zhc3Qvdmlld3BvcnQvVGVzdE9wdGlvbnMudHh0CShub25leGlzdGVu
dCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2lwYWQvZmFzdC92aWV3cG9ydC9UZXN0T3B0aW9u
cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSBAQAord2Via2l0LXRlc3QtcnVubmVyIFsg
dXNlRmxleGlibGVWaWV3cG9ydD10cnVlIF0KSW5kZXg6IExheW91dFRlc3RzL3N2Zy9XM0MtU1ZH
LTEuMS1TRS9UZXN0T3B0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL1cz
Qy1TVkctMS4xLVNFL1Rlc3RPcHRpb25zLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0
cy9zdmcvVzNDLVNWRy0xLjEtU0UvVGVzdE9wdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEgQEAKK3dlYmtpdC10ZXN0LXJ1bm5lciBbIGlzU1ZHVGVzdD10cnVlIF0KSW5kZXg6IExh
eW91dFRlc3RzL3N2Zy9XM0MtU1ZHLTEuMS9UZXN0T3B0aW9ucy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvc3ZnL1czQy1TVkctMS4xL1Rlc3RPcHRpb25zLnR4dAkobm9uZXhpc3RlbnQp
CisrKyBMYXlvdXRUZXN0cy9zdmcvVzNDLVNWRy0xLjEvVGVzdE9wdGlvbnMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtpdC10ZXN0LXJ1bm5lciBbIGlzU1ZHVGVzdD10cnVl
IF0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410482</attachid>
            <date>2020-10-04 14:07:01 -0700</date>
            <delta_ts>2020-10-06 08:50:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217297-20201004140700.patch</filename>
            <type>text/plain</type>
            <size>276129</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2Nzk0OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE4NCBAQAorMjAyMC0xMC0wNCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgW1Rlc3RpbmddIEFkZCBzdXBwb3J0IGZvciBwZXItZGlyZWN0b3J5IG92ZXJyaWRp
bmcgb2YgdGVzdGluZyBvcHRpb25zIHZpYSBuZXcgVGVzdE9wdGlvbnMudHh0IGZpbGVzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcyOTcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGludHJvZHVj
ZXMgYSBuZXcgY29uY2VwdCBmb3Igd2Via2l0IHRlc3RzICh0aG9zZSB3aXRoaW4gdGhlIExheW91
dFRlc3RzIGRpcmVjdG9yeSkKKyAgICAgICAgdGhhdCBleHRlbmRzIHRoZSBleGlzdGluZyB0ZXN0
LWhlYWRlciBiYXNlZCBjb25maWd1cmF0aW9uIG9mIHRlc3Qgb3B0aW9ucyAodGhvc2UgY29tbWVu
dHMKKyAgICAgICAgYXQgdGhlIHRvcCBvZiBzb21ldCB0ZXN0IGZpbGVzIHRoYXQgbG9vayBsaWtl
ICJ3ZWJraXQtdGVzdC1ydW5uZXIgWyAuLi4gXSIpIHRvIGFsc28gYWxsb3cKKyAgICAgICAgZGly
ZWN0b3J5IHdpZGUgb3ZlcnJpZGluZyBvZiB0ZXN0IG9wdGlvbnMgdmlhIGEgbmV3IFRlc3RPcHRp
b25zLnR4dCBmaWxlLiBUaGVzZSBmaWxlcyBhcmUKKyAgICAgICAgZm9yIG5vdyBleHBlY3RlZCB0
byB1c2UgdGhlIHNhbWUgIndlYmtpdC10ZXN0LXJ1bm5lciBbIC4uLiBdIiBzeW50YXggYXMgdGhl
IHRlc3QtaGVhZGVyIGJhc2VkCisgICAgICAgIG9uZXMgZm9yIGNvbnNpc3RlbmN5IGFuZCBzaW1w
bGljaXR5IG9mIGltcGxlbWVudGF0aW9uLCBidXQgaW4gdGhlIGZ1dHVyZSB3ZSBtYXkgZGVjaWRl
IGl0CisgICAgICAgIG1ha2VzIG1vcmUgc2Vuc2UgdG8gdXRpbGl6ZSB0aGUgYWRkaXRpb25hbCBz
cGFjZS4KKworICAgICAgICBOb3cgdGhhdCB3ZSBoYXZlIGV2ZW4gbW9yZSBzb3VyY2VzIG9mIHRl
c3Qgb3B0aW9ucyBjb21pbmcgaW4sIHdlIG5lZWQgdG8gaGF2ZSBhIGRlZmluZWQgc2V0CisgICAg
ICAgIG9mIHJ1bGVzIGZvciBpbiB3aGljaCBvcmRlciBvcHRpb25zIHRha2UgcHJlY2VkZW5jZS4g
VGhlIG9yZGVyIGlzIChmcm9tIGxlYXN0IHRvIG1vc3QpOgorICAgICAgICAKKyAgICAgICAgLSBH
bG9iYWwgZmVhdHVyZXMgcGFzc2VkIHRvIFdlYktpdFRlc3RSdW5uZXIgdmlhIHRoZSBjb21tYW5k
IGxpbmUgKGUuZy4gLS1zaG93LXRvdWNoZXMpCisgICAgICAgIC0gSGFyZGNvZGVkIGZlYXR1cmVz
IGJhc2VkIG9uIHRoZSBwYXRoIG9mIHRoZSB0ZXN0IGJlaW5nIHJ1biAoaG9wZWZ1bGx5IHdlIGNh
biByZW1vdmUgYWxsIHNvb24pCisgICAgICAgIC0gSGFyZGNvZGVkIHBsYXRmb3JtIHNwZWNpZmlj
IGRlZmF1bHRzIChjdXJyZW50bHkgb25seSB1c2VkIGJ5IG1hY09TIGZvciB1c2VUaHJlYWRlZFNj
cm9sbGluZykuCisgICAgICAgIC0gRmVhdHVyZXMgZnJvbSBUZXN0T3B0aW9ucy50eHQgZmlsZXMs
IHdpdGggdGhlIG1vc3QgZGlyZWN0b3JpZXMgY2xvc2VyIHRvIC4vTGF5b3V0VGVzdHMgdGFrZWlu
ZworICAgICAgICAgIGxlc3MgcHJlY2VkZW5jZSB0aGFuIHRob3NlIGNsb3NlciB0byB0aGUgdGVz
dCBmaWxlIChlLmcuIGFuIG9wdGlvbiBpbiAKKyAgICAgICAgICAuL0xheW91dFRlc3RzL2Zhc3Qv
Zm9ybXMvVGVzdE9wdGlvbnMudHh0IHdpbGwgd2luIG92ZXIgb25lIGluIC4vTGF5b3V0VGVzdHMv
ZmFzdC9UZXN0T3B0aW9ucy50eHQpLgorICAgICAgICAtIEZlYXR1cmVzIGZyb20gdGhlIHRlc3Qg
aGVhZGVycyB3aXRoaW4gdGhlIHRlc3QgaXRzZWxmLgorICAgICAgICAtIEZpbmFsbHksIGEgc2Vj
b25kIGNoYW5jZSBmb3IgbW9yZSBwbGF0Zm9ybSBzcGVjaWZpYyBkZWZhdWx0cyAoY3VycmVubHkg
b25seSB1c2VkIHRoZSBjb2NvYSBwb3J0cworICAgICAgICAgIGZvciBzZXR0aW5nIGVuYWJsZVBy
b2Nlc3NTd2FwT25OYXZpZ2F0aW9uIGFuZCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiBi
YXNlZCBvbiBOU1VzZXJEZWZhdWx0cy4pCisgICAgICAgIAorICAgICAgICBIb3BlZnVsbHkgaW4g
dGhlIGZ1dHVyZSwgd2Ugd2lsbCBiZSBhYmxlIHRvIHNpbXBsaWZ5IHRoYXQgYXMgd2UgcmVtb3Zl
IHNvbWUgb2YgdGhlc2UgbGV2ZWxzLCBwZXJoYXBzCisgICAgICAgIGJ5IGV4dGVuZGluZyBUZXN0
T3B0aW9ucy50eHQgdG8gYmUgYWJsZSB0byBzZXQgcGxhdGZvcm0gc3BlY2ZpYyBvdmVycmlkZXMu
CisKKyAgICAgICAgVG8gbWFrZSB0aGlzIGNoYW5nZSB3b3JrLCBhbmQgcGF2ZSB0aGUgd2F5IGZv
ciBmdXR1cmUgYXV0b2dlbmVyYXRpb24gb2Ygc29tZSBvZiB0aGVzZSB0ZXN0IG9wdGlvbnMsCisg
ICAgICAgIHRoZSBUZXN0T3B0aW9ucyBzdHJ1Y3QgKG5vdyBjbGFzcykgd2FzIG92ZXJoYXVsZWQu
IEluc3RlYWQgb2Ygc3RvcmluZyB0aGUgc3RhdGUgaXRzZWxmLCBpdCBUZXN0T3B0aW9ucworICAg
ICAgICBpcyBub3cgYW4gaW1tdXRhYmxlIG93bmVyIG9mIGEgVGVzdEZlYXR1cmVzIG9iamVjdC4g
VGVzdEZlYXR1cmVzIGlzIGEgc2ltcGxlIHN0cnVjdCB0aGF0IGNvbnRhaW5zIG1hcHMgCisgICAg
ICAgIG9mIG9wdGlvbiBrZXlzIHRvIHZhbHVlcyBhbmQgY2FuIGJlIG1lcmdlZCB3aXRoIG90aGVy
IFRlc3RGZWF0dXJlcyBvYmplY3RzLiBUZXN0T3B0aW9ucyB0YWtlcyBhIAorICAgICAgICBUZXN0
RmVhdHVyZXMgYXQgY29uc3RydWN0aW9uLCBhbmQgZXhwb3NlcyBnZXR0ZXJzIGZvciBhbGwga2V5
cywgYXMgd2VsbCBhcyBkZWZhdWx0cyBmb3Igd2hlbiB0aGV5IGFyZQorICAgICAgICBub3QgaW4g
dGhlIG1hcHMuIEluIGZ1dHVyZSBjaGFuZ2VzLCBJIHdvdWxkIGxpa2UgdG8gcmVtb3ZlIG1hbnkg
b2YgdGhlc2UgKHRoZSBvbmVzIHRoYXQgY29ycmVzcG9uZAorICAgICAgICB3aXRoIFdlYktpdCBw
cmVmZXJlbmNlcyBhbnl3YXkpIGFuZCBoYXZlIHRoZSBrZXlzIGFuZCB2YWx1ZXMgYXV0b21hdGlj
YWxseSBkZWFsdCB3aXRoIGJ5IFdLUHJlZmVyZW5jZXMuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL09wdGlvbnMuY3BwOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5o
OgorICAgICAgICBTd2l0Y2ggdG8gc3RkOjp1bm9yZGVyZWRfbWFwIGZvciBjb25zaXN0ZW5jeSBh
bmQgZWFzZSBvZiBjb252ZXJzaW9uLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9QbGF0
Zm9ybVdlYlZpZXcuaDoKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3Ojp2aWV3U3VwcG9y
dHNPcHRpb25zIGNvbnN0KToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3IFRlc3RPcHRpb25z
IGZ1bmN0aW9ucy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25z
Lmg6CisgICAgICAgIChXVFI6OnRvV0spOgorICAgICAgICAoV1RSOjp0b1dURlN0cmluZyk6Cisg
ICAgICAgIEFkZCBjb252ZXJzaW9ucyBmb3Igc3RkOjpzdHJpbmcuCisKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjppbml0
aWFsaXplKToKKyAgICAgICAgUmVwbGFjZSBzb21lIGJvb2xzIHdpdGggYSBuZXcgZ2xvYmFsIFRl
c3RGZWF0dXJlcyBpbnN0YW5jZSB0aGF0IGZvcm1zIHRoZSBiYXNlIG9mCisgICAgICAgIGFsbCBU
ZXN0RmVhdHVyZXMgbWVyZ2VzLgorICAgICAgICAKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xs
ZXI6OmdlbmVyYXRlQ29udGV4dENvbmZpZ3VyYXRpb24gY29uc3QpOgorICAgICAgICAoV1RSOjpU
ZXN0Q29udHJvbGxlcjo6Z2VuZXJhdGVQYWdlQ29uZmlndXJhdGlvbik6CisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpjcmVhdGVXZWJWaWV3V2l0aE9wdGlvbnMpOgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6ZW5zdXJlVmlld1N1cHBvcnRzT3B0aW9uc0ZvclRlc3QpOgorICAg
ICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRQcmVmZXJlbmNlc1RvQ29uc2lzdGVudFZh
bHVlcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0
ZW50VmFsdWVzKToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3IFRlc3RPcHRpb25zIGZ1bmN0
aW9ucy4KKyAgICAgICAgCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpjcmVhdGVUZXN0
VVJMKToKKyAgICAgICAgRXhwb3NlIGFzIGEgc3RhdGljIG1lbWJlciBmdW5jdGlvbiBvbiBUZXN0
Q29udHJvbGxlciBmb3IgdXNlIGluIG90aGVyIGZpbGVzLgorICAgICAgICAKKyAgICAgICAgKFdU
Ujo6VGVzdENvbnRyb2xsZXI6OnRlc3RPcHRpb25zRm9yVGVzdCBjb25zdCk6CisgICAgICAgIFJl
d29yayB0byBiZSBhIHNlcXVlbmNlIG9mIFRlc3RGZWF0dXJlcyBtZXJnZXMuCisgICAgICAgIAor
ICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6dXBkYXRlV2ViVmlld1NpemVGb3JUZXN0KToK
KyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnVwZGF0ZVdpbmRvd1NjYWxlRm9yVGVzdCk6
CisgICAgICAgIFVwZGF0ZSB0byBjYWxsIG5ldyBUZXN0T3B0aW9ucyBmdW5jdGlvbnMuCisgICAg
ICAgIAorICAgICAgICAoV1RSOjpjcmVhdGVUZXN0VVJMKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Ujo6cGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6
cGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1JlbGF0aXZlUGF0aCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVFI6OnBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNVUkwpOiBEZWxldGVkLgorICAg
ICAgICAoV1RSOjp1cGRhdGVUZXN0T3B0aW9uc0Zyb21UZXN0SGVhZGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRkVGVzdE9wdGlvbnMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICBNb3ZlZCBUZXN0T3B0aW9ucyBwYXJzaW5nIHRvIFRlc3RPcHRp
b25zLmNwcAorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6
CisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpjcmVhdGVUZXN0U2V0dGluZ3NEaWN0aW9u
YXJ5KToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3IFRlc3RPcHRpb25zIGZ1bmN0aW9ucy4K
KworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuaDoKKyAgICAgICAgUmV3
b3JrcyBUZXN0T3B0aW9ucyB0byBiZSBhbiBpbW11dGFibGUgb3duZXIgb2YgYSBUZXN0RmVhdHVy
ZXMgc3RydWN0LCB3aGljaCBpcyBhIHNldAorICAgICAgICBvZiBtYXBzIHRoYXQgbWFwIGZlYXR1
cmUgc3RyaW5nIGtleXMsIHRvIHZhbHVlcyBvZiB0eXBlIGJvb2wsIGRvdWJsZSwgc3RyaW5nIG9y
IHN0cmluZyB2ZWN0b3IuCisgICAgICAgIFJlLXVzZXMgZXhpc3RpbmcgdGVzdCBoZWFkZXIgcGFy
c2luZyBjb2RlIChtb3ZlZCBoZXJlIGZyb20gVGVzdENvbnRyb2xsZXIuY3BwKSB0byBhbHNvCisg
ICAgICAgIHBhcnNlIG5ldyBUZXN0T3B0aW9ucy50eHQgZmlsZXMuCisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5jcHA6CisgICAgICAgIChXVFI6OmR1bXBGZWF0dXJlcyk6
CisgICAgICAgIEhlbHBlciB0byBkdW1wIGZlYXR1cmVzIHRvIHN0ZGVyciwgdXNlZnVsIGZvciBk
ZWJ1Z2dpbmcuCisKKyAgICAgICAgKFdUUjo6a2V5VHlwZSk6CisgICAgICAgIEhlbHBlciBmb3Ig
cGFyc2VyIHRvIGtub3cgd2hpY2ggdmFsdWUgcGFyc2VyIHRvIHVzZS4KKworICAgICAgICAoV1RS
OjpwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUpOgorICAgICAgICAoV1RSOjpwYXJzZVN0cmlu
Z1Rlc3RIZWFkZXJWYWx1ZUFzUmVsYXRpdmVQYXRoKToKKyAgICAgICAgKFdUUjo6cGFyc2VTdHJp
bmdUZXN0SGVhZGVyVmFsdWVBc1VSTCk6CisgICAgICAgIFZhbHVlIHBhcnNlcnMgbW92ZWQgZnJv
bSBUZXN0Q29udHJvbGxlci5jcHAKKworICAgICAgICAoV1RSOjpwYXJzZVRlc3RIZWFkZXIpOgor
ICAgICAgICBIZWFkZXIgcGFyc2VyIG1vdmVkIGZyb20gVGVzdENvbnRyb2xsZXIuY3BwLiBVcGRh
dGUgdG8gbm93IHJldHVybgorICAgICAgICBhIFRlc3RGZWF0dXJlcyBvYmplY3QgYW5kIHVzZSBr
ZXlUeXBlIHRvIHBpY2sgdmFsdWUgcGFyc2VyIHJhdGhlcgorICAgICAgICB0aGFuIGlubGluaW5n
IHRoZSBpZiBzdGF0ZW1lbnRzLgorICAgICAgICAKKyAgICAgICAgKFdUUjo6aGFyZGNvZGVkRmVh
dHVyZXNCYXNlZE9uUGF0aEZvclRlc3QpOgorICAgICAgICAoV1RSOjpzaG91bGRNYWtlVmlld3Bv
cnRGbGV4aWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OnNob3VsZFVzZUZpeGVkTGF5b3V0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6aXNTVkdUZXN0UGF0aCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVFI6OnNob3VsZFVzZUVwaGVtZXJhbFNlc3Npb24pOiBEZWxldGVkLgorICAgICAgICBN
b3ZlZCBmcm9tIHRoZSBUZXN0T3B0aW9ucyBjb250cnVjdG9yIGFuZCByZW1vdmUgY2FzZXMgZm9y
IGZsZXhpYmxlTGF5b3V0LAorICAgICAgICBmaXhlZExheW91dCwgaXNTVkdUZXN0LCBhbmQgdXNl
RXBoZW1lcmFsU2Vzc2lvbiwgd2hpY2ggYXJlIGFsbCBlaXRoZXIgbm93CisgICAgICAgIGhhbmRs
ZWQgYnkgVGVzdE9wdGlvbnMudHh0IGZpbGVzIG9yIGFyZSBubyBsb25nZXIgbmVjZXNzYXJ5Lgor
CisgICAgICAgIChXVFI6Om1lcmdlKToKKyAgICAgICAgTWVyZ2VzIHR3byBUZXN0RmVhdHVyZXMg
b2JqZWN0cy4gSWYgYm90aCBjb250YWluIHRoZSBzYW1lIGtleSwgdGhlICdhZGRpdGlvbmFsJwor
ICAgICAgICBUZXN0RmVhdHVyZXMgb3ZlcnJpZGVzIHRoZSAnYmFzZScgVGVzdEZlYXR1cmVzLgor
CisgICAgICAgIChXVFI6OmZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0T3B0aW9uc0ZpbGVzRm9yVGVz
dCk6CisgICAgICAgIENyZWF0ZXMgYSBUZXN0RmVhdHVyZXMgb2JqZWN0IGJ5IGl0ZXJhdGluZyBh
bGwgdGhlIHN1YmRpcmVjdG9yaWVzIGZyb20gTGF5b3V0VGVzdHMKKyAgICAgICAgdG8gdGhlIGN1
cnJlbnQgdGVzdHMgZGlyZWN0b3J5LCBsb29raW5nIGZvciBUZXN0T3B0aW9ucy50eHQgZmlsZXMg
YW5kIG1lcmdpbmcKKyAgICAgICAgdGhlbSB0b2dldGhlci4KKworICAgICAgICAoV1RSOjpmZWF0
dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3QpOgorICAgICAgICBDcmVhdGVzIGEgVGVz
dEZlYXR1cmVzIGZvciB0aGUgdGVzdCBoZWFkZXJzIG9mIHRoZSBjdXJyZW50IHRlc3QuCisKKyAg
ICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW06Cisg
ICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZU92ZXJy
aWRlc0RlZmF1bHRzRm9yVGVzdCBjb25zdCk6CisgICAgICAgIFJld29ya2VkIHRvIG5vdyByZXR1
cm4gYSBUZXN0RmVhdHVyZXMgb2JqZWN0IHRoYXQgd2lsbCBiZSBtZXJnZWQsIHJhdGhlciB0aGFu
IHVwZGF0aW5nCisgICAgICAgIGEgVGVzdE9wdGlvbnMuIE1vdmVzIGVuYWJsZUluQXBwQnJvd3Nl
clByaXZhY3kgd29yayB0byBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1XaWxsUnVuVGVzdAorICAg
ICAgICB3aGVyZSBpdCBpcyBtb3JlIGFwcHJvcHJpYXRlLgorCisgICAgICAgIChXVFI6OlRlc3RD
b250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemVEYXRhU3RvcmUpOgorICAgICAgICAoV1RSOjpU
ZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1DcmVhdGVXZWJWaWV3KToKKyAgICAgICAgKFdUUjo6VGVz
dENvbnRyb2xsZXI6OmZpbmlzaENyZWF0aW5nUGxhdGZvcm1XZWJWaWV3KToKKyAgICAgICAgKFdU
Ujo6VGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcik6CisgICAg
ICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpjb2NvYVJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1
ZXMpOgorICAgICAgICAoV1RSOjpjb250ZW50TW9kZSk6CisgICAgICAgIFVwZGF0ZSB0byBjYWxs
IG5ldyBUZXN0T3B0aW9ucyBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6
OnBsYXRmb3JtUmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6CisgICAgICAgIChXVFI6OlRl
c3RDb250cm9sbGVyOjpwbGF0Zm9ybUNvbmZpZ3VyZVZpZXdGb3JUZXN0KToKKyAgICAgICAgVXBk
YXRlIHRvIGNhbGwgbmV3IFRlc3RPcHRpb25zIGZ1bmN0aW9ucy4KKyAgICAgICAgCisgICAgICAg
IChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1bHRzRm9y
VGVzdCBjb25zdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1cGRhdGVQbGF0Zm9y
bVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgTW92
ZWQgR2VuZXJhdGVkVG91Y2hlc0RlYnVnV2luZG93IHdvcmsgdG8gVGVzdENvbnRyb2xsZXI6OnBs
YXRmb3JtQ29uZmlndXJlVmlld0ZvclRlc3QKKyAgICAgICAgd2hlcmUgaXQgaXMgbW9yZSBhcHBy
b3ByaWF0ZSBhbmQgcmVtb3ZlZCBzaG91bGRTaG93VG91Y2hlcyBzZXR0aW5nIGFzIHRoYXQgaXMg
ZG9uZQorICAgICAgICBnbG9iYWxseSBub3cuIAorICAgICAgICAKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL21hYy9QbGF0Zm9ybVdlYlZpZXdNYWMubW06CisgICAgICAgIChXVFI6OlBsYXRm
b3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3
IFRlc3RPcHRpb25zIGZ1bmN0aW9ucy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvbWFj
L1Rlc3RDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QgY29uc3QpOgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9yVGVz
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIFJlbW92ZSBzaG91bGRVc2VSZW1vdGVMYXllclRy
ZWUgYW5kIHNob3VsZFNob3dXZWJWaWV3LCBhcyB0aG9zZSBhcmUgbm93IGRvbmUgZ2xvYmFsbHks
CisgICAgICAgIGFuZCByZS1pbXBsZW1lbnRlZCB1c2VUaHJlYWRlZFNjcm9sbGluZyB0byB1c2Ug
Ym9vbEZlYXR1cmVzLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci93aW4vVGVzdENvbnRy
b2xsZXJXaW4uY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1TcGVj
aWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QgY29uc3QpOgorICAgICAgICAoV1RSOjpUZXN0Q29u
dHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9yVGVzdCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIFVwZGF0ZWQgZm9yIG5ldyBzaWduYXR1cmUuCisKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL3dwZS9UZXN0Q29udHJvbGxlcldQRS5jcHA6CisgICAgICAgIChX
VFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1bHRzRm9yVGVz
dCBjb25zdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1cGRhdGVQbGF0Zm9ybVNw
ZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgVXBkYXRl
ZCBmb3IgbmV3IHNpZ25hdHVyZS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvZ3RrL1Rl
c3RDb250cm9sbGVyR1RLLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnBsYXRm
b3JtU3BlY2lmaWNGZWF0dXJlRGVmYXVsdHNGb3JUZXN0IGNvbnN0KToKKyAgICAgICAgKFdUUjo6
VGVzdENvbnRyb2xsZXI6OnVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNUZXN0T3B0aW9uc0ZvclRlc3Qg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICBVcGRhdGVkIGZvciBuZXcgc2lnbmF0dXJlLgorCiAy
MDIwLTEwLTAzICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgQWRkIGV4dHJhIHNsYXNoIGFmdGVyIGVtcHR5IGhvc3QgY29waWVkIGZyb20gYmFz
ZSBVUkwgaWYgcGF0aCBpcyBhbHNvIGVtcHR5CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVy
L09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvT3B0aW9u
cy5jcHAJKHJldmlzaW9uIDI2Nzk0OCkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvT3B0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCBzdGF0aWMgYm9vbCBoYW5k
bGVPcHRpb25BbGxvd2VkSG9zdChPcHRpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBi
b29sIHBhcnNlRmVhdHVyZShTdHJpbmcgZmVhdHVyZVN0cmluZywgSGFzaE1hcDxTdHJpbmcsIGJv
b2w+JiBmZWF0dXJlcykKK3N0YXRpYyBib29sIHBhcnNlRmVhdHVyZShTdHJpbmcgZmVhdHVyZVN0
cmluZywgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29sPiYgZmVhdHVyZXMpCiB7
CiAgICAgYXV0byBzdHJpbmdzID0gZmVhdHVyZVN0cmluZy5zcGxpdCgnPScpOwogICAgIGlmIChz
dHJpbmdzLmlzRW1wdHkoKSB8fCBzdHJpbmdzLnNpemUoKSA+IDIpCkBAIC0xMjIsNyArMTIyLDcg
QEAgc3RhdGljIGJvb2wgcGFyc2VGZWF0dXJlKFN0cmluZyBmZWF0dXJlUwogICAgIGF1dG8gZmVh
dHVyZU5hbWUgPSBzdHJpbmdzWzBdOwogICAgIGJvb2wgZW5hYmxlZCA9IHN0cmluZ3Muc2l6ZSgp
ID09IDEgfHwgc3RyaW5nc1sxXSA9PSAidHJ1ZSI7CiAKLSAgICBmZWF0dXJlcy5zZXQoZmVhdHVy
ZU5hbWUsIGVuYWJsZWQpOworICAgIGZlYXR1cmVzLmluc2VydCh7IGZlYXR1cmVOYW1lLnV0Zjgo
KS5kYXRhKCksIGVuYWJsZWQgfSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvT3B0aW9ucy5oCShyZXZpc2lvbiAyNjc5NDgpCisrKyBUb29scy9XZWJLaXRUZXN0
UnVubmVyL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEsOCBAQAogI2luY2x1
ZGUgPHNldD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRl
IDx1bm9yZGVyZWRfbWFwPgogI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdI
YXNoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC01Nyw4ICs1Nyw4IEBA
IHN0cnVjdCBPcHRpb25zIHsKICNlbmRpZgogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBw
YXRoczsKICAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gYWxsb3dlZEhvc3RzOwotICAgIEhhc2hN
YXA8U3RyaW5nLCBib29sPiBpbnRlcm5hbEZlYXR1cmVzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBi
b29sPiBleHBlcmltZW50YWxGZWF0dXJlczsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpz
dHJpbmcsIGJvb2w+IGludGVybmFsRmVhdHVyZXM7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0
ZDo6c3RyaW5nLCBib29sPiBleHBlcmltZW50YWxGZWF0dXJlczsKIH07CiAKIGNsYXNzIE9wdGlv
biB7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgJKHJldmlz
aW9uIDI2Nzk0OCkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1v
dmVGcm9tV2luZG93KCk7CiAgICAgdm9pZCBhZGRUb1dpbmRvdygpOwogCi0gICAgYm9vbCB2aWV3
U3VwcG9ydHNPcHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKSBjb25zdCB7IHJldHVy
biAhb3B0aW9ucy5ydW5TaW5nbHkgJiYgbV9vcHRpb25zLmhhc1NhbWVJbml0aWFsaXphdGlvbk9w
dGlvbnMob3B0aW9ucyk7IH0KKyAgICBib29sIHZpZXdTdXBwb3J0c09wdGlvbnMoY29uc3QgVGVz
dE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0IHsgcmV0dXJuICFvcHRpb25zLnJ1blNpbmdseSgpICYm
IG1fb3B0aW9ucy5oYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25zKG9wdGlvbnMpOyB9CiAKICAg
ICBQbGF0Zm9ybUltYWdlIHdpbmRvd1NuYXBzaG90SW1hZ2UoKTsKICAgICBjb25zdCBUZXN0T3B0
aW9ucyYgb3B0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW9uczsgfQpJbmRleDogVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9TdGRGaWxlc3lzdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL1N0ZEZpbGVzeXN0ZW0uY3BwCShub25leGlzdGVudCkKKysrIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvU3RkRmlsZXN5c3RlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyNjA0IEBACisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3RkRmlsZXN5c3Rl
bS5jcHAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworLy8KKy8vICAgICAgICAgICAg
ICAgICAgICAgVGhlIExMVk0gQ29tcGlsZXIgSW5mcmFzdHJ1Y3R1cmUKKy8vCisvLyBUaGlzIGZp
bGUgaXMgZHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGFuZCB0aGUgVW5pdmVyc2l0eSBvZiBJ
bGxpbm9pcyBPcGVuCisvLyBTb3VyY2UgTGljZW5zZXMuIFNlZSBMSUNFTlNFLlRYVCBmb3IgZGV0
YWlscy4KKy8vCisvLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLworCisvKiBJbXBvcnRzIGEgY29weSBv
ZiBmaWxlc3lzdGVtL2ZpbGVzeXN0ZW1fY29tbW9uLmgsIGZpbGVzeXN0ZW0vZGlyZWN0b3J5X2l0
ZXJhdG9yLmNwcCwKKyAgIGZpbGVzeXN0ZW0vaW50MTI4X2J1aWx0aW5zLmNwcCBhbmQgZmlsZXN5
c3RlbS9vcGVyYXRpb25zLmNwcCBmcm9tIHIzNDM4Mzggb2YgdGhlCisgICBsaWJjKysgcHJvamVj
dCBhbmQgaGFzIG1vZGlmaWVkIHRoZW0gdG8gd29yayBvdXRzaWRlIG9mIGEgYnVpbGQgb2YgbGli
YysrIGl0c2VsZi4gKi8KKworI2ltcG9ydCA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBQTEFURk9S
TShNQUMpCisKKyNpbmNsdWRlIDxBdmFpbGFiaWxpdHkuaD4KKworI2lmIF9fTUFDX09TX1hfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPCAxMDE1MDAKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlN0ZEZpbGVzeXN0ZW0uaCIKKworCisjaW5jbHVkZSA8X19jb25maWc+CisKKy8qIC0tIEJF
R0lOIGZpbGVzeXN0ZW0vZmlsZXN5c3RlbV9jb21tb24uaCAtLSAqLworCisjaW5jbHVkZSA8YXJy
YXk+CisjaW5jbHVkZSA8Y2hyb25vPgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8Y2xp
bWl0cz4KKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5j
bHVkZSA8c3lzL3N0YXR2ZnMuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPiAvLyBmb3IgOjp1dGlt
ZXMgYXMgdXNlZCBpbiBfX2xhc3Rfd3JpdGVfdGltZQorI2luY2x1ZGUgPGZjbnRsLmg+ICAgIC8q
IHZhbHVlcyBmb3IgZmNobW9kYXQgKi8KKworLyogI2luY2x1ZGUgIi4uL2luY2x1ZGUvYXBwbGVf
YXZhaWxhYmlsaXR5LmgiICovCisKKyNpZiAhZGVmaW5lZChfX0FQUExFX18pCisvLyBXZSBjYW4g
dXNlIHRoZSBwcmVzZW5jZSBvZiBVVElNRV9PTUlUIHRvIGRldGVjdCBwbGF0Zm9ybXMgdGhhdCBw
cm92aWRlCisvLyB1dGltZW5zYXQuCisjaWYgZGVmaW5lZChVVElNRV9PTUlUKQorI2RlZmluZSBf
TElCQ1BQX1VTRV9VVElNRU5TQVQKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fR05V
Q19fKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIEdDQyBkaWFnbm9zdGlj
IGlnbm9yZWQgIi1XdW51c2VkLWZ1bmN0aW9uIgorI2VuZGlmCisKK19MSUJDUFBfQkVHSU5fTkFN
RVNQQUNFX0ZJTEVTWVNURU0KKworbmFtZXNwYWNlIGRldGFpbCB7CituYW1lc3BhY2UgeworCitz
dGF0aWMgc3RyaW5nIGZvcm1hdF9zdHJpbmdfaW1wKGNvbnN0IGNoYXIqIG1zZywgLi4uKSB7Cisg
IC8vIHdlIG1pZ2h0IG5lZWQgYSBzZWNvbmQgc2hvdCBhdCB0aGlzLCBzbyBwcmUtZW1wdGl2bHkg
bWFrZSBhIGNvcHkKKyAgc3RydWN0IEd1YXJkVkFMaXN0IHsKKyAgICB2YV9saXN0JiB0YXJnZXQ7
CisgICAgYm9vbCBhY3RpdmUgPSB0cnVlOworICAgIEd1YXJkVkFMaXN0KHZhX2xpc3QmIHRhcmdl
dCkgOiB0YXJnZXQodGFyZ2V0KSwgYWN0aXZlKHRydWUpIHt9CisgICAgdm9pZCBjbGVhcigpIHsK
KyAgICAgIGlmIChhY3RpdmUpCisgICAgICAgIHZhX2VuZCh0YXJnZXQpOworICAgICAgYWN0aXZl
ID0gZmFsc2U7CisgICAgfQorICAgIH5HdWFyZFZBTGlzdCgpIHsKKyAgICAgIGlmIChhY3RpdmUp
CisgICAgICAgIHZhX2VuZCh0YXJnZXQpOworICAgIH0KKyAgfTsKKyAgdmFfbGlzdCBhcmdzOwor
ICB2YV9zdGFydChhcmdzLCBtc2cpOworICBHdWFyZFZBTGlzdCBhcmdzX2d1YXJkKGFyZ3MpOwor
CisgIHZhX2xpc3QgYXJnc19jcDsKKyAgdmFfY29weShhcmdzX2NwLCBhcmdzKTsKKyAgR3VhcmRW
QUxpc3QgYXJnc19jb3B5X2d1YXJkKGFyZ3NfY3ApOworCisgIGFycmF5PGNoYXIsIDI1Nj4gbG9j
YWxfYnVmZjsKKyAgc2l6ZV90IHNpemUgPSBsb2NhbF9idWZmLnNpemUoKTsKKworI2lmZGVmIF9f
Y2xhbmdfXworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlh
Z25vc3RpYyBpZ25vcmVkICItV2Zvcm1hdC1ub25saXRlcmFsIgorI2VuZGlmCisgIGF1dG8gcmV0
ID0gOjp2c25wcmludGYobG9jYWxfYnVmZi5kYXRhKCksIHNpemUsIG1zZywgYXJnc19jcCk7Cisj
aWZkZWYgX19jbGFuZ19fCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisjZW5kaWYKKwor
ICBhcmdzX2NvcHlfZ3VhcmQuY2xlYXIoKTsKKworICAvLyBoYW5kbGUgZW1wdHkgZXhwYW5zaW9u
CisgIGlmIChyZXQgPT0gMCkKKyAgICByZXR1cm4gc3RyaW5ne307CisgIGlmIChzdGF0aWNfY2Fz
dDxzaXplX3Q+KHJldCkgPCBzaXplKQorICAgIHJldHVybiBzdHJpbmcobG9jYWxfYnVmZi5kYXRh
KCkpOworCisgIC8vIHdlIGRpZCBub3QgcHJvdmlkZSBhIGxvbmcgZW5vdWdoIGJ1ZmZlciBvbiBv
dXIgZmlyc3QgYXR0ZW1wdC4KKyAgLy8gYWRkIDEgdG8gc2l6ZSB0byBhY2NvdW50IGZvciBudWxs
LWJ5dGUgaW4gc2l6ZSBjYXN0IHRvIHByZXZlbnQgb3ZlcmZsb3cKKyAgc2l6ZSA9IHN0YXRpY19j
YXN0PHNpemVfdD4ocmV0KSArIDE7CisgIGF1dG8gYnVmZl9wdHIgPSB1bmlxdWVfcHRyPGNoYXJb
XT4obmV3IGNoYXJbc2l6ZV0pOworCisjaWZkZWYgX19jbGFuZ19fCisjcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZm9ybWF0
LW5vbmxpdGVyYWwiCisjZW5kaWYKKyAgcmV0ID0gOjp2c25wcmludGYoYnVmZl9wdHIuZ2V0KCks
IHNpemUsIG1zZywgYXJncyk7CisjaWZkZWYgX19jbGFuZ19fCisjcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgcG9wCisjZW5kaWYKKworICByZXR1cm4gc3RyaW5nKGJ1ZmZfcHRyLmdldCgpKTsKK30K
KworY29uc3QgY2hhciogdW53cmFwKHN0cmluZyBjb25zdCYgcykgeyByZXR1cm4gcy5jX3N0cigp
OyB9Citjb25zdCBjaGFyKiB1bndyYXAocGF0aCBjb25zdCYgcCkgeyByZXR1cm4gcC5uYXRpdmUo
KS5jX3N0cigpOyB9Cit0ZW1wbGF0ZSA8Y2xhc3MgQXJnPgorQXJnIGNvbnN0JiB1bndyYXAoQXJn
IGNvbnN0JiBhKSB7CisgIHN0YXRpY19hc3NlcnQoIWlzX2NsYXNzPEFyZz46OnZhbHVlLCAiY2Fu
bm90IHBhc3MgY2xhc3MgaGVyZSIpOworICByZXR1cm4gYTsKK30KKwordGVtcGxhdGUgPGNsYXNz
Li4uIEFyZ3M+CitzdHJpbmcgZm9ybWF0X3N0cmluZyhjb25zdCBjaGFyKiBmbXQsIEFyZ3MgY29u
c3QmLi4uIGFyZ3MpIHsKKyAgcmV0dXJuIGZvcm1hdF9zdHJpbmdfaW1wKGZtdCwgdW53cmFwKGFy
Z3MpLi4uKTsKK30KKworZXJyb3JfY29kZSBjYXB0dXJlX2Vycm5vKCkgeworICBfTElCQ1BQX0FT
U0VSVChlcnJubywgIkV4cGVjdGVkIGVycm5vIHRvIGJlIG5vbi16ZXJvIik7CisgIHJldHVybiBl
cnJvcl9jb2RlKGVycm5vLCBnZW5lcmljX2NhdGVnb3J5KCkpOworfQorCit0ZW1wbGF0ZSA8Y2xh
c3MgVD4KK1QgZXJyb3JfdmFsdWUoKTsKK3RlbXBsYXRlIDw+CitfTElCQ1BQX0NPTlNURVhQUl9B
RlRFUl9DWFgxMSB2b2lkIGVycm9yX3ZhbHVlPHZvaWQ+KCkge30KK3RlbXBsYXRlIDw+Citib29s
IGVycm9yX3ZhbHVlPGJvb2w+KCkgeworICByZXR1cm4gZmFsc2U7Cit9Cit0ZW1wbGF0ZSA8Pgor
dWludG1heF90IGVycm9yX3ZhbHVlPHVpbnRtYXhfdD4oKSB7CisgIHJldHVybiB1aW50bWF4X3Qo
LTEpOworfQordGVtcGxhdGUgPD4KK19MSUJDUFBfQ09OU1RFWFBSX0FGVEVSX0NYWDExIGZpbGVf
dGltZV90eXBlIGVycm9yX3ZhbHVlPGZpbGVfdGltZV90eXBlPigpIHsKKyAgcmV0dXJuIGZpbGVf
dGltZV90eXBlOjptaW4oKTsKK30KK3RlbXBsYXRlIDw+CitwYXRoIGVycm9yX3ZhbHVlPHBhdGg+
KCkgeworICByZXR1cm4ge307Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUPgorc3RydWN0IEVycm9y
SGFuZGxlciB7CisgIGNvbnN0IGNoYXIqIGZ1bmNfbmFtZTsKKyAgZXJyb3JfY29kZSogZWMgPSBu
dWxscHRyOworICBjb25zdCBwYXRoKiBwMSA9IG51bGxwdHI7CisgIGNvbnN0IHBhdGgqIHAyID0g
bnVsbHB0cjsKKworICBFcnJvckhhbmRsZXIoY29uc3QgY2hhciogZm5hbWUsIGVycm9yX2NvZGUq
IGVjLCBjb25zdCBwYXRoKiBwMSA9IG51bGxwdHIsCisgICAgICAgICAgICAgICBjb25zdCBwYXRo
KiBwMiA9IG51bGxwdHIpCisgICAgICA6IGZ1bmNfbmFtZShmbmFtZSksIGVjKGVjKSwgcDEocDEp
LCBwMihwMikgeworICAgIGlmIChlYykKKyAgICAgIGVjLT5jbGVhcigpOworICB9CisKKyAgVCBy
ZXBvcnQoY29uc3QgZXJyb3JfY29kZSYgbV9lYykgY29uc3QgeworICAgIGlmIChlYykgeworICAg
ICAgKmVjID0gbV9lYzsKKyAgICAgIHJldHVybiBlcnJvcl92YWx1ZTxUPigpOworICAgIH0KKyAg
ICBzdHJpbmcgd2hhdCA9IHN0cmluZygiaW4gIikgKyBmdW5jX25hbWU7CisgICAgc3dpdGNoIChi
b29sKHAxKSArIGJvb2wocDIpKSB7CisgICAgY2FzZSAwOgorICAgICAgX190aHJvd19maWxlc3lz
dGVtX2Vycm9yKHdoYXQsIG1fZWMpOworICAgIGNhc2UgMToKKyAgICAgIF9fdGhyb3dfZmlsZXN5
c3RlbV9lcnJvcih3aGF0LCAqcDEsIG1fZWMpOworICAgIGNhc2UgMjoKKyAgICAgIF9fdGhyb3df
ZmlsZXN5c3RlbV9lcnJvcih3aGF0LCAqcDEsICpwMiwgbV9lYyk7CisgICAgfQorICAgIF9MSUJD
UFBfVU5SRUFDSEFCTEUoKTsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcy4uLiBBcmdzPgorICBU
IHJlcG9ydChjb25zdCBlcnJvcl9jb2RlJiBtX2VjLCBjb25zdCBjaGFyKiBtc2csIEFyZ3MgY29u
c3QmLi4uIGFyZ3MpIGNvbnN0IHsKKyAgICBpZiAoZWMpIHsKKyAgICAgICplYyA9IG1fZWM7Cisg
ICAgICByZXR1cm4gZXJyb3JfdmFsdWU8VD4oKTsKKyAgICB9CisgICAgc3RyaW5nIHdoYXQgPQor
ICAgICAgICBzdHJpbmcoImluICIpICsgZnVuY19uYW1lICsgIjogIiArIGZvcm1hdF9zdHJpbmco
bXNnLCBhcmdzLi4uKTsKKyAgICBzd2l0Y2ggKGJvb2wocDEpICsgYm9vbChwMikpIHsKKyAgICBj
YXNlIDA6CisgICAgICBfX3Rocm93X2ZpbGVzeXN0ZW1fZXJyb3Iod2hhdCwgbV9lYyk7CisgICAg
Y2FzZSAxOgorICAgICAgX190aHJvd19maWxlc3lzdGVtX2Vycm9yKHdoYXQsICpwMSwgbV9lYyk7
CisgICAgY2FzZSAyOgorICAgICAgX190aHJvd19maWxlc3lzdGVtX2Vycm9yKHdoYXQsICpwMSwg
KnAyLCBtX2VjKTsKKyAgICB9CisgICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOworICB9CisKKyAg
VCByZXBvcnQoZXJyYyBjb25zdCYgZXJyKSBjb25zdCB7IHJldHVybiByZXBvcnQobWFrZV9lcnJv
cl9jb2RlKGVycikpOyB9CisKKyAgdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+CisgIFQgcmVwb3J0
KGVycmMgY29uc3QmIGVyciwgY29uc3QgY2hhciogbXNnLCBBcmdzIGNvbnN0Ji4uLiBhcmdzKSBj
b25zdCB7CisgICAgcmV0dXJuIHJlcG9ydChtYWtlX2Vycm9yX2NvZGUoZXJyKSwgbXNnLCBhcmdz
Li4uKTsKKyAgfQorCitwcml2YXRlOgorICBFcnJvckhhbmRsZXIoRXJyb3JIYW5kbGVyIGNvbnN0
JikgPSBkZWxldGU7CisgIEVycm9ySGFuZGxlciYgb3BlcmF0b3I9KEVycm9ySGFuZGxlciBjb25z
dCYpID0gZGVsZXRlOworfTsKKwordXNpbmcgY2hyb25vOjpkdXJhdGlvbjsKK3VzaW5nIGNocm9u
bzo6ZHVyYXRpb25fY2FzdDsKKwordXNpbmcgVGltZVNwZWMgPSBzdHJ1Y3QgOjp0aW1lc3BlYzsK
K3VzaW5nIFN0YXRUID0gc3RydWN0IDo6c3RhdDsKKwordGVtcGxhdGUgPGNsYXNzIEZpbGVUaW1l
VCwgY2xhc3MgVGltZVQsCisgICAgICAgICAgYm9vbCBJc0Zsb2F0ID0gaXNfZmxvYXRpbmdfcG9p
bnQ8dHlwZW5hbWUgRmlsZVRpbWVUOjpyZXA+Ojp2YWx1ZT4KK3N0cnVjdCB0aW1lX3V0aWxfYmFz
ZSB7CisgIHVzaW5nIHJlcCA9IHR5cGVuYW1lIEZpbGVUaW1lVDo6cmVwOworICB1c2luZyBmc19k
dXJhdGlvbiA9IHR5cGVuYW1lIEZpbGVUaW1lVDo6ZHVyYXRpb247CisgIHVzaW5nIGZzX3NlY29u
ZHMgPSBkdXJhdGlvbjxyZXA+OworICB1c2luZyBmc19uYW5vc2Vjb25kcyA9IGR1cmF0aW9uPHJl
cCwgbmFubz47CisgIHVzaW5nIGZzX21pY3Jvc2Vjb25kcyA9IGR1cmF0aW9uPHJlcCwgbWljcm8+
OworCisgIHN0YXRpYyBjb25zdGV4cHIgcmVwIG1heF9zZWNvbmRzID0KKyAgICAgIGR1cmF0aW9u
X2Nhc3Q8ZnNfc2Vjb25kcz4oRmlsZVRpbWVUOjpkdXJhdGlvbjo6bWF4KCkpLmNvdW50KCk7CisK
KyAgc3RhdGljIGNvbnN0ZXhwciByZXAgbWF4X25zZWMgPQorICAgICAgZHVyYXRpb25fY2FzdDxm
c19uYW5vc2Vjb25kcz4oRmlsZVRpbWVUOjpkdXJhdGlvbjo6bWF4KCkgLQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZnNfc2Vjb25kcyhtYXhfc2Vjb25kcykpCisgICAgICAg
ICAgLmNvdW50KCk7CisKKyAgc3RhdGljIGNvbnN0ZXhwciByZXAgbWluX3NlY29uZHMgPQorICAg
ICAgZHVyYXRpb25fY2FzdDxmc19zZWNvbmRzPihGaWxlVGltZVQ6OmR1cmF0aW9uOjptaW4oKSku
Y291bnQoKTsKKworICBzdGF0aWMgY29uc3RleHByIHJlcCBtaW5fbnNlY190aW1lc3BlYyA9Cisg
ICAgICBkdXJhdGlvbl9jYXN0PGZzX25hbm9zZWNvbmRzPigKKyAgICAgICAgICAoRmlsZVRpbWVU
OjpkdXJhdGlvbjo6bWluKCkgLSBmc19zZWNvbmRzKG1pbl9zZWNvbmRzKSkgKworICAgICAgICAg
IGZzX3NlY29uZHMoMSkpCisgICAgICAgICAgLmNvdW50KCk7CisKK3ByaXZhdGU6CisjaWYgX0xJ
QkNQUF9TVERfVkVSID4gMTEgJiYgIWRlZmluZWQoX0xJQkNQUF9IQVNfTk9fQ1hYMTRfQ09OU1RF
WFBSKQorICBzdGF0aWMgY29uc3RleHByIGZzX2R1cmF0aW9uIGdldF9taW5fbnNlY3MoKSB7Cisg
ICAgcmV0dXJuIGR1cmF0aW9uX2Nhc3Q8ZnNfZHVyYXRpb24+KAorICAgICAgICBmc19uYW5vc2Vj
b25kcyhtaW5fbnNlY190aW1lc3BlYykgLQorICAgICAgICBkdXJhdGlvbl9jYXN0PGZzX25hbm9z
ZWNvbmRzPihmc19zZWNvbmRzKDEpKSk7CisgIH0KKyAgLy8gU3RhdGljIGFzc2VydCB0aGF0IHRo
ZXNlIHZhbHVlcyBwcm9wZXJseSByb3VuZCB0cmlwLgorICBzdGF0aWNfYXNzZXJ0KGZzX3NlY29u
ZHMobWluX3NlY29uZHMpICsgZ2V0X21pbl9uc2VjcygpID09CisgICAgICAgICAgICAgICAgICAg
IEZpbGVUaW1lVDo6ZHVyYXRpb246Om1pbigpLAorICAgICAgICAgICAgICAgICJ2YWx1ZSBkb2Vz
bid0IHJvdW5kdHJpcCIpOworCisgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBjaGVja19yYW5nZSgp
IHsKKyAgICAvLyBUaGlzIGtpbmRhIHN1Y2tzLCBidXQgaXQncyB3aGF0IGhhcHBlbnMgd2hlbiB3
ZSBkb24ndCBoYXZlIF9faW50MTI4X3QuCisgICAgaWYgKHNpemVvZihUaW1lVCkgPT0gc2l6ZW9m
KHJlcCkpIHsKKyAgICAgIHR5cGVkZWYgZHVyYXRpb248bG9uZyBsb25nLCByYXRpbzwzNjAwICog
MjQgKiAzNjU+ID4gWWVhcnM7CisgICAgICByZXR1cm4gZHVyYXRpb25fY2FzdDxZZWFycz4oZnNf
c2Vjb25kcyhtYXhfc2Vjb25kcykpID4gWWVhcnMoMjUwKSAmJgorICAgICAgICAgICAgIGR1cmF0
aW9uX2Nhc3Q8WWVhcnM+KGZzX3NlY29uZHMobWluX3NlY29uZHMpKSA8IFllYXJzKC0yNTApOwor
ICAgIH0KKyAgICByZXR1cm4gbWF4X3NlY29uZHMgPj0gbnVtZXJpY19saW1pdHM8VGltZVQ+Ojpt
YXgoKSAmJgorICAgICAgICAgICBtaW5fc2Vjb25kcyA8PSBudW1lcmljX2xpbWl0czxUaW1lVD46
Om1pbigpOworICB9CisgIHN0YXRpY19hc3NlcnQoY2hlY2tfcmFuZ2UoKSwgInRoZSByZXByZXNl
bnRhYmxlIHJhbmdlIGlzIHVuYWNjZXB0YWJsZSBzbWFsbCIpOworI2VuZGlmCit9OworCit0ZW1w
bGF0ZSA8Y2xhc3MgRmlsZVRpbWVULCBjbGFzcyBUaW1lVD4KK3N0cnVjdCB0aW1lX3V0aWxfYmFz
ZTxGaWxlVGltZVQsIFRpbWVULCB0cnVlPiB7CisgIHVzaW5nIHJlcCA9IHR5cGVuYW1lIEZpbGVU
aW1lVDo6cmVwOworICB1c2luZyBmc19kdXJhdGlvbiA9IHR5cGVuYW1lIEZpbGVUaW1lVDo6ZHVy
YXRpb247CisgIHVzaW5nIGZzX3NlY29uZHMgPSBkdXJhdGlvbjxyZXA+OworICB1c2luZyBmc19u
YW5vc2Vjb25kcyA9IGR1cmF0aW9uPHJlcCwgbmFubz47CisgIHVzaW5nIGZzX21pY3Jvc2Vjb25k
cyA9IGR1cmF0aW9uPHJlcCwgbWljcm8+OworCisgIHN0YXRpYyBjb25zdCByZXAgbWF4X3NlY29u
ZHM7CisgIHN0YXRpYyBjb25zdCByZXAgbWF4X25zZWM7CisgIHN0YXRpYyBjb25zdCByZXAgbWlu
X3NlY29uZHM7CisgIHN0YXRpYyBjb25zdCByZXAgbWluX25zZWNfdGltZXNwZWM7Cit9OworCit0
ZW1wbGF0ZSA8Y2xhc3MgRmlsZVRpbWVULCBjbGFzcyBUaW1lVD4KK2NvbnN0IHR5cGVuYW1lIEZp
bGVUaW1lVDo6cmVwCisgICAgdGltZV91dGlsX2Jhc2U8RmlsZVRpbWVULCBUaW1lVCwgdHJ1ZT46
Om1heF9zZWNvbmRzID0KKyAgICAgICAgZHVyYXRpb25fY2FzdDxmc19zZWNvbmRzPihGaWxlVGlt
ZVQ6OmR1cmF0aW9uOjptYXgoKSkuY291bnQoKTsKKwordGVtcGxhdGUgPGNsYXNzIEZpbGVUaW1l
VCwgY2xhc3MgVGltZVQ+Citjb25zdCB0eXBlbmFtZSBGaWxlVGltZVQ6OnJlcCB0aW1lX3V0aWxf
YmFzZTxGaWxlVGltZVQsIFRpbWVULCB0cnVlPjo6bWF4X25zZWMgPQorICAgIGR1cmF0aW9uX2Nh
c3Q8ZnNfbmFub3NlY29uZHM+KEZpbGVUaW1lVDo6ZHVyYXRpb246Om1heCgpIC0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmc19zZWNvbmRzKG1heF9zZWNvbmRzKSkKKyAgICAg
ICAgLmNvdW50KCk7CisKK3RlbXBsYXRlIDxjbGFzcyBGaWxlVGltZVQsIGNsYXNzIFRpbWVUPgor
Y29uc3QgdHlwZW5hbWUgRmlsZVRpbWVUOjpyZXAKKyAgICB0aW1lX3V0aWxfYmFzZTxGaWxlVGlt
ZVQsIFRpbWVULCB0cnVlPjo6bWluX3NlY29uZHMgPQorICAgICAgICBkdXJhdGlvbl9jYXN0PGZz
X3NlY29uZHM+KEZpbGVUaW1lVDo6ZHVyYXRpb246Om1pbigpKS5jb3VudCgpOworCit0ZW1wbGF0
ZSA8Y2xhc3MgRmlsZVRpbWVULCBjbGFzcyBUaW1lVD4KK2NvbnN0IHR5cGVuYW1lIEZpbGVUaW1l
VDo6cmVwCisgICAgdGltZV91dGlsX2Jhc2U8RmlsZVRpbWVULCBUaW1lVCwgdHJ1ZT46Om1pbl9u
c2VjX3RpbWVzcGVjID0KKyAgICAgICAgZHVyYXRpb25fY2FzdDxmc19uYW5vc2Vjb25kcz4oKEZp
bGVUaW1lVDo6ZHVyYXRpb246Om1pbigpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZzX3NlY29uZHMobWluX3NlY29uZHMpKSArCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZzX3NlY29uZHMoMSkpCisgICAgICAgICAgICAuY291bnQoKTsK
KwordGVtcGxhdGUgPGNsYXNzIEZpbGVUaW1lVCwgY2xhc3MgVGltZVQsIGNsYXNzIFRpbWVTcGVj
VD4KK3N0cnVjdCB0aW1lX3V0aWwgOiB0aW1lX3V0aWxfYmFzZTxGaWxlVGltZVQsIFRpbWVUPiB7
CisgIHVzaW5nIEJhc2UgPSB0aW1lX3V0aWxfYmFzZTxGaWxlVGltZVQsIFRpbWVUPjsKKyAgdXNp
bmcgQmFzZTo6bWF4X25zZWM7CisgIHVzaW5nIEJhc2U6Om1heF9zZWNvbmRzOworICB1c2luZyBC
YXNlOjptaW5fbnNlY190aW1lc3BlYzsKKyAgdXNpbmcgQmFzZTo6bWluX3NlY29uZHM7CisKKyAg
dXNpbmcgdHlwZW5hbWUgQmFzZTo6ZnNfZHVyYXRpb247CisgIHVzaW5nIHR5cGVuYW1lIEJhc2U6
OmZzX21pY3Jvc2Vjb25kczsKKyAgdXNpbmcgdHlwZW5hbWUgQmFzZTo6ZnNfbmFub3NlY29uZHM7
CisgIHVzaW5nIHR5cGVuYW1lIEJhc2U6OmZzX3NlY29uZHM7CisKK3B1YmxpYzoKKyAgdGVtcGxh
dGUgPGNsYXNzIENUeXBlLCBjbGFzcyBDaHJvbm9UeXBlPgorICBzdGF0aWMgX0xJQkNQUF9DT05T
VEVYUFJfQUZURVJfQ1hYMTEgYm9vbCBjaGVja2VkX3NldChDVHlwZSogb3V0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaHJvbm9UeXBl
IHRpbWUpIHsKKyAgICB1c2luZyBMaW0gPSBudW1lcmljX2xpbWl0czxDVHlwZT47CisgICAgaWYg
KHRpbWUgPiBMaW06Om1heCgpIHx8IHRpbWUgPCBMaW06Om1pbigpKQorICAgICAgcmV0dXJuIGZh
bHNlOworICAgICpvdXQgPSBzdGF0aWNfY2FzdDxDVHlwZT4odGltZSk7CisgICAgcmV0dXJuIHRy
dWU7CisgIH0KKworICBzdGF0aWMgX0xJQkNQUF9DT05TVEVYUFJfQUZURVJfQ1hYMTEgYm9vbCBp
c19yZXByZXNlbnRhYmxlKFRpbWVTcGVjVCB0bSkgeworICAgIGlmICh0bS50dl9zZWMgPj0gMCkg
eworICAgICAgcmV0dXJuIHRtLnR2X3NlYyA8IG1heF9zZWNvbmRzIHx8CisgICAgICAgICAgICAg
KHRtLnR2X3NlYyA9PSBtYXhfc2Vjb25kcyAmJiB0bS50dl9uc2VjIDw9IG1heF9uc2VjKTsKKyAg
ICB9IGVsc2UgaWYgKHRtLnR2X3NlYyA9PSAobWluX3NlY29uZHMgLSAxKSkgeworICAgICAgcmV0
dXJuIHRtLnR2X25zZWMgPj0gbWluX25zZWNfdGltZXNwZWM7CisgICAgfSBlbHNlIHsKKyAgICAg
IHJldHVybiB0bS50dl9zZWMgPj0gbWluX3NlY29uZHM7CisgICAgfQorICB9CisKKyAgc3RhdGlj
IF9MSUJDUFBfQ09OU1RFWFBSX0FGVEVSX0NYWDExIGJvb2wgaXNfcmVwcmVzZW50YWJsZShGaWxl
VGltZVQgdG0pIHsKKyAgICBhdXRvIHNlY3MgPSBkdXJhdGlvbl9jYXN0PGZzX3NlY29uZHM+KHRt
LnRpbWVfc2luY2VfZXBvY2goKSk7CisgICAgYXV0byBuc2VjcyA9IGR1cmF0aW9uX2Nhc3Q8ZnNf
bmFub3NlY29uZHM+KHRtLnRpbWVfc2luY2VfZXBvY2goKSAtIHNlY3MpOworICAgIGlmIChuc2Vj
cy5jb3VudCgpIDwgMCkgeworICAgICAgc2VjcyA9IHNlY3MgKyBmc19zZWNvbmRzKDEpOworICAg
ICAgbnNlY3MgPSBuc2VjcyArIGZzX3NlY29uZHMoMSk7CisgICAgfQorICAgIHVzaW5nIFRMaW0g
PSBudW1lcmljX2xpbWl0czxUaW1lVD47CisgICAgaWYgKHNlY3MuY291bnQoKSA+PSAwKQorICAg
ICAgcmV0dXJuIHNlY3MuY291bnQoKSA8PSBUTGltOjptYXgoKTsKKyAgICByZXR1cm4gc2Vjcy5j
b3VudCgpID49IFRMaW06Om1pbigpOworICB9CisKKyAgc3RhdGljIF9MSUJDUFBfQ09OU1RFWFBS
X0FGVEVSX0NYWDExIEZpbGVUaW1lVAorICBjb252ZXJ0X2Zyb21fdGltZXNwZWMoVGltZVNwZWNU
IHRtKSB7CisgICAgaWYgKHRtLnR2X3NlYyA+PSAwIHx8IHRtLnR2X25zZWMgPT0gMCkgeworICAg
ICAgcmV0dXJuIEZpbGVUaW1lVChmc19zZWNvbmRzKHRtLnR2X3NlYykgKworICAgICAgICAgICAg
ICAgICAgICAgICBkdXJhdGlvbl9jYXN0PGZzX2R1cmF0aW9uPihmc19uYW5vc2Vjb25kcyh0bS50
dl9uc2VjKSkpOworICAgIH0gZWxzZSB7IC8vIHRtLnR2X3NlYyA8IDAKKyAgICAgIGF1dG8gYWRq
X3N1YnNlYyA9IGR1cmF0aW9uX2Nhc3Q8ZnNfZHVyYXRpb24+KGZzX3NlY29uZHMoMSkgLQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnNfbmFub3Nl
Y29uZHModG0udHZfbnNlYykpOworICAgICAgYXV0byBEdXIgPSBmc19zZWNvbmRzKHRtLnR2X3Nl
YyArIDEpIC0gYWRqX3N1YnNlYzsKKyAgICAgIHJldHVybiBGaWxlVGltZVQoRHVyKTsKKyAgICB9
CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgU3ViU2VjVD4KKyAgc3RhdGljIF9MSUJDUFBfQ09O
U1RFWFBSX0FGVEVSX0NYWDExIGJvb2wKKyAgc2V0X3RpbWVzX2NoZWNrZWQoVGltZVQqIHNlY19v
dXQsIFN1YlNlY1QqIHN1YnNlY19vdXQsIEZpbGVUaW1lVCB0cCkgeworICAgIGF1dG8gZHVyID0g
dHAudGltZV9zaW5jZV9lcG9jaCgpOworICAgIGF1dG8gc2VjX2R1ciA9IGR1cmF0aW9uX2Nhc3Q8
ZnNfc2Vjb25kcz4oZHVyKTsKKyAgICBhdXRvIHN1YnNlY19kdXIgPSBkdXJhdGlvbl9jYXN0PGZz
X25hbm9zZWNvbmRzPihkdXIgLSBzZWNfZHVyKTsKKyAgICAvLyBUaGUgdHZfbnNlYyBhbmQgdHZf
dXNlYyBmaWVsZHMgbXVzdCBub3QgYmUgbmVnYXRpdmUgc28gYWRqdXN0IGFjY29yZGluZ2x5Cisg
ICAgaWYgKHN1YnNlY19kdXIuY291bnQoKSA8IDApIHsKKyAgICAgIGlmIChzZWNfZHVyLmNvdW50
KCkgPiBtaW5fc2Vjb25kcykgeworICAgICAgICBzZWNfZHVyID0gc2VjX2R1ciAtIGZzX3NlY29u
ZHMoMSk7CisgICAgICAgIHN1YnNlY19kdXIgPSBzdWJzZWNfZHVyICsgZnNfc2Vjb25kcygxKTsK
KyAgICAgIH0gZWxzZSB7CisgICAgICAgIHN1YnNlY19kdXIgPSBmc19uYW5vc2Vjb25kczo6emVy
bygpOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gY2hlY2tlZF9zZXQoc2VjX291dCwgc2Vj
X2R1ci5jb3VudCgpKSAmJgorICAgICAgICAgICBjaGVja2VkX3NldChzdWJzZWNfb3V0LCBzdWJz
ZWNfZHVyLmNvdW50KCkpOworICB9CisgIHN0YXRpYyBfTElCQ1BQX0NPTlNURVhQUl9BRlRFUl9D
WFgxMSBib29sIGNvbnZlcnRfdG9fdGltZXNwZWMoVGltZVNwZWNUJiBkZXN0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZp
bGVUaW1lVCB0cCkgeworICAgIGlmICghaXNfcmVwcmVzZW50YWJsZSh0cCkpCisgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIHNldF90aW1lc19jaGVja2VkKCZkZXN0LnR2X3NlYywgJmRl
c3QudHZfbnNlYywgdHApOworICB9Cit9OworCit1c2luZyBmc190aW1lID0gdGltZV91dGlsPGZp
bGVfdGltZV90eXBlLCB0aW1lX3QsIFRpbWVTcGVjPjsKKworI2lmIGRlZmluZWQoX19BUFBMRV9f
KQorVGltZVNwZWMgZXh0cmFjdF9tdGltZShTdGF0VCBjb25zdCYgc3QpIHsgcmV0dXJuIHN0LnN0
X210aW1lc3BlYzsgfQorVGltZVNwZWMgZXh0cmFjdF9hdGltZShTdGF0VCBjb25zdCYgc3QpIHsg
cmV0dXJuIHN0LnN0X2F0aW1lc3BlYzsgfQorI2Vsc2UKK1RpbWVTcGVjIGV4dHJhY3RfbXRpbWUo
U3RhdFQgY29uc3QmIHN0KSB7IHJldHVybiBzdC5zdF9tdGltOyB9CitUaW1lU3BlYyBleHRyYWN0
X2F0aW1lKFN0YXRUIGNvbnN0JiBzdCkgeyByZXR1cm4gc3Quc3RfYXRpbTsgfQorI2VuZGlmCisK
Ky8vIGFsbG93IHRoZSB1dGltZXMgaW1wbGVtZW50YXRpb24gdG8gY29tcGlsZSBldmVuIGl0IHdl
J3JlIG5vdCBnb2luZworLy8gdG8gdXNlIGl0LgorCitib29sIHBvc2l4X3V0aW1lcyhjb25zdCBw
YXRoJiBwLCBzdGQ6OmFycmF5PFRpbWVTcGVjLCAyPiBjb25zdCYgVFMsCisgICAgICAgICAgICAg
ICAgICBlcnJvcl9jb2RlJiBlYykgeworICB1c2luZyBuYW1lc3BhY2UgY2hyb25vOworICBhdXRv
IENvbnZlcnQgPSBbXShsb25nIG5zZWMpIHsKKyAgICB1c2luZyBpbnRfdHlwZSA9IGRlY2x0eXBl
KHN0ZDo6ZGVjbHZhbDwgOjp0aW1ldmFsPigpLnR2X3VzZWMpOworICAgIGF1dG8gZHVyID0gZHVy
YXRpb25fY2FzdDxtaWNyb3NlY29uZHM+KG5hbm9zZWNvbmRzKG5zZWMpKS5jb3VudCgpOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oZHVyKTsKKyAgfTsKKyAgc3RydWN0IDo6dGlt
ZXZhbCBDb252ZXJ0ZWRUU1syXSA9IHt7VFNbMF0udHZfc2VjLCBDb252ZXJ0KFRTWzBdLnR2X25z
ZWMpfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7VFNbMV0udHZfc2Vj
LCBDb252ZXJ0KFRTWzFdLnR2X25zZWMpfX07CisgIGlmICg6OnV0aW1lcyhwLmNfc3RyKCksIENv
bnZlcnRlZFRTKSA9PSAtMSkgeworICAgIGVjID0gY2FwdHVyZV9lcnJubygpOworICAgIHJldHVy
biB0cnVlOworICB9CisgIHJldHVybiBmYWxzZTsKK30KKworI2lmIGRlZmluZWQoX0xJQkNQUF9V
U0VfVVRJTUVOU0FUKQorYm9vbCBwb3NpeF91dGltZW5zYXQoY29uc3QgcGF0aCYgcCwgc3RkOjph
cnJheTxUaW1lU3BlYywgMj4gY29uc3QmIFRTLAorICAgICAgICAgICAgICAgICAgICAgZXJyb3Jf
Y29kZSYgZWMpIHsKKyAgaWYgKDo6dXRpbWVuc2F0KEFUX0ZEQ1dELCBwLmNfc3RyKCksIFRTLmRh
dGEoKSwgMCkgPT0gLTEpIHsKKyAgICBlYyA9IGNhcHR1cmVfZXJybm8oKTsKKyAgICByZXR1cm4g
dHJ1ZTsKKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKworYm9vbCBzZXRfZmlsZV90
aW1lcyhjb25zdCBwYXRoJiBwLCBzdGQ6OmFycmF5PFRpbWVTcGVjLCAyPiBjb25zdCYgVFMsCisg
ICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKSB7CisjaWYgIWRlZmluZWQoX0xJQkNQ
UF9VU0VfVVRJTUVOU0FUKQorICByZXR1cm4gcG9zaXhfdXRpbWVzKHAsIFRTLCBlYyk7CisjZWxz
ZQorICByZXR1cm4gcG9zaXhfdXRpbWVuc2F0KHAsIFRTLCBlYyk7CisjZW5kaWYKK30KKworfSAv
LyBuYW1lc3BhY2UKK30gLy8gZW5kIG5hbWVzcGFjZSBkZXRhaWwKKworX0xJQkNQUF9FTkRfTkFN
RVNQQUNFX0ZJTEVTWVNURU0KKworLyogLS0gRU5EIGZpbGVzeXN0ZW0vZmlsZXN5c3RlbV9jb21t
b24uaCAtLSAqLworCisvKiAtLSBCRUdJTiBmaWxlc3lzdGVtL2RpcmVjdG9yeV9pdGVyYXRvci5j
cHAgLS0gKi8KKworI2lmIGRlZmluZWQoX0xJQkNQUF9XSU4zMkFQSSkKKyNkZWZpbmUgV0lOMzJf
TEVBTl9BTkRfTUVBTgorI2luY2x1ZGUgPFdpbmRvd3MuaD4KKyNlbHNlCisjaW5jbHVkZSA8ZGly
ZW50Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxlcnJuby5oPgorCisvKiAjaW5jbHVkZSAiZmlsZXN5
c3RlbV9jb21tb24uaCIgKi8KKworX0xJQkNQUF9CRUdJTl9OQU1FU1BBQ0VfRklMRVNZU1RFTQor
CituYW1lc3BhY2UgZGV0YWlsIHsKK25hbWVzcGFjZSB7CisKKyNpZiAhZGVmaW5lZChfTElCQ1BQ
X1dJTjMyQVBJKQordGVtcGxhdGUgPGNsYXNzIERpckVudFQsIGNsYXNzID0gZGVjbHR5cGUoRGly
RW50VDo6ZF90eXBlKT4KK3N0YXRpYyBmaWxlX3R5cGUgZ2V0X2ZpbGVfdHlwZShEaXJFbnRUKiBl
bnQsIGludCkgeworICBzd2l0Y2ggKGVudC0+ZF90eXBlKSB7CisgIGNhc2UgRFRfQkxLOgorICAg
IHJldHVybiBmaWxlX3R5cGU6OmJsb2NrOworICBjYXNlIERUX0NIUjoKKyAgICByZXR1cm4gZmls
ZV90eXBlOjpjaGFyYWN0ZXI7CisgIGNhc2UgRFRfRElSOgorICAgIHJldHVybiBmaWxlX3R5cGU6
OmRpcmVjdG9yeTsKKyAgY2FzZSBEVF9GSUZPOgorICAgIHJldHVybiBmaWxlX3R5cGU6OmZpZm87
CisgIGNhc2UgRFRfTE5LOgorICAgIHJldHVybiBmaWxlX3R5cGU6OnN5bWxpbms7CisgIGNhc2Ug
RFRfUkVHOgorICAgIHJldHVybiBmaWxlX3R5cGU6OnJlZ3VsYXI7CisgIGNhc2UgRFRfU09DSzoK
KyAgICByZXR1cm4gZmlsZV90eXBlOjpzb2NrZXQ7CisgIC8vIFVubGlrZSBpbiBsc3RhdCwgaGl0
dGluZyAidW5rbm93biIgaGVyZSBzaW1wbHkgbWVhbnMgdGhhdCB0aGUgdW5kZXJseWluZworICAv
LyBmaWxlc3lzdGVtIGRvZXNuJ3Qgc3VwcG9ydCBkX3R5cGUuIFJlcG9ydCBpcyBhcyAnbm9uZScg
c28gd2UgY29ycmVjdGx5CisgIC8vIHNldCB0aGUgY2FjaGUgdG8gZW1wdHkuCisgIGNhc2UgRFRf
VU5LTk9XTjoKKyAgICBicmVhazsKKyAgfQorICByZXR1cm4gZmlsZV90eXBlOjpub25lOworfQor
Cit0ZW1wbGF0ZSA8Y2xhc3MgRGlyRW50VD4KK3N0YXRpYyBmaWxlX3R5cGUgZ2V0X2ZpbGVfdHlw
ZShEaXJFbnRUKiBlbnQsIGxvbmcpIHsKKyAgcmV0dXJuIGZpbGVfdHlwZTo6bm9uZTsKK30KKwor
c3RhdGljIHBhaXI8c3RyaW5nX3ZpZXcsIGZpbGVfdHlwZT4gcG9zaXhfcmVhZGRpcihESVIqIGRp
cl9zdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVycm9yX2NvZGUmIGVjKSB7CisgIHN0cnVjdCBkaXJlbnQqIGRpcl9lbnRyeV9wdHIgPSBu
dWxscHRyOworICBlcnJubyA9IDA7IC8vIHplcm8gZXJybm8gaW4gb3JkZXIgdG8gZGV0ZWN0IGVy
cm9ycworICBlYy5jbGVhcigpOworICBpZiAoKGRpcl9lbnRyeV9wdHIgPSA6OnJlYWRkaXIoZGly
X3N0cmVhbSkpID09IG51bGxwdHIpIHsKKyAgICBpZiAoZXJybm8pCisgICAgICBlYyA9IGNhcHR1
cmVfZXJybm8oKTsKKyAgICByZXR1cm4ge307CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIHtkaXJf
ZW50cnlfcHRyLT5kX25hbWUsIGdldF9maWxlX3R5cGUoZGlyX2VudHJ5X3B0ciwgMCl9OworICB9
Cit9CisjZWxzZQorCitzdGF0aWMgZmlsZV90eXBlIGdldF9maWxlX3R5cGUoY29uc3QgV0lOMzJf
RklORF9EQVRBJiBkYXRhKSB7CisgIC8vYXV0byBhdHRycyA9IGRhdGEuZHdGaWxlQXR0cmlidXRl
czsKKyAgLy8gRklYTUUoRXJpY1dGKQorICByZXR1cm4gZmlsZV90eXBlOjp1bmtub3duOworfQor
c3RhdGljIHVpbnRtYXhfdCBnZXRfZmlsZV9zaXplKGNvbnN0IFdJTjMyX0ZJTkRfREFUQSYgZGF0
YSkgeworICByZXR1cm4gKGRhdGEubkZpbGVTaXplSGlnaHQgKiAoTUFYRFdPUkQgKyAxKSkgKyBk
YXRhLm5GaWxlU2l6ZUxvdzsKK30KK3N0YXRpYyBmaWxlX3RpbWVfdHlwZSBnZXRfd3JpdGVfdGlt
ZShjb25zdCBXSU4zMl9GSU5EX0RBVEEmIGRhdGEpIHsKKyAgVUxBUkdFX0lOVEVHRVIgdG1wOwor
ICBGSUxFVElNRSYgdGltZSA9IGRhdGEuZnRMYXN0V3JpdGVUaW1lOworICB0bXAudS5Mb3dQYXJ0
ID0gdGltZS5kd0xvd0RhdGVUaW1lOworICB0bXAudS5IaWdoUGFydCA9IHRpbWUuZHdIaWdoRGF0
ZVRpbWU7CisgIHJldHVybiBmaWxlX3RpbWVfdHlwZShmaWxlX3RpbWVfdHlwZTo6ZHVyYXRpb24o
dGltZS5RdWFkUGFydCkpOworfQorCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UKK30gLy8gbmFt
ZXNwYWNlIGRldGFpbAorCit1c2luZyBkZXRhaWw6OkVycm9ySGFuZGxlcjsKKworI2lmIGRlZmlu
ZWQoX0xJQkNQUF9XSU4zMkFQSSkKK2NsYXNzIF9fZGlyX3N0cmVhbSB7CitwdWJsaWM6CisgIF9f
ZGlyX3N0cmVhbSgpID0gZGVsZXRlOworICBfX2Rpcl9zdHJlYW0mIG9wZXJhdG9yPShjb25zdCBf
X2Rpcl9zdHJlYW0mKSA9IGRlbGV0ZTsKKworICBfX2Rpcl9zdHJlYW0oX19kaXJfc3RyZWFtJiYg
X19kcykgbm9leGNlcHQgOiBfX3N0cmVhbV8oX19kcy5fX3N0cmVhbV8pLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jvb3RfKG1vdmUoX19kcy5fX3Jv
b3RfKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
ZW50cnlfKG1vdmUoX19kcy5fX2VudHJ5XykpIHsKKyAgICBfX2RzLl9fc3RyZWFtXyA9IElOVkFM
SURfSEFORExFX1ZBTFVFOworICB9CisKKyAgX19kaXJfc3RyZWFtKGNvbnN0IHBhdGgmIHJvb3Qs
IGRpcmVjdG9yeV9vcHRpb25zIG9wdHMsIGVycm9yX2NvZGUmIGVjKQorICAgICAgOiBfX3N0cmVh
bV8oSU5WQUxJRF9IQU5ETEVfVkFMVUUpLCBfX3Jvb3RfKHJvb3QpIHsKKyAgICBfX3N0cmVhbV8g
PSA6OkZpbmRGaXJzdEZpbGVFeChyb290LmNfc3RyKCksICZfX2RhdGFfKTsKKyAgICBpZiAoX19z
dHJlYW1fID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisgICAgICBlYyA9IGVycm9yX2NvZGUo
OjpHZXRMYXN0RXJyb3IoKSwgZ2VuZXJpY19jYXRlZ29yeSgpKTsKKyAgICAgIGNvbnN0IGJvb2wg
aWdub3JlX3Blcm1pc3Npb25fZGVuaWVkID0KKyAgICAgICAgICBib29sKG9wdHMgJiBkaXJlY3Rv
cnlfb3B0aW9uczo6c2tpcF9wZXJtaXNzaW9uX2RlbmllZCk7CisgICAgICBpZiAoaWdub3JlX3Bl
cm1pc3Npb25fZGVuaWVkICYmIGVjLnZhbHVlKCkgPT0gRVJST1JfQUNDRVNTX0RFTklFRCkKKyAg
ICAgICAgZWMuY2xlYXIoKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIH0KKworICB+X19kaXJf
c3RyZWFtKCkgbm9leGNlcHQgeworICAgIGlmIChfX3N0cmVhbV8gPT0gSU5WQUxJRF9IQU5ETEVf
VkFMVUUpCisgICAgICByZXR1cm47CisgICAgY2xvc2UoKTsKKyAgfQorCisgIGJvb2wgZ29vZCgp
IGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIF9fc3RyZWFtXyAhPSBJTlZBTElEX0hBTkRMRV9WQUxV
RTsgfQorCisgIGJvb2wgYWR2YW5jZShlcnJvcl9jb2RlJiBlYykgeworICAgIHdoaWxlICg6OkZp
bmROZXh0RmlsZShfX3N0cmVhbV8sICZfX2RhdGFfKSkgeworICAgICAgaWYgKCFzdHJjbXAoX19k
YXRhXy5jRmlsZU5hbWUsICIuIikgfHwgc3RyY21wKF9fZGF0YV8uY0ZpbGVOYW1lLCAiLi4iKSkK
KyAgICAgICAgY29udGludWU7CisgICAgICAvLyBGSVhNRTogQ2FjaGUgbW9yZSBvZiB0aGlzCisg
ICAgICAvL2RpcmVjdG9yeV9lbnRyeTo6X19jYWNoZWRfZGF0YSBjZGF0YTsKKyAgICAgIC8vY2Rh
dGEuX190eXBlXyA9IGdldF9maWxlX3R5cGUoX19kYXRhXyk7CisgICAgICAvL2NkYXRhLl9fc2l6
ZV8gPSBnZXRfZmlsZV9zaXplKF9fZGF0YV8pOworICAgICAgLy9jZGF0YS5fX3dyaXRlX3RpbWVf
ID0gZ2V0X3dyaXRlX3RpbWUoX19kYXRhXyk7CisgICAgICBfX2VudHJ5Xy5fX2Fzc2lnbl9pdGVy
X2VudHJ5KAorICAgICAgICAgIF9fcm9vdF8gLyBfX2RhdGFfLmNGaWxlTmFtZSwKKyAgICAgICAg
ICBkaXJlY3RvcnlfZW50cnk6Ol9fY3JlYXRlX2l0ZXJfcmVzdWx0KGdldF9maWxlX3R5cGUoX19k
YXRhKSkpOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGVjID0gZXJyb3JfY29kZSg6
OkdldExhc3RFcnJvcigpLCBnZW5lcmljX2NhdGVnb3J5KCkpOworICAgIGNsb3NlKCk7CisgICAg
cmV0dXJuIGZhbHNlOworICB9CisKK3ByaXZhdGU6CisgIGVycm9yX2NvZGUgY2xvc2UoKSBub2V4
Y2VwdCB7CisgICAgZXJyb3JfY29kZSBlYzsKKyAgICBpZiAoITo6RmluZENsb3NlKF9fc3RyZWFt
XykpCisgICAgICBlYyA9IGVycm9yX2NvZGUoOjpHZXRMYXN0RXJyb3IoKSwgZ2VuZXJpY19jYXRl
Z29yeSgpKTsKKyAgICBfX3N0cmVhbV8gPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKyAgICByZXR1
cm4gZWM7CisgIH0KKworICBIQU5ETEUgX19zdHJlYW1fe0lOVkFMSURfSEFORExFX1ZBTFVFfTsK
KyAgV0lOMzJfRklORF9EQVRBIF9fZGF0YV87CisKK3B1YmxpYzoKKyAgcGF0aCBfX3Jvb3RfOwor
ICBkaXJlY3RvcnlfZW50cnkgX19lbnRyeV87Cit9OworI2Vsc2UKK2NsYXNzIF9fZGlyX3N0cmVh
bSB7CitwdWJsaWM6CisgIF9fZGlyX3N0cmVhbSgpID0gZGVsZXRlOworICBfX2Rpcl9zdHJlYW0m
IG9wZXJhdG9yPShjb25zdCBfX2Rpcl9zdHJlYW0mKSA9IGRlbGV0ZTsKKworICBfX2Rpcl9zdHJl
YW0oX19kaXJfc3RyZWFtJiYgb3RoZXIpIG5vZXhjZXB0IDogX19zdHJlYW1fKG90aGVyLl9fc3Ry
ZWFtXyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X3Jvb3RfKG1vdmUob3RoZXIuX19yb290XykpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19lbnRyeV8obW92ZShvdGhlci5fX2VudHJ5XykpIHsKKyAg
ICBvdGhlci5fX3N0cmVhbV8gPSBudWxscHRyOworICB9CisKKyAgX19kaXJfc3RyZWFtKGNvbnN0
IHBhdGgmIHJvb3QsIGRpcmVjdG9yeV9vcHRpb25zIG9wdHMsIGVycm9yX2NvZGUmIGVjKQorICAg
ICAgOiBfX3N0cmVhbV8obnVsbHB0ciksIF9fcm9vdF8ocm9vdCkgeworICAgIGlmICgoX19zdHJl
YW1fID0gOjpvcGVuZGlyKHJvb3QuY19zdHIoKSkpID09IG51bGxwdHIpIHsKKyAgICAgIGVjID0g
ZGV0YWlsOjpjYXB0dXJlX2Vycm5vKCk7CisgICAgICBjb25zdCBib29sIGFsbG93X2VhY2VzcyA9
CisgICAgICAgICAgYm9vbChvcHRzICYgZGlyZWN0b3J5X29wdGlvbnM6OnNraXBfcGVybWlzc2lv
bl9kZW5pZWQpOworICAgICAgaWYgKGFsbG93X2VhY2VzcyAmJiBlYy52YWx1ZSgpID09IEVBQ0NF
UykKKyAgICAgICAgZWMuY2xlYXIoKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgYWR2YW5j
ZShlYyk7CisgIH0KKworICB+X19kaXJfc3RyZWFtKCkgbm9leGNlcHQgeworICAgIGlmIChfX3N0
cmVhbV8pCisgICAgICBjbG9zZSgpOworICB9CisKKyAgYm9vbCBnb29kKCkgY29uc3Qgbm9leGNl
cHQgeyByZXR1cm4gX19zdHJlYW1fICE9IG51bGxwdHI7IH0KKworICBib29sIGFkdmFuY2UoZXJy
b3JfY29kZSYgZWMpIHsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgYXV0byBzdHJfdHlwZV9w
YWlyID0gZGV0YWlsOjpwb3NpeF9yZWFkZGlyKF9fc3RyZWFtXywgZWMpOworICAgICAgYXV0byYg
c3RyID0gc3RyX3R5cGVfcGFpci5maXJzdDsKKyAgICAgIGlmIChzdHIgPT0gIi4iIHx8IHN0ciA9
PSAiLi4iKSB7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfSBlbHNlIGlmIChlYyB8fCBzdHIu
ZW1wdHkoKSkgeworICAgICAgICBjbG9zZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICB9IGVsc2UgeworICAgICAgICBfX2VudHJ5Xy5fX2Fzc2lnbl9pdGVyX2VudHJ5KAorICAgICAg
ICAgICAgX19yb290XyAvIHN0ciwKKyAgICAgICAgICAgIGRpcmVjdG9yeV9lbnRyeTo6X19jcmVh
dGVfaXRlcl9yZXN1bHQoc3RyX3R5cGVfcGFpci5zZWNvbmQpKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICB9CisgICAgfQorICB9CisKK3ByaXZhdGU6CisgIGVycm9yX2NvZGUgY2xvc2Uo
KSBub2V4Y2VwdCB7CisgICAgZXJyb3JfY29kZSBtX2VjOworICAgIGlmICg6OmNsb3NlZGlyKF9f
c3RyZWFtXykgPT0gLTEpCisgICAgICBtX2VjID0gZGV0YWlsOjpjYXB0dXJlX2Vycm5vKCk7Cisg
ICAgX19zdHJlYW1fID0gbnVsbHB0cjsKKyAgICByZXR1cm4gbV9lYzsKKyAgfQorCisgIERJUiog
X19zdHJlYW1fe251bGxwdHJ9OworCitwdWJsaWM6CisgIHBhdGggX19yb290XzsKKyAgZGlyZWN0
b3J5X2VudHJ5IF9fZW50cnlfOworfTsKKyNlbmRpZgorCisvLyBkaXJlY3RvcnlfaXRlcmF0b3IK
KworZGlyZWN0b3J5X2l0ZXJhdG9yOjpkaXJlY3RvcnlfaXRlcmF0b3IoY29uc3QgcGF0aCYgcCwg
ZXJyb3JfY29kZSogZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
aXJlY3Rvcnlfb3B0aW9ucyBvcHRzKSB7CisgIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoImRpcmVj
dG9yeV9pdGVyYXRvcjo6ZGlyZWN0b3J5X2l0ZXJhdG9yKC4uLikiLCBlYywgJnApOworCisgIGVy
cm9yX2NvZGUgbV9lYzsKKyAgX19pbXBfID0gbWFrZV9zaGFyZWQ8X19kaXJfc3RyZWFtPihwLCBv
cHRzLCBtX2VjKTsKKyAgaWYgKGVjKQorICAgICplYyA9IG1fZWM7CisgIGlmICghX19pbXBfLT5n
b29kKCkpIHsKKyAgICBfX2ltcF8ucmVzZXQoKTsKKyAgICBpZiAobV9lYykKKyAgICAgIGVyci5y
ZXBvcnQobV9lYyk7CisgIH0KK30KKworZGlyZWN0b3J5X2l0ZXJhdG9yJiBkaXJlY3RvcnlfaXRl
cmF0b3I6Ol9faW5jcmVtZW50KGVycm9yX2NvZGUqIGVjKSB7CisgIF9MSUJDUFBfQVNTRVJUKF9f
aW1wXywgIkF0dGVtcHRpbmcgdG8gaW5jcmVtZW50IGFuIGludmFsaWQgaXRlcmF0b3IiKTsKKyAg
RXJyb3JIYW5kbGVyPHZvaWQ+IGVycigiZGlyZWN0b3J5X2l0ZXJhdG9yOjpvcGVyYXRvcisrKCki
LCBlYyk7CisKKyAgZXJyb3JfY29kZSBtX2VjOworICBpZiAoIV9faW1wXy0+YWR2YW5jZShtX2Vj
KSkgeworICAgIHBhdGggcm9vdCA9IG1vdmUoX19pbXBfLT5fX3Jvb3RfKTsKKyAgICBfX2ltcF8u
cmVzZXQoKTsKKyAgICBpZiAobV9lYykKKyAgICAgIGVyci5yZXBvcnQobV9lYywgImF0IHJvb3Qg
XCIlc1wiIiwgcm9vdCk7CisgIH0KKyAgcmV0dXJuICp0aGlzOworfQorCitkaXJlY3RvcnlfZW50
cnkgY29uc3QmIGRpcmVjdG9yeV9pdGVyYXRvcjo6X19kZXJlZmVyZW5jZSgpIGNvbnN0IHsKKyAg
X0xJQkNQUF9BU1NFUlQoX19pbXBfLCAiQXR0ZW1wdGluZyB0byBkZXJlZmVyZW5jZSBhbiBpbnZh
bGlkIGl0ZXJhdG9yIik7CisgIHJldHVybiBfX2ltcF8tPl9fZW50cnlfOworfQorCisvLyByZWN1
cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yCisKK3N0cnVjdCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0
ZXJhdG9yOjpfX3NoYXJlZF9pbXAgeworICBzdGFjazxfX2Rpcl9zdHJlYW0+IF9fc3RhY2tfOwor
ICBkaXJlY3Rvcnlfb3B0aW9ucyBfX29wdGlvbnNfOworfTsKKworcmVjdXJzaXZlX2RpcmVjdG9y
eV9pdGVyYXRvcjo6cmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcigKKyAgICBjb25zdCBwYXRo
JiBwLCBkaXJlY3Rvcnlfb3B0aW9ucyBvcHQsIGVycm9yX2NvZGUqIGVjKQorICAgIDogX19pbXBf
KG51bGxwdHIpLCBfX3JlY18odHJ1ZSkgeworICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJyZWN1
cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yIiwgZWMsICZwKTsKKworICBlcnJvcl9jb2RlIG1fZWM7
CisgIF9fZGlyX3N0cmVhbSBuZXdfcyhwLCBvcHQsIG1fZWMpOworICBpZiAobV9lYykKKyAgICBl
cnIucmVwb3J0KG1fZWMpOworICBpZiAobV9lYyB8fCAhbmV3X3MuZ29vZCgpKQorICAgIHJldHVy
bjsKKworICBfX2ltcF8gPSBtYWtlX3NoYXJlZDxfX3NoYXJlZF9pbXA+KCk7CisgIF9faW1wXy0+
X19vcHRpb25zXyA9IG9wdDsKKyAgX19pbXBfLT5fX3N0YWNrXy5wdXNoKG1vdmUobmV3X3MpKTsK
K30KKwordm9pZCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yOjpfX3BvcChlcnJvcl9jb2Rl
KiBlYykgeworICBfTElCQ1BQX0FTU0VSVChfX2ltcF8sICJQb3BwaW5nIHRoZSBlbmQgaXRlcmF0
b3IiKTsKKyAgaWYgKGVjKQorICAgIGVjLT5jbGVhcigpOworICBfX2ltcF8tPl9fc3RhY2tfLnBv
cCgpOworICBpZiAoX19pbXBfLT5fX3N0YWNrXy5zaXplKCkgPT0gMCkKKyAgICBfX2ltcF8ucmVz
ZXQoKTsKKyAgZWxzZQorICAgIF9fYWR2YW5jZShlYyk7Cit9CisKK2RpcmVjdG9yeV9vcHRpb25z
IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I6Om9wdGlvbnMoKSBjb25zdCB7CisgIHJldHVy
biBfX2ltcF8tPl9fb3B0aW9uc187Cit9CisKK2ludCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJh
dG9yOjpkZXB0aCgpIGNvbnN0IHsKKyAgcmV0dXJuIF9faW1wXy0+X19zdGFja18uc2l6ZSgpIC0g
MTsKK30KKworY29uc3QgZGlyZWN0b3J5X2VudHJ5JiByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJh
dG9yOjpfX2RlcmVmZXJlbmNlKCkgY29uc3QgeworICByZXR1cm4gX19pbXBfLT5fX3N0YWNrXy50
b3AoKS5fX2VudHJ5XzsKK30KKworcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYKK3JlY3Vy
c2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I6Ol9faW5jcmVtZW50KGVycm9yX2NvZGUqIGVjKSB7Cisg
IGlmIChlYykKKyAgICBlYy0+Y2xlYXIoKTsKKyAgaWYgKHJlY3Vyc2lvbl9wZW5kaW5nKCkpIHsK
KyAgICBpZiAoX190cnlfcmVjdXJzaW9uKGVjKSB8fCAoZWMgJiYgKmVjKSkKKyAgICAgIHJldHVy
biAqdGhpczsKKyAgfQorICBfX3JlY18gPSB0cnVlOworICBfX2FkdmFuY2UoZWMpOworICByZXR1
cm4gKnRoaXM7Cit9CisKK3ZvaWQgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjo6X19hZHZh
bmNlKGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoInJlY3Vyc2l2
ZV9kaXJlY3RvcnlfaXRlcmF0b3I6Om9wZXJhdG9yKysoKSIsIGVjKTsKKworICBjb25zdCBkaXJl
Y3RvcnlfaXRlcmF0b3IgZW5kX2l0OworICBhdXRvJiBzdGFjayA9IF9faW1wXy0+X19zdGFja187
CisgIGVycm9yX2NvZGUgbV9lYzsKKyAgd2hpbGUgKHN0YWNrLnNpemUoKSA+IDApIHsKKyAgICBp
ZiAoc3RhY2sudG9wKCkuYWR2YW5jZShtX2VjKSkKKyAgICAgIHJldHVybjsKKyAgICBpZiAobV9l
YykKKyAgICAgIGJyZWFrOworICAgIHN0YWNrLnBvcCgpOworICB9CisKKyAgaWYgKG1fZWMpIHsK
KyAgICBwYXRoIHJvb3QgPSBtb3ZlKHN0YWNrLnRvcCgpLl9fcm9vdF8pOworICAgIF9faW1wXy5y
ZXNldCgpOworICAgIGVyci5yZXBvcnQobV9lYywgImF0IHJvb3QgXCIlc1wiIiwgcm9vdCk7Cisg
IH0gZWxzZSB7CisgICAgX19pbXBfLnJlc2V0KCk7CisgIH0KK30KKworYm9vbCByZWN1cnNpdmVf
ZGlyZWN0b3J5X2l0ZXJhdG9yOjpfX3RyeV9yZWN1cnNpb24oZXJyb3JfY29kZSogZWMpIHsKKyAg
RXJyb3JIYW5kbGVyPHZvaWQ+IGVycigicmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjo6b3Bl
cmF0b3IrKygpIiwgZWMpOworCisgIGJvb2wgcmVjX3N5bSA9IGJvb2wob3B0aW9ucygpICYgZGly
ZWN0b3J5X29wdGlvbnM6OmZvbGxvd19kaXJlY3Rvcnlfc3ltbGluayk7CisKKyAgYXV0byYgY3Vy
cl9pdCA9IF9faW1wXy0+X19zdGFja18udG9wKCk7CisKKyAgYm9vbCBza2lwX3JlYyA9IGZhbHNl
OworICBlcnJvcl9jb2RlIG1fZWM7CisgIGlmICghcmVjX3N5bSkgeworICAgIGZpbGVfc3RhdHVz
IHN0KGN1cnJfaXQuX19lbnRyeV8uX19nZXRfc3ltX2Z0KCZtX2VjKSk7CisgICAgaWYgKG1fZWMg
JiYgc3RhdHVzX2tub3duKHN0KSkKKyAgICAgIG1fZWMuY2xlYXIoKTsKKyAgICBpZiAobV9lYyB8
fCBpc19zeW1saW5rKHN0KSB8fCAhaXNfZGlyZWN0b3J5KHN0KSkKKyAgICAgIHNraXBfcmVjID0g
dHJ1ZTsKKyAgfSBlbHNlIHsKKyAgICBmaWxlX3N0YXR1cyBzdChjdXJyX2l0Ll9fZW50cnlfLl9f
Z2V0X2Z0KCZtX2VjKSk7CisgICAgaWYgKG1fZWMgJiYgc3RhdHVzX2tub3duKHN0KSkKKyAgICAg
IG1fZWMuY2xlYXIoKTsKKyAgICBpZiAobV9lYyB8fCAhaXNfZGlyZWN0b3J5KHN0KSkKKyAgICAg
IHNraXBfcmVjID0gdHJ1ZTsKKyAgfQorCisgIGlmICghc2tpcF9yZWMpIHsKKyAgICBfX2Rpcl9z
dHJlYW0gbmV3X2l0KGN1cnJfaXQuX19lbnRyeV8ucGF0aCgpLCBfX2ltcF8tPl9fb3B0aW9uc18s
IG1fZWMpOworICAgIGlmIChuZXdfaXQuZ29vZCgpKSB7CisgICAgICBfX2ltcF8tPl9fc3RhY2tf
LnB1c2gobW92ZShuZXdfaXQpKTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgfQorICBp
ZiAobV9lYykgeworICAgIGNvbnN0IGJvb2wgYWxsb3dfZWFjZXNzID0KKyAgICAgICAgYm9vbChf
X2ltcF8tPl9fb3B0aW9uc18gJiBkaXJlY3Rvcnlfb3B0aW9uczo6c2tpcF9wZXJtaXNzaW9uX2Rl
bmllZCk7CisgICAgaWYgKG1fZWMudmFsdWUoKSA9PSBFQUNDRVMgJiYgYWxsb3dfZWFjZXNzKSB7
CisgICAgICBpZiAoZWMpCisgICAgICAgIGVjLT5jbGVhcigpOworICAgIH0gZWxzZSB7CisgICAg
ICBwYXRoIGF0X2VudCA9IG1vdmUoY3Vycl9pdC5fX2VudHJ5Xy5fX3BfKTsKKyAgICAgIF9faW1w
Xy5yZXNldCgpOworICAgICAgZXJyLnJlcG9ydChtX2VjLCAiYXR0ZW1wdGluZyByZWN1cnNpb24g
aW50byBcIiVzXCIiLCBhdF9lbnQpOworICAgIH0KKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisK
K19MSUJDUFBfRU5EX05BTUVTUEFDRV9GSUxFU1lTVEVNCisKKy8qIC0tIEVORCBmaWxlc3lzdGVt
L2RpcmVjdG9yeV9pdGVyYXRvci5jcHAgLS0gKi8KKworLyogLS0gQkVHSU4gZmlsZXN5c3RlbS9p
bnQxMjhfYnVpbHRpbnMuY3BwIC0tICovCisKKy8qID09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqCisg
KiBUaGlzIGZpbGUgaW1wbGVtZW50cyBfX211bG90aTQsIGFuZCBpcyBzdG9sZW4gZnJvbSB0aGUg
Y29tcGlsZXJfcnQgbGlicmFyeS4KKyAqCisgKiBGSVhNRTogd2Ugc3RlYWwgYW5kIHJlLWNvbXBp
bGUgaXQgaW50byBmaWxlc3lzdGVtLCB3aGljaCB1c2VzIF9faW50MTI4X3QsCisgKiBhbmQgcmVx
dWlyZXMgdGhpcyBidWlsdGluIHdoZW4gc2FuaXRpemVkLiBTZWUgbGx2bS5vcmcvUFIzMDY0Mwor
ICoKKyAqID09PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0KKyAqLworCisvKiAjaW5jbHVkZSAiX19jb25maWci
ICovCisjaW5jbHVkZSA8Y2xpbWl0cz4KKworI2lmbmRlZiBfX1NJWkVPRl9JTlQxMjhfXworI2Rl
ZmluZSBfTElCQ1BQX0hBU19OT19JTlQxMjgKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX0xJQkNQ
UF9IQVNfTk9fSU5UMTI4KQorCisjaWZkZWYgX19jbGFuZ19fCisjcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWlzc2luZy1w
cm90b3R5cGVzIgorI2VuZGlmCitleHRlcm4gIkMiIF9fYXR0cmlidXRlX18oKG5vX3Nhbml0aXpl
KCJ1bmRlZmluZWQiKSkpCitfX2ludDEyOF90IF9fbXVsb3RpNChfX2ludDEyOF90IGEsIF9faW50
MTI4X3QgYiwgaW50KiBvdmVyZmxvdykgeworICBjb25zdCBpbnQgTiA9IChpbnQpKHNpemVvZihf
X2ludDEyOF90KSAqIENIQVJfQklUKTsKKyAgY29uc3QgX19pbnQxMjhfdCBNSU4gPSAoX19pbnQx
MjhfdCkxIDw8IChOIC0gMSk7CisgIGNvbnN0IF9faW50MTI4X3QgTUFYID0gfk1JTjsKKyAgKm92
ZXJmbG93ID0gMDsKKyAgX19pbnQxMjhfdCByZXN1bHQgPSBhICogYjsKKyAgaWYgKGEgPT0gTUlO
KSB7CisgICAgaWYgKGIgIT0gMCAmJiBiICE9IDEpCisgICAgICAqb3ZlcmZsb3cgPSAxOworICAg
IHJldHVybiByZXN1bHQ7CisgIH0KKyAgaWYgKGIgPT0gTUlOKSB7CisgICAgaWYgKGEgIT0gMCAm
JiBhICE9IDEpCisgICAgICAqb3ZlcmZsb3cgPSAxOworICAgIHJldHVybiByZXN1bHQ7CisgIH0K
KyAgX19pbnQxMjhfdCBzYSA9IGEgPj4gKE4gLSAxKTsKKyAgX19pbnQxMjhfdCBhYnNfYSA9IChh
IF4gc2EpIC0gc2E7CisgIF9faW50MTI4X3Qgc2IgPSBiID4+IChOIC0gMSk7CisgIF9faW50MTI4
X3QgYWJzX2IgPSAoYiBeIHNiKSAtIHNiOworICBpZiAoYWJzX2EgPCAyIHx8IGFic19iIDwgMikK
KyAgICByZXR1cm4gcmVzdWx0OworICBpZiAoc2EgPT0gc2IpIHsKKyAgICBpZiAoYWJzX2EgPiBN
QVggLyBhYnNfYikKKyAgICAgICpvdmVyZmxvdyA9IDE7CisgIH0gZWxzZSB7CisgICAgaWYgKGFi
c19hID4gTUlOIC8gLWFic19iKQorICAgICAgKm92ZXJmbG93ID0gMTsKKyAgfQorICByZXR1cm4g
cmVzdWx0OworfQorI2lmZGVmIF9fY2xhbmdfXworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBv
cAorI2VuZGlmCisKKyNlbmRpZgorCisvKiAtLSBFTkQgZmlsZXN5c3RlbS9pbnQxMjhfYnVpbHRp
bnMuY3BwIC0tICovCisKKy8qIC0tIEJFR0lOIGZpbGVzeXN0ZW0vb3BlcmF0aW9ucy5jcHAgLS0g
Ki8KKworLyogI2luY2x1ZGUgImZpbGVzeXN0ZW0iICovCisjaW5jbHVkZSA8YXJyYXk+CisjaW5j
bHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8ZnN0cmVhbT4KKyNpbmNsdWRlIDxyYW5kb20+IC8q
IGZvciB1bmlxdWVfcGF0aCAqLworI2luY2x1ZGUgPHN0cmluZ192aWV3PgorI2luY2x1ZGUgPHR5
cGVfdHJhaXRzPgorI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1
ZGUgPGNsaW1pdHM+CisKKy8qICNpbmNsdWRlICJmaWxlc3lzdGVtX2NvbW1vbi5oIiAqLworCisj
aW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMv
c3RhdHZmcy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxmY250bC5oPiAvKiB2YWx1
ZXMgZm9yIGZjaG1vZGF0ICovCisKKyNpZiBkZWZpbmVkKF9fbGludXhfXykKKyNpbmNsdWRlIDxs
aW51eC92ZXJzaW9uLmg+CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9O
KDIsIDYsIDMzKQorI2luY2x1ZGUgPHN5cy9zZW5kZmlsZS5oPgorI2RlZmluZSBfTElCQ1BQX1VT
RV9TRU5ERklMRQorI2VuZGlmCisjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgX19oYXNfaW5j
bHVkZSg8Y29weWZpbGUuaD4pCisjaW5jbHVkZSA8Y29weWZpbGUuaD4KKyNkZWZpbmUgX0xJQkNQ
UF9VU0VfQ09QWUZJTEUKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX19BUFBMRV9fKQorI2RlZmlu
ZSBfTElCQ1BQX1VTRV9DTE9DS19HRVRUSU1FCisjZW5kaWYKKworI2lmICFkZWZpbmVkKENMT0NL
X1JFQUxUSU1FKSB8fCAhZGVmaW5lZChfTElCQ1BQX1VTRV9DTE9DS19HRVRUSU1FKQorI2luY2x1
ZGUgPHN5cy90aW1lLmg+IC8vIGZvciBnZXR0aW1lb2ZkYXkgYW5kIHRpbWV2YWwKKyNlbmRpZiAg
ICAgICAgICAgICAgICAvLyAhZGVmaW5lZChDTE9DS19SRUFMVElNRSkKKworI2lmIGRlZmluZWQo
X0xJQkNQUF9DT01QSUxFUl9HQ0MpCisjaWYgX0dOVUNfVkVSIDwgNTAwCisjcHJhZ21hIEdDQyBk
aWFnbm9zdGljIGlnbm9yZWQgIi1XbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMiCisjZW5kaWYK
KyNlbmRpZgorCitfTElCQ1BQX0JFR0lOX05BTUVTUEFDRV9GSUxFU1lTVEVNCisKK25hbWVzcGFj
ZSB7CituYW1lc3BhY2UgcGFyc2VyIHsKKwordXNpbmcgc3RyaW5nX3ZpZXdfdCA9IHBhdGg6Ol9f
c3RyaW5nX3ZpZXc7Cit1c2luZyBzdHJpbmdfdmlld19wYWlyID0gcGFpcjxzdHJpbmdfdmlld190
LCBzdHJpbmdfdmlld190PjsKK3VzaW5nIFBvc1B0ciA9IHBhdGg6OnZhbHVlX3R5cGUgY29uc3Qq
OworCitzdHJ1Y3QgUGF0aFBhcnNlciB7CisgIGVudW0gUGFyc2VyU3RhdGUgOiB1bnNpZ25lZCBj
aGFyIHsKKyAgICAvLyBaZXJvIGlzIGEgc3BlY2lhbCBzZW50aW5lbCB2YWx1ZSB1c2VkIGJ5IGRl
ZmF1bHQgY29uc3RydWN0ZWQgaXRlcmF0b3JzLgorICAgIFBTX0JlZm9yZUJlZ2luID0gcGF0aDo6
aXRlcmF0b3I6Ol9CZWZvcmVCZWdpbiwKKyAgICBQU19JblJvb3ROYW1lID0gcGF0aDo6aXRlcmF0
b3I6Ol9JblJvb3ROYW1lLAorICAgIFBTX0luUm9vdERpciA9IHBhdGg6Oml0ZXJhdG9yOjpfSW5S
b290RGlyLAorICAgIFBTX0luRmlsZW5hbWVzID0gcGF0aDo6aXRlcmF0b3I6Ol9JbkZpbGVuYW1l
cywKKyAgICBQU19JblRyYWlsaW5nU2VwID0gcGF0aDo6aXRlcmF0b3I6Ol9JblRyYWlsaW5nU2Vw
LAorICAgIFBTX0F0RW5kID0gcGF0aDo6aXRlcmF0b3I6Ol9BdEVuZAorICB9OworCisgIGNvbnN0
IHN0cmluZ192aWV3X3QgUGF0aDsKKyAgc3RyaW5nX3ZpZXdfdCBSYXdFbnRyeTsKKyAgUGFyc2Vy
U3RhdGUgU3RhdGU7CisKK3ByaXZhdGU6CisgIFBhdGhQYXJzZXIoc3RyaW5nX3ZpZXdfdCBQLCBQ
YXJzZXJTdGF0ZSBTdGF0ZSkgbm9leGNlcHQgOiBQYXRoKFApLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUoU3RhdGUpIHt9
CisKK3B1YmxpYzoKKyAgUGF0aFBhcnNlcihzdHJpbmdfdmlld190IFAsIHN0cmluZ192aWV3X3Qg
RSwgdW5zaWduZWQgY2hhciBTKQorICAgICAgOiBQYXRoKFApLCBSYXdFbnRyeShFKSwgU3RhdGUo
c3RhdGljX2Nhc3Q8UGFyc2VyU3RhdGU+KFMpKSB7CisgICAgLy8gUyBjYW5ub3QgYmUgJzAnIG9y
IFBTX0JlZm9yZUJlZ2luLgorICB9CisKKyAgc3RhdGljIFBhdGhQYXJzZXIgQ3JlYXRlQmVnaW4o
c3RyaW5nX3ZpZXdfdCBQKSBub2V4Y2VwdCB7CisgICAgUGF0aFBhcnNlciBQUChQLCBQU19CZWZv
cmVCZWdpbik7CisgICAgUFAuaW5jcmVtZW50KCk7CisgICAgcmV0dXJuIFBQOworICB9CisKKyAg
c3RhdGljIFBhdGhQYXJzZXIgQ3JlYXRlRW5kKHN0cmluZ192aWV3X3QgUCkgbm9leGNlcHQgewor
ICAgIFBhdGhQYXJzZXIgUFAoUCwgUFNfQXRFbmQpOworICAgIHJldHVybiBQUDsKKyAgfQorCisg
IFBvc1B0ciBwZWVrKCkgY29uc3Qgbm9leGNlcHQgeworICAgIGF1dG8gVGtFbmQgPSBnZXROZXh0
VG9rZW5TdGFydFBvcygpOworICAgIGF1dG8gRW5kID0gZ2V0QWZ0ZXJCYWNrKCk7CisgICAgcmV0
dXJuIFRrRW5kID09IEVuZCA/IG51bGxwdHIgOiBUa0VuZDsKKyAgfQorCisgIHZvaWQgaW5jcmVt
ZW50KCkgbm9leGNlcHQgeworICAgIGNvbnN0IFBvc1B0ciBFbmQgPSBnZXRBZnRlckJhY2soKTsK
KyAgICBjb25zdCBQb3NQdHIgU3RhcnQgPSBnZXROZXh0VG9rZW5TdGFydFBvcygpOworICAgIGlm
IChTdGFydCA9PSBFbmQpCisgICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0F0RW5kKTsKKworICAg
IHN3aXRjaCAoU3RhdGUpIHsKKyAgICBjYXNlIFBTX0JlZm9yZUJlZ2luOiB7CisgICAgICBQb3NQ
dHIgVGtFbmQgPSBjb25zdW1lU2VwYXJhdG9yKFN0YXJ0LCBFbmQpOworICAgICAgaWYgKFRrRW5k
KQorICAgICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0luUm9vdERpciwgU3RhcnQsIFRrRW5kKTsK
KyAgICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIG1ha2VTdGF0ZShQU19JbkZpbGVuYW1lcywgU3Rh
cnQsIGNvbnN1bWVOYW1lKFN0YXJ0LCBFbmQpKTsKKyAgICB9CisgICAgY2FzZSBQU19JblJvb3RE
aXI6CisgICAgICByZXR1cm4gbWFrZVN0YXRlKFBTX0luRmlsZW5hbWVzLCBTdGFydCwgY29uc3Vt
ZU5hbWUoU3RhcnQsIEVuZCkpOworCisgICAgY2FzZSBQU19JbkZpbGVuYW1lczogeworICAgICAg
UG9zUHRyIFNlcEVuZCA9IGNvbnN1bWVTZXBhcmF0b3IoU3RhcnQsIEVuZCk7CisgICAgICBpZiAo
U2VwRW5kICE9IEVuZCkgeworICAgICAgICBQb3NQdHIgVGtFbmQgPSBjb25zdW1lTmFtZShTZXBF
bmQsIEVuZCk7CisgICAgICAgIGlmIChUa0VuZCkKKyAgICAgICAgICByZXR1cm4gbWFrZVN0YXRl
KFBTX0luRmlsZW5hbWVzLCBTZXBFbmQsIFRrRW5kKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBt
YWtlU3RhdGUoUFNfSW5UcmFpbGluZ1NlcCwgU3RhcnQsIFNlcEVuZCk7CisgICAgfQorCisgICAg
Y2FzZSBQU19JblRyYWlsaW5nU2VwOgorICAgICAgcmV0dXJuIG1ha2VTdGF0ZShQU19BdEVuZCk7
CisKKyAgICBjYXNlIFBTX0luUm9vdE5hbWU6CisgICAgY2FzZSBQU19BdEVuZDoKKyAgICAgIF9M
SUJDUFBfVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgIH0KKworICB2b2lkIGRlY3JlbWVudCgpIG5v
ZXhjZXB0IHsKKyAgICBjb25zdCBQb3NQdHIgUkVuZCA9IGdldEJlZm9yZUZyb250KCk7CisgICAg
Y29uc3QgUG9zUHRyIFJTdGFydCA9IGdldEN1cnJlbnRUb2tlblN0YXJ0UG9zKCkgLSAxOworICAg
IGlmIChSU3RhcnQgPT0gUkVuZCkgLy8gd2UncmUgZGVjcmVtZW50aW5nIHRoZSBiZWdpbgorICAg
ICAgcmV0dXJuIG1ha2VTdGF0ZShQU19CZWZvcmVCZWdpbik7CisKKyAgICBzd2l0Y2ggKFN0YXRl
KSB7CisgICAgY2FzZSBQU19BdEVuZDogeworICAgICAgLy8gVHJ5IHRvIGNvbnN1bWUgYSB0cmFp
bGluZyBzZXBhcmF0b3Igb3Igcm9vdCBkaXJlY3RvcnkgZmlyc3QuCisgICAgICBpZiAoUG9zUHRy
IFNlcEVuZCA9IGNvbnN1bWVTZXBhcmF0b3IoUlN0YXJ0LCBSRW5kKSkgeworICAgICAgICBpZiAo
U2VwRW5kID09IFJFbmQpCisgICAgICAgICAgcmV0dXJuIG1ha2VTdGF0ZShQU19JblJvb3REaXIs
IFBhdGguZGF0YSgpLCBSU3RhcnQgKyAxKTsKKyAgICAgICAgcmV0dXJuIG1ha2VTdGF0ZShQU19J
blRyYWlsaW5nU2VwLCBTZXBFbmQgKyAxLCBSU3RhcnQgKyAxKTsKKyAgICAgIH0gZWxzZSB7Cisg
ICAgICAgIFBvc1B0ciBUa1N0YXJ0ID0gY29uc3VtZU5hbWUoUlN0YXJ0LCBSRW5kKTsKKyAgICAg
ICAgcmV0dXJuIG1ha2VTdGF0ZShQU19JbkZpbGVuYW1lcywgVGtTdGFydCArIDEsIFJTdGFydCAr
IDEpOworICAgICAgfQorICAgIH0KKyAgICBjYXNlIFBTX0luVHJhaWxpbmdTZXA6CisgICAgICBy
ZXR1cm4gbWFrZVN0YXRlKFBTX0luRmlsZW5hbWVzLCBjb25zdW1lTmFtZShSU3RhcnQsIFJFbmQp
ICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgUlN0YXJ0ICsgMSk7CisgICAgY2FzZSBQU19J
bkZpbGVuYW1lczogeworICAgICAgUG9zUHRyIFNlcEVuZCA9IGNvbnN1bWVTZXBhcmF0b3IoUlN0
YXJ0LCBSRW5kKTsKKyAgICAgIGlmIChTZXBFbmQgPT0gUkVuZCkKKyAgICAgICAgcmV0dXJuIG1h
a2VTdGF0ZShQU19JblJvb3REaXIsIFBhdGguZGF0YSgpLCBSU3RhcnQgKyAxKTsKKyAgICAgIFBv
c1B0ciBUa0VuZCA9IGNvbnN1bWVOYW1lKFNlcEVuZCwgUkVuZCk7CisgICAgICByZXR1cm4gbWFr
ZVN0YXRlKFBTX0luRmlsZW5hbWVzLCBUa0VuZCArIDEsIFNlcEVuZCArIDEpOworICAgIH0KKyAg
ICBjYXNlIFBTX0luUm9vdERpcjoKKyAgICAgIC8vIHJldHVybiBtYWtlU3RhdGUoUFNfSW5Sb290
TmFtZSwgUGF0aC5kYXRhKCksIFJTdGFydCArIDEpOworICAgIGNhc2UgUFNfSW5Sb290TmFtZToK
KyAgICBjYXNlIFBTX0JlZm9yZUJlZ2luOgorICAgICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOwor
ICAgIH0KKyAgfQorCisgIC8vLyBcYnJpZWYgUmV0dXJuIGEgdmlldyB3aXRoIHRoZSAicHJlZmVy
cmVkIHJlcHJlc2VudGF0aW9uIiBvZiB0aGUgY3VycmVudAorICAvLy8gICBlbGVtZW50LiBGb3Ig
ZXhhbXBsZSB0cmFpbGluZyBzZXBhcmF0b3JzIGFyZSByZXByZXNlbnRlZCBhcyBhICcuJworICBz
dHJpbmdfdmlld190IG9wZXJhdG9yKigpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICBzd2l0Y2ggKFN0
YXRlKSB7CisgICAgY2FzZSBQU19CZWZvcmVCZWdpbjoKKyAgICBjYXNlIFBTX0F0RW5kOgorICAg
ICAgcmV0dXJuICIiOworICAgIGNhc2UgUFNfSW5Sb290RGlyOgorICAgICAgcmV0dXJuICIvIjsK
KyAgICBjYXNlIFBTX0luVHJhaWxpbmdTZXA6CisgICAgICByZXR1cm4gIiI7CisgICAgY2FzZSBQ
U19JblJvb3ROYW1lOgorICAgIGNhc2UgUFNfSW5GaWxlbmFtZXM6CisgICAgICByZXR1cm4gUmF3
RW50cnk7CisgICAgfQorICAgIF9MSUJDUFBfVU5SRUFDSEFCTEUoKTsKKyAgfQorCisgIGV4cGxp
Y2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIFN0YXRlICE9
IFBTX0JlZm9yZUJlZ2luICYmIFN0YXRlICE9IFBTX0F0RW5kOworICB9CisKKyAgUGF0aFBhcnNl
ciYgb3BlcmF0b3IrKygpIG5vZXhjZXB0IHsKKyAgICBpbmNyZW1lbnQoKTsKKyAgICByZXR1cm4g
KnRoaXM7CisgIH0KKworICBQYXRoUGFyc2VyJiBvcGVyYXRvci0tKCkgbm9leGNlcHQgeworICAg
IGRlY3JlbWVudCgpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIGJvb2wgaW5Sb290UGF0
aCgpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gU3RhdGUgPT0gUFNfSW5Sb290RGlyIHx8
IFN0YXRlID09IFBTX0luUm9vdE5hbWU7CisgIH0KKworcHJpdmF0ZToKKyAgdm9pZCBtYWtlU3Rh
dGUoUGFyc2VyU3RhdGUgTmV3U3RhdGUsIFBvc1B0ciBTdGFydCwgUG9zUHRyIEVuZCkgbm9leGNl
cHQgeworICAgIFN0YXRlID0gTmV3U3RhdGU7CisgICAgUmF3RW50cnkgPSBzdHJpbmdfdmlld190
KFN0YXJ0LCBFbmQgLSBTdGFydCk7CisgIH0KKyAgdm9pZCBtYWtlU3RhdGUoUGFyc2VyU3RhdGUg
TmV3U3RhdGUpIG5vZXhjZXB0IHsKKyAgICBTdGF0ZSA9IE5ld1N0YXRlOworICAgIFJhd0VudHJ5
ID0ge307CisgIH0KKworICBQb3NQdHIgZ2V0QWZ0ZXJCYWNrKCkgY29uc3Qgbm9leGNlcHQgeyBy
ZXR1cm4gUGF0aC5kYXRhKCkgKyBQYXRoLnNpemUoKTsgfQorCisgIFBvc1B0ciBnZXRCZWZvcmVG
cm9udCgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIFBhdGguZGF0YSgpIC0gMTsgfQorCisgIC8v
LyBcYnJpZWYgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRo
ZSBjdXJyZW50bHkKKyAgLy8vICAgbGV4ZWQgZWxlbWVudC4KKyAgUG9zUHRyIGdldE5leHRUb2tl
blN0YXJ0UG9zKCkgY29uc3Qgbm9leGNlcHQgeworICAgIHN3aXRjaCAoU3RhdGUpIHsKKyAgICBj
YXNlIFBTX0JlZm9yZUJlZ2luOgorICAgICAgcmV0dXJuIFBhdGguZGF0YSgpOworICAgIGNhc2Ug
UFNfSW5Sb290TmFtZToKKyAgICBjYXNlIFBTX0luUm9vdERpcjoKKyAgICBjYXNlIFBTX0luRmls
ZW5hbWVzOgorICAgICAgcmV0dXJuICZSYXdFbnRyeS5iYWNrKCkgKyAxOworICAgIGNhc2UgUFNf
SW5UcmFpbGluZ1NlcDoKKyAgICBjYXNlIFBTX0F0RW5kOgorICAgICAgcmV0dXJuIGdldEFmdGVy
QmFjaygpOworICAgIH0KKyAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7CisgIH0KKworICAvLy8g
XGJyaWVmIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgY3Vy
cmVudGx5IGxleGVkCisgIC8vLyAgIGVsZW1lbnQuCisgIFBvc1B0ciBnZXRDdXJyZW50VG9rZW5T
dGFydFBvcygpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICBzd2l0Y2ggKFN0YXRlKSB7CisgICAgY2Fz
ZSBQU19CZWZvcmVCZWdpbjoKKyAgICBjYXNlIFBTX0luUm9vdE5hbWU6CisgICAgICByZXR1cm4g
JlBhdGguZnJvbnQoKTsKKyAgICBjYXNlIFBTX0luUm9vdERpcjoKKyAgICBjYXNlIFBTX0luRmls
ZW5hbWVzOgorICAgIGNhc2UgUFNfSW5UcmFpbGluZ1NlcDoKKyAgICAgIHJldHVybiAmUmF3RW50
cnkuZnJvbnQoKTsKKyAgICBjYXNlIFBTX0F0RW5kOgorICAgICAgcmV0dXJuICZQYXRoLmJhY2so
KSArIDE7CisgICAgfQorICAgIF9MSUJDUFBfVU5SRUFDSEFCTEUoKTsKKyAgfQorCisgIFBvc1B0
ciBjb25zdW1lU2VwYXJhdG9yKFBvc1B0ciBQLCBQb3NQdHIgRW5kKSBjb25zdCBub2V4Y2VwdCB7
CisgICAgaWYgKFAgPT0gRW5kIHx8ICpQICE9ICcvJykKKyAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIGNvbnN0IGludCBJbmMgPSBQIDwgRW5kID8gMSA6IC0xOworICAgIFAgKz0gSW5jOworICAg
IHdoaWxlIChQICE9IEVuZCAmJiAqUCA9PSAnLycpCisgICAgICBQICs9IEluYzsKKyAgICByZXR1
cm4gUDsKKyAgfQorCisgIFBvc1B0ciBjb25zdW1lTmFtZShQb3NQdHIgUCwgUG9zUHRyIEVuZCkg
Y29uc3Qgbm9leGNlcHQgeworICAgIGlmIChQID09IEVuZCB8fCAqUCA9PSAnLycpCisgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICBjb25zdCBpbnQgSW5jID0gUCA8IEVuZCA/IDEgOiAtMTsKKyAg
ICBQICs9IEluYzsKKyAgICB3aGlsZSAoUCAhPSBFbmQgJiYgKlAgIT0gJy8nKQorICAgICAgUCAr
PSBJbmM7CisgICAgcmV0dXJuIFA7CisgIH0KK307CisKK3N0YXRpYyBzdHJpbmdfdmlld19wYWly
IHNlcGFyYXRlX2ZpbGVuYW1lKHN0cmluZ192aWV3X3QgY29uc3QmIHMpIHsKKyAgaWYgKHMgPT0g
Ii4iIHx8IHMgPT0gIi4uIiB8fCBzLmVtcHR5KCkpCisgICAgcmV0dXJuIHN0cmluZ192aWV3X3Bh
aXJ7cywgIiJ9OworICBhdXRvIHBvcyA9IHMuZmluZF9sYXN0X29mKCcuJyk7CisgIGlmIChwb3Mg
PT0gc3RyaW5nX3ZpZXdfdDo6bnBvcyB8fCBwb3MgPT0gMCkKKyAgICByZXR1cm4gc3RyaW5nX3Zp
ZXdfcGFpcntzLCBzdHJpbmdfdmlld190e319OworICByZXR1cm4gc3RyaW5nX3ZpZXdfcGFpcntz
LnN1YnN0cigwLCBwb3MpLCBzLnN1YnN0cihwb3MpfTsKK30KKworc3RhdGljIHN0cmluZ192aWV3
X3QgY3JlYXRlVmlldyhQb3NQdHIgUywgUG9zUHRyIEUpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIHtT
LCBzdGF0aWNfY2FzdDxzaXplX3Q+KEUgLSBTKSArIDF9OworfQorCit9IC8vIG5hbWVzcGFjZSBw
YXJzZXIKK30gLy8gbmFtZXNwYWNlCisKKy8vICAgICAgICAgICAgICAgICAgICAgICBQT1NJWCBI
RUxQRVJTCisKK25hbWVzcGFjZSBkZXRhaWwgeworbmFtZXNwYWNlIHsKKwordXNpbmcgdmFsdWVf
dHlwZSA9IHBhdGg6OnZhbHVlX3R5cGU7Cit1c2luZyBzdHJpbmdfdHlwZSA9IHBhdGg6OnN0cmlu
Z190eXBlOworCitzdHJ1Y3QgRmlsZURlc2NyaXB0b3IgeworICBjb25zdCBwYXRoJiBuYW1lOwor
ICBpbnQgZmQgPSAtMTsKKyAgU3RhdFQgbV9zdGF0OworICBmaWxlX3N0YXR1cyBtX3N0YXR1czsK
KworICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gQXJncz4KKyAgc3RhdGljIEZpbGVEZXNjcmlwdG9yIGNy
ZWF0ZShjb25zdCBwYXRoKiBwLCBlcnJvcl9jb2RlJiBlYywgQXJncy4uLiBhcmdzKSB7CisgICAg
ZWMuY2xlYXIoKTsKKyAgICBpbnQgZmQ7CisgICAgaWYgKChmZCA9IDo6b3BlbihwLT5jX3N0cigp
LCBhcmdzLi4uKSkgPT0gLTEpIHsKKyAgICAgIGVjID0gY2FwdHVyZV9lcnJubygpOworICAgICAg
cmV0dXJuIEZpbGVEZXNjcmlwdG9ye3B9OworICAgIH0KKyAgICByZXR1cm4gRmlsZURlc2NyaXB0
b3IocCwgZmQpOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzLi4uIEFyZ3M+CisgIHN0YXRpYyBG
aWxlRGVzY3JpcHRvciBjcmVhdGVfd2l0aF9zdGF0dXMoY29uc3QgcGF0aCogcCwgZXJyb3JfY29k
ZSYgZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJncy4u
LiBhcmdzKSB7CisgICAgRmlsZURlc2NyaXB0b3IgZmQgPSBjcmVhdGUocCwgZWMsIGFyZ3MuLi4p
OworICAgIGlmICghZWMpCisgICAgICBmZC5yZWZyZXNoX3N0YXR1cyhlYyk7CisKKyAgICByZXR1
cm4gZmQ7CisgIH0KKworICBmaWxlX3N0YXR1cyBnZXRfc3RhdHVzKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0dXM7IH0KKyAgU3RhdFQgY29uc3QmIGdldF9zdGF0KCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0OyB9CisKKyAgYm9vbCBzdGF0dXNfa25vd24oKSBjb25zdCB7IHJldHVybiBfVlNURF9GUzo6
c3RhdHVzX2tub3duKG1fc3RhdHVzKTsgfQorCisgIGZpbGVfc3RhdHVzIHJlZnJlc2hfc3RhdHVz
KGVycm9yX2NvZGUmIGVjKTsKKworICB2b2lkIGNsb3NlKCkgbm9leGNlcHQgeworICAgIGlmIChm
ZCAhPSAtMSkKKyAgICAgIDo6Y2xvc2UoZmQpOworICAgIGZkID0gLTE7CisgIH0KKworICBGaWxl
RGVzY3JpcHRvcihGaWxlRGVzY3JpcHRvciYmIG90aGVyKQorICAgICAgOiBuYW1lKG90aGVyLm5h
bWUpLCBmZChvdGhlci5mZCksIG1fc3RhdChvdGhlci5tX3N0YXQpLAorICAgICAgICBtX3N0YXR1
cyhvdGhlci5tX3N0YXR1cykgeworICAgIG90aGVyLmZkID0gLTE7CisgICAgb3RoZXIubV9zdGF0
dXMgPSBmaWxlX3N0YXR1c3t9OworICB9CisKKyAgfkZpbGVEZXNjcmlwdG9yKCkgeyBjbG9zZSgp
OyB9CisKKyAgRmlsZURlc2NyaXB0b3IoRmlsZURlc2NyaXB0b3IgY29uc3QmKSA9IGRlbGV0ZTsK
KyAgRmlsZURlc2NyaXB0b3ImIG9wZXJhdG9yPShGaWxlRGVzY3JpcHRvciBjb25zdCYpID0gZGVs
ZXRlOworCitwcml2YXRlOgorICBleHBsaWNpdCBGaWxlRGVzY3JpcHRvcihjb25zdCBwYXRoKiBw
LCBpbnQgZmQgPSAtMSkgOiBuYW1lKCpwKSwgZmQoZmQpIHt9Cit9OworCitwZXJtcyBwb3NpeF9n
ZXRfcGVybXMoY29uc3QgU3RhdFQmIHN0KSBub2V4Y2VwdCB7CisgIHJldHVybiBzdGF0aWNfY2Fz
dDxwZXJtcz4oc3Quc3RfbW9kZSkgJiBwZXJtczo6bWFzazsKK30KKworOjptb2RlX3QgcG9zaXhf
Y29udmVydF9wZXJtcyhwZXJtcyBwcm1zKSB7CisgIHJldHVybiBzdGF0aWNfY2FzdDwgOjptb2Rl
X3Q+KHBybXMgJiBwZXJtczo6bWFzayk7Cit9CisKK2ZpbGVfc3RhdHVzIGNyZWF0ZV9maWxlX3N0
YXR1cyhlcnJvcl9jb2RlJiBtX2VjLCBwYXRoIGNvbnN0JiBwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFN0YXRUJiBwYXRoX3N0YXQsIGVycm9yX2NvZGUqIGVjKSB7Cisg
IGlmIChlYykKKyAgICAqZWMgPSBtX2VjOworICBpZiAobV9lYyAmJiAobV9lYy52YWx1ZSgpID09
IEVOT0VOVCB8fCBtX2VjLnZhbHVlKCkgPT0gRU5PVERJUikpIHsKKyAgICByZXR1cm4gZmlsZV9z
dGF0dXMoZmlsZV90eXBlOjpub3RfZm91bmQpOworICB9IGVsc2UgaWYgKG1fZWMpIHsKKyAgICBF
cnJvckhhbmRsZXI8dm9pZD4gZXJyKCJwb3NpeF9zdGF0IiwgZWMsICZwKTsKKyAgICBlcnIucmVw
b3J0KG1fZWMsICJmYWlsZWQgdG8gZGV0ZXJtaW5lIGF0dHJpYnV0ZXMgZm9yIHRoZSBzcGVjaWZp
ZWQgcGF0aCIpOworICAgIHJldHVybiBmaWxlX3N0YXR1cyhmaWxlX3R5cGU6Om5vbmUpOworICB9
CisgIC8vIGVsc2UKKworICBmaWxlX3N0YXR1cyBmc190bXA7CisgIGF1dG8gY29uc3QgbW9kZSA9
IHBhdGhfc3RhdC5zdF9tb2RlOworICBpZiAoU19JU0xOSyhtb2RlKSkKKyAgICBmc190bXAudHlw
ZShmaWxlX3R5cGU6OnN5bWxpbmspOworICBlbHNlIGlmIChTX0lTUkVHKG1vZGUpKQorICAgIGZz
X3RtcC50eXBlKGZpbGVfdHlwZTo6cmVndWxhcik7CisgIGVsc2UgaWYgKFNfSVNESVIobW9kZSkp
CisgICAgZnNfdG1wLnR5cGUoZmlsZV90eXBlOjpkaXJlY3RvcnkpOworICBlbHNlIGlmIChTX0lT
QkxLKG1vZGUpKQorICAgIGZzX3RtcC50eXBlKGZpbGVfdHlwZTo6YmxvY2spOworICBlbHNlIGlm
IChTX0lTQ0hSKG1vZGUpKQorICAgIGZzX3RtcC50eXBlKGZpbGVfdHlwZTo6Y2hhcmFjdGVyKTsK
KyAgZWxzZSBpZiAoU19JU0ZJRk8obW9kZSkpCisgICAgZnNfdG1wLnR5cGUoZmlsZV90eXBlOjpm
aWZvKTsKKyAgZWxzZSBpZiAoU19JU1NPQ0sobW9kZSkpCisgICAgZnNfdG1wLnR5cGUoZmlsZV90
eXBlOjpzb2NrZXQpOworICBlbHNlCisgICAgZnNfdG1wLnR5cGUoZmlsZV90eXBlOjp1bmtub3du
KTsKKworICBmc190bXAucGVybWlzc2lvbnMoZGV0YWlsOjpwb3NpeF9nZXRfcGVybXMocGF0aF9z
dGF0KSk7CisgIHJldHVybiBmc190bXA7Cit9CisKK2ZpbGVfc3RhdHVzIHBvc2l4X3N0YXQocGF0
aCBjb25zdCYgcCwgU3RhdFQmIHBhdGhfc3RhdCwgZXJyb3JfY29kZSogZWMpIHsKKyAgZXJyb3Jf
Y29kZSBtX2VjOworICBpZiAoOjpzdGF0KHAuY19zdHIoKSwgJnBhdGhfc3RhdCkgPT0gLTEpCisg
ICAgbV9lYyA9IGRldGFpbDo6Y2FwdHVyZV9lcnJubygpOworICByZXR1cm4gY3JlYXRlX2ZpbGVf
c3RhdHVzKG1fZWMsIHAsIHBhdGhfc3RhdCwgZWMpOworfQorCitmaWxlX3N0YXR1cyBwb3NpeF9z
dGF0KHBhdGggY29uc3QmIHAsIGVycm9yX2NvZGUqIGVjKSB7CisgIFN0YXRUIHBhdGhfc3RhdDsK
KyAgcmV0dXJuIHBvc2l4X3N0YXQocCwgcGF0aF9zdGF0LCBlYyk7Cit9CisKK2ZpbGVfc3RhdHVz
IHBvc2l4X2xzdGF0KHBhdGggY29uc3QmIHAsIFN0YXRUJiBwYXRoX3N0YXQsIGVycm9yX2NvZGUq
IGVjKSB7CisgIGVycm9yX2NvZGUgbV9lYzsKKyAgaWYgKDo6bHN0YXQocC5jX3N0cigpLCAmcGF0
aF9zdGF0KSA9PSAtMSkKKyAgICBtX2VjID0gZGV0YWlsOjpjYXB0dXJlX2Vycm5vKCk7CisgIHJl
dHVybiBjcmVhdGVfZmlsZV9zdGF0dXMobV9lYywgcCwgcGF0aF9zdGF0LCBlYyk7Cit9CisKK2Zp
bGVfc3RhdHVzIHBvc2l4X2xzdGF0KHBhdGggY29uc3QmIHAsIGVycm9yX2NvZGUqIGVjKSB7Cisg
IFN0YXRUIHBhdGhfc3RhdDsKKyAgcmV0dXJuIHBvc2l4X2xzdGF0KHAsIHBhdGhfc3RhdCwgZWMp
OworfQorCitib29sIHBvc2l4X2Z0cnVuY2F0ZShjb25zdCBGaWxlRGVzY3JpcHRvciYgZmQsIHNp
emVfdCB0b19zaXplLCBlcnJvcl9jb2RlJiBlYykgeworICBpZiAoOjpmdHJ1bmNhdGUoZmQuZmQs
IHRvX3NpemUpID09IC0xKSB7CisgICAgZWMgPSBjYXB0dXJlX2Vycm5vKCk7CisgICAgcmV0dXJu
IHRydWU7CisgIH0KKyAgZWMuY2xlYXIoKTsKKyAgcmV0dXJuIGZhbHNlOworfQorCitib29sIHBv
c2l4X2ZjaG1vZChjb25zdCBGaWxlRGVzY3JpcHRvciYgZmQsIGNvbnN0IFN0YXRUJiBzdCwgZXJy
b3JfY29kZSYgZWMpIHsKKyAgaWYgKDo6ZmNobW9kKGZkLmZkLCBzdC5zdF9tb2RlKSA9PSAtMSkg
eworICAgIGVjID0gY2FwdHVyZV9lcnJubygpOworICAgIHJldHVybiB0cnVlOworICB9CisgIGVj
LmNsZWFyKCk7CisgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBzdGF0X2VxdWl2YWxlbnQoY29u
c3QgU3RhdFQmIHN0MSwgY29uc3QgU3RhdFQmIHN0MikgeworICByZXR1cm4gKHN0MS5zdF9kZXYg
PT0gc3QyLnN0X2RldiAmJiBzdDEuc3RfaW5vID09IHN0Mi5zdF9pbm8pOworfQorCitmaWxlX3N0
YXR1cyBGaWxlRGVzY3JpcHRvcjo6cmVmcmVzaF9zdGF0dXMoZXJyb3JfY29kZSYgZWMpIHsKKyAg
Ly8gRkQgbXVzdCBiZSBvcGVuIGFuZCBnb29kLgorICBtX3N0YXR1cyA9IGZpbGVfc3RhdHVze307
CisgIG1fc3RhdCA9IHt9OworICBlcnJvcl9jb2RlIG1fZWM7CisgIGlmICg6OmZzdGF0KGZkLCAm
bV9zdGF0KSA9PSAtMSkKKyAgICBtX2VjID0gY2FwdHVyZV9lcnJubygpOworICBtX3N0YXR1cyA9
IGNyZWF0ZV9maWxlX3N0YXR1cyhtX2VjLCBuYW1lLCBtX3N0YXQsICZlYyk7CisgIHJldHVybiBt
X3N0YXR1czsKK30KK30gLy8gbmFtZXNwYWNlCit9IC8vIGVuZCBuYW1lc3BhY2UgZGV0YWlsCisK
K3VzaW5nIGRldGFpbDo6Y2FwdHVyZV9lcnJubzsKK3VzaW5nIGRldGFpbDo6RXJyb3JIYW5kbGVy
OwordXNpbmcgZGV0YWlsOjpTdGF0VDsKK3VzaW5nIGRldGFpbDo6VGltZVNwZWM7Cit1c2luZyBw
YXJzZXI6OmNyZWF0ZVZpZXc7Cit1c2luZyBwYXJzZXI6OlBhdGhQYXJzZXI7Cit1c2luZyBwYXJz
ZXI6OnN0cmluZ192aWV3X3Q7CisKK2NvbnN0IGJvb2wgX0ZpbGVzeXN0ZW1DbG9jazo6aXNfc3Rl
YWR5OworCitfRmlsZXN5c3RlbUNsb2NrOjp0aW1lX3BvaW50IF9GaWxlc3lzdGVtQ2xvY2s6Om5v
dygpIG5vZXhjZXB0IHsKKyAgdHlwZWRlZiBjaHJvbm86OmR1cmF0aW9uPHJlcD4gX19zZWNzOwor
I2lmIGRlZmluZWQoX0xJQkNQUF9VU0VfQ0xPQ0tfR0VUVElNRSkgJiYgZGVmaW5lZChDTE9DS19S
RUFMVElNRSkKKyAgdHlwZWRlZiBjaHJvbm86OmR1cmF0aW9uPHJlcCwgbmFubz4gX19uc2VjczsK
KyAgc3RydWN0IHRpbWVzcGVjIHRwOworICBpZiAoMCAhPSBjbG9ja19nZXR0aW1lKENMT0NLX1JF
QUxUSU1FLCAmdHApKQorICAgIF9fdGhyb3dfc3lzdGVtX2Vycm9yKGVycm5vLCAiY2xvY2tfZ2V0
dGltZShDTE9DS19SRUFMVElNRSkgZmFpbGVkIik7CisgIHJldHVybiB0aW1lX3BvaW50KF9fc2Vj
cyh0cC50dl9zZWMpICsKKyAgICAgICAgICAgICAgICAgICAgY2hyb25vOjpkdXJhdGlvbl9jYXN0
PGR1cmF0aW9uPihfX25zZWNzKHRwLnR2X25zZWMpKSk7CisjZWxzZQorICB0eXBlZGVmIGNocm9u
bzo6ZHVyYXRpb248cmVwLCBtaWNybz4gX19taWNyb3NlY3M7CisgIHRpbWV2YWwgdHY7CisgIGdl
dHRpbWVvZmRheSgmdHYsIDApOworICByZXR1cm4gdGltZV9wb2ludChfX3NlY3ModHYudHZfc2Vj
KSArIF9fbWljcm9zZWNzKHR2LnR2X3VzZWMpKTsKKyNlbmRpZiAvLyBfTElCQ1BQX1VTRV9DTE9D
S19HRVRUSU1FICYmIENMT0NLX1JFQUxUSU1FCit9CisKK2ZpbGVzeXN0ZW1fZXJyb3I6On5maWxl
c3lzdGVtX2Vycm9yKCkge30KKwordm9pZCBmaWxlc3lzdGVtX2Vycm9yOjpfX2NyZWF0ZV93aGF0
KGludCBfX251bV9wYXRocykgeworICBjb25zdCBjaGFyKiBkZXJpdmVkX3doYXQgPSBzeXN0ZW1f
ZXJyb3I6OndoYXQoKTsKKyAgX19zdG9yYWdlXy0+X193aGF0XyA9IFsmXSgpIC0+IHN0cmluZyB7
CisgICAgY29uc3QgY2hhciogcDEgPSBwYXRoMSgpLm5hdGl2ZSgpLmVtcHR5KCkgPyAiXCJcIiIg
OiBwYXRoMSgpLmNfc3RyKCk7CisgICAgY29uc3QgY2hhciogcDIgPSBwYXRoMigpLm5hdGl2ZSgp
LmVtcHR5KCkgPyAiXCJcIiIgOiBwYXRoMigpLmNfc3RyKCk7CisgICAgc3dpdGNoIChfX251bV9w
YXRocykgeworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gZGV0YWlsOjpmb3JtYXRfc3RyaW5n
KCJmaWxlc3lzdGVtIGVycm9yOiAlcyIsIGRlcml2ZWRfd2hhdCk7CisgICAgY2FzZSAxOgorICAg
ICAgcmV0dXJuIGRldGFpbDo6Zm9ybWF0X3N0cmluZygiZmlsZXN5c3RlbSBlcnJvcjogJXMgWyVz
XSIsIGRlcml2ZWRfd2hhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcDEp
OworICAgIGNhc2UgMjoKKyAgICAgIHJldHVybiBkZXRhaWw6OmZvcm1hdF9zdHJpbmcoImZpbGVz
eXN0ZW0gZXJyb3I6ICVzIFslc10gWyVzXSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlcml2ZWRfd2hhdCwgcDEsIHAyKTsKKyAgICB9CisgIH0oKTsKK30KKworc3RhdGlj
IHBhdGggX19kb19hYnNvbHV0ZShjb25zdCBwYXRoJiBwLCBwYXRoKiBjd2QsIGVycm9yX2NvZGUq
IGVjKSB7CisgIGlmIChlYykKKyAgICBlYy0+Y2xlYXIoKTsKKyAgaWYgKHAuaXNfYWJzb2x1dGUo
KSkKKyAgICByZXR1cm4gcDsKKyAgKmN3ZCA9IF9fY3VycmVudF9wYXRoKGVjKTsKKyAgaWYgKGVj
ICYmICplYykKKyAgICByZXR1cm4ge307CisgIHJldHVybiAoKmN3ZCkgLyBwOworfQorCitwYXRo
IF9fYWJzb2x1dGUoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMpIHsKKyAgcGF0aCBjd2Q7
CisgIHJldHVybiBfX2RvX2Fic29sdXRlKHAsICZjd2QsIGVjKTsKK30KKworcGF0aCBfX2Nhbm9u
aWNhbChwYXRoIGNvbnN0JiBvcmlnX3AsIGVycm9yX2NvZGUqIGVjKSB7CisgIHBhdGggY3dkOwor
ICBFcnJvckhhbmRsZXI8cGF0aD4gZXJyKCJjYW5vbmljYWwiLCBlYywgJm9yaWdfcCwgJmN3ZCk7
CisKKyAgcGF0aCBwID0gX19kb19hYnNvbHV0ZShvcmlnX3AsICZjd2QsIGVjKTsKKyAgY2hhciBi
dWZmW1BBVEhfTUFYICsgMV07CisgIGNoYXIqIHJldDsKKyAgaWYgKChyZXQgPSA6OnJlYWxwYXRo
KHAuY19zdHIoKSwgYnVmZikpID09IG51bGxwdHIpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoY2Fw
dHVyZV9lcnJubygpKTsKKyAgcmV0dXJuIHtyZXR9OworfQorCit2b2lkIF9fY29weShjb25zdCBw
YXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0bywgY29weV9vcHRpb25zIG9wdGlvbnMsCisgICAgICAg
ICAgICBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8dm9pZD4gZXJyKCJjb3B5Iiwg
ZWMsICZmcm9tLCAmdG8pOworCisgIGNvbnN0IGJvb2wgc3ltX3N0YXR1cyA9IGJvb2woCisgICAg
ICBvcHRpb25zICYgKGNvcHlfb3B0aW9uczo6Y3JlYXRlX3N5bWxpbmtzIHwgY29weV9vcHRpb25z
Ojpza2lwX3N5bWxpbmtzKSk7CisKKyAgY29uc3QgYm9vbCBzeW1fc3RhdHVzMiA9IGJvb2wob3B0
aW9ucyAmIGNvcHlfb3B0aW9uczo6Y29weV9zeW1saW5rcyk7CisKKyAgZXJyb3JfY29kZSBtX2Vj
MTsKKyAgU3RhdFQgZl9zdCA9IHt9OworICBjb25zdCBmaWxlX3N0YXR1cyBmID0gc3ltX3N0YXR1
cyB8fCBzeW1fc3RhdHVzMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZGV0YWlsOjpw
b3NpeF9sc3RhdChmcm9tLCBmX3N0LCAmbV9lYzEpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOiBkZXRhaWw6OnBvc2l4X3N0YXQoZnJvbSwgZl9zdCwgJm1fZWMxKTsKKyAgaWYgKG1fZWMx
KQorICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMxKTsKKworICBTdGF0VCB0X3N0ID0ge307Cisg
IGNvbnN0IGZpbGVfc3RhdHVzIHQgPSBzeW1fc3RhdHVzID8gZGV0YWlsOjpwb3NpeF9sc3RhdCh0
bywgdF9zdCwgJm1fZWMxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGRl
dGFpbDo6cG9zaXhfc3RhdCh0bywgdF9zdCwgJm1fZWMxKTsKKworICBpZiAobm90IHN0YXR1c19r
bm93bih0KSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjMSk7CisKKyAgaWYgKCFleGlzdHMo
ZikgfHwgaXNfb3RoZXIoZikgfHwgaXNfb3RoZXIodCkgfHwKKyAgICAgIChpc19kaXJlY3Rvcnko
ZikgJiYgaXNfcmVndWxhcl9maWxlKHQpKSB8fAorICAgICAgZGV0YWlsOjpzdGF0X2VxdWl2YWxl
bnQoZl9zdCwgdF9zdCkpIHsKKyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpmdW5jdGlvbl9u
b3Rfc3VwcG9ydGVkKTsKKyAgfQorCisgIGlmIChlYykKKyAgICBlYy0+Y2xlYXIoKTsKKworICBp
ZiAoaXNfc3ltbGluayhmKSkgeworICAgIGlmIChib29sKGNvcHlfb3B0aW9uczo6c2tpcF9zeW1s
aW5rcyAmIG9wdGlvbnMpKSB7CisgICAgICAvLyBkbyBub3RoaW5nCisgICAgfSBlbHNlIGlmIChu
b3QgZXhpc3RzKHQpKSB7CisgICAgICBfX2NvcHlfc3ltbGluayhmcm9tLCB0bywgZWMpOworICAg
IH0gZWxzZSB7CisgICAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpmaWxlX2V4aXN0cyk7Cisg
ICAgfQorICAgIHJldHVybjsKKyAgfSBlbHNlIGlmIChpc19yZWd1bGFyX2ZpbGUoZikpIHsKKyAg
ICBpZiAoYm9vbChjb3B5X29wdGlvbnM6OmRpcmVjdG9yaWVzX29ubHkgJiBvcHRpb25zKSkgewor
ICAgICAgLy8gZG8gbm90aGluZworICAgIH0gZWxzZSBpZiAoYm9vbChjb3B5X29wdGlvbnM6OmNy
ZWF0ZV9zeW1saW5rcyAmIG9wdGlvbnMpKSB7CisgICAgICBfX2NyZWF0ZV9zeW1saW5rKGZyb20s
IHRvLCBlYyk7CisgICAgfSBlbHNlIGlmIChib29sKGNvcHlfb3B0aW9uczo6Y3JlYXRlX2hhcmRf
bGlua3MgJiBvcHRpb25zKSkgeworICAgICAgX19jcmVhdGVfaGFyZF9saW5rKGZyb20sIHRvLCBl
Yyk7CisgICAgfSBlbHNlIGlmIChpc19kaXJlY3RvcnkodCkpIHsKKyAgICAgIF9fY29weV9maWxl
KGZyb20sIHRvIC8gZnJvbS5maWxlbmFtZSgpLCBvcHRpb25zLCBlYyk7CisgICAgfSBlbHNlIHsK
KyAgICAgIF9fY29weV9maWxlKGZyb20sIHRvLCBvcHRpb25zLCBlYyk7CisgICAgfQorICAgIHJl
dHVybjsKKyAgfSBlbHNlIGlmIChpc19kaXJlY3RvcnkoZikgJiYgYm9vbChjb3B5X29wdGlvbnM6
OmNyZWF0ZV9zeW1saW5rcyAmIG9wdGlvbnMpKSB7CisgICAgcmV0dXJuIGVyci5yZXBvcnQoZXJy
Yzo6aXNfYV9kaXJlY3RvcnkpOworICB9IGVsc2UgaWYgKGlzX2RpcmVjdG9yeShmKSAmJiAoYm9v
bChjb3B5X29wdGlvbnM6OnJlY3Vyc2l2ZSAmIG9wdGlvbnMpIHx8CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb3B5X29wdGlvbnM6Om5vbmUgPT0gb3B0aW9ucykpIHsKKworICAg
IGlmICghZXhpc3RzKHQpKSB7CisgICAgICAvLyBjcmVhdGUgZGlyZWN0b3J5IHRvIHdpdGggYXR0
cmlidXRlcyBmcm9tICdmcm9tJy4KKyAgICAgIF9fY3JlYXRlX2RpcmVjdG9yeSh0bywgZnJvbSwg
ZWMpOworICAgICAgaWYgKGVjICYmICplYykgeworICAgICAgICByZXR1cm47CisgICAgICB9Cisg
ICAgfQorICAgIGRpcmVjdG9yeV9pdGVyYXRvciBpdCA9CisgICAgICAgIGVjID8gZGlyZWN0b3J5
X2l0ZXJhdG9yKGZyb20sICplYykgOiBkaXJlY3RvcnlfaXRlcmF0b3IoZnJvbSk7CisgICAgaWYg
KGVjICYmICplYykgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlcnJvcl9jb2RlIG1fZWMy
OworICAgIGZvciAoOyBpdCAhPSBkaXJlY3RvcnlfaXRlcmF0b3IoKTsgaXQuaW5jcmVtZW50KG1f
ZWMyKSkgeworICAgICAgaWYgKG1fZWMyKSB7CisgICAgICAgIHJldHVybiBlcnIucmVwb3J0KG1f
ZWMyKTsKKyAgICAgIH0KKyAgICAgIF9fY29weShpdC0+cGF0aCgpLCB0byAvIGl0LT5wYXRoKCku
ZmlsZW5hbWUoKSwKKyAgICAgICAgICAgICBvcHRpb25zIHwgY29weV9vcHRpb25zOjpfX2luX3Jl
Y3Vyc2l2ZV9jb3B5LCBlYyk7CisgICAgICBpZiAoZWMgJiYgKmVjKSB7CisgICAgICAgIHJldHVy
bjsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworbmFtZXNwYWNlIGRldGFpbCB7CituYW1lc3Bh
Y2UgeworCisjaWZkZWYgX0xJQkNQUF9VU0VfU0VOREZJTEUKK2Jvb2wgY29weV9maWxlX2ltcGxf
c2VuZGZpbGUoRmlsZURlc2NyaXB0b3ImIHJlYWRfZmQsIEZpbGVEZXNjcmlwdG9yJiB3cml0ZV9m
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgZWMpIHsKKworICBz
aXplX3QgY291bnQgPSByZWFkX2ZkLmdldF9zdGF0KCkuc3Rfc2l6ZTsKKyAgZG8geworICAgIHNz
aXplX3QgcmVzOworICAgIGlmICgocmVzID0gOjpzZW5kZmlsZSh3cml0ZV9mZC5mZCwgcmVhZF9m
ZC5mZCwgbnVsbHB0ciwgY291bnQpKSA9PSAtMSkgeworICAgICAgZWMgPSBjYXB0dXJlX2Vycm5v
KCk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGNvdW50IC09IHJlczsKKyAgfSB3
aGlsZSAoY291bnQgPiAwKTsKKworICBlYy5jbGVhcigpOworCisgIHJldHVybiB0cnVlOworfQor
I2VsaWYgZGVmaW5lZChfTElCQ1BQX1VTRV9DT1BZRklMRSkKK2Jvb2wgY29weV9maWxlX2ltcGxf
Y29weWZpbGUoRmlsZURlc2NyaXB0b3ImIHJlYWRfZmQsIEZpbGVEZXNjcmlwdG9yJiB3cml0ZV9m
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgZWMpIHsKKyAgc3Ry
dWN0IENvcHlGaWxlU3RhdGUgeworICAgIGNvcHlmaWxlX3N0YXRlX3Qgc3RhdGU7CisgICAgQ29w
eUZpbGVTdGF0ZSgpIHsgc3RhdGUgPSBjb3B5ZmlsZV9zdGF0ZV9hbGxvYygpOyB9CisgICAgfkNv
cHlGaWxlU3RhdGUoKSB7IGNvcHlmaWxlX3N0YXRlX2ZyZWUoc3RhdGUpOyB9CisKKyAgcHJpdmF0
ZToKKyAgICBDb3B5RmlsZVN0YXRlKENvcHlGaWxlU3RhdGUgY29uc3QmKSA9IGRlbGV0ZTsKKyAg
ICBDb3B5RmlsZVN0YXRlJiBvcGVyYXRvcj0oQ29weUZpbGVTdGF0ZSBjb25zdCYpID0gZGVsZXRl
OworICB9OworCisgIENvcHlGaWxlU3RhdGUgY2ZzOworICBpZiAoZmNvcHlmaWxlKHJlYWRfZmQu
ZmQsIHdyaXRlX2ZkLmZkLCBjZnMuc3RhdGUsIENPUFlGSUxFX0RBVEEpIDwgMCkgeworICAgIGVj
ID0gY2FwdHVyZV9lcnJubygpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIGVjLmNsZWFy
KCk7CisgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKKy8vIFRoaXMgZnVuY3Rpb24gaXMgZ3Vh
cmRlZCBieSBpZmRlZidzIGluIEp1bmlwZXIgZHVlIHRvIHRoZSBjdXJyZW50CisvLyBjbGFuZyBu
b3Qgc3VwcG9ydGluZyBhbiBfX29wZW4gZnVuY3Rpb24gb24gaWZzdHJlYW0gYW5kIG9mc3RyZWFt
LgorI2lmICFkZWZpbmVkKF9MSUJDUFBfVVNFX1NFTkRGSUxFKSAmJiAhZGVmaW5lZChfTElCQ1BQ
X1VTRV9DT1BZRklMRSkKKy8vIE5vdGU6IFRoaXMgZnVuY3Rpb24gaXNuJ3QgZ3VhcmRlZCBieSBp
ZmRlZidzIGV2ZW4gdGhvdWdoIGl0IG1heSBiZSB1bnVzZWQKKy8vIGluIG9yZGVyIHRvIGFzc3Vy
ZSBpdCBzdGlsbCBjb21waWxlcy4KK19fYXR0cmlidXRlX18oKHVudXNlZCkpIGJvb2wgY29weV9m
aWxlX2ltcGxfZGVmYXVsdChGaWxlRGVzY3JpcHRvciYgcmVhZF9mZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlRGVzY3JpcHRvciYgd3Jp
dGVfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXJyb3JfY29kZSYgZWMpIHsKKyAgaWZzdHJlYW0gaW47CisgIGluLl9fb3BlbihyZWFkX2Zk
LmZkLCBpb3M6OmJpbmFyeSk7CisgIGlmICghaW4uaXNfb3BlbigpKSB7CisgICAgLy8gVGhpcyBh
c3N1bWVzIHRoYXQgX19vcGVuIGRpZG4ndCByZXNldCB0aGUgZXJyb3IgY29kZS4KKyAgICBlYyA9
IGNhcHR1cmVfZXJybm8oKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgb2ZzdHJlYW0gb3V0
OworICBvdXQuX19vcGVuKHdyaXRlX2ZkLmZkLCBpb3M6OmJpbmFyeSk7CisgIGlmICghb3V0Lmlz
X29wZW4oKSkgeworICAgIGVjID0gY2FwdHVyZV9lcnJubygpOworICAgIHJldHVybiBmYWxzZTsK
KyAgfQorCisgIGlmIChpbi5nb29kKCkgJiYgb3V0Lmdvb2QoKSkgeworICAgIHVzaW5nIEluSXQg
PSBpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+OworICAgIHVzaW5nIE91dEl0ID0gb3N0cmVhbWJ1
Zl9pdGVyYXRvcjxjaGFyPjsKKyAgICBJbkl0IGJpbihpbik7CisgICAgSW5JdCBlaW47CisgICAg
T3V0SXQgYm91dChvdXQpOworICAgIGNvcHkoYmluLCBlaW4sIGJvdXQpOworICB9CisgIGlmIChv
dXQuZmFpbCgpIHx8IGluLmZhaWwoKSkgeworICAgIGVjID0gbWFrZV9lcnJvcl9jb2RlKGVycmM6
OmlvX2Vycm9yKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBlYy5jbGVhcigpOworICBy
ZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCitib29sIGNvcHlfZmlsZV9pbXBsKEZpbGVEZXNjcmlw
dG9yJiBmcm9tLCBGaWxlRGVzY3JpcHRvciYgdG8sIGVycm9yX2NvZGUmIGVjKSB7CisjaWYgZGVm
aW5lZChfTElCQ1BQX1VTRV9TRU5ERklMRSkKKyAgcmV0dXJuIGNvcHlfZmlsZV9pbXBsX3NlbmRm
aWxlKGZyb20sIHRvLCBlYyk7CisjZWxpZiBkZWZpbmVkKF9MSUJDUFBfVVNFX0NPUFlGSUxFKQor
ICByZXR1cm4gY29weV9maWxlX2ltcGxfY29weWZpbGUoZnJvbSwgdG8sIGVjKTsKKyNlbHNlCisg
IHJldHVybiBjb3B5X2ZpbGVfaW1wbF9kZWZhdWx0KGZyb20sIHRvLCBlYyk7CisjZW5kaWYKK30K
KworfSAvLyBuYW1lc3BhY2UKK30gLy8gbmFtZXNwYWNlIGRldGFpbAorCitib29sIF9fY29weV9m
aWxlKGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvLCBjb3B5X29wdGlvbnMgb3B0aW9u
cywKKyAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSogZWMpIHsKKyAgdXNpbmcgZGV0YWlsOjpG
aWxlRGVzY3JpcHRvcjsKKyAgRXJyb3JIYW5kbGVyPGJvb2w+IGVycigiY29weV9maWxlIiwgZWMs
ICZ0bywgJmZyb20pOworCisgIGVycm9yX2NvZGUgbV9lYzsKKyAgRmlsZURlc2NyaXB0b3IgZnJv
bV9mZCA9CisgICAgICBGaWxlRGVzY3JpcHRvcjo6Y3JlYXRlX3dpdGhfc3RhdHVzKCZmcm9tLCBt
X2VjLCBPX1JET05MWSB8IE9fTk9OQkxPQ0spOworICBpZiAobV9lYykKKyAgICByZXR1cm4gZXJy
LnJlcG9ydChtX2VjKTsKKworICBhdXRvIGZyb21fc3QgPSBmcm9tX2ZkLmdldF9zdGF0dXMoKTsK
KyAgU3RhdFQgY29uc3QmIGZyb21fc3RhdCA9IGZyb21fZmQuZ2V0X3N0YXQoKTsKKyAgaWYgKCFp
c19yZWd1bGFyX2ZpbGUoZnJvbV9zdCkpIHsKKyAgICBpZiAobm90IG1fZWMpCisgICAgICBtX2Vj
ID0gbWFrZV9lcnJvcl9jb2RlKGVycmM6Om5vdF9zdXBwb3J0ZWQpOworICAgIHJldHVybiBlcnIu
cmVwb3J0KG1fZWMpOworICB9CisKKyAgY29uc3QgYm9vbCBza2lwX2V4aXN0aW5nID0gYm9vbChj
b3B5X29wdGlvbnM6OnNraXBfZXhpc3RpbmcgJiBvcHRpb25zKTsKKyAgY29uc3QgYm9vbCB1cGRh
dGVfZXhpc3RpbmcgPSBib29sKGNvcHlfb3B0aW9uczo6dXBkYXRlX2V4aXN0aW5nICYgb3B0aW9u
cyk7CisgIGNvbnN0IGJvb2wgb3ZlcndyaXRlX2V4aXN0aW5nID0KKyAgICAgIGJvb2woY29weV9v
cHRpb25zOjpvdmVyd3JpdGVfZXhpc3RpbmcgJiBvcHRpb25zKTsKKworICBTdGF0VCB0b19zdGF0
X3BhdGg7CisgIGZpbGVfc3RhdHVzIHRvX3N0ID0gZGV0YWlsOjpwb3NpeF9zdGF0KHRvLCB0b19z
dGF0X3BhdGgsICZtX2VjKTsKKyAgaWYgKCFzdGF0dXNfa25vd24odG9fc3QpKQorICAgIHJldHVy
biBlcnIucmVwb3J0KG1fZWMpOworCisgIGNvbnN0IGJvb2wgdG9fZXhpc3RzID0gZXhpc3RzKHRv
X3N0KTsKKyAgaWYgKHRvX2V4aXN0cyAmJiAhaXNfcmVndWxhcl9maWxlKHRvX3N0KSkKKyAgICBy
ZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpub3Rfc3VwcG9ydGVkKTsKKworICBpZiAodG9fZXhpc3Rz
ICYmIGRldGFpbDo6c3RhdF9lcXVpdmFsZW50KGZyb21fc3RhdCwgdG9fc3RhdF9wYXRoKSkKKyAg
ICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpmaWxlX2V4aXN0cyk7CisKKyAgaWYgKHRvX2V4aXN0
cyAmJiBza2lwX2V4aXN0aW5nKQorICAgIHJldHVybiBmYWxzZTsKKworICBib29sIFNob3VsZENv
cHkgPSBbJl0oKSB7CisgICAgaWYgKHRvX2V4aXN0cyAmJiB1cGRhdGVfZXhpc3RpbmcpIHsKKyAg
ICAgIGF1dG8gZnJvbV90aW1lID0gZGV0YWlsOjpleHRyYWN0X210aW1lKGZyb21fc3RhdCk7Cisg
ICAgICBhdXRvIHRvX3RpbWUgPSBkZXRhaWw6OmV4dHJhY3RfbXRpbWUodG9fc3RhdF9wYXRoKTsK
KyAgICAgIGlmIChmcm9tX3RpbWUudHZfc2VjIDwgdG9fdGltZS50dl9zZWMpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgIGlmIChmcm9tX3RpbWUudHZfc2VjID09IHRvX3RpbWUudHZfc2Vj
ICYmCisgICAgICAgICAgZnJvbV90aW1lLnR2X25zZWMgPD0gdG9fdGltZS50dl9uc2VjKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCF0
b19leGlzdHMgfHwgb3ZlcndyaXRlX2V4aXN0aW5nKQorICAgICAgcmV0dXJuIHRydWU7CisgICAg
cmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6ZmlsZV9leGlzdHMpOworICB9KCk7CisgIGlmICghU2hv
dWxkQ29weSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgLy8gRG9uJ3QgdHJ1bmNhdGUgcmlnaHQg
YXdheS4gV2UgbWF5IG5vdCBiZSBvcGVuaW5nIHRoZSBmaWxlIHdlIG9yaWdpbmFsbHkKKyAgLy8g
bG9va2VkIGF0OyB3ZSdsbCBjaGVjayB0aGlzIGxhdGVyLgorICBpbnQgdG9fb3Blbl9mbGFncyA9
IE9fV1JPTkxZOworICBpZiAoIXRvX2V4aXN0cykKKyAgICB0b19vcGVuX2ZsYWdzIHw9IE9fQ1JF
QVQ7CisgIEZpbGVEZXNjcmlwdG9yIHRvX2ZkID0gRmlsZURlc2NyaXB0b3I6OmNyZWF0ZV93aXRo
X3N0YXR1cygKKyAgICAgICZ0bywgbV9lYywgdG9fb3Blbl9mbGFncywgZnJvbV9zdGF0LnN0X21v
ZGUpOworICBpZiAobV9lYykKKyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKKworICBpZiAo
dG9fZXhpc3RzKSB7CisgICAgLy8gQ2hlY2sgdGhhdCB0aGUgZmlsZSB3ZSBpbml0aWFsbHkgc3Rh
dCdlZCBpcyBlcXVpdmFsZW50IHRvIHRoZSBvbmUKKyAgICAvLyB3ZSBvcGVuZWQuCisgICAgLy8g
RklYTUU6IHJlcG9ydCB0aGlzIGJldHRlci4KKyAgICBpZiAoIWRldGFpbDo6c3RhdF9lcXVpdmFs
ZW50KHRvX3N0YXRfcGF0aCwgdG9fZmQuZ2V0X3N0YXQoKSkpCisgICAgICByZXR1cm4gZXJyLnJl
cG9ydChlcnJjOjpiYWRfZmlsZV9kZXNjcmlwdG9yKTsKKworICAgIC8vIFNldCB0aGUgcGVybWlz
c2lvbnMgYW5kIHRydW5jYXRlIHRoZSBmaWxlIHdlIG9wZW5lZC4KKyAgICBpZiAoZGV0YWlsOjpw
b3NpeF9mY2htb2QodG9fZmQsIGZyb21fc3RhdCwgbV9lYykpCisgICAgICByZXR1cm4gZXJyLnJl
cG9ydChtX2VjKTsKKyAgICBpZiAoZGV0YWlsOjpwb3NpeF9mdHJ1bmNhdGUodG9fZmQsIDAsIG1f
ZWMpKQorICAgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7CisgIH0KKworICBpZiAoIWNvcHlf
ZmlsZV9pbXBsKGZyb21fZmQsIHRvX2ZkLCBtX2VjKSkgeworICAgIC8vIEZJWE1FOiBSZW1vdmUg
dGhlIGRlc3QgZmlsZSBpZiB3ZSBmYWlsZWQsIGFuZCBpdCBkaWRuJ3QgZXhpc3QgcHJldmlvdXNs
eS4KKyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKKyAgfQorCisgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIF9fY29weV9zeW1saW5rKGNvbnN0IHBhdGgmIGV4aXN0aW5nX3N5bWxpbmssIGNv
bnN0IHBhdGgmIG5ld19zeW1saW5rLAorICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlKiBl
YykgeworICBjb25zdCBwYXRoIHJlYWxfcGF0aChfX3JlYWRfc3ltbGluayhleGlzdGluZ19zeW1s
aW5rLCBlYykpOworICBpZiAoZWMgJiYgKmVjKSB7CisgICAgcmV0dXJuOworICB9CisgIC8vIE5P
VEU6IHByb3Bvc2FsIHNheXMgeW91IHNob3VsZCBkZXRlY3QgaWYgeW91IHNob3VsZCBjYWxsCisg
IC8vIGNyZWF0ZV9zeW1saW5rIG9yIGNyZWF0ZV9kaXJlY3Rvcnlfc3ltbGluay4gSSBkb24ndCB0
aGluayB0aGlzCisgIC8vIGlzIG5lZWRlZCB3aXRoIFBPU0lYCisgIF9fY3JlYXRlX3N5bWxpbmso
cmVhbF9wYXRoLCBuZXdfc3ltbGluaywgZWMpOworfQorCitib29sIF9fY3JlYXRlX2RpcmVjdG9y
aWVzKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjxib29s
PiBlcnIoImNyZWF0ZV9kaXJlY3RvcmllcyIsIGVjLCAmcCk7CisKKyAgZXJyb3JfY29kZSBtX2Vj
OworICBhdXRvIGNvbnN0IHN0ID0gZGV0YWlsOjpwb3NpeF9zdGF0KHAsICZtX2VjKTsKKyAgaWYg
KCFzdGF0dXNfa25vd24oc3QpKQorICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMpOworICBlbHNl
IGlmIChpc19kaXJlY3Rvcnkoc3QpKQorICAgIHJldHVybiBmYWxzZTsKKyAgZWxzZSBpZiAoZXhp
c3RzKHN0KSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpmaWxlX2V4aXN0cyk7CisKKyAg
Y29uc3QgcGF0aCBwYXJlbnQgPSBwLnBhcmVudF9wYXRoKCk7CisgIGlmICghcGFyZW50LmVtcHR5
KCkpIHsKKyAgICBjb25zdCBmaWxlX3N0YXR1cyBwYXJlbnRfc3QgPSBzdGF0dXMocGFyZW50LCBt
X2VjKTsKKyAgICBpZiAobm90IHN0YXR1c19rbm93bihwYXJlbnRfc3QpKQorICAgICAgcmV0dXJu
IGVyci5yZXBvcnQobV9lYyk7CisgICAgaWYgKG5vdCBleGlzdHMocGFyZW50X3N0KSkgeworICAg
ICAgX19jcmVhdGVfZGlyZWN0b3JpZXMocGFyZW50LCBlYyk7CisgICAgICBpZiAoZWMgJiYgKmVj
KSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJu
IF9fY3JlYXRlX2RpcmVjdG9yeShwLCBlYyk7Cit9CisKK2Jvb2wgX19jcmVhdGVfZGlyZWN0b3J5
KGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjxib29sPiBl
cnIoImNyZWF0ZV9kaXJlY3RvcnkiLCBlYywgJnApOworCisgIGlmICg6Om1rZGlyKHAuY19zdHIo
KSwgc3RhdGljX2Nhc3Q8aW50PihwZXJtczo6YWxsKSkgPT0gMCkKKyAgICByZXR1cm4gdHJ1ZTsK
KyAgaWYgKGVycm5vICE9IEVFWElTVCkKKyAgICBlcnIucmVwb3J0KGNhcHR1cmVfZXJybm8oKSk7
CisgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBfX2NyZWF0ZV9kaXJlY3RvcnkocGF0aCBjb25z
dCYgcCwgcGF0aCBjb25zdCYgYXR0cmlidXRlcywgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JI
YW5kbGVyPGJvb2w+IGVycigiY3JlYXRlX2RpcmVjdG9yeSIsIGVjLCAmcCwgJmF0dHJpYnV0ZXMp
OworCisgIFN0YXRUIGF0dHJfc3RhdDsKKyAgZXJyb3JfY29kZSBtZWM7CisgIGF1dG8gc3QgPSBk
ZXRhaWw6OnBvc2l4X3N0YXQoYXR0cmlidXRlcywgYXR0cl9zdGF0LCAmbWVjKTsKKyAgaWYgKCFz
dGF0dXNfa25vd24oc3QpKQorICAgIHJldHVybiBlcnIucmVwb3J0KG1lYyk7CisgIGlmICghaXNf
ZGlyZWN0b3J5KHN0KSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpub3RfYV9kaXJlY3Rv
cnksCisgICAgICAgICAgICAgICAgICAgICAgInRoZSBzcGVjaWZpZWQgYXR0cmlidXRlIHBhdGgg
aXMgaW52YWxpZCIpOworCisgIGlmICg6Om1rZGlyKHAuY19zdHIoKSwgYXR0cl9zdGF0LnN0X21v
ZGUpID09IDApCisgICAgcmV0dXJuIHRydWU7CisgIGlmIChlcnJubyAhPSBFRVhJU1QpCisgICAg
ZXJyLnJlcG9ydChjYXB0dXJlX2Vycm5vKCkpOworICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQg
X19jcmVhdGVfZGlyZWN0b3J5X3N5bWxpbmsocGF0aCBjb25zdCYgZnJvbSwgcGF0aCBjb25zdCYg
dG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUqIGVjKSB7Cisg
IEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoImNyZWF0ZV9kaXJlY3Rvcnlfc3ltbGluayIsIGVjLCAm
ZnJvbSwgJnRvKTsKKyAgaWYgKDo6c3ltbGluayhmcm9tLmNfc3RyKCksIHRvLmNfc3RyKCkpICE9
IDApCisgICAgcmV0dXJuIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJubygpKTsKK30KKwordm9pZCBf
X2NyZWF0ZV9oYXJkX2xpbmsoY29uc3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8sIGVycm9y
X2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoImNyZWF0ZV9oYXJkX2xpbmsi
LCBlYywgJmZyb20sICZ0byk7CisgIGlmICg6OmxpbmsoZnJvbS5jX3N0cigpLCB0by5jX3N0cigp
KSA9PSAtMSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChjYXB0dXJlX2Vycm5vKCkpOworfQorCit2
b2lkIF9fY3JlYXRlX3N5bWxpbmsocGF0aCBjb25zdCYgZnJvbSwgcGF0aCBjb25zdCYgdG8sIGVy
cm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIoImNyZWF0ZV9zeW1saW5r
IiwgZWMsICZmcm9tLCAmdG8pOworICBpZiAoOjpzeW1saW5rKGZyb20uY19zdHIoKSwgdG8uY19z
dHIoKSkgPT0gLTEpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJubygpKTsKK30K
KworcGF0aCBfX2N1cnJlbnRfcGF0aChlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8
cGF0aD4gZXJyKCJjdXJyZW50X3BhdGgiLCBlYyk7CisKKyAgYXV0byBzaXplID0gOjpwYXRoY29u
ZigiLiIsIF9QQ19QQVRIX01BWCk7CisgIF9MSUJDUFBfQVNTRVJUKHNpemUgPj0gMCwgInBhdGhj
b25mIHJldHVybmVkIGEgMCBhcyBtYXggc2l6ZSIpOworCisgIGF1dG8gYnVmZiA9IHVuaXF1ZV9w
dHI8Y2hhcltdPihuZXcgY2hhcltzaXplICsgMV0pOworICBjaGFyKiByZXQ7CisgIGlmICgocmV0
ID0gOjpnZXRjd2QoYnVmZi5nZXQoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihzaXplKSkpID09IG51
bGxwdHIpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJubygpLCAiY2FsbCB0byBn
ZXRjd2QgZmFpbGVkIik7CisKKyAgcmV0dXJuIHtidWZmLmdldCgpfTsKK30KKwordm9pZCBfX2N1
cnJlbnRfcGF0aChjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRs
ZXI8dm9pZD4gZXJyKCJjdXJyZW50X3BhdGgiLCBlYywgJnApOworICBpZiAoOjpjaGRpcihwLmNf
c3RyKCkpID09IC0xKQorICAgIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJubygpKTsKK30KKworYm9v
bCBfX2VxdWl2YWxlbnQoY29uc3QgcGF0aCYgcDEsIGNvbnN0IHBhdGgmIHAyLCBlcnJvcl9jb2Rl
KiBlYykgeworICBFcnJvckhhbmRsZXI8Ym9vbD4gZXJyKCJlcXVpdmFsZW50IiwgZWMsICZwMSwg
JnAyKTsKKworICBlcnJvcl9jb2RlIGVjMSwgZWMyOworICBTdGF0VCBzdDEgPSB7fSwgc3QyID0g
e307CisgIGF1dG8gczEgPSBkZXRhaWw6OnBvc2l4X3N0YXQocDEubmF0aXZlKCksIHN0MSwgJmVj
MSk7CisgIGlmICghZXhpc3RzKHMxKSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpub3Rf
c3VwcG9ydGVkKTsKKyAgYXV0byBzMiA9IGRldGFpbDo6cG9zaXhfc3RhdChwMi5uYXRpdmUoKSwg
c3QyLCAmZWMyKTsKKyAgaWYgKCFleGlzdHMoczIpKQorICAgIHJldHVybiBlcnIucmVwb3J0KGVy
cmM6Om5vdF9zdXBwb3J0ZWQpOworCisgIHJldHVybiBkZXRhaWw6OnN0YXRfZXF1aXZhbGVudChz
dDEsIHN0Mik7Cit9CisKK3VpbnRtYXhfdCBfX2ZpbGVfc2l6ZShjb25zdCBwYXRoJiBwLCBlcnJv
cl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8dWludG1heF90PiBlcnIoImZpbGVfc2l6ZSIs
IGVjLCAmcCk7CisKKyAgZXJyb3JfY29kZSBtX2VjOworICBTdGF0VCBzdDsKKyAgZmlsZV9zdGF0
dXMgZnN0ID0gZGV0YWlsOjpwb3NpeF9zdGF0KHAsIHN0LCAmbV9lYyk7CisgIGlmICghZXhpc3Rz
KGZzdCkgfHwgIWlzX3JlZ3VsYXJfZmlsZShmc3QpKSB7CisgICAgZXJyYyBlcnJvcl9raW5kID0K
KyAgICAgICAgaXNfZGlyZWN0b3J5KGZzdCkgPyBlcnJjOjppc19hX2RpcmVjdG9yeSA6IGVycmM6
Om5vdF9zdXBwb3J0ZWQ7CisgICAgaWYgKCFtX2VjKQorICAgICAgbV9lYyA9IG1ha2VfZXJyb3Jf
Y29kZShlcnJvcl9raW5kKTsKKyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKKyAgfQorICAv
LyBpc19yZWd1bGFyX2ZpbGUocCkgPT0gdHJ1ZQorICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludG1h
eF90PihzdC5zdF9zaXplKTsKK30KKwordWludG1heF90IF9faGFyZF9saW5rX2NvdW50KGNvbnN0
IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjx1aW50bWF4X3Q+IGVy
cigiaGFyZF9saW5rX2NvdW50IiwgZWMsICZwKTsKKworICBlcnJvcl9jb2RlIG1fZWM7CisgIFN0
YXRUIHN0OworICBkZXRhaWw6OnBvc2l4X3N0YXQocCwgc3QsICZtX2VjKTsKKyAgaWYgKG1fZWMp
CisgICAgcmV0dXJuIGVyci5yZXBvcnQobV9lYyk7CisgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50
bWF4X3Q+KHN0LnN0X25saW5rKTsKK30KKworYm9vbCBfX2ZzX2lzX2VtcHR5KGNvbnN0IHBhdGgm
IHAsIGVycm9yX2NvZGUqIGVjKSB7CisgIEVycm9ySGFuZGxlcjxib29sPiBlcnIoImlzX2VtcHR5
IiwgZWMsICZwKTsKKworICBlcnJvcl9jb2RlIG1fZWM7CisgIFN0YXRUIHBzdDsKKyAgYXV0byBz
dCA9IGRldGFpbDo6cG9zaXhfc3RhdChwLCBwc3QsICZtX2VjKTsKKyAgaWYgKG1fZWMpCisgICAg
cmV0dXJuIGVyci5yZXBvcnQobV9lYyk7CisgIGVsc2UgaWYgKCFpc19kaXJlY3Rvcnkoc3QpICYm
ICFpc19yZWd1bGFyX2ZpbGUoc3QpKQorICAgIHJldHVybiBlcnIucmVwb3J0KGVycmM6Om5vdF9z
dXBwb3J0ZWQpOworICBlbHNlIGlmIChpc19kaXJlY3Rvcnkoc3QpKSB7CisgICAgYXV0byBpdCA9
IGVjID8gZGlyZWN0b3J5X2l0ZXJhdG9yKHAsICplYykgOiBkaXJlY3RvcnlfaXRlcmF0b3IocCk7
CisgICAgaWYgKGVjICYmICplYykKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gaXQg
PT0gZGlyZWN0b3J5X2l0ZXJhdG9ye307CisgIH0gZWxzZSBpZiAoaXNfcmVndWxhcl9maWxlKHN0
KSkKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludG1heF90Pihwc3Quc3Rfc2l6ZSkgPT0gMDsK
KworICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7Cit9CisKK3N0YXRpYyBmaWxlX3RpbWVfdHlwZSBf
X2V4dHJhY3RfbGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgmIHAsIGNvbnN0IFN0YXRUJiBzdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2Nv
ZGUqIGVjKSB7CisgIHVzaW5nIGRldGFpbDo6ZnNfdGltZTsKKyAgRXJyb3JIYW5kbGVyPGZpbGVf
dGltZV90eXBlPiBlcnIoImxhc3Rfd3JpdGVfdGltZSIsIGVjLCAmcCk7CisKKyAgYXV0byB0cyA9
IGRldGFpbDo6ZXh0cmFjdF9tdGltZShzdCk7CisgIGlmICghZnNfdGltZTo6aXNfcmVwcmVzZW50
YWJsZSh0cykpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoZXJyYzo6dmFsdWVfdG9vX2xhcmdlKTsK
KworICByZXR1cm4gZnNfdGltZTo6Y29udmVydF9mcm9tX3RpbWVzcGVjKHRzKTsKK30KKworZmls
ZV90aW1lX3R5cGUgX19sYXN0X3dyaXRlX3RpbWUoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSog
ZWMpIHsKKyAgdXNpbmcgbmFtZXNwYWNlIGNocm9ubzsKKyAgRXJyb3JIYW5kbGVyPGZpbGVfdGlt
ZV90eXBlPiBlcnIoImxhc3Rfd3JpdGVfdGltZSIsIGVjLCAmcCk7CisKKyAgZXJyb3JfY29kZSBt
X2VjOworICBTdGF0VCBzdDsKKyAgZGV0YWlsOjpwb3NpeF9zdGF0KHAsIHN0LCAmbV9lYyk7Cisg
IGlmIChtX2VjKQorICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMpOworICByZXR1cm4gX19leHRy
YWN0X2xhc3Rfd3JpdGVfdGltZShwLCBzdCwgZWMpOworfQorCit2b2lkIF9fbGFzdF93cml0ZV90
aW1lKGNvbnN0IHBhdGgmIHAsIGZpbGVfdGltZV90eXBlIG5ld190aW1lLCBlcnJvcl9jb2RlKiBl
YykgeworICB1c2luZyBkZXRhaWw6OmZzX3RpbWU7CisgIEVycm9ySGFuZGxlcjx2b2lkPiBlcnIo
Imxhc3Rfd3JpdGVfdGltZSIsIGVjLCAmcCk7CisKKyAgZXJyb3JfY29kZSBtX2VjOworICBhcnJh
eTxUaW1lU3BlYywgMj4gdGJ1ZjsKKyNpZiAhZGVmaW5lZChfTElCQ1BQX1VTRV9VVElNRU5TQVQp
CisgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gaGFzIGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiBk
ZXRlcm1pbmluZyB0aGUKKyAgLy8gbGFzdCBhY2Nlc3MgdGltZSBhbmQgYXR0ZW1wdGluZyB0byBz
ZXQgaXQgdG8gdGhlIHNhbWUgdmFsdWUgdXNpbmcKKyAgLy8gOjp1dGltZXMKKyAgU3RhdFQgc3Q7
CisgIGZpbGVfc3RhdHVzIGZzdCA9IGRldGFpbDo6cG9zaXhfc3RhdChwLCBzdCwgJm1fZWMpOwor
ICBpZiAobV9lYykKKyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjKTsKKyAgdGJ1ZlswXSA9IGRl
dGFpbDo6ZXh0cmFjdF9hdGltZShzdCk7CisjZWxzZQorICB0YnVmWzBdLnR2X3NlYyA9IDA7Cisg
IHRidWZbMF0udHZfbnNlYyA9IFVUSU1FX09NSVQ7CisjZW5kaWYKKyAgaWYgKCFmc190aW1lOjpj
b252ZXJ0X3RvX3RpbWVzcGVjKHRidWZbMV0sIG5ld190aW1lKSkKKyAgICByZXR1cm4gZXJyLnJl
cG9ydChlcnJjOjp2YWx1ZV90b29fbGFyZ2UpOworCisgIGRldGFpbDo6c2V0X2ZpbGVfdGltZXMo
cCwgdGJ1ZiwgbV9lYyk7CisgIGlmIChtX2VjKQorICAgIHJldHVybiBlcnIucmVwb3J0KG1fZWMp
OworfQorCit2b2lkIF9fcGVybWlzc2lvbnMoY29uc3QgcGF0aCYgcCwgcGVybXMgcHJtcywgcGVy
bV9vcHRpb25zIG9wdHMsCisgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSogZWMpIHsKKyAg
RXJyb3JIYW5kbGVyPHZvaWQ+IGVycigicGVybWlzc2lvbnMiLCBlYywgJnApOworCisgIGF1dG8g
aGFzX29wdCA9IFsmXShwZXJtX29wdGlvbnMgbykgeyByZXR1cm4gYm9vbChvICYgb3B0cyk7IH07
CisgIGNvbnN0IGJvb2wgcmVzb2x2ZV9zeW1saW5rcyA9ICFoYXNfb3B0KHBlcm1fb3B0aW9uczo6
bm9mb2xsb3cpOworICBjb25zdCBib29sIGFkZF9wZXJtcyA9IGhhc19vcHQocGVybV9vcHRpb25z
OjphZGQpOworICBjb25zdCBib29sIHJlbW92ZV9wZXJtcyA9IGhhc19vcHQocGVybV9vcHRpb25z
OjpyZW1vdmUpOworICBfTElCQ1BQX0FTU0VSVCgKKyAgICAgIChhZGRfcGVybXMgKyByZW1vdmVf
cGVybXMgKyBoYXNfb3B0KHBlcm1fb3B0aW9uczo6cmVwbGFjZSkpID09IDEsCisgICAgICAiT25l
IGFuZCBvbmx5IG9uZSBvZiB0aGUgcGVybV9vcHRpb25zIGNvbnN0YW50cyByZXBsYWNlLCBhZGQs
IG9yIHJlbW92ZSAiCisgICAgICAiaXMgcHJlc2VudCBpbiBvcHRzIik7CisKKyAgYm9vbCBzZXRf
c3ltX3Blcm1zID0gZmFsc2U7CisgIHBybXMgJj0gcGVybXM6Om1hc2s7CisgIGlmICghcmVzb2x2
ZV9zeW1saW5rcyB8fCAoYWRkX3Blcm1zIHx8IHJlbW92ZV9wZXJtcykpIHsKKyAgICBlcnJvcl9j
b2RlIG1fZWM7CisgICAgZmlsZV9zdGF0dXMgc3QgPSByZXNvbHZlX3N5bWxpbmtzID8gZGV0YWls
Ojpwb3NpeF9zdGF0KHAsICZtX2VjKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IGRldGFpbDo6cG9zaXhfbHN0YXQocCwgJm1fZWMpOworICAgIHNldF9zeW1fcGVybXMg
PSBpc19zeW1saW5rKHN0KTsKKyAgICBpZiAobV9lYykKKyAgICAgIHJldHVybiBlcnIucmVwb3J0
KG1fZWMpOworICAgIF9MSUJDUFBfQVNTRVJUKHN0LnBlcm1pc3Npb25zKCkgIT0gcGVybXM6OnVu
a25vd24sCisgICAgICAgICAgICAgICAgICAgIlBlcm1pc3Npb25zIHVuZXhwZWN0ZWRseSB1bmtu
b3duIik7CisgICAgaWYgKGFkZF9wZXJtcykKKyAgICAgIHBybXMgfD0gc3QucGVybWlzc2lvbnMo
KTsKKyAgICBlbHNlIGlmIChyZW1vdmVfcGVybXMpCisgICAgICBwcm1zID0gc3QucGVybWlzc2lv
bnMoKSAmIH5wcm1zOworICB9CisgIGNvbnN0IGF1dG8gcmVhbF9wZXJtcyA9IGRldGFpbDo6cG9z
aXhfY29udmVydF9wZXJtcyhwcm1zKTsKKworI2lmIGRlZmluZWQoQVRfU1lNTElOS19OT0ZPTExP
VykgJiYgZGVmaW5lZChBVF9GRENXRCkKKyAgY29uc3QgaW50IGZsYWdzID0gc2V0X3N5bV9wZXJt
cyA/IEFUX1NZTUxJTktfTk9GT0xMT1cgOiAwOworICBpZiAoOjpmY2htb2RhdChBVF9GRENXRCwg
cC5jX3N0cigpLCByZWFsX3Blcm1zLCBmbGFncykgPT0gLTEpIHsKKyAgICByZXR1cm4gZXJyLnJl
cG9ydChjYXB0dXJlX2Vycm5vKCkpOworICB9CisjZWxzZQorICBpZiAoc2V0X3N5bV9wZXJtcykK
KyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpvcGVyYXRpb25fbm90X3N1cHBvcnRlZCk7Cisg
IGlmICg6OmNobW9kKHAuY19zdHIoKSwgcmVhbF9wZXJtcykgPT0gLTEpIHsKKyAgICByZXR1cm4g
ZXJyLnJlcG9ydChjYXB0dXJlX2Vycm5vKCkpOworICB9CisjZW5kaWYKK30KKworcGF0aCBfX3Jl
YWRfc3ltbGluayhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRs
ZXI8cGF0aD4gZXJyKCJyZWFkX3N5bWxpbmsiLCBlYywgJnApOworCisgIGNoYXIgYnVmZltQQVRI
X01BWCArIDFdOworICBlcnJvcl9jb2RlIG1fZWM7CisgIDo6c3NpemVfdCByZXQ7CisgIGlmICgo
cmV0ID0gOjpyZWFkbGluayhwLmNfc3RyKCksIGJ1ZmYsIFBBVEhfTUFYKSkgPT0gLTEpIHsKKyAg
ICByZXR1cm4gZXJyLnJlcG9ydChjYXB0dXJlX2Vycm5vKCkpOworICB9CisgIF9MSUJDUFBfQVNT
RVJUKHJldCA8PSBQQVRIX01BWCwgIlRPRE8iKTsKKyAgX0xJQkNQUF9BU1NFUlQocmV0ID4gMCwg
IlRPRE8iKTsKKyAgYnVmZltyZXRdID0gMDsKKyAgcmV0dXJuIHtidWZmfTsKK30KKworYm9vbCBf
X3JlbW92ZShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8
Ym9vbD4gZXJyKCJyZW1vdmUiLCBlYywgJnApOworICBpZiAoOjpyZW1vdmUocC5jX3N0cigpKSA9
PSAtMSkgeworICAgIGlmIChlcnJubyAhPSBFTk9FTlQpCisgICAgICBlcnIucmVwb3J0KGNhcHR1
cmVfZXJybm8oKSk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIHJldHVybiB0cnVlOworfQor
CituYW1lc3BhY2UgeworCit1aW50bWF4X3QgcmVtb3ZlX2FsbF9pbXBsKHBhdGggY29uc3QmIHAs
IGVycm9yX2NvZGUmIGVjKSB7CisgIGNvbnN0IGF1dG8gbnBvcyA9IHN0YXRpY19jYXN0PHVpbnRt
YXhfdD4oLTEpOworICBjb25zdCBmaWxlX3N0YXR1cyBzdCA9IF9fc3ltbGlua19zdGF0dXMocCwg
JmVjKTsKKyAgaWYgKGVjKQorICAgIHJldHVybiBucG9zOworICB1aW50bWF4X3QgY291bnQgPSAx
OworICBpZiAoaXNfZGlyZWN0b3J5KHN0KSkgeworICAgIGZvciAoZGlyZWN0b3J5X2l0ZXJhdG9y
IGl0KHAsIGVjKTsgIWVjICYmIGl0ICE9IGRpcmVjdG9yeV9pdGVyYXRvcigpOworICAgICAgICAg
aXQuaW5jcmVtZW50KGVjKSkgeworICAgICAgYXV0byBvdGhlcl9jb3VudCA9IHJlbW92ZV9hbGxf
aW1wbChpdC0+cGF0aCgpLCBlYyk7CisgICAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiBucG9z
OworICAgICAgY291bnQgKz0gb3RoZXJfY291bnQ7CisgICAgfQorICAgIGlmIChlYykKKyAgICAg
IHJldHVybiBucG9zOworICB9CisgIGlmICghX19yZW1vdmUocCwgJmVjKSkKKyAgICByZXR1cm4g
bnBvczsKKyAgcmV0dXJuIGNvdW50OworfQorCit9IC8vIGVuZCBuYW1lc3BhY2UKKwordWludG1h
eF90IF9fcmVtb3ZlX2FsbChjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJv
ckhhbmRsZXI8dWludG1heF90PiBlcnIoInJlbW92ZV9hbGwiLCBlYywgJnApOworCisgIGVycm9y
X2NvZGUgbWVjOworICBhdXRvIGNvdW50ID0gcmVtb3ZlX2FsbF9pbXBsKHAsIG1lYyk7CisgIGlm
IChtZWMpIHsKKyAgICBpZiAobWVjID09IGVycmM6Om5vX3N1Y2hfZmlsZV9vcl9kaXJlY3Rvcnkp
CisgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZXJyLnJlcG9ydChtZWMpOworICB9CisgIHJl
dHVybiBjb3VudDsKK30KKwordm9pZCBfX3JlbmFtZShjb25zdCBwYXRoJiBmcm9tLCBjb25zdCBw
YXRoJiB0bywgZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHZvaWQ+IGVycigicmVu
YW1lIiwgZWMsICZmcm9tLCAmdG8pOworICBpZiAoOjpyZW5hbWUoZnJvbS5jX3N0cigpLCB0by5j
X3N0cigpKSA9PSAtMSkKKyAgICBlcnIucmVwb3J0KGNhcHR1cmVfZXJybm8oKSk7Cit9CisKK3Zv
aWQgX19yZXNpemVfZmlsZShjb25zdCBwYXRoJiBwLCB1aW50bWF4X3Qgc2l6ZSwgZXJyb3JfY29k
ZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHZvaWQ+IGVycigicmVzaXplX2ZpbGUiLCBlYywgJnAp
OworICBpZiAoOjp0cnVuY2F0ZShwLmNfc3RyKCksIHN0YXRpY19jYXN0PCA6Om9mZl90PihzaXpl
KSkgPT0gLTEpCisgICAgcmV0dXJuIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJubygpKTsKK30KKwor
c3BhY2VfaW5mbyBfX3NwYWNlKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjKSB7CisgIEVy
cm9ySGFuZGxlcjx2b2lkPiBlcnIoInNwYWNlIiwgZWMsICZwKTsKKyAgc3BhY2VfaW5mbyBzaTsK
KyAgc3RydWN0IHN0YXR2ZnMgbV9zdmZzID0ge307CisgIGlmICg6OnN0YXR2ZnMocC5jX3N0cigp
LCAmbV9zdmZzKSA9PSAtMSkgeworICAgIGVyci5yZXBvcnQoY2FwdHVyZV9lcnJubygpKTsKKyAg
ICBzaS5jYXBhY2l0eSA9IHNpLmZyZWUgPSBzaS5hdmFpbGFibGUgPSBzdGF0aWNfY2FzdDx1aW50
bWF4X3Q+KC0xKTsKKyAgICByZXR1cm4gc2k7CisgIH0KKyAgLy8gTXVsdGlwbHkgd2l0aCBvdmVy
ZmxvdyBjaGVja2luZy4KKyAgYXV0byBkb19tdWx0ID0gWyZdKHVpbnRtYXhfdCYgb3V0LCB1aW50
bWF4X3Qgb3RoZXIpIHsKKyAgICBvdXQgPSBvdGhlciAqIG1fc3Zmcy5mX2Zyc2l6ZTsKKyAgICBp
ZiAob3RoZXIgPT0gMCB8fCBvdXQgLyBvdGhlciAhPSBtX3N2ZnMuZl9mcnNpemUpCisgICAgICBv
dXQgPSBzdGF0aWNfY2FzdDx1aW50bWF4X3Q+KC0xKTsKKyAgfTsKKyAgZG9fbXVsdChzaS5jYXBh
Y2l0eSwgbV9zdmZzLmZfYmxvY2tzKTsKKyAgZG9fbXVsdChzaS5mcmVlLCBtX3N2ZnMuZl9iZnJl
ZSk7CisgIGRvX211bHQoc2kuYXZhaWxhYmxlLCBtX3N2ZnMuZl9iYXZhaWwpOworICByZXR1cm4g
c2k7Cit9CisKK2ZpbGVfc3RhdHVzIF9fc3RhdHVzKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUq
IGVjKSB7CisgIHJldHVybiBkZXRhaWw6OnBvc2l4X3N0YXQocCwgZWMpOworfQorCitmaWxlX3N0
YXR1cyBfX3N5bWxpbmtfc3RhdHVzKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjKSB7Cisg
IHJldHVybiBkZXRhaWw6OnBvc2l4X2xzdGF0KHAsIGVjKTsKK30KKworcGF0aCBfX3RlbXBfZGly
ZWN0b3J5X3BhdGgoZXJyb3JfY29kZSogZWMpIHsKKyAgRXJyb3JIYW5kbGVyPHBhdGg+IGVycigi
dGVtcF9kaXJlY3RvcnlfcGF0aCIsIGVjKTsKKworICBjb25zdCBjaGFyKiBlbnZfcGF0aHNbXSA9
IHsiVE1QRElSIiwgIlRNUCIsICJURU1QIiwgIlRFTVBESVIifTsKKyAgY29uc3QgY2hhciogcmV0
ID0gbnVsbHB0cjsKKworICBmb3IgKGF1dG8mIGVwIDogZW52X3BhdGhzKQorICAgIGlmICgocmV0
ID0gZ2V0ZW52KGVwKSkpCisgICAgICBicmVhazsKKyAgaWYgKHJldCA9PSBudWxscHRyKQorICAg
IHJldCA9ICIvdG1wIjsKKworICBwYXRoIHAocmV0KTsKKyAgZXJyb3JfY29kZSBtX2VjOworICBm
aWxlX3N0YXR1cyBzdCA9IGRldGFpbDo6cG9zaXhfc3RhdChwLCAmbV9lYyk7CisgIGlmICghc3Rh
dHVzX2tub3duKHN0KSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChtX2VjLCAiY2Fubm90IGFjY2Vz
cyBwYXRoIFwiJXNcIiIsIHApOworCisgIGlmICghZXhpc3RzKHN0KSB8fCAhaXNfZGlyZWN0b3J5
KHN0KSkKKyAgICByZXR1cm4gZXJyLnJlcG9ydChlcnJjOjpub3RfYV9kaXJlY3RvcnksICJwYXRo
IFwiJXNcIiBpcyBub3QgYSBkaXJlY3RvcnkiLAorICAgICAgICAgICAgICAgICAgICAgIHApOwor
CisgIHJldHVybiBwOworfQorCitwYXRoIF9fd2Vha2x5X2Nhbm9uaWNhbChjb25zdCBwYXRoJiBw
LCBlcnJvcl9jb2RlKiBlYykgeworICBFcnJvckhhbmRsZXI8cGF0aD4gZXJyKCJ3ZWFrbHlfY2Fu
b25pY2FsIiwgZWMsICZwKTsKKworICBpZiAocC5lbXB0eSgpKQorICAgIHJldHVybiBfX2Nhbm9u
aWNhbCgiIiwgZWMpOworCisgIHBhdGggcmVzdWx0OworICBwYXRoIHRtcDsKKyAgdG1wLl9fcmVz
ZXJ2ZShwLm5hdGl2ZSgpLnNpemUoKSk7CisgIGF1dG8gUFAgPSBQYXRoUGFyc2VyOjpDcmVhdGVF
bmQocC5uYXRpdmUoKSk7CisgIC0tUFA7CisgIHZlY3RvcjxzdHJpbmdfdmlld190PiBETkVQYXJ0
czsKKworICB3aGlsZSAoUFAuU3RhdGUgIT0gUGF0aFBhcnNlcjo6UFNfQmVmb3JlQmVnaW4pIHsK
KyAgICB0bXAuYXNzaWduKGNyZWF0ZVZpZXcocC5uYXRpdmUoKS5kYXRhKCksICZQUC5SYXdFbnRy
eS5iYWNrKCkpKTsKKyAgICBlcnJvcl9jb2RlIG1fZWM7CisgICAgZmlsZV9zdGF0dXMgc3QgPSBf
X3N0YXR1cyh0bXAsICZtX2VjKTsKKyAgICBpZiAoIXN0YXR1c19rbm93bihzdCkpIHsKKyAgICAg
IHJldHVybiBlcnIucmVwb3J0KG1fZWMpOworICAgIH0gZWxzZSBpZiAoZXhpc3RzKHN0KSkgewor
ICAgICAgcmVzdWx0ID0gX19jYW5vbmljYWwodG1wLCBlYyk7CisgICAgICBicmVhazsKKyAgICB9
CisgICAgRE5FUGFydHMucHVzaF9iYWNrKCpQUCk7CisgICAgLS1QUDsKKyAgfQorICBpZiAoUFAu
U3RhdGUgPT0gUGF0aFBhcnNlcjo6UFNfQmVmb3JlQmVnaW4pCisgICAgcmVzdWx0ID0gX19jYW5v
bmljYWwoIiIsIGVjKTsKKyAgaWYgKGVjKQorICAgIGVjLT5jbGVhcigpOworICBpZiAoRE5FUGFy
dHMuZW1wdHkoKSkKKyAgICByZXR1cm4gcmVzdWx0OworICBmb3IgKGF1dG8gSXQgPSBETkVQYXJ0
cy5yYmVnaW4oKTsgSXQgIT0gRE5FUGFydHMucmVuZCgpOyArK0l0KQorICAgIHJlc3VsdCAvPSAq
SXQ7CisgIHJldHVybiByZXN1bHQubGV4aWNhbGx5X25vcm1hbCgpOworfQorCisvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoIGRlZmluaXRp
b25zCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2NvbnN0ZXhwciBwYXRoOjp2YWx1ZV90eXBl
IHBhdGg6OnByZWZlcnJlZF9zZXBhcmF0b3I7CisKK3BhdGgmIHBhdGg6OnJlcGxhY2VfZXh0ZW5z
aW9uKHBhdGggY29uc3QmIHJlcGxhY2VtZW50KSB7CisgIHBhdGggcCA9IGV4dGVuc2lvbigpOwor
ICBpZiAobm90IHAuZW1wdHkoKSkgeworICAgIF9fcG5fLmVyYXNlKF9fcG5fLnNpemUoKSAtIHAu
bmF0aXZlKCkuc2l6ZSgpKTsKKyAgfQorICBpZiAoIXJlcGxhY2VtZW50LmVtcHR5KCkpIHsKKyAg
ICBpZiAocmVwbGFjZW1lbnQubmF0aXZlKClbMF0gIT0gJy4nKSB7CisgICAgICBfX3BuXyArPSAi
LiI7CisgICAgfQorICAgIF9fcG5fLmFwcGVuZChyZXBsYWNlbWVudC5fX3BuXyk7CisgIH0KKyAg
cmV0dXJuICp0aGlzOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBwYXRoLmRlY29t
cG9zZQorCitzdHJpbmdfdmlld190IHBhdGg6Ol9fcm9vdF9uYW1lKCkgY29uc3QgeworICBhdXRv
IFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oX19wbl8pOworICBpZiAoUFAuU3RhdGUgPT0g
UGF0aFBhcnNlcjo6UFNfSW5Sb290TmFtZSkKKyAgICByZXR1cm4gKlBQOworICByZXR1cm4ge307
Cit9CisKK3N0cmluZ192aWV3X3QgcGF0aDo6X19yb290X2RpcmVjdG9yeSgpIGNvbnN0IHsKKyAg
YXV0byBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKF9fcG5fKTsKKyAgaWYgKFBQLlN0YXRl
ID09IFBhdGhQYXJzZXI6OlBTX0luUm9vdE5hbWUpCisgICAgKytQUDsKKyAgaWYgKFBQLlN0YXRl
ID09IFBhdGhQYXJzZXI6OlBTX0luUm9vdERpcikKKyAgICByZXR1cm4gKlBQOworICByZXR1cm4g
e307Cit9CisKK3N0cmluZ192aWV3X3QgcGF0aDo6X19yb290X3BhdGhfcmF3KCkgY29uc3Qgewor
ICBhdXRvIFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oX19wbl8pOworICBpZiAoUFAuU3Rh
dGUgPT0gUGF0aFBhcnNlcjo6UFNfSW5Sb290TmFtZSkgeworICAgIGF1dG8gTmV4dENoID0gUFAu
cGVlaygpOworICAgIGlmIChOZXh0Q2ggJiYgKk5leHRDaCA9PSAnLycpIHsKKyAgICAgICsrUFA7
CisgICAgICByZXR1cm4gY3JlYXRlVmlldyhfX3BuXy5kYXRhKCksICZQUC5SYXdFbnRyeS5iYWNr
KCkpOworICAgIH0KKyAgICByZXR1cm4gUFAuUmF3RW50cnk7CisgIH0KKyAgaWYgKFBQLlN0YXRl
ID09IFBhdGhQYXJzZXI6OlBTX0luUm9vdERpcikKKyAgICByZXR1cm4gKlBQOworICByZXR1cm4g
e307Cit9CisKK3N0YXRpYyBib29sIENvbnN1bWVSb290RGlyKFBhdGhQYXJzZXIqIFBQKSB7Cisg
IHdoaWxlIChQUC0+U3RhdGUgPD0gUGF0aFBhcnNlcjo6UFNfSW5Sb290RGlyKQorICAgICsrKCpQ
UCk7CisgIHJldHVybiBQUC0+U3RhdGUgPT0gUGF0aFBhcnNlcjo6UFNfQXRFbmQ7Cit9CisKK3N0
cmluZ192aWV3X3QgcGF0aDo6X19yZWxhdGl2ZV9wYXRoKCkgY29uc3QgeworICBhdXRvIFBQID0g
UGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oX19wbl8pOworICBpZiAoQ29uc3VtZVJvb3REaXIoJlBQ
KSkKKyAgICByZXR1cm4ge307CisgIHJldHVybiBjcmVhdGVWaWV3KFBQLlJhd0VudHJ5LmRhdGEo
KSwgJl9fcG5fLmJhY2soKSk7Cit9CisKK3N0cmluZ192aWV3X3QgcGF0aDo6X19wYXJlbnRfcGF0
aCgpIGNvbnN0IHsKKyAgaWYgKGVtcHR5KCkpCisgICAgcmV0dXJuIHt9OworICAvLyBEZXRlcm1p
bmUgaWYgd2UgaGF2ZSBhIHJvb3QgcGF0aCBidXQgbm90IGEgcmVsYXRpdmUgcGF0aC4gSW4gdGhh
dCBjYXNlCisgIC8vIHJldHVybiAqdGhpcy4KKyAgeworICAgIGF1dG8gUFAgPSBQYXRoUGFyc2Vy
OjpDcmVhdGVCZWdpbihfX3BuXyk7CisgICAgaWYgKENvbnN1bWVSb290RGlyKCZQUCkpCisgICAg
ICByZXR1cm4gX19wbl87CisgIH0KKyAgLy8gT3RoZXJ3aXNlIHJlbW92ZSBhIHNpbmdsZSBlbGVt
ZW50IGZyb20gdGhlIGVuZCBvZiB0aGUgcGF0aCwgYW5kIHJldHVybgorICAvLyBhIHN0cmluZyBy
ZXByZXNlbnRpbmcgdGhhdCBwYXRoCisgIHsKKyAgICBhdXRvIFBQID0gUGF0aFBhcnNlcjo6Q3Jl
YXRlRW5kKF9fcG5fKTsKKyAgICAtLVBQOworICAgIGlmIChQUC5SYXdFbnRyeS5kYXRhKCkgPT0g
X19wbl8uZGF0YSgpKQorICAgICAgcmV0dXJuIHt9OworICAgIC0tUFA7CisgICAgcmV0dXJuIGNy
ZWF0ZVZpZXcoX19wbl8uZGF0YSgpLCAmUFAuUmF3RW50cnkuYmFjaygpKTsKKyAgfQorfQorCitz
dHJpbmdfdmlld190IHBhdGg6Ol9fZmlsZW5hbWUoKSBjb25zdCB7CisgIGlmIChlbXB0eSgpKQor
ICAgIHJldHVybiB7fTsKKyAgeworICAgIFBhdGhQYXJzZXIgUFAgPSBQYXRoUGFyc2VyOjpDcmVh
dGVCZWdpbihfX3BuXyk7CisgICAgaWYgKENvbnN1bWVSb290RGlyKCZQUCkpCisgICAgICByZXR1
cm4ge307CisgIH0KKyAgcmV0dXJuICooLS1QYXRoUGFyc2VyOjpDcmVhdGVFbmQoX19wbl8pKTsK
K30KKworc3RyaW5nX3ZpZXdfdCBwYXRoOjpfX3N0ZW0oKSBjb25zdCB7CisgIHJldHVybiBwYXJz
ZXI6OnNlcGFyYXRlX2ZpbGVuYW1lKF9fZmlsZW5hbWUoKSkuZmlyc3Q7Cit9CisKK3N0cmluZ192
aWV3X3QgcGF0aDo6X19leHRlbnNpb24oKSBjb25zdCB7CisgIHJldHVybiBwYXJzZXI6OnNlcGFy
YXRlX2ZpbGVuYW1lKF9fZmlsZW5hbWUoKSkuc2Vjb25kOworfQorCisvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCisvLyBwYXRoLmdlbgorCitlbnVtIFBhdGhQYXJ0S2luZCA6IHVuc2lnbmVkIGNoYXIgewor
ICBQS19Ob25lLAorICBQS19Sb290U2VwLAorICBQS19GaWxlbmFtZSwKKyAgUEtfRG90LAorICBQ
S19Eb3REb3QsCisgIFBLX1RyYWlsaW5nU2VwCit9OworCitzdGF0aWMgUGF0aFBhcnRLaW5kIENs
YXNzaWZ5UGF0aFBhcnQoc3RyaW5nX3ZpZXdfdCBQYXJ0KSB7CisgIGlmIChQYXJ0LmVtcHR5KCkp
CisgICAgcmV0dXJuIFBLX1RyYWlsaW5nU2VwOworICBpZiAoUGFydCA9PSAiLiIpCisgICAgcmV0
dXJuIFBLX0RvdDsKKyAgaWYgKFBhcnQgPT0gIi4uIikKKyAgICByZXR1cm4gUEtfRG90RG90Owor
ICBpZiAoUGFydCA9PSAiLyIpCisgICAgcmV0dXJuIFBLX1Jvb3RTZXA7CisgIHJldHVybiBQS19G
aWxlbmFtZTsKK30KKworcGF0aCBwYXRoOjpsZXhpY2FsbHlfbm9ybWFsKCkgY29uc3QgeworICBp
ZiAoX19wbl8uZW1wdHkoKSkKKyAgICByZXR1cm4gKnRoaXM7CisKKyAgdXNpbmcgUGFydEtpbmRQ
YWlyID0gcGFpcjxzdHJpbmdfdmlld190LCBQYXRoUGFydEtpbmQ+OworICB2ZWN0b3I8UGFydEtp
bmRQYWlyPiBQYXJ0czsKKyAgLy8gR3Vlc3MgYXMgdG8gaG93IG1hbnkgZWxlbWVudHMgdGhlIHBh
dGggaGFzIHRvIGF2b2lkIHJlYWxsb2NhdGluZy4KKyAgUGFydHMucmVzZXJ2ZSgzMik7CisKKyAg
Ly8gVHJhY2sgdGhlIHRvdGFsIHNpemUgb2YgdGhlIHBhcnRzIGFzIHdlIGNvbGxlY3QgdGhlbS4g
VGhpcyBhbGxvd3MgdGhlCisgIC8vIHJlc3VsdGluZyBwYXRoIHRvIHJlc2VydmUgdGhlIGNvcnJl
Y3QgYW1vdW50IG9mIG1lbW9yeS4KKyAgc2l6ZV90IE5ld1BhdGhTaXplID0gMDsKKyAgYXV0byBB
ZGRQYXJ0ID0gWyZdKFBhdGhQYXJ0S2luZCBLLCBzdHJpbmdfdmlld190IFApIHsKKyAgICBOZXdQ
YXRoU2l6ZSArPSBQLnNpemUoKTsKKyAgICBQYXJ0cy5lbXBsYWNlX2JhY2soUCwgSyk7CisgIH07
CisgIGF1dG8gTGFzdFBhcnRLaW5kID0gWyZdKCkgeworICAgIGlmIChQYXJ0cy5lbXB0eSgpKQor
ICAgICAgcmV0dXJuIFBLX05vbmU7CisgICAgcmV0dXJuIFBhcnRzLmJhY2soKS5zZWNvbmQ7Cisg
IH07CisKKyAgYm9vbCBNYXliZU5lZWRUcmFpbGluZ1NlcCA9IGZhbHNlOworICAvLyBCdWlsZCBh
IHN0YWNrIGNvbnRhaW5pbmcgdGhlIHJlbWFpbmluZyBlbGVtZW50cyBvZiB0aGUgcGF0aCwgcG9w
cGluZyBvZmYKKyAgLy8gZWxlbWVudHMgd2hpY2ggb2NjdXIgYmVmb3JlIGEgJy4uJyBlbnRyeS4K
KyAgZm9yIChhdXRvIFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oX19wbl8pOyBQUDsgKytQ
UCkgeworICAgIGF1dG8gUGFydCA9ICpQUDsKKyAgICBQYXRoUGFydEtpbmQgS2luZCA9IENsYXNz
aWZ5UGF0aFBhcnQoUGFydCk7CisgICAgc3dpdGNoIChLaW5kKSB7CisgICAgY2FzZSBQS19GaWxl
bmFtZToKKyAgICBjYXNlIFBLX1Jvb3RTZXA6IHsKKyAgICAgIC8vIEFkZCBhbGwgbm9uLWRvdCBh
bmQgbm9uLWRvdC1kb3QgZWxlbWVudHMgdG8gdGhlIHN0YWNrIG9mIGVsZW1lbnRzLgorICAgICAg
QWRkUGFydChLaW5kLCBQYXJ0KTsKKyAgICAgIE1heWJlTmVlZFRyYWlsaW5nU2VwID0gZmFsc2U7
CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQS19Eb3REb3Q6IHsKKyAgICAgIC8vIE9u
bHkgcHVzaCBhICIuLiIgZWxlbWVudCBpZiB0aGVyZSBhcmUgbm8gZWxlbWVudHMgcHJlY2VkaW5n
IHRoZSAiLi4iLAorICAgICAgLy8gb3IgaWYgdGhlIHByZWNlZGluZyBlbGVtZW50IGlzIGl0c2Vs
ZiAiLi4iLgorICAgICAgYXV0byBMYXN0S2luZCA9IExhc3RQYXJ0S2luZCgpOworICAgICAgaWYg
KExhc3RLaW5kID09IFBLX0ZpbGVuYW1lKSB7CisgICAgICAgIE5ld1BhdGhTaXplIC09IFBhcnRz
LmJhY2soKS5maXJzdC5zaXplKCk7CisgICAgICAgIFBhcnRzLnBvcF9iYWNrKCk7CisgICAgICB9
IGVsc2UgaWYgKExhc3RLaW5kICE9IFBLX1Jvb3RTZXApCisgICAgICAgIEFkZFBhcnQoUEtfRG90
RG90LCAiLi4iKTsKKyAgICAgIE1heWJlTmVlZFRyYWlsaW5nU2VwID0gTGFzdEtpbmQgPT0gUEtf
RmlsZW5hbWU7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQS19Eb3Q6CisgICAgY2Fz
ZSBQS19UcmFpbGluZ1NlcDogeworICAgICAgTWF5YmVOZWVkVHJhaWxpbmdTZXAgPSB0cnVlOwor
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUEtfTm9uZToKKyAgICAgIF9MSUJDUFBfVU5S
RUFDSEFCTEUoKTsKKyAgICB9CisgIH0KKyAgLy8gW2ZzLnBhdGguZ2VuZXJpY11wNi44OiBJZiB0
aGUgcGF0aCBpcyBlbXB0eSwgYWRkIGEgZG90LgorICBpZiAoUGFydHMuZW1wdHkoKSkKKyAgICBy
ZXR1cm4gIi4iOworCisgIC8vIFtmcy5wYXRoLmdlbmVyaWNdcDYuNzogSWYgdGhlIGxhc3QgZmls
ZW5hbWUgaXMgZG90LWRvdCwgcmVtb3ZlIGFueQorICAvLyB0cmFpbGluZyBkaXJlY3Rvcnktc2Vw
YXJhdG9yLgorICBib29sIE5lZWRUcmFpbGluZ1NlcCA9IE1heWJlTmVlZFRyYWlsaW5nU2VwICYm
IExhc3RQYXJ0S2luZCgpID09IFBLX0ZpbGVuYW1lOworCisgIHBhdGggUmVzdWx0OworICBSZXN1
bHQuX19wbl8ucmVzZXJ2ZShQYXJ0cy5zaXplKCkgKyBOZXdQYXRoU2l6ZSArIE5lZWRUcmFpbGlu
Z1NlcCk7CisgIGZvciAoYXV0byYgUEsgOiBQYXJ0cykKKyAgICBSZXN1bHQgLz0gUEsuZmlyc3Q7
CisKKyAgaWYgKE5lZWRUcmFpbGluZ1NlcCkKKyAgICBSZXN1bHQgLz0gIiI7CisKKyAgcmV0dXJu
IFJlc3VsdDsKK30KKworc3RhdGljIGludCBEZXRlcm1pbmVMZXhpY2FsRWxlbWVudENvdW50KFBh
dGhQYXJzZXIgUFApIHsKKyAgaW50IENvdW50ID0gMDsKKyAgZm9yICg7IFBQOyArK1BQKSB7Cisg
ICAgYXV0byBFbGVtID0gKlBQOworICAgIGlmIChFbGVtID09ICIuLiIpCisgICAgICAtLUNvdW50
OworICAgIGVsc2UgaWYgKEVsZW0gIT0gIi4iKQorICAgICAgKytDb3VudDsKKyAgfQorICByZXR1
cm4gQ291bnQ7Cit9CisKK3BhdGggcGF0aDo6bGV4aWNhbGx5X3JlbGF0aXZlKGNvbnN0IHBhdGgm
IGJhc2UpIGNvbnN0IHsKKyAgeyAvLyBwZXJmb3JtIHJvb3QtbmFtZS9yb290LWRpcmVjdG9yeSBt
aXNtYXRjaCBjaGVja3MKKyAgICBhdXRvIFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oX19w
bl8pOworICAgIGF1dG8gUFBCYXNlID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oYmFzZS5fX3Bu
Xyk7CisgICAgYXV0byBDaGVja0l0ZXJNaXNtYXRjaEF0QmFzZSA9IFsmXSgpIHsKKyAgICAgIHJl
dHVybiBQUC5TdGF0ZSAhPSBQUEJhc2UuU3RhdGUgJiYKKyAgICAgICAgICAgICAoUFAuaW5Sb290
UGF0aCgpIHx8IFBQQmFzZS5pblJvb3RQYXRoKCkpOworICAgIH07CisgICAgaWYgKFBQLlN0YXRl
ID09IFBhdGhQYXJzZXI6OlBTX0luUm9vdE5hbWUgJiYKKyAgICAgICAgUFBCYXNlLlN0YXRlID09
IFBhdGhQYXJzZXI6OlBTX0luUm9vdE5hbWUpIHsKKyAgICAgIGlmICgqUFAgIT0gKlBQQmFzZSkK
KyAgICAgICAgcmV0dXJuIHt9OworICAgIH0gZWxzZSBpZiAoQ2hlY2tJdGVyTWlzbWF0Y2hBdEJh
c2UoKSkKKyAgICAgIHJldHVybiB7fTsKKworICAgIGlmIChQUC5pblJvb3RQYXRoKCkpCisgICAg
ICArK1BQOworICAgIGlmIChQUEJhc2UuaW5Sb290UGF0aCgpKQorICAgICAgKytQUEJhc2U7Cisg
ICAgaWYgKENoZWNrSXRlck1pc21hdGNoQXRCYXNlKCkpCisgICAgICByZXR1cm4ge307CisgIH0K
KworICAvLyBGaW5kIHRoZSBmaXJzdCBtaXNtYXRjaGluZyBlbGVtZW50CisgIGF1dG8gUFAgPSBQ
YXRoUGFyc2VyOjpDcmVhdGVCZWdpbihfX3BuXyk7CisgIGF1dG8gUFBCYXNlID0gUGF0aFBhcnNl
cjo6Q3JlYXRlQmVnaW4oYmFzZS5fX3BuXyk7CisgIHdoaWxlIChQUCAmJiBQUEJhc2UgJiYgUFAu
U3RhdGUgPT0gUFBCYXNlLlN0YXRlICYmICpQUCA9PSAqUFBCYXNlKSB7CisgICAgKytQUDsKKyAg
ICArK1BQQmFzZTsKKyAgfQorCisgIC8vIElmIHRoZXJlIGlzIG5vIG1pc21hdGNoLCByZXR1cm4g
Ii4iLgorICBpZiAoIVBQICYmICFQUEJhc2UpCisgICAgcmV0dXJuICIuIjsKKworICAvLyBPdGhl
cndpc2UsIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzLCAnbicsIHdoaWNoIGFyZSBu
b3QgZG90IG9yCisgIC8vIGRvdC1kb3QgbWludXMgdGhlIG51bWJlciBvZiBkb3QtZG90IGVsZW1l
bnRzLgorICBpbnQgRWxlbUNvdW50ID0gRGV0ZXJtaW5lTGV4aWNhbEVsZW1lbnRDb3VudChQUEJh
c2UpOworICBpZiAoRWxlbUNvdW50IDwgMCkKKyAgICByZXR1cm4ge307CisKKyAgLy8gcmV0dXJu
IGEgcGF0aCBjb25zdHJ1Y3RlZCB3aXRoICduJyBkb3QtZG90IGVsZW1lbnRzLCBmb2xsb3dlZCBi
eSB0aGUgdGhlCisgIC8vIGVsZW1lbnRzIG9mICcqdGhpcycgYWZ0ZXIgdGhlIG1pc21hdGNoLgor
ICBwYXRoIFJlc3VsdDsKKyAgLy8gRklYTUU6IFJlc2VydmUgZW5vdWdoIHJvb20gaW4gUmVzdWx0
IHRoYXQgaXQgd29uJ3QgaGF2ZSB0byByZS1hbGxvY2F0ZS4KKyAgd2hpbGUgKEVsZW1Db3VudC0t
KQorICAgIFJlc3VsdCAvPSAiLi4iOworICBmb3IgKDsgUFA7ICsrUFApCisgICAgUmVzdWx0IC89
ICpQUDsKKyAgcmV0dXJuIFJlc3VsdDsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gcGF0
aC5jb21wYXJpc29ucworaW50IHBhdGg6Ol9fY29tcGFyZShzdHJpbmdfdmlld190IF9fcykgY29u
c3QgeworICBhdXRvIFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4oX19wbl8pOworICBhdXRv
IFBQMiA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKF9fcyk7CisgIHdoaWxlIChQUCAmJiBQUDIp
IHsKKyAgICBpbnQgcmVzID0gKCpQUCkuY29tcGFyZSgqUFAyKTsKKyAgICBpZiAocmVzICE9IDAp
CisgICAgICByZXR1cm4gcmVzOworICAgICsrUFA7CisgICAgKytQUDI7CisgIH0KKyAgaWYgKFBQ
LlN0YXRlID09IFBQMi5TdGF0ZSAmJiAhUFApCisgICAgcmV0dXJuIDA7CisgIGlmICghUFApCisg
ICAgcmV0dXJuIC0xOworICByZXR1cm4gMTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8g
cGF0aC5ub25tZW1iZXJzCitzaXplX3QgaGFzaF92YWx1ZShjb25zdCBwYXRoJiBfX3ApIG5vZXhj
ZXB0IHsKKyAgYXV0byBQUCA9IFBhdGhQYXJzZXI6OkNyZWF0ZUJlZ2luKF9fcC5uYXRpdmUoKSk7
CisgIHNpemVfdCBoYXNoX3ZhbHVlID0gMDsKKyAgaGFzaDxzdHJpbmdfdmlld190PiBoYXNoZXI7
CisgIHdoaWxlIChQUCkgeworICAgIGhhc2hfdmFsdWUgPSBfX2hhc2hfY29tYmluZShoYXNoX3Zh
bHVlLCBoYXNoZXIoKlBQKSk7CisgICAgKytQUDsKKyAgfQorICByZXR1cm4gaGFzaF92YWx1ZTsK
K30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gcGF0aC5pdHIKK3BhdGg6Oml0ZXJhdG9yIHBh
dGg6OmJlZ2luKCkgY29uc3QgeworICBhdXRvIFBQID0gUGF0aFBhcnNlcjo6Q3JlYXRlQmVnaW4o
X19wbl8pOworICBpdGVyYXRvciBpdDsKKyAgaXQuX19wYXRoX3B0cl8gPSB0aGlzOworICBpdC5f
X3N0YXRlXyA9IHN0YXRpY19jYXN0PHBhdGg6Oml0ZXJhdG9yOjpfUGFyc2VyU3RhdGU+KFBQLlN0
YXRlKTsKKyAgaXQuX19lbnRyeV8gPSBQUC5SYXdFbnRyeTsKKyAgaXQuX19zdGFzaGVkX2VsZW1f
Ll9fYXNzaWduX3ZpZXcoKlBQKTsKKyAgcmV0dXJuIGl0OworfQorCitwYXRoOjppdGVyYXRvciBw
YXRoOjplbmQoKSBjb25zdCB7CisgIGl0ZXJhdG9yIGl0e307CisgIGl0Ll9fc3RhdGVfID0gcGF0
aDo6aXRlcmF0b3I6Ol9BdEVuZDsKKyAgaXQuX19wYXRoX3B0cl8gPSB0aGlzOworICByZXR1cm4g
aXQ7Cit9CisKK3BhdGg6Oml0ZXJhdG9yJiBwYXRoOjppdGVyYXRvcjo6X19pbmNyZW1lbnQoKSB7
CisgIFBhdGhQYXJzZXIgUFAoX19wYXRoX3B0cl8tPm5hdGl2ZSgpLCBfX2VudHJ5XywgX19zdGF0
ZV8pOworICArK1BQOworICBfX3N0YXRlXyA9IHN0YXRpY19jYXN0PF9QYXJzZXJTdGF0ZT4oUFAu
U3RhdGUpOworICBfX2VudHJ5XyA9IFBQLlJhd0VudHJ5OworICBfX3N0YXNoZWRfZWxlbV8uX19h
c3NpZ25fdmlldygqUFApOworICByZXR1cm4gKnRoaXM7Cit9CisKK3BhdGg6Oml0ZXJhdG9yJiBw
YXRoOjppdGVyYXRvcjo6X19kZWNyZW1lbnQoKSB7CisgIFBhdGhQYXJzZXIgUFAoX19wYXRoX3B0
cl8tPm5hdGl2ZSgpLCBfX2VudHJ5XywgX19zdGF0ZV8pOworICAtLVBQOworICBfX3N0YXRlXyA9
IHN0YXRpY19jYXN0PF9QYXJzZXJTdGF0ZT4oUFAuU3RhdGUpOworICBfX2VudHJ5XyA9IFBQLlJh
d0VudHJ5OworICBfX3N0YXNoZWRfZWxlbV8uX19hc3NpZ25fdmlldygqUFApOworICByZXR1cm4g
KnRoaXM7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGlyZWN0b3J5IGVudHJ5IGRlZmluaXRpb25zCisvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCisKKyNpZm5kZWYgX0xJQkNQUF9XSU4zMkFQSQorZXJyb3JfY29kZSBkaXJlY3RvcnlfZW50
cnk6Ol9fZG9fcmVmcmVzaCgpIG5vZXhjZXB0IHsKKyAgX19kYXRhXy5fX3Jlc2V0KCk7CisgIGVy
cm9yX2NvZGUgZmFpbHVyZV9lYzsKKworICBTdGF0VCBmdWxsX3N0OworICBmaWxlX3N0YXR1cyBz
dCA9IGRldGFpbDo6cG9zaXhfbHN0YXQoX19wXywgZnVsbF9zdCwgJmZhaWx1cmVfZWMpOworICBp
ZiAoIXN0YXR1c19rbm93bihzdCkpIHsKKyAgICBfX2RhdGFfLl9fcmVzZXQoKTsKKyAgICByZXR1
cm4gZmFpbHVyZV9lYzsKKyAgfQorCisgIGlmICghX1ZTVERfRlM6OmV4aXN0cyhzdCkgfHwgIV9W
U1REX0ZTOjppc19zeW1saW5rKHN0KSkgeworICAgIF9fZGF0YV8uX19jYWNoZV90eXBlXyA9IGRp
cmVjdG9yeV9lbnRyeTo6X1JlZnJlc2hOb25TeW1saW5rOworICAgIF9fZGF0YV8uX190eXBlXyA9
IHN0LnR5cGUoKTsKKyAgICBfX2RhdGFfLl9fbm9uX3N5bV9wZXJtc18gPSBzdC5wZXJtaXNzaW9u
cygpOworICB9IGVsc2UgeyAvLyB3ZSBoYXZlIGEgc3ltbGluaworICAgIF9fZGF0YV8uX19zeW1f
cGVybXNfID0gc3QucGVybWlzc2lvbnMoKTsKKyAgICAvLyBHZXQgdGhlIGluZm9ybWF0aW9uIGFi
b3V0IHRoZSBsaW5rZWQgZW50aXR5LgorICAgIC8vIElnbm9yZSBlcnJvcnMgZnJvbSBzdGF0LCBz
aW5jZSB3ZSBkb24ndCB3YW50IGVycm9ycyByZWdhcmRpbmcgc3ltbGluaworICAgIC8vIHJlc29s
dXRpb24gdG8gYmUgcmVwb3J0ZWQgdG8gdGhlIHVzZXIuCisgICAgZXJyb3JfY29kZSBpZ25vcmVk
X2VjOworICAgIHN0ID0gZGV0YWlsOjpwb3NpeF9zdGF0KF9fcF8sIGZ1bGxfc3QsICZpZ25vcmVk
X2VjKTsKKworICAgIF9fZGF0YV8uX190eXBlXyA9IHN0LnR5cGUoKTsKKyAgICBfX2RhdGFfLl9f
bm9uX3N5bV9wZXJtc18gPSBzdC5wZXJtaXNzaW9ucygpOworCisgICAgLy8gSWYgd2UgZmFpbGVk
IHRvIHJlc29sdmUgdGhlIGxpbmssIHRoZW4gb25seSBwYXJ0aWFsbHkgcG9wdWxhdGUgdGhlCisg
ICAgLy8gY2FjaGUuCisgICAgaWYgKCFzdGF0dXNfa25vd24oc3QpKSB7CisgICAgICBfX2RhdGFf
Ll9fY2FjaGVfdHlwZV8gPSBkaXJlY3RvcnlfZW50cnk6Ol9SZWZyZXNoU3ltbGlua1VucmVzb2x2
ZWQ7CisgICAgICByZXR1cm4gZXJyb3JfY29kZXt9OworICAgIH0KKyAgICAvLyBPdGhlcndpc2Us
IHdlIHJlc29sdmVkIHRoZSBsaW5rLCBwb3RlbnRpYWxseSBhcyBub3QgZXhpc3RpbmcuCisgICAg
Ly8gVGhhdCdzIE9LLgorICAgIF9fZGF0YV8uX19jYWNoZV90eXBlXyA9IGRpcmVjdG9yeV9lbnRy
eTo6X1JlZnJlc2hTeW1saW5rOworICB9CisKKyAgaWYgKF9WU1REX0ZTOjppc19yZWd1bGFyX2Zp
bGUoc3QpKQorICAgIF9fZGF0YV8uX19zaXplXyA9IHN0YXRpY19jYXN0PHVpbnRtYXhfdD4oZnVs
bF9zdC5zdF9zaXplKTsKKworICBpZiAoX1ZTVERfRlM6OmV4aXN0cyhzdCkpIHsKKyAgICBfX2Rh
dGFfLl9fbmxpbmtfID0gc3RhdGljX2Nhc3Q8dWludG1heF90PihmdWxsX3N0LnN0X25saW5rKTsK
KworICAgIC8vIEF0dGVtcHQgdG8gZXh0cmFjdCB0aGUgbXRpbWUsIGFuZCBmYWlsIGlmIGl0J3Mg
bm90IHJlcHJlc2VudGFibGUgdXNpbmcKKyAgICAvLyBmaWxlX3RpbWVfdHlwZS4gRm9yIG5vdyB3
ZSBpZ25vcmUgdGhlIGVycm9yLCBhcyB3ZSdsbCByZXBvcnQgaXQgd2hlbgorICAgIC8vIHRoZSB2
YWx1ZSBpcyBhY3R1YWxseSB1c2VkLgorICAgIGVycm9yX2NvZGUgaWdub3JlZF9lYzsKKyAgICBf
X2RhdGFfLl9fd3JpdGVfdGltZV8gPQorICAgICAgICBfX2V4dHJhY3RfbGFzdF93cml0ZV90aW1l
KF9fcF8sIGZ1bGxfc3QsICZpZ25vcmVkX2VjKTsKKyAgfQorCisgIHJldHVybiBmYWlsdXJlX2Vj
OworfQorI2Vsc2UKK2Vycm9yX2NvZGUgZGlyZWN0b3J5X2VudHJ5OjpfX2RvX3JlZnJlc2goKSBu
b2V4Y2VwdCB7CisgIF9fZGF0YV8uX19yZXNldCgpOworICBlcnJvcl9jb2RlIGZhaWx1cmVfZWM7
CisKKyAgZmlsZV9zdGF0dXMgc3QgPSBfVlNURF9GUzo6c3ltbGlua19zdGF0dXMoX19wXywgZmFp
bHVyZV9lYyk7CisgIGlmICghc3RhdHVzX2tub3duKHN0KSkgeworICAgIF9fZGF0YV8uX19yZXNl
dCgpOworICAgIHJldHVybiBmYWlsdXJlX2VjOworICB9CisKKyAgaWYgKCFfVlNURF9GUzo6ZXhp
c3RzKHN0KSB8fCAhX1ZTVERfRlM6OmlzX3N5bWxpbmsoc3QpKSB7CisgICAgX19kYXRhXy5fX2Nh
Y2hlX3R5cGVfID0gZGlyZWN0b3J5X2VudHJ5OjpfUmVmcmVzaE5vblN5bWxpbms7CisgICAgX19k
YXRhXy5fX3R5cGVfID0gc3QudHlwZSgpOworICAgIF9fZGF0YV8uX19ub25fc3ltX3Blcm1zXyA9
IHN0LnBlcm1pc3Npb25zKCk7CisgIH0gZWxzZSB7IC8vIHdlIGhhdmUgYSBzeW1saW5rCisgICAg
X19kYXRhXy5fX3N5bV9wZXJtc18gPSBzdC5wZXJtaXNzaW9ucygpOworICAgIC8vIEdldCB0aGUg
aW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpbmtlZCBlbnRpdHkuCisgICAgLy8gSWdub3JlIGVycm9y
cyBmcm9tIHN0YXQsIHNpbmNlIHdlIGRvbid0IHdhbnQgZXJyb3JzIHJlZ2FyZGluZyBzeW1saW5r
CisgICAgLy8gcmVzb2x1dGlvbiB0byBiZSByZXBvcnRlZCB0byB0aGUgdXNlci4KKyAgICBlcnJv
cl9jb2RlIGlnbm9yZWRfZWM7CisgICAgc3QgPSBfVlNURF9GUzo6c3RhdHVzKF9fcF8sIGlnbm9y
ZWRfZWMpOworCisgICAgX19kYXRhXy5fX3R5cGVfID0gc3QudHlwZSgpOworICAgIF9fZGF0YV8u
X19ub25fc3ltX3Blcm1zXyA9IHN0LnBlcm1pc3Npb25zKCk7CisKKyAgICAvLyBJZiB3ZSBmYWls
ZWQgdG8gcmVzb2x2ZSB0aGUgbGluaywgdGhlbiBvbmx5IHBhcnRpYWxseSBwb3B1bGF0ZSB0aGUK
KyAgICAvLyBjYWNoZS4KKyAgICBpZiAoIXN0YXR1c19rbm93bihzdCkpIHsKKyAgICAgIF9fZGF0
YV8uX19jYWNoZV90eXBlXyA9IGRpcmVjdG9yeV9lbnRyeTo6X1JlZnJlc2hTeW1saW5rVW5yZXNv
bHZlZDsKKyAgICAgIHJldHVybiBlcnJvcl9jb2Rle307CisgICAgfQorICAgIF9fZGF0YV8uX19j
YWNoZV90eXBlXyA9IGRpcmVjdG9yeV9lbnRyeTo6X1JlZnJlc2hTeW1saW5rOworICB9CisKKyAg
Ly8gRklYTUU6IFRoaXMgaXMgY3VycmVudGx5IGJyb2tlbiwgYW5kIHRoZSBpbXBsZW1lbnRhdGlv
biBvbmx5IGEgcGxhY2Vob2xkZXIuCisgIC8vIFdlIG5lZWQgdG8gY2FjaGUgbGFzdF93cml0ZV90
aW1lLCBmaWxlX3NpemUsIGFuZCBoYXJkX2xpbmtfY291bnQgaGVyZSBiZWZvcmUKKyAgLy8gdGhl
IGltcGxlbWVudGF0aW9uIGFjdHVhbGx5IHdvcmtzLgorCisgIHJldHVybiBmYWlsdXJlX2VjOwor
fQorI2VuZGlmCisKK19MSUJDUFBfRU5EX05BTUVTUEFDRV9GSUxFU1lTVEVNCisKKy8qIC0tIEVO
RCBmaWxlc3lzdGVtL29wZXJhdGlvbnMuY3BwIC0tICovCisKKyNlbmRpZiAvLyBfX01BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgMTAxNTAwCisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQpJ
bmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdGRGaWxlc3lzdGVtLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdGRGaWxlc3lzdGVtLmgJKG5vbmV4aXN0ZW50KQor
KysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdGRGaWxlc3lzdGVtLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyNzAwIEBACisvLyAtKi0gQysrIC0qLQorLy89PT0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gZmlsZXN5c3RlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09
Ly8KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBpbGVyIEluZnJhc3Ry
dWN0dXJlCisvLworLy8gVGhpcyBmaWxlIGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBh
bmQgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgT3BlbgorLy8gU291cmNlIExpY2Vuc2VzLiBT
ZWUgTElDRU5TRS5UWFQgZm9yIGRldGFpbHMuCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8K
KworI2lmIF9faGFzX2luY2x1ZGUoPGZpbGVzeXN0ZW0+KQorI2luY2x1ZGUgPGZpbGVzeXN0ZW0+
CisjZWxzZQorCisvKiBJbXBvcnRzIGEgY29weSBvZiA8ZmlsZXN5c3RlbT4gZnJvbSByMzQzODM4
IG9mIHRoZSBsaWJjKysgcHJvamVjdC4gKi8KKworI2lmbmRlZiBfTElCQ1BQX0ZJTEVTWVNURU0K
KyNkZWZpbmUgX0xJQkNQUF9GSUxFU1lTVEVNCisvKgorICAgIGZpbGVzeXN0ZW0gc3lub3BzaXMK
KworICAgIG5hbWVzcGFjZSBzdGQgeyBuYW1lc3BhY2UgZmlsZXN5c3RlbSB7CisKKyAgICBjbGFz
cyBwYXRoOworCisgICAgdm9pZCBzd2FwKHBhdGgmIGxocywgcGF0aCYgcmhzKSBub2V4Y2VwdDsK
KyAgICBzaXplX3QgaGFzaF92YWx1ZShjb25zdCBwYXRoJiBwKSBub2V4Y2VwdDsKKworICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBwYXRoJiBsaHMsIGNvbnN0IHBhdGgmIHJocykgbm9leGNlcHQ7
CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHBhdGgmIGxocywgY29uc3QgcGF0aCYgcmhzKSBu
b2V4Y2VwdDsKKyAgICBib29sIG9wZXJhdG9yPCAoY29uc3QgcGF0aCYgbGhzLCBjb25zdCBwYXRo
JiByaHMpIG5vZXhjZXB0OworICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBwYXRoJiBsaHMsIGNv
bnN0IHBhdGgmIHJocykgbm9leGNlcHQ7CisgICAgYm9vbCBvcGVyYXRvcj4gKGNvbnN0IHBhdGgm
IGxocywgY29uc3QgcGF0aCYgcmhzKSBub2V4Y2VwdDsKKyAgICBib29sIG9wZXJhdG9yPj0oY29u
c3QgcGF0aCYgbGhzLCBjb25zdCBwYXRoJiByaHMpIG5vZXhjZXB0OworCisgICAgcGF0aCBvcGVy
YXRvci8gKGNvbnN0IHBhdGgmIGxocywgY29uc3QgcGF0aCYgcmhzKTsKKworICAgIC8vIGZzLnBh
dGguaW8gb3BlcmF0b3JzIGFyZSBmcmllbmRzIG9mIHBhdGguCisgICAgdGVtcGxhdGUgPGNsYXNz
IGNoYXJULCBjbGFzcyB0cmFpdHM+CisgICAgZnJpZW5kIGJhc2ljX29zdHJlYW08Y2hhclQsIHRy
YWl0cz4mCisgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXJULCB0cmFpdHM+JiBvcywg
Y29uc3QgcGF0aCYgcCk7CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0
cz4KKyAgICBmcmllbmQgYmFzaWNfaXN0cmVhbTxjaGFyVCwgdHJhaXRzPiYKKyAgICBvcGVyYXRv
cj4+KGJhc2ljX2lzdHJlYW08Y2hhclQsIHRyYWl0cz4mIGlzLCBwYXRoJiBwKTsKKworICAgIHRl
bXBsYXRlIDxjbGFzcyBTb3VyY2U+CisgICAgICBwYXRoIHU4cGF0aChjb25zdCBTb3VyY2UmIHNv
dXJjZSk7CisgICAgdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3I+CisgICAgICBwYXRoIHU4
cGF0aChJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QpOworCisgICAgY2xh
c3MgZmlsZXN5c3RlbV9lcnJvcjsKKyAgICBjbGFzcyBkaXJlY3RvcnlfZW50cnk7CisKKyAgICBj
bGFzcyBkaXJlY3RvcnlfaXRlcmF0b3I7CisKKyAgICAvLyBlbmFibGUgZGlyZWN0b3J5X2l0ZXJh
dG9yIHJhbmdlLWJhc2VkIGZvciBzdGF0ZW1lbnRzCisgICAgZGlyZWN0b3J5X2l0ZXJhdG9yIGJl
Z2luKGRpcmVjdG9yeV9pdGVyYXRvciBpdGVyKSBub2V4Y2VwdDsKKyAgICBkaXJlY3RvcnlfaXRl
cmF0b3IgZW5kKGNvbnN0IGRpcmVjdG9yeV9pdGVyYXRvciYpIG5vZXhjZXB0OworCisgICAgY2xh
c3MgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjsKKworICAgIC8vIGVuYWJsZSByZWN1cnNp
dmVfZGlyZWN0b3J5X2l0ZXJhdG9yIHJhbmdlLWJhc2VkIGZvciBzdGF0ZW1lbnRzCisgICAgcmVj
dXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciBiZWdpbihyZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJh
dG9yIGl0ZXIpIG5vZXhjZXB0OworICAgIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IgZW5k
KGNvbnN0IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3ImKSBub2V4Y2VwdDsKKworICAgIGNs
YXNzIGZpbGVfc3RhdHVzOworCisgICAgc3RydWN0IHNwYWNlX2luZm8KKyAgICB7CisgICAgICB1
aW50bWF4X3QgY2FwYWNpdHk7CisgICAgICB1aW50bWF4X3QgZnJlZTsKKyAgICAgIHVpbnRtYXhf
dCBhdmFpbGFibGU7CisgICAgfTsKKworICAgIGVudW0gY2xhc3MgZmlsZV90eXBlOworICAgIGVu
dW0gY2xhc3MgcGVybXM7CisgICAgZW51bSBjbGFzcyBwZXJtX29wdGlvbnM7CisgICAgZW51bSBj
bGFzcyBjb3B5X29wdGlvbnM7CisgICAgZW51bSBjbGFzcyBkaXJlY3Rvcnlfb3B0aW9uczsKKwor
ICAgIHR5cGVkZWYgY2hyb25vOjp0aW1lX3BvaW50PHRyaXZpYWwtY2xvY2s+ICBmaWxlX3RpbWVf
dHlwZTsKKworICAgIC8vIG9wZXJhdGlvbmFsIGZ1bmN0aW9ucworCisgICAgcGF0aCBhYnNvbHV0
ZShjb25zdCBwYXRoJiBwKTsKKyAgICBwYXRoIGFic29sdXRlKGNvbnN0IHBhdGgmIHAsIGVycm9y
X2NvZGUgJmVjKTsKKworICAgIHBhdGggY2Fub25pY2FsKGNvbnN0IHBhdGgmIHApOworICAgIHBh
dGggY2Fub25pY2FsKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKTsKKworICAgIHZvaWQg
Y29weShjb25zdCBwYXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0byk7CisgICAgdm9pZCBjb3B5KGNv
bnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvLCBlcnJvcl9jb2RlJiBlYyk7CisgICAgdm9p
ZCBjb3B5KGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvLCBjb3B5X29wdGlvbnMgb3B0
aW9ucyk7CisgICAgdm9pZCBjb3B5KGNvbnN0IHBhdGgmIGZyb20sIGNvbnN0IHBhdGgmIHRvLCBj
b3B5X29wdGlvbnMgb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYyk7
CisKKyAgICBib29sIGNvcHlfZmlsZShjb25zdCBwYXRoJiBmcm9tLCBjb25zdCBwYXRoJiB0byk7
CisgICAgYm9vbCBjb3B5X2ZpbGUoY29uc3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8sIGVy
cm9yX2NvZGUmIGVjKTsKKyAgICBib29sIGNvcHlfZmlsZShjb25zdCBwYXRoJiBmcm9tLCBjb25z
dCBwYXRoJiB0bywgY29weV9vcHRpb25zIG9wdGlvbik7CisgICAgYm9vbCBjb3B5X2ZpbGUoY29u
c3QgcGF0aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8sIGNvcHlfb3B0aW9ucyBvcHRpb24sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYyk7CisKKyAgICB2b2lkIGNvcHlf
c3ltbGluayhjb25zdCBwYXRoJiBleGlzdGluZ19zeW1saW5rLCBjb25zdCBwYXRoJiBuZXdfc3lt
bGluayk7CisgICAgdm9pZCBjb3B5X3N5bWxpbmsoY29uc3QgcGF0aCYgZXhpc3Rpbmdfc3ltbGlu
aywgY29uc3QgcGF0aCYgbmV3X3N5bWxpbmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29sIGNyZWF0ZV9kaXJlY3Rvcmll
cyhjb25zdCBwYXRoJiBwKTsKKyAgICBib29sIGNyZWF0ZV9kaXJlY3Rvcmllcyhjb25zdCBwYXRo
JiBwLCBlcnJvcl9jb2RlJiBlYyk7CisKKyAgICBib29sIGNyZWF0ZV9kaXJlY3RvcnkoY29uc3Qg
cGF0aCYgcCk7CisgICAgYm9vbCBjcmVhdGVfZGlyZWN0b3J5KGNvbnN0IHBhdGgmIHAsIGVycm9y
X2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIGJvb2wgY3JlYXRlX2RpcmVjdG9yeShjb25zdCBw
YXRoJiBwLCBjb25zdCBwYXRoJiBhdHRyaWJ1dGVzKTsKKyAgICBib29sIGNyZWF0ZV9kaXJlY3Rv
cnkoY29uc3QgcGF0aCYgcCwgY29uc3QgcGF0aCYgYXR0cmlidXRlcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICB2b2lk
IGNyZWF0ZV9kaXJlY3Rvcnlfc3ltbGluayhjb25zdCBwYXRoJiB0bywgY29uc3QgcGF0aCYgbmV3
X3N5bWxpbmspOworICAgIHZvaWQgY3JlYXRlX2RpcmVjdG9yeV9zeW1saW5rKGNvbnN0IHBhdGgm
IHRvLCBjb25zdCBwYXRoJiBuZXdfc3ltbGluaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIHZvaWQgY3Jl
YXRlX2hhcmRfbGluayhjb25zdCBwYXRoJiB0bywgY29uc3QgcGF0aCYgbmV3X2hhcmRfbGluayk7
CisgICAgdm9pZCBjcmVhdGVfaGFyZF9saW5rKGNvbnN0IHBhdGgmIHRvLCBjb25zdCBwYXRoJiBu
ZXdfaGFyZF9saW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2Nv
ZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIHZvaWQgY3JlYXRlX3N5bWxpbmsoY29uc3QgcGF0aCYg
dG8sIGNvbnN0IHBhdGgmIG5ld19zeW1saW5rKTsKKyAgICB2b2lkIGNyZWF0ZV9zeW1saW5rKGNv
bnN0IHBhdGgmIHRvLCBjb25zdCBwYXRoJiBuZXdfc3ltbGluaywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgcGF0aCBjdXJy
ZW50X3BhdGgoKTsKKyAgICBwYXRoIGN1cnJlbnRfcGF0aChlcnJvcl9jb2RlJiBlYyk7CisgICAg
dm9pZCBjdXJyZW50X3BhdGgoY29uc3QgcGF0aCYgcCk7CisgICAgdm9pZCBjdXJyZW50X3BhdGgo
Y29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgYm9vbCBleGlz
dHMoZmlsZV9zdGF0dXMgcykgbm9leGNlcHQ7CisgICAgYm9vbCBleGlzdHMoY29uc3QgcGF0aCYg
cCk7CisgICAgYm9vbCBleGlzdHMoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhj
ZXB0OworCisgICAgYm9vbCBlcXVpdmFsZW50KGNvbnN0IHBhdGgmIHAxLCBjb25zdCBwYXRoJiBw
Mik7CisgICAgYm9vbCBlcXVpdmFsZW50KGNvbnN0IHBhdGgmIHAxLCBjb25zdCBwYXRoJiBwMiwg
ZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgdWludG1heF90ICAgIGZpbGVfc2l6ZShj
b25zdCBwYXRoJiBwKTsKKyAgICB1aW50bWF4X3QgICAgZmlsZV9zaXplKGNvbnN0IHBhdGgmIHAs
IGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKworICAgIHVpbnRtYXhfdCAgICBoYXJkX2xpbmtf
Y291bnQoY29uc3QgcGF0aCYgcCk7CisgICAgdWludG1heF90ICAgIGhhcmRfbGlua19jb3VudChj
b25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29sIGlzX2Js
b2NrX2ZpbGUoZmlsZV9zdGF0dXMgcykgbm9leGNlcHQ7CisgICAgYm9vbCBpc19ibG9ja19maWxl
KGNvbnN0IHBhdGgmIHApOworICAgIGJvb2wgaXNfYmxvY2tfZmlsZShjb25zdCBwYXRoJiBwLCBl
cnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29sIGlzX2NoYXJhY3Rlcl9maWxlKGZp
bGVfc3RhdHVzIHMpIG5vZXhjZXB0OworICAgIGJvb2wgaXNfY2hhcmFjdGVyX2ZpbGUoY29uc3Qg
cGF0aCYgcCk7CisgICAgYm9vbCBpc19jaGFyYWN0ZXJfZmlsZShjb25zdCBwYXRoJiBwLCBlcnJv
cl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICBib29sIGlzX2RpcmVjdG9yeShmaWxlX3N0YXR1
cyBzKSBub2V4Y2VwdDsKKyAgICBib29sIGlzX2RpcmVjdG9yeShjb25zdCBwYXRoJiBwKTsKKyAg
ICBib29sIGlzX2RpcmVjdG9yeShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNl
cHQ7CisKKyAgICBib29sIGlzX2VtcHR5KGNvbnN0IHBhdGgmIHApOworICAgIGJvb2wgaXNfZW1w
dHkoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgYm9vbCBp
c19maWZvKGZpbGVfc3RhdHVzIHMpIG5vZXhjZXB0OworICAgIGJvb2wgaXNfZmlmbyhjb25zdCBw
YXRoJiBwKTsKKyAgICBib29sIGlzX2ZpZm8oY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMp
IG5vZXhjZXB0OworCisgICAgYm9vbCBpc19vdGhlcihmaWxlX3N0YXR1cyBzKSBub2V4Y2VwdDsK
KyAgICBib29sIGlzX290aGVyKGNvbnN0IHBhdGgmIHApOworICAgIGJvb2wgaXNfb3RoZXIoY29u
c3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgYm9vbCBpc19yZWd1
bGFyX2ZpbGUoZmlsZV9zdGF0dXMgcykgbm9leGNlcHQ7CisgICAgYm9vbCBpc19yZWd1bGFyX2Zp
bGUoY29uc3QgcGF0aCYgcCk7CisgICAgYm9vbCBpc19yZWd1bGFyX2ZpbGUoY29uc3QgcGF0aCYg
cCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgYm9vbCBpc19zb2NrZXQoZmlsZV9z
dGF0dXMgcykgbm9leGNlcHQ7CisgICAgYm9vbCBpc19zb2NrZXQoY29uc3QgcGF0aCYgcCk7Cisg
ICAgYm9vbCBpc19zb2NrZXQoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0
OworCisgICAgYm9vbCBpc19zeW1saW5rKGZpbGVfc3RhdHVzIHMpIG5vZXhjZXB0OworICAgIGJv
b2wgaXNfc3ltbGluayhjb25zdCBwYXRoJiBwKTsKKyAgICBib29sIGlzX3N5bWxpbmsoY29uc3Qg
cGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgZmlsZV90aW1lX3R5cGUg
IGxhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBwKTsKKyAgICBmaWxlX3RpbWVfdHlwZSAgbGFz
dF93cml0ZV90aW1lKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2VwdDsKKyAg
ICB2b2lkIGxhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBwLCBmaWxlX3RpbWVfdHlwZSBuZXdf
dGltZSk7CisgICAgdm9pZCBsYXN0X3dyaXRlX3RpbWUoY29uc3QgcGF0aCYgcCwgZmlsZV90aW1l
X3R5cGUgbmV3X3RpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9j
b2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICB2b2lkIHBlcm1pc3Npb25zKGNvbnN0IHBhdGgmIHAs
IHBlcm1zIHBybXMsCisgICAgICAgICAgICAgICAgICAgICBwZXJtX29wdGlvbnMgb3B0cz1wZXJt
X29wdGlvbnM6OnJlcGxhY2UpOworICAgIHZvaWQgcGVybWlzc2lvbnMoY29uc3QgcGF0aCYgcCwg
cGVybXMgcHJtcywgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworICAgIHZvaWQgcGVybWlzc2lv
bnMoY29uc3QgcGF0aCYgcCwgcGVybXMgcHJtcywgcGVybV9vcHRpb25zIG9wdHMsCisgICAgICAg
ICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBlYyk7CisKKyAgICBwYXRoIHByb3hpbWF0ZShjb25z
dCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYyk7CisgICAgcGF0aCBwcm94aW1hdGUoY29uc3QgcGF0
aCYgcCwgY29uc3QgcGF0aCYgYmFzZSA9IGN1cnJlbnRfcGF0aCgpKTsKKyAgICBwYXRoIHByb3hp
bWF0ZShjb25zdCBwYXRoJiBwLCBjb25zdCBwYXRoJiBiYXNlLCBlcnJvcl9jb2RlICZlYyk7CisK
KyAgICBwYXRoIHJlYWRfc3ltbGluayhjb25zdCBwYXRoJiBwKTsKKyAgICBwYXRoIHJlYWRfc3lt
bGluayhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYyk7CisKKyAgICBwYXRoIHJlbGF0aXZl
KGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKTsKKyAgICBwYXRoIHJlbGF0aXZlKGNvbnN0
IHBhdGgmIHAsIGNvbnN0IHBhdGgmIGJhc2U9Y3VycmVudF9wYXRoKCkpOworICAgIHBhdGggcmVs
YXRpdmUoY29uc3QgcGF0aCYgcCwgY29uc3QgcGF0aCYgYmFzZSwgZXJyb3JfY29kZSYgZWMpOwor
CisgICAgYm9vbCByZW1vdmUoY29uc3QgcGF0aCYgcCk7CisgICAgYm9vbCByZW1vdmUoY29uc3Qg
cGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0OworCisgICAgdWludG1heF90ICAgIHJl
bW92ZV9hbGwoY29uc3QgcGF0aCYgcCk7CisgICAgdWludG1heF90ICAgIHJlbW92ZV9hbGwoY29u
c3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpOworCisgICAgdm9pZCByZW5hbWUoY29uc3QgcGF0
aCYgZnJvbSwgY29uc3QgcGF0aCYgdG8pOworICAgIHZvaWQgcmVuYW1lKGNvbnN0IHBhdGgmIGZy
b20sIGNvbnN0IHBhdGgmIHRvLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisKKyAgICB2b2lk
IHJlc2l6ZV9maWxlKGNvbnN0IHBhdGgmIHAsIHVpbnRtYXhfdCBzaXplKTsKKyAgICB2b2lkIHJl
c2l6ZV9maWxlKGNvbnN0IHBhdGgmIHAsIHVpbnRtYXhfdCBzaXplLCBlcnJvcl9jb2RlJiBlYykg
bm9leGNlcHQ7CisKKyAgICBzcGFjZV9pbmZvICAgc3BhY2UoY29uc3QgcGF0aCYgcCk7CisgICAg
c3BhY2VfaW5mbyAgIHNwYWNlKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUmIGVjKSBub2V4Y2Vw
dDsKKworICAgIGZpbGVfc3RhdHVzICBzdGF0dXMoY29uc3QgcGF0aCYgcCk7CisgICAgZmlsZV9z
dGF0dXMgIHN0YXR1cyhjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlJiBlYykgbm9leGNlcHQ7CisK
KyAgICBib29sIHN0YXR1c19rbm93bihmaWxlX3N0YXR1cyBzKSBub2V4Y2VwdDsKKworICAgIGZp
bGVfc3RhdHVzICBzeW1saW5rX3N0YXR1cyhjb25zdCBwYXRoJiBwKTsKKyAgICBmaWxlX3N0YXR1
cyAgc3ltbGlua19zdGF0dXMoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSYgZWMpIG5vZXhjZXB0
OworCisgICAgcGF0aCB0ZW1wX2RpcmVjdG9yeV9wYXRoKCk7CisgICAgcGF0aCB0ZW1wX2RpcmVj
dG9yeV9wYXRoKGVycm9yX2NvZGUmIGVjKTsKKworICAgIHBhdGggd2Vha2x5X2Nhbm9uaWNhbChw
YXRoIGNvbnN0JiBwKTsKKyAgICBwYXRoIHdlYWtseV9jYW5vbmljYWwocGF0aCBjb25zdCYgcCwg
ZXJyb3JfY29kZSYgZWMpOworCisKK30gfSAgLy8gbmFtZXNwYWNlcyBzdGQ6OmZpbGVzeXN0ZW0K
KworKi8KKworI2luY2x1ZGUgPF9fY29uZmlnPgorI2luY2x1ZGUgPGNzdGRkZWY+CisjaW5jbHVk
ZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxjaHJvbm8+CisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5j
bHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPGxvY2FsZT4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5j
bHVkZSA8c3RhY2s+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHN5c3RlbV9lcnJvcj4K
KyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPGlvbWFuaXA+IC8vIGZvciBxdW90ZWQKKyNp
bmNsdWRlIDxzdHJpbmdfdmlldz4KKy8qICNpbmNsdWRlIDx2ZXJzaW9uPiAqLworCisjaW5jbHVk
ZSA8X19kZWJ1Zz4KKworI2lmIF9MSUJDUFBfU1REX1ZFUiA+PSAxNworI2RlZmluZSBfTElCQ1BQ
X0JFR0lOX05BTUVTUEFDRV9GSUxFU1lTVEVNIFwKKyAgX0xJQkNQUF9CRUdJTl9OQU1FU1BBQ0Vf
U1REIGlubGluZSBuYW1lc3BhY2UgX19mcyB7IG5hbWVzcGFjZSBmaWxlc3lzdGVtIHsKKyNlbHNl
CisjZGVmaW5lIF9MSUJDUFBfQkVHSU5fTkFNRVNQQUNFX0ZJTEVTWVNURU0gXAorICBfTElCQ1BQ
X0JFR0lOX05BTUVTUEFDRV9TVEQgbmFtZXNwYWNlIF9fZnMgeyBuYW1lc3BhY2UgZmlsZXN5c3Rl
bSB7CisjZW5kaWYKKworI2RlZmluZSBfTElCQ1BQX0VORF9OQU1FU1BBQ0VfRklMRVNZU1RFTSBc
CisgIF9MSUJDUFBfRU5EX05BTUVTUEFDRV9TVEQgfSB9CisKKyNkZWZpbmUgX1ZTVERfRlMgX1ZT
VEQ6Ol9fZnM6OmZpbGVzeXN0ZW0KKworI2lmICFkZWZpbmVkKF9MSUJDUFBfSEFTX05PX1BSQUdN
QV9TWVNURU1fSEVBREVSKQorI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorI2VuZGlmCisKK19M
SUJDUFBfUFVTSF9NQUNST1MKKyNpbmNsdWRlIDxfX3VuZGVmX21hY3Jvcz4KKworI2lmbmRlZiBf
TElCQ1BQX0NYWDAzX0xBTkcKKworX0xJQkNQUF9CRUdJTl9OQU1FU1BBQ0VfRklMRVNZU1RFTQor
CitzdHJ1Y3QgX0ZpbGVzeXN0ZW1DbG9jayB7CisjaWYgIWRlZmluZWQoX0xJQkNQUF9IQVNfTk9f
SU5UMTI4KQorICB0eXBlZGVmIF9faW50MTI4X3QgcmVwOworICB0eXBlZGVmIG5hbm8gcGVyaW9k
OworI2Vsc2UKKyAgdHlwZWRlZiBsb25nIGxvbmcgcmVwOworICB0eXBlZGVmIG5hbm8gcGVyaW9k
OworI2VuZGlmCisKKyAgdHlwZWRlZiBjaHJvbm86OmR1cmF0aW9uPHJlcCwgcGVyaW9kPiBkdXJh
dGlvbjsKKyAgdHlwZWRlZiBjaHJvbm86OnRpbWVfcG9pbnQ8X0ZpbGVzeXN0ZW1DbG9jaz4gdGlt
ZV9wb2ludDsKKworICBzdGF0aWMgX0xJQkNQUF9DT05TVEVYUFJfQUZURVJfQ1hYMTEgY29uc3Qg
Ym9vbCBpc19zdGVhZHkgPSBmYWxzZTsKKworICBfTElCQ1BQX0ZVTkNfVklTIHN0YXRpYyB0aW1l
X3BvaW50IG5vdygpIG5vZXhjZXB0OworCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAg
c3RhdGljIHRpbWVfdCB0b190aW1lX3QoY29uc3QgdGltZV9wb2ludCYgX190KSBub2V4Y2VwdCB7
CisgICAgdHlwZWRlZiBjaHJvbm86OmR1cmF0aW9uPHJlcD4gX19zZWNzOworICAgIHJldHVybiB0
aW1lX3QoCisgICAgICAgIGNocm9ubzo6ZHVyYXRpb25fY2FzdDxfX3NlY3M+KF9fdC50aW1lX3Np
bmNlX2Vwb2NoKCkpLmNvdW50KCkpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQorICBzdGF0aWMgdGltZV9wb2ludCBmcm9tX3RpbWVfdCh0aW1lX3QgX190KSBub2V4Y2VwdCB7
CisgICAgdHlwZWRlZiBjaHJvbm86OmR1cmF0aW9uPHJlcD4gX19zZWNzOworICAgIHJldHVybiB0
aW1lX3BvaW50KF9fc2VjcyhfX3QpKTsKKyAgfQorfTsKKwordHlwZWRlZiBjaHJvbm86OnRpbWVf
cG9pbnQ8X0ZpbGVzeXN0ZW1DbG9jaz4gZmlsZV90aW1lX3R5cGU7CisKK3N0cnVjdCBfTElCQ1BQ
X1RZUEVfVklTIHNwYWNlX2luZm8geworICB1aW50bWF4X3QgY2FwYWNpdHk7CisgIHVpbnRtYXhf
dCBmcmVlOworICB1aW50bWF4X3QgYXZhaWxhYmxlOworfTsKKworZW51bSBjbGFzcyBfTElCQ1BQ
X0VOVU1fVklTIGZpbGVfdHlwZSA6IHNpZ25lZCBjaGFyIHsKKyAgbm9uZSA9IDAsCisgIG5vdF9m
b3VuZCA9IC0xLAorICByZWd1bGFyID0gMSwKKyAgZGlyZWN0b3J5ID0gMiwKKyAgc3ltbGluayA9
IDMsCisgIGJsb2NrID0gNCwKKyAgY2hhcmFjdGVyID0gNSwKKyAgZmlmbyA9IDYsCisgIHNvY2tl
dCA9IDcsCisgIHVua25vd24gPSA4Cit9OworCitlbnVtIGNsYXNzIF9MSUJDUFBfRU5VTV9WSVMg
cGVybXMgOiB1bnNpZ25lZCB7CisgIG5vbmUgPSAwLAorCisgIG93bmVyX3JlYWQgPSAwNDAwLAor
ICBvd25lcl93cml0ZSA9IDAyMDAsCisgIG93bmVyX2V4ZWMgPSAwMTAwLAorICBvd25lcl9hbGwg
PSAwNzAwLAorCisgIGdyb3VwX3JlYWQgPSAwNDAsCisgIGdyb3VwX3dyaXRlID0gMDIwLAorICBn
cm91cF9leGVjID0gMDEwLAorICBncm91cF9hbGwgPSAwNzAsCisKKyAgb3RoZXJzX3JlYWQgPSAw
NCwKKyAgb3RoZXJzX3dyaXRlID0gMDIsCisgIG90aGVyc19leGVjID0gMDEsCisgIG90aGVyc19h
bGwgPSAwNywKKworICBhbGwgPSAwNzc3LAorCisgIHNldF91aWQgPSAwNDAwMCwKKyAgc2V0X2dp
ZCA9IDAyMDAwLAorICBzdGlja3lfYml0ID0gMDEwMDAsCisgIG1hc2sgPSAwNzc3NywKKyAgdW5r
bm93biA9IDB4RkZGRiwKK307CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBj
b25zdGV4cHIgcGVybXMgb3BlcmF0b3ImKHBlcm1zIF9MSFMsIHBlcm1zIF9SSFMpIHsKKyAgcmV0
dXJuIHN0YXRpY19jYXN0PHBlcm1zPihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oX0xIUykgJgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihfUkhTKSk7Cit9
CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIgcGVybXMgb3Bl
cmF0b3J8KHBlcm1zIF9MSFMsIHBlcm1zIF9SSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHBl
cm1zPihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oX0xIUykgfAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihfUkhTKSk7Cit9CisKK19MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIgcGVybXMgb3BlcmF0b3JeKHBlcm1zIF9MSFMs
IHBlcm1zIF9SSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHBlcm1zPihzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oX0xIUykgXgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihfUkhTKSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGlu
ZSBjb25zdGV4cHIgcGVybXMgb3BlcmF0b3J+KHBlcm1zIF9MSFMpIHsKKyAgcmV0dXJuIHN0YXRp
Y19jYXN0PHBlcm1zPih+c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KF9MSFMpKTsKK30KKworX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIHBlcm1zJiBvcGVyYXRvciY9KHBlcm1zJiBfTEhT
LCBwZXJtcyBfUkhTKSB7IHJldHVybiBfTEhTID0gX0xIUyAmIF9SSFM7IH0KKworX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWQoraW5saW5lIHBlcm1zJiBvcGVyYXRvcnw9KHBlcm1zJiBfTEhTLCBw
ZXJtcyBfUkhTKSB7IHJldHVybiBfTEhTID0gX0xIUyB8IF9SSFM7IH0KKworX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWQoraW5saW5lIHBlcm1zJiBvcGVyYXRvcl49KHBlcm1zJiBfTEhTLCBwZXJt
cyBfUkhTKSB7IHJldHVybiBfTEhTID0gX0xIUyBeIF9SSFM7IH0KKworZW51bSBjbGFzcyBfTElC
Q1BQX0VOVU1fVklTIHBlcm1fb3B0aW9ucyA6IHVuc2lnbmVkIGNoYXIgeworICByZXBsYWNlID0g
MSwKKyAgYWRkID0gMiwKKyAgcmVtb3ZlID0gNCwKKyAgbm9mb2xsb3cgPSA4Cit9OworCitfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgY29uc3RleHByIHBlcm1fb3B0aW9ucyBvcGVy
YXRvciYocGVybV9vcHRpb25zIF9MSFMsIHBlcm1fb3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBz
dGF0aWNfY2FzdDxwZXJtX29wdGlvbnM+KHN0YXRpY19jYXN0PHVuc2lnbmVkPihfTEhTKSAmCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihf
UkhTKSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIg
cGVybV9vcHRpb25zIG9wZXJhdG9yfChwZXJtX29wdGlvbnMgX0xIUywgcGVybV9vcHRpb25zIF9S
SFMpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHBlcm1fb3B0aW9ucz4oc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KF9MSFMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KF9SSFMpKTsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQor
aW5saW5lIGNvbnN0ZXhwciBwZXJtX29wdGlvbnMgb3BlcmF0b3JeKHBlcm1fb3B0aW9ucyBfTEhT
LCBwZXJtX29wdGlvbnMgX1JIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8cGVybV9vcHRpb25z
PihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oX0xIUykgXgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oX1JIUykpOworfQorCitfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZCitpbmxpbmUgY29uc3RleHByIHBlcm1fb3B0aW9ucyBvcGVyYXRvcn4o
cGVybV9vcHRpb25zIF9MSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHBlcm1fb3B0aW9ucz4o
fnN0YXRpY19jYXN0PHVuc2lnbmVkPihfTEhTKSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkKK2lubGluZSBwZXJtX29wdGlvbnMmIG9wZXJhdG9yJj0ocGVybV9vcHRpb25zJiBfTEhT
LCBwZXJtX29wdGlvbnMgX1JIUykgeworICByZXR1cm4gX0xIUyA9IF9MSFMgJiBfUkhTOworfQor
CitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxpbmUgcGVybV9vcHRpb25zJiBvcGVyYXRv
cnw9KHBlcm1fb3B0aW9ucyYgX0xIUywgcGVybV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIF9M
SFMgPSBfTEhTIHwgX1JIUzsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5l
IHBlcm1fb3B0aW9ucyYgb3BlcmF0b3JePShwZXJtX29wdGlvbnMmIF9MSFMsIHBlcm1fb3B0aW9u
cyBfUkhTKSB7CisgIHJldHVybiBfTEhTID0gX0xIUyBeIF9SSFM7Cit9CisKK2VudW0gY2xhc3Mg
X0xJQkNQUF9FTlVNX1ZJUyBjb3B5X29wdGlvbnMgOiB1bnNpZ25lZCBzaG9ydCB7CisgIG5vbmUg
PSAwLAorICBza2lwX2V4aXN0aW5nID0gMSwKKyAgb3ZlcndyaXRlX2V4aXN0aW5nID0gMiwKKyAg
dXBkYXRlX2V4aXN0aW5nID0gNCwKKyAgcmVjdXJzaXZlID0gOCwKKyAgY29weV9zeW1saW5rcyA9
IDE2LAorICBza2lwX3N5bWxpbmtzID0gMzIsCisgIGRpcmVjdG9yaWVzX29ubHkgPSA2NCwKKyAg
Y3JlYXRlX3N5bWxpbmtzID0gMTI4LAorICBjcmVhdGVfaGFyZF9saW5rcyA9IDI1NiwKKyAgX19p
bl9yZWN1cnNpdmVfY29weSA9IDUxMiwKK307CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
K2lubGluZSBjb25zdGV4cHIgY29weV9vcHRpb25zIG9wZXJhdG9yJihjb3B5X29wdGlvbnMgX0xI
UywgY29weV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PGNvcHlfb3B0aW9u
cz4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9MSFMpICYKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9SSFMpKTsKK30K
KworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhwciBjb3B5X29wdGlv
bnMgb3BlcmF0b3J8KGNvcHlfb3B0aW9ucyBfTEhTLCBjb3B5X29wdGlvbnMgX1JIUykgeworICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y29weV9vcHRpb25zPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9y
dD4oX0xIUykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBzaG9ydD4oX1JIUykpOworfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
CitpbmxpbmUgY29uc3RleHByIGNvcHlfb3B0aW9ucyBvcGVyYXRvcl4oY29weV9vcHRpb25zIF9M
SFMsIGNvcHlfb3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxjb3B5X29wdGlv
bnM+KHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfTEhTKSBeCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfUkhTKSk7Cit9
CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIgY29weV9vcHRp
b25zIG9wZXJhdG9yfihjb3B5X29wdGlvbnMgX0xIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y29weV9vcHRpb25zPih+c3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9MSFMpKTsKK30KKwor
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvcHlfb3B0aW9ucyYgb3BlcmF0b3Im
PShjb3B5X29wdGlvbnMmIF9MSFMsIGNvcHlfb3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBfTEhT
ID0gX0xIUyAmIF9SSFM7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBj
b3B5X29wdGlvbnMmIG9wZXJhdG9yfD0oY29weV9vcHRpb25zJiBfTEhTLCBjb3B5X29wdGlvbnMg
X1JIUykgeworICByZXR1cm4gX0xIUyA9IF9MSFMgfCBfUkhTOworfQorCitfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZCitpbmxpbmUgY29weV9vcHRpb25zJiBvcGVyYXRvcl49KGNvcHlfb3B0aW9u
cyYgX0xIUywgY29weV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIF9MSFMgPSBfTEhTIF4gX1JI
UzsKK30KKworZW51bSBjbGFzcyBfTElCQ1BQX0VOVU1fVklTIGRpcmVjdG9yeV9vcHRpb25zIDog
dW5zaWduZWQgY2hhciB7CisgIG5vbmUgPSAwLAorICBmb2xsb3dfZGlyZWN0b3J5X3N5bWxpbmsg
PSAxLAorICBza2lwX3Blcm1pc3Npb25fZGVuaWVkID0gMgorfTsKKworX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhwciBkaXJlY3Rvcnlfb3B0aW9ucyBvcGVyYXRvciYo
ZGlyZWN0b3J5X29wdGlvbnMgX0xIUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRpcmVjdG9yeV9vcHRpb25zIF9SSFMpIHsKKyAgcmV0dXJuIHN0YXRpY19j
YXN0PGRpcmVjdG9yeV9vcHRpb25zPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfTEhTKSAm
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4oX1JIUykpOworfQorCitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCitpbmxp
bmUgY29uc3RleHByIGRpcmVjdG9yeV9vcHRpb25zIG9wZXJhdG9yfChkaXJlY3Rvcnlfb3B0aW9u
cyBfTEhTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGly
ZWN0b3J5X29wdGlvbnMgX1JIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8ZGlyZWN0b3J5X29w
dGlvbnM+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9MSFMpIHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfUkhT
KSk7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBjb25zdGV4cHIgZGly
ZWN0b3J5X29wdGlvbnMgb3BlcmF0b3JeKGRpcmVjdG9yeV9vcHRpb25zIF9MSFMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnlfb3B0aW9ucyBf
UkhTKSB7CisgIHJldHVybiBzdGF0aWNfY2FzdDxkaXJlY3Rvcnlfb3B0aW9ucz4oc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4oX0xIUykgXgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9SSFMpKTsKK30KKworX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGNvbnN0ZXhwciBkaXJlY3Rvcnlfb3B0aW9ucyBv
cGVyYXRvcn4oZGlyZWN0b3J5X29wdGlvbnMgX0xIUykgeworICByZXR1cm4gc3RhdGljX2Nhc3Q8
ZGlyZWN0b3J5X29wdGlvbnM+KH5zdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfTEhTKSk7Cit9
CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBkaXJlY3Rvcnlfb3B0aW9ucyYg
b3BlcmF0b3ImPShkaXJlY3Rvcnlfb3B0aW9ucyYgX0xIUywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkaXJlY3Rvcnlfb3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBfTEhT
ID0gX0xIUyAmIF9SSFM7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKK2lubGluZSBk
aXJlY3Rvcnlfb3B0aW9ucyYgb3BlcmF0b3J8PShkaXJlY3Rvcnlfb3B0aW9ucyYgX0xIUywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnlfb3B0aW9ucyBfUkhT
KSB7CisgIHJldHVybiBfTEhTID0gX0xIUyB8IF9SSFM7Cit9CisKK19MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkKK2lubGluZSBkaXJlY3Rvcnlfb3B0aW9ucyYgb3BlcmF0b3JePShkaXJlY3Rvcnlf
b3B0aW9ucyYgX0xIUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJl
Y3Rvcnlfb3B0aW9ucyBfUkhTKSB7CisgIHJldHVybiBfTEhTID0gX0xIUyBeIF9SSFM7Cit9CisK
K2NsYXNzIF9MSUJDUFBfVFlQRV9WSVMgZmlsZV9zdGF0dXMgeworcHVibGljOgorICAvLyBjb25z
dHJ1Y3RvcnMKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBmaWxlX3N0YXR1cygpIG5v
ZXhjZXB0IDogZmlsZV9zdGF0dXMoZmlsZV90eXBlOjpub25lKSB7fQorICBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZCisgIGV4cGxpY2l0IGZpbGVfc3RhdHVzKGZpbGVfdHlwZSBfX2Z0LCBwZXJt
cyBfX3BybXMgPSBwZXJtczo6dW5rbm93bikgbm9leGNlcHQKKyAgICAgIDogX19mdF8oX19mdCks
CisgICAgICAgIF9fcHJtc18oX19wcm1zKSB7fQorCisgIGZpbGVfc3RhdHVzKGNvbnN0IGZpbGVf
c3RhdHVzJikgbm9leGNlcHQgPSBkZWZhdWx0OworICBmaWxlX3N0YXR1cyhmaWxlX3N0YXR1cyYm
KSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB+
ZmlsZV9zdGF0dXMoKSB7fQorCisgIGZpbGVfc3RhdHVzJiBvcGVyYXRvcj0oY29uc3QgZmlsZV9z
dGF0dXMmKSBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgIGZpbGVfc3RhdHVzJiBvcGVyYXRvcj0oZmls
ZV9zdGF0dXMmJikgbm9leGNlcHQgPSBkZWZhdWx0OworCisgIC8vIG9ic2VydmVycworICBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVfdHlwZSB0eXBlKCkgY29uc3Qgbm9leGNlcHQg
eyByZXR1cm4gX19mdF87IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHBlcm1z
IHBlcm1pc3Npb25zKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gX19wcm1zXzsgfQorCisgIC8v
IG1vZGlmaWVycworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgdHlwZShmaWxl
X3R5cGUgX19mdCkgbm9leGNlcHQgeyBfX2Z0XyA9IF9fZnQ7IH0KKworICBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZCisgIHZvaWQgcGVybWlzc2lvbnMocGVybXMgX19wKSBub2V4Y2VwdCB7IF9f
cHJtc18gPSBfX3A7IH0KKworcHJpdmF0ZToKKyAgZmlsZV90eXBlIF9fZnRfOworICBwZXJtcyBf
X3BybXNfOworfTsKKworY2xhc3MgX0xJQkNQUF9UWVBFX1ZJUyBkaXJlY3RvcnlfZW50cnk7CisK
K3RlbXBsYXRlIDxjbGFzcyBfVHA+CitzdHJ1Y3QgX19jYW5fY29udmVydF9jaGFyIHsKKyAgc3Rh
dGljIGNvbnN0IGJvb2wgdmFsdWUgPSBmYWxzZTsKK307Cit0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgor
c3RydWN0IF9fY2FuX2NvbnZlcnRfY2hhcjxjb25zdCBfVHA+IDogcHVibGljIF9fY2FuX2NvbnZl
cnRfY2hhcjxfVHA+IHt9OwordGVtcGxhdGUgPD4KK3N0cnVjdCBfX2Nhbl9jb252ZXJ0X2NoYXI8
Y2hhcj4geworICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7CisgIHVzaW5nIF9fY2hh
cl90eXBlID0gY2hhcjsKK307Cit0ZW1wbGF0ZSA8Pgorc3RydWN0IF9fY2FuX2NvbnZlcnRfY2hh
cjx3Y2hhcl90PiB7CisgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsKKyAgdXNpbmcg
X19jaGFyX3R5cGUgPSB3Y2hhcl90OworfTsKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgX19jYW5fY29u
dmVydF9jaGFyPGNoYXIxNl90PiB7CisgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsK
KyAgdXNpbmcgX19jaGFyX3R5cGUgPSBjaGFyMTZfdDsKK307Cit0ZW1wbGF0ZSA8Pgorc3RydWN0
IF9fY2FuX2NvbnZlcnRfY2hhcjxjaGFyMzJfdD4geworICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1
ZSA9IHRydWU7CisgIHVzaW5nIF9fY2hhcl90eXBlID0gY2hhcjMyX3Q7Cit9OworCit0ZW1wbGF0
ZSA8Y2xhc3MgX0VDaGFyVD4KK3R5cGVuYW1lIGVuYWJsZV9pZjxfX2Nhbl9jb252ZXJ0X2NoYXI8
X0VDaGFyVD46OnZhbHVlLCBib29sPjo6dHlwZQorX19pc19zZXBhcmF0b3IoX0VDaGFyVCBfX2Up
IHsKKyAgcmV0dXJuIF9fZSA9PSBfRUNoYXJUKCcvJyk7Cit9CisKK3N0cnVjdCBfTnVsbFNlbnRp
bmFsIHt9OworCit0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgordXNpbmcgX1ZvaWQgPSB2b2lkOworCit0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyA9IHZvaWQ+CitzdHJ1Y3QgX19pc19wYXRoYWJsZV9z
dHJpbmcgOiBwdWJsaWMgZmFsc2VfdHlwZSB7fTsKKwordGVtcGxhdGUgPGNsYXNzIF9FQ2hhclQs
IGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KK3N0cnVjdCBfX2lzX3BhdGhhYmxlX3N0cmlu
ZzwKKyAgICBiYXNpY19zdHJpbmc8X0VDaGFyVCwgX1RyYWl0cywgX0FsbG9jPiwKKyAgICBfVm9p
ZDx0eXBlbmFtZSBfX2Nhbl9jb252ZXJ0X2NoYXI8X0VDaGFyVD46Ol9fY2hhcl90eXBlPiA+Cisg
ICAgOiBwdWJsaWMgX19jYW5fY29udmVydF9jaGFyPF9FQ2hhclQ+IHsKKyAgdXNpbmcgX1N0ciA9
IGJhc2ljX3N0cmluZzxfRUNoYXJULCBfVHJhaXRzLCBfQWxsb2M+OworICB1c2luZyBfQmFzZSA9
IF9fY2FuX2NvbnZlcnRfY2hhcjxfRUNoYXJUPjsKKyAgc3RhdGljIF9FQ2hhclQgY29uc3QqIF9f
cmFuZ2VfYmVnaW4oX1N0ciBjb25zdCYgX19zKSB7IHJldHVybiBfX3MuZGF0YSgpOyB9CisgIHN0
YXRpYyBfRUNoYXJUIGNvbnN0KiBfX3JhbmdlX2VuZChfU3RyIGNvbnN0JiBfX3MpIHsKKyAgICBy
ZXR1cm4gX19zLmRhdGEoKSArIF9fcy5sZW5ndGgoKTsKKyAgfQorICBzdGF0aWMgX0VDaGFyVCBf
X2ZpcnN0X29yX251bGwoX1N0ciBjb25zdCYgX19zKSB7CisgICAgcmV0dXJuIF9fcy5lbXB0eSgp
ID8gX0VDaGFyVHt9IDogX19zWzBdOworICB9Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgX0VDaGFy
VCwgY2xhc3MgX1RyYWl0cz4KK3N0cnVjdCBfX2lzX3BhdGhhYmxlX3N0cmluZzwKKyAgICBiYXNp
Y19zdHJpbmdfdmlldzxfRUNoYXJULCBfVHJhaXRzPiwKKyAgICBfVm9pZDx0eXBlbmFtZSBfX2Nh
bl9jb252ZXJ0X2NoYXI8X0VDaGFyVD46Ol9fY2hhcl90eXBlPiA+CisgICAgOiBwdWJsaWMgX19j
YW5fY29udmVydF9jaGFyPF9FQ2hhclQ+IHsKKyAgdXNpbmcgX1N0ciA9IGJhc2ljX3N0cmluZ192
aWV3PF9FQ2hhclQsIF9UcmFpdHM+OworICB1c2luZyBfQmFzZSA9IF9fY2FuX2NvbnZlcnRfY2hh
cjxfRUNoYXJUPjsKKyAgc3RhdGljIF9FQ2hhclQgY29uc3QqIF9fcmFuZ2VfYmVnaW4oX1N0ciBj
b25zdCYgX19zKSB7IHJldHVybiBfX3MuZGF0YSgpOyB9CisgIHN0YXRpYyBfRUNoYXJUIGNvbnN0
KiBfX3JhbmdlX2VuZChfU3RyIGNvbnN0JiBfX3MpIHsKKyAgICByZXR1cm4gX19zLmRhdGEoKSAr
IF9fcy5sZW5ndGgoKTsKKyAgfQorICBzdGF0aWMgX0VDaGFyVCBfX2ZpcnN0X29yX251bGwoX1N0
ciBjb25zdCYgX19zKSB7CisgICAgcmV0dXJuIF9fcy5lbXB0eSgpID8gX0VDaGFyVHt9IDogX19z
WzBdOworICB9Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZSwgY2xhc3MgX0RTID0gdHlw
ZW5hbWUgZGVjYXk8X1NvdXJjZT46OnR5cGUsCisgICAgICAgICAgY2xhc3MgX1VucXVhbFB0clR5
cGUgPQorICAgICAgICAgICAgICB0eXBlbmFtZSByZW1vdmVfY29uc3Q8dHlwZW5hbWUgcmVtb3Zl
X3BvaW50ZXI8X0RTPjo6dHlwZT46OnR5cGUsCisgICAgICAgICAgYm9vbCBfSXNDaGFyUHRyID0g
aXNfcG9pbnRlcjxfRFM+Ojp2YWx1ZSYmCisgICAgICAgICAgICAgIF9fY2FuX2NvbnZlcnRfY2hh
cjxfVW5xdWFsUHRyVHlwZT46OnZhbHVlPgorc3RydWN0IF9faXNfcGF0aGFibGVfY2hhcl9hcnJh
eSA6IGZhbHNlX3R5cGUge307CisKK3RlbXBsYXRlIDxjbGFzcyBfU291cmNlLCBjbGFzcyBfRUNo
YXJULCBjbGFzcyBfVVB0cj4KK3N0cnVjdCBfX2lzX3BhdGhhYmxlX2NoYXJfYXJyYXk8X1NvdXJj
ZSwgX0VDaGFyVCosIF9VUHRyLCB0cnVlPgorICAgIDogX19jYW5fY29udmVydF9jaGFyPHR5cGVu
YW1lIHJlbW92ZV9jb25zdDxfRUNoYXJUPjo6dHlwZT4geworICB1c2luZyBfQmFzZSA9IF9fY2Fu
X2NvbnZlcnRfY2hhcjx0eXBlbmFtZSByZW1vdmVfY29uc3Q8X0VDaGFyVD46OnR5cGU+OworCisg
IHN0YXRpYyBfRUNoYXJUIGNvbnN0KiBfX3JhbmdlX2JlZ2luKGNvbnN0IF9FQ2hhclQqIF9fYikg
eyByZXR1cm4gX19iOyB9CisgIHN0YXRpYyBfRUNoYXJUIGNvbnN0KiBfX3JhbmdlX2VuZChjb25z
dCBfRUNoYXJUKiBfX2IpIHsKKyAgICB1c2luZyBfSXRlciA9IGNvbnN0IF9FQ2hhclQqOworICAg
IGNvbnN0IF9FQ2hhclQgX19zZW50aW5hbCA9IF9FQ2hhclR7fTsKKyAgICBfSXRlciBfX2UgPSBf
X2I7CisgICAgZm9yICg7ICpfX2UgIT0gX19zZW50aW5hbDsgKytfX2UpCisgICAgICA7CisgICAg
cmV0dXJuIF9fZTsKKyAgfQorCisgIHN0YXRpYyBfRUNoYXJUIF9fZmlyc3Rfb3JfbnVsbChjb25z
dCBfRUNoYXJUKiBfX2IpIHsgcmV0dXJuICpfX2I7IH0KK307CisKK3RlbXBsYXRlIDxjbGFzcyBf
SXRlciwgYm9vbCBfSXNJdCA9IF9faXNfaW5wdXRfaXRlcmF0b3I8X0l0ZXI+Ojp2YWx1ZSwKKyAg
ICAgICAgICBjbGFzcyA9IHZvaWQ+CitzdHJ1Y3QgX19pc19wYXRoYWJsZV9pdGVyIDogZmFsc2Vf
dHlwZSB7fTsKKwordGVtcGxhdGUgPGNsYXNzIF9JdGVyPgorc3RydWN0IF9faXNfcGF0aGFibGVf
aXRlcjwKKyAgICBfSXRlciwgdHJ1ZSwKKyAgICBfVm9pZDx0eXBlbmFtZSBfX2Nhbl9jb252ZXJ0
X2NoYXI8CisgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5
cGU+OjpfX2NoYXJfdHlwZT4gPgorICAgIDogX19jYW5fY29udmVydF9jaGFyPHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGU+IHsKKyAgdXNpbmcgX0VDaGFyVCA9IHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGU7CisgIHVzaW5nIF9CYXNl
ID0gX19jYW5fY29udmVydF9jaGFyPF9FQ2hhclQ+OworCisgIHN0YXRpYyBfSXRlciBfX3Jhbmdl
X2JlZ2luKF9JdGVyIF9fYikgeyByZXR1cm4gX19iOyB9CisgIHN0YXRpYyBfTnVsbFNlbnRpbmFs
IF9fcmFuZ2VfZW5kKF9JdGVyKSB7IHJldHVybiBfTnVsbFNlbnRpbmFse307IH0KKworICBzdGF0
aWMgX0VDaGFyVCBfX2ZpcnN0X29yX251bGwoX0l0ZXIgX19iKSB7IHJldHVybiAqX19iOyB9Cit9
OworCit0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBib29sIF9Jc1N0cmluZ1QgPSBfX2lzX3BhdGhhYmxl
X3N0cmluZzxfVHA+Ojp2YWx1ZSwKKyAgICAgICAgICBib29sIF9Jc0NoYXJJdGVyVCA9IF9faXNf
cGF0aGFibGVfY2hhcl9hcnJheTxfVHA+Ojp2YWx1ZSwKKyAgICAgICAgICBib29sIF9Jc0l0ZXJU
ID0gIV9Jc0NoYXJJdGVyVCAmJiBfX2lzX3BhdGhhYmxlX2l0ZXI8X1RwPjo6dmFsdWU+CitzdHJ1
Y3QgX19pc19wYXRoYWJsZSA6IGZhbHNlX3R5cGUgeworICBzdGF0aWNfYXNzZXJ0KCFfSXNTdHJp
bmdUICYmICFfSXNDaGFySXRlclQgJiYgIV9Jc0l0ZXJULCAiTXVzdCBhbGwgYmUgZmFsc2UiKTsK
K307CisKK3RlbXBsYXRlIDxjbGFzcyBfVHA+CitzdHJ1Y3QgX19pc19wYXRoYWJsZTxfVHAsIHRy
dWUsIGZhbHNlLCBmYWxzZT4gOiBfX2lzX3BhdGhhYmxlX3N0cmluZzxfVHA+IHt9OworCit0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgorc3RydWN0IF9faXNfcGF0aGFibGU8X1RwLCBmYWxzZSwgdHJ1ZSwg
ZmFsc2U+IDogX19pc19wYXRoYWJsZV9jaGFyX2FycmF5PF9UcD4geworfTsKKwordGVtcGxhdGUg
PGNsYXNzIF9UcD4KK3N0cnVjdCBfX2lzX3BhdGhhYmxlPF9UcCwgZmFsc2UsIGZhbHNlLCB0cnVl
PiA6IF9faXNfcGF0aGFibGVfaXRlcjxfVHA+IHt9OworCit0ZW1wbGF0ZSA8Y2xhc3MgX0VDaGFy
VD4KK3N0cnVjdCBfUGF0aENWVCB7CisgIHN0YXRpY19hc3NlcnQoX19jYW5fY29udmVydF9jaGFy
PF9FQ2hhclQ+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAiQ2hhciB0eXBlIG5vdCBjb252ZXJ0
aWJsZSIpOworCisgIHR5cGVkZWYgX19uYXJyb3dfdG9fdXRmODxzaXplb2YoX0VDaGFyVCkgKiBf
X0NIQVJfQklUX18+IF9OYXJyb3dlcjsKKworICBzdGF0aWMgdm9pZCBfX2FwcGVuZF9yYW5nZShz
dHJpbmcmIF9fZGVzdCwgX0VDaGFyVCBjb25zdCogX19iLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfRUNoYXJUIGNvbnN0KiBfX2UpIHsKKyAgICBfTmFycm93ZXIoKShiYWNrX2luc2Vy
dGVyKF9fZGVzdCksIF9fYiwgX19lKTsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfSXRlcj4K
KyAgc3RhdGljIHZvaWQgX19hcHBlbmRfcmFuZ2Uoc3RyaW5nJiBfX2Rlc3QsIF9JdGVyIF9fYiwg
X0l0ZXIgX19lKSB7CisgICAgc3RhdGljX2Fzc2VydCghaXNfc2FtZTxfSXRlciwgX0VDaGFyVCo+
Ojp2YWx1ZSwgIkNhbGwgY29uc3Qgb3ZlcmxvYWQiKTsKKyAgICBpZiAoX19iID09IF9fZSkKKyAg
ICAgIHJldHVybjsKKyAgICBiYXNpY19zdHJpbmc8X0VDaGFyVD4gX190bXAoX19iLCBfX2UpOwor
ICAgIF9OYXJyb3dlcigpKGJhY2tfaW5zZXJ0ZXIoX19kZXN0KSwgX190bXAuZGF0YSgpLAorICAg
ICAgICAgICAgICAgIF9fdG1wLmRhdGEoKSArIF9fdG1wLmxlbmd0aCgpKTsKKyAgfQorCisgIHRl
bXBsYXRlIDxjbGFzcyBfSXRlcj4KKyAgc3RhdGljIHZvaWQgX19hcHBlbmRfcmFuZ2Uoc3RyaW5n
JiBfX2Rlc3QsIF9JdGVyIF9fYiwgX051bGxTZW50aW5hbCkgeworICAgIHN0YXRpY19hc3NlcnQo
IWlzX3NhbWU8X0l0ZXIsIF9FQ2hhclQqPjo6dmFsdWUsICJDYWxsIGNvbnN0IG92ZXJsb2FkIik7
CisgICAgY29uc3QgX0VDaGFyVCBfX3NlbnRpbmFsID0gX0VDaGFyVHt9OworICAgIGlmICgqX19i
ID09IF9fc2VudGluYWwpCisgICAgICByZXR1cm47CisgICAgYmFzaWNfc3RyaW5nPF9FQ2hhclQ+
IF9fdG1wOworICAgIGZvciAoOyAqX19iICE9IF9fc2VudGluYWw7ICsrX19iKQorICAgICAgX190
bXAucHVzaF9iYWNrKCpfX2IpOworICAgIF9OYXJyb3dlcigpKGJhY2tfaW5zZXJ0ZXIoX19kZXN0
KSwgX190bXAuZGF0YSgpLAorICAgICAgICAgICAgICAgIF9fdG1wLmRhdGEoKSArIF9fdG1wLmxl
bmd0aCgpKTsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfU291cmNlPgorICBzdGF0aWMgdm9p
ZCBfX2FwcGVuZF9zb3VyY2Uoc3RyaW5nJiBfX2Rlc3QsIF9Tb3VyY2UgY29uc3QmIF9fcykgewor
ICAgIHVzaW5nIF9UcmFpdHMgPSBfX2lzX3BhdGhhYmxlPF9Tb3VyY2U+OworICAgIF9fYXBwZW5k
X3JhbmdlKF9fZGVzdCwgX1RyYWl0czo6X19yYW5nZV9iZWdpbihfX3MpLAorICAgICAgICAgICAg
ICAgICAgIF9UcmFpdHM6Ol9fcmFuZ2VfZW5kKF9fcykpOworICB9Cit9OworCit0ZW1wbGF0ZSA8
Pgorc3RydWN0IF9QYXRoQ1ZUPGNoYXI+IHsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+Cisg
IHN0YXRpYyB0eXBlbmFtZSBlbmFibGVfaWY8X19pc19leGFjdGx5X2lucHV0X2l0ZXJhdG9yPF9J
dGVyPjo6dmFsdWU+Ojp0eXBlCisgIF9fYXBwZW5kX3JhbmdlKHN0cmluZyYgX19kZXN0LCBfSXRl
ciBfX2IsIF9JdGVyIF9fZSkgeworICAgIGZvciAoOyBfX2IgIT0gX19lOyArK19fYikKKyAgICAg
IF9fZGVzdC5wdXNoX2JhY2soKl9fYik7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+
CisgIHN0YXRpYyB0eXBlbmFtZSBlbmFibGVfaWY8X19pc19mb3J3YXJkX2l0ZXJhdG9yPF9JdGVy
Pjo6dmFsdWU+Ojp0eXBlCisgIF9fYXBwZW5kX3JhbmdlKHN0cmluZyYgX19kZXN0LCBfSXRlciBf
X2IsIF9JdGVyIF9fZSkgeworICAgIF9fZGVzdC5fX2FwcGVuZF9mb3J3YXJkX3Vuc2FmZShfX2Is
IF9fZSk7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CisgIHN0YXRpYyB2b2lkIF9f
YXBwZW5kX3JhbmdlKHN0cmluZyYgX19kZXN0LCBfSXRlciBfX2IsIF9OdWxsU2VudGluYWwpIHsK
KyAgICBjb25zdCBjaGFyIF9fc2VudGluYWwgPSBjaGFye307CisgICAgZm9yICg7ICpfX2IgIT0g
X19zZW50aW5hbDsgKytfX2IpCisgICAgICBfX2Rlc3QucHVzaF9iYWNrKCpfX2IpOworICB9CisK
KyAgdGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2U+CisgIHN0YXRpYyB2b2lkIF9fYXBwZW5kX3NvdXJj
ZShzdHJpbmcmIF9fZGVzdCwgX1NvdXJjZSBjb25zdCYgX19zKSB7CisgICAgdXNpbmcgX1RyYWl0
cyA9IF9faXNfcGF0aGFibGU8X1NvdXJjZT47CisgICAgX19hcHBlbmRfcmFuZ2UoX19kZXN0LCBf
VHJhaXRzOjpfX3JhbmdlX2JlZ2luKF9fcyksCisgICAgICAgICAgICAgICAgICAgX1RyYWl0czo6
X19yYW5nZV9lbmQoX19zKSk7CisgIH0KK307CisKK2NsYXNzIF9MSUJDUFBfVFlQRV9WSVMgcGF0
aCB7CisgIHRlbXBsYXRlIDxjbGFzcyBfU291cmNlT3JJdGVyLCBjbGFzcyBfVHAgPSBwYXRoJj4K
KyAgdXNpbmcgX0VuYWJsZUlmUGF0aGFibGUgPQorICAgICAgdHlwZW5hbWUgZW5hYmxlX2lmPF9f
aXNfcGF0aGFibGU8X1NvdXJjZU9ySXRlcj46OnZhbHVlLCBfVHA+Ojp0eXBlOworCisgIHRlbXBs
YXRlIDxjbGFzcyBfVHA+CisgIHVzaW5nIF9Tb3VyY2VDaGFyID0gdHlwZW5hbWUgX19pc19wYXRo
YWJsZTxfVHA+OjpfX2NoYXJfdHlwZTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorICB1c2lu
ZyBfU291cmNlQ1ZUID0gX1BhdGhDVlQ8X1NvdXJjZUNoYXI8X1RwPiA+OworCitwdWJsaWM6Cisg
IHR5cGVkZWYgY2hhciB2YWx1ZV90eXBlOworICB0eXBlZGVmIGJhc2ljX3N0cmluZzx2YWx1ZV90
eXBlPiBzdHJpbmdfdHlwZTsKKyAgdHlwZWRlZiBfVlNURDo6c3RyaW5nX3ZpZXcgX19zdHJpbmdf
dmlldzsKKyAgc3RhdGljIGNvbnN0ZXhwciB2YWx1ZV90eXBlIHByZWZlcnJlZF9zZXBhcmF0b3Ig
PSAnLyc7CisKKyAgZW51bSBjbGFzcyBfTElCQ1BQX0VOVU1fVklTIGZvcm1hdCA6IHVuc2lnbmVk
IGNoYXIgeworICAgIGF1dG9fZm9ybWF0LAorICAgIG5hdGl2ZV9mb3JtYXQsCisgICAgZ2VuZXJp
Y19mb3JtYXQKKyAgfTsKKworICAvLyBjb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3IKKyAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoKCkgbm9leGNlcHQge30KKyAgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBwYXRoKGNvbnN0IHBhdGgmIF9fcCkgOiBfX3BuXyhfX3AuX19wbl8pIHt9
CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aChwYXRoJiYgX19wKSBub2V4Y2VwdAor
ICAgICAgOiBfX3BuXyhfVlNURDo6bW92ZShfX3AuX19wbl8pKSB7fQorCisgIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkKKyAgcGF0aChzdHJpbmdfdHlwZSYmIF9fcywgZm9ybWF0ID0gZm9ybWF0
OjphdXRvX2Zvcm1hdCkgbm9leGNlcHQKKyAgICAgIDogX19wbl8oX1ZTVEQ6Om1vdmUoX19zKSkg
e30KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZSwgY2xhc3MgPSBfRW5hYmxlSWZQYXRoYWJs
ZTxfU291cmNlLCB2b2lkPiA+CisgIHBhdGgoY29uc3QgX1NvdXJjZSYgX19zcmMsIGZvcm1hdCA9
IGZvcm1hdDo6YXV0b19mb3JtYXQpIHsKKyAgICBfU291cmNlQ1ZUPF9Tb3VyY2U+OjpfX2FwcGVu
ZF9zb3VyY2UoX19wbl8sIF9fc3JjKTsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dD4KKyAgcGF0aChfSW5wdXRJdCBfX2ZpcnN0LCBfSW5wdXRJdCBfX2xhc3QsIGZvcm1hdCA9IGZv
cm1hdDo6YXV0b19mb3JtYXQpIHsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSW5wdXRJdD46OnZhbHVlX3R5cGUgX0l0VmFsOworICAgIF9QYXRoQ1ZUPF9JdFZhbD46Ol9f
YXBwZW5kX3JhbmdlKF9fcG5fLCBfX2ZpcnN0LCBfX2xhc3QpOworICB9CisKKyAgLy8gVE9ETyBJ
bXBsZW1lbnQgbG9jYWxlIGNvbnZlcnNpb25zLgorICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZSwg
Y2xhc3MgPSBfRW5hYmxlSWZQYXRoYWJsZTxfU291cmNlLCB2b2lkPiA+CisgIHBhdGgoY29uc3Qg
X1NvdXJjZSYgX19zcmMsIGNvbnN0IGxvY2FsZSYgX19sb2MsIGZvcm1hdCA9IGZvcm1hdDo6YXV0
b19mb3JtYXQpOworICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXQ+CisgIHBhdGgoX0lucHV0SXQg
X19maXJzdCwgX0lucHV0SXQgX2xhc3QsIGNvbnN0IGxvY2FsZSYgX19sb2MsCisgICAgICAgZm9y
bWF0ID0gZm9ybWF0OjphdXRvX2Zvcm1hdCk7CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQorICB+cGF0aCgpID0gZGVmYXVsdDsKKworICAvLyBhc3NpZ25tZW50cworICBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZCisgIHBhdGgmIG9wZXJhdG9yPShjb25zdCBwYXRoJiBfX3ApIHsKKyAg
ICBfX3BuXyA9IF9fcC5fX3BuXzsKKyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZCisgIHBhdGgmIG9wZXJhdG9yPShwYXRoJiYgX19wKSBub2V4Y2Vw
dCB7CisgICAgX19wbl8gPSBfVlNURDo6bW92ZShfX3AuX19wbl8pOworICAgIHJldHVybiAqdGhp
czsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyA9IHZvaWQ+CisgIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgcGF0aCYgb3BlcmF0b3I9KHN0cmluZ190eXBlJiYgX19zKSBub2V4Y2VwdCB7Cisg
ICAgX19wbl8gPSBfVlNURDo6bW92ZShfX3MpOworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisg
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGF0aCYgYXNzaWduKHN0cmluZ190eXBlJiYg
X19zKSBub2V4Y2VwdCB7CisgICAgX19wbl8gPSBfVlNURDo6bW92ZShfX3MpOworICAgIHJldHVy
biAqdGhpczsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfU291cmNlPgorICBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZIF9FbmFibGVJZlBhdGhhYmxlPF9Tb3VyY2U+CisgIG9wZXJhdG9yPShj
b25zdCBfU291cmNlJiBfX3NyYykgeworICAgIHJldHVybiB0aGlzLT5hc3NpZ24oX19zcmMpOwor
ICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2U+CisgIF9FbmFibGVJZlBhdGhhYmxlPF9T
b3VyY2U+IGFzc2lnbihjb25zdCBfU291cmNlJiBfX3NyYykgeworICAgIF9fcG5fLmNsZWFyKCk7
CisgICAgX1NvdXJjZUNWVDxfU291cmNlPjo6X19hcHBlbmRfc291cmNlKF9fcG5fLCBfX3NyYyk7
CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0Pgor
ICBwYXRoJiBhc3NpZ24oX0lucHV0SXQgX19maXJzdCwgX0lucHV0SXQgX19sYXN0KSB7CisgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXQ+Ojp2YWx1ZV90eXBlIF9J
dFZhbDsKKyAgICBfX3BuXy5jbGVhcigpOworICAgIF9QYXRoQ1ZUPF9JdFZhbD46Ol9fYXBwZW5k
X3JhbmdlKF9fcG5fLCBfX2ZpcnN0LCBfX2xhc3QpOworICAgIHJldHVybiAqdGhpczsKKyAgfQor
Citwcml2YXRlOgorICB0ZW1wbGF0ZSA8Y2xhc3MgX0VDaGFyVD4KKyAgc3RhdGljIGJvb2wgX19z
b3VyY2VfaXNfYWJzb2x1dGUoX0VDaGFyVCBfX2ZpcnN0X29yX251bGwpIHsKKyAgICByZXR1cm4g
X19pc19zZXBhcmF0b3IoX19maXJzdF9vcl9udWxsKTsKKyAgfQorCitwdWJsaWM6CisgIC8vIGFw
cGVuZHMKKyAgcGF0aCYgb3BlcmF0b3IvPShjb25zdCBwYXRoJiBfX3ApIHsKKyAgICBpZiAoX19w
LmlzX2Fic29sdXRlKCkpIHsKKyAgICAgIF9fcG5fID0gX19wLl9fcG5fOworICAgICAgcmV0dXJu
ICp0aGlzOworICAgIH0KKyAgICBpZiAoaGFzX2ZpbGVuYW1lKCkpCisgICAgICBfX3BuXyArPSBw
cmVmZXJyZWRfc2VwYXJhdG9yOworICAgIF9fcG5fICs9IF9fcC5uYXRpdmUoKTsKKyAgICByZXR1
cm4gKnRoaXM7CisgIH0KKworICAvLyBGSVhNRTogVXNlIF9MSUJDUFBfRElBR05PU0VfV0FSTklO
RyB0byBwcm9kdWNlIGEgZGlhZ25vc3RpYyB3aGVuIF9fc3JjCisgIC8vIGlzIGtub3duIGF0IGNv
bXBpbGUgdGltZSB0byBiZSAiLycgc2luY2UgdGhlIHVzZXIgYWxtb3N0IGNlcnRhaW5seSBpbnRl
bmRlZAorICAvLyB0byBhcHBlbmQgYSBzZXBhcmF0b3IgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyB0
aGUgcGF0aCB3aXRoICIvIgorICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZT4KKyAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWSBfRW5hYmxlSWZQYXRoYWJsZTxfU291cmNlPgorICBvcGVyYXRvci89
KGNvbnN0IF9Tb3VyY2UmIF9fc3JjKSB7CisgICAgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3NyYyk7
CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJjZT4KKyAgX0VuYWJsZUlmUGF0aGFibGU8
X1NvdXJjZT4gYXBwZW5kKGNvbnN0IF9Tb3VyY2UmIF9fc3JjKSB7CisgICAgdXNpbmcgX1RyYWl0
cyA9IF9faXNfcGF0aGFibGU8X1NvdXJjZT47CisgICAgdXNpbmcgX0NWVCA9IF9QYXRoQ1ZUPF9T
b3VyY2VDaGFyPF9Tb3VyY2U+ID47CisgICAgaWYgKF9fc291cmNlX2lzX2Fic29sdXRlKF9UcmFp
dHM6Ol9fZmlyc3Rfb3JfbnVsbChfX3NyYykpKQorICAgICAgX19wbl8uY2xlYXIoKTsKKyAgICBl
bHNlIGlmIChoYXNfZmlsZW5hbWUoKSkKKyAgICAgIF9fcG5fICs9IHByZWZlcnJlZF9zZXBhcmF0
b3I7CisgICAgX0NWVDo6X19hcHBlbmRfc291cmNlKF9fcG5fLCBfX3NyYyk7CisgICAgcmV0dXJu
ICp0aGlzOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0PgorICBwYXRoJiBhcHBl
bmQoX0lucHV0SXQgX19maXJzdCwgX0lucHV0SXQgX19sYXN0KSB7CisgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXQ+Ojp2YWx1ZV90eXBlIF9JdFZhbDsKKyAgICBz
dGF0aWNfYXNzZXJ0KF9fY2FuX2NvbnZlcnRfY2hhcjxfSXRWYWw+Ojp2YWx1ZSwgIk11c3QgY29u
dmVydGlibGUiKTsKKyAgICB1c2luZyBfQ1ZUID0gX1BhdGhDVlQ8X0l0VmFsPjsKKyAgICBpZiAo
X19maXJzdCAhPSBfX2xhc3QgJiYgX19zb3VyY2VfaXNfYWJzb2x1dGUoKl9fZmlyc3QpKQorICAg
ICAgX19wbl8uY2xlYXIoKTsKKyAgICBlbHNlIGlmIChoYXNfZmlsZW5hbWUoKSkKKyAgICAgIF9f
cG5fICs9IHByZWZlcnJlZF9zZXBhcmF0b3I7CisgICAgX0NWVDo6X19hcHBlbmRfcmFuZ2UoX19w
bl8sIF9fZmlyc3QsIF9fbGFzdCk7CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgLy8gY29u
Y2F0ZW5hdGlvbgorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHBhdGgmIG9wZXJhdG9y
Kz0oY29uc3QgcGF0aCYgX194KSB7CisgICAgX19wbl8gKz0gX194Ll9fcG5fOworICAgIHJldHVy
biAqdGhpczsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGF0aCYgb3Bl
cmF0b3IrPShjb25zdCBzdHJpbmdfdHlwZSYgX194KSB7CisgICAgX19wbl8gKz0gX194OworICAg
IHJldHVybiAqdGhpczsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGF0
aCYgb3BlcmF0b3IrPShfX3N0cmluZ192aWV3IF9feCkgeworICAgIF9fcG5fICs9IF9feDsKKyAg
ICByZXR1cm4gKnRoaXM7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHBh
dGgmIG9wZXJhdG9yKz0oY29uc3QgdmFsdWVfdHlwZSogX194KSB7CisgICAgX19wbl8gKz0gX194
OworICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
KyAgcGF0aCYgb3BlcmF0b3IrPSh2YWx1ZV90eXBlIF9feCkgeworICAgIF9fcG5fICs9IF9feDsK
KyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0VDaGFyVD4KKyAg
dHlwZW5hbWUgZW5hYmxlX2lmPF9fY2FuX2NvbnZlcnRfY2hhcjxfRUNoYXJUPjo6dmFsdWUsIHBh
dGgmPjo6dHlwZQorICBvcGVyYXRvcis9KF9FQ2hhclQgX194KSB7CisgICAgYmFzaWNfc3RyaW5n
PF9FQ2hhclQ+IF9fdG1wOworICAgIF9fdG1wICs9IF9feDsKKyAgICBfUGF0aENWVDxfRUNoYXJU
Pjo6X19hcHBlbmRfc291cmNlKF9fcG5fLCBfX3RtcCk7CisgICAgcmV0dXJuICp0aGlzOworICB9
CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2U+CisgIF9FbmFibGVJZlBhdGhhYmxlPF9Tb3Vy
Y2U+IG9wZXJhdG9yKz0oY29uc3QgX1NvdXJjZSYgX194KSB7CisgICAgcmV0dXJuIHRoaXMtPmNv
bmNhdChfX3gpOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9Tb3VyY2U+CisgIF9FbmFibGVJ
ZlBhdGhhYmxlPF9Tb3VyY2U+IGNvbmNhdChjb25zdCBfU291cmNlJiBfX3gpIHsKKyAgICBfU291
cmNlQ1ZUPF9Tb3VyY2U+OjpfX2FwcGVuZF9zb3VyY2UoX19wbl8sIF9feCk7CisgICAgcmV0dXJu
ICp0aGlzOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0PgorICBwYXRoJiBjb25j
YXQoX0lucHV0SXQgX19maXJzdCwgX0lucHV0SXQgX19sYXN0KSB7CisgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXQ+Ojp2YWx1ZV90eXBlIF9JdFZhbDsKKyAgICBf
UGF0aENWVDxfSXRWYWw+OjpfX2FwcGVuZF9yYW5nZShfX3BuXywgX19maXJzdCwgX19sYXN0KTsK
KyAgICByZXR1cm4gKnRoaXM7CisgIH0KKworICAvLyBtb2RpZmllcnMKKyAgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWQorICB2b2lkIGNsZWFyKCkgbm9leGNlcHQgeyBfX3BuXy5jbGVhcigpOyB9
CisKKyAgcGF0aCYgbWFrZV9wcmVmZXJyZWQoKSB7IHJldHVybiAqdGhpczsgfQorCisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcGF0aCYgcmVtb3ZlX2ZpbGVuYW1lKCkgeworICAgIGF1
dG8gX19mbmFtZSA9IF9fZmlsZW5hbWUoKTsKKyAgICBpZiAoIV9fZm5hbWUuZW1wdHkoKSkKKyAg
ICAgIF9fcG5fLmVyYXNlKF9fZm5hbWUuZGF0YSgpIC0gX19wbl8uZGF0YSgpKTsKKyAgICByZXR1
cm4gKnRoaXM7CisgIH0KKworICBwYXRoJiByZXBsYWNlX2ZpbGVuYW1lKGNvbnN0IHBhdGgmIF9f
cmVwbGFjZW1lbnQpIHsKKyAgICByZW1vdmVfZmlsZW5hbWUoKTsKKyAgICByZXR1cm4gKCp0aGlz
IC89IF9fcmVwbGFjZW1lbnQpOworICB9CisKKyAgcGF0aCYgcmVwbGFjZV9leHRlbnNpb24oY29u
c3QgcGF0aCYgX19yZXBsYWNlbWVudCA9IHBhdGgoKSk7CisKKyAgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWQorICB2b2lkIHN3YXAocGF0aCYgX19yaHMpIG5vZXhjZXB0IHsgX19wbl8uc3dhcChf
X3Jocy5fX3BuXyk7IH0KKworICAvLyBwcml2YXRlIGhlbHBlciB0byBhbGxvdyByZXNlcnZpbmcg
bWVtb3J5IGluIHRoZSBwYXRoCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdm9pZCBf
X3Jlc2VydmUoc2l6ZV90IF9fcykgeyBfX3BuXy5yZXNlcnZlKF9fcyk7IH0KKworICAvLyBuYXRp
dmUgZm9ybWF0IG9ic2VydmVycworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGNvbnN0
IHN0cmluZ190eXBlJiBuYXRpdmUoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfX3BuXzsgfQor
CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgY29uc3QgdmFsdWVfdHlwZSogY19zdHIo
KSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfX3BuXy5jX3N0cigpOyB9CisKKyAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWSBvcGVyYXRvciBzdHJpbmdfdHlwZSgpIGNvbnN0IHsgcmV0dXJuIF9f
cG5fOyB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9FQ2hhclQsIGNsYXNzIF9UcmFpdHMgPSBjaGFy
X3RyYWl0czxfRUNoYXJUPiwKKyAgICAgICAgICAgIGNsYXNzIF9BbGxvY2F0b3IgPSBhbGxvY2F0
b3I8X0VDaGFyVD4gPgorICBiYXNpY19zdHJpbmc8X0VDaGFyVCwgX1RyYWl0cywgX0FsbG9jYXRv
cj4KKyAgc3RyaW5nKGNvbnN0IF9BbGxvY2F0b3ImIF9fYSA9IF9BbGxvY2F0b3IoKSkgY29uc3Qg
eworICAgIHVzaW5nIF9DVlQgPSBfX3dpZGVuX2Zyb21fdXRmODxzaXplb2YoX0VDaGFyVCkgKiBf
X0NIQVJfQklUX18+OworICAgIHVzaW5nIF9TdHIgPSBiYXNpY19zdHJpbmc8X0VDaGFyVCwgX1Ry
YWl0cywgX0FsbG9jYXRvcj47CisgICAgX1N0ciBfX3MoX19hKTsKKyAgICBfX3MucmVzZXJ2ZShf
X3BuXy5zaXplKCkpOworICAgIF9DVlQoKShiYWNrX2luc2VydGVyKF9fcyksIF9fcG5fLmRhdGEo
KSwgX19wbl8uZGF0YSgpICsgX19wbl8uc2l6ZSgpKTsKKyAgICByZXR1cm4gX19zOworICB9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGQ6OnN0cmluZyBzdHJpbmcoKSBjb25zdCB7
IHJldHVybiBfX3BuXzsgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0ZDo6d3N0cmlu
ZyB3c3RyaW5nKCkgY29uc3QgeworICAgIHJldHVybiBzdHJpbmc8d2NoYXJfdD4oKTsKKyAgfQor
ICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0ZDo6c3RyaW5nIHU4c3RyaW5nKCkgY29uc3Qg
eyByZXR1cm4gX19wbl87IH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBzdGQ6OnUxNnN0
cmluZyB1MTZzdHJpbmcoKSBjb25zdCB7CisgICAgcmV0dXJuIHN0cmluZzxjaGFyMTZfdD4oKTsK
KyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHN0ZDo6dTMyc3RyaW5nIHUzMnN0cmlu
ZygpIGNvbnN0IHsKKyAgICByZXR1cm4gc3RyaW5nPGNoYXIzMl90PigpOworICB9CisKKyAgLy8g
Z2VuZXJpYyBmb3JtYXQgb2JzZXJ2ZXJzCisgIHRlbXBsYXRlIDxjbGFzcyBfRUNoYXJULCBjbGFz
cyBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0VDaGFyVD4sCisgICAgICAgICAgICBjbGFzcyBfQWxs
b2NhdG9yID0gYWxsb2NhdG9yPF9FQ2hhclQ+ID4KKyAgYmFzaWNfc3RyaW5nPF9FQ2hhclQsIF9U
cmFpdHMsIF9BbGxvY2F0b3I+CisgIGdlbmVyaWNfc3RyaW5nKGNvbnN0IF9BbGxvY2F0b3ImIF9f
YSA9IF9BbGxvY2F0b3IoKSkgY29uc3QgeworICAgIHJldHVybiBzdHJpbmc8X0VDaGFyVCwgX1Ry
YWl0cywgX0FsbG9jYXRvcj4oX19hKTsKKyAgfQorCisgIHN0ZDo6c3RyaW5nIGdlbmVyaWNfc3Ry
aW5nKCkgY29uc3QgeyByZXR1cm4gX19wbl87IH0KKyAgc3RkOjp3c3RyaW5nIGdlbmVyaWNfd3N0
cmluZygpIGNvbnN0IHsgcmV0dXJuIHN0cmluZzx3Y2hhcl90PigpOyB9CisgIHN0ZDo6c3RyaW5n
IGdlbmVyaWNfdThzdHJpbmcoKSBjb25zdCB7IHJldHVybiBfX3BuXzsgfQorICBzdGQ6OnUxNnN0
cmluZyBnZW5lcmljX3UxNnN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHN0cmluZzxjaGFyMTZfdD4o
KTsgfQorICBzdGQ6OnUzMnN0cmluZyBnZW5lcmljX3UzMnN0cmluZygpIGNvbnN0IHsgcmV0dXJu
IHN0cmluZzxjaGFyMzJfdD4oKTsgfQorCitwcml2YXRlOgorICBpbnQgX19jb21wYXJlKF9fc3Ry
aW5nX3ZpZXcpIGNvbnN0OworICBfX3N0cmluZ192aWV3IF9fcm9vdF9uYW1lKCkgY29uc3Q7Cisg
IF9fc3RyaW5nX3ZpZXcgX19yb290X2RpcmVjdG9yeSgpIGNvbnN0OworICBfX3N0cmluZ192aWV3
IF9fcm9vdF9wYXRoX3JhdygpIGNvbnN0OworICBfX3N0cmluZ192aWV3IF9fcmVsYXRpdmVfcGF0
aCgpIGNvbnN0OworICBfX3N0cmluZ192aWV3IF9fcGFyZW50X3BhdGgoKSBjb25zdDsKKyAgX19z
dHJpbmdfdmlldyBfX2ZpbGVuYW1lKCkgY29uc3Q7CisgIF9fc3RyaW5nX3ZpZXcgX19zdGVtKCkg
Y29uc3Q7CisgIF9fc3RyaW5nX3ZpZXcgX19leHRlbnNpb24oKSBjb25zdDsKKworcHVibGljOgor
ICAvLyBjb21wYXJlCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgaW50IGNvbXBhcmUoY29u
c3QgcGF0aCYgX19wKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fY29tcGFyZShfX3Au
X19wbl8pOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgaW50IGNvbXBhcmUoY29u
c3Qgc3RyaW5nX3R5cGUmIF9fcykgY29uc3QgeworICAgIHJldHVybiBfX2NvbXBhcmUoX19zKTsK
KyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGludCBjb21wYXJlKF9fc3RyaW5nX3Zp
ZXcgX19zKSBjb25zdCB7CisgICAgcmV0dXJuIF9fY29tcGFyZShfX3MpOworICB9CisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgaW50IGNvbXBhcmUoY29uc3QgdmFsdWVfdHlwZSogX19zKSBj
b25zdCB7CisgICAgcmV0dXJuIF9fY29tcGFyZShfX3MpOworICB9CisKKyAgLy8gZGVjb21wb3Np
dGlvbgorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggcm9vdF9uYW1lKCkgY29uc3Qg
eworICAgIHJldHVybiBzdHJpbmdfdHlwZShfX3Jvb3RfbmFtZSgpKTsKKyAgfQorICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIHBhdGggcm9vdF9kaXJlY3RvcnkoKSBjb25zdCB7CisgICAgcmV0
dXJuIHN0cmluZ190eXBlKF9fcm9vdF9kaXJlY3RvcnkoKSk7CisgIH0KKyAgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBwYXRoIHJvb3RfcGF0aCgpIGNvbnN0IHsKKyAgICByZXR1cm4gcm9vdF9u
YW1lKCkuYXBwZW5kKHN0cmluZ190eXBlKF9fcm9vdF9kaXJlY3RvcnkoKSkpOworICB9CisgIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCByZWxhdGl2ZV9wYXRoKCkgY29uc3QgeworICAg
IHJldHVybiBzdHJpbmdfdHlwZShfX3JlbGF0aXZlX3BhdGgoKSk7CisgIH0KKyAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWSBwYXRoIHBhcmVudF9wYXRoKCkgY29uc3QgeworICAgIHJldHVybiBz
dHJpbmdfdHlwZShfX3BhcmVudF9wYXRoKCkpOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lC
SUxJVFkgcGF0aCBmaWxlbmFtZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gc3RyaW5nX3R5cGUoX19m
aWxlbmFtZSgpKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggc3RlbSgp
IGNvbnN0IHsgcmV0dXJuIHN0cmluZ190eXBlKF9fc3RlbSgpKTsgfQorICBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIHBhdGggZXh0ZW5zaW9uKCkgY29uc3QgeworICAgIHJldHVybiBzdHJpbmdf
dHlwZShfX2V4dGVuc2lvbigpKTsKKyAgfQorCisgIC8vIHF1ZXJ5CisgIF9MSUJDUFBfTk9ESVND
QVJEX0FGVEVSX0NYWDE3IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbAorICBlbXB0eSgp
IGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19wbl8uZW1wdHkoKTsKKyAgfQorCisgIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBoYXNfcm9vdF9uYW1lKCkgY29uc3QgeworICAg
IHJldHVybiAhX19yb290X25hbWUoKS5lbXB0eSgpOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgYm9vbCBoYXNfcm9vdF9kaXJlY3RvcnkoKSBjb25zdCB7CisgICAgcmV0dXJuICFf
X3Jvb3RfZGlyZWN0b3J5KCkuZW1wdHkoKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIGJvb2wgaGFzX3Jvb3RfcGF0aCgpIGNvbnN0IHsKKyAgICByZXR1cm4gIV9fcm9vdF9wYXRo
X3JhdygpLmVtcHR5KCk7CisgIH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGhh
c19yZWxhdGl2ZV9wYXRoKCkgY29uc3QgeworICAgIHJldHVybiAhX19yZWxhdGl2ZV9wYXRoKCku
ZW1wdHkoKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaGFzX3BhcmVu
dF9wYXRoKCkgY29uc3QgeworICAgIHJldHVybiAhX19wYXJlbnRfcGF0aCgpLmVtcHR5KCk7Cisg
IH0KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGhhc19maWxlbmFtZSgpIGNvbnN0
IHsKKyAgICByZXR1cm4gIV9fZmlsZW5hbWUoKS5lbXB0eSgpOworICB9CisgIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkgYm9vbCBoYXNfc3RlbSgpIGNvbnN0IHsgcmV0dXJuICFfX3N0ZW0oKS5l
bXB0eSgpOyB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBoYXNfZXh0ZW5zaW9u
KCkgY29uc3QgeworICAgIHJldHVybiAhX19leHRlbnNpb24oKS5lbXB0eSgpOworICB9CisKKyAg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX2Fic29sdXRlKCkgY29uc3QgeworICAg
IHJldHVybiBoYXNfcm9vdF9kaXJlY3RvcnkoKTsKKyAgfQorICBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIGJvb2wgaXNfcmVsYXRpdmUoKSBjb25zdCB7IHJldHVybiAhaXNfYWJzb2x1dGUoKTsg
fQorCisgIC8vIHJlbGF0aXZlIHBhdGhzCisgIHBhdGggbGV4aWNhbGx5X25vcm1hbCgpIGNvbnN0
OworICBwYXRoIGxleGljYWxseV9yZWxhdGl2ZShjb25zdCBwYXRoJiBfX2Jhc2UpIGNvbnN0Owor
CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCBsZXhpY2FsbHlfcHJveGltYXRlKGNv
bnN0IHBhdGgmIF9fYmFzZSkgY29uc3QgeworICAgIHBhdGggX19yZXN1bHQgPSB0aGlzLT5sZXhp
Y2FsbHlfcmVsYXRpdmUoX19iYXNlKTsKKyAgICBpZiAoX19yZXN1bHQubmF0aXZlKCkuZW1wdHko
KSkKKyAgICAgIHJldHVybiAqdGhpczsKKyAgICByZXR1cm4gX19yZXN1bHQ7CisgIH0KKworICAv
LyBpdGVyYXRvcnMKKyAgY2xhc3MgX0xJQkNQUF9UWVBFX1ZJUyBpdGVyYXRvcjsKKyAgdHlwZWRl
ZiBpdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKworICBpdGVyYXRvciBiZWdpbigpIGNvbnN0Owor
ICBpdGVyYXRvciBlbmQoKSBjb25zdDsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFz
cyBfVHJhaXRzPgorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGZyaWVuZAorICAgICAgdHlw
ZW5hbWUgZW5hYmxlX2lmPGlzX3NhbWU8X0NoYXJULCBjaGFyPjo6dmFsdWUgJiYKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaXNfc2FtZTxfVHJhaXRzLCBjaGFyX3RyYWl0czxjaGFyPiA+
Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mPjo6dHlwZQorICAgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mIF9fb3MsIGNvbnN0IHBhdGgmIF9fcCkgeworICAgIF9fb3MgPDwgc3RkOjpfX3F1
b3RlZChfX3AubmF0aXZlKCkpOworICAgIHJldHVybiBfX29zOworICB9CisKKyAgdGVtcGxhdGUg
PGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBmcmllbmQKKyAgICAgIHR5cGVuYW1lIGVuYWJsZV9pZjwhaXNfc2FtZTxfQ2hhclQsIGNoYXI+
Ojp2YWx1ZSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaXNfc2FtZTxfVHJhaXRz
LCBjaGFyX3RyYWl0czxjaGFyPiA+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mPjo6dHlwZQorICAgICAgb3BlcmF0b3I8PChi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsIGNvbnN0IHBhdGgmIF9fcCkgewor
ICAgIF9fb3MgPDwgc3RkOjpfX3F1b3RlZChfX3Auc3RyaW5nPF9DaGFyVCwgX1RyYWl0cz4oKSk7
CisgICAgcmV0dXJuIF9fb3M7CisgIH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFz
cyBfVHJhaXRzPgorICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGZyaWVuZCBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+JiBfX2lzLCBwYXRoJiBfX3ApIHsKKyAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzPiBfX3RtcDsKKyAgICBfX2lzID4+IF9fcXVvdGVkKF9fdG1wKTsKKyAgICBfX3AgPSBf
X3RtcDsKKyAgICByZXR1cm4gX19pczsKKyAgfQorCitwcml2YXRlOgorICBpbmxpbmUgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSBwYXRoJgorICBfX2Fzc2lnbl92aWV3KF9fc3RyaW5nX3ZpZXcg
Y29uc3QmIF9fcykgbm9leGNlcHQgeworICAgIF9fcG5fID0gc3RyaW5nX3R5cGUoX19zKTsKKyAg
ICByZXR1cm4gKnRoaXM7CisgIH0KKyAgc3RyaW5nX3R5cGUgX19wbl87Cit9OworCitpbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIHN3YXAocGF0aCYgX19saHMsIHBhdGgmIF9f
cmhzKSBub2V4Y2VwdCB7CisgIF9fbGhzLnN3YXAoX19yaHMpOworfQorCitfTElCQ1BQX0ZVTkNf
VklTCitzaXplX3QgaGFzaF92YWx1ZShjb25zdCBwYXRoJiBfX3ApIG5vZXhjZXB0OworCitpbmxp
bmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIG9wZXJhdG9yPT0oY29uc3QgcGF0aCYg
X19saHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgcGF0aCYgX19yaHMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19y
aHMpID09IDA7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBwYXRoJiBfX2xocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX3Jocykgbm9leGNlcHQgeworICByZXR1
cm4gX19saHMuY29tcGFyZShfX3JocykgIT0gMDsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkgYm9vbCBvcGVyYXRvcjwoY29uc3QgcGF0aCYgX19saHMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX3Jocykg
bm9leGNlcHQgeworICByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPCAwOworfQorCitpbmxp
bmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIG9wZXJhdG9yPD0oY29uc3QgcGF0aCYg
X19saHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgcGF0aCYgX19yaHMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19y
aHMpIDw9IDA7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgb3Bl
cmF0b3I+KGNvbnN0IHBhdGgmIF9fbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX19yaHMpIG5vZXhjZXB0IHsKKyAgcmV0dXJu
IF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHBhdGgmIF9fbGhzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9fcmhzKSBu
b2V4Y2VwdCB7CisgIHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOworfQorCitpbmxp
bmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIG9wZXJhdG9yLyhjb25zdCBwYXRoJiBf
X2xocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHBhdGgmIF9fcmhzKSB7CisgIHBhdGggX19yZXN1bHQoX19saHMpOworICBfX3Jlc3VsdCAv
PSBfX3JoczsKKyAgcmV0dXJuIF9fcmVzdWx0OworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgX1NvdXJj
ZT4KK19MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgICB0eXBlbmFtZSBlbmFibGVfaWY8X19p
c19wYXRoYWJsZTxfU291cmNlPjo6dmFsdWUsIHBhdGg+Ojp0eXBlCisgICAgdThwYXRoKGNvbnN0
IF9Tb3VyY2UmIF9fcykgeworICBzdGF0aWNfYXNzZXJ0KAorICAgICAgaXNfc2FtZTx0eXBlbmFt
ZSBfX2lzX3BhdGhhYmxlPF9Tb3VyY2U+OjpfX2NoYXJfdHlwZSwgY2hhcj46OnZhbHVlLAorICAg
ICAgInU4cGF0aChTb3VyY2UgY29uc3QmKSByZXF1aXJlcyBTb3VyY2UgaGF2ZSBhIGNoYXJhY3Rl
ciB0eXBlIG9mIHR5cGUgIgorICAgICAgIidjaGFyJyIpOworICByZXR1cm4gcGF0aChfX3MpOwor
fQorCit0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXQ+CitfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
CisgICAgdHlwZW5hbWUgZW5hYmxlX2lmPF9faXNfcGF0aGFibGU8X0lucHV0SXQ+Ojp2YWx1ZSwg
cGF0aD46OnR5cGUKKyAgICB1OHBhdGgoX0lucHV0SXQgX19mLCBfSW5wdXRJdCBfX2wpIHsKKyAg
c3RhdGljX2Fzc2VydCgKKyAgICAgIGlzX3NhbWU8dHlwZW5hbWUgX19pc19wYXRoYWJsZTxfSW5w
dXRJdD46Ol9fY2hhcl90eXBlLCBjaGFyPjo6dmFsdWUsCisgICAgICAidThwYXRoKEl0ZXIsIEl0
ZXIpIHJlcXVpcmVzIEl0ZXIgaGF2ZSBhIHZhbHVlX3R5cGUgb2YgdHlwZSAnY2hhciciKTsKKyAg
cmV0dXJuIHBhdGgoX19mLCBfX2wpOworfQorCitjbGFzcyBfTElCQ1BQX1RZUEVfVklTIHBhdGg6
Oml0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgZW51bSBfUGFyc2VyU3RhdGUgOiB1bnNpZ25lZCBjaGFy
IHsKKyAgICBfU2luZ3VsYXIsCisgICAgX0JlZm9yZUJlZ2luLAorICAgIF9JblJvb3ROYW1lLAor
ICAgIF9JblJvb3REaXIsCisgICAgX0luRmlsZW5hbWVzLAorICAgIF9JblRyYWlsaW5nU2VwLAor
ICAgIF9BdEVuZAorICB9OworCitwdWJsaWM6CisgIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVy
YXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CisKKyAgdHlwZWRlZiBwYXRoIHZhbHVlX3R5cGU7
CisgIHR5cGVkZWYgc3RkOjpwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOworICB0eXBlZGVmIGNv
bnN0IHBhdGgqIHBvaW50ZXI7CisgIHR5cGVkZWYgY29uc3QgcGF0aCYgcmVmZXJlbmNlOworCisg
IHR5cGVkZWYgdm9pZAorICAgICAgX19zdGFzaGluZ19pdGVyYXRvcl90YWc7IC8vIFNlZSByZXZl
cnNlX2l0ZXJhdG9yIGFuZCBfX2lzX3N0YXNoaW5nX2l0ZXJhdG9yCisKK3B1YmxpYzoKKyAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBpdGVyYXRvcigpCisgICAgICA6IF9fc3Rhc2hlZF9l
bGVtXygpLCBfX3BhdGhfcHRyXyhudWxscHRyKSwgX19lbnRyeV8oKSwKKyAgICAgICAgX19zdGF0
ZV8oX1Npbmd1bGFyKSB7fQorCisgIGl0ZXJhdG9yKGNvbnN0IGl0ZXJhdG9yJikgPSBkZWZhdWx0
OworICB+aXRlcmF0b3IoKSA9IGRlZmF1bHQ7CisKKyAgaXRlcmF0b3ImIG9wZXJhdG9yPShjb25z
dCBpdGVyYXRvciYpID0gZGVmYXVsdDsKKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisg
IHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBfX3N0YXNoZWRfZWxlbV87IH0K
KworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNv
bnN0IHsgcmV0dXJuICZfX3N0YXNoZWRfZWxlbV87IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZCisgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkgeworICAgIF9MSUJDUFBfQVNTRVJUKF9f
c3RhdGVfICE9IF9TaW5ndWxhciwKKyAgICAgICAgICAgICAgICAgICAiYXR0ZW1wdGluZyB0byBp
bmNyZW1lbnQgYSBzaW5ndWxhciBpdGVyYXRvciIpOworICAgIF9MSUJDUFBfQVNTRVJUKF9fc3Rh
dGVfICE9IF9BdEVuZCwKKyAgICAgICAgICAgICAgICAgICAiYXR0ZW1wdGluZyB0byBpbmNyZW1l
bnQgdGhlIGVuZCBpdGVyYXRvciIpOworICAgIHJldHVybiBfX2luY3JlbWVudCgpOworICB9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBpdGVyYXRvciBvcGVyYXRvcisrKGludCkg
eworICAgIGl0ZXJhdG9yIF9faXQoKnRoaXMpOworICAgIHRoaXMtPm9wZXJhdG9yKysoKTsKKyAg
ICByZXR1cm4gX19pdDsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgaXRl
cmF0b3ImIG9wZXJhdG9yLS0oKSB7CisgICAgX0xJQkNQUF9BU1NFUlQoX19zdGF0ZV8gIT0gX1Np
bmd1bGFyLAorICAgICAgICAgICAgICAgICAgICJhdHRlbXB0aW5nIHRvIGRlY3JlbWVudCBhIHNp
bmd1bGFyIGl0ZXJhdG9yIik7CisgICAgX0xJQkNQUF9BU1NFUlQoX19lbnRyeV8uZGF0YSgpICE9
IF9fcGF0aF9wdHJfLT5uYXRpdmUoKS5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgImF0dGVt
cHRpbmcgdG8gZGVjcmVtZW50IHRoZSBiZWdpbiBpdGVyYXRvciIpOworICAgIHJldHVybiBfX2Rl
Y3JlbWVudCgpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBpdGVyYXRv
ciBvcGVyYXRvci0tKGludCkgeworICAgIGl0ZXJhdG9yIF9faXQoKnRoaXMpOworICAgIHRoaXMt
Pm9wZXJhdG9yLS0oKTsKKyAgICByZXR1cm4gX19pdDsKKyAgfQorCitwcml2YXRlOgorICBmcmll
bmQgY2xhc3MgcGF0aDsKKworICBpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBmcmll
bmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVyYXRvciYpOwor
CisgIGl0ZXJhdG9yJiBfX2luY3JlbWVudCgpOworICBpdGVyYXRvciYgX19kZWNyZW1lbnQoKTsK
KworICBwYXRoIF9fc3Rhc2hlZF9lbGVtXzsKKyAgY29uc3QgcGF0aCogX19wYXRoX3B0cl87Cisg
IHBhdGg6Ol9fc3RyaW5nX3ZpZXcgX19lbnRyeV87CisgIF9QYXJzZXJTdGF0ZSBfX3N0YXRlXzsK
K307CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBwYXRoOjppdGVyYXRvciYgX19saHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aDo6aXRlcmF0b3ImIF9fcmhzKSB7CisgIHJl
dHVybiBfX2xocy5fX3BhdGhfcHRyXyA9PSBfX3Jocy5fX3BhdGhfcHRyXyAmJgorICAgICAgICAg
X19saHMuX19lbnRyeV8uZGF0YSgpID09IF9fcmhzLl9fZW50cnlfLmRhdGEoKTsKK30KKworaW5s
aW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHBhdGg6
Oml0ZXJhdG9yJiBfX2xocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBwYXRoOjppdGVyYXRvciYgX19yaHMpIHsKKyAgcmV0dXJuICEoX19s
aHMgPT0gX19yaHMpOworfQorCitjbGFzcyBfTElCQ1BQX0VYQ0VQVElPTl9BQkkgZmlsZXN5c3Rl
bV9lcnJvciA6IHB1YmxpYyBzeXN0ZW1fZXJyb3IgeworcHVibGljOgorICBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZCisgIGZpbGVzeXN0ZW1fZXJyb3IoY29uc3Qgc3RyaW5nJiBfX3doYXQsIGVy
cm9yX2NvZGUgX19lYykKKyAgICAgIDogc3lzdGVtX2Vycm9yKF9fZWMsIF9fd2hhdCksCisgICAg
ICAgIF9fc3RvcmFnZV8obWFrZV9zaGFyZWQ8X1N0b3JhZ2U+KHBhdGgoKSwgcGF0aCgpKSkgewor
ICAgIF9fY3JlYXRlX3doYXQoMCk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
CisgIGZpbGVzeXN0ZW1fZXJyb3IoY29uc3Qgc3RyaW5nJiBfX3doYXQsIGNvbnN0IHBhdGgmIF9f
cDEsIGVycm9yX2NvZGUgX19lYykKKyAgICAgIDogc3lzdGVtX2Vycm9yKF9fZWMsIF9fd2hhdCks
CisgICAgICAgIF9fc3RvcmFnZV8obWFrZV9zaGFyZWQ8X1N0b3JhZ2U+KF9fcDEsIHBhdGgoKSkp
IHsKKyAgICBfX2NyZWF0ZV93aGF0KDEpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQorICBmaWxlc3lzdGVtX2Vycm9yKGNvbnN0IHN0cmluZyYgX193aGF0LCBjb25zdCBwYXRo
JiBfX3AxLCBjb25zdCBwYXRoJiBfX3AyLAorICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUg
X19lYykKKyAgICAgIDogc3lzdGVtX2Vycm9yKF9fZWMsIF9fd2hhdCksCisgICAgICAgIF9fc3Rv
cmFnZV8obWFrZV9zaGFyZWQ8X1N0b3JhZ2U+KF9fcDEsIF9fcDIpKSB7CisgICAgX19jcmVhdGVf
d2hhdCgyKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgY29uc3QgcGF0
aCYgcGF0aDEoKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBfX3N0b3JhZ2VfLT5fX3AxXzsgfQor
CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgY29uc3QgcGF0aCYgcGF0aDIoKSBjb25z
dCBub2V4Y2VwdCB7IHJldHVybiBfX3N0b3JhZ2VfLT5fX3AyXzsgfQorCisgIH5maWxlc3lzdGVt
X2Vycm9yKCkgb3ZlcnJpZGU7IC8vIGtleSBmdW5jdGlvbgorCisgIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkKKyAgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IG5vZXhjZXB0IG92ZXJyaWRlIHsK
KyAgICByZXR1cm4gX19zdG9yYWdlXy0+X193aGF0Xy5jX3N0cigpOworICB9CisKKyAgX0xJQkNQ
UF9GVU5DX1ZJUworICB2b2lkIF9fY3JlYXRlX3doYXQoaW50IF9fbnVtX3BhdGhzKTsKKworcHJp
dmF0ZToKKyAgc3RydWN0IF9TdG9yYWdlIHsKKyAgICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
CisgICAgX1N0b3JhZ2UoY29uc3QgcGF0aCYgX19wMSwgY29uc3QgcGF0aCYgX19wMikgOiBfX3Ax
XyhfX3AxKSwgX19wMl8oX19wMikge30KKworICAgIHBhdGggX19wMV87CisgICAgcGF0aCBfX3Ay
XzsKKyAgICBzdHJpbmcgX193aGF0XzsKKyAgfTsKKyAgc2hhcmVkX3B0cjxfU3RvcmFnZT4gX19z
dG9yYWdlXzsKK307CisKK3RlbXBsYXRlIDxjbGFzcy4uLiBfQXJncz4KK19MSUJDUFBfTk9SRVRV
Uk4gaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyNpZm5kZWYgX0xJQkNQUF9OT19F
WENFUFRJT05TCisgICAgdm9pZAorICAgIF9fdGhyb3dfZmlsZXN5c3RlbV9lcnJvcihfQXJncyYm
Li4uIF9fYXJncykgeworICB0aHJvdyBmaWxlc3lzdGVtX2Vycm9yKHN0ZDo6Zm9yd2FyZDxfQXJn
cz4oX19hcmdzKS4uLik7Cit9CisjZWxzZQorICAgIHZvaWQKKyAgICBfX3Rocm93X2ZpbGVzeXN0
ZW1fZXJyb3IoX0FyZ3MmJi4uLikgeworICBfVlNURDo6YWJvcnQoKTsKK30KKyNlbmRpZgorCisv
LyBvcGVyYXRpb25hbCBmdW5jdGlvbnMKKworX0xJQkNQUF9GVU5DX1ZJUworcGF0aCBfX2Fic29s
dXRlKGNvbnN0IHBhdGgmLCBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZV
TkNfVklTCitwYXRoIF9fY2Fub25pY2FsKGNvbnN0IHBhdGgmLCBlcnJvcl9jb2RlKiBfX2VjID0g
bnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCit2b2lkIF9fY29weShjb25zdCBwYXRoJiBfX2Zy
b20sIGNvbnN0IHBhdGgmIF9fdG8sIGNvcHlfb3B0aW9ucyBfX29wdCwKKyAgICAgICAgICAgIGVy
cm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK2Jvb2wgX19jb3B5
X2ZpbGUoY29uc3QgcGF0aCYgX19mcm9tLCBjb25zdCBwYXRoJiBfX3RvLCBjb3B5X29wdGlvbnMg
X19vcHQsCisgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19M
SUJDUFBfRlVOQ19WSVMKK3ZvaWQgX19jb3B5X3N5bWxpbmsoY29uc3QgcGF0aCYgX19leGlzdGlu
Z19zeW1saW5rLCBjb25zdCBwYXRoJiBfX25ld19zeW1saW5rLAorICAgICAgICAgICAgICAgICAg
ICBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCitib29sIF9f
Y3JlYXRlX2RpcmVjdG9yaWVzKGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUqIGVjID0gbnVsbHB0
cik7CitfTElCQ1BQX0ZVTkNfVklTCitib29sIF9fY3JlYXRlX2RpcmVjdG9yeShjb25zdCBwYXRo
JiBwLCBlcnJvcl9jb2RlKiBlYyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUworYm9vbCBf
X2NyZWF0ZV9kaXJlY3RvcnkoY29uc3QgcGF0aCYgcCwgY29uc3QgcGF0aCYgYXR0cmlidXRlcywK
KyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUqIGVjID0gbnVsbHB0cik7CitfTElC
Q1BQX0ZVTkNfVklTCit2b2lkIF9fY3JlYXRlX2RpcmVjdG9yeV9zeW1saW5rKGNvbnN0IHBhdGgm
IF9fdG8sIGNvbnN0IHBhdGgmIF9fbmV3X3N5bWxpbmssCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMK
K3ZvaWQgX19jcmVhdGVfaGFyZF9saW5rKGNvbnN0IHBhdGgmIF9fdG8sIGNvbnN0IHBhdGgmIF9f
bmV3X2hhcmRfbGluaywKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUqIF9fZWMg
PSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3ZvaWQgX19jcmVhdGVfc3ltbGluayhjb25z
dCBwYXRoJiBfX3RvLCBjb25zdCBwYXRoJiBfX25ld19zeW1saW5rLAorICAgICAgICAgICAgICAg
ICAgICAgIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3Bh
dGggX19jdXJyZW50X3BhdGgoZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworX0xJQkNQUF9G
VU5DX1ZJUwordm9pZCBfX2N1cnJlbnRfcGF0aChjb25zdCBwYXRoJiwgZXJyb3JfY29kZSogX19l
YyA9IG51bGxwdHIpOworX0xJQkNQUF9GVU5DX1ZJUworYm9vbCBfX2VxdWl2YWxlbnQoY29uc3Qg
cGF0aCYsIGNvbnN0IHBhdGgmLCBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQ
X0ZVTkNfVklTCit1aW50bWF4X3QgX19maWxlX3NpemUoY29uc3QgcGF0aCYsIGVycm9yX2NvZGUq
IF9fZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3VpbnRtYXhfdCBfX2hhcmRfbGlu
a19jb3VudChjb25zdCBwYXRoJiwgZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworX0xJQkNQ
UF9GVU5DX1ZJUworYm9vbCBfX2ZzX2lzX2VtcHR5KGNvbnN0IHBhdGgmIHAsIGVycm9yX2NvZGUq
IGVjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCitmaWxlX3RpbWVfdHlwZSBfX2xhc3Rf
d3JpdGVfdGltZShjb25zdCBwYXRoJiBwLCBlcnJvcl9jb2RlKiBlYyA9IG51bGxwdHIpOworX0xJ
QkNQUF9GVU5DX1ZJUwordm9pZCBfX2xhc3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBwLCBmaWxl
X3RpbWVfdHlwZSBuZXdfdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSog
ZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3ZvaWQgX19wZXJtaXNzaW9ucyhjb25z
dCBwYXRoJiwgcGVybXMsIHBlcm1fb3B0aW9ucywgZXJyb3JfY29kZSogPSBudWxscHRyKTsKK19M
SUJDUFBfRlVOQ19WSVMKK3BhdGggX19yZWFkX3N5bWxpbmsoY29uc3QgcGF0aCYgcCwgZXJyb3Jf
Y29kZSogZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK2Jvb2wgX19yZW1vdmUoY29u
c3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMgPSBudWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMK
K3VpbnRtYXhfdCBfX3JlbW92ZV9hbGwoY29uc3QgcGF0aCYgcCwgZXJyb3JfY29kZSogZWMgPSBu
dWxscHRyKTsKK19MSUJDUFBfRlVOQ19WSVMKK3ZvaWQgX19yZW5hbWUoY29uc3QgcGF0aCYgZnJv
bSwgY29uc3QgcGF0aCYgdG8sIGVycm9yX2NvZGUqIGVjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZV
TkNfVklTCit2b2lkIF9fcmVzaXplX2ZpbGUoY29uc3QgcGF0aCYgcCwgdWludG1heF90IHNpemUs
IGVycm9yX2NvZGUqIGVjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCitzcGFjZV9pbmZv
IF9fc3BhY2UoY29uc3QgcGF0aCYsIGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKK19MSUJD
UFBfRlVOQ19WSVMKK2ZpbGVfc3RhdHVzIF9fc3RhdHVzKGNvbnN0IHBhdGgmLCBlcnJvcl9jb2Rl
KiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCitmaWxlX3N0YXR1cyBfX3N5bWxp
bmtfc3RhdHVzKGNvbnN0IHBhdGgmLCBlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElC
Q1BQX0ZVTkNfVklTCitwYXRoIF9fc3lzdGVtX2NvbXBsZXRlKGNvbnN0IHBhdGgmLCBlcnJvcl9j
b2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklTCitwYXRoIF9fdGVtcF9kaXJl
Y3RvcnlfcGF0aChlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cik7CitfTElCQ1BQX0ZVTkNfVklT
CitwYXRoIF9fd2Vha2x5X2Nhbm9uaWNhbChwYXRoIGNvbnN0JiBfX3AsIGVycm9yX2NvZGUqIF9f
ZWMgPSBudWxscHRyKTsKKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgcGF0aCBj
dXJyZW50X3BhdGgoKSB7CisgIHJldHVybiBfX2N1cnJlbnRfcGF0aCgpOworfQorCitpbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIGN1cnJlbnRfcGF0aChlcnJvcl9jb2RlJiBf
X2VjKSB7CisgIHJldHVybiBfX2N1cnJlbnRfcGF0aCgmX19lYyk7Cit9CisKK2lubGluZSBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQgY3VycmVudF9wYXRoKGNvbnN0IHBhdGgmIF9fcCkg
eworICBfX2N1cnJlbnRfcGF0aChfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWSB2b2lkIGN1cnJlbnRfcGF0aChjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBu
b2V4Y2VwdCB7CisgIF9fY3VycmVudF9wYXRoKF9fcCwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIGFic29sdXRlKGNvbnN0IHBhdGgmIF9fcCkgewor
ICByZXR1cm4gX19hYnNvbHV0ZShfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWSBwYXRoIGFic29sdXRlKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgeworICByZXR1
cm4gX19hYnNvbHV0ZShfX3AsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgcGF0aCBjYW5vbmljYWwoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBfX2Nh
bm9uaWNhbChfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRo
IGNhbm9uaWNhbChjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7CisgIHJldHVybiBfX2Nhbm9u
aWNhbChfX3AsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkg
dm9pZCBjb3B5KGNvbnN0IHBhdGgmIF9fZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX3RvKSB7CisgIF9fY29weShfX2Zyb20sIF9f
dG8sIGNvcHlfb3B0aW9uczo6bm9uZSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIHZvaWQgY29weShjb25zdCBwYXRoJiBfX2Zyb20sIGNvbnN0IHBhdGgmIF9fdG8sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19l
YykgeworICBfX2NvcHkoX19mcm9tLCBfX3RvLCBjb3B5X29wdGlvbnM6Om5vbmUsICZfX2VjKTsK
K30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCBjb3B5KGNvbnN0IHBh
dGgmIF9fZnJvbSwgY29uc3QgcGF0aCYgX190bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb3B5X29wdGlvbnMgX19vcHQpIHsKKyAgX19jb3B5KF9fZnJvbSwg
X190bywgX19vcHQpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lk
IGNvcHkoY29uc3QgcGF0aCYgX19mcm9tLCBjb25zdCBwYXRoJiBfX3RvLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlfb3B0aW9ucyBfX29wdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7
CisgIF9fY29weShfX2Zyb20sIF9fdG8sIF9fb3B0LCAmX19lYyk7Cit9CisKK2lubGluZSBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgY29weV9maWxlKGNvbnN0IHBhdGgmIF9fZnJvbSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBh
dGgmIF9fdG8pIHsKKyAgcmV0dXJuIF9fY29weV9maWxlKF9fZnJvbSwgX190bywgY29weV9vcHRp
b25zOjpub25lKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbAor
Y29weV9maWxlKGNvbnN0IHBhdGgmIF9fZnJvbSwgY29uc3QgcGF0aCYgX190bywgZXJyb3JfY29k
ZSYgX19lYykgeworICByZXR1cm4gX19jb3B5X2ZpbGUoX19mcm9tLCBfX3RvLCBjb3B5X29wdGlv
bnM6Om5vbmUsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkg
Ym9vbAorY29weV9maWxlKGNvbnN0IHBhdGgmIF9fZnJvbSwgY29uc3QgcGF0aCYgX190bywgY29w
eV9vcHRpb25zIF9fb3B0KSB7CisgIHJldHVybiBfX2NvcHlfZmlsZShfX2Zyb20sIF9fdG8sIF9f
b3B0KTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBjb3B5X2Zp
bGUoY29uc3QgcGF0aCYgX19mcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgcGF0aCYgX190bywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlfb3B0aW9ucyBfX29wdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIHsK
KyAgcmV0dXJuIF9fY29weV9maWxlKF9fZnJvbSwgX190bywgX19vcHQsICZfX2VjKTsKK30KKwor
aW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9pZCBjb3B5X3N5bWxpbmsoY29uc3Qg
cGF0aCYgX19leGlzdGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9fbmV3KSB7CisgIF9fY29weV9zeW1saW5rKF9fZXhp
c3RpbmcsIF9fbmV3KTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdm9p
ZAorY29weV9zeW1saW5rKGNvbnN0IHBhdGgmIF9fZXh0LCBjb25zdCBwYXRoJiBfX25ldywgZXJy
b3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICBfX2NvcHlfc3ltbGluayhfX2V4dCwgX19uZXcs
ICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBjcmVh
dGVfZGlyZWN0b3JpZXMoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBfX2NyZWF0ZV9kaXJl
Y3RvcmllcyhfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29s
IGNyZWF0ZV9kaXJlY3Rvcmllcyhjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7
CisgIHJldHVybiBfX2NyZWF0ZV9kaXJlY3RvcmllcyhfX3AsICZfX2VjKTsKK30KKworaW5saW5l
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBjcmVhdGVfZGlyZWN0b3J5KGNvbnN0IHBh
dGgmIF9fcCkgeworICByZXR1cm4gX19jcmVhdGVfZGlyZWN0b3J5KF9fcCk7Cit9CisKK2lubGlu
ZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wKK2NyZWF0ZV9kaXJlY3RvcnkoY29uc3Qg
cGF0aCYgX19wLCBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX2NyZWF0
ZV9kaXJlY3RvcnkoX19wLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIGJvb2wgY3JlYXRlX2RpcmVjdG9yeShjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCYg
X19hdHRycykgeworICByZXR1cm4gX19jcmVhdGVfZGlyZWN0b3J5KF9fcCwgX19hdHRycyk7Cit9
CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wKK2NyZWF0ZV9kaXJlY3Rv
cnkoY29uc3QgcGF0aCYgX19wLCBjb25zdCBwYXRoJiBfX2F0dHJzLAorICAgICAgICAgICAgICAg
ICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX2NyZWF0ZV9kaXJlY3Rv
cnkoX19wLCBfX2F0dHJzLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIHZvaWQKK2NyZWF0ZV9kaXJlY3Rvcnlfc3ltbGluayhjb25zdCBwYXRoJiBfX3RvLCBj
b25zdCBwYXRoJiBfX25ldykgeworICBfX2NyZWF0ZV9kaXJlY3Rvcnlfc3ltbGluayhfX3RvLCBf
X25ldyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQKK2NyZWF0
ZV9kaXJlY3Rvcnlfc3ltbGluayhjb25zdCBwYXRoJiBfX3RvLCBjb25zdCBwYXRoJiBfX25ldywK
KyAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7Cisg
IF9fY3JlYXRlX2RpcmVjdG9yeV9zeW1saW5rKF9fdG8sIF9fbmV3LCAmX19lYyk7Cit9CisKK2lu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQgY3JlYXRlX2hhcmRfbGluayhjb25z
dCBwYXRoJiBfX3RvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHBhdGgmIF9fbmV3KSB7CisgIF9fY3JlYXRlX2hhcmRfbGluayhf
X3RvLCBfX25ldyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQK
K2NyZWF0ZV9oYXJkX2xpbmsoY29uc3QgcGF0aCYgX190bywgY29uc3QgcGF0aCYgX19uZXcsCisg
ICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgX19jcmVhdGVf
aGFyZF9saW5rKF9fdG8sIF9fbmV3LCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIHZvaWQgY3JlYXRlX3N5bWxpbmsoY29uc3QgcGF0aCYgX190bywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0
aCYgX19uZXcpIHsKKyAgX19jcmVhdGVfc3ltbGluayhfX3RvLCBfX25ldyk7Cit9CisKK2lubGlu
ZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQKK2NyZWF0ZV9zeW1saW5rKGNvbnN0IHBh
dGgmIF9fdG8sIGNvbnN0IHBhdGgmIF9fbmV3LCBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7
CisgIHJldHVybiBfX2NyZWF0ZV9zeW1saW5rKF9fdG8sIF9fbmV3LCAmX19lYyk7Cit9CisKK2lu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgc3RhdHVzX2tub3duKGZpbGVfc3Rh
dHVzIF9fcykgbm9leGNlcHQgeworICByZXR1cm4gX19zLnR5cGUoKSAhPSBmaWxlX3R5cGU6Om5v
bmU7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgZXhpc3RzKGZp
bGVfc3RhdHVzIF9fcykgbm9leGNlcHQgeworICByZXR1cm4gc3RhdHVzX2tub3duKF9fcykgJiYg
X19zLnR5cGUoKSAhPSBmaWxlX3R5cGU6Om5vdF9mb3VuZDsKK30KKworaW5saW5lIF9MSUJDUFBf
SU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBleGlzdHMoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVy
biBleGlzdHMoX19zdGF0dXMoX19wKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIGJvb2wgZXhpc3RzKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAg
YXV0byBfX3MgPSBfX3N0YXR1cyhfX3AsICZfX2VjKTsKKyAgaWYgKHN0YXR1c19rbm93bihfX3Mp
KQorICAgIF9fZWMuY2xlYXIoKTsKKyAgcmV0dXJuIGV4aXN0cyhfX3MpOworfQorCitpbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGVxdWl2YWxlbnQoY29uc3QgcGF0aCYgX19w
MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBwYXRoJiBfX3AyKSB7CisgIHJldHVybiBfX2VxdWl2YWxlbnQoX19wMSwgX19wMik7Cit9CisK
K2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wKK2VxdWl2YWxlbnQoY29uc3Qg
cGF0aCYgX19wMSwgY29uc3QgcGF0aCYgX19wMiwgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQg
eworICByZXR1cm4gX19lcXVpdmFsZW50KF9fcDEsIF9fcDIsICZfX2VjKTsKK30KKworaW5saW5l
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgdWludG1heF90IGZpbGVfc2l6ZShjb25zdCBwYXRo
JiBfX3ApIHsKKyAgcmV0dXJuIF9fZmlsZV9zaXplKF9fcCk7Cit9CisKK2lubGluZSBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIHVpbnRtYXhfdAorZmlsZV9zaXplKGNvbnN0IHBhdGgmIF9fcCwg
ZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICByZXR1cm4gX19maWxlX3NpemUoX19wLCAm
X19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHVpbnRtYXhfdCBo
YXJkX2xpbmtfY291bnQoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBfX2hhcmRfbGlua19j
b3VudChfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB1aW50bWF4
X3QKK2hhcmRfbGlua19jb3VudChjb25zdCBwYXRoJiBfX3AsIGVycm9yX2NvZGUmIF9fZWMpIG5v
ZXhjZXB0IHsKKyAgcmV0dXJuIF9faGFyZF9saW5rX2NvdW50KF9fcCwgJl9fZWMpOworfQorCitp
bmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX2Jsb2NrX2ZpbGUoZmlsZV9z
dGF0dXMgX19zKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX3MudHlwZSgpID09IGZpbGVfdHlwZTo6
YmxvY2s7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfYmxv
Y2tfZmlsZShjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIGlzX2Jsb2NrX2ZpbGUoX19zdGF0
dXMoX19wKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNf
YmxvY2tfZmlsZShjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICBy
ZXR1cm4gaXNfYmxvY2tfZmlsZShfX3N0YXR1cyhfX3AsICZfX2VjKSk7Cit9CisKK2lubGluZSBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wKK2lzX2NoYXJhY3Rlcl9maWxlKGZpbGVfc3Rh
dHVzIF9fcykgbm9leGNlcHQgeworICByZXR1cm4gX19zLnR5cGUoKSA9PSBmaWxlX3R5cGU6OmNo
YXJhY3RlcjsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19j
aGFyYWN0ZXJfZmlsZShjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIGlzX2NoYXJhY3Rlcl9m
aWxlKF9fc3RhdHVzKF9fcCkpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBib29sCitpc19jaGFyYWN0ZXJfZmlsZShjb25zdCBwYXRoJiBfX3AsIGVycm9yX2NvZGUmIF9f
ZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIGlzX2NoYXJhY3Rlcl9maWxlKF9fc3RhdHVzKF9fcCwg
Jl9fZWMpKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19k
aXJlY3RvcnkoZmlsZV9zdGF0dXMgX19zKSBub2V4Y2VwdCB7CisgIHJldHVybiBfX3MudHlwZSgp
ID09IGZpbGVfdHlwZTo6ZGlyZWN0b3J5OworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWSBib29sIGlzX2RpcmVjdG9yeShjb25zdCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIGlz
X2RpcmVjdG9yeShfX3N0YXR1cyhfX3ApKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgYm9vbCBpc19kaXJlY3RvcnkoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykg
bm9leGNlcHQgeworICByZXR1cm4gaXNfZGlyZWN0b3J5KF9fc3RhdHVzKF9fcCwgJl9fZWMpKTsK
K30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19lbXB0eShjb25z
dCBwYXRoJiBfX3ApIHsKKyAgcmV0dXJuIF9fZnNfaXNfZW1wdHkoX19wKTsKK30KKworaW5saW5l
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19lbXB0eShjb25zdCBwYXRoJiBfX3As
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2Nv
ZGUmIF9fZWMpIHsKKyAgcmV0dXJuIF9fZnNfaXNfZW1wdHkoX19wLCAmX19lYyk7Cit9CisKK2lu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfZmlmbyhmaWxlX3N0YXR1cyBf
X3MpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fcy50eXBlKCkgPT0gZmlsZV90eXBlOjpmaWZvOwor
fQoraW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19maWZvKGNvbnN0IHBh
dGgmIF9fcCkgeworICByZXR1cm4gaXNfZmlmbyhfX3N0YXR1cyhfX3ApKTsKK30KKworaW5saW5l
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19maWZvKGNvbnN0IHBhdGgmIF9fcCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2Rl
JiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBpc19maWZvKF9fc3RhdHVzKF9fcCwgJl9fZWMp
KTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbAoraXNfcmVndWxh
cl9maWxlKGZpbGVfc3RhdHVzIF9fcykgbm9leGNlcHQgeworICByZXR1cm4gX19zLnR5cGUoKSA9
PSBmaWxlX3R5cGU6OnJlZ3VsYXI7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIGJvb2wgaXNfcmVndWxhcl9maWxlKGNvbnN0IHBhdGgmIF9fcCkgeworICByZXR1cm4gaXNf
cmVndWxhcl9maWxlKF9fc3RhdHVzKF9fcCkpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWSBib29sCitpc19yZWd1bGFyX2ZpbGUoY29uc3QgcGF0aCYgX19wLCBlcnJvcl9j
b2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVybiBpc19yZWd1bGFyX2ZpbGUoX19zdGF0dXMo
X19wLCAmX19lYykpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29s
IGlzX3NvY2tldChmaWxlX3N0YXR1cyBfX3MpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fcy50eXBl
KCkgPT0gZmlsZV90eXBlOjpzb2NrZXQ7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZIGJvb2wgaXNfc29ja2V0KGNvbnN0IHBhdGgmIF9fcCkgeworICByZXR1cm4gaXNfc29j
a2V0KF9fc3RhdHVzKF9fcCkpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBib29sIGlzX3NvY2tldChjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7Cisg
IHJldHVybiBpc19zb2NrZXQoX19zdGF0dXMoX19wLCAmX19lYykpOworfQorCitpbmxpbmUgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX3N5bWxpbmsoZmlsZV9zdGF0dXMgX19zKSBu
b2V4Y2VwdCB7CisgIHJldHVybiBfX3MudHlwZSgpID09IGZpbGVfdHlwZTo6c3ltbGluazsKK30K
KworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCBpc19zeW1saW5rKGNvbnN0
IHBhdGgmIF9fcCkgeworICByZXR1cm4gaXNfc3ltbGluayhfX3N5bWxpbmtfc3RhdHVzKF9fcCkp
OworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX3N5bWxpbmso
Y29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIGlzX3N5bWxp
bmsoX19zeW1saW5rX3N0YXR1cyhfX3AsICZfX2VjKSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZIGJvb2wgaXNfb3RoZXIoZmlsZV9zdGF0dXMgX19zKSBub2V4Y2VwdCB7
CisgIHJldHVybiBleGlzdHMoX19zKSAmJiAhaXNfcmVndWxhcl9maWxlKF9fcykgJiYgIWlzX2Rp
cmVjdG9yeShfX3MpICYmCisgICAgICAgICAhaXNfc3ltbGluayhfX3MpOworfQorCitpbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sIGlzX290aGVyKGNvbnN0IHBhdGgmIF9fcCkg
eworICByZXR1cm4gaXNfb3RoZXIoX19zdGF0dXMoX19wKSk7Cit9CisKK2lubGluZSBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIGJvb2wgaXNfb3RoZXIoY29uc3QgcGF0aCYgX19wLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2Vj
KSBub2V4Y2VwdCB7CisgIHJldHVybiBpc19vdGhlcihfX3N0YXR1cyhfX3AsICZfX2VjKSk7Cit9
CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGZpbGVfdGltZV90eXBlCitsYXN0
X3dyaXRlX3RpbWUoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVybiBfX2xhc3Rfd3JpdGVfdGlt
ZShfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBmaWxlX3RpbWVf
dHlwZQorbGFzdF93cml0ZV90aW1lKGNvbnN0IHBhdGgmIF9fcCwgZXJyb3JfY29kZSYgX19lYykg
bm9leGNlcHQgeworICByZXR1cm4gX19sYXN0X3dyaXRlX3RpbWUoX19wLCAmX19lYyk7Cit9CisK
K2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQgbGFzdF93cml0ZV90aW1lKGNv
bnN0IHBhdGgmIF9fcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZpbGVfdGltZV90eXBlIF9fdCkgeworICBfX2xhc3Rfd3JpdGVfdGltZShf
X3AsIF9fdCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQKK2xh
c3Rfd3JpdGVfdGltZShjb25zdCBwYXRoJiBfX3AsIGZpbGVfdGltZV90eXBlIF9fdCwKKyAgICAg
ICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIF9fbGFzdF93cml0ZV90
aW1lKF9fcCwgX190LCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIHZvaWQKK3Blcm1pc3Npb25zKGNvbnN0IHBhdGgmIF9fcCwgcGVybXMgX19wcm1zLAorICAg
ICAgICAgICAgcGVybV9vcHRpb25zIF9fb3B0cyA9IHBlcm1fb3B0aW9uczo6cmVwbGFjZSkgewor
ICBfX3Blcm1pc3Npb25zKF9fcCwgX19wcm1zLCBfX29wdHMpOworfQorCitpbmxpbmUgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIHBlcm1pc3Npb25zKGNvbnN0IHBhdGgmIF9fcCwgcGVy
bXMgX19wcm1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIF9fcGVybWlzc2lvbnMoX19wLCBf
X3BybXMsIHBlcm1fb3B0aW9uczo6cmVwbGFjZSwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIHBlcm1pc3Npb25zKGNvbnN0IHBhdGgmIF9fcCwgcGVy
bXMgX19wcm1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwZXJtX29wdGlvbnMgX19vcHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7CisgIF9fcGVybWlzc2lvbnMo
X19wLCBfX3BybXMsIF9fb3B0cywgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWSBwYXRoIHByb3hpbWF0ZShjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoJiBfX2Jhc2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2Rl
JiBfX2VjKSB7CisgIHBhdGggX190bXAgPSBfX3dlYWtseV9jYW5vbmljYWwoX19wLCAmX19lYyk7
CisgIGlmIChfX2VjKQorICAgIHJldHVybiB7fTsKKyAgcGF0aCBfX3RtcF9iYXNlID0gX193ZWFr
bHlfY2Fub25pY2FsKF9fYmFzZSwgJl9fZWMpOworICBpZiAoX19lYykKKyAgICByZXR1cm4ge307
CisgIHJldHVybiBfX3RtcC5sZXhpY2FsbHlfcHJveGltYXRlKF9fdG1wX2Jhc2UpOworfQorCitp
bmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIHByb3hpbWF0ZShjb25zdCBwYXRo
JiBfX3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
cnJvcl9jb2RlJiBfX2VjKSB7CisgIHJldHVybiBwcm94aW1hdGUoX19wLCBjdXJyZW50X3BhdGgo
KSwgX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGgKK3By
b3hpbWF0ZShjb25zdCBwYXRoJiBfX3AsIGNvbnN0IHBhdGgmIF9fYmFzZSA9IGN1cnJlbnRfcGF0
aCgpKSB7CisgIHJldHVybiBfX3dlYWtseV9jYW5vbmljYWwoX19wKS5sZXhpY2FsbHlfcHJveGlt
YXRlKAorICAgICAgX193ZWFrbHlfY2Fub25pY2FsKF9fYmFzZSkpOworfQorCitpbmxpbmUgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIHJlYWRfc3ltbGluayhjb25zdCBwYXRoJiBfX3Ap
IHsKKyAgcmV0dXJuIF9fcmVhZF9zeW1saW5rKF9fcCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lO
TElORV9WSVNJQklMSVRZIHBhdGggcmVhZF9zeW1saW5rKGNvbnN0IHBhdGgmIF9fcCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUm
IF9fZWMpIHsKKyAgcmV0dXJuIF9fcmVhZF9zeW1saW5rKF9fcCwgJl9fZWMpOworfQorCitpbmxp
bmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBwYXRoIHJlbGF0aXZlKGNvbnN0IHBhdGgmIF9f
cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
cGF0aCYgX19iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7CisgIHBhdGggX190bXAgPSBfX3dlYWtseV9jYW5vbmlj
YWwoX19wLCAmX19lYyk7CisgIGlmIChfX2VjKQorICAgIHJldHVybiBwYXRoKCk7CisgIHBhdGgg
X190bXBiYXNlID0gX193ZWFrbHlfY2Fub25pY2FsKF9fYmFzZSwgJl9fZWMpOworICBpZiAoX19l
YykKKyAgICByZXR1cm4gcGF0aCgpOworICByZXR1cm4gX190bXAubGV4aWNhbGx5X3JlbGF0aXZl
KF9fdG1wYmFzZSk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGgg
cmVsYXRpdmUoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSB7CisgIHJldHVybiByZWxhdGl2ZShf
X3AsIGN1cnJlbnRfcGF0aCgpLCBfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgcGF0aAorcmVsYXRpdmUoY29uc3QgcGF0aCYgX19wLCBjb25zdCBwYXRoJiBfX2Jh
c2UgPSBjdXJyZW50X3BhdGgoKSkgeworICByZXR1cm4gX193ZWFrbHlfY2Fub25pY2FsKF9fcCku
bGV4aWNhbGx5X3JlbGF0aXZlKF9fd2Vha2x5X2Nhbm9uaWNhbChfX2Jhc2UpKTsKK30KKworaW5s
aW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgYm9vbCByZW1vdmUoY29uc3QgcGF0aCYgX19w
KSB7CisgIHJldHVybiBfX3JlbW92ZShfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWSBib29sIHJlbW92ZShjb25zdCBwYXRoJiBfX3AsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7
CisgIHJldHVybiBfX3JlbW92ZShfX3AsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkgdWludG1heF90IHJlbW92ZV9hbGwoY29uc3QgcGF0aCYgX19wKSB7Cisg
IHJldHVybiBfX3JlbW92ZV9hbGwoX19wKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJ
U0lCSUxJVFkgdWludG1heF90IHJlbW92ZV9hbGwoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYg
X19lYykgeworICByZXR1cm4gX19yZW1vdmVfYWxsKF9fcCwgJl9fZWMpOworfQorCitpbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkIHJlbmFtZShjb25zdCBwYXRoJiBfX2Zyb20s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRo
JiBfX3RvKSB7CisgIHJldHVybiBfX3JlbmFtZShfX2Zyb20sIF9fdG8pOworfQorCitpbmxpbmUg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSB2b2lkCityZW5hbWUoY29uc3QgcGF0aCYgX19mcm9t
LCBjb25zdCBwYXRoJiBfX3RvLCBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7CisgIHJldHVy
biBfX3JlbmFtZShfX2Zyb20sIF9fdG8sICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkgdm9pZCByZXNpemVfZmlsZShjb25zdCBwYXRoJiBfX3AsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnRtYXhfdCBfX25z
KSB7CisgIHJldHVybiBfX3Jlc2l6ZV9maWxlKF9fcCwgX19ucyk7Cit9CisKK2lubGluZSBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZIHZvaWQKK3Jlc2l6ZV9maWxlKGNvbnN0IHBhdGgmIF9fcCwg
dWludG1heF90IF9fbnMsIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9f
cmVzaXplX2ZpbGUoX19wLCBfX25zLCAmX19lYyk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZIHNwYWNlX2luZm8gc3BhY2UoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVy
biBfX3NwYWNlKF9fcCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHNw
YWNlX2luZm8gc3BhY2UoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2VjKSBub2V4Y2VwdCB7Cisg
IHJldHVybiBfX3NwYWNlKF9fcCwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWSBmaWxlX3N0YXR1cyBzdGF0dXMoY29uc3QgcGF0aCYgX19wKSB7CisgIHJldHVy
biBfX3N0YXR1cyhfX3ApOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBm
aWxlX3N0YXR1cyBzdGF0dXMoY29uc3QgcGF0aCYgX19wLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUmIF9fZWMpIG5vZXhjZXB0
IHsKKyAgcmV0dXJuIF9fc3RhdHVzKF9fcCwgJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWSBmaWxlX3N0YXR1cyBzeW1saW5rX3N0YXR1cyhjb25zdCBwYXRoJiBf
X3ApIHsKKyAgcmV0dXJuIF9fc3ltbGlua19zdGF0dXMoX19wKTsKK30KKworaW5saW5lIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkgZmlsZV9zdGF0dXMKK3N5bWxpbmtfc3RhdHVzKGNvbnN0IHBh
dGgmIF9fcCwgZXJyb3JfY29kZSYgX19lYykgbm9leGNlcHQgeworICByZXR1cm4gX19zeW1saW5r
X3N0YXR1cyhfX3AsICZfX2VjKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkgcGF0aCB0ZW1wX2RpcmVjdG9yeV9wYXRoKCkgeworICByZXR1cm4gX190ZW1wX2RpcmVjdG9y
eV9wYXRoKCk7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHBhdGggdGVt
cF9kaXJlY3RvcnlfcGF0aChlcnJvcl9jb2RlJiBfX2VjKSB7CisgIHJldHVybiBfX3RlbXBfZGly
ZWN0b3J5X3BhdGgoJl9fZWMpOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WSBwYXRoIHdlYWtseV9jYW5vbmljYWwocGF0aCBjb25zdCYgX19wKSB7CisgIHJldHVybiBfX3dl
YWtseV9jYW5vbmljYWwoX19wKTsKK30KKworaW5saW5lIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkgcGF0aCB3ZWFrbHlfY2Fub25pY2FsKHBhdGggY29uc3QmIF9fcCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlJiBfX2Vj
KSB7CisgIHJldHVybiBfX3dlYWtseV9jYW5vbmljYWwoX19wLCAmX19lYyk7Cit9CisKK2NsYXNz
IGRpcmVjdG9yeV9pdGVyYXRvcjsKK2NsYXNzIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3I7
CitjbGFzcyBfX2Rpcl9zdHJlYW07CisKK2NsYXNzIGRpcmVjdG9yeV9lbnRyeSB7CisgIHR5cGVk
ZWYgX1ZTVERfRlM6OnBhdGggX1BhdGg7CisKK3B1YmxpYzoKKyAgLy8gY29uc3RydWN0b3JzIGFu
ZCBkZXN0cnVjdG9ycworICBkaXJlY3RvcnlfZW50cnkoKSBub2V4Y2VwdCA9IGRlZmF1bHQ7Cisg
IGRpcmVjdG9yeV9lbnRyeShkaXJlY3RvcnlfZW50cnkgY29uc3QmKSA9IGRlZmF1bHQ7CisgIGRp
cmVjdG9yeV9lbnRyeShkaXJlY3RvcnlfZW50cnkmJikgbm9leGNlcHQgPSBkZWZhdWx0OworCisg
IF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZXhwbGljaXQgZGlyZWN0b3J5X2VudHJ5KF9Q
YXRoIGNvbnN0JiBfX3ApIDogX19wXyhfX3ApIHsKKyAgICBlcnJvcl9jb2RlIF9fZWM7CisgICAg
X19yZWZyZXNoKCZfX2VjKTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAg
ZGlyZWN0b3J5X2VudHJ5KF9QYXRoIGNvbnN0JiBfX3AsIGVycm9yX2NvZGUmIF9fZWMpIDogX19w
XyhfX3ApIHsKKyAgICBfX3JlZnJlc2goJl9fZWMpOworICB9CisKKyAgfmRpcmVjdG9yeV9lbnRy
eSgpIHt9CisKKyAgZGlyZWN0b3J5X2VudHJ5JiBvcGVyYXRvcj0oZGlyZWN0b3J5X2VudHJ5IGNv
bnN0JikgPSBkZWZhdWx0OworICBkaXJlY3RvcnlfZW50cnkmIG9wZXJhdG9yPShkaXJlY3Rvcnlf
ZW50cnkmJikgbm9leGNlcHQgPSBkZWZhdWx0OworCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkKKyAgdm9pZCBhc3NpZ24oX1BhdGggY29uc3QmIF9fcCkgeworICAgIF9fcF8gPSBfX3A7Cisg
ICAgZXJyb3JfY29kZSBfX2VjOworICAgIF9fcmVmcmVzaCgmX19lYyk7CisgIH0KKworICBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgYXNzaWduKF9QYXRoIGNvbnN0JiBfX3AsIGVy
cm9yX2NvZGUmIF9fZWMpIHsKKyAgICBfX3BfID0gX19wOworICAgIF9fcmVmcmVzaCgmX19lYyk7
CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgcmVwbGFjZV9maWxl
bmFtZShfUGF0aCBjb25zdCYgX19wKSB7CisgICAgX19wXy5yZXBsYWNlX2ZpbGVuYW1lKF9fcCk7
CisgICAgZXJyb3JfY29kZSBfX2VjOworICAgIF9fcmVmcmVzaCgmX19lYyk7CisgIH0KKworICBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQgcmVwbGFjZV9maWxlbmFtZShfUGF0aCBj
b25zdCYgX19wLCBlcnJvcl9jb2RlJiBfX2VjKSB7CisgICAgX19wXyA9IF9fcF8ucGFyZW50X3Bh
dGgoKSAvIF9fcDsKKyAgICBfX3JlZnJlc2goJl9fZWMpOworICB9CisKKyAgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWQorICB2b2lkIHJlZnJlc2goKSB7IF9fcmVmcmVzaCgpOyB9CisKKyAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB2b2lkIHJlZnJlc2goZXJyb3JfY29kZSYgX19lYykg
bm9leGNlcHQgeyBfX3JlZnJlc2goJl9fZWMpOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQorICBfUGF0aCBjb25zdCYgcGF0aCgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIF9fcF87
IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIG9wZXJhdG9yIGNvbnN0IF9QYXRo
JigpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIF9fcF87IH0KKworICBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZCisgIGJvb2wgZXhpc3RzKCkgY29uc3QgeyByZXR1cm4gX1ZTVERfRlM6OmV4aXN0
cyhmaWxlX3N0YXR1c3tfX2dldF9mdCgpfSk7IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZCisgIGJvb2wgZXhpc3RzKGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0IG5vZXhjZXB0IHsKKyAg
ICByZXR1cm4gX1ZTVERfRlM6OmV4aXN0cyhmaWxlX3N0YXR1c3tfX2dldF9mdCgmX19lYyl9KTsK
KyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19ibG9ja19maWxl
KCkgY29uc3QgeyByZXR1cm4gX19nZXRfZnQoKSA9PSBmaWxlX3R5cGU6OmJsb2NrOyB9CisKKyAg
X0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIGlzX2Jsb2NrX2ZpbGUoZXJyb3JfY29k
ZSYgX19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX2dldF9mdCgmX19lYykgPT0g
ZmlsZV90eXBlOjpibG9jazsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAg
Ym9vbCBpc19jaGFyYWN0ZXJfZmlsZSgpIGNvbnN0IHsgcmV0dXJuIF9fZ2V0X2Z0KCkgPT0gZmls
ZV90eXBlOjpjaGFyYWN0ZXI7IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJv
b2wgaXNfY2hhcmFjdGVyX2ZpbGUoZXJyb3JfY29kZSYgX19lYykgY29uc3Qgbm9leGNlcHQgewor
ICAgIHJldHVybiBfX2dldF9mdCgmX19lYykgPT0gZmlsZV90eXBlOjpjaGFyYWN0ZXI7CisgIH0K
KworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgaXNfZGlyZWN0b3J5KCkgY29u
c3QgeyByZXR1cm4gX19nZXRfZnQoKSA9PSBmaWxlX3R5cGU6OmRpcmVjdG9yeTsgfQorCisgIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19kaXJlY3RvcnkoZXJyb3JfY29kZSYg
X19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX2dldF9mdCgmX19lYykgPT0gZmls
ZV90eXBlOjpkaXJlY3Rvcnk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisg
IGJvb2wgaXNfZmlmbygpIGNvbnN0IHsgcmV0dXJuIF9fZ2V0X2Z0KCkgPT0gZmlsZV90eXBlOjpm
aWZvOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIGlzX2ZpZm8oZXJy
b3JfY29kZSYgX19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX2dldF9mdCgmX19l
YykgPT0gZmlsZV90eXBlOjpmaWZvOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQorICBib29sIGlzX290aGVyKCkgY29uc3QgeyByZXR1cm4gX1ZTVERfRlM6OmlzX290aGVyKGZp
bGVfc3RhdHVze19fZ2V0X2Z0KCl9KTsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
KyAgYm9vbCBpc19vdGhlcihlcnJvcl9jb2RlJiBfX2VjKSBjb25zdCBub2V4Y2VwdCB7CisgICAg
cmV0dXJuIF9WU1REX0ZTOjppc19vdGhlcihmaWxlX3N0YXR1c3tfX2dldF9mdCgmX19lYyl9KTsK
KyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19yZWd1bGFyX2Zp
bGUoKSBjb25zdCB7IHJldHVybiBfX2dldF9mdCgpID09IGZpbGVfdHlwZTo6cmVndWxhcjsgfQor
CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBpc19yZWd1bGFyX2ZpbGUoZXJy
b3JfY29kZSYgX19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX2dldF9mdCgmX19l
YykgPT0gZmlsZV90eXBlOjpyZWd1bGFyOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQorICBib29sIGlzX3NvY2tldCgpIGNvbnN0IHsgcmV0dXJuIF9fZ2V0X2Z0KCkgPT0gZmls
ZV90eXBlOjpzb2NrZXQ7IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wg
aXNfc29ja2V0KGVycm9yX2NvZGUmIF9fZWMpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4g
X19nZXRfZnQoJl9fZWMpID09IGZpbGVfdHlwZTo6c29ja2V0OworICB9CisKKyAgX0xJQkNQUF9J
TkxJTkVfVklTSUJJTElUWQorICBib29sIGlzX3N5bWxpbmsoKSBjb25zdCB7IHJldHVybiBfX2dl
dF9zeW1fZnQoKSA9PSBmaWxlX3R5cGU6OnN5bWxpbms7IH0KKworICBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZCisgIGJvb2wgaXNfc3ltbGluayhlcnJvcl9jb2RlJiBfX2VjKSBjb25zdCBub2V4
Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X3N5bV9mdCgmX19lYykgPT0gZmlsZV90eXBlOjpzeW1s
aW5rOworICB9CisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdWludG1heF90IGZpbGVf
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9fZ2V0X3NpemUoKTsgfQorCisgIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkKKyAgdWludG1heF90IGZpbGVfc2l6ZShlcnJvcl9jb2RlJiBfX2VjKSBjb25z
dCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X3NpemUoJl9fZWMpOworICB9CisKKyAgX0xJ
QkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB1aW50bWF4X3QgaGFyZF9saW5rX2NvdW50KCkgY29u
c3QgeyByZXR1cm4gX19nZXRfbmxpbmsoKTsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJ
VFkKKyAgdWludG1heF90IGhhcmRfbGlua19jb3VudChlcnJvcl9jb2RlJiBfX2VjKSBjb25zdCBu
b2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X25saW5rKCZfX2VjKTsKKyAgfQorCisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV90aW1lX3R5cGUgbGFzdF93cml0ZV90aW1lKCkg
Y29uc3QgeyByZXR1cm4gX19nZXRfd3JpdGVfdGltZSgpOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWQorICBmaWxlX3RpbWVfdHlwZSBsYXN0X3dyaXRlX3RpbWUoZXJyb3JfY29kZSYg
X19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX2dldF93cml0ZV90aW1lKCZfX2Vj
KTsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV9zdGF0dXMgc3Rh
dHVzKCkgY29uc3QgeyByZXR1cm4gX19nZXRfc3RhdHVzKCk7IH0KKworICBfTElCQ1BQX0lOTElO
RV9WSVNJQklMSVRZCisgIGZpbGVfc3RhdHVzIHN0YXR1cyhlcnJvcl9jb2RlJiBfX2VjKSBjb25z
dCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fZ2V0X3N0YXR1cygmX19lYyk7CisgIH0KKworICBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGZpbGVfc3RhdHVzIHN5bWxpbmtfc3RhdHVzKCkg
Y29uc3QgeyByZXR1cm4gX19nZXRfc3ltbGlua19zdGF0dXMoKTsgfQorCisgIF9MSUJDUFBfSU5M
SU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV9zdGF0dXMgc3ltbGlua19zdGF0dXMoZXJyb3JfY29kZSYg
X19lYykgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBfX2dldF9zeW1saW5rX3N0YXR1cygm
X19lYyk7CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgb3BlcmF0
b3I8KGRpcmVjdG9yeV9lbnRyeSBjb25zdCYgX19yaHMpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICBy
ZXR1cm4gX19wXyA8IF9fcmhzLl9fcF87CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZCisgIGJvb2wgb3BlcmF0b3I9PShkaXJlY3RvcnlfZW50cnkgY29uc3QmIF9fcmhzKSBjb25z
dCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fcF8gPT0gX19yaHMuX19wXzsKKyAgfQorCisgIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgYm9vbCBvcGVyYXRvciE9KGRpcmVjdG9yeV9lbnRy
eSBjb25zdCYgX19yaHMpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19wXyAhPSBfX3Jo
cy5fX3BfOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBib29sIG9wZXJh
dG9yPD0oZGlyZWN0b3J5X2VudHJ5IGNvbnN0JiBfX3JocykgY29uc3Qgbm9leGNlcHQgeworICAg
IHJldHVybiBfX3BfIDw9IF9fcmhzLl9fcF87CisgIH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJ
QklMSVRZCisgIGJvb2wgb3BlcmF0b3I+KGRpcmVjdG9yeV9lbnRyeSBjb25zdCYgX19yaHMpIGNv
bnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gX19wXyA+IF9fcmhzLl9fcF87CisgIH0KKworICBf
TElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgb3BlcmF0b3I+PShkaXJlY3RvcnlfZW50
cnkgY29uc3QmIF9fcmhzKSBjb25zdCBub2V4Y2VwdCB7CisgICAgcmV0dXJuIF9fcF8gPj0gX19y
aHMuX19wXzsKKyAgfQorCitwcml2YXRlOgorICBmcmllbmQgY2xhc3MgZGlyZWN0b3J5X2l0ZXJh
dG9yOworICBmcmllbmQgY2xhc3MgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcjsKKyAgZnJp
ZW5kIGNsYXNzIF9fZGlyX3N0cmVhbTsKKworICBlbnVtIF9DYWNoZVR5cGUgOiB1bnNpZ25lZCBj
aGFyIHsKKyAgICBfRW1wdHksCisgICAgX0l0ZXJTeW1saW5rLAorICAgIF9JdGVyTm9uU3ltbGlu
aywKKyAgICBfUmVmcmVzaFN5bWxpbmssCisgICAgX1JlZnJlc2hTeW1saW5rVW5yZXNvbHZlZCwK
KyAgICBfUmVmcmVzaE5vblN5bWxpbmsKKyAgfTsKKworICBzdHJ1Y3QgX19jYWNoZWRfZGF0YSB7
CisgICAgdWludG1heF90IF9fc2l6ZV87CisgICAgdWludG1heF90IF9fbmxpbmtfOworICAgIGZp
bGVfdGltZV90eXBlIF9fd3JpdGVfdGltZV87CisgICAgcGVybXMgX19zeW1fcGVybXNfOworICAg
IHBlcm1zIF9fbm9uX3N5bV9wZXJtc187CisgICAgZmlsZV90eXBlIF9fdHlwZV87CisgICAgX0Nh
Y2hlVHlwZSBfX2NhY2hlX3R5cGVfOworCisgICAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQor
ICAgIF9fY2FjaGVkX2RhdGEoKSBub2V4Y2VwdCB7IF9fcmVzZXQoKTsgfQorCisgICAgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWQorICAgIHZvaWQgX19yZXNldCgpIHsKKyAgICAgIF9fY2FjaGVf
dHlwZV8gPSBfRW1wdHk7CisgICAgICBfX3R5cGVfID0gZmlsZV90eXBlOjpub25lOworICAgICAg
X19zeW1fcGVybXNfID0gX19ub25fc3ltX3Blcm1zXyA9IHBlcm1zOjp1bmtub3duOworICAgICAg
X19zaXplXyA9IF9fbmxpbmtfID0gdWludG1heF90KC0xKTsKKyAgICAgIF9fd3JpdGVfdGltZV8g
PSBmaWxlX3RpbWVfdHlwZTo6bWluKCk7CisgICAgfQorICB9OworCisgIF9MSUJDUFBfSU5MSU5F
X1ZJU0lCSUxJVFkKKyAgc3RhdGljIF9fY2FjaGVkX2RhdGEgX19jcmVhdGVfaXRlcl9yZXN1bHQo
ZmlsZV90eXBlIF9fZnQpIHsKKyAgICBfX2NhY2hlZF9kYXRhIF9fZGF0YTsKKyAgICBfX2RhdGEu
X190eXBlXyA9IF9fZnQ7CisgICAgX19kYXRhLl9fY2FjaGVfdHlwZV8gPSBbJl0oKSB7CisgICAg
ICBzd2l0Y2ggKF9fZnQpIHsKKyAgICAgIGNhc2UgZmlsZV90eXBlOjpub25lOgorICAgICAgICBy
ZXR1cm4gX0VtcHR5OworICAgICAgY2FzZSBmaWxlX3R5cGU6OnN5bWxpbms6CisgICAgICAgIHJl
dHVybiBfSXRlclN5bWxpbms7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gX0l0ZXJO
b25TeW1saW5rOworICAgICAgfQorICAgIH0oKTsKKyAgICByZXR1cm4gX19kYXRhOworICB9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICB2b2lkIF9fYXNzaWduX2l0ZXJfZW50cnko
X1BhdGgmJiBfX3AsIF9fY2FjaGVkX2RhdGEgX19kdCkgeworICAgIF9fcF8gPSBzdGQ6Om1vdmUo
X19wKTsKKyAgICBfX2RhdGFfID0gX19kdDsKKyAgfQorCisgIF9MSUJDUFBfRlVOQ19WSVMKKyAg
ZXJyb3JfY29kZSBfX2RvX3JlZnJlc2goKSBub2V4Y2VwdDsKKworICBfTElCQ1BQX0lOTElORV9W
SVNJQklMSVRZCisgIHN0YXRpYyBib29sIF9faXNfZG5lX2Vycm9yKGVycm9yX2NvZGUgY29uc3Qm
IF9fZWMpIHsKKyAgICBpZiAoIV9fZWMpCisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBzd2l0Y2gg
KHN0YXRpY19jYXN0PGVycmM+KF9fZWMudmFsdWUoKSkpIHsKKyAgICBjYXNlIGVycmM6Om5vX3N1
Y2hfZmlsZV9vcl9kaXJlY3Rvcnk6CisgICAgY2FzZSBlcnJjOjpub3RfYV9kaXJlY3Rvcnk6Cisg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgdm9pZCBfX2hhbmRsZV9l
cnJvcihjb25zdCBjaGFyKiBfX21zZywgZXJyb3JfY29kZSogX19kZXN0X2VjLAorICAgICAgICAg
ICAgICAgICAgICAgIGVycm9yX2NvZGUgY29uc3QmIF9fZWMsIGJvb2wgX19hbGxvd19kbmUgPSBm
YWxzZSkgY29uc3QgeworICAgIGlmIChfX2Rlc3RfZWMpIHsKKyAgICAgICpfX2Rlc3RfZWMgPSBf
X2VjOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoX19lYyAmJiAoIV9fYWxsb3dfZG5l
IHx8ICFfX2lzX2RuZV9lcnJvcihfX2VjKSkpCisgICAgICBfX3Rocm93X2ZpbGVzeXN0ZW1fZXJy
b3IoX19tc2csIF9fcF8sIF9fZWMpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElU
WQorICB2b2lkIF9fcmVmcmVzaChlcnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cikgeworICAgIF9f
aGFuZGxlX2Vycm9yKCJpbiBkaXJlY3RvcnlfZW50cnk6OnJlZnJlc2giLCBfX2VjLCBfX2RvX3Jl
ZnJlc2goKSwKKyAgICAgICAgICAgICAgICAgICAvKmFsbG93X2RuZSovIHRydWUpOworICB9CisK
KyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBmaWxlX3R5cGUgX19nZXRfc3ltX2Z0KGVy
cm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKSBjb25zdCB7CisgICAgc3dpdGNoIChfX2RhdGFfLl9f
Y2FjaGVfdHlwZV8pIHsKKyAgICBjYXNlIF9FbXB0eToKKyAgICAgIHJldHVybiBfX3N5bWxpbmtf
c3RhdHVzKF9fcF8sIF9fZWMpLnR5cGUoKTsKKyAgICBjYXNlIF9JdGVyU3ltbGluazoKKyAgICBj
YXNlIF9SZWZyZXNoU3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGlua1VucmVzb2x2ZWQ6
CisgICAgICBpZiAoX19lYykKKyAgICAgICAgX19lYy0+Y2xlYXIoKTsKKyAgICAgIHJldHVybiBm
aWxlX3R5cGU6OnN5bWxpbms7CisgICAgY2FzZSBfSXRlck5vblN5bWxpbms6CisgICAgY2FzZSBf
UmVmcmVzaE5vblN5bWxpbms6CisgICAgICBmaWxlX3N0YXR1cyBfX3N0KF9fZGF0YV8uX190eXBl
Xyk7CisgICAgICBpZiAoX19lYyAmJiAhX1ZTVERfRlM6OmV4aXN0cyhfX3N0KSkKKyAgICAgICAg
Kl9fZWMgPSBtYWtlX2Vycm9yX2NvZGUoZXJyYzo6bm9fc3VjaF9maWxlX29yX2RpcmVjdG9yeSk7
CisgICAgICBlbHNlIGlmIChfX2VjKQorICAgICAgICBfX2VjLT5jbGVhcigpOworICAgICAgcmV0
dXJuIF9fZGF0YV8uX190eXBlXzsKKyAgICB9CisgICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOwor
ICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBmaWxlX3R5cGUgX19nZXRfZnQo
ZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpIGNvbnN0IHsKKyAgICBzd2l0Y2ggKF9fZGF0YV8u
X19jYWNoZV90eXBlXykgeworICAgIGNhc2UgX0VtcHR5OgorICAgIGNhc2UgX0l0ZXJTeW1saW5r
OgorICAgIGNhc2UgX1JlZnJlc2hTeW1saW5rVW5yZXNvbHZlZDoKKyAgICAgIHJldHVybiBfX3N0
YXR1cyhfX3BfLCBfX2VjKS50eXBlKCk7CisgICAgY2FzZSBfSXRlck5vblN5bWxpbms6CisgICAg
Y2FzZSBfUmVmcmVzaE5vblN5bWxpbms6CisgICAgY2FzZSBfUmVmcmVzaFN5bWxpbms6IHsKKyAg
ICAgIGZpbGVfc3RhdHVzIF9fc3QoX19kYXRhXy5fX3R5cGVfKTsKKyAgICAgIGlmIChfX2VjICYm
ICFfVlNURF9GUzo6ZXhpc3RzKF9fc3QpKQorICAgICAgICAqX19lYyA9IG1ha2VfZXJyb3JfY29k
ZShlcnJjOjpub19zdWNoX2ZpbGVfb3JfZGlyZWN0b3J5KTsKKyAgICAgIGVsc2UgaWYgKF9fZWMp
CisgICAgICAgIF9fZWMtPmNsZWFyKCk7CisgICAgICByZXR1cm4gX19kYXRhXy5fX3R5cGVfOwor
ICAgIH0KKyAgICB9CisgICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOworICB9CisKKyAgX0xJQkNQ
UF9JTkxJTkVfVklTSUJJTElUWQorICBmaWxlX3N0YXR1cyBfX2dldF9zdGF0dXMoZXJyb3JfY29k
ZSogX19lYyA9IG51bGxwdHIpIGNvbnN0IHsKKyAgICBzd2l0Y2ggKF9fZGF0YV8uX19jYWNoZV90
eXBlXykgeworICAgIGNhc2UgX0VtcHR5OgorICAgIGNhc2UgX0l0ZXJOb25TeW1saW5rOgorICAg
IGNhc2UgX0l0ZXJTeW1saW5rOgorICAgIGNhc2UgX1JlZnJlc2hTeW1saW5rVW5yZXNvbHZlZDoK
KyAgICAgIHJldHVybiBfX3N0YXR1cyhfX3BfLCBfX2VjKTsKKyAgICBjYXNlIF9SZWZyZXNoTm9u
U3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGluazoKKyAgICAgIHJldHVybiBmaWxlX3N0
YXR1cyhfX2dldF9mdChfX2VjKSwgX19kYXRhXy5fX25vbl9zeW1fcGVybXNfKTsKKyAgICB9Cisg
ICAgX0xJQkNQUF9VTlJFQUNIQUJMRSgpOworICB9CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJ
TElUWQorICBmaWxlX3N0YXR1cyBfX2dldF9zeW1saW5rX3N0YXR1cyhlcnJvcl9jb2RlKiBfX2Vj
ID0gbnVsbHB0cikgY29uc3QgeworICAgIHN3aXRjaCAoX19kYXRhXy5fX2NhY2hlX3R5cGVfKSB7
CisgICAgY2FzZSBfRW1wdHk6CisgICAgY2FzZSBfSXRlck5vblN5bWxpbms6CisgICAgY2FzZSBf
SXRlclN5bWxpbms6CisgICAgICByZXR1cm4gX19zeW1saW5rX3N0YXR1cyhfX3BfLCBfX2VjKTsK
KyAgICBjYXNlIF9SZWZyZXNoTm9uU3ltbGluazoKKyAgICAgIHJldHVybiBmaWxlX3N0YXR1cyhf
X2dldF9zeW1fZnQoX19lYyksIF9fZGF0YV8uX19ub25fc3ltX3Blcm1zXyk7CisgICAgY2FzZSBf
UmVmcmVzaFN5bWxpbms6CisgICAgY2FzZSBfUmVmcmVzaFN5bWxpbmtVbnJlc29sdmVkOgorICAg
ICAgcmV0dXJuIGZpbGVfc3RhdHVzKF9fZ2V0X3N5bV9mdChfX2VjKSwgX19kYXRhXy5fX3N5bV9w
ZXJtc18pOworICAgIH0KKyAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7CisgIH0KKworICBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZCisgIHVpbnRtYXhfdCBfX2dldF9zaXplKGVycm9yX2NvZGUq
IF9fZWMgPSBudWxscHRyKSBjb25zdCB7CisgICAgc3dpdGNoIChfX2RhdGFfLl9fY2FjaGVfdHlw
ZV8pIHsKKyAgICBjYXNlIF9FbXB0eToKKyAgICBjYXNlIF9JdGVyTm9uU3ltbGluazoKKyAgICBj
YXNlIF9JdGVyU3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGlua1VucmVzb2x2ZWQ6Cisg
ICAgICByZXR1cm4gX1ZTVERfRlM6Ol9fZmlsZV9zaXplKF9fcF8sIF9fZWMpOworICAgIGNhc2Ug
X1JlZnJlc2hTeW1saW5rOgorICAgIGNhc2UgX1JlZnJlc2hOb25TeW1saW5rOiB7CisgICAgICBl
cnJvcl9jb2RlIF9fbV9lYzsKKyAgICAgIGZpbGVfc3RhdHVzIF9fc3QoX19nZXRfZnQoJl9fbV9l
YykpOworICAgICAgX19oYW5kbGVfZXJyb3IoImluIGRpcmVjdG9yeV9lbnRyeTo6ZmlsZV9zaXpl
IiwgX19lYywgX19tX2VjKTsKKyAgICAgIGlmIChfVlNURF9GUzo6ZXhpc3RzKF9fc3QpICYmICFf
VlNURF9GUzo6aXNfcmVndWxhcl9maWxlKF9fc3QpKSB7CisgICAgICAgIGVycmMgX19lcnJfa2lu
ZCA9IF9WU1REX0ZTOjppc19kaXJlY3RvcnkoX19zdCkgPyBlcnJjOjppc19hX2RpcmVjdG9yeQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog
ZXJyYzo6bm90X3N1cHBvcnRlZDsKKyAgICAgICAgX19oYW5kbGVfZXJyb3IoImluIGRpcmVjdG9y
eV9lbnRyeTo6ZmlsZV9zaXplIiwgX19lYywKKyAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9l
cnJvcl9jb2RlKF9fZXJyX2tpbmQpKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBfX2RhdGFfLl9f
c2l6ZV87CisgICAgfQorICAgIH0KKyAgICBfTElCQ1BQX1VOUkVBQ0hBQkxFKCk7CisgIH0KKwor
ICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHVpbnRtYXhfdCBfX2dldF9ubGluayhlcnJv
cl9jb2RlKiBfX2VjID0gbnVsbHB0cikgY29uc3QgeworICAgIHN3aXRjaCAoX19kYXRhXy5fX2Nh
Y2hlX3R5cGVfKSB7CisgICAgY2FzZSBfRW1wdHk6CisgICAgY2FzZSBfSXRlck5vblN5bWxpbms6
CisgICAgY2FzZSBfSXRlclN5bWxpbms6CisgICAgY2FzZSBfUmVmcmVzaFN5bWxpbmtVbnJlc29s
dmVkOgorICAgICAgcmV0dXJuIF9WU1REX0ZTOjpfX2hhcmRfbGlua19jb3VudChfX3BfLCBfX2Vj
KTsKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoTm9uU3ltbGlu
azogeworICAgICAgZXJyb3JfY29kZSBfX21fZWM7CisgICAgICAodm9pZClfX2dldF9mdCgmX19t
X2VjKTsKKyAgICAgIF9faGFuZGxlX2Vycm9yKCJpbiBkaXJlY3RvcnlfZW50cnk6OmhhcmRfbGlu
a19jb3VudCIsIF9fZWMsIF9fbV9lYyk7CisgICAgICByZXR1cm4gX19kYXRhXy5fX25saW5rXzsK
KyAgICB9CisgICAgfQorICAgIF9MSUJDUFBfVU5SRUFDSEFCTEUoKTsKKyAgfQorCisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgZmlsZV90aW1lX3R5cGUgX19nZXRfd3JpdGVfdGltZShl
cnJvcl9jb2RlKiBfX2VjID0gbnVsbHB0cikgY29uc3QgeworICAgIHN3aXRjaCAoX19kYXRhXy5f
X2NhY2hlX3R5cGVfKSB7CisgICAgY2FzZSBfRW1wdHk6CisgICAgY2FzZSBfSXRlck5vblN5bWxp
bms6CisgICAgY2FzZSBfSXRlclN5bWxpbms6CisgICAgY2FzZSBfUmVmcmVzaFN5bWxpbmtVbnJl
c29sdmVkOgorICAgICAgcmV0dXJuIF9WU1REX0ZTOjpfX2xhc3Rfd3JpdGVfdGltZShfX3BfLCBf
X2VjKTsKKyAgICBjYXNlIF9SZWZyZXNoU3ltbGluazoKKyAgICBjYXNlIF9SZWZyZXNoTm9uU3lt
bGluazogeworICAgICAgZXJyb3JfY29kZSBfX21fZWM7CisgICAgICBmaWxlX3N0YXR1cyBfX3N0
KF9fZ2V0X2Z0KCZfX21fZWMpKTsKKyAgICAgIF9faGFuZGxlX2Vycm9yKCJpbiBkaXJlY3Rvcnlf
ZW50cnk6Omxhc3Rfd3JpdGVfdGltZSIsIF9fZWMsIF9fbV9lYyk7CisgICAgICBpZiAoX1ZTVERf
RlM6OmV4aXN0cyhfX3N0KSAmJgorICAgICAgICAgIF9fZGF0YV8uX193cml0ZV90aW1lXyA9PSBm
aWxlX3RpbWVfdHlwZTo6bWluKCkpCisgICAgICAgIF9faGFuZGxlX2Vycm9yKCJpbiBkaXJlY3Rv
cnlfZW50cnk6Omxhc3Rfd3JpdGVfdGltZSIsIF9fZWMsCisgICAgICAgICAgICAgICAgICAgICAg
IG1ha2VfZXJyb3JfY29kZShlcnJjOjp2YWx1ZV90b29fbGFyZ2UpKTsKKyAgICAgIHJldHVybiBf
X2RhdGFfLl9fd3JpdGVfdGltZV87CisgICAgfQorICAgIH0KKyAgICBfTElCQ1BQX1VOUkVBQ0hB
QkxFKCk7CisgIH0KKworcHJpdmF0ZToKKyAgX1BhdGggX19wXzsKKyAgX19jYWNoZWRfZGF0YSBf
X2RhdGFfOworfTsKKworY2xhc3MgX19kaXJfZWxlbWVudF9wcm94eSB7CitwdWJsaWM6CisgIGlu
bGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGRpcmVjdG9yeV9lbnRyeSBvcGVyYXRvcioo
KSB7CisgICAgcmV0dXJuIF9WU1REOjptb3ZlKF9fZWxlbV8pOworICB9CisKK3ByaXZhdGU6Cisg
IGZyaWVuZCBjbGFzcyBkaXJlY3RvcnlfaXRlcmF0b3I7CisgIGZyaWVuZCBjbGFzcyByZWN1cnNp
dmVfZGlyZWN0b3J5X2l0ZXJhdG9yOworICBleHBsaWNpdCBfX2Rpcl9lbGVtZW50X3Byb3h5KGRp
cmVjdG9yeV9lbnRyeSBjb25zdCYgX19lKSA6IF9fZWxlbV8oX19lKSB7fQorICBfX2Rpcl9lbGVt
ZW50X3Byb3h5KF9fZGlyX2VsZW1lbnRfcHJveHkmJiBfX28pCisgICAgICA6IF9fZWxlbV8oX1ZT
VEQ6Om1vdmUoX19vLl9fZWxlbV8pKSB7fQorICBkaXJlY3RvcnlfZW50cnkgX19lbGVtXzsKK307
CisKK2NsYXNzIGRpcmVjdG9yeV9pdGVyYXRvciB7CitwdWJsaWM6CisgIHR5cGVkZWYgZGlyZWN0
b3J5X2VudHJ5IHZhbHVlX3R5cGU7CisgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlw
ZTsKKyAgdHlwZWRlZiB2YWx1ZV90eXBlIGNvbnN0KiBwb2ludGVyOworICB0eXBlZGVmIHZhbHVl
X3R5cGUgY29uc3QmIHJlZmVyZW5jZTsKKyAgdHlwZWRlZiBpbnB1dF9pdGVyYXRvcl90YWcgaXRl
cmF0b3JfY2F0ZWdvcnk7CisKK3B1YmxpYzoKKyAgLy9jdG9yICYgZHRvcgorICBkaXJlY3Rvcnlf
aXRlcmF0b3IoKSBub2V4Y2VwdCB7fQorCisgIGV4cGxpY2l0IGRpcmVjdG9yeV9pdGVyYXRvcihj
b25zdCBwYXRoJiBfX3ApCisgICAgICA6IGRpcmVjdG9yeV9pdGVyYXRvcihfX3AsIG51bGxwdHIp
IHt9CisKKyAgZGlyZWN0b3J5X2l0ZXJhdG9yKGNvbnN0IHBhdGgmIF9fcCwgZGlyZWN0b3J5X29w
dGlvbnMgX19vcHRzKQorICAgICAgOiBkaXJlY3RvcnlfaXRlcmF0b3IoX19wLCBudWxscHRyLCBf
X29wdHMpIHt9CisKKyAgZGlyZWN0b3J5X2l0ZXJhdG9yKGNvbnN0IHBhdGgmIF9fcCwgZXJyb3Jf
Y29kZSYgX19lYykKKyAgICAgIDogZGlyZWN0b3J5X2l0ZXJhdG9yKF9fcCwgJl9fZWMpIHt9CisK
KyAgZGlyZWN0b3J5X2l0ZXJhdG9yKGNvbnN0IHBhdGgmIF9fcCwgZGlyZWN0b3J5X29wdGlvbnMg
X19vcHRzLAorICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykKKyAgICAgIDog
ZGlyZWN0b3J5X2l0ZXJhdG9yKF9fcCwgJl9fZWMsIF9fb3B0cykge30KKworICBkaXJlY3Rvcnlf
aXRlcmF0b3IoY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9yJikgPSBkZWZhdWx0OworICBkaXJlY3Rv
cnlfaXRlcmF0b3IoZGlyZWN0b3J5X2l0ZXJhdG9yJiYpID0gZGVmYXVsdDsKKyAgZGlyZWN0b3J5
X2l0ZXJhdG9yJiBvcGVyYXRvcj0oY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9yJikgPSBkZWZhdWx0
OworCisgIGRpcmVjdG9yeV9pdGVyYXRvciYgb3BlcmF0b3I9KGRpcmVjdG9yeV9pdGVyYXRvciYm
IF9fbykgbm9leGNlcHQgeworICAgIC8vIG5vbi1kZWZhdWx0IGltcGxlbWVudGF0aW9uIHByb3Zp
ZGVkIHRvIHN1cHBvcnQgc2VsZi1tb3ZlIGFzc2lnbi4KKyAgICBpZiAodGhpcyAhPSAmX19vKSB7
CisgICAgICBfX2ltcF8gPSBfVlNURDo6bW92ZShfX28uX19pbXBfKTsKKyAgICB9CisgICAgcmV0
dXJuICp0aGlzOworICB9CisKKyAgfmRpcmVjdG9yeV9pdGVyYXRvcigpID0gZGVmYXVsdDsKKwor
ICBjb25zdCBkaXJlY3RvcnlfZW50cnkmIG9wZXJhdG9yKigpIGNvbnN0IHsKKyAgICBfTElCQ1BQ
X0FTU0VSVChfX2ltcF8sICJUaGUgZW5kIGl0ZXJhdG9yIGNhbm5vdCBiZSBkZXJlZmVyZW5jZWQi
KTsKKyAgICByZXR1cm4gX19kZXJlZmVyZW5jZSgpOworICB9CisKKyAgY29uc3QgZGlyZWN0b3J5
X2VudHJ5KiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJioqdGhpczsgfQorCisgIGRpcmVj
dG9yeV9pdGVyYXRvciYgb3BlcmF0b3IrKygpIHsgcmV0dXJuIF9faW5jcmVtZW50KCk7IH0KKwor
ICBfX2Rpcl9lbGVtZW50X3Byb3h5IG9wZXJhdG9yKysoaW50KSB7CisgICAgX19kaXJfZWxlbWVu
dF9wcm94eSBfX3AoKip0aGlzKTsKKyAgICBfX2luY3JlbWVudCgpOworICAgIHJldHVybiBfX3A7
CisgIH0KKworICBkaXJlY3RvcnlfaXRlcmF0b3ImIGluY3JlbWVudChlcnJvcl9jb2RlJiBfX2Vj
KSB7IHJldHVybiBfX2luY3JlbWVudCgmX19lYyk7IH0KKworcHJpdmF0ZToKKyAgaW5saW5lIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkgZnJpZW5kIGJvb2wKKyAgb3BlcmF0b3I9PShjb25zdCBk
aXJlY3RvcnlfaXRlcmF0b3ImIF9fbGhzLAorICAgICAgICAgICAgIGNvbnN0IGRpcmVjdG9yeV9p
dGVyYXRvciYgX19yaHMpIG5vZXhjZXB0OworCisgIC8vIGNvbnN0cnVjdCB0aGUgZGlyX3N0cmVh
bQorICBfTElCQ1BQX0ZVTkNfVklTCisgIGRpcmVjdG9yeV9pdGVyYXRvcihjb25zdCBwYXRoJiwg
ZXJyb3JfY29kZSosCisgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnlfb3B0aW9ucyA9IGRp
cmVjdG9yeV9vcHRpb25zOjpub25lKTsKKworICBfTElCQ1BQX0ZVTkNfVklTCisgIGRpcmVjdG9y
eV9pdGVyYXRvciYgX19pbmNyZW1lbnQoZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworCisg
IF9MSUJDUFBfRlVOQ19WSVMKKyAgY29uc3QgZGlyZWN0b3J5X2VudHJ5JiBfX2RlcmVmZXJlbmNl
KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgIHNoYXJlZF9wdHI8X19kaXJfc3RyZWFtPiBfX2ltcF87
Cit9OworCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWSBib29sCitvcGVyYXRvcj09
KGNvbnN0IGRpcmVjdG9yeV9pdGVyYXRvciYgX19saHMsCisgICAgICAgICAgIGNvbnN0IGRpcmVj
dG9yeV9pdGVyYXRvciYgX19yaHMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuIF9fbGhzLl9faW1wXyA9
PSBfX3Jocy5fX2ltcF87Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIGJv
b2wKK29wZXJhdG9yIT0oY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9yJiBfX2xocywKKyAgICAgICAg
ICAgY29uc3QgZGlyZWN0b3J5X2l0ZXJhdG9yJiBfX3Jocykgbm9leGNlcHQgeworICByZXR1cm4g
IShfX2xocyA9PSBfX3Jocyk7Cit9CisKKy8vIGVuYWJsZSBkaXJlY3RvcnlfaXRlcmF0b3IgcmFu
Z2UtYmFzZWQgZm9yIHN0YXRlbWVudHMKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZ
IGRpcmVjdG9yeV9pdGVyYXRvcgorYmVnaW4oZGlyZWN0b3J5X2l0ZXJhdG9yIF9faXRlcikgbm9l
eGNlcHQgeworICByZXR1cm4gX19pdGVyOworfQorCitpbmxpbmUgX0xJQkNQUF9JTkxJTkVfVklT
SUJJTElUWSBkaXJlY3RvcnlfaXRlcmF0b3IKK2VuZChjb25zdCBkaXJlY3RvcnlfaXRlcmF0b3Im
KSBub2V4Y2VwdCB7CisgIHJldHVybiBkaXJlY3RvcnlfaXRlcmF0b3IoKTsKK30KKworY2xhc3Mg
cmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciB7CitwdWJsaWM6CisgIHVzaW5nIHZhbHVlX3R5
cGUgPSBkaXJlY3RvcnlfZW50cnk7CisgIHVzaW5nIGRpZmZlcmVuY2VfdHlwZSA9IHN0ZDo6cHRy
ZGlmZl90OworICB1c2luZyBwb2ludGVyID0gZGlyZWN0b3J5X2VudHJ5IGNvbnN0KjsKKyAgdXNp
bmcgcmVmZXJlbmNlID0gZGlyZWN0b3J5X2VudHJ5IGNvbnN0JjsKKyAgdXNpbmcgaXRlcmF0b3Jf
Y2F0ZWdvcnkgPSBzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZzsKKworcHVibGljOgorICAvLyBjb25z
dHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3IKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBy
ZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yKCkgbm9leGNlcHQgOiBfX3JlY18oZmFsc2UpIHt9
CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQorICBleHBsaWNpdCByZWN1cnNpdmVfZGly
ZWN0b3J5X2l0ZXJhdG9yKAorICAgICAgY29uc3QgcGF0aCYgX19wLCBkaXJlY3Rvcnlfb3B0aW9u
cyBfX3hvcHRpb25zID0gZGlyZWN0b3J5X29wdGlvbnM6Om5vbmUpCisgICAgICA6IHJlY3Vyc2l2
ZV9kaXJlY3RvcnlfaXRlcmF0b3IoX19wLCBfX3hvcHRpb25zLCBudWxscHRyKSB7fQorCisgIF9M
SUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcihj
b25zdCBwYXRoJiBfX3AsIGRpcmVjdG9yeV9vcHRpb25zIF9feG9wdGlvbnMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSYgX19lYykKKyAgICAgIDogcmVjdXJzaXZl
X2RpcmVjdG9yeV9pdGVyYXRvcihfX3AsIF9feG9wdGlvbnMsICZfX2VjKSB7fQorCisgIF9MSUJD
UFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcihjb25z
dCBwYXRoJiBfX3AsIGVycm9yX2NvZGUmIF9fZWMpCisgICAgICA6IHJlY3Vyc2l2ZV9kaXJlY3Rv
cnlfaXRlcmF0b3IoX19wLCBkaXJlY3Rvcnlfb3B0aW9uczo6bm9uZSwgJl9fZWMpIHt9CisKKyAg
cmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcihjb25zdCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0
ZXJhdG9yJikgPSBkZWZhdWx0OworICByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yKHJlY3Vy
c2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3ImJikgPSBkZWZhdWx0OworCisgIHJlY3Vyc2l2ZV9kaXJl
Y3RvcnlfaXRlcmF0b3ImCisgIG9wZXJhdG9yPShjb25zdCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0
ZXJhdG9yJikgPSBkZWZhdWx0OworCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkKKyAgcmVj
dXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYKKyAgb3BlcmF0b3I9KHJlY3Vyc2l2ZV9kaXJlY3Rv
cnlfaXRlcmF0b3ImJiBfX28pIG5vZXhjZXB0IHsKKyAgICAvLyBub24tZGVmYXVsdCBpbXBsZW1l
bnRhdGlvbiBwcm92aWRlZCB0byBzdXBwb3J0IHNlbGYtbW92ZSBhc3NpZ24uCisgICAgaWYgKHRo
aXMgIT0gJl9fbykgeworICAgICAgX19pbXBfID0gX1ZTVEQ6Om1vdmUoX19vLl9faW1wXyk7Cisg
ICAgICBfX3JlY18gPSBfX28uX19yZWNfOworICAgIH0KKyAgICByZXR1cm4gKnRoaXM7CisgIH0K
KworICB+cmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcigpID0gZGVmYXVsdDsKKworICBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZCisgIGNvbnN0IGRpcmVjdG9yeV9lbnRyeSYgb3BlcmF0b3Iq
KCkgY29uc3QgeyByZXR1cm4gX19kZXJlZmVyZW5jZSgpOyB9CisKKyAgX0xJQkNQUF9JTkxJTkVf
VklTSUJJTElUWQorICBjb25zdCBkaXJlY3RvcnlfZW50cnkqIG9wZXJhdG9yLT4oKSBjb25zdCB7
IHJldHVybiAmX19kZXJlZmVyZW5jZSgpOyB9CisKKyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVy
YXRvciYgb3BlcmF0b3IrKygpIHsgcmV0dXJuIF9faW5jcmVtZW50KCk7IH0KKworICBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZCisgIF9fZGlyX2VsZW1lbnRfcHJveHkgb3BlcmF0b3IrKyhpbnQp
IHsKKyAgICBfX2Rpcl9lbGVtZW50X3Byb3h5IF9fcCgqKnRoaXMpOworICAgIF9faW5jcmVtZW50
KCk7CisgICAgcmV0dXJuIF9fcDsKKyAgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
KyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYgaW5jcmVtZW50KGVycm9yX2NvZGUmIF9f
ZWMpIHsKKyAgICByZXR1cm4gX19pbmNyZW1lbnQoJl9fZWMpOworICB9CisKKyAgX0xJQkNQUF9G
VU5DX1ZJUyBkaXJlY3Rvcnlfb3B0aW9ucyBvcHRpb25zKCkgY29uc3Q7CisgIF9MSUJDUFBfRlVO
Q19WSVMgaW50IGRlcHRoKCkgY29uc3Q7CisKKyAgX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQor
ICB2b2lkIHBvcCgpIHsgX19wb3AoKTsgfQorCisgIF9MSUJDUFBfSU5MSU5FX1ZJU0lCSUxJVFkK
KyAgdm9pZCBwb3AoZXJyb3JfY29kZSYgX19lYykgeyBfX3BvcCgmX19lYyk7IH0KKworICBfTElC
Q1BQX0lOTElORV9WSVNJQklMSVRZCisgIGJvb2wgcmVjdXJzaW9uX3BlbmRpbmcoKSBjb25zdCB7
IHJldHVybiBfX3JlY187IH0KKworICBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZCisgIHZvaWQg
ZGlzYWJsZV9yZWN1cnNpb25fcGVuZGluZygpIHsgX19yZWNfID0gZmFsc2U7IH0KKworcHJpdmF0
ZToKKyAgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcihjb25zdCBwYXRoJiBfX3AsIGRpcmVj
dG9yeV9vcHRpb25zIF9fb3B0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9y
X2NvZGUqIF9fZWMpOworCisgIF9MSUJDUFBfRlVOQ19WSVMKKyAgY29uc3QgZGlyZWN0b3J5X2Vu
dHJ5JiBfX2RlcmVmZXJlbmNlKCkgY29uc3Q7CisKKyAgX0xJQkNQUF9GVU5DX1ZJUworICBib29s
IF9fdHJ5X3JlY3Vyc2lvbihlcnJvcl9jb2RlKiBfX2VjKTsKKworICBfTElCQ1BQX0ZVTkNfVklT
CisgIHZvaWQgX19hZHZhbmNlKGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKKworICBfTElC
Q1BQX0ZVTkNfVklTCisgIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3ImIF9faW5jcmVtZW50
KGVycm9yX2NvZGUqIF9fZWMgPSBudWxscHRyKTsKKworICBfTElCQ1BQX0ZVTkNfVklTCisgIHZv
aWQgX19wb3AoZXJyb3JfY29kZSogX19lYyA9IG51bGxwdHIpOworCisgIGlubGluZSBfTElCQ1BQ
X0lOTElORV9WSVNJQklMSVRZIGZyaWVuZCBib29sCisgIG9wZXJhdG9yPT0oY29uc3QgcmVjdXJz
aXZlX2RpcmVjdG9yeV9pdGVyYXRvciYsCisgICAgICAgICAgICAgY29uc3QgcmVjdXJzaXZlX2Rp
cmVjdG9yeV9pdGVyYXRvciYpIG5vZXhjZXB0OworCisgIHN0cnVjdCBfX3NoYXJlZF9pbXA7Cisg
IHNoYXJlZF9wdHI8X19zaGFyZWRfaW1wPiBfX2ltcF87CisgIGJvb2wgX19yZWNfOworfTsgLy8g
Y2xhc3MgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvcgorCitpbmxpbmUgX0xJQkNQUF9JTkxJ
TkVfVklTSUJJTElUWSBib29sCitvcGVyYXRvcj09KGNvbnN0IHJlY3Vyc2l2ZV9kaXJlY3Rvcnlf
aXRlcmF0b3ImIF9fbGhzLAorICAgICAgICAgICBjb25zdCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0
ZXJhdG9yJiBfX3Jocykgbm9leGNlcHQgeworICByZXR1cm4gX19saHMuX19pbXBfID09IF9fcmhz
Ll9faW1wXzsKK30KKworX0xJQkNQUF9JTkxJTkVfVklTSUJJTElUWQoraW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCByZWN1cnNpdmVfZGlyZWN0b3J5X2l0ZXJhdG9yJiBfX2xocywKKyAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgcmVjdXJzaXZlX2RpcmVjdG9yeV9pdGVyYXRvciYgX19y
aHMpIG5vZXhjZXB0IHsKKyAgcmV0dXJuICEoX19saHMgPT0gX19yaHMpOworfQorLy8gZW5hYmxl
IHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IgcmFuZ2UtYmFzZWQgZm9yIHN0YXRlbWVudHMK
K2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklMSVRZIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRl
cmF0b3IKK2JlZ2luKHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IgX19pdGVyKSBub2V4Y2Vw
dCB7CisgIHJldHVybiBfX2l0ZXI7Cit9CisKK2lubGluZSBfTElCQ1BQX0lOTElORV9WSVNJQklM
SVRZIHJlY3Vyc2l2ZV9kaXJlY3RvcnlfaXRlcmF0b3IKK2VuZChjb25zdCByZWN1cnNpdmVfZGly
ZWN0b3J5X2l0ZXJhdG9yJikgbm9leGNlcHQgeworICByZXR1cm4gcmVjdXJzaXZlX2RpcmVjdG9y
eV9pdGVyYXRvcigpOworfQorCitfTElCQ1BQX0VORF9OQU1FU1BBQ0VfRklMRVNZU1RFTQorCisj
ZW5kaWYgLy8gIV9MSUJDUFBfQ1hYMDNfTEFORworCitfTElCQ1BQX1BPUF9NQUNST1MKKworI2Vu
ZGlmIC8vIF9MSUJDUFBfRklMRVNZU1RFTQorI2VuZGlmCkluZGV4OiBUb29scy9XZWJLaXRUZXN0
UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvU3RyaW5nRnVuY3Rpb25zLmgJKHJldmlzaW9uIDI2Nzk0OCkKKysrIFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMy
LDcgQEAKICNpbmNsdWRlIDxXZWJLaXQvV0tTdHJpbmdQcml2YXRlLmg+CiAjaW5jbHVkZSA8c3N0
cmVhbT4KICNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgogI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3
dGYvVW5pcXVlQXJyYXkuaD4KQEAgLTU5LDYgKzYwLDExIEBAIGlubGluZSBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gdG9XSyhjb24KICAgICByZXR1cm4gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZyhzdHJpbmcpKTsKIH0KIAoraW5saW5lIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB0b1dLKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHJpbmcpCit7CisgICAgcmV0dXJuIHRvV0so
c3RyaW5nLmNfc3RyKCkpOworfQorCiBpbmxpbmUgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRv
V0soY29uc3QgV1RGOjpTdHJpbmcmIHN0cmluZykKIHsKICAgICByZXR1cm4gdG9XSyhzdHJpbmcu
dXRmOCgpLmRhdGEoKSk7CkBAIC0xMTQsNiArMTIwLDExIEBAIGlubGluZSBXVEY6OlN0cmluZyB0
b1dURlN0cmluZyhjb25zdCBKU1IKICAgICByZXR1cm4gdG9XVEZTdHJpbmcoc3RyaW5nLmdldCgp
KTsKIH0KIAoraW5saW5lIFdURjo6U3RyaW5nIHRvV1RGU3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5n
JiBzdHJpbmcpCit7CisgICAgcmV0dXJuIFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJpbmcuY19z
dHIoKSk7Cit9CisKIGlubGluZSBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9XS1N0cmluZyhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKIHsKICAgICByZXR1cm4gdG9X
SyhjcmVhdGVKU1N0cmluZyhjb250ZXh0LCB2YWx1ZSkuZ2V0KCkpOwpAQCAtMTI1LDQgKzEzNiwy
NCBAQCBpbmxpbmUgV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmcoSlNDb250ZXh0CiAgICAgcmV0dXJu
IHRvV1RGU3RyaW5nKGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIHZhbHVlKSk7CiB9CiAKK2lubGlu
ZSBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc3BsaXQoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cmlu
ZywgY2hhciBkZWxpbWl0ZXIpCit7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHJlc3Vs
dDsKKworICAgIHNpemVfdCBpID0gMDsKKyAgICB3aGlsZSAoaSA8IHN0cmluZy5zaXplKCkpIHsK
KyAgICAgICAgYXV0byBmb3VuZEluZGV4ID0gc3RyaW5nLmZpbmRfZmlyc3Rfb2YoZGVsaW1pdGVy
LCBpKTsKKworICAgICAgICBpZiAoZm91bmRJbmRleCAhPSBpKQorICAgICAgICAgICAgcmVzdWx0
LnB1c2hfYmFjayhzdHJpbmcuc3Vic3RyKGksIGZvdW5kSW5kZXggLSBpKSk7CisKKyAgICAgICAg
aWYgKGZvdW5kSW5kZXggPT0gc3RkOjpzdHJpbmdfdmlldzo6bnBvcykKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGkgPSBmb3VuZEluZGV4ICsgMTsKKyAgICB9CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCiB9IC8vIG5hbWVzcGFjZSBXVFIKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyNjc5NDgpCisrKyBUb29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDEy
ICsxMDksNiBAQCBzdGF0aWMgY29uc3RleHByIGF1dG8gcGF0aFNlcGFyYXRvciA9ICdcCiBzdGF0
aWMgY29uc3RleHByIGF1dG8gcGF0aFNlcGFyYXRvciA9ICcvJzsKICNlbmRpZgogCi1jb25zdCB1
bnNpZ25lZCBUZXN0Q29udHJvbGxlcjo6dmlld1dpZHRoID0gODAwOwotY29uc3QgdW5zaWduZWQg
VGVzdENvbnRyb2xsZXI6OnZpZXdIZWlnaHQgPSA2MDA7Ci0KLWNvbnN0IHVuc2lnbmVkIFRlc3RD
b250cm9sbGVyOjp3M2NTVkdWaWV3V2lkdGggPSA0ODA7Ci1jb25zdCB1bnNpZ25lZCBUZXN0Q29u
dHJvbGxlcjo6dzNjU1ZHVmlld0hlaWdodCA9IDM2MDsKLQogY29uc3QgV1RGOjpTZWNvbmRzIFRl
c3RDb250cm9sbGVyOjpkZWZhdWx0U2hvcnRUaW1lb3V0ID0gNV9zOwogY29uc3QgV1RGOjpTZWNv
bmRzIFRlc3RDb250cm9sbGVyOjpub1RpbWVvdXQgPSAtMV9zOwogCkBAIC00NjksMTUgKzQ2Mywx
NyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjppbml0aWFsaXplKGludCBhcmdjCiAgICAgbV9zaG91
bGREdW1wUGl4ZWxzRm9yQWxsVGVzdHMgPSBvcHRpb25zLnNob3VsZER1bXBQaXhlbHNGb3JBbGxU
ZXN0czsKICAgICBtX2ZvcmNlQ29tcGxleFRleHQgPSBvcHRpb25zLmZvcmNlQ29tcGxleFRleHQ7
CiAgICAgbV9zaG91bGRVc2VBY2NlbGVyYXRlZERyYXdpbmcgPSBvcHRpb25zLnNob3VsZFVzZUFj
Y2VsZXJhdGVkRHJhd2luZzsKLSAgICBtX3Nob3VsZFVzZVJlbW90ZUxheWVyVHJlZSA9IG9wdGlv
bnMuc2hvdWxkVXNlUmVtb3RlTGF5ZXJUcmVlOwogICAgIG1fcGF0aHMgPSBvcHRpb25zLnBhdGhz
OwogICAgIG1fYWxsb3dlZEhvc3RzID0gb3B0aW9ucy5hbGxvd2VkSG9zdHM7Ci0gICAgbV9zaG91
bGRTaG93V2ViVmlldyA9IG9wdGlvbnMuc2hvdWxkU2hvd1dlYlZpZXc7Ci0gICAgbV9zaG91bGRT
aG93VG91Y2hlcyA9IG9wdGlvbnMuc2hvdWxkU2hvd1RvdWNoZXM7CiAgICAgbV9jaGVja0Zvcldv
cmxkTGVha3MgPSBvcHRpb25zLmNoZWNrRm9yV29ybGRMZWFrczsKICAgICBtX2FsbG93QW55SFRU
UFNDZXJ0aWZpY2F0ZUZvckFsbG93ZWRIb3N0cyA9IG9wdGlvbnMuYWxsb3dBbnlIVFRQU0NlcnRp
ZmljYXRlRm9yQWxsb3dlZEhvc3RzOwotICAgIG1faW50ZXJuYWxGZWF0dXJlcyA9IG9wdGlvbnMu
aW50ZXJuYWxGZWF0dXJlczsKLSAgICBtX2V4cGVyaW1lbnRhbEZlYXR1cmVzID0gb3B0aW9ucy5l
eHBlcmltZW50YWxGZWF0dXJlczsKKyAgICAKKyAgICBtX2dsb2JhbEZlYXR1cmVzLmludGVybmFs
RGVidWdGZWF0dXJlcyA9IG9wdGlvbnMuaW50ZXJuYWxGZWF0dXJlczsKKyAgICBtX2dsb2JhbEZl
YXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzID0gb3B0aW9ucy5leHBlcmltZW50YWxGZWF0dXJl
czsKKyAgICBtX2dsb2JhbEZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAidXNlUmVtb3Rl
TGF5ZXJUcmVlIiwgb3B0aW9ucy5zaG91bGRVc2VSZW1vdGVMYXllclRyZWUgfSk7CisgICAgbV9n
bG9iYWxGZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgInNob3VsZFNob3dXZWJWaWV3Iiwg
b3B0aW9ucy5zaG91bGRTaG93V2ViVmlldyB9KTsKKyAgICBtX2dsb2JhbEZlYXR1cmVzLmJvb2xG
ZWF0dXJlcy5pbnNlcnQoeyAic2hvdWxkU2hvd1RvdWNoZXMiLCBvcHRpb25zLnNob3VsZFNob3dU
b3VjaGVzIH0pOworCiAjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKICAg
ICBtX2FjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVNb2RlID0gb3B0aW9ucy5hY2Nlc3NpYmlsaXR5
SXNvbGF0ZWRUcmVlTW9kZTsKICNlbmRpZgpAQCAtNDk5LDcgKzQ5NSw3IEBAIHZvaWQgVGVzdENv
bnRyb2xsZXI6OmluaXRpYWxpemUoaW50IGFyZ2MKICAgICBtX2V2ZW50U2VuZGVyUHJveHkgPSBt
YWtlVW5pcXVlPEV2ZW50U2VuZGVyUHJveHk+KHRoaXMpOwogfQogCi1XS1JldGFpblB0cjxXS0Nv
bnRleHRDb25maWd1cmF0aW9uUmVmPiBUZXN0Q29udHJvbGxlcjo6Z2VuZXJhdGVDb250ZXh0Q29u
ZmlndXJhdGlvbihjb25zdCBUZXN0T3B0aW9uczo6Q29udGV4dE9wdGlvbnMmIG9wdGlvbnMpIGNv
bnN0CitXS1JldGFpblB0cjxXS0NvbnRleHRDb25maWd1cmF0aW9uUmVmPiBUZXN0Q29udHJvbGxl
cjo6Z2VuZXJhdGVDb250ZXh0Q29uZmlndXJhdGlvbihjb25zdCBDb250ZXh0T3B0aW9ucyYgb3B0
aW9ucykgY29uc3QKIHsKICAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdFdLKFdLQ29udGV4
dENvbmZpZ3VyYXRpb25DcmVhdGUoKSk7CiAgICAgV0tDb250ZXh0Q29uZmlndXJhdGlvblNldElu
amVjdGVkQnVuZGxlUGF0aChjb25maWd1cmF0aW9uLmdldCgpLCBpbmplY3RlZEJ1bmRsZVBhdGgo
KSk7CkBAIC01NjIsMTAgKzU1OCwxMSBAQCBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgVGVzdENvbnRy
b2xsZXI6OndlCiAKIFdLUmV0YWluUHRyPFdLUGFnZUNvbmZpZ3VyYXRpb25SZWY+IFRlc3RDb250
cm9sbGVyOjpnZW5lcmF0ZVBhZ2VDb25maWd1cmF0aW9uKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRp
b25zKQogewotICAgIGlmICghbV9jb250ZXh0IHx8ICFtX2NvbnRleHRPcHRpb25zLT5oYXNTYW1l
SW5pdGlhbGl6YXRpb25PcHRpb25zKG9wdGlvbnMuY29udGV4dE9wdGlvbnMpKSB7Ci0gICAgICAg
IGF1dG8gY29udGV4dENvbmZpZ3VyYXRpb24gPSBnZW5lcmF0ZUNvbnRleHRDb25maWd1cmF0aW9u
KG9wdGlvbnMuY29udGV4dE9wdGlvbnMpOworICAgIGF1dG8gY29udGV4dE9wdGlvbnMgPSBvcHRp
b25zLmNvbnRleHRPcHRpb25zKCk7CisgICAgaWYgKCFtX2NvbnRleHQgfHwgIW1fY29udGV4dE9w
dGlvbnMtPmhhc1NhbWVJbml0aWFsaXphdGlvbk9wdGlvbnMoY29udGV4dE9wdGlvbnMpKSB7Cisg
ICAgICAgIGF1dG8gY29udGV4dENvbmZpZ3VyYXRpb24gPSBnZW5lcmF0ZUNvbnRleHRDb25maWd1
cmF0aW9uKGNvbnRleHRPcHRpb25zKTsKICAgICAgICAgbV9jb250ZXh0ID0gcGxhdGZvcm1BZGp1
c3RDb250ZXh0KGFkb3B0V0soV0tDb250ZXh0Q3JlYXRlV2l0aENvbmZpZ3VyYXRpb24oY29udGV4
dENvbmZpZ3VyYXRpb24uZ2V0KCkpKS5nZXQoKSwgY29udGV4dENvbmZpZ3VyYXRpb24uZ2V0KCkp
OwotICAgICAgICBtX2NvbnRleHRPcHRpb25zID0gb3B0aW9ucy5jb250ZXh0T3B0aW9uczsKKyAg
ICAgICAgbV9jb250ZXh0T3B0aW9ucyA9IGNvbnRleHRPcHRpb25zOwogCiAgICAgICAgIG1fZ2Vv
bG9jYXRpb25Qcm92aWRlciA9IG1ha2VVbmlxdWU8R2VvbG9jYXRpb25Qcm92aWRlck1vY2s+KG1f
Y29udGV4dC5nZXQoKSk7CiAKQEAgLTYyNyw3ICs2MjQsNyBAQCBXS1JldGFpblB0cjxXS1BhZ2VD
b25maWd1cmF0aW9uUmVmPiBUZXN0CiAgICAgV0tQYWdlQ29uZmlndXJhdGlvblNldENvbnRleHQo
cGFnZUNvbmZpZ3VyYXRpb24uZ2V0KCksIG1fY29udGV4dC5nZXQoKSk7CiAgICAgV0tQYWdlQ29u
ZmlndXJhdGlvblNldFBhZ2VHcm91cChwYWdlQ29uZmlndXJhdGlvbi5nZXQoKSwgbV9wYWdlR3Jv
dXAuZ2V0KCkpOwogICAgIAotICAgIGlmIChvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24pIHsK
KyAgICBpZiAob3B0aW9ucy51c2VFcGhlbWVyYWxTZXNzaW9uKCkpIHsKICAgICAgICAgYXV0byBl
cGhlbWVyYWxEYXRhU3RvcmUgPSBhZG9wdFdLKFdLV2Vic2l0ZURhdGFTdG9yZUNyZWF0ZU5vblBl
cnNpc3RlbnREYXRhU3RvcmUoKSk7CiAgICAgICAgIFdLUGFnZUNvbmZpZ3VyYXRpb25TZXRXZWJz
aXRlRGF0YVN0b3JlKHBhZ2VDb25maWd1cmF0aW9uLmdldCgpLCBlcGhlbWVyYWxEYXRhU3RvcmUu
Z2V0KCkpOwogICAgIH0KQEAgLTYzOSwxMSArNjM2LDEyIEBAIFdLUmV0YWluUHRyPFdLUGFnZUNv
bmZpZ3VyYXRpb25SZWY+IFRlc3QKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6Y3JlYXRlV2ViVmll
d1dpdGhPcHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKQogeworICAgIGF1dG8gYXBw
bGljYXRpb25CdW5kbGVJZGVudGlmaWVyID0gb3B0aW9ucy5hcHBsaWNhdGlvbkJ1bmRsZUlkZW50
aWZpZXIoKTsKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBpZiAoIW9wdGlvbnMuYXBwbGljYXRp
b25CdW5kbGVJZGVudGlmaWVyLmlzRW1wdHkoKSkgeworICAgIGlmICghYXBwbGljYXRpb25CdW5k
bGVJZGVudGlmaWVyLmVtcHR5KCkpIHsKICAgICAgICAgLy8gVGhlIGJ1bmRsZSBpZGVudGlmaWVy
IGNhbiBvbmx5IGJlIHNldCBvbmNlIHBlciB0ZXN0LCBhbmQgaXMgY2xlYXJlZCBiZXR3ZWVuIHRl
c3RzLgogICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9oYXNTZXRBcHBsaWNhdGlvbkJ1bmRsZUlk
ZW50aWZpZXIpOwotICAgICAgICBzZXRBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIob3B0aW9u
cy5hcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIpOworICAgICAgICBzZXRBcHBsaWNhdGlvbkJ1
bmRsZUlkZW50aWZpZXIoYXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKTsKICAgICAgICAgbV9o
YXNTZXRBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIgPSB0cnVlOwogICAgIH0KICNlbmRpZgpA
QCAtNjg2LDcgKzY4NCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNyZWF0ZVdlYlZpZXdXaXRo
T3AKICAgICAgICAgMCwgLy8gZGlkRHJhdwogICAgICAgICAwLCAvLyBwYWdlRGlkU2Nyb2xsCiAg
ICAgICAgIDAsIC8vIGV4Y2VlZGVkRGF0YWJhc2VRdW90YSwKLSAgICAgICAgb3B0aW9ucy5zaG91
bGRIYW5kbGVSdW5PcGVuUGFuZWwgPyBydW5PcGVuUGFuZWwgOiAwLAorICAgICAgICBvcHRpb25z
LnNob3VsZEhhbmRsZVJ1bk9wZW5QYW5lbCgpID8gcnVuT3BlblBhbmVsIDogMCwKICAgICAgICAg
ZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdCwKICAgICAgICAgMCwg
Ly8gaGVhZGVySGVpZ2h0CiAgICAgICAgIDAsIC8vIGZvb3RlckhlaWdodApAQCAtNzk1LDkgKzc5
Myw5IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNyZWF0ZVdlYlZpZXdXaXRoT3AKICAgICAvLyBz
b21ldGhpbmcgZWxzZSBmb3Igc3BlY2lmaWMgdGVzdHMgdGhhdCBuZWVkIHRvIHJ1biBhdCBhIGRp
ZmZlcmVudCB3aW5kb3cgc2NhbGUuCiAgICAgbV9tYWluV2ViVmlldy0+Y2hhbmdlV2luZG93U2Nh
bGVJZk5lZWRlZCgxKTsKICAgICAKLSAgICBpZiAoIW9wdGlvbnMuYXBwbGljYXRpb25CdW5kbGVJ
ZGVudGlmaWVyLmlzRW1wdHkoKSkgeworICAgIGlmICghYXBwbGljYXRpb25CdW5kbGVJZGVudGlm
aWVyLmVtcHR5KCkpIHsKICAgICAgICAgcmVpbml0aWFsaXplQXBwQm91bmREb21haW5zKCk7Ci0g
ICAgICAgIHVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKG9wdGlvbnMuYXBw
bGljYXRpb25CdW5kbGVJZGVudGlmaWVyKTsKKyAgICAgICAgdXBkYXRlQnVuZGxlSWRlbnRpZmll
ckluTmV0d29ya1Byb2Nlc3MoYXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKTsKICAgICB9CiB9
CiAKQEAgLTgwOSw3ICs4MDcsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjplbnN1cmVWaWV3U3Vw
cG9ydHNPCiAgICAgICAgIC8vIEhhdmluZyBjcmVhdGVkIGFub3RoZXIgcGFnZSAodmlhIHdpbmRv
dy5vcGVuKCkpIHByZXZlbnRzIHByb2Nlc3Mgc3dhcHBpbmcgb24gbmF2aWdhdGlvbiBhbmQgaXQg
bWF5IHRoZXJlZm9yZQogICAgICAgICAvLyBjYXVzZSBmbGFraW5lc3MgdG8gcmV1c2UgdGhlIHZp
ZXcuIFdlIHNob3VsZCBhbHNvIGFsd2F5cyBtYWtlIGEgbmV3IHZpZXcgaWYgdGhlIHRlc3QgaXMg
bWFya2VkIGFzIGFwcC1ib3VuZCwgYmVjYXVzZQogICAgICAgICAvLyB0aGUgdmlldyBjb25maWd1
cmF0aW9uIG11c3QgY2hhbmdlLgotICAgICAgICBpZiAoIW1fY3JlYXRlZE90aGVyUGFnZSAmJiBt
X21haW5XZWJWaWV3LT52aWV3U3VwcG9ydHNPcHRpb25zKG9wdGlvbnMpICYmICFvcHRpb25zLmlz
QXBwQm91bmRXZWJWaWV3KQorICAgICAgICBpZiAoIW1fY3JlYXRlZE90aGVyUGFnZSAmJiBtX21h
aW5XZWJWaWV3LT52aWV3U3VwcG9ydHNPcHRpb25zKG9wdGlvbnMpICYmICFvcHRpb25zLmlzQXBw
Qm91bmRXZWJWaWV3KCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgd2lsbERlc3Ry
b3lXZWJWaWV3KCk7CkBAIC04MzYsOCArODM0LDggQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVz
ZXRQcmVmZXJlbmNlc1RvQwogICAgIFdLUHJlZmVyZW5jZXNSZXNldFRlc3RSdW5uZXJPdmVycmlk
ZXMocHJlZmVyZW5jZXMpOwogCiAgICAgV0tQcmVmZXJlbmNlc0VuYWJsZUFsbEV4cGVyaW1lbnRh
bEZlYXR1cmVzKHByZWZlcmVuY2VzKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGV4cGVyaW1lbnRh
bEZlYXR1cmUgOiBvcHRpb25zLmV4cGVyaW1lbnRhbEZlYXR1cmVzKQotICAgICAgICBXS1ByZWZl
cmVuY2VzU2V0RXhwZXJpbWVudGFsRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgZXhwZXJpbWVu
dGFsRmVhdHVyZS52YWx1ZSwgdG9XSyhleHBlcmltZW50YWxGZWF0dXJlLmtleSkuZ2V0KCkpOwor
ICAgIGZvciAoY29uc3QgYXV0byYgW2tleSwgdmFsdWVdIDogb3B0aW9ucy5leHBlcmltZW50YWxG
ZWF0dXJlcygpKQorICAgICAgICBXS1ByZWZlcmVuY2VzU2V0RXhwZXJpbWVudGFsRmVhdHVyZUZv
cktleShwcmVmZXJlbmNlcywgdmFsdWUsIHRvV0soa2V5KS5nZXQoKSk7CiAKICAgICBXS1ByZWZl
cmVuY2VzUmVzZXRBbGxJbnRlcm5hbERlYnVnRmVhdHVyZXMocHJlZmVyZW5jZXMpOwogCkBAIC04
NjIsMTcgKzg2MCwxNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldFByZWZlcmVuY2VzVG9D
CiAgICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVu
Y2VzLCB0cnVlLCB0b1dLKCJJbnB1dFR5cGVXZWVrRW5hYmxlZCIpLmdldCgpKTsKICNlbmRpZgog
Ci0gICAgZm9yIChjb25zdCBhdXRvJiBpbnRlcm5hbERlYnVnRmVhdHVyZSA6IG9wdGlvbnMuaW50
ZXJuYWxEZWJ1Z0ZlYXR1cmVzKQotICAgICAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1
Z0ZlYXR1cmVGb3JLZXkocHJlZmVyZW5jZXMsIGludGVybmFsRGVidWdGZWF0dXJlLnZhbHVlLCB0
b1dLKGludGVybmFsRGVidWdGZWF0dXJlLmtleSkuZ2V0KCkpOworICAgIGZvciAoY29uc3QgYXV0
byYgW2tleSwgdmFsdWVdICA6IG9wdGlvbnMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKCkpCisgICAg
ICAgIFdLUHJlZmVyZW5jZXNTZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNl
cywgdmFsdWUsIHRvV0soa2V5KS5nZXQoKSk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBX
S1ByZWZlcmVuY2VzU2V0Q2FwdHVyZVZpZGVvSW5VSVByb2Nlc3NFbmFibGVkKHByZWZlcmVuY2Vz
LCBvcHRpb25zLmVuYWJsZUNhcHR1cmVWaWRlb0luVUlQcm9jZXNzKTsKLSAgICBXS1ByZWZlcmVu
Y2VzU2V0Q2FwdHVyZVZpZGVvSW5HUFVQcm9jZXNzRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9u
cy5lbmFibGVDYXB0dXJlVmlkZW9JbkdQVVByb2Nlc3MpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRD
YXB0dXJlQXVkaW9JblVJUHJvY2Vzc0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxl
Q2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3MpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRDYXB0dXJlQXVk
aW9JbkdQVVByb2Nlc3NFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUNhcHR1cmVB
dWRpb0luR1BVUHJvY2Vzcyk7CisgICAgV0tQcmVmZXJlbmNlc1NldENhcHR1cmVWaWRlb0luVUlQ
cm9jZXNzRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVDYXB0dXJlVmlkZW9JblVJ
UHJvY2VzcygpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0Q2FwdHVyZVZpZGVvSW5HUFVQcm9jZXNz
RW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVDYXB0dXJlVmlkZW9JbkdQVVByb2Nl
c3MoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldENhcHR1cmVBdWRpb0luVUlQcm9jZXNzRW5hYmxl
ZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcygpKTsK
KyAgICBXS1ByZWZlcmVuY2VzU2V0Q2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzRW5hYmxlZChwcmVm
ZXJlbmNlcywgb3B0aW9ucy5lbmFibGVDYXB0dXJlQXVkaW9JbkdQVVByb2Nlc3MoKSk7CiAjZW5k
aWYKLSAgICBXS1ByZWZlcmVuY2VzU2V0UHJvY2Vzc1N3YXBPbk5hdmlnYXRpb25FbmFibGVkKHBy
ZWZlcmVuY2VzLCBvcHRpb25zLmNvbnRleHRPcHRpb25zLnNob3VsZEVuYWJsZVByb2Nlc3NTd2Fw
T25OYXZpZ2F0aW9uKCkpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRQYWdlVmlzaWJpbGl0eUJhc2Vk
UHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVBcHBO
YXApOworICAgIFdLUHJlZmVyZW5jZXNTZXRQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbkVuYWJsZWQo
cHJlZmVyZW5jZXMsIG9wdGlvbnMuY29udGV4dE9wdGlvbnMoKS5zaG91bGRFbmFibGVQcm9jZXNz
U3dhcE9uTmF2aWdhdGlvbigpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0UGFnZVZpc2liaWxpdHlC
YXNlZFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxl
QXBwTmFwKCkpOwogICAgIFdLUHJlZmVyZW5jZXNTZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNo
ZUVuYWJsZWQocHJlZmVyZW5jZXMsIHRydWUpOwogICAgIFdLUHJlZmVyZW5jZXNTZXRTdWJwaXhl
bEFudGlhbGlhc2VkTGF5ZXJUZXh0RW5hYmxlZChwcmVmZXJlbmNlcywgZmFsc2UpOwogICAgIFdL
UHJlZmVyZW5jZXNTZXRYU1NBdWRpdG9yRW5hYmxlZChwcmVmZXJlbmNlcywgZmFsc2UpOwpAQCAt
ODgzLDEwICs4ODEsMTAgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRQcmVmZXJlbmNlc1Rv
QwogICAgIFdLUHJlZmVyZW5jZXNTZXRKYXZhU2NyaXB0UnVudGltZUZsYWdzKHByZWZlcmVuY2Vz
LCBrV0tKYXZhU2NyaXB0UnVudGltZUZsYWdzQWxsRW5hYmxlZCk7CiAgICAgV0tQcmVmZXJlbmNl
c1NldEphdmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9tYXRpY2FsbHkocHJlZmVyZW5jZXMsIHRy
dWUpOwogICAgIFdLUHJlZmVyZW5jZXNTZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKHBy
ZWZlcmVuY2VzLCB0cnVlKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0RE9NUGFzdGVBbGxvd2VkKHBy
ZWZlcmVuY2VzLCBvcHRpb25zLmRvbVBhc3RlQWxsb3dlZCk7CisgICAgV0tQcmVmZXJlbmNlc1Nl
dERPTVBhc3RlQWxsb3dlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5kb21QYXN0ZUFsbG93ZWQoKSk7
CiAgICAgV0tQcmVmZXJlbmNlc1NldFVuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMc0FsbG93ZWQo
cHJlZmVyZW5jZXMsIHRydWUpOwogICAgIFdLUHJlZmVyZW5jZXNTZXRGaWxlQWNjZXNzRnJvbUZp
bGVVUkxzQWxsb3dlZChwcmVmZXJlbmNlcywgdHJ1ZSk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldFRv
cE5hdmlnYXRpb25Ub0RhdGFVUkxzQWxsb3dlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5hbGxvd1Rv
cE5hdmlnYXRpb25Ub0RhdGFVUkxzKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0VG9wTmF2aWdhdGlv
blRvRGF0YVVSTHNBbGxvd2VkKHByZWZlcmVuY2VzLCBvcHRpb25zLmFsbG93VG9wTmF2aWdhdGlv
blRvRGF0YVVSTHMoKSk7CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgIFdLUHJlZmVy
ZW5jZXNTZXRGdWxsU2NyZWVuRW5hYmxlZChwcmVmZXJlbmNlcywgdHJ1ZSk7CiAjZW5kaWYKQEAg
LTg5OSwxOCArODk3LDE4IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0UHJlZmVyZW5jZXNU
b0MKICAgICBXS1ByZWZlcmVuY2VzU2V0Q3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkKHByZWZl
cmVuY2VzLCB0cnVlKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0RGlhbG9nRWxlbWVudEVuYWJsZWQo
cHJlZmVyZW5jZXMsIHRydWUpOwogCi0gICAgV0tQcmVmZXJlbmNlc1NldE1vY2tTY3JvbGxiYXJz
RW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy51c2VNb2NrU2Nyb2xsYmFycyk7Ci0gICAgV0tQ
cmVmZXJlbmNlc1NldE5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKHByZWZlcmVuY2VzLCBvcHRpb25z
Lm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0QXR0YWNobWVu
dEVsZW1lbnRFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUF0dGFjaG1lbnRFbGVt
ZW50KTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0TWVudUl0ZW1FbGVtZW50RW5hYmxlZChwcmVmZXJl
bmNlcywgb3B0aW9ucy5lbmFibGVNZW51SXRlbUVsZW1lbnQpOwotICAgIFdLUHJlZmVyZW5jZXNT
ZXRLZXlnZW5FbGVtZW50RW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVLZXlnZW5F
bGVtZW50KTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQo
cHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyk7Ci0gICAgV0tQ
cmVmZXJlbmNlc1NldFdlYkF1dGhlbnRpY2F0aW9uRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9u
cy5lbmFibGVXZWJBdXRoZW50aWNhdGlvbik7Ci0gICAgV0tQcmVmZXJlbmNlc1NldFdlYkF1dGhl
bnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5l
bmFibGVXZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0aGVudGljYXRvcik7Ci0gICAgV0tQcmVmZXJl
bmNlc1NldEFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzKHBy
ZWZlcmVuY2VzLCBvcHRpb25zLmFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNy
ZWRlbnRpYWxzKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0Q29sb3JGaWx0ZXJFbmFibGVkKHByZWZl
cmVuY2VzLCBvcHRpb25zLmVuYWJsZUNvbG9yRmlsdGVyKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0
UHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZShwcmVmZXJlbmNlcywgb3B0aW9ucy5w
dW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0
UGFnZUNhY2hlRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVCYWNrRm9yd2FyZENh
Y2hlKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKHByZWZlcmVu
Y2VzLCBvcHRpb25zLnVzZU1vY2tTY3JvbGxiYXJzKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRO
ZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyhwcmVmZXJlbmNlcywgb3B0aW9ucy5uZWVkc1NpdGVTcGVj
aWZpY1F1aXJrcygpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0QXR0YWNobWVudEVsZW1lbnRFbmFi
bGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUF0dGFjaG1lbnRFbGVtZW50KCkpOworICAg
IFdLUHJlZmVyZW5jZXNTZXRNZW51SXRlbUVsZW1lbnRFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRp
b25zLmVuYWJsZU1lbnVJdGVtRWxlbWVudCgpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0S2V5Z2Vu
RWxlbWVudEVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlS2V5Z2VuRWxlbWVudCgp
KTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQocHJlZmVy
ZW5jZXMsIG9wdGlvbnMuZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scygpKTsKKyAgICBXS1ByZWZl
cmVuY2VzU2V0V2ViQXV0aGVudGljYXRpb25FbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVu
YWJsZVdlYkF1dGhlbnRpY2F0aW9uKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRXZWJBdXRoZW50
aWNhdGlvbkxvY2FsQXV0aGVudGljYXRvckVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5h
YmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IoKSk7CisgICAgV0tQcmVmZXJl
bmNlc1NldEFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzKHBy
ZWZlcmVuY2VzLCBvcHRpb25zLmFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNy
ZWRlbnRpYWxzKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRDb2xvckZpbHRlckVuYWJsZWQocHJl
ZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQ29sb3JGaWx0ZXIoKSk7CisgICAgV0tQcmVmZXJlbmNl
c1NldFB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUocHJlZmVyZW5jZXMsIG9wdGlv
bnMucHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZSgpKTsKKyAgICBXS1ByZWZlcmVu
Y2VzU2V0UGFnZUNhY2hlRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVCYWNrRm9y
d2FyZENhY2hlKCkpOwogCiAgICAgV0tQcmVmZXJlbmNlc1NldERlZmF1bHRUZXh0RW5jb2RpbmdO
YW1lKHByZWZlcmVuY2VzLCB0b1dLKCJJU08tODg1OS0xIikuZ2V0KCkpOwogCkBAIC05MzIsNyAr
OTMwLDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRQcmVmZXJlbmNlc1RvQwogICAgIFdL
UHJlZmVyZW5jZXNTZXRIaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nRW5hYmxlZChwcmVmZXJl
bmNlcywgZmFsc2UpOwogICAgIFdLUHJlZmVyZW5jZXNTZXRIaWRkZW5QYWdlQ1NTQW5pbWF0aW9u
U3VzcGVuc2lvbkVuYWJsZWQocHJlZmVyZW5jZXMsIGZhbHNlKTsKIAotICAgIFdLUHJlZmVyZW5j
ZXNTZXRBY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKHByZWZlcmVuY2VzLCBtX3Nob3VsZFVzZUFj
Y2VsZXJhdGVkRHJhd2luZyB8fCBvcHRpb25zLnVzZUFjY2VsZXJhdGVkRHJhd2luZyk7CisgICAg
V0tQcmVmZXJlbmNlc1NldEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQocHJlZmVyZW5jZXMsIG1f
c2hvdWxkVXNlQWNjZWxlcmF0ZWREcmF3aW5nIHx8IG9wdGlvbnMudXNlQWNjZWxlcmF0ZWREcmF3
aW5nKCkpOwogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgdGVzdGluZyB0aGUgZGVmYXVsdC4K
ICAgICBXS1ByZWZlcmVuY2VzU2V0U3RvcmFnZUJsb2NraW5nUG9saWN5KHByZWZlcmVuY2VzLCBr
V0tBbGxvd0FsbFN0b3JhZ2UpOwogCkBAIC05NTMsNyArOTUxLDcgQEAgdm9pZCBUZXN0Q29udHJv
bGxlcjo6cmVzZXRQcmVmZXJlbmNlc1RvQwogICAgIAogICAgIFdLUHJlZmVyZW5jZXNTZXRMYXJn
ZUltYWdlQXN5bmNEZWNvZGluZ0VuYWJsZWQocHJlZmVyZW5jZXMsIGZhbHNlKTsKIAotICAgIFdL
UHJlZmVyZW5jZXNTZXRJbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRp
b25zLmVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyk7CisgICAgV0tQcmVmZXJlbmNlc1NldEluc3Bl
Y3RvckFkZGl0aW9uc0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlSW5zcGVjdG9y
QWRkaXRpb25zKCkpOwogCiAgICAgV0tQcmVmZXJlbmNlc1NldFN0b3JhZ2VBY2Nlc3NBUElFbmFi
bGVkKHByZWZlcmVuY2VzLCB0cnVlKTsKICAgICAKQEAgLTk3Miw3ICs5NzAsNyBAQCB2b2lkIFRl
c3RDb250cm9sbGVyOjpyZXNldFByZWZlcmVuY2VzVG9DCiAgICAgV0tQcmVmZXJlbmNlc1NldEF1
ZGlvUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKHByZWZlcmVuY2VzLCBmYWxzZSk7CiAgICAg
V0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCBm
YWxzZSwgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNwZWFrZXJTZWxlY3Rpb25SZXF1
aXJlc1VzZXJHZXN0dXJlIikpOwogCi0gICAgV0tQcmVmZXJlbmNlc1NldFNob3VsZFVzZVNlcnZp
Y2VXb3JrZXJTaG9ydFRpbWVvdXQocHJlZmVyZW5jZXMsIG9wdGlvbnMuY29udGV4dE9wdGlvbnMu
dXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dCk7CisgICAgV0tQcmVmZXJlbmNlc1NldFNob3Vs
ZFVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQocHJlZmVyZW5jZXMsIG9wdGlvbnMudXNlU2Vy
dmljZVdvcmtlclNob3J0VGltZW91dCgpKTsKIAogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lT
T0xBVEVEX1RSRUUpCiAgICAgV0tQcmVmZXJlbmNlc1NldElzQWNjZXNzaWJpbGl0eUlzb2xhdGVk
VHJlZUVuYWJsZWQocHJlZmVyZW5jZXMsIGFjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVNb2RlKCkp
OwpAQCAtMTAwNiwxMSArMTAwNCwxMiBAQCBib29sIFRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRl
VG9Db25zaXN0CiAgICAgc2V0VmFsdWUocmVzZXRNZXNzYWdlQm9keSwgIkFjY2Vzc2liaWxpdHlJ
c29sYXRlZFRyZWUiLCBtX2FjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVNb2RlKTsKICNlbmRpZgog
Ci0gICAgaWYgKG9wdGlvbnMuanNjT3B0aW9ucy5sZW5ndGgoKSkKLSAgICAgICAgc2V0VmFsdWUo
cmVzZXRNZXNzYWdlQm9keSwgIkpTQ09wdGlvbnMiLCBvcHRpb25zLmpzY09wdGlvbnMuY19zdHIo
KSk7CisgICAgYXV0byBqc2NPcHRpb25zID0gb3B0aW9ucy5qc2NPcHRpb25zKCk7CisgICAgaWYg
KCFqc2NPcHRpb25zLmVtcHR5KCkpCisgICAgICAgIHNldFZhbHVlKHJlc2V0TWVzc2FnZUJvZHks
ICJKU0NPcHRpb25zIiwganNjT3B0aW9ucy5jX3N0cigpKTsKIAogI2lmIFBMQVRGT1JNKENPQ09B
KQotICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6c2V0QWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlw
ZXNGb3JUZXN0aW5nKG9wdGlvbnMuYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMuY19zdHIo
KSk7CisgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRBZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VU
eXBlc0ZvclRlc3Rpbmcob3B0aW9ucy5hZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcygpLmNf
c3RyKCkpOwogI2VuZGlmCiAKICAgICBXS1BhZ2VQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUo
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgdG9XSygi
UmVzZXQiKS5nZXQoKSwgcmVzZXRNZXNzYWdlQm9keS5nZXQoKSk7CkBAIC0xMTE4LDcgKzExMTcs
NyBAQCBib29sIFRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0CiAKICAgICBzZXRO
YXZpZ2F0aW9uR2VzdHVyZXNFbmFibGVkKGZhbHNlKTsKICAgICAKLSAgICBzZXRJZ25vcmVzVmll
d3BvcnRTY2FsZUxpbWl0cyhvcHRpb25zLmlnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKTsKKyAg
ICBzZXRJZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyhvcHRpb25zLmlnbm9yZXNWaWV3cG9ydFNj
YWxlTGltaXRzKCkpOwogCiAgICAgbV9vcGVuUGFuZWxGaWxlVVJMcyA9IG51bGxwdHI7CiAjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTEzMTgsNyArMTMxNyw3IEBAIHN0YXRpYyBzdGQ6OnN0
cmluZyB0ZXN0UGF0aChXS1VSTFJlZiB1cmwKICAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKIH0K
IAotc3RhdGljIFdLVVJMUmVmIGNyZWF0ZVRlc3RVUkwoY29uc3QgY2hhciogcGF0aE9yVVJMKQor
V0tVUkxSZWYgVGVzdENvbnRyb2xsZXI6OmNyZWF0ZVRlc3RVUkwoY29uc3QgY2hhciogcGF0aE9y
VVJMKQogewogICAgIGlmIChzdHJzdHIocGF0aE9yVVJMLCAiaHR0cDovLyIpIHx8IHN0cnN0cihw
YXRoT3JVUkwsICJodHRwczovLyIpIHx8IHN0cnN0cihwYXRoT3JVUkwsICJmaWxlOi8vIikpCiAg
ICAgICAgIHJldHVybiBXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyhwYXRoT3JVUkwpOwpAQCAt
MTM1NiwyMjEgKzEzNTUsMjYgQEAgc3RhdGljIFdLVVJMUmVmIGNyZWF0ZVRlc3RVUkwoY29uc3Qg
Y2hhcgogICAgIHJldHVybiBXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyhidWZmZXIuZ2V0KCkp
OwogfQogCi1zdGF0aWMgYm9vbCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUoY29uc3Qgc3Rk
OjpzdHJpbmcmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZSA9PSAidHJ1ZSIpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIGlmICh2YWx1ZSA9PSAiZmFsc2UiKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBMT0dfRVJST1IoIkZvdW5kIHVuZXhwZWN0ZWQgdmFsdWUgJyVzJyBmb3IgYm9v
bGVhbiBvcHRpb24uIEV4cGVjdGVkICd0cnVlJyBvciAnZmFsc2UnLiIsIHZhbHVlLmNfc3RyKCkp
OwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHN0ZDo6c3RyaW5nIHBhcnNlU3RyaW5n
VGVzdEhlYWRlclZhbHVlQXNSZWxhdGl2ZVBhdGgoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLCBj
b25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQotewotICAgIGF1dG8gYmFzZVVSTCA9IGFkb3B0
V0soY3JlYXRlVGVzdFVSTChwYXRoT3JVUkwuY19zdHIoKSkpOwotICAgIGF1dG8gcmVsYXRpdmVV
UkwgPSBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aEJhc2VVUkwoYmFzZVVSTC5nZXQoKSwgdmFsdWUu
Y19zdHIoKSkpOwotICAgIHJldHVybiB0b1NURChhZG9wdFdLKFdLVVJMQ29weVBhdGgocmVsYXRp
dmVVUkwuZ2V0KCkpKSk7Ci19Ci0KLXN0YXRpYyBzdGQ6OnN0cmluZyBwYXJzZVN0cmluZ1Rlc3RI
ZWFkZXJWYWx1ZUFzVVJMKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4g
dG9TVEQoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcoY3JlYXRlVGVzdFVSTCh2YWx1ZS5jX3N0cigp
KSkpKTsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRlVGVzdE9wdGlvbnNGcm9tVGVzdEhlYWRlcihU
ZXN0T3B0aW9ucyYgdGVzdE9wdGlvbnMsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwsIGNv
bnN0IHN0ZDo6c3RyaW5nJiBhYnNvbHV0ZVBhdGgpCi17Ci0gICAgc3RkOjpzdHJpbmcgZmlsZW5h
bWUgPSBhYnNvbHV0ZVBhdGg7Ci0gICAgaWYgKGZpbGVuYW1lLmVtcHR5KCkpIHsKLSAgICAgICAg
Ly8gR3Jvc3MuIE5lZWQgdG8gcmVkdWNlIGNvbnZlcnNpb25zIGJldHdlZW4gYWxsIHRoZSBzdHJp
bmcgdHlwZXMgYW5kIFVSTHMuCi0gICAgICAgIGZpbGVuYW1lID0gdGVzdFBhdGgoYWRvcHRXSyhj
cmVhdGVUZXN0VVJMKHBhdGhPclVSTC5jX3N0cigpKSkuZ2V0KCkpOwotICAgIH0KLQotICAgIGlm
IChmaWxlbmFtZS5lbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGQ6OnN0cmluZyBv
cHRpb25zOwotICAgIHN0ZDo6aWZzdHJlYW0gdGVzdEZpbGUoZmlsZW5hbWUuZGF0YSgpKTsKLSAg
ICBpZiAoIXRlc3RGaWxlLmdvb2QoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGdldGxpbmUodGVz
dEZpbGUsIG9wdGlvbnMpOwotICAgIHN0ZDo6c3RyaW5nIGJlZ2luU3RyaW5nKCJ3ZWJraXQtdGVz
dC1ydW5uZXIgWyAiKTsKLSAgICBzdGQ6OnN0cmluZyBlbmRTdHJpbmcoIiBdIik7Ci0gICAgc2l6
ZV90IGJlZ2luTG9jYXRpb24gPSBvcHRpb25zLmZpbmQoYmVnaW5TdHJpbmcpOwotICAgIGlmIChi
ZWdpbkxvY2F0aW9uID09IHN0ZDo6c3RyaW5nOjpucG9zKQotICAgICAgICByZXR1cm47Ci0gICAg
c2l6ZV90IGVuZExvY2F0aW9uID0gb3B0aW9ucy5maW5kKGVuZFN0cmluZywgYmVnaW5Mb2NhdGlv
bik7Ci0gICAgaWYgKGVuZExvY2F0aW9uID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgICAg
IExPR19FUlJPUigiQ291bGQgbm90IGZpbmQgZW5kIG9mIHRlc3QgaGVhZGVyIGluICVzIiwgZmls
ZW5hbWUuY19zdHIoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3RkOjpzdHJpbmcg
cGFpclN0cmluZyA9IG9wdGlvbnMuc3Vic3RyKGJlZ2luTG9jYXRpb24gKyBiZWdpblN0cmluZy5z
aXplKCksIGVuZExvY2F0aW9uIC0gKGJlZ2luTG9jYXRpb24gKyBiZWdpblN0cmluZy5zaXplKCkp
KTsKLSAgICBzaXplX3QgcGFpclN0YXJ0ID0gMDsKLSAgICB3aGlsZSAocGFpclN0YXJ0IDwgcGFp
clN0cmluZy5zaXplKCkpIHsKLSAgICAgICAgc2l6ZV90IHBhaXJFbmQgPSBwYWlyU3RyaW5nLmZp
bmQoIiAiLCBwYWlyU3RhcnQpOwotICAgICAgICBpZiAocGFpckVuZCA9PSBzdGQ6OnN0cmluZzo6
bnBvcykKLSAgICAgICAgICAgIHBhaXJFbmQgPSBwYWlyU3RyaW5nLnNpemUoKTsKLSAgICAgICAg
c2l6ZV90IGVxdWFsc0xvY2F0aW9uID0gcGFpclN0cmluZy5maW5kKCI9IiwgcGFpclN0YXJ0KTsK
LSAgICAgICAgaWYgKGVxdWFsc0xvY2F0aW9uID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAg
ICAgICAgICBMT0dfRVJST1IoIk1hbGZvcm1lZCBvcHRpb24gaW4gdGVzdCBoZWFkZXIgKGNvdWxk
IG5vdCBmaW5kICc9JyBjaGFyYWN0ZXIpIGluICVzIiwgZmlsZW5hbWUuY19zdHIoKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBhdXRvIGtleSA9IHBhaXJTdHJpbmcu
c3Vic3RyKHBhaXJTdGFydCwgZXF1YWxzTG9jYXRpb24gLSBwYWlyU3RhcnQpOwotICAgICAgICBh
dXRvIHZhbHVlID0gcGFpclN0cmluZy5zdWJzdHIoZXF1YWxzTG9jYXRpb24gKyAxLCBwYWlyRW5k
IC0gKGVxdWFsc0xvY2F0aW9uICsgMSkpOwotCi0gICAgICAgIGlmICgha2V5LnJmaW5kKCJleHBl
cmltZW50YWw6IikpIHsKLSAgICAgICAgICAgIGtleSA9IGtleS5zdWJzdHIoMTMpOwotICAgICAg
ICAgICAgdGVzdE9wdGlvbnMuZXhwZXJpbWVudGFsRmVhdHVyZXMuYWRkKFN0cmluZyhrZXkuY19z
dHIoKSksIHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSkpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKCFrZXkucmZpbmQoImludGVybmFsOiIpKSB7Ci0gICAgICAgICAgICBrZXkg
PSBrZXkuc3Vic3RyKDkpOwotICAgICAgICAgICAgdGVzdE9wdGlvbnMuaW50ZXJuYWxEZWJ1Z0Zl
YXR1cmVzLmFkZChTdHJpbmcoa2V5LmNfc3RyKCkpLCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFs
dWUodmFsdWUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChrZXkgPT0gImxhbmd1YWdlIikK
LSAgICAgICAgICAgIHRlc3RPcHRpb25zLmNvbnRleHRPcHRpb25zLm92ZXJyaWRlTGFuZ3VhZ2Vz
ID0gU3RyaW5nKHZhbHVlLmNfc3RyKCkpLnNwbGl0KCcsJyk7Ci0gICAgICAgIGVsc2UgaWYgKGtl
eSA9PSAidXNlVGhyZWFkZWRTY3JvbGxpbmciKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMudXNl
VGhyZWFkZWRTY3JvbGxpbmcgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwot
ICAgICAgICBlbHNlIGlmIChrZXkgPT0gInVzZUFjY2VsZXJhdGVkRHJhd2luZyIpCi0gICAgICAg
ICAgICB0ZXN0T3B0aW9ucy51c2VBY2NlbGVyYXRlZERyYXdpbmcgPSBwYXJzZUJvb2xlYW5UZXN0
SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInVzZUZsZXhpYmxl
Vmlld3BvcnQiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMudXNlRmxleGlibGVWaWV3cG9ydCA9
IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtl
eSA9PSAidXNlRGF0YURldGVjdGlvbiIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy51c2VEYXRh
RGV0ZWN0aW9uID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAg
ZWxzZSBpZiAoa2V5ID09ICJ1c2VNb2NrU2Nyb2xsYmFycyIpCi0gICAgICAgICAgICB0ZXN0T3B0
aW9ucy51c2VNb2NrU2Nyb2xsYmFycyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1
ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAibmVlZHNTaXRlU3BlY2lmaWNRdWlya3MiKQot
ICAgICAgICAgICAgdGVzdE9wdGlvbnMubmVlZHNTaXRlU3BlY2lmaWNRdWlya3MgPSBwYXJzZUJv
b2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImln
bm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmlnbm9y
ZXNWaWV3cG9ydFNjYWxlTGltaXRzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVl
KTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJ1c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxh
cml0eSIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy51c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFu
dWxhcml0eSA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVs
c2UgaWYgKGtleSA9PSAiZW5hYmxlQXR0YWNobWVudEVsZW1lbnQiKQotICAgICAgICAgICAgdGVz
dE9wdGlvbnMuZW5hYmxlQXR0YWNobWVudEVsZW1lbnQgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVy
VmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUludGVyc2VjdGlv
bk9ic2VydmVyIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZUludGVyc2VjdGlvbk9i
c2VydmVyID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxz
ZSBpZiAoa2V5ID09ICJ1c2VFcGhlbWVyYWxTZXNzaW9uIikKLSAgICAgICAgICAgIHRlc3RPcHRp
b25zLnVzZUVwaGVtZXJhbFNlc3Npb24gPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFs
dWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZU1lbnVJdGVtRWxlbWVudCIpCi0g
ICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVNZW51SXRlbUVsZW1lbnQgPSBwYXJzZUJvb2xl
YW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJs
ZUtleWdlbkVsZW1lbnQiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlS2V5Z2VuRWxl
bWVudCA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2Ug
aWYgKGtleSA9PSAiZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyIpCi0gICAgICAgICAgICB0ZXN0
T3B0aW9ucy5lbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRl
clZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVQb2ludGVyTG9j
ayIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVQb2ludGVyTG9jayA9IHBhcnNlQm9v
bGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5h
YmxlV2ViQXV0aGVudGljYXRpb24iKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlV2Vi
QXV0aGVudGljYXRpb24gPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAg
ICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50
aWNhdG9yIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZVdlYkF1dGhlbnRpY2F0aW9u
TG9jYWxBdXRoZW50aWNhdG9yID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsK
LSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMiKQotICAg
ICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zID0gcGFyc2VCb29s
ZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJkdW1w
SlNDb25zb2xlTG9nSW5TdGRFcnIiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZHVtcEpTQ29u
c29sZUxvZ0luU3RkRXJyID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAg
ICAgICAgZWxzZSBpZiAoa2V5ID09ICJhcHBsaWNhdGlvbk1hbmlmZXN0IikKLSAgICAgICAgICAg
IHRlc3RPcHRpb25zLmFwcGxpY2F0aW9uTWFuaWZlc3QgPSBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJW
YWx1ZUFzUmVsYXRpdmVQYXRoKHZhbHVlLCBwYXRoT3JVUkwpOwotICAgICAgICBlbHNlIGlmIChr
ZXkgPT0gImFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzIikK
LSAgICAgICAgICAgIHRlc3RPcHRpb25zLmFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fz
a0ZvckNyZWRlbnRpYWxzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAg
ICAgICAgZWxzZSBpZiAoa2V5ID09ICJkb21QYXN0ZUFsbG93ZWQiKQotICAgICAgICAgICAgdGVz
dE9wdGlvbnMuZG9tUGFzdGVBbGxvd2VkID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZh
bHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdh
dGlvbiIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5jb250ZXh0T3B0aW9ucy5lbmFibGVQcm9j
ZXNzU3dhcE9uTmF2aWdhdGlvbiA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7
Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW4i
KQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuY29udGV4dE9wdGlvbnMuZW5hYmxlUHJvY2Vzc1N3
YXBPbldpbmRvd09wZW4gPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAg
ICAgICBlbHNlIGlmIChrZXkgPT0gInVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQiKQotICAg
ICAgICAgICAgdGVzdE9wdGlvbnMuY29udGV4dE9wdGlvbnMudXNlU2VydmljZVdvcmtlclNob3J0
VGltZW91dCA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVs
c2UgaWYgKGtleSA9PSAiZW5hYmxlQ29sb3JGaWx0ZXIiKQotICAgICAgICAgICAgdGVzdE9wdGlv
bnMuZW5hYmxlQ29sb3JGaWx0ZXIgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUp
OwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFy
a01vZGUiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMucHVuY2hPdXRXaGl0ZUJhY2tncm91bmRz
SW5EYXJrTW9kZSA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAg
IGVsc2UgaWYgKGtleSA9PSAianNjT3B0aW9ucyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5q
c2NPcHRpb25zID0gdmFsdWU7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiYWRkaXRpb25hbFN1
cHBvcnRlZEltYWdlVHlwZXMiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuYWRkaXRpb25hbFN1
cHBvcnRlZEltYWdlVHlwZXMgPSB2YWx1ZTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJydW5T
aW5nbHkiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMucnVuU2luZ2x5ID0gcGFyc2VCb29sZWFu
VGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJzaG91bGRJ
Z25vcmVNZXRhVmlld3BvcnQiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuc2hvdWxkSWdub3Jl
TWV0YVZpZXdwb3J0ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAg
ICAgZWxzZSBpZiAoa2V5ID09ICJzcGVsbENoZWNraW5nRG90cyIpCi0gICAgICAgICAgICB0ZXN0
T3B0aW9ucy5zaG91bGRTaG93U3BlbGxDaGVja2luZ0RvdHMgPSBwYXJzZUJvb2xlYW5UZXN0SGVh
ZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZVNlcnZpY2VD
b250cm9scyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVTZXJ2aWNlQ29udHJvbHMg
PSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChr
ZXkgPT0gImVkaXRhYmxlIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVkaXRhYmxlID0gcGFy
c2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09
ICJzaG91bGRIYW5kbGVSdW5PcGVuUGFuZWwiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuc2hv
dWxkSGFuZGxlUnVuT3BlblBhbmVsID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVl
KTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJzaG91bGRQcmVzZW50UG9wb3ZlcnMiKQotICAg
ICAgICAgICAgdGVzdE9wdGlvbnMuc2hvdWxkUHJlc2VudFBvcG92ZXJzID0gcGFyc2VCb29sZWFu
VGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJjb250ZW50
SW5zZXQudG9wIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmNvbnRlbnRJbnNldFRvcCA9IHN0
ZDo6c3RvZCh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiaWdub3JlU3luY2hyb25v
dXNNZXNzYWdpbmdUaW1lb3V0cyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5jb250ZXh0T3B0
aW9ucy5pZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzID0gcGFyc2VCb29sZWFuVGVz
dEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJjb250ZW50TW9k
ZSIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5jb250ZW50TW9kZSA9IHsgdmFsdWUuY19zdHIo
KSB9OwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmll
ciIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5hcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIg
PSB7IHZhbHVlLmNfc3RyKCkgfTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVBcHBO
YXAiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlQXBwTmFwID0gcGFyc2VCb29sZWFu
VGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVC
YWNrRm9yd2FyZENhY2hlIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZUJhY2tGb3J3
YXJkQ2FjaGUgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBl
bHNlIGlmIChrZXkgPT0gImFsbG93c0xpbmtQcmV2aWV3IikKLSAgICAgICAgICAgIHRlc3RPcHRp
b25zLmFsbG93c0xpbmtQcmV2aWV3ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVl
KTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVDYXB0dXJlVmlkZW9JblVJUHJvY2Vz
cyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVDYXB0dXJlVmlkZW9JblVJUHJvY2Vz
cyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYg
KGtleSA9PSAiZW5hYmxlQ2FwdHVyZVZpZGVvSW5HUFVQcm9jZXNzIikKLSAgICAgICAgICAgIHRl
c3RPcHRpb25zLmVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2VzcyA9IHBhcnNlQm9vbGVhblRl
c3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlQ2Fw
dHVyZUF1ZGlvSW5VSVByb2Nlc3MiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlQ2Fw
dHVyZUF1ZGlvSW5VSVByb2Nlc3MgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUp
OwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUNhcHR1cmVBdWRpb0luR1BVUHJvY2Vz
cyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVDYXB0dXJlQXVkaW9JbkdQVVByb2Nl
c3MgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlm
IChrZXkgPT0gImFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMiKQotICAgICAgICAgICAgdGVz
dE9wdGlvbnMuYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyA9IHBhcnNlQm9vbGVhblRlc3RI
ZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlSW5BcHBC
cm93c2VyUHJpdmFjeSIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVJbkFwcEJyb3dz
ZXJQcml2YWN5ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAg
ZWxzZSBpZiAoa2V5ID09ICJzdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwiKQotICAgICAgICAg
ICAgdGVzdE9wdGlvbnMuc3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMID0gcGFyc2VTdHJpbmdU
ZXN0SGVhZGVyVmFsdWVBc1VSTCh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiaXNB
cHBCb3VuZFdlYlZpZXciKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuaXNBcHBCb3VuZFdlYlZp
ZXcgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBwYWlyU3Rh
cnQgPSBwYWlyRW5kICsgMTsKLSAgICB9Ci19Ci0KIFRlc3RPcHRpb25zIFRlc3RDb250cm9sbGVy
Ojp0ZXN0T3B0aW9uc0ZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmIGNvbW1hbmQpIGNvbnN0CiB7
Ci0gICAgVGVzdE9wdGlvbnMgb3B0aW9ucyhjb21tYW5kLnBhdGhPclVSTCk7Ci0KLSAgICBvcHRp
b25zLnVzZVJlbW90ZUxheWVyVHJlZSA9IG1fc2hvdWxkVXNlUmVtb3RlTGF5ZXJUcmVlOwotICAg
IG9wdGlvbnMuc2hvdWxkU2hvd1dlYlZpZXcgPSBtX3Nob3VsZFNob3dXZWJWaWV3OwotCi0gICAg
Zm9yIChhdXRvJiBmZWF0dXJlIDogbV9pbnRlcm5hbEZlYXR1cmVzKQotICAgICAgICBvcHRpb25z
LmludGVybmFsRGVidWdGZWF0dXJlcy5hZGQoZmVhdHVyZS5rZXksIGZlYXR1cmUudmFsdWUpOwot
ICAgIGZvciAoYXV0byYgZmVhdHVyZSA6IG1fZXhwZXJpbWVudGFsRmVhdHVyZXMpCi0gICAgICAg
IG9wdGlvbnMuZXhwZXJpbWVudGFsRmVhdHVyZXMuYWRkKGZlYXR1cmUua2V5LCBmZWF0dXJlLnZh
bHVlKTsKKyAgICBUZXN0RmVhdHVyZXMgZmVhdHVyZXMgPSBtX2dsb2JhbEZlYXR1cmVzOworICAg
IG1lcmdlKGZlYXR1cmVzLCBoYXJkY29kZWRGZWF0dXJlc0Jhc2VkT25QYXRoRm9yVGVzdChjb21t
YW5kKSk7CisgICAgbWVyZ2UoZmVhdHVyZXMsIHBsYXRmb3JtU3BlY2lmaWNGZWF0dXJlRGVmYXVs
dHNGb3JUZXN0KGNvbW1hbmQpKTsKKyAgICBtZXJnZShmZWF0dXJlcywgZmVhdHVyZURlZmF1bHRz
RnJvbVRlc3RPcHRpb25zRmlsZXNGb3JUZXN0KGNvbW1hbmQpKTsKKyAgICBtZXJnZShmZWF0dXJl
cywgZmVhdHVyZURlZmF1bHRzRnJvbVRlc3RIZWFkZXJGb3JUZXN0KGNvbW1hbmQpKTsKKyAgICBt
ZXJnZShmZWF0dXJlcywgcGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVPdmVycmlkZXNEZWZhdWx0c0Zv
clRlc3QoY29tbWFuZCkpOwogCi0gICAgdXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25z
Rm9yVGVzdChvcHRpb25zLCBjb21tYW5kLnBhdGhPclVSTCk7Ci0gICAgdXBkYXRlVGVzdE9wdGlv
bnNGcm9tVGVzdEhlYWRlcihvcHRpb25zLCBjb21tYW5kLnBhdGhPclVSTCwgY29tbWFuZC5hYnNv
bHV0ZVBhdGgpOwotICAgIHBsYXRmb3JtQWRkVGVzdE9wdGlvbnMob3B0aW9ucyk7Ci0KLSAgICBy
ZXR1cm4gb3B0aW9uczsKKyAgICByZXR1cm4gVGVzdE9wdGlvbnMgeyBmZWF0dXJlcyB9OwogfQog
CiB2b2lkIFRlc3RDb250cm9sbGVyOjp1cGRhdGVXZWJWaWV3U2l6ZUZvclRlc3QoY29uc3QgVGVz
dEludm9jYXRpb24mIHRlc3QpCiB7Ci0gICAgdW5zaWduZWQgd2lkdGggPSB2aWV3V2lkdGg7Ci0g
ICAgdW5zaWduZWQgaGVpZ2h0ID0gdmlld0hlaWdodDsKLSAgICBpZiAodGVzdC5vcHRpb25zKCku
aXNTVkdUZXN0KSB7Ci0gICAgICAgIHdpZHRoID0gdzNjU1ZHVmlld1dpZHRoOwotICAgICAgICBo
ZWlnaHQgPSB3M2NTVkdWaWV3SGVpZ2h0OwotICAgIH0KLQotICAgIG1haW5XZWJWaWV3KCktPnJl
c2l6ZVRvKHdpZHRoLCBoZWlnaHQpOworICAgIG1haW5XZWJWaWV3KCktPnJlc2l6ZVRvKHRlc3Qu
b3B0aW9ucygpLnZpZXdXaWR0aCgpLCB0ZXN0Lm9wdGlvbnMoKS52aWV3SGVpZ2h0KCkpOwogfQog
CiB2b2lkIFRlc3RDb250cm9sbGVyOjp1cGRhdGVXaW5kb3dTY2FsZUZvclRlc3QoUGxhdGZvcm1X
ZWJWaWV3KiB2aWV3LCBjb25zdCBUZXN0SW52b2NhdGlvbiYgdGVzdCkKIHsKLSAgICB2aWV3LT5j
aGFuZ2VXaW5kb3dTY2FsZUlmTmVlZGVkKHRlc3Qub3B0aW9ucygpLmRldmljZVNjYWxlRmFjdG9y
KTsKKyAgICB2aWV3LT5jaGFuZ2VXaW5kb3dTY2FsZUlmTmVlZGVkKHRlc3Qub3B0aW9ucygpLmRl
dmljZVNjYWxlRmFjdG9yKCkpOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpjb25maWd1cmVW
aWV3Rm9yVGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYgdGVzdCkKQEAgLTE3NjYsNiArMTU3MCwx
MiBAQCBzdGF0aWMgVGVzdENvbW1hbmQgcGFyc2VJbnB1dExpbmUoY29uc3QgCiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIGRpZShpbnB1dExpbmUpOwogICAgIH0KKyAgICAKKyAgICBpZiAocmVz
dWx0LmFic29sdXRlUGF0aC5lbXB0eSgpKSB7CisgICAgICAgIC8vIEdyb3NzLiBOZWVkIHRvIHJl
ZHVjZSBjb252ZXJzaW9ucyBiZXR3ZWVuIGFsbCB0aGUgc3RyaW5nIHR5cGVzIGFuZCBVUkxzLgor
ICAgICAgICByZXN1bHQuYWJzb2x1dGVQYXRoID0gdGVzdFBhdGgoYWRvcHRXSyhUZXN0Q29udHJv
bGxlcjo6Y3JlYXRlVGVzdFVSTChyZXN1bHQucGF0aE9yVVJMLmNfc3RyKCkpKS5nZXQoKSk7Cisg
ICAgfQorCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTc4OCw3ICsxNTk4LDcgQEAgYm9v
bCBUZXN0Q29udHJvbGxlcjo6cnVuVGVzdChjb25zdCBjaGFyKgogICAgIGlmIChjb21tYW5kLnRp
bWVvdXQgPiAwX3MpCiAgICAgICAgIG1fY3VycmVudEludm9jYXRpb24tPnNldEN1c3RvbVRpbWVv
dXQoY29tbWFuZC50aW1lb3V0KTsKIAotICAgIG1fY3VycmVudEludm9jYXRpb24tPnNldER1bXBK
U0NvbnNvbGVMb2dJblN0ZEVycihjb21tYW5kLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciB8fCBv
cHRpb25zLmR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycik7CisgICAgbV9jdXJyZW50SW52b2NhdGlv
bi0+c2V0RHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKGNvbW1hbmQuZHVtcEpTQ29uc29sZUxvZ0lu
U3RkRXJyIHx8IG9wdGlvbnMuZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKCkpOwogCiAgICAgcGxh
dGZvcm1XaWxsUnVuVGVzdCgqbV9jdXJyZW50SW52b2NhdGlvbik7CiAKQEAgLTMwMDMsNyArMjgx
Myw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtV2lsbFJ1blRlc3QKIAogdm9pZCBU
ZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1Jbml0aWFsaXplRGF0YVN0b3JlKFdLUGFnZUNvbmZpZ3Vy
YXRpb25SZWYgY29uZmlndXJhdGlvbiwgY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0g
ICAgaWYgKCFvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24pCisgICAgaWYgKCFvcHRpb25zLnVz
ZUVwaGVtZXJhbFNlc3Npb24oKSkKICAgICAgICAgV0tQYWdlQ29uZmlndXJhdGlvblNldFdlYnNp
dGVEYXRhU3RvcmUoY29uZmlndXJhdGlvbiwgZGVmYXVsdFdlYnNpdGVEYXRhU3RvcmUoKSk7CiAK
ICAgICBtX3dlYnNpdGVEYXRhU3RvcmUgPSBXS1BhZ2VDb25maWd1cmF0aW9uR2V0V2Vic2l0ZURh
dGFTdG9yZShjb25maWd1cmF0aW9uKTsKQEAgLTM4MTgsNyArMzYyOCw3IEBAIHZvaWQgVGVzdENv
bnRyb2xsZXI6OnJlaW5pdGlhbGl6ZUFwcEJvdW4KICAgICBXS1dlYnNpdGVEYXRhU3RvcmVSZWlu
aXRpYWxpemVBcHBCb3VuZERvbWFpbnMoVGVzdENvbnRyb2xsZXI6OndlYnNpdGVEYXRhU3RvcmUo
KSk7CiB9CiAKLXZvaWQgVGVzdENvbnRyb2xsZXI6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5l
dHdvcmtQcm9jZXNzKGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllcikKK3ZvaWQgVGVzdENv
bnRyb2xsZXI6OnVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKGNvbnN0IHN0
ZDo6c3RyaW5nJiBidW5kbGVJZGVudGlmaWVyKQogewogICAgIEluQXBwQnJvd3NlclByaXZhY3lD
YWxsYmFja0NvbnRleHQgY29udGV4dCgqdGhpcyk7CiAgICAgV0tXZWJzaXRlRGF0YVN0b3JlVXBk
YXRlQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MoVGVzdENvbnRyb2xsZXI6OndlYnNp
dGVEYXRhU3RvcmUoKSwgdG9XSyhidW5kbGVJZGVudGlmaWVyKS5nZXQoKSwgJmNvbnRleHQsIGlu
QXBwQnJvd3NlclByaXZhY3lWb2lkUmVzdWx0Q2FsbGJhY2spOwpAQCAtMzgzMyw4ICszNjQzLDkg
QEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6Y2xlYXJCdW5kbGVJZGVudGlmaQogfQogCiAjaWYgIVBM
QVRGT1JNKENPQ09BKQotdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1BZGRUZXN0T3B0aW9u
cyhUZXN0T3B0aW9ucyYpIGNvbnN0CitUZXN0RmVhdHVyZXMgVGVzdENvbnRyb2xsZXI6OnBsYXRm
b3JtU3BlY2lmaWNGZWF0dXJlT3ZlcnJpZGVzRGVmYXVsdHNGb3JUZXN0KGNvbnN0IFRlc3RDb21t
YW5kJikgY29uc3QKIHsKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVy
OjppbmplY3RVc2VyU2NyaXB0KFdLU3RyaW5nUmVmKQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9UZXN0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvVGVzdENvbnRyb2xsZXIuaAkocmV2aXNpb24gMjY3OTQ4KQorKysgVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW5jbHVkZSA8V2ViS2l0L1dLUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8c2V0PgogI2luY2x1
ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgogI2luY2x1ZGUgPHZlY3Rvcj4K
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpA
QCAtNTAsMTIgKzUxLDEyIEBAIE9CSkNfQ0xBU1MgV0tXZWJWaWV3Q29uZmlndXJhdGlvbjsKIAog
bmFtZXNwYWNlIFdUUiB7CiAKLWNsYXNzIFRlc3RJbnZvY2F0aW9uOworY2xhc3MgRXZlbnRTZW5k
ZXJQcm94eTsKIGNsYXNzIE9yaWdpblNldHRpbmdzOwogY2xhc3MgUGxhdGZvcm1XZWJWaWV3Owot
Y2xhc3MgRXZlbnRTZW5kZXJQcm94eTsKK2NsYXNzIFRlc3RJbnZvY2F0aW9uOworY2xhc3MgVGVz
dE9wdGlvbnM7CiBzdHJ1Y3QgVGVzdENvbW1hbmQ7Ci1zdHJ1Y3QgVGVzdE9wdGlvbnM7CiAKIGNs
YXNzIEFzeW5jVGFzayB7CiBwdWJsaWM6CkBAIC05MSwxMSArOTIsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgY29uZmlndXJlV2Vic2l0ZURhdGFTdG9yZVRlbXBvcmFyeURpcmVjdG9yaWVz
KFdLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb25SZWYpOwogICAgIHN0YXRpYyBXS1dlYnNp
dGVEYXRhU3RvcmVSZWYgZGVmYXVsdFdlYnNpdGVEYXRhU3RvcmUoKTsKIAotICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCB2aWV3V2lkdGg7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZpZXdI
ZWlnaHQ7Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdzNjU1ZHVmlld1dpZHRoOwotICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCB3M2NTVkdWaWV3SGVpZ2h0OworICAgIHN0YXRpYyBXS1VS
TFJlZiBjcmVhdGVUZXN0VVJMKGNvbnN0IGNoYXIqIHBhdGhPclVSTCk7CiAKICAgICBzdGF0aWMg
Y29uc3QgV1RGOjpTZWNvbmRzIGRlZmF1bHRTaG9ydFRpbWVvdXQ7CiAgICAgc3RhdGljIGNvbnN0
IFdURjo6U2Vjb25kcyBub1RpbWVvdXQ7CkBAIC0xMTUsMjAgKzExMiwxNSBAQCBwdWJsaWM6CiAg
ICAgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIHdlYnNpdGVEYXRhU3RvcmUoKTsKIAogICAgIEV2ZW50
U2VuZGVyUHJveHkqIGV2ZW50U2VuZGVyUHJveHkoKSB7IHJldHVybiBtX2V2ZW50U2VuZGVyUHJv
eHkuZ2V0KCk7IH0KLQotICAgIGJvb2wgc2hvdWxkVXNlUmVtb3RlTGF5ZXJUcmVlKCkgY29uc3Qg
eyByZXR1cm4gbV9zaG91bGRVc2VSZW1vdGVMYXllclRyZWU7IH0KICAgICAKICAgICAvLyBSdW5z
IHRoZSBydW4gbG9vcCB1bnRpbCBgZG9uZWAgaXMgdHJ1ZSBvciB0aGUgdGltZW91dCBlbGFwc2Vz
LgogICAgIGJvb2wgdXNlV2FpdFRvRHVtcFdhdGNoZG9nVGltZXIoKSB7IHJldHVybiBtX3VzZVdh
aXRUb0R1bXBXYXRjaGRvZ1RpbWVyOyB9CiAgICAgdm9pZCBydW5VbnRpbChib29sJiBkb25lLCBX
VEY6OlNlY29uZHMgdGltZW91dCk7CiAgICAgdm9pZCBub3RpZnlEb25lKCk7CiAKLSAgICBib29s
IHNob3VsZFNob3dXZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRTaG93V2ViVmlldzsg
fQogICAgIGJvb2wgdXNpbmdTZXJ2ZXJNb2RlKCkgY29uc3QgeyByZXR1cm4gbV91c2luZ1NlcnZl
ck1vZGU7IH0KICAgICB2b2lkIGNvbmZpZ3VyZVZpZXdGb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0
aW9uJik7Ci0gICAgCi0gICAgYm9vbCBzaG91bGRTaG93VG91Y2hlcygpIGNvbnN0IHsgcmV0dXJu
IG1fc2hvdWxkU2hvd1RvdWNoZXM7IH0KLSAgICAKKwogICAgIGJvb2wgYmVmb3JlVW5sb2FkUmV0
dXJuVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2JlZm9yZVVubG9hZFJldHVyblZhbHVlOyB9CiAg
ICAgdm9pZCBzZXRCZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZShib29sIHZhbHVlKSB7IG1fYmVmb3Jl
VW5sb2FkUmV0dXJuVmFsdWUgPSB2YWx1ZTsgfQogCkBAIC0yNzUsNyArMjY3LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgY2xlYXJMb2FkZWRTdWJyZXNvdXJjZURvbWFpbnMoKTsKICAgICB2b2lkIGNs
ZWFyQXBwQm91bmRTZXNzaW9uKCk7CiAgICAgdm9pZCByZWluaXRpYWxpemVBcHBCb3VuZERvbWFp
bnMoKTsKLSAgICB2b2lkIHVwZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKGNv
bnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllcik7CisgICAgdm9pZCB1cGRhdGVCdW5kbGVJZGVu
dGlmaWVySW5OZXR3b3JrUHJvY2Vzcyhjb25zdCBzdGQ6OnN0cmluZyYgYnVuZGxlSWRlbnRpZmll
cik7CiAgICAgdm9pZCBjbGVhckJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKCk7CiAK
ICAgICBXS0FycmF5UmVmIG9wZW5QYW5lbEZpbGVVUkxzKCkgY29uc3QgeyByZXR1cm4gbV9vcGVu
UGFuZWxGaWxlVVJMcy5nZXQoKTsgfQpAQCAtMzYyLDcgKzM1NCw3IEBAIHB1YmxpYzoKIAogcHJp
dmF0ZToKICAgICBXS1JldGFpblB0cjxXS1BhZ2VDb25maWd1cmF0aW9uUmVmPiBnZW5lcmF0ZVBh
Z2VDb25maWd1cmF0aW9uKGNvbnN0IFRlc3RPcHRpb25zJik7Ci0gICAgV0tSZXRhaW5QdHI8V0tD
b250ZXh0Q29uZmlndXJhdGlvblJlZj4gZ2VuZXJhdGVDb250ZXh0Q29uZmlndXJhdGlvbihjb25z
dCBUZXN0T3B0aW9uczo6Q29udGV4dE9wdGlvbnMmKSBjb25zdDsKKyAgICBXS1JldGFpblB0cjxX
S0NvbnRleHRDb25maWd1cmF0aW9uUmVmPiBnZW5lcmF0ZUNvbnRleHRDb25maWd1cmF0aW9uKGNv
bnN0IENvbnRleHRPcHRpb25zJikgY29uc3Q7CiAgICAgdm9pZCBpbml0aWFsaXplKGludCBhcmdj
LCBjb25zdCBjaGFyKiBhcmd2W10pOwogICAgIHZvaWQgY3JlYXRlV2ViVmlld1dpdGhPcHRpb25z
KGNvbnN0IFRlc3RPcHRpb25zJik7CiAgICAgdm9pZCBydW4oKTsKQEAgLTM4MCw3ICszNzIsNiBA
QCBwcml2YXRlOgogICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CiAgICAgV0tDb250ZXh0UmVm
IHBsYXRmb3JtQWRqdXN0Q29udGV4dChXS0NvbnRleHRSZWYsIFdLQ29udGV4dENvbmZpZ3VyYXRp
b25SZWYpOwogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplQ29udGV4dCgpOwotICAgIHZvaWQg
cGxhdGZvcm1BZGRUZXN0T3B0aW9ucyhUZXN0T3B0aW9ucyYpIGNvbnN0OwogICAgIHZvaWQgcGxh
dGZvcm1DcmVhdGVXZWJWaWV3KFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYsIGNvbnN0IFRlc3RPcHRp
b25zJik7CiAgICAgc3RhdGljIFBsYXRmb3JtV2ViVmlldyogcGxhdGZvcm1DcmVhdGVPdGhlclBh
Z2UoUGxhdGZvcm1XZWJWaWV3KiBwYXJlbnRWaWV3LCBXS1BhZ2VDb25maWd1cmF0aW9uUmVmLCBj
b25zdCBUZXN0T3B0aW9ucyYpOwogICAgIHZvaWQgcGxhdGZvcm1SZXNldFByZWZlcmVuY2VzVG9D
b25zaXN0ZW50VmFsdWVzKCk7CkBAIC0zODksNyArMzgwLDcgQEAgcHJpdmF0ZToKICNpZiBQTEFU
Rk9STShDT0NPQSkKICAgICB2b2lkIGNvY29hUGxhdGZvcm1Jbml0aWFsaXplKCk7CiAgICAgdm9p
ZCBjb2NvYVJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmKTsK
LSAgICB2b2lkIHNldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmKTsK
KyAgICB2b2lkIHNldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcihjb25zdCBzdGQ6OnN0cmlu
ZyYpOwogICAgIHZvaWQgY2xlYXJBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXJUZXN0aW5nT3Zl
cnJpZGUoKTsKICNlbmRpZgogICAgIHZvaWQgcGxhdGZvcm1Db25maWd1cmVWaWV3Rm9yVGVzdChj
b25zdCBUZXN0SW52b2NhdGlvbiYpOwpAQCAtNDAzLDcgKzM5NCw5IEBAIHByaXZhdGU6CiAKICAg
ICB2b2lkIGVuc3VyZVZpZXdTdXBwb3J0c09wdGlvbnNGb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0
aW9uJik7CiAgICAgVGVzdE9wdGlvbnMgdGVzdE9wdGlvbnNGb3JUZXN0KGNvbnN0IFRlc3RDb21t
YW5kJikgY29uc3Q7Ci0gICAgdm9pZCB1cGRhdGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNG
b3JUZXN0KFRlc3RPcHRpb25zJiwgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkgY29uc3Q7
CisgICAgVGVzdEZlYXR1cmVzIGdsb2JhbEZlYXR1cmVEZWZhdWx0c0ZvclRlc3QoY29uc3QgVGVz
dENvbW1hbmQmKSBjb25zdDsKKyAgICBUZXN0RmVhdHVyZXMgcGxhdGZvcm1TcGVjaWZpY0ZlYXR1
cmVEZWZhdWx0c0ZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKSBjb25zdDsKKyAgICBUZXN0RmVh
dHVyZXMgcGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVPdmVycmlkZXNEZWZhdWx0c0ZvclRlc3QoY29u
c3QgVGVzdENvbW1hbmQmKSBjb25zdDsKIAogICAgIHZvaWQgdXBkYXRlV2ViVmlld1NpemVGb3JU
ZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJik7CiAgICAgdm9pZCB1cGRhdGVXaW5kb3dTY2FsZUZv
clRlc3QoUGxhdGZvcm1XZWJWaWV3KiwgY29uc3QgVGVzdEludm9jYXRpb24mKTsKQEAgLTUzOCw4
ICs1MzEsMTAgQEAgcHJpdmF0ZToKICAgICBib29sIG1fY3JlYXRlZE90aGVyUGFnZSB7IGZhbHNl
IH07CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG1fcGF0aHM7CiAgICAgc3RkOjpzZXQ8
c3RkOjpzdHJpbmc+IG1fYWxsb3dlZEhvc3RzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBib29sPiBt
X2ludGVybmFsRmVhdHVyZXM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIGJvb2w+IG1fZXhwZXJpbWVu
dGFsRmVhdHVyZXM7CisgICAgVGVzdEZlYXR1cmVzIG1fZ2xvYmFsRmVhdHVyZXM7CisKKyAgICBz
dGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+IG1faW50ZXJuYWxGZWF0dXJlczsK
KyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+IG1fZXhwZXJpbWVudGFs
RmVhdHVyZXM7CiAKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbV9pbmplY3RlZEJ1bmRs
ZVBhdGg7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1fdGVzdFBsdWdpbkRpcmVjdG9y
eTsKQEAgLTU0OCw3ICs1NDMsNyBAQCBwcml2YXRlOgogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFBs
YXRmb3JtV2ViVmlldz4gbV9tYWluV2ViVmlldzsKICAgICBXS1JldGFpblB0cjxXS0NvbnRleHRS
ZWY+IG1fY29udGV4dDsKLSAgICBPcHRpb25hbDxUZXN0T3B0aW9uczo6Q29udGV4dE9wdGlvbnM+
IG1fY29udGV4dE9wdGlvbnM7CisgICAgT3B0aW9uYWw8Q29udGV4dE9wdGlvbnM+IG1fY29udGV4
dE9wdGlvbnM7CiAgICAgV0tSZXRhaW5QdHI8V0tQYWdlR3JvdXBSZWY+IG1fcGFnZUdyb3VwOwog
ICAgIFdLUmV0YWluUHRyPFdLVXNlckNvbnRlbnRDb250cm9sbGVyUmVmPiBtX3VzZXJDb250ZW50
Q29udHJvbGxlcjsKIApAQCAtNjA1LDE0ICs2MDAsMTAgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wg
bV9mb3JjZUNvbXBsZXhUZXh0IHsgZmFsc2UgfTsKICAgICBib29sIG1fc2hvdWxkVXNlQWNjZWxl
cmF0ZWREcmF3aW5nIHsgZmFsc2UgfTsKLSAgICBib29sIG1fc2hvdWxkVXNlUmVtb3RlTGF5ZXJU
cmVlIHsgZmFsc2UgfTsKLQorICAgIAogICAgIGJvb2wgbV9zaG91bGRMb2dDYW5BdXRoZW50aWNh
dGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlIHsgZmFsc2UgfTsKICAgICBib29sIG1fc2hvdWxkTG9n
RG93bmxvYWRDYWxsYmFja3MgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9zaG91bGRMb2dIaXN0b3J5
Q2xpZW50Q2FsbGJhY2tzIHsgZmFsc2UgfTsKLSAgICBib29sIG1fc2hvdWxkU2hvd1dlYlZpZXcg
eyBmYWxzZSB9OwotICAgIAotICAgIGJvb2wgbV9zaG91bGRTaG93VG91Y2hlcyB7IGZhbHNlIH07
CiAgICAgYm9vbCBtX2NoZWNrRm9yV29ybGRMZWFrcyB7IGZhbHNlIH07CiAKICAgICBib29sIG1f
YWxsb3dBbnlIVFRQU0NlcnRpZmljYXRlRm9yQWxsb3dlZEhvc3RzIHsgZmFsc2UgfTsKSW5kZXg6
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCShyZXZpc2lvbiAyNjc5
NDgpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMxLDExICsxMzEsMTEgQEAgYm9vbCBUZXN0SW52b2NhdGlvbjo6c2hvdWxk
TG9nSGlzdG9yeUNsaQogV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gVGVzdElu
dm9jYXRpb246OmNyZWF0ZVRlc3RTZXR0aW5nc0RpY3Rpb25hcnkoKQogewogICAgIGF1dG8gYmVn
aW5UZXN0TWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7
Ci0gICAgc2V0VmFsdWUoYmVnaW5UZXN0TWVzc2FnZUJvZHksICJVc2VGbGV4aWJsZVZpZXdwb3J0
Iiwgb3B0aW9ucygpLnVzZUZsZXhpYmxlVmlld3BvcnQpOworICAgIHNldFZhbHVlKGJlZ2luVGVz
dE1lc3NhZ2VCb2R5LCAiVXNlRmxleGlibGVWaWV3cG9ydCIsIG9wdGlvbnMoKS51c2VGbGV4aWJs
ZVZpZXdwb3J0KCkpOwogICAgIHNldFZhbHVlKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAiRHVtcFBp
eGVscyIsIG1fZHVtcFBpeGVscyk7CiAgICAgc2V0VmFsdWUoYmVnaW5UZXN0TWVzc2FnZUJvZHks
ICJUaW1lb3V0Iiwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1fdGltZW91dC5taWxsaXNlY29uZHMo
KSkpOwogICAgIHNldFZhbHVlKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LCAiRHVtcEpTQ29uc29sZUxv
Z0luU3RkRXJyIiwgbV9kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIpOwotICAgIHNldFZhbHVlKGJl
Z2luVGVzdE1lc3NhZ2VCb2R5LCAiYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMiLCBvcHRp
b25zKCkuYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMuY19zdHIoKSk7CisgICAgc2V0VmFs
dWUoYmVnaW5UZXN0TWVzc2FnZUJvZHksICJhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIs
IG9wdGlvbnMoKS5hZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcygpLmNfc3RyKCkpOwogICAg
IHJldHVybiBiZWdpblRlc3RNZXNzYWdlQm9keTsKIH0KIApJbmRleDogVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9UZXN0T3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9UZXN0T3B0aW9ucy5jcHAJKHJldmlzaW9uIDI2Nzk0OCkKKysrIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdE9wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw0OCArMjYsMjU1
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdE9wdGlvbnMuaCIKIAorI2lu
Y2x1ZGUgIlN0cmluZ0Z1bmN0aW9ucy5oIgorI2luY2x1ZGUgIlRlc3RDb250cm9sbGVyLmgiCisj
aW5jbHVkZSAiU3RkRmlsZXN5c3RlbS5oIgorI2luY2x1ZGUgPGZzdHJlYW0+CisjaW5jbHVkZSA8
aW9zdHJlYW0+CiAjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCisjZGVmaW5lIERVTVBfRkVBVFVSRVMg
MAorCiBuYW1lc3BhY2UgV1RSIHsKIAotc3RhdGljIGJvb2wgcGF0aENvbnRhaW5zKGNvbnN0IHN0
ZDo6c3RyaW5nJiBwYXRoT3JVUkwsIGNvbnN0IGNoYXIqIHN1YnN0cmluZykKKyNpZiBEVU1QX0ZF
QVRVUkVTCitzdGF0aWMgdm9pZCBkdW1wRmVhdHVyZXMoY29uc3QgVGVzdEZlYXR1cmVzJiBmZWF0
dXJlcykKIHsKLSAgICBTdHJpbmcgcGF0aChwYXRoT3JVUkwuY19zdHIoKSk7Ci0gICAgcmV0dXJu
IHBhdGguY29udGFpbnMoc3Vic3RyaW5nKTsgLy8gQ2FzZS1pbnNlbnNpdGl2ZS4KKyAgICBpZiAo
ZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMuZW1wdHkoKSAmJiBmZWF0dXJlcy5pbnRlcm5h
bERlYnVnRmVhdHVyZXMuZW1wdHkoKSAmJiBmZWF0dXJlcy5ib29sRmVhdHVyZXMuZW1wdHkoKSAm
JiBmZWF0dXJlcy5kb3VibGVGZWF0dXJlcy5lbXB0eSgpICYmIGZlYXR1cmVzLnN0cmluZ0ZlYXR1
cmVzLmVtcHR5KCkgJiYgZmVhdHVyZXMuc3RyaW5nVmVjdG9yRmVhdHVyZXMuZW1wdHkoKSkgewor
ICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgW0VNUFRZXVxuIjsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBpZiAoIWZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzLmVtcHR5KCkp
IHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICIgIEV4cGVyaW1lbnRhbCBGZWF0dXJlczogXG4iOwor
ICAgICAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVh
dHVyZXMpCisgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8PCAiOiAiIDw8
IHZhbHVlIDw8ICdcbic7CisgICAgfQorICAgIGlmICghZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0Zl
YXR1cmVzLmVtcHR5KCkpIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICIgIEludGVybmFsIEZlYXR1
cmVzOiBcbiI7CisgICAgICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBmZWF0dXJlcy5pbnRl
cm5hbERlYnVnRmVhdHVyZXMpCisgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtl
eSA8PCAiOiAiIDw8IHZhbHVlIDw8ICdcbic7CisgICAgfQorICAgIGlmICghZmVhdHVyZXMuYm9v
bEZlYXR1cmVzLmVtcHR5KCkpIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICIgIEJvb2wgRmVhdHVy
ZXM6IFxuIjsKKyAgICAgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGZlYXR1cmVzLmJvb2xG
ZWF0dXJlcykKKyAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAgICIgPDwga2V5IDw8ICI6ICIg
PDwgdmFsdWUgPDwgJ1xuJzsKKyAgICB9CisgICAgaWYgKCFmZWF0dXJlcy5kb3VibGVGZWF0dXJl
cy5lbXB0eSgpKSB7CisgICAgICAgIHN0ZDo6Y2VyciA8PCAiICBEb3VibGUgRmVhdHVyZXM6IFxu
IjsKKyAgICAgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGZlYXR1cmVzLmRvdWJsZUZlYXR1
cmVzKQorICAgICAgICAgICAgc3RkOjpjZXJyIDw8ICIgICAgIiA8PCBrZXkgPDwgIjogIiA8PCB2
YWx1ZSA8PCAnXG4nOworICAgIH0KKyAgICBpZiAoIWZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVzLmVt
cHR5KCkpIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICIgIFN0cmluZyBGZWF0dXJlczogXG4iOwor
ICAgICAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMp
CisgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8PCAiOiAiIDw8IHZhbHVl
IDw8ICdcbic7CisgICAgfQorICAgIGlmICghZmVhdHVyZXMuc3RyaW5nVmVjdG9yRmVhdHVyZXMu
ZW1wdHkoKSkgeworICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgU3RyaW5nIFZlY3RvciBGZWF0dXJl
czogXG4iOworICAgICAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVyZXMuc3RyaW5n
VmVjdG9yRmVhdHVyZXMpCisgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtleSA8
PCAiOiBOdW1iZXIgb2Ygc3RyaW5ncyAiIDw8IHZhbHVlLnNpemUoKSA8PCAnXG4nOworICAgIH0K
IH0KKyNlbmRpZgogCi1zdGF0aWMgYm9vbCBzaG91bGRNYWtlVmlld3BvcnRGbGV4aWJsZShjb25z
dCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQorZW51bSBjbGFzcyBLZXlUeXBlIHsKKyAgICBCb29s
LAorICAgIERvdWJsZSwKKyAgICBTdHJpbmcsCisgICAgU3RyaW5nUmVsYXRpdmVQYXRoLAorICAg
IFN0cmluZ1VSTCwKKyAgICBTdHJpbmdWZWN0b3IsCisgICAgVW5rbm93bgorfTsKKworc3RhdGlj
IEtleVR5cGUga2V5VHlwZShzdGQ6OnN0cmluZyBrZXkpCiB7Ci0gICAgcmV0dXJuIHBhdGhDb250
YWlucyhwYXRoT3JVUkwsICJ2aWV3cG9ydC8iKSAmJiAhcGF0aENvbnRhaW5zKHBhdGhPclVSTCwg
InZpc3VhbC12aWV3cG9ydC8iKTsKKyAgICBzdGF0aWMgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6
c3RyaW5nLCBLZXlUeXBlPiBrZXlUeXBlTWFwIHsKKyAgICAgICAgeyAidXNlVGhyZWFkZWRTY3Jv
bGxpbmciLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInVzZUFjY2VsZXJhdGVkRHJhd2lu
ZyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAidXNlUmVtb3RlTGF5ZXJUcmVlIiwgS2V5
VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJzaG91bGRTaG93V2ViVmlldyIsIEtleVR5cGU6OkJv
b2wgfSwKKyAgICAgICAgeyAidXNlRmxleGlibGVWaWV3cG9ydCIsIEtleVR5cGU6OkJvb2wgfSwK
KyAgICAgICAgeyAidXNlRGF0YURldGVjdGlvbiIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAg
eyAidXNlTW9ja1Njcm9sbGJhcnMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgIm5lZWRz
U2l0ZVNwZWNpZmljUXVpcmtzIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJpZ25vcmVz
Vmlld3BvcnRTY2FsZUxpbWl0cyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAidXNlQ2hh
cmFjdGVyU2VsZWN0aW9uR3JhbnVsYXJpdHkiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsg
ImVuYWJsZUF0dGFjaG1lbnRFbGVtZW50IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJl
bmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAi
dXNlRXBoZW1lcmFsU2Vzc2lvbiIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxl
TWVudUl0ZW1FbGVtZW50IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVLZXln
ZW5FbGVtZW50IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVNb2Rlcm5NZWRp
YUNvbnRyb2xzIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVQb2ludGVyTG9j
ayIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlV2ViQXV0aGVudGljYXRpb24i
LCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9j
YWxBdXRoZW50aWNhdG9yIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVJbnNw
ZWN0b3JBZGRpdGlvbnMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInNob3VsZFNob3dU
b3VjaGVzIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJkdW1wSlNDb25zb2xlTG9nSW5T
dGRFcnIiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImFsbG93Q3Jvc3NPcmlnaW5TdWJy
ZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7
ICJkb21QYXN0ZUFsbG93ZWQiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUNv
bG9yRmlsdGVyIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJwdW5jaE91dFdoaXRlQmFj
a2dyb3VuZHNJbkRhcmtNb2RlIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJydW5TaW5n
bHkiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImNoZWNrRm9yV29ybGRMZWFrcyIsIEtl
eVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAic2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0IiwgS2V5
VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJzcGVsbENoZWNraW5nRG90cyIsIEtleVR5cGU6OkJv
b2wgfSwKKyAgICAgICAgeyAiZW5hYmxlU2VydmljZUNvbnRyb2xzIiwgS2V5VHlwZTo6Qm9vbCB9
LAorICAgICAgICB7ICJlZGl0YWJsZSIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAic2hv
dWxkSGFuZGxlUnVuT3BlblBhbmVsIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJzaG91
bGRQcmVzZW50UG9wb3ZlcnMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUFw
cE5hcCIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlQmFja0ZvcndhcmRDYWNo
ZSIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiYWxsb3dzTGlua1ByZXZpZXciLCBLZXlU
eXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUNhcHR1cmVWaWRlb0luVUlQcm9jZXNzIiwg
S2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVDYXB0dXJlVmlkZW9JbkdQVVByb2Nl
c3MiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUNhcHR1cmVBdWRpb0luVUlQ
cm9jZXNzIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVDYXB0dXJlQXVkaW9J
bkdQVVByb2Nlc3MiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImFsbG93VG9wTmF2aWdh
dGlvblRvRGF0YVVSTHMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUluQXBw
QnJvd3NlclByaXZhY3kiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImlzQXBwQm91bmRX
ZWJWaWV3IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJpZ25vcmVTeW5jaHJvbm91c01l
c3NhZ2luZ1RpbWVvdXRzIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVQcm9j
ZXNzU3dhcE9uTmF2aWdhdGlvbiIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxl
UHJvY2Vzc1N3YXBPbldpbmRvd09wZW4iLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInVz
ZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgCisgICAg
ICAgIHsgImNvbnRlbnRJbnNldC50b3AiLCBLZXlUeXBlOjpEb3VibGUgfSwKKyAgICAgICAgeyAi
ZGV2aWNlU2NhbGVGYWN0b3IiLCBLZXlUeXBlOjpEb3VibGUgfSwKKyAgICAgICAgeyAidmlld1dp
ZHRoIiwgS2V5VHlwZTo6RG91YmxlIH0sCisgICAgICAgIHsgInZpZXdIZWlnaHQiLCBLZXlUeXBl
OjpEb3VibGUgfSwKKworICAgICAgICB7ICJqc2NPcHRpb25zIiwgS2V5VHlwZTo6U3RyaW5nIH0s
CisgICAgICAgIHsgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzIiwgS2V5VHlwZTo6U3Ry
aW5nIH0sCisgICAgICAgIHsgImNvbnRlbnRNb2RlIiwgS2V5VHlwZTo6U3RyaW5nIH0sCisgICAg
ICAgIHsgImFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllciIsIEtleVR5cGU6OlN0cmluZyB9LAor
ICAgICAgICB7ICJhcHBsaWNhdGlvbk1hbmlmZXN0IiwgS2V5VHlwZTo6U3RyaW5nUmVsYXRpdmVQ
YXRoIH0sCisgICAgICAgIHsgInN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTCIsIEtleVR5cGU6
OlN0cmluZ1VSTCB9LAorCisgICAgICAgIHsgImxhbmd1YWdlIiwgS2V5VHlwZTo6U3RyaW5nVmVj
dG9yIH0sCisgICAgfTsKKyAgICAKKyAgICBhdXRvIGl0ID0ga2V5VHlwZU1hcC5maW5kKGtleSk7
CisgICAgaWYgKGl0ID09IGtleVR5cGVNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBLZXlUeXBl
OjpVbmtub3duOworICAgIHJldHVybiBpdC0+c2Vjb25kOwogfQogCi1zdGF0aWMgYm9vbCBzaG91
bGRVc2VGaXhlZExheW91dChjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQorc3RhdGljIGJv
b2wgcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkK
IHsKLSNpZiBFTkFCTEUoQ1NTX0RFVklDRV9BREFQVEFUSU9OKQotICAgIGlmIChwYXRoQ29udGFp
bnMocGF0aE9yVVJMLCAiZGV2aWNlLWFkYXB0LyIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkws
ICJkZXZpY2UtYWRhcHRcXCIpKQorICAgIGlmICh2YWx1ZSA9PSAidHJ1ZSIpCiAgICAgICAgIHJl
dHVybiB0cnVlOwotI2VuZGlmCisgICAgaWYgKHZhbHVlID09ICJmYWxzZSIpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIExPR19FUlJPUigiRm91bmQgdW5leHBlY3RlZCB2YWx1ZSAnJXMn
IGZvciBib29sZWFuIG9wdGlvbi4gRXhwZWN0ZWQgJ3RydWUnIG9yICdmYWxzZScuIiwgdmFsdWUu
Y19zdHIoKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgYm9vbCBpc1NWR1Rlc3RQ
YXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCitzdGF0aWMgc3RkOjpzdHJpbmcgcGFy
c2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1JlbGF0aXZlUGF0aChjb25zdCBzdGQ6OnN0cmluZyYg
dmFsdWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCit7CisgICAgYXV0byBiYXNlVVJM
ID0gYWRvcHRXSyhUZXN0Q29udHJvbGxlcjo6Y3JlYXRlVGVzdFVSTChwYXRoT3JVUkwuY19zdHIo
KSkpOworICAgIGF1dG8gcmVsYXRpdmVVUkwgPSBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0aEJhc2VV
UkwoYmFzZVVSTC5nZXQoKSwgdmFsdWUuY19zdHIoKSkpOworICAgIHJldHVybiB0b1NURChhZG9w
dFdLKFdLVVJMQ29weVBhdGgocmVsYXRpdmVVUkwuZ2V0KCkpKSk7Cit9CisKK3N0YXRpYyBzdGQ6
OnN0cmluZyBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzVVJMKGNvbnN0IHN0ZDo6c3RyaW5n
JiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInN2Zy9XM0Mt
U1ZHLTEuMSIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJzdmdcXFczQy1TVkctMS4xIik7
CisgICAgcmV0dXJuIHRvU1REKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKFRlc3RDb250cm9sbGVy
OjpjcmVhdGVUZXN0VVJMKHZhbHVlLmNfc3RyKCkpKSkpOwogfQogCi1zdGF0aWMgYm9vbCBzaG91
bGRVc2VFcGhlbWVyYWxTZXNzaW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCitzdGF0
aWMgVGVzdEZlYXR1cmVzIHBhcnNlVGVzdEhlYWRlcihzdGQ6OmZpbGVzeXN0ZW06OnBhdGggcGF0
aCwgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKIHsKLSAgICByZXR1cm4gcGF0aENvbnRh
aW5zKHBhdGhPclVSTCwgInczYy9JbmRleGVkREItcHJpdmF0ZS1icm93c2luZyIpIHx8IHBhdGhD
b250YWlucyhwYXRoT3JVUkwsICJ3M2NcXEluZGV4ZWREQi1wcml2YXRlLWJyb3dzaW5nIik7Cisg
ICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVzOworICAgIGlmICghc3RkOjpmaWxlc3lzdGVtOjpleGlz
dHMocGF0aCkpCisgICAgICAgIHJldHVybiBmZWF0dXJlczsKKworICAgIHN0ZDo6aWZzdHJlYW0g
ZmlsZShwYXRoKTsKKyAgICBpZiAoIWZpbGUuZ29vZCgpKSB7CisgICAgICAgIExPR19FUlJPUigi
Q291bGQgbm90IG9wZW4gZmlsZSB0byBpbnNwZWN0IHRlc3QgaGVhZGVycyBpbiAlcyIsIHBhdGgu
Y19zdHIoKSk7CisgICAgICAgIHJldHVybiBmZWF0dXJlczsKKyAgICB9CisKKyAgICBzdGQ6OnN0
cmluZyBvcHRpb25zOworICAgIGdldGxpbmUoZmlsZSwgb3B0aW9ucyk7CisgICAgc3RkOjpzdHJp
bmcgYmVnaW5TdHJpbmcoIndlYmtpdC10ZXN0LXJ1bm5lciBbICIpOworICAgIHN0ZDo6c3RyaW5n
IGVuZFN0cmluZygiIF0iKTsKKyAgICBzaXplX3QgYmVnaW5Mb2NhdGlvbiA9IG9wdGlvbnMuZmlu
ZChiZWdpblN0cmluZyk7CisgICAgaWYgKGJlZ2luTG9jYXRpb24gPT0gc3RkOjpzdHJpbmc6Om5w
b3MpCisgICAgICAgIHJldHVybiBmZWF0dXJlczsKKyAgICBzaXplX3QgZW5kTG9jYXRpb24gPSBv
cHRpb25zLmZpbmQoZW5kU3RyaW5nLCBiZWdpbkxvY2F0aW9uKTsKKyAgICBpZiAoZW5kTG9jYXRp
b24gPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3Qg
ZmluZCBlbmQgb2YgdGVzdCBoZWFkZXIgaW4gJXMiLCBwYXRoLmNfc3RyKCkpOworICAgICAgICBy
ZXR1cm4gZmVhdHVyZXM7CisgICAgfQorICAgIHN0ZDo6c3RyaW5nIHBhaXJTdHJpbmcgPSBvcHRp
b25zLnN1YnN0cihiZWdpbkxvY2F0aW9uICsgYmVnaW5TdHJpbmcuc2l6ZSgpLCBlbmRMb2NhdGlv
biAtIChiZWdpbkxvY2F0aW9uICsgYmVnaW5TdHJpbmcuc2l6ZSgpKSk7CisgICAgc2l6ZV90IHBh
aXJTdGFydCA9IDA7CisgICAgd2hpbGUgKHBhaXJTdGFydCA8IHBhaXJTdHJpbmcuc2l6ZSgpKSB7
CisgICAgICAgIHNpemVfdCBwYWlyRW5kID0gcGFpclN0cmluZy5maW5kKCIgIiwgcGFpclN0YXJ0
KTsKKyAgICAgICAgaWYgKHBhaXJFbmQgPT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAgICAgICAg
ICBwYWlyRW5kID0gcGFpclN0cmluZy5zaXplKCk7CisgICAgICAgIHNpemVfdCBlcXVhbHNMb2Nh
dGlvbiA9IHBhaXJTdHJpbmcuZmluZCgiPSIsIHBhaXJTdGFydCk7CisgICAgICAgIGlmIChlcXVh
bHNMb2NhdGlvbiA9PSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgICAgICAgTE9HX0VSUk9S
KCJNYWxmb3JtZWQgb3B0aW9uIGluIHRlc3QgaGVhZGVyIChjb3VsZCBub3QgZmluZCAnPScgY2hh
cmFjdGVyKSBpbiAlcyIsIHBhdGguY19zdHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBhdXRvIGtleSA9IHBhaXJTdHJpbmcuc3Vic3RyKHBhaXJTdGFydCwgZXF1
YWxzTG9jYXRpb24gLSBwYWlyU3RhcnQpOworICAgICAgICBhdXRvIHZhbHVlID0gcGFpclN0cmlu
Zy5zdWJzdHIoZXF1YWxzTG9jYXRpb24gKyAxLCBwYWlyRW5kIC0gKGVxdWFsc0xvY2F0aW9uICsg
MSkpOworCisgICAgICAgIGlmIChrZXkucmZpbmQoImV4cGVyaW1lbnRhbDoiKSA9PSAwKSB7Cisg
ICAgICAgICAgICBrZXkgPSBrZXkuc3Vic3RyKDEzKTsKKyAgICAgICAgICAgIGZlYXR1cmVzLmV4
cGVyaW1lbnRhbEZlYXR1cmVzLmluc2VydCh7IGtleSwgcGFyc2VCb29sZWFuVGVzdEhlYWRlclZh
bHVlKHZhbHVlKSB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChrZXkucmZpbmQoImludGVybmFsOiIp
ID09IDApIHsKKyAgICAgICAgICAgIGtleSA9IGtleS5zdWJzdHIoOSk7CisgICAgICAgICAgICBm
ZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBwYXJzZUJvb2xlYW5U
ZXN0SGVhZGVyVmFsdWUodmFsdWUpIH0pOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChr
ZXlUeXBlKGtleSkpIHsKKyAgICAgICAgY2FzZSBLZXlUeXBlOjpCb29sOgorICAgICAgICAgICAg
ZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7IGtleSwgcGFyc2VCb29sZWFuVGVzdEhlYWRl
clZhbHVlKHZhbHVlKSB9KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEtleVR5
cGU6OkRvdWJsZToKKyAgICAgICAgICAgIGZlYXR1cmVzLmRvdWJsZUZlYXR1cmVzLmluc2VydCh7
IGtleSwgc3RkOjpzdG9kKHZhbHVlKSB9KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEtleVR5cGU6OlN0cmluZzoKKyAgICAgICAgICAgIGZlYXR1cmVzLnN0cmluZ0ZlYXR1cmVz
Lmluc2VydCh7IGtleSwgdmFsdWUgfSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBLZXlUeXBlOjpTdHJpbmdSZWxhdGl2ZVBhdGg6CisgICAgICAgICAgICBmZWF0dXJlcy5zdHJp
bmdGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNSZWxh
dGl2ZVBhdGgodmFsdWUsIHBhdGhPclVSTCkgfSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBLZXlUeXBlOjpTdHJpbmdVUkw6CisgICAgICAgICAgICBmZWF0dXJlcy5zdHJpbmdG
ZWF0dXJlcy5pbnNlcnQoeyBrZXksIHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNVUkwodmFs
dWUpIH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5n
VmVjdG9yOgorICAgICAgICAgICAgZmVhdHVyZXMuc3RyaW5nVmVjdG9yRmVhdHVyZXMuaW5zZXJ0
KHsga2V5LCBzcGxpdCh2YWx1ZSwgJywnKSB9KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEtleVR5cGU6OlVua25vd246CisgICAgICAgICAgICBMT0dfRVJST1IoIlVua25vd24g
a2V5LCAnJXMsIGluIHRlc3QgaGVhZGVyIGluICVzIiwga2V5LmNfc3RyKCksIHBhdGguY19zdHIo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHBhaXJTdGFydCA9
IHBhaXJFbmQgKyAxOworICAgIH0KKworICAgIHJldHVybiBmZWF0dXJlczsKK30KKworc3RhdGlj
IGJvb2wgcGF0aENvbnRhaW5zKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwsIGNvbnN0IGNo
YXIqIHN1YnN0cmluZykKK3sKKyAgICBTdHJpbmcgcGF0aChwYXRoT3JVUkwuY19zdHIoKSk7Cisg
ICAgcmV0dXJuIHBhdGguY29udGFpbnMoc3Vic3RyaW5nKTsgLy8gQ2FzZS1pbnNlbnNpdGl2ZS4K
IH0KIAotc3RhdGljIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yRm9yVGVzdChjb25zdCBzdGQ6OnN0
cmluZyYgcGF0aE9yVVJMKQorc3RhdGljIE9wdGlvbmFsPGRvdWJsZT4gZGV2aWNlU2NhbGVGYWN0
b3JGb3JUZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCiB7CiAgICAgaWYgKHBhdGhD
b250YWlucyhwYXRoT3JVUkwsICIvaGlkcGktM3gtIikpCiAgICAgICAgIHJldHVybiAzOwogICAg
IGlmIChwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAiL2hpZHBpLSIpKQogICAgICAgICByZXR1cm4g
MjsKLSAgICByZXR1cm4gMTsKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiBzdGF0aWMg
Ym9vbCBzaG91bGREdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIoY29uc3Qgc3RkOjpzdHJpbmcmIHBh
dGhPclVSTCkKQEAgLTgzLDE0ICsyOTAsNzkgQEAgc3RhdGljIGJvb2wgc2hvdWxkRHVtcEpTQ29u
c29sZUxvZ0luU3RkRQogICAgICAgICB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxo
b3N0Ojg4MDAvd2Vic29ja2V0cyIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhv
c3Q6OTQ0My93ZWJzb2NrZXRzIik7CiB9CiAKLVRlc3RPcHRpb25zOjpUZXN0T3B0aW9ucyhjb25z
dCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQotICAgIDogdXNlRmxleGlibGVWaWV3cG9ydChzaG91
bGRNYWtlVmlld3BvcnRGbGV4aWJsZShwYXRoT3JVUkwpKQotICAgICwgdXNlRml4ZWRMYXlvdXQo
c2hvdWxkVXNlRml4ZWRMYXlvdXQocGF0aE9yVVJMKSkKLSAgICAsIGlzU1ZHVGVzdChpc1NWR1Rl
c3RQYXRoKHBhdGhPclVSTCkpCi0gICAgLCB1c2VFcGhlbWVyYWxTZXNzaW9uKHNob3VsZFVzZUVw
aGVtZXJhbFNlc3Npb24ocGF0aE9yVVJMKSkKLSAgICAsIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVy
cihzaG91bGREdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIocGF0aE9yVVJMKSkKLSAgICAsIGRldmlj
ZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yRm9yVGVzdChwYXRoT3JVUkwpKQorVGVzdEZl
YXR1cmVzIGhhcmRjb2RlZEZlYXR1cmVzQmFzZWRPblBhdGhGb3JUZXN0KGNvbnN0IFRlc3RDb21t
YW5kJiBjb21tYW5kKQoreworICAgIFRlc3RGZWF0dXJlcyBmZWF0dXJlczsKKworICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgdHJ5IHRvIHJlcGxhY2UgdGhlIHJlc2V0IG9mIHRoZXNlIHdpdGggVGVz
dE9wdGlvbnMudHh0IGJhc2VkIHNvbHV0aW9ucy4KKworICAgIGlmIChzaG91bGREdW1wSlNDb25z
b2xlTG9nSW5TdGRFcnIoY29tbWFuZC5wYXRoT3JVUkwpKQorICAgICAgICBmZWF0dXJlcy5ib29s
RmVhdHVyZXMuaW5zZXJ0KHsgImR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIsIHRydWUgfSk7Cisg
ICAgaWYgKGF1dG8gZGV2aWNlU2NhbGVGYWN0b3IgPSBkZXZpY2VTY2FsZUZhY3RvckZvclRlc3Qo
Y29tbWFuZC5wYXRoT3JVUkwpOyBkZXZpY2VTY2FsZUZhY3RvciAhPSBXVEY6Om51bGxvcHQpCisg
ICAgICAgIGZlYXR1cmVzLmRvdWJsZUZlYXR1cmVzLmluc2VydCh7ICJkZXZpY2VTY2FsZUZhY3Rv
ciIsIGRldmljZVNjYWxlRmFjdG9yLnZhbHVlKCkgfSk7CisKKyAgICByZXR1cm4gZmVhdHVyZXM7
Cit9CisKK3ZvaWQgbWVyZ2UoVGVzdEZlYXR1cmVzJiBiYXNlLCBUZXN0RmVhdHVyZXMgYWRkaXRp
b25hbCkKK3sKKy8vICAgIGFkZGl0aW9uYWwuZXhwZXJpbWVudGFsRmVhdHVyZXMubWVyZ2UoYmFz
ZS5leHBlcmltZW50YWxGZWF0dXJlcyk7CisvLyAgICBhZGRpdGlvbmFsLmludGVybmFsRGVidWdG
ZWF0dXJlcy5tZXJnZShiYXNlLmludGVybmFsRGVidWdGZWF0dXJlcyk7CisvLyAgICBhZGRpdGlv
bmFsLmJvb2xGZWF0dXJlcy5tZXJnZShiYXNlLmJvb2xGZWF0dXJlcyk7CisvLyAgICBhZGRpdGlv
bmFsLmRvdWJsZUZlYXR1cmVzLm1lcmdlKGJhc2UuZG91YmxlRmVhdHVyZXMpOworLy8gICAgYWRk
aXRpb25hbC5zdHJpbmdGZWF0dXJlcy5tZXJnZShiYXNlLnN0cmluZ0ZlYXR1cmVzKTsKKy8vICAg
IGFkZGl0aW9uYWwuc3RyaW5nVmVjdG9yRmVhdHVyZXMubWVyZ2UoYmFzZS5zdHJpbmdWZWN0b3JG
ZWF0dXJlcyk7CisvLyAgICBiYXNlID0gYWRkaXRpb25hbDsKKworICAgIGZvciAoYXV0byBba2V5
LCB2YWx1ZV0gOiBhZGRpdGlvbmFsLmV4cGVyaW1lbnRhbEZlYXR1cmVzKQorICAgICAgICBiYXNl
LmV4cGVyaW1lbnRhbEZlYXR1cmVzLmluc2VydF9vcl9hc3NpZ24oa2V5LCB2YWx1ZSk7CisgICAg
Zm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGFkZGl0aW9uYWwuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVz
KQorICAgICAgICBiYXNlLmludGVybmFsRGVidWdGZWF0dXJlcy5pbnNlcnRfb3JfYXNzaWduKGtl
eSwgdmFsdWUpOworICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBhZGRpdGlvbmFsLmJvb2xG
ZWF0dXJlcykKKyAgICAgICAgYmFzZS5ib29sRmVhdHVyZXMuaW5zZXJ0X29yX2Fzc2lnbihrZXks
IHZhbHVlKTsKKyAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogYWRkaXRpb25hbC5kb3VibGVG
ZWF0dXJlcykKKyAgICAgICAgYmFzZS5kb3VibGVGZWF0dXJlcy5pbnNlcnRfb3JfYXNzaWduKGtl
eSwgdmFsdWUpOworICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBhZGRpdGlvbmFsLnN0cmlu
Z0ZlYXR1cmVzKQorICAgICAgICBiYXNlLnN0cmluZ0ZlYXR1cmVzLmluc2VydF9vcl9hc3NpZ24o
a2V5LCB2YWx1ZSk7CisgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGFkZGl0aW9uYWwuc3Ry
aW5nVmVjdG9yRmVhdHVyZXMpCisgICAgICAgIGJhc2Uuc3RyaW5nVmVjdG9yRmVhdHVyZXMuaW5z
ZXJ0X29yX2Fzc2lnbihrZXksIHZhbHVlKTsKK30KKworVGVzdEZlYXR1cmVzIGZlYXR1cmVEZWZh
dWx0c0Zyb21UZXN0T3B0aW9uc0ZpbGVzRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYgY29tbWFu
ZCkKK3sKKyAgICBzdGQ6OmZpbGVzeXN0ZW06OnBhdGggcGF0aCA9IGNvbW1hbmQuYWJzb2x1dGVQ
YXRoOworCisgICAgLy8gR2F0aGVyIGRpcmVjdG9yaWVzIHRoYXQgbWF5IGNvbnRhaW4gVGVzdEhl
YWRlcnMgZmlsZXMuCisgICAgc3RkOjp2ZWN0b3I8c3RkOjpmaWxlc3lzdGVtOjpwYXRoPiBkaXJl
Y3Rvcmllc1RvQ2hlY2s7CisgICAgZG8geworICAgICAgICBwYXRoID0gcGF0aC5wYXJlbnRfcGF0
aCgpOworICAgICAgICBkaXJlY3Rvcmllc1RvQ2hlY2sucHVzaF9iYWNrKHBhdGgpOworICAgIH0g
d2hpbGUgKHBhdGguZmlsZW5hbWUoKSAhPSAiTGF5b3V0VGVzdHMiKTsKKworICAgIC8vIEl0ZXJh
dGUgdGhlIGRpcmVjdG9yaWVzIHRoYXQgbWF5IGNvbnRhaW4gJ1Rlc3RPcHRpb25zLnR4dCcgZmls
ZXMgZnJvbSBsZWFzdCB0byBtb3N0CisgICAgLy8gc3BlY2lmaWMsIGFuZCBtZXJnZSBpbiBhbnkg
ZmVhdHVyZXMgZm91bmQuCisgICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVzOworICAgIGZvciAoYXV0
byBkaXJlY3RvcnlUb0NoZWNrIDogV1RGOjptYWtlUmV2ZXJzZWRSYW5nZShkaXJlY3Rvcmllc1Rv
Q2hlY2spKSB7CisgICAgICAgIGF1dG8gdGVzdEhlYWRlckZpbGUgPSBkaXJlY3RvcnlUb0NoZWNr
IC8gIlRlc3RPcHRpb25zLnR4dCI7CisgICAgICAgIGF1dG8gdGVzdE9wdGlvbnNGZWF0dXJlcyA9
IHBhcnNlVGVzdEhlYWRlcih0ZXN0SGVhZGVyRmlsZSwgY29tbWFuZC5wYXRoT3JVUkwpOworICAg
ICAgICBtZXJnZShmZWF0dXJlcywgdGVzdE9wdGlvbnNGZWF0dXJlcyk7CisgICAgfQorICAgIAor
ICAgIHJldHVybiBmZWF0dXJlczsKK30KKworVGVzdEZlYXR1cmVzIGZlYXR1cmVEZWZhdWx0c0Zy
b21UZXN0SGVhZGVyRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYgY29tbWFuZCkKIHsKKyAgICBy
ZXR1cm4gcGFyc2VUZXN0SGVhZGVyKGNvbW1hbmQuYWJzb2x1dGVQYXRoLCBjb21tYW5kLnBhdGhP
clVSTCk7Cit9CisKK1Rlc3RPcHRpb25zOjpUZXN0T3B0aW9ucyhUZXN0RmVhdHVyZXMgZmVhdHVy
ZXMpCisgICAgOiBtX2ZlYXR1cmVzIHsgZmVhdHVyZXMgfQoreworI2lmIERVTVBfRkVBVFVSRVMK
KyAgICBzdGQ6OmNlcnIgPDwgIkRVTVBJTkcgRkVBVFVSRVNcbiI7CisgICAgZHVtcEZlYXR1cmVz
KG1fZmVhdHVyZXMpOworI2VuZGlmCiB9CiAKIH0KSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvVGVzdE9wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RPcHRpb25zLmgJKHJldmlzaW9uIDI2Nzk0OCkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
VGVzdE9wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTY1ICsyNSwxNzcgQEAKIAogI3By
YWdtYSBvbmNlCiAKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8b3B0aW9uYWw+CisjaW5jbHVkZSA8c3RyaW5nPgor
I2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisjaW5jbHVkZSA8dmVjdG9yPgogCiBuYW1lc3BhY2Ug
V1RSIHsKIAotc3RydWN0IFRlc3RPcHRpb25zIHsKLSAgICBzdHJ1Y3QgQ29udGV4dE9wdGlvbnMg
ewotICAgICAgICBWZWN0b3I8U3RyaW5nPiBvdmVycmlkZUxhbmd1YWdlczsKLSAgICAgICAgYm9v
bCBpZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzIHsgZmFsc2UgfTsKLSAgICAgICAg
Ym9vbCBlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbiB7IHRydWUgfTsKLSAgICAgICAgYm9v
bCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiB7IGZhbHNlIH07Ci0gICAgICAgIGJvb2wg
dXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dCB7IGZhbHNlIH07Ci0KLSAgICAgICAgYm9vbCBo
YXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25zKGNvbnN0IENvbnRleHRPcHRpb25zJiBvcHRpb25z
KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaWdub3JlU3luY2hyb25vdXNNZXNz
YWdpbmdUaW1lb3V0cyAhPSBvcHRpb25zLmlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91
dHMKLSAgICAgICAgICAgICAgICB8fCBvdmVycmlkZUxhbmd1YWdlcyAhPSBvcHRpb25zLm92ZXJy
aWRlTGFuZ3VhZ2VzCi0gICAgICAgICAgICAgICAgfHwgZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmln
YXRpb24gIT0gb3B0aW9ucy5lbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbgotICAgICAgICAg
ICAgICAgIHx8IGVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuICE9IG9wdGlvbnMuZW5hYmxl
UHJvY2Vzc1N3YXBPbldpbmRvd09wZW4KLSAgICAgICAgICAgICAgICB8fCB1c2VTZXJ2aWNlV29y
a2VyU2hvcnRUaW1lb3V0ICE9IG9wdGlvbnMudXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dCkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgc2hvdWxkRW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmln
YXRpb24oKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZW5hYmxlUHJvY2Vz
c1N3YXBPbk5hdmlnYXRpb24gfHwgZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW47Ci0gICAg
ICAgIH0KLSAgICB9OwotCi0gICAgYm9vbCB1c2VUaHJlYWRlZFNjcm9sbGluZyB7IGZhbHNlIH07
Ci0gICAgYm9vbCB1c2VBY2NlbGVyYXRlZERyYXdpbmcgeyBmYWxzZSB9OwotICAgIGJvb2wgdXNl
UmVtb3RlTGF5ZXJUcmVlIHsgZmFsc2UgfTsKLSAgICBib29sIHNob3VsZFNob3dXZWJWaWV3IHsg
ZmFsc2UgfTsKLSAgICBib29sIHVzZUZsZXhpYmxlVmlld3BvcnQgeyBmYWxzZSB9OwotICAgIGJv
b2wgdXNlRml4ZWRMYXlvdXQgeyBmYWxzZSB9OwotICAgIGJvb2wgaXNTVkdUZXN0IHsgZmFsc2Ug
fTsKLSAgICBib29sIHVzZURhdGFEZXRlY3Rpb24geyBmYWxzZSB9OwotICAgIGJvb2wgdXNlTW9j
a1Njcm9sbGJhcnMgeyB0cnVlIH07Ci0gICAgYm9vbCBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyB7
IGZhbHNlIH07Ci0gICAgYm9vbCBpZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyB7IGZhbHNlIH07
Ci0gICAgYm9vbCB1c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0eSB7IGZhbHNlIH07Ci0g
ICAgYm9vbCBlbmFibGVBdHRhY2htZW50RWxlbWVudCB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFi
bGVJbnRlcnNlY3Rpb25PYnNlcnZlciB7IGZhbHNlIH07Ci0gICAgYm9vbCB1c2VFcGhlbWVyYWxT
ZXNzaW9uIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZU1lbnVJdGVtRWxlbWVudCB7IGZhbHNl
IH07Ci0gICAgYm9vbCBlbmFibGVLZXlnZW5FbGVtZW50IHsgZmFsc2UgfTsKLSAgICBib29sIGVu
YWJsZU1vZGVybk1lZGlhQ29udHJvbHMgeyB0cnVlIH07Ci0gICAgYm9vbCBlbmFibGVQb2ludGVy
TG9jayB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVXZWJBdXRoZW50aWNhdGlvbiB7IHRydWUg
fTsKLSAgICBib29sIGVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yIHsg
dHJ1ZSB9OwotICAgIGJvb2wgZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zIHsgZmFsc2UgfTsKLSAg
ICBib29sIHNob3VsZFNob3dUb3VjaGVzIHsgZmFsc2UgfTsKLSAgICBib29sIGR1bXBKU0NvbnNv
bGVMb2dJblN0ZEVyciB7IGZhbHNlIH07Ci0gICAgYm9vbCBhbGxvd0Nyb3NzT3JpZ2luU3VicmVz
b3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyB7IGZhbHNlIH07Ci0gICAgYm9vbCBkb21QYXN0ZUFs
bG93ZWQgeyB0cnVlIH07Ci0gICAgYm9vbCBlbmFibGVDb2xvckZpbHRlciB7IGZhbHNlIH07Ci0g
ICAgYm9vbCBwdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlIHsgZmFsc2UgfTsKLSAg
ICBib29sIHJ1blNpbmdseSB7IGZhbHNlIH07Ci0gICAgYm9vbCBjaGVja0ZvcldvcmxkTGVha3Mg
eyBmYWxzZSB9OwotICAgIGJvb2wgc2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0IHsgZmFsc2UgfTsK
LSAgICBib29sIHNob3VsZFNob3dTcGVsbENoZWNraW5nRG90cyB7IGZhbHNlIH07Ci0gICAgYm9v
bCBlbmFibGVTZXJ2aWNlQ29udHJvbHMgeyBmYWxzZSB9OwotICAgIGJvb2wgZWRpdGFibGUgeyBm
YWxzZSB9OwotICAgIGJvb2wgc2hvdWxkSGFuZGxlUnVuT3BlblBhbmVsIHsgdHJ1ZSB9OwotICAg
IGJvb2wgc2hvdWxkUHJlc2VudFBvcG92ZXJzIHsgdHJ1ZSB9OwotICAgIGJvb2wgZW5hYmxlQXBw
TmFwIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUgeyBmYWxzZSB9
OwotICAgIGJvb2wgYWxsb3dzTGlua1ByZXZpZXcgeyB0cnVlIH07Ci0gICAgYm9vbCBlbmFibGVD
YXB0dXJlVmlkZW9JblVJUHJvY2VzcyB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVDYXB0dXJl
VmlkZW9JbkdQVVByb2Nlc3MgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlQ2FwdHVyZUF1ZGlv
SW5VSVByb2Nlc3MgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlQ2FwdHVyZUF1ZGlvSW5HUFVQ
cm9jZXNzIHsgZmFsc2UgfTsKLSAgICBib29sIGFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMg
eyB0cnVlIH07Ci0gICAgYm9vbCBlbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5IHsgZmFsc2UgfTsK
LSAgICBib29sIGlzQXBwQm91bmRXZWJWaWV3IHsgZmFsc2UgfTsKLQotICAgIGRvdWJsZSBjb250
ZW50SW5zZXRUb3AgeyAwIH07Ci0KLSAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciB7IDEgfTsK
LSAgICBzdGQ6OnN0cmluZyBhcHBsaWNhdGlvbk1hbmlmZXN0OwotICAgIHN0ZDo6c3RyaW5nIGpz
Y09wdGlvbnM7Ci0gICAgc3RkOjpzdHJpbmcgYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXM7
Ci0gICAgc3RkOjpzdHJpbmcgc3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMOwotICAgIEhhc2hN
YXA8U3RyaW5nLCBib29sPiBleHBlcmltZW50YWxGZWF0dXJlczsKLSAgICBIYXNoTWFwPFN0cmlu
ZywgYm9vbD4gaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzOwotICAgIFN0cmluZyBjb250ZW50TW9kZTsK
LSAgICBTdHJpbmcgYXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyOwotICAgIAotICAgIENvbnRl
eHRPcHRpb25zIGNvbnRleHRPcHRpb25zOwotCi0gICAgVGVzdE9wdGlvbnMoY29uc3Qgc3RkOjpz
dHJpbmcmIHBhdGhPclVSTCk7Ci0KLSAgICAvLyBBZGQgaGVyZSBvcHRpb25zIHRoYXQgY2FuIG9u
bHkgYmUgc2V0IHVwb24gUGxhdGZvcm1XZWJWaWV3Ci0gICAgLy8gaW5pdGlhbGl6YXRpb24gYW5k
IG1ha2Ugc3VyZSBpdCdzIHVwIHRvIGRhdGUgd2hlbiBhZGRpbmcgbmV3Ci0gICAgLy8gb3B0aW9u
cyB0byB0aGlzIHN0cnVjdC4gT3RoZXJ3aXNlLCB0ZXN0cyB1c2luZyB0aG9zZSBvcHRpb25zCi0g
ICAgLy8gbWlnaHQgZmFpbCBpZiBXVFIgaXMgcmV1c2luZyBhbiBleGlzdGluZyBQbGF0Zm9ybVdl
YlZpZXcuCi0gICAgYm9vbCBoYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25zKGNvbnN0IFRlc3RP
cHRpb25zJiBvcHRpb25zKSBjb25zdAorc3RydWN0IFRlc3RDb21tYW5kOworCitzdHJ1Y3QgVGVz
dEZlYXR1cmVzIHsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIGJvb2w+IGV4
cGVyaW1lbnRhbEZlYXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywg
Ym9vbD4gaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6
OnN0cmluZywgYm9vbD4gYm9vbEZlYXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6
OnN0cmluZywgZG91YmxlPiBkb3VibGVGZWF0dXJlczsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8
c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBzdHJpbmdGZWF0dXJlczsKKyAgICBzdGQ6OnVub3Jk
ZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPj4gc3RyaW5nVmVj
dG9yRmVhdHVyZXM7Cit9OworCit2b2lkIG1lcmdlKFRlc3RGZWF0dXJlcyYgYmFzZSwgVGVzdEZl
YXR1cmVzIGFkZGl0aW9uYWwpOworCitUZXN0RmVhdHVyZXMgaGFyZGNvZGVkRmVhdHVyZXNCYXNl
ZE9uUGF0aEZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKTsKK1Rlc3RGZWF0dXJlcyBmZWF0dXJl
RGVmYXVsdHNGcm9tVGVzdE9wdGlvbnNGaWxlc0ZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKTsK
K1Rlc3RGZWF0dXJlcyBmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3QoY29uc3Qg
VGVzdENvbW1hbmQmKTsKKworc3RydWN0IENvbnRleHRPcHRpb25zIHsKKyAgICBzdGQ6OnZlY3Rv
cjxzdGQ6OnN0cmluZz4gb3ZlcnJpZGVMYW5ndWFnZXM7CisgICAgYm9vbCBpZ25vcmVTeW5jaHJv
bm91c01lc3NhZ2luZ1RpbWVvdXRzOworICAgIGJvb2wgZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmln
YXRpb247CisgICAgYm9vbCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbjsKKyAgICBib29s
IHVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQ7CisKKyAgICBib29sIGhhc1NhbWVJbml0aWFs
aXphdGlvbk9wdGlvbnMoY29uc3QgQ29udGV4dE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0CiAgICAg
ewotICAgICAgICBpZiAodXNlVGhyZWFkZWRTY3JvbGxpbmcgIT0gb3B0aW9ucy51c2VUaHJlYWRl
ZFNjcm9sbGluZwotICAgICAgICAgICAgfHwgdXNlQWNjZWxlcmF0ZWREcmF3aW5nICE9IG9wdGlv
bnMudXNlQWNjZWxlcmF0ZWREcmF3aW5nCi0gICAgICAgICAgICB8fCB1c2VNb2NrU2Nyb2xsYmFy
cyAhPSBvcHRpb25zLnVzZU1vY2tTY3JvbGxiYXJzCi0gICAgICAgICAgICB8fCBuZWVkc1NpdGVT
cGVjaWZpY1F1aXJrcyAhPSBvcHRpb25zLm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzCi0gICAgICAg
ICAgICB8fCB1c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0eSAhPSBvcHRpb25zLnVzZUNo
YXJhY3RlclNlbGVjdGlvbkdyYW51bGFyaXR5Ci0gICAgICAgICAgICB8fCBlbmFibGVBdHRhY2ht
ZW50RWxlbWVudCAhPSBvcHRpb25zLmVuYWJsZUF0dGFjaG1lbnRFbGVtZW50Ci0gICAgICAgICAg
ICB8fCBlbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciAhPSBvcHRpb25zLmVuYWJsZUludGVyc2Vj
dGlvbk9ic2VydmVyCi0gICAgICAgICAgICB8fCB1c2VFcGhlbWVyYWxTZXNzaW9uICE9IG9wdGlv
bnMudXNlRXBoZW1lcmFsU2Vzc2lvbgotICAgICAgICAgICAgfHwgZW5hYmxlTWVudUl0ZW1FbGVt
ZW50ICE9IG9wdGlvbnMuZW5hYmxlTWVudUl0ZW1FbGVtZW50Ci0gICAgICAgICAgICB8fCBlbmFi
bGVLZXlnZW5FbGVtZW50ICE9IG9wdGlvbnMuZW5hYmxlS2V5Z2VuRWxlbWVudAotICAgICAgICAg
ICAgfHwgZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyAhPSBvcHRpb25zLmVuYWJsZU1vZGVybk1l
ZGlhQ29udHJvbHMKLSAgICAgICAgICAgIHx8IGVuYWJsZVBvaW50ZXJMb2NrICE9IG9wdGlvbnMu
ZW5hYmxlUG9pbnRlckxvY2sKLSAgICAgICAgICAgIHx8IGVuYWJsZVdlYkF1dGhlbnRpY2F0aW9u
ICE9IG9wdGlvbnMuZW5hYmxlV2ViQXV0aGVudGljYXRpb24KLSAgICAgICAgICAgIHx8IGVuYWJs
ZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yICE9IG9wdGlvbnMuZW5hYmxlV2Vi
QXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IKLSAgICAgICAgICAgIHx8IGVuYWJsZUlu
c3BlY3RvckFkZGl0aW9ucyAhPSBvcHRpb25zLmVuYWJsZUluc3BlY3RvckFkZGl0aW9ucwotICAg
ICAgICAgICAgfHwgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyICE9IG9wdGlvbnMuZHVtcEpTQ29u
c29sZUxvZ0luU3RkRXJyCi0gICAgICAgICAgICB8fCBhcHBsaWNhdGlvbk1hbmlmZXN0ICE9IG9w
dGlvbnMuYXBwbGljYXRpb25NYW5pZmVzdAotICAgICAgICAgICAgfHwgYWxsb3dDcm9zc09yaWdp
blN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMgIT0gb3B0aW9ucy5hbGxvd0Nyb3NzT3Jp
Z2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscwotICAgICAgICAgICAgfHwgZG9tUGFz
dGVBbGxvd2VkICE9IG9wdGlvbnMuZG9tUGFzdGVBbGxvd2VkCi0gICAgICAgICAgICB8fCBlbmFi
bGVDb2xvckZpbHRlciAhPSBvcHRpb25zLmVuYWJsZUNvbG9yRmlsdGVyCi0gICAgICAgICAgICB8
fCBwdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlICE9IG9wdGlvbnMucHVuY2hPdXRX
aGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZQotICAgICAgICAgICAgfHwganNjT3B0aW9ucyAhPSBv
cHRpb25zLmpzY09wdGlvbnMKLSAgICAgICAgICAgIHx8IGFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFn
ZVR5cGVzICE9IG9wdGlvbnMuYWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXMKLSAgICAgICAg
ICAgIHx8IHJ1blNpbmdseSAhPSBvcHRpb25zLnJ1blNpbmdseQotICAgICAgICAgICAgfHwgY2hl
Y2tGb3JXb3JsZExlYWtzICE9IG9wdGlvbnMuY2hlY2tGb3JXb3JsZExlYWtzCi0gICAgICAgICAg
ICB8fCBzaG91bGRTaG93U3BlbGxDaGVja2luZ0RvdHMgIT0gb3B0aW9ucy5zaG91bGRTaG93U3Bl
bGxDaGVja2luZ0RvdHMKLSAgICAgICAgICAgIHx8IGVuYWJsZVNlcnZpY2VDb250cm9scyAhPSBv
cHRpb25zLmVuYWJsZVNlcnZpY2VDb250cm9scwotICAgICAgICAgICAgfHwgc2hvdWxkSWdub3Jl
TWV0YVZpZXdwb3J0ICE9IG9wdGlvbnMuc2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0Ci0gICAgICAg
ICAgICB8fCBlZGl0YWJsZSAhPSBvcHRpb25zLmVkaXRhYmxlCi0gICAgICAgICAgICB8fCBzaG91
bGRIYW5kbGVSdW5PcGVuUGFuZWwgIT0gb3B0aW9ucy5zaG91bGRIYW5kbGVSdW5PcGVuUGFuZWwK
LSAgICAgICAgICAgIHx8IHNob3VsZFByZXNlbnRQb3BvdmVycyAhPSBvcHRpb25zLnNob3VsZFBy
ZXNlbnRQb3BvdmVycwotICAgICAgICAgICAgfHwgY29udGVudEluc2V0VG9wICE9IG9wdGlvbnMu
Y29udGVudEluc2V0VG9wCi0gICAgICAgICAgICB8fCBjb250ZW50TW9kZSAhPSBvcHRpb25zLmNv
bnRlbnRNb2RlCi0gICAgICAgICAgICB8fCBhcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIgIT0g
b3B0aW9ucy5hcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIKLSAgICAgICAgICAgIHx8IGVuYWJs
ZUFwcE5hcCAhPSBvcHRpb25zLmVuYWJsZUFwcE5hcAotICAgICAgICAgICAgfHwgZW5hYmxlQmFj
a0ZvcndhcmRDYWNoZSAhPSBvcHRpb25zLmVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUKLSAgICAgICAg
ICAgIHx8IGFsbG93c0xpbmtQcmV2aWV3ICE9IG9wdGlvbnMuYWxsb3dzTGlua1ByZXZpZXcKLSAg
ICAgICAgICAgIHx8IGVuYWJsZUNhcHR1cmVWaWRlb0luVUlQcm9jZXNzICE9IG9wdGlvbnMuZW5h
YmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MKLSAgICAgICAgICAgIHx8IGVuYWJsZUNhcHR1cmVW
aWRlb0luR1BVUHJvY2VzcyAhPSBvcHRpb25zLmVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2Vz
cwotICAgICAgICAgICAgfHwgZW5hYmxlQ2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3MgIT0gb3B0aW9u
cy5lbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcwotICAgICAgICAgICAgfHwgZW5hYmxlQ2Fw
dHVyZUF1ZGlvSW5HUFVQcm9jZXNzICE9IG9wdGlvbnMuZW5hYmxlQ2FwdHVyZUF1ZGlvSW5HUFVQ
cm9jZXNzCi0gICAgICAgICAgICB8fCBhbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzICE9IG9w
dGlvbnMuYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcwotICAgICAgICAgICAgfHwgZW5hYmxl
SW5BcHBCcm93c2VyUHJpdmFjeSAhPSBvcHRpb25zLmVuYWJsZUluQXBwQnJvd3NlclByaXZhY3kK
LSAgICAgICAgICAgIHx8IHN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTCAhPSBvcHRpb25zLnN0
YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTAotICAgICAgICAgICAgfHwgaXNBcHBCb3VuZFdlYlZp
ZXcgIT0gb3B0aW9ucy5pc0FwcEJvdW5kV2ViVmlldykKKyAgICAgICAgaWYgKGlnbm9yZVN5bmNo
cm9ub3VzTWVzc2FnaW5nVGltZW91dHMgIT0gb3B0aW9ucy5pZ25vcmVTeW5jaHJvbm91c01lc3Nh
Z2luZ1RpbWVvdXRzCisgICAgICAgICAgICB8fCBvdmVycmlkZUxhbmd1YWdlcyAhPSBvcHRpb25z
Lm92ZXJyaWRlTGFuZ3VhZ2VzCisgICAgICAgICAgICB8fCBlbmFibGVQcm9jZXNzU3dhcE9uTmF2
aWdhdGlvbiAhPSBvcHRpb25zLmVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uCisgICAgICAg
ICAgICB8fCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiAhPSBvcHRpb25zLmVuYWJsZVBy
b2Nlc3NTd2FwT25XaW5kb3dPcGVuCisgICAgICAgICAgICB8fCB1c2VTZXJ2aWNlV29ya2VyU2hv
cnRUaW1lb3V0ICE9IG9wdGlvbnMudXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dCkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCi0gICAg
ICAgIGlmICghY29udGV4dE9wdGlvbnMuaGFzU2FtZUluaXRpYWxpemF0aW9uT3B0aW9ucyhvcHRp
b25zLmNvbnRleHRPcHRpb25zKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBib29s
IHNob3VsZEVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbiB8fCBlbmFibGVQcm9jZXNz
U3dhcE9uV2luZG93T3BlbjsKKyAgICB9Cit9OwogCi0gICAgICAgIGlmIChleHBlcmltZW50YWxG
ZWF0dXJlcyAhPSBvcHRpb25zLmV4cGVyaW1lbnRhbEZlYXR1cmVzKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworY2xhc3MgVGVzdE9wdGlvbnMgeworcHVibGljOgorICAgIGV4cGxpY2l0IFRl
c3RPcHRpb25zKFRlc3RGZWF0dXJlcyk7CiAKLSAgICAgICAgaWYgKGludGVybmFsRGVidWdGZWF0
dXJlcyAhPSBvcHRpb25zLmludGVybmFsRGVidWdGZWF0dXJlcykKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBDb250ZXh0T3B0aW9ucyBjb250ZXh0T3B0aW9ucygpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgb3ZlcnJpZGVMYW5ndWFnZXMoKSwKKyAg
ICAgICAgICAgIGlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMoKSwKKyAgICAgICAg
ICAgIGVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uKCksCisgICAgICAgICAgICBlbmFibGVQ
cm9jZXNzU3dhcE9uV2luZG93T3BlbigpLAorICAgICAgICAgICAgdXNlU2VydmljZVdvcmtlclNo
b3J0VGltZW91dCgpCisgICAgICAgIH07CisgICAgfQorCisgICAgYm9vbCB1c2VUaHJlYWRlZFNj
cm9sbGluZygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInVzZVRocmVhZGVkU2Ny
b2xsaW5nIiwgZmFsc2UpOyB9CisgICAgYm9vbCB1c2VBY2NlbGVyYXRlZERyYXdpbmcoKSBjb25z
dCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJ1c2VBY2NlbGVyYXRlZERyYXdpbmciLCBmYWxz
ZSk7IH0KKyAgICBib29sIHVzZVJlbW90ZUxheWVyVHJlZSgpIGNvbnN0IHsgcmV0dXJuIGJvb2xG
ZWF0dXJlVmFsdWUoInVzZVJlbW90ZUxheWVyVHJlZSIsIGZhbHNlKTsgfQorICAgIGJvb2wgc2hv
dWxkU2hvd1dlYlZpZXcoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJzaG91bGRT
aG93V2ViVmlldyIsIGZhbHNlKTsgfQorICAgIGJvb2wgdXNlRmxleGlibGVWaWV3cG9ydCgpIGNv
bnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInVzZUZsZXhpYmxlVmlld3BvcnQiLCBmYWxz
ZSk7IH0KKyAgICBib29sIHVzZURhdGFEZXRlY3Rpb24oKSBjb25zdCB7IHJldHVybiBib29sRmVh
dHVyZVZhbHVlKCJ1c2VEYXRhRGV0ZWN0aW9uIiwgZmFsc2UpOyB9CisgICAgYm9vbCB1c2VNb2Nr
U2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInVzZU1vY2tTY3Jv
bGxiYXJzIiwgdHJ1ZSk7IH0KKyAgICBib29sIG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKCkgY29u
c3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgibmVlZHNTaXRlU3BlY2lmaWNRdWlya3MiLCBm
YWxzZSk7IH0KKyAgICBib29sIGlnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKCkgY29uc3QgeyBy
ZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMiLCBmYWxz
ZSk7IH0KKyAgICBib29sIHVzZUNoYXJhY3RlclNlbGVjdGlvbkdyYW51bGFyaXR5KCkgY29uc3Qg
eyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgidXNlQ2hhcmFjdGVyU2VsZWN0aW9uR3JhbnVsYXJp
dHkiLCBmYWxzZSk7IH0KKyAgICBib29sIGVuYWJsZUF0dGFjaG1lbnRFbGVtZW50KCkgY29uc3Qg
eyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlQXR0YWNobWVudEVsZW1lbnQiLCBmYWxz
ZSk7IH0KKyAgICBib29sIGVuYWJsZUludGVyc2VjdGlvbk9ic2VydmVyKCkgY29uc3QgeyByZXR1
cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCBmYWxzZSk7
IH0KKyAgICBib29sIHVzZUVwaGVtZXJhbFNlc3Npb24oKSBjb25zdCB7IHJldHVybiBib29sRmVh
dHVyZVZhbHVlKCJ1c2VFcGhlbWVyYWxTZXNzaW9uIiwgZmFsc2UpOyB9CisgICAgYm9vbCBlbmFi
bGVNZW51SXRlbUVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFi
bGVNZW51SXRlbUVsZW1lbnQiLCBmYWxzZSk7IH0KKyAgICBib29sIGVuYWJsZUtleWdlbkVsZW1l
bnQoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVLZXlnZW5FbGVtZW50
IiwgZmFsc2UpOyB9CisgICAgYm9vbCBlbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzKCkgY29uc3Qg
eyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyIsIHRy
dWUpOyB9CisgICAgYm9vbCBlbmFibGVQb2ludGVyTG9jaygpIGNvbnN0IHsgcmV0dXJuIGJvb2xG
ZWF0dXJlVmFsdWUoImVuYWJsZVBvaW50ZXJMb2NrIiwgZmFsc2UpOyB9CisgICAgYm9vbCBlbmFi
bGVXZWJBdXRoZW50aWNhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVu
YWJsZVdlYkF1dGhlbnRpY2F0aW9uIiwgdHJ1ZSk7IH0KKyAgICBib29sIGVuYWJsZVdlYkF1dGhl
bnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVW
YWx1ZSgiZW5hYmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IiLCB0cnVlKTsg
fQorICAgIGJvb2wgZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zKCkgY29uc3QgeyByZXR1cm4gYm9v
bEZlYXR1cmVWYWx1ZSgiZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zIiwgZmFsc2UpOyB9CisgICAg
Ym9vbCBzaG91bGRTaG93VG91Y2hlcygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUo
InNob3VsZFNob3dUb3VjaGVzIiwgZmFsc2UpOyB9CisgICAgYm9vbCBkdW1wSlNDb25zb2xlTG9n
SW5TdGRFcnIoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJkdW1wSlNDb25zb2xl
TG9nSW5TdGRFcnIiLCBmYWxzZSk7IH0KKyAgICBib29sIGFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNv
dXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1
ZSgiYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMiLCBmYWxz
ZSk7IH0KKyAgICBib29sIGRvbVBhc3RlQWxsb3dlZCgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0
dXJlVmFsdWUoImRvbVBhc3RlQWxsb3dlZCIsIHRydWUpOyB9CisgICAgYm9vbCBlbmFibGVDb2xv
ckZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZUNvbG9yRmls
dGVyIiwgZmFsc2UpOyB9CisgICAgYm9vbCBwdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtN
b2RlKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgicHVuY2hPdXRXaGl0ZUJhY2tn
cm91bmRzSW5EYXJrTW9kZSIsIGZhbHNlKTsgfQorICAgIGJvb2wgcnVuU2luZ2x5KCkgY29uc3Qg
eyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgicnVuU2luZ2x5IiwgZmFsc2UpOyB9CisgICAgYm9v
bCBjaGVja0ZvcldvcmxkTGVha3MoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJj
aGVja0ZvcldvcmxkTGVha3MiLCBmYWxzZSk7IH0KKyAgICBib29sIHNob3VsZElnbm9yZU1ldGFW
aWV3cG9ydCgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInNob3VsZElnbm9yZU1l
dGFWaWV3cG9ydCIsIGZhbHNlKTsgfQorICAgIGJvb2wgc2hvdWxkU2hvd1NwZWxsQ2hlY2tpbmdE
b3RzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgic3BlbGxDaGVja2luZ0RvdHMi
LCBmYWxzZSk7IH0KKyAgICBib29sIGVuYWJsZVNlcnZpY2VDb250cm9scygpIGNvbnN0IHsgcmV0
dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZVNlcnZpY2VDb250cm9scyIsIGZhbHNlKTsgfQor
ICAgIGJvb2wgZWRpdGFibGUoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlZGl0
YWJsZSIsIGZhbHNlKTsgfQorICAgIGJvb2wgc2hvdWxkSGFuZGxlUnVuT3BlblBhbmVsKCkgY29u
c3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgic2hvdWxkSGFuZGxlUnVuT3BlblBhbmVsIiwg
dHJ1ZSk7IH0KKyAgICBib29sIHNob3VsZFByZXNlbnRQb3BvdmVycygpIGNvbnN0IHsgcmV0dXJu
IGJvb2xGZWF0dXJlVmFsdWUoInNob3VsZFByZXNlbnRQb3BvdmVycyIsIHRydWUpOyB9CisgICAg
Ym9vbCBlbmFibGVBcHBOYXAoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFi
bGVBcHBOYXAiLCBmYWxzZSk7IH0KKyAgICBib29sIGVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUoKSBj
b25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVCYWNrRm9yd2FyZENhY2hlIiwg
ZmFsc2UpOyB9CisgICAgYm9vbCBhbGxvd3NMaW5rUHJldmlldygpIGNvbnN0IHsgcmV0dXJuIGJv
b2xGZWF0dXJlVmFsdWUoImFsbG93c0xpbmtQcmV2aWV3IiwgdHJ1ZSk7IH0KKyAgICBib29sIGVu
YWJsZUNhcHR1cmVWaWRlb0luVUlQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVW
YWx1ZSgiZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MiLCBmYWxzZSk7IH0KKyAgICBib29s
IGVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0
dXJlVmFsdWUoImVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2VzcyIsIGZhbHNlKTsgfQorICAg
IGJvb2wgZW5hYmxlQ2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3MoKSBjb25zdCB7IHJldHVybiBib29s
RmVhdHVyZVZhbHVlKCJlbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcyIsIGZhbHNlKTsgfQor
ICAgIGJvb2wgZW5hYmxlQ2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4g
Ym9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlQ2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzIiwgZmFsc2Up
OyB9CisgICAgYm9vbCBhbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzKCkgY29uc3QgeyByZXR1
cm4gYm9vbEZlYXR1cmVWYWx1ZSgiYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyIsIHRydWUp
OyB9CisgICAgYm9vbCBlbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5KCkgY29uc3QgeyByZXR1cm4g
Ym9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlSW5BcHBCcm93c2VyUHJpdmFjeSIsIGZhbHNlKTsgfQor
ICAgIGJvb2wgaXNBcHBCb3VuZFdlYlZpZXcoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZh
bHVlKCJpc0FwcEJvdW5kV2ViVmlldyIsIGZhbHNlKTsgfQorICAgIGJvb2wgaWdub3JlU3luY2hy
b25vdXNNZXNzYWdpbmdUaW1lb3V0cygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUo
Imlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMiLCBmYWxzZSk7IH0KKyAgICBib29s
IGVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1
cmVWYWx1ZSgiZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24iLCB0cnVlKTsgfQorICAgIGJv
b2wgZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW4oKSBjb25zdCB7IHJldHVybiBib29sRmVh
dHVyZVZhbHVlKCJlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiIsIGZhbHNlKTsgfQorICAg
IGJvb2wgdXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dCgpIGNvbnN0IHsgcmV0dXJuIGJvb2xG
ZWF0dXJlVmFsdWUoInVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQiLCBmYWxzZSk7IH0KKyAg
ICBkb3VibGUgY29udGVudEluc2V0VG9wKCkgY29uc3QgeyByZXR1cm4gZG91YmxlRmVhdHVyZVZh
bHVlKCJjb250ZW50SW5zZXQudG9wIiwgMCk7IH0KKyAgICBkb3VibGUgZGV2aWNlU2NhbGVGYWN0
b3IoKSBjb25zdCB7IHJldHVybiBkb3VibGVGZWF0dXJlVmFsdWUoImRldmljZVNjYWxlRmFjdG9y
IiwgMSk7IH0KKyAgICBkb3VibGUgdmlld1dpZHRoKCkgY29uc3QgeyByZXR1cm4gZG91YmxlRmVh
dHVyZVZhbHVlKCJ2aWV3V2lkdGgiLCA4MDApOyB9CisgICAgZG91YmxlIHZpZXdIZWlnaHQoKSBj
b25zdCB7IHJldHVybiBkb3VibGVGZWF0dXJlVmFsdWUoInZpZXdIZWlnaHQiLCA2MDApOyB9Cisg
ICAgc3RkOjpzdHJpbmcgYXBwbGljYXRpb25NYW5pZmVzdCgpIGNvbnN0IHsgcmV0dXJuIHN0cmlu
Z0ZlYXR1cmVWYWx1ZSgiYXBwbGljYXRpb25NYW5pZmVzdCIsIHsgfSk7IH0KKyAgICBzdGQ6OnN0
cmluZyBqc2NPcHRpb25zKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nRmVhdHVyZVZhbHVlKCJqc2NP
cHRpb25zIiwgeyB9KTsgfQorICAgIHN0ZDo6c3RyaW5nIGFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFn
ZVR5cGVzKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nRmVhdHVyZVZhbHVlKCJhZGRpdGlvbmFsU3Vw
cG9ydGVkSW1hZ2VUeXBlcyIsIHsgfSk7IH0KKyAgICBzdGQ6OnN0cmluZyBzdGFuZGFsb25lV2Vi
QXBwbGljYXRpb25VUkwoKSBjb25zdCB7IHJldHVybiBzdHJpbmdGZWF0dXJlVmFsdWUoInN0YW5k
YWxvbmVXZWJBcHBsaWNhdGlvblVSTCIsIHsgfSk7IH0KKyAgICBzdGQ6OnN0cmluZyBjb250ZW50
TW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0cmluZ0ZlYXR1cmVWYWx1ZSgiY29udGVudE1vZGUiLCB7
IH0pOyB9CisgICAgc3RkOjpzdHJpbmcgYXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKCkgY29u
c3QgeyByZXR1cm4gc3RyaW5nRmVhdHVyZVZhbHVlKCJhcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZp
ZXIiLCB7IH0pOyB9CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG92ZXJyaWRlTGFuZ3Vh
Z2VzKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nVmVjdG9yRmVhdHVyZVZhbHVlKCJsYW5ndWFnZSIs
IHsgfSk7IH0KKworICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9v
bD4mIGV4cGVyaW1lbnRhbEZlYXR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcy5leHBl
cmltZW50YWxGZWF0dXJlczsgfQorICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0
cmluZywgYm9vbD4mIGludGVybmFsRGVidWdGZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1fZmVh
dHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzOyB9CiAKKyAgICBib29sIGhhc1NhbWVJbml0aWFs
aXphdGlvbk9wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAobV9mZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlcyAhPSBvcHRpb25zLm1f
ZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGlmIChtX2ZlYXR1cmVzLmludGVybmFsRGVidWdGZWF0dXJlcyAhPSBvcHRpb25z
Lm1fZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBpZiAobV9mZWF0dXJlcy5ib29sRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2Zl
YXR1cmVzLmJvb2xGZWF0dXJlcykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
aWYgKG1fZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMgIT0gb3B0aW9ucy5tX2ZlYXR1cmVzLmRvdWJs
ZUZlYXR1cmVzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobV9mZWF0
dXJlcy5zdHJpbmdGZWF0dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX2ZlYXR1cmVzLnN0cmlu
Z1ZlY3RvckZlYXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJlcy5zdHJpbmdWZWN0b3JGZWF0dXJl
cykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQorCitwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgVCBmZWF0dXJlVmFs
dWUoc3RkOjpzdHJpbmcga2V5LCBUIGRlZmF1bHRWYWx1ZSwgY29uc3Qgc3RkOjp1bm9yZGVyZWRf
bWFwPHN0ZDo6c3RyaW5nLCBUPiYgbWFwKSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0byBpdCA9
IG1hcC5maW5kKGtleSk7CisgICAgICAgIGlmIChpdCAhPSBtYXAuZW5kKCkpCisgICAgICAgICAg
ICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKKyAgICB9
CisKKyAgICBib29sIGJvb2xGZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5LCBib29sIGRlZmF1
bHRWYWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmZWF0dXJlVmFsdWUoa2V5LCBk
ZWZhdWx0VmFsdWUsIG1fZmVhdHVyZXMuYm9vbEZlYXR1cmVzKTsKKyAgICB9CisgICAgZG91Ymxl
IGRvdWJsZUZlYXR1cmVWYWx1ZShzdGQ6OnN0cmluZyBrZXksIGRvdWJsZSBkZWZhdWx0VmFsdWUp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZmVhdHVyZVZhbHVlKGtleSwgZGVmYXVsdFZh
bHVlLCBtX2ZlYXR1cmVzLmRvdWJsZUZlYXR1cmVzKTsKKyAgICB9CisgICAgc3RkOjpzdHJpbmcg
c3RyaW5nRmVhdHVyZVZhbHVlKHN0ZDo6c3RyaW5nIGtleSwgc3RkOjpzdHJpbmcgZGVmYXVsdFZh
bHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZlYXR1cmVWYWx1ZShrZXksIGRlZmF1
bHRWYWx1ZSwgbV9mZWF0dXJlcy5zdHJpbmdGZWF0dXJlcyk7CisgICAgfQorICAgIHN0ZDo6dmVj
dG9yPHN0ZDo6c3RyaW5nPiBzdHJpbmdWZWN0b3JGZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5
LCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZGVmYXVsdFZhbHVlKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZlYXR1cmVWYWx1ZShrZXksIGRlZmF1bHRWYWx1ZSwgbV9mZWF0dXJlcy5z
dHJpbmdWZWN0b3JGZWF0dXJlcyk7CisgICAgfQorCisgICAgVGVzdEZlYXR1cmVzIG1fZmVhdHVy
ZXM7CiB9OwogCiB9CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5u
ZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMjY3OTQ4KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw2ICsxMjAs
OCBAQAogCQk2NTEwQTc4QjExRUM2NDM4MDA0MTA4NjcgLyogV2ViS2l0V2VpZ2h0V2F0Y2hlcjgw
MC50dGYgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1
MTBBNzgwMTFFQzY0MzgwMDQxMDg2NyAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyODAwLnR0ZiAqLzsg
fTsKIAkJNjUxMEE3OEMxMUVDNjQzODAwNDEwODY3IC8qIFdlYktpdFdlaWdodFdhdGNoZXI5MDAu
dHRmIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTEw
QTc4MTExRUM2NDM4MDA0MTA4NjcgLyogV2ViS2l0V2VpZ2h0V2F0Y2hlcjkwMC50dGYgKi87IH07
CiAJCTY1RUI4NUEwMTFFQzY3Q0MwMDM0RDMwMCAvKiBBY3RpdmF0ZUZvbnRzQ29jb2EubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUVCODU5RjExRUM2
N0NDMDAzNEQzMDAgLyogQWN0aXZhdGVGb250c0NvY29hLm1tICovOyB9OworCQk3Qzc4MjU1MTI1
MkE0N0U3MDAxOTFCODcgLyogU3RkRmlsZXN5c3RlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M3ODI1NEYyNTJBNDdFNzAwMTkxQjg3IC8qIFN0ZEZp
bGVzeXN0ZW0uaCAqLzsgfTsKKwkJN0M3ODI1NTIyNTJBNDdFNzAwMTkxQjg3IC8qIFN0ZEZpbGVz
eXN0ZW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0M3ODI1NTAyNTJBNDdFNzAwMTkxQjg3IC8qIFN0ZEZpbGVzeXN0ZW0uY3BwICovOyB9OwogCQk4
MDM0QzY2MjE0ODc2MzY0MDBBQzMyRTkgLyogQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MDM0QzY2MTE0
ODc2MzY0MDBBQzMyRTkgLyogQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0gKi87IH07CiAJ
CTgwOTczMzhBMTQ4NzRBNUEwMDgxNTZEOSAvKiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFu
ZGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgw
OTczMzg5MTQ4NzRBNUEwMDgxNTZEOSAvKiBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxl
ci5tbSAqLzsgfTsKIAkJOTM3NjQxN0EyMTBENzM3MjAwQTNEQUFFIC8qIFdlYktpdFRlc3RSdW5u
ZXJXaW5kb3cubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5Mzc2NDE3NjIxMEQ3MzYwMDBBM0RBQUUgLyogV2ViS2l0VGVzdFJ1bm5lcldpbmRvdy5tbSAq
LzsgfTsKQEAgLTM0OSwxMyArMzUxLDE0IEBACiAJCTY1MTBBNzgxMTFFQzY0MzgwMDQxMDg2NyAv
KiBXZWJLaXRXZWlnaHRXYXRjaGVyOTAwLnR0ZiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IG5hbWUgPSBXZWJLaXRXZWlnaHRXYXRjaGVyOTAw
LnR0ZjsgcGF0aCA9IGZvbnRzL1dlYktpdFdlaWdodFdhdGNoZXI5MDAudHRmOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk2NUVCODU5RDExRUM2N0NDMDAzNEQzMDAgLyogQWN0aXZhdGVG
b250cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY3RpdmF0ZUZvbnRzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1RUI4NTlGMTFFQzY3Q0MwMDM0RDMwMCAv
KiBBY3RpdmF0ZUZvbnRzQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBBY3RpdmF0ZUZvbnRzQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTdDNzgyNTRGMjUyQTQ3RTcwMDE5MUI4NyAvKiBTdGRGaWxlc3lzdGVtLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFN0ZEZpbGVzeXN0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M3
ODI1NTAyNTJBNDdFNzAwMTkxQjg3IC8qIFN0ZEZpbGVzeXN0ZW0uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU3RkRmlsZXN5c3RlbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgw
MzRDNjYxMTQ4NzYzNjQwMEFDMzJFOSAvKiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MDk3MzM4ODE0ODc0
QTVBMDA4MTU2RDkgLyogQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRs
ZXIuaDsgcGF0aCA9IG1hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MDk3MzM4OTE0ODc0QTVBMDA4MTU2RDkgLyogQWNj
ZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IG5hbWUgPSBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbTsgcGF0
aCA9IG1hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODQxQ0MwMEQxODExODVCRjAwNDJFOUI2IC8qIE9wdGlvbnMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3B0aW9ucy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0MUNDMDBFMTgxMTg1QkYwMDQyRTlCNiAvKiBPcHRp
b25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wdGlvbnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOERENzZGQTEwNDg2QUE3NjAwRDk2QjVFIC8qIFdlYktp
dFRlc3RSdW5uZXIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0
aCA9IFdlYktpdFRlc3RSdW5uZXI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07
Ci0JCTkzMzhEMUJBMjUwQTc5RUIwMEU4MjdGNiAvKiBKU0Jhc2ljcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBKU0Jhc2ljcy5oOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJlZC9CaW5kaW5ncy9KU0Jhc2lj
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzM4RDFCRTI1MEJEOUREMDBFODI3
RjYgLyogRGljdGlvbmFyeUZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWN0aW9uYXJ5RnVu
Y3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNzY0MTc2MjEwRDczNjAw
MEEzREFBRSAvKiBXZWJLaXRUZXN0UnVubmVyV2luZG93Lm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViS2l0VGVzdFJ1bm5lcldpbmRvdy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM3NjQxNzcyMTBENzM2MTAwQTNEQUFFIC8qIFdlYktpdFRl
c3RSdW5uZXJXaW5kb3cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViS2l0
VGVzdFJ1bm5lcldpbmRvdy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODk3LDYg
KzkwMCw4IEBACiAJCQkJOTMzOEQxQkUyNTBCRDlERDAwRTgyN0Y2IC8qIERpY3Rpb25hcnlGdW5j
dGlvbnMuaCAqLywKIAkJCQlCQzk5QTQ4NDEyMDg5MDFBMDA3RTlGMDggLyogU3RyaW5nRnVuY3Rp
b25zLmggKi8sCiAJCQkJOUIzNkEyNzAyMDk0NTNBMDAwM0UwNjUxIC8qIFdoYXRUb0R1bXAuaCAq
LywKKwkJCQk3Qzc4MjU0RjI1MkE0N0U3MDAxOTFCODcgLyogU3RkRmlsZXN5c3RlbS5oICovLAor
CQkJCTdDNzgyNTUwMjUyQTQ3RTcwMDE5MUI4NyAvKiBTdGRGaWxlc3lzdGVtLmNwcCAqLywKIAkJ
CSk7CiAJCQluYW1lID0gU2hhcmVkOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTkz
Nyw2ICs5NDIsNyBAQAogCQkJCTJEQjYxODdFMUQ3RDU4RDQwMDk3OEQxOSAvKiBDb3JlR3JhcGhp
Y3NUZXN0U1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQkyREQ0QzQ5QTFENkU3RDNCMDAwNzM3OUMg
LyogRXZlbnRTZXJpYWxpemVyTWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjczQjU1MjFCQTc4
OTY4MDA0QjNFRjQgLyogSlNVSVNjcmlwdENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTdDNzgyNTUxMjUyQTQ3RTcwMDE5MUI4NyAvKiBTdGRGaWxlc3lzdGVtLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyREZBOTg0ODFEN0Y3MENGMDBBRkYyQzkgLyogU2hhcmVkRXZlbnRTdHJlYW1zTWFj
LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDA1OEUwOTIyRTJFRTIyMDBFNEMxNDUgLyogVUlTY3Jp
cHRDb250cm9sbGVyQ29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEMDU4RTBCMjJFMkVGNkQw
MEU0QzE0NSAvKiBVSVNjcmlwdENvbnRyb2xsZXJNYWMuaCBpbiBIZWFkZXJzICovLApAQCAtMTIy
MCw2ICsxMjI2LDcgQEAKIAkJCQlGNDYyNDBCMTIxNzAxM0U1MDA5MTdCMTYgLyogVUlTY3JpcHRD
b250cm9sbGVyQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQkyNzdDQ0VERDI1MEYzMDBBMDA1
MEM1NzIgLyogVUlTY3JpcHRDb250cm9sbGVyQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGNzNCNTVDMUJBODkwNDIwMDRCM0VGNCAvKiBVSVNjcmlwdENvbnRyb2xsZXJJT1MubW0gaW4g
U291cmNlcyAqLywKKwkJCQk3Qzc4MjU1MjI1MkE0N0U3MDAxOTFCODcgLyogU3RkRmlsZXN5c3Rl
bS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjE4RTZFNjFENkI5QkEyMDAyN0U1NDcgLyogVUlT
Y3JpcHRDb250cm9sbGVyU2hhcmVkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExODUxMDQzMUI5
QUUxNDUwMDc0NEFFQiAvKiBXZWJOb3RpZmljYXRpb25Qcm92aWRlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBMTg1MTA0NDFCOUFFMTRBMDA3NDRBRUIgLyogV29ya1F1ZXVlTWFuYWdlci5jcHAg
aW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENv
bnRyb2xsZXJDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2Nv
Y29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0JKHJldmlzaW9uIDI2Nzk0OCkKKysrIFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2NvYS5tbQkod29ya2luZyBjb3B5
KQpAQCAtMTE0LDI3ICsxMTQsMjggQEAgV0tQcmVmZXJlbmNlc1JlZiBUZXN0Q29udHJvbGxlcjo6
cGxhdGZvcgogICAgIHJldHVybiAoX19icmlkZ2UgV0tQcmVmZXJlbmNlc1JlZilnbG9iYWxXZWJW
aWV3Q29uZmlndXJhdGlvbi5wcmVmZXJlbmNlczsKIH0KIAotdm9pZCBUZXN0Q29udHJvbGxlcjo6
cGxhdGZvcm1BZGRUZXN0T3B0aW9ucyhUZXN0T3B0aW9ucyYgb3B0aW9ucykgY29uc3QKK1Rlc3RG
ZWF0dXJlcyBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVPdmVycmlkZXNE
ZWZhdWx0c0ZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKSBjb25zdAogeworICAgIFRlc3RGZWF0
dXJlcyBmZWF0dXJlczsKKwogICAgIGlmIChbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRl
ZmF1bHRzXSBib29sRm9yS2V5OkAiRW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24iXSkKLSAg
ICAgICAgb3B0aW9ucy5jb250ZXh0T3B0aW9ucy5lbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlv
biA9IHRydWU7CisgICAgICAgIGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAiZW5hYmxl
UHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24iLCB0cnVlIH0pOwogICAgIGlmIChbW05TVXNlckRlZmF1
bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5OkAiRW5hYmxlUHJvY2Vzc1N3YXBP
bldpbmRvd09wZW4iXSkKLSAgICAgICAgb3B0aW9ucy5jb250ZXh0T3B0aW9ucy5lbmFibGVQcm9j
ZXNzU3dhcE9uV2luZG93T3BlbiA9IHRydWU7CisgICAgICAgIGZlYXR1cmVzLmJvb2xGZWF0dXJl
cy5pbnNlcnQoeyAiZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW4iLCB0cnVlIH0pOwogCi0j
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAob3B0aW9ucy5lbmFibGVJbkFwcEJyb3dz
ZXJQcml2YWN5KQotICAgICAgICBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRz
XSBzZXRCb29sOllFUyBmb3JLZXk6QCJXZWJLaXREZWJ1Z0lzSW5BcHBCcm93c2VyUHJpdmFjeUVu
YWJsZWQiXTsKLSNlbmRpZgorICAgIHJldHVybiBmZWF0dXJlczsKIH0KIAogdm9pZCBUZXN0Q29u
dHJvbGxlcjo6cGxhdGZvcm1Jbml0aWFsaXplRGF0YVN0b3JlKFdLUGFnZUNvbmZpZ3VyYXRpb25S
ZWYsIGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChvcHRpb25zLnVzZUVw
aGVtZXJhbFNlc3Npb24gfHwgb3B0aW9ucy5zdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwubGVu
Z3RoKCkpIHsKLSAgICAgICAgYXV0byB3ZWJzaXRlRGF0YVN0b3JlQ29uZmlnID0gb3B0aW9ucy51
c2VFcGhlbWVyYWxTZXNzaW9uID8gW1tbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24g
YWxsb2NdIGluaXROb25QZXJzaXN0ZW50Q29uZmlndXJhdGlvbl0gYXV0b3JlbGVhc2VdIDogW1tb
X1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNl
XTsKLSAgICAgICAgaWYgKCFvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24pCisgICAgYm9vbCB1
c2VFcGhlbWVyYWxTZXNzaW9uID0gb3B0aW9ucy51c2VFcGhlbWVyYWxTZXNzaW9uKCk7CisgICAg
YXV0byBzdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwgPSBvcHRpb25zLnN0YW5kYWxvbmVXZWJB
cHBsaWNhdGlvblVSTCgpOworICAgIGlmICh1c2VFcGhlbWVyYWxTZXNzaW9uIHx8IHN0YW5kYWxv
bmVXZWJBcHBsaWNhdGlvblVSTC5sZW5ndGgoKSkgeworICAgICAgICBhdXRvIHdlYnNpdGVEYXRh
U3RvcmVDb25maWcgPSB1c2VFcGhlbWVyYWxTZXNzaW9uID8gW1tbX1dLV2Vic2l0ZURhdGFTdG9y
ZUNvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXROb25QZXJzaXN0ZW50Q29uZmlndXJhdGlvbl0gYXV0
b3JlbGVhc2VdIDogW1tbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gYWxsb2NdIGlu
aXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgaWYgKCF1c2VFcGhlbWVyYWxTZXNzaW9uKQogICAg
ICAgICAgICAgY29uZmlndXJlV2Vic2l0ZURhdGFTdG9yZVRlbXBvcmFyeURpcmVjdG9yaWVzKChX
S1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uUmVmKXdlYnNpdGVEYXRhU3RvcmVDb25maWcp
OwotICAgICAgICBpZiAob3B0aW9ucy5zdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwubGVuZ3Ro
KCkpCi0gICAgICAgICAgICBbd2Vic2l0ZURhdGFTdG9yZUNvbmZpZyBzZXRTdGFuZGFsb25lQXBw
bGljYXRpb25VUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4
U3RyaW5nOm9wdGlvbnMuc3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMLmNfc3RyKCldXV07Cisg
ICAgICAgIGlmIChzdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwubGVuZ3RoKCkpCisgICAgICAg
ICAgICBbd2Vic2l0ZURhdGFTdG9yZUNvbmZpZyBzZXRTdGFuZGFsb25lQXBwbGljYXRpb25VUkw6
W05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnN0YW5k
YWxvbmVXZWJBcHBsaWNhdGlvblVSTC5jX3N0cigpXV1dOwogICAgICAgICBtX3dlYnNpdGVEYXRh
U3RvcmUgPSAoX19icmlkZ2UgV0tXZWJzaXRlRGF0YVN0b3JlUmVmKVtbW1dLV2Vic2l0ZURhdGFT
dG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjp3ZWJzaXRlRGF0YVN0b3JlQ29uZmln
XSBhdXRvcmVsZWFzZV07CiAgICAgfSBlbHNlCiAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9
IChfX2JyaWRnZSBXS1dlYnNpdGVEYXRhU3RvcmVSZWYpZ2xvYmFsV2ViVmlld0NvbmZpZ3VyYXRp
b24ud2Vic2l0ZURhdGFTdG9yZTsKQEAgLTE0NSwzMiArMTQ2LDMzIEBAIHZvaWQgVGVzdENvbnRy
b2xsZXI6OnBsYXRmb3JtQ3JlYXRlV2ViVmkKICAgICBhdXRvIGNvcGllZENvbmZpZ3VyYXRpb24g
PSBhZG9wdE5TKFtnbG9iYWxXZWJWaWV3Q29uZmlndXJhdGlvbiBjb3B5XSk7CiAKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQotICAgIGlmIChvcHRpb25zLnVzZURhdGFEZXRlY3Rpb24pCisgICAg
aWYgKG9wdGlvbnMudXNlRGF0YURldGVjdGlvbigpKQogICAgICAgICBbY29waWVkQ29uZmlndXJh
dGlvbiBzZXREYXRhRGV0ZWN0b3JUeXBlczpXS0RhdGFEZXRlY3RvclR5cGVBbGxdOwotICAgIGlm
IChvcHRpb25zLmlnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKQorICAgIGlmIChvcHRpb25zLmln
bm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKCkpCiAgICAgICAgIFtjb3BpZWRDb25maWd1cmF0aW9u
IHNldElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzOllFU107Ci0gICAgaWYgKG9wdGlvbnMudXNl
Q2hhcmFjdGVyU2VsZWN0aW9uR3JhbnVsYXJpdHkpCisgICAgaWYgKG9wdGlvbnMudXNlQ2hhcmFj
dGVyU2VsZWN0aW9uR3JhbnVsYXJpdHkoKSkKICAgICAgICAgW2NvcGllZENvbmZpZ3VyYXRpb24g
c2V0U2VsZWN0aW9uR3JhbnVsYXJpdHk6V0tTZWxlY3Rpb25HcmFudWxhcml0eUNoYXJhY3Rlcl07
Ci0gICAgaWYgKG9wdGlvbnMuaXNBcHBCb3VuZFdlYlZpZXcpCisgICAgaWYgKG9wdGlvbnMuaXNB
cHBCb3VuZFdlYlZpZXcoKSkKICAgICAgICAgW2NvcGllZENvbmZpZ3VyYXRpb24gc2V0TGltaXRz
TmF2aWdhdGlvbnNUb0FwcEJvdW5kRG9tYWluczpZRVNdOwogI2Vsc2UKLSAgICBbY29waWVkQ29u
ZmlndXJhdGlvbiBfc2V0U2VydmljZUNvbnRyb2xzRW5hYmxlZDpvcHRpb25zLmVuYWJsZVNlcnZp
Y2VDb250cm9sc107CisgICAgW2NvcGllZENvbmZpZ3VyYXRpb24gX3NldFNlcnZpY2VDb250cm9s
c0VuYWJsZWQ6b3B0aW9ucy5lbmFibGVTZXJ2aWNlQ29udHJvbHMoKV07CiAjZW5kaWYKIAotICAg
IGlmIChvcHRpb25zLmVuYWJsZUF0dGFjaG1lbnRFbGVtZW50KQorICAgIGlmIChvcHRpb25zLmVu
YWJsZUF0dGFjaG1lbnRFbGVtZW50KCkpCiAgICAgICAgIFtjb3BpZWRDb25maWd1cmF0aW9uIF9z
ZXRBdHRhY2htZW50RWxlbWVudEVuYWJsZWQ6WUVTXTsKIAotICAgIGlmIChvcHRpb25zLmVuYWJs
ZUNvbG9yRmlsdGVyKQorICAgIGlmIChvcHRpb25zLmVuYWJsZUNvbG9yRmlsdGVyKCkpCiAgICAg
ICAgIFtjb3BpZWRDb25maWd1cmF0aW9uIF9zZXRDb2xvckZpbHRlckVuYWJsZWQ6WUVTXTsKIAog
ICAgIFtjb3BpZWRDb25maWd1cmF0aW9uIHNldFdlYnNpdGVEYXRhU3RvcmU6KFdLV2Vic2l0ZURh
dGFTdG9yZSAqKXdlYnNpdGVEYXRhU3RvcmUoKV07CiAKLSAgICBbY29waWVkQ29uZmlndXJhdGlv
biBfc2V0QWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMczpvcHRpb25zLmFsbG93VG9wTmF2aWdh
dGlvblRvRGF0YVVSTHNdOworICAgIFtjb3BpZWRDb25maWd1cmF0aW9uIF9zZXRBbGxvd1RvcE5h
dmlnYXRpb25Ub0RhdGFVUkxzOm9wdGlvbnMuYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcygp
XTsKIAogICAgIGNvbmZpZ3VyZUNvbnRlbnRNb2RlKGNvcGllZENvbmZpZ3VyYXRpb24uZ2V0KCks
IG9wdGlvbnMpOwogCi0gICAgaWYgKG9wdGlvbnMuYXBwbGljYXRpb25NYW5pZmVzdC5sZW5ndGgo
KSkgewotICAgICAgICBhdXRvIG1hbmlmZXN0UGF0aCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRG
OFN0cmluZzpvcHRpb25zLmFwcGxpY2F0aW9uTWFuaWZlc3QuY19zdHIoKV07CisgICAgYXV0byBh
cHBsaWNhdGlvbk1hbmlmZXN0ID0gb3B0aW9ucy5hcHBsaWNhdGlvbk1hbmlmZXN0KCk7CisgICAg
aWYgKGFwcGxpY2F0aW9uTWFuaWZlc3QubGVuZ3RoKCkpIHsKKyAgICAgICAgYXV0byBtYW5pZmVz
dFBhdGggPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6YXBwbGljYXRpb25NYW5pZmVz
dC5jX3N0cigpXTsKICAgICAgICAgTlNTdHJpbmcgKnRleHQgPSBbTlNTdHJpbmcgc3RyaW5nV2l0
aENvbnRlbnRzT2ZGaWxlOm1hbmlmZXN0UGF0aCB1c2VkRW5jb2Rpbmc6bnVsbHB0ciBlcnJvcjpu
dWxscHRyXTsKICAgICAgICAgW2NvcGllZENvbmZpZ3VyYXRpb24gX3NldEFwcGxpY2F0aW9uTWFu
aWZlc3Q6W19XS0FwcGxpY2F0aW9uTWFuaWZlc3QgYXBwbGljYXRpb25NYW5pZmVzdEZyb21KU09O
OnRleHQgbWFuaWZlc3RVUkw6bmlsIGRvY3VtZW50VVJMOm5pbF1dOwogICAgIH0KQEAgLTE3OCwx
MyArMTgwLDEzIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQ3JlYXRlV2ViVmkKICAg
ICBtX21haW5XZWJWaWV3ID0gbWFrZVVuaXF1ZTxQbGF0Zm9ybVdlYlZpZXc+KGNvcGllZENvbmZp
Z3VyYXRpb24uZ2V0KCksIG9wdGlvbnMpOwogICAgIGZpbmlzaENyZWF0aW5nUGxhdGZvcm1XZWJW
aWV3KG1fbWFpbldlYlZpZXcuZ2V0KCksIG9wdGlvbnMpOwogCi0gICAgaWYgKG9wdGlvbnMucHVu
Y2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZSkKKyAgICBpZiAob3B0aW9ucy5wdW5jaE91
dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlKCkpCiAgICAgICAgIG1fbWFpbldlYlZpZXctPnNl
dERyYXdzQmFja2dyb3VuZChmYWxzZSk7CiAKLSAgICBpZiAob3B0aW9ucy5lZGl0YWJsZSkKKyAg
ICBpZiAob3B0aW9ucy5lZGl0YWJsZSgpKQogICAgICAgICBtX21haW5XZWJWaWV3LT5zZXRFZGl0
YWJsZSh0cnVlKTsKIAotICAgIG1fbWFpbldlYlZpZXctPnBsYXRmb3JtVmlldygpLmFsbG93c0xp
bmtQcmV2aWV3ID0gb3B0aW9ucy5hbGxvd3NMaW5rUHJldmlldzsKKyAgICBtX21haW5XZWJWaWV3
LT5wbGF0Zm9ybVZpZXcoKS5hbGxvd3NMaW5rUHJldmlldyA9IG9wdGlvbnMuYWxsb3dzTGlua1By
ZXZpZXcoKTsKICAgICBbbV9tYWluV2ViVmlldy0+cGxhdGZvcm1WaWV3KCkgX3NldFNoYXJlU2hl
ZXRDb21wbGV0ZXNJbW1lZGlhdGVseVdpdGhSZXNvbHV0aW9uRm9yVGVzdGluZzpZRVNdOwogfQog
CkBAIC0yMDMsNyArMjA1LDcgQEAgUGxhdGZvcm1XZWJWaWV3KiBUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcgogdm9pZCBUZXN0Q29udHJvbGxlcjo6ZmluaXNoQ3JlYXRpbmdQbGF0Zm9ybVdlYlZpZXco
UGxhdGZvcm1XZWJWaWV3KiB2aWV3LCBjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykKIHsKICNp
ZiBQTEFURk9STShNQUMpCi0gICAgaWYgKG9wdGlvbnMuc2hvdWxkU2hvd1dlYlZpZXcpCisgICAg
aWYgKG9wdGlvbnMuc2hvdWxkU2hvd1dlYlZpZXcoKSkKICAgICAgICAgW3ZpZXctPnBsYXRmb3Jt
V2luZG93KCkgb3JkZXJGcm9udDpuaWxdOwogICAgIGVsc2UKICAgICAgICAgW3ZpZXctPnBsYXRm
b3JtV2luZG93KCkgb3JkZXJCYWNrOm5pbF07CkBAIC0yNjMsMTIgKzI2NSwxMiBAQCB2b2lkIFRl
c3RDb250cm9sbGVyOjpyZXNldENvbnRlbnRFeHRlbnNpCiAgICAgfQogfQogCi12b2lkIFRlc3RD
b250cm9sbGVyOjpzZXRBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBi
dW5kbGVJZGVudGlmaWVyKQordm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0QXBwbGljYXRpb25CdW5k
bGVJZGVudGlmaWVyKGNvbnN0IHN0ZDo6c3RyaW5nJiBidW5kbGVJZGVudGlmaWVyKQogewotICAg
IGlmIChidW5kbGVJZGVudGlmaWVyLmlzRW1wdHkoKSkKKyAgICBpZiAoYnVuZGxlSWRlbnRpZmll
ci5lbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgW1Rlc3RSdW5uZXJXS1dlYlZp
ZXcgX3NldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcjooTlNTdHJpbmcgKilidW5kbGVJZGVu
dGlmaWVyLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCldOworICAgIFtUZXN0UnVubmVyV0tXZWJWaWV3
IF9zZXRBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXI6KE5TU3RyaW5nICopdG9XVEZTdHJpbmco
YnVuZGxlSWRlbnRpZmllcikuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV07CiB9CiAKIHZvaWQgVGVz
dENvbnRyb2xsZXI6OmNsZWFyQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyVGVzdGluZ092ZXJy
aWRlKCkKQEAgLTI4Niw3ICsyODgsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpjb2NvYVJlc2V0
U3RhdGVUb0NvCiAgICAgICAgIFRlc3RSdW5uZXJXS1dlYlZpZXcgKnBsYXRmb3JtVmlldyA9IHdl
YlZpZXctPnBsYXRmb3JtVmlldygpOwogICAgICAgICBwbGF0Zm9ybVZpZXcuX3ZpZXdTY2FsZSA9
IDE7CiAgICAgICAgIHBsYXRmb3JtVmlldy5fbWluaW11bUVmZmVjdGl2ZURldmljZVdpZHRoID0g
MDsKLSAgICAgICAgW3BsYXRmb3JtVmlldyBfc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkRm9yVGVzdGluZzpvcHRpb25zLnNob3VsZFNob3dTcGVsbENoZWNraW5nRG90c107CisgICAg
ICAgIFtwbGF0Zm9ybVZpZXcgX3NldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZEZvclRl
c3Rpbmc6b3B0aW9ucy5zaG91bGRTaG93U3BlbGxDaGVja2luZ0RvdHMoKV07CiAgICAgICAgIFtw
bGF0Zm9ybVZpZXcgcmVzZXRJbnRlcmFjdGlvbkNhbGxiYWNrc107CiAgICAgICAgIFtwbGF0Zm9y
bVZpZXcgX3Jlc2V0TmF2aWdhdGlvbkdlc3R1cmVTdGF0ZUZvclRlc3RpbmddOwogICAgIH0KQEAg
LTI5Nyw2ICsyOTksMTEgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6Y29jb2FSZXNldFN0YXRlVG9D
bwogdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1XaWxsUnVuVGVzdChjb25zdCBUZXN0SW52
b2NhdGlvbiYgdGVzdEludm9jYXRpb24pCiB7CiAgICAgc2V0Q3Jhc2hSZXBvcnRBcHBsaWNhdGlv
blNwZWNpZmljSW5mb3JtYXRpb25Ub1VSTCh0ZXN0SW52b2NhdGlvbi51cmwoKSk7CisKKyNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQorICAgIGlmICh0ZXN0SW52b2NhdGlvbi5vcHRpb25zKCkuZW5h
YmxlSW5BcHBCcm93c2VyUHJpdmFjeSgpKQorICAgICAgICBbW05TVXNlckRlZmF1bHRzIHN0YW5k
YXJkVXNlckRlZmF1bHRzXSBzZXRCb29sOllFUyBmb3JLZXk6QCJXZWJLaXREZWJ1Z0lzSW5BcHBC
cm93c2VyUHJpdmFjeUVuYWJsZWQiXTsKKyNlbmRpZgogfQogCiBzdGF0aWMgTlNTdHJpbmcgKiBj
b25zdCBXZWJBcmNoaXZlUGJvYXJkVHlwZSA9IEAiQXBwbGUgV2ViIEFyY2hpdmUgcGFzdGVib2Fy
ZCB0eXBlIjsKQEAgLTQ4NywxMiArNDk0LDExIEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OmlzRG9p
bmdNZWRpYUNhcHR1cmUKIAogc3RhdGljIFdLQ29udGVudE1vZGUgY29udGVudE1vZGUoY29uc3Qg
VGVzdE9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKG9wdGlvbnMuY29udGVudE1vZGUgPT0g
ImRlc2t0b3AiX3MpCisgICAgYXV0byBtb2RlID0gb3B0aW9ucy5jb250ZW50TW9kZSgpOworICAg
IGlmIChtb2RlID09ICJkZXNrdG9wIikKICAgICAgICAgcmV0dXJuIFdLQ29udGVudE1vZGVEZXNr
dG9wOwotCi0gICAgaWYgKG9wdGlvbnMuY29udGVudE1vZGUgPT0gIm1vYmlsZSJfcykKKyAgICBp
ZiAobW9kZSA9PSAibW9iaWxlIikKICAgICAgICAgcmV0dXJuIFdLQ29udGVudE1vZGVNb2JpbGU7
Ci0KICAgICByZXR1cm4gV0tDb250ZW50TW9kZVJlY29tbWVuZGVkOwogfQogCkluZGV4OiBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0Q29udHJvbGxlckd0ay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvVGVzdENvbnRyb2xsZXJHdGsuY3BwCShyZXZp
c2lvbiAyNjc5NDgpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL2d0ay9UZXN0Q29udHJvbGxl
ckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw5ICsxNTAsMTEgQEAgdm9pZCBUZXN0Q29u
dHJvbGxlcjo6cGxhdGZvcm1SZXNldFByZWZlcgogICAgIG1fbWFpbldlYlZpZXctPmRpc21pc3NB
bGxQb3B1cE1lbnVzKCk7CiB9CiAKLXZvaWQgVGVzdENvbnRyb2xsZXI6OnVwZGF0ZVBsYXRmb3Jt
U3BlY2lmaWNUZXN0T3B0aW9uc0ZvclRlc3QoVGVzdE9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IHN0
ZDo6c3RyaW5nJikgY29uc3QKK1Rlc3RGZWF0dXJlcyBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1T
cGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKSBjb25zdAog
ewotICAgIG9wdGlvbnMuZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyA9IGZhbHNlOworICAgIFRl
c3RGZWF0dXJlcyBmZWF0dXJlczsKKyAgICBmZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsg
ImVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMiLCBmYWxzZSB9KTsKKyAgICByZXR1cm4gZmVhdHVy
ZXM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9pb3MvUGxhdGZvcm1XZWJWaWV3SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvaW9zL1BsYXRmb3JtV2ViVmlld0lPUy5tbQkocmV2aXNpb24gMjY3OTQ4KQorKysg
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvUGxhdGZvcm1XZWJWaWV3SU9TLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xODksNyArMTg5LDcgQEAgUGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZp
ZXcoV0tXZWJWaQogICAgIDogbV93aW5kb3dJc0tleSh0cnVlKQogICAgICwgbV9vcHRpb25zKG9w
dGlvbnMpCiB7Ci0gICAgQ0dSZWN0IHJlY3QgPSBDR1JlY3RNYWtlKDAsIDAsIFRlc3RDb250cm9s
bGVyOjp2aWV3V2lkdGgsIFRlc3RDb250cm9sbGVyOjp2aWV3SGVpZ2h0KTsKKyAgICBDR1JlY3Qg
cmVjdCA9IENHUmVjdE1ha2UoMCwgMCwgb3B0aW9ucy52aWV3V2lkdGgoKSwgb3B0aW9ucy52aWV3
SGVpZ2h0KCkpOwogCiAgICAgbV93aW5kb3cgPSBbW1dlYktpdFRlc3RSdW5uZXJXaW5kb3cgYWxs
b2NdIGluaXRXaXRoRnJhbWU6cmVjdF07CiAgICAgbV93aW5kb3cuYmFja2dyb3VuZENvbG9yID0g
W1VJQ29sb3IgbGlnaHRHcmF5Q29sb3JdOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9p
b3MvVGVzdENvbnRyb2xsZXJJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0JKHJldmlzaW9uIDI2Nzk0OCkKKysrIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTAsNyArMTkwLDcgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1SZXNldFN0
YXRlVAogICAgIH0KIAogICAgIG1fcHJlc2VudFBvcG92ZXJTd2l6emxlcnMuY2xlYXIoKTsKLSAg
ICBpZiAoIW9wdGlvbnMuc2hvdWxkUHJlc2VudFBvcG92ZXJzKSB7CisgICAgaWYgKCFvcHRpb25z
LnNob3VsZFByZXNlbnRQb3BvdmVycygpKSB7CiAjaWYgVVNFKFVJQ09OVEVYVE1FTlUpCiAgICAg
ICAgIG1fcHJlc2VudFBvcG92ZXJTd2l6emxlcnMuYXBwZW5kKG1ha2VVbmlxdWU8SW5zdGFuY2VN
ZXRob2RTd2l6emxlcj4oW1VJQ29udGV4dE1lbnVJbnRlcmFjdGlvbiBjbGFzc10sIEBzZWxlY3Rv
cihfcHJlc2VudE1lbnVBdExvY2F0aW9uOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlk
ZVByZXNlbnRNZW51T3JQb3BvdmVyT3JWaWV3Q29udHJvbGxlcikpKTsKICNlbmRpZgpAQCAtMjEz
LDggKzIxMywxMCBAQCBib29sIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJlc2V0U3RhdGVUCiAg
ICAgICAgIFVJU2Nyb2xsVmlldyAqc2Nyb2xsVmlldyA9IHdlYlZpZXcuc2Nyb2xsVmlldzsKICAg
ICAgICAgW3Njcm9sbFZpZXcgX3JlbW92ZUFsbEFuaW1hdGlvbnM6WUVTXTsKICAgICAgICAgW3Nj
cm9sbFZpZXcgc2V0Wm9vbVNjYWxlOjEgYW5pbWF0ZWQ6Tk9dOwotICAgICAgICBzY3JvbGxWaWV3
LmNvbnRlbnRJbnNldCA9IFVJRWRnZUluc2V0c01ha2Uob3B0aW9ucy5jb250ZW50SW5zZXRUb3As
IDAsIDAsIDApOwotICAgICAgICBzY3JvbGxWaWV3LmNvbnRlbnRPZmZzZXQgPSBDR1BvaW50TWFr
ZSgwLCAtb3B0aW9ucy5jb250ZW50SW5zZXRUb3ApOworICAgICAgICAKKyAgICAgICAgYXV0byBj
b250ZW50SW5zZXRUb3AgPSBvcHRpb25zLmNvbnRlbnRJbnNldFRvcCgpOworICAgICAgICBzY3Jv
bGxWaWV3LmNvbnRlbnRJbnNldCA9IFVJRWRnZUluc2V0c01ha2UoY29udGVudEluc2V0VG9wLCAw
LCAwLCAwKTsKKyAgICAgICAgc2Nyb2xsVmlldy5jb250ZW50T2Zmc2V0ID0gQ0dQb2ludE1ha2Uo
MCwgLWNvbnRlbnRJbnNldFRvcCk7CiAKICAgICAgICAgaWYgKHdlYlZpZXcuaW50ZXJhY3RpbmdX
aXRoRm9ybUNvbnRyb2wpCiAgICAgICAgICAgICBzaG91bGRSZXN0b3JlRmlyc3RSZXNwb25kZXIg
PSBbd2ViVmlldyByZXNpZ25GaXJzdFJlc3BvbmRlcl07CkBAIC0yNjUsMTIgKzI2NywxNCBAQCBi
b29sIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJlc2V0U3RhdGVUCiAKIHZvaWQgVGVzdENvbnRy
b2xsZXI6OnBsYXRmb3JtQ29uZmlndXJlVmlld0ZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24m
IHRlc3QpCiB7CisgICAgW1tHZW5lcmF0ZWRUb3VjaGVzRGVidWdXaW5kb3cgc2hhcmVkR2VuZXJh
dGVkVG91Y2hlc0RlYnVnV2luZG93XSBzZXRTaG91bGRTaG93VG91Y2hlczp0ZXN0Lm9wdGlvbnMo
KS5zaG91bGRTaG93VG91Y2hlcygpXTsKKwogICAgIFRlc3RSdW5uZXJXS1dlYlZpZXcgKndlYlZp
ZXcgPSBtYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKTsKIAotICAgIGlmICh0ZXN0Lm9wdGlv
bnMoKS5zaG91bGRJZ25vcmVNZXRhVmlld3BvcnQpCisgICAgaWYgKHRlc3Qub3B0aW9ucygpLnNo
b3VsZElnbm9yZU1ldGFWaWV3cG9ydCgpKQogICAgICAgICB3ZWJWaWV3LmNvbmZpZ3VyYXRpb24u
cHJlZmVyZW5jZXMuX3Nob3VsZElnbm9yZU1ldGFWaWV3cG9ydCA9IFlFUzsKIAotICAgIGlmICgh
dGVzdC5vcHRpb25zKCkudXNlRmxleGlibGVWaWV3cG9ydCkKKyAgICBpZiAoIXRlc3Qub3B0aW9u
cygpLnVzZUZsZXhpYmxlVmlld3BvcnQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0dSZWN0
IHNjcmVlbkJvdW5kcyA9IFtVSVNjcmVlbiBtYWluU2NyZWVuXS5ib3VuZHM7CkBAIC0yOTEsMTAg
KzI5NSw5IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQ29uZmlndXJlVmkKICAgICAv
LyBXS0J1bmRsZVBhZ2VTZXRVc2VUZXN0aW5nVmlld3BvcnRDb25maWd1cmF0aW9uKGZhbHNlKS4K
IH0KIAotdm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRp
b25zRm9yVGVzdChUZXN0T3B0aW9ucyYgb3B0aW9ucywgY29uc3Qgc3RkOjpzdHJpbmcmKSBjb25z
dAorVGVzdEZlYXR1cmVzIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURl
ZmF1bHRzRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYpIGNvbnN0CiB7Ci0gICAgb3B0aW9ucy5z
aG91bGRTaG93VG91Y2hlcyA9IHNob3VsZFNob3dUb3VjaGVzKCk7Ci0gICAgW1tHZW5lcmF0ZWRU
b3VjaGVzRGVidWdXaW5kb3cgc2hhcmVkR2VuZXJhdGVkVG91Y2hlc0RlYnVnV2luZG93XSBzZXRT
aG91bGRTaG93VG91Y2hlczpvcHRpb25zLnNob3VsZFNob3dUb3VjaGVzXTsKKyAgICByZXR1cm4g
eyB9OwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemVDb250ZXh0
KCkKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1BsYXRmb3JtV2ViVmlld01hYy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9QbGF0Zm9ybVdlYlZp
ZXdNYWMubW0JKHJldmlzaW9uIDI2Nzk0OCkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFj
L1BsYXRmb3JtV2ViVmlld01hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjEsMTggKzYxLDE4IEBA
IFBsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KFdLV2ViVmkKICAgICAsIG1fb3B0aW9u
cyhvcHRpb25zKQogewogICAgIC8vIEZJWE1FOiBOb3Qgc3VyZSB0aGlzIGlzIHRoZSBiZXN0IHBs
YWNlIGZvciB0aGlzOyBtYXliZSB3ZSBzaG91bGQgaGF2ZSBBUEkgdG8gc2V0IHRoaXMgc28gd2Ug
Y2FuIGRvIGl0IGZyb20gVGVzdENvbnRyb2xsZXI/Ci0gICAgaWYgKG1fb3B0aW9ucy51c2VSZW1v
dGVMYXllclRyZWUpCisgICAgaWYgKG1fb3B0aW9ucy51c2VSZW1vdGVMYXllclRyZWUoKSkKICAg
ICAgICAgW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gc2V0VmFsdWU6QFlF
UyBmb3JLZXk6QCJXZWJLaXQyVXNlUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEiXTsKIAogICAg
IGF1dG8gY29waWVkQ29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW2NvbmZpZ3VyYXRpb24gY29weV0p
OwotICAgIFdLUHJlZmVyZW5jZXNTZXRUaHJlYWRlZFNjcm9sbGluZ0VuYWJsZWQoKF9fYnJpZGdl
IFdLUHJlZmVyZW5jZXNSZWYpW2NvcGllZENvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdLCBtX29w
dGlvbnMudXNlVGhyZWFkZWRTY3JvbGxpbmcpOworICAgIFdLUHJlZmVyZW5jZXNTZXRUaHJlYWRl
ZFNjcm9sbGluZ0VuYWJsZWQoKF9fYnJpZGdlIFdLUHJlZmVyZW5jZXNSZWYpW2NvcGllZENvbmZp
Z3VyYXRpb24gcHJlZmVyZW5jZXNdLCBtX29wdGlvbnMudXNlVGhyZWFkZWRTY3JvbGxpbmcoKSk7
CiAKLSAgICBOU1JlY3QgcmVjdCA9IE5TTWFrZVJlY3QoMCwgMCwgVGVzdENvbnRyb2xsZXI6OnZp
ZXdXaWR0aCwgVGVzdENvbnRyb2xsZXI6OnZpZXdIZWlnaHQpOworICAgIE5TUmVjdCByZWN0ID0g
TlNNYWtlUmVjdCgwLCAwLCBvcHRpb25zLnZpZXdXaWR0aCgpLCBvcHRpb25zLnZpZXdIZWlnaHQo
KSk7CiAgICAgbV92aWV3ID0gW1tUZXN0UnVubmVyV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOnJlY3QgY29uZmlndXJhdGlvbjpjb3BpZWRDb25maWd1cmF0aW9uLmdldCgpXTsKICAgICBb
bV92aWV3IF9zZXRXaW5kb3dPY2NsdXNpb25EZXRlY3Rpb25FbmFibGVkOk5PXTsKIAogICAgIE5T
U2NyZWVuICpmaXJzdFNjcmVlbiA9IFtbTlNTY3JlZW4gc2NyZWVuc10gb2JqZWN0QXRJbmRleDow
XTsKLSAgICBOU1JlY3Qgd2luZG93UmVjdCA9IG1fb3B0aW9ucy5zaG91bGRTaG93V2ViVmlldyA/
IE5TT2Zmc2V0UmVjdChyZWN0LCAxMDAsIDEwMCkgOiBOU09mZnNldFJlY3QocmVjdCwgLTEwMDAw
LCBbZmlyc3RTY3JlZW4gZnJhbWVdLnNpemUuaGVpZ2h0IC0gcmVjdC5zaXplLmhlaWdodCArIDEw
MDAwKTsKKyAgICBOU1JlY3Qgd2luZG93UmVjdCA9IG1fb3B0aW9ucy5zaG91bGRTaG93V2ViVmll
dygpID8gTlNPZmZzZXRSZWN0KHJlY3QsIDEwMCwgMTAwKSA6IE5TT2Zmc2V0UmVjdChyZWN0LCAt
MTAwMDAsIFtmaXJzdFNjcmVlbiBmcmFtZV0uc2l6ZS5oZWlnaHQgLSByZWN0LnNpemUuaGVpZ2h0
ICsgMTAwMDApOwogICAgIG1fd2luZG93ID0gW1tXZWJLaXRUZXN0UnVubmVyV2luZG93IGFsbG9j
XSBpbml0V2l0aENvbnRlbnRSZWN0OndpbmRvd1JlY3Qgc3R5bGVNYXNrOk5TV2luZG93U3R5bGVN
YXNrQm9yZGVybGVzcyBiYWNraW5nOihOU0JhY2tpbmdTdG9yZVR5cGUpX05TQmFja2luZ1N0b3Jl
VW5idWZmZXJlZCBkZWZlcjpZRVNdOwogICAgIG1fd2luZG93LnBsYXRmb3JtV2ViVmlldyA9IHRo
aXM7CiAgICAgW21fd2luZG93IHNldENvbG9yU3BhY2U6W2ZpcnN0U2NyZWVuIGNvbG9yU3BhY2Vd
XTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1Rlc3RDb250cm9sbGVyTWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1Rlc3RDb250cm9sbGVy
TWFjLm1tCShyZXZpc2lvbiAyNjc5NDgpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9U
ZXN0Q29udHJvbGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTcyLDExICsxNzIsMTEgQEAg
Ym9vbCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1SZXNldFN0YXRlVAogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIFRlc3RDb250cm9sbGVyOjp1cGRhdGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9w
dGlvbnNGb3JUZXN0KFRlc3RPcHRpb25zJiBvcHRpb25zLCBjb25zdCBzdGQ6OnN0cmluZyYpIGNv
bnN0CitUZXN0RmVhdHVyZXMgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtU3BlY2lmaWNGZWF0dXJl
RGVmYXVsdHNGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJikgY29uc3QKIHsKLSAgICBvcHRpb25z
LnVzZVRocmVhZGVkU2Nyb2xsaW5nID0gdHJ1ZTsKLSAgICBvcHRpb25zLnVzZVJlbW90ZUxheWVy
VHJlZSA9IHNob3VsZFVzZVJlbW90ZUxheWVyVHJlZSgpOwotICAgIG9wdGlvbnMuc2hvdWxkU2hv
d1dlYlZpZXcgPSBzaG91bGRTaG93V2ViVmlldygpOworICAgIFRlc3RGZWF0dXJlcyBmZWF0dXJl
czsKKyAgICBmZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgInVzZVRocmVhZGVkU2Nyb2xs
aW5nIiwgdHJ1ZSB9KTsKKyAgICByZXR1cm4gZmVhdHVyZXM7CiB9CiAKIHZvaWQgVGVzdENvbnRy
b2xsZXI6OmNvbmZpZ3VyZUNvbnRlbnRFeHRlbnNpb25Gb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0
aW9uJiB0ZXN0KQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93aW4vUGxhdGZvcm1XZWJW
aWV3V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9QbGF0
Zm9ybVdlYlZpZXdXaW4uY3BwCShyZXZpc2lvbiAyNjc5NDgpCisrKyBUb29scy9XZWJLaXRUZXN0
UnVubmVyL3dpbi9QbGF0Zm9ybVdlYlZpZXdXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQs
NyArMTQ0LDcgQEAgdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnNldFdpbmRvd0ZyYW1lKFdLUgogICAg
ICAgICBTV1BfTk9NT1ZFIHwgU1dQX05PWk9SREVSIHwgU1dQX05PQUNUSVZBVEUgfCBTV1BfTk9D
T1BZQklUUyk7CiAKICAgICBVSU5UIGZsYWdzID0gU1dQX05PWk9SREVSIHwgU1dQX05PQUNUSVZB
VEUgfCBTV1BfTk9DT1BZQklUUzsKLSAgICBpZiAobV9vcHRpb25zLnNob3VsZFNob3dXZWJWaWV3
KQorICAgIGlmIChtX29wdGlvbnMuc2hvdWxkU2hvd1dlYlZpZXcoKSkKICAgICAgICAgZmxhZ3Mg
fD0gU1dQX05PTU9WRTsKICAgICA6OlNldFdpbmRvd1BvcygKICAgICAgICAgbV93aW5kb3csCklu
ZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9UZXN0Q29udHJvbGxlcldpbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93aW4vVGVzdENvbnRyb2xsZXJXaW4u
Y3BwCShyZXZpc2lvbiAyNjc5NDgpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9UZXN0
Q29udHJvbGxlcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNyw5ICsyMjcsOSBAQCB2b2lk
IFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVJlc2V0UHJlZmVyCiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKIH0KIAotdm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RP
cHRpb25zRm9yVGVzdChUZXN0T3B0aW9ucyYsIGNvbnN0IHN0ZDo6c3RyaW5nJikgY29uc3QKK1Rl
c3RGZWF0dXJlcyBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0
c0ZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RSCkluZGV4OiBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL3dwZS9UZXN0Q29udHJvbGxlcldQRS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93cGUvVGVzdENvbnRyb2xsZXJXUEUuY3BwCShyZXZp
c2lvbiAyNjc5NDgpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL3dwZS9UZXN0Q29udHJvbGxl
cldQRS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNiw5ICsxMzYsMTEgQEAgdm9pZCBUZXN0Q29u
dHJvbGxlcjo6cGxhdGZvcm1SZXNldFByZWZlcgogewogfQogCi12b2lkIFRlc3RDb250cm9sbGVy
Ojp1cGRhdGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0KFRlc3RPcHRpb25zJiBv
cHRpb25zLCBjb25zdCBzdGQ6OnN0cmluZyYpIGNvbnN0CitUZXN0RmVhdHVyZXMgVGVzdENvbnRy
b2xsZXI6OnBsYXRmb3JtU3BlY2lmaWNGZWF0dXJlRGVmYXVsdHNGb3JUZXN0KGNvbnN0IFRlc3RD
b21tYW5kJikgY29uc3QKIHsKLSAgICBvcHRpb25zLmVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMg
PSBmYWxzZTsKKyAgICBUZXN0RmVhdHVyZXMgZmVhdHVyZXM7CisgICAgZmVhdHVyZXMuYm9vbEZl
YXR1cmVzLmluc2VydCh7ICJlbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzIiwgZmFsc2UgfSk7Cisg
ICAgcmV0dXJuIGZlYXR1cmVzOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVFIKSW5kZXg6IExheW91
dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2Nzk0OCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE4IEBACisyMDIwLTEwLTA0ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNv
bT4KKworICAgICAgICBbVGVzdGluZ10gQWRkIHN1cHBvcnQgZm9yIHBlci1kaXJlY3Rvcnkgb3Zl
cnJpZGluZyBvZiB0ZXN0aW5nIG9wdGlvbnMgdmlhIG5ldyBUZXN0T3B0aW9ucy50eHQgZmlsZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzI5Nwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgZGly
ZWN0b3J5IGJhc2VkIFRlc3RPcHRpb25zLnR4dCBmaWxlcyB0byByZXBsYWNlIGhhcmQgY29kaW5n
IGluIFdlYktpdFRlc3RSdW5uZXIKKyAgICAgICAgZm9yIG9wdGlvbnMgb3ZlcnJpZGluZy4KKwor
ICAgICAgICAqIGZhc3Qvdmlld3BvcnQvVGVzdE9wdGlvbnMudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9pcGFkL2Zhc3Qvdmlld3BvcnQvVGVzdE9wdGlvbnMudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBzdmcvVzNDLVNWRy0xLjEtU0UvVGVzdE9wdGlvbnMudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBzdmcvVzNDLVNWRy0xLjEvVGVzdE9wdGlvbnMudHh0OiBBZGRlZC4KKwogMjAyMC0xMC0w
NCAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0ludGVn
cmF0aW9uXSBFbmFibGUgc29mdCBoeXBoZW4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvdmlld3Bv
cnQvVGVzdE9wdGlvbnMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvdmlld3Bv
cnQvVGVzdE9wdGlvbnMudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3Qvdmll
d3BvcnQvVGVzdE9wdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtp
dC10ZXN0LXJ1bm5lciBbIHVzZUZsZXhpYmxlVmlld3BvcnQ9dHJ1ZSBdCkluZGV4OiBMYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2lt
cG9ydGVkL3czYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2Nzk0OCkKKysrIExheW91dFRlc3RzL2lt
cG9ydGVkL3czYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAy
MC0xMC0wNCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgW1Rlc3Rp
bmddIEFkZCBzdXBwb3J0IGZvciBwZXItZGlyZWN0b3J5IG92ZXJyaWRpbmcgb2YgdGVzdGluZyBv
cHRpb25zIHZpYSBuZXcgVGVzdE9wdGlvbnMudHh0IGZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcyOTcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRzIGRpcmVjdG9yeSBiYXNlZCBUZXN0T3B0
aW9ucy50eHQgZmlsZXMgdG8gcmVwbGFjZSBoYXJkIGNvZGluZyBpbiBXZWJLaXRUZXN0UnVubmVy
CisgICAgICAgIGZvciBvcHRpb25zIG92ZXJyaWRpbmcuCisKKyAgICAgICAgKiBJbmRleGVkREIt
cHJpdmF0ZS1icm93c2luZy9UZXN0T3B0aW9ucy50eHQ6IEFkZGVkLgorCiAyMDIwLTEwLTAzICBP
cmlvbCBCcnVmYXUgIDxvYnJ1ZmF1QGlnYWxpYS5jb20+CiAKICAgICAgICAgW2Nzcy1saXN0c10g
SW1wbGVtZW50IGxpc3Qtc3R5bGUtdHlwZTogPHN0cmluZz4KSW5kZXg6IExheW91dFRlc3RzL2lt
cG9ydGVkL3czYy9JbmRleGVkREItcHJpdmF0ZS1icm93c2luZy9UZXN0T3B0aW9ucy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0luZGV4ZWREQi1wcml2YXRlLWJy
b3dzaW5nL1Rlc3RPcHRpb25zLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2MvSW5kZXhlZERCLXByaXZhdGUtYnJvd3NpbmcvVGVzdE9wdGlvbnMudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtpdC10ZXN0LXJ1bm5lciBbIHVzZUVwaGVtZXJh
bFNlc3Npb249dHJ1ZSBdCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9pcGFkL2Zhc3Qvdmll
d3BvcnQvVGVzdE9wdGlvbnMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3Jt
L2lwYWQvZmFzdC92aWV3cG9ydC9UZXN0T3B0aW9ucy50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5
b3V0VGVzdHMvcGxhdGZvcm0vaXBhZC9mYXN0L3ZpZXdwb3J0L1Rlc3RPcHRpb25zLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3ZWJraXQtdGVzdC1ydW5uZXIgWyB1c2VGbGV4aWJs
ZVZpZXdwb3J0PXRydWUgXQpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL1czQy1TVkctMS4xLVNFL1Rl
c3RPcHRpb25zLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvVzNDLVNWRy0xLjEt
U0UvVGVzdE9wdGlvbnMudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3N2Zy9XM0Mt
U1ZHLTEuMS1TRS9UZXN0T3B0aW9ucy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSBAQAor
d2Via2l0LXRlc3QtcnVubmVyIFsgdmlld1dpZHRoPTQ4MCB2aWV3SGVpZ2h0PTM2MCBdCkluZGV4
OiBMYXlvdXRUZXN0cy9zdmcvVzNDLVNWRy0xLjEvVGVzdE9wdGlvbnMudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL3N2Zy9XM0MtU1ZHLTEuMS9UZXN0T3B0aW9ucy50eHQJKG5vbmV4aXN0
ZW50KQorKysgTGF5b3V0VGVzdHMvc3ZnL1czQy1TVkctMS4xL1Rlc3RPcHRpb25zLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3ZWJraXQtdGVzdC1ydW5uZXIgWyB2aWV3V2lkdGg9
NDgwIHZpZXdIZWlnaHQ9MzYwIF0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410642</attachid>
            <date>2020-10-06 08:50:21 -0700</date>
            <delta_ts>2020-10-07 10:39:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217297-20201006085020.patch</filename>
            <type>text/plain</type>
            <size>106621</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODAyMSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE4NCBAQAorMjAyMC0xMC0wNSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgW1Rlc3RpbmddIEFkZCBzdXBwb3J0IGZvciBwZXItZGlyZWN0b3J5IG92ZXJyaWRp
bmcgb2YgdGVzdGluZyBvcHRpb25zIHZpYSBuZXcgVGVzdE9wdGlvbnMudHh0IGZpbGVzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcyOTcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGludHJvZHVj
ZXMgYSBuZXcgY29uY2VwdCBmb3Igd2Via2l0IHRlc3RzICh0aG9zZSB3aXRoaW4gdGhlIExheW91
dFRlc3RzIGRpcmVjdG9yeSkKKyAgICAgICAgdGhhdCBleHRlbmRzIHRoZSBleGlzdGluZyB0ZXN0
LWhlYWRlciBiYXNlZCBjb25maWd1cmF0aW9uIG9mIHRlc3Qgb3B0aW9ucyAodGhvc2UgY29tbWVu
dHMKKyAgICAgICAgYXQgdGhlIHRvcCBvZiBzb21ldCB0ZXN0IGZpbGVzIHRoYXQgbG9vayBsaWtl
ICJ3ZWJraXQtdGVzdC1ydW5uZXIgWyAuLi4gXSIpIHRvIGFsc28gYWxsb3cKKyAgICAgICAgZGly
ZWN0b3J5IHdpZGUgb3ZlcnJpZGluZyBvZiB0ZXN0IG9wdGlvbnMgdmlhIGEgbmV3IFRlc3RPcHRp
b25zLnR4dCBmaWxlLiBUaGVzZSBmaWxlcyBhcmUKKyAgICAgICAgZm9yIG5vdyBleHBlY3RlZCB0
byB1c2UgdGhlIHNhbWUgIndlYmtpdC10ZXN0LXJ1bm5lciBbIC4uLiBdIiBzeW50YXggYXMgdGhl
IHRlc3QtaGVhZGVyIGJhc2VkCisgICAgICAgIG9uZXMgZm9yIGNvbnNpc3RlbmN5IGFuZCBzaW1w
bGljaXR5IG9mIGltcGxlbWVudGF0aW9uLCBidXQgaW4gdGhlIGZ1dHVyZSB3ZSBtYXkgZGVjaWRl
IGl0CisgICAgICAgIG1ha2VzIG1vcmUgc2Vuc2UgdG8gdXRpbGl6ZSB0aGUgYWRkaXRpb25hbCBz
cGFjZS4KKworICAgICAgICBOb3cgdGhhdCB3ZSBoYXZlIGV2ZW4gbW9yZSBzb3VyY2VzIG9mIHRl
c3Qgb3B0aW9ucyBjb21pbmcgaW4sIHdlIG5lZWQgdG8gaGF2ZSBhIGRlZmluZWQgc2V0CisgICAg
ICAgIG9mIHJ1bGVzIGZvciBpbiB3aGljaCBvcmRlciBvcHRpb25zIHRha2UgcHJlY2VkZW5jZS4g
VGhlIG9yZGVyIGlzIChmcm9tIGxlYXN0IHRvIG1vc3QpOgorICAgICAgICAKKyAgICAgICAgLSBH
bG9iYWwgZmVhdHVyZXMgcGFzc2VkIHRvIFdlYktpdFRlc3RSdW5uZXIgdmlhIHRoZSBjb21tYW5k
IGxpbmUgKGUuZy4gLS1zaG93LXRvdWNoZXMpCisgICAgICAgIC0gSGFyZGNvZGVkIGZlYXR1cmVz
IGJhc2VkIG9uIHRoZSBwYXRoIG9mIHRoZSB0ZXN0IGJlaW5nIHJ1biAoaG9wZWZ1bGx5IHdlIGNh
biByZW1vdmUgYWxsIHNvb24pCisgICAgICAgIC0gSGFyZGNvZGVkIHBsYXRmb3JtIHNwZWNpZmlj
IGRlZmF1bHRzIChjdXJyZW50bHkgb25seSB1c2VkIGJ5IG1hY09TIGZvciB1c2VUaHJlYWRlZFNj
cm9sbGluZykuCisgICAgICAgIC0gRmVhdHVyZXMgZnJvbSBUZXN0T3B0aW9ucy50eHQgZmlsZXMs
IHdpdGggdGhlIG1vc3QgZGlyZWN0b3JpZXMgY2xvc2VyIHRvIC4vTGF5b3V0VGVzdHMgdGFrZWlu
ZworICAgICAgICAgIGxlc3MgcHJlY2VkZW5jZSB0aGFuIHRob3NlIGNsb3NlciB0byB0aGUgdGVz
dCBmaWxlIChlLmcuIGFuIG9wdGlvbiBpbiAKKyAgICAgICAgICAuL0xheW91dFRlc3RzL2Zhc3Qv
Zm9ybXMvVGVzdE9wdGlvbnMudHh0IHdpbGwgd2luIG92ZXIgb25lIGluIC4vTGF5b3V0VGVzdHMv
ZmFzdC9UZXN0T3B0aW9ucy50eHQpLgorICAgICAgICAtIEZlYXR1cmVzIGZyb20gdGhlIHRlc3Qg
aGVhZGVycyB3aXRoaW4gdGhlIHRlc3QgaXRzZWxmLgorICAgICAgICAtIEZpbmFsbHksIGEgc2Vj
b25kIGNoYW5jZSBmb3IgbW9yZSBwbGF0Zm9ybSBzcGVjaWZpYyBkZWZhdWx0cyAoY3VycmVubHkg
b25seSB1c2VkIHRoZSBjb2NvYSBwb3J0cworICAgICAgICAgIGZvciBzZXR0aW5nIGVuYWJsZVBy
b2Nlc3NTd2FwT25OYXZpZ2F0aW9uIGFuZCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiBi
YXNlZCBvbiBOU1VzZXJEZWZhdWx0cy4pCisgICAgICAgIAorICAgICAgICBIb3BlZnVsbHkgaW4g
dGhlIGZ1dHVyZSwgd2Ugd2lsbCBiZSBhYmxlIHRvIHNpbXBsaWZ5IHRoYXQgYXMgd2UgcmVtb3Zl
IHNvbWUgb2YgdGhlc2UgbGV2ZWxzLCBwZXJoYXBzCisgICAgICAgIGJ5IGV4dGVuZGluZyBUZXN0
T3B0aW9ucy50eHQgdG8gYmUgYWJsZSB0byBzZXQgcGxhdGZvcm0gc3BlY2ZpYyBvdmVycmlkZXMu
CisKKyAgICAgICAgVG8gbWFrZSB0aGlzIGNoYW5nZSB3b3JrLCBhbmQgcGF2ZSB0aGUgd2F5IGZv
ciBmdXR1cmUgYXV0b2dlbmVyYXRpb24gb2Ygc29tZSBvZiB0aGVzZSB0ZXN0IG9wdGlvbnMsCisg
ICAgICAgIHRoZSBUZXN0T3B0aW9ucyBzdHJ1Y3QgKG5vdyBjbGFzcykgd2FzIG92ZXJoYXVsZWQu
IEluc3RlYWQgb2Ygc3RvcmluZyB0aGUgc3RhdGUgaXRzZWxmLCBpdCBUZXN0T3B0aW9ucworICAg
ICAgICBpcyBub3cgYW4gaW1tdXRhYmxlIG93bmVyIG9mIGEgVGVzdEZlYXR1cmVzIG9iamVjdC4g
VGVzdEZlYXR1cmVzIGlzIGEgc2ltcGxlIHN0cnVjdCB0aGF0IGNvbnRhaW5zIG1hcHMgCisgICAg
ICAgIG9mIG9wdGlvbiBrZXlzIHRvIHZhbHVlcyBhbmQgY2FuIGJlIG1lcmdlZCB3aXRoIG90aGVy
IFRlc3RGZWF0dXJlcyBvYmplY3RzLiBUZXN0T3B0aW9ucyB0YWtlcyBhIAorICAgICAgICBUZXN0
RmVhdHVyZXMgYXQgY29uc3RydWN0aW9uLCBhbmQgZXhwb3NlcyBnZXR0ZXJzIGZvciBhbGwga2V5
cywgYXMgd2VsbCBhcyBkZWZhdWx0cyBmb3Igd2hlbiB0aGV5IGFyZQorICAgICAgICBub3QgaW4g
dGhlIG1hcHMuIEluIGZ1dHVyZSBjaGFuZ2VzLCBJIHdvdWxkIGxpa2UgdG8gcmVtb3ZlIG1hbnkg
b2YgdGhlc2UgKHRoZSBvbmVzIHRoYXQgY29ycmVzcG9uZAorICAgICAgICB3aXRoIFdlYktpdCBw
cmVmZXJlbmNlcyBhbnl3YXkpIGFuZCBoYXZlIHRoZSBrZXlzIGFuZCB2YWx1ZXMgYXV0b21hdGlj
YWxseSBkZWFsdCB3aXRoIGJ5IFdLUHJlZmVyZW5jZXMuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL09wdGlvbnMuY3BwOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvT3B0aW9ucy5o
OgorICAgICAgICBTd2l0Y2ggdG8gc3RkOjp1bm9yZGVyZWRfbWFwIGZvciBjb25zaXN0ZW5jeSBh
bmQgZWFzZSBvZiBjb252ZXJzaW9uLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9QbGF0
Zm9ybVdlYlZpZXcuaDoKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3Ojp2aWV3U3VwcG9y
dHNPcHRpb25zIGNvbnN0KToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3IFRlc3RPcHRpb25z
IGZ1bmN0aW9ucy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25z
Lmg6CisgICAgICAgIChXVFI6OnRvV0spOgorICAgICAgICAoV1RSOjp0b1dURlN0cmluZyk6Cisg
ICAgICAgIEFkZCBjb252ZXJzaW9ucyBmb3Igc3RkOjpzdHJpbmcuCisKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjppbml0
aWFsaXplKToKKyAgICAgICAgUmVwbGFjZSBzb21lIGJvb2xzIHdpdGggYSBuZXcgZ2xvYmFsIFRl
c3RGZWF0dXJlcyBpbnN0YW5jZSB0aGF0IGZvcm1zIHRoZSBiYXNlIG9mCisgICAgICAgIGFsbCBU
ZXN0RmVhdHVyZXMgbWVyZ2VzLgorICAgICAgICAKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xs
ZXI6OmdlbmVyYXRlQ29udGV4dENvbmZpZ3VyYXRpb24gY29uc3QpOgorICAgICAgICAoV1RSOjpU
ZXN0Q29udHJvbGxlcjo6Z2VuZXJhdGVQYWdlQ29uZmlndXJhdGlvbik6CisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpjcmVhdGVXZWJWaWV3V2l0aE9wdGlvbnMpOgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6ZW5zdXJlVmlld1N1cHBvcnRzT3B0aW9uc0ZvclRlc3QpOgorICAg
ICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRQcmVmZXJlbmNlc1RvQ29uc2lzdGVudFZh
bHVlcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0
ZW50VmFsdWVzKToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3IFRlc3RPcHRpb25zIGZ1bmN0
aW9ucy4KKyAgICAgICAgCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpjcmVhdGVUZXN0
VVJMKToKKyAgICAgICAgRXhwb3NlIGFzIGEgc3RhdGljIG1lbWJlciBmdW5jdGlvbiBvbiBUZXN0
Q29udHJvbGxlciBmb3IgdXNlIGluIG90aGVyIGZpbGVzLgorICAgICAgICAKKyAgICAgICAgKFdU
Ujo6VGVzdENvbnRyb2xsZXI6OnRlc3RPcHRpb25zRm9yVGVzdCBjb25zdCk6CisgICAgICAgIFJl
d29yayB0byBiZSBhIHNlcXVlbmNlIG9mIFRlc3RGZWF0dXJlcyBtZXJnZXMuCisgICAgICAgIAor
ICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6dXBkYXRlV2ViVmlld1NpemVGb3JUZXN0KToK
KyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnVwZGF0ZVdpbmRvd1NjYWxlRm9yVGVzdCk6
CisgICAgICAgIFVwZGF0ZSB0byBjYWxsIG5ldyBUZXN0T3B0aW9ucyBmdW5jdGlvbnMuCisgICAg
ICAgIAorICAgICAgICAoV1RSOjpjcmVhdGVUZXN0VVJMKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Ujo6cGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6
cGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1JlbGF0aXZlUGF0aCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVFI6OnBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNVUkwpOiBEZWxldGVkLgorICAg
ICAgICAoV1RSOjp1cGRhdGVUZXN0T3B0aW9uc0Zyb21UZXN0SGVhZGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRkVGVzdE9wdGlvbnMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICBNb3ZlZCBUZXN0T3B0aW9ucyBwYXJzaW5nIHRvIFRlc3RPcHRp
b25zLmNwcAorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6
CisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpjcmVhdGVUZXN0U2V0dGluZ3NEaWN0aW9u
YXJ5KToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3IFRlc3RPcHRpb25zIGZ1bmN0aW9ucy4K
KworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuaDoKKyAgICAgICAgUmV3
b3JrcyBUZXN0T3B0aW9ucyB0byBiZSBhbiBpbW11dGFibGUgb3duZXIgb2YgYSBUZXN0RmVhdHVy
ZXMgc3RydWN0LCB3aGljaCBpcyBhIHNldAorICAgICAgICBvZiBtYXBzIHRoYXQgbWFwIGZlYXR1
cmUgc3RyaW5nIGtleXMsIHRvIHZhbHVlcyBvZiB0eXBlIGJvb2wsIGRvdWJsZSwgc3RyaW5nIG9y
IHN0cmluZyB2ZWN0b3IuCisgICAgICAgIFJlLXVzZXMgZXhpc3RpbmcgdGVzdCBoZWFkZXIgcGFy
c2luZyBjb2RlIChtb3ZlZCBoZXJlIGZyb20gVGVzdENvbnRyb2xsZXIuY3BwKSB0byBhbHNvCisg
ICAgICAgIHBhcnNlIG5ldyBUZXN0T3B0aW9ucy50eHQgZmlsZXMuCisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5jcHA6CisgICAgICAgIChXVFI6OmR1bXBGZWF0dXJlcyk6
CisgICAgICAgIEhlbHBlciB0byBkdW1wIGZlYXR1cmVzIHRvIHN0ZGVyciwgdXNlZnVsIGZvciBk
ZWJ1Z2dpbmcuCisKKyAgICAgICAgKFdUUjo6a2V5VHlwZSk6CisgICAgICAgIEhlbHBlciBmb3Ig
cGFyc2VyIHRvIGtub3cgd2hpY2ggdmFsdWUgcGFyc2VyIHRvIHVzZS4KKworICAgICAgICAoV1RS
OjpwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUpOgorICAgICAgICAoV1RSOjpwYXJzZVN0cmlu
Z1Rlc3RIZWFkZXJWYWx1ZUFzUmVsYXRpdmVQYXRoKToKKyAgICAgICAgKFdUUjo6cGFyc2VTdHJp
bmdUZXN0SGVhZGVyVmFsdWVBc1VSTCk6CisgICAgICAgIFZhbHVlIHBhcnNlcnMgbW92ZWQgZnJv
bSBUZXN0Q29udHJvbGxlci5jcHAKKworICAgICAgICAoV1RSOjpwYXJzZVRlc3RIZWFkZXIpOgor
ICAgICAgICBIZWFkZXIgcGFyc2VyIG1vdmVkIGZyb20gVGVzdENvbnRyb2xsZXIuY3BwLiBVcGRh
dGUgdG8gbm93IHJldHVybgorICAgICAgICBhIFRlc3RGZWF0dXJlcyBvYmplY3QgYW5kIHVzZSBr
ZXlUeXBlIHRvIHBpY2sgdmFsdWUgcGFyc2VyIHJhdGhlcgorICAgICAgICB0aGFuIGlubGluaW5n
IHRoZSBpZiBzdGF0ZW1lbnRzLgorICAgICAgICAKKyAgICAgICAgKFdUUjo6aGFyZGNvZGVkRmVh
dHVyZXNCYXNlZE9uUGF0aEZvclRlc3QpOgorICAgICAgICAoV1RSOjpzaG91bGRNYWtlVmlld3Bv
cnRGbGV4aWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OnNob3VsZFVzZUZpeGVkTGF5b3V0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6aXNTVkdUZXN0UGF0aCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVFI6OnNob3VsZFVzZUVwaGVtZXJhbFNlc3Npb24pOiBEZWxldGVkLgorICAgICAgICBN
b3ZlZCBmcm9tIHRoZSBUZXN0T3B0aW9ucyBjb250cnVjdG9yIGFuZCByZW1vdmUgY2FzZXMgZm9y
IGZsZXhpYmxlTGF5b3V0LAorICAgICAgICBmaXhlZExheW91dCwgaXNTVkdUZXN0LCBhbmQgdXNl
RXBoZW1lcmFsU2Vzc2lvbiwgd2hpY2ggYXJlIGFsbCBlaXRoZXIgbm93CisgICAgICAgIGhhbmRs
ZWQgYnkgVGVzdE9wdGlvbnMudHh0IGZpbGVzIG9yIGFyZSBubyBsb25nZXIgbmVjZXNzYXJ5Lgor
CisgICAgICAgIChXVFI6Om1lcmdlKToKKyAgICAgICAgTWVyZ2VzIHR3byBUZXN0RmVhdHVyZXMg
b2JqZWN0cy4gSWYgYm90aCBjb250YWluIHRoZSBzYW1lIGtleSwgdGhlICdhZGRpdGlvbmFsJwor
ICAgICAgICBUZXN0RmVhdHVyZXMgb3ZlcnJpZGVzIHRoZSAnYmFzZScgVGVzdEZlYXR1cmVzLgor
CisgICAgICAgIChXVFI6OmZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0T3B0aW9uc0ZpbGVzRm9yVGVz
dCk6CisgICAgICAgIENyZWF0ZXMgYSBUZXN0RmVhdHVyZXMgb2JqZWN0IGJ5IGl0ZXJhdGluZyBh
bGwgdGhlIHN1YmRpcmVjdG9yaWVzIGZyb20gTGF5b3V0VGVzdHMKKyAgICAgICAgdG8gdGhlIGN1
cnJlbnQgdGVzdHMgZGlyZWN0b3J5LCBsb29raW5nIGZvciBUZXN0T3B0aW9ucy50eHQgZmlsZXMg
YW5kIG1lcmdpbmcKKyAgICAgICAgdGhlbSB0b2dldGhlci4KKworICAgICAgICAoV1RSOjpmZWF0
dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3QpOgorICAgICAgICBDcmVhdGVzIGEgVGVz
dEZlYXR1cmVzIGZvciB0aGUgdGVzdCBoZWFkZXJzIG9mIHRoZSBjdXJyZW50IHRlc3QuCisKKyAg
ICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW06Cisg
ICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZU92ZXJy
aWRlc0RlZmF1bHRzRm9yVGVzdCBjb25zdCk6CisgICAgICAgIFJld29ya2VkIHRvIG5vdyByZXR1
cm4gYSBUZXN0RmVhdHVyZXMgb2JqZWN0IHRoYXQgd2lsbCBiZSBtZXJnZWQsIHJhdGhlciB0aGFu
IHVwZGF0aW5nCisgICAgICAgIGEgVGVzdE9wdGlvbnMuIE1vdmVzIGVuYWJsZUluQXBwQnJvd3Nl
clByaXZhY3kgd29yayB0byBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1XaWxsUnVuVGVzdAorICAg
ICAgICB3aGVyZSBpdCBpcyBtb3JlIGFwcHJvcHJpYXRlLgorCisgICAgICAgIChXVFI6OlRlc3RD
b250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemVEYXRhU3RvcmUpOgorICAgICAgICAoV1RSOjpU
ZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1DcmVhdGVXZWJWaWV3KToKKyAgICAgICAgKFdUUjo6VGVz
dENvbnRyb2xsZXI6OmZpbmlzaENyZWF0aW5nUGxhdGZvcm1XZWJWaWV3KToKKyAgICAgICAgKFdU
Ujo6VGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcik6CisgICAg
ICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpjb2NvYVJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1
ZXMpOgorICAgICAgICAoV1RSOjpjb250ZW50TW9kZSk6CisgICAgICAgIFVwZGF0ZSB0byBjYWxs
IG5ldyBUZXN0T3B0aW9ucyBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6
OnBsYXRmb3JtUmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6CisgICAgICAgIChXVFI6OlRl
c3RDb250cm9sbGVyOjpwbGF0Zm9ybUNvbmZpZ3VyZVZpZXdGb3JUZXN0KToKKyAgICAgICAgVXBk
YXRlIHRvIGNhbGwgbmV3IFRlc3RPcHRpb25zIGZ1bmN0aW9ucy4KKyAgICAgICAgCisgICAgICAg
IChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1bHRzRm9y
VGVzdCBjb25zdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1cGRhdGVQbGF0Zm9y
bVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgTW92
ZWQgR2VuZXJhdGVkVG91Y2hlc0RlYnVnV2luZG93IHdvcmsgdG8gVGVzdENvbnRyb2xsZXI6OnBs
YXRmb3JtQ29uZmlndXJlVmlld0ZvclRlc3QKKyAgICAgICAgd2hlcmUgaXQgaXMgbW9yZSBhcHBy
b3ByaWF0ZSBhbmQgcmVtb3ZlZCBzaG91bGRTaG93VG91Y2hlcyBzZXR0aW5nIGFzIHRoYXQgaXMg
ZG9uZQorICAgICAgICBnbG9iYWxseSBub3cuIAorICAgICAgICAKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL21hYy9QbGF0Zm9ybVdlYlZpZXdNYWMubW06CisgICAgICAgIChXVFI6OlBsYXRm
b3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3
IFRlc3RPcHRpb25zIGZ1bmN0aW9ucy4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvbWFj
L1Rlc3RDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QgY29uc3QpOgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9yVGVz
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIFJlbW92ZSBzaG91bGRVc2VSZW1vdGVMYXllclRy
ZWUgYW5kIHNob3VsZFNob3dXZWJWaWV3LCBhcyB0aG9zZSBhcmUgbm93IGRvbmUgZ2xvYmFsbHks
CisgICAgICAgIGFuZCByZS1pbXBsZW1lbnRlZCB1c2VUaHJlYWRlZFNjcm9sbGluZyB0byB1c2Ug
Ym9vbEZlYXR1cmVzLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci93aW4vVGVzdENvbnRy
b2xsZXJXaW4uY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1TcGVj
aWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QgY29uc3QpOgorICAgICAgICAoV1RSOjpUZXN0Q29u
dHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9yVGVzdCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIFVwZGF0ZWQgZm9yIG5ldyBzaWduYXR1cmUuCisKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL3dwZS9UZXN0Q29udHJvbGxlcldQRS5jcHA6CisgICAgICAgIChX
VFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1bHRzRm9yVGVz
dCBjb25zdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjp1cGRhdGVQbGF0Zm9ybVNw
ZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgVXBkYXRl
ZCBmb3IgbmV3IHNpZ25hdHVyZS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvZ3RrL1Rl
c3RDb250cm9sbGVyR1RLLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnBsYXRm
b3JtU3BlY2lmaWNGZWF0dXJlRGVmYXVsdHNGb3JUZXN0IGNvbnN0KToKKyAgICAgICAgKFdUUjo6
VGVzdENvbnRyb2xsZXI6OnVwZGF0ZVBsYXRmb3JtU3BlY2lmaWNUZXN0T3B0aW9uc0ZvclRlc3Qg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICBVcGRhdGVkIGZvciBuZXcgc2lnbmF0dXJlLgorCiAy
MDIwLTEwLTA1ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAg
ICAgIERpc2FibGUgbWVkaWEgY2FwdHVyZSBpZiBhbiBhcHAncyBlbnRpdGxlbWVudHMgd29uJ3Qg
YWxsb3cgYWNjZXNzIHRvIGNhcHR1cmUgZGV2aWNlcwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL09w
dGlvbnMuY3BwCShyZXZpc2lvbiAyNjgwMjEpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL09w
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDcgQEAgc3RhdGljIGJvb2wg
aGFuZGxlT3B0aW9uQWxsb3dlZEhvc3QoT3B0aQogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0
aWMgYm9vbCBwYXJzZUZlYXR1cmUoU3RyaW5nIGZlYXR1cmVTdHJpbmcsIEhhc2hNYXA8U3RyaW5n
LCBib29sPiYgZmVhdHVyZXMpCitzdGF0aWMgYm9vbCBwYXJzZUZlYXR1cmUoU3RyaW5nIGZlYXR1
cmVTdHJpbmcsIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4mIGZlYXR1cmVz
KQogewogICAgIGF1dG8gc3RyaW5ncyA9IGZlYXR1cmVTdHJpbmcuc3BsaXQoJz0nKTsKICAgICBp
ZiAoc3RyaW5ncy5pc0VtcHR5KCkgfHwgc3RyaW5ncy5zaXplKCkgPiAyKQpAQCAtMTIyLDcgKzEy
Miw3IEBAIHN0YXRpYyBib29sIHBhcnNlRmVhdHVyZShTdHJpbmcgZmVhdHVyZVMKICAgICBhdXRv
IGZlYXR1cmVOYW1lID0gc3RyaW5nc1swXTsKICAgICBib29sIGVuYWJsZWQgPSBzdHJpbmdzLnNp
emUoKSA9PSAxIHx8IHN0cmluZ3NbMV0gPT0gInRydWUiOwogCi0gICAgZmVhdHVyZXMuc2V0KGZl
YXR1cmVOYW1lLCBlbmFibGVkKTsKKyAgICBmZWF0dXJlcy5pbnNlcnQoeyBmZWF0dXJlTmFtZS51
dGY4KCkuZGF0YSgpLCBlbmFibGVkIH0pOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBU
b29scy9XZWJLaXRUZXN0UnVubmVyL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJL
aXRUZXN0UnVubmVyL09wdGlvbnMuaAkocmV2aXNpb24gMjY4MDIxKQorKysgVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDggQEAKICNp
bmNsdWRlIDxzZXQ+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdHJpbmc+CisjaW5j
bHVkZSA8dW5vcmRlcmVkX21hcD4KICNpbmNsdWRlIDx2ZWN0b3I+Ci0jaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNTcsOCArNTcs
OCBAQCBzdHJ1Y3QgT3B0aW9ucyB7CiAjZW5kaWYKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmlu
Zz4gcGF0aHM7CiAgICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGFsbG93ZWRIb3N0czsKLSAgICBI
YXNoTWFwPFN0cmluZywgYm9vbD4gaW50ZXJuYWxGZWF0dXJlczsKLSAgICBIYXNoTWFwPFN0cmlu
ZywgYm9vbD4gZXhwZXJpbWVudGFsRmVhdHVyZXM7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0
ZDo6c3RyaW5nLCBib29sPiBpbnRlcm5hbEZlYXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21h
cDxzdGQ6OnN0cmluZywgYm9vbD4gZXhwZXJpbWVudGFsRmVhdHVyZXM7CiB9OwogCiBjbGFzcyBP
cHRpb24gewpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCShy
ZXZpc2lvbiAyNjgwMjEpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmll
dy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0LDcgQEAgcHVibGljOgogICAgIHZvaWQg
cmVtb3ZlRnJvbVdpbmRvdygpOwogICAgIHZvaWQgYWRkVG9XaW5kb3coKTsKIAotICAgIGJvb2wg
dmlld1N1cHBvcnRzT3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykgY29uc3QgeyBy
ZXR1cm4gIW9wdGlvbnMucnVuU2luZ2x5ICYmIG1fb3B0aW9ucy5oYXNTYW1lSW5pdGlhbGl6YXRp
b25PcHRpb25zKG9wdGlvbnMpOyB9CisgICAgYm9vbCB2aWV3U3VwcG9ydHNPcHRpb25zKGNvbnN0
IFRlc3RPcHRpb25zJiBvcHRpb25zKSBjb25zdCB7IHJldHVybiAhb3B0aW9ucy5ydW5TaW5nbHko
KSAmJiBtX29wdGlvbnMuaGFzU2FtZUluaXRpYWxpemF0aW9uT3B0aW9ucyhvcHRpb25zKTsgfQog
CiAgICAgUGxhdGZvcm1JbWFnZSB3aW5kb3dTbmFwc2hvdEltYWdlKCk7CiAgICAgY29uc3QgVGVz
dE9wdGlvbnMmIG9wdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX29wdGlvbnM7IH0KSW5kZXg6IFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaAkocmV2aXNpb24gMjY4MDIxKQor
KysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPFdlYktpdC9XS1N0cmluZ1ByaXZhdGUuaD4K
ICNpbmNsdWRlIDxzc3RyZWFtPgogI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+
CiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVBcnJheS5oPgpAQCAtNTksNiArNjAsMTEgQEAgaW5saW5l
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dLKGNvbgogICAgIHJldHVybiBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHN0cmluZykpOwogfQogCitpbmxpbmUgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHRvV0soY29uc3Qgc3RkOjpzdHJpbmcmIHN0cmluZykKK3sKKyAg
ICByZXR1cm4gdG9XSyhzdHJpbmcuY19zdHIoKSk7Cit9CisKIGlubGluZSBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gdG9XSyhjb25zdCBXVEY6OlN0cmluZyYgc3RyaW5nKQogewogICAgIHJldHVy
biB0b1dLKHN0cmluZy51dGY4KCkuZGF0YSgpKTsKQEAgLTExNCw2ICsxMjAsMTEgQEAgaW5saW5l
IFdURjo6U3RyaW5nIHRvV1RGU3RyaW5nKGNvbnN0IEpTUgogICAgIHJldHVybiB0b1dURlN0cmlu
ZyhzdHJpbmcuZ2V0KCkpOwogfQogCitpbmxpbmUgV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmcoY29u
c3Qgc3RkOjpzdHJpbmcmIHN0cmluZykKK3sKKyAgICByZXR1cm4gV1RGOjpTdHJpbmc6OmZyb21V
VEY4KHN0cmluZy5jX3N0cigpKTsKK30KKwogaW5saW5lIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiB0b1dLU3RyaW5nKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQogewog
ICAgIHJldHVybiB0b1dLKGNyZWF0ZUpTU3RyaW5nKGNvbnRleHQsIHZhbHVlKS5nZXQoKSk7CkBA
IC0xMjUsNCArMTM2LDI0IEBAIGlubGluZSBXVEY6OlN0cmluZyB0b1dURlN0cmluZyhKU0NvbnRl
eHQKICAgICByZXR1cm4gdG9XVEZTdHJpbmcoY3JlYXRlSlNTdHJpbmcoY29udGV4dCwgdmFsdWUp
KTsKIH0KIAoraW5saW5lIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzcGxpdChjb25zdCBzdGQ6
OnN0cmluZyYgc3RyaW5nLCBjaGFyIGRlbGltaXRlcikKK3sKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6
OnN0cmluZz4gcmVzdWx0OworCisgICAgc2l6ZV90IGkgPSAwOworICAgIHdoaWxlIChpIDwgc3Ry
aW5nLnNpemUoKSkgeworICAgICAgICBhdXRvIGZvdW5kSW5kZXggPSBzdHJpbmcuZmluZF9maXJz
dF9vZihkZWxpbWl0ZXIsIGkpOworCisgICAgICAgIGlmIChmb3VuZEluZGV4ICE9IGkpCisgICAg
ICAgICAgICByZXN1bHQucHVzaF9iYWNrKHN0cmluZy5zdWJzdHIoaSwgZm91bmRJbmRleCAtIGkp
KTsKKworICAgICAgICBpZiAoZm91bmRJbmRleCA9PSBzdGQ6OnN0cmluZ192aWV3OjpucG9zKQor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaSA9IGZvdW5kSW5kZXggKyAxOworICAgIH0K
KworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdUUgpJbmRleDogVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDI2ODAyMSkK
KysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDksMTIgKzEwOSw2IEBAIHN0YXRpYyBjb25zdGV4cHIgYXV0byBwYXRoU2VwYXJh
dG9yID0gJ1wKIHN0YXRpYyBjb25zdGV4cHIgYXV0byBwYXRoU2VwYXJhdG9yID0gJy8nOwogI2Vu
ZGlmCiAKLWNvbnN0IHVuc2lnbmVkIFRlc3RDb250cm9sbGVyOjp2aWV3V2lkdGggPSA4MDA7Ci1j
b25zdCB1bnNpZ25lZCBUZXN0Q29udHJvbGxlcjo6dmlld0hlaWdodCA9IDYwMDsKLQotY29uc3Qg
dW5zaWduZWQgVGVzdENvbnRyb2xsZXI6OnczY1NWR1ZpZXdXaWR0aCA9IDQ4MDsKLWNvbnN0IHVu
c2lnbmVkIFRlc3RDb250cm9sbGVyOjp3M2NTVkdWaWV3SGVpZ2h0ID0gMzYwOwotCiBjb25zdCBX
VEY6OlNlY29uZHMgVGVzdENvbnRyb2xsZXI6OmRlZmF1bHRTaG9ydFRpbWVvdXQgPSA1X3M7CiBj
b25zdCBXVEY6OlNlY29uZHMgVGVzdENvbnRyb2xsZXI6Om5vVGltZW91dCA9IC0xX3M7CiAKQEAg
LTQ2OSwxNSArNDYzLDE3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemUoaW50IGFy
Z2MKICAgICBtX3Nob3VsZER1bXBQaXhlbHNGb3JBbGxUZXN0cyA9IG9wdGlvbnMuc2hvdWxkRHVt
cFBpeGVsc0ZvckFsbFRlc3RzOwogICAgIG1fZm9yY2VDb21wbGV4VGV4dCA9IG9wdGlvbnMuZm9y
Y2VDb21wbGV4VGV4dDsKICAgICBtX3Nob3VsZFVzZUFjY2VsZXJhdGVkRHJhd2luZyA9IG9wdGlv
bnMuc2hvdWxkVXNlQWNjZWxlcmF0ZWREcmF3aW5nOwotICAgIG1fc2hvdWxkVXNlUmVtb3RlTGF5
ZXJUcmVlID0gb3B0aW9ucy5zaG91bGRVc2VSZW1vdGVMYXllclRyZWU7CiAgICAgbV9wYXRocyA9
IG9wdGlvbnMucGF0aHM7CiAgICAgbV9hbGxvd2VkSG9zdHMgPSBvcHRpb25zLmFsbG93ZWRIb3N0
czsKLSAgICBtX3Nob3VsZFNob3dXZWJWaWV3ID0gb3B0aW9ucy5zaG91bGRTaG93V2ViVmlldzsK
LSAgICBtX3Nob3VsZFNob3dUb3VjaGVzID0gb3B0aW9ucy5zaG91bGRTaG93VG91Y2hlczsKICAg
ICBtX2NoZWNrRm9yV29ybGRMZWFrcyA9IG9wdGlvbnMuY2hlY2tGb3JXb3JsZExlYWtzOwogICAg
IG1fYWxsb3dBbnlIVFRQU0NlcnRpZmljYXRlRm9yQWxsb3dlZEhvc3RzID0gb3B0aW9ucy5hbGxv
d0FueUhUVFBTQ2VydGlmaWNhdGVGb3JBbGxvd2VkSG9zdHM7Ci0gICAgbV9pbnRlcm5hbEZlYXR1
cmVzID0gb3B0aW9ucy5pbnRlcm5hbEZlYXR1cmVzOwotICAgIG1fZXhwZXJpbWVudGFsRmVhdHVy
ZXMgPSBvcHRpb25zLmV4cGVyaW1lbnRhbEZlYXR1cmVzOworICAgIAorICAgIG1fZ2xvYmFsRmVh
dHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzID0gb3B0aW9ucy5pbnRlcm5hbEZlYXR1cmVzOwor
ICAgIG1fZ2xvYmFsRmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMgPSBvcHRpb25zLmV4cGVy
aW1lbnRhbEZlYXR1cmVzOworICAgIG1fZ2xvYmFsRmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2Vy
dCh7ICJ1c2VSZW1vdGVMYXllclRyZWUiLCBvcHRpb25zLnNob3VsZFVzZVJlbW90ZUxheWVyVHJl
ZSB9KTsKKyAgICBtX2dsb2JhbEZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAic2hvdWxk
U2hvd1dlYlZpZXciLCBvcHRpb25zLnNob3VsZFNob3dXZWJWaWV3IH0pOworICAgIG1fZ2xvYmFs
RmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJzaG91bGRTaG93VG91Y2hlcyIsIG9wdGlv
bnMuc2hvdWxkU2hvd1RvdWNoZXMgfSk7CisKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09M
QVRFRF9UUkVFKQogICAgIG1fYWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1vZGUgPSBvcHRpb25z
LmFjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVNb2RlOwogI2VuZGlmCkBAIC00OTksNyArNDk1LDcg
QEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZShpbnQgYXJnYwogICAgIG1fZXZlbnRT
ZW5kZXJQcm94eSA9IG1ha2VVbmlxdWU8RXZlbnRTZW5kZXJQcm94eT4odGhpcyk7CiB9CiAKLVdL
UmV0YWluUHRyPFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWY+IFRlc3RDb250cm9sbGVyOjpnZW5l
cmF0ZUNvbnRleHRDb25maWd1cmF0aW9uKGNvbnN0IFRlc3RPcHRpb25zOjpDb250ZXh0T3B0aW9u
cyYgb3B0aW9ucykgY29uc3QKK1dLUmV0YWluUHRyPFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWY+
IFRlc3RDb250cm9sbGVyOjpnZW5lcmF0ZUNvbnRleHRDb25maWd1cmF0aW9uKGNvbnN0IENvbnRl
eHRPcHRpb25zJiBvcHRpb25zKSBjb25zdAogewogICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFk
b3B0V0soV0tDb250ZXh0Q29uZmlndXJhdGlvbkNyZWF0ZSgpKTsKICAgICBXS0NvbnRleHRDb25m
aWd1cmF0aW9uU2V0SW5qZWN0ZWRCdW5kbGVQYXRoKGNvbmZpZ3VyYXRpb24uZ2V0KCksIGluamVj
dGVkQnVuZGxlUGF0aCgpKTsKQEAgLTU2MiwxMCArNTU4LDExIEBAIFdLV2Vic2l0ZURhdGFTdG9y
ZVJlZiBUZXN0Q29udHJvbGxlcjo6d2UKIAogV0tSZXRhaW5QdHI8V0tQYWdlQ29uZmlndXJhdGlv
blJlZj4gVGVzdENvbnRyb2xsZXI6OmdlbmVyYXRlUGFnZUNvbmZpZ3VyYXRpb24oY29uc3QgVGVz
dE9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKCFtX2NvbnRleHQgfHwgIW1fY29udGV4dE9w
dGlvbnMtPmhhc1NhbWVJbml0aWFsaXphdGlvbk9wdGlvbnMob3B0aW9ucy5jb250ZXh0T3B0aW9u
cykpIHsKLSAgICAgICAgYXV0byBjb250ZXh0Q29uZmlndXJhdGlvbiA9IGdlbmVyYXRlQ29udGV4
dENvbmZpZ3VyYXRpb24ob3B0aW9ucy5jb250ZXh0T3B0aW9ucyk7CisgICAgYXV0byBjb250ZXh0
T3B0aW9ucyA9IG9wdGlvbnMuY29udGV4dE9wdGlvbnMoKTsKKyAgICBpZiAoIW1fY29udGV4dCB8
fCAhbV9jb250ZXh0T3B0aW9ucy0+aGFzU2FtZUluaXRpYWxpemF0aW9uT3B0aW9ucyhjb250ZXh0
T3B0aW9ucykpIHsKKyAgICAgICAgYXV0byBjb250ZXh0Q29uZmlndXJhdGlvbiA9IGdlbmVyYXRl
Q29udGV4dENvbmZpZ3VyYXRpb24oY29udGV4dE9wdGlvbnMpOwogICAgICAgICBtX2NvbnRleHQg
PSBwbGF0Zm9ybUFkanVzdENvbnRleHQoYWRvcHRXSyhXS0NvbnRleHRDcmVhdGVXaXRoQ29uZmln
dXJhdGlvbihjb250ZXh0Q29uZmlndXJhdGlvbi5nZXQoKSkpLmdldCgpLCBjb250ZXh0Q29uZmln
dXJhdGlvbi5nZXQoKSk7Ci0gICAgICAgIG1fY29udGV4dE9wdGlvbnMgPSBvcHRpb25zLmNvbnRl
eHRPcHRpb25zOworICAgICAgICBtX2NvbnRleHRPcHRpb25zID0gY29udGV4dE9wdGlvbnM7CiAK
ICAgICAgICAgbV9nZW9sb2NhdGlvblByb3ZpZGVyID0gbWFrZVVuaXF1ZTxHZW9sb2NhdGlvblBy
b3ZpZGVyTW9jaz4obV9jb250ZXh0LmdldCgpKTsKIApAQCAtNjI3LDcgKzYyNCw3IEBAIFdLUmV0
YWluUHRyPFdLUGFnZUNvbmZpZ3VyYXRpb25SZWY+IFRlc3QKICAgICBXS1BhZ2VDb25maWd1cmF0
aW9uU2V0Q29udGV4dChwYWdlQ29uZmlndXJhdGlvbi5nZXQoKSwgbV9jb250ZXh0LmdldCgpKTsK
ICAgICBXS1BhZ2VDb25maWd1cmF0aW9uU2V0UGFnZUdyb3VwKHBhZ2VDb25maWd1cmF0aW9uLmdl
dCgpLCBtX3BhZ2VHcm91cC5nZXQoKSk7CiAgICAgCi0gICAgaWYgKG9wdGlvbnMudXNlRXBoZW1l
cmFsU2Vzc2lvbikgeworICAgIGlmIChvcHRpb25zLnVzZUVwaGVtZXJhbFNlc3Npb24oKSkgewog
ICAgICAgICBhdXRvIGVwaGVtZXJhbERhdGFTdG9yZSA9IGFkb3B0V0soV0tXZWJzaXRlRGF0YVN0
b3JlQ3JlYXRlTm9uUGVyc2lzdGVudERhdGFTdG9yZSgpKTsKICAgICAgICAgV0tQYWdlQ29uZmln
dXJhdGlvblNldFdlYnNpdGVEYXRhU3RvcmUocGFnZUNvbmZpZ3VyYXRpb24uZ2V0KCksIGVwaGVt
ZXJhbERhdGFTdG9yZS5nZXQoKSk7CiAgICAgfQpAQCAtNjM5LDExICs2MzYsMTIgQEAgV0tSZXRh
aW5QdHI8V0tQYWdlQ29uZmlndXJhdGlvblJlZj4gVGVzdAogCiB2b2lkIFRlc3RDb250cm9sbGVy
OjpjcmVhdGVXZWJWaWV3V2l0aE9wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpCiB7
CisgICAgYXV0byBhcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIgPSBvcHRpb25zLmFwcGxpY2F0
aW9uQnVuZGxlSWRlbnRpZmllcigpOwogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGlmICghb3B0
aW9ucy5hcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIuaXNFbXB0eSgpKSB7CisgICAgaWYgKCFh
cHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIuZW1wdHkoKSkgewogICAgICAgICAvLyBUaGUgYnVu
ZGxlIGlkZW50aWZpZXIgY2FuIG9ubHkgYmUgc2V0IG9uY2UgcGVyIHRlc3QsIGFuZCBpcyBjbGVh
cmVkIGJldHdlZW4gdGVzdHMuCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2hhc1NldEFwcGxp
Y2F0aW9uQnVuZGxlSWRlbnRpZmllcik7Ci0gICAgICAgIHNldEFwcGxpY2F0aW9uQnVuZGxlSWRl
bnRpZmllcihvcHRpb25zLmFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcik7CisgICAgICAgIHNl
dEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcihhcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIp
OwogICAgICAgICBtX2hhc1NldEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllciA9IHRydWU7CiAg
ICAgfQogI2VuZGlmCkBAIC02ODYsNyArNjg0LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6Y3Jl
YXRlV2ViVmlld1dpdGhPcAogICAgICAgICAwLCAvLyBkaWREcmF3CiAgICAgICAgIDAsIC8vIHBh
Z2VEaWRTY3JvbGwKICAgICAgICAgMCwgLy8gZXhjZWVkZWREYXRhYmFzZVF1b3RhLAotICAgICAg
ICBvcHRpb25zLnNob3VsZEhhbmRsZVJ1bk9wZW5QYW5lbCA/IHJ1bk9wZW5QYW5lbCA6IDAsCisg
ICAgICAgIG9wdGlvbnMuc2hvdWxkSGFuZGxlUnVuT3BlblBhbmVsKCkgPyBydW5PcGVuUGFuZWwg
OiAwLAogICAgICAgICBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0
LAogICAgICAgICAwLCAvLyBoZWFkZXJIZWlnaHQKICAgICAgICAgMCwgLy8gZm9vdGVySGVpZ2h0
CkBAIC03OTUsOSArNzkzLDkgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6Y3JlYXRlV2ViVmlld1dp
dGhPcAogICAgIC8vIHNvbWV0aGluZyBlbHNlIGZvciBzcGVjaWZpYyB0ZXN0cyB0aGF0IG5lZWQg
dG8gcnVuIGF0IGEgZGlmZmVyZW50IHdpbmRvdyBzY2FsZS4KICAgICBtX21haW5XZWJWaWV3LT5j
aGFuZ2VXaW5kb3dTY2FsZUlmTmVlZGVkKDEpOwogICAgIAotICAgIGlmICghb3B0aW9ucy5hcHBs
aWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIuaXNFbXB0eSgpKSB7CisgICAgaWYgKCFhcHBsaWNhdGlv
bkJ1bmRsZUlkZW50aWZpZXIuZW1wdHkoKSkgewogICAgICAgICByZWluaXRpYWxpemVBcHBCb3Vu
ZERvbWFpbnMoKTsKLSAgICAgICAgdXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1Byb2Nl
c3Mob3B0aW9ucy5hcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIpOworICAgICAgICB1cGRhdGVC
dW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2VzcyhhcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZp
ZXIpOwogICAgIH0KIH0KIApAQCAtODA5LDcgKzgwNyw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6
OmVuc3VyZVZpZXdTdXBwb3J0c08KICAgICAgICAgLy8gSGF2aW5nIGNyZWF0ZWQgYW5vdGhlciBw
YWdlICh2aWEgd2luZG93Lm9wZW4oKSkgcHJldmVudHMgcHJvY2VzcyBzd2FwcGluZyBvbiBuYXZp
Z2F0aW9uIGFuZCBpdCBtYXkgdGhlcmVmb3JlCiAgICAgICAgIC8vIGNhdXNlIGZsYWtpbmVzcyB0
byByZXVzZSB0aGUgdmlldy4gV2Ugc2hvdWxkIGFsc28gYWx3YXlzIG1ha2UgYSBuZXcgdmlldyBp
ZiB0aGUgdGVzdCBpcyBtYXJrZWQgYXMgYXBwLWJvdW5kLCBiZWNhdXNlCiAgICAgICAgIC8vIHRo
ZSB2aWV3IGNvbmZpZ3VyYXRpb24gbXVzdCBjaGFuZ2UuCi0gICAgICAgIGlmICghbV9jcmVhdGVk
T3RoZXJQYWdlICYmIG1fbWFpbldlYlZpZXctPnZpZXdTdXBwb3J0c09wdGlvbnMob3B0aW9ucykg
JiYgIW9wdGlvbnMuaXNBcHBCb3VuZFdlYlZpZXcpCisgICAgICAgIGlmICghbV9jcmVhdGVkT3Ro
ZXJQYWdlICYmIG1fbWFpbldlYlZpZXctPnZpZXdTdXBwb3J0c09wdGlvbnMob3B0aW9ucykgJiYg
IW9wdGlvbnMuaXNBcHBCb3VuZFdlYlZpZXcoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICB3aWxsRGVzdHJveVdlYlZpZXcoKTsKQEAgLTgzNiw4ICs4MzQsOCBAQCB2b2lkIFRlc3RD
b250cm9sbGVyOjpyZXNldFByZWZlcmVuY2VzVG9DCiAgICAgV0tQcmVmZXJlbmNlc1Jlc2V0VGVz
dFJ1bm5lck92ZXJyaWRlcyhwcmVmZXJlbmNlcyk7CiAKICAgICBXS1ByZWZlcmVuY2VzRW5hYmxl
QWxsRXhwZXJpbWVudGFsRmVhdHVyZXMocHJlZmVyZW5jZXMpOwotICAgIGZvciAoY29uc3QgYXV0
byYgZXhwZXJpbWVudGFsRmVhdHVyZSA6IG9wdGlvbnMuZXhwZXJpbWVudGFsRmVhdHVyZXMpCi0g
ICAgICAgIFdLUHJlZmVyZW5jZXNTZXRFeHBlcmltZW50YWxGZWF0dXJlRm9yS2V5KHByZWZlcmVu
Y2VzLCBleHBlcmltZW50YWxGZWF0dXJlLnZhbHVlLCB0b1dLKGV4cGVyaW1lbnRhbEZlYXR1cmUu
a2V5KS5nZXQoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBba2V5LCB2YWx1ZV0gOiBvcHRpb25z
LmV4cGVyaW1lbnRhbEZlYXR1cmVzKCkpCisgICAgICAgIFdLUHJlZmVyZW5jZXNTZXRFeHBlcmlt
ZW50YWxGZWF0dXJlRm9yS2V5KHByZWZlcmVuY2VzLCB2YWx1ZSwgdG9XSyhrZXkpLmdldCgpKTsK
IAogICAgIFdLUHJlZmVyZW5jZXNSZXNldEFsbEludGVybmFsRGVidWdGZWF0dXJlcyhwcmVmZXJl
bmNlcyk7CiAKQEAgLTg2MiwxNyArODYwLDE3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0
UHJlZmVyZW5jZXNUb0MKICAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVG
b3JLZXkocHJlZmVyZW5jZXMsIHRydWUsIHRvV0soIklucHV0VHlwZVdlZWtFbmFibGVkIikuZ2V0
KCkpOwogI2VuZGlmCiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGludGVybmFsRGVidWdGZWF0dXJl
IDogb3B0aW9ucy5pbnRlcm5hbERlYnVnRmVhdHVyZXMpCi0gICAgICAgIFdLUHJlZmVyZW5jZXNT
ZXRJbnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShwcmVmZXJlbmNlcywgaW50ZXJuYWxEZWJ1Z0Zl
YXR1cmUudmFsdWUsIHRvV0soaW50ZXJuYWxEZWJ1Z0ZlYXR1cmUua2V5KS5nZXQoKSk7CisgICAg
Zm9yIChjb25zdCBhdXRvJiBba2V5LCB2YWx1ZV0gIDogb3B0aW9ucy5pbnRlcm5hbERlYnVnRmVh
dHVyZXMoKSkKKyAgICAgICAgV0tQcmVmZXJlbmNlc1NldEludGVybmFsRGVidWdGZWF0dXJlRm9y
S2V5KHByZWZlcmVuY2VzLCB2YWx1ZSwgdG9XSyhrZXkpLmdldCgpKTsKIAogI2lmIFBMQVRGT1JN
KENPQ09BKQotICAgIFdLUHJlZmVyZW5jZXNTZXRDYXB0dXJlVmlkZW9JblVJUHJvY2Vzc0VuYWJs
ZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MpOwot
ICAgIFdLUHJlZmVyZW5jZXNTZXRDYXB0dXJlVmlkZW9JbkdQVVByb2Nlc3NFbmFibGVkKHByZWZl
cmVuY2VzLCBvcHRpb25zLmVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2Vzcyk7Ci0gICAgV0tQ
cmVmZXJlbmNlc1NldENhcHR1cmVBdWRpb0luVUlQcm9jZXNzRW5hYmxlZChwcmVmZXJlbmNlcywg
b3B0aW9ucy5lbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2Vzcyk7Ci0gICAgV0tQcmVmZXJlbmNl
c1NldENhcHR1cmVBdWRpb0luR1BVUHJvY2Vzc0VuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMu
ZW5hYmxlQ2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0Q2Fw
dHVyZVZpZGVvSW5VSVByb2Nlc3NFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUNh
cHR1cmVWaWRlb0luVUlQcm9jZXNzKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRDYXB0dXJlVmlk
ZW9JbkdQVVByb2Nlc3NFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUNhcHR1cmVW
aWRlb0luR1BVUHJvY2VzcygpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0Q2FwdHVyZUF1ZGlvSW5V
SVByb2Nlc3NFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUNhcHR1cmVBdWRpb0lu
VUlQcm9jZXNzKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRDYXB0dXJlQXVkaW9JbkdQVVByb2Nl
c3NFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZUNhcHR1cmVBdWRpb0luR1BVUHJv
Y2VzcygpKTsKICNlbmRpZgotICAgIFdLUHJlZmVyZW5jZXNTZXRQcm9jZXNzU3dhcE9uTmF2aWdh
dGlvbkVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuY29udGV4dE9wdGlvbnMuc2hvdWxkRW5h
YmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24oKSk7Ci0gICAgV0tQcmVmZXJlbmNlc1NldFBhZ2VW
aXNpYmlsaXR5QmFzZWRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHByZWZlcmVuY2VzLCBvcHRp
b25zLmVuYWJsZUFwcE5hcCk7CisgICAgV0tQcmVmZXJlbmNlc1NldFByb2Nlc3NTd2FwT25OYXZp
Z2F0aW9uRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5jb250ZXh0T3B0aW9ucygpLnNob3Vs
ZEVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRQ
YWdlVmlzaWJpbGl0eUJhc2VkUHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZChwcmVmZXJlbmNlcywg
b3B0aW9ucy5lbmFibGVBcHBOYXAoKSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldE9mZmxpbmVXZWJB
cHBsaWNhdGlvbkNhY2hlRW5hYmxlZChwcmVmZXJlbmNlcywgdHJ1ZSk7CiAgICAgV0tQcmVmZXJl
bmNlc1NldFN1YnBpeGVsQW50aWFsaWFzZWRMYXllclRleHRFbmFibGVkKHByZWZlcmVuY2VzLCBm
YWxzZSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldFhTU0F1ZGl0b3JFbmFibGVkKHByZWZlcmVuY2Vz
LCBmYWxzZSk7CkBAIC04ODMsMTAgKzg4MSwxMCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNl
dFByZWZlcmVuY2VzVG9DCiAgICAgV0tQcmVmZXJlbmNlc1NldEphdmFTY3JpcHRSdW50aW1lRmxh
Z3MocHJlZmVyZW5jZXMsIGtXS0phdmFTY3JpcHRSdW50aW1lRmxhZ3NBbGxFbmFibGVkKTsKICAg
ICBXS1ByZWZlcmVuY2VzU2V0SmF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxseShw
cmVmZXJlbmNlcywgdHJ1ZSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldEphdmFTY3JpcHRDYW5BY2Nl
c3NDbGlwYm9hcmQocHJlZmVyZW5jZXMsIHRydWUpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRET01Q
YXN0ZUFsbG93ZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZG9tUGFzdGVBbGxvd2VkKTsKKyAgICBX
S1ByZWZlcmVuY2VzU2V0RE9NUGFzdGVBbGxvd2VkKHByZWZlcmVuY2VzLCBvcHRpb25zLmRvbVBh
c3RlQWxsb3dlZCgpKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0VW5pdmVyc2FsQWNjZXNzRnJvbUZp
bGVVUkxzQWxsb3dlZChwcmVmZXJlbmNlcywgdHJ1ZSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldEZp
bGVBY2Nlc3NGcm9tRmlsZVVSTHNBbGxvd2VkKHByZWZlcmVuY2VzLCB0cnVlKTsKLSAgICBXS1By
ZWZlcmVuY2VzU2V0VG9wTmF2aWdhdGlvblRvRGF0YVVSTHNBbGxvd2VkKHByZWZlcmVuY2VzLCBv
cHRpb25zLmFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMpOworICAgIFdLUHJlZmVyZW5jZXNT
ZXRUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMc0FsbG93ZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuYWxs
b3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcygpKTsKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkp
CiAgICAgV0tQcmVmZXJlbmNlc1NldEZ1bGxTY3JlZW5FbmFibGVkKHByZWZlcmVuY2VzLCB0cnVl
KTsKICNlbmRpZgpAQCAtODk5LDE4ICs4OTcsMTggQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVz
ZXRQcmVmZXJlbmNlc1RvQwogICAgIFdLUHJlZmVyZW5jZXNTZXRDdXN0b21QYXN0ZWJvYXJkRGF0
YUVuYWJsZWQocHJlZmVyZW5jZXMsIHRydWUpOwogICAgIFdLUHJlZmVyZW5jZXNTZXREaWFsb2dF
bGVtZW50RW5hYmxlZChwcmVmZXJlbmNlcywgdHJ1ZSk7CiAKLSAgICBXS1ByZWZlcmVuY2VzU2V0
TW9ja1Njcm9sbGJhcnNFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLnVzZU1vY2tTY3JvbGxi
YXJzKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0TmVlZHNTaXRlU3BlY2lmaWNRdWlya3MocHJlZmVy
ZW5jZXMsIG9wdGlvbnMubmVlZHNTaXRlU3BlY2lmaWNRdWlya3MpOwotICAgIFdLUHJlZmVyZW5j
ZXNTZXRBdHRhY2htZW50RWxlbWVudEVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxl
QXR0YWNobWVudEVsZW1lbnQpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRNZW51SXRlbUVsZW1lbnRF
bmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJsZU1lbnVJdGVtRWxlbWVudCk7Ci0gICAg
V0tQcmVmZXJlbmNlc1NldEtleWdlbkVsZW1lbnRFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25z
LmVuYWJsZUtleWdlbkVsZW1lbnQpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRNb2Rlcm5NZWRpYUNv
bnRyb2xzRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVNb2Rlcm5NZWRpYUNvbnRy
b2xzKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0V2ViQXV0aGVudGljYXRpb25FbmFibGVkKHByZWZl
cmVuY2VzLCBvcHRpb25zLmVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uKTsKLSAgICBXS1ByZWZlcmVu
Y2VzU2V0V2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3JFbmFibGVkKHByZWZlcmVu
Y2VzLCBvcHRpb25zLmVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yKTsK
LSAgICBXS1ByZWZlcmVuY2VzU2V0QWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9y
Q3JlZGVudGlhbHMocHJlZmVyZW5jZXMsIG9wdGlvbnMuYWxsb3dDcm9zc09yaWdpblN1YnJlc291
cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMpOwotICAgIFdLUHJlZmVyZW5jZXNTZXRDb2xvckZpbHRl
ckVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQ29sb3JGaWx0ZXIpOwotICAgIFdL
UHJlZmVyZW5jZXNTZXRQdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlKHByZWZlcmVu
Y2VzLCBvcHRpb25zLnB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUpOwotICAgIFdL
UHJlZmVyZW5jZXNTZXRQYWdlQ2FjaGVFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25zLmVuYWJs
ZUJhY2tGb3J3YXJkQ2FjaGUpOworICAgIFdLUHJlZmVyZW5jZXNTZXRNb2NrU2Nyb2xsYmFyc0Vu
YWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMudXNlTW9ja1Njcm9sbGJhcnMoKSk7CisgICAgV0tQ
cmVmZXJlbmNlc1NldE5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKHByZWZlcmVuY2VzLCBvcHRpb25z
Lm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRBdHRhY2ht
ZW50RWxlbWVudEVuYWJsZWQocHJlZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlQXR0YWNobWVudEVs
ZW1lbnQoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldE1lbnVJdGVtRWxlbWVudEVuYWJsZWQocHJl
ZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlTWVudUl0ZW1FbGVtZW50KCkpOworICAgIFdLUHJlZmVy
ZW5jZXNTZXRLZXlnZW5FbGVtZW50RW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVL
ZXlnZW5FbGVtZW50KCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRNb2Rlcm5NZWRpYUNvbnRyb2xz
RW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzKCkp
OworICAgIFdLUHJlZmVyZW5jZXNTZXRXZWJBdXRoZW50aWNhdGlvbkVuYWJsZWQocHJlZmVyZW5j
ZXMsIG9wdGlvbnMuZW5hYmxlV2ViQXV0aGVudGljYXRpb24oKSk7CisgICAgV0tQcmVmZXJlbmNl
c1NldFdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yRW5hYmxlZChwcmVmZXJlbmNl
cywgb3B0aW9ucy5lbmFibGVXZWJBdXRoZW50aWNhdGlvbkxvY2FsQXV0aGVudGljYXRvcigpKTsK
KyAgICBXS1ByZWZlcmVuY2VzU2V0QWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9y
Q3JlZGVudGlhbHMocHJlZmVyZW5jZXMsIG9wdGlvbnMuYWxsb3dDcm9zc09yaWdpblN1YnJlc291
cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldENvbG9yRmls
dGVyRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5lbmFibGVDb2xvckZpbHRlcigpKTsKKyAg
ICBXS1ByZWZlcmVuY2VzU2V0UHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZShwcmVm
ZXJlbmNlcywgb3B0aW9ucy5wdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlKCkpOwor
ICAgIFdLUHJlZmVyZW5jZXNTZXRQYWdlQ2FjaGVFbmFibGVkKHByZWZlcmVuY2VzLCBvcHRpb25z
LmVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUoKSk7CiAKICAgICBXS1ByZWZlcmVuY2VzU2V0RGVmYXVs
dFRleHRFbmNvZGluZ05hbWUocHJlZmVyZW5jZXMsIHRvV0soIklTTy04ODU5LTEiKS5nZXQoKSk7
CiAKQEAgLTkzMiw3ICs5MzAsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldFByZWZlcmVu
Y2VzVG9DCiAgICAgV0tQcmVmZXJlbmNlc1NldEhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdF
bmFibGVkKHByZWZlcmVuY2VzLCBmYWxzZSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldEhpZGRlblBh
Z2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZChwcmVmZXJlbmNlcywgZmFsc2UpOwogCi0g
ICAgV0tQcmVmZXJlbmNlc1NldEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQocHJlZmVyZW5jZXMs
IG1fc2hvdWxkVXNlQWNjZWxlcmF0ZWREcmF3aW5nIHx8IG9wdGlvbnMudXNlQWNjZWxlcmF0ZWRE
cmF3aW5nKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0QWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZChw
cmVmZXJlbmNlcywgbV9zaG91bGRVc2VBY2NlbGVyYXRlZERyYXdpbmcgfHwgb3B0aW9ucy51c2VB
Y2NlbGVyYXRlZERyYXdpbmcoKSk7CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSB0ZXN0aW5n
IHRoZSBkZWZhdWx0LgogICAgIFdLUHJlZmVyZW5jZXNTZXRTdG9yYWdlQmxvY2tpbmdQb2xpY3ko
cHJlZmVyZW5jZXMsIGtXS0FsbG93QWxsU3RvcmFnZSk7CiAKQEAgLTk1Myw3ICs5NTEsNyBAQCB2
b2lkIFRlc3RDb250cm9sbGVyOjpyZXNldFByZWZlcmVuY2VzVG9DCiAgICAgCiAgICAgV0tQcmVm
ZXJlbmNlc1NldExhcmdlSW1hZ2VBc3luY0RlY29kaW5nRW5hYmxlZChwcmVmZXJlbmNlcywgZmFs
c2UpOwogCi0gICAgV0tQcmVmZXJlbmNlc1NldEluc3BlY3RvckFkZGl0aW9uc0VuYWJsZWQocHJl
ZmVyZW5jZXMsIG9wdGlvbnMuZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zKTsKKyAgICBXS1ByZWZl
cmVuY2VzU2V0SW5zcGVjdG9yQWRkaXRpb25zRW5hYmxlZChwcmVmZXJlbmNlcywgb3B0aW9ucy5l
bmFibGVJbnNwZWN0b3JBZGRpdGlvbnMoKSk7CiAKICAgICBXS1ByZWZlcmVuY2VzU2V0U3RvcmFn
ZUFjY2Vzc0FQSUVuYWJsZWQocHJlZmVyZW5jZXMsIHRydWUpOwogICAgIApAQCAtOTcyLDcgKzk3
MCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0UHJlZmVyZW5jZXNUb0MKICAgICBXS1By
ZWZlcmVuY2VzU2V0QXVkaW9QbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmUocHJlZmVyZW5jZXMs
IGZhbHNlKTsKICAgICBXS1ByZWZlcmVuY2VzU2V0SW50ZXJuYWxEZWJ1Z0ZlYXR1cmVGb3JLZXko
cHJlZmVyZW5jZXMsIGZhbHNlLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3BlYWtl
clNlbGVjdGlvblJlcXVpcmVzVXNlckdlc3R1cmUiKSk7CiAKLSAgICBXS1ByZWZlcmVuY2VzU2V0
U2hvdWxkVXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dChwcmVmZXJlbmNlcywgb3B0aW9ucy5j
b250ZXh0T3B0aW9ucy51c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0KTsKKyAgICBXS1ByZWZl
cmVuY2VzU2V0U2hvdWxkVXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dChwcmVmZXJlbmNlcywg
b3B0aW9ucy51c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0KCkpOwogCiAjaWYgRU5BQkxFKEFD
Q0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKICAgICBXS1ByZWZlcmVuY2VzU2V0SXNBY2Nlc3Np
YmlsaXR5SXNvbGF0ZWRUcmVlRW5hYmxlZChwcmVmZXJlbmNlcywgYWNjZXNzaWJpbGl0eUlzb2xh
dGVkVHJlZU1vZGUoKSk7CkBAIC0xMDA2LDExICsxMDA0LDEyIEBAIGJvb2wgVGVzdENvbnRyb2xs
ZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3QKICAgICBzZXRWYWx1ZShyZXNldE1lc3NhZ2VCb2R5LCAi
QWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZSIsIG1fYWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZU1v
ZGUpOwogI2VuZGlmCiAKLSAgICBpZiAob3B0aW9ucy5qc2NPcHRpb25zLmxlbmd0aCgpKQotICAg
ICAgICBzZXRWYWx1ZShyZXNldE1lc3NhZ2VCb2R5LCAiSlNDT3B0aW9ucyIsIG9wdGlvbnMuanNj
T3B0aW9ucy5jX3N0cigpKTsKKyAgICBhdXRvIGpzY09wdGlvbnMgPSBvcHRpb25zLmpzY09wdGlv
bnMoKTsKKyAgICBpZiAoIWpzY09wdGlvbnMuZW1wdHkoKSkKKyAgICAgICAgc2V0VmFsdWUocmVz
ZXRNZXNzYWdlQm9keSwgIkpTQ09wdGlvbnMiLCBqc2NPcHRpb25zLmNfc3RyKCkpOwogCiAjaWYg
UExBVEZPUk0oQ09DT0EpCi0gICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpzZXRBZGRpdGlvbmFsU3Vw
cG9ydGVkSW1hZ2VUeXBlc0ZvclRlc3Rpbmcob3B0aW9ucy5hZGRpdGlvbmFsU3VwcG9ydGVkSW1h
Z2VUeXBlcy5jX3N0cigpKTsKKyAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OnNldEFkZGl0aW9uYWxT
dXBwb3J0ZWRJbWFnZVR5cGVzRm9yVGVzdGluZyhvcHRpb25zLmFkZGl0aW9uYWxTdXBwb3J0ZWRJ
bWFnZVR5cGVzKCkuY19zdHIoKSk7CiAjZW5kaWYKIAogICAgIFdLUGFnZVBvc3RNZXNzYWdlVG9J
bmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+
cGFnZSgpLCB0b1dLKCJSZXNldCIpLmdldCgpLCByZXNldE1lc3NhZ2VCb2R5LmdldCgpKTsKQEAg
LTExMTgsNyArMTExNyw3IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNp
c3QKIAogICAgIHNldE5hdmlnYXRpb25HZXN0dXJlc0VuYWJsZWQoZmFsc2UpOwogICAgIAotICAg
IHNldElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKG9wdGlvbnMuaWdub3Jlc1ZpZXdwb3J0U2Nh
bGVMaW1pdHMpOworICAgIHNldElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKG9wdGlvbnMuaWdu
b3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMoKSk7CiAKICAgICBtX29wZW5QYW5lbEZpbGVVUkxzID0g
bnVsbHB0cjsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtMTMxOCw3ICsxMzE3LDcgQEAg
c3RhdGljIHN0ZDo6c3RyaW5nIHRlc3RQYXRoKFdLVVJMUmVmIHVybAogICAgIHJldHVybiBzdGQ6
OnN0cmluZygpOwogfQogCi1zdGF0aWMgV0tVUkxSZWYgY3JlYXRlVGVzdFVSTChjb25zdCBjaGFy
KiBwYXRoT3JVUkwpCitXS1VSTFJlZiBUZXN0Q29udHJvbGxlcjo6Y3JlYXRlVGVzdFVSTChjb25z
dCBjaGFyKiBwYXRoT3JVUkwpCiB7CiAgICAgaWYgKHN0cnN0cihwYXRoT3JVUkwsICJodHRwOi8v
IikgfHwgc3Ryc3RyKHBhdGhPclVSTCwgImh0dHBzOi8vIikgfHwgc3Ryc3RyKHBhdGhPclVSTCwg
ImZpbGU6Ly8iKSkKICAgICAgICAgcmV0dXJuIFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHBh
dGhPclVSTCk7CkBAIC0xMzU2LDIyMSArMTM1NSwyNiBAQCBzdGF0aWMgV0tVUkxSZWYgY3JlYXRl
VGVzdFVSTChjb25zdCBjaGFyCiAgICAgcmV0dXJuIFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KGJ1ZmZlci5nZXQoKSk7CiB9CiAKLXN0YXRpYyBib29sIHBhcnNlQm9vbGVhblRlc3RIZWFkZXJW
YWx1ZShjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlID09ICJ0cnVl
IikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHZhbHVlID09ICJmYWxzZSIpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIExPR19FUlJPUigiRm91bmQgdW5leHBlY3RlZCB2YWx1
ZSAnJXMnIGZvciBib29sZWFuIG9wdGlvbi4gRXhwZWN0ZWQgJ3RydWUnIG9yICdmYWxzZScuIiwg
dmFsdWUuY19zdHIoKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgc3RkOjpzdHJp
bmcgcGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1JlbGF0aXZlUGF0aChjb25zdCBzdGQ6OnN0
cmluZyYgdmFsdWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCi17Ci0gICAgYXV0byBi
YXNlVVJMID0gYWRvcHRXSyhjcmVhdGVUZXN0VVJMKHBhdGhPclVSTC5jX3N0cigpKSk7Ci0gICAg
YXV0byByZWxhdGl2ZVVSTCA9IGFkb3B0V0soV0tVUkxDcmVhdGVXaXRoQmFzZVVSTChiYXNlVVJM
LmdldCgpLCB2YWx1ZS5jX3N0cigpKSk7Ci0gICAgcmV0dXJuIHRvU1REKGFkb3B0V0soV0tVUkxD
b3B5UGF0aChyZWxhdGl2ZVVSTC5nZXQoKSkpKTsKLX0KLQotc3RhdGljIHN0ZDo6c3RyaW5nIHBh
cnNlU3RyaW5nVGVzdEhlYWRlclZhbHVlQXNVUkwoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKQot
ewotICAgIHJldHVybiB0b1NURChhZG9wdFdLKFdLVVJMQ29weVN0cmluZyhjcmVhdGVUZXN0VVJM
KHZhbHVlLmNfc3RyKCkpKSkpOwotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVUZXN0T3B0aW9uc0Zy
b21UZXN0SGVhZGVyKFRlc3RPcHRpb25zJiB0ZXN0T3B0aW9ucywgY29uc3Qgc3RkOjpzdHJpbmcm
IHBhdGhPclVSTCwgY29uc3Qgc3RkOjpzdHJpbmcmIGFic29sdXRlUGF0aCkKLXsKLSAgICBzdGQ6
OnN0cmluZyBmaWxlbmFtZSA9IGFic29sdXRlUGF0aDsKLSAgICBpZiAoZmlsZW5hbWUuZW1wdHko
KSkgewotICAgICAgICAvLyBHcm9zcy4gTmVlZCB0byByZWR1Y2UgY29udmVyc2lvbnMgYmV0d2Vl
biBhbGwgdGhlIHN0cmluZyB0eXBlcyBhbmQgVVJMcy4KLSAgICAgICAgZmlsZW5hbWUgPSB0ZXN0
UGF0aChhZG9wdFdLKGNyZWF0ZVRlc3RVUkwocGF0aE9yVVJMLmNfc3RyKCkpKS5nZXQoKSk7Ci0g
ICAgfQotCi0gICAgaWYgKGZpbGVuYW1lLmVtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHN0ZDo6c3RyaW5nIG9wdGlvbnM7Ci0gICAgc3RkOjppZnN0cmVhbSB0ZXN0RmlsZShmaWxlbmFt
ZS5kYXRhKCkpOwotICAgIGlmICghdGVzdEZpbGUuZ29vZCgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgZ2V0bGluZSh0ZXN0RmlsZSwgb3B0aW9ucyk7Ci0gICAgc3RkOjpzdHJpbmcgYmVnaW5TdHJp
bmcoIndlYmtpdC10ZXN0LXJ1bm5lciBbICIpOwotICAgIHN0ZDo6c3RyaW5nIGVuZFN0cmluZygi
IF0iKTsKLSAgICBzaXplX3QgYmVnaW5Mb2NhdGlvbiA9IG9wdGlvbnMuZmluZChiZWdpblN0cmlu
Zyk7Ci0gICAgaWYgKGJlZ2luTG9jYXRpb24gPT0gc3RkOjpzdHJpbmc6Om5wb3MpCi0gICAgICAg
IHJldHVybjsKLSAgICBzaXplX3QgZW5kTG9jYXRpb24gPSBvcHRpb25zLmZpbmQoZW5kU3RyaW5n
LCBiZWdpbkxvY2F0aW9uKTsKLSAgICBpZiAoZW5kTG9jYXRpb24gPT0gc3RkOjpzdHJpbmc6Om5w
b3MpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgZmluZCBlbmQgb2YgdGVzdCBoZWFk
ZXIgaW4gJXMiLCBmaWxlbmFtZS5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBzdGQ6OnN0cmluZyBwYWlyU3RyaW5nID0gb3B0aW9ucy5zdWJzdHIoYmVnaW5Mb2NhdGlvbiAr
IGJlZ2luU3RyaW5nLnNpemUoKSwgZW5kTG9jYXRpb24gLSAoYmVnaW5Mb2NhdGlvbiArIGJlZ2lu
U3RyaW5nLnNpemUoKSkpOwotICAgIHNpemVfdCBwYWlyU3RhcnQgPSAwOwotICAgIHdoaWxlIChw
YWlyU3RhcnQgPCBwYWlyU3RyaW5nLnNpemUoKSkgewotICAgICAgICBzaXplX3QgcGFpckVuZCA9
IHBhaXJTdHJpbmcuZmluZCgiICIsIHBhaXJTdGFydCk7Ci0gICAgICAgIGlmIChwYWlyRW5kID09
IHN0ZDo6c3RyaW5nOjpucG9zKQotICAgICAgICAgICAgcGFpckVuZCA9IHBhaXJTdHJpbmcuc2l6
ZSgpOwotICAgICAgICBzaXplX3QgZXF1YWxzTG9jYXRpb24gPSBwYWlyU3RyaW5nLmZpbmQoIj0i
LCBwYWlyU3RhcnQpOwotICAgICAgICBpZiAoZXF1YWxzTG9jYXRpb24gPT0gc3RkOjpzdHJpbmc6
Om5wb3MpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiTWFsZm9ybWVkIG9wdGlvbiBpbiB0ZXN0
IGhlYWRlciAoY291bGQgbm90IGZpbmQgJz0nIGNoYXJhY3RlcikgaW4gJXMiLCBmaWxlbmFtZS5j
X3N0cigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGF1dG8ga2V5
ID0gcGFpclN0cmluZy5zdWJzdHIocGFpclN0YXJ0LCBlcXVhbHNMb2NhdGlvbiAtIHBhaXJTdGFy
dCk7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBwYWlyU3RyaW5nLnN1YnN0cihlcXVhbHNMb2NhdGlv
biArIDEsIHBhaXJFbmQgLSAoZXF1YWxzTG9jYXRpb24gKyAxKSk7Ci0KLSAgICAgICAgaWYgKCFr
ZXkucmZpbmQoImV4cGVyaW1lbnRhbDoiKSkgewotICAgICAgICAgICAga2V5ID0ga2V5LnN1YnN0
cigxMyk7Ci0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5leHBlcmltZW50YWxGZWF0dXJlcy5hZGQo
U3RyaW5nKGtleS5jX3N0cigpKSwgcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWtleS5yZmluZCgiaW50ZXJuYWw6IikpIHsKLSAg
ICAgICAgICAgIGtleSA9IGtleS5zdWJzdHIoOSk7Ci0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5p
bnRlcm5hbERlYnVnRmVhdHVyZXMuYWRkKFN0cmluZyhrZXkuY19zdHIoKSksIHBhcnNlQm9vbGVh
blRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGtleSA9
PSAibGFuZ3VhZ2UiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuY29udGV4dE9wdGlvbnMub3Zl
cnJpZGVMYW5ndWFnZXMgPSBTdHJpbmcodmFsdWUuY19zdHIoKSkuc3BsaXQoJywnKTsKLSAgICAg
ICAgZWxzZSBpZiAoa2V5ID09ICJ1c2VUaHJlYWRlZFNjcm9sbGluZyIpCi0gICAgICAgICAgICB0
ZXN0T3B0aW9ucy51c2VUaHJlYWRlZFNjcm9sbGluZyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJW
YWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAidXNlQWNjZWxlcmF0ZWREcmF3
aW5nIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLnVzZUFjY2VsZXJhdGVkRHJhd2luZyA9IHBh
cnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9
PSAidXNlRmxleGlibGVWaWV3cG9ydCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy51c2VGbGV4
aWJsZVZpZXdwb3J0ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAg
ICAgZWxzZSBpZiAoa2V5ID09ICJ1c2VEYXRhRGV0ZWN0aW9uIikKLSAgICAgICAgICAgIHRlc3RP
cHRpb25zLnVzZURhdGFEZXRlY3Rpb24gPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFs
dWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInVzZU1vY2tTY3JvbGxiYXJzIikKLSAgICAg
ICAgICAgIHRlc3RPcHRpb25zLnVzZU1vY2tTY3JvbGxiYXJzID0gcGFyc2VCb29sZWFuVGVzdEhl
YWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJuZWVkc1NpdGVTcGVj
aWZpY1F1aXJrcyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5uZWVkc1NpdGVTcGVjaWZpY1F1
aXJrcyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2Ug
aWYgKGtleSA9PSAiaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMiKQotICAgICAgICAgICAgdGVz
dE9wdGlvbnMuaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMgPSBwYXJzZUJvb2xlYW5UZXN0SGVh
ZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInVzZUNoYXJhY3RlclNl
bGVjdGlvbkdyYW51bGFyaXR5IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLnVzZUNoYXJhY3Rl
clNlbGVjdGlvbkdyYW51bGFyaXR5ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVl
KTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVBdHRhY2htZW50RWxlbWVudCIpCi0g
ICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVBdHRhY2htZW50RWxlbWVudCA9IHBhcnNlQm9v
bGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5h
YmxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxl
SW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUp
OwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInVzZUVwaGVtZXJhbFNlc3Npb24iKQotICAgICAg
ICAgICAgdGVzdE9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lvbiA9IHBhcnNlQm9vbGVhblRlc3RI
ZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlTWVudUl0
ZW1FbGVtZW50IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZU1lbnVJdGVtRWxlbWVu
dCA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYg
KGtleSA9PSAiZW5hYmxlS2V5Z2VuRWxlbWVudCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5l
bmFibGVLZXlnZW5FbGVtZW50ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsK
LSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzIikKLSAg
ICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMgPSBwYXJzZUJv
b2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVu
YWJsZVBvaW50ZXJMb2NrIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZVBvaW50ZXJM
b2NrID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBp
ZiAoa2V5ID09ICJlbmFibGVXZWJBdXRoZW50aWNhdGlvbiIpCi0gICAgICAgICAgICB0ZXN0T3B0
aW9ucy5lbmFibGVXZWJBdXRoZW50aWNhdGlvbiA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1
ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlV2ViQXV0aGVudGljYXRp
b25Mb2NhbEF1dGhlbnRpY2F0b3IiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlV2Vi
QXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVy
VmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUluc3BlY3RvckFk
ZGl0aW9ucyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVJbnNwZWN0b3JBZGRpdGlv
bnMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlm
IChrZXkgPT0gImR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciIpCi0gICAgICAgICAgICB0ZXN0T3B0
aW9ucy5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFs
dWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImFwcGxpY2F0aW9uTWFuaWZlc3Qi
KQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuYXBwbGljYXRpb25NYW5pZmVzdCA9IHBhcnNlU3Ry
aW5nVGVzdEhlYWRlclZhbHVlQXNSZWxhdGl2ZVBhdGgodmFsdWUsIHBhdGhPclVSTCk7Ci0gICAg
ICAgIGVsc2UgaWYgKGtleSA9PSAiYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9y
Q3JlZGVudGlhbHMiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuYWxsb3dDcm9zc09yaWdpblN1
YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFs
dWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImRvbVBhc3RlQWxsb3dlZCIpCi0g
ICAgICAgICAgICB0ZXN0T3B0aW9ucy5kb21QYXN0ZUFsbG93ZWQgPSBwYXJzZUJvb2xlYW5UZXN0
SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZVByb2Nl
c3NTd2FwT25OYXZpZ2F0aW9uIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmNvbnRleHRPcHRp
b25zLmVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uID0gcGFyc2VCb29sZWFuVGVzdEhlYWRl
clZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVQcm9jZXNzU3dh
cE9uV2luZG93T3BlbiIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5jb250ZXh0T3B0aW9ucy5l
bmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1
ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAidXNlU2VydmljZVdvcmtlclNob3J0
VGltZW91dCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5jb250ZXh0T3B0aW9ucy51c2VTZXJ2
aWNlV29ya2VyU2hvcnRUaW1lb3V0ID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVl
KTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVDb2xvckZpbHRlciIpCi0gICAgICAg
ICAgICB0ZXN0T3B0aW9ucy5lbmFibGVDb2xvckZpbHRlciA9IHBhcnNlQm9vbGVhblRlc3RIZWFk
ZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAicHVuY2hPdXRXaGl0ZUJh
Y2tncm91bmRzSW5EYXJrTW9kZSIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5wdW5jaE91dFdo
aXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZh
bHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJqc2NPcHRpb25zIikKLSAgICAgICAgICAg
IHRlc3RPcHRpb25zLmpzY09wdGlvbnMgPSB2YWx1ZTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09
ICJhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9u
cy5hZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyA9IHZhbHVlOwotICAgICAgICBlbHNlIGlm
IChrZXkgPT0gInJ1blNpbmdseSIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5ydW5TaW5nbHkg
PSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChr
ZXkgPT0gInNob3VsZElnbm9yZU1ldGFWaWV3cG9ydCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9u
cy5zaG91bGRJZ25vcmVNZXRhVmlld3BvcnQgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUo
dmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInNwZWxsQ2hlY2tpbmdEb3RzIikKLSAg
ICAgICAgICAgIHRlc3RPcHRpb25zLnNob3VsZFNob3dTcGVsbENoZWNraW5nRG90cyA9IHBhcnNl
Qm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAi
ZW5hYmxlU2VydmljZUNvbnRyb2xzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZVNl
cnZpY2VDb250cm9scyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAg
ICAgIGVsc2UgaWYgKGtleSA9PSAiZWRpdGFibGUiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMu
ZWRpdGFibGUgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBl
bHNlIGlmIChrZXkgPT0gInNob3VsZEhhbmRsZVJ1bk9wZW5QYW5lbCIpCi0gICAgICAgICAgICB0
ZXN0T3B0aW9ucy5zaG91bGRIYW5kbGVSdW5PcGVuUGFuZWwgPSBwYXJzZUJvb2xlYW5UZXN0SGVh
ZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInNob3VsZFByZXNlbnRQ
b3BvdmVycyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5zaG91bGRQcmVzZW50UG9wb3ZlcnMg
PSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChr
ZXkgPT0gImNvbnRlbnRJbnNldC50b3AiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMuY29udGVu
dEluc2V0VG9wID0gc3RkOjpzdG9kKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJp
Z25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzIikKLSAgICAgICAgICAgIHRlc3RPcHRp
b25zLmNvbnRleHRPcHRpb25zLmlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMgPSBw
YXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkg
PT0gImNvbnRlbnRNb2RlIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmNvbnRlbnRNb2RlID0g
eyB2YWx1ZS5jX3N0cigpIH07Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiYXBwbGljYXRpb25C
dW5kbGVJZGVudGlmaWVyIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmFwcGxpY2F0aW9uQnVu
ZGxlSWRlbnRpZmllciA9IHsgdmFsdWUuY19zdHIoKSB9OwotICAgICAgICBlbHNlIGlmIChrZXkg
PT0gImVuYWJsZUFwcE5hcCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5lbmFibGVBcHBOYXAg
PSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChr
ZXkgPT0gImVuYWJsZUJhY2tGb3J3YXJkQ2FjaGUiKQotICAgICAgICAgICAgdGVzdE9wdGlvbnMu
ZW5hYmxlQmFja0ZvcndhcmRDYWNoZSA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1
ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiYWxsb3dzTGlua1ByZXZpZXciKQotICAgICAg
ICAgICAgdGVzdE9wdGlvbnMuYWxsb3dzTGlua1ByZXZpZXcgPSBwYXJzZUJvb2xlYW5UZXN0SGVh
ZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUNhcHR1cmVW
aWRlb0luVUlQcm9jZXNzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZUNhcHR1cmVW
aWRlb0luVUlQcm9jZXNzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAg
ICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVDYXB0dXJlVmlkZW9JbkdQVVByb2Nlc3MiKQot
ICAgICAgICAgICAgdGVzdE9wdGlvbnMuZW5hYmxlQ2FwdHVyZVZpZGVvSW5HUFVQcm9jZXNzID0g
cGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5
ID09ICJlbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcyIpCi0gICAgICAgICAgICB0ZXN0T3B0
aW9ucy5lbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcyA9IHBhcnNlQm9vbGVhblRlc3RIZWFk
ZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlQ2FwdHVyZUF1
ZGlvSW5HUFVQcm9jZXNzIikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVuYWJsZUNhcHR1cmVB
dWRpb0luR1BVUHJvY2VzcyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0g
ICAgICAgIGVsc2UgaWYgKGtleSA9PSAiYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcyIpCi0g
ICAgICAgICAgICB0ZXN0T3B0aW9ucy5hbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzID0gcGFy
c2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09
ICJlbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5IikKLSAgICAgICAgICAgIHRlc3RPcHRpb25zLmVu
YWJsZUluQXBwQnJvd3NlclByaXZhY3kgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFs
dWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gInN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVS
TCIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5zdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwg
PSBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzVVJMKHZhbHVlKTsKLSAgICAgICAgZWxzZSBp
ZiAoa2V5ID09ICJpc0FwcEJvdW5kV2ViVmlldyIpCi0gICAgICAgICAgICB0ZXN0T3B0aW9ucy5p
c0FwcEJvdW5kV2ViVmlldyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0g
ICAgICAgIHBhaXJTdGFydCA9IHBhaXJFbmQgKyAxOwotICAgIH0KLX0KLQogVGVzdE9wdGlvbnMg
VGVzdENvbnRyb2xsZXI6OnRlc3RPcHRpb25zRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYgY29t
bWFuZCkgY29uc3QKIHsKLSAgICBUZXN0T3B0aW9ucyBvcHRpb25zKGNvbW1hbmQucGF0aE9yVVJM
KTsKLQotICAgIG9wdGlvbnMudXNlUmVtb3RlTGF5ZXJUcmVlID0gbV9zaG91bGRVc2VSZW1vdGVM
YXllclRyZWU7Ci0gICAgb3B0aW9ucy5zaG91bGRTaG93V2ViVmlldyA9IG1fc2hvdWxkU2hvd1dl
YlZpZXc7Ci0KLSAgICBmb3IgKGF1dG8mIGZlYXR1cmUgOiBtX2ludGVybmFsRmVhdHVyZXMpCi0g
ICAgICAgIG9wdGlvbnMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzLmFkZChmZWF0dXJlLmtleSwgZmVh
dHVyZS52YWx1ZSk7Ci0gICAgZm9yIChhdXRvJiBmZWF0dXJlIDogbV9leHBlcmltZW50YWxGZWF0
dXJlcykKLSAgICAgICAgb3B0aW9ucy5leHBlcmltZW50YWxGZWF0dXJlcy5hZGQoZmVhdHVyZS5r
ZXksIGZlYXR1cmUudmFsdWUpOworICAgIFRlc3RGZWF0dXJlcyBmZWF0dXJlcyA9IG1fZ2xvYmFs
RmVhdHVyZXM7CisgICAgbWVyZ2UoZmVhdHVyZXMsIGhhcmRjb2RlZEZlYXR1cmVzQmFzZWRPblBh
dGhGb3JUZXN0KGNvbW1hbmQpKTsKKyAgICBtZXJnZShmZWF0dXJlcywgcGxhdGZvcm1TcGVjaWZp
Y0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QoY29tbWFuZCkpOworICAgIG1lcmdlKGZlYXR1cmVzLCBm
ZWF0dXJlRGVmYXVsdHNGcm9tVGVzdE9wdGlvbnNGaWxlc0ZvclRlc3QoY29tbWFuZCkpOworICAg
IG1lcmdlKGZlYXR1cmVzLCBmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3QoY29t
bWFuZCkpOworICAgIG1lcmdlKGZlYXR1cmVzLCBwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZU92ZXJy
aWRlc0RlZmF1bHRzRm9yVGVzdChjb21tYW5kKSk7CiAKLSAgICB1cGRhdGVQbGF0Zm9ybVNwZWNp
ZmljVGVzdE9wdGlvbnNGb3JUZXN0KG9wdGlvbnMsIGNvbW1hbmQucGF0aE9yVVJMKTsKLSAgICB1
cGRhdGVUZXN0T3B0aW9uc0Zyb21UZXN0SGVhZGVyKG9wdGlvbnMsIGNvbW1hbmQucGF0aE9yVVJM
LCBjb21tYW5kLmFic29sdXRlUGF0aCk7Ci0gICAgcGxhdGZvcm1BZGRUZXN0T3B0aW9ucyhvcHRp
b25zKTsKLQotICAgIHJldHVybiBvcHRpb25zOworICAgIHJldHVybiBUZXN0T3B0aW9ucyB7IGZl
YXR1cmVzIH07CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnVwZGF0ZVdlYlZpZXdTaXplRm9y
VGVzdChjb25zdCBUZXN0SW52b2NhdGlvbiYgdGVzdCkKIHsKLSAgICB1bnNpZ25lZCB3aWR0aCA9
IHZpZXdXaWR0aDsKLSAgICB1bnNpZ25lZCBoZWlnaHQgPSB2aWV3SGVpZ2h0OwotICAgIGlmICh0
ZXN0Lm9wdGlvbnMoKS5pc1NWR1Rlc3QpIHsKLSAgICAgICAgd2lkdGggPSB3M2NTVkdWaWV3V2lk
dGg7Ci0gICAgICAgIGhlaWdodCA9IHczY1NWR1ZpZXdIZWlnaHQ7Ci0gICAgfQotCi0gICAgbWFp
bldlYlZpZXcoKS0+cmVzaXplVG8od2lkdGgsIGhlaWdodCk7CisgICAgbWFpbldlYlZpZXcoKS0+
cmVzaXplVG8odGVzdC5vcHRpb25zKCkudmlld1dpZHRoKCksIHRlc3Qub3B0aW9ucygpLnZpZXdI
ZWlnaHQoKSk7CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnVwZGF0ZVdpbmRvd1NjYWxlRm9y
VGVzdChQbGF0Zm9ybVdlYlZpZXcqIHZpZXcsIGNvbnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0KQog
ewotICAgIHZpZXctPmNoYW5nZVdpbmRvd1NjYWxlSWZOZWVkZWQodGVzdC5vcHRpb25zKCkuZGV2
aWNlU2NhbGVGYWN0b3IpOworICAgIHZpZXctPmNoYW5nZVdpbmRvd1NjYWxlSWZOZWVkZWQodGVz
dC5vcHRpb25zKCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xs
ZXI6OmNvbmZpZ3VyZVZpZXdGb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJiB0ZXN0KQpAQCAt
MTc2Niw2ICsxNTcwLDEyIEBAIHN0YXRpYyBUZXN0Q29tbWFuZCBwYXJzZUlucHV0TGluZShjb25z
dCAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZGllKGlucHV0TGluZSk7CiAgICAgfQorICAg
IAorICAgIGlmIChyZXN1bHQuYWJzb2x1dGVQYXRoLmVtcHR5KCkpIHsKKyAgICAgICAgLy8gR3Jv
c3MuIE5lZWQgdG8gcmVkdWNlIGNvbnZlcnNpb25zIGJldHdlZW4gYWxsIHRoZSBzdHJpbmcgdHlw
ZXMgYW5kIFVSTHMuCisgICAgICAgIHJlc3VsdC5hYnNvbHV0ZVBhdGggPSB0ZXN0UGF0aChhZG9w
dFdLKFRlc3RDb250cm9sbGVyOjpjcmVhdGVUZXN0VVJMKHJlc3VsdC5wYXRoT3JVUkwuY19zdHIo
KSkpLmdldCgpKTsKKyAgICB9CisKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xNzg4LDcg
KzE1OTgsNyBAQCBib29sIFRlc3RDb250cm9sbGVyOjpydW5UZXN0KGNvbnN0IGNoYXIqCiAgICAg
aWYgKGNvbW1hbmQudGltZW91dCA+IDBfcykKICAgICAgICAgbV9jdXJyZW50SW52b2NhdGlvbi0+
c2V0Q3VzdG9tVGltZW91dChjb21tYW5kLnRpbWVvdXQpOwogCi0gICAgbV9jdXJyZW50SW52b2Nh
dGlvbi0+c2V0RHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKGNvbW1hbmQuZHVtcEpTQ29uc29sZUxv
Z0luU3RkRXJyIHx8IG9wdGlvbnMuZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKTsKKyAgICBtX2N1
cnJlbnRJbnZvY2F0aW9uLT5zZXREdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIoY29tbWFuZC5kdW1w
SlNDb25zb2xlTG9nSW5TdGRFcnIgfHwgb3B0aW9ucy5kdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIo
KSk7CiAKICAgICBwbGF0Zm9ybVdpbGxSdW5UZXN0KCptX2N1cnJlbnRJbnZvY2F0aW9uKTsKIApA
QCAtMzAwMyw3ICsyODEzLDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1XaWxsUnVu
VGVzdAogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemVEYXRhU3RvcmUo
V0tQYWdlQ29uZmlndXJhdGlvblJlZiBjb25maWd1cmF0aW9uLCBjb25zdCBUZXN0T3B0aW9ucyYg
b3B0aW9ucykKIHsKLSAgICBpZiAoIW9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lvbikKKyAgICBp
ZiAoIW9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lvbigpKQogICAgICAgICBXS1BhZ2VDb25maWd1
cmF0aW9uU2V0V2Vic2l0ZURhdGFTdG9yZShjb25maWd1cmF0aW9uLCBkZWZhdWx0V2Vic2l0ZURh
dGFTdG9yZSgpKTsKIAogICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdLUGFnZUNvbmZpZ3VyYXRp
b25HZXRXZWJzaXRlRGF0YVN0b3JlKGNvbmZpZ3VyYXRpb24pOwpAQCAtMzgxOCw3ICszNjI4LDcg
QEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVpbml0aWFsaXplQXBwQm91bgogICAgIFdLV2Vic2l0
ZURhdGFTdG9yZVJlaW5pdGlhbGl6ZUFwcEJvdW5kRG9tYWlucyhUZXN0Q29udHJvbGxlcjo6d2Vi
c2l0ZURhdGFTdG9yZSgpKTsKIH0KIAotdm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlQnVuZGxl
SWRlbnRpZmllckluTmV0d29ya1Byb2Nlc3MoY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVy
KQordm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0d29ya1By
b2Nlc3MoY29uc3Qgc3RkOjpzdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIpCiB7CiAgICAgSW5BcHBC
cm93c2VyUHJpdmFjeUNhbGxiYWNrQ29udGV4dCBjb250ZXh0KCp0aGlzKTsKICAgICBXS1dlYnNp
dGVEYXRhU3RvcmVVcGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2VzcyhUZXN0Q29u
dHJvbGxlcjo6d2Vic2l0ZURhdGFTdG9yZSgpLCB0b1dLKGJ1bmRsZUlkZW50aWZpZXIpLmdldCgp
LCAmY29udGV4dCwgaW5BcHBCcm93c2VyUHJpdmFjeVZvaWRSZXN1bHRDYWxsYmFjayk7CkBAIC0z
ODMzLDggKzM2NDMsOSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpjbGVhckJ1bmRsZUlkZW50aWZp
CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCi12b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9y
bUFkZFRlc3RPcHRpb25zKFRlc3RPcHRpb25zJikgY29uc3QKK1Rlc3RGZWF0dXJlcyBUZXN0Q29u
dHJvbGxlcjo6cGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVPdmVycmlkZXNEZWZhdWx0c0ZvclRlc3Qo
Y29uc3QgVGVzdENvbW1hbmQmKSBjb25zdAogeworICAgIHJldHVybiB7IH07CiB9CiAKIHZvaWQg
VGVzdENvbnRyb2xsZXI6OmluamVjdFVzZXJTY3JpcHQoV0tTdHJpbmdSZWYpCkluZGV4OiBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCShyZXZpc2lvbiAyNjgwMjEpCisrKyBU
b29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxXZWJLaXQvV0tSZXRhaW5QdHIuaD4KICNpbmNsdWRl
IDxzZXQ+CiAjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CiAjaW5j
bHVkZSA8dmVjdG9yPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CkBAIC01MCwxMiArNTEsMTIgQEAgT0JKQ19DTEFTUyBXS1dlYlZpZXdDb25m
aWd1cmF0aW9uOwogCiBuYW1lc3BhY2UgV1RSIHsKIAotY2xhc3MgVGVzdEludm9jYXRpb247Citj
bGFzcyBFdmVudFNlbmRlclByb3h5OwogY2xhc3MgT3JpZ2luU2V0dGluZ3M7CiBjbGFzcyBQbGF0
Zm9ybVdlYlZpZXc7Ci1jbGFzcyBFdmVudFNlbmRlclByb3h5OworY2xhc3MgVGVzdEludm9jYXRp
b247CitjbGFzcyBUZXN0T3B0aW9uczsKIHN0cnVjdCBUZXN0Q29tbWFuZDsKLXN0cnVjdCBUZXN0
T3B0aW9uczsKIAogY2xhc3MgQXN5bmNUYXNrIHsKIHB1YmxpYzoKQEAgLTkxLDExICs5Miw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBjb25maWd1cmVXZWJzaXRlRGF0YVN0b3JlVGVtcG9y
YXJ5RGlyZWN0b3JpZXMoV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvblJlZik7CiAgICAg
c3RhdGljIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkZWZhdWx0V2Vic2l0ZURhdGFTdG9yZSgpOwog
Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZpZXdXaWR0aDsKLSAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgdmlld0hlaWdodDsKLQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB3M2NTVkdW
aWV3V2lkdGg7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHczY1NWR1ZpZXdIZWlnaHQ7Cisg
ICAgc3RhdGljIFdLVVJMUmVmIGNyZWF0ZVRlc3RVUkwoY29uc3QgY2hhciogcGF0aE9yVVJMKTsK
IAogICAgIHN0YXRpYyBjb25zdCBXVEY6OlNlY29uZHMgZGVmYXVsdFNob3J0VGltZW91dDsKICAg
ICBzdGF0aWMgY29uc3QgV1RGOjpTZWNvbmRzIG5vVGltZW91dDsKQEAgLTExNSwyMCArMTEyLDE1
IEBAIHB1YmxpYzoKICAgICBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgd2Vic2l0ZURhdGFTdG9yZSgp
OwogCiAgICAgRXZlbnRTZW5kZXJQcm94eSogZXZlbnRTZW5kZXJQcm94eSgpIHsgcmV0dXJuIG1f
ZXZlbnRTZW5kZXJQcm94eS5nZXQoKTsgfQotCi0gICAgYm9vbCBzaG91bGRVc2VSZW1vdGVMYXll
clRyZWUoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFVzZVJlbW90ZUxheWVyVHJlZTsgfQogICAg
IAogICAgIC8vIFJ1bnMgdGhlIHJ1biBsb29wIHVudGlsIGBkb25lYCBpcyB0cnVlIG9yIHRoZSB0
aW1lb3V0IGVsYXBzZXMuCiAgICAgYm9vbCB1c2VXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcigpIHsg
cmV0dXJuIG1fdXNlV2FpdFRvRHVtcFdhdGNoZG9nVGltZXI7IH0KICAgICB2b2lkIHJ1blVudGls
KGJvb2wmIGRvbmUsIFdURjo6U2Vjb25kcyB0aW1lb3V0KTsKICAgICB2b2lkIG5vdGlmeURvbmUo
KTsKIAotICAgIGJvb2wgc2hvdWxkU2hvd1dlYlZpZXcoKSBjb25zdCB7IHJldHVybiBtX3Nob3Vs
ZFNob3dXZWJWaWV3OyB9CiAgICAgYm9vbCB1c2luZ1NlcnZlck1vZGUoKSBjb25zdCB7IHJldHVy
biBtX3VzaW5nU2VydmVyTW9kZTsgfQogICAgIHZvaWQgY29uZmlndXJlVmlld0ZvclRlc3QoY29u
c3QgVGVzdEludm9jYXRpb24mKTsKLSAgICAKLSAgICBib29sIHNob3VsZFNob3dUb3VjaGVzKCkg
Y29uc3QgeyByZXR1cm4gbV9zaG91bGRTaG93VG91Y2hlczsgfQotICAgIAorCiAgICAgYm9vbCBi
ZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmVmb3JlVW5sb2FkUmV0
dXJuVmFsdWU7IH0KICAgICB2b2lkIHNldEJlZm9yZVVubG9hZFJldHVyblZhbHVlKGJvb2wgdmFs
dWUpIHsgbV9iZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSA9IHZhbHVlOyB9CiAKQEAgLTI3NSw3ICsy
NjcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckxvYWRlZFN1YnJlc291cmNlRG9tYWlucygp
OwogICAgIHZvaWQgY2xlYXJBcHBCb3VuZFNlc3Npb24oKTsKICAgICB2b2lkIHJlaW5pdGlhbGl6
ZUFwcEJvdW5kRG9tYWlucygpOwotICAgIHZvaWQgdXBkYXRlQnVuZGxlSWRlbnRpZmllckluTmV0
d29ya1Byb2Nlc3MoY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyKTsKKyAgICB2b2lkIHVw
ZGF0ZUJ1bmRsZUlkZW50aWZpZXJJbk5ldHdvcmtQcm9jZXNzKGNvbnN0IHN0ZDo6c3RyaW5nJiBi
dW5kbGVJZGVudGlmaWVyKTsKICAgICB2b2lkIGNsZWFyQnVuZGxlSWRlbnRpZmllckluTmV0d29y
a1Byb2Nlc3MoKTsKIAogICAgIFdLQXJyYXlSZWYgb3BlblBhbmVsRmlsZVVSTHMoKSBjb25zdCB7
IHJldHVybiBtX29wZW5QYW5lbEZpbGVVUkxzLmdldCgpOyB9CkBAIC0zNjIsNyArMzU0LDcgQEAg
cHVibGljOgogCiBwcml2YXRlOgogICAgIFdLUmV0YWluUHRyPFdLUGFnZUNvbmZpZ3VyYXRpb25S
ZWY+IGdlbmVyYXRlUGFnZUNvbmZpZ3VyYXRpb24oY29uc3QgVGVzdE9wdGlvbnMmKTsKLSAgICBX
S1JldGFpblB0cjxXS0NvbnRleHRDb25maWd1cmF0aW9uUmVmPiBnZW5lcmF0ZUNvbnRleHRDb25m
aWd1cmF0aW9uKGNvbnN0IFRlc3RPcHRpb25zOjpDb250ZXh0T3B0aW9ucyYpIGNvbnN0OworICAg
IFdLUmV0YWluUHRyPFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWY+IGdlbmVyYXRlQ29udGV4dENv
bmZpZ3VyYXRpb24oY29uc3QgQ29udGV4dE9wdGlvbnMmKSBjb25zdDsKICAgICB2b2lkIGluaXRp
YWxpemUoaW50IGFyZ2MsIGNvbnN0IGNoYXIqIGFyZ3ZbXSk7CiAgICAgdm9pZCBjcmVhdGVXZWJW
aWV3V2l0aE9wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmKTsKICAgICB2b2lkIHJ1bigpOwpAQCAt
MzgwLDcgKzM3Miw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKICAg
ICBXS0NvbnRleHRSZWYgcGxhdGZvcm1BZGp1c3RDb250ZXh0KFdLQ29udGV4dFJlZiwgV0tDb250
ZXh0Q29uZmlndXJhdGlvblJlZik7CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemVDb250ZXh0
KCk7Ci0gICAgdm9pZCBwbGF0Zm9ybUFkZFRlc3RPcHRpb25zKFRlc3RPcHRpb25zJikgY29uc3Q7
CiAgICAgdm9pZCBwbGF0Zm9ybUNyZWF0ZVdlYlZpZXcoV0tQYWdlQ29uZmlndXJhdGlvblJlZiwg
Y29uc3QgVGVzdE9wdGlvbnMmKTsKICAgICBzdGF0aWMgUGxhdGZvcm1XZWJWaWV3KiBwbGF0Zm9y
bUNyZWF0ZU90aGVyUGFnZShQbGF0Zm9ybVdlYlZpZXcqIHBhcmVudFZpZXcsIFdLUGFnZUNvbmZp
Z3VyYXRpb25SZWYsIGNvbnN0IFRlc3RPcHRpb25zJik7CiAgICAgdm9pZCBwbGF0Zm9ybVJlc2V0
UHJlZmVyZW5jZXNUb0NvbnNpc3RlbnRWYWx1ZXMoKTsKQEAgLTM4OSw3ICszODAsNyBAQCBwcml2
YXRlOgogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgY29jb2FQbGF0Zm9ybUluaXRpYWxp
emUoKTsKICAgICB2b2lkIGNvY29hUmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyhjb25zdCBU
ZXN0T3B0aW9ucyYpOwotICAgIHZvaWQgc2V0QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKGNv
bnN0IFN0cmluZyYpOworICAgIHZvaWQgc2V0QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKGNv
bnN0IHN0ZDo6c3RyaW5nJik7CiAgICAgdm9pZCBjbGVhckFwcGxpY2F0aW9uQnVuZGxlSWRlbnRp
ZmllclRlc3RpbmdPdmVycmlkZSgpOwogI2VuZGlmCiAgICAgdm9pZCBwbGF0Zm9ybUNvbmZpZ3Vy
ZVZpZXdGb3JUZXN0KGNvbnN0IFRlc3RJbnZvY2F0aW9uJik7CkBAIC00MDMsNyArMzk0LDkgQEAg
cHJpdmF0ZToKIAogICAgIHZvaWQgZW5zdXJlVmlld1N1cHBvcnRzT3B0aW9uc0ZvclRlc3QoY29u
c3QgVGVzdEludm9jYXRpb24mKTsKICAgICBUZXN0T3B0aW9ucyB0ZXN0T3B0aW9uc0ZvclRlc3Qo
Y29uc3QgVGVzdENvbW1hbmQmKSBjb25zdDsKLSAgICB2b2lkIHVwZGF0ZVBsYXRmb3JtU3BlY2lm
aWNUZXN0T3B0aW9uc0ZvclRlc3QoVGVzdE9wdGlvbnMmLCBjb25zdCBzdGQ6OnN0cmluZyYgcGF0
aE9yVVJMKSBjb25zdDsKKyAgICBUZXN0RmVhdHVyZXMgZ2xvYmFsRmVhdHVyZURlZmF1bHRzRm9y
VGVzdChjb25zdCBUZXN0Q29tbWFuZCYpIGNvbnN0OworICAgIFRlc3RGZWF0dXJlcyBwbGF0Zm9y
bVNwZWNpZmljRmVhdHVyZURlZmF1bHRzRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYpIGNvbnN0
OworICAgIFRlc3RGZWF0dXJlcyBwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZU92ZXJyaWRlc0RlZmF1
bHRzRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYpIGNvbnN0OwogCiAgICAgdm9pZCB1cGRhdGVX
ZWJWaWV3U2l6ZUZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mKTsKICAgICB2b2lkIHVwZGF0
ZVdpbmRvd1NjYWxlRm9yVGVzdChQbGF0Zm9ybVdlYlZpZXcqLCBjb25zdCBUZXN0SW52b2NhdGlv
biYpOwpAQCAtNTM4LDggKzUzMSwxMCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9jcmVhdGVkT3Ro
ZXJQYWdlIHsgZmFsc2UgfTsKICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbV9wYXRoczsK
ICAgICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gbV9hbGxvd2VkSG9zdHM7Ci0gICAgSGFzaE1hcDxT
dHJpbmcsIGJvb2w+IG1faW50ZXJuYWxGZWF0dXJlczsKLSAgICBIYXNoTWFwPFN0cmluZywgYm9v
bD4gbV9leHBlcmltZW50YWxGZWF0dXJlczsKKyAgICBUZXN0RmVhdHVyZXMgbV9nbG9iYWxGZWF0
dXJlczsKKworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4gbV9pbnRl
cm5hbEZlYXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4g
bV9leHBlcmltZW50YWxGZWF0dXJlczsKIAogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
X2luamVjdGVkQnVuZGxlUGF0aDsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbV90ZXN0
UGx1Z2luRGlyZWN0b3J5OwpAQCAtNTQ4LDcgKzU0Myw3IEBAIHByaXZhdGU6CiAKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8UGxhdGZvcm1XZWJWaWV3PiBtX21haW5XZWJWaWV3OwogICAgIFdLUmV0YWlu
UHRyPFdLQ29udGV4dFJlZj4gbV9jb250ZXh0OwotICAgIE9wdGlvbmFsPFRlc3RPcHRpb25zOjpD
b250ZXh0T3B0aW9ucz4gbV9jb250ZXh0T3B0aW9uczsKKyAgICBPcHRpb25hbDxDb250ZXh0T3B0
aW9ucz4gbV9jb250ZXh0T3B0aW9uczsKICAgICBXS1JldGFpblB0cjxXS1BhZ2VHcm91cFJlZj4g
bV9wYWdlR3JvdXA7CiAgICAgV0tSZXRhaW5QdHI8V0tVc2VyQ29udGVudENvbnRyb2xsZXJSZWY+
IG1fdXNlckNvbnRlbnRDb250cm9sbGVyOwogCkBAIC02MDUsMTQgKzYwMCwxMCBAQCBwcml2YXRl
OgogCiAgICAgYm9vbCBtX2ZvcmNlQ29tcGxleFRleHQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9z
aG91bGRVc2VBY2NlbGVyYXRlZERyYXdpbmcgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9zaG91bGRV
c2VSZW1vdGVMYXllclRyZWUgeyBmYWxzZSB9OwotCisgICAgCiAgICAgYm9vbCBtX3Nob3VsZExv
Z0NhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UgeyBmYWxzZSB9OwogICAgIGJv
b2wgbV9zaG91bGRMb2dEb3dubG9hZENhbGxiYWNrcyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3No
b3VsZExvZ0hpc3RvcnlDbGllbnRDYWxsYmFja3MgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9zaG91
bGRTaG93V2ViVmlldyB7IGZhbHNlIH07Ci0gICAgCi0gICAgYm9vbCBtX3Nob3VsZFNob3dUb3Vj
aGVzIHsgZmFsc2UgfTsKICAgICBib29sIG1fY2hlY2tGb3JXb3JsZExlYWtzIHsgZmFsc2UgfTsK
IAogICAgIGJvb2wgbV9hbGxvd0FueUhUVFBTQ2VydGlmaWNhdGVGb3JBbGxvd2VkSG9zdHMgeyBm
YWxzZSB9OwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAJ
KHJldmlzaW9uIDI2ODAyMSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsMTEgKzEzMSwxMSBAQCBib29sIFRlc3RJbnZv
Y2F0aW9uOjpzaG91bGRMb2dIaXN0b3J5Q2xpCiBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9u
YXJ5UmVmPiBUZXN0SW52b2NhdGlvbjo6Y3JlYXRlVGVzdFNldHRpbmdzRGljdGlvbmFyeSgpCiB7
CiAgICAgYXV0byBiZWdpblRlc3RNZXNzYWdlQm9keSA9IGFkb3B0V0soV0tNdXRhYmxlRGljdGlv
bmFyeUNyZWF0ZSgpKTsKLSAgICBzZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgIlVzZUZs
ZXhpYmxlVmlld3BvcnQiLCBvcHRpb25zKCkudXNlRmxleGlibGVWaWV3cG9ydCk7CisgICAgc2V0
VmFsdWUoYmVnaW5UZXN0TWVzc2FnZUJvZHksICJVc2VGbGV4aWJsZVZpZXdwb3J0Iiwgb3B0aW9u
cygpLnVzZUZsZXhpYmxlVmlld3BvcnQoKSk7CiAgICAgc2V0VmFsdWUoYmVnaW5UZXN0TWVzc2Fn
ZUJvZHksICJEdW1wUGl4ZWxzIiwgbV9kdW1wUGl4ZWxzKTsKICAgICBzZXRWYWx1ZShiZWdpblRl
c3RNZXNzYWdlQm9keSwgIlRpbWVvdXQiLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4obV90aW1lb3V0
Lm1pbGxpc2Vjb25kcygpKSk7CiAgICAgc2V0VmFsdWUoYmVnaW5UZXN0TWVzc2FnZUJvZHksICJE
dW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiLCBtX2R1bXBKU0NvbnNvbGVMb2dJblN0ZEVycik7Ci0g
ICAgc2V0VmFsdWUoYmVnaW5UZXN0TWVzc2FnZUJvZHksICJhZGRpdGlvbmFsU3VwcG9ydGVkSW1h
Z2VUeXBlcyIsIG9wdGlvbnMoKS5hZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcy5jX3N0cigp
KTsKKyAgICBzZXRWYWx1ZShiZWdpblRlc3RNZXNzYWdlQm9keSwgImFkZGl0aW9uYWxTdXBwb3J0
ZWRJbWFnZVR5cGVzIiwgb3B0aW9ucygpLmFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzKCku
Y19zdHIoKSk7CiAgICAgcmV0dXJuIGJlZ2luVGVzdE1lc3NhZ2VCb2R5OwogfQogCkluZGV4OiBU
b29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RPcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RPcHRpb25zLmNwcAkocmV2aXNpb24gMjY4MDIxKQorKysg
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDQ4ICsyNiwyNTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0T3B0
aW9ucy5oIgogCisjaW5jbHVkZSAiU3RyaW5nRnVuY3Rpb25zLmgiCisjaW5jbHVkZSAiVGVzdENv
bnRyb2xsZXIuaCIKKyNpbmNsdWRlIDxmc3RyZWFtPgorI2luY2x1ZGUgPGlvc3RyZWFtPgogI2lu
Y2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYv
U3RkRmlsZXN5c3RlbS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCisjZGVm
aW5lIERVTVBfRkVBVFVSRVMgMAorCiBuYW1lc3BhY2UgV1RSIHsKIAotc3RhdGljIGJvb2wgcGF0
aENvbnRhaW5zKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwsIGNvbnN0IGNoYXIqIHN1YnN0
cmluZykKKyNpZiBEVU1QX0ZFQVRVUkVTCitzdGF0aWMgdm9pZCBkdW1wRmVhdHVyZXMoY29uc3Qg
VGVzdEZlYXR1cmVzJiBmZWF0dXJlcykKIHsKLSAgICBTdHJpbmcgcGF0aChwYXRoT3JVUkwuY19z
dHIoKSk7Ci0gICAgcmV0dXJuIHBhdGguY29udGFpbnMoc3Vic3RyaW5nKTsgLy8gQ2FzZS1pbnNl
bnNpdGl2ZS4KKyAgICBpZiAoZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMuZW1wdHkoKSAm
JiBmZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMuZW1wdHkoKSAmJiBmZWF0dXJlcy5ib29s
RmVhdHVyZXMuZW1wdHkoKSAmJiBmZWF0dXJlcy5kb3VibGVGZWF0dXJlcy5lbXB0eSgpICYmIGZl
YXR1cmVzLnN0cmluZ0ZlYXR1cmVzLmVtcHR5KCkgJiYgZmVhdHVyZXMuc3RyaW5nVmVjdG9yRmVh
dHVyZXMuZW1wdHkoKSkgeworICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgW0VNUFRZXVxuIjsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoIWZlYXR1cmVzLmV4cGVyaW1lbnRh
bEZlYXR1cmVzLmVtcHR5KCkpIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICIgIEV4cGVyaW1lbnRh
bCBGZWF0dXJlczogXG4iOworICAgICAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVy
ZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMpCisgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgICAi
IDw8IGtleSA8PCAiOiAiIDw8IHZhbHVlIDw8ICdcbic7CisgICAgfQorICAgIGlmICghZmVhdHVy
ZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzLmVtcHR5KCkpIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8
ICIgIEludGVybmFsIEZlYXR1cmVzOiBcbiI7CisgICAgICAgIGZvciAoYXV0byBba2V5LCB2YWx1
ZV0gOiBmZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMpCisgICAgICAgICAgICBzdGQ6OmNl
cnIgPDwgIiAgICAiIDw8IGtleSA8PCAiOiAiIDw8IHZhbHVlIDw8ICdcbic7CisgICAgfQorICAg
IGlmICghZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmVtcHR5KCkpIHsKKyAgICAgICAgc3RkOjpjZXJy
IDw8ICIgIEJvb2wgRmVhdHVyZXM6IFxuIjsKKyAgICAgICAgZm9yIChhdXRvIFtrZXksIHZhbHVl
XSA6IGZlYXR1cmVzLmJvb2xGZWF0dXJlcykKKyAgICAgICAgICAgIHN0ZDo6Y2VyciA8PCAiICAg
ICIgPDwga2V5IDw8ICI6ICIgPDwgdmFsdWUgPDwgJ1xuJzsKKyAgICB9CisgICAgaWYgKCFmZWF0
dXJlcy5kb3VibGVGZWF0dXJlcy5lbXB0eSgpKSB7CisgICAgICAgIHN0ZDo6Y2VyciA8PCAiICBE
b3VibGUgRmVhdHVyZXM6IFxuIjsKKyAgICAgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGZl
YXR1cmVzLmRvdWJsZUZlYXR1cmVzKQorICAgICAgICAgICAgc3RkOjpjZXJyIDw8ICIgICAgIiA8
PCBrZXkgPDwgIjogIiA8PCB2YWx1ZSA8PCAnXG4nOworICAgIH0KKyAgICBpZiAoIWZlYXR1cmVz
LnN0cmluZ0ZlYXR1cmVzLmVtcHR5KCkpIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICIgIFN0cmlu
ZyBGZWF0dXJlczogXG4iOworICAgICAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDogZmVhdHVy
ZXMuc3RyaW5nRmVhdHVyZXMpCisgICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgICAiIDw8IGtl
eSA8PCAiOiAiIDw8IHZhbHVlIDw8ICdcbic7CisgICAgfQorICAgIGlmICghZmVhdHVyZXMuc3Ry
aW5nVmVjdG9yRmVhdHVyZXMuZW1wdHkoKSkgeworICAgICAgICBzdGQ6OmNlcnIgPDwgIiAgU3Ry
aW5nIFZlY3RvciBGZWF0dXJlczogXG4iOworICAgICAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVd
IDogZmVhdHVyZXMuc3RyaW5nVmVjdG9yRmVhdHVyZXMpCisgICAgICAgICAgICBzdGQ6OmNlcnIg
PDwgIiAgICAiIDw8IGtleSA8PCAiOiBOdW1iZXIgb2Ygc3RyaW5ncyAiIDw8IHZhbHVlLnNpemUo
KSA8PCAnXG4nOworICAgIH0KIH0KKyNlbmRpZgogCi1zdGF0aWMgYm9vbCBzaG91bGRNYWtlVmll
d3BvcnRGbGV4aWJsZShjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQorZW51bSBjbGFzcyBL
ZXlUeXBlIHsKKyAgICBCb29sLAorICAgIERvdWJsZSwKKyAgICBTdHJpbmcsCisgICAgU3RyaW5n
UmVsYXRpdmVQYXRoLAorICAgIFN0cmluZ1VSTCwKKyAgICBTdHJpbmdWZWN0b3IsCisgICAgVW5r
bm93bgorfTsKKworc3RhdGljIEtleVR5cGUga2V5VHlwZShzdGQ6OnN0cmluZyBrZXkpCiB7Ci0g
ICAgcmV0dXJuIHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJ2aWV3cG9ydC8iKSAmJiAhcGF0aENv
bnRhaW5zKHBhdGhPclVSTCwgInZpc3VhbC12aWV3cG9ydC8iKTsKKyAgICBzdGF0aWMgc3RkOjp1
bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBLZXlUeXBlPiBrZXlUeXBlTWFwIHsKKyAgICAgICAg
eyAidXNlVGhyZWFkZWRTY3JvbGxpbmciLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgInVz
ZUFjY2VsZXJhdGVkRHJhd2luZyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAidXNlUmVt
b3RlTGF5ZXJUcmVlIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJzaG91bGRTaG93V2Vi
VmlldyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAidXNlRmxleGlibGVWaWV3cG9ydCIs
IEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAidXNlRGF0YURldGVjdGlvbiIsIEtleVR5cGU6
OkJvb2wgfSwKKyAgICAgICAgeyAidXNlTW9ja1Njcm9sbGJhcnMiLCBLZXlUeXBlOjpCb29sIH0s
CisgICAgICAgIHsgIm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzIiwgS2V5VHlwZTo6Qm9vbCB9LAor
ICAgICAgICB7ICJpZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyIsIEtleVR5cGU6OkJvb2wgfSwK
KyAgICAgICAgeyAidXNlQ2hhcmFjdGVyU2VsZWN0aW9uR3JhbnVsYXJpdHkiLCBLZXlUeXBlOjpC
b29sIH0sCisgICAgICAgIHsgImVuYWJsZUF0dGFjaG1lbnRFbGVtZW50IiwgS2V5VHlwZTo6Qm9v
bCB9LAorICAgICAgICB7ICJlbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciIsIEtleVR5cGU6OkJv
b2wgfSwKKyAgICAgICAgeyAidXNlRXBoZW1lcmFsU2Vzc2lvbiIsIEtleVR5cGU6OkJvb2wgfSwK
KyAgICAgICAgeyAiZW5hYmxlTWVudUl0ZW1FbGVtZW50IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAg
ICAgICB7ICJlbmFibGVLZXlnZW5FbGVtZW50IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7
ICJlbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7
ICJlbmFibGVQb2ludGVyTG9jayIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxl
V2ViQXV0aGVudGljYXRpb24iLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZVdl
YkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAg
ICAgICB7ICJlbmFibGVJbnNwZWN0b3JBZGRpdGlvbnMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAg
ICAgIHsgInNob3VsZFNob3dUb3VjaGVzIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJk
dW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImFs
bG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzIiwgS2V5VHlwZTo6
Qm9vbCB9LAorICAgICAgICB7ICJkb21QYXN0ZUFsbG93ZWQiLCBLZXlUeXBlOjpCb29sIH0sCisg
ICAgICAgIHsgImVuYWJsZUNvbG9yRmlsdGVyIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7
ICJwdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlIiwgS2V5VHlwZTo6Qm9vbCB9LAor
ICAgICAgICB7ICJydW5TaW5nbHkiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImNoZWNr
Rm9yV29ybGRMZWFrcyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAic2hvdWxkSWdub3Jl
TWV0YVZpZXdwb3J0IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJzcGVsbENoZWNraW5n
RG90cyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5hYmxlU2VydmljZUNvbnRyb2xz
IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlZGl0YWJsZSIsIEtleVR5cGU6OkJvb2wg
fSwKKyAgICAgICAgeyAic2hvdWxkSGFuZGxlUnVuT3BlblBhbmVsIiwgS2V5VHlwZTo6Qm9vbCB9
LAorICAgICAgICB7ICJzaG91bGRQcmVzZW50UG9wb3ZlcnMiLCBLZXlUeXBlOjpCb29sIH0sCisg
ICAgICAgIHsgImVuYWJsZUFwcE5hcCIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiZW5h
YmxlQmFja0ZvcndhcmRDYWNoZSIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAiYWxsb3dz
TGlua1ByZXZpZXciLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJsZUNhcHR1cmVW
aWRlb0luVUlQcm9jZXNzIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJlbmFibGVDYXB0
dXJlVmlkZW9JbkdQVVByb2Nlc3MiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAgIHsgImVuYWJs
ZUNhcHR1cmVBdWRpb0luVUlQcm9jZXNzIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJl
bmFibGVDYXB0dXJlQXVkaW9JbkdQVVByb2Nlc3MiLCBLZXlUeXBlOjpCb29sIH0sCisgICAgICAg
IHsgImFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHMiLCBLZXlUeXBlOjpCb29sIH0sCisgICAg
ICAgIHsgImVuYWJsZUluQXBwQnJvd3NlclByaXZhY3kiLCBLZXlUeXBlOjpCb29sIH0sCisgICAg
ICAgIHsgImlzQXBwQm91bmRXZWJWaWV3IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJp
Z25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAg
ICAgICB7ICJlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbiIsIEtleVR5cGU6OkJvb2wgfSwK
KyAgICAgICAgeyAiZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW4iLCBLZXlUeXBlOjpCb29s
IH0sCisgICAgICAgIHsgInVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQiLCBLZXlUeXBlOjpC
b29sIH0sCisgICAgCisgICAgICAgIHsgImNvbnRlbnRJbnNldC50b3AiLCBLZXlUeXBlOjpEb3Vi
bGUgfSwKKyAgICAgICAgeyAiZGV2aWNlU2NhbGVGYWN0b3IiLCBLZXlUeXBlOjpEb3VibGUgfSwK
KyAgICAgICAgeyAidmlld1dpZHRoIiwgS2V5VHlwZTo6RG91YmxlIH0sCisgICAgICAgIHsgInZp
ZXdIZWlnaHQiLCBLZXlUeXBlOjpEb3VibGUgfSwKKworICAgICAgICB7ICJqc2NPcHRpb25zIiwg
S2V5VHlwZTo6U3RyaW5nIH0sCisgICAgICAgIHsgImFkZGl0aW9uYWxTdXBwb3J0ZWRJbWFnZVR5
cGVzIiwgS2V5VHlwZTo6U3RyaW5nIH0sCisgICAgICAgIHsgImNvbnRlbnRNb2RlIiwgS2V5VHlw
ZTo6U3RyaW5nIH0sCisgICAgICAgIHsgImFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllciIsIEtl
eVR5cGU6OlN0cmluZyB9LAorICAgICAgICB7ICJhcHBsaWNhdGlvbk1hbmlmZXN0IiwgS2V5VHlw
ZTo6U3RyaW5nUmVsYXRpdmVQYXRoIH0sCisgICAgICAgIHsgInN0YW5kYWxvbmVXZWJBcHBsaWNh
dGlvblVSTCIsIEtleVR5cGU6OlN0cmluZ1VSTCB9LAorCisgICAgICAgIHsgImxhbmd1YWdlIiwg
S2V5VHlwZTo6U3RyaW5nVmVjdG9yIH0sCisgICAgfTsKKyAgICAKKyAgICBhdXRvIGl0ID0ga2V5
VHlwZU1hcC5maW5kKGtleSk7CisgICAgaWYgKGl0ID09IGtleVR5cGVNYXAuZW5kKCkpCisgICAg
ICAgIHJldHVybiBLZXlUeXBlOjpVbmtub3duOworICAgIHJldHVybiBpdC0+c2Vjb25kOwogfQog
Ci1zdGF0aWMgYm9vbCBzaG91bGRVc2VGaXhlZExheW91dChjb25zdCBzdGQ6OnN0cmluZyYgcGF0
aE9yVVJMKQorc3RhdGljIGJvb2wgcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKGNvbnN0IHN0
ZDo6c3RyaW5nJiB2YWx1ZSkKIHsKLSNpZiBFTkFCTEUoQ1NTX0RFVklDRV9BREFQVEFUSU9OKQot
ICAgIGlmIChwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAiZGV2aWNlLWFkYXB0LyIpIHx8IHBhdGhD
b250YWlucyhwYXRoT3JVUkwsICJkZXZpY2UtYWRhcHRcXCIpKQorICAgIGlmICh2YWx1ZSA9PSAi
dHJ1ZSIpCiAgICAgICAgIHJldHVybiB0cnVlOwotI2VuZGlmCisgICAgaWYgKHZhbHVlID09ICJm
YWxzZSIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIExPR19FUlJPUigiRm91bmQgdW5l
eHBlY3RlZCB2YWx1ZSAnJXMnIGZvciBib29sZWFuIG9wdGlvbi4gRXhwZWN0ZWQgJ3RydWUnIG9y
ICdmYWxzZScuIiwgdmFsdWUuY19zdHIoKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0
aWMgYm9vbCBpc1NWR1Rlc3RQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCitzdGF0
aWMgc3RkOjpzdHJpbmcgcGFyc2VTdHJpbmdUZXN0SGVhZGVyVmFsdWVBc1JlbGF0aXZlUGF0aChj
b25zdCBzdGQ6OnN0cmluZyYgdmFsdWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCit7
CisgICAgYXV0byBiYXNlVVJMID0gYWRvcHRXSyhUZXN0Q29udHJvbGxlcjo6Y3JlYXRlVGVzdFVS
TChwYXRoT3JVUkwuY19zdHIoKSkpOworICAgIGF1dG8gcmVsYXRpdmVVUkwgPSBhZG9wdFdLKFdL
VVJMQ3JlYXRlV2l0aEJhc2VVUkwoYmFzZVVSTC5nZXQoKSwgdmFsdWUuY19zdHIoKSkpOworICAg
IHJldHVybiB0b1NURChhZG9wdFdLKFdLVVJMQ29weVBhdGgocmVsYXRpdmVVUkwuZ2V0KCkpKSk7
Cit9CisKK3N0YXRpYyBzdGQ6OnN0cmluZyBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJWYWx1ZUFzVVJM
KGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gcGF0aENvbnRhaW5zKHBh
dGhPclVSTCwgInN2Zy9XM0MtU1ZHLTEuMSIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJz
dmdcXFczQy1TVkctMS4xIik7CisgICAgcmV0dXJuIHRvU1REKGFkb3B0V0soV0tVUkxDb3B5U3Ry
aW5nKFRlc3RDb250cm9sbGVyOjpjcmVhdGVUZXN0VVJMKHZhbHVlLmNfc3RyKCkpKSkpOwogfQog
Ci1zdGF0aWMgYm9vbCBzaG91bGRVc2VFcGhlbWVyYWxTZXNzaW9uKGNvbnN0IHN0ZDo6c3RyaW5n
JiBwYXRoT3JVUkwpCitzdGF0aWMgVGVzdEZlYXR1cmVzIHBhcnNlVGVzdEhlYWRlcihzdGQ6OmZp
bGVzeXN0ZW06OnBhdGggcGF0aCwgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKIHsKLSAg
ICByZXR1cm4gcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInczYy9JbmRleGVkREItcHJpdmF0ZS1i
cm93c2luZyIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJ3M2NcXEluZGV4ZWREQi1wcml2
YXRlLWJyb3dzaW5nIik7CisgICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVzOworICAgIGlmICghc3Rk
OjpmaWxlc3lzdGVtOjpleGlzdHMocGF0aCkpCisgICAgICAgIHJldHVybiBmZWF0dXJlczsKKwor
ICAgIHN0ZDo6aWZzdHJlYW0gZmlsZShwYXRoKTsKKyAgICBpZiAoIWZpbGUuZ29vZCgpKSB7Cisg
ICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IG9wZW4gZmlsZSB0byBpbnNwZWN0IHRlc3QgaGVh
ZGVycyBpbiAlcyIsIHBhdGguY19zdHIoKSk7CisgICAgICAgIHJldHVybiBmZWF0dXJlczsKKyAg
ICB9CisKKyAgICBzdGQ6OnN0cmluZyBvcHRpb25zOworICAgIGdldGxpbmUoZmlsZSwgb3B0aW9u
cyk7CisgICAgc3RkOjpzdHJpbmcgYmVnaW5TdHJpbmcoIndlYmtpdC10ZXN0LXJ1bm5lciBbICIp
OworICAgIHN0ZDo6c3RyaW5nIGVuZFN0cmluZygiIF0iKTsKKyAgICBzaXplX3QgYmVnaW5Mb2Nh
dGlvbiA9IG9wdGlvbnMuZmluZChiZWdpblN0cmluZyk7CisgICAgaWYgKGJlZ2luTG9jYXRpb24g
PT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAgICAgIHJldHVybiBmZWF0dXJlczsKKyAgICBzaXpl
X3QgZW5kTG9jYXRpb24gPSBvcHRpb25zLmZpbmQoZW5kU3RyaW5nLCBiZWdpbkxvY2F0aW9uKTsK
KyAgICBpZiAoZW5kTG9jYXRpb24gPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgICAgTE9H
X0VSUk9SKCJDb3VsZCBub3QgZmluZCBlbmQgb2YgdGVzdCBoZWFkZXIgaW4gJXMiLCBwYXRoLmNf
c3RyKCkpOworICAgICAgICByZXR1cm4gZmVhdHVyZXM7CisgICAgfQorICAgIHN0ZDo6c3RyaW5n
IHBhaXJTdHJpbmcgPSBvcHRpb25zLnN1YnN0cihiZWdpbkxvY2F0aW9uICsgYmVnaW5TdHJpbmcu
c2l6ZSgpLCBlbmRMb2NhdGlvbiAtIChiZWdpbkxvY2F0aW9uICsgYmVnaW5TdHJpbmcuc2l6ZSgp
KSk7CisgICAgc2l6ZV90IHBhaXJTdGFydCA9IDA7CisgICAgd2hpbGUgKHBhaXJTdGFydCA8IHBh
aXJTdHJpbmcuc2l6ZSgpKSB7CisgICAgICAgIHNpemVfdCBwYWlyRW5kID0gcGFpclN0cmluZy5m
aW5kKCIgIiwgcGFpclN0YXJ0KTsKKyAgICAgICAgaWYgKHBhaXJFbmQgPT0gc3RkOjpzdHJpbmc6
Om5wb3MpCisgICAgICAgICAgICBwYWlyRW5kID0gcGFpclN0cmluZy5zaXplKCk7CisgICAgICAg
IHNpemVfdCBlcXVhbHNMb2NhdGlvbiA9IHBhaXJTdHJpbmcuZmluZCgiPSIsIHBhaXJTdGFydCk7
CisgICAgICAgIGlmIChlcXVhbHNMb2NhdGlvbiA9PSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAg
ICAgICAgICAgTE9HX0VSUk9SKCJNYWxmb3JtZWQgb3B0aW9uIGluIHRlc3QgaGVhZGVyIChjb3Vs
ZCBub3QgZmluZCAnPScgY2hhcmFjdGVyKSBpbiAlcyIsIHBhdGguY19zdHIoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBhdXRvIGtleSA9IHBhaXJTdHJpbmcuc3Vi
c3RyKHBhaXJTdGFydCwgZXF1YWxzTG9jYXRpb24gLSBwYWlyU3RhcnQpOworICAgICAgICBhdXRv
IHZhbHVlID0gcGFpclN0cmluZy5zdWJzdHIoZXF1YWxzTG9jYXRpb24gKyAxLCBwYWlyRW5kIC0g
KGVxdWFsc0xvY2F0aW9uICsgMSkpOworCisgICAgICAgIGlmIChrZXkucmZpbmQoImV4cGVyaW1l
bnRhbDoiKSA9PSAwKSB7CisgICAgICAgICAgICBrZXkgPSBrZXkuc3Vic3RyKDEzKTsKKyAgICAg
ICAgICAgIGZlYXR1cmVzLmV4cGVyaW1lbnRhbEZlYXR1cmVzLmluc2VydCh7IGtleSwgcGFyc2VC
b29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKSB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChrZXku
cmZpbmQoImludGVybmFsOiIpID09IDApIHsKKyAgICAgICAgICAgIGtleSA9IGtleS5zdWJzdHIo
OSk7CisgICAgICAgICAgICBmZWF0dXJlcy5pbnRlcm5hbERlYnVnRmVhdHVyZXMuaW5zZXJ0KHsg
a2V5LCBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpIH0pOworICAgICAgICB9CisK
KyAgICAgICAgc3dpdGNoIChrZXlUeXBlKGtleSkpIHsKKyAgICAgICAgY2FzZSBLZXlUeXBlOjpC
b29sOgorICAgICAgICAgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7IGtleSwgcGFy
c2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKSB9KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEtleVR5cGU6OkRvdWJsZToKKyAgICAgICAgICAgIGZlYXR1cmVzLmRvdWJs
ZUZlYXR1cmVzLmluc2VydCh7IGtleSwgc3RkOjpzdG9kKHZhbHVlKSB9KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEtleVR5cGU6OlN0cmluZzoKKyAgICAgICAgICAgIGZlYXR1
cmVzLnN0cmluZ0ZlYXR1cmVzLmluc2VydCh7IGtleSwgdmFsdWUgfSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmdSZWxhdGl2ZVBhdGg6CisgICAgICAg
ICAgICBmZWF0dXJlcy5zdHJpbmdGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHBhcnNlU3RyaW5nVGVz
dEhlYWRlclZhbHVlQXNSZWxhdGl2ZVBhdGgodmFsdWUsIHBhdGhPclVSTCkgfSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmdVUkw6CisgICAgICAgICAg
ICBmZWF0dXJlcy5zdHJpbmdGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHBhcnNlU3RyaW5nVGVzdEhl
YWRlclZhbHVlQXNVUkwodmFsdWUpIH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgS2V5VHlwZTo6U3RyaW5nVmVjdG9yOgorICAgICAgICAgICAgZmVhdHVyZXMuc3RyaW5nVmVj
dG9yRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBzcGxpdCh2YWx1ZSwgJywnKSB9KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEtleVR5cGU6OlVua25vd246CisgICAgICAgICAgICBM
T0dfRVJST1IoIlVua25vd24ga2V5LCAnJXMsIGluIHRlc3QgaGVhZGVyIGluICVzIiwga2V5LmNf
c3RyKCksIHBhdGguY19zdHIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIHBhaXJTdGFydCA9IHBhaXJFbmQgKyAxOworICAgIH0KKworICAgIHJldHVybiBmZWF0
dXJlczsKK30KKworc3RhdGljIGJvb2wgcGF0aENvbnRhaW5zKGNvbnN0IHN0ZDo6c3RyaW5nJiBw
YXRoT3JVUkwsIGNvbnN0IGNoYXIqIHN1YnN0cmluZykKK3sKKyAgICBTdHJpbmcgcGF0aChwYXRo
T3JVUkwuY19zdHIoKSk7CisgICAgcmV0dXJuIHBhdGguY29udGFpbnMoc3Vic3RyaW5nKTsgLy8g
Q2FzZS1pbnNlbnNpdGl2ZS4KIH0KIAotc3RhdGljIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yRm9y
VGVzdChjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQorc3RhdGljIE9wdGlvbmFsPGRvdWJs
ZT4gZGV2aWNlU2NhbGVGYWN0b3JGb3JUZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwp
CiB7CiAgICAgaWYgKHBhdGhDb250YWlucyhwYXRoT3JVUkwsICIvaGlkcGktM3gtIikpCiAgICAg
ICAgIHJldHVybiAzOwogICAgIGlmIChwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAiL2hpZHBpLSIp
KQogICAgICAgICByZXR1cm4gMjsKLSAgICByZXR1cm4gMTsKKyAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogfQogCiBzdGF0aWMgYm9vbCBzaG91bGREdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIoY29u
c3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKQEAgLTgzLDE0ICsyOTAsNzkgQEAgc3RhdGljIGJv
b2wgc2hvdWxkRHVtcEpTQ29uc29sZUxvZ0luU3RkRQogICAgICAgICB8fCBwYXRoQ29udGFpbnMo
cGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvd2Vic29ja2V0cyIpIHx8IHBhdGhDb250YWlucyhw
YXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My93ZWJzb2NrZXRzIik7CiB9CiAKLVRlc3RPcHRpb25z
OjpUZXN0T3B0aW9ucyhjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQotICAgIDogdXNlRmxl
eGlibGVWaWV3cG9ydChzaG91bGRNYWtlVmlld3BvcnRGbGV4aWJsZShwYXRoT3JVUkwpKQotICAg
ICwgdXNlRml4ZWRMYXlvdXQoc2hvdWxkVXNlRml4ZWRMYXlvdXQocGF0aE9yVVJMKSkKLSAgICAs
IGlzU1ZHVGVzdChpc1NWR1Rlc3RQYXRoKHBhdGhPclVSTCkpCi0gICAgLCB1c2VFcGhlbWVyYWxT
ZXNzaW9uKHNob3VsZFVzZUVwaGVtZXJhbFNlc3Npb24ocGF0aE9yVVJMKSkKLSAgICAsIGR1bXBK
U0NvbnNvbGVMb2dJblN0ZEVycihzaG91bGREdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIocGF0aE9y
VVJMKSkKLSAgICAsIGRldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yRm9yVGVzdChw
YXRoT3JVUkwpKQorVGVzdEZlYXR1cmVzIGhhcmRjb2RlZEZlYXR1cmVzQmFzZWRPblBhdGhGb3JU
ZXN0KGNvbnN0IFRlc3RDb21tYW5kJiBjb21tYW5kKQoreworICAgIFRlc3RGZWF0dXJlcyBmZWF0
dXJlczsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdHJ5IHRvIHJlcGxhY2UgdGhlIHJlc2V0
IG9mIHRoZXNlIHdpdGggVGVzdE9wdGlvbnMudHh0IGJhc2VkIHNvbHV0aW9ucy4KKworICAgIGlm
IChzaG91bGREdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIoY29tbWFuZC5wYXRoT3JVUkwpKQorICAg
ICAgICBmZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgImR1bXBKU0NvbnNvbGVMb2dJblN0
ZEVyciIsIHRydWUgfSk7CisgICAgaWYgKGF1dG8gZGV2aWNlU2NhbGVGYWN0b3IgPSBkZXZpY2VT
Y2FsZUZhY3RvckZvclRlc3QoY29tbWFuZC5wYXRoT3JVUkwpOyBkZXZpY2VTY2FsZUZhY3RvciAh
PSBXVEY6Om51bGxvcHQpCisgICAgICAgIGZlYXR1cmVzLmRvdWJsZUZlYXR1cmVzLmluc2VydCh7
ICJkZXZpY2VTY2FsZUZhY3RvciIsIGRldmljZVNjYWxlRmFjdG9yLnZhbHVlKCkgfSk7CisKKyAg
ICByZXR1cm4gZmVhdHVyZXM7Cit9CisKK3ZvaWQgbWVyZ2UoVGVzdEZlYXR1cmVzJiBiYXNlLCBU
ZXN0RmVhdHVyZXMgYWRkaXRpb25hbCkKK3sKKy8vICAgIGFkZGl0aW9uYWwuZXhwZXJpbWVudGFs
RmVhdHVyZXMubWVyZ2UoYmFzZS5leHBlcmltZW50YWxGZWF0dXJlcyk7CisvLyAgICBhZGRpdGlv
bmFsLmludGVybmFsRGVidWdGZWF0dXJlcy5tZXJnZShiYXNlLmludGVybmFsRGVidWdGZWF0dXJl
cyk7CisvLyAgICBhZGRpdGlvbmFsLmJvb2xGZWF0dXJlcy5tZXJnZShiYXNlLmJvb2xGZWF0dXJl
cyk7CisvLyAgICBhZGRpdGlvbmFsLmRvdWJsZUZlYXR1cmVzLm1lcmdlKGJhc2UuZG91YmxlRmVh
dHVyZXMpOworLy8gICAgYWRkaXRpb25hbC5zdHJpbmdGZWF0dXJlcy5tZXJnZShiYXNlLnN0cmlu
Z0ZlYXR1cmVzKTsKKy8vICAgIGFkZGl0aW9uYWwuc3RyaW5nVmVjdG9yRmVhdHVyZXMubWVyZ2Uo
YmFzZS5zdHJpbmdWZWN0b3JGZWF0dXJlcyk7CisvLyAgICBiYXNlID0gYWRkaXRpb25hbDsKKwor
ICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0gOiBhZGRpdGlvbmFsLmV4cGVyaW1lbnRhbEZlYXR1
cmVzKQorICAgICAgICBiYXNlLmV4cGVyaW1lbnRhbEZlYXR1cmVzLmluc2VydF9vcl9hc3NpZ24o
a2V5LCB2YWx1ZSk7CisgICAgZm9yIChhdXRvIFtrZXksIHZhbHVlXSA6IGFkZGl0aW9uYWwuaW50
ZXJuYWxEZWJ1Z0ZlYXR1cmVzKQorICAgICAgICBiYXNlLmludGVybmFsRGVidWdGZWF0dXJlcy5p
bnNlcnRfb3JfYXNzaWduKGtleSwgdmFsdWUpOworICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0g
OiBhZGRpdGlvbmFsLmJvb2xGZWF0dXJlcykKKyAgICAgICAgYmFzZS5ib29sRmVhdHVyZXMuaW5z
ZXJ0X29yX2Fzc2lnbihrZXksIHZhbHVlKTsKKyAgICBmb3IgKGF1dG8gW2tleSwgdmFsdWVdIDog
YWRkaXRpb25hbC5kb3VibGVGZWF0dXJlcykKKyAgICAgICAgYmFzZS5kb3VibGVGZWF0dXJlcy5p
bnNlcnRfb3JfYXNzaWduKGtleSwgdmFsdWUpOworICAgIGZvciAoYXV0byBba2V5LCB2YWx1ZV0g
OiBhZGRpdGlvbmFsLnN0cmluZ0ZlYXR1cmVzKQorICAgICAgICBiYXNlLnN0cmluZ0ZlYXR1cmVz
Lmluc2VydF9vcl9hc3NpZ24oa2V5LCB2YWx1ZSk7CisgICAgZm9yIChhdXRvIFtrZXksIHZhbHVl
XSA6IGFkZGl0aW9uYWwuc3RyaW5nVmVjdG9yRmVhdHVyZXMpCisgICAgICAgIGJhc2Uuc3RyaW5n
VmVjdG9yRmVhdHVyZXMuaW5zZXJ0X29yX2Fzc2lnbihrZXksIHZhbHVlKTsKK30KKworVGVzdEZl
YXR1cmVzIGZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0T3B0aW9uc0ZpbGVzRm9yVGVzdChjb25zdCBU
ZXN0Q29tbWFuZCYgY29tbWFuZCkKK3sKKyAgICBzdGQ6OmZpbGVzeXN0ZW06OnBhdGggcGF0aCA9
IGNvbW1hbmQuYWJzb2x1dGVQYXRoOworCisgICAgLy8gR2F0aGVyIGRpcmVjdG9yaWVzIHRoYXQg
bWF5IGNvbnRhaW4gVGVzdEhlYWRlcnMgZmlsZXMuCisgICAgc3RkOjp2ZWN0b3I8c3RkOjpmaWxl
c3lzdGVtOjpwYXRoPiBkaXJlY3Rvcmllc1RvQ2hlY2s7CisgICAgZG8geworICAgICAgICBwYXRo
ID0gcGF0aC5wYXJlbnRfcGF0aCgpOworICAgICAgICBkaXJlY3Rvcmllc1RvQ2hlY2sucHVzaF9i
YWNrKHBhdGgpOworICAgIH0gd2hpbGUgKHBhdGguZmlsZW5hbWUoKSAhPSAiTGF5b3V0VGVzdHMi
KTsKKworICAgIC8vIEl0ZXJhdGUgdGhlIGRpcmVjdG9yaWVzIHRoYXQgbWF5IGNvbnRhaW4gJ1Rl
c3RPcHRpb25zLnR4dCcgZmlsZXMgZnJvbSBsZWFzdCB0byBtb3N0CisgICAgLy8gc3BlY2lmaWMs
IGFuZCBtZXJnZSBpbiBhbnkgZmVhdHVyZXMgZm91bmQuCisgICAgVGVzdEZlYXR1cmVzIGZlYXR1
cmVzOworICAgIGZvciAoYXV0byBkaXJlY3RvcnlUb0NoZWNrIDogV1RGOjptYWtlUmV2ZXJzZWRS
YW5nZShkaXJlY3Rvcmllc1RvQ2hlY2spKSB7CisgICAgICAgIGF1dG8gdGVzdEhlYWRlckZpbGUg
PSBkaXJlY3RvcnlUb0NoZWNrIC8gIlRlc3RPcHRpb25zLnR4dCI7CisgICAgICAgIGF1dG8gdGVz
dE9wdGlvbnNGZWF0dXJlcyA9IHBhcnNlVGVzdEhlYWRlcih0ZXN0SGVhZGVyRmlsZSwgY29tbWFu
ZC5wYXRoT3JVUkwpOworICAgICAgICBtZXJnZShmZWF0dXJlcywgdGVzdE9wdGlvbnNGZWF0dXJl
cyk7CisgICAgfQorICAgIAorICAgIHJldHVybiBmZWF0dXJlczsKK30KKworVGVzdEZlYXR1cmVz
IGZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0SGVhZGVyRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYg
Y29tbWFuZCkKIHsKKyAgICByZXR1cm4gcGFyc2VUZXN0SGVhZGVyKGNvbW1hbmQuYWJzb2x1dGVQ
YXRoLCBjb21tYW5kLnBhdGhPclVSTCk7Cit9CisKK1Rlc3RPcHRpb25zOjpUZXN0T3B0aW9ucyhU
ZXN0RmVhdHVyZXMgZmVhdHVyZXMpCisgICAgOiBtX2ZlYXR1cmVzIHsgZmVhdHVyZXMgfQorewor
I2lmIERVTVBfRkVBVFVSRVMKKyAgICBzdGQ6OmNlcnIgPDwgIkRVTVBJTkcgRkVBVFVSRVNcbiI7
CisgICAgZHVtcEZlYXR1cmVzKG1fZmVhdHVyZXMpOworI2VuZGlmCiB9CiAKIH0KSW5kZXg6IFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RPcHRpb25zLmgJKHJldmlzaW9uIDI2ODAyMSkKKysrIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTY1
ICsyNSwxNzcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8b3B0aW9uYWw+Cisj
aW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisjaW5jbHVkZSA8dmVj
dG9yPgogCiBuYW1lc3BhY2UgV1RSIHsKIAotc3RydWN0IFRlc3RPcHRpb25zIHsKLSAgICBzdHJ1
Y3QgQ29udGV4dE9wdGlvbnMgewotICAgICAgICBWZWN0b3I8U3RyaW5nPiBvdmVycmlkZUxhbmd1
YWdlczsKLSAgICAgICAgYm9vbCBpZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzIHsg
ZmFsc2UgfTsKLSAgICAgICAgYm9vbCBlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbiB7IHRy
dWUgfTsKLSAgICAgICAgYm9vbCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiB7IGZhbHNl
IH07Ci0gICAgICAgIGJvb2wgdXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dCB7IGZhbHNlIH07
Ci0KLSAgICAgICAgYm9vbCBoYXNTYW1lSW5pdGlhbGl6YXRpb25PcHRpb25zKGNvbnN0IENvbnRl
eHRPcHRpb25zJiBvcHRpb25zKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaWdu
b3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0cyAhPSBvcHRpb25zLmlnbm9yZVN5bmNocm9u
b3VzTWVzc2FnaW5nVGltZW91dHMKLSAgICAgICAgICAgICAgICB8fCBvdmVycmlkZUxhbmd1YWdl
cyAhPSBvcHRpb25zLm92ZXJyaWRlTGFuZ3VhZ2VzCi0gICAgICAgICAgICAgICAgfHwgZW5hYmxl
UHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24gIT0gb3B0aW9ucy5lbmFibGVQcm9jZXNzU3dhcE9uTmF2
aWdhdGlvbgotICAgICAgICAgICAgICAgIHx8IGVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVu
ICE9IG9wdGlvbnMuZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW4KLSAgICAgICAgICAgICAg
ICB8fCB1c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0ICE9IG9wdGlvbnMudXNlU2VydmljZVdv
cmtlclNob3J0VGltZW91dCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgc2hvdWxkRW5hYmxl
UHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24oKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24gfHwgZW5hYmxlUHJvY2Vzc1N3YXBP
bldpbmRvd09wZW47Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgYm9vbCB1c2VUaHJlYWRlZFNj
cm9sbGluZyB7IGZhbHNlIH07Ci0gICAgYm9vbCB1c2VBY2NlbGVyYXRlZERyYXdpbmcgeyBmYWxz
ZSB9OwotICAgIGJvb2wgdXNlUmVtb3RlTGF5ZXJUcmVlIHsgZmFsc2UgfTsKLSAgICBib29sIHNo
b3VsZFNob3dXZWJWaWV3IHsgZmFsc2UgfTsKLSAgICBib29sIHVzZUZsZXhpYmxlVmlld3BvcnQg
eyBmYWxzZSB9OwotICAgIGJvb2wgdXNlRml4ZWRMYXlvdXQgeyBmYWxzZSB9OwotICAgIGJvb2wg
aXNTVkdUZXN0IHsgZmFsc2UgfTsKLSAgICBib29sIHVzZURhdGFEZXRlY3Rpb24geyBmYWxzZSB9
OwotICAgIGJvb2wgdXNlTW9ja1Njcm9sbGJhcnMgeyB0cnVlIH07Ci0gICAgYm9vbCBuZWVkc1Np
dGVTcGVjaWZpY1F1aXJrcyB7IGZhbHNlIH07Ci0gICAgYm9vbCBpZ25vcmVzVmlld3BvcnRTY2Fs
ZUxpbWl0cyB7IGZhbHNlIH07Ci0gICAgYm9vbCB1c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxh
cml0eSB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVBdHRhY2htZW50RWxlbWVudCB7IGZhbHNl
IH07Ci0gICAgYm9vbCBlbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciB7IGZhbHNlIH07Ci0gICAg
Ym9vbCB1c2VFcGhlbWVyYWxTZXNzaW9uIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZU1lbnVJ
dGVtRWxlbWVudCB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVLZXlnZW5FbGVtZW50IHsgZmFs
c2UgfTsKLSAgICBib29sIGVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMgeyB0cnVlIH07Ci0gICAg
Ym9vbCBlbmFibGVQb2ludGVyTG9jayB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVXZWJBdXRo
ZW50aWNhdGlvbiB7IHRydWUgfTsKLSAgICBib29sIGVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9j
YWxBdXRoZW50aWNhdG9yIHsgdHJ1ZSB9OwotICAgIGJvb2wgZW5hYmxlSW5zcGVjdG9yQWRkaXRp
b25zIHsgZmFsc2UgfTsKLSAgICBib29sIHNob3VsZFNob3dUb3VjaGVzIHsgZmFsc2UgfTsKLSAg
ICBib29sIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciB7IGZhbHNlIH07Ci0gICAgYm9vbCBhbGxv
d0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyB7IGZhbHNlIH07Ci0g
ICAgYm9vbCBkb21QYXN0ZUFsbG93ZWQgeyB0cnVlIH07Ci0gICAgYm9vbCBlbmFibGVDb2xvckZp
bHRlciB7IGZhbHNlIH07Ci0gICAgYm9vbCBwdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtN
b2RlIHsgZmFsc2UgfTsKLSAgICBib29sIHJ1blNpbmdseSB7IGZhbHNlIH07Ci0gICAgYm9vbCBj
aGVja0ZvcldvcmxkTGVha3MgeyBmYWxzZSB9OwotICAgIGJvb2wgc2hvdWxkSWdub3JlTWV0YVZp
ZXdwb3J0IHsgZmFsc2UgfTsKLSAgICBib29sIHNob3VsZFNob3dTcGVsbENoZWNraW5nRG90cyB7
IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVTZXJ2aWNlQ29udHJvbHMgeyBmYWxzZSB9OwotICAg
IGJvb2wgZWRpdGFibGUgeyBmYWxzZSB9OwotICAgIGJvb2wgc2hvdWxkSGFuZGxlUnVuT3BlblBh
bmVsIHsgdHJ1ZSB9OwotICAgIGJvb2wgc2hvdWxkUHJlc2VudFBvcG92ZXJzIHsgdHJ1ZSB9Owot
ICAgIGJvb2wgZW5hYmxlQXBwTmFwIHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZUJhY2tGb3J3
YXJkQ2FjaGUgeyBmYWxzZSB9OwotICAgIGJvb2wgYWxsb3dzTGlua1ByZXZpZXcgeyB0cnVlIH07
Ci0gICAgYm9vbCBlbmFibGVDYXB0dXJlVmlkZW9JblVJUHJvY2VzcyB7IGZhbHNlIH07Ci0gICAg
Ym9vbCBlbmFibGVDYXB0dXJlVmlkZW9JbkdQVVByb2Nlc3MgeyBmYWxzZSB9OwotICAgIGJvb2wg
ZW5hYmxlQ2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3MgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxl
Q2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzIHsgZmFsc2UgfTsKLSAgICBib29sIGFsbG93VG9wTmF2
aWdhdGlvblRvRGF0YVVSTHMgeyB0cnVlIH07Ci0gICAgYm9vbCBlbmFibGVJbkFwcEJyb3dzZXJQ
cml2YWN5IHsgZmFsc2UgfTsKLSAgICBib29sIGlzQXBwQm91bmRXZWJWaWV3IHsgZmFsc2UgfTsK
LQotICAgIGRvdWJsZSBjb250ZW50SW5zZXRUb3AgeyAwIH07Ci0KLSAgICBmbG9hdCBkZXZpY2VT
Y2FsZUZhY3RvciB7IDEgfTsKLSAgICBzdGQ6OnN0cmluZyBhcHBsaWNhdGlvbk1hbmlmZXN0Owot
ICAgIHN0ZDo6c3RyaW5nIGpzY09wdGlvbnM7Ci0gICAgc3RkOjpzdHJpbmcgYWRkaXRpb25hbFN1
cHBvcnRlZEltYWdlVHlwZXM7Ci0gICAgc3RkOjpzdHJpbmcgc3RhbmRhbG9uZVdlYkFwcGxpY2F0
aW9uVVJMOwotICAgIEhhc2hNYXA8U3RyaW5nLCBib29sPiBleHBlcmltZW50YWxGZWF0dXJlczsK
LSAgICBIYXNoTWFwPFN0cmluZywgYm9vbD4gaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzOwotICAgIFN0
cmluZyBjb250ZW50TW9kZTsKLSAgICBTdHJpbmcgYXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVy
OwotICAgIAotICAgIENvbnRleHRPcHRpb25zIGNvbnRleHRPcHRpb25zOwotCi0gICAgVGVzdE9w
dGlvbnMoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCk7Ci0KLSAgICAvLyBBZGQgaGVyZSBv
cHRpb25zIHRoYXQgY2FuIG9ubHkgYmUgc2V0IHVwb24gUGxhdGZvcm1XZWJWaWV3Ci0gICAgLy8g
aW5pdGlhbGl6YXRpb24gYW5kIG1ha2Ugc3VyZSBpdCdzIHVwIHRvIGRhdGUgd2hlbiBhZGRpbmcg
bmV3Ci0gICAgLy8gb3B0aW9ucyB0byB0aGlzIHN0cnVjdC4gT3RoZXJ3aXNlLCB0ZXN0cyB1c2lu
ZyB0aG9zZSBvcHRpb25zCi0gICAgLy8gbWlnaHQgZmFpbCBpZiBXVFIgaXMgcmV1c2luZyBhbiBl
eGlzdGluZyBQbGF0Zm9ybVdlYlZpZXcuCi0gICAgYm9vbCBoYXNTYW1lSW5pdGlhbGl6YXRpb25P
cHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKSBjb25zdAorc3RydWN0IFRlc3RDb21t
YW5kOworCitzdHJ1Y3QgVGVzdEZlYXR1cmVzIHsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3Rk
OjpzdHJpbmcsIGJvb2w+IGV4cGVyaW1lbnRhbEZlYXR1cmVzOworICAgIHN0ZDo6dW5vcmRlcmVk
X21hcDxzdGQ6OnN0cmluZywgYm9vbD4gaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzOworICAgIHN0ZDo6
dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4gYm9vbEZlYXR1cmVzOworICAgIHN0ZDo6
dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgZG91YmxlPiBkb3VibGVGZWF0dXJlczsKKyAgICBz
dGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBzdHJpbmdGZWF0dXJl
czsKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dmVjdG9yPHN0ZDo6
c3RyaW5nPj4gc3RyaW5nVmVjdG9yRmVhdHVyZXM7Cit9OworCit2b2lkIG1lcmdlKFRlc3RGZWF0
dXJlcyYgYmFzZSwgVGVzdEZlYXR1cmVzIGFkZGl0aW9uYWwpOworCitUZXN0RmVhdHVyZXMgaGFy
ZGNvZGVkRmVhdHVyZXNCYXNlZE9uUGF0aEZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKTsKK1Rl
c3RGZWF0dXJlcyBmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdE9wdGlvbnNGaWxlc0ZvclRlc3QoY29u
c3QgVGVzdENvbW1hbmQmKTsKK1Rlc3RGZWF0dXJlcyBmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdEhl
YWRlckZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKTsKKworc3RydWN0IENvbnRleHRPcHRpb25z
IHsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gb3ZlcnJpZGVMYW5ndWFnZXM7CisgICAg
Ym9vbCBpZ25vcmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzOworICAgIGJvb2wgZW5hYmxl
UHJvY2Vzc1N3YXBPbk5hdmlnYXRpb247CisgICAgYm9vbCBlbmFibGVQcm9jZXNzU3dhcE9uV2lu
ZG93T3BlbjsKKyAgICBib29sIHVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVvdXQ7CisKKyAgICBi
b29sIGhhc1NhbWVJbml0aWFsaXphdGlvbk9wdGlvbnMoY29uc3QgQ29udGV4dE9wdGlvbnMmIG9w
dGlvbnMpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAodXNlVGhyZWFkZWRTY3JvbGxpbmcgIT0g
b3B0aW9ucy51c2VUaHJlYWRlZFNjcm9sbGluZwotICAgICAgICAgICAgfHwgdXNlQWNjZWxlcmF0
ZWREcmF3aW5nICE9IG9wdGlvbnMudXNlQWNjZWxlcmF0ZWREcmF3aW5nCi0gICAgICAgICAgICB8
fCB1c2VNb2NrU2Nyb2xsYmFycyAhPSBvcHRpb25zLnVzZU1vY2tTY3JvbGxiYXJzCi0gICAgICAg
ICAgICB8fCBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyAhPSBvcHRpb25zLm5lZWRzU2l0ZVNwZWNp
ZmljUXVpcmtzCi0gICAgICAgICAgICB8fCB1c2VDaGFyYWN0ZXJTZWxlY3Rpb25HcmFudWxhcml0
eSAhPSBvcHRpb25zLnVzZUNoYXJhY3RlclNlbGVjdGlvbkdyYW51bGFyaXR5Ci0gICAgICAgICAg
ICB8fCBlbmFibGVBdHRhY2htZW50RWxlbWVudCAhPSBvcHRpb25zLmVuYWJsZUF0dGFjaG1lbnRF
bGVtZW50Ci0gICAgICAgICAgICB8fCBlbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciAhPSBvcHRp
b25zLmVuYWJsZUludGVyc2VjdGlvbk9ic2VydmVyCi0gICAgICAgICAgICB8fCB1c2VFcGhlbWVy
YWxTZXNzaW9uICE9IG9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lvbgotICAgICAgICAgICAgfHwg
ZW5hYmxlTWVudUl0ZW1FbGVtZW50ICE9IG9wdGlvbnMuZW5hYmxlTWVudUl0ZW1FbGVtZW50Ci0g
ICAgICAgICAgICB8fCBlbmFibGVLZXlnZW5FbGVtZW50ICE9IG9wdGlvbnMuZW5hYmxlS2V5Z2Vu
RWxlbWVudAotICAgICAgICAgICAgfHwgZW5hYmxlTW9kZXJuTWVkaWFDb250cm9scyAhPSBvcHRp
b25zLmVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMKLSAgICAgICAgICAgIHx8IGVuYWJsZVBvaW50
ZXJMb2NrICE9IG9wdGlvbnMuZW5hYmxlUG9pbnRlckxvY2sKLSAgICAgICAgICAgIHx8IGVuYWJs
ZVdlYkF1dGhlbnRpY2F0aW9uICE9IG9wdGlvbnMuZW5hYmxlV2ViQXV0aGVudGljYXRpb24KLSAg
ICAgICAgICAgIHx8IGVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yICE9
IG9wdGlvbnMuZW5hYmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhlbnRpY2F0b3IKLSAgICAg
ICAgICAgIHx8IGVuYWJsZUluc3BlY3RvckFkZGl0aW9ucyAhPSBvcHRpb25zLmVuYWJsZUluc3Bl
Y3RvckFkZGl0aW9ucwotICAgICAgICAgICAgfHwgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyICE9
IG9wdGlvbnMuZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyCi0gICAgICAgICAgICB8fCBhcHBsaWNh
dGlvbk1hbmlmZXN0ICE9IG9wdGlvbnMuYXBwbGljYXRpb25NYW5pZmVzdAotICAgICAgICAgICAg
fHwgYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMgIT0gb3B0
aW9ucy5hbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscwotICAg
ICAgICAgICAgfHwgZG9tUGFzdGVBbGxvd2VkICE9IG9wdGlvbnMuZG9tUGFzdGVBbGxvd2VkCi0g
ICAgICAgICAgICB8fCBlbmFibGVDb2xvckZpbHRlciAhPSBvcHRpb25zLmVuYWJsZUNvbG9yRmls
dGVyCi0gICAgICAgICAgICB8fCBwdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlICE9
IG9wdGlvbnMucHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZQotICAgICAgICAgICAg
fHwganNjT3B0aW9ucyAhPSBvcHRpb25zLmpzY09wdGlvbnMKLSAgICAgICAgICAgIHx8IGFkZGl0
aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzICE9IG9wdGlvbnMuYWRkaXRpb25hbFN1cHBvcnRlZElt
YWdlVHlwZXMKLSAgICAgICAgICAgIHx8IHJ1blNpbmdseSAhPSBvcHRpb25zLnJ1blNpbmdseQot
ICAgICAgICAgICAgfHwgY2hlY2tGb3JXb3JsZExlYWtzICE9IG9wdGlvbnMuY2hlY2tGb3JXb3Js
ZExlYWtzCi0gICAgICAgICAgICB8fCBzaG91bGRTaG93U3BlbGxDaGVja2luZ0RvdHMgIT0gb3B0
aW9ucy5zaG91bGRTaG93U3BlbGxDaGVja2luZ0RvdHMKLSAgICAgICAgICAgIHx8IGVuYWJsZVNl
cnZpY2VDb250cm9scyAhPSBvcHRpb25zLmVuYWJsZVNlcnZpY2VDb250cm9scwotICAgICAgICAg
ICAgfHwgc2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0ICE9IG9wdGlvbnMuc2hvdWxkSWdub3JlTWV0
YVZpZXdwb3J0Ci0gICAgICAgICAgICB8fCBlZGl0YWJsZSAhPSBvcHRpb25zLmVkaXRhYmxlCi0g
ICAgICAgICAgICB8fCBzaG91bGRIYW5kbGVSdW5PcGVuUGFuZWwgIT0gb3B0aW9ucy5zaG91bGRI
YW5kbGVSdW5PcGVuUGFuZWwKLSAgICAgICAgICAgIHx8IHNob3VsZFByZXNlbnRQb3BvdmVycyAh
PSBvcHRpb25zLnNob3VsZFByZXNlbnRQb3BvdmVycwotICAgICAgICAgICAgfHwgY29udGVudElu
c2V0VG9wICE9IG9wdGlvbnMuY29udGVudEluc2V0VG9wCi0gICAgICAgICAgICB8fCBjb250ZW50
TW9kZSAhPSBvcHRpb25zLmNvbnRlbnRNb2RlCi0gICAgICAgICAgICB8fCBhcHBsaWNhdGlvbkJ1
bmRsZUlkZW50aWZpZXIgIT0gb3B0aW9ucy5hcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIKLSAg
ICAgICAgICAgIHx8IGVuYWJsZUFwcE5hcCAhPSBvcHRpb25zLmVuYWJsZUFwcE5hcAotICAgICAg
ICAgICAgfHwgZW5hYmxlQmFja0ZvcndhcmRDYWNoZSAhPSBvcHRpb25zLmVuYWJsZUJhY2tGb3J3
YXJkQ2FjaGUKLSAgICAgICAgICAgIHx8IGFsbG93c0xpbmtQcmV2aWV3ICE9IG9wdGlvbnMuYWxs
b3dzTGlua1ByZXZpZXcKLSAgICAgICAgICAgIHx8IGVuYWJsZUNhcHR1cmVWaWRlb0luVUlQcm9j
ZXNzICE9IG9wdGlvbnMuZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MKLSAgICAgICAgICAg
IHx8IGVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2VzcyAhPSBvcHRpb25zLmVuYWJsZUNhcHR1
cmVWaWRlb0luR1BVUHJvY2VzcwotICAgICAgICAgICAgfHwgZW5hYmxlQ2FwdHVyZUF1ZGlvSW5V
SVByb2Nlc3MgIT0gb3B0aW9ucy5lbmFibGVDYXB0dXJlQXVkaW9JblVJUHJvY2VzcwotICAgICAg
ICAgICAgfHwgZW5hYmxlQ2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzICE9IG9wdGlvbnMuZW5hYmxl
Q2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNzCi0gICAgICAgICAgICB8fCBhbGxvd1RvcE5hdmlnYXRp
b25Ub0RhdGFVUkxzICE9IG9wdGlvbnMuYWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMcwotICAg
ICAgICAgICAgfHwgZW5hYmxlSW5BcHBCcm93c2VyUHJpdmFjeSAhPSBvcHRpb25zLmVuYWJsZUlu
QXBwQnJvd3NlclByaXZhY3kKLSAgICAgICAgICAgIHx8IHN0YW5kYWxvbmVXZWJBcHBsaWNhdGlv
blVSTCAhPSBvcHRpb25zLnN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTAotICAgICAgICAgICAg
fHwgaXNBcHBCb3VuZFdlYlZpZXcgIT0gb3B0aW9ucy5pc0FwcEJvdW5kV2ViVmlldykKKyAgICAg
ICAgaWYgKGlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMgIT0gb3B0aW9ucy5pZ25v
cmVTeW5jaHJvbm91c01lc3NhZ2luZ1RpbWVvdXRzCisgICAgICAgICAgICB8fCBvdmVycmlkZUxh
bmd1YWdlcyAhPSBvcHRpb25zLm92ZXJyaWRlTGFuZ3VhZ2VzCisgICAgICAgICAgICB8fCBlbmFi
bGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbiAhPSBvcHRpb25zLmVuYWJsZVByb2Nlc3NTd2FwT25O
YXZpZ2F0aW9uCisgICAgICAgICAgICB8fCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbiAh
PSBvcHRpb25zLmVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuCisgICAgICAgICAgICB8fCB1
c2VTZXJ2aWNlV29ya2VyU2hvcnRUaW1lb3V0ICE9IG9wdGlvbnMudXNlU2VydmljZVdvcmtlclNo
b3J0VGltZW91dCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQogCi0gICAgICAgIGlmICghY29udGV4dE9wdGlvbnMuaGFzU2FtZUluaXRpYWxp
emF0aW9uT3B0aW9ucyhvcHRpb25zLmNvbnRleHRPcHRpb25zKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBib29sIHNob3VsZEVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlv
biB8fCBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbjsKKyAgICB9Cit9OwogCi0gICAgICAg
IGlmIChleHBlcmltZW50YWxGZWF0dXJlcyAhPSBvcHRpb25zLmV4cGVyaW1lbnRhbEZlYXR1cmVz
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworY2xhc3MgVGVzdE9wdGlvbnMgeworcHVibGlj
OgorICAgIGV4cGxpY2l0IFRlc3RPcHRpb25zKFRlc3RGZWF0dXJlcyk7CiAKLSAgICAgICAgaWYg
KGludGVybmFsRGVidWdGZWF0dXJlcyAhPSBvcHRpb25zLmludGVybmFsRGVidWdGZWF0dXJlcykK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBDb250ZXh0T3B0aW9ucyBjb250ZXh0T3B0
aW9ucygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgb3ZlcnJp
ZGVMYW5ndWFnZXMoKSwKKyAgICAgICAgICAgIGlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGlt
ZW91dHMoKSwKKyAgICAgICAgICAgIGVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uKCksCisg
ICAgICAgICAgICBlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3BlbigpLAorICAgICAgICAgICAg
dXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dCgpCisgICAgICAgIH07CisgICAgfQorCisgICAg
Ym9vbCB1c2VUaHJlYWRlZFNjcm9sbGluZygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFs
dWUoInVzZVRocmVhZGVkU2Nyb2xsaW5nIiwgZmFsc2UpOyB9CisgICAgYm9vbCB1c2VBY2NlbGVy
YXRlZERyYXdpbmcoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJ1c2VBY2NlbGVy
YXRlZERyYXdpbmciLCBmYWxzZSk7IH0KKyAgICBib29sIHVzZVJlbW90ZUxheWVyVHJlZSgpIGNv
bnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInVzZVJlbW90ZUxheWVyVHJlZSIsIGZhbHNl
KTsgfQorICAgIGJvb2wgc2hvdWxkU2hvd1dlYlZpZXcoKSBjb25zdCB7IHJldHVybiBib29sRmVh
dHVyZVZhbHVlKCJzaG91bGRTaG93V2ViVmlldyIsIGZhbHNlKTsgfQorICAgIGJvb2wgdXNlRmxl
eGlibGVWaWV3cG9ydCgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInVzZUZsZXhp
YmxlVmlld3BvcnQiLCBmYWxzZSk7IH0KKyAgICBib29sIHVzZURhdGFEZXRlY3Rpb24oKSBjb25z
dCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJ1c2VEYXRhRGV0ZWN0aW9uIiwgZmFsc2UpOyB9
CisgICAgYm9vbCB1c2VNb2NrU2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJl
VmFsdWUoInVzZU1vY2tTY3JvbGxiYXJzIiwgdHJ1ZSk7IH0KKyAgICBib29sIG5lZWRzU2l0ZVNw
ZWNpZmljUXVpcmtzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgibmVlZHNTaXRl
U3BlY2lmaWNRdWlya3MiLCBmYWxzZSk7IH0KKyAgICBib29sIGlnbm9yZXNWaWV3cG9ydFNjYWxl
TGltaXRzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiaWdub3Jlc1ZpZXdwb3J0
U2NhbGVMaW1pdHMiLCBmYWxzZSk7IH0KKyAgICBib29sIHVzZUNoYXJhY3RlclNlbGVjdGlvbkdy
YW51bGFyaXR5KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgidXNlQ2hhcmFjdGVy
U2VsZWN0aW9uR3JhbnVsYXJpdHkiLCBmYWxzZSk7IH0KKyAgICBib29sIGVuYWJsZUF0dGFjaG1l
bnRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlQXR0YWNo
bWVudEVsZW1lbnQiLCBmYWxzZSk7IH0KKyAgICBib29sIGVuYWJsZUludGVyc2VjdGlvbk9ic2Vy
dmVyKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlSW50ZXJzZWN0aW9u
T2JzZXJ2ZXIiLCBmYWxzZSk7IH0KKyAgICBib29sIHVzZUVwaGVtZXJhbFNlc3Npb24oKSBjb25z
dCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJ1c2VFcGhlbWVyYWxTZXNzaW9uIiwgZmFsc2Up
OyB9CisgICAgYm9vbCBlbmFibGVNZW51SXRlbUVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBib29s
RmVhdHVyZVZhbHVlKCJlbmFibGVNZW51SXRlbUVsZW1lbnQiLCBmYWxzZSk7IH0KKyAgICBib29s
IGVuYWJsZUtleWdlbkVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJl
bmFibGVLZXlnZW5FbGVtZW50IiwgZmFsc2UpOyB9CisgICAgYm9vbCBlbmFibGVNb2Rlcm5NZWRp
YUNvbnRyb2xzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlTW9kZXJu
TWVkaWFDb250cm9scyIsIHRydWUpOyB9CisgICAgYm9vbCBlbmFibGVQb2ludGVyTG9jaygpIGNv
bnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZVBvaW50ZXJMb2NrIiwgZmFsc2Up
OyB9CisgICAgYm9vbCBlbmFibGVXZWJBdXRoZW50aWNhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGJv
b2xGZWF0dXJlVmFsdWUoImVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uIiwgdHJ1ZSk7IH0KKyAgICBi
b29sIGVuYWJsZVdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9yKCkgY29uc3QgeyBy
ZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlV2ViQXV0aGVudGljYXRpb25Mb2NhbEF1dGhl
bnRpY2F0b3IiLCB0cnVlKTsgfQorICAgIGJvb2wgZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zKCkg
Y29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25z
IiwgZmFsc2UpOyB9CisgICAgYm9vbCBzaG91bGRTaG93VG91Y2hlcygpIGNvbnN0IHsgcmV0dXJu
IGJvb2xGZWF0dXJlVmFsdWUoInNob3VsZFNob3dUb3VjaGVzIiwgZmFsc2UpOyB9CisgICAgYm9v
bCBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZh
bHVlKCJkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiLCBmYWxzZSk7IH0KKyAgICBib29sIGFsbG93
Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzKCkgY29uc3QgeyByZXR1
cm4gYm9vbEZlYXR1cmVWYWx1ZSgiYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9y
Q3JlZGVudGlhbHMiLCBmYWxzZSk7IH0KKyAgICBib29sIGRvbVBhc3RlQWxsb3dlZCgpIGNvbnN0
IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImRvbVBhc3RlQWxsb3dlZCIsIHRydWUpOyB9Cisg
ICAgYm9vbCBlbmFibGVDb2xvckZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFs
dWUoImVuYWJsZUNvbG9yRmlsdGVyIiwgZmFsc2UpOyB9CisgICAgYm9vbCBwdW5jaE91dFdoaXRl
QmFja2dyb3VuZHNJbkRhcmtNb2RlKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgi
cHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZSIsIGZhbHNlKTsgfQorICAgIGJvb2wg
cnVuU2luZ2x5KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgicnVuU2luZ2x5Iiwg
ZmFsc2UpOyB9CisgICAgYm9vbCBjaGVja0ZvcldvcmxkTGVha3MoKSBjb25zdCB7IHJldHVybiBi
b29sRmVhdHVyZVZhbHVlKCJjaGVja0ZvcldvcmxkTGVha3MiLCBmYWxzZSk7IH0KKyAgICBib29s
IHNob3VsZElnbm9yZU1ldGFWaWV3cG9ydCgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFs
dWUoInNob3VsZElnbm9yZU1ldGFWaWV3cG9ydCIsIGZhbHNlKTsgfQorICAgIGJvb2wgc2hvdWxk
U2hvd1NwZWxsQ2hlY2tpbmdEb3RzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgi
c3BlbGxDaGVja2luZ0RvdHMiLCBmYWxzZSk7IH0KKyAgICBib29sIGVuYWJsZVNlcnZpY2VDb250
cm9scygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZVNlcnZpY2VDb250
cm9scyIsIGZhbHNlKTsgfQorICAgIGJvb2wgZWRpdGFibGUoKSBjb25zdCB7IHJldHVybiBib29s
RmVhdHVyZVZhbHVlKCJlZGl0YWJsZSIsIGZhbHNlKTsgfQorICAgIGJvb2wgc2hvdWxkSGFuZGxl
UnVuT3BlblBhbmVsKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgic2hvdWxkSGFu
ZGxlUnVuT3BlblBhbmVsIiwgdHJ1ZSk7IH0KKyAgICBib29sIHNob3VsZFByZXNlbnRQb3BvdmVy
cygpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInNob3VsZFByZXNlbnRQb3BvdmVy
cyIsIHRydWUpOyB9CisgICAgYm9vbCBlbmFibGVBcHBOYXAoKSBjb25zdCB7IHJldHVybiBib29s
RmVhdHVyZVZhbHVlKCJlbmFibGVBcHBOYXAiLCBmYWxzZSk7IH0KKyAgICBib29sIGVuYWJsZUJh
Y2tGb3J3YXJkQ2FjaGUoKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVC
YWNrRm9yd2FyZENhY2hlIiwgZmFsc2UpOyB9CisgICAgYm9vbCBhbGxvd3NMaW5rUHJldmlldygp
IGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImFsbG93c0xpbmtQcmV2aWV3IiwgdHJ1
ZSk7IH0KKyAgICBib29sIGVuYWJsZUNhcHR1cmVWaWRlb0luVUlQcm9jZXNzKCkgY29uc3QgeyBy
ZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlQ2FwdHVyZVZpZGVvSW5VSVByb2Nlc3MiLCBm
YWxzZSk7IH0KKyAgICBib29sIGVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2VzcygpIGNvbnN0
IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoImVuYWJsZUNhcHR1cmVWaWRlb0luR1BVUHJvY2Vz
cyIsIGZhbHNlKTsgfQorICAgIGJvb2wgZW5hYmxlQ2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3MoKSBj
b25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVDYXB0dXJlQXVkaW9JblVJUHJv
Y2VzcyIsIGZhbHNlKTsgfQorICAgIGJvb2wgZW5hYmxlQ2FwdHVyZUF1ZGlvSW5HUFVQcm9jZXNz
KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlQ2FwdHVyZUF1ZGlvSW5H
UFVQcm9jZXNzIiwgZmFsc2UpOyB9CisgICAgYm9vbCBhbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFV
UkxzKCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiYWxsb3dUb3BOYXZpZ2F0aW9u
VG9EYXRhVVJMcyIsIHRydWUpOyB9CisgICAgYm9vbCBlbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5
KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlSW5BcHBCcm93c2VyUHJp
dmFjeSIsIGZhbHNlKTsgfQorICAgIGJvb2wgaXNBcHBCb3VuZFdlYlZpZXcoKSBjb25zdCB7IHJl
dHVybiBib29sRmVhdHVyZVZhbHVlKCJpc0FwcEJvdW5kV2ViVmlldyIsIGZhbHNlKTsgfQorICAg
IGJvb2wgaWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0cygpIGNvbnN0IHsgcmV0dXJu
IGJvb2xGZWF0dXJlVmFsdWUoImlnbm9yZVN5bmNocm9ub3VzTWVzc2FnaW5nVGltZW91dHMiLCBm
YWxzZSk7IH0KKyAgICBib29sIGVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uKCkgY29uc3Qg
eyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlUHJvY2Vzc1N3YXBPbk5hdmlnYXRpb24i
LCB0cnVlKTsgfQorICAgIGJvb2wgZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW4oKSBjb25z
dCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVQcm9jZXNzU3dhcE9uV2luZG93T3Bl
biIsIGZhbHNlKTsgfQorICAgIGJvb2wgdXNlU2VydmljZVdvcmtlclNob3J0VGltZW91dCgpIGNv
bnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInVzZVNlcnZpY2VXb3JrZXJTaG9ydFRpbWVv
dXQiLCBmYWxzZSk7IH0KKyAgICBkb3VibGUgY29udGVudEluc2V0VG9wKCkgY29uc3QgeyByZXR1
cm4gZG91YmxlRmVhdHVyZVZhbHVlKCJjb250ZW50SW5zZXQudG9wIiwgMCk7IH0KKyAgICBkb3Vi
bGUgZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiBkb3VibGVGZWF0dXJlVmFsdWUo
ImRldmljZVNjYWxlRmFjdG9yIiwgMSk7IH0KKyAgICBkb3VibGUgdmlld1dpZHRoKCkgY29uc3Qg
eyByZXR1cm4gZG91YmxlRmVhdHVyZVZhbHVlKCJ2aWV3V2lkdGgiLCA4MDApOyB9CisgICAgZG91
YmxlIHZpZXdIZWlnaHQoKSBjb25zdCB7IHJldHVybiBkb3VibGVGZWF0dXJlVmFsdWUoInZpZXdI
ZWlnaHQiLCA2MDApOyB9CisgICAgc3RkOjpzdHJpbmcgYXBwbGljYXRpb25NYW5pZmVzdCgpIGNv
bnN0IHsgcmV0dXJuIHN0cmluZ0ZlYXR1cmVWYWx1ZSgiYXBwbGljYXRpb25NYW5pZmVzdCIsIHsg
fSk7IH0KKyAgICBzdGQ6OnN0cmluZyBqc2NPcHRpb25zKCkgY29uc3QgeyByZXR1cm4gc3RyaW5n
RmVhdHVyZVZhbHVlKCJqc2NPcHRpb25zIiwgeyB9KTsgfQorICAgIHN0ZDo6c3RyaW5nIGFkZGl0
aW9uYWxTdXBwb3J0ZWRJbWFnZVR5cGVzKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nRmVhdHVyZVZh
bHVlKCJhZGRpdGlvbmFsU3VwcG9ydGVkSW1hZ2VUeXBlcyIsIHsgfSk7IH0KKyAgICBzdGQ6OnN0
cmluZyBzdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwoKSBjb25zdCB7IHJldHVybiBzdHJpbmdG
ZWF0dXJlVmFsdWUoInN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVSTCIsIHsgfSk7IH0KKyAgICBz
dGQ6OnN0cmluZyBjb250ZW50TW9kZSgpIGNvbnN0IHsgcmV0dXJuIHN0cmluZ0ZlYXR1cmVWYWx1
ZSgiY29udGVudE1vZGUiLCB7IH0pOyB9CisgICAgc3RkOjpzdHJpbmcgYXBwbGljYXRpb25CdW5k
bGVJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nRmVhdHVyZVZhbHVlKCJhcHBsaWNh
dGlvbkJ1bmRsZUlkZW50aWZpZXIiLCB7IH0pOyB9CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJp
bmc+IG92ZXJyaWRlTGFuZ3VhZ2VzKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nVmVjdG9yRmVhdHVy
ZVZhbHVlKCJsYW5ndWFnZSIsIHsgfSk7IH0KKworICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21h
cDxzdGQ6OnN0cmluZywgYm9vbD4mIGV4cGVyaW1lbnRhbEZlYXR1cmVzKCkgY29uc3QgeyByZXR1
cm4gbV9mZWF0dXJlcy5leHBlcmltZW50YWxGZWF0dXJlczsgfQorICAgIGNvbnN0IHN0ZDo6dW5v
cmRlcmVkX21hcDxzdGQ6OnN0cmluZywgYm9vbD4mIGludGVybmFsRGVidWdGZWF0dXJlcygpIGNv
bnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzOyB9CiAKKyAgICBi
b29sIGhhc1NhbWVJbml0aWFsaXphdGlvbk9wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlv
bnMpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9mZWF0dXJlcy5leHBlcmltZW50YWxGZWF0
dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuZXhwZXJpbWVudGFsRmVhdHVyZXMpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX2ZlYXR1cmVzLmludGVybmFsRGVidWdG
ZWF0dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVyZXMuaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobV9mZWF0dXJlcy5ib29sRmVhdHVy
ZXMgIT0gb3B0aW9ucy5tX2ZlYXR1cmVzLmJvb2xGZWF0dXJlcykKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgaWYgKG1fZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMgIT0gb3B0aW9u
cy5tX2ZlYXR1cmVzLmRvdWJsZUZlYXR1cmVzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAobV9mZWF0dXJlcy5zdHJpbmdGZWF0dXJlcyAhPSBvcHRpb25zLm1fZmVhdHVy
ZXMuc3RyaW5nRmVhdHVyZXMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlm
IChtX2ZlYXR1cmVzLnN0cmluZ1ZlY3RvckZlYXR1cmVzICE9IG9wdGlvbnMubV9mZWF0dXJlcy5z
dHJpbmdWZWN0b3JGZWF0dXJlcykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQorCitwcml2YXRlOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CisgICAgVCBmZWF0dXJlVmFsdWUoc3RkOjpzdHJpbmcga2V5LCBUIGRlZmF1bHRWYWx1ZSwgY29u
c3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBUPiYgbWFwKSBjb25zdAorICAgIHsK
KyAgICAgICAgYXV0byBpdCA9IG1hcC5maW5kKGtleSk7CisgICAgICAgIGlmIChpdCAhPSBtYXAu
ZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAgcmV0dXJuIGRl
ZmF1bHRWYWx1ZTsKKyAgICB9CisKKyAgICBib29sIGJvb2xGZWF0dXJlVmFsdWUoc3RkOjpzdHJp
bmcga2V5LCBib29sIGRlZmF1bHRWYWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBm
ZWF0dXJlVmFsdWUoa2V5LCBkZWZhdWx0VmFsdWUsIG1fZmVhdHVyZXMuYm9vbEZlYXR1cmVzKTsK
KyAgICB9CisgICAgZG91YmxlIGRvdWJsZUZlYXR1cmVWYWx1ZShzdGQ6OnN0cmluZyBrZXksIGRv
dWJsZSBkZWZhdWx0VmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZmVhdHVyZVZh
bHVlKGtleSwgZGVmYXVsdFZhbHVlLCBtX2ZlYXR1cmVzLmRvdWJsZUZlYXR1cmVzKTsKKyAgICB9
CisgICAgc3RkOjpzdHJpbmcgc3RyaW5nRmVhdHVyZVZhbHVlKHN0ZDo6c3RyaW5nIGtleSwgc3Rk
OjpzdHJpbmcgZGVmYXVsdFZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZlYXR1
cmVWYWx1ZShrZXksIGRlZmF1bHRWYWx1ZSwgbV9mZWF0dXJlcy5zdHJpbmdGZWF0dXJlcyk7Cisg
ICAgfQorICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzdHJpbmdWZWN0b3JGZWF0dXJlVmFs
dWUoc3RkOjpzdHJpbmcga2V5LCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZGVmYXVsdFZhbHVl
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZlYXR1cmVWYWx1ZShrZXksIGRlZmF1bHRW
YWx1ZSwgbV9mZWF0dXJlcy5zdHJpbmdWZWN0b3JGZWF0dXJlcyk7CisgICAgfQorCisgICAgVGVz
dEZlYXR1cmVzIG1fZmVhdHVyZXM7CiB9OwogCiB9CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tCShyZXZpc2lvbiAyNjgw
MjEpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2Eu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTExNCwyNyArMTE0LDI4IEBAIFdLUHJlZmVyZW5jZXNSZWYg
VGVzdENvbnRyb2xsZXI6OnBsYXRmb3IKICAgICByZXR1cm4gKF9fYnJpZGdlIFdLUHJlZmVyZW5j
ZXNSZWYpZ2xvYmFsV2ViVmlld0NvbmZpZ3VyYXRpb24ucHJlZmVyZW5jZXM7CiB9CiAKLXZvaWQg
VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtQWRkVGVzdE9wdGlvbnMoVGVzdE9wdGlvbnMmIG9wdGlv
bnMpIGNvbnN0CitUZXN0RmVhdHVyZXMgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtU3BlY2lmaWNG
ZWF0dXJlT3ZlcnJpZGVzRGVmYXVsdHNGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJikgY29uc3QK
IHsKKyAgICBUZXN0RmVhdHVyZXMgZmVhdHVyZXM7CisKICAgICBpZiAoW1tOU1VzZXJEZWZhdWx0
cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpAIkVuYWJsZVByb2Nlc3NTd2FwT25O
YXZpZ2F0aW9uIl0pCi0gICAgICAgIG9wdGlvbnMuY29udGV4dE9wdGlvbnMuZW5hYmxlUHJvY2Vz
c1N3YXBPbk5hdmlnYXRpb24gPSB0cnVlOworICAgICAgICBmZWF0dXJlcy5ib29sRmVhdHVyZXMu
aW5zZXJ0KHsgImVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uIiwgdHJ1ZSB9KTsKICAgICBp
ZiAoW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpAIkVu
YWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVuIl0pCi0gICAgICAgIG9wdGlvbnMuY29udGV4dE9w
dGlvbnMuZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW4gPSB0cnVlOworICAgICAgICBmZWF0
dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgImVuYWJsZVByb2Nlc3NTd2FwT25XaW5kb3dPcGVu
IiwgdHJ1ZSB9KTsKIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKG9wdGlvbnMu
ZW5hYmxlSW5BcHBCcm93c2VyUHJpdmFjeSkKLSAgICAgICAgW1tOU1VzZXJEZWZhdWx0cyBzdGFu
ZGFyZFVzZXJEZWZhdWx0c10gc2V0Qm9vbDpZRVMgZm9yS2V5OkAiV2ViS2l0RGVidWdJc0luQXBw
QnJvd3NlclByaXZhY3lFbmFibGVkIl07Ci0jZW5kaWYKKyAgICByZXR1cm4gZmVhdHVyZXM7CiB9
CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZURhdGFTdG9yZShXS1Bh
Z2VDb25maWd1cmF0aW9uUmVmLCBjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBp
ZiAob3B0aW9ucy51c2VFcGhlbWVyYWxTZXNzaW9uIHx8IG9wdGlvbnMuc3RhbmRhbG9uZVdlYkFw
cGxpY2F0aW9uVVJMLmxlbmd0aCgpKSB7Ci0gICAgICAgIGF1dG8gd2Vic2l0ZURhdGFTdG9yZUNv
bmZpZyA9IG9wdGlvbnMudXNlRXBoZW1lcmFsU2Vzc2lvbiA/IFtbW19XS1dlYnNpdGVEYXRhU3Rv
cmVDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0Tm9uUGVyc2lzdGVudENvbmZpZ3VyYXRpb25dIGF1
dG9yZWxlYXNlXSA6IFtbW19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uIGFsbG9jXSBp
bml0XSBhdXRvcmVsZWFzZV07Ci0gICAgICAgIGlmICghb3B0aW9ucy51c2VFcGhlbWVyYWxTZXNz
aW9uKQorICAgIGJvb2wgdXNlRXBoZW1lcmFsU2Vzc2lvbiA9IG9wdGlvbnMudXNlRXBoZW1lcmFs
U2Vzc2lvbigpOworICAgIGF1dG8gc3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMID0gb3B0aW9u
cy5zdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwoKTsKKyAgICBpZiAodXNlRXBoZW1lcmFsU2Vz
c2lvbiB8fCBzdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwubGVuZ3RoKCkpIHsKKyAgICAgICAg
YXV0byB3ZWJzaXRlRGF0YVN0b3JlQ29uZmlnID0gdXNlRXBoZW1lcmFsU2Vzc2lvbiA/IFtbW19X
S1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0Tm9uUGVyc2lzdGVudENv
bmZpZ3VyYXRpb25dIGF1dG9yZWxlYXNlXSA6IFtbW19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1
cmF0aW9uIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgIGlmICghdXNlRXBoZW1l
cmFsU2Vzc2lvbikKICAgICAgICAgICAgIGNvbmZpZ3VyZVdlYnNpdGVEYXRhU3RvcmVUZW1wb3Jh
cnlEaXJlY3RvcmllcygoV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvblJlZil3ZWJzaXRl
RGF0YVN0b3JlQ29uZmlnKTsKLSAgICAgICAgaWYgKG9wdGlvbnMuc3RhbmRhbG9uZVdlYkFwcGxp
Y2F0aW9uVVJMLmxlbmd0aCgpKQotICAgICAgICAgICAgW3dlYnNpdGVEYXRhU3RvcmVDb25maWcg
c2V0U3RhbmRhbG9uZUFwcGxpY2F0aW9uVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0cmlu
ZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpvcHRpb25zLnN0YW5kYWxvbmVXZWJBcHBsaWNhdGlvblVS
TC5jX3N0cigpXV1dOworICAgICAgICBpZiAoc3RhbmRhbG9uZVdlYkFwcGxpY2F0aW9uVVJMLmxl
bmd0aCgpKQorICAgICAgICAgICAgW3dlYnNpdGVEYXRhU3RvcmVDb25maWcgc2V0U3RhbmRhbG9u
ZUFwcGxpY2F0aW9uVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRo
VVRGOFN0cmluZzpzdGFuZGFsb25lV2ViQXBwbGljYXRpb25VUkwuY19zdHIoKV1dXTsKICAgICAg
ICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gKF9fYnJpZGdlIFdLV2Vic2l0ZURhdGFTdG9yZVJlZilb
W1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246d2Vic2l0
ZURhdGFTdG9yZUNvbmZpZ10gYXV0b3JlbGVhc2VdOwogICAgIH0gZWxzZQogICAgICAgICBtX3dl
YnNpdGVEYXRhU3RvcmUgPSAoX19icmlkZ2UgV0tXZWJzaXRlRGF0YVN0b3JlUmVmKWdsb2JhbFdl
YlZpZXdDb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmU7CkBAIC0xNDUsMzIgKzE0NiwzMyBA
QCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUNyZWF0ZVdlYlZpCiAgICAgYXV0byBjb3Bp
ZWRDb25maWd1cmF0aW9uID0gYWRvcHROUyhbZ2xvYmFsV2ViVmlld0NvbmZpZ3VyYXRpb24gY29w
eV0pOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAob3B0aW9ucy51c2VEYXRh
RGV0ZWN0aW9uKQorICAgIGlmIChvcHRpb25zLnVzZURhdGFEZXRlY3Rpb24oKSkKICAgICAgICAg
W2NvcGllZENvbmZpZ3VyYXRpb24gc2V0RGF0YURldGVjdG9yVHlwZXM6V0tEYXRhRGV0ZWN0b3JU
eXBlQWxsXTsKLSAgICBpZiAob3B0aW9ucy5pZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cykKKyAg
ICBpZiAob3B0aW9ucy5pZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cygpKQogICAgICAgICBbY29w
aWVkQ29uZmlndXJhdGlvbiBzZXRJZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0czpZRVNdOwotICAg
IGlmIChvcHRpb25zLnVzZUNoYXJhY3RlclNlbGVjdGlvbkdyYW51bGFyaXR5KQorICAgIGlmIChv
cHRpb25zLnVzZUNoYXJhY3RlclNlbGVjdGlvbkdyYW51bGFyaXR5KCkpCiAgICAgICAgIFtjb3Bp
ZWRDb25maWd1cmF0aW9uIHNldFNlbGVjdGlvbkdyYW51bGFyaXR5OldLU2VsZWN0aW9uR3JhbnVs
YXJpdHlDaGFyYWN0ZXJdOwotICAgIGlmIChvcHRpb25zLmlzQXBwQm91bmRXZWJWaWV3KQorICAg
IGlmIChvcHRpb25zLmlzQXBwQm91bmRXZWJWaWV3KCkpCiAgICAgICAgIFtjb3BpZWRDb25maWd1
cmF0aW9uIHNldExpbWl0c05hdmlnYXRpb25zVG9BcHBCb3VuZERvbWFpbnM6WUVTXTsKICNlbHNl
Ci0gICAgW2NvcGllZENvbmZpZ3VyYXRpb24gX3NldFNlcnZpY2VDb250cm9sc0VuYWJsZWQ6b3B0
aW9ucy5lbmFibGVTZXJ2aWNlQ29udHJvbHNdOworICAgIFtjb3BpZWRDb25maWd1cmF0aW9uIF9z
ZXRTZXJ2aWNlQ29udHJvbHNFbmFibGVkOm9wdGlvbnMuZW5hYmxlU2VydmljZUNvbnRyb2xzKCld
OwogI2VuZGlmCiAKLSAgICBpZiAob3B0aW9ucy5lbmFibGVBdHRhY2htZW50RWxlbWVudCkKKyAg
ICBpZiAob3B0aW9ucy5lbmFibGVBdHRhY2htZW50RWxlbWVudCgpKQogICAgICAgICBbY29waWVk
Q29uZmlndXJhdGlvbiBfc2V0QXR0YWNobWVudEVsZW1lbnRFbmFibGVkOllFU107CiAKLSAgICBp
ZiAob3B0aW9ucy5lbmFibGVDb2xvckZpbHRlcikKKyAgICBpZiAob3B0aW9ucy5lbmFibGVDb2xv
ckZpbHRlcigpKQogICAgICAgICBbY29waWVkQ29uZmlndXJhdGlvbiBfc2V0Q29sb3JGaWx0ZXJF
bmFibGVkOllFU107CiAKICAgICBbY29waWVkQ29uZmlndXJhdGlvbiBzZXRXZWJzaXRlRGF0YVN0
b3JlOihXS1dlYnNpdGVEYXRhU3RvcmUgKil3ZWJzaXRlRGF0YVN0b3JlKCldOwogCi0gICAgW2Nv
cGllZENvbmZpZ3VyYXRpb24gX3NldEFsbG93VG9wTmF2aWdhdGlvblRvRGF0YVVSTHM6b3B0aW9u
cy5hbGxvd1RvcE5hdmlnYXRpb25Ub0RhdGFVUkxzXTsKKyAgICBbY29waWVkQ29uZmlndXJhdGlv
biBfc2V0QWxsb3dUb3BOYXZpZ2F0aW9uVG9EYXRhVVJMczpvcHRpb25zLmFsbG93VG9wTmF2aWdh
dGlvblRvRGF0YVVSTHMoKV07CiAKICAgICBjb25maWd1cmVDb250ZW50TW9kZShjb3BpZWRDb25m
aWd1cmF0aW9uLmdldCgpLCBvcHRpb25zKTsKIAotICAgIGlmIChvcHRpb25zLmFwcGxpY2F0aW9u
TWFuaWZlc3QubGVuZ3RoKCkpIHsKLSAgICAgICAgYXV0byBtYW5pZmVzdFBhdGggPSBbTlNTdHJp
bmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6b3B0aW9ucy5hcHBsaWNhdGlvbk1hbmlmZXN0LmNfc3Ry
KCldOworICAgIGF1dG8gYXBwbGljYXRpb25NYW5pZmVzdCA9IG9wdGlvbnMuYXBwbGljYXRpb25N
YW5pZmVzdCgpOworICAgIGlmIChhcHBsaWNhdGlvbk1hbmlmZXN0Lmxlbmd0aCgpKSB7CisgICAg
ICAgIGF1dG8gbWFuaWZlc3RQYXRoID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOmFw
cGxpY2F0aW9uTWFuaWZlc3QuY19zdHIoKV07CiAgICAgICAgIE5TU3RyaW5nICp0ZXh0ID0gW05T
U3RyaW5nIHN0cmluZ1dpdGhDb250ZW50c09mRmlsZTptYW5pZmVzdFBhdGggdXNlZEVuY29kaW5n
Om51bGxwdHIgZXJyb3I6bnVsbHB0cl07CiAgICAgICAgIFtjb3BpZWRDb25maWd1cmF0aW9uIF9z
ZXRBcHBsaWNhdGlvbk1hbmlmZXN0OltfV0tBcHBsaWNhdGlvbk1hbmlmZXN0IGFwcGxpY2F0aW9u
TWFuaWZlc3RGcm9tSlNPTjp0ZXh0IG1hbmlmZXN0VVJMOm5pbCBkb2N1bWVudFVSTDpuaWxdXTsK
ICAgICB9CkBAIC0xNzgsMTMgKzE4MCwxMyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9y
bUNyZWF0ZVdlYlZpCiAgICAgbV9tYWluV2ViVmlldyA9IG1ha2VVbmlxdWU8UGxhdGZvcm1XZWJW
aWV3Pihjb3BpZWRDb25maWd1cmF0aW9uLmdldCgpLCBvcHRpb25zKTsKICAgICBmaW5pc2hDcmVh
dGluZ1BsYXRmb3JtV2ViVmlldyhtX21haW5XZWJWaWV3LmdldCgpLCBvcHRpb25zKTsKIAotICAg
IGlmIChvcHRpb25zLnB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUpCisgICAgaWYg
KG9wdGlvbnMucHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZSgpKQogICAgICAgICBt
X21haW5XZWJWaWV3LT5zZXREcmF3c0JhY2tncm91bmQoZmFsc2UpOwogCi0gICAgaWYgKG9wdGlv
bnMuZWRpdGFibGUpCisgICAgaWYgKG9wdGlvbnMuZWRpdGFibGUoKSkKICAgICAgICAgbV9tYWlu
V2ViVmlldy0+c2V0RWRpdGFibGUodHJ1ZSk7CiAKLSAgICBtX21haW5XZWJWaWV3LT5wbGF0Zm9y
bVZpZXcoKS5hbGxvd3NMaW5rUHJldmlldyA9IG9wdGlvbnMuYWxsb3dzTGlua1ByZXZpZXc7Cisg
ICAgbV9tYWluV2ViVmlldy0+cGxhdGZvcm1WaWV3KCkuYWxsb3dzTGlua1ByZXZpZXcgPSBvcHRp
b25zLmFsbG93c0xpbmtQcmV2aWV3KCk7CiAgICAgW21fbWFpbldlYlZpZXctPnBsYXRmb3JtVmll
dygpIF9zZXRTaGFyZVNoZWV0Q29tcGxldGVzSW1tZWRpYXRlbHlXaXRoUmVzb2x1dGlvbkZvclRl
c3Rpbmc6WUVTXTsKIH0KIApAQCAtMjAzLDcgKzIwNSw3IEBAIFBsYXRmb3JtV2ViVmlldyogVGVz
dENvbnRyb2xsZXI6OnBsYXRmb3IKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmZpbmlzaENyZWF0aW5n
UGxhdGZvcm1XZWJWaWV3KFBsYXRmb3JtV2ViVmlldyogdmlldywgY29uc3QgVGVzdE9wdGlvbnMm
IG9wdGlvbnMpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQotICAgIGlmIChvcHRpb25zLnNob3VsZFNo
b3dXZWJWaWV3KQorICAgIGlmIChvcHRpb25zLnNob3VsZFNob3dXZWJWaWV3KCkpCiAgICAgICAg
IFt2aWV3LT5wbGF0Zm9ybVdpbmRvdygpIG9yZGVyRnJvbnQ6bmlsXTsKICAgICBlbHNlCiAgICAg
ICAgIFt2aWV3LT5wbGF0Zm9ybVdpbmRvdygpIG9yZGVyQmFjazpuaWxdOwpAQCAtMjYzLDEyICsy
NjUsMTIgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRDb250ZW50RXh0ZW5zaQogICAgIH0K
IH0KIAotdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVy
KGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllcikKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnNl
dEFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcihjb25zdCBzdGQ6OnN0cmluZyYgYnVuZGxlSWRl
bnRpZmllcikKIHsKLSAgICBpZiAoYnVuZGxlSWRlbnRpZmllci5pc0VtcHR5KCkpCisgICAgaWYg
KGJ1bmRsZUlkZW50aWZpZXIuZW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFtU
ZXN0UnVubmVyV0tXZWJWaWV3IF9zZXRBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXI6KE5TU3Ry
aW5nICopYnVuZGxlSWRlbnRpZmllci5jcmVhdGVDRlN0cmluZygpLmdldCgpXTsKKyAgICBbVGVz
dFJ1bm5lcldLV2ViVmlldyBfc2V0QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyOihOU1N0cmlu
ZyAqKXRvV1RGU3RyaW5nKGJ1bmRsZUlkZW50aWZpZXIpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCld
OwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpjbGVhckFwcGxpY2F0aW9uQnVuZGxlSWRlbnRp
ZmllclRlc3RpbmdPdmVycmlkZSgpCkBAIC0yODYsNyArMjg4LDcgQEAgdm9pZCBUZXN0Q29udHJv
bGxlcjo6Y29jb2FSZXNldFN0YXRlVG9DbwogICAgICAgICBUZXN0UnVubmVyV0tXZWJWaWV3ICpw
bGF0Zm9ybVZpZXcgPSB3ZWJWaWV3LT5wbGF0Zm9ybVZpZXcoKTsKICAgICAgICAgcGxhdGZvcm1W
aWV3Ll92aWV3U2NhbGUgPSAxOwogICAgICAgICBwbGF0Zm9ybVZpZXcuX21pbmltdW1FZmZlY3Rp
dmVEZXZpY2VXaWR0aCA9IDA7Ci0gICAgICAgIFtwbGF0Zm9ybVZpZXcgX3NldENvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZEZvclRlc3Rpbmc6b3B0aW9ucy5zaG91bGRTaG93U3BlbGxDaGVj
a2luZ0RvdHNdOworICAgICAgICBbcGxhdGZvcm1WaWV3IF9zZXRDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWRGb3JUZXN0aW5nOm9wdGlvbnMuc2hvdWxkU2hvd1NwZWxsQ2hlY2tpbmdEb3Rz
KCldOwogICAgICAgICBbcGxhdGZvcm1WaWV3IHJlc2V0SW50ZXJhY3Rpb25DYWxsYmFja3NdOwog
ICAgICAgICBbcGxhdGZvcm1WaWV3IF9yZXNldE5hdmlnYXRpb25HZXN0dXJlU3RhdGVGb3JUZXN0
aW5nXTsKICAgICB9CkBAIC0yOTcsNiArMjk5LDExIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNv
Y29hUmVzZXRTdGF0ZVRvQ28KIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtV2lsbFJ1blRl
c3QoY29uc3QgVGVzdEludm9jYXRpb24mIHRlc3RJbnZvY2F0aW9uKQogewogICAgIHNldENyYXNo
UmVwb3J0QXBwbGljYXRpb25TcGVjaWZpY0luZm9ybWF0aW9uVG9VUkwodGVzdEludm9jYXRpb24u
dXJsKCkpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAodGVzdEludm9jYXRp
b24ub3B0aW9ucygpLmVuYWJsZUluQXBwQnJvd3NlclByaXZhY3koKSkKKyAgICAgICAgW1tOU1Vz
ZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gc2V0Qm9vbDpZRVMgZm9yS2V5OkAiV2Vi
S2l0RGVidWdJc0luQXBwQnJvd3NlclByaXZhY3lFbmFibGVkIl07CisjZW5kaWYKIH0KIAogc3Rh
dGljIE5TU3RyaW5nICogY29uc3QgV2ViQXJjaGl2ZVBib2FyZFR5cGUgPSBAIkFwcGxlIFdlYiBB
cmNoaXZlIHBhc3RlYm9hcmQgdHlwZSI7CkBAIC00ODcsMTIgKzQ5NCwxMSBAQCBib29sIFRlc3RD
b250cm9sbGVyOjppc0RvaW5nTWVkaWFDYXB0dXJlCiAKIHN0YXRpYyBXS0NvbnRlbnRNb2RlIGNv
bnRlbnRNb2RlKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChvcHRpb25z
LmNvbnRlbnRNb2RlID09ICJkZXNrdG9wIl9zKQorICAgIGF1dG8gbW9kZSA9IG9wdGlvbnMuY29u
dGVudE1vZGUoKTsKKyAgICBpZiAobW9kZSA9PSAiZGVza3RvcCIpCiAgICAgICAgIHJldHVybiBX
S0NvbnRlbnRNb2RlRGVza3RvcDsKLQotICAgIGlmIChvcHRpb25zLmNvbnRlbnRNb2RlID09ICJt
b2JpbGUiX3MpCisgICAgaWYgKG1vZGUgPT0gIm1vYmlsZSIpCiAgICAgICAgIHJldHVybiBXS0Nv
bnRlbnRNb2RlTW9iaWxlOwotCiAgICAgcmV0dXJuIFdLQ29udGVudE1vZGVSZWNvbW1lbmRlZDsK
IH0KIApJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9ndGsvVGVzdENvbnRyb2xsZXJHdGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL1Rlc3RDb250cm9s
bGVyR3RrLmNwcAkocmV2aXNpb24gMjY4MDIxKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9n
dGsvVGVzdENvbnRyb2xsZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsOSArMTUwLDEx
IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRQcmVmZXIKICAgICBtX21haW5X
ZWJWaWV3LT5kaXNtaXNzQWxsUG9wdXBNZW51cygpOwogfQogCi12b2lkIFRlc3RDb250cm9sbGVy
Ojp1cGRhdGVQbGF0Zm9ybVNwZWNpZmljVGVzdE9wdGlvbnNGb3JUZXN0KFRlc3RPcHRpb25zJiBv
cHRpb25zLCBjb25zdCBzdGQ6OnN0cmluZyYpIGNvbnN0CitUZXN0RmVhdHVyZXMgVGVzdENvbnRy
b2xsZXI6OnBsYXRmb3JtU3BlY2lmaWNGZWF0dXJlRGVmYXVsdHNGb3JUZXN0KGNvbnN0IFRlc3RD
b21tYW5kJikgY29uc3QKIHsKLSAgICBvcHRpb25zLmVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMg
PSBmYWxzZTsKKyAgICBUZXN0RmVhdHVyZXMgZmVhdHVyZXM7CisgICAgZmVhdHVyZXMuYm9vbEZl
YXR1cmVzLmluc2VydCh7ICJlbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzIiwgZmFsc2UgfSk7Cisg
ICAgcmV0dXJuIGZlYXR1cmVzOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVFIKSW5kZXg6IFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvaW9zL1BsYXRmb3JtV2ViVmlld0lPUy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9QbGF0Zm9ybVdlYlZpZXdJT1MubW0JKHJldmlz
aW9uIDI2ODAyMSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1BsYXRmb3JtV2ViVmll
d0lPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTg5LDcgKzE4OSw3IEBAIFBsYXRmb3JtV2ViVmll
dzo6UGxhdGZvcm1XZWJWaWV3KFdLV2ViVmkKICAgICA6IG1fd2luZG93SXNLZXkodHJ1ZSkKICAg
ICAsIG1fb3B0aW9ucyhvcHRpb25zKQogewotICAgIENHUmVjdCByZWN0ID0gQ0dSZWN0TWFrZSgw
LCAwLCBUZXN0Q29udHJvbGxlcjo6dmlld1dpZHRoLCBUZXN0Q29udHJvbGxlcjo6dmlld0hlaWdo
dCk7CisgICAgQ0dSZWN0IHJlY3QgPSBDR1JlY3RNYWtlKDAsIDAsIG9wdGlvbnMudmlld1dpZHRo
KCksIG9wdGlvbnMudmlld0hlaWdodCgpKTsKIAogICAgIG1fd2luZG93ID0gW1tXZWJLaXRUZXN0
UnVubmVyV2luZG93IGFsbG9jXSBpbml0V2l0aEZyYW1lOnJlY3RdOwogICAgIG1fd2luZG93LmJh
Y2tncm91bmRDb2xvciA9IFtVSUNvbG9yIGxpZ2h0R3JheUNvbG9yXTsKSW5kZXg6IFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tCShyZXZpc2lvbiAy
NjgwMjEpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5MCw3IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6
OnBsYXRmb3JtUmVzZXRTdGF0ZVQKICAgICB9CiAKICAgICBtX3ByZXNlbnRQb3BvdmVyU3dpenps
ZXJzLmNsZWFyKCk7Ci0gICAgaWYgKCFvcHRpb25zLnNob3VsZFByZXNlbnRQb3BvdmVycykgewor
ICAgIGlmICghb3B0aW9ucy5zaG91bGRQcmVzZW50UG9wb3ZlcnMoKSkgewogI2lmIFVTRShVSUNP
TlRFWFRNRU5VKQogICAgICAgICBtX3ByZXNlbnRQb3BvdmVyU3dpenpsZXJzLmFwcGVuZChtYWtl
VW5pcXVlPEluc3RhbmNlTWV0aG9kU3dpenpsZXI+KFtVSUNvbnRleHRNZW51SW50ZXJhY3Rpb24g
Y2xhc3NdLCBAc2VsZWN0b3IoX3ByZXNlbnRNZW51QXRMb2NhdGlvbjopLCByZWludGVycHJldF9j
YXN0PElNUD4ob3ZlcnJpZGVQcmVzZW50TWVudU9yUG9wb3Zlck9yVmlld0NvbnRyb2xsZXIpKSk7
CiAjZW5kaWYKQEAgLTIxMyw4ICsyMTMsMTAgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cGxhdGZv
cm1SZXNldFN0YXRlVAogICAgICAgICBVSVNjcm9sbFZpZXcgKnNjcm9sbFZpZXcgPSB3ZWJWaWV3
LnNjcm9sbFZpZXc7CiAgICAgICAgIFtzY3JvbGxWaWV3IF9yZW1vdmVBbGxBbmltYXRpb25zOllF
U107CiAgICAgICAgIFtzY3JvbGxWaWV3IHNldFpvb21TY2FsZToxIGFuaW1hdGVkOk5PXTsKLSAg
ICAgICAgc2Nyb2xsVmlldy5jb250ZW50SW5zZXQgPSBVSUVkZ2VJbnNldHNNYWtlKG9wdGlvbnMu
Y29udGVudEluc2V0VG9wLCAwLCAwLCAwKTsKLSAgICAgICAgc2Nyb2xsVmlldy5jb250ZW50T2Zm
c2V0ID0gQ0dQb2ludE1ha2UoMCwgLW9wdGlvbnMuY29udGVudEluc2V0VG9wKTsKKyAgICAgICAg
CisgICAgICAgIGF1dG8gY29udGVudEluc2V0VG9wID0gb3B0aW9ucy5jb250ZW50SW5zZXRUb3Ao
KTsKKyAgICAgICAgc2Nyb2xsVmlldy5jb250ZW50SW5zZXQgPSBVSUVkZ2VJbnNldHNNYWtlKGNv
bnRlbnRJbnNldFRvcCwgMCwgMCwgMCk7CisgICAgICAgIHNjcm9sbFZpZXcuY29udGVudE9mZnNl
dCA9IENHUG9pbnRNYWtlKDAsIC1jb250ZW50SW5zZXRUb3ApOwogCiAgICAgICAgIGlmICh3ZWJW
aWV3LmludGVyYWN0aW5nV2l0aEZvcm1Db250cm9sKQogICAgICAgICAgICAgc2hvdWxkUmVzdG9y
ZUZpcnN0UmVzcG9uZGVyID0gW3dlYlZpZXcgcmVzaWduRmlyc3RSZXNwb25kZXJdOwpAQCAtMjY1
LDEyICsyNjcsMTQgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1SZXNldFN0YXRlVAog
CiB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUNvbmZpZ3VyZVZpZXdGb3JUZXN0KGNvbnN0
IFRlc3RJbnZvY2F0aW9uJiB0ZXN0KQogeworICAgIFtbR2VuZXJhdGVkVG91Y2hlc0RlYnVnV2lu
ZG93IHNoYXJlZEdlbmVyYXRlZFRvdWNoZXNEZWJ1Z1dpbmRvd10gc2V0U2hvdWxkU2hvd1RvdWNo
ZXM6dGVzdC5vcHRpb25zKCkuc2hvdWxkU2hvd1RvdWNoZXMoKV07CisKICAgICBUZXN0UnVubmVy
V0tXZWJWaWV3ICp3ZWJWaWV3ID0gbWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCk7CiAKLSAg
ICBpZiAodGVzdC5vcHRpb25zKCkuc2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0KQorICAgIGlmICh0
ZXN0Lm9wdGlvbnMoKS5zaG91bGRJZ25vcmVNZXRhVmlld3BvcnQoKSkKICAgICAgICAgd2ViVmll
dy5jb25maWd1cmF0aW9uLnByZWZlcmVuY2VzLl9zaG91bGRJZ25vcmVNZXRhVmlld3BvcnQgPSBZ
RVM7CiAKLSAgICBpZiAoIXRlc3Qub3B0aW9ucygpLnVzZUZsZXhpYmxlVmlld3BvcnQpCisgICAg
aWYgKCF0ZXN0Lm9wdGlvbnMoKS51c2VGbGV4aWJsZVZpZXdwb3J0KCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIENHUmVjdCBzY3JlZW5Cb3VuZHMgPSBbVUlTY3JlZW4gbWFpblNjcmVlbl0uYm91
bmRzOwpAQCAtMjkxLDEwICsyOTUsOSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUNv
bmZpZ3VyZVZpCiAgICAgLy8gV0tCdW5kbGVQYWdlU2V0VXNlVGVzdGluZ1ZpZXdwb3J0Q29uZmln
dXJhdGlvbihmYWxzZSkuCiB9CiAKLXZvaWQgVGVzdENvbnRyb2xsZXI6OnVwZGF0ZVBsYXRmb3Jt
U3BlY2lmaWNUZXN0T3B0aW9uc0ZvclRlc3QoVGVzdE9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IHN0
ZDo6c3RyaW5nJikgY29uc3QKK1Rlc3RGZWF0dXJlcyBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1T
cGVjaWZpY0ZlYXR1cmVEZWZhdWx0c0ZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKSBjb25zdAog
ewotICAgIG9wdGlvbnMuc2hvdWxkU2hvd1RvdWNoZXMgPSBzaG91bGRTaG93VG91Y2hlcygpOwot
ICAgIFtbR2VuZXJhdGVkVG91Y2hlc0RlYnVnV2luZG93IHNoYXJlZEdlbmVyYXRlZFRvdWNoZXNE
ZWJ1Z1dpbmRvd10gc2V0U2hvdWxkU2hvd1RvdWNoZXM6b3B0aW9ucy5zaG91bGRTaG93VG91Y2hl
c107CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1J
bml0aWFsaXplQ29udGV4dCgpCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9QbGF0
Zm9ybVdlYlZpZXdNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9t
YWMvUGxhdGZvcm1XZWJWaWV3TWFjLm1tCShyZXZpc2lvbiAyNjgwMjEpCisrKyBUb29scy9XZWJL
aXRUZXN0UnVubmVyL21hYy9QbGF0Zm9ybVdlYlZpZXdNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTYxLDE4ICs2MSwxOCBAQCBQbGF0Zm9ybVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyhXS1dlYlZp
CiAgICAgLCBtX29wdGlvbnMob3B0aW9ucykKIHsKICAgICAvLyBGSVhNRTogTm90IHN1cmUgdGhp
cyBpcyB0aGUgYmVzdCBwbGFjZSBmb3IgdGhpczsgbWF5YmUgd2Ugc2hvdWxkIGhhdmUgQVBJIHRv
IHNldCB0aGlzIHNvIHdlIGNhbiBkbyBpdCBmcm9tIFRlc3RDb250cm9sbGVyPwotICAgIGlmICht
X29wdGlvbnMudXNlUmVtb3RlTGF5ZXJUcmVlKQorICAgIGlmIChtX29wdGlvbnMudXNlUmVtb3Rl
TGF5ZXJUcmVlKCkpCiAgICAgICAgIFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVs
dHNdIHNldFZhbHVlOkBZRVMgZm9yS2V5OkAiV2ViS2l0MlVzZVJlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhIl07CiAKICAgICBhdXRvIGNvcGllZENvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtjb25m
aWd1cmF0aW9uIGNvcHldKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0VGhyZWFkZWRTY3JvbGxpbmdF
bmFibGVkKChfX2JyaWRnZSBXS1ByZWZlcmVuY2VzUmVmKVtjb3BpZWRDb25maWd1cmF0aW9uIHBy
ZWZlcmVuY2VzXSwgbV9vcHRpb25zLnVzZVRocmVhZGVkU2Nyb2xsaW5nKTsKKyAgICBXS1ByZWZl
cmVuY2VzU2V0VGhyZWFkZWRTY3JvbGxpbmdFbmFibGVkKChfX2JyaWRnZSBXS1ByZWZlcmVuY2Vz
UmVmKVtjb3BpZWRDb25maWd1cmF0aW9uIHByZWZlcmVuY2VzXSwgbV9vcHRpb25zLnVzZVRocmVh
ZGVkU2Nyb2xsaW5nKCkpOwogCi0gICAgTlNSZWN0IHJlY3QgPSBOU01ha2VSZWN0KDAsIDAsIFRl
c3RDb250cm9sbGVyOjp2aWV3V2lkdGgsIFRlc3RDb250cm9sbGVyOjp2aWV3SGVpZ2h0KTsKKyAg
ICBOU1JlY3QgcmVjdCA9IE5TTWFrZVJlY3QoMCwgMCwgb3B0aW9ucy52aWV3V2lkdGgoKSwgb3B0
aW9ucy52aWV3SGVpZ2h0KCkpOwogICAgIG1fdmlldyA9IFtbVGVzdFJ1bm5lcldLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpyZWN0IGNvbmZpZ3VyYXRpb246Y29waWVkQ29uZmlndXJhdGlv
bi5nZXQoKV07CiAgICAgW21fdmlldyBfc2V0V2luZG93T2NjbHVzaW9uRGV0ZWN0aW9uRW5hYmxl
ZDpOT107CiAKICAgICBOU1NjcmVlbiAqZmlyc3RTY3JlZW4gPSBbW05TU2NyZWVuIHNjcmVlbnNd
IG9iamVjdEF0SW5kZXg6MF07Ci0gICAgTlNSZWN0IHdpbmRvd1JlY3QgPSBtX29wdGlvbnMuc2hv
dWxkU2hvd1dlYlZpZXcgPyBOU09mZnNldFJlY3QocmVjdCwgMTAwLCAxMDApIDogTlNPZmZzZXRS
ZWN0KHJlY3QsIC0xMDAwMCwgW2ZpcnN0U2NyZWVuIGZyYW1lXS5zaXplLmhlaWdodCAtIHJlY3Qu
c2l6ZS5oZWlnaHQgKyAxMDAwMCk7CisgICAgTlNSZWN0IHdpbmRvd1JlY3QgPSBtX29wdGlvbnMu
c2hvdWxkU2hvd1dlYlZpZXcoKSA/IE5TT2Zmc2V0UmVjdChyZWN0LCAxMDAsIDEwMCkgOiBOU09m
ZnNldFJlY3QocmVjdCwgLTEwMDAwLCBbZmlyc3RTY3JlZW4gZnJhbWVdLnNpemUuaGVpZ2h0IC0g
cmVjdC5zaXplLmhlaWdodCArIDEwMDAwKTsKICAgICBtX3dpbmRvdyA9IFtbV2ViS2l0VGVzdFJ1
bm5lcldpbmRvdyBhbGxvY10gaW5pdFdpdGhDb250ZW50UmVjdDp3aW5kb3dSZWN0IHN0eWxlTWFz
azpOU1dpbmRvd1N0eWxlTWFza0JvcmRlcmxlc3MgYmFja2luZzooTlNCYWNraW5nU3RvcmVUeXBl
KV9OU0JhY2tpbmdTdG9yZVVuYnVmZmVyZWQgZGVmZXI6WUVTXTsKICAgICBtX3dpbmRvdy5wbGF0
Zm9ybVdlYlZpZXcgPSB0aGlzOwogICAgIFttX3dpbmRvdyBzZXRDb2xvclNwYWNlOltmaXJzdFNj
cmVlbiBjb2xvclNwYWNlXV07CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9UZXN0
Q29udHJvbGxlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL21h
Yy9UZXN0Q29udHJvbGxlck1hYy5tbQkocmV2aXNpb24gMjY4MDIxKQorKysgVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9tYWMvVGVzdENvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE3
MiwxMSArMTcyLDExIEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRTdGF0ZVQK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZv
cm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9yVGVzdChUZXN0T3B0aW9ucyYgb3B0aW9ucywgY29uc3Qg
c3RkOjpzdHJpbmcmKSBjb25zdAorVGVzdEZlYXR1cmVzIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9y
bVNwZWNpZmljRmVhdHVyZURlZmF1bHRzRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYpIGNvbnN0
CiB7Ci0gICAgb3B0aW9ucy51c2VUaHJlYWRlZFNjcm9sbGluZyA9IHRydWU7Ci0gICAgb3B0aW9u
cy51c2VSZW1vdGVMYXllclRyZWUgPSBzaG91bGRVc2VSZW1vdGVMYXllclRyZWUoKTsKLSAgICBv
cHRpb25zLnNob3VsZFNob3dXZWJWaWV3ID0gc2hvdWxkU2hvd1dlYlZpZXcoKTsKKyAgICBUZXN0
RmVhdHVyZXMgZmVhdHVyZXM7CisgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJ1
c2VUaHJlYWRlZFNjcm9sbGluZyIsIHRydWUgfSk7CisgICAgcmV0dXJuIGZlYXR1cmVzOwogfQog
CiB2b2lkIFRlc3RDb250cm9sbGVyOjpjb25maWd1cmVDb250ZW50RXh0ZW5zaW9uRm9yVGVzdChj
b25zdCBUZXN0SW52b2NhdGlvbiYgdGVzdCkKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
d2luL1BsYXRmb3JtV2ViVmlld1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci93aW4vUGxhdGZvcm1XZWJWaWV3V2luLmNwcAkocmV2aXNpb24gMjY4MDIxKQorKysg
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93aW4vUGxhdGZvcm1XZWJWaWV3V2luLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ0LDcgKzE0NCw3IEBAIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzZXRXaW5k
b3dGcmFtZShXS1IKICAgICAgICAgU1dQX05PTU9WRSB8IFNXUF9OT1pPUkRFUiB8IFNXUF9OT0FD
VElWQVRFIHwgU1dQX05PQ09QWUJJVFMpOwogCiAgICAgVUlOVCBmbGFncyA9IFNXUF9OT1pPUkRF
UiB8IFNXUF9OT0FDVElWQVRFIHwgU1dQX05PQ09QWUJJVFM7Ci0gICAgaWYgKG1fb3B0aW9ucy5z
aG91bGRTaG93V2ViVmlldykKKyAgICBpZiAobV9vcHRpb25zLnNob3VsZFNob3dXZWJWaWV3KCkp
CiAgICAgICAgIGZsYWdzIHw9IFNXUF9OT01PVkU7CiAgICAgOjpTZXRXaW5kb3dQb3MoCiAgICAg
ICAgIG1fd2luZG93LApJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93aW4vVGVzdENvbnRy
b2xsZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL1Rl
c3RDb250cm9sbGVyV2luLmNwcAkocmV2aXNpb24gMjY4MDIxKQorKysgVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci93aW4vVGVzdENvbnRyb2xsZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjcs
OSArMjI3LDkgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1SZXNldFByZWZlcgogICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgVGVzdENvbnRyb2xsZXI6OnVwZGF0ZVBsYXRm
b3JtU3BlY2lmaWNUZXN0T3B0aW9uc0ZvclRlc3QoVGVzdE9wdGlvbnMmLCBjb25zdCBzdGQ6OnN0
cmluZyYpIGNvbnN0CitUZXN0RmVhdHVyZXMgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtU3BlY2lm
aWNGZWF0dXJlRGVmYXVsdHNGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJikgY29uc3QKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB7IH07CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdUUgpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93cGUvVGVzdENvbnRyb2xsZXJXUEUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd3BlL1Rlc3RDb250cm9s
bGVyV1BFLmNwcAkocmV2aXNpb24gMjY4MDIxKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93
cGUvVGVzdENvbnRyb2xsZXJXUEUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsOSArMTM2LDEx
IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtUmVzZXRQcmVmZXIKIHsKIH0KIAotdm9p
ZCBUZXN0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TcGVjaWZpY1Rlc3RPcHRpb25zRm9yVGVz
dChUZXN0T3B0aW9ucyYgb3B0aW9ucywgY29uc3Qgc3RkOjpzdHJpbmcmKSBjb25zdAorVGVzdEZl
YXR1cmVzIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZURlZmF1bHRzRm9y
VGVzdChjb25zdCBUZXN0Q29tbWFuZCYpIGNvbnN0CiB7Ci0gICAgb3B0aW9ucy5lbmFibGVNb2Rl
cm5NZWRpYUNvbnRyb2xzID0gZmFsc2U7CisgICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVzOworICAg
IGZlYXR1cmVzLmJvb2xGZWF0dXJlcy5pbnNlcnQoeyAiZW5hYmxlTW9kZXJuTWVkaWFDb250cm9s
cyIsIGZhbHNlIH0pOworICAgIHJldHVybiBmZWF0dXJlczsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V1RSCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjgwMjEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAyMC0xMC0wNSAgU2FtIFdlaW5pZyAg
PHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgW1Rlc3RpbmddIEFkZCBzdXBwb3J0IGZvciBw
ZXItZGlyZWN0b3J5IG92ZXJyaWRpbmcgb2YgdGVzdGluZyBvcHRpb25zIHZpYSBuZXcgVGVzdE9w
dGlvbnMudHh0IGZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTcyOTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGRzIGRpcmVjdG9yeSBiYXNlZCBUZXN0T3B0aW9ucy50eHQgZmlsZXMgdG8gcmVw
bGFjZSBoYXJkIGNvZGluZyBpbiBXZWJLaXRUZXN0UnVubmVyCisgICAgICAgIGZvciBvcHRpb25z
IG92ZXJyaWRpbmcuCisKKyAgICAgICAgKiBmYXN0L3ZpZXdwb3J0L1Rlc3RPcHRpb25zLnR4dDog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaXBhZC9mYXN0L3ZpZXdwb3J0L1Rlc3RPcHRpb25z
LnR4dDogQWRkZWQuCisgICAgICAgICogc3ZnL1czQy1TVkctMS4xLVNFL1Rlc3RPcHRpb25zLnR4
dDogQWRkZWQuCisgICAgICAgICogc3ZnL1czQy1TVkctMS4xL1Rlc3RPcHRpb25zLnR4dDogQWRk
ZWQuCisKIDIwMjAtMTAtMDUgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAg
ICAgICBbQ29jb2FdIFZlY3Rvcml6ZSBsaW5lYXIgdG8gZGVjaWJlbHMgY29udmVyc2lvbiBpbiBS
ZWFsdGltZUFuYWx5c2VyCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3ZpZXdwb3J0L1Rlc3RPcHRp
b25zLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3ZpZXdwb3J0L1Rlc3RPcHRp
b25zLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L3ZpZXdwb3J0L1Rlc3RP
cHRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3ZWJraXQtdGVzdC1ydW5u
ZXIgWyB1c2VGbGV4aWJsZVZpZXdwb3J0PXRydWUgXQpJbmRleDogTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyNjgwMjEpCisrKyBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjAtMTAtMDUgIFNh
bSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFtUZXN0aW5nXSBBZGQgc3Vw
cG9ydCBmb3IgcGVyLWRpcmVjdG9yeSBvdmVycmlkaW5nIG9mIHRlc3Rpbmcgb3B0aW9ucyB2aWEg
bmV3IFRlc3RPcHRpb25zLnR4dCBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE3Mjk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkcyBkaXJlY3RvcnkgYmFzZWQgVGVzdE9wdGlvbnMudHh0IGZp
bGVzIHRvIHJlcGxhY2UgaGFyZCBjb2RpbmcgaW4gV2ViS2l0VGVzdFJ1bm5lcgorICAgICAgICBm
b3Igb3B0aW9ucyBvdmVycmlkaW5nLgorCisgICAgICAgICogSW5kZXhlZERCLXByaXZhdGUtYnJv
d3NpbmcvVGVzdE9wdGlvbnMudHh0OiBBZGRlZC4KKwogMjAyMC0xMC0wNSAgUm9iIEJ1aXMgIDxy
YnVpc0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFdlYktpdCBkb2Vzbid0IHBhcnNlICIjIiBhcyBk
ZWxpbWl0ZXIgZm9yIGZyYWdtZW50IGlkZW50aWZpZXIgaW4gZGF0YSBVUklzCkluZGV4OiBMYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2MvSW5kZXhlZERCLXByaXZhdGUtYnJvd3NpbmcvVGVzdE9wdGlv
bnMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy9JbmRleGVkREIt
cHJpdmF0ZS1icm93c2luZy9UZXN0T3B0aW9ucy50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL0luZGV4ZWREQi1wcml2YXRlLWJyb3dzaW5nL1Rlc3RPcHRpb25z
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3ZWJraXQtdGVzdC1ydW5uZXIgWyB1
c2VFcGhlbWVyYWxTZXNzaW9uPXRydWUgXQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vaXBh
ZC9mYXN0L3ZpZXdwb3J0L1Rlc3RPcHRpb25zLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9pcGFkL2Zhc3Qvdmlld3BvcnQvVGVzdE9wdGlvbnMudHh0CShub25leGlzdGVu
dCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2lwYWQvZmFzdC92aWV3cG9ydC9UZXN0T3B0aW9u
cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSBAQAord2Via2l0LXRlc3QtcnVubmVyIFsg
dXNlRmxleGlibGVWaWV3cG9ydD10cnVlIF0KSW5kZXg6IExheW91dFRlc3RzL3N2Zy9XM0MtU1ZH
LTEuMS1TRS9UZXN0T3B0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL1cz
Qy1TVkctMS4xLVNFL1Rlc3RPcHRpb25zLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0
cy9zdmcvVzNDLVNWRy0xLjEtU0UvVGVzdE9wdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEgQEAKK3dlYmtpdC10ZXN0LXJ1bm5lciBbIHZpZXdXaWR0aD00ODAgdmlld0hlaWdodD0z
NjAgXQpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL1czQy1TVkctMS4xL1Rlc3RPcHRpb25zLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvVzNDLVNWRy0xLjEvVGVzdE9wdGlvbnMudHh0
CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3N2Zy9XM0MtU1ZHLTEuMS9UZXN0T3B0aW9u
cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSBAQAord2Via2l0LXRlc3QtcnVubmVyIFsg
dmlld1dpZHRoPTQ4MCB2aWV3SGVpZ2h0PTM2MCBdCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410759</attachid>
            <date>2020-10-07 10:39:26 -0700</date>
            <delta_ts>2020-10-07 10:58:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217297-20201007103925.patch</filename>
            <type>text/plain</type>
            <size>39531</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODEzMikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU1IEBACisyMDIwLTEwLTA3ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBbVGVzdGluZ10gQWRkIHN1cHBvcnQgZm9yIHBlci1kaXJlY3Rvcnkgb3ZlcnJpZGlu
ZyBvZiB0ZXN0aW5nIG9wdGlvbnMgdmlhIG5ldyBUZXN0T3B0aW9ucy50eHQgZmlsZXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzI5NworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtXSVBdCisKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6
VGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMpOgorICAgICAgICAo
V1RSOjp0ZXN0UGF0aCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpjcmVhdGVUZXN0
VVJMU3RyaW5nKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmNyZWF0ZVRlc3RVUkwp
OgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6dGVzdE9wdGlvbnNGb3JUZXN0IGNvbnN0
KToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyZUNvbnRlbnRFeHRlbnNp
b25Gb3JUZXN0KToKKyAgICAgICAgKFdUUjo6cGFyc2VJbnB1dExpbmUpOgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6cnVuVGVzdCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVy
OjpkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSk6CisgICAgICAgIChXVFI6OlRlc3RDb250
cm9sbGVyOjpkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QpOgorICAgICAgICAoV1RSOjpUZXN0Q29u
dHJvbGxlcjo6ZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KToKKyAgICAgICAgKFdUUjo6VGVzdENv
bnRyb2xsZXI6OmRpZFVwZGF0ZUhpc3RvcnlUaXRsZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1
bm5lci9UZXN0Q29udHJvbGxlci5oOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0
U2hvdWxkTG9nSGlzdG9yeUNsaWVudENhbGxiYWNrcyk6IERlbGV0ZWQuCisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6CisgICAgICAgIChXVFI6OlRlc3RJbnZv
Y2F0aW9uOjpUZXN0SW52b2NhdGlvbik6CisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpp
bnZva2UpOgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6dXJsQ29udGFpbnMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6c2hvdWxkTG9nSGlzdG9y
eUNsaWVudENhbGxiYWNrcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1
bm5lci9UZXN0SW52b2NhdGlvbi5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdE9w
dGlvbnMuY3BwOgorICAgICAgICAoV1RSOjprZXlUeXBlKToKKyAgICAgICAgKFdUUjo6cGFyc2VC
b29sZWFuVGVzdEhlYWRlclZhbHVlKToKKyAgICAgICAgKFdUUjo6cGFyc2VTdHJpbmdUZXN0SGVh
ZGVyVmFsdWVBc1JlbGF0aXZlUGF0aCk6CisgICAgICAgIChXVFI6OnBhcnNlU3RyaW5nVGVzdEhl
YWRlclZhbHVlQXNVUkwpOgorICAgICAgICAoV1RSOjpwYXJzZVRlc3RIZWFkZXIpOgorICAgICAg
ICAoV1RSOjpwYXRoQ29udGFpbnMpOgorICAgICAgICAoV1RSOjpvdmVycmlkZURldmljZVNjYWxl
RmFjdG9yRm9yVGVzdCk6CisgICAgICAgIChXVFI6OmhhcmRjb2RlZEZlYXR1cmVzQmFzZWRPblBh
dGhGb3JUZXN0KToKKyAgICAgICAgKFdUUjo6ZmVhdHVyZURlZmF1bHRzRnJvbVRlc3RPcHRpb25z
RmlsZXNGb3JUZXN0KToKKyAgICAgICAgKFdUUjo6ZmVhdHVyZURlZmF1bHRzRnJvbVRlc3RIZWFk
ZXJGb3JUZXN0KToKKyAgICAgICAgKFdUUjo6c2hvdWxkTWFrZVZpZXdwb3J0RmxleGlibGUpOiBE
ZWxldGVkLgorICAgICAgICAoV1RSOjpzaG91bGRVc2VFcGhlbWVyYWxTZXNzaW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdUUjo6b3ZlcnJpZGVWaWV3V2lkdGhBbmRIZWlnaHRGb3JUZXN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdUUjo6c2hvdWxkRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RPcHRpb25zLmg6CisgICAgICAg
IChXVFI6OlRlc3RPcHRpb25zOjpkdW1wRnJhbWVMb2FkQ2FsbGJhY2tzIGNvbnN0KToKKyAgICAg
ICAgKFdUUjo6VGVzdE9wdGlvbnM6OnJlcXVpcmVzVGVzdENvbnRlbnRFeHRlbnNpb25zIGNvbnN0
KToKKyAgICAgICAgKFdUUjo6VGVzdE9wdGlvbnM6OnNob3VsZExvZ0hpc3RvcnlDbGllbnRDYWxs
YmFja3MgY29uc3QpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvbWFjL1Rlc3RDb250cm9s
bGVyTWFjLm1tOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJlQ29udGVu
dEV4dGVuc2lvbkZvclRlc3QpOgorCiAyMDIwLTEwLTA3ICBBYWthc2ggSmFpbiAgPGFha2FzaF9q
YWluQGFwcGxlLmNvbT4KIAogICAgICAgICBbYnVpbGQud2Via2l0Lm9yZ10gRW5zdXJlIHRoYXQg
aW52YWxpZCBzdGVwIG5hbWVzIGFyZSBub3QgYWxsb3dlZApJbmRleDogVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDI2ODEzMikKKysrIFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw2
ICs4Myw3IEBACiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUnVu
TG9vcC5oPgogI2luY2x1ZGUgPHd0Zi9TZXRGb3JTY29wZS5oPgorI2luY2x1ZGUgPHd0Zi9TdGRG
aWxlc3lzdGVtLmg+CiAjaW5jbHVkZSA8d3RmL1VVSUQuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVl
QXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC0xMTA0LDcgKzExMDUs
NiBAQCBib29sIFRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0CiAgICAgc2V0UGx1
Z2luU3VwcG9ydGVkTW9kZSh7IH0pOwogCiAgICAgbV9zaG91bGRMb2dEb3dubG9hZENhbGxiYWNr
cyA9IGZhbHNlOwotICAgIG1fc2hvdWxkTG9nSGlzdG9yeUNsaWVudENhbGxiYWNrcyA9IGZhbHNl
OwogICAgIG1fc2hvdWxkTG9nQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSA9
IGZhbHNlOwogCiAgICAgc2V0SGlkZGVuKGZhbHNlKTsKQEAgLTEyOTksNjAgKzEyOTksMzUgQEAg
dm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dzQW55U1NMQ2VydAogfQogI2VuZGlmCiAKLXN0
YXRpYyBzdGQ6OnN0cmluZyB0ZXN0UGF0aChXS1VSTFJlZiB1cmwpCitzdGF0aWMgc3RkOjpmaWxl
c3lzdGVtOjpwYXRoIHRlc3RQYXRoKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCiB7Ci0g
ICAgYXV0byBzY2hlbWUgPSBhZG9wdFdLKFdLVVJMQ29weVNjaGVtZSh1cmwpKTsKLSAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZ0lnbm9yaW5nQ2FzZShzY2hlbWUuZ2V0KCksICJm
aWxlIikpIHsKLSAgICAgICAgYXV0byBwYXRoID0gYWRvcHRXSyhXS1VSTENvcHlQYXRoKHVybCkp
OwotICAgICAgICBhdXRvIGJ1ZmZlciA9IHN0ZDo6dmVjdG9yPGNoYXI+KFdLU3RyaW5nR2V0TWF4
aW11bVVURjhDU3RyaW5nU2l6ZShwYXRoLmdldCgpKSk7Ci0gICAgICAgIGF1dG8gbGVuZ3RoID0g
V0tTdHJpbmdHZXRVVEY4Q1N0cmluZyhwYXRoLmdldCgpLCBidWZmZXIuZGF0YSgpLCBidWZmZXIu
c2l6ZSgpKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobGVuZ3RoID4gMCk7Ci0jaWYgT1MoV0lO
RE9XUykKLSAgICAgICAgLy8gUmVtb3ZlIHRoZSBmaXJzdCAnLycgaWYgaXQgc3RhcnRzIHdpdGgg
c29tZXRoaW5nIGxpa2UgIi9DOi8iLgotICAgICAgICBpZiAobGVuZ3RoID49IDQgJiYgYnVmZmVy
WzBdID09ICcvJyAmJiBidWZmZXJbMl0gPT0gJzonICYmIGJ1ZmZlclszXSA9PSAnLycpCi0gICAg
ICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcoYnVmZmVyLmRhdGEoKSArIDEsIGxlbmd0aCAtIDEp
OwotI2VuZGlmCi0gICAgICAgIHJldHVybiBzdGQ6OnN0cmluZyhidWZmZXIuZGF0YSgpLCBsZW5n
dGggLSAxKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CisgICAgQVNTRVJUKHBh
dGhPclVSTC5maW5kKCJodHRwOi8vIikgIT0gMCAmJiBwYXRoT3JVUkwuZmluZCgiaHR0cHM6Ly8i
KSAhPSAwKTsKKworICAgIGlmIChwYXRoT3JVUkwuZmluZCgiZmlsZTovLyIpID09IDApCisgICAg
ICAgIHJldHVybiBwYXRoT3JVUkwuc3Vic3RyKHN0cmxlbigiZmlsZTovLyIpKTsKKworICAgIHN0
ZDo6ZmlsZXN5c3RlbTo6cGF0aCBwYXRoID0gcGF0aE9yVVJMOworICAgIGlmICghcGF0aC5pc19h
YnNvbHV0ZSgpKQorICAgICAgICBwYXRoID0gc3RkOjpmaWxlc3lzdGVtOjphYnNvbHV0ZShwYXRo
KTsKKworICAgIHJldHVybiBwYXRoOwogfQogCi1XS1VSTFJlZiBUZXN0Q29udHJvbGxlcjo6Y3Jl
YXRlVGVzdFVSTChjb25zdCBjaGFyKiBwYXRoT3JVUkwpCitzdGQ6OnN0cmluZyBUZXN0Q29udHJv
bGxlcjo6Y3JlYXRlVGVzdFVSTFN0cmluZyhjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMKQog
ewotICAgIGlmIChzdHJzdHIocGF0aE9yVVJMLCAiaHR0cDovLyIpIHx8IHN0cnN0cihwYXRoT3JV
UkwsICJodHRwczovLyIpIHx8IHN0cnN0cihwYXRoT3JVUkwsICJmaWxlOi8vIikpCi0gICAgICAg
IHJldHVybiBXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyhwYXRoT3JVUkwpOworICAgIGlmIChw
YXRoT3JVUkwuZmluZCgiaHR0cDovLyIpID09IDAgfHwgcGF0aE9yVVJMLmZpbmQoImh0dHBzOi8v
IikgPT0gMCB8fCBwYXRoT3JVUkwuZmluZCgiZmlsZTovLyIpID09IDApCisgICAgICAgIHJldHVy
biBwYXRoT3JVUkw7CiAKLSAgICAvLyBDcmVhdGluZyBmcm9tIGZpbGVzeXRlbSBwYXRoLgotICAg
IHNpemVfdCBsZW5ndGggPSBzdHJsZW4ocGF0aE9yVVJMKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAg
ICAgICAgcmV0dXJuIDA7CisgICAgc3RkOjpmaWxlc3lzdGVtOjpwYXRoIHBhdGggPSBwYXRoT3JV
Ukw7CisgICAgaWYgKCFwYXRoLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHBhdGggPSBzdGQ6OmZp
bGVzeXN0ZW06OmFic29sdXRlKHBhdGgpOwogCi0jaWYgUExBVEZPUk0oV0lOKQotICAgIGJvb2wg
aXNBYnNvbHV0ZVBhdGggPSBmYWxzZTsKLSAgICBpZiAoc3RybGVuKHBhdGhPclVSTCkgPj0gMyAm
JiBwYXRoT3JVUkxbMV0gPT0gJzonICYmIHBhdGhPclVSTFsyXSA9PSBwYXRoU2VwYXJhdG9yKQot
ICAgICAgICBpc0Fic29sdXRlUGF0aCA9IHRydWU7Ci0jZWxzZQotICAgIGJvb2wgaXNBYnNvbHV0
ZVBhdGggPSBwYXRoT3JVUkxbMF0gPT0gcGF0aFNlcGFyYXRvcjsKLSNlbmRpZgotICAgIGNvbnN0
IGNoYXIqIGZpbGVQcmVmaXggPSAiZmlsZTovLyI7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBw
cmVmaXhMZW5ndGggPSBzdHJsZW4oZmlsZVByZWZpeCk7Ci0KLSAgICBVbmlxdWVBcnJheTxjaGFy
PiBidWZmZXI7Ci0gICAgaWYgKGlzQWJzb2x1dGVQYXRoKSB7Ci0gICAgICAgIGJ1ZmZlciA9IG1h
a2VVbmlxdWVBcnJheTxjaGFyPihwcmVmaXhMZW5ndGggKyBsZW5ndGggKyAxKTsKLSAgICAgICAg
c3RyY3B5KGJ1ZmZlci5nZXQoKSwgZmlsZVByZWZpeCk7Ci0gICAgICAgIHN0cmNweShidWZmZXIu
Z2V0KCkgKyBwcmVmaXhMZW5ndGgsIHBhdGhPclVSTCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
YnVmZmVyID0gbWFrZVVuaXF1ZUFycmF5PGNoYXI+KHByZWZpeExlbmd0aCArIFBBVEhfTUFYICsg
bGVuZ3RoICsgMik7IC8vIDEgZm9yIHRoZSBwYXRoU2VwYXJhdG9yCi0gICAgICAgIHN0cmNweShi
dWZmZXIuZ2V0KCksIGZpbGVQcmVmaXgpOwotICAgICAgICBpZiAoIWdldGN3ZChidWZmZXIuZ2V0
KCkgKyBwcmVmaXhMZW5ndGgsIFBBVEhfTUFYKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICBzaXplX3QgbnVtQ2hhcmFjdGVycyA9IHN0cmxlbihidWZmZXIuZ2V0KCkpOwotICAgICAg
ICBidWZmZXJbbnVtQ2hhcmFjdGVyc10gPSBwYXRoU2VwYXJhdG9yOwotICAgICAgICBzdHJjcHko
YnVmZmVyLmdldCgpICsgbnVtQ2hhcmFjdGVycyArIDEsIHBhdGhPclVSTCk7Ci0gICAgfQorICAg
IHJldHVybiAiZmlsZTovLyIgKyBwYXRoLmdlbmVyaWNfc3RyaW5nKCk7Cit9CiAKLSAgICByZXR1
cm4gV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJpbmcoYnVmZmVyLmdldCgpKTsKK1dLVVJMUmVmIFRl
c3RDb250cm9sbGVyOjpjcmVhdGVUZXN0VVJMKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwp
Cit7CisgICAgcmV0dXJuIFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGNyZWF0ZVRlc3RVUkxT
dHJpbmcocGF0aE9yVVJMKS5jX3N0cigpKTsKIH0KIAogVGVzdE9wdGlvbnMgVGVzdENvbnRyb2xs
ZXI6OnRlc3RPcHRpb25zRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYgY29tbWFuZCkgY29uc3QK
QEAgLTEzNjAsNiArMTMzNSw3IEBAIFRlc3RPcHRpb25zIFRlc3RDb250cm9sbGVyOjp0ZXN0T3B0
aW9uc0YKICAgICBUZXN0RmVhdHVyZXMgZmVhdHVyZXMgPSBtX2dsb2JhbEZlYXR1cmVzOwogICAg
IG1lcmdlKGZlYXR1cmVzLCBoYXJkY29kZWRGZWF0dXJlc0Jhc2VkT25QYXRoRm9yVGVzdChjb21t
YW5kKSk7CiAgICAgbWVyZ2UoZmVhdHVyZXMsIHBsYXRmb3JtU3BlY2lmaWNGZWF0dXJlRGVmYXVs
dHNGb3JUZXN0KGNvbW1hbmQpKTsKKyAgICBtZXJnZShmZWF0dXJlcywgZmVhdHVyZURlZmF1bHRz
RnJvbVRlc3RPcHRpb25zRmlsZXNGb3JUZXN0KGNvbW1hbmQpKTsKICAgICBtZXJnZShmZWF0dXJl
cywgZmVhdHVyZURlZmF1bHRzRnJvbVRlc3RIZWFkZXJGb3JUZXN0KGNvbW1hbmQpKTsKICAgICBt
ZXJnZShmZWF0dXJlcywgcGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVPdmVycmlkZXNEZWZhdWx0c0Zv
clRlc3QoY29tbWFuZCkpOwogCkBAIC0xNDE5LDE1ICsxMzk1LDE1IEBAIHN0YXRpYyBzdGQ6OnN0
cmluZyBjb250ZW50RXh0ZW5zaW9uSlNPTlAKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6Y29uZmln
dXJlQ29udGVudEV4dGVuc2lvbkZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mIHRlc3QpCiB7
Ci0gICAgY29uc3QgY2hhciogY29udGVudEV4dGVuc2lvbnNQYXRoID0gbGlicmFyeVBhdGhGb3JU
ZXN0aW5nKCk7Ci0gICAgaWYgKCFjb250ZW50RXh0ZW5zaW9uc1BhdGgpCi0gICAgICAgIGNvbnRl
bnRFeHRlbnNpb25zUGF0aCA9ICIvdG1wL3drdHItY29udGVudGV4dGVuc2lvbnMiOwotCi0gICAg
aWYgKCF0ZXN0LnVybENvbnRhaW5zKCJjb250ZW50ZXh0ZW5zaW9ucy8iKSkgeworICAgIGlmICgh
dGVzdC5vcHRpb25zKCkucmVxdWlyZXNUZXN0Q29udGVudEV4dGVuc2lvbnMoKSkgewogICAgICAg
ICBXS1BhZ2VTZXRVc2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkKG1fbWFpbldlYlZpZXctPnBh
Z2UoKSwgZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgY29uc3QgY2hhciog
Y29udGVudEV4dGVuc2lvbnNQYXRoID0gbGlicmFyeVBhdGhGb3JUZXN0aW5nKCk7CisgICAgaWYg
KCFjb250ZW50RXh0ZW5zaW9uc1BhdGgpCisgICAgICAgIGNvbnRlbnRFeHRlbnNpb25zUGF0aCA9
ICIvdG1wL3drdHItY29udGVudGV4dGVuc2lvbnMiOworCiAgICAgc3RkOjpzdHJpbmcganNvbkZp
bGVQYXRoKGNvbnRlbnRFeHRlbnNpb25KU09OUGF0aCh0ZXN0LnVybCgpKSk7CiAgICAgc3RkOjpp
ZnN0cmVhbSBqc29uRmlsZShqc29uRmlsZVBhdGgpOwogICAgIGlmICghanNvbkZpbGUuZ29vZCgp
KSB7CkBAIC0xNTcwLDEwICsxNTQ2LDggQEAgc3RhdGljIFRlc3RDb21tYW5kIHBhcnNlSW5wdXRM
aW5lKGNvbnN0IAogICAgICAgICAgICAgZGllKGlucHV0TGluZSk7CiAgICAgfQogICAgIAotICAg
IGlmIChyZXN1bHQuYWJzb2x1dGVQYXRoLmVtcHR5KCkpIHsKLSAgICAgICAgLy8gR3Jvc3MuIE5l
ZWQgdG8gcmVkdWNlIGNvbnZlcnNpb25zIGJldHdlZW4gYWxsIHRoZSBzdHJpbmcgdHlwZXMgYW5k
IFVSTHMuCi0gICAgICAgIHJlc3VsdC5hYnNvbHV0ZVBhdGggPSB0ZXN0UGF0aChhZG9wdFdLKFRl
c3RDb250cm9sbGVyOjpjcmVhdGVUZXN0VVJMKHJlc3VsdC5wYXRoT3JVUkwuY19zdHIoKSkpLmdl
dCgpKTsKLSAgICB9CisgICAgaWYgKHJlc3VsdC5hYnNvbHV0ZVBhdGguZW1wdHkoKSkKKyAgICAg
ICAgcmVzdWx0LmFic29sdXRlUGF0aCA9IHRlc3RQYXRoKHJlc3VsdC5wYXRoT3JVUkwpOwogCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE1ODksNyArMTU2Myw3IEBAIGJvb2wgVGVzdENvbnRy
b2xsZXI6OnJ1blRlc3QoY29uc3QgY2hhcioKICAgICAKICAgICBUZXN0T3B0aW9ucyBvcHRpb25z
ID0gdGVzdE9wdGlvbnNGb3JUZXN0KGNvbW1hbmQpOwogCi0gICAgbV9jdXJyZW50SW52b2NhdGlv
biA9IG1ha2VVbmlxdWU8VGVzdEludm9jYXRpb24+KGFkb3B0V0soY3JlYXRlVGVzdFVSTChjb21t
YW5kLnBhdGhPclVSTC5jX3N0cigpKSkuZ2V0KCksIG9wdGlvbnMpOworICAgIG1fY3VycmVudElu
dm9jYXRpb24gPSBtYWtlVW5pcXVlPFRlc3RJbnZvY2F0aW9uPihjb21tYW5kLCBvcHRpb25zKTsK
IAogICAgIGlmIChjb21tYW5kLnNob3VsZER1bXBQaXhlbHMgfHwgbV9zaG91bGREdW1wUGl4ZWxz
Rm9yQWxsVGVzdHMpCiAgICAgICAgIG1fY3VycmVudEludm9jYXRpb24tPnNldElzUGl4ZWxUZXN0
KGNvbW1hbmQuZXhwZWN0ZWRQaXhlbEhhc2gpOwpAQCAtMjcxNiw3ICsyNjkwLDcgQEAgdm9pZCBU
ZXN0Q29udHJvbGxlcjo6ZGlkTmF2aWdhdGVXaXRoTmF2aQogICAgIGlmIChtX3N0YXRlICE9IFJ1
bm5pbmdUZXN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIW1fc2hvdWxkTG9nSGlzdG9y
eUNsaWVudENhbGxiYWNrcykKKyAgICBpZiAoIW1fY3VycmVudEludm9jYXRpb24tPm9wdGlvbnMo
KS5zaG91bGRMb2dIaXN0b3J5Q2xpZW50Q2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGF1dG8gdXJsID0gYWRvcHRXSyhXS05hdmlnYXRpb25EYXRhQ29weVVSTChuYXZpZ2F0aW9u
RGF0YSkpOwpAQCAtMjc0MCw3ICsyNzE0LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUGVy
Zm9ybUNsaWVudFJlZAogICAgIGlmIChtX3N0YXRlICE9IFJ1bm5pbmdUZXN0KQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAoIW1fc2hvdWxkTG9nSGlzdG9yeUNsaWVudENhbGxiYWNrcykKKyAg
ICBpZiAoIW1fY3VycmVudEludm9jYXRpb24tPm9wdGlvbnMoKS5zaG91bGRMb2dIaXN0b3J5Q2xp
ZW50Q2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gc291cmNlID0gdG9X
VEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcoc291cmNlVVJMKSkpOwpAQCAtMjc1OSw3
ICsyNzMzLDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUGVyZm9ybVNlcnZlclJlZAogICAg
IGlmIChtX3N0YXRlICE9IFJ1bm5pbmdUZXN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
IW1fc2hvdWxkTG9nSGlzdG9yeUNsaWVudENhbGxiYWNrcykKKyAgICBpZiAoIW1fY3VycmVudElu
dm9jYXRpb24tPm9wdGlvbnMoKS5zaG91bGRMb2dIaXN0b3J5Q2xpZW50Q2FsbGJhY2tzKCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gc291cmNlID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhX
S1VSTENvcHlTdHJpbmcoc291cmNlVVJMKSkpOwpAQCAtMjc3OCw3ICsyNzUyLDcgQEAgdm9pZCBU
ZXN0Q29udHJvbGxlcjo6ZGlkVXBkYXRlSGlzdG9yeVRpdAogICAgIGlmIChtX3N0YXRlICE9IFJ1
bm5pbmdUZXN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIW1fc2hvdWxkTG9nSGlzdG9y
eUNsaWVudENhbGxiYWNrcykKKyAgICBpZiAoIW1fY3VycmVudEludm9jYXRpb24tPm9wdGlvbnMo
KS5zaG91bGRMb2dIaXN0b3J5Q2xpZW50Q2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGF1dG8gdXJsU3RyaW5nID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmco
VVJMKSkpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAkocmV2
aXNpb24gMjY4MTMyKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvU2Vjb25kcy5o
PgorI2luY2x1ZGUgPHd0Zi9TdGRGaWxlc3lzdGVtLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIApAQCAtOTIsNyArOTMsOCBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIHZvaWQgY29uZmlndXJlV2Vic2l0ZURhdGFTdG9yZVRlbXBvcmFy
eURpcmVjdG9yaWVzKFdLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb25SZWYpOwogICAgIHN0
YXRpYyBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgZGVmYXVsdFdlYnNpdGVEYXRhU3RvcmUoKTsKIAot
ICAgIHN0YXRpYyBXS1VSTFJlZiBjcmVhdGVUZXN0VVJMKGNvbnN0IGNoYXIqIHBhdGhPclVSTCk7
CisgICAgc3RhdGljIHN0ZDo6c3RyaW5nIGNyZWF0ZVRlc3RVUkxTdHJpbmcoY29uc3Qgc3RkOjpz
dHJpbmcmIHBhdGhPclVSTCk7CisgICAgc3RhdGljIFdLVVJMUmVmIGNyZWF0ZVRlc3RVUkwoY29u
c3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCk7CiAKICAgICBzdGF0aWMgY29uc3QgV1RGOjpTZWNv
bmRzIGRlZmF1bHRTaG9ydFRpbWVvdXQ7CiAgICAgc3RhdGljIGNvbnN0IFdURjo6U2Vjb25kcyBu
b1RpbWVvdXQ7CkBAIC0xOTEsNyArMTkzLDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0QmxvY2tB
bGxQbHVnaW5zKGJvb2wgc2hvdWxkQmxvY2spOwogICAgIHZvaWQgc2V0UGx1Z2luU3VwcG9ydGVk
TW9kZShjb25zdCBTdHJpbmcmKTsKIAotICAgIHZvaWQgc2V0U2hvdWxkTG9nSGlzdG9yeUNsaWVu
dENhbGxiYWNrcyhib29sIHNob3VsZExvZykgeyBtX3Nob3VsZExvZ0hpc3RvcnlDbGllbnRDYWxs
YmFja3MgPSBzaG91bGRMb2c7IH0KICAgICB2b2lkIHNldFNob3VsZExvZ0NhbkF1dGhlbnRpY2F0
ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoYm9vbCBzaG91bGRMb2cpIHsgbV9zaG91bGRMb2dDYW5B
dXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlID0gc2hvdWxkTG9nOyB9CiAgICAgdm9p
ZCBzZXRTaG91bGRMb2dEb3dubG9hZENhbGxiYWNrcyhib29sIHNob3VsZExvZykgeyBtX3Nob3Vs
ZExvZ0Rvd25sb2FkQ2FsbGJhY2tzID0gc2hvdWxkTG9nOyB9CiAKQEAgLTYwMyw3ICs2MDQsNiBA
QCBwcml2YXRlOgogICAgIAogICAgIGJvb2wgbV9zaG91bGRMb2dDYW5BdXRoZW50aWNhdGVBZ2Fp
bnN0UHJvdGVjdGlvblNwYWNlIHsgZmFsc2UgfTsKICAgICBib29sIG1fc2hvdWxkTG9nRG93bmxv
YWRDYWxsYmFja3MgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9zaG91bGRMb2dIaXN0b3J5Q2xpZW50
Q2FsbGJhY2tzIHsgZmFsc2UgfTsKICAgICBib29sIG1fY2hlY2tGb3JXb3JsZExlYWtzIHsgZmFs
c2UgfTsKIAogICAgIGJvb2wgbV9hbGxvd0FueUhUVFBTQ2VydGlmaWNhdGVGb3JBbGxvd2VkSG9z
dHMgeyBmYWxzZSB9OwpAQCAtNjUyLDcgKzY1Miw3IEBAIHByaXZhdGU6CiAKIHN0cnVjdCBUZXN0
Q29tbWFuZCB7CiAgICAgc3RkOjpzdHJpbmcgcGF0aE9yVVJMOwotICAgIHN0ZDo6c3RyaW5nIGFi
c29sdXRlUGF0aDsKKyAgICBzdGQ6OmZpbGVzeXN0ZW06OnBhdGggYWJzb2x1dGVQYXRoOwogICAg
IHN0ZDo6c3RyaW5nIGV4cGVjdGVkUGl4ZWxIYXNoOwogICAgIFdURjo6U2Vjb25kcyB0aW1lb3V0
OwogICAgIGJvb2wgc2hvdWxkRHVtcFBpeGVscyB7IGZhbHNlIH07CkluZGV4OiBUb29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAkocmV2aXNpb24gMjY4MTMyKQorKysgVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc2LDE1ICs3NiwxMyBAQCBzdGF0aWMgdm9pZCBwb3N0UGFnZU1lc3NhZ2UoY29uc3QgY2hhciog
CiAgICAgcG9zdFBhZ2VNZXNzYWdlKG5hbWUsIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4geyB9KTsK
IH0KIAotVGVzdEludm9jYXRpb246OlRlc3RJbnZvY2F0aW9uKFdLVVJMUmVmIHVybCwgY29uc3Qg
VGVzdE9wdGlvbnMmIG9wdGlvbnMpCi0gICAgOiBtX29wdGlvbnMob3B0aW9ucykKLSAgICAsIG1f
dXJsKHVybCkKK1Rlc3RJbnZvY2F0aW9uOjpUZXN0SW52b2NhdGlvbihjb25zdCBUZXN0Q29tbWFu
ZCYgY29tbWFuZCwgY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpCisgICAgOiBtX2NvbW1hbmQo
Y29tbWFuZCkKKyAgICAsIG1fb3B0aW9ucyhvcHRpb25zKQorICAgICwgbV91cmwoVGVzdENvbnRy
b2xsZXI6OmNyZWF0ZVRlc3RVUkwoY29tbWFuZC5wYXRoT3JVUkwpKQogICAgICwgbV93YWl0VG9E
dW1wV2F0Y2hkb2dUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZUZXN0SW52b2NhdGlvbjo6
d2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJlZCkKKyAgICAsIG1fZHVtcEZyYW1lTG9hZENhbGxi
YWNrcyhvcHRpb25zLmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKIHsKLSAgICBtX3VybFN0cmlu
ZyA9IHRvV1RGU3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKG1fdXJsLmdldCgpKSkuZ2V0
KCkpOwotCi0gICAgLy8gRklYTUU6IEF2b2lkIG11dGF0aW5nIHRoZSBzZXR0aW5nIHZpYSBhIHRl
c3QgZGlyZWN0b3J5IGxpa2UgdGhpcy4KLSAgICBtX2R1bXBGcmFtZUxvYWRDYWxsYmFja3MgPSB1
cmxDb250YWlucygibG9hZGluZy8iKSAmJiAhdXJsQ29udGFpbnMoIjovL2xvY2FsaG9zdCIpOwog
fQogCiBUZXN0SW52b2NhdGlvbjo6flRlc3RJbnZvY2F0aW9uKCkKQEAgLTk4LDExICs5Niw2IEBA
IFdLVVJMUmVmIFRlc3RJbnZvY2F0aW9uOjp1cmwoKSBjb25zdAogICAgIHJldHVybiBtX3VybC5n
ZXQoKTsKIH0KIAotYm9vbCBUZXN0SW52b2NhdGlvbjo6dXJsQ29udGFpbnMoY29uc3QgY2hhciog
c2VhcmNoU3RyaW5nKSBjb25zdAotewotICAgIHJldHVybiBtX3VybFN0cmluZy5jb250YWluc0ln
bm9yaW5nQVNDSUlDYXNlKHNlYXJjaFN0cmluZyk7Ci19Ci0KIHZvaWQgVGVzdEludm9jYXRpb246
OnNldElzUGl4ZWxUZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBleHBlY3RlZFBpeGVsSGFzaCkKIHsK
ICAgICBtX2R1bXBQaXhlbHMgPSB0cnVlOwpAQCAtMTIzLDExICsxMTYsNiBAQCBXVEY6OlNlY29u
ZHMgVGVzdEludm9jYXRpb246OnNob3J0VGltZW91CiAgICAgcmV0dXJuIG1fdGltZW91dCAvIDQ7
CiB9CiAKLWJvb2wgVGVzdEludm9jYXRpb246OnNob3VsZExvZ0hpc3RvcnlDbGllbnRDYWxsYmFj
a3MoKSBjb25zdAotewotICAgIHJldHVybiB1cmxDb250YWlucygiZ2xvYmFsaGlzdG9yeS8iKTsK
LX0KLQogV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gVGVzdEludm9jYXRpb246
OmNyZWF0ZVRlc3RTZXR0aW5nc0RpY3Rpb25hcnkoKQogewogICAgIGF1dG8gYmVnaW5UZXN0TWVz
c2FnZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CkBAIC0xNDcs
OCArMTM1LDYgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6aW52b2tlKCkKIAogICAgIG1fdGV4dE91
dHB1dC5jbGVhcigpOwogCi0gICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNob3Vs
ZExvZ0hpc3RvcnlDbGllbnRDYWxsYmFja3Moc2hvdWxkTG9nSGlzdG9yeUNsaWVudENhbGxiYWNr
cygpKTsKLQogICAgIFdLSFRUUENvb2tpZVN0b3JlU2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShX
S1dlYnNpdGVEYXRhU3RvcmVHZXRIVFRQQ29va2llU3RvcmUoVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLndlYnNpdGVEYXRhU3RvcmUoKSksIGtXS0hUVFBDb29raWVBY2NlcHRQb2xpY3lPbmx5
RnJvbU1haW5Eb2N1bWVudERvbWFpbiwgbnVsbHB0ciwgbnVsbHB0cik7CiAKICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGNsZWFyIG91dCB2aXNpdGVkIGxpbmtzIGhlcmUuCkluZGV4OiBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5oCShyZXZpc2lvbiAyNjgxMzIpCisrKyBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSlNXcmFwcGFibGUuaCIKKyNp
bmNsdWRlICJUZXN0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRlc3RPcHRpb25zLmgiCiAjaW5j
bHVkZSAiVUlTY3JpcHRDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2hhdFRvRHVtcC5oIgpAQCAtNDIs
MTEgKzQzLDEwIEBAIGNsYXNzIFRlc3RJbnZvY2F0aW9uIGZpbmFsIDogcHVibGljIFVJU2MKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUZXN0
SW52b2NhdGlvbik7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgVGVzdEludm9jYXRpb24oV0tVUkxS
ZWYsIGNvbnN0IFRlc3RPcHRpb25zJik7CisgICAgZXhwbGljaXQgVGVzdEludm9jYXRpb24oY29u
c3QgVGVzdENvbW1hbmQmLCBjb25zdCBUZXN0T3B0aW9ucyYpOwogICAgIH5UZXN0SW52b2NhdGlv
bigpOwogCiAgICAgV0tVUkxSZWYgdXJsKCkgY29uc3Q7Ci0gICAgYm9vbCB1cmxDb250YWlucyhj
b25zdCBjaGFyKikgY29uc3Q7CiAgICAgCiAgICAgY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMo
KSBjb25zdCB7IHJldHVybiBtX29wdGlvbnM7IH0KIApAQCAtMTMyLDE2ICsxMzIsMTQgQEAgcHJp
dmF0ZToKICAgICBzdGF0aWMgdm9pZCBydW5VSVNpZGVTY3JpcHRBZnRlclVwZGF0ZUNhbGxiYWNr
KFdLRXJyb3JSZWYsIHZvaWQqIGNvbnRleHQpOwogICAgIHN0YXRpYyB2b2lkIHJ1blVJU2lkZVNj
cmlwdEltbWVkaWF0ZWx5KFdLRXJyb3JSZWYsIHZvaWQqIGNvbnRleHQpOwogCi0gICAgYm9vbCBz
aG91bGRMb2dIaXN0b3J5Q2xpZW50Q2FsbGJhY2tzKCkgY29uc3Q7Ci0KICAgICB2b2lkIHJ1blVJ
U2lkZVNjcmlwdChXS1N0cmluZ1JlZiwgdW5zaWduZWQgY2FsbGJhY2tJRCk7CiAgICAgLy8gVUlT
Y3JpcHRDb250ZXh0RGVsZWdhdGUKICAgICB2b2lkIHVpU2NyaXB0RGlkQ29tcGxldGUoY29uc3Qg
U3RyaW5nJiByZXN1bHQsIHVuc2lnbmVkIGNhbGxiYWNrSUQpIG92ZXJyaWRlOwogCisgICAgY29u
c3QgVGVzdENvbW1hbmQgbV9jb21tYW5kOwogICAgIGNvbnN0IFRlc3RPcHRpb25zIG1fb3B0aW9u
czsKICAgICAKICAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gbV91cmw7Ci0gICAgU3RyaW5nIG1f
dXJsU3RyaW5nOwogICAgIFJ1bkxvb3A6OlRpbWVyPFRlc3RJbnZvY2F0aW9uPiBtX3dhaXRUb0R1
bXBXYXRjaGRvZ1RpbWVyOwogCiAgICAgc3RkOjpzdHJpbmcgbV9leHBlY3RlZFBpeGVsSGFzaDsK
SW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuY3BwCShyZXZpc2lvbiAyNjgx
MzIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RPcHRpb25zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsMTAgKzMwLDkgQEAKICNpbmNsdWRlICJUZXN0Q29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgPGZzdHJlYW0+CiAjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8b3B0aW9uYWw+
CiAjaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUg
PHd0Zi9TdGRGaWxlc3lzdGVtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
ICNkZWZpbmUgRFVNUF9GRUFUVVJFUyAwCiAKQEAgLTE1OSw2ICsxNTgsOSBAQCBzdGF0aWMgS2V5
VHlwZSBrZXlUeXBlKHN0ZDo6c3RyaW5nIGtleSkKICAgICAgICAgeyAiZW5hYmxlUHJvY2Vzc1N3
YXBPbk5hdmlnYXRpb24iLCBLZXlUeXBlOjpCb29sIH0sCiAgICAgICAgIHsgImVuYWJsZVByb2Nl
c3NTd2FwT25XaW5kb3dPcGVuIiwgS2V5VHlwZTo6Qm9vbCB9LAogICAgICAgICB7ICJ1c2VTZXJ2
aWNlV29ya2VyU2hvcnRUaW1lb3V0IiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJkdW1w
RnJhbWVMb2FkQ2FsbGJhY2tzIiwgS2V5VHlwZTo6Qm9vbCB9LAorICAgICAgICB7ICJyZXF1aXJl
c1Rlc3RDb250ZW50RXh0ZW5zaW9ucyIsIEtleVR5cGU6OkJvb2wgfSwKKyAgICAgICAgeyAic2hv
dWxkTG9nSGlzdG9yeUNsaWVudENhbGxiYWNrcyIsIEtleVR5cGU6OkJvb2wgfSwKICAgICAKICAg
ICAgICAgeyAiY29udGVudEluc2V0LnRvcCIsIEtleVR5cGU6OkRvdWJsZSB9LAogICAgICAgICB7
ICJkZXZpY2VTY2FsZUZhY3RvciIsIEtleVR5cGU6OkRvdWJsZSB9LApAQCAtMTg4LDIzICsxOTAs
MjMgQEAgc3RhdGljIGJvb2wgcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKAogICAgIGlmICh2
YWx1ZSA9PSAiZmFsc2UiKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBMT0dfRVJST1Io
IkZvdW5kIHVuZXhwZWN0ZWQgdmFsdWUgJyVzJyBmb3IgYm9vbGVhbiBvcHRpb24uIEV4cGVjdGVk
ICd0cnVlJyBvciAnZmFsc2UnLiIsIHZhbHVlLmNfc3RyKCkpOworICAgIExPR19FUlJPUigiRm91
bmQgdW5leHBlY3RlZCB2YWx1ZSAnJXMnIGZvciBib29sZWFuIG9wdGlvbi4gRXhwZWN0ZWQgJ3Ry
dWUnIG9yICdmYWxzZScuIiwgc3RkOjpzdHJpbmcgeyB2YWx1ZSB9LmNfc3RyKCkpOwogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotc3RhdGljIHN0ZDo6c3RyaW5nIHBhcnNlU3RyaW5nVGVzdEhlYWRl
clZhbHVlQXNSZWxhdGl2ZVBhdGgoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLCBjb25zdCBzdGQ6
OnN0cmluZyYgcGF0aE9yVVJMKQorc3RhdGljIHN0ZDo6c3RyaW5nIHBhcnNlU3RyaW5nVGVzdEhl
YWRlclZhbHVlQXNSZWxhdGl2ZVBhdGgoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlLCBjb25zdCBz
dGQ6OmZpbGVzeXN0ZW06OnBhdGgmIGJhc2VQYXRoKQogewotICAgIGF1dG8gYmFzZVVSTCA9IGFk
b3B0V0soVGVzdENvbnRyb2xsZXI6OmNyZWF0ZVRlc3RVUkwocGF0aE9yVVJMLmNfc3RyKCkpKTsK
LSAgICBhdXRvIHJlbGF0aXZlVVJMID0gYWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhCYXNlVVJMKGJh
c2VVUkwuZ2V0KCksIHZhbHVlLmNfc3RyKCkpKTsKLSAgICByZXR1cm4gdG9TVEQoYWRvcHRXSyhX
S1VSTENvcHlQYXRoKHJlbGF0aXZlVVJMLmdldCgpKSkpOworICAgIHN0ZDo6ZmlsZXN5c3RlbTo6
cGF0aCByZWxhdGl2ZVBhdGggPSB2YWx1ZTsKKyAgICBhdXRvIGFic29sdXRlUGF0aCA9IGJhc2VQ
YXRoIC8gcmVsYXRpdmVQYXRoOworICAgIHJldHVybiBhYnNvbHV0ZVBhdGguZ2VuZXJpY19zdHJp
bmcoKTsKIH0KIAogc3RhdGljIHN0ZDo6c3RyaW5nIHBhcnNlU3RyaW5nVGVzdEhlYWRlclZhbHVl
QXNVUkwoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKQogewotICAgIHJldHVybiB0b1NURChhZG9w
dFdLKFdLVVJMQ29weVN0cmluZyhUZXN0Q29udHJvbGxlcjo6Y3JlYXRlVGVzdFVSTCh2YWx1ZS5j
X3N0cigpKSkpKTsKKyAgICByZXR1cm4gVGVzdENvbnRyb2xsZXI6OmNyZWF0ZVRlc3RVUkxTdHJp
bmcodmFsdWUpOwogfQogCi1zdGF0aWMgVGVzdEZlYXR1cmVzIHBhcnNlVGVzdEhlYWRlcihzdGQ6
OmZpbGVzeXN0ZW06OnBhdGggcGF0aCwgY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKK3N0
YXRpYyBUZXN0RmVhdHVyZXMgcGFyc2VUZXN0SGVhZGVyKGNvbnN0IHN0ZDo6ZmlsZXN5c3RlbTo6
cGF0aCYgcGF0aCkKIHsKICAgICBUZXN0RmVhdHVyZXMgZmVhdHVyZXM7CiAgICAgaWYgKCFzdGQ6
OmZpbGVzeXN0ZW06OmV4aXN0cyhwYXRoKSkKQEAgLTI2MSw3ICsyNjMsNyBAQCBzdGF0aWMgVGVz
dEZlYXR1cmVzIHBhcnNlVGVzdEhlYWRlcihzdGQ6CiAgICAgICAgICAgICBmZWF0dXJlcy5zdHJp
bmdGZWF0dXJlcy5pbnNlcnQoeyBrZXksIHZhbHVlIH0pOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nUmVsYXRpdmVQYXRoOgotICAgICAgICAgICAgZmVh
dHVyZXMuc3RyaW5nRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJW
YWx1ZUFzUmVsYXRpdmVQYXRoKHZhbHVlLCBwYXRoT3JVUkwpIH0pOworICAgICAgICAgICAgZmVh
dHVyZXMuc3RyaW5nRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBwYXJzZVN0cmluZ1Rlc3RIZWFkZXJW
YWx1ZUFzUmVsYXRpdmVQYXRoKHZhbHVlLCBwYXRoLnBhcmVudF9wYXRoKCkpIH0pOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nVVJMOgogICAgICAgICAg
ICAgZmVhdHVyZXMuc3RyaW5nRmVhdHVyZXMuaW5zZXJ0KHsga2V5LCBwYXJzZVN0cmluZ1Rlc3RI
ZWFkZXJWYWx1ZUFzVVJMKHZhbHVlKSB9KTsKQEAgLTI4MCw2NiArMjgyLDUwIEBAIHN0YXRpYyBU
ZXN0RmVhdHVyZXMgcGFyc2VUZXN0SGVhZGVyKHN0ZDoKICAgICByZXR1cm4gZmVhdHVyZXM7CiB9
CiAKLXN0YXRpYyBib29sIHBhdGhDb250YWlucyhjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJM
LCBjb25zdCBjaGFyKiBzdWJzdHJpbmcpCitzdGF0aWMgYm9vbCBwYXRoQ29udGFpbnMoY29uc3Qg
c3RkOjpmaWxlc3lzdGVtOjpwYXRoJiBwYXRoLCBzdGQ6OnN0cmluZ192aWV3IHN1YnN0cmluZykK
IHsKLSAgICBTdHJpbmcgcGF0aChwYXRoT3JVUkwuY19zdHIoKSk7Ci0gICAgcmV0dXJuIHBhdGgu
Y29udGFpbnMoc3Vic3RyaW5nKTsgLy8gQ2FzZS1pbnNlbnNpdGl2ZS4KKyAgICByZXR1cm4gcGF0
aC5nZW5lcmljX3N0cmluZygpLmZpbmQoc3Vic3RyaW5nKSAhPSBzdGQ6OnN0cmluZzo6bnBvczsK
IH0KIAotc3RhdGljIGJvb2wgc2hvdWxkTWFrZVZpZXdwb3J0RmxleGlibGUoY29uc3Qgc3RkOjpz
dHJpbmcmIHBhdGhPclVSTCkKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gb3ZlcnJpZGVE
ZXZpY2VTY2FsZUZhY3RvckZvclRlc3QoY29uc3Qgc3RkOjpmaWxlc3lzdGVtOjpwYXRoJiBwYXRo
KQogewotICAgIHJldHVybiBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAidmlld3BvcnQvIikgJiYg
IXBhdGhDb250YWlucyhwYXRoT3JVUkwsICJ2aXN1YWwtdmlld3BvcnQvIik7CisgICAgaWYgKHBh
dGhDb250YWlucyhwYXRoLCAiL2hpZHBpLTN4LSIpKQorICAgICAgICByZXR1cm4gMzsKKyAgICBp
ZiAocGF0aENvbnRhaW5zKHBhdGgsICIvaGlkcGktIikpCisgICAgICAgIHJldHVybiAyOworICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CiB9CiAKLXN0YXRpYyBib29sIHNob3VsZFVzZUVwaGVtZXJh
bFNlc3Npb24oY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKK1Rlc3RGZWF0dXJlcyBoYXJk
Y29kZWRGZWF0dXJlc0Jhc2VkT25QYXRoRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYgY29tbWFu
ZCkKIHsKLSAgICByZXR1cm4gcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgInczYy9JbmRleGVkREIt
cHJpdmF0ZS1icm93c2luZyIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJ3M2NcXEluZGV4
ZWREQi1wcml2YXRlLWJyb3dzaW5nIik7Ci19CisgICAgVGVzdEZlYXR1cmVzIGZlYXR1cmVzOwog
Ci1zdGF0aWMgT3B0aW9uYWw8c3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPj4gb3ZlcnJpZGVWaWV3
V2lkdGhBbmRIZWlnaHRGb3JUZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCi17Ci0g
ICAgaWYgKHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJzdmcvVzNDLVNWRy0xLjEiKSB8fCBwYXRo
Q29udGFpbnMocGF0aE9yVVJMLCAic3ZnXFxXM0MtU1ZHLTEuMSIpKQotICAgICAgICByZXR1cm4g
eyB7IDQ4MCwgMzYwIH0gfTsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQorICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgcmVwbGFjZSBwYXRoIGJhc2VkIG92ZXJyaWRpbmcgd2l0aCB0ZXN0IGhl
YWRlcnMuCiAKLXN0YXRpYyBPcHRpb25hbDxkb3VibGU+IG92ZXJyaWRlRGV2aWNlU2NhbGVGYWN0
b3JGb3JUZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCi17Ci0gICAgaWYgKHBhdGhD
b250YWlucyhwYXRoT3JVUkwsICIvaGlkcGktM3gtIikpCi0gICAgICAgIHJldHVybiAzOwotICAg
IGlmIChwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAiL2hpZHBpLSIpKQotICAgICAgICByZXR1cm4g
MjsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQorICAgIGlmIChhdXRvIGRldmljZVNjYWxl
RmFjdG9yID0gb3ZlcnJpZGVEZXZpY2VTY2FsZUZhY3RvckZvclRlc3QoY29tbWFuZC5hYnNvbHV0
ZVBhdGgpOyBkZXZpY2VTY2FsZUZhY3RvciAhPSBzdGQ6Om51bGxvcHQpCisgICAgICAgIGZlYXR1
cmVzLmRvdWJsZUZlYXR1cmVzLmluc2VydCh7ICJkZXZpY2VTY2FsZUZhY3RvciIsICpkZXZpY2VT
Y2FsZUZhY3RvciB9KTsKIAotc3RhdGljIGJvb2wgc2hvdWxkRHVtcEpTQ29uc29sZUxvZ0luU3Rk
RXJyKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCi17Ci0gICAgcmV0dXJuIHBhdGhDb250
YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC9iZWFjb24iKSB8fCBwYXRoQ29udGFpbnMo
cGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMvYmVhY29uIikKLSAgICAgICAgfHwgcGF0aENvbnRh
aW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo4ODAwL2NvcnMiKSB8fCBwYXRoQ29udGFpbnMocGF0
aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMvY29ycyIpCi0gICAgICAgIHx8IHBhdGhDb250YWlucyhw
YXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC9mZXRjaCIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JV
UkwsICJsb2NhbGhvc3Q6OTQ0My9mZXRjaCIpCi0gICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRo
T3JVUkwsICJsb2NhbGhvc3Q6ODgwMC9zZXJ2aWNlLXdvcmtlcnMiKSB8fCBwYXRoQ29udGFpbnMo
cGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMvc2VydmljZS13b3JrZXJzIikKLSAgICAgICAgfHwg
cGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo4ODAwL3N0cmVhbXMvd3JpdGFibGUt
c3RyZWFtcyIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My9zdHJl
YW1zL3dyaXRhYmxlLXN0cmVhbXMiKQotICAgICAgICB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJM
LCAibG9jYWxob3N0Ojg4MDAvc3RyZWFtcy9waXBpbmciKSB8fCBwYXRoQ29udGFpbnMocGF0aE9y
VVJMLCAibG9jYWxob3N0Ojk0NDMvc3RyZWFtcy9waXBpbmciKQotICAgICAgICB8fCBwYXRoQ29u
dGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAveGhyIikgfHwgcGF0aENvbnRhaW5zKHBh
dGhPclVSTCwgImxvY2FsaG9zdDo5NDQzL3hociIpCi0gICAgICAgIHx8IHBhdGhDb250YWlucyhw
YXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgwMC93ZWJydGMiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9y
VVJMLCAibG9jYWxob3N0Ojk0NDMvd2VicnRjIikKLSAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBh
dGhPclVSTCwgImxvY2FsaG9zdDo4ODAwL3dlYnNvY2tldHMiKSB8fCBwYXRoQ29udGFpbnMocGF0
aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMvd2Vic29ja2V0cyIpOworICAgIHJldHVybiBmZWF0dXJl
czsKIH0KIAotVGVzdEZlYXR1cmVzIGhhcmRjb2RlZEZlYXR1cmVzQmFzZWRPblBhdGhGb3JUZXN0
KGNvbnN0IFRlc3RDb21tYW5kJiBjb21tYW5kKQorVGVzdEZlYXR1cmVzIGZlYXR1cmVEZWZhdWx0
c0Zyb21UZXN0T3B0aW9uc0ZpbGVzRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYgY29tbWFuZCkK
IHsKLSAgICBUZXN0RmVhdHVyZXMgZmVhdHVyZXM7CisgICAgYXV0byBwYXRoID0gY29tbWFuZC5h
YnNvbHV0ZVBhdGg7CiAKLSAgICBpZiAoc2hvdWxkTWFrZVZpZXdwb3J0RmxleGlibGUoY29tbWFu
ZC5wYXRoT3JVUkwpKQotICAgICAgICBmZWF0dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgInVz
ZUZsZXhpYmxlVmlld3BvcnQiLCB0cnVlIH0pOwotICAgIGlmIChzaG91bGRVc2VFcGhlbWVyYWxT
ZXNzaW9uKGNvbW1hbmQucGF0aE9yVVJMKSkKLSAgICAgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVz
Lmluc2VydCh7ICJ1c2VFcGhlbWVyYWxTZXNzaW9uIiwgdHJ1ZSB9KTsKLSAgICBpZiAoc2hvdWxk
RHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKGNvbW1hbmQucGF0aE9yVVJMKSkKLSAgICAgICAgZmVh
dHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiLCB0
cnVlIH0pOwotICAgIGlmIChhdXRvIGRldmljZVNjYWxlRmFjdG9yID0gb3ZlcnJpZGVEZXZpY2VT
Y2FsZUZhY3RvckZvclRlc3QoY29tbWFuZC5wYXRoT3JVUkwpOyBkZXZpY2VTY2FsZUZhY3RvciAh
PSBXVEY6Om51bGxvcHQpCi0gICAgICAgIGZlYXR1cmVzLmRvdWJsZUZlYXR1cmVzLmluc2VydCh7
ICJkZXZpY2VTY2FsZUZhY3RvciIsIGRldmljZVNjYWxlRmFjdG9yLnZhbHVlKCkgfSk7Ci0gICAg
aWYgKGF1dG8gdmlld1dpZHRoQW5kSGVpZ2h0ID0gb3ZlcnJpZGVWaWV3V2lkdGhBbmRIZWlnaHRG
b3JUZXN0KGNvbW1hbmQucGF0aE9yVVJMKTsgdmlld1dpZHRoQW5kSGVpZ2h0ICE9IFdURjo6bnVs
bG9wdCkgewotICAgICAgICBmZWF0dXJlcy5kb3VibGVGZWF0dXJlcy5pbnNlcnQoeyAidmlld1dp
ZHRoIiwgdmlld1dpZHRoQW5kSGVpZ2h0LT5maXJzdCB9KTsKLSAgICAgICAgZmVhdHVyZXMuZG91
YmxlRmVhdHVyZXMuaW5zZXJ0KHsgInZpZXdIZWlnaHQiLCB2aWV3V2lkdGhBbmRIZWlnaHQtPnNl
Y29uZCB9KTsKKyAgICAvLyBHYXRoZXIgZGlyZWN0b3JpZXMgdGhhdCBtYXkgY29udGFpbiBUZXN0
SGVhZGVycyBmaWxlcy4KKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OmZpbGVzeXN0ZW06OnBhdGg+IGRp
cmVjdG9yaWVzVG9DaGVjazsKKyAgICBkbyB7CisgICAgICAgIHBhdGggPSBwYXRoLnBhcmVudF9w
YXRoKCk7CisgICAgICAgIGRpcmVjdG9yaWVzVG9DaGVjay5wdXNoX2JhY2socGF0aCk7CisgICAg
fSB3aGlsZSAocGF0aC5maWxlbmFtZSgpICE9ICJMYXlvdXRUZXN0cyIpOworCisgICAgLy8gSXRl
cmF0ZSB0aGUgZGlyZWN0b3JpZXMgdGhhdCBtYXkgY29udGFpbiAnVGVzdE9wdGlvbnMudHh0JyBm
aWxlcyBmcm9tIGxlYXN0IHRvIG1vc3QKKyAgICAvLyBzcGVjaWZpYywgYW5kIG1lcmdlIGluIGFu
eSBmZWF0dXJlcyBmb3VuZC4KKyAgICBUZXN0RmVhdHVyZXMgZmVhdHVyZXM7CisgICAgZm9yIChh
dXRvIGRpcmVjdG9yeVRvQ2hlY2sgOiBXVEY6Om1ha2VSZXZlcnNlZFJhbmdlKGRpcmVjdG9yaWVz
VG9DaGVjaykpIHsKKyAgICAgICAgYXV0byB0ZXN0SGVhZGVyRmlsZSA9IGRpcmVjdG9yeVRvQ2hl
Y2sgLyAiVGVzdE9wdGlvbnMudHh0IjsKKyAgICAgICAgYXV0byB0ZXN0T3B0aW9uc0ZlYXR1cmVz
ID0gcGFyc2VUZXN0SGVhZGVyKHRlc3RIZWFkZXJGaWxlKTsKKyAgICAgICAgbWVyZ2UoZmVhdHVy
ZXMsIHRlc3RPcHRpb25zRmVhdHVyZXMpOwogICAgIH0KIAogICAgIHJldHVybiBmZWF0dXJlczsK
QEAgLTM0Nyw3ICszMzMsNyBAQCBUZXN0RmVhdHVyZXMgaGFyZGNvZGVkRmVhdHVyZXNCYXNlZE9u
UGF0CiAKIFRlc3RGZWF0dXJlcyBmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3Qo
Y29uc3QgVGVzdENvbW1hbmQmIGNvbW1hbmQpCiB7Ci0gICAgcmV0dXJuIHBhcnNlVGVzdEhlYWRl
cihjb21tYW5kLmFic29sdXRlUGF0aCwgY29tbWFuZC5wYXRoT3JVUkwpOworICAgIHJldHVybiBw
YXJzZVRlc3RIZWFkZXIoY29tbWFuZC5hYnNvbHV0ZVBhdGgpOwogfQogCiBUZXN0T3B0aW9uczo6
VGVzdE9wdGlvbnMoVGVzdEZlYXR1cmVzIGZlYXR1cmVzKQpJbmRleDogVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9UZXN0T3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvVGVzdE9wdGlvbnMuaAkocmV2aXNpb24gMjY4MTMyKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9UZXN0T3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw2IEBACiAKICNw
cmFnbWEgb25jZQogCi0jaW5jbHVkZSA8b3B0aW9uYWw+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2lu
Y2x1ZGUgPHVub3JkZXJlZF9tYXA+CiAjaW5jbHVkZSA8dmVjdG9yPgpAQCAtNDYsNiArNDUsNyBA
QCBzdHJ1Y3QgVGVzdEZlYXR1cmVzIHsKIHZvaWQgbWVyZ2UoVGVzdEZlYXR1cmVzJiBiYXNlLCBU
ZXN0RmVhdHVyZXMgYWRkaXRpb25hbCk7CiAKIFRlc3RGZWF0dXJlcyBoYXJkY29kZWRGZWF0dXJl
c0Jhc2VkT25QYXRoRm9yVGVzdChjb25zdCBUZXN0Q29tbWFuZCYpOworVGVzdEZlYXR1cmVzIGZl
YXR1cmVEZWZhdWx0c0Zyb21UZXN0T3B0aW9uc0ZpbGVzRm9yVGVzdChjb25zdCBUZXN0Q29tbWFu
ZCYpOwogVGVzdEZlYXR1cmVzIGZlYXR1cmVEZWZhdWx0c0Zyb21UZXN0SGVhZGVyRm9yVGVzdChj
b25zdCBUZXN0Q29tbWFuZCYpOwogCiBzdHJ1Y3QgQ29udGV4dE9wdGlvbnMgewpAQCAtMTM1LDYg
KzEzNSw5IEBAIHB1YmxpYzoKICAgICBib29sIGVuYWJsZVByb2Nlc3NTd2FwT25OYXZpZ2F0aW9u
KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgiZW5hYmxlUHJvY2Vzc1N3YXBPbk5h
dmlnYXRpb24iLCB0cnVlKTsgfQogICAgIGJvb2wgZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09w
ZW4oKSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJlbmFibGVQcm9jZXNzU3dhcE9u
V2luZG93T3BlbiIsIGZhbHNlKTsgfQogICAgIGJvb2wgdXNlU2VydmljZVdvcmtlclNob3J0VGlt
ZW91dCgpIGNvbnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInVzZVNlcnZpY2VXb3JrZXJT
aG9ydFRpbWVvdXQiLCBmYWxzZSk7IH0KKyAgICBib29sIGR1bXBGcmFtZUxvYWRDYWxsYmFja3Mo
KSBjb25zdCB7IHJldHVybiBib29sRmVhdHVyZVZhbHVlKCJkdW1wRnJhbWVMb2FkQ2FsbGJhY2tz
IiwgZmFsc2UpOyB9CisgICAgYm9vbCByZXF1aXJlc1Rlc3RDb250ZW50RXh0ZW5zaW9ucygpIGNv
bnN0IHsgcmV0dXJuIGJvb2xGZWF0dXJlVmFsdWUoInJlcXVpcmVzVGVzdENvbnRlbnRFeHRlbnNp
b25zIiwgZmFsc2UpOyB9CisgICAgYm9vbCBzaG91bGRMb2dIaXN0b3J5Q2xpZW50Q2FsbGJhY2tz
KCkgY29uc3QgeyByZXR1cm4gYm9vbEZlYXR1cmVWYWx1ZSgic2hvdWxkTG9nSGlzdG9yeUNsaWVu
dENhbGxiYWNrcyIsIGZhbHNlKTsgfQogICAgIGRvdWJsZSBjb250ZW50SW5zZXRUb3AoKSBjb25z
dCB7IHJldHVybiBkb3VibGVGZWF0dXJlVmFsdWUoImNvbnRlbnRJbnNldC50b3AiLCAwKTsgfQog
ICAgIGRvdWJsZSBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIGRvdWJsZUZlYXR1
cmVWYWx1ZSgiZGV2aWNlU2NhbGVGYWN0b3IiLCAxKTsgfQogICAgIGRvdWJsZSB2aWV3V2lkdGgo
KSBjb25zdCB7IHJldHVybiBkb3VibGVGZWF0dXJlVmFsdWUoInZpZXdXaWR0aCIsIDgwMCk7IH0K
SW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1Rlc3RDb250cm9sbGVyTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1Rlc3RDb250cm9sbGVyTWFj
Lm1tCShyZXZpc2lvbiAyNjgxMzIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9UZXN0
Q29udHJvbGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTgxLDcgKzE4MSw3IEBAIFRlc3RG
ZWF0dXJlcyBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1TcGUKIAogdm9pZCBUZXN0Q29udHJvbGxl
cjo6Y29uZmlndXJlQ29udGVudEV4dGVuc2lvbkZvclRlc3QoY29uc3QgVGVzdEludm9jYXRpb24m
IHRlc3QpCiB7Ci0gICAgaWYgKCF0ZXN0LnVybENvbnRhaW5zKCJjb250ZW50ZXh0ZW5zaW9ucy8i
KSkKKyAgICBpZiAoIXRlc3Qub3B0aW9ucygpLnJlcXVpcmVzVGVzdENvbnRlbnRFeHRlbnNpb25z
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gdGVzdFVSTCA9IGFkb3B0Q0YoV0tVUkxD
b3B5Q0ZVUkwoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdGVzdC51cmwoKSkpOwpJbmRleDogTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2
aXNpb24gMjY4MTMyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTAgQEAKKzIwMjAtMTAtMDcgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29t
PgorCisgICAgICAgIFtUZXN0aW5nXSBBZGQgc3VwcG9ydCBmb3IgcGVyLWRpcmVjdG9yeSBvdmVy
cmlkaW5nIG9mIHRlc3Rpbmcgb3B0aW9ucyB2aWEgbmV3IFRlc3RPcHRpb25zLnR4dCBmaWxlcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3Mjk3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBkaXJl
Y3RvcnkgYmFzZWQgVGVzdE9wdGlvbnMudHh0IGZpbGVzIHRvIHJlcGxhY2UgaGFyZCBjb2Rpbmcg
aW4gV2ViS2l0VGVzdFJ1bm5lcgorICAgICAgICBmb3Igb3B0aW9ucyBvdmVycmlkaW5nLgorCisg
ICAgICAgICogZmFzdC92aWV3cG9ydC9UZXN0T3B0aW9ucy50eHQ6IEFkZGVkLgorICAgICAgICAq
IGh0dHAvdGVzdHMvY29udGVudGV4dGVuc2lvbnMvVGVzdE9wdGlvbnMudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBodHRwL3Rlc3RzL2dsb2JhbGhpc3RvcnkvVGVzdE9wdGlvbnMudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL2NvbnRlbnRleHRlbnNpb25z
L1Rlc3RPcHRpb25zLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy93ZWJydGMvVGVz
dE9wdGlvbnMudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0
cy9oeWJpL2NvbnRlbnRleHRlbnNpb25zL1Rlc3RPcHRpb25zLnR4dDogQWRkZWQuCisgICAgICAg
ICogaHR0cC93cHQvYmVhY29uL1Rlc3RPcHRpb25zLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0
cC93cHQvYmVhY29uL2NvbnRlbnRleHRlbnNpb25zL1Rlc3RPcHRpb25zLnR4dDogQWRkZWQuCisg
ICAgICAgICogaHR0cC93cHQvZmV0Y2gvVGVzdE9wdGlvbnMudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBodHRwL3dwdC9zZXJ2aWNlLXdvcmtlcnMvVGVzdE9wdGlvbnMudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBodHRwL3dwdC93ZWJydGMvVGVzdE9wdGlvbnMudHh0OiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9pcGFkL2Zhc3Qvdmlld3BvcnQvVGVzdE9wdGlvbnMudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBzdmcvVzNDLVNWRy0xLjEtU0UvVGVzdE9wdGlvbnMudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBzdmcvVzNDLVNWRy0xLjEvVGVzdE9wdGlvbnMudHh0OiBBZGRlZC4KKworMjAyMC0xMC0wNiAg
U2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgPGlucHV0IHR5cGU9ImRh
dGV0aW1lLWxvY2FsIj4gbm90IHNob3cgY2FsZW5kYXIgVUkgd2hlbiBpdCdzIGluc2lkZSBTaGFk
b3dET00KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
Njk4NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjk2NjAyNzM+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgQWRkIHRlc3RzIHRoYXQgc2hvdyB0aGF0IGRh
dGUvdGltZSBpbnB1dCBlbGVtZW50cyBhcmUgdGhlIHNhbWUgd2hldGhlciB0aGV5IGNvbWUgZnJv
bSBhIHRlbXBsYXRlCisgICAgICAgIGRvY3VtZW50IG9yIHRoZSBtYWluIGRvY3VtZW50LgorCisg
ICAgICAgICogZmFzdC9mb3Jtcy9kYXRlL2RhdGUtZnJvbS1mcmFtZWxlc3MtZG9jdW1lbnQtZXhw
ZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jtcy9kYXRlL2RhdGUtZnJvbS1m
cmFtZWxlc3MtZG9jdW1lbnQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jtcy9kYXRl
dGltZWxvY2FsL2RhdGV0aW1lbG9jYWwtZnJvbS1mcmFtZWxlc3MtZG9jdW1lbnQtZXhwZWN0ZWQu
aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jtcy9kYXRldGltZWxvY2FsL2RhdGV0aW1l
bG9jYWwtZnJvbS1mcmFtZWxlc3MtZG9jdW1lbnQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFz
dC9mb3Jtcy9tb250aC9tb250aC1mcm9tLWZyYW1lbGVzcy1kb2N1bWVudC1leHBlY3RlZC5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL21vbnRoL21vbnRoLWZyb20tZnJhbWVsZXNz
LWRvY3VtZW50Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvdGltZS90aW1lLWZy
b20tZnJhbWVsZXNzLWRvY3VtZW50LWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvZm9ybXMvdGltZS90aW1lLWZyb20tZnJhbWVsZXNzLWRvY3VtZW50Lmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvZm9ybXMvd2Vlay93ZWVrLWZyb20tZnJhbWVsZXNzLWRvY3VtZW50LWV4
cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvd2Vlay93ZWVrLWZyb20t
ZnJhbWVsZXNzLWRvY3VtZW50Lmh0bWw6IEFkZGVkLgorCiAyMDIwLTEwLTA3ICBZb3Vlbm4gRmFi
bGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgc3VwcG9ydCBmb3IgTWVkaWFS
ZWNvcmRlciBwYXVzZS9yZXN1bWUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvdmlld3BvcnQvVGVz
dE9wdGlvbnMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvdmlld3BvcnQvVGVz
dE9wdGlvbnMudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3Qvdmlld3BvcnQv
VGVzdE9wdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtpdC10ZXN0
LXJ1bm5lciBbIHVzZUZsZXhpYmxlVmlld3BvcnQ9dHJ1ZSBdCkluZGV4OiBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2NvbnRlbnRleHRlbnNpb25zL1Rlc3RPcHRpb25zLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NvbnRlbnRleHRlbnNpb25zL1Rlc3RPcHRpb25zLnR4
dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NvbnRlbnRleHRlbnNp
b25zL1Rlc3RPcHRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3ZWJraXQt
dGVzdC1ydW5uZXIgWyByZXF1aXJlc1Rlc3RDb250ZW50RXh0ZW5zaW9ucz10cnVlIF0KSW5kZXg6
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvZ2xvYmFsaGlzdG9yeS9UZXN0T3B0aW9ucy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9nbG9iYWxoaXN0b3J5L1Rlc3RPcHRp
b25zLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2dsb2JhbGhp
c3RvcnkvVGVzdE9wdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtp
dC10ZXN0LXJ1bm5lciBbIHNob3VsZExvZ0hpc3RvcnlDbGllbnRDYWxsYmFja3M9dHJ1ZSBdCklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL2NvbnRlbnRleHRl
bnNpb25zL1Rlc3RPcHRpb25zLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2luc3BlY3Rvci9uZXR3b3JrL2NvbnRlbnRleHRlbnNpb25zL1Rlc3RPcHRpb25zLnR4dAko
bm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3Jr
L2NvbnRlbnRleHRlbnNpb25zL1Rlc3RPcHRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxIEBACit3ZWJraXQtdGVzdC1ydW5uZXIgWyByZXF1aXJlc1Rlc3RDb250ZW50RXh0ZW5zaW9u
cz10cnVlIF0KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvd2VicnRjL1Rlc3RPcHRpb25z
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnJ0Yy9UZXN0T3B0
aW9ucy50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJydGMv
VGVzdE9wdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtpdC10ZXN0
LXJ1bm5lciBbIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycj10cnVlIF0KSW5kZXg6IExheW91dFRl
c3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvY29udGVudGV4dGVuc2lvbnMvVGVz
dE9wdGlvbnMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29j
a2V0L3Rlc3RzL2h5YmkvY29udGVudGV4dGVuc2lvbnMvVGVzdE9wdGlvbnMudHh0CShub25leGlz
dGVudCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvY29u
dGVudGV4dGVuc2lvbnMvVGVzdE9wdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEg
QEAKK3dlYmtpdC10ZXN0LXJ1bm5lciBbIHJlcXVpcmVzVGVzdENvbnRlbnRFeHRlbnNpb25zPXRy
dWUgXQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC93cHQvYmVhY29uL1Rlc3RPcHRpb25zLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3dwdC9iZWFjb24vVGVzdE9wdGlvbnMudHh0
CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2h0dHAvd3B0L2JlYWNvbi9UZXN0T3B0aW9u
cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSBAQAord2Via2l0LXRlc3QtcnVubmVyIFsg
ZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyPXRydWUgXQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC93
cHQvYmVhY29uL2NvbnRlbnRleHRlbnNpb25zL1Rlc3RPcHRpb25zLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9odHRwL3dwdC9iZWFjb24vY29udGVudGV4dGVuc2lvbnMvVGVzdE9wdGlv
bnMudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2h0dHAvd3B0L2JlYWNvbi9jb250
ZW50ZXh0ZW5zaW9ucy9UZXN0T3B0aW9ucy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSBA
QAord2Via2l0LXRlc3QtcnVubmVyIFsgcmVxdWlyZXNUZXN0Q29udGVudEV4dGVuc2lvbnM9dHJ1
ZSBdCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3dwdC9mZXRjaC9UZXN0T3B0aW9ucy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC93cHQvZmV0Y2gvVGVzdE9wdGlvbnMudHh0CShu
b25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2h0dHAvd3B0L2ZldGNoL1Rlc3RPcHRpb25zLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3ZWJraXQtdGVzdC1ydW5uZXIgWyBkdW1w
SlNDb25zb2xlTG9nSW5TdGRFcnI9dHJ1ZSBdCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3dwdC9z
ZXJ2aWNlLXdvcmtlcnMvVGVzdE9wdGlvbnMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2h0dHAvd3B0L3NlcnZpY2Utd29ya2Vycy9UZXN0T3B0aW9ucy50eHQJKG5vbmV4aXN0ZW50KQor
KysgTGF5b3V0VGVzdHMvaHR0cC93cHQvc2VydmljZS13b3JrZXJzL1Rlc3RPcHRpb25zLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3ZWJraXQtdGVzdC1ydW5uZXIgWyBkdW1wSlND
b25zb2xlTG9nSW5TdGRFcnI9dHJ1ZSBdCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3dwdC93ZWJy
dGMvVGVzdE9wdGlvbnMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvd3B0L3dl
YnJ0Yy9UZXN0T3B0aW9ucy50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC93
cHQvd2VicnRjL1Rlc3RPcHRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3
ZWJraXQtdGVzdC1ydW5uZXIgWyBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnI9dHJ1ZSBdCkluZGV4
OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2ODEzMikKKysrIExheW91
dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
NCBAQAorMjAyMC0xMC0wNyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAg
ICAgW1Rlc3RpbmddIEFkZCBzdXBwb3J0IGZvciBwZXItZGlyZWN0b3J5IG92ZXJyaWRpbmcgb2Yg
dGVzdGluZyBvcHRpb25zIHZpYSBuZXcgVGVzdE9wdGlvbnMudHh0IGZpbGVzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcyOTcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRzIGRpcmVjdG9yeSBiYXNl
ZCBUZXN0T3B0aW9ucy50eHQgZmlsZXMgdG8gcmVwbGFjZSBoYXJkIGNvZGluZyBpbiBXZWJLaXRU
ZXN0UnVubmVyCisgICAgICAgIGZvciBvcHRpb25zIG92ZXJyaWRpbmcuCisKKyAgICAgICAgKiBJ
bmRleGVkREItcHJpdmF0ZS1icm93c2luZy9UZXN0T3B0aW9ucy50eHQ6IEFkZGVkLgorICAgICAg
ICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9iZWFjb24vVGVzdE9wdGlvbnMudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvY29ycy9UZXN0T3B0aW9ucy50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9mZXRjaC9UZXN0T3B0aW9ucy50eHQ6IEFkZGVk
LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9zZXJ2aWNlLXdvcmtlcnMvVGVzdE9wdGlv
bnMudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvc3RyZWFtcy9waXBp
bmcvVGVzdE9wdGlvbnMudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMv
c3RyZWFtcy93cml0YWJsZS1zdHJlYW1zL1Rlc3RPcHRpb25zLnR4dDogQWRkZWQuCisgICAgICAg
ICogd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9UZXN0T3B0aW9ucy50eHQ6IEFkZGVkLgorICAg
ICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy93ZWJzb2NrZXRzL1Rlc3RPcHRpb25zLnR4dDogQWRk
ZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3hoci9UZXN0T3B0aW9ucy50eHQ6IEFk
ZGVkLgorCiAyMDIwLTEwLTA3ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBBZGQgc3VwcG9ydCBmb3IgTWVkaWFSZWNvcmRlciBwYXVzZS9yZXN1bWUKSW5kZXg6
IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy9JbmRleGVkREItcHJpdmF0ZS1icm93c2luZy9UZXN0
T3B0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0luZGV4
ZWREQi1wcml2YXRlLWJyb3dzaW5nL1Rlc3RPcHRpb25zLnR4dAkobm9uZXhpc3RlbnQpCisrKyBM
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvSW5kZXhlZERCLXByaXZhdGUtYnJvd3NpbmcvVGVzdE9w
dGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtpdC10ZXN0LXJ1bm5l
ciBbIHVzZUVwaGVtZXJhbFNlc3Npb249dHJ1ZSBdCkluZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2JlYWNvbi9UZXN0T3B0aW9ucy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9iZWFjb24v
VGVzdE9wdGlvbnMudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvYmVhY29uL1Rlc3RPcHRpb25zLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxIEBACit3ZWJraXQtdGVzdC1ydW5uZXIgWyBkdW1wSlNDb25zb2xlTG9nSW5T
dGRFcnI9dHJ1ZSBdCkluZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL2NvcnMvVGVzdE9wdGlvbnMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY29ycy9UZXN0T3B0aW9ucy50eHQJKG5vbmV4
aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9j
b3JzL1Rlc3RPcHRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3ZWJraXQt
dGVzdC1ydW5uZXIgWyBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnI9dHJ1ZSBdCkluZGV4OiBMYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2ZldGNoL1Rlc3RPcHRpb25z
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL2ZldGNoL1Rlc3RPcHRpb25zLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2ZldGNoL1Rlc3RPcHRpb25zLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3ZWJraXQtdGVzdC1ydW5uZXIgWyBkdW1wSlND
b25zb2xlTG9nSW5TdGRFcnI9dHJ1ZSBdCkluZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3NlcnZpY2Utd29ya2Vycy9UZXN0T3B0aW9ucy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9zZXJ2
aWNlLXdvcmtlcnMvVGVzdE9wdGlvbnMudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvc2VydmljZS13b3JrZXJzL1Rlc3RPcHRp
b25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3ZWJraXQtdGVzdC1ydW5uZXIg
WyBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnI9dHJ1ZSBdCkluZGV4OiBMYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3N0cmVhbXMvcGlwaW5nL1Rlc3RPcHRpb25zLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3N0cmVhbXMvcGlwaW5nL1Rlc3RPcHRpb25zLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3N0cmVhbXMvcGlwaW5nL1Rl
c3RPcHRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3ZWJraXQtdGVzdC1y
dW5uZXIgWyBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnI9dHJ1ZSBdCkluZGV4OiBMYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3N0cmVhbXMvd3JpdGFibGUtc3RyZWFt
cy9UZXN0T3B0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9zdHJlYW1zL3dyaXRhYmxlLXN0cmVhbXMvVGVzdE9wdGlvbnMu
dHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvc3RyZWFtcy93cml0YWJsZS1zdHJlYW1zL1Rlc3RPcHRpb25zLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxIEBACit3ZWJraXQtdGVzdC1ydW5uZXIgWyBkdW1wSlNDb25zb2xl
TG9nSW5TdGRFcnI9dHJ1ZSBdCkluZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3dlYnJ0Yy9UZXN0T3B0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvVGVzdE9wdGlvbnMu
dHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvd2VicnRjL1Rlc3RPcHRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
IEBACit3ZWJraXQtdGVzdC1ydW5uZXIgWyBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnI9dHJ1ZSBd
CkluZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnNv
Y2tldHMvVGVzdE9wdGlvbnMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2Vic29ja2V0cy9UZXN0T3B0aW9ucy50eHQJKG5vbmV4
aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93
ZWJzb2NrZXRzL1Rlc3RPcHRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3
ZWJraXQtdGVzdC1ydW5uZXIgWyBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnI9dHJ1ZSBdCkluZGV4
OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3hoci9UZXN0T3B0
aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy94aHIvVGVzdE9wdGlvbnMudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMveGhyL1Rlc3RPcHRpb25zLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3ZWJraXQtdGVzdC1ydW5uZXIgWyBkdW1wSlND
b25zb2xlTG9nSW5TdGRFcnI9dHJ1ZSBdCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9pcGFk
L2Zhc3Qvdmlld3BvcnQvVGVzdE9wdGlvbnMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3BsYXRmb3JtL2lwYWQvZmFzdC92aWV3cG9ydC9UZXN0T3B0aW9ucy50eHQJKG5vbmV4aXN0ZW50
KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vaXBhZC9mYXN0L3ZpZXdwb3J0L1Rlc3RPcHRpb25z
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3ZWJraXQtdGVzdC1ydW5uZXIgWyB1
c2VGbGV4aWJsZVZpZXdwb3J0PXRydWUgXQpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL1czQy1TVkct
MS4xLVNFL1Rlc3RPcHRpb25zLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvVzND
LVNWRy0xLjEtU0UvVGVzdE9wdGlvbnMudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3Rz
L3N2Zy9XM0MtU1ZHLTEuMS1TRS9UZXN0T3B0aW9ucy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSBAQAord2Via2l0LXRlc3QtcnVubmVyIFsgdmlld1dpZHRoPTQ4MCB2aWV3SGVpZ2h0PTM2
MCBdCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvVzNDLVNWRy0xLjEvVGVzdE9wdGlvbnMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9XM0MtU1ZHLTEuMS9UZXN0T3B0aW9ucy50eHQJ
KG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvc3ZnL1czQy1TVkctMS4xL1Rlc3RPcHRpb25z
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3ZWJraXQtdGVzdC1ydW5uZXIgWyB2
aWV3V2lkdGg9NDgwIHZpZXdIZWlnaHQ9MzYwIF0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410760</attachid>
            <date>2020-10-07 10:58:27 -0700</date>
            <delta_ts>2020-10-07 11:11:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217297-20201007105826.patch</filename>
            <type>text/plain</type>
            <size>18611</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODEzMikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ1IEBACisyMDIwLTEwLTA3ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBbVGVzdGluZ10gQWRkIHN1cHBvcnQgZm9yIHBlci1kaXJlY3Rvcnkgb3ZlcnJpZGlu
ZyBvZiB0ZXN0aW5nIG9wdGlvbnMgdmlhIG5ldyBUZXN0T3B0aW9ucy50eHQgZmlsZXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzI5NworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaW50cm9kdWNl
cyBhIG5ldyBjb25jZXB0IGZvciB3ZWJraXQgdGVzdHMgKHRob3NlIHdpdGhpbiB0aGUgTGF5b3V0
VGVzdHMgZGlyZWN0b3J5KQorICAgICAgICB0aGF0IGV4dGVuZHMgdGhlIGV4aXN0aW5nIHRlc3Qt
aGVhZGVyIGJhc2VkIGNvbmZpZ3VyYXRpb24gb2YgdGVzdCBvcHRpb25zICh0aG9zZSBjb21tZW50
cworICAgICAgICBhdCB0aGUgdG9wIG9mIHNvbWV0IHRlc3QgZmlsZXMgdGhhdCBsb29rIGxpa2Ug
IndlYmtpdC10ZXN0LXJ1bm5lciBbIC4uLiBdIikgdG8gYWxzbyBhbGxvdworICAgICAgICBkaXJl
Y3Rvcnkgd2lkZSBvdmVycmlkaW5nIG9mIHRlc3Qgb3B0aW9ucyB2aWEgYSBuZXcgVGVzdE9wdGlv
bnMudHh0IGZpbGUuIFRoZXNlIGZpbGVzIGFyZQorICAgICAgICBmb3Igbm93IGV4cGVjdGVkIHRv
IHVzZSB0aGUgc2FtZSAid2Via2l0LXRlc3QtcnVubmVyIFsgLi4uIF0iIHN5bnRheCBhcyB0aGUg
dGVzdC1oZWFkZXIgYmFzZWQKKyAgICAgICAgb25lcyBmb3IgY29uc2lzdGVuY3kgYW5kIHNpbXBs
aWNpdHkgb2YgaW1wbGVtZW50YXRpb24sIGJ1dCBpbiB0aGUgZnV0dXJlIHdlIG1heSBkZWNpZGUg
aXQKKyAgICAgICAgbWFrZXMgbW9yZSBzZW5zZSB0byB1dGlsaXplIHRoZSBhZGRpdGlvbmFsIHNw
YWNlLgorCisgICAgICAgIFRoaXMgZXh0ZW5kcyB0aGUgZmVhdHVyZSBvdmVycmlkZSBwcmVjZW5k
ZW5jZSBjYWxjdWxhdGlvbiB0bzoKKworICAgICAgICAtIEdsb2JhbCBmZWF0dXJlcyBwYXNzZWQg
dG8gV2ViS2l0VGVzdFJ1bm5lciB2aWEgdGhlIGNvbW1hbmQgbGluZSAoZS5nLiAtLXNob3ctdG91
Y2hlcykKKyAgICAgICAgLSBIYXJkY29kZWQgZmVhdHVyZXMgYmFzZWQgb24gdGhlIHBhdGggb2Yg
dGhlIHRlc3QgYmVpbmcgcnVuIChob3BlZnVsbHkgd2UgY2FuIHJlbW92ZSBhbGwgc29vbikKKyAg
ICAgICAgLSBIYXJkY29kZWQgcGxhdGZvcm0gc3BlY2lmaWMgZGVmYXVsdHMgKGN1cnJlbnRseSBv
bmx5IHVzZWQgYnkgbWFjT1MgZm9yIHVzZVRocmVhZGVkU2Nyb2xsaW5nKS4KKyAgICAgICAgLSBG
ZWF0dXJlcyBmcm9tIFRlc3RPcHRpb25zLnR4dCBmaWxlcywgd2l0aCB0aGUgbW9zdCBkaXJlY3Rv
cmllcyBjbG9zZXIgdG8gLi9MYXlvdXRUZXN0cyB0YWtlaW5nCisgICAgICAgICAgbGVzcyBwcmVj
ZWRlbmNlIHRoYW4gdGhvc2UgY2xvc2VyIHRvIHRoZSB0ZXN0IGZpbGUgKGUuZy4gYW4gb3B0aW9u
IGluIAorICAgICAgICAgIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvVGVzdE9wdGlvbnMudHh0IHdp
bGwgd2luIG92ZXIgb25lIGluIExheW91dFRlc3RzL2Zhc3QvVGVzdE9wdGlvbnMudHh0KS4KKyAg
ICAgICAgLSBGZWF0dXJlcyBmcm9tIHRoZSB0ZXN0IGhlYWRlcnMgd2l0aGluIHRoZSB0ZXN0IGl0
c2VsZi4KKyAgICAgICAgLSBGaW5hbGx5LCBhIHNlY29uZCBjaGFuY2UgZm9yIG1vcmUgcGxhdGZv
cm0gc3BlY2lmaWMgZGVmYXVsdHMgKGN1cnJlbmx5IG9ubHkgdXNlZCB0aGUgY29jb2EgcG9ydHMK
KyAgICAgICAgICBmb3Igc2V0dGluZyBlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbiBhbmQg
ZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW4gYmFzZWQgb24gTlNVc2VyRGVmYXVsdHMuKQor
CisgICAgICAgIEhvcGVmdWxseSBpbiB0aGUgZnV0dXJlLCB3ZSB3aWxsIGJlIGFibGUgdG8gc2lt
cGxpZnkgdGhhdCBhcyB3ZSByZW1vdmUgc29tZSBvZiB0aGVzZSBsZXZlbHMuCisKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVz
dENvbnRyb2xsZXI6OnRlc3RPcHRpb25zRm9yVGVzdCBjb25zdCk6CisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5jcHA6CisgICAgICAgIChXVFI6OnBhdGhDb250YWlucyk6
CisgICAgICAgIChXVFI6Om92ZXJyaWRlRGV2aWNlU2NhbGVGYWN0b3JGb3JUZXN0KToKKyAgICAg
ICAgKFdUUjo6aGFyZGNvZGVkRmVhdHVyZXNCYXNlZE9uUGF0aEZvclRlc3QpOgorICAgICAgICAo
V1RSOjpmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdE9wdGlvbnNGaWxlc0ZvclRlc3QpOgorICAgICAg
ICAoV1RSOjpzaG91bGRNYWtlVmlld3BvcnRGbGV4aWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChX
VFI6OnNob3VsZFVzZUVwaGVtZXJhbFNlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpv
dmVycmlkZVZpZXdXaWR0aEFuZEhlaWdodEZvclRlc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RS
OjpzaG91bGREdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIpOiBEZWxldGVkLgorICAgICAgICAqIFdl
YktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuaDoKKwogMjAyMC0xMC0wNyAgQWFrYXNoIEphaW4g
IDxhYWthc2hfamFpbkBhcHBsZS5jb20+CiAKICAgICAgICAgW2J1aWxkLndlYmtpdC5vcmddIEVu
c3VyZSB0aGF0IGludmFsaWQgc3RlcCBuYW1lcyBhcmUgbm90IGFsbG93ZWQKSW5kZXg6IFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyNjgxMzIpCisr
KyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTM2MCw2ICsxMzYwLDcgQEAgVGVzdE9wdGlvbnMgVGVzdENvbnRyb2xsZXI6OnRlc3RP
cHRpb25zRgogICAgIFRlc3RGZWF0dXJlcyBmZWF0dXJlcyA9IG1fZ2xvYmFsRmVhdHVyZXM7CiAg
ICAgbWVyZ2UoZmVhdHVyZXMsIGhhcmRjb2RlZEZlYXR1cmVzQmFzZWRPblBhdGhGb3JUZXN0KGNv
bW1hbmQpKTsKICAgICBtZXJnZShmZWF0dXJlcywgcGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZh
dWx0c0ZvclRlc3QoY29tbWFuZCkpOworICAgIG1lcmdlKGZlYXR1cmVzLCBmZWF0dXJlRGVmYXVs
dHNGcm9tVGVzdE9wdGlvbnNGaWxlc0ZvclRlc3QoY29tbWFuZCkpOwogICAgIG1lcmdlKGZlYXR1
cmVzLCBmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3QoY29tbWFuZCkpOwogICAg
IG1lcmdlKGZlYXR1cmVzLCBwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZU92ZXJyaWRlc0RlZmF1bHRz
Rm9yVGVzdChjb21tYW5kKSk7CiAKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdE9w
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlv
bnMuY3BwCShyZXZpc2lvbiAyNjgxMzIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RP
cHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDkgQEAKICNpbmNsdWRlICJU
ZXN0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgPGZzdHJlYW0+CiAjaW5jbHVkZSA8aW9zdHJlYW0+
CisjaW5jbHVkZSA8b3B0aW9uYWw+CiAjaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRGaWxlc3lzdGVtLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKICNkZWZpbmUgRFVNUF9GRUFUVVJFUyAwCiAKQEAgLTI4Miw2
NCArMjgxLDQ0IEBAIHN0YXRpYyBUZXN0RmVhdHVyZXMgcGFyc2VUZXN0SGVhZGVyKHN0ZDoKIAog
c3RhdGljIGJvb2wgcGF0aENvbnRhaW5zKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwsIGNv
bnN0IGNoYXIqIHN1YnN0cmluZykKIHsKLSAgICBTdHJpbmcgcGF0aChwYXRoT3JVUkwuY19zdHIo
KSk7Ci0gICAgcmV0dXJuIHBhdGguY29udGFpbnMoc3Vic3RyaW5nKTsgLy8gQ2FzZS1pbnNlbnNp
dGl2ZS4KKyAgICByZXR1cm4gcGF0aE9yVVJMLmZpbmQoc3Vic3RyaW5nKSAhPSBzdGQ6OnN0cmlu
Zzo6bnBvczsKIH0KIAotc3RhdGljIGJvb2wgc2hvdWxkTWFrZVZpZXdwb3J0RmxleGlibGUoY29u
c3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKLXsKLSAgICByZXR1cm4gcGF0aENvbnRhaW5zKHBh
dGhPclVSTCwgInZpZXdwb3J0LyIpICYmICFwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAidmlzdWFs
LXZpZXdwb3J0LyIpOwotfQotCi1zdGF0aWMgYm9vbCBzaG91bGRVc2VFcGhlbWVyYWxTZXNzaW9u
KGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCi17Ci0gICAgcmV0dXJuIHBhdGhDb250YWlu
cyhwYXRoT3JVUkwsICJ3M2MvSW5kZXhlZERCLXByaXZhdGUtYnJvd3NpbmciKSB8fCBwYXRoQ29u
dGFpbnMocGF0aE9yVVJMLCAidzNjXFxJbmRleGVkREItcHJpdmF0ZS1icm93c2luZyIpOwotfQot
Ci1zdGF0aWMgT3B0aW9uYWw8c3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPj4gb3ZlcnJpZGVWaWV3
V2lkdGhBbmRIZWlnaHRGb3JUZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCi17Ci0g
ICAgaWYgKHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJzdmcvVzNDLVNWRy0xLjEiKSB8fCBwYXRo
Q29udGFpbnMocGF0aE9yVVJMLCAic3ZnXFxXM0MtU1ZHLTEuMSIpKQotICAgICAgICByZXR1cm4g
eyB7IDQ4MCwgMzYwIH0gfTsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1zdGF0aWMg
T3B0aW9uYWw8ZG91YmxlPiBvdmVycmlkZURldmljZVNjYWxlRmFjdG9yRm9yVGVzdChjb25zdCBz
dGQ6OnN0cmluZyYgcGF0aE9yVVJMKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBvdmVy
cmlkZURldmljZVNjYWxlRmFjdG9yRm9yVGVzdChjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJM
KQogewogICAgIGlmIChwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAiL2hpZHBpLTN4LSIpKQogICAg
ICAgICByZXR1cm4gMzsKICAgICBpZiAocGF0aENvbnRhaW5zKHBhdGhPclVSTCwgIi9oaWRwaS0i
KSkKICAgICAgICAgcmV0dXJuIDI7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotc3Rh
dGljIGJvb2wgc2hvdWxkRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKGNvbnN0IHN0ZDo6c3RyaW5n
JiBwYXRoT3JVUkwpCi17Ci0gICAgcmV0dXJuIHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2Nh
bGhvc3Q6ODgwMC9iZWFjb24iKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0
Ojk0NDMvYmVhY29uIikKLSAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2Fs
aG9zdDo4ODAwL2NvcnMiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0
NDMvY29ycyIpCi0gICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6
ODgwMC9mZXRjaCIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My9m
ZXRjaCIpCi0gICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgw
MC9zZXJ2aWNlLXdvcmtlcnMiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0
Ojk0NDMvc2VydmljZS13b3JrZXJzIikKLSAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVS
TCwgImxvY2FsaG9zdDo4ODAwL3N0cmVhbXMvd3JpdGFibGUtc3RyZWFtcyIpIHx8IHBhdGhDb250
YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My9zdHJlYW1zL3dyaXRhYmxlLXN0cmVhbXMi
KQotICAgICAgICB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvc3Ry
ZWFtcy9waXBpbmciKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMv
c3RyZWFtcy9waXBpbmciKQotICAgICAgICB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9j
YWxob3N0Ojg4MDAveGhyIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5
NDQzL3hociIpCi0gICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6
ODgwMC93ZWJydGMiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMv
d2VicnRjIikKLSAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo4
ODAwL3dlYnNvY2tldHMiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0
NDMvd2Vic29ja2V0cyIpOworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiB9CiAKIFRlc3RGZWF0
dXJlcyBoYXJkY29kZWRGZWF0dXJlc0Jhc2VkT25QYXRoRm9yVGVzdChjb25zdCBUZXN0Q29tbWFu
ZCYgY29tbWFuZCkKIHsKICAgICBUZXN0RmVhdHVyZXMgZmVhdHVyZXM7CiAKLSAgICBpZiAoc2hv
dWxkTWFrZVZpZXdwb3J0RmxleGlibGUoY29tbWFuZC5wYXRoT3JVUkwpKQotICAgICAgICBmZWF0
dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgInVzZUZsZXhpYmxlVmlld3BvcnQiLCB0cnVlIH0p
OwotICAgIGlmIChzaG91bGRVc2VFcGhlbWVyYWxTZXNzaW9uKGNvbW1hbmQucGF0aE9yVVJMKSkK
LSAgICAgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJ1c2VFcGhlbWVyYWxTZXNz
aW9uIiwgdHJ1ZSB9KTsKLSAgICBpZiAoc2hvdWxkRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKGNv
bW1hbmQucGF0aE9yVVJMKSkKLSAgICAgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7
ICJkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiLCB0cnVlIH0pOwotICAgIGlmIChhdXRvIGRldmlj
ZVNjYWxlRmFjdG9yID0gb3ZlcnJpZGVEZXZpY2VTY2FsZUZhY3RvckZvclRlc3QoY29tbWFuZC5w
YXRoT3JVUkwpOyBkZXZpY2VTY2FsZUZhY3RvciAhPSBXVEY6Om51bGxvcHQpCisgICAgaWYgKGF1
dG8gZGV2aWNlU2NhbGVGYWN0b3IgPSBvdmVycmlkZURldmljZVNjYWxlRmFjdG9yRm9yVGVzdChj
b21tYW5kLnBhdGhPclVSTCk7IGRldmljZVNjYWxlRmFjdG9yICE9IHN0ZDo6bnVsbG9wdCkKICAg
ICAgICAgZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMuaW5zZXJ0KHsgImRldmljZVNjYWxlRmFjdG9y
IiwgZGV2aWNlU2NhbGVGYWN0b3IudmFsdWUoKSB9KTsKLSAgICBpZiAoYXV0byB2aWV3V2lkdGhB
bmRIZWlnaHQgPSBvdmVycmlkZVZpZXdXaWR0aEFuZEhlaWdodEZvclRlc3QoY29tbWFuZC5wYXRo
T3JVUkwpOyB2aWV3V2lkdGhBbmRIZWlnaHQgIT0gV1RGOjpudWxsb3B0KSB7Ci0gICAgICAgIGZl
YXR1cmVzLmRvdWJsZUZlYXR1cmVzLmluc2VydCh7ICJ2aWV3V2lkdGgiLCB2aWV3V2lkdGhBbmRI
ZWlnaHQtPmZpcnN0IH0pOwotICAgICAgICBmZWF0dXJlcy5kb3VibGVGZWF0dXJlcy5pbnNlcnQo
eyAidmlld0hlaWdodCIsIHZpZXdXaWR0aEFuZEhlaWdodC0+c2Vjb25kIH0pOworCisgICAgcmV0
dXJuIGZlYXR1cmVzOworfQorCitUZXN0RmVhdHVyZXMgZmVhdHVyZURlZmF1bHRzRnJvbVRlc3RP
cHRpb25zRmlsZXNGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJiBjb21tYW5kKQoreworICAgIC8v
IEdhdGhlciBkaXJlY3RvcmllcyB0aGF0IG1heSBjb250YWluIFRlc3RIZWFkZXJzIGZpbGVzLgor
ICAgIHN0ZDo6dmVjdG9yPHN0ZDo6ZmlsZXN5c3RlbTo6cGF0aD4gZGlyZWN0b3JpZXNUb0NoZWNr
OworICAgIGRvIHsKKyAgICAgICAgcGF0aCA9IHBhdGgucGFyZW50X3BhdGgoKTsKKyAgICAgICAg
ZGlyZWN0b3JpZXNUb0NoZWNrLnB1c2hfYmFjayhwYXRoKTsKKyAgICB9IHdoaWxlIChwYXRoLmZp
bGVuYW1lKCkgIT0gIkxheW91dFRlc3RzIik7CisKKyAgICAvLyBJdGVyYXRlIHRoZSBkaXJlY3Rv
cmllcyB0aGF0IG1heSBjb250YWluICdUZXN0T3B0aW9ucy50eHQnIGZpbGVzIGZyb20gbGVhc3Qg
dG8gbW9zdAorICAgIC8vIHNwZWNpZmljLCBhbmQgbWVyZ2UgaW4gYW55IGZlYXR1cmVzIGZvdW5k
LgorICAgIFRlc3RGZWF0dXJlcyBmZWF0dXJlczsKKyAgICBmb3IgKGF1dG8gZGlyZWN0b3J5VG9D
aGVjayA6IFdURjo6bWFrZVJldmVyc2VkUmFuZ2UoZGlyZWN0b3JpZXNUb0NoZWNrKSkgeworICAg
ICAgICBhdXRvIHRlc3RIZWFkZXJGaWxlID0gZGlyZWN0b3J5VG9DaGVjayAvICJUZXN0T3B0aW9u
cy50eHQiOworICAgICAgICBhdXRvIHRlc3RPcHRpb25zRmVhdHVyZXMgPSBwYXJzZVRlc3RIZWFk
ZXIodGVzdEhlYWRlckZpbGUsIGNvbW1hbmQucGF0aE9yVVJMKTsKKyAgICAgICAgbWVyZ2UoZmVh
dHVyZXMsIHRlc3RPcHRpb25zRmVhdHVyZXMpOwogICAgIH0KIAogICAgIHJldHVybiBmZWF0dXJl
czsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RPcHRpb25zLmgJKHJldmlzaW9uIDI2ODEz
MikKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMjUsNyArMjUsNiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPG9wdGlvbmFs
PgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgogI2luY2x1ZGUg
PHZlY3Rvcj4KQEAgLTQ2LDYgKzQ1LDcgQEAgc3RydWN0IFRlc3RGZWF0dXJlcyB7CiB2b2lkIG1l
cmdlKFRlc3RGZWF0dXJlcyYgYmFzZSwgVGVzdEZlYXR1cmVzIGFkZGl0aW9uYWwpOwogCiBUZXN0
RmVhdHVyZXMgaGFyZGNvZGVkRmVhdHVyZXNCYXNlZE9uUGF0aEZvclRlc3QoY29uc3QgVGVzdENv
bW1hbmQmKTsKK1Rlc3RGZWF0dXJlcyBmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdE9wdGlvbnNGaWxl
c0ZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKTsKIFRlc3RGZWF0dXJlcyBmZWF0dXJlRGVmYXVs
dHNGcm9tVGVzdEhlYWRlckZvclRlc3QoY29uc3QgVGVzdENvbW1hbmQmKTsKIAogc3RydWN0IENv
bnRleHRPcHRpb25zIHsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2ODEzMikKKysrIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDIwLTEwLTA3ICBT
YW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbVGVzdGluZ10gQWRkIHN1
cHBvcnQgZm9yIHBlci1kaXJlY3Rvcnkgb3ZlcnJpZGluZyBvZiB0ZXN0aW5nIG9wdGlvbnMgdmlh
IG5ldyBUZXN0T3B0aW9ucy50eHQgZmlsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxNzI5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZHMgZGlyZWN0b3J5IGJhc2VkIFRlc3RPcHRpb25zLnR4dCBm
aWxlcyB0byByZXBsYWNlIGhhcmQgY29kaW5nIGluIFdlYktpdFRlc3RSdW5uZXIKKyAgICAgICAg
Zm9yIG9wdGlvbnMgb3ZlcnJpZGluZy4KKworICAgICAgICAqIGZhc3Qvdmlld3BvcnQvVGVzdE9w
dGlvbnMudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnJ0Yy9UZXN0T3B0aW9u
cy50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvd3B0L2JlYWNvbi9UZXN0T3B0aW9ucy50eHQ6
IEFkZGVkLgorICAgICAgICAqIGh0dHAvd3B0L2ZldGNoL1Rlc3RPcHRpb25zLnR4dDogQWRkZWQu
CisgICAgICAgICogaHR0cC93cHQvc2VydmljZS13b3JrZXJzL1Rlc3RPcHRpb25zLnR4dDogQWRk
ZWQuCisgICAgICAgICogaHR0cC93cHQvd2VicnRjL1Rlc3RPcHRpb25zLnR4dDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vaXBhZC9mYXN0L3ZpZXdwb3J0L1Rlc3RPcHRpb25zLnR4dDogQWRk
ZWQuCisgICAgICAgICogc3ZnL1czQy1TVkctMS4xLVNFL1Rlc3RPcHRpb25zLnR4dDogQWRkZWQu
CisgICAgICAgICogc3ZnL1czQy1TVkctMS4xL1Rlc3RPcHRpb25zLnR4dDogQWRkZWQuCisKIDIw
MjAtMTAtMDcgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIEFk
ZCBzdXBwb3J0IGZvciBNZWRpYVJlY29yZGVyIHBhdXNlL3Jlc3VtZQpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC92aWV3cG9ydC9UZXN0T3B0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC92aWV3cG9ydC9UZXN0T3B0aW9ucy50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0
VGVzdHMvZmFzdC92aWV3cG9ydC9UZXN0T3B0aW9ucy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSBAQAord2Via2l0LXRlc3QtcnVubmVyIFsgdXNlRmxleGlibGVWaWV3cG9ydD10cnVlIF0K
SW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvd2VicnRjL1Rlc3RPcHRpb25zLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnJ0Yy9UZXN0T3B0aW9ucy50eHQJ
KG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJydGMvVGVzdE9wdGlv
bnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtpdC10ZXN0LXJ1bm5lciBb
IGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycj10cnVlIF0KSW5kZXg6IExheW91dFRlc3RzL2h0dHAv
d3B0L2JlYWNvbi9UZXN0T3B0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0
cC93cHQvYmVhY29uL1Rlc3RPcHRpb25zLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0
cy9odHRwL3dwdC9iZWFjb24vVGVzdE9wdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEgQEAKK3dlYmtpdC10ZXN0LXJ1bm5lciBbIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycj10cnVl
IF0KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvd3B0L2ZldGNoL1Rlc3RPcHRpb25zLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3dwdC9mZXRjaC9UZXN0T3B0aW9ucy50eHQJKG5v
bmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC93cHQvZmV0Y2gvVGVzdE9wdGlvbnMudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtpdC10ZXN0LXJ1bm5lciBbIGR1bXBK
U0NvbnNvbGVMb2dJblN0ZEVycj10cnVlIF0KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvd3B0L3Nl
cnZpY2Utd29ya2Vycy9UZXN0T3B0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
aHR0cC93cHQvc2VydmljZS13b3JrZXJzL1Rlc3RPcHRpb25zLnR4dAkobm9uZXhpc3RlbnQpCisr
KyBMYXlvdXRUZXN0cy9odHRwL3dwdC9zZXJ2aWNlLXdvcmtlcnMvVGVzdE9wdGlvbnMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtpdC10ZXN0LXJ1bm5lciBbIGR1bXBKU0Nv
bnNvbGVMb2dJblN0ZEVycj10cnVlIF0KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvd3B0L3dlYnJ0
Yy9UZXN0T3B0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC93cHQvd2Vi
cnRjL1Rlc3RPcHRpb25zLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9odHRwL3dw
dC93ZWJydGMvVGVzdE9wdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dl
YmtpdC10ZXN0LXJ1bm5lciBbIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycj10cnVlIF0KSW5kZXg6
IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwkocmV2aXNpb24gMjY4MTMyKQorKysgTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0
IEBACisyMDIwLTEwLTA3ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAg
ICBbVGVzdGluZ10gQWRkIHN1cHBvcnQgZm9yIHBlci1kaXJlY3Rvcnkgb3ZlcnJpZGluZyBvZiB0
ZXN0aW5nIG9wdGlvbnMgdmlhIG5ldyBUZXN0T3B0aW9ucy50eHQgZmlsZXMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzI5NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgZGlyZWN0b3J5IGJhc2Vk
IFRlc3RPcHRpb25zLnR4dCBmaWxlcyB0byByZXBsYWNlIGhhcmQgY29kaW5nIGluIFdlYktpdFRl
c3RSdW5uZXIKKyAgICAgICAgZm9yIG9wdGlvbnMgb3ZlcnJpZGluZy4KKworICAgICAgICAqIElu
ZGV4ZWREQi1wcml2YXRlLWJyb3dzaW5nL1Rlc3RPcHRpb25zLnR4dDogQWRkZWQuCisgICAgICAg
ICogd2ViLXBsYXRmb3JtLXRlc3RzL2JlYWNvbi9UZXN0T3B0aW9ucy50eHQ6IEFkZGVkLgorICAg
ICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9jb3JzL1Rlc3RPcHRpb25zLnR4dDogQWRkZWQuCisg
ICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL2ZldGNoL1Rlc3RPcHRpb25zLnR4dDogQWRkZWQu
CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3NlcnZpY2Utd29ya2Vycy9UZXN0T3B0aW9u
cy50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9zdHJlYW1zL3BpcGlu
Zy9UZXN0T3B0aW9ucy50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9z
dHJlYW1zL3dyaXRhYmxlLXN0cmVhbXMvVGVzdE9wdGlvbnMudHh0OiBBZGRlZC4KKyAgICAgICAg
KiB3ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1Rlc3RPcHRpb25zLnR4dDogQWRkZWQuCisgICAg
ICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnNvY2tldHMvVGVzdE9wdGlvbnMudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMveGhyL1Rlc3RPcHRpb25zLnR4dDogQWRk
ZWQuCisKIDIwMjAtMTAtMDcgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAg
ICAgICAgIEFkZCBzdXBwb3J0IGZvciBNZWRpYVJlY29yZGVyIHBhdXNlL3Jlc3VtZQpJbmRleDog
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0luZGV4ZWREQi1wcml2YXRlLWJyb3dzaW5nL1Rlc3RP
cHRpb25zLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvSW5kZXhl
ZERCLXByaXZhdGUtYnJvd3NpbmcvVGVzdE9wdGlvbnMudHh0CShub25leGlzdGVudCkKKysrIExh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy9JbmRleGVkREItcHJpdmF0ZS1icm93c2luZy9UZXN0T3B0
aW9ucy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSBAQAord2Via2l0LXRlc3QtcnVubmVy
IFsgdXNlRXBoZW1lcmFsU2Vzc2lvbj10cnVlIF0KSW5kZXg6IExheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvYmVhY29uL1Rlc3RPcHRpb25zLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2JlYWNvbi9U
ZXN0T3B0aW9ucy50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9iZWFjb24vVGVzdE9wdGlvbnMudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEgQEAKK3dlYmtpdC10ZXN0LXJ1bm5lciBbIGR1bXBKU0NvbnNvbGVMb2dJblN0
ZEVycj10cnVlIF0KSW5kZXg6IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvY29ycy9UZXN0T3B0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jb3JzL1Rlc3RPcHRpb25zLnR4dAkobm9uZXhp
c3RlbnQpCisrKyBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nv
cnMvVGVzdE9wdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtpdC10
ZXN0LXJ1bm5lciBbIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycj10cnVlIF0KSW5kZXg6IExheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZmV0Y2gvVGVzdE9wdGlvbnMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvZmV0Y2gvVGVzdE9wdGlvbnMudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZmV0Y2gvVGVzdE9wdGlvbnMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtpdC10ZXN0LXJ1bm5lciBbIGR1bXBKU0Nv
bnNvbGVMb2dJblN0ZEVycj10cnVlIF0KSW5kZXg6IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvc2VydmljZS13b3JrZXJzL1Rlc3RPcHRpb25zLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3NlcnZp
Y2Utd29ya2Vycy9UZXN0T3B0aW9ucy50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9zZXJ2aWNlLXdvcmtlcnMvVGVzdE9wdGlv
bnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtpdC10ZXN0LXJ1bm5lciBb
IGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycj10cnVlIF0KSW5kZXg6IExheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvc3RyZWFtcy9waXBpbmcvVGVzdE9wdGlvbnMudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvc3RyZWFtcy9waXBpbmcvVGVzdE9wdGlvbnMudHh0CShub25leGlzdGVudCkKKysrIExheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvc3RyZWFtcy9waXBpbmcvVGVz
dE9wdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtpdC10ZXN0LXJ1
bm5lciBbIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycj10cnVlIF0KSW5kZXg6IExheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvc3RyZWFtcy93cml0YWJsZS1zdHJlYW1z
L1Rlc3RPcHRpb25zLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3N0cmVhbXMvd3JpdGFibGUtc3RyZWFtcy9UZXN0T3B0aW9ucy50
eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9zdHJlYW1zL3dyaXRhYmxlLXN0cmVhbXMvVGVzdE9wdGlvbnMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtpdC10ZXN0LXJ1bm5lciBbIGR1bXBKU0NvbnNvbGVM
b2dJblN0ZEVycj10cnVlIF0KSW5kZXg6IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvd2VicnRjL1Rlc3RPcHRpb25zLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9UZXN0T3B0aW9ucy50
eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy93ZWJydGMvVGVzdE9wdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEg
QEAKK3dlYmtpdC10ZXN0LXJ1bm5lciBbIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycj10cnVlIF0K
SW5kZXg6IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2Vic29j
a2V0cy9UZXN0T3B0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJzb2NrZXRzL1Rlc3RPcHRpb25zLnR4dAkobm9uZXhp
c3RlbnQpCisrKyBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dl
YnNvY2tldHMvVGVzdE9wdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dl
YmtpdC10ZXN0LXJ1bm5lciBbIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycj10cnVlIF0KSW5kZXg6
IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMveGhyL1Rlc3RPcHRp
b25zLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3hoci9UZXN0T3B0aW9ucy50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy94aHIvVGVzdE9wdGlvbnMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtpdC10ZXN0LXJ1bm5lciBbIGR1bXBKU0Nv
bnNvbGVMb2dJblN0ZEVycj10cnVlIF0KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2lwYWQv
ZmFzdC92aWV3cG9ydC9UZXN0T3B0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
cGxhdGZvcm0vaXBhZC9mYXN0L3ZpZXdwb3J0L1Rlc3RPcHRpb25zLnR4dAkobm9uZXhpc3RlbnQp
CisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9pcGFkL2Zhc3Qvdmlld3BvcnQvVGVzdE9wdGlvbnMu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtpdC10ZXN0LXJ1bm5lciBbIHVz
ZUZsZXhpYmxlVmlld3BvcnQ9dHJ1ZSBdCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvVzNDLVNWRy0x
LjEtU0UvVGVzdE9wdGlvbnMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9XM0Mt
U1ZHLTEuMS1TRS9UZXN0T3B0aW9ucy50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMv
c3ZnL1czQy1TVkctMS4xLVNFL1Rlc3RPcHRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxIEBACit3ZWJraXQtdGVzdC1ydW5uZXIgWyB2aWV3V2lkdGg9NDgwIHZpZXdIZWlnaHQ9MzYw
IF0KSW5kZXg6IExheW91dFRlc3RzL3N2Zy9XM0MtU1ZHLTEuMS9UZXN0T3B0aW9ucy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL1czQy1TVkctMS4xL1Rlc3RPcHRpb25zLnR4dAko
bm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9zdmcvVzNDLVNWRy0xLjEvVGVzdE9wdGlvbnMu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtpdC10ZXN0LXJ1bm5lciBbIHZp
ZXdXaWR0aD00ODAgdmlld0hlaWdodD0zNjAgXQo=
</data>
<flag name="commit-queue"
          id="426798"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410761</attachid>
            <date>2020-10-07 11:05:08 -0700</date>
            <delta_ts>2020-10-11 11:48:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217297-20201007110507.patch</filename>
            <type>text/plain</type>
            <size>18669</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODEzMikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ1IEBACisyMDIwLTEwLTA3ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBbVGVzdGluZ10gQWRkIHN1cHBvcnQgZm9yIHBlci1kaXJlY3Rvcnkgb3ZlcnJpZGlu
ZyBvZiB0ZXN0aW5nIG9wdGlvbnMgdmlhIG5ldyBUZXN0T3B0aW9ucy50eHQgZmlsZXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzI5NworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaW50cm9kdWNl
cyBhIG5ldyBjb25jZXB0IGZvciB3ZWJraXQgdGVzdHMgKHRob3NlIHdpdGhpbiB0aGUgTGF5b3V0
VGVzdHMgZGlyZWN0b3J5KQorICAgICAgICB0aGF0IGV4dGVuZHMgdGhlIGV4aXN0aW5nIHRlc3Qt
aGVhZGVyIGJhc2VkIGNvbmZpZ3VyYXRpb24gb2YgdGVzdCBvcHRpb25zICh0aG9zZSBjb21tZW50
cworICAgICAgICBhdCB0aGUgdG9wIG9mIHNvbWV0IHRlc3QgZmlsZXMgdGhhdCBsb29rIGxpa2Ug
IndlYmtpdC10ZXN0LXJ1bm5lciBbIC4uLiBdIikgdG8gYWxzbyBhbGxvdworICAgICAgICBkaXJl
Y3Rvcnkgd2lkZSBvdmVycmlkaW5nIG9mIHRlc3Qgb3B0aW9ucyB2aWEgYSBuZXcgVGVzdE9wdGlv
bnMudHh0IGZpbGUuIFRoZXNlIGZpbGVzIGFyZQorICAgICAgICBmb3Igbm93IGV4cGVjdGVkIHRv
IHVzZSB0aGUgc2FtZSAid2Via2l0LXRlc3QtcnVubmVyIFsgLi4uIF0iIHN5bnRheCBhcyB0aGUg
dGVzdC1oZWFkZXIgYmFzZWQKKyAgICAgICAgb25lcyBmb3IgY29uc2lzdGVuY3kgYW5kIHNpbXBs
aWNpdHkgb2YgaW1wbGVtZW50YXRpb24sIGJ1dCBpbiB0aGUgZnV0dXJlIHdlIG1heSBkZWNpZGUg
aXQKKyAgICAgICAgbWFrZXMgbW9yZSBzZW5zZSB0byB1dGlsaXplIHRoZSBhZGRpdGlvbmFsIHNw
YWNlLgorCisgICAgICAgIFRoaXMgZXh0ZW5kcyB0aGUgZmVhdHVyZSBvdmVycmlkZSBwcmVjZW5k
ZW5jZSBjYWxjdWxhdGlvbiB0bzoKKworICAgICAgICAtIEdsb2JhbCBmZWF0dXJlcyBwYXNzZWQg
dG8gV2ViS2l0VGVzdFJ1bm5lciB2aWEgdGhlIGNvbW1hbmQgbGluZSAoZS5nLiAtLXNob3ctdG91
Y2hlcykKKyAgICAgICAgLSBIYXJkY29kZWQgZmVhdHVyZXMgYmFzZWQgb24gdGhlIHBhdGggb2Yg
dGhlIHRlc3QgYmVpbmcgcnVuIChob3BlZnVsbHkgd2UgY2FuIHJlbW92ZSBhbGwgc29vbikKKyAg
ICAgICAgLSBIYXJkY29kZWQgcGxhdGZvcm0gc3BlY2lmaWMgZGVmYXVsdHMgKGN1cnJlbnRseSBv
bmx5IHVzZWQgYnkgbWFjT1MgZm9yIHVzZVRocmVhZGVkU2Nyb2xsaW5nKS4KKyAgICAgICAgLSBG
ZWF0dXJlcyBmcm9tIFRlc3RPcHRpb25zLnR4dCBmaWxlcywgd2l0aCB0aGUgbW9zdCBkaXJlY3Rv
cmllcyBjbG9zZXIgdG8gLi9MYXlvdXRUZXN0cyB0YWtlaW5nCisgICAgICAgICAgbGVzcyBwcmVj
ZWRlbmNlIHRoYW4gdGhvc2UgY2xvc2VyIHRvIHRoZSB0ZXN0IGZpbGUgKGUuZy4gYW4gb3B0aW9u
IGluIAorICAgICAgICAgIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvVGVzdE9wdGlvbnMudHh0IHdp
bGwgd2luIG92ZXIgb25lIGluIExheW91dFRlc3RzL2Zhc3QvVGVzdE9wdGlvbnMudHh0KS4KKyAg
ICAgICAgLSBGZWF0dXJlcyBmcm9tIHRoZSB0ZXN0IGhlYWRlcnMgd2l0aGluIHRoZSB0ZXN0IGl0
c2VsZi4KKyAgICAgICAgLSBGaW5hbGx5LCBhIHNlY29uZCBjaGFuY2UgZm9yIG1vcmUgcGxhdGZv
cm0gc3BlY2lmaWMgZGVmYXVsdHMgKGN1cnJlbmx5IG9ubHkgdXNlZCB0aGUgY29jb2EgcG9ydHMK
KyAgICAgICAgICBmb3Igc2V0dGluZyBlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbiBhbmQg
ZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW4gYmFzZWQgb24gTlNVc2VyRGVmYXVsdHMuKQor
CisgICAgICAgIEhvcGVmdWxseSBpbiB0aGUgZnV0dXJlLCB3ZSB3aWxsIGJlIGFibGUgdG8gc2lt
cGxpZnkgdGhhdCBhcyB3ZSByZW1vdmUgc29tZSBvZiB0aGVzZSBsZXZlbHMuCisKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVz
dENvbnRyb2xsZXI6OnRlc3RPcHRpb25zRm9yVGVzdCBjb25zdCk6CisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5jcHA6CisgICAgICAgIChXVFI6OnBhdGhDb250YWlucyk6
CisgICAgICAgIChXVFI6Om92ZXJyaWRlRGV2aWNlU2NhbGVGYWN0b3JGb3JUZXN0KToKKyAgICAg
ICAgKFdUUjo6aGFyZGNvZGVkRmVhdHVyZXNCYXNlZE9uUGF0aEZvclRlc3QpOgorICAgICAgICAo
V1RSOjpmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdE9wdGlvbnNGaWxlc0ZvclRlc3QpOgorICAgICAg
ICAoV1RSOjpzaG91bGRNYWtlVmlld3BvcnRGbGV4aWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChX
VFI6OnNob3VsZFVzZUVwaGVtZXJhbFNlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpv
dmVycmlkZVZpZXdXaWR0aEFuZEhlaWdodEZvclRlc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RS
OjpzaG91bGREdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIpOiBEZWxldGVkLgorICAgICAgICAqIFdl
YktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuaDoKKwogMjAyMC0xMC0wNyAgQWFrYXNoIEphaW4g
IDxhYWthc2hfamFpbkBhcHBsZS5jb20+CiAKICAgICAgICAgW2J1aWxkLndlYmtpdC5vcmddIEVu
c3VyZSB0aGF0IGludmFsaWQgc3RlcCBuYW1lcyBhcmUgbm90IGFsbG93ZWQKSW5kZXg6IFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyNjgxMzIpCisr
KyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTM2MCw2ICsxMzYwLDcgQEAgVGVzdE9wdGlvbnMgVGVzdENvbnRyb2xsZXI6OnRlc3RP
cHRpb25zRgogICAgIFRlc3RGZWF0dXJlcyBmZWF0dXJlcyA9IG1fZ2xvYmFsRmVhdHVyZXM7CiAg
ICAgbWVyZ2UoZmVhdHVyZXMsIGhhcmRjb2RlZEZlYXR1cmVzQmFzZWRPblBhdGhGb3JUZXN0KGNv
bW1hbmQpKTsKICAgICBtZXJnZShmZWF0dXJlcywgcGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZh
dWx0c0ZvclRlc3QoY29tbWFuZCkpOworICAgIG1lcmdlKGZlYXR1cmVzLCBmZWF0dXJlRGVmYXVs
dHNGcm9tVGVzdE9wdGlvbnNGaWxlc0ZvclRlc3QoY29tbWFuZCkpOwogICAgIG1lcmdlKGZlYXR1
cmVzLCBmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3QoY29tbWFuZCkpOwogICAg
IG1lcmdlKGZlYXR1cmVzLCBwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZU92ZXJyaWRlc0RlZmF1bHRz
Rm9yVGVzdChjb21tYW5kKSk7CiAKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdE9w
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlv
bnMuY3BwCShyZXZpc2lvbiAyNjgxMzIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RP
cHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDkgQEAKICNpbmNsdWRlICJU
ZXN0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgPGZzdHJlYW0+CiAjaW5jbHVkZSA8aW9zdHJlYW0+
CisjaW5jbHVkZSA8b3B0aW9uYWw+CiAjaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRGaWxlc3lzdGVtLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKICNkZWZpbmUgRFVNUF9GRUFUVVJFUyAwCiAKQEAgLTI4Miw2
NCArMjgxLDQ2IEBAIHN0YXRpYyBUZXN0RmVhdHVyZXMgcGFyc2VUZXN0SGVhZGVyKHN0ZDoKIAog
c3RhdGljIGJvb2wgcGF0aENvbnRhaW5zKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwsIGNv
bnN0IGNoYXIqIHN1YnN0cmluZykKIHsKLSAgICBTdHJpbmcgcGF0aChwYXRoT3JVUkwuY19zdHIo
KSk7Ci0gICAgcmV0dXJuIHBhdGguY29udGFpbnMoc3Vic3RyaW5nKTsgLy8gQ2FzZS1pbnNlbnNp
dGl2ZS4KKyAgICByZXR1cm4gcGF0aE9yVVJMLmZpbmQoc3Vic3RyaW5nKSAhPSBzdGQ6OnN0cmlu
Zzo6bnBvczsKIH0KIAotc3RhdGljIGJvb2wgc2hvdWxkTWFrZVZpZXdwb3J0RmxleGlibGUoY29u
c3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKLXsKLSAgICByZXR1cm4gcGF0aENvbnRhaW5zKHBh
dGhPclVSTCwgInZpZXdwb3J0LyIpICYmICFwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAidmlzdWFs
LXZpZXdwb3J0LyIpOwotfQotCi1zdGF0aWMgYm9vbCBzaG91bGRVc2VFcGhlbWVyYWxTZXNzaW9u
KGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCi17Ci0gICAgcmV0dXJuIHBhdGhDb250YWlu
cyhwYXRoT3JVUkwsICJ3M2MvSW5kZXhlZERCLXByaXZhdGUtYnJvd3NpbmciKSB8fCBwYXRoQ29u
dGFpbnMocGF0aE9yVVJMLCAidzNjXFxJbmRleGVkREItcHJpdmF0ZS1icm93c2luZyIpOwotfQot
Ci1zdGF0aWMgT3B0aW9uYWw8c3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPj4gb3ZlcnJpZGVWaWV3
V2lkdGhBbmRIZWlnaHRGb3JUZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCi17Ci0g
ICAgaWYgKHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJzdmcvVzNDLVNWRy0xLjEiKSB8fCBwYXRo
Q29udGFpbnMocGF0aE9yVVJMLCAic3ZnXFxXM0MtU1ZHLTEuMSIpKQotICAgICAgICByZXR1cm4g
eyB7IDQ4MCwgMzYwIH0gfTsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1zdGF0aWMg
T3B0aW9uYWw8ZG91YmxlPiBvdmVycmlkZURldmljZVNjYWxlRmFjdG9yRm9yVGVzdChjb25zdCBz
dGQ6OnN0cmluZyYgcGF0aE9yVVJMKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBvdmVy
cmlkZURldmljZVNjYWxlRmFjdG9yRm9yVGVzdChjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJM
KQogewogICAgIGlmIChwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAiL2hpZHBpLTN4LSIpKQogICAg
ICAgICByZXR1cm4gMzsKICAgICBpZiAocGF0aENvbnRhaW5zKHBhdGhPclVSTCwgIi9oaWRwaS0i
KSkKICAgICAgICAgcmV0dXJuIDI7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotc3Rh
dGljIGJvb2wgc2hvdWxkRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKGNvbnN0IHN0ZDo6c3RyaW5n
JiBwYXRoT3JVUkwpCi17Ci0gICAgcmV0dXJuIHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2Nh
bGhvc3Q6ODgwMC9iZWFjb24iKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0
Ojk0NDMvYmVhY29uIikKLSAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2Fs
aG9zdDo4ODAwL2NvcnMiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0
NDMvY29ycyIpCi0gICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6
ODgwMC9mZXRjaCIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My9m
ZXRjaCIpCi0gICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgw
MC9zZXJ2aWNlLXdvcmtlcnMiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0
Ojk0NDMvc2VydmljZS13b3JrZXJzIikKLSAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVS
TCwgImxvY2FsaG9zdDo4ODAwL3N0cmVhbXMvd3JpdGFibGUtc3RyZWFtcyIpIHx8IHBhdGhDb250
YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My9zdHJlYW1zL3dyaXRhYmxlLXN0cmVhbXMi
KQotICAgICAgICB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvc3Ry
ZWFtcy9waXBpbmciKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMv
c3RyZWFtcy9waXBpbmciKQotICAgICAgICB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9j
YWxob3N0Ojg4MDAveGhyIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5
NDQzL3hociIpCi0gICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6
ODgwMC93ZWJydGMiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMv
d2VicnRjIikKLSAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo4
ODAwL3dlYnNvY2tldHMiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0
NDMvd2Vic29ja2V0cyIpOworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiB9CiAKIFRlc3RGZWF0
dXJlcyBoYXJkY29kZWRGZWF0dXJlc0Jhc2VkT25QYXRoRm9yVGVzdChjb25zdCBUZXN0Q29tbWFu
ZCYgY29tbWFuZCkKIHsKICAgICBUZXN0RmVhdHVyZXMgZmVhdHVyZXM7CiAKLSAgICBpZiAoc2hv
dWxkTWFrZVZpZXdwb3J0RmxleGlibGUoY29tbWFuZC5wYXRoT3JVUkwpKQotICAgICAgICBmZWF0
dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgInVzZUZsZXhpYmxlVmlld3BvcnQiLCB0cnVlIH0p
OwotICAgIGlmIChzaG91bGRVc2VFcGhlbWVyYWxTZXNzaW9uKGNvbW1hbmQucGF0aE9yVVJMKSkK
LSAgICAgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJ1c2VFcGhlbWVyYWxTZXNz
aW9uIiwgdHJ1ZSB9KTsKLSAgICBpZiAoc2hvdWxkRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKGNv
bW1hbmQucGF0aE9yVVJMKSkKLSAgICAgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7
ICJkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiLCB0cnVlIH0pOwotICAgIGlmIChhdXRvIGRldmlj
ZVNjYWxlRmFjdG9yID0gb3ZlcnJpZGVEZXZpY2VTY2FsZUZhY3RvckZvclRlc3QoY29tbWFuZC5w
YXRoT3JVUkwpOyBkZXZpY2VTY2FsZUZhY3RvciAhPSBXVEY6Om51bGxvcHQpCisgICAgaWYgKGF1
dG8gZGV2aWNlU2NhbGVGYWN0b3IgPSBvdmVycmlkZURldmljZVNjYWxlRmFjdG9yRm9yVGVzdChj
b21tYW5kLnBhdGhPclVSTCk7IGRldmljZVNjYWxlRmFjdG9yICE9IHN0ZDo6bnVsbG9wdCkKICAg
ICAgICAgZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMuaW5zZXJ0KHsgImRldmljZVNjYWxlRmFjdG9y
IiwgZGV2aWNlU2NhbGVGYWN0b3IudmFsdWUoKSB9KTsKLSAgICBpZiAoYXV0byB2aWV3V2lkdGhB
bmRIZWlnaHQgPSBvdmVycmlkZVZpZXdXaWR0aEFuZEhlaWdodEZvclRlc3QoY29tbWFuZC5wYXRo
T3JVUkwpOyB2aWV3V2lkdGhBbmRIZWlnaHQgIT0gV1RGOjpudWxsb3B0KSB7Ci0gICAgICAgIGZl
YXR1cmVzLmRvdWJsZUZlYXR1cmVzLmluc2VydCh7ICJ2aWV3V2lkdGgiLCB2aWV3V2lkdGhBbmRI
ZWlnaHQtPmZpcnN0IH0pOwotICAgICAgICBmZWF0dXJlcy5kb3VibGVGZWF0dXJlcy5pbnNlcnQo
eyAidmlld0hlaWdodCIsIHZpZXdXaWR0aEFuZEhlaWdodC0+c2Vjb25kIH0pOworCisgICAgcmV0
dXJuIGZlYXR1cmVzOworfQorCitUZXN0RmVhdHVyZXMgZmVhdHVyZURlZmF1bHRzRnJvbVRlc3RP
cHRpb25zRmlsZXNGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJiBjb21tYW5kKQoreworICAgIHN0
ZDo6ZmlsZXN5c3RlbTo6cGF0aCBwYXRoID0gY29tbWFuZC5hYnNvbHV0ZVBhdGg7CisKKyAgICAv
LyBHYXRoZXIgZGlyZWN0b3JpZXMgdGhhdCBtYXkgY29udGFpbiBUZXN0SGVhZGVycyBmaWxlcy4K
KyAgICBzdGQ6OnZlY3RvcjxzdGQ6OmZpbGVzeXN0ZW06OnBhdGg+IGRpcmVjdG9yaWVzVG9DaGVj
azsKKyAgICBkbyB7CisgICAgICAgIHBhdGggPSBwYXRoLnBhcmVudF9wYXRoKCk7CisgICAgICAg
IGRpcmVjdG9yaWVzVG9DaGVjay5wdXNoX2JhY2socGF0aCk7CisgICAgfSB3aGlsZSAocGF0aC5m
aWxlbmFtZSgpICE9ICJMYXlvdXRUZXN0cyIpOworCisgICAgLy8gSXRlcmF0ZSB0aGUgZGlyZWN0
b3JpZXMgdGhhdCBtYXkgY29udGFpbiAnVGVzdE9wdGlvbnMudHh0JyBmaWxlcyBmcm9tIGxlYXN0
IHRvIG1vc3QKKyAgICAvLyBzcGVjaWZpYywgYW5kIG1lcmdlIGluIGFueSBmZWF0dXJlcyBmb3Vu
ZC4KKyAgICBUZXN0RmVhdHVyZXMgZmVhdHVyZXM7CisgICAgZm9yIChhdXRvIGRpcmVjdG9yeVRv
Q2hlY2sgOiBXVEY6Om1ha2VSZXZlcnNlZFJhbmdlKGRpcmVjdG9yaWVzVG9DaGVjaykpIHsKKyAg
ICAgICAgYXV0byB0ZXN0SGVhZGVyRmlsZSA9IGRpcmVjdG9yeVRvQ2hlY2sgLyAiVGVzdE9wdGlv
bnMudHh0IjsKKyAgICAgICAgYXV0byB0ZXN0T3B0aW9uc0ZlYXR1cmVzID0gcGFyc2VUZXN0SGVh
ZGVyKHRlc3RIZWFkZXJGaWxlLCBjb21tYW5kLnBhdGhPclVSTCk7CisgICAgICAgIG1lcmdlKGZl
YXR1cmVzLCB0ZXN0T3B0aW9uc0ZlYXR1cmVzKTsKICAgICB9CiAKICAgICByZXR1cm4gZmVhdHVy
ZXM7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RPcHRpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5oCShyZXZpc2lvbiAyNjgx
MzIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RPcHRpb25zLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI1LDcgKzI1LDYgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDxvcHRpb25h
bD4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KICNpbmNsdWRl
IDx2ZWN0b3I+CkBAIC00Niw2ICs0NSw3IEBAIHN0cnVjdCBUZXN0RmVhdHVyZXMgewogdm9pZCBt
ZXJnZShUZXN0RmVhdHVyZXMmIGJhc2UsIFRlc3RGZWF0dXJlcyBhZGRpdGlvbmFsKTsKIAogVGVz
dEZlYXR1cmVzIGhhcmRjb2RlZEZlYXR1cmVzQmFzZWRPblBhdGhGb3JUZXN0KGNvbnN0IFRlc3RD
b21tYW5kJik7CitUZXN0RmVhdHVyZXMgZmVhdHVyZURlZmF1bHRzRnJvbVRlc3RPcHRpb25zRmls
ZXNGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJik7CiBUZXN0RmVhdHVyZXMgZmVhdHVyZURlZmF1
bHRzRnJvbVRlc3RIZWFkZXJGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJik7CiAKIHN0cnVjdCBD
b250ZXh0T3B0aW9ucyB7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjgxMzIpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAyMC0xMC0wNyAg
U2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgW1Rlc3RpbmddIEFkZCBz
dXBwb3J0IGZvciBwZXItZGlyZWN0b3J5IG92ZXJyaWRpbmcgb2YgdGVzdGluZyBvcHRpb25zIHZp
YSBuZXcgVGVzdE9wdGlvbnMudHh0IGZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcyOTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGRzIGRpcmVjdG9yeSBiYXNlZCBUZXN0T3B0aW9ucy50eHQg
ZmlsZXMgdG8gcmVwbGFjZSBoYXJkIGNvZGluZyBpbiBXZWJLaXRUZXN0UnVubmVyCisgICAgICAg
IGZvciBvcHRpb25zIG92ZXJyaWRpbmcuCisKKyAgICAgICAgKiBmYXN0L3ZpZXdwb3J0L1Rlc3RP
cHRpb25zLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy93ZWJydGMvVGVzdE9wdGlv
bnMudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3dwdC9iZWFjb24vVGVzdE9wdGlvbnMudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3dwdC9mZXRjaC9UZXN0T3B0aW9ucy50eHQ6IEFkZGVk
LgorICAgICAgICAqIGh0dHAvd3B0L3NlcnZpY2Utd29ya2Vycy9UZXN0T3B0aW9ucy50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGh0dHAvd3B0L3dlYnJ0Yy9UZXN0T3B0aW9ucy50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2lwYWQvZmFzdC92aWV3cG9ydC9UZXN0T3B0aW9ucy50eHQ6IEFk
ZGVkLgorICAgICAgICAqIHN2Zy9XM0MtU1ZHLTEuMS1TRS9UZXN0T3B0aW9ucy50eHQ6IEFkZGVk
LgorICAgICAgICAqIHN2Zy9XM0MtU1ZHLTEuMS9UZXN0T3B0aW9ucy50eHQ6IEFkZGVkLgorCiAy
MDIwLTEwLTA3ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBB
ZGQgc3VwcG9ydCBmb3IgTWVkaWFSZWNvcmRlciBwYXVzZS9yZXN1bWUKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3Qvdmlld3BvcnQvVGVzdE9wdGlvbnMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3Qvdmlld3BvcnQvVGVzdE9wdGlvbnMudHh0CShub25leGlzdGVudCkKKysrIExheW91
dFRlc3RzL2Zhc3Qvdmlld3BvcnQvVGVzdE9wdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEgQEAKK3dlYmtpdC10ZXN0LXJ1bm5lciBbIHVzZUZsZXhpYmxlVmlld3BvcnQ9dHJ1ZSBd
CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnJ0Yy9UZXN0T3B0aW9ucy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJydGMvVGVzdE9wdGlvbnMudHh0
CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvd2VicnRjL1Rlc3RPcHRp
b25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3ZWJraXQtdGVzdC1ydW5uZXIg
WyBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnI9dHJ1ZSBdCkluZGV4OiBMYXlvdXRUZXN0cy9odHRw
L3dwdC9iZWFjb24vVGVzdE9wdGlvbnMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0
dHAvd3B0L2JlYWNvbi9UZXN0T3B0aW9ucy50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVz
dHMvaHR0cC93cHQvYmVhY29uL1Rlc3RPcHRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxIEBACit3ZWJraXQtdGVzdC1ydW5uZXIgWyBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnI9dHJ1
ZSBdCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3dwdC9mZXRjaC9UZXN0T3B0aW9ucy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC93cHQvZmV0Y2gvVGVzdE9wdGlvbnMudHh0CShu
b25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2h0dHAvd3B0L2ZldGNoL1Rlc3RPcHRpb25zLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3ZWJraXQtdGVzdC1ydW5uZXIgWyBkdW1w
SlNDb25zb2xlTG9nSW5TdGRFcnI9dHJ1ZSBdCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3dwdC9z
ZXJ2aWNlLXdvcmtlcnMvVGVzdE9wdGlvbnMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2h0dHAvd3B0L3NlcnZpY2Utd29ya2Vycy9UZXN0T3B0aW9ucy50eHQJKG5vbmV4aXN0ZW50KQor
KysgTGF5b3V0VGVzdHMvaHR0cC93cHQvc2VydmljZS13b3JrZXJzL1Rlc3RPcHRpb25zLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3ZWJraXQtdGVzdC1ydW5uZXIgWyBkdW1wSlND
b25zb2xlTG9nSW5TdGRFcnI9dHJ1ZSBdCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3dwdC93ZWJy
dGMvVGVzdE9wdGlvbnMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvd3B0L3dl
YnJ0Yy9UZXN0T3B0aW9ucy50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC93
cHQvd2VicnRjL1Rlc3RPcHRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3
ZWJraXQtdGVzdC1ydW5uZXIgWyBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnI9dHJ1ZSBdCkluZGV4
OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2ODEzMikKKysrIExheW91
dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
NCBAQAorMjAyMC0xMC0wNyAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAg
ICAgW1Rlc3RpbmddIEFkZCBzdXBwb3J0IGZvciBwZXItZGlyZWN0b3J5IG92ZXJyaWRpbmcgb2Yg
dGVzdGluZyBvcHRpb25zIHZpYSBuZXcgVGVzdE9wdGlvbnMudHh0IGZpbGVzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcyOTcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRzIGRpcmVjdG9yeSBiYXNl
ZCBUZXN0T3B0aW9ucy50eHQgZmlsZXMgdG8gcmVwbGFjZSBoYXJkIGNvZGluZyBpbiBXZWJLaXRU
ZXN0UnVubmVyCisgICAgICAgIGZvciBvcHRpb25zIG92ZXJyaWRpbmcuCisKKyAgICAgICAgKiBJ
bmRleGVkREItcHJpdmF0ZS1icm93c2luZy9UZXN0T3B0aW9ucy50eHQ6IEFkZGVkLgorICAgICAg
ICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9iZWFjb24vVGVzdE9wdGlvbnMudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvY29ycy9UZXN0T3B0aW9ucy50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9mZXRjaC9UZXN0T3B0aW9ucy50eHQ6IEFkZGVk
LgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9zZXJ2aWNlLXdvcmtlcnMvVGVzdE9wdGlv
bnMudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvc3RyZWFtcy9waXBp
bmcvVGVzdE9wdGlvbnMudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMv
c3RyZWFtcy93cml0YWJsZS1zdHJlYW1zL1Rlc3RPcHRpb25zLnR4dDogQWRkZWQuCisgICAgICAg
ICogd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9UZXN0T3B0aW9ucy50eHQ6IEFkZGVkLgorICAg
ICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy93ZWJzb2NrZXRzL1Rlc3RPcHRpb25zLnR4dDogQWRk
ZWQuCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3hoci9UZXN0T3B0aW9ucy50eHQ6IEFk
ZGVkLgorCiAyMDIwLTEwLTA3ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBBZGQgc3VwcG9ydCBmb3IgTWVkaWFSZWNvcmRlciBwYXVzZS9yZXN1bWUKSW5kZXg6
IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy9JbmRleGVkREItcHJpdmF0ZS1icm93c2luZy9UZXN0
T3B0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0luZGV4
ZWREQi1wcml2YXRlLWJyb3dzaW5nL1Rlc3RPcHRpb25zLnR4dAkobm9uZXhpc3RlbnQpCisrKyBM
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvSW5kZXhlZERCLXByaXZhdGUtYnJvd3NpbmcvVGVzdE9w
dGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtpdC10ZXN0LXJ1bm5l
ciBbIHVzZUVwaGVtZXJhbFNlc3Npb249dHJ1ZSBdCkluZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2JlYWNvbi9UZXN0T3B0aW9ucy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9iZWFjb24v
VGVzdE9wdGlvbnMudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2ltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvYmVhY29uL1Rlc3RPcHRpb25zLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxIEBACit3ZWJraXQtdGVzdC1ydW5uZXIgWyBkdW1wSlNDb25zb2xlTG9nSW5T
dGRFcnI9dHJ1ZSBdCkluZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL2NvcnMvVGVzdE9wdGlvbnMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY29ycy9UZXN0T3B0aW9ucy50eHQJKG5vbmV4
aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9j
b3JzL1Rlc3RPcHRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3ZWJraXQt
dGVzdC1ydW5uZXIgWyBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnI9dHJ1ZSBdCkluZGV4OiBMYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2ZldGNoL1Rlc3RPcHRpb25z
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL2ZldGNoL1Rlc3RPcHRpb25zLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2ZldGNoL1Rlc3RPcHRpb25zLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3ZWJraXQtdGVzdC1ydW5uZXIgWyBkdW1wSlND
b25zb2xlTG9nSW5TdGRFcnI9dHJ1ZSBdCkluZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3NlcnZpY2Utd29ya2Vycy9UZXN0T3B0aW9ucy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9zZXJ2
aWNlLXdvcmtlcnMvVGVzdE9wdGlvbnMudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvc2VydmljZS13b3JrZXJzL1Rlc3RPcHRp
b25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3ZWJraXQtdGVzdC1ydW5uZXIg
WyBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnI9dHJ1ZSBdCkluZGV4OiBMYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3N0cmVhbXMvcGlwaW5nL1Rlc3RPcHRpb25zLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3N0cmVhbXMvcGlwaW5nL1Rlc3RPcHRpb25zLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3N0cmVhbXMvcGlwaW5nL1Rl
c3RPcHRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3ZWJraXQtdGVzdC1y
dW5uZXIgWyBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnI9dHJ1ZSBdCkluZGV4OiBMYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3N0cmVhbXMvd3JpdGFibGUtc3RyZWFt
cy9UZXN0T3B0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9zdHJlYW1zL3dyaXRhYmxlLXN0cmVhbXMvVGVzdE9wdGlvbnMu
dHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvc3RyZWFtcy93cml0YWJsZS1zdHJlYW1zL1Rlc3RPcHRpb25zLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxIEBACit3ZWJraXQtdGVzdC1ydW5uZXIgWyBkdW1wSlNDb25zb2xl
TG9nSW5TdGRFcnI9dHJ1ZSBdCkluZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3dlYnJ0Yy9UZXN0T3B0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvVGVzdE9wdGlvbnMu
dHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvd2VicnRjL1Rlc3RPcHRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
IEBACit3ZWJraXQtdGVzdC1ydW5uZXIgWyBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnI9dHJ1ZSBd
CkluZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnNv
Y2tldHMvVGVzdE9wdGlvbnMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2Vic29ja2V0cy9UZXN0T3B0aW9ucy50eHQJKG5vbmV4
aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93
ZWJzb2NrZXRzL1Rlc3RPcHRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3
ZWJraXQtdGVzdC1ydW5uZXIgWyBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnI9dHJ1ZSBdCkluZGV4
OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3hoci9UZXN0T3B0
aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy94aHIvVGVzdE9wdGlvbnMudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMveGhyL1Rlc3RPcHRpb25zLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3ZWJraXQtdGVzdC1ydW5uZXIgWyBkdW1wSlND
b25zb2xlTG9nSW5TdGRFcnI9dHJ1ZSBdCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9pcGFk
L2Zhc3Qvdmlld3BvcnQvVGVzdE9wdGlvbnMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3BsYXRmb3JtL2lwYWQvZmFzdC92aWV3cG9ydC9UZXN0T3B0aW9ucy50eHQJKG5vbmV4aXN0ZW50
KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vaXBhZC9mYXN0L3ZpZXdwb3J0L1Rlc3RPcHRpb25z
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3ZWJraXQtdGVzdC1ydW5uZXIgWyB1
c2VGbGV4aWJsZVZpZXdwb3J0PXRydWUgXQpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL1czQy1TVkct
MS4xLVNFL1Rlc3RPcHRpb25zLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvVzND
LVNWRy0xLjEtU0UvVGVzdE9wdGlvbnMudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3Rz
L3N2Zy9XM0MtU1ZHLTEuMS1TRS9UZXN0T3B0aW9ucy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSBAQAord2Via2l0LXRlc3QtcnVubmVyIFsgdmlld1dpZHRoPTQ4MCB2aWV3SGVpZ2h0PTM2
MCBdCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvVzNDLVNWRy0xLjEvVGVzdE9wdGlvbnMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9XM0MtU1ZHLTEuMS9UZXN0T3B0aW9ucy50eHQJ
KG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvc3ZnL1czQy1TVkctMS4xL1Rlc3RPcHRpb25z
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3ZWJraXQtdGVzdC1ydW5uZXIgWyB2
aWV3V2lkdGg9NDgwIHZpZXdIZWlnaHQ9MzYwIF0K
</data>
<flag name="commit-queue"
          id="426809"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411058</attachid>
            <date>2020-10-11 11:48:00 -0700</date>
            <delta_ts>2020-10-11 11:48:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217297-20201007110507.patch</filename>
            <type>text/plain</type>
            <size>17177</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2ODEzMikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ1IEBACisyMDIwLTEwLTA3ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBbVGVzdGluZ10gQWRkIHN1cHBvcnQgZm9yIHBlci1kaXJlY3Rvcnkgb3ZlcnJpZGlu
ZyBvZiB0ZXN0aW5nIG9wdGlvbnMgdmlhIG5ldyBUZXN0T3B0aW9ucy50eHQgZmlsZXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzI5NworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaW50cm9kdWNl
cyBhIG5ldyBjb25jZXB0IGZvciB3ZWJraXQgdGVzdHMgKHRob3NlIHdpdGhpbiB0aGUgTGF5b3V0
VGVzdHMgZGlyZWN0b3J5KQorICAgICAgICB0aGF0IGV4dGVuZHMgdGhlIGV4aXN0aW5nIHRlc3Qt
aGVhZGVyIGJhc2VkIGNvbmZpZ3VyYXRpb24gb2YgdGVzdCBvcHRpb25zICh0aG9zZSBjb21tZW50
cworICAgICAgICBhdCB0aGUgdG9wIG9mIHNvbWV0IHRlc3QgZmlsZXMgdGhhdCBsb29rIGxpa2Ug
IndlYmtpdC10ZXN0LXJ1bm5lciBbIC4uLiBdIikgdG8gYWxzbyBhbGxvdworICAgICAgICBkaXJl
Y3Rvcnkgd2lkZSBvdmVycmlkaW5nIG9mIHRlc3Qgb3B0aW9ucyB2aWEgYSBuZXcgVGVzdE9wdGlv
bnMudHh0IGZpbGUuIFRoZXNlIGZpbGVzIGFyZQorICAgICAgICBmb3Igbm93IGV4cGVjdGVkIHRv
IHVzZSB0aGUgc2FtZSAid2Via2l0LXRlc3QtcnVubmVyIFsgLi4uIF0iIHN5bnRheCBhcyB0aGUg
dGVzdC1oZWFkZXIgYmFzZWQKKyAgICAgICAgb25lcyBmb3IgY29uc2lzdGVuY3kgYW5kIHNpbXBs
aWNpdHkgb2YgaW1wbGVtZW50YXRpb24sIGJ1dCBpbiB0aGUgZnV0dXJlIHdlIG1heSBkZWNpZGUg
aXQKKyAgICAgICAgbWFrZXMgbW9yZSBzZW5zZSB0byB1dGlsaXplIHRoZSBhZGRpdGlvbmFsIHNw
YWNlLgorCisgICAgICAgIFRoaXMgZXh0ZW5kcyB0aGUgZmVhdHVyZSBvdmVycmlkZSBwcmVjZW5k
ZW5jZSBjYWxjdWxhdGlvbiB0bzoKKworICAgICAgICAtIEdsb2JhbCBmZWF0dXJlcyBwYXNzZWQg
dG8gV2ViS2l0VGVzdFJ1bm5lciB2aWEgdGhlIGNvbW1hbmQgbGluZSAoZS5nLiAtLXNob3ctdG91
Y2hlcykKKyAgICAgICAgLSBIYXJkY29kZWQgZmVhdHVyZXMgYmFzZWQgb24gdGhlIHBhdGggb2Yg
dGhlIHRlc3QgYmVpbmcgcnVuIChob3BlZnVsbHkgd2UgY2FuIHJlbW92ZSBhbGwgc29vbikKKyAg
ICAgICAgLSBIYXJkY29kZWQgcGxhdGZvcm0gc3BlY2lmaWMgZGVmYXVsdHMgKGN1cnJlbnRseSBv
bmx5IHVzZWQgYnkgbWFjT1MgZm9yIHVzZVRocmVhZGVkU2Nyb2xsaW5nKS4KKyAgICAgICAgLSBG
ZWF0dXJlcyBmcm9tIFRlc3RPcHRpb25zLnR4dCBmaWxlcywgd2l0aCB0aGUgbW9zdCBkaXJlY3Rv
cmllcyBjbG9zZXIgdG8gLi9MYXlvdXRUZXN0cyB0YWtlaW5nCisgICAgICAgICAgbGVzcyBwcmVj
ZWRlbmNlIHRoYW4gdGhvc2UgY2xvc2VyIHRvIHRoZSB0ZXN0IGZpbGUgKGUuZy4gYW4gb3B0aW9u
IGluIAorICAgICAgICAgIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvVGVzdE9wdGlvbnMudHh0IHdp
bGwgd2luIG92ZXIgb25lIGluIExheW91dFRlc3RzL2Zhc3QvVGVzdE9wdGlvbnMudHh0KS4KKyAg
ICAgICAgLSBGZWF0dXJlcyBmcm9tIHRoZSB0ZXN0IGhlYWRlcnMgd2l0aGluIHRoZSB0ZXN0IGl0
c2VsZi4KKyAgICAgICAgLSBGaW5hbGx5LCBhIHNlY29uZCBjaGFuY2UgZm9yIG1vcmUgcGxhdGZv
cm0gc3BlY2lmaWMgZGVmYXVsdHMgKGN1cnJlbmx5IG9ubHkgdXNlZCB0aGUgY29jb2EgcG9ydHMK
KyAgICAgICAgICBmb3Igc2V0dGluZyBlbmFibGVQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbiBhbmQg
ZW5hYmxlUHJvY2Vzc1N3YXBPbldpbmRvd09wZW4gYmFzZWQgb24gTlNVc2VyRGVmYXVsdHMuKQor
CisgICAgICAgIEhvcGVmdWxseSBpbiB0aGUgZnV0dXJlLCB3ZSB3aWxsIGJlIGFibGUgdG8gc2lt
cGxpZnkgdGhhdCBhcyB3ZSByZW1vdmUgc29tZSBvZiB0aGVzZSBsZXZlbHMuCisKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVz
dENvbnRyb2xsZXI6OnRlc3RPcHRpb25zRm9yVGVzdCBjb25zdCk6CisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5jcHA6CisgICAgICAgIChXVFI6OnBhdGhDb250YWlucyk6
CisgICAgICAgIChXVFI6Om92ZXJyaWRlRGV2aWNlU2NhbGVGYWN0b3JGb3JUZXN0KToKKyAgICAg
ICAgKFdUUjo6aGFyZGNvZGVkRmVhdHVyZXNCYXNlZE9uUGF0aEZvclRlc3QpOgorICAgICAgICAo
V1RSOjpmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdE9wdGlvbnNGaWxlc0ZvclRlc3QpOgorICAgICAg
ICAoV1RSOjpzaG91bGRNYWtlVmlld3BvcnRGbGV4aWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChX
VFI6OnNob3VsZFVzZUVwaGVtZXJhbFNlc3Npb24pOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpv
dmVycmlkZVZpZXdXaWR0aEFuZEhlaWdodEZvclRlc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RS
OjpzaG91bGREdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIpOiBEZWxldGVkLgorICAgICAgICAqIFdl
YktpdFRlc3RSdW5uZXIvVGVzdE9wdGlvbnMuaDoKKwogMjAyMC0xMC0wNyAgQWFrYXNoIEphaW4g
IDxhYWthc2hfamFpbkBhcHBsZS5jb20+CiAKICAgICAgICAgW2J1aWxkLndlYmtpdC5vcmddIEVu
c3VyZSB0aGF0IGludmFsaWQgc3RlcCBuYW1lcyBhcmUgbm90IGFsbG93ZWQKSW5kZXg6IFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyNjgxMzIpCisr
KyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTM2MCw2ICsxMzYwLDcgQEAgVGVzdE9wdGlvbnMgVGVzdENvbnRyb2xsZXI6OnRlc3RP
cHRpb25zRgogICAgIFRlc3RGZWF0dXJlcyBmZWF0dXJlcyA9IG1fZ2xvYmFsRmVhdHVyZXM7CiAg
ICAgbWVyZ2UoZmVhdHVyZXMsIGhhcmRjb2RlZEZlYXR1cmVzQmFzZWRPblBhdGhGb3JUZXN0KGNv
bW1hbmQpKTsKICAgICBtZXJnZShmZWF0dXJlcywgcGxhdGZvcm1TcGVjaWZpY0ZlYXR1cmVEZWZh
dWx0c0ZvclRlc3QoY29tbWFuZCkpOworICAgIG1lcmdlKGZlYXR1cmVzLCBmZWF0dXJlRGVmYXVs
dHNGcm9tVGVzdE9wdGlvbnNGaWxlc0ZvclRlc3QoY29tbWFuZCkpOwogICAgIG1lcmdlKGZlYXR1
cmVzLCBmZWF0dXJlRGVmYXVsdHNGcm9tVGVzdEhlYWRlckZvclRlc3QoY29tbWFuZCkpOwogICAg
IG1lcmdlKGZlYXR1cmVzLCBwbGF0Zm9ybVNwZWNpZmljRmVhdHVyZU92ZXJyaWRlc0RlZmF1bHRz
Rm9yVGVzdChjb21tYW5kKSk7CiAKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdE9w
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdE9wdGlv
bnMuY3BwCShyZXZpc2lvbiAyNjgxMzIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RP
cHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDkgQEAKICNpbmNsdWRlICJU
ZXN0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgPGZzdHJlYW0+CiAjaW5jbHVkZSA8aW9zdHJlYW0+
CisjaW5jbHVkZSA8b3B0aW9uYWw+CiAjaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRGaWxlc3lzdGVtLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKICNkZWZpbmUgRFVNUF9GRUFUVVJFUyAwCiAKQEAgLTI4Miw2
NCArMjgxLDQ2IEBAIHN0YXRpYyBUZXN0RmVhdHVyZXMgcGFyc2VUZXN0SGVhZGVyKHN0ZDoKIAog
c3RhdGljIGJvb2wgcGF0aENvbnRhaW5zKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwsIGNv
bnN0IGNoYXIqIHN1YnN0cmluZykKIHsKLSAgICBTdHJpbmcgcGF0aChwYXRoT3JVUkwuY19zdHIo
KSk7Ci0gICAgcmV0dXJuIHBhdGguY29udGFpbnMoc3Vic3RyaW5nKTsgLy8gQ2FzZS1pbnNlbnNp
dGl2ZS4KKyAgICByZXR1cm4gcGF0aE9yVVJMLmZpbmQoc3Vic3RyaW5nKSAhPSBzdGQ6OnN0cmlu
Zzo6bnBvczsKIH0KIAotc3RhdGljIGJvb2wgc2hvdWxkTWFrZVZpZXdwb3J0RmxleGlibGUoY29u
c3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCkKLXsKLSAgICByZXR1cm4gcGF0aENvbnRhaW5zKHBh
dGhPclVSTCwgInZpZXdwb3J0LyIpICYmICFwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAidmlzdWFs
LXZpZXdwb3J0LyIpOwotfQotCi1zdGF0aWMgYm9vbCBzaG91bGRVc2VFcGhlbWVyYWxTZXNzaW9u
KGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCi17Ci0gICAgcmV0dXJuIHBhdGhDb250YWlu
cyhwYXRoT3JVUkwsICJ3M2MvSW5kZXhlZERCLXByaXZhdGUtYnJvd3NpbmciKSB8fCBwYXRoQ29u
dGFpbnMocGF0aE9yVVJMLCAidzNjXFxJbmRleGVkREItcHJpdmF0ZS1icm93c2luZyIpOwotfQot
Ci1zdGF0aWMgT3B0aW9uYWw8c3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPj4gb3ZlcnJpZGVWaWV3
V2lkdGhBbmRIZWlnaHRGb3JUZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwpCi17Ci0g
ICAgaWYgKHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJzdmcvVzNDLVNWRy0xLjEiKSB8fCBwYXRo
Q29udGFpbnMocGF0aE9yVVJMLCAic3ZnXFxXM0MtU1ZHLTEuMSIpKQotICAgICAgICByZXR1cm4g
eyB7IDQ4MCwgMzYwIH0gfTsKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi1zdGF0aWMg
T3B0aW9uYWw8ZG91YmxlPiBvdmVycmlkZURldmljZVNjYWxlRmFjdG9yRm9yVGVzdChjb25zdCBz
dGQ6OnN0cmluZyYgcGF0aE9yVVJMKQorc3RhdGljIHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiBvdmVy
cmlkZURldmljZVNjYWxlRmFjdG9yRm9yVGVzdChjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJM
KQogewogICAgIGlmIChwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAiL2hpZHBpLTN4LSIpKQogICAg
ICAgICByZXR1cm4gMzsKICAgICBpZiAocGF0aENvbnRhaW5zKHBhdGhPclVSTCwgIi9oaWRwaS0i
KSkKICAgICAgICAgcmV0dXJuIDI7Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotc3Rh
dGljIGJvb2wgc2hvdWxkRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKGNvbnN0IHN0ZDo6c3RyaW5n
JiBwYXRoT3JVUkwpCi17Ci0gICAgcmV0dXJuIHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2Nh
bGhvc3Q6ODgwMC9iZWFjb24iKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0
Ojk0NDMvYmVhY29uIikKLSAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2Fs
aG9zdDo4ODAwL2NvcnMiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0
NDMvY29ycyIpCi0gICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6
ODgwMC9mZXRjaCIpIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My9m
ZXRjaCIpCi0gICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6ODgw
MC9zZXJ2aWNlLXdvcmtlcnMiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0
Ojk0NDMvc2VydmljZS13b3JrZXJzIikKLSAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVS
TCwgImxvY2FsaG9zdDo4ODAwL3N0cmVhbXMvd3JpdGFibGUtc3RyZWFtcyIpIHx8IHBhdGhDb250
YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6OTQ0My9zdHJlYW1zL3dyaXRhYmxlLXN0cmVhbXMi
KQotICAgICAgICB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojg4MDAvc3Ry
ZWFtcy9waXBpbmciKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMv
c3RyZWFtcy9waXBpbmciKQotICAgICAgICB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9j
YWxob3N0Ojg4MDAveGhyIikgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo5
NDQzL3hociIpCi0gICAgICAgIHx8IHBhdGhDb250YWlucyhwYXRoT3JVUkwsICJsb2NhbGhvc3Q6
ODgwMC93ZWJydGMiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0NDMv
d2VicnRjIikKLSAgICAgICAgfHwgcGF0aENvbnRhaW5zKHBhdGhPclVSTCwgImxvY2FsaG9zdDo4
ODAwL3dlYnNvY2tldHMiKSB8fCBwYXRoQ29udGFpbnMocGF0aE9yVVJMLCAibG9jYWxob3N0Ojk0
NDMvd2Vic29ja2V0cyIpOworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiB9CiAKIFRlc3RGZWF0
dXJlcyBoYXJkY29kZWRGZWF0dXJlc0Jhc2VkT25QYXRoRm9yVGVzdChjb25zdCBUZXN0Q29tbWFu
ZCYgY29tbWFuZCkKIHsKICAgICBUZXN0RmVhdHVyZXMgZmVhdHVyZXM7CiAKLSAgICBpZiAoc2hv
dWxkTWFrZVZpZXdwb3J0RmxleGlibGUoY29tbWFuZC5wYXRoT3JVUkwpKQotICAgICAgICBmZWF0
dXJlcy5ib29sRmVhdHVyZXMuaW5zZXJ0KHsgInVzZUZsZXhpYmxlVmlld3BvcnQiLCB0cnVlIH0p
OwotICAgIGlmIChzaG91bGRVc2VFcGhlbWVyYWxTZXNzaW9uKGNvbW1hbmQucGF0aE9yVVJMKSkK
LSAgICAgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7ICJ1c2VFcGhlbWVyYWxTZXNz
aW9uIiwgdHJ1ZSB9KTsKLSAgICBpZiAoc2hvdWxkRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyKGNv
bW1hbmQucGF0aE9yVVJMKSkKLSAgICAgICAgZmVhdHVyZXMuYm9vbEZlYXR1cmVzLmluc2VydCh7
ICJkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIiLCB0cnVlIH0pOwotICAgIGlmIChhdXRvIGRldmlj
ZVNjYWxlRmFjdG9yID0gb3ZlcnJpZGVEZXZpY2VTY2FsZUZhY3RvckZvclRlc3QoY29tbWFuZC5w
YXRoT3JVUkwpOyBkZXZpY2VTY2FsZUZhY3RvciAhPSBXVEY6Om51bGxvcHQpCisgICAgaWYgKGF1
dG8gZGV2aWNlU2NhbGVGYWN0b3IgPSBvdmVycmlkZURldmljZVNjYWxlRmFjdG9yRm9yVGVzdChj
b21tYW5kLnBhdGhPclVSTCk7IGRldmljZVNjYWxlRmFjdG9yICE9IHN0ZDo6bnVsbG9wdCkKICAg
ICAgICAgZmVhdHVyZXMuZG91YmxlRmVhdHVyZXMuaW5zZXJ0KHsgImRldmljZVNjYWxlRmFjdG9y
IiwgZGV2aWNlU2NhbGVGYWN0b3IudmFsdWUoKSB9KTsKLSAgICBpZiAoYXV0byB2aWV3V2lkdGhB
bmRIZWlnaHQgPSBvdmVycmlkZVZpZXdXaWR0aEFuZEhlaWdodEZvclRlc3QoY29tbWFuZC5wYXRo
T3JVUkwpOyB2aWV3V2lkdGhBbmRIZWlnaHQgIT0gV1RGOjpudWxsb3B0KSB7Ci0gICAgICAgIGZl
YXR1cmVzLmRvdWJsZUZlYXR1cmVzLmluc2VydCh7ICJ2aWV3V2lkdGgiLCB2aWV3V2lkdGhBbmRI
ZWlnaHQtPmZpcnN0IH0pOwotICAgICAgICBmZWF0dXJlcy5kb3VibGVGZWF0dXJlcy5pbnNlcnQo
eyAidmlld0hlaWdodCIsIHZpZXdXaWR0aEFuZEhlaWdodC0+c2Vjb25kIH0pOworCisgICAgcmV0
dXJuIGZlYXR1cmVzOworfQorCitUZXN0RmVhdHVyZXMgZmVhdHVyZURlZmF1bHRzRnJvbVRlc3RP
cHRpb25zRmlsZXNGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJiBjb21tYW5kKQoreworICAgIHN0
ZDo6ZmlsZXN5c3RlbTo6cGF0aCBwYXRoID0gY29tbWFuZC5hYnNvbHV0ZVBhdGg7CisKKyAgICAv
LyBHYXRoZXIgZGlyZWN0b3JpZXMgdGhhdCBtYXkgY29udGFpbiBUZXN0SGVhZGVycyBmaWxlcy4K
KyAgICBzdGQ6OnZlY3RvcjxzdGQ6OmZpbGVzeXN0ZW06OnBhdGg+IGRpcmVjdG9yaWVzVG9DaGVj
azsKKyAgICBkbyB7CisgICAgICAgIHBhdGggPSBwYXRoLnBhcmVudF9wYXRoKCk7CisgICAgICAg
IGRpcmVjdG9yaWVzVG9DaGVjay5wdXNoX2JhY2socGF0aCk7CisgICAgfSB3aGlsZSAocGF0aC5m
aWxlbmFtZSgpICE9ICJMYXlvdXRUZXN0cyIpOworCisgICAgLy8gSXRlcmF0ZSB0aGUgZGlyZWN0
b3JpZXMgdGhhdCBtYXkgY29udGFpbiAnVGVzdE9wdGlvbnMudHh0JyBmaWxlcyBmcm9tIGxlYXN0
IHRvIG1vc3QKKyAgICAvLyBzcGVjaWZpYywgYW5kIG1lcmdlIGluIGFueSBmZWF0dXJlcyBmb3Vu
ZC4KKyAgICBUZXN0RmVhdHVyZXMgZmVhdHVyZXM7CisgICAgZm9yIChhdXRvIGRpcmVjdG9yeVRv
Q2hlY2sgOiBXVEY6Om1ha2VSZXZlcnNlZFJhbmdlKGRpcmVjdG9yaWVzVG9DaGVjaykpIHsKKyAg
ICAgICAgYXV0byB0ZXN0SGVhZGVyRmlsZSA9IGRpcmVjdG9yeVRvQ2hlY2sgLyAiVGVzdE9wdGlv
bnMudHh0IjsKKyAgICAgICAgYXV0byB0ZXN0T3B0aW9uc0ZlYXR1cmVzID0gcGFyc2VUZXN0SGVh
ZGVyKHRlc3RIZWFkZXJGaWxlLCBjb21tYW5kLnBhdGhPclVSTCk7CisgICAgICAgIG1lcmdlKGZl
YXR1cmVzLCB0ZXN0T3B0aW9uc0ZlYXR1cmVzKTsKICAgICB9CiAKICAgICByZXR1cm4gZmVhdHVy
ZXM7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RPcHRpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5oCShyZXZpc2lvbiAyNjgx
MzIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RPcHRpb25zLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI1LDcgKzI1LDYgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDxvcHRpb25h
bD4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KICNpbmNsdWRl
IDx2ZWN0b3I+CkBAIC00Niw2ICs0NSw3IEBAIHN0cnVjdCBUZXN0RmVhdHVyZXMgewogdm9pZCBt
ZXJnZShUZXN0RmVhdHVyZXMmIGJhc2UsIFRlc3RGZWF0dXJlcyBhZGRpdGlvbmFsKTsKIAogVGVz
dEZlYXR1cmVzIGhhcmRjb2RlZEZlYXR1cmVzQmFzZWRPblBhdGhGb3JUZXN0KGNvbnN0IFRlc3RD
b21tYW5kJik7CitUZXN0RmVhdHVyZXMgZmVhdHVyZURlZmF1bHRzRnJvbVRlc3RPcHRpb25zRmls
ZXNGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJik7CiBUZXN0RmVhdHVyZXMgZmVhdHVyZURlZmF1
bHRzRnJvbVRlc3RIZWFkZXJGb3JUZXN0KGNvbnN0IFRlc3RDb21tYW5kJik7CiAKIHN0cnVjdCBD
b250ZXh0T3B0aW9ucyB7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjgxMzIpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAyMC0xMC0wNyAg
U2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgW1Rlc3RpbmddIEFkZCBz
dXBwb3J0IGZvciBwZXItZGlyZWN0b3J5IG92ZXJyaWRpbmcgb2YgdGVzdGluZyBvcHRpb25zIHZp
YSBuZXcgVGVzdE9wdGlvbnMudHh0IGZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcyOTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGRzIGRpcmVjdG9yeSBiYXNlZCBUZXN0T3B0aW9ucy50eHQg
ZmlsZXMgdG8gcmVwbGFjZSBoYXJkIGNvZGluZyBpbiBXZWJLaXRUZXN0UnVubmVyCisgICAgICAg
IGZvciBvcHRpb25zIG92ZXJyaWRpbmcuCisKKyAgICAgICAgKiBmYXN0L3ZpZXdwb3J0L1Rlc3RP
cHRpb25zLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC93cHQvd2VicnRjL1Rlc3RPcHRpb25z
LnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaXBhZC9mYXN0L3ZpZXdwb3J0L1Rlc3RP
cHRpb25zLnR4dDogQWRkZWQuCisgICAgICAgICogc3ZnL1czQy1TVkctMS4xLVNFL1Rlc3RPcHRp
b25zLnR4dDogQWRkZWQuCisgICAgICAgICogc3ZnL1czQy1TVkctMS4xL1Rlc3RPcHRpb25zLnR4
dDogQWRkZWQuCisKIDIwMjAtMTAtMDcgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29t
PgogCiAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBNZWRpYVJlY29yZGVyIHBhdXNlL3Jlc3VtZQpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC92aWV3cG9ydC9UZXN0T3B0aW9ucy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC92aWV3cG9ydC9UZXN0T3B0aW9ucy50eHQJKG5vbmV4aXN0
ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC92aWV3cG9ydC9UZXN0T3B0aW9ucy50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSBAQAord2Via2l0LXRlc3QtcnVubmVyIFsgdXNlRmxleGlibGVW
aWV3cG9ydD10cnVlIF0KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvd3B0L3dlYnJ0Yy9UZXN0T3B0
aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC93cHQvd2VicnRjL1Rlc3RP
cHRpb25zLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9odHRwL3dwdC93ZWJydGMv
VGVzdE9wdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtpdC10ZXN0
LXJ1bm5lciBbIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycj10cnVlIF0KSW5kZXg6IExheW91dFRl
c3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL0NoYW5nZUxvZwkocmV2aXNpb24gMjY4MTMyKQorKysgTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDIw
LTEwLTA3ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbVGVzdGlu
Z10gQWRkIHN1cHBvcnQgZm9yIHBlci1kaXJlY3Rvcnkgb3ZlcnJpZGluZyBvZiB0ZXN0aW5nIG9w
dGlvbnMgdmlhIG5ldyBUZXN0T3B0aW9ucy50eHQgZmlsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzI5NworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgZGlyZWN0b3J5IGJhc2VkIFRlc3RPcHRp
b25zLnR4dCBmaWxlcyB0byByZXBsYWNlIGhhcmQgY29kaW5nIGluIFdlYktpdFRlc3RSdW5uZXIK
KyAgICAgICAgZm9yIG9wdGlvbnMgb3ZlcnJpZGluZy4KKworICAgICAgICAqIEluZGV4ZWREQi1w
cml2YXRlLWJyb3dzaW5nL1Rlc3RPcHRpb25zLnR4dDogQWRkZWQuCisgICAgICAgICogd2ViLXBs
YXRmb3JtLXRlc3RzL2JlYWNvbi9UZXN0T3B0aW9ucy50eHQ6IEFkZGVkLgorICAgICAgICAqIHdl
Yi1wbGF0Zm9ybS10ZXN0cy9jb3JzL1Rlc3RPcHRpb25zLnR4dDogQWRkZWQuCisgICAgICAgICog
d2ViLXBsYXRmb3JtLXRlc3RzL2ZldGNoL1Rlc3RPcHRpb25zLnR4dDogQWRkZWQuCisgICAgICAg
ICogd2ViLXBsYXRmb3JtLXRlc3RzL3NlcnZpY2Utd29ya2Vycy9UZXN0T3B0aW9ucy50eHQ6IEFk
ZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9zdHJlYW1zL3BpcGluZy9UZXN0T3B0
aW9ucy50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9zdHJlYW1zL3dy
aXRhYmxlLXN0cmVhbXMvVGVzdE9wdGlvbnMudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWItcGxh
dGZvcm0tdGVzdHMvd2VicnRjL1Rlc3RPcHRpb25zLnR4dDogQWRkZWQuCisgICAgICAgICogd2Vi
LXBsYXRmb3JtLXRlc3RzL3dlYnNvY2tldHMvVGVzdE9wdGlvbnMudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMveGhyL1Rlc3RPcHRpb25zLnR4dDogQWRkZWQuCisKIDIw
MjAtMTAtMDcgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIEFk
ZCBzdXBwb3J0IGZvciBNZWRpYVJlY29yZGVyIHBhdXNlL3Jlc3VtZQpJbmRleDogTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL0luZGV4ZWREQi1wcml2YXRlLWJyb3dzaW5nL1Rlc3RPcHRpb25zLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvSW5kZXhlZERCLXByaXZh
dGUtYnJvd3NpbmcvVGVzdE9wdGlvbnMudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy9JbmRleGVkREItcHJpdmF0ZS1icm93c2luZy9UZXN0T3B0aW9ucy50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSBAQAord2Via2l0LXRlc3QtcnVubmVyIFsgdXNlRXBo
ZW1lcmFsU2Vzc2lvbj10cnVlIF0KSW5kZXg6IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvYmVhY29uL1Rlc3RPcHRpb25zLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2JlYWNvbi9UZXN0T3B0aW9u
cy50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9iZWFjb24vVGVzdE9wdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEgQEAKK3dlYmtpdC10ZXN0LXJ1bm5lciBbIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycj10cnVl
IF0KSW5kZXg6IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY29y
cy9UZXN0T3B0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9jb3JzL1Rlc3RPcHRpb25zLnR4dAkobm9uZXhpc3RlbnQpCisr
KyBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2NvcnMvVGVzdE9w
dGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtpdC10ZXN0LXJ1bm5l
ciBbIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycj10cnVlIF0KSW5kZXg6IExheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZmV0Y2gvVGVzdE9wdGlvbnMudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZmV0
Y2gvVGVzdE9wdGlvbnMudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZmV0Y2gvVGVzdE9wdGlvbnMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtpdC10ZXN0LXJ1bm5lciBbIGR1bXBKU0NvbnNvbGVMb2dJ
blN0ZEVycj10cnVlIF0KSW5kZXg6IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvc2VydmljZS13b3JrZXJzL1Rlc3RPcHRpb25zLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3NlcnZpY2Utd29ya2Vy
cy9UZXN0T3B0aW9ucy50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9zZXJ2aWNlLXdvcmtlcnMvVGVzdE9wdGlvbnMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtpdC10ZXN0LXJ1bm5lciBbIGR1bXBKU0Nv
bnNvbGVMb2dJblN0ZEVycj10cnVlIF0KSW5kZXg6IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvc3RyZWFtcy9waXBpbmcvVGVzdE9wdGlvbnMudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvc3RyZWFt
cy9waXBpbmcvVGVzdE9wdGlvbnMudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvc3RyZWFtcy9waXBpbmcvVGVzdE9wdGlvbnMu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtpdC10ZXN0LXJ1bm5lciBbIGR1
bXBKU0NvbnNvbGVMb2dJblN0ZEVycj10cnVlIF0KSW5kZXg6IExheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvc3RyZWFtcy93cml0YWJsZS1zdHJlYW1zL1Rlc3RPcHRp
b25zLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3N0cmVhbXMvd3JpdGFibGUtc3RyZWFtcy9UZXN0T3B0aW9ucy50eHQJKG5vbmV4
aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9z
dHJlYW1zL3dyaXRhYmxlLXN0cmVhbXMvVGVzdE9wdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEgQEAKK3dlYmtpdC10ZXN0LXJ1bm5lciBbIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVy
cj10cnVlIF0KSW5kZXg6IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvd2VicnRjL1Rlc3RPcHRpb25zLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9UZXN0T3B0aW9ucy50eHQJKG5vbmV4
aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93
ZWJydGMvVGVzdE9wdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtp
dC10ZXN0LXJ1bm5lciBbIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycj10cnVlIF0KSW5kZXg6IExh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2Vic29ja2V0cy9UZXN0
T3B0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy93ZWJzb2NrZXRzL1Rlc3RPcHRpb25zLnR4dAkobm9uZXhpc3RlbnQpCisr
KyBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnNvY2tldHMv
VGVzdE9wdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtpdC10ZXN0
LXJ1bm5lciBbIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVycj10cnVlIF0KSW5kZXg6IExheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMveGhyL1Rlc3RPcHRpb25zLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3hoci9UZXN0T3B0aW9ucy50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy94aHIvVGVzdE9wdGlvbnMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtpdC10ZXN0LXJ1bm5lciBbIGR1bXBKU0NvbnNvbGVMb2dJ
blN0ZEVycj10cnVlIF0KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2lwYWQvZmFzdC92aWV3
cG9ydC9UZXN0T3B0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0v
aXBhZC9mYXN0L3ZpZXdwb3J0L1Rlc3RPcHRpb25zLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9pcGFkL2Zhc3Qvdmlld3BvcnQvVGVzdE9wdGlvbnMudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtpdC10ZXN0LXJ1bm5lciBbIHVzZUZsZXhpYmxl
Vmlld3BvcnQ9dHJ1ZSBdCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvVzNDLVNWRy0xLjEtU0UvVGVz
dE9wdGlvbnMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9XM0MtU1ZHLTEuMS1T
RS9UZXN0T3B0aW9ucy50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvc3ZnL1czQy1T
VkctMS4xLVNFL1Rlc3RPcHRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxIEBACit3
ZWJraXQtdGVzdC1ydW5uZXIgWyB2aWV3V2lkdGg9NDgwIHZpZXdIZWlnaHQ9MzYwIF0KSW5kZXg6
IExheW91dFRlc3RzL3N2Zy9XM0MtU1ZHLTEuMS9UZXN0T3B0aW9ucy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvc3ZnL1czQy1TVkctMS4xL1Rlc3RPcHRpb25zLnR4dAkobm9uZXhpc3Rl
bnQpCisrKyBMYXlvdXRUZXN0cy9zdmcvVzNDLVNWRy0xLjEvVGVzdE9wdGlvbnMudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEgQEAKK3dlYmtpdC10ZXN0LXJ1bm5lciBbIHZpZXdXaWR0aD00
ODAgdmlld0hlaWdodD0zNjAgXQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>