<?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>120202</bug_id>
          
          <creation_ts>2013-08-23 03:05:04 -0700</creation_ts>
          <short_desc>[GTK] [WK2] Split up TestWebKitWebView into smaller executables</short_desc>
          <delta_ts>2014-02-13 03:31:22 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>126284</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brian Holt">brian.holt</reporter>
          <assigned_to name="Brian Holt">brian.holt</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gustavo</cc>
    
    <cc>mario</cc>
    
    <cc>mrobinson</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>920157</commentid>
    <comment_count>0</comment_count>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-08-23 03:05:04 -0700</bug_when>
    <thetext>In https://bugs.webkit.org/show_bug.cgi?id=117689 TestWebKitWebView is failing because of multiple separate issues making it hard to resolve.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920214</commentid>
    <comment_count>1</comment_count>
      <attachid>209459</attachid>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-08-23 07:24:27 -0700</bug_when>
    <thetext>Created attachment 209459
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920216</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-23 07:26:15 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>922981</commentid>
    <comment_count>3</comment_count>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-08-30 08:46:05 -0700</bug_when>
    <thetext>mrobinson: Do you support the idea of splitting up the monolithic TestWebKitWebView into smaller executables? It will increase build and link times marginally but it would mean that we can run some tests instead of skipping all of them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923566</commentid>
    <comment_count>4</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-09-01 17:21:53 -0700</bug_when>
    <thetext>I&apos;m okay with splitting it up, but I&apos;d prefer that the tests were written in a way that they were order independent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923623</commentid>
    <comment_count>5</comment_count>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-09-02 01:49:41 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; I&apos;m okay with splitting it up, but I&apos;d prefer that the tests were written in a way that they were order independent.

I think for the most part they are order-independent.  Two exceptions that come to mind are that failure tests must precede success tests for authentication (because of libsoup) and that the custom-charset test causes problems with subsequent page loads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923752</commentid>
    <comment_count>6</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-09-02 09:44:55 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; I&apos;m okay with splitting it up, but I&apos;d prefer that the tests were written in a way that they were order independent.
&gt; 
&gt; I think for the most part they are order-independent.  Two exceptions that come to mind are that failure tests must precede success tests for authentication (because of libsoup) and that the custom-charset test causes problems with subsequent page loads.

These kind of issues make it difficult to randomize test order. Why do libsoup authentication failures cause followup tests to fail. To me these kind of things seem like real bugs in the test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923753</commentid>
    <comment_count>7</comment_count>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-09-02 09:55:22 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; (In reply to comment #4)
&gt; &gt; &gt; I&apos;m okay with splitting it up, but I&apos;d prefer that the tests were written in a way that they were order independent.
&gt; &gt; 
&gt; &gt; I think for the most part they are order-independent.  Two exceptions that come to mind are that failure tests must precede success tests for authentication (because of libsoup) and that the custom-charset test causes problems with subsequent page loads.
&gt; 
&gt; These kind of issues make it difficult to randomize test order. Why do libsoup authentication failures cause followup tests to fail. To me these kind of things seem like real bugs in the test.

I think you may have misunderstood my comment, I probably didn&apos;t explain the exception regarding authentication very well: what I meant was that you can do all the authentication failure tests in any random order, but as soon as you successfully authenticate libsoup will never challenge the user agent again for that session (see http://trac.webkit.org/browser/trunk/Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp#L1197).

The custom-charset bug is a real issue that I hope to address.

In principle though, all of these tests *should be* order independent, and if we find tests that are not then bugs should be raised.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923765</commentid>
    <comment_count>8</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-09-02 10:18:03 -0700</bug_when>
    <thetext>(In reply to comment #7)

&gt; I think you may have misunderstood my comment, I probably didn&apos;t explain the exception regarding authentication very well: what I meant was that you can do all the authentication failure tests in any random order, but as soon as you successfully authenticate libsoup will never challenge the user agent again for that session (see http://trac.webkit.org/browser/trunk/Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp#L1197).

Oh yes. Really good point!

&gt; The custom-charset bug is a real issue that I hope to address.
&gt; 
&gt; In principle though, all of these tests *should be* order independent, and if we find tests that are not then bugs should be raised.

Okay. So the benefit of splitting the tests is that you can unskip some now and some later?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923913</commentid>
    <comment_count>9</comment_count>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-09-03 02:24:47 -0700</bug_when>
    <thetext>&gt; Okay. So the benefit of splitting the tests is that you can unskip some now and some later?

Exactly.  Its just to prevent the case where a single test failure results in the entire (large) suite being skipped, so we can unskip some now and continue running at least some tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927313</commentid>
    <comment_count>10</comment_count>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-09-10 08:30:10 -0700</bug_when>
    <thetext>Any other comments or or reviews?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>934602</commentid>
    <comment_count>11</comment_count>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-09-30 08:31:02 -0700</bug_when>
    <thetext>After a lot of reflection and diving into these tests, it seems that splitting TestWebKitWebView into smaller executables won&apos;t solve the problem with the timeouts and doesn&apos;t provide the real long-term fix of being able to skip individual tests when they fail.

Instead, I propose to abandon this patch and rather to comment out the individual tests that are failing in the and remove this from the skippedTests list.  What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>934606</commentid>
    <comment_count>12</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-09-30 08:39:23 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; After a lot of reflection and diving into these tests, it seems that splitting TestWebKitWebView into smaller executables won&apos;t solve the problem with the timeouts and doesn&apos;t provide the real long-term fix of being able to skip individual tests when they fail.
&gt; 
&gt; Instead, I propose to abandon this patch and rather to comment out the individual tests that are failing in the and remove this from the skippedTests list.  What do you think?

As much as I don&apos;t like to have to comment out individual tests from the test suite, I&apos;d personally rather have that now than having the entire test suite skipped, which seems to be the case.

And regarding to the split, I agree that doing that just for the sake of &quot;fixing&quot; this does not make much sense since it&apos;s not fixing the issue either (and so I&apos;d rather comment those tests out). However, it might be something worth considering anyway (regardless of this issue) due to the size of the TestWebKitWebView test suite, and because some test cases (specially those related to the authentication API) seem to be quite self-contained anyway.

So, my vote goes for skipping those tests now (if others agree), so we can start running at least part of the TestWebKitWebView test suite, and think about the split as a completely unrelated thing.

My 2 cents.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>934614</commentid>
    <comment_count>13</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-09-30 08:46:39 -0700</bug_when>
    <thetext>I think it&apos;s fine to keep the tests skipped if they fail on the bots. I always run the unit tests locally with gtester directly or with run-gtk-tests --no-xvfb --skipped=ignore so that xvfb is not used and skipped tests are ignored (and then executed)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963718</commentid>
    <comment_count>14</comment_count>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2014-01-02 03:42:45 -0800</bug_when>
    <thetext>I guess this is no longer required since https://bugs.webkit.org/show_bug.cgi?id=126284?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963731</commentid>
    <comment_count>15</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-01-02 04:38:46 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; I guess this is no longer required since https://bugs.webkit.org/show_bug.cgi?id=126284?

Oops, I&apos;m sorry, I had forgotten this bug when I did the split :-(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963738</commentid>
    <comment_count>16</comment_count>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2014-01-02 05:35:22 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; I guess this is no longer required since https://bugs.webkit.org/show_bug.cgi?id=126284?
&gt; 
&gt; Oops, I&apos;m sorry, I had forgotten this bug when I did the split :-(

No problem, its achieved the same thing.  I&apos;ll close this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963739</commentid>
    <comment_count>17</comment_count>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2014-01-02 05:36:00 -0800</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 126284 ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>980208</commentid>
    <comment_count>18</comment_count>
      <attachid>209459</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-02-13 03:31:22 -0800</bug_when>
    <thetext>Comment on attachment 209459
Patch

Cleared review? from attachment 209459 so that this bug does not appear in http://webkit.org/pending-review.  If you would like this patch reviewed, please attach it to a new bug (or re-open this bug before marking it for review again).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209459</attachid>
            <date>2013-08-23 07:24:27 -0700</date>
            <delta_ts>2014-02-13 03:31:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-120202-20130823152505.patch</filename>
            <type>text/plain</type>
            <size>92113</size>
            <attacher name="Brian Holt">brian.holt</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU0NDc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggM2MyMWQ5ZjNlY2Y4ZmNl
MmNkMDgzZDhiY2FhNWQ0YjJlZGU0YzdhZS4uNzkwMWExN2MyOGM1ZmZmNzgxZTFkNDE1NjNmZWFm
ZmQwMDM5N2ExNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDEzLTA4LTIzICBCcmlh
biBIb2x0ICA8YnJpYW4uaG9sdEBzYW1zdW5nLmNvbT4KKworICAgICAgICBbR1RLXSBbV0syXSBT
cGxpdCB1cCBUZXN0V2ViS2l0V2ViVmlldyBpbnRvIHNtYWxsZXIgZXhlY3V0YWJsZXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMDIwMgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RXZWJLaXRXZWJW
aWV3IGlzIGEgbGFyZ2Ugc2V0IG9mIHRlc3RzLCBzb21lIG9mIHdoaWNoIGFyZQorICAgICAgICBj
dXJyZW50bHkgZmFpbGluZyBmb3IgdW5yZWxhdGVkIHJlYXNvbnMuCisgICAgICAgIFNwbGl0IHRo
aXMgZmlsZSBpbnRvIHNtYWxsZXIgdGVzdHMsIGdyb3VwaW5nIHRoZSBhdXRoZW50aWNhdGlvbgor
ICAgICAgICB0ZXN0cyBhbmQgdGhlIFVJQ2xpZW50IHRlc3RzLgorCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW06CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAoYmVmb3JlQWxsKToK
KyAgICAgICAgKGFmdGVyQWxsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9U
ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uLmNwcDogQWRkZWQuCisgICAgICAgICh0ZXN0V2ViVmll
d0F1dGhlbnRpY2F0aW9uUmVxdWVzdCk6CisgICAgICAgICh0ZXN0V2ViVmlld0F1dGhlbnRpY2F0
aW9uQ2FuY2VsKToKKyAgICAgICAgKHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25GYWlsdXJlKToK
KyAgICAgICAgKHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25Ob0NyZWRlbnRpYWwpOgorICAgICAg
ICAodGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblN0b3JhZ2UpOgorICAgICAgICAodGVzdFdlYlZp
ZXdBdXRoZW50aWNhdGlvblN1Y2Nlc3MpOgorICAgICAgICAoc2VydmVyQ2FsbGJhY2spOgorICAg
ICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKGFmdGVyQWxsKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViVmlld1VJQ2xpZW50LmNwcDogQWRkZWQuCisgICAgICAg
ICh0ZXN0V2ViVmlld0NyZWF0ZVJlYWR5Q2xvc2UpOgorICAgICAgICAoY2hlY2tNaW1lVHlwZUZv
ckZpbHRlcik6CisgICAgICAgICh0ZXN0V2ViVmlld0FsbG93TW9kYWxEaWFsb2dzKToKKyAgICAg
ICAgKHRlc3RXZWJWaWV3RGlzYWxsb3dNb2RhbERpYWxvZ3MpOgorICAgICAgICAodGVzdFdlYlZp
ZXdKYXZhU2NyaXB0RGlhbG9ncyk6CisgICAgICAgICh0ZXN0V2ViVmlld1dpbmRvd1Byb3BlcnRp
ZXMpOgorICAgICAgICAodGVzdFdlYlZpZXdNb3VzZVRhcmdldCk6CisgICAgICAgICh0ZXN0V2Vi
Vmlld1Blcm1pc3Npb25SZXF1ZXN0cyk6CisgICAgICAgICh0ZXN0V2ViVmlld0ZpbGVDaG9vc2Vy
UmVxdWVzdCk6CisgICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAoYWZ0ZXJBbGwpOgorCiAy
MDEzLTA4LTIyICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBbR1RLXSBXcm9uZyBpbnRlcmZhY2UgdmVyc2lvbiB1c2VkIGluIFdlYktpdFdlYlBh
Z2UgZm9yIGxvYWRlciBjbGllbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KaW5kZXggZmYyZDUzNDU2MTk3OTYwMDdhYzMw
NGE5Mzg0Zjk1OGJhYWFlMzQzMS4uMzM5Yzc3NmVlMmQxMmU4ZjVmYTlkZmM5ODFlMzVhNjZkMDM1
NGE2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
R05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvR05VbWFrZWZpbGUuYW0KQEAgLTIyLDcgKzIyLDkgQEAgVEVTVF9QUk9HUyArPSBcCiAJUHJv
Z3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0IFwKIAlQcm9ncmFtcy9X
ZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFdlYlZpZXcgXAogCVByb2dyYW1zL1dlYktpdDJBUElU
ZXN0cy9UZXN0V2ViS2l0V2ViVmlld0dyb3VwIFwKLQlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMv
VGVzdFdlYlZpZXdFZGl0b3IKKwlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYlZpZXdF
ZGl0b3IgXAorICAgICAgICBQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYlZpZXdBdXRo
ZW50aWNhdGlvbiBcCisgICAgICAgIFByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViVmll
d1VJQ2xpZW50CiAKIG5vaW5zdF9QUk9HUkFNUyArPSAkKFRFU1RfUFJPR1MpCiAKQEAgLTMwMyw0
ICszMDUsMTUgQEAgUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RET01Ob2RlX0NQUEZMQUdT
ID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rl
c3RET01Ob2RlX0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQogUHJvZ3JhbXNfV2ViS2l0
MkFQSVRlc3RzX1Rlc3RET01Ob2RlX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykK
IAorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJWaWV3QXV0aGVudGljYXRpb25fU09V
UkNFUyA9IFwKKyAgICAgICAgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
VGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvbi5jcHAKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19U
ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZs
YWdzKQorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJWaWV3QXV0aGVudGljYXRpb25f
TERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNf
VGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvbl9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxh
Z3MpCisKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViVmlld1VJQ2xpZW50X1NPVVJD
RVMgPSBcCisgICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rl
c3RXZWJWaWV3VUlDbGllbnQuY3BwCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYlZp
ZXdVSUNsaWVudF9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKK1Byb2dyYW1z
X1dlYktpdDJBUElUZXN0c19UZXN0V2ViVmlld1VJQ2xpZW50X0xEQUREID0gJCh3ZWJraXQyX3Rl
c3RzX2xkYWRkKQorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJWaWV3VUlDbGllbnRf
TERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQogZW5kaWYgIyBFTkFCTEVfV0VCS0lU
MgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVz
dFdlYktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwCmluZGV4IDZmZmU1MTRjMjcxNTM5YjE2OWU0Y2EyZDVl
MDljODkwZTI2NDMyNDIuLmFkMjlmNGY5ZmRlZGRlZGFhYjExMDZkNjcyY2Y5MzBhMjc5YmU0NzMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RX
ZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAKQEAgLTE4LDggKzE4LDYgQEAKICAqLwogCiAjaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTG9hZFRyYWNraW5nVGVzdC5oIgotI2luY2x1ZGUg
IldlYktpdFRlc3RTZXJ2ZXIuaCIKICNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNWYWx1ZVJlZi5oPgpAQCAtMjgsOCArMjYsNiBAQAogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dS
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKLXN0YXRpYyBXZWJL
aXRUZXN0U2VydmVyKiBrU2VydmVyOwotCiBzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0RlZmF1bHRD
b250ZXh0KFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogewogICAgIGdfYXNzZXJ0
KHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCh0ZXN0LT5tX3dlYlZpZXcpID09IHdlYmtpdF93
ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKTsKQEAgLTc1LDUzMSArNzEsNiBAQCBzdGF0aWMgdm9p
ZCB0ZXN0V2ViVmlld1NldHRpbmdzKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQog
ICAgIGdfYXNzZXJ0KHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX2phdmFzY3JpcHQoc2V0dGlu
Z3MpKTsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIqIGtBbGVydERpYWxvZ01lc3NhZ2UgPSAiV2Vi
S2l0R1RLKyBhbGVydCBkaWFsb2cgbWVzc2FnZSI7Ci1zdGF0aWMgY29uc3QgY2hhcioga0NvbmZp
cm1EaWFsb2dNZXNzYWdlID0gIldlYktpdEdUSysgY29uZmlybSBkaWFsb2cgbWVzc2FnZSI7Ci1z
dGF0aWMgY29uc3QgY2hhcioga1Byb21wdERpYWxvZ01lc3NhZ2UgPSAiV2ViS2l0R1RLKyBwcm9t
cHQgZGlhbG9nIG1lc3NhZ2UiOwotc3RhdGljIGNvbnN0IGNoYXIqIGtQcm9tcHREaWFsb2dSZXR1
cm5lZFRleHQgPSAiV2ViS2l0R1RLKyBwcm9tcHQgZGlhbG9nIHJldHVybmVkIHRleHQiOwotCi1j
bGFzcyBVSUNsaWVudFRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFL
RV9HTElCX1RFU1RfRklYVFVSRShVSUNsaWVudFRlc3QpOwotCi0gICAgZW51bSBXZWJWaWV3RXZl
bnRzIHsKLSAgICAgICAgQ3JlYXRlLAotICAgICAgICBSZWFkeVRvU2hvdywKLSAgICAgICAgUnVu
QXNNb2RhbCwKLSAgICAgICAgQ2xvc2UKLSAgICB9OwotCi0gICAgY2xhc3MgV2luZG93UHJvcGVy
dGllcyB7Ci0gICAgcHVibGljOgotICAgICAgICBXaW5kb3dQcm9wZXJ0aWVzKCkKLSAgICAgICAg
ICAgIDogbV9pc051bGwodHJ1ZSkKLSAgICAgICAgICAgICwgbV90b29sYmFyVmlzaWJsZSh0cnVl
KQotICAgICAgICAgICAgLCBtX3N0YXR1c2JhclZpc2libGUodHJ1ZSkKLSAgICAgICAgICAgICwg
bV9zY3JvbGxiYXJzVmlzaWJsZSh0cnVlKQotICAgICAgICAgICAgLCBtX21lbnViYXJWaXNpYmxl
KHRydWUpCi0gICAgICAgICAgICAsIG1fbG9jYXRpb25iYXJWaXNpYmxlKHRydWUpCi0gICAgICAg
ICAgICAsIG1fcmVzaXphYmxlKHRydWUpCi0gICAgICAgICAgICAsIG1fZnVsbHNjcmVlbihmYWxz
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgbWVtc2V0KCZtX2dlb21ldHJ5LCAwLCBzaXplb2Yo
R2RrUmVjdGFuZ2xlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBXaW5kb3dQcm9wZXJ0aWVzKFdl
YktpdFdpbmRvd1Byb3BlcnRpZXMqIHdpbmRvd1Byb3BlcnRpZXMpCi0gICAgICAgICAgICA6IG1f
aXNOdWxsKGZhbHNlKQotICAgICAgICAgICAgLCBtX3Rvb2xiYXJWaXNpYmxlKHdlYmtpdF93aW5k
b3dfcHJvcGVydGllc19nZXRfdG9vbGJhcl92aXNpYmxlKHdpbmRvd1Byb3BlcnRpZXMpKQotICAg
ICAgICAgICAgLCBtX3N0YXR1c2JhclZpc2libGUod2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dl
dF9zdGF0dXNiYXJfdmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVzKSkKLSAgICAgICAgICAgICwgbV9z
Y3JvbGxiYXJzVmlzaWJsZSh3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3Njcm9sbGJhcnNf
dmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVzKSkKLSAgICAgICAgICAgICwgbV9tZW51YmFyVmlzaWJs
ZSh3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X21lbnViYXJfdmlzaWJsZSh3aW5kb3dQcm9w
ZXJ0aWVzKSkKLSAgICAgICAgICAgICwgbV9sb2NhdGlvbmJhclZpc2libGUod2Via2l0X3dpbmRv
d19wcm9wZXJ0aWVzX2dldF9sb2NhdGlvbmJhcl92aXNpYmxlKHdpbmRvd1Byb3BlcnRpZXMpKQot
ICAgICAgICAgICAgLCBtX3Jlc2l6YWJsZSh3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3Jl
c2l6YWJsZSh3aW5kb3dQcm9wZXJ0aWVzKSkKLSAgICAgICAgICAgICwgbV9mdWxsc2NyZWVuKHdl
YmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfZnVsbHNjcmVlbih3aW5kb3dQcm9wZXJ0aWVzKSkK
LSAgICAgICAgewotICAgICAgICAgICAgd2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9nZW9t
ZXRyeSh3aW5kb3dQcm9wZXJ0aWVzLCAmbV9nZW9tZXRyeSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBXaW5kb3dQcm9wZXJ0aWVzKEdka1JlY3RhbmdsZSogZ2VvbWV0cnksIGJvb2wgdG9vbGJhclZp
c2libGUsIGJvb2wgc3RhdHVzYmFyVmlzaWJsZSwgYm9vbCBzY3JvbGxiYXJzVmlzaWJsZSwgYm9v
bCBtZW51YmFyVmlzaWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGxvY2F0aW9u
YmFyVmlzaWJsZSwgYm9vbCByZXNpemFibGUsIGJvb2wgZnVsbHNjcmVlbikKLSAgICAgICAgICAg
IDogbV9pc051bGwoZmFsc2UpCi0gICAgICAgICAgICAsIG1fZ2VvbWV0cnkoKmdlb21ldHJ5KQot
ICAgICAgICAgICAgLCBtX3Rvb2xiYXJWaXNpYmxlKHRvb2xiYXJWaXNpYmxlKQotICAgICAgICAg
ICAgLCBtX3N0YXR1c2JhclZpc2libGUoc3RhdHVzYmFyVmlzaWJsZSkKLSAgICAgICAgICAgICwg
bV9zY3JvbGxiYXJzVmlzaWJsZShzY3JvbGxiYXJzVmlzaWJsZSkKLSAgICAgICAgICAgICwgbV9t
ZW51YmFyVmlzaWJsZShtZW51YmFyVmlzaWJsZSkKLSAgICAgICAgICAgICwgbV9sb2NhdGlvbmJh
clZpc2libGUobG9jYXRpb25iYXJWaXNpYmxlKQotICAgICAgICAgICAgLCBtX3Jlc2l6YWJsZShy
ZXNpemFibGUpCi0gICAgICAgICAgICAsIG1fZnVsbHNjcmVlbihmdWxsc2NyZWVuKQotICAgICAg
ICB7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNOdWxsOyB9Ci0KLSAgICAgICAgdm9pZCBhc3NlcnRFcXVhbChjb25zdCBXaW5kb3dQcm9wZXJ0
aWVzJiBvdGhlcikgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgZ19hc3NlcnRfY21waW50
KG1fZ2VvbWV0cnkueCwgPT0sIG90aGVyLm1fZ2VvbWV0cnkueCk7Ci0gICAgICAgICAgICBnX2Fz
c2VydF9jbXBpbnQobV9nZW9tZXRyeS55LCA9PSwgb3RoZXIubV9nZW9tZXRyeS55KTsKLSAgICAg
ICAgICAgIGdfYXNzZXJ0X2NtcGludChtX2dlb21ldHJ5LndpZHRoLCA9PSwgb3RoZXIubV9nZW9t
ZXRyeS53aWR0aCk7Ci0gICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQobV9nZW9tZXRyeS5oZWln
aHQsID09LCBvdGhlci5tX2dlb21ldHJ5LmhlaWdodCk7Ci0gICAgICAgICAgICBnX2Fzc2VydF9j
bXBpbnQoc3RhdGljX2Nhc3Q8aW50PihtX3Rvb2xiYXJWaXNpYmxlKSwgPT0sIHN0YXRpY19jYXN0
PGludD4ob3RoZXIubV90b29sYmFyVmlzaWJsZSkpOwotICAgICAgICAgICAgZ19hc3NlcnRfY21w
aW50KHN0YXRpY19jYXN0PGludD4obV9zdGF0dXNiYXJWaXNpYmxlKSwgPT0sIHN0YXRpY19jYXN0
PGludD4ob3RoZXIubV9zdGF0dXNiYXJWaXNpYmxlKSk7Ci0gICAgICAgICAgICBnX2Fzc2VydF9j
bXBpbnQoc3RhdGljX2Nhc3Q8aW50PihtX3Njcm9sbGJhcnNWaXNpYmxlKSwgPT0sIHN0YXRpY19j
YXN0PGludD4ob3RoZXIubV9zY3JvbGxiYXJzVmlzaWJsZSkpOwotICAgICAgICAgICAgZ19hc3Nl
cnRfY21waW50KHN0YXRpY19jYXN0PGludD4obV9tZW51YmFyVmlzaWJsZSksID09LCBzdGF0aWNf
Y2FzdDxpbnQ+KG90aGVyLm1fbWVudWJhclZpc2libGUpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0
X2NtcGludChzdGF0aWNfY2FzdDxpbnQ+KG1fbG9jYXRpb25iYXJWaXNpYmxlKSwgPT0sIHN0YXRp
Y19jYXN0PGludD4ob3RoZXIubV9sb2NhdGlvbmJhclZpc2libGUpKTsKLSAgICAgICAgICAgIGdf
YXNzZXJ0X2NtcGludChzdGF0aWNfY2FzdDxpbnQ+KG1fcmVzaXphYmxlKSwgPT0sIHN0YXRpY19j
YXN0PGludD4ob3RoZXIubV9yZXNpemFibGUpKTsKLSAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGlu
dChzdGF0aWNfY2FzdDxpbnQ+KG1fZnVsbHNjcmVlbiksID09LCBzdGF0aWNfY2FzdDxpbnQ+KG90
aGVyLm1fZnVsbHNjcmVlbikpOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBi
b29sIG1faXNOdWxsOwotCi0gICAgICAgIEdka1JlY3RhbmdsZSBtX2dlb21ldHJ5OwotCi0gICAg
ICAgIGJvb2wgbV90b29sYmFyVmlzaWJsZTsKLSAgICAgICAgYm9vbCBtX3N0YXR1c2JhclZpc2li
bGU7Ci0gICAgICAgIGJvb2wgbV9zY3JvbGxiYXJzVmlzaWJsZTsKLSAgICAgICAgYm9vbCBtX21l
bnViYXJWaXNpYmxlOwotICAgICAgICBib29sIG1fbG9jYXRpb25iYXJWaXNpYmxlOwotCi0gICAg
ICAgIGJvb2wgbV9yZXNpemFibGU7Ci0gICAgICAgIGJvb2wgbV9mdWxsc2NyZWVuOwotICAgIH07
Ci0KLSAgICBzdGF0aWMgdm9pZCB3aW5kb3dQcm9wZXJ0aWVzTm90aWZ5Q2FsbGJhY2soR09iamVj
dCosIEdQYXJhbVNwZWMqIHBhcmFtU3BlYywgVUlDbGllbnRUZXN0KiB0ZXN0KQotICAgIHsKLSAg
ICAgICAgdGVzdC0+bV93aW5kb3dQcm9wZXJ0aWVzQ2hhbmdlZC5hZGQoZ19wYXJhbV9zcGVjX2dl
dF9uYW1lKHBhcmFtU3BlYykpOwotICAgIH0KLQotICAgIHN0YXRpYyBHdGtXaWRnZXQqIHZpZXdD
cmVhdGVDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBVSUNsaWVudFRlc3QqIHRlc3Qp
Ci0gICAgewotICAgICAgICByZXR1cm4gdGVzdC0+dmlld0NyZWF0ZSh3ZWJWaWV3KTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgdm9pZCB2aWV3UmVhZHlUb1Nob3dDYWxsYmFjayhXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3LCBVSUNsaWVudFRlc3QqIHRlc3QpCi0gICAgewotICAgICAgICB0ZXN0LT52aWV3
UmVhZHlUb1Nob3cod2ViVmlldyk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgdmlld0Nsb3Nl
Q2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgVUlDbGllbnRUZXN0KiB0ZXN0KQotICAg
IHsKLSAgICAgICAgdGVzdC0+dmlld0Nsb3NlKHdlYlZpZXcpOwotICAgIH0KLQotICAgIHZvaWQg
c2NyaXB0QWxlcnQoV2ViS2l0U2NyaXB0RGlhbG9nKiBkaWFsb2cpCi0gICAgewotICAgICAgICBz
d2l0Y2ggKG1fc2NyaXB0RGlhbG9nVHlwZSkgewotICAgICAgICBjYXNlIFdFQktJVF9TQ1JJUFRf
RElBTE9HX0FMRVJUOgotICAgICAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zY3JpcHRf
ZGlhbG9nX2dldF9tZXNzYWdlKGRpYWxvZyksID09LCBrQWxlcnREaWFsb2dNZXNzYWdlKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdFQktJVF9TQ1JJUFRfRElBTE9HX0NPTkZJ
Uk06Ci0gICAgICAgICAgICBnX2Fzc2VydChtX3NjcmlwdERpYWxvZ0NvbmZpcm1lZCk7Ci0gICAg
ICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NjcmlwdF9kaWFsb2dfZ2V0X21lc3NhZ2Uo
ZGlhbG9nKSwgPT0sICJjb25maXJtZWQiKTsKLQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgV0VCS0lUX1NDUklQVF9ESUFMT0dfUFJPTVBUOgotICAgICAgICAgICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF9zY3JpcHRfZGlhbG9nX2dldF9tZXNzYWdlKGRpYWxvZyksID09LCBrUHJv
bXB0RGlhbG9nUmV0dXJuZWRUZXh0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0K
LSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICB2b2lk
IHNjcmlwdENvbmZpcm0oV2ViS2l0U2NyaXB0RGlhbG9nKiBkaWFsb2cpCi0gICAgewotICAgICAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NjcmlwdF9kaWFsb2dfZ2V0X21lc3NhZ2UoZGlhbG9n
KSwgPT0sIGtDb25maXJtRGlhbG9nTWVzc2FnZSk7Ci0gICAgICAgIG1fc2NyaXB0RGlhbG9nQ29u
ZmlybWVkID0gIW1fc2NyaXB0RGlhbG9nQ29uZmlybWVkOwotICAgICAgICB3ZWJraXRfc2NyaXB0
X2RpYWxvZ19jb25maXJtX3NldF9jb25maXJtZWQoZGlhbG9nLCBtX3NjcmlwdERpYWxvZ0NvbmZp
cm1lZCk7Ci0gICAgfQotCi0gICAgdm9pZCBzY3JpcHRQcm9tcHQoV2ViS2l0U2NyaXB0RGlhbG9n
KiBkaWFsb2cpCi0gICAgewotICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NjcmlwdF9k
aWFsb2dfZ2V0X21lc3NhZ2UoZGlhbG9nKSwgPT0sIGtQcm9tcHREaWFsb2dNZXNzYWdlKTsKLSAg
ICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9zY3JpcHRfZGlhbG9nX3Byb21wdF9nZXRfZGVm
YXVsdF90ZXh0KGRpYWxvZyksID09LCAiZGVmYXVsdCIpOwotICAgICAgICB3ZWJraXRfc2NyaXB0
X2RpYWxvZ19wcm9tcHRfc2V0X3RleHQoZGlhbG9nLCBrUHJvbXB0RGlhbG9nUmV0dXJuZWRUZXh0
KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gc2NyaXB0RGlhbG9nKFdlYktpdFdlYlZp
ZXcqLCBXZWJLaXRTY3JpcHREaWFsb2cqIGRpYWxvZywgVUlDbGllbnRUZXN0KiB0ZXN0KQotICAg
IHsKLSAgICAgICAgc3dpdGNoICh3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfZGlhbG9nX3R5cGUo
ZGlhbG9nKSkgewotICAgICAgICBjYXNlIFdFQktJVF9TQ1JJUFRfRElBTE9HX0FMRVJUOgotICAg
ICAgICAgICAgdGVzdC0+c2NyaXB0QWxlcnQoZGlhbG9nKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIFdFQktJVF9TQ1JJUFRfRElBTE9HX0NPTkZJUk06Ci0gICAgICAgICAgICB0
ZXN0LT5zY3JpcHRDb25maXJtKGRpYWxvZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBXRUJLSVRfU0NSSVBUX0RJQUxPR19QUk9NUFQ6Ci0gICAgICAgICAgICB0ZXN0LT5zY3Jp
cHRQcm9tcHQoZGlhbG9nKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAg
ICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgbW91c2VUYXJnZXRDaGFu
Z2VkKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0LCBn
dWludCBtb2RpZmllcnMsIFVJQ2xpZW50VGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIGdfYXNz
ZXJ0KFdFQktJVF9JU19ISVRfVEVTVF9SRVNVTFQoaGl0VGVzdFJlc3VsdCkpOwotICAgICAgICB0
ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGhpdFRl
c3RSZXN1bHQpKTsKLQotICAgICAgICB0ZXN0LT5tX21vdXNlVGFyZ2V0SGl0VGVzdFJlc3VsdCA9
IGhpdFRlc3RSZXN1bHQ7Ci0gICAgICAgIHRlc3QtPm1fbW91c2VUYXJnZXRNb2RpZmllcnMgPSBt
b2RpZmllcnM7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Ci0g
ICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIHBlcm1pc3Npb25SZXF1ZXN0ZWQoV2ViS2l0V2Vi
VmlldyosIFdlYktpdFBlcm1pc3Npb25SZXF1ZXN0KiByZXF1ZXN0LCBVSUNsaWVudFRlc3QqIHRl
c3QpCi0gICAgewotICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfUEVSTUlTU0lPTl9SRVFVRVNU
KHJlcXVlc3QpKTsKLSAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RG
aW5pc2hlcyhHX09CSkVDVChyZXF1ZXN0KSk7Ci0KLSAgICAgICAgaWYgKHRlc3QtPm1fYWxsb3dQ
ZXJtaXNzaW9uUmVxdWVzdHMpCi0gICAgICAgICAgICB3ZWJraXRfcGVybWlzc2lvbl9yZXF1ZXN0
X2FsbG93KHJlcXVlc3QpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB3ZWJraXRfcGVybWlz
c2lvbl9yZXF1ZXN0X2RlbnkocmVxdWVzdCk7Ci0KLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAg
fQotCi0gICAgVUlDbGllbnRUZXN0KCkKLSAgICAgICAgOiBtX3NjcmlwdERpYWxvZ1R5cGUoV0VC
S0lUX1NDUklQVF9ESUFMT0dfQUxFUlQpCi0gICAgICAgICwgbV9zY3JpcHREaWFsb2dDb25maXJt
ZWQodHJ1ZSkKLSAgICAgICAgLCBtX2FsbG93UGVybWlzc2lvblJlcXVlc3RzKGZhbHNlKQotICAg
ICAgICAsIG1fbW91c2VUYXJnZXRNb2RpZmllcnMoMCkKLSAgICB7Ci0gICAgICAgIHdlYmtpdF9z
ZXR0aW5nc19zZXRfamF2YXNjcmlwdF9jYW5fb3Blbl93aW5kb3dzX2F1dG9tYXRpY2FsbHkod2Vi
a2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhtX3dlYlZpZXcpLCBUUlVFKTsKLSAgICAgICAgZ19z
aWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJjcmVhdGUiLCBHX0NBTExCQUNLKHZpZXdDcmVhdGVD
YWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgInNj
cmlwdC1kaWFsb2ciLCBHX0NBTExCQUNLKHNjcmlwdERpYWxvZyksIHRoaXMpOwotICAgICAgICBn
X3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgIm1vdXNlLXRhcmdldC1jaGFuZ2VkIiwgR19DQUxM
QkFDSyhtb3VzZVRhcmdldENoYW5nZWQpLCB0aGlzKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVj
dChtX3dlYlZpZXcsICJwZXJtaXNzaW9uLXJlcXVlc3QiLCBHX0NBTExCQUNLKHBlcm1pc3Npb25S
ZXF1ZXN0ZWQpLCB0aGlzKTsKLSAgICB9Ci0KLSAgICB+VUlDbGllbnRUZXN0KCkKLSAgICB7Ci0g
ICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3dlYlZpZXcsIEdf
U0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOwotICAgIH0KLQotICAgIHZvaWQg
d2FpdFVudGlsTWFpbkxvb3BGaW5pc2hlcygpCi0gICAgewotICAgICAgICBnX21haW5fbG9vcF9y
dW4obV9tYWluTG9vcCk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRFeHBlY3RlZFdpbmRvd1Byb3Bl
cnRpZXMoY29uc3QgV2luZG93UHJvcGVydGllcyYgd2luZG93UHJvcGVydGllcykKLSAgICB7Ci0g
ICAgICAgIG1fd2luZG93UHJvcGVydGllcyA9IHdpbmRvd1Byb3BlcnRpZXM7Ci0gICAgfQotCi0g
ICAgV2ViS2l0SGl0VGVzdFJlc3VsdCogbW92ZU1vdXNlQW5kV2FpdFVudGlsTW91c2VUYXJnZXRD
aGFuZ2VkKGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IG1vdXNlTW9kaWZpZXJzID0gMCkKLSAg
ICB7Ci0gICAgICAgIG1vdXNlTW92ZVRvKHgsIHksIG1vdXNlTW9kaWZpZXJzKTsKLSAgICAgICAg
Z19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwotICAgICAgICByZXR1cm4gbV9tb3VzZVRhcmdl
dEhpdFRlc3RSZXN1bHQuZ2V0KCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBHdGtXaWRnZXQqIHZp
ZXdDcmVhdGUoV2ViS2l0V2ViVmlldyogd2ViVmlldykKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0
KHdlYlZpZXcgPT0gbV93ZWJWaWV3KTsKLQotICAgICAgICBHdGtXaWRnZXQqIG5ld1dlYlZpZXcg
PSB3ZWJraXRfd2ViX3ZpZXdfbmV3X3dpdGhfY29udGV4dCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2Nv
bnRleHQod2ViVmlldykpOwotICAgICAgICBnX29iamVjdF9yZWZfc2luayhuZXdXZWJWaWV3KTsK
LQotICAgICAgICBtX3dlYlZpZXdFdmVudHMuYXBwZW5kKENyZWF0ZSk7Ci0KLSAgICAgICAgV2Vi
S2l0V2luZG93UHJvcGVydGllcyogd2luZG93UHJvcGVydGllcyA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfd2luZG93X3Byb3BlcnRpZXMoV0VCS0lUX1dFQl9WSUVXKG5ld1dlYlZpZXcpKTsKLSAgICAg
ICAgZ19hc3NlcnQod2luZG93UHJvcGVydGllcyk7Ci0gICAgICAgIGFzc2VydE9iamVjdElzRGVs
ZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qod2luZG93UHJvcGVydGllcykpOwotICAgICAg
ICBtX3dpbmRvd1Byb3BlcnRpZXNDaGFuZ2VkLmNsZWFyKCk7Ci0KLSAgICAgICAgZ19zaWduYWxf
Y29ubmVjdCh3aW5kb3dQcm9wZXJ0aWVzLCAibm90aWZ5IiwgR19DQUxMQkFDSyh3aW5kb3dQcm9w
ZXJ0aWVzTm90aWZ5Q2FsbGJhY2spLCB0aGlzKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChu
ZXdXZWJWaWV3LCAicmVhZHktdG8tc2hvdyIsIEdfQ0FMTEJBQ0sodmlld1JlYWR5VG9TaG93Q2Fs
bGJhY2spLCB0aGlzKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChuZXdXZWJWaWV3LCAiY2xv
c2UiLCBHX0NBTExCQUNLKHZpZXdDbG9zZUNhbGxiYWNrKSwgdGhpcyk7Ci0KLSAgICAgICAgcmV0
dXJuIG5ld1dlYlZpZXc7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpZXdSZWFkeVRvU2hv
dyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQotICAgIHsKLSAgICAgICAgZ19hc3NlcnQod2ViVmll
dyAhPSBtX3dlYlZpZXcpOwotCi0gICAgICAgIFdlYktpdFdpbmRvd1Byb3BlcnRpZXMqIHdpbmRv
d1Byb3BlcnRpZXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKHdlYlZp
ZXcpOwotICAgICAgICBnX2Fzc2VydCh3aW5kb3dQcm9wZXJ0aWVzKTsKLSAgICAgICAgaWYgKCFt
X3dpbmRvd1Byb3BlcnRpZXMuaXNOdWxsKCkpCi0gICAgICAgICAgICBXaW5kb3dQcm9wZXJ0aWVz
KHdpbmRvd1Byb3BlcnRpZXMpLmFzc2VydEVxdWFsKG1fd2luZG93UHJvcGVydGllcyk7Ci0KLSAg
ICAgICAgbV93ZWJWaWV3RXZlbnRzLmFwcGVuZChSZWFkeVRvU2hvdyk7Ci0gICAgfQotCi0gICAg
dmlydHVhbCB2b2lkIHZpZXdDbG9zZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQotICAgIHsKLSAg
ICAgICAgZ19hc3NlcnQod2ViVmlldyAhPSBtX3dlYlZpZXcpOwotCi0gICAgICAgIG1fd2ViVmll
d0V2ZW50cy5hcHBlbmQoQ2xvc2UpOwotICAgICAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsK
LQotICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOwotICAgIH0KLQotICAgIFZl
Y3RvcjxXZWJWaWV3RXZlbnRzPiBtX3dlYlZpZXdFdmVudHM7Ci0gICAgV2ViS2l0U2NyaXB0RGlh
bG9nVHlwZSBtX3NjcmlwdERpYWxvZ1R5cGU7Ci0gICAgYm9vbCBtX3NjcmlwdERpYWxvZ0NvbmZp
cm1lZDsKLSAgICBib29sIG1fYWxsb3dQZXJtaXNzaW9uUmVxdWVzdHM7Ci0gICAgV2luZG93UHJv
cGVydGllcyBtX3dpbmRvd1Byb3BlcnRpZXM7Ci0gICAgSGFzaFNldDxXVEY6OlN0cmluZz4gbV93
aW5kb3dQcm9wZXJ0aWVzQ2hhbmdlZDsKLSAgICBHUmVmUHRyPFdlYktpdEhpdFRlc3RSZXN1bHQ+
IG1fbW91c2VUYXJnZXRIaXRUZXN0UmVzdWx0OwotICAgIHVuc2lnbmVkIGludCBtX21vdXNlVGFy
Z2V0TW9kaWZpZXJzOwotfTsKLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdDcmVhdGVSZWFkeUNs
b3NlKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICB0ZXN0LT5sb2Fk
SHRtbCgiPGh0bWw+PGJvZHkgb25Mb2FkPVwid2luZG93Lm9wZW4oKS5jbG9zZSgpO1wiPjwvaHRt
bD4iLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxNYWluTG9vcEZpbmlzaGVzKCk7Ci0KLSAgICBW
ZWN0b3I8VUlDbGllbnRUZXN0OjpXZWJWaWV3RXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV93ZWJW
aWV3RXZlbnRzOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMyk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIFVJQ2xpZW50VGVzdDo6Q3JlYXRlKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgVUlDbGllbnRUZXN0OjpSZWFkeVRv
U2hvdyk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIFVJQ2xpZW50VGVzdDo6
Q2xvc2UpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gY2hlY2tNaW1lVHlwZUZvckZpbHRlcihHdGtG
aWxlRmlsdGVyKiBmaWx0ZXIsIGNvbnN0IGdjaGFyKiBtaW1lVHlwZSkKLXsKLSAgICBHdGtGaWxl
RmlsdGVySW5mbyBmaWx0ZXJJbmZvOwotICAgIGZpbHRlckluZm8uY29udGFpbnMgPSBHVEtfRklM
RV9GSUxURVJfTUlNRV9UWVBFOwotICAgIGZpbHRlckluZm8ubWltZV90eXBlID0gbWltZVR5cGU7
Ci0gICAgcmV0dXJuIGd0a19maWxlX2ZpbHRlcl9maWx0ZXIoZmlsdGVyLCAmZmlsdGVySW5mbyk7
Ci19Ci0KLWNsYXNzIE1vZGFsRGlhbG9nc1Rlc3Q6IHB1YmxpYyBVSUNsaWVudFRlc3QgewotcHVi
bGljOgotICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoTW9kYWxEaWFsb2dzVGVzdCk7Ci0KLSAg
ICBzdGF0aWMgdm9pZCBkaWFsb2dSdW5Bc01vZGFsQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgTW9kYWxEaWFsb2dzVGVzdCogdGVzdCkKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KHdl
YlZpZXcgIT0gdGVzdC0+bV93ZWJWaWV3KTsKLSAgICAgICAgdGVzdC0+bV93ZWJWaWV3RXZlbnRz
LmFwcGVuZChSdW5Bc01vZGFsKTsKLSAgICB9Ci0KLSAgICBHdGtXaWRnZXQqIHZpZXdDcmVhdGUo
V2ViS2l0V2ViVmlldyogd2ViVmlldykKLSAgICB7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcg
PT0gbV93ZWJWaWV3KTsKLQotICAgICAgICBHdGtXaWRnZXQqIG5ld1dlYlZpZXcgPSBVSUNsaWVu
dFRlc3Q6OnZpZXdDcmVhdGUod2ViVmlldyk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobmV3
V2ViVmlldywgInJ1bi1hcy1tb2RhbCIsIEdfQ0FMTEJBQ0soZGlhbG9nUnVuQXNNb2RhbENhbGxi
YWNrKSwgdGhpcyk7Ci0gICAgICAgIHJldHVybiBuZXdXZWJWaWV3OwotICAgIH0KLQotICAgIHZv
aWQgdmlld1JlYWR5VG9TaG93KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCi0gICAgewotICAgICAg
ICBnX2Fzc2VydCh3ZWJWaWV3ICE9IG1fd2ViVmlldyk7Ci0gICAgICAgIG1fd2ViVmlld0V2ZW50
cy5hcHBlbmQoUmVhZHlUb1Nob3cpOwotICAgIH0KLX07Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJW
aWV3QWxsb3dNb2RhbERpYWxvZ3MoTW9kYWxEaWFsb2dzVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKLXsKLSAgICBXZWJLaXRTZXR0aW5ncyogc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9hbGxv
d19tb2RhbF9kaWFsb2dzKHNldHRpbmdzLCBUUlVFKTsKLQotICAgIHRlc3QtPmxvYWRIdG1sKCI8
aHRtbD48Ym9keSBvbmxvYWQ9XCJ3aW5kb3cuc2hvd01vZGFsRGlhbG9nKCdkYXRhOnRleHQvaHRt
bCw8aHRtbD48Ym9keS8+PHNjcmlwdD53aW5kb3cuY2xvc2UoKTs8L3NjcmlwdD48L2h0bWw+Jylc
Ij48L2JvZHk+PC9odG1sPiIsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbE1haW5Mb29wRmluaXNo
ZXMoKTsKLQotICAgIFZlY3RvcjxVSUNsaWVudFRlc3Q6OldlYlZpZXdFdmVudHM+JiBldmVudHMg
PSB0ZXN0LT5tX3dlYlZpZXdFdmVudHM7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXpl
KCksID09LCA0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgVUlDbGllbnRU
ZXN0OjpDcmVhdGUpOwotICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBVSUNsaWVu
dFRlc3Q6OlJlYWR5VG9TaG93KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwg
VUlDbGllbnRUZXN0OjpSdW5Bc01vZGFsKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNd
LCA9PSwgVUlDbGllbnRUZXN0OjpDbG9zZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3
RGlzYWxsb3dNb2RhbERpYWxvZ3MoTW9kYWxEaWFsb2dzVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKLXsKLSAgICBXZWJLaXRTZXR0aW5ncyogc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyk7Ci0gICAgd2Via2l0X3NldHRpbmdzX3NldF9hbGxv
d19tb2RhbF9kaWFsb2dzKHNldHRpbmdzLCBGQUxTRSk7Ci0KLSAgICB0ZXN0LT5sb2FkSHRtbCgi
PGh0bWw+PGJvZHkgb25sb2FkPVwid2luZG93LnNob3dNb2RhbERpYWxvZygnZGF0YTp0ZXh0L2h0
bWwsPGh0bWw+PGJvZHkvPjxzY3JpcHQ+d2luZG93LmNsb3NlKCk7PC9zY3JpcHQ+PC9odG1sPicp
XCI+PC9ib2R5PjwvaHRtbD4iLCAwKTsKLSAgICAvLyBXZSBuZWVkIHRvIHVzZSBhIHRpbWVvdXQg
aGVyZSBiZWNhdXNlIHRoZSB2aWV3Q2xvc2UoKSBmdW5jdGlvbgotICAgIC8vIHdvbid0IGV2ZXIg
YmUgY2FsbGVkIGFzIHRoZSBkaWFsb2cgd29uJ3QgYmUgY3JlYXRlZC4KLSAgICB0ZXN0LT53YWl0
KDEpOwotCi0gICAgVmVjdG9yPFVJQ2xpZW50VGVzdDo6V2ViVmlld0V2ZW50cz4mIGV2ZW50cyA9
IHRlc3QtPm1fd2ViVmlld0V2ZW50czsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUo
KSwgPT0sIDApOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0phdmFTY3JpcHREaWFsb2dz
KFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICBzdGF0aWMgY29uc3Qg
Y2hhciogaHRtbE9uTG9hZEZvcm1hdCA9ICI8aHRtbD48Ym9keSBvbkxvYWQ9XCIlc1wiPjwvYm9k
eT48L2h0bWw+IjsKLSAgICBzdGF0aWMgY29uc3QgY2hhcioganNBbGVydEZvcm1hdCA9ICJhbGVy
dCgnJXMnKSI7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGpzQ29uZmlybUZvcm1hdCA9ICJkbyB7
IGNvbmZpcm1lZCA9IGNvbmZpcm0oJyVzJyk7IH0gd2hpbGUgKCFjb25maXJtZWQpOyBhbGVydCgn
Y29uZmlybWVkJyk7IjsKLSAgICBzdGF0aWMgY29uc3QgY2hhcioganNQcm9tcHRGb3JtYXQgPSAi
YWxlcnQocHJvbXB0KCclcycsICdkZWZhdWx0JykpOyI7Ci0KLSAgICB0ZXN0LT5tX3NjcmlwdERp
YWxvZ1R5cGUgPSBXRUJLSVRfU0NSSVBUX0RJQUxPR19BTEVSVDsKLSAgICBHT3duUHRyPGNoYXI+
IGFsZXJ0RGlhbG9nTWVzc2FnZShnX3N0cmR1cF9wcmludGYoanNBbGVydEZvcm1hdCwga0FsZXJ0
RGlhbG9nTWVzc2FnZSkpOwotICAgIEdPd25QdHI8Y2hhcj4gYWxlcnRIVE1MKGdfc3RyZHVwX3By
aW50ZihodG1sT25Mb2FkRm9ybWF0LCBhbGVydERpYWxvZ01lc3NhZ2UuZ2V0KCkpKTsKLSAgICB0
ZXN0LT5sb2FkSHRtbChhbGVydEhUTUwuZ2V0KCksIDApOwotICAgIHRlc3QtPndhaXRVbnRpbE1h
aW5Mb29wRmluaXNoZXMoKTsKLQotICAgIHRlc3QtPm1fc2NyaXB0RGlhbG9nVHlwZSA9IFdFQktJ
VF9TQ1JJUFRfRElBTE9HX0NPTkZJUk07Ci0gICAgR093blB0cjxjaGFyPiBjb25maXJtRGlhbG9n
TWVzc2FnZShnX3N0cmR1cF9wcmludGYoanNDb25maXJtRm9ybWF0LCBrQ29uZmlybURpYWxvZ01l
c3NhZ2UpKTsKLSAgICBHT3duUHRyPGNoYXI+IGNvbmZpcm1IVE1MKGdfc3RyZHVwX3ByaW50Ziho
dG1sT25Mb2FkRm9ybWF0LCBjb25maXJtRGlhbG9nTWVzc2FnZS5nZXQoKSkpOwotICAgIHRlc3Qt
PmxvYWRIdG1sKGNvbmZpcm1IVE1MLmdldCgpLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxNYWlu
TG9vcEZpbmlzaGVzKCk7Ci0KLSAgICB0ZXN0LT5tX3NjcmlwdERpYWxvZ1R5cGUgPSBXRUJLSVRf
U0NSSVBUX0RJQUxPR19QUk9NUFQ7Ci0gICAgR093blB0cjxjaGFyPiBwcm9tcHREaWFsb2dNZXNz
YWdlKGdfc3RyZHVwX3ByaW50Zihqc1Byb21wdEZvcm1hdCwga1Byb21wdERpYWxvZ01lc3NhZ2Up
KTsKLSAgICBHT3duUHRyPGNoYXI+IHByb21wdEhUTUwoZ19zdHJkdXBfcHJpbnRmKGh0bWxPbkxv
YWRGb3JtYXQsIHByb21wdERpYWxvZ01lc3NhZ2UuZ2V0KCkpKTsKLSAgICB0ZXN0LT5sb2FkSHRt
bChwcm9tcHRIVE1MLmdldCgpLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxNYWluTG9vcEZpbmlz
aGVzKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3V2luZG93UHJvcGVydGllcyhVSUNs
aWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIq
IHdpbmRvd1Byb3JwZXJ0aWVzU3RyaW5nID0gImxlZnQ9MTAwLHRvcD0xNTAsd2lkdGg9NDAwLGhl
aWdodD00MDAsbG9jYXRpb249bm8sbWVudWJhcj1ubyxzdGF0dXM9bm8sdG9vbGJhcj1ubyxzY3Jv
bGxiYXJzPW5vIjsKLSAgICBHZGtSZWN0YW5nbGUgZ2VvbWV0cnkgPSB7IDEwMCwgMTUwLCA0MDAs
IDQwMCB9OwotICAgIHRlc3QtPnNldEV4cGVjdGVkV2luZG93UHJvcGVydGllcyhVSUNsaWVudFRl
c3Q6OldpbmRvd1Byb3BlcnRpZXMoJmdlb21ldHJ5LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxz
ZSwgZmFsc2UsIHRydWUsIGZhbHNlKSk7Ci0KLSAgICBHT3duUHRyPGNoYXI+IGh0bWxTdHJpbmco
Z19zdHJkdXBfcHJpbnRmKCI8aHRtbD48Ym9keSBvbkxvYWQ9XCJ3aW5kb3cub3BlbignJywgJycs
ICclcycpLmNsb3NlKCk7XCI+PC9ib2R5PjwvaHRtbD4iLCB3aW5kb3dQcm9ycGVydGllc1N0cmlu
ZykpOwotICAgIHRlc3QtPmxvYWRIdG1sKGh0bWxTdHJpbmcuZ2V0KCksIDApOwotICAgIHRlc3Qt
PndhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMoKTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBw
cm9wZXJ0aWVzQ2hhbmdlZFtdID0gewotICAgICAgICAiZ2VvbWV0cnkiLCAibG9jYXRpb25iYXIt
dmlzaWJsZSIsICJtZW51YmFyLXZpc2libGUiLCAic3RhdHVzYmFyLXZpc2libGUiLCAidG9vbGJh
ci12aXNpYmxlIiwgInNjcm9sbGJhcnMtdmlzaWJsZSIKLSAgICB9OwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTKHByb3BlcnRpZXNDaGFuZ2VkKTsgKytpKQotICAgICAg
ICBnX2Fzc2VydCh0ZXN0LT5tX3dpbmRvd1Byb3BlcnRpZXNDaGFuZ2VkLmNvbnRhaW5zKHByb3Bl
cnRpZXNDaGFuZ2VkW2ldKSk7Ci0KLSAgICBWZWN0b3I8VUlDbGllbnRUZXN0OjpXZWJWaWV3RXZl
bnRzPiYgZXZlbnRzID0gdGVzdC0+bV93ZWJWaWV3RXZlbnRzOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHMuc2l6ZSgpLCA9PSwgMyk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwg
PT0sIFVJQ2xpZW50VGVzdDo6Q3JlYXRlKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFd
LCA9PSwgVUlDbGllbnRUZXN0OjpSZWFkeVRvU2hvdyk7Ci0gICAgZ19hc3NlcnRfY21waW50KGV2
ZW50c1syXSwgPT0sIFVJQ2xpZW50VGVzdDo6Q2xvc2UpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0
V2ViVmlld01vdXNlVGFyZ2V0KFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsK
LSAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoR1RLX1dJTkRPV19UT1BM
RVZFTCk7Ci0KLSAgICBjb25zdCBjaGFyKiBsaW5rc0hvdmVyZWRIVE1MID0KLSAgICAgICAgIjxo
dG1sPjxib2R5PiIKLSAgICAgICAgIiA8YSBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6
MTsgdG9wOjEnIGhyZWY9J2h0dHA6Ly93d3cud2Via2l0Z3RrLm9yZycgdGl0bGU9J1dlYktpdEdU
SysgVGl0bGUnPldlYktpdEdUSysgV2Vic2l0ZTwvYT4iCi0gICAgICAgICIgPGltZyBzdHlsZT0n
cG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjEwJyBzcmM9JzB4ZGVhZGJlZWYnIHdpZHRo
PTUgaGVpZ2h0PTU+PC9pbWc+IgotICAgICAgICAiIDxhIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0
ZTsgbGVmdDoxOyB0b3A6MjAnIGhyZWY9J2h0dHA6Ly93d3cud2Via2l0Z3RrLm9yZy9sb2dvJyB0
aXRsZT0nV2ViS2l0R1RLKyBMb2dvJz48aW1nIHNyYz0nMHhkZWFkYmVlZicgd2lkdGg9NSBoZWln
aHQ9NT48L2ltZz48L2E+IgotICAgICAgICAiIDxpbnB1dCBzdHlsZT0ncG9zaXRpb246YWJzb2x1
dGU7IGxlZnQ6MTsgdG9wOjMwJyBzaXplPScxMCc+PC9pbnB1dD4iCi0gICAgICAgICIgPGRpdiBz
dHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjUwOyB3aWR0aDozMDsgaGVpZ2h0
OjMwOyBvdmVyZmxvdzpzY3JvbGwnPiZuYnNwOzwvZGl2PiIKLSAgICAgICAgIiA8dmlkZW8gc3R5
bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoxMDAnIHdpZHRoPSczMDAnIGhlaWdo
dD0nMzAwJyBjb250cm9scz0nY29udHJvbHMnIHByZWxvYWQ9J25vbmUnPjxzb3VyY2Ugc3JjPSdt
b3ZpZS5vZ2cnIHR5cGU9J3ZpZGVvL29nZycgLz48L3ZpZGVvPiIKLSAgICAgICAgIjwvYm9keT48
L2h0bWw+IjsKLQotICAgIHRlc3QtPmxvYWRIdG1sKGxpbmtzSG92ZXJlZEhUTUwsICJmaWxlOi8v
LyIpOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgLy8gTW92ZSBv
dmVyIGxpbmsuCi0gICAgV2ViS2l0SGl0VGVzdFJlc3VsdCogaGl0VGVzdFJlc3VsdCA9IHRlc3Qt
Pm1vdmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCgxLCAxKTsKLSAgICBnX2Fz
c2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0
KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFn
ZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Y29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9o
aXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfdXJpKGhpdFRl
c3RSZXN1bHQpLCA9PSwgImh0dHA6Ly93d3cud2Via2l0Z3RrLm9yZy8iKTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbGlua190aXRsZShoaXRUZXN0UmVz
dWx0KSwgPT0sICJXZWJLaXRHVEsrIFRpdGxlIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfbGFiZWwoaGl0VGVzdFJlc3VsdCksID09LCAiV2Vi
S2l0R1RLKyBXZWJzaXRlIik7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPm1fbW91c2VUYXJnZXRNb2Rp
ZmllcnMpOwotCi0gICAgLy8gTW92ZSBvdXQgb2YgdGhlIGxpbmsuCi0gICAgaGl0VGVzdFJlc3Vs
dCA9IHRlc3QtPm1vdmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCgwLCAwKTsK
LSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2xpbmsoaGl0
VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRl
eHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rl
c3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0
KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3Vs
dCkpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX21vdXNlVGFyZ2V0TW9kaWZpZXJzKTsKLQotICAg
IC8vIE1vdmUgb3ZlciBpbWFnZSB3aXRoIEdES19DT05UUk9MX01BU0suCi0gICAgaGl0VGVzdFJl
c3VsdCA9IHRlc3QtPm1vdmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCgxLCAx
MCwgR0RLX0NPTlRST0xfTUFTSyk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1
bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdf
YXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJl
c3VsdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNf
ZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3Rf
cmVzdWx0X2NvbnRleHRfaXNfc2Nyb2xsYmFyKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfaW1hZ2VfdXJpKGhpdFRlc3RSZXN1
bHQpLCA9PSwgImZpbGU6Ly8vMHhkZWFkYmVlZiIpOwotICAgIGdfYXNzZXJ0KHRlc3QtPm1fbW91
c2VUYXJnZXRNb2RpZmllcnMgJiBHREtfQ09OVFJPTF9NQVNLKTsKLQotICAgIC8vIE1vdmUgb3Zl
ciBpbWFnZSBsaW5rLgotICAgIGhpdFRlc3RSZXN1bHQgPSB0ZXN0LT5tb3ZlTW91c2VBbmRXYWl0
VW50aWxNb3VzZVRhcmdldENoYW5nZWQoMSwgMjApOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9oaXRf
dGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2Vy
dCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkp
OwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEo
aGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2Nv
bnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfc2Nyb2xsYmFyKGhpdFRlc3RSZXN1bHQpKTsKLSAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbGlua191cmkoaGl0
VGVzdFJlc3VsdCksID09LCAiaHR0cDovL3d3dy53ZWJraXRndGsub3JnL2xvZ28iKTsKLSAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfaW1hZ2VfdXJpKGhpdFRl
c3RSZXN1bHQpLCA9PSwgImZpbGU6Ly8vMHhkZWFkYmVlZiIpOwotICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX3RpdGxlKGhpdFRlc3RSZXN1bHQpLCA9
PSwgIldlYktpdEdUSysgTG9nbyIpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVz
dWx0X2dldF9saW5rX2xhYmVsKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghdGVzdC0+
bV9tb3VzZVRhcmdldE1vZGlmaWVycyk7Ci0KLSAgICAvLyBNb3ZlIG92ZXIgbWVkaWEuCi0gICAg
aGl0VGVzdFJlc3VsdCA9IHRlc3QtPm1vdmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hh
bmdlZCgxLCAxMDApOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRl
eHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVz
dF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQo
d2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsK
LSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2VkaXRhYmxl
KGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9j
b250ZXh0X2lzX3Njcm9sbGJhcihoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X21lZGlhX3VyaShoaXRUZXN0UmVzdWx0KSwgPT0s
ICJmaWxlOi8vL21vdmllLm9nZyIpOwotICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX21vdXNlVGFyZ2V0
TW9kaWZpZXJzKTsKLQotICAgIC8vIE1vdmVyIG92ZXIgaW5wdXQuCi0gICAgaGl0VGVzdFJlc3Vs
dCA9IHRlc3QtPm1vdmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCg1LCAzNSk7
Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhp
dFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250
ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90
ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2Vy
dCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX3Njcm9sbGJhcihoaXRUZXN0UmVz
dWx0KSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX2Vk
aXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCghdGVzdC0+bV9tb3VzZVRhcmdl
dE1vZGlmaWVycyk7Ci0KLSAgICAvLyBNb3ZlIG92ZXIgc2Nyb2xsYmFyLgotICAgIGhpdFRlc3RS
ZXN1bHQgPSB0ZXN0LT5tb3ZlTW91c2VBbmRXYWl0VW50aWxNb3VzZVRhcmdldENoYW5nZWQoNSwg
NzUpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGlu
ayhoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRf
Y29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF9o
aXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19h
c3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0
UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lz
X3Njcm9sbGJhcihoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIXRlc3QtPm1fbW91c2VU
YXJnZXRNb2RpZmllcnMpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1Blcm1pc3Npb25S
ZXF1ZXN0cyhVSUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCi17Ci0gICAgLy8gU29t
ZSB2ZXJzaW9ucyBvZiBnZW9jbHVlIGdpdmUgYSBydW50aW1lIHdhcm5pbmcgYmVjYXVzZSBpdCB0
cmllcwotICAgIC8vIHRvIHJlZ2lzdGVyIHRoZSBlcnJvciBxdWFyayB0d2ljZS4gU2VlIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTg1OC4KLSAgICAvLyBNYWtlIHdh
cm5pbmdzIG5vbi1mYXRhbCBmb3IgdGhpcyB0ZXN0IHRvIG1ha2UgaXQgcGFzcy4KLSAgICB0ZXN0
LT5yZW1vdmVMb2dGYXRhbEZsYWcoR19MT0dfTEVWRUxfV0FSTklORyk7Ci0gICAgdGVzdC0+c2hv
d0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGdl
b2xvY2F0aW9uUmVxdWVzdEhUTUwgPQotICAgICAgICAiPGh0bWw+IgotICAgICAgICAiICA8c2Ny
aXB0PiIKLSAgICAgICAgIiAgZnVuY3Rpb24gcnVuVGVzdCgpIgotICAgICAgICAiICB7IgotICAg
ICAgICAiICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZnVuY3Rp
b24ocCkgeyBkb2N1bWVudC50aXRsZSA9IFwiT0tcIiB9LCIKLSAgICAgICAgIiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGUpIHsgZG9jdW1lbnQu
dGl0bGUgPSBlLmNvZGUgfSk7IgotICAgICAgICAiICB9IgotICAgICAgICAiICA8L3NjcmlwdD4i
Ci0gICAgICAgICIgIDxib2R5IG9ubG9hZD0ncnVuVGVzdCgpOyc+PC9ib2R5PiIKLSAgICAgICAg
IjwvaHRtbD4iOwotCi0gICAgLy8gVGVzdCBkZW55aW5nIGEgcGVybWlzc2lvbiByZXF1ZXN0Lgot
ICAgIHRlc3QtPm1fYWxsb3dQZXJtaXNzaW9uUmVxdWVzdHMgPSBmYWxzZTsKLSAgICB0ZXN0LT5s
b2FkSHRtbChnZW9sb2NhdGlvblJlcXVlc3RIVE1MLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxU
aXRsZUNoYW5nZWQoKTsKLQotICAgIC8vIEFjY29yZGluZyB0byB0aGUgR2VvbG9jYXRpb24gQVBJ
IHNwZWNpZmljYXRpb24sICcxJyBpcyB0aGUKLSAgICAvLyBlcnJvciBjb2RlIHJldHVybmVkIGZv
ciB0aGUgUEVSTUlTU0lPTl9ERU5JRUQgZXJyb3IuCi0gICAgLy8gaHR0cDovL2Rldi53My5vcmcv
Z2VvL2FwaS9zcGVjLXNvdXJjZS5odG1sI3Bvc2l0aW9uX2Vycm9yX2ludGVyZmFjZQotICAgIGNv
bnN0IGdjaGFyKiByZXN1bHQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2Vi
Vmlldyk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHJlc3VsdCwgPT0sICIxIik7Ci0KLSAgICAvLyBU
ZXN0IGFsbG93aW5nIGEgcGVybWlzc2lvbiByZXF1ZXN0LgotICAgIHRlc3QtPm1fYWxsb3dQZXJt
aXNzaW9uUmVxdWVzdHMgPSB0cnVlOwotICAgIHRlc3QtPmxvYWRIdG1sKGdlb2xvY2F0aW9uUmVx
dWVzdEhUTUwsIDApOwotICAgIHRlc3QtPndhaXRVbnRpbFRpdGxlQ2hhbmdlZCgpOwotCi0gICAg
Ly8gQ2hlY2sgdGhhdCB3ZSBkaWQgbm90IGdldCB0aGUgUEVSTUlTU0lPTl9ERU5JRUQgZXJyb3Ig
bm93LgotICAgIHJlc3VsdCA9IHdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJW
aWV3KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIocmVzdWx0LCAhPSwgIjEiKTsKLSAgICB0ZXN0LT5h
ZGRMb2dGYXRhbEZsYWcoR19MT0dfTEVWRUxfV0FSTklORyk7Ci19Ci0KIHN0YXRpYyB2b2lkIHRl
c3RXZWJWaWV3Wm9vbUxldmVsKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogewog
ICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF93ZWJfdmlld19nZXRfem9vbV9sZXZlbCh0ZXN0
LT5tX3dlYlZpZXcpLCA9PSwgMSk7CkBAIC02ODIsMTIxICsxNTMsNiBAQCBzdGF0aWMgdm9pZCB0
ZXN0V2ViVmlld1J1bkphdmFTY3JpcHQoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
CiAgICAgZ19hc3NlcnRfZXJyb3IoZXJyb3IuZ2V0KCksIFdFQktJVF9KQVZBU0NSSVBUX0VSUk9S
LCBXRUJLSVRfSkFWQVNDUklQVF9FUlJPUl9TQ1JJUFRfRkFJTEVEKTsKIH0KIAotY2xhc3MgRmls
ZUNob29zZXJUZXN0OiBwdWJsaWMgVUlDbGllbnRUZXN0IHsKLXB1YmxpYzoKLSAgICBNQUtFX0dM
SUJfVEVTVF9GSVhUVVJFKEZpbGVDaG9vc2VyVGVzdCk7Ci0KLSAgICBGaWxlQ2hvb3NlclRlc3Qo
KQotICAgIHsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJydW4tZmlsZS1j
aG9vc2VyIiwgR19DQUxMQkFDSyhydW5GaWxlQ2hvb3NlckNhbGxiYWNrKSwgdGhpcyk7Ci0gICAg
fQotCi0gICAgc3RhdGljIGdib29sZWFuIHJ1bkZpbGVDaG9vc2VyQ2FsbGJhY2soV2ViS2l0V2Vi
VmlldyosIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCwgRmlsZUNob29zZXJUZXN0
KiB0ZXN0KQotICAgIHsKLSAgICAgICAgdGVzdC0+cnVuRmlsZUNob29zZXIocmVxdWVzdCk7Ci0g
ICAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLQotICAgIHZvaWQgcnVuRmlsZUNob29zZXIoV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQotICAgIHsKLSAgICAgICAgYXNzZXJ0T2Jq
ZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChyZXF1ZXN0KSk7Ci0gICAgICAg
IG1fZmlsZUNob29zZXJSZXF1ZXN0ID0gcmVxdWVzdDsKLSAgICAgICAgZ19tYWluX2xvb3BfcXVp
dChtX21haW5Mb29wKTsKLSAgICB9Ci0KLSAgICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIGNs
aWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0KGludCB4LCBpbnQgeSkK
LSAgICB7Ci0gICAgICAgIGNsaWNrTW91c2VCdXR0b24oeCwgeSk7Ci0gICAgICAgIGdfbWFpbl9s
b29wX3J1bihtX21haW5Mb29wKTsKLSAgICAgICAgcmV0dXJuIG1fZmlsZUNob29zZXJSZXF1ZXN0
LmdldCgpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBHUmVmUHRyPFdlYktpdEZpbGVDaG9vc2Vy
UmVxdWVzdD4gbV9maWxlQ2hvb3NlclJlcXVlc3Q7Ci19OwotCi1zdGF0aWMgdm9pZCB0ZXN0V2Vi
Vmlld0ZpbGVDaG9vc2VyUmVxdWVzdChGaWxlQ2hvb3NlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCi17Ci0gICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7Ci0gICAg
c3RhdGljIGNvbnN0IGNoYXIqIGZpbGVDaG9vc2VySFRNTEZvcm1hdCA9ICI8aHRtbD48Ym9keT48
aW5wdXQgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDttYXJnaW46MDtwYWRk
aW5nOjAnIHR5cGU9J2ZpbGUnICVzLz48L2JvZHk+PC9odG1sPiI7Ci0KLSAgICAvLyBNdWx0aXBs
ZSBzZWxlY3Rpb25zIG5vdCBhbGxvd2VkLCBubyBNSU1FIGZpbHRlcmluZy4KLSAgICBHT3duUHRy
PGNoYXI+IHNpbXBsZUZpbGVVcGxvYWRIVE1MKGdfc3RyZHVwX3ByaW50ZihmaWxlQ2hvb3NlckhU
TUxGb3JtYXQsICIiKSk7Ci0gICAgdGVzdC0+bG9hZEh0bWwoc2ltcGxlRmlsZVVwbG9hZEhUTUwu
Z2V0KCksIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIFdlYktp
dEZpbGVDaG9vc2VyUmVxdWVzdCogZmlsZUNob29zZXJSZXF1ZXN0ID0gdGVzdC0+Y2xpY2tNb3Vz
ZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QoNSwgNSk7Ci0gICAgZ19hc3NlcnQo
IXdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKGZpbGVDaG9v
c2VyUmVxdWVzdCkpOwotCi0gICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBtaW1lVHlwZXMgPSB3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMoZmlsZUNob29zZXJSZXF1ZXN0
KTsKLSAgICBnX2Fzc2VydCghbWltZVR5cGVzKTsKLSAgICBHdGtGaWxlRmlsdGVyKiBmaWx0ZXIg
PSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21pbWVfdHlwZXNfZmlsdGVyKGZpbGVD
aG9vc2VyUmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoIWZpbHRlcik7Ci0gICAgY29uc3QgZ2NoYXIq
IGNvbnN0KiBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9z
ZWxlY3RlZF9maWxlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KCFzZWxlY3Rl
ZEZpbGVzKTsKLSAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsKGZpbGVDaG9v
c2VyUmVxdWVzdCk7Ci0KLSAgICAvLyBNdWx0aXBsZSBzZWxlY3Rpb25zIGFsbG93ZWQsIG5vIE1J
TUUgZmlsdGVyaW5nLCBzb21lIHByZS1zZWxlY3RlZCBmaWxlcy4KLSAgICBHT3duUHRyPGNoYXI+
IG11bHRpcGxlU2VsZWN0aW9uRmlsZVVwbG9hZEhUTUwoZ19zdHJkdXBfcHJpbnRmKGZpbGVDaG9v
c2VySFRNTEZvcm1hdCwgIm11bHRpcGxlIikpOwotICAgIHRlc3QtPmxvYWRIdG1sKG11bHRpcGxl
U2VsZWN0aW9uRmlsZVVwbG9hZEhUTUwuZ2V0KCksIDApOwotICAgIHRlc3QtPndhaXRVbnRpbExv
YWRGaW5pc2hlZCgpOwotICAgIGZpbGVDaG9vc2VyUmVxdWVzdCA9IHRlc3QtPmNsaWNrTW91c2VC
dXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0KDUsIDUpOwotICAgIGdfYXNzZXJ0KHdl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKGZpbGVDaG9vc2Vy
UmVxdWVzdCkpOwotCi0gICAgbWltZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2dldF9taW1lX3R5cGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoIW1pbWVU
eXBlcyk7Ci0gICAgZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1l
X3R5cGVzX2ZpbHRlcihmaWxlQ2hvb3NlclJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KCFmaWx0ZXIp
OwotICAgIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3Nl
bGVjdGVkX2ZpbGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoIXNlbGVjdGVk
RmlsZXMpOwotCi0gICAgLy8gU2VsZWN0IHNvbWUgZmlsZXMuCi0gICAgY29uc3QgZ2NoYXIqIGZp
bGVzVG9TZWxlY3RbNF0gPSB7ICIvZm9vIiwgIi9mb28vYmFyIiwgIi9mb28vYmFyL2JheiIsIDAg
fTsKLSAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3Rfc2VsZWN0X2ZpbGVzKGZpbGVDaG9v
c2VyUmVxdWVzdCwgZmlsZXNUb1NlbGVjdCk7Ci0KLSAgICAvLyBDaGVjayB0aGUgZmlsZXMgdGhh
dCBoYXZlIGJlZW4ganVzdCBzZWxlY3RlZC4KLSAgICBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhmaWxlQ2hvb3NlclJlcXVlc3Qp
OwotICAgIGdfYXNzZXJ0KHNlbGVjdGVkRmlsZXMpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxl
Y3RlZEZpbGVzWzBdLCA9PSwgIi9mb28iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRG
aWxlc1sxXSwgPT0sICIvZm9vL2JhciIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZp
bGVzWzJdLCA9PSwgIi9mb28vYmFyL2JheiIpOwotICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVz
WzNdKTsKLQotICAgIC8vIFBlcmZvcm0gYW5vdGhlciByZXF1ZXN0IHRvIGNoZWNrIGlmIHRoZSBs
aXN0IG9mIGZpbGVzIHNlbGVjdGVkCi0gICAgLy8gaW4gdGhlIHByZXZpb3VzIHN0ZXAgYXBwZWFy
cyBub3cgYXMgcGFydCBvZiB0aGUgbmV3IHJlcXVlc3QuCi0gICAgZmlsZUNob29zZXJSZXF1ZXN0
ID0gdGVzdC0+Y2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QoNSwg
NSk7Ci0gICAgc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRf
c2VsZWN0ZWRfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKLSAgICBnX2Fzc2VydChzZWxlY3Rl
ZEZpbGVzKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1swXSwgPT0sICIvZm9v
Iik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMV0sID09LCAiL2Zvby9iYXIi
KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1syXSwgPT0sICIvZm9vL2Jhci9i
YXoiKTsKLSAgICBnX2Fzc2VydCghc2VsZWN0ZWRGaWxlc1szXSk7Ci0gICAgd2Via2l0X2ZpbGVf
Y2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbChmaWxlQ2hvb3NlclJlcXVlc3QpOwotCi0gICAgLy8gTXVs
dGlwbGUgc2VsZWN0aW9ucyBub3QgYWxsb3dlZCwgb25seSBhY2NlcHQgaW1hZ2VzLCBhdWRpbyBh
bmQgdmlkZW8gZmlsZXMuLgotICAgIEdPd25QdHI8Y2hhcj4gbWltZUZpbHRlcmVkRmlsZVVwbG9h
ZEhUTUwoZ19zdHJkdXBfcHJpbnRmKGZpbGVDaG9vc2VySFRNTEZvcm1hdCwgImFjY2VwdD0nYXVk
aW8vKix2aWRlby8qLGltYWdlLyonIikpOwotICAgIHRlc3QtPmxvYWRIdG1sKG1pbWVGaWx0ZXJl
ZEZpbGVVcGxvYWRIVE1MLmdldCgpLCAwKTsKLSAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNo
ZWQoKTsKLSAgICBmaWxlQ2hvb3NlclJlcXVlc3QgPSB0ZXN0LT5jbGlja01vdXNlQnV0dG9uQW5k
V2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCg1LCA1KTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2Zp
bGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGUoZmlsZUNob29zZXJSZXF1ZXN0
KSk7Ci0KLSAgICBtaW1lVHlwZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X21p
bWVfdHlwZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKLSAgICBnX2Fzc2VydChtaW1lVHlwZXMpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cihtaW1lVHlwZXNbMF0sID09LCAiYXVkaW8vKiIpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cihtaW1lVHlwZXNbMV0sID09LCAidmlkZW8vKiIpOwotICAgIGdfYXNzZXJ0
X2NtcHN0cihtaW1lVHlwZXNbMl0sID09LCAiaW1hZ2UvKiIpOwotICAgIGdfYXNzZXJ0KCFtaW1l
VHlwZXNbM10pOwotCi0gICAgZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dl
dF9taW1lX3R5cGVzX2ZpbHRlcihmaWxlQ2hvb3NlclJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KEdU
S19JU19GSUxFX0ZJTFRFUihmaWx0ZXIpKTsKLSAgICBnX2Fzc2VydChjaGVja01pbWVUeXBlRm9y
RmlsdGVyKGZpbHRlciwgImF1ZGlvLyoiKSk7Ci0gICAgZ19hc3NlcnQoY2hlY2tNaW1lVHlwZUZv
ckZpbHRlcihmaWx0ZXIsICJ2aWRlby8qIikpOwotICAgIGdfYXNzZXJ0KGNoZWNrTWltZVR5cGVG
b3JGaWx0ZXIoZmlsdGVyLCAiaW1hZ2UvKiIpKTsKLQotICAgIHNlbGVjdGVkRmlsZXMgPSB3ZWJr
aXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKGZpbGVDaG9vc2VyUmVx
dWVzdCk7Ci0gICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXMpOwotICAgIHdlYmtpdF9maWxlX2No
b29zZXJfcmVxdWVzdF9jYW5jZWwoZmlsZUNob29zZXJSZXF1ZXN0KTsKLX0KLQogY2xhc3MgRnVs
bFNjcmVlbkNsaWVudFRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CiBwdWJsaWM6CiAgICAgTUFL
RV9HTElCX1RFU1RfRklYVFVSRShGdWxsU2NyZWVuQ2xpZW50VGVzdCk7CkBAIC0xMjMzLDIzOCAr
NTg5LDEzIEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3U25hcHNob3QoU25hcHNob3RXZWJWaWV3
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBnX2Fzc2VydCh0ZXN0LT5nZXRTbmFwc2hv
dEFuZENhbmNlbCgpKTsKIH0KIAotY2xhc3MgQXV0aGVudGljYXRpb25UZXN0OiBwdWJsaWMgTG9h
ZFRyYWNraW5nVGVzdCB7Ci1wdWJsaWM6Ci0gICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShBdXRo
ZW50aWNhdGlvblRlc3QpOwotCi0gICAgQXV0aGVudGljYXRpb25UZXN0KCkKLSAgICB7Ci0gICAg
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiYXV0aGVudGljYXRlIiwgR19DQUxMQkFD
SyhydW5BdXRoZW50aWNhdGlvbkNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgfkF1dGhl
bnRpY2F0aW9uVGVzdCgpCi0gICAgewotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25u
ZWN0X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0
aGlzKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgaW50IGF1dGhlbnRpY2F0aW9uUmV0cmllczsKLQot
ICAgIHZvaWQgbG9hZFVSSShjb25zdCBjaGFyKiB1cmkpCi0gICAgewotICAgICAgICAvLyBSZXNl
dCB0aGUgcmV0cnkgY291bnQgb2YgdGhlIGZha2Ugc2VydmVyIHdoZW4gYSBwYWdlIGlzIGxvYWRl
ZC4KLSAgICAgICAgYXV0aGVudGljYXRpb25SZXRyaWVzID0gMDsKLSAgICAgICAgTG9hZFRyYWNr
aW5nVGVzdDo6bG9hZFVSSSh1cmkpOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBydW5B
dXRoZW50aWNhdGlvbkNhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRBdXRoZW50aWNhdGlv
blJlcXVlc3QqIHJlcXVlc3QsIEF1dGhlbnRpY2F0aW9uVGVzdCogdGVzdCkKLSAgICB7Ci0gICAg
ICAgIHRlc3QtPnJ1bkF1dGhlbnRpY2F0aW9uKHJlcXVlc3QpOwotICAgICAgICByZXR1cm4gVFJV
RTsKLSAgICB9Ci0KLSAgICB2b2lkIHJ1bkF1dGhlbnRpY2F0aW9uKFdlYktpdEF1dGhlbnRpY2F0
aW9uUmVxdWVzdCogcmVxdWVzdCkKLSAgICB7Ci0gICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRl
ZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocmVxdWVzdCkpOwotICAgICAgICBtX2F1dGhlbnRp
Y2F0aW9uUmVxdWVzdCA9IHJlcXVlc3Q7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWlu
TG9vcCk7Ci0gICAgfQotCi0gICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiB3YWl0Rm9y
QXV0aGVudGljYXRpb25SZXF1ZXN0KCkKLSAgICB7Ci0gICAgICAgIGdfbWFpbl9sb29wX3J1biht
X21haW5Mb29wKTsKLSAgICAgICAgcmV0dXJuIG1fYXV0aGVudGljYXRpb25SZXF1ZXN0LmdldCgp
OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBHUmVmUHRyPFdlYktpdEF1dGhlbnRpY2F0aW9uUmVx
dWVzdD4gbV9hdXRoZW50aWNhdGlvblJlcXVlc3Q7Ci19OwotCi1pbnQgQXV0aGVudGljYXRpb25U
ZXN0OjphdXRoZW50aWNhdGlvblJldHJpZXMgPSAwOwotCi1zdGF0aWMgY29uc3QgY2hhciBhdXRo
VGVzdFVzZXJuYW1lW10gPSAidXNlcm5hbWUiOwotc3RhdGljIGNvbnN0IGNoYXIgYXV0aFRlc3RQ
YXNzd29yZFtdID0gInBhc3N3b3JkIjsKLXN0YXRpYyBjb25zdCBjaGFyIGF1dGhFeHBlY3RlZFN1
Y2Nlc3NUaXRsZVtdID0gIldlYktpdDJHdGsrIEF1dGhlbnRpY2F0aW9uIHRlc3QiOwotc3RhdGlj
IGNvbnN0IGNoYXIgYXV0aEV4cGVjdGVkRmFpbHVyZVRpdGxlW10gPSAiNDAxIEF1dGhvcml6YXRp
b24gUmVxdWlyZWQiOwotc3RhdGljIGNvbnN0IGNoYXIgYXV0aEV4cGVjdGVkQXV0aG9yaXphdGlv
bltdID0gIkJhc2ljIGRYTmxjbTVoYldVNmNHRnpjM2R2Y21RPSI7IC8vIEJhc2U2NCBlbmNvZGlu
ZyBvZiAidXNlcm5hbWU6cGFzc3dvcmQiLgotc3RhdGljIGNvbnN0IGNoYXIgYXV0aFN1Y2Nlc3NI
VE1MU3RyaW5nW10gPQotICAgICI8aHRtbD4iCi0gICAgIjxoZWFkPjx0aXRsZT5XZWJLaXQyR3Rr
KyBBdXRoZW50aWNhdGlvbiB0ZXN0PC90aXRsZT48L2hlYWQ+IgotICAgICI8Ym9keT48L2JvZHk+
PC9odG1sPiI7Ci1zdGF0aWMgY29uc3QgY2hhciBhdXRoRmFpbHVyZUhUTUxTdHJpbmdbXSA9Ci0g
ICAgIjxodG1sPiIKLSAgICAiPGhlYWQ+PHRpdGxlPjQwMSBBdXRob3JpemF0aW9uIFJlcXVpcmVk
PC90aXRsZT48L2hlYWQ+IgotICAgICI8Ym9keT48L2JvZHk+PC9odG1sPiI7Ci0KLXN0YXRpYyB2
b2lkIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25SZXF1ZXN0KEF1dGhlbnRpY2F0aW9uVGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICAvLyBUZXN0IGF1dGhlbnRpY2F0aW9uIHJlcXVl
c3QgZ2V0dGVycyBtYXRjaCBzb3VwIGF1dGhlbnRpY2F0aW9uIGhlYWRlci4KLSAgICB0ZXN0LT5s
b2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7
Ci0gICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0ID0gdGVzdC0+d2FpdEZv
ckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfYXV0
aGVudGljYXRpb25fcmVxdWVzdF9nZXRfaG9zdChyZXF1ZXN0KSwgPT0sIHNvdXBfdXJpX2dldF9o
b3N0KGtTZXJ2ZXItPmJhc2VVUkkoKSkpOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2F1
dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3BvcnQocmVxdWVzdCksID09LCBzb3VwX3VyaV9nZXRf
cG9ydChrU2VydmVyLT5iYXNlVVJJKCkpKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2F1
dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3JlYWxtKHJlcXVlc3QpLCA9PSwgIm15IHJlYWxtIik7
Ci0gICAgZ19hc3NlcnQod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3NjaGVtZShy
ZXF1ZXN0KSA9PSBXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX0hUVFBfQkFTSUMpOwotICAg
IGdfYXNzZXJ0KCF3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9pc19mb3JfcHJveHkocmVx
dWVzdCkpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9pc19y
ZXRyeShyZXF1ZXN0KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QXV0aGVudGljYXRp
b25DYW5jZWwoQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQotewotICAg
IC8vIFRlc3QgY2FuY2VsLgotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0
aCgiL2F1dGgtdGVzdC5odG1sIikuZGF0YSgpKTsKLSAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJl
cXVlc3QqIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0KCk7Ci0g
ICAgd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuY2VsKHJlcXVlc3QpOwotICAgIC8v
IFNlcnZlciBkb2Vzbid0IGFzayBmb3IgbmV3IGNyZWRlbnRpYWxzLgotICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2
ZW50cy5zaXplKCksID09LCAzKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZl
bnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2lu
Z1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZEZhaWxlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3Qt
Pm1fbG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Ci0K
LSAgICBnX2Fzc2VydF9lcnJvcih0ZXN0LT5tX2Vycm9yLmdldCgpLCBXRUJLSVRfTkVUV09SS19F
UlJPUiwgV0VCS0lUX05FVFdPUktfRVJST1JfQ0FOQ0VMTEVEKTsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvbkZhaWx1cmUoQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQotewotICAgIC8vIFRlc3QgYXV0aGVudGljYXRpb24gZmFpbHVyZXMu
Ci0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0
bWwiKS5kYXRhKCkpOwotICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCA9
IHRlc3QtPndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKTsKLSAgICBnX2Fzc2VydCghd2Vi
a2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfaXNfcmV0cnkocmVxdWVzdCkpOwotICAgIFdlYktp
dENyZWRlbnRpYWwqIGNyZWRlbnRpYWwgPSB3ZWJraXRfY3JlZGVudGlhbF9uZXcoYXV0aFRlc3RV
c2VybmFtZSwgIndyb25ncGFzc3dvcmQiLCBXRUJLSVRfQ1JFREVOVElBTF9QRVJTSVNURU5DRV9O
T05FKTsKLSAgICB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9hdXRoZW50aWNhdGUocmVx
dWVzdCwgY3JlZGVudGlhbCk7Ci0gICAgd2Via2l0X2NyZWRlbnRpYWxfZnJlZShjcmVkZW50aWFs
KTsKLSAgICAvLyBFeHBlY3QgYSBzZWNvbmQgYXV0aGVudGljYXRpb24gcmVxdWVzdC4KLSAgICBy
ZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOwotICAgIGdfYXNz
ZXJ0KHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2lzX3JldHJ5KHJlcXVlc3QpKTsKLSAg
ICAvLyBUZXN0IHNlY29uZCBmYWlsdXJlLgotICAgIGNyZWRlbnRpYWwgPSB3ZWJraXRfY3JlZGVu
dGlhbF9uZXcoYXV0aFRlc3RVc2VybmFtZSwgIndyb25ncGFzc3dvcmQyIiwgV0VCS0lUX0NSRURF
TlRJQUxfUEVSU0lTVEVOQ0VfTk9ORSk7Ci0gICAgd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVl
c3RfYXV0aGVudGljYXRlKHJlcXVlc3QsIGNyZWRlbnRpYWwpOwotICAgIHdlYmtpdF9jcmVkZW50
aWFsX2ZyZWUoY3JlZGVudGlhbCk7Ci0gICAgLy8gRXhwZWN0IGF1dGhlbnRpY2F0aW9uIGZhaWxl
ZCBwYWdlLgotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotCi0gICAgZ19hc3Nl
cnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCksID09LCAzKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJv
dmlzaW9uYWxMb2FkU3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2
ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQpOwotICAgIGdfYXNz
ZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpM
b2FkRmluaXNoZWQpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Rp
dGxlKHRlc3QtPm1fd2ViVmlldyksID09LCBhdXRoRXhwZWN0ZWRGYWlsdXJlVGl0bGUpOwotfQot
Ci1zdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uTm9DcmVkZW50aWFsKEF1dGhl
bnRpY2F0aW9uVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICAvLyBUZXN0IGNvbnRp
bnVlIHdpdGhvdXQgY3JlZGVudGlhbHMuCi0gICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRV
UklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOwotICAgIFdlYktpdEF1dGhlbnRp
Y2F0aW9uUmVxdWVzdCogcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVl
c3QoKTsKLSAgICB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9hdXRoZW50aWNhdGUocmVx
dWVzdCwgMCk7Ci0gICAgLy8gU2VydmVyIGRvZXNuJ3QgYXNrIGZvciBuZXcgY3JlZGVudGlhbHMu
Ci0gICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBp
bnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25h
bExvYWRTdGFydGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFd
LCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5p
c2hlZCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUodGVz
dC0+bV93ZWJWaWV3KSwgPT0sIGF1dGhFeHBlY3RlZEZhaWx1cmVUaXRsZSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25TdG9yYWdlKEF1dGhlbnRpY2F0aW9uVGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsKLSAgICAvLyBFbmFibGUgcHJpdmF0ZSBicm93c2lu
ZyBiZWZvcmUgYXV0aGVudGljYXRpb24gcmVxdWVzdCB0byB0ZXN0IHRoYXQgY3JlZGVudGlhbHMg
Y2FuJ3QgYmUgc2F2ZWQuCi0gICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfcHJpdmF0ZV9i
cm93c2luZyh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyksIFRS
VUUpOwotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVz
dC5odG1sIikuZGF0YSgpKTsKLSAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVl
c3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0KCk7Ci0gICAgZ19hc3NlcnQo
IXdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9wcm9wb3NlZF9jcmVkZW50aWFsKHJl
cXVlc3QpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2Fu
X3NhdmVfY3JlZGVudGlhbHMocmVxdWVzdCkpOwotCi0gICAgLy8gSWYgV2ViS2l0IGhhcyBiZWVu
IGNvbXBpbGVkIHdpdGggbGlic2VjcmV0LCBhbmQgcHJpdmF0ZSBicm93c2luZyBpcyBkaXNhYmxl
ZAotICAgIC8vIHRoZW4gY2hlY2sgdGhhdCBjcmVkZW50aWFscyBjYW4gYmUgc2F2ZWQuCi0jaWYg
RU5BQkxFKENSRURFTlRJQUxfU1RPUkFHRSkKLSAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJs
ZV9wcml2YXRlX2Jyb3dzaW5nKHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93
ZWJWaWV3KSwgRkFMU0UpOwotICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0
aCgiL2F1dGgtdGVzdC5odG1sIikuZGF0YSgpKTsKLSAgICByZXF1ZXN0ID0gdGVzdC0+d2FpdEZv
ckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfYXV0aGVudGlj
YXRpb25fcmVxdWVzdF9nZXRfcHJvcG9zZWRfY3JlZGVudGlhbChyZXF1ZXN0KSk7Ci0gICAgZ19h
c3NlcnQod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuX3NhdmVfY3JlZGVudGlhbHMo
cmVxdWVzdCkpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QXV0aGVudGlj
YXRpb25TdWNjZXNzKEF1dGhlbnRpY2F0aW9uVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKLXsK
LSAgICAvLyBUZXN0IGNvcnJlY3QgYXV0aGVudGljYXRpb24uCi0gICAgdGVzdC0+bG9hZFVSSShr
U2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOwotICAgIFdl
YktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JBdXRoZW50
aWNhdGlvblJlcXVlc3QoKTsKLSAgICBXZWJLaXRDcmVkZW50aWFsKiBjcmVkZW50aWFsID0gd2Vi
a2l0X2NyZWRlbnRpYWxfbmV3KGF1dGhUZXN0VXNlcm5hbWUsIGF1dGhUZXN0UGFzc3dvcmQsIFdF
QktJVF9DUkVERU5USUFMX1BFUlNJU1RFTkNFX0ZPUl9TRVNTSU9OKTsKLSAgICB3ZWJraXRfYXV0
aGVudGljYXRpb25fcmVxdWVzdF9hdXRoZW50aWNhdGUocmVxdWVzdCwgY3JlZGVudGlhbCk7Ci0g
ICAgd2Via2l0X2NyZWRlbnRpYWxfZnJlZShjcmVkZW50aWFsKTsKLSAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVu
dHMuc2l6ZSgpLCA9PSwgMyk7Ci0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50
c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOwotICAg
IGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdU
ZXN0OjpMb2FkQ29tbWl0dGVkKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZl
bnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwg
YXV0aEV4cGVjdGVkU3VjY2Vzc1RpdGxlKTsKLQotICAgIC8vIFRlc3QgbG9hZGluZyB0aGUgc2Ft
ZSAoYXV0aG9yaXplZCkgcGFnZSBhZ2Fpbi4KLSAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdl
dFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7Ci0gICAgLy8gVGhlcmUgaXMg
bm8gYXV0aGVudGljYXRpb24gY2hhbGxlbmdlLgotICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5p
c2hlZCgpOwotCi0gICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCks
ID09LCAzKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwg
TG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRD
b21taXR0ZWQpOwotICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09
LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2ViVmlldyksID09LCBhdXRoRXhwZWN0
ZWRTdWNjZXNzVGl0bGUpOwotfQotCi1zdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2Vy
dmVyKiwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUq
LCBTb3VwQ2xpZW50Q29udGV4dCosIHZvaWQqKQotewotICAgIGlmIChtZXNzYWdlLT5tZXRob2Qg
IT0gU09VUF9NRVRIT0RfR0VUKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1l
c3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAoIXN0cmNtcChwYXRoLCAiL2F1dGgtdGVzdC5odG1sIikpIHsKLSAgICAg
ICAgY29uc3QgY2hhciogYXV0aG9yaXphdGlvbiA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9v
bmUobWVzc2FnZS0+cmVxdWVzdF9oZWFkZXJzLCAiQXV0aG9yaXphdGlvbiIpOwotICAgICAgICAv
LyBSZXF1aXJlIGF1dGhlbnRpY2F0aW9uLgotICAgICAgICBpZiAoIWdfc3RyY21wMChhdXRob3Jp
emF0aW9uLCBhdXRoRXhwZWN0ZWRBdXRob3JpemF0aW9uKSkgewotICAgICAgICAgICAgLy8gU3Vj
Y2Vzc2Z1bCBhdXRoZW50aWNhdGlvbi4KLSAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3Rh
dHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKLSAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9i
b2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGF1
dGhTdWNjZXNzSFRNTFN0cmluZywgc3RybGVuKGF1dGhTdWNjZXNzSFRNTFN0cmluZykpOwotICAg
ICAgICAgICAgQXV0aGVudGljYXRpb25UZXN0OjphdXRoZW50aWNhdGlvblJldHJpZXMgPSAwOwot
ICAgICAgICB9IGVsc2UgaWYgKCsrQXV0aGVudGljYXRpb25UZXN0OjphdXRoZW50aWNhdGlvblJl
dHJpZXMgPCAzKSB7Ci0gICAgICAgICAgICAvLyBObyBvciBpbnZhbGlkIGF1dGhvcml6YXRpb24g
aGVhZGVyIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQsIHJlcXVlc3QgYXV0aGVudGljYXRpb24gdHdp
Y2UgdGhlbiBmYWlsLgotICAgICAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2Fn
ZSwgU09VUF9TVEFUVVNfVU5BVVRIT1JJWkVEKTsKLSAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9o
ZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiV1dXLUF1dGhlbnRpY2F0
ZSIsICJCYXNpYyByZWFsbT1cIm15IHJlYWxtXCIiKTsKLSAgICAgICAgICAgIC8vIEluY2x1ZGUg
YSBmYWlsdXJlIG1lc3NhZ2UgaW4gY2FzZSB0aGUgdXNlciBhdHRlbXB0cyB0byBwcm9jZWVkIHdp
dGhvdXQgYXV0aGVudGljYXRpb24uCi0gICAgICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBl
bmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBhdXRoRmFpbHVy
ZUhUTUxTdHJpbmcsIHN0cmxlbihhdXRoRmFpbHVyZUhUTUxTdHJpbmcpKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIC8vIEF1dGhlbnRpY2F0aW9uIG5vdCBzdWNjZXNzZnVsLCBkaXNw
bGF5IGEgIjQwMSBBdXRob3JpemF0aW9uIFJlcXVpcmVkIiBwYWdlLgotICAgICAgICAgICAgc291
cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOwotICAgICAgICAg
ICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBf
TUVNT1JZX1NUQVRJQywgYXV0aEZhaWx1cmVIVE1MU3RyaW5nLCBzdHJsZW4oYXV0aEZhaWx1cmVI
VE1MU3RyaW5nKSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgc291cF9tZXNzYWdl
X3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKLQotICAgIHNvdXBf
bWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwotfQotCiB2b2lk
IGJlZm9yZUFsbCgpCiB7Ci0gICAga1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7Ci0g
ICAga1NlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNrKTsKLQogICAgIFdlYlZpZXdUZXN0OjphZGQo
IldlYktpdFdlYlZpZXciLCAiZGVmYXVsdC1jb250ZXh0IiwgdGVzdFdlYlZpZXdEZWZhdWx0Q29u
dGV4dCk7CiAgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJjdXN0b20tY2hh
cnNldCIsIHRlc3RXZWJWaWV3Q3VzdG9tQ2hhcnNldCk7CiAgICAgV2ViVmlld1Rlc3Q6OmFkZCgi
V2ViS2l0V2ViVmlldyIsICJzZXR0aW5ncyIsIHRlc3RXZWJWaWV3U2V0dGluZ3MpOwotICAgIFVJ
Q2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImNyZWF0ZS1yZWFkeS1jbG9zZSIsIHRl
c3RXZWJWaWV3Q3JlYXRlUmVhZHlDbG9zZSk7Ci0gICAgTW9kYWxEaWFsb2dzVGVzdDo6YWRkKCJX
ZWJLaXRXZWJWaWV3IiwgImFsbG93LW1vZGFsLWRpYWxvZ3MiLCB0ZXN0V2ViVmlld0FsbG93TW9k
YWxEaWFsb2dzKTsKLSAgICBNb2RhbERpYWxvZ3NUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAi
ZGlzYWxsb3ctbW9kYWwtZGlhbG9ncyIsIHRlc3RXZWJWaWV3RGlzYWxsb3dNb2RhbERpYWxvZ3Mp
OwotICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImphdmFzY3JpcHQtZGlh
bG9ncyIsIHRlc3RXZWJWaWV3SmF2YVNjcmlwdERpYWxvZ3MpOwotICAgIFVJQ2xpZW50VGVzdDo6
YWRkKCJXZWJLaXRXZWJWaWV3IiwgIndpbmRvdy1wcm9wZXJ0aWVzIiwgdGVzdFdlYlZpZXdXaW5k
b3dQcm9wZXJ0aWVzKTsKLSAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJt
b3VzZS10YXJnZXQiLCB0ZXN0V2ViVmlld01vdXNlVGFyZ2V0KTsKLSAgICBVSUNsaWVudFRlc3Q6
OmFkZCgiV2ViS2l0V2ViVmlldyIsICJwZXJtaXNzaW9uLXJlcXVlc3RzIiwgdGVzdFdlYlZpZXdQ
ZXJtaXNzaW9uUmVxdWVzdHMpOwogICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXci
LCAiem9vbS1sZXZlbCIsIHRlc3RXZWJWaWV3Wm9vbUxldmVsKTsKICAgICBXZWJWaWV3VGVzdDo6
YWRkKCJXZWJLaXRXZWJWaWV3IiwgInJ1bi1qYXZhc2NyaXB0IiwgdGVzdFdlYlZpZXdSdW5KYXZh
U2NyaXB0KTsKLSAgICBGaWxlQ2hvb3NlclRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJmaWxl
LWNob29zZXItcmVxdWVzdCIsIHRlc3RXZWJWaWV3RmlsZUNob29zZXJSZXF1ZXN0KTsKICAgICBG
dWxsU2NyZWVuQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImZ1bGxzY3JlZW4iLCB0
ZXN0V2ViVmlld0Z1bGxTY3JlZW4pOwogICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZp
ZXciLCAiY2FuLXNob3ctbWltZS10eXBlIiwgdGVzdFdlYlZpZXdDYW5TaG93TUlNRVR5cGUpOwog
ICAgIEZvcm1DbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAic3VibWl0LWZvcm0iLCB0
ZXN0V2ViVmlld1N1Ym1pdEZvcm0pOwpAQCAtMTQ3MiwxNyArNjAzLDggQEAgdm9pZCBiZWZvcmVB
bGwoKQogICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAidmlldy1tb2RlIiwg
dGVzdFdlYlZpZXdNb2RlKTsKICAgICBTbmFwc2hvdFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdl
YlZpZXciLCAic25hcHNob3QiLCB0ZXN0V2ViVmlld1NuYXBzaG90KTsKICAgICBXZWJWaWV3VGVz
dDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInBhZ2UtdmlzaWJpbGl0eSIsIHRlc3RXZWJWaWV3UGFn
ZVZpc2liaWxpdHkpOwotICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3
IiwgImF1dGhlbnRpY2F0aW9uLXJlcXVlc3QiLCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uUmVx
dWVzdCk7Ci0gICAgQXV0aGVudGljYXRpb25UZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiYXV0
aGVudGljYXRpb24tY2FuY2VsIiwgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvbkNhbmNlbCk7Ci0g
ICAgQXV0aGVudGljYXRpb25UZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiYXV0aGVudGljYXRp
b24tZmFpbHVyZSIsIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25GYWlsdXJlKTsKLSAgICBBdXRo
ZW50aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJhdXRoZW50aWNhdGlvbi1uby1j
cmVkZW50aWFsIiwgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvbk5vQ3JlZGVudGlhbCk7Ci0gICAg
QXV0aGVudGljYXRpb25UZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiYXV0aGVudGljYXRpb24t
c3RvcmFnZSIsIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25TdG9yYWdlKTsKLSAgICAvLyBUZXN0
aW5nIGF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3MgbXVzdCBiZSBkb25lIGxhc3QgYmVjYXVzZSBsaWJz
b3VwIHdpbGwgbmV2ZXIgZmlyZQotICAgIC8vIHRoZSBhdXRoZW50aWNhdGUgc2lnbmFsIGFnYWlu
IG9uY2UgYXV0aGVudGljYXRpb24gaXMgc3VjY2Vzc2Z1bC4KLSAgICBBdXRoZW50aWNhdGlvblRl
c3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJhdXRoZW50aWNhdGlvbi1zdWNjZXNzIiwgdGVzdFdl
YlZpZXdBdXRoZW50aWNhdGlvblN1Y2Nlc3MpOwogfQogCiB2b2lkIGFmdGVyQWxsKCkKIHsKLSAg
ICBkZWxldGUga1NlcnZlcjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJWaWV3QXV0aGVudGljYXRpb24uY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvbi5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMWRmNWU0ZWY1YWMyY2JmOTZlYWFmOGI3NDI2NGZmZTY2YmM0N2FlMgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3RXZWJWaWV3QXV0aGVudGljYXRpb24uY3BwCkBAIC0wLDAgKzEsMjYxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxvYWRUcmFja2luZ1Rlc3Qu
aCIKKyNpbmNsdWRlICJXZWJLaXRUZXN0U2VydmVyLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rlc3Qu
aCIKKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQ
dHIuaD4KKworc3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtTZXJ2ZXI7CisKK2NsYXNzIEF1dGhl
bnRpY2F0aW9uVGVzdDogcHVibGljIExvYWRUcmFja2luZ1Rlc3QgeworcHVibGljOgorICAgIE1B
S0VfR0xJQl9URVNUX0ZJWFRVUkUoQXV0aGVudGljYXRpb25UZXN0KTsKKworICAgIEF1dGhlbnRp
Y2F0aW9uVGVzdCgpCisgICAgeworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywg
ImF1dGhlbnRpY2F0ZSIsIEdfQ0FMTEJBQ0socnVuQXV0aGVudGljYXRpb25DYWxsYmFjayksIHRo
aXMpOworICAgIH0KKworICAgIH5BdXRoZW50aWNhdGlvblRlc3QoKQorICAgIHsKKyAgICAgICAg
Z19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2ViVmlldywgR19TSUdOQUxf
TUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAgfQorCisgICAgc3RhdGljIGludCBh
dXRoZW50aWNhdGlvblJldHJpZXM7CisKKyAgICB2b2lkIGxvYWRVUkkoY29uc3QgY2hhciogdXJp
KQorICAgIHsKKyAgICAgICAgLy8gUmVzZXQgdGhlIHJldHJ5IGNvdW50IG9mIHRoZSBmYWtlIHNl
cnZlciB3aGVuIGEgcGFnZSBpcyBsb2FkZWQuCisgICAgICAgIGF1dGhlbnRpY2F0aW9uUmV0cmll
cyA9IDA7CisgICAgICAgIExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRVUkkodXJpKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgZ2Jvb2xlYW4gcnVuQXV0aGVudGljYXRpb25DYWxsYmFjayhXZWJLaXRXZWJW
aWV3KiwgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0LCBBdXRoZW50aWNhdGlv
blRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5ydW5BdXRoZW50aWNhdGlvbihyZXF1
ZXN0KTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgdm9pZCBydW5BdXRoZW50
aWNhdGlvbihXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QpCisgICAgeworICAg
ICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHJlcXVl
c3QpKTsKKyAgICAgICAgbV9hdXRoZW50aWNhdGlvblJlcXVlc3QgPSByZXF1ZXN0OworICAgICAg
ICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIFdlYktpdEF1dGhl
bnRpY2F0aW9uUmVxdWVzdCogd2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpCisgICAgewor
ICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgICAgIHJldHVybiBtX2F1
dGhlbnRpY2F0aW9uUmVxdWVzdC5nZXQoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR1JlZlB0
cjxXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Q+IG1fYXV0aGVudGljYXRpb25SZXF1ZXN0Owor
fTsKKworaW50IEF1dGhlbnRpY2F0aW9uVGVzdDo6YXV0aGVudGljYXRpb25SZXRyaWVzID0gMDsK
Kworc3RhdGljIGNvbnN0IGNoYXIgYXV0aFRlc3RVc2VybmFtZVtdID0gInVzZXJuYW1lIjsKK3N0
YXRpYyBjb25zdCBjaGFyIGF1dGhUZXN0UGFzc3dvcmRbXSA9ICJwYXNzd29yZCI7CitzdGF0aWMg
Y29uc3QgY2hhciBhdXRoRXhwZWN0ZWRTdWNjZXNzVGl0bGVbXSA9ICJXZWJLaXQyR3RrKyBBdXRo
ZW50aWNhdGlvbiB0ZXN0IjsKK3N0YXRpYyBjb25zdCBjaGFyIGF1dGhFeHBlY3RlZEZhaWx1cmVU
aXRsZVtdID0gIjQwMSBBdXRob3JpemF0aW9uIFJlcXVpcmVkIjsKK3N0YXRpYyBjb25zdCBjaGFy
IGF1dGhFeHBlY3RlZEF1dGhvcml6YXRpb25bXSA9ICJCYXNpYyBkWE5sY201aGJXVTZjR0Z6YzNk
dmNtUT0iOyAvLyBCYXNlNjQgZW5jb2Rpbmcgb2YgInVzZXJuYW1lOnBhc3N3b3JkIi4KK3N0YXRp
YyBjb25zdCBjaGFyIGF1dGhTdWNjZXNzSFRNTFN0cmluZ1tdID0KKyAgICAiPGh0bWw+IgorICAg
ICI8aGVhZD48dGl0bGU+V2ViS2l0Mkd0aysgQXV0aGVudGljYXRpb24gdGVzdDwvdGl0bGU+PC9o
ZWFkPiIKKyAgICAiPGJvZHk+PC9ib2R5PjwvaHRtbD4iOworc3RhdGljIGNvbnN0IGNoYXIgYXV0
aEZhaWx1cmVIVE1MU3RyaW5nW10gPQorICAgICI8aHRtbD4iCisgICAgIjxoZWFkPjx0aXRsZT40
MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZDwvdGl0bGU+PC9oZWFkPiIKKyAgICAiPGJvZHk+PC9i
b2R5PjwvaHRtbD4iOworCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uUmVx
dWVzdChBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8g
VGVzdCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IGdldHRlcnMgbWF0Y2ggc291cCBhdXRoZW50aWNh
dGlvbiBoZWFkZXIuCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIv
YXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOworICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVz
dCogcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X2hvc3QocmVx
dWVzdCksID09LCBzb3VwX3VyaV9nZXRfaG9zdChrU2VydmVyLT5iYXNlVVJJKCkpKTsKKyAgICBn
X2Fzc2VydF9jbXB1aW50KHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9wb3J0KHJl
cXVlc3QpLCA9PSwgc291cF91cmlfZ2V0X3BvcnQoa1NlcnZlci0+YmFzZVVSSSgpKSk7CisgICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9yZWFsbShy
ZXF1ZXN0KSwgPT0sICJteSByZWFsbSIpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9hdXRoZW50aWNh
dGlvbl9yZXF1ZXN0X2dldF9zY2hlbWUocmVxdWVzdCkgPT0gV0VCS0lUX0FVVEhFTlRJQ0FUSU9O
X1NDSEVNRV9IVFRQX0JBU0lDKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2F1dGhlbnRpY2F0aW9u
X3JlcXVlc3RfaXNfZm9yX3Byb3h5KHJlcXVlc3QpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2F1
dGhlbnRpY2F0aW9uX3JlcXVlc3RfaXNfcmV0cnkocmVxdWVzdCkpOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uQ2FuY2VsKEF1dGhlbnRpY2F0aW9uVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICAvLyBUZXN0IGNhbmNlbC4KKyAgICB0ZXN0LT5sb2Fk
VVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7Cisg
ICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1
dGhlbnRpY2F0aW9uUmVxdWVzdCgpOworICAgIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0
X2NhbmNlbChyZXF1ZXN0KTsKKyAgICAvLyBTZXJ2ZXIgZG9lc24ndCBhc2sgZm9yIG5ldyBjcmVk
ZW50aWFscy4KKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdfYXNz
ZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7CisgICAgZ19hc3Nl
cnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlBy
b3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRF
dmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRGYWlsZWQpOwor
ICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tp
bmdUZXN0OjpMb2FkRmluaXNoZWQpOworCisgICAgZ19hc3NlcnRfZXJyb3IodGVzdC0+bV9lcnJv
ci5nZXQoKSwgV0VCS0lUX05FVFdPUktfRVJST1IsIFdFQktJVF9ORVRXT1JLX0VSUk9SX0NBTkNF
TExFRCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25GYWlsdXJl
KEF1dGhlbnRpY2F0aW9uVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICAvLyBUZXN0
IGF1dGhlbnRpY2F0aW9uIGZhaWx1cmVzLgorICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0
VVJJRm9yUGF0aCgiL2F1dGgtdGVzdC5odG1sIikuZGF0YSgpKTsKKyAgICBXZWJLaXRBdXRoZW50
aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1
ZXN0KCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2lzX3Jl
dHJ5KHJlcXVlc3QpKTsKKyAgICBXZWJLaXRDcmVkZW50aWFsKiBjcmVkZW50aWFsID0gd2Via2l0
X2NyZWRlbnRpYWxfbmV3KGF1dGhUZXN0VXNlcm5hbWUsICJ3cm9uZ3Bhc3N3b3JkIiwgV0VCS0lU
X0NSRURFTlRJQUxfUEVSU0lTVEVOQ0VfTk9ORSk7CisgICAgd2Via2l0X2F1dGhlbnRpY2F0aW9u
X3JlcXVlc3RfYXV0aGVudGljYXRlKHJlcXVlc3QsIGNyZWRlbnRpYWwpOworICAgIHdlYmtpdF9j
cmVkZW50aWFsX2ZyZWUoY3JlZGVudGlhbCk7CisgICAgLy8gRXhwZWN0IGEgc2Vjb25kIGF1dGhl
bnRpY2F0aW9uIHJlcXVlc3QuCisgICAgcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JBdXRoZW50aWNh
dGlvblJlcXVlc3QoKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVz
dF9pc19yZXRyeShyZXF1ZXN0KSk7CisgICAgLy8gVGVzdCBzZWNvbmQgZmFpbHVyZS4KKyAgICBj
cmVkZW50aWFsID0gd2Via2l0X2NyZWRlbnRpYWxfbmV3KGF1dGhUZXN0VXNlcm5hbWUsICJ3cm9u
Z3Bhc3N3b3JkMiIsIFdFQktJVF9DUkVERU5USUFMX1BFUlNJU1RFTkNFX05PTkUpOworICAgIHdl
YmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZShyZXF1ZXN0LCBjcmVkZW50
aWFsKTsKKyAgICB3ZWJraXRfY3JlZGVudGlhbF9mcmVlKGNyZWRlbnRpYWwpOworICAgIC8vIEV4
cGVjdCBhdXRoZW50aWNhdGlvbiBmYWlsZWQgcGFnZS4KKyAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6
ZSgpLCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwg
PT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOworICAgIGdfYXNz
ZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpM
b2FkQ29tbWl0dGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJd
LCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIod2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgYXV0aEV4
cGVjdGVkRmFpbHVyZVRpdGxlKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50
aWNhdGlvbk5vQ3JlZGVudGlhbChBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCit7CisgICAgLy8gVGVzdCBjb250aW51ZSB3aXRob3V0IGNyZWRlbnRpYWxzLgorICAgIHRl
c3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVzdC5odG1sIikuZGF0
YSgpKTsKKyAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QgPSB0ZXN0LT53
YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0KCk7CisgICAgd2Via2l0X2F1dGhlbnRpY2F0aW9u
X3JlcXVlc3RfYXV0aGVudGljYXRlKHJlcXVlc3QsIDApOworICAgIC8vIFNlcnZlciBkb2Vzbid0
IGFzayBmb3IgbmV3IGNyZWRlbnRpYWxzLgorICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hl
ZCgpOworCisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCksID09
LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9h
ZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21w
aW50KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21t
aXR0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBM
b2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2ViVmlldyksID09LCBhdXRoRXhwZWN0ZWRG
YWlsdXJlVGl0bGUpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9u
U3RvcmFnZShBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAg
Ly8gRW5hYmxlIHByaXZhdGUgYnJvd3NpbmcgYmVmb3JlIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3Qg
dG8gdGVzdCB0aGF0IGNyZWRlbnRpYWxzIGNhbid0IGJlIHNhdmVkLgorICAgIHdlYmtpdF9zZXR0
aW5nc19zZXRfZW5hYmxlX3ByaXZhdGVfYnJvd3Npbmcod2Via2l0X3dlYl92aWV3X2dldF9zZXR0
aW5ncyh0ZXN0LT5tX3dlYlZpZXcpLCBUUlVFKTsKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7CisgICAgV2ViS2l0QXV0
aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9u
UmVxdWVzdCgpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9n
ZXRfcHJvcG9zZWRfY3JlZGVudGlhbChyZXF1ZXN0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9h
dXRoZW50aWNhdGlvbl9yZXF1ZXN0X2Nhbl9zYXZlX2NyZWRlbnRpYWxzKHJlcXVlc3QpKTsKKwor
ICAgIC8vIElmIFdlYktpdCBoYXMgYmVlbiBjb21waWxlZCB3aXRoIGxpYnNlY3JldCwgYW5kIHBy
aXZhdGUgYnJvd3NpbmcgaXMgZGlzYWJsZWQKKyAgICAvLyB0aGVuIGNoZWNrIHRoYXQgY3JlZGVu
dGlhbHMgY2FuIGJlIHNhdmVkLgorI2lmIEVOQUJMRShDUkVERU5USUFMX1NUT1JBR0UpCisgICAg
d2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfcHJpdmF0ZV9icm93c2luZyh3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyksIEZBTFNFKTsKKyAgICB0ZXN0LT5sb2Fk
VVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7Cisg
ICAgcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKTsKKyAgICBn
X2Fzc2VydCghd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3Byb3Bvc2VkX2NyZWRl
bnRpYWwocmVxdWVzdCkpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1
ZXN0X2Nhbl9zYXZlX2NyZWRlbnRpYWxzKHJlcXVlc3QpKTsKKyNlbmRpZgorfQorCitzdGF0aWMg
dm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uU3VjY2VzcyhBdXRoZW50aWNhdGlvblRlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gVGVzdCBjb3JyZWN0IGF1dGhlbnRpY2F0
aW9uLgorICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVz
dC5odG1sIikuZGF0YSgpKTsKKyAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVl
c3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0KCk7CisgICAgV2ViS2l0Q3Jl
ZGVudGlhbCogY3JlZGVudGlhbCA9IHdlYmtpdF9jcmVkZW50aWFsX25ldyhhdXRoVGVzdFVzZXJu
YW1lLCBhdXRoVGVzdFBhc3N3b3JkLCBXRUJLSVRfQ1JFREVOVElBTF9QRVJTSVNURU5DRV9GT1Jf
U0VTU0lPTik7CisgICAgd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfYXV0aGVudGljYXRl
KHJlcXVlc3QsIGNyZWRlbnRpYWwpOworICAgIHdlYmtpdF9jcmVkZW50aWFsX2ZyZWUoY3JlZGVu
dGlhbCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0
X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92
aXNpb25hbExvYWRTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZl
bnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7CisgICAgZ19hc3Nl
cnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6Okxv
YWRGaW5pc2hlZCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdGl0
bGUodGVzdC0+bV93ZWJWaWV3KSwgPT0sIGF1dGhFeHBlY3RlZFN1Y2Nlc3NUaXRsZSk7CisKKyAg
ICAvLyBUZXN0IGxvYWRpbmcgdGhlIHNhbWUgKGF1dGhvcml6ZWQpIHBhZ2UgYWdhaW4uCisgICAg
dGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5k
YXRhKCkpOworICAgIC8vIFRoZXJlIGlzIG5vIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZS4KKyAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0X2NtcGludCh0
ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50KHRl
c3QtPm1fbG9hZEV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9h
ZFN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09
LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
dGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVk
KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5t
X3dlYlZpZXcpLCA9PSwgYXV0aEV4cGVjdGVkU3VjY2Vzc1RpdGxlKTsKK30KKworc3RhdGljIHZv
aWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciosIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25z
dCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCB2b2lkKikKK3sK
KyAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgeworICAgICAgICBz
b3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5U
RUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFzdHJjbXAocGF0aCwgIi9h
dXRoLXRlc3QuaHRtbCIpKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGF1dGhvcml6YXRpb24gPSBz
b3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfb25lKG1lc3NhZ2UtPnJlcXVlc3RfaGVhZGVycywgIkF1
dGhvcml6YXRpb24iKTsKKyAgICAgICAgLy8gUmVxdWlyZSBhdXRoZW50aWNhdGlvbi4KKyAgICAg
ICAgaWYgKCFnX3N0cmNtcDAoYXV0aG9yaXphdGlvbiwgYXV0aEV4cGVjdGVkQXV0aG9yaXphdGlv
bikpIHsKKyAgICAgICAgICAgIC8vIFN1Y2Nlc3NmdWwgYXV0aGVudGljYXRpb24uCisgICAgICAg
ICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7Cisg
ICAgICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9k
eSwgU09VUF9NRU1PUllfU1RBVElDLCBhdXRoU3VjY2Vzc0hUTUxTdHJpbmcsIHN0cmxlbihhdXRo
U3VjY2Vzc0hUTUxTdHJpbmcpKTsKKyAgICAgICAgICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6YXV0
aGVudGljYXRpb25SZXRyaWVzID0gMDsKKyAgICAgICAgfSBlbHNlIGlmICgrK0F1dGhlbnRpY2F0
aW9uVGVzdDo6YXV0aGVudGljYXRpb25SZXRyaWVzIDwgMykgeworICAgICAgICAgICAgLy8gTm8g
b3IgaW52YWxpZCBhdXRob3JpemF0aW9uIGhlYWRlciBwcm92aWRlZCBieSB0aGUgY2xpZW50LCBy
ZXF1ZXN0IGF1dGhlbnRpY2F0aW9uIHR3aWNlIHRoZW4gZmFpbC4KKyAgICAgICAgICAgIHNvdXBf
bWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX1VOQVVUSE9SSVpFRCk7Cisg
ICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2Vf
aGVhZGVycywgIldXVy1BdXRoZW50aWNhdGUiLCAiQmFzaWMgcmVhbG09XCJteSByZWFsbVwiIik7
CisgICAgICAgICAgICAvLyBJbmNsdWRlIGEgZmFpbHVyZSBtZXNzYWdlIGluIGNhc2UgdGhlIHVz
ZXIgYXR0ZW1wdHMgdG8gcHJvY2VlZCB3aXRob3V0IGF1dGhlbnRpY2F0aW9uLgorICAgICAgICAg
ICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBf
TUVNT1JZX1NUQVRJQywgYXV0aEZhaWx1cmVIVE1MU3RyaW5nLCBzdHJsZW4oYXV0aEZhaWx1cmVI
VE1MU3RyaW5nKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBBdXRoZW50aWNh
dGlvbiBub3Qgc3VjY2Vzc2Z1bCwgZGlzcGxheSBhICI0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJl
ZCIgcGFnZS4KKyAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNP
VVBfU1RBVFVTX09LKTsKKyAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNz
YWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGF1dGhGYWlsdXJlSFRNTFN0
cmluZywgc3RybGVuKGF1dGhGYWlsdXJlSFRNTFN0cmluZykpOworICAgICAgICB9CisgICAgfSBl
bHNlCisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVT
X05PVF9GT1VORCk7CisKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5y
ZXNwb25zZV9ib2R5KTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIGtTZXJ2ZXIgPSBu
ZXcgV2ViS2l0VGVzdFNlcnZlcigpOworICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7
CisKKyAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJhdXRoZW50
aWNhdGlvbi1yZXF1ZXN0IiwgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblJlcXVlc3QpOworICAg
IEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1dGhlbnRpY2F0aW9u
LWNhbmNlbCIsIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25DYW5jZWwpOworICAgIEF1dGhlbnRp
Y2F0aW9uVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1dGhlbnRpY2F0aW9uLWZhaWx1cmUi
LCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uRmFpbHVyZSk7CisgICAgQXV0aGVudGljYXRpb25U
ZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiYXV0aGVudGljYXRpb24tbm8tY3JlZGVudGlhbCIs
IHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25Ob0NyZWRlbnRpYWwpOworICAgIEF1dGhlbnRpY2F0
aW9uVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1dGhlbnRpY2F0aW9uLXN0b3JhZ2UiLCB0
ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uU3RvcmFnZSk7CisgICAgLy8gVGVzdGluZyBhdXRoZW50
aWNhdGlvbiBzdWNjZXNzIG11c3QgYmUgZG9uZSBsYXN0IGJlY2F1c2UgbGlic291cCB3aWxsIG5l
dmVyIGZpcmUKKyAgICAvLyB0aGUgYXV0aGVudGljYXRlIHNpZ25hbCBhZ2FpbiBvbmNlIGF1dGhl
bnRpY2F0aW9uIGlzIHN1Y2Nlc3NmdWwuCisgICAgQXV0aGVudGljYXRpb25UZXN0OjphZGQoIldl
YktpdFdlYlZpZXciLCAiYXV0aGVudGljYXRpb24tc3VjY2VzcyIsIHRlc3RXZWJWaWV3QXV0aGVu
dGljYXRpb25TdWNjZXNzKTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7CisgICAgZGVsZXRlIGtT
ZXJ2ZXI7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9UZXN0V2ViVmlld1VJQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1Rlc3RXZWJWaWV3VUlDbGllbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmMmFmMTk4
NjBiMmNlMzM5ZmE2MDI4YjEyZmQxZDU1ZmQ2YWJiMGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViVmlld1VJQ2xpZW50LmNw
cApAQCAtMCwwICsxLDY4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5M
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVk
ZSA8Z2xpYi9nc3RkaW8uaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0
Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisK
K3N0YXRpYyBjb25zdCBjaGFyKiBrQWxlcnREaWFsb2dNZXNzYWdlID0gIldlYktpdEdUSysgYWxl
cnQgZGlhbG9nIG1lc3NhZ2UiOworc3RhdGljIGNvbnN0IGNoYXIqIGtDb25maXJtRGlhbG9nTWVz
c2FnZSA9ICJXZWJLaXRHVEsrIGNvbmZpcm0gZGlhbG9nIG1lc3NhZ2UiOworc3RhdGljIGNvbnN0
IGNoYXIqIGtQcm9tcHREaWFsb2dNZXNzYWdlID0gIldlYktpdEdUSysgcHJvbXB0IGRpYWxvZyBt
ZXNzYWdlIjsKK3N0YXRpYyBjb25zdCBjaGFyKiBrUHJvbXB0RGlhbG9nUmV0dXJuZWRUZXh0ID0g
IldlYktpdEdUSysgcHJvbXB0IGRpYWxvZyByZXR1cm5lZCB0ZXh0IjsKKworY2xhc3MgVUlDbGll
bnRUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNU
X0ZJWFRVUkUoVUlDbGllbnRUZXN0KTsKKworICAgIGVudW0gV2ViVmlld0V2ZW50cyB7CisgICAg
ICAgIENyZWF0ZSwKKyAgICAgICAgUmVhZHlUb1Nob3csCisgICAgICAgIFJ1bkFzTW9kYWwsCisg
ICAgICAgIENsb3NlCisgICAgfTsKKworICAgIGNsYXNzIFdpbmRvd1Byb3BlcnRpZXMgeworICAg
IHB1YmxpYzoKKyAgICAgICAgV2luZG93UHJvcGVydGllcygpCisgICAgICAgICAgICA6IG1faXNO
dWxsKHRydWUpCisgICAgICAgICAgICAsIG1fdG9vbGJhclZpc2libGUodHJ1ZSkKKyAgICAgICAg
ICAgICwgbV9zdGF0dXNiYXJWaXNpYmxlKHRydWUpCisgICAgICAgICAgICAsIG1fc2Nyb2xsYmFy
c1Zpc2libGUodHJ1ZSkKKyAgICAgICAgICAgICwgbV9tZW51YmFyVmlzaWJsZSh0cnVlKQorICAg
ICAgICAgICAgLCBtX2xvY2F0aW9uYmFyVmlzaWJsZSh0cnVlKQorICAgICAgICAgICAgLCBtX3Jl
c2l6YWJsZSh0cnVlKQorICAgICAgICAgICAgLCBtX2Z1bGxzY3JlZW4oZmFsc2UpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1lbXNldCgmbV9nZW9tZXRyeSwgMCwgc2l6ZW9mKEdka1JlY3Rhbmds
ZSkpOworICAgICAgICB9CisKKyAgICAgICAgV2luZG93UHJvcGVydGllcyhXZWJLaXRXaW5kb3dQ
cm9wZXJ0aWVzKiB3aW5kb3dQcm9wZXJ0aWVzKQorICAgICAgICAgICAgOiBtX2lzTnVsbChmYWxz
ZSkKKyAgICAgICAgICAgICwgbV90b29sYmFyVmlzaWJsZSh3ZWJraXRfd2luZG93X3Byb3BlcnRp
ZXNfZ2V0X3Rvb2xiYXJfdmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVzKSkKKyAgICAgICAgICAgICwg
bV9zdGF0dXNiYXJWaXNpYmxlKHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfc3RhdHVzYmFy
X3Zpc2libGUod2luZG93UHJvcGVydGllcykpCisgICAgICAgICAgICAsIG1fc2Nyb2xsYmFyc1Zp
c2libGUod2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9zY3JvbGxiYXJzX3Zpc2libGUod2lu
ZG93UHJvcGVydGllcykpCisgICAgICAgICAgICAsIG1fbWVudWJhclZpc2libGUod2Via2l0X3dp
bmRvd19wcm9wZXJ0aWVzX2dldF9tZW51YmFyX3Zpc2libGUod2luZG93UHJvcGVydGllcykpCisg
ICAgICAgICAgICAsIG1fbG9jYXRpb25iYXJWaXNpYmxlKHdlYmtpdF93aW5kb3dfcHJvcGVydGll
c19nZXRfbG9jYXRpb25iYXJfdmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVzKSkKKyAgICAgICAgICAg
ICwgbV9yZXNpemFibGUod2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9yZXNpemFibGUod2lu
ZG93UHJvcGVydGllcykpCisgICAgICAgICAgICAsIG1fZnVsbHNjcmVlbih3ZWJraXRfd2luZG93
X3Byb3BlcnRpZXNfZ2V0X2Z1bGxzY3JlZW4od2luZG93UHJvcGVydGllcykpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfZ2VvbWV0cnkod2luZG93
UHJvcGVydGllcywgJm1fZ2VvbWV0cnkpOworICAgICAgICB9CisKKyAgICAgICAgV2luZG93UHJv
cGVydGllcyhHZGtSZWN0YW5nbGUqIGdlb21ldHJ5LCBib29sIHRvb2xiYXJWaXNpYmxlLCBib29s
IHN0YXR1c2JhclZpc2libGUsIGJvb2wgc2Nyb2xsYmFyc1Zpc2libGUsIGJvb2wgbWVudWJhclZp
c2libGUsIGJvb2wgbG9jYXRpb25iYXJWaXNpYmxlLCBib29sIHJlc2l6YWJsZSwgYm9vbCBmdWxs
c2NyZWVuKQorICAgICAgICAgICAgOiBtX2lzTnVsbChmYWxzZSkKKyAgICAgICAgICAgICwgbV9n
ZW9tZXRyeSgqZ2VvbWV0cnkpCisgICAgICAgICAgICAsIG1fdG9vbGJhclZpc2libGUodG9vbGJh
clZpc2libGUpCisgICAgICAgICAgICAsIG1fc3RhdHVzYmFyVmlzaWJsZShzdGF0dXNiYXJWaXNp
YmxlKQorICAgICAgICAgICAgLCBtX3Njcm9sbGJhcnNWaXNpYmxlKHNjcm9sbGJhcnNWaXNpYmxl
KQorICAgICAgICAgICAgLCBtX21lbnViYXJWaXNpYmxlKG1lbnViYXJWaXNpYmxlKQorICAgICAg
ICAgICAgLCBtX2xvY2F0aW9uYmFyVmlzaWJsZShsb2NhdGlvbmJhclZpc2libGUpCisgICAgICAg
ICAgICAsIG1fcmVzaXphYmxlKHJlc2l6YWJsZSkKKyAgICAgICAgICAgICwgbV9mdWxsc2NyZWVu
KGZ1bGxzY3JlZW4pCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaXNOdWxs
KCkgY29uc3QgeyByZXR1cm4gbV9pc051bGw7IH0KKworICAgICAgICB2b2lkIGFzc2VydEVxdWFs
KGNvbnN0IFdpbmRvd1Byb3BlcnRpZXMmIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICBnX2Fzc2VydF9jbXBpbnQobV9nZW9tZXRyeS54LCA9PSwgb3RoZXIubV9nZW9tZXRyeS54
KTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChtX2dlb21ldHJ5LnksID09LCBvdGhlci5t
X2dlb21ldHJ5LnkpOworICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KG1fZ2VvbWV0cnkud2lk
dGgsID09LCBvdGhlci5tX2dlb21ldHJ5LndpZHRoKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2Nt
cGludChtX2dlb21ldHJ5LmhlaWdodCwgPT0sIG90aGVyLm1fZ2VvbWV0cnkuaGVpZ2h0KTsKKyAg
ICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChzdGF0aWNfY2FzdDxpbnQ+KG1fdG9vbGJhclZpc2li
bGUpLCA9PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhlci5tX3Rvb2xiYXJWaXNpYmxlKSk7CisgICAg
ICAgICAgICBnX2Fzc2VydF9jbXBpbnQoc3RhdGljX2Nhc3Q8aW50PihtX3N0YXR1c2JhclZpc2li
bGUpLCA9PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhlci5tX3N0YXR1c2JhclZpc2libGUpKTsKKyAg
ICAgICAgICAgIGdfYXNzZXJ0X2NtcGludChzdGF0aWNfY2FzdDxpbnQ+KG1fc2Nyb2xsYmFyc1Zp
c2libGUpLCA9PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhlci5tX3Njcm9sbGJhcnNWaXNpYmxlKSk7
CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBpbnQoc3RhdGljX2Nhc3Q8aW50PihtX21lbnViYXJW
aXNpYmxlKSwgPT0sIHN0YXRpY19jYXN0PGludD4ob3RoZXIubV9tZW51YmFyVmlzaWJsZSkpOwor
ICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KHN0YXRpY19jYXN0PGludD4obV9sb2NhdGlvbmJh
clZpc2libGUpLCA9PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhlci5tX2xvY2F0aW9uYmFyVmlzaWJs
ZSkpOworICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KHN0YXRpY19jYXN0PGludD4obV9yZXNp
emFibGUpLCA9PSwgc3RhdGljX2Nhc3Q8aW50PihvdGhlci5tX3Jlc2l6YWJsZSkpOworICAgICAg
ICAgICAgZ19hc3NlcnRfY21waW50KHN0YXRpY19jYXN0PGludD4obV9mdWxsc2NyZWVuKSwgPT0s
IHN0YXRpY19jYXN0PGludD4ob3RoZXIubV9mdWxsc2NyZWVuKSk7CisgICAgICAgIH0KKworICAg
IHByaXZhdGU6CisgICAgICAgIGJvb2wgbV9pc051bGw7CisKKyAgICAgICAgR2RrUmVjdGFuZ2xl
IG1fZ2VvbWV0cnk7CisKKyAgICAgICAgYm9vbCBtX3Rvb2xiYXJWaXNpYmxlOworICAgICAgICBi
b29sIG1fc3RhdHVzYmFyVmlzaWJsZTsKKyAgICAgICAgYm9vbCBtX3Njcm9sbGJhcnNWaXNpYmxl
OworICAgICAgICBib29sIG1fbWVudWJhclZpc2libGU7CisgICAgICAgIGJvb2wgbV9sb2NhdGlv
bmJhclZpc2libGU7CisKKyAgICAgICAgYm9vbCBtX3Jlc2l6YWJsZTsKKyAgICAgICAgYm9vbCBt
X2Z1bGxzY3JlZW47CisgICAgfTsKKworICAgIHN0YXRpYyB2b2lkIHdpbmRvd1Byb3BlcnRpZXNO
b3RpZnlDYWxsYmFjayhHT2JqZWN0KiwgR1BhcmFtU3BlYyogcGFyYW1TcGVjLCBVSUNsaWVudFRl
c3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5tX3dpbmRvd1Byb3BlcnRpZXNDaGFuZ2Vk
LmFkZChnX3BhcmFtX3NwZWNfZ2V0X25hbWUocGFyYW1TcGVjKSk7CisgICAgfQorCisgICAgc3Rh
dGljIEd0a1dpZGdldCogdmlld0NyZWF0ZUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcs
IFVJQ2xpZW50VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHJldHVybiB0ZXN0LT52aWV3Q3Jl
YXRlKHdlYlZpZXcpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHZpZXdSZWFkeVRvU2hvd0Nh
bGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFVJQ2xpZW50VGVzdCogdGVzdCkKKyAgICB7
CisgICAgICAgIHRlc3QtPnZpZXdSZWFkeVRvU2hvdyh3ZWJWaWV3KTsKKyAgICB9CisKKyAgICBz
dGF0aWMgdm9pZCB2aWV3Q2xvc2VDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBVSUNs
aWVudFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT52aWV3Q2xvc2Uod2ViVmlldyk7
CisgICAgfQorCisgICAgdm9pZCBzY3JpcHRBbGVydChXZWJLaXRTY3JpcHREaWFsb2cqIGRpYWxv
ZykKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9zY3JpcHREaWFsb2dUeXBlKSB7CisgICAgICAg
IGNhc2UgV0VCS0lUX1NDUklQVF9ESUFMT0dfQUxFUlQ6CisgICAgICAgICAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X3NjcmlwdF9kaWFsb2dfZ2V0X21lc3NhZ2UoZGlhbG9nKSwgPT0sIGtBbGVy
dERpYWxvZ01lc3NhZ2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0VCS0lU
X1NDUklQVF9ESUFMT0dfQ09ORklSTToKKyAgICAgICAgICAgIGdfYXNzZXJ0KG1fc2NyaXB0RGlh
bG9nQ29uZmlybWVkKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2NyaXB0
X2RpYWxvZ19nZXRfbWVzc2FnZShkaWFsb2cpLCA9PSwgImNvbmZpcm1lZCIpOworCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXRUJLSVRfU0NSSVBUX0RJQUxPR19QUk9NUFQ6Cisg
ICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NjcmlwdF9kaWFsb2dfZ2V0X21lc3Nh
Z2UoZGlhbG9nKSwgPT0sIGtQcm9tcHREaWFsb2dSZXR1cm5lZFRleHQpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3Ap
OworICAgIH0KKworICAgIHZvaWQgc2NyaXB0Q29uZmlybShXZWJLaXRTY3JpcHREaWFsb2cqIGRp
YWxvZykKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfc2NyaXB0X2RpYWxv
Z19nZXRfbWVzc2FnZShkaWFsb2cpLCA9PSwga0NvbmZpcm1EaWFsb2dNZXNzYWdlKTsKKyAgICAg
ICAgbV9zY3JpcHREaWFsb2dDb25maXJtZWQgPSAhbV9zY3JpcHREaWFsb2dDb25maXJtZWQ7Cisg
ICAgICAgIHdlYmtpdF9zY3JpcHRfZGlhbG9nX2NvbmZpcm1fc2V0X2NvbmZpcm1lZChkaWFsb2cs
IG1fc2NyaXB0RGlhbG9nQ29uZmlybWVkKTsKKyAgICB9CisKKyAgICB2b2lkIHNjcmlwdFByb21w
dChXZWJLaXRTY3JpcHREaWFsb2cqIGRpYWxvZykKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfbWVzc2FnZShkaWFsb2cpLCA9PSwga1Byb21w
dERpYWxvZ01lc3NhZ2UpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3NjcmlwdF9k
aWFsb2dfcHJvbXB0X2dldF9kZWZhdWx0X3RleHQoZGlhbG9nKSwgPT0sICJkZWZhdWx0Iik7Cisg
ICAgICAgIHdlYmtpdF9zY3JpcHRfZGlhbG9nX3Byb21wdF9zZXRfdGV4dChkaWFsb2csIGtQcm9t
cHREaWFsb2dSZXR1cm5lZFRleHQpOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBzY3Jp
cHREaWFsb2coV2ViS2l0V2ViVmlldyosIFdlYktpdFNjcmlwdERpYWxvZyogZGlhbG9nLCBVSUNs
aWVudFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBzd2l0Y2ggKHdlYmtpdF9zY3JpcHRfZGlh
bG9nX2dldF9kaWFsb2dfdHlwZShkaWFsb2cpKSB7CisgICAgICAgIGNhc2UgV0VCS0lUX1NDUklQ
VF9ESUFMT0dfQUxFUlQ6CisgICAgICAgICAgICB0ZXN0LT5zY3JpcHRBbGVydChkaWFsb2cpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0VCS0lUX1NDUklQVF9ESUFMT0dfQ09O
RklSTToKKyAgICAgICAgICAgIHRlc3QtPnNjcmlwdENvbmZpcm0oZGlhbG9nKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFdFQktJVF9TQ1JJUFRfRElBTE9HX1BST01QVDoKKyAg
ICAgICAgICAgIHRlc3QtPnNjcmlwdFByb21wdChkaWFsb2cpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBzdGF0aWMg
dm9pZCBtb3VzZVRhcmdldENoYW5nZWQoV2ViS2l0V2ViVmlldyosIFdlYktpdEhpdFRlc3RSZXN1
bHQqIGhpdFRlc3RSZXN1bHQsIGd1aW50IG1vZGlmaWVycywgVUlDbGllbnRUZXN0KiB0ZXN0KQor
ICAgIHsKKyAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX0hJVF9URVNUX1JFU1VMVChoaXRUZXN0
UmVzdWx0KSk7CisgICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0Rmlu
aXNoZXMoR19PQkpFQ1QoaGl0VGVzdFJlc3VsdCkpOworCisgICAgICAgIHRlc3QtPm1fbW91c2VU
YXJnZXRIaXRUZXN0UmVzdWx0ID0gaGl0VGVzdFJlc3VsdDsKKyAgICAgICAgdGVzdC0+bV9tb3Vz
ZVRhcmdldE1vZGlmaWVycyA9IG1vZGlmaWVyczsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0
ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcGVybWlzc2lv
blJlcXVlc3RlZChXZWJLaXRXZWJWaWV3KiwgV2ViS2l0UGVybWlzc2lvblJlcXVlc3QqIHJlcXVl
c3QsIFVJQ2xpZW50VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9J
U19QRVJNSVNTSU9OX1JFUVVFU1QocmVxdWVzdCkpOworICAgICAgICB0ZXN0LT5hc3NlcnRPYmpl
Y3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHJlcXVlc3QpKTsKKworICAgICAg
ICBpZiAodGVzdC0+bV9hbGxvd1Blcm1pc3Npb25SZXF1ZXN0cykKKyAgICAgICAgICAgIHdlYmtp
dF9wZXJtaXNzaW9uX3JlcXVlc3RfYWxsb3cocmVxdWVzdCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHdlYmtpdF9wZXJtaXNzaW9uX3JlcXVlc3RfZGVueShyZXF1ZXN0KTsKKworICAgICAg
ICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBVSUNsaWVudFRlc3QoKQorICAgICAgICA6IG1f
c2NyaXB0RGlhbG9nVHlwZShXRUJLSVRfU0NSSVBUX0RJQUxPR19BTEVSVCkKKyAgICAgICAgLCBt
X3NjcmlwdERpYWxvZ0NvbmZpcm1lZCh0cnVlKQorICAgICAgICAsIG1fYWxsb3dQZXJtaXNzaW9u
UmVxdWVzdHMoZmFsc2UpCisgICAgICAgICwgbV9tb3VzZVRhcmdldE1vZGlmaWVycygwKQorICAg
IHsKKyAgICAgICAgd2Via2l0X3NldHRpbmdzX3NldF9qYXZhc2NyaXB0X2Nhbl9vcGVuX3dpbmRv
d3NfYXV0b21hdGljYWxseSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKG1fd2ViVmlldyks
IFRSVUUpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImNyZWF0ZSIsIEdf
Q0FMTEJBQ0sodmlld0NyZWF0ZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3QobV93ZWJWaWV3LCAic2NyaXB0LWRpYWxvZyIsIEdfQ0FMTEJBQ0soc2NyaXB0RGlhbG9n
KSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAibW91c2UtdGFy
Z2V0LWNoYW5nZWQiLCBHX0NBTExCQUNLKG1vdXNlVGFyZ2V0Q2hhbmdlZCksIHRoaXMpOworICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgInBlcm1pc3Npb24tcmVxdWVzdCIsIEdf
Q0FMTEJBQ0socGVybWlzc2lvblJlcXVlc3RlZCksIHRoaXMpOworICAgIH0KKworICAgIH5VSUNs
aWVudFRlc3QoKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9t
YXRjaGVkKG1fd2ViVmlldywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7
CisgICAgfQorCisgICAgdm9pZCB3YWl0VW50aWxNYWluTG9vcEZpbmlzaGVzKCkKKyAgICB7Cisg
ICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICB2b2lkIHNl
dEV4cGVjdGVkV2luZG93UHJvcGVydGllcyhjb25zdCBXaW5kb3dQcm9wZXJ0aWVzJiB3aW5kb3dQ
cm9wZXJ0aWVzKQorICAgIHsKKyAgICAgICAgbV93aW5kb3dQcm9wZXJ0aWVzID0gd2luZG93UHJv
cGVydGllczsKKyAgICB9CisKKyAgICBXZWJLaXRIaXRUZXN0UmVzdWx0KiBtb3ZlTW91c2VBbmRX
YWl0VW50aWxNb3VzZVRhcmdldENoYW5nZWQoaW50IHgsIGludCB5LCB1bnNpZ25lZCBtb3VzZU1v
ZGlmaWVycyA9IDApCisgICAgeworICAgICAgICBtb3VzZU1vdmVUbyh4LCB5LCBtb3VzZU1vZGlm
aWVycyk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICAgICAgcmV0
dXJuIG1fbW91c2VUYXJnZXRIaXRUZXN0UmVzdWx0LmdldCgpOworICAgIH0KKworICAgIHZpcnR1
YWwgR3RrV2lkZ2V0KiB2aWV3Q3JlYXRlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCisgICAgewor
ICAgICAgICBnX2Fzc2VydCh3ZWJWaWV3ID09IG1fd2ViVmlldyk7CisKKyAgICAgICAgR3RrV2lk
Z2V0KiBuZXdXZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ld193aXRoX2NvbnRleHQod2Via2l0
X3dlYl92aWV3X2dldF9jb250ZXh0KHdlYlZpZXcpKTsKKyAgICAgICAgZ19vYmplY3RfcmVmX3Np
bmsobmV3V2ViVmlldyk7CisKKyAgICAgICAgbV93ZWJWaWV3RXZlbnRzLmFwcGVuZChDcmVhdGUp
OworCisgICAgICAgIFdlYktpdFdpbmRvd1Byb3BlcnRpZXMqIHdpbmRvd1Byb3BlcnRpZXMgPSB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKFdFQktJVF9XRUJfVklFVyhuZXdX
ZWJWaWV3KSk7CisgICAgICAgIGdfYXNzZXJ0KHdpbmRvd1Byb3BlcnRpZXMpOworICAgICAgICBh
c3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHdpbmRvd1Byb3Bl
cnRpZXMpKTsKKyAgICAgICAgbV93aW5kb3dQcm9wZXJ0aWVzQ2hhbmdlZC5jbGVhcigpOworCisg
ICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93UHJvcGVydGllcywgIm5vdGlmeSIsIEdfQ0FM
TEJBQ0sod2luZG93UHJvcGVydGllc05vdGlmeUNhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdf
c2lnbmFsX2Nvbm5lY3QobmV3V2ViVmlldywgInJlYWR5LXRvLXNob3ciLCBHX0NBTExCQUNLKHZp
ZXdSZWFkeVRvU2hvd0NhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bmV3V2ViVmlldywgImNsb3NlIiwgR19DQUxMQkFDSyh2aWV3Q2xvc2VDYWxsYmFjayksIHRoaXMp
OworCisgICAgICAgIHJldHVybiBuZXdXZWJWaWV3OworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCB2aWV3UmVhZHlUb1Nob3coV2ViS2l0V2ViVmlldyogd2ViVmlldykKKyAgICB7CisgICAgICAg
IGdfYXNzZXJ0KHdlYlZpZXcgIT0gbV93ZWJWaWV3KTsKKworICAgICAgICBXZWJLaXRXaW5kb3dQ
cm9wZXJ0aWVzKiB3aW5kb3dQcm9wZXJ0aWVzID0gd2Via2l0X3dlYl92aWV3X2dldF93aW5kb3df
cHJvcGVydGllcyh3ZWJWaWV3KTsKKyAgICAgICAgZ19hc3NlcnQod2luZG93UHJvcGVydGllcyk7
CisgICAgICAgIGlmICghbV93aW5kb3dQcm9wZXJ0aWVzLmlzTnVsbCgpKQorICAgICAgICAgICAg
V2luZG93UHJvcGVydGllcyh3aW5kb3dQcm9wZXJ0aWVzKS5hc3NlcnRFcXVhbChtX3dpbmRvd1By
b3BlcnRpZXMpOworCisgICAgICAgIG1fd2ViVmlld0V2ZW50cy5hcHBlbmQoUmVhZHlUb1Nob3cp
OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCB2aWV3Q2xvc2UoV2ViS2l0V2ViVmlldyogd2Vi
VmlldykKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcgIT0gbV93ZWJWaWV3KTsKKwor
ICAgICAgICBtX3dlYlZpZXdFdmVudHMuYXBwZW5kKENsb3NlKTsKKyAgICAgICAgZ19vYmplY3Rf
dW5yZWYod2ViVmlldyk7CisKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsK
KyAgICB9CisKKyAgICBWZWN0b3I8V2ViVmlld0V2ZW50cz4gbV93ZWJWaWV3RXZlbnRzOworICAg
IFdlYktpdFNjcmlwdERpYWxvZ1R5cGUgbV9zY3JpcHREaWFsb2dUeXBlOworICAgIGJvb2wgbV9z
Y3JpcHREaWFsb2dDb25maXJtZWQ7CisgICAgYm9vbCBtX2FsbG93UGVybWlzc2lvblJlcXVlc3Rz
OworICAgIFdpbmRvd1Byb3BlcnRpZXMgbV93aW5kb3dQcm9wZXJ0aWVzOworICAgIEhhc2hTZXQ8
V1RGOjpTdHJpbmc+IG1fd2luZG93UHJvcGVydGllc0NoYW5nZWQ7CisgICAgR1JlZlB0cjxXZWJL
aXRIaXRUZXN0UmVzdWx0PiBtX21vdXNlVGFyZ2V0SGl0VGVzdFJlc3VsdDsKKyAgICB1bnNpZ25l
ZCBtX21vdXNlVGFyZ2V0TW9kaWZpZXJzOworfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdD
cmVhdGVSZWFkeUNsb3NlKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAg
ICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHkgb25Mb2FkPVwid2luZG93Lm9wZW4oKS5jbG9z
ZSgpO1wiPjwvaHRtbD4iLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxNYWluTG9vcEZpbmlzaGVz
KCk7CisKKyAgICBWZWN0b3I8VUlDbGllbnRUZXN0OjpXZWJWaWV3RXZlbnRzPiYgZXZlbnRzID0g
dGVzdC0+bV93ZWJWaWV3RXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgp
LCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIFVJQ2xpZW50VGVz
dDo6Q3JlYXRlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgVUlDbGllbnRU
ZXN0OjpSZWFkeVRvU2hvdyk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIFVJ
Q2xpZW50VGVzdDo6Q2xvc2UpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gY2hlY2tNaW1lVHlwZUZv
ckZpbHRlcihHdGtGaWxlRmlsdGVyKiBmaWx0ZXIsIGNvbnN0IGdjaGFyKiBtaW1lVHlwZSkKK3sK
KyAgICBHdGtGaWxlRmlsdGVySW5mbyBmaWx0ZXJJbmZvOworICAgIGZpbHRlckluZm8uY29udGFp
bnMgPSBHVEtfRklMRV9GSUxURVJfTUlNRV9UWVBFOworICAgIGZpbHRlckluZm8ubWltZV90eXBl
ID0gbWltZVR5cGU7CisgICAgcmV0dXJuIGd0a19maWxlX2ZpbHRlcl9maWx0ZXIoZmlsdGVyLCAm
ZmlsdGVySW5mbyk7Cit9CisKK2NsYXNzIE1vZGFsRGlhbG9nc1Rlc3Q6IHB1YmxpYyBVSUNsaWVu
dFRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoTW9kYWxEaWFsb2dz
VGVzdCk7CisKKyAgICBzdGF0aWMgdm9pZCBkaWFsb2dSdW5Bc01vZGFsQ2FsbGJhY2soV2ViS2l0
V2ViVmlldyogd2ViVmlldywgTW9kYWxEaWFsb2dzVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAg
IGdfYXNzZXJ0KHdlYlZpZXcgIT0gdGVzdC0+bV93ZWJWaWV3KTsKKyAgICAgICAgdGVzdC0+bV93
ZWJWaWV3RXZlbnRzLmFwcGVuZChSdW5Bc01vZGFsKTsKKyAgICB9CisKKyAgICBHdGtXaWRnZXQq
IHZpZXdDcmVhdGUoV2ViS2l0V2ViVmlldyogd2ViVmlldykKKyAgICB7CisgICAgICAgIGdfYXNz
ZXJ0KHdlYlZpZXcgPT0gbV93ZWJWaWV3KTsKKworICAgICAgICBHdGtXaWRnZXQqIG5ld1dlYlZp
ZXcgPSBVSUNsaWVudFRlc3Q6OnZpZXdDcmVhdGUod2ViVmlldyk7CisgICAgICAgIGdfc2lnbmFs
X2Nvbm5lY3QobmV3V2ViVmlldywgInJ1bi1hcy1tb2RhbCIsIEdfQ0FMTEJBQ0soZGlhbG9nUnVu
QXNNb2RhbENhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIHJldHVybiBuZXdXZWJWaWV3OworICAg
IH0KKworICAgIHZvaWQgdmlld1JlYWR5VG9TaG93KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCisg
ICAgeworICAgICAgICBnX2Fzc2VydCh3ZWJWaWV3ICE9IG1fd2ViVmlldyk7CisgICAgICAgIG1f
d2ViVmlld0V2ZW50cy5hcHBlbmQoUmVhZHlUb1Nob3cpOworICAgIH0KK307CisKK3N0YXRpYyB2
b2lkIHRlc3RXZWJWaWV3QWxsb3dNb2RhbERpYWxvZ3MoTW9kYWxEaWFsb2dzVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKK3sKKyAgICBXZWJLaXRTZXR0aW5ncyogc2V0dGluZ3MgPSB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyk7CisgICAgd2Via2l0X3NldHRp
bmdzX3NldF9hbGxvd19tb2RhbF9kaWFsb2dzKHNldHRpbmdzLCBUUlVFKTsKKworICAgIHRlc3Qt
PmxvYWRIdG1sKCI8aHRtbD48Ym9keSBvbmxvYWQ9XCJ3aW5kb3cuc2hvd01vZGFsRGlhbG9nKCdk
YXRhOnRleHQvaHRtbCw8aHRtbD48Ym9keS8+PHNjcmlwdD53aW5kb3cuY2xvc2UoKTs8L3Njcmlw
dD48L2h0bWw+JylcIj48L2JvZHk+PC9odG1sPiIsIDApOworICAgIHRlc3QtPndhaXRVbnRpbE1h
aW5Mb29wRmluaXNoZXMoKTsKKworICAgIFZlY3RvcjxVSUNsaWVudFRlc3Q6OldlYlZpZXdFdmVu
dHM+JiBldmVudHMgPSB0ZXN0LT5tX3dlYlZpZXdFdmVudHM7CisgICAgZ19hc3NlcnRfY21waW50
KGV2ZW50cy5zaXplKCksID09LCA0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9
PSwgVUlDbGllbnRUZXN0OjpDcmVhdGUpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0s
ID09LCBVSUNsaWVudFRlc3Q6OlJlYWR5VG9TaG93KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzWzJdLCA9PSwgVUlDbGllbnRUZXN0OjpSdW5Bc01vZGFsKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzWzNdLCA9PSwgVUlDbGllbnRUZXN0OjpDbG9zZSk7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RXZWJWaWV3RGlzYWxsb3dNb2RhbERpYWxvZ3MoTW9kYWxEaWFsb2dzVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKK3sKKyAgICBXZWJLaXRTZXR0aW5ncyogc2V0dGluZ3MgPSB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyk7CisgICAgd2Via2l0X3NldHRp
bmdzX3NldF9hbGxvd19tb2RhbF9kaWFsb2dzKHNldHRpbmdzLCBGQUxTRSk7CisKKyAgICB0ZXN0
LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHkgb25sb2FkPVwid2luZG93LnNob3dNb2RhbERpYWxvZygn
ZGF0YTp0ZXh0L2h0bWwsPGh0bWw+PGJvZHkvPjxzY3JpcHQ+d2luZG93LmNsb3NlKCk7PC9zY3Jp
cHQ+PC9odG1sPicpXCI+PC9ib2R5PjwvaHRtbD4iLCAwKTsKKyAgICAvLyBXZSBuZWVkIHRvIHVz
ZSBhIHRpbWVvdXQgaGVyZSBiZWNhdXNlIHRoZSB2aWV3Q2xvc2UoKSBmdW5jdGlvbgorICAgIC8v
IHdvbid0IGV2ZXIgYmUgY2FsbGVkIGFzIHRoZSBkaWFsb2cgd29uJ3QgYmUgY3JlYXRlZC4KKyAg
ICB0ZXN0LT53YWl0KDEpOworCisgICAgVmVjdG9yPFVJQ2xpZW50VGVzdDo6V2ViVmlld0V2ZW50
cz4mIGV2ZW50cyA9IHRlc3QtPm1fd2ViVmlld0V2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzLnNpemUoKSwgPT0sIDApOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0phdmFT
Y3JpcHREaWFsb2dzKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBz
dGF0aWMgY29uc3QgY2hhciogaHRtbE9uTG9hZEZvcm1hdCA9ICI8aHRtbD48Ym9keSBvbkxvYWQ9
XCIlc1wiPjwvYm9keT48L2h0bWw+IjsKKyAgICBzdGF0aWMgY29uc3QgY2hhcioganNBbGVydEZv
cm1hdCA9ICJhbGVydCgnJXMnKSI7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGpzQ29uZmlybUZv
cm1hdCA9ICJkbyB7IGNvbmZpcm1lZCA9IGNvbmZpcm0oJyVzJyk7IH0gd2hpbGUgKCFjb25maXJt
ZWQpOyBhbGVydCgnY29uZmlybWVkJyk7IjsKKyAgICBzdGF0aWMgY29uc3QgY2hhcioganNQcm9t
cHRGb3JtYXQgPSAiYWxlcnQocHJvbXB0KCclcycsICdkZWZhdWx0JykpOyI7CisKKyAgICB0ZXN0
LT5tX3NjcmlwdERpYWxvZ1R5cGUgPSBXRUJLSVRfU0NSSVBUX0RJQUxPR19BTEVSVDsKKyAgICBH
T3duUHRyPGNoYXI+IGFsZXJ0RGlhbG9nTWVzc2FnZShnX3N0cmR1cF9wcmludGYoanNBbGVydEZv
cm1hdCwga0FsZXJ0RGlhbG9nTWVzc2FnZSkpOworICAgIEdPd25QdHI8Y2hhcj4gYWxlcnRIVE1M
KGdfc3RyZHVwX3ByaW50ZihodG1sT25Mb2FkRm9ybWF0LCBhbGVydERpYWxvZ01lc3NhZ2UuZ2V0
KCkpKTsKKyAgICB0ZXN0LT5sb2FkSHRtbChhbGVydEhUTUwuZ2V0KCksIDApOworICAgIHRlc3Qt
PndhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMoKTsKKworICAgIHRlc3QtPm1fc2NyaXB0RGlhbG9n
VHlwZSA9IFdFQktJVF9TQ1JJUFRfRElBTE9HX0NPTkZJUk07CisgICAgR093blB0cjxjaGFyPiBj
b25maXJtRGlhbG9nTWVzc2FnZShnX3N0cmR1cF9wcmludGYoanNDb25maXJtRm9ybWF0LCBrQ29u
ZmlybURpYWxvZ01lc3NhZ2UpKTsKKyAgICBHT3duUHRyPGNoYXI+IGNvbmZpcm1IVE1MKGdfc3Ry
ZHVwX3ByaW50ZihodG1sT25Mb2FkRm9ybWF0LCBjb25maXJtRGlhbG9nTWVzc2FnZS5nZXQoKSkp
OworICAgIHRlc3QtPmxvYWRIdG1sKGNvbmZpcm1IVE1MLmdldCgpLCAwKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxNYWluTG9vcEZpbmlzaGVzKCk7CisKKyAgICB0ZXN0LT5tX3NjcmlwdERpYWxvZ1R5
cGUgPSBXRUJLSVRfU0NSSVBUX0RJQUxPR19QUk9NUFQ7CisgICAgR093blB0cjxjaGFyPiBwcm9t
cHREaWFsb2dNZXNzYWdlKGdfc3RyZHVwX3ByaW50Zihqc1Byb21wdEZvcm1hdCwga1Byb21wdERp
YWxvZ01lc3NhZ2UpKTsKKyAgICBHT3duUHRyPGNoYXI+IHByb21wdEhUTUwoZ19zdHJkdXBfcHJp
bnRmKGh0bWxPbkxvYWRGb3JtYXQsIHByb21wdERpYWxvZ01lc3NhZ2UuZ2V0KCkpKTsKKyAgICB0
ZXN0LT5sb2FkSHRtbChwcm9tcHRIVE1MLmdldCgpLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxN
YWluTG9vcEZpbmlzaGVzKCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3V2luZG93UHJv
cGVydGllcyhVSUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIHdpbmRvd1Byb3JwZXJ0aWVzU3RyaW5nID0gImxlZnQ9MTAwLHRvcD0xNTAs
d2lkdGg9NDAwLGhlaWdodD00MDAsbG9jYXRpb249bm8sbWVudWJhcj1ubyxzdGF0dXM9bm8sdG9v
bGJhcj1ubyxzY3JvbGxiYXJzPW5vIjsKKyAgICBHZGtSZWN0YW5nbGUgZ2VvbWV0cnkgPSB7IDEw
MCwgMTUwLCA0MDAsIDQwMCB9OworICAgIHRlc3QtPnNldEV4cGVjdGVkV2luZG93UHJvcGVydGll
cyhVSUNsaWVudFRlc3Q6OldpbmRvd1Byb3BlcnRpZXMoJmdlb21ldHJ5LCBmYWxzZSwgZmFsc2Us
IGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlKSk7CisKKyAgICBHT3duUHRyPGNoYXI+
IGh0bWxTdHJpbmcoZ19zdHJkdXBfcHJpbnRmKCI8aHRtbD48Ym9keSBvbkxvYWQ9XCJ3aW5kb3cu
b3BlbignJywgJycsICclcycpLmNsb3NlKCk7XCI+PC9ib2R5PjwvaHRtbD4iLCB3aW5kb3dQcm9y
cGVydGllc1N0cmluZykpOworICAgIHRlc3QtPmxvYWRIdG1sKGh0bWxTdHJpbmcuZ2V0KCksIDAp
OworICAgIHRlc3QtPndhaXRVbnRpbE1haW5Mb29wRmluaXNoZXMoKTsKKworICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBwcm9wZXJ0aWVzQ2hhbmdlZFtdID0geworICAgICAgICAiZ2VvbWV0cnkiLCAi
bG9jYXRpb25iYXItdmlzaWJsZSIsICJtZW51YmFyLXZpc2libGUiLCAic3RhdHVzYmFyLXZpc2li
bGUiLCAidG9vbGJhci12aXNpYmxlIiwgInNjcm9sbGJhcnMtdmlzaWJsZSIKKyAgICB9OworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTKHByb3BlcnRpZXNDaGFuZ2VkKTsg
KytpKQorICAgICAgICBnX2Fzc2VydCh0ZXN0LT5tX3dpbmRvd1Byb3BlcnRpZXNDaGFuZ2VkLmNv
bnRhaW5zKHByb3BlcnRpZXNDaGFuZ2VkW2ldKSk7CisKKyAgICBWZWN0b3I8VUlDbGllbnRUZXN0
OjpXZWJWaWV3RXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV93ZWJWaWV3RXZlbnRzOworICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50
KGV2ZW50c1swXSwgPT0sIFVJQ2xpZW50VGVzdDo6Q3JlYXRlKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzWzFdLCA9PSwgVUlDbGllbnRUZXN0OjpSZWFkeVRvU2hvdyk7CisgICAgZ19hc3Nl
cnRfY21waW50KGV2ZW50c1syXSwgPT0sIFVJQ2xpZW50VGVzdDo6Q2xvc2UpOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0V2ViVmlld01vdXNlVGFyZ2V0KFVJQ2xpZW50VGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoR1RL
X1dJTkRPV19UT1BMRVZFTCk7CisKKyAgICBjb25zdCBjaGFyKiBsaW5rc0hvdmVyZWRIVE1MID0K
KyAgICAgICAgIjxodG1sPjxib2R5PiIKKyAgICAgICAgIiA8YSBzdHlsZT0ncG9zaXRpb246YWJz
b2x1dGU7IGxlZnQ6MTsgdG9wOjEnIGhyZWY9J2h0dHA6Ly93d3cud2Via2l0Z3RrLm9yZycgdGl0
bGU9J1dlYktpdEdUSysgVGl0bGUnPldlYktpdEdUSysgV2Vic2l0ZTwvYT4iCisgICAgICAgICIg
PGltZyBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjEwJyBzcmM9JzB4ZGVh
ZGJlZWYnIHdpZHRoPTUgaGVpZ2h0PTU+PC9pbWc+IgorICAgICAgICAiIDxhIHN0eWxlPSdwb3Np
dGlvbjphYnNvbHV0ZTsgbGVmdDoxOyB0b3A6MjAnIGhyZWY9J2h0dHA6Ly93d3cud2Via2l0Z3Rr
Lm9yZy9sb2dvJyB0aXRsZT0nV2ViS2l0R1RLKyBMb2dvJz48aW1nIHNyYz0nMHhkZWFkYmVlZicg
d2lkdGg9NSBoZWlnaHQ9NT48L2ltZz48L2E+IgorICAgICAgICAiIDxpbnB1dCBzdHlsZT0ncG9z
aXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjMwJyBzaXplPScxMCc+PC9pbnB1dD4iCisgICAg
ICAgICIgPGRpdiBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTsgdG9wOjUwOyB3aWR0
aDozMDsgaGVpZ2h0OjMwOyBvdmVyZmxvdzpzY3JvbGwnPiZuYnNwOzwvZGl2PiIKKyAgICAgICAg
IiA8dmlkZW8gc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjE7IHRvcDoxMDAnIHdpZHRo
PSczMDAnIGhlaWdodD0nMzAwJyBjb250cm9scz0nY29udHJvbHMnIHByZWxvYWQ9J25vbmUnPjxz
b3VyY2Ugc3JjPSdtb3ZpZS5vZ2cnIHR5cGU9J3ZpZGVvL29nZycgLz48L3ZpZGVvPiIKKyAgICAg
ICAgIjwvYm9keT48L2h0bWw+IjsKKworICAgIHRlc3QtPmxvYWRIdG1sKGxpbmtzSG92ZXJlZEhU
TUwsICJmaWxlOi8vLyIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisg
ICAgLy8gTW92ZSBvdmVyIGxpbmsuCisgICAgV2ViS2l0SGl0VGVzdFJlc3VsdCogaGl0VGVzdFJl
c3VsdCA9IHRlc3QtPm1vdmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hhbmdlZCgxLCAx
KTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbGluayho
aXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29u
dGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRf
dGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3Nl
cnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0YWJsZShoaXRUZXN0UmVz
dWx0KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xp
bmtfdXJpKGhpdFRlc3RSZXN1bHQpLCA9PSwgImh0dHA6Ly93d3cud2Via2l0Z3RrLm9yZy8iKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfbGlua190aXRs
ZShoaXRUZXN0UmVzdWx0KSwgPT0sICJXZWJLaXRHVEsrIFRpdGxlIik7CisgICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X2xpbmtfbGFiZWwoaGl0VGVzdFJlc3Vs
dCksID09LCAiV2ViS2l0R1RLKyBXZWJzaXRlIik7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fbW91
c2VUYXJnZXRNb2RpZmllcnMpOworCisgICAgLy8gTW92ZSBvdXQgb2YgdGhlIGxpbmsuCisgICAg
aGl0VGVzdFJlc3VsdCA9IHRlc3QtPm1vdmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hh
bmdlZCgwLCAwKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0
X2lzX2xpbmsoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3Rf
cmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3
ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOwor
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUo
aGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX21vdXNlVGFyZ2V0TW9kaWZp
ZXJzKTsKKworICAgIC8vIE1vdmUgb3ZlciBpbWFnZSB3aXRoIEdES19DT05UUk9MX01BU0suCisg
ICAgaGl0VGVzdFJlc3VsdCA9IHRlc3QtPm1vdmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0
Q2hhbmdlZCgxLCAxMCwgR0RLX0NPTlRST0xfTUFTSyk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9o
aXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fz
c2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0VGVzdFJlc3Vs
dCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfbWVk
aWEoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0
X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJr
aXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfc2Nyb2xsYmFyKGhpdFRlc3RSZXN1bHQpKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfaW1hZ2VfdXJp
KGhpdFRlc3RSZXN1bHQpLCA9PSwgImZpbGU6Ly8vMHhkZWFkYmVlZiIpOworICAgIGdfYXNzZXJ0
KHRlc3QtPm1fbW91c2VUYXJnZXRNb2RpZmllcnMgJiBHREtfQ09OVFJPTF9NQVNLKTsKKworICAg
IC8vIE1vdmUgb3ZlciBpbWFnZSBsaW5rLgorICAgIGhpdFRlc3RSZXN1bHQgPSB0ZXN0LT5tb3Zl
TW91c2VBbmRXYWl0VW50aWxNb3VzZVRhcmdldENoYW5nZWQoMSwgMjApOworICAgIGdfYXNzZXJ0
KHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsK
KyAgICBnX2Fzc2VydCh3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfaW1hZ2UoaGl0
VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRl
eHRfaXNfbWVkaWEoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rl
c3RfcmVzdWx0X2NvbnRleHRfaXNfZWRpdGFibGUoaGl0VGVzdFJlc3VsdCkpOworICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2NvbnRleHRfaXNfc2Nyb2xsYmFyKGhpdFRlc3RS
ZXN1bHQpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRf
bGlua191cmkoaGl0VGVzdFJlc3VsdCksID09LCAiaHR0cDovL3d3dy53ZWJraXRndGsub3JnL2xv
Z28iKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9nZXRfaW1h
Z2VfdXJpKGhpdFRlc3RSZXN1bHQpLCA9PSwgImZpbGU6Ly8vMHhkZWFkYmVlZiIpOworICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX3RpdGxlKGhpdFRl
c3RSZXN1bHQpLCA9PSwgIldlYktpdEdUSysgTG9nbyIpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRf
aGl0X3Rlc3RfcmVzdWx0X2dldF9saW5rX2xhYmVsKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fz
c2VydCghdGVzdC0+bV9tb3VzZVRhcmdldE1vZGlmaWVycyk7CisKKyAgICAvLyBNb3ZlIG92ZXIg
bWVkaWEuCisgICAgaGl0VGVzdFJlc3VsdCA9IHRlc3QtPm1vdmVNb3VzZUFuZFdhaXRVbnRpbE1v
dXNlVGFyZ2V0Q2hhbmdlZCgxLCAxMDApOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3Rf
cmVzdWx0X2NvbnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdl
YmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7Cisg
ICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRl
c3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0
X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90
ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX3Njcm9sbGJhcihoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfZ2V0X21lZGlhX3VyaShoaXRUZXN0
UmVzdWx0KSwgPT0sICJmaWxlOi8vL21vdmllLm9nZyIpOworICAgIGdfYXNzZXJ0KCF0ZXN0LT5t
X21vdXNlVGFyZ2V0TW9kaWZpZXJzKTsKKworICAgIC8vIE1vdmVyIG92ZXIgaW5wdXQuCisgICAg
aGl0VGVzdFJlc3VsdCA9IHRlc3QtPm1vdmVNb3VzZUFuZFdhaXRVbnRpbE1vdXNlVGFyZ2V0Q2hh
bmdlZCg1LCAzNSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4
dF9pc19saW5rKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0
X3Jlc3VsdF9jb250ZXh0X2lzX2ltYWdlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCgh
d2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX21lZGlhKGhpdFRlc3RSZXN1bHQpKTsK
KyAgICBnX2Fzc2VydCghd2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9jb250ZXh0X2lzX3Njcm9sbGJh
cihoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3VsdF9j
b250ZXh0X2lzX2VkaXRhYmxlKGhpdFRlc3RSZXN1bHQpKTsKKyAgICBnX2Fzc2VydCghdGVzdC0+
bV9tb3VzZVRhcmdldE1vZGlmaWVycyk7CisKKyAgICAvLyBNb3ZlIG92ZXIgc2Nyb2xsYmFyLgor
ICAgIGhpdFRlc3RSZXN1bHQgPSB0ZXN0LT5tb3ZlTW91c2VBbmRXYWl0VW50aWxNb3VzZVRhcmdl
dENoYW5nZWQoNSwgNzUpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfaGl0X3Rlc3RfcmVzdWx0X2Nv
bnRleHRfaXNfbGluayhoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRf
dGVzdF9yZXN1bHRfY29udGV4dF9pc19pbWFnZShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3Nl
cnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19tZWRpYShoaXRUZXN0UmVzdWx0
KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9oaXRfdGVzdF9yZXN1bHRfY29udGV4dF9pc19lZGl0
YWJsZShoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQod2Via2l0X2hpdF90ZXN0X3Jlc3Vs
dF9jb250ZXh0X2lzX3Njcm9sbGJhcihoaXRUZXN0UmVzdWx0KSk7CisgICAgZ19hc3NlcnQoIXRl
c3QtPm1fbW91c2VUYXJnZXRNb2RpZmllcnMpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmll
d1Blcm1pc3Npb25SZXF1ZXN0cyhVSUNsaWVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7
CisgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBnZW9jbHVlIGdpdmUgYSBydW50aW1lIHdhcm5pbmcg
YmVjYXVzZSBpdCB0cmllcworICAgIC8vIHRvIHJlZ2lzdGVyIHRoZSBlcnJvciBxdWFyayB0d2lj
ZS4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTg1OC4KKyAg
ICAvLyBNYWtlIHdhcm5pbmdzIG5vbi1mYXRhbCBmb3IgdGhpcyB0ZXN0IHRvIG1ha2UgaXQgcGFz
cy4KKyAgICB0ZXN0LT5yZW1vdmVMb2dGYXRhbEZsYWcoR19MT0dfTEVWRUxfV0FSTklORyk7Cisg
ICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CisgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGdlb2xvY2F0aW9uUmVxdWVzdEhUTUwgPQorICAgICAgICAiPGh0bWw+IgorICAg
ICAgICAiICA8c2NyaXB0PiIKKyAgICAgICAgIiAgZnVuY3Rpb24gcnVuVGVzdCgpIgorICAgICAg
ICAiICB7IgorICAgICAgICAiICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9z
aXRpb24oZnVuY3Rpb24ocCkgeyBkb2N1bWVudC50aXRsZSA9IFwiT0tcIiB9LCIKKyAgICAgICAg
IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGUp
IHsgZG9jdW1lbnQudGl0bGUgPSBlLmNvZGUgfSk7IgorICAgICAgICAiICB9IgorICAgICAgICAi
ICA8L3NjcmlwdD4iCisgICAgICAgICIgIDxib2R5IG9ubG9hZD0ncnVuVGVzdCgpOyc+PC9ib2R5
PiIKKyAgICAgICAgIjwvaHRtbD4iOworCisgICAgLy8gVGVzdCBkZW55aW5nIGEgcGVybWlzc2lv
biByZXF1ZXN0LgorICAgIHRlc3QtPm1fYWxsb3dQZXJtaXNzaW9uUmVxdWVzdHMgPSBmYWxzZTsK
KyAgICB0ZXN0LT5sb2FkSHRtbChnZW9sb2NhdGlvblJlcXVlc3RIVE1MLCAwKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxUaXRsZUNoYW5nZWQoKTsKKworICAgIC8vIEFjY29yZGluZyB0byB0aGUgR2Vv
bG9jYXRpb24gQVBJIHNwZWNpZmljYXRpb24sICcxJyBpcyB0aGUKKyAgICAvLyBlcnJvciBjb2Rl
IHJldHVybmVkIGZvciB0aGUgUEVSTUlTU0lPTl9ERU5JRUQgZXJyb3IuCisgICAgLy8gaHR0cDov
L2Rldi53My5vcmcvZ2VvL2FwaS9zcGVjLXNvdXJjZS5odG1sI3Bvc2l0aW9uX2Vycm9yX2ludGVy
ZmFjZQorICAgIGNvbnN0IGdjaGFyKiByZXN1bHQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxl
KHRlc3QtPm1fd2ViVmlldyk7CisgICAgZ19hc3NlcnRfY21wc3RyKHJlc3VsdCwgPT0sICIxIik7
CisKKyAgICAvLyBUZXN0IGFsbG93aW5nIGEgcGVybWlzc2lvbiByZXF1ZXN0LgorICAgIHRlc3Qt
Pm1fYWxsb3dQZXJtaXNzaW9uUmVxdWVzdHMgPSB0cnVlOworICAgIHRlc3QtPmxvYWRIdG1sKGdl
b2xvY2F0aW9uUmVxdWVzdEhUTUwsIDApOworICAgIHRlc3QtPndhaXRVbnRpbFRpdGxlQ2hhbmdl
ZCgpOworCisgICAgLy8gQ2hlY2sgdGhhdCB3ZSBkaWQgbm90IGdldCB0aGUgUEVSTUlTU0lPTl9E
RU5JRUQgZXJyb3Igbm93LgorICAgIHJlc3VsdCA9IHdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUo
dGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIocmVzdWx0LCAhPSwgIjEiKTsK
KyAgICB0ZXN0LT5hZGRMb2dGYXRhbEZsYWcoR19MT0dfTEVWRUxfV0FSTklORyk7Cit9CisKK2Ns
YXNzIEZpbGVDaG9vc2VyVGVzdDogcHVibGljIFVJQ2xpZW50VGVzdCB7CitwdWJsaWM6CisgICAg
TUFLRV9HTElCX1RFU1RfRklYVFVSRShGaWxlQ2hvb3NlclRlc3QpOworCisgICAgRmlsZUNob29z
ZXJUZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAicnVu
LWZpbGUtY2hvb3NlciIsIEdfQ0FMTEJBQ0socnVuRmlsZUNob29zZXJDYWxsYmFjayksIHRoaXMp
OworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBydW5GaWxlQ2hvb3NlckNhbGxiYWNrKFdl
YktpdFdlYlZpZXcqLCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QsIEZpbGVDaG9v
c2VyVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPnJ1bkZpbGVDaG9vc2VyKHJlcXVl
c3QpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICB2b2lkIHJ1bkZpbGVDaG9v
c2VyKFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKKyAgICB7CisgICAgICAgIGFz
c2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocmVxdWVzdCkpOwor
ICAgICAgICBtX2ZpbGVDaG9vc2VyUmVxdWVzdCA9IHJlcXVlc3Q7CisgICAgICAgIGdfbWFpbl9s
b29wX3F1aXQobV9tYWluTG9vcCk7CisgICAgfQorCisgICAgV2ViS2l0RmlsZUNob29zZXJSZXF1
ZXN0KiBjbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdChpbnQgeCwg
aW50IHkpCisgICAgeworICAgICAgICBjbGlja01vdXNlQnV0dG9uKHgsIHkpOworICAgICAgICBn
X21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgICAgIHJldHVybiBtX2ZpbGVDaG9vc2Vy
UmVxdWVzdC5nZXQoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR1JlZlB0cjxXZWJLaXRGaWxl
Q2hvb3NlclJlcXVlc3Q+IG1fZmlsZUNob29zZXJSZXF1ZXN0OworfTsKKworc3RhdGljIHZvaWQg
dGVzdFdlYlZpZXdGaWxlQ2hvb3NlclJlcXVlc3QoRmlsZUNob29zZXJUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgp
OworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmaWxlQ2hvb3NlckhUTUxGb3JtYXQgPSAiPGh0bWw+
PGJvZHk+PGlucHV0IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7bWFyZ2lu
OjA7cGFkZGluZzowJyB0eXBlPSdmaWxlJyAlcy8+PC9ib2R5PjwvaHRtbD4iOworCisgICAgLy8g
TXVsdGlwbGUgc2VsZWN0aW9ucyBub3QgYWxsb3dlZCwgbm8gTUlNRSBmaWx0ZXJpbmcuCisgICAg
R093blB0cjxjaGFyPiBzaW1wbGVGaWxlVXBsb2FkSFRNTChnX3N0cmR1cF9wcmludGYoZmlsZUNo
b29zZXJIVE1MRm9ybWF0LCAiIikpOworICAgIHRlc3QtPmxvYWRIdG1sKHNpbXBsZUZpbGVVcGxv
YWRIVE1MLmdldCgpLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAg
ICBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIGZpbGVDaG9vc2VyUmVxdWVzdCA9IHRlc3QtPmNs
aWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0KDUsIDUpOworICAgIGdf
YXNzZXJ0KCF3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShm
aWxlQ2hvb3NlclJlcXVlc3QpKTsKKworICAgIGNvbnN0IGdjaGFyKiBjb25zdCogbWltZVR5cGVz
ID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzKGZpbGVDaG9vc2Vy
UmVxdWVzdCk7CisgICAgZ19hc3NlcnQoIW1pbWVUeXBlcyk7CisgICAgR3RrRmlsZUZpbHRlciog
ZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRl
cihmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFmaWx0ZXIpOworICAgIGNvbnN0
IGdjaGFyKiBjb25zdCogc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVz
dF9nZXRfc2VsZWN0ZWRfZmlsZXMoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCgh
c2VsZWN0ZWRGaWxlcyk7CisgICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbChm
aWxlQ2hvb3NlclJlcXVlc3QpOworCisgICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9ucyBhbGxvd2Vk
LCBubyBNSU1FIGZpbHRlcmluZywgc29tZSBwcmUtc2VsZWN0ZWQgZmlsZXMuCisgICAgR093blB0
cjxjaGFyPiBtdWx0aXBsZVNlbGVjdGlvbkZpbGVVcGxvYWRIVE1MKGdfc3RyZHVwX3ByaW50Zihm
aWxlQ2hvb3NlckhUTUxGb3JtYXQsICJtdWx0aXBsZSIpKTsKKyAgICB0ZXN0LT5sb2FkSHRtbCht
dWx0aXBsZVNlbGVjdGlvbkZpbGVVcGxvYWRIVE1MLmdldCgpLCAwKTsKKyAgICB0ZXN0LT53YWl0
VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBmaWxlQ2hvb3NlclJlcXVlc3QgPSB0ZXN0LT5jbGlj
a01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVzdCg1LCA1KTsKKyAgICBnX2Fz
c2VydCh3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBsZShmaWxl
Q2hvb3NlclJlcXVlc3QpKTsKKworICAgIG1pbWVUeXBlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJf
cmVxdWVzdF9nZXRfbWltZV90eXBlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0
KCFtaW1lVHlwZXMpOworICAgIGZpbHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9n
ZXRfbWltZV90eXBlc19maWx0ZXIoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydCgh
ZmlsdGVyKTsKKyAgICBzZWxlY3RlZEZpbGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2dldF9zZWxlY3RlZF9maWxlcyhmaWxlQ2hvb3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFz
ZWxlY3RlZEZpbGVzKTsKKworICAgIC8vIFNlbGVjdCBzb21lIGZpbGVzLgorICAgIGNvbnN0IGdj
aGFyKiBmaWxlc1RvU2VsZWN0WzRdID0geyAiL2ZvbyIsICIvZm9vL2JhciIsICIvZm9vL2Jhci9i
YXoiLCAwIH07CisgICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3NlbGVjdF9maWxlcyhm
aWxlQ2hvb3NlclJlcXVlc3QsIGZpbGVzVG9TZWxlY3QpOworCisgICAgLy8gQ2hlY2sgdGhlIGZp
bGVzIHRoYXQgaGF2ZSBiZWVuIGp1c3Qgc2VsZWN0ZWQuCisgICAgc2VsZWN0ZWRGaWxlcyA9IHdl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMoZmlsZUNob29zZXJS
ZXF1ZXN0KTsKKyAgICBnX2Fzc2VydChzZWxlY3RlZEZpbGVzKTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIoc2VsZWN0ZWRGaWxlc1swXSwgPT0sICIvZm9vIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHNl
bGVjdGVkRmlsZXNbMV0sID09LCAiL2Zvby9iYXIiKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIoc2Vs
ZWN0ZWRGaWxlc1syXSwgPT0sICIvZm9vL2Jhci9iYXoiKTsKKyAgICBnX2Fzc2VydCghc2VsZWN0
ZWRGaWxlc1szXSk7CisKKyAgICAvLyBQZXJmb3JtIGFub3RoZXIgcmVxdWVzdCB0byBjaGVjayBp
ZiB0aGUgbGlzdCBvZiBmaWxlcyBzZWxlY3RlZAorICAgIC8vIGluIHRoZSBwcmV2aW91cyBzdGVw
IGFwcGVhcnMgbm93IGFzIHBhcnQgb2YgdGhlIG5ldyByZXF1ZXN0LgorICAgIGZpbGVDaG9vc2Vy
UmVxdWVzdCA9IHRlc3QtPmNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1
ZXN0KDUsIDUpOworICAgIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQo
c2VsZWN0ZWRGaWxlcyk7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMF0sID09
LCAiL2ZvbyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzFdLCA9PSwgIi9m
b28vYmFyIik7CisgICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMl0sID09LCAiL2Zv
by9iYXIvYmF6Iik7CisgICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXNbM10pOworICAgIHdlYmtp
dF9maWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwoZmlsZUNob29zZXJSZXF1ZXN0KTsKKworICAg
IC8vIE11bHRpcGxlIHNlbGVjdGlvbnMgbm90IGFsbG93ZWQsIG9ubHkgYWNjZXB0IGltYWdlcywg
YXVkaW8gYW5kIHZpZGVvIGZpbGVzLi4KKyAgICBHT3duUHRyPGNoYXI+IG1pbWVGaWx0ZXJlZEZp
bGVVcGxvYWRIVE1MKGdfc3RyZHVwX3ByaW50ZihmaWxlQ2hvb3NlckhUTUxGb3JtYXQsICJhY2Nl
cHQ9J2F1ZGlvLyosdmlkZW8vKixpbWFnZS8qJyIpKTsKKyAgICB0ZXN0LT5sb2FkSHRtbChtaW1l
RmlsdGVyZWRGaWxlVXBsb2FkSFRNTC5nZXQoKSwgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7CisgICAgZmlsZUNob29zZXJSZXF1ZXN0ID0gdGVzdC0+Y2xpY2tNb3VzZUJ1
dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QoNSwgNSk7CisgICAgZ19hc3NlcnQoIXdl
YmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0X211bHRpcGxlKGZpbGVDaG9vc2Vy
UmVxdWVzdCkpOworCisgICAgbWltZVR5cGVzID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0
X2dldF9taW1lX3R5cGVzKGZpbGVDaG9vc2VyUmVxdWVzdCk7CisgICAgZ19hc3NlcnQobWltZVR5
cGVzKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzBdLCA9PSwgImF1ZGlvLyoiKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzFdLCA9PSwgInZpZGVvLyoiKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIobWltZVR5cGVzWzJdLCA9PSwgImltYWdlLyoiKTsKKyAgICBnX2Fzc2Vy
dCghbWltZVR5cGVzWzNdKTsKKworICAgIGZpbHRlciA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVx
dWVzdF9nZXRfbWltZV90eXBlc19maWx0ZXIoZmlsZUNob29zZXJSZXF1ZXN0KTsKKyAgICBnX2Fz
c2VydChHVEtfSVNfRklMRV9GSUxURVIoZmlsdGVyKSk7CisgICAgZ19hc3NlcnQoY2hlY2tNaW1l
VHlwZUZvckZpbHRlcihmaWx0ZXIsICJhdWRpby8qIikpOworICAgIGdfYXNzZXJ0KGNoZWNrTWlt
ZVR5cGVGb3JGaWx0ZXIoZmlsdGVyLCAidmlkZW8vKiIpKTsKKyAgICBnX2Fzc2VydChjaGVja01p
bWVUeXBlRm9yRmlsdGVyKGZpbHRlciwgImltYWdlLyoiKSk7CisKKyAgICBzZWxlY3RlZEZpbGVz
ID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RlZF9maWxlcyhmaWxlQ2hv
b3NlclJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzKTsKKyAgICB3ZWJraXRf
ZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsKGZpbGVDaG9vc2VyUmVxdWVzdCk7Cit9CisKK3Zv
aWQgYmVmb3JlQWxsKCkKK3sKKyAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIs
ICJjcmVhdGUtcmVhZHktY2xvc2UiLCB0ZXN0V2ViVmlld0NyZWF0ZVJlYWR5Q2xvc2UpOworICAg
IE1vZGFsRGlhbG9nc1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJhbGxvdy1tb2RhbC1kaWFs
b2dzIiwgdGVzdFdlYlZpZXdBbGxvd01vZGFsRGlhbG9ncyk7CisgICAgTW9kYWxEaWFsb2dzVGVz
dDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImRpc2FsbG93LW1vZGFsLWRpYWxvZ3MiLCB0ZXN0V2Vi
Vmlld0Rpc2FsbG93TW9kYWxEaWFsb2dzKTsKKyAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0
V2ViVmlldyIsICJqYXZhc2NyaXB0LWRpYWxvZ3MiLCB0ZXN0V2ViVmlld0phdmFTY3JpcHREaWFs
b2dzKTsKKyAgICBVSUNsaWVudFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJ3aW5kb3ctcHJv
cGVydGllcyIsIHRlc3RXZWJWaWV3V2luZG93UHJvcGVydGllcyk7CisgICAgVUlDbGllbnRUZXN0
OjphZGQoIldlYktpdFdlYlZpZXciLCAibW91c2UtdGFyZ2V0IiwgdGVzdFdlYlZpZXdNb3VzZVRh
cmdldCk7CisgICAgVUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAicGVybWlzc2lv
bi1yZXF1ZXN0cyIsIHRlc3RXZWJWaWV3UGVybWlzc2lvblJlcXVlc3RzKTsKKyAgICBGaWxlQ2hv
b3NlclRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJmaWxlLWNob29zZXItcmVxdWVzdCIsIHRl
c3RXZWJWaWV3RmlsZUNob29zZXJSZXF1ZXN0KTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7Cit9
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>