<?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>131359</bug_id>
          
          <creation_ts>2014-04-08 07:34:46 -0700</creation_ts>
          <short_desc>[GTK] Remove WebKit1 unit tests</short_desc>
          <delta_ts>2014-04-08 16:38:09 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>bunhere</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>rakuco</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>998553</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-04-08 07:34:46 -0700</bug_when>
    <thetext>After r166504 we no longer run WebKit1 unit tests, so we can remove the Skipped lines for them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998554</commentid>
    <comment_count>1</comment_count>
      <attachid>228834</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-04-08 07:37:29 -0700</bug_when>
    <thetext>Created attachment 228834
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998564</commentid>
    <comment_count>2</comment_count>
      <attachid>228834</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2014-04-08 07:54:02 -0700</bug_when>
    <thetext>Comment on attachment 228834
Patch

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

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

For your consideration I suggest repeating or rephrasing the bug description as the description in the ChangeLog entry so as to explain the reason for these removals. Maybe something like:

Following &lt;http://trac.webkit.org/changeset/166504&gt; we can remove the skipped WebKit1 unit tests as we no longer run the WebKit1 unit tests by default.

I&apos;m assuming it doesn&apos;t make sense to keep these skipped test entries even if you can explicitly run the WebKit1 unit tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998566</commentid>
    <comment_count>3</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-04-08 08:06:29 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 228834 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=228834&amp;action=review
&gt; 
&gt; &gt; Tools/ChangeLog:7
&gt; &gt; +
&gt; 
&gt; For your consideration I suggest repeating or rephrasing the bug description as the description in the ChangeLog entry so as to explain the reason for these removals. Maybe something like:
&gt; 
&gt; Following &lt;http://trac.webkit.org/changeset/166504&gt; we can remove the skipped WebKit1 unit tests as we no longer run the WebKit1 unit tests by default.

Sure. I can add the description to the ChangeLog.
 
&gt; I&apos;m assuming it doesn&apos;t make sense to keep these skipped test entries even if you can explicitly run the WebKit1 unit tests.

Yes, while you can still run the unit tests manually, they will soon be removed. I think the fact that they were not removed from the unit tests script is just an oversight or Carlos wanted to do it in pieces. Perhaps it does make sense to remove them from this script only while removing them completely though. I&apos;ll rework the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998568</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-04-08 08:09:25 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 228834 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=228834&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Tools/ChangeLog:7
&gt; &gt; &gt; +
&gt; &gt; 
&gt; &gt; For your consideration I suggest repeating or rephrasing the bug description as the description in the ChangeLog entry so as to explain the reason for these removals. Maybe something like:
&gt; &gt; 
&gt; &gt; Following &lt;http://trac.webkit.org/changeset/166504&gt; we can remove the skipped WebKit1 unit tests as we no longer run the WebKit1 unit tests by default.
&gt; 
&gt; Sure. I can add the description to the ChangeLog.
&gt; 
&gt; &gt; I&apos;m assuming it doesn&apos;t make sense to keep these skipped test entries even if you can explicitly run the WebKit1 unit tests.
&gt; 
&gt; Yes, while you can still run the unit tests manually, they will soon be removed. I think the fact that they were not removed from the unit tests script is just an oversight or Carlos wanted to do it in pieces. Perhaps it does make sense to remove them from this script only while removing them completely though. I&apos;ll rework the patch.

I forgot to remove the skipped tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998596</commentid>
    <comment_count>5</comment_count>
      <attachid>228842</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-04-08 09:19:37 -0700</bug_when>
    <thetext>Created attachment 228842
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998879</commentid>
    <comment_count>6</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-04-08 16:36:59 -0700</bug_when>
    <thetext>Committed r166977: &lt;http://trac.webkit.org/changeset/166977&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228834</attachid>
            <date>2014-04-08 07:37:29 -0700</date>
            <delta_ts>2014-04-08 09:19:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-131359-20140408073708.patch</filename>
            <type>text/plain</type>
            <size>1747</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY2OTEyCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzRhYjI4ZDkzZDY4NDc2ZjQ4NGRjMGU2ZDk1ZTQzMjlm
NGVmNjNhZC4uNmJkYjI0ZWZlZGNkNjgzZDUwOGYzZWZhMGE0ZWY3MDFjMmE5NjdkOCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEz
IEBACisyMDE0LTA0LTA4ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4K
KworICAgICAgICBbR1RLXSBSZW1vdmUgc2tpcHBlZCBXZWJLaXQxIHVuaXQgdGVzdHMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTM1OQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9ydW4t
Z3RrLXRlc3RzOgorICAgICAgICAoVGVzdFJ1bm5lcik6IFVuc2tpcCBXZWJLaXQxIHNraXBwZWQg
dGVzdHMuCisKIDIwMTQtMDQtMDcgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4K
IAogICAgICAgICBCdWlsZCBibWFsbG9jIG9uIE1hYwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy9ydW4tZ3RrLXRlc3RzIGIvVG9vbHMvU2NyaXB0cy9ydW4tZ3RrLXRlc3RzCmluZGV4IDA0Yjll
YzY3MjdhNmRiODRlODkwZmRmNjZkNDUzZTRhYWUxMDljMDguLjk4MWIyYjZlZWIyNTUxN2Q0NjYz
MWRmZWUyMDIyMzUxYjQxNTc0MTggMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvcnVuLWd0ay10
ZXN0cworKysgYi9Ub29scy9TY3JpcHRzL3J1bi1ndGstdGVzdHMKQEAgLTYxLDkgKzYxLDYgQEAg
Y2xhc3MgVGVzdFJ1bm5lcjoKICAgICBURVNUX0RJUlMgPSBbICJXZWJLaXQyR3RrIiwgIldlYktp
dDIiLCAiSmF2YVNjcmlwdENvcmUiLCAiV1RGIiwgIldlYkNvcmUiLCAgIldlYkNvcmVHdGsiIF0K
IAogICAgIFNLSVBQRUQgPSBbCi0gICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXRHdGsvdGVzdHdl
Ymluc3BlY3RvciIsICIvd2Via2l0L3dlYmluc3BlY3Rvci9jbG9zZS1hbmQtaW5zcGVjdCIsICJU
ZXN0IGlzIGZsYWt5IGluIEdUSyBMaW51eCAzMi1iaXQgUmVsZWFzZSBib3QiLCA4Mjg2OSksCi0g
ICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXRHdGsvdGVzdHdlYnJlc291cmNlIiwgIi93ZWJraXQv
d2VicmVzb3VyY2UvbG9hZGluZyIsICJUZXN0IGZhaWxzIiwgMTA0Njg5KSwKLSAgICAgICAgU2tp
cHBlZFRlc3QoIldlYktpdEd0ay90ZXN0d2VicmVzb3VyY2UiLCAiL3dlYmtpdC93ZWJyZXNvdXJj
ZS9zdWJfcmVzb3VyY2VfbG9hZGluZyIsICJUZXN0IGZhaWxzIGluIEdUSyBMaW51eCA2NC1iaXQg
UmVsZWFzZSBib3QiLCA4MjMzMCksCiAgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyR3RrL1Rl
c3RVSUNsaWVudCIsICIvd2Via2l0Mi9XZWJLaXRXZWJWaWV3L21vdXNlLXRhcmdldCIsICJUZXN0
IHRpbWVzIG91dCBhZnRlciByMTUwODkwIiwgMTE3Njg5KSwKICAgICAgICAgU2tpcHBlZFRlc3Qo
IldlYktpdDJHdGsvVGVzdENvbnRleHRNZW51IiwgU2tpcHBlZFRlc3QuRU5USVJFX1NVSVRFLCAi
VGVzdCB0aW1lcyBvdXQgYWZ0ZXIgcjE1MDg5MCIsIDExNzY4OSksCiAgICAgICAgIFNraXBwZWRU
ZXN0KCJXZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJWaWV3IiwgIi93ZWJraXQyL1dlYktpdFdlYlZp
ZXcvc25hcHNob3QiLCAiVGVzdCBmYWlscyIsIDEyMDQwNCksCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228842</attachid>
            <date>2014-04-08 09:19:37 -0700</date>
            <delta_ts>2014-04-08 16:38:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-131359-20140408091913.patch</filename>
            <type>text/plain</type>
            <size>383349</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY2OTI2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzRhYjI4ZDkzZDY4NDc2ZjQ4NGRjMGU2ZDk1ZTQzMjlm
NGVmNjNhZC4uNTQ0N2E4NGM2OGUzNTEzNmViMmM5NDRlMjkyMzU5OTFmM2RkN2U2ZSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUz
IEBACisyMDE0LTA0LTA4ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4K
KworICAgICAgICBbR1RLXSBSZW1vdmUgV2ViS2l0MSB1bml0IHRlc3RzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzEzNTkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgYWxsIFdlYktpdDEgR1RL
KyB1bml0IHRlc3RzLCBpbiBwcmVwYXJhdGlvbiBmb3IgcmVtb3ZpbmcgdGhlIFdlYktpdDEgcG9y
dAorICAgICAgICBlbnRpcmVseS4gV2UgYWxzbyByZW1vdmUgdGhlIGxpc3Qgb2Ygc2tpcHBlZCBX
ZWJLaTEgdGVzdHMgZnJvbSBydW4tZ3RrLXRlc3RzLCBhcworICAgICAgICB0aGV5IHdlcmUgaW5h
ZHZlcnRlbnRseSBsZWZ0IGluIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzE2NjUw
NC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBObyBsb25nZXIgbG9hZCB0aGUgV2ViS2l0
MSB1bml0IHRlc3QgQ01ha2VMaXN0cy50eHQgZmlsZS4KKyAgICAgICAgKiBTY3JpcHRzL3J1bi1n
dGstdGVzdHM6IFJlbW92ZSBza2lwcGVkIFdlYktpdDEgdW5pdCB0ZXN0cy4KKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9DTWFrZUxpc3RzLnR4dDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJjZXMvYmxhbmsuaWNv
OiBSZW1vdmVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291
cmNlcy90ZXN0Lmh0bWw6IFJlbW92ZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3Qub2dnOiBSZW1vdmVkLgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0LnBkZjogUmVtb3ZlZC4KKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJjZXMvdGVzdC50eHQ6IFJl
bW92ZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdF91dGls
cy5jOiBSZW1vdmVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rl
c3RfdXRpbHMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dEd0ay90ZXN0YXBwbGljYXRpb25jYWNoZS5jOiBSZW1vdmVkLgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RhdGsuYzogUmVtb3ZlZC4KKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0YXRrcm9sZXMuYzogUmVtb3ZlZC4KKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0Y29udGV4dG1lbnUuYzogUmVt
b3ZlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0Y29weWFu
ZHBhc3RlLmM6IFJlbW92ZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRH
dGsvdGVzdGRvbWRvY3VtZW50LmM6IFJlbW92ZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRHdGsvdGVzdGRvbWRvbXdpbmRvdy5jOiBSZW1vdmVkLgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rkb21ub2RlLmM6IFJlbW92ZWQuCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGRvd25sb2FkLmM6IFJlbW92
ZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGZhdmljb25k
YXRhYmFzZS5jOiBSZW1vdmVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrL3Rlc3RnbG9iYWxzLmM6IFJlbW92ZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRHdGsvdGVzdGhpdHRlc3RyZXN1bHQuYzogUmVtb3ZlZC4KKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0aHR0cGJhY2tlbmQuYzogUmVtb3ZlZC4KKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0a2V5ZXZlbnRzLmM6IFJl
bW92ZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGxvYWRp
bmcuYzogUmVtb3ZlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90
ZXN0bWltZWhhbmRsaW5nLmM6IFJlbW92ZWQuCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRHdGsvdGVzdG5ldHdvcmtyZXF1ZXN0LmM6IFJlbW92ZWQuCisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdG5ldHdvcmtyZXNwb25zZS5jOiBSZW1vdmVk
LgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJiYWNrZm9y
d2FyZGxpc3QuYzogUmVtb3ZlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dEd0ay90ZXN0d2ViZGF0YXNvdXJjZS5jOiBSZW1vdmVkLgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJmcmFtZS5jOiBSZW1vdmVkLgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJoaXN0b3J5aXRlbS5jOiBSZW1vdmVk
LgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJpbnNwZWN0
b3IuYzogUmVtb3ZlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90
ZXN0d2VicGx1Z2luZGF0YWJhc2UuYzogUmVtb3ZlZC4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdEd0ay90ZXN0d2VicmVzb3VyY2UuYzogUmVtb3ZlZC4KKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2Vic2V0dGluZ3MuYzogUmVtb3ZlZC4K
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2Vidmlldy5jOiBS
ZW1vdmVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3aW5k
b3cuYzogUmVtb3ZlZC4KKwogMjAxNC0wNC0wNyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBw
bGUuY29tPgogCiAgICAgICAgIEJ1aWxkIGJtYWxsb2Mgb24gTWFjCmRpZmYgLS1naXQgYS9Ub29s
cy9DTWFrZUxpc3RzLnR4dCBiL1Rvb2xzL0NNYWtlTGlzdHMudHh0CmluZGV4IGY5OTQ1ZjM5YmZi
YzNiZGJhZTAxNjZjYjQwYTEzMzk1ZWQ2YmQ5NDQuLmU3NTA5M2YzOGZkNDVlMWU1MjJkM2Y4NWM5
YjVlMjM2ZTY5NWRiMTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rv
b2xzL0NNYWtlTGlzdHMudHh0CkBAIC0yNCw3ICsyNCw2IEBAIGVsc2VpZiAoIiR7UE9SVH0iIFNU
UkVRVUFMICJHVEsiKQogICAgIGlmIChFTkFCTEVfV0VCS0lUKQogICAgICAgICBhZGRfc3ViZGly
ZWN0b3J5KEd0a0xhdW5jaGVyKQogICAgICAgICBhZGRfc3ViZGlyZWN0b3J5KER1bXBSZW5kZXJU
cmVlKQotICAgICAgICBhZGRfc3ViZGlyZWN0b3J5KFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrKQogICAgIGVuZGlmICgpCiAgICAgYWRkX3N1YmRpcmVjdG9yeShEdW1wUmVuZGVyVHJlZS9U
ZXN0TmV0c2NhcGVQbHVnSW4pCiBlbHNlaWYgKCIke1BPUlR9IiBTVFJFUVVBTCAiV2luQ0UiKQpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9ydW4tZ3RrLXRlc3RzIGIvVG9vbHMvU2NyaXB0cy9y
dW4tZ3RrLXRlc3RzCmluZGV4IDA0YjllYzY3MjdhNmRiODRlODkwZmRmNjZkNDUzZTRhYWUxMDlj
MDguLjk4MWIyYjZlZWIyNTUxN2Q0NjYzMWRmZWUyMDIyMzUxYjQxNTc0MTggMTAwNzU1Ci0tLSBh
L1Rvb2xzL1NjcmlwdHMvcnVuLWd0ay10ZXN0cworKysgYi9Ub29scy9TY3JpcHRzL3J1bi1ndGst
dGVzdHMKQEAgLTYxLDkgKzYxLDYgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICBURVNUX0RJUlMg
PSBbICJXZWJLaXQyR3RrIiwgIldlYktpdDIiLCAiSmF2YVNjcmlwdENvcmUiLCAiV1RGIiwgIldl
YkNvcmUiLCAgIldlYkNvcmVHdGsiIF0KIAogICAgIFNLSVBQRUQgPSBbCi0gICAgICAgIFNraXBw
ZWRUZXN0KCJXZWJLaXRHdGsvdGVzdHdlYmluc3BlY3RvciIsICIvd2Via2l0L3dlYmluc3BlY3Rv
ci9jbG9zZS1hbmQtaW5zcGVjdCIsICJUZXN0IGlzIGZsYWt5IGluIEdUSyBMaW51eCAzMi1iaXQg
UmVsZWFzZSBib3QiLCA4Mjg2OSksCi0gICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXRHdGsvdGVz
dHdlYnJlc291cmNlIiwgIi93ZWJraXQvd2VicmVzb3VyY2UvbG9hZGluZyIsICJUZXN0IGZhaWxz
IiwgMTA0Njg5KSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdEd0ay90ZXN0d2VicmVzb3Vy
Y2UiLCAiL3dlYmtpdC93ZWJyZXNvdXJjZS9zdWJfcmVzb3VyY2VfbG9hZGluZyIsICJUZXN0IGZh
aWxzIGluIEdUSyBMaW51eCA2NC1iaXQgUmVsZWFzZSBib3QiLCA4MjMzMCksCiAgICAgICAgIFNr
aXBwZWRUZXN0KCJXZWJLaXQyR3RrL1Rlc3RVSUNsaWVudCIsICIvd2Via2l0Mi9XZWJLaXRXZWJW
aWV3L21vdXNlLXRhcmdldCIsICJUZXN0IHRpbWVzIG91dCBhZnRlciByMTUwODkwIiwgMTE3Njg5
KSwKICAgICAgICAgU2tpcHBlZFRlc3QoIldlYktpdDJHdGsvVGVzdENvbnRleHRNZW51IiwgU2tp
cHBlZFRlc3QuRU5USVJFX1NVSVRFLCAiVGVzdCB0aW1lcyBvdXQgYWZ0ZXIgcjE1MDg5MCIsIDEx
NzY4OSksCiAgICAgICAgIFNraXBwZWRUZXN0KCJXZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJWaWV3
IiwgIi93ZWJraXQyL1dlYktpdFdlYlZpZXcvc25hcHNob3QiLCAiVGVzdCBmYWlscyIsIDEyMDQw
NCksCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9DTWFr
ZUxpc3RzLnR4dCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL0NNYWtlTGlz
dHMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDIwZDM5ZjViZWUxNzMwMzky
NTNjODdkYmM0ZTFiYjU4YmEwYTUwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL0NNYWtlTGlz
dHMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotYWRkX2RlZmluaXRpb25zKC1E
VEVTVF9QTFVHSU5fRElSPSIke0NNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWX0iKQotaW5j
bHVkZV9kaXJlY3RvcmllcygKLSAgICAke0NNQUtFX0JJTkFSWV9ESVJ9Ci0gICAgJHtDTUFLRV9T
T1VSQ0VfRElSfS9Tb3VyY2UKLSAgICAke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9Gb3J3YXJkaW5nSGVhZGVycwotICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNl
L1dlYktpdC9ndGsKLSAgICAke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0awotICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYkNvcmUvcGxhdGZvcm0K
LSAgICAke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9XVEYKLSAgICAke0RFUklWRURfU09VUkNF
U19ESVJ9Ci0gICAgJHtERVJJVkVEX1NPVVJDRVNfV0VCS0lUR1RLX0RJUn0KLSAgICAke0dMSUJf
SU5DTFVERV9ESVJTfQotICAgICR7R1RLX0lOQ0xVREVfRElSU30KLSAgICAke0xJQlNPVVBfSU5D
TFVERV9ESVJTfQotICAgICR7WDExX0lOQ0xVREVfRElSfQotKQotCi1tYWNybyhBRERfV0sxX1RF
U1QgdGVzdF9uYW1lKQotICAgIGFkZF9leGVjdXRhYmxlKCR7dGVzdF9uYW1lfSAke0FSR059KQot
ICAgIHRhcmdldF9saW5rX2xpYnJhcmllcygke3Rlc3RfbmFtZX0KLSAgICAgICAgSmF2YVNjcmlw
dENvcmUKLSAgICAgICAgV2ViS2l0Ci0gICAgICAgICR7R0xJQl9MSUJSQVJJRVN9Ci0gICAgICAg
ICR7R1RLX0xJQlJBUklFU30KLSAgICAgICAgJHtMSUJTT1VQX0xJQlJBUklFU30KLSAgICAgICAg
JHtYMTFfWDExX0xJQn0KLSAgICApCi0gICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7dGVzdF9u
YW1lfSBQUk9QRVJUSUVTCi0gICAgICAgIFJVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWSAke0NNQUtF
X1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0vVGVzdFdlYktpdEFQSS9XZWJLaXRHdGsKLSAgICAp
Ci1lbmRtYWNybygpCi0KLUFERF9XSzFfVEVTVCh0ZXN0YXBwbGljYXRpb25jYWNoZSB0ZXN0YXBw
bGljYXRpb25jYWNoZS5jKQotQUREX1dLMV9URVNUKHRlc3RhdGtyb2xlcyB0ZXN0YXRrcm9sZXMu
YykKLUFERF9XSzFfVEVTVCh0ZXN0YXRrIHRlc3RhdGsuYykKLUFERF9XSzFfVEVTVCh0ZXN0Y29u
dGV4dG1lbnUgdGVzdGNvbnRleHRtZW51LmMpCi1BRERfV0sxX1RFU1QodGVzdGNvcHlhbmRwYXN0
ZSB0ZXN0Y29weWFuZHBhc3RlLmMgJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3RrL0d0a1ZlcnNp
b25pbmcuYykKLUFERF9XSzFfVEVTVCh0ZXN0ZG9tZG9jdW1lbnQgdGVzdGRvbWRvY3VtZW50LmMp
Ci1BRERfV0sxX1RFU1QodGVzdGRvbWRvbXdpbmRvdyB0ZXN0ZG9tZG9td2luZG93LmMpCi1BRERf
V0sxX1RFU1QodGVzdGRvbW5vZGUgdGVzdGRvbW5vZGUuYykKLUFERF9XSzFfVEVTVCh0ZXN0ZG93
bmxvYWQgdGVzdGRvd25sb2FkLmMpCi1BRERfV0sxX1RFU1QodGVzdGZhdmljb25kYXRhYmFzZSB0
ZXN0ZmF2aWNvbmRhdGFiYXNlLmMgdGVzdF91dGlscy5jKQotQUREX1dLMV9URVNUKHRlc3RnbG9i
YWxzIHRlc3RnbG9iYWxzLmMpCi1BRERfV0sxX1RFU1QodGVzdGhpdHRlc3RyZXN1bHQgdGVzdGhp
dHRlc3RyZXN1bHQuYykKLUFERF9XSzFfVEVTVCh0ZXN0aHR0cGJhY2tlbmQgdGVzdGh0dHBiYWNr
ZW5kLmMpCi1BRERfV0sxX1RFU1QodGVzdGtleWV2ZW50cyB0ZXN0a2V5ZXZlbnRzLmMpCi1BRERf
V0sxX1RFU1QodGVzdGxvYWRpbmcgdGVzdGxvYWRpbmcuYykKLUFERF9XSzFfVEVTVCh0ZXN0bWlt
ZWhhbmRsaW5nIHRlc3RtaW1laGFuZGxpbmcuYyB0ZXN0X3V0aWxzLmMpCi1BRERfV0sxX1RFU1Qo
dGVzdG5ldHdvcmtyZXF1ZXN0IHRlc3RuZXR3b3JrcmVxdWVzdC5jKQotQUREX1dLMV9URVNUKHRl
c3RuZXR3b3JrcmVzcG9uc2UgdGVzdG5ldHdvcmtyZXNwb25zZS5jKQotQUREX1dLMV9URVNUKHRl
c3R3ZWJiYWNrZm9yd2FyZGxpc3QgdGVzdHdlYmJhY2tmb3J3YXJkbGlzdC5jKQotQUREX1dLMV9U
RVNUKHRlc3R3ZWJkYXRhc291cmNlIHRlc3R3ZWJkYXRhc291cmNlLmMpCi1BRERfV0sxX1RFU1Qo
dGVzdHdlYmZyYW1lIHRlc3R3ZWJmcmFtZS5jKQotQUREX1dLMV9URVNUKHRlc3R3ZWJoaXN0b3J5
aXRlbSB0ZXN0d2ViaGlzdG9yeWl0ZW0uYykKLUFERF9XSzFfVEVTVCh0ZXN0d2ViaW5zcGVjdG9y
IHRlc3R3ZWJpbnNwZWN0b3IuYyB0ZXN0X3V0aWxzLmMpCi1BRERfV0sxX1RFU1QodGVzdHdlYnBs
dWdpbmRhdGFiYXNlIHRlc3R3ZWJwbHVnaW5kYXRhYmFzZS5jKQotQUREX1dLMV9URVNUKHRlc3R3
ZWJyZXNvdXJjZSB0ZXN0d2VicmVzb3VyY2UuYykKLUFERF9XSzFfVEVTVCh0ZXN0d2Vic2V0dGlu
Z3MgdGVzdHdlYnNldHRpbmdzLmMpCi1BRERfV0sxX1RFU1QodGVzdHdlYnZpZXcgdGVzdHdlYnZp
ZXcuYyB0ZXN0X3V0aWxzLmMpCi1BRERfV0sxX1RFU1QodGVzdHdpbmRvdyB0ZXN0d2luZG93LmMp
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9yZXNvdXJj
ZXMvYmxhbmsuaWNvIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3Vy
Y2VzL2JsYW5rLmljbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE4NDhiOTkxNmU1
OTA4NDQxM2ZjMWU3YTA5MGRlYmY1ZjQ5MTRkYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0
ZXJhbCAxOTgKcGNtWlF6VTw1KHwwVlhpTGZxe1dSNDJVJj1TT0FDPmZFWGw/MztoNThBRDB3ZSNR
fVJZMVZqSjsKCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0
ay9yZXNvdXJjZXMvdGVzdC5odG1sIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRH
dGsvcmVzb3VyY2VzL3Rlc3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThm
N2Q0ZmQ5M2JiNGFkZDQyZWE0NjBlY2U4NTJmMTcxZTUwODQ2Ni4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdEd0ay9yZXNvdXJjZXMvdGVzdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBA
Ci08aHRtbD4KLTxoZWFkPjx0aXRsZT50ZXN0PC90aXRsZT48L2hlYWQ+Ci08Ym9keT50ZXN0PC9i
b2R5PgotPC9odG1sPj48L2hlYWQ+Ci08Ym9keT50ZXN0PC9ib2R5PgotPC9odG1sPgpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3Qu
b2dnIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3Qu
b2dnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjNhM2I5YzVkNjQ3YzcyYTE0ZDNi
NDk2Y2M2MjZkNDEyZjhiMDBmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDMwMTMx
CnpjbWVGWmNVVil8X0F0Q3A4WCpLc0FpKz57TE1SM1pQTilLd05rUzRzSDkmJFBtUHRZfUd6Rypt
aihTNWlndW5tLQp6UXEmMmQyb1c0V3omPHgxQVNmYjg1JGorYlklQENKSVE1UzJMRmVCMGUpcyE1
QDklcV8tfUMrVj9xX0c4VURuP0YKej57WlRNZCEybzxacClUdmZCPTdtUjVDZXBBdURFTj0lSjwx
JlRXfkJyMG9rODJ5V1pMMXI4WT5mS05sfjdKQnxHCnpFY0FybjVfakwwSEFJaGh7fUdUTU1wXjtg
TlJyWiglaHpSWXB7NkQmViYwRVc0V0BjQW5FfWlkJXolYUFBb0tAZAp6UzU4bjIxaDg8OFhCYyUq
SENgJFBmQj1CWiQ8Xlh1Vno2c2RNTHFxcT5JJVVeWmpmMTZUflJubGlQTCV4e1dHRVoKeiNGR0kp
MFR0Yn1xflM/JEA+c3dZJUNlRzdUfGlRVnwxcWtHQ1VQI293RXJpVXhVSjNJJV8mPlFUJUVEenYx
b1hxCnpmRipGcUNxKnFKM2JqSzQxeF5td1hBVjBZSkRpRGdZdGlONHlvUlp7Vk9+IWc0QEx3JlpE
fVk4ZGA5bWM9YV9rUAp6VWs/Zk1vUXtiKmFSSVl3QEFrMlBaeDg+S243Jl5KNn19ZV4jd01QPyE3
ZEUxYzVTWkNnb3BhREVHa2dKJUxIcjcKek5XcTw/RTFtWE5DIUUmKHo9KlcrbyQlJkdpXjljbCpz
KkUtJlYoQn5jaWg7eUZTYV49IXw4cG9yfUg8PT01UDhyCnpVcnM2YkVCPjxZbzFZaXJgPXdKTXBt
UGtVZGchWEIrM0Z0ej0jaEJeWjNxeSpmRCk9e0luQX1hQS1GailgOXhBKAp6dWt2X3IrTGJRR2xg
aX55NUNGai0zcWhBdSt4LThFaUxxNCl8OXhhQmh1cmBSI150MzlgJTQqNHllT3dqbkdCUW4Kejcj
Oz5OTzw3VGwhQXpnRStrR3g9VWpAZ3RTPV5DfHUmWnl2N1g2YjUzdUZnPzwhTHtkVkx0KzZCZyRo
ayh8NyYkCnopaTxfPi0rKW9FZlJYPW0kYlFjK0BJb0FwQnZ2Sj51LT5LZV9oP2JVISYyKDhMSEd8
ZCEycyZ8TjdVTiErOD9oNQp6U2t5ayZ3VVgqNGB3QiZNJWcoZWAqUyk3Oz5YXisjbjNrQFdZWCle
UzxGKHR6ZzdMTFlBOTl+cil8c0BvVVdlOyEKenpDQ08pV0Z2PitsQ0lhOXdCRDQhZVBoUktwUn1B
SSFNVmJVeEBBM1FMPzZjY2khRTk9QTBGIXF4RFdSenlqN1FTCnojJmk+JGAhKVhYY1VNZ3A+aSZ+
YFNUTm4+dnlgRERJbjtlNjd6TjNwKzJQPlF0Uz5BTT5PNjtDODwhVEJASXpYMgp6Zzs2JWtuekN9
PHViY2AlOV5wTH58MSl7ZCR7KUQ2djBVU0puU09IQT5rNEJiWH1kVFVfYEtzSEFxZWpZYjF9bWcK
ej1IbFg+Q3I3dVIyb1IoK15+Xn0hbjx9RDBUJD9eZjZpaWZWZD9fMWFeSWt7X3N4dlJVOSlxUmct
d0Y1MT1eQW0jCnojSnxPQnVrOWwobyM4bSk8cV8/QFN9WVE7LTxjTUJYdmdoU2BJfX5VZH47KnBI
I2RxdVUwbT49alApPGMwa0Z7SQp6eV9kLWZoMVQ9WjtvSnowPT80UDtRKnRzJG0mKXUlJUE3Kkdv
V2lkJnVLd1YmP25qPnFEXyoyZWNyPHlfMWJONCMKemJ3YWU/cmIqdn5OcFpzVCZWLXgyMl4mdUJp
fHplT1VfT1k9SCNjX3RvOCZCcjJyWiFHcGBhWX56YT5YVUZMfmYhCno7dXVgKzZrRzF7Uz1FLXAr
U1p6KlBoMGk0fEJ4Snw9Mio0bm18RjkjeGBiWD5sfmg9M0lIT08hZUIkfXB8MkY8aAp6YUBKLSMh
NFp9bVVaJkgoTnNpSWVKX3dla0U9S3J8QUooe2YwIUM7U1p9R25xMDAzaHRLSkApX0JyP2lsST84
dUMKeiUwbnoje2VQQWl4T0xobWU5e0wtWSRYNlQwNmMxSnA0d3chc1ZFSTdXR2tgMzFOTVUoMURf
c2wqcit7Rj5jfGclCno9QDMwaUs9bzlRMmpgUWY5IVFneVkhPyszeDVvP0U5PSRfUjR2JCsqO0t2
Pm8pWXx9eU9PU215KG1vVWtPV3J+Vgp6byZAMH09JklGJXd0JDBpIWlRekducXxmTlEyZHt6QEkq
ZTVDXi1IIzNfUV88MiU3TnVZYzY7ZXFjQE1gMThiODEKemRINjVwaXU4cm57bzduRHBLejhhe0Nf
XnZ7fmg3flYmSzJVMEw8YyQxXmx6LSlIfUUlUlE/YitAUV90YjRTd2FMCnppaT5APFlQVzVlKXR0
bjcpdUxMSCQkdkAqdFlDbGUqfVpodHFHcj1scEc4TWF1SGAyRSVNdHxDJil8bG1GdEF7dQp6O29I
N3tALT0pVHVmblhGTygqaF81dndOaWxLT3EqaFg0QkpRfjs8VDZRQlpDbXMkVjFydmB4fjBSSDlp
djlOdDEKekN7S1daRGsxaSQyPnw1QHBEcTJiaHh6fHJgeVVmUkRtbmxNXmIrZklgendmJnhMOCY+
ISVQK24halpkZVN0TXV5Cno3X280N2MwU0o1Q1VsPjhYRnghTXhwZE4lPnBxYz57SHZPaF51cm05
JmBFQXQwJkR+byh0T303QCN3ZG9ISmVgaAp6NW5lWjRxZmJKPj5JRnRTZEk5WnokYEZReVAmcGd8
czd9Q20tQG9lZFhMYEJAd3gwfV9HWjxIWDxWS1JocXM1eUoKekooTl5eVGQxZWtIWEZfXmhiT3hC
VVBaeWlvd0R7eylqcmBRXyRkck9qVztjPmVOd25FZzI4YVk0MkdRYTM1T3dYCnpwIUxleT0yaW8m
Tm0lYXpyKn57eHRYYC15en1mfHwwM19hWXFjVEMyMW91MDhmYEpyJERCSWBeaEclQ194TCpPVgp6
MGQ9ITdBcj4+WVEwaWc7RmxVNFMpcmJ1b1kzYWgrZ2BhKX1OVlopeHBvViF0RC1aRSghcEIqMWFQ
eyZxaj0mKjQKekQkMzJaM0NENEJ1OGQqfW5pYHxMTE9oelBxUjxZTjxzcSVxIzs3UClHKkIoXmhr
cGBtZW5BQHdgflh7ZmFUU1d1CnpmTnp+UkEpWmVUWj98LTRxUUtAJkQ9QldsIztHWHhnemU7cmtk
YlAqWmRwQDI0MHJmb1IzS2J1MFVJMXlGaTJ4WAp6NmxlYk1jRyYobjApcyQrXiNSK08pQ2lgZj1z
bWoweiZOKSt1QXxGZmJPKUM9ZXxCXmtZX30kdEgtNHo4VTNLaioKej8wPElqRkMxclhmfm0yOURD
YTgrRy1APiVhQnlpN01wWFdTeT15USRAOSRsfXxCVzU7K1k4OGxlJTEpJWVNZkBMCno9Pl8lOEZh
dXkrSXNrNFJAKlF+eF5fQG1vKElGUH1XdTdQMjZ9R3VCNHZocWt6JXtAMHxIPU40M2h0dkt7SXhe
egp6KTVgektXI0ltTypZZHlqRmFMayRXfkN8Wkp1IWVYbVhCbmA8YHNMbElVT09GVT40aFVTcHV2
bk9tKCl9YkthPzwKekpTMnE3KEZWfCtFMzJmTWM4PU47K3RmSEVQNCU/QzdHUDR9U1J2SzhfQ0Ew
SzFsUGUhayMwMHxYc1ZERmRHdTIxCnpRWE9FYnJOREpALVhUNDM5bFZxak0jdmVzdTUqeCpRcH1e
KlpDR2VjWTQ+JH55Z2pzWVN7bTJaPEk8b2xVI00mQQp6blcwcmdjQDJARzthcUpWYkxlTUVUJHxe
Jih1MD0kemJ1WFJmUHF0QlVUfTtyWlhKQHNqQU5SaEUldW5NKmdsMl4KenRrd1IyPHhGOE92a19h
JTglITUzUmxPKDc4RiZ1fnYpPDRHaGJ7MGBSM2x8TyV4MldRZ2BIUjxfSSgyekhaTmhDCnoqfkk7
YHArMnVYPk40RDhwI2glR3hvUFN7NUJoPjc5TWJ4KWhOZzsmc1B9IWI/QGVUUUU0cEIqVEVlX3I1
ZTRfbAp6aHYpY1VKSHJVVSFFP05DMiFYZShCIyFCYWhLaDArdUlhQV5jcGBaR3paJjMpOzkpLVdm
SE1td2M7eTFATGdzemkKenh7IW01QUpQdkVQNEdsOzwlZzw7aVF3WDI8R3I3I0JGZ1BVNXF8dDQ3
b0w4T1pYTj4+LVh+VGUpez94IVNucCpQCnota31qcEk9ZzQyJEYtVDRnTS1fSF9fan1VamtDY2Y0
bjMwNDFTPFAtYUxBRHl0U2hFOVUrZE9YZVh4cGlyOCl8KQp6YVFEcDhkYWV6NEVhRl9Fej5uLTQw
RlhwNEQ9ZGtYb3M5P25FSX15KDtMUHcjRjdqQmM8cWkhLVUzIUBSdkxrKX4KenUre0chMzRkOD0w
NHo4WDdQUWNZVjZIbjxIY0JXfDRebG5yWlJ1eyFOWXg7XlVAc1VScEIwPXR0eSslVUk2azxeCnpn
b0VWfWF3UFVGJGtnQmVlITtTUHVrITI7PiFMLV5TbnY9NEVDcUEkcXdPWjMoZXlQQj1VQEUtT289
dVF1QVR2Rwp6O2BgPjY7MT5We1E3V31zYE5UaFApZnlJdSVOSy0lTUZgOz1mWmw2SzdKI3RXNTFZ
fTJHOFgmNj4lbSZ+eldAODEKelU5ZkJJQz1ZYHU4PlB8aiglKUA9eDk0NUt5V0RwPD8rKDF2eXhS
KzM5fXk/UU4oUGZYczlrLSMqS19UPntrQnNPCnp7U20pX3FGNiRUNXxfVG8/XjZ9fXotZkk/SjYk
UUJzNllNVT0qeTF6c1pDZEgkTVAhNkh7I0Z5Jjl6Z3NRQXJ3NAp6YWwjK0JsZS1mYlV3ejRMb0hD
JERsSCszWUtnZXZeQn1QYyEhOVR5cFRDTk9xdSs1JTNjYHdBSj00bG4od0dyaEAKemFkZXdPQCR2
VVp3YUdSLWlwWGl9PVhiQlR5K0xMXntnSFItKnhSVzckZmNXJWRiI0tCYzA3cH0jdjl+Ylcoe0Vh
CnplKjBZZWZhVEVXYHFSK1kwVDBjKXpRI1gyYFBOekI0SnUwKGIlWm1zMStBKSZ7LUUmKHtKLW9K
cjtQV31FfXYrNwp6PkJVVmptfj1eOGBCT1FFSWshOHA/akVTMDlEfWt5UFQtPGJJQElsdldyeSRI
YmctP3A3UztEe3t8RkVHTm8+MjcKeksxSit7MEApdShQfDcxRSQweD9SV3JrTGNNKmdAWU5aZndD
YU1AOHJaWk0lRUl6e1AzYj0+VnljJn0mVHd5ZkFaCnpYVFV0OG4qUTJmelcqMzhYWFUmKjF0MG1g
eH0/fnhDRlghKHkwQUNMSzt7a3Y2X3NfbU0zI1AkXjRzTHJRdUw2PAp6VDxXNGNrbGFrOHZLTihG
RF9na3R4cGVmOWpieDV1KnQjaU1WTlo5UiQ7JF9jMj9jTCFnQGJAQVFYaXZHNTB4OHMKejBTb0sm
NjZEfCFoWTR3SnBHcWE9UCl9NHQlfkQrXk4+XmBBdSMkd3dwZyEqa3k7JFp7PFBRbT8tY0R0WGw+
PVRhCnpMeGA/QXtoXyZMPD1OIXt0aSRePFZsJnEteDZoN1hzfiUycVp8YGNYSFJiWEhGc05pQlZV
YUVxUy17ST48Mz96bQp6SEY8PUQ+XyoxLVgmP3J1QSVaXyFZM2g7TlBaMDheYWxrdExeRD44SXlf
KGdCdTxsbHxQZURRPSlCbzBgb24jY20KejFMTjJuc3NkdH1RU2cqRFNReEVlVHVpVWJ3cF5NNjBj
OSF4WXBAa2tXRXMtdnpmUFNFYVdTQ2I9VkYlKUQtdUlZCnp2JV98TncwLW5lb0ExPTxHMFJXeHk2
JElNNWVPQEgtMW5ZWGArWUlgSVdGcXRTNjZFeUJBcjh1Myp7OV8wcj5Mdgp6RG91NmVVfXN+TyRI
Xik9P3ZfRjRjfHJsOUlOOTc1SmEzZD4pM05qK2QoZzdrPGEpNlMoPWQ0NUwpb2NiRH59KTkKem9z
KSQhPz1QKUFvNjxGR0BRRVFKJUIkKmBra05eaUQqK3FGQDc2QjxpQS1fSF5ERSlWeGRUb1FWdkR2
OVUyJWlyCnpARko8SFAyOW4tO056djY4Z2ZxaGxKfWk+KFMzSH5aalc8ZXUxViRUZzdMZm97Mms9
KF5iQE9CVE9vJEJtSzFFeAp6ZUJ+SGtHdzEpfXAzTExgMj9hZWFOVHN9YmIpRmZnNmJpZiZFPWZX
RDVPYy1ARFFnRmtkX0shZTwqOT5DcUVgVm0Kem5uajBuJHdwYjBPfEReVFImNXxeJjFIYzRfNGp9
S29BblY0RzcjRig/RlF5aShFZEVIY3VVeT5CbGYoSzBIcUtqCno4OEx1cjNBcE17UXYzLUQyfUIz
VFpBSilvbig5dkN6PCM9eFBvc0xYM2tLJGVscH1uajQ4Yzc2YEB4UlZudipOYAp6SzV1XiN3Qmdo
MiEkKFVGR2ptbjV0PTR2KTtsQU89RFQtfiUzckVAYF57MFJGeHVeS0hmXmMlWnVYZ2xNZXA2bkoK
ek1wOWxRI25yNjEofigwcGdpPTs2WElmeCplWVN5am1GeVQ5TzVlISNlQ2Q1aVZ8UnFeTE5RdkRa
clU/Rld6OGItCnoyek1hKWR7KzVSVH1kZT11ZztRc29DWjJJNmxHQVBzfVcxSll9fWg7IX1Gdnlp
VEJ9PkNQezA3I1JTJWFjYVVudQp6VWREfiNMfCppSTZrayhZK2NRfE04eWJqMyslQl99I0pMXk1w
V3pnIW5+c3JGP1BfO145ST5xNz0qeW94ayF1SnEKek47VzhQMFUzfXJncUdTcT0jdH1WMyoxemEm
RlNsSTN9YyNDY0tpMHVLcFBNcyRxN3xZM0k+JTBJa1JYOWhKWE14CnokPlQoYk85dFp6Nl52YVVI
KkFpJVRIbXN5PE5KOX5qXjJzRkpSZX1saiEwTnNHYy1ORihgZTRgcntANEFPWGJ5cAp6UG9kalVe
V0x6aE48UGBFcyhvT0NXPktuNT49OGcwWVgqK2V2aiZrenYrPnQ2Xnk2ZGBFYHI/bmFPSHxAZEdX
cXEKek5gOUx1WHgkTipGPkMqRnpnTzsoIS1tUjEjTXxXQmxBTFI9YDVyeEF5cyshb3smNFZLdmdH
QkVIbWI5YWY0bk5ECnpFcGJDaHVoZGFiY15oe2JTMEZ0ZE9eKyhGQ3tpY30jXlZMVVhLOVIoQGpP
Q0t0MG1YNkwpazhjXjdeRGBLQExfNQp6NSgkanJvP0I4dXJ8TGt+STdxWWhhcFhNY25POXxJaHQ9
ZmQ0fnB5bmZ3SVdQdVh4UUMrZmY4YjktbFltRmxPYGQKek8tdzQ0ZjNSekNEakNeZytuVnx9LXho
M1B2UXt0MklefFRxY3p3QTc7V2BzNnZVKzAteVpEWG0/XkR3ISF9XjY8CnpGWSoyS2p0aVREd3h7
QnM3YmZYX09fRkApJTYjeTFONVpjNGdJVEJJanU4LXYmNjU9UnhVYFdRY3s1ST81K1FSWgp6RzYp
cyN1cGYoRlNHcS1yQSpBRldZOUl3RWtgMnNySzd5eitxdUxANCZCcjZmIXNrQG5PcWhycFcoTVVt
UVB+b3gKemwjPCM4Zmc/YUNBIX5KPlF5aVlRU258YH5IYV5raWAhNytON3kpNHBxTjtRTmJPIT5r
bmVLQm4rZCZSZDdGK09zCnpsd0hoRzwtZXt9clNTVGRUWWwtUztxUzJjeVY7QSRyd1RrbWFtOzBR
Y0pgS0NeRTVURjUzfSt7JEJJJHVpRD5oeAp6P2tNZmwrNCFQQ0xBaUdJJSF8ekR3MTUjb3RQWWJ7
WWY1e0F0Iz9DUFBlcjg5P2kyKXRHVy1OKzJUcWp3WCYwaXQKektSRCM2Jl5Pc2kyQ05XMU9IJlcr
TERWV0xsZ3d6OEArZWskbmIxMXAmTFpPNHIocktAZ1FHKShZfTl1VnFRPkIxCnp6fSM3eVJ2TlJj
ZCtte0VFLTUmISRGbzkpO1owezFvOHtKN0ZmMWJyNTtFaDFzaCVCQ19IcCQ+WnZ9NE0rczZyRwp6
Rk0wXj5EU3o3UlA4UmwwY0hlaEJmOFhjeGhBbGElbHd6P0g1RWJxJk4wcW10dVBPSmY+TTVwTFhT
RU05SHlmfXoKeip9PUpJRHFARCE1RWpUJDlhTDY1bCNUKXY8UDFiQDVmaXhXdX5lTDVRe19lQHU0
QnRSbTVTV3BMQiN2MTVMSSFlCnoxJHNYeG9vPEZsOUxMSVRCTV5GOVBhVHJiOzdjVSs2ZDE2e1hL
cmNPK2M+WH5XYG5DP3d5R2tLPU4xRk5nSDRqOQp6YmtaMTw0OVEzZipSN0ImPihubCtfRH1BWlV0
WFBnKntQTy1vQXdzYnZONiNLaWlDQSUoKzF4Y1pIQ1ArSmVlPUcKekZZSHBnUEh0OUVOLX4tfkxS
IVU+OHVKPGE8ZnUkalZiSFRaWE5BflghJkE8M2h7V1RCREprLXNjP1pLc2hEfTNnCnpZTX45JXhz
SXd5dDBUbUJhQjBhYyFIQmNMZ3lJR2s+cm19eTtsJjxJWChCPHxJTXA0YFF0IUFYRlQtdSZ3bDJH
bAp6dDV0YztSYUJ0SHY2XlF8N2NVZTNlOT82PiM3dnN1czU5ZChzd0V1TzJZZjZ0XkApcUlHQUZ3
eGI+PWxLJiM0e3EKei1hSGd1bGx0Xm4hVTNQSGVlc3MlVT1UbD13JWZEZyZld1lETnUzKS1aJWU7
XlZnJCo3PTd4Y2xHJFNzYGlyYD4tCno+PnoqRlpqaG9ndCQ7QTFKamUjbSMjYj0mZ0dfIz1zclYr
ZF5tJUstYVZlWUlJRyNRQ042P347KGdFRmtKdDc0Ywp6PU5ZKHoxSTEpZkczSVZTaWhAVztCYVVm
WmpMbEo3NTN+ZkxMMWc7PWp0JihNXmtZOHFeM2hSTnQzVno/cUpAQTUKejBGNSZYQX19P0FKUEh8
aTMrVzlldEJ8WiFgYDFfWUBCbFg/WFpEdW9mbyZgODxoUUYmWmZ7bSN0Y3JlKmVfMEY+CnpKQ2xu
O15tNF5QKj5PKkllSUdUcXNufUNHPG5xazl1b2EhUFR5Z253YSNQUzA+eGF1WkZOTnwqWDdaKVBq
c3ErPQp6UE9oblFze0dAZHNManN0Y088YSh6ZyZZWDhPfVNnKjtkOyNPcFN+fDlZKXBRTjtXZjFk
a09UbWM9cCpCNCpnLXYKenl1MVMqLUFadDFQWW1qYys5aztFKFQ8b1JtZyNke2tCeE5XOUdqRDwy
K1YzTi1CeXI5VFkoKGJIc15XVmBBKWpLCnpiVmA5XjJjND5xWD57Wm50b0ptJnk7QVhqRFVTfmBv
TWgtfiRyUHtQIVNiI0ZrSXBSekVYezBpJC1kTzlYVHM9WAp6OHxRU2swTzlHSG5GYzZWOUN3Vztz
YlYlNU4wcTx+N25WYW52YXJBYiVwJE8mSzJ7bmFjfkkzYyVoYWp9R14jQzwKeiVPI2wwaD4jIWZ0
OXBlaV93M1M3TzBzKGIoWnNmQTlNcmYyUHkkdmVRKlg7dVYraUFOaEpxKEhtdzlrM1Z0b0QoCno2
WGBpeDFWOzVMaz1kfllmWCkmR3hWS19wSWlpZDtGcmVReXRWTUQ7PXpQbEdwTX50OzJuZUBkeShF
UDkkY2FaSAp6b190NSY8K0NYZnZENDVweXstN19Qeig4PylRYjUwcTltQFVeQzA4V3sqRVMobGVj
Nz44ciRtaDtmYWI/PD1VYnMKemNqZHJJVGFzfEZCWGdSUGhIWj5iaiZpWDRqK0pDSnIpeTU9Syh8
YXFYKWlnSFUrUSg2dzZQN2NzSjhCKWlJMEp3CnpRUkM1WlJuTjh9NVQjQUd1dGU8NWluflZ7VSE2
RldVMSM+QyVvVjVOTXgkLUdqVjdJJnk9PnFgYT9HI1JKUENmMQp6d3N2czs/YUFLQFp2U25gQzhw
emluOGJiWHI3ZD9kJTtkcndQQV9gaztuMzRGOGBAMDBvdzlnVHJ4d3FGWVVucW8KeiFQSmRaPD56
XilnNjxyMHo5VDQ+TGx3NFZ7a2NrfGQqJmlWRiVaJVh0UFBRPksza0c5a2t3cDl6KFFORkJQdDFt
CnoqRiMyKWlhM0c5IyNvWGBaNE4qWmd5LVJyZUZ2UExTcUAxJGRHNEhJQHNTKWdaO0xCezRKMXtQ
RF4rSSNEVUNFVwp6aDZVZlBxTD5DVzclaGhreEl7Uy0zcURxNUdxbmhyKEFafk5CP01wfHotcmxO
MHkrdiZ6cHlIRDtqPChKKjV4QzEKejlmWip9Zno3dmtRbD9YOTxpNzxScHlhOX5jTHFEd25RdkhC
UCRVanR4cEdveVNOTyM+aDExbHtxVn1kcjV1QEUlCnorM1JlbVFoMGQyV1AweDQ4djhqLTFNWTsq
cDZraVF3QSh6WURhZnJkQjM3RShnazgzWF85YHtiTSNiV1JISWoyTQp6WkA/PWo+cWNAPDMtWVZq
MFpWR0tOJGdvaCZxcUZvWGJ0WGY+OHJrcyN9RHA/bU9WWX51M35iIWhZRk4keD1WOU8KejxOTUVr
LSFiJSVKT3FtUDdzNl8xa0RUbzV6PTwlU0JSPHhPQFdBbEFzdU53aEJmQzVUQWBDYi1obyVVYzhY
YWh0Cno/PmMpaz5GLXlZVVV4QUw0Km9lJXd1QXl1KVpIaWk3UFheMEZ4aTZYaVI9OTF4RnVAJEJ0
Y3s8TUZSalNBIS0oKAp6cTV4KXwoYjx1LW9Db2UmNlMkfFc4U3xUSDJIblJqVWBrYERVXm13cjk3
MExYTT5JPy0ySzNRYCpwTlpsSTEqP2UKek0tN15ZR1k5LWREcnBXZHhIK1pjUypRbT1kTmpwZzJu
O20jSz9zNV57TUhxS3VkIUpwJFRHKyVfZiU/M1hwciYjCnpuNW5GJVg0WEV5Y0pkRzloMW1KRlo8
Wl89TEBANUJYRzl3YzhPZD05K2glan5mK091eGB8akNXTWE1IS0tfDZENQp6VEE0VVpKVjQ5Ujw8
SzdYe2A5NzdQMkZLfUZgbSVGQkdWPztXTUotS1JHUEBueWtoRHRiaFlQcUpybyY2WmVhTE4KemxA
c1JPU09jYEJXJkZFbF8+fi01SXgmMHxiTnVCQUI5ZjB2Ul9AQnpuZkhMa1hWJnRAYXNrblZaQ2Zp
dUdCblYpCnpyTXt+OSVzYTcxT2Jhcl4qQiNKfVI5Q2VffExHcShlUT1RYkNQNWV+I3J5TzdMdk8x
YEA+ZFUxaHExUWheNjc4OAp6X08/V3JKMCFEUzUoVkhnOVZQZ0ZWXjh6bFJea2BPWlpEPlB7b0Aq
dXJPdj56P0dfYHxJTWZzZSRXPlBIMDgydj4KejNAOEYzJEM7KGRNPTxBNnpAMTdySDFyWHNfIypP
JWg5PEc/emxjRSVOWlc5O2QxfCpBOztgcDFhRkxsNHNUK1kxCno+bEtyUFlFdj5XUyNFJFh3SEM3
KUIqcXFtcyVfJjtDPk5VPGgpZUg0Kn19ZTUpKjQld19YU3hhNFpFKntNdGpUZgp6SH1weSRhUVk8
Sz0rZn1fPkU4PiFPIWg2UnpCclFBXntZcWAjJHZxPy00SVo7QyNCNChaZUlPOCY1PFFMejI3UVEK
ej5aSHlBaWRtVl5USCZkKzF3ailqY1c1Jmp7ZlAtb3I2ejw+ZzBRKmJaOzUqYD0qT1hKcD13RSlM
YCRxIVZCMSk2CnpPYExPPD9mcTMtcXQhTEJCMTxQdiNTUlJfZFUme28ofkczRil3YCpMb3QyeDhI
RXVFPVlyYjVqSXtRPUFRX3txUAp6KEkmMWJEWFFIbEF2fnNUSXlZWDBhUXVBeD01NT15KXRqYXx7
e0dQPmZBOVdUZ09tT2VLRF9Ba1lGelF6XlVJWT4KektIV0syUTJ6UytPbyFmWnVqKUo8PUpebjJj
Ul9ZeFVxciUmTGM3WlpRdH02PDQocVFJQWA0RVAxXjxaYHU2blVgCnohOF9HRUhTOEl3ZHtfMV58
SmBUcl9RTzdzPzAyNm97aDlNTiNrTS1UQDtqSGxwVV9fcUp5S2FgdiQ3PFh1bDNmZAp6P2lANnti
NXB+UEJeNFV3WjtkdEs+e2ZhQzFAYiE3XkFaUCZTV0c4b1FESUd0cXxvQmlvTipWS0pXPU96NipX
Kn4KejZjTy1ybHVaZiokYmZgNCZpaTIxN0dAWjZ6QSpKNEd9VCg0M0g4Q3FNKH11VW5NPyhIYW0y
NiUxKjtBaEw+VytoCno/SnpAQnFkPnpoYVh+cEtKTGdyQ0hmNmlMd3omM3x7cis5dUQ9an5FIU44
aEJvSEMmOWx4ZH05KyF4ODYremtocwp6dTlMUT5tTnJTcWotakVFVlNFPHhEeysqc0cqV0Q4SD9i
U25qejBLK3ojcTJtXnt9VHwlQFdIXkElVDUmZFZZZloKejdzSDBEPjdKQGk9bGspMnVRfSZAQV9j
XzxjaD91dnRTbkp4diYmbT00RFBLZ0tqZ3xHczgtNS1SWlVVWDNtQ294CnpKZFl9RzsjaD8+eFly
bDw4fW0hMWstanxOcVpWeCZpPGlCK0l5eEZfYnZhSit2TEgmPFBkPDwpcyR0Q05CRn4tZAp6WlZ8
TjsjYVJ0V3d6fnhQTHE3N0p6MUJvMmcoUkRWUnwjSns4OVZkR3FrNjNiYnsjMnpxe3ZjWSF5Mnpf
PllMeEYKekJEJmBUZEheIXBURz1yU2lkWXo9JTVlbnQ/RnI0UE4mPD8oWE9VNy1CSHI0U1phTWlt
dVV0P1ZHaW5ab3QoQzBqCnpeX19LUyFUTXBiWUI0KEJZJU1QbE4qQTs3YGUqZyQ8fWo+R0pteUx8
IVJzSiN1XnBZVmRhaHpjOHshazdOO0hTPAp6Qzt5NU8kRTA5TENaYm5OSTN4dWxXcVlAe1hBYFFe
TXR7NCVKPl9FWnkmY3R2P2Foe1B1KUJnPmd6VGpvQj4yZyEKekJYMUxQPm5qOD0yNWJ1X05+Y2VA
K2V0Y1VUTU5hXl4tKEc5TDJiTCE3O097Nk1MUjFrKE09YlhZe2RRUkRpTWVqCnpeMiskRVdRWnw7
cHAkK1hXNXk4I2BLUlU5LSp3JXt0djZrZD8mIWthd2NeSk04KjN4X2J+R0YjeFhfMkUrPWYkPwp6
Xno/YGI2VEBpdEpiUnVXN2N5RUF1cTR8TG4lZCEkJnNwQm1jNk0+K2hLPTB7UjtBTzAlUTwwY0N8
Zj9fOT1fSjsKenQ+YExheiNyOGthaXcxPkBwOGNVNGhKTDJfPlk7IyNyRkd1U2V7bjl0SU1EUkUp
OE1EZkgxfjAtS15odyRKc09NCnoySDY5fVY7T0VjQWxtQ0dWVSV2bXduKFdIK1opaChxNWo9RVlK
OGV8WEpjTUVeV3crV180PVI9XiR0MV4/VGBAMAp6a01EZkZTQElESlhxRHkkO1dIOSpyV0c9cVEz
N0ByMSUrenxJKXV1QTE9RU9CWm51bloxZEF9LVB0YlhyRmdNSWAKelVCYlFxM0ZkbDRBe3VuV3hX
bWVXe15zdDI4TFJONSlGRF5GZSVCKjRBb1JgOF9iKntUTnBhLXRAWHpyMU4wIWUzCnpnPmtSN0s7
OVY+Nlo5K2BYJFFpbWR9XjRmbFMwcSVJe0RpQjY1cSthRkdeUj5jcT1GX0dZS2ZHZ1FgPzNxUHZe
aAp6aUpzb1RtU3hUbypIQXcpN0I4YFVofXN4NiZuTChqKXdGSzQkMCNtfCNxQztvJDcwLSNzUGdE
OF48am14Zl8kcnIKek1BJjg5N1BsZ1pAUnJeJkheYUB6VGZZR1VVekEzcTxXWXVmNTJ5QCZzK08o
IzAmVFhKc1pOdUtkRk9YdiRMVTJqCnokKm1ncSRTN3pgamRNNk1weUBIWXw1T2lGRVp2fjtAX0Nr
KXw2OzNtYDI3d3VUWT19fExmPTJlSlpgJVRIOyU8VAp6XilHc1dlSC1gNTNmIV5FT0x+ay1JZilg
em5gV0VZa1E3fUxJOTJNU0lGWHZJV09oKGs2U2Zke25WTDkoTCtBfUIKeiY/RkJtT1kwMm12KFde
Q0lZemB8QHtqUl9nOSl1ckV7eVRUbzNrZj8zZ2RgYmczOzEzRUp5dzwxbjNCaChoZkYjCnpsOWRm
dSooTkkzVGM/MX1ZWHcxSXZxXyMyS0JkKXgkSyQ/KnludGpzOHFENHpLM2hBV1puLU1qe2Aybykm
UUVmVAp6ZVhaKl5MWnpTZkFfSCpRUTE7Z1opVCpGXmk1KjlLLVgwJTJJdj87TkNaJUJEYG5AJT1V
JiMtfTNtckRxLUxlU28Kem1YP3Y4R3ApSUszUWp6VUo9YzVKTGRFdiphaUUkTSNwSEVOPGV8RD1C
IzF4Tz9kY3dXZk1kMG8qa0sxfCVNVWVlCnpGfE1eZ3NIdUgoPyN4PTs4SVB+czB5Nk5PN31Zb2xO
Q15YaFE8eXhwYSMyKTFHdyV1KVpOPUdmRmdEY1Y1eUA4Wgp6WT5vR3BAekhBOXI5Xj4kKz5XaHtr
PTRzKE8rRXJPSDF0Q3RJZTV3QiY0YWFpKiZmJEZOeG0tTUZMQFlzSlh2S3MKemN2UDdjPkI3d3Fz
aTVST0BFa3xWeEBlYnB4SHcwVDxxfiVBTDdWenEmPSYzSkhGUCFAT2R2MiNUOHdiV2cwK0YjCnpa
aU4pVTghfDFMeFhJZVNxa3c5TkBnUEt0eV4oQkIxeyNJSHQ3NmZTXitLTUgrcXtQKSRSYF49ITsw
KmdWMkw4MQp6dypkVmhQMkVEfVdjVFRhTlhZPyYkXzxDPDl5K3Q3RUVubC02ZlJoMSVzX3hVNDNz
SnBwbylPY2lmazVTLUN8PmwKek8wWUt+P35tXmBYQE92WXNBRjxJRE5Pc04/YyhwWnUpYkhldG9a
eDJzfG4xYWIyMSk3PEVsSjdRa3RKdkV2fGNNCnpVcj59KD4+VTtBSWpERjszSDNnSF9TdT9+R2Vo
bkBWaDwlVkMtZnw8RiYhTnlyQ0JhKiVtYUoreC1NfHFDczkrJQp6bVA/a21sQXNuYjxARyk5N2Nh
JGppQU54UERMWnBxcnxVJHc5QS0mQnk1aS1DPj9lK1I4RnlkQUd2YWJGaSokNCoKenF5RHlSe1h9
a15wYilmWW9vPkJ8WGV+TUdPLTlETGdxTl58N04wJW9BRy02cCoqNjhzKlNtJiRJY1VGTD42a0Eq
CnpQLTdvbWJzNCQzKHRJalYtNXo+KCk2SGM9U00mOU9DSHVUaXVIUl9DaWBWczxeb1ZSYzl1YWk0
P35seWdZT0F3WQp6WUgoIWVHSXB6LSpJKXliNGBtb1ArJX5uZSV+YDZZYmVNeFpLPCMwUyFjcX5y
KUVFPmxjP2xWXkJkOWR3QkpATmQKeldOayNTeXd0Typ0cHZOPDEqO1YlJkV7JjtAPnJaK1FDMUNm
PzJjQWdRT3RsREFkOW1AY2J3NDRBZ2x0JSlSQlFUCnprZWl5T0ctUXJWS3VGZkZZP2N8SUhaMEpD
PE8hOSp1TXpVT0xAVko0a1kjUThOT3JMIUFmdXhBUnBDeGklOT9+SAp6Wn5PKyZnP1YqR3g0KlMr
XkUwVFllT0AtNjc8MDNwb0ZNaH1fRX5QanhWejA8eF83PDNGMj81JlVWb2c5SF5qXiEKem9IbEVO
KiM2bFVXM2J0LW4hKVhrYzdxNlhuPGItIy1ndnhFaz1XPjsrVUpYKW1BWVNkJU14RHB2OVlWUWdw
JCswCnpLeGNvfHVUQWB8KmklKlNOUX5HNEJAMyM5bXQ0azxwS3VlWnBlKCVRMzBzVkY/V3l+bDU3
KFcmbTQ5MkB5KStyawp6Un1CJVpqd1ArTGNLbylPQVZ9JWo5QSNSZ3daciV6LU1TR09sVEQyV1VB
K0RnYVpFNUJlKUMtS3tMRTExcSROMnoKeiplc0laMSNvOUNqbjZzI0piQ3JYRGF4VSV7dm55Vml4
Q2k4aDsoa2g2Yy1aQ1d1MnlCYnl5NiRfYFY1MzJfTztKCnpYYTx4fSQyPCNVOEchNjZBJlBMRXst
UnEmTDhLRmc5Zy0jRDBuayVHcngjaEgrSmFDPkRQOUx1O3klQG9zeHU8NQp6NHI5d2c0WE5WdDlF
YG1WKjUjTDYjeVVrbjExUWNBTFdLZTJASF5yKWJrWSNDZGNvNSV5YjxNUSFWMjZvP1JGVXAKemFi
SjlXI0JhLXZKY0MmQ3JOd1B+MT5SKytuXzxRdmplST4rcV40OSt7QkEhaHhGQTItUjItV29VbFFh
by1ROFc9Cno1Kk9RP3pkO2RsRzsrIzMjU2xTPWEtNWpKVnRxUkxsTj1aNCV+Oys3N09SXzB4MGUr
WVVtRHFxVHVRSnt2OVpqYAp6PCo2cH1ORDN5cnktfm40WDlRMUFkbkUxQkt6Izs4ZHFWTkR5am8t
VCglQCV3JXlRRlk9T0FmUmBzYTxDJV9CYHgKeiNMK2RLTVJ7Q3pwQm5BVDc0fFYqYFF+RmBfcVkz
KU0kTENBSVQqSVZrPCF0KkhZM00wQE4lfE9rVjE4Q0N1WmZQCnpONllVfHlMSlhfYV8+UyhUakpX
QXt2TlRkNiF+LWRrTDxzNVVKVDlRYj1qVDlKYjkoQU80V3oqIVlCc0VoNypkOAp6cDBoWSQzXyVm
ODQmeylyMmF6KSYlcTd7ezVzdTUpJk43UzR5YGUyKUJzM2ZxTnVFJmxEVn4hWXNiVW50NCV8VEcK
eiZ7WkpOOTN5c0FwditaTkFCTD5WLWlVTmVyIX1abFVZQmlFcyozO3dHOGE1ZDZPaTFPT0pMdiV6
NHF3WkZ2al88CnpUVnglNTFBZXo2S2tiPGkpfTNnMHN7QXJZJWJ1R1BeXz1RRldoTCZKSEpuO3M2
eTlyPFlJJU5rPSQhUWlMcE8wcwp6bX55a3FXclIqX1cxTE92cnR3aTMxYGkpd1Fkej1sK3VNfFU0
MTkyP2lpaXVrZUw7WF8lZ1ZkKnV0Sm5lV08xMzkKejB7XlZ2a3klQHI7aHN8X1lwWWk7eCZLKnJx
RUVNZDttKmgrajRXYEgoI2w7eT5+QjBTKVU1Un1LMmsmSGBoQmBOCno0Szx+Tlpfb2VNS0B8Sl48
ST5kZmI/LSMmcW1QQDBCTTxYUSlBcSNYbkdMdVIhczQ2QC15aDBtSktnbkV0cWN7dQp6MzYkdl5C
aDQzZTNGd3JQMjNObH5OWShQNFB1ZFMzJVZicExfe3swcDJsdUVnTmNjRzdPS2k1JU47U0J0eD1V
dCsKejNRdXZqYzA+VkBDc29OWnJqWClfbC0peClUYHw1P2dFaXZ8MEBrUGxYVkMpXitjUnAhNDlI
Xy1MeVJkZGBGdWI4CnolMXd2RXcjOH55eVVgI3B2VHNJe20qeFRjPk9iPEVqP2JWdUhYTEFyTUY0
M0p5RUNpLV87Y35WaCt8PFIxWihGOQp6UGdHU2JzT3FhXj50dk83XnY+RnEmLVVAQTRQJkRIaSlY
KGojRlpCd2A3T040TCh5RiVAK0spSEJrYC0zYlNkTVIKelZIQEAmKlNIPUcyel8kTTF+VTs+JG0z
dFU3dlZ2P1JTKzI/QnZGYmQzWVNKWTRwPSF0eXs3VGB4Q0dWPTNjLW9yCnpJUDBYdHdoSHMyQ0g8
WVF0eS1ge3R8SFNocmUqUkQraCk5TExBcTtgdXYjY3clSCpPQkdDaUQhcUhnRjZyRyVONgp6ZUNp
X01XKFheRzJhSyh6JWJ3I25WZUM7PVJaZ1JtP1d3aU8/bWxiT3pWWXlqQSZDajRaLXByU3QjfVok
c0RDajEKent4ODJ8UmxlfiZvX2VtO3YocD8xMj8+clpMTm1qNT5mIUcqd3s2fEw9KzImKUNxSGFt
VCQ/d2UhSXNgfkR7WmxeCno8K2BLJWR3YDY1MmJqd2EwR0FSLWhRPjxCZ2FIRSVwKjBzI214S3o1
VldJM0AlUy1AJjlFdzh0UUxDdmwxWDUyVAp6bTdXfDw1UnVLWEkrZEVMMDZ0Q1RZQ2FsNW82KGVi
UlNwSDt8MkR5ems1I057VT9DN1A4Mn1hIzdfVWN3dU5SQiUKelYlelpjdmV6cGZKO2IpNUVSNFZK
OSFxbEtWRWg9TFV3WmNabXx0fC1fOGFvK2I/Y25yNFZ2UUVRNGQrVHgxTyZ9CnooTH48N0RNPndF
RTVZeDBuWnxnKkFETFk+TzZvfXVZQUB5ISRydE5NbVJjKlA1ZUhSfW9vQmZkJWZ9WGRUZCRfJQp6
MklkVn1CU2RWZypBdmBhZE1XRUZze1RyMV9IZGhwNll3WT9jJHk7NkxYUV9NJHhnMVcyaypPdVFp
RGJ0UVNOOXAKenQ7WEVAPj5WcEJYWWE3RDc+fXE4SjFuUHViSDR2QFpyQUdJR2wjeEFVRUMoR1Jk
IThQbjZJV15ibEM4Q1Y5ZFB1CnpTc0RGdUA+Nnh8Qn13IVAtfUlgTllqKjlEWjtpUnFRK3dzSnZK
SmdFYTk9PVMqU0pOO3B0UyVVNj5TVXpDPCpwVAp6dGhxeFd0Sl5kQE1hMFVSMis9an1xKil2WlFK
ST04cm9ZKjM3Yj9sd3ZmSldVZTIjX0lWe15rPWxxaitUQSlVczUKenpGQyRfPm5AbTskKldzKDxt
TjtrJnhGUG9xZ0RPYDcpfnpLNGhjbXApRG89OTdsOUZUbjttTlY5eXo4Zk1wWU96Cno8cmojP2lV
SHVQRjlMU3hQNUMwcVk9R0E0eiopWW8rfClRZj0yeDJQYmJHa2c/VE9FRS1mWSZFPDsqNEtpT2lN
TAp6ZWc0TT0kOSRwJko0X1JFcllHKCNfZFAlRFZyaUchPkdfZm93Z1BefENMSzlVOSQ8IVVUPUh+
Z1JAZ2VuPE1KRGwKeittT1gtWDRoUnVWP0JkRFhxIzU9N0szazBUJnd+MDVRJDwtMShgYHVCVjxP
aE8mQEplNCRYVm1KVl81fnRjYFV2CnpKTWAwTW8/RG1VXkYkdGJINT8tWHFNdD5sKkVwJkMkUG19
OT9APlZ9ZVlFfEYkRnpheXNqSmBLRjszZlhgcF5ARQp6dTdUKCNJMl89fXYkM3xkTGdpJD5QKUU9
fDU1YXQlRVJWdnRXY2UlaFdFS1h+UUp6O3U/algpMU9SWnF4U0B2Vn0KekBMeGBpLUxOTUU0aHYy
Vkc8Xkw1c1NiQUQyT3MpU3pmJWlCMXA+WmNaQV5AR3tkJm9VXl93Syg0S2JXQj9uWClVCnp5UXBg
UDt5QiVLYzdEYXY5UmsoPkBEMm5VeTQ/WUhFaDVgP1Q7Qm12SjFWYjAqZ1pmOXY2dylLJEsySlpn
Z1BGbgp6Jm87LVgjPz5ENyVmVHZna0x5X05sTUVHcUY+TlQyJW8yOEVFfUM8VUJCUVBhY0UlJDcz
Xjh+ZTEtVGh5JEV+e2gKelc4REUoMVoqfFFzbzg5NnotbUIpS1VYdmtJVHBySzY8Nm9DM0J0SiNZ
OUk7YSFnR3pTWXJkY2lRP3FocXB2YjRlCnpRU1owdWJ1QExDUHFrX0ZQSl4jcz4oal83eWBrQSpF
Y3clJGFnPjtiJXo8WjklfjdYQHg/LWw0NlUjNX4jakcjZAp6Q0RSVCl2PCl+OCRFNTRRaX57TUFU
MTVAKjVhKHdeTGopVXVOKGluXnp3OChZdzF1c0MzSV5vKnRkU1JZOD1KaUkKemx0eVdMJDZ7LUZY
NXpWQktNUUs2R34lRGxqPiRpUTNVVTdCOGkxNmNZfE5xV0lMfUV8djA0X2RhO3hYSz5YeiVkCnpv
XjVmTGp2eT1MJkN9azd1Q1JFUz1IbEYwdi1QTjUpem9eQT1HSVAoNHoreXZ3TGFTRk91RHBLNSN3
ck4mUC1WNAp6Yk1JcV5vbjt0XypWN09ASnsoMjNLSmFWXyFDYnVAOFI0Ri0ob0ZeKk5ISGhvR0I4
eDZpc1VmYnAqaU99a2gyVkUKejZvNncmQWQjNiRHTnttVjJiQVhEUyR4Z30+TEdRcEF2I3I3ajJW
ekU7aiFCUVZzJiMrMG5vTDlqXmtMfXRncCZJCno/STdqIU50QDNeSmp5Nko4YmB1VzE8WmNpYVVB
Pl4zSUwrNDFxVm1nV0BJdkpmTFYwMHo2Z19VTXBJd2Ypb1g9dQp6ZEV8PS1gLWJTKEBVXnJxIXYx
QVI/X01oX1dPaT0hJHdtdG9qeX1tVkhMQi1VdH1OdG0oemY7dmJMKmcmWCpvJlQKenJYPmtJbyNH
OVFqWj5wTGdpR1NHKW1fdlhua0ohNFptI3JBSkI3RFM2QCtQQUR6PjlBY2pPK2ZQOGcqSjxYbnUl
CnpXZHVkZ0FgIzFAU0x7d1QwVHdNPiQzJj5RQEdPZlY0fn1mQUlPWTJpdmY4clY5U0JVUUhqOzlD
N2F3ZD0/OCRDawp6WDtZcilsQzBXb0s1TjxKIzJUbHJOUGctZ3Y1VTl1VmctdjxsSW10Km1BZkgj
RnFaOyhpZkVgMWlyJXhkSG8tUWAKemVkbWB4SG9Ud1RCc3BITHFfXytzN3prVXNFZ3VvNjgpUnc1
XkU+LWdgbHFQU1BLQ0RKOTV9RSo3Yk1CbmEhcilnCnpBVit+PkUjcFVleVRrcT8mQEBjcGtyP1BI
NkFYZH4kbFhKMyQ8c19EVmRPZXo1S0pXWkNGYlc0ZUd1MyNGRUhrJgp6bFc3clRpWCM7ZnN8VklE
SVR8R3o3JkxeaiYlM28pRkNGRD55JXNFeklUKmN4TjxSc30lLWlUel9CaDdNWWxjQFIKenRZNkJH
JEFrPDd7KVBlYkp5JWM2SGg8TX1ANVp7RytGaTgkbWZOQ05kMUVEYWo7bWN0eT4xQDZoKzRiMFpx
NCFiCnpUYz4rMVpkSzF7RzYoUkQqO2p0YkJXTyQwSG4rdXw2aWxfWmd3TTF8ZFFPRWQ/JGs9QkhJ
Xnl2RGFiMXtKQGgjdgp6V1lJeHxUdiVHITsjV09SM05iYUskJUgkeTQ+WnZuaEU9RmllMFRidUBh
azJyRFViSytGQlkmXnMraFpBWFB4REoKeis2Vzdvb2pQRnoqZ0NYbCM5QGg+RCQxV0RvWEVrazh4
LS1SekVQVjRPI2s0JCoje3x5byhpNTNpKFM/U14pVF5jCnoqYkt4ZkV0SkFqanE9dFZrWVcwPiUl
N2pBe144SEdhTHRQWVZaeSRFUGdnVz1SREU5JVFCQkV2am09aDk9WSlDQQp6bkc/PiU7dVMyZSR9
QXNgbUoyKzR4MC1AZUVFUzQlb3Q9cDJYUjtuOVIzaSR9MWU2IVdINEU5UjZ2dTZ0YzlwZX0Kel5O
THM2Uj9vN2I4NU1VeHFrP0VzcWRMTjxMbz9NdHRAYyM2UHpYbl57LUw+PjxGd1hOaDJuezxnOCtQ
TEwqVnhyCno1YzsrfEFpeVlqQTJFSmhePlM9SjRPS2JlUyQqKnpwcWBZVT9YJUkqeGFINWppZmNI
Y25Sd3U+IzY/QVJAOWU2Rwp6cH1oR351ZGlFaSZpKDQkaHtOfUdHK3gtMUhkIy1WcT01NHRYYT0r
KlJ+ZFk2VFMhQCVgSXRveT1rT3hnQ1Y4KyUKelhzWV9NXnZjZ3pmPyUyIXglTlBFKCNWRjQ+IUk3
PFplRnFFWTd3I3JZY3VpbklnNl9AQFlUSjBGfX08NCljNjdDCnpwQ1c+QW52Vit5VHZ4eys+KGZu
dDFBWEt9KWZNSTdhcipoYVlyZiEhNXNSO0RyZG1SLW0pR2lSTnhqbkA8RE1kZQp6WDFoTVcyPy1R
N1lWYEJVOypPMWZBcFJpbGgkSm4zQHB1alRsWHY4d0IwT1Qja1k3RjxUTGl4Qnc9OWtGJmh8UH4K
ekxpeGNwVzZyRG9vRitxRm9pek4rKksyNCVRcz5GY0t4OTZBaW8wfFR4aWkmJjVlZldaPDckRigq
dldlSXl9K2J8CnpJdCQleUtqcUA+VG8+JlhycFkqKiltNnsoalF2VDxGWF8wJHotQFRWVDRnbTZz
cl9vfSZpdn1qU35fWD5VVmRRQgp6X1RxZzxGYXlyUyNRMz95WWpJYmlZNCgpTUx0OXBeSVpoOUs4
U2w9fT1LVm1+d1drfnpWOHxjV0JYPDxBRjBJXlgKellGMUo3JUQkVkZhbDg3JD5EWilaeWRicG4/
VFNVMVpiVWN2MCR5K3Z7WElCa2JIUUZmOT5LMnk7PV5qOXQyNDUrCno/UF9LY21gPHB3a1BQTmE3
TSZTaXZTa2Z9PXV1U0tlWjklRXF3U15UVE1YZjNJblFVdkhUYXFIc0stLT14ck57Twp6dl9+dFcj
e3doeDtVbnRELThxeVYjQ30ocytSJDh8SHVkSXFvSXg+al4tUnx9VVg8ZiFgJmtwV0tpYT14bntA
NHkKempKaXR8Um9XUWxNM2oyLXIpcH1PTkY3OFhjRmNIQmA9S0JDKjJxPHIjajk8OXVIOUlNRGZO
cE9UMndsQTMmcDwqCnpCQ3ZAWipPKFE4UlNuUDl1UVRSTSV8IUlxbmcpdjZDNnolNVRWMn1AZjZO
UU49RjQlM25VaF44aCtAMSFLNmpyTgp6SkFiPmJfZEUzRztRVyN2TSY7LTs3ZX5wO1hVREh8Ryhe
aFEycko/djF5fUI2e3lHM0VpYk9UcHdedWZ1LXw0WEQKeiMlU3pgJDlDN0FKKHBnTmp5MGVeWVA+
OTE8I0IzXzJsfSVeT19Yek9sc1lEVSQ8TllnWmwzcDdRZ1JCVWI/fEtrCnpCaU1MSiFQTHEqQyZ5
OyhAOEVWYEc1bEZZLThMMnZNPiF6WkVLVT0mKlg8alpyeHRIJmNwM0Y2Vj1SdkpUVV9VIQp6S1l2
JnMoSWxXUDQ+TEBzbzEhKChQaXdVXk1ya2dTUyV0UEBmV3RPRl80JVJQYEs7UUI9O0VObjdaJXVH
ITBwNC0KeiRARTsrOG93cFdlNkNweiZOT1RJelV+MVhRQEVDJjlETX1gJiRjWjcpVVA/UztkZnpA
TCs1RClzbiZYeWVfajYtCnprRzwqRnFvS0kzY24yKzBgdEh+YEFWK05ZSXtEQ0hxTVVrV0Q3JHw3
cT17Z0NLYm4xNlZPYyNzcU9VOElHPzNvMwp6RTdScyVjQlV8OTB6UjJvaE8+P3B0Iyt7Y0NOIW1m
I2B6e1lfeiYqR3I2amxGR25kRDU0M1JgdXoxbFQtJU9lfSYKejdGfGxNPFBwKVAqQ0JTN2lgVTxR
TjFJN2FmdnJsZ3lIRG1PczIqVHElQjU+YjEpZ3FFJVJiJXFgR3RiYytRK3chCnptOXtOQ3xIcm9q
TUkkYG8mYTB3amdNKT1ISE09OUp5QlhHSD8jbX5vbiNkanZfUGwzKUpoR3lVWkZnfHpQUmJhSgp6
MkQzfHohZjt1YTRLM3NzanomfSZXcXFOZypDS0x6VmIhJiVtLU5rM1J3bVEyKCFhazdOaXgwU0JB
fj0tXjdHTFoKemxfSWZDcnk7Vj53eEk9QE4kISo2a2IjIUM8QnBgVWM4PSlie1ktMV8zPFByfkVk
Z04+enhARHheeW4jYXJNTjlKCnpUZz1QZHVzRio3TzRDPXJ7dSlOdmRMZlk9Yj5AcVAhc1V4TEJi
JFpZVlFyQD9VZjB0YHR+V29RJXZvfk09eXNESgp6ejdqN0xuZSFLY1ppbDJUaXtfeER7cFBfZEth
VSVLWWdVJXdKfj0keFpDJWZeZVgodVVySGhve1VoOHJHYHN1KnEKekloRH5UeTduZmxkOW5PSlVS
P1czPipJektZb2JRbVA4JklkSyZteGdsK3dyQGtuKk5SP3Zyd0w9dXcraVkpKm5vCnpfM0hgdkV0
Oz1zI04zaytMcy09blhfI2lqVj1VRTk4YVopJVQ2JVohQyt1dDdkMlE+Pz9CUzRoY0dkUU1ld25N
ZQp6ayVrcW1fJXI9bTFNd2NFYXE/K3B5WlJxQHp3eWhEJVJzJmYkTj1UIU1iITJlMFU3YW1Ac0Yp
YSpYJmJXRXAmLUkKem4wTXV1ZXhpMS1YaHprWCNTQCRIYU9TUDItPjV+Zzc1P1hjPiRqWlZ3YjtG
RmJEO05ENC0yZlBjI3Y8c1FySjBBCnpvOClGdGMzWSNtcz92akFxM3hIcEJsbGJmXmU/ajFTQCFk
O05hNGo3JFcqUkp6PkUrJUNxT1BNLVBTN2NzYzUpaQp6WmFCTiVZNDc2MDdoRGdgb1EtTENfSmgy
czIoan1VSG02PHI9Mm5PfVBDUExFPnhweWM4IUgzOUxTPk1WWiowJj0KekZadFZVbFEmRHlXO3Z5
d2ApdiFIWCloZWJhfGNKNUVgdV8yZXkkc1FHXn16V2QyWj0oYngmYmlfTyR6Pj9QdD18CnolRWhs
PGNHbk9IPERrTyVBRDNDTEBOO2VSbUhnWX12P2JXSEpLU09gMHVNZEZyQ2A1Iz45TFZ8eWclb3tj
IXxSMAp6TW9pQG90TGVeOSlpIVJtWkhEeWdgRVREJHBqZUZSMWhVaVQzMT83ZjBTXm9+Q248RW9r
TEopQjA7IUVhYn1oN0sKejV2b0k4UEMwbFRDSCEkfDQ2OEo9Z2piJn54YThybXRLeV8zITwwVU1K
RU5lSm89PFN9ZUlAQzhfN0I+YDBwdVVmCnpgPmVkPERLeEBlWik/VTJMZiNUcCRBLVU7TUdEUzVy
bmxZeVpOXi0yQShfTjt3NTZ8cXJlQ2c4YXl1dUw/I2JRaQp6UlY4REolQmFoRio2dG1ibDxoXlQh
SmJXPDItOEpGcTRtb1BjRW56d1peQCpQdmgzY2x6eHZ1ZT4qOEtQanBFN2IKemRFYWZneVhpfV91
UXlZNk1eeHIoSTxqaWI+JGgrJVdCVH0+JTx3X25qQyV9dVdqOGs3eGVJdnpGcCtvRHEtWGd2CnpI
JXsrKmVrT3plZypCXnJAQn5oaSF5WSRgOEtGbktUXkhRWCZBdVI1SjFqYztKb2RJKnokJWtGZHMw
cjhycStgUQp6b0QrZi0pUnNVV1Q/QEhCQ1lWUV9qKyk0azkxeHAxaiVvSkhHb158SDY3SUIka0xE
Zmt8RT0hQWlrS0hGVXtwQU8KenokRFE7Yml9K28lRFUhYiVHSERYJUE/RmQ0OX5xTkBidz5LISp1
YnApP0BuNzdMb3AmPGd7QzlmJStBOEY4OEVPCnpzUkhabWtNZ1FiRFgxNXNvKmBYS25fJmZpRG1t
bzV0ellraFpaMGltPD9vRXEoV3YmcyM5UFc1KTZodSs/OHFhdAp6ZlJBMWxgRyU5RExRa2pAK3R2
ST00NVZCT2FAWnBBdzUjPkQ4eFImXi1Lekh0PVM4diFwYEdreVIzJDBZNDJVcGAKemRqIyZKNEIz
UFgjWSgqJCRmelBLN3krR2M9fndLX3gyQ2Y0eWN+WEFlej5lZnVmPnpZV3khRFJnS2dQbGx3Njsy
Cno3TGlqWCNwZS1Tb0piVSV3Y0lPUEFEZ05pdmJNY2NqKCFVJDZRSEVlQUFKLWtLa2laQkM4dGY8
JDBMYm04ZWZDagp6d3J2PjUwNTNCflh0WE9vYio3YU0oI1dMWXY/RndCQyM2VU88I3BoWEMmVjZs
cTsqKzJhZklwZj0tWlhvMEBufX0Kelc2R1NQMEI+Jih8NzhONzBiLUt5PExDJUcyXktrOElSck17
Pz1IKHs4dmlme2diU01uMCFxXiM0YStVUmtmc282Cnp1ZVQxR0hEKGd4VCZTe1IyKThfJEZNZCo/
Xkx0dyQmejt1JD9ROTtMODVtM1VoM3BgUXF2e0lnO3whPCNycE9hYwp6PnIleE50dlBmV0NQbC1I
OFBxNjYjcV9Bem1hWCpPKT4qWXVPVCtENlVEb0pwSWE5KCEmXjJPbXlMZztScWlEMTUKenkmVmU3
UmJZVVRAMjwoMnZje0FLNj5ZViM0S3lOaTJ4ZTlyLXF6aGlBM2ZvS1ZXeFNkKFkqO1oycyVGUVY+
MmhHCnpxSnZ4U0FQT3wte3UwYk9ja1Mxd2owNCYzaTtZOXxxKC11JjhHM25PSUdsPiRgY088TU18
WkwmdVM2RFZhTiRLcQp6YENSXjtGQXxlNV9OPytAbHtfQmBeOVRUSFBaYig1MF9jN1hxKF8rU2N3
bUoqYnJLTCpxR0MwPE5IUkR5cW9IKGkKekF9JSY4d3x0dENJfXoySHROWEx2Rz9pKyE7ODd0YVEj
ZyhRNEx0YjZ2RzskUCE3N0t7MjU/eUxBWWtBdHkpSXwtCnokQVRiblhpVVZxYiYrREJjd014M2VO
NDF1eT84eDhJeElSbVFZYU9SQzZjSSg+cVJsXlY+ZTBIIShXekVFRHptVwp6SnZDaC16cjY3Pjwx
PX5HYGcxPjZqNip4emRCa2o0Tyl9OS0obTdMSVM2OD5oYDxiKypraElUaUh2ZHQ9PjQkamgKek4+
IXgkb15fQVVzYCZAN2IzZHghbGU9YzBtU0huQS1UdFFuJkF1ZGFfRkdrclc7Sk0mQSRlMFkxcTdl
QFdKOH1PCnpNbDlsMFBVNzB5MCpZTTkofCoyOHlZMF4yK259d3xZeERRY3EzSVIwTDZkcHklMHJp
e0wmX2VRaGMmTVpvbkUmaAp6eHErMVdWYD1HWnM8PlR9QmBjMlBsRXVlNlJsZD59NlpFSGhmK3pU
VU80Pz15KyRjcW9fVlN0e3ZueT9SMnM4UkUKenNnUnR8Rjdzdlo5S2NrXz5WdWQ4JWtvYztTTUc1
IVMzNWlYZVAtbzglU1ZWdXJyTk58VDM1WnxZVkVELVByQ0dkCnpOKn48Uzc0TXBVYHw8SUVLVTtu
cWtfWUZsRi0mck5nJnUrMjljT0VQK25Xcz89NygtaDIpfWdzRXtUNl5xSWBZcQp6cS1WcEE0TzJJ
USghK09pOGZTMExtZy17STZSbit3bUxLK1lNUU4zdGdTSGMhd2phaF5Ld2oqJkBqZjBVaUhXayMK
elUrSDdKd3UqQklQMG99MCNLZUh5U0skMmUpJDMkPj5IZkNBQ0cwdEI8bnw4dkA0NnlRentLaUlF
ejB5Kj5qN0Z8CnpGPkteS0hffnY1QmAzK1AtP050Z1BFSzcjOWNYKClaRk9GSmx7UVBhV2VMfS1C
YEdgIWVlMUhsUUNDKjEpVCYybgp6KkNxZUReI0lXYCo1a31nM3RFeTNsXzQpRko3U25zUlR0Y255
aHV3R0AhSVBPSS1qNHJfdl44N2JeJDY2X3JQRGMKemBAKWF3PDNuQShVdXM2VW4yOWd3a2tkJGN7
R3hCdFBSfn5yNH57RUdqYEtPK2xeMTdqYkhDVlR3aXI8YHRAemxACnpyR2VQRkpoOH1hb2AxWjJE
djskTVUoUUM4UV5jJDBuPkhwI1VTdjFROUo7VCUta1FERFc5XkMkQDQpVXxRfW9VMQp6Xm5EMlNG
VFhQV2R9YUo4MzdxUUhjQ3BVcDFEMFoxI3YtQEZwUT4wWjNWa1A0JmVadml3JG0lUE5CdUptTylr
JCoKeiozKzhTSzZWPm13XyV0cSk4ZCFrTmdxKStVTnE5VjVucjhtUTRqcjVqOzAtM2U9bkNsZFFF
enR6flhPcFR0fVU5CnpWaUF0X2JtXntHXzdtZUprLVVqa0Z7JEJOdDRqU3tXel9Qcm5IeHRCQGxm
bHhyQGZxYVReIXp7SmVAKUp2PXdKegp6fE1yb349fCtDaEMjcVY5KUE5O2lrTnFDUHlVcmBad3dB
PiVxY1JVIUoyYlJ0R3xDLW5vIWsxPj8+VUhXe3lnYyoKej8oPClsK1V8UTZedSojeShVO2ZSa19J
PCpCO0c0ViprZ1A1ITRwSG9CPnd5d3Z1X2VFK2BMX198SyZIdi1yfX4hCnp6bjxqKEkoalBeWURk
Mnlia1EpTGBVM2d0OD1ZYW8oN0x7SHYmdWt4PCVyPm4jbWJNYiRVaT5GIVZURihuaWpXSQp6ZUgw
XyEoYlBqTSk8K3VNOCpWTWRjRV59bStmXjs/XktHQmI4N3lkOGRxJGRoSk5JcH0tNUR6MXVZbVdX
VTlVKiMKel5kMEUtQiE7RkV0UGJPKHF5WW9KOD4/djdNX1E0KGx8eGtoPGA9MFAqOTFKYilCMUpV
d3xHJit1Nj9fXllKUWJGCnokMypQPGB0eSpRVShIZXVsVmhWNT8jbD1xdCtZKitJT1k/XkFkOSto
TnZDcXUkKlVUO3FKfTcpZEVkYCY1MSFLTwp6JUFmWWpmNFNBJFNMQjI/KUF6O1B5PnFWcCtme0Er
ZXwjMHZhPng5VDtid0M4RHspZ25wbVhXREo4ZGhMbkRrOGIKelcxcj9AMilDdFdKcUVmVyglc0dN
Vk4pRENgb3prc2QmXz9CUkV8enVZQHpsKTZLQ1YyUERgcUNuTztFTjUlVEhVCnp2OXhoaVNqYm1q
Jm12eihmOWE8YGM+VmF0WiZ+TzJGWSNXPEY2NmhrQj5IWXk8aU57Q3lUOSN5dEJgZX5xVDU8cwp6
VGZEZURIc1B5MEJGY3xFV3RrIT5CMjstdkZYOCU8T1RrUWZYUz00U1MzRD9uR1IyOWFjM3JxeElr
Pz0kfDY8RVIKelVhe1cjR29wVnE8OEVNTk9PWkdWQDZhJH4rbkhteXMzKVcwP2NUS0F4aH5SIUAj
SXA0RFRndUdxfVc4QlNhVHt0CnptY1ltenZ+OCExQyNNYyM0U00qP3M8ekUkcEFfNXA9S1pndCZO
TThrR35vTl5BUF4hTkFQezBVaCljTUpyZXdBWgp6RDQxKTMwd0k8bUUtN2tSVzZNLUNGWEQhWHJE
bXBXZ1NkbiFnKGcmJTRYJkFPeE1wY2krY1p8ell9UGMqKCEpSTAKemI2eE1aYCtWVThvTzhKRXxO
Wn57P2tlbmV7T3FVTUR5SSFnKjA0NGtKNWpuJDdeWlZiWFZsZTZZXjFLUXdWfWJKCnpIZj5UMndX
QEQmVE17M3tae3dkR25JYE82b3BiNUpoKFRee2QjaVQqU31TNnF4bzZIcSROVyVXSzBDV0s8XjAm
Iwp6MTR2JXRmJChoZkFFdXA/THcyciotNWttKjhpZjVCY2pNYkI1djM5NVluZT4rc14rJDsoN2Mh
bjVtKDNXY18jfUwKej4lYU4qO2BQMHsrRnFgJloqPVF4WnpqXzElfnZheSlrSyNrKk53STlzbDc/
OSs1RiRveE1TNnBVdSRPMXh3byN4Cno2M2NxQChASStqdjg1b2hPUjthQnc+fF9sQ2NyTyFeWlU4
djZMUmRAe0NpPHsyR1Vxez9UUDd4MW1SU3ojXnx2NAp6X29FPGBwR3szQGA0NzBIVE10SzBaRn13
ZT9iZSozJHFeQ3hodjswZCl5PWA2YnRsPFA4ejlNX0h4U0NwTTBlZSUKemA8UTdGZXleNEw8KiE9
Rjk9Y3VKK3dodkhSYCUpPk9CfE5OdDh8S2V6QXN8RmMxQTIrKiErR3NxakpaYG4lfn4+CnpLRXQ3
Wm1UWWwoSShLVlMrNmt1Wj93RWNnPG9nKk9iXyp8Z2RUSW9AUyZjfD9fano+MUNFdWN1JWBzPFJr
Q0RQMgp6TUNYYiY+QUImaFVYZWUlUnR3JFRycjQhTVE2PTxEU2o+dzNoLWRWZHl5dSU2SmVJQ2dV
a3FyekkoTHBVUWpLeVEKem12KmUtdipPO0FOSyV4V3BsezZRSXcxdDFeUGk3clM5VzJ+R2lfczN2
fXdBYnprViRXKlI7e0BvWVUhNzg/R2BkCnp0cSomdWMyU3B1VWk9V35FKTd1bVgwKURXMU9AMXc8
YjAhcSlmbkI9Xm1UXkApMFNOQiY9bFgrSTN8SSE5YUYtbAp6a31HbzAzJWtlfk1CNTIoJTlSfld1
YUdhfC1gZztGS2g8eTNlRzRjU2oqUVA3XzMoey03ZEM4fFBJe1g9TEckJl4KekhTS0VMbSV5fntB
V3kmaDIzZ3U+dDk8LWQjSj9OSS1zdT8/e1kyWWFJekxoYWlMNGprUkE4RnF6fmNxJntfbkZ3Cnoo
eWdQbil7ISkxeT5KVms9TmplayRWPmNHUmYpa2hOPF4lUXhnYzd7YnA4SjdaKkRlIT9AKE9lUXY4
YXhjTysoZwp6Q3F0MCp2fnZwd1IpZHJgUm9AY3lucWdeU3g0KENhJnEoZU1fdzQlbnZ9XmlIKD43
aGZyT2dxd3kjamYwQzFPZXwKeiZ4K3kzcGtSM1olMTA0dUA4Pz9ZTFFUdH1YOCEjOTF8LWBSTyZx
Oz4tWEB7Wk5EO1E8MmNLZjZHbnZrKXtJSyVJCnomZnFueEJGfGMkSFJUa1IrdG49UG17TDVYRmI8
USs5UW1uSk17dXN0UCZMZjkhRF8+RVREfmljKiktKFBLT01uRAp6TCRRdmJgOWhoeUQ/NTErKXpM
bkheQFN7JHA0JkdHJH1lSCtfNmE/VnFCOWxkX0l+TS1II0l1MkIqUylaWEo0ZUEKejhaaloreX1R
RklFUTtrUDJgX1UkelZwQHlqTEp2WHVDP3RzZUVOXmFgPkpqcWFSTWYlYUUhRUBoeUZjNis3MEdK
Cno5Sm9IU2BveldHeVk5eyhlSzVWK2N5WF9uXlZufE5uWCM7PjRxP3QpSnc+XmgtIyk1JmJTUnRH
TWN+QXdNY2cjRgp6eW5tPzdTdnh7S0lQeUI3SU9EVl5fNWFFNCEyU0xIcHN0QDFxNkxQN0RLSylM
I3BYPWxoTldlZXh3SmRLYyNWSGAKemEoSENidVY0SytsfmZjeHJkdipRM1o1Y3pALV9ZNUJ6Qkhq
c1N2bWArREsoMTZZUU5AcFVPQU4hJjx7TyUlcTt0Cnprc0MheGp6YzRBODNJZyZ5ODk+Qk18TVJV
Wn0tZmckRl9WN0BtZnJMN2ZkaHUmMmkpQT8lPllZX1B5QElsfHBWQwp6b05xXn1oflFSYTI4SDZs
I20rRXhBIVJCJGY1QyYzekNCfkR7WSZodk94ST5hZksyal9kfCFDVjhASFc8VnNFIT8Kel5hQzRi
eE5RJGJKRCtxV3tgPkk0TEErPF9oKkA5T2p4XmI+dGdIO35nbUR3SW41ODtBRkpDbWU5a0AwKGJL
d3hUCnpvUEU2SU1BIXBkX08rSmQ9MEAobU8yXlduZmpDa290NmxmMHJTN0p4RUMpRDN3PnlWQWpz
MT9iQDVaKSZhfHI4RQp6am8yPl4/TShtSnAyUU4hT148K2hkclM9WmN5MkVvN0p6Wks5flQ7TDsz
cD1hcjZUfExIQ1Imb1BzOCVEcnRyP3UKendrbT5NV0dmZU02eVY/UjEwcDYqKUFIJSVFQjRvbyMy
KHFUXlV7MXVYeyUyMUVaTnY7bWZFSlVsdVkpN1JAZy0kCnp3VjZhKjFOKj9wKEhHMndGRCNjSTJ5
a2ljcEw5WkRfakt2aEdqYGh9UWBBcUMoeDtAKlVBUWxne1EqNF5YdCFlTQp6PDxSfXgjIWMrbW02
eDc4b1N5d0M8PEVGc3hFJFF7QlE7aHpYfUNtZShRNUJ7d2lJfV5ART4od3BwUV5kKip4Ny0Kel5E
QVNZeUhJWTZ8SXlpUSRBK1MteSVHI05oVFdBSkgwOWVAJmImJkZVa1lyYTk5VW4tND0rRS1XM1FA
T2NkbDMwCnpkK1deJD9KOUZkS1pFMzVDSEFuenlPSnJqQERoOHQ1PGl0MGd5UzQpS0omVT82NVY/
JFkqbnNiWiMyNkFJaDU/Twp6dUIrRlNkLUxaWHpmUW44VD9hJnlLI3stUWotYjh8JDZyMVQlMWB7
TCFJLWAqY3s7MDRARDdZPiFyUThGWjJ9eXgKek97ZVJpIyZkRHBIdndfUVM+RzZfKkAzbXwrTT9V
K2EkJDkzMk8kekEoe2NBWGIlb30/P3RHQ0FgNzMhe2UmflQ0Cno1akthT2laSzc/KkI7ak0tMW9G
IUpBU3wyc35sbSVaVSFiNEU0OWpfOVlMYCUzJj9WOXM4THwrKzxmWk9BKUwtRgp6cDdHfGwjZz8/
empvVl9FWncpNz1sNlAoOTJFbU4rS2dgWkgtQj89VlgqWEJVeG5wITtgX0B5dzl8Ny13JH17JTgK
elpAKWB6WVVnYEl4KDxyYjBZaU9iTDdle1hqKEYpLVcke1d5RCRlXktPSHhGKFFKQjhMLUBDTUFJ
X153dXc3dWs0CnpkMDJgbjE5U1N3ZiVEU2hkMC1uVVcqNzEqYn41Wl9taFRPKDd0eSM5Kkg0Zk1a
PlhVSlF1byF0czlHZiNaV3FxOwp6JU1GOVI1eHl9dWF2VX4yN0NGYVlXflhCQVlETmlKPj9gcGd2
Y2BxM0NUQkYpPkt8YUMxLVB0UzReJnw9NUpiNFcKelZ0PSN1SEBvWHpsRkhOOVQ7bzBMek45QW8w
cUw0OTNGWk5BKFNKVFc1Ki1sUkNjSFRpPys0NHkjUEQ9Rjl+NUZHCnpIU213KytpeVFUbTdhTHM/
Vy16cDNPLSVyOF9eeUJxaVZaKFYwcUA/JU5MK3o2dGJSdkBqQThqXz5NWk4mRFV3awp6VStiI196
bTxRe0Z0PD1qPlZSYkRTPzZTUGEhSjs5bmpmMzUoKHIyLXpuJHQ7UGtnZVFlZSp9Kl9SUGMyT3ts
JjMKemxPSyRoIW5qb3ZBcj8xJUwlJjVhNHtMMDs5aGU3c2dxWW1gY1RHNVFpJShoZTBoelkoPiFC
WSlvaENfTExEKVdGCnpWWHo/M1RPKGA/MnAhfntNKWRQV2FRVGtLeHJZTndybikxPnhrUnIqJigj
QDZIWnwpK3lVVSRVOz17JDg5diZGVwp6Wl81SVdrV2pefT8xJjZxeUxJWl53bk8odlppS3phYHdh
e2VDTU8+TD5lVTlIeml4bSlkYDhDWXdTbHEmRktHUkwKejhCRHJ5e0ZrcSsxbz4qbWItfGJsdlFK
cWAkRD8lVGEtd3wwMlpCKj93eF8yY1lvJHBsdVI4OXd4OV47TCNlR31qCnoke2tfS1h5Rm47dXJO
cVZkNGZqUnFgYHY1eXMzMD1HOT5icFBtS1dBKmU/Tmw3NTk/ZSZJSHVZbmZNck1Sb1NIQgp6XjlI
KHYwMF47eGdwRzleRGhqRTZyIUAwdjRYMnIhcHQ9bEw1SzJ0fEROVzR8QWcwRjs4WVQlU2EjaDcj
JkpzbTAKektsdTFeeEheOXlQR2oxTXJZN1NOc2tQQ1AmfShfIT9PYDVnQ1pUUHV3KmE/Z1d0KFVp
ZDN7TT90YXM0azVuZzVGCnohcXIhJWlfUV43UHh5PVFwUitFZ24pNE5BPSVHNkA2fHoxR1IkMH56
Jj4lOXxmRnRBNUdOODdTKigrd0BvS3JncAp6c24tZDxZTmZGOWNsays8a1hsKGBXb2lya0B4QlRq
LWNCbkRmR253b0xGezVQPzxsIXdwYUxQMjJNYEVBbzkqdzwKekQ7Zjk4UktTdk4rd1ojN1ZDUnNi
dk5RbDRNNnY8Q14rTWZzUUFJOGU5dnVINWU3YkVfYWw7TF9XfDRsP3F2TktWCnolQjA8JjhlR0oy
PU1GQF5JSiYmJEJWRUZxJXk0T0d5dnl9b2dMaG5xSjx3TTBMTWstdU9TUnBqeUxXSis9dX1vegp6
VHdAXjVtIyUzXj1ANz1eP1U8fWxANjJ7ODhLRlV2THd5bEM+RklWNmEqRFBXJnF6RT8tVThKLXBt
QW47KWhnJHsKelUpQ08wNGhATlRBVUJHQXpENWM0OH58el8+ZG9GY3Z5clBDTmFLYWZAS0RNbzV6
KDl0KmslTVZFN0lhYURxRm53CnpHTCZLN1hrU1U5cTNlOEJQXkVrUzBPe18pK2BXfnY2e3EmY0Je
PzlkOSZhMGh1YCFeKCk0QzFxbnJIM0c7fllJYwp6S2lxYClxV0xGNnlTeWpBTC1xRm1zdXEzIW8w
SSUrUF9vMjI5RkVGNXpwVW8tIU94UDw4SzJXVz1VVH47WiRFRmQKenZMdVNuRWdlaE57IXl8bHF7
ZTVrcEI3I2g+K0E7YlNiMUdXQnMwfkghREhSeGNMMkFCZmRIWnpTP2g2NTwjYDFNCno9cDkmUTlV
UigpcHM0d0B6YWVPVlpseWZrcnM7VUxkbjJGQ01FY1JebWxZTi0tU3ApYVNVQEhkJFg5fEJOWkZ8
VAp6M0pYM3cwNy1LVClRKj5sRkBWS1I3Uz41PzsrTiRVVGBNYWZTN2NWdW11YXoqRCRhVCZ1K2ko
cXVNVH54O2h+cFgKekFWMDNMVVYjNXl5eDFaaVVoRnhwbyR5Ujd0dWRTSz4jYz1UYV92WiE8TGBu
NXtHWjYhWFJwWFpjaChQWD1pdUU0CnpnfDEzfDBNS3RSUEskaV5tclQjZEMjUkJndGFXMGZRaD9L
fHJNP0l1O052YUFhRy1pYEI2a296YVBvUCRiR2QqTwp6M188amJqNGdWN3hiYSNTKEpMJko8MGwl
OGZAMVZhKFpXVG9ORHNuNjhjcjs4U1lTMm9ofjlWUT09VUVHWSpXQXgKenIpYVpaRCh0TlJRYXE7
MXRgS2dZVSt7VnpjZmh8aSglcF8yeHFnNGdpQD9TSytxRXllYVVSQEd6bCsqezY3WGdtCnpOd3Ro
RyN0eSV6T31hQl5rcHg9WVg8TDdLMTc4dWpyPFk/YmNKYlJKTkpUbn13N3ItVFZRRy1ANF82aHJL
KlY3VAp6Vmo7OUB4bVArO1c8X1VCM0l6Yyo5fWhCMDcxczUrKipfZFFJdSh0Ymt+bFhHTXAlZC1o
WEhsS1YxMlJHbTgrX0EKeiliNUZiKXdiSVBMZjw4QHBhK0FhRGhyUzFLPitKc0tNRCE0Ul9nKD5K
bnB9cS1rJnlFTVRWMSR3O35zZiVaTlNxCnp6ZmlhWjlnZ309I29CU1dWRHk/MzBYX1FWJmNrTish
MSh5NkZNYUwhcn5TKjxIV2BTa0ZCTSklViF6MjlnWkk7Tgp6UH59UnhhRFpjTXJUTEl6KlI1Tlpi
b3lZJlIlZ2U8PW1hTTM0U302bkQ0V05tIWs3VUhLP2ZWdE5Ha3R2PHRfcnMKeitOUGwqQzxSdDNu
NXBLKUw8Pns2e0dAeWAjciVDLWt7WH5gUUZgTm5lWVJ8ZzQ9P1YwPUwod0BHQlNYbzN4Wl8tCnpl
Tjc0Y1R6PF5fSnAxJHpKLWErZXswcnlSU0Q3Z2BMMEpFezRIaGIkU2RKYCRMaWB1eG8wbEs3WXA3
QThlbT9VNAp6WU4hPj9eI141ZV9sbng5QCN+cnIhIWU8N0ZIfiFBazN6I04oek82d2V6cC1Keno+
UUdBVHRQZzxodGMrdllofEUKejkkcDxoZSlSenp5OUhWTipvbXpObHY9dkhYWTVoYF9eIz1kRF5+
Z1dFc3kjNyZ1eDFSKCRidklhcjtXJEFKQ2Z9Cno4V0U2Uj8lMiUmU2V4VGBmU1E8VHl7e2k4cSFt
NHJaX0lYYVRLKjwmJUwhWSMtS1JgbVZDZDlWampFRkU9WExMKQp6OWNeJigpeVpldXlRUV5UMCQj
ZWxkfTVafDhGK1I5QT81UVhsbVNQbD5sfiZNdnVMcDFuJFJ8X3ZOPVU1PzJyel4KekoxbmpRUlZJ
dCRDa01RQWE1UlV7T2Z3Mnw3Jjc8ekwrNCtaSTV1MX4hI3BNfVdKVnchbVk1P2Blfn1ucil+RTY7
CnpnaWJXbUJkMSVJVklvSXdNVz96RV9KTGZDazt4OzRHYV5UOGV2MnB1S0hlbFoocy1HK2l+XlM7
YW5yKyZzdyo9fAp6KGhCITU9I1Z6dHVBa3hsVjdsZnhtSXhVQ1IwcDBmKTl7UWB5fTFGKHUpJjNV
aWskKCZiQmskQHR4M3VFKTU9TFQKemNzdERIajJZN0NZbzRDVCMhTU9gRmk5OS1rbHdXVikweUZw
IW99Pmc4RHJMOHF1MTdSWDFxdVl3MUxnUVY1ZShjCnpQVGpna3tqMFVgRn1Ue0M9PSRqNF9mN1kk
X31HJUYjcUAtOEpDYXpMbWNsaWBrKEJeU3liYEImdX49T1MmUUBDUAp6IyZBTHJ5Zi0tTHtQVyh1
KlYqU04hSDVmXmM8YVRYPnMha0BsVXFmRXJkMUhZe1YxVntheGIkcTZ5LUhBZHhvfWQKelB1UUs8
SXxHbnN5TGlQT0B7bXpjWThWV3Q0YTFyU2J0Tmd8KTE2MHF1NnExY3gteHImIztoKUNLNFBoKUI2
XnZiCnpWWCZibT0lfEFNdTdyfFBiU0kkTlpEaTxVN2FaUjw0SmRtVk9mSzV8MzRVXnRXNjxlSF8r
VGBAczRuS3dXQVdycwp6azBtN1E/VzVHZnlBOGs3OHpXc1JBY0tMKWozLVlYSnFXPENKO1YlQjNQ
KzUlb3daV1UwcnMraFdzezlpQWp+QmQKemJDd15RMDk1ciNJbjI5dGQ5JmFwWG5wMVBvNGNxSVc+
JHZ8Jn1IVmh2LXJWQ05KK3tkPD8+NUhOeV48WUQ2WDdCCnpPeV5sUjVKKCEtbCNld2QzcXJjcmRS
WThCZyltNmt1PD1ZRjlfOWMmK0p9eF5ZRz9QeS0mYWxEQlVNQDVQZTE7ZAp6WH1SZEItI0Q4LSYy
cW9JYXB+NDZuYFk8fWFKTnxAMUZlbEx3UkUrVzZkIWhMRWdaOH5QVztMISt1bU5XcD9XUiMKenV7
IWRebElSNz00Xmd7LTt9NiZVNDNzdEk5b29yQygmeDQrNShlVHM+V0JmM2h4YVU3S248cTQ5aTxC
djA/Sn1wCnpKamQoVkoxZjJ0Kns/Z2l1M3YoMj1DfHFWbDdsM1pwX3E2c1BZakRtMFNMa1hkKDwx
UDQ1PClUQDQjQmZMPyQyWQp6bT9Fb0A8PTN4OHpeWjBYQS0mQ04lXkw0SVRSN0c/NkgjbSlNbn5f
bSRmTl8tYGZIO1VzdDRJSWo1PE9aQzF3aWcKeil0Jn17P3pPRTEhJXE7eDc+SXstYmZVfXl7Jmt0
JlFVYXdORlJ8PnUlMlFQQiV2bk49ayEzI2dTXiNkdmFqbkghCnpETU4tTkx5Oyg0cHNSeEM9ai1N
TjMrelJyO1NUTDBWWCZ8TD9OUlIlQ0V8KD91XmlTZUpUQzRhOFc/Wlc5QVp0IQp6RiVBZmAqb0xT
I0ZJZmB5N1NOcEJfK0NSYUQrcT0hTGhNeFZpc01LNloxZXk1K2l6eTVvOCVOJj1XfW0waV48XlYK
eks3cz8qKGxwdHNNUHpgeksmQ3hYSFhURi17PU1TWFJOIy0qY31lPipZdStLQXJidFZxYENVKGNA
djZjJVhsb0QqCnpXVUg/PDhOK3BFQXUxN3lGWCpMSEklJmVFUzgxblByd2U0fnVpVnNEbn5XaEZt
QmVncjxKMkt2ZFRPS2JuUn5EZgp6Qkp6QSNhTnVRIU8jbGw2U3J8K3FpcX09Z2RHRT4rdEZlJmsp
SVd4JGNxX0pMWlNuRGJ2cEFEZjNeR01rK29rbzYKeiRBeGhNTDRnWTNXbDRCczRYcjdTcnJHWWdM
OEdNcmtWZHwqa1pgK0dJMXQ8PypAbjBBPX5AbXYyNWFJcy1zLXY2Cno2Y0xFPHBwZmEteF5xWmIh
TlBmb1pDO0orSGMmYU5KPkZTRCMkb35aMzVuTjBpbnlidF54NV4wQCR7RzxldENBewp6OzM9UEhG
RFNsOVd8WXQ/dzxeQiQzNjh6a0RRMTk3ME1VR08hUVRmfEFaVGMhMzw2a0VGJnJGVkRmUi1rMUxR
K2MKejI4M1hQelFBdDBTP1EkSU5MKDF+SHU+fj83dEEyQTdEVWFGVVhvRjdGLUszOTM3fEgqdShA
REReKj11JWV6Sj5YCnpmWWRXZzhaOVJUdXFyOHRFRVVNJD5HMSRSREk/ZncyWUo8YXRGVXNkVHBx
aXs1YjtqRFM1NFY4IztnQmcldHJuRgp6K0Z3dE56M00ra0pDVj83dio4PT5VKCpZYC1ZTTI+OCNq
bzhNKEcpRChoYjQtb3BaVzRzO08pMyVxZFp3bFZMYikKekNTdW9kcTFmaUBOTFJVNUchZnNmekEh
Wjg1KFJhZ1UlVTZqMis9WExofVB2WClnV2RDemA0NmYoZlYkJCFBZzc1CnpPdVc9cntPamwzNj1i
a0RKfXFoaGZZOEteVmkoZV9fO3Z8UkdUTiU8cntRNz4oJnlReExiT3xeOSFXOW5zaj4kSAp6dHRR
RDYyT3F7dzZVUVghUmF1ZVFfS15VI3dPM3ZOJVdeOUZwYns4aDV1fHdkdStTODliaVYyOCoja2Uz
TDBOdjwKeih2bll1bHIrRDFURHZ7T1NiQXdpbDlFYkpWWCslMnFNMEJoKyVSX0xaO28pOyVCODxR
enF6RXhfWnxERllzMWg3CnpmMSU3UUdJWiNXYm0yK2A9dHJkfUJANl9HWDhrLWsjJSFKWmA0SmhI
VlRIK1Q0I1hKZmRKZUhMTypZRyphN0hmQAp6UEMmfjV0KyhwOzBzdF9OU2Z6NFNEYGxvVkstUiMz
cUstPkMwSjhDKyV8YEchZTdYNFMwezkpe3NCQG18ZVBfKHgKemR1TzFsbEhJV3ZIKTtmTF5VNX15
OWJ1fTw+UnJtTl57Zz1uSVJVN0VTaVpCSnIjOz1DelEwYWNTR0xiTGh0e3FPCno9Qz9vV1EjTlFh
e2doSnowfDBqZnhAYXw7Yz8kKDlaWXVZVzNTd3oobXJEe0FfUihQKkpSa15sdVF4NDktSkZZTgp6
eUhVaWZzRVchKzc8fHlkSDVhJlJEcUdlJVkmWnJzdnFsTykpTWclPGs9Xk53YVc9biFIQHJUdz5K
QEhwTiFhd1MKemE+UHxlOUpmZFl1S2tVOEkwcnFSbXE2YDJpVEpNOz5xRDA8U3MjZ1kkUElAYThH
LTVSeE8hbmM2Z1gtUl9ubVBoCnpMPjRmLWI8UH1VIVBwWl57NiNDcDExJk9QdUR9az9fPENuQXRf
SXtzOzZlYWNRVnNlNjNmWWRacjY5eEkkKncmZAp6V2JuRG4mRmZVe285Yi1ZPnpOeEoqS0c4N3V3
ISVXcFhOTyFBNFZkN3hkZUBVenJ0M1Fwazg3b0t0VlNXOXN1NDwKelMhYTltJihqS3taQ1pZb0ok
SEhLd3khWUsjJCs4QEo5bEU9Tjd0NXBkMGxxIXlVRChgdU9DRXQ3aV87eWJYPmlNCnpALThZXloh
YmxEcHdrOEFpc2BtaTZQXkJua1lsZ0Uqc3NIKlYlcE05UHRwNyRTUUU3THBoOCYyRjdGVihhQiYw
OAp6TVh9R2k1anBfdUE5JjRpeWhZQzJtbnMtUTY4TmxATGIkQSNLQEAoZHF2MXkmP2FIQT5GYHBO
fWN6dypWYWszI0gKemZsTGlVaiY2WGFzWSshWHpDZXlEYUx9OGYrTyZIeGlgfHwkQ2diTUl5QEl3
JSoyVTdpMyp4MiZFM0l9UVo0dHBRCno2Xm5NdygheTVEPzhEU1gpclJQKih7PWBxcyl2JU04b1oh
SCtZQ2UmTFZtUUBJQ090KCo8OHMpSnJAck91VDxWSAp6TkdzNHg1KGlEZzVTZTRVYU0qc3Q0LTEm
Z1htRTZPUjBQOUVQU3ltcG9XTHgod29nakxzS19EfXZFNTU0JlhQQ0MKemdFQEdFd0BmWD0rNStL
TCg4YzNWKTgyYFIpLU12SF5+ZzxMUktiIVpaK31KPnN7NFdmYmk0S1YxKH0+STRgemJzCnpqKzdp
N2FBUTh6USREPHhIaFN1a3xFSWIjYV85MT5AUnpBSzs/WCZPNjMtRUtlNCVnc2RhRjNKeyVDeUoz
MGNVQQp6RTZ5ZVZaREZFZj15M19MJk4pRmpUfUxafF90JSRZLU9jYyFPWDZaRHRQe2JrbHQkT3U3
TjVwPm9QSnRJbVBmMEYKeipSaVlZZW9Pb0wraHp9RUtFTVQwZ2VHNVBEe0hUIURobEFGITtsbFFE
fFdNQ1Z1VFh0M3JoI2RUfXJLejM1ZnNoCnp4cjs0PSFlXytFVEwrIWdIaTs9akNwRU9lWndaVD5D
WldOMElYMmx2cyUkRlRBWUZBYkQ4eFhFTD9XQCZuTCQ1VQp6SnJFdmgmYzl9Qj4pfmw3M0FvNERa
ZFlCWk8rPjJhb3AoMktMMyYkRiQ9dEQzO28xd2tjYXkhPi0zJHVCX0NlcigKemFNUz9tOTthaWg1
ZVlPbG19NmFSIWIpTnBZYVF8UmItZnhBYmVwd0ImUCEkSGxifkx+YXd8aiFjU2EqOSNVJnpmCnpr
ZjRMODdvZVooLX5yU2M7PUM9PXNgODFoX14pSXgmS0g+bCEyeiR0SjxQdUk5dE1+aDIhUjN3MkhB
I2Y2fG9+Uwp6MHI0bVRLPWFLZkE7NSQjUE5CQkcqXmwyWHc1Y04mTXQqbDsjVnBgaUA+SGBrQDly
WXctUUQtdXs0KnVwXmYlT0gKeik0eldjT09QbjlaSjUjdHYycHF3PWRMO0ZIMUM2SGlsdHcmWlhH
UGFfaWxTdCM7RWp6X15odyE/aWw0e0N5amZQCnptTlU1TW5aKE5SZnRXN2JYOylWPlgqQExPMz1J
UihwNWwmTDJuLURUUj1MdEE7LW9wPSoxTHplOUdTKj9Tb0dWKgp6LSg2fHdWWD5kMFBuNSZQVl5X
VjBiNUJ2eTx6I2g5O2AoPys7WHBWd3grQG4yXkRra2ZVfEd0T3dMYUgzKjB3MzIKenQ7PDdKfERh
RzVvdl5vYXdgVSRRKDkjZDJwYWFxSCpTLURGdzlLRks9NF5MejY2aWxGSmxrWk50Ti1rbntkLXNE
CnojYlQ1ITN8Jnpgd2wxPEg5WS10Y0p5fGVGN18hOVQ8ejU8QyFpUzQ3dGppJUpuSENOajxDNmVB
ZUJoYlIwbXt6ZAp6dXpIY204KCMqb3EmWXJfJl9SbVFGSyZQe0c/JEYjaj9hLU9yYH1CNFlMcEhq
Z0ReP3RCfUMjVU5QelM+MHg+blAKem0lfklrYkpOVi1hI15jSi1UfXZlX0tee05mZCZZSlo1RCQt
NUxwSTFhVzRTdU5BMnh4dFBVMmRsdT1gS0dwZEg8CnpmRmRfWkx4JWljXzJjI2JQYzs3WGlrM0sq
I3BBM1pqRiEqTXBIRn04e0gqJFheN0hZfTdlMWRuSC1HJElBPGFmMwp6Y1lpcj5jRzFEJE1nPE9S
dUI+RSoqYilBYDZaKChrbShmVDA+JnBJRUoyMHx7SjVaazBhV2piRDl4eCEwZyFKQzQKejdFZm8m
TjRzcE5MWTh3bmpge1NDTzNQdDh1ZU1hLTwwa0Z3aSN5NUZQdEJwY2okS3xIaUNuRCVnYWN+amAo
fWwxCnpEVV93TWs3cDIqKypEKypLa1VicTAkWF9pMXNBd3FKUn4xNSFPUmg/IWV4blFUd0VoYjhx
NnpvciZAN204SzBkOQp6QkV7JnphO0lhMk88JGt6eD8wUFkmMmBTTzxBbzZaIU9XJCtwcD0hSFo4
UD40XkAreDlzQ21iVmJwQHwlX25gQWUKelNze209cDZzKjVgKi1janlqJmk8WE5kMCMpRDF4NWR4
OEtoRmFXOGo7KnRLfDZ6WEUqWjBAYEBzbTRRb1FBUk1mCnokMnc/VylfenJfdnNybFRFI09QSENT
P3tSMTVJK25XZTFRb2dMRzF4U2dTTEtFI0BYMWFDV0l9RExARjl1Kn1gRQp6fEZsSTAyO2Q3YEFw
ak94dU1yWl8mVj80QCYyJFY5M0NDbVBqeTduKDA2KypwQkBwUzNMaXQrJXhNMlZ8TigybzIKelVT
TGBUPERlKHp0ZUx7eFd0K2I2VGlgNlF1OyZYZ0hYMUA3XjhXejw1TTd0QVoqTWV5O3NrIztHSjVY
a0tqfipfCno8PUg3PkUobGIyNyUjYUNINnchOV4wUzUzV2x8YldFR35IK2Jgc2d3Ujh7MmFIZTgk
MXNMUHQ8Nn1jOFJ4OWp6ZAp6eVV0SSRDPClTbE42fW9DKnBmbCg2YDxwcXhDWDI8YFV4aSk1bXJ0
XntXd2ApNzU2QmdXTE5lPFpoekZrWkVxeE8KemM5V2B+WU1AV0tvPURVUj8wOHQpe3ZGaHNzfDdY
WmlkVUZUNSFLZlo0bUwjQ2I+YVA9aHpERG00VXJTcmtpaHRfCnp1TjRHREAkbGU7Qn0rV1o5U05m
anh6Y1NzUl55ejhRUmtZYVFaWX5oZU4/VigyPWQjKGRiYWFTJDJWSTtwWnhaYgp6S3c3KSklJSlI
S2VCdjx3Wmo7UlhXYEtwU2dIQlpFR1FjUEZMLUZ2Nz95aEBeVEBoU1lhND9UP3hCTH1gV0RWTXcK
enI3K2xDZ3NyWH4lSUhYcDFubkdZXk8jNjxZN2UwR3M+SU9uZjJuTkNiUWlXbHFqKiE8ST84bDla
NHtSZTUqSEI9CnppOEU4Q1FpTXImQ294bGMkbnMlUDRzUF9NeEc+bylUVHo3TjE5Pm9qM2MzJUg2
X2kzWFAtUm1JZnNKejJPRy0hLQp6OEFKdW40WF5mKU9DNkFtPWw1fG91VndQeWsrYTk0PFUjdG5H
aW1SMGBFNDV+WGE3RVR8RWFtRnZBQ2UxQjg1YTQKej1YM31wVFZyRGFKc31eMGVkeEx9QXJ6PkEw
SCEtc0xCKWg7SVNVKVd1YD8zYlR3bXA4K31aTHwhVW56eU9KWmx9CnoxRjByMGNUazl1NmAqNmlf
ZHtKJS1MSEQmcVNSWiUkYUB9aSNYPX5lXyVKZjdATm4pPDUhcD0pMiUyc2A/cmhRJgp6Q21CN25G
Q3RNQ1RBVj16M0UxcFIoPChVU0ppYmtDbVB9X1UzLXN7e1klKUxBbCpYQ2BfTm8kUHZ7dz5wQDgk
P3gKenlNMnRjIUJ1I0h2MW1jdlNecyVyI28+WTdkRkxYfC19YEZrcy1GKDVgRUw3WDtXJiE/M3VQ
fWRfT2k1PUQ8YER4Cnp7ISE5fVUzKWhTMHtDcDN2RkdzPjRMRGJLdGBFYVB2TUUhVmB9MlZzMWV4
Rm1AVD8mZm4qbGlZdlZ5KnspeVBFTAp6Q01mUEtBbmUxNm1sdntHRHFlbW5PWjdmcmtqOClUMFBX
dHBgMmg/VFNaYyohNFU5bnJ0UWR6RStpT21CQ0k/V2MKeig8WWZlWW4lR29mTlRYNVNSXkN4Vy09
ZnsjNSVFLTslRmdvWU5pYmxrUFFPTm9kQ2BUTGV4d0R6Mlh4RyQkLSl2CnpqJE5CQENvZShNUHpN
fCF0WDxobHYoMG1ZQlJ3TUxsJj9xNWVFV09oVkJKQX5sck80KHYlYU5IUH5PdUptZD9sRAp6e2pr
NjZnVk5ZTE1KS3R3fERkaz5BUUFlPldYZU4wQCl3NnNgPnNCRD5NMD5LekokKz84PGdzX2tePDR6
e3p0QFIKekBtelFfbTFnYlZSYSg1I0Q4Zm5HWT1udjhpZ0x8TDFKZyNzP29qJXxzOWotcHR9OWNR
VCRyZkd1M05vOzl1cXZ6CnpYcFJxQnF9WWkxekA0UX0kaTxkdlo7TTZXa0VJejJzRHpiMnRYUC1j
WVdWJj1NRX0pYXplPVR7JDReamNsamNyWgp6dEhhMnl4OypBWG5gU0dgTTxOUWpzaWdYMXNIcEpx
QX1me1VmQmRoVntZez5JTVpuJXd3JEFmK0VgKk1+XzR6OGkKekpCaWFuPFRmNy02MSMtI0lUVHkp
SmlRQFBhWkN0VWZYemJiI3t2KiQjYzJSRzI8QlVUc1NHRzxRcjtXTkxaa2ZACnowZF4pRDg3TT53
WklEOCh0KjNCfVJyOFZ3SFg3dnhWaSo3Y25nJFVIYyZ8WWFqRkBMJnRRbCpMQTMkfmd7Pld1dgp6
e2c5XiZlKVhOJVReVnF2Qm1AUWNAJk57VmtfY2UzIUUrelM9VllOSjBHNlRJYUBoVmc1all3MSNk
T0s7cEt5dCMKeiglayo7b15eWFRxWD5WVl5Ucz5ndz8wMlQrNnVrOV9SKylCRW9VYiZ4M3M2VVhN
NDF5NX4+MCRzU3I+Qm5WOTdiCnoyO2VhPntrZDVVdCEjcTZ3WWdiamR9ejMlcDJ7Jjw4Mm82VD12
VVUjY31FQnZNXkZ3P3NHPiZ1IWVSJVAmfFpqRAp6eTVaRXUjcW88LTdTSEA9NVIwIW9AYlJ2Mj1r
PlFGY19ERiNmV34razVzRmhTJVR6flh2UmFqaVd3RXF9aCltWFkKeilMODxFdjZEdj4hUT1ZSkhr
eFhMUD9zbCZhKGhkWkk8WH5oWFU2JjNffjNpMj1rWjBZMipydCg9UD5JcjZoRjFOCnpLbyZHME1J
RGp3Wl5aOEdEfGZPd1hYen1TWUFufXpPPFpmeXlJd29neHN1bmYwNU99Y2E1KW0rb2UwTGxpRFF9
ZQp6cDJqZW5EU1YoemY7VVU/S3JjaUZwZ0lEP1A/QDZsaTRtWTVMUitaYlRJOzRCNU5qLXZRVjNK
QTdAT1gxdkVoPnAKekM2cENNQ2EjYERQZkRTTW5MSVNyJm1MK3BsJkJUTFA1NUB2R01FfGV6Qkwk
P3pgX2BoNSpmI1lYdHV9NHQ9fE9FCnoxWWpOO1Q/K1lDI3NYaSglM0pgZShnQ299KkZufU88bEV1
I1RjRV5CTX1ISVEjUHx4UmA9TURZVjN5KEZQQlRIRwp6cGxAYXI5NGt6aWR6OEtAQXkhcCh7el84
MHV+e1JQbGJYUyNndHNubEhIUktfYnp+WmQ5X2pwaW01O3pMJVpKfDsKeihASFY2WCUpfnlEWHBZ
Tj45Q1godXhtZ1l6Y3FfbWxrVnFsXkJZQXJgUGFXS1pWV0dicHk8YFEqXy1vX2N5dX09Cnp7KjBe
YjJUU2I1YDNePHFCeG9uRVlSKnZNOWU9ZGFoKmtveDY/P1c0dCVAdlcxYCp9cnB3IWlBbkRBcWtJ
YGA2fQp6Pk18dX13YTdQXng0d3puc3FMLUVoQ1IqdUhUTEQ5cl55fEdDODl6NVUxZHt1cHVmTHN6
cVJYU1hyO1puPD44SHIKenRBfH11QyFNX2BVI3lrPWM8MGUtSjd8NDxeKWVraGZKX3ljaGN6KEJs
KndLVGZqaTB5V1UoT0VDVEljKyphNjlJCnpmTiZiNWw8RDJIdlNoeFcjRkNZRUAjeiFMYk9vMUJC
MjNLMWJEKFdnNEE+aXM0NTlRZEcoVSNzKSsxemlkcFhQbgp6WmpoKWpVMUYlOG0/b1BIQUA5YXk5
PmZsI3lPZlohUkd+RnBWYzd1VVdlXzRkQUZ4XzhsOTBmO0U4fk9VTXRQQUYKel9DUU4wVit9ZFF7
XiNuPlhzaiF4QUB8Yz9pfD9tSVU2X0QzblUzR3o8cWIlbjE0anE4WWgya1hBXncjI0MkPUslCnpP
amhXKztLSlBObSg2b3llUkVUPkxUd2Y0LTNMTkNzYWBpUypFZCRWbShfdH15dGE+UXokYCQ5KHd6
ZmJGKUxgVgp6Z0Mtfm5NR0ZoUWxXezY0bjZzYVpueGFVLWlCb2IhLVdEPWB6O1BjRkZkaCopd2ho
IWc1b2Zpd3MtNWhNeDhYfSsKemR8VUVoZEA5VDswcD4kTiN0O3sxYz9RaEJffisoU3ItK3JkXlYm
fCpZKUM8PDEyRngyUHZjb30tUUZ3dmpyIUBXCnpxYW9pY0l9NC0re15aMW9yJHl9P080d2R+NWF4
dkZKbzs/Wjw/PkZ1QDA9NVdgWGEpYXYlI31BQDJRVCNAPVd2bQp6VmxraihrQHZsM2tuYH02NXZ1
SCNNPGw4cEFgUytLITE3ZCk/Un4oaTVPfGBMYz88WHF7Mk1pMDt8UjFEcElVMkoKekUoNHhnLURh
V3k3Uio9ZytGfXFjQlgmYHkjcjhsZzJeZlZEYVReZk5mK156bWVoTmVISXRpSSZOOGo1KyF4cVM+
CnptMCZjRFdfQVRPZk5Ce0N4WDF5ckBLT3tBQ1I9fE1wY15FcTRkPmd5ZD8rS2RNXzEqRmJ4bTZz
emorN0MmRTtpfQp6enM+SkYjKFMwcGt1MkdCblBAfk5BRnU0YHtneFZAVzR3SUhKOW5uckZWfDJG
Njloa3hPajxKfXtQbCF5IW1hRGsKenNYSGZ3e05udDRHOVg5fEoxMm5yaTIkWHIyWG1MYzc9eiRN
VmJ5VC1zREgjNTUtNVVAbUwxNHlhOHRVZl9Cb2UjCnphbU1UX0gtbDREeiU7eGxHYVZrcjB5KUVZ
SUJALSZpdl5hcS1RUHpqeklsRz4hdTAtKD9ReWdRZVR3TGZSUDd1VAp6b34/YU10WENnZUt6dyk4
c2J7bWJQNURZOVN7ezByWSM3a3dKVSFwbXpqPU1yKzx0PUwoQkJaWVE0T208VD5SYjcKejxKR0Ij
MTNLQ3soeFd9QWpxWEZfcHBhdjloWlQ1UFd0RnBWTEpxZi0hS0ArJG5MbV9hTyZPYkxYIV4hYWop
KWAoCnoqI3pMNm8jbTRWYnFxPzUtJDJaNjFxfW9NUnx1NypfYGEocVB3XiZ6YWdzKHxrNzkjdyRn
KWZqMzsteCpHP2M3cAp6MjhLbDNUbXhabUBrZFhBODFzWSg3MXUzeTEyNiNEb1ZrM1gxSD1LR0Mh
emkxISQ+cUk9Z3hYMEdXbGNxeGROT18KenY0PVgjVVMrMFhXZjlCZ3RQQH1zZylIQURJc0xZTV8l
eGUkYHV2TSleOUlAYUVrOGFpYks3JVlWbjhiMGJrVFJFCnp2UGsqaEolaE4rYnB7ejk2cCgwQjVa
XnkkRmBnYXVGUHU1OEplfUMrbWhWc0wlcDRVM3puMUVpcDtCblpVM0ckUwp6Kj1hQjYwSWxoKDx5
YD90em5tRGxeJXklaiNZKm92Y01rd2UyJiUhUWVrZ0pmUWI0QWhqWVFUWmhkPTg0RHdGI1oKejBU
aiVidkxlS0FLbTJgXkRqRFRENmpkditMNmhLbkN3aFVea3B8aiVNI2ZvWCM9T2gtbStHbzhZbzZl
ckw4P2ktCnpBOEVSQHRzaiFQfEV3S2JVRkxuZDgpZSFmS0FVPWZOfiRpMG9FcT9xTGk9N249RFNg
eUgmbDFxVXNFMHtFPUVIbQp6YEtXPEZvNmMjPWc/KUY+e1p7cVYwRj1vQzx3ODNediVjZ0RLbSFv
MShMVzdqTjM/MHBMPH13WFdQcTAze1ZmIUIKejheYTdWP2pAN3V0JGlZSkdIbnVyWitMJnQ0RSsq
UkolQktObyluMEdTaXhmYUBnP35Ed1V3ZFdhdDwqNnlJaSpJCnp6JXBvKVFZZU5vMmlKaUhoRzgx
dXorXkM+PE9Vd0YyMExVfkk0bG49RnAyPn5GajxENktoIy11NTVxQlJVQHk9Qwp6VmheO143JGBE
aSkrLVZ7WnVlTEkqdSQ2N00kKnt9e1Z5fGJwTUEkI0AzPntwbilzeClMOERmUDwoM1okXmNybU4K
el51VV93PyFrTClYP1ZCUG5BRHAwcVk8eGIla2FUKFg5V2lCTFZNI3YxJCljQlNHQj1veChCTDd1
fihsakpXLSp7CnpNTVhNMSlKc3x8Pk9mezJmRiM0SVgycWF6c2pXM1pFRXAkYGB9WWNjRTR2Z2M5
ZmpNcm48MCM0Mj1hdT0zekU2ZAp6eU5IXytGUWE5OWM7JFgqSVF2e3ZoI3ZZajxKX0tDMlAqOCY0
QlFXXitUeWR7SW0oIzdiP3V9UnghdllnMVdydDwKenpDJm93dHlrX3p1TVNVblptfWR9OShve01r
Zj5icnN6aVZsd0U3bkVtMSVmcHlUPWY1Mz9NezgkTzlgMW4kcGJDCnpLOGxWQWpNWUwwI1I0Kldj
WlYwPl5oKn1YRHdrJiNCTk85X3EzekJ9QkQreWlzNitPNztTb1lxalQqej88Kj9aMwp6OTBzb0Qj
QVk7VyhwQWlgTHJ9QFluTVItbGdiMEBhOVc3TXhER1EkSFRtWj5LYnJnZ1Qpdip+P2g4O2pMSTwj
UXsKWkcjTVV7Uz1YTkJWaiVTfjUpZkF4KkYofDN7e1hnMVYoJE98CgpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3QucGRmIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3QucGRmCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDI0YzE5ZDk4YjYyMWZlYWRmM2U0ZDYxZjdiZmY0
NzEwN2EzNzRkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBi
aW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDc0MjEKemNtYWkzYnkk
PyF3Xm9yRjVKWFQ/ODVLbHdkSSVBT2Z1WHh3VnJYVnkybXVLSk5rSyM7Z2BxPTJRam5CSnEoTT83
CnpDOFEoLXIxWntzJitvKU5fZGZTfm87fndAWXA/eVQqemV3ZHRpYFBeZ0JGQWMhMiNUQCp7JGBo
UmpwfE5DPWQrOQp6Uz1hLV8jWC1zI3Rje3kzNUpyP31nM3h4M1pXdWZXP1AlX1hrLT1FdnRTfU4x
MDlROVcjQHE/dW5aZ31XMlJKOG4KekAlLSojIzhkTElCd3RRaU1oQEhpOV5tXnhZbCg2KShEczJ6
T2h7JldhP21VYTJsbXVZUWp9allYbkRMNSZgcjFZCnpGM0pnJW9UXy0/WVZvNFd7dkE0PTBHU2BW
MXA+TnRjKHtnWW1ELTFpTyNFUjZlZ1B7aUlYcX5XTDJsTiEhNzJ7Rwp6VjZGYkpPbmY2YjNuMk1P
ZFZ4UzdxfWtzeCNKP2d6e3ZWUDI1aCg7SDApdmJFSiotODJVdj44N0I+KEJwYVJaYjwKej5je3RF
JT1MPGImdDlpfjJJO3RrZSNHXi1FQ0BWSCNkSHJFTSpxbzJ8TXx3YHROdSN0Q0M7WX5YNVB6TyUr
KVM5CnpYektuWEpJSkdDcHxVMTxpZmdQVT42VTY8P3t8Q0Bgd1pPbV55Ynw5KChedFEjQDQmdjZs
Ykh3SGNYYSgqMlFAbwp6OVF2ZyNBNG5XOyVKSTI/PV9iSUcwLWtjWTc4TzJFUDA3d2tRVUpZZmhI
QjAkYzU5cyo1PGJKU0pIR3h5Sjl3Ry0KeipWIWgmXlVyZUZYOGYlajU5ZVAtcEllYj1LWHFsPzk9
RHdeZUZhRGQyMUFmND5GRXhLQD5oMGRyMkowWHZ7emxwCnpkWEMlUXpmKDlvaDIxUX10XjZ7SDdW
alkyKW4wZTREMCMpWGRgMTlIPV59PV97TlNUSzBvezE2dnJnaHB0YTRQIwp6KGQ5Pil2WFU+dWB1
KVZXWG9xdDBaQmBQYGBANDBjSEM0UHE3UFZJZUV9WnkoKjNRY342SWMtMWJmKTZOSFgtVmkKelp0
SHZmUElFKSY7I0t+NCRNMVM+MXBUVm15Nns2TkM4WExNb0pEbnk+ZWRga2FkWC08QVQ5amBfQnpY
PmNmcDdLCnpSTDU3fTF8QyhLRiFlUkxya09KYitSUT52UnRPcj5WRGV+bEElQSpZdGw8d0UkMmlz
PiZ1bkxEdyVFfDg3Y3FBQAp6bklnS3tUTjk8OWUmIytVN3c9Q0Erfnw0dVVSKHxsYDRaQW49dUR0
QnxIM3J0PHl9MFZKNDE4QyNuRWE+dWlTSiEKeko1RlY5QW56QW9HVldKZiFQOTFzQTIld1NlJTZW
Yi1VNX0xck14cnNKUFl4YWpqN1IjR20hRUM/Y05Ra0lsWE40CnpeSVY1WkcoJUNVWG04YWNITyRW
QGFqUzJgLU1VKG8zSGBVSiFKM0FmPEpZIzFDaz43MmRwfSpYcFJDUHNhYyN7Iwp6bnE7ZilIWlVw
Nm19KWZUdER1JihqdmFqVkdIYzhaVlBKb2A2TURZalIxP1ZlVk5vTkFLT3M8eFhFQkViVkRXJUQK
enZwZylic1IzRWVxU01wJVBfViZQKUZVbE4qeSpjRDFzQSVFSXlxJHwpOWxqWG5EMkFYVXxQNCg3
PlNNOEJVdnduCnpqMGIjaHoxTHZUX3Y0TiQqTj5qdV4ydD1yJXJ2OXBOS1FQRV5KVCRGbHtteXMm
V3FVfjFYak13dWZ7eSomej5PSAp6RVFgOCpVVGJjcXl5Py1jUCYpbiE0fVY4KElgYDAxaU5mQnxa
JCtFV1QpRVJTMUNpWD5NY0NNaTd0aUxvUklhTHEKeih+TGFYUldwSUs1YnwkNilNa3NpJU45U3Vh
QDFHeF5ZRC1kNk5gSE4hVXctTmNvMCMjXlZWNEtAVDVFbHkpcEYkCnpzaylxY0otbiEjbyFqTjdX
Zk1MLWhraTR6NFNNTyM9Tn1NdD0lY05eZW84SX5tQF9ybiMzMVJAJjJZNHgtfU81Vwp6e1lJbXlQ
YDR2Wl4+aUVrS2shaSFSdWlISXNtcjt3OVBqSnByT2FIVj92QV8qUkJjbGF7QUp4JEhETTNpRTE3
Jk8KenA+JT1qZGBtIyRxK3tpbG1SQH0rQzlCdSNKMUktRDxDWUVRT3s9cmF0VFZNTS1XS3EjV0Ze
PD1eZD4qbFprYnFMCnpyfCQxZ1h8VUFaeCFJOXR1YF9qVEorSHh5azFIJFgqci1xP3hnUW9Ed2R2
UWMrZzJvbz04LWtmZDBMdTJfTCoqKwp6X2FrT0hBNilaSkJgdjs0PFgjUTBuJlMmRlpQWUAtJHph
Y34wVH45MGk+Vnt7ZmYmTmtibXt1dV58PmdfKCkpTW4KejMrUU5scmFhckJKbXN8WWN4ejA+JDY5
MD5UPTE4Ym4hWmNkK3BaLWZZdnhUPig4UntVVjJ0YzlwTnxRdTBVZ2g0CnpUUntPZml5YlpLTEdL
QU5fS1g/MUNfJCVqeX5VcjBUUHVrSUdSMFkqSVpAJX1nKH5+fDMrRTQlPH4ke3g7ND05Owp6Nm0m
TFA9b2QqPCk2Tz4wQTFDZiFvSzh7VERvJnBoc3IlSWspKk1mITNsaWpVU1o5T3U9dWh+OztoRmJu
ZiFFKDQKej1RUjR0OWhgLTQldHBNWnZVaUFPeHV2V0JyVVUqKGFnZyU+dndxdU9QNXJWe1VlJkJV
OUQjd1Q4ViVVNVJwJHVYCnpBY0V7NkZ0RTRuP2ZobiklTVA3IVhFM3hPOFp1MVhIenMjMl5kcG9g
aGFUVTRoJXpeMTUwO1k+Qj99NGt2VlFJVAp6WkVvYCVqcmxxRDB6Rm5oRXtDKUpId3J6aC1WWCVR
R3AqS0FOM2hRIXlOfT8tWDhocyZgSlE/ZCNibkVMQDJ4YG8Kei10ZHxNcGwkMCQyZnR3clZWU3ch
KUxUJChweGVXQWxfZlI3eUcxMWVAZno0IUI9PVJ7WWR9SGxwOzc5eytyJjNRCnpAP1dlRDB1eGYh
UypoTXh3Uk9JVlpKMU17SEp7OFpLQlphSFZEP2l1enMwOCtxV0owPV5halFAK3ZMNDEpNUEzLQp6
KD9fRFItTXJfNUljdWN2I258YSQmWkEkMD9VR3p7ST9eTVJ5NlluJXVfOCpjakE0LTFHa3p7RmB1
ZGxUZDZ1JEgKekQ/Nko1ISlEWG8lUz91PiRiWSYqbURMeVR1MzRgJHMjTDUhdC1SUTRTQ2ptcXE3
KVZ1RUsoVFYkOV84MERYWTN6Cnpid05UcnZmeWF6dDF5aSomR3sqbmdtUkh5JkNoe2BkI2MwU0Bs
dXpyPT0xNG5aMDg4UComb2hUZGk+JDt0KFJSYAp6Km8wNXkrakBke29we0ZUQCNrdmFza003KShp
Pi17Xzx6KnYkb25tclhlPV4pOEYkckImREMkVXkmIUlZKyVoPTwKemA9Pn5Abmt+Kk8+VXM3RzU+
bj5PVz1wbyQxPU1La0E5P1N5Njx+TFlkU2FQOXBgREJZNTMoMygjSnd5LS1ofmxfCnp5QFhfbkts
e00/VXZHVTtBczg9cWtyVXVxJDFhNCtVVS1mbSlBbXlTZGNGXl9MV0dhJWxzaDlZQmlfN0JsZDV8
bgp6WmooKEkxSjQ1YlF4YCM3SnVVPjlSflQ2VFJRazRWdFdKMnVGTnZPbVdhdmokIWM+PXRWRWZ9
eDIpSD0zYUlRZ28KeiFCPXlaSWA+cGE1VmUkS3skWFVSTjRNdiZxa3g5fDN2S19YYFZ4aXo2UHd8
ZiVTSF52Y0Z3ZT1gUlMxRXtfVihUCnpMTDZrRjw7JiVaPitPejBGSWgoa2dRZz48IX0hVS12JHJU
S1dlTzEkOGRyXilYaT9ZVHBwbShtZz1ebjA5JkIqWgp6di15aUJQUzZicVc7bWk4UFFFRlB6SExV
RjR5Mnh1OX4lWVkzVU9jc2o2R1JRREp1SmQoNVJHaEZ1QiM1NXJIdmIKemVINkpfLT05MXQwazZv
fUZaU2o/UF9BMHl2MEJANGtldkktdzskXn1kZ052bnFBUEtxWX4yQlA/e2FwMXBRTGNDCnomMkc1
RkZLcjNTdlVucF9DazhXWmdZVSkrZEEjJWg/KntiP0JVWWJgX2t2ZkFNalpGejtAWjJOSl9VVlc3
YzliKQp6WipYfUlOZWYmb3wxQEZ8Q1J8WGJhXi1RUjdqTWE2Z1VuUXJrfj57ekshKCU7eUV9SF94
I240SGM5WmMzJigkaSgKejFAZjlBP0ludjxWZUhQd0k0Smt5N21IQnhzd2tsbFhZJF9nPUFxRzFy
fWtoJGBwe0kkY01edUQ5VjJ+PTU3YHBaCnpDWjxnS1dBanY9MD1AMihFUURgfFlPfCQhUzJXdnFa
VTNBJmgoNmhHam1SanVJd3sqJV9kdjRCdmVVOUlqI0JTagp6MTN4RU52T1JmaVpmJHorKTdzS25W
bjRJRVBMcEdxVj5RUXs5d1Uqc3llNytvUWtDe1E1dDMjbitLXjZUZ0Z8THEKejI5aWhMRnVSdi12
WXtnfHtXRjJ7NWsqLTVkfD0pfChXJmAkJFh2KmkzcWBPfSllXklXWmB3TStqX2xwT2leXlUjCnp5
fCVRa2tnTDgmJXpIKW9KbCtpZWpwa188eFhAck0hPC0hI21maXhvQjY5eV5AcDxQKWV6QSlQZztZ
UmlPMUhXOwp6XjVhOCpRZ3xMIz5sQj8oPiRpWT4rQHE9Z0N8MCRVPzRtU2NjbGJnPkc9MHJZZFIm
KndEQnooWDwkX001Kz5QaVQKejE7JSQzLWhGJGJ2Uk4+SFJfJWRWb2FCa154UzFAeEgjUmxTSjRq
PTFqZDZ7eV9JVEI+S3VOTHRDQjxaWW1JU1psCnpAIXFTSiV4Qz4/LWpyKD5lVjAmI3o7MFRyWnFv
ZD9hdThNPkdmQE5+N2UmPEFhekRgPmFAOzZ+KT1xZ0t0KTM+Ywp6UioySCote2RiWjNSeF5pOEl+
WjBeTHZOYjBtYDU2KWluPlZkJHBFbiVUMXd6dUhfdW5IYUUqU15gQGhBYldMJjMKelM2QDxSbmdO
cX50X1p+TXBaNXxHSX5nelktMGs7b2VBNip+b3lFU29EdyVQaU09eW5hK1BtO3plPit8YHdOfTsh
Cnp4aVdPUi1oPzk5UStgMkZyeVQ0emN7RlQjZVhlJDJLZHgxQz5xJjV2Pjh4SnNyR3BMSUp4eHAj
X1AxRU5UfElLKgp6dmBnUmY/ZDFyJXFJeD9jLUMqezdNSEFlUT5zaUcpYkxrZHhzVmk1PUh3Nys1
LW05QjdWQVNyRCltPmFpRVVeUj8KelRxRCF0O0RhT3tzKyZ1QmxpUWwhcGk2bUEqN3wpMShZVjBF
Q2pSWDBEWGMhTT57eVFuY3tkQDQpPTIrZSQ/fUNnCno8V0F6TiRgKj9XYiRlKFd3cDU9X1FLaHk3
dzk5O3JoaT56OFU1QFJaZzc3IURBQFhzQld2V2p2UGxlWVZzMmRNMQp6KzNJM0Yzb0FRLWREcSMz
Nz4tQnBKQzNjKmpLUXVub1hYeXJUZW0oZysmQEAxVVU7JH15JmpwV3RNTWhEVDVQP3wKems+YG5y
eiRhRGY0Y0drJms5YTsxNE13V3tlRy1tWitVMXp6VCs1XlRPZnA+NE9qcylXQ30wUXxzIVJqKTdf
UzdfCnphKzt9RSFlbGRJVFhAWTEzUV4pSypfYFF4WFFUcmlsRjJrZ0BCNyQ8M0RMVFZJek12fjIr
bk1KKFAzZCheSH1MIwp6ezh1Xz9xeCtxUTU2NXQ5d3Etbz0yVXBpTmpqREBaTnFxYVVHZmhTKms3
UCVAMks5b1JLN2FCJD04ejRoS0E8ZmAKemN5RF9BeWMoJWIxKT8wVTdVaEBkdFVeaE9aVX5DY15W
QihYKzl3JW0jOXBOeDRSUFNIUn55QkBzbml4IU91UHsjCnpwKWJlJCRUJGt9dygqPVNkO2FaWno8
aXlOQzYhQCpUQiQpU0JOUDk/amx6YmF6TU9jRzZgSU5KZExMPmJYM3lJZAp6MkBfOFVKPWA/YC1a
JlM5KCNBJkUlOSROOUFWKkBycG1lc2RiVWl+a003b1ZDZTR1UmlENjZAS048bWcwRjVTclAKemc9
bzJMdkRQO3w4JSNCS0JSbERkNUFUa31WX3liJCR0VSY5Yk5ONTxPNXBzSUhCUUJ9dEp1WiQtcDxT
UlBHYGBPCnpBRmJ3Vlh4cDFSb1VVPnNXVjdXM01gfipMa1cyeS1NWilLVSk5PGBEOWYoYnIkajh3
SDdlcVFgb1ZYe0FhRn1VMgp6P3xDPSR5fHY8TiVXPTR2SHdGPWpkfmo+c2dSPGY3MStrVD00XmxZ
RzRsfXlKa1dOYEFKTjBjaDUkQVMoJEx0NFoKejxoO29vc3BpdWlRVnNkfFhQeVBHcjQ7dlJJKipZ
TCYwNEluZjZ4UVB3Uy03bG53UTttdFhXXigyKWVDdzZMbHZmCnpWIVhgJSMxendDWW1JeXh1MWAy
c0plX09MK2ZRWExtezB2UXg/RUVAPmJ2MjxaZlNOK3pxKCFQYiVSaFVVeGcwRQp6V1d1bFZkLUpY
fD48NW1WQjR1Xj4heVdESHJVcHhgKTtffjBJbzZifV5TSChnb2l1UXFBTVhmV3Boez01czw1TiMK
emprI3NucX5WQ1ZodSFmZjZTLVJjNWQlWXk0d293TiE+PFNJNFBLajNkblpUNUk8bEkoKnhjPiQ/
V059MnBgcU83CnpyS0xJUnFhO1J4QCFANkJiR1NMTkhfaEZ4cTV9KkF0blNycmohVzV0dE9VSjkp
S2FublA9RWpVM040PD8leCROQQp6I0tOeXAtPXliR2AtJEE0eV4mdklhZEk5bHBWVDIqS3w4MCEq
OGtNM0g2JUEkTzVVSUlJSHR+T0NSSShtYD5hcGsKeklAIV43V0xNWSNzSm0pQ1JCa2wjeXwzQngk
e3h6dTF3VjMrZWZaPD9PRGg8Kj1FJUFyR1V0VkIqN3B1dXZ7Z0t3CnpgQ0RaNkplVXlNKk5IPXFX
WGxZLW9IMmQhXzQyMiV3YjMmWT9XLWVFeDNlYlF0cXZ3VnJ7OSFPOCt5YXdMMjgyOwp6dzdyM3Nj
YT9gWkNiXilNZmJ6S350Y0RqVGUmOXA7MDwqUzhYcDdJbmN6WHM2LSpaMnVFJC14QzgqQUxFbHtY
OU4KejN0MEZmNlZnWGMqKlh2QER1e1FEZ3JPS09DY1d6KHAjMV9adjlZfl5ndUh0e3ohNnImaXot
WUhFQUFienptMiZBCnpiLVV1el9TREFxZzBeIUVaRT4qc1I1KSNNWHp2c2FzfkcjV01MJEFAPndT
YTh1N1IzVEJhXms0OUJJbGIqUEB+JAp6dmRYbFRQdlo2VXcxJENJVHlwY25TPSoxdGsrRiVYM1Q+
TFB1d2tKeCVyOEYoTHt1VjFGKFRYKE4pVGI8Ymwqc3YKelZwTG1lQ3dOLW05cmIpcFdgRjhpMnRM
eFBwUEJkYmRtdFdAdHoyQX55WkxtfVpANFIpZzs2VmYrfTRMTGV3P1EtCnpHUTFBRmR8eUNFJl9n
LTtFalZNbCVaaVYxWnwrT3dgMH1idGMhb1pvTUN2OFc7VmdAOSQoQ2N8PDZxPkI4SkBOPQp6ekc3
a1AmJU9tN1lAbFJ9P0hjVDI1SGxSdzFEXjVMKyh4OyQqYSpaJEBZdis/WHVnXmQjMihER2hNSlRg
WmN8T3gKenFPRWhNe04pcUdwek5HY0pVcEZ3VyFOenBkd1lLfnNPcC02JUtmTVpJXnhLbkUqX2Y+
JX1+cDVreno/Tj1sPHkqCnpAYH1wNj19eUt8KGVCRHc0dnlqcyhRMVE9Xm45JEdnaFk7e2lfdHdD
T3FNcnFaY2l9WGtuV1lfRkpHaFF1Smk5egp6PXdkUns8dVRfdFZBXzxzUEx+Q296bE0/c2BCPzIt
NjJ4fGIwRkluZlYzQiVoUn5mZEAmTGhwPEd3WT0qK1ZPJH4Kem1oYUE2Yi1jfSFuYk1KViZxUS0+
LVpRcmBeaEtGKkRjUm1icm1uMDA0Qmt2I1QjP059KiZURGhqKTtzZTJRY1VQCnpwUGQjYmtXKn4x
OyVoczVOQ3tpZnY2UD5gei1xUThQckZjI3R0fi1JYXIwT204UlZDIyQ9RUtNQDJQdXBCJXR2bwp6
MDg1PT8lRXExM3JmUV9oUzlVeSpET1UjSUJgfTQpZktGQ2dqMnU1PXNCPjxFZTl6MU9UKmplY0Yp
WFNvTjA5UXEKejV3djB8YjBAPEpUPTFpS0dgPW43U0tpZnVFVU8zZHRnZC1DKU9jWlA/dS1Dbzhs
eEBpKl50JWB7bFVsc150Ry13CnpjaXhYb2hDZzVWQHJuZmM3IVVIcVZOPzJncytHYjtnQndRaish
anwpKUNHb2lmNlIocik5UGI3JSR8PkZRTVVNQwp6VC1AaD4ye0lLVi0qTmZHd2s9ODcqdUZ2JSN5
T20lVlZUSWRtJUNkZm1QaCVtPHd4b0JleVZHLU1IbVlBazJXJmwKemtWND1jWkB1cm9vY2RsJXZR
Q2BSdndXcT97Y3ZoSHEzZyZwZkEmKSNAKEFAal9gI3N7cUd6MSp2PiQhfVM+eTNDCnp0aCNHa09A
NChEZE40T1pwRU5VN3okNyRYPjsyP3d0KkZvTHloXyM1RXl4clhuPzYpMUk2aE9VTFd3IzRxZ1gy
Pwp6N3lDMyV1RyF+dGYlPihZPT53KHlKSEYxVEBaaV98Q0o3fUsteClrLVl0ZnU8Um1VNDI9cyZx
eyUqNTwpI2ZFd0wKeiU4WVMrbld1dlc/NFkkbSgoMzBOcnV4Mzhmb0JxZiY7dF8qem9hTz9TZThh
IXBJR1g8b1cyQ25oWGpeQm4mcj5TCno2WXU9YHhXJmd6YE5VblpMQ3k8UCNqZG0kJT4wRXFuT0pg
RTw0P1pBKUw8MkFKJEdJOXNYYUVnRTIzZXteZEApUAp6eEtNRXxKKFp8TFl7P34wSDRVQCkmPCg4
JHt0cnF5eGFmdSg3cTlMRVQ1WHdGXkJFezZgR2JBYk93JDBkaXZ0NXEKejA3dXhUX1AkYl5Aan1P
VllyVEIhbTV4Kk5pZiRPaGpvTV5XRDg0YmJQMFdlS19JUTIyWDJWZX5VNlpOYGNaR0lDCnp4fn1m
akBWSVY2X3xyKTEjdXhHdk4rRjhaNiNCVUlwe3JYSWljU0lVUVZ3YkRTXzN4VVMmbXJGYEw+YnlW
cH01dQp6QVNAdmxJeGlIUk8lNnpeeE9sbG54PS1sKXo2ZUxFVWIoSl5gLWZ6OG5PaSlWaHhCKjc+
bk5ARTZqK1phWnBAS08KekglfFRmQHBYOD5hRU56b0BBMENvZmA2V1AjTiZpWnVKU0JPUnxFem8p
MEFeeEpSdEs0SzxAeXJITT9BdE1SaXFQCno8UzRYdj0yQyFDY1g3Rj5yJUdwQGVAQDRqZHViSWw7
Q2g/LWBASmBHP0djKD9SKVlpbldFVH08PypBXyhPO1dMdgp6Ukw0WD5wfjhSR0c9PX1GWD0tfnBW
P2J5ZSk9ZFdFWUtnYVZjRWJeP3YmMnRUYjAtVylUOGl9V0U4QUlNQGFBckkKeklJST4xWilYaTRt
MllpYWZwRnByUUJ6dFA9Vj5HZTVrPis5VlBGXiMwdE8/MXE5UEN6a2I7fUpxbilKYCoyV1A3Cnox
T3FAKXU5Z19BOCZFX1Awc3hWV2t2O15XNUZgTUVHSXk1OCp4QV4raz02a35UNWNGOFU3IWVZMj8/
SDlGfiZmRgp6cSQ7Yz92OE1XO3M7dE9nNSZUaEtoOWJmTFBqJVZrbkZfV1Fjcm99T0JAan5eUis9
aUolSDZGUWNrNE94c21BQVAKelhJalVsQkY+dUVaKjk8XkNLWEt7SDRmSHlaaVM+eUY2Ozk1UHAy
fG1eJVQxO2ModXBjPCh3XmopKHtzY1UlTz83Cnp6ck1YcSg3Z0ZtYVlnOD5rKVQlJkVmVWhXZVFl
SDQ5eUBQTztDaW91dnRxUXt1S1RMPVhUajB3YHt5PzcoOChjKwp6RUc+NkhRO2o+K0VWV2d8dmAm
ai1QTmdUKjVfJlkxTz00PGg0Q29mZW5scWh5Uk1+eXlBKV5VT3NDKFcxNFZMKXQKekwydlFRRlRC
KlA0UWc9Ym5CUnYmY2ojJitXdjYtMkRvT0NAODJhJTNuOEclbEZFe1puOWZ0PUIrZE04aGxHTHlD
CnpRKXM/QXI/SyE7WHRNZH5WV1htaSNBbEA4ejgoSnlLU2NqWjxleVhrWH1NZHRrJDludmNnT3Nl
Tn1JYzROU3BEMAp6R3J8dDw+Vn5wNCRDR3dpKzVDQHA1ZGNXZiZkU1ohKWQrP30wRmUrZDVEdGR7
VklyYkhzSWMod2ZkR1NucXlhXk0KemZoUGFHO2VRYmtOYUNwYDBIbHI2IVA9Mn0xd2hpYVlYYmhw
MTB2Kn5qUnJJWE5RJm00Xk5fI0k2OVhYOV5TMjV9Cno5Z25sciFuaGZNaGBrR3RIcGJKPDxSN3Fx
dEA8Nm15MTVNb3E7OEhVYVRaUGowQktAZWFxZjZhajRLZEFHTkIxbAp6IUMyWHVsYTJ6KDA3NFcy
Nm9FcmNLeXJBVHlFQ3h+cUQ5UTVJbzgjZzFZemp+TFRNMz9mUU93V01wSTUycXlUZ3kKej0yPTFs
Z2QjZGZ3QlFPUGJ4OzF6YzlLY2JBdG5PLT41ZVBsVXBAZi1hKVArdlBjS01gUmtFe2tIM0koamw9
TytoCnp4cyE3N19lQjEhV0FvYnYlQTl6N2FXPSVMWkhQaHM0aktTYmJILXEkRUotKGsoU0t1c15i
SEp3U2EoT3F8TmEzSgp6djZhb1NIbiVaWUt7O3ZPZjI4ejMlQHR4MFF0b2NISUpgSm83TDVqajts
ZzBCRnAmZW9GeWVyTiE5PCNYZ158UjYKejt2NXVBeWlKSTVxJHFLcXsqWGY/aHlmNWdNI1FWPzQr
c1BhZn5aU1Vgd2M7WWdBJno8eUtMb2RpVFJIbm9UeCs2CnpnQTx7VkJvbX1UZittP0R1N1MhRHxB
fStJdjUxJT9eRHlFWk5lPXRkRUhRYytWKkJkMGoyTGxWNmFwb0JFQ0xtVQp6IVVlJWw5eCN9UF9p
dEpDI0FCPWhVPzJuekFSXyhvMEZlajszPDB6VHt2a3VjNVg5X345dzdFVkdCNmxJcjFKbGUKekxC
WWhGfDVKdjlpeFNWc0tWQEpqXmp+XkppXlRvP3J5aGJSe0ZoN157eDNXdmFYMD5fOXVrV0R3O29q
VlVwXnhkCnpxV0BsdDYjYmlCSEByRlZnMiQ3bnQhM3dwQSpLcVhpTmdgT2BUR24yS25ockU5MXVk
ezQpRyNUa08zTTIjZ1czWQp6YUZpJCpDV1ZCZHJLTXp7dkxhdzg4WkhmJUt9ayEmcGtSYXE7UXY9
NDlSZUFnQ0NWMEs+RVA8XzFPeT5iRDZvYF8KeENfKU0/RH1xS0tMe0pEfURKYztWNWQ7YiVqWUxW
SU5LfCVwR3NuQ0EtY24pK0FePmh+U3Y1NF56V3tuQF9XSis7CgpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3QudHh0IGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rlc3QudHh0CmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGFlYWZiOTg2NGNmNDMwNTVhZTkzYmViMGFmZDZjN2Qx
NDRiZmE0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Jlc291cmNlcy90ZXN0LnR4dAorKysg
L2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXRlc3QKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0R3RrL3Rlc3RfdXRpbHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNmJiNjQ1ZDBkY2NiYWE0MTkxN2I5ZjYxOTRkNWYxYjkyYWRkOGQxNC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdEd0ay90ZXN0X3V0aWxzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFybm8gUmVuZXZpZXIKLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgInRlc3Rf
dXRpbHMuaCIKLQotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgot
Ci1pbnQgdGVzdHV0aWxzX3JlbGF0aXZlX2NoZGlyKGNvbnN0IGdjaGFyICp0YXJnZXRGaWxlbmFt
ZSwgY29uc3QgZ2NoYXIgKmV4ZWN1dGFibGVQYXRoKQotewotICAgIC8qIHVzZXIgY2FuIHNldCBs
b2NhdGlvbiBvZiB0aGUgd2Via2l0IHJlcG9zaXRvcnkgZGlyZWN0b3J5IGlmIGl0IGRpZmZlcnMg
ZnJvbSBidWlsZCBkaXJlY3RvcnkgKi8KLSAgICBjb25zdCBnY2hhciAqcmVwb1BhdGggPSBnX2dl
dGVudigiV0VCS0lUUkVQT0RJUiIpOwotICAgIGlmIChyZXBvUGF0aCkgewotICAgICAgICBpZiAo
Z19jaGRpcihyZXBvUGF0aCkpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgfSBlbHNlIGlm
IChnX2NoZGlyKGdfcGF0aF9nZXRfZGlybmFtZShleGVjdXRhYmxlUGF0aCkpKQotICAgICAgICAg
ICAgcmV0dXJuIC0xOwotCi0gICAgd2hpbGUgKCFnX2ZpbGVfdGVzdCh0YXJnZXRGaWxlbmFtZSwg
R19GSUxFX1RFU1RfRVhJU1RTKSkgewotICAgICAgICBnY2hhciAqcGF0aE5hbWU7Ci0gICAgICAg
IGlmIChnX2NoZGlyKCIuLiIpKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBnX2Fz
c2VydCghZ19zdHJfZXF1YWwoKHBhdGhOYW1lID0gZ19nZXRfY3VycmVudF9kaXIoKSksICIvIikp
OwotICAgICAgICBnX2ZyZWUocGF0aE5hbWUpOwotICAgIH0KLQotICAgIGdjaGFyICpkaXJOYW1l
ID0gZ19wYXRoX2dldF9kaXJuYW1lKHRhcmdldEZpbGVuYW1lKTsKLSAgICBpZiAoZ19jaGRpcihk
aXJOYW1lKSkgewotICAgICAgICBnX2ZyZWUoZGlyTmFtZSk7Ci0gICAgICAgIHJldHVybiAtMTsK
LSAgICB9Ci0KLSAgICBnX2ZyZWUoZGlyTmFtZSk7Ci0gICAgcmV0dXJuIDA7Ci19CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0X3V0aWxzLmggYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0X3V0aWxzLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjNjBkYTNmMGZhYmIzYWVkOGJhODA0NTgyMDJjNzk0YThl
M2Y3MjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdF91dGlscy5oCisrKyAvZGV2L251
bGwKQEAgLTEsMyArMCwwIEBACi0jaW5jbHVkZSA8Z2xpYi5oPgotCi1pbnQgdGVzdHV0aWxzX3Jl
bGF0aXZlX2NoZGlyKGNvbnN0IGdjaGFyICp0YXJnZXRGaWxlbmFtZSwgY29uc3QgZ2NoYXIgKmV4
ZWN1dGFibGVQYXRoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0R3RrL3Rlc3RhcHBsaWNhdGlvbmNhY2hlLmMgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEd0ay90ZXN0YXBwbGljYXRpb25jYWNoZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA3MThmNDAxYTdiN2ExNTU1M2MwYjM5YzY0NzFhZDI1OTI3NzYwM2UzLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RhcHBsaWNhdGlvbmNhY2hlLmMKKysrIC9kZXYvbnVsbApA
QCAtMSw0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEx1a2FzeiBTbGFjaGNp
YWsKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2xp
Yi9ncHJpbnRmLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJr
aXQuaD4KLQotc3RhdGljIHZvaWQgdGVzdF9hcHBsaWNhdGlvbl9jYWNoZV9tYXhpbXVtX3NpemUo
KQotewotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhTaXplID0gODE5MjsKLSAgICB3ZWJraXRf
YXBwbGljYXRpb25fY2FjaGVfc2V0X21heGltdW1fc2l6ZShtYXhTaXplKTsKLQotICAgIC8vIENy
ZWF0aW5nIGEgV2ViVmlldyAtIG1ha2Ugc3VyZSB0aGF0IGl0IGRpZG4ndCBjaGFuZ2UgYW55dGhp
bmcKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93
ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0gICAgZ19v
YmplY3RfdW5yZWYod2ViVmlldyk7Ci0KLSAgICBnX2Fzc2VydChtYXhTaXplID09IHdlYmtpdF9h
cHBsaWNhdGlvbl9jYWNoZV9nZXRfbWF4aW11bV9zaXplKCkpOwotfQotCi1pbnQgbWFpbihpbnQg
YXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5V
TEwpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsK
LSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXBwbGljYXRpb25fY2FjaGUvbWF4aW11bV9z
aXplIiwKLSAgICAgICAgICAgICAgICAgICAgdGVzdF9hcHBsaWNhdGlvbl9jYWNoZV9tYXhpbXVt
X3NpemUpOwotCi0gICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKLX0KLQpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGF0ay5jIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGF0ay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAyYTJkYjYxNDZlYTA4NmRlMzc4ZDdhZDEzMzY1NWQyZTIyMTljN2IwLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RhdGsuYworKysgL2Rldi9udWxsCkBAIC0xLDE0NzYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBJZ2FsaWEgUy5MLgotICogQ29weXJpZ2h0
IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLSNp
bmNsdWRlIDxnbGliL2dzdGRpby5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDxs
b2NhbGUuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+
Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjZW50ZXJlZENvbnRlbnRzID0gIjxodG1sPjxib2R5Pjxw
IHN0eWxlPSd0ZXh0LWFsaWduOiBjZW50ZXI7Jz5TaG9ydCBsaW5lPC9wPjxwIHN0eWxlPSd0ZXh0
LWFsaWduOiBjZW50ZXI7Jz5Mb25nLXNpemUgbGluZSB3aXRoIHNvbWUgZm9vIGJhciBiYXogY29u
dGVudDwvcD48cCBzdHlsZT0ndGV4dC1hbGlnbjogY2VudGVyOyc+U2hvcnQgbGluZTwvcD48cCBz
dHlsZT0ndGV4dC1hbGlnbjogY2VudGVyOyc+VGhpcyBpcyBhIG11bHRpLWxpbmUgcGFyYWdyYXBo
PGJyIC8+d2hlcmUgdGhlIGZpcnN0IGxpbmU8YnIgLz5pcyB0aGUgYmlnZ2VzdCBvbmU8L3A+PC9i
b2R5PjwvaHRtbD4iOwotCi1zdGF0aWMgY29uc3QgY2hhciogY29udGVudHMgPSAiPGh0bWw+PGJv
ZHk+PHA+VGhpcyBpcyBhIHRlc3QuIFRoaXMgaXMgdGhlIHNlY29uZCBzZW50ZW5jZS4gQW5kIHRo
aXMgdGhlIHRoaXJkLjwvcD48L2JvZHk+PC9odG1sPiI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBj
b250ZW50c0luVGFibGVXaXRoSGVhZGVycyA9ICI8aHRtbD48Ym9keT48dGFibGU+PHRyPjx0aD5m
b288L3RoPjx0aD5iYXI8L3RoPjx0aCBjb2xzcGFuPScyJz5iYXo8L3RoPjwvdHI+PHRyPjx0aD5x
dXg8L3RoPjx0ZD4xPC90ZD48dGQ+MjwvdGQ+PHRkPjM8L3RkPjwvdHI+PHRyPjx0aCByb3dzcGFu
PScyJz5xdXV4PC90aD48dGQ+NDwvdGQ+PHRkPjU8L3RkPjx0ZD42PC90ZD48L3RyPjx0cj48dGQ+
NjwvdGQ+PHRkPjc8L3RkPjx0ZD44PC90ZD48L3RyPjx0cj48dGg+Y29yZ2U8L3RoPjx0ZD45PC90
ZD48dGQ+MTA8L3RkPjx0ZD4xMTwvdGQ+PC90cj48L3RhYmxlPjx0YWJsZT48dHI+PHRkPjE8L3Rk
Pjx0ZD4yPC90ZD48L3RyPjx0cj48dGQ+MzwvdGQ+PHRkPjQ8L3RkPjwvdHI+PC90YWJsZT48L2Jv
ZHk+PC9odG1sPiI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb250ZW50c1dpdGhFeHRyYW5lb3Vz
V2hpdGVTcGFjZXMgPSAiPGh0bWw+PGhlYWQ+PGJvZHk+PHA+VGhpc1xuICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhZ3JhcGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9ya2VkITwvcD48
L2JvZHk+PC9odG1sPiI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb21ib0JveFNlbGVjdG9yID0g
IjxodG1sPjxib2R5PjxzZWxlY3Q+PG9wdGlvbiBzZWxlY3RlZCB2YWx1ZT0nZm9vJz5mb288L29w
dGlvbj48b3B0aW9uIHZhbHVlPSdiYXInPmJhcjwvb3B0aW9uPjwvc2VsZWN0PjwvYm9keT48L2h0
bWw+IjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGVtYmVkZGVkT2JqZWN0cyA9ICI8aHRtbD48Ym9k
eT48cD5DaG9vc2U6IDxpbnB1dCB2YWx1ZT0nZm9vJyB0eXBlPSdjaGVja2JveCcvPmZvbyA8aW5w
dXQgdmFsdWU9J2JhcicgdHlwZT0nY2hlY2tib3gnLz5iYXIgKHBpY2sgb25lKTwvcD48cD5DaG9v
c2U6IDxzZWxlY3QgbmFtZT0nZm9vJz48b3B0aW9uPmJhcjwvb3B0aW9uPjxvcHRpb24+YmF6PC9v
cHRpb24+PC9zZWxlY3Q+IChwaWNrIG9uZSk8L3A+PHA+PGlucHV0IG5hbWU9J2Zvb2JhcmJ1dHRv
bicgdmFsdWU9J2Zvb2JhcicgdHlwZT0nYnV0dG9uJy8+PC9wPjwvYm9keT48L2h0bWw+IjsKLQot
c3RhdGljIGNvbnN0IGNoYXIqIGZvcm1XaXRoVGV4dElucHV0cyA9ICI8aHRtbD48Ym9keT48Zm9y
bT48aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nZW50cnknIC8+PGlucHV0IHR5cGU9J3Bhc3N3b3Jk
JyBuYW1lPSdwYXNzd29yZEVudHJ5JyAvPjwvZm9ybT48L2JvZHk+PC9odG1sPiI7Ci0KLXN0YXRp
YyBjb25zdCBjaGFyKiBoeXBlcnRleHRBbmRIeXBlcmxpbmtzID0gIjxodG1sPjxib2R5PjxwPkEg
cGFyYWdyYXBoIHdpdGggbm8gbGlua3MgYXQgYWxsPC9wPjxwPjxhIGhyZWY9J2h0dHA6Ly9mb28u
YmFyLmJhei8nPkEgbGluZTwvYT4gd2l0aCA8YSBocmVmPSdodHRwOi8vYmFyLmJhei5mb28vJz5h
IGxpbmsgaW4gdGhlIG1pZGRsZTwvYT4gYXMgd2VsbCBhcyBhdCB0aGUgYmVnaW5uaW5nIGFuZCA8
YSBocmVmPSdodHRwOi8vYmF6LmZvby5iYXIvJz5hdCB0aGUgZW5kPC9hPjwvcD48b2w+PGxpPkxp
c3QgaXRlbSB3aXRoIGEgPHNwYW4+PGEgaHJlZj0naHR0cDovL2Zvby5iYXIuYmF6Lyc+bGluayBp
bnNpZGUgYSBzcGFuIG5vZGU8L2E+PC9zcGFuPjwvbGk+PC9vbD48L2JvZHk+PC9odG1sPiI7Ci0K
LXN0YXRpYyBjb25zdCBjaGFyKiBsYXlvdXRBbmREYXRhVGFibGVzID0gIjxodG1sPjxib2R5Pjx0
YWJsZT48dHI+PHRoPk9kZDwvdGg+PHRoPkV2ZW48L3RoPjwvdHI+PHRyPjx0ZD4xPC90ZD48dGQ+
MjwvdGQ+PC90cj48L3RhYmxlPjx0YWJsZT48dHI+PHRkPmZvbzwvdGQ+PHRkPmJhcjwvdGQ+PC90
cj48L3RhYmxlPjwvYm9keT48L2h0bWw+IjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGxpbmtzV2l0
aElubGluZUltYWdlcyA9ICI8aHRtbD48aGVhZD48c3R5bGU+YS5odHRwOmJlZm9yZSB7Y29udGVu
dDogdXJsKG5vLWltYWdlLnBuZyk7fTwvc3R5bGU+PGJvZHk+PHA+PGEgY2xhc3M9J2h0dHAnIGhy
ZWY9J2Zvbyc+Zm9vPC9hPiBiYXIgYmF6PC9wPjxwPmZvbyA8YSBjbGFzcz0naHR0cCcgaHJlZj0n
YmFyJz5iYXI8L2E+IGJhejwvcD48cD5mb28gYmFyIDxhIGNsYXNzPSdodHRwJyBocmVmPSdiYXon
PmJhejwvYT48L3A+PC9ib2R5PjwvaHRtbD4iOwotCi1zdGF0aWMgY29uc3QgY2hhciogbGlzdHNP
Zkl0ZW1zID0gIjxodG1sPjxib2R5Pjx1bD48bGk+dGV4dCBvbmx5PC9saT48bGk+PGEgaHJlZj0n
Zm9vJz5saW5rIG9ubHk8L2E+PC9saT48bGk+dGV4dCBhbmQgYSA8YSBocmVmPSdiYXInPmxpbms8
L2E+PC9saT48L3VsPjxvbD48bGk+dGV4dCBvbmx5PC9saT48bGk+PGEgaHJlZj0nZm9vJz5saW5r
IG9ubHk8L2E+PC9saT48bGk+dGV4dCBhbmQgYSA8YSBocmVmPSdiYXInPmxpbms8L2E+PC9saT48
L29sPjwvYm9keT48L2h0bWw+IjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIHRleHRGb3JDYXJldEJy
b3dzaW5nID0gIjxodG1sPjxib2R5PjxoMT5BIHRleHQgaGVhZGVyPC9oMT48cD5BIHBhcmFncmFw
aCA8YSBocmVmPSdodHRwOi8vZm9vLmJhci5iYXovJz53aXRoIGEgbGluazwvYT4gaW4gdGhlIG1p
ZGRsZTwvcD48b2w+PGxpPkEgbGlzdCBpdGVtPC9saT48bGk+PHNwYW4gc3R5bGU9J2Rpc3BsYXk6
YmxvY2s7Jz5CbG9jayBzcGFuIGluIGEgbGlzdCBpdGVtPC9zcGFuPjxzcGFuPklubGluZSBzcGFu
IGluIGEgbGlzdCBpdGVtPC9zcGFuPjwvbGk+PGxpPjxhIGhyZWY9J2Zvbyc+PHNwYW4gc3R5bGU9
J2Rpc3BsYXk6YmxvY2s7Jz5CbG9jayBzcGFuIGluIGEgbGluayBpbiBhIGxpc3QgaXRlbTwvc3Bh
bj48c3Bhbj5JbmxpbmUgc3BhbiBpbiBhIGxpbmsgaW4gYSBsaXN0IGl0ZW08L3NwYW4+PC9hPjwv
bGk+PC9vbD48c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQgdmFsdWU9J2Zvbyc+QW4gb3B0aW9uIGlu
IGEgY29tYm8gYm94PC9vcHRpb24+PC9zZWxlY3Q+PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2Zv
bycgdmFsdWU9J2ZvbyBiYXIgYmF6JyAvPjx0YWJsZT48dHI+PHRkPmEgdGFibGUgY2VsbDwvdGQ+
PHRkPjwvdGQ+PHRkPjxhIGhyZWY9J2Zvbyc+PHNwYW4gc3R5bGU9J2Rpc3BsYXk6YmxvY2s7Jz5C
bG9jayBzcGFuIGluIGEgbGluayBpbiBhIHRhYmxlIGNlbGw8L3NwYW4+PHNwYW4+SW5saW5lIHNw
YW4gaW4gYSBsaW5rIGluIGEgdGFibGUgY2VsbDwvc3Bhbj48L2E+PC90ZD48dGQ+PHNwYW4gc3R5
bGU9J2Rpc3BsYXk6YmxvY2s7Jz5CbG9jayBzcGFuIGluIGEgdGFibGUgY2VsbDwvc3Bhbj48c3Bh
bj5JbmxpbmUgc3BhbiBpbiBhIHRhYmxlIGNlbGw8L3NwYW4+PC90ZD48L3RyPjwvdGFibGU+PGg0
PjxhIGhyZWY9J2Zvbyc+PHNwYW4gc3R5bGU9J2Rpc3BsYXk6YmxvY2s7Jz5CbG9jayBzcGFuIGlu
IGEgbGluayBpbiBhIGhlYWRpbmc8L3NwYW4+PHNwYW4+SW5saW5lIHNwYW4gaW4gYSBsaW5rIGlu
IGEgaGVhZGluZzwvc3Bhbj48L2g0PjxoND48c3BhbiBzdHlsZT0nZGlzcGxheTpibG9jazsnPkJs
b2NrIHNwYW4gaW4gYSBoZWFkaW5nPC9zcGFuPjxzcGFuPklubGluZSBzcGFuIGluIGEgaGVhZGlu
Zzwvc3Bhbj48L2g0PjwvYm9keT48L2h0bWw+IjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIHRleHRG
b3JTZWxlY3Rpb25zID0gIjxodG1sPjxib2R5PjxwPkEgcGFyYWdyYXBoIHdpdGggcGxhaW4gdGV4
dDwvcD48cD5BIHBhcmFncmFwaCB3aXRoIDxhIGhyZWY9J2h0dHA6Ly93ZWJraXQub3JnJz5hIGxp
bms8L2E+IGluIHRoZSBtaWRkbGU8L3A+PG9sPjxsaT5BIGxpc3QgaXRlbTwvbGk+PC9vbD48c2Vs
ZWN0PjwvYm9keT48L2h0bWw+IjsKLQotc3RhdGljIGNvbnN0IGNoYXIqIHRleHRXaXRoQXR0cmli
dXRlcyA9ICI8aHRtbD48aGVhZD48c3R5bGU+LnN0MSB7Zm9udC1mYW1pbHk6IG1vbm9zcGFjZTsg
Y29sb3I6cmdiKDEyMCwxMjEsMTIyKTt9IC5zdDIge3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7
IGJhY2tncm91bmQtY29sb3I6cmdiKDgwLDgxLDgyKTt9PC9zdHlsZT48L2hlYWQ+PGJvZHk+PHAg
c3R5bGU9XCJmb250LXNpemU6MTQ7IHRleHQtYWxpZ246cmlnaHQ7XCI+VGhpcyBpcyB0aGUgPGk+
Zmlyc3Q8L2k+PGI+IHNlbnRlbmNlIG9mIHRoaXMgdGV4dC48L2I+PC9wPjxwIGNsYXNzPVwic3Qx
XCI+VGhpcyBzZW50ZW5jZSBzaG91bGQgaGF2ZSBhbiBzdHlsZSBhcHBsaWVkIDxzcGFuIGNsYXNz
PVwic3QyXCI+YW5kIHRoaXMgcGFydCBzaG91bGQgaGF2ZSBhbm90aGVyIG9uZTwvc3Bhbj4uPC9w
PjxwPng8c3ViPjE8L3N1Yj48c3VwPjI8L3N1cD49eDxzdWI+Mjwvc3ViPjxzdXA+Mzwvc3VwPjwv
cD48cCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPlRoaXMgc2VudGVuY2UgaXMgdGhlIDxz
dHJpa2U+bGFzdDwvc3RyaWtlPiBvbmUuPC9wPjwvYm9keT48L2h0bWw+IjsKLQotc3RhdGljIEF0
a09iamVjdCogZ2V0V2ViQXJlYU9iamVjdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQotewotICAg
IC8qIE1hbnVhbGx5IHNwaW4gdGhlIG1haW4gY29udGV4dCB0byBtYWtlIHN1cmUgdGhlIGFjY2Vz
c2libGUKLSAgICAgICBvYmplY3RzIGFyZSBwcm9wZXJseSBjcmVhdGVkIGJlZm9yZSBjb250aW51
aW5nLiAqLwotICAgIHdoaWxlIChnX21haW5fY29udGV4dF9wZW5kaW5nKDApKQotICAgICAgICBn
X21haW5fY29udGV4dF9pdGVyYXRpb24oMCwgVFJVRSk7Ci0KLSAgICBBdGtPYmplY3QqIHJvb3RP
YmplY3QgPSBndGtfd2lkZ2V0X2dldF9hY2Nlc3NpYmxlKEdUS19XSURHRVQod2ViVmlldykpOwot
ICAgIGlmICghcm9vdE9iamVjdCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBBdGtPYmpl
Y3QqIHdlYkFyZWFPYmplY3QgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKHJvb3RP
YmplY3QsIDApOwotICAgIGlmICghd2ViQXJlYU9iamVjdCkKLSAgICAgICAgcmV0dXJuIE5VTEw7
Ci0KLSAgICAvKiBXZSBkb24ndCBuZWVkIHRoZSBleHRyYSByZWYgaGVyZS4gKi8KLSAgICBnX29i
amVjdF91bnJlZih3ZWJBcmVhT2JqZWN0KTsKLQotICAgIHJldHVybiB3ZWJBcmVhT2JqZWN0Owot
fQotCi1zdGF0aWMgZ2NoYXIqIHRleHRDYXJldE1vdmVkUmVzdWx0ID0gMDsKLQotc3RhdGljIHZv
aWQgdGV4dENhcmV0TW92ZWRDYWxsYmFjayhBdGtUZXh0KiB0ZXh0LCBnaW50IHBvcywgZ3BvaW50
ZXIgZGF0YSkKLXsKLSAgICBnX2Fzc2VydChBVEtfSVNfVEVYVCh0ZXh0KSk7Ci0KLSAgICBnX2Zy
ZWUodGV4dENhcmV0TW92ZWRSZXN1bHQpOwotICAgIEF0a1JvbGUgcm9sZSA9IGF0a19vYmplY3Rf
Z2V0X3JvbGUoQVRLX09CSkVDVCh0ZXh0KSk7Ci0gICAgdGV4dENhcmV0TW92ZWRSZXN1bHQgPSBn
X3N0cmR1cF9wcmludGYoInwlc3wlZHwiLCBhdGtfcm9sZV9nZXRfbmFtZShyb2xlKSwgcG9zKTsK
LX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0NhcmV0T2Zmc2V0cygpCi17Ci0gICAgV2Vi
S2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3
KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwotICAgIEd0a0FsbG9jYXRpb24g
YWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxs
b2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwotICAgIHdlYmtpdF93ZWJf
dmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCB0ZXh0Rm9yQ2FyZXRCcm93c2luZywgMCwgMCwgMCk7
Ci0KLSAgICBBdGtPYmplY3QqIG9iamVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7Ci0g
ICAgZ19hc3NlcnQob2JqZWN0KTsKLQotICAgIEF0a09iamVjdCogaGVhZGVyID0gYXRrX29iamVj
dF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDApOwotICAgIGdfYXNzZXJ0KEFUS19JU19U
RVhUKGhlYWRlcikpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoaGVhZGVyLCAidGV4dC1jYXJldC1t
b3ZlZCIsIEdfQ0FMTEJBQ0sodGV4dENhcmV0TW92ZWRDYWxsYmFjayksIDApOwotCi0gICAgLyog
SXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHBsYWNlIHRoZSBjYXJldCBpbnNpZGUgYSBoZWFkZXIu
ICovCi0gICAgZ2Jvb2xlYW4gcmVzdWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNldChBVEtf
VEVYVChoZWFkZXIpLCA1KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7
Ci0gICAgZ2ludCBvZmZzZXQgPSBhdGtfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKGhl
YWRlcikpOwotICAgIGdfYXNzZXJ0X2NtcGludChvZmZzZXQsID09LCA1KTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIodGV4dENhcmV0TW92ZWRSZXN1bHQsID09LCAifGhlYWRpbmd8NXwiKTsKLQotICAg
IEF0a09iamVjdCogcGFyYWdyYXBoID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChv
YmplY3QsIDEpOwotICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHBhcmFncmFwaCkpOwotICAgIGdf
c2lnbmFsX2Nvbm5lY3QocGFyYWdyYXBoLCAidGV4dC1jYXJldC1tb3ZlZCIsIEdfQ0FMTEJBQ0so
dGV4dENhcmV0TW92ZWRDYWxsYmFjayksIDApOwotCi0gICAgLyogSXQgc2hvdWxkIGJlIHBvc3Np
YmxlIHRvIHBsYWNlIHRoZSBjYXJldCBpbnNpZGUgYSBwYXJhZ3JhcGggYW5kIGEgbGluay4gKi8K
LSAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFw
aCksIDUpOwotICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQsID09LCBUUlVFKTsKLSAgICBvZmZz
ZXQgPSBhdGtfdGV4dF9nZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFwaCkpOwotICAg
IGdfYXNzZXJ0X2NtcGludChvZmZzZXQsID09LCA1KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4
dENhcmV0TW92ZWRSZXN1bHQsID09LCAifHBhcmFncmFwaHw1fCIpOwotCi0gICAgcmVzdWx0ID0g
YXRrX3RleHRfc2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpLCAyMCk7Ci0gICAg
Z19hc3NlcnRfY21waW50KHJlc3VsdCwgPT0sIFRSVUUpOwotICAgIG9mZnNldCA9IGF0a190ZXh0
X2dldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQocGFyYWdyYXBoKSk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KG9mZnNldCwgPT0sIDIwKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4dENhcmV0TW92ZWRS
ZXN1bHQsID09LCAifHBhcmFncmFwaHwyMHwiKTsKLQotICAgIHJlc3VsdCA9IGF0a190ZXh0X3Nl
dF9jYXJldF9vZmZzZXQoQVRLX1RFWFQocGFyYWdyYXBoKSwgMzApOwotICAgIGdfYXNzZXJ0X2Nt
cGludChyZXN1bHQsID09LCBUUlVFKTsKLSAgICBvZmZzZXQgPSBhdGtfdGV4dF9nZXRfY2FyZXRf
b2Zmc2V0KEFUS19URVhUKHBhcmFncmFwaCkpOwotICAgIGdfYXNzZXJ0X2NtcGludChvZmZzZXQs
ID09LCAzMCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHRDYXJldE1vdmVkUmVzdWx0LCA9PSwg
InxwYXJhZ3JhcGh8MzB8Iik7Ci0KLSAgICBBdGtPYmplY3QqIGxpbmsgPSBhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKHBhcmFncmFwaCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RF
WFQobGluaykpOwotCi0gICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNldChBVEtf
VEVYVChsaW5rKSwgNSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHJlc3VsdCwgPT0sIFRSVUUpOwot
ICAgIG9mZnNldCA9IGF0a190ZXh0X2dldF9jYXJldF9vZmZzZXQoQVRLX1RFWFQobGluaykpOwot
ICAgIGdfYXNzZXJ0X2NtcGludChvZmZzZXQsID09LCA1KTsKLSAgICAvKiBQb3NpdGlvbnMgaW5z
aWRlIGxpbmtzIGFyZSByZXBvcnRlZCByZWxhdGl2ZSB0byB0aGUgcGFyYWdyYXBoLiAqLwotICAg
IGdfYXNzZXJ0X2NtcHN0cih0ZXh0Q2FyZXRNb3ZlZFJlc3VsdCwgPT0sICJ8cGFyYWdyYXBofDE3
fCIpOwotCi0gICAgQXRrT2JqZWN0KiBsaXN0ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9j
aGlsZChvYmplY3QsIDIpOwotICAgIGdfYXNzZXJ0KEFUS19PQkpFQ1QobGlzdCkpOwotICAgIGdf
YXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUobGlzdCkgPT0gQVRLX1JPTEVfTElTVCk7Ci0gICAg
Z19hc3NlcnRfY21waW50KGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihsaXN0
KSwgPT0sIDMpOwotCi0gICAgQXRrT2JqZWN0KiBsaXN0SXRlbSA9IGF0a19vYmplY3RfcmVmX2Fj
Y2Vzc2libGVfY2hpbGQobGlzdCwgMCk7Ci0gICAgbGlzdEl0ZW0gPSBhdGtfb2JqZWN0X3JlZl9h
Y2Nlc3NpYmxlX2NoaWxkKGxpc3QsIDIpOwotICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKGxpc3RJ
dGVtKSk7Ci0KLSAgICAvKiBJdCdzIG5vdCBwb3NzaWJsZSB0byBwbGFjZSB0aGUgY2FyZXQgaW5z
aWRlIGFuIGl0ZW0ncyBtYXJrZXIuICovCi0gICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0
X29mZnNldChBVEtfVEVYVChsaXN0SXRlbSksIDEpOwotICAgIGdfYXNzZXJ0X2NtcGludChyZXN1
bHQsID09LCBGQUxTRSk7Ci0KLSAgICAvKiBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gcGxhY2Ug
dGhlIGNhcmV0IGluc2lkZSBhbiBpdGVtJ3MgdGV4dC4gKi8KLSAgICByZXN1bHQgPSBhdGtfdGV4
dF9zZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKGxpc3RJdGVtKSwgNSk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KHJlc3VsdCwgPT0sIFRSVUUpOwotICAgIG9mZnNldCA9IGF0a190ZXh0X2dldF9jYXJl
dF9vZmZzZXQoQVRLX1RFWFQobGlzdEl0ZW0pKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQob2Zmc2V0
LCA9PSwgNSk7Ci0KLSAgICBBdGtPYmplY3QqIHBhbmVsID0gYXRrX29iamVjdF9yZWZfYWNjZXNz
aWJsZV9jaGlsZChvYmplY3QsIDMpOwotICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QocGFuZWwp
KTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKHBhbmVsKSA9PSBBVEtfUk9MRV9Q
QU5FTCk7Ci0KLSAgICBBdGtPYmplY3QqIGNvbWJvQm94ID0gYXRrX29iamVjdF9yZWZfYWNjZXNz
aWJsZV9jaGlsZChwYW5lbCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChjb21ib0Jv
eCkpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoY29tYm9Cb3gpID09IEFUS19S
T0xFX0NPTUJPX0JPWCk7Ci0KLSAgICBBdGtPYmplY3QqIG1lbnVQb3B1cCA9IGF0a19vYmplY3Rf
cmVmX2FjY2Vzc2libGVfY2hpbGQoY29tYm9Cb3gsIDApOwotICAgIGdfYXNzZXJ0KEFUS19JU19P
QkpFQ1QobWVudVBvcHVwKSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShtZW51
UG9wdXApID09IEFUS19ST0xFX01FTlUpOwotCi0gICAgQXRrT2JqZWN0KiBjb21ib0JveE9wdGlv
biA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQobWVudVBvcHVwLCAwKTsKLSAgICBn
X2Fzc2VydChBVEtfSVNfT0JKRUNUKGNvbWJvQm94T3B0aW9uKSk7Ci0gICAgZ19hc3NlcnQoYXRr
X29iamVjdF9nZXRfcm9sZShjb21ib0JveE9wdGlvbikgPT0gQVRLX1JPTEVfTUVOVV9JVEVNKTsK
LQotICAgIC8qIEl0J3Mgbm90IHBvc3NpYmxlIHRvIHBsYWNlIHRoZSBjYXJldCBpbnNpZGUgYW4g
b3B0aW9uIGZvciBhIGNvbWJvYm94LiAqLwotICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJl
dF9vZmZzZXQoQVRLX1RFWFQoY29tYm9Cb3hPcHRpb24pLCAxKTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQocmVzdWx0LCA9PSwgRkFMU0UpOwotCi0gICAgQXRrT2JqZWN0KiB0ZXh0RW50cnkgPSBhdGtf
b2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKHBhbmVsLCAxKTsKLSAgICBnX2Fzc2VydChBVEtf
SVNfT0JKRUNUKHRleHRFbnRyeSkpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUo
dGV4dEVudHJ5KSA9PSBBVEtfUk9MRV9FTlRSWSk7Ci0KLSAgICByZXN1bHQgPSBhdGtfdGV4dF9z
ZXRfY2FyZXRfb2Zmc2V0KEFUS19URVhUKHRleHRFbnRyeSksIDUpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChyZXN1bHQsID09LCBUUlVFKTsKLSAgICBvZmZzZXQgPSBhdGtfdGV4dF9nZXRfY2FyZXRf
b2Zmc2V0KEFUS19URVhUKHRleHRFbnRyeSkpOwotICAgIGdfYXNzZXJ0X2NtcGludChvZmZzZXQs
ID09LCA1KTsKLQotICAgIEF0a09iamVjdCogdGFibGUgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3Np
YmxlX2NoaWxkKG9iamVjdCwgNCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVCh0YWJsZSkp
OwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUodGFibGUpID09IEFUS19ST0xFX1RB
QkxFKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2No
aWxkcmVuKHRhYmxlKSwgPT0sIDQpOwotCi0gICAgQXRrT2JqZWN0KiB0YWJsZUNlbGwgPSBhdGtf
b2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKHRhYmxlLCAwKTsKLSAgICBnX2Fzc2VydChhdGtf
b2JqZWN0X2dldF9yb2xlKHRhYmxlQ2VsbCkgPT0gQVRLX1JPTEVfVEFCTEVfQ0VMTCk7Ci0gICAg
cmVzdWx0ID0gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNldChBVEtfVEVYVCh0YWJsZUNlbGwpLCAy
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQocmVzdWx0LCA9PSwgVFJVRSk7Ci0gICAgb2Zmc2V0ID0g
YXRrX3RleHRfZ2V0X2NhcmV0X29mZnNldChBVEtfVEVYVCh0YWJsZUNlbGwpKTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQob2Zmc2V0LCA9PSwgMik7Ci0KLSAgICBnX2ZyZWUodGV4dENhcmV0TW92ZWRS
ZXN1bHQpOwotCi0gICAgZ19vYmplY3RfdW5yZWYocGFyYWdyYXBoKTsKLSAgICBnX29iamVjdF91
bnJlZihsaW5rKTsKLSAgICBnX29iamVjdF91bnJlZihsaXN0KTsKLSAgICBnX29iamVjdF91bnJl
ZihsaXN0SXRlbSk7Ci0gICAgZ19vYmplY3RfdW5yZWYocGFuZWwpOwotICAgIGdfb2JqZWN0X3Vu
cmVmKGNvbWJvQm94KTsKLSAgICBnX29iamVjdF91bnJlZihtZW51UG9wdXApOwotICAgIGdfb2Jq
ZWN0X3VucmVmKGNvbWJvQm94T3B0aW9uKTsKLSAgICBnX29iamVjdF91bnJlZih0ZXh0RW50cnkp
OwotICAgIGdfb2JqZWN0X3VucmVmKHRhYmxlKTsKLSAgICBnX29iamVjdF91bnJlZih0YWJsZUNl
bGwpOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0
V2Via2l0QXRrQ2FyZXRPZmZzZXRzQW5kRXh0cmFub3VzV2hpdGVTcGFjZXMoKQotewotICAgIFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25l
dygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBHdGtBbGxvY2F0aW9u
IGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2Fs
bG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICB3ZWJraXRfd2Vi
X3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgY29udGVudHNXaXRoRXh0cmFuZW91c1doaXRlU3Bh
Y2VzLCAwLCAwLCAwKTsKLQotICAgIC8qIEVuYWJsZSBjYXJldCBicm93c2luZy4gKi8KLSAgICBX
ZWJLaXRXZWJTZXR0aW5ncyogc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdz
KHdlYlZpZXcpOwotICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChzZXR0aW5ncyksICJlbmFibGUt
Y2FyZXQtYnJvd3NpbmciLCBUUlVFLCBOVUxMKTsKLQotICAgIC8qIEdldCB0byB0aGUgaW5uZXIg
QXRrVGV4dCBvYmplY3QuICovCi0gICAgQXRrT2JqZWN0KiBvYmplY3QgPSBnZXRXZWJBcmVhT2Jq
ZWN0KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0KG9iamVjdCk7Ci0gICAgb2JqZWN0ID0gYXRrX29i
amVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDApOwotICAgIGdfYXNzZXJ0KG9iamVj
dCk7Ci0KLSAgICBBdGtUZXh0KiB0ZXh0T2JqZWN0ID0gQVRLX1RFWFQob2JqZWN0KTsKLSAgICBn
X2Fzc2VydChBVEtfSVNfVEVYVCh0ZXh0T2JqZWN0KSk7Ci0KLSAgICBnaW50IGNoYXJhY3RlckNv
dW50ID0gYXRrX3RleHRfZ2V0X2NoYXJhY3Rlcl9jb3VudCh0ZXh0T2JqZWN0KTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQoY2hhcmFjdGVyQ291bnQsID09LCAyNSk7Ci0KLSAgICBnYm9vbGVhbiByZXN1
bHQgPSBhdGtfdGV4dF9zZXRfY2FyZXRfb2Zmc2V0KHRleHRPYmplY3QsIGNoYXJhY3RlckNvdW50
IC0gMSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHJlc3VsdCwgPT0sIFRSVUUpOwotCi0gICAgZ2lu
dCBjYXJldE9mZnNldCA9IGF0a190ZXh0X2dldF9jYXJldF9vZmZzZXQodGV4dE9iamVjdCk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KGNhcmV0T2Zmc2V0LCA9PSwgY2hhcmFjdGVyQ291bnQgLSAxKTsK
LQotICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9jYXJldF9vZmZzZXQodGV4dE9iamVjdCwgY2hh
cmFjdGVyQ291bnQpOwotICAgIGdfYXNzZXJ0X2NtcGludChyZXN1bHQsID09LCBUUlVFKTsKLQot
ICAgIGNhcmV0T2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NhcmV0X29mZnNldCh0ZXh0T2JqZWN0KTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoY2FyZXRPZmZzZXQsID09LCBjaGFyYWN0ZXJDb3VudCk7Ci0K
LSAgICBnX29iamVjdF91bnJlZihvYmplY3QpOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcp
OwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRrQ29tYm9Cb3goKQotewotICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygp
KTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBHdGtBbGxvY2F0aW9uIGFs
bG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9j
YXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICB3ZWJraXRfd2ViX3Zp
ZXdfbG9hZF9zdHJpbmcod2ViVmlldywgY29tYm9Cb3hTZWxlY3RvciwgMCwgMCwgMCk7Ci0KLSAg
ICBBdGtPYmplY3QqIG9iamVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7Ci0gICAgZ19h
c3NlcnQob2JqZWN0KTsKLQotICAgIEF0a09iamVjdCogZm9ybU9iamVjdCA9IGF0a19vYmplY3Rf
cmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKTsKLSAgICBnX2Fzc2VydChmb3JtT2JqZWN0
KTsKLQotICAgIEF0a09iamVjdCogY29tYm9Cb3ggPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxl
X2NoaWxkKGZvcm1PYmplY3QsIDApOwotICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QoY29tYm9C
b3gpKTsKLQotICAgIEF0a09iamVjdCogbWVudVBvcHVwID0gYXRrX29iamVjdF9yZWZfYWNjZXNz
aWJsZV9jaGlsZChjb21ib0JveCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChtZW51
UG9wdXApKTsKLQotICAgIEF0a09iamVjdCogaXRlbTEgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3Np
YmxlX2NoaWxkKG1lbnVQb3B1cCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChpdGVt
MSkpOwotCi0gICAgQXRrT2JqZWN0KiBpdGVtMiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVf
Y2hpbGQobWVudVBvcHVwLCAxKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKGl0ZW0yKSk7
Ci0KLSAgICAvKiBDaGVjayByb2xlcy4gKi8KLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9y
b2xlKGNvbWJvQm94KSA9PSBBVEtfUk9MRV9DT01CT19CT1gpOwotICAgIGdfYXNzZXJ0KGF0a19v
YmplY3RfZ2V0X3JvbGUobWVudVBvcHVwKSA9PSBBVEtfUk9MRV9NRU5VKTsKLSAgICBnX2Fzc2Vy
dChhdGtfb2JqZWN0X2dldF9yb2xlKGl0ZW0xKSA9PSBBVEtfUk9MRV9NRU5VX0lURU0pOwotICAg
IGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoaXRlbTIpID09IEFUS19ST0xFX01FTlVfSVRF
TSk7Ci0KLSAgICAvKiBDaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEF0a1NlbGVjdGlv
biBpbnRlcmZhY2UuICovCi0gICAgZ19hc3NlcnQoQVRLX0lTX1NFTEVDVElPTihjb21ib0JveCkp
OwotICAgIEF0a1NlbGVjdGlvbiogYXRrU2VsZWN0aW9uID0gQVRLX1NFTEVDVElPTihjb21ib0Jv
eCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19zZWxlY3Rpb25fZ2V0X3NlbGVjdGlvbl9jb3Vu
dChhdGtTZWxlY3Rpb24pLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnQoYXRrX3NlbGVjdGlvbl9pc19j
aGlsZF9zZWxlY3RlZChhdGtTZWxlY3Rpb24sIDApKTsKLSAgICBnX2Fzc2VydCghYXRrX3NlbGVj
dGlvbl9pc19jaGlsZF9zZWxlY3RlZChhdGtTZWxlY3Rpb24sIDEpKTsKLSAgICBBdGtPYmplY3Qq
IHNlbGVjdGVkSXRlbSA9IGF0a19zZWxlY3Rpb25fcmVmX3NlbGVjdGlvbihhdGtTZWxlY3Rpb24s
IDApOwotICAgIGdfYXNzZXJ0KHNlbGVjdGVkSXRlbSA9PSBpdGVtMSk7Ci0gICAgZ19vYmplY3Rf
dW5yZWYoc2VsZWN0ZWRJdGVtKTsKLQotICAgIC8qIENoZWNrIHRoYXQgdGhlIG1lbnUgcG9wdXAg
aGFzIDAgbGlua3MgYW5kIGRvZXNuJ3QgY3Jhc2ggZnJvbSBjaGVja2luZy4gKi8KLSAgICBnaW50
IG5MaW5rcyA9IGF0a19oeXBlcnRleHRfZ2V0X25fbGlua3MoQVRLX0hZUEVSVEVYVChtZW51UG9w
dXApKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQobkxpbmtzLCA9PSwgMCk7Ci0KLSAgICAvKiBDaGVj
ayB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBBdGtBY3Rpb24gaW50ZXJmYWNlLiAqLwotICAg
IGdfYXNzZXJ0KEFUS19JU19BQ1RJT04oY29tYm9Cb3gpKTsKLSAgICBBdGtBY3Rpb24qIGF0a0Fj
dGlvbiA9IEFUS19BQ1RJT04oY29tYm9Cb3gpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfYWN0
aW9uX2dldF9uX2FjdGlvbnMoYXRrQWN0aW9uKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0KGF0a19h
Y3Rpb25fZG9fYWN0aW9uKGF0a0FjdGlvbiwgMCkpOwotCi0gICAgZ19hc3NlcnQoQVRLX0lTX0FD
VElPTihtZW51UG9wdXApKTsKLSAgICBhdGtBY3Rpb24gPSBBVEtfQUNUSU9OKG1lbnVQb3B1cCk7
Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19hY3Rpb25fZ2V0X25fYWN0aW9ucyhhdGtBY3Rpb24p
LCA9PSwgMSk7Ci0gICAgZ19hc3NlcnQoYXRrX2FjdGlvbl9kb19hY3Rpb24oYXRrQWN0aW9uLCAw
KSk7Ci0KLSAgICBnX2Fzc2VydChBVEtfSVNfQUNUSU9OKGl0ZW0xKSk7Ci0gICAgYXRrQWN0aW9u
ID0gQVRLX0FDVElPTihpdGVtMSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19hY3Rpb25fZ2V0
X25fYWN0aW9ucyhhdGtBY3Rpb24pLCA9PSwgMSk7Ci0gICAgZ19hc3NlcnQoYXRrX2FjdGlvbl9k
b19hY3Rpb24oYXRrQWN0aW9uLCAwKSk7Ci0KLSAgICBnX2Fzc2VydChBVEtfSVNfQUNUSU9OKGl0
ZW0yKSk7Ci0gICAgYXRrQWN0aW9uID0gQVRLX0FDVElPTihpdGVtMik7Ci0gICAgZ19hc3NlcnRf
Y21waW50KGF0a19hY3Rpb25fZ2V0X25fYWN0aW9ucyhhdGtBY3Rpb24pLCA9PSwgMSk7Ci0gICAg
Z19hc3NlcnQoYXRrX2FjdGlvbl9kb19hY3Rpb24oYXRrQWN0aW9uLCAwKSk7Ci0KLSAgICAvKiBB
ZnRlciBzZWxlY3RpbmcgdGhlIHNlY29uZCBpdGVtLCBzZWxlY3Rpb24gc2hvdWxkIGhhdmUgY2hh
bmdlZC4gKi8KLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3NlbGVjdGlvbl9nZXRfc2VsZWN0aW9u
X2NvdW50KGF0a1NlbGVjdGlvbiksID09LCAxKTsKLSAgICBnX2Fzc2VydCghYXRrX3NlbGVjdGlv
bl9pc19jaGlsZF9zZWxlY3RlZChhdGtTZWxlY3Rpb24sIDApKTsKLSAgICBnX2Fzc2VydChhdGtf
c2VsZWN0aW9uX2lzX2NoaWxkX3NlbGVjdGVkKGF0a1NlbGVjdGlvbiwgMSkpOwotICAgIHNlbGVj
dGVkSXRlbSA9IGF0a19zZWxlY3Rpb25fcmVmX3NlbGVjdGlvbihhdGtTZWxlY3Rpb24sIDApOwot
ICAgIGdfYXNzZXJ0KHNlbGVjdGVkSXRlbSA9PSBpdGVtMik7Ci0gICAgZ19vYmplY3RfdW5yZWYo
c2VsZWN0ZWRJdGVtKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGZvcm1PYmplY3QpOwotICAgIGdf
b2JqZWN0X3VucmVmKGNvbWJvQm94KTsKLSAgICBnX29iamVjdF91bnJlZihtZW51UG9wdXApOwot
ICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0xKTsKLSAgICBnX29iamVjdF91bnJlZihpdGVtMik7Ci0g
ICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Ci19Ci0KLXN0YXRpYyBnY2hhciogbG9hZGluZ0V2
ZW50c1Jlc3VsdCA9IDA7Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZUxvYWRpbmdFdmVudHNSZXN1bHQo
Y29uc3QgZ2NoYXIqIHNpZ25hbE5hbWUpCi17Ci0gICAgZ19hc3NlcnQoc2lnbmFsTmFtZSk7Ci0K
LSAgICBnY2hhciogcHJldmlvdXNSZXN1bHQgPSBsb2FkaW5nRXZlbnRzUmVzdWx0OwotICAgIGxv
YWRpbmdFdmVudHNSZXN1bHQgPSBnX3N0cmR1cF9wcmludGYoIiVzfCVzIiwgcHJldmlvdXNSZXN1
bHQsIHNpZ25hbE5hbWUpOwotICAgIGdfZnJlZShwcmV2aW91c1Jlc3VsdCk7Ci19Ci0KLXN0YXRp
YyBnYm9vbGVhbiBkb2N1bWVudExvYWRpbmdFdmVudENhbGxiYWNrKEdTaWduYWxJbnZvY2F0aW9u
SGludCAqc2lnbmFsSGludCwgZ3VpbnQgbnVtUGFyYW1WYWx1ZXMsIGNvbnN0IEdWYWx1ZSAqcGFy
YW1WYWx1ZXMsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgLy8gQXQgbGVhc3Qgd2Ugc2hvdWxkIHJl
Y2VpdmUgdGhlIGluc3RhbmNlIGVtaXR0aW5nIHRoZSBzaWduYWwuCi0gICAgaWYgKG51bVBhcmFt
VmFsdWVzIDwgMSkKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0KLSAgICBHU2lnbmFsUXVlcnkgc2ln
bmFsX3F1ZXJ5OwotICAgIGdfc2lnbmFsX3F1ZXJ5KHNpZ25hbEhpbnQtPnNpZ25hbF9pZCwgJnNp
Z25hbF9xdWVyeSk7Ci0KLSAgICB1cGRhdGVMb2FkaW5nRXZlbnRzUmVzdWx0KHNpZ25hbF9xdWVy
eS5zaWduYWxfbmFtZSk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RX
ZWJraXRBdGtEb2N1bWVudExvYWRpbmdFdmVudHMoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29i
amVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7
IDAsIDAsIDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURH
RVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKLQotICAgIC8qIENvbm5lY3QgZ2xvYmFsbHkgdG8g
c2VlIHRob3NlIGV2ZW50cyBkdXJpbmcgYSBmdXR1cmUgbG9hZC4gKi8KLSAgICBndWludCBsb2Fk
Q29tcGxldGVMaXN0ZW5lcklkID0gYXRrX2FkZF9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoZG9jdW1l
bnRMb2FkaW5nRXZlbnRDYWxsYmFjaywgIkFUSzpBdGtEb2N1bWVudDpsb2FkLWNvbXBsZXRlIik7
Ci0KLSAgICAvKiBEbyB0aGUgbG9hZCwgc28gd2UgY2FuIHNlZSB0aG9zZSBldmVudHMgaGFwcGVu
aW5nLiAqLwotICAgIGxvYWRpbmdFdmVudHNSZXN1bHQgPSBnX3N0cmR1cCgiIik7Ci0gICAgd2Vi
a2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGNvbnRlbnRzLCAwLCAwLCAwKTsKLQot
ICAgIC8qIFRyaWdnZXIgdGhlIGNyZWF0aW9uIG9mIHRoZSBmdWxsIGFjY2Vzc2liaWxpdHkgaGll
cmFyY2h5IGJ5Ci0gICAgICAgYXNraW5nIGZvciB0aGUgd2ViQXJlYSBvYmplY3QsIHNvIHdlIGNh
biBsaXN0ZW4gdG8gZXZlbnRzLiAqLwotICAgIGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7Ci0K
LSAgICBhdGtfcmVtb3ZlX2dsb2JhbF9ldmVudF9saXN0ZW5lcihsb2FkQ29tcGxldGVMaXN0ZW5l
cklkKTsKLQotICAgIGdfYXNzZXJ0X2NtcHN0cihsb2FkaW5nRXZlbnRzUmVzdWx0LCA9PSwgInxs
b2FkLWNvbXBsZXRlIik7Ci0KLSAgICBnX2ZyZWUobG9hZGluZ0V2ZW50c1Jlc3VsdCk7Ci0gICAg
Z19vYmplY3RfdW5yZWYod2ViVmlldyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtF
bWJlZGRlZE9iamVjdHMoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRf
V0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3
ZWJWaWV3KTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAw
IH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZh
bGxvY2F0aW9uKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgZW1i
ZWRkZWRPYmplY3RzLCAwLCAwLCAwKTsKLQotICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2Vi
QXJlYU9iamVjdCh3ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChvYmplY3QpOwotCi0gICAgQXRrVGV4
dCogcGFyYWdyYXBoMSA9IEFUS19URVhUKGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQo
b2JqZWN0LCAwKSk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQocGFyYWdyYXBoMSkpOwotICAg
IGdfYXNzZXJ0KEFUS19JU19IWVBFUlRFWFQocGFyYWdyYXBoMSkpOwotCi0gICAgZ2ludCBuTGlu
a3MgPSBhdGtfaHlwZXJ0ZXh0X2dldF9uX2xpbmtzKEFUS19IWVBFUlRFWFQocGFyYWdyYXBoMSkp
OwotICAgIGdfYXNzZXJ0X2NtcGludChuTGlua3MsID09LCAyKTsKLQotICAgIEF0a0h5cGVybGlu
ayogaExpbmsgPSBhdGtfaHlwZXJ0ZXh0X2dldF9saW5rKEFUS19IWVBFUlRFWFQocGFyYWdyYXBo
MSksIDApOwotICAgIGdfYXNzZXJ0KEFUS19IWVBFUkxJTksoaExpbmspKTsKLSAgICBBdGtPYmpl
Y3QqIGhMaW5rT2JqZWN0ID0gYXRrX2h5cGVybGlua19nZXRfb2JqZWN0KGhMaW5rLCAwKTsKLSAg
ICBnX2Fzc2VydChBVEtfT0JKRUNUKGhMaW5rT2JqZWN0KSk7Ci0gICAgZ19hc3NlcnQoYXRrX29i
amVjdF9nZXRfcm9sZShoTGlua09iamVjdCkgPT0gQVRLX1JPTEVfQ0hFQ0tfQk9YKTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfc3RhcnRfaW5kZXgoaExpbmspLCA9PSwg
OCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X2VuZF9pbmRleChoTGlu
ayksID09LCA5KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRfbl9hbmNo
b3JzKGhMaW5rKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihhdGtfaHlwZXJsaW5rX2dl
dF91cmkoaExpbmssIDApLCA9PSwgMCk7Ci0KLSAgICBBdGtUZXh0KiBwYXJhZ3JhcGgyID0gQVRL
X1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDEpKTsKLSAgICBn
X2Fzc2VydChBVEtfSVNfSFlQRVJURVhUKHBhcmFncmFwaDIpKTsKLQotICAgIG5MaW5rcyA9IGF0
a19oeXBlcnRleHRfZ2V0X25fbGlua3MoQVRLX0hZUEVSVEVYVChwYXJhZ3JhcGgyKSk7Ci0gICAg
Z19hc3NlcnRfY21waW50KG5MaW5rcywgPT0sIDEpOwotCi0gICAgaExpbmsgPSBhdGtfaHlwZXJ0
ZXh0X2dldF9saW5rKEFUS19IWVBFUlRFWFQocGFyYWdyYXBoMiksIDApOwotICAgIGdfYXNzZXJ0
KEFUS19IWVBFUkxJTksoaExpbmspKTsKLSAgICBoTGlua09iamVjdCA9IGF0a19oeXBlcmxpbmtf
Z2V0X29iamVjdChoTGluaywgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX09CSkVDVChoTGlua09iamVj
dCkpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoaExpbmtPYmplY3QpID09IEFU
S19ST0xFX0NPTUJPX0JPWCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0
X3N0YXJ0X2luZGV4KGhMaW5rKSwgPT0sIDgpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlw
ZXJsaW5rX2dldF9lbmRfaW5kZXgoaExpbmspLCA9PSwgOSk7Ci0gICAgZ19hc3NlcnRfY21waW50
KGF0a19oeXBlcmxpbmtfZ2V0X25fYW5jaG9ycyhoTGluayksID09LCAxKTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIoYXRrX2h5cGVybGlua19nZXRfdXJpKGhMaW5rLCAwKSwgPT0sIDApOwotCi0gICAg
QXRrVGV4dCogcGFyYWdyYXBoMyA9IEFUS19URVhUKGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVf
Y2hpbGQob2JqZWN0LCAyKSk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX0hZUEVSVEVYVChwYXJhZ3Jh
cGgzKSk7Ci0KLSAgICBuTGlua3MgPSBhdGtfaHlwZXJ0ZXh0X2dldF9uX2xpbmtzKEFUS19IWVBF
UlRFWFQocGFyYWdyYXBoMykpOwotICAgIGdfYXNzZXJ0X2NtcGludChuTGlua3MsID09LCAxKTsK
LQotICAgIGhMaW5rID0gYXRrX2h5cGVydGV4dF9nZXRfbGluayhBVEtfSFlQRVJURVhUKHBhcmFn
cmFwaDMpLCAwKTsKLSAgICBnX2Fzc2VydChBVEtfSFlQRVJMSU5LKGhMaW5rKSk7Ci0gICAgaExp
bmtPYmplY3QgPSBhdGtfaHlwZXJsaW5rX2dldF9vYmplY3QoaExpbmssIDApOwotICAgIGdfYXNz
ZXJ0KEFUS19PQkpFQ1QoaExpbmtPYmplY3QpKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dl
dF9yb2xlKGhMaW5rT2JqZWN0KSA9PSBBVEtfUk9MRV9QVVNIX0JVVFRPTik7Ci0gICAgZ19hc3Nl
cnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X3N0YXJ0X2luZGV4KGhMaW5rKSwgPT0sIDApOwot
ICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9lbmRfaW5kZXgoaExpbmspLCA9
PSwgMSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X25fYW5jaG9ycyho
TGluayksID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoYXRrX2h5cGVybGlua19nZXRfdXJp
KGhMaW5rLCAwKSwgPT0sIDApOwotCi0gICAgZ19vYmplY3RfdW5yZWYocGFyYWdyYXBoMSk7Ci0g
ICAgZ19vYmplY3RfdW5yZWYocGFyYWdyYXBoMik7Ci0gICAgZ19vYmplY3RfdW5yZWYocGFyYWdy
YXBoMyk7Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3RXZWJraXRBdGtHZXRIZWFkZXJzSW5UYWJsZSgpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2Vi
VmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2Jq
ZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsg
MCwgMCwgODAwLCA2MDAgfTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdF
VCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmlu
Zyh3ZWJWaWV3LCBjb250ZW50c0luVGFibGVXaXRoSGVhZGVycywgMCwgMCwgMCk7Ci0KLSAgICBB
dGtPYmplY3QqIGF4V2ViVmlldyA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7Ci0gICAgZ19h
c3NlcnQoYXhXZWJWaWV3KTsKLQotICAgIC8qIENoZWNrIHRhYmxlIHdpdGggYm90aCBjb2x1bW4g
YW5kIHJvdyBoZWFkZXJzLiAqLwotICAgIEF0a09iamVjdCogdGFibGUgPSBhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKGF4V2ViVmlldywgMCk7Ci0gICAgZ19hc3NlcnQodGFibGUpOwot
ICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUodGFibGUpID09IEFUS19ST0xFX1RBQkxF
KTsKLQotICAgIEF0a09iamVjdCogY29sSGVhZGVyID0gYXRrX3RhYmxlX2dldF9jb2x1bW5faGVh
ZGVyKEFUS19UQUJMRSh0YWJsZSksIDApOwotICAgIGdfYXNzZXJ0KGNvbEhlYWRlcik7Ci0gICAg
Z19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShjb2xIZWFkZXIpID09IEFUS19ST0xFX1RBQkxF
X0NFTEwpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X2luZGV4X2luX3BhcmVudChjb2xI
ZWFkZXIpID09IDApOwotCi0gICAgY29sSGVhZGVyID0gYXRrX3RhYmxlX2dldF9jb2x1bW5faGVh
ZGVyKEFUS19UQUJMRSh0YWJsZSksIDEpOwotICAgIGdfYXNzZXJ0KGNvbEhlYWRlcik7Ci0gICAg
Z19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShjb2xIZWFkZXIpID09IEFUS19ST0xFX1RBQkxF
X0NFTEwpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X2luZGV4X2luX3BhcmVudChjb2xI
ZWFkZXIpID09IDEpOwotCi0gICAgY29sSGVhZGVyID0gYXRrX3RhYmxlX2dldF9jb2x1bW5faGVh
ZGVyKEFUS19UQUJMRSh0YWJsZSksIDIpOwotICAgIGdfYXNzZXJ0KGNvbEhlYWRlcik7Ci0gICAg
Z19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShjb2xIZWFkZXIpID09IEFUS19ST0xFX1RBQkxF
X0NFTEwpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X2luZGV4X2luX3BhcmVudChjb2xI
ZWFkZXIpID09IDIpOwotCi0gICAgY29sSGVhZGVyID0gYXRrX3RhYmxlX2dldF9jb2x1bW5faGVh
ZGVyKEFUS19UQUJMRSh0YWJsZSksIDMpOwotICAgIGdfYXNzZXJ0KGNvbEhlYWRlcik7Ci0gICAg
Z19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShjb2xIZWFkZXIpID09IEFUS19ST0xFX1RBQkxF
X0NFTEwpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X2luZGV4X2luX3BhcmVudChjb2xI
ZWFkZXIpID09IDIpOwotCi0gICAgQXRrT2JqZWN0KiByb3dIZWFkZXIgPSBhdGtfdGFibGVfZ2V0
X3Jvd19oZWFkZXIoQVRLX1RBQkxFKHRhYmxlKSwgMCk7Ci0gICAgZ19hc3NlcnQocm93SGVhZGVy
KTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKHJvd0hlYWRlcikgPT0gQVRLX1JP
TEVfVEFCTEVfQ0VMTCk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfaW5kZXhfaW5fcGFy
ZW50KHJvd0hlYWRlcikgPT0gMCk7Ci0KLSAgICByb3dIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X3Jv
d19oZWFkZXIoQVRLX1RBQkxFKHRhYmxlKSwgMSk7Ci0gICAgZ19hc3NlcnQocm93SGVhZGVyKTsK
LSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKHJvd0hlYWRlcikgPT0gQVRLX1JPTEVf
VEFCTEVfQ0VMTCk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfaW5kZXhfaW5fcGFyZW50
KHJvd0hlYWRlcikgPT0gMyk7Ci0KLSAgICByb3dIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X3Jvd19o
ZWFkZXIoQVRLX1RBQkxFKHRhYmxlKSwgMik7Ci0gICAgZ19hc3NlcnQocm93SGVhZGVyKTsKLSAg
ICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKHJvd0hlYWRlcikgPT0gQVRLX1JPTEVfVEFC
TEVfQ0VMTCk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfaW5kZXhfaW5fcGFyZW50KHJv
d0hlYWRlcikgPT0gNyk7Ci0KLSAgICByb3dIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X3Jvd19oZWFk
ZXIoQVRLX1RBQkxFKHRhYmxlKSwgMyk7Ci0gICAgZ19hc3NlcnQocm93SGVhZGVyKTsKLSAgICBn
X2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKHJvd0hlYWRlcikgPT0gQVRLX1JPTEVfVEFCTEVf
Q0VMTCk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfaW5kZXhfaW5fcGFyZW50KHJvd0hl
YWRlcikgPT0gNyk7Ci0KLSAgICBnX29iamVjdF91bnJlZih0YWJsZSk7Ci0KLSAgICAvKiBDaGVj
ayB0YWJsZSB3aXRoIG5vIGhlYWRlcnMgYXQgYWxsLiAqLwotICAgIHRhYmxlID0gYXRrX29iamVj
dF9yZWZfYWNjZXNzaWJsZV9jaGlsZChheFdlYlZpZXcsIDEpOwotICAgIGdfYXNzZXJ0KHRhYmxl
KTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKHRhYmxlKSA9PSBBVEtfUk9MRV9U
QUJMRSk7Ci0KLSAgICBjb2xIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X2NvbHVtbl9oZWFkZXIoQVRL
X1RBQkxFKHRhYmxlKSwgMCk7Ci0gICAgZ19hc3NlcnQoY29sSGVhZGVyID09IDApOwotCi0gICAg
Y29sSGVhZGVyID0gYXRrX3RhYmxlX2dldF9jb2x1bW5faGVhZGVyKEFUS19UQUJMRSh0YWJsZSks
IDEpOwotICAgIGdfYXNzZXJ0KGNvbEhlYWRlciA9PSAwKTsKLQotICAgIHJvd0hlYWRlciA9IGF0
a190YWJsZV9nZXRfcm93X2hlYWRlcihBVEtfVEFCTEUodGFibGUpLCAwKTsKLSAgICBnX2Fzc2Vy
dChyb3dIZWFkZXIgPT0gMCk7Ci0KLSAgICByb3dIZWFkZXIgPSBhdGtfdGFibGVfZ2V0X3Jvd19o
ZWFkZXIoQVRLX1RBQkxFKHRhYmxlKSwgMSk7Ci0gICAgZ19hc3NlcnQocm93SGVhZGVyID09IDAp
OwotCi0gICAgZ19vYmplY3RfdW5yZWYodGFibGUpOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZp
ZXcpOwotfQotCi1zdGF0aWMgZ2ludCBjb21wQXRrQXR0cmlidXRlKEF0a0F0dHJpYnV0ZSogYTEs
IEF0a0F0dHJpYnV0ZSogYTIpCi17Ci0gICAgZ2ludCBzdHJjbXBWYWwgPSBnX3N0cmNtcDAoYTEt
Pm5hbWUsIGEyLT5uYW1lKTsKLSAgICBpZiAoc3RyY21wVmFsKQotICAgICAgICByZXR1cm4gc3Ry
Y21wVmFsOwotICAgIHJldHVybiBnX3N0cmNtcDAoYTEtPnZhbHVlLCBhMi0+dmFsdWUpOwotfQot
Ci1zdGF0aWMgZ2ludCBjb21wQXRrQXR0cmlidXRlTmFtZShBdGtBdHRyaWJ1dGUqIGExLCBBdGtB
dHRyaWJ1dGUqIGEyKQotewotICAgIHJldHVybiBnX3N0cmNtcDAoYTEtPm5hbWUsIGEyLT5uYW1l
KTsKLX0KLQotc3RhdGljIGdib29sZWFuIGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZU5hbWVIYXNW
YWx1ZShBdGtBdHRyaWJ1dGVTZXQqIHNldCwgY29uc3QgZ2NoYXIqIGF0dHJpYnV0ZU5hbWUsIGNv
bnN0IGdjaGFyKiB2YWx1ZSkKLXsKLSAgICBBdGtBdHRyaWJ1dGUgYXQ7Ci0gICAgYXQubmFtZSA9
IChnY2hhciopYXR0cmlidXRlTmFtZTsKLSAgICBHU0xpc3QqIGVsZW1lbnQgPSBnX3NsaXN0X2Zp
bmRfY3VzdG9tKHNldCwgJmF0LCAoR0NvbXBhcmVGdW5jKWNvbXBBdGtBdHRyaWJ1dGVOYW1lKTsK
LSAgICByZXR1cm4gZWxlbWVudCAmJiAhZ19zdHJjbXAwKCgoQXRrQXR0cmlidXRlKikoZWxlbWVu
dC0+ZGF0YSkpLT52YWx1ZSwgdmFsdWUpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gYXRrQXR0cmli
dXRlU2V0Q29udGFpbnNBdHRyaWJ1dGVOYW1lKEF0a0F0dHJpYnV0ZVNldCogc2V0LCBjb25zdCBn
Y2hhciogYXR0cmlidXRlTmFtZSkKLXsKLSAgICBBdGtBdHRyaWJ1dGUgYXQ7Ci0gICAgYXQubmFt
ZSA9IChnY2hhciopYXR0cmlidXRlTmFtZTsKLSAgICByZXR1cm4gZ19zbGlzdF9maW5kX2N1c3Rv
bShzZXQsICZhdCwgKEdDb21wYXJlRnVuYyljb21wQXRrQXR0cmlidXRlTmFtZSkgPyB0cnVlIDog
ZmFsc2U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNW
YWx1ZShBdGtBdHRyaWJ1dGVTZXQqIHNldCwgQXRrVGV4dEF0dHJpYnV0ZSBhdHRyaWJ1dGUsIGNv
bnN0IGdjaGFyKiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gYXRrQXR0cmlidXRlU2V0QXR0cmlidXRl
TmFtZUhhc1ZhbHVlKHNldCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKGF0dHJpYnV0ZSks
IHZhbHVlKTsKLX0KLQotc3RhdGljIGdib29sZWFuIGF0a0F0dHJpYnV0ZVNldEFyZUVxdWFsKEF0
a0F0dHJpYnV0ZVNldCogc2V0MSwgQXRrQXR0cmlidXRlU2V0KiBzZXQyKQotewotICAgIGlmICgh
c2V0MSkKLSAgICAgICAgcmV0dXJuICFzZXQyOwotCi0gICAgc2V0MSA9IGdfc2xpc3Rfc29ydChz
ZXQxLCAoR0NvbXBhcmVGdW5jKWNvbXBBdGtBdHRyaWJ1dGUpOwotICAgIHNldDIgPSBnX3NsaXN0
X3NvcnQoc2V0MiwgKEdDb21wYXJlRnVuYyljb21wQXRrQXR0cmlidXRlKTsKLQotICAgIHdoaWxl
IChzZXQxKSB7Ci0gICAgICAgIGlmICghc2V0MiB8fCBjb21wQXRrQXR0cmlidXRlKHNldDEtPmRh
dGEsIHNldDItPmRhdGEpKQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgICAgIHNl
dDEgPSBzZXQxLT5uZXh0OwotICAgICAgICBzZXQyID0gc2V0Mi0+bmV4dDsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gKCFzZXQyKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a1RleHRBdHRy
aWJ1dGVzKCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVX
KHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7
Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OwotICAg
IGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlv
bik7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIHRleHRXaXRoQXR0
cmlidXRlcywgMCwgMCwgMCk7Ci0KLSAgICBBdGtPYmplY3QqIG9iamVjdCA9IGdldFdlYkFyZWFP
YmplY3Qod2ViVmlldyk7Ci0gICAgZ19hc3NlcnQob2JqZWN0KTsKLQotICAgIEF0a09iamVjdCog
Y2hpbGQgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7Ci0gICAg
Z19hc3NlcnQoY2hpbGQgJiYgQVRLX0lTX1RFWFQoY2hpbGQpKTsKLSAgICBBdGtUZXh0KiBjaGls
ZFRleHQgPSBBVEtfVEVYVChjaGlsZCk7Ci0KLSAgICBnaW50IHN0YXJ0T2Zmc2V0OwotICAgIGdp
bnQgZW5kT2Zmc2V0OwotICAgIEF0a0F0dHJpYnV0ZVNldCogc2V0MSA9IGF0a190ZXh0X2dldF9y
dW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDAsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMCk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KGVuZE9mZnNldCwgPT0sIDEyKTsKLSAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBcmVF
cXVhbChzZXQxLCAwKSk7Ci0KLSAgICBBdGtBdHRyaWJ1dGVTZXQqIHNldDIgPSBhdGtfdGV4dF9n
ZXRfcnVuX2F0dHJpYnV0ZXMoY2hpbGRUZXh0LCAxNSwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAxMik7Ci0gICAgZ19hc3Nl
cnRfY21waW50KGVuZE9mZnNldCwgPT0sIDE3KTsKLSAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVT
ZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQyLCBBVEtfVEVYVF9BVFRSX1NUWUxFLCAiaXRhbGljIikp
OwotCi0gICAgQXRrQXR0cmlidXRlU2V0KiBzZXQzID0gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1
dGVzKGNoaWxkVGV4dCwgMTcsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMTcpOwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRP
ZmZzZXQsID09LCA0MCk7Ci0gICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFz
VmFsdWUoc2V0MywgQVRLX1RFWFRfQVRUUl9XRUlHSFQsICI3MDAiKSk7Ci0KLSAgICBBdGtBdHRy
aWJ1dGVTZXQqIHNldDQgPSBhdGtfdGV4dF9nZXRfZGVmYXVsdF9hdHRyaWJ1dGVzKGNoaWxkVGV4
dCk7Ci0gICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUoc2V0NCwg
QVRLX1RFWFRfQVRUUl9TVFlMRSwgIm5vcm1hbCIpKTsKLSAgICBnX2Fzc2VydChhdGtBdHRyaWJ1
dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQ0LCBBVEtfVEVYVF9BVFRSX0pVU1RJRklDQVRJT04s
ICJyaWdodCIpKTsKLSAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1
ZShzZXQ0LCBBVEtfVEVYVF9BVFRSX1NJWkUsICIxNCIpKTsKLSAgICBhdGtfYXR0cmlidXRlX3Nl
dF9mcmVlKHNldDEpOwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0Mik7Ci0gICAgYXRr
X2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQzKTsKLSAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKHNl
dDQpOwotCi0gICAgZ19vYmplY3RfdW5yZWYoY2hpbGQpOwotICAgIGNoaWxkID0gYXRrX29iamVj
dF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDEpOwotICAgIGdfYXNzZXJ0KGNoaWxkICYm
IEFUS19JU19URVhUKGNoaWxkKSk7Ci0gICAgY2hpbGRUZXh0ID0gQVRLX1RFWFQoY2hpbGQpOwot
Ci0gICAgc2V0MSA9IGF0a190ZXh0X2dldF9kZWZhdWx0X2F0dHJpYnV0ZXMoY2hpbGRUZXh0KTsK
LSAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQxLCBBVEtf
VEVYVF9BVFRSX0ZBTUlMWV9OQU1FLCAibW9ub3NwYWNlIikpOwotICAgIGdfYXNzZXJ0KGF0a0F0
dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDEsIEFUS19URVhUX0FUVFJfU1RZTEUsICJu
b3JtYWwiKSk7Ci0gICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUo
c2V0MSwgQVRLX1RFWFRfQVRUUl9TVFJJS0VUSFJPVUdILCAiZmFsc2UiKSk7Ci0gICAgZ19hc3Nl
cnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUoc2V0MSwgQVRLX1RFWFRfQVRUUl9X
RUlHSFQsICI0MDAiKSk7Ci0gICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFz
VmFsdWUoc2V0MSwgQVRLX1RFWFRfQVRUUl9GR19DT0xPUiwgIjEyMCwxMjEsMTIyIikpOwotCi0g
ICAgc2V0MiA9IGF0a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDQzLCAmc3Rh
cnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwg
PT0sIDQzKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgODApOwotICAgIC8q
IENoZWNrcyB0aGF0IGRlZmF1bHQgYXR0cmlidXRlcyBvZiB0ZXh0IGFyZSBub3QgcmV0dXJuZWQg
d2hlbiBjYWxsZWQgdG8gYXRrX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzLiAqLwotICAgIGdfYXNz
ZXJ0KCFhdGtBdHRyaWJ1dGVTZXRBdHRyaWJ1dGVIYXNWYWx1ZShzZXQyLCBBVEtfVEVYVF9BVFRS
X0ZHX0NPTE9SLCAiMTIwLDEyMSwxMjIiKSk7Ci0gICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0
QXR0cmlidXRlSGFzVmFsdWUoc2V0MiwgQVRLX1RFWFRfQVRUUl9VTkRFUkxJTkUsICJzaW5nbGUi
KSk7Ci0gICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0cmlidXRlSGFzVmFsdWUoc2V0Miwg
QVRLX1RFWFRfQVRUUl9CR19DT0xPUiwgIjgwLDgxLDgyIikpOwotICAgIGF0a19hdHRyaWJ1dGVf
c2V0X2ZyZWUoc2V0MSk7Ci0gICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQyKTsKLSAgICBn
X29iamVjdF91bnJlZihjaGlsZCk7Ci0KLSAgICBjaGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vz
c2libGVfY2hpbGQob2JqZWN0LCAyKTsKLSAgICBnX2Fzc2VydChjaGlsZCAmJiBBVEtfSVNfVEVY
VChjaGlsZCkpOwotICAgIGNoaWxkVGV4dCA9IEFUS19URVhUKGNoaWxkKTsKLQotICAgIHNldDEg
PSBhdGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMoY2hpbGRUZXh0LCAwLCAmc3RhcnRPZmZzZXQs
ICZlbmRPZmZzZXQpOwotICAgIHNldDIgPSBhdGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMoY2hp
bGRUZXh0LCAzLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0KGF0a0F0
dHJpYnV0ZVNldEFyZUVxdWFsKHNldDEsIHNldDIpKTsKLSAgICBhdGtfYXR0cmlidXRlX3NldF9m
cmVlKHNldDIpOwotCi0gICAgc2V0MiA9IGF0a190ZXh0X2dldF9ydW5fYXR0cmlidXRlcyhjaGls
ZFRleHQsIDEsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgc2V0MyA9IGF0a190ZXh0
X2dldF9ydW5fYXR0cmlidXRlcyhjaGlsZFRleHQsIDUsICZzdGFydE9mZnNldCwgJmVuZE9mZnNl
dCk7Ci0gICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXJlRXF1YWwoc2V0Miwgc2V0MykpOwot
ICAgIGdfYXNzZXJ0KCFhdGtBdHRyaWJ1dGVTZXRBcmVFcXVhbChzZXQxLCBzZXQyKSk7Ci0gICAg
YXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQzKTsKLQotICAgIHNldDMgPSBhdGtfdGV4dF9nZXRf
cnVuX2F0dHJpYnV0ZXMoY2hpbGRUZXh0LCAyLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOwot
ICAgIHNldDQgPSBhdGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMoY2hpbGRUZXh0LCA2LCAmc3Rh
cnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEFyZUVx
dWFsKHNldDMsIHNldDQpKTsKLSAgICBnX2Fzc2VydCghYXRrQXR0cmlidXRlU2V0QXJlRXF1YWwo
c2V0MSwgc2V0MykpOwotICAgIGdfYXNzZXJ0KCFhdGtBdHRyaWJ1dGVTZXRBcmVFcXVhbChzZXQy
LCBzZXQzKSk7Ci0gICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQxKTsKLSAgICBhdGtfYXR0
cmlidXRlX3NldF9mcmVlKHNldDIpOwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0Myk7
Ci0gICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQ0KTsKLSAgICBnX29iamVjdF91bnJlZihj
aGlsZCk7Ci0KLSAgICBjaGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2Jq
ZWN0LCAzKTsKLSAgICBnX2Fzc2VydChjaGlsZCAmJiBBVEtfSVNfVEVYVChjaGlsZCkpOwotICAg
IGNoaWxkVGV4dCA9IEFUS19URVhUKGNoaWxkKTsKLSAgICBzZXQxID0gYXRrX3RleHRfZ2V0X3J1
bl9hdHRyaWJ1dGVzKGNoaWxkVGV4dCwgMjQsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMjEpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChlbmRPZmZzZXQsID09LCAyNSk7Ci0gICAgZ19hc3NlcnQoYXRrQXR0cmlidXRlU2V0QXR0
cmlidXRlSGFzVmFsdWUoc2V0MSwgQVRLX1RFWFRfQVRUUl9TVFJJS0VUSFJPVUdILCAidHJ1ZSIp
KTsKLQotICAgIHNldDIgPSBhdGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMoY2hpbGRUZXh0LCAy
NSwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRP
ZmZzZXQsID09LCAyNSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDMwKTsK
LSAgICBnX2Fzc2VydChhdGtBdHRyaWJ1dGVTZXRBcmVFcXVhbChzZXQyLCAwKSk7Ci0KLSAgICBz
ZXQzID0gYXRrX3RleHRfZ2V0X2RlZmF1bHRfYXR0cmlidXRlcyhjaGlsZFRleHQpOwotICAgIGdf
YXNzZXJ0KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZUhhc1ZhbHVlKHNldDMsIEFUS19URVhUX0FU
VFJfSlVTVElGSUNBVElPTiwgImNlbnRlciIpKTsKLSAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVl
KHNldDEpOwotICAgIGF0a19hdHRyaWJ1dGVfc2V0X2ZyZWUoc2V0Mik7Ci0gICAgYXRrX2F0dHJp
YnV0ZV9zZXRfZnJlZShzZXQzKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGNoaWxkKTsKLX0KLQot
c3RhdGljIGdjaGFyKiB0ZXh0U2VsZWN0aW9uQ2hhbmdlZFJlc3VsdCA9IDA7Ci0KLXN0YXRpYyB2
b2lkIHRleHRTZWxlY3Rpb25DaGFuZ2VkQ2FsbGJhY2soQXRrVGV4dCogdGV4dCwgZ3BvaW50ZXIg
ZGF0YSkKLXsKLSAgICBnX2Fzc2VydChBVEtfSVNfVEVYVCh0ZXh0KSk7Ci0KLSAgICBnX2ZyZWUo
dGV4dFNlbGVjdGlvbkNoYW5nZWRSZXN1bHQpOwotICAgIEF0a1JvbGUgcm9sZSA9IGF0a19vYmpl
Y3RfZ2V0X3JvbGUoQVRLX09CSkVDVCh0ZXh0KSk7Ci0gICAgaW50IHN0YXJ0T2Zmc2V0ID0gMDsK
LSAgICBpbnQgZW5kT2Zmc2V0ID0gMDsKLSAgICBhdGtfdGV4dF9nZXRfc2VsZWN0aW9uKEFUS19U
RVhUKHRleHQpLCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIHRleHRTZWxlY3Rp
b25DaGFuZ2VkUmVzdWx0ID0gZ19zdHJkdXBfcHJpbnRmKCJ8JXN8JWR8JWR8IiwgYXRrX3JvbGVf
Z2V0X25hbWUocm9sZSksIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwotfQotCi1zdGF0aWMgdm9p
ZCB0ZXN0V2Via2l0QXRrVGV4dFNlbGVjdGlvbnMoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29i
amVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7
IDAsIDAsIDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURH
RVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJp
bmcod2ViVmlldywgdGV4dEZvclNlbGVjdGlvbnMsIDAsIDAsIDApOwotCi0gICAgQXRrT2JqZWN0
KiBvYmplY3QgPSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0KG9iamVj
dCk7Ci0KLSAgICBBdGtUZXh0KiBwYXJhZ3JhcGgxID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZf
YWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDApKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChw
YXJhZ3JhcGgxKSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChwYXJhZ3JhcGgxLCAidGV4dC1zZWxl
Y3Rpb24tY2hhbmdlZCIsIEdfQ0FMTEJBQ0sodGV4dFNlbGVjdGlvbkNoYW5nZWRDYWxsYmFjayks
IDApOwotCi0gICAgQXRrVGV4dCogcGFyYWdyYXBoMiA9IEFUS19URVhUKGF0a19vYmplY3RfcmVm
X2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAxKSk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQo
cGFyYWdyYXBoMikpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QocGFyYWdyYXBoMiwgInRleHQtc2Vs
ZWN0aW9uLWNoYW5nZWQiLCBHX0NBTExCQUNLKHRleHRTZWxlY3Rpb25DaGFuZ2VkQ2FsbGJhY2sp
LCAwKTsKLQotICAgIEF0a1RleHQqIGxpbmsgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nl
c3NpYmxlX2NoaWxkKEFUS19PQkpFQ1QocGFyYWdyYXBoMiksIDApKTsKLSAgICBnX2Fzc2VydChB
VEtfSVNfVEVYVChsaW5rKSk7Ci0KLSAgICBBdGtPYmplY3QqIGxpc3QgPSBhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMik7Ci0gICAgZ19hc3NlcnQoQVRLX09CSkVDVChs
aXN0KSk7Ci0KLSAgICBBdGtUZXh0KiBsaXN0SXRlbSA9IEFUS19URVhUKGF0a19vYmplY3RfcmVm
X2FjY2Vzc2libGVfY2hpbGQobGlzdCwgMCkpOwotICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKGxp
c3RJdGVtKSk7Ci0KLSAgICAvKiBGaXJzdCBwYXJhZ3JhcGggKHNpbXBsZSB0ZXh0KS4gKi8KLQot
ICAgIC8qIEJhc2ljIGluaXRpYWwgY2hlY2tzLiAqLwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtf
dGV4dF9nZXRfbl9zZWxlY3Rpb25zKHBhcmFncmFwaDEpLCA9PSwgMCk7Ci0KLSAgICBnaW50IHN0
YXJ0T2Zmc2V0OwotICAgIGdpbnQgZW5kT2Zmc2V0OwotICAgIGdjaGFyKiBzZWxlY3RlZFRleHQg
PSBhdGtfdGV4dF9nZXRfc2VsZWN0aW9uKHBhcmFncmFwaDEsIDAsICZzdGFydE9mZnNldCwgJmVu
ZE9mZnNldCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMCk7Ci0gICAg
Z19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcHN0cihz
ZWxlY3RlZFRleHQsID09LCAwKTsKLSAgICBnX2ZyZWUgKHNlbGVjdGVkVGV4dCk7Ci0KLSAgICAv
KiBUcnkgcmVtb3ZpbmcgYSBub24gZXhpc3RpbmcgKHlldCkgc2VsZWN0aW9uLiAqLwotICAgIGdi
b29sZWFuIHJlc3VsdCA9IGF0a190ZXh0X3JlbW92ZV9zZWxlY3Rpb24ocGFyYWdyYXBoMSwgMCk7
Ci0gICAgZ19hc3NlcnQoIXJlc3VsdCk7Ci0KLSAgICAvKiBUcnkgc2V0dGluZyBhIDAtY2hhciBz
ZWxlY3Rpb24uICovCi0gICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X3NlbGVjdGlvbihwYXJhZ3Jh
cGgxLCAwLCA1LCA1KTsKLSAgICBnX2Fzc2VydChyZXN1bHQpOwotCi0gICAgLyogTWFrZSBhIHNl
bGVjdGlvbiBhbmQgdGVzdCBpdC4gKi8KLSAgICByZXN1bHQgPSBhdGtfdGV4dF9zZXRfc2VsZWN0
aW9uKHBhcmFncmFwaDEsIDAsIDUsIDI1KTsKLSAgICBnX2Fzc2VydChyZXN1bHQpOwotICAgIGdf
YXNzZXJ0X2NtcGludChhdGtfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKHBhcmFncmFwaDEpLCA9PSwg
MSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHRTZWxlY3Rpb25DaGFuZ2VkUmVzdWx0LCA9PSwg
InxwYXJhZ3JhcGh8NXwyNXwiKTsKLSAgICBzZWxlY3RlZFRleHQgPSBhdGtfdGV4dF9nZXRfc2Vs
ZWN0aW9uKHBhcmFncmFwaDEsIDAsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgZ19h
c3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgNSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGVu
ZE9mZnNldCwgPT0sIDI1KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRUZXh0LCA9PSwg
ImFncmFwaCB3aXRoIHBsYWluIHRlIik7Ci0gICAgZ19mcmVlIChzZWxlY3RlZFRleHQpOwotCi0g
ICAgLyogVHJ5IHJlbW92aW5nIHRoZSBzZWxlY3Rpb24gZnJvbSBvdGhlciBBdGtUZXh0IG9iamVj
dCAoc2hvdWxkIGZhaWwpLiAqLwotICAgIHJlc3VsdCA9IGF0a190ZXh0X3JlbW92ZV9zZWxlY3Rp
b24ocGFyYWdyYXBoMiwgMCk7Ci0gICAgZ19hc3NlcnQoIXJlc3VsdCk7Ci0KLSAgICAvKiBSZW1v
dmUgdGhlIHNlbGVjdGlvbiBhbmQgdGVzdCBldmVyeXRoaW5nIGFnYWluLiAqLwotICAgIHJlc3Vs
dCA9IGF0a190ZXh0X3JlbW92ZV9zZWxlY3Rpb24ocGFyYWdyYXBoMSwgMCk7Ci0gICAgZ19hc3Nl
cnQocmVzdWx0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9u
cyhwYXJhZ3JhcGgxKSwgPT0sIDApOwotICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dldF9z
ZWxlY3Rpb24ocGFyYWdyYXBoMSwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICAv
KiBOb3cgb2Zmc2V0cyBzaG91bGQgYmUgdGhlIHNhbWUsIHNldCB0byB0aGUgbGFzdCBwb3NpdGlv
biBvZiB0aGUgY2FyZXQuICovCi0gICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwg
ZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAyNSk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDI1KTsKLSAgICBnX2Fzc2VydF9jbXBz
dHIoc2VsZWN0ZWRUZXh0LCA9PSwgMCk7Ci0gICAgZ19mcmVlIChzZWxlY3RlZFRleHQpOwotCi0g
ICAgLyogU2Vjb25kIHBhcmFncmFwaCAodGV4dCArIGxpbmsgKyB0ZXh0KS4gKi8KLQotICAgIC8q
IFNldCBhIHNlbGVjdGlvbiBwYXJ0aWFsbHkgY292ZXJpbmcgdGhlIGxpbmsgYW5kIHRlc3QgaXQu
ICovCi0gICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X3NlbGVjdGlvbihwYXJhZ3JhcGgyLCAwLCA3
LCAyMSk7Ci0gICAgZ19hc3NlcnQocmVzdWx0KTsKLQotICAgIC8qIFRlc3QgdGhlIHBhcmFncmFw
aCBmaXJzdC4gKi8KLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9u
cyhwYXJhZ3JhcGgyKSwgPT0sIDEpOwotICAgIHNlbGVjdGVkVGV4dCA9IGF0a190ZXh0X2dldF9z
ZWxlY3Rpb24ocGFyYWdyYXBoMiwgMCwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCA3KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
ZW5kT2Zmc2V0LCA9PSwgMjEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQsID09
LCAicmFwaCB3aXRoIGEgbGkiKTsKLSAgICBnX2ZyZWUgKHNlbGVjdGVkVGV4dCk7Ci0KLSAgICAv
KiBOb3cgdGVzdCBqdXN0IHRoZSBsaW5rLiAqLwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4
dF9nZXRfbl9zZWxlY3Rpb25zKGxpbmspLCA9PSwgMSk7Ci0gICAgc2VsZWN0ZWRUZXh0ID0gYXRr
X3RleHRfZ2V0X3NlbGVjdGlvbihsaW5rLCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOwot
ICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2Nt
cGludChlbmRPZmZzZXQsID09LCA0KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRUZXh0
LCA9PSwgImEgbGkiKTsKLSAgICBnX2ZyZWUgKHNlbGVjdGVkVGV4dCk7Ci0KLSAgICAvKiBNYWtl
IGEgc2VsZWN0aW9uIGFmdGVyIHRoZSBsaW5rIGFuZCBjaGVjayBzZWxlY3Rpb24gZm9yIHRoZSB3
aG9sZSBwYXJhZ3JhcGguICovCi0gICAgcmVzdWx0ID0gYXRrX3RleHRfc2V0X3NlbGVjdGlvbihw
YXJhZ3JhcGgyLCAwLCAyNywgMzcpOwotICAgIGdfYXNzZXJ0KHJlc3VsdCk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KGF0a190ZXh0X2dldF9uX3NlbGVjdGlvbnMocGFyYWdyYXBoMiksID09LCAxKTsK
LSAgICBnX2Fzc2VydF9jbXBzdHIodGV4dFNlbGVjdGlvbkNoYW5nZWRSZXN1bHQsID09LCAifHBh
cmFncmFwaHwyN3wzN3wiKTsKLSAgICBzZWxlY3RlZFRleHQgPSBhdGtfdGV4dF9nZXRfc2VsZWN0
aW9uKHBhcmFncmFwaDIsIDAsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMjcpOwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRP
ZmZzZXQsID09LCAzNyk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkVGV4dCwgPT0sICJ0
aGUgbWlkZGxlIik7Ci0gICAgZ19mcmVlIChzZWxlY3RlZFRleHQpOwotCi0gICAgLyogUmVtb3Zl
IHNlbGVjdGlvbnMgYW5kIHRleHQgZXZlcnl0aGluZyBhZ2Fpbi4gKi8KLSAgICByZXN1bHQgPSBh
dGtfdGV4dF9yZW1vdmVfc2VsZWN0aW9uKHBhcmFncmFwaDIsIDApOwotICAgIGdfYXNzZXJ0KHJl
c3VsdCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a190ZXh0X2dldF9uX3NlbGVjdGlvbnMocGFy
YWdyYXBoMiksID09LCAwKTsKLSAgICBzZWxlY3RlZFRleHQgPSBhdGtfdGV4dF9nZXRfc2VsZWN0
aW9uKHBhcmFncmFwaDIsIDAsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7Ci0gICAgLyogTm93
IG9mZnNldHMgc2hvdWxkIGJlIHRoZSBzYW1lIChubyBzZWxlY3Rpb24pLiAqLwotICAgIGdfYXNz
ZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIGVuZE9mZnNldCk7Ci0gICAgZ19hc3NlcnRfY21w
c3RyKHNlbGVjdGVkVGV4dCwgPT0sIDApOwotICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKLQot
ICAgIGdfYXNzZXJ0X2NtcGludChhdGtfdGV4dF9nZXRfbl9zZWxlY3Rpb25zKGxpbmspLCA9PSwg
MCk7Ci0gICAgc2VsZWN0ZWRUZXh0ID0gYXRrX3RleHRfZ2V0X3NlbGVjdGlvbihsaW5rLCAwLCAm
c3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIC8qIE5vdyBvZmZzZXRzIHNob3VsZCBiZSB0
aGUgc2FtZSAobm8gc2VsZWN0aW9uKS4gKi8KLSAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZz
ZXQsID09LCBlbmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZFRleHQsID09
LCAwKTsKLSAgICBnX2ZyZWUgKHNlbGVjdGVkVGV4dCk7Ci0KLSAgICAvKiBMaXN0IGl0ZW0gKi8K
LQotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUobGlzdCkgPT0gQVRLX1JPTEVfTElT
VCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGls
ZHJlbihsaXN0KSwgPT0sIDEpOwotCi0gICAgLyogSXQncyBub3QgcG9zc2libGUgdG8gc2VsZWN0
IHRleHQgaW5zaWRlIGFuIGl0ZW0ncyBtYXJrZXIuICovCi0gICAgcmVzdWx0ID0gYXRrX3RleHRf
c2V0X3NlbGVjdGlvbiAobGlzdEl0ZW0sIDAsIDAsIDkpOwotICAgIGdfYXNzZXJ0KCFyZXN1bHQp
OwotICAgIHJlc3VsdCA9IGF0a190ZXh0X3NldF9zZWxlY3Rpb24gKGxpc3RJdGVtLCAwLCA5LCAx
KTsKLSAgICBnX2Fzc2VydCghcmVzdWx0KTsKLQotICAgIC8qIEl0IHNob3VsZCBiZSBwb3NzaWJs
ZSB0byBzZWxlY3QgdGV4dCBpbnNpZGUgYW4gaXRlbSdzIHRleHQuICovCi0gICAgcmVzdWx0ID0g
YXRrX3RleHRfc2V0X3NlbGVjdGlvbiAobGlzdEl0ZW0sIDAsIDMsIDkpOwotICAgIGdfYXNzZXJ0
KHJlc3VsdCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX3RleHRfZ2V0X25fc2VsZWN0aW9u
cyhsaXN0SXRlbSksID09LCAxKTsKLSAgICBzZWxlY3RlZFRleHQgPSBhdGtfdGV4dF9nZXRfc2Vs
ZWN0aW9uKGxpc3RJdGVtLCAwLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIGdfYXNz
ZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDMpOwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRP
ZmZzZXQsID09LCA5KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRUZXh0LCA9PSwgIkEg
bGlzdCIpOwotICAgIGdfZnJlZSAoc2VsZWN0ZWRUZXh0KTsKLQotICAgIGdfZnJlZSh0ZXh0U2Vs
ZWN0aW9uQ2hhbmdlZFJlc3VsdCk7Ci0KLSAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgxKTsK
LSAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgyKTsKLSAgICBnX29iamVjdF91bnJlZihsaW5r
KTsKLSAgICBnX29iamVjdF91bnJlZihsaXN0KTsKLSAgICBnX29iamVjdF91bnJlZihsaXN0SXRl
bSk7Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RX
ZWJraXRBdGtHZXRFeHRlbnRzKCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VC
S0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Np
bmsod2ViVmlldyk7Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAs
IDYwMCB9OwotICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcp
LCAmYWxsb2NhdGlvbik7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcs
IGNlbnRlcmVkQ29udGVudHMsIDAsIDAsIDApOwotCi0gICAgQXRrT2JqZWN0KiBvYmplY3QgPSBn
ZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0KG9iamVjdCk7Ci0KLSAgICBB
dGtUZXh0KiBzaG9ydFRleHQxID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9j
aGlsZChvYmplY3QsIDApKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChzaG9ydFRleHQxKSk7
Ci0gICAgQXRrVGV4dCogbG9uZ1RleHQgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nlc3Np
YmxlX2NoaWxkKG9iamVjdCwgMSkpOwotICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKGxvbmdUZXh0
KSk7Ci0gICAgQXRrVGV4dCogc2hvcnRUZXh0MiA9IEFUS19URVhUKGF0a19vYmplY3RfcmVmX2Fj
Y2Vzc2libGVfY2hpbGQob2JqZWN0LCAyKSk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQoc2hv
cnRUZXh0MikpOwotICAgIEF0a1RleHQqIG11bHRpbGluZVRleHQgPSBBVEtfVEVYVChhdGtfb2Jq
ZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMykpOwotICAgIGdfYXNzZXJ0KEFUS19J
U19URVhUKG11bHRpbGluZVRleHQpKTsKLQotICAgIC8qIFN0YXJ0IHdpdGggd2luZG93IGV4dGVu
dHMuICovCi0gICAgQXRrVGV4dFJlY3RhbmdsZSBzbGluZV93aW5kb3cxLCBzbGluZV93aW5kb3cy
LCBsbGluZV93aW5kb3csIG1saW5lX3dpbmRvdzsKLSAgICBhdGtfdGV4dF9nZXRfcmFuZ2VfZXh0
ZW50cyhzaG9ydFRleHQxLCAwLCAxMCwgQVRLX1hZX1dJTkRPVywgJnNsaW5lX3dpbmRvdzEpOwot
ICAgIGF0a190ZXh0X2dldF9yYW5nZV9leHRlbnRzKGxvbmdUZXh0LCAwLCA0NCwgQVRLX1hZX1dJ
TkRPVywgJmxsaW5lX3dpbmRvdyk7Ci0gICAgYXRrX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMoc2hv
cnRUZXh0MiwgMCwgMTAsIEFUS19YWV9XSU5ET1csICZzbGluZV93aW5kb3cyKTsKLSAgICBhdGtf
dGV4dF9nZXRfcmFuZ2VfZXh0ZW50cyhtdWx0aWxpbmVUZXh0LCAwLCA2MCwgQVRLX1hZX1dJTkRP
VywgJm1saW5lX3dpbmRvdyk7Ci0KLSAgICAvKiBDaGVjayB2ZXJ0aWNhbCBsaW5lIHBvc2l0aW9u
LiAqLwotICAgIGdfYXNzZXJ0X2NtcGludChzbGluZV93aW5kb3cxLnkgKyBzbGluZV93aW5kb3cx
LmhlaWdodCwgPD0sIGxsaW5lX3dpbmRvdy55KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQobGxpbmVf
d2luZG93LnkgKyBsbGluZV93aW5kb3cuaGVpZ2h0ICsgc2xpbmVfd2luZG93Mi5oZWlnaHQsIDw9
LCBtbGluZV93aW5kb3cueSk7Ci0KLSAgICAvKiBQYXJhZ3JhcGhzIDEgYW5kIDMgaGF2ZSBpZGVu
dGljYWwgdGV4dCBhbmQgYWxpZ25tZW50LiAqLwotICAgIGdfYXNzZXJ0X2NtcGludChzbGluZV93
aW5kb3cxLngsID09LCBzbGluZV93aW5kb3cyLngpOwotICAgIGdfYXNzZXJ0X2NtcGludChzbGlu
ZV93aW5kb3cxLndpZHRoLCA9PSwgc2xpbmVfd2luZG93Mi53aWR0aCk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KHNsaW5lX3dpbmRvdzEuaGVpZ2h0LCA9PSwgc2xpbmVfd2luZG93Mi5oZWlnaHQpOwot
Ci0gICAgLyogQWxsIGxpbmVzIHNob3VsZCBiZSB0aGUgc2FtZSBoZWlnaHQ7IGxpbmUgMiBpcyB0
aGUgd2lkZXN0IGxpbmUuICovCi0gICAgZ19hc3NlcnRfY21waW50KHNsaW5lX3dpbmRvdzEuaGVp
Z2h0LCA9PSwgbGxpbmVfd2luZG93LmhlaWdodCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHNsaW5l
X3dpbmRvdzEud2lkdGgsIDwsIGxsaW5lX3dpbmRvdy53aWR0aCk7Ci0KLSAgICAvKiBNYWtlIHN1
cmUgdGhlIGNoYXJhY3RlciBleHRlbnRzIGppdmUgd2l0aCB0aGUgcmFuZ2UgZXh0ZW50cy4gKi8K
LSAgICBnaW50IHg7Ci0gICAgZ2ludCB5OwotICAgIGdpbnQgd2lkdGg7Ci0gICAgZ2ludCBoZWln
aHQ7Ci0KLSAgICAvKiBGaXJzdCBwYXJhZ3JhcGggKHNob3J0IHRleHQpLiAqLwotICAgIGF0a190
ZXh0X2dldF9jaGFyYWN0ZXJfZXh0ZW50cyhzaG9ydFRleHQxLCAwLCAmeCwgJnksICZ3aWR0aCwg
JmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7Ci0gICAgZ19hc3NlcnRfY21waW50KHgsID09LCBzbGlu
ZV93aW5kb3cxLngpOwotICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgc2xpbmVfd2luZG93MS55
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA9PSwgc2xpbmVfd2luZG93MS5oZWlnaHQp
OwotCi0gICAgYXRrX3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRzKHNob3J0VGV4dDEsIDksICZ4
LCAmeSwgJndpZHRoLCAmaGVpZ2h0LCBBVEtfWFlfV0lORE9XKTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQoeCwgPT0sIHNsaW5lX3dpbmRvdzEueCArIHNsaW5lX3dpbmRvdzEud2lkdGggLSB3aWR0aCk7
Ci0gICAgZ19hc3NlcnRfY21waW50KHksID09LCBzbGluZV93aW5kb3cxLnkpOwotICAgIGdfYXNz
ZXJ0X2NtcGludChoZWlnaHQsID09LCBzbGluZV93aW5kb3cxLmhlaWdodCk7Ci0KLSAgICAvKiBT
ZWNvbmQgcGFyYWdyYXBoIChsb25nIHRleHQpLiAqLwotICAgIGF0a190ZXh0X2dldF9jaGFyYWN0
ZXJfZXh0ZW50cyhsb25nVGV4dCwgMCwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9X
SU5ET1cpOwotICAgIGdfYXNzZXJ0X2NtcGludCh4LCA9PSwgbGxpbmVfd2luZG93LngpOwotICAg
IGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgbGxpbmVfd2luZG93LnkpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChoZWlnaHQsID09LCBsbGluZV93aW5kb3cuaGVpZ2h0KTsKLQotICAgIGF0a190ZXh0X2dl
dF9jaGFyYWN0ZXJfZXh0ZW50cyhsb25nVGV4dCwgNDMsICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0
LCBBVEtfWFlfV0lORE9XKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoeCwgPT0sIGxsaW5lX3dpbmRv
dy54ICsgbGxpbmVfd2luZG93LndpZHRoIC0gd2lkdGgpOwotICAgIGdfYXNzZXJ0X2NtcGludCh5
LCA9PSwgbGxpbmVfd2luZG93LnkpOwotICAgIGdfYXNzZXJ0X2NtcGludChoZWlnaHQsID09LCBs
bGluZV93aW5kb3cuaGVpZ2h0KTsKLQotICAgIC8qIFRoaXJkIHBhcmFncmFwaCAoc2hvcnQgdGV4
dCkuICovCi0gICAgYXRrX3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRzKHNob3J0VGV4dDIsIDAs
ICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0LCBBVEtfWFlfV0lORE9XKTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQoeCwgPT0sIHNsaW5lX3dpbmRvdzIueCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHksID09
LCBzbGluZV93aW5kb3cyLnkpOwotICAgIGdfYXNzZXJ0X2NtcGludChoZWlnaHQsID09LCBzbGlu
ZV93aW5kb3cyLmhlaWdodCk7Ci0KLSAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMo
c2hvcnRUZXh0MiwgOSwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9XSU5ET1cpOwot
ICAgIGdfYXNzZXJ0X2NtcGludCh4LCA9PSwgc2xpbmVfd2luZG93Mi54ICsgc2xpbmVfd2luZG93
Mi53aWR0aCAtIHdpZHRoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoeSwgPT0sIHNsaW5lX3dpbmRv
dzIueSk7Ci0gICAgZ19hc3NlcnRfY21waW50KGhlaWdodCwgPT0sIHNsaW5lX3dpbmRvdzIuaGVp
Z2h0KTsKLQotICAgIC8qIEZvdXIgcGFyYWdyYXBoICgzIGxpbmVzIG11bHRpLWxpbmUgdGV4dCku
ICovCi0gICAgYXRrX3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRzKG11bHRpbGluZVRleHQsIDAs
ICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0LCBBVEtfWFlfV0lORE9XKTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQoeCwgPT0sIG1saW5lX3dpbmRvdy54KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoeSwgPT0s
IG1saW5lX3dpbmRvdy55KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoMyAqIGhlaWdodCwgPT0sIG1s
aW5lX3dpbmRvdy5oZWlnaHQpOwotCi0gICAgYXRrX3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRz
KG11bHRpbGluZVRleHQsIDU5LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgQVRLX1hZX1dJTkRP
Vyk7Ci0gICAgLyogTGFzdCBsaW5lIHdvbid0IGZpbGwgdGhlIHdob2xlIHdpZHRoIG9mIHRoZSBy
ZWN0YW5nbGUuICovCi0gICAgZ19hc3NlcnRfY21waW50KHgsIDw9LCBtbGluZV93aW5kb3cueCAr
IG1saW5lX3dpbmRvdy53aWR0aCAtIHdpZHRoKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoeSwgPT0s
IG1saW5lX3dpbmRvdy55ICsgbWxpbmVfd2luZG93LmhlaWdodCAtIGhlaWdodCk7Ci0gICAgZ19h
c3NlcnRfY21waW50KGhlaWdodCwgPD0sIG1saW5lX3dpbmRvdy5oZWlnaHQpOwotCi0gICAgLyog
Q2hlY2sgdGhhdCBleHRlbnQgZm9yIGEgZnVsbCBsaW5lIGFyZSB0aGUgc2FtZSBoZWlnaHQgdGhh
biBmb3IKLSAgICAgICBhIHBhcnRpYWwgc2VjdGlvbiBvZiB0aGUgc2FtZSBsaW5lICovCi0gICAg
Z2ludCBzdGFydE9mZnNldDsKLSAgICBnaW50IGVuZE9mZnNldDsKLQotI2lmICFBVEtfQ0hFQ0tf
VkVSU0lPTigyLCAxMCwgMCkKLSAgICBnY2hhciogdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0X2F0
X29mZnNldChtdWx0aWxpbmVUZXh0LCAwLCBBVEtfVEVYVF9CT1VOREFSWV9MSU5FX1NUQVJULCAm
c3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIGdfZnJlZSh0ZXh0KTsKLSNlbHNlCi0gICAg
Z2NoYXIqIHRleHQgPSBhdGtfdGV4dF9nZXRfc3RyaW5nX2F0X29mZnNldChtdWx0aWxpbmVUZXh0
LCAwLCBBVEtfVEVYVF9HUkFOVUxBUklUWV9MSU5FLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQp
OwotICAgIGdfZnJlZSh0ZXh0KTsKLSNlbmRpZgotCi0gICAgQXRrVGV4dFJlY3RhbmdsZSBmbGlu
ZV93aW5kb3c7Ci0gICAgQXRrVGV4dFJlY3RhbmdsZSBhZmxpbmVfd2luZG93OwotICAgIGF0a190
ZXh0X2dldF9yYW5nZV9leHRlbnRzKG11bHRpbGluZVRleHQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZz
ZXQsIEFUS19YWV9XSU5ET1csICZmbGluZV93aW5kb3cpOwotICAgIGF0a190ZXh0X2dldF9yYW5n
ZV9leHRlbnRzKG11bHRpbGluZVRleHQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSAxLCBBVEtf
WFlfV0lORE9XLCAmYWZsaW5lX3dpbmRvdyk7Ci0gICAgZ19hc3NlcnRfY21waW50KGZsaW5lX3dp
bmRvdy54LCA9PSwgYWZsaW5lX3dpbmRvdy54KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoZmxpbmVf
d2luZG93LnksID09LCBhZmxpbmVfd2luZG93LnkpOwotICAgIGdfYXNzZXJ0X2NtcGludChmbGlu
ZV93aW5kb3cuaGVpZ2h0LCA9PSwgYWZsaW5lX3dpbmRvdy5oZWlnaHQpOwotCi0gICAgZ19vYmpl
Y3RfdW5yZWYoc2hvcnRUZXh0MSk7Ci0gICAgZ19vYmplY3RfdW5yZWYoc2hvcnRUZXh0Mik7Ci0g
ICAgZ19vYmplY3RfdW5yZWYobG9uZ1RleHQpOwotICAgIGdfb2JqZWN0X3VucmVmKG11bHRpbGlu
ZVRleHQpOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotfQotCi1zdGF0aWMgdm9pZCB0
ZXN0V2Via2l0QXRrTGF5b3V0QW5kRGF0YVRhYmxlcygpCi17Ci0gICAgV2ViS2l0V2ViVmlldyog
d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdf
b2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9
IHsgMCwgMCwgODAwLCA2MDAgfTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJ
REdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0
cmluZyh3ZWJWaWV3LCBsYXlvdXRBbmREYXRhVGFibGVzLCAwLCAwLCAwKTsKLQotICAgIEF0a09i
amVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKLSAgICBnX2Fzc2VydChv
YmplY3QpOwotCi0gICAgLyogQ2hlY2sgdGhlIG5vbi1sYXlvdXQgdGFibGUgKGRhdGEgdGFibGUp
LiAqLwotCi0gICAgQXRrT2JqZWN0KiB0YWJsZTEgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxl
X2NoaWxkKG9iamVjdCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RBQkxFKHRhYmxlMSkpOwot
ICAgIEF0a0F0dHJpYnV0ZVNldCogc2V0MSA9IGF0a19vYmplY3RfZ2V0X2F0dHJpYnV0ZXModGFi
bGUxKTsKLSAgICBnX2Fzc2VydChzZXQxKTsKLSAgICBnX2Fzc2VydCghYXRrQXR0cmlidXRlU2V0
Q29udGFpbnNBdHRyaWJ1dGVOYW1lKHNldDEsICJsYXlvdXQtZ3Vlc3MiKSk7Ci0gICAgYXRrX2F0
dHJpYnV0ZV9zZXRfZnJlZShzZXQxKTsKLQotICAgIC8qIENoZWNrIHRoZSBsYXlvdXQgdGFibGUu
ICovCi0KLSAgICBBdGtPYmplY3QqIHRhYmxlMiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVf
Y2hpbGQob2JqZWN0LCAxKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfVEFCTEUodGFibGUyKSk7Ci0g
ICAgQXRrQXR0cmlidXRlU2V0KiBzZXQyID0gYXRrX29iamVjdF9nZXRfYXR0cmlidXRlcyh0YWJs
ZTIpOwotICAgIGdfYXNzZXJ0KHNldDIpOwotICAgIGdfYXNzZXJ0KGF0a0F0dHJpYnV0ZVNldENv
bnRhaW5zQXR0cmlidXRlTmFtZShzZXQyLCAibGF5b3V0LWd1ZXNzIikpOwotICAgIGdfYXNzZXJ0
KGF0a0F0dHJpYnV0ZVNldEF0dHJpYnV0ZU5hbWVIYXNWYWx1ZShzZXQyLCAibGF5b3V0LWd1ZXNz
IiwgInRydWUiKSk7Ci0gICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQyKTsKLQotICAgIGdf
b2JqZWN0X3VucmVmKHRhYmxlMSk7Ci0gICAgZ19vYmplY3RfdW5yZWYodGFibGUyKTsKLSAgICBn
X29iamVjdF91bnJlZih3ZWJWaWV3KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0xp
bmtzV2l0aElubGluZUltYWdlcygpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdF
QktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9z
aW5rKHdlYlZpZXcpOwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAw
LCA2MDAgfTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3
KSwgJmFsbG9jYXRpb24pOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3
LCBsaW5rc1dpdGhJbmxpbmVJbWFnZXMsIDAsIDAsIDApOwotCi0gICAgQXRrT2JqZWN0KiBvYmpl
Y3QgPSBnZXRXZWJBcmVhT2JqZWN0KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0KG9iamVjdCk7Ci0K
LSAgICAvKiBGaXJzdCBwYXJhZ3JhcGggKGxpbmsgYXQgdGhlIGJlZ2lubmluZykuICovCi0gICAg
QXRrT2JqZWN0KiBwYXJhZ3JhcGggPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9i
amVjdCwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQocGFyYWdyYXBoKSk7Ci0gICAgZ2lu
dCBzdGFydE9mZnNldDsKLSAgICBnaW50IGVuZE9mZnNldDsKLQotI2lmICFBVEtfQ0hFQ0tfVkVS
U0lPTigyLCAxMCwgMCkKLSAgICBnY2hhciogdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0X2F0X29m
ZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpLCAwLCBBVEtfVEVYVF9CT1VOREFSWV9MSU5FX1NUQVJU
LCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0KHRleHQpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgImZvbyBiYXIgYmF6Iik7Ci0gICAgZ19hc3NlcnRfY21w
aW50KHN0YXJ0T2Zmc2V0LCA9PSwgMCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwg
PT0sIDExKTsKLSAgICBnX2ZyZWUodGV4dCk7Ci0jZWxzZQotICAgIGdjaGFyKiB0ZXh0ID0gYXRr
X3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQoQVRLX1RFWFQocGFyYWdyYXBoKSwgMCwgQVRLX1RF
WFRfR1JBTlVMQVJJVFlfTElORSwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2Fz
c2VydCh0ZXh0KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJmb28gYmFyIGJheiIp
OwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0sIDApOwotICAgIGdfYXNzZXJ0
X2NtcGludChlbmRPZmZzZXQsID09LCAxMSk7Ci0gICAgZ19mcmVlKHRleHQpOwotI2VuZGlmCi0K
LSAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgpOwotCi0gICAgLyogU2Vjb25kIHBhcmFncmFw
aCAobGluayBpbiB0aGUgbWlkZGxlKS4gKi8KLSAgICBwYXJhZ3JhcGggPSBhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMSk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQo
cGFyYWdyYXBoKSk7Ci0KLSNpZiAhQVRLX0NIRUNLX1ZFUlNJT04oMiwgMTAsIDApCi0gICAgdGV4
dCA9IGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpLCAwLCBB
VEtfVEVYVF9CT1VOREFSWV9MSU5FX1NUQVJULCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOwot
ICAgIGdfYXNzZXJ0KHRleHQpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgImZvbyBi
YXIgYmF6Iik7Ci0gICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMCk7Ci0gICAg
Z19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDExKTsKLSAgICBnX2ZyZWUodGV4dCk7Ci0j
ZWxzZQotICAgIHRleHQgPSBhdGtfdGV4dF9nZXRfc3RyaW5nX2F0X29mZnNldChBVEtfVEVYVChw
YXJhZ3JhcGgpLCAwLCBBVEtfVEVYVF9HUkFOVUxBUklUWV9MSU5FLCAmc3RhcnRPZmZzZXQsICZl
bmRPZmZzZXQpOwotICAgIGdfYXNzZXJ0KHRleHQpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0
LCA9PSwgImZvbyBiYXIgYmF6Iik7Ci0gICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9
PSwgMCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDExKTsKLSAgICBnX2Zy
ZWUodGV4dCk7Ci0jZW5kaWYKLQotICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaCk7Ci0KLSAg
ICAvKiBUaGlyZCBwYXJhZ3JhcGggKGxpbmsgYXQgdGhlIGVuZCkuICovCi0gICAgcGFyYWdyYXBo
ID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDIpOwotICAgIGdfYXNz
ZXJ0KEFUS19JU19URVhUKHBhcmFncmFwaCkpOwotCi0jaWYgIUFUS19DSEVDS19WRVJTSU9OKDIs
IDEwLCAwKQotICAgIHRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dF9hdF9vZmZzZXQoQVRLX1RFWFQo
cGFyYWdyYXBoKSwgMCwgQVRLX1RFWFRfQk9VTkRBUllfTElORV9TVEFSVCwgJnN0YXJ0T2Zmc2V0
LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydCh0ZXh0KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
dGV4dCwgPT0sICJmb28gYmFyIGJheiIpOwotICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNl
dCwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09LCAxMSk7Ci0gICAg
Z19mcmVlKHRleHQpOwotI2Vsc2UKLSAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3N0cmluZ19hdF9v
ZmZzZXQoQVRLX1RFWFQocGFyYWdyYXBoKSwgMCwgQVRLX1RFWFRfR1JBTlVMQVJJVFlfTElORSwg
JnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsKLSAgICBnX2Fzc2VydCh0ZXh0KTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIodGV4dCwgPT0sICJmb28gYmFyIGJheiIpOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChzdGFydE9mZnNldCwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGludChlbmRPZmZzZXQsID09
LCAxMSk7Ci0gICAgZ19mcmVlKHRleHQpOwotI2VuZGlmCi0KLSAgICBnX29iamVjdF91bnJlZihw
YXJhZ3JhcGgpOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotfQotCi1zdGF0aWMgdm9p
ZCB0ZXN0V2Via2l0QXRrSHlwZXJ0ZXh0QW5kSHlwZXJsaW5rcygpCi17Ci0gICAgV2ViS2l0V2Vi
Vmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwot
ICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2Nh
dGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUo
R1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwotICAgIHdlYmtpdF93ZWJfdmlld19s
b2FkX3N0cmluZyh3ZWJWaWV3LCBoeXBlcnRleHRBbmRIeXBlcmxpbmtzLCAwLCAwLCAwKTsKLQot
ICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKLSAgICBn
X2Fzc2VydChvYmplY3QpOwotCi0gICAgQXRrT2JqZWN0KiBwYXJhZ3JhcGgxID0gYXRrX29iamVj
dF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDApOwotICAgIGdfYXNzZXJ0KEFUS19PQkpF
Q1QocGFyYWdyYXBoMSkpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUocGFyYWdy
YXBoMSkgPT0gQVRLX1JPTEVfUEFSQUdSQVBIKTsKLSAgICBnX2Fzc2VydChBVEtfSVNfSFlQRVJU
RVhUKHBhcmFncmFwaDEpKTsKLQotICAgIC8qIE5vIGxpbmtzIGluIHRoZSBmaXJzdCBwYXJhZ3Jh
cGguICovCi0gICAgZ2ludCBuTGlua3MgPSBhdGtfaHlwZXJ0ZXh0X2dldF9uX2xpbmtzKEFUS19I
WVBFUlRFWFQocGFyYWdyYXBoMSkpOwotICAgIGdfYXNzZXJ0X2NtcGludChuTGlua3MsID09LCAw
KTsKLQotICAgIEF0a09iamVjdCogcGFyYWdyYXBoMiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2li
bGVfY2hpbGQob2JqZWN0LCAxKTsKLSAgICBnX2Fzc2VydChBVEtfT0JKRUNUKHBhcmFncmFwaDIp
KTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKHBhcmFncmFwaDIpID09IEFUS19S
T0xFX1BBUkFHUkFQSCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX0hZUEVSVEVYVChwYXJhZ3JhcGgy
KSk7Ci0KLSAgICAvKiBDaGVjayBsaW5rcyBpbiB0aGUgc2Vjb25kIHBhcmFncmFwaC4KLSAgICAg
ICBuTGlua3MgPSBhdGtfaHlwZXJ0ZXh0X2dldF9uX2xpbmtzKEFUS19IWVBFUlRFWFQocGFyYWdy
YXBoMikpOwotICAgICAgIGdfYXNzZXJ0X2NtcGludChuTGlua3MsID09LCAzKTsgKi8KLQotICAg
IEF0a0h5cGVybGluayogaExpbmsxID0gYXRrX2h5cGVydGV4dF9nZXRfbGluayhBVEtfSFlQRVJU
RVhUKHBhcmFncmFwaDIpLCAwKTsKLSAgICBnX2Fzc2VydChBVEtfSFlQRVJMSU5LKGhMaW5rMSkp
OwotICAgIEF0a09iamVjdCogaExpbmtPYmplY3QxID0gYXRrX2h5cGVybGlua19nZXRfb2JqZWN0
KGhMaW5rMSwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX09CSkVDVChoTGlua09iamVjdDEpKTsKLSAg
ICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGhMaW5rT2JqZWN0MSkgPT0gQVRLX1JPTEVf
TElOSyk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19oeXBlcmxpbmtfZ2V0X3N0YXJ0X2luZGV4
KGhMaW5rMSksID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRf
ZW5kX2luZGV4KGhMaW5rMSksID09LCA2KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVy
bGlua19nZXRfbl9hbmNob3JzKGhMaW5rMSksID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
YXRrX2h5cGVybGlua19nZXRfdXJpKGhMaW5rMSwgMCksID09LCAiaHR0cDovL2Zvby5iYXIuYmF6
LyIpOwotCi0gICAgQXRrSHlwZXJsaW5rKiBoTGluazIgPSBhdGtfaHlwZXJ0ZXh0X2dldF9saW5r
KEFUS19IWVBFUlRFWFQocGFyYWdyYXBoMiksIDEpOwotICAgIGdfYXNzZXJ0KEFUS19IWVBFUkxJ
TksoaExpbmsyKSk7Ci0gICAgQXRrT2JqZWN0KiBoTGlua09iamVjdDIgPSBhdGtfaHlwZXJsaW5r
X2dldF9vYmplY3QoaExpbmsyLCAwKTsKLSAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGhMaW5rT2Jq
ZWN0MikpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3RfZ2V0X3JvbGUoaExpbmtPYmplY3QyKSA9
PSBBVEtfUk9MRV9MSU5LKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5cGVybGlua19nZXRf
c3RhcnRfaW5kZXgoaExpbmsyKSwgPT0sIDEyKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX2h5
cGVybGlua19nZXRfZW5kX2luZGV4KGhMaW5rMiksID09LCAzMik7Ci0gICAgZ19hc3NlcnRfY21w
aW50KGF0a19oeXBlcmxpbmtfZ2V0X25fYW5jaG9ycyhoTGluazIpLCA9PSwgMSk7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKGF0a19oeXBlcmxpbmtfZ2V0X3VyaShoTGluazIsIDApLCA9PSwgImh0dHA6
Ly9iYXIuYmF6LmZvby8iKTsKLQotICAgIEF0a0h5cGVybGluayogaExpbmszID0gYXRrX2h5cGVy
dGV4dF9nZXRfbGluayhBVEtfSFlQRVJURVhUKHBhcmFncmFwaDIpLCAyKTsKLSAgICBnX2Fzc2Vy
dChBVEtfSFlQRVJMSU5LKGhMaW5rMykpOwotICAgIEF0a09iamVjdCogaExpbmtPYmplY3QzID0g
YXRrX2h5cGVybGlua19nZXRfb2JqZWN0KGhMaW5rMywgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX09C
SkVDVChoTGlua09iamVjdDMpKTsKLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKGhM
aW5rT2JqZWN0MykgPT0gQVRLX1JPTEVfTElOSyk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19o
eXBlcmxpbmtfZ2V0X3N0YXJ0X2luZGV4KGhMaW5rMyksID09LCA2NSk7Ci0gICAgZ19hc3NlcnRf
Y21waW50KGF0a19oeXBlcmxpbmtfZ2V0X2VuZF9pbmRleChoTGluazMpLCA9PSwgNzUpOwotICAg
IGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9uX2FuY2hvcnMoaExpbmszKSwgPT0s
IDEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihhdGtfaHlwZXJsaW5rX2dldF91cmkoaExpbmszLCAw
KSwgPT0sICJodHRwOi8vYmF6LmZvby5iYXIvIik7Ci0KLSAgICBBdGtPYmplY3QqIGxpc3QgPSBh
dGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMik7Ci0gICAgZ19hc3NlcnQo
QVRLX09CSkVDVChsaXN0KSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShsaXN0
KSA9PSBBVEtfUk9MRV9MSVNUKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRf
bl9hY2Nlc3NpYmxlX2NoaWxkcmVuKGxpc3QpLCA9PSwgMSk7Ci0KLSAgICBBdGtPYmplY3QqIGxp
c3RJdGVtID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChsaXN0LCAwKTsKLSAgICBn
X2Fzc2VydChBVEtfSVNfVEVYVChsaXN0SXRlbSkpOwotICAgIGdfYXNzZXJ0KEFUS19JU19IWVBF
UlRFWFQobGlzdEl0ZW0pKTsKLQotICAgIEF0a0h5cGVybGluayogaExpbmtJbkxpc3RJdGVtID0g
YXRrX2h5cGVydGV4dF9nZXRfbGluayhBVEtfSFlQRVJURVhUKGxpc3RJdGVtKSwgMCk7Ci0gICAg
Z19hc3NlcnQoQVRLX0hZUEVSTElOSyhoTGlua0luTGlzdEl0ZW0pKTsKLSAgICBBdGtPYmplY3Qq
IGhMaW5rT2JqZWN0ID0gYXRrX2h5cGVybGlua19nZXRfb2JqZWN0KGhMaW5rSW5MaXN0SXRlbSwg
MCk7Ci0gICAgZ19hc3NlcnQoQVRLX09CSkVDVChoTGlua09iamVjdCkpOwotICAgIGdfYXNzZXJ0
KGF0a19vYmplY3RfZ2V0X3JvbGUoaExpbmtPYmplY3QpID09IEFUS19ST0xFX0xJTkspOwotICAg
IGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9zdGFydF9pbmRleChoTGlua0luTGlz
dEl0ZW0pLCA9PSwgMjApOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfaHlwZXJsaW5rX2dldF9l
bmRfaW5kZXgoaExpbmtJbkxpc3RJdGVtKSwgPT0sIDQzKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
YXRrX2h5cGVybGlua19nZXRfbl9hbmNob3JzKGhMaW5rSW5MaXN0SXRlbSksID09LCAxKTsKLSAg
ICBnX2Fzc2VydF9jbXBzdHIoYXRrX2h5cGVybGlua19nZXRfdXJpKGhMaW5rSW5MaXN0SXRlbSwg
MCksID09LCAiaHR0cDovL2Zvby5iYXIuYmF6LyIpOwotCi0gICAgLyogRmluYWxseSBjaGVjayB0
aGUgQXRrQWN0aW9uIGludGVyZmFjZSBmb3IgYSBnaXZlbiBBdGtIeXBlcmxpbmsuICovCi0gICAg
Z19hc3NlcnQoQVRLX0lTX0FDVElPTihoTGluazEpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRr
X2FjdGlvbl9nZXRfbl9hY3Rpb25zKEFUS19BQ1RJT04oaExpbmsxKSksID09LCAxKTsKLSAgICBn
X2Fzc2VydF9jbXBzdHIoYXRrX2FjdGlvbl9nZXRfa2V5YmluZGluZyhBVEtfQUNUSU9OKGhMaW5r
MSksIDApLCA9PSwgIiIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihhdGtfYWN0aW9uX2dldF9uYW1l
KEFUS19BQ1RJT04oaExpbmsxKSwgMCksID09LCAianVtcCIpOwotICAgIGdfYXNzZXJ0KGF0a19h
Y3Rpb25fZG9fYWN0aW9uKEFUS19BQ1RJT04oaExpbmsxKSwgMCkpOwotCi0gICAgZ19vYmplY3Rf
dW5yZWYocGFyYWdyYXBoMSk7Ci0gICAgZ19vYmplY3RfdW5yZWYocGFyYWdyYXBoMik7Ci0gICAg
Z19vYmplY3RfdW5yZWYobGlzdCk7Ci0gICAgZ19vYmplY3RfdW5yZWYobGlzdEl0ZW0pOwotICAg
IGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0V2Via2l0QXRr
TGlzdHNPZkl0ZW1zKCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dF
Ql9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2Vi
Vmlldyk7Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9
OwotICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxs
b2NhdGlvbik7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGxpc3Rz
T2ZJdGVtcywgMCwgMCwgMCk7Ci0KLSAgICBBdGtPYmplY3QqIG9iamVjdCA9IGdldFdlYkFyZWFP
YmplY3Qod2ViVmlldyk7Ci0gICAgZ19hc3NlcnQob2JqZWN0KTsKLQotICAgIC8qIFVub3JkZXJl
ZCBsaXN0LiAqLwotCi0gICAgQXRrT2JqZWN0KiB1TGlzdCA9IGF0a19vYmplY3RfcmVmX2FjY2Vz
c2libGVfY2hpbGQob2JqZWN0LCAwKTsKLSAgICBnX2Fzc2VydChBVEtfT0JKRUNUKHVMaXN0KSk7
Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZSh1TGlzdCkgPT0gQVRLX1JPTEVfTElT
VCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGls
ZHJlbih1TGlzdCksID09LCAzKTsKLQotICAgIEF0a09iamVjdCogaXRlbTEgPSBhdGtfb2JqZWN0
X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKHVMaXN0LCAwKTsKLSAgICBBdGtPYmplY3QqIGl0ZW0yID0g
YXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZCh1TGlzdCwgMSk7Ci0gICAgQXRrT2JqZWN0
KiBpdGVtMyA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQodUxpc3QsIDIpOwotCi0g
ICAgZ19hc3NlcnRfY21waW50KGF0a19vYmplY3RfZ2V0X25fYWNjZXNzaWJsZV9jaGlsZHJlbihp
dGVtMSksID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRrX29iamVjdF9nZXRfbl9hY2Nl
c3NpYmxlX2NoaWxkcmVuKGl0ZW0yKSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0X2NtcGludChhdGtf
b2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4oaXRlbTMpLCA9PSwgMSk7Ci0KLSAgICBn
X29iamVjdF91bnJlZihpdGVtMSk7Ci0gICAgZ19vYmplY3RfdW5yZWYoaXRlbTIpOwotICAgIGdf
b2JqZWN0X3VucmVmKGl0ZW0zKTsKLQotICAgIC8qIE9yZGVyZWQgbGlzdC4gKi8KLQotICAgIEF0
a09iamVjdCogb0xpc3QgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwg
MSk7Ci0gICAgZ19hc3NlcnQoQVRLX09CSkVDVChvTGlzdCkpOwotICAgIGdfYXNzZXJ0KGF0a19v
YmplY3RfZ2V0X3JvbGUob0xpc3QpID09IEFUS19ST0xFX0xJU1QpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRyZW4ob0xpc3QpLCA9PSwgMyk7
Ci0KLSAgICBpdGVtMSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob0xpc3QsIDAp
OwotICAgIGl0ZW0yID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvTGlzdCwgMSk7
Ci0gICAgaXRlbTMgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9MaXN0LCAyKTsK
LQotICAgIGdfYXNzZXJ0X2NtcGludChhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2libGVfY2hpbGRy
ZW4oaXRlbTEpLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0a19vYmplY3RfZ2V0X25f
YWNjZXNzaWJsZV9jaGlsZHJlbihpdGVtMiksID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
YXRrX29iamVjdF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKGl0ZW0zKSwgPT0sIDEpOwotCi0g
ICAgZ19vYmplY3RfdW5yZWYoaXRlbTEpOwotICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0yKTsKLSAg
ICBnX29iamVjdF91bnJlZihpdGVtMyk7Ci0KLSAgICBnX29iamVjdF91bnJlZih1TGlzdCk7Ci0g
ICAgZ19vYmplY3RfdW5yZWYob0xpc3QpOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwot
fQotCi10eXBlZGVmIGVudW0gewotICBURVhUX0NIQU5HRV9JTlNFUlQgPSAxLAotICBURVhUX0NI
QU5HRV9SRU1PVkUgPSAyCi19IFRleHRDaGFuZ2VUeXBlOwotCi1zdGF0aWMgZ2NoYXIqIHRleHRD
aGFuZ2VkUmVzdWx0ID0gMDsKLQotc3RhdGljIHZvaWQgdGV4dENoYW5nZWRDYihBdGtUZXh0KiB0
ZXh0LCBnaW50IHBvcywgZ2ludCBsZW4sIGdjaGFyKiBtb2RpZmllZFRleHQsIGdwb2ludGVyIGRh
dGEpCi17Ci0gICAgZ19hc3NlcnQodGV4dCAmJiBBVEtfSVNfT0JKRUNUKHRleHQpKTsKLQotICAg
IFRleHRDaGFuZ2VUeXBlIHR5cGUgPSBHUE9JTlRFUl9UT19JTlQoZGF0YSk7Ci0gICAgZ19mcmVl
KHRleHRDaGFuZ2VkUmVzdWx0KTsKLSAgICB0ZXh0Q2hhbmdlZFJlc3VsdCA9IGdfc3RyZHVwX3By
aW50ZigifCVkfCVkfCVkfCclcyd8IiwgdHlwZSwgcG9zLCBsZW4sIG1vZGlmaWVkVGV4dCk7Ci19
Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtUZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbnMoKQot
ewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dl
Yl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBHdGtB
bGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdl
dF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICB3
ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgZm9ybVdpdGhUZXh0SW5wdXRzLCAw
LCAwLCAwKTsKLQotICAgIEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJW
aWV3KTsKLSAgICBnX2Fzc2VydChvYmplY3QpOwotCi0gICAgQXRrT2JqZWN0KiBmb3JtID0gYXRr
X29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDApOwotICAgIGdfYXNzZXJ0KEFU
S19JU19PQkpFQ1QoZm9ybSkpOwotCi0gICAgLyogRmlyc3QgY2hlY2sgbm9ybWFsIHRleHQgZW50
cmllcy4gKi8KLSAgICBBdGtPYmplY3QqIHRleHRFbnRyeSA9IGF0a19vYmplY3RfcmVmX2FjY2Vz
c2libGVfY2hpbGQoZm9ybSwgMCk7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX0VESVRBQkxFX1RFWFQo
dGV4dEVudHJ5KSk7Ci0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcm9sZShBVEtfT0JKRUNU
KHRleHRFbnRyeSkpID09IEFUS19ST0xFX0VOVFJZKTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
dGV4dEVudHJ5LCAidGV4dC1pbnNlcnQiLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFD
Syh0ZXh0Q2hhbmdlZENiKSwKLSAgICAgICAgICAgICAgICAgICAgIEdJTlRfVE9fUE9JTlRFUihU
RVhUX0NIQU5HRV9JTlNFUlQpKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHRleHRFbnRyeSwgInRl
eHQtcmVtb3ZlIiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sodGV4dENoYW5nZWRD
YiksCi0gICAgICAgICAgICAgICAgICAgICBHSU5UX1RPX1BPSU5URVIoVEVYVF9DSEFOR0VfUkVN
T1ZFKSk7Ci0KLSAgICBnaW50IHBvcyA9IDA7Ci0gICAgYXRrX2VkaXRhYmxlX3RleHRfaW5zZXJ0
X3RleHQoQVRLX0VESVRBQkxFX1RFWFQodGV4dEVudHJ5KSwgImZvbyBiYXIgYmF6IiwgMTEsICZw
b3MpOwotICAgIGNoYXIqIHRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dChBVEtfVEVYVCh0ZXh0RW50
cnkpLCAwLCAtMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiZm9vIGJhciBiYXoi
KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4dENoYW5nZWRSZXN1bHQsID09LCAifDF8MHwxMXwn
Zm9vIGJhciBiYXonfCIpOwotICAgIGdfZnJlZSh0ZXh0KTsKLQotICAgIGF0a19lZGl0YWJsZV90
ZXh0X2RlbGV0ZV90ZXh0KEFUS19FRElUQUJMRV9URVhUKHRleHRFbnRyeSksIDQsIDcpOwotICAg
IHRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dChBVEtfVEVYVCh0ZXh0RW50cnkpLCAwLCAtMSk7Ci0g
ICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiZm9vICBiYXoiKTsKLSAgICBnX2Fzc2VydF9j
bXBzdHIodGV4dENoYW5nZWRSZXN1bHQsID09LCAifDJ8NHwzfCdiYXInfCIpOwotICAgIGdfZnJl
ZSh0ZXh0KTsKLQotICAgIHBvcyA9IDQ7Ci0gICAgYXRrX2VkaXRhYmxlX3RleHRfaW5zZXJ0X3Rl
eHQoQVRLX0VESVRBQkxFX1RFWFQodGV4dEVudHJ5KSwgInF1eCBxdXV4IHRvYmVpZ25vcmVkIiwg
OCwgJnBvcyk7Ci0gICAgdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0KEFUS19URVhUKHRleHRFbnRy
eSksIDAsIC0xKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJmb28gcXV4IHF1dXgg
YmF6Iik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHRDaGFuZ2VkUmVzdWx0LCA9PSwgInwxfDR8
OHwncXV4IHF1dXgnfCIpOwotICAgIGdfZnJlZSh0ZXh0KTsKLQotICAgIC8qIE5vdyBjaGVjayBm
b3IgcGFzc3dvcmQgZW50cmllcy4gKi8KLSAgICBBdGtPYmplY3QqIHBhc3N3b3JkRW50cnkgPSBh
dGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZvcm0sIDEpOwotICAgIGdfYXNzZXJ0KEFU
S19JU19FRElUQUJMRV9URVhUKHBhc3N3b3JkRW50cnkpKTsKLSAgICBnX2Fzc2VydChhdGtfb2Jq
ZWN0X2dldF9yb2xlKEFUS19PQkpFQ1QocGFzc3dvcmRFbnRyeSkpID09IEFUS19ST0xFX1BBU1NX
T1JEX1RFWFQpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdChwYXNzd29yZEVudHJ5LCAidGV4dC1p
bnNlcnQiLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyh0ZXh0Q2hhbmdlZENiKSwK
LSAgICAgICAgICAgICAgICAgICAgIEdJTlRfVE9fUE9JTlRFUihURVhUX0NIQU5HRV9JTlNFUlQp
KTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHBhc3N3b3JkRW50cnksICJ0ZXh0LXJlbW92ZSIsCi0g
ICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKHRleHRDaGFuZ2VkQ2IpLAotICAgICAgICAg
ICAgICAgICAgICAgR0lOVF9UT19QT0lOVEVSKFRFWFRfQ0hBTkdFX1JFTU9WRSkpOwotCi0gICAg
cG9zID0gMDsKLSAgICAvKiBBIHNpbmdsZSBidWxsZXQgY2hhcmFjdGVyIGlzICdcMzQyXDIwMFwy
NDInICovCi0gICAgYXRrX2VkaXRhYmxlX3RleHRfaW5zZXJ0X3RleHQoQVRLX0VESVRBQkxFX1RF
WFQocGFzc3dvcmRFbnRyeSksICJmb29iYXIiLCA2LCAmcG9zKTsKLSAgICBnX2Fzc2VydF9jbXBz
dHIodGV4dENoYW5nZWRSZXN1bHQsID09LCAifDF8MHw2fCdcMzQyXDIwMFwyNDJcMzQyXDIwMFwy
NDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDInfCIpOwot
ICAgIHRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dChBVEtfVEVYVChwYXNzd29yZEVudHJ5KSwgMCwg
LTEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgIlwzNDJcMjAwXDI0MlwzNDJcMjAw
XDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MiIpOwot
ICAgIGdfZnJlZSh0ZXh0KTsKLQotICAgIGF0a19lZGl0YWJsZV90ZXh0X2RlbGV0ZV90ZXh0KEFU
S19FRElUQUJMRV9URVhUKHBhc3N3b3JkRW50cnkpLCAyLCA0KTsKLSAgICBnX2Fzc2VydF9jbXBz
dHIodGV4dENoYW5nZWRSZXN1bHQsID09LCAifDJ8MnwyfCdcMzQyXDIwMFwyNDJcMzQyXDIwMFwy
NDInfCIpOwotCi0gICAgdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0KEFUS19URVhUKHBhc3N3b3Jk
RW50cnkpLCAwLCAtMSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiXDM0MlwyMDBc
MjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyXDM0MlwyMDBcMjQyIik7Ci0gICAgZ19mcmVlKHRl
eHQpOwotCi0gICAgcG9zID0gMzsKLSAgICBhdGtfZWRpdGFibGVfdGV4dF9pbnNlcnRfdGV4dChB
VEtfRURJVEFCTEVfVEVYVChwYXNzd29yZEVudHJ5KSwgInF1eCB0b2JlaWdub3JlZCIsIDMsICZw
b3MpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0Q2hhbmdlZFJlc3VsdCwgPT0sICJ8MXwzfDN8
J1wzNDJcMjAwXDI0MlwzNDJcMjAwXDI0MlwzNDJcMjAwXDI0Mid8Iik7Ci0KLSAgICB0ZXh0ID0g
YXRrX3RleHRfZ2V0X3RleHQoQVRLX1RFWFQocGFzc3dvcmRFbnRyeSksIDAsIC0xKTsKLSAgICBn
X2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sICJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIw
MFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDJcMzQyXDIwMFwyNDIiKTsK
LSAgICBnX2ZyZWUodGV4dCk7Ci0KLSAgICBnX2ZyZWUodGV4dENoYW5nZWRSZXN1bHQpOwotCi0g
ICAgZ19vYmplY3RfdW5yZWYoZm9ybSk7Ci0gICAgZ19vYmplY3RfdW5yZWYodGV4dEVudHJ5KTsK
LSAgICBnX29iamVjdF91bnJlZihwYXNzd29yZEVudHJ5KTsKLSAgICBnX29iamVjdF91bnJlZih3
ZWJWaWV3KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a1BhcmVudEZvclJvb3RPYmpl
Y3QoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Vi
a2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAs
IDAsIDgwMCwgNjAwIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQo
d2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmco
d2ViVmlldywgY29udGVudHMsIDAsIDAsIDApOwotCi0gICAgLyogV2UgbmVlZCBhIHBhcmVudCBj
b250YWluZXIgd2lkZ2V0IGZvciB0aGUgd2Vidmlldy4gKi8KLSAgICBHdGtXaWRnZXQqIHBhcmVu
dENvbnRhaW5lciA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwotICAgIGdf
b2JqZWN0X3JlZl9zaW5rKHBhcmVudENvbnRhaW5lcik7Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQo
R1RLX0NPTlRBSU5FUihwYXJlbnRDb250YWluZXIpLCBHVEtfV0lER0VUKHdlYlZpZXcpKTsKLQot
ICAgIEF0a09iamVjdCogYXhQYXJlbnQgPSBndGtfd2lkZ2V0X2dldF9hY2Nlc3NpYmxlKHBhcmVu
dENvbnRhaW5lcik7Ci0gICAgZ19hc3NlcnQoQVRLX0lTX09CSkVDVChheFBhcmVudCkpOwotCi0g
ICAgQXRrT2JqZWN0KiBheFJvb3QgPSBndGtfd2lkZ2V0X2dldF9hY2Nlc3NpYmxlKEdUS19XSURH
RVQod2ViVmlldykpOwotICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QoYXhSb290KSk7Ci0KLSAg
ICAvKiBUaGUgY2hpbGQgZm9yIHRoZSBwYXJlbnQgY29udGFpbmVyJ3MgYWNjZXNzaWJpbGl0eSBv
YmplY3QKLSAgICAgICBzaG91bGQgYmUgdGhlIGFjY2Vzc2liaWxpdHkgb2JqZWN0IGZvciB0aGUg
V2ViVmlldydzIHJvb3QuICovCi0gICAgQXRrT2JqZWN0KiBheFBhcmVudENoaWxkID0gYXRrX29i
amVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChheFBhcmVudCwgMCk7Ci0gICAgZ19hc3NlcnQoYXhQ
YXJlbnRDaGlsZCA9PSBheFJvb3QpOwotCi0gICAgLyogQm90dG9tLXVwIG5hdmlnYXRpb24gc2hv
dWxkIG1hdGNoIHRvcC1kb3duIG9uZS4gKi8KLSAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9w
YXJlbnQoYXhQYXJlbnRDaGlsZCkgPT0gYXhQYXJlbnQpOwotCi0gICAgZ19vYmplY3RfdW5yZWYo
YXhQYXJlbnRDaGlsZCk7Ci0gICAgZ19vYmplY3RfdW5yZWYocGFyZW50Q29udGFpbmVyKTsKLX0K
LQotc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a1NldFBhcmVudEZvck9iamVjdCgpCi17Ci0gICAg
V2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdf
bmV3KCkpOwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAg
fTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFs
bG9jYXRpb24pOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBjb250
ZW50cywgMCwgMCwgMCk7Ci0KLSAgICAvKiBQdXQgdGhlIHdlYnZpZXcgaW4gYSBwYXJlbnQgY29u
dGFpbmVyIHdpZGdldCB0byBjaGVjayB0aGF0IHRoZQotICAgICAgIG5vcm1hbCBiZWhhdmlvdXIg
a2VlcHMgd29ya2luZyBhcyBleHBlY3RlZCBieSBkZWZhdWx0LiAqLwotICAgIEd0a1dpZGdldCog
cGFyZW50Q29udGFpbmVyID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7Ci0g
ICAgZ19vYmplY3RfcmVmX3NpbmsocGFyZW50Q29udGFpbmVyKTsKLSAgICBndGtfY29udGFpbmVy
X2FkZChHVEtfQ09OVEFJTkVSKHBhcmVudENvbnRhaW5lciksIEdUS19XSURHRVQod2ViVmlldykp
OwotCi0gICAgQXRrT2JqZWN0KiBheFJvb3QgPSBndGtfd2lkZ2V0X2dldF9hY2Nlc3NpYmxlKEdU
S19XSURHRVQod2ViVmlldykpOwotICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QoYXhSb290KSk7
Ci0KLSAgICBBdGtPYmplY3QqIGF4UGFyZW50ID0gZ3RrX3dpZGdldF9nZXRfYWNjZXNzaWJsZShw
YXJlbnRDb250YWluZXIpOwotICAgIGdfYXNzZXJ0KEFUS19JU19PQkpFQ1QoYXhQYXJlbnQpKTsK
LQotICAgIC8qIFRoZSBwYXJlbnQgb2YgdGhlIHJvb3Qgb2JqZWN0IGlzIHRoZSBwYXJlbnQgY29u
dGFpbmVyJ3MgYTExeSBvYmplY3QuICovCi0gICAgZ19hc3NlcnQoYXRrX29iamVjdF9nZXRfcGFy
ZW50KGF4Um9vdCkgPT0gYXhQYXJlbnQpOwotCi0gICAgLyogV2Ugbm93IG5lZWQgdG8gdXNlIHNv
bWV0aGluZyBhcyBhIGFuIGFsdGVybmF0aXZlIHBhcmVudCBmb3IKLSAgICAgICB0aGUgYTExeSBv
YmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSByb290IG9mIHRoZSBET00gdHJlZS4gKi8KLSAgICBH
dGtXaWRnZXQqIGFsdGVybmF0aXZlUGFyZW50ID0gZ3RrX2J1dHRvbl9uZXcoKTsKLSAgICBnX29i
amVjdF9yZWZfc2luayhhbHRlcm5hdGl2ZVBhcmVudCk7Ci0KLSAgICBBdGtPYmplY3QqIGF4QWx0
ZXJuYXRpdmVQYXJlbnQgPSBndGtfd2lkZ2V0X2dldF9hY2Nlc3NpYmxlKGFsdGVybmF0aXZlUGFy
ZW50KTsKLSAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKGF4QWx0ZXJuYXRpdmVQYXJlbnQpKTsK
LQotICAgIC8qIE1hbnVhbGx5IHNldCB0aGUgYWx0ZXJuYXRpdmUgcGFyZW50J3MgYWNjZXNzaWJp
bGl0eSBvYmplY3QgYXMKLSAgICAgICB0aGUgcGFyZW50IGZvciB0aGUgV2ViS2l0IGFjY2Vzc2li
aWxpdHkgcm9vdCBvYmplY3QgYW5kIGNoZWNrLiAqLwotICAgIGF0a19vYmplY3Rfc2V0X3BhcmVu
dChheFJvb3QsIGF4QWx0ZXJuYXRpdmVQYXJlbnQpOwotICAgIGdfYXNzZXJ0KGF0a19vYmplY3Rf
Z2V0X3BhcmVudChheFJvb3QpID09IGF4QWx0ZXJuYXRpdmVQYXJlbnQpOwotCi0gICAgZ19vYmpl
Y3RfdW5yZWYoYWx0ZXJuYXRpdmVQYXJlbnQpOwotICAgIGdfb2JqZWN0X3VucmVmKHBhcmVudENv
bnRhaW5lcik7Ci19Ci0KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotc3RhdGljIHZvaWQgaW5p
dGlhbGl6ZVRlc3RpbmdGcmFtZXdvcmsoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIC8q
IEVuc3VyZSBHQUlMIGlzIHRoZSBvbmx5IG1vZHVsZSBsb2FkZWQuICovCi0gICAgZ19zZXRlbnYo
IkdUS19NT0RVTEVTIiwgImdhaWwiLCBUUlVFKTsKLQotICAgIC8qIEZvbGxvd2luZyBsaW5lcyB3
ZXJlIHRha2VuIGZyb20gZ3RrX3Rlc3RfaW5pdCgpLiAqLwotICAgIGdfdGVzdF9pbml0KCZhcmdj
LCAmYXJndiwgMCk7Ci0gICAgZ3RrX2Rpc2FibGVfc2V0bG9jYWxlKCk7Ci0gICAgc2V0bG9jYWxl
KExDX0FMTCwgIkMiKTsKLQotICAgIGd0a19pbml0KCZhcmdjLCAmYXJndik7Ci19Ci0jZW5kaWYK
LQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotI2lmZGVmIEdUS19BUElfVkVS
U0lPTl8yCi0gICAgLyogV2UgY2FuJ3QganVzdCBjYWxsIHRvIGd0a190ZXN0X2luaXQoKSBpbiB0
aGlzIGNhc2UgYmVjYXVzZSBpdHMKLSAgICAgICBpbXBsZW1lbnRhdGlvbiBtYWtlcyBzdXJlIHRo
YXQgbm8gR1RLKyBtb2R1bGUgd2lsbCBiZSBsb2FkZWQsIGFuZAotICAgICAgIHdlIHdpbGwgbmVl
ZCB0byBsb2FkIEdBSUwgZm9yIHRlc3RzIHRoYXQgbmVlZCB0byB1c2UgQXRrT2JqZWN0cwotICAg
ICAgIGZyb20gbm9uLVdlYktpdCBHdGtXaWRnZXRzIChlLmcgcGFyZW50Rm9yUm9vdE9iamVjdCku
Ki8KLSAgICBpbml0aWFsaXplVGVzdGluZ0ZyYW1ld29yayhhcmdjLCBhcmd2KTsKLSNlbHNlCi0g
ICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotI2VuZGlmCi0KLSAgICBnX3Rl
c3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9hZGRf
ZnVuYygiL3dlYmtpdC9hdGsvY2FyZXRPZmZzZXRzIiwgdGVzdFdlYmtpdEF0a0NhcmV0T2Zmc2V0
cyk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9jYXJldE9mZnNldHNBbmRFeHRy
YW5vdXNXaGl0ZVNwYWNlcyIsIHRlc3RXZWJraXRBdGtDYXJldE9mZnNldHNBbmRFeHRyYW5vdXNX
aGl0ZVNwYWNlcyk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9jb21ib0JveCIs
IHRlc3RXZWJraXRBdGtDb21ib0JveCk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0
ay9kb2N1bWVudExvYWRpbmdFdmVudHMiLCB0ZXN0V2Via2l0QXRrRG9jdW1lbnRMb2FkaW5nRXZl
bnRzKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2VtYmVkZGVkT2JqZWN0cyIs
IHRlc3RXZWJraXRBdGtFbWJlZGRlZE9iamVjdHMpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dl
YmtpdC9hdGsvZ2V0SGVhZGVyc0luVGFibGUiLCB0ZXN0V2Via2l0QXRrR2V0SGVhZGVyc0luVGFi
bGUpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvdGV4dEF0dHJpYnV0ZXMiLCB0
ZXN0V2Via2l0QXRrVGV4dEF0dHJpYnV0ZXMpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtp
dC9hdGsvdGV4dFNlbGVjdGlvbnMiLCB0ZXN0V2Via2l0QXRrVGV4dFNlbGVjdGlvbnMpOwotICAg
IGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvZ2V0RXh0ZW50cyIsIHRlc3RXZWJraXRBdGtH
ZXRFeHRlbnRzKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2h5cGVydGV4dEFu
ZEh5cGVybGlua3MiLCB0ZXN0V2Via2l0QXRrSHlwZXJ0ZXh0QW5kSHlwZXJsaW5rcyk7Ci0gICAg
Z190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9sYXlvdXRBbmREYXRhVGFibGVzIiwgdGVzdFdl
YmtpdEF0a0xheW91dEFuZERhdGFUYWJsZXMpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtp
dC9hdGsvbGlua3NXaXRoSW5saW5lSW1hZ2VzIiwgdGVzdFdlYmtpdEF0a0xpbmtzV2l0aElubGlu
ZUltYWdlcyk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9saXN0c09mSXRlbXMi
LCB0ZXN0V2Via2l0QXRrTGlzdHNPZkl0ZW1zKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJr
aXQvYXRrL3RleHRDaGFuZ2VkTm90aWZpY2F0aW9ucyIsIHRlc3RXZWJraXRBdGtUZXh0Q2hhbmdl
ZE5vdGlmaWNhdGlvbnMpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvcGFyZW50
Rm9yUm9vdE9iamVjdCIsIHRlc3RXZWJraXRBdGtQYXJlbnRGb3JSb290T2JqZWN0KTsKLSAgICBn
X3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL3NldFBhcmVudEZvck9iamVjdCIsIHRlc3RXZWJr
aXRBdGtTZXRQYXJlbnRGb3JPYmplY3QpOwotICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwotfQot
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0YXRr
cm9sZXMuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RhdGtyb2xl
cy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODgxN2NmOGFlOWZjYWI0NTcxMTFl
ZWVkMGM2ZmNlNDI5NTcxMTk4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RhdGtyb2xl
cy5jCisrKyAvZGV2L251bGwKQEAgLTEsNDI2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgwqkg
MjAxMCBKb2FubWFyaWUgRGlnZ3MKLSAqIENvcHlyaWdodCDCqSAyMDEwIElnYWxpYSBTLkwuCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3Rk
aW8uaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgot
Ci0vKiBOb24gZm9ybSByb2xlcyAqLwotI2RlZmluZSBIVE1MX0RPQ1VNRU5UX0ZSQU1FICI8aHRt
bD48Ym9keT5UaGlzIGlzIGEgdGVzdC48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRNTF9IRUFE
SU5HICI8aHRtbD48Ym9keT48aDE+MTwvaDE+PGgyPjI8L2gyPjxoMz4zPC9oMz48aDQ+NDwvaDQ+
PGg1PjU8L2g1PjxoNj42PC9oNj48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRNTF9JTUFHRSAi
PGh0bWw+PGJvZHk+PGltZyBzcmM9J2Zvb2Jhci5wbmcnIGFsdD0nVGhpcyBpcyBhIHRlc3QuJy8+
PC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxfTElOS19URVhUICI8aHRtbD48Ym9keT48YSBo
cmVmPSdmb29iYXIuaHRtbCc+VGhpcyBpcyBhIHRlc3QuPC9hPjwvYm9keT48L2h0bWw+IgotI2Rl
ZmluZSBIVE1MX0xJU1QgIjxodG1sPjxib2R5Pjx1bD48bGk+MTwvbGk+PGxpPjI8L2xpPjwvdWw+
PG9sPjxsaT4xPC9saT48bGk+MjwvbGk+PC9vbD48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRN
TF9QQVJBR1JBUEggIjxodG1sPjxib2R5PjxwPlRoaXMgaXMgYSB0ZXN0LjwvcD48L2JvZHk+PC9o
dG1sPiIKLSNkZWZpbmUgSFRNTF9TRUNUSU9OICI8aHRtbD48Ym9keT48ZGl2PlRoaXMgaXMgYSB0
ZXN0LjwvZGl2PjwvYm9keT48L2h0bWw+IgotI2RlZmluZSBIVE1MX1RBQkxFICI8aHRtbD48Ym9k
eT48dGFibGUgYm9yZGVyPScxJz48dHI+PHRkPlRoaXMgaXM8L3RkPjx0ZD5hIHRlc3QuPC90ZD48
L3RyPjwvdGFibGU+PC9ib2R5PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxfU0VQQVJBVE9SICI8aHRt
bD48Ym9keT48aHIvPjwvYm9keT48L2h0bWw+IgotI2RlZmluZSBIVE1MX0NPTUJPQk9YICI8aHRt
bD48Ym9keT48c2VsZWN0IHNpemU9JzEnPjxvcHRpb24+b25lPC9vcHRpb24+PG9wdGlvbj50d288
L29wdGlvbj48b3B0aW9uPnRocmVlPC9vcHRpb24+PC9zZWxlY3Q+PC9ib2R5PjwvaHRtbD4iCi0v
KiBGb3JtIHJvbGVzICovCi0jZGVmaW5lIEhUTUxfRk9STSAiPGh0bWw+PGJvZHk+PGZvcm0+VGhp
cyBpcyBhIHRlc3QuPC9mb3JtPjwvYm9keT48L2h0bWw+IgotI2RlZmluZSBIVE1MX0NIRUNLX0JP
WCAiPGh0bWw+PGJvZHk+PGlucHV0IHR5cGU9J2NoZWNrYm94JyAvPlRoaXMgaXMgYSB0ZXN0Ljwv
Ym9keT48L2h0bWw+IgotI2RlZmluZSBIVE1MX0xBQkVMRURfRU5UUlkgIjxodG1sPjxib2R5Pjxs
YWJlbCBmb3I9J2Zvbyc+TmFtZTo8L2xhYmVsPjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nZm9vJyAv
PjwvYm9keT48L2h0bWw+IgotI2RlZmluZSBIVE1MX0xJU1RCT1ggIjxodG1sPjxib2R5PjxzZWxl
Y3Qgc2l6ZT0nMyc+PG9wdGlvbj5vbmU8L29wdGlvbj48b3B0aW9uPnR3bzwvb3B0aW9uPjxvcHRp
b24+dGhyZWU8L29wdGlvbj48L3NlbGVjdD48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRNTF9Q
QVNTV09SRF9URVhUICI8aHRtbD48Ym9keT48aW5wdXQgdHlwZT0ncGFzc3dvcmQnIC8+PC9ib2R5
PjwvaHRtbD4iCi0jZGVmaW5lIEhUTUxfUFVTSF9CVVRUT04gIjxodG1sPjxib2R5PjxpbnB1dCB0
eXBlPSdzdWJtaXQnIHZhbHVlPSdvaycgLz5UaGlzIGlzIGEgdGVzdC48L2JvZHk+PC9odG1sPiIK
LSNkZWZpbmUgSFRNTF9SQURJT19CVVRUT04gIjxodG1sPjxib2R5PjxpbnB1dCB0eXBlPSdyYWRp
bycgLz5UaGlzIGlzIGEgdGVzdC48L2JvZHk+PC9odG1sPiIKLQotdHlwZWRlZiBzdHJ1Y3Qgewot
ICAgIEF0a09iamVjdCogZG9jdW1lbnQ7Ci0gICAgQXRrT2JqZWN0KiBvYmo7Ci0gICAgQXRrUm9s
ZSByb2xlOwotICAgIEd0a1dpZGdldCogd2ViVmlldzsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9j
OwotICAgIEdNYWluTG9vcCogbG9vcDsKLX0gQXRrUm9sZXNGaXh0dXJlOwotCi1zdGF0aWMgZ2Jv
b2xlYW4gZmluaXNoX2xvYWRpbmcoQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlKQotewotICAgIGlm
IChnX21haW5fbG9vcF9pc19ydW5uaW5nKGZpeHR1cmUtPmxvb3ApKQotICAgICAgICBnX21haW5f
bG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOwotCi0gICAgLy8gV2l0aCB0aGUgY2hhbmdlIHRvIHN1
cHBvcnQgV0syIGFjY2Vzc2liaWxpdHksIHRoZSByb290IG9iamVjdAotICAgIC8vIGhhcyBjaGFu
Z2VkIGFuZCBpdCdzIG5vIGxvbmdlciB0aGUgZG9jdW1lbnQgZnJhbWUsIGJ1dCBhIHNjcm9sbAot
ICAgIC8vIHBhbmUgY29udGFpbmluZyB0aGUgZG9jdW1lbnQgZnJhbWUgYXMgaXRzIG9ubHkgY2hp
bGQuIFNlZSB0aGUKLSAgICAvLyBidWcgNzIzOTAgZm9yIG1vcmUgZGV0YWlscyBvbiB0aGlzIGNo
YW5nZS4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIz
OTAKLSAgICBBdGtPYmplY3QqIHJvb3RPYmplY3QgPSBndGtfd2lkZ2V0X2dldF9hY2Nlc3NpYmxl
KGZpeHR1cmUtPndlYlZpZXcpOwotICAgIGZpeHR1cmUtPmRvY3VtZW50ID0gYXRrX29iamVjdF9y
ZWZfYWNjZXNzaWJsZV9jaGlsZChyb290T2JqZWN0LCAwKTsKLSAgICBnX2Fzc2VydChmaXh0dXJl
LT5kb2N1bWVudCk7Ci0KLSAgICAvLyBSZW1vdmUgdGhlIHJlZmVyZW5jZSBhZGRlZCBieSByZWZf
YWNjZXNzaWJsZV9jaGlsZCgpIGFuZAotICAgIC8vIHJldHVybiwgc2luY2Ugd2UgZG9uJ3QgbmVl
ZCB0byBrZWVwIHRoYXQgZXh0cmEgcmVmIGF0IGFsbC4KLSAgICBnX29iamVjdF91bnJlZihmaXh0
dXJlLT5kb2N1bWVudCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCBhdGtf
cm9sZXNfZml4dHVyZV9zZXR1cChBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50
ZXIgZGF0YSkKLXsKLSAgICBmaXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRS
VUUpOwotICAgIGZpeHR1cmUtPmFsbG9jID0gKEd0a0FsbG9jYXRpb24pIHsgMCwgMCwgODAwLCA2
MDAgfTsKLSAgICBmaXh0dXJlLT53ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOwotICAg
IGdfb2JqZWN0X3JlZl9zaW5rKGZpeHR1cmUtPndlYlZpZXcpOwotCi0gICAgZ3RrX3dpZGdldF9z
aXplX2FsbG9jYXRlKGZpeHR1cmUtPndlYlZpZXcsICZmaXh0dXJlLT5hbGxvYyk7Ci0KLSAgICBp
ZiAoZGF0YSAhPSBOVUxMKQotICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VC
S0lUX1dFQl9WSUVXIChmaXh0dXJlLT53ZWJWaWV3KSwgKGNvbnN0IGNoYXIqKSBkYXRhLCBOVUxM
LCBOVUxMLCBOVUxMKTsKLQotICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKSBmaW5pc2hfbG9h
ZGluZywgZml4dHVyZSk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOwotfQot
Ci1zdGF0aWMgdm9pZCBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bihBdGtSb2xlc0ZpeHR1cmUq
IGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnX29iamVjdF91bnJlZihmaXh0
dXJlLT53ZWJWaWV3KTsKLSAgICBnX21haW5fbG9vcF91bnJlZihmaXh0dXJlLT5sb29wKTsKLX0K
LQotc3RhdGljIHZvaWQgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoQXRrT2JqZWN0KiBvYmosIGdp
bnQgcG9zLCBBdGtSb2xlIHJvbGUpCi17Ci0gICAgQXRrT2JqZWN0KiBjaGlsZDsKLSAgICBBdGtS
b2xlIGNoaWxkX3JvbGU7Ci0KLSAgICBjaGlsZCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVf
Y2hpbGQob2JqLCBwb3MpOwotICAgIGdfYXNzZXJ0KGNoaWxkKTsKLSAgICBjaGlsZF9yb2xlID0g
YXRrX29iamVjdF9nZXRfcm9sZShjaGlsZCk7Ci0gICAgZ19hc3NlcnQoY2hpbGRfcm9sZSA9PSBy
b2xlKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGNoaWxkKTsKLX0KLQotc3RhdGljIHZvaWQgdGVz
dF93ZWJraXRfYXRrX2dldF9yb2xlX2RvY3VtZW50X2ZyYW1lKEF0a1JvbGVzRml4dHVyZSogZml4
dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGZpeHR1cmUtPnJvbGUgPSBhdGtfb2Jq
ZWN0X2dldF9yb2xlKGZpeHR1cmUtPmRvY3VtZW50KTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5y
b2xlID09IEFUS19ST0xFX0RPQ1VNRU5UX1dFQik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Vi
a2l0X2F0a19nZXRfcm9sZV9oZWFkaW5nKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0
cG9pbnRlciBkYXRhKQotewotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPmRv
Y3VtZW50LCAwLCBBVEtfUk9MRV9IRUFESU5HKTsKLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9s
ZShmaXh0dXJlLT5kb2N1bWVudCwgMSwgQVRLX1JPTEVfSEVBRElORyk7Ci0gICAgZ2V0X2NoaWxk
X2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDIsIEFUS19ST0xFX0hFQURJTkcpOwot
ICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1cmUtPmRvY3VtZW50LCAzLCBBVEtfUk9M
RV9IRUFESU5HKTsKLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5kb2N1bWVu
dCwgNCwgQVRLX1JPTEVfSEVBRElORyk7Ci0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4
dHVyZS0+ZG9jdW1lbnQsIDUsIEFUS19ST0xFX0hFQURJTkcpOwotfQotCi1zdGF0aWMgdm9pZCB0
ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfaW1hZ2UoQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBn
Y29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgLy8gVGhpcyBpcyBhbiBleHRyYW5lb3VzIG9iamVj
dCBvZiBBVEtfUk9MRV9QQU5FTCB3aGljaCB3ZSBzaG91bGQgZ2V0IHJpZCBvZi4KLSAgICBmaXh0
dXJlLT5vYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPmRvY3Vt
ZW50LCAwKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5vYmopOwotCi0gICAgZ2V0X2NoaWxkX2Fu
ZF90ZXN0X3JvbGUoZml4dHVyZS0+b2JqLCAwLCBBVEtfUk9MRV9JTUFHRSk7Ci0KLSAgICBnX29i
amVjdF91bnJlZihmaXh0dXJlLT5vYmopOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9h
dGtfZ2V0X3JvbGVfbGluayhBdGtSb2xlc0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIg
ZGF0YSkKLXsKLSAgICAvLyBUaGlzIGlzIGFuIGV4dHJhbmVvdXMgb2JqZWN0IG9mIEFUS19ST0xF
X1BBTkVMIHdoaWNoIHdlIHNob3VsZCBnZXQgcmlkIG9mLgotICAgIGZpeHR1cmUtPm9iaiA9IGF0
a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDApOwotICAg
IGdfYXNzZXJ0KGZpeHR1cmUtPm9iaik7Ci0KLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShm
aXh0dXJlLT5vYmosIDAsIEFUS19ST0xFX0xJTkspOwotCi0gICAgZ19vYmplY3RfdW5yZWYoZml4
dHVyZS0+b2JqKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xp
c3RfYW5kX2l0ZW0oQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEp
Ci17Ci0gICAgQXRrT2JqZWN0KiBsaXN0T2JqOwotCi0gICAgbGlzdE9iaiA9IGF0a19vYmplY3Rf
cmVmX2FjY2Vzc2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDApOwotICAgIGdfYXNzZXJ0
KGxpc3RPYmopOwotICAgIGZpeHR1cmUtPnJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKGxpc3RP
YmopOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPnJvbGUgPT0gQVRLX1JPTEVfTElTVCk7Ci0KLSAg
ICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShsaXN0T2JqLCAwLCBBVEtfUk9MRV9MSVNUX0lURU0p
OwotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGxpc3RPYmosIDEsIEFUS19ST0xFX0xJU1Rf
SVRFTSk7Ci0gICAgZ19vYmplY3RfdW5yZWYobGlzdE9iaik7Ci0KLSAgICBsaXN0T2JqID0gYXRr
X29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVudCwgMSk7Ci0gICAg
Z19hc3NlcnQobGlzdE9iaik7Ci0gICAgZml4dHVyZS0+cm9sZSA9IGF0a19vYmplY3RfZ2V0X3Jv
bGUobGlzdE9iaik7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+cm9sZSA9PSBBVEtfUk9MRV9MSVNU
KTsKLQotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGxpc3RPYmosIDAsIEFUS19ST0xFX0xJ
U1RfSVRFTSk7Ci0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUobGlzdE9iaiwgMSwgQVRLX1JP
TEVfTElTVF9JVEVNKTsKLSAgICBnX29iamVjdF91bnJlZihsaXN0T2JqKTsKLX0KLQotc3RhdGlj
IHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3BhcmFncmFwaChBdGtSb2xlc0ZpeHR1cmUq
IGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rf
cm9sZShmaXh0dXJlLT5kb2N1bWVudCwgMCwgQVRLX1JPTEVfUEFSQUdSQVBIKTsKLX0KLQotc3Rh
dGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3NlY3Rpb24oQXRrUm9sZXNGaXh0dXJl
KiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0
X3JvbGUoZml4dHVyZS0+ZG9jdW1lbnQsIDAsIEFUS19ST0xFX1NFQ1RJT04pOwotfQotCi0vLyBE
b2VzIG5vdCB5ZXQgdGVzdCB0YWJsZSBjZWxscyBiZWNhdXNlIG9mIGJ1ZyAzMDg5NS4KLXN0YXRp
YyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV90YWJsZShBdGtSb2xlc0ZpeHR1cmUqIGZp
eHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9s
ZShmaXh0dXJlLT5kb2N1bWVudCwgMCwgQVRLX1JPTEVfVEFCTEUpOwotfQotCi1zdGF0aWMgdm9p
ZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfc2VwYXJhdG9yKEF0a1JvbGVzRml4dHVyZSAqZml4
dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xl
KGZpeHR1cmUtPmRvY3VtZW50LCAwLCBBVEtfUk9MRV9TRVBBUkFUT1IpOwotfQotCi1zdGF0aWMg
dm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfY29tYm9ib3goQXRrUm9sZXNGaXh0dXJlICpm
aXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgQXRrT2JqZWN0KiBjb21ib2JveE1l
bnU7Ci0KLSAgICAvLyBUaGlzIGlzIGFuIGV4dHJhbmVvdXMgb2JqZWN0IG9mIEFUS19ST0xFX1BB
TkVMIHdoaWNoIHdlIHNob3VsZCBnZXQgcmlkIG9mLgotICAgIGZpeHR1cmUtPm9iaiA9IGF0a19v
YmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDApOwotICAgIGdf
YXNzZXJ0KGZpeHR1cmUtPm9iaik7Ci0KLSAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPm9iaiwgMCk7Ci0gICAgZ19hc3NlcnQoZml4dHVy
ZS0+b2JqKTsKLSAgICBmaXh0dXJlLT5yb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShmaXh0dXJl
LT5vYmopOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPnJvbGUgPT0gQVRLX1JPTEVfQ09NQk9fQk9Y
KTsKLQotICAgIGNvbWJvYm94TWVudSA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQo
Zml4dHVyZS0+b2JqLCAwKTsKLSAgICBnX2Fzc2VydChjb21ib2JveE1lbnUpOwotICAgIGZpeHR1
cmUtPnJvbGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKGNvbWJvYm94TWVudSk7Ci0gICAgZ19hc3Nl
cnQoZml4dHVyZS0+cm9sZSA9PSBBVEtfUk9MRV9NRU5VKTsKLQotICAgIGdldF9jaGlsZF9hbmRf
dGVzdF9yb2xlKGNvbWJvYm94TWVudSwgMCwgQVRLX1JPTEVfTUVOVV9JVEVNKTsKLSAgICBnZXRf
Y2hpbGRfYW5kX3Rlc3Rfcm9sZShjb21ib2JveE1lbnUsIDEsIEFUS19ST0xFX01FTlVfSVRFTSk7
Ci0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoY29tYm9ib3hNZW51LCAyLCBBVEtfUk9MRV9N
RU5VX0lURU0pOwotCi0gICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+b2JqKTsKLSAgICBnX29i
amVjdF91bnJlZihjb21ib2JveE1lbnUpOwotfQotCi0vKiBGb3JtIHJvbGVzICovCi1zdGF0aWMg
dm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfZm9ybShBdGtSb2xlc0ZpeHR1cmUgKmZpeHR1
cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShm
aXh0dXJlLT5kb2N1bWVudCwgMCwgQVRLX1JPTEVfRk9STSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3Rfd2Via2l0X2F0a19nZXRfcm9sZV9jaGVja19ib3goQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJl
LCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgLy8gVGhpcyBpcyBhbiBleHRyYW5lb3VzIG9i
amVjdCBvZiBBVEtfUk9MRV9QQU5FTCB3aGljaCB3ZSBzaG91bGQgZ2V0IHJpZCBvZi4KLSAgICBm
aXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPmRv
Y3VtZW50LCAwKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5vYmopOwotCi0gICAgZ2V0X2NoaWxk
X2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+b2JqLCAwLCBBVEtfUk9MRV9DSEVDS19CT1gpOwotCi0g
ICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+b2JqKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93
ZWJraXRfYXRrX2dldF9yb2xlX2VudHJ5KEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0
cG9pbnRlciBkYXRhKQotewotICAgIC8vIFRoaXMgaXMgYW4gZXh0cmFuZW91cyBvYmplY3Qgb2Yg
QVRLX1JPTEVfUEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQgb2YuCi0gICAgZml4dHVyZS0+
b2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVudCwg
MCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+b2JqKTsKLQotICAgIGdldF9jaGlsZF9hbmRfdGVz
dF9yb2xlKGZpeHR1cmUtPm9iaiwgMSwgQVRLX1JPTEVfRU5UUlkpOwotCi0gICAgZ19vYmplY3Rf
dW5yZWYoZml4dHVyZS0+b2JqKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dl
dF9yb2xlX2xhYmVsKEF0a1JvbGVzRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRh
KQotewotICAgIC8vIFRoaXMgaXMgYW4gZXh0cmFuZW91cyBvYmplY3Qgb2YgQVRLX1JPTEVfUEFO
RUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQgb2YuCi0gICAgZml4dHVyZS0+b2JqID0gYXRrX29i
amVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1bWVudCwgMCk7Ci0gICAgZ19h
c3NlcnQoZml4dHVyZS0+b2JqKTsKLQotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGZpeHR1
cmUtPm9iaiwgMCwgQVRLX1JPTEVfTEFCRUwpOwotCi0gICAgZ19vYmplY3RfdW5yZWYoZml4dHVy
ZS0+b2JqKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2xpc3Ri
b3goQXRrUm9sZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAg
QXRrT2JqZWN0KiBsaXN0Ym94T2JqOwotICAgIC8vIFRoaXMgaXMgYW4gZXh0cmFuZW91cyBvYmpl
Y3Qgb2YgQVRLX1JPTEVfUEFORUwgd2hpY2ggd2Ugc2hvdWxkIGdldCByaWQgb2YuCi0gICAgZml4
dHVyZS0+b2JqID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChmaXh0dXJlLT5kb2N1
bWVudCwgMCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+b2JqKTsKLQotICAgIGxpc3Rib3hPYmog
PSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGZpeHR1cmUtPm9iaiwgMCk7Ci0gICAg
Z19hc3NlcnQobGlzdGJveE9iaik7Ci0gICAgZml4dHVyZS0+cm9sZSA9IGF0a19vYmplY3RfZ2V0
X3JvbGUobGlzdGJveE9iaik7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+cm9sZSA9PSBBVEtfUk9M
RV9MSVNUKTsKLQotICAgIGdldF9jaGlsZF9hbmRfdGVzdF9yb2xlKGxpc3Rib3hPYmosIDAsIEFU
S19ST0xFX0xJU1RfSVRFTSk7Ci0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUobGlzdGJveE9i
aiwgMSwgQVRLX1JPTEVfTElTVF9JVEVNKTsKLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShs
aXN0Ym94T2JqLCAyLCBBVEtfUk9MRV9MSVNUX0lURU0pOwotCi0gICAgZ19vYmplY3RfdW5yZWYo
Zml4dHVyZS0+b2JqKTsKLSAgICBnX29iamVjdF91bnJlZihsaXN0Ym94T2JqKTsKLX0KLQotc3Rh
dGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3Bhc3N3b3JkX3RleHQoQXRrUm9sZXNG
aXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgLy8gVGhpcyBpcyBh
biBleHRyYW5lb3VzIG9iamVjdCBvZiBBVEtfUk9MRV9QQU5FTCB3aGljaCB3ZSBzaG91bGQgZ2V0
IHJpZCBvZi4KLSAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2No
aWxkKGZpeHR1cmUtPmRvY3VtZW50LCAwKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5vYmopOwot
Ci0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+b2JqLCAwLCBBVEtfUk9MRV9Q
QVNTV09SRF9URVhUKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Ci19Ci0K
LXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9wdXNoX2J1dHRvbihBdGtSb2xl
c0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICAvLyBUaGlzIGlz
IGFuIGV4dHJhbmVvdXMgb2JqZWN0IG9mIEFUS19ST0xFX1BBTkVMIHdoaWNoIHdlIHNob3VsZCBn
ZXQgcmlkIG9mLgotICAgIGZpeHR1cmUtPm9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVf
Y2hpbGQoZml4dHVyZS0+ZG9jdW1lbnQsIDApOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPm9iaik7
Ci0KLSAgICBnZXRfY2hpbGRfYW5kX3Rlc3Rfcm9sZShmaXh0dXJlLT5vYmosIDAsIEFUS19ST0xF
X1BVU0hfQlVUVE9OKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm9iaik7Ci19Ci0K
LXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9yYWRpb19idXR0b24oQXRrUm9s
ZXNGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgLy8gVGhpcyBp
cyBhbiBleHRyYW5lb3VzIG9iamVjdCBvZiBBVEtfUk9MRV9QQU5FTCB3aGljaCB3ZSBzaG91bGQg
Z2V0IHJpZCBvZi4KLSAgICBmaXh0dXJlLT5vYmogPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxl
X2NoaWxkKGZpeHR1cmUtPmRvY3VtZW50LCAwKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5vYmop
OwotCi0gICAgZ2V0X2NoaWxkX2FuZF90ZXN0X3JvbGUoZml4dHVyZS0+b2JqLCAwLCBBVEtfUk9M
RV9SQURJT19CVVRUT04pOwotCi0gICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+b2JqKTsKLX0K
LQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIGd0a190ZXN0X2luaXQo
JmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvIik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtp
dF9hdGtfZ2V0X3JvbGVfZG9jdW1lbnRfZnJhbWUiLAotICAgICAgICAgICAgICAgQXRrUm9sZXNG
aXh0dXJlLCBIVE1MX0RPQ1VNRU5UX0ZSQU1FLAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2Zp
eHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfZG9j
dW1lbnRfZnJhbWUsCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7
Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVf
aGVhZGluZyIsCi0gICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfSEVBRElORywK
LSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAg
dGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2hlYWRpbmcsCi0gICAgICAgICAgICAgICBhdGtfcm9s
ZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0
X3dlYmtpdF9hdGtfZ2V0X3JvbGVfaW1hZ2UiLAotICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0
dXJlLCBIVE1MX0lNQUdFLAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAs
Ci0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfaW1hZ2UsCi0gICAgICAg
ICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIv
d2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfbGluayIsCi0gICAgICAgICAgICAg
ICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfTElOS19URVhULAotICAgICAgICAgICAgICAgYXRrX3Jv
bGVzX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3Jv
bGVfbGluaywKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3RlYXJkb3duKTsKLQot
ICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9saXN0
X2FuZF9pdGVtIiwKLSAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9MSVNULAot
ICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0
ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfbGlzdF9hbmRfaXRlbSwKLSAgICAgICAgICAgICAgIGF0
a19yb2xlc19maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRr
L3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9wYXJhZ3JhcGgiLAotICAgICAgICAgICAgICAgQXRr
Um9sZXNGaXh0dXJlLCBIVE1MX1BBUkFHUkFQSCwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19m
aXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3Bh
cmFncmFwaCwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3RlYXJkb3duKTsKLQot
ICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9zZWN0
aW9uIiwKLSAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9TRUNUSU9OLAotICAg
ICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0
X3dlYmtpdF9hdGtfZ2V0X3JvbGVfc2VjdGlvbiwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19m
aXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Vi
a2l0X2F0a19nZXRfcm9sZV90YWJsZSIsCi0gICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUs
IEhUTUxfVEFCTEUsCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKLSAg
ICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV90YWJsZSwKLSAgICAgICAgICAg
ICAgIGF0a19yb2xlc19maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJr
aXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9zZXBhcmF0b3IiLAotICAgICAgICAgICAg
ICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX1NFUEFSQVRPUiwKLSAgICAgICAgICAgICAgIGF0a19y
b2xlc19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9y
b2xlX3NlcGFyYXRvciwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3RlYXJkb3du
KTsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9s
ZV9jb21ib2JveCIsCi0gICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfQ09NQk9C
T1gsCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAg
ICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9jb21ib2JveCwKLSAgICAgICAgICAgICAgIGF0
a19yb2xlc19maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIC8qIEZvcm0gcm9sZXMgKi8KLSAgICBn
X3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfZm9ybSIsCi0g
ICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfRk9STSwKLSAgICAgICAgICAgICAg
IGF0a19yb2xlc19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfYXRr
X2dldF9yb2xlX2Zvcm0sCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93
bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9hdGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xl
X2NoZWNrX2JveCIsCi0gICAgICAgICAgICAgICBBdGtSb2xlc0ZpeHR1cmUsIEhUTUxfQ0hFQ0tf
Qk9YLAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAg
ICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfY2hlY2tfYm94LAotICAgICAgICAgICAgICAg
YXRrX3JvbGVzX2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9h
dGsvdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX2VudHJ5IiwKLSAgICAgICAgICAgICAgIEF0a1Jv
bGVzRml4dHVyZSwgSFRNTF9MQUJFTEVEX0VOVFJZLAotICAgICAgICAgICAgICAgYXRrX3JvbGVz
X2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVf
ZW50cnksCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAg
ICBnX3Rlc3RfYWRkKCIvd2Via2l0L2F0ay90ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfbGFiZWwi
LAotICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX0xBQkVMRURfRU5UUlksCi0g
ICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRl
c3Rfd2Via2l0X2F0a19nZXRfcm9sZV9sYWJlbCwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19m
aXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Vi
a2l0X2F0a19nZXRfcm9sZV9saXN0Ym94IiwKLSAgICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVy
ZSwgSFRNTF9MSVNUQk9YLAotICAgICAgICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAs
Ci0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF9hdGtfZ2V0X3JvbGVfbGlzdGJveCwKLSAgICAg
ICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9hZGQo
Ii93ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9wYXNzd29yZF90ZXh0IiwKLSAg
ICAgICAgICAgICAgIEF0a1JvbGVzRml4dHVyZSwgSFRNTF9QQVNTV09SRF9URVhULAotICAgICAg
ICAgICAgICAgYXRrX3JvbGVzX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dl
YmtpdF9hdGtfZ2V0X3JvbGVfcGFzc3dvcmRfdGV4dCwKLSAgICAgICAgICAgICAgIGF0a19yb2xl
c19maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rf
d2Via2l0X2F0a19nZXRfcm9sZV9wdXNoX2J1dHRvbiIsCi0gICAgICAgICAgICAgICBBdGtSb2xl
c0ZpeHR1cmUsIEhUTUxfUFVTSF9CVVRUT04sCi0gICAgICAgICAgICAgICBhdGtfcm9sZXNfZml4
dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9wdXNo
X2J1dHRvbiwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3RlYXJkb3duKTsKLQot
ICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvYXRrL3Rlc3Rfd2Via2l0X2F0a19nZXRfcm9sZV9yYWRp
b19idXR0b24iLAotICAgICAgICAgICAgICAgQXRrUm9sZXNGaXh0dXJlLCBIVE1MX1JBRElPX0JV
VFRPTiwKLSAgICAgICAgICAgICAgIGF0a19yb2xlc19maXh0dXJlX3NldHVwLAotICAgICAgICAg
ICAgICAgdGVzdF93ZWJraXRfYXRrX2dldF9yb2xlX3JhZGlvX2J1dHRvbiwKLSAgICAgICAgICAg
ICAgIGF0a19yb2xlc19maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIHJldHVybiBnX3Rlc3RfcnVu
KCk7Ci19CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90
ZXN0Y29udGV4dG1lbnUuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rl
c3Rjb250ZXh0bWVudS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NGFhYTU3MTk2
MWNmNjExNzZmYzljZjRlNDhjYjkzOTY1YTg1NTVmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3Rr
L3Rlc3Rjb250ZXh0bWVudS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzE0ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBjaGFyICpk
YXRhOwotICAgIGd1aW50IGZsYWc7Ci19IFRlc3RJbmZvOwotCi1zdGF0aWMgR01haW5Mb29wICps
b29wOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldzsKLSAg
ICBUZXN0SW5mbyAqaW5mbzsKLX0gQ29udGV4dE1lbnVGaXh0dXJlOwotCi1zdGF0aWMgVGVzdElu
Zm8gKnRlc3RJbmZvTmV3KGNvbnN0IGNoYXIgKmRhdGEsIGd1aW50IGZsYWcpCi17Ci0gICAgVGVz
dEluZm8gKmluZm8gPSBnX3NsaWNlX25ldyhUZXN0SW5mbyk7Ci0gICAgaW5mby0+ZGF0YSA9IGdf
c3RyZHVwKGRhdGEpOwotICAgIGluZm8tPmZsYWcgPSBmbGFnOwotCi0gICAgcmV0dXJuIGluZm87
Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RJbmZvRGVzdHJveShUZXN0SW5mbyAqaW5mbykKLXsKLSAg
ICBnX2ZyZWUoaW5mby0+ZGF0YSk7Ci0gICAgZ19zbGljZV9mcmVlKFRlc3RJbmZvLCBpbmZvKTsK
LX0KLQotc3RhdGljIHZvaWQgY29udGV4dE1lbnVGaXh0dXJlU2V0dXAoQ29udGV4dE1lbnVGaXh0
dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZml4dHVyZS0+d2ViVmll
dyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGxvb3AgPSBn
X21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0gICAgZml4dHVyZS0+aW5mbyA9IChUZXN0SW5m
byAqKWRhdGE7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbnRleHRNZW51Rml4dHVyZVRlYXJkb3duKENv
bnRleHRNZW51Rml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGdf
b2JqZWN0X3VucmVmKGZpeHR1cmUtPndlYlZpZXcpOwotICAgIGdfbWFpbl9sb29wX3VucmVmKGxv
b3ApOwotICAgIHRlc3RJbmZvRGVzdHJveShmaXh0dXJlLT5pbmZvKTsKLX0KLQotc3RhdGljIEdM
aXN0ICpjaGVja0FjdGlvbihHTGlzdCAqaXRlciwgV2ViS2l0Q29udGV4dE1lbnVBY3Rpb24gYWN0
aW9uKQotewotICAgIEd0a01lbnVJdGVtICppdGVtID0gKEd0a01lbnVJdGVtICopaXRlci0+ZGF0
YTsKLQotICAgIGdfYXNzZXJ0KEdUS19JU19NRU5VX0lURU0oaXRlbSkpOwotICAgIGdfYXNzZXJ0
KHdlYmtpdF9jb250ZXh0X21lbnVfaXRlbV9nZXRfYWN0aW9uKGl0ZW0pID09IGFjdGlvbik7Ci0K
LSAgICByZXR1cm4gaXRlci0+bmV4dDsKLX0KLQotc3RhdGljIEdMaXN0ICpjaGVja0FjdGlvbldp
dGhTdWJtZW51KEdMaXN0ICppdGVyLCBXZWJLaXRDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24pCi17
Ci0gICAgR3RrTWVudUl0ZW0gKml0ZW0gPSAoR3RrTWVudUl0ZW0gKilpdGVyLT5kYXRhOwotCi0g
ICAgZ19hc3NlcnQoR1RLX0lTX01FTlVfSVRFTShpdGVtKSk7Ci0gICAgZ19hc3NlcnQod2Via2l0
X2NvbnRleHRfbWVudV9pdGVtX2dldF9hY3Rpb24oaXRlbSkgPT0gYWN0aW9uKTsKLSAgICBnX2Fz
c2VydChHVEtfSVNfTUVOVShndGtfbWVudV9pdGVtX2dldF9zdWJtZW51KGl0ZW0pKSk7Ci0KLSAg
ICByZXR1cm4gaXRlci0+bmV4dDsKLX0KLQotc3RhdGljIEdMaXN0ICpjaGVja1NlcGFyYXRvcihH
TGlzdCAqaXRlcikKLXsKLSAgICBHdGtNZW51SXRlbSAqaXRlbSA9IChHdGtNZW51SXRlbSAqKWl0
ZXItPmRhdGE7Ci0KLSAgICBnX2Fzc2VydChHVEtfSVNfU0VQQVJBVE9SX01FTlVfSVRFTShpdGVt
KSk7Ci0KLSAgICByZXR1cm4gaXRlci0+bmV4dDsKLX0KLQotc3RhdGljIGdib29sZWFuIGNvbnRl
eHRNZW51Q2FsbGJhY2soV2ViS2l0V2ViVmlldyAqd2ViVmlldywgR3RrV2lkZ2V0ICpkZWZhdWx0
TWVudSwgV2ViS2l0SGl0VGVzdFJlc3VsdCAqaGl0VGVzdFJlc3VsdCwgZ2Jvb2xlYW4ga2V5Ym9h
cmRNb2RlLCBncG9pbnRlciB1c2VyRGF0YSkKLXsKLSAgICBUZXN0SW5mbyAqaW5mbyA9IChUZXN0
SW5mbyAqKXVzZXJEYXRhOwotICAgIGd1aW50IGNvbnRleHQ7Ci0gICAgR0xpc3QgKml0ZW1zOwot
ICAgIEdMaXN0ICppdGVyOwotCi0gICAgLyogQ2hlY2sgc2lnbmFsIHBhcmFtZXRlcnMgKi8KLSAg
ICBnX2Fzc2VydChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOwotICAgIGdfYXNzZXJ0KEdU
S19JU19NRU5VKGRlZmF1bHRNZW51KSk7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0lTX0hJVF9URVNU
X1JFU1VMVChoaXRUZXN0UmVzdWx0KSk7Ci0gICAgZ19hc3NlcnQoIWtleWJvYXJkTW9kZSk7Ci0K
LSAgICBnX29iamVjdF9nZXQoaGl0VGVzdFJlc3VsdCwgImNvbnRleHQiLCAmY29udGV4dCwgTlVM
TCk7Ci0gICAgZ19hc3NlcnQoY29udGV4dCAmIGluZm8tPmZsYWcpOwotCi0gICAgaXRlbXMgPSBn
dGtfY29udGFpbmVyX2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKGRlZmF1bHRNZW51KSk7Ci0g
ICAgc3dpdGNoIChpbmZvLT5mbGFnKSB7Ci0gICAgY2FzZSBXRUJLSVRfSElUX1RFU1RfUkVTVUxU
X0NPTlRFWFRfRE9DVU1FTlQ6Ci0gICAgICAgIGl0ZXIgPSBpdGVtczsKLSAgICAgICAgaXRlciA9
IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0dPX0JBQ0spOwot
ICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJ
T05fR09fRk9SV0FSRCk7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRf
Q09OVEVYVF9NRU5VX0FDVElPTl9TVE9QKTsKLSAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0
ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1JFTE9BRCk7Ci0gICAgICAgIGdfYXNzZXJ0
KCFpdGVyKTsKLQotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9ISVRfVEVTVF9SRVNV
TFRfQ09OVEVYVF9JTUFHRToKLSAgICAgICAgaXRlciA9IGl0ZW1zOwotICAgICAgICBpdGVyID0g
Y2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9JTUFHRV9J
Tl9ORVdfV0lORE9XKTsKLSAgICAgICAgaXRlciA9IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9D
T05URVhUX01FTlVfQUNUSU9OX0RPV05MT0FEX0lNQUdFX1RPX0RJU0spOwotICAgICAgICBpdGVy
ID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFH
RV9UT19DTElQQk9BUkQpOwotICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fQ09QWV9JTUFHRV9VUkxfVE9fQ0xJUEJPQVJEKTsKLSAgICAg
ICAgZ19hc3NlcnQoIWl0ZXIpOwotCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV0VCS0lUX0hJ
VF9URVNUX1JFU1VMVF9DT05URVhUX0VESVRBQkxFOgotICAgICAgICBpdGVyID0gaXRlbXM7Ci0g
ICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElP
Tl9DVVQpOwotICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fQ09QWSk7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9QQVNURSk7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0FjdGlv
bihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9ERUxFVEUpOwotICAgICAgICBpdGVy
ID0gY2hlY2tTZXBhcmF0b3IoaXRlcik7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVy
LCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9TRUxFQ1RfQUxMKTsKLSAgICAgICAgaXRlciA9
IGNoZWNrU2VwYXJhdG9yKGl0ZXIpOwotICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb25XaXRoU3Vi
bWVudShpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JTlBVVF9NRVRIT0RTKTsKLSAg
ICAgICAgaXRlciA9IGNoZWNrQWN0aW9uV2l0aFN1Ym1lbnUoaXRlciwgV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fVU5JQ09ERSk7Ci0gICAgICAgIGdfYXNzZXJ0KCFpdGVyKTsKLQotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9MSU5LOgot
ICAgICAgICBpdGVyID0gaXRlbXM7Ci0gICAgICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBX
RUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9PUEVOX0xJTkspOwotICAgICAgICBpdGVyID0gY2hl
Y2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fT1BFTl9MSU5LX0lOX05F
V19XSU5ET1cpOwotICAgICAgICBpdGVyID0gY2hlY2tBY3Rpb24oaXRlciwgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfTElOS19UT19ESVNLKTsKLSAgICAgICAgaXRlciA9IGNo
ZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0NPUFlfTElOS19UT19D
TElQQk9BUkQpOwotICAgICAgICBnX2Fzc2VydCghaXRlcik7Ci0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICB9Ci0KLSAg
ICBnX2xpc3RfZnJlZShpdGVtcyk7Ci0gICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLQotICAg
IHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZCBwdXNoRXZlbnQoV2ViS2l0V2ViVmlldyAq
d2ViVmlldykKLXsKLSAgICBHZGtFdmVudCAqZXZlbnQgPSBnZGtfZXZlbnRfbmV3KEdES19CVVRU
T05fUFJFU1MpOwotI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDAsIDApCi0gICAgR2RrRGV2aWNl
TWFuYWdlciAqZGV2aWNlTWFuYWdlcjsKLSNlbmRpZgotCi0gICAgZXZlbnQtPmFueS53aW5kb3cg
PSBnX29iamVjdF9yZWYoZ3RrX3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQod2ViVmlldykp
KTsKLSAgICBldmVudC0+YW55LnNlbmRfZXZlbnQgPSBGQUxTRTsKLSAgICBldmVudC0+YnV0dG9u
LnRpbWUgPSBHREtfQ1VSUkVOVF9USU1FOwotICAgIGV2ZW50LT5idXR0b24uYnV0dG9uID0gMzsK
LSAgICBldmVudC0+YnV0dG9uLnggPSBldmVudC0+YnV0dG9uLnkgPSA1OwotICAgIGV2ZW50LT5i
dXR0b24ueF9yb290ID0gZXZlbnQtPmJ1dHRvbi54OwotICAgIGV2ZW50LT5idXR0b24ueV9yb290
ID0gZXZlbnQtPmJ1dHRvbi55OwotI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDAsIDApCi0gICAg
ZGV2aWNlTWFuYWdlciA9IGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihnZGtfZGlzcGxh
eV9nZXRfZGVmYXVsdCgpKTsKLSAgICBldmVudC0+YnV0dG9uLmRldmljZSA9IGdka19kZXZpY2Vf
bWFuYWdlcl9nZXRfY2xpZW50X3BvaW50ZXIoZGV2aWNlTWFuYWdlcik7Ci0jZW5kaWYKLQotICAg
IGdka19ldmVudF9wdXQoZXZlbnQpOwotICAgIGdka19ldmVudF9mcmVlKGV2ZW50KTsKLX0KLQot
c3RhdGljIHZvaWQgbG9hZFN0YXR1c0NhbGxiYWNrKFdlYktpdFdlYlZpZXcgKndlYlZpZXcsIEdQ
YXJhbVNwZWMgKnNwZWMsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgV2ViS2l0TG9hZFN0YXR1cyBz
dGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYlZpZXcpOwotICAgIFRl
c3RJbmZvICppbmZvID0gKFRlc3RJbmZvICopZGF0YTsKLQotICAgIGdfYXNzZXJ0KHN0YXR1cyAh
PSBXRUJLSVRfTE9BRF9GQUlMRUQpOwotCi0gICAgaWYgKHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9G
SU5JU0hFRCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3
LCAiY29udGV4dC1tZW51IiwgR19DQUxMQkFDSyhjb250ZXh0TWVudUNhbGxiYWNrKSwgaW5mbyk7
Ci0gICAgcHVzaEV2ZW50KHdlYlZpZXcpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gbWFwRXZlbnRD
YWxsYmFjayhHdGtXaWRnZXQgKndpZGdldCwgR2RrRXZlbnQgKmV2ZW50LCBncG9pbnRlciBkYXRh
KQotewotICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyh3aWRnZXQpOwotICAgIENvbnRleHRNZW51
Rml4dHVyZSAqZml4dHVyZSA9IChDb250ZXh0TWVudUZpeHR1cmUgKilkYXRhOwotICAgIHdlYmtp
dF93ZWJfdmlld19sb2FkX3N0cmluZyhmaXh0dXJlLT53ZWJWaWV3LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmaXh0dXJlLT5pbmZvLT5kYXRhLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAidGV4dC9odG1sIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgInV0Zi04IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGU6Ly8iKTsK
LSAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3Rh
dHVzIiwgR19DQUxMQkFDSyhsb2FkU3RhdHVzQ2FsbGJhY2spLCBmaXh0dXJlLT5pbmZvKTsKLSAg
ICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVudShDb250ZXh0
TWVudUZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBHdGtBbGxv
Y2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDUwLCA1MCB9OwotICAgIEd0a1dpZGdldCAqd2lu
ZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19QT1BVUCk7Ci0KLSAgICBndGtfd2luZG93
X3Jlc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksIDUwLCA1MCk7Ci0gICAgZ3RrX3dpbmRvd19tb3Zl
KEdUS19XSU5ET1cod2luZG93KSwgMCwgMCk7Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRl
KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksICZhbGxvY2F0aW9uKTsKLSAgICBndGtfY29u
dGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIEdUS19XSURHRVQoZml4dHVyZS0+d2Vi
VmlldykpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LCAibWFwLWV2ZW50IiwgR19DQUxM
QkFDSyhtYXBFdmVudENhbGxiYWNrKSwgZml4dHVyZSk7Ci0gICAgZ3RrX3dpZGdldF9zaG93X2Fs
bCh3aW5kb3cpOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotfQotCi1zdGF0aWMgZ2Jv
b2xlYW4gY29udGV4dE1lbnVDdXN0b21JdGVtQ2FsbGJhY2soV2ViS2l0V2ViVmlldyAqd2ViVmll
dywgR3RrV2lkZ2V0ICpkZWZhdWx0TWVudSwgV2ViS2l0SGl0VGVzdFJlc3VsdCAqaGl0VGVzdFJl
c3VsdCwgZ2Jvb2xlYW4ga2V5Ym9hcmRNb2RlLCBncG9pbnRlciB1c2VyRGF0YSkKLXsKLSAgICBU
ZXN0SW5mbyAqaW5mbyA9IChUZXN0SW5mbyAqKXVzZXJEYXRhOwotICAgIGd1aW50IGNvbnRleHQ7
Ci0gICAgR0xpc3QgKml0ZW1zOwotICAgIEdMaXN0ICppdGVyOwotICAgIEd0a1dpZGdldCAqbWVu
dUl0ZW07Ci0gICAgR3RrQWN0aW9uICphY3Rpb247Ci0KLSAgICAvKiBDaGVjayBzaWduYWwgcGFy
YW1ldGVycyAqLwotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7Ci0g
ICAgZ19hc3NlcnQoR1RLX0lTX01FTlUoZGVmYXVsdE1lbnUpKTsKLSAgICBnX2Fzc2VydChXRUJL
SVRfSVNfSElUX1RFU1RfUkVTVUxUKGhpdFRlc3RSZXN1bHQpKTsKLSAgICBnX2Fzc2VydCgha2V5
Ym9hcmRNb2RlKTsKLQotICAgIGdfb2JqZWN0X2dldChoaXRUZXN0UmVzdWx0LCAiY29udGV4dCIs
ICZjb250ZXh0LCBOVUxMKTsKLSAgICBnX2Fzc2VydChjb250ZXh0ICYgaW5mby0+ZmxhZyk7Ci0K
LSAgICBhY3Rpb24gPSBndGtfYWN0aW9uX25ldygiVGVzdEFjdGlvbiIsICJDdXN0b20gQWN0aW9u
IiwgIkN1c3RvbSBBY3Rpb24gVG9vbHRpcCIsIE5VTEwpOwotICAgIG1lbnVJdGVtID0gZ3RrX2Fj
dGlvbl9jcmVhdGVfbWVudV9pdGVtKGFjdGlvbik7Ci0gICAgZ19vYmplY3RfdW5yZWYoYWN0aW9u
KTsKLQotICAgIGd0a19tZW51X3NoZWxsX2FwcGVuZChHVEtfTUVOVV9TSEVMTChkZWZhdWx0TWVu
dSksIG1lbnVJdGVtKTsKLSAgICBndGtfd2lkZ2V0X3Nob3cobWVudUl0ZW0pOwotCi0gICAgaXRl
bXMgPSBndGtfY29udGFpbmVyX2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKGRlZmF1bHRNZW51
KSk7Ci0gICAgaXRlciA9IGl0ZW1zOwotICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJL
SVRfQ09OVEVYVF9NRU5VX0FDVElPTl9HT19CQUNLKTsKLSAgICBpdGVyID0gY2hlY2tBY3Rpb24o
aXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fR09fRk9SV0FSRCk7Ci0gICAgaXRlciA9
IGNoZWNrQWN0aW9uKGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1NUT1ApOwotICAg
IGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9SRUxP
QUQpOwotICAgIGl0ZXIgPSBjaGVja0FjdGlvbihpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9OT19BQ1RJT04pOwotICAgIGdfYXNzZXJ0KCFpdGVyKTsKLQotICAgIGdfbGlzdF9mcmVl
KGl0ZW1zKTsKLSAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotCi0gICAgcmV0dXJuIFRSVUU7
Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RDb250ZXh0TWVudUN1c3RvbUl0ZW0oQ29udGV4dE1lbnVG
aXh0dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgR3RrV2lkZ2V0ICp3
aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1BPUFVQKTsKLSAgICBndGtfY29udGFp
bmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmll
dykpOwotICAgIGd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTsKLSAgICBndGtfd2lkZ2V0X2dy
YWJfZm9jdXMoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSk7Ci0KLSAgICB3ZWJraXRfd2Vi
X3ZpZXdfbG9hZF9zdHJpbmcoZml4dHVyZS0+d2ViVmlldywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZml4dHVyZS0+aW5mby0+ZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInRleHQvaHRtbCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1
dGYtOCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlOi8vIik7Ci0gICAg
Z19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAiY29udGV4dC1tZW51IiwgR19DQUxM
QkFDSyhjb250ZXh0TWVudUN1c3RvbUl0ZW1DYWxsYmFjayksIGZpeHR1cmUtPmluZm8pOwotICAg
IHB1c2hFdmVudChmaXh0dXJlLT53ZWJWaWV3KTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNo
YXIgKiphcmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQot
ICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0KLSAgICBn
X3Rlc3RfYWRkKCIvd2Via2l0L3Rlc3Rjb250ZXh0bWVudS9kb2N1bWVudCIsIENvbnRleHRNZW51
Rml4dHVyZSwKLSAgICAgICAgICAgICAgIHRlc3RJbmZvTmV3KCI8aHRtbD48Ym9keT48aDE+V2Vi
S2l0R1RLKyE8L2gxPjwvYm9keT48L2h0bWw+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9ET0NVTUVOVCksCi0gICAgICAgICAgICAg
ICBjb250ZXh0TWVudUZpeHR1cmVTZXR1cCwgdGVzdENvbnRleHRNZW51LCBjb250ZXh0TWVudUZp
eHR1cmVUZWFyZG93bik7Ci0gICAgLyogV2UgaGFyZGNvZGUgYWxsIGVsZW1lbnRzIHRvIGJlIGF0
IDAsMCBzbyB0aGF0IHdlIGtub3cgd2hlcmUgdG8gZ2VuZXJhdGUgdGhlIGJ1dHRvbiBldmVudHMg
Ki8KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3Rlc3Rjb250ZXh0bWVudS9pbWFnZSIsIENvbnRl
eHRNZW51Rml4dHVyZSwKLSAgICAgICAgICAgICAgIHRlc3RJbmZvTmV3KCI8aHRtbD48Ym9keT48
aW1nIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDowOyB0b3A6MCcgc3JjPScweGRlYWRi
ZWVmJyB3aWR0aD01MCBoZWlnaHQ9NTA+PC9pbWc+PC9ib2R5PjwvaHRtbD4iLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0lNQUdFKSwK
LSAgICAgICAgICAgICAgIGNvbnRleHRNZW51Rml4dHVyZVNldHVwLCB0ZXN0Q29udGV4dE1lbnUs
IGNvbnRleHRNZW51Rml4dHVyZVRlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3Rl
c3Rjb250ZXh0bWVudS9lZGl0YWJsZSIsIENvbnRleHRNZW51Rml4dHVyZSwKLSAgICAgICAgICAg
ICAgIHRlc3RJbmZvTmV3KCI8aHRtbD48Ym9keT48aW5wdXQgc3R5bGU9J3Bvc2l0aW9uOmFic29s
dXRlOyBsZWZ0OjA7IHRvcDowJyBzaXplPSczNSc+PC9pbnB1dD4+PC9ib2R5PjwvaHRtbD4iLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhU
X0VESVRBQkxFKSwKLSAgICAgICAgICAgICAgIGNvbnRleHRNZW51Rml4dHVyZVNldHVwLCB0ZXN0
Q29udGV4dE1lbnUsIGNvbnRleHRNZW51Rml4dHVyZVRlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRk
KCIvd2Via2l0L3Rlc3Rjb250ZXh0bWVudS9saW5rIiwgQ29udGV4dE1lbnVGaXh0dXJlLAotICAg
ICAgICAgICAgICAgdGVzdEluZm9OZXcoIjxodG1sPjxib2R5PjxhIHN0eWxlPSdwb3NpdGlvbjph
YnNvbHV0ZTsgbGVmdDowOyB0b3A6MCcgaHJlZj0naHR0cDovL3d3dy5leGFtcGxlLmNvbSc+SEVM
TE8gV09STEQ8L2E+PC9ib2R5PjwvaHRtbD4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
V0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0xJTkspLAotICAgICAgICAgICAgICAgY29u
dGV4dE1lbnVGaXh0dXJlU2V0dXAsIHRlc3RDb250ZXh0TWVudSwgY29udGV4dE1lbnVGaXh0dXJl
VGVhcmRvd24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvdGVzdGNvbnRleHRtZW51L2N1c3Rv
bWl0ZW0iLCBDb250ZXh0TWVudUZpeHR1cmUsCi0gICAgICAgICAgICAgICB0ZXN0SW5mb05ldygi
PGh0bWw+PGJvZHk+PGgxPldlYktpdEdUSyshPC9oMT48L2JvZHk+PC9odG1sPiIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfRE9DVU1F
TlQpLAotICAgICAgICAgICAgICAgY29udGV4dE1lbnVGaXh0dXJlU2V0dXAsIHRlc3RDb250ZXh0
TWVudUN1c3RvbUl0ZW0sIGNvbnRleHRNZW51Rml4dHVyZVRlYXJkb3duKTsKLQotICAgIHJldHVy
biBnX3Rlc3RfcnVuKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R3RrL3Rlc3Rjb3B5YW5kcGFzdGUuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R3RrL3Rlc3Rjb3B5YW5kcGFzdGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYmIzOGVhNjZiMDQ1NGJhNmE2MDhiYzE4NjFmMjkxZjM5NWYwNDEzZi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdEd0ay90ZXN0Y29weWFuZHBhc3RlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwy
NjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0j
aW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDx3
ZWJraXQvd2Via2l0Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYuaD4KLQotdHlwZWRlZiBzdHJ1
Y3QgewotICAgIGNoYXIqIHBhZ2U7Ci0gICAgY2hhciogZXhwZWN0ZWRDb250ZW50OwotfSBUZXN0
SW5mbzsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIEd0a1dpZGdldCogd2luZG93OwotICAgIFdl
YktpdFdlYlZpZXcqIHdlYlZpZXc7Ci0gICAgR01haW5Mb29wKiBsb29wOwotICAgIFRlc3RJbmZv
KiBpbmZvOwotfSBDb3B5QW5kUGFzdGVGaXh0dXJlOwotCi1UZXN0SW5mbyoKLXRlc3RfaW5mb19u
ZXcoY29uc3QgY2hhciogcGFnZSwgY29uc3QgY2hhciogZXhwZWN0ZWRDb250ZW50KQotewotICAg
IFRlc3RJbmZvKiBpbmZvOwotICAgIGluZm8gPSBnX3NsaWNlX25ldzAoVGVzdEluZm8pOwotICAg
IGluZm8tPnBhZ2UgPSBnX3N0cmR1cChwYWdlKTsKLSAgICBpZiAoZXhwZWN0ZWRDb250ZW50KQot
ICAgICAgICBpbmZvLT5leHBlY3RlZENvbnRlbnQgPSBnX3N0cmR1cChleHBlY3RlZENvbnRlbnQp
OwotICAgIHJldHVybiBpbmZvOwotfQotCi12b2lkCi10ZXN0X2luZm9fZGVzdHJveShUZXN0SW5m
byogaW5mbykKLXsKLSAgICBnX2ZyZWUoaW5mby0+cGFnZSk7Ci0gICAgZ19mcmVlKGluZm8tPmV4
cGVjdGVkQ29udGVudCk7Ci0gICAgZ19zbGljZV9mcmVlKFRlc3RJbmZvLCBpbmZvKTsKLX0KLQot
c3RhdGljIHZvaWQgY29weV9hbmRfcGFzdGVfZml4dHVyZV9zZXR1cChDb3B5QW5kUGFzdGVGaXh0
dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZml4dHVyZS0+bG9vcCA9
IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQotICAgIGZpeHR1cmUtPndpbmRvdyA9IGd0
a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwotICAgIGZpeHR1cmUtPndlYlZpZXcg
PSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLQotICAgIGd0a19jb250
YWluZXJfYWRkKEdUS19DT05UQUlORVIoZml4dHVyZS0+d2luZG93KSwgR1RLX1dJREdFVChmaXh0
dXJlLT53ZWJWaWV3KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvcHlfYW5kX3Bhc3RlX2ZpeHR1cmVf
dGVhcmRvd24oQ29weUFuZFBhc3RlRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRh
KQotewotICAgIGd0a193aWRnZXRfZGVzdHJveShmaXh0dXJlLT53aW5kb3cpOwotICAgIGdfbWFp
bl9sb29wX3VucmVmKGZpeHR1cmUtPmxvb3ApOwotICAgIHRlc3RfaW5mb19kZXN0cm95KGZpeHR1
cmUtPmluZm8pOwotfQotCi1zdGF0aWMgdm9pZCBsb2FkX3N0YXR1c19jYihXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3LCBHUGFyYW1TcGVjKiBzcGVjLCBncG9pbnRlciBkYXRhKQotewotICAgIENvcHlB
bmRQYXN0ZUZpeHR1cmUqIGZpeHR1cmUgPSAoQ29weUFuZFBhc3RlRml4dHVyZSopZGF0YTsKLSAg
ICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0
dXMod2ViVmlldyk7Ci0gICAgaWYgKHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBndGtfY2xpcGJv
YXJkX2dldChHREtfU0VMRUNUSU9OX0NMSVBCT0FSRCk7Ci0gICAgZ3RrX2NsaXBib2FyZF9jbGVh
cihjbGlwYm9hcmQpOwotCi0gICAgd2Via2l0X3dlYl92aWV3X2NvcHlfY2xpcGJvYXJkKHdlYlZp
ZXcpOwotCi0gICAgZ2NoYXIqIHRleHQgPSBndGtfY2xpcGJvYXJkX3dhaXRfZm9yX3RleHQoY2xp
cGJvYXJkKTsKLSAgICBnX2Fzc2VydCh0ZXh0IHx8ICFmaXh0dXJlLT5pbmZvLT5leHBlY3RlZENv
bnRlbnQpOwotICAgIGdfYXNzZXJ0KCF0ZXh0IHx8ICFzdHJjbXAodGV4dCwgZml4dHVyZS0+aW5m
by0+ZXhwZWN0ZWRDb250ZW50KSk7Ci0gICAgZ19mcmVlKHRleHQpOwotCi0gICAgLy8gVmVyaWZ5
IHRoYXQgdGhlIG1hcmt1cCBzdGFydHMgd2l0aCB0aGUgcHJvcGVyIGNvbnRlbnQtdHlwZSBtZXRh
IHRhZyBwcmVmaXguCi0gICAgR3RrU2VsZWN0aW9uRGF0YSogc2VsZWN0aW9uRGF0YSA9IGd0a19j
bGlwYm9hcmRfd2FpdF9mb3JfY29udGVudHMoY2xpcGJvYXJkLCBnZGtfYXRvbV9pbnRlcm4oInRl
eHQvaHRtbCIsIEZBTFNFKSk7Ci0gICAgaWYgKHNlbGVjdGlvbkRhdGEpIHsKLSAgICAgICAgc3Rh
dGljIGNvbnN0IGNoYXIqIG1hcmt1cFByZWZpeCA9ICI8bWV0YSBodHRwLWVxdWl2PVwiY29udGVu
dC10eXBlXCIgY29udGVudD1cInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiPiI7Ci0gICAgICAg
IGNoYXIqIG1hcmt1cCA9IGdfc3RybmR1cCgoY29uc3QgY2hhciopIGd0a19zZWxlY3Rpb25fZGF0
YV9nZXRfZGF0YShzZWxlY3Rpb25EYXRhKSwKLSAgICAgICAgICAgIGd0a19zZWxlY3Rpb25fZGF0
YV9nZXRfbGVuZ3RoKHNlbGVjdGlvbkRhdGEpKTsKLSAgICAgICAgZ19hc3NlcnQoc3RybGVuKG1h
cmt1cFByZWZpeCkgPD0gc3RybGVuKG1hcmt1cCkpOwotICAgICAgICBnX2Fzc2VydCghc3RybmNt
cChtYXJrdXBQcmVmaXgsIG1hcmt1cCwgc3RybGVuKG1hcmt1cFByZWZpeCkpKTsKLSAgICAgICAg
Z19mcmVlKG1hcmt1cCk7Ci0gICAgfQotCi0gICAgZ19hc3NlcnQoIWd0a19jbGlwYm9hcmRfd2Fp
dF9pc191cmlzX2F2YWlsYWJsZShjbGlwYm9hcmQpKTsKLSAgICBnX2Fzc2VydCghZ3RrX2NsaXBi
b2FyZF93YWl0X2lzX2ltYWdlX2F2YWlsYWJsZShjbGlwYm9hcmQpKTsKLQotICAgIGdfbWFpbl9s
b29wX3F1aXQoZml4dHVyZS0+bG9vcCk7Ci19Ci0KLWdib29sZWFuIG1hcF9ldmVudF9jYihHdGtX
aWRnZXQgKndpZGdldCwgR2RrRXZlbnQqIGV2ZW50LCBncG9pbnRlciBkYXRhKQotewotICAgIENv
cHlBbmRQYXN0ZUZpeHR1cmUqIGZpeHR1cmUgPSAoQ29weUFuZFBhc3RlRml4dHVyZSopZGF0YTsK
LSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoZml4dHVyZS0+d2ViVmlldywgZml4dHVy
ZS0+aW5mby0+cGFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQvaHRt
bCIsICJ1dGYtOCIsICJmaWxlOi8vIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMg
dm9pZCB0ZXN0X2NvcHlfYW5kX3Bhc3RlKENvcHlBbmRQYXN0ZUZpeHR1cmUqIGZpeHR1cmUsIGdj
b25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBmaXh0dXJlLT5pbmZvID0gKFRlc3RJbmZvKilkYXRh
OwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2luZG93LCAibWFwLWV2ZW50IiwKLSAg
ICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobWFwX2V2ZW50X2NiKSwgZml4dHVyZSk7Ci0K
LSAgICBndGtfd2lkZ2V0X3Nob3coZml4dHVyZS0+d2luZG93KTsKLSAgICBndGtfd2lkZ2V0X3No
b3coR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSk7Ci0gICAgZ3RrX3dpbmRvd19wcmVzZW50
KEdUS19XSU5ET1coZml4dHVyZS0+d2luZG93KSk7Ci0gICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3Vz
KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldykpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdChm
aXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsCi0gICAgICAgICAgICAgICAg
ICAgICBHX0NBTExCQUNLKGxvYWRfc3RhdHVzX2NiKSwgZml4dHVyZSk7Ci0KLSAgICBnX21haW5f
bG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Ci19Ci0KLXN0YXRpYyBDb3B5QW5kUGFzdGVGaXh0dXJl
KiBjdXJyZW50Rml4dHVyZTsKLXN0YXRpYyBKU1ZhbHVlUmVmIHJ1blBhc3RlVGVzdENhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBndGtfd2lkZ2V0X2dyYWJfZm9j
dXMoR1RLX1dJREdFVChjdXJyZW50Rml4dHVyZS0+d2ViVmlldykpOwotCi0gICAgLy8gU2ltdWxh
dGUgYSBwYXN0ZSBrZXlib2FyZCBzZXF1ZW5jZS4KLSAgICBHZGtFdmVudCogZXZlbnQgPSBnZGtf
ZXZlbnRfbmV3KEdES19LRVlfUFJFU1MpOwotICAgIGV2ZW50LT5rZXkua2V5dmFsID0gZ2RrX3Vu
aWNvZGVfdG9fa2V5dmFsKCd2Jyk7Ci0gICAgZXZlbnQtPmtleS5zdGF0ZSA9IEdES19DT05UUk9M
X01BU0s7Ci0gICAgZXZlbnQtPmtleS53aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3coR1RL
X1dJREdFVChjdXJyZW50Rml4dHVyZS0+d2ViVmlldykpOwotICAgIGdfb2JqZWN0X3JlZihldmVu
dC0+a2V5LndpbmRvdyk7Ci0jaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgR2RrRGV2aWNl
TWFuYWdlciogbWFuYWdlciA9ICBnZGtfZGlzcGxheV9nZXRfZGV2aWNlX21hbmFnZXIoZ2RrX3dp
bmRvd19nZXRfZGlzcGxheShldmVudC0+a2V5LndpbmRvdykpOwotICAgIGdka19ldmVudF9zZXRf
ZGV2aWNlKGV2ZW50LCBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9wb2ludGVyKG1hbmFn
ZXIpKTsKLSNlbmRpZgotCi0gICAgR2RrS2V5bWFwS2V5KiBrZXlzOwotICAgIGdpbnQgbl9rZXlz
OwotICAgIGlmIChnZGtfa2V5bWFwX2dldF9lbnRyaWVzX2Zvcl9rZXl2YWwoZ2RrX2tleW1hcF9n
ZXRfZGVmYXVsdCgpLCBldmVudC0+a2V5LmtleXZhbCwgJmtleXMsICZuX2tleXMpKSB7Ci0gICAg
ICAgIGV2ZW50LT5rZXkuaGFyZHdhcmVfa2V5Y29kZSA9IGtleXNbMF0ua2V5Y29kZTsKLSAgICAg
ICAgZ19mcmVlKGtleXMpOwotICAgIH0KLQotICAgIGd0a19tYWluX2RvX2V2ZW50KGV2ZW50KTsK
LSAgICBldmVudC0+a2V5LnR5cGUgPSBHREtfS0VZX1JFTEVBU0U7Ci0gICAgZ3RrX21haW5fZG9f
ZXZlbnQoZXZlbnQpOwotICAgIGdka19ldmVudF9mcmVlKGV2ZW50KTsKLQotICAgIEpTU3RyaW5n
UmVmIHNjcmlwdFN0cmluZyA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJkb2N1bWVu
dC5ib2R5LmlubmVySFRNTDsiKTsKLSAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNFdmFsdWF0ZVNj
cmlwdChjb250ZXh0LCBzY3JpcHRTdHJpbmcsIDAsIDAsIDAsIDApOwotICAgIEpTU3RyaW5nUmVs
ZWFzZShzY3JpcHRTdHJpbmcpOwotCi0gICAgZ19hc3NlcnQoSlNWYWx1ZUlzU3RyaW5nKGNvbnRl
eHQsIHZhbHVlKSk7Ci0gICAgSlNTdHJpbmdSZWYgYWN0dWFsID0gSlNWYWx1ZVRvU3RyaW5nQ29w
eShjb250ZXh0LCB2YWx1ZSwgZXhjZXB0aW9uKTsKLSAgICBnX2Fzc2VydCghZXhjZXB0aW9uIHx8
ICEqZXhjZXB0aW9uKTsKLSAgICBnX2Fzc2VydChjdXJyZW50Rml4dHVyZS0+aW5mby0+ZXhwZWN0
ZWRDb250ZW50KTsKLSAgICBKU1N0cmluZ1JlZiBleHBlY3RlZCA9IEpTU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKGN1cnJlbnRGaXh0dXJlLT5pbmZvLT5leHBlY3RlZENvbnRlbnQpOwotICAg
IGdfYXNzZXJ0KEpTU3RyaW5nSXNFcXVhbChleHBlY3RlZCwgYWN0dWFsKSk7Ci0KLSAgICBKU1N0
cmluZ1JlbGVhc2UoZXhwZWN0ZWQpOwotICAgIEpTU3RyaW5nUmVsZWFzZShhY3R1YWwpOwotICAg
IGdfbWFpbl9sb29wX3F1aXQoY3VycmVudEZpeHR1cmUtPmxvb3ApOwotICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIHZvaWQgd2luZG93X29iamVj
dF9jbGVhcmVkX2NhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBXZWJLaXRXZWJGcmFt
ZSogd2ViX2ZyYW1lLCBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2lu
ZG93X29iamVjdCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBKU1N0cmluZ1JlZiBuYW1lID0gSlNT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInJ1blRlc3QiKTsKLSAgICBKU09iamVjdFJlZiB0
ZXN0Q29tcGxldGUgPSBKU09iamVjdE1ha2VGdW5jdGlvbldpdGhDYWxsYmFjayhjb250ZXh0LCBu
YW1lLCBydW5QYXN0ZVRlc3RDYWxsYmFjayk7Ci0gICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250
ZXh0LCB3aW5kb3dfb2JqZWN0LCBuYW1lLCB0ZXN0Q29tcGxldGUsIGtKU1Byb3BlcnR5QXR0cmli
dXRlTm9uZSwgMCk7Ci0gICAgSlNTdHJpbmdSZWxlYXNlKG5hbWUpOwotfQotCi1zdGF0aWMgdm9p
ZCBwYXN0aW5nX3Rlc3RfZ2V0X2RhdGFfY2FsbGJhY2soR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQs
IEd0a1NlbGVjdGlvbkRhdGEqIHNlbGVjdGlvbl9kYXRhLCBndWludCBpbmZvLCBncG9pbnRlciBk
YXRhKQotewotICAgIGd0a19zZWxlY3Rpb25fZGF0YV9zZXQoc2VsZWN0aW9uX2RhdGEsIGdka19h
dG9tX2ludGVybigidGV4dC9odG1sIiwgRkFMU0UpLCA4LCAoY29uc3QgZ3VjaGFyKikgZGF0YSwg
c3RybGVuKChjaGFyKilkYXRhKSArIDEpOwotfQotCi1zdGF0aWMgdm9pZCBwYXN0aW5nX3Rlc3Rf
Y2xlYXJfZGF0YV9jYWxsYmFjayhHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCwgZ3BvaW50ZXIgZGF0
YSkKLXsKLSAgICBnX2ZyZWUoZGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfcGFzdGluZ19t
YXJrdXAoQ29weUFuZFBhc3RlRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQot
ewotICAgIGZpeHR1cmUtPmluZm8gPSAoVGVzdEluZm8qKWRhdGE7Ci0gICAgY3VycmVudEZpeHR1
cmUgPSBmaXh0dXJlOwotCi0gICAgR3RrVGFyZ2V0TGlzdCogdGFyZ2V0TGlzdCA9IGd0a190YXJn
ZXRfbGlzdF9uZXcoMCwgMCk7Ci0gICAgZ3RrX3RhcmdldF9saXN0X2FkZCh0YXJnZXRMaXN0LCBn
ZGtfYXRvbV9pbnRlcm4oInRleHQvaHRtbCIsIEZBTFNFKSwgMCwgMCk7Ci0KLSAgICBpbnQgbnVt
YmVyT2ZUYXJnZXRzID0gMTsKLSAgICBHdGtUYXJnZXRFbnRyeSogdGFyZ2V0VGFibGUgPSBndGtf
dGFyZ2V0X3RhYmxlX25ld19mcm9tX2xpc3QodGFyZ2V0TGlzdCwgJm51bWJlck9mVGFyZ2V0cyk7
Ci0gICAgZ3RrX2NsaXBib2FyZF9zZXRfd2l0aF9kYXRhKGd0a19jbGlwYm9hcmRfZ2V0KEdES19T
RUxFQ1RJT05fQ0xJUEJPQVJEKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFy
Z2V0VGFibGUsIG51bWJlck9mVGFyZ2V0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFzdGluZ190ZXN0X2dldF9kYXRhX2NhbGxiYWNrLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXN0aW5nX3Rlc3RfY2xlYXJfZGF0YV9jYWxsYmFjaywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ19zdHJkdXAoZml4dHVyZS0+aW5mby0+ZXhwZWN0ZWRDb250
ZW50KSk7Ci0gICAgZ3RrX3RhcmdldF9saXN0X3VucmVmKHRhcmdldExpc3QpOwotICAgIGd0a190
YXJnZXRfdGFibGVfZnJlZSh0YXJnZXRUYWJsZSwgbnVtYmVyT2ZUYXJnZXRzKTsKLQotICAgIGdf
c2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2luZG93LCAibWFwLWV2ZW50IiwKLSAgICAgICAgICAg
ICAgICAgICAgIEdfQ0FMTEJBQ0sobWFwX2V2ZW50X2NiKSwgZml4dHVyZSk7Ci0gICAgZ19zaWdu
YWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAid2luZG93LW9iamVjdC1jbGVhcmVkIiwKLSAg
ICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sod2luZG93X29iamVjdF9jbGVhcmVkX2NhbGxi
YWNrKSwgZml4dHVyZSk7Ci0KLSAgICBndGtfd2lkZ2V0X3Nob3coZml4dHVyZS0+d2luZG93KTsK
LSAgICBndGtfd2lkZ2V0X3Nob3coR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSk7Ci0gICAg
Z3RrX3dpbmRvd19wcmVzZW50KEdUS19XSU5ET1coZml4dHVyZS0+d2luZG93KSk7Ci0KLSAgICBn
X21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Ci19Ci0KLQotaW50IG1haW4oaW50IGFyZ2Ms
IGNoYXIqKiBhcmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsK
LQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAg
Y29uc3QgY2hhciogc2VsZWN0ZWRfc3Bhbl9odG1sID0gIjxodG1sPjxib2R5PiIKLSAgICAgICAg
IjxzcGFuIGlkPVwibWFpbnNwYW5cIj5BbGwgd29yayBhbmQgbm8gcGxheSA8c3Bhbj5tYWtlIEph
Y2sgYSBkdWxsPC9zcGFuPiBib3kuPC9zcGFuPiIKLSAgICAgICAgIjxzY3JpcHQ+ZG9jdW1lbnQu
Z2V0U2VsZWN0aW9uKCkuY29sbGFwc2UoKTtcbiIKLSAgICAgICAgImRvY3VtZW50LmdldFNlbGVj
dGlvbigpLnNlbGVjdEFsbENoaWxkcmVuKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluc3Bh
bicpKTtcbiIKLSAgICAgICAgIjwvc2NyaXB0PjwvYm9keT48L2h0bWw+IjsKLSAgICBjb25zdCBj
aGFyKiBub19zZWxlY3Rpb25faHRtbCA9ICI8aHRtbD48Ym9keT4iCi0gICAgICAgICI8c3BhbiBp
ZD1cIm1haW5zcGFuXCI+QWxsIHdvcmsgYW5kIG5vIHBsYXkgPHNwYW4+bWFrZSBKYWNrIGEgZHVs
bDwvc3Bhbj4gYm95PC9zcGFuPiIKLSAgICAgICAgIjxzY3JpcHQ+ZG9jdW1lbnQuZ2V0U2VsZWN0
aW9uKCkuY29sbGFwc2UoKTtcbiIKLSAgICAgICAgIjwvc2NyaXB0PjwvYm9keT48L2h0bWw+IjsK
LQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvY29weWFuZHBhc3RlL3NlbGVjdGlvbiIsIENvcHlB
bmRQYXN0ZUZpeHR1cmUsCi0gICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KHNlbGVjdGVkX3Nw
YW5faHRtbCwgIkFsbCB3b3JrIGFuZCBubyBwbGF5IG1ha2UgSmFjayBhIGR1bGwgYm95LiIpLAot
ICAgICAgICAgICAgICAgY29weV9hbmRfcGFzdGVfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAg
ICAgIHRlc3RfY29weV9hbmRfcGFzdGUsCi0gICAgICAgICAgICAgICBjb3B5X2FuZF9wYXN0ZV9m
aXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2NvcHlhbmRwYXN0ZS9u
by1zZWxlY3Rpb24iLCBDb3B5QW5kUGFzdGVGaXh0dXJlLAotICAgICAgICAgICAgICAgdGVzdF9p
bmZvX25ldyhub19zZWxlY3Rpb25faHRtbCwgMCksCi0gICAgICAgICAgICAgICBjb3B5X2FuZF9w
YXN0ZV9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF9jb3B5X2FuZF9wYXN0ZSwK
LSAgICAgICAgICAgICAgIGNvcHlfYW5kX3Bhc3RlX2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAg
Y29uc3QgY2hhciogcGFzdGVfdGVzdF9odG1sID0gIjxodG1sPiIKLSAgICAgICAgIjxib2R5IG9u
TG9hZD1cImRvY3VtZW50LmJvZHkuZm9jdXMoKTsgcnVuVGVzdCgpO1wiIGNvbnRlbnRFZGl0YWJs
ZT1cInRydWVcIj4iCi0gICAgICAgICI8L2JvZHk+PC9odG1sPiI7Ci0gICAgZ190ZXN0X2FkZCgi
L3dlYmtpdC9jb3B5YW5kcGFzdGUvcGFzdGUtbWFya3VwIiwgQ29weUFuZFBhc3RlRml4dHVyZSwK
LSAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcocGFzdGVfdGVzdF9odG1sLCAiYm9iYnkiKSwK
LSAgICAgICAgICAgICAgIGNvcHlfYW5kX3Bhc3RlX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAg
ICAgICB0ZXN0X3Bhc3RpbmdfbWFya3VwLAotICAgICAgICAgICAgICAgY29weV9hbmRfcGFzdGVf
Zml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICByZXR1cm4gZ190ZXN0X3J1bigpOwotfQpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGRvbWRvY3VtZW50
LmMgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG9tZG9jdW1lbnQu
YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM5OTdkZGFkM2EwNDVjNzYwYjE5YWI2
ZGJhYmZjMDIwZTZjNWZhMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG9tZG9jdW1l
bnQuYworKysgL2Rldi9udWxsCkBAIC0xLDQyOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJ0ZXN0X3V0
aWxzLmgiCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNp
bmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi0jZGVmaW5l
IEhUTUxfRE9DVU1FTlRfVElUTEUgIjxodG1sPjxoZWFkPjx0aXRsZT5UaGlzIGlzIHRoZSB0aXRs
ZTwvdGl0bGU+PC9oZWFkPjxib2R5PjwvYm9keT48L2h0bWw+IgotI2RlZmluZSBIVE1MX0RPQ1VN
RU5UX0VMRU1FTlRTICI8aHRtbD48Ym9keT48dWw+PGxpPjE8L2xpPjxsaT4yPC9saT48bGk+Mzwv
bGk+PC91bD48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRNTF9ET0NVTUVOVF9FTEVNRU5UU19D
TEFTUyAiPGh0bWw+PGJvZHk+PGRpdiBjbGFzcz1cInRlc3RcIj48L2Rpdj48ZGl2IGNsYXNzPVwi
c3RyYW5nZVwiPjwvZGl2PjxkaXYgY2xhc3M9XCJ0ZXN0XCI+PC9kaXY+PC9ib2R5PjwvaHRtbD4i
Ci0jZGVmaW5lIEhUTUxfRE9DVU1FTlRfRUxFTUVOVFNfSUQgIjxodG1sPjxib2R5PjxkaXYgaWQ9
XCJ0ZXN0b2tcIj48L2Rpdj48ZGl2IGlkPVwidGVzdGJhZFwiPmZpcnN0PC9kaXY+PGRpdiBpZD1c
InRlc3RiYWRcIj5zZWNvbmQ8L2Rpdj48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRNTF9ET0NV
TUVOVF9MSU5LUyAiPGh0bWw+PGhlYWQ+PHRpdGxlPlRpdGxlPC90aXRsZT48L2hlYWQ+PGJvZHk+
PGEgaHJlZj1cImFib3V0OmJsYW5rXCI+Ymxhbms8L2E+PGEgaHJlZj1cImh0dHA6Ly93d3cuZ29v
Z2xlLmNvbVwiPmdvb2dsZTwvYT48YSBocmVmPVwiaHR0cDovL3d3dy53ZWJraXQub3JnXCI+d2Vi
a2l0PC9hPjwvYm9keT48L2h0bWw+IgotI2RlZmluZSBIVE1MX0RPQ1VNRU5UX0lGUkFNRSAiPGh0
bWw+PGhlYWQ+PHRpdGxlPklGcmFtZTwvdGl0bGU+PC9oZWFkPjxib2R5PjxpZnJhbWUgaWQ9J2lm
cmFtZSc+PC9pZnJhbWU+PGRpdiBpZD0ndGVzdCc+PC9kaXY+PC9ib2R5PjwvaHRtbD4iCi0jZGVm
aW5lIEhUTUxfRE9DVU1FTlRfVEFCTEUgIjxodG1sPjxib2R5Pjx0YWJsZSBpZD1cInRhYmxlXCI+
PC90YWJsZT48L2JvZHk+PC9odG1sPiIKLSNkZWZpbmUgSFRNTF9ET0NVTUVOVF9FVkFMVUFURSAi
PGh0bWw+PGhlYWQ+PHRpdGxlPjwvdGl0bGU+PC9oZWFkPjxib2R5PjxkaXY+Rmlyc3QgZGl2PC9k
aXY+PGRpdj5TZWNvbmQgZGl2PC9kaXY+PC9ib2R5PjwvaHRtbD4iCi0KLXR5cGVkZWYgc3RydWN0
IHsKLSAgICBHdGtXaWRnZXQqIHdlYlZpZXc7Ci0gICAgR01haW5Mb29wKiBsb29wOwotfSBEb21E
b2N1bWVudEZpeHR1cmU7Ci0KLXN0YXRpYyBnYm9vbGVhbiBmaW5pc2hfbG9hZGluZyhEb21Eb2N1
bWVudEZpeHR1cmUqIGZpeHR1cmUpCi17Ci0gICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1bm5pbmco
Zml4dHVyZS0+bG9vcCkpCi0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7
Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkIGRvbV9kb2N1bWVudF9maXh0
dXJlX3NldHVwKERvbURvY3VtZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRh
KQotewotICAgIGZpeHR1cmUtPmxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0g
ICAgZml4dHVyZS0+d2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKLSAgICBnX29iamVj
dF9yZWZfc2luayhmaXh0dXJlLT53ZWJWaWV3KTsKLQotICAgIGlmIChkYXRhICE9IE5VTEwpCi0g
ICAgICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcgKGZpeHR1
cmUtPndlYlZpZXcpLCAoY29uc3QgY2hhciopIGRhdGEsIE5VTEwsIE5VTEwsIE5VTEwpOwotCi0g
ICAgZ19pZGxlX2FkZCgoR1NvdXJjZUZ1bmMpZmluaXNoX2xvYWRpbmcsIGZpeHR1cmUpOwotICAg
IGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKLX0KLQotc3RhdGljIHZvaWQgZG9tX2Rv
Y3VtZW50X2ZpeHR1cmVfdGVhcmRvd24oRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29u
c3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgaWYgKGZpeHR1cmUtPndlYlZpZXcpCi0gICAgICAgIGdf
b2JqZWN0X3VucmVmKGZpeHR1cmUtPndlYlZpZXcpOwotICAgIGdfbWFpbl9sb29wX3VucmVmKGZp
eHR1cmUtPmxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X2RvbV9kb2N1bWVudF90aXRsZShE
b21Eb2N1bWVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBn
X2Fzc2VydChmaXh0dXJlKTsKLSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gKFdlYktpdFdlYlZp
ZXcqKWZpeHR1cmUtPndlYlZpZXc7Ci0gICAgZ19hc3NlcnQodmlldyk7Ci0gICAgV2ViS2l0RE9N
RG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQodmll
dyk7Ci0gICAgZ19hc3NlcnQoZG9jdW1lbnQpOwotICAgIGdjaGFyKiB0aXRsZSA9IHdlYmtpdF9k
b21fZG9jdW1lbnRfZ2V0X3RpdGxlKGRvY3VtZW50KTsKLSAgICBnX2Fzc2VydCh0aXRsZSk7Ci0g
ICAgZ19hc3NlcnRfY21wc3RyKHRpdGxlLCA9PSwgIlRoaXMgaXMgdGhlIHRpdGxlIik7Ci0gICAg
Z19mcmVlKHRpdGxlKTsKLSAgICB3ZWJraXRfZG9tX2RvY3VtZW50X3NldF90aXRsZShkb2N1bWVu
dCwgIlRoaXMgaXMgdGhlIHNlY29uZCB0aXRsZSIpOwotICAgIHRpdGxlID0gd2Via2l0X2RvbV9k
b2N1bWVudF9nZXRfdGl0bGUoZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KHRpdGxlKTsKLSAgICBn
X2Fzc2VydF9jbXBzdHIodGl0bGUsID09LCAiVGhpcyBpcyB0aGUgc2Vjb25kIHRpdGxlIik7Ci0g
ICAgZ19mcmVlKHRpdGxlKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9kb21fZG9jdW1lbnRfZ2V0
X2VsZW1lbnRzX2J5X3RhZ19uYW1lKERvbURvY3VtZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0
cG9pbnRlciBkYXRhKQotewotICAgIGdfYXNzZXJ0KGZpeHR1cmUpOwotICAgIFdlYktpdFdlYlZp
ZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmlldyopZml4dHVyZS0+d2ViVmlldzsKLSAgICBnX2Fzc2Vy
dCh2aWV3KTsKLSAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKLSAgICBnX2Fzc2VydChkb2N1bWVudCk7Ci0gICAg
V2ViS2l0RE9NTm9kZUxpc3QqIGxpc3QgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50
c19ieV90YWdfbmFtZShkb2N1bWVudCwgImxpIik7Ci0gICAgZ19hc3NlcnQobGlzdCk7Ci0gICAg
Z3Vsb25nIGxlbmd0aCA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdCk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KGxlbmd0aCwgPT0sIDMpOwotCi0gICAgZ3VpbnQgaTsKLQotICAg
IGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBXZWJLaXRET01Ob2RlKiBp
dGVtID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfaXRlbShsaXN0LCBpKTsKLSAgICAgICAgZ19hc3Nl
cnQoaXRlbSk7Ci0gICAgICAgIFdlYktpdERPTUVsZW1lbnQqIGVsZW1lbnQgPSAoV2ViS2l0RE9N
RWxlbWVudCopaXRlbTsKLSAgICAgICAgZ19hc3NlcnQoZWxlbWVudCk7Ci0gICAgICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3RhZ19uYW1lKGVsZW1lbnQpLCA9PSwg
IkxJIik7Ci0gICAgICAgIFdlYktpdERPTUhUTUxFbGVtZW50KiBodG1sRWxlbWVudCA9IChXZWJL
aXRET01IVE1MRWxlbWVudCopZWxlbWVudDsKLSAgICAgICAgY2hhciogbiA9IGdfc3RyZHVwX3By
aW50ZigiJWQiLCBpKzEpOwotICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2RvbV9odG1s
X2VsZW1lbnRfZ2V0X2lubmVyX3RleHQoaHRtbEVsZW1lbnQpLCA9PSwgbik7Ci0gICAgICAgIGdf
ZnJlZShuKTsKLSAgICB9Ci0KLSAgICBnX29iamVjdF91bnJlZihsaXN0KTsKLX0KLQotc3RhdGlj
IHZvaWQgdGVzdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X2NsYXNzX25hbWUoRG9tRG9j
dW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3Nl
cnQoZml4dHVyZSk7Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IChXZWJLaXRXZWJWaWV3Kilm
aXh0dXJlLT53ZWJWaWV3OwotICAgIGdfYXNzZXJ0KHZpZXcpOwotICAgIFdlYktpdERPTURvY3Vt
ZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZpZXcpOwot
ICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKLSAgICBXZWJLaXRET01Ob2RlTGlzdCogbGlzdCA9IHdl
YmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X2NsYXNzX25hbWUoZG9jdW1lbnQsICJ0
ZXN0Iik7Ci0gICAgZ19hc3NlcnQobGlzdCk7Ci0gICAgZ3Vsb25nIGxlbmd0aCA9IHdlYmtpdF9k
b21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGxlbmd0
aCwgPT0sIDIpOwotCi0gICAgZ3VpbnQgaTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgewotICAgICAgICBXZWJLaXRET01Ob2RlKiBpdGVtID0gd2Via2l0X2RvbV9ub2RlX2xp
c3RfaXRlbShsaXN0LCBpKTsKLSAgICAgICAgZ19hc3NlcnQoaXRlbSk7Ci0gICAgICAgIFdlYktp
dERPTUVsZW1lbnQqIGVsZW1lbnQgPSAoV2ViS2l0RE9NRWxlbWVudCopaXRlbTsKLSAgICAgICAg
Z19hc3NlcnQoZWxlbWVudCk7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfZG9tX2Vs
ZW1lbnRfZ2V0X3RhZ19uYW1lKGVsZW1lbnQpLCA9PSwgIkRJViIpOwotICAgIH0KLQotICAgIGdf
b2JqZWN0X3VucmVmKGxpc3QpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X2RvbV9kb2N1bWVudF9n
ZXRfZWxlbWVudF9ieV9pZChEb21Eb2N1bWVudEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50
ZXIgZGF0YSkKLXsKLSAgICBnX2Fzc2VydChmaXh0dXJlKTsKLSAgICBXZWJLaXRXZWJWaWV3KiB2
aWV3ID0gKFdlYktpdFdlYlZpZXcqKWZpeHR1cmUtPndlYlZpZXc7Ci0gICAgZ19hc3NlcnQodmll
dyk7Ci0gICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dl
dF9kb21fZG9jdW1lbnQodmlldyk7Ci0gICAgZ19hc3NlcnQoZG9jdW1lbnQpOwotICAgIFdlYktp
dERPTUVsZW1lbnQqIGVsZW1lbnQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5
X2lkKGRvY3VtZW50LCAidGVzdG9rIik7Ci0gICAgZ19hc3NlcnQoZWxlbWVudCk7Ci0gICAgZWxl
bWVudCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWQoZG9jdW1lbnQsICJ0
aGlzLWlkLWRvZXMtbm90LWV4aXN0Iik7Ci0gICAgZ19hc3NlcnQoZWxlbWVudCA9PSAwKTsKLSAg
ICAvKiBUaGUgRE9NIHNwZWMgc2F5cyB0aGUgcmV0dXJuIHZhbHVlIGlzIHVuZGVmaW5lZCB3aGVu
IHRoZXJlJ3MKLSAgICAgKiBtb3JlIHRoYW4gb25lIGVsZW1lbnQgd2l0aCB0aGUgc2FtZSBpZDsg
aW4gb3VyIGNhc2UgdGhlIGZpcnN0Ci0gICAgICogb25lIHdpbGwgYmUgcmV0dXJuZWQgKi8KLSAg
ICBlbGVtZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZChkb2N1bWVu
dCwgInRlc3RiYWQiKTsKLSAgICBnX2Fzc2VydChlbGVtZW50KTsKLSAgICBXZWJLaXRET01IVE1M
RWxlbWVudCogaHRtbEVsZW1lbnQgPSAoV2ViS2l0RE9NSFRNTEVsZW1lbnQqKWVsZW1lbnQ7Ci0g
ICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9kb21faHRtbF9lbGVtZW50X2dldF9pbm5lcl90ZXh0
KGh0bWxFbGVtZW50KSwgPT0sICJmaXJzdCIpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X2RvbV9k
b2N1bWVudF9nZXRfbGlua3MoRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2lu
dGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnQoZml4dHVyZSk7Ci0gICAgV2ViS2l0V2ViVmlldyog
dmlldyA9IChXZWJLaXRXZWJWaWV3KilmaXh0dXJlLT53ZWJWaWV3OwotICAgIGdfYXNzZXJ0KHZp
ZXcpOwotICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfZG9tX2RvY3VtZW50KHZpZXcpOwotICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKLSAgICBXZWJL
aXRET01IVE1MQ29sbGVjdGlvbiAqY29sbGVjdGlvbiA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0
X2xpbmtzKGRvY3VtZW50KTsKLSAgICBnX2Fzc2VydChjb2xsZWN0aW9uKTsKLSAgICBndWxvbmcg
bGVuZ3RoID0gd2Via2l0X2RvbV9odG1sX2NvbGxlY3Rpb25fZ2V0X2xlbmd0aChjb2xsZWN0aW9u
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQobGVuZ3RoLCA9PSwgMyk7Ci0KLSAgICBndWludCBpOwot
Ci0gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBuYW1lc1tdID0geyAiYmxhbmsiLCAiZ29vZ2xlIiwgIndlYmtpdCIgfTsKLSAgICAg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIHVyaXNbXSA9IHsgImFib3V0OmJsYW5rIiwgImh0dHA6Ly93
d3cuZ29vZ2xlLmNvbS8iLCAiaHR0cDovL3d3dy53ZWJraXQub3JnLyIgfTsKLSAgICAgICAgV2Vi
S2l0RE9NTm9kZSAqbm9kZSA9IHdlYmtpdF9kb21faHRtbF9jb2xsZWN0aW9uX2l0ZW0oY29sbGVj
dGlvbiwgaSk7Ci0gICAgICAgIGdfYXNzZXJ0KG5vZGUpOwotICAgICAgICBXZWJLaXRET01FbGVt
ZW50KiBlbGVtZW50ID0gKFdlYktpdERPTUVsZW1lbnQqKW5vZGU7Ci0gICAgICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3RhZ19uYW1lKGVsZW1lbnQpLCA9PSwgIkEi
KTsKLSAgICAgICAgV2ViS2l0RE9NSFRNTEVsZW1lbnQgKmh0bWxFbGVtZW50ID0gKFdlYktpdERP
TUhUTUxFbGVtZW50KillbGVtZW50OwotICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2Rv
bV9odG1sX2VsZW1lbnRfZ2V0X2lubmVyX3RleHQoaHRtbEVsZW1lbnQpLCA9PSwgbmFtZXNbaV0p
OwotICAgICAgICBXZWJLaXRET01IVE1MQW5jaG9yRWxlbWVudCAqYW5jaG9yID0gKFdlYktpdERP
TUhUTUxBbmNob3JFbGVtZW50KillbGVtZW50OwotICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X2RvbV9odG1sX2FuY2hvcl9lbGVtZW50X2dldF9ocmVmKGFuY2hvciksID09LCB1cmlzW2ld
KTsKLSAgICB9Ci0gICAgZ19vYmplY3RfdW5yZWYoY29sbGVjdGlvbik7Ci19Ci0KLXN0YXRpYyB2
b2lkIHRlc3RfZG9tX2RvY3VtZW50X2luc2VydF9yb3coRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0
dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnQoZml4dHVyZSk7Ci0gICAg
V2ViS2l0V2ViVmlldyogdmlldyA9IChXZWJLaXRXZWJWaWV3KilmaXh0dXJlLT53ZWJWaWV3Owot
ICAgIGdfYXNzZXJ0KHZpZXcpOwotICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdl
YmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZpZXcpOwotICAgIGdfYXNzZXJ0KFdFQktJ
VF9ET01fSVNfRE9DVU1FTlQoZG9jdW1lbnQpKTsKLSAgICBXZWJLaXRET01FbGVtZW50KiB0YWJs
ZSA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWQoZG9jdW1lbnQsICJ0YWJs
ZSIpOwotICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9FTEVNRU5UKHRhYmxlKSk7Ci0g
ICAgV2ViS2l0RE9NSFRNTENvbGxlY3Rpb24qIHJvd3MgPSB3ZWJraXRfZG9tX2h0bWxfdGFibGVf
ZWxlbWVudF9nZXRfcm93cyhXRUJLSVRfRE9NX0hUTUxfVEFCTEVfRUxFTUVOVCh0YWJsZSkpOwot
ICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9DT0xMRUNUSU9OKHJvd3MpKTsKLQotICAg
IC8vIFRhYmxlIGlzIGluaXRpYWxseSBlbXB0eS4KLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0
X2RvbV9odG1sX2NvbGxlY3Rpb25fZ2V0X2xlbmd0aChyb3dzKSwgPT0sIDApOwotICAgIFdlYktp
dERPTUhUTUxFbGVtZW50KiByb3cgPSB3ZWJraXRfZG9tX2h0bWxfdGFibGVfZWxlbWVudF9pbnNl
cnRfcm93KFdFQktJVF9ET01fSFRNTF9UQUJMRV9FTEVNRU5UKHRhYmxlKSwgLTEsIE5VTEwpOwot
ICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9UQUJMRV9ST1dfRUxFTUVOVChyb3cpKTsK
LSAgICByb3dzID0gd2Via2l0X2RvbV9odG1sX3RhYmxlX2VsZW1lbnRfZ2V0X3Jvd3MoV0VCS0lU
X0RPTV9IVE1MX1RBQkxFX0VMRU1FTlQodGFibGUpKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9N
X0lTX0hUTUxfQ09MTEVDVElPTihyb3dzKSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9k
b21faHRtbF9jb2xsZWN0aW9uX2dldF9sZW5ndGgocm93cyksID09LCAxKTsKLX0KLQotc3RhdGlj
IHZvaWQgdGVzdF9kb21fZG9jdW1lbnRfZXZhbHVhdGUoRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0
dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnQoZml4dHVyZSk7Ci0gICAg
V2ViS2l0V2ViVmlldyogdmlldyA9IChXZWJLaXRXZWJWaWV3KilmaXh0dXJlLT53ZWJWaWV3Owot
ICAgIGdfYXNzZXJ0KHZpZXcpOwotICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudCA9IHdl
YmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZpZXcpOwotICAgIGdfYXNzZXJ0KFdFQktJ
VF9ET01fSVNfRE9DVU1FTlQoZG9jdW1lbnQpKTsKLSAgICBXZWJLaXRET01Ob2RlTGlzdCogbGlz
dCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lKGRvY3VtZW50
LCAiaHRtbCIpOwotICAgIGdfYXNzZXJ0KGxpc3QpOwotICAgIGd1bG9uZyBsZW5ndGggPSB3ZWJr
aXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpOwotICAgIGdfYXNzZXJ0X2NtcGludChs
ZW5ndGgsID09LCAxKTsKLSAgICBXZWJLaXRET01Ob2RlKiBodG1sID0gd2Via2l0X2RvbV9ub2Rl
X2xpc3RfaXRlbShsaXN0LCAwKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX05PREUoaHRt
bCkpOwotCi0gICAgV2ViS2l0RE9NWFBhdGhSZXN1bHQqIHJlc3VsdCA9IHdlYmtpdF9kb21fZG9j
dW1lbnRfZXZhbHVhdGUoZG9jdW1lbnQsICIvL2RpdiIsIGh0bWwsIE5VTEwsIDAsIE5VTEwsIE5V
TEwpOwotICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfWFBBVEhfUkVTVUxUKHJlc3VsdCkpOwot
Ci0gICAgaW50IGkgPSAwOwotICAgIFdlYktpdERPTU5vZGUqIG5vZGU7Ci0gICAgd2hpbGUgKCAo
bm9kZSA9IHdlYmtpdF9kb21feHBhdGhfcmVzdWx0X2l0ZXJhdGVfbmV4dChyZXN1bHQsIE5VTEwp
KSAhPSBOVUxMKSB7Ci0gICAgICAgIGdfYXNzZXJ0KG5vZGUpOwotICAgICAgICBXZWJLaXRET01F
bGVtZW50KiBlbGVtZW50ID0gKFdlYktpdERPTUVsZW1lbnQqKW5vZGU7Ci0gICAgICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X3RhZ19uYW1lKGVsZW1lbnQpLCA9PSwg
IkRJViIpOwotICAgICAgICBpKys7Ci0gICAgfQotICAgIGdfYXNzZXJ0X2NtcGludChpLCA9PSwg
Mik7Ci0KLSAgICBnX29iamVjdF91bnJlZihsaXN0KTsKLX0KLQotc3RhdGljIHZvaWQgd2Vha19u
b3RpZnkoZ3BvaW50ZXIgZGF0YSwgR09iamVjdCogem9tYmllKQotewotICAgIGd1aW50KiBjb3Vu
dCA9IChndWludCopZGF0YTsKLSAgICAoKmNvdW50KSsrOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0
X2RvbV9kb2N1bWVudF9nYXJiYWdlX2NvbGxlY3Rpb24oRG9tRG9jdW1lbnRGaXh0dXJlKiBmaXh0
dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ3VpbnQgY291bnQgPSAwOwotICAgIGdf
YXNzZXJ0KGZpeHR1cmUpOwotICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSAoV2ViS2l0V2ViVmll
dyopZml4dHVyZS0+d2ViVmlldzsKLSAgICBnX2Fzc2VydCh2aWV3KTsKLSAgICBXZWJLaXRET01E
b2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3
KTsKLSAgICBnX2Fzc2VydChkb2N1bWVudCk7Ci0gICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpF
Q1QoZG9jdW1lbnQpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7Ci0gICAgV2Vi
S2l0RE9NSFRNTEhlYWRFbGVtZW50KiBoZWFkID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfaGVh
ZChkb2N1bWVudCk7Ci0gICAgZ19hc3NlcnQoaGVhZCk7Ci0gICAgZ19vYmplY3Rfd2Vha19yZWYo
R19PQkpFQ1QoaGVhZCksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKLSAgICBX
ZWJLaXRET01IVE1MRWxlbWVudCogYm9keSA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2JvZHko
ZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KGJvZHkpOwotICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdf
T0JKRUNUKGJvZHkpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7Ci0gICAgV2Vi
S2l0RE9NSFRNTENvbGxlY3Rpb24gKmNvbGxlY3Rpb24gPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dl
dF9saW5rcyhkb2N1bWVudCk7Ci0gICAgZ19hc3NlcnQoY29sbGVjdGlvbik7Ci0gICAgZ19vYmpl
Y3Rfd2Vha19yZWYoR19PQkpFQ1QoY29sbGVjdGlvbiksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlm
eSwgJmNvdW50KTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VC
X1ZJRVcodmlldyksIEhUTUxfRE9DVU1FTlRfTElOS1MsIE5VTEwsIE5VTEwsIE5VTEwpOwotCi0g
ICAgd2hpbGUgKGdfbWFpbl9jb250ZXh0X3BlbmRpbmcoTlVMTCkpCi0gICAgICAgIGdfbWFpbl9j
b250ZXh0X2l0ZXJhdGlvbihOVUxMLCBGQUxTRSk7Ci0KLSAgICBnX2Fzc2VydF9jbXB1aW50KGNv
dW50LCA9PSwgMyk7Ci0KLSAgICBnX29iamVjdF91bnJlZihjb2xsZWN0aW9uKTsKLSAgICBnX2Fz
c2VydF9jbXB1aW50KGNvdW50LCA9PSwgNCk7Ci0KLSAgICBjb3VudCA9IDA7Ci0KLSAgICBkb2N1
bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZpZXcpOwotICAgIGdfYXNz
ZXJ0KGRvY3VtZW50KTsKLSAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVDVChkb2N1bWVudCks
IChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKLSAgICBoZWFkID0gd2Via2l0X2Rv
bV9kb2N1bWVudF9nZXRfaGVhZChkb2N1bWVudCk7Ci0gICAgZ19hc3NlcnQoaGVhZCk7Ci0gICAg
Z19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoaGVhZCksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlm
eSwgJmNvdW50KTsKLSAgICBib2R5ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfYm9keShkb2N1
bWVudCk7Ci0gICAgZ19hc3NlcnQoYm9keSk7Ci0gICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpF
Q1QoYm9keSksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKLSAgICBjb2xsZWN0
aW9uID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfbGlua3MoZG9jdW1lbnQpOwotICAgIGdfYXNz
ZXJ0KGNvbGxlY3Rpb24pOwotICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGNvbGxlY3Rp
b24pLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7Ci0gICAgLyogQXNrIHR3aWNl
IGZvciB0aGUgc2FtZSBvYmplY3QgKi8KLSAgICBXZWJLaXRET01IVE1MQ29sbGVjdGlvbiogY29s
bGVjdGlvbjIgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9saW5rcyhkb2N1bWVudCk7Ci0gICAg
Z19hc3NlcnQoY29sbGVjdGlvbjIpOwotICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGNv
bGxlY3Rpb24yKSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOwotCi0gICAgZ19v
YmplY3RfdW5yZWYoZG9jdW1lbnQpOwotICAgIGdfb2JqZWN0X3VucmVmKGhlYWQpOwotICAgIGdf
b2JqZWN0X3VucmVmKGJvZHkpOwotICAgIGdfb2JqZWN0X3VucmVmKGNvbGxlY3Rpb24pOwotICAg
IGdfb2JqZWN0X3VucmVmKGNvbGxlY3Rpb24yKTsKLQotICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291
bnQsID09LCA1KTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VC
X1ZJRVcodmlldyksIEhUTUxfRE9DVU1FTlRfSUZSQU1FLCBOVUxMLCBOVUxMLCBOVUxMKTsKLQot
ICAgIHdoaWxlIChnX21haW5fY29udGV4dF9wZW5kaW5nKE5VTEwpKQotICAgICAgICBnX21haW5f
Y29udGV4dF9pdGVyYXRpb24oTlVMTCwgRkFMU0UpOwotCi0gICAgY291bnQgPSAwOwotCi0gICAg
ZG9jdW1lbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCh2aWV3KTsKLSAgICBX
ZWJLaXRET01FbGVtZW50KiBkaXYgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5
X2lkKGRvY3VtZW50LCAidGVzdCIpOwotICAgIGdfYXNzZXJ0KGRpdik7Ci0gICAgZ19vYmplY3Rf
d2Vha19yZWYoR19PQkpFQ1QoZGl2KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQp
OwotICAgIFdlYktpdERPTUVsZW1lbnQqIGlmcmFtZSA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0
X2VsZW1lbnRfYnlfaWQoZG9jdW1lbnQsICJpZnJhbWUiKTsKLSAgICBnX2Fzc2VydChpZnJhbWUp
OwotCi0gICAgd2Via2l0X2RvbV9lbGVtZW50X3NldF9hdHRyaWJ1dGUoaWZyYW1lLCAic3JjIiwg
ImRhdGE6PGh0bWw+PGhlYWQ+PC9oZWFkPjwvaHRtbD4iLCBOVUxMKTsKLQotICAgIHdoaWxlIChn
X21haW5fY29udGV4dF9wZW5kaW5nKE5VTEwpKQotICAgICAgICBnX21haW5fY29udGV4dF9pdGVy
YXRpb24oTlVMTCwgRkFMU0UpOwotCi0gICAgV2ViS2l0RE9NRG9jdW1lbnQqIGlmcmFtZURvY3Vt
ZW50ID0gd2Via2l0X2RvbV9odG1sX2lmcmFtZV9lbGVtZW50X2dldF9jb250ZW50X2RvY3VtZW50
KFdFQktJVF9ET01fSFRNTF9JRlJBTUVfRUxFTUVOVChpZnJhbWUpKTsKLSAgICBnX2Fzc2VydChp
ZnJhbWVEb2N1bWVudCk7Ci0gICAgaGVhZCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2hlYWQo
aWZyYW1lRG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KGhlYWQpOwotICAgIGdfb2JqZWN0X3dlYWtf
cmVmKEdfT0JKRUNUKGhlYWQpLCAoR1dlYWtOb3RpZnkpd2Vha19ub3RpZnksICZjb3VudCk7Ci0K
LSAgICB3ZWJraXRfZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0ZShpZnJhbWUsICJzcmMiLCAiYWJv
dXQ6YmxhbmsiLCBOVUxMKTsKLQotICAgIHdoaWxlIChnX21haW5fY29udGV4dF9wZW5kaW5nKE5V
TEwpKQotICAgICAgICBnX21haW5fY29udGV4dF9pdGVyYXRpb24oTlVMTCwgRkFMU0UpOwotCi0g
ICAgZ19hc3NlcnRfY21wdWludChjb3VudCwgPT0sIDEpOwotCi0gICAgd2Via2l0X3dlYl92aWV3
X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh2aWV3KSwgSFRNTF9ET0NVTUVOVF9MSU5LUywg
TlVMTCwgTlVMTCwgTlVMTCk7Ci0KLSAgICB3aGlsZSAoZ19tYWluX2NvbnRleHRfcGVuZGluZyhO
VUxMKSkKLSAgICAgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKE5VTEwsIEZBTFNFKTsKLQot
ICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09LCAyKTsKLQotICAgIGNvdW50ID0gMDsKLQot
ICAgIGRvY3VtZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7Ci0g
ICAgZ19hc3NlcnQoZG9jdW1lbnQpOwotICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGRv
Y3VtZW50KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOwotICAgIC8qIEFzayB0
d2ljZSBmb3IgdGhlIERvY3VtZW50ICovCi0gICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50
MiA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KHZpZXcpOwotICAgIGdfYXNzZXJ0
KGRvY3VtZW50Mik7Ci0gICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoZG9jdW1lbnQyKSwg
KEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOwotICAgIGhlYWQgPSB3ZWJraXRfZG9t
X2RvY3VtZW50X2dldF9oZWFkKGRvY3VtZW50KTsKLSAgICBnX2Fzc2VydChoZWFkKTsKLSAgICBn
X29iamVjdF93ZWFrX3JlZihHX09CSkVDVChoZWFkKSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5
LCAmY291bnQpOwotICAgIGJvZHkgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9ib2R5KGRvY3Vt
ZW50KTsKLSAgICBnX2Fzc2VydChib2R5KTsKLSAgICBnX29iamVjdF93ZWFrX3JlZihHX09CSkVD
VChib2R5KSwgKEdXZWFrTm90aWZ5KXdlYWtfbm90aWZ5LCAmY291bnQpOwotICAgIGNvbGxlY3Rp
b24gPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9saW5rcyhkb2N1bWVudCk7Ci0gICAgZ19hc3Nl
cnQoY29sbGVjdGlvbik7Ci0gICAgZ19vYmplY3Rfd2Vha19yZWYoR19PQkpFQ1QoY29sbGVjdGlv
biksIChHV2Vha05vdGlmeSl3ZWFrX25vdGlmeSwgJmNvdW50KTsKLQotICAgIGd0a193aWRnZXRf
ZGVzdHJveShmaXh0dXJlLT53ZWJWaWV3KTsKLSAgICBmaXh0dXJlLT53ZWJWaWV3ID0gTlVMTDsK
LQotICAgIGdfYXNzZXJ0X2NtcHVpbnQoY291bnQsID09LCA0KTsKLQotICAgIGdfb2JqZWN0X3Vu
cmVmKGNvbGxlY3Rpb24pOwotCi0gICAgZ19hc3NlcnRfY21wdWludChjb3VudCwgPT0sIDUpOwot
fQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgZ3RrX3Rlc3RfaW5p
dCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy8iKTsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvZG9tZG9jdW1lbnQv
dGVzdF90aXRsZSIsCi0gICAgICAgICAgICAgICBEb21Eb2N1bWVudEZpeHR1cmUsIEhUTUxfRE9D
VU1FTlRfVElUTEUsCi0gICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV9zZXR1cCwK
LSAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvY3VtZW50X3RpdGxlLAotICAgICAgICAgICAgICAg
ZG9tX2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtp
dC9kb21kb2N1bWVudC90ZXN0X2dldF9lbGVtZW50c19ieV90YWdfbmFtZSIsCi0gICAgICAgICAg
ICAgICBEb21Eb2N1bWVudEZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfRUxFTUVOVFMsCi0gICAgICAg
ICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rf
ZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZSwKLSAgICAgICAgICAgICAgIGRv
bV9kb2N1bWVudF9maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQv
ZG9tZG9jdW1lbnQvdGVzdF9nZXRfZWxlbWVudHNfYnlfY2xhc3NfbmFtZSIsCi0gICAgICAgICAg
ICAgICBEb21Eb2N1bWVudEZpeHR1cmUsIEhUTUxfRE9DVU1FTlRfRUxFTUVOVFNfQ0xBU1MsCi0g
ICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAg
IHRlc3RfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50c19ieV9jbGFzc19uYW1lLAotICAgICAgICAg
ICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2FkZCgi
L3dlYmtpdC9kb21kb2N1bWVudC90ZXN0X2dldF9lbGVtZW50X2J5X2lkIiwKLSAgICAgICAgICAg
ICAgIERvbURvY3VtZW50Rml4dHVyZSwgSFRNTF9ET0NVTUVOVF9FTEVNRU5UU19JRCwKLSAgICAg
ICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVz
dF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWQsCi0gICAgICAgICAgICAgICBkb21fZG9j
dW1lbnRfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2RvbWRv
Y3VtZW50L3Rlc3RfZ2V0X2xpbmtzIiwKLSAgICAgICAgICAgICAgIERvbURvY3VtZW50Rml4dHVy
ZSwgSFRNTF9ET0NVTUVOVF9MSU5LUywKLSAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0
dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF9kb21fZG9jdW1lbnRfZ2V0X2xpbmtzLAot
ICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190
ZXN0X2FkZCgiL3dlYmtpdC9kb21kb2N1bWVudC90ZXN0X3RhYmxlX2luc2VydF9yb3ciLAotICAg
ICAgICAgICAgICAgRG9tRG9jdW1lbnRGaXh0dXJlLCBIVE1MX0RPQ1VNRU5UX1RBQkxFLAotICAg
ICAgICAgICAgICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0
ZXN0X2RvbV9kb2N1bWVudF9pbnNlcnRfcm93LAotICAgICAgICAgICAgICAgZG9tX2RvY3VtZW50
X2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21kb2N1bWVu
dC90ZXN0X2RvY3VtZW50X2V2YWx1YXRlIiwKLSAgICAgICAgICAgICAgIERvbURvY3VtZW50Rml4
dHVyZSwgSFRNTF9ET0NVTUVOVF9FVkFMVUFURSwKLSAgICAgICAgICAgICAgIGRvbV9kb2N1bWVu
dF9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF9kb21fZG9jdW1lbnRfZXZhbHVh
dGUsCi0gICAgICAgICAgICAgICBkb21fZG9jdW1lbnRfZml4dHVyZV90ZWFyZG93bik7Ci0KLSAg
ICBnX3Rlc3RfYWRkKCIvd2Via2l0L2RvbWRvY3VtZW50L3Rlc3RfZ2FyYmFnZV9jb2xsZWN0aW9u
IiwKLSAgICAgICAgICAgICAgIERvbURvY3VtZW50Rml4dHVyZSwgSFRNTF9ET0NVTUVOVF9MSU5L
UywKLSAgICAgICAgICAgICAgIGRvbV9kb2N1bWVudF9maXh0dXJlX3NldHVwLAotICAgICAgICAg
ICAgICAgdGVzdF9kb21fZG9jdW1lbnRfZ2FyYmFnZV9jb2xsZWN0aW9uLAotICAgICAgICAgICAg
ICAgZG9tX2RvY3VtZW50X2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgcmV0dXJuIGdfdGVzdF9y
dW4oKTsKLX0KLQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRH
dGsvdGVzdGRvbWRvbXdpbmRvdy5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRH
dGsvdGVzdGRvbWRvbXdpbmRvdy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGZj
ZDE4NmEwZWU4NDJhYTBhOGQ5MTU3YTA3MjRkNjk2NTM4YWQ4Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0R3RrL3Rlc3Rkb21kb213aW5kb3cuYworKysgL2Rldi9udWxsCkBAIC0xLDI1OCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJ0ZXN0X3V0aWxzLmgiCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVk
ZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0
L3dlYmtpdC5oPgotCi0jZGVmaW5lIEhUTUxfRE9DVU1FTlQgIjxodG1sPjxoZWFkPjx0aXRsZT48
L3RpdGxlPjwvaGVhZD48c3R5bGUgdHlwZT0ndGV4dC9jc3MnPiN0ZXN0IHsgZm9udC1zaXplOiAx
NnB4OyB9PC9zdHlsZT48Ym9keT48cCBpZD0ndGVzdCc+dGVzdDwvcD48L2JvZHk+PC9odG1sPiIK
LQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIEd0a1dpZGdldCogd2ViVmlldzsKLSAgICBHdGtXaWRn
ZXQqIHdpbmRvdzsKLSAgICBXZWJLaXRET01ET01XaW5kb3cqIGRvbVdpbmRvdzsKLSAgICBHTWFp
bkxvb3AqIGxvb3A7Ci0KLSAgICBnYm9vbGVhbiBsb2FkZWQ7Ci0gICAgZ2Jvb2xlYW4gY2xpY2tl
ZDsKLSAgICBnY29uc3Rwb2ludGVyIGRhdGE7Ci19IERvbURvbXZpZXdGaXh0dXJlOwotCi1zdGF0
aWMgZ2Jvb2xlYW4gZmluaXNoX2xvYWRpbmcoRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUpCi17
Ci0gICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1bm5pbmcoZml4dHVyZS0+bG9vcCkpCi0gICAgICAg
IGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci19
Ci0KLXN0YXRpYyB2b2lkIGRvbV9kb212aWV3X2ZpeHR1cmVfc2V0dXAoRG9tRG9tdmlld0ZpeHR1
cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBmaXh0dXJlLT5sb29wID0g
Z19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotICAgIGZpeHR1cmUtPndpbmRvdyA9IGd0a193
aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwotICAgIGZpeHR1cmUtPndlYlZpZXcgPSB3
ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Ci0gICAgZml4dHVyZS0+ZGF0YSA9IGRhdGE7Ci0KLSAgICBn
dGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGZpeHR1cmUtPndpbmRvdyksIEdUS19XSURH
RVQoZml4dHVyZS0+d2ViVmlldykpOwotfQotCi1zdGF0aWMgdm9pZCBkb21fZG9tdmlld19maXh0
dXJlX3RlYXJkb3duKERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRh
dGEpCi17Ci0gICAgZ3RrX3dpZGdldF9kZXN0cm95KGZpeHR1cmUtPndpbmRvdyk7Ci0gICAgZ19t
YWluX2xvb3BfdW5yZWYoZml4dHVyZS0+bG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRvbV9kb21f
d2luZG93X2ZpeHR1cmVfc2V0dXAoRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBv
aW50ZXIgZGF0YSkKLXsKLSAgICBmaXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEws
IFRSVUUpOwotICAgIGZpeHR1cmUtPndlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Ci0g
ICAgZ19vYmplY3RfcmVmX3NpbmsoZml4dHVyZS0+d2ViVmlldyk7Ci0KLSAgICBpZiAoZGF0YSAh
PSBOVUxMKQotICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9W
SUVXIChmaXh0dXJlLT53ZWJWaWV3KSwgKGNvbnN0IGNoYXIqKSBkYXRhLCBOVUxMLCBOVUxMLCBO
VUxMKTsKLQotICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWZpbmlzaF9sb2FkaW5nLCBmaXh0
dXJlKTsKLSAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Ci19Ci0KLXN0YXRpYyB2
b2lkIGRvbV9kb21fd2luZG93X2ZpeHR1cmVfdGVhcmRvd24oRG9tRG9tdmlld0ZpeHR1cmUqIGZp
eHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBpZiAoZml4dHVyZS0+d2ViVmlldykK
LSAgICAgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViVmlldyk7Ci0gICAgZ19tYWluX2xv
b3BfdW5yZWYoZml4dHVyZS0+bG9vcCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBsb2FkZWRDYWxs
YmFjayhXZWJLaXRET01ET01XaW5kb3cqIHZpZXcsIFdlYktpdERPTUV2ZW50KiBldmVudCwgRG9t
RG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUpCi17Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+bG9hZGVk
ID09IEZBTFNFKTsKLSAgICBmaXh0dXJlLT5sb2FkZWQgPSBUUlVFOwotCi0gICAgcmV0dXJuIEZB
TFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gY2xpY2tlZENhbGxiYWNrKFdlYktpdERPTURPTVdp
bmRvdyogdmlldywgV2ViS2l0RE9NRXZlbnQqIGV2ZW50LCBEb21Eb212aWV3Rml4dHVyZSogZml4
dHVyZSkKLXsKLSAgICBXZWJLaXRET01FdmVudFRhcmdldCogdGFyZ2V0OwotICAgIGd1c2hvcnQg
cGhhc2U7Ci0KLSAgICBnX2Fzc2VydChldmVudCk7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9J
U19FVkVOVChldmVudCkpOwotCi0gICAgLy8gV2Ugc2hvdWxkIGNhdGNoIHRoaXMgaW4gdGhlIGJ1
YmJsaW5nIHVwIHBoYXNlLCBzaW5jZSB3ZSBhcmUgY29ubmVjdGluZyB0byB0aGUgdG9wbGV2ZWwg
b2JqZWN0Ci0gICAgcGhhc2UgPSB3ZWJraXRfZG9tX2V2ZW50X2dldF9ldmVudF9waGFzZShldmVu
dCk7Ci0gICAgZ19hc3NlcnRfY21waW50KHBoYXNlLCA9PSwgMyk7Ci0KLSAgICB0YXJnZXQgPSB3
ZWJraXRfZG9tX2V2ZW50X2dldF9jdXJyZW50X3RhcmdldChldmVudCk7Ci0gICAgZ19hc3NlcnQo
dGFyZ2V0ID09IFdFQktJVF9ET01fRVZFTlRfVEFSR0VUKHZpZXcpKTsKLQotICAgIGdfYXNzZXJ0
KGZpeHR1cmUtPmNsaWNrZWQgPT0gRkFMU0UpOwotICAgIGZpeHR1cmUtPmNsaWNrZWQgPSBUUlVF
OwotCi0gICAgZmluaXNoX2xvYWRpbmcoZml4dHVyZSk7Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci19
Ci0KLWdib29sZWFuIG1hcF9ldmVudF9jYihHdGtXaWRnZXQgKndpZGdldCwgR2RrRXZlbnQqIGV2
ZW50LCBEb21Eb212aWV3Rml4dHVyZSogZml4dHVyZSkKLXsKLSAgICB3ZWJraXRfd2ViX3ZpZXdf
bG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXIChmaXh0dXJlLT53ZWJWaWV3KSwgKGNvbnN0IGNo
YXIqKWZpeHR1cmUtPmRhdGEsIE5VTEwsIE5VTEwsIE5VTEwpOwotCi0gICAgcmV0dXJuIEZBTFNF
OwotfQotCi1zdGF0aWMgdm9pZCBsb2FkX2V2ZW50X2NhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcsIEdQYXJhbVNwZWMqIHNwZWMsIERvbURvbXZpZXdGaXh0dXJlKiBmaXh0dXJlKQotewot
ICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0
YXR1cyh3ZWJWaWV3KTsKLSAgICBpZiAoc3RhdHVzID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKSB7
Ci0gICAgICAgIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0ZW5lcihXRUJL
SVRfRE9NX0VWRU5UX1RBUkdFVChmaXh0dXJlLT5kb21XaW5kb3cpLCAiY2xpY2siLCBHX0NBTExC
QUNLKGNsaWNrZWRDYWxsYmFjayksIGZhbHNlLCBmaXh0dXJlKTsKLQotICAgICAgICBnX2Fzc2Vy
dChmaXh0dXJlLT5jbGlja2VkID09IEZBTFNFKTsKLSAgICAgICAgZ3RrX3Rlc3Rfd2lkZ2V0X2Ns
aWNrKEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksIDEsIDApOwotICAgIH0KLQotfQotCi1z
dGF0aWMgdm9pZCB0ZXN0X2RvbV9kb212aWV3X3NpZ25hbHMoRG9tRG9tdmlld0ZpeHR1cmUqIGZp
eHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnX2Fzc2VydChmaXh0dXJlKTsKLSAg
ICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gKFdlYktpdFdlYlZpZXcqKWZpeHR1cmUtPndlYlZpZXc7
Ci0gICAgZ19hc3NlcnQodmlldyk7Ci0gICAgV2ViS2l0RE9NRG9jdW1lbnQqIGRvY3VtZW50ID0g
d2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQodmlldyk7Ci0gICAgZ19hc3NlcnQoZG9j
dW1lbnQpOwotICAgIFdlYktpdERPTURPTVdpbmRvdyogZG9tV2luZG93ID0gd2Via2l0X2RvbV9k
b2N1bWVudF9nZXRfZGVmYXVsdF92aWV3KGRvY3VtZW50KTsKLSAgICBnX2Fzc2VydChkb21XaW5k
b3cpOwotCi0gICAgZml4dHVyZS0+ZG9tV2luZG93ID0gZG9tV2luZG93OwotCi0gICAgd2Via2l0
X2RvbV9ldmVudF90YXJnZXRfYWRkX2V2ZW50X2xpc3RlbmVyKFdFQktJVF9ET01fRVZFTlRfVEFS
R0VUKGZpeHR1cmUtPmRvbVdpbmRvdyksICJsb2FkIiwgR19DQUxMQkFDSyhsb2FkZWRDYWxsYmFj
ayksIGZhbHNlLCBmaXh0dXJlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndpbmRv
dywgIm1hcC1ldmVudCIsIEdfQ0FMTEJBQ0sobWFwX2V2ZW50X2NiKSwgZml4dHVyZSk7Ci0gICAg
Z19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIs
IEdfQ0FMTEJBQ0sobG9hZF9ldmVudF9jYWxsYmFjayksIGZpeHR1cmUpOwotCi0gICAgZ3RrX3dp
ZGdldF9zaG93X2FsbChmaXh0dXJlLT53aW5kb3cpOwotICAgIGd0a193aW5kb3dfcHJlc2VudChH
VEtfV0lORE9XKGZpeHR1cmUtPndpbmRvdykpOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1
cmUtPmxvb3ApOwotCi0gICAgZ19hc3NlcnQoZml4dHVyZS0+bG9hZGVkKTsKLSAgICBnX2Fzc2Vy
dChmaXh0dXJlLT5jbGlja2VkKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1jbGlja2VkX2NiKFdl
YktpdERPTUV2ZW50VGFyZ2V0KiB0YXJnZXQsIFdlYktpdERPTUV2ZW50KiBldmVudCwgRG9tRG9t
dmlld0ZpeHR1cmUqIGZpeHR1cmUpCi17Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+Y2xpY2tlZCA9
PSBGQUxTRSk7Ci0gICAgZml4dHVyZS0+Y2xpY2tlZCA9IFRSVUU7Ci0gICAgZmluaXNoX2xvYWRp
bmcoZml4dHVyZSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCBsb2FkX3N0
YXR1c19jYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHUGFyYW1TcGVjKiBzcGVjLCBE
b21Eb212aWV3Rml4dHVyZSogZml4dHVyZSkKLXsKLSAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1
cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7Ci0gICAgaWYgKHN0
YXR1cyA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkgewotICAgICAgICBXZWJLaXRET01Eb2N1bWVu
dCogZG9jdW1lbnQ7Ci0gICAgICAgIFdlYktpdERPTURPTVdpbmRvdyogZG9tV2luZG93OwotICAg
ICAgICBXZWJLaXRET01FbGVtZW50KiBlbGVtZW50OwotICAgICAgICBXZWJLaXRET01FdmVudCog
ZXZlbnQ7Ci0gICAgICAgIGdsb25nIGNsaWVudFgsIGNsaWVudFk7Ci0KLSAgICAgICAgZG9jdW1l
bnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudChXRUJLSVRfV0VCX1ZJRVcoZml4
dHVyZS0+d2ViVmlldykpOwotICAgICAgICBnX2Fzc2VydChkb2N1bWVudCk7Ci0gICAgICAgIGRv
bVdpbmRvdyA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RlZmF1bHRfdmlldyhkb2N1bWVudCk7
Ci0gICAgICAgIGdfYXNzZXJ0KGRvbVdpbmRvdyk7Ci0gICAgICAgIGZpeHR1cmUtPmRvbVdpbmRv
dyA9IGRvbVdpbmRvdzsKLQotICAgICAgICBlbGVtZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9n
ZXRfZWxlbWVudF9ieV9pZChkb2N1bWVudCwgInRlc3QiKTsKLSAgICAgICAgZ19hc3NlcnQoZWxl
bWVudCk7Ci0gICAgICAgIGV2ZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZXZlbnQo
ZG9jdW1lbnQsICJNb3VzZUV2ZW50IiwgTlVMTCk7Ci0gICAgICAgIGdfYXNzZXJ0KGV2ZW50KTsK
LSAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19FVkVOVChldmVudCkpOwotICAgICAgICBn
X2Fzc2VydChXRUJLSVRfRE9NX0lTX01PVVNFX0VWRU5UKGV2ZW50KSk7Ci0gICAgICAgIGNsaWVu
dFggPSB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X2NsaWVudF9sZWZ0KGVsZW1lbnQpOwotICAgICAg
ICBjbGllbnRZID0gd2Via2l0X2RvbV9lbGVtZW50X2dldF9jbGllbnRfdG9wKGVsZW1lbnQpOwot
ICAgICAgICB3ZWJraXRfZG9tX21vdXNlX2V2ZW50X2luaXRfbW91c2VfZXZlbnQoV0VCS0lUX0RP
TV9NT1VTRV9FVkVOVChldmVudCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiY2xpY2siLCBUUlVFLCBUUlVFLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4dHVyZS0+ZG9tV2luZG93LCAwLCAwLCAwLCBj
bGllbnRYLCBjbGllbnRZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRkFMU0UsIEZBTFNFLCBGQUxTRSwgRkFMU0UsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVChl
bGVtZW50KSk7Ci0gICAgICAgIHdlYmtpdF9kb21fZXZlbnRfdGFyZ2V0X2FkZF9ldmVudF9saXN0
ZW5lcihXRUJLSVRfRE9NX0VWRU5UX1RBUkdFVChlbGVtZW50KSwgImNsaWNrIiwgR19DQUxMQkFD
SyhjbGlja2VkX2NiKSwgZmFsc2UsIGZpeHR1cmUpOwotICAgICAgICBnX2Fzc2VydChmaXh0dXJl
LT5jbGlja2VkID09IEZBTFNFKTsKLSAgICAgICAgd2Via2l0X2RvbV9ldmVudF90YXJnZXRfZGlz
cGF0Y2hfZXZlbnQoV0VCS0lUX0RPTV9FVkVOVF9UQVJHRVQoZWxlbWVudCksIGV2ZW50LCBOVUxM
KTsKLSAgICB9Ci0KLX0KLQotc3RhdGljIHZvaWQgdGVzdF9kb21fZG9tdmlld19kaXNwYXRjaF9l
dmVudChEb21Eb212aWV3Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewot
ICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2luZG93LCAibWFwLWV2ZW50IiwgR19DQUxM
QkFDSyhtYXBfZXZlbnRfY2IpLCBmaXh0dXJlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1
cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhsb2FkX3N0YXR1
c19jYWxsYmFjayksIGZpeHR1cmUpOwotCi0gICAgZ3RrX3dpZGdldF9zaG93X2FsbChmaXh0dXJl
LT53aW5kb3cpOwotICAgIGd0a193aW5kb3dfcHJlc2VudChHVEtfV0lORE9XKGZpeHR1cmUtPndp
bmRvdykpOwotCi0gICAgZ19tYWluX2xvb3BfcnVuIChmaXh0dXJlLT5sb29wKTsKLSAgICBnX2Fz
c2VydChmaXh0dXJlLT5jbGlja2VkKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9kb21fZG9tX3dp
bmRvd19nZXRfY29tcHV0ZWRfc3R5bGUoRG9tRG9tdmlld0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25z
dHBvaW50ZXIgZGF0YSkKLXsKLSAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudChXRUJLSVRfV0VCX1ZJRVcoZml4dHVyZS0+d2Vi
VmlldykpOwotICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKLSAgICBXZWJLaXRET01ET01XaW5kb3cq
IGRvbVdpbmRvdyA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0X2RlZmF1bHRfdmlldyhkb2N1bWVu
dCk7Ci0gICAgZ19hc3NlcnQoZG9tV2luZG93KTsKLQotICAgIFdlYktpdERPTUVsZW1lbnQqICBl
bGVtZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9ieV9pZChkb2N1bWVudCwg
InRlc3QiKTsKLSAgICBnX2Fzc2VydChlbGVtZW50KTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9N
X0lTX0VMRU1FTlQoZWxlbWVudCkpOwotICAgIFdlYktpdERPTUNTU1N0eWxlRGVjbGFyYXRpb24q
IGNzc1N0eWxlID0gd2Via2l0X2RvbV9kb21fd2luZG93X2dldF9jb21wdXRlZF9zdHlsZShkb21X
aW5kb3csIGVsZW1lbnQsIE5VTEwpOwotICAgIGdjaGFyKiBmb250U2l6ZSA9IHdlYmtpdF9kb21f
Y3NzX3N0eWxlX2RlY2xhcmF0aW9uX2dldF9wcm9wZXJ0eV92YWx1ZShjc3NTdHlsZSwgImZvbnQt
c2l6ZSIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihmb250U2l6ZSwgPT0sICIxNnB4Iik7Ci19Ci0K
LWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZh
cmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53
ZWJraXQub3JnLyIpOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9kb21kb212aWV3L3NpZ25h
bHMiLAotICAgICAgICAgICAgICAgRG9tRG9tdmlld0ZpeHR1cmUsIEhUTUxfRE9DVU1FTlQsCi0g
ICAgICAgICAgICAgICBkb21fZG9tdmlld19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAg
dGVzdF9kb21fZG9tdmlld19zaWduYWxzLAotICAgICAgICAgICAgICAgZG9tX2RvbXZpZXdfZml4
dHVyZV90ZWFyZG93bik7Ci0KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2RvbWRvbXZpZXcvZGlz
cGF0Y2hfZXZlbnQiLAotICAgICAgICAgICAgICAgRG9tRG9tdmlld0ZpeHR1cmUsIEhUTUxfRE9D
VU1FTlQsCi0gICAgICAgICAgICAgICBkb21fZG9tdmlld19maXh0dXJlX3NldHVwLAotICAgICAg
ICAgICAgICAgdGVzdF9kb21fZG9tdmlld19kaXNwYXRjaF9ldmVudCwKLSAgICAgICAgICAgICAg
IGRvbV9kb212aWV3X2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtp
dC9kb21kb213aW5kb3cvZ2V0X2NvbXB1dGVkX3N0eWxlIiwKLSAgICAgICAgICAgICAgIERvbURv
bXZpZXdGaXh0dXJlLCBIVE1MX0RPQ1VNRU5ULAotICAgICAgICAgICAgICAgZG9tX2RvbV93aW5k
b3dfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfZG9tX2RvbV93aW5kb3dfZ2V0
X2NvbXB1dGVkX3N0eWxlLAotICAgICAgICAgICAgICAgZG9tX2RvbV93aW5kb3dfZml4dHVyZV90
ZWFyZG93bik7Ci0KLSAgICByZXR1cm4gZ190ZXN0X3J1bigpOwotfQotCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG9tbm9kZS5jIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGRvbW5vZGUuYwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZWQ0YmNiZGFhNjIwN2ZhMDJjNjhlMjgyYmUyY2RiZjljZjVlMjc0
ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG9tbm9kZS5jCisrKyAvZGV2L251bGwK
QEAgLTEsMjE5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgInRlc3RfdXRpbHMuaCIKLQotI2luY2x1ZGUg
PGdsaWIuaD4KLSNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4K
LSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0KLSNkZWZpbmUgSFRNTF9ET0NVTUVOVF9ISUVS
QVJDSFlfTkFWSUdBVElPTiAiPGh0bWw+PGhlYWQ+PHRpdGxlPlRoaXMgaXMgdGhlIHRpdGxlPC90
aXRsZT48L2hlYWQ+PGJvZHk+PHA+MTwvcD48cD4yPC9wPjxwPjM8L3A+PC9ib2R5PjwvaHRtbD4i
Ci0jZGVmaW5lIEhUTUxfRE9DVU1FTlRfTk9ERV9JTlNFUlRJT04gIjxodG1sPjxib2R5PjwvYm9k
eT48L2h0bWw+IgotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgR3RrV2lkZ2V0KiB3ZWJWaWV3Owot
ICAgIEdNYWluTG9vcCogbG9vcDsKLX0gRG9tTm9kZUZpeHR1cmU7Ci0KLXN0YXRpYyBnYm9vbGVh
biBmaW5pc2hfbG9hZGluZyhEb21Ob2RlRml4dHVyZSogZml4dHVyZSkKLXsKLSAgICBpZiAoZ19t
YWluX2xvb3BfaXNfcnVubmluZyhmaXh0dXJlLT5sb29wKSkKLSAgICAgICAgZ19tYWluX2xvb3Bf
cXVpdChmaXh0dXJlLT5sb29wKTsKLQotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZv
aWQgZG9tX25vZGVfZml4dHVyZV9zZXR1cChEb21Ob2RlRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0
cG9pbnRlciBkYXRhKQotewotICAgIGZpeHR1cmUtPmxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVM
TCwgVFJVRSk7Ci0gICAgZml4dHVyZS0+d2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsK
LSAgICBnX29iamVjdF9yZWZfc2luayhmaXh0dXJlLT53ZWJWaWV3KTsKLQotICAgIGlmIChkYXRh
ICE9IE5VTEwpCi0gICAgICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyhXRUJLSVRfV0VC
X1ZJRVcoZml4dHVyZS0+d2ViVmlldyksIChjb25zdCBjaGFyKilkYXRhLCBOVUxMLCBOVUxMLCBO
VUxMKTsKLQotICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWZpbmlzaF9sb2FkaW5nLCBmaXh0
dXJlKTsKLSAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Ci19Ci0KLXN0YXRpYyB2
b2lkIGRvbV9ub2RlX2ZpeHR1cmVfdGVhcmRvd24oRG9tTm9kZUZpeHR1cmUqIGZpeHR1cmUsIGdj
b25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT53ZWJWaWV3
KTsKLSAgICBnX21haW5fbG9vcF91bnJlZihmaXh0dXJlLT5sb29wKTsKLX0KLQotc3RhdGljIHZv
aWQgdGVzdF9kb21fbm9kZV9oaWVyYXJjaHlfbmF2aWdhdGlvbihEb21Ob2RlRml4dHVyZSogZml4
dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1
bWVudDsKLSAgICBXZWJLaXRET01IVE1MSGVhZEVsZW1lbnQqIGhlYWQ7Ci0gICAgV2ViS2l0RE9N
SFRNTEJvZHlFbGVtZW50KiBib2R5OwotICAgIFdlYktpdERPTU5vZGVMaXN0KiBsaXN0OwotICAg
IFdlYktpdERPTU5vZGUqIHB0cjsKLSAgICBndWxvbmcgaSwgbGVuZ3RoOwotCi0gICAgZG9jdW1l
bnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudChXRUJLSVRfV0VCX1ZJRVcoZml4
dHVyZS0+d2ViVmlldykpOwotICAgIGdfYXNzZXJ0KGRvY3VtZW50KTsKLSAgICBnX2Fzc2VydChX
RUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7Ci0gICAgaGVhZCA9IHdlYmtpdF9kb21f
ZG9jdW1lbnRfZ2V0X2hlYWQoZG9jdW1lbnQpOwotICAgIGdfYXNzZXJ0KGhlYWQpOwotICAgIGdf
YXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9IRUFEX0VMRU1FTlQoaGVhZCkpOwotCi0gICAgLyog
VGl0bGUsIGhlYWQncyBjaGlsZCAqLwotICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9oYXNf
Y2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGhlYWQpKSk7Ci0gICAgbGlzdCA9IHdlYmtpdF9k
b21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGhlYWQpKTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQod2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0KSwgPT0sIDEp
OwotICAgIHB0ciA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwgMCk7Ci0gICAgZ19h
c3NlcnQocHRyKTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfVElUTEVfRUxFTUVO
VChwdHIpKTsKLSAgICBnX29iamVjdF91bnJlZihsaXN0KTsKLQotICAgIC8qIEJvZHksIEhlYWQg
c2libGluZyAqLwotICAgIHB0ciA9IHdlYmtpdF9kb21fbm9kZV9nZXRfbmV4dF9zaWJsaW5nKFdF
QktJVF9ET01fTk9ERShoZWFkKSk7Ci0gICAgZ19hc3NlcnQocHRyKTsKLSAgICBib2R5ID0gV0VC
S0lUX0RPTV9IVE1MX0JPRFlfRUxFTUVOVChwdHIpOwotICAgIGdfYXNzZXJ0KFdFQktJVF9ET01f
SVNfSFRNTF9CT0RZX0VMRU1FTlQoYm9keSkpOwotCi0gICAgLyogVGhlcmUgaXMgbm8gdGhpcmQg
c2libGluZyAqLwotICAgIHB0ciA9IHdlYmtpdF9kb21fbm9kZV9nZXRfbmV4dF9zaWJsaW5nKHB0
cik7Ci0gICAgZ19hc3NlcnQocHRyID09IE5VTEwpOwotCi0gICAgLyogQm9keSdzIHByZXZpb3Vz
IHNpYmxpbmcgaXMgSGVhZCAqLwotICAgIHB0ciA9IHdlYmtpdF9kb21fbm9kZV9nZXRfcHJldmlv
dXNfc2libGluZyhXRUJLSVRfRE9NX05PREUoYm9keSkpOwotICAgIGdfYXNzZXJ0KHB0cik7Ci0g
ICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0hFQURfRUxFTUVOVChwdHIpKTsKLQotICAg
IC8qIEJvZHkgaGFzIDMgY2hpbGRyZW4gKi8KLSAgICBnX2Fzc2VydCh3ZWJraXRfZG9tX25vZGVf
aGFzX2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSkpOwotICAgIGxpc3QgPSB3ZWJr
aXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSk7Ci0gICAg
bGVuZ3RoID0gd2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xlbmd0aChsaXN0KTsKLSAgICBnX2Fz
c2VydF9jbXBpbnQobGVuZ3RoLCA9PSwgMyk7Ci0KLSAgICAvKiBUaGUgdGhyZWUgb2YgdGhlbSBh
cmUgUCB0YWdzICovCi0gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
IHB0ciA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwgaSk7Ci0gICAgICAgIGdfYXNz
ZXJ0KHB0cik7Ci0gICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9QQVJBR1JBUEhf
RUxFTUVOVChwdHIpKTsKLSAgICB9Ci0KLSAgICAvKiBHbyBiYWNrd2FyZHMgKi8KLSAgICBmb3Ig
KGkgPSAwOyBwdHI7IHB0ciA9IHdlYmtpdF9kb21fbm9kZV9nZXRfcHJldmlvdXNfc2libGluZyhw
dHIpLCBpKyspCi0gICAgICAgIC8qIE5vdGhpbmcgKi87Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQo
aSwgPT0sIDMpOwotICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOwotfQotCi1zdGF0aWMgdm9pZCB0
ZXN0X2RvbV9ub2RlX2luc2VydGlvbihEb21Ob2RlRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9p
bnRlciBkYXRhKQotewotICAgIFdlYktpdERPTURvY3VtZW50KiBkb2N1bWVudDsKLSAgICBXZWJL
aXRET01IVE1MRWxlbWVudCogYm9keTsKLSAgICBXZWJLaXRET01FbGVtZW50KiBwLCAqZGl2Owot
ICAgIFdlYktpdERPTU5vZGVMaXN0KiBsaXN0OwotICAgIFdlYktpdERPTU5vZGUqIG5vZGU7Ci0K
LSAgICBkb2N1bWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50KFdFQktJVF9X
RUJfVklFVyhmaXh0dXJlLT53ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnQoZG9jdW1lbnQpOwotICAg
IGJvZHkgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9ib2R5KGRvY3VtZW50KTsKLSAgICBnX2Fz
c2VydChib2R5KTsKLSAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0hUTUxfRUxFTUVOVChib2R5
KSk7Ci0KLSAgICAvKiBCb2R5IHNob3VsZG4ndCBoYXZlIGFueSBjaGlsZHJlbiBhdCB0aGlzIHBv
aW50ICovCi0gICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2RlcyhXRUJL
SVRfRE9NX05PREUoYm9keSkpID09IEZBTFNFKTsKLQotICAgIC8qIEluc2VydCBvbmUgUCBlbGVt
ZW50ICovCi0gICAgcCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX2VsZW1lbnQoZG9jdW1l
bnQsICJQIiwgTlVMTCk7Ci0gICAgd2Via2l0X2RvbV9ub2RlX2FwcGVuZF9jaGlsZChXRUJLSVRf
RE9NX05PREUoYm9keSksIFdFQktJVF9ET01fTk9ERShwKSwgTlVMTCk7Ci0KLSAgICAvKiBOb3cg
aXQgc2hvdWxkIGhhdmUgb25lLCB0aGUgc2FtZSB0aGF0IHdlIGluc2VydGVkICovCi0gICAgZ19h
c3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9k
eSkpKTsKLSAgICBsaXN0ID0gd2Via2l0X2RvbV9ub2RlX2dldF9jaGlsZF9ub2RlcyhXRUJLSVRf
RE9NX05PREUoYm9keSkpOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfZG9tX25vZGVfbGlz
dF9nZXRfbGVuZ3RoKGxpc3QpLCA9PSwgMSk7Ci0gICAgbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9s
aXN0X2l0ZW0obGlzdCwgMCk7Ci0gICAgZ19hc3NlcnQobm9kZSk7Ci0gICAgZ19hc3NlcnQod2Vi
a2l0X2RvbV9ub2RlX2lzX3NhbWVfbm9kZShXRUJLSVRfRE9NX05PREUocCksIG5vZGUpKTsKLSAg
ICBnX29iamVjdF91bnJlZihsaXN0KTsKLQotICAgIC8qIFJlcGxhY2UgdGhlIFAgdGFnIHdpdGgg
YSBESVYgdGFnICovCi0gICAgZGl2ID0gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxlbWVu
dChkb2N1bWVudCwgIkRJViIsIE5VTEwpOwotICAgIHdlYmtpdF9kb21fbm9kZV9yZXBsYWNlX2No
aWxkKFdFQktJVF9ET01fTk9ERShib2R5KSwgV0VCS0lUX0RPTV9OT0RFKGRpdiksIFdFQktJVF9E
T01fTk9ERShwKSwgTlVMTCk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19jaGls
ZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKLSAgICBsaXN0ID0gd2Via2l0X2RvbV9u
b2RlX2dldF9jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpOwotICAgIGdfYXNzZXJ0
X2NtcGludCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpLCA9PSwgMSk7Ci0g
ICAgbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwgMCk7Ci0gICAgZ19hc3Nl
cnQobm9kZSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2lzX3NhbWVfbm9kZShXRUJL
SVRfRE9NX05PREUoZGl2KSwgbm9kZSkpOwotICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOwotCi0g
ICAgLyogTm93IHJlbW92ZSB0aGUgdGFnICovCi0gICAgd2Via2l0X2RvbV9ub2RlX3JlbW92ZV9j
aGlsZChXRUJLSVRfRE9NX05PREUoYm9keSksIG5vZGUsIE5VTEwpOwotICAgIGxpc3QgPSB3ZWJr
aXRfZG9tX25vZGVfZ2V0X2NoaWxkX25vZGVzKFdFQktJVF9ET01fTk9ERShib2R5KSk7Ci0gICAg
Z19hc3NlcnRfY21waW50KHdlYmtpdF9kb21fbm9kZV9saXN0X2dldF9sZW5ndGgobGlzdCksID09
LCAwKTsKLSAgICBnX29iamVjdF91bnJlZihsaXN0KTsKLQotICAgIC8qIFRlc3QgaW5zZXJ0X2Jl
Zm9yZSAqLwotCi0gICAgLyogSWYgcmVmQ2hpbGQgaXMgbnVsbCwgaW5zZXJ0IG5ld0NoaWxkIGFz
IGxhc3QgZWxlbWVudCBvZiBwYXJlbnQgKi8KLSAgICBkaXYgPSB3ZWJraXRfZG9tX2RvY3VtZW50
X2NyZWF0ZV9lbGVtZW50KGRvY3VtZW50LCAiRElWIiwgTlVMTCk7Ci0gICAgd2Via2l0X2RvbV9u
b2RlX2luc2VydF9iZWZvcmUoV0VCS0lUX0RPTV9OT0RFKGJvZHkpLCBXRUJLSVRfRE9NX05PREUo
ZGl2KSwgTlVMTCwgTlVMTCk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2hhc19jaGls
ZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpKTsKLSAgICBsaXN0ID0gd2Via2l0X2RvbV9u
b2RlX2dldF9jaGlsZF9ub2RlcyhXRUJLSVRfRE9NX05PREUoYm9keSkpOwotICAgIGdfYXNzZXJ0
X2NtcGludCh3ZWJraXRfZG9tX25vZGVfbGlzdF9nZXRfbGVuZ3RoKGxpc3QpLCA9PSwgMSk7Ci0g
ICAgbm9kZSA9IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwgMCk7Ci0gICAgZ19hc3Nl
cnQobm9kZSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2lzX3NhbWVfbm9kZShXRUJL
SVRfRE9NX05PREUoZGl2KSwgbm9kZSkpOwotICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOwotCi0g
ICAgLyogTm93IGluc2VydCBhICdwJyBiZWZvcmUgJ2RpdicgKi8KLSAgICBwID0gd2Via2l0X2Rv
bV9kb2N1bWVudF9jcmVhdGVfZWxlbWVudChkb2N1bWVudCwgIlAiLCBOVUxMKTsKLSAgICB3ZWJr
aXRfZG9tX25vZGVfaW5zZXJ0X2JlZm9yZShXRUJLSVRfRE9NX05PREUoYm9keSksIFdFQktJVF9E
T01fTk9ERShwKSwgV0VCS0lUX0RPTV9OT0RFKGRpdiksIE5VTEwpOwotICAgIGdfYXNzZXJ0KHdl
YmtpdF9kb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RFKGJvZHkpKSk7Ci0g
ICAgbGlzdCA9IHdlYmtpdF9kb21fbm9kZV9nZXRfY2hpbGRfbm9kZXMoV0VCS0lUX0RPTV9OT0RF
KGJvZHkpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X2RvbV9ub2RlX2xpc3RfZ2V0X2xl
bmd0aChsaXN0KSwgPT0sIDIpOwotICAgIG5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVt
KGxpc3QsIDApOwotICAgIGdfYXNzZXJ0KG5vZGUpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21f
bm9kZV9pc19zYW1lX25vZGUoV0VCS0lUX0RPTV9OT0RFKHApLCBub2RlKSk7Ci0gICAgbm9kZSA9
IHdlYmtpdF9kb21fbm9kZV9saXN0X2l0ZW0obGlzdCwgMSk7Ci0gICAgZ19hc3NlcnQobm9kZSk7
Ci0gICAgZ19hc3NlcnQod2Via2l0X2RvbV9ub2RlX2lzX3NhbWVfbm9kZShXRUJLSVRfRE9NX05P
REUoZGl2KSwgbm9kZSkpOwotICAgIGdfb2JqZWN0X3VucmVmKGxpc3QpOwotfQotCi1pbnQgbWFp
bihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFy
Z3YsIE5VTEwpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy8iKTsKLQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvZG9tbm9kZS90ZXN0X2hpZXJhcmNoeV9u
YXZpZ2F0aW9uIiwKLSAgICAgICAgICAgICAgIERvbU5vZGVGaXh0dXJlLCBIVE1MX0RPQ1VNRU5U
X0hJRVJBUkNIWV9OQVZJR0FUSU9OLAotICAgICAgICAgICAgICAgZG9tX25vZGVfZml4dHVyZV9z
ZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfZG9tX25vZGVfaGllcmFyY2h5X25hdmlnYXRpb24s
Ci0gICAgICAgICAgICAgICBkb21fbm9kZV9maXh0dXJlX3RlYXJkb3duKTsKLQotICAgIGdfdGVz
dF9hZGQoIi93ZWJraXQvZG9tbm9kZS90ZXN0X2luc2VydGlvbiIsCi0gICAgICAgICAgICAgICBE
b21Ob2RlRml4dHVyZSwgSFRNTF9ET0NVTUVOVF9OT0RFX0lOU0VSVElPTiwKLSAgICAgICAgICAg
ICAgIGRvbV9ub2RlX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2RvbV9ub2Rl
X2luc2VydGlvbiwKLSAgICAgICAgICAgICAgIGRvbV9ub2RlX2ZpeHR1cmVfdGVhcmRvd24pOwot
Ci0gICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKLX0KLQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGRvd25sb2FkLmMgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG93bmxvYWQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZjhlOGRlZDkzMjJmNGRiODQ0ZDVmYzA5M2I0ZDg2ODlmODUwNWE0ZC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZG93bmxvYWQuYworKysgL2Rldi9udWxsCkBAIC0xLDMy
MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IENocmlzdGlhbiBEeXdhbiA8Y2hy
aXN0aWFuQHR3b3RvYXN0cy5kZT4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDxlcnJu
by5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5j
bHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi1HTWFpbkxvb3AqIGxvb3A7Ci1jaGFyKiB0ZW1wb3Jh
cnlGaWxlbmFtZSA9IE5VTEw7Ci1XZWJLaXREb3dubG9hZCogdGhlRG93bmxvYWQgPSBOVUxMOwot
Ci1zdGF0aWMgdm9pZAotdGVzdF93ZWJraXRfZG93bmxvYWRfY3JlYXRlKHZvaWQpCi17Ci0gICAg
V2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3Q7Ci0gICAgV2ViS2l0RG93bmxvYWQqIGRvd25s
b2FkOwotICAgIGNvbnN0IGdjaGFyKiB1cmkgPSAiaHR0cDovL2V4YW1wbGUuY29tIjsKLSAgICBn
Y2hhciogdG1wRGlyOwotCi0gICAgcmVxdWVzdCA9IHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfbmV3
KHVyaSk7Ci0gICAgZG93bmxvYWQgPSB3ZWJraXRfZG93bmxvYWRfbmV3KHJlcXVlc3QpOwotICAg
IGdfb2JqZWN0X3VucmVmKHJlcXVlc3QpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfZG93
bmxvYWRfZ2V0X3VyaShkb3dubG9hZCksID09LCB1cmkpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF9k
b3dubG9hZF9nZXRfbmV0d29ya19yZXF1ZXN0KGRvd25sb2FkKSA9PSByZXF1ZXN0KTsKLSAgICBn
X2Fzc2VydChnX3N0cnJzdHIodXJpLCB3ZWJraXRfZG93bmxvYWRfZ2V0X3N1Z2dlc3RlZF9maWxl
bmFtZShkb3dubG9hZCkpKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0X3N0YXR1
cyhkb3dubG9hZCkgPT0gV0VCS0lUX0RPV05MT0FEX1NUQVRVU19DUkVBVEVEKTsKLSAgICBnX2Fz
c2VydCghd2Via2l0X2Rvd25sb2FkX2dldF90b3RhbF9zaXplKGRvd25sb2FkKSk7Ci0gICAgZ19h
c3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfY3VycmVudF9zaXplKGRvd25sb2FkKSk7Ci0gICAg
Z19hc3NlcnQoIXdlYmtpdF9kb3dubG9hZF9nZXRfcHJvZ3Jlc3MoZG93bmxvYWQpKTsKLSAgICBn
X2Fzc2VydCghd2Via2l0X2Rvd25sb2FkX2dldF9lbGFwc2VkX3RpbWUoZG93bmxvYWQpKTsKLSAg
ICB0bXBEaXIgPSBnX2ZpbGVuYW1lX3RvX3VyaShnX2dldF90bXBfZGlyKCksIE5VTEwsIE5VTEwp
OwotICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb25fdXJpKGRvd25sb2FkLCB0bXBE
aXIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih0bXBEaXIsID09LCB3ZWJraXRfZG93bmxvYWRfZ2V0
X2Rlc3RpbmF0aW9uX3VyaShkb3dubG9hZCkpOzsKLSAgICBnX2ZyZWUodG1wRGlyKTsKLSAgICBn
X29iamVjdF91bnJlZihkb3dubG9hZCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotbmF2aWdhdGlv
bl9wb2xpY3lfZGVjaXNpb25fcmVxdWVzdGVkX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFdlYkZyYW1lKiB3
ZWJfZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0
TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV2ViS2l0V2ViTmF2aWdhdGlvbkFjdGlvbiogYWN0aW9uLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFdlYlBvbGljeURlY2lzaW9uKiBkZWNp
c2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBk
YXRhKQotewotICAgIHdlYmtpdF93ZWJfcG9saWN5X2RlY2lzaW9uX2Rvd25sb2FkKGRlY2lzaW9u
KTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQKLW5vdGlmeV9zdGF0dXNfY2Io
R09iamVjdCogb2JqZWN0LCBHUGFyYW1TcGVjKiBwc3BlYywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAg
ICBXZWJLaXREb3dubG9hZCogZG93bmxvYWQgPSBXRUJLSVRfRE9XTkxPQUQob2JqZWN0KTsKLSAg
ICBzd2l0Y2ggKHdlYmtpdF9kb3dubG9hZF9nZXRfc3RhdHVzKGRvd25sb2FkKSkgewotICAgIGNh
c2UgV0VCS0lUX0RPV05MT0FEX1NUQVRVU19GSU5JU0hFRDoKLSAgICBjYXNlIFdFQktJVF9ET1dO
TE9BRF9TVEFUVVNfRVJST1I6Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgV0VCS0lUX0RPV05MT0FEX1NUQVRVU19DQU5DRUxMRUQ6Ci0g
ICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGljIGdib29sZWFuCi1zZXRfZmls
ZW5hbWUoZ2NoYXIqIGZpbGVuYW1lKQotewotICAgIGdjaGFyICp1cmkgPSBnX2ZpbGVuYW1lX3Rv
X3VyaShmaWxlbmFtZSwgTlVMTCwgTlVMTCk7Ci0KLSAgICB3ZWJraXRfZG93bmxvYWRfc2V0X2Rl
c3RpbmF0aW9uX3VyaSh0aGVEb3dubG9hZCwgdXJpKTsKLSAgICBnX2ZyZWUodXJpKTsKLQotICAg
IHdlYmtpdF9kb3dubG9hZF9zdGFydCh0aGVEb3dubG9hZCk7Ci0gICAgcmV0dXJuIEZBTFNFOwot
fQotCi1zdGF0aWMgdm9pZAotaGFuZGxlX2Rvd25sb2FkX3JlcXVlc3RlZF9jYihXZWJLaXREb3du
bG9hZCogZG93bmxvYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuKiBi
ZWVuVGhlcmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuIGFzeW5jaCkK
LXsKLSAgICB0aGVEb3dubG9hZCA9IGRvd25sb2FkOwotICAgICpiZWVuVGhlcmUgPSBUUlVFOwot
Ci0gICAgaWYgKHRlbXBvcmFyeUZpbGVuYW1lKSB7Ci0gICAgICAgIGlmIChhc3luY2gpIHsKLSAg
ICAgICAgICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKXNldF9maWxlbmFtZSwgdGVtcG9yYXJ5
RmlsZW5hbWUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZ2NoYXIgKnVyaSA9IGdf
ZmlsZW5hbWVfdG9fdXJpKHRlbXBvcmFyeUZpbGVuYW1lLCBOVUxMLCBOVUxMKTsKLSAgICAgICAg
ICAgIGlmICh1cmkpCi0gICAgICAgICAgICAgICAgd2Via2l0X2Rvd25sb2FkX3NldF9kZXN0aW5h
dGlvbl91cmkoZG93bmxvYWQsIHVyaSk7Ci0gICAgICAgICAgICBnX2ZyZWUodXJpKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZG93bmxvYWQsICJub3RpZnk6OnN0
YXR1cyIsCi0gICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKG5vdGlmeV9zdGF0dXNfY2Ip
LCBOVUxMKTsKLX0KLQotc3RhdGljIGdib29sZWFuCi1kb3dubG9hZF9yZXF1ZXN0ZWRfY2IoV2Vi
S2l0V2ViVmlldyogd2ViX3ZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgV2ViS2l0RG93bmxv
YWQqIGRvd25sb2FkLAotICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuKiBiZWVuVGhlcmUp
Ci17Ci0gICAgaGFuZGxlX2Rvd25sb2FkX3JlcXVlc3RlZF9jYihkb3dubG9hZCwgYmVlblRoZXJl
LCBGQUxTRSk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbgotZG93bmxv
YWRfcmVxdWVzdGVkX2FzeW5jaF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiogYmVlblRoZXJlKQotewotICAgIGhhbmRsZV9k
b3dubG9hZF9yZXF1ZXN0ZWRfY2IoZG93bmxvYWQsIGJlZW5UaGVyZSwgVFJVRSk7Ci0gICAgcmV0
dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkCi10ZXN0X3dlYmtpdF9kb3dubG9hZF9wZXJmb3Jt
KGdib29sZWFuIGFzeW5jaCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lU
X1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgR0NhbGxiYWNrIGRvd25sb2Fk
UmVxdWVzdENhbGxiYWNrID0gTlVMTDsKLQotICAgIGdfb2JqZWN0X3JlZl9zaW5rKEdfT0JKRUNU
KHdlYlZpZXcpKTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgIm5hdmlnYXRpb24t
cG9saWN5LWRlY2lzaW9uLXJlcXVlc3RlZCIsCi0gICAgICAgICAgICAgICAgICAgICBHX0NBTExC
QUNLKG5hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYiksCi0gICAgICAgICAg
ICAgICAgICAgICBOVUxMKTsKLQotICAgIGlmIChhc3luY2gpCi0gICAgICAgIGRvd25sb2FkUmVx
dWVzdENhbGxiYWNrID0gR19DQUxMQkFDSyhkb3dubG9hZF9yZXF1ZXN0ZWRfYXN5bmNoX2NiKTsK
LSAgICBlbHNlCi0gICAgICAgIGRvd25sb2FkUmVxdWVzdENhbGxiYWNrID0gR19DQUxMQkFDSyhk
b3dubG9hZF9yZXF1ZXN0ZWRfY2IpOwotCi0gICAgZ2Jvb2xlYW4gYmVlblRoZXJlID0gRkFMU0U7
Ci0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAiZG93bmxvYWQtcmVxdWVzdGVkIiwKLSAg
ICAgICAgICAgICAgICAgICAgIGRvd25sb2FkUmVxdWVzdENhbGxiYWNrLCAmYmVlblRoZXJlKTsK
LQotICAgIC8qIFByZXBhcmF0aW9uOyBGSVhNRTogd2Ugc2hvdWxkIG1vdmUgdGhpcyBjb2RlIHRv
IGEgdGVzdAotICAgICAqIHV0aWxpdGllcyBmaWxlLCBiZWNhdXNlIHdlIGhhdmUgYSB2ZXJ5IHNp
bWlsYXIgb25lIGluCi0gICAgICogdGVzdHdlYmZyYW1lLmMgKi8KLSAgICBHRXJyb3IgKmVycm9y
ID0gTlVMTDsKLSAgICBnY2hhciogZmlsZW5hbWU7Ci0gICAgaW50IGZkID0gZ19maWxlX29wZW5f
dG1wKCJ3ZWJraXQtdGVzdHdlYmRvd25sb2FkLVhYWFhYWCIsICZmaWxlbmFtZSwgJmVycm9yKTsK
LSAgICBjbG9zZShmZCk7Ci0KLSAgICBpZiAoZXJyb3IpCi0gICAgICAgIGdfY3JpdGljYWwoIkZh
aWxlZCB0byBvcGVuIGEgdGVtcG9yYXJ5IGZpbGUgZm9yIHdyaXRpbmc6ICVzLiIsIGVycm9yLT5t
ZXNzYWdlKTsKLQotICAgIGlmIChnX3VubGluayhmaWxlbmFtZSkgPT0gLTEpCi0gICAgICAgIGdf
Y3JpdGljYWwoIkZhaWxlZCB0byBkZWxldGUgdGhlIHRlbXBvcmFyeSBmaWxlOiAlcy4iLCBnX3N0
cmVycm9yKGVycm5vKSk7Ci0KLSAgICB0aGVEb3dubG9hZCA9IE5VTEw7Ci0gICAgdGVtcG9yYXJ5
RmlsZW5hbWUgPSBmaWxlbmFtZTsKLQotICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwg
VFJVRSk7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHdlYlZpZXcsICJodHRwOi8vZ25v
bWUub3JnLyIpOwotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIGdfYXNzZXJ0X2Nt
cGludChiZWVuVGhlcmUsID09LCBUUlVFKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludChnX2ZpbGVf
dGVzdCh0ZW1wb3JhcnlGaWxlbmFtZSwgR19GSUxFX1RFU1RfSVNfUkVHVUxBUiksID09LCBUUlVF
KTsKLQotICAgIGdfdW5saW5rKHRlbXBvcmFyeUZpbGVuYW1lKTsKLSAgICBnX2ZyZWUodGVtcG9y
YXJ5RmlsZW5hbWUpOwotICAgIHRlbXBvcmFyeUZpbGVuYW1lID0gTlVMTDsKLQotICAgIGdfbWFp
bl9sb29wX3VucmVmKGxvb3ApOwotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotfQotCi1z
dGF0aWMgdm9pZAotdGVzdF93ZWJraXRfZG93bmxvYWRfc3luY2godm9pZCkKLXsKLSAgICB0ZXN0
X3dlYmtpdF9kb3dubG9hZF9wZXJmb3JtKEZBTFNFKTsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3Rf
d2Via2l0X2Rvd25sb2FkX2FzeW5jaCh2b2lkKQotewotICAgIHRlc3Rfd2Via2l0X2Rvd25sb2Fk
X3BlcmZvcm0oVFJVRSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBtaW1lX3R5cGVfcG9saWN5X2Rl
Y2lzaW9uX3JlcXVlc3RlZF9jYihXZWJLaXRXZWJWaWV3KiB2aWV3LCBXZWJLaXRXZWJGcmFtZSog
ZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QsIGNvbnN0IGNoYXIqIG1pbWVfdHlw
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXZWJLaXRXZWJQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24sIGdwb2ludGVyIGRhdGEpCi17Ci0g
ICAgd2Via2l0X3dlYl9wb2xpY3lfZGVjaXNpb25fZG93bmxvYWQoZGVjaXNpb24pOwotICAgIHJl
dHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZCBpZGxlX3F1aXRfbG9vcF9jYihXZWJLaXRXZWJW
aWV3KiB3ZWJfdmlldywgR1BhcmFtU3BlYyogcHNwZWMsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAg
aWYgKHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViX3ZpZXcpID09IFdFQktJVF9M
T0FEX0ZJTklTSEVEIHx8Ci0gICAgICAgIHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMo
d2ViX3ZpZXcpID09IFdFQktJVF9MT0FEX0ZBSUxFRCkKLSAgICAgICAgZ19tYWluX2xvb3BfcXVp
dChsb29wKTsKLX0KLQotc3RhdGljIHZvaWQKLXRlc3Rfd2Via2l0X2Rvd25sb2FkX2RhdGEodm9p
ZCkKLXsKLSAgICBnYm9vbGVhbiBiZWVuVGhlcmUgPSBGQUxTRTsKLSAgICBXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAg
Z19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZp
ZXcsICJkb3dubG9hZC1yZXF1ZXN0ZWQiLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFD
Syhkb3dubG9hZF9yZXF1ZXN0ZWRfY2IpLAotICAgICAgICAgICAgICAgICAgICAgJmJlZW5UaGVy
ZSk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVz
IiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0soaWRsZV9xdWl0X2xvb3BfY2IpLAot
ICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZp
ZXcsICJtaW1lLXR5cGUtcG9saWN5LWRlY2lzaW9uLXJlcXVlc3RlZCIsCi0gICAgICAgICAgICAg
ICAgICAgICBHX0NBTExCQUNLKG1pbWVfdHlwZV9wb2xpY3lfZGVjaXNpb25fcmVxdWVzdGVkX2Ni
KSwKLSAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotCi0gICAgbG9vcCA9IGdfbWFpbl9sb29w
X25ldyhOVUxMLCBUUlVFKTsKLQotICAgIC8qIFdlJ3JlIHRlc3RpbmcgZm9yIGEgY3Jhc2gsIHNv
IGp1c3Qgbm90IGNyYXNoaW5nIGlzIGEgcGFzcyAqLwotICAgIHdlYmtpdF93ZWJfdmlld19sb2Fk
X3VyaSh3ZWJWaWV3LCAiZGF0YTphcHBsaWNhdGlvbi9vY3RlY3Qtc3RyZWFtLCIpOwotICAgIGdf
bWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludChiZWVuVGhlcmUsID09
LCBUUlVFKTsKLQotICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOwotICAgIGdfb2JqZWN0X3Vu
cmVmKHdlYlZpZXcpOwotfQotCi1zdGF0aWMgdm9pZCBub3RpZnlEb3dubG9hZFN0YXR1c0NhbGxi
YWNrKEdPYmplY3QgKm9iamVjdCwgR1BhcmFtU3BlYyAqcHNwZWMsIGdwb2ludGVyIGRhdGEpCi17
Ci0gICAgV2ViS2l0RG93bmxvYWQgKmRvd25sb2FkID0gV0VCS0lUX0RPV05MT0FEKG9iamVjdCk7
Ci0gICAgV2ViS2l0TmV0d29ya1Jlc3BvbnNlICpyZXNwb25zZSA9IHdlYmtpdF9kb3dubG9hZF9n
ZXRfbmV0d29ya19yZXNwb25zZShkb3dubG9hZCk7Ci0gICAgU291cE1lc3NhZ2UgKm1lc3NhZ2Ug
PSB3ZWJraXRfbmV0d29ya19yZXNwb25zZV9nZXRfbWVzc2FnZShyZXNwb25zZSk7Ci0KLSAgICBz
d2l0Y2ggKHdlYmtpdF9kb3dubG9hZF9nZXRfc3RhdHVzKGRvd25sb2FkKSkgewotICAgIGNhc2Ug
V0VCS0lUX0RPV05MT0FEX1NUQVRVU19FUlJPUjoKLSAgICAgICAgZ19hc3NlcnRfY21waW50KG1l
c3NhZ2UtPnN0YXR1c19jb2RlLCA9PSwgNDA0KTsKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChs
b29wKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXRUJLSVRfRE9XTkxPQURfU1RBVFVTX0ZJ
TklTSEVEOgotICAgIGNhc2UgV0VCS0lUX0RPV05MT0FEX1NUQVRVU19DQU5DRUxMRUQ6Ci0gICAg
ICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2so
U291cFNlcnZlciAqc2VydmVyLCBTb3VwTWVzc2FnZSAqbWVzc2FnZSwgY29uc3QgY2hhciAqcGF0
aCwgR0hhc2hUYWJsZSAqcXVlcnksIFNvdXBDbGllbnRDb250ZXh0ICpjb250ZXh0LCBncG9pbnRl
ciB1c2VyRGF0YSkKLXsKLSAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dF
VCkgewotICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRV
U19OT1RfSU1QTEVNRU5URUQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc291cF9t
ZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKLSAgICBz
b3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdF93ZWJraXRfZG93bmxvYWRfbm90X2ZvdW5kKHZvaWQpCi17Ci0gICAg
U291cFNlcnZlciAqc2VydmVyID0gc291cF9zZXJ2ZXJfbmV3KFNPVVBfU0VSVkVSX1BPUlQsIDAs
IE5VTEwpOwotICAgIHNvdXBfc2VydmVyX3J1bl9hc3luYyhzZXJ2ZXIpOwotICAgIHNvdXBfc2Vy
dmVyX2FkZF9oYW5kbGVyKHNlcnZlciwgTlVMTCwgc2VydmVyQ2FsbGJhY2ssIE5VTEwsIE5VTEwp
OwotICAgIFNvdXBVUkkgKmJhc2VVUkkgPSBzb3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcuMC4wLjEv
Iik7Ci0gICAgc291cF91cmlfc2V0X3BvcnQoYmFzZVVSSSwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQo
c2VydmVyKSk7Ci0KLSAgICBTb3VwVVJJICp1cmkgPSBzb3VwX3VyaV9uZXdfd2l0aF9iYXNlKGJh
c2VVUkksICIvZm9vIik7Ci0gICAgY2hhciAqdXJpU3RyaW5nID0gc291cF91cmlfdG9fc3RyaW5n
KHVyaSwgRkFMU0UpOwotICAgIHNvdXBfdXJpX2ZyZWUodXJpKTsKLQotICAgIGxvb3AgPSBnX21h
aW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0gICAgV2ViS2l0TmV0d29ya1JlcXVlc3QgKnJlcXVl
c3QgPSB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X25ldyh1cmlTdHJpbmcpOwotICAgIGdfZnJlZSAo
dXJpU3RyaW5nKTsKLSAgICBXZWJLaXREb3dubG9hZCAqZG93bmxvYWQgPSB3ZWJraXRfZG93bmxv
YWRfbmV3KHJlcXVlc3QpOwotICAgIGdfb2JqZWN0X3VucmVmKHJlcXVlc3QpOwotCi0gICAgd2Vi
a2l0X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbl91cmkoZG93bmxvYWQsICJmaWxlOi8vL3RtcC9m
b28iKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGRvd25sb2FkLCAibm90aWZ5OjpzdGF0dXMiLCBH
X0NBTExCQUNLKG5vdGlmeURvd25sb2FkU3RhdHVzQ2FsbGJhY2spLCBOVUxMKTsKLQotICAgIHdl
YmtpdF9kb3dubG9hZF9zdGFydChkb3dubG9hZCk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3Ap
OwotCi0gICAgZ19vYmplY3RfdW5yZWYoZG93bmxvYWQpOwotICAgIGdfbWFpbl9sb29wX3VucmVm
KGxvb3ApOwotICAgIHNvdXBfdXJpX2ZyZWUoYmFzZVVSSSk7Ci0gICAgZ19vYmplY3RfdW5yZWYo
c2VydmVyKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIGd0
a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgi
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0
L2Rvd25sb2FkL2NyZWF0ZSIsIHRlc3Rfd2Via2l0X2Rvd25sb2FkX2NyZWF0ZSk7Ci0gICAgZ190
ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2Rvd25sb2FkL3N5bmNoIiwgdGVzdF93ZWJraXRfZG93bmxv
YWRfc3luY2gpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9kb3dubG9hZC9hc3luY2gi
LCB0ZXN0X3dlYmtpdF9kb3dubG9hZF9hc3luY2gpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dl
YmtpdC9kb3dubG9hZC9kYXRhIiwgdGVzdF93ZWJraXRfZG93bmxvYWRfZGF0YSk7Ci0gICAgZ190
ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2Rvd25sb2FkL25vdC1mb3VuZCIsIHRlc3Rfd2Via2l0X2Rv
d25sb2FkX25vdF9mb3VuZCk7Ci0gICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Ci19CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZmF2aWNvbmRhdGFi
YXNlLmMgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0ZmF2aWNvbmRh
dGFiYXNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3MmRhNDk2YmJiNjI3YjQ0
NTk4MzRiNWUxNDA3NDI1MmY4ZTVmMmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGZh
dmljb25kYXRhYmFzZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjc2ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgInRlc3RfdXRpbHMuaCIKLSNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgotI2luY2x1ZGUgPGd0
ay9ndGsuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+
Ci0KLWNvbnN0IGludCBnSWNvblNpemUgPSAxNjsKLQotR01haW5Mb29wICpsb29wOwotY2hhciAq
YmFzZVVSSTsKLQotc3RhdGljIHZvaWQKLXNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIgKnNlcnZl
ciwgU291cE1lc3NhZ2UgKm1lc3NhZ2UsIGNvbnN0IGNoYXIgKnBhdGgsIEdIYXNoVGFibGUgKnF1
ZXJ5LCBTb3VwQ2xpZW50Q29udGV4dCAqY29udGV4dCwgdm9pZCAqZGF0YSkKLXsKLSAgICBpZiAo
bWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgewotICAgICAgICBzb3VwX21lc3Nh
Z2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2Fn
ZSwgU09VUF9TVEFUVVNfT0spOwotCi0gICAgY2hhciAqY29udGVudHM7Ci0gICAgZ3NpemUgbGVu
Z3RoOwotICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2Zhdmljb24uaWNvIikpIHsKLSAgICAg
ICAgR0Vycm9yICplcnJvciA9IE5VTEw7Ci0KLSAgICAgICAgZ19maWxlX2dldF9jb250ZW50cygi
YmxhbmsuaWNvIiwgJmNvbnRlbnRzLCAmbGVuZ3RoLCAmZXJyb3IpOwotICAgICAgICBnX2Fzc2Vy
dCghZXJyb3IpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbnRlbnRzID0gZ19zdHJkdXAoIjxo
dG1sPjxib2R5PnRlc3Q8L2JvZHk+PC9odG1sPiIpOwotICAgICAgICBsZW5ndGggPSBzdHJsZW4o
Y29udGVudHMpOwotICAgIH0KLQotICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdl
LT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgbGVuZ3RoKTsKLSAg
ICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKLX0K
LQotc3RhdGljIHZvaWQgZGVsZXRlRGF0YWJhc2VGaWxlSWZFeGlzdHMoY29uc3QgY2hhciAqZGF0
YWJhc2VQYXRoKQotewotICAgIGlmICghZ19maWxlX3Rlc3QoZGF0YWJhc2VQYXRoLCBHX0ZJTEVf
VEVTVF9JU19ESVIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjaGFyICpkYXRhYmFzZUZpbGVu
YW1lID0gZ19idWlsZF9maWxlbmFtZShkYXRhYmFzZVBhdGgsICJXZWJwYWdlSWNvbnMuZGIiLCBO
VUxMKTsKLSAgICBpZiAoZ191bmxpbmsoZGF0YWJhc2VGaWxlbmFtZSkgPT0gLTEpIHsKLSAgICAg
ICAgZ19mcmVlKGRhdGFiYXNlRmlsZW5hbWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgZ19mcmVlKGRhdGFiYXNlRmlsZW5hbWUpOwotICAgIGdfcm1kaXIoZGF0YWJhc2VQYXRoKTsK
LX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYktpdEZhdmljb25EYXRhYmFzZVNldFBhdGgoKQotewot
ICAgIGNoYXIgKmRhdGFiYXNlUGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdG1wX2Rpcigp
LCAid2Via2l0LXRlc3RmYXZpY29uZGF0YWJhc2UiLCBOVUxMKTsKLSAgICBkZWxldGVEYXRhYmFz
ZUZpbGVJZkV4aXN0cyhkYXRhYmFzZVBhdGgpOwotCi0gICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNl
ICpkYXRhYmFzZSA9IHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFzZSgpOwotICAgIHdlYmtpdF9m
YXZpY29uX2RhdGFiYXNlX3NldF9wYXRoKGRhdGFiYXNlLCBkYXRhYmFzZVBhdGgpOwotCi0gICAg
Z19hc3NlcnRfY21wc3RyKGRhdGFiYXNlUGF0aCwgPT0sIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNl
X2dldF9wYXRoKGRhdGFiYXNlKSk7Ci0KLSAgICBnX2ZyZWUoZGF0YWJhc2VQYXRoKTsKLX0KLQot
Ly8gU2VlIHRoZSBjb21tZW50IGluIG1haW4oKSBmdW5jdGlvbiB0aGF0IGdvZXMgd2l0aCB0aGlz
IHNhbWUgZ3VhcmQuCi0jaWZkZWYgTkRFQlVHCi0KLXN0YXRpYyB2b2lkIGZhdmljb25EYXRhYmFz
ZUdldFZhbGlkRmF2aWNvbkNhbGxiYWNrKEdPYmplY3QgKnNvdXJjZU9iamVjdCwgR0FzeW5jUmVz
dWx0ICpyZXN1bHQsIHZvaWQgKnVzZXJEYXRhKQotewotICAgIGdib29sZWFuICpiZWVuSGVyZSA9
IChnYm9vbGVhbiopdXNlckRhdGE7Ci0gICAgR0Vycm9yICplcnJvciA9IE5VTEw7Ci0gICAgR2Rr
UGl4YnVmICppY29uID0gd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fcGl4YnVm
X2ZpbmlzaChXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRShzb3VyY2VPYmplY3QpLCByZXN1bHQsICZl
cnJvcik7Ci0gICAgZ19hc3NlcnQoaWNvbik7Ci0gICAgZ19vYmplY3RfdW5yZWYoaWNvbik7Ci0K
LSAgICAqYmVlbkhlcmUgPSBUUlVFOwotCi0gICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLX0K
LQotc3RhdGljIHZvaWQgZmF2aWNvbkRhdGFiYXNlR2V0SW52YWxpZEZhdmljb25DYWxsYmFjayhH
T2JqZWN0ICpzb3VyY2VPYmplY3QsIEdBc3luY1Jlc3VsdCAqcmVzdWx0LCB2b2lkICp1c2VyRGF0
YSkKLXsKLSAgICBnYm9vbGVhbiAqYmVlbkhlcmUgPSAoZ2Jvb2xlYW4qKXVzZXJEYXRhOwotICAg
IEdFcnJvciAqZXJyb3IgPSBOVUxMOwotICAgIEdka1BpeGJ1ZiAqaWNvbiA9IHdlYmtpdF9mYXZp
Y29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3BpeGJ1Zl9maW5pc2goV0VCS0lUX0ZBVklDT05fREFU
QUJBU0Uoc291cmNlT2JqZWN0KSwgcmVzdWx0LCAmZXJyb3IpOwotICAgIGdfYXNzZXJ0KCFpY29u
KTsKLQotICAgICpiZWVuSGVyZSA9IFRSVUU7Ci0KLSAgICBnX21haW5fbG9vcF9xdWl0KGxvb3Ap
OwotfQotCi1zdGF0aWMgdm9pZCBmYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uQ2FuY2VsbGVkQ2Fs
bGJhY2soR09iamVjdCAqc291cmNlT2JqZWN0LCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgdm9pZCAq
dXNlckRhdGEpCi17Ci0gICAgZ2Jvb2xlYW4gKmJlZW5IZXJlID0gKGdib29sZWFuKil1c2VyRGF0
YTsKLSAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKLSAgICBHZGtQaXhidWYgKmljb24gPSB3ZWJr
aXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWZfZmluaXNoKFdFQktJVF9GQVZJ
Q09OX0RBVEFCQVNFKHNvdXJjZU9iamVjdCksIHJlc3VsdCwgJmVycm9yKTsKLSAgICBnX2Fzc2Vy
dCghaWNvbik7Ci0gICAgZ19hc3NlcnQoZXJyb3IgJiYgZ19lcnJvcl9tYXRjaGVzKGVycm9yLCBH
X0lPX0VSUk9SLCBHX0lPX0VSUk9SX0NBTkNFTExFRCkpOwotCi0gICAgKmJlZW5IZXJlID0gVFJV
RTsKLQotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9p
ZCBxdWl0TWFpbkxvb3BJZkxvYWRDb21wbGV0ZWQoZ2Jvb2xlYW4gKmljb25PclBhZ2VMb2FkZWQp
Ci17Ci0gICAgaWYgKCppY29uT3JQYWdlTG9hZGVkKQotICAgICAgICBnX21haW5fbG9vcF9xdWl0
KGxvb3ApOwotICAgIGVsc2UKLSAgICAgICAgKmljb25PclBhZ2VMb2FkZWQgPSBUUlVFOwotfQot
Ci1zdGF0aWMgdm9pZCBpZGxlUXVpdExvb3BDYWxsYmFjayhXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3
LCBHUGFyYW1TcGVjICpwYXJhbVNwZWMsIGdib29sZWFuICppY29uT3JQYWdlTG9hZGVkKQotewot
ICAgIFdlYktpdExvYWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0
YXR1cyh3ZWJWaWV3KTsKLQotICAgIGlmIChzdGF0dXMgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQg
fHwgc3RhdHVzID09IFdFQktJVF9MT0FEX0ZBSUxFRCkKLSAgICAgICAgcXVpdE1haW5Mb29wSWZM
b2FkQ29tcGxldGVkKGljb25PclBhZ2VMb2FkZWQpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRX
ZWJWaWV3SWNvbkxvYWRlZChXZWJLaXRGYXZpY29uRGF0YWJhc2UgKmRhdGFiYXNlLCBjb25zdCBj
aGFyICpmcmFtZVVSSSwgZ2Jvb2xlYW4gKmljb25PclBhZ2VMb2FkZWQpCi17Ci0gICAgcXVpdE1h
aW5Mb29wSWZMb2FkQ29tcGxldGVkKGljb25PclBhZ2VMb2FkZWQpOwotfQotCi1zdGF0aWMgdm9p
ZCBsb2FkVVJJKGNvbnN0IGNoYXIgKnVyaSkKLXsKLSAgICBXZWJLaXRXZWJWaWV3ICp2aWV3ID0g
V0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ2Jvb2xlYW4gaWNv
bk9yUGFnZUxvYWRlZCA9IEZBTFNFOwotCi0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHZp
ZXcsIHVyaSk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KHZpZXcsICJub3RpZnk6OmxvYWQtc3Rh
dHVzIiwgR19DQUxMQkFDSyhpZGxlUXVpdExvb3BDYWxsYmFjayksICZpY29uT3JQYWdlTG9hZGVk
KTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHZpZXcsICJpY29uLWxvYWRlZCIsIEdfQ0FMTEJBQ0so
d2Via2l0V2ViVmlld0ljb25Mb2FkZWQpLCAmaWNvbk9yUGFnZUxvYWRlZCk7Ci0KLSAgICBnX21h
aW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21h
dGNoZWQodmlldywgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgJmljb25PclBhZ2VM
b2FkZWQpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gZmF2aWNvbkRhdGFiYXNlR2V0VmFsaWRGYXZp
Y29uSWRsZSh2b2lkICp1c2VyRGF0YSkKLXsKLSAgICB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9n
ZXRfZmF2aWNvbl9waXhidWYod2Via2l0X2dldF9mYXZpY29uX2RhdGFiYXNlKCksIGJhc2VVUkks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdJY29uU2l6
ZSwgZ0ljb25TaXplLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmYXZpY29uRGF0YWJhc2VHZXRWYWxpZEZhdmljb25DYWxsYmFjaywgdXNlckRh
dGEpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuIGZhdmljb25EYXRh
YmFzZUdldEludmFsaWRGYXZpY29uSWRsZSh2b2lkICp1c2VyRGF0YSkKLXsKLSAgICB3ZWJraXRf
ZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl9waXhidWYod2Via2l0X2dldF9mYXZpY29uX2Rh
dGFiYXNlKCksICJodHRwOi8vd3d3LndlYmtpdGd0ay5vcmcvIiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ0ljb25TaXplLCBnSWNvblNpemUsIE5VTEws
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhdmljb25E
YXRhYmFzZUdldEludmFsaWRGYXZpY29uQ2FsbGJhY2ssIHVzZXJEYXRhKTsKLSAgICByZXR1cm4g
RkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBmYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uQ2Fu
Y2VsbGVkSWRsZSh2b2lkICp1c2VyRGF0YSkKLXsKLSAgICBHQ2FuY2VsbGFibGUgKmNhbmNlbGxh
YmxlID0gZ19jYW5jZWxsYWJsZV9uZXcoKTsKLSAgICB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9n
ZXRfZmF2aWNvbl9waXhidWYod2Via2l0X2dldF9mYXZpY29uX2RhdGFiYXNlKCksIGJhc2VVUkks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdJY29uU2l6
ZSwgZ0ljb25TaXplLCBjYW5jZWxsYWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvbkNhbmNlbGxlZENhbGxi
YWNrLCB1c2VyRGF0YSk7Ci0gICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwoY2FuY2VsbGFibGUpOwot
ICAgIGdfb2JqZWN0X3VucmVmKGNhbmNlbGxhYmxlKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0K
LXN0YXRpYyB2b2lkIHRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uKCkKLXsKLSAg
ICBnYm9vbGVhbiBiZWVuVG9JY29uQ2FsbGJhY2s7Ci0KLSAgICBsb29wID0gZ19tYWluX2xvb3Bf
bmV3KE5VTEwsIFRSVUUpOwotCi0gICAgLyogTG9hZCB1cmkgdG8gbWFrZSBzdXJlIGZhdmljb24g
aXMgYWRkZWQgdG8gZGF0YWJhc2UuICovCi0gICAgbG9hZFVSSShiYXNlVVJJKTsKLQotICAgIGJl
ZW5Ub0ljb25DYWxsYmFjayA9IEZBTFNFOwotICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWZh
dmljb25EYXRhYmFzZUdldFZhbGlkRmF2aWNvbklkbGUsICZiZWVuVG9JY29uQ2FsbGJhY2spOwot
ICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLSAgICBnX2Fzc2VydChiZWVuVG9JY29uQ2FsbGJh
Y2spOwotCi0gICAgYmVlblRvSWNvbkNhbGxiYWNrID0gRkFMU0U7Ci0gICAgZ19pZGxlX2FkZCgo
R1NvdXJjZUZ1bmMpZmF2aWNvbkRhdGFiYXNlR2V0SW52YWxpZEZhdmljb25JZGxlLCAmYmVlblRv
SWNvbkNhbGxiYWNrKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0gICAgZ19hc3NlcnQo
YmVlblRvSWNvbkNhbGxiYWNrKTsKLQotICAgIGJlZW5Ub0ljb25DYWxsYmFjayA9IEZBTFNFOwot
ICAgIGdfaWRsZV9hZGQoKEdTb3VyY2VGdW5jKWZhdmljb25EYXRhYmFzZUdldEZhdmljb25DYW5j
ZWxsZWRJZGxlLCAmYmVlblRvSWNvbkNhbGxiYWNrKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9v
cCk7Ci0gICAgZ19hc3NlcnQoYmVlblRvSWNvbkNhbGxiYWNrKTsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdFdlYktpdEZhdmljb25EYXRhYmFzZUdldEZhdmljb25VUkkoKQotewotICAgIGNoYXIgKmlj
b25VUkkgPSB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl91cmkod2Via2l0X2dl
dF9mYXZpY29uX2RhdGFiYXNlKCksIGJhc2VVUkkpOwotICAgIGNoYXIgKmV4cGVjdGVkVVJJID0g
Z19zdHJkdXBfcHJpbnRmKCIlc2Zhdmljb24uaWNvIiwgYmFzZVVSSSk7Ci0gICAgZ19hc3NlcnRf
Y21wc3RyKGljb25VUkksID09LCBleHBlY3RlZFVSSSk7Ci0gICAgZ19mcmVlKGV4cGVjdGVkVVJJ
KTsKLSAgICBnX2ZyZWUoaWNvblVSSSk7Ci19Ci0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCB0ZXN0
V2ViS2l0RmF2aWNvbkRhdGFiYXNlUmVtb3ZlQWxsKHZvaWQpCi17Ci0gICAgV2ViS2l0RmF2aWNv
bkRhdGFiYXNlICpkYXRhYmFzZSA9IHdlYmtpdF9nZXRfZmF2aWNvbl9kYXRhYmFzZSgpOwotICAg
IHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2NsZWFyKGRhdGFiYXNlKTsKLSAgICBjaGFyICppY29u
VVJJID0gd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpKGRhdGFiYXNlLCBi
YXNlVVJJKTsKLSAgICBnX2Fzc2VydCghaWNvblVSSSk7Ci0gICAgZ19mcmVlKGljb25VUkkpOwot
fQotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlQ2xvc2VEYXRhYmFzZSh2
b2lkKQotewotICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSAqZGF0YWJhc2UgPSB3ZWJraXRfZ2V0
X2Zhdmljb25fZGF0YWJhc2UoKTsKLSAgICBjaGFyICpkYXRhYmFzZVBhdGggPSBnX3N0cmR1cCh3
ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfcGF0aChkYXRhYmFzZSkpOwotICAgIHdlYmtpdF9m
YXZpY29uX2RhdGFiYXNlX3NldF9wYXRoKGRhdGFiYXNlLCAwKTsKLSAgICBkZWxldGVEYXRhYmFz
ZUZpbGVJZkV4aXN0cyhkYXRhYmFzZVBhdGgpOwotICAgIGdfZnJlZShkYXRhYmFzZVBhdGgpOwot
fQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgZ3RrX3Rlc3RfaW5p
dCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgLyogVGhpcyBob3BlZnVsbHkgbWFrZXMgdGhl
IHRlc3QgaW5kZXBlbmRlbnQgb2YgdGhlIHBhdGggaXQncyBjYWxsZWQgZnJvbS4gKi8KLSAgICB0
ZXN0dXRpbHNfcmVsYXRpdmVfY2hkaXIoIlRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrL3Jlc291cmNlcy90ZXN0Lmh0bWwiLCBhcmd2WzBdKTsKLQotICAgIFNvdXBTZXJ2ZXIgKnNl
cnZlciA9IHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9QT1JULCAwLCBOVUxMKTsKLSAgICBz
b3VwX3NlcnZlcl9ydW5fYXN5bmMoc2VydmVyKTsKLQotICAgIHNvdXBfc2VydmVyX2FkZF9oYW5k
bGVyKHNlcnZlciwgTlVMTCwgc2VydmVyQ2FsbGJhY2ssIE5VTEwsIE5VTEwpOwotCi0gICAgU291
cFVSSSAqc291cFVSSSA9IHNvdXBfdXJpX25ldygiaHR0cDovLzEyNy4wLjAuMS8iKTsKLSAgICBz
b3VwX3VyaV9zZXRfcG9ydChzb3VwVVJJLCBzb3VwX3NlcnZlcl9nZXRfcG9ydChzZXJ2ZXIpKTsK
LQotICAgIGJhc2VVUkkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cFVSSSwgRkFMU0UpOwotICAg
IHNvdXBfdXJpX2ZyZWUoc291cFVSSSk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8v
YnVncy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9mYXZpY29u
ZGF0YWJhc2Uvc2V0LXBhdGgiLCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlU2V0UGF0aCk7Ci0K
LSAgICAvLyBUaGVzZSB0d28gdGVzdHMgd2lsbCB0cmlnZ2VyIGFuIEFTU0VSVElPTiBvbiBkZWJ1
ZyBidWlsZHMgZHVlCi0gICAgLy8gdG8gaHR0cDovL3dlYmtpdC5vcmcvYi82NzU4Mi4gUmVtb3Zl
IHRoZSBndWFyZHMgb25jZSB0aGUgYnVnIGlzIGZpeGVkLgotI2lmZGVmIE5ERUJVRwotICAgIGdf
dGVzdF9hZGRfZnVuYygiL3dlYmtpdC9mYXZpY29uZGF0YWJhc2UvZ2V0LWZhdmljb24iLCB0ZXN0
V2ViS2l0RmF2aWNvbkRhdGFiYXNlR2V0RmF2aWNvbik7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIv
d2Via2l0L2Zhdmljb25kYXRhYmFzZS9nZXQtZmF2aWNvbi11cmkiLCB0ZXN0V2ViS2l0RmF2aWNv
bkRhdGFiYXNlR2V0RmF2aWNvblVSSSk7Ci0jZW5kaWYKLQotICAgIGdfdGVzdF9hZGRfZnVuYygi
L3dlYmtpdC9mYXZpY29uZGF0YWJhc2UvcmVtb3ZlLWFsbCIsIHRlc3RXZWJLaXRGYXZpY29uRGF0
YWJhc2VSZW1vdmVBbGwpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9mYXZpY29uZGF0
YWJhc2UvY2xvc2UtZGIiLCB0ZXN0V2ViS2l0RmF2aWNvbkRhdGFiYXNlQ2xvc2VEYXRhYmFzZSk7
Ci0KLSAgICByZXR1cm4gZ190ZXN0X3J1bigpOwotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGdsb2JhbHMuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RnbG9iYWxzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDRiOWVjNGZjZjVkOGE2NjBjNGQ4NDlkZTA1OGU5MWE5NWE1ZmUzNzcuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRHdGsvdGVzdGdsb2JhbHMuYworKysgL2Rldi9udWxsCkBAIC0xLDExMCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIENvbGxhYm9yYSBMdGQuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8bGlic291cC9zb3Vw
Lmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi0vLyBNYWtlIHN1cmUgdGhlIHNlc3Np
b24gaXMgaW5pdGlhbGl6ZWQgcHJvcGVybHkgd2hlbiB3ZWJraXRfZ2V0X2RlZmF1bHRfc2Vzc2lv
bigpIGlzIGNhbGxlZC4KLXN0YXRpYyB2b2lkIHRlc3RfZ2xvYmFsc19kZWZhdWx0X3Nlc3Npb24o
KQotewotICAgIGdfdGVzdF9idWcoIjM2NzU0Iik7Ci0KLSAgICBTb3VwU2Vzc2lvbiogc2Vzc2lv
biA9IHdlYmtpdF9nZXRfZGVmYXVsdF9zZXNzaW9uKCk7Ci0gICAgc291cF9zZXNzaW9uX3JlbW92
ZV9mZWF0dXJlX2J5X3R5cGUoc2Vzc2lvbiwgV0VCS0lUX1RZUEVfU09VUF9BVVRIX0RJQUxPRyk7
Ci0KLSAgICAvLyBUaGlzIG1ha2VzIHN1cmUgb3VyIGluaXRpYWxpemF0aW9uIHJhbi4KLSAgICBn
X2Fzc2VydChzb3VwX3Nlc3Npb25fZ2V0X2ZlYXR1cmUoc2Vzc2lvbiwgU09VUF9UWVBFX0NPTlRF
TlRfREVDT0RFUikgIT0gTlVMTCk7Ci0KLSAgICAvLyBDcmVhdGluZyBhIFdlYlZpZXcgc2hvdWxk
IG1ha2Ugc3VyZSB0aGUgc2Vzc2lvbiBpcwotICAgIC8vIGluaXRpYWxpemVkLCBhbmQgbm90IG1l
c3Mgd2l0aCBvdXIgY2hhbmdlcy4KLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyA9IFdFQktJ
VF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5r
KHdlYl92aWV3KTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJfdmlldyk7Ci0KLSAgICAvLyBUaGVz
ZSBtYWtlcyBzdXJlIG91ciBtb2RpZmljYXRpb24gd2FzIGtlcHQuCi0gICAgZ19hc3NlcnQoc291
cF9zZXNzaW9uX2dldF9mZWF0dXJlKHNlc3Npb24sIFNPVVBfVFlQRV9DT05URU5UX0RFQ09ERVIp
ICE9IE5VTEwpOwotICAgIGdfYXNzZXJ0KHNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZShzZXNzaW9u
LCBXRUJLSVRfVFlQRV9TT1VQX0FVVEhfRElBTE9HKSA9PSBOVUxMKTsKLX0KLQotc3RhdGljIHZv
aWQgdGVzdF9nbG9iYWxzX3NlY3VyaXR5X3BvbGljeSgpCi17Ci0gICAgLy8gQ2hlY2sgZGVmYXVs
dCBwb2xpY3kgZm9yIHdlbGwga25vd24gc2NoZW1lcy4KLSAgICBXZWJLaXRTZWN1cml0eVBvbGlj
eSBwb2xpY3kgPSB3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiaHR0
cCIpOwotICAgIGd1aW50IG1hc2sgPSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX0NPUlNfRU5BQkxF
RDsKLSAgICBnX2Fzc2VydF9jbXB1aW50KHBvbGljeSAmIG1hc2ssID09LCBtYXNrKTsKLQotICAg
IHBvbGljeSA9IHdlYmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJodHRw
cyIpOwotICAgIG1hc2sgPSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX1NFQ1VSRSB8IFdFQktJVF9T
RUNVUklUWV9QT0xJQ1lfQ09SU19FTkFCTEVEOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQocG9saWN5
ICYgbWFzaywgPT0sIG1hc2spOwotCi0gICAgcG9saWN5ID0gd2Via2l0X2dldF9zZWN1cml0eV9w
b2xpY3lfZm9yX3VyaV9zY2hlbWUoImZpbGUiKTsKLSAgICBtYXNrID0gV0VCS0lUX1NFQ1VSSVRZ
X1BPTElDWV9MT0NBTDsKLSAgICBnX2Fzc2VydF9jbXB1aW50KHBvbGljeSAmIG1hc2ssID09LCBt
YXNrKTsKLQotICAgIHBvbGljeSA9IHdlYmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlf
c2NoZW1lKCJkYXRhIik7Ci0gICAgbWFzayA9IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfTk9fQUND
RVNTX1RPX09USEVSX1NDSEVNRSB8IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfU0VDVVJFOwotICAg
IGdfYXNzZXJ0X2NtcHVpbnQocG9saWN5ICYgbWFzaywgPT0sIG1hc2spOwotCi0gICAgcG9saWN5
ID0gd2Via2l0X2dldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImFib3V0Iik7Ci0g
ICAgbWFzayA9IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfTk9fQUNDRVNTX1RPX09USEVSX1NDSEVN
RSB8IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfU0VDVVJFIHwgV0VCS0lUX1NFQ1VSSVRZX1BPTElD
WV9FTVBUWV9ET0NVTUVOVDsKLSAgICBnX2Fzc2VydF9jbXB1aW50KHBvbGljeSAmIG1hc2ssID09
LCBtYXNrKTsKLQotICAgIC8vIEN1c3RvbSBzY2hlbWUuCi0gICAgcG9saWN5ID0gd2Via2l0X2dl
dF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImZvbyIpOwotICAgIGdfYXNzZXJ0KCFw
b2xpY3kpOwotCi0gICAgcG9saWN5IHw9IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfTE9DQUw7Ci0g
ICAgd2Via2l0X3NldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImZvbyIsIHBvbGlj
eSk7Ci0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3Jf
dXJpX3NjaGVtZSgiZm9vIiksID09LCBwb2xpY3kpOwotCi0gICAgcG9saWN5IHw9IFdFQktJVF9T
RUNVUklUWV9QT0xJQ1lfTk9fQUNDRVNTX1RPX09USEVSX1NDSEVNRTsKLSAgICB3ZWJraXRfc2V0
X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9vIiwgcG9saWN5KTsKLSAgICBnX2Fz
c2VydF9jbXB1aW50KHdlYmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1lKCJm
b28iKSwgPT0sIHBvbGljeSk7Ci0KLSAgICBwb2xpY3kgfD0gV0VCS0lUX1NFQ1VSSVRZX1BPTElD
WV9ESVNQTEFZX0lTT0xBVEVEOwotICAgIHdlYmtpdF9zZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91
cmlfc2NoZW1lKCJmb28iLCBwb2xpY3kpOwotICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2dl
dF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImZvbyIpLCA9PSwgcG9saWN5KTsKLQot
ICAgIHBvbGljeSB8PSBXRUJLSVRfU0VDVVJJVFlfUE9MSUNZX1NFQ1VSRTsKLSAgICB3ZWJraXRf
c2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9vIiwgcG9saWN5KTsKLSAgICBn
X2Fzc2VydF9jbXB1aW50KHdlYmtpdF9nZXRfc2VjdXJpdHlfcG9saWN5X2Zvcl91cmlfc2NoZW1l
KCJmb28iKSwgPT0sIHBvbGljeSk7Ci0KLSAgICBwb2xpY3kgfD0gV0VCS0lUX1NFQ1VSSVRZX1BP
TElDWV9DT1JTX0VOQUJMRUQ7Ci0gICAgd2Via2l0X3NldF9zZWN1cml0eV9wb2xpY3lfZm9yX3Vy
aV9zY2hlbWUoImZvbyIsIHBvbGljeSk7Ci0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfZ2V0
X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJpX3NjaGVtZSgiZm9vIiksID09LCBwb2xpY3kpOwotCi0g
ICAgcG9saWN5IHw9IFdFQktJVF9TRUNVUklUWV9QT0xJQ1lfRU1QVFlfRE9DVU1FTlQ7Ci0gICAg
d2Via2l0X3NldF9zZWN1cml0eV9wb2xpY3lfZm9yX3VyaV9zY2hlbWUoImZvbyIsIHBvbGljeSk7
Ci0gICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfZ2V0X3NlY3VyaXR5X3BvbGljeV9mb3JfdXJp
X3NjaGVtZSgiZm9vIiksID09LCBwb2xpY3kpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hh
cioqIGFyZ3YpCi17Ci0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0g
ICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLSAgICBnX3Rl
c3RfYWRkX2Z1bmMoIi93ZWJraXQvZ2xvYmFscy9kZWZhdWx0X3Nlc3Npb24iLAotICAgICAgICAg
ICAgICAgICAgICB0ZXN0X2dsb2JhbHNfZGVmYXVsdF9zZXNzaW9uKTsKLSAgICBnX3Rlc3RfYWRk
X2Z1bmMoIi93ZWJraXQvZ2xvYmFscy9zZWN1cml0eS1wb2xpY3kiLAotICAgICAgICAgICAgICAg
ICAgICB0ZXN0X2dsb2JhbHNfc2VjdXJpdHlfcG9saWN5KTsKLSAgICByZXR1cm4gZ190ZXN0X3J1
bigpOwotfQotCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0
ay90ZXN0aGl0dGVzdHJlc3VsdC5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRH
dGsvdGVzdGhpdHRlc3RyZXN1bHQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Jm
MDExMDQ4M2ExMDA3Y2I2Zjk1MmRkYmMzZWJjMDA1N2E0OWFlZi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdEd0ay90ZXN0aGl0dGVzdHJlc3VsdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUg
PGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi10eXBlZGVmIHN0
cnVjdCB7Ci0gIGNoYXIqIGRhdGE7Ci0gIGd1aW50IGZsYWc7Ci19IFRlc3RJbmZvOwotCi1zdGF0
aWMgR01haW5Mb29wKiBsb29wOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgV2ViS2l0V2ViVmll
dyogd2ViVmlldzsKLSAgICBUZXN0SW5mbyogaW5mbzsKLX0gSGl0VGVzdFJlc3VsdEZpeHR1cmU7
Ci0KLVRlc3RJbmZvKgotdGVzdF9pbmZvX25ldyhjb25zdCBjaGFyKiBkYXRhLCBndWludCBmbGFn
KQotewotICAgIFRlc3RJbmZvKiBpbmZvOwotCi0gICAgaW5mbyA9IGdfc2xpY2VfbmV3KFRlc3RJ
bmZvKTsKLSAgICBpbmZvLT5kYXRhID0gZ19zdHJkdXAoZGF0YSk7Ci0gICAgaW5mby0+ZmxhZyA9
IGZsYWc7Ci0KLSAgICByZXR1cm4gaW5mbzsKLX0KLQotdm9pZAotdGVzdF9pbmZvX2Rlc3Ryb3ko
VGVzdEluZm8qIGluZm8pCi17Ci0gICAgZ19mcmVlKGluZm8tPmRhdGEpOwotICAgIGdfc2xpY2Vf
ZnJlZShUZXN0SW5mbywgaW5mbyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGhpdF90ZXN0X3Jlc3VsdF9m
aXh0dXJlX3NldHVwKEhpdFRlc3RSZXN1bHRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVy
IGRhdGEpCi17Ci0gICAgZml4dHVyZS0+d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRf
d2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKGZpeHR1cmUtPndlYlZpZXcp
OwotICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0gICAgZml4dHVyZS0+
aW5mbyA9IChUZXN0SW5mbyopZGF0YTsKLX0KLQotc3RhdGljIHZvaWQgaGl0X3Rlc3RfcmVzdWx0
X2ZpeHR1cmVfdGVhcmRvd24oSGl0VGVzdFJlc3VsdEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBv
aW50ZXIgZGF0YSkKLXsKLSAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT53ZWJWaWV3KTsKLSAg
ICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKLSAgICB0ZXN0X2luZm9fZGVzdHJveShmaXh0dXJl
LT5pbmZvKTsKLX0KLQotc3RhdGljIHZvaWQKLWxvYWRfc3RhdHVzX2NiKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcsCi0gICAgICAgICAgICAgICBHUGFyYW1TcGVjKiBzcGVjLAotICAgICAgICAgICAg
ICAgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtp
dF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7Ci0gICAgVGVzdEluZm8qIGluZm8g
PSAoVGVzdEluZm8qKWRhdGE7Ci0KLSAgICBpZiAoc3RhdHVzID09IFdFQktJVF9MT0FEX0ZJTklT
SEVEKSB7Ci0gICAgICAgIFdlYktpdEhpdFRlc3RSZXN1bHQqIHJlc3VsdDsKLSAgICAgICAgZ3Vp
bnQgY29udGV4dDsKLSAgICAgICAgR2RrRXZlbnQqIGV2ZW50ID0gZ2RrX2V2ZW50X25ldyhHREtf
QlVUVE9OX1BSRVNTKTsKLSAgICAgICAgV2ViS2l0RE9NTm9kZSogbm9kZTsKLSAgICAgICAgZ2lu
dCB4LCB5OwotCi0gICAgICAgIC8qIENsb3NlIGVub3VnaCB0byAwLDAgKi8KLSAgICAgICAgZXZl
bnQtPmJ1dHRvbi54ID0gNTsKLSAgICAgICAgZXZlbnQtPmJ1dHRvbi55ID0gNTsKLQotICAgICAg
ICByZXN1bHQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2hpdF90ZXN0X3Jlc3VsdCh3ZWJWaWV3LCAo
R2RrRXZlbnRCdXR0b24qKSBldmVudCk7Ci0gICAgICAgIGdka19ldmVudF9mcmVlKGV2ZW50KTsK
LSAgICAgICAgZ19hc3NlcnQocmVzdWx0KTsKLQotICAgICAgICBnX29iamVjdF9nZXQocmVzdWx0
LCAiY29udGV4dCIsICZjb250ZXh0LCBOVUxMKTsKLSAgICAgICAgZ19hc3NlcnQoY29udGV4dCAm
IGluZm8tPmZsYWcpOwotCi0gICAgICAgIGdfb2JqZWN0X2dldChyZXN1bHQsICJpbm5lci1ub2Rl
IiwgJm5vZGUsIE5VTEwpOwotICAgICAgICBnX2Fzc2VydChub2RlKTsKLSAgICAgICAgZ19hc3Nl
cnQoV0VCS0lUX0RPTV9JU19OT0RFKG5vZGUpKTsKLQotICAgICAgICBnX29iamVjdF9nZXQocmVz
dWx0LCAieCIsICZ4LCAieSIsICZ5LCBOVUxMKTsKLSAgICAgICAgZ19hc3NlcnRfY21waW50KHgs
ID09LCA1KTsKLSAgICAgICAgZ19hc3NlcnRfY21waW50KHksID09LCA1KTsKLQotICAgICAgICAv
KiBXZSBjYW4gb25seSB0ZXN0IHRoZXNlIG5vZGUgdHlwZXMgYXQgdGhlIG1vbWVudC4gSW4gdGhl
Ci0gICAgICAgICAqIGlucHV0IGNhc2UgdGhlcmUgc2VlbXMgdG8gYmUgYW4gZXh0cmEgbGF5ZXIg
d2l0aCBhIERJViBvbgotICAgICAgICAgKiB0b3Agb2YgdGhlIGlucHV0LCB3aGljaCBnZXRzIGFz
c2lnbmVkIHRvIHRoZSBpbm5lci1ub2RlLgotICAgICAgICAgKiB0YWcgKi8KLSAgICAgICAgaWYg
KGluZm8tPmZsYWcgPT0gV0VCS0lUX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0RPQ1VNRU5UKQot
ICAgICAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1MX0hUTUxfRUxFTUVOVChub2Rl
KSk7Ci0gICAgICAgIGVsc2UgaWYgKGluZm8tPmZsYWcgPT0gV0VCS0lUX0hJVF9URVNUX1JFU1VM
VF9DT05URVhUX0lNQUdFKQotICAgICAgICAgICAgZ19hc3NlcnQoV0VCS0lUX0RPTV9JU19IVE1M
X0lNQUdFX0VMRU1FTlQobm9kZSkpOwotICAgICAgICBlbHNlIGlmIChpbmZvLT5mbGFnID09IFdF
QktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9MSU5LKSB7Ci0gICAgICAgICAgICAvKiBUaGUg
aGl0IHRlc3Qgd2lsbCBnaXZlIHVzIHRoZSBpbm5lciB0ZXh0IG5vZGUsIHdlIHdhbnQKLSAgICAg
ICAgICAgICAqIHRoZSBBIHRhZyAqLwotICAgICAgICAgICAgV2ViS2l0RE9NTm9kZSogcGFyZW50
ID0gd2Via2l0X2RvbV9ub2RlX2dldF9wYXJlbnRfbm9kZShub2RlKTsKLSAgICAgICAgICAgIGdf
YXNzZXJ0KFdFQktJVF9ET01fSVNfSFRNTF9BTkNIT1JfRUxFTUVOVChwYXJlbnQpKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGdfb2JqZWN0X3VucmVmKHJlc3VsdCk7Ci0gICAgICAgIGdfbWFpbl9s
b29wX3F1aXQobG9vcCk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZAotdGVzdF93ZWJraXRfaGl0
X3Rlc3RfcmVzdWx0KEhpdFRlc3RSZXN1bHRGaXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVy
IGRhdGEpCi17Ci0gICAgVGVzdEluZm8qIGluZm8gPSAoVGVzdEluZm8qKWRhdGE7Ci0gICAgR3Rr
QWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA1MCwgNTAgfTsKLQotICAgIHdlYmtpdF93
ZWJfdmlld19sb2FkX3N0cmluZyhmaXh0dXJlLT53ZWJWaWV3LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbmZvLT5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAidGV4dC9odG1sIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInV0Zi04IiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGU6Ly8iKTsKLSAgICBndGtfd2lk
Z2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwgJmFsbG9jYXRp
b24pOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgIm5vdGlmeTo6bG9h
ZC1zdGF0dXMiLCBHX0NBTExCQUNLKGxvYWRfc3RhdHVzX2NiKSwgaW5mbyk7Ci0gICAgZ19tYWlu
X2xvb3BfcnVuKGxvb3ApOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17
Ci0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgZ190ZXN0X2J1
Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLQotICAgIGdfdGVzdF9hZGQoIi93
ZWJraXQvaGl0dGVzdHJlc3VsdC9kb2N1bWVudCIsIEhpdFRlc3RSZXN1bHRGaXh0dXJlLCAKLSAg
ICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcoIjxodG1sPjxib2R5PjxoMT5XZWJLaXRHVEsrITwv
aDE+PC9ib2R5PjwvaHRtbD4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRf
SElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfRE9DVU1FTlQpLAotICAgICAgICAgICAgICAgaGl0X3Rl
c3RfcmVzdWx0X2ZpeHR1cmVfc2V0dXAsIHRlc3Rfd2Via2l0X2hpdF90ZXN0X3Jlc3VsdCwgaGl0
X3Rlc3RfcmVzdWx0X2ZpeHR1cmVfdGVhcmRvd24pOwotICAgIC8qIFdlIGhhcmRjb2RlIGFsbCBl
bGVtZW50cyB0byBiZSBhdCAwLDAgc28gdGhhdCB3ZSBrbm93IHdoZXJlIHRvCi0gICAgICogZ2Vu
ZXJhdGUgdGhlIGJ1dHRvbiBldmVudHMgKi8KLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2hpdHRl
c3RyZXN1bHQvaW1hZ2UiLCBIaXRUZXN0UmVzdWx0Rml4dHVyZSwKLSAgICAgICAgICAgICAgIHRl
c3RfaW5mb19uZXcoIjxodG1sPjxib2R5PjxpbWcgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlOyBs
ZWZ0OjA7IHRvcDowJ3NyYz0nMHhkZWFkYmVlZicgd2lkdGg9NTAgaGVpZ2h0PTUwPjwvaW1nPjwv
Ym9keT48L2h0bWw+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX0hJVF9U
RVNUX1JFU1VMVF9DT05URVhUX0lNQUdFKSwKLSAgICAgICAgICAgICAgIGhpdF90ZXN0X3Jlc3Vs
dF9maXh0dXJlX3NldHVwLCB0ZXN0X3dlYmtpdF9oaXRfdGVzdF9yZXN1bHQsIGhpdF90ZXN0X3Jl
c3VsdF9maXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2hpdHRlc3Ry
ZXN1bHQvZWRpdGFibGUiLCBIaXRUZXN0UmVzdWx0Rml4dHVyZSwKLSAgICAgICAgICAgICAgIHRl
c3RfaW5mb19uZXcoIjxodG1sPjxib2R5PjxpbnB1dCBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7
IGxlZnQ6MDsgdG9wOjAnIHNpemU9JzM1Jz48L2lucHV0Pj48L2JvZHk+PC9odG1sPiIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9F
RElUQUJMRSksCi0gICAgICAgICAgICAgICBoaXRfdGVzdF9yZXN1bHRfZml4dHVyZV9zZXR1cCwg
dGVzdF93ZWJraXRfaGl0X3Rlc3RfcmVzdWx0LCBoaXRfdGVzdF9yZXN1bHRfZml4dHVyZV90ZWFy
ZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9oaXR0ZXN0cmVzdWx0L2xpbmsiLCBIaXRU
ZXN0UmVzdWx0Rml4dHVyZSwKLSAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXcoIjxodG1sPjxi
b2R5PjxhIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDowOyB0b3A6MCcgaHJlZj0naHR0
cDovL3d3dy5leGFtcGxlLmNvbSc+SEVMTE8gV09STEQ8L2E+PC9ib2R5PjwvaHRtbD4iLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRf
TElOSyksCi0gICAgICAgICAgICAgICBoaXRfdGVzdF9yZXN1bHRfZml4dHVyZV9zZXR1cCwgdGVz
dF93ZWJraXRfaGl0X3Rlc3RfcmVzdWx0LCBoaXRfdGVzdF9yZXN1bHRfZml4dHVyZV90ZWFyZG93
bik7Ci0gICAgICAgICAgICAgICAKLSAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKLX0KLQpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdGh0dHBiYWNr
ZW5kLmMgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0aHR0cGJhY2tl
bmQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM3NzY4NzliMDUzYTY2ZjVmNTVk
MjlkMmIyODY4NTZkOTY3OGNiYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0aHR0cGJh
Y2tlbmQuYworKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLSNp
bmNsdWRlIDxnbGliL2dzdGRpby5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3
ZWJraXQvd2Via2l0Lmg+Ci0KLS8vIE5vdCB5ZXQgcHVibGljIEFQSQotU291cE1lc3NhZ2UqIHdl
YmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X21lc3NhZ2UoV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJl
cXVlc3QpOwotCi1zdGF0aWMgZ2Jvb2xlYW4gbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fcmVx
dWVzdGVkX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRXZWJGcmFtZSogd2ViX2Zy
YW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0V2ViTmF2aWdhdGlvbkFj
dGlvbiogYWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJLaXRXZWJQb2xpY3lEZWNpc2lvbiogZGVjaXNpb24sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVy
IGRhdGEpCi17Ci0gICAgU291cE1lc3NhZ2UqIG1lc3NhZ2UgPSB3ZWJraXRfbmV0d29ya19yZXF1
ZXN0X2dldF9tZXNzYWdlKHJlcXVlc3QpOwotCi0gICAgLyogMSAtPiB3ZWJraXRfbmV0d29ya19y
ZXF1ZXN0X3dpdGhfY29yZV9yZXF1ZXN0Ci0gICAgICoKLSAgICAgKiBUaGUgU291cE1lc3NhZ2Ug
aXMgY3JlYXRlZCBleGNsdXNpdmVseSBmb3IgdGhlIGVtaXNzaW9uIG9mIHRoaXMKLSAgICAgKiBz
aWduYWwuCi0gICAgICovCi0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKG1lc3NhZ2UpLT5y
ZWZfY291bnQsID09LCAxKTsKLQotICAgIHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdF9zb3VwX21lc3NhZ2VfbGlmZXRpbWUoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHdlYl92
aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0KLSAgICBnX29i
amVjdF9yZWZfc2luayh3ZWJfdmlldyk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYl92aWV3
LCAibmF2aWdhdGlvbi1wb2xpY3ktZGVjaXNpb24tcmVxdWVzdGVkIiwKLSAgICAgICAgICAgICAg
ICAgICAgIEdfQ0FMTEJBQ0sobmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb25fcmVxdWVzdGVkX2Ni
KSwKLSAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotCi0gICAgLyogbG9hZF91cmkgd2lsbCB0
cmlnZ2VyIHRoZSBuYXZpZ2F0aW9uLXBvbGljeS1kZWNpc2lvbi1yZXF1ZXN0ZWQKLSAgICAgKiBz
aWduYWwgZW1pc3Npb247Ci0gICAgICovCi0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHdl
Yl92aWV3LCAiaHR0cDovLzEyNy4wLjAuMS8iKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKHdlYl92
aWV3KTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewotICAgIGd0a190
ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3Nv
dXBtZXNzYWdlL2xpZmV0aW1lIiwgdGVzdF9zb3VwX21lc3NhZ2VfbGlmZXRpbWUpOwotICAgIHJl
dHVybiBnX3Rlc3RfcnVuICgpOwotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRHdGsvdGVzdGtleWV2ZW50cy5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRHdGsvdGVzdGtleWV2ZW50cy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBhY2QwMWYzNWY0OGYyZDY2MTZjNzE4ZmIyMGUwZGM5YWY2YmNlYmE5Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R3RrL3Rlc3RrZXlldmVudHMuYworKysgL2Rldi9udWxsCkBAIC0xLDM5MCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIE1hcnRpbiBSb2JpbnNvbiA8bXJv
Ymluc29uQHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8ZXJybm8u
aD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxn
bGliL2dzdGRpby5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ29u
dGV4dFJlZi5oPgotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgY2hhciogcGFnZTsKLSAgICBjaGFy
KiB0ZXh0OwotICAgIGdib29sZWFuIHNob3VsZEJlSGFuZGxlZDsKLX0gVGVzdEluZm87Ci0KLXR5
cGVkZWYgc3RydWN0IHsKLSAgICBHdGtXaWRnZXQqIHdpbmRvdzsKLSAgICBXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3OwotICAgIEdNYWluTG9vcCogbG9vcDsKLSAgICBUZXN0SW5mbyogaW5mbzsKLX0g
S2V5RXZlbnRGaXh0dXJlOwotCi1UZXN0SW5mbyoKLXRlc3RfaW5mb19uZXcoY29uc3QgY2hhciog
cGFnZSwgZ2Jvb2xlYW4gc2hvdWxkQmVIYW5kbGVkKQotewotICAgIFRlc3RJbmZvKiBpbmZvOwot
Ci0gICAgaW5mbyA9IGdfc2xpY2VfbmV3KFRlc3RJbmZvKTsKLSAgICBpbmZvLT5wYWdlID0gZ19z
dHJkdXAocGFnZSk7Ci0gICAgaW5mby0+c2hvdWxkQmVIYW5kbGVkID0gc2hvdWxkQmVIYW5kbGVk
OwotICAgIGluZm8tPnRleHQgPSAwOwotCi0gICAgcmV0dXJuIGluZm87Ci19Ci0KLXZvaWQKLXRl
c3RfaW5mb19kZXN0cm95KFRlc3RJbmZvKiBpbmZvKQotewotICAgIGdfZnJlZShpbmZvLT5wYWdl
KTsKLSAgICBnX2ZyZWUoaW5mby0+dGV4dCk7Ci0gICAgZ19zbGljZV9mcmVlKFRlc3RJbmZvLCBp
bmZvKTsKLX0KLQotc3RhdGljIHZvaWQga2V5X2V2ZW50X2ZpeHR1cmVfc2V0dXAoS2V5RXZlbnRG
aXh0dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZml4dHVyZS0+bG9v
cCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQotICAgIGZpeHR1cmUtPndpbmRvdyA9
IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwotICAgIGZpeHR1cmUtPndlYlZp
ZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLQotICAgIGd0a19j
b250YWluZXJfYWRkKEdUS19DT05UQUlORVIoZml4dHVyZS0+d2luZG93KSwgR1RLX1dJREdFVChm
aXh0dXJlLT53ZWJWaWV3KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGtleV9ldmVudF9maXh0dXJlX3Rl
YXJkb3duKEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewot
ICAgIGd0a193aWRnZXRfZGVzdHJveShmaXh0dXJlLT53aW5kb3cpOwotICAgIGdfbWFpbl9sb29w
X3VucmVmKGZpeHR1cmUtPmxvb3ApOwotICAgIHRlc3RfaW5mb19kZXN0cm95KGZpeHR1cmUtPmlu
Zm8pOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4ga2V5X3ByZXNzX2V2ZW50X2NiKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcsIEdka0V2ZW50KiBldmVudCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBLZXlF
dmVudEZpeHR1cmUqIGZpeHR1cmUgPSAoS2V5RXZlbnRGaXh0dXJlKilkYXRhOwotICAgIGdib29s
ZWFuIGhhbmRsZWQgPSBHVEtfV0lER0VUX0dFVF9DTEFTUyhmaXh0dXJlLT53ZWJWaWV3KS0+a2V5
X3ByZXNzX2V2ZW50KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksICZldmVudC0+a2V5KTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoaGFuZGxlZCwgPT0sIGZpeHR1cmUtPmluZm8tPnNob3VsZEJl
SGFuZGxlZCk7Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBrZXlf
cmVsZWFzZV9ldmVudF9jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHZGtFdmVudCogZXZlbnQs
IGdwb2ludGVyIGRhdGEpCi17Ci0gICAgLy8gV2ViQ29yZSBuZXZlciBzZWVtcyB0byBtYXJrIGtl
eXVwIGV2ZW50cyBhcyBoYW5kbGVkLgotICAgIEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSA9IChL
ZXlFdmVudEZpeHR1cmUqKWRhdGE7Ci0gICAgZ2Jvb2xlYW4gaGFuZGxlZCA9IEdUS19XSURHRVRf
R0VUX0NMQVNTKGZpeHR1cmUtPndlYlZpZXcpLT5rZXlfcHJlc3NfZXZlbnQoR1RLX1dJREdFVChm
aXh0dXJlLT53ZWJWaWV3KSwgJmV2ZW50LT5rZXkpOwotICAgIGdfYXNzZXJ0KCFoYW5kbGVkKTsK
LQotICAgIGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7Ci0KLSAgICByZXR1cm4gRkFM
U0U7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfa2V5cHJlc3NfZXZlbnRzX2xvYWRfc3RhdHVzX2Ni
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdQYXJhbVNwZWMqIHNwZWMsIGdwb2ludGVyIGRhdGEp
Ci17Ci0gICAgS2V5RXZlbnRGaXh0dXJlKiBmaXh0dXJlID0gKEtleUV2ZW50Rml4dHVyZSopZGF0
YTsKLSAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9h
ZF9zdGF0dXMod2ViVmlldyk7Ci0gICAgaWYgKHN0YXR1cyA9PSBXRUJLSVRfTE9BRF9GSU5JU0hF
RCkgewotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJrZXktcHJl
c3MtZXZlbnQiLAotICAgICAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0soa2V5X3ByZXNz
X2V2ZW50X2NiKSwgZml4dHVyZSk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+
d2ViVmlldywgImtleS1yZWxlYXNlLWV2ZW50IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBH
X0NBTExCQUNLKGtleV9yZWxlYXNlX2V2ZW50X2NiKSwgZml4dHVyZSk7Ci0gICAgICAgIGlmICgh
Z3RrX3Rlc3Rfd2lkZ2V0X3NlbmRfa2V5KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdka191bmljb2RlX3RvX2tleXZh
bCgnYScpLCAwKSkKLSAgICAgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgfQot
Ci19Ci0KLWdib29sZWFuIG1hcF9ldmVudF9jYihHdGtXaWRnZXQgKndpZGdldCwgR2RrRXZlbnQq
IGV2ZW50LCBncG9pbnRlciBkYXRhKQotewotICAgIEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSA9
IChLZXlFdmVudEZpeHR1cmUqKWRhdGE7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5n
KGZpeHR1cmUtPndlYlZpZXcsIGZpeHR1cmUtPmluZm8tPnBhZ2UsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJ0ZXh0L2h0bWwiLCAidXRmLTgiLCAiZmlsZTovLyIpOwotICAgIHJl
dHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgc2V0dXBfa2V5ZXZlbnRfdGVzdChLZXlFdmVu
dEZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSwgR0NhbGxiYWNrIGxvYWRfZXZl
bnRfY2FsbGJhY2spCi17Ci0gICAgZml4dHVyZS0+aW5mbyA9IChUZXN0SW5mbyopZGF0YTsKLSAg
ICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndpbmRvdywgIm1hcC1ldmVudCIsCi0gICAgICAg
ICAgICAgICAgICAgICBHX0NBTExCQUNLKG1hcF9ldmVudF9jYiksIGZpeHR1cmUpOwotCi0gICAg
Z3RrX3dpZGdldF9ncmFiX2ZvY3VzKEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldykpOwotICAg
IGd0a193aWRnZXRfc2hvdyhmaXh0dXJlLT53aW5kb3cpOwotICAgIGd0a193aWRnZXRfc2hvdyhH
VEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpKTsKLSAgICBndGtfd2luZG93X3ByZXNlbnQoR1RL
X1dJTkRPVyhmaXh0dXJlLT53aW5kb3cpKTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVy
ZS0+d2ViVmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLAotICAgICAgICAgICAgICAgICAgICAg
bG9hZF9ldmVudF9jYWxsYmFjaywgZml4dHVyZSk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4oZml4
dHVyZS0+bG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfa2V5cHJlc3NfZXZlbnRzKEtleUV2
ZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIHNldHVwX2tl
eWV2ZW50X3Rlc3QoZml4dHVyZSwgZGF0YSwgR19DQUxMQkFDSyh0ZXN0X2tleXByZXNzX2V2ZW50
c19sb2FkX3N0YXR1c19jYikpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gZWxlbWVudF90ZXh0X2Vx
dWFsX3RvKEpTQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBnY2hhciogdGV4dCkKLXsKLSAgICBK
U1N0cmluZ1JlZiBzY3JpcHRTdHJpbmcgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygK
LSAgICAgICJ3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpblwiKS52YWx1ZTsiKTsK
LSAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNFdmFsdWF0ZVNjcmlwdChjb250ZXh0LCBzY3JpcHRT
dHJpbmcsIDAsIDAsIDAsIDApOwotICAgIEpTU3RyaW5nUmVsZWFzZShzY3JpcHRTdHJpbmcpOwot
Ci0gICAgLy8gSWYgdGhlIHZhbHVlIGlzbid0IGEgc3RyaW5nLCB0aGUgZWxlbWVudCBpcyBwcm9i
YWJseSBhIGRpdgotICAgIC8vIHNvIGdyYWIgdGhlIGlubmVyVGV4dCBpbnN0ZWFkLgotICAgIGlm
ICghSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHZhbHVlKSkgewotICAgICAgICBKU1N0cmluZ1Jl
ZiBzY3JpcHRTdHJpbmcgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygKLSAgICAgICAg
ICAid2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaW5cIikuaW5uZXJUZXh0OyIpOwot
ICAgICAgICB2YWx1ZSA9IEpTRXZhbHVhdGVTY3JpcHQoY29udGV4dCwgc2NyaXB0U3RyaW5nLCAw
LCAwLCAwLCAwKTsKLSAgICAgICAgSlNTdHJpbmdSZWxlYXNlKHNjcmlwdFN0cmluZyk7Ci0gICAg
fQotCi0gICAgZ19hc3NlcnQoSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHZhbHVlKSk7Ci0gICAg
SlNTdHJpbmdSZWYgaW5wdXRTdHJpbmcgPSBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHZh
bHVlLCAwKTsKLSAgICBnX2Fzc2VydChpbnB1dFN0cmluZyk7Ci0KLSAgICBnaW50IHNpemUgPSBK
U1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoaW5wdXRTdHJpbmcpOwotICAgIGdjaGFy
KiBjU3RyaW5nID0gZ19tYWxsb2Moc2l6ZSk7Ci0gICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhp
bnB1dFN0cmluZywgY1N0cmluZywgc2l6ZSk7Ci0gICAgSlNTdHJpbmdSZWxlYXNlKGlucHV0U3Ry
aW5nKTsKLQotICAgIGdib29sZWFuIHJlc3VsdCA9IGdfdXRmOF9jb2xsYXRlKGNTdHJpbmcsIHRl
eHQpID09IDA7Ci0gICAgZ19mcmVlKGNTdHJpbmcpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LXN0YXRpYyB2b2lkIHRlc3RfaW1lX2xvYWRfc3RhdHVzX2NiKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcsIEdQYXJhbVNwZWMqIHNwZWMsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgS2V5RXZlbnRGaXh0
dXJlKiBmaXh0dXJlID0gKEtleUV2ZW50Rml4dHVyZSopZGF0YTsKLSAgICBXZWJLaXRMb2FkU3Rh
dHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMod2ViVmlldyk7Ci0g
ICAgaWYgKHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9n
bG9iYWxfY29udGV4dCgKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHdl
YlZpZXcpKTsKLSAgICBnX2Fzc2VydChjb250ZXh0KTsKLQotICAgIEd0a0lNQ29udGV4dCogaW1D
b250ZXh0ID0gMDsKLSAgICBnX29iamVjdF9nZXQod2ViVmlldywgImltLWNvbnRleHQiLCAmaW1D
b250ZXh0LCBOVUxMKTsKLSAgICBnX2Fzc2VydChpbUNvbnRleHQpOwotCi0gICAgLy8gVGVzdCB0
aGF0IGNvbW1pdHMgdGhhdCBoYXBwZW4gb3V0c2lkZSBvZiBrZXkgZXZlbnRzCi0gICAgLy8gY2hh
bmdlIHRoZSB0ZXh0IGZpZWxkIGltbWVkaWF0ZWx5LiBUaGlzIGNsb3NlbHkgcmVwbGljYXRlcwot
ICAgIC8vIHRoZSBiZWhhdmlvciBvZiBTQ0lNLgotICAgIGdfYXNzZXJ0KGVsZW1lbnRfdGV4dF9l
cXVhbF90byhjb250ZXh0LCAiIikpOwotICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShpbUNvbnRl
eHQsICJjb21taXQiLCAiYSIpOwotICAgIGdfYXNzZXJ0KGVsZW1lbnRfdGV4dF9lcXVhbF90byhj
b250ZXh0LCAiYSIpKTsKLSAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoaW1Db250ZXh0LCAiY29t
bWl0IiwgImIiKTsKLSAgICBnX2Fzc2VydChlbGVtZW50X3RleHRfZXF1YWxfdG8oY29udGV4dCwg
ImFiIikpOwotICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShpbUNvbnRleHQsICJjb21taXQiLCAi
YyIpOwotICAgIGdfYXNzZXJ0KGVsZW1lbnRfdGV4dF9lcXVhbF90byhjb250ZXh0LCAiYWJjIikp
OwotCi0gICAgZ19vYmplY3RfdW5yZWYoaW1Db250ZXh0KTsKLSAgICBnX21haW5fbG9vcF9xdWl0
KGZpeHR1cmUtPmxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X2ltZShLZXlFdmVudEZpeHR1
cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBzZXR1cF9rZXlldmVudF90
ZXN0KGZpeHR1cmUsIGRhdGEsIEdfQ0FMTEJBQ0sodGVzdF9pbWVfbG9hZF9zdGF0dXNfY2IpKTsK
LX0KLQotc3RhdGljIGdib29sZWFuIHZlcmlmeV9jb250ZW50cyhncG9pbnRlciBkYXRhKQotewot
ICAgIEtleUV2ZW50Rml4dHVyZSogZml4dHVyZSA9IChLZXlFdmVudEZpeHR1cmUqKWRhdGE7Ci0g
ICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9nbG9i
YWxfY29udGV4dCgKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKGZpeHR1
cmUtPndlYlZpZXcpKTsKLSAgICBnX2Fzc2VydChjb250ZXh0KTsKLQotICAgIGdfYXNzZXJ0KGVs
ZW1lbnRfdGV4dF9lcXVhbF90byhjb250ZXh0LCBmaXh0dXJlLT5pbmZvLT50ZXh0KSk7Ci0gICAg
Z19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0K
LXN0YXRpYyB2b2lkIHRlc3RfYmxvY2tpbmdfbG9hZF9zdGF0dXNfY2IoV2ViS2l0V2ViVmlldyog
d2ViVmlldywgR1BhcmFtU3BlYyogc3BlYywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBLZXlFdmVu
dEZpeHR1cmUqIGZpeHR1cmUgPSAoS2V5RXZlbnRGaXh0dXJlKilkYXRhOwotICAgIFdlYktpdExv
YWRTdGF0dXMgc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJWaWV3
KTsKLSAgICBpZiAoc3RhdHVzICE9IFdFQktJVF9MT0FEX0ZJTklTSEVEKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBUaGUgZmlyc3Qga2V5cHJlc3MgZXZlbnQgc2hvdWxkIG5vdCBtb2RpZnkg
dGhlIGZpZWxkLgotICAgIGZpeHR1cmUtPmluZm8tPnRleHQgPSBnX3N0cmR1cCgiYmMiKTsKLSAg
ICBpZiAoIWd0a190ZXN0X3dpZGdldF9zZW5kX2tleShHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZp
ZXcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RrX3VuaWNvZGVfdG9fa2V5
dmFsKCdhJyksIDApKQotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgIGlmICgh
Z3RrX3Rlc3Rfd2lkZ2V0X3NlbmRfa2V5KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RrX3VuaWNvZGVfdG9fa2V5dmFsKCdi
JyksIDApKQotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgIGlmICghZ3RrX3Rl
c3Rfd2lkZ2V0X3NlbmRfa2V5KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RrX3VuaWNvZGVfdG9fa2V5dmFsKCdjJyksIDAp
KQotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotCi0gICAgZ19pZGxlX2FkZCh2ZXJp
ZnlfY29udGVudHMsIGZpeHR1cmUpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X2Jsb2NraW5nKEtl
eUV2ZW50Rml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIHNldHVw
X2tleWV2ZW50X3Rlc3QoZml4dHVyZSwgZGF0YSwgR19DQUxMQkFDSyh0ZXN0X2Jsb2NraW5nX2xv
YWRfc3RhdHVzX2NiKSk7Ci19Ci0KLSNpZiBkZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQotc3Rh
dGljIHZvaWQgdGVzdF94aW1fbG9hZF9zdGF0dXNfY2IoV2ViS2l0V2ViVmlldyogd2ViVmlldywg
R1BhcmFtU3BlYyogc3BlYywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBLZXlFdmVudEZpeHR1cmUq
IGZpeHR1cmUgPSAoS2V5RXZlbnRGaXh0dXJlKilkYXRhOwotICAgIFdlYktpdExvYWRTdGF0dXMg
c3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJWaWV3KTsKLSAgICBp
ZiAoc3RhdHVzICE9IFdFQktJVF9MT0FEX0ZJTklTSEVEKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBHdGtJTUNvbnRleHQqIGltQ29udGV4dCA9IDA7Ci0gICAgZ19vYmplY3RfZ2V0KHdlYlZpZXcs
ICJpbS1jb250ZXh0IiwgJmltQ29udGV4dCwgTlVMTCk7Ci0gICAgZ19hc3NlcnQoaW1Db250ZXh0
KTsKLQotICAgIGdjaGFyKiBvcmlnaW5hbElkID0gZ19zdHJkdXAoZ3RrX2ltX211bHRpY29udGV4
dF9nZXRfY29udGV4dF9pZChHVEtfSU1fTVVMVElDT05URVhUKGltQ29udGV4dCkpKTsKLSAgICBn
dGtfaW1fbXVsdGljb250ZXh0X3NldF9jb250ZXh0X2lkKEdUS19JTV9NVUxUSUNPTlRFWFQoaW1D
b250ZXh0KSwgInhpbSIpOwotCi0gICAgLy8gVGVzdCB0aGF0IGNvbW1pdHMgdGhhdCBoYXBwZW4g
b3V0c2lkZSBvZiBrZXkgZXZlbnRzCi0gICAgLy8gY2hhbmdlIHRoZSB0ZXh0IGZpZWxkIGltbWVk
aWF0ZWx5LiBUaGlzIGNsb3NlbHkgcmVwbGljYXRlcwotICAgIC8vIHRoZSBiZWhhdmlvciBvZiBT
Q0lNLgotICAgIGZpeHR1cmUtPmluZm8tPnRleHQgPSBnX3N0cmR1cCgiZGViaWFuIik7Ci0gICAg
aWYgKCFndGtfdGVzdF93aWRnZXRfc2VuZF9rZXkoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdka191bmljb2RlX3RvX2tleXZh
bCgnZCcpLCAwKSkKLSAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICBpZiAoIWd0
a190ZXN0X3dpZGdldF9zZW5kX2tleShHVEtfV0lER0VUKGZpeHR1cmUtPndlYlZpZXcpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfdW5pY29kZV90b19rZXl2YWwoJ2UnKSwgMCkp
Ci0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgaWYgKCFndGtfdGVzdF93aWRn
ZXRfc2VuZF9rZXkoR1RLX1dJREdFVChmaXh0dXJlLT53ZWJWaWV3KSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2RrX3VuaWNvZGVfdG9fa2V5dmFsKCdiJyksIDApKQotICAgICAgICBn
X2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgIGlmICghZ3RrX3Rlc3Rfd2lkZ2V0X3NlbmRfa2V5
KEdUS19XSURHRVQoZml4dHVyZS0+d2ViVmlldyksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdka191bmljb2RlX3RvX2tleXZhbCgnaScpLCAwKSkKLSAgICAgICAgZ19hc3NlcnRfbm90
X3JlYWNoZWQoKTsKLSAgICBpZiAoIWd0a190ZXN0X3dpZGdldF9zZW5kX2tleShHVEtfV0lER0VU
KGZpeHR1cmUtPndlYlZpZXcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtfdW5p
Y29kZV90b19rZXl2YWwoJ2EnKSwgMCkpCi0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7
Ci0gICAgaWYgKCFndGtfdGVzdF93aWRnZXRfc2VuZF9rZXkoR1RLX1dJREdFVChmaXh0dXJlLT53
ZWJWaWV3KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RrX3VuaWNvZGVfdG9fa2V5
dmFsKCduJyksIDApKQotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotCi0gICAgZ3Rr
X2ltX211bHRpY29udGV4dF9zZXRfY29udGV4dF9pZChHVEtfSU1fTVVMVElDT05URVhUKGltQ29u
dGV4dCksIG9yaWdpbmFsSWQpOwotICAgIGdfZnJlZShvcmlnaW5hbElkKTsKLSAgICBnX29iamVj
dF91bnJlZihpbUNvbnRleHQpOwotCi0gICAgZ19pZGxlX2FkZCh2ZXJpZnlfY29udGVudHMsIGZp
eHR1cmUpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3hpbShLZXlFdmVudEZpeHR1cmUqIGZpeHR1
cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBzZXR1cF9rZXlldmVudF90ZXN0KGZpeHR1
cmUsIGRhdGEsIEdfQ0FMTEJBQ0sodGVzdF94aW1fbG9hZF9zdGF0dXNfY2IpKTsKLX0KLSNlbmRp
ZgotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgZ3RrX3Rlc3RfaW5p
dCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy8iKTsKLQotCi0gICAgLy8gV2UnbGwgdGVzdCBpbnB1dCBvbiBhIHNsZXcg
b2YgZGlmZmVyZW50IG5vZGUgdHlwZXMuIEtleSBldmVudHMgdG8KLSAgICAvLyB0ZXh0IGlucHV0
cyBhbmQgZWRpdGFibGUgZGl2cyBzaG91bGQgYmUgbWFya2VkIGFzIGhhbmRsZWQuIEtleSBldmVu
dHMKLSAgICAvLyB0byBidXR0b25zIGFuZCBsaW5rcyBzaG91bGQgbm90LgotICAgIGNvbnN0IGNo
YXIqIHRleHRpbnB1dF9odG1sID0gIjxodG1sPjxib2R5PjxpbnB1dCBpZD1cImluXCIgdHlwZT1c
InRleHRcIj4iCi0gICAgICAgICI8c2NyaXB0PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbicp
LmZvY3VzKCk7PC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iOwotICAgIGNvbnN0IGNoYXIqIGJ1dHRv
bl9odG1sID0gIjxodG1sPjxib2R5PjxpbnB1dCBpZD1cImluXCIgdHlwZT1cImJ1dHRvblwiPiIK
LSAgICAgICAgIjxzY3JpcHQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luJykuZm9jdXMoKTs8
L3NjcmlwdD48L2JvZHk+PC9odG1sPiI7Ci0gICAgY29uc3QgY2hhciogbGlua19odG1sID0gIjxo
dG1sPjxib2R5PjxhIGhyZWY9XCJodHRwOi8vd3d3Lmdub21lLm9yZ1wiIGlkPVwiaW5cIj4iCi0g
ICAgICAgICJMSU5LWSBNQ0xJTktFUlNPTjwvYT48c2NyaXB0PmRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdpbicpLmZvY3VzKCk7PC9zY3JpcHQ+IgotICAgICAgICAiPC9ib2R5PjwvaHRtbD4iOwot
ICAgIGNvbnN0IGNoYXIqIGRpdl9odG1sID0gIjxodG1sPjxib2R5PjxkaXYgaWQ9XCJpblwiIGNv
bnRlbnRlZGl0YWJsZT1cInRydWVcIj4iCi0gICAgICAgICI8c2NyaXB0PmRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdpbicpLmZvY3VzKCk7PC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iOwotCi0gICAg
Ly8gVGhlc2UgYXJlIHNpbWlsYXIgdG8gdGhlIGJsb2NrcyBhYm92ZSwgYnV0IHRoZXkgc2hvdWxk
IGJsb2NrIHRoZSBmaXJzdAotICAgIC8vIGtleXByZXNzIG1vZGlmeWluZyB0aGUgZWRpdGFibGUg
bm9kZS4KLSAgICBjb25zdCBjaGFyKiB0ZXh0aW5wdXRfaHRtbF9ibG9ja2luZyA9ICI8aHRtbD48
Ym9keT4iCi0gICAgICAgICI8aW5wdXQgaWQ9XCJpblwiIHR5cGU9XCJ0ZXh0XCIgIgotICAgICAg
ICAib25rZXlwcmVzcz1cImlmIChmaXJzdCkge2V2ZW50LnByZXZlbnREZWZhdWx0KCk7Zmlyc3Q9
ZmFsc2U7fVwiPiIKLSAgICAgICAgIjxzY3JpcHQ+Zmlyc3QgPSB0cnVlO1xuZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2luJykuZm9jdXMoKTs8L3NjcmlwdD5cbiIKLSAgICAgICAgIjwvc2NyaXB0
PjwvYm9keT48L2h0bWw+IjsKLSAgICBjb25zdCBjaGFyKiBkaXZfaHRtbF9ibG9ja2luZyA9ICI8
aHRtbD48Ym9keT4iCi0gICAgICAgICI8ZGl2IGlkPVwiaW5cIiBjb250ZW50ZWRpdGFibGU9XCJ0
cnVlXCIgIgotICAgICAgICAib25rZXlwcmVzcz1cImlmIChmaXJzdCkge2V2ZW50LnByZXZlbnRE
ZWZhdWx0KCk7Zmlyc3Q9ZmFsc2U7fVwiPiIKLSAgICAgICAgIjxzY3JpcHQ+Zmlyc3QgPSB0cnVl
OyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW4nKS5mb2N1cygpOzwvc2NyaXB0PlxuIgotICAg
ICAgICAiPC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4iOwotCi0gICAgZ190ZXN0X2FkZCgiL3dlYmtp
dC9rZXlldmVudHMvZXZlbnQtdGV4dGlucHV0IiwgS2V5RXZlbnRGaXh0dXJlLAotICAgICAgICAg
ICAgICAgdGVzdF9pbmZvX25ldyh0ZXh0aW5wdXRfaHRtbCwgVFJVRSksCi0gICAgICAgICAgICAg
ICBrZXlfZXZlbnRfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfa2V5cHJlc3Nf
ZXZlbnRzLAotICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfdGVhcmRvd24pOwotICAg
IGdfdGVzdF9hZGQoIi93ZWJraXQva2V5ZXZlbnRzL2V2ZW50LWJ1dHRvbnMiLCBLZXlFdmVudEZp
eHR1cmUsCi0gICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KGJ1dHRvbl9odG1sLCBGQUxTRSks
Ci0gICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAg
IHRlc3Rfa2V5cHJlc3NfZXZlbnRzLAotICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVf
dGVhcmRvd24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQva2V5ZXZlbnRzL2V2ZW50LWxpbmsi
LCBLZXlFdmVudEZpeHR1cmUsCi0gICAgICAgICAgICAgICB0ZXN0X2luZm9fbmV3KGxpbmtfaHRt
bCwgRkFMU0UpLAotICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfc2V0dXAsCi0gICAg
ICAgICAgICAgICB0ZXN0X2tleXByZXNzX2V2ZW50cywKLSAgICAgICAgICAgICAgIGtleV9ldmVu
dF9maXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2tleWV2ZW50L2V2
ZW50LWRpdiIsIEtleUV2ZW50Rml4dHVyZSwKLSAgICAgICAgICAgICAgIHRlc3RfaW5mb19uZXco
ZGl2X2h0bWwsIFRSVUUpLAotICAgICAgICAgICAgICAga2V5X2V2ZW50X2ZpeHR1cmVfc2V0dXAs
Ci0gICAgICAgICAgICAgICB0ZXN0X2tleXByZXNzX2V2ZW50cywKLSAgICAgICAgICAgICAgIGtl
eV9ldmVudF9maXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2tleWV2
ZW50L2ltZS10ZXh0aW5wdXQiLCBLZXlFdmVudEZpeHR1cmUsCi0gICAgICAgICAgICAgICB0ZXN0
X2luZm9fbmV3KHRleHRpbnB1dF9odG1sLCBUUlVFKSwKLSAgICAgICAgICAgICAgIGtleV9ldmVu
dF9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF9pbWUsCi0gICAgICAgICAgICAg
ICBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdC9r
ZXlldmVudC9pbWUtZGl2IiwgS2V5RXZlbnRGaXh0dXJlLAotICAgICAgICAgICAgICAgdGVzdF9p
bmZvX25ldyhkaXZfaHRtbCwgVFJVRSksCi0gICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVy
ZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfaW1lLAotICAgICAgICAgICAgICAga2V5X2V2
ZW50X2ZpeHR1cmVfdGVhcmRvd24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQva2V5ZXZlbnQv
YmxvY2stdGV4dGlucHV0IiwgS2V5RXZlbnRGaXh0dXJlLAotICAgICAgICAgICAgICAgdGVzdF9p
bmZvX25ldyh0ZXh0aW5wdXRfaHRtbF9ibG9ja2luZywgVFJVRSksCi0gICAgICAgICAgICAgICBr
ZXlfZXZlbnRfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfYmxvY2tpbmcsCi0g
ICAgICAgICAgICAgICBrZXlfZXZlbnRfZml4dHVyZV90ZWFyZG93bik7Ci0gICAgZ190ZXN0X2Fk
ZCgiL3dlYmtpdC9rZXlldmVudC9ibG9jay1kaXYiLCBLZXlFdmVudEZpeHR1cmUsCi0gICAgICAg
ICAgICAgICB0ZXN0X2luZm9fbmV3KGRpdl9odG1sX2Jsb2NraW5nLCBUUlVFKSwKLSAgICAgICAg
ICAgICAgIGtleV9ldmVudF9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF9ibG9j
a2luZywKLSAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJlX3RlYXJkb3duKTsKLSNpZiBk
ZWZpbmVkKEdES19XSU5ET1dJTkdfWDExKQotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQva2V5ZXZl
bnQveGltLXRleHRpbnB1dCIsIEtleUV2ZW50Rml4dHVyZSwKLSAgICAgICAgICAgICAgIHRlc3Rf
aW5mb19uZXcodGV4dGlucHV0X2h0bWwsIFRSVUUpLAotICAgICAgICAgICAgICAga2V5X2V2ZW50
X2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3hpbSwKLSAgICAgICAgICAgICAg
IGtleV9ldmVudF9maXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2tl
eWV2ZW50L3hpbS1kaXYiLCBLZXlFdmVudEZpeHR1cmUsCi0gICAgICAgICAgICAgICB0ZXN0X2lu
Zm9fbmV3KGRpdl9odG1sLCBUUlVFKSwKLSAgICAgICAgICAgICAgIGtleV9ldmVudF9maXh0dXJl
X3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF94aW0sCi0gICAgICAgICAgICAgICBrZXlfZXZl
bnRfZml4dHVyZV90ZWFyZG93bik7Ci0jZW5kaWYKLQotICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7
Ci19Ci0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rl
c3Rsb2FkaW5nLmMgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bG9h
ZGluZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGE5MjBmMDRjNWMyMGRmNWQ2
MmRhZDg2ZmQ0ODM4MWIyNTc1ZDRkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Rsb2Fk
aW5nLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOSwgMjAxMCBHdXN0YXZvIE5vcm9uaGEgU2lsdmEKLSAqIENvcHlyaWdodCAoQykgMjAw
OSBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgot
I2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUg
PHdlYmtpdC93ZWJraXQuaD4KLQotLyogVGhpcyBzdHJpbmcgaGFzIHRvIGJlIHJhdGhlciBiaWcg
YmVjYXVzZSBvZiB0aGUgY2FuY2VsbGVkIHRlc3QgLSBpdAotICogbG9va3MgbGlrZSBzb3VwIHJl
ZnVzZXMgdG8gc2VuZCBvciByZWNlaXZlIGEgdG9vIHNtYWxsIGNodW5rICovCi0jZGVmaW5lIEhU
TUxfU1RSSU5HICI8aHRtbD48Ym9keT5UZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchPC9ib2R5PjwvaHRtbD4iCi0KLVNvdXBVUkkqIGJh
c2VfdXJpOwotCi0vKiBGb3IgcmVhbCByZXF1ZXN0IHRlc3RpbmcgKi8KLXN0YXRpYyB2b2lkCi1z
ZXJ2ZXJfY2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbXNnLAotICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqIHF1ZXJ5LAotICAgICAg
ICAgICAgICAgIFNvdXBDbGllbnRDb250ZXh0KiBjb250ZXh0LCBncG9pbnRlciBkYXRhKQotewot
ICAgIGlmIChtc2ctPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKLSAgICAgICAgc291cF9t
ZXNzYWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobXNnLCBT
T1VQX1NUQVRVU19PSyk7Ci0KLSAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi90ZXN0X2xvYWRp
bmdfc3RhdHVzIikgfHwgZ19zdHJfZXF1YWwocGF0aCwgIi90ZXN0X2xvYWRpbmdfc3RhdHVzMiIp
KQotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobXNnLT5yZXNwb25zZV9ib2R5LCBT
T1VQX01FTU9SWV9TVEFUSUMsIEhUTUxfU1RSSU5HLCBzdHJsZW4oSFRNTF9TVFJJTkcpKTsKLSAg
ICBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZF9lcnJvciIpKSB7Ci0gICAg
ICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfQ0FOVF9DT05ORUNU
KTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvdGVzdF9sb2FkaW5nX2NhbmNl
bGxlZCIpKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX3NldF9lbmNvZGluZyhtc2ct
PnJlc3BvbnNlX2hlYWRlcnMsIFNPVVBfRU5DT0RJTkdfQ0hVTktFRCk7Ci0gICAgICAgIHNvdXBf
bWVzc2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJ
QywgSFRNTF9TVFJJTkcsIHN0cmxlbihIVE1MX1NUUklORykpOwotICAgICAgICBzb3VwX3NlcnZl
cl91bnBhdXNlX21lc3NhZ2Uoc2VydmVyLCBtc2cpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobXNnLT5yZXNwb25zZV9ib2R5KTsKLX0K
LQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7Ci0gICAgR01h
aW5Mb29wICpsb29wOwotICAgIGdib29sZWFuIGhhc19iZWVuX3Byb3Zpc2lvbmFsOwotICAgIGdi
b29sZWFuIGhhc19iZWVuX2NvbW1pdHRlZDsKLSAgICBnYm9vbGVhbiBoYXNfYmVlbl9maXJzdF92
aXN1YWxseV9ub25fZW1wdHlfbGF5b3V0OwotICAgIGdib29sZWFuIGhhc19iZWVuX2ZpbmlzaGVk
OwotICAgIGdib29sZWFuIGhhc19iZWVuX2ZhaWxlZDsKLSAgICBnYm9vbGVhbiBoYXNfYmVlbl9s
b2FkX2Vycm9yOwotfSBXZWJMb2FkaW5nRml4dHVyZTsKLQotc3RhdGljIHZvaWQgd2ViX2xvYWRp
bmdfZml4dHVyZV9zZXR1cChXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRl
ciBkYXRhKQotewotICAgIGZpeHR1cmUtPndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0
X3dlYl92aWV3X25ldygpKTsKLSAgICBmaXh0dXJlLT5sb29wID0gZ19tYWluX2xvb3BfbmV3KE5V
TEwsIFRSVUUpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKGZpeHR1cmUtPndlYlZpZXcpOwotICAg
IGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsID0gRkFMU0U7Ci0gICAgZml4dHVyZS0+aGFz
X2JlZW5fY29tbWl0dGVkID0gRkFMU0U7Ci0gICAgZml4dHVyZS0+aGFzX2JlZW5fZmlyc3Rfdmlz
dWFsbHlfbm9uX2VtcHR5X2xheW91dCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhhc19iZWVuX2Zp
bmlzaGVkID0gRkFMU0U7Ci0gICAgZml4dHVyZS0+aGFzX2JlZW5fZmFpbGVkID0gRkFMU0U7Ci0g
ICAgZml4dHVyZS0+aGFzX2JlZW5fbG9hZF9lcnJvciA9IEZBTFNFOwotfQotCi1zdGF0aWMgdm9p
ZCB3ZWJfbG9hZGluZ19maXh0dXJlX3RlYXJkb3duKFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJl
LCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2Vi
Vmlldyk7Ci0gICAgZ19tYWluX2xvb3BfdW5yZWYoZml4dHVyZS0+bG9vcCk7Ci19Ci0KLXN0YXRp
YyBjaGFyKiBnZXRfdXJpX2Zvcl9wYXRoKGNvbnN0IGNoYXIqIHBhdGgpCi17Ci0gICAgU291cFVS
SSogdXJpOwotICAgIGNoYXIqIHVyaV9zdHJpbmc7Ci0KLSAgICB1cmkgPSBzb3VwX3VyaV9uZXdf
d2l0aF9iYXNlKGJhc2VfdXJpLCBwYXRoKTsKLSAgICB1cmlfc3RyaW5nID0gc291cF91cmlfdG9f
c3RyaW5nKHVyaSwgRkFMU0UpOwotICAgIHNvdXBfdXJpX2ZyZWUgKHVyaSk7Ci0KLSAgICByZXR1
cm4gdXJpX3N0cmluZzsKLX0KLQotc3RhdGljIHZvaWQgbG9hZF9maW5pc2hlZF9jYihXZWJLaXRX
ZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0V2ViRnJhbWUqIHdlYl9mcmFtZSwgV2ViTG9hZGluZ0Zp
eHR1cmUqIGZpeHR1cmUpCi17Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlz
aW9uYWwpOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCk7Ci0gICAg
Z19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91
dCk7Ci0KLSAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOwotfQotCi0KLXN0YXRp
YyB2b2lkIHN0YXR1c19jaGFuZ2VkX2NiKEdPYmplY3QqIG9iamVjdCwgR1BhcmFtU3BlYyogcHNw
ZWMsIFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJlKQotewotICAgIFdlYktpdExvYWRTdGF0dXMg
c3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyhXRUJLSVRfV0VCX1ZJRVco
b2JqZWN0KSk7Ci0KLSAgICBzd2l0Y2ggKHN0YXR1cykgewotICAgIGNhc2UgV0VCS0lUX0xPQURf
UFJPVklTSU9OQUw6Ci0gICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNp
b25hbCk7Ci0gICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQpOwot
ICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2Vt
cHR5X2xheW91dCk7Ci0gICAgICAgIGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsID0gVFJV
RTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9DT01NSVRURUQ6Ci0gICAg
ICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKLSAgICAgICAgZ19h
c3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCk7Ci0gICAgICAgIGdfYXNzZXJ0KCFm
aXh0dXJlLT5oYXNfYmVlbl9maXJzdF92aXN1YWxseV9ub25fZW1wdHlfbGF5b3V0KTsKLSAgICAg
ICAgZml4dHVyZS0+aGFzX2JlZW5fY29tbWl0dGVkID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBXRUJLSVRfTE9BRF9GSVJTVF9WSVNVQUxMWV9OT05fRU1QVFlfTEFZT1VUOgotICAg
ICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCk7Ci0gICAgICAgIGdf
YXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRlZCk7Ci0gICAgICAgIGdfYXNzZXJ0KCFm
aXh0dXJlLT5oYXNfYmVlbl9maXJzdF92aXN1YWxseV9ub25fZW1wdHlfbGF5b3V0KTsKLSAgICAg
ICAgZml4dHVyZS0+aGFzX2JlZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dCA9IFRS
VUU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV0VCS0lUX0xPQURfRklOSVNIRUQ6Ci0gICAg
ICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKLSAgICAgICAgZ19h
c3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fY29tbWl0dGVkKTsKLSAgICAgICAgZ19hc3NlcnQoZml4
dHVyZS0+aGFzX2JlZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0g
ICAgfQotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X2xvYWRpbmdfc3RhdHVzKFdlYkxvYWRpbmdGaXh0
dXJlKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgY2hhciogdXJpX3N0cmlu
ZzsKLQotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVz
KGZpeHR1cmUtPndlYlZpZXcpLCA9PSwgV0VCS0lUX0xPQURfUFJPVklTSU9OQUwpOwotCi0gICAg
Z19vYmplY3RfY29ubmVjdChHX09CSkVDVChmaXh0dXJlLT53ZWJWaWV3KSwKLSAgICAgICAgICAg
ICAgICAgICAgICJzaWduYWw6Om5vdGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKHN0YXR1
c19jaGFuZ2VkX2NiKSwgZml4dHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6Omxv
YWQtZmluaXNoZWQiLCBHX0NBTExCQUNLKGxvYWRfZmluaXNoZWRfY2IpLCBmaXh0dXJlLAotICAg
ICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICB1cmlfc3RyaW5nID0gZ2V0X3VyaV9mb3Jf
cGF0aCgiL3Rlc3RfbG9hZGluZ19zdGF0dXMiKTsKLQotICAgIC8qIGxvYWRfdXJpIHdpbGwgdHJp
Z2dlciB0aGUgbmF2aWdhdGlvbi1wb2xpY3ktZGVjaXNpb24tcmVxdWVzdGVkCi0gICAgICogc2ln
bmFsIGVtaXNzaW9uOwotICAgICAqLwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0
dXJlLT53ZWJWaWV3LCB1cmlfc3RyaW5nKTsKLSAgICBnX2ZyZWUodXJpX3N0cmluZyk7Ci0KLSAg
ICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxvYWRf
ZXJyb3Jfc3RhdHVzX2NoYW5nZWRfY2IoR09iamVjdCogb2JqZWN0LCBHUGFyYW1TcGVjKiBwc3Bl
YywgV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUpCi17Ci0gICAgV2ViS2l0TG9hZFN0YXR1cyBz
dGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKFdFQktJVF9XRUJfVklFVyhv
YmplY3QpKTsKLQotICAgIHN3aXRjaChzdGF0dXMpIHsKLSAgICBjYXNlIFdFQktJVF9MT0FEX1BS
T1ZJU0lPTkFMOgotICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9u
YWwpOwotICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCA9IFRSVUU7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgV0VCS0lUX0xPQURfQ09NTUlUVEVEOgotICAgICAgICBnX2Fz
c2VydCghZml4dHVyZS0+aGFzX2JlZW5fY29tbWl0dGVkKTsKLSAgICAgICAgZml4dHVyZS0+aGFz
X2JlZW5fY29tbWl0dGVkID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXRUJLSVRf
TE9BRF9GSU5JU0hFRDoKLSAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlz
aW9uYWwpOwotICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9sb2FkX2Vycm9yKTsK
LSAgICAgICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fZmFpbGVkKTsKLSAgICAgICAgZ19h
c3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2ZpbmlzaGVkKTsKLSAgICAgICAgZml4dHVyZS0+aGFz
X2JlZW5fZmluaXNoZWQgPSBUUlVFOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJVF9M
T0FEX0ZBSUxFRDoKLSAgICAgICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCk7
Ci0gICAgICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCA9IFRSVUU7Ci0gICAgICAgIGdfbWFp
bl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGljIGdib29sZWFuIGxvYWRfZXJyb3Jf
Y2IoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBj
aGFyKiB1cmksIEdFcnJvciAqZXJyb3IsIFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJlKQotewot
ICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKLSAgICBnX2Fzc2Vy
dCghZml4dHVyZS0+aGFzX2JlZW5fbG9hZF9lcnJvcik7Ci0gICAgZml4dHVyZS0+aGFzX2JlZW5f
bG9hZF9lcnJvciA9IFRSVUU7Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lk
IHRlc3RfbG9hZGluZ19lcnJvcihXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9p
bnRlciBkYXRhKQotewotICAgIGNoYXIqIHVyaV9zdHJpbmc7Ci0KLSAgICBnX3Rlc3RfYnVnKCIy
ODg0MiIpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibG9hZC1l
cnJvciIsIEdfQ0FMTEJBQ0sobG9hZF9lcnJvcl9jYiksIGZpeHR1cmUpOwotICAgIGdfc2lnbmFs
X2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExC
QUNLKGxvYWRfZXJyb3Jfc3RhdHVzX2NoYW5nZWRfY2IpLCBmaXh0dXJlKTsKLQotICAgIHVyaV9z
dHJpbmcgPSBnZXRfdXJpX2Zvcl9wYXRoKCIvdGVzdF9sb2FkX2Vycm9yIik7Ci0gICAgd2Via2l0
X3dlYl92aWV3X2xvYWRfdXJpKGZpeHR1cmUtPndlYlZpZXcsIHVyaV9zdHJpbmcpOwotICAgIGdf
ZnJlZSh1cmlfc3RyaW5nKTsKLQotICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsK
LQotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsKTsKLSAgICBnX2Fz
c2VydCghZml4dHVyZS0+aGFzX2JlZW5fY29tbWl0dGVkKTsKLSAgICBnX2Fzc2VydChmaXh0dXJl
LT5oYXNfYmVlbl9sb2FkX2Vycm9yKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9m
YWlsZWQpOwotICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9maW5pc2hlZCk7Ci19Ci0K
LS8qIENhbmNlbGxlZCBsb2FkICovCi0KLXN0YXRpYyBnYm9vbGVhbiBsb2FkX2NhbmNlbGxlZF9j
YihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIGNvbnN0IGNo
YXIqIHVyaSwgR0Vycm9yICplcnJvciwgV2ViTG9hZGluZ0ZpeHR1cmUqIGZpeHR1cmUpCi17Ci0g
ICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOwotICAgIGdfYXNzZXJ0
KGZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCk7Ci0gICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc19i
ZWVuX2xvYWRfZXJyb3IpOwotICAgIGdfYXNzZXJ0KGVycm9yLT5jb2RlID09IFdFQktJVF9ORVRX
T1JLX0VSUk9SX0NBTkNFTExFRCk7Ci0gICAgZml4dHVyZS0+aGFzX2JlZW5fbG9hZF9lcnJvciA9
IFRSVUU7Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuIHN0b3BfbG9h
ZCAoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfc3RvcF9sb2FkaW5nKFdF
QktJVF9XRUJfVklFVyhkYXRhKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9p
ZCBsb2FkX2NhbmNlbGxlZF9zdGF0dXNfY2hhbmdlZF9jYihHT2JqZWN0KiBvYmplY3QsIEdQYXJh
bVNwZWMqIHBzcGVjLCBXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSkKLXsKLSAgICBXZWJLaXRM
b2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMoV0VCS0lU
X1dFQl9WSUVXKG9iamVjdCkpOwotCi0gICAgc3dpdGNoKHN0YXR1cykgewotICAgIGNhc2UgV0VC
S0lUX0xPQURfUFJPVklTSU9OQUw6Ci0gICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVl
bl9wcm92aXNpb25hbCk7Ci0gICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9mYWls
ZWQpOwotICAgICAgICBmaXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCA9IFRSVUU7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgV0VCS0lUX0xPQURfQ09NTUlUVEVEOgotICAgICAgICBnX2lk
bGVfYWRkIChzdG9wX2xvYWQsIG9iamVjdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV0VC
S0lUX0xPQURfRkFJTEVEOgotICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVlbl9wcm92
aXNpb25hbCk7Ci0gICAgICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQpOwot
ICAgICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fbG9hZF9lcnJvcik7Ci0gICAgICAg
IGZpeHR1cmUtPmhhc19iZWVuX2ZhaWxlZCA9IFRSVUU7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1
aXQoZml4dHVyZS0+bG9vcCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV0VCS0lUX0xPQURf
RklOSVNIRUQ6Ci0gICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQg
dGVzdF9sb2FkaW5nX2NhbmNlbGxlZChXZWJMb2FkaW5nRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0
cG9pbnRlciBkYXRhKQotewotICAgIGNoYXIqIHVyaV9zdHJpbmc7Ci0KLSAgICBnX3Rlc3RfYnVn
KCIyOTY0NCIpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibG9h
ZC1lcnJvciIsIEdfQ0FMTEJBQ0sobG9hZF9jYW5jZWxsZWRfY2IpLCBmaXh0dXJlKTsKLSAgICBn
X3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwg
R19DQUxMQkFDSyhsb2FkX2NhbmNlbGxlZF9zdGF0dXNfY2hhbmdlZF9jYiksIGZpeHR1cmUpOwot
Ci0gICAgdXJpX3N0cmluZyA9IGdldF91cmlfZm9yX3BhdGgoIi90ZXN0X2xvYWRpbmdfY2FuY2Vs
bGVkIik7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKGZpeHR1cmUtPndlYlZpZXcsIHVy
aV9zdHJpbmcpOwotICAgIGdfZnJlZSh1cmlfc3RyaW5nKTsKLQotICAgIGdfbWFpbl9sb29wX3J1
bihmaXh0dXJlLT5sb29wKTsKLX0KLQotc3RhdGljIHZvaWQgbG9hZF9nb2JhY2tfc3RhdHVzX2No
YW5nZWRfY2IoR09iamVjdCogb2JqZWN0LCBHUGFyYW1TcGVjKiBwc3BlYywgV2ViTG9hZGluZ0Zp
eHR1cmUqIGZpeHR1cmUpCi17Ci0gICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKFdFQktJVF9XRUJfVklFVyhvYmplY3QpKTsKLQotICAg
IHN3aXRjaChzdGF0dXMpIHsKLSAgICBjYXNlIFdFQktJVF9MT0FEX1BST1ZJU0lPTkFMOgotICAg
ICAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwpOwotICAgICAgICBm
aXh0dXJlLT5oYXNfYmVlbl9wcm92aXNpb25hbCA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgV0VCS0lUX0xPQURfQ09NTUlUVEVEOgotICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5o
YXNfYmVlbl9wcm92aXNpb25hbCk7Ci0gICAgICAgIGZpeHR1cmUtPmhhc19iZWVuX2NvbW1pdHRl
ZCA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV0VCS0lUX0xPQURfRkFJTEVEOgot
ICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFdFQktJVF9MT0FEX0ZJTklTSEVEOgotICAgICAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNfYmVl
bl9wcm92aXNpb25hbCk7Ci0gICAgICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc19iZWVuX2NvbW1p
dHRlZCk7Ci0gICAgICAgIGZpeHR1cmUtPmhhc19iZWVuX2ZpbmlzaGVkID0gVFJVRTsKLSAgICAg
ICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBsb2FkX3dl
bnRiYWNrX3N0YXR1c19jaGFuZ2VkX2NiKEdPYmplY3QqIG9iamVjdCwgR1BhcmFtU3BlYyogcHNw
ZWMsIFdlYkxvYWRpbmdGaXh0dXJlKiBmaXh0dXJlKQotewotICAgIFdlYktpdExvYWRTdGF0dXMg
c3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyhXRUJLSVRfV0VCX1ZJRVco
b2JqZWN0KSk7Ci0gICAgY2hhciogdXJpX3N0cmluZzsKLSAgICBjaGFyKiB1cmlfc3RyaW5nMjsK
LQotICAgIHVyaV9zdHJpbmcgPSBnZXRfdXJpX2Zvcl9wYXRoKCIvdGVzdF9sb2FkaW5nX3N0YXR1
cyIpOwotICAgIHVyaV9zdHJpbmcyID0gZ2V0X3VyaV9mb3JfcGF0aCgiL3Rlc3RfbG9hZGluZ19z
dGF0dXMyIik7Ci0KLSAgICBzd2l0Y2goc3RhdHVzKSB7Ci0gICAgY2FzZSBXRUJLSVRfTE9BRF9Q
Uk9WSVNJT05BTDoKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRf
dXJpKGZpeHR1cmUtPndlYlZpZXcpLCA9PSwgdXJpX3N0cmluZzIpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFdFQktJVF9MT0FEX0NPTU1JVFRFRDoKLSAgICAgICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKGZpeHR1cmUtPndlYlZpZXcpLCA9PSwgdXJpX3N0cmlu
Zyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV0VCS0lUX0xPQURfRkFJTEVEOgotICAgICAg
ICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdFQktJ
VF9MT0FEX0ZJTklTSEVEOgotICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3
X2dldF91cmkoZml4dHVyZS0+d2ViVmlldyksID09LCB1cmlfc3RyaW5nKTsKLSAgICAgICAgZ19t
YWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZ19mcmVlKHVyaV9zdHJpbmcpOwotICAg
IGdfZnJlZSh1cmlfc3RyaW5nMik7Ci19Ci0KLXN0YXRpYyB2b2lkIGxvYWRfZXJyb3JfdGVzdChX
ZWJLaXRXZWJWaWV3KiB3ZWJ2aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIGNvbnN0IGNoYXIq
IHVyaSwgR0Vycm9yKiBlcnJvcikKLXsKLSAgICBnX2RlYnVnKCJFcnJvcjogJXMiLCBlcnJvci0+
bWVzc2FnZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfbG9hZGluZ19nb2JhY2soV2ViTG9hZGlu
Z0ZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBjaGFyKiB1cmlf
c3RyaW5nOwotCi0gICAgZ19zaWduYWxfY29ubmVjdChmaXh0dXJlLT53ZWJWaWV3LCAibm90aWZ5
Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobG9hZF9nb2JhY2tfc3RhdHVzX2NoYW5nZWRfY2Ip
LCBmaXh0dXJlKTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZml4dHVyZS0+d2ViVmlldywgImxv
YWQtZXJyb3IiLCBHX0NBTExCQUNLKGxvYWRfZXJyb3JfdGVzdCksIGZpeHR1cmUpOwotCi0gICAg
dXJpX3N0cmluZyA9IGdldF91cmlfZm9yX3BhdGgoIi90ZXN0X2xvYWRpbmdfc3RhdHVzIik7Ci0g
ICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKGZpeHR1cmUtPndlYlZpZXcsIHVyaV9zdHJpbmcp
OwotICAgIGdfZnJlZSh1cmlfc3RyaW5nKTsKLQotICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJl
LT5sb29wKTsKLQotICAgIGZpeHR1cmUtPmhhc19iZWVuX3Byb3Zpc2lvbmFsID0gRkFMU0U7Ci0g
ICAgZml4dHVyZS0+aGFzX2JlZW5fY29tbWl0dGVkID0gRkFMU0U7Ci0gICAgZml4dHVyZS0+aGFz
X2JlZW5fZmlyc3RfdmlzdWFsbHlfbm9uX2VtcHR5X2xheW91dCA9IEZBTFNFOwotICAgIGZpeHR1
cmUtPmhhc19iZWVuX2ZpbmlzaGVkID0gRkFMU0U7Ci0gICAgZml4dHVyZS0+aGFzX2JlZW5fZmFp
bGVkID0gRkFMU0U7Ci0gICAgZml4dHVyZS0+aGFzX2JlZW5fbG9hZF9lcnJvciA9IEZBTFNFOwot
Ci0gICAgdXJpX3N0cmluZyA9IGdldF91cmlfZm9yX3BhdGgoIi90ZXN0X2xvYWRpbmdfc3RhdHVz
MiIpOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1cmlf
c3RyaW5nKTsKLSAgICBnX2ZyZWUodXJpX3N0cmluZyk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4o
Zml4dHVyZS0+bG9vcCk7Ci0KLSAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1
bmMoZml4dHVyZS0+d2ViVmlldywgbG9hZF9nb2JhY2tfc3RhdHVzX2NoYW5nZWRfY2IsIGZpeHR1
cmUpOwotCi0gICAgZml4dHVyZS0+aGFzX2JlZW5fcHJvdmlzaW9uYWwgPSBGQUxTRTsKLSAgICBm
aXh0dXJlLT5oYXNfYmVlbl9jb21taXR0ZWQgPSBGQUxTRTsKLSAgICBmaXh0dXJlLT5oYXNfYmVl
bl9maXJzdF92aXN1YWxseV9ub25fZW1wdHlfbGF5b3V0ID0gRkFMU0U7Ci0gICAgZml4dHVyZS0+
aGFzX2JlZW5fZmluaXNoZWQgPSBGQUxTRTsKLSAgICBmaXh0dXJlLT5oYXNfYmVlbl9mYWlsZWQg
PSBGQUxTRTsKLSAgICBmaXh0dXJlLT5oYXNfYmVlbl9sb2FkX2Vycm9yID0gRkFMU0U7Ci0KLSAg
ICBnX3NpZ25hbF9jb25uZWN0KGZpeHR1cmUtPndlYlZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVz
IiwgR19DQUxMQkFDSyhsb2FkX3dlbnRiYWNrX3N0YXR1c19jaGFuZ2VkX2NiKSwgZml4dHVyZSk7
Ci0gICAgd2Via2l0X3dlYl92aWV3X2dvX2JhY2soZml4dHVyZS0+d2ViVmlldyk7Ci0KLSAgICBn
X21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Ci0KLSAgICBnX3NpZ25hbF9oYW5kbGVyc19k
aXNjb25uZWN0X2J5X2Z1bmMoZml4dHVyZS0+d2ViVmlldywgbG9hZF93ZW50YmFja19zdGF0dXNf
Y2hhbmdlZF9jYiwgZml4dHVyZSk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJn
dikKLXsKLSAgICBTb3VwU2VydmVyKiBzZXJ2ZXI7Ci0KLSAgICBndGtfdGVzdF9pbml0KCZhcmdj
LCAmYXJndiwgTlVMTCk7Ci0KLSAgICBzZXJ2ZXIgPSBzb3VwX3NlcnZlcl9uZXcoU09VUF9TRVJW
RVJfUE9SVCwgMCwgTlVMTCk7Ci0gICAgc291cF9zZXJ2ZXJfcnVuX2FzeW5jKHNlcnZlcik7Ci0K
LSAgICBzb3VwX3NlcnZlcl9hZGRfaGFuZGxlcihzZXJ2ZXIsIE5VTEwsIHNlcnZlcl9jYWxsYmFj
aywgTlVMTCwgTlVMTCk7Ci0KLSAgICBiYXNlX3VyaSA9IHNvdXBfdXJpX25ldygiaHR0cDovLzEy
Ny4wLjAuMS8iKTsKLSAgICBzb3VwX3VyaV9zZXRfcG9ydChiYXNlX3VyaSwgc291cF9zZXJ2ZXJf
Z2V0X3BvcnQoc2VydmVyKSk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53
ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvbG9hZGluZy9zdGF0dXMiLAot
ICAgICAgICAgICAgICAgV2ViTG9hZGluZ0ZpeHR1cmUsIE5VTEwsCi0gICAgICAgICAgICAgICB3
ZWJfbG9hZGluZ19maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF9sb2FkaW5nX3N0
YXR1cywKLSAgICAgICAgICAgICAgIHdlYl9sb2FkaW5nX2ZpeHR1cmVfdGVhcmRvd24pOwotICAg
IGdfdGVzdF9hZGQoIi93ZWJraXQvbG9hZGluZy9lcnJvciIsCi0gICAgICAgICAgICAgICBXZWJM
b2FkaW5nRml4dHVyZSwgTlVMTCwKLSAgICAgICAgICAgICAgIHdlYl9sb2FkaW5nX2ZpeHR1cmVf
c2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X2xvYWRpbmdfZXJyb3IsCi0gICAgICAgICAgICAg
ICB3ZWJfbG9hZGluZ19maXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0
L2xvYWRpbmcvY2FuY2VsbGVkIiwKLSAgICAgICAgICAgICAgIFdlYkxvYWRpbmdGaXh0dXJlLCBO
VUxMLAotICAgICAgICAgICAgICAgd2ViX2xvYWRpbmdfZml4dHVyZV9zZXR1cCwKLSAgICAgICAg
ICAgICAgIHRlc3RfbG9hZGluZ19jYW5jZWxsZWQsCi0gICAgICAgICAgICAgICB3ZWJfbG9hZGlu
Z19maXh0dXJlX3RlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L2xvYWRpbmcvZ29i
YWNrIiwKLSAgICAgICAgICAgICAgIFdlYkxvYWRpbmdGaXh0dXJlLCBOVUxMLAotICAgICAgICAg
ICAgICAgd2ViX2xvYWRpbmdfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RfbG9h
ZGluZ19nb2JhY2ssCi0gICAgICAgICAgICAgICB3ZWJfbG9hZGluZ19maXh0dXJlX3RlYXJkb3du
KTsKLSAgICByZXR1cm4gZ190ZXN0X3J1bigpOwotfQotCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bWltZWhhbmRsaW5nLmMgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bWltZWhhbmRsaW5nLmMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDRjOTA2OTE4ZGE5NDA5ZDZmZGM5OTNlYjEzNjVhMGVkZDg4MzM1
ZGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdG1pbWVoYW5kbGluZy5jCisrKyAvZGV2
L251bGwKQEAgLTEsMjAzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIE1p
Y2hhZWwgQWxvbnpvCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZh
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJ0ZXN0X3V0aWxzLmgiCi0KLSNpbmNsdWRl
IDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDxsaWJzb3VwL3Nv
dXAuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0j
aW5jbHVkZSA8dW5pc3RkLmg+Ci0KLUdNYWluTG9vcCogbG9vcDsKLVNvdXBTZXNzaW9uICpzZXNz
aW9uOwotY2hhciogYmFzZV91cmk7Ci0KLS8qIEZvciByZWFsIHJlcXVlc3QgdGVzdGluZyAqLwot
c3RhdGljIHZvaWQKLXNlcnZlcl9jYWxsYmFjayhTb3VwU2VydmVyICpzZXJ2ZXIsIFNvdXBNZXNz
YWdlICptc2csCi0gICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsIEdIYXNoVGFibGUg
KnF1ZXJ5LAotICAgICAgICAgICAgICAgICBTb3VwQ2xpZW50Q29udGV4dCAqY29udGV4dCwgZ3Bv
aW50ZXIgZGF0YSkKLXsKLSAgICBpZiAobXNnLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7
Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfTk9UX0lN
UExFTUVOVEVEKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNvdXBfbWVzc2FnZV9z
ZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfT0spOwotCi0gICAgLyogUERGICovCi0gICAgaWYg
KGdfc3RyX2VxdWFsKHBhdGgsICIvcGRmIikpIHsKLSAgICAgICAgY2hhciogY29udGVudHM7Ci0g
ICAgICAgIGdzaXplIGxlbmd0aDsKLSAgICAgICAgR0Vycm9yKiBlcnJvciA9IE5VTEw7Ci0KLSAg
ICAgICAgZ19maWxlX2dldF9jb250ZW50cygidGVzdC5wZGYiLCAmY29udGVudHMsICZsZW5ndGgs
ICZlcnJvcik7Ci0gICAgICAgIGdfYXNzZXJ0KCFlcnJvcik7Ci0KLSAgICAgICAgc291cF9tZXNz
YWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29u
dGVudHMsIGxlbmd0aCk7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2h0bWwi
KSkgewotICAgICAgICBjaGFyKiBjb250ZW50czsKLSAgICAgICAgZ3NpemUgbGVuZ3RoOwotICAg
ICAgICBHRXJyb3IqIGVycm9yID0gTlVMTDsKLQotICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRz
KCJ0ZXN0Lmh0bWwiLCAmY29udGVudHMsICZsZW5ndGgsICZlcnJvcik7Ci0gICAgICAgIGdfYXNz
ZXJ0KCFlcnJvcik7Ci0KLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVz
cG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIGxlbmd0aCk7Ci0gICAgfSBl
bHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3RleHQiKSkgewotICAgICAgICBjaGFyKiBjb250
ZW50czsKLSAgICAgICAgZ3NpemUgbGVuZ3RoOwotICAgICAgICBHRXJyb3IqIGVycm9yID0gTlVM
TDsKLQotICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobXNnLT5yZXNwb25zZV9o
ZWFkZXJzLCAiQ29udGVudC1EaXNwb3NpdGlvbiIsICJhdHRhY2htZW50OyBmaWxlbmFtZT10ZXN0
LnR4dCIpOwotCi0gICAgICAgIGdfZmlsZV9nZXRfY29udGVudHMoInRlc3QudHh0IiwgJmNvbnRl
bnRzLCAmbGVuZ3RoLCAmZXJyb3IpOwotICAgICAgICBnX2Fzc2VydCghZXJyb3IpOwotCi0gICAg
ICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVN
T1JZX1RBS0UsIGNvbnRlbnRzLCBsZW5ndGgpOwotICAgIH0KLQotICAgIHNvdXBfbWVzc2FnZV9i
b2R5X2NvbXBsZXRlKG1zZy0+cmVzcG9uc2VfYm9keSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlkbGVf
cXVpdF9sb29wX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBHUGFyYW1TcGVjKiBwc3BlYywg
Z3BvaW50ZXIgZGF0YSkKLXsKLSAgICBpZiAod2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1
cyh3ZWJfdmlldykgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQgfHwKLSAgICAgICAgd2Via2l0X3dl
Yl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJfdmlldykgPT0gV0VCS0lUX0xPQURfRkFJTEVEKQot
ICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gbWlt
ZV90eXBlX3BvbGljeV9kZWNpc2lvbl9yZXF1ZXN0ZWRfY2IoV2ViS2l0V2ViVmlldyogdmlldywg
V2ViS2l0V2ViRnJhbWUqIGZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0LCBjb25z
dCBjaGFyKiBtaW1lX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViS2l0V2ViUG9saWN5RGVjaXNpb24qIGRlY2lzaW9uLCBncG9p
bnRlciBkYXRhKQotewotICAgIGNoYXIqIHR5cGUgPSAoY2hhciopZGF0YTsKLQotICAgIGlmIChn
X3N0cl9lcXVhbCh0eXBlLCAicGRmIikpIHsKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKG1pbWVf
dHlwZSwgPT0sICJhcHBsaWNhdGlvbi9wZGYiKTsKLSAgICAgICAgZ19hc3NlcnQoIXdlYmtpdF93
ZWJfdmlld19jYW5fc2hvd19taW1lX3R5cGUodmlldywgbWltZV90eXBlKSk7Ci0gICAgfSBlbHNl
IGlmIChnX3N0cl9lcXVhbCh0eXBlLCAiaHRtbCIpKSB7Ci0gICAgICAgIGdfYXNzZXJ0X2NtcHN0
cihtaW1lX3R5cGUsID09LCAidGV4dC9odG1sIik7Ci0gICAgICAgIGdfYXNzZXJ0KHdlYmtpdF93
ZWJfdmlld19jYW5fc2hvd19taW1lX3R5cGUodmlldywgbWltZV90eXBlKSk7Ci0gICAgfSBlbHNl
IGlmIChnX3N0cl9lcXVhbCh0eXBlLCAidGV4dCIpKSB7Ci0gICAgICAgIFdlYktpdE5ldHdvcmtS
ZXNwb25zZSogcmVzcG9uc2UgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9uZXR3b3JrX3Jlc3BvbnNl
KGZyYW1lKTsKLSAgICAgICAgU291cE1lc3NhZ2UqIG1lc3NhZ2UgPSB3ZWJraXRfbmV0d29ya19y
ZXNwb25zZV9nZXRfbWVzc2FnZShyZXNwb25zZSk7Ci0gICAgICAgIGNoYXIqIGRpc3Bvc2l0aW9u
OwotCi0gICAgICAgIGdfYXNzZXJ0KG1lc3NhZ2UpOwotICAgICAgICBzb3VwX21lc3NhZ2VfaGVh
ZGVyc19nZXRfY29udGVudF9kaXNwb3NpdGlvbihtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGlz
cG9zaXRpb24sIE5VTEwpOwotICAgICAgICBnX29iamVjdF91bnJlZihyZXNwb25zZSk7Ci0KLSAg
ICAgICAgZ19hc3NlcnRfY21wc3RyKGRpc3Bvc2l0aW9uLCA9PSwgImF0dGFjaG1lbnQiKTsKLSAg
ICAgICAgZ19mcmVlKGRpc3Bvc2l0aW9uKTsKLQotICAgICAgICBnX2Fzc2VydF9jbXBzdHIobWlt
ZV90eXBlLCA9PSwgInRleHQvcGxhaW4iKTsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0X3dlYl92
aWV3X2Nhbl9zaG93X21pbWVfdHlwZSh2aWV3LCBtaW1lX3R5cGUpKTsKLSAgICB9Ci0KLSAgICBn
X2ZyZWUodHlwZSk7Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RS
ZW1vdGVNaW1lVHlwZShjb25zdCB2b2lkKiBkYXRhKQotewotICAgIGNvbnN0IGNoYXIqIG5hbWUg
PSAoY29uc3QgY2hhciopIGRhdGE7Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9X
RUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKEdf
T0JKRUNUKHZpZXcpKTsKLQotICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7
Ci0KLSAgICBnX29iamVjdF9jb25uZWN0KEdfT0JKRUNUKHZpZXcpLAotICAgICAgICAgICAgICAg
ICAgICAgInNpZ25hbDo6bm90aWZ5Ojpsb2FkLXN0YXR1cyIsIGlkbGVfcXVpdF9sb29wX2NiLCBO
VUxMLAotICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6bWltZS10eXBlLXBvbGljeS1kZWNp
c2lvbi1yZXF1ZXN0ZWQiLCBtaW1lX3R5cGVfcG9saWN5X2RlY2lzaW9uX3JlcXVlc3RlZF9jYiwg
Z19zdHJkdXAobmFtZSksCi0gICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAgIGNoYXIq
IGVmZmVjdGl2ZV91cmkgPSBnX3N0cmR1cF9wcmludGYoIiVzJXMiLCBiYXNlX3VyaSwgbmFtZSk7
Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHZpZXcsIGVmZmVjdGl2ZV91cmkpOwotICAg
IGdfZnJlZShlZmZlY3RpdmVfdXJpKTsKLQotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQot
ICAgIGdfb2JqZWN0X3VucmVmKHZpZXcpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0TG9jYWxNaW1l
VHlwZShjb25zdCB2b2lkKiBkYXRhKQotewotICAgICBjb25zdCBjaGFyKiB0eXBlTmFtZSA9IChj
b25zdCBjaGFyKikgZGF0YTsKLSAgICAgV2ViS2l0V2ViVmlldyogdmlldyA9IFdFQktJVF9XRUJf
VklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgICBnX29iamVjdF9yZWZfc2luayhHX09C
SkVDVCh2aWV3KSk7Ci0KLSAgICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsK
LQotICAgICBnX29iamVjdF9jb25uZWN0KEdfT0JKRUNUKHZpZXcpLAotICAgICAgICAgICAgICAg
ICAgICAgICJzaWduYWw6Om5vdGlmeTo6bG9hZC1zdGF0dXMiLCBpZGxlX3F1aXRfbG9vcF9jYiwg
TlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjptaW1lLXR5cGUtcG9saWN5LWRl
Y2lzaW9uLXJlcXVlc3RlZCIsIG1pbWVfdHlwZV9wb2xpY3lfZGVjaXNpb25fcmVxdWVzdGVkX2Ni
LCBnX3N0cmR1cCh0eXBlTmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAg
ICAgZ2NoYXIqIGZpbGVuYW1lID0gZ19zdHJkdXBfcHJpbnRmKCJ0ZXN0LiVzIiwgdHlwZU5hbWUp
OwotICAgICBHRmlsZSogZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3BhdGgoZmlsZW5hbWUpOwotICAg
ICBnX2ZyZWUoZmlsZW5hbWUpOwotCi0gICAgIGdjaGFyKiBmaWxlVVJJID0gZ19maWxlX2dldF91
cmkoZmlsZSk7Ci0gICAgIGdfb2JqZWN0X3VucmVmKGZpbGUpOwotCi0gICAgIHdlYmtpdF93ZWJf
dmlld19sb2FkX3VyaSh2aWV3LCBmaWxlVVJJKTsKLSAgICAgZ19mcmVlKGZpbGVVUkkpOwotIAot
ICAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0gICAgIGdfb2JqZWN0X3VucmVmKHZpZXcpOwot
fQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgU291cFNlcnZlciog
c2VydmVyOwotICAgIFNvdXBVUkkqIHNvdXBfdXJpOwotCi0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJn
YywgJmFyZ3YsIE5VTEwpOwotCi0gICAgLyogSG9wZWZ1bGx5IG1ha2UgdGVzdCBpbmRlcGVuZGVu
dCBvZiB0aGUgcGF0aCBpdCdzIGNhbGxlZCBmcm9tLiAqLwotICAgIHRlc3R1dGlsc19yZWxhdGl2
ZV9jaGRpcigiVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rl
c3QuaHRtbCIsIGFyZ3ZbMF0pOwotCi0gICAgc2VydmVyID0gc291cF9zZXJ2ZXJfbmV3KFNPVVBf
U0VSVkVSX1BPUlQsIDAsIE5VTEwpOwotICAgIHNvdXBfc2VydmVyX3J1bl9hc3luYyhzZXJ2ZXIp
OwotCi0gICAgc291cF9zZXJ2ZXJfYWRkX2hhbmRsZXIoc2VydmVyLCBOVUxMLCBzZXJ2ZXJfY2Fs
bGJhY2ssIE5VTEwsIE5VTEwpOwotCi0gICAgc291cF91cmkgPSBzb3VwX3VyaV9uZXcoImh0dHA6
Ly8xMjcuMC4wLjEvIik7Ci0gICAgc291cF91cmlfc2V0X3BvcnQoc291cF91cmksIHNvdXBfc2Vy
dmVyX2dldF9wb3J0KHNlcnZlcikpOwotCi0gICAgYmFzZV91cmkgPSBzb3VwX3VyaV90b19zdHJp
bmcoc291cF91cmksIEZBTFNFKTsKLSAgICBzb3VwX3VyaV9mcmVlKHNvdXBfdXJpKTsKLQotICAg
IGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0
X2FkZF9kYXRhX2Z1bmMoIi93ZWJraXQvbWltZS9yZW1vdGUtUERGIiwgInBkZiIsIHRlc3RSZW1v
dGVNaW1lVHlwZSk7Ci0gICAgZ190ZXN0X2FkZF9kYXRhX2Z1bmMoIi93ZWJraXQvbWltZS9yZW1v
dGUtSFRNTCIsICJodG1sIiwgdGVzdFJlbW90ZU1pbWVUeXBlKTsKLSAgICBnX3Rlc3RfYWRkX2Rh
dGFfZnVuYygiL3dlYmtpdC9taW1lL3JlbW90ZS1URVhUIiwgInRleHQiLCB0ZXN0UmVtb3RlTWlt
ZVR5cGUpOwotICAgIGdfdGVzdF9hZGRfZGF0YV9mdW5jKCIvd2Via2l0L21pbWUvbG9jYWwtUERG
IiwgInBkZiIsIHRlc3RMb2NhbE1pbWVUeXBlKTsKLSAgICBnX3Rlc3RfYWRkX2RhdGFfZnVuYygi
L3dlYmtpdC9taW1lL2xvY2FsLUhUTUwiLCAiaHRtbCIsIHRlc3RMb2NhbE1pbWVUeXBlKTsKLSAg
ICBnX3Rlc3RfYWRkX2RhdGFfZnVuYygiL3dlYmtpdC9taW1lL2xvY2FsLVRFWFQiLCAidGV4dCIs
IHRlc3RMb2NhbE1pbWVUeXBlKTsKLQotICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Ci19CmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bmV0d29ya3Jl
cXVlc3QuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RuZXR3b3Jr
cmVxdWVzdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjJjOTBmMmQyM2FiMjFj
MDgzMjQyNDZiZDFjYmU0YThkNDczMTQzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3Ru
ZXR3b3JrcmVxdWVzdC5jCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEKLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8Z2xp
Yi5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2lu
Y2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotc3RhdGljIHZv
aWQgdGVzdF9uZXR3b3JrX3JlcXVlc3RfY3JlYXRlX2Rlc3Ryb3koKQotewotICAgIFdlYktpdE5l
dHdvcmtSZXF1ZXN0KiByZXF1ZXN0OwotICAgIFNvdXBNZXNzYWdlKiBtZXNzYWdlOwotCi0gICAg
LyogVGVzdCBjcmVhdGlvbiB3aXRoIFVSSSAqLwotICAgIHJlcXVlc3QgPSBXRUJLSVRfTkVUV09S
S19SRVFVRVNUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ORVRXT1JLX1JFUVVFU1QsICJ1cmki
LCAiaHR0cDovL2RlYmlhbi5vcmcvIiwgTlVMTCkpOwotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19O
RVRXT1JLX1JFUVVFU1QocmVxdWVzdCkpOwotICAgIG1lc3NhZ2UgPSB3ZWJraXRfbmV0d29ya19y
ZXF1ZXN0X2dldF9tZXNzYWdlKHJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KCFtZXNzYWdlKTsKLSAg
ICBnX29iamVjdF91bnJlZihyZXF1ZXN0KTsKLQotICAgIC8qIFRlc3QgY3JlYXRpb24gd2l0aCBT
b3VwTWVzc2FnZSAqLwotICAgIG1lc3NhZ2UgPSBzb3VwX21lc3NhZ2VfbmV3KCJHRVQiLCAiaHR0
cDovL2RlYmlhbi5vcmcvIik7Ci0gICAgcmVxdWVzdCA9IFdFQktJVF9ORVRXT1JLX1JFUVVFU1Qo
Z19vYmplY3RfbmV3KFdFQktJVF9UWVBFX05FVFdPUktfUkVRVUVTVCwgIm1lc3NhZ2UiLCBtZXNz
YWdlLCBOVUxMKSk7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0lTX05FVFdPUktfUkVRVUVTVChyZXF1
ZXN0KSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKG1lc3NhZ2UpLT5yZWZfY291bnQs
ID09LCAyKTsKLSAgICBnX29iamVjdF91bnJlZihyZXF1ZXN0KTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQoR19PQkpFQ1QobWVzc2FnZSktPnJlZl9jb3VudCwgPT0sIDEpOwotICAgIGdfb2JqZWN0X3Vu
cmVmKG1lc3NhZ2UpOwotCi0gICAgLyogVGVzdCBjcmVhdGlvbiB3aXRoIGJvdGggU291cE1lc3Nh
Z2UgYW5kIFVSSSAqLwotICAgIG1lc3NhZ2UgPSBzb3VwX21lc3NhZ2VfbmV3KCJHRVQiLCAiaHR0
cDovL2RlYmlhbi5vcmcvIik7Ci0gICAgcmVxdWVzdCA9IFdFQktJVF9ORVRXT1JLX1JFUVVFU1Qo
Z19vYmplY3RfbmV3KFdFQktJVF9UWVBFX05FVFdPUktfUkVRVUVTVCwgIm1lc3NhZ2UiLCBtZXNz
YWdlLCAidXJpIiwgImh0dHA6Ly9nbm9tZS5vcmcvIiwgTlVMTCkpOwotICAgIGdfYXNzZXJ0KFdF
QktJVF9JU19ORVRXT1JLX1JFUVVFU1QocmVxdWVzdCkpOwotICAgIGdfYXNzZXJ0X2NtcGludChH
X09CSkVDVChtZXNzYWdlKS0+cmVmX2NvdW50LCA9PSwgMik7Ci0gICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sICJodHRwOi8vZ25v
bWUub3JnLyIpOwotICAgIGdfb2JqZWN0X3VucmVmKHJlcXVlc3QpOwotICAgIGdfYXNzZXJ0X2Nt
cGludChHX09CSkVDVChtZXNzYWdlKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0gICAgZ19vYmplY3Rf
dW5yZWYobWVzc2FnZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfbmV0d29ya19yZXF1ZXN0X3By
b3BlcnRpZXMoKQotewotICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0OwotICAgIFNv
dXBNZXNzYWdlKiBtZXNzYWdlOwotICAgIGdjaGFyKiBzb3VwVVJJOwotCi0gICAgLyogVGVzdCBV
UkkgaXMgc2V0IGNvcnJlY3RseSB3aGVuIGNyZWF0aW5nIHdpdGggVVJJICovCi0gICAgcmVxdWVz
dCA9IHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfbmV3KCJodHRwOi8vZGViaWFuLm9yZy8iKTsKLSAg
ICBnX2Fzc2VydChXRUJLSVRfSVNfTkVUV09SS19SRVFVRVNUKHJlcXVlc3QpKTsKLSAgICBnX2Fz
c2VydF9jbXBzdHIod2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpLCA9PSwg
Imh0dHA6Ly9kZWJpYW4ub3JnLyIpOwotICAgIGdfb2JqZWN0X3VucmVmKHJlcXVlc3QpOwotCi0g
ICAgLyogVGVzdCBVUkkgaXMgc2V0IGNvcnJlY3RseSB3aGVuIGNyZWF0aW5nIHdpdGggTWVzc2Fn
ZSAqLwotICAgIG1lc3NhZ2UgPSBzb3VwX21lc3NhZ2VfbmV3KCJHRVQiLCAiaHR0cDovL2RlYmlh
bi5vcmcvIik7Ci0gICAgcmVxdWVzdCA9IFdFQktJVF9ORVRXT1JLX1JFUVVFU1QoZ19vYmplY3Rf
bmV3KFdFQktJVF9UWVBFX05FVFdPUktfUkVRVUVTVCwgIm1lc3NhZ2UiLCBtZXNzYWdlLCBOVUxM
KSk7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0lTX05FVFdPUktfUkVRVUVTVChyZXF1ZXN0KSk7Ci0g
ICAgZ19vYmplY3RfdW5yZWYobWVzc2FnZSk7Ci0KLSAgICBtZXNzYWdlID0gd2Via2l0X25ldHdv
cmtfcmVxdWVzdF9nZXRfbWVzc2FnZShyZXF1ZXN0KTsKLSAgICBzb3VwVVJJID0gc291cF91cmlf
dG9fc3RyaW5nKHNvdXBfbWVzc2FnZV9nZXRfdXJpKG1lc3NhZ2UpLCBGQUxTRSk7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKHNvdXBVUkksID09LCAiaHR0cDovL2RlYmlhbi5vcmcvIik7Ci0gICAgZ19m
cmVlKHNvdXBVUkkpOwotCi0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF9uZXR3b3JrX3JlcXVl
c3RfZ2V0X3VyaShyZXF1ZXN0KSwgPT0sICJodHRwOi8vZGViaWFuLm9yZy8iKTsKLSAgICBnX29i
amVjdF91bnJlZihyZXF1ZXN0KTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2
KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdfdGVz
dF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0X2FkZF9m
dW5jKCIvd2Via2l0L25ldHdvcmtyZXF1ZXN0L2NyZWF0ZWRlc3Ryb3kiLCB0ZXN0X25ldHdvcmtf
cmVxdWVzdF9jcmVhdGVfZGVzdHJveSk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L25l
dHdvcmtyZXF1ZXN0L3Byb3BlcnRpZXMiLCB0ZXN0X25ldHdvcmtfcmVxdWVzdF9wcm9wZXJ0aWVz
KTsKLSAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RuZXR3b3JrcmVzcG9uc2UuYyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3RuZXR3b3JrcmVzcG9uc2UuYwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgwNmFhMTExZmU4YjYyNzkxNzYyZDJmYzM5MzI1ZGE1
N2RlYTdhYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0bmV0d29ya3Jlc3BvbnNlLmMK
KysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5
IEd1c3Rhdm8gTm9yb25oYSBTaWx2YQotICogQ29weXJpZ2h0IChDKSAyMDA5IENvbGxhYm9yYSBM
dGQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHVu
aXN0ZC5oPgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgotI2lu
Y2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx3ZWJraXQv
d2Via2l0Lmg+Ci0KLXN0YXRpYyB2b2lkIHRlc3RfbmV0d29ya19yZXNwb25zZV9jcmVhdGVfZGVz
dHJveSgpCi17Ci0gICAgV2ViS2l0TmV0d29ya1Jlc3BvbnNlKiByZXNwb25zZTsKLSAgICBTb3Vw
TWVzc2FnZSogbWVzc2FnZTsKLQotICAgIC8qIFRlc3QgY3JlYXRpb24gd2l0aCBVUkkgKi8KLSAg
ICByZXNwb25zZSA9IFdFQktJVF9ORVRXT1JLX1JFU1BPTlNFKGdfb2JqZWN0X25ldyhXRUJLSVRf
VFlQRV9ORVRXT1JLX1JFU1BPTlNFLCAidXJpIiwgImh0dHA6Ly9kZWJpYW4ub3JnLyIsIE5VTEwp
KTsKLSAgICBnX2Fzc2VydChXRUJLSVRfSVNfTkVUV09SS19SRVNQT05TRShyZXNwb25zZSkpOwot
ICAgIG1lc3NhZ2UgPSB3ZWJraXRfbmV0d29ya19yZXNwb25zZV9nZXRfbWVzc2FnZShyZXNwb25z
ZSk7Ci0gICAgZ19hc3NlcnQoIW1lc3NhZ2UpOwotICAgIGdfb2JqZWN0X3VucmVmKHJlc3BvbnNl
KTsKLQotICAgIC8qIFRlc3QgY3JlYXRpb24gd2l0aCBTb3VwTWVzc2FnZSAqLwotICAgIG1lc3Nh
Z2UgPSBzb3VwX21lc3NhZ2VfbmV3KCJHRVQiLCAiaHR0cDovL2RlYmlhbi5vcmcvIik7Ci0gICAg
cmVzcG9uc2UgPSBXRUJLSVRfTkVUV09SS19SRVNQT05TRShnX29iamVjdF9uZXcoV0VCS0lUX1RZ
UEVfTkVUV09SS19SRVNQT05TRSwgIm1lc3NhZ2UiLCBtZXNzYWdlLCBOVUxMKSk7Ci0gICAgZ19h
c3NlcnQoV0VCS0lUX0lTX05FVFdPUktfUkVTUE9OU0UocmVzcG9uc2UpKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoR19PQkpFQ1QobWVzc2FnZSktPnJlZl9jb3VudCwgPT0sIDIpOwotICAgIGdfb2Jq
ZWN0X3VucmVmKHJlc3BvbnNlKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QobWVzc2Fn
ZSktPnJlZl9jb3VudCwgPT0sIDEpOwotICAgIGdfb2JqZWN0X3VucmVmKG1lc3NhZ2UpOwotCi0g
ICAgLyogVGVzdCBjcmVhdGlvbiB3aXRoIGJvdGggU291cE1lc3NhZ2UgYW5kIFVSSSAqLwotICAg
IG1lc3NhZ2UgPSBzb3VwX21lc3NhZ2VfbmV3KCJHRVQiLCAiaHR0cDovL2RlYmlhbi5vcmcvIik7
Ci0gICAgcmVzcG9uc2UgPSBXRUJLSVRfTkVUV09SS19SRVNQT05TRShnX29iamVjdF9uZXcoV0VC
S0lUX1RZUEVfTkVUV09SS19SRVNQT05TRSwgIm1lc3NhZ2UiLCBtZXNzYWdlLCAidXJpIiwgImh0
dHA6Ly9nbm9tZS5vcmcvIiwgTlVMTCkpOwotICAgIGdfYXNzZXJ0KFdFQktJVF9JU19ORVRXT1JL
X1JFU1BPTlNFKHJlc3BvbnNlKSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKG1lc3Nh
Z2UpLT5yZWZfY291bnQsID09LCAyKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X25ldHdv
cmtfcmVzcG9uc2VfZ2V0X3VyaShyZXNwb25zZSksID09LCAiaHR0cDovL2dub21lLm9yZy8iKTsK
LSAgICBnX29iamVjdF91bnJlZihyZXNwb25zZSk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JK
RUNUKG1lc3NhZ2UpLT5yZWZfY291bnQsID09LCAxKTsKLSAgICBnX29iamVjdF91bnJlZihtZXNz
YWdlKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9uZXR3b3JrX3Jlc3BvbnNlX3Byb3BlcnRpZXMo
KQotewotICAgIFdlYktpdE5ldHdvcmtSZXNwb25zZSogcmVzcG9uc2U7Ci0gICAgU291cE1lc3Nh
Z2UqIG1lc3NhZ2U7Ci0gICAgZ2NoYXIqIHNvdXBVUkk7Ci0KLSAgICAvKiBUZXN0IFVSSSBpcyBz
ZXQgY29ycmVjdGx5IHdoZW4gY3JlYXRpbmcgd2l0aCBVUkkgKi8KLSAgICByZXNwb25zZSA9IHdl
YmtpdF9uZXR3b3JrX3Jlc3BvbnNlX25ldygiaHR0cDovL2RlYmlhbi5vcmcvIik7Ci0gICAgZ19h
c3NlcnQoV0VCS0lUX0lTX05FVFdPUktfUkVTUE9OU0UocmVzcG9uc2UpKTsKLSAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0X3VyaShyZXNwb25zZSksID09LCAi
aHR0cDovL2RlYmlhbi5vcmcvIik7Ci0gICAgZ19vYmplY3RfdW5yZWYocmVzcG9uc2UpOwotCi0g
ICAgLyogVGVzdCBVUkkgaXMgc2V0IGNvcnJlY3RseSB3aGVuIGNyZWF0aW5nIHdpdGggTWVzc2Fn
ZSAqLwotICAgIG1lc3NhZ2UgPSBzb3VwX21lc3NhZ2VfbmV3KCJHRVQiLCAiaHR0cDovL2RlYmlh
bi5vcmcvIik7Ci0gICAgcmVzcG9uc2UgPSBXRUJLSVRfTkVUV09SS19SRVNQT05TRShnX29iamVj
dF9uZXcoV0VCS0lUX1RZUEVfTkVUV09SS19SRVNQT05TRSwgIm1lc3NhZ2UiLCBtZXNzYWdlLCBO
VUxMKSk7Ci0gICAgZ19hc3NlcnQoV0VCS0lUX0lTX05FVFdPUktfUkVTUE9OU0UocmVzcG9uc2Up
KTsKLSAgICBnX29iamVjdF91bnJlZihtZXNzYWdlKTsKLQotICAgIG1lc3NhZ2UgPSB3ZWJraXRf
bmV0d29ya19yZXNwb25zZV9nZXRfbWVzc2FnZShyZXNwb25zZSk7Ci0gICAgc291cFVSSSA9IHNv
dXBfdXJpX3RvX3N0cmluZyhzb3VwX21lc3NhZ2VfZ2V0X3VyaShtZXNzYWdlKSwgRkFMU0UpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cihzb3VwVVJJLCA9PSwgImh0dHA6Ly9kZWJpYW4ub3JnLyIpOwot
ICAgIGdfZnJlZShzb3VwVVJJKTsKLQotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfbmV0d29y
a19yZXNwb25zZV9nZXRfdXJpKHJlc3BvbnNlKSwgPT0sICJodHRwOi8vZGViaWFuLm9yZy8iKTsK
LSAgICBnX29iamVjdF91bnJlZihyZXNwb25zZSk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBj
aGFyKiogYXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0K
LSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotICAgIGdf
dGVzdF9hZGRfZnVuYygiL3dlYmtpdC9uZXR3b3JrcmVzcG9uc2UvY3JlYXRlZGVzdHJveSIsIHRl
c3RfbmV0d29ya19yZXNwb25zZV9jcmVhdGVfZGVzdHJveSk7Ci0gICAgZ190ZXN0X2FkZF9mdW5j
KCIvd2Via2l0L25ldHdvcmtyZXNwb25zZS9wcm9wZXJ0aWVzIiwgdGVzdF9uZXR3b3JrX3Jlc3Bv
bnNlX3Byb3BlcnRpZXMpOwotICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwotfQpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYmJhY2tmb3J3YXJk
bGlzdC5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYmJhY2tm
b3J3YXJkbGlzdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzgyZDQwNzA0MTgy
ZmZmZWNkYjc1Y2YwODRkMWE0NmFlM2MwZDY1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rl
c3R3ZWJiYWNrZm9yd2FyZGxpc3QuYworKysgL2Rldi9udWxsCkBAIC0xLDMyNiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgot
I2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2Vi
X2hpc3RvcnlfaXRlbV9saWZldGltZSh2b2lkKQotewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXc7Ci0gICAgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3Q7Ci0gICAg
V2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGN1cnJlbnRJdGVtOwotICAgIFdlYktpdFdlYkhpc3RvcnlJ
dGVtKiBmb3J3YXJkSXRlbTsKLSAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogYmFja0l0ZW07Ci0g
ICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIG50aEl0ZW07Ci0gICAgV2ViS2l0V2ViSGlzdG9yeUl0
ZW0qIGl0ZW0xOwotICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBpdGVtMjsKLSAgICBXZWJLaXRX
ZWJIaXN0b3J5SXRlbSogaXRlbTM7Ci0gICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0ZW00Owot
ICAgIEdMaXN0KiBiYWNrTGlzdCA9IE5VTEw7Ci0gICAgR0xpc3QqIGZvcndhcmRMaXN0ID0gTlVM
TDsKLSAgICBnX3Rlc3RfYnVnKCIxOTg5OCIpOwotCi0gICAgd2ViVmlldyA9IFdFQktJVF9XRUJf
VklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZp
ZXcpOwotICAgIGJhY2tGb3J3YXJkTGlzdCA9IHdlYmtpdF93ZWJfdmlld19nZXRfYmFja19mb3J3
YXJkX2xpc3Qod2ViVmlldyk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKGJhY2tGb3J3
YXJkTGlzdCktPnJlZl9jb3VudCwgPT0sIDEpOwotCi0gICAgLyogYWRkIHRlc3QgaXRlbXMgKi8K
LSAgICBpdGVtMSA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6
Ly9leGFtcGxlLmNvbS8xLyIsICJTaXRlIDEiKTsKLSAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2Fy
ZF9saXN0X2FkZF9pdGVtKGJhY2tGb3J3YXJkTGlzdCwgaXRlbTEpOwotICAgIGdfb2JqZWN0X3Vu
cmVmKGl0ZW0xKTsKLQotICAgIGl0ZW0yID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dp
dGhfZGF0YSgiaHR0cDovL2V4YW1wbGUuY29tLzIvIiwgIlNpdGUgMiIpOwotICAgIHdlYmtpdF93
ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0oYmFja0ZvcndhcmRMaXN0LCBpdGVtMik7Ci0g
ICAgZ19vYmplY3RfdW5yZWYoaXRlbTIpOwotCi0gICAgaXRlbTMgPSB3ZWJraXRfd2ViX2hpc3Rv
cnlfaXRlbV9uZXdfd2l0aF9kYXRhKCJodHRwOi8vZXhhbXBsZS5jb20vMy8iLCAiU2l0ZSAzIik7
Ci0gICAgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbShiYWNrRm9yd2FyZExp
c3QsIGl0ZW0zKTsKLSAgICBnX29iamVjdF91bnJlZihpdGVtMyk7Ci0KLSAgICBpdGVtNCA9IHdl
YmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxlLmNvbS80
LyIsICJTaXRlIDQiKTsKLSAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2FkZF9pdGVt
KGJhY2tGb3J3YXJkTGlzdCwgaXRlbTQpOwotICAgIGdfb2JqZWN0X3VucmVmKGl0ZW00KTsKLQot
ICAgIC8qIG1ha2Ugc3VyZSB0aGVzZSBmdW5jdGlvbnMgZG9uJ3QgYWRkIHVubmVjZXNzYXJ5IHJl
ZiB0byB0aGUgaGlzdG9yeSBpdGVtICovCi0gICAgYmFja0l0ZW0gPSB3ZWJraXRfd2ViX2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0oYmFja0ZvcndhcmRMaXN0KTsKLSAgICBnX29iamVj
dF9yZWYoYmFja0l0ZW0pOwotICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChiYWNrSXRlbSkt
PnJlZl9jb3VudCwgPT0sIDIpOwotICAgIGdfb2JqZWN0X3VucmVmKGJhY2tJdGVtKTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoYmFja0l0ZW0pLT5yZWZfY291bnQsID09LCAxKTsKLQot
ICAgIGN1cnJlbnRJdGVtID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVu
dF9pdGVtKGJhY2tGb3J3YXJkTGlzdCk7Ci0gICAgZ19vYmplY3RfcmVmKGN1cnJlbnRJdGVtKTsK
LSAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoY3VycmVudEl0ZW0pLT5yZWZfY291bnQsID09
LCAyKTsKLSAgICBnX29iamVjdF91bnJlZihjdXJyZW50SXRlbSk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KEdfT0JKRUNUKGN1cnJlbnRJdGVtKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0KLSAgICB3ZWJr
aXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dvX3RvX2l0ZW0oYmFja0ZvcndhcmRMaXN0LCBpdGVt
Mik7Ci0gICAgZm9yd2FyZEl0ZW0gPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9m
b3J3YXJkX2l0ZW0oYmFja0ZvcndhcmRMaXN0KTsKLSAgICBnX29iamVjdF9yZWYoZm9yd2FyZEl0
ZW0pOwotICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChmb3J3YXJkSXRlbSktPnJlZl9jb3Vu
dCwgPT0sIDIpOwotICAgIGdfb2JqZWN0X3VucmVmKGZvcndhcmRJdGVtKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoR19PQkpFQ1QoZm9yd2FyZEl0ZW0pLT5yZWZfY291bnQsID09LCAxKTsKLQotICAg
IG50aEl0ZW0gPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbShiYWNr
Rm9yd2FyZExpc3QsIDEpOwotICAgIGdfb2JqZWN0X3JlZihudGhJdGVtKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQoR19PQkpFQ1QobnRoSXRlbSktPnJlZl9jb3VudCwgPT0sIDIpOwotICAgIGdfb2Jq
ZWN0X3VucmVmKG50aEl0ZW0pOwotICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChudGhJdGVt
KS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0KLSAgICBiYWNrTGlzdCA9IHdlYmtpdF93ZWJfYmFja19m
b3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGlzdF93aXRoX2xpbWl0KGJhY2tGb3J3YXJkTGlzdCwgNSk7
Ci0gICAgZm9yICg7IGJhY2tMaXN0OyBiYWNrTGlzdCA9IGJhY2tMaXN0LT5uZXh0KQotICAgICAg
ICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoYmFja0xpc3QtPmRhdGEpLT5yZWZfY291bnQsID09
LCAxKTsKLQotICAgIGZvcndhcmRMaXN0ID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9n
ZXRfZm9yd2FyZF9saXN0X3dpdGhfbGltaXQoYmFja0ZvcndhcmRMaXN0LCA1KTsKLSAgICBmb3Ig
KDsgZm9yd2FyZExpc3Q7IGZvcndhcmRMaXN0ID0gZm9yd2FyZExpc3QtPm5leHQpCi0gICAgICAg
IGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChmb3J3YXJkTGlzdC0+ZGF0YSktPnJlZl9jb3VudCwg
PT0sIDEpOwotCi0gICAgZ19saXN0X2ZyZWUoZm9yd2FyZExpc3QpOwotICAgIGdfbGlzdF9mcmVl
KGJhY2tMaXN0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoaXRlbTEpLT5yZWZfY291
bnQsID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoaXRlbTIpLT5yZWZfY291
bnQsID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoaXRlbTMpLT5yZWZfY291
bnQsID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoaXRlbTQpLT5yZWZfY291
bnQsID09LCAxKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1QoYmFja0ZvcndhcmRMaXN0
KS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Ci19Ci0K
LXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9vcmRlcih2b2lk
KQotewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7Ci0gICAgV2ViS2l0V2ViQmFja0Zvcndh
cmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3Q7Ci0gICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0
ZW0xOwotICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBpdGVtMjsKLSAgICBXZWJLaXRXZWJIaXN0
b3J5SXRlbSogaXRlbTM7Ci0gICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0ZW00OwotICAgIFdl
YktpdFdlYkhpc3RvcnlJdGVtKiBjdXJyZW50SXRlbTsKLSAgICBHTGlzdCogYmFja0xpc3QgPSBO
VUxMOwotICAgIEdMaXN0KiBmb3J3YXJkTGlzdCA9IE5VTEw7Ci0gICAgZ190ZXN0X2J1ZygiMjI2
OTQiKTsKLQotICAgIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25l
dygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLQotICAgIHdlYmtpdF93ZWJf
dmlld19zZXRfbWFpbnRhaW5zX2JhY2tfZm9yd2FyZF9saXN0KHdlYlZpZXcsIFRSVUUpOwotICAg
IHdlYkJhY2tGb3J3YXJkTGlzdCA9IHdlYmtpdF93ZWJfdmlld19nZXRfYmFja19mb3J3YXJkX2xp
c3Qod2ViVmlldyk7Ci0gICAgZ19hc3NlcnQod2ViQmFja0ZvcndhcmRMaXN0KTsKLQotICAgIC8v
IENoZWNrIHRoYXQgdGhlcmUgaXMgbm8gaXRlbS4KLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCkpOwot
ICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3
YXJkX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnRfY21w
aW50KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGVuZ3RoKHdlYkJhY2tG
b3J3YXJkTGlzdCksID09LCAwKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9n
b19mb3J3YXJkKHdlYlZpZXcpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9n
b19iYWNrKHdlYlZpZXcpKTsKLQotICAgIC8vIEFkZCBhIG5ldyBpdGVtcwotICAgIGl0ZW0xID0g
d2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YSgiaHR0cDovL2V4YW1wbGUuY29t
LzEvIiwgIlNpdGUgMSIpOwotICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0
ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBpdGVtMSk7Ci0gICAgZ19vYmplY3RfdW5yZWYoaXRlbTEp
OwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY29udGFpbnNfaXRl
bSh3ZWJCYWNrRm9yd2FyZExpc3QsIGl0ZW0xKSk7Ci0KLSAgICBpdGVtMiA9IHdlYmtpdF93ZWJf
aGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxlLmNvbS8yLyIsICJTaXRl
IDIiKTsKLSAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2FkZF9pdGVtKHdlYkJhY2tG
b3J3YXJkTGlzdCwgaXRlbTIpOwotICAgIGdfb2JqZWN0X3VucmVmKGl0ZW0yKTsKLSAgICBnX2Fz
c2VydCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NvbnRhaW5zX2l0ZW0od2ViQmFja0Zv
cndhcmRMaXN0LCBpdGVtMikpOwotCi0gICAgaXRlbTMgPSB3ZWJraXRfd2ViX2hpc3RvcnlfaXRl
bV9uZXdfd2l0aF9kYXRhKCJodHRwOi8vZXhhbXBsZS5jb20vMy8iLCAiU2l0ZSAzIik7Ci0gICAg
d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3Qs
IGl0ZW0zKTsKLSAgICBnX29iamVjdF91bnJlZihpdGVtMyk7Ci0gICAgZ19hc3NlcnQod2Via2l0
X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwg
aXRlbTMpKTsKLQotICAgIGl0ZW00ID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhf
ZGF0YSgiaHR0cDovL2V4YW1wbGUuY29tLzQvIiwgIlNpdGUgNCIpOwotICAgIHdlYmtpdF93ZWJf
YmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBpdGVtNCk7Ci0g
ICAgZ19vYmplY3RfdW5yZWYoaXRlbTQpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfYmFja19m
b3J3YXJkX2xpc3RfY29udGFpbnNfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QsIGl0ZW00KSk7Ci0K
LSAgICAvLyBjaGVjayB0aGUgYmFjayBsaXN0IG9yZGVyCi0gICAgYmFja0xpc3QgPSB3ZWJraXRf
d2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3Rfd2l0aF9saW1pdCh3ZWJCYWNrRm9y
d2FyZExpc3QsIDUpOwotICAgIGdfYXNzZXJ0KGJhY2tMaXN0KTsKLQotICAgIGN1cnJlbnRJdGVt
ID0gV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0oYmFja0xpc3QtPmRhdGEpOwotICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKGN1cnJlbnRJdGVtKSwgPT0s
ICJodHRwOi8vZXhhbXBsZS5jb20vMy8iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dl
Yl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKGN1cnJlbnRJdGVtKSwgPT0sICJTaXRlIDMiKTsKLSAg
ICBiYWNrTGlzdCA9IGJhY2tMaXN0LT5uZXh0OwotCi0gICAgY3VycmVudEl0ZW0gPSBXRUJLSVRf
V0VCX0hJU1RPUllfSVRFTShiYWNrTGlzdC0+ZGF0YSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdl
YmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoY3VycmVudEl0ZW0pLCA9PSwgImh0dHA6Ly9l
eGFtcGxlLmNvbS8yLyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3Rvcnlf
aXRlbV9nZXRfdGl0bGUoY3VycmVudEl0ZW0pLCA9PSwgIlNpdGUgMiIpOwotICAgIGJhY2tMaXN0
ID0gYmFja0xpc3QtPm5leHQ7Ci0KLSAgICBjdXJyZW50SXRlbSA9IFdFQktJVF9XRUJfSElTVE9S
WV9JVEVNKGJhY2tMaXN0LT5kYXRhKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9o
aXN0b3J5X2l0ZW1fZ2V0X3VyaShjdXJyZW50SXRlbSksID09LCAiaHR0cDovL2V4YW1wbGUuY29t
LzEvIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90
aXRsZShjdXJyZW50SXRlbSksID09LCAiU2l0ZSAxIik7Ci0gICAgZ19saXN0X2ZyZWUoYmFja0xp
c3QpOwotCi0gICAgLy8gY2hlY2sgdGhlIGZvcndhcmQgbGlzdCBvcmRlcgotICAgIGdfYXNzZXJ0
KHdlYmtpdF93ZWJfdmlld19nb190b19iYWNrX2ZvcndhcmRfaXRlbSh3ZWJWaWV3LCBpdGVtMSkp
OwotICAgIGZvcndhcmRMaXN0ID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9y
d2FyZF9saXN0X3dpdGhfbGltaXQod2ViQmFja0ZvcndhcmRMaXN0LDUpOwotICAgIGdfYXNzZXJ0
KGZvcndhcmRMaXN0KTsKLQotICAgIGN1cnJlbnRJdGVtID0gV0VCS0lUX1dFQl9ISVNUT1JZX0lU
RU0oZm9yd2FyZExpc3QtPmRhdGEpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hp
c3RvcnlfaXRlbV9nZXRfdXJpKGN1cnJlbnRJdGVtKSwgPT0sICJodHRwOi8vZXhhbXBsZS5jb20v
NC8iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3Rp
dGxlKGN1cnJlbnRJdGVtKSwgPT0sICJTaXRlIDQiKTsKLSAgICBmb3J3YXJkTGlzdCA9IGZvcndh
cmRMaXN0LT5uZXh0OwotCi0gICAgY3VycmVudEl0ZW0gPSBXRUJLSVRfV0VCX0hJU1RPUllfSVRF
TShmb3J3YXJkTGlzdC0+ZGF0YSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlz
dG9yeV9pdGVtX2dldF91cmkoY3VycmVudEl0ZW0pLCA9PSwgImh0dHA6Ly9leGFtcGxlLmNvbS8z
LyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdGl0
bGUoY3VycmVudEl0ZW0pLCA9PSwgIlNpdGUgMyIpOwotICAgIGZvcndhcmRMaXN0ID0gZm9yd2Fy
ZExpc3QtPm5leHQ7Ci0KLSAgICBjdXJyZW50SXRlbSA9IFdFQktJVF9XRUJfSElTVE9SWV9JVEVN
KGZvcndhcmRMaXN0LT5kYXRhKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0
b3J5X2l0ZW1fZ2V0X3VyaShjdXJyZW50SXRlbSksID09LCAiaHR0cDovL2V4YW1wbGUuY29tLzIv
Iik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRs
ZShjdXJyZW50SXRlbSksID09LCAiU2l0ZSAyIik7Ci0KLSAgICBnX2xpc3RfZnJlZShmb3J3YXJk
TGlzdCk7Ci0gICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3Rfd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9hZGRfaXRlbSh2b2lkKQotewotICAgIFdl
YktpdFdlYlZpZXcqIHdlYlZpZXc7Ci0gICAgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJC
YWNrRm9yd2FyZExpc3Q7Ci0gICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGFkZEl0ZW0xOwotICAg
IFdlYktpdFdlYkhpc3RvcnlJdGVtKiBhZGRJdGVtMjsKLSAgICBXZWJLaXRXZWJIaXN0b3J5SXRl
bSogYmFja0l0ZW07Ci0gICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGN1cnJlbnRJdGVtOwotICAg
IGdfdGVzdF9idWcoIjIyOTg4Iik7Ci0KLSAgICB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdl
YmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0K
LSAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X21haW50YWluc19iYWNrX2ZvcndhcmRfbGlzdCh3ZWJW
aWV3LCBUUlVFKTsKLSAgICB3ZWJCYWNrRm9yd2FyZExpc3QgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2JhY2tfZm9yd2FyZF9saXN0KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0KHdlYkJhY2tGb3J3YXJk
TGlzdCk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IHRoZXJlIGlzIG5vIGl0ZW0uCi0gICAgZ19hc3Nl
cnQoIXdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSh3ZWJCYWNr
Rm9yd2FyZExpc3QpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOwot
ICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNr
X2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnQoIXdlYmtp
dF93ZWJfdmlld19jYW5fZ29fZm9yd2FyZCh3ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtp
dF93ZWJfdmlld19jYW5fZ29fYmFjayh3ZWJWaWV3KSk7Ci0KLSAgICAvLyBBZGQgYSBuZXcgaXRl
bQotICAgIGFkZEl0ZW0xID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YSgi
aHR0cDovL2V4YW1wbGUuY29tLyIsICJBZGRlZCBzaXRlIik7Ci0gICAgd2Via2l0X3dlYl9iYWNr
X2ZvcndhcmRfbGlzdF9hZGRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QsIGFkZEl0ZW0xKTsKLSAg
ICBnX29iamVjdF91bnJlZihhZGRJdGVtMSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl9iYWNr
X2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgYWRkSXRlbTEp
KTsKLQotICAgIC8vIENoZWNrIHRoYXQgdGhlIGFkZGVkIGl0ZW0gaXMgdGhlIGN1cnJlbnQgaXRl
bS4KLSAgICBjdXJyZW50SXRlbSA9IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1
cnJlbnRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QpOwotICAgIGdfYXNzZXJ0KGN1cnJlbnRJdGVt
KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRf
Zm9yd2FyZF9sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOwotICAgIGdfYXNzZXJ0
X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xlbmd0aCh3ZWJC
YWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19j
YW5fZ29fZm9yd2FyZCh3ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19j
YW5fZ29fYmFjayh3ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlz
dG9yeV9pdGVtX2dldF91cmkoY3VycmVudEl0ZW0pLCA9PSwgImh0dHA6Ly9leGFtcGxlLmNvbS8i
KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxl
KGN1cnJlbnRJdGVtKSwgPT0sICJBZGRlZCBzaXRlIik7Ci0KLSAgICAvLyBBZGQgYW5vdGhlciBp
dGVtLgotICAgIGFkZEl0ZW0yID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0
YSgiaHR0cDovL2V4YW1wbGUuY29tLzIvIiwgIkFkZGVkIHNpdGUgMiIpOwotICAgIHdlYmtpdF93
ZWJfYmFja19mb3J3YXJkX2xpc3RfYWRkX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBhZGRJdGVt
Mik7Ci0gICAgZ19vYmplY3RfdW5yZWYoYWRkSXRlbTIpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93
ZWJfYmFja19mb3J3YXJkX2xpc3RfY29udGFpbnNfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QsIGFk
ZEl0ZW0yKSk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IHRoZSBhZGRlZCBpdGVtIGlzIG5ldyBjdXJy
ZW50IGl0ZW0uCi0gICAgY3VycmVudEl0ZW0gPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0
X2dldF9jdXJyZW50X2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0KTsKLSAgICBnX2Fzc2VydChjdXJy
ZW50SXRlbSk7Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xp
c3RfZ2V0X2ZvcndhcmRfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlzdCksID09LCAwKTsKLSAgICBn
X2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19sZW5n
dGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2Vi
X3ZpZXdfY2FuX2dvX2ZvcndhcmQod2ViVmlldykpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJf
dmlld19jYW5fZ29fYmFjayh3ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93
ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoY3VycmVudEl0ZW0pLCA9PSwgImh0dHA6Ly9leGFtcGxl
LmNvbS8yLyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9n
ZXRfdGl0bGUoY3VycmVudEl0ZW0pLCA9PSwgIkFkZGVkIHNpdGUgMiIpOwotCi0gICAgYmFja0l0
ZW0gPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0od2ViQmFja0Zv
cndhcmRMaXN0KTsKLSAgICBnX2Fzc2VydChiYWNrSXRlbSk7Ci0gICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoYmFja0l0ZW0pLCA9PSwgImh0dHA6Ly9l
eGFtcGxlLmNvbS8iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5X2l0
ZW1fZ2V0X3RpdGxlKGJhY2tJdGVtKSwgPT0sICJBZGRlZCBzaXRlIik7Ci0KLSAgICAvLyBHbyB0
byB0aGUgZmlyc3QgYWRkZWQgaXRlbS4KLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ29f
dG9fYmFja19mb3J3YXJkX2l0ZW0od2ViVmlldywgYWRkSXRlbTEpKTsKLSAgICBnX2Fzc2VydF9j
bXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGgod2Vi
QmFja0ZvcndhcmRMaXN0KSwgPT0sIDEpOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2Vi
X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9
PSwgMCk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHdlYlZp
ZXcpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHdlYlZpZXcp
KTsKLQotICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0
X3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY2xlYXIodm9pZCkKLXsKLSAgICBXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3OwotICAgIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0Zv
cndhcmRMaXN0OwotICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBhZGRJdGVtOwotICAgIGdfdGVz
dF9idWcoIjM2MTczIik7Ci0KLSAgICB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93
ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7Ci0KLSAgICB3
ZWJCYWNrRm9yd2FyZExpc3QgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0
KHdlYlZpZXcpOwotICAgIGdfYXNzZXJ0KHdlYkJhY2tGb3J3YXJkTGlzdCk7Ci0KLSAgICAvLyBD
aGVjayB0aGF0IHRoZXJlIGlzIG5vIGl0ZW0uCi0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93
ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGVuZ3RoKHdlYkJhY2tGb3J3YXJkTGlz
dCksID09LCAwKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRf
bGlzdF9nZXRfYmFja19sZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOwotICAgIGdf
YXNzZXJ0KCF3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0od2Vi
QmFja0ZvcndhcmRMaXN0KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29f
Zm9yd2FyZCh3ZWJWaWV3KSk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19jYW5fZ29f
YmFjayh3ZWJWaWV3KSk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IGNsZWFyaW5nIHRoZSBlbXB0eSBs
aXN0IGRvZXMgbm90IG1vZGlmeSBjb3VudGVycwotICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJk
X2xpc3RfY2xlYXIod2ViQmFja0ZvcndhcmRMaXN0KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQod2Vi
a2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGgod2ViQmFja0Zvcndh
cmRMaXN0KSwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX2JhY2tfZm9y
d2FyZF9saXN0X2dldF9iYWNrX2xlbmd0aCh3ZWJCYWNrRm9yd2FyZExpc3QpLCA9PSwgMCk7Ci0g
ICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRl
bSh3ZWJCYWNrRm9yd2FyZExpc3QpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nh
bl9nb19mb3J3YXJkKHdlYlZpZXcpKTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2Nh
bl9nb19iYWNrKHdlYlZpZXcpKTsKLQotICAgIC8vIEFkZCBhIG5ldyBpdGVtCi0gICAgYWRkSXRl
bSA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGEoImh0dHA6Ly9leGFtcGxl
LmNvbS8iLCAiQWRkZWQgc2l0ZSIpOwotICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3Rf
YWRkX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBhZGRJdGVtKTsKLSAgICBnX29iamVjdF91bnJl
ZihhZGRJdGVtKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2Nv
bnRhaW5zX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBhZGRJdGVtKSk7Ci0KLSAgICAvLyBDaGVj
ayB0aGF0IGFmdGVyIGNsZWFyaW5nIHRoZSBsaXN0IHRoZSBhZGRlZCBpdGVtIGlzIG5vIGxvbmdl
ciBpbiB0aGUgbGlzdAotICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY2xlYXIod2Vi
QmFja0ZvcndhcmRMaXN0KTsKLSAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRf
bGlzdF9jb250YWluc19pdGVtKHdlYkJhY2tGb3J3YXJkTGlzdCwgYWRkSXRlbSkpOwotCi0gICAg
Ly8gQ2hlY2sgdGhhdCBhZnRlciBjbGVhcmluZyBpdCwgdGhlIGxpc3QgaXMgZW1wdHkKLSAgICBn
X2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9s
ZW5ndGgod2ViQmFja0ZvcndhcmRMaXN0KSwgPT0sIDApOwotICAgIGdfYXNzZXJ0X2NtcGludCh3
ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xlbmd0aCh3ZWJCYWNrRm9yd2Fy
ZExpc3QpLCA9PSwgMCk7Ci0gICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xp
c3RfZ2V0X2N1cnJlbnRfaXRlbSh3ZWJCYWNrRm9yd2FyZExpc3QpKTsKLSAgICBnX2Fzc2VydCgh
d2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKHdlYlZpZXcpKTsKLSAgICBnX2Fzc2VydCgh
d2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKHdlYlZpZXcpKTsKLQotICAgIGdfb2JqZWN0X3Vu
cmVmKHdlYlZpZXcpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0g
ICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgZ190ZXN0X2J1Z19i
YXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93
ZWJraXQvd2ViYmFja2ZvcndhcmRsaXN0L2FkZF9pdGVtIiwgdGVzdF93ZWJraXRfd2ViX2JhY2tf
Zm9yd2FyZF9saXN0X2FkZF9pdGVtKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vi
YmFja2ZvcndhcmRsaXN0L2xpc3Rfb3JkZXIiLCB0ZXN0X3dlYmtpdF93ZWJfYmFja19mb3J3YXJk
X2xpc3Rfb3JkZXIpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJoaXN0b3J5aXRl
bS9saWZldGltZSIsIHRlc3Rfd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbGlmZXRpbWUpOwotICAg
IGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJiYWNrZm9yd2FyZGxpc3QvY2xlYXIiLCB0ZXN0
X3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY2xlYXIpOwotICAgIHJldHVybiBnX3Rlc3Rf
cnVuICgpOwotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRH
dGsvdGVzdHdlYmRhdGFzb3VyY2UuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrL3Rlc3R3ZWJkYXRhc291cmNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1
NjYyNTc0NDhiYzc3ZGYzNWNiNGFjMzQwYWU2YWJhMDM4OTI3YjkuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHdGsvdGVzdHdlYmRhdGFzb3VyY2UuYworKysgL2Rldi9udWxsCkBAIC0xLDI0MiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBNaWNoYWVsIEFsb256bwotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNp
bmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0KLXN0YXRpYyBjb25zdCBnc2hvcnQgZGVmYXVsdFRp
bWVvdXQgPSAxMDsKLWd1aW50IHdhaXRUaW1lcjsKLWdib29sZWFuIHNob3VsZFdhaXQ7Ci0KLXR5
cGVkZWYgc3RydWN0IHsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OwotICAgIFdlYktpdFdl
YkZyYW1lKiBtYWluRnJhbWU7Ci19IFdlYkRhdGFTb3VyY2VGaXh0dXJlOwotCi1zdGF0aWMgdm9p
ZCB0ZXN0X3dlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X2luaXRpYWxfcmVxdWVzdCgpCi17Ci0g
ICAgV2ViS2l0V2ViVmlldyogdmlldzsKLSAgICBXZWJLaXRXZWJGcmFtZSogZnJhbWU7Ci0gICAg
V2ViS2l0V2ViRGF0YVNvdXJjZSogZGF0YVNvdXJjZTsKLSAgICBXZWJLaXROZXR3b3JrUmVxdWVz
dCogaW5pdGlhbFJlcXVlc3Q7Ci0KLSAgICB2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93
ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsodmlldyk7Ci0gICAgZnJhbWUg
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUodmlldyk7Ci0KLSAgICBXZWJLaXROZXR3
b3JrUmVxdWVzdCogcmVxdWVzdCA9IHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfbmV3KCJodHRwOi8v
d3d3Lmdvb2dsZS5jb20iKTsKLSAgICB3ZWJraXRfd2ViX2ZyYW1lX2xvYWRfcmVxdWVzdChmcmFt
ZSwgcmVxdWVzdCk7Ci0gICAgZ19vYmplY3RfdW5yZWYocmVxdWVzdCk7Ci0KLSAgICBkYXRhU291
cmNlID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfcHJvdmlzaW9uYWxfZGF0YV9zb3VyY2UoZnJhbWUp
OwotICAgIGdfYXNzZXJ0KGRhdGFTb3VyY2UpOwotICAgIGluaXRpYWxSZXF1ZXN0ID0gd2Via2l0
X3dlYl9kYXRhX3NvdXJjZV9nZXRfaW5pdGlhbF9yZXF1ZXN0KGRhdGFTb3VyY2UpOwotICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF91cmkoaW5pdGlhbFJlcXVl
c3QpLCA9PSwgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iKTsKLQotICAgIGdfb2JqZWN0X3VucmVm
KHZpZXcpOwotfQotCi1zdGF0aWMgdm9pZCBub3RpZnlfbG9hZF9zdGF0dXNfdW5yZWFjaGFibGVf
Y2IoV2ViS2l0V2ViVmlldyogdmlldywgR1BhcmFtU3BlYyogcHNwZWMsIEdNYWluTG9vcCogbG9v
cCkKLXsKLSAgICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRf
bG9hZF9zdGF0dXMgKHZpZXcpOwotICAgIFdlYktpdFdlYkZyYW1lKiBmcmFtZSA9IHdlYmtpdF93
ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh2aWV3KTsKLQotICAgIGdfYXNzZXJ0KHN0YXR1cyAhPSBX
RUJLSVRfTE9BRF9GSU5JU0hFRCk7Ci0KLSAgICBpZiAoc3RhdHVzICE9IFdFQktJVF9MT0FEX0ZB
SUxFRCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViS2l0V2ViRGF0YVNvdXJjZSogZGF0YXNv
dXJjZSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2RhdGFfc291cmNlKGZyYW1lKTsKLQotICAgIGdf
YXNzZXJ0X2NtcHN0cigiaHR0cDovL3RoaXMuaG9zdC5kb2VzLm5vdC5leGlzdC9kb2lyZWFsbHll
eGlzdC5odG1sIiwgPT0sCi0gICAgICAgICAgICAgICAgICAgIHdlYmtpdF93ZWJfZGF0YV9zb3Vy
Y2VfZ2V0X3VucmVhY2hhYmxlX3VyaShkYXRhc291cmNlKSk7Ci0KLSAgICBnX21haW5fbG9vcF9x
dWl0KGxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCBub3RpZnlfbG9hZF9zdGF0dXNfY2IoV2ViS2l0
V2ViVmlldyogdmlldywgR1BhcmFtU3BlYyogcHNwZWMsIEdNYWluTG9vcCogbG9vcCkKLXsKLSAg
ICBXZWJLaXRMb2FkU3RhdHVzIHN0YXR1cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0
dXMgKHZpZXcpOwotICAgIFdlYktpdFdlYkZyYW1lKiBmcmFtZSA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfbWFpbl9mcmFtZSh2aWV3KTsKLSAgICBXZWJLaXRXZWJEYXRhU291cmNlKiBkYXRhU291cmNl
ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfZGF0YV9zb3VyY2UoZnJhbWUpOwotCi0gICAgaWYgKHN0
YXR1cyA9PSBXRUJLSVRfTE9BRF9DT01NSVRURUQpIHsKLSAgICAgICAgZ19hc3NlcnQod2Via2l0
X3dlYl9kYXRhX3NvdXJjZV9pc19sb2FkaW5nKGRhdGFTb3VyY2UpKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBlbHNlIGlmIChzdGF0dXMgIT0gV0VCS0lUX0xPQURfRklOSVNIRUQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8qIFRlc3QgZ2V0X3JlcXVlc3QgKi8KLSAgICBnX3Rlc3Rf
bWVzc2FnZSgiVGVzdGluZyB3ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF9yZXF1ZXN0Iik7Ci0g
ICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QgPSB3ZWJraXRfd2ViX2RhdGFfc291cmNl
X2dldF9yZXF1ZXN0KGRhdGFTb3VyY2UpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfbmV0
d29ya19yZXF1ZXN0X2dldF91cmkocmVxdWVzdCksID09LCAiaHR0cDovL3d3dy53ZWJraXQub3Jn
LyIpOwotCi0gICAgLyogVGVzdCBnZXRfbWFpbl9yZXNvdXJjZSAqLwotICAgIGdfdGVzdF9tZXNz
YWdlKCJUZXN0aW5nIHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X21haW5fcmVzb3VyY2UiKTsK
LSAgICBXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UgPSB3ZWJraXRfd2ViX2RhdGFfc291cmNl
X2dldF9tYWluX3Jlc291cmNlKGRhdGFTb3VyY2UpOwotICAgIGdfYXNzZXJ0X2NtcHN0cigidGV4
dC9odG1sIiwgPT0sIHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X21pbWVfdHlwZShyZXNvdXJjZSkp
OwotICAgIGdfYXNzZXJ0X2NtcHN0cigiaHR0cDovL3d3dy53ZWJraXQub3JnLyIsID09LCB3ZWJr
aXRfd2ViX3Jlc291cmNlX2dldF91cmkocmVzb3VyY2UpKTsKLQotICAgIC8qIFRlc3QgZ2V0X2Rh
dGEuIFdlIGp1c3QgdGVzdCBpZiBkYXRhIGhhcyBjZXJ0YWluIHNpemUgZm9yIHRoZSBtZWFuIHRp
bWUgKi8KLSAgICBnX3Rlc3RfbWVzc2FnZSgiVGVzdGluZyB3ZWJraXRfd2ViX2RhdGFfc291cmNl
X2dldF9kYXRhIGhhcyBjZXJ0YWluIHNpemUiKTsKLSAgICBHU3RyaW5nKiBkYXRhID0gd2Via2l0
X3dlYl9kYXRhX3NvdXJjZV9nZXRfZGF0YShkYXRhU291cmNlKTsKLSAgICBnX2Fzc2VydChkYXRh
LT5sZW4gPiAxMDApOwotCi0gICAgLyogRklYTUU6IEFkZCB0ZXN0IGZvciBnZXRfZW5jb2Rpbmcg
Ki8KLQotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB3
YWl0X3RpbWVyX2ZpcmVkKEdNYWluTG9vcCogbG9vcCkKLXsKLSAgICB3YWl0VGltZXIgPSAwOwot
ICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0
YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9kYXRhX3NvdXJjZSgpCi17Ci0gICAgV2ViS2l0V2Vi
VmlldyogdmlldzsKLSAgICBHTWFpbkxvb3AqIGxvb3A7Ci0KLSAgICB2aWV3ID0gV0VCS0lUX1dF
Ql9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsodmll
dyk7Ci0gICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLSAgICBnX3NpZ25h
bF9jb25uZWN0KHZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhub3RpZnlf
bG9hZF9zdGF0dXNfY2IpLCBsb29wKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodmll
dywgImh0dHA6Ly93d3cud2Via2l0Lm9yZyIpOwotCi0gICAgd2FpdFRpbWVyID0gZ190aW1lb3V0
X2FkZF9zZWNvbmRzKGRlZmF1bHRUaW1lb3V0LCAoR1NvdXJjZUZ1bmMpd2FpdF90aW1lcl9maXJl
ZCwgbG9vcCk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBpZiAod2FpdFRp
bWVyKQotICAgICAgICBnX3NvdXJjZV9yZW1vdmUod2FpdFRpbWVyKTsKLQotICAgIHdhaXRUaW1l
ciA9IDA7Ci0KLSAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKLSAgICBnX29iamVjdF91bnJl
Zih2aWV3KTsKLX0KLQotc3RhdGljIHZvaWQgbm90aWZ5X2xvYWRfc3RhdHVzX2xpZmV0aW1lX2Ni
KFdlYktpdFdlYlZpZXcqIHZpZXcsIEdQYXJhbVNwZWMqIHBzcGVjLCBHTWFpbkxvb3AqIGxvb3Ap
Ci17Ci0gICAgV2ViS2l0TG9hZFN0YXR1cyBzdGF0dXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xv
YWRfc3RhdHVzICh2aWV3KTsKLSAgICBXZWJLaXRXZWJGcmFtZSogZnJhbWUgPSB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X21haW5fZnJhbWUodmlldyk7Ci0gICAgV2ViS2l0V2ViRGF0YVNvdXJjZSogZGF0
YVNvdXJjZSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2RhdGFfc291cmNlKGZyYW1lKTsKLQotICAg
IGlmIChzdGF0dXMgPT0gV0VCS0lUX0xPQURfQ09NTUlUVEVEKSB7Ci0gICAgICAgIGdfYXNzZXJ0
KHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfaXNfbG9hZGluZyhkYXRhU291cmNlKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9IGVsc2UgaWYgKHN0YXR1cyAhPSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLX0KLQotc3Rh
dGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2RhdGFfc291cmNlX2xpZmV0aW1lKCkKLXsKLSAgICBX
ZWJLaXRXZWJWaWV3KiB2aWV3OwotICAgIEdNYWluTG9vcCogbG9vcDsKLQotICAgIHZpZXcgPSBX
RUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZf
c2luayh2aWV3KTsKLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotICAg
IGdfc2lnbmFsX2Nvbm5lY3QodmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNL
KG5vdGlmeV9sb2FkX3N0YXR1c19saWZldGltZV9jYiksIGxvb3ApOwotICAgIHdlYmtpdF93ZWJf
dmlld19sb2FkX3VyaSh2aWV3LCAiaHR0cDovL3d3dy53ZWJraXQub3JnIik7Ci0KLSAgICB3YWl0
VGltZXIgPSBnX3RpbWVvdXRfYWRkX3NlY29uZHMoZGVmYXVsdFRpbWVvdXQsIChHU291cmNlRnVu
Yyl3YWl0X3RpbWVyX2ZpcmVkLCBsb29wKTsKLQotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsK
LQotICAgIFdlYktpdFdlYkRhdGFTb3VyY2UqIGRhdGFTb3VyY2UgPSB3ZWJraXRfd2ViX2ZyYW1l
X2dldF9kYXRhX3NvdXJjZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUodmlldykpOwot
ICAgIEdMaXN0KiBzdWJSZXNvdXJjZXMgPSB3ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF9zdWJy
ZXNvdXJjZXMoZGF0YVNvdXJjZSk7Ci0gICAgZ2ludCBudW1iZXJPZlJlc291cmNlcyA9IGdfbGlz
dF9sZW5ndGgoc3ViUmVzb3VyY2VzKTsKLSAgICBnX2xpc3RfZnJlZShzdWJSZXNvdXJjZXMpOwot
Ci0gICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXModmll
dyksID09LCBXRUJLSVRfTE9BRF9GSU5JU0hFRCk7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9h
ZF91cmkodmlldywgImh0dHA6Ly9nbm9tZS5vcmciKTsKLQotICAgIGdfYXNzZXJ0X2NtcGludCh3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHZpZXcpLCA9PSwgV0VCS0lUX0xPQURfUFJP
VklTSU9OQUwpOwotCi0gICAgd2Via2l0X3dlYl92aWV3X3N0b3BfbG9hZGluZyh2aWV3KTsKLQot
ICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHZpZXcp
LCA9PSwgV0VCS0lUX0xPQURfRkFJTEVEKTsKLQotICAgIHN1YlJlc291cmNlcyA9IHdlYmtpdF93
ZWJfZGF0YV9zb3VyY2VfZ2V0X3N1YnJlc291cmNlcyhkYXRhU291cmNlKTsKLSAgICBnX2Fzc2Vy
dF9jbXBpbnQobnVtYmVyT2ZSZXNvdXJjZXMsID09LCBnX2xpc3RfbGVuZ3RoKHN1YlJlc291cmNl
cykpOwotICAgIGdfbGlzdF9mcmVlKHN1YlJlc291cmNlcyk7Ci0KLSAgICBpZiAod2FpdFRpbWVy
KQotICAgICAgICBnX3NvdXJjZV9yZW1vdmUod2FpdFRpbWVyKTsKLQotICAgIHdhaXRUaW1lciA9
IDA7Ci0KLSAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKLSAgICBnX29iamVjdF91bnJlZih2
aWV3KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX2RhdGFfc291cmNlX3VucmVh
Y2hhYmxlX3VyaSgpCi17Ci0gICAgLyogRklYTUU6IHRoaXMgdGVzdCBmYWlscyBjdXJyZW50bHku
ICovCi0gICAgcmV0dXJuOwotCi0gICAgV2ViS2l0V2ViVmlldyogdmlldzsKLSAgICBHTWFpbkxv
b3AqIGxvb3A7Ci0KLSAgICB2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19u
ZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsodmlldyk7Ci0gICAgbG9vcCA9IGdfbWFpbl9s
b29wX25ldyhOVUxMLCBUUlVFKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHZpZXcsICJub3RpZnk6
OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhub3RpZnlfbG9hZF9zdGF0dXNfdW5yZWFjaGFibGVf
Y2IpLCBsb29wKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodmlldywgImh0dHA6Ly90
aGlzLmhvc3QuZG9lcy5ub3QuZXhpc3QvZG9pcmVhbGx5ZXhpc3QuaHRtbCIpOwotCi0gICAgd2Fp
dFRpbWVyID0gZ190aW1lb3V0X2FkZF9zZWNvbmRzKGRlZmF1bHRUaW1lb3V0LCAoR1NvdXJjZUZ1
bmMpd2FpdF90aW1lcl9maXJlZCwgbG9vcCk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7
Ci0KLSAgICBpZiAod2FpdFRpbWVyKQotICAgICAgICBnX3NvdXJjZV9yZW1vdmUod2FpdFRpbWVy
KTsKLQotICAgIHdhaXRUaW1lciA9IDA7Ci0KLSAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsK
LSAgICBnX29iamVjdF91bnJlZih2aWV3KTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIq
KiBhcmd2KQotewotICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAg
IGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0
X2J1ZygiMjQ3NTgiKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2ViZGF0YXNvdXJj
ZS9nZXRfaW5pdGlhbF9yZXF1ZXN0IiwKLSAgICAgICAgICAgICAgICAgICAgdGVzdF93ZWJraXRf
d2ViX2RhdGFfc291cmNlX2dldF9pbml0aWFsX3JlcXVlc3QpOwotICAgIGdfdGVzdF9hZGRfZnVu
YygiL3dlYmtpdC93ZWJkYXRhc291cmNlL2FwaSIsCi0gICAgICAgICAgICAgICAgICAgIHRlc3Rf
d2Via2l0X3dlYl9kYXRhX3NvdXJjZSk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dl
YmRhdGFzb3VyY2UvdW5yZWFjaGFibGVfdXJpIiwKLSAgICAgICAgICAgICAgICAgICAgdGVzdF93
ZWJraXRfd2ViX2RhdGFfc291cmNlX3VucmVhY2hhYmxlX3VyaSk7Ci0gICAgZ190ZXN0X2FkZF9m
dW5jKCIvd2Via2l0L3dlYmRhdGFzb3VyY2UvbGlmZXRpbWUiLAotICAgICAgICAgICAgICAgICAg
ICB0ZXN0X3dlYmtpdF93ZWJfZGF0YV9zb3VyY2VfbGlmZXRpbWUpOwotCi0gICAgcmV0dXJuIGdf
dGVzdF9ydW4gKCk7Ci19CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdEd0ay90ZXN0d2ViZnJhbWUuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrL3Rlc3R3ZWJmcmFtZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTMxODcz
ZDRkOGVlN2Q2OGIzZTdiMzQxYjk4NDRlZDNjZDI0NTU1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrL3Rlc3R3ZWJmcmFtZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjIwICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqIENvcHly
aWdodCAoQykgMjAwOSBDb2xsYWJvcmEgTHRkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5j
bHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Vi
a2l0L3dlYmtpdC5oPgotCi1zdGF0aWMgaW50IG51bWJlck9mRnJhbWVzQ3JlYXRlZCA9IDA7Ci0K
LXN0YXRpYyB2b2lkIGNyZWF0ZUZyYW1lU2lnbmFsVGVzdEZyYW1lQ3JlYXRlZENhbGxiYWNrKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFdlYkZyYW1lKiBmcmFtZSwgZ3BvaW50ZXIgZGF0
YSkKLXsKLSAgICBudW1iZXJPZkZyYW1lc0NyZWF0ZWQrKzsKLX0KLQotc3RhdGljIGdib29sZWFu
IGNyZWF0ZUZyYW1lU2lnbmFsVGVzdFRpbWVvdXQoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBnX2Fz
c2VydF9jbXBpbnQobnVtYmVyT2ZGcmFtZXNDcmVhdGVkLCA9PSwgMik7Ci0gICAgZ19tYWluX2xv
b3BfcXVpdCgoR01haW5Mb29wKikgZGF0YSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfY3JlYXRlZF9zaWduYWwodm9pZCkKLXsKLSAg
ICBHdGtXaWRnZXQqIHdlYlZpZXc7Ci0gICAgR3RrV2lkZ2V0KiB3aW5kb3c7Ci0gICAgR01haW5M
b29wKiBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0gICAgd2luZG93ID0g
Z3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7Ci0KLSAgICB3ZWJWaWV3ID0gd2Vi
a2l0X3dlYl92aWV3X25ldygpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgImZyYW1l
LWNyZWF0ZWQiLCBHX0NBTExCQUNLKGNyZWF0ZUZyYW1lU2lnbmFsVGVzdEZyYW1lQ3JlYXRlZENh
bGxiYWNrKSwgbG9vcCk7Ci0KLSAgICAvLyBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IGV4YWN0bHkg
dHdvIGNyZWF0ZS1mcmFtZSBzaWduYWxzIGFyZQotICAgIC8vIGZpcmVkIGFuZCBubyBtb3JlLCBz
byB3ZSBzZXQgYSB0aW1lb3V0IGhlcmUuIFRoZXJlIGRvZXMgbm90IGFwcGVhcgotICAgIC8vIHRv
IGJlIGEgc2ltcGxlIHdheSB2aWEgdGhlIEFQSSB0byBmaWd1cmUgb3V0IHdoZW4gYWxsIGZyYW1l
cyBoYXZlCi0gICAgLy8gbG9hZGVkLgotICAgIGdfdGltZW91dF9hZGQoNTAwLCBjcmVhdGVGcmFt
ZVNpZ25hbFRlc3RUaW1lb3V0LCBsb29wKTsKLQotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19D
T05UQUlORVIod2luZG93KSwgd2ViVmlldyk7Ci0gICAgZ3RrX3dpZGdldF9zaG93KHdpbmRvdyk7
Ci0gICAgZ3RrX3dpZGdldF9zaG93KHdlYlZpZXcpOwotCi0gICAgd2Via2l0X3dlYl92aWV3X2xv
YWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSwKLSAgICAgICAgIjxodG1sPjxib2R5
PkZyYW1lcyEiCi0gICAgICAgICI8aWZyYW1lPjwvaWZyYW1lPiIKLSAgICAgICAgIjxpZnJhbWU+
PC9pZnJhbWU+IgotICAgICAgICAiPC9ib2R5PjwvaHRtbD4iLAotICAgICAgICAidGV4dC9odG1s
IiwgInV0Zi04IiwgImZpbGU6Ly8iKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci19Ci0K
LXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9mcmFtZV9jcmVhdGVfZGVzdHJveSh2b2lkKQot
ewotICAgIEd0a1dpZGdldCAqd2ViVmlldzsKLSAgICBHdGtXaWRnZXQgKndpbmRvdzsKLQotICAg
IGdfdGVzdF9idWcoIjIxODM3Iik7Ci0gICAgd2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXco
KTsKLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
R19PQkpFQ1Qod2ViVmlldyktPnJlZl9jb3VudCwgPT0sIDEpOwotICAgIC8vIFRoaXMgY3Jhc2hl
ZCB3aXRoIHRoZSBvcmlnaW5hbCB2ZXJzaW9uCi0gICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7
Ci0KLSAgICBnX3Rlc3RfYnVnKCIyNTA0MiIpOwotICAgIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3
KEdUS19XSU5ET1dfVE9QTEVWRUwpOwotICAgIHdlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3
KCk7Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB3ZWJWaWV3
KTsKLSAgICBndGtfd2lkZ2V0X3Nob3cod2luZG93KTsKLSAgICBndGtfd2lkZ2V0X3Nob3cod2Vi
Vmlldyk7Ci0gICAgZ3RrX3dpZGdldF9kZXN0cm95KHdlYlZpZXcpOwotfQotCi1zdGF0aWMgdm9p
ZCB0ZXN0X3dlYmtpdF93ZWJfZnJhbWVfbGlmZXRpbWUodm9pZCkKLXsKLSAgICBXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3OwotICAgIFdlYktpdFdlYkZyYW1lKiB3ZWJGcmFtZTsKLSAgICBnX3Rlc3Rf
YnVnKCIyMTgzNyIpOwotCi0gICAgd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2Vi
X3ZpZXdfbmV3KCkpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwotICAgIGdfYXNz
ZXJ0X2NtcGludChHX09CSkVDVCh3ZWJWaWV3KS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0gICAgd2Vi
RnJhbWUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUod2ViVmlldyk7Ci0gICAgZ19h
c3NlcnRfY21waW50KEdfT0JKRUNUKHdlYkZyYW1lKS0+cmVmX2NvdW50LCA9PSwgMSk7Ci0KLSAg
ICAvLyBBZGQgZHVtbXkgcmVmZXJlbmNlIG9uIHRoZSBXZWJLaXRXZWJGcmFtZSB0byBrZWVwIGl0
IGFsaXZlCi0gICAgZ19vYmplY3RfcmVmKHdlYkZyYW1lKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQo
R19PQkpFQ1Qod2ViRnJhbWUpLT5yZWZfY291bnQsID09LCAyKTsKLQotICAgIC8vIFRoaXMgY3Jh
c2hlZCB3aXRoIHRoZSBvcmlnaW5hbCB2ZXJzaW9uCi0gICAgZ19vYmplY3RfdW5yZWYod2ViVmll
dyk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgZnJhbWUgZ290IGRlbGV0ZWQgYXMgd2Vs
bC4gV2UgZGlkIHRoaXMKLSAgICAvLyBieSBhZGRpbmcgYW4gZXh0cmEgcmVmIG9uIHRoZSBXZWJL
aXRXZWJGcmFtZSBhbmQgd2Ugc2hvdWxkCi0gICAgLy8gYmUgdGhlIG9uZSBob2xkaW5nIHRoZSBs
YXN0IHJlZmVyZW5jZS4KLSAgICBnX2Fzc2VydF9jbXBpbnQoR19PQkpFQ1Qod2ViRnJhbWUpLT5y
ZWZfY291bnQsID09LCAxKTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJGcmFtZSk7Ci19Ci0KLXN0
YXRpYyBnYm9vbGVhbiBwcmludF9yZXF1ZXN0ZWRfY2IoV2ViS2l0V2ViVmlldyogd2ViVmlldywg
V2ViS2l0V2ViRnJhbWUqIHdlYkZyYW1lLCBHTWFpbkxvb3AqIGxvb3ApCi17Ci0gICAgZ19vYmpl
Y3Rfc2V0X2RhdGEoR19PQkpFQ1Qod2ViVmlldyksICJzaWduYWwtaGFuZGxlZCIsIEdJTlRfVE9f
UE9JTlRFUihUUlVFKSk7Ci0gICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLSAgICByZXR1cm4g
VFJVRTsKLX0KLQotc3RhdGljIHZvaWQgcHJpbnRfdGltZW91dChHTWFpbkxvb3AqIGxvb3ApCi17
Ci0gICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1bm5pbmcobG9vcCkpCi0gICAgICAgIGdfbWFpbl9s
b29wX3F1aXQobG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9mcmFtZV9w
cmludGluZyh2b2lkKQotewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7Ci0KLSAgICB3ZWJW
aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmpl
Y3RfcmVmX3Npbmsod2ViVmlldyk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKHdlYlZp
ZXcpLT5yZWZfY291bnQsID09LCAxKTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmlu
Zyh3ZWJWaWV3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGh0bWw+PGJvZHk+
PGgxPldlYktpdEdUSyshPC9oMT48L2JvZHk+PC9odG1sPiIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJ0ZXh0L2h0bWwiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAidXRmLTgiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZTovLyIpOwot
Ci0gICAgR01haW5Mb29wKiBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0g
ICAgLy8gRG9lcyBqYXZhc2NyaXB0IHByaW50KCkgd29yayBjb3JyZWN0bHk/Ci0gICAgZ19zaWdu
YWxfY29ubmVjdCh3ZWJWaWV3LCAicHJpbnQtcmVxdWVzdGVkIiwKLSAgICAgICAgICAgICAgICAg
ICAgIEdfQ0FMTEJBQ0socHJpbnRfcmVxdWVzdGVkX2NiKSwKLSAgICAgICAgICAgICAgICAgICAg
IGxvb3ApOwotCi0gICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1Qod2ViVmlldyksICJzaWdu
YWwtaGFuZGxlZCIsIEdJTlRfVE9fUE9JTlRFUihGQUxTRSkpOwotICAgIHdlYmtpdF93ZWJfdmll
d19leGVjdXRlX3NjcmlwdCAod2ViVmlldywgInByaW50KCk7Iik7Ci0KLSAgICAvLyBHaXZlIGph
dmFzY3JpcHRjb3JlIHNvbWUgdGltZSB0byBwcm9jZXNzIHRoZSBwcmludCByZXF1ZXN0LCBidXQK
LSAgICAvLyBwcmVwYXJlIGEgdGltZW91dCB0byBhdm9pZCBpdCBydW5uaW5nIGZvcmV2ZXIgaW4g
Y2FzZSB0aGUgc2lnbmFsIGlzCi0gICAgLy8gbmV2ZXIgZW1pdHRlZC4KLSAgICBnX3RpbWVvdXRf
YWRkKDEwMDAsIChHU291cmNlRnVuYylwcmludF90aW1lb3V0LCBsb29wKTsKLSAgICBnX21haW5f
bG9vcF9ydW4obG9vcCk7Ci0KLSAgICBnX2Fzc2VydF9jbXBpbnQoR1BPSU5URVJfVE9fSU5UKGdf
b2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKHdlYlZpZXcpLCAic2lnbmFsLWhhbmRsZWQiKSksID09
LCBUUlVFKTsKLQotICAgIC8vIERvZXMgcHJpbnRpbmcgZGlyZWN0bHkgdG8gYSBmaWxlPwotICAg
IEdFcnJvciAqZXJyb3IgPSBOVUxMOwotICAgIGdjaGFyKiB0ZW1wb3JhcnlGaWxlbmFtZSA9IE5V
TEw7Ci0gICAgZ2ludCBmZCA9IGdfZmlsZV9vcGVuX3RtcCAoIndlYmtpdC10ZXN0d2ViZnJhbWUt
WFhYWFhYIiwgJnRlbXBvcmFyeUZpbGVuYW1lLCAmZXJyb3IpOwotICAgIGNsb3NlKGZkKTsKLQot
ICAgIGlmIChlcnJvcikgewotICAgICAgICBnX2NyaXRpY2FsKCJGYWlsZWQgdG8gb3BlbiBhIHRl
bXBvcmFyeSBmaWxlIGZvciB3cml0aW5nOiAlcy4iLCBlcnJvci0+bWVzc2FnZSk7Ci0gICAgICAg
IGdfZXJyb3JfZnJlZShlcnJvcik7Ci0gICAgICAgIGdvdG8gY2xlYW51cDsKLSAgICB9Ci0KLSAg
ICAvLyBXZSBkZWxldGUgdGhlIGZpbGUsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBmaWd1cmUgb3V0
IHRoYXQgdGhlCi0gICAgLy8gZmlsZSBnb3QgcHJpbnRlZDsKLSAgICBpZiAoZ191bmxpbmsodGVt
cG9yYXJ5RmlsZW5hbWUpID09IC0xKSB7Ci0gICAgICAgIGdfd2FybmluZygiRmFpbGVkIHRvIGRl
bGV0ZSB0aGUgdGVtcG9yYXJ5IGZpbGU6ICVzLlxuVGhpcyBtYXkgY2F1c2UgdGhlIHRlc3QgdG8g
YmUgYm9ndXMuIiwgZ19zdHJlcnJvcihlcnJubykpOwotICAgIH0KLQotICAgIFdlYktpdFdlYkZy
YW1lKiB3ZWJGcmFtZSA9IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KTsK
LSAgICBHdGtQcmludE9wZXJhdGlvbiogb3BlcmF0aW9uID0gZ3RrX3ByaW50X29wZXJhdGlvbl9u
ZXcoKTsKLSAgICBHdGtQcmludE9wZXJhdGlvbkFjdGlvbiBhY3Rpb24gPSBHVEtfUFJJTlRfT1BF
UkFUSU9OX0FDVElPTl9FWFBPUlQ7Ci0gICAgR3RrUHJpbnRPcGVyYXRpb25SZXN1bHQgcmVzdWx0
OwotCi0gICAgZ3RrX3ByaW50X29wZXJhdGlvbl9zZXRfZXhwb3J0X2ZpbGVuYW1lKG9wZXJhdGlv
biwgdGVtcG9yYXJ5RmlsZW5hbWUpOwotICAgIHJlc3VsdCA9IHdlYmtpdF93ZWJfZnJhbWVfcHJp
bnRfZnVsbCAod2ViRnJhbWUsIG9wZXJhdGlvbiwgYWN0aW9uLCBOVUxMKTsKLQotICAgIGdfYXNz
ZXJ0X2NtcGludChyZXN1bHQsID09LCBHVEtfUFJJTlRfT1BFUkFUSU9OX1JFU1VMVF9BUFBMWSk7
Ci0gICAgZ19hc3NlcnRfY21waW50KGdfZmlsZV90ZXN0KHRlbXBvcmFyeUZpbGVuYW1lLCBHX0ZJ
TEVfVEVTVF9JU19SRUdVTEFSKSwgPT0sIFRSVUUpOwotCi0gICAgZ191bmxpbmsodGVtcG9yYXJ5
RmlsZW5hbWUpOwotICAgIGdfb2JqZWN0X3VucmVmKG9wZXJhdGlvbik7Ci1jbGVhbnVwOgotICAg
IGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOwotICAgIGdfZnJlZSh0ZW1wb3JhcnlGaWxlbmFtZSk7
Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9mcmFtZV9yZXNwb25zZSgpCi17Ci0g
ICAgV2ViS2l0V2ViRnJhbWUqIGZyYW1lID0gZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9G
UkFNRSwgTlVMTCk7Ci0gICAgV2ViS2l0TmV0d29ya1Jlc3BvbnNlKiByZXNwb25zZSA9IHdlYmtp
dF93ZWJfZnJhbWVfZ2V0X25ldHdvcmtfcmVzcG9uc2UoZnJhbWUpOwotICAgIGdfYXNzZXJ0KCFy
ZXNwb25zZSk7Ci0gICAgZ19vYmplY3RfdW5yZWYoZnJhbWUpOwotfQotCi1pbnQgbWFpbihpbnQg
YXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5V
TEwpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsK
LSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9jcmVhdGVfZGVzdHJveSIsIHRl
c3Rfd2Via2l0X3dlYl9mcmFtZV9jcmVhdGVfZGVzdHJveSk7Ci0gICAgZ190ZXN0X2FkZF9mdW5j
KCIvd2Via2l0L3dlYnZpZXcvZnJhbWUtY3JlYXRlZF9zaWduYWwiLCB0ZXN0X3dlYmtpdF93ZWJf
ZnJhbWVfY3JlYXRlZF9zaWduYWwpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJm
cmFtZS9saWZldGltZSIsIHRlc3Rfd2Via2l0X3dlYl9mcmFtZV9saWZldGltZSk7Ci0gICAgZ190
ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvcHJpbnRpbmciLCB0ZXN0X3dlYmtpdF93ZWJf
ZnJhbWVfcHJpbnRpbmcpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L3Jl
c3BvbnNlIiwgdGVzdF93ZWJraXRfd2ViX2ZyYW1lX3Jlc3BvbnNlKTsKLSAgICByZXR1cm4gZ190
ZXN0X3J1biAoKTsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0R3RrL3Rlc3R3ZWJoaXN0b3J5aXRlbS5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHdGsvdGVzdHdlYmhpc3RvcnlpdGVtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDgyZTE5MWMyMDhjNzUzOTgwZGViNWJiOWU2MDc1Y2ZiNjRjMWFiOWQuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRHdGsvdGVzdHdlYmhpc3RvcnlpdGVtLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3
MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBNaWNoYWVsIEFsb256bwot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGd0ay9ndGsu
aD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBX
ZWJLaXRXZWJIaXN0b3J5SXRlbSogaXRlbTsKLX0gV2ViSGlzdG9yeUl0ZW1GaXh0dXJlOwotCi1z
dGF0aWMgdm9pZCB3ZWJfaGlzdG9yeV9pdGVtX2ZpeHR1cmVfc2V0dXAoV2ViSGlzdG9yeUl0ZW1G
aXh0dXJlKiBmaXh0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBmaXh0dXJlLT5pdGVtID0gd2Via2l0X3dl
Yl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YSgiaHR0cDovL2V4YW1wbGUuY29tLyIsICJFeGFt
cGxlMSIpOwotICAgIGdfYXNzZXJ0X2NtcGludChHX09CSkVDVChmaXh0dXJlLT5pdGVtKS0+cmVm
X2NvdW50LCA9PSAsIDEpOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPml0ZW0gIT0gTlVMTCk7Ci19
Ci0KLXN0YXRpYyB2b2lkIHdlYl9oaXN0b3J5X2l0ZW1fZml4dHVyZV90ZWFyZG93bihXZWJIaXN0
b3J5SXRlbUZpeHR1cmUqIGZpeHR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGdfYXNzZXJ0KGZpeHR1
cmUtPml0ZW0gIT0gTlVMTCk7Ci0gICAgZ19hc3NlcnRfY21waW50KEdfT0JKRUNUKGZpeHR1cmUt
Pml0ZW0pLT5yZWZfY291bnQsID09LCAxKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRf
d2ViX2hpc3RvcnlfaXRlbV9nZXRfZGF0YShXZWJIaXN0b3J5SXRlbUZpeHR1cmUqIGZpeHR1cmUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjb25z
dHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9oaXN0b3J5
X2l0ZW1fZ2V0X3RpdGxlKGZpeHR1cmUtPml0ZW0pLCA9PSwgIkV4YW1wbGUxIik7Ci0gICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoZml4dHVyZS0+aXRl
bSksID09LCAiaHR0cDovL2V4YW1wbGUuY29tLyIpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dl
YmtpdF93ZWJfaGlzdG9yeV9pdGVtX2FsdGVybmF0ZV90aXRsZShXZWJIaXN0b3J5SXRlbUZpeHR1
cmUqIGZpeHR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgd2Via2l0X3dlYl9oaXN0
b3J5X2l0ZW1fc2V0X2FsdGVybmF0ZV90aXRsZShmaXh0dXJlLT5pdGVtLCAiQWx0ZXJuYXRlIHRp
dGxlIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF9h
bHRlcm5hdGVfdGl0bGUoZml4dHVyZS0+aXRlbSksID09LCAiQWx0ZXJuYXRlIHRpdGxlIik7Ci19
Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0
KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVn
cy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvd2ViaGlzdG9yeWl0ZW0v
Z2V0X2RhdGEiLAotICAgICAgICAgICAgICAgV2ViSGlzdG9yeUl0ZW1GaXh0dXJlLCAwLCB3ZWJf
aGlzdG9yeV9pdGVtX2ZpeHR1cmVfc2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF93
ZWJfaGlzdG9yeV9pdGVtX2dldF9kYXRhLCB3ZWJfaGlzdG9yeV9pdGVtX2ZpeHR1cmVfdGVhcmRv
d24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvd2ViaGlzdG9yeWl0ZW0vYWx0ZXJuYXRlX3Rp
dGxlIiwKLSAgICAgICAgICAgICAgIFdlYkhpc3RvcnlJdGVtRml4dHVyZSwgMCwgd2ViX2hpc3Rv
cnlfaXRlbV9maXh0dXJlX3NldHVwLAotICAgICAgICAgICAgICAgdGVzdF93ZWJraXRfd2ViX2hp
c3RvcnlfaXRlbV9hbHRlcm5hdGVfdGl0bGUsIHdlYl9oaXN0b3J5X2l0ZW1fZml4dHVyZV90ZWFy
ZG93bik7Ci0gICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Ci19CmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2ViaW5zcGVjdG9yLmMgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2ViaW5zcGVjdG9yLmMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3NDM4MmZmM2Y0M2NiZTNkYjJkZmYxODUyYmY0ODA0NTI5
YWUzNGUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYmluc3BlY3Rvci5jCisrKyAv
ZGV2L251bGwKQEAgLTEsMTczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR3Vz
dGF2byBOb3JvbmhhIFNpbHZhIDxnbnNAZ25vbWUub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAidGVzdF91dGlscy5oIgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8
Z2xpYi5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+
Ci0KLUdNYWluTG9vcCAqbG9vcDsKLUd0a1dpZGdldCAqd2luZG93OwotCi1zdGF0aWMgZ2Jvb2xl
YW4gcXVpdExvb3AoZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBnX21haW5fbG9vcF9xdWl0KGxvb3Ap
OwotICAgIHJldHVybiBUUlVFOwotfQotCi0vKiBJZ25vcmUgc2ltcGxlIHRyYW5zbGF0aW9uLXJl
bGF0ZWQgbWVzc2FnZXMgYW5kIHVwZ3JhZGUgb3RoZXIKLSAqIG1lc3NhZ2VzIHRvIHdhcm5pbmdz
LgotICovCi1zdGF0aWMgZ2Jvb2xlYW4gY29uc29sZU1lc3NhZ2VDYWxsYmFjayhXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3LCBjb25zdCBjaGFyKiBtZXNzYWdlLCB1bnNpZ25lZCBpbnQgbGluZSwgY29u
c3QgY2hhciogc291cmNlSWQpCi17Ci0gICAgaWYgKHN0cnN0cihtZXNzYWdlLCAiTG9jYWxpemVk
IHN0cmluZyIpIHx8IHN0cnN0cihtZXNzYWdlLCAiUHJvdG9jb2wgRXJyb3I6IHRoZSBtZXNzYWdl
IGlzIGZvciBub24tZXhpc3RpbmcgZG9tYWluICdQcm9maWxlciciKSB8fAotICAgICAgICBzdHJz
dHIobWVzc2FnZSwgIkRpZG4ndCBmaW5kIGEgVHJlZUVsZW1lbnQgZm9yIGEgcmVwcmVzZW50ZWRP
YmplY3QiKSkKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0KLSAgICBnX3dhcm5pbmcoIkNvbnNvbGU6
ICVzIEAlZDogJXNcbiIsIHNvdXJjZUlkLCBsaW5lLCBtZXNzYWdlKTsKLSAgICByZXR1cm4gVFJV
RTsKLX0KLQotc3RhdGljIFdlYktpdFdlYlZpZXcqIGluc3BlY3RFbGVtZW50Q2FsbGJhY2soV2Vi
S2l0V2ViSW5zcGVjdG9yICppbnNwZWN0b3IsIFdlYktpdFdlYlZpZXcgKmluc3BlY3RlZFdlYlZp
ZXcsIGludCAqdGltZXNFbGVtZW50SW5zcGVjdGVkKQotewotICAgICp0aW1lc0VsZW1lbnRJbnNw
ZWN0ZWQgPSAqdGltZXNFbGVtZW50SW5zcGVjdGVkICsgMTsKLQotICAgIHdpbmRvdyA9IGd0a193
aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwotCi0gICAgR3RrV2lkZ2V0ICpuZXdXZWJW
aWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOwotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19D
T05UQUlORVIod2luZG93KSwgbmV3V2ViVmlldyk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KG5l
d1dlYlZpZXcsICJjb25zb2xlLW1lc3NhZ2UiLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxM
QkFDSyhjb25zb2xlTWVzc2FnZUNhbGxiYWNrKSwgTlVMTCk7Ci0KLSAgICByZXR1cm4gV0VCS0lU
X1dFQl9WSUVXKG5ld1dlYlZpZXcpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gY2xvc2VJbnNwZWN0
b3IoV2ViS2l0V2ViSW5zcGVjdG9yICppbnNwZWN0b3IsIGludCAqdGltZXNDbG9zZWQpCi17Ci0g
ICAgKnRpbWVzQ2xvc2VkID0gKnRpbWVzQ2xvc2VkICsgMTsKLQotICAgIGd0a193aWRnZXRfZGVz
dHJveSh3aW5kb3cpOwotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gc2hv
d0luc3BlY3RvcihXZWJLaXRXZWJJbnNwZWN0b3IgKmluc3BlY3RvciwgZ3BvaW50ZXIgZGF0YSkK
LXsKLSAgICBnX2lkbGVfYWRkKHF1aXRMb29wLCBOVUxMKTsKLSAgICByZXR1cm4gVFJVRTsKLX0K
LQotc3RhdGljIHZvaWQgbG9hZEZpbmlzaGVkKFdlYktpdFdlYlZpZXcgKndlYlZpZXcsIFdlYktp
dFdlYkZyYW1lICpmcmFtZSwgZ2Jvb2xlYW4gKmlzTG9hZEZpbmlzaGVkKQotewotICAgICppc0xv
YWRGaW5pc2hlZCA9IFRSVUU7Ci0gICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1bm5pbmcobG9vcCkp
Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3Rf
d2Via2l0X3dlYl9pbnNwZWN0b3JfY2xvc2VfYW5kX2luc3BlY3QoKQotewotICAgIFdlYktpdFdl
YlZpZXcgKndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsK
LSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0gICAgZ2Jvb2xlYW4g
aXNMb2FkRmluaXNoZWQgPSBGQUxTRTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJs
b2FkLWZpbmlzaGVkIiwgR19DQUxMQkFDSyhsb2FkRmluaXNoZWQpLCAmaXNMb2FkRmluaXNoZWQp
OwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiPGh0bWw+PGJvZHk+PHA+d29vaG9vPC9wPjwvYm9keT48L2h0
bWw+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQvaHRtbCIsICJVVEYt
OCIsICJmaWxlOi8vIik7Ci0gICAgaWYgKCFpc0xvYWRGaW5pc2hlZCkKLSAgICAgICAgZ19tYWlu
X2xvb3BfcnVuKGxvb3ApOwotCi0gICAgZ19vYmplY3Rfc2V0KHdlYmtpdF93ZWJfdmlld19nZXRf
c2V0dGluZ3Mod2ViVmlldyksICJlbmFibGUtZGV2ZWxvcGVyLWV4dHJhcyIsIFRSVUUsIE5VTEwp
OwotICAgIFdlYktpdFdlYkluc3BlY3RvciAqaW5zcGVjdG9yID0gd2Via2l0X3dlYl92aWV3X2dl
dF9pbnNwZWN0b3Iod2ViVmlldyk7Ci0KLSAgICBpbnQgdGltZXNFbGVtZW50SW5zcGVjdGVkID0g
MDsKLSAgICBpbnQgdGltZXNDbG9zZWQgPSAwOwotICAgIGdfb2JqZWN0X2Nvbm5lY3QoaW5zcGVj
dG9yLAotICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6aW5zcGVjdC13ZWItdmlldyIsIEdf
Q0FMTEJBQ0soaW5zcGVjdEVsZW1lbnRDYWxsYmFjayksICZ0aW1lc0VsZW1lbnRJbnNwZWN0ZWQs
Ci0gICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpzaG93LXdpbmRvdyIsIEdfQ0FMTEJBQ0so
c2hvd0luc3BlY3RvciksIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpjbG9z
ZS13aW5kb3ciLCBHX0NBTExCQUNLKGNsb3NlSW5zcGVjdG9yKSwgJnRpbWVzQ2xvc2VkLAotICAg
ICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICB3ZWJraXRfd2ViX2luc3BlY3Rvcl9pbnNw
ZWN0X2Nvb3JkaW5hdGVzKGluc3BlY3RvciwgMC4wLCAwLjApOwotICAgIGdfYXNzZXJ0X2NtcGlu
dCh0aW1lc0VsZW1lbnRJbnNwZWN0ZWQsID09LCAxKTsKLQotICAgIGdfbWFpbl9sb29wX3J1bihs
b29wKTsKLQotICAgIHdlYmtpdF93ZWJfaW5zcGVjdG9yX2Nsb3NlKGluc3BlY3Rvcik7Ci0gICAg
Z19hc3NlcnRfY21waW50KHRpbWVzQ2xvc2VkLCA9PSwgMSk7Ci0KLSAgICB3ZWJraXRfd2ViX2lu
c3BlY3Rvcl9pbnNwZWN0X2Nvb3JkaW5hdGVzKGluc3BlY3RvciwgMC4wLCAwLjApOwotICAgIGdf
YXNzZXJ0X2NtcGludCh0aW1lc0VsZW1lbnRJbnNwZWN0ZWQsID09LCAyKTsKLQotICAgIGdfbWFp
bl9sb29wX3J1bihsb29wKTsKLQotICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKHdl
YlZpZXcpKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQodGltZXNDbG9zZWQsID09LCAyKTsKLQotICAg
IGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93
ZWJfaW5zcGVjdG9yX2Rlc3Ryb3lfaW5zcGVjdGVkX3dlYl92aWV3KCkKLXsKLSAgICBXZWJLaXRX
ZWJWaWV3ICp3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7
Ci0gICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKLQotICAgIGdib29sZWFu
IGlzTG9hZEZpbmlzaGVkID0gRkFMU0U7Ci0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAi
bG9hZC1maW5pc2hlZCIsIEdfQ0FMTEJBQ0sobG9hZEZpbmlzaGVkKSwgJmlzTG9hZEZpbmlzaGVk
KTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIjxodG1sPjxib2R5PjxwPndvb2hvbzwvcD48L2JvZHk+PC9o
dG1sPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0L2h0bWwiLCAiVVRG
LTgiLCAiZmlsZTovLyIpOwotICAgIGlmICghaXNMb2FkRmluaXNoZWQpCi0gICAgICAgIGdfbWFp
bl9sb29wX3J1bihsb29wKTsKLQotICAgIGdfb2JqZWN0X3NldCh3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3NldHRpbmdzKHdlYlZpZXcpLCAiZW5hYmxlLWRldmVsb3Blci1leHRyYXMiLCBUUlVFLCBOVUxM
KTsKLSAgICBXZWJLaXRXZWJJbnNwZWN0b3IgKmluc3BlY3RvciA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfaW5zcGVjdG9yKHdlYlZpZXcpOwotCi0gICAgaW50IHRpbWVzRWxlbWVudEluc3BlY3RlZCA9
IDA7Ci0gICAgaW50IHRpbWVzQ2xvc2VkID0gMDsKLSAgICBnX29iamVjdF9jb25uZWN0KGluc3Bl
Y3RvciwKLSAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6Omluc3BlY3Qtd2ViLXZpZXciLCBH
X0NBTExCQUNLKGluc3BlY3RFbGVtZW50Q2FsbGJhY2spLCAmdGltZXNFbGVtZW50SW5zcGVjdGVk
LAotICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6c2hvdy13aW5kb3ciLCBHX0NBTExCQUNL
KHNob3dJbnNwZWN0b3IpLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6Y2xv
c2Utd2luZG93IiwgR19DQUxMQkFDSyhjbG9zZUluc3BlY3RvciksICZ0aW1lc0Nsb3NlZCwKLSAg
ICAgICAgICAgICAgICAgICAgIE5VTEwpOwotCi0gICAgd2Via2l0X3dlYl9pbnNwZWN0b3JfaW5z
cGVjdF9jb29yZGluYXRlcyhpbnNwZWN0b3IsIDAuMCwgMC4wKTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQodGltZXNFbGVtZW50SW5zcGVjdGVkLCA9PSwgMSk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4o
bG9vcCk7Ci0KLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koR1RLX1dJREdFVCh3ZWJWaWV3KSk7Ci0g
ICAgZ19hc3NlcnRfY21waW50KHRpbWVzQ2xvc2VkLCA9PSwgMSk7Ci0KLSAgICBnX21haW5fbG9v
cF91bnJlZihsb29wKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQotewot
ICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdfdGVzdF9idWdf
YmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIv
d2Via2l0L3dlYmluc3BlY3Rvci9kZXN0cm95LWluc3BlY3RlZC13ZWItdmlldyIsIHRlc3Rfd2Vi
a2l0X3dlYl9pbnNwZWN0b3JfZGVzdHJveV9pbnNwZWN0ZWRfd2ViX3ZpZXcpOwotICAgIGdfdGVz
dF9hZGRfZnVuYygiL3dlYmtpdC93ZWJpbnNwZWN0b3IvY2xvc2UtYW5kLWluc3BlY3QiLCB0ZXN0
X3dlYmtpdF93ZWJfaW5zcGVjdG9yX2Nsb3NlX2FuZF9pbnNwZWN0KTsKLQotICAgIHJldHVybiBn
X3Rlc3RfcnVuKCk7Ci19CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdEd0ay90ZXN0d2VicGx1Z2luZGF0YWJhc2UuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R3RrL3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA2NTI4MTFiMTM5MDU4NzRjOTg3N2E0YTlhMDg5ZDU0ZDVlZWZiNTQ4Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJwbHVnaW5kYXRhYmFzZS5jCisrKyAvZGV2L251
bGwKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5M
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxnbGli
Lmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5j
bHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi0vKiBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBwdWJsaWMs
IHNvIHdlIG5lZWQgYW4gZXh0ZXJuIGRlY2xhcmF0aW9uICovCi1leHRlcm4gdm9pZCB3ZWJraXRf
d2ViX3NldHRpbmdzX2FkZF9leHRyYV9wbHVnaW5fZGlyZWN0b3J5KFdlYktpdFdlYlZpZXcqIHZp
ZXcsIGNvbnN0IGdjaGFyKiBkaXJlY3RvcnkpOwotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93
ZWJfcGx1Z2luX2RhdGFiYXNlX2dldF9wbHVnaW5zKCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB2
aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgV2ViS2l0
V2ViUGx1Z2luRGF0YWJhc2UqIGRhdGFiYXNlOwotICAgIEdTTGlzdCogcGx1Z2luTGlzdCwgKnA7
Ci0gICAgZ2Jvb2xlYW4gZm91bmQgPSBGQUxTRTsKLSAgICBnYm9vbGVhbiBlbmFibGVkID0gRkFM
U0U7Ci0KLSAgICB3ZWJraXRfd2ViX3NldHRpbmdzX2FkZF9leHRyYV9wbHVnaW5fZGlyZWN0b3J5
KHZpZXcsIFRFU1RfUExVR0lOX0RJUik7Ci0gICAgZ19vYmplY3RfcmVmX3NpbmsoR19PQkpFQ1Qo
dmlldykpOwotCi0gICAgZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X3dlYl9wbHVnaW5fZGF0YWJhc2Uo
KTsKLSAgICBwbHVnaW5MaXN0ID0gd2Via2l0X3dlYl9wbHVnaW5fZGF0YWJhc2VfZ2V0X3BsdWdp
bnMoZGF0YWJhc2UpOwotICAgIGZvciAocCA9IHBsdWdpbkxpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7
Ci0gICAgICAgIFdlYktpdFdlYlBsdWdpbiogcGx1Z2luID0gKFdlYktpdFdlYlBsdWdpbiopcC0+
ZGF0YTsKLSAgICAgICAgaWYgKCFnX3N0cmNtcDAod2Via2l0X3dlYl9wbHVnaW5fZ2V0X25hbWUo
cGx1Z2luKSwgIldlYktpdCBUZXN0IFBsdWdJbiIpICYmCi0gICAgICAgICAgICAhZ19zdHJjbXAw
KHdlYmtpdF93ZWJfcGx1Z2luX2dldF9kZXNjcmlwdGlvbihwbHVnaW4pLCAiU2ltcGxlIE5ldHNj
YXBlwq4gcGx1Zy1pbiB0aGF0IGhhbmRsZXMgdGVzdCBjb250ZW50IGZvciBXZWJLaXQiKSkgewot
ICAgICAgICAgICAgZm91bmQgPSBUUlVFOwotICAgICAgICAgICAgZW5hYmxlZCA9IHdlYmtpdF93
ZWJfcGx1Z2luX2dldF9lbmFibGVkKHBsdWdpbik7Ci0gICAgICAgICAgICB3ZWJraXRfd2ViX3Bs
dWdpbl9zZXRfZW5hYmxlZChwbHVnaW4sIEZBTFNFKTsKLSAgICAgICAgfQotICAgIH0KLSAgICB3
ZWJraXRfd2ViX3BsdWdpbl9kYXRhYmFzZV9wbHVnaW5zX2xpc3RfZnJlZShwbHVnaW5MaXN0KTsK
LSAgICBnX2Fzc2VydChmb3VuZCk7Ci0gICAgZ19hc3NlcnQoZW5hYmxlZCk7Ci0KLSAgICB3ZWJr
aXRfd2ViX3BsdWdpbl9kYXRhYmFzZV9yZWZyZXNoKGRhdGFiYXNlKTsKLSAgICBwbHVnaW5MaXN0
ID0gd2Via2l0X3dlYl9wbHVnaW5fZGF0YWJhc2VfZ2V0X3BsdWdpbnMoZGF0YWJhc2UpOwotCi0g
ICAgZm9yIChwID0gcGx1Z2luTGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKLSAgICAgICAgV2ViS2l0
V2ViUGx1Z2luKiBwbHVnaW4gPSAoV2ViS2l0V2ViUGx1Z2luKilwLT5kYXRhOwotICAgICAgICBp
ZiAoIWdfc3RyY21wMCh3ZWJraXRfd2ViX3BsdWdpbl9nZXRfbmFtZShwbHVnaW4pLCAiV2ViS2l0
IFRlc3QgUGx1Z0luIikgJiYKLSAgICAgICAgICAgICFnX3N0cmNtcDAod2Via2l0X3dlYl9wbHVn
aW5fZ2V0X2Rlc2NyaXB0aW9uKHBsdWdpbiksICJTaW1wbGUgTmV0c2NhcGXCriBwbHVnLWluIHRo
YXQgaGFuZGxlcyB0ZXN0IGNvbnRlbnQgZm9yIFdlYktpdCIpKQotICAgICAgICAgICAgZW5hYmxl
ZCA9IHdlYmtpdF93ZWJfcGx1Z2luX2dldF9lbmFibGVkKHBsdWdpbik7Ci0gICAgfQotICAgIHdl
YmtpdF93ZWJfcGx1Z2luX2RhdGFiYXNlX3BsdWdpbnNfbGlzdF9mcmVlKHBsdWdpbkxpc3QpOwot
ICAgIGdfYXNzZXJ0KCFlbmFibGVkKTsKLQotICAgIGdfb2JqZWN0X3VucmVmKHZpZXcpOwotfQot
Ci1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgZ3RrX3Rlc3RfaW5pdCgm
YXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy8iKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2VicGx1Z2luZGF0
YWJhc2UvZ2V0cGx1Z2lucyIsIHRlc3Rfd2Via2l0X3dlYl9wbHVnaW5fZGF0YWJhc2VfZ2V0X3Bs
dWdpbnMpOwotICAgIHJldHVybiBnX3Rlc3RfcnVuICgpOwotfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYnJlc291cmNlLmMgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2VicmVzb3VyY2UuYwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZmM1OGI3YWQ3MmExNjg3Zjg1YWMxMmFkZGM1NjZhODkxOWQ2
MzQxYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2VicmVzb3VyY2UuYworKysgL2Rl
di9udWxsCkBAIC0xLDMzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBN
aWNoYWVsIEFsb256bwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2lu
Y2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KLSNpbmNsdWRlIDxz
dHJpbmcuaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0KLSNkZWZpbmUgSU5ERVhfSFRN
TCAiPGh0bWw+PC9odG1sPiIKLSNkZWZpbmUgTUFJTl9IVE1MICI8aHRtbD48aGVhZD48c2NyaXB0
IGxhbmd1YWdlPVwiamF2YXNjcmlwdFwiIHNyYz1cIi9qYXZhc2NyaXB0LmpzXCI+PC9zY3JpcHQ+
PC9oZWFkPjxib2R5PjxoMT5oYWg8L2gxPjwvaHRtbD4iCi0jZGVmaW5lIEpBVkFTQ1JJUFQgImZ1
bmN0aW9uIGJsYWggKCkgeyB2YXIgYSA9IDE7IH0iCi0KLUdNYWluTG9vcCogbG9vcDsKLVNvdXBT
ZXNzaW9uICpzZXNzaW9uOwotY2hhciAqYmFzZV91cmk7Ci1XZWJLaXRXZWJSZXNvdXJjZSogbWFp
bl9yZXNvdXJjZTsKLVdlYktpdFdlYlJlc291cmNlKiBzdWJfcmVzb3VyY2U7Ci0KLXR5cGVkZWYg
c3RydWN0IHsKLSAgICBXZWJLaXRXZWJSZXNvdXJjZSogd2ViUmVzb3VyY2U7Ci0gICAgV2ViS2l0
V2ViVmlldyogd2ViVmlldzsKLX0gV2ViUmVzb3VyY2VGaXh0dXJlOwotCi0vKiBGb3IgcmVhbCBy
ZXF1ZXN0IHRlc3RpbmcgKi8KLXN0YXRpYyB2b2lkCi1zZXJ2ZXJfY2FsbGJhY2sgKFNvdXBTZXJ2
ZXIgKnNlcnZlciwgU291cE1lc3NhZ2UgKm1zZywKLSAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqcGF0aCwgR0hhc2hUYWJsZSAqcXVlcnksCi0gICAgICAgICAgICAgICAgIFNvdXBDbGllbnRD
b250ZXh0ICpjb250ZXh0LCBncG9pbnRlciBkYXRhKQotewotICAgIGlmIChtc2ctPm1ldGhvZCAh
PSBTT1VQX01FVEhPRF9HRVQpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMgKG1z
ZywgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzIChtc2csIFNPVVBfU1RBVFVTX09LKTsKLQot
ICAgIC8qIFJlZGlyZWN0ICovCi0gICAgaWYgKGdfc3RyX2VxdWFsIChwYXRoLCAiLyIpKSB7Ci0g
ICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzIChtc2csIFNPVVBfU1RBVFVTX01PVkVEX1BF
Uk1BTkVOVExZKTsKLQotICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQgKG1zZy0+
cmVzcG9uc2VfaGVhZGVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
TG9jYXRpb24iLCAiL2luZGV4Lmh0bWwiKTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsIChw
YXRoLCAiL2luZGV4Lmh0bWwiKSkgewotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQg
KG1zZy0+cmVzcG9uc2VfYm9keSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
T1VQX01FTU9SWV9DT1BZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOREVY
X0hUTUwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuIChJTkRFWF9I
VE1MKSk7Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbCAocGF0aCwgIi9tYWluLmh0bWwiKSkg
ewotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQgKG1zZy0+cmVzcG9uc2VfYm9keSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT1VQX01FTU9SWV9DT1BZLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BSU5fSFRNTCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJsZW4gKE1BSU5fSFRNTCkpOwotICAgIH0gZWxzZSBpZiAo
Z19zdHJfZXF1YWwgKHBhdGgsICIvamF2YXNjcmlwdC5qcyIpKSB7Ci0gICAgICAgIHNvdXBfbWVz
c2FnZV9ib2R5X2FwcGVuZCAobXNnLT5yZXNwb25zZV9ib2R5LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNPVVBfTUVNT1JZX0NPUFksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSkFWQVNDUklQVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJsZW4gKEpBVkFTQ1JJUFQpKTsKLSAgICB9Ci0KLQotICAgIHNvdXBfbWVzc2FnZV9ib2R5
X2NvbXBsZXRlIChtc2ctPnJlc3BvbnNlX2JvZHkpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJfcmVz
b3VyY2VfZml4dHVyZV9zZXR1cChXZWJSZXNvdXJjZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBv
aW50ZXIgZGF0YSkKLXsKLSAgICBmaXh0dXJlLT53ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdl
YmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3NpbmsoZml4dHVyZS0+d2Vi
Vmlldyk7Ci0gICAgY29uc3QgZ2NoYXIqIHdlYkRhdGEgPSAiPGh0bWw+PC9odG1sPiI7Ci0gICAg
Zml4dHVyZS0+d2ViUmVzb3VyY2UgPSB3ZWJraXRfd2ViX3Jlc291cmNlX25ldyh3ZWJEYXRhLCBz
dHJsZW4od2ViRGF0YSksICJodHRwOi8vZXhhbXBsZS5jb20vIiwgInRleHQvaHRtbCIsICJ1dGY4
IiwgIkV4YW1wbGUuY29tIik7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+d2ViUmVzb3VyY2UpOwot
fQotCi1zdGF0aWMgdm9pZCB3ZWJfcmVzb3VyY2VfZml4dHVyZV90ZWFyZG93bihXZWJSZXNvdXJj
ZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnX2Fzc2VydChm
aXh0dXJlLT53ZWJSZXNvdXJjZSk7Ci0gICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+d2ViUmVz
b3VyY2UpOwotICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPndlYlZpZXcpOwotfQotCi1zdGF0
aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VybChXZWJSZXNvdXJjZUZpeHR1
cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnY2hhciogdXJsOwotICAg
IGdfb2JqZWN0X2dldChHX09CSkVDVChmaXh0dXJlLT53ZWJSZXNvdXJjZSksICJ1cmkiLCAmdXJs
LCBOVUxMKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodXJsLCA9PSwgImh0dHA6Ly9leGFtcGxlLmNv
bS8iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKGZp
eHR1cmUtPndlYlJlc291cmNlKSAsPT0sImh0dHA6Ly9leGFtcGxlLmNvbS8iKTsKLSAgICBnX2Zy
ZWUodXJsKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3Jlc291cmNlX2dldF9k
YXRhKFdlYlJlc291cmNlRml4dHVyZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewot
ICAgIEdTdHJpbmcqIGNoYXJEYXRhID0gd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YShmaXh0
dXJlLT53ZWJSZXNvdXJjZSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGNoYXJEYXRhLT5zdHIsID09
LCAiPGh0bWw+PC9odG1sPiIpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfcmVz
b3VyY2VfZ2V0X21pbWVfdHlwZShXZWJSZXNvdXJjZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBv
aW50ZXIgZGF0YSkKLXsKLSAgICBnY2hhciogbWltZV90eXBlOwotICAgIGdfb2JqZWN0X2dldChH
X09CSkVDVChmaXh0dXJlLT53ZWJSZXNvdXJjZSksICJtaW1lLXR5cGUiLCAmbWltZV90eXBlLCBO
VUxMKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIobWltZV90eXBlLCA9PSwgInRleHQvaHRtbCIpOwot
ICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9taW1lX3R5cGUoZml4
dHVyZS0+d2ViUmVzb3VyY2UpLD09LCJ0ZXh0L2h0bWwiKTsKLSAgICBnX2ZyZWUobWltZV90eXBl
KTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3Jlc291cmNlX2dldF9lbmNvZGlu
ZyhXZWJSZXNvdXJjZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAg
ICBnY2hhciogdGV4dF9lbmNvZGluZzsKLSAgICBnX29iamVjdF9nZXQoR19PQkpFQ1QoZml4dHVy
ZS0+d2ViUmVzb3VyY2UpLCAiZW5jb2RpbmciLCAmdGV4dF9lbmNvZGluZywgTlVMTCk7Ci0gICAg
Z19hc3NlcnRfY21wc3RyKHRleHRfZW5jb2RpbmcsID09LCAidXRmOCIpOwotICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9lbmNvZGluZyhmaXh0dXJlLT53ZWJSZXNv
dXJjZSksPT0sInV0ZjgiKTsKLSAgICBnX2ZyZWUodGV4dF9lbmNvZGluZyk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZnJhbWVfbmFtZShXZWJSZXNvdXJj
ZUZpeHR1cmUqIGZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnY2hhciogZnJh
bWVfbmFtZTsKLSAgICBnX29iamVjdF9nZXQoR19PQkpFQ1QoZml4dHVyZS0+d2ViUmVzb3VyY2Up
LCAiZnJhbWUtbmFtZSIsICZmcmFtZV9uYW1lLCBOVUxMKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
ZnJhbWVfbmFtZSwgPT0sICJFeGFtcGxlLmNvbSIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJr
aXRfd2ViX3Jlc291cmNlX2dldF9mcmFtZV9uYW1lKGZpeHR1cmUtPndlYlJlc291cmNlKSw9PSwi
RXhhbXBsZS5jb20iKTsKLSAgICBnX2ZyZWUoZnJhbWVfbmFtZSk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHJlc291cmNlX3JlcXVlc3Rfc3RhcnRpbmdfY2IoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdl
YktpdFdlYkZyYW1lKiB3ZWJfZnJhbWUsIFdlYktpdFdlYlJlc291cmNlKiB3ZWJfcmVzb3VyY2Us
IFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0LCBXZWJLaXROZXR3b3JrUmVzcG9uc2UqIHJl
c3BvbnNlLCBncG9pbnRlciBkYXRhKQotewotICAgIGdpbnQqIGJlZW5fdGhlcmUgPSBkYXRhOwot
ICAgICpiZWVuX3RoZXJlID0gKmJlZW5fdGhlcmUgKyAxOwotCi0gICAgaWYgKCpiZWVuX3RoZXJl
ID09IDEpIHsKLSAgICAgICAgZ19hc3NlcnQoIW1haW5fcmVzb3VyY2UpOwotICAgICAgICBtYWlu
X3Jlc291cmNlID0gZ19vYmplY3RfcmVmKHdlYl9yZXNvdXJjZSk7Ci0KLSAgICAgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaSh3ZWJfcmVzb3VyY2UpLCA9PSwg
YmFzZV91cmkpOwotCi0gICAgICAgIC8qIFRoaXMgc2hvdWxkIGJlIGEgcmVkaXJlY3QsIHNvIHRo
ZSByZXNwb25zZSBtdXN0IGJlIE5VTEwgKi8KLSAgICAgICAgZ19hc3NlcnQoIXJlc3BvbnNlKTsK
LSAgICB9IGVsc2UgaWYgKCpiZWVuX3RoZXJlID09IDIpIHsKLSAgICAgICAgY2hhciogdXJpID0g
Z19zdHJkdXBfcHJpbnRmKCIlc2luZGV4Lmh0bWwiLCBiYXNlX3VyaSk7Ci0KLSAgICAgICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaSh3ZWJfcmVzb3VyY2UpLCA9
PSwgdXJpKTsKLQotICAgICAgICAvKiBDYW5jZWwgdGhlIHJlcXVlc3QuICovCi0gICAgICAgIHdl
YmtpdF9uZXR3b3JrX3JlcXVlc3Rfc2V0X3VyaShyZXF1ZXN0LCAiYWJvdXQ6YmxhbmsiKTsKLQot
ICAgICAgICBnX2ZyZWUodXJpKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIG5vdGlmeV9sb2Fk
X3N0YXR1c19jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR1BhcmFtU3BlYyogcHNwZWMsIGdw
b2ludGVyIGRhdGEpCi17Ci0gICAgaWYgKHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXMo
d2ViX3ZpZXcpID09IFdFQktJVF9MT0FEX0ZJTklTSEVEKSB7Ci0gICAgICAgIGdib29sZWFuKiBi
ZWVuX3RoZXJlID0gZGF0YTsKLSAgICAgICAgKmJlZW5fdGhlcmUgPSBUUlVFOwotCi0gICAgICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VyaSh3ZWJfdmlldyksID09LCAi
YWJvdXQ6YmxhbmsiKTsKLQotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotICAgIH0K
LX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJfcmVzb3VyY2VfbG9hZGluZygpCi17Ci0gICAgV2Vi
S2l0V2ViVmlldyogd2ViX3ZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25l
dygpKTsKLSAgICBnaW50IGJlZW5fdG9fcmVzb3VyY2VfcmVxdWVzdF9zdGFydGluZyA9IDA7Ci0g
ICAgZ2Jvb2xlYW4gYmVlbl90b19sb2FkX2ZpbmlzaGVkID0gRkFMU0U7Ci0gICAgV2ViS2l0V2Vi
RnJhbWUqIHdlYl9mcmFtZTsKLSAgICBXZWJLaXRXZWJEYXRhU291cmNlKiBkYXRhX3NvdXJjZTsK
LQotICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0KLSAgICBnX29iamVj
dF9yZWZfc2luayh3ZWJfdmlldyk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYl92aWV3LCAi
cmVzb3VyY2UtcmVxdWVzdC1zdGFydGluZyIsCi0gICAgICAgICAgICAgICAgICAgICBHX0NBTExC
QUNLKHJlc291cmNlX3JlcXVlc3Rfc3RhcnRpbmdfY2IpLAotICAgICAgICAgICAgICAgICAgICAg
JmJlZW5fdG9fcmVzb3VyY2VfcmVxdWVzdF9zdGFydGluZyk7Ci0KLSAgICBnX3NpZ25hbF9jb25u
ZWN0KHdlYl92aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsCi0gICAgICAgICAgICAgICAgICAg
ICBHX0NBTExCQUNLKG5vdGlmeV9sb2FkX3N0YXR1c19jYiksCi0gICAgICAgICAgICAgICAgICAg
ICAmYmVlbl90b19sb2FkX2ZpbmlzaGVkKTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3Vy
aSh3ZWJfdmlldywgYmFzZV91cmkpOwotCi0gICAgLyogV2Ugd29uJ3QgZ2V0IGZpbmlzaGVkIGlt
bWVkaWF0ZWx5LCBiZWNhdXNlIG9mIHRoZSByZWRpcmVjdCAqLwotICAgIGdfbWFpbl9sb29wX3J1
bihsb29wKTsKLSAgICAKLSAgICB3ZWJfZnJhbWUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5f
ZnJhbWUod2ViX3ZpZXcpOwotICAgIGRhdGFfc291cmNlID0gd2Via2l0X3dlYl9mcmFtZV9nZXRf
ZGF0YV9zb3VyY2Uod2ViX2ZyYW1lKTsKLQotICAgIGdfYXNzZXJ0KG1haW5fcmVzb3VyY2UpOwot
ICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfZGF0YV9zb3VyY2VfZ2V0X21haW5fcmVzb3VyY2UoZGF0
YV9zb3VyY2UpID09IG1haW5fcmVzb3VyY2UpOwotICAgIGdfb2JqZWN0X3VucmVmKG1haW5fcmVz
b3VyY2UpOwotICAgIAotICAgIGdfYXNzZXJ0X2NtcGludChiZWVuX3RvX3Jlc291cmNlX3JlcXVl
c3Rfc3RhcnRpbmcsID09LCAyKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYmVlbl90b19sb2FkX2Zp
bmlzaGVkLCA9PSwgVFJVRSk7Ci0KLSAgICBnX29iamVjdF91bnJlZih3ZWJfdmlldyk7Ci0gICAg
Z19tYWluX2xvb3BfdW5yZWYobG9vcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlc291cmNlX3JlcXVl
c3Rfc3RhcnRpbmdfc3ViX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBXZWJLaXRXZWJGcmFt
ZSogd2ViX2ZyYW1lLCBXZWJLaXRXZWJSZXNvdXJjZSogd2ViX3Jlc291cmNlLCBXZWJLaXROZXR3
b3JrUmVxdWVzdCogcmVxdWVzdCwgV2ViS2l0TmV0d29ya1Jlc3BvbnNlKiByZXNwb25zZSwgZ3Bv
aW50ZXIgZGF0YSkKLXsKLSAgICBpZiAoIW1haW5fcmVzb3VyY2UpCi0gICAgICAgIG1haW5fcmVz
b3VyY2UgPSBnX29iamVjdF9yZWYod2ViX3Jlc291cmNlKTsKLSAgICBlbHNlIGlmICghc3ViX3Jl
c291cmNlKQotICAgICAgc3ViX3Jlc291cmNlID0gZ19vYmplY3RfcmVmKHdlYl9yZXNvdXJjZSk7
Ci19Ci0KLXN0YXRpYyB2b2lkIG5vdGlmeV9sb2FkX3N0YXR1c19zdWJfY2IoV2ViS2l0V2ViVmll
dyogd2ViX3ZpZXcsIEdQYXJhbVNwZWMqIHBzcGVjLCBncG9pbnRlciBkYXRhKQotewotICAgIGlm
ICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKHdlYl92aWV3KSA9PSBXRUJLSVRfTE9B
RF9GSU5JU0hFRCkKLSAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLX0KLQotc3RhdGlj
IGdib29sZWFuIGlkbGVfcXVpdF9sb29wX2NiKGdwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19tYWlu
X2xvb3BfcXVpdChsb29wKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkIHRl
c3Rfd2ViX3Jlc291cmNlX3N1Yl9yZXNvdXJjZV9sb2FkaW5nKCkKLXsKLSAgICBXZWJLaXRXZWJW
aWV3KiB3ZWJfdmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOwot
ICAgIFdlYktpdFdlYkZyYW1lKiB3ZWJfZnJhbWU7Ci0gICAgV2ViS2l0V2ViRGF0YVNvdXJjZSog
ZGF0YV9zb3VyY2U7Ci0gICAgR0xpc3QqIHN1Yl9yZXNvdXJjZXM7Ci0gICAgY2hhciogdXJpID0g
Z19zdHJkdXBfcHJpbnRmKCIlc21haW4uaHRtbCIsIGJhc2VfdXJpKTsKLQotICAgIG1haW5fcmVz
b3VyY2UgPSBOVUxMOwotICAgIAotICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJV
RSk7Ci0KLSAgICBnX29iamVjdF9yZWZfc2luayh3ZWJfdmlldyk7Ci0KLSAgICBnX3NpZ25hbF9j
b25uZWN0KHdlYl92aWV3LCAicmVzb3VyY2UtcmVxdWVzdC1zdGFydGluZyIsCi0gICAgICAgICAg
ICAgICAgICAgICBHX0NBTExCQUNLKHJlc291cmNlX3JlcXVlc3Rfc3RhcnRpbmdfc3ViX2NiKSwK
LSAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJf
dmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLAotICAgICAgICAgICAgICAgICAgICAgR19DQUxM
QkFDSyhub3RpZnlfbG9hZF9zdGF0dXNfc3ViX2NiKSwKLSAgICAgICAgICAgICAgICAgICAgIE5V
TEwpOwotCi0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHdlYl92aWV3LCB1cmkpOwotCi0g
ICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgLyogVGhlIG1haW4gcmVzb3VyY2Ugc2hv
dWxkIGJlIGxvYWRlZDsgbm93IGxldCdzIHdhaXQgZm9yIHRoZSBzdWItcmVzb3VyY2UgdG8gbG9h
ZCAqLwotICAgIGdfaWRsZV9hZGQoaWRsZV9xdWl0X2xvb3BfY2IsIE5VTEwpOwotICAgIGdfbWFp
bl9sb29wX3J1bihsb29wKTsKLSAgICAKLSAgICBnX2Fzc2VydChtYWluX3Jlc291cmNlICYmIHN1
Yl9yZXNvdXJjZSk7Ci0gICAgZ19hc3NlcnQobWFpbl9yZXNvdXJjZSAhPSBzdWJfcmVzb3VyY2Up
OwotCi0gICAgd2ViX2ZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHdlYl92
aWV3KTsKLSAgICBkYXRhX3NvdXJjZSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2RhdGFfc291cmNl
KHdlYl9mcmFtZSk7Ci0KLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2RhdGFfc291cmNlX2dldF9t
YWluX3Jlc291cmNlKGRhdGFfc291cmNlKSA9PSBtYWluX3Jlc291cmNlKTsKLSAgICBnX29iamVj
dF91bnJlZihtYWluX3Jlc291cmNlKTsKLQotICAgIHN1Yl9yZXNvdXJjZXMgPSB3ZWJraXRfd2Vi
X2RhdGFfc291cmNlX2dldF9zdWJyZXNvdXJjZXMoZGF0YV9zb3VyY2UpOwotICAgIC8vIEV4cGVj
dGVkIHJlc291cmNlczogamF2YXNjcmlwdHMuanMsIGZhdmljb24uaWNvCi0gICAgZ19hc3NlcnQo
c3ViX3Jlc291cmNlcyk7Ci0gICAgZ19hc3NlcnQoc3ViX3Jlc291cmNlcy0+bmV4dCk7Ci0gICAg
Z19hc3NlcnQoIXN1Yl9yZXNvdXJjZXMtPm5leHQtPm5leHQpOwotCi0gICAgLy8gVGVzdCB0aGF0
IHRoZSBvYmplY3Qgd2UgZ290IGZyb20gdGhlIGRhdGEgc291cmNlIGlzIHRoZSBzYW1lCi0gICAg
Ly8gdGhhdCB3ZW50IHRocm91Z2ggcmVzb3VyY2UtcmVxdWVzdC1zdGFydGluZy4gTm90ZSB0aGF0
IHRoZSBvcmRlciBpcwotICAgIC8vIG5vdCBpbXBvcnRhbnQgKGFuZCBub3QgZ3VhcmFudGVlZCBz
aW5jZSB0aGUgcmVzb3VyY2VzIGFyZSBzdG9yZWQgaW4gYQotICAgIC8vIGhhc2h0YWJsZSkuCi0g
ICAgZ19hc3NlcnQoV0VCS0lUX1dFQl9SRVNPVVJDRShzdWJfcmVzb3VyY2VzLT5kYXRhKSA9PSBz
dWJfcmVzb3VyY2UKLSAgICAgICAgICAgICB8fCBXRUJLSVRfV0VCX1JFU09VUkNFKHN1Yl9yZXNv
dXJjZXMtPm5leHQtPmRhdGEpID09IHN1Yl9yZXNvdXJjZSk7Ci0KLSAgICBnX29iamVjdF91bnJl
Zih3ZWJfdmlldyk7Ci0gICAgZ19tYWluX2xvb3BfdW5yZWYobG9vcCk7Ci19Ci0KLWludCBtYWlu
KGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBTb3VwU2VydmVyKiBzZXJ2ZXI7Ci0gICAg
U291cFVSSSogc291cF91cmk7Ci0KLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVM
TCk7Ci0KLSAgICBzZXJ2ZXIgPSBzb3VwX3NlcnZlcl9uZXcoU09VUF9TRVJWRVJfUE9SVCwgMCwg
TlVMTCk7Ci0gICAgc291cF9zZXJ2ZXJfcnVuX2FzeW5jKHNlcnZlcik7Ci0KLSAgICBzb3VwX3Nl
cnZlcl9hZGRfaGFuZGxlcihzZXJ2ZXIsIE5VTEwsIHNlcnZlcl9jYWxsYmFjaywgTlVMTCwgTlVM
TCk7Ci0KLSAgICBzb3VwX3VyaSA9IHNvdXBfdXJpX25ldygiaHR0cDovLzEyNy4wLjAuMS8iKTsK
LSAgICBzb3VwX3VyaV9zZXRfcG9ydChzb3VwX3VyaSwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQoc2Vy
dmVyKSk7Ci0KLSAgICBiYXNlX3VyaSA9IHNvdXBfdXJpX3RvX3N0cmluZyhzb3VwX3VyaSwgRkFM
U0UpOwotICAgIHNvdXBfdXJpX2ZyZWUoc291cF91cmkpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNl
KCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0L3dl
YnJlc291cmNlL2dldF91cmwiLAotICAgICAgICAgICAgICAgV2ViUmVzb3VyY2VGaXh0dXJlLCAw
LCB3ZWJfcmVzb3VyY2VfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0
X3dlYl9yZXNvdXJjZV9nZXRfdXJsLCB3ZWJfcmVzb3VyY2VfZml4dHVyZV90ZWFyZG93bik7Ci0g
ICAgZ190ZXN0X2FkZCgiL3dlYmtpdC93ZWJyZXNvdXJjZS9nZXRfbWltZV90eXBlIiwKLSAgICAg
ICAgICAgICAgIFdlYlJlc291cmNlRml4dHVyZSwgMCwgd2ViX3Jlc291cmNlX2ZpeHR1cmVfc2V0
dXAsCi0gICAgICAgICAgICAgICB0ZXN0X3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X21pbWVfdHlw
ZSwgd2ViX3Jlc291cmNlX2ZpeHR1cmVfdGVhcmRvd24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJr
aXQvd2VicmVzb3VyY2UvZ2V0X3RleHRfZW5jb2RpbmdfbmFtZSIsCi0gICAgICAgICAgICAgICBX
ZWJSZXNvdXJjZUZpeHR1cmUsIDAsIHdlYl9yZXNvdXJjZV9maXh0dXJlX3NldHVwLAotICAgICAg
ICAgICAgICAgdGVzdF93ZWJraXRfd2ViX3Jlc291cmNlX2dldF9lbmNvZGluZywgd2ViX3Jlc291
cmNlX2ZpeHR1cmVfdGVhcmRvd24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvd2VicmVzb3Vy
Y2UvZ2V0X2ZyYW1lX25hbWUiLAotICAgICAgICAgICAgICAgV2ViUmVzb3VyY2VGaXh0dXJlLCAw
LCB3ZWJfcmVzb3VyY2VfZml4dHVyZV9zZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0
X3dlYl9yZXNvdXJjZV9nZXRfZnJhbWVfbmFtZSwgd2ViX3Jlc291cmNlX2ZpeHR1cmVfdGVhcmRv
d24pOwotICAgIGdfdGVzdF9hZGQoIi93ZWJraXQvd2VicmVzb3VyY2UvZ2V0X2RhdGEiLAotICAg
ICAgICAgICAgICAgV2ViUmVzb3VyY2VGaXh0dXJlLCAwLCB3ZWJfcmVzb3VyY2VfZml4dHVyZV9z
ZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3Rfd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YSwg
d2ViX3Jlc291cmNlX2ZpeHR1cmVfdGVhcmRvd24pOwotCi0gICAgZ190ZXN0X2FkZF9mdW5jKCIv
d2Via2l0L3dlYnJlc291cmNlL2xvYWRpbmciLCB0ZXN0X3dlYl9yZXNvdXJjZV9sb2FkaW5nKTsK
LSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvd2VicmVzb3VyY2Uvc3ViX3Jlc291cmNlX2xv
YWRpbmciLCB0ZXN0X3dlYl9yZXNvdXJjZV9zdWJfcmVzb3VyY2VfbG9hZGluZyk7Ci0KLSAgICBy
ZXR1cm4gZ190ZXN0X3J1biAoKTsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0R3RrL3Rlc3R3ZWJzZXR0aW5ncy5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRHdGsvdGVzdHdlYnNldHRpbmdzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDM1NDg5Y2RkZDk5MzQ1MTg4MmE2ODk3NDA5ODEyZDg0MjIxMWE3MzQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYnNldHRpbmdzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwx
NTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gTWljaGFlbCBBbG9uem8K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxndGsvZ3Rr
Lmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi0vKiBQcml2YXRlIEFQSSAqLwotY2hh
ciogd2Via2l0V2ViU2V0dGluZ3NVc2VyQWdlbnRGb3JVUkkoV2ViS2l0V2ViU2V0dGluZ3MgKnNl
dHRpbmdzLCBjb25zdCBjaGFyICp1cmkpOwotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJf
c2V0dGluZ3NfY29weSh2b2lkKQotewotICAgIFdlYktpdFdlYlNldHRpbmdzICpzZXR0aW5ncyA9
IHdlYmtpdF93ZWJfc2V0dGluZ3NfbmV3KCk7Ci0KLSAgICAvLyBTZXQgc29tZSBub24tZGVmYXVs
dCBzZXR0aW5ncyB0byB2ZXJpZnkgdGhhdCBzZXR0aW5ncyBhcmUgcHJvcGVybHkgY29waWVkLgot
ICAgIGdfb2JqZWN0X3NldChzZXR0aW5ncywKLSAgICAgICAgICAgICAgICAgImVuYWJsZS13ZWJn
bCIsIFRSVUUsCi0gICAgICAgICAgICAgICAgICJlbmFibGUtZnVsbHNjcmVlbiIsIFRSVUUsCi0g
ICAgICAgICAgICAgICAgICJhdXRvLWxvYWQtaW1hZ2VzIiwgRkFMU0UsCi0gICAgICAgICAgICAg
ICAgICJkZWZhdWx0LWVuY29kaW5nIiwgInV0Zi04IiwKLSAgICAgICAgICAgICAgICAgImVuYWJs
ZS1tZWRpYXNvdXJjZSIsIFRSVUUsCi0gICAgICAgICAgICAgICAgIE5VTEwpOwotCi0gICAgV2Vi
S2l0V2ViU2V0dGluZ3MgKmNvcHkgPSB3ZWJraXRfd2ViX3NldHRpbmdzX2NvcHkoc2V0dGluZ3Mp
OwotCi0gICAgZ2Jvb2xlYW4gZW5hYmxlV2ViR0wgPSBGQUxTRTsKLSAgICBnYm9vbGVhbiBlbmFi
bGVGdWxsc2NyZWVuID0gRkFMU0U7Ci0gICAgZ2Jvb2xlYW4gYXV0b0xvYWRJbWFnZXMgPSBGQUxT
RTsKLSAgICBnYm9vbGVhbiBlbmFibGVNZWRpYVNvdXJjZSA9IEZBTFNFOwotICAgIGNoYXIgKmRl
ZmF1bHRFbmNvZGluZyA9IDA7Ci0gICAgZ19vYmplY3RfZ2V0KGNvcHksCi0gICAgICAgICAgICAg
ICAgICJlbmFibGUtZnVsbHNjcmVlbiIsICZlbmFibGVGdWxsc2NyZWVuLAotICAgICAgICAgICAg
ICAgICAiZW5hYmxlLXdlYmdsIiwgJmVuYWJsZVdlYkdMLAotICAgICAgICAgICAgICAgICAiYXV0
by1sb2FkLWltYWdlcyIsICZhdXRvTG9hZEltYWdlcywKLSAgICAgICAgICAgICAgICAgImRlZmF1
bHQtZW5jb2RpbmciLCAmZGVmYXVsdEVuY29kaW5nLAotICAgICAgICAgICAgICAgICAiZW5hYmxl
LW1lZGlhc291cmNlIiwgJmVuYWJsZU1lZGlhU291cmNlLAotICAgICAgICAgICAgICAgICBOVUxM
KTsKLQotICAgIGdfYXNzZXJ0KGVuYWJsZVdlYkdMKTsKLSAgICBnX2Fzc2VydChlbmFibGVGdWxs
c2NyZWVuKTsKLSAgICBnX2Fzc2VydCghYXV0b0xvYWRJbWFnZXMpOwotICAgIGdfYXNzZXJ0X2Nt
cHN0cihkZWZhdWx0RW5jb2RpbmcsID09LCAidXRmLTgiKTsKLSAgICBnX2Fzc2VydChlbmFibGVN
ZWRpYVNvdXJjZSk7Ci0gICAgZ19mcmVlKGRlZmF1bHRFbmNvZGluZyk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHRlc3Rfbm9uX3F1aXJreV91c2VyX2FnZW50cyhXZWJLaXRXZWJTZXR0aW5ncyAqc2V0dGlu
Z3MsIGNvbnN0IGNoYXIgKmRlZmF1bHRVc2VyQWdlbnQpCi17Ci0gICAgY2hhciAqdXNlckFnZW50
ID0gMDsKLQotICAgIC8vIHRlc3QgYSBjdXN0b20gVUEgc3RyaW5nCi0gICAgdXNlckFnZW50ID0g
MDsKLSAgICBnX29iamVjdF9zZXQoc2V0dGluZ3MsICJ1c2VyLWFnZW50IiwgInRlc3R3ZWJzZXR0
aW5ncy8wLjEiLCBOVUxMKTsKLSAgICBnX29iamVjdF9nZXQoc2V0dGluZ3MsInVzZXItYWdlbnQi
LCAmdXNlckFnZW50LCBOVUxMKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodXNlckFnZW50LCA9PSwg
InRlc3R3ZWJzZXR0aW5ncy8wLjEiKTsKLSAgICBnX2ZyZWUodXNlckFnZW50KTsKLQotICAgIC8v
IHNldHRpbmcgaXQgdG8gTlVMTCBvciBhbiBlbXB0eSB2YWx1ZSBzaG91bGQgZ2l2ZSB1cyB0aGUg
ZGVmYXVsdCBVQSBzdHJpbmcKLSAgICB1c2VyQWdlbnQgPSAwOwotICAgIGdfb2JqZWN0X3NldChz
ZXR0aW5ncywgInVzZXItYWdlbnQiLCAwLCBOVUxMKTsKLSAgICBnX29iamVjdF9nZXQoc2V0dGlu
Z3MsInVzZXItYWdlbnQiLCAmdXNlckFnZW50LCBOVUxMKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIo
dXNlckFnZW50LCA9PSwgZGVmYXVsdFVzZXJBZ2VudCk7Ci0gICAgZ19mcmVlKHVzZXJBZ2VudCk7
Ci0KLSAgICB1c2VyQWdlbnQgPSAwOwotICAgIGdfb2JqZWN0X3NldChzZXR0aW5ncywgInVzZXIt
YWdlbnQiLCAiIiwgTlVMTCk7Ci0gICAgZ19vYmplY3RfZ2V0KHNldHRpbmdzLCJ1c2VyLWFnZW50
IiwgJnVzZXJBZ2VudCwgTlVMTCk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHVzZXJBZ2VudCwgPT0s
IGRlZmF1bHRVc2VyQWdlbnQpOwotICAgIGdfZnJlZSh1c2VyQWdlbnQpOwotfQotCi1zdGF0aWMg
dm9pZCB0ZXN0X3dlYmtpdF93ZWJfc2V0dGluZ3NfdXNlcl9hZ2VudCh2b2lkKQotewotICAgIFdl
YktpdFdlYlNldHRpbmdzICpzZXR0aW5nczsKLSAgICBHdGtXaWRnZXQgKndlYlZpZXc7Ci0gICAg
Y2hhciAqZGVmYXVsdFVzZXJBZ2VudDsKLSAgICBjaGFyICp1c2VyQWdlbnQgPSAwOwotICAgIGdf
dGVzdF9idWcoIjE3Mzc1Iik7Ci0KLSAgICB3ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygp
OwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOwotCi0gICAgc2V0dGluZ3MgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSk7Ci0gICAg
ZGVmYXVsdFVzZXJBZ2VudCA9IGdfc3RyZHVwKHdlYmtpdF93ZWJfc2V0dGluZ3NfZ2V0X3VzZXJf
YWdlbnQoc2V0dGluZ3MpKTsKLQotICAgIHRlc3Rfbm9uX3F1aXJreV91c2VyX2FnZW50cyhzZXR0
aW5ncywgZGVmYXVsdFVzZXJBZ2VudCk7Ci0KLSAgICAvKiBUZXN0IHF1aXJreSBnb29nbGUgZG9t
YWlucyAqLwotICAgIGdfb2JqZWN0X3NldChzZXR0aW5ncywgInVzZXItYWdlbnQiLCAidGVzdHdl
YnNldHRpbmdzLzAuMSIsIE5VTEwpOwotCi0gICAgdXNlckFnZW50ID0gd2Via2l0V2ViU2V0dGlu
Z3NVc2VyQWdlbnRGb3JVUkkoc2V0dGluZ3MsICJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIik7Ci0g
ICAgZ19hc3NlcnRfY21wc3RyKHVzZXJBZ2VudCwgPT0sICJ0ZXN0d2Vic2V0dGluZ3MvMC4xIik7
Ci0gICAgZ19mcmVlKHVzZXJBZ2VudCk7Ci0KLSAgICB1c2VyQWdlbnQgPSB3ZWJraXRXZWJTZXR0
aW5nc1VzZXJBZ2VudEZvclVSSShzZXR0aW5ncywgImh0dHA6Ly9nbWFpbC5jb20vIik7Ci0gICAg
Z19hc3NlcnRfY21wc3RyKHVzZXJBZ2VudCwgPT0sICJ0ZXN0d2Vic2V0dGluZ3MvMC4xIik7Ci0g
ICAgZ19mcmVlKHVzZXJBZ2VudCk7Ci0KLSAgICB1c2VyQWdlbnQgPSB3ZWJraXRXZWJTZXR0aW5n
c1VzZXJBZ2VudEZvclVSSShzZXR0aW5ncywgImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS5ici8iKTsK
LSAgICBnX2Fzc2VydF9jbXBzdHIodXNlckFnZW50LCA9PSwgInRlc3R3ZWJzZXR0aW5ncy8wLjEi
KTsKLSAgICBnX2ZyZWUodXNlckFnZW50KTsKLQotICAgIHVzZXJBZ2VudCA9IHdlYmtpdFdlYlNl
dHRpbmdzVXNlckFnZW50Rm9yVVJJKHNldHRpbmdzLCAiaHR0cDovL2NhbGVuZGFyLmdvb2dsZS5j
b20vIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHVzZXJBZ2VudCwgPT0sICJ0ZXN0d2Vic2V0dGlu
Z3MvMC4xIik7Ci0gICAgZ19mcmVlKHVzZXJBZ2VudCk7Ci0KLSAgICAvKiBOb3cgZW5hYmxlIHF1
aXJrcyBoYW5kbGluZyAqLwotICAgIGdfb2JqZWN0X3NldChzZXR0aW5ncywgImVuYWJsZS1zaXRl
LXNwZWNpZmljLXF1aXJrcyIsIFRSVUUsIE5VTEwpOwotCi0gICAgdGVzdF9ub25fcXVpcmt5X3Vz
ZXJfYWdlbnRzKHNldHRpbmdzLCBkZWZhdWx0VXNlckFnZW50KTsKLQotICAgIGdfb2JqZWN0X3Nl
dChzZXR0aW5ncywgInVzZXItYWdlbnQiLCAidGVzdHdlYnNldHRpbmdzLzAuMSIsIE5VTEwpOwot
Ci0gICAgdXNlckFnZW50ID0gd2Via2l0V2ViU2V0dGluZ3NVc2VyQWdlbnRGb3JVUkkoc2V0dGlu
Z3MsICJodHRwOi8vd3d3Lmdvb2dsZS5jb20vIik7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHVzZXJB
Z2VudCwgPT0sIGRlZmF1bHRVc2VyQWdlbnQpOwotICAgIGdfZnJlZSh1c2VyQWdlbnQpOwotCi0g
ICAgdXNlckFnZW50ID0gd2Via2l0V2ViU2V0dGluZ3NVc2VyQWdlbnRGb3JVUkkoc2V0dGluZ3Ms
ICJodHRwOi8vZ21haWwuY29tLyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09
LCBkZWZhdWx0VXNlckFnZW50KTsKLSAgICBnX2ZyZWUodXNlckFnZW50KTsKLQotICAgIHVzZXJB
Z2VudCA9IHdlYmtpdFdlYlNldHRpbmdzVXNlckFnZW50Rm9yVVJJKHNldHRpbmdzLCAiaHR0cDov
L3d3dy5nb29nbGUuY29tLmJyLyIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cih1c2VyQWdlbnQsID09
LCBkZWZhdWx0VXNlckFnZW50KTsKLSAgICBnX2ZyZWUodXNlckFnZW50KTsKLQotICAgIHVzZXJB
Z2VudCA9IHdlYmtpdFdlYlNldHRpbmdzVXNlckFnZW50Rm9yVVJJKHNldHRpbmdzLCAiaHR0cDov
L3d3dy5nb29nbGUudWsubm90LmNvbS5ici8iKTsKLSAgICBnX2Fzc2VydF9jbXBzdHIodXNlckFn
ZW50LCA9PSwgInRlc3R3ZWJzZXR0aW5ncy8wLjEiKTsKLSAgICBnX2ZyZWUodXNlckFnZW50KTsK
LQotICAgIGdfZnJlZShkZWZhdWx0VXNlckFnZW50KTsKLSAgICBnX29iamVjdF91bnJlZih3ZWJW
aWV3KTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAgIGd0a190
ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dl
YnNldHRpbmdzL3VzZXJfYWdlbnQiLCB0ZXN0X3dlYmtpdF93ZWJfc2V0dGluZ3NfdXNlcl9hZ2Vu
dCk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnNldHRpbmdzL2NvcHkiLCB0ZXN0
X3dlYmtpdF93ZWJfc2V0dGluZ3NfY29weSk7Ci0gICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7Ci19
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2Vi
dmlldy5jIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvdGVzdHdlYnZpZXcu
YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNjMzYxYmMwNGFjM2ZhZTgyYWZjMmVk
MDM2MTUzOGRiY2NlMWQwNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2Vidmlldy5j
CisrKyAvZGV2L251bGwKQEAgLTEsNzI0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAx
MCBDb2xsYWJvcmEgTHRkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJ0ZXN0X3V0aWxzLmgiCi0KLSNpbmNsdWRlIDxlcnJu
by5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVk
ZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+Ci0jaW5jbHVkZSA8Z2RrL2dkay5o
PgotI2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2lu
Y2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotR01haW5Mb29wKiBsb29wOwotU291cFNlc3Npb24g
KnNlc3Npb247Ci1jaGFyKiBiYXNlX3VyaTsKLQotLyogRm9yIHJlYWwgcmVxdWVzdCB0ZXN0aW5n
ICovCi1zdGF0aWMgdm9pZAotc2VydmVyX2NhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291
cE1lc3NhZ2UqIG1zZywKLSAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcGF0aCwgR0hhc2hU
YWJsZSogcXVlcnksCi0gICAgICAgICAgICAgICAgIFNvdXBDbGllbnRDb250ZXh0KiBjb250ZXh0
LCBncG9pbnRlciBkYXRhKQotewotICAgIGlmIChtc2ctPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9H
RVQpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19O
T1RfSU1QTEVNRU5URUQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc291cF9tZXNz
YWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19PSyk7Ci0KLSAgICBpZiAoZ19zdHJfZXF1
YWwocGF0aCwgIi9mYXZpY29uLmljbyIpKSB7Ci0gICAgICAgIGNoYXIqIGNvbnRlbnRzOwotICAg
ICAgICBnc2l6ZSBsZW5ndGg7Ci0gICAgICAgIEdFcnJvciogZXJyb3IgPSBOVUxMOwotCi0gICAg
ICAgIGdfZmlsZV9nZXRfY29udGVudHMoImJsYW5rLmljbyIsICZjb250ZW50cywgJmxlbmd0aCwg
JmVycm9yKTsKLSAgICAgICAgZ19hc3NlcnQoIWVycm9yKTsKLQotICAgICAgICBzb3VwX21lc3Nh
Z2VfYm9keV9hcHBlbmQobXNnLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250
ZW50cywgbGVuZ3RoKTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvYmlnZGl2
Lmh0bWwiKSkgewotICAgICAgICBjaGFyKiBjb250ZW50cyA9IGdfc3RyZHVwKCI8aHRtbD48Ym9k
eT48YSBpZD1cImxpbmtcIiBocmVmPVwiaHR0cDovL2FiYy5kZWZcIj50ZXN0PC9hPjxkaXYgc3R5
bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsgaGVpZ2h0OiAxMjAwcHg7XCI+PC9kaXY+PC9i
b2R5PjwvaHRtbD4iKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVz
cG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIHN0cmxlbihjb250ZW50cykp
OwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9pZnJhbWUuaHRtbCIpKSB7Ci0g
ICAgICAgIGNoYXIqIGNvbnRlbnRzID0gZ19zdHJkdXAoIjxodG1sPjxib2R5IGlkPVwic29tZS1j
b250ZW50XCI+PGRpdiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IGdyZWVuOyBoZWlnaHQ6IDUw
cHg7XCI+PC9kaXY+PGlmcmFtZSBzcmM9XCJiaWdkaXYuaHRtbFwiPjwvaWZyYW1lPjwvYm9keT48
L2h0bWw+Iik7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNl
X2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBzdHJsZW4oY29udGVudHMpKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBjaGFyKiBjb250ZW50cyA9IGdfc3RyZHVwKCI8aHRtbD48Ym9k
eT50ZXN0PC9ib2R5PjwvaHRtbD4iKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5k
KG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIHN0cmxlbihj
b250ZW50cykpOwotICAgIH0KLQotICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1zZy0+
cmVzcG9uc2VfYm9keSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlkbGVfcXVpdF9sb29wX2NiKFdlYktp
dFdlYlZpZXcqIHdlYl92aWV3LCBHUGFyYW1TcGVjKiBwc3BlYywgZ3BvaW50ZXIgZGF0YSkKLXsK
LSAgICBpZiAod2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJfdmlldykgPT0gV0VC
S0lUX0xPQURfRklOSVNIRUQgfHwKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0
YXR1cyh3ZWJfdmlldykgPT0gV0VCS0lUX0xPQURfRkFJTEVEKQotICAgICAgICBnX21haW5fbG9v
cF9xdWl0KGxvb3ApOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gdGltZW91dF9jYihncG9pbnRlciBk
YXRhKQotewotICAgIGdfZXJyb3IoIkRpZG4ndCBnZXQgaWNvbi11cmkgYmVmb3JlIHRpbWluZyBv
dXQuIik7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCBpY29uX3VyaV9jaGFu
Z2VkX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBHUGFyYW1TcGVjKiBwc3BlYywgZ3BvaW50
ZXIgZGF0YSkKLXsKLSAgICBjaGFyKiBleHBlY3RlZF91cmk7Ci0KLSAgICBnX2Fzc2VydF9jbXBz
dHIoZ19wYXJhbV9zcGVjX2dldF9uYW1lKHBzcGVjKSwgPT0sICJpY29uLXVyaSIpOwotCi0gICAg
ZXhwZWN0ZWRfdXJpID0gZ19zdHJkdXBfcHJpbnRmKCIlc2Zhdmljb24uaWNvIiwgYmFzZV91cmkp
OwotICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ljb25fdXJpKHdlYl92
aWV3KSwgPT0sIGV4cGVjdGVkX3VyaSk7Ci0gICAgZ19mcmVlKGV4cGVjdGVkX3VyaSk7Ci0KLSAg
ICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCBpY29uX2xvYWRlZF9j
YihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgY2hhciogaWNvbl91cmksIGdwb2ludGVyIGRhdGEp
Ci17Ci0gICAgZ2Jvb2xlYW4qIGJlZW5faGVyZSA9IChnYm9vbGVhbiopZGF0YTsKLSAgICBjaGFy
KiBleHBlY3RlZF91cmkgPSBnX3N0cmR1cF9wcmludGYoIiVzZmF2aWNvbi5pY28iLCBiYXNlX3Vy
aSk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKGljb25fdXJpLCA9PSwgZXhwZWN0ZWRfdXJpKTsKLSAg
ICBnX2ZyZWUoZXhwZWN0ZWRfdXJpKTsKLQotICAgIGdfYXNzZXJ0X2NtcHN0cihpY29uX3VyaSwg
PT0sIHdlYmtpdF93ZWJfdmlld19nZXRfaWNvbl91cmkod2ViX3ZpZXcpKTsKLQotICAgICpiZWVu
X2hlcmUgPSBUUlVFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfdmlld19pY29u
X3VyaSgpCi17Ci0gICAgZ2Jvb2xlYW4gYmVlbl90b19pY29uX2xvYWRlZCA9IEZBTFNFOwotICAg
IFdlYktpdFdlYlZpZXcqIHZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25l
dygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayhHX09CSkVDVCh2aWV3KSk7Ci0KLSAgICBsb29w
ID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0gICAgZ19vYmplY3RfY29ubmVjdChH
X09CSkVDVCh2aWV3KSwKLSAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6Om5vdGlmeTo6aWNv
bi11cmkiLCBpY29uX3VyaV9jaGFuZ2VkX2NiLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAg
InNpZ25hbDo6aWNvbi1sb2FkZWQiLCBpY29uX2xvYWRlZF9jYiwgJmJlZW5fdG9faWNvbl9sb2Fk
ZWQsCi0gICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAgIHdlYmtpdF93ZWJfdmlld19s
b2FkX3VyaSh2aWV3LCBiYXNlX3VyaSk7Ci0KLSAgICBndWludCB0aW1lb3V0X2lkID0gZ190aW1l
b3V0X2FkZCg1MDAsIHRpbWVvdXRfY2IsIDApOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3Ap
OwotCi0gICAgZ19zb3VyY2VfcmVtb3ZlKHRpbWVvdXRfaWQpOwotCi0gICAgZ19hc3NlcnQoYmVl
bl90b19pY29uX2xvYWRlZCk7Ci0KLSAgICBnX29iamVjdF91bnJlZih2aWV3KTsKLX0KLQotc3Rh
dGljIGdib29sZWFuIG1hcF9ldmVudF9jYihHdGtXaWRnZXQgKndpZGdldCwgR2RrRXZlbnQqIGV2
ZW50LCBncG9pbnRlciBkYXRhKQotewotICAgIEdNYWluTG9vcCogbG9vcCA9IChHTWFpbkxvb3Aq
KWRhdGE7Ci0gICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLQotICAgIHJldHVybiBGQUxTRTsK
LX0KLQotc3RhdGljIGdib29sZWFuIHF1aXRfYWZ0ZXJfc2hvcnRfZGVsYXlfY2IoZ3BvaW50ZXIg
ZGF0YSkKLXsKLSAgICBnX21haW5fbG9vcF9xdWl0KChHTWFpbkxvb3AqKWRhdGEpOwotICAgIHJl
dHVybiBGQUxTRTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZ3JhYl9m
b2N1cygpCi17Ci0gICAgY2hhciogdXJpID0gZ19zdHJjb25jYXQoYmFzZV91cmksICJpZnJhbWUu
aHRtbCIsIE5VTEwpOwotICAgIEd0a1dpZGdldCogd2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RL
X1dJTkRPV19QT1BVUCk7Ci0gICAgR3RrV2lkZ2V0KiBzY3JvbGxlZF93aW5kb3cgPSBndGtfc2Ny
b2xsZWRfd2luZG93X25ldyhOVUxMLCBOVUxMKTsKLSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0g
V0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgR3RrQWRqdXN0bWVu
dCogYWRqdXN0bWVudDsKLQotICAgIGd0a193aW5kb3dfc2V0X2RlZmF1bHRfc2l6ZShHVEtfV0lO
RE9XKHdpbmRvdyksIDQwMCwgMjAwKTsKLQotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05U
QUlORVIod2luZG93KSwgc2Nyb2xsZWRfd2luZG93KTsKLSAgICBndGtfY29udGFpbmVyX2FkZChH
VEtfQ09OVEFJTkVSKHNjcm9sbGVkX3dpbmRvdyksIEdUS19XSURHRVQodmlldykpOwotCi0gICAg
Z3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xs
ZWRfd2luZG93KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1BPTElD
WV9BVVRPTUFUSUMsIEdUS19QT0xJQ1lfQVVUT01BVElDKTsKLQotICAgIGxvb3AgPSBnX21haW5f
bG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KHZpZXcsICJub3Rp
Znk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhpZGxlX3F1aXRfbG9vcF9jYiksIE5VTEwpOwot
Ci0gICAgLyogV2FpdCBmb3Igd2luZG93IHRvIHNob3cgdXAgKi8KLSAgICBndGtfd2lkZ2V0X3No
b3dfYWxsKHdpbmRvdyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdCh3aW5kb3csICJtYXAtZXZlbnQi
LAotICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyhtYXBfZXZlbnRfY2IpLCBsb29wKTsK
LSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICAvKiBMb2FkIGEgcGFnZSB3aXRoIGEg
YmlnIGRpdiB0aGF0IHdpbGwgY2F1c2Ugc2Nyb2xsYmFycyB0byBhcHBlYXIgKi8KLSAgICB3ZWJr
aXRfd2ViX3ZpZXdfbG9hZF91cmkodmlldywgdXJpKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9v
cCk7Ci0KLSAgICBhZGp1c3RtZW50ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19nZXRfdmFkanVzdG1l
bnQoR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZF93aW5kb3cpKTsKLSAgICBnX2Fzc2VydF9j
bXBmbG9hdChndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUoYWRqdXN0bWVudCksID09LCAwLjApOwot
Ci0gICAgLyogU2luY2Ugd2Via2l0X3dlYl92aWV3X2V4ZWN1dGVfc2NyaXB0IGRvZXMgbm90IHJl
dHVybiBhIHZhbHVlLAotICAgICAgIGl0IGlzIGltcG9zc2libGUgdG8ga25vdyBpZiBhbiBpbm5l
ciBkb2N1bWVudCBoYXMgZm9jdXMgYWZ0ZXIKLSAgICAgICBhIG5vZGUgb2YgaXQgd2FzIGZvY3Vz
ZWQgdmlhIC5mb2N1cygpIG1ldGhvZC4KLSAgICAgICBUaGUgY29kZSBiZWxvdyBpcyBhbiB3b3Jr
YXJvdW5kOiBpZiB0aGUgbm9kZSBoYXMgZm9jdXMsIGEgc2Nyb2xsCi0gICAgICAgYWN0aW9uIGlz
IHBlcmZvcm1lZCBhbmQgYWZ0ZXJ3YXJkIGl0IGlzIGNoZWNrZWQgaWYgdGhlIGFkanVzdG1lbnQK
LSAgICAgICBoYXMgdG8gYmUgZGlmZmVyZW50IGZyb20gMC4KLSAgICAqLwotICAgIGNoYXIgc2Ny
aXB0W10gPSAidmFyIGlubmVyRG9jID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcuZnJhbWVzWzBdLmRv
Y3VtZW50OyBcCi0gICAgICAgICAgICAgICAgICAgICBpbm5lckRvYy5nZXRFbGVtZW50QnlJZChc
ImxpbmtcIikuZm9jdXMoKTsgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgIGlm
IChpbm5lckRvYy5oYXNGb2N1cygpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNjcm9sbEJ5KDAsIDEwMCk7IjsKLQotICAg
IC8qIEZvY3VzIGFuIGVsZW1lbnQgdXNpbmcgSmF2YVNjcmlwdCAqLwotICAgIHdlYmtpdF93ZWJf
dmlld19leGVjdXRlX3NjcmlwdCh2aWV3LCBzY3JpcHQpOwotCi0gICAgLyogQWRqdXN0bWVudHMg
dXBkYXRlIGFzeW5jaHJvbm91c2x5LCBzbyB3ZSBtdXN0IHdhaXQgYSBiaXQuICovCi0gICAgZ190
aW1lb3V0X2FkZCgxMDAsIHF1aXRfYWZ0ZXJfc2hvcnRfZGVsYXlfY2IsIGxvb3ApOwotICAgIGdf
bWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIC8qIE1ha2Ugc3VyZSB0aGUgU2Nyb2xsZWRXaW5k
b3cgbm90aWNlZCB0aGUgc2Nyb2xsICovCi0gICAgZ19hc3NlcnRfY21wZmxvYXQoZ3RrX2FkanVz
dG1lbnRfZ2V0X3ZhbHVlKGFkanVzdG1lbnQpLCAhPSwgMC4wKTsKLQotICAgIGdfZnJlZSh1cmkp
OwotICAgIGd0a193aWRnZXRfZGVzdHJveSh3aW5kb3cpOwotfQotCi1zdGF0aWMgdm9pZCBkb190
ZXN0X3dlYmtpdF93ZWJfdmlld19hZGp1c3RtZW50cyhnYm9vbGVhbiB3aXRoX3BhZ2VfY2FjaGUp
Ci17Ci0gICAgY2hhciogZWZmZWN0aXZlX3VyaSA9IGdfc3RyY29uY2F0KGJhc2VfdXJpLCAiYmln
ZGl2Lmh0bWwiLCBOVUxMKTsKLSAgICBjaGFyKiBzZWNvbmRfdXJpID0gZ19zdHJjb25jYXQoYmFz
ZV91cmksICJpZnJhbWUuaHRtbCIsIE5VTEwpOwotICAgIEd0a1dpZGdldCogd2luZG93ID0gZ3Rr
X3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7Ci0gICAgR3RrV2lkZ2V0KiBzY3JvbGxl
ZF93aW5kb3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldyhOVUxMLCBOVUxMKTsKLSAgICBXZWJL
aXRXZWJWaWV3KiB2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7
Ci0gICAgR3RrQWRqdXN0bWVudCogYWRqdXN0bWVudDsKLSAgICBkb3VibGUgbG93ZXI7Ci0gICAg
ZG91YmxlIHVwcGVyOwotCi0gICAgaWYgKHdpdGhfcGFnZV9jYWNoZSkgewotICAgICAgICBXZWJL
aXRXZWJTZXR0aW5ncyogc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHZp
ZXcpOwotICAgICAgICBnX29iamVjdF9zZXQoc2V0dGluZ3MsICJlbmFibGUtcGFnZS1jYWNoZSIs
IFRSVUUsIE5VTEwpOwotICAgIH0KLQotICAgIGd0a193aW5kb3dfc2V0X2RlZmF1bHRfc2l6ZShH
VEtfV0lORE9XKHdpbmRvdyksIDQwMCwgMjAwKTsKLQotICAgIGd0a19jb250YWluZXJfYWRkKEdU
S19DT05UQUlORVIod2luZG93KSwgc2Nyb2xsZWRfd2luZG93KTsKLSAgICBndGtfY29udGFpbmVy
X2FkZChHVEtfQ09OVEFJTkVSKHNjcm9sbGVkX3dpbmRvdyksIEdUS19XSURHRVQodmlldykpOwot
Ci0gICAgZ3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5KEdUS19TQ1JPTExFRF9XSU5ET1co
c2Nyb2xsZWRfd2luZG93KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RL
X1BPTElDWV9BVVRPTUFUSUMsIEdUS19QT0xJQ1lfQVVUT01BVElDKTsKLQotICAgIGxvb3AgPSBn
X21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0KLSAgICBnX29iamVjdF9jb25uZWN0KEdfT0JK
RUNUKHZpZXcpLAotICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6bm90aWZ5Ojpsb2FkLXN0
YXR1cyIsIGlkbGVfcXVpdF9sb29wX2NiLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgTlVM
TCk7Ci0KLSAgICAvKiBXYWl0IGZvciB3aW5kb3cgdG8gc2hvdyB1cCAqLwotICAgIGd0a193aWRn
ZXRfc2hvd19hbGwod2luZG93KTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHdpbmRvdywgIm1hcC1l
dmVudCIsCi0gICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKG1hcF9ldmVudF9jYiksIGxv
b3ApOwotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIC8qIExvYWQgYSBwYWdlIHdp
dGggYSBiaWcgZGl2IHRoYXQgd2lsbCBjYXVzZSBzY3JvbGxiYXJzIHRvIGFwcGVhciAqLwotICAg
IHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh2aWV3LCBlZmZlY3RpdmVfdXJpKTsKLSAgICBnX21h
aW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICAvKiBBZGp1c3RtZW50cyB1cGRhdGUgYXN5bmNocm9u
b3VzbHksIHNvIHdlIG11c3Qgd2FpdCBhIGJpdC4gKi8KLSAgICBnX3RpbWVvdXRfYWRkKDEwMCwg
cXVpdF9hZnRlcl9zaG9ydF9kZWxheV9jYiwgbG9vcCk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxv
b3ApOwotCi0gICAgYWRqdXN0bWVudCA9IGd0a19zY3JvbGxlZF93aW5kb3dfZ2V0X3ZhZGp1c3Rt
ZW50KEdUS19TQ1JPTExFRF9XSU5ET1coc2Nyb2xsZWRfd2luZG93KSk7Ci0gICAgZ19hc3NlcnRf
Y21wZmxvYXQoZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKGFkanVzdG1lbnQpLCA9PSwgMC4wKTsK
LQotICAgIGxvd2VyID0gZ3RrX2FkanVzdG1lbnRfZ2V0X2xvd2VyKGFkanVzdG1lbnQpOwotICAg
IHVwcGVyID0gZ3RrX2FkanVzdG1lbnRfZ2V0X3VwcGVyKGFkanVzdG1lbnQpOwotCi0gICAgLyog
U2Nyb2xsIHRoZSB2aWV3IHVzaW5nIEphdmFTY3JpcHQgKi8KLSAgICB3ZWJraXRfd2ViX3ZpZXdf
ZXhlY3V0ZV9zY3JpcHQodmlldywgIndpbmRvdy5zY3JvbGxCeSgwLCAxMDApIik7Ci0KLSAgICAv
KiBBZGp1c3RtZW50cyB1cGRhdGUgYXN5bmNocm9ub3VzbHksIHNvIHdlIG11c3Qgd2FpdCBhIGJp
dC4gKi8KLSAgICBnX3RpbWVvdXRfYWRkKDEwMCwgcXVpdF9hZnRlcl9zaG9ydF9kZWxheV9jYiwg
bG9vcCk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgLyogTWFrZSBzdXJlIHRo
ZSBTY3JvbGxlZFdpbmRvdyBub3RpY2VkIHRoZSBzY3JvbGwgKi8KLSAgICBnX2Fzc2VydF9jbXBm
bG9hdChndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUoYWRqdXN0bWVudCksID09LCAxMDAuMCk7Ci0K
LSAgICAvKiBMb2FkIGEgc2Vjb25kIFVSSSAqLwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3Vy
aSh2aWV3LCBzZWNvbmRfdXJpKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICAv
KiBUaGUgcGFnZSBsb2FkZWQgYnV0IHRoZSBhZGp1c3RtZW50cyBtYXkgbm90IGJlIHVwZGF0ZWQg
eWV0LiBXYWl0IGEgYml0LiAqLwotICAgIGdfdGltZW91dF9hZGQoMTAwLCBxdWl0X2FmdGVyX3No
b3J0X2RlbGF5X2NiLCBsb29wKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICAv
KiBNYWtlIHN1cmUgdGhlIHNjcm9sbGJhciBoYXMgYmVlbiByZXNldCAqLwotICAgIGdfYXNzZXJ0
X2NtcGZsb2F0KGd0a19hZGp1c3RtZW50X2dldF92YWx1ZShhZGp1c3RtZW50KSwgPT0sIDAuMCk7
Ci0KLSAgICAvKiBHbyBiYWNrICovCi0gICAgd2Via2l0X3dlYl92aWV3X2dvX2JhY2sodmlldyk7
Ci0KLSAgICAvKiBXaGVuIHVzaW5nIHBhZ2UgY2FjaGUsIGdvX2JhY2sgd2lsbCByZXR1cm4gc3lu
Y3Jvbm91c2x5ICovCi0gICAgaWYgKCF3aXRoX3BhZ2VfY2FjaGUpCi0gICAgICAgIGdfbWFpbl9s
b29wX3J1bihsb29wKTsKLQotICAgIC8qIE1ha2Ugc3VyZSBHVEsrIGhhcyB0aW1lIHRvIHByb2Nl
c3MgdGhlIGNoYW5nZXMgaW4gc2l6ZSwgZm9yIHRoZSBhZGp1c21lbnRzICovCi0gICAgd2hpbGUg
KGd0a19ldmVudHNfcGVuZGluZygpKQotICAgICAgICBndGtfbWFpbl9pdGVyYXRpb24oKTsKLQot
ICAgIC8qIE1ha2Ugc3VyZSB1cHBlciBhbmQgbG93ZXIgYm91bmRzIGhhdmUgYmVlbiByZXN0b3Jl
ZCBjb3JyZWN0bHkgKi8KLSAgICBnX2Fzc2VydF9jbXBmbG9hdChsb3dlciwgPT0sIGd0a19hZGp1
c3RtZW50X2dldF9sb3dlcihhZGp1c3RtZW50KSk7Ci0gICAgZ19hc3NlcnRfY21wZmxvYXQodXBw
ZXIsID09LCBndGtfYWRqdXN0bWVudF9nZXRfdXBwZXIoYWRqdXN0bWVudCkpOwotICAgIGdfYXNz
ZXJ0X2NtcGZsb2F0KGd0a19hZGp1c3RtZW50X2dldF92YWx1ZShhZGp1c3RtZW50KSwgPT0sIDEw
MC4wKTsKLQotICAgIGdfZnJlZShlZmZlY3RpdmVfdXJpKTsKLSAgICBnX2ZyZWUoc2Vjb25kX3Vy
aSk7Ci0KLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93KTsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdF93ZWJraXRfd2ViX3ZpZXdfYWRqdXN0bWVudHMoKQotewotICAgIC8qIFRlc3QgdGhpcyB3
aXRoIHBhZ2UgY2FjaGUgZGlzYWJsZWQsIGFuZCBlbmFibGVkLiAqLwotICAgIGRvX3Rlc3Rfd2Vi
a2l0X3dlYl92aWV3X2FkanVzdG1lbnRzKEZBTFNFKTsKLSAgICBkb190ZXN0X3dlYmtpdF93ZWJf
dmlld19hZGp1c3RtZW50cyhUUlVFKTsKLX0KLQotZ2Jvb2xlYW4gZGVsYXllZF9kZXN0cm95KGdw
b2ludGVyIGRhdGEpCi17Ci0gICAgZ3RrX3dpZGdldF9kZXN0cm95KEdUS19XSURHRVQoZGF0YSkp
OwotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1z
dGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfdmlld19kZXN0cm95KCkKLXsKLSAgICBHdGtXaWRn
ZXQqIHdpbmRvdzsKLSAgICBHdGtXaWRnZXQqIHdlYl92aWV3OwotCi0gICAgd2luZG93ID0gZ3Rr
X3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7Ci0gICAgd2ViX3ZpZXcgPSB3ZWJraXRf
d2ViX3ZpZXdfbmV3KCk7Ci0KLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdp
bmRvdyksIHdlYl92aWV3KTsKLQotICAgIGd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTsKLQot
ICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0KLSAgICBnX3NpZ25hbF9j
b25uZWN0KHdpbmRvdywgIm1hcC1ldmVudCIsCi0gICAgICAgICAgICAgICAgICAgICBHX0NBTExC
QUNLKG1hcF9ldmVudF9jYiksIGxvb3ApOwotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQot
ICAgIGdfaWRsZV9hZGQoZGVsYXllZF9kZXN0cm95LCB3ZWJfdmlldyk7Ci0gICAgZ19tYWluX2xv
b3BfcnVuKGxvb3ApOwotCi0gICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7Ci19Ci0KLXN0
YXRpYyB2b2lkIHRlc3Rfd2Via2l0X3dlYl92aWV3X3dpbmRvd19mZWF0dXJlcygpCi17Ci0gICAg
R3RrV2lkZ2V0KiB3aW5kb3c7Ci0gICAgR3RrV2lkZ2V0KiB3ZWJfdmlldzsKLSAgICAKLSAgICB3
aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVMKTsKLSAgICB3ZWJfdmll
dyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKLSAgICAKLSAgICBndGtfY29udGFpbmVyX2FkZChH
VEtfQ09OVEFJTkVSKHdpbmRvdyksIHdlYl92aWV3KTsKLSAgICAKLSAgICBndGtfd2lkZ2V0X3No
b3dfYWxsKHdpbmRvdyk7Ci0gICAgCi0gICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBU
UlVFKTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LCAibWFwLWV2ZW50IiwKLSAgICAg
ICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobWFwX2V2ZW50X2NiKSwgbG9vcCk7Ci0gICAgZ19t
YWluX2xvb3BfcnVuKGxvb3ApOwotICAgIAotICAgIC8qIEJ1ZyAjMzYxNDQgKi8KLSAgICBnX29i
amVjdF9zZXQoR19PQkpFQ1Qod2ViX3ZpZXcpLCAid2luZG93LWZlYXR1cmVzIiwgTlVMTCwgTlVM
TCk7Ci0gICAgCi0gICAgZ3RrX3dpZGdldF9kZXN0cm95KHdpbmRvdyk7Ci19ICAgIAotCi1zdGF0
aWMgdm9pZCB0ZXN0X3dlYmtpdF93ZWJfdmlld19pbl9vZmZzY3JlZW5fd2luZG93X2RvZXNfbm90
X2NyYXNoKCkKLXsKLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotCi0g
ICAgR3RrV2lkZ2V0ICp3aW5kb3cgPSBndGtfb2Zmc2NyZWVuX3dpbmRvd19uZXcoKTsKLSAgICBH
dGtXaWRnZXQgKndlYl92aWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOwotCi0gICAgZ3RrX2Nv
bnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB3ZWJfdmlldyk7Ci0gICAgZ3RrX3dp
ZGdldF9zaG93X2FsbCh3aW5kb3cpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViX3ZpZXcsICJu
b3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyhpZGxlX3F1aXRfbG9vcF9jYiksIE5VTEwp
OwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShXRUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcp
LCBiYXNlX3VyaSk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBndGtfd2lk
Z2V0X2Rlc3Ryb3kod2luZG93KTsKLSAgICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKLX0KLQot
c3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZG9lc19ub3Rfc3RlYWxfZm9jdXMoKQot
ewotICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7Ci0KLSAgICBHdGtXaWRn
ZXQgKndpbmRvdyA9IGd0a19vZmZzY3JlZW5fd2luZG93X25ldygpOwotICAgIEd0a1dpZGdldCAq
d2ViVmlldyA9IHdlYmtpdF93ZWJfdmlld19uZXcoKTsKLSAgICBHdGtXaWRnZXQgKmVudHJ5ID0g
Z3RrX2VudHJ5X25ldygpOwotCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBHdGtXaWRn
ZXQgKmJveCA9IGd0a19oYm94X25ldyhGQUxTRSwgMCk7Ci0jZWxzZQotICAgIEd0a1dpZGdldCAq
Ym94ID0gZ3RrX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwsIDApOwotI2VuZGlm
Ci0KLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGJveCksIHdlYlZpZXcpOwot
ICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoYm94KSwgZW50cnkpOwotICAgIGd0
a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgYm94KTsKLSAgICBndGtfd2lk
Z2V0X3Nob3dfYWxsKHdpbmRvdyk7Ci0KLSAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMoZW50cnkp
OwotICAgIGdfYXNzZXJ0KGd0a193aWRnZXRfaXNfZm9jdXMoZW50cnkpKTsKLQotICAgIGdfc2ln
bmFsX2Nvbm5lY3Qod2ViVmlldywgIm5vdGlmeTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLKGlk
bGVfcXVpdF9sb29wX2NiKSwgTlVMTCk7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfaHRtbF9z
dHJpbmcoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpLAotICAgICAgICAiPGh0bWw+PGJvZHk+Igot
ICAgICAgICAiICAgIDxpbnB1dCBpZD1cImVudHJ5XCIgdHlwZT1cInRleHRcIi8+IgotICAgICAg
ICAiICAgIDxzY3JpcHQ+IgotICAgICAgICAiICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZChcImVudHJ5XCIpLmZvY3VzKCk7IgotICAgICAgICAiICAgIDwvc2NyaXB0PiIKLSAgICAgICAg
IjwvYm9keT48L2h0bWw+IiwgImZpbGU6Ly8iKTsKLQotICAgIGdfbWFpbl9sb29wX3J1bihsb29w
KTsKLQotICAgIGdfYXNzZXJ0KGd0a193aWRnZXRfaXNfZm9jdXMoZW50cnkpKTsKLQotICAgIGd0
a193aWRnZXRfZGVzdHJveSh3aW5kb3cpOwotICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOwot
fQotCi1zdGF0aWMgZ2Jvb2xlYW4gZW1pdEtleVN0cm9rZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
KQotewotICAgIEdka0V2ZW50KiBwcmVzc0V2ZW50ID0gZ2RrX2V2ZW50X25ldyhHREtfS0VZX1BS
RVNTKTsKLSAgICBwcmVzc0V2ZW50LT5rZXkua2V5dmFsID0gR0RLX0tFWV9mOwotICAgIEdka1dp
bmRvdyogd2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQod2ViVmlldykp
OwotICAgIHByZXNzRXZlbnQtPmtleS53aW5kb3cgPSB3aW5kb3c7Ci0gICAgZ19vYmplY3RfcmVm
KHByZXNzRXZlbnQtPmtleS53aW5kb3cpOwotCi0jaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCi0g
ICAgR2RrRGV2aWNlTWFuYWdlciogbWFuYWdlciA9IGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFu
YWdlcihnZGtfd2luZG93X2dldF9kaXNwbGF5KHdpbmRvdykpOwotICAgIGdka19ldmVudF9zZXRf
ZGV2aWNlKHByZXNzRXZlbnQsIGdka19kZXZpY2VfbWFuYWdlcl9nZXRfY2xpZW50X3BvaW50ZXIo
bWFuYWdlcikpOwotI2VuZGlmCi0KLSAgICAvLyBXaGVuIHN5bnRoZXNpemluZyBhbiBldmVudCwg
YW4gaW52YWxpZCBoYXJkd2FyZV9rZXljb2RlIHZhbHVlCi0gICAgLy8gY2FuIGNhdXNlIGl0IHRv
IGJlIGJhZGx5IHByb2Nlc3NlZCBieSBHdGsrLgotICAgIEdka0tleW1hcEtleSoga2V5czsKLSAg
ICBnaW50IG5fa2V5czsKLSAgICBpZiAoZ2RrX2tleW1hcF9nZXRfZW50cmllc19mb3Jfa2V5dmFs
KGdka19rZXltYXBfZ2V0X2RlZmF1bHQoKSwgR0RLX0tFWV9mLCAma2V5cywgJm5fa2V5cykpIHsK
LSAgICAgICAgcHJlc3NFdmVudC0+a2V5LmhhcmR3YXJlX2tleWNvZGUgPSBrZXlzWzBdLmtleWNv
ZGU7Ci0gICAgICAgIGdfZnJlZShrZXlzKTsKLSAgICB9Ci0KLSAgICBHZGtFdmVudCogcmVsZWFz
ZUV2ZW50ID0gZ2RrX2V2ZW50X2NvcHkocHJlc3NFdmVudCk7Ci0gICAgZ3RrX21haW5fZG9fZXZl
bnQocHJlc3NFdmVudCk7Ci0gICAgZ2RrX2V2ZW50X2ZyZWUocHJlc3NFdmVudCk7Ci0gICAgcmVs
ZWFzZUV2ZW50LT5rZXkudHlwZSA9IEdES19LRVlfUkVMRUFTRTsKLSAgICBndGtfbWFpbl9kb19l
dmVudChyZWxlYXNlRXZlbnQpOwotICAgIGdka19ldmVudF9mcmVlKHJlbGVhc2VFdmVudCk7Ci0K
LSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBlbnRlcmluZ19mdWxsc2Ny
ZWVuX2NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdPYmplY3QqIGVsZW1lbnQsIGdib29sZWFu
IGJsb2NrZWQpCi17Ci0gICAgaWYgKGJsb2NrZWQpCi0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQo
bG9vcCk7Ci0gICAgZWxzZQotICAgICAgICBnX3RpbWVvdXRfYWRkKDIwMCwgKEdTb3VyY2VGdW5j
KSBlbWl0S2V5U3Ryb2tlLCB3ZWJWaWV3KTsKLSAgICByZXR1cm4gYmxvY2tlZDsKLX0KLQotc3Rh
dGljIGdib29sZWFuIGxlYXZpbmdfZnVsbHNjcmVlbl9jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
LCBHT2JqZWN0KiBlbGVtZW50LCBncG9pbnRlciBkYXRhKQotewotICAgIGdfbWFpbl9sb29wX3F1
aXQobG9vcCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X3dlYmtp
dF93ZWJfdmlld19mdWxsc2NyZWVuKGdjb25zdHBvaW50ZXIgYmxvY2tlZCkKLXsKLSAgICBHdGtX
aWRnZXQqIHdpbmRvdzsKLSAgICBHdGtXaWRnZXQqIHdlYl92aWV3OwotICAgIFdlYktpdFdlYlNl
dHRpbmdzICpzZXR0aW5nczsKLQotICAgIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5E
T1dfVE9QTEVWRUwpOwotICAgIHdlYl92aWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOwotCi0g
ICAgc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKFdFQktJVF9XRUJfVklF
Vyh3ZWJfdmlldykpOwotICAgIGdfb2JqZWN0X3NldChzZXR0aW5ncywgImVuYWJsZS1mdWxsc2Ny
ZWVuIiwgVFJVRSwgTlVMTCk7Ci0gICAgd2Via2l0X3dlYl92aWV3X3NldF9zZXR0aW5ncyhXRUJL
SVRfV0VCX1ZJRVcod2ViX3ZpZXcpLCBzZXR0aW5ncyk7Ci0KLSAgICBndGtfY29udGFpbmVyX2Fk
ZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHdlYl92aWV3KTsKLQotICAgIGd0a193aWRnZXRfc2hv
d19hbGwod2luZG93KTsKLQotICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVMTCwgVFJVRSk7
Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYl92aWV3LCAiZW50ZXJpbmctZnVsbHNjcmVlbiIs
IEdfQ0FMTEJBQ0soZW50ZXJpbmdfZnVsbHNjcmVlbl9jYiksIChncG9pbnRlcikgYmxvY2tlZCk7
Ci0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJfdmlldywgImxlYXZpbmctZnVsbHNjcmVlbiIsIEdf
Q0FMTEJBQ0sobGVhdmluZ19mdWxsc2NyZWVuX2NiKSwgTlVMTCk7Ci0KLSAgICB3ZWJraXRfd2Vi
X3ZpZXdfbG9hZF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVXKHdlYl92aWV3KSwgIjxodG1sPjxib2R5
PiIKLSAgICAgICAgICAgICAgICAgICAiPHNjcmlwdD4iCi0gICAgICAgICAgICAgICAgICAgInZh
ciBldmVudE5hbWUgPSAna2V5cHJlc3MnOyIKLSAgICAgICAgICAgICAgICAgICAiZG9jdW1lbnQu
YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGZ1bmN0aW9uICgpIHsiCi0gICAgICAgICAgICAg
ICAgICAgIiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQud2Via2l0UmVxdWVzdEZ1bGxTY3Jl
ZW4oKTsiCi0gICAgICAgICAgICAgICAgICAgIn0sIGZhbHNlKTsiCi0gICAgICAgICAgICAgICAg
ICAgIjwvc2NyaXB0PjwvYm9keT48L2h0bWw+IiwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0KLSAgICBn
X3RpbWVvdXRfYWRkKDEwMCwgKEdTb3VyY2VGdW5jKSBlbWl0S2V5U3Ryb2tlLCBXRUJLSVRfV0VC
X1ZJRVcod2ViX3ZpZXcpKTsKLSAgICBnX21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBndGtf
d2lkZ2V0X2Rlc3Ryb3kod2luZG93KTsKLX0KLQotc3RhdGljIGdib29sZWFuIGNoZWNrTWltZVR5
cGVGb3JGaWx0ZXIoR3RrRmlsZUZpbHRlciogZmlsdGVyLCBjb25zdCBnY2hhciogbWltZVR5cGUp
Ci17Ci0gICAgR3RrRmlsZUZpbHRlckluZm8gZmlsdGVyX2luZm87Ci0gICAgZmlsdGVyX2luZm8u
Y29udGFpbnMgPSBHVEtfRklMRV9GSUxURVJfTUlNRV9UWVBFOwotICAgIGZpbHRlcl9pbmZvLm1p
bWVfdHlwZSA9IG1pbWVUeXBlOwotICAgIHJldHVybiBndGtfZmlsZV9maWx0ZXJfZmlsdGVyKGZp
bHRlciwgJmZpbHRlcl9pbmZvKTsKLX0KLQotc3RhdGljIGdib29sZWFuIHJ1bkZpbGVDaG9vc2Vy
Q2JOb011bHRpc2VsTm9NaW1lKFdlYktpdFdlYlZpZXcqIHdlYnZpZXcsIFdlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdCogcmVxdWVzdCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBnX2Fzc2VydCghd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGUocmVxdWVzdCkpOwot
Ci0gICAgY29uc3QgZ2NoYXIqIGNvbnN0KiBtaW1lVHlwZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfZ2V0X21pbWVfdHlwZXMocmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoIW1pbWVUeXBl
cyk7Ci0gICAgR3RrRmlsZUZpbHRlciogZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1
ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihyZXF1ZXN0KTsKLSAgICBnX2Fzc2VydCghZmlsdGVy
KTsKLQotICAgIGNvbnN0IGdjaGFyKiBjb25zdCogc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxl
X2Nob29zZXJfcmVxdWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMocmVxdWVzdCk7Ci0gICAgZ19hc3Nl
cnQoIXNlbGVjdGVkRmlsZXMpOwotCi0gICAgZ19tYWluX2xvb3BfcXVpdChsb29wKTsKLSAgICBy
ZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuIHJ1bkZpbGVDaG9vc2VyQ2JNdWx0aXNl
bE5vTWltZShXZWJLaXRXZWJWaWV3KiB3ZWJ2aWV3LCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Qq
IHJlcXVlc3QsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19hc3NlcnQod2Via2l0X2ZpbGVfY2hv
b3Nlcl9yZXF1ZXN0X2dldF9zZWxlY3RfbXVsdGlwbGUocmVxdWVzdCkpOwotCi0gICAgY29uc3Qg
Z2NoYXIqIGNvbnN0KiBtaW1lVHlwZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0
X21pbWVfdHlwZXMocmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoIW1pbWVUeXBlcyk7Ci0gICAgR3Rr
RmlsZUZpbHRlciogZmlsdGVyID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1l
X3R5cGVzX2ZpbHRlcihyZXF1ZXN0KTsKLSAgICBnX2Fzc2VydCghZmlsdGVyKTsKLSAgICBjb25z
dCBnY2hhciogY29uc3QqIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVl
c3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKHJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZp
bGVzKTsKLQotICAgIC8vIFNlbGVjdCBzb21lIGZpbGVzLgotICAgIGNvbnN0IGdjaGFyKiBmaWxl
c1RvU2VsZWN0WzRdID0geyAiL2ZvbyIsICIvZm9vL2JhciIsICIvZm9vL2Jhci9iYXoiLCAwIH07
Ci0gICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X3NlbGVjdF9maWxlcyhyZXF1ZXN0LCBm
aWxlc1RvU2VsZWN0KTsKLQotICAgIC8vIENoZWNrIHRoZSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBq
dXN0IHNlbGVjdGVkLgotICAgIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2VyX3Jl
cXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKHJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KHNlbGVjdGVk
RmlsZXMpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzBdLCA9PSwgIi9mb28i
KTsKLSAgICBnX2Fzc2VydF9jbXBzdHIoc2VsZWN0ZWRGaWxlc1sxXSwgPT0sICIvZm9vL2JhciIp
OwotICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzJdLCA9PSwgIi9mb28vYmFyL2Jh
eiIpOwotICAgIGdfYXNzZXJ0KCFzZWxlY3RlZEZpbGVzWzNdKTsKLQotICAgIGdfbWFpbl9sb29w
X3F1aXQobG9vcCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBydW5G
aWxlQ2hvb3NlckNiU2VsZWN0aW9uUmV0YWluZWQoV2ViS2l0V2ViVmlldyogd2VidmlldywgV2Vi
S2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0LCBncG9pbnRlciBkYXRhKQotewotICAgIGNv
bnN0IGdjaGFyKiBjb25zdCogc2VsZWN0ZWRGaWxlcyA9IHdlYmtpdF9maWxlX2Nob29zZXJfcmVx
dWVzdF9nZXRfc2VsZWN0ZWRfZmlsZXMocmVxdWVzdCk7Ci0gICAgZ19hc3NlcnQoc2VsZWN0ZWRG
aWxlcyk7Ci0gICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMF0sID09LCAiL2ZvbyIp
OwotICAgIGdfYXNzZXJ0X2NtcHN0cihzZWxlY3RlZEZpbGVzWzFdLCA9PSwgIi9mb28vYmFyIik7
Ci0gICAgZ19hc3NlcnRfY21wc3RyKHNlbGVjdGVkRmlsZXNbMl0sID09LCAiL2Zvby9iYXIvYmF6
Iik7Ci0gICAgZ19hc3NlcnQoIXNlbGVjdGVkRmlsZXNbM10pOwotCi0gICAgZ19tYWluX2xvb3Bf
cXVpdChsb29wKTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuIHJ1bkZp
bGVDaG9vc2VyQ2JOb011bHRpc2VsQWNjZXB0VHlwZXMoV2ViS2l0V2ViVmlldyogd2Vidmlldywg
V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0LCBncG9pbnRlciBkYXRhKQotewotICAg
IGdfYXNzZXJ0KCF3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfZ2V0X3NlbGVjdF9tdWx0aXBs
ZShyZXF1ZXN0KSk7Ci0KLSAgICBjb25zdCBnY2hhciogY29uc3QqIG1pbWVUeXBlcyA9IHdlYmtp
dF9maWxlX2Nob29zZXJfcmVxdWVzdF9nZXRfbWltZV90eXBlcyhyZXF1ZXN0KTsKLSAgICBnX2Fz
c2VydChtaW1lVHlwZXMpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihtaW1lVHlwZXNbMF0sID09LCAi
YXVkaW8vKiIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihtaW1lVHlwZXNbMV0sID09LCAidmlkZW8v
KiIpOwotICAgIGdfYXNzZXJ0X2NtcHN0cihtaW1lVHlwZXNbMl0sID09LCAiaW1hZ2UvKiIpOwot
ICAgIGdfYXNzZXJ0KCFtaW1lVHlwZXNbM10pOwotCi0gICAgR3RrRmlsZUZpbHRlciogZmlsdGVy
ID0gd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2dldF9taW1lX3R5cGVzX2ZpbHRlcihyZXF1
ZXN0KTsKLSAgICBnX2Fzc2VydChHVEtfSVNfRklMRV9GSUxURVIoZmlsdGVyKSk7Ci0gICAgZ19h
c3NlcnQoY2hlY2tNaW1lVHlwZUZvckZpbHRlcihmaWx0ZXIsICJhdWRpby8qIikpOwotICAgIGdf
YXNzZXJ0KGNoZWNrTWltZVR5cGVGb3JGaWx0ZXIoZmlsdGVyLCAidmlkZW8vKiIpKTsKLSAgICBn
X2Fzc2VydChjaGVja01pbWVUeXBlRm9yRmlsdGVyKGZpbHRlciwgImltYWdlLyoiKSk7Ci0KLSAg
ICBjb25zdCBnY2hhciogY29uc3QqIHNlbGVjdGVkRmlsZXMgPSB3ZWJraXRfZmlsZV9jaG9vc2Vy
X3JlcXVlc3RfZ2V0X3NlbGVjdGVkX2ZpbGVzKHJlcXVlc3QpOwotICAgIGdfYXNzZXJ0KCFzZWxl
Y3RlZEZpbGVzKTsKLQotICAgIGdfbWFpbl9sb29wX3F1aXQobG9vcCk7Ci0gICAgcmV0dXJuIFRS
VUU7Ci19Ci0KLXZvaWQgZG9Nb3VzZUJ1dHRvbkV2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtF
dmVudFR5cGUgZXZlbnRUeXBlLCBpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBidXR0b24sIHVu
c2lnbmVkIGludCBtb2RpZmllcnMpCi17Ci0gICAgZ19hc3NlcnQoZ3RrX3dpZGdldF9nZXRfcmVh
bGl6ZWQod2lkZ2V0KSk7Ci0KLSAgICBHZGtFdmVudCogZXZlbnQgPSBnZGtfZXZlbnRfbmV3KGV2
ZW50VHlwZSk7Ci0gICAgZXZlbnQtPmJ1dHRvbi53aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5k
b3cod2lkZ2V0KTsKLSAgICBnX29iamVjdF9yZWYoZXZlbnQtPmJ1dHRvbi53aW5kb3cpOwotCi0g
ICAgZXZlbnQtPmJ1dHRvbi50aW1lID0gR0RLX0NVUlJFTlRfVElNRTsKLSAgICBldmVudC0+YnV0
dG9uLnggPSB4OwotICAgIGV2ZW50LT5idXR0b24ueSA9IHk7Ci0gICAgZXZlbnQtPmJ1dHRvbi5h
eGVzID0gMDsKLSAgICBldmVudC0+YnV0dG9uLnN0YXRlID0gbW9kaWZpZXJzOwotICAgIGV2ZW50
LT5idXR0b24uYnV0dG9uID0gYnV0dG9uOwotCi0jaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCi0g
ICAgZXZlbnQtPmJ1dHRvbi5kZXZpY2UgPSBnZGtfZGV2aWNlX21hbmFnZXJfZ2V0X2NsaWVudF9w
b2ludGVyKGdka19kaXNwbGF5X2dldF9kZXZpY2VfbWFuYWdlcihndGtfd2lkZ2V0X2dldF9kaXNw
bGF5KHdpZGdldCkpKTsKLSNlbmRpZgotCi0gICAgaW50IHhSb290LCB5Um9vdDsKLSAgICBnZGtf
d2luZG93X2dldF9yb290X2Nvb3JkcyhndGtfd2lkZ2V0X2dldF93aW5kb3cod2lkZ2V0KSwgeCwg
eSwgJnhSb290LCAmeVJvb3QpOwotICAgIGV2ZW50LT5idXR0b24ueF9yb290ID0geFJvb3Q7Ci0g
ICAgZXZlbnQtPmJ1dHRvbi55X3Jvb3QgPSB5Um9vdDsKLSAgICBndGtfbWFpbl9kb19ldmVudChl
dmVudCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNsaWNrTW91c2VCdXR0b24oR3RrV2lkZ2V0KiB3aWRn
ZXQsIGludCB4LCBpbnQgeSwgdW5zaWduZWQgaW50IGJ1dHRvbiwgdW5zaWduZWQgaW50IG1vZGlm
aWVycykKLXsKLSAgICBkb01vdXNlQnV0dG9uRXZlbnQod2lkZ2V0LCBHREtfQlVUVE9OX1BSRVNT
LCB4LCB5LCBidXR0b24sIG1vZGlmaWVycyk7Ci0gICAgZG9Nb3VzZUJ1dHRvbkV2ZW50KHdpZGdl
dCwgR0RLX0JVVFRPTl9SRUxFQVNFLCB4LCB5LCBidXR0b24sIG1vZGlmaWVycyk7Ci19Ci0KLXN0
YXRpYyBnYm9vbGVhbiBjbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckZpbGVDaG9vc2VyUmVxdWVz
dChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQotewotICAgIGNsaWNrTW91c2VCdXR0b24oR1RLX1dJ
REdFVCh3ZWJWaWV3KSwgNSwgNSwgMSwgMCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRp
YyB2b2lkIHRlc3Rfd2Via2l0X3dlYl92aWV3X2ZpbGVfY2hvb3NlcigpCi17Ci0gICAgY29uc3Qg
Z2NoYXIqIGh0bWxGb3JtYXRCYXNlID0gIjxodG1sPjxib2R5PiIKLSAgICAgICAgICAgICI8aW5w
dXQgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDttYXJnaW46MDtwYWRkaW5n
OjAnIHR5cGU9J2ZpbGUnICVzLz4iCi0gICAgICAgICAgICAiPC9ib2R5PjwvaHRtbD4iOwotCi0g
ICAgR3RrV2lkZ2V0KiB3aW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1RPUExFVkVM
KTsKLSAgICBHdGtXaWRnZXQqIHdlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Ci0gICAg
Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB3ZWJWaWV3KTsKLSAgICBn
dGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7Ci0KLSAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3
KE5VTEwsIFRSVUUpOwotCi0gICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9ucyBub3QgYWxsb3dlZCwg
bm8gTUlNRSBmaWx0ZXJpbmcuCi0gICAgZ3Vsb25nIGhhbmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0
KHdlYlZpZXcsICJydW4tZmlsZS1jaG9vc2VyIiwgR19DQUxMQkFDSyhydW5GaWxlQ2hvb3NlckNi
Tm9NdWx0aXNlbE5vTWltZSksIE5VTEwpOwotICAgIGdjaGFyKiBodG1sRm9ybWF0ID0gZ19zdHJk
dXBfcHJpbnRmKGh0bWxGb3JtYXRCYXNlLCAiIik7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRf
c3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSwgaHRtbEZvcm1hdCwgTlVMTCwgTlVMTCwg
TlVMTCk7Ci0gICAgZ19mcmVlKGh0bWxGb3JtYXQpOwotCi0gICAgZ190aW1lb3V0X2FkZCgxMDAs
IChHU291cmNlRnVuYykgY2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVl
c3QsIFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSk7Ci0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3Ap
OwotCi0gICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KHdlYlZpZXcsIGhhbmRsZXIpOwot
Ci0gICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9ucyBhbGxvd2VkLCBubyBNSU1FIGZpbHRlcmluZywg
c29tZSBwcmUtc2VsZWN0ZWQgZmlsZXMuCi0gICAgaGFuZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3Qo
d2ViVmlldywgInJ1bi1maWxlLWNob29zZXIiLCBHX0NBTExCQUNLKHJ1bkZpbGVDaG9vc2VyQ2JN
dWx0aXNlbE5vTWltZSksIE5VTEwpOwotICAgIGh0bWxGb3JtYXQgPSBnX3N0cmR1cF9wcmludGYo
aHRtbEZvcm1hdEJhc2UsICJtdWx0aXBsZSIpOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0
cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldyksIGh0bWxGb3JtYXQsIE5VTEwsIE5VTEwsIE5V
TEwpOwotICAgIGdfZnJlZShodG1sRm9ybWF0KTsKLQotICAgIGdfdGltZW91dF9hZGQoMTAwLCAo
R1NvdXJjZUZ1bmMpIGNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0
LCBXRUJLSVRfV0VCX1ZJRVcod2ViVmlldykpOwotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsK
LQotICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCh3ZWJWaWV3LCBoYW5kbGVyKTsKLQot
ICAgIC8vIFBlcmZvcm0gYW5vdGhlciByZXF1ZXN0IHRvIGNoZWNrIGlmIHRoZSBsaXN0IG9mIGZp
bGVzIHNlbGVjdGVkCi0gICAgLy8gaW4gdGhlIHByZXZpb3VzIHN0ZXAgYXBwZWFycyBub3cgYXMg
cGFydCBvZiB0aGUgbmV3IHJlcXVlc3QuCi0gICAgaGFuZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3Qo
d2ViVmlldywgInJ1bi1maWxlLWNob29zZXIiLCBHX0NBTExCQUNLKHJ1bkZpbGVDaG9vc2VyQ2JT
ZWxlY3Rpb25SZXRhaW5lZCksIE5VTEwpOwotICAgIGdfdGltZW91dF9hZGQoMTAwLCAoR1NvdXJj
ZUZ1bmMpIGNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yRmlsZUNob29zZXJSZXF1ZXN0LCBXRUJL
SVRfV0VCX1ZJRVcod2ViVmlldykpOwotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAg
IGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCh3ZWJWaWV3LCBoYW5kbGVyKTsKLQotICAgIC8v
IE11bHRpcGxlIHNlbGVjdGlvbnMgbm90IGFsbG93ZWQsIG9ubHkgYWNjZXB0IGltYWdlcywgYXVk
aW8gYW5kIHZpZGVvIGZpbGVzLgotICAgIGhhbmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KHdlYlZp
ZXcsICJydW4tZmlsZS1jaG9vc2VyIiwgR19DQUxMQkFDSyhydW5GaWxlQ2hvb3NlckNiTm9NdWx0
aXNlbEFjY2VwdFR5cGVzKSwgTlVMTCk7Ci0gICAgaHRtbEZvcm1hdCA9IGdfc3RyZHVwX3ByaW50
ZihodG1sRm9ybWF0QmFzZSwgImFjY2VwdD0nYXVkaW8vKix2aWRlby8qLGltYWdlLyonIik7Ci0g
ICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSwg
aHRtbEZvcm1hdCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0gICAgZ19mcmVlKGh0bWxGb3JtYXQpOwot
Ci0gICAgZ190aW1lb3V0X2FkZCgxMDAsIChHU291cmNlRnVuYykgY2xpY2tNb3VzZUJ1dHRvbkFu
ZFdhaXRGb3JGaWxlQ2hvb3NlclJlcXVlc3QsIFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSk7Ci0g
ICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOwotCi0gICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25u
ZWN0KHdlYlZpZXcsIGhhbmRsZXIpOwotICAgIGd0a193aWRnZXRfZGVzdHJveSh3aW5kb3cpOwot
fQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCi17Ci0gICAgU291cFNlcnZlciog
c2VydmVyOwotICAgIFNvdXBVUkkqIHNvdXBfdXJpOwotCi0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJn
YywgJmFyZ3YsIE5VTEwpOwotCi0gICAgLyogSG9wZWZ1bGx5IG1ha2UgdGVzdCBpbmRlcGVuZGVu
dCBvZiB0aGUgcGF0aCBpdCdzIGNhbGxlZCBmcm9tLiAqLwotICAgIHRlc3R1dGlsc19yZWxhdGl2
ZV9jaGRpcigiVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvcmVzb3VyY2VzL3Rl
c3QuaHRtbCIsIGFyZ3ZbMF0pOwotCi0gICAgc2VydmVyID0gc291cF9zZXJ2ZXJfbmV3KFNPVVBf
U0VSVkVSX1BPUlQsIDAsIE5VTEwpOwotICAgIHNvdXBfc2VydmVyX3J1bl9hc3luYyhzZXJ2ZXIp
OwotCi0gICAgc291cF9zZXJ2ZXJfYWRkX2hhbmRsZXIoc2VydmVyLCBOVUxMLCBzZXJ2ZXJfY2Fs
bGJhY2ssIE5VTEwsIE5VTEwpOwotCi0gICAgc291cF91cmkgPSBzb3VwX3VyaV9uZXcoImh0dHA6
Ly8xMjcuMC4wLjEvIik7Ci0gICAgc291cF91cmlfc2V0X3BvcnQoc291cF91cmksIHNvdXBfc2Vy
dmVyX2dldF9wb3J0KHNlcnZlcikpOwotCi0gICAgYmFzZV91cmkgPSBzb3VwX3VyaV90b19zdHJp
bmcoc291cF91cmksIEZBTFNFKTsKLSAgICBzb3VwX3VyaV9mcmVlKHNvdXBfdXJpKTsKLQotICAg
IGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0
X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvaWNvbi11cmkiLCB0ZXN0X3dlYmtpdF93ZWJfdmll
d19pY29uX3VyaSk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvYWRqdXN0
bWVudHMiLCB0ZXN0X3dlYmtpdF93ZWJfdmlld19hZGp1c3RtZW50cyk7Ci0gICAgZ190ZXN0X2Fk
ZF9mdW5jKCIvd2Via2l0L3dlYnZpZXcvZGVzdHJveSIsIHRlc3Rfd2Via2l0X3dlYl92aWV3X2Rl
c3Ryb3kpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L2dyYWJfZm9jdXMi
LCB0ZXN0X3dlYmtpdF93ZWJfdmlld19ncmFiX2ZvY3VzKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMo
Ii93ZWJraXQvd2Vidmlldy93aW5kb3ctZmVhdHVyZXMiLCB0ZXN0X3dlYmtpdF93ZWJfdmlld193
aW5kb3dfZmVhdHVyZXMpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L3dl
YnZpZXctaW4tb2Zmc2NyZWVuLXdpbmRvdy1kb2VzLW5vdC1jcmFzaCIsIHRlc3Rfd2Via2l0X3dl
Yl92aWV3X2luX29mZnNjcmVlbl93aW5kb3dfZG9lc19ub3RfY3Jhc2gpOwotICAgIGdfdGVzdF9h
ZGRfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L3dlYnZpZXctZG9lcy1ub3Qtc3RlYWwtZm9jdXMiLCB0
ZXN0X3dlYmtpdF93ZWJfdmlld19kb2VzX25vdF9zdGVhbF9mb2N1cyk7Ci0gICAgZ190ZXN0X2Fk
ZF9kYXRhX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9mdWxsc2NyZWVuIiwgR0lOVF9UT19QT0lOVEVS
KEZBTFNFKSwgdGVzdF93ZWJraXRfd2ViX3ZpZXdfZnVsbHNjcmVlbik7Ci0gICAgZ190ZXN0X2Fk
ZF9kYXRhX2Z1bmMoIi93ZWJraXQvd2Vidmlldy9mdWxsc2NyZWVuLWJsb2NrZWQiLCBHSU5UX1RP
X1BPSU5URVIoVFJVRSksIHRlc3Rfd2Via2l0X3dlYl92aWV3X2Z1bGxzY3JlZW4pOwotICAgIGdf
dGVzdF9hZGRfZnVuYygiL3dlYmtpdC93ZWJ2aWV3L2ZpbGUtY2hvb3NlciIsIHRlc3Rfd2Via2l0
X3dlYl92aWV3X2ZpbGVfY2hvb3Nlcik7Ci0KLSAgICByZXR1cm4gZ190ZXN0X3J1biAoKTsKLX0K
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3aW5k
b3cuYyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL3Rlc3R3aW5kb3cuYwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWVkYTQ3YjEyNzdkNjVkY2I1OGUxZTM3OWE3
YTJiY2VlNjZhNWEwYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay90ZXN0d2luZG93LmMKKysr
IC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBD
b2xsYWJvcmEgTHRkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgot
I2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotc3RhdGljIHZvaWQgbm90aWZ5X2xvYWRfc3Rh
dHVzX2NiKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBHUGFyYW1TcGVjKiBwc3BlYywgZ3BvaW50
ZXIgZGF0YSkKLXsKLSAgICBpZiAod2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJf
dmlldykgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQpIHsKLSAgICAgICAgR01haW5Mb29wKiBsb29w
ID0gKEdNYWluTG9vcCopZGF0YTsKLQotICAgICAgICBnX21haW5fbG9vcF9xdWl0KGxvb3ApOwot
ICAgIH0KLX0KLQotc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfd2luZG93X3Njcm9sbGJhcl9wb2xp
Y3kodm9pZCkKLXsKLSAgICBHTWFpbkxvb3AqIGxvb3A7Ci0gICAgR3RrV2lkZ2V0KiBzY3JvbGxl
ZFdpbmRvdzsKLSAgICBHdGtXaWRnZXQqIHdlYlZpZXc7Ci0gICAgV2ViS2l0V2ViRnJhbWUqIG1h
aW5GcmFtZTsKLSAgICBHdGtQb2xpY3lUeXBlIGhvcml6b250YWxQb2xpY3k7Ci0gICAgR3RrUG9s
aWN5VHlwZSB2ZXJ0aWNhbFBvbGljeTsKLQotICAgIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoTlVM
TCwgVFJVRSk7Ci0KLSAgICBzY3JvbGxlZFdpbmRvdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3
KE5VTEwsIE5VTEwpOwotICAgIGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X3BvbGljeShHVEtfU0NS
T0xMRURfV0lORE9XKHNjcm9sbGVkV2luZG93KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR1RLX1BPTElDWV9BVVRPTUFUSUMsIEdUS19QT0xJQ1lfQVVUT01BVElDKTsKLQot
ICAgIHdlYlZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Ci0gICAgZ19vYmplY3RfcmVmX3Np
bmsod2ViVmlldyk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJub3RpZnk6Omxv
YWQtc3RhdHVzIiwKLSAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sobm90aWZ5X2xvYWRf
c3RhdHVzX2NiKSwgbG9vcCk7Ci0KLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVS
KHNjcm9sbGVkV2luZG93KSwgd2ViVmlldyk7Ci0KLSAgICBtYWluRnJhbWUgPSB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X21haW5fZnJhbWUoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpKTsKLQotICAgIC8q
IFRlc3Qgd2UgY29ycmVjdGx5IGFwcGx5IHBvbGljeSBmb3Igbm90IGhhdmluZyBzY3JvbGxiYXJz
OyBUaGlzCi0gICAgICogY2FzZSBpcyBzcGVjaWFsLCBiZWNhdXNlIHdlIHR1cm4gdGhlIHBvbGlj
eSBmcm9tIE5FVkVSIHRvCi0gICAgICogQVVUT01BVElDLCBzaW5jZSB3ZSBjYW5ub3QgZWFzaWx5
IHJlcHJlc2VudCB0aGUgc2FtZSB0aGluZwotICAgICAqIHVzaW5nIEd0a1Njcm9sbGVkV2luZG93
ICovCi0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfaHRtbF9zdHJpbmcoV0VCS0lUX1dFQl9WSUVX
KHdlYlZpZXcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8aHRtbD48
Ym9keT5XZWJLaXQhPC9ib2R5PjxzY3JpcHQ+ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
J2JvZHknKVswXS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nOzwvc2NyaXB0PjwvaHRtbD4iLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlOi8vIik7Ci0KLSAgICBn
X21haW5fbG9vcF9ydW4obG9vcCk7Ci0KLSAgICBndGtfc2Nyb2xsZWRfd2luZG93X2dldF9wb2xp
Y3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzY3JvbGxlZFdpbmRvdyksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZob3Jpem9udGFsUG9saWN5LCAmdmVydGljYWxQb2xpY3kpOwot
Ci0gICAgZ19hc3NlcnQoaG9yaXpvbnRhbFBvbGljeSA9PSBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7
Ci0gICAgZ19hc3NlcnQodmVydGljYWxQb2xpY3kgPT0gR1RLX1BPTElDWV9BVVRPTUFUSUMpOwot
Ci0gICAgZ19hc3NlcnQoR1RLX1BPTElDWV9ORVZFUiA9PSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9o
b3Jpem9udGFsX3Njcm9sbGJhcl9wb2xpY3kobWFpbkZyYW1lKSk7Ci0gICAgZ19hc3NlcnQoR1RL
X1BPTElDWV9ORVZFUiA9PSB3ZWJraXRfd2ViX2ZyYW1lX2dldF92ZXJ0aWNhbF9zY3JvbGxiYXJf
cG9saWN5KG1haW5GcmFtZSkpOwotCi0gICAgLyogVGVzdCB3ZSBjb3JyZWN0bHkgYXBwbHkgcG9s
aWN5IGZvciBhbHdheXMgaGF2aW5nIHNjcm9sbGJhcnMgKi8KLSAgICB3ZWJraXRfd2ViX3ZpZXdf
bG9hZF9odG1sX3N0cmluZyhXRUJLSVRfV0VCX1ZJRVcod2ViVmlldyksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIjxodG1sPjxib2R5PldlYktpdCE8L2JvZHk+PHNjcmlw
dD5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdLnN0eWxlLm92ZXJmbG93
ID0gJ3Njcm9sbCc7PC9zY3JpcHQ+PC9odG1sPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImZpbGU6Ly8iKTsKLQotICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQot
ICAgIGd0a19zY3JvbGxlZF93aW5kb3dfZ2V0X3BvbGljeShHVEtfU0NST0xMRURfV0lORE9XKHNj
cm9sbGVkV2luZG93KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvcml6
b250YWxQb2xpY3ksICZ2ZXJ0aWNhbFBvbGljeSk7Ci0KLSAgICBnX2Fzc2VydChob3Jpem9udGFs
UG9saWN5ID09IEdUS19QT0xJQ1lfQUxXQVlTKTsKLSAgICBnX2Fzc2VydCh2ZXJ0aWNhbFBvbGlj
eSA9PSBHVEtfUE9MSUNZX0FMV0FZUyk7Ci0KLSAgICBnX2Fzc2VydChob3Jpem9udGFsUG9saWN5
ID09IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X2hvcml6b250YWxfc2Nyb2xsYmFyX3BvbGljeShtYWlu
RnJhbWUpKTsKLSAgICBnX2Fzc2VydCh2ZXJ0aWNhbFBvbGljeSA9PSB3ZWJraXRfd2ViX2ZyYW1l
X2dldF92ZXJ0aWNhbF9zY3JvbGxiYXJfcG9saWN5KG1haW5GcmFtZSkpOwotCi0gICAgLyogVGVz
dCB3ZSBjb3JyZWN0bHkgYXBwbHkgcG9saWN5IGZvciBoYXZpbmcgc2Nyb2xsYmFycyB3aGVuIG5l
ZWRlZCAqLwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX2h0bWxfc3RyaW5nKFdFQktJVF9XRUJf
VklFVyh3ZWJWaWV3KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGh0
bWw+PGJvZHk+V2ViS2l0ITwvYm9keT48c2NyaXB0PmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdO
YW1lKCdib2R5JylbMF0uc3R5bGUub3ZlcmZsb3cgPSAnYXV0byc7PC9zY3JpcHQ+PC9odG1sPiIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGU6Ly8iKTsKLQotICAg
IGdfbWFpbl9sb29wX3J1bihsb29wKTsKLQotICAgIGd0a19zY3JvbGxlZF93aW5kb3dfZ2V0X3Bv
bGljeShHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVkV2luZG93KSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJmhvcml6b250YWxQb2xpY3ksICZ2ZXJ0aWNhbFBvbGljeSk7
Ci0KLSAgICBnX2Fzc2VydChob3Jpem9udGFsUG9saWN5ID09IEdUS19QT0xJQ1lfQVVUT01BVElD
KTsKLSAgICBnX2Fzc2VydCh2ZXJ0aWNhbFBvbGljeSA9PSBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7
Ci0KLSAgICBnX2Fzc2VydChob3Jpem9udGFsUG9saWN5ID09IHdlYmtpdF93ZWJfZnJhbWVfZ2V0
X2hvcml6b250YWxfc2Nyb2xsYmFyX3BvbGljeShtYWluRnJhbWUpKTsKLSAgICBnX2Fzc2VydCh2
ZXJ0aWNhbFBvbGljeSA9PSB3ZWJraXRfd2ViX2ZyYW1lX2dldF92ZXJ0aWNhbF9zY3JvbGxiYXJf
cG9saWN5KG1haW5GcmFtZSkpOwotCi0gICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Ci19Ci0K
LWludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBndGtfdGVzdF9pbml0KCZh
cmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53
ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC93aW5kb3cvc2Nyb2xs
YmFyX3BvbGljeSIsIHRlc3Rfd2Via2l0X3dpbmRvd19zY3JvbGxiYXJfcG9saWN5KTsKLSAgICBy
ZXR1cm4gZ190ZXN0X3J1biAoKTsKLX0K
</data>

          </attachment>
      

    </bug>

</bugzilla>